diff --git a/dist/cjs/index.js b/dist/cjs/index.js deleted file mode 100644 index cb91e8e..0000000 --- a/dist/cjs/index.js +++ /dev/null @@ -1,27 +0,0 @@ -var v$=Object.create;var{getPrototypeOf:p$,defineProperty:DO,getOwnPropertyNames:u6,getOwnPropertyDescriptor:h$}=Object,c6=Object.prototype.hasOwnProperty;var X_=(_,E,R)=>{R=_!=null?v$(p$(_)):{};let N=E||!_||!_.__esModule?DO(R,"default",{value:_,enumerable:!0}):R;for(let A of u6(_))if(!c6.call(N,A))DO(N,A,{get:()=>_[A],enumerable:!0});return N},i6=new WeakMap,PT=(_)=>{var E=i6.get(_),R;if(E)return E;if(E=DO({},"__esModule",{value:!0}),_&&typeof _==="object"||typeof _==="function")u6(_).map((N)=>!c6.call(E,N)&&DO(E,N,{get:()=>_[N],enumerable:!(R=h$(_,N))||R.enumerable}));return i6.set(_,E),E},j=(_,E)=>()=>(E||_((E={exports:{}}).exports,E),E.exports);var YT=(_,E)=>{for(var R in E)DO(_,R,{get:E[R],enumerable:!0,configurable:!0,set:(N)=>E[R]=()=>N})};var dE=(_,E)=>()=>(_&&(E=_(_=0)),E);function t_(){let _=process.env.DSQL_HTTP_SCHEME,E=process.env.DSQL_LOCAL_HOST,R=process.env.DSQL_LOCAL_HOST_PORT,N=process.env.DSQL_API_REMOTE_HOST?.match(/.*\..*/)?process.env.DSQL_API_REMOTE_HOST:void 0,A=process.env.DSQL_API_REMOTE_HOST_PORT?.match(/./)?process.env.DSQL_API_REMOTE_HOST_PORT:void 0;return{host:N||E||"datasquirel.com",port:A||R||443,scheme:_?.match(/^http$/i)?l6.default:d6.default,user_id:String(process.env.DSQL_API_USER_ID||0)}}var d6,l6;var aE=dE(()=>{d6=X_(require("https")),l6=X_(require("http"))});var SI=j((HT,SO)=>{(function(){var _,E="4.17.21",R=200,N="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",A="Expected a function",L="Invalid `variable` option passed into `_.template`",U="__lodash_hash_undefined__",G=500,S="__lodash_placeholder__",C=1,Y=2,M=4,H=1,X=2,$=1,z=2,w=4,g=8,d=16,t=32,s=64,m=128,k=256,e=512,o=30,c="...",S_=800,U_=16,V_=1,K_=2,z_=3,r=1/0,A_=9007199254740991,L_=179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,P_=NaN,p_=4294967295,l_=p_-1,j_=p_>>>1,a=[["ary",m],["bind",$],["bindKey",z],["curry",g],["curryRight",d],["flip",e],["partial",t],["partialRight",s],["rearg",k]],WE="[object Arguments]",q_="[object Array]",k_="[object AsyncFunction]",n_="[object Boolean]",e_="[object Date]",V="[object DOMException]",J="[object Error]",Q="[object Function]",i="[object GeneratorFunction]",v="[object Map]",y="[object Number]",n="[object Null]",f="[object Object]",x="[object Promise]",u="[object Proxy]",b="[object RegExp]",E_="[object Set]",H_="[object String]",I_="[object Symbol]",G_="[object Undefined]",W_="[object WeakMap]",x_="[object WeakSet]",Q_="[object ArrayBuffer]",b_="[object DataView]",JE="[object Float32Array]",_1="[object Float64Array]",$1="[object Int8Array]",Z1="[object Int16Array]",LR="[object Int32Array]",QN="[object Uint8Array]",sE="[object Uint8ClampedArray]",qE="[object Uint16Array]",UE="[object Uint32Array]",EM=/\b__p \+= '';/g,RM=/\b(__p \+=) '' \+/g,NM=/(__e\(.*?\)|\b__t\)) \+\n'';/g,CD=/&(?:amp|lt|gt|quot|#39);/g,PD=/[&<>"']/g,TM=RegExp(CD.source),OM=RegExp(PD.source),AM=/<%-([\s\S]+?)%>/g,IM=/<%([\s\S]+?)%>/g,YD=/<%=([\s\S]+?)%>/g,LM=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,UM=/^\w*$/,GM=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,_U=/[\\^$.*+?()[\]{}|]/g,DM=RegExp(_U.source),EU=/^\s+/,SM=/\s/,CM=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,PM=/\{\n\/\* \[wrapped with (.+)\] \*/,YM=/,? & /,HM=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,WM=/[()=,{}\[\]\/\s]/,MM=/\\(\\)?/g,FM=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,HD=/\w*$/,BM=/^[-+]0x[0-9a-f]+$/i,VM=/^0b[01]+$/i,KM=/^\[object .+?Constructor\]$/,XM=/^0o[0-7]+$/i,JM=/^(?:0|[1-9]\d*)$/,$M=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,JA=/($^)/,ZM=/['\n\r\u2028\u2029\\]/g,$A="\\ud800-\\udfff",wM="\\u0300-\\u036f",QM="\\ufe20-\\ufe2f",zM="\\u20d0-\\u20ff",WD=wM+QM+zM,MD="\\u2700-\\u27bf",FD="a-z\\xdf-\\xf6\\xf8-\\xff",xM="\\xac\\xb1\\xd7\\xf7",qM="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",fM="\\u2000-\\u206f",jM=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",BD="A-Z\\xc0-\\xd6\\xd8-\\xde",VD="\\ufe0e\\ufe0f",KD=xM+qM+fM+jM,RU="['\u2019]",vM="["+$A+"]",XD="["+KD+"]",ZA="["+WD+"]",JD="\\d+",pM="["+MD+"]",$D="["+FD+"]",ZD="[^"+$A+KD+JD+MD+FD+BD+"]",NU="\\ud83c[\\udffb-\\udfff]",hM="(?:"+ZA+"|"+NU+")",wD="[^"+$A+"]",TU="(?:\\ud83c[\\udde6-\\uddff]){2}",OU="[\\ud800-\\udbff][\\udc00-\\udfff]",ET="["+BD+"]",QD="\\u200d",zD="(?:"+$D+"|"+ZD+")",kM="(?:"+ET+"|"+ZD+")",xD="(?:"+RU+"(?:d|ll|m|re|s|t|ve))?",qD="(?:"+RU+"(?:D|LL|M|RE|S|T|VE))?",fD=hM+"?",jD="["+VD+"]?",mM="(?:"+QD+"(?:"+[wD,TU,OU].join("|")+")"+jD+fD+")*",gM="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",yM="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",vD=jD+fD+mM,bM="(?:"+[pM,TU,OU].join("|")+")"+vD,iM="(?:"+[wD+ZA+"?",ZA,TU,OU,vM].join("|")+")",uM=RegExp(RU,"g"),cM=RegExp(ZA,"g"),AU=RegExp(NU+"(?="+NU+")|"+iM+vD,"g"),dM=RegExp([ET+"?"+$D+"+"+xD+"(?="+[XD,ET,"$"].join("|")+")",kM+"+"+qD+"(?="+[XD,ET+zD,"$"].join("|")+")",ET+"?"+zD+"+"+xD,ET+"+"+qD,yM,gM,JD,bM].join("|"),"g"),lM=RegExp("["+QD+$A+WD+VD+"]"),nM=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,oM=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],sM=-1,DE={};DE[JE]=DE[_1]=DE[$1]=DE[Z1]=DE[LR]=DE[QN]=DE[sE]=DE[qE]=DE[UE]=!0,DE[WE]=DE[q_]=DE[Q_]=DE[n_]=DE[b_]=DE[e_]=DE[J]=DE[Q]=DE[v]=DE[y]=DE[f]=DE[b]=DE[E_]=DE[H_]=DE[W_]=!1;var GE={};GE[WE]=GE[q_]=GE[Q_]=GE[b_]=GE[n_]=GE[e_]=GE[JE]=GE[_1]=GE[$1]=GE[Z1]=GE[LR]=GE[v]=GE[y]=GE[f]=GE[b]=GE[E_]=GE[H_]=GE[I_]=GE[QN]=GE[sE]=GE[qE]=GE[UE]=!0,GE[J]=GE[Q]=GE[W_]=!1;var tM={"\xC0":"A","\xC1":"A","\xC2":"A","\xC3":"A","\xC4":"A","\xC5":"A","\xE0":"a","\xE1":"a","\xE2":"a","\xE3":"a","\xE4":"a","\xE5":"a","\xC7":"C","\xE7":"c","\xD0":"D","\xF0":"d","\xC8":"E","\xC9":"E","\xCA":"E","\xCB":"E","\xE8":"e","\xE9":"e","\xEA":"e","\xEB":"e","\xCC":"I","\xCD":"I","\xCE":"I","\xCF":"I","\xEC":"i","\xED":"i","\xEE":"i","\xEF":"i","\xD1":"N","\xF1":"n","\xD2":"O","\xD3":"O","\xD4":"O","\xD5":"O","\xD6":"O","\xD8":"O","\xF2":"o","\xF3":"o","\xF4":"o","\xF5":"o","\xF6":"o","\xF8":"o","\xD9":"U","\xDA":"U","\xDB":"U","\xDC":"U","\xF9":"u","\xFA":"u","\xFB":"u","\xFC":"u","\xDD":"Y","\xFD":"y","\xFF":"y","\xC6":"Ae","\xE6":"ae","\xDE":"Th","\xFE":"th","\xDF":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010A":"C","\u010C":"C","\u0107":"c","\u0109":"c","\u010B":"c","\u010D":"c","\u010E":"D","\u0110":"D","\u010F":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011A":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011B":"e","\u011C":"G","\u011E":"G","\u0120":"G","\u0122":"G","\u011D":"g","\u011F":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012A":"I","\u012C":"I","\u012E":"I","\u0130":"I","\u0129":"i","\u012B":"i","\u012D":"i","\u012F":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013B":"L","\u013D":"L","\u013F":"L","\u0141":"L","\u013A":"l","\u013C":"l","\u013E":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014A":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014B":"n","\u014C":"O","\u014E":"O","\u0150":"O","\u014D":"o","\u014F":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015A":"S","\u015C":"S","\u015E":"S","\u0160":"S","\u015B":"s","\u015D":"s","\u015F":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016A":"U","\u016C":"U","\u016E":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016B":"u","\u016D":"u","\u016F":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017B":"Z","\u017D":"Z","\u017A":"z","\u017C":"z","\u017E":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017F":"s"},rM={"&":"&","<":"<",">":">",'"':""","'":"'"},aM={"&":"&","<":"<",">":">",""":'"',"'":"'"},eM={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},_F=parseFloat,EF=parseInt,pD=typeof global=="object"&&global&&global.Object===Object&&global,RF=typeof self=="object"&&self&&self.Object===Object&&self,hE=pD||RF||Function("return this")(),IU=typeof HT=="object"&&HT&&!HT.nodeType&&HT,w1=IU&&typeof SO=="object"&&SO&&!SO.nodeType&&SO,hD=w1&&w1.exports===IU,LU=hD&&pD.process,mR=function(){try{var p=w1&&w1.require&&w1.require("util").types;if(p)return p;return LU&&LU.binding&&LU.binding("util")}catch(__){}}(),kD=mR&&mR.isArrayBuffer,mD=mR&&mR.isDate,gD=mR&&mR.isMap,yD=mR&&mR.isRegExp,bD=mR&&mR.isSet,iD=mR&&mR.isTypedArray;function ZR(p,__,l){switch(l.length){case 0:return p.call(__);case 1:return p.call(__,l[0]);case 2:return p.call(__,l[0],l[1]);case 3:return p.call(__,l[0],l[1],l[2])}return p.apply(__,l)}function NF(p,__,l,C_){var f_=-1,s_=p==null?0:p.length;while(++f_-1}function UU(p,__,l){var C_=-1,f_=p==null?0:p.length;while(++C_-1);return l}function tD(p,__){var l=p.length;while(l--&&RT(__,p[l],0)>-1);return l}function SF(p,__){var l=p.length,C_=0;while(l--)if(p[l]===__)++C_;return C_}var CF=CU(tM),PF=CU(rM);function YF(p){return"\\"+eM[p]}function HF(p,__){return p==null?_:p[__]}function NT(p){return lM.test(p)}function WF(p){return nM.test(p)}function MF(p){var __,l=[];while(!(__=p.next()).done)l.push(__.value);return l}function WU(p){var __=-1,l=Array(p.size);return p.forEach(function(C_,f_){l[++__]=[f_,C_]}),l}function rD(p,__){return function(l){return p(__(l))}}function N1(p,__){var l=-1,C_=p.length,f_=0,s_=[];while(++l-1}function OB(O,I){var D=this.__data__,P=cA(D,O);if(P<0)++this.size,D.push([O,I]);else D[P][1]=I;return this}zN.prototype.clear=EB,zN.prototype.delete=RB,zN.prototype.get=NB,zN.prototype.has=TB,zN.prototype.set=OB;function xN(O){var I=-1,D=O==null?0:O.length;this.clear();while(++I=I?O:I}return O}function iR(O,I,D,P,W,B){var Z,q=I&C,h=I&Y,R_=I&M;if(D)Z=W?D(O,P,W,B):D(O);if(Z!==_)return Z;if(!VE(O))return O;var N_=v_(O);if(N_){if(Z=UV(O),!q)return UR(O,Z)}else{var O_=rE(O),D_=O_==Q||O_==i;if(G1(O))return j4(O,q);if(O_==f||O_==WE||D_&&!W){if(Z=h||D_?{}:a4(O),!q)return h?aB(O,VB(Z,O)):rB(O,U4(Z,O))}else{if(!GE[O_])return W?O:{};Z=GV(O,O_,q)}}B||(B=new eR);var B_=B.get(O);if(B_)return B_;if(B.set(O,Z),w6(O))O.forEach(function(w_){Z.add(iR(w_,I,D,w_,O,B))});else if($6(O))O.forEach(function(w_,u_){Z.set(u_,iR(w_,I,D,u_,O,B))});var Z_=R_?h?uU:iU:h?DR:kE,m_=N_?_:Z_(O);return gR(m_||O,function(w_,u_){if(m_)u_=w_,w_=O[u_];RO(Z,u_,iR(w_,I,D,u_,O,B))}),Z}function KB(O){var I=kE(O);return function(D){return G4(D,O,I)}}function G4(O,I,D){var P=D.length;if(O==null)return!P;O=AE(O);while(P--){var W=D[P],B=I[W],Z=O[W];if(Z===_&&!(W in O)||!B(Z))return!1}return!0}function D4(O,I,D){if(typeof O!="function")throw new yR(A);return UO(function(){O.apply(_,D)},I)}function NO(O,I,D,P){var W=-1,B=wA,Z=!0,q=O.length,h=[],R_=I.length;if(!q)return h;if(D)I=ME(I,wR(D));if(P)B=UU,Z=!1;else if(I.length>=R)B=tT,Z=!1,I=new x1(I);_:while(++WW?0:W+D;if(P=P===_||P>W?W:h_(P),P<0)P+=W;P=D>P?0:z6(P);while(D0&&D(q))if(I>1)cE(q,I-1,D,P,W);else R1(W,q);else if(!P)W[W.length]=q}return W}var JU=g4(),P4=g4(!0);function DN(O,I){return O&&JU(O,I,kE)}function $U(O,I){return O&&P4(O,I,kE)}function lA(O,I){return E1(I,function(D){return pN(O[D])})}function f1(O,I){I=L1(I,O);var D=0,P=I.length;while(O!=null&&DI}function $B(O,I){return O!=null&&EE.call(O,I)}function ZB(O,I){return O!=null&&I in AE(O)}function wB(O,I,D){return O>=tE(I,D)&&O=120&&N_.length>=120)?new x1(Z&&N_):_}N_=O[0];var O_=-1,D_=q[0];_:while(++O_-1){if(q!==O)kA.call(q,h,1);kA.call(O,h,1)}}return O}function $4(O,I){var D=O?I.length:0,P=D-1;while(D--){var W=I[D];if(D==P||W!==B){var B=W;if(vN(W))kA.call(O,W,1);else pU(O,W)}}return O}function fU(O,I){return O+yA(O4()*(I-O+1))}function yB(O,I,D,P){var W=-1,B=jE(gA((I-O)/(D||1)),0),Z=l(B);while(B--)Z[P?B:++W]=O,O+=D;return Z}function jU(O,I){var D="";if(!O||I<1||I>A_)return D;do{if(I%2)D+=O;if(I=yA(I/2),I)O+=O}while(I);return D}function y_(O,I){return tU(E6(O,I,SR),O+"")}function bB(O){return L4(CT(O))}function iB(O,I){var D=CT(O);return NI(D,q1(I,0,D.length))}function AO(O,I,D,P){if(!VE(O))return O;I=L1(I,O);var W=-1,B=I.length,Z=B-1,q=O;while(q!=null&&++WW?0:W+I;if(D=D>W?W:D,D<0)D+=W;W=I>D?0:D-I>>>0,I>>>=0;var B=l(W);while(++P>>1,Z=O[B];if(Z!==null&&!zR(Z)&&(D?Z<=I:Z=R){var R_=I?null:RV(O);if(R_)return zA(R_);Z=!1,W=tT,h=new x1}else h=I?[]:q;_:while(++P=P?O:uR(O,I,D)}var f4=jF||function(O){return hE.clearTimeout(O)};function j4(O,I){if(I)return O.slice();var D=O.length,P=_4?_4(D):new O.constructor(D);return O.copy(P),P}function gU(O){var I=new O.constructor(O.byteLength);return new pA(I).set(new pA(O)),I}function nB(O,I){var D=I?gU(O.buffer):O.buffer;return new O.constructor(D,O.byteOffset,O.byteLength)}function oB(O){var I=new O.constructor(O.source,HD.exec(O));return I.lastIndex=O.lastIndex,I}function sB(O){return EO?AE(EO.call(O)):{}}function v4(O,I){var D=I?gU(O.buffer):O.buffer;return new O.constructor(D,O.byteOffset,O.length)}function p4(O,I){if(O!==I){var D=O!==_,P=O===null,W=O===O,B=zR(O),Z=I!==_,q=I===null,h=I===I,R_=zR(I);if(!q&&!R_&&!B&&O>I||B&&Z&&h&&!q&&!R_||P&&Z&&h||!D&&h||!W)return 1;if(!P&&!B&&!R_&&O=q)return h;var R_=D[P];return h*(R_=="desc"?-1:1)}}return O.index-I.index}function h4(O,I,D,P){var W=-1,B=O.length,Z=D.length,q=-1,h=I.length,R_=jE(B-Z,0),N_=l(h+R_),O_=!P;while(++q1?D[W-1]:_,Z=W>2?D[2]:_;if(B=O.length>3&&typeof B=="function"?(W--,B):_,Z&&NR(D[0],D[1],Z))B=W<3?_:B,W=1;I=AE(I);while(++P-1?W[B?I[Z]:Z]:_}}function i4(O){return jN(function(I){var D=I.length,P=D,W=bR.prototype.thru;if(O)I.reverse();while(P--){var B=I[P];if(typeof B!="function")throw new yR(A);if(W&&!Z&&EI(B)=="wrapper")var Z=new bR([],!0)}P=Z?P:D;while(++P1)d_.reverse();if(N_&&hq))return!1;var R_=B.get(O),N_=B.get(I);if(R_&&N_)return R_==I&&N_==O;var O_=-1,D_=!0,B_=D&X?new x1:_;B.set(O,I),B.set(I,O);while(++O_1?"& ":"")+I[P],I=I.join(D>2?", ":" "),O.replace(CM,"{\n/* [wrapped with "+I+"] */\n")}function SV(O){return v_(O)||p1(O)||!!(N4&&O&&O[N4])}function vN(O,I){var D=typeof O;return I=I==null?A_:I,!!I&&(D=="number"||D!="symbol"&&JM.test(O))&&(O>-1&&O%1==0&&O0){if(++I>=S_)return arguments[0]}else I=0;return O.apply(_,arguments)}}function NI(O,I){var D=-1,P=O.length,W=P-1;I=I===_?P:I;while(++D1?O[I-1]:_;return D=typeof D=="function"?(O.pop(),D):_,C6(O,D)});function P6(O){var I=F(O);return I.__chain__=!0,I}function XK(O,I){return I(O),O}function TI(O,I){return I(O)}var JK=jN(function(O){var I=O.length,D=I?O[0]:0,P=this.__wrapped__,W=function(B){return XU(B,O)};if(I>1||this.__actions__.length||!(P instanceof c_)||!vN(D))return this.thru(W);return P=P.slice(D,+D+(I?1:0)),P.__actions__.push({func:TI,args:[W],thisArg:_}),new bR(P,this.__chain__).thru(function(B){if(I&&!B.length)B.push(_);return B})});function $K(){return P6(this)}function ZK(){return new bR(this.value(),this.__chain__)}function wK(){if(this.__values__===_)this.__values__=Q6(this.value());var O=this.__index__>=this.__values__.length,I=O?_:this.__values__[this.__index__++];return{done:O,value:I}}function QK(){return this}function zK(O){var I,D=this;while(D instanceof uA){var P=I6(D);if(P.__index__=0,P.__values__=_,I)W.__wrapped__=P;else I=P;var W=P;D=D.__wrapped__}return W.__wrapped__=O,I}function xK(){var O=this.__wrapped__;if(O instanceof c_){var I=O;if(this.__actions__.length)I=new c_(this);return I=I.reverse(),I.__actions__.push({func:TI,args:[rU],thisArg:_}),new bR(I,this.__chain__)}return this.thru(rU)}function qK(){return x4(this.__wrapped__,this.__actions__)}var fK=tA(function(O,I,D){if(EE.call(O,D))++O[D];else qN(O,D,1)});function jK(O,I,D){var P=v_(O)?uD:XB;if(D&&NR(O,I,D))I=_;return P(O,$_(I,3))}function vK(O,I){var D=v_(O)?E1:C4;return D(O,$_(I,3))}var pK=b4(L6),hK=b4(U6);function kK(O,I){return cE(OI(O,I),1)}function mK(O,I){return cE(OI(O,I),r)}function gK(O,I,D){return D=D===_?1:h_(D),cE(OI(O,I),D)}function Y6(O,I){var D=v_(O)?gR:A1;return D(O,$_(I,3))}function H6(O,I){var D=v_(O)?TF:S4;return D(O,$_(I,3))}var yK=tA(function(O,I,D){if(EE.call(O,D))O[D].push(I);else qN(O,D,[I])});function bK(O,I,D,P){O=GR(O)?O:CT(O),D=D&&!P?h_(D):0;var W=O.length;if(D<0)D=jE(W+D,0);return GI(O)?D<=W&&O.indexOf(I,D)>-1:!!W&&RT(O,I,D)>-1}var iK=y_(function(O,I,D){var P=-1,W=typeof I=="function",B=GR(O)?l(O.length):[];return A1(O,function(Z){B[++P]=W?ZR(I,Z,D):TO(Z,I,D)}),B}),uK=tA(function(O,I,D){qN(O,D,I)});function OI(O,I){var D=v_(O)?ME:F4;return D(O,$_(I,3))}function cK(O,I,D,P){if(O==null)return[];if(!v_(I))I=I==null?[]:[I];if(D=P?_:D,!v_(D))D=D==null?[]:[D];return X4(O,I,D)}var dK=tA(function(O,I,D){O[D?0:1].push(I)},function(){return[[],[]]});function lK(O,I,D){var P=v_(O)?GU:nD,W=arguments.length<3;return P(O,$_(I,4),D,W,A1)}function nK(O,I,D){var P=v_(O)?OF:nD,W=arguments.length<3;return P(O,$_(I,4),D,W,S4)}function oK(O,I){var D=v_(O)?E1:C4;return D(O,LI($_(I,3)))}function sK(O){var I=v_(O)?L4:bB;return I(O)}function tK(O,I,D){if(D?NR(O,I,D):I===_)I=1;else I=h_(I);var P=v_(O)?MB:iB;return P(O,I)}function rK(O){var I=v_(O)?FB:cB;return I(O)}function aK(O){if(O==null)return 0;if(GR(O))return GI(O)?TT(O):O.length;var I=rE(O);if(I==v||I==E_)return O.size;return zU(O).length}function eK(O,I,D){var P=v_(O)?DU:dB;if(D&&NR(O,I,D))I=_;return P(O,$_(I,3))}var _X=y_(function(O,I){if(O==null)return[];var D=I.length;if(D>1&&NR(O,I[0],I[1]))I=[];else if(D>2&&NR(I[0],I[1],I[2]))I=[I[0]];return X4(O,cE(I,1),[])}),AI=vF||function(){return hE.Date.now()};function EX(O,I){if(typeof I!="function")throw new yR(A);return O=h_(O),function(){if(--O<1)return I.apply(this,arguments)}}function W6(O,I,D){return I=D?_:I,I=O&&I==null?O.length:I,fN(O,m,_,_,_,_,I)}function M6(O,I){var D;if(typeof I!="function")throw new yR(A);return O=h_(O),function(){if(--O>0)D=I.apply(this,arguments);if(O<=1)I=_;return D}}var eU=y_(function(O,I,D){var P=$;if(D.length){var W=N1(D,DT(eU));P|=t}return fN(O,P,I,D,W)}),F6=y_(function(O,I,D){var P=$|z;if(D.length){var W=N1(D,DT(F6));P|=t}return fN(I,P,O,D,W)});function B6(O,I,D){I=D?_:I;var P=fN(O,g,_,_,_,_,_,I);return P.placeholder=B6.placeholder,P}function V6(O,I,D){I=D?_:I;var P=fN(O,d,_,_,_,_,_,I);return P.placeholder=V6.placeholder,P}function K6(O,I,D){var P,W,B,Z,q,h,R_=0,N_=!1,O_=!1,D_=!0;if(typeof O!="function")throw new yR(A);if(I=dR(I)||0,VE(D))N_=!!D.leading,O_="maxWait"in D,B=O_?jE(dR(D.maxWait)||0,I):B,D_="trailing"in D?!!D.trailing:D_;function B_(wE){var EN=P,kN=W;return P=W=_,R_=wE,Z=O.apply(kN,EN),Z}function Z_(wE){return R_=wE,q=UO(u_,I),N_?B_(wE):Z}function m_(wE){var EN=wE-h,kN=wE-R_,b6=I-EN;return O_?tE(b6,B-kN):b6}function w_(wE){var EN=wE-h,kN=wE-R_;return h===_||EN>=I||EN<0||O_&&kN>=B}function u_(){var wE=AI();if(w_(wE))return d_(wE);q=UO(u_,m_(wE))}function d_(wE){if(q=_,D_&&P)return B_(wE);return P=W=_,Z}function xR(){if(q!==_)f4(q);R_=0,P=h=W=q=_}function TR(){return q===_?Z:d_(AI())}function qR(){var wE=AI(),EN=w_(wE);if(P=arguments,W=this,h=wE,EN){if(q===_)return Z_(h);if(O_)return f4(q),q=UO(u_,I),B_(h)}if(q===_)q=UO(u_,I);return Z}return qR.cancel=xR,qR.flush=TR,qR}var RX=y_(function(O,I){return D4(O,1,I)}),NX=y_(function(O,I,D){return D4(O,dR(I)||0,D)});function TX(O){return fN(O,e)}function II(O,I){if(typeof O!="function"||I!=null&&typeof I!="function")throw new yR(A);var D=function(){var P=arguments,W=I?I.apply(this,P):P[0],B=D.cache;if(B.has(W))return B.get(W);var Z=O.apply(this,P);return D.cache=B.set(W,Z)||B,Z};return D.cache=new(II.Cache||xN),D}II.Cache=xN;function LI(O){if(typeof O!="function")throw new yR(A);return function(){var I=arguments;switch(I.length){case 0:return!O.call(this);case 1:return!O.call(this,I[0]);case 2:return!O.call(this,I[0],I[1]);case 3:return!O.call(this,I[0],I[1],I[2])}return!O.apply(this,I)}}function OX(O){return M6(2,O)}var AX=lB(function(O,I){I=I.length==1&&v_(I[0])?ME(I[0],wR($_())):ME(cE(I,1),wR($_()));var D=I.length;return y_(function(P){var W=-1,B=tE(P.length,D);while(++W=I}),p1=H4(function(){return arguments}())?H4:function(O){return $E(O)&&EE.call(O,"callee")&&!R4.call(O,"callee")},v_=l.isArray,VX=kD?wR(kD):zB;function GR(O){return O!=null&&UI(O.length)&&!pN(O)}function ZE(O){return $E(O)&&GR(O)}function KX(O){return O===!0||O===!1||$E(O)&&RR(O)==n_}var G1=hF||D0,XX=mD?wR(mD):xB;function JX(O){return $E(O)&&O.nodeType===1&&!GO(O)}function $X(O){if(O==null)return!0;if(GR(O)&&(v_(O)||typeof O=="string"||typeof O.splice=="function"||G1(O)||ST(O)||p1(O)))return!O.length;var I=rE(O);if(I==v||I==E_)return!O.size;if(LO(O))return!zU(O).length;for(var D in O)if(EE.call(O,D))return!1;return!0}function ZX(O,I){return OO(O,I)}function wX(O,I,D){D=typeof D=="function"?D:_;var P=D?D(O,I):_;return P===_?OO(O,I,_,D):!!P}function E0(O){if(!$E(O))return!1;var I=RR(O);return I==J||I==V||typeof O.message=="string"&&typeof O.name=="string"&&!GO(O)}function QX(O){return typeof O=="number"&&T4(O)}function pN(O){if(!VE(O))return!1;var I=RR(O);return I==Q||I==i||I==k_||I==u}function J6(O){return typeof O=="number"&&O==h_(O)}function UI(O){return typeof O=="number"&&O>-1&&O%1==0&&O<=A_}function VE(O){var I=typeof O;return O!=null&&(I=="object"||I=="function")}function $E(O){return O!=null&&typeof O=="object"}var $6=gD?wR(gD):fB;function zX(O,I){return O===I||QU(O,I,dU(I))}function xX(O,I,D){return D=typeof D=="function"?D:_,QU(O,I,dU(I),D)}function qX(O){return Z6(O)&&O!=+O}function fX(O){if(YV(O))throw new f_(N);return W4(O)}function jX(O){return O===null}function vX(O){return O==null}function Z6(O){return typeof O=="number"||$E(O)&&RR(O)==y}function GO(O){if(!$E(O)||RR(O)!=f)return!1;var I=hA(O);if(I===null)return!0;var D=EE.call(I,"constructor")&&I.constructor;return typeof D=="function"&&D instanceof D&&fA.call(D)==xF}var R0=yD?wR(yD):jB;function pX(O){return J6(O)&&O>=-A_&&O<=A_}var w6=bD?wR(bD):vB;function GI(O){return typeof O=="string"||!v_(O)&&$E(O)&&RR(O)==H_}function zR(O){return typeof O=="symbol"||$E(O)&&RR(O)==I_}var ST=iD?wR(iD):pB;function hX(O){return O===_}function kX(O){return $E(O)&&rE(O)==W_}function mX(O){return $E(O)&&RR(O)==x_}var gX=_I(xU),yX=_I(function(O,I){return O<=I});function Q6(O){if(!O)return[];if(GR(O))return GI(O)?aR(O):UR(O);if(rT&&O[rT])return MF(O[rT]());var I=rE(O),D=I==v?WU:I==E_?zA:CT;return D(O)}function hN(O){if(!O)return O===0?O:0;if(O=dR(O),O===r||O===-r){var I=O<0?-1:1;return I*L_}return O===O?O:0}function h_(O){var I=hN(O),D=I%1;return I===I?D?I-D:I:0}function z6(O){return O?q1(h_(O),0,p_):0}function dR(O){if(typeof O=="number")return O;if(zR(O))return P_;if(VE(O)){var I=typeof O.valueOf=="function"?O.valueOf():O;O=VE(I)?I+"":I}if(typeof O!="string")return O===0?O:+O;O=oD(O);var D=VM.test(O);return D||XM.test(O)?EF(O.slice(2),D?2:8):BM.test(O)?P_:+O}function x6(O){return SN(O,DR(O))}function bX(O){return O?q1(h_(O),-A_,A_):O===0?O:0}function _E(O){return O==null?"":QR(O)}var iX=UT(function(O,I){if(LO(I)||GR(I)){SN(I,kE(I),O);return}for(var D in I)if(EE.call(I,D))RO(O,D,I[D])}),q6=UT(function(O,I){SN(I,DR(I),O)}),DI=UT(function(O,I,D,P){SN(I,DR(I),O,P)}),uX=UT(function(O,I,D,P){SN(I,kE(I),O,P)}),cX=jN(XU);function dX(O,I){var D=LT(O);return I==null?D:U4(D,I)}var lX=y_(function(O,I){O=AE(O);var D=-1,P=I.length,W=P>2?I[2]:_;if(W&&NR(I[0],I[1],W))P=1;while(++D1),B}),SN(O,uU(O),D),P)D=iR(D,C|Y|M,NV);var W=I.length;while(W--)pU(D,I[W]);return D});function GJ(O,I){return j6(O,LI($_(I)))}var DJ=jN(function(O,I){return O==null?{}:mB(O,I)});function j6(O,I){if(O==null)return{};var D=ME(uU(O),function(P){return[P]});return I=$_(I),J4(O,D,function(P,W){return I(P,W[0])})}function SJ(O,I,D){I=L1(I,O);var P=-1,W=I.length;if(!W)W=1,O=_;while(++PI){var P=O;O=I,I=P}if(D||O%1||I%1){var W=O4();return tE(O+W*(I-O+_F("1e-"+((W+"").length-1))),I)}return fU(O,I)}var XJ=GT(function(O,I,D){return I=I.toLowerCase(),O+(D?h6(I):I)});function h6(O){return O0(_E(O).toLowerCase())}function k6(O){return O=_E(O),O&&O.replace($M,CF).replace(cM,"")}function JJ(O,I,D){O=_E(O),I=QR(I);var P=O.length;D=D===_?P:q1(h_(D),0,P);var W=D;return D-=I.length,D>=0&&O.slice(D,W)==I}function $J(O){return O=_E(O),O&&OM.test(O)?O.replace(PD,PF):O}function ZJ(O){return O=_E(O),O&&DM.test(O)?O.replace(_U,"\\$&"):O}var wJ=GT(function(O,I,D){return O+(D?"-":"")+I.toLowerCase()}),QJ=GT(function(O,I,D){return O+(D?" ":"")+I.toLowerCase()}),zJ=y4("toLowerCase");function xJ(O,I,D){O=_E(O),I=h_(I);var P=I?TT(O):0;if(!I||P>=I)return O;var W=(I-P)/2;return eA(yA(W),D)+O+eA(gA(W),D)}function qJ(O,I,D){O=_E(O),I=h_(I);var P=I?TT(O):0;return I&&P>>0,!D)return[];if(O=_E(O),O&&(typeof I=="string"||I!=null&&!R0(I))){if(I=QR(I),!I&&NT(O))return U1(aR(O),0,D)}return O.split(I,D)}var mJ=GT(function(O,I,D){return O+(D?" ":"")+O0(I)});function gJ(O,I,D){return O=_E(O),D=D==null?0:q1(h_(D),0,O.length),I=QR(I),O.slice(D,D+I.length)==I}function yJ(O,I,D){var P=F.templateSettings;if(D&&NR(O,I,D))I=_;O=_E(O),I=DI({},I,P,n4);var W=DI({},I.imports,P.imports,n4),B=kE(W),Z=HU(W,B),q,h,R_=0,N_=I.interpolate||JA,O_="__p += '",D_=MU((I.escape||JA).source+"|"+N_.source+"|"+(N_===YD?FM:JA).source+"|"+(I.evaluate||JA).source+"|$","g"),B_="//# sourceURL="+(EE.call(I,"sourceURL")?(I.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++sM+"]")+"\n";O.replace(D_,function(w_,u_,d_,xR,TR,qR){if(d_||(d_=xR),O_+=O.slice(R_,qR).replace(ZM,YF),u_)q=!0,O_+="' +\n__e("+u_+") +\n'";if(TR)h=!0,O_+="';\n"+TR+";\n__p += '";if(d_)O_+="' +\n((__t = ("+d_+")) == null ? '' : __t) +\n'";return R_=qR+w_.length,w_}),O_+="';\n";var Z_=EE.call(I,"variable")&&I.variable;if(!Z_)O_="with (obj) {\n"+O_+"\n}\n";else if(WM.test(Z_))throw new f_(L);O_=(h?O_.replace(EM,""):O_).replace(RM,"$1").replace(NM,"$1;"),O_="function("+(Z_||"obj")+") {\n"+(Z_?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(q?", __e = _.escape":"")+(h?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+O_+"return __p\n}";var m_=g6(function(){return s_(B,B_+"return "+O_).apply(_,Z)});if(m_.source=O_,E0(m_))throw m_;return m_}function bJ(O){return _E(O).toLowerCase()}function iJ(O){return _E(O).toUpperCase()}function uJ(O,I,D){if(O=_E(O),O&&(D||I===_))return oD(O);if(!O||!(I=QR(I)))return O;var P=aR(O),W=aR(I),B=sD(P,W),Z=tD(P,W)+1;return U1(P,B,Z).join("")}function cJ(O,I,D){if(O=_E(O),O&&(D||I===_))return O.slice(0,aD(O)+1);if(!O||!(I=QR(I)))return O;var P=aR(O),W=tD(P,aR(I))+1;return U1(P,0,W).join("")}function dJ(O,I,D){if(O=_E(O),O&&(D||I===_))return O.replace(EU,"");if(!O||!(I=QR(I)))return O;var P=aR(O),W=sD(P,aR(I));return U1(P,W).join("")}function lJ(O,I){var D=o,P=c;if(VE(I)){var W="separator"in I?I.separator:W;D="length"in I?h_(I.length):D,P="omission"in I?QR(I.omission):P}O=_E(O);var B=O.length;if(NT(O)){var Z=aR(O);B=Z.length}if(D>=B)return O;var q=D-TT(P);if(q<1)return P;var h=Z?U1(Z,0,q).join(""):O.slice(0,q);if(W===_)return h+P;if(Z)q+=h.length-q;if(R0(W)){if(O.slice(q).search(W)){var R_,N_=h;if(!W.global)W=MU(W.source,_E(HD.exec(W))+"g");W.lastIndex=0;while(R_=W.exec(N_))var O_=R_.index;h=h.slice(0,O_===_?q:O_)}}else if(O.indexOf(QR(W),q)!=q){var D_=h.lastIndexOf(W);if(D_>-1)h=h.slice(0,D_)}return h+P}function nJ(O){return O=_E(O),O&&TM.test(O)?O.replace(CD,KF):O}var oJ=GT(function(O,I,D){return O+(D?" ":"")+I.toUpperCase()}),O0=y4("toUpperCase");function m6(O,I,D){if(O=_E(O),I=D?_:I,I===_)return WF(O)?$F(O):LF(O);return O.match(I)||[]}var g6=y_(function(O,I){try{return ZR(O,_,I)}catch(D){return E0(D)?D:new f_(D)}}),sJ=jN(function(O,I){return gR(I,function(D){D=CN(D),qN(O,D,eU(O[D],O))}),O});function tJ(O){var I=O==null?0:O.length,D=$_();return O=!I?[]:ME(O,function(P){if(typeof P[1]!="function")throw new yR(A);return[D(P[0]),P[1]]}),y_(function(P){var W=-1;while(++WA_)return[];var D=p_,P=tE(O,p_);I=$_(I),O-=p_;var W=YU(P,I);while(++D0||I<0))return new c_(D);if(O<0)D=D.takeRight(-O);else if(O)D=D.drop(O);if(I!==_)I=h_(I),D=I<0?D.dropRight(-I):D.take(I-O);return D},c_.prototype.takeRightWhile=function(O){return this.reverse().takeWhile(O).reverse()},c_.prototype.toArray=function(){return this.take(p_)},DN(c_.prototype,function(O,I){var D=/^(?:filter|find|map|reject)|While$/.test(I),P=/^(?:head|last)$/.test(I),W=F[P?"take"+(I=="last"?"Right":""):I],B=P||/^find/.test(I);if(!W)return;F.prototype[I]=function(){var Z=this.__wrapped__,q=P?[1]:arguments,h=Z instanceof c_,R_=q[0],N_=h||v_(Z),O_=function(u_){var d_=W.apply(F,R1([u_],q));return P&&D_?d_[0]:d_};if(N_&&D&&typeof R_=="function"&&R_.length!=1)h=N_=!1;var D_=this.__chain__,B_=!!this.__actions__.length,Z_=B&&!D_,m_=h&&!B_;if(!B&&N_){Z=m_?Z:new c_(this);var w_=O.apply(Z,q);return w_.__actions__.push({func:TI,args:[O_],thisArg:_}),new bR(w_,D_)}if(Z_&&m_)return O.apply(this,q);return w_=this.thru(O_),Z_?P?w_.value()[0]:w_.value():w_}}),gR(["pop","push","shift","sort","splice","unshift"],function(O){var I=xA[O],D=/^(?:push|sort|unshift)$/.test(O)?"tap":"thru",P=/^(?:pop|shift)$/.test(O);F.prototype[O]=function(){var W=arguments;if(P&&!this.__chain__){var B=this.value();return I.apply(v_(B)?B:[],W)}return this[D](function(Z){return I.apply(v_(Z)?Z:[],W)})}}),DN(c_.prototype,function(O,I){var D=F[I];if(D){var P=D.name+"";if(!EE.call(IT,P))IT[P]=[];IT[P].push({name:I,func:D})}}),IT[rA(_,z).name]=[{name:"wrapper",func:_}],c_.prototype.clone=nF,c_.prototype.reverse=oF,c_.prototype.value=sF,F.prototype.at=JK,F.prototype.chain=$K,F.prototype.commit=ZK,F.prototype.next=wK,F.prototype.plant=zK,F.prototype.reverse=xK,F.prototype.toJSON=F.prototype.valueOf=F.prototype.value=qK,F.prototype.first=F.prototype.head,rT)F.prototype[rT]=QK;return F},T1=ZF();if(typeof define=="function"&&typeof define.amd=="object"&&define.amd)hE._=T1,define(function(){return T1});else if(w1)(w1.exports=T1)._=T1,IU._=T1;else hE._=T1}).call(HT)});async function NE({user:_,message:E,component:R,noMail:N,req:A}){let L=new Date,U=(()=>{if(!A)return null;try{let G=A.headers["x-forwarded-for"],S=A.headers["x-real-ip"],C=A.headers["cf-connecting-ip"],Y=Array.isArray(G)?G[0]:G?.split(",")[0],M=C||Y||S||A.socket.remoteAddress;if(!M)return null;return String(M)}catch(G){return null}})();try{let G=`\uD83D\uDE80 SERVER ERROR =========================== -Error Message: ${E}\nComponent: ${R}`;if(_?.id&&_?.first_name&&_?.last_name&&_?.email)G+=`\nUser Id: ${_?.id}\nUser Name: ${_?.first_name} ${_?.last_name}\nUser Email: ${_?.email}`;if(A?.url)G+=`\nURL: ${A.url}`;if(A?.body)G+=`\nRequest Body: ${JSON.stringify(A.body,null,4)}`;if(U)G+=`\nIP: ${U}`;if(G+=`\nDate: ${L.toDateString()}`,G+="\n========================================",!WT.default.existsSync("./.tmp/error.log"))WT.default.writeFileSync("./.tmp/error.log","","utf-8");let S=WT.default.readFileSync("./.tmp/error.log","utf-8");WT.default.writeFileSync("./.tmp/error.log",G),WT.default.appendFileSync("./.tmp/error.log",`\n\n\n\n\n${S}`)}catch(G){console.log("Server Error Reporting Error:",G.message)}}var WT;var CR=dE(()=>{WT=X_(require("fs"))});var MT=j((KE)=>{KE.CLIENT_LONG_PASSWORD=1;KE.CLIENT_FOUND_ROWS=2;KE.CLIENT_LONG_FLAG=4;KE.CLIENT_CONNECT_WITH_DB=8;KE.CLIENT_NO_SCHEMA=16;KE.CLIENT_COMPRESS=32;KE.CLIENT_ODBC=64;KE.CLIENT_LOCAL_FILES=128;KE.CLIENT_IGNORE_SPACE=256;KE.CLIENT_PROTOCOL_41=512;KE.CLIENT_INTERACTIVE=1024;KE.CLIENT_SSL=2048;KE.CLIENT_IGNORE_SIGPIPE=4096;KE.CLIENT_TRANSACTIONS=8192;KE.CLIENT_RESERVED=16384;KE.CLIENT_SECURE_CONNECTION=32768;KE.CLIENT_MULTI_STATEMENTS=65536;KE.CLIENT_MULTI_RESULTS=131072;KE.CLIENT_PS_MULTI_RESULTS=262144;KE.CLIENT_PLUGIN_AUTH=524288;KE.CLIENT_SSL_VERIFY_SERVER_CERT=1073741824;KE.CLIENT_REMEMBER_OPTIONS=2147483648});var S0=j((K)=>{K.BIG5_CHINESE_CI=1;K.LATIN2_CZECH_CS=2;K.DEC8_SWEDISH_CI=3;K.CP850_GENERAL_CI=4;K.LATIN1_GERMAN1_CI=5;K.HP8_ENGLISH_CI=6;K.KOI8R_GENERAL_CI=7;K.LATIN1_SWEDISH_CI=8;K.LATIN2_GENERAL_CI=9;K.SWE7_SWEDISH_CI=10;K.ASCII_GENERAL_CI=11;K.UJIS_JAPANESE_CI=12;K.SJIS_JAPANESE_CI=13;K.CP1251_BULGARIAN_CI=14;K.LATIN1_DANISH_CI=15;K.HEBREW_GENERAL_CI=16;K.TIS620_THAI_CI=18;K.EUCKR_KOREAN_CI=19;K.LATIN7_ESTONIAN_CS=20;K.LATIN2_HUNGARIAN_CI=21;K.KOI8U_GENERAL_CI=22;K.CP1251_UKRAINIAN_CI=23;K.GB2312_CHINESE_CI=24;K.GREEK_GENERAL_CI=25;K.CP1250_GENERAL_CI=26;K.LATIN2_CROATIAN_CI=27;K.GBK_CHINESE_CI=28;K.CP1257_LITHUANIAN_CI=29;K.LATIN5_TURKISH_CI=30;K.LATIN1_GERMAN2_CI=31;K.ARMSCII8_GENERAL_CI=32;K.UTF8_GENERAL_CI=33;K.CP1250_CZECH_CS=34;K.UCS2_GENERAL_CI=35;K.CP866_GENERAL_CI=36;K.KEYBCS2_GENERAL_CI=37;K.MACCE_GENERAL_CI=38;K.MACROMAN_GENERAL_CI=39;K.CP852_GENERAL_CI=40;K.LATIN7_GENERAL_CI=41;K.LATIN7_GENERAL_CS=42;K.MACCE_BIN=43;K.CP1250_CROATIAN_CI=44;K.UTF8MB4_GENERAL_CI=45;K.UTF8MB4_BIN=46;K.LATIN1_BIN=47;K.LATIN1_GENERAL_CI=48;K.LATIN1_GENERAL_CS=49;K.CP1251_BIN=50;K.CP1251_GENERAL_CI=51;K.CP1251_GENERAL_CS=52;K.MACROMAN_BIN=53;K.UTF16_GENERAL_CI=54;K.UTF16_BIN=55;K.UTF16LE_GENERAL_CI=56;K.CP1256_GENERAL_CI=57;K.CP1257_BIN=58;K.CP1257_GENERAL_CI=59;K.UTF32_GENERAL_CI=60;K.UTF32_BIN=61;K.UTF16LE_BIN=62;K.BINARY=63;K.ARMSCII8_BIN=64;K.ASCII_BIN=65;K.CP1250_BIN=66;K.CP1256_BIN=67;K.CP866_BIN=68;K.DEC8_BIN=69;K.GREEK_BIN=70;K.HEBREW_BIN=71;K.HP8_BIN=72;K.KEYBCS2_BIN=73;K.KOI8R_BIN=74;K.KOI8U_BIN=75;K.LATIN2_BIN=77;K.LATIN5_BIN=78;K.LATIN7_BIN=79;K.CP850_BIN=80;K.CP852_BIN=81;K.SWE7_BIN=82;K.UTF8_BIN=83;K.BIG5_BIN=84;K.EUCKR_BIN=85;K.GB2312_BIN=86;K.GBK_BIN=87;K.SJIS_BIN=88;K.TIS620_BIN=89;K.UCS2_BIN=90;K.UJIS_BIN=91;K.GEOSTD8_GENERAL_CI=92;K.GEOSTD8_BIN=93;K.LATIN1_SPANISH_CI=94;K.CP932_JAPANESE_CI=95;K.CP932_BIN=96;K.EUCJPMS_JAPANESE_CI=97;K.EUCJPMS_BIN=98;K.CP1250_POLISH_CI=99;K.UTF16_UNICODE_CI=101;K.UTF16_ICELANDIC_CI=102;K.UTF16_LATVIAN_CI=103;K.UTF16_ROMANIAN_CI=104;K.UTF16_SLOVENIAN_CI=105;K.UTF16_POLISH_CI=106;K.UTF16_ESTONIAN_CI=107;K.UTF16_SPANISH_CI=108;K.UTF16_SWEDISH_CI=109;K.UTF16_TURKISH_CI=110;K.UTF16_CZECH_CI=111;K.UTF16_DANISH_CI=112;K.UTF16_LITHUANIAN_CI=113;K.UTF16_SLOVAK_CI=114;K.UTF16_SPANISH2_CI=115;K.UTF16_ROMAN_CI=116;K.UTF16_PERSIAN_CI=117;K.UTF16_ESPERANTO_CI=118;K.UTF16_HUNGARIAN_CI=119;K.UTF16_SINHALA_CI=120;K.UTF16_GERMAN2_CI=121;K.UTF16_CROATIAN_MYSQL561_CI=122;K.UTF16_UNICODE_520_CI=123;K.UTF16_VIETNAMESE_CI=124;K.UCS2_UNICODE_CI=128;K.UCS2_ICELANDIC_CI=129;K.UCS2_LATVIAN_CI=130;K.UCS2_ROMANIAN_CI=131;K.UCS2_SLOVENIAN_CI=132;K.UCS2_POLISH_CI=133;K.UCS2_ESTONIAN_CI=134;K.UCS2_SPANISH_CI=135;K.UCS2_SWEDISH_CI=136;K.UCS2_TURKISH_CI=137;K.UCS2_CZECH_CI=138;K.UCS2_DANISH_CI=139;K.UCS2_LITHUANIAN_CI=140;K.UCS2_SLOVAK_CI=141;K.UCS2_SPANISH2_CI=142;K.UCS2_ROMAN_CI=143;K.UCS2_PERSIAN_CI=144;K.UCS2_ESPERANTO_CI=145;K.UCS2_HUNGARIAN_CI=146;K.UCS2_SINHALA_CI=147;K.UCS2_GERMAN2_CI=148;K.UCS2_CROATIAN_MYSQL561_CI=149;K.UCS2_UNICODE_520_CI=150;K.UCS2_VIETNAMESE_CI=151;K.UCS2_GENERAL_MYSQL500_CI=159;K.UTF32_UNICODE_CI=160;K.UTF32_ICELANDIC_CI=161;K.UTF32_LATVIAN_CI=162;K.UTF32_ROMANIAN_CI=163;K.UTF32_SLOVENIAN_CI=164;K.UTF32_POLISH_CI=165;K.UTF32_ESTONIAN_CI=166;K.UTF32_SPANISH_CI=167;K.UTF32_SWEDISH_CI=168;K.UTF32_TURKISH_CI=169;K.UTF32_CZECH_CI=170;K.UTF32_DANISH_CI=171;K.UTF32_LITHUANIAN_CI=172;K.UTF32_SLOVAK_CI=173;K.UTF32_SPANISH2_CI=174;K.UTF32_ROMAN_CI=175;K.UTF32_PERSIAN_CI=176;K.UTF32_ESPERANTO_CI=177;K.UTF32_HUNGARIAN_CI=178;K.UTF32_SINHALA_CI=179;K.UTF32_GERMAN2_CI=180;K.UTF32_CROATIAN_MYSQL561_CI=181;K.UTF32_UNICODE_520_CI=182;K.UTF32_VIETNAMESE_CI=183;K.UTF8_UNICODE_CI=192;K.UTF8_ICELANDIC_CI=193;K.UTF8_LATVIAN_CI=194;K.UTF8_ROMANIAN_CI=195;K.UTF8_SLOVENIAN_CI=196;K.UTF8_POLISH_CI=197;K.UTF8_ESTONIAN_CI=198;K.UTF8_SPANISH_CI=199;K.UTF8_SWEDISH_CI=200;K.UTF8_TURKISH_CI=201;K.UTF8_CZECH_CI=202;K.UTF8_DANISH_CI=203;K.UTF8_LITHUANIAN_CI=204;K.UTF8_SLOVAK_CI=205;K.UTF8_SPANISH2_CI=206;K.UTF8_ROMAN_CI=207;K.UTF8_PERSIAN_CI=208;K.UTF8_ESPERANTO_CI=209;K.UTF8_HUNGARIAN_CI=210;K.UTF8_SINHALA_CI=211;K.UTF8_GERMAN2_CI=212;K.UTF8_CROATIAN_MYSQL561_CI=213;K.UTF8_UNICODE_520_CI=214;K.UTF8_VIETNAMESE_CI=215;K.UTF8_GENERAL_MYSQL500_CI=223;K.UTF8MB4_UNICODE_CI=224;K.UTF8MB4_ICELANDIC_CI=225;K.UTF8MB4_LATVIAN_CI=226;K.UTF8MB4_ROMANIAN_CI=227;K.UTF8MB4_SLOVENIAN_CI=228;K.UTF8MB4_POLISH_CI=229;K.UTF8MB4_ESTONIAN_CI=230;K.UTF8MB4_SPANISH_CI=231;K.UTF8MB4_SWEDISH_CI=232;K.UTF8MB4_TURKISH_CI=233;K.UTF8MB4_CZECH_CI=234;K.UTF8MB4_DANISH_CI=235;K.UTF8MB4_LITHUANIAN_CI=236;K.UTF8MB4_SLOVAK_CI=237;K.UTF8MB4_SPANISH2_CI=238;K.UTF8MB4_ROMAN_CI=239;K.UTF8MB4_PERSIAN_CI=240;K.UTF8MB4_ESPERANTO_CI=241;K.UTF8MB4_HUNGARIAN_CI=242;K.UTF8MB4_SINHALA_CI=243;K.UTF8MB4_GERMAN2_CI=244;K.UTF8MB4_CROATIAN_MYSQL561_CI=245;K.UTF8MB4_UNICODE_520_CI=246;K.UTF8MB4_VIETNAMESE_CI=247;K.UTF8_GENERAL50_CI=253;K.ARMSCII8=K.ARMSCII8_GENERAL_CI;K.ASCII=K.ASCII_GENERAL_CI;K.BIG5=K.BIG5_CHINESE_CI;K.BINARY=K.BINARY;K.CP1250=K.CP1250_GENERAL_CI;K.CP1251=K.CP1251_GENERAL_CI;K.CP1256=K.CP1256_GENERAL_CI;K.CP1257=K.CP1257_GENERAL_CI;K.CP866=K.CP866_GENERAL_CI;K.CP850=K.CP850_GENERAL_CI;K.CP852=K.CP852_GENERAL_CI;K.CP932=K.CP932_JAPANESE_CI;K.DEC8=K.DEC8_SWEDISH_CI;K.EUCJPMS=K.EUCJPMS_JAPANESE_CI;K.EUCKR=K.EUCKR_KOREAN_CI;K.GB2312=K.GB2312_CHINESE_CI;K.GBK=K.GBK_CHINESE_CI;K.GEOSTD8=K.GEOSTD8_GENERAL_CI;K.GREEK=K.GREEK_GENERAL_CI;K.HEBREW=K.HEBREW_GENERAL_CI;K.HP8=K.HP8_ENGLISH_CI;K.KEYBCS2=K.KEYBCS2_GENERAL_CI;K.KOI8R=K.KOI8R_GENERAL_CI;K.KOI8U=K.KOI8U_GENERAL_CI;K.LATIN1=K.LATIN1_SWEDISH_CI;K.LATIN2=K.LATIN2_GENERAL_CI;K.LATIN5=K.LATIN5_TURKISH_CI;K.LATIN7=K.LATIN7_GENERAL_CI;K.MACCE=K.MACCE_GENERAL_CI;K.MACROMAN=K.MACROMAN_GENERAL_CI;K.SJIS=K.SJIS_JAPANESE_CI;K.SWE7=K.SWE7_SWEDISH_CI;K.TIS620=K.TIS620_THAI_CI;K.UCS2=K.UCS2_GENERAL_CI;K.UJIS=K.UJIS_JAPANESE_CI;K.UTF16=K.UTF16_GENERAL_CI;K.UTF16LE=K.UTF16LE_GENERAL_CI;K.UTF8=K.UTF8_GENERAL_CI;K.UTF8MB4=K.UTF8MB4_GENERAL_CI;K.UTF32=K.UTF32_GENERAL_CI});var o6=j((n6)=>{n6["Amazon RDS"]={ca:["-----BEGIN CERTIFICATE-----\nMIIDQzCCAqygAwIBAgIJAOd1tlfiGoEoMA0GCSqGSIb3DQEBBQUAMHUxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdTZWF0dGxlMRMw\nEQYDVQQKEwpBbWF6b24uY29tMQwwCgYDVQQLEwNSRFMxHDAaBgNVBAMTE2F3cy5h\nbWF6b24uY29tL3Jkcy8wHhcNMTAwNDA1MjI0NDMxWhcNMTUwNDA0MjI0NDMxWjB1\nMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHU2Vh\ndHRsZTETMBEGA1UEChMKQW1hem9uLmNvbTEMMAoGA1UECxMDUkRTMRwwGgYDVQQD\nExNhd3MuYW1hem9uLmNvbS9yZHMvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\ngQDKhXGU7tizxUR5WaFoMTFcxNxa05PEjZaIOEN5ctkWrqYSRov0/nOMoZjqk8bC\nmed9vPFoQGD0OTakPs0jVe3wwmR735hyVwmKIPPsGlaBYj1O6llIpZeQVyupNx56\nUzqtiLaDzh1KcmfqP3qP2dInzBfJQKjiRudo1FWnpPt33QIDAQABo4HaMIHXMB0G\nA1UdDgQWBBT/H3x+cqSkR/ePSIinPtc4yWKe3DCBpwYDVR0jBIGfMIGcgBT/H3x+\ncqSkR/ePSIinPtc4yWKe3KF5pHcwdTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh\nc2hpbmd0b24xEDAOBgNVBAcTB1NlYXR0bGUxEzARBgNVBAoTCkFtYXpvbi5jb20x\nDDAKBgNVBAsTA1JEUzEcMBoGA1UEAxMTYXdzLmFtYXpvbi5jb20vcmRzL4IJAOd1\ntlfiGoEoMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAvguZy/BDT66x\nGfgnJlyQwnFSeVLQm9u/FIvz4huGjbq9dqnD6h/Gm56QPFdyMEyDiZWaqY6V08lY\nLTBNb4kcIc9/6pc0/ojKciP5QJRm6OiZ4vgG05nF4fYjhU7WClUx7cxq1fKjNc2J\nUCmmYqgiVkAGWRETVo+byOSDZ4swb10=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID9DCCAtygAwIBAgIBQjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUwOTExMzFaFw0y\nMDAzMDUwOTExMzFaMIGKMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEbMBkGA1UEAwwSQW1hem9uIFJE\nUyBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuD8nrZ8V\nu+VA8yVlUipCZIKPTDcOILYpUe8Tct0YeQQr0uyl018StdBsa3CjBgvwpDRq1HgF\nJi2N3+39+shCNspQeE6aYU+BHXhKhIIStt3r7gl/4NqYiDDMWKHxHq0nsGDFfArf\nAOcjZdJagOMqb3fF46flc8k2E7THTm9Sz4L7RY1WdABMuurpICLFE3oHcGdapOb9\nT53pQR+xpHW9atkcf3pf7gbO0rlKVSIoUenBlZipUlp1VZl/OD/E+TtRhDDNdI2J\nP/DSMM3aEsq6ZQkfbz/Ilml+Lx3tJYXUDmp+ZjzMPLk/+3beT8EhrwtcG3VPpvwp\nBIOqsqVVTvw/CwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw\nAwEB/zAdBgNVHQ4EFgQUTgLurD72FchM7Sz1BcGPnIQISYMwHwYDVR0jBBgwFoAU\nTgLurD72FchM7Sz1BcGPnIQISYMwDQYJKoZIhvcNAQEFBQADggEBAHZcgIio8pAm\nMjHD5cl6wKjXxScXKtXygWH2BoDMYBJF9yfyKO2jEFxYKbHePpnXB1R04zJSWAw5\n2EUuDI1pSBh9BA82/5PkuNlNeSTB3dXDD2PEPdzVWbSKvUB8ZdooV+2vngL0Zm4r\n47QPyd18yPHrRIbtBtHR/6CwKevLZ394zgExqhnekYKIqqEX41xsUV0Gm6x4vpjf\n2u6O/+YE2U+qyyxHE5Wd5oqde0oo9UUpFETJPVb6Q2cEeQib8PBAyi0i6KnF+kIV\nA9dY7IHSubtCK/i8wxMVqfd5GtbA8mmpeJFwnDvm9rBEsHybl08qlax9syEwsUYr\n/40NawZfTUU=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\nVQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\nMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\nem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkw\nODIyMTcwODUwWhcNMjQwODIyMTcwODUwWjCBjzELMAkGA1UEBhMCVVMxEDAOBgNV\nBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFtYXpv\nbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIDAeBgNV\nBAMMF0FtYXpvbiBSRFMgUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEArXnF/E6/Qh+ku3hQTSKPMhQQlCpoWvnIthzX6MK3p5a0eXKZ\noWIjYcNNG6UwJjp4fUXl6glp53Jobn+tWNX88dNH2n8DVbppSwScVE2LpuL+94vY\n0EYE/XxN7svKea8YvlrqkUBKyxLxTjh+U/KrGOaHxz9v0l6ZNlDbuaZw3qIWdD/I\n6aNbGeRUVtpM6P+bWIoxVl/caQylQS6CEYUk+CpVyJSkopwJlzXT07tMoDL5WgX9\nO08KVgDNz9qP/IGtAcRduRcNioH3E9v981QO1zt/Gpb2f8NqAjUUCUZzOnij6mx9\nMcZ+9cWX88CRzR0vQODWuZscgI08NvM69Fn2SQIDAQABo2MwYTAOBgNVHQ8BAf8E\nBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUc19g2LzLA5j0Kxc0LjZa\npmD/vB8wHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJKoZIhvcN\nAQELBQADggEBAHAG7WTmyjzPRIM85rVj+fWHsLIvqpw6DObIjMWokpliCeMINZFV\nynfgBKsf1ExwbvJNzYFXW6dihnguDG9VMPpi2up/ctQTN8tm9nDKOy08uNZoofMc\nNUZxKCEkVKZv+IL4oHoeayt8egtv3ujJM6V14AstMQ6SwvwvA93EP/Ug2e4WAXHu\ncbI1NAbUgVDqp+DRdfvZkgYKryjTWd/0+1fS8X1bBZVWzl7eirNVnHbSH2ZDpNuY\n0SBd8dj5F6ld3t58ydZbrTHze7JJOd8ijySAp4/kiu9UfZWuTPABzDa/DSdz9Dk/\nzPW4CXXvhLmE02TA9/HeCw3KEHIwicNuEfw=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEATCCAumgAwIBAgIBRDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMDZaFw0y\nMDAzMDUyMjAzMDZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\nUyBhcC1ub3J0aGVhc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAMmM2B4PfTXCZjbZMWiDPyxvk/eeNwIRJAhfzesiGUiLozX6CRy3rwC1ZOPV\nAcQf0LB+O8wY88C/cV+d4Q2nBDmnk+Vx7o2MyMh343r5rR3Na+4izd89tkQVt0WW\nvO21KRH5i8EuBjinboOwAwu6IJ+HyiQiM0VjgjrmEr/YzFPL8MgHD/YUHehqjACn\nC0+B7/gu7W4qJzBL2DOf7ub2qszGtwPE+qQzkCRDwE1A4AJmVE++/FLH2Zx78Egg\nfV1sUxPtYgjGH76VyyO6GNKM6rAUMD/q5mnPASQVIXgKbupr618bnH+SWHFjBqZq\nHvDGPMtiiWII41EmGUypyt5AbysCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\nA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIiKM0Q6n1K4EmLxs3ZXxINbwEwR\nMB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\nA4IBAQBezGbE9Rw/k2e25iGjj5n8r+M3dlye8ORfCE/dijHtxqAKasXHgKX8I9Tw\nJkBiGWiuzqn7gO5MJ0nMMro1+gq29qjZnYX1pDHPgsRjUX8R+juRhgJ3JSHijRbf\n4qNJrnwga7pj94MhcLq9u0f6dxH6dXbyMv21T4TZMTmcFduf1KgaiVx1PEyJjC6r\nM+Ru+A0eM+jJ7uCjUoZKcpX8xkj4nmSnz9NMPog3wdOSB9cAW7XIc5mHa656wr7I\nWJxVcYNHTXIjCcng2zMKd1aCcl2KSFfy56sRfT7J5Wp69QSr+jq8KM55gw8uqAwi\nVPrXn2899T1rcTtFYFP16WXjGuc0\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEATCCAumgAwIBAgIBTDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTExMDYwMDA1NDZaFw0y\nMDAzMDUwMDA1NDZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\nUyBhcC1ub3J0aGVhc3QtMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAKSwd+RVUzTRH0FgnbwoTK8TMm/zMT4+2BvALpAUe6YXbkisg2goycWuuWLg\njOpFBB3GtyvXZnkqi7MkDWUmj1a2kf8l2oLyoaZ+Hm9x/sV+IJzOqPvj1XVUGjP6\nyYYnPJmUYqvZeI7fEkIGdFkP2m4/sgsSGsFvpD9FK1bL1Kx2UDpYX0kHTtr18Zm/\n1oN6irqWALSmXMDydb8hE0FB2A1VFyeKE6PnoDj/Y5cPHwPPdEi6/3gkDkSaOG30\nrWeQfL3pOcKqzbHaWTxMphd0DSL/quZ64Nr+Ly65Q5PRcTrtr55ekOUziuqXwk+o\n9QpACMwcJ7ROqOznZTqTzSFVXFECAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\nA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFM6Nox/QWbhzWVvzoJ/y0kGpNPK+\nMB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\nA4IBAQCTkWBqNvyRf3Y/W21DwFx3oT/AIWrHt0BdGZO34tavummXemTH9LZ/mqv9\naljt6ZuDtf5DEQjdsAwXMsyo03ffnP7doWm8iaF1+Mui77ot0TmTsP/deyGwukvJ\ntkxX8bZjDh+EaNauWKr+CYnniNxCQLfFtXYJsfOdVBzK3xNL+Z3ucOQRhr2helWc\nCDQgwfhP1+3pRVKqHvWCPC4R3fT7RZHuRmZ38kndv476GxRntejh+ePffif78bFI\n3rIZCPBGobrrUMycafSbyXteoGca/kA+/IqrAPlk0pWQ4aEL0yTWN2h2dnjoD7oX\nbyIuL/g9AGRh97+ssn7D6bDRPTbW\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEATCCAumgAwIBAgIBRTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMTlaFw0y\nMDAzMDUyMjAzMTlaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\nUyBhcC1zb3V0aGVhc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBANaXElmSEYt/UtxHFsARFhSUahTf1KNJzR0Dmay6hqOXQuRVbKRwPd19u5vx\nDdF1sLT7D69IK3VDnUiQScaCv2Dpu9foZt+rLx+cpx1qiQd1UHrvqq8xPzQOqCdC\nRFStq6yVYZ69yfpfoI67AjclMOjl2Vph3ftVnqP0IgVKZdzeC7fd+umGgR9xY0Qr\nUbhd/lWdsbNvzK3f1TPWcfIKQnpvSt85PIEDJir6/nuJUKMtmJRwTymJf0i+JZ4x\n7dJa341p2kHKcHMgOPW7nJQklGBA70ytjUV6/qebS3yIugr/28mwReflg3TJzVDl\nEOvi6pqbqNbkMuEwGDCmEQIVqgkCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\nA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAu93/4k5xbWOsgdCdn+/KdiRuit\nMB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\nA4IBAQBlcjSyscpPjf5+MgzMuAsCxByqUt+WFspwcMCpwdaBeHOPSQrXNqX2Sk6P\nkth6oCivA64trWo8tFMvPYlUA1FYVD5WpN0kCK+P5pD4KHlaDsXhuhClJzp/OP8t\npOyUr5109RHLxqoKB5J5m1XA7rgcFjnMxwBSWFe3/4uMk/+4T53YfCVXuc6QV3i7\nI/2LAJwFf//pTtt6fZenYfCsahnr2nvrNRNyAxcfvGZ/4Opn/mJtR6R/AjvQZHiR\nbkRNKF2GW0ueK5W4FkZVZVhhX9xh1Aj2Ollb+lbOqADaVj+AT3PoJPZ3MPQHKCXm\nxwG0LOLlRr/TfD6li1AfOVTAJXv9\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEATCCAumgAwIBAgIBRjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMjRaFw0y\nMDAzMDUyMjAzMjRaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\nUyBhcC1zb3V0aGVhc3QtMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAJqBAJutz69hFOh3BtLHZTbwE8eejGGKayn9hu98YMDPzWzGXWCmW+ZYWELA\ncY3cNWNF8K4FqKXFr2ssorBYim1UtYFX8yhydT2hMD5zgQ2sCGUpuidijuPA6zaq\nZ3tdhVR94f0q8mpwpv2zqR9PcqaGDx2VR1x773FupRPRo7mEW1vC3IptHCQlP/zE\n7jQiLl28bDIH2567xg7e7E9WnZToRnhlYdTaDaJsHTzi5mwILi4cihSok7Shv/ME\nhnukvxeSPUpaVtFaBhfBqq055ePq9I+Ns4KGreTKMhU0O9fkkaBaBmPaFgmeX/XO\nn2AX7gMouo3mtv34iDTZ0h6YCGkCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\nA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIlQnY0KHYWn1jYumSdJYfwj/Nfw\nMB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\nA4IBAQA0wVU6/l41cTzHc4azc4CDYY2Wd90DFWiH9C/mw0SgToYfCJ/5Cfi0NT/Y\nPRnk3GchychCJgoPA/k9d0//IhYEAIiIDjyFVgjbTkKV3sh4RbdldKVOUB9kumz/\nZpShplsGt3z4QQiVnKfrAgqxWDjR0I0pQKkxXa6Sjkicos9LQxVtJ0XA4ieG1E7z\nzJr+6t80wmzxvkInSaWP3xNJK9azVRTrgQZQlvkbpDbExl4mNTG66VD3bAp6t3Wa\nB49//uDdfZmPkqqbX+hsxp160OH0rxJppwO3Bh869PkDnaPEd/Pxw7PawC+li0gi\nNRV8iCEx85aFxcyOhqn0WZOasxee\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/zCCAuegAwIBAgIBRzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMzFaFw0y\nMDAzMDUyMjAzMzFaMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEjMCEGA1UEAwwaQW1hem9uIFJE\nUyBldS1jZW50cmFsLTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQDFtP2dhSLuaPOI4ZrrPWsK4OY9ocQBp3yApH1KJYmI9wpQKZG/KCH2E6Oo7JAw\nQORU519r033T+FO2Z7pFPlmz1yrxGXyHpJs8ySx3Yo5S8ncDCdZJCLmtPiq/hahg\n5/0ffexMFUCQaYicFZsrJ/cStdxUV+tSw2JQLD7UxS9J97LQWUPyyG+ZrjYVTVq+\nzudnFmNSe4QoecXMhAFTGJFQXxP7nhSL9Ao5FGgdXy7/JWeWdQIAj8ku6cBDKPa6\nY6kP+ak+In+Lye8z9qsCD/afUozfWjPR2aA4JoIZVF8dNRShIMo8l0XfgfM2q0+n\nApZWZ+BjhIO5XuoUgHS3D2YFAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNV\nHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRm4GsWIA/M6q+tK8WGHWDGh2gcyTAf\nBgNVHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOC\nAQEAHpMmeVQNqcxgfQdbDIi5UIy+E7zZykmtAygN1XQrvga9nXTis4kOTN6g5/+g\nHCx7jIXeNJzAbvg8XFqBN84Quqgpl/tQkbpco9Jh1HDs558D5NnZQxNqH5qXQ3Mm\nuPgCw0pYcPOa7bhs07i+MdVwPBsX27CFDtsgAIru8HvKxY1oTZrWnyIRo93tt/pk\nWuItVMVHjaQZVfTCow0aDUbte6Vlw82KjUFq+n2NMSCJDiDKsDDHT6BJc4AJHIq3\n/4Z52MSC9KMr0yAaaoWfW/yMEj9LliQauAgwVjArF4q78rxpfKTG9Rfd8U1BZANP\n7FrFMN0ThjfA1IvmOYcgskY5bQ==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBSDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMzVaFw0y\nMDAzMDUyMjAzMzVaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyBldS13ZXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx\nPdbqQ0HKRj79Pmocxvjc+P6i4Ux24kgFIl+ckiir1vzkmesc3a58gjrMlCksEObt\nYihs5IhzEq1ePT0gbfS9GYFp34Uj/MtPwlrfCBWG4d2TcrsKRHr1/EXUYhWqmdrb\nRhX8XqoRhVkbF/auzFSBhTzcGGvZpQ2KIaxRcQfcXlMVhj/pxxAjh8U4F350Fb0h\nnX1jw4/KvEreBL0Xb2lnlGTkwVxaKGSgXEnOgIyOFdOQc61vdome0+eeZsP4jqeR\nTGYJA9izJsRbe2YJxHuazD+548hsPlM3vFzKKEVURCha466rAaYAHy3rKur3HYQx\nYt+SoKcEz9PXuSGj96ejAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTebg//h2oeXbZjQ4uuoiuLYzuiPDAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\nTikPaGeZasTPw+4RBemlsyPAjtFFQLo7ddaFdORLgdEysVf8aBqndvbA6MT/v4lj\nGtEtUdF59ZcbWOrVm+fBZ2h/jYJ59dYF/xzb09nyRbdMSzB9+mkSsnOMqluq5y8o\nDY/PfP2vGhEg/2ZncRC7nlQU1Dm8F4lFWEiQ2fi7O1cW852Vmbq61RIfcYsH/9Ma\nkpgk10VZ75b8m3UhmpZ/2uRY+JEHImH5WpcTJ7wNiPNJsciZMznGtrgOnPzYco8L\ncDleOASIZifNMQi9PKOJKvi0ITz0B/imr8KBsW0YjZVJ54HMa7W1lwugSM7aMAs+\nE3Sd5lS+SHwWaOCHwhOEVA==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBSTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzNDBaFw0y\nMDAzMDUyMjAzNDBaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyBzYS1lYXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCU\nX4OBnQ5xA6TLJAiFEI6l7bUWjoVJBa/VbMdCCSs2i2dOKmqUaXu2ix2zcPILj3lZ\nGMk3d/2zvTK/cKhcFrewHUBamTeVHdEmynhMQamqNmkM4ptYzFcvEUw1TGxHT4pV\nQ6gSN7+/AJewQvyHexHo8D0+LDN0/Wa9mRm4ixCYH2CyYYJNKaZt9+EZfNu+PPS4\n8iB0TWH0DgQkbWMBfCRgolLLitAZklZ4dvdlEBS7evN1/7ttBxUK6SvkeeSx3zBl\nww3BlXqc3bvTQL0A+RRysaVyFbvtp9domFaDKZCpMmDFAN/ntx215xmQdrSt+K3F\ncXdGQYHx5q410CAclGnbAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT6iVWnm/uakS+tEX2mzIfw+8JL0zAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\nFmDD+QuDklXn2EgShwQxV13+txPRuVdOSrutHhoCgMwFWCMtPPtBAKs6KPY7Guvw\nDpJoZSehDiOfsgMirjOWjvfkeWSNvKfjWTVneX7pZD9W5WPnsDBvTbCGezm+v87z\nb+ZM2ZMo98m/wkMcIEAgdSKilR2fuw8rLkAjhYFfs0A7tDgZ9noKwgHvoE4dsrI0\nKZYco6DlP/brASfHTPa2puBLN9McK3v+h0JaSqqm5Ro2Bh56tZkQh8AWy/miuDuK\n3+hNEVdxosxlkM1TPa1DGj0EzzK0yoeerXuH2HX7LlCrrxf6/wdKnjR12PMrLQ4A\npCqkcWw894z6bV9MAvKe6A==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBQzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMTU0MDRaFw0y\nMDAzMDUyMTU0MDRaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyB1cy1lYXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDI\nUIuwh8NusKHk1SqPXcP7OqxY3S/M2ZyQWD3w7Bfihpyyy/fc1w0/suIpX3kbMhAV\n2ESwged2/2zSx4pVnjp/493r4luhSqQYzru78TuPt9bhJIJ51WXunZW2SWkisSaf\nUSYUzVN9ezR/bjXTumSUQaLIouJt3OHLX49s+3NAbUyOI8EdvgBQWD68H1epsC0n\nCI5s+pIktyOZ59c4DCDLQcXErQ+tNbDC++oct1ANd/q8p9URonYwGCGOBy7sbCYq\n9eVHh1Iy2M+SNXddVOGw5EuruvHoCIQyOz5Lz4zSuZA9dRbrfztNOpezCNYu6NKM\nn+hzcvdiyxv77uNm8EaxAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQSQG3TmMe6Sa3KufaPBa72v4QFDzAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\nL/mOZfB3187xTmjOHMqN2G2oSKHBKiQLM9uv8+97qT+XR+TVsBT6b3yoPpMAGhHA\nPc7nxAF5gPpuzatx0OTLPcmYucFmfqT/1qA5WlgCnMNtczyNMH97lKFTNV7Njtek\njWEzAEQSyEWrkNpNlC4j6kMYyPzVXQeXUeZTgJ9FNnVZqmvfjip2N22tawMjrCn5\n7KN/zN65EwY2oO9XsaTwwWmBu3NrDdMbzJnbxoWcFWj4RBwanR1XjQOVNhDwmCOl\n/1Et13b8CPyj69PC8BOVU6cfTSx8WUVy0qvYOKHNY9Bqa5BDnIL3IVmUkeTlM1mt\nenRpyBj+Bk9rh/ICdiRKmA==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBSjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzNDVaFw0y\nMDAzMDUyMjAzNDVaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyB1cy13ZXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDE\nDhw+uw/ycaiIhhyu2pXFRimq0DlB8cNtIe8hdqndH8TV/TFrljNgR8QdzOgZtZ9C\nzzQ2GRpInN/qJF6slEd6wO+6TaDBQkPY+07TXNt52POFUhdVkhJXHpE2BS7Xn6J7\n7RFAOeG1IZmc2DDt+sR1BgXzUqHslQGfFYNS0/MBO4P+ya6W7IhruB1qfa4HiYQS\ndbe4MvGWnv0UzwAqdR7OF8+8/5c58YXZIXCO9riYF2ql6KNSL5cyDPcYK5VK0+Q9\nVI6vuJHSMYcF7wLePw8jtBktqAFE/wbdZiIHhZvNyiNWPPNTGUmQbaJ+TzQEHDs5\n8en+/W7JKnPyBOkxxENbAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS0nw/tFR9bCjgqWTPJkyy4oOD8bzAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\nCXGAY3feAak6lHdqj6+YWjy6yyUnLK37bRxZDsyDVXrPRQaXRzPTzx79jvDwEb/H\nQ/bdQ7zQRWqJcbivQlwhuPJ4kWPUZgSt3JUUuqkMsDzsvj/bwIjlrEFDOdHGh0mi\neVIngFEjUXjMh+5aHPEF9BlQnB8LfVtKj18e15UDTXFa+xJPFxUR7wDzCfo4WI1m\nsUMG4q1FkGAZgsoyFPZfF8IVvgCuGdR8z30VWKklFxttlK0eGLlPAyIO0CQxPQlo\nsaNJrHf4tLOgZIWk+LpDhNd9Et5EzvJ3aURUsKY4pISPPF5WdvM9OE59bERwUErd\nnuOuQWQeeadMceZnauRzJQ==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBSzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzNTBaFw0y\nMDAzMDUyMjAzNTBaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyB1cy13ZXN0LTIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDM\nH58SR48U6jyERC1vYTnub34smf5EQVXyzaTmspWGWGzT31NLNZGSDFaa7yef9kdO\nmzJsgebR5tXq6LdwlIoWkKYQ7ycUaadtVKVYdI40QcI3cHn0qLFlg2iBXmWp/B+i\nZ34VuVlCh31Uj5WmhaBoz8t/GRqh1V/aCsf3Wc6jCezH3QfuCjBpzxdOOHN6Ie2v\nxX09O5qmZTvMoRBAvPkxdaPg/Mi7fxueWTbEVk78kuFbF1jHYw8U1BLILIAhcqlq\nx4u8nl73t3O3l/soNUcIwUDK0/S+Kfqhwn9yQyPlhb4Wy3pfnZLJdkyHldktnQav\n9TB9u7KH5Lk0aAYslMLxAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT8roM4lRnlFHWMPWRz0zkwFZog1jAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\nJwrxwgwmPtcdaU7O7WDdYa4hprpOMamI49NDzmE0s10oGrqmLwZygcWU0jT+fJ+Y\npJe1w0CVfKaeLYNsOBVW3X4ZPmffYfWBheZiaiEflq/P6t7/Eg81gaKYnZ/x1Dfa\nsUYkzPvCkXe9wEz5zdUTOCptDt89rBR9CstL9vE7WYUgiVVmBJffWbHQLtfjv6OF\nNMb0QME981kGRzc2WhgP71YS2hHd1kXtsoYP1yTu4vThSKsoN4bkiHsaC1cRkLoy\n0fFA4wpB3WloMEvCDaUvvH1LZlBXTNlwi9KtcwD4tDxkkBt4tQczKLGpQ/nF/W9n\n8YDWk3IIc1sd0bkZqoau2Q==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/TCCAuWgAwIBAgIBTTANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjA1MDMyMTI5MjJaFw0y\nMDAzMDUyMTI5MjJaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UEAwwYQW1hem9uIFJE\nUyBhcC1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n06eWGLE0TeqL9kyWOLkS8q0fXO97z+xyBV3DKSB2lg2GkgBz3B98MkmkeB0SZy3G\nCe4uCpCPbFKiFEdiUclOlhZsrBuCeaimxLM3Ig2wuenElO/7TqgaYHYUbT3d+VQW\nGUbLn5GRZJZe1OAClYdOWm7A1CKpuo+cVV1vxbY2nGUQSJPpVn2sT9gnwvjdE60U\nJGYU/RLCTm8zmZBvlWaNIeKDnreIc4rKn6gUnJ2cQn1ryCVleEeyc3xjYDSrjgdn\nFLYGcp9mphqVT0byeQMOk0c7RHpxrCSA0V5V6/CreFV2LteK50qcDQzDSM18vWP/\np09FoN8O7QrtOeZJzH/lmwIDAQABo2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0T\nAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU2i83QHuEl/d0keXF+69HNJph7cMwHwYD\nVR0jBBgwFoAUTgLurD72FchM7Sz1BcGPnIQISYMwDQYJKoZIhvcNAQELBQADggEB\nACqnH2VjApoDqoSQOky52QBwsGaj+xWYHW5Gm7EvCqvQuhWMkeBuD6YJmMvNyA9G\nI2lh6/o+sUk/RIsbYbxPRdhNPTOgDR9zsNRw6qxaHztq/CEC+mxDCLa3O1hHBaDV\nBmB3nCZb93BvO0EQSEk7aytKq/f+sjyxqOcs385gintdHGU9uM7gTZHnU9vByJsm\n/TL07Miq67X0NlhIoo3jAk+xHaeKJdxdKATQp0448P5cY20q4b8aMk1twcNaMvCP\ndG4M5doaoUA8OQ/0ukLLae/LBxLeTw04q1/a2SyFaVUX2Twbb1S3xVWwLA8vsyGr\nigXx7B5GgP+IHb6DTjPJAi0=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBTjANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjA4MTExOTU4NDVaFw0y\nMDAzMDUxOTU4NDVaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyB1cy1lYXN0LTIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCp\nWnnUX7wM0zzstccX+4iXKJa9GR0a2PpvB1paEX4QRCgfhEdQWDaSqyrWNgdVCKkt\n1aQkWu5j6VAC2XIG7kKoonm1ZdBVyBLqW5lXNywlaiU9yhJkwo8BR+/OqgE+PLt/\nEO1mlN0PQudja/XkExCXTO29TG2j7F/O7hox6vTyHNHc0H88zS21uPuBE+jivViS\nyzj/BkyoQ85hnkues3f9R6gCGdc+J51JbZnmgzUkvXjAEuKhAm9JksVOxcOKUYe5\nERhn0U9zjzpfbAITIkul97VVa5IxskFFTHIPJbvRKHJkiF6wTJww/tc9wm+fSCJ1\n+DbQTGZgkQ3bJrqRN29/AgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSAHQzUYYZbepwKEMvGdHp8wzHnfDAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOCAQEA\nMbaEzSYZ+aZeTBxf8yi0ta8K4RdwEJsEmP6IhFFQHYUtva2Cynl4Q9tZg3RMsybT\n9mlnSQQlbN/wqIIXbkrcgFcHoXG9Odm/bDtUwwwDaiEhXVfeQom3G77QHOWMTCGK\nqadwuh5msrb17JdXZoXr4PYHDKP7j0ONfAyFNER2+uecblHfRSpVq5UeF3L6ZJb8\nfSw/GtAV6an+/0r+Qm+PiI2H5XuZ4GmRJYnGMhqWhBYrY7p3jtVnKcsh39wgfUnW\nAvZEZG/yhFyAZW0Essa39LiL5VSq14Y1DOj0wgnhSY/9WHxaAo1HB1T9OeZknYbD\nfl/EGSZ0TEvZkENrXcPlVA==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/zCCAuegAwIBAgIBTzANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjA5MTUwMDEwMTFaFw0y\nMDAzMDUwMDEwMTFaMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEjMCEGA1UEAwwaQW1hem9uIFJE\nUyBjYS1jZW50cmFsLTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQCZYI/iQ6DrS3ny3t1EwX1wAD+3LMgh7Fd01EW5LIuaK2kYIIQpsVKhxLCit/V5\nAGc/1qiJS1Qz9ODLTh0Na6bZW6EakRzuHJLe32KJtoFYPC7Z09UqzXrpA/XL+1hM\nP0ZmCWsU7Nn/EmvfBp9zX3dZp6P6ATrvDuYaVFr+SA7aT3FXpBroqBS1fyzUPs+W\nc6zTR6+yc4zkHX0XQxC5RH6xjgpeRkoOajA/sNo7AQF7KlWmKHbdVF44cvvAhRKZ\nXaoVs/C4GjkaAEPTCbopYdhzg+KLx9eB2BQnYLRrIOQZtRfbQI2Nbj7p3VsRuOW1\ntlcks2w1Gb0YC6w6SuIMFkl1AgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNV\nHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBToYWxE1lawl6Ks6NsvpbHQ3GKEtzAf\nBgNVHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOC\nAQEAG/8tQ0ooi3hoQpa5EJz0/E5VYBsAz3YxA2HoIonn0jJyG16bzB4yZt4vNQMA\nKsNlQ1uwDWYL1nz63axieUUFIxqxl1KmwfhsmLgZ0Hd2mnTPIl2Hw3uj5+wdgGBg\nagnAZ0bajsBYgD2VGQbqjdk2Qn7Fjy3LEWIvGZx4KyZ99OJ2QxB7JOPdauURAtWA\nDKYkP4LLJxtj07DSzG8kuRWb9B47uqUD+eKDIyjfjbnzGtd9HqqzYFau7EX3HVD9\n9Qhnjl7bTZ6YfAEZ3nH2t3Vc0z76XfGh47rd0pNRhMV+xpok75asKf/lNh5mcUrr\nVKwflyMkQpSbDCmcdJ90N2xEXQ==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBUDANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjEwMTAxNzQ0NDJaFw0y\nMDAzMDUxNzQ0NDJaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyBldS13ZXN0LTIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDO\ncttLJfubB4XMMIGWNfJISkIdCMGJyOzLiMJaiWB5GYoXKhEl7YGotpy0qklwW3BQ\na0fmVdcCLX+dIuVQ9iFK+ZcK7zwm7HtdDTCHOCKeOh2IcnU4c/VIokFi6Gn8udM6\nN/Zi5M5OGpVwLVALQU7Yctsn3c95el6MdVx6mJiIPVu7tCVZn88Z2koBQ2gq9P4O\nSb249SHFqOb03lYDsaqy1NDsznEOhaRBw7DPJFpvmw1lA3/Y6qrExRI06H2VYR2i\n7qxwDV50N58fs10n7Ye1IOxTVJsgEA7X6EkRRXqYaM39Z76R894548WHfwXWjUsi\nMEX0RS0/t1GmnUQjvevDAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQBxmcuRSxERYCtNnSr5xNfySokHjAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOCAQEA\nUyCUQjsF3nUAABjfEZmpksTuUo07aT3KGYt+EMMFdejnBQ0+2lJJFGtT+CDAk1SD\nRSgfEBon5vvKEtlnTf9a3pv8WXOAkhfxnryr9FH6NiB8obISHNQNPHn0ljT2/T+I\nY6ytfRvKHa0cu3V0NXbJm2B4KEOt4QCDiFxUIX9z6eB4Kditwu05OgQh6KcogOiP\nJesWxBMXXGoDC1rIYTFO7szwDyOHlCcVXJDNsTJhc32oDWYdeIbW7o/5I+aQsrXZ\nC96HykZcgWzz6sElrQxUaT3IoMw/5nmw4uWKKnZnxgI9bY4fpQwMeBZ96iHfFxvH\nmqfEEuC7uUoPofXdBp2ObQ==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIECjCCAvKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZMxCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSQwIgYDVQQDDBtBbWF6b24gUkRTIEdvdkNsb3VkIFJvb3QgQ0EwHhcNMTcwNTE5\nMjIzMTE5WhcNMjIwNTE4MTIwMDAwWjCBkzELMAkGA1UEBhMCVVMxEzARBgNVBAgM\nCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBX\nZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJDAiBgNVBAMM\nG0FtYXpvbiBSRFMgdXMtZ292LXdlc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAM8YZLKAzzOdNnoi7Klih26Zkj+OCpDfwx4ZYB6f8L8UoQi5\n8z9ZtIwMjiJ/kO08P1yl4gfc7YZcNFvhGruQZNat3YNpxwUpQcr4mszjuffbL4uz\n+/8FBxALdqCVOJ5Q0EVSfz3d9Bd1pUPL7ARtSpy7bn/tUPyQeI+lODYO906C0TQ3\nb9bjOsgAdBKkHfjLdsknsOZYYIzYWOJyFJJa0B11XjDUNBy/3IuC0KvDl6At0V5b\n8M6cWcKhte2hgjwTYepV+/GTadeube1z5z6mWsN5arOAQUtYDLH6Aztq9mCJzLHm\nRccBugnGl3fRLJ2VjioN8PoGoN9l9hFBy5fnFgsCAwEAAaNmMGQwDgYDVR0PAQH/\nBAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEG7+br8KkvwPd5g\n71Rvh2stclJbMB8GA1UdIwQYMBaAFEkQz6S4NS5lOYKcDjBSuCcVpdzjMA0GCSqG\nSIb3DQEBCwUAA4IBAQBMA327u5ABmhX+aPxljoIbxnydmAFWxW6wNp5+rZrvPig8\nzDRqGQWWr7wWOIjfcWugSElYtf/m9KZHG/Z6+NG7nAoUrdcd1h/IQhb+lFQ2b5g9\nsVzQv/H2JNkfZA8fL/Ko/Tm/f9tcqe0zrGCtT+5u0Nvz35Wl8CEUKLloS5xEb3k5\n7D9IhG3fsE3vHWlWrGCk1cKry3j12wdPG5cUsug0vt34u6rdhP+FsM0tHI15Kjch\nRuUCvyQecy2ZFNAa3jmd5ycNdL63RWe8oayRBpQBxPPCbHfILxGZEdJbCH9aJ2D/\nl8oHIDnvOLdv7/cBjyYuvmprgPtu3QEkbre5Hln/\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIID/DCCAuSgAwIBAgIBUTANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNzA4MjUyMTM5MjZaFw0y\nMDAzMDUyMTM5MjZaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\nUyBldS13ZXN0LTMgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+\nxmlEC/3a4cJH+UPwXCE02lC7Zq5NHd0dn6peMeLN8agb6jW4VfSY0NydjRj2DJZ8\nK7wV6sub5NUGT1NuFmvSmdbNR2T59KX0p2dVvxmXHHtIpQ9Y8Aq3ZfhmC5q5Bqgw\ntMA1xayDi7HmoPX3R8kk9ktAZQf6lDeksCvok8idjTu9tiSpDiMwds5BjMsWfyjZ\nd13PTGGNHYVdP692BSyXzSP1Vj84nJKnciW8tAqwIiadreJt5oXyrCXi8ekUMs80\ncUTuGm3aA3Q7PB5ljJMPqz0eVddaiIvmTJ9O3Ez3Du/HpImyMzXjkFaf+oNXf/Hx\n/EW5jCRR6vEiXJcDRDS7AgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\nAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRZ9mRtS5fHk3ZKhG20Oack4cAqMTAfBgNV\nHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOCAQEA\nF/u/9L6ExQwD73F/bhCw7PWcwwqsK1mypIdrjdIsu0JSgwWwGCXmrIspA3n3Dqxq\nsMhAJD88s9Em7337t+naar2VyLO63MGwjj+vA4mtvQRKq8ScIpiEc7xN6g8HUMsd\ngPG9lBGfNjuAZsrGJflrko4HyuSM7zHExMjXLH+CXcv/m3lWOZwnIvlVMa4x0Tz0\nA4fklaawryngzeEjuW6zOiYCzjZtPlP8Fw0SpzppJ8VpQfrZ751RDo4yudmPqoPK\n5EUe36L8U+oYBXnC5TlYs9bpVv9o5wJQI5qA9oQE2eFWxF1E0AyZ4V5sgGUBStaX\nBjDDWul0wSo7rt1Tq7XpnA==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEATCCAumgAwIBAgIBTjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nGzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNzEyMDEwMDU1NDJaFw0y\nMDAzMDUwMDU1NDJaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\nbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\ncywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\nUyBhcC1ub3J0aGVhc3QtMyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAMZtQNnm/XT19mTa10ftHLzg5UhajoI65JHv4TQNdGXdsv+CQdGYU49BJ9Eu\n3bYgiEtTzR2lQe9zGMvtuJobLhOWuavzp7IixoIQcHkFHN6wJ1CvqrxgvJfBq6Hy\nEuCDCiU+PPDLUNA6XM6Qx3IpHd1wrJkjRB80dhmMSpxmRmx849uFafhN+P1QybsM\nTI0o48VON2+vj+mNuQTyLMMP8D4odSQHjaoG+zyJfJGZeAyqQyoOUOFEyQaHC3TT\n3IDSNCQlpxb9LerbCoKu79WFBBq3CS5cYpg8/fsnV2CniRBFFUumBt5z4dhw9RJU\nqlUXXO1ZyzpGd+c5v6FtrfXtnIUCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\nA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFETv7ELNplYy/xTeIOInl6nzeiHg\nMB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\nA4IBAQCpKxOQcd0tEKb3OtsOY8q/MPwTyustGk2Rt7t9G68idADp8IytB7M0SDRo\nwWZqynEq7orQVKdVOanhEWksNDzGp0+FPAf/KpVvdYCd7ru3+iI+V4ZEp2JFdjuZ\nZz0PIjS6AgsZqE5Ri1J+NmfmjGZCPhsHnGZiBaenX6K5VRwwwmLN6xtoqrrfR5zL\nQfBeeZNJG6KiM3R/DxJ5rAa6Fz+acrhJ60L7HprhB7SFtj1RCijau3+ZwiGmUOMr\nyKlMv+VgmzSw7o4Hbxy1WVrA6zQsTHHSGf+vkQn2PHvnFMUEu/ZLbTDYFNmTLK91\nK6o4nMsEvhBKgo4z7H1EqqxXhvN2\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEDjCCAvagAwIBAgIJAMM61RQn3/kdMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD\nVQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\nMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\nem9uIFJEUzEkMCIGA1UEAwwbQW1hem9uIFJEUyBHb3ZDbG91ZCBSb290IENBMB4X\nDTE3MDUxOTIyMjkxMVoXDTIyMDUxODIyMjkxMVowgZMxCzAJBgNVBAYTAlVTMRAw\nDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQKDBlB\nbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMSQw\nIgYDVQQDDBtBbWF6b24gUkRTIEdvdkNsb3VkIFJvb3QgQ0EwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQDGS9bh1FGiJPT+GRb3C5aKypJVDC1H2gbh6n3u\nj8cUiyMXfmm+ak402zdLpSYMaxiQ7oL/B3wEmumIpRDAsQrSp3B/qEeY7ipQGOfh\nq2TXjXGIUjiJ/FaoGqkymHRLG+XkNNBtb7MRItsjlMVNELXECwSiMa3nJL2/YyHW\nnTr1+11/weeZEKgVbCUrOugFkMXnfZIBSn40j6EnRlO2u/NFU5ksK5ak2+j8raZ7\nxW7VXp9S1Tgf1IsWHjGZZZguwCkkh1tHOlHC9gVA3p63WecjrIzcrR/V27atul4m\ntn56s5NwFvYPUIx1dbC8IajLUrepVm6XOwdQCfd02DmOyjWJAgMBAAGjYzBhMA4G\nA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRJEM+kuDUu\nZTmCnA4wUrgnFaXc4zAfBgNVHSMEGDAWgBRJEM+kuDUuZTmCnA4wUrgnFaXc4zAN\nBgkqhkiG9w0BAQsFAAOCAQEAcfA7uirXsNZyI2j4AJFVtOTKOZlQwqbyNducnmlg\n/5nug9fAkwM4AgvF5bBOD1Hw6khdsccMwIj+1S7wpL+EYb/nSc8G0qe1p/9lZ/mZ\nff5g4JOa26lLuCrZDqAk4TzYnt6sQKfa5ZXVUUn0BK3okhiXS0i+NloMyaBCL7vk\nkDwkHwEqflRKfZ9/oFTcCfoiHPA7AdBtaPVr0/Kj9L7k+ouz122huqG5KqX0Zpo8\nS0IGvcd2FZjNSNPttNAK7YuBVsZ0m2nIH1SLp//00v7yAHIgytQwwB17PBcp4NXD\npCfTa27ng9mMMC2YLqWQpW4TkqjDin2ZC+5X/mbrjzTvVg==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBzCCAu+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSUwIwYDVQQDDBxBbWF6b24gUkRTIGFwLWVhc3QtMSBSb290IENBMB4XDTE5MDIx\nNzAyNDcwMFoXDTIyMDYwMTEyMDAwMFowgY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQI\nDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6b24g\nV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMSAwHgYDVQQD\nDBdBbWF6b24gUkRTIGFwLWVhc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBAOcJAUofyJuBuPr5ISHi/Ha5ed8h3eGdzn4MBp6rytPOg9NVGRQs\nO93fNGCIKsUT6gPuk+1f1ncMTV8Y0Fdf4aqGWme+Khm3ZOP3V1IiGnVq0U2xiOmn\nSQ4Q7LoeQC4lC6zpoCHVJyDjZ4pAknQQfsXb77Togdt/tK5ahev0D+Q3gCwAoBoO\nDHKJ6t820qPi63AeGbJrsfNjLKiXlFPDUj4BGir4dUzjEeH7/hx37na1XG/3EcxP\n399cT5k7sY/CR9kctMlUyEEUNQOmhi/ly1Lgtihm3QfjL6K9aGLFNwX35Bkh9aL2\nF058u+n8DP/dPeKUAcJKiQZUmzuen5n57x8CAwEAAaNmMGQwDgYDVR0PAQH/BAQD\nAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFlqgF4FQlb9yP6c+Q3E\nO3tXv+zOMB8GA1UdIwQYMBaAFK9T6sY/PBZVbnHcNcQXf58P4OuPMA0GCSqGSIb3\nDQEBCwUAA4IBAQDeXiS3v1z4jWAo1UvVyKDeHjtrtEH1Rida1eOXauFuEQa5tuOk\nE53Os4haZCW4mOlKjigWs4LN+uLIAe1aFXGo92nGIqyJISHJ1L+bopx/JmIbHMCZ\n0lTNJfR12yBma5VQy7vzeFku/SisKwX0Lov1oHD4MVhJoHbUJYkmAjxorcIHORvh\nI3Vj5XrgDWtLDPL8/Id/roul/L+WX5ir+PGScKBfQIIN2lWdZoqdsx8YWqhm/ikL\nC6qNieSwcvWL7C03ri0DefTQMY54r5wP33QU5hJ71JoaZI3YTeT0Nf+NRL4hM++w\nQ0veeNzBQXg1f/JxfeA39IDIX1kiCf71tGlT\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEDDCCAvSgAwIBAgICcEUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNjU2\nMjBaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\nem9uIFJEUyBhcC1ub3J0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAndtkldmHtk4TVQAyqhAvtEHSMb6pLhyKrIFved1WO3S7\n+I+bWwv9b2W/ljJxLq9kdT43bhvzonNtI4a1LAohS6bqyirmk8sFfsWT3akb+4Sx\n1sjc8Ovc9eqIWJCrUiSvv7+cS7ZTA9AgM1PxvHcsqrcUXiK3Jd/Dax9jdZE1e15s\nBEhb2OEPE+tClFZ+soj8h8Pl2Clo5OAppEzYI4LmFKtp1X/BOf62k4jviXuCSst3\nUnRJzE/CXtjmN6oZySVWSe0rQYuyqRl6//9nK40cfGKyxVnimB8XrrcxUN743Vud\nQQVU0Esm8OVTX013mXWQXJHP2c0aKkog8LOga0vobQIDAQABo2YwZDAOBgNVHQ8B\nAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQULmoOS1mFSjj+\nsnUPx4DgS3SkLFYwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\nKoZIhvcNAQELBQADggEBAAkVL2P1M2/G9GM3DANVAqYOwmX0Xk58YBHQu6iiQg4j\nb4Ky/qsZIsgT7YBsZA4AOcPKQFgGTWhe9pvhmXqoN3RYltN8Vn7TbUm/ZVDoMsrM\ngwv0+TKxW1/u7s8cXYfHPiTzVSJuOogHx99kBW6b2f99GbP7O1Sv3sLq4j6lVvBX\nFiacf5LAWC925nvlTzLlBgIc3O9xDtFeAGtZcEtxZJ4fnGXiqEnN4539+nqzIyYq\nnvlgCzyvcfRAxwltrJHuuRu6Maw5AGcd2Y0saMhqOVq9KYKFKuD/927BTrbd2JVf\n2sGWyuPZPCk3gq+5pCjbD0c6DkhcMGI6WwxvM5V/zSM=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEDDCCAvSgAwIBAgICOFAwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAxNzQ2\nMjFaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\nem9uIFJEUyBhcC1ub3J0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAzU72e6XbaJbi4HjJoRNjKxzUEuChKQIt7k3CWzNnmjc5\n8I1MjCpa2W1iw1BYVysXSNSsLOtUsfvBZxi/1uyMn5ZCaf9aeoA9UsSkFSZBjOCN\nDpKPCmfV1zcEOvJz26+1m8WDg+8Oa60QV0ou2AU1tYcw98fOQjcAES0JXXB80P2s\n3UfkNcnDz+l4k7j4SllhFPhH6BQ4lD2NiFAP4HwoG6FeJUn45EPjzrydxjq6v5Fc\ncQ8rGuHADVXotDbEhaYhNjIrsPL+puhjWfhJjheEw8c4whRZNp6gJ/b6WEes/ZhZ\nh32DwsDsZw0BfRDUMgUn8TdecNexHUw8vQWeC181hwIDAQABo2YwZDAOBgNVHQ8B\nAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwW9bWgkWkr0U\nlrOsq2kvIdrECDgwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\nKoZIhvcNAQELBQADggEBAEugF0Gj7HVhX0ehPZoGRYRt3PBuI2YjfrrJRTZ9X5wc\n9T8oHmw07mHmNy1qqWvooNJg09bDGfB0k5goC2emDiIiGfc/kvMLI7u+eQOoMKj6\nmkfCncyRN3ty08Po45vTLBFZGUvtQmjM6yKewc4sXiASSBmQUpsMbiHRCL72M5qV\nobcJOjGcIdDTmV1BHdWT+XcjynsGjUqOvQWWhhLPrn4jWe6Xuxll75qlrpn3IrIx\nCRBv/5r7qbcQJPOgwQsyK4kv9Ly8g7YT1/vYBlR3cRsYQjccw5ceWUj2DrMVWhJ4\nprf+E3Aa4vYmLLOUUvKnDQ1k3RGNu56V0tonsQbfsaM=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEDDCCAvSgAwIBAgICOYIwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTcyMDA1\nMjlaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\nem9uIFJEUyBhcC1ub3J0aGVhc3QtMyAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEA4dMak8W+XW8y/2F6nRiytFiA4XLwePadqWebGtlIgyCS\nkbug8Jv5w7nlMkuxOxoUeD4WhI6A9EkAn3r0REM/2f0aYnd2KPxeqS2MrtdxxHw1\nxoOxk2x0piNSlOz6yog1idsKR5Wurf94fvM9FdTrMYPPrDabbGqiBMsZZmoHLvA3\nZ+57HEV2tU0Ei3vWeGIqnNjIekS+E06KhASxrkNU5vi611UsnYZlSi0VtJsH4UGV\nLhnHl53aZL0YFO5mn/fzuNG/51qgk/6EFMMhaWInXX49Dia9FnnuWXwVwi6uX1Wn\n7kjoHi5VtmC8ZlGEHroxX2DxEr6bhJTEpcLMnoQMqwIDAQABo2YwZDAOBgNVHQ8B\nAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUsUI5Cb3SWB8+\ngv1YLN/ABPMdxSAwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\nKoZIhvcNAQELBQADggEBAJAF3E9PM1uzVL8YNdzb6fwJrxxqI2shvaMVmC1mXS+w\nG0zh4v2hBZOf91l1EO0rwFD7+fxoI6hzQfMxIczh875T6vUXePKVOCOKI5wCrDad\nzQbVqbFbdhsBjF4aUilOdtw2qjjs9JwPuB0VXN4/jY7m21oKEOcnpe36+7OiSPjN\nxngYewCXKrSRqoj3mw+0w/+exYj3Wsush7uFssX18av78G+ehKPIVDXptOCP/N7W\n8iKVNeQ2QGTnu2fzWsGUSvMGyM7yqT+h1ILaT//yQS8er511aHMLc142bD4D9VSy\nDgactwPDTShK/PXqhvNey9v/sKXm4XatZvwcc8KYlW4=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIECDCCAvCgAwIBAgICVIYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDQxNzEz\nMDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\nem9uIFJEUyBhcC1zb3V0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDUYOz1hGL42yUCrcsMSOoU8AeD/3KgZ4q7gP+vAz1WnY9K/kim\neWN/2Qqzlo3+mxSFQFyD4MyV3+CnCPnBl9Sh1G/F6kThNiJ7dEWSWBQGAB6HMDbC\nBaAsmUc1UIz8sLTL3fO+S9wYhA63Wun0Fbm/Rn2yk/4WnJAaMZcEtYf6e0KNa0LM\np/kN/70/8cD3iz3dDR8zOZFpHoCtf0ek80QqTich0A9n3JLxR6g6tpwoYviVg89e\nqCjQ4axxOkWWeusLeTJCcY6CkVyFvDAKvcUl1ytM5AiaUkXblE7zDFXRM4qMMRdt\nlPm8d3pFxh0fRYk8bIKnpmtOpz3RIctDrZZxAgMBAAGjZjBkMA4GA1UdDwEB/wQE\nAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT99wKJftD3jb4sHoHG\ni3uGlH6W6TAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n9w0BAQsFAAOCAQEAZ17hhr3dII3hUfuHQ1hPWGrpJOX/G9dLzkprEIcCidkmRYl+\nhu1Pe3caRMh/17+qsoEErmnVq5jNY9X1GZL04IZH8YbHc7iRHw3HcWAdhN8633+K\njYEB2LbJ3vluCGnCejq9djDb6alOugdLMJzxOkHDhMZ6/gYbECOot+ph1tQuZXzD\ntZ7prRsrcuPBChHlPjmGy8M9z8u+kF196iNSUGC4lM8vLkHM7ycc1/ZOwRq9aaTe\niOghbQQyAEe03MWCyDGtSmDfr0qEk+CHN+6hPiaL8qKt4s+V9P7DeK4iW08ny8Ox\nAVS7u0OK/5+jKMAMrKwpYrBydOjTUTHScocyNw==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEDDCCAvSgAwIBAgICY4kwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTMyMDEx\nNDJaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\nem9uIFJEUyBhcC1zb3V0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAr5u9OuLL/OF/fBNUX2kINJLzFl4DnmrhnLuSeSnBPgbb\nqddjf5EFFJBfv7IYiIWEFPDbDG5hoBwgMup5bZDbas+ZTJTotnnxVJTQ6wlhTmns\neHECcg2pqGIKGrxZfbQhlj08/4nNAPvyYCTS0bEcmQ1emuDPyvJBYDDLDU6AbCB5\n6Z7YKFQPTiCBblvvNzchjLWF9IpkqiTsPHiEt21sAdABxj9ityStV3ja/W9BfgxH\nwzABSTAQT6FbDwmQMo7dcFOPRX+hewQSic2Rn1XYjmNYzgEHisdUsH7eeXREAcTw\n61TRvaLH8AiOWBnTEJXPAe6wYfrcSd1pD0MXpoB62wIDAQABo2YwZDAOBgNVHQ8B\nAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUytwMiomQOgX5\nIchd+2lDWRUhkikwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\nKoZIhvcNAQELBQADggEBACf6lRDpfCD7BFRqiWM45hqIzffIaysmVfr+Jr+fBTjP\nuYe/ba1omSrNGG23bOcT9LJ8hkQJ9d+FxUwYyICQNWOy6ejicm4z0C3VhphbTPqj\nyjpt9nG56IAcV8BcRJh4o/2IfLNzC/dVuYJV8wj7XzwlvjysenwdrJCoLadkTr1h\neIdG6Le07sB9IxrGJL9e04afk37h7c8ESGSE4E+oS4JQEi3ATq8ne1B9DQ9SasXi\nIRmhNAaISDzOPdyLXi9N9V9Lwe/DHcja7hgLGYx3UqfjhLhOKwp8HtoZORixAmOI\nHfILgNmwyugAbuZoCazSKKBhQ0wgO0WZ66ZKTMG8Oho=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEDDCCAvSgAwIBAgICEkYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxOTUz\nNDdaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\nem9uIFJEUyBhcC1zb3V0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAufodI2Flker8q7PXZG0P0vmFSlhQDw907A6eJuF/WeMo\nGHnll3b4S6nC3oRS3nGeRMHbyU2KKXDwXNb3Mheu+ox+n5eb/BJ17eoj9HbQR1cd\ngEkIciiAltf8gpMMQH4anP7TD+HNFlZnP7ii3geEJB2GGXSxgSWvUzH4etL67Zmn\nTpGDWQMB0T8lK2ziLCMF4XAC/8xDELN/buHCNuhDpxpPebhct0T+f6Arzsiswt2j\n7OeNeLLZwIZvVwAKF7zUFjC6m7/VmTQC8nidVY559D6l0UhhU0Co/txgq3HVsMOH\nPbxmQUwJEKAzQXoIi+4uZzHFZrvov/nDTNJUhC6DqwIDAQABo2YwZDAOBgNVHQ8B\nAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwaZpaCme+EiV\nM5gcjeHZSTgOn4owHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\nKoZIhvcNAQELBQADggEBAAR6a2meCZuXO2TF9bGqKGtZmaah4pH2ETcEVUjkvXVz\nsl+ZKbYjrun+VkcMGGKLUjS812e7eDF726ptoku9/PZZIxlJB0isC/0OyixI8N4M\nNsEyvp52XN9QundTjkl362bomPnHAApeU0mRbMDRR2JdT70u6yAzGLGsUwMkoNnw\n1VR4XKhXHYGWo7KMvFrZ1KcjWhubxLHxZWXRulPVtGmyWg/MvE6KF+2XMLhojhUL\n+9jB3Fpn53s6KMx5tVq1x8PukHmowcZuAF8k+W4gk8Y68wIwynrdZrKRyRv6CVtR\nFZ8DeJgoNZT3y/GT254VqMxxfuy2Ccb/RInd16tEvVk=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIECjCCAvKgAwIBAgICEzUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAyMDUy\nMjVaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\nem9uIFJEUyBjYS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAOxHqdcPSA2uBjsCP4DLSlqSoPuQ/X1kkJLusVRKiQE2zayB\nviuCBt4VB9Qsh2rW3iYGM+usDjltGnI1iUWA5KHcvHszSMkWAOYWLiMNKTlg6LCp\nXnE89tvj5dIH6U8WlDvXLdjB/h30gW9JEX7S8supsBSci2GxEzb5mRdKaDuuF/0O\nqvz4YE04pua3iZ9QwmMFuTAOYzD1M72aOpj+7Ac+YLMM61qOtU+AU6MndnQkKoQi\nqmUN2A9IFaqHFzRlSdXwKCKUA4otzmz+/N3vFwjb5F4DSsbsrMfjeHMo6o/nb6Nh\nYDb0VJxxPee6TxSuN7CQJ2FxMlFUezcoXqwqXD0CAwEAAaNmMGQwDgYDVR0PAQH/\nBAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDGGpon9WfIpsggE\nCxHq8hZ7E2ESMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\nSIb3DQEBCwUAA4IBAQAvpeQYEGZvoTVLgV9rd2+StPYykMsmFjWQcyn3dBTZRXC2\nlKq7QhQczMAOhEaaN29ZprjQzsA2X/UauKzLR2Uyqc2qOeO9/YOl0H3qauo8C/W9\nr8xqPbOCDLEXlOQ19fidXyyEPHEq5WFp8j+fTh+s8WOx2M7IuC0ANEetIZURYhSp\nxl9XOPRCJxOhj7JdelhpweX0BJDNHeUFi0ClnFOws8oKQ7sQEv66d5ddxqqZ3NVv\nRbCvCtEutQMOUMIuaygDlMn1anSM8N7Wndx8G6+Uy67AnhjGx7jw/0YPPxopEj6x\nJXP8j0sJbcT9K/9/fPVLNT25RvQ/93T2+IQL4Ca2\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIECjCCAvKgAwIBAgICV2YwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExOTM2\nMjBaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\nem9uIFJEUyBldS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAMEx54X2pHVv86APA0RWqxxRNmdkhAyp2R1cFWumKQRofoFv\nn+SPXdkpIINpMuEIGJANozdiEz7SPsrAf8WHyD93j/ZxrdQftRcIGH41xasetKGl\nI67uans8d+pgJgBKGb/Z+B5m+UsIuEVekpvgpwKtmmaLFC/NCGuSsJoFsRqoa6Gh\nm34W6yJoY87UatddCqLY4IIXaBFsgK9Q/wYzYLbnWM6ZZvhJ52VMtdhcdzeTHNW0\n5LGuXJOF7Ahb4JkEhoo6TS2c0NxB4l4MBfBPgti+O7WjR3FfZHpt18A6Zkq6A2u6\nD/oTSL6c9/3sAaFTFgMyL3wHb2YlW0BPiljZIqECAwEAAaNmMGQwDgYDVR0PAQH/\nBAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOcAToAc6skWffJa\nTnreaswAfrbcMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\nSIb3DQEBCwUAA4IBAQA1d0Whc1QtspK496mFWfFEQNegLh0a9GWYlJm+Htcj5Nxt\nDAIGXb+8xrtOZFHmYP7VLCT5Zd2C+XytqseK/+s07iAr0/EPF+O2qcyQWMN5KhgE\ncXw2SwuP9FPV3i+YAm11PBVeenrmzuk9NrdHQ7TxU4v7VGhcsd2C++0EisrmquWH\nmgIfmVDGxphwoES52cY6t3fbnXmTkvENvR+h3rj+fUiSz0aSo+XZUGHPgvuEKM/W\nCBD9Smc9CBoBgvy7BgHRgRUmwtABZHFUIEjHI5rIr7ZvYn+6A0O6sogRfvVYtWFc\nqpyrW1YX8mD0VlJ8fGKM3G+aCOsiiPKDV/Uafrm+\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIECDCCAvCgAwIBAgICGAcwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIxODE5\nNDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\nem9uIFJEUyBldS1ub3J0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQCiIYnhe4UNBbdBb/nQxl5giM0XoVHWNrYV5nB0YukA98+TPn9v\nAoj1RGYmtryjhrf01Kuv8SWO+Eom95L3zquoTFcE2gmxCfk7bp6qJJ3eHOJB+QUO\nXsNRh76fwDzEF1yTeZWH49oeL2xO13EAx4PbZuZpZBttBM5zAxgZkqu4uWQczFEs\nJXfla7z2fvWmGcTagX10O5C18XaFroV0ubvSyIi75ue9ykg/nlFAeB7O0Wxae88e\nuhiBEFAuLYdqWnsg3459NfV8Yi1GnaitTym6VI3tHKIFiUvkSiy0DAlAGV2iiyJE\nq+DsVEO4/hSINJEtII4TMtysOsYPpINqeEzRAgMBAAGjZjBkMA4GA1UdDwEB/wQE\nAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRR0UpnbQyjnHChgmOc\nhnlc0PogzTAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n9w0BAQsFAAOCAQEAKJD4xVzSf4zSGTBJrmamo86jl1NHQxXUApAZuBZEc8tqC6TI\nT5CeoSr9CMuVC8grYyBjXblC4OsM5NMvmsrXl/u5C9dEwtBFjo8mm53rOOIm1fxl\nI1oYB/9mtO9ANWjkykuLzWeBlqDT/i7ckaKwalhLODsRDO73vRhYNjsIUGloNsKe\npxw3dzHwAZx4upSdEVG4RGCZ1D0LJ4Gw40OfD69hfkDfRVVxKGrbEzqxXRvovmDc\ntKLdYZO/6REoca36v4BlgIs1CbUXJGLSXUwtg7YXGLSVBJ/U0+22iGJmBSNcoyUN\ncjPFD9JQEhDDIYYKSGzIYpvslvGc4T5ISXFiuQ==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBzCCAu+gAwIBAgICYpgwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExNzMx\nNDhaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\nem9uIFJEUyBldS13ZXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBAMk3YdSZ64iAYp6MyyKtYJtNzv7zFSnnNf6vv0FB4VnfITTMmOyZ\nLXqKAT2ahZ00hXi34ewqJElgU6eUZT/QlzdIu359TEZyLVPwURflL6SWgdG01Q5X\nO++7fSGcBRyIeuQWs9FJNIIqK8daF6qw0Rl5TXfu7P9dBc3zkgDXZm2DHmxGDD69\n7liQUiXzoE1q2Z9cA8+jirDioJxN9av8hQt12pskLQumhlArsMIhjhHRgF03HOh5\ntvi+RCfihVOxELyIRTRpTNiIwAqfZxxTWFTgfn+gijTmd0/1DseAe82aYic8JbuS\nEMbrDduAWsqrnJ4GPzxHKLXX0JasCUcWyMECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\nAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPLtsq1NrwJXO13C9eHt\nsLY11AGwMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\nDQEBCwUAA4IBAQAnWBKj5xV1A1mYd0kIgDdkjCwQkiKF5bjIbGkT3YEFFbXoJlSP\n0lZZ/hDaOHI8wbLT44SzOvPEEmWF9EE7SJzkvSdQrUAWR9FwDLaU427ALI3ngNHy\nlGJ2hse1fvSRNbmg8Sc9GBv8oqNIBPVuw+AJzHTacZ1OkyLZrz1c1QvwvwN2a+Jd\nvH0V0YIhv66llKcYDMUQJAQi4+8nbRxXWv6Gq3pvrFoorzsnkr42V3JpbhnYiK+9\nnRKd4uWl62KRZjGkfMbmsqZpj2fdSWMY1UGyN1k+kDmCSWYdrTRDP0xjtIocwg+A\nJ116n4hV/5mbA0BaPiS2krtv17YAeHABZcvz\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBzCCAu+gAwIBAgICZIEwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIyMTMy\nMzJaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\nem9uIFJEUyBldS13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBALGiwqjiF7xIjT0Sx7zB3764K2T2a1DHnAxEOr+/EIftWKxWzT3u\nPFwS2eEZcnKqSdRQ+vRzonLBeNLO4z8aLjQnNbkizZMBuXGm4BqRm1Kgq3nlLDQn\n7YqdijOq54SpShvR/8zsO4sgMDMmHIYAJJOJqBdaus2smRt0NobIKc0liy7759KB\n6kmQ47Gg+kfIwxrQA5zlvPLeQImxSoPi9LdbRoKvu7Iot7SOa+jGhVBh3VdqndJX\n7tm/saj4NE375csmMETFLAOXjat7zViMRwVorX4V6AzEg1vkzxXpA9N7qywWIT5Y\nfYaq5M8i6vvLg0CzrH9fHORtnkdjdu1y+0MCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\nAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFOhOx1yt3Z7mvGB9jBv\n2ymdZwiOMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\nDQEBCwUAA4IBAQBehqY36UGDvPVU9+vtaYGr38dBbp+LzkjZzHwKT1XJSSUc2wqM\nhnCIQKilonrTIvP1vmkQi8qHPvDRtBZKqvz/AErW/ZwQdZzqYNFd+BmOXaeZWV0Q\noHtDzXmcwtP8aUQpxN0e1xkWb1E80qoy+0uuRqb/50b/R4Q5qqSfJhkn6z8nwB10\n7RjLtJPrK8igxdpr3tGUzfAOyiPrIDncY7UJaL84GFp7WWAkH0WG3H8Y8DRcRXOU\nmqDxDLUP3rNuow3jnGxiUY+gGX5OqaZg4f4P6QzOSmeQYs6nLpH0PiN00+oS1BbD\nbpWdZEttILPI+vAYkU4QuBKKDjJL6HbSd+cn\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBzCCAu+gAwIBAgICJDQwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNzAz\nMTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\nem9uIFJEUyBldS13ZXN0LTMgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBAL9bL7KE0n02DLVtlZ2PL+g/BuHpMYFq2JnE2RgompGurDIZdjmh\n1pxfL3nT+QIVMubuAOy8InRfkRxfpxyjKYdfLJTPJG+jDVL+wDcPpACFVqoV7Prg\npVYEV0lc5aoYw4bSeYFhdzgim6F8iyjoPnObjll9mo4XsHzSoqJLCd0QC+VG9Fw2\nq+GDRZrLRmVM2oNGDRbGpGIFg77aRxRapFZa8SnUgs2AqzuzKiprVH5i0S0M6dWr\ni+kk5epmTtkiDHceX+dP/0R1NcnkCPoQ9TglyXyPdUdTPPRfKCq12dftqll+u4mV\nARdN6WFjovxax8EAP2OAUTi1afY+1JFMj+sCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\nAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLfhrbrO5exkCVgxW0x3\nY2mAi8lNMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\nDQEBCwUAA4IBAQAigQ5VBNGyw+OZFXwxeJEAUYaXVoP/qrhTOJ6mCE2DXUVEoJeV\nSxScy/TlFA9tJXqmit8JH8VQ/xDL4ubBfeMFAIAo4WzNWDVoeVMqphVEcDWBHsI1\nAETWzfsapRS9yQekOMmxg63d/nV8xewIl8aNVTHdHYXMqhhik47VrmaVEok1UQb3\nO971RadLXIEbVd9tjY5bMEHm89JsZDnDEw1hQXBb67Elu64OOxoKaHBgUH8AZn/2\nzFsL1ynNUjOhCSAA15pgd1vjwc0YsBbAEBPcHBWYBEyME6NLNarjOzBl4FMtATSF\nwWCKRGkvqN8oxYhwR2jf2rR5Mu4DWkK5Q8Ep\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEEjCCAvqgAwIBAgIJANew34ehz5l8MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\nVQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\nMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\nem9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0Ew\nHhcNMTkwNTEwMjE0ODI3WhcNMjQwNTA4MjE0ODI3WjCBlTELMAkGA1UEBhMCVVMx\nEDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\nGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\nJjAkBgNVBAMMHUFtYXpvbiBSRFMgbWUtc291dGgtMSBSb290IENBMIIBIjANBgkq\nhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp7BYV88MukcY+rq0r79+C8UzkT30fEfT\naPXbx1d6M7uheGN4FMaoYmL+JE1NZPaMRIPTHhFtLSdPccInvenRDIatcXX+jgOk\nUA6lnHQ98pwN0pfDUyz/Vph4jBR9LcVkBbe0zdoKKp+HGbMPRU0N2yNrog9gM5O8\ngkU/3O2csJ/OFQNnj4c2NQloGMUpEmedwJMOyQQfcUyt9CvZDfIPNnheUS29jGSw\nERpJe/AENu8Pxyc72jaXQuD+FEi2Ck6lBkSlWYQFhTottAeGvVFNCzKszCntrtqd\nrdYUwurYsLTXDHv9nW2hfDUQa0mhXf9gNDOBIVAZugR9NqNRNyYLHQIDAQABo2Mw\nYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU54cf\nDjgwBx4ycBH8+/r8WXdaiqYwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXda\niqYwDQYJKoZIhvcNAQELBQADggEBAIIMTSPx/dR7jlcxggr+O6OyY49Rlap2laKA\neC/XI4ySP3vQkIFlP822U9Kh8a9s46eR0uiwV4AGLabcu0iKYfXjPkIprVCqeXV7\nny9oDtrbflyj7NcGdZLvuzSwgl9SYTJp7PVCZtZutsPYlbJrBPHwFABvAkMvRtDB\nhitIg4AESDGPoCl94sYHpfDfjpUDMSrAMDUyO6DyBdZH5ryRMAs3lGtsmkkNUrso\naTW6R05681Z0mvkRdb+cdXtKOSuDZPoe2wJJIaz3IlNQNSrB5TImMYgmt6iAsFhv\n3vfTSTKrZDNTJn4ybG6pq1zWExoXsktZPylJly6R3RBwV6nwqBM=\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBzCCAu+gAwIBAgICQ2QwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDUxODQ2\nMjlaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\nem9uIFJEUyBzYS1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBAMMvR+ReRnOzqJzoaPipNTt1Z2VA968jlN1+SYKUrYM3No+Vpz0H\nM6Tn0oYB66ByVsXiGc28ulsqX1HbHsxqDPwvQTKvO7SrmDokoAkjJgLocOLUAeld\n5AwvUjxGRP6yY90NV7X786MpnYb2Il9DIIaV9HjCmPt+rjy2CZjS0UjPjCKNfB8J\nbFjgW6GGscjeyGb/zFwcom5p4j0rLydbNaOr9wOyQrtt3ZQWLYGY9Zees/b8pmcc\nJt+7jstZ2UMV32OO/kIsJ4rMUn2r/uxccPwAc1IDeRSSxOrnFKhW3Cu69iB3bHp7\nJbawY12g7zshE4I14sHjv3QoXASoXjx4xgMCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\nAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI1Fc/Ql2jx+oJPgBVYq\nccgP0pQ8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\nDQEBCwUAA4IBAQB4VVVabVp70myuYuZ3vltQIWqSUMhkaTzehMgGcHjMf9iLoZ/I\n93KiFUSGnek5cRePyS9wcpp0fcBT3FvkjpUdCjVtdttJgZFhBxgTd8y26ImdDDMR\n4+BUuhI5msvjL08f+Vkkpu1GQcGmyFVPFOy/UY8iefu+QyUuiBUnUuEDd49Hw0Fn\n/kIPII6Vj82a2mWV/Q8e+rgN8dIRksRjKI03DEoP8lhPlsOkhdwU6Uz9Vu6NOB2Q\nLs1kbcxAc7cFSyRVJEhh12Sz9d0q/CQSTFsVJKOjSNQBQfVnLz1GwO/IieUEAr4C\njkTntH0r1LX5b/GwN4R887LvjAEdTbg1his7\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBzCCAu+gAwIBAgICJVUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTkxODE2\nNTNaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\nem9uIFJEUyB1cy1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBAM3i/k2u6cqbMdcISGRvh+m+L0yaSIoOXjtpNEoIftAipTUYoMhL\nInXGlQBVA4shkekxp1N7HXe1Y/iMaPEyb3n+16pf3vdjKl7kaSkIhjdUz3oVUEYt\ni8Z/XeJJ9H2aEGuiZh3kHixQcZczn8cg3dA9aeeyLSEnTkl/npzLf//669Ammyhs\nXcAo58yvT0D4E0D/EEHf2N7HRX7j/TlyWvw/39SW0usiCrHPKDLxByLojxLdHzso\nQIp/S04m+eWn6rmD+uUiRteN1hI5ncQiA3wo4G37mHnUEKo6TtTUh+sd/ku6a8HK\nglMBcgqudDI90s1OpuIAWmuWpY//8xEG2YECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\nAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPqhoWZcrVY9mU7tuemR\nRBnQIj1jMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\nDQEBCwUAA4IBAQB6zOLZ+YINEs72heHIWlPZ8c6WY8MDU+Be5w1M+BK2kpcVhCUK\nPJO4nMXpgamEX8DIiaO7emsunwJzMSvavSPRnxXXTKIc0i/g1EbiDjnYX9d85DkC\nE1LaAUCmCZBVi9fIe0H2r9whIh4uLWZA41oMnJx/MOmo3XyMfQoWcqaSFlMqfZM4\n0rNoB/tdHLNuV4eIdaw2mlHxdWDtF4oH+HFm+2cVBUVC1jXKrFv/euRVtsTT+A6i\nh2XBHKxQ1Y4HgAn0jACP2QSPEmuoQEIa57bEKEcZsBR8SDY6ZdTd2HLRIApcCOSF\nMRM8CKLeF658I0XgF8D5EsYoKPsA+74Z+jDH\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIECDCCAvCgAwIBAgIDAIVCMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\nUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\nCgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\nUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTEzMTcw\nNjQxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\nc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\nU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\nYXpvbiBSRFMgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDE+T2xYjUbxOp+pv+gRA3FO24+1zCWgXTDF1DHrh1lsPg5k7ht\n2KPYzNc+Vg4E+jgPiW0BQnA6jStX5EqVh8BU60zELlxMNvpg4KumniMCZ3krtMUC\nau1NF9rM7HBh+O+DYMBLK5eSIVt6lZosOb7bCi3V6wMLA8YqWSWqabkxwN4w0vXI\n8lu5uXXFRemHnlNf+yA/4YtN4uaAyd0ami9+klwdkZfkrDOaiy59haOeBGL8EB/c\ndbJJlguHH5CpCscs3RKtOOjEonXnKXldxarFdkMzi+aIIjQ8GyUOSAXHtQHb3gZ4\nnS6Ey0CMlwkB8vUObZU9fnjKJcL5QCQqOfwvAgMBAAGjZjBkMA4GA1UdDwEB/wQE\nAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQUPuRHohPxx4VjykmH\n6usGrLL1ETAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n9w0BAQsFAAOCAQEAUdR9Vb3y33Yj6X6KGtuthZ08SwjImVQPtknzpajNE5jOJAh8\nquvQnU9nlnMO85fVDU1Dz3lLHGJ/YG1pt1Cqq2QQ200JcWCvBRgdvH6MjHoDQpqZ\nHvQ3vLgOGqCLNQKFuet9BdpsHzsctKvCVaeBqbGpeCtt3Hh/26tgx0rorPLw90A2\nV8QSkZJjlcKkLa58N5CMM8Xz8KLWg3MZeT4DmlUXVCukqK2RGuP2L+aME8dOxqNv\nOnOz1zrL5mR2iJoDpk8+VE/eBDmJX40IJk6jBjWoxAO/RXq+vBozuF5YHN1ujE92\ntO8HItgTp37XT8bJBAiAnt5mxw+NLSqtxk2QdQ==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIECDCCAvCgAwIBAgIDAIkHMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\nUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\nCgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\nUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTA2MTc0\nMDIxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\nc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\nU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\nYXpvbiBSRFMgdXMtd2VzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQDD2yzbbAl77OofTghDMEf624OvU0eS9O+lsdO0QlbfUfWa1Kd6\n0WkgjkLZGfSRxEHMCnrv4UPBSK/Qwn6FTjkDLgemhqBtAnplN4VsoDL+BkRX4Wwq\n/dSQJE2b+0hm9w9UMVGFDEq1TMotGGTD2B71eh9HEKzKhGzqiNeGsiX4VV+LJzdH\nuM23eGisNqmd4iJV0zcAZ+Gbh2zK6fqTOCvXtm7Idccv8vZZnyk1FiWl3NR4WAgK\nAkvWTIoFU3Mt7dIXKKClVmvssG8WHCkd3Xcb4FHy/G756UZcq67gMMTX/9fOFM/v\nl5C0+CHl33Yig1vIDZd+fXV1KZD84dEJfEvHAgMBAAGjZjBkMA4GA1UdDwEB/wQE\nAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+ap20kO/6A7pPxo3+\nT3CfqZpQWjAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n9w0BAQsFAAOCAQEAHCJky2tPjPttlDM/RIqExupBkNrnSYnOK4kr9xJ3sl8UF2DA\nPAnYsjXp3rfcjN/k/FVOhxwzi3cXJF/2Tjj39Bm/OEfYTOJDNYtBwB0VVH4ffa/6\ntZl87jaIkrxJcreeeHqYMnIxeN0b/kliyA+a5L2Yb0VPjt9INq34QDc1v74FNZ17\n4z8nr1nzg4xsOWu0Dbjo966lm4nOYIGBRGOKEkHZRZ4mEiMgr3YLkv8gSmeitx57\nZ6dVemNtUic/LVo5Iqw4n3TBS0iF2C1Q1xT/s3h+0SXZlfOWttzSluDvoMv5PvCd\npFjNn+aXLAALoihL1MJSsxydtsLjOBro5eK0Vw==\n-----END CERTIFICATE-----\n","-----BEGIN CERTIFICATE-----\nMIIEBzCCAu+gAwIBAgICUYkwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\nMRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\nDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\nMSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxODIx\nMTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\naGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\nZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\nem9uIFJEUyB1cy13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBANCEZBZyu6yJQFZBJmSUZfSZd3Ui2gitczMKC4FLr0QzkbxY+cLa\nuVONIOrPt4Rwi+3h/UdnUg917xao3S53XDf1TDMFEYp4U8EFPXqCn/GXBIWlU86P\nPvBN+gzw3nS+aco7WXb+woTouvFVkk8FGU7J532llW8o/9ydQyDIMtdIkKTuMfho\nOiNHSaNc+QXQ32TgvM9A/6q7ksUoNXGCP8hDOkSZ/YOLiI5TcdLh/aWj00ziL5bj\npvytiMZkilnc9dLY9QhRNr0vGqL0xjmWdoEXz9/OwjmCihHqJq+20MJPsvFm7D6a\n2NKybR9U+ddrjb8/iyLOjURUZnj5O+2+OPcCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\nAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEBxMBdv81xuzqcK5TVu\npHj+Aor8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\nDQEBCwUAA4IBAQBZkfiVqGoJjBI37aTlLOSjLcjI75L5wBrwO39q+B4cwcmpj58P\n3sivv+jhYfAGEbQnGRzjuFoyPzWnZ1DesRExX+wrmHsLLQbF2kVjLZhEJMHF9eB7\nGZlTPdTzHErcnuXkwA/OqyXMpj9aghcQFuhCNguEfnROY9sAoK2PTfnTz9NJHL+Q\nUpDLEJEUfc0GZMVWYhahc0x38ZnSY2SKacIPECQrTI0KpqZv/P+ijCEcMD9xmYEb\njL4en+XKS1uJpw5fIU5Sj0MxhdGstH6S84iAE5J3GM3XHklGSFwwqPYvuTXvANH6\nuboynxRgSae59jIlAK6Jrr6GWMwQRbgcaAlW\n-----END CERTIFICATE-----\n"]}});var CI=j((op,t6)=>{var k$=require("url").parse,m$=MT(),s6=S0(),C0=null;t6.exports=PR;function PR(_){if(typeof _==="string")_=PR.parseUrl(_);if(this.host=_.host||"localhost",this.port=_.port||3306,this.localAddress=_.localAddress,this.socketPath=_.socketPath,this.user=_.user||void 0,this.password=_.password||void 0,this.database=_.database,this.connectTimeout=_.connectTimeout===void 0?1e4:_.connectTimeout,this.insecureAuth=_.insecureAuth||!1,this.supportBigNumbers=_.supportBigNumbers||!1,this.bigNumberStrings=_.bigNumberStrings||!1,this.dateStrings=_.dateStrings||!1,this.debug=_.debug,this.trace=_.trace!==!1,this.stringifyObjects=_.stringifyObjects||!1,this.timezone=_.timezone||"local",this.flags=_.flags||"",this.queryFormat=_.queryFormat,this.pool=_.pool||void 0,this.ssl=typeof _.ssl==="string"?PR.getSSLProfile(_.ssl):_.ssl||!1,this.localInfile=_.localInfile===void 0?!0:_.localInfile,this.multipleStatements=_.multipleStatements||!1,this.typeCast=_.typeCast===void 0?!0:_.typeCast,this.timezone[0]===" ")this.timezone="+"+this.timezone.substr(1);if(this.ssl)this.ssl.rejectUnauthorized=this.ssl.rejectUnauthorized!==!1;this.maxPacketSize=0,this.charsetNumber=_.charset?PR.getCharsetNumber(_.charset):_.charsetNumber||s6.UTF8_GENERAL_CI;var E=PR.getDefaultFlags(_);this.clientFlags=PR.mergeFlags(E,_.flags)}PR.mergeFlags=function _(E,R){var N=PR.parseFlagList(E),A=PR.parseFlagList(R);for(var L in A)if(N[L]!==!1)N[L]=A[L];var U=0;for(var L in N)if(N[L])U|=m$["CLIENT_"+L]||0;return U};PR.getCharsetNumber=function _(E){var R=s6[E.toUpperCase()];if(R===void 0)throw new TypeError("Unknown charset \'"+E+"\'");return R};PR.getDefaultFlags=function _(E){var R=["-COMPRESS","-CONNECT_ATTRS","+CONNECT_WITH_DB","+FOUND_ROWS","+IGNORE_SIGPIPE","+IGNORE_SPACE","+LOCAL_FILES","+LONG_FLAG","+LONG_PASSWORD","+MULTI_RESULTS","+ODBC","-PLUGIN_AUTH","+PROTOCOL_41","+PS_MULTI_RESULTS","+RESERVED","+SECURE_CONNECTION","+TRANSACTIONS"];if(E&&E.localInfile!==void 0&&!E.localInfile)R.push("-LOCAL_FILES");if(E&&E.multipleStatements)R.push("+MULTI_STATEMENTS");return R};PR.getSSLProfile=function _(E){if(!C0)C0=o6();var R=C0[E];if(R===void 0)throw new TypeError("Unknown SSL profile \'"+E+"\'");return R};PR.parseFlagList=function _(E){var R=Object.create(null);if(!E)return R;var N=!Array.isArray(E)?String(E||"").toUpperCase().split(/\s*,+\s*/):E;for(var A=0;A{r6.exports=g$;function g$(_,E){this.length=_,this.number=E}});var _5=j((e6,PI)=>{(function(_){var E,R=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,N=Math.ceil,A=Math.floor,L="[BigNumber Error] ",U=L+"Number primitive has more than 15 significant digits: ",G=100000000000000,S=14,C=9007199254740991,Y=[1,10,100,1000,1e4,1e5,1e6,1e7,1e8,1e9,10000000000,100000000000,1000000000000,10000000000000],M=1e7,H=1e9;function X(m){var k,e,o,c=a.prototype={constructor:a,toString:null,valueOf:null},S_=new a(1),U_=20,V_=4,K_=-7,z_=21,r=-1e7,A_=1e7,L_=!1,P_=1,p_=0,l_={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},j_="0123456789abcdefghijklmnopqrstuvwxyz";function a(V,J){var Q,i,v,y,n,f,x,u,b=this;if(!(b instanceof a))return new a(V,J);if(J==null){if(V&&V._isBigNumber===!0){if(b.s=V.s,!V.c||V.e>A_)b.c=b.e=null;else if(V.e=10;n/=10,y++);if(y>A_)b.c=b.e=null;else b.e=y,b.c=[V];return}u=String(V)}else{if(!R.test(u=String(V)))return o(b,u,f);b.s=u.charCodeAt(0)==45?(u=u.slice(1),-1):1}if((y=u.indexOf("."))>-1)u=u.replace(".","");if((n=u.search(/e/i))>0){if(y<0)y=n;y+=+u.slice(n+1),u=u.substring(0,n)}else if(y<0)y=u.length}else{if(g(J,2,j_.length,"Base"),J==10)return b=new a(V),n_(b,U_+b.e+1,V_);if(u=String(V),f=typeof V=="number"){if(V*0!=0)return o(b,u,f,J);if(b.s=1/V<0?(u=u.slice(1),-1):1,a.DEBUG&&u.replace(/^0\.0*|\./,"").length>15)throw Error(U+V)}else b.s=u.charCodeAt(0)===45?(u=u.slice(1),-1):1;Q=j_.slice(0,J),y=n=0;for(x=u.length;ny){y=x;continue}}else if(!v){if(u==u.toUpperCase()&&(u=u.toLowerCase())||u==u.toLowerCase()&&(u=u.toUpperCase())){v=!0,n=-1,y=0;continue}}return o(b,String(V),f,J)}if(f=!1,u=e(u,J,10,b.s),(y=u.indexOf("."))>-1)u=u.replace(".","");else y=u.length}for(n=0;u.charCodeAt(n)===48;n++);for(x=u.length;u.charCodeAt(--x)===48;);if(u=u.slice(n,++x)){if(x-=n,f&&a.DEBUG&&x>15&&(V>C||V!==A(V)))throw Error(U+b.s*V);if((y=y-n-1)>A_)b.c=b.e=null;else if(y=-H&&v<=H&&v===A(v)){if(i[0]===0){if(v===0&&i.length===1)return!0;break _}if(J=(v+1)%S,J<1)J+=S;if(String(i[0]).length==J){for(J=0;J=G||Q!==A(Q))break _;if(Q!==0)return!0}}}else if(i===null&&v===null&&(y===null||y===1||y===-1))return!0;throw Error(L+"Invalid BigNumber: "+V)},a.maximum=a.max=function(){return q_(arguments,c.lt)},a.minimum=a.min=function(){return q_(arguments,c.gt)},a.random=function(){var V=9007199254740992,J=Math.random()*V&2097151?function(){return A(Math.random()*V)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(Q){var i,v,y,n,f,x=0,u=[],b=new a(S_);if(Q==null)Q=U_;else g(Q,0,H);if(n=N(Q/S),L_)if(crypto.getRandomValues){i=crypto.getRandomValues(new Uint32Array(n*=2));for(;x>>11),f>=9000000000000000)v=crypto.getRandomValues(new Uint32Array(2)),i[x]=v[0],i[x+1]=v[1];else u.push(f%100000000000000),x+=2;x=n/2}else if(crypto.randomBytes){i=crypto.randomBytes(n*=7);for(;x=9000000000000000)crypto.randomBytes(7).copy(i,x);else u.push(f%100000000000000),x+=7;x=n/7}else throw L_=!1,Error(L+"crypto unavailable");if(!L_){for(;x=10;f/=10,x++);if(xv-1){if(f[n+1]==null)f[n+1]=0;f[n+1]+=f[n]/v|0,f[n]%=v}}return f.reverse()}return function(Q,i,v,y,n){var f,x,u,b,E_,H_,I_,G_,W_=Q.indexOf("."),x_=U_,Q_=V_;if(W_>=0)b=p_,p_=0,Q=Q.replace(".",""),G_=new a(i),H_=G_.pow(Q.length-W_),p_=b,G_.c=J(s(z(H_.c),H_.e,"0"),10,v,V),G_.e=G_.c.length;I_=J(Q,i,v,n?(f=j_,V):(f=V,j_)),u=b=I_.length;for(;I_[--b]==0;I_.pop());if(!I_[0])return f.charAt(0);if(W_<0)--u;else H_.c=I_,H_.e=u,H_.s=y,H_=k(H_,G_,x_,Q_,v),I_=H_.c,E_=H_.r,u=H_.e;if(x=u+x_+1,W_=I_[x],b=v/2,E_=E_||x<0||I_[x+1]!=null,E_=Q_<4?(W_!=null||E_)&&(Q_==0||Q_==(H_.s<0?3:2)):W_>b||W_==b&&(Q_==4||E_||Q_==6&&I_[x-1]&1||Q_==(H_.s<0?8:7)),x<1||!I_[0])Q=E_?s(f.charAt(1),-x_,f.charAt(0)):f.charAt(0);else{if(I_.length=x,E_){for(--v;++I_[--x]>v;)if(I_[x]=0,!x)++u,I_=[1].concat(I_)}for(b=I_.length;!I_[--b];);for(W_=0,Q="";W_<=b;Q+=f.charAt(I_[W_++]));Q=s(Q,u,f.charAt(0))}return Q}}(),k=function(){function V(i,v,y){var n,f,x,u,b=0,E_=i.length,H_=v%M,I_=v/M|0;for(i=i.slice();E_--;)x=i[E_]%M,u=i[E_]/M|0,n=I_*x+u*H_,f=H_*x+n%M*M+b,b=(f/y|0)+(n/M|0)+I_*u,i[E_]=f%y;if(b)i=[b].concat(i);return i}function J(i,v,y,n){var f,x;if(y!=n)x=y>n?1:-1;else for(f=x=0;fv[f]?1:-1;break}return x}function Q(i,v,y,n){var f=0;for(;y--;)i[y]-=f,f=i[y]1;i.splice(0,1));}return function(i,v,y,n,f){var x,u,b,E_,H_,I_,G_,W_,x_,Q_,b_,JE,_1,$1,Z1,LR,QN,sE=i.s==v.s?1:-1,qE=i.c,UE=v.c;if(!qE||!qE[0]||!UE||!UE[0])return new a(!i.s||!v.s||(qE?UE&&qE[0]==UE[0]:!UE)?NaN:qE&&qE[0]==0||!UE?sE*0:sE/0);if(W_=new a(sE),x_=W_.c=[],u=i.e-v.e,sE=y+u+1,!f)f=G,u=$(i.e/S)-$(v.e/S),sE=sE/S|0;for(b=0;UE[b]==(qE[b]||0);b++);if(UE[b]>(qE[b]||0))u--;if(sE<0)x_.push(1),E_=!0;else{if($1=qE.length,LR=UE.length,b=0,sE+=2,H_=A(f/(UE[0]+1)),H_>1)UE=V(UE,H_,f),qE=V(qE,H_,f),LR=UE.length,$1=qE.length;_1=LR,Q_=qE.slice(0,LR),b_=Q_.length;for(;b_=f/2)Z1++;do{if(H_=0,x=J(UE,Q_,LR,b_),x<0){if(JE=Q_[0],LR!=b_)JE=JE*f+(Q_[1]||0);if(H_=A(JE/Z1),H_>1){if(H_>=f)H_=f-1;I_=V(UE,H_,f),G_=I_.length,b_=Q_.length;while(J(I_,Q_,G_,b_)==1)H_--,Q(I_,LR=10;sE/=10,b++);n_(W_,y+(W_.e=b+u*S-1)+1,n,E_)}else W_.e=u,W_.r=+E_;return W_}}();function WE(V,J,Q,i){var v,y,n,f,x;if(Q==null)Q=V_;else g(Q,0,8);if(!V.c)return V.toString();if(v=V.c[0],n=V.e,J==null)x=z(V.c),x=i==1||i==2&&(n<=K_||n>=z_)?t(x,n):s(x,n,"0");else if(V=n_(new a(V),J,Q),y=V.e,x=z(V.c),f=x.length,i==1||i==2&&(J<=y||y<=K_)){for(;ff){if(--J>0)for(x+=".";J--;x+="0");}else if(J+=y-f,J>0){if(y+1==f)x+=".";for(;J--;x+="0");}return V.s<0&&v?"-"+x:x}function q_(V,J){var Q,i=1,v=new a(V[0]);for(;i=10;v/=10,i++);if((Q=i+Q*S-1)>A_)V.c=V.e=null;else if(Q=10;f/=10,v++);if(y=J-v,y<0)y+=S,n=J,x=E_[u=0],b=x/H_[v-n-1]%10|0;else if(u=N((y+1)/S),u>=E_.length)if(i){for(;E_.length<=u;E_.push(0));x=b=0,v=1,y%=S,n=y-S+1}else break _;else{x=f=E_[u];for(v=1;f>=10;f/=10,v++);y%=S,n=y-S+v,b=n<0?0:x/H_[v-n-1]%10|0}if(i=i||J<0||E_[u+1]!=null||(n<0?x:x%H_[v-n-1]),i=Q<4?(b||i)&&(Q==0||Q==(V.s<0?3:2)):b>5||b==5&&(Q==4||i||Q==6&&(y>0?n>0?x/H_[v-n]:0:E_[u-1])%10&1||Q==(V.s<0?8:7)),J<1||!E_[0]){if(E_.length=0,i)J-=V.e+1,E_[0]=H_[(S-J%S)%S],V.e=-J||0;else E_[0]=V.e=0;return V}if(y==0)E_.length=u,f=1,u--;else E_.length=u+1,f=H_[S-y],E_[u]=n>0?A(x/H_[v-n]%H_[n])*f:0;if(i)for(;;)if(u==0){for(y=1,n=E_[0];n>=10;n/=10,y++);n=E_[0]+=f;for(f=1;n>=10;n/=10,f++);if(y!=f){if(V.e++,E_[0]==G)E_[0]=1}break}else{if(E_[u]+=f,E_[u]!=G)break;E_[u--]=0,f=1}for(y=E_.length;E_[--y]===0;E_.pop());}if(V.e>A_)V.c=V.e=null;else if(V.e=z_?t(J,Q):s(J,Q,"0"),V.s<0?"-"+J:J}if(c.absoluteValue=c.abs=function(){var V=new a(this);if(V.s<0)V.s=1;return V},c.comparedTo=function(V,J){return w(this,new a(V,J))},c.decimalPlaces=c.dp=function(V,J){var Q,i,v,y=this;if(V!=null){if(g(V,0,H),J==null)J=V_;else g(J,0,8);return n_(new a(y),V+y.e+1,J)}if(!(Q=y.c))return null;if(i=((v=Q.length-1)-$(this.e/S))*S,v=Q[v])for(;v%10==0;v/=10,i--);if(i<0)i=0;return i},c.dividedBy=c.div=function(V,J){return k(this,new a(V,J),U_,V_)},c.dividedToIntegerBy=c.idiv=function(V,J){return k(this,new a(V,J),0,1)},c.exponentiatedBy=c.pow=function(V,J){var Q,i,v,y,n,f,x,u,b,E_=this;if(V=new a(V),V.c&&!V.isInteger())throw Error(L+"Exponent not an integer: "+e_(V));if(J!=null)J=new a(J);if(f=V.e>14,!E_.c||!E_.c[0]||E_.c[0]==1&&!E_.e&&E_.c.length==1||!V.c||!V.c[0])return b=new a(Math.pow(+e_(E_),f?2-d(V):+e_(V))),J?b.mod(J):b;if(x=V.s<0,J){if(J.c?!J.c[0]:!J.s)return new a(NaN);if(i=!x&&E_.isInteger()&&J.isInteger(),i)E_=E_.mod(J)}else if(V.e>9&&(E_.e>0||E_.e<-1||(E_.e==0?E_.c[0]>1||f&&E_.c[1]>=240000000:E_.c[0]<80000000000000||f&&E_.c[0]<=99999750000000))){if(y=E_.s<0&&d(V)?-0:0,E_.e>-1)y=1/y;return new a(x?1/y:y)}else if(p_)y=N(p_/S+2);if(f){if(Q=new a(0.5),x)V.s=1;u=d(V)}else v=Math.abs(+e_(V)),u=v%2;b=new a(S_);for(;;){if(u){if(b=b.times(E_),!b.c)break;if(y){if(b.c.length>y)b.c.length=y}else if(i)b=b.mod(J)}if(v){if(v=A(v/2),v===0)break;u=v%2}else if(V=V.times(Q),n_(V,V.e+1,1),V.e>14)u=d(V);else{if(v=+e_(V),v===0)break;u=v%2}if(E_=E_.times(E_),y){if(E_.c&&E_.c.length>y)E_.c.length=y}else if(i)E_=E_.mod(J)}if(i)return b;if(x)b=S_.div(b);return J?b.mod(J):y?n_(b,p_,V_,n):b},c.integerValue=function(V){var J=new a(this);if(V==null)V=V_;else g(V,0,8);return n_(J,J.e+1,V)},c.isEqualTo=c.eq=function(V,J){return w(this,new a(V,J))===0},c.isFinite=function(){return!!this.c},c.isGreaterThan=c.gt=function(V,J){return w(this,new a(V,J))>0},c.isGreaterThanOrEqualTo=c.gte=function(V,J){return(J=w(this,new a(V,J)))===1||J===0},c.isInteger=function(){return!!this.c&&$(this.e/S)>this.c.length-2},c.isLessThan=c.lt=function(V,J){return w(this,new a(V,J))<0},c.isLessThanOrEqualTo=c.lte=function(V,J){return(J=w(this,new a(V,J)))===-1||J===0},c.isNaN=function(){return!this.s},c.isNegative=function(){return this.s<0},c.isPositive=function(){return this.s>0},c.isZero=function(){return!!this.c&&this.c[0]==0},c.minus=function(V,J){var Q,i,v,y,n=this,f=n.s;if(V=new a(V,J),J=V.s,!f||!J)return new a(NaN);if(f!=J)return V.s=-J,n.plus(V);var x=n.e/S,u=V.e/S,b=n.c,E_=V.c;if(!x||!u){if(!b||!E_)return b?(V.s=-J,V):new a(E_?n:NaN);if(!b[0]||!E_[0])return E_[0]?(V.s=-J,V):new a(b[0]?n:V_==3?-0:0)}if(x=$(x),u=$(u),b=b.slice(),f=x-u){if(y=f<0)f=-f,v=b;else u=x,v=E_;v.reverse();for(J=f;J--;v.push(0));v.reverse()}else{i=(y=(f=b.length)<(J=E_.length))?f:J;for(f=J=0;J0)for(;J--;b[Q++]=0);J=G-1;for(;i>f;){if(b[--i]=0;){Q=0,H_=JE[v]%x_,I_=JE[v]/x_|0;for(n=x,y=v+n;y>v;)u=b_[--n]%x_,b=b_[n]/x_|0,f=I_*u+b*H_,u=H_*u+f%x_*x_+G_[y]+Q,Q=(u/W_|0)+(f/x_|0)+I_*b,G_[y--]=u%W_;G_[y]=Q}if(Q)++i;else G_.splice(0,1);return k_(V,G_,i)},c.negated=function(){var V=new a(this);return V.s=-V.s||null,V},c.plus=function(V,J){var Q,i=this,v=i.s;if(V=new a(V,J),J=V.s,!v||!J)return new a(NaN);if(v!=J)return V.s=-J,i.minus(V);var y=i.e/S,n=V.e/S,f=i.c,x=V.c;if(!y||!n){if(!f||!x)return new a(v/0);if(!f[0]||!x[0])return x[0]?V:new a(f[0]?i:v*0)}if(y=$(y),n=$(n),f=f.slice(),v=y-n){if(v>0)n=y,Q=x;else v=-v,Q=f;Q.reverse();for(;v--;Q.push(0));Q.reverse()}if(v=f.length,J=x.length,v-J<0)Q=x,x=f,f=Q,J=v;for(v=0;J;)v=(f[--J]=f[J]+x[J]+v)/G|0,f[J]=G===f[J]?0:f[J]%G;if(v)f=[v].concat(f),++n;return k_(V,f,n)},c.precision=c.sd=function(V,J){var Q,i,v,y=this;if(V!=null&&V!==!!V){if(g(V,1,H),J==null)J=V_;else g(J,0,8);return n_(new a(y),V,J)}if(!(Q=y.c))return null;if(v=Q.length-1,i=v*S+1,v=Q[v]){for(;v%10==0;v/=10,i--);for(v=Q[0];v>=10;v/=10,i++);}if(V&&y.e+1>i)i=y.e+1;return i},c.shiftedBy=function(V){return g(V,-C,C),this.times("1e"+V)},c.squareRoot=c.sqrt=function(){var V,J,Q,i,v,y=this,n=y.c,f=y.s,x=y.e,u=U_+4,b=new a("0.5");if(f!==1||!n||!n[0])return new a(!f||f<0&&(!n||n[0])?NaN:n?y:1/0);if(f=Math.sqrt(+e_(y)),f==0||f==1/0){if(J=z(n),(J.length+x)%2==0)J+="0";if(f=Math.sqrt(+J),x=$((x+1)/2)-(x<0||x%2),f==1/0)J="1e"+x;else J=f.toExponential(),J=J.slice(0,J.indexOf("e")+1)+x;Q=new a(J)}else Q=new a(f+"");if(Q.c[0]){if(x=Q.e,f=x+u,f<3)f=0;for(;;)if(v=Q,Q=b.times(v.plus(k(y,v,u,1))),z(v.c).slice(0,f)===(J=z(Q.c)).slice(0,f)){if(Q.e0&&G_>0){y=G_%f||f,b=I_.substr(0,y);for(;y0)b+=u+I_.slice(y);if(H_)b="-"+b}i=E_?b+(Q.decimalSeparator||"")+((x=+Q.fractionGroupSize)?E_.replace(new RegExp("\\d{"+x+"}\\B","g"),"$&"+(Q.fractionGroupSeparator||"")):E_):b}return(Q.prefix||"")+i+(Q.suffix||"")},c.toFraction=function(V){var J,Q,i,v,y,n,f,x,u,b,E_,H_,I_=this,G_=I_.c;if(V!=null){if(f=new a(V),!f.isInteger()&&(f.c||f.s!==1)||f.lt(S_))throw Error(L+"Argument "+(f.isInteger()?"out of range: ":"not an integer: ")+e_(f))}if(!G_)return new a(I_);J=new a(S_),u=Q=new a(S_),i=x=new a(S_),H_=z(G_),y=J.e=H_.length-I_.e-1,J.c[0]=Y[(n=y%S)<0?S+n:n],V=!V||f.comparedTo(J)>0?y>0?J:u:f,n=A_,A_=1/0,f=new a(H_),x.c[0]=0;for(;;){if(b=k(f,J,0,1),v=Q.plus(b.times(i)),v.comparedTo(V)==1)break;Q=i,i=v,u=x.plus(b.times(v=u)),x=v,J=f.minus(b.times(v=J)),f=v}return v=k(V.minus(Q),i,0,1),x=x.plus(v.times(u)),Q=Q.plus(v.times(i)),x.s=u.s=I_.s,y=y*2,E_=k(u,i,y,V_).minus(I_).abs().comparedTo(k(x,Q,y,V_).minus(I_).abs())<1?[u,i]:[x,Q],A_=n,E_},c.toNumber=function(){return+e_(this)},c.toPrecision=function(V,J){if(V!=null)g(V,1,H);return WE(this,V,J,2)},c.toString=function(V){var J,Q=this,i=Q.s,v=Q.e;if(v===null)if(i){if(J="Infinity",i<0)J="-"+J}else J="NaN";else{if(V==null)J=v<=K_||v>=z_?t(z(Q.c),v):s(z(Q.c),v,"0");else if(V===10)Q=n_(new a(Q),U_+v+1,V_),J=s(z(Q.c),Q.e,"0");else g(V,2,j_.length,"Base"),J=e(s(z(Q.c),v,"0"),10,V,i,!0);if(i<0&&Q.c[0])J="-"+J}return J},c.valueOf=c.toJSON=function(){return e_(this)},c._isBigNumber=!0,m!=null)a.set(m);return a}function $(m){var k=m|0;return m>0||m===k?k:k-1}function z(m){var k,e,o=1,c=m.length,S_=m[0]+"";for(;oz_^e?1:-1;V_=(K_=c.length)<(z_=S_.length)?K_:z_;for(U_=0;U_S_[U_]^e?1:-1;return K_==z_?0:K_>z_^e?1:-1}function g(m,k,e,o){if(me||m!==A(m))throw Error(L+(o||"Argument")+(typeof m=="number"?me?" out of range: ":" not an integer: ":" not a primitive number: ")+String(m))}function d(m){var k=m.c.length-1;return $(m.e/S)==k&&m.c[k]%2!=0}function t(m,k){return(m.length>1?m.charAt(0)+"."+m.slice(1):m)+(k<0?"e":"e+")+k}function s(m,k,e){var o,c;if(k<0){for(c=e+".";++k;c+=e);m=c+m}else if(o=m.length,++k>o){for(c=e,k-=o;--k;c+=e);m+=c}else if(k{var YI=require("buffer"),mN=YI.Buffer;function E5(_,E){for(var R in _)E[R]=_[R]}if(mN.from&&mN.alloc&&mN.allocUnsafe&&mN.allocUnsafeSlow)R5.exports=YI;else E5(YI,P0),P0.Buffer=FT;function FT(_,E,R){return mN(_,E,R)}E5(mN,FT);FT.from=function(_,E,R){if(typeof _==="number")throw new TypeError("Argument must not be a number");return mN(_,E,R)};FT.alloc=function(_,E,R){if(typeof _!=="number")throw new TypeError("Argument must be a number");var N=mN(_);if(E!==void 0)if(typeof R==="string")N.fill(E,R);else N.fill(E);else N.fill(0);return N};FT.allocUnsafe=function(_){if(typeof _!=="number")throw new TypeError("Argument must be a number");return mN(_)};FT.allocUnsafeSlow=function(_){if(typeof _!=="number")throw new TypeError("Argument must be a number");return YI.SlowBuffer(_)}});var T5=j((tp,N5)=>{N5.exports=Y0;function Y0(){this.bufs=[],this.size=0}Y0.prototype.shift=function _(){var E=this.bufs.shift();if(E)this.size-=E.length;return E};Y0.prototype.push=function _(E){if(!E||!E.length)return;this.bufs.push(E),this.size+=E.length}});var L5=j((rp,I5)=>{var y$=a6(),b$=_5(),CO=PN().Buffer,O5=T5(),i$=Math.pow(2,24)-1,A5=Math.pow(2,32),u$=4;I5.exports=TE;function TE(_){_=_||{},this._supportBigNumbers=_.config&&_.config.supportBigNumbers,this._buffer=CO.alloc(0),this._nextBuffers=new O5,this._longPacketBuffers=new O5,this._offset=0,this._packetEnd=null,this._packetHeader=null,this._packetOffset=null,this._onError=_.onError||function(E){throw E},this._onPacket=_.onPacket||function(){},this._nextPacketNumber=0,this._encoding="utf-8",this._paused=!1}TE.prototype.write=function _(E){this._nextBuffers.push(E);while(!this._paused){var R=this._tryReadPacketHeader();if(!R)break;if(!this._combineNextBuffers(R.length))break;this._parsePacket(R)}};TE.prototype.append=function _(E){if(!E||E.length===0)return;var R=this._buffer.length,N=this._packetOffset===null?this._offset:this._packetOffset,A=R-N,L=null,U=!(E instanceof Array||Array.isArray(E))?[E]:E,G=0,S=0;for(var C=0;C1){L=CO.allocUnsafe(G),S=0;for(var C=0;C>>0)]};TE.prototype.parseUnsignedNumber=function _(E){if(E===1)return this._buffer[this._offset++];var R=this._buffer,N=this._offset+E-1,A=0;if(E>4){var L=new Error("parseUnsignedNumber: Supports only up to 4 bytes");throw L.offset=this._offset-this._packetOffset-1,L.code="PARSER_UNSIGNED_TOO_LONG",L}while(N>=this._offset)A=(A<<8|R[N])>>>0,N--;return this._offset+=E,A};TE.prototype.parseLengthCodedString=function(){var _=this.parseLengthCodedNumber();if(_===null)return null;return this.parseString(_)};TE.prototype.parseLengthCodedBuffer=function(){var _=this.parseLengthCodedNumber();if(_===null)return null;return this.parseBuffer(_)};TE.prototype.parseLengthCodedNumber=function _(){if(this._offset>=this._buffer.length){var E=new Error("Parser: read past end");throw E.offset=this._offset-this._packetOffset,E.code="PARSER_READ_PAST_END",E}var R=this._buffer[this._offset++];if(R<=250)return R;switch(R){case 251:return null;case 252:return this.parseUnsignedNumber(2);case 253:return this.parseUnsignedNumber(3);case 254:break;default:var E=new Error("Unexpected first byte"+(R?": 0x"+R.toString(16):""));throw E.offset=this._offset-this._packetOffset-1,E.code="PARSER_BAD_LENGTH_BYTE",E}var N=this.parseUnsignedNumber(4),A=this.parseUnsignedNumber(4),L;if(A>>>21){if(L=b$(A5).times(A).plus(N).toString(),this._supportBigNumbers)return L;var E=new Error('parseLengthCodedNumber: JS precision range exceeded, number is >= 53 bit: "'+L+'"');throw E.offset=this._offset-this._packetOffset-8,E.code="PARSER_JS_PRECISION_RANGE_EXCEEDED",E}return L=N+A5*A,L};TE.prototype.parseFiller=function(_){return this.parseBuffer(_)};TE.prototype.parseNullTerminatedBuffer=function(){var _=this._nullByteOffset(),E=this._buffer.slice(this._offset,_);return this._offset=_+1,E};TE.prototype.parseNullTerminatedString=function(){var _=this._nullByteOffset(),E=this._buffer.toString(this._encoding,this._offset,_);return this._offset=_+1,E};TE.prototype._nullByteOffset=function(){var _=this._offset;while(this._buffer[_]!==0)if(_++,_>=this._buffer.length){var E=new Error("Offset of null terminated string not found.");throw E.offset=this._offset-this._packetOffset,E.code="PARSER_MISSING_NULL_BYTE",E}return _};TE.prototype.parsePacketTerminatedBuffer=function _(){var E=this._packetEnd-this._offset;return this.parseBuffer(E)};TE.prototype.parsePacketTerminatedString=function(){var _=this._packetEnd-this._offset;return this.parseString(_)};TE.prototype.parseBuffer=function(_){var E=CO.alloc(_);return this._buffer.copy(E,0,this._offset,this._offset+_),this._offset+=_,E};TE.prototype.parseString=function(_){var E=this._offset,R=E+_,N=this._buffer.toString(this._encoding,E,R);return this._offset=R,N};TE.prototype.parseGeometryValue=function(){var _=this.parseLengthCodedBuffer(),E=4;if(_===null||!_.length)return null;function R(){var N=null,A=_.readUInt8(E);E+=1;var L=A?_.readUInt32LE(E):_.readUInt32BE(E);switch(E+=4,L){case 1:var U=A?_.readDoubleLE(E):_.readDoubleBE(E);E+=8;var G=A?_.readDoubleLE(E):_.readDoubleBE(E);E+=8,N={x:U,y:G};break;case 2:var S=A?_.readUInt32LE(E):_.readUInt32BE(E);E+=4,N=[];for(var C=S;C>0;C--){var U=A?_.readDoubleLE(E):_.readDoubleBE(E);E+=8;var G=A?_.readDoubleLE(E):_.readDoubleBE(E);E+=8,N.push({x:U,y:G})}break;case 3:var Y=A?_.readUInt32LE(E):_.readUInt32BE(E);E+=4,N=[];for(var C=Y;C>0;C--){var S=A?_.readUInt32LE(E):_.readUInt32BE(E);E+=4;var M=[];for(var H=S;H>0;H--){var U=A?_.readDoubleLE(E):_.readDoubleBE(E);E+=8;var G=A?_.readDoubleLE(E):_.readDoubleBE(E);E+=8,M.push({x:U,y:G})}N.push(M)}break;case 4:case 5:case 6:case 7:var X=A?_.readUInt32LE(E):_.readUInt32BE(E);E+=4;var N=[];for(var C=X;C>0;C--)N.push(R());break}return N}return R()};TE.prototype.reachedPacketEnd=function(){return this._offset===this._packetEnd};TE.prototype.incrementPacketNumber=function(){var _=this._nextPacketNumber;return this._nextPacketNumber=(this._nextPacketNumber+1)%256,_};TE.prototype.resetPacketNumber=function(){this._nextPacketNumber=0};TE.prototype.packetLength=function _(){if(!this._packetHeader)return null;return this._packetHeader.length+this._longPacketBuffers.size};TE.prototype._combineNextBuffers=function _(E){var R=this._buffer.length-this._offset;if(R>=E)return!0;if(R+this._nextBuffers.size0){var L=this._nextBuffers.shift();N.push(L),A-=L.length}return this.append(N),!0};TE.prototype._combineLongPacketBuffers=function _(){if(!this._longPacketBuffers.size)return;var E=this._buffer.length-this._offset,R=this._buffer.length-this._packetEnd,N=null,A=CO.allocUnsafe(E+this._longPacketBuffers.size),L=0;while(N=this._longPacketBuffers.shift())L+=N.copy(A,L);this._buffer.copy(A,L,this._offset),this._buffer=A,this._offset=0,this._packetEnd=this._buffer.length-R,this._packetOffset=0};TE.prototype._parsePacket=function _(E){if(this._packetEnd=this._offset+E.length,this._packetOffset=this._offset,E.length===i$){this._longPacketBuffers.push(this._buffer.slice(this._packetOffset,this._packetEnd)),this._advanceToNextPacket();return}this._combineLongPacketBuffers();var R=!0;try{this._onPacket(E),R=!1}catch(N){if(!N||typeof N.code!=="string"||N.code.substr(0,7)!=="PARSER_")throw N;this._onError(N),R=!1}finally{if(this._advanceToNextPacket(),R)process.nextTick(this.write.bind(this))}};TE.prototype._tryReadPacketHeader=function _(){if(this._packetHeader)return this._packetHeader;if(!this._combineNextBuffers(u$))return null;if(this._packetHeader=new y$(this.parseUnsignedNumber(3),this.parseUnsignedNumber(1)),this._packetHeader.number!==this._nextPacketNumber){var E=new Error("Packets out of order. Got: "+this._packetHeader.number+" Expected: "+this._nextPacketNumber);E.code="PROTOCOL_PACKETS_OUT_OF_ORDER",E.fatal=!0,this._onError(E)}return this.incrementPacketNumber(),this._packetHeader};TE.prototype._advanceToNextPacket=function(){this._offset=this._packetEnd,this._packetHeader=null,this._packetEnd=null,this._packetOffset=null}});var G5=j((ap,U5)=>{U5.exports=H0;function H0(_){_=_||{},this.status=254,this.authMethodName=_.authMethodName,this.authMethodData=_.authMethodData}H0.prototype.parse=function _(E){this.status=E.parseUnsignedNumber(1),this.authMethodName=E.parseNullTerminatedString(),this.authMethodData=E.parsePacketTerminatedBuffer()};H0.prototype.write=function _(E){E.writeUnsignedNumber(1,this.status),E.writeNullTerminatedString(this.authMethodName),E.writeBuffer(this.authMethodData)}});var S5=j((ep,D5)=>{D5.exports=W0;function W0(_){_=_||{},this.data=_.data}W0.prototype.parse=function _(E){this.data=E.parsePacketTerminatedBuffer()};W0.prototype.write=function _(E){E.writeBuffer(this.data)}});var P5=j((_h,C5)=>{var c$=PN().Buffer;C5.exports=M0;function M0(_){_=_||{},this.clientFlags=_.clientFlags,this.maxPacketSize=_.maxPacketSize,this.charsetNumber=_.charsetNumber,this.filler=void 0,this.user=_.user,this.scrambleBuff=_.scrambleBuff,this.database=_.database,this.protocol41=_.protocol41}M0.prototype.parse=function(_){if(this.protocol41)this.clientFlags=_.parseUnsignedNumber(4),this.maxPacketSize=_.parseUnsignedNumber(4),this.charsetNumber=_.parseUnsignedNumber(1),this.filler=_.parseFiller(23),this.user=_.parseNullTerminatedString(),this.scrambleBuff=_.parseLengthCodedBuffer(),this.database=_.parseNullTerminatedString();else this.clientFlags=_.parseUnsignedNumber(2),this.maxPacketSize=_.parseUnsignedNumber(3),this.user=_.parseNullTerminatedString(),this.scrambleBuff=_.parseBuffer(8),this.database=_.parseLengthCodedBuffer()};M0.prototype.write=function(_){if(this.protocol41)_.writeUnsignedNumber(4,this.clientFlags),_.writeUnsignedNumber(4,this.maxPacketSize),_.writeUnsignedNumber(1,this.charsetNumber),_.writeFiller(23),_.writeNullTerminatedString(this.user),_.writeLengthCodedBuffer(this.scrambleBuff),_.writeNullTerminatedString(this.database);else if(_.writeUnsignedNumber(2,this.clientFlags),_.writeUnsignedNumber(3,this.maxPacketSize),_.writeNullTerminatedString(this.user),_.writeBuffer(this.scrambleBuff),this.database&&this.database.length)_.writeFiller(1),_.writeBuffer(c$.from(this.database))}});var H5=j((Eh,Y5)=>{Y5.exports=F0;function F0(_){_=_||{},this.command=17,this.user=_.user,this.scrambleBuff=_.scrambleBuff,this.database=_.database,this.charsetNumber=_.charsetNumber}F0.prototype.parse=function(_){this.command=_.parseUnsignedNumber(1),this.user=_.parseNullTerminatedString(),this.scrambleBuff=_.parseLengthCodedBuffer(),this.database=_.parseNullTerminatedString(),this.charsetNumber=_.parseUnsignedNumber(1)};F0.prototype.write=function(_){_.writeUnsignedNumber(1,this.command),_.writeNullTerminatedString(this.user),_.writeLengthCodedBuffer(this.scrambleBuff),_.writeNullTerminatedString(this.database),_.writeUnsignedNumber(2,this.charsetNumber)}});var M5=j((Rh,W5)=>{W5.exports=B0;function B0(){this.command=14}B0.prototype.write=function(_){_.writeUnsignedNumber(1,this.command)};B0.prototype.parse=function(_){this.command=_.parseUnsignedNumber(1)}});var B5=j((Nh,F5)=>{F5.exports=V0;function V0(_){this.command=3,this.sql=_}V0.prototype.write=function(_){_.writeUnsignedNumber(1,this.command),_.writeString(this.sql)};V0.prototype.parse=function(_){this.command=_.parseUnsignedNumber(1),this.sql=_.parsePacketTerminatedString()}});var K5=j((Th,V5)=>{V5.exports=K0;function K0(){this.command=1}K0.prototype.parse=function _(E){this.command=E.parseUnsignedNumber(1)};K0.prototype.write=function _(E){E.writeUnsignedNumber(1,this.command)}});var J5=j((Oh,X5)=>{X5.exports=X0;function X0(){this.command=9}X0.prototype.write=function(_){_.writeUnsignedNumber(1,this.command)};X0.prototype.parse=function(_){this.command=_.parseUnsignedNumber(1)}});var Z5=j((Ah,$5)=>{$5.exports=J0;function J0(){}J0.prototype.parse=function _(){};J0.prototype.write=function _(){}});var Q5=j((Ih,w5)=>{w5.exports=$0;function $0(_){_=_||{},this.fieldCount=void 0,this.warningCount=_.warningCount,this.serverStatus=_.serverStatus,this.protocol41=_.protocol41}$0.prototype.parse=function(_){if(this.fieldCount=_.parseUnsignedNumber(1),this.protocol41)this.warningCount=_.parseUnsignedNumber(2),this.serverStatus=_.parseUnsignedNumber(2)};$0.prototype.write=function(_){if(_.writeUnsignedNumber(1,254),this.protocol41)_.writeUnsignedNumber(2,this.warningCount),_.writeUnsignedNumber(2,this.serverStatus)}});var x5=j((Lh,z5)=>{z5.exports=Z0;function Z0(_){_=_||{},this.fieldCount=_.fieldCount,this.errno=_.errno,this.sqlStateMarker=_.sqlStateMarker,this.sqlState=_.sqlState,this.message=_.message}Z0.prototype.parse=function(_){if(this.fieldCount=_.parseUnsignedNumber(1),this.errno=_.parseUnsignedNumber(2),_.peak()===35)this.sqlStateMarker=_.parseString(1),this.sqlState=_.parseString(5);this.message=_.parsePacketTerminatedString()};Z0.prototype.write=function(_){if(_.writeUnsignedNumber(1,255),_.writeUnsignedNumber(2,this.errno),this.sqlStateMarker)_.writeString(this.sqlStateMarker),_.writeString(this.sqlState);_.writeString(this.message)}});var HI=j((M_)=>{M_.DECIMAL=0;M_.TINY=1;M_.SHORT=2;M_.LONG=3;M_.FLOAT=4;M_.DOUBLE=5;M_.NULL=6;M_.TIMESTAMP=7;M_.LONGLONG=8;M_.INT24=9;M_.DATE=10;M_.TIME=11;M_.DATETIME=12;M_.YEAR=13;M_.NEWDATE=14;M_.VARCHAR=15;M_.BIT=16;M_.TIMESTAMP2=17;M_.DATETIME2=18;M_.TIME2=19;M_.JSON=245;M_.NEWDECIMAL=246;M_.ENUM=247;M_.SET=248;M_.TINY_BLOB=249;M_.MEDIUM_BLOB=250;M_.LONG_BLOB=251;M_.BLOB=252;M_.VAR_STRING=253;M_.STRING=254;M_.GEOMETRY=255;M_[0]="DECIMAL";M_[1]="TINY";M_[2]="SHORT";M_[3]="LONG";M_[4]="FLOAT";M_[5]="DOUBLE";M_[6]="NULL";M_[7]="TIMESTAMP";M_[8]="LONGLONG";M_[9]="INT24";M_[10]="DATE";M_[11]="TIME";M_[12]="DATETIME";M_[13]="YEAR";M_[14]="NEWDATE";M_[15]="VARCHAR";M_[16]="BIT";M_[17]="TIMESTAMP2";M_[18]="DATETIME2";M_[19]="TIME2";M_[245]="JSON";M_[246]="NEWDECIMAL";M_[247]="ENUM";M_[248]="SET";M_[249]="TINY_BLOB";M_[250]="MEDIUM_BLOB";M_[251]="LONG_BLOB";M_[252]="BLOB";M_[253]="VAR_STRING";M_[254]="STRING";M_[255]="GEOMETRY"});var w0=j((Gh,q5)=>{var d$=HI();q5.exports=WI;function WI(_){_=_||{},this.parser=_.parser,this.packet=_.packet,this.db=_.packet.db,this.table=_.packet.table,this.name=_.packet.name,this.type=d$[_.packet.type],this.length=_.packet.length}WI.prototype.string=function(){return this.parser.parseLengthCodedString()};WI.prototype.buffer=function(){return this.parser.parseLengthCodedBuffer()};WI.prototype.geometry=function(){return this.parser.parseGeometryValue()}});var j5=j((Dh,f5)=>{f5.exports=Q0;function Q0(_){_=_||{},this.catalog=_.catalog,this.db=_.db,this.table=_.table,this.orgTable=_.orgTable,this.name=_.name,this.orgName=_.orgName,this.charsetNr=_.charsetNr,this.length=_.length,this.type=_.type,this.flags=_.flags,this.decimals=_.decimals,this.default=_.default,this.zeroFill=_.zeroFill,this.protocol41=_.protocol41}Q0.prototype.parse=function(_){if(this.protocol41){if(this.catalog=_.parseLengthCodedString(),this.db=_.parseLengthCodedString(),this.table=_.parseLengthCodedString(),this.orgTable=_.parseLengthCodedString(),this.name=_.parseLengthCodedString(),this.orgName=_.parseLengthCodedString(),_.parseLengthCodedNumber()!==12){var E=new TypeError("Received invalid field length");throw E.code="PARSER_INVALID_FIELD_LENGTH",E}this.charsetNr=_.parseUnsignedNumber(2),this.length=_.parseUnsignedNumber(4),this.type=_.parseUnsignedNumber(1),this.flags=_.parseUnsignedNumber(2),this.decimals=_.parseUnsignedNumber(1);var R=_.parseBuffer(2);if(R[0]!==0||R[1]!==0){var E=new TypeError("Received invalid filler");throw E.code="PARSER_INVALID_FILLER",E}if(this.zeroFill=this.flags&64?!0:!1,_.reachedPacketEnd())return;this.default=_.parseLengthCodedString()}else this.table=_.parseLengthCodedString(),this.name=_.parseLengthCodedString(),this.length=_.parseUnsignedNumber(_.parseUnsignedNumber(1)),this.type=_.parseUnsignedNumber(_.parseUnsignedNumber(1))};Q0.prototype.write=function(_){if(this.protocol41){if(_.writeLengthCodedString(this.catalog),_.writeLengthCodedString(this.db),_.writeLengthCodedString(this.table),_.writeLengthCodedString(this.orgTable),_.writeLengthCodedString(this.name),_.writeLengthCodedString(this.orgName),_.writeLengthCodedNumber(12),_.writeUnsignedNumber(2,this.charsetNr||0),_.writeUnsignedNumber(4,this.length||0),_.writeUnsignedNumber(1,this.type||0),_.writeUnsignedNumber(2,this.flags||0),_.writeUnsignedNumber(1,this.decimals||0),_.writeFiller(2),this.default!==void 0)_.writeLengthCodedString(this.default)}else _.writeLengthCodedString(this.table),_.writeLengthCodedString(this.name),_.writeUnsignedNumber(1,1),_.writeUnsignedNumber(1,this.length),_.writeUnsignedNumber(1,1),_.writeUnsignedNumber(1,this.type)}});var h5=j((Sh,p5)=>{var v5=PN().Buffer,l$=MT();p5.exports=MI;function MI(_){if(_=_||{},this.protocolVersion=_.protocolVersion,this.serverVersion=_.serverVersion,this.threadId=_.threadId,this.scrambleBuff1=_.scrambleBuff1,this.filler1=_.filler1,this.serverCapabilities1=_.serverCapabilities1,this.serverLanguage=_.serverLanguage,this.serverStatus=_.serverStatus,this.serverCapabilities2=_.serverCapabilities2,this.scrambleLength=_.scrambleLength,this.filler2=_.filler2,this.scrambleBuff2=_.scrambleBuff2,this.filler3=_.filler3,this.pluginData=_.pluginData,this.protocol41=_.protocol41,this.protocol41)this.serverCapabilities1|=l$.CLIENT_PROTOCOL_41}MI.prototype.parse=function(_){if(this.protocolVersion=_.parseUnsignedNumber(1),this.serverVersion=_.parseNullTerminatedString(),this.threadId=_.parseUnsignedNumber(4),this.scrambleBuff1=_.parseBuffer(8),this.filler1=_.parseFiller(1),this.serverCapabilities1=_.parseUnsignedNumber(2),this.serverLanguage=_.parseUnsignedNumber(1),this.serverStatus=_.parseUnsignedNumber(2),this.protocol41=(this.serverCapabilities1&512)>0,this.protocol41)this.serverCapabilities2=_.parseUnsignedNumber(2),this.scrambleLength=_.parseUnsignedNumber(1),this.filler2=_.parseFiller(10),this.scrambleBuff2=_.parseBuffer(12),this.filler3=_.parseFiller(1);else this.filler2=_.parseFiller(13);if(_.reachedPacketEnd())return;this.pluginData=_.parsePacketTerminatedString();var E=this.pluginData.length-1;if(this.pluginData[E]==="\0")this.pluginData=this.pluginData.substr(0,E)};MI.prototype.write=function(_){if(_.writeUnsignedNumber(1,this.protocolVersion),_.writeNullTerminatedString(this.serverVersion),_.writeUnsignedNumber(4,this.threadId),_.writeBuffer(this.scrambleBuff1),_.writeFiller(1),_.writeUnsignedNumber(2,this.serverCapabilities1),_.writeUnsignedNumber(1,this.serverLanguage),_.writeUnsignedNumber(2,this.serverStatus),this.protocol41)_.writeUnsignedNumber(2,this.serverCapabilities2),_.writeUnsignedNumber(1,this.scrambleLength),_.writeFiller(10);if(_.writeNullTerminatedBuffer(this.scrambleBuff2),this.pluginData!==void 0)_.writeNullTerminatedString(this.pluginData)};MI.prototype.scrambleBuff=function(){var _=null;if(typeof this.scrambleBuff2==="undefined")_=v5.from(this.scrambleBuff1);else _=v5.allocUnsafe(this.scrambleBuff1.length+this.scrambleBuff2.length),this.scrambleBuff1.copy(_,0),this.scrambleBuff2.copy(_,this.scrambleBuff1.length);return _}});var g5=j((Ch,m5)=>{m5.exports=k5;function k5(_){this.data=_}k5.prototype.write=function(_){_.writeBuffer(this.data)}});var b5=j((Ph,y5)=>{y5.exports=z0;function z0(_){_=_||{},this.filename=_.filename}z0.prototype.parse=function _(E){if(E.parseLengthCodedNumber()!==null){var R=new TypeError("Received invalid field length");throw R.code="PARSER_INVALID_FIELD_LENGTH",R}this.filename=E.parsePacketTerminatedString()};z0.prototype.write=function _(E){E.writeLengthCodedNumber(null),E.writeString(this.filename)}});var u5=j((Yh,i5)=>{var n$=/^[^:0-9]+: [0-9]+[^:0-9]+: ([0-9]+)[^:0-9]+: [0-9]+[^:0-9]*$/;i5.exports=x0;function x0(_){_=_||{},this.fieldCount=void 0,this.affectedRows=void 0,this.insertId=void 0,this.serverStatus=void 0,this.warningCount=void 0,this.message=void 0,this.protocol41=_.protocol41}x0.prototype.parse=function(_){if(this.fieldCount=_.parseUnsignedNumber(1),this.affectedRows=_.parseLengthCodedNumber(),this.insertId=_.parseLengthCodedNumber(),this.protocol41)this.serverStatus=_.parseUnsignedNumber(2),this.warningCount=_.parseUnsignedNumber(2);this.message=_.parsePacketTerminatedString(),this.changedRows=0;var E=n$.exec(this.message);if(E!==null)this.changedRows=parseInt(E[1],10)};x0.prototype.write=function(_){if(_.writeUnsignedNumber(1,0),_.writeLengthCodedNumber(this.affectedRows||0),_.writeLengthCodedNumber(this.insertId||0),this.protocol41)_.writeUnsignedNumber(2,this.serverStatus||0),_.writeUnsignedNumber(2,this.warningCount||0);_.writeString(this.message)}});var d5=j((Hh,c5)=>{c5.exports=q0;function q0(_){_=_||{},this.scrambleBuff=_.scrambleBuff}q0.prototype.parse=function(_){this.scrambleBuff=_.parsePacketTerminatedBuffer()};q0.prototype.write=function(_){_.writeBuffer(this.scrambleBuff)}});var n5=j((Wh,l5)=>{l5.exports=f0;function f0(_){_=_||{},this.fieldCount=_.fieldCount}f0.prototype.parse=function(_){this.fieldCount=_.parseLengthCodedNumber()};f0.prototype.write=function(_){_.writeLengthCodedNumber(this.fieldCount)}});var r5=j((Mh,t5)=>{var SE=HI(),s5=S0(),o$=w0(),o5=Math.pow(2,53);t5.exports=j0;function j0(){}Object.defineProperty(j0.prototype,"parse",{configurable:!0,enumerable:!1,value:s$});Object.defineProperty(j0.prototype,"_typeCast",{configurable:!0,enumerable:!1,value:t$});function s$(_,E,R,N,A){var L=this,U=function(){return L._typeCast(S,_,A.config.timezone,A.config.supportBigNumbers,A.config.bigNumberStrings,A.config.dateStrings)};for(var G=0;G=o5||Number(U)<=-o5)?U:Number(U);case SE.BIT:return E.parseLengthCodedBuffer();case SE.STRING:case SE.VAR_STRING:case SE.TINY_BLOB:case SE.MEDIUM_BLOB:case SE.LONG_BLOB:case SE.BLOB:return _.charsetNr===s5.BINARY?E.parseLengthCodedBuffer():E.parseLengthCodedString();case SE.GEOMETRY:return E.parseGeometryValue();default:return E.parseLengthCodedString()}}function r$(_,E){if(Array.isArray(E))return E.indexOf(SE[_])!==-1;else return Boolean(E)}});var e5=j((Fh,a5)=>{var a$=MT();a5.exports=v0;function v0(_){_=_||{},this.clientFlags=_.clientFlags|a$.CLIENT_SSL,this.maxPacketSize=_.maxPacketSize,this.charsetNumber=_.charsetNumber}v0.prototype.parse=function(_){this.clientFlags=_.parseUnsignedNumber(4),this.maxPacketSize=_.parseUnsignedNumber(4),this.charsetNumber=_.parseUnsignedNumber(1)};v0.prototype.write=function(_){_.writeUnsignedNumber(4,this.clientFlags),_.writeUnsignedNumber(4,this.maxPacketSize),_.writeUnsignedNumber(1,this.charsetNumber),_.writeFiller(23)}});var E8=j((Bh,_8)=>{_8.exports=p0;function p0(){this.message=void 0}p0.prototype.parse=function(_){this.message=_.parsePacketTerminatedString();var E=this.message.split(/\s\s/);for(var R=0;R{R8.exports=h0;function h0(_){_=_||{},this.firstByte=_.firstByte||254}h0.prototype.parse=function(_){this.firstByte=_.parseUnsignedNumber(1)};h0.prototype.write=function(_){_.writeUnsignedNumber(1,this.firstByte)}});var gN=j((FE)=>{FE.AuthSwitchRequestPacket=G5();FE.AuthSwitchResponsePacket=S5();FE.ClientAuthenticationPacket=P5();FE.ComChangeUserPacket=H5();FE.ComPingPacket=M5();FE.ComQueryPacket=B5();FE.ComQuitPacket=K5();FE.ComStatisticsPacket=J5();FE.EmptyPacket=Z5();FE.EofPacket=Q5();FE.ErrorPacket=x5();FE.Field=w0();FE.FieldPacket=j5();FE.HandshakeInitializationPacket=h5();FE.LocalDataFilePacket=g5();FE.LocalInfileRequestPacket=b5();FE.OkPacket=u5();FE.OldPasswordPacket=d5();FE.ResultSetHeaderPacket=n5();FE.RowDataPacket=r5();FE.SSLRequestPacket=e5();FE.StatisticsPacket=E8();FE.UseOldPasswordPacket=N8()});var T8=j((T)=>{T.EE_CANTCREATEFILE=1;T.EE_READ=2;T.EE_WRITE=3;T.EE_BADCLOSE=4;T.EE_OUTOFMEMORY=5;T.EE_DELETE=6;T.EE_LINK=7;T.EE_EOFERR=9;T.EE_CANTLOCK=10;T.EE_CANTUNLOCK=11;T.EE_DIR=12;T.EE_STAT=13;T.EE_CANT_CHSIZE=14;T.EE_CANT_OPEN_STREAM=15;T.EE_GETWD=16;T.EE_SETWD=17;T.EE_LINK_WARNING=18;T.EE_OPEN_WARNING=19;T.EE_DISK_FULL=20;T.EE_CANT_MKDIR=21;T.EE_UNKNOWN_CHARSET=22;T.EE_OUT_OF_FILERESOURCES=23;T.EE_CANT_READLINK=24;T.EE_CANT_SYMLINK=25;T.EE_REALPATH=26;T.EE_SYNC=27;T.EE_UNKNOWN_COLLATION=28;T.EE_FILENOTFOUND=29;T.EE_FILE_NOT_CLOSED=30;T.EE_CHANGE_OWNERSHIP=31;T.EE_CHANGE_PERMISSIONS=32;T.EE_CANT_SEEK=33;T.EE_CAPACITY_EXCEEDED=34;T.HA_ERR_KEY_NOT_FOUND=120;T.HA_ERR_FOUND_DUPP_KEY=121;T.HA_ERR_INTERNAL_ERROR=122;T.HA_ERR_RECORD_CHANGED=123;T.HA_ERR_WRONG_INDEX=124;T.HA_ERR_CRASHED=126;T.HA_ERR_WRONG_IN_RECORD=127;T.HA_ERR_OUT_OF_MEM=128;T.HA_ERR_NOT_A_TABLE=130;T.HA_ERR_WRONG_COMMAND=131;T.HA_ERR_OLD_FILE=132;T.HA_ERR_NO_ACTIVE_RECORD=133;T.HA_ERR_RECORD_DELETED=134;T.HA_ERR_RECORD_FILE_FULL=135;T.HA_ERR_INDEX_FILE_FULL=136;T.HA_ERR_END_OF_FILE=137;T.HA_ERR_UNSUPPORTED=138;T.HA_ERR_TOO_BIG_ROW=139;T.HA_WRONG_CREATE_OPTION=140;T.HA_ERR_FOUND_DUPP_UNIQUE=141;T.HA_ERR_UNKNOWN_CHARSET=142;T.HA_ERR_WRONG_MRG_TABLE_DEF=143;T.HA_ERR_CRASHED_ON_REPAIR=144;T.HA_ERR_CRASHED_ON_USAGE=145;T.HA_ERR_LOCK_WAIT_TIMEOUT=146;T.HA_ERR_LOCK_TABLE_FULL=147;T.HA_ERR_READ_ONLY_TRANSACTION=148;T.HA_ERR_LOCK_DEADLOCK=149;T.HA_ERR_CANNOT_ADD_FOREIGN=150;T.HA_ERR_NO_REFERENCED_ROW=151;T.HA_ERR_ROW_IS_REFERENCED=152;T.HA_ERR_NO_SAVEPOINT=153;T.HA_ERR_NON_UNIQUE_BLOCK_SIZE=154;T.HA_ERR_NO_SUCH_TABLE=155;T.HA_ERR_TABLE_EXIST=156;T.HA_ERR_NO_CONNECTION=157;T.HA_ERR_NULL_IN_SPATIAL=158;T.HA_ERR_TABLE_DEF_CHANGED=159;T.HA_ERR_NO_PARTITION_FOUND=160;T.HA_ERR_RBR_LOGGING_FAILED=161;T.HA_ERR_DROP_INDEX_FK=162;T.HA_ERR_FOREIGN_DUPLICATE_KEY=163;T.HA_ERR_TABLE_NEEDS_UPGRADE=164;T.HA_ERR_TABLE_READONLY=165;T.HA_ERR_AUTOINC_READ_FAILED=166;T.HA_ERR_AUTOINC_ERANGE=167;T.HA_ERR_GENERIC=168;T.HA_ERR_RECORD_IS_THE_SAME=169;T.HA_ERR_LOGGING_IMPOSSIBLE=170;T.HA_ERR_CORRUPT_EVENT=171;T.HA_ERR_NEW_FILE=172;T.HA_ERR_ROWS_EVENT_APPLY=173;T.HA_ERR_INITIALIZATION=174;T.HA_ERR_FILE_TOO_SHORT=175;T.HA_ERR_WRONG_CRC=176;T.HA_ERR_TOO_MANY_CONCURRENT_TRXS=177;T.HA_ERR_NOT_IN_LOCK_PARTITIONS=178;T.HA_ERR_INDEX_COL_TOO_LONG=179;T.HA_ERR_INDEX_CORRUPT=180;T.HA_ERR_UNDO_REC_TOO_BIG=181;T.HA_FTS_INVALID_DOCID=182;T.HA_ERR_TABLE_IN_FK_CHECK=183;T.HA_ERR_TABLESPACE_EXISTS=184;T.HA_ERR_TOO_MANY_FIELDS=185;T.HA_ERR_ROW_IN_WRONG_PARTITION=186;T.HA_ERR_INNODB_READ_ONLY=187;T.HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT=188;T.HA_ERR_TEMP_FILE_WRITE_FAILURE=189;T.HA_ERR_INNODB_FORCED_RECOVERY=190;T.HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE=191;T.HA_ERR_FK_DEPTH_EXCEEDED=192;T.HA_MISSING_CREATE_OPTION=193;T.HA_ERR_SE_OUT_OF_MEMORY=194;T.HA_ERR_TABLE_CORRUPT=195;T.HA_ERR_QUERY_INTERRUPTED=196;T.HA_ERR_TABLESPACE_MISSING=197;T.HA_ERR_TABLESPACE_IS_NOT_EMPTY=198;T.HA_ERR_WRONG_FILE_NAME=199;T.HA_ERR_NOT_ALLOWED_COMMAND=200;T.HA_ERR_COMPUTE_FAILED=201;T.ER_HASHCHK=1000;T.ER_NISAMCHK=1001;T.ER_NO=1002;T.ER_YES=1003;T.ER_CANT_CREATE_FILE=1004;T.ER_CANT_CREATE_TABLE=1005;T.ER_CANT_CREATE_DB=1006;T.ER_DB_CREATE_EXISTS=1007;T.ER_DB_DROP_EXISTS=1008;T.ER_DB_DROP_DELETE=1009;T.ER_DB_DROP_RMDIR=1010;T.ER_CANT_DELETE_FILE=1011;T.ER_CANT_FIND_SYSTEM_REC=1012;T.ER_CANT_GET_STAT=1013;T.ER_CANT_GET_WD=1014;T.ER_CANT_LOCK=1015;T.ER_CANT_OPEN_FILE=1016;T.ER_FILE_NOT_FOUND=1017;T.ER_CANT_READ_DIR=1018;T.ER_CANT_SET_WD=1019;T.ER_CHECKREAD=1020;T.ER_DISK_FULL=1021;T.ER_DUP_KEY=1022;T.ER_ERROR_ON_CLOSE=1023;T.ER_ERROR_ON_READ=1024;T.ER_ERROR_ON_RENAME=1025;T.ER_ERROR_ON_WRITE=1026;T.ER_FILE_USED=1027;T.ER_FILSORT_ABORT=1028;T.ER_FORM_NOT_FOUND=1029;T.ER_GET_ERRNO=1030;T.ER_ILLEGAL_HA=1031;T.ER_KEY_NOT_FOUND=1032;T.ER_NOT_FORM_FILE=1033;T.ER_NOT_KEYFILE=1034;T.ER_OLD_KEYFILE=1035;T.ER_OPEN_AS_READONLY=1036;T.ER_OUTOFMEMORY=1037;T.ER_OUT_OF_SORTMEMORY=1038;T.ER_UNEXPECTED_EOF=1039;T.ER_CON_COUNT_ERROR=1040;T.ER_OUT_OF_RESOURCES=1041;T.ER_BAD_HOST_ERROR=1042;T.ER_HANDSHAKE_ERROR=1043;T.ER_DBACCESS_DENIED_ERROR=1044;T.ER_ACCESS_DENIED_ERROR=1045;T.ER_NO_DB_ERROR=1046;T.ER_UNKNOWN_COM_ERROR=1047;T.ER_BAD_NULL_ERROR=1048;T.ER_BAD_DB_ERROR=1049;T.ER_TABLE_EXISTS_ERROR=1050;T.ER_BAD_TABLE_ERROR=1051;T.ER_NON_UNIQ_ERROR=1052;T.ER_SERVER_SHUTDOWN=1053;T.ER_BAD_FIELD_ERROR=1054;T.ER_WRONG_FIELD_WITH_GROUP=1055;T.ER_WRONG_GROUP_FIELD=1056;T.ER_WRONG_SUM_SELECT=1057;T.ER_WRONG_VALUE_COUNT=1058;T.ER_TOO_LONG_IDENT=1059;T.ER_DUP_FIELDNAME=1060;T.ER_DUP_KEYNAME=1061;T.ER_DUP_ENTRY=1062;T.ER_WRONG_FIELD_SPEC=1063;T.ER_PARSE_ERROR=1064;T.ER_EMPTY_QUERY=1065;T.ER_NONUNIQ_TABLE=1066;T.ER_INVALID_DEFAULT=1067;T.ER_MULTIPLE_PRI_KEY=1068;T.ER_TOO_MANY_KEYS=1069;T.ER_TOO_MANY_KEY_PARTS=1070;T.ER_TOO_LONG_KEY=1071;T.ER_KEY_COLUMN_DOES_NOT_EXITS=1072;T.ER_BLOB_USED_AS_KEY=1073;T.ER_TOO_BIG_FIELDLENGTH=1074;T.ER_WRONG_AUTO_KEY=1075;T.ER_READY=1076;T.ER_NORMAL_SHUTDOWN=1077;T.ER_GOT_SIGNAL=1078;T.ER_SHUTDOWN_COMPLETE=1079;T.ER_FORCING_CLOSE=1080;T.ER_IPSOCK_ERROR=1081;T.ER_NO_SUCH_INDEX=1082;T.ER_WRONG_FIELD_TERMINATORS=1083;T.ER_BLOBS_AND_NO_TERMINATED=1084;T.ER_TEXTFILE_NOT_READABLE=1085;T.ER_FILE_EXISTS_ERROR=1086;T.ER_LOAD_INFO=1087;T.ER_ALTER_INFO=1088;T.ER_WRONG_SUB_KEY=1089;T.ER_CANT_REMOVE_ALL_FIELDS=1090;T.ER_CANT_DROP_FIELD_OR_KEY=1091;T.ER_INSERT_INFO=1092;T.ER_UPDATE_TABLE_USED=1093;T.ER_NO_SUCH_THREAD=1094;T.ER_KILL_DENIED_ERROR=1095;T.ER_NO_TABLES_USED=1096;T.ER_TOO_BIG_SET=1097;T.ER_NO_UNIQUE_LOGFILE=1098;T.ER_TABLE_NOT_LOCKED_FOR_WRITE=1099;T.ER_TABLE_NOT_LOCKED=1100;T.ER_BLOB_CANT_HAVE_DEFAULT=1101;T.ER_WRONG_DB_NAME=1102;T.ER_WRONG_TABLE_NAME=1103;T.ER_TOO_BIG_SELECT=1104;T.ER_UNKNOWN_ERROR=1105;T.ER_UNKNOWN_PROCEDURE=1106;T.ER_WRONG_PARAMCOUNT_TO_PROCEDURE=1107;T.ER_WRONG_PARAMETERS_TO_PROCEDURE=1108;T.ER_UNKNOWN_TABLE=1109;T.ER_FIELD_SPECIFIED_TWICE=1110;T.ER_INVALID_GROUP_FUNC_USE=1111;T.ER_UNSUPPORTED_EXTENSION=1112;T.ER_TABLE_MUST_HAVE_COLUMNS=1113;T.ER_RECORD_FILE_FULL=1114;T.ER_UNKNOWN_CHARACTER_SET=1115;T.ER_TOO_MANY_TABLES=1116;T.ER_TOO_MANY_FIELDS=1117;T.ER_TOO_BIG_ROWSIZE=1118;T.ER_STACK_OVERRUN=1119;T.ER_WRONG_OUTER_JOIN=1120;T.ER_NULL_COLUMN_IN_INDEX=1121;T.ER_CANT_FIND_UDF=1122;T.ER_CANT_INITIALIZE_UDF=1123;T.ER_UDF_NO_PATHS=1124;T.ER_UDF_EXISTS=1125;T.ER_CANT_OPEN_LIBRARY=1126;T.ER_CANT_FIND_DL_ENTRY=1127;T.ER_FUNCTION_NOT_DEFINED=1128;T.ER_HOST_IS_BLOCKED=1129;T.ER_HOST_NOT_PRIVILEGED=1130;T.ER_PASSWORD_ANONYMOUS_USER=1131;T.ER_PASSWORD_NOT_ALLOWED=1132;T.ER_PASSWORD_NO_MATCH=1133;T.ER_UPDATE_INFO=1134;T.ER_CANT_CREATE_THREAD=1135;T.ER_WRONG_VALUE_COUNT_ON_ROW=1136;T.ER_CANT_REOPEN_TABLE=1137;T.ER_INVALID_USE_OF_NULL=1138;T.ER_REGEXP_ERROR=1139;T.ER_MIX_OF_GROUP_FUNC_AND_FIELDS=1140;T.ER_NONEXISTING_GRANT=1141;T.ER_TABLEACCESS_DENIED_ERROR=1142;T.ER_COLUMNACCESS_DENIED_ERROR=1143;T.ER_ILLEGAL_GRANT_FOR_TABLE=1144;T.ER_GRANT_WRONG_HOST_OR_USER=1145;T.ER_NO_SUCH_TABLE=1146;T.ER_NONEXISTING_TABLE_GRANT=1147;T.ER_NOT_ALLOWED_COMMAND=1148;T.ER_SYNTAX_ERROR=1149;T.ER_DELAYED_CANT_CHANGE_LOCK=1150;T.ER_TOO_MANY_DELAYED_THREADS=1151;T.ER_ABORTING_CONNECTION=1152;T.ER_NET_PACKET_TOO_LARGE=1153;T.ER_NET_READ_ERROR_FROM_PIPE=1154;T.ER_NET_FCNTL_ERROR=1155;T.ER_NET_PACKETS_OUT_OF_ORDER=1156;T.ER_NET_UNCOMPRESS_ERROR=1157;T.ER_NET_READ_ERROR=1158;T.ER_NET_READ_INTERRUPTED=1159;T.ER_NET_ERROR_ON_WRITE=1160;T.ER_NET_WRITE_INTERRUPTED=1161;T.ER_TOO_LONG_STRING=1162;T.ER_TABLE_CANT_HANDLE_BLOB=1163;T.ER_TABLE_CANT_HANDLE_AUTO_INCREMENT=1164;T.ER_DELAYED_INSERT_TABLE_LOCKED=1165;T.ER_WRONG_COLUMN_NAME=1166;T.ER_WRONG_KEY_COLUMN=1167;T.ER_WRONG_MRG_TABLE=1168;T.ER_DUP_UNIQUE=1169;T.ER_BLOB_KEY_WITHOUT_LENGTH=1170;T.ER_PRIMARY_CANT_HAVE_NULL=1171;T.ER_TOO_MANY_ROWS=1172;T.ER_REQUIRES_PRIMARY_KEY=1173;T.ER_NO_RAID_COMPILED=1174;T.ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE=1175;T.ER_KEY_DOES_NOT_EXITS=1176;T.ER_CHECK_NO_SUCH_TABLE=1177;T.ER_CHECK_NOT_IMPLEMENTED=1178;T.ER_CANT_DO_THIS_DURING_AN_TRANSACTION=1179;T.ER_ERROR_DURING_COMMIT=1180;T.ER_ERROR_DURING_ROLLBACK=1181;T.ER_ERROR_DURING_FLUSH_LOGS=1182;T.ER_ERROR_DURING_CHECKPOINT=1183;T.ER_NEW_ABORTING_CONNECTION=1184;T.ER_DUMP_NOT_IMPLEMENTED=1185;T.ER_FLUSH_MASTER_BINLOG_CLOSED=1186;T.ER_INDEX_REBUILD=1187;T.ER_MASTER=1188;T.ER_MASTER_NET_READ=1189;T.ER_MASTER_NET_WRITE=1190;T.ER_FT_MATCHING_KEY_NOT_FOUND=1191;T.ER_LOCK_OR_ACTIVE_TRANSACTION=1192;T.ER_UNKNOWN_SYSTEM_VARIABLE=1193;T.ER_CRASHED_ON_USAGE=1194;T.ER_CRASHED_ON_REPAIR=1195;T.ER_WARNING_NOT_COMPLETE_ROLLBACK=1196;T.ER_TRANS_CACHE_FULL=1197;T.ER_SLAVE_MUST_STOP=1198;T.ER_SLAVE_NOT_RUNNING=1199;T.ER_BAD_SLAVE=1200;T.ER_MASTER_INFO=1201;T.ER_SLAVE_THREAD=1202;T.ER_TOO_MANY_USER_CONNECTIONS=1203;T.ER_SET_CONSTANTS_ONLY=1204;T.ER_LOCK_WAIT_TIMEOUT=1205;T.ER_LOCK_TABLE_FULL=1206;T.ER_READ_ONLY_TRANSACTION=1207;T.ER_DROP_DB_WITH_READ_LOCK=1208;T.ER_CREATE_DB_WITH_READ_LOCK=1209;T.ER_WRONG_ARGUMENTS=1210;T.ER_NO_PERMISSION_TO_CREATE_USER=1211;T.ER_UNION_TABLES_IN_DIFFERENT_DIR=1212;T.ER_LOCK_DEADLOCK=1213;T.ER_TABLE_CANT_HANDLE_FT=1214;T.ER_CANNOT_ADD_FOREIGN=1215;T.ER_NO_REFERENCED_ROW=1216;T.ER_ROW_IS_REFERENCED=1217;T.ER_CONNECT_TO_MASTER=1218;T.ER_QUERY_ON_MASTER=1219;T.ER_ERROR_WHEN_EXECUTING_COMMAND=1220;T.ER_WRONG_USAGE=1221;T.ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT=1222;T.ER_CANT_UPDATE_WITH_READLOCK=1223;T.ER_MIXING_NOT_ALLOWED=1224;T.ER_DUP_ARGUMENT=1225;T.ER_USER_LIMIT_REACHED=1226;T.ER_SPECIFIC_ACCESS_DENIED_ERROR=1227;T.ER_LOCAL_VARIABLE=1228;T.ER_GLOBAL_VARIABLE=1229;T.ER_NO_DEFAULT=1230;T.ER_WRONG_VALUE_FOR_VAR=1231;T.ER_WRONG_TYPE_FOR_VAR=1232;T.ER_VAR_CANT_BE_READ=1233;T.ER_CANT_USE_OPTION_HERE=1234;T.ER_NOT_SUPPORTED_YET=1235;T.ER_MASTER_FATAL_ERROR_READING_BINLOG=1236;T.ER_SLAVE_IGNORED_TABLE=1237;T.ER_INCORRECT_GLOBAL_LOCAL_VAR=1238;T.ER_WRONG_FK_DEF=1239;T.ER_KEY_REF_DO_NOT_MATCH_TABLE_REF=1240;T.ER_OPERAND_COLUMNS=1241;T.ER_SUBQUERY_NO_1_ROW=1242;T.ER_UNKNOWN_STMT_HANDLER=1243;T.ER_CORRUPT_HELP_DB=1244;T.ER_CYCLIC_REFERENCE=1245;T.ER_AUTO_CONVERT=1246;T.ER_ILLEGAL_REFERENCE=1247;T.ER_DERIVED_MUST_HAVE_ALIAS=1248;T.ER_SELECT_REDUCED=1249;T.ER_TABLENAME_NOT_ALLOWED_HERE=1250;T.ER_NOT_SUPPORTED_AUTH_MODE=1251;T.ER_SPATIAL_CANT_HAVE_NULL=1252;T.ER_COLLATION_CHARSET_MISMATCH=1253;T.ER_SLAVE_WAS_RUNNING=1254;T.ER_SLAVE_WAS_NOT_RUNNING=1255;T.ER_TOO_BIG_FOR_UNCOMPRESS=1256;T.ER_ZLIB_Z_MEM_ERROR=1257;T.ER_ZLIB_Z_BUF_ERROR=1258;T.ER_ZLIB_Z_DATA_ERROR=1259;T.ER_CUT_VALUE_GROUP_CONCAT=1260;T.ER_WARN_TOO_FEW_RECORDS=1261;T.ER_WARN_TOO_MANY_RECORDS=1262;T.ER_WARN_NULL_TO_NOTNULL=1263;T.ER_WARN_DATA_OUT_OF_RANGE=1264;T.WARN_DATA_TRUNCATED=1265;T.ER_WARN_USING_OTHER_HANDLER=1266;T.ER_CANT_AGGREGATE_2COLLATIONS=1267;T.ER_DROP_USER=1268;T.ER_REVOKE_GRANTS=1269;T.ER_CANT_AGGREGATE_3COLLATIONS=1270;T.ER_CANT_AGGREGATE_NCOLLATIONS=1271;T.ER_VARIABLE_IS_NOT_STRUCT=1272;T.ER_UNKNOWN_COLLATION=1273;T.ER_SLAVE_IGNORED_SSL_PARAMS=1274;T.ER_SERVER_IS_IN_SECURE_AUTH_MODE=1275;T.ER_WARN_FIELD_RESOLVED=1276;T.ER_BAD_SLAVE_UNTIL_COND=1277;T.ER_MISSING_SKIP_SLAVE=1278;T.ER_UNTIL_COND_IGNORED=1279;T.ER_WRONG_NAME_FOR_INDEX=1280;T.ER_WRONG_NAME_FOR_CATALOG=1281;T.ER_WARN_QC_RESIZE=1282;T.ER_BAD_FT_COLUMN=1283;T.ER_UNKNOWN_KEY_CACHE=1284;T.ER_WARN_HOSTNAME_WONT_WORK=1285;T.ER_UNKNOWN_STORAGE_ENGINE=1286;T.ER_WARN_DEPRECATED_SYNTAX=1287;T.ER_NON_UPDATABLE_TABLE=1288;T.ER_FEATURE_DISABLED=1289;T.ER_OPTION_PREVENTS_STATEMENT=1290;T.ER_DUPLICATED_VALUE_IN_TYPE=1291;T.ER_TRUNCATED_WRONG_VALUE=1292;T.ER_TOO_MUCH_AUTO_TIMESTAMP_COLS=1293;T.ER_INVALID_ON_UPDATE=1294;T.ER_UNSUPPORTED_PS=1295;T.ER_GET_ERRMSG=1296;T.ER_GET_TEMPORARY_ERRMSG=1297;T.ER_UNKNOWN_TIME_ZONE=1298;T.ER_WARN_INVALID_TIMESTAMP=1299;T.ER_INVALID_CHARACTER_STRING=1300;T.ER_WARN_ALLOWED_PACKET_OVERFLOWED=1301;T.ER_CONFLICTING_DECLARATIONS=1302;T.ER_SP_NO_RECURSIVE_CREATE=1303;T.ER_SP_ALREADY_EXISTS=1304;T.ER_SP_DOES_NOT_EXIST=1305;T.ER_SP_DROP_FAILED=1306;T.ER_SP_STORE_FAILED=1307;T.ER_SP_LILABEL_MISMATCH=1308;T.ER_SP_LABEL_REDEFINE=1309;T.ER_SP_LABEL_MISMATCH=1310;T.ER_SP_UNINIT_VAR=1311;T.ER_SP_BADSELECT=1312;T.ER_SP_BADRETURN=1313;T.ER_SP_BADSTATEMENT=1314;T.ER_UPDATE_LOG_DEPRECATED_IGNORED=1315;T.ER_UPDATE_LOG_DEPRECATED_TRANSLATED=1316;T.ER_QUERY_INTERRUPTED=1317;T.ER_SP_WRONG_NO_OF_ARGS=1318;T.ER_SP_COND_MISMATCH=1319;T.ER_SP_NORETURN=1320;T.ER_SP_NORETURNEND=1321;T.ER_SP_BAD_CURSOR_QUERY=1322;T.ER_SP_BAD_CURSOR_SELECT=1323;T.ER_SP_CURSOR_MISMATCH=1324;T.ER_SP_CURSOR_ALREADY_OPEN=1325;T.ER_SP_CURSOR_NOT_OPEN=1326;T.ER_SP_UNDECLARED_VAR=1327;T.ER_SP_WRONG_NO_OF_FETCH_ARGS=1328;T.ER_SP_FETCH_NO_DATA=1329;T.ER_SP_DUP_PARAM=1330;T.ER_SP_DUP_VAR=1331;T.ER_SP_DUP_COND=1332;T.ER_SP_DUP_CURS=1333;T.ER_SP_CANT_ALTER=1334;T.ER_SP_SUBSELECT_NYI=1335;T.ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG=1336;T.ER_SP_VARCOND_AFTER_CURSHNDLR=1337;T.ER_SP_CURSOR_AFTER_HANDLER=1338;T.ER_SP_CASE_NOT_FOUND=1339;T.ER_FPARSER_TOO_BIG_FILE=1340;T.ER_FPARSER_BAD_HEADER=1341;T.ER_FPARSER_EOF_IN_COMMENT=1342;T.ER_FPARSER_ERROR_IN_PARAMETER=1343;T.ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER=1344;T.ER_VIEW_NO_EXPLAIN=1345;T.ER_FRM_UNKNOWN_TYPE=1346;T.ER_WRONG_OBJECT=1347;T.ER_NONUPDATEABLE_COLUMN=1348;T.ER_VIEW_SELECT_DERIVED=1349;T.ER_VIEW_SELECT_CLAUSE=1350;T.ER_VIEW_SELECT_VARIABLE=1351;T.ER_VIEW_SELECT_TMPTABLE=1352;T.ER_VIEW_WRONG_LIST=1353;T.ER_WARN_VIEW_MERGE=1354;T.ER_WARN_VIEW_WITHOUT_KEY=1355;T.ER_VIEW_INVALID=1356;T.ER_SP_NO_DROP_SP=1357;T.ER_SP_GOTO_IN_HNDLR=1358;T.ER_TRG_ALREADY_EXISTS=1359;T.ER_TRG_DOES_NOT_EXIST=1360;T.ER_TRG_ON_VIEW_OR_TEMP_TABLE=1361;T.ER_TRG_CANT_CHANGE_ROW=1362;T.ER_TRG_NO_SUCH_ROW_IN_TRG=1363;T.ER_NO_DEFAULT_FOR_FIELD=1364;T.ER_DIVISION_BY_ZERO=1365;T.ER_TRUNCATED_WRONG_VALUE_FOR_FIELD=1366;T.ER_ILLEGAL_VALUE_FOR_TYPE=1367;T.ER_VIEW_NONUPD_CHECK=1368;T.ER_VIEW_CHECK_FAILED=1369;T.ER_PROCACCESS_DENIED_ERROR=1370;T.ER_RELAY_LOG_FAIL=1371;T.ER_PASSWD_LENGTH=1372;T.ER_UNKNOWN_TARGET_BINLOG=1373;T.ER_IO_ERR_LOG_INDEX_READ=1374;T.ER_BINLOG_PURGE_PROHIBITED=1375;T.ER_FSEEK_FAIL=1376;T.ER_BINLOG_PURGE_FATAL_ERR=1377;T.ER_LOG_IN_USE=1378;T.ER_LOG_PURGE_UNKNOWN_ERR=1379;T.ER_RELAY_LOG_INIT=1380;T.ER_NO_BINARY_LOGGING=1381;T.ER_RESERVED_SYNTAX=1382;T.ER_WSAS_FAILED=1383;T.ER_DIFF_GROUPS_PROC=1384;T.ER_NO_GROUP_FOR_PROC=1385;T.ER_ORDER_WITH_PROC=1386;T.ER_LOGGING_PROHIBIT_CHANGING_OF=1387;T.ER_NO_FILE_MAPPING=1388;T.ER_WRONG_MAGIC=1389;T.ER_PS_MANY_PARAM=1390;T.ER_KEY_PART_0=1391;T.ER_VIEW_CHECKSUM=1392;T.ER_VIEW_MULTIUPDATE=1393;T.ER_VIEW_NO_INSERT_FIELD_LIST=1394;T.ER_VIEW_DELETE_MERGE_VIEW=1395;T.ER_CANNOT_USER=1396;T.ER_XAER_NOTA=1397;T.ER_XAER_INVAL=1398;T.ER_XAER_RMFAIL=1399;T.ER_XAER_OUTSIDE=1400;T.ER_XAER_RMERR=1401;T.ER_XA_RBROLLBACK=1402;T.ER_NONEXISTING_PROC_GRANT=1403;T.ER_PROC_AUTO_GRANT_FAIL=1404;T.ER_PROC_AUTO_REVOKE_FAIL=1405;T.ER_DATA_TOO_LONG=1406;T.ER_SP_BAD_SQLSTATE=1407;T.ER_STARTUP=1408;T.ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR=1409;T.ER_CANT_CREATE_USER_WITH_GRANT=1410;T.ER_WRONG_VALUE_FOR_TYPE=1411;T.ER_TABLE_DEF_CHANGED=1412;T.ER_SP_DUP_HANDLER=1413;T.ER_SP_NOT_VAR_ARG=1414;T.ER_SP_NO_RETSET=1415;T.ER_CANT_CREATE_GEOMETRY_OBJECT=1416;T.ER_FAILED_ROUTINE_BREAK_BINLOG=1417;T.ER_BINLOG_UNSAFE_ROUTINE=1418;T.ER_BINLOG_CREATE_ROUTINE_NEED_SUPER=1419;T.ER_EXEC_STMT_WITH_OPEN_CURSOR=1420;T.ER_STMT_HAS_NO_OPEN_CURSOR=1421;T.ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG=1422;T.ER_NO_DEFAULT_FOR_VIEW_FIELD=1423;T.ER_SP_NO_RECURSION=1424;T.ER_TOO_BIG_SCALE=1425;T.ER_TOO_BIG_PRECISION=1426;T.ER_M_BIGGER_THAN_D=1427;T.ER_WRONG_LOCK_OF_SYSTEM_TABLE=1428;T.ER_CONNECT_TO_FOREIGN_DATA_SOURCE=1429;T.ER_QUERY_ON_FOREIGN_DATA_SOURCE=1430;T.ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST=1431;T.ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE=1432;T.ER_FOREIGN_DATA_STRING_INVALID=1433;T.ER_CANT_CREATE_FEDERATED_TABLE=1434;T.ER_TRG_IN_WRONG_SCHEMA=1435;T.ER_STACK_OVERRUN_NEED_MORE=1436;T.ER_TOO_LONG_BODY=1437;T.ER_WARN_CANT_DROP_DEFAULT_KEYCACHE=1438;T.ER_TOO_BIG_DISPLAYWIDTH=1439;T.ER_XAER_DUPID=1440;T.ER_DATETIME_FUNCTION_OVERFLOW=1441;T.ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG=1442;T.ER_VIEW_PREVENT_UPDATE=1443;T.ER_PS_NO_RECURSION=1444;T.ER_SP_CANT_SET_AUTOCOMMIT=1445;T.ER_MALFORMED_DEFINER=1446;T.ER_VIEW_FRM_NO_USER=1447;T.ER_VIEW_OTHER_USER=1448;T.ER_NO_SUCH_USER=1449;T.ER_FORBID_SCHEMA_CHANGE=1450;T.ER_ROW_IS_REFERENCED_2=1451;T.ER_NO_REFERENCED_ROW_2=1452;T.ER_SP_BAD_VAR_SHADOW=1453;T.ER_TRG_NO_DEFINER=1454;T.ER_OLD_FILE_FORMAT=1455;T.ER_SP_RECURSION_LIMIT=1456;T.ER_SP_PROC_TABLE_CORRUPT=1457;T.ER_SP_WRONG_NAME=1458;T.ER_TABLE_NEEDS_UPGRADE=1459;T.ER_SP_NO_AGGREGATE=1460;T.ER_MAX_PREPARED_STMT_COUNT_REACHED=1461;T.ER_VIEW_RECURSIVE=1462;T.ER_NON_GROUPING_FIELD_USED=1463;T.ER_TABLE_CANT_HANDLE_SPKEYS=1464;T.ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA=1465;T.ER_REMOVED_SPACES=1466;T.ER_AUTOINC_READ_FAILED=1467;T.ER_USERNAME=1468;T.ER_HOSTNAME=1469;T.ER_WRONG_STRING_LENGTH=1470;T.ER_NON_INSERTABLE_TABLE=1471;T.ER_ADMIN_WRONG_MRG_TABLE=1472;T.ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT=1473;T.ER_NAME_BECOMES_EMPTY=1474;T.ER_AMBIGUOUS_FIELD_TERM=1475;T.ER_FOREIGN_SERVER_EXISTS=1476;T.ER_FOREIGN_SERVER_DOESNT_EXIST=1477;T.ER_ILLEGAL_HA_CREATE_OPTION=1478;T.ER_PARTITION_REQUIRES_VALUES_ERROR=1479;T.ER_PARTITION_WRONG_VALUES_ERROR=1480;T.ER_PARTITION_MAXVALUE_ERROR=1481;T.ER_PARTITION_SUBPARTITION_ERROR=1482;T.ER_PARTITION_SUBPART_MIX_ERROR=1483;T.ER_PARTITION_WRONG_NO_PART_ERROR=1484;T.ER_PARTITION_WRONG_NO_SUBPART_ERROR=1485;T.ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR=1486;T.ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR=1487;T.ER_FIELD_NOT_FOUND_PART_ERROR=1488;T.ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR=1489;T.ER_INCONSISTENT_PARTITION_INFO_ERROR=1490;T.ER_PARTITION_FUNC_NOT_ALLOWED_ERROR=1491;T.ER_PARTITIONS_MUST_BE_DEFINED_ERROR=1492;T.ER_RANGE_NOT_INCREASING_ERROR=1493;T.ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR=1494;T.ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR=1495;T.ER_PARTITION_ENTRY_ERROR=1496;T.ER_MIX_HANDLER_ERROR=1497;T.ER_PARTITION_NOT_DEFINED_ERROR=1498;T.ER_TOO_MANY_PARTITIONS_ERROR=1499;T.ER_SUBPARTITION_ERROR=1500;T.ER_CANT_CREATE_HANDLER_FILE=1501;T.ER_BLOB_FIELD_IN_PART_FUNC_ERROR=1502;T.ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF=1503;T.ER_NO_PARTS_ERROR=1504;T.ER_PARTITION_MGMT_ON_NONPARTITIONED=1505;T.ER_FOREIGN_KEY_ON_PARTITIONED=1506;T.ER_DROP_PARTITION_NON_EXISTENT=1507;T.ER_DROP_LAST_PARTITION=1508;T.ER_COALESCE_ONLY_ON_HASH_PARTITION=1509;T.ER_REORG_HASH_ONLY_ON_SAME_NO=1510;T.ER_REORG_NO_PARAM_ERROR=1511;T.ER_ONLY_ON_RANGE_LIST_PARTITION=1512;T.ER_ADD_PARTITION_SUBPART_ERROR=1513;T.ER_ADD_PARTITION_NO_NEW_PARTITION=1514;T.ER_COALESCE_PARTITION_NO_PARTITION=1515;T.ER_REORG_PARTITION_NOT_EXIST=1516;T.ER_SAME_NAME_PARTITION=1517;T.ER_NO_BINLOG_ERROR=1518;T.ER_CONSECUTIVE_REORG_PARTITIONS=1519;T.ER_REORG_OUTSIDE_RANGE=1520;T.ER_PARTITION_FUNCTION_FAILURE=1521;T.ER_PART_STATE_ERROR=1522;T.ER_LIMITED_PART_RANGE=1523;T.ER_PLUGIN_IS_NOT_LOADED=1524;T.ER_WRONG_VALUE=1525;T.ER_NO_PARTITION_FOR_GIVEN_VALUE=1526;T.ER_FILEGROUP_OPTION_ONLY_ONCE=1527;T.ER_CREATE_FILEGROUP_FAILED=1528;T.ER_DROP_FILEGROUP_FAILED=1529;T.ER_TABLESPACE_AUTO_EXTEND_ERROR=1530;T.ER_WRONG_SIZE_NUMBER=1531;T.ER_SIZE_OVERFLOW_ERROR=1532;T.ER_ALTER_FILEGROUP_FAILED=1533;T.ER_BINLOG_ROW_LOGGING_FAILED=1534;T.ER_BINLOG_ROW_WRONG_TABLE_DEF=1535;T.ER_BINLOG_ROW_RBR_TO_SBR=1536;T.ER_EVENT_ALREADY_EXISTS=1537;T.ER_EVENT_STORE_FAILED=1538;T.ER_EVENT_DOES_NOT_EXIST=1539;T.ER_EVENT_CANT_ALTER=1540;T.ER_EVENT_DROP_FAILED=1541;T.ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG=1542;T.ER_EVENT_ENDS_BEFORE_STARTS=1543;T.ER_EVENT_EXEC_TIME_IN_THE_PAST=1544;T.ER_EVENT_OPEN_TABLE_FAILED=1545;T.ER_EVENT_NEITHER_M_EXPR_NOR_M_AT=1546;T.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED=1547;T.ER_CANNOT_LOAD_FROM_TABLE=1548;T.ER_EVENT_CANNOT_DELETE=1549;T.ER_EVENT_COMPILE_ERROR=1550;T.ER_EVENT_SAME_NAME=1551;T.ER_EVENT_DATA_TOO_LONG=1552;T.ER_DROP_INDEX_FK=1553;T.ER_WARN_DEPRECATED_SYNTAX_WITH_VER=1554;T.ER_CANT_WRITE_LOCK_LOG_TABLE=1555;T.ER_CANT_LOCK_LOG_TABLE=1556;T.ER_FOREIGN_DUPLICATE_KEY=1557;T.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE=1558;T.ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR=1559;T.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT=1560;T.ER_NDB_CANT_SWITCH_BINLOG_FORMAT=1561;T.ER_PARTITION_NO_TEMPORARY=1562;T.ER_PARTITION_CONST_DOMAIN_ERROR=1563;T.ER_PARTITION_FUNCTION_IS_NOT_ALLOWED=1564;T.ER_DDL_LOG_ERROR=1565;T.ER_NULL_IN_VALUES_LESS_THAN=1566;T.ER_WRONG_PARTITION_NAME=1567;T.ER_CANT_CHANGE_TX_CHARACTERISTICS=1568;T.ER_DUP_ENTRY_AUTOINCREMENT_CASE=1569;T.ER_EVENT_MODIFY_QUEUE_ERROR=1570;T.ER_EVENT_SET_VAR_ERROR=1571;T.ER_PARTITION_MERGE_ERROR=1572;T.ER_CANT_ACTIVATE_LOG=1573;T.ER_RBR_NOT_AVAILABLE=1574;T.ER_BASE64_DECODE_ERROR=1575;T.ER_EVENT_RECURSION_FORBIDDEN=1576;T.ER_EVENTS_DB_ERROR=1577;T.ER_ONLY_INTEGERS_ALLOWED=1578;T.ER_UNSUPORTED_LOG_ENGINE=1579;T.ER_BAD_LOG_STATEMENT=1580;T.ER_CANT_RENAME_LOG_TABLE=1581;T.ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT=1582;T.ER_WRONG_PARAMETERS_TO_NATIVE_FCT=1583;T.ER_WRONG_PARAMETERS_TO_STORED_FCT=1584;T.ER_NATIVE_FCT_NAME_COLLISION=1585;T.ER_DUP_ENTRY_WITH_KEY_NAME=1586;T.ER_BINLOG_PURGE_EMFILE=1587;T.ER_EVENT_CANNOT_CREATE_IN_THE_PAST=1588;T.ER_EVENT_CANNOT_ALTER_IN_THE_PAST=1589;T.ER_SLAVE_INCIDENT=1590;T.ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT=1591;T.ER_BINLOG_UNSAFE_STATEMENT=1592;T.ER_SLAVE_FATAL_ERROR=1593;T.ER_SLAVE_RELAY_LOG_READ_FAILURE=1594;T.ER_SLAVE_RELAY_LOG_WRITE_FAILURE=1595;T.ER_SLAVE_CREATE_EVENT_FAILURE=1596;T.ER_SLAVE_MASTER_COM_FAILURE=1597;T.ER_BINLOG_LOGGING_IMPOSSIBLE=1598;T.ER_VIEW_NO_CREATION_CTX=1599;T.ER_VIEW_INVALID_CREATION_CTX=1600;T.ER_SR_INVALID_CREATION_CTX=1601;T.ER_TRG_CORRUPTED_FILE=1602;T.ER_TRG_NO_CREATION_CTX=1603;T.ER_TRG_INVALID_CREATION_CTX=1604;T.ER_EVENT_INVALID_CREATION_CTX=1605;T.ER_TRG_CANT_OPEN_TABLE=1606;T.ER_CANT_CREATE_SROUTINE=1607;T.ER_NEVER_USED=1608;T.ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT=1609;T.ER_SLAVE_CORRUPT_EVENT=1610;T.ER_LOAD_DATA_INVALID_COLUMN=1611;T.ER_LOG_PURGE_NO_FILE=1612;T.ER_XA_RBTIMEOUT=1613;T.ER_XA_RBDEADLOCK=1614;T.ER_NEED_REPREPARE=1615;T.ER_DELAYED_NOT_SUPPORTED=1616;T.WARN_NO_MASTER_INFO=1617;T.WARN_OPTION_IGNORED=1618;T.ER_PLUGIN_DELETE_BUILTIN=1619;T.WARN_PLUGIN_BUSY=1620;T.ER_VARIABLE_IS_READONLY=1621;T.ER_WARN_ENGINE_TRANSACTION_ROLLBACK=1622;T.ER_SLAVE_HEARTBEAT_FAILURE=1623;T.ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE=1624;T.ER_NDB_REPLICATION_SCHEMA_ERROR=1625;T.ER_CONFLICT_FN_PARSE_ERROR=1626;T.ER_EXCEPTIONS_WRITE_ERROR=1627;T.ER_TOO_LONG_TABLE_COMMENT=1628;T.ER_TOO_LONG_FIELD_COMMENT=1629;T.ER_FUNC_INEXISTENT_NAME_COLLISION=1630;T.ER_DATABASE_NAME=1631;T.ER_TABLE_NAME=1632;T.ER_PARTITION_NAME=1633;T.ER_SUBPARTITION_NAME=1634;T.ER_TEMPORARY_NAME=1635;T.ER_RENAMED_NAME=1636;T.ER_TOO_MANY_CONCURRENT_TRXS=1637;T.WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED=1638;T.ER_DEBUG_SYNC_TIMEOUT=1639;T.ER_DEBUG_SYNC_HIT_LIMIT=1640;T.ER_DUP_SIGNAL_SET=1641;T.ER_SIGNAL_WARN=1642;T.ER_SIGNAL_NOT_FOUND=1643;T.ER_SIGNAL_EXCEPTION=1644;T.ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER=1645;T.ER_SIGNAL_BAD_CONDITION_TYPE=1646;T.WARN_COND_ITEM_TRUNCATED=1647;T.ER_COND_ITEM_TOO_LONG=1648;T.ER_UNKNOWN_LOCALE=1649;T.ER_SLAVE_IGNORE_SERVER_IDS=1650;T.ER_QUERY_CACHE_DISABLED=1651;T.ER_SAME_NAME_PARTITION_FIELD=1652;T.ER_PARTITION_COLUMN_LIST_ERROR=1653;T.ER_WRONG_TYPE_COLUMN_VALUE_ERROR=1654;T.ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR=1655;T.ER_MAXVALUE_IN_VALUES_IN=1656;T.ER_TOO_MANY_VALUES_ERROR=1657;T.ER_ROW_SINGLE_PARTITION_FIELD_ERROR=1658;T.ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD=1659;T.ER_PARTITION_FIELDS_TOO_LONG=1660;T.ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE=1661;T.ER_BINLOG_ROW_MODE_AND_STMT_ENGINE=1662;T.ER_BINLOG_UNSAFE_AND_STMT_ENGINE=1663;T.ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE=1664;T.ER_BINLOG_STMT_MODE_AND_ROW_ENGINE=1665;T.ER_BINLOG_ROW_INJECTION_AND_STMT_MODE=1666;T.ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE=1667;T.ER_BINLOG_UNSAFE_LIMIT=1668;T.ER_BINLOG_UNSAFE_INSERT_DELAYED=1669;T.ER_BINLOG_UNSAFE_SYSTEM_TABLE=1670;T.ER_BINLOG_UNSAFE_AUTOINC_COLUMNS=1671;T.ER_BINLOG_UNSAFE_UDF=1672;T.ER_BINLOG_UNSAFE_SYSTEM_VARIABLE=1673;T.ER_BINLOG_UNSAFE_SYSTEM_FUNCTION=1674;T.ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS=1675;T.ER_MESSAGE_AND_STATEMENT=1676;T.ER_SLAVE_CONVERSION_FAILED=1677;T.ER_SLAVE_CANT_CREATE_CONVERSION=1678;T.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT=1679;T.ER_PATH_LENGTH=1680;T.ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT=1681;T.ER_WRONG_NATIVE_TABLE_STRUCTURE=1682;T.ER_WRONG_PERFSCHEMA_USAGE=1683;T.ER_WARN_I_S_SKIPPED_TABLE=1684;T.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT=1685;T.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT=1686;T.ER_SPATIAL_MUST_HAVE_GEOM_COL=1687;T.ER_TOO_LONG_INDEX_COMMENT=1688;T.ER_LOCK_ABORTED=1689;T.ER_DATA_OUT_OF_RANGE=1690;T.ER_WRONG_SPVAR_TYPE_IN_LIMIT=1691;T.ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE=1692;T.ER_BINLOG_UNSAFE_MIXED_STATEMENT=1693;T.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN=1694;T.ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN=1695;T.ER_FAILED_READ_FROM_PAR_FILE=1696;T.ER_VALUES_IS_NOT_INT_TYPE_ERROR=1697;T.ER_ACCESS_DENIED_NO_PASSWORD_ERROR=1698;T.ER_SET_PASSWORD_AUTH_PLUGIN=1699;T.ER_GRANT_PLUGIN_USER_EXISTS=1700;T.ER_TRUNCATE_ILLEGAL_FK=1701;T.ER_PLUGIN_IS_PERMANENT=1702;T.ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN=1703;T.ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX=1704;T.ER_STMT_CACHE_FULL=1705;T.ER_MULTI_UPDATE_KEY_CONFLICT=1706;T.ER_TABLE_NEEDS_REBUILD=1707;T.WARN_OPTION_BELOW_LIMIT=1708;T.ER_INDEX_COLUMN_TOO_LONG=1709;T.ER_ERROR_IN_TRIGGER_BODY=1710;T.ER_ERROR_IN_UNKNOWN_TRIGGER_BODY=1711;T.ER_INDEX_CORRUPT=1712;T.ER_UNDO_RECORD_TOO_BIG=1713;T.ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT=1714;T.ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE=1715;T.ER_BINLOG_UNSAFE_REPLACE_SELECT=1716;T.ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT=1717;T.ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT=1718;T.ER_BINLOG_UNSAFE_UPDATE_IGNORE=1719;T.ER_PLUGIN_NO_UNINSTALL=1720;T.ER_PLUGIN_NO_INSTALL=1721;T.ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT=1722;T.ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC=1723;T.ER_BINLOG_UNSAFE_INSERT_TWO_KEYS=1724;T.ER_TABLE_IN_FK_CHECK=1725;T.ER_UNSUPPORTED_ENGINE=1726;T.ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST=1727;T.ER_CANNOT_LOAD_FROM_TABLE_V2=1728;T.ER_MASTER_DELAY_VALUE_OUT_OF_RANGE=1729;T.ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT=1730;T.ER_PARTITION_EXCHANGE_DIFFERENT_OPTION=1731;T.ER_PARTITION_EXCHANGE_PART_TABLE=1732;T.ER_PARTITION_EXCHANGE_TEMP_TABLE=1733;T.ER_PARTITION_INSTEAD_OF_SUBPARTITION=1734;T.ER_UNKNOWN_PARTITION=1735;T.ER_TABLES_DIFFERENT_METADATA=1736;T.ER_ROW_DOES_NOT_MATCH_PARTITION=1737;T.ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX=1738;T.ER_WARN_INDEX_NOT_APPLICABLE=1739;T.ER_PARTITION_EXCHANGE_FOREIGN_KEY=1740;T.ER_NO_SUCH_KEY_VALUE=1741;T.ER_RPL_INFO_DATA_TOO_LONG=1742;T.ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE=1743;T.ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE=1744;T.ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX=1745;T.ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT=1746;T.ER_PARTITION_CLAUSE_ON_NONPARTITIONED=1747;T.ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET=1748;T.ER_NO_SUCH_PARTITION=1749;T.ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE=1750;T.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE=1751;T.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE=1752;T.ER_MTS_FEATURE_IS_NOT_SUPPORTED=1753;T.ER_MTS_UPDATED_DBS_GREATER_MAX=1754;T.ER_MTS_CANT_PARALLEL=1755;T.ER_MTS_INCONSISTENT_DATA=1756;T.ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING=1757;T.ER_DA_INVALID_CONDITION_NUMBER=1758;T.ER_INSECURE_PLAIN_TEXT=1759;T.ER_INSECURE_CHANGE_MASTER=1760;T.ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO=1761;T.ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO=1762;T.ER_SQLTHREAD_WITH_SECURE_SLAVE=1763;T.ER_TABLE_HAS_NO_FT=1764;T.ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER=1765;T.ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION=1766;T.ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST=1767;T.ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION=1768;T.ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION=1769;T.ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL=1770;T.ER_SKIPPING_LOGGED_TRANSACTION=1771;T.ER_MALFORMED_GTID_SET_SPECIFICATION=1772;T.ER_MALFORMED_GTID_SET_ENCODING=1773;T.ER_MALFORMED_GTID_SPECIFICATION=1774;T.ER_GNO_EXHAUSTED=1775;T.ER_BAD_SLAVE_AUTO_POSITION=1776;T.ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF=1777;T.ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET=1778;T.ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON=1779;T.ER_GTID_MODE_REQUIRES_BINLOG=1780;T.ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF=1781;T.ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON=1782;T.ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF=1783;T.ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF=1784;T.ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE=1785;T.ER_GTID_UNSAFE_CREATE_SELECT=1786;T.ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION=1787;T.ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME=1788;T.ER_MASTER_HAS_PURGED_REQUIRED_GTIDS=1789;T.ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID=1790;T.ER_UNKNOWN_EXPLAIN_FORMAT=1791;T.ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION=1792;T.ER_TOO_LONG_TABLE_PARTITION_COMMENT=1793;T.ER_SLAVE_CONFIGURATION=1794;T.ER_INNODB_FT_LIMIT=1795;T.ER_INNODB_NO_FT_TEMP_TABLE=1796;T.ER_INNODB_FT_WRONG_DOCID_COLUMN=1797;T.ER_INNODB_FT_WRONG_DOCID_INDEX=1798;T.ER_INNODB_ONLINE_LOG_TOO_BIG=1799;T.ER_UNKNOWN_ALTER_ALGORITHM=1800;T.ER_UNKNOWN_ALTER_LOCK=1801;T.ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS=1802;T.ER_MTS_RECOVERY_FAILURE=1803;T.ER_MTS_RESET_WORKERS=1804;T.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2=1805;T.ER_SLAVE_SILENT_RETRY_TRANSACTION=1806;T.ER_DISCARD_FK_CHECKS_RUNNING=1807;T.ER_TABLE_SCHEMA_MISMATCH=1808;T.ER_TABLE_IN_SYSTEM_TABLESPACE=1809;T.ER_IO_READ_ERROR=1810;T.ER_IO_WRITE_ERROR=1811;T.ER_TABLESPACE_MISSING=1812;T.ER_TABLESPACE_EXISTS=1813;T.ER_TABLESPACE_DISCARDED=1814;T.ER_INTERNAL_ERROR=1815;T.ER_INNODB_IMPORT_ERROR=1816;T.ER_INNODB_INDEX_CORRUPT=1817;T.ER_INVALID_YEAR_COLUMN_LENGTH=1818;T.ER_NOT_VALID_PASSWORD=1819;T.ER_MUST_CHANGE_PASSWORD=1820;T.ER_FK_NO_INDEX_CHILD=1821;T.ER_FK_NO_INDEX_PARENT=1822;T.ER_FK_FAIL_ADD_SYSTEM=1823;T.ER_FK_CANNOT_OPEN_PARENT=1824;T.ER_FK_INCORRECT_OPTION=1825;T.ER_FK_DUP_NAME=1826;T.ER_PASSWORD_FORMAT=1827;T.ER_FK_COLUMN_CANNOT_DROP=1828;T.ER_FK_COLUMN_CANNOT_DROP_CHILD=1829;T.ER_FK_COLUMN_NOT_NULL=1830;T.ER_DUP_INDEX=1831;T.ER_FK_COLUMN_CANNOT_CHANGE=1832;T.ER_FK_COLUMN_CANNOT_CHANGE_CHILD=1833;T.ER_FK_CANNOT_DELETE_PARENT=1834;T.ER_MALFORMED_PACKET=1835;T.ER_READ_ONLY_MODE=1836;T.ER_GTID_NEXT_TYPE_UNDEFINED_GROUP=1837;T.ER_VARIABLE_NOT_SETTABLE_IN_SP=1838;T.ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF=1839;T.ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY=1840;T.ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY=1841;T.ER_GTID_PURGED_WAS_CHANGED=1842;T.ER_GTID_EXECUTED_WAS_CHANGED=1843;T.ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES=1844;T.ER_ALTER_OPERATION_NOT_SUPPORTED=1845;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON=1846;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY=1847;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION=1848;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME=1849;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE=1850;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK=1851;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE=1852;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK=1853;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC=1854;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS=1855;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS=1856;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS=1857;T.ER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE=1858;T.ER_DUP_UNKNOWN_IN_INDEX=1859;T.ER_IDENT_CAUSES_TOO_LONG_PATH=1860;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL=1861;T.ER_MUST_CHANGE_PASSWORD_LOGIN=1862;T.ER_ROW_IN_WRONG_PARTITION=1863;T.ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX=1864;T.ER_INNODB_NO_FT_USES_PARSER=1865;T.ER_BINLOG_LOGICAL_CORRUPTION=1866;T.ER_WARN_PURGE_LOG_IN_USE=1867;T.ER_WARN_PURGE_LOG_IS_ACTIVE=1868;T.ER_AUTO_INCREMENT_CONFLICT=1869;T.WARN_ON_BLOCKHOLE_IN_RBR=1870;T.ER_SLAVE_MI_INIT_REPOSITORY=1871;T.ER_SLAVE_RLI_INIT_REPOSITORY=1872;T.ER_ACCESS_DENIED_CHANGE_USER_ERROR=1873;T.ER_INNODB_READ_ONLY=1874;T.ER_STOP_SLAVE_SQL_THREAD_TIMEOUT=1875;T.ER_STOP_SLAVE_IO_THREAD_TIMEOUT=1876;T.ER_TABLE_CORRUPT=1877;T.ER_TEMP_FILE_WRITE_FAILURE=1878;T.ER_INNODB_FT_AUX_NOT_HEX_ID=1879;T.ER_OLD_TEMPORALS_UPGRADED=1880;T.ER_INNODB_FORCED_RECOVERY=1881;T.ER_AES_INVALID_IV=1882;T.ER_PLUGIN_CANNOT_BE_UNINSTALLED=1883;T.ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_GTID_GROUP=1884;T.ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER=1885;T.ER_MISSING_KEY=1886;T.WARN_NAMED_PIPE_ACCESS_EVERYONE=1887;T.ER_FOUND_MISSING_GTIDS=1888;T.ER_FILE_CORRUPT=3000;T.ER_ERROR_ON_MASTER=3001;T.ER_INCONSISTENT_ERROR=3002;T.ER_STORAGE_ENGINE_NOT_LOADED=3003;T.ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER=3004;T.ER_WARN_LEGACY_SYNTAX_CONVERTED=3005;T.ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN=3006;T.ER_CANNOT_DISCARD_TEMPORARY_TABLE=3007;T.ER_FK_DEPTH_EXCEEDED=3008;T.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2=3009;T.ER_WARN_TRIGGER_DOESNT_HAVE_CREATED=3010;T.ER_REFERENCED_TRG_DOES_NOT_EXIST=3011;T.ER_EXPLAIN_NOT_SUPPORTED=3012;T.ER_INVALID_FIELD_SIZE=3013;T.ER_MISSING_HA_CREATE_OPTION=3014;T.ER_ENGINE_OUT_OF_MEMORY=3015;T.ER_PASSWORD_EXPIRE_ANONYMOUS_USER=3016;T.ER_SLAVE_SQL_THREAD_MUST_STOP=3017;T.ER_NO_FT_MATERIALIZED_SUBQUERY=3018;T.ER_INNODB_UNDO_LOG_FULL=3019;T.ER_INVALID_ARGUMENT_FOR_LOGARITHM=3020;T.ER_SLAVE_CHANNEL_IO_THREAD_MUST_STOP=3021;T.ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO=3022;T.ER_WARN_ONLY_MASTER_LOG_FILE_NO_POS=3023;T.ER_QUERY_TIMEOUT=3024;T.ER_NON_RO_SELECT_DISABLE_TIMER=3025;T.ER_DUP_LIST_ENTRY=3026;T.ER_SQL_MODE_NO_EFFECT=3027;T.ER_AGGREGATE_ORDER_FOR_UNION=3028;T.ER_AGGREGATE_ORDER_NON_AGG_QUERY=3029;T.ER_SLAVE_WORKER_STOPPED_PREVIOUS_THD_ERROR=3030;T.ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER=3031;T.ER_SERVER_OFFLINE_MODE=3032;T.ER_GIS_DIFFERENT_SRIDS=3033;T.ER_GIS_UNSUPPORTED_ARGUMENT=3034;T.ER_GIS_UNKNOWN_ERROR=3035;T.ER_GIS_UNKNOWN_EXCEPTION=3036;T.ER_GIS_INVALID_DATA=3037;T.ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION=3038;T.ER_BOOST_GEOMETRY_CENTROID_EXCEPTION=3039;T.ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION=3040;T.ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION=3041;T.ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION=3042;T.ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION=3043;T.ER_STD_BAD_ALLOC_ERROR=3044;T.ER_STD_DOMAIN_ERROR=3045;T.ER_STD_LENGTH_ERROR=3046;T.ER_STD_INVALID_ARGUMENT=3047;T.ER_STD_OUT_OF_RANGE_ERROR=3048;T.ER_STD_OVERFLOW_ERROR=3049;T.ER_STD_RANGE_ERROR=3050;T.ER_STD_UNDERFLOW_ERROR=3051;T.ER_STD_LOGIC_ERROR=3052;T.ER_STD_RUNTIME_ERROR=3053;T.ER_STD_UNKNOWN_EXCEPTION=3054;T.ER_GIS_DATA_WRONG_ENDIANESS=3055;T.ER_CHANGE_MASTER_PASSWORD_LENGTH=3056;T.ER_USER_LOCK_WRONG_NAME=3057;T.ER_USER_LOCK_DEADLOCK=3058;T.ER_REPLACE_INACCESSIBLE_ROWS=3059;T.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS=3060;T.ER_ILLEGAL_USER_VAR=3061;T.ER_GTID_MODE_OFF=3062;T.ER_UNSUPPORTED_BY_REPLICATION_THREAD=3063;T.ER_INCORRECT_TYPE=3064;T.ER_FIELD_IN_ORDER_NOT_SELECT=3065;T.ER_AGGREGATE_IN_ORDER_NOT_SELECT=3066;T.ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN=3067;T.ER_NET_OK_PACKET_TOO_LARGE=3068;T.ER_INVALID_JSON_DATA=3069;T.ER_INVALID_GEOJSON_MISSING_MEMBER=3070;T.ER_INVALID_GEOJSON_WRONG_TYPE=3071;T.ER_INVALID_GEOJSON_UNSPECIFIED=3072;T.ER_DIMENSION_UNSUPPORTED=3073;T.ER_SLAVE_CHANNEL_DOES_NOT_EXIST=3074;T.ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT=3075;T.ER_SLAVE_CHANNEL_NAME_INVALID_OR_TOO_LONG=3076;T.ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY=3077;T.ER_SLAVE_CHANNEL_DELETE=3078;T.ER_SLAVE_MULTIPLE_CHANNELS_CMD=3079;T.ER_SLAVE_MAX_CHANNELS_EXCEEDED=3080;T.ER_SLAVE_CHANNEL_MUST_STOP=3081;T.ER_SLAVE_CHANNEL_NOT_RUNNING=3082;T.ER_SLAVE_CHANNEL_WAS_RUNNING=3083;T.ER_SLAVE_CHANNEL_WAS_NOT_RUNNING=3084;T.ER_SLAVE_CHANNEL_SQL_THREAD_MUST_STOP=3085;T.ER_SLAVE_CHANNEL_SQL_SKIP_COUNTER=3086;T.ER_WRONG_FIELD_WITH_GROUP_V2=3087;T.ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2=3088;T.ER_WARN_DEPRECATED_SYSVAR_UPDATE=3089;T.ER_WARN_DEPRECATED_SQLMODE=3090;T.ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID=3091;T.ER_GROUP_REPLICATION_CONFIGURATION=3092;T.ER_GROUP_REPLICATION_RUNNING=3093;T.ER_GROUP_REPLICATION_APPLIER_INIT_ERROR=3094;T.ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT=3095;T.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR=3096;T.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR=3097;T.ER_BEFORE_DML_VALIDATION_ERROR=3098;T.ER_PREVENTS_VARIABLE_WITHOUT_RBR=3099;T.ER_RUN_HOOK_ERROR=3100;T.ER_TRANSACTION_ROLLBACK_DURING_COMMIT=3101;T.ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED=3102;T.ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN=3103;T.ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN=3104;T.ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN=3105;T.ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN=3106;T.ER_GENERATED_COLUMN_NON_PRIOR=3107;T.ER_DEPENDENT_BY_GENERATED_COLUMN=3108;T.ER_GENERATED_COLUMN_REF_AUTO_INC=3109;T.ER_FEATURE_NOT_AVAILABLE=3110;T.ER_CANT_SET_GTID_MODE=3111;T.ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF=3112;T.ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION=3113;T.ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON=3114;T.ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF=3115;T.ER_CANT_SET_ENFORCE_GTID_CONSISTENCY_ON_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS=3116;T.ER_SET_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS=3117;T.ER_ACCOUNT_HAS_BEEN_LOCKED=3118;T.ER_WRONG_TABLESPACE_NAME=3119;T.ER_TABLESPACE_IS_NOT_EMPTY=3120;T.ER_WRONG_FILE_NAME=3121;T.ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION=3122;T.ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR=3123;T.ER_WARN_BAD_MAX_EXECUTION_TIME=3124;T.ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME=3125;T.ER_WARN_CONFLICTING_HINT=3126;T.ER_WARN_UNKNOWN_QB_NAME=3127;T.ER_UNRESOLVED_HINT_NAME=3128;T.ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE=3129;T.ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED=3130;T.ER_LOCKING_SERVICE_WRONG_NAME=3131;T.ER_LOCKING_SERVICE_DEADLOCK=3132;T.ER_LOCKING_SERVICE_TIMEOUT=3133;T.ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED=3134;T.ER_SQL_MODE_MERGED=3135;T.ER_VTOKEN_PLUGIN_TOKEN_MISMATCH=3136;T.ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND=3137;T.ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID=3138;T.ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED=3139;T.ER_INVALID_JSON_TEXT=3140;T.ER_INVALID_JSON_TEXT_IN_PARAM=3141;T.ER_INVALID_JSON_BINARY_DATA=3142;T.ER_INVALID_JSON_PATH=3143;T.ER_INVALID_JSON_CHARSET=3144;T.ER_INVALID_JSON_CHARSET_IN_FUNCTION=3145;T.ER_INVALID_TYPE_FOR_JSON=3146;T.ER_INVALID_CAST_TO_JSON=3147;T.ER_INVALID_JSON_PATH_CHARSET=3148;T.ER_INVALID_JSON_PATH_WILDCARD=3149;T.ER_JSON_VALUE_TOO_BIG=3150;T.ER_JSON_KEY_TOO_BIG=3151;T.ER_JSON_USED_AS_KEY=3152;T.ER_JSON_VACUOUS_PATH=3153;T.ER_JSON_BAD_ONE_OR_ALL_ARG=3154;T.ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE=3155;T.ER_INVALID_JSON_VALUE_FOR_CAST=3156;T.ER_JSON_DOCUMENT_TOO_DEEP=3157;T.ER_JSON_DOCUMENT_NULL_KEY=3158;T.ER_SECURE_TRANSPORT_REQUIRED=3159;T.ER_NO_SECURE_TRANSPORTS_CONFIGURED=3160;T.ER_DISABLED_STORAGE_ENGINE=3161;T.ER_USER_DOES_NOT_EXIST=3162;T.ER_USER_ALREADY_EXISTS=3163;T.ER_AUDIT_API_ABORT=3164;T.ER_INVALID_JSON_PATH_ARRAY_CELL=3165;T.ER_BUFPOOL_RESIZE_INPROGRESS=3166;T.ER_FEATURE_DISABLED_SEE_DOC=3167;T.ER_SERVER_ISNT_AVAILABLE=3168;T.ER_SESSION_WAS_KILLED=3169;T.ER_CAPACITY_EXCEEDED=3170;T.ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER=3171;T.ER_TABLE_NEEDS_UPG_PART=3172;T.ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID=3173;T.ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL=3174;T.ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT=3175;T.ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE=3176;T.ER_LOCK_REFUSED_BY_ENGINE=3177;T.ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN=3178;T.ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE=3179;T.ER_MASTER_KEY_ROTATION_ERROR_BY_SE=3180;T.ER_MASTER_KEY_ROTATION_BINLOG_FAILED=3181;T.ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE=3182;T.ER_TABLESPACE_CANNOT_ENCRYPT=3183;T.ER_INVALID_ENCRYPTION_OPTION=3184;T.ER_CANNOT_FIND_KEY_IN_KEYRING=3185;T.ER_CAPACITY_EXCEEDED_IN_PARSER=3186;T.ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE=3187;T.ER_KEYRING_UDF_KEYRING_SERVICE_ERROR=3188;T.ER_USER_COLUMN_OLD_LENGTH=3189;T.ER_CANT_RESET_MASTER=3190;T.ER_GROUP_REPLICATION_MAX_GROUP_SIZE=3191;T.ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED=3192;T.ER_TABLE_REFERENCED=3193;T.ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE=3194;T.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO=3195;T.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID=3196;T.ER_XA_RETRY=3197;T.ER_KEYRING_AWS_UDF_AWS_KMS_ERROR=3198;T.ER_BINLOG_UNSAFE_XA=3199;T.ER_UDF_ERROR=3200;T.ER_KEYRING_MIGRATION_FAILURE=3201;T.ER_KEYRING_ACCESS_DENIED_ERROR=3202;T.ER_KEYRING_MIGRATION_STATUS=3203;T.ER_PLUGIN_FAILED_TO_OPEN_TABLES=3204;T.ER_PLUGIN_FAILED_TO_OPEN_TABLE=3205;T.ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED=3206;T.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET=3207;T.ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY=3208;T.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED=3209;T.ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED=3210;T.ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE=3211;T.ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED=3212;T.ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS=3213;T.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE=3214;T.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT=3215;T.ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED=3216;T.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE=3217;T.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE=3218;T.ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR=3219;T.ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY=3220;T.ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY=3221;T.ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS=3222;T.ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC=3223;T.ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER=3224;T.ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER=3225;T.WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP=3226;T.ER_XA_REPLICATION_FILTERS=3227;T.ER_CANT_OPEN_ERROR_LOG=3228;T.ER_GROUPING_ON_TIMESTAMP_IN_DST=3229;T.ER_CANT_START_SERVER_NAMED_PIPE=3230;T[1]="EE_CANTCREATEFILE";T[2]="EE_READ";T[3]="EE_WRITE";T[4]="EE_BADCLOSE";T[5]="EE_OUTOFMEMORY";T[6]="EE_DELETE";T[7]="EE_LINK";T[9]="EE_EOFERR";T[10]="EE_CANTLOCK";T[11]="EE_CANTUNLOCK";T[12]="EE_DIR";T[13]="EE_STAT";T[14]="EE_CANT_CHSIZE";T[15]="EE_CANT_OPEN_STREAM";T[16]="EE_GETWD";T[17]="EE_SETWD";T[18]="EE_LINK_WARNING";T[19]="EE_OPEN_WARNING";T[20]="EE_DISK_FULL";T[21]="EE_CANT_MKDIR";T[22]="EE_UNKNOWN_CHARSET";T[23]="EE_OUT_OF_FILERESOURCES";T[24]="EE_CANT_READLINK";T[25]="EE_CANT_SYMLINK";T[26]="EE_REALPATH";T[27]="EE_SYNC";T[28]="EE_UNKNOWN_COLLATION";T[29]="EE_FILENOTFOUND";T[30]="EE_FILE_NOT_CLOSED";T[31]="EE_CHANGE_OWNERSHIP";T[32]="EE_CHANGE_PERMISSIONS";T[33]="EE_CANT_SEEK";T[34]="EE_CAPACITY_EXCEEDED";T[120]="HA_ERR_KEY_NOT_FOUND";T[121]="HA_ERR_FOUND_DUPP_KEY";T[122]="HA_ERR_INTERNAL_ERROR";T[123]="HA_ERR_RECORD_CHANGED";T[124]="HA_ERR_WRONG_INDEX";T[126]="HA_ERR_CRASHED";T[127]="HA_ERR_WRONG_IN_RECORD";T[128]="HA_ERR_OUT_OF_MEM";T[130]="HA_ERR_NOT_A_TABLE";T[131]="HA_ERR_WRONG_COMMAND";T[132]="HA_ERR_OLD_FILE";T[133]="HA_ERR_NO_ACTIVE_RECORD";T[134]="HA_ERR_RECORD_DELETED";T[135]="HA_ERR_RECORD_FILE_FULL";T[136]="HA_ERR_INDEX_FILE_FULL";T[137]="HA_ERR_END_OF_FILE";T[138]="HA_ERR_UNSUPPORTED";T[139]="HA_ERR_TOO_BIG_ROW";T[140]="HA_WRONG_CREATE_OPTION";T[141]="HA_ERR_FOUND_DUPP_UNIQUE";T[142]="HA_ERR_UNKNOWN_CHARSET";T[143]="HA_ERR_WRONG_MRG_TABLE_DEF";T[144]="HA_ERR_CRASHED_ON_REPAIR";T[145]="HA_ERR_CRASHED_ON_USAGE";T[146]="HA_ERR_LOCK_WAIT_TIMEOUT";T[147]="HA_ERR_LOCK_TABLE_FULL";T[148]="HA_ERR_READ_ONLY_TRANSACTION";T[149]="HA_ERR_LOCK_DEADLOCK";T[150]="HA_ERR_CANNOT_ADD_FOREIGN";T[151]="HA_ERR_NO_REFERENCED_ROW";T[152]="HA_ERR_ROW_IS_REFERENCED";T[153]="HA_ERR_NO_SAVEPOINT";T[154]="HA_ERR_NON_UNIQUE_BLOCK_SIZE";T[155]="HA_ERR_NO_SUCH_TABLE";T[156]="HA_ERR_TABLE_EXIST";T[157]="HA_ERR_NO_CONNECTION";T[158]="HA_ERR_NULL_IN_SPATIAL";T[159]="HA_ERR_TABLE_DEF_CHANGED";T[160]="HA_ERR_NO_PARTITION_FOUND";T[161]="HA_ERR_RBR_LOGGING_FAILED";T[162]="HA_ERR_DROP_INDEX_FK";T[163]="HA_ERR_FOREIGN_DUPLICATE_KEY";T[164]="HA_ERR_TABLE_NEEDS_UPGRADE";T[165]="HA_ERR_TABLE_READONLY";T[166]="HA_ERR_AUTOINC_READ_FAILED";T[167]="HA_ERR_AUTOINC_ERANGE";T[168]="HA_ERR_GENERIC";T[169]="HA_ERR_RECORD_IS_THE_SAME";T[170]="HA_ERR_LOGGING_IMPOSSIBLE";T[171]="HA_ERR_CORRUPT_EVENT";T[172]="HA_ERR_NEW_FILE";T[173]="HA_ERR_ROWS_EVENT_APPLY";T[174]="HA_ERR_INITIALIZATION";T[175]="HA_ERR_FILE_TOO_SHORT";T[176]="HA_ERR_WRONG_CRC";T[177]="HA_ERR_TOO_MANY_CONCURRENT_TRXS";T[178]="HA_ERR_NOT_IN_LOCK_PARTITIONS";T[179]="HA_ERR_INDEX_COL_TOO_LONG";T[180]="HA_ERR_INDEX_CORRUPT";T[181]="HA_ERR_UNDO_REC_TOO_BIG";T[182]="HA_FTS_INVALID_DOCID";T[183]="HA_ERR_TABLE_IN_FK_CHECK";T[184]="HA_ERR_TABLESPACE_EXISTS";T[185]="HA_ERR_TOO_MANY_FIELDS";T[186]="HA_ERR_ROW_IN_WRONG_PARTITION";T[187]="HA_ERR_INNODB_READ_ONLY";T[188]="HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT";T[189]="HA_ERR_TEMP_FILE_WRITE_FAILURE";T[190]="HA_ERR_INNODB_FORCED_RECOVERY";T[191]="HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE";T[192]="HA_ERR_FK_DEPTH_EXCEEDED";T[193]="HA_MISSING_CREATE_OPTION";T[194]="HA_ERR_SE_OUT_OF_MEMORY";T[195]="HA_ERR_TABLE_CORRUPT";T[196]="HA_ERR_QUERY_INTERRUPTED";T[197]="HA_ERR_TABLESPACE_MISSING";T[198]="HA_ERR_TABLESPACE_IS_NOT_EMPTY";T[199]="HA_ERR_WRONG_FILE_NAME";T[200]="HA_ERR_NOT_ALLOWED_COMMAND";T[201]="HA_ERR_COMPUTE_FAILED";T[1000]="ER_HASHCHK";T[1001]="ER_NISAMCHK";T[1002]="ER_NO";T[1003]="ER_YES";T[1004]="ER_CANT_CREATE_FILE";T[1005]="ER_CANT_CREATE_TABLE";T[1006]="ER_CANT_CREATE_DB";T[1007]="ER_DB_CREATE_EXISTS";T[1008]="ER_DB_DROP_EXISTS";T[1009]="ER_DB_DROP_DELETE";T[1010]="ER_DB_DROP_RMDIR";T[1011]="ER_CANT_DELETE_FILE";T[1012]="ER_CANT_FIND_SYSTEM_REC";T[1013]="ER_CANT_GET_STAT";T[1014]="ER_CANT_GET_WD";T[1015]="ER_CANT_LOCK";T[1016]="ER_CANT_OPEN_FILE";T[1017]="ER_FILE_NOT_FOUND";T[1018]="ER_CANT_READ_DIR";T[1019]="ER_CANT_SET_WD";T[1020]="ER_CHECKREAD";T[1021]="ER_DISK_FULL";T[1022]="ER_DUP_KEY";T[1023]="ER_ERROR_ON_CLOSE";T[1024]="ER_ERROR_ON_READ";T[1025]="ER_ERROR_ON_RENAME";T[1026]="ER_ERROR_ON_WRITE";T[1027]="ER_FILE_USED";T[1028]="ER_FILSORT_ABORT";T[1029]="ER_FORM_NOT_FOUND";T[1030]="ER_GET_ERRNO";T[1031]="ER_ILLEGAL_HA";T[1032]="ER_KEY_NOT_FOUND";T[1033]="ER_NOT_FORM_FILE";T[1034]="ER_NOT_KEYFILE";T[1035]="ER_OLD_KEYFILE";T[1036]="ER_OPEN_AS_READONLY";T[1037]="ER_OUTOFMEMORY";T[1038]="ER_OUT_OF_SORTMEMORY";T[1039]="ER_UNEXPECTED_EOF";T[1040]="ER_CON_COUNT_ERROR";T[1041]="ER_OUT_OF_RESOURCES";T[1042]="ER_BAD_HOST_ERROR";T[1043]="ER_HANDSHAKE_ERROR";T[1044]="ER_DBACCESS_DENIED_ERROR";T[1045]="ER_ACCESS_DENIED_ERROR";T[1046]="ER_NO_DB_ERROR";T[1047]="ER_UNKNOWN_COM_ERROR";T[1048]="ER_BAD_NULL_ERROR";T[1049]="ER_BAD_DB_ERROR";T[1050]="ER_TABLE_EXISTS_ERROR";T[1051]="ER_BAD_TABLE_ERROR";T[1052]="ER_NON_UNIQ_ERROR";T[1053]="ER_SERVER_SHUTDOWN";T[1054]="ER_BAD_FIELD_ERROR";T[1055]="ER_WRONG_FIELD_WITH_GROUP";T[1056]="ER_WRONG_GROUP_FIELD";T[1057]="ER_WRONG_SUM_SELECT";T[1058]="ER_WRONG_VALUE_COUNT";T[1059]="ER_TOO_LONG_IDENT";T[1060]="ER_DUP_FIELDNAME";T[1061]="ER_DUP_KEYNAME";T[1062]="ER_DUP_ENTRY";T[1063]="ER_WRONG_FIELD_SPEC";T[1064]="ER_PARSE_ERROR";T[1065]="ER_EMPTY_QUERY";T[1066]="ER_NONUNIQ_TABLE";T[1067]="ER_INVALID_DEFAULT";T[1068]="ER_MULTIPLE_PRI_KEY";T[1069]="ER_TOO_MANY_KEYS";T[1070]="ER_TOO_MANY_KEY_PARTS";T[1071]="ER_TOO_LONG_KEY";T[1072]="ER_KEY_COLUMN_DOES_NOT_EXITS";T[1073]="ER_BLOB_USED_AS_KEY";T[1074]="ER_TOO_BIG_FIELDLENGTH";T[1075]="ER_WRONG_AUTO_KEY";T[1076]="ER_READY";T[1077]="ER_NORMAL_SHUTDOWN";T[1078]="ER_GOT_SIGNAL";T[1079]="ER_SHUTDOWN_COMPLETE";T[1080]="ER_FORCING_CLOSE";T[1081]="ER_IPSOCK_ERROR";T[1082]="ER_NO_SUCH_INDEX";T[1083]="ER_WRONG_FIELD_TERMINATORS";T[1084]="ER_BLOBS_AND_NO_TERMINATED";T[1085]="ER_TEXTFILE_NOT_READABLE";T[1086]="ER_FILE_EXISTS_ERROR";T[1087]="ER_LOAD_INFO";T[1088]="ER_ALTER_INFO";T[1089]="ER_WRONG_SUB_KEY";T[1090]="ER_CANT_REMOVE_ALL_FIELDS";T[1091]="ER_CANT_DROP_FIELD_OR_KEY";T[1092]="ER_INSERT_INFO";T[1093]="ER_UPDATE_TABLE_USED";T[1094]="ER_NO_SUCH_THREAD";T[1095]="ER_KILL_DENIED_ERROR";T[1096]="ER_NO_TABLES_USED";T[1097]="ER_TOO_BIG_SET";T[1098]="ER_NO_UNIQUE_LOGFILE";T[1099]="ER_TABLE_NOT_LOCKED_FOR_WRITE";T[1100]="ER_TABLE_NOT_LOCKED";T[1101]="ER_BLOB_CANT_HAVE_DEFAULT";T[1102]="ER_WRONG_DB_NAME";T[1103]="ER_WRONG_TABLE_NAME";T[1104]="ER_TOO_BIG_SELECT";T[1105]="ER_UNKNOWN_ERROR";T[1106]="ER_UNKNOWN_PROCEDURE";T[1107]="ER_WRONG_PARAMCOUNT_TO_PROCEDURE";T[1108]="ER_WRONG_PARAMETERS_TO_PROCEDURE";T[1109]="ER_UNKNOWN_TABLE";T[1110]="ER_FIELD_SPECIFIED_TWICE";T[1111]="ER_INVALID_GROUP_FUNC_USE";T[1112]="ER_UNSUPPORTED_EXTENSION";T[1113]="ER_TABLE_MUST_HAVE_COLUMNS";T[1114]="ER_RECORD_FILE_FULL";T[1115]="ER_UNKNOWN_CHARACTER_SET";T[1116]="ER_TOO_MANY_TABLES";T[1117]="ER_TOO_MANY_FIELDS";T[1118]="ER_TOO_BIG_ROWSIZE";T[1119]="ER_STACK_OVERRUN";T[1120]="ER_WRONG_OUTER_JOIN";T[1121]="ER_NULL_COLUMN_IN_INDEX";T[1122]="ER_CANT_FIND_UDF";T[1123]="ER_CANT_INITIALIZE_UDF";T[1124]="ER_UDF_NO_PATHS";T[1125]="ER_UDF_EXISTS";T[1126]="ER_CANT_OPEN_LIBRARY";T[1127]="ER_CANT_FIND_DL_ENTRY";T[1128]="ER_FUNCTION_NOT_DEFINED";T[1129]="ER_HOST_IS_BLOCKED";T[1130]="ER_HOST_NOT_PRIVILEGED";T[1131]="ER_PASSWORD_ANONYMOUS_USER";T[1132]="ER_PASSWORD_NOT_ALLOWED";T[1133]="ER_PASSWORD_NO_MATCH";T[1134]="ER_UPDATE_INFO";T[1135]="ER_CANT_CREATE_THREAD";T[1136]="ER_WRONG_VALUE_COUNT_ON_ROW";T[1137]="ER_CANT_REOPEN_TABLE";T[1138]="ER_INVALID_USE_OF_NULL";T[1139]="ER_REGEXP_ERROR";T[1140]="ER_MIX_OF_GROUP_FUNC_AND_FIELDS";T[1141]="ER_NONEXISTING_GRANT";T[1142]="ER_TABLEACCESS_DENIED_ERROR";T[1143]="ER_COLUMNACCESS_DENIED_ERROR";T[1144]="ER_ILLEGAL_GRANT_FOR_TABLE";T[1145]="ER_GRANT_WRONG_HOST_OR_USER";T[1146]="ER_NO_SUCH_TABLE";T[1147]="ER_NONEXISTING_TABLE_GRANT";T[1148]="ER_NOT_ALLOWED_COMMAND";T[1149]="ER_SYNTAX_ERROR";T[1150]="ER_DELAYED_CANT_CHANGE_LOCK";T[1151]="ER_TOO_MANY_DELAYED_THREADS";T[1152]="ER_ABORTING_CONNECTION";T[1153]="ER_NET_PACKET_TOO_LARGE";T[1154]="ER_NET_READ_ERROR_FROM_PIPE";T[1155]="ER_NET_FCNTL_ERROR";T[1156]="ER_NET_PACKETS_OUT_OF_ORDER";T[1157]="ER_NET_UNCOMPRESS_ERROR";T[1158]="ER_NET_READ_ERROR";T[1159]="ER_NET_READ_INTERRUPTED";T[1160]="ER_NET_ERROR_ON_WRITE";T[1161]="ER_NET_WRITE_INTERRUPTED";T[1162]="ER_TOO_LONG_STRING";T[1163]="ER_TABLE_CANT_HANDLE_BLOB";T[1164]="ER_TABLE_CANT_HANDLE_AUTO_INCREMENT";T[1165]="ER_DELAYED_INSERT_TABLE_LOCKED";T[1166]="ER_WRONG_COLUMN_NAME";T[1167]="ER_WRONG_KEY_COLUMN";T[1168]="ER_WRONG_MRG_TABLE";T[1169]="ER_DUP_UNIQUE";T[1170]="ER_BLOB_KEY_WITHOUT_LENGTH";T[1171]="ER_PRIMARY_CANT_HAVE_NULL";T[1172]="ER_TOO_MANY_ROWS";T[1173]="ER_REQUIRES_PRIMARY_KEY";T[1174]="ER_NO_RAID_COMPILED";T[1175]="ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE";T[1176]="ER_KEY_DOES_NOT_EXITS";T[1177]="ER_CHECK_NO_SUCH_TABLE";T[1178]="ER_CHECK_NOT_IMPLEMENTED";T[1179]="ER_CANT_DO_THIS_DURING_AN_TRANSACTION";T[1180]="ER_ERROR_DURING_COMMIT";T[1181]="ER_ERROR_DURING_ROLLBACK";T[1182]="ER_ERROR_DURING_FLUSH_LOGS";T[1183]="ER_ERROR_DURING_CHECKPOINT";T[1184]="ER_NEW_ABORTING_CONNECTION";T[1185]="ER_DUMP_NOT_IMPLEMENTED";T[1186]="ER_FLUSH_MASTER_BINLOG_CLOSED";T[1187]="ER_INDEX_REBUILD";T[1188]="ER_MASTER";T[1189]="ER_MASTER_NET_READ";T[1190]="ER_MASTER_NET_WRITE";T[1191]="ER_FT_MATCHING_KEY_NOT_FOUND";T[1192]="ER_LOCK_OR_ACTIVE_TRANSACTION";T[1193]="ER_UNKNOWN_SYSTEM_VARIABLE";T[1194]="ER_CRASHED_ON_USAGE";T[1195]="ER_CRASHED_ON_REPAIR";T[1196]="ER_WARNING_NOT_COMPLETE_ROLLBACK";T[1197]="ER_TRANS_CACHE_FULL";T[1198]="ER_SLAVE_MUST_STOP";T[1199]="ER_SLAVE_NOT_RUNNING";T[1200]="ER_BAD_SLAVE";T[1201]="ER_MASTER_INFO";T[1202]="ER_SLAVE_THREAD";T[1203]="ER_TOO_MANY_USER_CONNECTIONS";T[1204]="ER_SET_CONSTANTS_ONLY";T[1205]="ER_LOCK_WAIT_TIMEOUT";T[1206]="ER_LOCK_TABLE_FULL";T[1207]="ER_READ_ONLY_TRANSACTION";T[1208]="ER_DROP_DB_WITH_READ_LOCK";T[1209]="ER_CREATE_DB_WITH_READ_LOCK";T[1210]="ER_WRONG_ARGUMENTS";T[1211]="ER_NO_PERMISSION_TO_CREATE_USER";T[1212]="ER_UNION_TABLES_IN_DIFFERENT_DIR";T[1213]="ER_LOCK_DEADLOCK";T[1214]="ER_TABLE_CANT_HANDLE_FT";T[1215]="ER_CANNOT_ADD_FOREIGN";T[1216]="ER_NO_REFERENCED_ROW";T[1217]="ER_ROW_IS_REFERENCED";T[1218]="ER_CONNECT_TO_MASTER";T[1219]="ER_QUERY_ON_MASTER";T[1220]="ER_ERROR_WHEN_EXECUTING_COMMAND";T[1221]="ER_WRONG_USAGE";T[1222]="ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT";T[1223]="ER_CANT_UPDATE_WITH_READLOCK";T[1224]="ER_MIXING_NOT_ALLOWED";T[1225]="ER_DUP_ARGUMENT";T[1226]="ER_USER_LIMIT_REACHED";T[1227]="ER_SPECIFIC_ACCESS_DENIED_ERROR";T[1228]="ER_LOCAL_VARIABLE";T[1229]="ER_GLOBAL_VARIABLE";T[1230]="ER_NO_DEFAULT";T[1231]="ER_WRONG_VALUE_FOR_VAR";T[1232]="ER_WRONG_TYPE_FOR_VAR";T[1233]="ER_VAR_CANT_BE_READ";T[1234]="ER_CANT_USE_OPTION_HERE";T[1235]="ER_NOT_SUPPORTED_YET";T[1236]="ER_MASTER_FATAL_ERROR_READING_BINLOG";T[1237]="ER_SLAVE_IGNORED_TABLE";T[1238]="ER_INCORRECT_GLOBAL_LOCAL_VAR";T[1239]="ER_WRONG_FK_DEF";T[1240]="ER_KEY_REF_DO_NOT_MATCH_TABLE_REF";T[1241]="ER_OPERAND_COLUMNS";T[1242]="ER_SUBQUERY_NO_1_ROW";T[1243]="ER_UNKNOWN_STMT_HANDLER";T[1244]="ER_CORRUPT_HELP_DB";T[1245]="ER_CYCLIC_REFERENCE";T[1246]="ER_AUTO_CONVERT";T[1247]="ER_ILLEGAL_REFERENCE";T[1248]="ER_DERIVED_MUST_HAVE_ALIAS";T[1249]="ER_SELECT_REDUCED";T[1250]="ER_TABLENAME_NOT_ALLOWED_HERE";T[1251]="ER_NOT_SUPPORTED_AUTH_MODE";T[1252]="ER_SPATIAL_CANT_HAVE_NULL";T[1253]="ER_COLLATION_CHARSET_MISMATCH";T[1254]="ER_SLAVE_WAS_RUNNING";T[1255]="ER_SLAVE_WAS_NOT_RUNNING";T[1256]="ER_TOO_BIG_FOR_UNCOMPRESS";T[1257]="ER_ZLIB_Z_MEM_ERROR";T[1258]="ER_ZLIB_Z_BUF_ERROR";T[1259]="ER_ZLIB_Z_DATA_ERROR";T[1260]="ER_CUT_VALUE_GROUP_CONCAT";T[1261]="ER_WARN_TOO_FEW_RECORDS";T[1262]="ER_WARN_TOO_MANY_RECORDS";T[1263]="ER_WARN_NULL_TO_NOTNULL";T[1264]="ER_WARN_DATA_OUT_OF_RANGE";T[1265]="WARN_DATA_TRUNCATED";T[1266]="ER_WARN_USING_OTHER_HANDLER";T[1267]="ER_CANT_AGGREGATE_2COLLATIONS";T[1268]="ER_DROP_USER";T[1269]="ER_REVOKE_GRANTS";T[1270]="ER_CANT_AGGREGATE_3COLLATIONS";T[1271]="ER_CANT_AGGREGATE_NCOLLATIONS";T[1272]="ER_VARIABLE_IS_NOT_STRUCT";T[1273]="ER_UNKNOWN_COLLATION";T[1274]="ER_SLAVE_IGNORED_SSL_PARAMS";T[1275]="ER_SERVER_IS_IN_SECURE_AUTH_MODE";T[1276]="ER_WARN_FIELD_RESOLVED";T[1277]="ER_BAD_SLAVE_UNTIL_COND";T[1278]="ER_MISSING_SKIP_SLAVE";T[1279]="ER_UNTIL_COND_IGNORED";T[1280]="ER_WRONG_NAME_FOR_INDEX";T[1281]="ER_WRONG_NAME_FOR_CATALOG";T[1282]="ER_WARN_QC_RESIZE";T[1283]="ER_BAD_FT_COLUMN";T[1284]="ER_UNKNOWN_KEY_CACHE";T[1285]="ER_WARN_HOSTNAME_WONT_WORK";T[1286]="ER_UNKNOWN_STORAGE_ENGINE";T[1287]="ER_WARN_DEPRECATED_SYNTAX";T[1288]="ER_NON_UPDATABLE_TABLE";T[1289]="ER_FEATURE_DISABLED";T[1290]="ER_OPTION_PREVENTS_STATEMENT";T[1291]="ER_DUPLICATED_VALUE_IN_TYPE";T[1292]="ER_TRUNCATED_WRONG_VALUE";T[1293]="ER_TOO_MUCH_AUTO_TIMESTAMP_COLS";T[1294]="ER_INVALID_ON_UPDATE";T[1295]="ER_UNSUPPORTED_PS";T[1296]="ER_GET_ERRMSG";T[1297]="ER_GET_TEMPORARY_ERRMSG";T[1298]="ER_UNKNOWN_TIME_ZONE";T[1299]="ER_WARN_INVALID_TIMESTAMP";T[1300]="ER_INVALID_CHARACTER_STRING";T[1301]="ER_WARN_ALLOWED_PACKET_OVERFLOWED";T[1302]="ER_CONFLICTING_DECLARATIONS";T[1303]="ER_SP_NO_RECURSIVE_CREATE";T[1304]="ER_SP_ALREADY_EXISTS";T[1305]="ER_SP_DOES_NOT_EXIST";T[1306]="ER_SP_DROP_FAILED";T[1307]="ER_SP_STORE_FAILED";T[1308]="ER_SP_LILABEL_MISMATCH";T[1309]="ER_SP_LABEL_REDEFINE";T[1310]="ER_SP_LABEL_MISMATCH";T[1311]="ER_SP_UNINIT_VAR";T[1312]="ER_SP_BADSELECT";T[1313]="ER_SP_BADRETURN";T[1314]="ER_SP_BADSTATEMENT";T[1315]="ER_UPDATE_LOG_DEPRECATED_IGNORED";T[1316]="ER_UPDATE_LOG_DEPRECATED_TRANSLATED";T[1317]="ER_QUERY_INTERRUPTED";T[1318]="ER_SP_WRONG_NO_OF_ARGS";T[1319]="ER_SP_COND_MISMATCH";T[1320]="ER_SP_NORETURN";T[1321]="ER_SP_NORETURNEND";T[1322]="ER_SP_BAD_CURSOR_QUERY";T[1323]="ER_SP_BAD_CURSOR_SELECT";T[1324]="ER_SP_CURSOR_MISMATCH";T[1325]="ER_SP_CURSOR_ALREADY_OPEN";T[1326]="ER_SP_CURSOR_NOT_OPEN";T[1327]="ER_SP_UNDECLARED_VAR";T[1328]="ER_SP_WRONG_NO_OF_FETCH_ARGS";T[1329]="ER_SP_FETCH_NO_DATA";T[1330]="ER_SP_DUP_PARAM";T[1331]="ER_SP_DUP_VAR";T[1332]="ER_SP_DUP_COND";T[1333]="ER_SP_DUP_CURS";T[1334]="ER_SP_CANT_ALTER";T[1335]="ER_SP_SUBSELECT_NYI";T[1336]="ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG";T[1337]="ER_SP_VARCOND_AFTER_CURSHNDLR";T[1338]="ER_SP_CURSOR_AFTER_HANDLER";T[1339]="ER_SP_CASE_NOT_FOUND";T[1340]="ER_FPARSER_TOO_BIG_FILE";T[1341]="ER_FPARSER_BAD_HEADER";T[1342]="ER_FPARSER_EOF_IN_COMMENT";T[1343]="ER_FPARSER_ERROR_IN_PARAMETER";T[1344]="ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER";T[1345]="ER_VIEW_NO_EXPLAIN";T[1346]="ER_FRM_UNKNOWN_TYPE";T[1347]="ER_WRONG_OBJECT";T[1348]="ER_NONUPDATEABLE_COLUMN";T[1349]="ER_VIEW_SELECT_DERIVED";T[1350]="ER_VIEW_SELECT_CLAUSE";T[1351]="ER_VIEW_SELECT_VARIABLE";T[1352]="ER_VIEW_SELECT_TMPTABLE";T[1353]="ER_VIEW_WRONG_LIST";T[1354]="ER_WARN_VIEW_MERGE";T[1355]="ER_WARN_VIEW_WITHOUT_KEY";T[1356]="ER_VIEW_INVALID";T[1357]="ER_SP_NO_DROP_SP";T[1358]="ER_SP_GOTO_IN_HNDLR";T[1359]="ER_TRG_ALREADY_EXISTS";T[1360]="ER_TRG_DOES_NOT_EXIST";T[1361]="ER_TRG_ON_VIEW_OR_TEMP_TABLE";T[1362]="ER_TRG_CANT_CHANGE_ROW";T[1363]="ER_TRG_NO_SUCH_ROW_IN_TRG";T[1364]="ER_NO_DEFAULT_FOR_FIELD";T[1365]="ER_DIVISION_BY_ZERO";T[1366]="ER_TRUNCATED_WRONG_VALUE_FOR_FIELD";T[1367]="ER_ILLEGAL_VALUE_FOR_TYPE";T[1368]="ER_VIEW_NONUPD_CHECK";T[1369]="ER_VIEW_CHECK_FAILED";T[1370]="ER_PROCACCESS_DENIED_ERROR";T[1371]="ER_RELAY_LOG_FAIL";T[1372]="ER_PASSWD_LENGTH";T[1373]="ER_UNKNOWN_TARGET_BINLOG";T[1374]="ER_IO_ERR_LOG_INDEX_READ";T[1375]="ER_BINLOG_PURGE_PROHIBITED";T[1376]="ER_FSEEK_FAIL";T[1377]="ER_BINLOG_PURGE_FATAL_ERR";T[1378]="ER_LOG_IN_USE";T[1379]="ER_LOG_PURGE_UNKNOWN_ERR";T[1380]="ER_RELAY_LOG_INIT";T[1381]="ER_NO_BINARY_LOGGING";T[1382]="ER_RESERVED_SYNTAX";T[1383]="ER_WSAS_FAILED";T[1384]="ER_DIFF_GROUPS_PROC";T[1385]="ER_NO_GROUP_FOR_PROC";T[1386]="ER_ORDER_WITH_PROC";T[1387]="ER_LOGGING_PROHIBIT_CHANGING_OF";T[1388]="ER_NO_FILE_MAPPING";T[1389]="ER_WRONG_MAGIC";T[1390]="ER_PS_MANY_PARAM";T[1391]="ER_KEY_PART_0";T[1392]="ER_VIEW_CHECKSUM";T[1393]="ER_VIEW_MULTIUPDATE";T[1394]="ER_VIEW_NO_INSERT_FIELD_LIST";T[1395]="ER_VIEW_DELETE_MERGE_VIEW";T[1396]="ER_CANNOT_USER";T[1397]="ER_XAER_NOTA";T[1398]="ER_XAER_INVAL";T[1399]="ER_XAER_RMFAIL";T[1400]="ER_XAER_OUTSIDE";T[1401]="ER_XAER_RMERR";T[1402]="ER_XA_RBROLLBACK";T[1403]="ER_NONEXISTING_PROC_GRANT";T[1404]="ER_PROC_AUTO_GRANT_FAIL";T[1405]="ER_PROC_AUTO_REVOKE_FAIL";T[1406]="ER_DATA_TOO_LONG";T[1407]="ER_SP_BAD_SQLSTATE";T[1408]="ER_STARTUP";T[1409]="ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR";T[1410]="ER_CANT_CREATE_USER_WITH_GRANT";T[1411]="ER_WRONG_VALUE_FOR_TYPE";T[1412]="ER_TABLE_DEF_CHANGED";T[1413]="ER_SP_DUP_HANDLER";T[1414]="ER_SP_NOT_VAR_ARG";T[1415]="ER_SP_NO_RETSET";T[1416]="ER_CANT_CREATE_GEOMETRY_OBJECT";T[1417]="ER_FAILED_ROUTINE_BREAK_BINLOG";T[1418]="ER_BINLOG_UNSAFE_ROUTINE";T[1419]="ER_BINLOG_CREATE_ROUTINE_NEED_SUPER";T[1420]="ER_EXEC_STMT_WITH_OPEN_CURSOR";T[1421]="ER_STMT_HAS_NO_OPEN_CURSOR";T[1422]="ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG";T[1423]="ER_NO_DEFAULT_FOR_VIEW_FIELD";T[1424]="ER_SP_NO_RECURSION";T[1425]="ER_TOO_BIG_SCALE";T[1426]="ER_TOO_BIG_PRECISION";T[1427]="ER_M_BIGGER_THAN_D";T[1428]="ER_WRONG_LOCK_OF_SYSTEM_TABLE";T[1429]="ER_CONNECT_TO_FOREIGN_DATA_SOURCE";T[1430]="ER_QUERY_ON_FOREIGN_DATA_SOURCE";T[1431]="ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST";T[1432]="ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE";T[1433]="ER_FOREIGN_DATA_STRING_INVALID";T[1434]="ER_CANT_CREATE_FEDERATED_TABLE";T[1435]="ER_TRG_IN_WRONG_SCHEMA";T[1436]="ER_STACK_OVERRUN_NEED_MORE";T[1437]="ER_TOO_LONG_BODY";T[1438]="ER_WARN_CANT_DROP_DEFAULT_KEYCACHE";T[1439]="ER_TOO_BIG_DISPLAYWIDTH";T[1440]="ER_XAER_DUPID";T[1441]="ER_DATETIME_FUNCTION_OVERFLOW";T[1442]="ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG";T[1443]="ER_VIEW_PREVENT_UPDATE";T[1444]="ER_PS_NO_RECURSION";T[1445]="ER_SP_CANT_SET_AUTOCOMMIT";T[1446]="ER_MALFORMED_DEFINER";T[1447]="ER_VIEW_FRM_NO_USER";T[1448]="ER_VIEW_OTHER_USER";T[1449]="ER_NO_SUCH_USER";T[1450]="ER_FORBID_SCHEMA_CHANGE";T[1451]="ER_ROW_IS_REFERENCED_2";T[1452]="ER_NO_REFERENCED_ROW_2";T[1453]="ER_SP_BAD_VAR_SHADOW";T[1454]="ER_TRG_NO_DEFINER";T[1455]="ER_OLD_FILE_FORMAT";T[1456]="ER_SP_RECURSION_LIMIT";T[1457]="ER_SP_PROC_TABLE_CORRUPT";T[1458]="ER_SP_WRONG_NAME";T[1459]="ER_TABLE_NEEDS_UPGRADE";T[1460]="ER_SP_NO_AGGREGATE";T[1461]="ER_MAX_PREPARED_STMT_COUNT_REACHED";T[1462]="ER_VIEW_RECURSIVE";T[1463]="ER_NON_GROUPING_FIELD_USED";T[1464]="ER_TABLE_CANT_HANDLE_SPKEYS";T[1465]="ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA";T[1466]="ER_REMOVED_SPACES";T[1467]="ER_AUTOINC_READ_FAILED";T[1468]="ER_USERNAME";T[1469]="ER_HOSTNAME";T[1470]="ER_WRONG_STRING_LENGTH";T[1471]="ER_NON_INSERTABLE_TABLE";T[1472]="ER_ADMIN_WRONG_MRG_TABLE";T[1473]="ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT";T[1474]="ER_NAME_BECOMES_EMPTY";T[1475]="ER_AMBIGUOUS_FIELD_TERM";T[1476]="ER_FOREIGN_SERVER_EXISTS";T[1477]="ER_FOREIGN_SERVER_DOESNT_EXIST";T[1478]="ER_ILLEGAL_HA_CREATE_OPTION";T[1479]="ER_PARTITION_REQUIRES_VALUES_ERROR";T[1480]="ER_PARTITION_WRONG_VALUES_ERROR";T[1481]="ER_PARTITION_MAXVALUE_ERROR";T[1482]="ER_PARTITION_SUBPARTITION_ERROR";T[1483]="ER_PARTITION_SUBPART_MIX_ERROR";T[1484]="ER_PARTITION_WRONG_NO_PART_ERROR";T[1485]="ER_PARTITION_WRONG_NO_SUBPART_ERROR";T[1486]="ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR";T[1487]="ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR";T[1488]="ER_FIELD_NOT_FOUND_PART_ERROR";T[1489]="ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR";T[1490]="ER_INCONSISTENT_PARTITION_INFO_ERROR";T[1491]="ER_PARTITION_FUNC_NOT_ALLOWED_ERROR";T[1492]="ER_PARTITIONS_MUST_BE_DEFINED_ERROR";T[1493]="ER_RANGE_NOT_INCREASING_ERROR";T[1494]="ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR";T[1495]="ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR";T[1496]="ER_PARTITION_ENTRY_ERROR";T[1497]="ER_MIX_HANDLER_ERROR";T[1498]="ER_PARTITION_NOT_DEFINED_ERROR";T[1499]="ER_TOO_MANY_PARTITIONS_ERROR";T[1500]="ER_SUBPARTITION_ERROR";T[1501]="ER_CANT_CREATE_HANDLER_FILE";T[1502]="ER_BLOB_FIELD_IN_PART_FUNC_ERROR";T[1503]="ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF";T[1504]="ER_NO_PARTS_ERROR";T[1505]="ER_PARTITION_MGMT_ON_NONPARTITIONED";T[1506]="ER_FOREIGN_KEY_ON_PARTITIONED";T[1507]="ER_DROP_PARTITION_NON_EXISTENT";T[1508]="ER_DROP_LAST_PARTITION";T[1509]="ER_COALESCE_ONLY_ON_HASH_PARTITION";T[1510]="ER_REORG_HASH_ONLY_ON_SAME_NO";T[1511]="ER_REORG_NO_PARAM_ERROR";T[1512]="ER_ONLY_ON_RANGE_LIST_PARTITION";T[1513]="ER_ADD_PARTITION_SUBPART_ERROR";T[1514]="ER_ADD_PARTITION_NO_NEW_PARTITION";T[1515]="ER_COALESCE_PARTITION_NO_PARTITION";T[1516]="ER_REORG_PARTITION_NOT_EXIST";T[1517]="ER_SAME_NAME_PARTITION";T[1518]="ER_NO_BINLOG_ERROR";T[1519]="ER_CONSECUTIVE_REORG_PARTITIONS";T[1520]="ER_REORG_OUTSIDE_RANGE";T[1521]="ER_PARTITION_FUNCTION_FAILURE";T[1522]="ER_PART_STATE_ERROR";T[1523]="ER_LIMITED_PART_RANGE";T[1524]="ER_PLUGIN_IS_NOT_LOADED";T[1525]="ER_WRONG_VALUE";T[1526]="ER_NO_PARTITION_FOR_GIVEN_VALUE";T[1527]="ER_FILEGROUP_OPTION_ONLY_ONCE";T[1528]="ER_CREATE_FILEGROUP_FAILED";T[1529]="ER_DROP_FILEGROUP_FAILED";T[1530]="ER_TABLESPACE_AUTO_EXTEND_ERROR";T[1531]="ER_WRONG_SIZE_NUMBER";T[1532]="ER_SIZE_OVERFLOW_ERROR";T[1533]="ER_ALTER_FILEGROUP_FAILED";T[1534]="ER_BINLOG_ROW_LOGGING_FAILED";T[1535]="ER_BINLOG_ROW_WRONG_TABLE_DEF";T[1536]="ER_BINLOG_ROW_RBR_TO_SBR";T[1537]="ER_EVENT_ALREADY_EXISTS";T[1538]="ER_EVENT_STORE_FAILED";T[1539]="ER_EVENT_DOES_NOT_EXIST";T[1540]="ER_EVENT_CANT_ALTER";T[1541]="ER_EVENT_DROP_FAILED";T[1542]="ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG";T[1543]="ER_EVENT_ENDS_BEFORE_STARTS";T[1544]="ER_EVENT_EXEC_TIME_IN_THE_PAST";T[1545]="ER_EVENT_OPEN_TABLE_FAILED";T[1546]="ER_EVENT_NEITHER_M_EXPR_NOR_M_AT";T[1547]="ER_COL_COUNT_DOESNT_MATCH_CORRUPTED";T[1548]="ER_CANNOT_LOAD_FROM_TABLE";T[1549]="ER_EVENT_CANNOT_DELETE";T[1550]="ER_EVENT_COMPILE_ERROR";T[1551]="ER_EVENT_SAME_NAME";T[1552]="ER_EVENT_DATA_TOO_LONG";T[1553]="ER_DROP_INDEX_FK";T[1554]="ER_WARN_DEPRECATED_SYNTAX_WITH_VER";T[1555]="ER_CANT_WRITE_LOCK_LOG_TABLE";T[1556]="ER_CANT_LOCK_LOG_TABLE";T[1557]="ER_FOREIGN_DUPLICATE_KEY";T[1558]="ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE";T[1559]="ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR";T[1560]="ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT";T[1561]="ER_NDB_CANT_SWITCH_BINLOG_FORMAT";T[1562]="ER_PARTITION_NO_TEMPORARY";T[1563]="ER_PARTITION_CONST_DOMAIN_ERROR";T[1564]="ER_PARTITION_FUNCTION_IS_NOT_ALLOWED";T[1565]="ER_DDL_LOG_ERROR";T[1566]="ER_NULL_IN_VALUES_LESS_THAN";T[1567]="ER_WRONG_PARTITION_NAME";T[1568]="ER_CANT_CHANGE_TX_CHARACTERISTICS";T[1569]="ER_DUP_ENTRY_AUTOINCREMENT_CASE";T[1570]="ER_EVENT_MODIFY_QUEUE_ERROR";T[1571]="ER_EVENT_SET_VAR_ERROR";T[1572]="ER_PARTITION_MERGE_ERROR";T[1573]="ER_CANT_ACTIVATE_LOG";T[1574]="ER_RBR_NOT_AVAILABLE";T[1575]="ER_BASE64_DECODE_ERROR";T[1576]="ER_EVENT_RECURSION_FORBIDDEN";T[1577]="ER_EVENTS_DB_ERROR";T[1578]="ER_ONLY_INTEGERS_ALLOWED";T[1579]="ER_UNSUPORTED_LOG_ENGINE";T[1580]="ER_BAD_LOG_STATEMENT";T[1581]="ER_CANT_RENAME_LOG_TABLE";T[1582]="ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT";T[1583]="ER_WRONG_PARAMETERS_TO_NATIVE_FCT";T[1584]="ER_WRONG_PARAMETERS_TO_STORED_FCT";T[1585]="ER_NATIVE_FCT_NAME_COLLISION";T[1586]="ER_DUP_ENTRY_WITH_KEY_NAME";T[1587]="ER_BINLOG_PURGE_EMFILE";T[1588]="ER_EVENT_CANNOT_CREATE_IN_THE_PAST";T[1589]="ER_EVENT_CANNOT_ALTER_IN_THE_PAST";T[1590]="ER_SLAVE_INCIDENT";T[1591]="ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT";T[1592]="ER_BINLOG_UNSAFE_STATEMENT";T[1593]="ER_SLAVE_FATAL_ERROR";T[1594]="ER_SLAVE_RELAY_LOG_READ_FAILURE";T[1595]="ER_SLAVE_RELAY_LOG_WRITE_FAILURE";T[1596]="ER_SLAVE_CREATE_EVENT_FAILURE";T[1597]="ER_SLAVE_MASTER_COM_FAILURE";T[1598]="ER_BINLOG_LOGGING_IMPOSSIBLE";T[1599]="ER_VIEW_NO_CREATION_CTX";T[1600]="ER_VIEW_INVALID_CREATION_CTX";T[1601]="ER_SR_INVALID_CREATION_CTX";T[1602]="ER_TRG_CORRUPTED_FILE";T[1603]="ER_TRG_NO_CREATION_CTX";T[1604]="ER_TRG_INVALID_CREATION_CTX";T[1605]="ER_EVENT_INVALID_CREATION_CTX";T[1606]="ER_TRG_CANT_OPEN_TABLE";T[1607]="ER_CANT_CREATE_SROUTINE";T[1608]="ER_NEVER_USED";T[1609]="ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT";T[1610]="ER_SLAVE_CORRUPT_EVENT";T[1611]="ER_LOAD_DATA_INVALID_COLUMN";T[1612]="ER_LOG_PURGE_NO_FILE";T[1613]="ER_XA_RBTIMEOUT";T[1614]="ER_XA_RBDEADLOCK";T[1615]="ER_NEED_REPREPARE";T[1616]="ER_DELAYED_NOT_SUPPORTED";T[1617]="WARN_NO_MASTER_INFO";T[1618]="WARN_OPTION_IGNORED";T[1619]="ER_PLUGIN_DELETE_BUILTIN";T[1620]="WARN_PLUGIN_BUSY";T[1621]="ER_VARIABLE_IS_READONLY";T[1622]="ER_WARN_ENGINE_TRANSACTION_ROLLBACK";T[1623]="ER_SLAVE_HEARTBEAT_FAILURE";T[1624]="ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE";T[1625]="ER_NDB_REPLICATION_SCHEMA_ERROR";T[1626]="ER_CONFLICT_FN_PARSE_ERROR";T[1627]="ER_EXCEPTIONS_WRITE_ERROR";T[1628]="ER_TOO_LONG_TABLE_COMMENT";T[1629]="ER_TOO_LONG_FIELD_COMMENT";T[1630]="ER_FUNC_INEXISTENT_NAME_COLLISION";T[1631]="ER_DATABASE_NAME";T[1632]="ER_TABLE_NAME";T[1633]="ER_PARTITION_NAME";T[1634]="ER_SUBPARTITION_NAME";T[1635]="ER_TEMPORARY_NAME";T[1636]="ER_RENAMED_NAME";T[1637]="ER_TOO_MANY_CONCURRENT_TRXS";T[1638]="WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED";T[1639]="ER_DEBUG_SYNC_TIMEOUT";T[1640]="ER_DEBUG_SYNC_HIT_LIMIT";T[1641]="ER_DUP_SIGNAL_SET";T[1642]="ER_SIGNAL_WARN";T[1643]="ER_SIGNAL_NOT_FOUND";T[1644]="ER_SIGNAL_EXCEPTION";T[1645]="ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER";T[1646]="ER_SIGNAL_BAD_CONDITION_TYPE";T[1647]="WARN_COND_ITEM_TRUNCATED";T[1648]="ER_COND_ITEM_TOO_LONG";T[1649]="ER_UNKNOWN_LOCALE";T[1650]="ER_SLAVE_IGNORE_SERVER_IDS";T[1651]="ER_QUERY_CACHE_DISABLED";T[1652]="ER_SAME_NAME_PARTITION_FIELD";T[1653]="ER_PARTITION_COLUMN_LIST_ERROR";T[1654]="ER_WRONG_TYPE_COLUMN_VALUE_ERROR";T[1655]="ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR";T[1656]="ER_MAXVALUE_IN_VALUES_IN";T[1657]="ER_TOO_MANY_VALUES_ERROR";T[1658]="ER_ROW_SINGLE_PARTITION_FIELD_ERROR";T[1659]="ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD";T[1660]="ER_PARTITION_FIELDS_TOO_LONG";T[1661]="ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE";T[1662]="ER_BINLOG_ROW_MODE_AND_STMT_ENGINE";T[1663]="ER_BINLOG_UNSAFE_AND_STMT_ENGINE";T[1664]="ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE";T[1665]="ER_BINLOG_STMT_MODE_AND_ROW_ENGINE";T[1666]="ER_BINLOG_ROW_INJECTION_AND_STMT_MODE";T[1667]="ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE";T[1668]="ER_BINLOG_UNSAFE_LIMIT";T[1669]="ER_BINLOG_UNSAFE_INSERT_DELAYED";T[1670]="ER_BINLOG_UNSAFE_SYSTEM_TABLE";T[1671]="ER_BINLOG_UNSAFE_AUTOINC_COLUMNS";T[1672]="ER_BINLOG_UNSAFE_UDF";T[1673]="ER_BINLOG_UNSAFE_SYSTEM_VARIABLE";T[1674]="ER_BINLOG_UNSAFE_SYSTEM_FUNCTION";T[1675]="ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS";T[1676]="ER_MESSAGE_AND_STATEMENT";T[1677]="ER_SLAVE_CONVERSION_FAILED";T[1678]="ER_SLAVE_CANT_CREATE_CONVERSION";T[1679]="ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT";T[1680]="ER_PATH_LENGTH";T[1681]="ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT";T[1682]="ER_WRONG_NATIVE_TABLE_STRUCTURE";T[1683]="ER_WRONG_PERFSCHEMA_USAGE";T[1684]="ER_WARN_I_S_SKIPPED_TABLE";T[1685]="ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT";T[1686]="ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT";T[1687]="ER_SPATIAL_MUST_HAVE_GEOM_COL";T[1688]="ER_TOO_LONG_INDEX_COMMENT";T[1689]="ER_LOCK_ABORTED";T[1690]="ER_DATA_OUT_OF_RANGE";T[1691]="ER_WRONG_SPVAR_TYPE_IN_LIMIT";T[1692]="ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE";T[1693]="ER_BINLOG_UNSAFE_MIXED_STATEMENT";T[1694]="ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN";T[1695]="ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN";T[1696]="ER_FAILED_READ_FROM_PAR_FILE";T[1697]="ER_VALUES_IS_NOT_INT_TYPE_ERROR";T[1698]="ER_ACCESS_DENIED_NO_PASSWORD_ERROR";T[1699]="ER_SET_PASSWORD_AUTH_PLUGIN";T[1700]="ER_GRANT_PLUGIN_USER_EXISTS";T[1701]="ER_TRUNCATE_ILLEGAL_FK";T[1702]="ER_PLUGIN_IS_PERMANENT";T[1703]="ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN";T[1704]="ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX";T[1705]="ER_STMT_CACHE_FULL";T[1706]="ER_MULTI_UPDATE_KEY_CONFLICT";T[1707]="ER_TABLE_NEEDS_REBUILD";T[1708]="WARN_OPTION_BELOW_LIMIT";T[1709]="ER_INDEX_COLUMN_TOO_LONG";T[1710]="ER_ERROR_IN_TRIGGER_BODY";T[1711]="ER_ERROR_IN_UNKNOWN_TRIGGER_BODY";T[1712]="ER_INDEX_CORRUPT";T[1713]="ER_UNDO_RECORD_TOO_BIG";T[1714]="ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT";T[1715]="ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE";T[1716]="ER_BINLOG_UNSAFE_REPLACE_SELECT";T[1717]="ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT";T[1718]="ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT";T[1719]="ER_BINLOG_UNSAFE_UPDATE_IGNORE";T[1720]="ER_PLUGIN_NO_UNINSTALL";T[1721]="ER_PLUGIN_NO_INSTALL";T[1722]="ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT";T[1723]="ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC";T[1724]="ER_BINLOG_UNSAFE_INSERT_TWO_KEYS";T[1725]="ER_TABLE_IN_FK_CHECK";T[1726]="ER_UNSUPPORTED_ENGINE";T[1727]="ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST";T[1728]="ER_CANNOT_LOAD_FROM_TABLE_V2";T[1729]="ER_MASTER_DELAY_VALUE_OUT_OF_RANGE";T[1730]="ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT";T[1731]="ER_PARTITION_EXCHANGE_DIFFERENT_OPTION";T[1732]="ER_PARTITION_EXCHANGE_PART_TABLE";T[1733]="ER_PARTITION_EXCHANGE_TEMP_TABLE";T[1734]="ER_PARTITION_INSTEAD_OF_SUBPARTITION";T[1735]="ER_UNKNOWN_PARTITION";T[1736]="ER_TABLES_DIFFERENT_METADATA";T[1737]="ER_ROW_DOES_NOT_MATCH_PARTITION";T[1738]="ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX";T[1739]="ER_WARN_INDEX_NOT_APPLICABLE";T[1740]="ER_PARTITION_EXCHANGE_FOREIGN_KEY";T[1741]="ER_NO_SUCH_KEY_VALUE";T[1742]="ER_RPL_INFO_DATA_TOO_LONG";T[1743]="ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE";T[1744]="ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE";T[1745]="ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX";T[1746]="ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT";T[1747]="ER_PARTITION_CLAUSE_ON_NONPARTITIONED";T[1748]="ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET";T[1749]="ER_NO_SUCH_PARTITION";T[1750]="ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE";T[1751]="ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE";T[1752]="ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE";T[1753]="ER_MTS_FEATURE_IS_NOT_SUPPORTED";T[1754]="ER_MTS_UPDATED_DBS_GREATER_MAX";T[1755]="ER_MTS_CANT_PARALLEL";T[1756]="ER_MTS_INCONSISTENT_DATA";T[1757]="ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING";T[1758]="ER_DA_INVALID_CONDITION_NUMBER";T[1759]="ER_INSECURE_PLAIN_TEXT";T[1760]="ER_INSECURE_CHANGE_MASTER";T[1761]="ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO";T[1762]="ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO";T[1763]="ER_SQLTHREAD_WITH_SECURE_SLAVE";T[1764]="ER_TABLE_HAS_NO_FT";T[1765]="ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER";T[1766]="ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION";T[1767]="ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST";T[1768]="ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION";T[1769]="ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION";T[1770]="ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL";T[1771]="ER_SKIPPING_LOGGED_TRANSACTION";T[1772]="ER_MALFORMED_GTID_SET_SPECIFICATION";T[1773]="ER_MALFORMED_GTID_SET_ENCODING";T[1774]="ER_MALFORMED_GTID_SPECIFICATION";T[1775]="ER_GNO_EXHAUSTED";T[1776]="ER_BAD_SLAVE_AUTO_POSITION";T[1777]="ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF";T[1778]="ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET";T[1779]="ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON";T[1780]="ER_GTID_MODE_REQUIRES_BINLOG";T[1781]="ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF";T[1782]="ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON";T[1783]="ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF";T[1784]="ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF";T[1785]="ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE";T[1786]="ER_GTID_UNSAFE_CREATE_SELECT";T[1787]="ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION";T[1788]="ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME";T[1789]="ER_MASTER_HAS_PURGED_REQUIRED_GTIDS";T[1790]="ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID";T[1791]="ER_UNKNOWN_EXPLAIN_FORMAT";T[1792]="ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION";T[1793]="ER_TOO_LONG_TABLE_PARTITION_COMMENT";T[1794]="ER_SLAVE_CONFIGURATION";T[1795]="ER_INNODB_FT_LIMIT";T[1796]="ER_INNODB_NO_FT_TEMP_TABLE";T[1797]="ER_INNODB_FT_WRONG_DOCID_COLUMN";T[1798]="ER_INNODB_FT_WRONG_DOCID_INDEX";T[1799]="ER_INNODB_ONLINE_LOG_TOO_BIG";T[1800]="ER_UNKNOWN_ALTER_ALGORITHM";T[1801]="ER_UNKNOWN_ALTER_LOCK";T[1802]="ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS";T[1803]="ER_MTS_RECOVERY_FAILURE";T[1804]="ER_MTS_RESET_WORKERS";T[1805]="ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2";T[1806]="ER_SLAVE_SILENT_RETRY_TRANSACTION";T[1807]="ER_DISCARD_FK_CHECKS_RUNNING";T[1808]="ER_TABLE_SCHEMA_MISMATCH";T[1809]="ER_TABLE_IN_SYSTEM_TABLESPACE";T[1810]="ER_IO_READ_ERROR";T[1811]="ER_IO_WRITE_ERROR";T[1812]="ER_TABLESPACE_MISSING";T[1813]="ER_TABLESPACE_EXISTS";T[1814]="ER_TABLESPACE_DISCARDED";T[1815]="ER_INTERNAL_ERROR";T[1816]="ER_INNODB_IMPORT_ERROR";T[1817]="ER_INNODB_INDEX_CORRUPT";T[1818]="ER_INVALID_YEAR_COLUMN_LENGTH";T[1819]="ER_NOT_VALID_PASSWORD";T[1820]="ER_MUST_CHANGE_PASSWORD";T[1821]="ER_FK_NO_INDEX_CHILD";T[1822]="ER_FK_NO_INDEX_PARENT";T[1823]="ER_FK_FAIL_ADD_SYSTEM";T[1824]="ER_FK_CANNOT_OPEN_PARENT";T[1825]="ER_FK_INCORRECT_OPTION";T[1826]="ER_FK_DUP_NAME";T[1827]="ER_PASSWORD_FORMAT";T[1828]="ER_FK_COLUMN_CANNOT_DROP";T[1829]="ER_FK_COLUMN_CANNOT_DROP_CHILD";T[1830]="ER_FK_COLUMN_NOT_NULL";T[1831]="ER_DUP_INDEX";T[1832]="ER_FK_COLUMN_CANNOT_CHANGE";T[1833]="ER_FK_COLUMN_CANNOT_CHANGE_CHILD";T[1834]="ER_FK_CANNOT_DELETE_PARENT";T[1835]="ER_MALFORMED_PACKET";T[1836]="ER_READ_ONLY_MODE";T[1837]="ER_GTID_NEXT_TYPE_UNDEFINED_GROUP";T[1838]="ER_VARIABLE_NOT_SETTABLE_IN_SP";T[1839]="ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF";T[1840]="ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY";T[1841]="ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY";T[1842]="ER_GTID_PURGED_WAS_CHANGED";T[1843]="ER_GTID_EXECUTED_WAS_CHANGED";T[1844]="ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES";T[1845]="ER_ALTER_OPERATION_NOT_SUPPORTED";T[1846]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON";T[1847]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY";T[1848]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION";T[1849]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME";T[1850]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE";T[1851]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK";T[1852]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE";T[1853]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK";T[1854]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC";T[1855]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS";T[1856]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS";T[1857]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS";T[1858]="ER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE";T[1859]="ER_DUP_UNKNOWN_IN_INDEX";T[1860]="ER_IDENT_CAUSES_TOO_LONG_PATH";T[1861]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL";T[1862]="ER_MUST_CHANGE_PASSWORD_LOGIN";T[1863]="ER_ROW_IN_WRONG_PARTITION";T[1864]="ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX";T[1865]="ER_INNODB_NO_FT_USES_PARSER";T[1866]="ER_BINLOG_LOGICAL_CORRUPTION";T[1867]="ER_WARN_PURGE_LOG_IN_USE";T[1868]="ER_WARN_PURGE_LOG_IS_ACTIVE";T[1869]="ER_AUTO_INCREMENT_CONFLICT";T[1870]="WARN_ON_BLOCKHOLE_IN_RBR";T[1871]="ER_SLAVE_MI_INIT_REPOSITORY";T[1872]="ER_SLAVE_RLI_INIT_REPOSITORY";T[1873]="ER_ACCESS_DENIED_CHANGE_USER_ERROR";T[1874]="ER_INNODB_READ_ONLY";T[1875]="ER_STOP_SLAVE_SQL_THREAD_TIMEOUT";T[1876]="ER_STOP_SLAVE_IO_THREAD_TIMEOUT";T[1877]="ER_TABLE_CORRUPT";T[1878]="ER_TEMP_FILE_WRITE_FAILURE";T[1879]="ER_INNODB_FT_AUX_NOT_HEX_ID";T[1880]="ER_OLD_TEMPORALS_UPGRADED";T[1881]="ER_INNODB_FORCED_RECOVERY";T[1882]="ER_AES_INVALID_IV";T[1883]="ER_PLUGIN_CANNOT_BE_UNINSTALLED";T[1884]="ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_GTID_GROUP";T[1885]="ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER";T[1886]="ER_MISSING_KEY";T[1887]="WARN_NAMED_PIPE_ACCESS_EVERYONE";T[1888]="ER_FOUND_MISSING_GTIDS";T[3000]="ER_FILE_CORRUPT";T[3001]="ER_ERROR_ON_MASTER";T[3002]="ER_INCONSISTENT_ERROR";T[3003]="ER_STORAGE_ENGINE_NOT_LOADED";T[3004]="ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER";T[3005]="ER_WARN_LEGACY_SYNTAX_CONVERTED";T[3006]="ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN";T[3007]="ER_CANNOT_DISCARD_TEMPORARY_TABLE";T[3008]="ER_FK_DEPTH_EXCEEDED";T[3009]="ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2";T[3010]="ER_WARN_TRIGGER_DOESNT_HAVE_CREATED";T[3011]="ER_REFERENCED_TRG_DOES_NOT_EXIST";T[3012]="ER_EXPLAIN_NOT_SUPPORTED";T[3013]="ER_INVALID_FIELD_SIZE";T[3014]="ER_MISSING_HA_CREATE_OPTION";T[3015]="ER_ENGINE_OUT_OF_MEMORY";T[3016]="ER_PASSWORD_EXPIRE_ANONYMOUS_USER";T[3017]="ER_SLAVE_SQL_THREAD_MUST_STOP";T[3018]="ER_NO_FT_MATERIALIZED_SUBQUERY";T[3019]="ER_INNODB_UNDO_LOG_FULL";T[3020]="ER_INVALID_ARGUMENT_FOR_LOGARITHM";T[3021]="ER_SLAVE_CHANNEL_IO_THREAD_MUST_STOP";T[3022]="ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO";T[3023]="ER_WARN_ONLY_MASTER_LOG_FILE_NO_POS";T[3024]="ER_QUERY_TIMEOUT";T[3025]="ER_NON_RO_SELECT_DISABLE_TIMER";T[3026]="ER_DUP_LIST_ENTRY";T[3027]="ER_SQL_MODE_NO_EFFECT";T[3028]="ER_AGGREGATE_ORDER_FOR_UNION";T[3029]="ER_AGGREGATE_ORDER_NON_AGG_QUERY";T[3030]="ER_SLAVE_WORKER_STOPPED_PREVIOUS_THD_ERROR";T[3031]="ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER";T[3032]="ER_SERVER_OFFLINE_MODE";T[3033]="ER_GIS_DIFFERENT_SRIDS";T[3034]="ER_GIS_UNSUPPORTED_ARGUMENT";T[3035]="ER_GIS_UNKNOWN_ERROR";T[3036]="ER_GIS_UNKNOWN_EXCEPTION";T[3037]="ER_GIS_INVALID_DATA";T[3038]="ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION";T[3039]="ER_BOOST_GEOMETRY_CENTROID_EXCEPTION";T[3040]="ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION";T[3041]="ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION";T[3042]="ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION";T[3043]="ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION";T[3044]="ER_STD_BAD_ALLOC_ERROR";T[3045]="ER_STD_DOMAIN_ERROR";T[3046]="ER_STD_LENGTH_ERROR";T[3047]="ER_STD_INVALID_ARGUMENT";T[3048]="ER_STD_OUT_OF_RANGE_ERROR";T[3049]="ER_STD_OVERFLOW_ERROR";T[3050]="ER_STD_RANGE_ERROR";T[3051]="ER_STD_UNDERFLOW_ERROR";T[3052]="ER_STD_LOGIC_ERROR";T[3053]="ER_STD_RUNTIME_ERROR";T[3054]="ER_STD_UNKNOWN_EXCEPTION";T[3055]="ER_GIS_DATA_WRONG_ENDIANESS";T[3056]="ER_CHANGE_MASTER_PASSWORD_LENGTH";T[3057]="ER_USER_LOCK_WRONG_NAME";T[3058]="ER_USER_LOCK_DEADLOCK";T[3059]="ER_REPLACE_INACCESSIBLE_ROWS";T[3060]="ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS";T[3061]="ER_ILLEGAL_USER_VAR";T[3062]="ER_GTID_MODE_OFF";T[3063]="ER_UNSUPPORTED_BY_REPLICATION_THREAD";T[3064]="ER_INCORRECT_TYPE";T[3065]="ER_FIELD_IN_ORDER_NOT_SELECT";T[3066]="ER_AGGREGATE_IN_ORDER_NOT_SELECT";T[3067]="ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN";T[3068]="ER_NET_OK_PACKET_TOO_LARGE";T[3069]="ER_INVALID_JSON_DATA";T[3070]="ER_INVALID_GEOJSON_MISSING_MEMBER";T[3071]="ER_INVALID_GEOJSON_WRONG_TYPE";T[3072]="ER_INVALID_GEOJSON_UNSPECIFIED";T[3073]="ER_DIMENSION_UNSUPPORTED";T[3074]="ER_SLAVE_CHANNEL_DOES_NOT_EXIST";T[3075]="ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT";T[3076]="ER_SLAVE_CHANNEL_NAME_INVALID_OR_TOO_LONG";T[3077]="ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY";T[3078]="ER_SLAVE_CHANNEL_DELETE";T[3079]="ER_SLAVE_MULTIPLE_CHANNELS_CMD";T[3080]="ER_SLAVE_MAX_CHANNELS_EXCEEDED";T[3081]="ER_SLAVE_CHANNEL_MUST_STOP";T[3082]="ER_SLAVE_CHANNEL_NOT_RUNNING";T[3083]="ER_SLAVE_CHANNEL_WAS_RUNNING";T[3084]="ER_SLAVE_CHANNEL_WAS_NOT_RUNNING";T[3085]="ER_SLAVE_CHANNEL_SQL_THREAD_MUST_STOP";T[3086]="ER_SLAVE_CHANNEL_SQL_SKIP_COUNTER";T[3087]="ER_WRONG_FIELD_WITH_GROUP_V2";T[3088]="ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2";T[3089]="ER_WARN_DEPRECATED_SYSVAR_UPDATE";T[3090]="ER_WARN_DEPRECATED_SQLMODE";T[3091]="ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID";T[3092]="ER_GROUP_REPLICATION_CONFIGURATION";T[3093]="ER_GROUP_REPLICATION_RUNNING";T[3094]="ER_GROUP_REPLICATION_APPLIER_INIT_ERROR";T[3095]="ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT";T[3096]="ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR";T[3097]="ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR";T[3098]="ER_BEFORE_DML_VALIDATION_ERROR";T[3099]="ER_PREVENTS_VARIABLE_WITHOUT_RBR";T[3100]="ER_RUN_HOOK_ERROR";T[3101]="ER_TRANSACTION_ROLLBACK_DURING_COMMIT";T[3102]="ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED";T[3103]="ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN";T[3104]="ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN";T[3105]="ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN";T[3106]="ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN";T[3107]="ER_GENERATED_COLUMN_NON_PRIOR";T[3108]="ER_DEPENDENT_BY_GENERATED_COLUMN";T[3109]="ER_GENERATED_COLUMN_REF_AUTO_INC";T[3110]="ER_FEATURE_NOT_AVAILABLE";T[3111]="ER_CANT_SET_GTID_MODE";T[3112]="ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF";T[3113]="ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION";T[3114]="ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON";T[3115]="ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF";T[3116]="ER_CANT_SET_ENFORCE_GTID_CONSISTENCY_ON_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS";T[3117]="ER_SET_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS";T[3118]="ER_ACCOUNT_HAS_BEEN_LOCKED";T[3119]="ER_WRONG_TABLESPACE_NAME";T[3120]="ER_TABLESPACE_IS_NOT_EMPTY";T[3121]="ER_WRONG_FILE_NAME";T[3122]="ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION";T[3123]="ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR";T[3124]="ER_WARN_BAD_MAX_EXECUTION_TIME";T[3125]="ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME";T[3126]="ER_WARN_CONFLICTING_HINT";T[3127]="ER_WARN_UNKNOWN_QB_NAME";T[3128]="ER_UNRESOLVED_HINT_NAME";T[3129]="ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE";T[3130]="ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED";T[3131]="ER_LOCKING_SERVICE_WRONG_NAME";T[3132]="ER_LOCKING_SERVICE_DEADLOCK";T[3133]="ER_LOCKING_SERVICE_TIMEOUT";T[3134]="ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED";T[3135]="ER_SQL_MODE_MERGED";T[3136]="ER_VTOKEN_PLUGIN_TOKEN_MISMATCH";T[3137]="ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND";T[3138]="ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID";T[3139]="ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED";T[3140]="ER_INVALID_JSON_TEXT";T[3141]="ER_INVALID_JSON_TEXT_IN_PARAM";T[3142]="ER_INVALID_JSON_BINARY_DATA";T[3143]="ER_INVALID_JSON_PATH";T[3144]="ER_INVALID_JSON_CHARSET";T[3145]="ER_INVALID_JSON_CHARSET_IN_FUNCTION";T[3146]="ER_INVALID_TYPE_FOR_JSON";T[3147]="ER_INVALID_CAST_TO_JSON";T[3148]="ER_INVALID_JSON_PATH_CHARSET";T[3149]="ER_INVALID_JSON_PATH_WILDCARD";T[3150]="ER_JSON_VALUE_TOO_BIG";T[3151]="ER_JSON_KEY_TOO_BIG";T[3152]="ER_JSON_USED_AS_KEY";T[3153]="ER_JSON_VACUOUS_PATH";T[3154]="ER_JSON_BAD_ONE_OR_ALL_ARG";T[3155]="ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE";T[3156]="ER_INVALID_JSON_VALUE_FOR_CAST";T[3157]="ER_JSON_DOCUMENT_TOO_DEEP";T[3158]="ER_JSON_DOCUMENT_NULL_KEY";T[3159]="ER_SECURE_TRANSPORT_REQUIRED";T[3160]="ER_NO_SECURE_TRANSPORTS_CONFIGURED";T[3161]="ER_DISABLED_STORAGE_ENGINE";T[3162]="ER_USER_DOES_NOT_EXIST";T[3163]="ER_USER_ALREADY_EXISTS";T[3164]="ER_AUDIT_API_ABORT";T[3165]="ER_INVALID_JSON_PATH_ARRAY_CELL";T[3166]="ER_BUFPOOL_RESIZE_INPROGRESS";T[3167]="ER_FEATURE_DISABLED_SEE_DOC";T[3168]="ER_SERVER_ISNT_AVAILABLE";T[3169]="ER_SESSION_WAS_KILLED";T[3170]="ER_CAPACITY_EXCEEDED";T[3171]="ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER";T[3172]="ER_TABLE_NEEDS_UPG_PART";T[3173]="ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID";T[3174]="ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL";T[3175]="ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT";T[3176]="ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE";T[3177]="ER_LOCK_REFUSED_BY_ENGINE";T[3178]="ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN";T[3179]="ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE";T[3180]="ER_MASTER_KEY_ROTATION_ERROR_BY_SE";T[3181]="ER_MASTER_KEY_ROTATION_BINLOG_FAILED";T[3182]="ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE";T[3183]="ER_TABLESPACE_CANNOT_ENCRYPT";T[3184]="ER_INVALID_ENCRYPTION_OPTION";T[3185]="ER_CANNOT_FIND_KEY_IN_KEYRING";T[3186]="ER_CAPACITY_EXCEEDED_IN_PARSER";T[3187]="ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE";T[3188]="ER_KEYRING_UDF_KEYRING_SERVICE_ERROR";T[3189]="ER_USER_COLUMN_OLD_LENGTH";T[3190]="ER_CANT_RESET_MASTER";T[3191]="ER_GROUP_REPLICATION_MAX_GROUP_SIZE";T[3192]="ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED";T[3193]="ER_TABLE_REFERENCED";T[3194]="ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE";T[3195]="ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO";T[3196]="ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID";T[3197]="ER_XA_RETRY";T[3198]="ER_KEYRING_AWS_UDF_AWS_KMS_ERROR";T[3199]="ER_BINLOG_UNSAFE_XA";T[3200]="ER_UDF_ERROR";T[3201]="ER_KEYRING_MIGRATION_FAILURE";T[3202]="ER_KEYRING_ACCESS_DENIED_ERROR";T[3203]="ER_KEYRING_MIGRATION_STATUS";T[3204]="ER_PLUGIN_FAILED_TO_OPEN_TABLES";T[3205]="ER_PLUGIN_FAILED_TO_OPEN_TABLE";T[3206]="ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED";T[3207]="ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET";T[3208]="ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY";T[3209]="ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED";T[3210]="ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED";T[3211]="ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE";T[3212]="ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED";T[3213]="ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS";T[3214]="ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE";T[3215]="ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT";T[3216]="ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED";T[3217]="ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE";T[3218]="ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE";T[3219]="ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR";T[3220]="ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY";T[3221]="ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY";T[3222]="ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS";T[3223]="ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC";T[3224]="ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER";T[3225]="ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER";T[3226]="WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP";T[3227]="ER_XA_REPLICATION_FILTERS";T[3228]="ER_CANT_OPEN_ERROR_LOG";T[3229]="ER_GROUPING_ON_TIMESTAMP_IN_DST";T[3230]="ER_CANT_START_SERVER_NAMED_PIPE"});var A8=j((Jh,O8)=>{var k0=require("timers");O8.exports=PO;function PO(_){this._object=_,this._timeout=null}PO.prototype.active=function _(){if(this._timeout)if(this._timeout.refresh)this._timeout.refresh();else k0.active(this._timeout)};PO.prototype.start=function _(E){this.stop(),this._timeout=k0.setTimeout(this._onTimeout.bind(this),E)};PO.prototype.stop=function _(){if(this._timeout)k0.clearTimeout(this._timeout),this._timeout=null};PO.prototype._onTimeout=function _(){return this._object._onTimeout()}});var D1=j(($h,L8)=>{var e$=require("util"),g0=require("events").EventEmitter,m0=gN(),_Z=T8(),EZ=A8(),RZ=g0.listenerCount||function(_,E){return _.listeners(E).length},I8="\n --------------------\n";L8.exports=RN;e$.inherits(RN,g0);function RN(_,E){if(typeof _==="function")E=_,_={};g0.call(this),_=_||{},this._callback=E,this._callSite=null,this._ended=!1,this._timeout=_.timeout,this._timer=new EZ(this)}RN.determinePacket=function(_){switch(_){case 0:return m0.OkPacket;case 254:return m0.EofPacket;case 255:return m0.ErrorPacket;default:return}};RN.prototype.hasErrorHandler=function(){return Boolean(this._callback)||RZ(this,"error")>1};RN.prototype._packetToError=function(_){var E=_Z[_.errno]||"UNKNOWN_CODE_PLEASE_REPORT",R=new Error(E+": "+_.message);return R.code=E,R.errno=_.errno,R.sqlMessage=_.message,R.sqlState=_.sqlState,R};RN.prototype.end=function(_){if(this._ended)return;if(this._ended=!0,_)this._addLongStackTrace(_);this._callSite=null;try{if(_)this.emit("error",_)}finally{try{if(this._callback)this._callback.apply(this,arguments)}finally{this.emit("end")}}};RN.prototype.OkPacket=function(_){this.end(null,_)};RN.prototype.ErrorPacket=function(_){this.end(this._packetToError(_))};RN.prototype.start=function(){};RN.prototype._addLongStackTrace=function _(E){var R=this._callSite&&this._callSite.stack;if(!R||typeof R!=="string")return;if(E.stack.indexOf(I8)!==-1)return;var N=R.indexOf("\n");if(N!==-1)E.stack+=I8+R.substr(N+1)};RN.prototype._onTimeout=function _(){this.emit("timeout")}});var y0=j((G8)=>{var yN=PN().Buffer,NZ=require("crypto"),eE=G8;function TZ(_,E,R){switch(R=R||{},_){case"mysql_native_password":return eE.token(R.password,E.slice(0,20));default:return}}eE.auth=TZ;function FI(_){var E=NZ.createHash("sha1");return E.update(_,"binary"),E.digest("binary")}eE.sha1=FI;function U8(_,E){_=yN.from(_,"binary"),E=yN.from(E,"binary");var R=yN.allocUnsafe(_.length);for(var N=0;N<_.length;N++)R[N]=_[N]^E[N];return R}eE.xor=U8;eE.token=function(_,E){if(!_)return yN.alloc(0);var R=FI(yN.from(_,"utf8").toString("binary")),N=FI(R),A=FI(E.toString("binary")+N);return U8(A,R)};eE.hashPassword=function(_){var E=[20528,22325],R=7,N=[4660,22129],A=yN.alloc(8);if(typeof _==="string")_=yN.from(_);for(var L=0;L<_.length;L++){var U=_[L];if(U===32||U===9)continue;E=this.xor32(E,this.add32(this.mul32(this.add32(this.and32(E,[0,63]),[0,R]),[0,U]),this.shl32(E,8))),N=this.add32(N,this.xor32(this.shl32(N,8),E)),R+=U}return this.int31Write(A,E,0),this.int31Write(A,N,4),A};eE.randomInit=function(_,E){return{max_value:1073741823,max_value_dbl:1073741823,seed1:_%1073741823,seed2:E%1073741823}};eE.myRnd=function(_){return _.seed1=(_.seed1*3+_.seed2)%_.max_value,_.seed2=(_.seed1+_.seed2+33)%_.max_value,_.seed1/_.max_value_dbl};eE.scramble323=function(_,E){if(!E)return yN.alloc(0);var R=yN.allocUnsafe(8),N=this.hashPassword(E),A=this.hashPassword(_.slice(0,8)),L=this.int32Read(N,0)^this.int32Read(A,0),U=this.int32Read(N,4)^this.int32Read(A,4),G=this.randomInit(L,U);for(var S=0;S<8;S++)R[S]=Math.floor(this.myRnd(G)*31)+64;var C=Math.floor(this.myRnd(G)*31);for(var S=0;S<8;S++)R[S]^=C;return R};eE.xor32=function(_,E){return[_[0]^E[0],_[1]^E[1]]};eE.add32=function(_,E){var R=_[1]+E[1],N=_[0]+E[0]+((R&4294901760)>>16);return[N&65535,R&65535]};eE.mul32=function(_,E){var R=_[1]*E[1],N=(_[1]*E[1]>>16&65535)+(_[0]*E[1]&65535)+(_[1]*E[0]&65535);return[N&65535,R&65535]};eE.and32=function(_,E){return[_[0]&E[0],_[1]&E[1]]};eE.shl32=function(_,E){var R=_[1]<>16;return[N&65535,R&65535]};eE.int31Write=function(_,E,R){_[R]=E[0]>>8&127,_[R+1]=E[0]&255,_[R+2]=E[1]>>8&255,_[R+3]=E[1]&255};eE.int32Read=function(_,E){return(_[E]<<24)+(_[E+1]<<16)+(_[E+2]<<8)+_[E+3]}});var P8=j((wh,C8)=>{var D8=D1(),OZ=require("util"),BI=gN(),S8=y0();C8.exports=BT;OZ.inherits(BT,D8);function BT(_,E){D8.call(this,_,E),this._user=_.user,this._password=_.password,this._database=_.database,this._charsetNumber=_.charsetNumber,this._currentConfig=_.currentConfig}BT.prototype.determinePacket=function _(E){switch(E){case 254:return BI.AuthSwitchRequestPacket;case 255:return BI.ErrorPacket;default:return}};BT.prototype.start=function(_){var E=_.scrambleBuff();E=S8.token(this._password,E);var R=new BI.ComChangeUserPacket({user:this._user,scrambleBuff:E,database:this._database,charsetNumber:this._charsetNumber});this._currentConfig.user=this._user,this._currentConfig.password=this._password,this._currentConfig.database=this._database,this._currentConfig.charsetNumber=this._charsetNumber,this.emit("packet",R)};BT.prototype.AuthSwitchRequestPacket=function(_){var E=_.authMethodName,R=S8.auth(E,_.authMethodData,{password:this._password});if(R!==void 0)this.emit("packet",new BI.AuthSwitchResponsePacket({data:R}));else{var N=new Error("MySQL is requesting the "+E+" authentication method, which is not supported.");N.code="UNSUPPORTED_AUTH_METHOD",N.fatal=!0,this.end(N)}};BT.prototype.ErrorPacket=function(_){var E=this._packetToError(_);E.fatal=!0,this.end(E)}});var M8=j((Qh,W8)=>{var H8=D1(),AZ=require("util"),S1=gN(),VI=y0(),Y8=MT();W8.exports=bN;AZ.inherits(bN,H8);function bN(_,E){H8.call(this,_,E),_=_||{},this._config=_.config,this._handshakeInitializationPacket=null}bN.prototype.determinePacket=function _(E,R){if(E===255)return S1.ErrorPacket;if(!this._handshakeInitializationPacket)return S1.HandshakeInitializationPacket;if(E===254)return R.packetLength()===1?S1.UseOldPasswordPacket:S1.AuthSwitchRequestPacket;return};bN.prototype.AuthSwitchRequestPacket=function(_){var E=_.authMethodName,R=VI.auth(E,_.authMethodData,{password:this._config.password});if(R!==void 0)this.emit("packet",new S1.AuthSwitchResponsePacket({data:R}));else{var N=new Error("MySQL is requesting the "+E+" authentication method, which is not supported.");N.code="UNSUPPORTED_AUTH_METHOD",N.fatal=!0,this.end(N)}};bN.prototype.HandshakeInitializationPacket=function(_){this._handshakeInitializationPacket=_,this._config.protocol41=_.protocol41;var E=_.serverCapabilities1&Y8.CLIENT_SSL;if(this._config.ssl){if(!E){var R=new Error("Server does not support secure connection");R.code="HANDSHAKE_NO_SSL_SUPPORT",R.fatal=!0,this.end(R);return}this._config.clientFlags|=Y8.CLIENT_SSL,this.emit("packet",new S1.SSLRequestPacket({clientFlags:this._config.clientFlags,maxPacketSize:this._config.maxPacketSize,charsetNumber:this._config.charsetNumber})),this.emit("start-tls")}else this._sendCredentials()};bN.prototype._tlsUpgradeCompleteHandler=function(){this._sendCredentials()};bN.prototype._sendCredentials=function(){var _=this._handshakeInitializationPacket;this.emit("packet",new S1.ClientAuthenticationPacket({clientFlags:this._config.clientFlags,maxPacketSize:this._config.maxPacketSize,charsetNumber:this._config.charsetNumber,user:this._config.user,database:this._config.database,protocol41:_.protocol41,scrambleBuff:_.protocol41?VI.token(this._config.password,_.scrambleBuff()):VI.scramble323(_.scrambleBuff(),this._config.password)}))};bN.prototype.UseOldPasswordPacket=function(){if(!this._config.insecureAuth){var _=new Error("MySQL server is requesting the old and insecure pre-4.1 auth mechanism. Upgrade the user password or use the {insecureAuth: true} option.");_.code="HANDSHAKE_INSECURE_AUTH",_.fatal=!0,this.end(_);return}this.emit("packet",new S1.OldPasswordPacket({scrambleBuff:VI.scramble323(this._handshakeInitializationPacket.scrambleBuff(),this._config.password)}))};bN.prototype.ErrorPacket=function(_){var E=this._packetToError(_,!0);E.fatal=!0,this.end(E)}});var V8=j((zh,B8)=>{var F8=D1(),IZ=require("util"),LZ=gN();B8.exports=b0;IZ.inherits(b0,F8);function b0(_,E){if(!E&&typeof _==="function")E=_,_={};F8.call(this,_,E)}b0.prototype.start=function(){this.emit("packet",new LZ.ComPingPacket)}});var X8=j((xh,K8)=>{K8.exports=UZ;function UZ(_){this.resultSetHeaderPacket=_,this.fieldPackets=[],this.eofPackets=[],this.rows=[]}});var J8=j((fR)=>{fR.SERVER_STATUS_IN_TRANS=1;fR.SERVER_STATUS_AUTOCOMMIT=2;fR.SERVER_MORE_RESULTS_EXISTS=8;fR.SERVER_QUERY_NO_GOOD_INDEX_USED=16;fR.SERVER_QUERY_NO_INDEX_USED=32;fR.SERVER_STATUS_CURSOR_EXISTS=64;fR.SERVER_STATUS_LAST_ROW_SENT=128;fR.SERVER_STATUS_DB_DROPPED=256;fR.SERVER_STATUS_NO_BACKSLASH_ESCAPES=512;fR.SERVER_STATUS_METADATA_CHANGED=1024;fR.SERVER_QUERY_WAS_SLOW=2048;fR.SERVER_PS_OUT_PARAMS=4096});var YO=j((fh,i0)=>{if(typeof process==="undefined"||!process.version||process.version.indexOf("v0.")===0||process.version.indexOf("v1.")===0&&process.version.indexOf("v1.8.")!==0)i0.exports={nextTick:GZ};else i0.exports=process;function GZ(_,E,R,N){if(typeof _!=="function")throw new TypeError('"callback" argument must be a function');var A=arguments.length,L,U;switch(A){case 0:case 1:return process.nextTick(_);case 2:return process.nextTick(function G(){_.call(null,E)});case 3:return process.nextTick(function G(){_.call(null,E,R)});case 4:return process.nextTick(function G(){_.call(null,E,R,N)});default:L=new Array(A-1),U=0;while(U{var DZ={}.toString;$8.exports=Array.isArray||function(_){return DZ.call(_)=="[object Array]"}});var u0=j((vh,w8)=>{w8.exports=require("stream")});var VT=j((_R)=>{function SZ(_){if(Array.isArray)return Array.isArray(_);return KI(_)==="[object Array]"}_R.isArray=SZ;function CZ(_){return typeof _==="boolean"}_R.isBoolean=CZ;function PZ(_){return _===null}_R.isNull=PZ;function YZ(_){return _==null}_R.isNullOrUndefined=YZ;function HZ(_){return typeof _==="number"}_R.isNumber=HZ;function WZ(_){return typeof _==="string"}_R.isString=WZ;function MZ(_){return typeof _==="symbol"}_R.isSymbol=MZ;function FZ(_){return _===void 0}_R.isUndefined=FZ;function BZ(_){return KI(_)==="[object RegExp]"}_R.isRegExp=BZ;function VZ(_){return typeof _==="object"&&_!==null}_R.isObject=VZ;function KZ(_){return KI(_)==="[object Date]"}_R.isDate=KZ;function XZ(_){return KI(_)==="[object Error]"||_ instanceof Error}_R.isError=XZ;function JZ(_){return typeof _==="function"}_R.isFunction=JZ;function $Z(_){return _===null||typeof _==="boolean"||typeof _==="number"||typeof _==="string"||typeof _==="symbol"||typeof _==="undefined"}_R.isPrimitive=$Z;_R.isBuffer=require("buffer").Buffer.isBuffer;function KI(_){return Object.prototype.toString.call(_)}});var Q8=j((hh,c0)=>{if(typeof Object.create==="function")c0.exports=function _(E,R){if(R)E.super_=R,E.prototype=Object.create(R.prototype,{constructor:{value:E,enumerable:!1,writable:!0,configurable:!0}})};else c0.exports=function _(E,R){if(R){E.super_=R;var N=function(){};N.prototype=R.prototype,E.prototype=new N,E.prototype.constructor=E}}});var KT=j((kh,l0)=>{try{if(d0=require("util"),typeof d0.inherits!=="function")throw"";l0.exports=d0.inherits}catch(_){l0.exports=Q8()}var d0});var x8=j((mh,n0)=>{function ZZ(_,E){if(!(_ instanceof E))throw new TypeError("Cannot call a class as a function")}var z8=PN().Buffer,HO=require("util");function wZ(_,E,R){_.copy(E,R)}n0.exports=function(){function _(){ZZ(this,_),this.head=null,this.tail=null,this.length=0}return _.prototype.push=function E(R){var N={data:R,next:null};if(this.length>0)this.tail.next=N;else this.head=N;this.tail=N,++this.length},_.prototype.unshift=function E(R){var N={data:R,next:this.head};if(this.length===0)this.tail=N;this.head=N,++this.length},_.prototype.shift=function E(){if(this.length===0)return;var R=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;return--this.length,R},_.prototype.clear=function E(){this.head=this.tail=null,this.length=0},_.prototype.join=function E(R){if(this.length===0)return"";var N=this.head,A=""+N.data;while(N=N.next)A+=R+N.data;return A},_.prototype.concat=function E(R){if(this.length===0)return z8.alloc(0);if(this.length===1)return this.head.data;var N=z8.allocUnsafe(R>>>0),A=this.head,L=0;while(A)wZ(A.data,N,L),L+=A.data.length,A=A.next;return N},_}();if(HO&&HO.inspect&&HO.inspect.custom)n0.exports.prototype[HO.inspect.custom]=function(){var _=HO.inspect({length:this.length});return this.constructor.name+" "+_}});var o0=j((gh,j8)=>{var q8=YO();function QZ(_,E){var R=this,N=this._readableState&&this._readableState.destroyed,A=this._writableState&&this._writableState.destroyed;if(N||A){if(E)E(_);else if(_&&(!this._writableState||!this._writableState.errorEmitted))q8.nextTick(f8,this,_);return this}if(this._readableState)this._readableState.destroyed=!0;if(this._writableState)this._writableState.destroyed=!0;return this._destroy(_||null,function(L){if(!E&&L){if(q8.nextTick(f8,R,L),R._writableState)R._writableState.errorEmitted=!0}else if(E)E(L)}),this}function zZ(){if(this._readableState)this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1;if(this._writableState)this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1}function f8(_,E){_.emit("error",E)}j8.exports={destroy:QZ,undestroy:zZ}});var p8=j((yh,v8)=>{v8.exports=require("util").deprecate});var t0=j((bh,u8)=>{var h1=YO();u8.exports=zE;function k8(_){var E=this;this.next=null,this.entry=null,this.finish=function(){nZ(E,_)}}var xZ=["v0.10","v0.9."].indexOf(process.version.slice(0,5))>-1?setImmediate:h1.nextTick,XT;zE.WritableState=MO;var m8=Object.create(VT());m8.inherits=KT();var qZ={deprecate:p8()},g8=u0(),JI=PN().Buffer,fZ=global.Uint8Array||function(){};function jZ(_){return JI.from(_)}function vZ(_){return JI.isBuffer(_)||_ instanceof fZ}var y8=o0();m8.inherits(zE,g8);function pZ(){}function MO(_,E){XT=XT||k1(),_=_||{};var R=E instanceof XT;if(this.objectMode=!!_.objectMode,R)this.objectMode=this.objectMode||!!_.writableObjectMode;var{highWaterMark:N,writableHighWaterMark:A}=_,L=this.objectMode?16:16384;if(N||N===0)this.highWaterMark=N;else if(R&&(A||A===0))this.highWaterMark=A;else this.highWaterMark=L;this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var U=_.decodeStrings===!1;this.decodeStrings=!U,this.defaultEncoding=_.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(G){iZ(E,G)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new k8(this)}MO.prototype.getBuffer=function _(){var E=this.bufferedRequest,R=[];while(E)R.push(E),E=E.next;return R};(function(){try{Object.defineProperty(MO.prototype,"buffer",{get:qZ.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(_){}})();var XI;if(typeof Symbol==="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==="function")XI=Function.prototype[Symbol.hasInstance],Object.defineProperty(zE,Symbol.hasInstance,{value:function(_){if(XI.call(this,_))return!0;if(this!==zE)return!1;return _&&_._writableState instanceof MO}});else XI=function(_){return _ instanceof this};function zE(_){if(XT=XT||k1(),!XI.call(zE,this)&&!(this instanceof XT))return new zE(_);if(this._writableState=new MO(_,this),this.writable=!0,_){if(typeof _.write==="function")this._write=_.write;if(typeof _.writev==="function")this._writev=_.writev;if(typeof _.destroy==="function")this._destroy=_.destroy;if(typeof _.final==="function")this._final=_.final}g8.call(this)}zE.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function hZ(_,E){var R=new Error("write after end");_.emit("error",R),h1.nextTick(E,R)}function kZ(_,E,R,N){var A=!0,L=!1;if(R===null)L=new TypeError("May not write null values to stream");else if(typeof R!=="string"&&R!==void 0&&!E.objectMode)L=new TypeError("Invalid non-string/buffer chunk");if(L)_.emit("error",L),h1.nextTick(N,L),A=!1;return A}zE.prototype.write=function(_,E,R){var N=this._writableState,A=!1,L=!N.objectMode&&vZ(_);if(L&&!JI.isBuffer(_))_=jZ(_);if(typeof E==="function")R=E,E=null;if(L)E="buffer";else if(!E)E=N.defaultEncoding;if(typeof R!=="function")R=pZ;if(N.ended)hZ(this,R);else if(L||kZ(this,N,_,R))N.pendingcb++,A=gZ(this,N,L,_,E,R);return A};zE.prototype.cork=function(){var _=this._writableState;_.corked++};zE.prototype.uncork=function(){var _=this._writableState;if(_.corked){if(_.corked--,!_.writing&&!_.corked&&!_.finished&&!_.bufferProcessing&&_.bufferedRequest)b8(this,_)}};zE.prototype.setDefaultEncoding=function _(E){if(typeof E==="string")E=E.toLowerCase();if(!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((E+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+E);return this._writableState.defaultEncoding=E,this};function mZ(_,E,R){if(!_.objectMode&&_.decodeStrings!==!1&&typeof E==="string")E=JI.from(E,R);return E}Object.defineProperty(zE.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function gZ(_,E,R,N,A,L){if(!R){var U=mZ(E,N,A);if(N!==U)R=!0,A="buffer",N=U}var G=E.objectMode?1:N.length;E.length+=G;var S=E.length{var c8=YO(),oZ=Object.keys||function(_){var E=[];for(var R in _)E.push(R);return E};n8.exports=iN;var d8=Object.create(VT());d8.inherits=KT();var l8=e0(),a0=t0();d8.inherits(iN,l8);{r0=oZ(a0.prototype);for($I=0;$I{var E3=PN().Buffer,o8=E3.isEncoding||function(_){switch(_=""+_,_&&_.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function rZ(_){if(!_)return"utf8";var E;while(!0)switch(_){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return _;default:if(E)return;_=(""+_).toLowerCase(),E=!0}}function aZ(_){var E=rZ(_);if(typeof E!=="string"&&(E3.isEncoding===o8||!o8(_)))throw new Error("Unknown encoding: "+_);return E||_}s8.StringDecoder=FO;function FO(_){this.encoding=aZ(_);var E;switch(this.encoding){case"utf16le":this.text=Tw,this.end=Ow,E=4;break;case"utf8":this.fillLast=Ew,E=4;break;case"base64":this.text=Aw,this.end=Iw,E=3;break;default:this.write=Lw,this.end=Uw;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=E3.allocUnsafe(E)}FO.prototype.write=function(_){if(_.length===0)return"";var E,R;if(this.lastNeed){if(E=this.fillLast(_),E===void 0)return"";R=this.lastNeed,this.lastNeed=0}else R=0;if(R<_.length)return E?E+this.text(_,R):this.text(_,R);return E||""};FO.prototype.end=Nw;FO.prototype.text=Rw;FO.prototype.fillLast=function(_){if(this.lastNeed<=_.length)return _.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,this.lastTotal-this.lastNeed,0,_.length),this.lastNeed-=_.length};function _3(_){if(_<=127)return 0;else if(_>>5===6)return 2;else if(_>>4===14)return 3;else if(_>>3===30)return 4;return _>>6===2?-1:-2}function eZ(_,E,R){var N=E.length-1;if(N=0){if(A>0)_.lastNeed=A-1;return A}if(--N=0){if(A>0)_.lastNeed=A-2;return A}if(--N=0){if(A>0)if(A===2)A=0;else _.lastNeed=A-3;return A}return 0}function _w(_,E,R){if((E[0]&192)!==128)return _.lastNeed=0,"\uFFFD";if(_.lastNeed>1&&E.length>1){if((E[1]&192)!==128)return _.lastNeed=1,"\uFFFD";if(_.lastNeed>2&&E.length>2){if((E[2]&192)!==128)return _.lastNeed=2,"\uFFFD"}}}function Ew(_){var E=this.lastTotal-this.lastNeed,R=_w(this,_,E);if(R!==void 0)return R;if(this.lastNeed<=_.length)return _.copy(this.lastChar,E,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,E,0,_.length),this.lastNeed-=_.length}function Rw(_,E){var R=eZ(this,_,E);if(!this.lastNeed)return _.toString("utf8",E);this.lastTotal=R;var N=_.length-(R-this.lastNeed);return _.copy(this.lastChar,0,N),_.toString("utf8",E,N)}function Nw(_){var E=_&&_.length?this.write(_):"";if(this.lastNeed)return E+"\uFFFD";return E}function Tw(_,E){if((_.length-E)%2===0){var R=_.toString("utf16le",E);if(R){var N=R.charCodeAt(R.length-1);if(N>=55296&&N<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1],R.slice(0,-1)}return R}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=_[_.length-1],_.toString("utf16le",E,_.length-1)}function Ow(_){var E=_&&_.length?this.write(_):"";if(this.lastNeed){var R=this.lastTotal-this.lastNeed;return E+this.lastChar.toString("utf16le",0,R)}return E}function Aw(_,E){var R=(_.length-E)%3;if(R===0)return _.toString("base64",E);if(this.lastNeed=3-R,this.lastTotal=3,R===1)this.lastChar[0]=_[_.length-1];else this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1];return _.toString("base64",E,_.length-R)}function Iw(_){var E=_&&_.length?this.write(_):"";if(this.lastNeed)return E+this.lastChar.toString("base64",0,3-this.lastNeed);return E}function Lw(_){return _.toString(this.encoding)}function Uw(_){return _&&_.length?this.write(_):""}});var e0=j((dh,I7)=>{var $T=YO();I7.exports=CE;var Gw=Z8(),BO;CE.ReadableState=R7;var ch=require("events").EventEmitter,e8=function(_,E){return _.listeners(E).length},I3=u0(),VO=PN().Buffer,Dw=global.Uint8Array||function(){};function Sw(_){return VO.from(_)}function Cw(_){return VO.isBuffer(_)||_ instanceof Dw}var _7=Object.create(VT());_7.inherits=KT();var N3=require("util"),r_=void 0;if(N3&&N3.debuglog)r_=N3.debuglog("stream");else r_=function(){};var Pw=x8(),E7=o0(),JT;_7.inherits(CE,I3);var T3=["error","close","destroy","pause","resume"];function Yw(_,E,R){if(typeof _.prependListener==="function")return _.prependListener(E,R);if(!_._events||!_._events[E])_.on(E,R);else if(Gw(_._events[E]))_._events[E].unshift(R);else _._events[E]=[R,_._events[E]]}function R7(_,E){BO=BO||k1(),_=_||{};var R=E instanceof BO;if(this.objectMode=!!_.objectMode,R)this.objectMode=this.objectMode||!!_.readableObjectMode;var{highWaterMark:N,readableHighWaterMark:A}=_,L=this.objectMode?16:16384;if(N||N===0)this.highWaterMark=N;else if(R&&(A||A===0))this.highWaterMark=A;else this.highWaterMark=L;if(this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new Pw,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=_.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,_.encoding){if(!JT)JT=R3().StringDecoder;this.decoder=new JT(_.encoding),this.encoding=_.encoding}}function CE(_){if(BO=BO||k1(),!(this instanceof CE))return new CE(_);if(this._readableState=new R7(_,this),this.readable=!0,_){if(typeof _.read==="function")this._read=_.read;if(typeof _.destroy==="function")this._destroy=_.destroy}I3.call(this)}Object.defineProperty(CE.prototype,"destroyed",{get:function(){if(this._readableState===void 0)return!1;return this._readableState.destroyed},set:function(_){if(!this._readableState)return;this._readableState.destroyed=_}});CE.prototype.destroy=E7.destroy;CE.prototype._undestroy=E7.undestroy;CE.prototype._destroy=function(_,E){this.push(null),E(_)};CE.prototype.push=function(_,E){var R=this._readableState,N;if(!R.objectMode){if(typeof _==="string"){if(E=E||R.defaultEncoding,E!==R.encoding)_=VO.from(_,E),E="";N=!0}}else N=!0;return N7(this,_,E,!1,N)};CE.prototype.unshift=function(_){return N7(this,_,null,!0,!1)};function N7(_,E,R,N,A){var L=_._readableState;if(E===null)L.reading=!1,Fw(_,L);else{var U;if(!A)U=Hw(L,E);if(U)_.emit("error",U);else if(L.objectMode||E&&E.length>0){if(typeof E!=="string"&&!L.objectMode&&Object.getPrototypeOf(E)!==VO.prototype)E=Sw(E);if(N)if(L.endEmitted)_.emit("error",new Error("stream.unshift() after end event"));else O3(_,L,E,!0);else if(L.ended)_.emit("error",new Error("stream.push() after EOF"));else if(L.reading=!1,L.decoder&&!R)if(E=L.decoder.write(E),L.objectMode||E.length!==0)O3(_,L,E,!1);else T7(_,L);else O3(_,L,E,!1)}else if(!N)L.reading=!1}return Ww(L)}function O3(_,E,R,N){if(E.flowing&&E.length===0&&!E.sync)_.emit("data",R),_.read(0);else{if(E.length+=E.objectMode?1:R.length,N)E.buffer.unshift(R);else E.buffer.push(R);if(E.needReadable)wI(_)}T7(_,E)}function Hw(_,E){var R;if(!Cw(E)&&typeof E!=="string"&&E!==void 0&&!_.objectMode)R=new TypeError("Invalid non-string/buffer chunk");return R}function Ww(_){return!_.ended&&(_.needReadable||_.length<_.highWaterMark||_.length===0)}CE.prototype.isPaused=function(){return this._readableState.flowing===!1};CE.prototype.setEncoding=function(_){if(!JT)JT=R3().StringDecoder;return this._readableState.decoder=new JT(_),this._readableState.encoding=_,this};var t8=8388608;function Mw(_){if(_>=t8)_=t8;else _--,_|=_>>>1,_|=_>>>2,_|=_>>>4,_|=_>>>8,_|=_>>>16,_++;return _}function r8(_,E){if(_<=0||E.length===0&&E.ended)return 0;if(E.objectMode)return 1;if(_!==_)if(E.flowing&&E.length)return E.buffer.head.data.length;else return E.length;if(_>E.highWaterMark)E.highWaterMark=Mw(_);if(_<=E.length)return _;if(!E.ended)return E.needReadable=!0,0;return E.length}CE.prototype.read=function(_){r_("read",_),_=parseInt(_,10);var E=this._readableState,R=_;if(_!==0)E.emittedReadable=!1;if(_===0&&E.needReadable&&(E.length>=E.highWaterMark||E.ended)){if(r_("read: emitReadable",E.length,E.ended),E.length===0&&E.ended)A3(this);else wI(this);return null}if(_=r8(_,E),_===0&&E.ended){if(E.length===0)A3(this);return null}var N=E.needReadable;if(r_("need readable",N),E.length===0||E.length-_0)A=O7(_,E);else A=null;if(A===null)E.needReadable=!0,_=0;else E.length-=_;if(E.length===0){if(!E.ended)E.needReadable=!0;if(R!==_&&E.ended)A3(this)}if(A!==null)this.emit("data",A);return A};function Fw(_,E){if(E.ended)return;if(E.decoder){var R=E.decoder.end();if(R&&R.length)E.buffer.push(R),E.length+=E.objectMode?1:R.length}E.ended=!0,wI(_)}function wI(_){var E=_._readableState;if(E.needReadable=!1,!E.emittedReadable)if(r_("emitReadable",E.flowing),E.emittedReadable=!0,E.sync)$T.nextTick(a8,_);else a8(_)}function a8(_){r_("emit readable"),_.emit("readable"),L3(_)}function T7(_,E){if(!E.readingMore)E.readingMore=!0,$T.nextTick(Bw,_,E)}function Bw(_,E){var R=E.length;while(!E.reading&&!E.flowing&&!E.ended&&E.length1&&A7(N.pipes,_)!==-1)&&!C)r_("false write response, pause",R._readableState.awaitDrain),R._readableState.awaitDrain++,M=!0;R.pause()}}function X(g){if(r_("onerror",g),w(),_.removeListener("error",X),e8(_,"error")===0)_.emit("error",g)}Yw(_,"error",X);function $(){_.removeListener("finish",z),w()}_.once("close",$);function z(){r_("onfinish"),_.removeListener("close",$),w()}_.once("finish",z);function w(){r_("unpipe"),R.unpipe(_)}if(_.emit("pipe",R),!N.flowing)r_("pipe resume"),R.resume();return _};function Vw(_){return function(){var E=_._readableState;if(r_("pipeOnDrain",E.awaitDrain),E.awaitDrain)E.awaitDrain--;if(E.awaitDrain===0&&e8(_,"data"))E.flowing=!0,L3(_)}}CE.prototype.unpipe=function(_){var E=this._readableState,R={hasUnpiped:!1};if(E.pipesCount===0)return this;if(E.pipesCount===1){if(_&&_!==E.pipes)return this;if(!_)_=E.pipes;if(E.pipes=null,E.pipesCount=0,E.flowing=!1,_)_.emit("unpipe",this,R);return this}if(!_){var{pipes:N,pipesCount:A}=E;E.pipes=null,E.pipesCount=0,E.flowing=!1;for(var L=0;L=E.length){if(E.decoder)R=E.buffer.join("");else if(E.buffer.length===1)R=E.buffer.head.data;else R=E.buffer.concat(E.length);E.buffer.clear()}else R=$w(_,E.buffer,E.decoder);return R}function $w(_,E,R){var N;if(_L.length?L.length:_;if(U===L.length)A+=L;else A+=L.slice(0,_);if(_-=U,_===0){if(U===L.length)if(++N,R.next)E.head=R.next;else E.head=E.tail=null;else E.head=R,R.data=L.slice(U);break}++N}return E.length-=N,A}function ww(_,E){var R=VO.allocUnsafe(_),N=E.head,A=1;N.data.copy(R),_-=N.data.length;while(N=N.next){var L=N.data,U=_>L.length?L.length:_;if(L.copy(R,R.length-_,0,U),_-=U,_===0){if(U===L.length)if(++A,N.next)E.head=N.next;else E.head=E.tail=null;else E.head=N,N.data=L.slice(U);break}++A}return E.length-=A,R}function A3(_){var E=_._readableState;if(E.length>0)throw new Error('"endReadable()" called on non-empty stream');if(!E.endEmitted)E.ended=!0,$T.nextTick(Qw,E,_)}function Qw(_,E){if(!_.endEmitted&&_.length===0)_.endEmitted=!0,E.readable=!1,E.emit("end")}function A7(_,E){for(var R=0,N=_.length;R{G7.exports=uN;var QI=k1(),U7=Object.create(VT());U7.inherits=KT();U7.inherits(uN,QI);function zw(_,E){var R=this._transformState;R.transforming=!1;var N=R.writecb;if(!N)return this.emit("error",new Error("write callback called multiple times"));if(R.writechunk=null,R.writecb=null,E!=null)this.push(E);N(_);var A=this._readableState;if(A.reading=!1,A.needReadable||A.length{C7.exports=KO;var D7=U3(),S7=Object.create(VT());S7.inherits=KT();S7.inherits(KO,D7);function KO(_){if(!(this instanceof KO))return new KO(_);D7.call(this,_)}KO.prototype._transform=function(_,E,R){R(null,_)}});var Y7=j((lE,zI)=>{var YN=require("stream");if(process.env.READABLE_STREAM==="disable"&&YN)zI.exports=YN,lE=zI.exports=YN.Readable,lE.Readable=YN.Readable,lE.Writable=YN.Writable,lE.Duplex=YN.Duplex,lE.Transform=YN.Transform,lE.PassThrough=YN.PassThrough,lE.Stream=YN;else lE=zI.exports=e0(),lE.Stream=YN||lE,lE.Readable=lE,lE.Writable=t0(),lE.Duplex=k1(),lE.Transform=U3(),lE.PassThrough=P7()});var G3=j((oh,W7)=>{var qw=MT(),fw=require("fs"),jR=gN(),jw=X8(),H7=D1(),vw=J8(),pw=Y7(),hw=require("util");W7.exports=YR;hw.inherits(YR,H7);function YR(_,E){H7.call(this,_,E),this.sql=_.sql,this.values=_.values,this.typeCast=_.typeCast===void 0?!0:_.typeCast,this.nestTables=_.nestTables||!1,this._resultSet=null,this._results=[],this._fields=[],this._index=0,this._loadError=null}YR.prototype.start=function(){this.emit("packet",new jR.ComQueryPacket(this.sql))};YR.prototype.determinePacket=function _(E,R){var N=this._resultSet;if(!N)switch(E){case 0:return jR.OkPacket;case 251:return jR.LocalInfileRequestPacket;case 255:return jR.ErrorPacket;default:return jR.ResultSetHeaderPacket}if(N.eofPackets.length===0)return N.fieldPackets.length0?this._results:void 0,N=this._fields.length>0?this._fields:void 0;E.index=this._index,E.sql=this.sql,this.end(E,R,N)};YR.prototype.LocalInfileRequestPacket=function(_){if(this._connection.config.clientFlags&qw.CLIENT_LOCAL_FILES)this._sendLocalDataFile(_.filename);else this._loadError=new Error("Load local files command is disabled"),this._loadError.code="LOCAL_FILES_DISABLED",this._loadError.fatal=!1,this.emit("packet",new jR.EmptyPacket)};YR.prototype.ResultSetHeaderPacket=function(_){this._resultSet=new jw(_)};YR.prototype.FieldPacket=function(_){this._resultSet.fieldPackets.push(_)};YR.prototype.EofPacket=function(_){if(this._resultSet.eofPackets.push(_),this._resultSet.eofPackets.length===1&&!this._callback)this.emit("fields",this._resultSet.fieldPackets,this._index);if(this._resultSet.eofPackets.length!==2)return;if(this._callback)this._results.push(this._resultSet.rows),this._fields.push(this._resultSet.fieldPackets);this._index++,this._resultSet=null,this._handleFinalResultPacket(_)};YR.prototype._handleFinalResultPacket=function(_){if(_.serverStatus&vw.SERVER_MORE_RESULTS_EXISTS)return;var E=this._results.length>1?this._results:this._results[0],R=this._fields.length>1?this._fields:this._fields[0];this.end(this._loadError,E,R)};YR.prototype.RowDataPacket=function(_,E,R){if(_.parse(E,this._resultSet.fieldPackets,this.typeCast,this.nestTables,R),this._callback)this._resultSet.rows.push(_);else this.emit("result",_,this._index)};YR.prototype._sendLocalDataFile=function(_){var E=this,R=fw.createReadStream(_,{flag:"r",encoding:null,autoClose:!0});this.on("pause",function(){R.pause()}),this.on("resume",function(){R.resume()}),R.on("data",function(N){E.emit("packet",new jR.LocalDataFilePacket(N))}),R.on("error",function(N){E._loadError=N,R.emit("end")}),R.on("end",function(){E.emit("packet",new jR.EmptyPacket)})};YR.prototype.stream=function(_){var E=this;_=_||{},_.objectMode=!0;var R=new pw(_);return R._read=function(){E._connection&&E._connection.resume()},R.once("end",function(){process.nextTick(function(){R.emit("close")})}),this.on("result",function(N,A){if(!R.push(N))E._connection.pause();R.emit("result",N,A)}),this.on("error",function(N){R.emit("error",N)}),this.on("end",function(){R.push(null)}),this.on("fields",function(N,A){R.emit("fields",N,A)}),R}});var F7=j((sh,M7)=>{var XO=D1(),kw=require("util"),mw=gN();M7.exports=xI;kw.inherits(xI,XO);function xI(_,E){if(!E&&typeof _==="function")E=_,_={};XO.call(this,_,E),this._started=!1}xI.prototype.end=function _(E){if(this._ended)return;if(!this._started){XO.prototype.end.call(this,E);return}if(E&&E.code==="ECONNRESET"&&E.syscall==="read"){XO.prototype.end.call(this);return}XO.prototype.end.call(this,E)};xI.prototype.start=function(){this._started=!0,this.emit("packet",new mw.ComQuitPacket)}});var X7=j((th,K7)=>{var B7=D1(),gw=require("util"),V7=gN();K7.exports=JO;gw.inherits(JO,B7);function JO(_,E){if(!E&&typeof _==="function")E=_,_={};B7.call(this,_,E)}JO.prototype.start=function(){this.emit("packet",new V7.ComStatisticsPacket)};JO.prototype.StatisticsPacket=function(_){this.end(null,_)};JO.prototype.determinePacket=function _(E){if(E===85)return V7.StatisticsPacket;return}});var J7=j((C1)=>{C1.ChangeUser=P8();C1.Handshake=M8();C1.Ping=V8();C1.Query=G3();C1.Quit=F7();C1.Sequence=D1();C1.Statistics=X7()});var z7=j((ah,Q7)=>{var $7=Math.pow(2,16),Z7=Math.pow(2,24),w7=Math.pow(2,8),yw=Math.pow(2,53),qI=Math.pow(2,24)-1,m1=PN().Buffer;Q7.exports=lR;function lR(){this._buffer=null,this._offset=0}lR.prototype.toBuffer=function _(E){if(!this._buffer)this._buffer=m1.alloc(0),this._offset=0;var R=this._buffer,N=this._offset,A=Math.floor(N/qI)+1;this._buffer=m1.allocUnsafe(N+A*4),this._offset=0;for(var L=0;L>R*8&255};lR.prototype.writeFiller=function(_){this._allocate(_);for(var E=0;E<_;E++)this._buffer[this._offset++]=0};lR.prototype.writeNullTerminatedString=function(_,E){_=_||"",_=_+"";var R=m1.byteLength(_,E||"utf-8")+1;this._allocate(R),this._buffer.write(_,this._offset,E),this._buffer[this._offset+R-1]=0,this._offset+=R};lR.prototype.writeString=function(_){_=_||"",_=_+"";var E=m1.byteLength(_,"utf-8");this._allocate(E),this._buffer.write(_,this._offset,"utf-8"),this._offset+=E};lR.prototype.writeBuffer=function(_){var E=_.length;this._allocate(E),_.copy(this._buffer,this._offset),this._offset+=E};lR.prototype.writeLengthCodedNumber=function(_){if(_===null){this._allocate(1),this._buffer[this._offset++]=251;return}if(_<=250){this._allocate(1),this._buffer[this._offset++]=_;return}if(_>yw)throw new Error('writeLengthCodedNumber: JS precision range exceeded, your number is > 53 bit: "'+_+'"');if(_<$7)this._allocate(3),this._buffer[this._offset++]=252;else if(_>8&255,_<$7)return;if(this._buffer[this._offset++]=_>>16&255,_>24&255,_=_.toString(2),_=_.substr(0,_.length-32),_=parseInt(_,2),this._buffer[this._offset++]=_&255,this._buffer[this._offset++]=_>>8&255,this._buffer[this._offset++]=_>>16&255,this._buffer[this._offset++]=0};lR.prototype.writeLengthCodedBuffer=function(_){var E=_.length;this.writeLengthCodedNumber(E),this.writeBuffer(_)};lR.prototype.writeNullTerminatedBuffer=function(_){this.writeBuffer(_),this.writeFiller(1)};lR.prototype.writeLengthCodedString=function(_){if(_===null){this.writeLengthCodedNumber(null);return}_=_===void 0?"":String(_);var E=m1.byteLength(_,"utf-8");if(this.writeLengthCodedNumber(E),!E)return;this._allocate(E),this._buffer.write(_,this._offset,"utf-8"),this._offset+=E};lR.prototype._allocate=function _(E){if(!this._buffer){this._buffer=m1.alloc(Math.max(w7,E)),this._offset=0;return}var R=this._buffer.length-this._offset;if(R>=E)return;var N=this._buffer.length+Math.max(w7,E),A=this._buffer;this._buffer=m1.alloc(N),A.copy(this._buffer)}});var j7=j((eh,f7)=>{var bw=L5(),cN=J7(),$O=gN(),x7=require("stream").Stream,q7=require("util"),iw=z7();f7.exports=IE;q7.inherits(IE,x7);function IE(_){x7.call(this),_=_||{},this.readable=!0,this.writable=!0,this._config=_.config||{},this._connection=_.connection,this._callback=null,this._fatalError=null,this._quitSequence=null,this._handshake=!1,this._handshaked=!1,this._ended=!1,this._destroyed=!1,this._queue=[],this._handshakeInitializationPacket=null,this._parser=new bw({onError:this.handleParserError.bind(this),onPacket:this._parsePacket.bind(this),config:this._config})}IE.prototype.write=function(_){return this._parser.write(_),!0};IE.prototype.handshake=function _(E,R){if(typeof E==="function")R=E,E={};E=E||{},E.config=this._config;var N=this._enqueue(new cN.Handshake(E,R));return this._handshake=!0,N};IE.prototype.query=function _(E,R){return this._enqueue(new cN.Query(E,R))};IE.prototype.changeUser=function _(E,R){return this._enqueue(new cN.ChangeUser(E,R))};IE.prototype.ping=function _(E,R){if(typeof E==="function")R=E,E={};return this._enqueue(new cN.Ping(E,R))};IE.prototype.stats=function _(E,R){if(typeof E==="function")R=E,E={};return this._enqueue(new cN.Statistics(E,R))};IE.prototype.quit=function _(E,R){if(typeof E==="function")R=E,E={};var N=this,A=this._enqueue(new cN.Quit(E,R));return A.on("end",function(){N.end()}),this._quitSequence=A};IE.prototype.end=function(){if(this._ended)return;if(this._ended=!0,this._quitSequence&&(this._quitSequence._ended||this._queue[0]===this._quitSequence)){this._quitSequence.end(),this.emit("end");return}var _=new Error("Connection lost: The server closed the connection.");_.fatal=!0,_.code="PROTOCOL_CONNECTION_LOST",this._delegateError(_)};IE.prototype.pause=function(){this._parser.pause();var _=this._queue[0];if(_&&_.emit)_.emit("pause")};IE.prototype.resume=function(){this._parser.resume();var _=this._queue[0];if(_&&_.emit)_.emit("resume")};IE.prototype._enqueue=function(_){if(!this._validateEnqueue(_))return _;if(this._config.trace)_._callSite=_._callSite||new Error;this._queue.push(_),this.emit("enqueue",_);var E=this;if(_.on("error",function(R){E._delegateError(R,_)}).on("packet",function(R){_._timer.active(),E._emitPacket(R)}).on("timeout",function(){var R=new Error(_.constructor.name+" inactivity timeout");R.code="PROTOCOL_SEQUENCE_TIMEOUT",R.fatal=!0,R.timeout=_._timeout,E._delegateError(R,_)}),_.constructor===cN.Handshake)_.on("start-tls",function(){_._timer.active(),E._connection._startTLS(function(R){if(R){R.code="HANDSHAKE_SSL_ERROR",R.fatal=!0,_.end(R);return}_._timer.active(),_._tlsUpgradeCompleteHandler()})}),_.on("end",function(){if(E._handshaked=!0,!E._fatalError)E.emit("handshake",E._handshakeInitializationPacket)});if(_.on("end",function(){E._dequeue(_)}),this._queue.length===1)this._parser.resetPacketNumber(),this._startSequence(_);return _};IE.prototype._validateEnqueue=function _(E){var R,N="Cannot enqueue "+E.constructor.name;if(this._fatalError)R=new Error(N+" after fatal error."),R.code="PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR";else if(this._quitSequence)R=new Error(N+" after invoking quit."),R.code="PROTOCOL_ENQUEUE_AFTER_QUIT";else if(this._destroyed)R=new Error(N+" after being destroyed."),R.code="PROTOCOL_ENQUEUE_AFTER_DESTROY";else if((this._handshake||this._handshaked)&&E.constructor===cN.Handshake)R=new Error(N+" after already enqueuing a Handshake."),R.code="PROTOCOL_ENQUEUE_HANDSHAKE_TWICE";else return!0;var A=this;return R.fatal=!1,E.on("error",function(L){A._delegateError(L,E)}),process.nextTick(function(){E.end(R)}),!1};IE.prototype._parsePacket=function(){var _=this._queue[0];if(!_){var E=new Error("Received packet with no active sequence.");E.code="PROTOCOL_STRAY_PACKET",E.fatal=!0,this._delegateError(E);return}var R=this._determinePacket(_),N=new R({protocol41:this._config.protocol41}),A=R.name;if(R===$O.RowDataPacket){if(_.RowDataPacket(N,this._parser,this._connection),this._config.debug)this._debugPacket(!0,N);return}if(this._config.debug)this._parsePacketDebug(N);else N.parse(this._parser);if(R===$O.HandshakeInitializationPacket)this._handshakeInitializationPacket=N,this.emit("initialize",N);if(_._timer.active(),!_[A]){var E=new Error("Received packet in the wrong sequence.");E.code="PROTOCOL_INCORRECT_PACKET_SEQUENCE",E.fatal=!0,this._delegateError(E);return}_[A](N)};IE.prototype._parsePacketDebug=function _(E){try{E.parse(this._parser)}finally{this._debugPacket(!0,E)}};IE.prototype._emitPacket=function(_){var E=new iw;if(_.write(E),this.emit("data",E.toBuffer(this._parser)),this._config.debug)this._debugPacket(!1,_)};IE.prototype._determinePacket=function(_){var E=this._parser.peak();if(_.determinePacket){var R=_.determinePacket(E,this._parser);if(R)return R}switch(E){case 0:return $O.OkPacket;case 254:return $O.EofPacket;case 255:return $O.ErrorPacket}throw new Error("Could not determine packet, firstByte = "+E)};IE.prototype._dequeue=function(E){if(E._timer.stop(),this._fatalError)return;this._queue.shift();var E=this._queue[0];if(!E){this.emit("drain");return}this._parser.resetPacketNumber(),this._startSequence(E)};IE.prototype._startSequence=function(_){if(_._timeout>0&&isFinite(_._timeout))_._timer.start(_._timeout);if(_.constructor===cN.ChangeUser)_.start(this._handshakeInitializationPacket);else _.start()};IE.prototype.handleNetworkError=function(_){_.fatal=!0;var E=this._queue[0];if(E)E.end(_);else this._delegateError(_)};IE.prototype.handleParserError=function _(E){var R=this._queue[0];if(R)R.end(E);else this._delegateError(E)};IE.prototype._delegateError=function(_,E){if(this._fatalError)return;if(_.fatal)this._fatalError=_;if(this._shouldErrorBubbleUp(_,E))this.emit("unhandledError",_);else if(_.fatal){var R=this._queue;process.nextTick(function(){R.forEach(function(N){N.end(_)}),R.length=0})}if(_.fatal)this.emit("end",_)};IE.prototype._shouldErrorBubbleUp=function(_,E){if(E){if(E.hasErrorHandler())return!1;else if(!_.fatal)return!0}return _.fatal&&!this._hasPendingErrorHandlers()};IE.prototype._hasPendingErrorHandlers=function(){return this._queue.some(function(_){return _.hasErrorHandler()})};IE.prototype.destroy=function(){if(this._destroyed=!0,this._parser.pause(),this._connection.state!=="disconnected"){if(!this._ended)this.end()}};IE.prototype._debugPacket=function(_,E){var R=this._connection,N=_?"<--":"-->",A=E.constructor.name,L=R&&R.threadId!==null?" ("+R.threadId+")":"";if(Array.isArray(this._config.debug)&&this._config.debug.indexOf(A)===-1)return;var U=q7.inspect(E).replace(/^[^{]+/,"");console.log("%s%s %s %s\n",N,L,A,U)}});var h7=j((p7)=>{var vE=p7,v7=/`/g,uw=/\./g,D3=/[\0\b\t\n\r\x1a\"\'\\]/g,cw={"\0":"\\0","\b":"\\b","\t":"\\t","\n":"\\n","\r":"\\r","\x1A":"\\Z",'"':'\\"',"\'":"\\\'","\\":"\\\\"};vE.escapeId=function _(E,R){if(Array.isArray(E)){var N="";for(var A=0;A2)continue;var M=Y===2?vE.escapeId(R[S]):vE.escape(R[S],N,A);G+=E.slice(L,C.index)+M,L=U.lastIndex,S++}if(L===0)return E;if(L{k7.exports=h7()});var S3=j((Rk,g7)=>{g7.exports=m7()});var ZO=j((Nk,i7)=>{var lw=require("crypto"),vI=require("events"),y7=require("net"),jI=require("tls"),nw=CI(),ow=j7(),P3=S3(),b7=G3(),sw=require("util");i7.exports=a_;sw.inherits(a_,vI.EventEmitter);function a_(_){vI.EventEmitter.call(this),this.config=_.config,this._socket=_.socket,this._protocol=new ow({config:this.config,connection:this}),this._connectCalled=!1,this.state="disconnected",this.threadId=null}a_.createQuery=function _(E,R,N){if(E instanceof b7)return E;var A=N,L={};if(typeof E==="function")A=E;else if(typeof E==="object"){if(L=Object.create(E),typeof R==="function")A=R;else if(R!==void 0)Object.defineProperty(L,"values",{value:R})}else if(L.sql=E,typeof R==="function")A=R;else if(R!==void 0)L.values=R;if(A!==void 0){if(A=y1(null,A),A===void 0)throw new TypeError("argument callback must be a function when provided")}return new b7(L,A)};a_.prototype.connect=function _(E,R){if(!R&&typeof E==="function")R=E,E={};if(!this._connectCalled){if(this._connectCalled=!0,this._socket=this.config.socketPath?y7.createConnection(this.config.socketPath):y7.createConnection(this.config.port,this.config.host),vI.usingDomains)this._socket.domain=this.domain;var N=this;if(this._protocol.on("data",function(L){N._socket.write(L)}),this._socket.on("data",C3(N,function(L){N._protocol.write(L)})),this._protocol.on("end",function(){N._socket.end()}),this._socket.on("end",C3(N,function(){N._protocol.end()})),this._socket.on("error",this._handleNetworkError.bind(this)),this._socket.on("connect",this._handleProtocolConnect.bind(this)),this._protocol.on("handshake",this._handleProtocolHandshake.bind(this)),this._protocol.on("initialize",this._handleProtocolInitialize.bind(this)),this._protocol.on("unhandledError",this._handleProtocolError.bind(this)),this._protocol.on("drain",this._handleProtocolDrain.bind(this)),this._protocol.on("end",this._handleProtocolEnd.bind(this)),this._protocol.on("enqueue",this._handleProtocolEnqueue.bind(this)),this.config.connectTimeout){var A=this._handleConnectTimeout.bind(this);this._socket.setTimeout(this.config.connectTimeout,A),this._socket.once("connect",function(){this.setTimeout(0,A)})}}this._protocol.handshake(E,y1(this,R))};a_.prototype.changeUser=function _(E,R){if(!R&&typeof E==="function")R=E,E={};this._implyConnect();var N=E.charset?nw.getCharsetNumber(E.charset):this.config.charsetNumber;return this._protocol.changeUser({user:E.user||this.config.user,password:E.password||this.config.password,database:E.database||this.config.database,timeout:E.timeout,charsetNumber:N,currentConfig:this.config},y1(this,R))};a_.prototype.beginTransaction=function _(E,R){if(!R&&typeof E==="function")R=E,E={};return E=E||{},E.sql="START TRANSACTION",E.values=null,this.query(E,R)};a_.prototype.commit=function _(E,R){if(!R&&typeof E==="function")R=E,E={};return E=E||{},E.sql="COMMIT",E.values=null,this.query(E,R)};a_.prototype.rollback=function _(E,R){if(!R&&typeof E==="function")R=E,E={};return E=E||{},E.sql="ROLLBACK",E.values=null,this.query(E,R)};a_.prototype.query=function _(E,R,N){var A=a_.createQuery(E,R,N);if(A._connection=this,!(typeof E==="object"&&("typeCast"in E)))A.typeCast=this.config.typeCast;if(A.sql)A.sql=this.format(A.sql,A.values);if(A._callback)A._callback=y1(this,A._callback);return this._implyConnect(),this._protocol._enqueue(A)};a_.prototype.ping=function _(E,R){if(!R&&typeof E==="function")R=E,E={};this._implyConnect(),this._protocol.ping(E,y1(this,R))};a_.prototype.statistics=function _(E,R){if(!R&&typeof E==="function")R=E,E={};this._implyConnect(),this._protocol.stats(E,y1(this,R))};a_.prototype.end=function _(E,R){var N=R,A=E;if(!R&&typeof E==="function")N=E,A=null;if(A=Object.create(A||null),A.timeout===void 0)A.timeout=30000;this._implyConnect(),this._protocol.quit(A,y1(this,N))};a_.prototype.destroy=function(){this.state="disconnected",this._implyConnect(),this._socket.destroy(),this._protocol.destroy()};a_.prototype.pause=function(){this._socket.pause(),this._protocol.pause()};a_.prototype.resume=function(){this._socket.resume(),this._protocol.resume()};a_.prototype.escape=function(_){return P3.escape(_,!1,this.config.timezone)};a_.prototype.escapeId=function _(E){return P3.escapeId(E,!1)};a_.prototype.format=function(_,E){if(typeof this.config.queryFormat==="function")return this.config.queryFormat.call(this,_,E,this.config.timezone);return P3.format(_,E,this.config.stringifyObjects,this.config.timezone)};if(jI.TLSSocket)a_.prototype._startTLS=function _(E){var R=this;tw(this.config,function(N,A){if(N){E(N);return}R._socket.removeAllListeners("data"),R._protocol.removeAllListeners("data");var L=R.config.ssl.rejectUnauthorized,U=!1,G=new jI.TLSSocket(R._socket,{rejectUnauthorized:L,requestCert:!0,secureContext:A,isServer:!1});G.on("_tlsError",function(S){if(U)R._handleNetworkError(S);else E(S)}),G.pipe(R._protocol),R._protocol.on("data",function(S){G.write(S)}),G.on("secure",function(){U=!0,E(L?this.ssl.verifyError():null)}),G._start()})};else a_.prototype._startTLS=function _(E){var R=this,N=lw.createCredentials({ca:this.config.ssl.ca,cert:this.config.ssl.cert,ciphers:this.config.ssl.ciphers,key:this.config.ssl.key,passphrase:this.config.ssl.passphrase}),A=this.config.ssl.rejectUnauthorized,L=!1,U=jI.createSecurePair(N,!1,!0,A);U.on("error",function(G){if(L)R._handleNetworkError(G);else E(G)}),this._socket.removeAllListeners("data"),this._protocol.removeAllListeners("data"),U.encrypted.pipe(this._socket),this._socket.on("data",function(G){U.encrypted.write(G)}),U.cleartext.pipe(this._protocol),this._protocol.on("data",function(G){U.cleartext.write(G)}),U.on("secure",function(){if(L=!0,!A){E();return}var G=this.ssl.verifyError(),S=G;if(typeof S==="string")S=new Error(G),S.code=G;E(S)}),U._cycle=U.cycle,U.cycle=function G(){if(this.ssl&&this.ssl.error)this.error();return this._cycle.apply(this,arguments)}};a_.prototype._handleConnectTimeout=function(){if(this._socket)this._socket.setTimeout(0),this._socket.destroy();var _=new Error("connect ETIMEDOUT");_.errorno="ETIMEDOUT",_.code="ETIMEDOUT",_.syscall="connect",this._handleNetworkError(_)};a_.prototype._handleNetworkError=function(_){this._protocol.handleNetworkError(_)};a_.prototype._handleProtocolError=function(_){this.state="protocol_error",this.emit("error",_)};a_.prototype._handleProtocolDrain=function(){this.emit("drain")};a_.prototype._handleProtocolConnect=function(){this.state="connected",this.emit("connect")};a_.prototype._handleProtocolHandshake=function _(){this.state="authenticated"};a_.prototype._handleProtocolInitialize=function _(E){this.threadId=E.threadId};a_.prototype._handleProtocolEnd=function(_){this.state="disconnected",this.emit("end",_)};a_.prototype._handleProtocolEnqueue=function _(E){this.emit("enqueue",E)};a_.prototype._implyConnect=function(){if(!this._connectCalled)this.connect()};function tw(_,E){var R=null,N=null;try{R=jI.createSecureContext({ca:_.ssl.ca,cert:_.ssl.cert,ciphers:_.ssl.ciphers,key:_.ssl.key,passphrase:_.ssl.passphrase})}catch(A){N=A}E(N,R)}function rw(_){return function(){var E=[],R;while(process.domain)E.shift(process.domain),process.domain.exit();try{R=_.apply(this,arguments)}finally{for(var N=0;N{var aw=require("util").inherits,pI=ZO(),ew=require("events");u7.exports=b1;aw(b1,pI);function b1(_,E){if(pI.call(this,E),this._pool=_,ew.usingDomains)this.domain=_.domain;this.on("end",this._removeFromPool),this.on("error",function(R){if(R.fatal)this._removeFromPool()})}b1.prototype.release=function _(){var E=this._pool;if(!E||E._closed)return;return E.releaseConnection(this)};b1.prototype._realEnd=pI.prototype.end;b1.prototype.end=function(){console.warn("Calling conn.end() to release a pooled connection is deprecated. In next version calling conn.end() will be restored to default conn.end() behavior. Use conn.release() instead."),this.release()};b1.prototype.destroy=function(){pI.prototype.destroy.apply(this,arguments),this._removeFromPool(this)};b1.prototype._removeFromPool=function _(){if(!this._pool||this._pool._closed)return;var E=this._pool;this._pool=null,E._purgeConnection(this)}});var Y3=j((Ok,n7)=>{var d7=H3(),_Q=ZO(),l7=require("events").EventEmitter,EQ=require("util"),RQ=c7();n7.exports=vR;EQ.inherits(vR,l7);function vR(_){l7.call(this),this.config=_.config,this.config.connectionConfig.pool=this,this._acquiringConnections=[],this._allConnections=[],this._freeConnections=[],this._connectionQueue=[],this._closed=!1}vR.prototype.getConnection=function(_){if(this._closed){var E=new Error("Pool is closed.");E.code="POOL_CLOSED",process.nextTick(function(){_(E)});return}var R,N=this;if(this._freeConnections.length>0){R=this._freeConnections.shift(),this.acquireConnection(R,_);return}if(this.config.connectionLimit===0||this._allConnections.length=this.config.queueLimit){process.nextTick(function(){var N=new Error("Queue limit reached.");N.code="POOL_ENQUEUELIMIT",E(N)});return}var R=process.domain?process.domain.bind(E):E;this._connectionQueue.push(R),this.emit("enqueue")};vR.prototype._needsChangeUser=function _(E){var R=E.config,N=this.config.connectionConfig;return R.user!==N.user||R.database!==N.database||R.password!==N.password||R.charsetNumber!==N.charsetNumber};vR.prototype._purgeConnection=function _(E,R){var N=R||function(){};if(E.state==="disconnected")E.destroy();if(this._removeConnection(E),E.state!=="disconnected"&&!E._protocol._quitSequence){E._realEnd(N);return}process.nextTick(N)};vR.prototype._removeConnection=function(_){_._pool=null,hI(this._allConnections,_),hI(this._freeConnections,_),this.releaseConnection(_)};vR.prototype.escape=function(_){return d7.escape(_,this.config.connectionConfig.stringifyObjects,this.config.connectionConfig.timezone)};vR.prototype.escapeId=function _(E){return d7.escapeId(E,!1)};function hI(_,E){var R;if((R=_.indexOf(E))!==-1)_.splice(R,1)}});var M3=j((Ak,s7)=>{var W3=CI();s7.exports=o7;function o7(_){if(typeof _==="string")_=W3.parseUrl(_);this.acquireTimeout=_.acquireTimeout===void 0?1e4:Number(_.acquireTimeout),this.connectionConfig=new W3(_),this.waitForConnections=_.waitForConnections===void 0?!0:Boolean(_.waitForConnections),this.connectionLimit=_.connectionLimit===void 0?10:Number(_.connectionLimit),this.queueLimit=_.queueLimit===void 0?0:Number(_.queueLimit)}o7.prototype.newConnectionConfig=function _(){var E=new W3(this.connectionConfig);return E.clientFlags=this.connectionConfig.clientFlags,E.maxPacketSize=this.connectionConfig.maxPacketSize,E}});var B3=j((Ik,t7)=>{var F3=t7.exports={};F3.RR=function _(){var E=0;return function(R){if(E>=R.length)E=0;var N=R[E++];return N}};F3.RANDOM=function _(){return function(E){return E[Math.floor(Math.random()*E.length)]}};F3.ORDER=function _(){return function(E){return E[0]}}});var a7=j((Lk,r7)=>{var NQ=ZO(),TQ=B3();r7.exports=kI;function kI(_,E,R){this._cluster=_,this._pattern=E,this._selector=new TQ[R]}kI.prototype.getConnection=function(_){var E=this._getClusterNode(),R=this._cluster,N=this;if(E===null){var A=null;if(this._cluster._findNodeIds(this._pattern,!0).length!==0)A=new Error("Pool does not have online node."),A.code="POOL_NONEONLINE";else A=new Error("Pool does not exist."),A.code="POOL_NOEXIST";_(A);return}R._getConnection(E,function(L,U){var G=L&&R._canRetry&&R._findNodeIds(N._pattern).length!==0;if(G){N.getConnection(_);return}if(L){_(L);return}_(null,U)})};kI.prototype.query=function(_,E,R){var N=this._cluster,A=this._getClusterNode(),L=NQ.createQuery(_,E,R),U=this;if(A===null){var G=null;if(this._cluster._findNodeIds(this._pattern,!0).length!==0)G=new Error("Pool does not have online node."),G.code="POOL_NONEONLINE";else G=new Error("Pool does not exist."),G.code="POOL_NOEXIST";return process.nextTick(function(){L.on("error",function(){}),L.end(G)}),L}if(!(typeof _==="object"&&("typeCast"in _)))L.typeCast=A.pool.config.connectionConfig.typeCast;if(A.pool.config.connectionConfig.trace)L._callSite=new Error;return N._getConnection(A,function(S,C){var Y=S&&N._canRetry&&N._findNodeIds(U._pattern).length!==0;if(Y){U.query(L);return}if(S){L.on("error",function(){}),L.end(S);return}L.once("end",function(){C.release()}),C.query(L)}),L};kI.prototype._getClusterNode=function _(){var E=this._cluster._findNodeIds(this._pattern),R;switch(E.length){case 0:R=null;break;case 1:R=E[0];break;default:R=this._selector(E);break}return R!==null?this._cluster._getNode(R):null}});var NS=j((Uk,RS)=>{var OQ=Y3(),e7=M3(),AQ=a7(),IQ=B3(),LQ=require("util"),_S=require("events").EventEmitter;RS.exports=HR;function HR(_){_S.call(this),_=_||{},this._canRetry=typeof _.canRetry==="undefined"?!0:_.canRetry,this._defaultSelector=_.defaultSelector||"RR",this._removeNodeErrorCount=_.removeNodeErrorCount||5,this._restoreNodeTimeout=_.restoreNodeTimeout||0,this._closed=!1,this._findCaches=Object.create(null),this._lastId=0,this._namespaces=Object.create(null),this._nodes=Object.create(null)}LQ.inherits(HR,_S);HR.prototype.add=function _(E,R){if(this._closed)throw new Error("PoolCluster is closed.");var N=typeof E==="object"?"CLUSTER::"+ ++this._lastId:String(E);if(this._nodes[N]!==void 0)throw new Error('Node ID "'+N+'" is already defined in PoolCluster.');var A=typeof E!=="object"?new e7(R):new e7(E);this._nodes[N]={id:N,errorCount:0,pool:new OQ({config:A}),_offlineUntil:0},this._clearFindCaches()};HR.prototype.end=function _(E){var R=E!==void 0?E:DQ;if(typeof R!=="function")throw TypeError("callback argument must be a function");if(this._closed){process.nextTick(R);return}this._closed=!0;var N=!1,A=Object.keys(this._nodes),L=0;function U(Y){if(!N&&(Y||--L<=0))N=!0,R(Y)}for(var G=0;Gthis._removeNodeErrorCount)R=this._removeNodeErrorCount;if(R<1)R=1;if(E.errorCount=R-1,E._offlineUntil)E._offlineUntil=0,this.emit("online",E.id)};HR.prototype._findNodeIds=function _(E,R){var N=0,A=this._findCaches[E];if(A===void 0){var L=GQ(E),U=Object.keys(this._nodes);A=U.filter(function(G){return G.match(L)}),this._findCaches[E]=A}if(R)return A;return A.filter(function(G){var S=this._getNode(G);if(!S._offlineUntil)return!0;if(!N)N=ES();return S._offlineUntil<=N},this)};HR.prototype._getNode=function _(E){return this._nodes[E]||null};HR.prototype._increaseErrorCount=function _(E){var R=++E.errorCount;if(this._removeNodeErrorCount>R)return;if(this._restoreNodeTimeout>0){E._offlineUntil=ES()+this._restoreNodeTimeout,this.emit("offline",E.id);return}this._removeNode(E),this.emit("remove",E.id)};HR.prototype._getConnection=function(_,E){var R=this;_.pool.getConnection(function(N,A){if(N){R._increaseErrorCount(_),E(N);return}else R._decreaseErrorCount(_);A._clusterId=_.id,E(null,A)})};HR.prototype._removeNode=function _(E){delete this._nodes[E.id],this._clearFindCaches(),E.pool.end(SQ)};function ES(){var _;if(typeof process.hrtime==="function")_=process.hrtime(),_=_[0]*1000+_[1]*0.000001;else _=process.uptime()*1000;return Math.floor(_)}function UQ(_){return typeof _==="object"&&Object.prototype.toString.call(_)==="[object RegExp]"}function GQ(_){if(UQ(_))return _;var E=_.replace(/([.+?^=!:${}()|\[\]\/\\])/g,"\\$1").replace(/\*/g,".*");return new RegExp("^"+E+"$")}function DQ(_){if(_)throw _}function SQ(){}});var H3=j((HN)=>{var TS=Object.create(null);HN.createConnection=function _(E){var R=NN("Connection"),N=NN("ConnectionConfig");return new R({config:new N(E)})};HN.createPool=function _(E){var R=NN("Pool"),N=NN("PoolConfig");return new R({config:new N(E)})};HN.createPoolCluster=function _(E){var R=NN("PoolCluster");return new R(E)};HN.createQuery=function _(E,R,N){var A=NN("Connection");return A.createQuery(E,R,N)};HN.escape=function _(E,R,N){var A=NN("SqlString");return A.escape(E,R,N)};HN.escapeId=function _(E,R){var N=NN("SqlString");return N.escapeId(E,R)};HN.format=function _(E,R,N,A){var L=NN("SqlString");return L.format(E,R,N,A)};HN.raw=function _(E){var R=NN("SqlString");return R.raw(E)};Object.defineProperty(HN,"Types",{get:NN.bind(null,"Types")});function NN(_){var E=TS[_];if(E!==void 0)return E;switch(_){case"Connection":E=ZO();break;case"ConnectionConfig":E=CI();break;case"Pool":E=Y3();break;case"PoolCluster":E=NS();break;case"PoolConfig":E=M3();break;case"SqlString":E=S3();break;case"Types":E=HI();break;default:throw new Error("Cannot find class \'"+_+"\'")}return TS[_]=E,E}});var ZT=j((Dk,OS)=>{var CQ=require("url");OS.exports=(_)=>{let E=null,R=0,N=0,A=0,L={},U={updated:0},G={updated:0},S=["ER_TOO_MANY_USER_CONNECTIONS","ER_CON_COUNT_ERROR","ER_USER_LIMIT_REACHED","ER_OUT_OF_RESOURCES","PROTOCOL_CONNECTION_LOST","PROTOCOL_SEQUENCE_TIMEOUT","ETIMEDOUT"],C,Y,M,H,X,$,z,w,g,d,t,s,m,k,e,o,c,S_,U_,V_=()=>R,K_=()=>R++,z_=()=>R=0,r=()=>E,A_=()=>E=null,L_=()=>A=0,P_=()=>N,p_=()=>L,l_=(I_)=>{if(typeof I_==="string")return Object.assign(L,k_(I_));return Object.assign(L,I_)},j_=(I_)=>new U_((G_)=>setTimeout(G_,I_)),a=(I_,G_)=>Math.floor(Math.random()*(G_-I_+1))+I_,WE=()=>a(0,Math.min(M,H*2**A)),q_=(I_=0)=>Math.min(M,a(H,I_*3)),k_=(I_)=>{let G_=void 0;try{G_=new CQ.URL(I_)}catch(b_){throw new Error("Invalid data source URL provided")}let W_={};for(let[b_,JE]of G_.searchParams)W_[b_]=JE;let x_=G_.pathname&&G_.pathname.startsWith("/")?G_.pathname.slice(1):void 0,Q_={host:G_.hostname?G_.hostname:void 0,user:G_.username?G_.username:void 0,port:G_.port?Number(G_.port):void 0,password:G_.password?G_.password:void 0,database:x_};return Object.assign(Q_,W_)},n_=async(I_)=>{try{await e_()}catch(G_){if(S.includes(G_.code)&&An_(W_))}else throw m(G_),new Error(G_)}},e_=()=>{if(E===null)return z_(),new U_((I_,G_)=>{E=C.createConnection(L),E.connect(function(W_){if(W_)A_(),G_(W_);else return L_(),s(E),I_(!0)}),E.on("error",async(W_)=>{N++,A_(),z_(),o(W_)})});else return U_.resolve()},V=async()=>{if(E!==null&&Y){K_();let I_=await i(),G_=await v();if(G_.total/I_.total>$){let W_=Math.min(Math.max(G_.maxAge,w),g);if((W_<=G_.maxAge?await y(W_):0)===0)J()}else if(G_.maxAge>g)await y(g)}},J=()=>{if(E!==null)E.end(),A_(),z_(),e()},Q=async function(...I_){return await n_(),new U_((G_,W_)=>{if(E!==null){if(this&&this.rollback&&I_.length===0)return G_([]);E.query(...I_,async(x_,Q_)=>{if(x_&&x_.code==="PROTOCOL_SEQUENCE_TIMEOUT")E.destroy(),A_(),W_(x_);else if(x_&&(/^PROTOCOL_ENQUEUE_AFTER_/.test(x_.code)||x_.code==="PROTOCOL_CONNECTION_LOST"||x_.code==="EPIPE"||x_.code==="ECONNRESET"))return A_(),G_(Q(...I_));else if(x_){if(this&&this.rollback)await Q("ROLLBACK"),this.rollback(x_);W_(x_)}return G_(Q_)})}})},i=async()=>{if(Date.now()-U.updated>d){let I_=await Q(`SELECT IF(@@max_user_connections > 0, - LEAST(@@max_user_connections,@@max_connections), - @@max_connections) AS total, - IF(@@max_user_connections > 0,true,false) AS userLimit`);U={total:I_[0].total||0,userLimit:I_[0].userLimit===1?!0:!1,updated:Date.now()}}return U},v=async()=>{if(Date.now()-G.updated>t){let I_=await Q(`SELECT COUNT(ID) as total, MAX(time) as max_age - FROM information_schema.processlist - WHERE (user = ? AND @@max_user_connections > 0) OR true`,[L.user]);G={total:I_[0].total||0,maxAge:I_[0].max_age||0,updated:Date.now()}}return G},y=async(I_)=>{let G_=0,W_=await Q(`SELECT ID,time FROM information_schema.processlist - WHERE command = 'Sleep' AND time >= ? AND user = ? - ORDER BY time DESC`,[!isNaN(I_)?I_:900,L.user]);for(let x_=0;x_{let I_=[],G_=()=>{};return{query:function(...W_){if(typeof W_[0]==="function")I_.push(W_[0]);else I_.push(()=>[...W_]);return this},rollback:function(W_){if(typeof W_==="function")G_=W_;return this},commit:async function(){return await f(I_,G_)}}},f=async(I_,G_)=>{let W_=[];await Q("START TRANSACTION");for(let x_=0;x_{},m=typeof x.onConnectError==="function"?x.onConnectError:()=>{},k=typeof x.onRetry==="function"?x.onRetry:()=>{},e=typeof x.onClose==="function"?x.onClose:()=>{},o=typeof x.onError==="function"?x.onError:()=>{},c=typeof x.onKill==="function"?x.onKill:()=>{},S_=typeof x.onKillError==="function"?x.onKillError:()=>{};let u={};if(typeof x.config==="object"&&!Array.isArray(x.config))u=x.config;else if(typeof _==="string")u=_;let{escape:b,escapeId:E_,format:H_}=C;return l_(u),{connect:n_,config:l_,query:Q,end:V,escape:b,escapeId:E_,format:H_,quit:J,transaction:n,getCounter:V_,getClient:r,getConfig:p_,getErrorCount:P_}}});function WR(){let _=process.env.DSQL_SSL_DIR;if(!_?.match(/./))return;let E=`${_}/ca-cert.pem`;if(!V3.default.existsSync(E)){console.log(`${E} does not exist`);return}return{ca:V3.default.readFileSync(`${_}/ca-cert.pem`)}}var V3;var wT=dE(()=>{V3=X_(require("fs"))});function MR({paradigm:_,database:E,queryString:R,queryValues:N}){try{return new Promise((A,L)=>{let U=_?.match(/full.access|^fa$/i)?!0:!1;try{let G=function(C){QT.end(),A(JSON.parse(JSON.stringify(C)))},S=function(C){QT.end(),A({error:C.message,queryStringGenerated:R,queryValuesGenerated:N,sql:C.sql})};if(U)QT=mI.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_FULL_ACCESS_USERNAME,password:process.env.DSQL_DB_FULL_ACCESS_PASSWORD,database:E,ssl:WR()}});else QT=mI.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_READ_ONLY_USERNAME,password:process.env.DSQL_DB_READ_ONLY_PASSWORD,database:E,ssl:WR()}});if(N&&Array.isArray(N)&&N[0])QT.query(R,N).then(G).catch(S);else QT.query(R).then(G).catch(S)}catch(G){AS.default.appendFileSync("./.tmp/dbErrorLogs.txt",G.message+"\n"+Date()+"\n\n\n","utf8"),A({error:G.message})}})}catch(A){return{success:!1,error:A.message}}}var AS,mI,QT;var i1=dE(()=>{AS=X_(require("fs")),mI=X_(ZT());wT();QT=mI.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_READ_ONLY_USERNAME,password:process.env.DSQL_DB_READ_ONLY_PASSWORD,charset:"utf8mb4",ssl:WR()}});PQ.exports=MR});async function xE(..._){let E=IS.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_USERNAME,password:process.env.DSQL_DB_PASSWORD,database:process.env.DSQL_DB_NAME,port:process.env.DSQL_DB_PORT?Number(process.env.DSQL_DB_PORT):void 0,charset:"utf8mb4",ssl:WR()},onConnect:()=>{console.log("Connection Successful!")},onConnectError:(R)=>{console.log("Connection Error",R.message)},onError:(R)=>{console.log("Client Error",R.message)}});console.log("Querying ...");try{let R=await E.query(..._);return await E.end(),JSON.parse(JSON.stringify(R))}catch(R){return console.log("DB Error =>",R.message),{success:!1,error:R.message}}}var IS;var WN=dE(()=>{IS=X_(ZT());wT()});var US={};YT(US,{default:()=>OR});function OR({encryptedString:_,encryptionKey:E,encryptionSalt:R}){if(!_?.match(/./))return console.log("Encrypted string is invalid"),_;let N=E||process.env.DSQL_ENCRYPTION_PASSWORD,A=R||process.env.DSQL_ENCRYPTION_SALT,L=process.env.DSQL_ENCRYPTION_KEY_LENGTH?Number(process.env.DSQL_ENCRYPTION_KEY_LENGTH):24;if(!N?.match(/.{8,}/))return console.log("Decrption key is invalid"),_;if(!A?.match(/.{8,}/))return console.log("Decrption salt is invalid"),_;let U="aes-192-cbc",G=gI.scryptSync(N,A,L),S=LS.Buffer.alloc(16,0),C=gI.createDecipheriv(U,G,S);try{let Y=C.update(_,"hex","utf8");return Y+=C.final("utf8"),Y}catch(Y){return console.log("Error in decrypting =>",Y.message),_}}var gI,LS;var P1=dE(()=>{gI=require("crypto"),LS=require("buffer")});var YQ,GS;var DS=dE(()=>{YQ=/^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/,GS=YQ});async function u1({unparsedResults:_,tableSchema:E}){let R=[];try{for(let N=0;N<_.length;N++){let A=_[N],L=Object.keys(A);for(let U=0;U",N.message),_}}var yI=dE(()=>{P1();DS()});var SS=j((J3)=>{Object.defineProperty(J3,"__esModule",{value:!0});J3.default=new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\uD835\uDD04rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\uD835\uDD38plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\uD835\uDC9Cign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\uD835\uDD05pf;\uC000\uD835\uDD39eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\uD835\uDC9Ep\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\uD835\uDD07\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\uD835\uDD3B\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\uD835\uDC9Frok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\uD835\uDD08rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\uD835\uDD3Csilon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\uD835\uDD09lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\uD835\uDD3DAll;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\uD835\uDD0A;\u62D9pf;\uC000\uD835\uDD3Eeater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\uD835\uDCA2;\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\uD835\uDD40a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\uD835\uDD0Dpf;\uC000\uD835\uDD41\u01E3\u07C7\0\u07CCr;\uC000\uD835\uDCA5rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\uD835\uDD0Epf;\uC000\uD835\uDD42cr;\uC000\uD835\uDCA6\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\uD835\uDD0F\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\uD835\uDD43er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\uD835\uDD10nusPlus;\u6213pf;\uC000\uD835\uDD44c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\uD835\uDD11\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\uD835\uDCA9ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\uD835\uDD12rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\uD835\uDD46enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\uD835\uDCAAash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\uD835\uDD13i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\uD835\uDCAB;\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\uD835\uDD14pf;\u611Acr;\uC000\uD835\uDCAC\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\uD835\uDD16ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\uD835\uDD4A\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\uD835\uDCAEar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\uD835\uDD17\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\uD835\uDD4BipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\uD835\uDCAFrok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\uD835\uDD18rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\uD835\uDD4C\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\uD835\uDCB0ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\uD835\uDD19pf;\uC000\uD835\uDD4Dcr;\uC000\uD835\uDCB1dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\uD835\uDD1Apf;\uC000\uD835\uDD4Ecr;\uC000\uD835\uDCB2\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\uD835\uDD1B;\u439Epf;\uC000\uD835\uDD4Fcr;\uC000\uD835\uDCB3\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\uD835\uDD1Cpf;\uC000\uD835\uDD50cr;\uC000\uD835\uDCB4ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\uD835\uDCB5\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\uD835\uDD1Erave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\uD835\uDD52\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\uD835\uDCB6;\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\uD835\uDD1Fg\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\uD835\uDD53\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\uD835\uDCB7mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\uD835\uDD20\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\uD835\uDD54o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\uD835\uDCB8\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\uD835\uDD21ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\uD835\uDD55\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\uD835\uDCB9;\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\uD835\uDD22\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\uD835\uDD56\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\uD835\uDD23lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\uD835\uDD57\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\uD835\uDCBB\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\uD835\uDD24\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\uD835\uDD58\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\uD835\uDD25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\uD835\uDD59bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\uD835\uDCBDas\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\uD835\uDD26rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\uD835\uDD5Aa;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\uD835\uDCBEn\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\uD835\uDD27ath;\u4237pf;\uC000\uD835\uDD5B\u01E3\u23EC\0\u23F1r;\uC000\uD835\uDCBFrcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\uD835\uDD28reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\uD835\uDD5Ccr;\uC000\uD835\uDCC0\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\uD835\uDD29\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\uD835\uDD5Dus;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\uD835\uDCC1m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\uD835\uDD2Ao;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\uD835\uDD5E\u0100ct\u28F8\u28FDr;\uC000\uD835\uDCC2pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\uD835\uDD2B\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\uD835\uDD5F\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\uD835\uDCC3ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\uD835\uDD2C\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\uD835\uDD60\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\uD835\uDD2D\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\uD835\uDD61nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\uD835\uDCC5;\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\uD835\uDD2Epf;\uC000\uD835\uDD62rime;\u6057cr;\uC000\uD835\uDCC6\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\uD835\uDD2F\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\uD835\uDD63us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\uD835\uDCC7\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\uD835\uDD30\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\uD835\uDD64a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\uD835\uDCC8tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\uD835\uDD31\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\uD835\uDD65rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\uD835\uDCC9;\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\uD835\uDD32rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\uD835\uDD66\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\uD835\uDCCA\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\uD835\uDD33tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\uD835\uDD67ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\uD835\uDCCB\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\uD835\uDD34pf;\uC000\uD835\uDD68\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\uD835\uDCCC\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\uD835\uDD35\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\uD835\uDD69im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\uD835\uDCCD\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\uD835\uDD36cy;\u4457pf;\uC000\uD835\uDD6Acr;\uC000\uD835\uDCCE\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\uD835\uDD37cy;\u4436grarr;\u61DDpf;\uC000\uD835\uDD6Bcr;\uC000\uD835\uDCCF\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(function(_){return _.charCodeAt(0)}))});var CS=j(($3)=>{Object.defineProperty($3,"__esModule",{value:!0});$3.default=new Uint16Array("\u0200aglq\t\x15\x18\x1B\u026D\x0F\0\0\x12p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(function(_){return _.charCodeAt(0)}))});var w3=j((Y1)=>{var Z3;Object.defineProperty(Y1,"__esModule",{value:!0});Y1.replaceCodePoint=Y1.fromCodePoint=void 0;var HQ=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);Y1.fromCodePoint=(Z3=String.fromCodePoint)!==null&&Z3!==void 0?Z3:function(_){var E="";if(_>65535)_-=65536,E+=String.fromCharCode(_>>>10&1023|55296),_=56320|_&1023;return E+=String.fromCharCode(_),E};function PS(_){var E;if(_>=55296&&_<=57343||_>1114111)return 65533;return(E=HQ.get(_))!==null&&E!==void 0?E:_}Y1.replaceCodePoint=PS;function WQ(_){return Y1.fromCodePoint(PS(_))}Y1.default=WQ});var wO=j((i_)=>{var MQ=i_&&i_.__createBinding||(Object.create?function(_,E,R,N){if(N===void 0)N=R;var A=Object.getOwnPropertyDescriptor(E,R);if(!A||("get"in A?!E.__esModule:A.writable||A.configurable))A={enumerable:!0,get:function(){return E[R]}};Object.defineProperty(_,N,A)}:function(_,E,R,N){if(N===void 0)N=R;_[N]=E[R]}),FQ=i_&&i_.__setModuleDefault||(Object.create?function(_,E){Object.defineProperty(_,"default",{enumerable:!0,value:E})}:function(_,E){_.default=E}),BQ=i_&&i_.__importStar||function(_){if(_&&_.__esModule)return _;var E={};if(_!=null){for(var R in _)if(R!=="default"&&Object.prototype.hasOwnProperty.call(_,R))MQ(E,_,R)}return FQ(E,_),E},YS=i_&&i_.__importDefault||function(_){return _&&_.__esModule?_:{default:_}};Object.defineProperty(i_,"__esModule",{value:!0});i_.decodeXML=i_.decodeHTMLStrict=i_.decodeHTMLAttribute=i_.decodeHTML=i_.determineBranch=i_.EntityDecoder=i_.DecodingMode=i_.BinTrieFlags=i_.fromCodePoint=i_.replaceCodePoint=i_.decodeCodePoint=i_.xmlDecodeTree=i_.htmlDecodeTree=void 0;var HS=YS(SS());i_.htmlDecodeTree=HS.default;var WS=YS(CS());i_.xmlDecodeTree=WS.default;var z3=BQ(w3());i_.decodeCodePoint=z3.default;var MS=w3();Object.defineProperty(i_,"replaceCodePoint",{enumerable:!0,get:function(){return MS.replaceCodePoint}});Object.defineProperty(i_,"fromCodePoint",{enumerable:!0,get:function(){return MS.fromCodePoint}});var gE;(function(_){_[_.NUM=35]="NUM",_[_.SEMI=59]="SEMI",_[_.EQUALS=61]="EQUALS",_[_.ZERO=48]="ZERO",_[_.NINE=57]="NINE",_[_.LOWER_A=97]="LOWER_A",_[_.LOWER_F=102]="LOWER_F",_[_.LOWER_X=120]="LOWER_X",_[_.LOWER_Z=122]="LOWER_Z",_[_.UPPER_A=65]="UPPER_A",_[_.UPPER_F=70]="UPPER_F",_[_.UPPER_Z=90]="UPPER_Z"})(gE||(gE={}));var VQ=32,c1;(function(_){_[_.VALUE_LENGTH=49152]="VALUE_LENGTH",_[_.BRANCH_LENGTH=16256]="BRANCH_LENGTH",_[_.JUMP_TABLE=127]="JUMP_TABLE"})(c1=i_.BinTrieFlags||(i_.BinTrieFlags={}));function Q3(_){return _>=gE.ZERO&&_<=gE.NINE}function KQ(_){return _>=gE.UPPER_A&&_<=gE.UPPER_F||_>=gE.LOWER_A&&_<=gE.LOWER_F}function XQ(_){return _>=gE.UPPER_A&&_<=gE.UPPER_Z||_>=gE.LOWER_A&&_<=gE.LOWER_Z||Q3(_)}function JQ(_){return _===gE.EQUALS||XQ(_)}var mE;(function(_){_[_.EntityStart=0]="EntityStart",_[_.NumericStart=1]="NumericStart",_[_.NumericDecimal=2]="NumericDecimal",_[_.NumericHex=3]="NumericHex",_[_.NamedEntity=4]="NamedEntity"})(mE||(mE={}));var MN;(function(_){_[_.Legacy=0]="Legacy",_[_.Strict=1]="Strict",_[_.Attribute=2]="Attribute"})(MN=i_.DecodingMode||(i_.DecodingMode={}));var FS=function(){function _(E,R,N){this.decodeTree=E,this.emitCodePoint=R,this.errors=N,this.state=mE.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=MN.Strict}return _.prototype.startEntity=function(E){this.decodeMode=E,this.state=mE.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},_.prototype.write=function(E,R){switch(this.state){case mE.EntityStart:{if(E.charCodeAt(R)===gE.NUM)return this.state=mE.NumericStart,this.consumed+=1,this.stateNumericStart(E,R+1);return this.state=mE.NamedEntity,this.stateNamedEntity(E,R)}case mE.NumericStart:return this.stateNumericStart(E,R);case mE.NumericDecimal:return this.stateNumericDecimal(E,R);case mE.NumericHex:return this.stateNumericHex(E,R);case mE.NamedEntity:return this.stateNamedEntity(E,R)}},_.prototype.stateNumericStart=function(E,R){if(R>=E.length)return-1;if((E.charCodeAt(R)|VQ)===gE.LOWER_X)return this.state=mE.NumericHex,this.consumed+=1,this.stateNumericHex(E,R+1);return this.state=mE.NumericDecimal,this.stateNumericDecimal(E,R)},_.prototype.addToNumericResult=function(E,R,N,A){if(R!==N){var L=N-R;this.result=this.result*Math.pow(A,L)+parseInt(E.substr(R,L),A),this.consumed+=L}},_.prototype.stateNumericHex=function(E,R){var N=R;while(R>14;for(;R>14,L!==0){if(U===gE.SEMI)return this.emitNamedEntityData(this.treeIndex,L,this.consumed+this.excess);if(this.decodeMode!==MN.Strict)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}}return-1},_.prototype.emitNotTerminatedNamedEntity=function(){var E,R=this,N=R.result,A=R.decodeTree,L=(A[N]&c1.VALUE_LENGTH)>>14;return this.emitNamedEntityData(N,L,this.consumed),(E=this.errors)===null||E===void 0||E.missingSemicolonAfterCharacterReference(),this.consumed},_.prototype.emitNamedEntityData=function(E,R,N){var A=this.decodeTree;if(this.emitCodePoint(R===1?A[E]&~c1.VALUE_LENGTH:A[E+1],N),R===3)this.emitCodePoint(A[E+2],N);return N},_.prototype.end=function(){var E;switch(this.state){case mE.NamedEntity:return this.result!==0&&(this.decodeMode!==MN.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case mE.NumericDecimal:return this.emitNumericEntity(0,2);case mE.NumericHex:return this.emitNumericEntity(0,3);case mE.NumericStart:return(E=this.errors)===null||E===void 0||E.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case mE.EntityStart:return 0}},_}();i_.EntityDecoder=FS;function BS(_){var E="",R=new FS(_,function(N){return E+=z3.fromCodePoint(N)});return function N(A,L){var U=0,G=0;while((G=A.indexOf("&",G))>=0){E+=A.slice(U,G),R.startEntity(L);var S=R.write(A,G+1);if(S<0){U=G+R.end();break}U=G+S,G=S===0?U+1:U}var C=E+A.slice(U);return E="",C}}function VS(_,E,R,N){var A=(E&c1.BRANCH_LENGTH)>>7,L=E&c1.JUMP_TABLE;if(A===0)return L!==0&&N===L?R:-1;if(L){var U=N-L;return U<0||U>=A?-1:_[R+U]-1}var G=R,S=G+A-1;while(G<=S){var C=G+S>>>1,Y=_[C];if(YN)S=C-1;else return _[C+A]}return-1}i_.determineBranch=VS;var x3=BS(HS.default),$Q=BS(WS.default);function ZQ(_,E){if(E===void 0)E=MN.Legacy;return x3(_,E)}i_.decodeHTML=ZQ;function wQ(_){return x3(_,MN.Attribute)}i_.decodeHTMLAttribute=wQ;function QQ(_){return x3(_,MN.Strict)}i_.decodeHTMLStrict=QQ;function zQ(_){return $Q(_,MN.Strict)}i_.decodeXML=zQ});var q3=j((xT)=>{Object.defineProperty(xT,"__esModule",{value:!0});xT.QuoteType=void 0;var d1=wO(),Y_;(function(_){_[_.Tab=9]="Tab",_[_.NewLine=10]="NewLine",_[_.FormFeed=12]="FormFeed",_[_.CarriageReturn=13]="CarriageReturn",_[_.Space=32]="Space",_[_.ExclamationMark=33]="ExclamationMark",_[_.Number=35]="Number",_[_.Amp=38]="Amp",_[_.SingleQuote=39]="SingleQuote",_[_.DoubleQuote=34]="DoubleQuote",_[_.Dash=45]="Dash",_[_.Slash=47]="Slash",_[_.Zero=48]="Zero",_[_.Nine=57]="Nine",_[_.Semi=59]="Semi",_[_.Lt=60]="Lt",_[_.Eq=61]="Eq",_[_.Gt=62]="Gt",_[_.Questionmark=63]="Questionmark",_[_.UpperA=65]="UpperA",_[_.LowerA=97]="LowerA",_[_.UpperF=70]="UpperF",_[_.LowerF=102]="LowerF",_[_.UpperZ=90]="UpperZ",_[_.LowerZ=122]="LowerZ",_[_.LowerX=120]="LowerX",_[_.OpeningSquareBracket=91]="OpeningSquareBracket"})(Y_||(Y_={}));var T_;(function(_){_[_.Text=1]="Text",_[_.BeforeTagName=2]="BeforeTagName",_[_.InTagName=3]="InTagName",_[_.InSelfClosingTag=4]="InSelfClosingTag",_[_.BeforeClosingTagName=5]="BeforeClosingTagName",_[_.InClosingTagName=6]="InClosingTagName",_[_.AfterClosingTagName=7]="AfterClosingTagName",_[_.BeforeAttributeName=8]="BeforeAttributeName",_[_.InAttributeName=9]="InAttributeName",_[_.AfterAttributeName=10]="AfterAttributeName",_[_.BeforeAttributeValue=11]="BeforeAttributeValue",_[_.InAttributeValueDq=12]="InAttributeValueDq",_[_.InAttributeValueSq=13]="InAttributeValueSq",_[_.InAttributeValueNq=14]="InAttributeValueNq",_[_.BeforeDeclaration=15]="BeforeDeclaration",_[_.InDeclaration=16]="InDeclaration",_[_.InProcessingInstruction=17]="InProcessingInstruction",_[_.BeforeComment=18]="BeforeComment",_[_.CDATASequence=19]="CDATASequence",_[_.InSpecialComment=20]="InSpecialComment",_[_.InCommentLike=21]="InCommentLike",_[_.BeforeSpecialS=22]="BeforeSpecialS",_[_.SpecialStartSequence=23]="SpecialStartSequence",_[_.InSpecialTag=24]="InSpecialTag",_[_.BeforeEntity=25]="BeforeEntity",_[_.BeforeNumericEntity=26]="BeforeNumericEntity",_[_.InNamedEntity=27]="InNamedEntity",_[_.InNumericEntity=28]="InNumericEntity",_[_.InHexEntity=29]="InHexEntity"})(T_||(T_={}));function dN(_){return _===Y_.Space||_===Y_.NewLine||_===Y_.Tab||_===Y_.FormFeed||_===Y_.CarriageReturn}function bI(_){return _===Y_.Slash||_===Y_.Gt||dN(_)}function KS(_){return _>=Y_.Zero&&_<=Y_.Nine}function xQ(_){return _>=Y_.LowerA&&_<=Y_.LowerZ||_>=Y_.UpperA&&_<=Y_.UpperZ}function qQ(_){return _>=Y_.UpperA&&_<=Y_.UpperF||_>=Y_.LowerA&&_<=Y_.LowerF}var zT;(function(_){_[_.NoValue=0]="NoValue",_[_.Unquoted=1]="Unquoted",_[_.Single=2]="Single",_[_.Double=3]="Double"})(zT=xT.QuoteType||(xT.QuoteType={}));var FR={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])},fQ=function(){function _(E,R){var N=E.xmlMode,A=N===void 0?!1:N,L=E.decodeEntities,U=L===void 0?!0:L;this.cbs=R,this.state=T_.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=T_.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.trieIndex=0,this.trieCurrent=0,this.entityResult=0,this.entityExcess=0,this.xmlMode=A,this.decodeEntities=U,this.entityTrie=A?d1.xmlDecodeTree:d1.htmlDecodeTree}return _.prototype.reset=function(){this.state=T_.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=T_.Text,this.currentSequence=void 0,this.running=!0,this.offset=0},_.prototype.write=function(E){this.offset+=this.buffer.length,this.buffer=E,this.parse()},_.prototype.end=function(){if(this.running)this.finish()},_.prototype.pause=function(){this.running=!1},_.prototype.resume=function(){if(this.running=!0,this.indexthis.sectionStart)this.cbs.ontext(this.sectionStart,this.index);this.state=T_.BeforeTagName,this.sectionStart=this.index}else if(this.decodeEntities&&E===Y_.Amp)this.state=T_.BeforeEntity},_.prototype.stateSpecialStartSequence=function(E){var R=this.sequenceIndex===this.currentSequence.length,N=R?bI(E):(E|32)===this.currentSequence[this.sequenceIndex];if(!N)this.isSpecial=!1;else if(!R){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=T_.InTagName,this.stateInTagName(E)},_.prototype.stateInSpecialTag=function(E){if(this.sequenceIndex===this.currentSequence.length){if(E===Y_.Gt||dN(E)){var R=this.index-this.currentSequence.length;if(this.sectionStart>14)-1;if(!this.allowLegacyEntity()&&E!==Y_.Semi)this.trieIndex+=N;else{var A=this.index-this.entityExcess+1;if(A>this.sectionStart)this.emitPartial(this.sectionStart,A);if(this.entityResult=this.trieIndex,this.trieIndex+=N,this.entityExcess=0,this.sectionStart=this.index+1,N===0)this.emitNamedEntity()}}},_.prototype.emitNamedEntity=function(){if(this.state=this.baseState,this.entityResult===0)return;var E=(this.entityTrie[this.entityResult]&d1.BinTrieFlags.VALUE_LENGTH)>>14;switch(E){case 1:{this.emitCodePoint(this.entityTrie[this.entityResult]&~d1.BinTrieFlags.VALUE_LENGTH);break}case 2:{this.emitCodePoint(this.entityTrie[this.entityResult+1]);break}case 3:this.emitCodePoint(this.entityTrie[this.entityResult+1]),this.emitCodePoint(this.entityTrie[this.entityResult+2])}},_.prototype.stateBeforeNumericEntity=function(E){if((E|32)===Y_.LowerX)this.entityExcess++,this.state=T_.InHexEntity;else this.state=T_.InNumericEntity,this.stateInNumericEntity(E)},_.prototype.emitNumericEntity=function(E){var R=this.index-this.entityExcess-1,N=R+2+Number(this.state===T_.InHexEntity);if(N!==this.index){if(R>this.sectionStart)this.emitPartial(this.sectionStart,R);this.sectionStart=this.index+Number(E),this.emitCodePoint(d1.replaceCodePoint(this.entityResult))}this.state=this.baseState},_.prototype.stateInNumericEntity=function(E){if(E===Y_.Semi)this.emitNumericEntity(!0);else if(KS(E))this.entityResult=this.entityResult*10+(E-Y_.Zero),this.entityExcess++;else{if(this.allowLegacyEntity())this.emitNumericEntity(!1);else this.state=this.baseState;this.index--}},_.prototype.stateInHexEntity=function(E){if(E===Y_.Semi)this.emitNumericEntity(!0);else if(KS(E))this.entityResult=this.entityResult*16+(E-Y_.Zero),this.entityExcess++;else if(qQ(E))this.entityResult=this.entityResult*16+((E|32)-Y_.LowerA+10),this.entityExcess++;else{if(this.allowLegacyEntity())this.emitNumericEntity(!1);else this.state=this.baseState;this.index--}},_.prototype.allowLegacyEntity=function(){return!this.xmlMode&&(this.baseState===T_.Text||this.baseState===T_.InSpecialTag)},_.prototype.cleanup=function(){if(this.running&&this.sectionStart!==this.index){if(this.state===T_.Text||this.state===T_.InSpecialTag&&this.sequenceIndex===0)this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index;else if(this.state===T_.InAttributeValueDq||this.state===T_.InAttributeValueSq||this.state===T_.InAttributeValueNq)this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index}},_.prototype.shouldContinue=function(){return this.index{var jQ=FN&&FN.__createBinding||(Object.create?function(_,E,R,N){if(N===void 0)N=R;var A=Object.getOwnPropertyDescriptor(E,R);if(!A||("get"in A?!E.__esModule:A.writable||A.configurable))A={enumerable:!0,get:function(){return E[R]}};Object.defineProperty(_,N,A)}:function(_,E,R,N){if(N===void 0)N=R;_[N]=E[R]}),vQ=FN&&FN.__setModuleDefault||(Object.create?function(_,E){Object.defineProperty(_,"default",{enumerable:!0,value:E})}:function(_,E){_.default=E}),pQ=FN&&FN.__importStar||function(_){if(_&&_.__esModule)return _;var E={};if(_!=null){for(var R in _)if(R!=="default"&&Object.prototype.hasOwnProperty.call(_,R))jQ(E,_,R)}return vQ(E,_),E};Object.defineProperty(FN,"__esModule",{value:!0});FN.Parser=void 0;var iI=pQ(q3()),XS=wO(),qT=new Set(["input","option","optgroup","select","button","datalist","textarea"]),OE=new Set(["p"]),JS=new Set(["thead","tbody"]),$S=new Set(["dd","dt"]),ZS=new Set(["rt","rp"]),hQ=new Map([["tr",new Set(["tr","th","td"])],["th",new Set(["th"])],["td",new Set(["thead","th","td"])],["body",new Set(["head","link","script"])],["li",new Set(["li"])],["p",OE],["h1",OE],["h2",OE],["h3",OE],["h4",OE],["h5",OE],["h6",OE],["select",qT],["input",qT],["output",qT],["button",qT],["datalist",qT],["textarea",qT],["option",new Set(["option"])],["optgroup",new Set(["optgroup","option"])],["dd",$S],["dt",$S],["address",OE],["article",OE],["aside",OE],["blockquote",OE],["details",OE],["div",OE],["dl",OE],["fieldset",OE],["figcaption",OE],["figure",OE],["footer",OE],["form",OE],["header",OE],["hr",OE],["main",OE],["nav",OE],["ol",OE],["pre",OE],["section",OE],["table",OE],["ul",OE],["rt",ZS],["rp",ZS],["tbody",JS],["tfoot",JS]]),kQ=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]),wS=new Set(["math","svg"]),QS=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignobject","desc","title"]),mQ=/\s|\//,gQ=function(){function _(E,R){if(R===void 0)R={};var N,A,L,U,G;this.options=R,this.startIndex=0,this.endIndex=0,this.openTagStart=0,this.tagname="",this.attribname="",this.attribvalue="",this.attribs=null,this.stack=[],this.foreignContext=[],this.buffers=[],this.bufferOffset=0,this.writeIndex=0,this.ended=!1,this.cbs=E!==null&&E!==void 0?E:{},this.lowerCaseTagNames=(N=R.lowerCaseTags)!==null&&N!==void 0?N:!R.xmlMode,this.lowerCaseAttributeNames=(A=R.lowerCaseAttributeNames)!==null&&A!==void 0?A:!R.xmlMode,this.tokenizer=new((L=R.Tokenizer)!==null&&L!==void 0?L:iI.default)(this.options,this),(G=(U=this.cbs).onparserinit)===null||G===void 0||G.call(U,this)}return _.prototype.ontext=function(E,R){var N,A,L=this.getSlice(E,R);this.endIndex=R-1,(A=(N=this.cbs).ontext)===null||A===void 0||A.call(N,L),this.startIndex=R},_.prototype.ontextentity=function(E){var R,N,A=this.tokenizer.getSectionStart();this.endIndex=A-1,(N=(R=this.cbs).ontext)===null||N===void 0||N.call(R,XS.fromCodePoint(E)),this.startIndex=A},_.prototype.isVoidElement=function(E){return!this.options.xmlMode&&kQ.has(E)},_.prototype.onopentagname=function(E,R){this.endIndex=R;var N=this.getSlice(E,R);if(this.lowerCaseTagNames)N=N.toLowerCase();this.emitOpenTag(N)},_.prototype.emitOpenTag=function(E){var R,N,A,L;this.openTagStart=this.startIndex,this.tagname=E;var U=!this.options.xmlMode&&hQ.get(E);if(U)while(this.stack.length>0&&U.has(this.stack[this.stack.length-1])){var G=this.stack.pop();(N=(R=this.cbs).onclosetag)===null||N===void 0||N.call(R,G,!0)}if(!this.isVoidElement(E)){if(this.stack.push(E),wS.has(E))this.foreignContext.push(!0);else if(QS.has(E))this.foreignContext.push(!1)}if((L=(A=this.cbs).onopentagname)===null||L===void 0||L.call(A,E),this.cbs.onopentag)this.attribs={}},_.prototype.endOpenTag=function(E){var R,N;if(this.startIndex=this.openTagStart,this.attribs)(N=(R=this.cbs).onopentag)===null||N===void 0||N.call(R,this.tagname,this.attribs,E),this.attribs=null;if(this.cbs.onclosetag&&this.isVoidElement(this.tagname))this.cbs.onclosetag(this.tagname,!0);this.tagname=""},_.prototype.onopentagend=function(E){this.endIndex=E,this.endOpenTag(!1),this.startIndex=E+1},_.prototype.onclosetag=function(E,R){var N,A,L,U,G,S;this.endIndex=R;var C=this.getSlice(E,R);if(this.lowerCaseTagNames)C=C.toLowerCase();if(wS.has(C)||QS.has(C))this.foreignContext.pop();if(!this.isVoidElement(C)){var Y=this.stack.lastIndexOf(C);if(Y!==-1)if(this.cbs.onclosetag){var M=this.stack.length-Y;while(M--)this.cbs.onclosetag(this.stack.pop(),M!==0)}else this.stack.length=Y;else if(!this.options.xmlMode&&C==="p")this.emitOpenTag("p"),this.closeCurrentTag(!0)}else if(!this.options.xmlMode&&C==="br")(A=(N=this.cbs).onopentagname)===null||A===void 0||A.call(N,"br"),(U=(L=this.cbs).onopentag)===null||U===void 0||U.call(L,"br",{},!0),(S=(G=this.cbs).onclosetag)===null||S===void 0||S.call(G,"br",!1);this.startIndex=R+1},_.prototype.onselfclosingtag=function(E){if(this.endIndex=E,this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1])this.closeCurrentTag(!1),this.startIndex=E+1;else this.onopentagend(E)},_.prototype.closeCurrentTag=function(E){var R,N,A=this.tagname;if(this.endOpenTag(E),this.stack[this.stack.length-1]===A)(N=(R=this.cbs).onclosetag)===null||N===void 0||N.call(R,A,!E),this.stack.pop()},_.prototype.onattribname=function(E,R){this.startIndex=E;var N=this.getSlice(E,R);this.attribname=this.lowerCaseAttributeNames?N.toLowerCase():N},_.prototype.onattribdata=function(E,R){this.attribvalue+=this.getSlice(E,R)},_.prototype.onattribentity=function(E){this.attribvalue+=XS.fromCodePoint(E)},_.prototype.onattribend=function(E,R){var N,A;if(this.endIndex=R,(A=(N=this.cbs).onattribute)===null||A===void 0||A.call(N,this.attribname,this.attribvalue,E===iI.QuoteType.Double?'"':E===iI.QuoteType.Single?"'":E===iI.QuoteType.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname))this.attribs[this.attribname]=this.attribvalue;this.attribvalue=""},_.prototype.getInstructionName=function(E){var R=E.search(mQ),N=R<0?E:E.substr(0,R);if(this.lowerCaseTagNames)N=N.toLowerCase();return N},_.prototype.ondeclaration=function(E,R){this.endIndex=R;var N=this.getSlice(E,R);if(this.cbs.onprocessinginstruction){var A=this.getInstructionName(N);this.cbs.onprocessinginstruction("!".concat(A),"!".concat(N))}this.startIndex=R+1},_.prototype.onprocessinginstruction=function(E,R){this.endIndex=R;var N=this.getSlice(E,R);if(this.cbs.onprocessinginstruction){var A=this.getInstructionName(N);this.cbs.onprocessinginstruction("?".concat(A),"?".concat(N))}this.startIndex=R+1},_.prototype.oncomment=function(E,R,N){var A,L,U,G;this.endIndex=R,(L=(A=this.cbs).oncomment)===null||L===void 0||L.call(A,this.getSlice(E,R-N)),(G=(U=this.cbs).oncommentend)===null||G===void 0||G.call(U),this.startIndex=R+1},_.prototype.oncdata=function(E,R,N){var A,L,U,G,S,C,Y,M,H,X;this.endIndex=R;var $=this.getSlice(E,R-N);if(this.options.xmlMode||this.options.recognizeCDATA)(L=(A=this.cbs).oncdatastart)===null||L===void 0||L.call(A),(G=(U=this.cbs).ontext)===null||G===void 0||G.call(U,$),(C=(S=this.cbs).oncdataend)===null||C===void 0||C.call(S);else(M=(Y=this.cbs).oncomment)===null||M===void 0||M.call(Y,"[CDATA[".concat($,"]]")),(X=(H=this.cbs).oncommentend)===null||X===void 0||X.call(H);this.startIndex=R+1},_.prototype.onend=function(){var E,R;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(var N=this.stack.length;N>0;this.cbs.onclosetag(this.stack[--N],!0));}(R=(E=this.cbs).onend)===null||R===void 0||R.call(E)},_.prototype.reset=function(){var E,R,N,A;(R=(E=this.cbs).onreset)===null||R===void 0||R.call(E),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,(A=(N=this.cbs).onparserinit)===null||A===void 0||A.call(N,this),this.buffers.length=0,this.bufferOffset=0,this.writeIndex=0,this.ended=!1},_.prototype.parseComplete=function(E){this.reset(),this.end(E)},_.prototype.getSlice=function(E,R){while(E-this.bufferOffset>=this.buffers[0].length)this.shiftBuffer();var N=this.buffers[0].slice(E-this.bufferOffset,R-this.bufferOffset);while(R-this.bufferOffset>this.buffers[0].length)this.shiftBuffer(),N+=this.buffers[0].slice(0,R-this.bufferOffset);return N},_.prototype.shiftBuffer=function(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()},_.prototype.write=function(E){var R,N;if(this.ended){(N=(R=this.cbs).onerror)===null||N===void 0||N.call(R,new Error(".write() after done!"));return}if(this.buffers.push(E),this.tokenizer.running)this.tokenizer.write(E),this.writeIndex++},_.prototype.end=function(E){var R,N;if(this.ended){(N=(R=this.cbs).onerror)===null||N===void 0||N.call(R,new Error(".end() after done!"));return}if(E)this.write(E);this.ended=!0,this.tokenizer.end()},_.prototype.pause=function(){this.tokenizer.pause()},_.prototype.resume=function(){this.tokenizer.resume();while(this.tokenizer.running&&this.writeIndex{Object.defineProperty(PE,"__esModule",{value:!0});PE.Doctype=PE.CDATA=PE.Tag=PE.Style=PE.Script=PE.Comment=PE.Directive=PE.Text=PE.Root=PE.isTag=PE.ElementType=void 0;var pR;(function(_){_.Root="root",_.Text="text",_.Directive="directive",_.Comment="comment",_.Script="script",_.Style="style",_.Tag="tag",_.CDATA="cdata",_.Doctype="doctype"})(pR=PE.ElementType||(PE.ElementType={}));function yQ(_){return _.type===pR.Tag||_.type===pR.Script||_.type===pR.Style}PE.isTag=yQ;PE.Root=pR.Root;PE.Text=pR.Text;PE.Directive=pR.Directive;PE.Comment=pR.Comment;PE.Script=pR.Script;PE.Style=pR.Style;PE.Tag=pR.Tag;PE.CDATA=pR.CDATA;PE.Doctype=pR.Doctype});var h3=j((g_)=>{var H1=g_&&g_.__extends||function(){var _=function(E,R){return _=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(N,A){N.__proto__=A}||function(N,A){for(var L in A)if(Object.prototype.hasOwnProperty.call(A,L))N[L]=A[L]},_(E,R)};return function(E,R){if(typeof R!=="function"&&R!==null)throw new TypeError("Class extends value "+String(R)+" is not a constructor or null");_(E,R);function N(){this.constructor=E}E.prototype=R===null?Object.create(R):(N.prototype=R.prototype,new N)}}(),QO=g_&&g_.__assign||function(){return QO=Object.assign||function(_){for(var E,R=1,N=arguments.length;R0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"childNodes",{get:function(){return this.children},set:function(R){this.children=R},enumerable:!1,configurable:!0}),E}(v3);g_.NodeWithChildren=cI;var fS=function(_){H1(E,_);function E(){var R=_!==null&&_.apply(this,arguments)||this;return R.type=BR.ElementType.CDATA,R}return Object.defineProperty(E.prototype,"nodeType",{get:function(){return 4},enumerable:!1,configurable:!0}),E}(cI);g_.CDATA=fS;var jS=function(_){H1(E,_);function E(){var R=_!==null&&_.apply(this,arguments)||this;return R.type=BR.ElementType.Root,R}return Object.defineProperty(E.prototype,"nodeType",{get:function(){return 9},enumerable:!1,configurable:!0}),E}(cI);g_.Document=jS;var vS=function(_){H1(E,_);function E(R,N,A,L){if(A===void 0)A=[];if(L===void 0)L=R==="script"?BR.ElementType.Script:R==="style"?BR.ElementType.Style:BR.ElementType.Tag;var U=_.call(this,A)||this;return U.name=R,U.attribs=N,U.type=L,U}return Object.defineProperty(E.prototype,"nodeType",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"tagName",{get:function(){return this.name},set:function(R){this.name=R},enumerable:!1,configurable:!0}),Object.defineProperty(E.prototype,"attributes",{get:function(){var R=this;return Object.keys(this.attribs).map(function(N){var A,L;return{name:N,value:R.attribs[N],namespace:(A=R["x-attribsNamespace"])===null||A===void 0?void 0:A[N],prefix:(L=R["x-attribsPrefix"])===null||L===void 0?void 0:L[N]}})},enumerable:!1,configurable:!0}),E}(cI);g_.Element=vS;function pS(_){return BR.isTag(_)}g_.isTag=pS;function hS(_){return _.type===BR.ElementType.CDATA}g_.isCDATA=hS;function kS(_){return _.type===BR.ElementType.Text}g_.isText=kS;function mS(_){return _.type===BR.ElementType.Comment}g_.isComment=mS;function gS(_){return _.type===BR.ElementType.Directive}g_.isDirective=gS;function yS(_){return _.type===BR.ElementType.Root}g_.isDocument=yS;function bQ(_){return Object.prototype.hasOwnProperty.call(_,"children")}g_.hasChildren=bQ;function p3(_,E){if(E===void 0)E=!1;var R;if(kS(_))R=new zS(_.data);else if(mS(_))R=new xS(_.data);else if(pS(_)){var N=E?j3(_.children):[],A=new vS(_.name,QO({},_.attribs),N);if(N.forEach(function(S){return S.parent=A}),_.namespace!=null)A.namespace=_.namespace;if(_["x-attribsNamespace"])A["x-attribsNamespace"]=QO({},_["x-attribsNamespace"]);if(_["x-attribsPrefix"])A["x-attribsPrefix"]=QO({},_["x-attribsPrefix"]);R=A}else if(hS(_)){var N=E?j3(_.children):[],L=new fS(N);N.forEach(function(C){return C.parent=L}),R=L}else if(yS(_)){var N=E?j3(_.children):[],U=new jS(N);if(N.forEach(function(C){return C.parent=U}),_["x-mode"])U["x-mode"]=_["x-mode"];R=U}else if(gS(_)){var G=new qS(_.name,_.data);if(_["x-name"]!=null)G["x-name"]=_["x-name"],G["x-publicId"]=_["x-publicId"],G["x-systemId"]=_["x-systemId"];R=G}else throw new Error("Not implemented yet: ".concat(_.type));if(R.startIndex=_.startIndex,R.endIndex=_.endIndex,_.sourceCodeLocation!=null)R.sourceCodeLocation=_.sourceCodeLocation;return R}g_.cloneNode=p3;function j3(_){var E=_.map(function(N){return p3(N,!0)});for(var R=1;R{var iQ=BN&&BN.__createBinding||(Object.create?function(_,E,R,N){if(N===void 0)N=R;var A=Object.getOwnPropertyDescriptor(E,R);if(!A||("get"in A?!E.__esModule:A.writable||A.configurable))A={enumerable:!0,get:function(){return E[R]}};Object.defineProperty(_,N,A)}:function(_,E,R,N){if(N===void 0)N=R;_[N]=E[R]}),uQ=BN&&BN.__exportStar||function(_,E){for(var R in _)if(R!=="default"&&!Object.prototype.hasOwnProperty.call(E,R))iQ(E,_,R)};Object.defineProperty(BN,"__esModule",{value:!0});BN.DomHandler=void 0;var k3=fT(),W1=h3();uQ(h3(),BN);var bS={withStartIndices:!1,withEndIndices:!1,xmlMode:!1},iS=function(){function _(E,R,N){if(this.dom=[],this.root=new W1.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,typeof R==="function")N=R,R=bS;if(typeof E==="object")R=E,E=void 0;this.callback=E!==null&&E!==void 0?E:null,this.options=R!==null&&R!==void 0?R:bS,this.elementCB=N!==null&&N!==void 0?N:null}return _.prototype.onparserinit=function(E){this.parser=E},_.prototype.onreset=function(){this.dom=[],this.root=new W1.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},_.prototype.onend=function(){if(this.done)return;this.done=!0,this.parser=null,this.handleCallback(null)},_.prototype.onerror=function(E){this.handleCallback(E)},_.prototype.onclosetag=function(){this.lastNode=null;var E=this.tagStack.pop();if(this.options.withEndIndices)E.endIndex=this.parser.endIndex;if(this.elementCB)this.elementCB(E)},_.prototype.onopentag=function(E,R){var N=this.options.xmlMode?k3.ElementType.Tag:void 0,A=new W1.Element(E,R,void 0,N);this.addNode(A),this.tagStack.push(A)},_.prototype.ontext=function(E){var R=this.lastNode;if(R&&R.type===k3.ElementType.Text){if(R.data+=E,this.options.withEndIndices)R.endIndex=this.parser.endIndex}else{var N=new W1.Text(E);this.addNode(N),this.lastNode=N}},_.prototype.oncomment=function(E){if(this.lastNode&&this.lastNode.type===k3.ElementType.Comment){this.lastNode.data+=E;return}var R=new W1.Comment(E);this.addNode(R),this.lastNode=R},_.prototype.oncommentend=function(){this.lastNode=null},_.prototype.oncdatastart=function(){var E=new W1.Text(""),R=new W1.CDATA([E]);this.addNode(R),E.parent=R,this.lastNode=E},_.prototype.oncdataend=function(){this.lastNode=null},_.prototype.onprocessinginstruction=function(E,R){var N=new W1.ProcessingInstruction(E,R);this.addNode(N)},_.prototype.handleCallback=function(E){if(typeof this.callback==="function")this.callback(E,this.dom);else if(E)throw E},_.prototype.addNode=function(E){var R=this.tagStack[this.tagStack.length-1],N=R.children[R.children.length-1];if(this.options.withStartIndices)E.startIndex=this.parser.startIndex;if(this.options.withEndIndices)E.endIndex=this.parser.endIndex;if(R.children.push(E),N)E.prev=N,N.next=E;E.parent=R,this.lastNode=null},_}();BN.DomHandler=iS;BN.default=iS});var uS=j((m3)=>{Object.defineProperty(m3,"__esModule",{value:!0});function dI(_){for(var E=1;E<_.length;E++)_[E][0]+=_[E-1][0]+1;return _}m3.default=new Map(dI([[9," "],[0," "],[22,"!"],[0,"""],[0,"#"],[0,"$"],[0,"%"],[0,"&"],[0,"'"],[0,"("],[0,")"],[0,"*"],[0,"+"],[0,","],[1,"."],[0,"/"],[10,":"],[0,";"],[0,{v:"<",n:8402,o:"<⃒"}],[0,{v:"=",n:8421,o:"=⃥"}],[0,{v:">",n:8402,o:">⃒"}],[0,"?"],[0,"@"],[26,"["],[0,"\"],[0,"]"],[0,"^"],[0,"_"],[0,"`"],[5,{n:106,o:"fj"}],[20,"{"],[0,"|"],[0,"}"],[34," "],[0,"¡"],[0,"¢"],[0,"£"],[0,"¤"],[0,"¥"],[0,"¦"],[0,"§"],[0,"¨"],[0,"©"],[0,"ª"],[0,"«"],[0,"¬"],[0,"­"],[0,"®"],[0,"¯"],[0,"°"],[0,"±"],[0,"²"],[0,"³"],[0,"´"],[0,"µ"],[0,"¶"],[0,"·"],[0,"¸"],[0,"¹"],[0,"º"],[0,"»"],[0,"¼"],[0,"½"],[0,"¾"],[0,"¿"],[0,"À"],[0,"Á"],[0,"Â"],[0,"Ã"],[0,"Ä"],[0,"Å"],[0,"Æ"],[0,"Ç"],[0,"È"],[0,"É"],[0,"Ê"],[0,"Ë"],[0,"Ì"],[0,"Í"],[0,"Î"],[0,"Ï"],[0,"Ð"],[0,"Ñ"],[0,"Ò"],[0,"Ó"],[0,"Ô"],[0,"Õ"],[0,"Ö"],[0,"×"],[0,"Ø"],[0,"Ù"],[0,"Ú"],[0,"Û"],[0,"Ü"],[0,"Ý"],[0,"Þ"],[0,"ß"],[0,"à"],[0,"á"],[0,"â"],[0,"ã"],[0,"ä"],[0,"å"],[0,"æ"],[0,"ç"],[0,"è"],[0,"é"],[0,"ê"],[0,"ë"],[0,"ì"],[0,"í"],[0,"î"],[0,"ï"],[0,"ð"],[0,"ñ"],[0,"ò"],[0,"ó"],[0,"ô"],[0,"õ"],[0,"ö"],[0,"÷"],[0,"ø"],[0,"ù"],[0,"ú"],[0,"û"],[0,"ü"],[0,"ý"],[0,"þ"],[0,"ÿ"],[0,"Ā"],[0,"ā"],[0,"Ă"],[0,"ă"],[0,"Ą"],[0,"ą"],[0,"Ć"],[0,"ć"],[0,"Ĉ"],[0,"ĉ"],[0,"Ċ"],[0,"ċ"],[0,"Č"],[0,"č"],[0,"Ď"],[0,"ď"],[0,"Đ"],[0,"đ"],[0,"Ē"],[0,"ē"],[2,"Ė"],[0,"ė"],[0,"Ę"],[0,"ę"],[0,"Ě"],[0,"ě"],[0,"Ĝ"],[0,"ĝ"],[0,"Ğ"],[0,"ğ"],[0,"Ġ"],[0,"ġ"],[0,"Ģ"],[1,"Ĥ"],[0,"ĥ"],[0,"Ħ"],[0,"ħ"],[0,"Ĩ"],[0,"ĩ"],[0,"Ī"],[0,"ī"],[2,"Į"],[0,"į"],[0,"İ"],[0,"ı"],[0,"IJ"],[0,"ij"],[0,"Ĵ"],[0,"ĵ"],[0,"Ķ"],[0,"ķ"],[0,"ĸ"],[0,"Ĺ"],[0,"ĺ"],[0,"Ļ"],[0,"ļ"],[0,"Ľ"],[0,"ľ"],[0,"Ŀ"],[0,"ŀ"],[0,"Ł"],[0,"ł"],[0,"Ń"],[0,"ń"],[0,"Ņ"],[0,"ņ"],[0,"Ň"],[0,"ň"],[0,"ʼn"],[0,"Ŋ"],[0,"ŋ"],[0,"Ō"],[0,"ō"],[2,"Ő"],[0,"ő"],[0,"Œ"],[0,"œ"],[0,"Ŕ"],[0,"ŕ"],[0,"Ŗ"],[0,"ŗ"],[0,"Ř"],[0,"ř"],[0,"Ś"],[0,"ś"],[0,"Ŝ"],[0,"ŝ"],[0,"Ş"],[0,"ş"],[0,"Š"],[0,"š"],[0,"Ţ"],[0,"ţ"],[0,"Ť"],[0,"ť"],[0,"Ŧ"],[0,"ŧ"],[0,"Ũ"],[0,"ũ"],[0,"Ū"],[0,"ū"],[0,"Ŭ"],[0,"ŭ"],[0,"Ů"],[0,"ů"],[0,"Ű"],[0,"ű"],[0,"Ų"],[0,"ų"],[0,"Ŵ"],[0,"ŵ"],[0,"Ŷ"],[0,"ŷ"],[0,"Ÿ"],[0,"Ź"],[0,"ź"],[0,"Ż"],[0,"ż"],[0,"Ž"],[0,"ž"],[19,"ƒ"],[34,"Ƶ"],[63,"ǵ"],[65,"ȷ"],[142,"ˆ"],[0,"ˇ"],[16,"˘"],[0,"˙"],[0,"˚"],[0,"˛"],[0,"˜"],[0,"˝"],[51,"̑"],[127,"Α"],[0,"Β"],[0,"Γ"],[0,"Δ"],[0,"Ε"],[0,"Ζ"],[0,"Η"],[0,"Θ"],[0,"Ι"],[0,"Κ"],[0,"Λ"],[0,"Μ"],[0,"Ν"],[0,"Ξ"],[0,"Ο"],[0,"Π"],[0,"Ρ"],[1,"Σ"],[0,"Τ"],[0,"Υ"],[0,"Φ"],[0,"Χ"],[0,"Ψ"],[0,"Ω"],[7,"α"],[0,"β"],[0,"γ"],[0,"δ"],[0,"ε"],[0,"ζ"],[0,"η"],[0,"θ"],[0,"ι"],[0,"κ"],[0,"λ"],[0,"μ"],[0,"ν"],[0,"ξ"],[0,"ο"],[0,"π"],[0,"ρ"],[0,"ς"],[0,"σ"],[0,"τ"],[0,"υ"],[0,"φ"],[0,"χ"],[0,"ψ"],[0,"ω"],[7,"ϑ"],[0,"ϒ"],[2,"ϕ"],[0,"ϖ"],[5,"Ϝ"],[0,"ϝ"],[18,"ϰ"],[0,"ϱ"],[3,"ϵ"],[0,"϶"],[10,"Ё"],[0,"Ђ"],[0,"Ѓ"],[0,"Є"],[0,"Ѕ"],[0,"І"],[0,"Ї"],[0,"Ј"],[0,"Љ"],[0,"Њ"],[0,"Ћ"],[0,"Ќ"],[1,"Ў"],[0,"Џ"],[0,"А"],[0,"Б"],[0,"В"],[0,"Г"],[0,"Д"],[0,"Е"],[0,"Ж"],[0,"З"],[0,"И"],[0,"Й"],[0,"К"],[0,"Л"],[0,"М"],[0,"Н"],[0,"О"],[0,"П"],[0,"Р"],[0,"С"],[0,"Т"],[0,"У"],[0,"Ф"],[0,"Х"],[0,"Ц"],[0,"Ч"],[0,"Ш"],[0,"Щ"],[0,"Ъ"],[0,"Ы"],[0,"Ь"],[0,"Э"],[0,"Ю"],[0,"Я"],[0,"а"],[0,"б"],[0,"в"],[0,"г"],[0,"д"],[0,"е"],[0,"ж"],[0,"з"],[0,"и"],[0,"й"],[0,"к"],[0,"л"],[0,"м"],[0,"н"],[0,"о"],[0,"п"],[0,"р"],[0,"с"],[0,"т"],[0,"у"],[0,"ф"],[0,"х"],[0,"ц"],[0,"ч"],[0,"ш"],[0,"щ"],[0,"ъ"],[0,"ы"],[0,"ь"],[0,"э"],[0,"ю"],[0,"я"],[1,"ё"],[0,"ђ"],[0,"ѓ"],[0,"є"],[0,"ѕ"],[0,"і"],[0,"ї"],[0,"ј"],[0,"љ"],[0,"њ"],[0,"ћ"],[0,"ќ"],[1,"ў"],[0,"џ"],[7074," "],[0," "],[0," "],[0," "],[1," "],[0," "],[0," "],[0," "],[0,"​"],[0,"‌"],[0,"‍"],[0,"‎"],[0,"‏"],[0,"‐"],[2,"–"],[0,"—"],[0,"―"],[0,"‖"],[1,"‘"],[0,"’"],[0,"‚"],[1,"“"],[0,"”"],[0,"„"],[1,"†"],[0,"‡"],[0,"•"],[2,"‥"],[0,"…"],[9,"‰"],[0,"‱"],[0,"′"],[0,"″"],[0,"‴"],[0,"‵"],[3,"‹"],[0,"›"],[3,"‾"],[2,"⁁"],[1,"⁃"],[0,"⁄"],[10,"⁏"],[7,"⁗"],[7,{v:" ",n:8202,o:"  "}],[0,"⁠"],[0,"⁡"],[0,"⁢"],[0,"⁣"],[72,"€"],[46,"⃛"],[0,"⃜"],[37,"ℂ"],[2,"℅"],[4,"ℊ"],[0,"ℋ"],[0,"ℌ"],[0,"ℍ"],[0,"ℎ"],[0,"ℏ"],[0,"ℐ"],[0,"ℑ"],[0,"ℒ"],[0,"ℓ"],[1,"ℕ"],[0,"№"],[0,"℗"],[0,"℘"],[0,"ℙ"],[0,"ℚ"],[0,"ℛ"],[0,"ℜ"],[0,"ℝ"],[0,"℞"],[3,"™"],[1,"ℤ"],[2,"℧"],[0,"ℨ"],[0,"℩"],[2,"ℬ"],[0,"ℭ"],[1,"ℯ"],[0,"ℰ"],[0,"ℱ"],[1,"ℳ"],[0,"ℴ"],[0,"ℵ"],[0,"ℶ"],[0,"ℷ"],[0,"ℸ"],[12,"ⅅ"],[0,"ⅆ"],[0,"ⅇ"],[0,"ⅈ"],[10,"⅓"],[0,"⅔"],[0,"⅕"],[0,"⅖"],[0,"⅗"],[0,"⅘"],[0,"⅙"],[0,"⅚"],[0,"⅛"],[0,"⅜"],[0,"⅝"],[0,"⅞"],[49,"←"],[0,"↑"],[0,"→"],[0,"↓"],[0,"↔"],[0,"↕"],[0,"↖"],[0,"↗"],[0,"↘"],[0,"↙"],[0,"↚"],[0,"↛"],[1,{v:"↝",n:824,o:"↝̸"}],[0,"↞"],[0,"↟"],[0,"↠"],[0,"↡"],[0,"↢"],[0,"↣"],[0,"↤"],[0,"↥"],[0,"↦"],[0,"↧"],[1,"↩"],[0,"↪"],[0,"↫"],[0,"↬"],[0,"↭"],[0,"↮"],[1,"↰"],[0,"↱"],[0,"↲"],[0,"↳"],[1,"↵"],[0,"↶"],[0,"↷"],[2,"↺"],[0,"↻"],[0,"↼"],[0,"↽"],[0,"↾"],[0,"↿"],[0,"⇀"],[0,"⇁"],[0,"⇂"],[0,"⇃"],[0,"⇄"],[0,"⇅"],[0,"⇆"],[0,"⇇"],[0,"⇈"],[0,"⇉"],[0,"⇊"],[0,"⇋"],[0,"⇌"],[0,"⇍"],[0,"⇎"],[0,"⇏"],[0,"⇐"],[0,"⇑"],[0,"⇒"],[0,"⇓"],[0,"⇔"],[0,"⇕"],[0,"⇖"],[0,"⇗"],[0,"⇘"],[0,"⇙"],[0,"⇚"],[0,"⇛"],[1,"⇝"],[6,"⇤"],[0,"⇥"],[15,"⇵"],[7,"⇽"],[0,"⇾"],[0,"⇿"],[0,"∀"],[0,"∁"],[0,{v:"∂",n:824,o:"∂̸"}],[0,"∃"],[0,"∄"],[0,"∅"],[1,"∇"],[0,"∈"],[0,"∉"],[1,"∋"],[0,"∌"],[2,"∏"],[0,"∐"],[0,"∑"],[0,"−"],[0,"∓"],[0,"∔"],[1,"∖"],[0,"∗"],[0,"∘"],[1,"√"],[2,"∝"],[0,"∞"],[0,"∟"],[0,{v:"∠",n:8402,o:"∠⃒"}],[0,"∡"],[0,"∢"],[0,"∣"],[0,"∤"],[0,"∥"],[0,"∦"],[0,"∧"],[0,"∨"],[0,{v:"∩",n:65024,o:"∩︀"}],[0,{v:"∪",n:65024,o:"∪︀"}],[0,"∫"],[0,"∬"],[0,"∭"],[0,"∮"],[0,"∯"],[0,"∰"],[0,"∱"],[0,"∲"],[0,"∳"],[0,"∴"],[0,"∵"],[0,"∶"],[0,"∷"],[0,"∸"],[1,"∺"],[0,"∻"],[0,{v:"∼",n:8402,o:"∼⃒"}],[0,{v:"∽",n:817,o:"∽̱"}],[0,{v:"∾",n:819,o:"∾̳"}],[0,"∿"],[0,"≀"],[0,"≁"],[0,{v:"≂",n:824,o:"≂̸"}],[0,"≃"],[0,"≄"],[0,"≅"],[0,"≆"],[0,"≇"],[0,"≈"],[0,"≉"],[0,"≊"],[0,{v:"≋",n:824,o:"≋̸"}],[0,"≌"],[0,{v:"≍",n:8402,o:"≍⃒"}],[0,{v:"≎",n:824,o:"≎̸"}],[0,{v:"≏",n:824,o:"≏̸"}],[0,{v:"≐",n:824,o:"≐̸"}],[0,"≑"],[0,"≒"],[0,"≓"],[0,"≔"],[0,"≕"],[0,"≖"],[0,"≗"],[1,"≙"],[0,"≚"],[1,"≜"],[2,"≟"],[0,"≠"],[0,{v:"≡",n:8421,o:"≡⃥"}],[0,"≢"],[1,{v:"≤",n:8402,o:"≤⃒"}],[0,{v:"≥",n:8402,o:"≥⃒"}],[0,{v:"≦",n:824,o:"≦̸"}],[0,{v:"≧",n:824,o:"≧̸"}],[0,{v:"≨",n:65024,o:"≨︀"}],[0,{v:"≩",n:65024,o:"≩︀"}],[0,{v:"≪",n:new Map(dI([[824,"≪̸"],[7577,"≪⃒"]]))}],[0,{v:"≫",n:new Map(dI([[824,"≫̸"],[7577,"≫⃒"]]))}],[0,"≬"],[0,"≭"],[0,"≮"],[0,"≯"],[0,"≰"],[0,"≱"],[0,"≲"],[0,"≳"],[0,"≴"],[0,"≵"],[0,"≶"],[0,"≷"],[0,"≸"],[0,"≹"],[0,"≺"],[0,"≻"],[0,"≼"],[0,"≽"],[0,"≾"],[0,{v:"≿",n:824,o:"≿̸"}],[0,"⊀"],[0,"⊁"],[0,{v:"⊂",n:8402,o:"⊂⃒"}],[0,{v:"⊃",n:8402,o:"⊃⃒"}],[0,"⊄"],[0,"⊅"],[0,"⊆"],[0,"⊇"],[0,"⊈"],[0,"⊉"],[0,{v:"⊊",n:65024,o:"⊊︀"}],[0,{v:"⊋",n:65024,o:"⊋︀"}],[1,"⊍"],[0,"⊎"],[0,{v:"⊏",n:824,o:"⊏̸"}],[0,{v:"⊐",n:824,o:"⊐̸"}],[0,"⊑"],[0,"⊒"],[0,{v:"⊓",n:65024,o:"⊓︀"}],[0,{v:"⊔",n:65024,o:"⊔︀"}],[0,"⊕"],[0,"⊖"],[0,"⊗"],[0,"⊘"],[0,"⊙"],[0,"⊚"],[0,"⊛"],[1,"⊝"],[0,"⊞"],[0,"⊟"],[0,"⊠"],[0,"⊡"],[0,"⊢"],[0,"⊣"],[0,"⊤"],[0,"⊥"],[1,"⊧"],[0,"⊨"],[0,"⊩"],[0,"⊪"],[0,"⊫"],[0,"⊬"],[0,"⊭"],[0,"⊮"],[0,"⊯"],[0,"⊰"],[1,"⊲"],[0,"⊳"],[0,{v:"⊴",n:8402,o:"⊴⃒"}],[0,{v:"⊵",n:8402,o:"⊵⃒"}],[0,"⊶"],[0,"⊷"],[0,"⊸"],[0,"⊹"],[0,"⊺"],[0,"⊻"],[1,"⊽"],[0,"⊾"],[0,"⊿"],[0,"⋀"],[0,"⋁"],[0,"⋂"],[0,"⋃"],[0,"⋄"],[0,"⋅"],[0,"⋆"],[0,"⋇"],[0,"⋈"],[0,"⋉"],[0,"⋊"],[0,"⋋"],[0,"⋌"],[0,"⋍"],[0,"⋎"],[0,"⋏"],[0,"⋐"],[0,"⋑"],[0,"⋒"],[0,"⋓"],[0,"⋔"],[0,"⋕"],[0,"⋖"],[0,"⋗"],[0,{v:"⋘",n:824,o:"⋘̸"}],[0,{v:"⋙",n:824,o:"⋙̸"}],[0,{v:"⋚",n:65024,o:"⋚︀"}],[0,{v:"⋛",n:65024,o:"⋛︀"}],[2,"⋞"],[0,"⋟"],[0,"⋠"],[0,"⋡"],[0,"⋢"],[0,"⋣"],[2,"⋦"],[0,"⋧"],[0,"⋨"],[0,"⋩"],[0,"⋪"],[0,"⋫"],[0,"⋬"],[0,"⋭"],[0,"⋮"],[0,"⋯"],[0,"⋰"],[0,"⋱"],[0,"⋲"],[0,"⋳"],[0,"⋴"],[0,{v:"⋵",n:824,o:"⋵̸"}],[0,"⋶"],[0,"⋷"],[1,{v:"⋹",n:824,o:"⋹̸"}],[0,"⋺"],[0,"⋻"],[0,"⋼"],[0,"⋽"],[0,"⋾"],[6,"⌅"],[0,"⌆"],[1,"⌈"],[0,"⌉"],[0,"⌊"],[0,"⌋"],[0,"⌌"],[0,"⌍"],[0,"⌎"],[0,"⌏"],[0,"⌐"],[1,"⌒"],[0,"⌓"],[1,"⌕"],[0,"⌖"],[5,"⌜"],[0,"⌝"],[0,"⌞"],[0,"⌟"],[2,"⌢"],[0,"⌣"],[9,"⌭"],[0,"⌮"],[7,"⌶"],[6,"⌽"],[1,"⌿"],[60,"⍼"],[51,"⎰"],[0,"⎱"],[2,"⎴"],[0,"⎵"],[0,"⎶"],[37,"⏜"],[0,"⏝"],[0,"⏞"],[0,"⏟"],[2,"⏢"],[4,"⏧"],[59,"␣"],[164,"Ⓢ"],[55,"─"],[1,"│"],[9,"┌"],[3,"┐"],[3,"└"],[3,"┘"],[3,"├"],[7,"┤"],[7,"┬"],[7,"┴"],[7,"┼"],[19,"═"],[0,"║"],[0,"╒"],[0,"╓"],[0,"╔"],[0,"╕"],[0,"╖"],[0,"╗"],[0,"╘"],[0,"╙"],[0,"╚"],[0,"╛"],[0,"╜"],[0,"╝"],[0,"╞"],[0,"╟"],[0,"╠"],[0,"╡"],[0,"╢"],[0,"╣"],[0,"╤"],[0,"╥"],[0,"╦"],[0,"╧"],[0,"╨"],[0,"╩"],[0,"╪"],[0,"╫"],[0,"╬"],[19,"▀"],[3,"▄"],[3,"█"],[8,"░"],[0,"▒"],[0,"▓"],[13,"□"],[8,"▪"],[0,"▫"],[1,"▭"],[0,"▮"],[2,"▱"],[1,"△"],[0,"▴"],[0,"▵"],[2,"▸"],[0,"▹"],[3,"▽"],[0,"▾"],[0,"▿"],[2,"◂"],[0,"◃"],[6,"◊"],[0,"○"],[32,"◬"],[2,"◯"],[8,"◸"],[0,"◹"],[0,"◺"],[0,"◻"],[0,"◼"],[8,"★"],[0,"☆"],[7,"☎"],[49,"♀"],[1,"♂"],[29,"♠"],[2,"♣"],[1,"♥"],[0,"♦"],[3,"♪"],[2,"♭"],[0,"♮"],[0,"♯"],[163,"✓"],[3,"✗"],[8,"✠"],[21,"✶"],[33,"❘"],[25,"❲"],[0,"❳"],[84,"⟈"],[0,"⟉"],[28,"⟦"],[0,"⟧"],[0,"⟨"],[0,"⟩"],[0,"⟪"],[0,"⟫"],[0,"⟬"],[0,"⟭"],[7,"⟵"],[0,"⟶"],[0,"⟷"],[0,"⟸"],[0,"⟹"],[0,"⟺"],[1,"⟼"],[2,"⟿"],[258,"⤂"],[0,"⤃"],[0,"⤄"],[0,"⤅"],[6,"⤌"],[0,"⤍"],[0,"⤎"],[0,"⤏"],[0,"⤐"],[0,"⤑"],[0,"⤒"],[0,"⤓"],[2,"⤖"],[2,"⤙"],[0,"⤚"],[0,"⤛"],[0,"⤜"],[0,"⤝"],[0,"⤞"],[0,"⤟"],[0,"⤠"],[2,"⤣"],[0,"⤤"],[0,"⤥"],[0,"⤦"],[0,"⤧"],[0,"⤨"],[0,"⤩"],[0,"⤪"],[8,{v:"⤳",n:824,o:"⤳̸"}],[1,"⤵"],[0,"⤶"],[0,"⤷"],[0,"⤸"],[0,"⤹"],[2,"⤼"],[0,"⤽"],[7,"⥅"],[2,"⥈"],[0,"⥉"],[0,"⥊"],[0,"⥋"],[2,"⥎"],[0,"⥏"],[0,"⥐"],[0,"⥑"],[0,"⥒"],[0,"⥓"],[0,"⥔"],[0,"⥕"],[0,"⥖"],[0,"⥗"],[0,"⥘"],[0,"⥙"],[0,"⥚"],[0,"⥛"],[0,"⥜"],[0,"⥝"],[0,"⥞"],[0,"⥟"],[0,"⥠"],[0,"⥡"],[0,"⥢"],[0,"⥣"],[0,"⥤"],[0,"⥥"],[0,"⥦"],[0,"⥧"],[0,"⥨"],[0,"⥩"],[0,"⥪"],[0,"⥫"],[0,"⥬"],[0,"⥭"],[0,"⥮"],[0,"⥯"],[0,"⥰"],[0,"⥱"],[0,"⥲"],[0,"⥳"],[0,"⥴"],[0,"⥵"],[0,"⥶"],[1,"⥸"],[0,"⥹"],[1,"⥻"],[0,"⥼"],[0,"⥽"],[0,"⥾"],[0,"⥿"],[5,"⦅"],[0,"⦆"],[4,"⦋"],[0,"⦌"],[0,"⦍"],[0,"⦎"],[0,"⦏"],[0,"⦐"],[0,"⦑"],[0,"⦒"],[0,"⦓"],[0,"⦔"],[0,"⦕"],[0,"⦖"],[3,"⦚"],[1,"⦜"],[0,"⦝"],[6,"⦤"],[0,"⦥"],[0,"⦦"],[0,"⦧"],[0,"⦨"],[0,"⦩"],[0,"⦪"],[0,"⦫"],[0,"⦬"],[0,"⦭"],[0,"⦮"],[0,"⦯"],[0,"⦰"],[0,"⦱"],[0,"⦲"],[0,"⦳"],[0,"⦴"],[0,"⦵"],[0,"⦶"],[0,"⦷"],[1,"⦹"],[1,"⦻"],[0,"⦼"],[1,"⦾"],[0,"⦿"],[0,"⧀"],[0,"⧁"],[0,"⧂"],[0,"⧃"],[0,"⧄"],[0,"⧅"],[3,"⧉"],[3,"⧍"],[0,"⧎"],[0,{v:"⧏",n:824,o:"⧏̸"}],[0,{v:"⧐",n:824,o:"⧐̸"}],[11,"⧜"],[0,"⧝"],[0,"⧞"],[4,"⧣"],[0,"⧤"],[0,"⧥"],[5,"⧫"],[8,"⧴"],[1,"⧶"],[9,"⨀"],[0,"⨁"],[0,"⨂"],[1,"⨄"],[1,"⨆"],[5,"⨌"],[0,"⨍"],[2,"⨐"],[0,"⨑"],[0,"⨒"],[0,"⨓"],[0,"⨔"],[0,"⨕"],[0,"⨖"],[0,"⨗"],[10,"⨢"],[0,"⨣"],[0,"⨤"],[0,"⨥"],[0,"⨦"],[0,"⨧"],[1,"⨩"],[0,"⨪"],[2,"⨭"],[0,"⨮"],[0,"⨯"],[0,"⨰"],[0,"⨱"],[1,"⨳"],[0,"⨴"],[0,"⨵"],[0,"⨶"],[0,"⨷"],[0,"⨸"],[0,"⨹"],[0,"⨺"],[0,"⨻"],[0,"⨼"],[2,"⨿"],[0,"⩀"],[1,"⩂"],[0,"⩃"],[0,"⩄"],[0,"⩅"],[0,"⩆"],[0,"⩇"],[0,"⩈"],[0,"⩉"],[0,"⩊"],[0,"⩋"],[0,"⩌"],[0,"⩍"],[2,"⩐"],[2,"⩓"],[0,"⩔"],[0,"⩕"],[0,"⩖"],[0,"⩗"],[0,"⩘"],[1,"⩚"],[0,"⩛"],[0,"⩜"],[0,"⩝"],[1,"⩟"],[6,"⩦"],[3,"⩪"],[2,{v:"⩭",n:824,o:"⩭̸"}],[0,"⩮"],[0,"⩯"],[0,{v:"⩰",n:824,o:"⩰̸"}],[0,"⩱"],[0,"⩲"],[0,"⩳"],[0,"⩴"],[0,"⩵"],[1,"⩷"],[0,"⩸"],[0,"⩹"],[0,"⩺"],[0,"⩻"],[0,"⩼"],[0,{v:"⩽",n:824,o:"⩽̸"}],[0,{v:"⩾",n:824,o:"⩾̸"}],[0,"⩿"],[0,"⪀"],[0,"⪁"],[0,"⪂"],[0,"⪃"],[0,"⪄"],[0,"⪅"],[0,"⪆"],[0,"⪇"],[0,"⪈"],[0,"⪉"],[0,"⪊"],[0,"⪋"],[0,"⪌"],[0,"⪍"],[0,"⪎"],[0,"⪏"],[0,"⪐"],[0,"⪑"],[0,"⪒"],[0,"⪓"],[0,"⪔"],[0,"⪕"],[0,"⪖"],[0,"⪗"],[0,"⪘"],[0,"⪙"],[0,"⪚"],[2,"⪝"],[0,"⪞"],[0,"⪟"],[0,"⪠"],[0,{v:"⪡",n:824,o:"⪡̸"}],[0,{v:"⪢",n:824,o:"⪢̸"}],[1,"⪤"],[0,"⪥"],[0,"⪦"],[0,"⪧"],[0,"⪨"],[0,"⪩"],[0,"⪪"],[0,"⪫"],[0,{v:"⪬",n:65024,o:"⪬︀"}],[0,{v:"⪭",n:65024,o:"⪭︀"}],[0,"⪮"],[0,{v:"⪯",n:824,o:"⪯̸"}],[0,{v:"⪰",n:824,o:"⪰̸"}],[2,"⪳"],[0,"⪴"],[0,"⪵"],[0,"⪶"],[0,"⪷"],[0,"⪸"],[0,"⪹"],[0,"⪺"],[0,"⪻"],[0,"⪼"],[0,"⪽"],[0,"⪾"],[0,"⪿"],[0,"⫀"],[0,"⫁"],[0,"⫂"],[0,"⫃"],[0,"⫄"],[0,{v:"⫅",n:824,o:"⫅̸"}],[0,{v:"⫆",n:824,o:"⫆̸"}],[0,"⫇"],[0,"⫈"],[2,{v:"⫋",n:65024,o:"⫋︀"}],[0,{v:"⫌",n:65024,o:"⫌︀"}],[2,"⫏"],[0,"⫐"],[0,"⫑"],[0,"⫒"],[0,"⫓"],[0,"⫔"],[0,"⫕"],[0,"⫖"],[0,"⫗"],[0,"⫘"],[0,"⫙"],[0,"⫚"],[0,"⫛"],[8,"⫤"],[1,"⫦"],[0,"⫧"],[0,"⫨"],[0,"⫩"],[1,"⫫"],[0,"⫬"],[0,"⫭"],[0,"⫮"],[0,"⫯"],[0,"⫰"],[0,"⫱"],[0,"⫲"],[0,"⫳"],[9,{v:"⫽",n:8421,o:"⫽⃥"}],[44343,{n:new Map(dI([[56476,"𝒜"],[1,"𝒞"],[0,"𝒟"],[2,"𝒢"],[2,"𝒥"],[0,"𝒦"],[2,"𝒩"],[0,"𝒪"],[0,"𝒫"],[0,"𝒬"],[1,"𝒮"],[0,"𝒯"],[0,"𝒰"],[0,"𝒱"],[0,"𝒲"],[0,"𝒳"],[0,"𝒴"],[0,"𝒵"],[0,"𝒶"],[0,"𝒷"],[0,"𝒸"],[0,"𝒹"],[1,"𝒻"],[1,"𝒽"],[0,"𝒾"],[0,"𝒿"],[0,"𝓀"],[0,"𝓁"],[0,"𝓂"],[0,"𝓃"],[1,"𝓅"],[0,"𝓆"],[0,"𝓇"],[0,"𝓈"],[0,"𝓉"],[0,"𝓊"],[0,"𝓋"],[0,"𝓌"],[0,"𝓍"],[0,"𝓎"],[0,"𝓏"],[52,"𝔄"],[0,"𝔅"],[1,"𝔇"],[0,"𝔈"],[0,"𝔉"],[0,"𝔊"],[2,"𝔍"],[0,"𝔎"],[0,"𝔏"],[0,"𝔐"],[0,"𝔑"],[0,"𝔒"],[0,"𝔓"],[0,"𝔔"],[1,"𝔖"],[0,"𝔗"],[0,"𝔘"],[0,"𝔙"],[0,"𝔚"],[0,"𝔛"],[0,"𝔜"],[1,"𝔞"],[0,"𝔟"],[0,"𝔠"],[0,"𝔡"],[0,"𝔢"],[0,"𝔣"],[0,"𝔤"],[0,"𝔥"],[0,"𝔦"],[0,"𝔧"],[0,"𝔨"],[0,"𝔩"],[0,"𝔪"],[0,"𝔫"],[0,"𝔬"],[0,"𝔭"],[0,"𝔮"],[0,"𝔯"],[0,"𝔰"],[0,"𝔱"],[0,"𝔲"],[0,"𝔳"],[0,"𝔴"],[0,"𝔵"],[0,"𝔶"],[0,"𝔷"],[0,"𝔸"],[0,"𝔹"],[1,"𝔻"],[0,"𝔼"],[0,"𝔽"],[0,"𝔾"],[1,"𝕀"],[0,"𝕁"],[0,"𝕂"],[0,"𝕃"],[0,"𝕄"],[1,"𝕆"],[3,"𝕊"],[0,"𝕋"],[0,"𝕌"],[0,"𝕍"],[0,"𝕎"],[0,"𝕏"],[0,"𝕐"],[1,"𝕒"],[0,"𝕓"],[0,"𝕔"],[0,"𝕕"],[0,"𝕖"],[0,"𝕗"],[0,"𝕘"],[0,"𝕙"],[0,"𝕚"],[0,"𝕛"],[0,"𝕜"],[0,"𝕝"],[0,"𝕞"],[0,"𝕟"],[0,"𝕠"],[0,"𝕡"],[0,"𝕢"],[0,"𝕣"],[0,"𝕤"],[0,"𝕥"],[0,"𝕦"],[0,"𝕧"],[0,"𝕨"],[0,"𝕩"],[0,"𝕪"],[0,"𝕫"]]))}],[8906,"ff"],[0,"fi"],[0,"fl"],[0,"ffi"],[0,"ffl"]]))});var lI=j((pE)=>{Object.defineProperty(pE,"__esModule",{value:!0});pE.escapeText=pE.escapeAttribute=pE.escapeUTF8=pE.escape=pE.encodeXML=pE.getCodePoint=pE.xmlReplacer=void 0;pE.xmlReplacer=/["&'<>$\x80-\uFFFF]/g;var cS=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);pE.getCodePoint=String.prototype.codePointAt!=null?function(_,E){return _.codePointAt(E)}:function(_,E){return(_.charCodeAt(E)&64512)===55296?(_.charCodeAt(E)-55296)*1024+_.charCodeAt(E+1)-56320+65536:_.charCodeAt(E)};function dS(_){var E="",R=0,N;while((N=pE.xmlReplacer.exec(_))!==null){var A=N.index,L=_.charCodeAt(A),U=cS.get(L);if(U!==void 0)E+=_.substring(R,A)+U,R=A+1;else E+="".concat(_.substring(R,A),"&#x").concat(pE.getCodePoint(_,A).toString(16),";"),R=pE.xmlReplacer.lastIndex+=Number((L&64512)===55296)}return E+_.substr(R)}pE.encodeXML=dS;pE.escape=dS;function g3(_,E){return function R(N){var A,L=0,U="";while(A=_.exec(N)){if(L!==A.index)U+=N.substring(L,A.index);U+=E.get(A[0].charCodeAt(0)),L=A.index+1}return U+N.substring(L)}}pE.escapeUTF8=g3(/[&<>'"]/g,cS);pE.escapeAttribute=g3(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]]));pE.escapeText=g3(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))});var y3=j((M1)=>{var cQ=M1&&M1.__importDefault||function(_){return _&&_.__esModule?_:{default:_}};Object.defineProperty(M1,"__esModule",{value:!0});M1.encodeNonAsciiHTML=M1.encodeHTML=void 0;var dQ=cQ(uS()),lS=lI(),lQ=/[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;function nQ(_){return nS(lQ,_)}M1.encodeHTML=nQ;function oQ(_){return nS(lS.xmlReplacer,_)}M1.encodeNonAsciiHTML=oQ;function nS(_,E){var R="",N=0,A;while((A=_.exec(E))!==null){var L=A.index;R+=E.substring(N,L);var U=E.charCodeAt(L),G=dQ.default.get(U);if(typeof G==="object"){if(L+1{Object.defineProperty(J_,"__esModule",{value:!0});J_.decodeXMLStrict=J_.decodeHTML5Strict=J_.decodeHTML4Strict=J_.decodeHTML5=J_.decodeHTML4=J_.decodeHTMLAttribute=J_.decodeHTMLStrict=J_.decodeHTML=J_.decodeXML=J_.DecodingMode=J_.EntityDecoder=J_.encodeHTML5=J_.encodeHTML4=J_.encodeNonAsciiHTML=J_.encodeHTML=J_.escapeText=J_.escapeAttribute=J_.escapeUTF8=J_.escape=J_.encodeXML=J_.encode=J_.decodeStrict=J_.decode=J_.EncodingMode=J_.EntityLevel=void 0;var b3=wO(),oS=y3(),nI=lI(),jT;(function(_){_[_.XML=0]="XML",_[_.HTML=1]="HTML"})(jT=J_.EntityLevel||(J_.EntityLevel={}));var zO;(function(_){_[_.UTF8=0]="UTF8",_[_.ASCII=1]="ASCII",_[_.Extensive=2]="Extensive",_[_.Attribute=3]="Attribute",_[_.Text=4]="Text"})(zO=J_.EncodingMode||(J_.EncodingMode={}));function sS(_,E){if(E===void 0)E=jT.XML;var R=typeof E==="number"?E:E.level;if(R===jT.HTML){var N=typeof E==="object"?E.mode:void 0;return b3.decodeHTML(_,N)}return b3.decodeXML(_)}J_.decode=sS;function sQ(_,E){var R;if(E===void 0)E=jT.XML;var N=typeof E==="number"?{level:E}:E;return(R=N.mode)!==null&&R!==void 0||(N.mode=b3.DecodingMode.Strict),sS(_,N)}J_.decodeStrict=sQ;function tQ(_,E){if(E===void 0)E=jT.XML;var R=typeof E==="number"?{level:E}:E;if(R.mode===zO.UTF8)return nI.escapeUTF8(_);if(R.mode===zO.Attribute)return nI.escapeAttribute(_);if(R.mode===zO.Text)return nI.escapeText(_);if(R.level===jT.HTML){if(R.mode===zO.ASCII)return oS.encodeNonAsciiHTML(_);return oS.encodeHTML(_)}return nI.encodeXML(_)}J_.encode=tQ;var xO=lI();Object.defineProperty(J_,"encodeXML",{enumerable:!0,get:function(){return xO.encodeXML}});Object.defineProperty(J_,"escape",{enumerable:!0,get:function(){return xO.escape}});Object.defineProperty(J_,"escapeUTF8",{enumerable:!0,get:function(){return xO.escapeUTF8}});Object.defineProperty(J_,"escapeAttribute",{enumerable:!0,get:function(){return xO.escapeAttribute}});Object.defineProperty(J_,"escapeText",{enumerable:!0,get:function(){return xO.escapeText}});var oI=y3();Object.defineProperty(J_,"encodeHTML",{enumerable:!0,get:function(){return oI.encodeHTML}});Object.defineProperty(J_,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return oI.encodeNonAsciiHTML}});Object.defineProperty(J_,"encodeHTML4",{enumerable:!0,get:function(){return oI.encodeHTML}});Object.defineProperty(J_,"encodeHTML5",{enumerable:!0,get:function(){return oI.encodeHTML}});var TN=wO();Object.defineProperty(J_,"EntityDecoder",{enumerable:!0,get:function(){return TN.EntityDecoder}});Object.defineProperty(J_,"DecodingMode",{enumerable:!0,get:function(){return TN.DecodingMode}});Object.defineProperty(J_,"decodeXML",{enumerable:!0,get:function(){return TN.decodeXML}});Object.defineProperty(J_,"decodeHTML",{enumerable:!0,get:function(){return TN.decodeHTML}});Object.defineProperty(J_,"decodeHTMLStrict",{enumerable:!0,get:function(){return TN.decodeHTMLStrict}});Object.defineProperty(J_,"decodeHTMLAttribute",{enumerable:!0,get:function(){return TN.decodeHTMLAttribute}});Object.defineProperty(J_,"decodeHTML4",{enumerable:!0,get:function(){return TN.decodeHTML}});Object.defineProperty(J_,"decodeHTML5",{enumerable:!0,get:function(){return TN.decodeHTML}});Object.defineProperty(J_,"decodeHTML4Strict",{enumerable:!0,get:function(){return TN.decodeHTMLStrict}});Object.defineProperty(J_,"decodeHTML5Strict",{enumerable:!0,get:function(){return TN.decodeHTMLStrict}});Object.defineProperty(J_,"decodeXMLStrict",{enumerable:!0,get:function(){return TN.decodeXML}})});var rS=j((vT)=>{Object.defineProperty(vT,"__esModule",{value:!0});vT.attributeNames=vT.elementNames=void 0;vT.elementNames=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(function(_){return[_.toLowerCase(),_]}));vT.attributeNames=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(function(_){return[_.toLowerCase(),_]}))});var _C=j((hR)=>{var pT=hR&&hR.__assign||function(){return pT=Object.assign||function(_){for(var E,R=1,N=arguments.length;R0)N+=tI(_.children,E);if(E.xmlMode||!aS.has(_.name))N+="")}return N}function Iz(_){return"<".concat(_.data,">")}function Lz(_,E){var R,N=_.data||"";if(((R=E.encodeEntities)!==null&&R!==void 0?R:E.decodeEntities)!==!1&&!(!E.xmlMode&&_.parent&&_z.has(_.parent.name)))N=E.xmlMode||E.encodeEntities!=="utf8"?sI.encodeXML(N):sI.escapeText(N);return N}function Uz(_){return"")}function Gz(_){return"")}});var c3=j((VR)=>{var Dz=VR&&VR.__importDefault||function(_){return _&&_.__esModule?_:{default:_}};Object.defineProperty(VR,"__esModule",{value:!0});VR.innerText=VR.textContent=VR.getText=VR.getInnerHTML=VR.getOuterHTML=void 0;var VN=lN(),Sz=Dz(_C()),Cz=fT();function EC(_,E){return Sz.default(_,E)}VR.getOuterHTML=EC;function Pz(_,E){return VN.hasChildren(_)?_.children.map(function(R){return EC(R,E)}).join(""):""}VR.getInnerHTML=Pz;function rI(_){if(Array.isArray(_))return _.map(rI).join("");if(VN.isTag(_))return _.name==="br"?"\n":rI(_.children);if(VN.isCDATA(_))return rI(_.children);if(VN.isText(_))return _.data;return""}VR.getText=rI;function i3(_){if(Array.isArray(_))return _.map(i3).join("");if(VN.hasChildren(_)&&!VN.isComment(_))return i3(_.children);if(VN.isText(_))return _.data;return""}VR.textContent=i3;function u3(_){if(Array.isArray(_))return _.map(u3).join("");if(VN.hasChildren(_)&&(_.type===Cz.ElementType.Tag||VN.isCDATA(_)))return u3(_.children);if(VN.isText(_))return _.data;return""}VR.innerText=u3});var TC=j((yE)=>{Object.defineProperty(yE,"__esModule",{value:!0});yE.prevElementSibling=yE.nextElementSibling=yE.getName=yE.hasAttrib=yE.getAttributeValue=yE.getSiblings=yE.getParent=yE.getChildren=void 0;var d3=lN();function RC(_){return d3.hasChildren(_)?_.children:[]}yE.getChildren=RC;function NC(_){return _.parent||null}yE.getParent=NC;function Yz(_){var E,R,N=NC(_);if(N!=null)return RC(N);var A=[_],L=_.prev,U=_.next;while(L!=null)A.unshift(L),E=L,L=E.prev;while(U!=null)A.push(U),R=U,U=R.next;return A}yE.getSiblings=Yz;function Hz(_,E){var R;return(R=_.attribs)===null||R===void 0?void 0:R[E]}yE.getAttributeValue=Hz;function Wz(_,E){return _.attribs!=null&&Object.prototype.hasOwnProperty.call(_.attribs,E)&&_.attribs[E]!=null}yE.hasAttrib=Wz;function Mz(_){return _.name}yE.getName=Mz;function Fz(_){var E,R=_.next;while(R!==null&&!d3.isTag(R))E=R,R=E.next;return R}yE.nextElementSibling=Fz;function Bz(_){var E,R=_.prev;while(R!==null&&!d3.isTag(R))E=R,R=E.prev;return R}yE.prevElementSibling=Bz});var OC=j((KR)=>{Object.defineProperty(KR,"__esModule",{value:!0});KR.prepend=KR.prependChild=KR.append=KR.appendChild=KR.replaceElement=KR.removeElement=void 0;function qO(_){if(_.prev)_.prev.next=_.next;if(_.next)_.next.prev=_.prev;if(_.parent){var E=_.parent.children,R=E.lastIndexOf(_);if(R>=0)E.splice(R,1)}_.next=null,_.prev=null,_.parent=null}KR.removeElement=qO;function Vz(_,E){var R=E.prev=_.prev;if(R)R.next=E;var N=E.next=_.next;if(N)N.prev=E;var A=E.parent=_.parent;if(A){var L=A.children;L[L.lastIndexOf(_)]=E,_.parent=null}}KR.replaceElement=Vz;function Kz(_,E){if(qO(E),E.next=null,E.parent=_,_.children.push(E)>1){var R=_.children[_.children.length-2];R.next=E,E.prev=R}else E.prev=null}KR.appendChild=Kz;function Xz(_,E){qO(E);var{parent:R,next:N}=_;if(E.next=N,E.prev=_,_.next=E,E.parent=R,N){if(N.prev=E,R){var A=R.children;A.splice(A.lastIndexOf(N),0,E)}}else if(R)R.children.push(E)}KR.append=Xz;function Jz(_,E){if(qO(E),E.parent=_,E.prev=null,_.children.unshift(E)!==1){var R=_.children[1];R.prev=E,E.next=R}else E.next=null}KR.prependChild=Jz;function $z(_,E){qO(E);var R=_.parent;if(R){var N=R.children;N.splice(N.indexOf(_),0,E)}if(_.prev)_.prev.next=E;E.parent=R,E.prev=_.prev,E.next=_,_.prev=E}KR.prepend=$z});var l3=j((XR)=>{Object.defineProperty(XR,"__esModule",{value:!0});XR.findAll=XR.existsOne=XR.findOne=XR.findOneChild=XR.find=XR.filter=void 0;var aI=lN();function Zz(_,E,R,N){if(R===void 0)R=!0;if(N===void 0)N=1/0;return AC(_,Array.isArray(E)?E:[E],R,N)}XR.filter=Zz;function AC(_,E,R,N){var A=[],L=[E],U=[0];for(;;){if(U[0]>=L[0].length){if(U.length===1)return A;L.shift(),U.shift();continue}var G=L[0][U[0]++];if(_(G)){if(A.push(G),--N<=0)return A}if(R&&aI.hasChildren(G)&&G.children.length>0)U.unshift(0),L.unshift(G.children)}}XR.find=AC;function wz(_,E){return E.find(_)}XR.findOneChild=wz;function IC(_,E,R){if(R===void 0)R=!0;var N=null;for(var A=0;A0)N=IC(_,L.children,!0)}return N}XR.findOne=IC;function LC(_,E){return E.some(function(R){return aI.isTag(R)&&(_(R)||LC(_,R.children))})}XR.existsOne=LC;function Qz(_,E){var R=[],N=[E],A=[0];for(;;){if(A[0]>=N[0].length){if(N.length===1)return R;N.shift(),A.shift();continue}var L=N[0][A[0]++];if(!aI.isTag(L))continue;if(_(L))R.push(L);if(L.children.length>0)A.unshift(0),N.unshift(L.children)}}XR.findAll=Qz});var n3=j((nR)=>{Object.defineProperty(nR,"__esModule",{value:!0});nR.getElementsByTagType=nR.getElementsByTagName=nR.getElementById=nR.getElements=nR.testElement=void 0;var l1=lN(),_L=l3(),eI={tag_name:function(_){if(typeof _==="function")return function(E){return l1.isTag(E)&&_(E.name)};else if(_==="*")return l1.isTag;return function(E){return l1.isTag(E)&&E.name===_}},tag_type:function(_){if(typeof _==="function")return function(E){return _(E.type)};return function(E){return E.type===_}},tag_contains:function(_){if(typeof _==="function")return function(E){return l1.isText(E)&&_(E.data)};return function(E){return l1.isText(E)&&E.data===_}}};function UC(_,E){if(typeof E==="function")return function(R){return l1.isTag(R)&&E(R.attribs[_])};return function(R){return l1.isTag(R)&&R.attribs[_]===E}}function zz(_,E){return function(R){return _(R)||E(R)}}function GC(_){var E=Object.keys(_).map(function(R){var N=_[R];return Object.prototype.hasOwnProperty.call(eI,R)?eI[R](N):UC(R,N)});return E.length===0?null:E.reduce(zz)}function xz(_,E){var R=GC(_);return R?R(E):!0}nR.testElement=xz;function qz(_,E,R,N){if(N===void 0)N=1/0;var A=GC(_);return A?_L.filter(A,E,R,N):[]}nR.getElements=qz;function fz(_,E,R){if(R===void 0)R=!0;if(!Array.isArray(E))E=[E];return _L.findOne(UC("id",_),E,R)}nR.getElementById=fz;function jz(_,E,R,N){if(R===void 0)R=!0;if(N===void 0)N=1/0;return _L.filter(eI.tag_name(_),E,R,N)}nR.getElementsByTagName=jz;function vz(_,E,R,N){if(R===void 0)R=!0;if(N===void 0)N=1/0;return _L.filter(eI.tag_type(_),E,R,N)}nR.getElementsByTagType=vz});var CC=j((ON)=>{Object.defineProperty(ON,"__esModule",{value:!0});ON.uniqueSort=ON.compareDocumentPosition=ON.DocumentPosition=ON.removeSubsets=void 0;var DC=lN();function pz(_){var E=_.length;while(--E>=0){var R=_[E];if(E>0&&_.lastIndexOf(R,E-1)>=0){_.splice(E,1);continue}for(var N=R.parent;N;N=N.parent)if(_.includes(N)){_.splice(E,1);break}}return _}ON.removeSubsets=pz;var KN;(function(_){_[_.DISCONNECTED=1]="DISCONNECTED",_[_.PRECEDING=2]="PRECEDING",_[_.FOLLOWING=4]="FOLLOWING",_[_.CONTAINS=8]="CONTAINS",_[_.CONTAINED_BY=16]="CONTAINED_BY"})(KN=ON.DocumentPosition||(ON.DocumentPosition={}));function SC(_,E){var R=[],N=[];if(_===E)return 0;var A=DC.hasChildren(_)?_:_.parent;while(A)R.unshift(A),A=A.parent;A=DC.hasChildren(E)?E:E.parent;while(A)N.unshift(A),A=A.parent;var L=Math.min(R.length,N.length),U=0;while(US.indexOf(Y)){if(G===E)return KN.FOLLOWING|KN.CONTAINED_BY;return KN.FOLLOWING}if(G===_)return KN.PRECEDING|KN.CONTAINS;return KN.PRECEDING}ON.compareDocumentPosition=SC;function hz(_){return _=_.filter(function(E,R,N){return!N.includes(E,R+1)}),_.sort(function(E,R){var N=SC(E,R);if(N&KN.PRECEDING)return-1;else if(N&KN.FOLLOWING)return 1;return 0}),_}ON.uniqueSort=hz});var YC=j((RL)=>{Object.defineProperty(RL,"__esModule",{value:!0});RL.getFeed=void 0;var kz=c3(),fO=n3();function mz(_){var E=EL(uz,_);return!E?null:E.name==="feed"?gz(E):yz(E)}RL.getFeed=mz;function gz(_){var E,R=_.children,N={type:"atom",items:fO.getElementsByTagName("entry",R).map(function(U){var G,S=U.children,C={media:PC(S)};JR(C,"id","id",S),JR(C,"title","title",S);var Y=(G=EL("link",S))===null||G===void 0?void 0:G.attribs.href;if(Y)C.link=Y;var M=F1("summary",S)||F1("content",S);if(M)C.description=M;var H=F1("updated",S);if(H)C.pubDate=new Date(H);return C})};JR(N,"id","id",R),JR(N,"title","title",R);var A=(E=EL("link",R))===null||E===void 0?void 0:E.attribs.href;if(A)N.link=A;JR(N,"description","subtitle",R);var L=F1("updated",R);if(L)N.updated=new Date(L);return JR(N,"author","email",R,!0),N}function yz(_){var E,R,N=(R=(E=EL("channel",_.children))===null||E===void 0?void 0:E.children)!==null&&R!==void 0?R:[],A={type:_.name.substr(0,3),id:"",items:fO.getElementsByTagName("item",_.children).map(function(U){var G=U.children,S={media:PC(G)};JR(S,"id","guid",G),JR(S,"title","title",G),JR(S,"link","link",G),JR(S,"description","description",G);var C=F1("pubDate",G)||F1("dc:date",G);if(C)S.pubDate=new Date(C);return S})};JR(A,"title","title",N),JR(A,"link","link",N),JR(A,"description","description",N);var L=F1("lastBuildDate",N);if(L)A.updated=new Date(L);return JR(A,"author","managingEditor",N,!0),A}var bz=["url","type","lang"],iz=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function PC(_){return fO.getElementsByTagName("media:content",_).map(function(E){var R=E.attribs,N={medium:R.medium,isDefault:!!R.isDefault};for(var A=0,L=bz;A{var cz=YE&&YE.__createBinding||(Object.create?function(_,E,R,N){if(N===void 0)N=R;var A=Object.getOwnPropertyDescriptor(E,R);if(!A||("get"in A?!E.__esModule:A.writable||A.configurable))A={enumerable:!0,get:function(){return E[R]}};Object.defineProperty(_,N,A)}:function(_,E,R,N){if(N===void 0)N=R;_[N]=E[R]}),n1=YE&&YE.__exportStar||function(_,E){for(var R in _)if(R!=="default"&&!Object.prototype.hasOwnProperty.call(E,R))cz(E,_,R)};Object.defineProperty(YE,"__esModule",{value:!0});YE.hasChildren=YE.isDocument=YE.isComment=YE.isText=YE.isCDATA=YE.isTag=void 0;n1(c3(),YE);n1(TC(),YE);n1(OC(),YE);n1(l3(),YE);n1(n3(),YE);n1(CC(),YE);n1(YC(),YE);var hT=lN();Object.defineProperty(YE,"isTag",{enumerable:!0,get:function(){return hT.isTag}});Object.defineProperty(YE,"isCDATA",{enumerable:!0,get:function(){return hT.isCDATA}});Object.defineProperty(YE,"isText",{enumerable:!0,get:function(){return hT.isText}});Object.defineProperty(YE,"isComment",{enumerable:!0,get:function(){return hT.isComment}});Object.defineProperty(YE,"isDocument",{enumerable:!0,get:function(){return hT.isDocument}});Object.defineProperty(YE,"hasChildren",{enumerable:!0,get:function(){return hT.hasChildren}})});var KC=j((o_)=>{var dz=o_&&o_.__createBinding||(Object.create?function(_,E,R,N){if(N===void 0)N=R;var A=Object.getOwnPropertyDescriptor(E,R);if(!A||("get"in A?!E.__esModule:A.writable||A.configurable))A={enumerable:!0,get:function(){return E[R]}};Object.defineProperty(_,N,A)}:function(_,E,R,N){if(N===void 0)N=R;_[N]=E[R]}),lz=o_&&o_.__setModuleDefault||(Object.create?function(_,E){Object.defineProperty(_,"default",{enumerable:!0,value:E})}:function(_,E){_.default=E}),HC=o_&&o_.__importStar||function(_){if(_&&_.__esModule)return _;var E={};if(_!=null){for(var R in _)if(R!=="default"&&Object.prototype.hasOwnProperty.call(_,R))dz(E,_,R)}return lz(E,_),E},nz=o_&&o_.__importDefault||function(_){return _&&_.__esModule?_:{default:_}};Object.defineProperty(o_,"__esModule",{value:!0});o_.DomUtils=o_.parseFeed=o_.getFeed=o_.ElementType=o_.Tokenizer=o_.createDomStream=o_.parseDOM=o_.parseDocument=o_.DefaultHandler=o_.DomHandler=o_.Parser=void 0;var WC=f3(),oz=f3();Object.defineProperty(o_,"Parser",{enumerable:!0,get:function(){return oz.Parser}});var MC=lN(),FC=lN();Object.defineProperty(o_,"DomHandler",{enumerable:!0,get:function(){return FC.DomHandler}});Object.defineProperty(o_,"DefaultHandler",{enumerable:!0,get:function(){return FC.DomHandler}});function BC(_,E){var R=new MC.DomHandler(void 0,E);return new WC.Parser(R,E).end(_),R.root}o_.parseDocument=BC;function VC(_,E){return BC(_,E).children}o_.parseDOM=VC;function sz(_,E,R){var N=new MC.DomHandler(_,E,R);return new WC.Parser(N,E)}o_.createDomStream=sz;var tz=q3();Object.defineProperty(o_,"Tokenizer",{enumerable:!0,get:function(){return nz(tz).default}});o_.ElementType=HC(fT());var rz=NL(),az=NL();Object.defineProperty(o_,"getFeed",{enumerable:!0,get:function(){return az.getFeed}});var ez={xmlMode:!0};function _x(_,E){if(E===void 0)E=ez;return rz.getFeed(VC(_,E))}o_.parseFeed=_x;o_.DomUtils=HC(NL())});var JC=j((Em,XC)=>{XC.exports=(_)=>{if(typeof _!=="string")throw new TypeError("Expected a string");return _.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}});var ZC=j((o3)=>{Object.defineProperty(o3,"__esModule",{value:!0});/*! - * is-plain-object - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */function $C(_){return Object.prototype.toString.call(_)==="[object Object]"}function Ex(_){var E,R;if($C(_)===!1)return!1;if(E=_.constructor,E===void 0)return!0;if(R=E.prototype,$C(R)===!1)return!1;if(R.hasOwnProperty("isPrototypeOf")===!1)return!1;return!0}o3.isPlainObject=Ex});var xC=j((Nm,zC)=>{var Rx=function _(E){return Nx(E)&&!Tx(E)};function Nx(_){return!!_&&typeof _==="object"}function Tx(_){var E=Object.prototype.toString.call(_);return E==="[object RegExp]"||E==="[object Date]"||Ix(_)}var Ox=typeof Symbol==="function"&&Symbol.for,Ax=Ox?Symbol.for("react.element"):60103;function Ix(_){return _.$$typeof===Ax}function Lx(_){return Array.isArray(_)?[]:{}}function jO(_,E){return E.clone!==!1&&E.isMergeableObject(_)?kT(Lx(_),_,E):_}function Ux(_,E,R){return _.concat(E).map(function(N){return jO(N,R)})}function Gx(_,E){if(!E.customMerge)return kT;var R=E.customMerge(_);return typeof R==="function"?R:kT}function Dx(_){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(_).filter(function(E){return Object.propertyIsEnumerable.call(_,E)}):[]}function wC(_){return Object.keys(_).concat(Dx(_))}function QC(_,E){try{return E in _}catch(R){return!1}}function Sx(_,E){return QC(_,E)&&!(Object.hasOwnProperty.call(_,E)&&Object.propertyIsEnumerable.call(_,E))}function Cx(_,E,R){var N={};if(R.isMergeableObject(_))wC(_).forEach(function(A){N[A]=jO(_[A],R)});return wC(E).forEach(function(A){if(Sx(_,A))return;if(QC(_,A)&&R.isMergeableObject(E[A]))N[A]=Gx(A,R)(_[A],E[A],R);else N[A]=jO(E[A],R)}),N}function kT(_,E,R){R=R||{},R.arrayMerge=R.arrayMerge||Ux,R.isMergeableObject=R.isMergeableObject||Rx,R.cloneUnlessOtherwiseSpecified=jO;var N=Array.isArray(E),A=Array.isArray(_),L=N===A;if(!L)return jO(E,R);else if(N)return R.arrayMerge(_,E,R);else return Cx(_,E,R)}kT.all=function _(E,R){if(!Array.isArray(E))throw new Error("first argument should be an array");return E.reduce(function(N,A){return kT(N,A,R)},{})};var Px=kT;zC.exports=Px});var fC=j((qC,TL)=>{(function(_,E){if(typeof define==="function"&&define.amd)define([],E);else if(typeof TL==="object"&&TL.exports)TL.exports=E();else _.parseSrcset=E()})(qC,function(){return function(_){function E(t){return t===" "||t==="\t"||t===` -`||t==="\f"||t===`\r`}function R(t){var s,m=t.exec(_.substring(z));if(m)return s=m[0],z+=s.length,s}var N=_.length,A=/^[ \t\n\r\u000c]+/,L=/^[, \t\n\r\u000c]+/,U=/^[^ \t\n\r\u000c]+/,G=/[,]+$/,S=/^\d+$/,C=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,Y,M,H,X,$,z=0,w=[];while(!0){if(R(L),z>=N)return w;if(Y=R(U),M=[],Y.slice(-1)===",")Y=Y.replace(G,""),d();else g()}function g(){R(A),H="",X="in descriptor";while(!0){if($=_.charAt(z),X==="in descriptor")if(E($)){if(H)M.push(H),H="",X="after descriptor"}else if($===","){if(z+=1,H)M.push(H);d();return}else if($==="(")H=H+$,X="in parens";else if($===""){if(H)M.push(H);d();return}else H=H+$;else if(X==="in parens")if($===")")H=H+$,X="in descriptor";else if($===""){M.push(H),d();return}else H=H+$;else if(X==="after descriptor")if(E($));else if($===""){d();return}else X="in descriptor",z-=1;z+=1}}function d(){var t=!1,s,m,k,e,o={},c,S_,U_,V_,K_;for(e=0;e{var AL=process||{},jC=AL.argv||[],OL=AL.env||{},Yx=!(!!OL.NO_COLOR||jC.includes("--no-color"))&&(!!OL.FORCE_COLOR||jC.includes("--color")||AL.platform==="win32"||(AL.stdout||{}).isTTY&&OL.TERM!=="dumb"||!!OL.CI),Hx=(_,E,R=_)=>(N)=>{let A=""+N,L=A.indexOf(E,_.length);return~L?_+Wx(A,E,R,L)+E:_+A+E},Wx=(_,E,R,N)=>{let A="",L=0;do A+=_.substring(L,N)+R,L=N+E.length,N=_.indexOf(E,L);while(~N);return A+_.substring(L)},vC=(_=Yx)=>{let E=_?Hx:()=>String;return{isColorSupported:_,reset:E("\x1B[0m","\x1B[0m"),bold:E("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:E("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:E("\x1B[3m","\x1B[23m"),underline:E("\x1B[4m","\x1B[24m"),inverse:E("\x1B[7m","\x1B[27m"),hidden:E("\x1B[8m","\x1B[28m"),strikethrough:E("\x1B[9m","\x1B[29m"),black:E("\x1B[30m","\x1B[39m"),red:E("\x1B[31m","\x1B[39m"),green:E("\x1B[32m","\x1B[39m"),yellow:E("\x1B[33m","\x1B[39m"),blue:E("\x1B[34m","\x1B[39m"),magenta:E("\x1B[35m","\x1B[39m"),cyan:E("\x1B[36m","\x1B[39m"),white:E("\x1B[37m","\x1B[39m"),gray:E("\x1B[90m","\x1B[39m"),bgBlack:E("\x1B[40m","\x1B[49m"),bgRed:E("\x1B[41m","\x1B[49m"),bgGreen:E("\x1B[42m","\x1B[49m"),bgYellow:E("\x1B[43m","\x1B[49m"),bgBlue:E("\x1B[44m","\x1B[49m"),bgMagenta:E("\x1B[45m","\x1B[49m"),bgCyan:E("\x1B[46m","\x1B[49m"),bgWhite:E("\x1B[47m","\x1B[49m"),blackBright:E("\x1B[90m","\x1B[39m"),redBright:E("\x1B[91m","\x1B[39m"),greenBright:E("\x1B[92m","\x1B[39m"),yellowBright:E("\x1B[93m","\x1B[39m"),blueBright:E("\x1B[94m","\x1B[39m"),magentaBright:E("\x1B[95m","\x1B[39m"),cyanBright:E("\x1B[96m","\x1B[39m"),whiteBright:E("\x1B[97m","\x1B[39m"),bgBlackBright:E("\x1B[100m","\x1B[49m"),bgRedBright:E("\x1B[101m","\x1B[49m"),bgGreenBright:E("\x1B[102m","\x1B[49m"),bgYellowBright:E("\x1B[103m","\x1B[49m"),bgBlueBright:E("\x1B[104m","\x1B[49m"),bgMagentaBright:E("\x1B[105m","\x1B[49m"),bgCyanBright:E("\x1B[106m","\x1B[49m"),bgWhiteBright:E("\x1B[107m","\x1B[49m")}};s3.exports=vC();s3.exports.createColors=vC});var a3=j((Om,mC)=>{var r3="'".charCodeAt(0),pC='"'.charCodeAt(0),IL="\\".charCodeAt(0),hC="/".charCodeAt(0),LL="\n".charCodeAt(0),vO=" ".charCodeAt(0),UL="\f".charCodeAt(0),GL="\t".charCodeAt(0),DL="\r".charCodeAt(0),Mx="[".charCodeAt(0),Fx="]".charCodeAt(0),Bx="(".charCodeAt(0),Vx=")".charCodeAt(0),Kx="{".charCodeAt(0),Xx="}".charCodeAt(0),Jx=";".charCodeAt(0),$x="*".charCodeAt(0),Zx=":".charCodeAt(0),wx="@".charCodeAt(0),SL=/[\t\n\f\r "#'()/;[\\\]{}]/g,CL=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,Qx=/.[\r\n"'(/\\]/,kC=/[\da-f]/i;mC.exports=function _(E,R={}){let N=E.css.valueOf(),A=R.ignoreErrors,L,U,G,S,C,Y,M,H,X,$,z=N.length,w=0,g=[],d=[];function t(){return w}function s(o){throw E.error("Unclosed "+o,w)}function m(){return d.length===0&&w>=z}function k(o){if(d.length)return d.pop();if(w>=z)return;let c=o?o.ignoreUnclosed:!1;switch(L=N.charCodeAt(w),L){case LL:case vO:case GL:case DL:case UL:{S=w;do S+=1,L=N.charCodeAt(S);while(L===vO||L===LL||L===GL||L===DL||L===UL);Y=["space",N.slice(w,S)],w=S-1;break}case Mx:case Fx:case Kx:case Xx:case Zx:case Jx:case Vx:{let S_=String.fromCharCode(L);Y=[S_,S_,w];break}case Bx:{if($=g.length?g.pop()[1]:"",X=N.charCodeAt(w+1),$==="url"&&X!==r3&&X!==pC&&X!==vO&&X!==LL&&X!==GL&&X!==UL&&X!==DL){S=w;do{if(M=!1,S=N.indexOf(")",S+1),S===-1)if(A||c){S=w;break}else s("bracket");H=S;while(N.charCodeAt(H-1)===IL)H-=1,M=!M}while(M);Y=["brackets",N.slice(w,S+1),w,S],w=S}else if(S=N.indexOf(")",w+1),U=N.slice(w,S+1),S===-1||Qx.test(U))Y=["(","(",w];else Y=["brackets",U,w,S],w=S;break}case r3:case pC:{C=L===r3?"'":'"',S=w;do{if(M=!1,S=N.indexOf(C,S+1),S===-1)if(A||c){S=w+1;break}else s("string");H=S;while(N.charCodeAt(H-1)===IL)H-=1,M=!M}while(M);Y=["string",N.slice(w,S+1),w,S],w=S;break}case wx:{if(SL.lastIndex=w+1,SL.test(N),SL.lastIndex===0)S=N.length-1;else S=SL.lastIndex-2;Y=["at-word",N.slice(w,S+1),w,S],w=S;break}case IL:{S=w,G=!0;while(N.charCodeAt(S+1)===IL)S+=1,G=!G;if(L=N.charCodeAt(S+1),G&&L!==hC&&L!==vO&&L!==LL&&L!==GL&&L!==DL&&L!==UL){if(S+=1,kC.test(N.charAt(S))){while(kC.test(N.charAt(S+1)))S+=1;if(N.charCodeAt(S+1)===vO)S+=1}}Y=["word",N.slice(w,S+1),w,S],w=S;break}default:{if(L===hC&&N.charCodeAt(w+1)===$x){if(S=N.indexOf("*/",w+2)+1,S===0)if(A||c)S=N.length;else s("comment");Y=["comment",N.slice(w,S+1),w,S],w=S}else{if(CL.lastIndex=w+1,CL.test(N),CL.lastIndex===0)S=N.length-1;else S=CL.lastIndex-2;Y=["word",N.slice(w,S+1),w,S],g.push(Y),w=S}break}}return w++,Y}function e(o){d.push(o)}return{back:e,endOfFile:m,nextToken:k,position:t}}});var e3=j((Am,bC)=>{var AR=t3(),zx=a3(),gC;function xx(_){gC=_}var qx={";":AR.yellow,":":AR.yellow,"(":AR.cyan,")":AR.cyan,"[":AR.yellow,"]":AR.yellow,"{":AR.yellow,"}":AR.yellow,"at-word":AR.cyan,brackets:AR.cyan,call:AR.cyan,class:AR.yellow,comment:AR.gray,hash:AR.magenta,string:AR.green};function fx([_,E],R){if(_==="word"){if(E[0]===".")return"class";if(E[0]==="#")return"hash"}if(!R.endOfFile()){let N=R.nextToken();if(R.back(N),N[0]==="brackets"||N[0]==="(")return"call"}return _}function yC(_){let E=zx(new gC(_),{ignoreErrors:!0}),R="";while(!E.endOfFile()){let N=E.nextToken(),A=qx[fx(N,E)];if(A)R+=N[1].split(/\r?\n/).map((L)=>A(L)).join("\n");else R+=N[1]}return R}yC.registerInput=xx;bC.exports=yC});var PL=j((Im,cC)=>{var iC=t3(),uC=e3();class pO extends Error{constructor(_,E,R,N,A,L){super(_);if(this.name="CssSyntaxError",this.reason=_,A)this.file=A;if(N)this.source=N;if(L)this.plugin=L;if(typeof E!=="undefined"&&typeof R!=="undefined")if(typeof E==="number")this.line=E,this.column=R;else this.line=E.line,this.column=E.column,this.endLine=R.line,this.endColumn=R.column;if(this.setMessage(),Error.captureStackTrace)Error.captureStackTrace(this,pO)}setMessage(){if(this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line!=="undefined")this.message+=":"+this.line+":"+this.column;this.message+=": "+this.reason}showSourceCode(_){if(!this.source)return"";let E=this.source;if(_==null)_=iC.isColorSupported;let R=(C)=>C,N=(C)=>C,A=(C)=>C;if(_){let{bold:C,gray:Y,red:M}=iC.createColors(!0);if(N=(H)=>C(M(H)),R=(H)=>Y(H),uC)A=(H)=>uC(H)}let L=E.split(/\r?\n/),U=Math.max(this.line-3,0),G=Math.min(this.line+2,L.length),S=String(G).length;return L.slice(U,G).map((C,Y)=>{let M=U+1+Y,H=" "+(" "+M).slice(-S)+" | ";if(M===this.line){if(C.length>160){let $=20,z=Math.max(0,this.column-$),w=Math.max(this.column+$,this.endColumn+$),g=C.slice(z,w),d=R(H.replace(/\d/g," "))+C.slice(0,Math.min(this.column-1,$-1)).replace(/[^\t]/g," ");return N(">")+R(H)+A(g)+"\n "+d+N("^")}let X=R(H.replace(/\d/g," "))+C.slice(0,this.column-1).replace(/[^\t]/g," ");return N(">")+R(H)+A(C)+"\n "+X+N("^")}return" "+R(H)+A(C)}).join("\n")}toString(){let _=this.showSourceCode();if(_)_="\n\n"+_+"\n";return this.name+": "+this.message+_}}cC.exports=pO;pO.default=pO});var _G=j((Lm,lC)=>{var dC={after:"\n",beforeClose:"\n",beforeComment:"\n",beforeDecl:"\n",beforeOpen:" ",beforeRule:"\n",colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function jx(_){return _[0].toUpperCase()+_.slice(1)}class YL{constructor(_){this.builder=_}atrule(_,E){let R="@"+_.name,N=_.params?this.rawValue(_,"params"):"";if(typeof _.raws.afterName!=="undefined")R+=_.raws.afterName;else if(N)R+=" ";if(_.nodes)this.block(_,R+N);else{let A=(_.raws.between||"")+(E?";":"");this.builder(R+N+A,_)}}beforeAfter(_,E){let R;if(_.type==="decl")R=this.raw(_,null,"beforeDecl");else if(_.type==="comment")R=this.raw(_,null,"beforeComment");else if(E==="before")R=this.raw(_,null,"beforeRule");else R=this.raw(_,null,"beforeClose");let N=_.parent,A=0;while(N&&N.type!=="root")A+=1,N=N.parent;if(R.includes("\n")){let L=this.raw(_,null,"indent");if(L.length)for(let U=0;U0){if(_.nodes[E].type!=="comment")break;E-=1}let R=this.raw(_,"semicolon");for(let N=0;N<_.nodes.length;N++){let A=_.nodes[N],L=this.raw(A,"before");if(L)this.builder(L);this.stringify(A,E!==N||R)}}comment(_){let E=this.raw(_,"left","commentLeft"),R=this.raw(_,"right","commentRight");this.builder("/*"+E+_.text+R+"*/",_)}decl(_,E){let R=this.raw(_,"between","colon"),N=_.prop+R+this.rawValue(_,"value");if(_.important)N+=_.raws.important||" !important";if(E)N+=";";this.builder(N,_)}document(_){this.body(_)}raw(_,E,R){let N;if(!R)R=E;if(E){if(N=_.raws[E],typeof N!=="undefined")return N}let A=_.parent;if(R==="before"){if(!A||A.type==="root"&&A.first===_)return"";if(A&&A.type==="document")return""}if(!A)return dC[R];let L=_.root();if(!L.rawCache)L.rawCache={};if(typeof L.rawCache[R]!=="undefined")return L.rawCache[R];if(R==="before"||R==="after")return this.beforeAfter(_,R);else{let U="raw"+jx(R);if(this[U])N=this[U](L,_);else L.walk((G)=>{if(N=G.raws[E],typeof N!=="undefined")return!1})}if(typeof N==="undefined")N=dC[R];return L.rawCache[R]=N,N}rawBeforeClose(_){let E;if(_.walk((R)=>{if(R.nodes&&R.nodes.length>0){if(typeof R.raws.after!=="undefined"){if(E=R.raws.after,E.includes("\n"))E=E.replace(/[^\n]+$/,"");return!1}}}),E)E=E.replace(/\S/g,"");return E}rawBeforeComment(_,E){let R;if(_.walkComments((N)=>{if(typeof N.raws.before!=="undefined"){if(R=N.raws.before,R.includes("\n"))R=R.replace(/[^\n]+$/,"");return!1}}),typeof R==="undefined")R=this.raw(E,null,"beforeDecl");else if(R)R=R.replace(/\S/g,"");return R}rawBeforeDecl(_,E){let R;if(_.walkDecls((N)=>{if(typeof N.raws.before!=="undefined"){if(R=N.raws.before,R.includes("\n"))R=R.replace(/[^\n]+$/,"");return!1}}),typeof R==="undefined")R=this.raw(E,null,"beforeRule");else if(R)R=R.replace(/\S/g,"");return R}rawBeforeOpen(_){let E;return _.walk((R)=>{if(R.type!=="decl"){if(E=R.raws.between,typeof E!=="undefined")return!1}}),E}rawBeforeRule(_){let E;if(_.walk((R)=>{if(R.nodes&&(R.parent!==_||_.first!==R)){if(typeof R.raws.before!=="undefined"){if(E=R.raws.before,E.includes("\n"))E=E.replace(/[^\n]+$/,"");return!1}}}),E)E=E.replace(/\S/g,"");return E}rawColon(_){let E;return _.walkDecls((R)=>{if(typeof R.raws.between!=="undefined")return E=R.raws.between.replace(/[^\s:]/g,""),!1}),E}rawEmptyBody(_){let E;return _.walk((R)=>{if(R.nodes&&R.nodes.length===0){if(E=R.raws.after,typeof E!=="undefined")return!1}}),E}rawIndent(_){if(_.raws.indent)return _.raws.indent;let E;return _.walk((R)=>{let N=R.parent;if(N&&N!==_&&N.parent&&N.parent===_){if(typeof R.raws.before!=="undefined"){let A=R.raws.before.split("\n");return E=A[A.length-1],E=E.replace(/\S/g,""),!1}}}),E}rawSemicolon(_){let E;return _.walk((R)=>{if(R.nodes&&R.nodes.length&&R.last.type==="decl"){if(E=R.raws.semicolon,typeof E!=="undefined")return!1}}),E}rawValue(_,E){let R=_[E],N=_.raws[E];if(N&&N.value===R)return N.raw;return R}root(_){if(this.body(_),_.raws.after)this.builder(_.raws.after)}rule(_){if(this.block(_,this.rawValue(_,"selector")),_.raws.ownSemicolon)this.builder(_.raws.ownSemicolon,_,"end")}stringify(_,E){if(!this[_.type])throw new Error("Unknown AST node type "+_.type+". Maybe you need to change PostCSS stringifier.");this[_.type](_,E)}}lC.exports=YL;YL.default=YL});var hO=j((Um,nC)=>{var vx=_G();function EG(_,E){new vx(E).stringify(_)}nC.exports=EG;EG.default=EG});var HL=j((Gm,RG)=>{RG.exports.isClean=Symbol("isClean");RG.exports.my=Symbol("my")});var mO=j((Dm,oC)=>{var px=PL(),hx=_G(),kx=hO(),{isClean:kO,my:mx}=HL();function NG(_,E){let R=new _.constructor;for(let N in _){if(!Object.prototype.hasOwnProperty.call(_,N))continue;if(N==="proxyCache")continue;let A=_[N],L=typeof A;if(N==="parent"&&L==="object"){if(E)R[N]=E}else if(N==="source")R[N]=A;else if(Array.isArray(A))R[N]=A.map((U)=>NG(U,R));else{if(L==="object"&&A!==null)A=NG(A);R[N]=A}}return R}class WL{constructor(_={}){this.raws={},this[kO]=!1,this[mx]=!0;for(let E in _)if(E==="nodes"){this.nodes=[];for(let R of _[E])if(typeof R.clone==="function")this.append(R.clone());else this.append(R)}else this[E]=_[E]}addToError(_){if(_.postcssNode=this,_.stack&&this.source&&/\n\s{4}at /.test(_.stack)){let E=this.source;_.stack=_.stack.replace(/\n\s{4}at /,`\$&${E.input.from}:${E.start.line}:${E.start.column}\$&`)}return _}after(_){return this.parent.insertAfter(this,_),this}assign(_={}){for(let E in _)this[E]=_[E];return this}before(_){return this.parent.insertBefore(this,_),this}cleanRaws(_){if(delete this.raws.before,delete this.raws.after,!_)delete this.raws.between}clone(_={}){let E=NG(this);for(let R in _)E[R]=_[R];return E}cloneAfter(_={}){let E=this.clone(_);return this.parent.insertAfter(this,E),E}cloneBefore(_={}){let E=this.clone(_);return this.parent.insertBefore(this,E),E}error(_,E={}){if(this.source){let{end:R,start:N}=this.rangeBy(E);return this.source.input.error(_,{column:N.column,line:N.line},{column:R.column,line:R.line},E)}return new px(_)}getProxyProcessor(){return{get(_,E){if(E==="proxyOf")return _;else if(E==="root")return()=>_.root().toProxy();else return _[E]},set(_,E,R){if(_[E]===R)return!0;if(_[E]=R,E==="prop"||E==="value"||E==="name"||E==="params"||E==="important"||E==="text")_.markDirty();return!0}}}markClean(){this[kO]=!0}markDirty(){if(this[kO]){this[kO]=!1;let _=this;while(_=_.parent)_[kO]=!1}}next(){if(!this.parent)return;let _=this.parent.index(this);return this.parent.nodes[_+1]}positionBy(_,E){let R=this.source.start;if(_.index)R=this.positionInside(_.index,E);else if(_.word){E=this.toString();let N=E.indexOf(_.word);if(N!==-1)R=this.positionInside(N,E)}return R}positionInside(_,E){let R=E||this.toString(),N=this.source.start.column,A=this.source.start.line;for(let L=0;L<_;L++)if(R[L]==="\n")N=1,A+=1;else N+=1;return{column:N,line:A}}prev(){if(!this.parent)return;let _=this.parent.index(this);return this.parent.nodes[_-1]}rangeBy(_){let E={column:this.source.start.column,line:this.source.start.line},R=this.source.end?{column:this.source.end.column+1,line:this.source.end.line}:{column:E.column+1,line:E.line};if(_.word){let N=this.toString(),A=N.indexOf(_.word);if(A!==-1)E=this.positionInside(A,N),R=this.positionInside(A+_.word.length,N)}else{if(_.start)E={column:_.start.column,line:_.start.line};else if(_.index)E=this.positionInside(_.index);if(_.end)R={column:_.end.column,line:_.end.line};else if(typeof _.endIndex==="number")R=this.positionInside(_.endIndex);else if(_.index)R=this.positionInside(_.index+1)}if(R.line{if(typeof G==="object"&&G.toJSON)return G.toJSON(null,E);else return G});else if(typeof U==="object"&&U.toJSON)R[L]=U.toJSON(null,E);else if(L==="source"){let G=E.get(U.input);if(G==null)G=A,E.set(U.input,A),A++;R[L]={end:U.end,inputId:G,start:U.start}}else R[L]=U}if(N)R.inputs=[...E.keys()].map((L)=>L.toJSON());return R}toProxy(){if(!this.proxyCache)this.proxyCache=new Proxy(this,this.getProxyProcessor());return this.proxyCache}toString(_=kx){if(_.stringify)_=_.stringify;let E="";return _(this,(R)=>{E+=R}),E}warn(_,E,R){let N={node:this};for(let A in R)N[A]=R[A];return _.warn(E,N)}get proxyOf(){return this}}oC.exports=WL;WL.default=WL});var gO=j((Sm,sC)=>{var gx=mO();class ML extends gx{constructor(_){super(_);this.type="comment"}}sC.exports=ML;ML.default=ML});var yO=j((Cm,tC)=>{var yx=mO();class FL extends yx{constructor(_){if(_&&typeof _.value!=="undefined"&&typeof _.value!=="string")_={..._,value:String(_.value)};super(_);this.type="decl"}get variable(){return this.prop.startsWith("--")||this.prop[0]==="$"}}tC.exports=FL;FL.default=FL});var B1=j((Pm,O9)=>{var rC=gO(),aC=yO(),bx=mO(),{isClean:eC,my:_9}=HL(),TG,E9,R9,OG;function N9(_){return _.map((E)=>{if(E.nodes)E.nodes=N9(E.nodes);return delete E.source,E})}function T9(_){if(_[eC]=!1,_.proxyOf.nodes)for(let E of _.proxyOf.nodes)T9(E)}class AN extends bx{append(..._){for(let E of _){let R=this.normalize(E,this.last);for(let N of R)this.proxyOf.nodes.push(N)}return this.markDirty(),this}cleanRaws(_){if(super.cleanRaws(_),this.nodes)for(let E of this.nodes)E.cleanRaws(_)}each(_){if(!this.proxyOf.nodes)return;let E=this.getIterator(),R,N;while(this.indexes[E]{return _[E](...R.map((N)=>{if(typeof N==="function")return(A,L)=>N(A.toProxy(),L);else return N}))};else if(E==="every"||E==="some")return(R)=>{return _[E]((N,...A)=>R(N.toProxy(),...A))};else if(E==="root")return()=>_.root().toProxy();else if(E==="nodes")return _.nodes.map((R)=>R.toProxy());else if(E==="first"||E==="last")return _[E].toProxy();else return _[E]},set(_,E,R){if(_[E]===R)return!0;if(_[E]=R,E==="name"||E==="params"||E==="selector")_.markDirty();return!0}}}index(_){if(typeof _==="number")return _;if(_.proxyOf)_=_.proxyOf;return this.proxyOf.nodes.indexOf(_)}insertAfter(_,E){let R=this.index(_),N=this.normalize(E,this.proxyOf.nodes[R]).reverse();R=this.index(_);for(let L of N)this.proxyOf.nodes.splice(R+1,0,L);let A;for(let L in this.indexes)if(A=this.indexes[L],R{if(!N[_9])AN.rebuild(N);if(N=N.proxyOf,N.parent)N.parent.removeChild(N);if(N[eC])T9(N);if(!N.raws)N.raws={};if(typeof N.raws.before==="undefined"){if(E&&typeof E.raws.before!=="undefined")N.raws.before=E.raws.before.replace(/\S/g,"")}return N.parent=this.proxyOf,N})}prepend(..._){_=_.reverse();for(let E of _){let R=this.normalize(E,this.first,"prepend").reverse();for(let N of R)this.proxyOf.nodes.unshift(N);for(let N in this.indexes)this.indexes[N]=this.indexes[N]+R.length}return this.markDirty(),this}push(_){return _.parent=this,this.proxyOf.nodes.push(_),this}removeAll(){for(let _ of this.proxyOf.nodes)_.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(_){_=this.index(_),this.proxyOf.nodes[_].parent=void 0,this.proxyOf.nodes.splice(_,1);let E;for(let R in this.indexes)if(E=this.indexes[R],E>=_)this.indexes[R]=E-1;return this.markDirty(),this}replaceValues(_,E,R){if(!R)R=E,E={};return this.walkDecls((N)=>{if(E.props&&!E.props.includes(N.prop))return;if(E.fast&&!N.value.includes(E.fast))return;N.value=N.value.replace(_,R)}),this.markDirty(),this}some(_){return this.nodes.some(_)}walk(_){return this.each((E,R)=>{let N;try{N=_(E,R)}catch(A){throw E.addToError(A)}if(N!==!1&&E.walk)N=E.walk(_);return N})}walkAtRules(_,E){if(!E)return E=_,this.walk((R,N)=>{if(R.type==="atrule")return E(R,N)});if(_ instanceof RegExp)return this.walk((R,N)=>{if(R.type==="atrule"&&_.test(R.name))return E(R,N)});return this.walk((R,N)=>{if(R.type==="atrule"&&R.name===_)return E(R,N)})}walkComments(_){return this.walk((E,R)=>{if(E.type==="comment")return _(E,R)})}walkDecls(_,E){if(!E)return E=_,this.walk((R,N)=>{if(R.type==="decl")return E(R,N)});if(_ instanceof RegExp)return this.walk((R,N)=>{if(R.type==="decl"&&_.test(R.prop))return E(R,N)});return this.walk((R,N)=>{if(R.type==="decl"&&R.prop===_)return E(R,N)})}walkRules(_,E){if(!E)return E=_,this.walk((R,N)=>{if(R.type==="rule")return E(R,N)});if(_ instanceof RegExp)return this.walk((R,N)=>{if(R.type==="rule"&&_.test(R.selector))return E(R,N)});return this.walk((R,N)=>{if(R.type==="rule"&&R.selector===_)return E(R,N)})}get first(){if(!this.proxyOf.nodes)return;return this.proxyOf.nodes[0]}get last(){if(!this.proxyOf.nodes)return;return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}}AN.registerParse=(_)=>{E9=_};AN.registerRule=(_)=>{OG=_};AN.registerAtRule=(_)=>{TG=_};AN.registerRoot=(_)=>{R9=_};O9.exports=AN;AN.default=AN;AN.rebuild=(_)=>{if(_.type==="atrule")Object.setPrototypeOf(_,TG.prototype);else if(_.type==="rule")Object.setPrototypeOf(_,OG.prototype);else if(_.type==="decl")Object.setPrototypeOf(_,aC.prototype);else if(_.type==="comment")Object.setPrototypeOf(_,rC.prototype);else if(_.type==="root")Object.setPrototypeOf(_,R9.prototype);if(_[_9]=!0,_.nodes)_.nodes.forEach((E)=>{AN.rebuild(E)})}});var BL=j((Ym,I9)=>{var A9=B1();class bO extends A9{constructor(_){super(_);this.type="atrule"}append(..._){if(!this.proxyOf.nodes)this.nodes=[];return super.append(..._)}prepend(..._){if(!this.proxyOf.nodes)this.nodes=[];return super.prepend(..._)}}I9.exports=bO;bO.default=bO;A9.registerAtRule(bO)});var VL=j((Hm,G9)=>{var ix=B1(),L9,U9;class mT extends ix{constructor(_){super({type:"document",..._});if(!this.nodes)this.nodes=[]}toResult(_={}){return new L9(new U9,this,_).stringify()}}mT.registerLazyResult=(_)=>{L9=_};mT.registerProcessor=(_)=>{U9=_};G9.exports=mT;mT.default=mT});var S9=j((Wm,D9)=>{var ux="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",cx=(_,E=21)=>{return(R=E)=>{let N="",A=R;while(A--)N+=_[Math.random()*_.length|0];return N}},dx=(_=21)=>{let E="",R=_;while(R--)E+=ux[Math.random()*64|0];return E};D9.exports={nanoid:dx,customAlphabet:cx}});var P9=j((AG)=>{var C9="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");AG.encode=function(_){if(0<=_&&_{var Y9=P9(),IG=5,H9=1<>1;return E?-R:R}LG.encode=function _(E){var R="",N,A=lx(E);do{if(N=A&W9,A>>>=IG,A>0)N|=M9;R+=Y9.encode(N)}while(A>0);return R};LG.decode=function _(E,R,N){var A=E.length,L=0,U=0,G,S;do{if(R>=A)throw new Error("Expected more digits in base 64 VLQ value.");if(S=Y9.decode(E.charCodeAt(R++)),S===-1)throw new Error("Invalid base64 digit: "+E.charAt(R-1));G=!!(S&M9),S&=W9,L=L+(S<{function ox(_,E,R){if(E in _)return _[E];else if(arguments.length===3)return R;else throw new Error('"'+E+'" is a required argument.')}bE.getArg=ox;var F9=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,sx=/^data:.+\,.+$/;function iO(_){var E=_.match(F9);if(!E)return null;return{scheme:E[1],auth:E[2],host:E[3],port:E[4],path:E[5]}}bE.urlParse=iO;function gT(_){var E="";if(_.scheme)E+=_.scheme+":";if(E+="//",_.auth)E+=_.auth+"@";if(_.host)E+=_.host;if(_.port)E+=":"+_.port;if(_.path)E+=_.path;return E}bE.urlGenerate=gT;var tx=32;function rx(_){var E=[];return function(R){for(var N=0;Ntx)E.pop();return L}}var GG=rx(function _(E){var R=E,N=iO(E);if(N){if(!N.path)return E;R=N.path}var A=bE.isAbsolute(R),L=[],U=0,G=0;while(!0)if(U=G,G=R.indexOf("/",U),G===-1){L.push(R.slice(U));break}else{L.push(R.slice(U,G));while(G=0;G--)if(S=L[G],S===".")L.splice(G,1);else if(S==="..")C++;else if(C>0)if(S==="")L.splice(G+1,C),C=0;else L.splice(G,2),C--;if(R=L.join("/"),R==="")R=A?"/":".";if(N)return N.path=R,gT(N);return R});bE.normalize=GG;function B9(_,E){if(_==="")_=".";if(E==="")E=".";var R=iO(E),N=iO(_);if(N)_=N.path||"/";if(R&&!R.scheme){if(N)R.scheme=N.scheme;return gT(R)}if(R||E.match(sx))return E;if(N&&!N.host&&!N.path)return N.host=E,gT(N);var A=E.charAt(0)==="/"?E:GG(_.replace(/\/+$/,"")+"/"+E);if(N)return N.path=A,gT(N);return A}bE.join=B9;bE.isAbsolute=function(_){return _.charAt(0)==="/"||F9.test(_)};function ax(_,E){if(_==="")_=".";_=_.replace(/\/$/,"");var R=0;while(E.indexOf(_+"/")!==0){var N=_.lastIndexOf("/");if(N<0)return E;if(_=_.slice(0,N),_.match(/^([^\/]+:\/)?\/*$/))return E;++R}return Array(R+1).join("../")+E.substr(_.length+1)}bE.relative=ax;var V9=function(){var _=Object.create(null);return!("__proto__"in _)}();function K9(_){return _}function ex(_){if(X9(_))return"$"+_;return _}bE.toSetString=V9?K9:ex;function _q(_){if(X9(_))return _.slice(1);return _}bE.fromSetString=V9?K9:_q;function X9(_){if(!_)return!1;var E=_.length;if(E<9)return!1;if(_.charCodeAt(E-1)!==95||_.charCodeAt(E-2)!==95||_.charCodeAt(E-3)!==111||_.charCodeAt(E-4)!==116||_.charCodeAt(E-5)!==111||_.charCodeAt(E-6)!==114||_.charCodeAt(E-7)!==112||_.charCodeAt(E-8)!==95||_.charCodeAt(E-9)!==95)return!1;for(var R=E-10;R>=0;R--)if(_.charCodeAt(R)!==36)return!1;return!0}function Eq(_,E,R){var N=oN(_.source,E.source);if(N!==0)return N;if(N=_.originalLine-E.originalLine,N!==0)return N;if(N=_.originalColumn-E.originalColumn,N!==0||R)return N;if(N=_.generatedColumn-E.generatedColumn,N!==0)return N;if(N=_.generatedLine-E.generatedLine,N!==0)return N;return oN(_.name,E.name)}bE.compareByOriginalPositions=Eq;function Rq(_,E,R){var N=_.originalLine-E.originalLine;if(N!==0)return N;if(N=_.originalColumn-E.originalColumn,N!==0||R)return N;if(N=_.generatedColumn-E.generatedColumn,N!==0)return N;if(N=_.generatedLine-E.generatedLine,N!==0)return N;return oN(_.name,E.name)}bE.compareByOriginalPositionsNoSource=Rq;function Nq(_,E,R){var N=_.generatedLine-E.generatedLine;if(N!==0)return N;if(N=_.generatedColumn-E.generatedColumn,N!==0||R)return N;if(N=oN(_.source,E.source),N!==0)return N;if(N=_.originalLine-E.originalLine,N!==0)return N;if(N=_.originalColumn-E.originalColumn,N!==0)return N;return oN(_.name,E.name)}bE.compareByGeneratedPositionsDeflated=Nq;function Tq(_,E,R){var N=_.generatedColumn-E.generatedColumn;if(N!==0||R)return N;if(N=oN(_.source,E.source),N!==0)return N;if(N=_.originalLine-E.originalLine,N!==0)return N;if(N=_.originalColumn-E.originalColumn,N!==0)return N;return oN(_.name,E.name)}bE.compareByGeneratedPositionsDeflatedNoLine=Tq;function oN(_,E){if(_===E)return 0;if(_===null)return 1;if(E===null)return-1;if(_>E)return 1;return-1}function Oq(_,E){var R=_.generatedLine-E.generatedLine;if(R!==0)return R;if(R=_.generatedColumn-E.generatedColumn,R!==0)return R;if(R=oN(_.source,E.source),R!==0)return R;if(R=_.originalLine-E.originalLine,R!==0)return R;if(R=_.originalColumn-E.originalColumn,R!==0)return R;return oN(_.name,E.name)}bE.compareByGeneratedPositionsInflated=Oq;function Aq(_){return JSON.parse(_.replace(/^\)]}'[^\n]*\n/,""))}bE.parseSourceMapInput=Aq;function Iq(_,E,R){if(E=E||"",_){if(_[_.length-1]!=="/"&&E[0]!=="/")_+="/";E=_+E}if(R){var N=iO(R);if(!N)throw new Error("sourceMapURL could not be parsed");if(N.path){var A=N.path.lastIndexOf("/");if(A>=0)N.path=N.path.substring(0,A+1)}E=B9(gT(N),E)}return GG(E)}bE.computeSourceURL=Iq});var CG=j((J9)=>{var DG=yT(),SG=Object.prototype.hasOwnProperty,o1=typeof Map!=="undefined";function sN(){this._array=[],this._set=o1?new Map:Object.create(null)}sN.fromArray=function _(E,R){var N=new sN;for(var A=0,L=E.length;A=0)return R}else{var N=DG.toSetString(E);if(SG.call(this._set,N))return this._set[N]}throw new Error('"'+E+'" is not in the set.')};sN.prototype.at=function _(E){if(E>=0&&E{var $9=yT();function Lq(_,E){var R=_.generatedLine,N=E.generatedLine,A=_.generatedColumn,L=E.generatedColumn;return N>R||N==R&&L>=A||$9.compareByGeneratedPositionsInflated(_,E)<=0}function KL(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}KL.prototype.unsortedForEach=function _(E,R){this._array.forEach(E,R)};KL.prototype.add=function _(E){if(Lq(this._last,E))this._last=E,this._array.push(E);else this._sorted=!1,this._array.push(E)};KL.prototype.toArray=function _(){if(!this._sorted)this._array.sort($9.compareByGeneratedPositionsInflated),this._sorted=!0;return this._array};Z9.MappingList=KL});var PG=j((Q9)=>{var uO=UG(),QE=yT(),XL=CG().ArraySet,Uq=w9().MappingList;function oR(_){if(!_)_={};this._file=QE.getArg(_,"file",null),this._sourceRoot=QE.getArg(_,"sourceRoot",null),this._skipValidation=QE.getArg(_,"skipValidation",!1),this._ignoreInvalidMapping=QE.getArg(_,"ignoreInvalidMapping",!1),this._sources=new XL,this._names=new XL,this._mappings=new Uq,this._sourcesContents=null}oR.prototype._version=3;oR.fromSourceMap=function _(E,R){var N=E.sourceRoot,A=new oR(Object.assign(R||{},{file:E.file,sourceRoot:N}));return E.eachMapping(function(L){var U={generated:{line:L.generatedLine,column:L.generatedColumn}};if(L.source!=null){if(U.source=L.source,N!=null)U.source=QE.relative(N,U.source);if(U.original={line:L.originalLine,column:L.originalColumn},L.name!=null)U.name=L.name}A.addMapping(U)}),E.sources.forEach(function(L){var U=L;if(N!==null)U=QE.relative(N,L);if(!A._sources.has(U))A._sources.add(U);var G=E.sourceContentFor(L);if(G!=null)A.setSourceContent(L,G)}),A};oR.prototype.addMapping=function _(E){var R=QE.getArg(E,"generated"),N=QE.getArg(E,"original",null),A=QE.getArg(E,"source",null),L=QE.getArg(E,"name",null);if(!this._skipValidation){if(this._validateMapping(R,N,A,L)===!1)return}if(A!=null){if(A=String(A),!this._sources.has(A))this._sources.add(A)}if(L!=null){if(L=String(L),!this._names.has(L))this._names.add(L)}this._mappings.add({generatedLine:R.line,generatedColumn:R.column,originalLine:N!=null&&N.line,originalColumn:N!=null&&N.column,source:A,name:L})};oR.prototype.setSourceContent=function _(E,R){var N=E;if(this._sourceRoot!=null)N=QE.relative(this._sourceRoot,N);if(R!=null){if(!this._sourcesContents)this._sourcesContents=Object.create(null);this._sourcesContents[QE.toSetString(N)]=R}else if(this._sourcesContents){if(delete this._sourcesContents[QE.toSetString(N)],Object.keys(this._sourcesContents).length===0)this._sourcesContents=null}};oR.prototype.applySourceMap=function _(E,R,N){var A=R;if(R==null){if(E.file==null)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');A=E.file}var L=this._sourceRoot;if(L!=null)A=QE.relative(L,A);var U=new XL,G=new XL;this._mappings.unsortedForEach(function(S){if(S.source===A&&S.originalLine!=null){var C=E.originalPositionFor({line:S.originalLine,column:S.originalColumn});if(C.source!=null){if(S.source=C.source,N!=null)S.source=QE.join(N,S.source);if(L!=null)S.source=QE.relative(L,S.source);if(S.originalLine=C.line,S.originalColumn=C.column,C.name!=null)S.name=C.name}}var Y=S.source;if(Y!=null&&!U.has(Y))U.add(Y);var M=S.name;if(M!=null&&!G.has(M))G.add(M)},this),this._sources=U,this._names=G,E.sources.forEach(function(S){var C=E.sourceContentFor(S);if(C!=null){if(N!=null)S=QE.join(N,S);if(L!=null)S=QE.relative(L,S);this.setSourceContent(S,C)}},this)};oR.prototype._validateMapping=function _(E,R,N,A){if(R&&typeof R.line!=="number"&&typeof R.column!=="number"){var L="original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.";if(this._ignoreInvalidMapping){if(typeof console!=="undefined"&&console.warn)console.warn(L);return!1}else throw new Error(L)}if(E&&"line"in E&&"column"in E&&E.line>0&&E.column>=0&&!R&&!N&&!A)return;else if(E&&"line"in E&&"column"in E&&R&&"line"in R&&"column"in R&&E.line>0&&E.column>=0&&R.line>0&&R.column>=0&&N)return;else{var L="Invalid mapping: "+JSON.stringify({generated:E,source:N,original:R,name:A});if(this._ignoreInvalidMapping){if(typeof console!=="undefined"&&console.warn)console.warn(L);return!1}else throw new Error(L)}};oR.prototype._serializeMappings=function _(){var E=0,R=1,N=0,A=0,L=0,U=0,G="",S,C,Y,M,H=this._mappings.toArray();for(var X=0,$=H.length;X<$;X++){if(C=H[X],S="",C.generatedLine!==R){E=0;while(C.generatedLine!==R)S+=";",R++}else if(X>0){if(!QE.compareByGeneratedPositionsInflated(C,H[X-1]))continue;S+=","}if(S+=uO.encode(C.generatedColumn-E),E=C.generatedColumn,C.source!=null){if(M=this._sources.indexOf(C.source),S+=uO.encode(M-U),U=M,S+=uO.encode(C.originalLine-1-A),A=C.originalLine-1,S+=uO.encode(C.originalColumn-N),N=C.originalColumn,C.name!=null)Y=this._names.indexOf(C.name),S+=uO.encode(Y-L),L=Y}G+=S}return G};oR.prototype._generateSourcesContent=function _(E,R){return E.map(function(N){if(!this._sourcesContents)return null;if(R!=null)N=QE.relative(R,N);var A=QE.toSetString(N);return Object.prototype.hasOwnProperty.call(this._sourcesContents,A)?this._sourcesContents[A]:null},this)};oR.prototype.toJSON=function _(){var E={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};if(this._file!=null)E.file=this._file;if(this._sourceRoot!=null)E.sourceRoot=this._sourceRoot;if(this._sourcesContents)E.sourcesContent=this._generateSourcesContent(E.sources,E.sourceRoot);return E};oR.prototype.toString=function _(){return JSON.stringify(this.toJSON())};Q9.SourceMapGenerator=oR});var z9=j((s1)=>{s1.GREATEST_LOWER_BOUND=1;s1.LEAST_UPPER_BOUND=2;function YG(_,E,R,N,A,L){var U=Math.floor((E-_)/2)+_,G=A(R,N[U],!0);if(G===0)return U;else if(G>0){if(E-U>1)return YG(U,E,R,N,A,L);if(L==s1.LEAST_UPPER_BOUND)return E1)return YG(_,U,R,N,A,L);if(L==s1.LEAST_UPPER_BOUND)return U;else return _<0?-1:_}}s1.search=function _(E,R,N,A){if(R.length===0)return-1;var L=YG(-1,R.length,E,R,N,A||s1.GREATEST_LOWER_BOUND);if(L<0)return-1;while(L-1>=0){if(N(R[L],R[L-1],!0)!==0)break;--L}return L}});var f9=j((q9)=>{function Gq(_){function E(A,L,U){var G=A[L];A[L]=A[U],A[U]=G}function R(A,L){return Math.round(A+Math.random()*(L-A))}function N(A,L,U,G){if(U{var F_=yT(),WG=z9(),bT=CG().ArraySet,Sq=UG(),cO=f9().quickSort;function HE(_,E){var R=_;if(typeof _==="string")R=F_.parseSourceMapInput(_);return R.sections!=null?new IN(R,E):new nE(R,E)}HE.fromSourceMap=function(_,E){return nE.fromSourceMap(_,E)};HE.prototype._version=3;HE.prototype.__generatedMappings=null;Object.defineProperty(HE.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){if(!this.__generatedMappings)this._parseMappings(this._mappings,this.sourceRoot);return this.__generatedMappings}});HE.prototype.__originalMappings=null;Object.defineProperty(HE.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){if(!this.__originalMappings)this._parseMappings(this._mappings,this.sourceRoot);return this.__originalMappings}});HE.prototype._charIsMappingSeparator=function _(E,R){var N=E.charAt(R);return N===";"||N===","};HE.prototype._parseMappings=function _(E,R){throw new Error("Subclasses must implement _parseMappings")};HE.GENERATED_ORDER=1;HE.ORIGINAL_ORDER=2;HE.GREATEST_LOWER_BOUND=1;HE.LEAST_UPPER_BOUND=2;HE.prototype.eachMapping=function _(E,R,N){var A=R||null,L=N||HE.GENERATED_ORDER,U;switch(L){case HE.GENERATED_ORDER:U=this._generatedMappings;break;case HE.ORIGINAL_ORDER:U=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var G=this.sourceRoot,S=E.bind(A),C=this._names,Y=this._sources,M=this._sourceMapURL;for(var H=0,X=U.length;H=0){var U=this._originalMappings[L];if(E.column===void 0){var G=U.originalLine;while(U&&U.originalLine===G)A.push({line:F_.getArg(U,"generatedLine",null),column:F_.getArg(U,"generatedColumn",null),lastColumn:F_.getArg(U,"lastGeneratedColumn",null)}),U=this._originalMappings[++L]}else{var S=U.originalColumn;while(U&&U.originalLine===R&&U.originalColumn==S)A.push({line:F_.getArg(U,"generatedLine",null),column:F_.getArg(U,"generatedColumn",null),lastColumn:F_.getArg(U,"lastGeneratedColumn",null)}),U=this._originalMappings[++L]}}return A};JL.SourceMapConsumer=HE;function nE(_,E){var R=_;if(typeof _==="string")R=F_.parseSourceMapInput(_);var N=F_.getArg(R,"version"),A=F_.getArg(R,"sources"),L=F_.getArg(R,"names",[]),U=F_.getArg(R,"sourceRoot",null),G=F_.getArg(R,"sourcesContent",null),S=F_.getArg(R,"mappings"),C=F_.getArg(R,"file",null);if(N!=this._version)throw new Error("Unsupported version: "+N);if(U)U=F_.normalize(U);A=A.map(String).map(F_.normalize).map(function(Y){return U&&F_.isAbsolute(U)&&F_.isAbsolute(Y)?F_.relative(U,Y):Y}),this._names=bT.fromArray(L.map(String),!0),this._sources=bT.fromArray(A,!0),this._absoluteSources=this._sources.toArray().map(function(Y){return F_.computeSourceURL(U,Y,E)}),this.sourceRoot=U,this.sourcesContent=G,this._mappings=S,this._sourceMapURL=E,this.file=C}nE.prototype=Object.create(HE.prototype);nE.prototype.consumer=HE;nE.prototype._findSourceIndex=function(_){var E=_;if(this.sourceRoot!=null)E=F_.relative(this.sourceRoot,E);if(this._sources.has(E))return this._sources.indexOf(E);var R;for(R=0;R0)_[E]=L,_[E+1]=A}else if(N<20)for(let A=E;AE;L--){let U=_[L-1],G=_[L];if(HG(U,G)<=0)break;_[L-1]=G,_[L]=U}else cO(_,HG,E)}nE.prototype._parseMappings=function _(E,R){var N=1,A=0,L=0,U=0,G=0,S=0,C=E.length,Y=0,M={},H={},X=[],$=[],z,w,g,d,t;let s=0;while(Y1){if(z.source=G+g[1],G+=g[1],z.originalLine=L+g[2],L=z.originalLine,z.originalLine+=1,z.originalColumn=U+g[3],U=z.originalColumn,g.length>4)z.name=S+g[4],S+=g[4]}if($.push(z),typeof z.originalLine==="number"){let k=z.source;while(X.length<=k)X.push(null);if(X[k]===null)X[k]=[];X[k].push(z)}}j9($,s),this.__generatedMappings=$;for(var m=0;m=0){var A=this._generatedMappings[N];if(A.generatedLine===R.generatedLine){var L=F_.getArg(A,"source",null);if(L!==null)L=this._sources.at(L),L=F_.computeSourceURL(this.sourceRoot,L,this._sourceMapURL);var U=F_.getArg(A,"name",null);if(U!==null)U=this._names.at(U);return{source:L,line:F_.getArg(A,"originalLine",null),column:F_.getArg(A,"originalColumn",null),name:U}}}return{source:null,line:null,column:null,name:null}};nE.prototype.hasContentsOfAllSources=function _(){if(!this.sourcesContent)return!1;return this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(E){return E==null})};nE.prototype.sourceContentFor=function _(E,R){if(!this.sourcesContent)return null;var N=this._findSourceIndex(E);if(N>=0)return this.sourcesContent[N];var A=E;if(this.sourceRoot!=null)A=F_.relative(this.sourceRoot,A);var L;if(this.sourceRoot!=null&&(L=F_.urlParse(this.sourceRoot))){var U=A.replace(/^file:\/\//,"");if(L.scheme=="file"&&this._sources.has(U))return this.sourcesContent[this._sources.indexOf(U)];if((!L.path||L.path=="/")&&this._sources.has("/"+A))return this.sourcesContent[this._sources.indexOf("/"+A)]}if(R)return null;else throw new Error('"'+A+'" is not in the SourceMap.')};nE.prototype.generatedPositionFor=function _(E){var R=F_.getArg(E,"source");if(R=this._findSourceIndex(R),R<0)return{line:null,column:null,lastColumn:null};var N={source:R,originalLine:F_.getArg(E,"line"),originalColumn:F_.getArg(E,"column")},A=this._findMapping(N,this._originalMappings,"originalLine","originalColumn",F_.compareByOriginalPositions,F_.getArg(E,"bias",HE.GREATEST_LOWER_BOUND));if(A>=0){var L=this._originalMappings[A];if(L.source===N.source)return{line:F_.getArg(L,"generatedLine",null),column:F_.getArg(L,"generatedColumn",null),lastColumn:F_.getArg(L,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}};JL.BasicSourceMapConsumer=nE;function IN(_,E){var R=_;if(typeof _==="string")R=F_.parseSourceMapInput(_);var N=F_.getArg(R,"version"),A=F_.getArg(R,"sections");if(N!=this._version)throw new Error("Unsupported version: "+N);this._sources=new bT,this._names=new bT;var L={line:-1,column:0};this._sections=A.map(function(U){if(U.url)throw new Error("Support for url field in sections not implemented.");var G=F_.getArg(U,"offset"),S=F_.getArg(G,"line"),C=F_.getArg(G,"column");if(S{var Cq=PG().SourceMapGenerator,$L=yT(),Pq=/(\r?\n)/,Yq=10,iT="$$$isSourceNode$$$";function kR(_,E,R,N,A){if(this.children=[],this.sourceContents={},this.line=_==null?null:_,this.column=E==null?null:E,this.source=R==null?null:R,this.name=A==null?null:A,this[iT]=!0,N!=null)this.add(N)}kR.fromStringWithSourceMap=function _(E,R,N){var A=new kR,L=E.split(Pq),U=0,G=function(){var H=$(),X=$()||"";return H+X;function $(){return U=0;R--)this.prepend(E[R]);else if(E[iT]||typeof E==="string")this.children.unshift(E);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+E);return this};kR.prototype.walk=function _(E){var R;for(var N=0,A=this.children.length;N0){R=[];for(N=0;N{ZL.SourceMapGenerator=PG().SourceMapGenerator;ZL.SourceMapConsumer=p9().SourceMapConsumer;ZL.SourceNode=k9().SourceNode});var FG=j((zm,y9)=>{var{existsSync:Hq,readFileSync:Wq}=require("fs"),{dirname:MG,join:Mq}=require("path"),{SourceMapConsumer:m9,SourceMapGenerator:g9}=wL();function Fq(_){if(Buffer)return Buffer.from(_,"base64").toString();else return window.atob(_)}class QL{constructor(_,E){if(E.map===!1)return;this.loadAnnotation(_),this.inline=this.startWith(this.annotation,"data:");let R=E.map?E.map.prev:void 0,N=this.loadMap(E.from,R);if(!this.mapFile&&E.from)this.mapFile=E.from;if(this.mapFile)this.root=MG(this.mapFile);if(N)this.text=N}consumer(){if(!this.consumerCache)this.consumerCache=new m9(this.text);return this.consumerCache}decodeInline(_){let E=/^data:application\/json;charset=utf-?8;base64,/,R=/^data:application\/json;base64,/,N=/^data:application\/json;charset=utf-?8,/,A=/^data:application\/json,/,L=_.match(N)||_.match(A);if(L)return decodeURIComponent(_.substr(L[0].length));let U=_.match(E)||_.match(R);if(U)return Fq(_.substr(U[0].length));let G=_.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+G)}getAnnotationURL(_){return _.replace(/^\/\*\s*# sourceMappingURL=/,"").trim()}isMap(_){if(typeof _!=="object")return!1;return typeof _.mappings==="string"||typeof _._mappings==="string"||Array.isArray(_.sections)}loadAnnotation(_){let E=_.match(/\/\*\s*# sourceMappingURL=/g);if(!E)return;let R=_.lastIndexOf(E.pop()),N=_.indexOf("*/",R);if(R>-1&&N>-1)this.annotation=this.getAnnotationURL(_.substring(R,N))}loadFile(_){if(this.root=MG(_),Hq(_))return this.mapFile=_,Wq(_,"utf-8").toString().trim()}loadMap(_,E){if(E===!1)return!1;if(E)if(typeof E==="string")return E;else if(typeof E==="function"){let R=E(_);if(R){let N=this.loadFile(R);if(!N)throw new Error("Unable to load previous source map: "+R.toString());return N}}else if(E instanceof m9)return g9.fromSourceMap(E).toString();else if(E instanceof g9)return E.toString();else if(this.isMap(E))return JSON.stringify(E);else throw new Error("Unsupported previous source map format: "+E.toString());else if(this.inline)return this.decodeInline(this.annotation);else if(this.annotation){let R=this.annotation;if(_)R=Mq(MG(_),R);return this.loadFile(R)}}startWith(_,E){if(!_)return!1;return _.substr(0,E.length)===E}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}}y9.exports=QL;QL.default=QL});var lO=j((xm,c9)=>{var{nanoid:Bq}=S9(),{isAbsolute:KG,resolve:XG}=require("path"),{SourceMapConsumer:Vq,SourceMapGenerator:Kq}=wL(),{fileURLToPath:b9,pathToFileURL:zL}=require("url"),i9=PL(),Xq=FG(),BG=e3(),VG=Symbol("fromOffsetCache"),Jq=Boolean(Vq&&Kq),u9=Boolean(XG&&KG);class dO{constructor(_,E={}){if(_===null||typeof _==="undefined"||typeof _==="object"&&!_.toString)throw new Error(`PostCSS received ${_} instead of CSS string`);if(this.css=_.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE")this.hasBOM=!0,this.css=this.css.slice(1);else this.hasBOM=!1;if(E.from)if(!u9||/^\w+:\/\//.test(E.from)||KG(E.from))this.file=E.from;else this.file=XG(E.from);if(u9&&Jq){let R=new Xq(this.css,E);if(R.text){this.map=R;let N=R.consumer().file;if(!this.file&&N)this.file=this.mapResolve(N)}}if(!this.file)this.id="";if(this.map)this.map.file=this.from}error(_,E,R,N={}){let A,L,U;if(E&&typeof E==="object"){let S=E,C=R;if(typeof S.offset==="number"){let Y=this.fromOffset(S.offset);E=Y.line,R=Y.col}else E=S.line,R=S.column;if(typeof C.offset==="number"){let Y=this.fromOffset(C.offset);L=Y.line,A=Y.col}else L=C.line,A=C.column}else if(!R){let S=this.fromOffset(E);E=S.line,R=S.col}let G=this.origin(E,R,L,A);if(G)U=new i9(_,G.endLine===void 0?G.line:{column:G.column,line:G.line},G.endLine===void 0?G.column:{column:G.endColumn,line:G.endLine},G.source,G.file,N.plugin);else U=new i9(_,L===void 0?E:{column:R,line:E},L===void 0?R:{column:A,line:L},this.css,this.file,N.plugin);if(U.input={column:R,endColumn:A,endLine:L,line:E,source:this.css},this.file){if(zL)U.input.url=zL(this.file).toString();U.input.file=this.file}return U}fromOffset(_){let E,R;if(!this[VG]){let A=this.css.split("\n");R=new Array(A.length);let L=0;for(let U=0,G=A.length;U=E)N=R.length-1;else{let A=R.length-2,L;while(N>1),_=R[L+1])N=L+1;else{N=L;break}}return{col:_-R[N]+1,line:N+1}}mapResolve(_){if(/^\w+:\/\//.test(_))return _;return XG(this.map.consumer().sourceRoot||this.map.root||".",_)}origin(_,E,R,N){if(!this.map)return!1;let A=this.map.consumer(),L=A.originalPositionFor({column:E,line:_});if(!L.source)return!1;let U;if(typeof R==="number")U=A.originalPositionFor({column:N,line:R});let G;if(KG(L.source))G=zL(L.source);else G=new URL(L.source,this.map.consumer().sourceRoot||zL(this.map.mapFile));let S={column:L.column,endColumn:U&&U.column,endLine:U&&U.line,line:L.line,url:G.toString()};if(G.protocol==="file:")if(b9)S.file=b9(G);else throw new Error("file: protocol is not available in this PostCSS build");let C=A.sourceContentFor(L.source);if(C)S.source=C;return S}toJSON(){let _={};for(let E of["hasBOM","css","file","id"])if(this[E]!=null)_[E]=this[E];if(this.map){if(_.map={...this.map},_.map.consumerCache)_.map.consumerCache=void 0}return _}get from(){return this.file||this.id}}c9.exports=dO;dO.default=dO;if(BG&&BG.registerInput)BG.registerInput(dO)});var uT=j((qm,o9)=>{var d9=B1(),l9,n9;class t1 extends d9{constructor(_){super(_);if(this.type="root",!this.nodes)this.nodes=[]}normalize(_,E,R){let N=super.normalize(_);if(E){if(R==="prepend")if(this.nodes.length>1)E.raws.before=this.nodes[1].raws.before;else delete E.raws.before;else if(this.first!==E)for(let A of N)A.raws.before=E.raws.before}return N}removeChild(_,E){let R=this.index(_);if(!E&&R===0&&this.nodes.length>1)this.nodes[1].raws.before=this.nodes[R].raws.before;return super.removeChild(_)}toResult(_={}){return new l9(new n9,this,_).stringify()}}t1.registerLazyResult=(_)=>{l9=_};t1.registerProcessor=(_)=>{n9=_};o9.exports=t1;t1.default=t1;d9.registerRoot(t1)});var JG=j((fm,s9)=>{var nO={comma(_){return nO.split(_,[","],!0)},space(_){let E=[" ","\n","\t"];return nO.split(_,E)},split(_,E,R){let N=[],A="",L=!1,U=0,G=!1,S="",C=!1;for(let Y of _){if(C)C=!1;else if(Y==="\\")C=!0;else if(G){if(Y===S)G=!1}else if(Y==='"'||Y==="'")G=!0,S=Y;else if(Y==="(")U+=1;else if(Y===")"){if(U>0)U-=1}else if(U===0){if(E.includes(Y))L=!0}if(L){if(A!=="")N.push(A.trim());A="",L=!1}else A+=Y}if(R||A!=="")N.push(A.trim());return N}};s9.exports=nO;nO.default=nO});var xL=j((jm,r9)=>{var t9=B1(),$q=JG();class oO extends t9{constructor(_){super(_);if(this.type="rule",!this.nodes)this.nodes=[]}get selectors(){return $q.comma(this.selector)}set selectors(_){let E=this.selector?this.selector.match(/,\s*/):null,R=E?E[0]:","+this.raw("between","beforeOpen");this.selector=_.join(R)}}r9.exports=oO;oO.default=oO;t9.registerRule(oO)});var e9=j((vm,a9)=>{var Zq=BL(),wq=gO(),Qq=yO(),zq=lO(),xq=FG(),qq=uT(),fq=xL();function sO(_,E){if(Array.isArray(_))return _.map((A)=>sO(A));let{inputs:R,...N}=_;if(R){E=[];for(let A of R){let L={...A,__proto__:zq.prototype};if(L.map)L.map={...L.map,__proto__:xq.prototype};E.push(L)}}if(N.nodes)N.nodes=_.nodes.map((A)=>sO(A,E));if(N.source){let{inputId:A,...L}=N.source;if(N.source=L,A!=null)N.source.input=E[A]}if(N.type==="root")return new qq(N);else if(N.type==="decl")return new Qq(N);else if(N.type==="rule")return new fq(N);else if(N.type==="comment")return new wq(N);else if(N.type==="atrule")return new Zq(N);else throw new Error("Unknown node type: "+_.type)}a9.exports=sO;sO.default=sO});var $G=j((pm,AP)=>{var{dirname:qL,relative:EP,resolve:RP,sep:NP}=require("path"),{SourceMapConsumer:TP,SourceMapGenerator:fL}=wL(),{pathToFileURL:_P}=require("url"),jq=lO(),vq=Boolean(TP&&fL),pq=Boolean(qL&&RP&&EP&&NP);class OP{constructor(_,E,R,N){this.stringify=_,this.mapOpts=R.map||{},this.root=E,this.opts=R,this.css=N,this.originalCSS=N,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let _;if(this.isInline())_="data:application/json;base64,"+this.toBase64(this.map.toString());else if(typeof this.mapOpts.annotation==="string")_=this.mapOpts.annotation;else if(typeof this.mapOpts.annotation==="function")_=this.mapOpts.annotation(this.opts.to,this.root);else _=this.outputFile()+".map";let E="\n";if(this.css.includes("\r\n"))E="\r\n";this.css+=E+"/*# sourceMappingURL="+_+" */"}applyPrevMaps(){for(let _ of this.previous()){let E=this.toUrl(this.path(_.file)),R=_.root||qL(_.file),N;if(this.mapOpts.sourcesContent===!1){if(N=new TP(_.text),N.sourcesContent)N.sourcesContent=null}else N=_.consumer();this.map.applySourceMap(N,E,this.toUrl(this.path(R)))}}clearAnnotation(){if(this.mapOpts.annotation===!1)return;if(this.root){let _;for(let E=this.root.nodes.length-1;E>=0;E--){if(_=this.root.nodes[E],_.type!=="comment")continue;if(_.text.startsWith("# sourceMappingURL="))this.root.removeChild(E)}}else if(this.css)this.css=this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm,"")}generate(){if(this.clearAnnotation(),pq&&vq&&this.isMap())return this.generateMap();else{let _="";return this.stringify(this.root,(E)=>{_+=E}),[_]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let _=this.previous()[0].consumer();_.file=this.outputFile(),this.map=fL.fromSourceMap(_,{ignoreInvalidMapping:!0})}else this.map=new fL({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});if(this.isSourcesContent())this.setSourcesContent();if(this.root&&this.previous().length>0)this.applyPrevMaps();if(this.isAnnotation())this.addAnnotation();if(this.isInline())return[this.css];else return[this.css,this.map]}generateString(){this.css="",this.map=new fL({file:this.outputFile(),ignoreInvalidMapping:!0});let _=1,E=1,R="",N={generated:{column:0,line:0},original:{column:0,line:0},source:""},A,L;this.stringify(this.root,(U,G,S)=>{if(this.css+=U,G&&S!=="end")if(N.generated.line=_,N.generated.column=E-1,G.source&&G.source.start)N.source=this.sourcePath(G),N.original.line=G.source.start.line,N.original.column=G.source.start.column-1,this.map.addMapping(N);else N.source=R,N.original.line=1,N.original.column=0,this.map.addMapping(N);if(L=U.match(/\n/g),L)_+=L.length,A=U.lastIndexOf("\n"),E=U.length-A;else E+=U.length;if(G&&S!=="start"){let C=G.parent||{raws:{}};if(!(G.type==="decl"||G.type==="atrule"&&!G.nodes)||G!==C.last||C.raws.semicolon)if(G.source&&G.source.end)N.source=this.sourcePath(G),N.original.line=G.source.end.line,N.original.column=G.source.end.column-1,N.generated.line=_,N.generated.column=E-2,this.map.addMapping(N);else N.source=R,N.original.line=1,N.original.column=0,N.generated.line=_,N.generated.column=E-1,this.map.addMapping(N)}})}isAnnotation(){if(this.isInline())return!0;if(typeof this.mapOpts.annotation!=="undefined")return this.mapOpts.annotation;if(this.previous().length)return this.previous().some((_)=>_.annotation);return!0}isInline(){if(typeof this.mapOpts.inline!=="undefined")return this.mapOpts.inline;let _=this.mapOpts.annotation;if(typeof _!=="undefined"&&_!==!0)return!1;if(this.previous().length)return this.previous().some((E)=>E.inline);return!0}isMap(){if(typeof this.opts.map!=="undefined")return!!this.opts.map;return this.previous().length>0}isSourcesContent(){if(typeof this.mapOpts.sourcesContent!=="undefined")return this.mapOpts.sourcesContent;if(this.previous().length)return this.previous().some((_)=>_.withContent());return!0}outputFile(){if(this.opts.to)return this.path(this.opts.to);else if(this.opts.from)return this.path(this.opts.from);else return"to.css"}path(_){if(this.mapOpts.absolute)return _;if(_.charCodeAt(0)===60)return _;if(/^\w+:\/\//.test(_))return _;let E=this.memoizedPaths.get(_);if(E)return E;let R=this.opts.to?qL(this.opts.to):".";if(typeof this.mapOpts.annotation==="string")R=qL(RP(R,this.mapOpts.annotation));let N=EP(R,_);return this.memoizedPaths.set(_,N),N}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk((_)=>{if(_.source&&_.source.input.map){let E=_.source.input.map;if(!this.previousMaps.includes(E))this.previousMaps.push(E)}});else{let _=new jq(this.originalCSS,this.opts);if(_.map)this.previousMaps.push(_.map)}return this.previousMaps}setSourcesContent(){let _={};if(this.root)this.root.walk((E)=>{if(E.source){let R=E.source.input.from;if(R&&!_[R]){_[R]=!0;let N=this.usesFileUrls?this.toFileUrl(R):this.toUrl(this.path(R));this.map.setSourceContent(N,E.source.input.css)}}});else if(this.css){let E=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(E,this.css)}}sourcePath(_){if(this.mapOpts.from)return this.toUrl(this.mapOpts.from);else if(this.usesFileUrls)return this.toFileUrl(_.source.input.from);else return this.toUrl(this.path(_.source.input.from))}toBase64(_){if(Buffer)return Buffer.from(_).toString("base64");else return window.btoa(unescape(encodeURIComponent(_)))}toFileUrl(_){let E=this.memoizedFileURLs.get(_);if(E)return E;if(_P){let R=_P(_).toString();return this.memoizedFileURLs.set(_,R),R}else throw new Error("`map.absolute` option is not available in this PostCSS build")}toUrl(_){let E=this.memoizedURLs.get(_);if(E)return E;if(NP==="\\")_=_.replace(/\\/g,"/");let R=encodeURI(_).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(_,R),R}}AP.exports=OP});var DP=j((hm,GP)=>{var hq=BL(),kq=gO(),mq=yO(),gq=uT(),IP=xL(),yq=a3(),LP={empty:!0,space:!0};function bq(_){for(let E=_.length-1;E>=0;E--){let R=_[E],N=R[3]||R[2];if(N)return N}}class UP{constructor(_){this.input=_,this.root=new gq,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:_,start:{column:1,line:1,offset:0}}}atrule(_){let E=new hq;if(E.name=_[1].slice(1),E.name==="")this.unnamedAtrule(E,_);this.init(E,_[2]);let R,N,A,L=!1,U=!1,G=[],S=[];while(!this.tokenizer.endOfFile()){if(_=this.tokenizer.nextToken(),R=_[0],R==="("||R==="[")S.push(R==="("?")":"]");else if(R==="{"&&S.length>0)S.push("}");else if(R===S[S.length-1])S.pop();if(S.length===0)if(R===";"){E.source.end=this.getPosition(_[2]),E.source.end.offset++,this.semicolon=!0;break}else if(R==="{"){U=!0;break}else if(R==="}"){if(G.length>0){A=G.length-1,N=G[A];while(N&&N[0]==="space")N=G[--A];if(N)E.source.end=this.getPosition(N[3]||N[2]),E.source.end.offset++}this.end(_);break}else G.push(_);else G.push(_);if(this.tokenizer.endOfFile()){L=!0;break}}if(E.raws.between=this.spacesAndCommentsFromEnd(G),G.length){if(E.raws.afterName=this.spacesAndCommentsFromStart(G),this.raw(E,"params",G),L)_=G[G.length-1],E.source.end=this.getPosition(_[3]||_[2]),E.source.end.offset++,this.spaces=E.raws.between,E.raws.between=""}else E.raws.afterName="",E.params="";if(U)E.nodes=[],this.current=E}checkMissedSemicolon(_){let E=this.colon(_);if(E===!1)return;let R=0,N;for(let A=E-1;A>=0;A--)if(N=_[A],N[0]!=="space"){if(R+=1,R===2)break}throw this.input.error("Missed semicolon",N[0]==="word"?N[3]+1:N[2])}colon(_){let E=0,R,N,A;for(let[L,U]of _.entries()){if(N=U,A=N[0],A==="(")E+=1;if(A===")")E-=1;if(E===0&&A===":")if(!R)this.doubleColon(N);else if(R[0]==="word"&&R[1]==="progid")continue;else return L;R=N}return!1}comment(_){let E=new kq;this.init(E,_[2]),E.source.end=this.getPosition(_[3]||_[2]),E.source.end.offset++;let R=_[1].slice(2,-2);if(/^\s*$/.test(R))E.text="",E.raws.left=R,E.raws.right="";else{let N=R.match(/^(\s*)([^]*\S)(\s*)$/);E.text=N[2],E.raws.left=N[1],E.raws.right=N[3]}}createTokenizer(){this.tokenizer=yq(this.input)}decl(_,E){let R=new mq;this.init(R,_[0][2]);let N=_[_.length-1];if(N[0]===";")this.semicolon=!0,_.pop();R.source.end=this.getPosition(N[3]||N[2]||bq(_)),R.source.end.offset++;while(_[0][0]!=="word"){if(_.length===1)this.unknownWord(_);R.raws.before+=_.shift()[1]}R.source.start=this.getPosition(_[0][2]),R.prop="";while(_.length){let S=_[0][0];if(S===":"||S==="space"||S==="comment")break;R.prop+=_.shift()[1]}R.raws.between="";let A;while(_.length)if(A=_.shift(),A[0]===":"){R.raws.between+=A[1];break}else{if(A[0]==="word"&&/\w/.test(A[1]))this.unknownWord([A]);R.raws.between+=A[1]}if(R.prop[0]==="_"||R.prop[0]==="*")R.raws.before+=R.prop[0],R.prop=R.prop.slice(1);let L=[],U;while(_.length){if(U=_[0][0],U!=="space"&&U!=="comment")break;L.push(_.shift())}this.precheckMissedSemicolon(_);for(let S=_.length-1;S>=0;S--){if(A=_[S],A[1].toLowerCase()==="!important"){R.important=!0;let C=this.stringFrom(_,S);if(C=this.spacesFromEnd(_)+C,C!==" !important")R.raws.important=C;break}else if(A[1].toLowerCase()==="important"){let C=_.slice(0),Y="";for(let M=S;M>0;M--){let H=C[M][0];if(Y.trim().startsWith("!")&&H!=="space")break;Y=C.pop()[1]+Y}if(Y.trim().startsWith("!"))R.important=!0,R.raws.important=Y,_=C}if(A[0]!=="space"&&A[0]!=="comment")break}if(_.some((S)=>S[0]!=="space"&&S[0]!=="comment"))R.raws.between+=L.map((S)=>S[1]).join(""),L=[];if(this.raw(R,"value",L.concat(_),E),R.value.includes(":")&&!E)this.checkMissedSemicolon(_)}doubleColon(_){throw this.input.error("Double colon",{offset:_[2]},{offset:_[2]+_[1].length})}emptyRule(_){let E=new IP;this.init(E,_[2]),E.selector="",E.raws.between="",this.current=E}end(_){if(this.current.nodes&&this.current.nodes.length)this.current.raws.semicolon=this.semicolon;if(this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent)this.current.source.end=this.getPosition(_[2]),this.current.source.end.offset++,this.current=this.current.parent;else this.unexpectedClose(_)}endFile(){if(this.current.parent)this.unclosedBlock();if(this.current.nodes&&this.current.nodes.length)this.current.raws.semicolon=this.semicolon;this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(_){if(this.spaces+=_[1],this.current.nodes){let E=this.current.nodes[this.current.nodes.length-1];if(E&&E.type==="rule"&&!E.raws.ownSemicolon)E.raws.ownSemicolon=this.spaces,this.spaces=""}}getPosition(_){let E=this.input.fromOffset(_);return{column:E.col,line:E.line,offset:_}}init(_,E){if(this.current.push(_),_.source={input:this.input,start:this.getPosition(E)},_.raws.before=this.spaces,this.spaces="",_.type!=="comment")this.semicolon=!1}other(_){let E=!1,R=null,N=!1,A=null,L=[],U=_[1].startsWith("--"),G=[],S=_;while(S){if(R=S[0],G.push(S),R==="("||R==="["){if(!A)A=S;L.push(R==="("?")":"]")}else if(U&&N&&R==="{"){if(!A)A=S;L.push("}")}else if(L.length===0){if(R===";")if(N){this.decl(G,U);return}else break;else if(R==="{"){this.rule(G);return}else if(R==="}"){this.tokenizer.back(G.pop()),E=!0;break}else if(R===":")N=!0}else if(R===L[L.length-1]){if(L.pop(),L.length===0)A=null}S=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile())E=!0;if(L.length>0)this.unclosedBracket(A);if(E&&N){if(!U)while(G.length){if(S=G[G.length-1][0],S!=="space"&&S!=="comment")break;this.tokenizer.back(G.pop())}this.decl(G,U)}else this.unknownWord(G)}parse(){let _;while(!this.tokenizer.endOfFile())switch(_=this.tokenizer.nextToken(),_[0]){case"space":this.spaces+=_[1];break;case";":this.freeSemicolon(_);break;case"}":this.end(_);break;case"comment":this.comment(_);break;case"at-word":this.atrule(_);break;case"{":this.emptyRule(_);break;default:this.other(_);break}this.endFile()}precheckMissedSemicolon(){}raw(_,E,R,N){let A,L,U=R.length,G="",S=!0,C,Y;for(let M=0;MH+X[1],"");_.raws[E]={raw:M,value:G}}_[E]=G}rule(_){_.pop();let E=new IP;this.init(E,_[0][2]),E.raws.between=this.spacesAndCommentsFromEnd(_),this.raw(E,"selector",_),this.current=E}spacesAndCommentsFromEnd(_){let E,R="";while(_.length){if(E=_[_.length-1][0],E!=="space"&&E!=="comment")break;R=_.pop()[1]+R}return R}spacesAndCommentsFromStart(_){let E,R="";while(_.length){if(E=_[0][0],E!=="space"&&E!=="comment")break;R+=_.shift()[1]}return R}spacesFromEnd(_){let E,R="";while(_.length){if(E=_[_.length-1][0],E!=="space")break;R=_.pop()[1]+R}return R}stringFrom(_,E){let R="";for(let N=E;N<_.length;N++)R+=_[N][1];return _.splice(E,_.length-E),R}unclosedBlock(){let _=this.current.source.start;throw this.input.error("Unclosed block",_.line,_.column)}unclosedBracket(_){throw this.input.error("Unclosed bracket",{offset:_[2]},{offset:_[2]+1})}unexpectedClose(_){throw this.input.error("Unexpected }",{offset:_[2]},{offset:_[2]+1})}unknownWord(_){throw this.input.error("Unknown word",{offset:_[0][2]},{offset:_[0][2]+_[0][1].length})}unnamedAtrule(_,E){throw this.input.error("At-rule without name",{offset:E[2]},{offset:E[2]+E[1].length})}}GP.exports=UP});var vL=j((km,SP)=>{var iq=B1(),uq=lO(),cq=DP();function jL(_,E){let R=new uq(_,E),N=new cq(R);try{N.parse()}catch(A){if(A.name==="CssSyntaxError"&&E&&E.from){if(/\.scss$/i.test(E.from))A.message+="\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser";else if(/\.sass/i.test(E.from))A.message+="\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser";else if(/\.less$/i.test(E.from))A.message+="\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser"}throw A}return N.root}SP.exports=jL;jL.default=jL;iq.registerParse(jL)});var ZG=j((mm,CP)=>{class pL{constructor(_,E={}){if(this.type="warning",this.text=_,E.node&&E.node.source){let R=E.node.rangeBy(E);this.line=R.start.line,this.column=R.start.column,this.endLine=R.end.line,this.endColumn=R.end.column}for(let R in E)this[R]=E[R]}toString(){if(this.node)return this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message;if(this.plugin)return this.plugin+": "+this.text;return this.text}}CP.exports=pL;pL.default=pL});var kL=j((gm,PP)=>{var dq=ZG();class hL{constructor(_,E,R){this.processor=_,this.messages=[],this.root=E,this.opts=R,this.css=void 0,this.map=void 0}toString(){return this.css}warn(_,E={}){if(!E.plugin){if(this.lastPlugin&&this.lastPlugin.postcssPlugin)E.plugin=this.lastPlugin.postcssPlugin}let R=new dq(_,E);return this.messages.push(R),R}warnings(){return this.messages.filter((_)=>_.type==="warning")}get content(){return this.css}}PP.exports=hL;hL.default=hL});var wG=j((ym,HP)=>{var YP={};HP.exports=function _(E){if(YP[E])return;if(YP[E]=!0,typeof console!=="undefined"&&console.warn)console.warn(E)}});var xG=j((bm,BP)=>{var lq=B1(),nq=VL(),oq=$G(),sq=vL(),WP=kL(),tq=uT(),rq=hO(),{isClean:XN,my:aq}=HL(),eq=wG(),_f={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},Ef={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},Rf={Once:!0,postcssPlugin:!0,prepare:!0},cT=0;function tO(_){return typeof _==="object"&&typeof _.then==="function"}function FP(_){let E=!1,R=_f[_.type];if(_.type==="decl")E=_.prop.toLowerCase();else if(_.type==="atrule")E=_.name.toLowerCase();if(E&&_.append)return[R,R+"-"+E,cT,R+"Exit",R+"Exit-"+E];else if(E)return[R,R+"-"+E,R+"Exit",R+"Exit-"+E];else if(_.append)return[R,cT,R+"Exit"];else return[R,R+"Exit"]}function MP(_){let E;if(_.type==="document")E=["Document",cT,"DocumentExit"];else if(_.type==="root")E=["Root",cT,"RootExit"];else E=FP(_);return{eventIndex:0,events:E,iterator:0,node:_,visitorIndex:0,visitors:[]}}function QG(_){if(_[XN]=!1,_.nodes)_.nodes.forEach((E)=>QG(E));return _}var zG={};class V1{constructor(_,E,R){this.stringified=!1,this.processed=!1;let N;if(typeof E==="object"&&E!==null&&(E.type==="root"||E.type==="document"))N=QG(E);else if(E instanceof V1||E instanceof WP){if(N=QG(E.root),E.map){if(typeof R.map==="undefined")R.map={};if(!R.map.inline)R.map.inline=!1;R.map.prev=E.map}}else{let A=sq;if(R.syntax)A=R.syntax.parse;if(R.parser)A=R.parser;if(A.parse)A=A.parse;try{N=A(E,R)}catch(L){this.processed=!0,this.error=L}if(N&&!N[aq])lq.rebuild(N)}this.result=new WP(_,N,R),this.helpers={...zG,postcss:zG,result:this.result},this.plugins=this.processor.plugins.map((A)=>{if(typeof A==="object"&&A.prepare)return{...A,...A.prepare(this.result)};else return A})}async(){if(this.error)return Promise.reject(this.error);if(this.processed)return Promise.resolve(this.result);if(!this.processing)this.processing=this.runAsync();return this.processing}catch(_){return this.async().catch(_)}finally(_){return this.async().then(_,_)}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(_,E){let R=this.result.lastPlugin;try{if(E)E.addToError(_);if(this.error=_,_.name==="CssSyntaxError"&&!_.plugin)_.plugin=R.postcssPlugin,_.setMessage();else if(R.postcssVersion){let{postcssPlugin:N,postcssVersion:A}=R,L=this.result.processor.version,U=A.split("."),G=L.split(".");if(U[0]!==G[0]||parseInt(U[1])>parseInt(G[1]))console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+L+", but "+N+" uses "+A+". Perhaps this is the source of the error below.")}}catch(N){if(console&&console.error)console.error(N)}return _}prepareVisitors(){this.listeners={};let _=(E,R,N)=>{if(!this.listeners[R])this.listeners[R]=[];this.listeners[R].push([E,N])};for(let E of this.plugins)if(typeof E==="object")for(let R in E){if(!Ef[R]&&/^[A-Z]/.test(R))throw new Error(`Unknown event ${R} in ${E.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!Rf[R]){if(typeof E[R]==="object")for(let N in E[R])if(N==="*")_(E,R,E[R][N]);else _(E,R+"-"+N.toLowerCase(),E[R][N]);else if(typeof E[R]==="function")_(E,R,E[R])}}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let _=0;_0){let R=this.visitTick(E);if(tO(R))try{await R}catch(N){let A=E[E.length-1].node;throw this.handleError(N,A)}}}if(this.listeners.OnceExit)for(let[E,R]of this.listeners.OnceExit){this.result.lastPlugin=E;try{if(_.type==="document"){let N=_.nodes.map((A)=>R(A,this.helpers));await Promise.all(N)}else await R(_,this.helpers)}catch(N){throw this.handleError(N)}}}return this.processed=!0,this.stringify()}runOnRoot(_){this.result.lastPlugin=_;try{if(typeof _==="object"&&_.Once){if(this.result.root.type==="document"){let E=this.result.root.nodes.map((R)=>_.Once(R,this.helpers));if(tO(E[0]))return Promise.all(E);return E}return _.Once(this.result.root,this.helpers)}else if(typeof _==="function")return _(this.result.root,this.result)}catch(E){throw this.handleError(E)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let _=this.result.opts,E=rq;if(_.syntax)E=_.syntax.stringify;if(_.stringifier)E=_.stringifier;if(E.stringify)E=E.stringify;let N=new oq(E,this.result.root,this.result.opts).generate();return this.result.css=N[0],this.result.map=N[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let _ of this.plugins){let E=this.runOnRoot(_);if(tO(E))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let _=this.result.root;while(!_[XN])_[XN]=!0,this.walkSync(_);if(this.listeners.OnceExit)if(_.type==="document")for(let E of _.nodes)this.visitSync(this.listeners.OnceExit,E);else this.visitSync(this.listeners.OnceExit,_)}return this.result}then(_,E){if(!("from"in this.opts))eq("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.");return this.async().then(_,E)}toString(){return this.css}visitSync(_,E){for(let[R,N]of _){this.result.lastPlugin=R;let A;try{A=N(E,this.helpers)}catch(L){throw this.handleError(L,E.proxyOf)}if(E.type!=="root"&&E.type!=="document"&&!E.parent)return!0;if(tO(A))throw this.getAsyncError()}}visitTick(_){let E=_[_.length-1],{node:R,visitors:N}=E;if(R.type!=="root"&&R.type!=="document"&&!R.parent){_.pop();return}if(N.length>0&&E.visitorIndex{if(!N[XN])this.walkSync(N)})}else{let N=this.listeners[R];if(N){if(this.visitSync(N,_.toProxy()))return}}}warnings(){return this.sync().warnings()}get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return"LazyResult"}}V1.registerPostcss=(_)=>{zG=_};BP.exports=V1;V1.default=V1;tq.registerLazyResult(V1);nq.registerLazyResult(V1)});var KP=j((im,VP)=>{var Nf=$G(),Tf=vL(),Of=kL(),Af=hO(),If=wG();class mL{constructor(_,E,R){E=E.toString(),this.stringified=!1,this._processor=_,this._css=E,this._opts=R,this._map=void 0;let N,A=Af;this.result=new Of(this._processor,N,this._opts),this.result.css=E;let L=this;Object.defineProperty(this.result,"root",{get(){return L.root}});let U=new Nf(A,N,this._opts,E);if(U.isMap()){let[G,S]=U.generate();if(G)this.result.css=G;if(S)this.result.map=S}else U.clearAnnotation(),this.result.css=U.css}async(){if(this.error)return Promise.reject(this.error);return Promise.resolve(this.result)}catch(_){return this.async().catch(_)}finally(_){return this.async().then(_,_)}sync(){if(this.error)throw this.error;return this.result}then(_,E){if(!("from"in this._opts))If("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.");return this.async().then(_,E)}toString(){return this._css}warnings(){return[]}get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let _,E=Tf;try{_=E(this._css,this._opts)}catch(R){this.error=R}if(this.error)throw this.error;else return this._root=_,_}get[Symbol.toStringTag](){return"NoWorkResult"}}VP.exports=mL;mL.default=mL});var JP=j((um,XP)=>{var Lf=VL(),Uf=xG(),Gf=KP(),Df=uT();class dT{constructor(_=[]){this.version="8.4.47",this.plugins=this.normalize(_)}normalize(_){let E=[];for(let R of _){if(R.postcss===!0)R=R();else if(R.postcss)R=R.postcss;if(typeof R==="object"&&Array.isArray(R.plugins))E=E.concat(R.plugins);else if(typeof R==="object"&&R.postcssPlugin)E.push(R);else if(typeof R==="function")E.push(R);else if(typeof R==="object"&&(R.parse||R.stringify))throw new Error("PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.");else throw new Error(R+" is not a PostCSS plugin")}return E}process(_,E={}){if(!this.plugins.length&&!E.parser&&!E.stringifier&&!E.syntax)return new Gf(this,_,E);else return new Uf(this,_,E)}use(_){return this.plugins=this.plugins.concat(this.normalize([_])),this}}XP.exports=dT;dT.default=dT;Df.registerProcessor(dT);Lf.registerProcessor(dT)});var fP=j((cm,qP)=>{var $P=BL(),ZP=gO(),Sf=B1(),Cf=PL(),wP=yO(),QP=VL(),Pf=e9(),Yf=lO(),Hf=xG(),Wf=JG(),Mf=mO(),Ff=vL(),qG=JP(),Bf=kL(),zP=uT(),xP=xL(),Vf=hO(),Kf=ZG();function RE(..._){if(_.length===1&&Array.isArray(_[0]))_=_[0];return new qG(_)}RE.plugin=function _(E,R){let N=!1;function A(...U){if(console&&console.warn&&!N){if(N=!0,console.warn(E+": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration"),process.env.LANG&&process.env.LANG.startsWith("cn"))console.warn(E+`: \u91CC\u9762 postcss.plugin \u88AB\u5F03\u7528. \u8FC1\u79FB\u6307\u5357: -`+"https://www.w3ctech.com/topic/2226")}let G=R(...U);return G.postcssPlugin=E,G.postcssVersion=new qG().version,G}let L;return Object.defineProperty(A,"postcss",{get(){if(!L)L=A();return L}}),A.process=function(U,G,S){return RE([A(S)]).process(U,G)},A};RE.stringify=Vf;RE.parse=Ff;RE.fromJSON=Pf;RE.list=Wf;RE.comment=(_)=>new ZP(_);RE.atRule=(_)=>new $P(_);RE.decl=(_)=>new wP(_);RE.rule=(_)=>new xP(_);RE.root=(_)=>new zP(_);RE.document=(_)=>new QP(_);RE.CssSyntaxError=Cf;RE.Declaration=wP;RE.Container=Sf;RE.Processor=qG;RE.Document=QP;RE.Comment=ZP;RE.Warning=Kf;RE.AtRule=$P;RE.Result=Bf;RE.Input=Yf;RE.Rule=xP;RE.Root=zP;RE.Node=Mf;Hf.registerPostcss(RE);qP.exports=RE;RE.default=RE});var fG=j((dm,hP)=>{var Xf=KC(),jP=JC(),{isPlainObject:Jf}=ZC(),vP=xC(),$f=fC(),{parse:Zf}=fP(),wf=["img","audio","video","picture","svg","object","map","iframe","embed"],Qf=["script","style"];function rO(_,E){if(_)Object.keys(_).forEach(function(R){E(_[R],R)})}function tN(_,E){return{}.hasOwnProperty.call(_,E)}function pP(_,E){let R=[];return rO(_,function(N){if(E(N))R.push(N)}),R}function zf(_){for(let E in _)if(tN(_,E))return!1;return!0}function xf(_){return _.map(function(E){if(!E.url)throw new Error("URL missing");return E.url+(E.w?` ${E.w}w`:"")+(E.h?` ${E.h}h`:"")+(E.d?` ${E.d}x`:"")}).join(", ")}hP.exports=aO;var qf=/^[^\0\t\n\f\r /<=>]+$/;function aO(_,E,R){if(_==null)return"";if(typeof _==="number")_=_.toString();let N="",A="";function L(r,A_){let L_=this;this.tag=r,this.attribs=A_||{},this.tagPosition=N.length,this.text="",this.mediaChildren=[],this.updateParentNodeText=function(){if(w.length){let P_=w[w.length-1];P_.text+=L_.text}},this.updateParentNodeMediaChildren=function(){if(w.length&&wf.includes(this.tag))w[w.length-1].mediaChildren.push(this.tag)}}E=Object.assign({},aO.defaults,E),E.parser=Object.assign({},ff,E.parser);let U=function(r){return E.allowedTags===!1||(E.allowedTags||[]).indexOf(r)>-1};Qf.forEach(function(r){if(U(r)&&!E.allowVulnerableTags)console.warn(` - -\u26A0\uFE0F Your \`allowedTags\` option includes, \`${r}\`, which is inherently\nvulnerable to XSS attacks. Please remove it from \`allowedTags\`.\nOr, to disable this warning, add the \`allowVulnerableTags\` option\nand ensure you are accounting for this risk.\n\n`)});let G=E.nonTextTags||["script","style","textarea","option"],S,C;if(E.allowedAttributes)S={},C={},rO(E.allowedAttributes,function(r,A_){S[A_]=[];let L_=[];if(r.forEach(function(P_){if(typeof P_==="string"&&P_.indexOf("*")>=0)L_.push(jP(P_).replace(/\\\*/g,".*"));else S[A_].push(P_)}),L_.length)C[A_]=new RegExp("^("+L_.join("|")+")$")});let Y={},M={},H={};rO(E.allowedClasses,function(r,A_){if(S){if(!tN(S,A_))S[A_]=[];S[A_].push("class")}if(Y[A_]=r,Array.isArray(r)){let L_=[];if(Y[A_]=[],H[A_]=[],r.forEach(function(P_){if(typeof P_==="string"&&P_.indexOf("*")>=0)L_.push(jP(P_).replace(/\\\*/g,".*"));else if(P_ instanceof RegExp)H[A_].push(P_);else Y[A_].push(P_)}),L_.length)M[A_]=new RegExp("^("+L_.join("|")+")$")}});let X={},$;rO(E.transformTags,function(r,A_){let L_;if(typeof r==="function")L_=r;else if(typeof r==="string")L_=aO.simpleTransform(r);if(A_==="*")$=L_;else X[A_]=L_});let z,w,g,d,t,s,m=!1;e();let k=new Xf.Parser({onopentag:function(r,A_){if(E.enforceHtmlBoundary&&r==="html")e();if(t){s++;return}let L_=new L(r,A_);w.push(L_);let P_=!1,p_=!!L_.text,l_;if(tN(X,r)){if(l_=X[r](r,A_),L_.attribs=A_=l_.attribs,l_.text!==void 0)L_.innerText=l_.text;if(r!==l_.tagName)L_.name=r=l_.tagName,d[z]=l_.tagName}if($){if(l_=$(r,A_),L_.attribs=A_=l_.attribs,r!==l_.tagName)L_.name=r=l_.tagName,d[z]=l_.tagName}if(!U(r)||E.disallowedTagsMode==="recursiveEscape"&&!zf(g)||E.nestingLimit!=null&&z>=E.nestingLimit){if(P_=!0,g[z]=!0,E.disallowedTagsMode==="discard"||E.disallowedTagsMode==="completelyDiscard"){if(G.indexOf(r)!==-1)t=!0,s=1}g[z]=!0}if(z++,P_){if(E.disallowedTagsMode==="discard"||E.disallowedTagsMode==="completelyDiscard")return;A=N,N=""}if(N+="<"+r,r==="script"){if(E.allowedScriptHostnames||E.allowedScriptDomains)L_.innerText=""}if(!S||tN(S,r)||S["*"])rO(A_,function(j_,a){if(!qf.test(a)){delete L_.attribs[a];return}if(j_===""&&!E.allowedEmptyAttributes.includes(a)&&(E.nonBooleanAttributes.includes(a)||E.nonBooleanAttributes.includes("*"))){delete L_.attribs[a];return}let WE=!1;if(!S||tN(S,r)&&S[r].indexOf(a)!==-1||S["*"]&&S["*"].indexOf(a)!==-1||tN(C,r)&&C[r].test(a)||C["*"]&&C["*"].test(a))WE=!0;else if(S&&S[r]){for(let q_ of S[r])if(Jf(q_)&&q_.name&&q_.name===a){WE=!0;let k_="";if(q_.multiple===!0){let n_=j_.split(" ");for(let e_ of n_)if(q_.values.indexOf(e_)!==-1)if(k_==="")k_=e_;else k_+=" "+e_}else if(q_.values.indexOf(j_)>=0)k_=j_;j_=k_}}if(WE){if(E.allowedSchemesAppliedToAttributes.indexOf(a)!==-1){if(c(r,j_)){delete L_.attribs[a];return}}if(r==="script"&&a==="src"){let q_=!0;try{let k_=S_(j_);if(E.allowedScriptHostnames||E.allowedScriptDomains){let n_=(E.allowedScriptHostnames||[]).find(function(V){return V===k_.url.hostname}),e_=(E.allowedScriptDomains||[]).find(function(V){return k_.url.hostname===V||k_.url.hostname.endsWith(`.${V}`)});q_=n_||e_}}catch(k_){q_=!1}if(!q_){delete L_.attribs[a];return}}if(r==="iframe"&&a==="src"){let q_=!0;try{let k_=S_(j_);if(k_.isRelativeUrl)q_=tN(E,"allowIframeRelativeUrls")?E.allowIframeRelativeUrls:!E.allowedIframeHostnames&&!E.allowedIframeDomains;else if(E.allowedIframeHostnames||E.allowedIframeDomains){let n_=(E.allowedIframeHostnames||[]).find(function(V){return V===k_.url.hostname}),e_=(E.allowedIframeDomains||[]).find(function(V){return k_.url.hostname===V||k_.url.hostname.endsWith(`.${V}`)});q_=n_||e_}}catch(k_){q_=!1}if(!q_){delete L_.attribs[a];return}}if(a==="srcset")try{let q_=$f(j_);if(q_.forEach(function(k_){if(c("srcset",k_.url))k_.evil=!0}),q_=pP(q_,function(k_){return!k_.evil}),!q_.length){delete L_.attribs[a];return}else j_=xf(pP(q_,function(k_){return!k_.evil})),L_.attribs[a]=j_}catch(q_){delete L_.attribs[a];return}if(a==="class"){let q_=Y[r],k_=Y["*"],n_=M[r],e_=H[r],V=H["*"],J=M["*"],Q=[n_,J].concat(e_,V).filter(function(i){return i});if(q_&&k_)j_=z_(j_,vP(q_,k_),Q);else j_=z_(j_,q_||k_,Q);if(!j_.length){delete L_.attribs[a];return}}if(a==="style"){if(E.parseStyleAttributes)try{let q_=Zf(r+" {"+j_+"}",{map:!1}),k_=U_(q_,E.allowedStyles);if(j_=V_(k_),j_.length===0){delete L_.attribs[a];return}}catch(q_){if(typeof window!=="undefined")console.warn('Failed to parse "'+r+" {"+j_+'}", If you\'re running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547');delete L_.attribs[a];return}else if(E.allowedStyles)throw new Error("allowedStyles option cannot be used together with parseStyleAttributes: false.")}if(N+=" "+a,j_&&j_.length)N+='="'+o(j_,!0)+'"';else if(E.allowedEmptyAttributes.includes(a))N+='=""'}else delete L_.attribs[a]});if(E.selfClosing.indexOf(r)!==-1)N+=" />";else if(N+=">",L_.innerText&&!p_&&!E.textFilter)N+=o(L_.innerText),m=!0;if(P_)N=A+o(N),A=""},ontext:function(r){if(t)return;let A_=w[w.length-1],L_;if(A_)L_=A_.tag,r=A_.innerText!==void 0?A_.innerText:r;if(E.disallowedTagsMode==="completelyDiscard"&&!U(L_))r="";else if((E.disallowedTagsMode==="discard"||E.disallowedTagsMode==="completelyDiscard")&&(L_==="script"||L_==="style"))N+=r;else{let P_=o(r,!1);if(E.textFilter&&!m)N+=E.textFilter(P_,L_);else if(!m)N+=P_}if(w.length){let P_=w[w.length-1];P_.text+=r}},onclosetag:function(r,A_){if(t)if(s--,!s)t=!1;else return;let L_=w.pop();if(!L_)return;if(L_.tag!==r){w.push(L_);return}t=E.enforceHtmlBoundary?r==="html":!1,z--;let P_=g[z];if(P_){if(delete g[z],E.disallowedTagsMode==="discard"||E.disallowedTagsMode==="completelyDiscard"){L_.updateParentNodeText();return}A=N,N=""}if(d[z])r=d[z],delete d[z];if(E.exclusiveFilter&&E.exclusiveFilter(L_)){N=N.substr(0,L_.tagPosition);return}if(L_.updateParentNodeMediaChildren(),L_.updateParentNodeText(),E.selfClosing.indexOf(r)!==-1||A_&&!U(r)&&["escape","recursiveEscape"].indexOf(E.disallowedTagsMode)>=0){if(P_)N=A,A="";return}if(N+="",P_)N=A+o(N),A="";m=!1}},E.parser);return k.write(_),k.end(),N;function e(){N="",z=0,w=[],g={},d={},t=!1,s=0}function o(r,A_){if(typeof r!=="string")r=r+"";if(E.parser.decodeEntities){if(r=r.replace(/&/g,"&").replace(//g,">"),A_)r=r.replace(/"/g,""")}if(r=r.replace(/&(?![a-zA-Z0-9#]{1,20};)/g,"&").replace(//g,">"),A_)r=r.replace(/"/g,""");return r}function c(r,A_){A_=A_.replace(/[\x00-\x20]+/g,"");while(!0){let p_=A_.indexOf("",p_+4);if(l_===-1)break;A_=A_.substring(0,p_)+A_.substring(l_+3)}let L_=A_.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/);if(!L_){if(A_.match(/^[/\\]{2}/))return!E.allowProtocolRelative;return!1}let P_=L_[1].toLowerCase();if(tN(E.allowedSchemesByTag,r))return E.allowedSchemesByTag[r].indexOf(P_)===-1;return!E.allowedSchemes||E.allowedSchemes.indexOf(P_)===-1}function S_(r){if(r=r.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/,"$1//"),r.startsWith("relative:"))throw new Error("relative: exploit attempt");let A_="relative://relative-site";for(let p_=0;p_<100;p_++)A_+=`/${p_}`;let L_=new URL(r,A_);return{isRelativeUrl:L_&&L_.hostname==="relative-site"&&L_.protocol==="relative:",url:L_}}function U_(r,A_){if(!A_)return r;let L_=r.nodes[0],P_;if(A_[L_.selector]&&A_["*"])P_=vP(A_[L_.selector],A_["*"]);else P_=A_[L_.selector]||A_["*"];if(P_)r.nodes[0].nodes=L_.nodes.reduce(K_(P_),[]);return r}function V_(r){return r.nodes[0].nodes.reduce(function(A_,L_){return A_.push(`${L_.prop}:${L_.value}${L_.important?" !important":""}`),A_},[]).join(";")}function K_(r){return function(A_,L_){if(tN(r,L_.prop)){if(r[L_.prop].some(function(p_){return p_.test(L_.value)}))A_.push(L_)}return A_}}function z_(r,A_,L_){if(!A_)return r;return r=r.split(/\s+/),r.filter(function(P_){return A_.indexOf(P_)!==-1||L_.some(function(p_){return p_.test(P_)})}).join(" ")}}var ff={decodeEntities:!0};aO.defaults={allowedTags:["address","article","aside","footer","header","h1","h2","h3","h4","h5","h6","hgroup","main","nav","section","blockquote","dd","div","dl","dt","figcaption","figure","hr","li","main","ol","p","pre","ul","a","abbr","b","bdi","bdo","br","cite","code","data","dfn","em","i","kbd","mark","q","rb","rp","rt","rtc","ruby","s","samp","small","span","strong","sub","sup","time","u","var","wbr","caption","col","colgroup","table","tbody","td","tfoot","th","thead","tr"],nonBooleanAttributes:["abbr","accept","accept-charset","accesskey","action","allow","alt","as","autocapitalize","autocomplete","blocking","charset","cite","class","color","cols","colspan","content","contenteditable","coords","crossorigin","data","datetime","decoding","dir","dirname","download","draggable","enctype","enterkeyhint","fetchpriority","for","form","formaction","formenctype","formmethod","formtarget","headers","height","hidden","high","href","hreflang","http-equiv","id","imagesizes","imagesrcset","inputmode","integrity","is","itemid","itemprop","itemref","itemtype","kind","label","lang","list","loading","low","max","maxlength","media","method","min","minlength","name","nonce","optimum","pattern","ping","placeholder","popover","popovertarget","popovertargetaction","poster","preload","referrerpolicy","rel","rows","rowspan","sandbox","scope","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","tabindex","target","title","translate","type","usemap","value","width","wrap","onauxclick","onafterprint","onbeforematch","onbeforeprint","onbeforeunload","onbeforetoggle","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextlost","oncontextmenu","oncontextrestored","oncopy","oncuechange","oncut","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","onformdata","onhashchange","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onlanguagechange","onload","onloadeddata","onloadedmetadata","onloadstart","onmessage","onmessageerror","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onoffline","ononline","onpagehide","onpageshow","onpaste","onpause","onplay","onplaying","onpopstate","onprogress","onratechange","onreset","onresize","onrejectionhandled","onscroll","onscrollend","onsecuritypolicyviolation","onseeked","onseeking","onselect","onslotchange","onstalled","onstorage","onsubmit","onsuspend","ontimeupdate","ontoggle","onunhandledrejection","onunload","onvolumechange","onwaiting","onwheel"],disallowedTagsMode:"discard",allowedAttributes:{a:["href","name","target"],img:["src","srcset","alt","title","width","height","loading"]},allowedEmptyAttributes:["alt"],selfClosing:["img","br","hr","area","base","basefont","input","link","meta"],allowedSchemes:["http","https","ftp","mailto","tel"],allowedSchemesByTag:{},allowedSchemesAppliedToAttributes:["href","src","cite"],allowProtocolRelative:!0,enforceHtmlBoundary:!1,parseStyleAttributes:!0};aO.simpleTransform=function(_,E,R){return R=R===void 0?!0:R,E=E||{},function(N,A){let L;if(R)for(L in E)A[L]=E[L];else A=E;return{tagName:_,attribs:A}}}});async function oE(..._){try{let E=await kP.query(..._);return await kP.end(),JSON.parse(JSON.stringify(E))}catch(E){return console.log("DB Error =>",E),{success:!1,error:E.message}}}var mP,kP;var rN=dE(()=>{mP=X_(ZT());wT();kP=mP.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_USERNAME,password:process.env.DSQL_DB_PASSWORD,database:process.env.DSQL_DB_NAME,port:process.env.DSQL_DB_PORT?Number(process.env.DSQL_DB_PORT):void 0,charset:"utf8mb4",ssl:WR()}})});var yP={};YT(yP,{default:()=>BE});function BE({data:_,encryptionKey:E,encryptionSalt:R}){if(!_?.match(/./))return console.log("Encryption string is invalid"),_;let N=E||process.env.DSQL_ENCRYPTION_PASSWORD,A=R||process.env.DSQL_ENCRYPTION_SALT,L=process.env.DSQL_ENCRYPTION_KEY_LENGTH?Number(process.env.DSQL_ENCRYPTION_KEY_LENGTH):24;if(!N?.match(/.{8,}/))return console.log("Encryption key is invalid"),_;if(!A?.match(/.{8,}/))return console.log("Encryption salt is invalid"),_;let U="aes-192-cbc",S=yL.scryptSync(N,A,L),C=gP.Buffer.alloc(16,0),Y=yL.createCipheriv(U,S,C);try{let M=Y.update(_,"utf8","hex");return M+=Y.final("hex"),M}catch(M){return console.log("Error in encrypting =>",M.message),_}}var yL,gP;var sR=dE(()=>{yL=require("crypto"),gP=require("buffer");vf.exports=BE});async function eO({dbContext:_,paradigm:E,dbFullName:R,tableName:N,identifierColumnName:A,identifierValue:L,useLocal:U}){try{let G=U?!0:_?.match(/dsql.user/i)?!1:R&&!R.match(/^datasquirel$/)?!1:!0,S=U?xE:G?oE:MR,C=`DELETE FROM ${N} WHERE \`${A}\`=?`;return G?await S(C,[L]):await S({paradigm:E,queryString:C,database:R,queryValues:[L]})}catch(G){return null}}var jG=dE(()=>{rN();i1();WN()});function pf(_,E){if(!_)return;if(typeof _=="object")return _;if(typeof _!=="string")return;try{return JSON.parse(_,E)}catch(R){return}}function hf(_,E,R){try{return JSON.stringify(_,E,R)}catch(N){return}}var kf,tR;var a1=dE(()=>{kf={parse:pf,stringify:hf},tR=kf});var bG=j((Ry,yf)=>{yf.exports=[{fieldName:"id",dataType:"BIGINT",notNullValue:!0,primaryKey:!0,autoIncrement:!0},{fieldName:"uuid",dataType:"UUID",defaultValueLiteral:"UUID()"},{fieldName:"date_created",dataType:"VARCHAR(250)",nullValue:!0},{fieldName:"date_created_code",dataType:"BIGINT",nullValue:!0},{fieldName:"date_created_timestamp",dataType:"TIMESTAMP",defaultValueLiteral:"CURRENT_TIMESTAMP"},{fieldName:"date_updated",dataType:"VARCHAR(250)",nullValue:!0},{fieldName:"date_updated_code",dataType:"BIGINT",nullValue:!0},{fieldName:"date_updated_timestamp",dataType:"TIMESTAMP",defaultValueLiteral:"CURRENT_TIMESTAMP",onUpdateLiteral:"CURRENT_TIMESTAMP"}]});var RY=j((Cy,uf)=>{uf.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var AY=j((Py,aN)=>{var NY=require("fs"),dG=require("path"),cf=require("os"),df=require("crypto"),lf=RY(),lG=lf.version,nf=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function of(_){let E={},R=_.toString();R=R.replace(/\r\n?/mg,"\n");let N;while((N=nf.exec(R))!=null){let A=N[1],L=N[2]||"";L=L.trim();let U=L[0];if(L=L.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),U==='"')L=L.replace(/\\n/g,"\n"),L=L.replace(/\\r/g,"\r");E[A]=L}return E}function sf(_){let E=OY(_),R=iE.configDotenv({path:E});if(!R.parsed)throw new Error(`MISSING_DATA: Cannot parse ${E} for an unknown reason`);let N=TY(_).split(","),A=N.length,L;for(let U=0;U=A)throw G}return iE.parse(L)}function tf(_){console.log(`[dotenv@${lG}][INFO] ${_}`)}function rf(_){console.log(`[dotenv@${lG}][WARN] ${_}`)}function cG(_){console.log(`[dotenv@${lG}][DEBUG] ${_}`)}function TY(_){if(_&&_.DOTENV_KEY&&_.DOTENV_KEY.length>0)return _.DOTENV_KEY;if(process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0)return process.env.DOTENV_KEY;return""}function af(_,E){let R;try{R=new URL(E)}catch(G){if(G.code==="ERR_INVALID_URL")throw new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development");throw G}let N=R.password;if(!N)throw new Error("INVALID_DOTENV_KEY: Missing key part");let A=R.searchParams.get("environment");if(!A)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let L=`DOTENV_VAULT_${A.toUpperCase()}`,U=_.parsed[L];if(!U)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${L} in your .env.vault file.`);return{ciphertext:U,key:N}}function OY(_){let E=dG.resolve(process.cwd(),".env");if(_&&_.path&&_.path.length>0)E=_.path;return E.endsWith(".vault")?E:`${E}.vault`}function ef(_){return _[0]==="~"?dG.join(cf.homedir(),_.slice(1)):_}function _j(_){tf("Loading env from encrypted .env.vault");let E=iE._parseVault(_),R=process.env;if(_&&_.processEnv!=null)R=_.processEnv;return iE.populate(R,E,_),{parsed:E}}function Ej(_){let E=dG.resolve(process.cwd(),".env"),R="utf8",N=Boolean(_&&_.debug);if(_){if(_.path!=null)E=ef(_.path);if(_.encoding!=null)R=_.encoding}try{let A=iE.parse(NY.readFileSync(E,{encoding:R})),L=process.env;if(_&&_.processEnv!=null)L=_.processEnv;return iE.populate(L,A,_),{parsed:A}}catch(A){if(N)cG(`Failed to load ${E} ${A.message}`);return{error:A}}}function Rj(_){let E=OY(_);if(TY(_).length===0)return iE.configDotenv(_);if(!NY.existsSync(E))return rf(`You set DOTENV_KEY but you are missing a .env.vault file at ${E}. Did you forget to build it?`),iE.configDotenv(_);return iE._configVault(_)}function Nj(_,E){let R=Buffer.from(E.slice(-64),"hex"),N=Buffer.from(_,"base64"),A=N.slice(0,12),L=N.slice(-16);N=N.slice(12,-16);try{let U=df.createDecipheriv("aes-256-gcm",R,A);return U.setAuthTag(L),`${U.update(N)}${U.final()}`}catch(U){let G=U instanceof RangeError,S=U.message==="Invalid key length",C=U.message==="Unsupported state or unable to authenticate data";if(G||S)throw new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");else if(C)throw new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");else throw console.error("Error: ",U.code),console.error("Error: ",U.message),U}}function Tj(_,E,R={}){let N=Boolean(R&&R.debug),A=Boolean(R&&R.override);if(typeof E!=="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let L of Object.keys(E))if(Object.prototype.hasOwnProperty.call(_,L)){if(A===!0)_[L]=E[L];if(N)if(A===!0)cG(`"${L}" is already defined and WAS overwritten`);else cG(`"${L}" is already defined and was NOT overwritten`)}else _[L]=E[L]}var iE={configDotenv:Ej,_configVault:_j,_parseVault:sf,config:Rj,decrypt:Nj,parse:of,populate:Tj};aN.exports.configDotenv=iE.configDotenv;aN.exports._configVault=iE._configVault;aN.exports._parseVault=iE._parseVault;aN.exports.config=iE.config;aN.exports.decrypt=iE.decrypt;aN.exports.parse=iE.parse;aN.exports.populate=iE.populate;aN.exports=iE});var LY=j((Ky,Aj)=>{Aj.exports={fieldName:"string",dataType:"BIGINT",nullValue:!0,primaryKey:!0,autoIncrement:!0,defaultValue:"CURRENT_TIMESTAMP",defaultValueLiteral:"CURRENT_TIMESTAMP",notNullValue:!0,foreignKey:{foreignKeyName:"Name",destinationTableName:"Table Name",destinationTableColumnName:"Column Name",cascadeDelete:!0,cascadeUpdate:!0},onUpdate:"CURRENT_TIMESTAMP",onUpdateLiteral:"CURRENT_TIMESTAMP",onDelete:"CURRENT_TIMESTAMP",onDeleteLiteral:"CURRENT_TIMESTAMP",encrypted:!1}});var UY=j((Xy,Ij)=>{Ij.exports=[{title:"VARCHAR",name:"VARCHAR",value:"0-255",argument:!0,description:"Varchar is simply letters and numbers within the range 0 - 255",maxValue:255},{title:"TINYINT",name:"TINYINT",value:"0-100",description:"TINYINT means Integers: 0 to 100",maxValue:127},{title:"SMALLINT",name:"SMALLINT",value:"0-255",description:"SMALLINT means Integers: 0 to 240933",maxValue:32767},{title:"MEDIUMINT",name:"MEDIUMINT",value:"0-255",description:"MEDIUMINT means Integers: 0 to 1245568545560",maxValue:8388607},{title:"INT",name:"INT",value:"0-255",description:"INT means Integers: 0 to 12560",maxValue:2147483647},{title:"BIGINT",name:"BIGINT",value:"0-255",description:"BIGINT means Integers: 0 to 1245569056767568545560",maxValue:2000000000000000000000000000000000000000000000000000000000000000},{title:"TINYTEXT",name:"TINYTEXT",value:"0-255",description:"Text with 255 max characters",maxValue:127},{title:"TEXT",name:"TEXT",value:"0-100",description:"MEDIUMTEXT is just text with max length 16,777,215",maxValue:127},{title:"MEDIUMTEXT",name:"MEDIUMTEXT",value:"0-255",description:"MEDIUMTEXT is just text with max length 16,777,215",maxValue:127},{title:"LONGTEXT",name:"LONGTEXT",value:"0-255",description:"LONGTEXT is just text with max length 4,294,967,295",maxValue:127},{title:"UUID",name:"UUID",valueLiteral:"UUID()",description:"A Unique ID"}]});var GY=j((Zy,Lj)=>{Lj.exports={tableName:"users",tableFullName:"Users",fields:[{fieldName:"first_name",dataType:"VARCHAR(100)",notNullValue:!0},{fieldName:"last_name",dataType:"VARCHAR(100)",notNullValue:!0},{fieldName:"email",dataType:"VARCHAR(200)",notNullValue:!0},{fieldName:"phone",dataType:"VARCHAR(50)"},{fieldName:"user_type",dataType:"VARCHAR(20)",defaultValue:"default"},{fieldName:"username",dataType:"VARCHAR(100)",nullValue:!0},{fieldName:"password",dataType:"TEXT"},{fieldName:"image",dataType:"VARCHAR(250)"},{fieldName:"image_thumbnail",dataType:"VARCHAR(250)"},{fieldName:"address",dataType:"VARCHAR(255)"},{fieldName:"city",dataType:"VARCHAR(50)"},{fieldName:"state",dataType:"VARCHAR(50)"},{fieldName:"country",dataType:"VARCHAR(50)"},{fieldName:"zip_code",dataType:"VARCHAR(50)"},{fieldName:"social_login",dataType:"TINYINT",defaultValue:"0"},{fieldName:"social_platform",dataType:"VARCHAR(50)",nullValue:!0},{fieldName:"social_id",dataType:"VARCHAR(250)",nullValue:!0},{fieldName:"more_user_data",dataType:"BIGINT",defaultValue:"0"},{fieldName:"verification_status",dataType:"TINYINT",defaultValue:"0"},{fieldName:"temp_login_code",dataType:"VARCHAR(50)",nullValue:!0}]}});async function LE({queryString:_,queryValuesArray:E,database:R,tableSchema:N,useLocal:A}){let L=A?!0:R?.match(/^datasquirel$/)?!0:!1,U=A?xE:L?oE:MR,G;try{if(_&&E&&Array.isArray(E)&&E[0])G=L?await U(_,E):await U({paradigm:"Full Access",database:R,queryString:_,queryValues:E});else G=L?await U(_):await U({paradigm:"Full Access",database:R,queryString:_})}catch(S){NE({component:"varDatabaseDbHandler/lines-29-32",message:S.message})}if(G&&N)try{return await u1({unparsedResults:G,tableSchema:N})}catch(S){return console.log("\x1B[31mvarDatabaseDbHandler ERROR\x1B[0m =>",R,S),NE({component:"varDatabaseDbHandler/lines-52-53",message:S.message}),null}else if(G)return G;else return null}var JN=dE(()=>{yI();CR();rN();i1();WN()});var SY={};YT(SY,{default:()=>K1});function K1({password:_,encryptionKey:E}){let R=E||process.env.DSQL_ENCRYPTION_PASSWORD;if(!R?.match(/.{8,}/))throw new Error("Encryption key is invalid");let N=DY.createHmac("sha512",R);return N.update(_),N.digest("base64")}var DY;var LA=dE(()=>{DY=require("crypto")});function uE(_){let E=process.env.DSQL_COOKIES_PREFIX||"dsql_",R=process.env.DSQL_COOKIES_KEY_NAME||"key",N=process.env.DSQL_COOKIES_CSRF_NAME||"csrf",A=process.env.DSQL_COOKIES_ONE_TIME_CODE_NAME||"one-time-code",L=_?.database?.replace(/^datasquirel_user_\d+_/,"")||process.env.DSQL_DB_NAME?.replace(/^datasquirel_user_\d+_/,""),U=E;if(_?.userId)U+=`user_${_.userId}_`;if(L)U+=`${L}_`;U+=R;let G=E;if(_?.userId)G+=`user_${_.userId}_`;if(L)G+=`${L}_`;G+=N;let S=E;if(_?.userId)S+=`user_${_.userId}_`;if(L)S+=`${L}_`;return S+=A,{keyCookieName:U,csrfCookieName:G,oneTimeCodeName:S}}var XY=j(($b,KY)=>{var BY=require("url");class VY{constructor(_){this.options=_||{},this.cookies=[]}set(_,E){let R=BY.parse(E||""),N=this.parse(_),A;if(N.domain){if(A=N.domain.replace(/^\./,""),R.hostname.lengthE.name+"="+E.value).join("; ")}list(_){let E=[],R,N;for(R=this.cookies.length-1;R>=0;R--){if(N=this.cookies[R],this.isExpired(N)){this.cookies.splice(R,R);continue}if(this.match(N,_))E.unshift(N)}return E}parse(_){let E={};return(_||"").toString().split(";").forEach((R)=>{let N=R.split("="),A=N.shift().trim().toLowerCase(),L=N.join("=").trim(),U;if(!A)return;switch(A){case"expires":if(L=new Date(L),L.toString()!=="Invalid Date")E.expires=L;break;case"path":E.path=L;break;case"domain":if(U=L.toLowerCase(),U.length&&U.charAt(0)!==".")U="."+U;E.domain=U;break;case"max-age":E.expires=new Date(Date.now()+(Number(L)||0)*1000);break;case"secure":E.secure=!0;break;case"httponly":E.httponly=!0;break;default:if(!E.name)E.name=A,E.value=L}}),E}match(_,E){let R=BY.parse(E||"");if(R.hostname!==_.domain&&(_.domain.charAt(0)!=="."||("."+R.hostname).substr(-_.domain.length)!==_.domain))return!1;if(this.getPath(R.pathname).substr(0,_.path.length)!==_.path)return!1;if(_.secure&&R.protocol!=="https:")return!1;return!0}add(_){let E,R;if(!_||!_.name)return!1;for(E=0,R=this.cookies.length;E{Gj.exports={name:"nodemailer",version:"6.9.14",description:"Easy as cake e-mail sending from your Node.js applications",main:"lib/nodemailer.js",scripts:{test:"node --test --test-concurrency=1 test/**/*.test.js test/**/*-test.js","test:coverage":"c8 node --test --test-concurrency=1 test/**/*.test.js test/**/*-test.js",lint:"eslint .",update:"rm -rf node_modules/ package-lock.json && ncu -u && npm install"},repository:{type:"git",url:"https://github.com/nodemailer/nodemailer.git"},keywords:["Nodemailer"],author:"Andris Reinman",license:"MIT-0",bugs:{url:"https://github.com/nodemailer/nodemailer/issues"},homepage:"https://nodemailer.com/",devDependencies:{"@aws-sdk/client-ses":"3.600.0",bunyan:"1.8.15",c8:"10.1.2",eslint:"8.57.0","eslint-config-nodemailer":"1.2.0","eslint-config-prettier":"9.1.0",libbase64:"1.3.0",libmime:"5.3.5",libqp:"2.1.0","nodemailer-ntlm-auth":"1.0.4",proxy:"1.0.2","proxy-test-server":"1.0.0","smtp-server":"3.13.4"},engines:{node:">=6.0.0"}}});var UA=j((wb,T2)=>{var Dj=require("http"),Sj=require("https"),JY=require("url"),Cj=require("zlib"),Pj=require("stream").PassThrough,$Y=XY(),Yj=LN(),Hj=require("net");T2.exports=function(_,E){return ZY(_,E)};T2.exports.Cookies=$Y;function ZY(_,E){if(E=E||{},E.fetchRes=E.fetchRes||new Pj,E.cookies=E.cookies||new $Y,E.redirects=E.redirects||0,E.maxRedirects=isNaN(E.maxRedirects)?5:E.maxRedirects,E.cookie)[].concat(E.cookie||[]).forEach((H)=>{E.cookies.set(H,_)}),E.cookie=!1;let R=E.fetchRes,N=JY.parse(_),A=(E.method||"").toString().trim().toUpperCase()||"GET",L=!1,U,G,S=N.protocol==="https:"?Sj:Dj,C={"accept-encoding":"gzip,deflate","user-agent":"nodemailer/"+Yj.version};if(Object.keys(E.headers||{}).forEach((H)=>{C[H.toLowerCase().trim()]=E.headers[H]}),E.userAgent)C["user-agent"]=E.userAgent;if(N.auth)C.Authorization="Basic "+Buffer.from(N.auth).toString("base64");if(U=E.cookies.get(_))C.cookie=U;if(E.body){if(E.contentType!==!1)C["Content-Type"]=E.contentType||"application/x-www-form-urlencoded";if(typeof E.body.pipe==="function")C["Transfer-Encoding"]="chunked",G=E.body,G.on("error",(H)=>{if(L)return;L=!0,H.type="FETCH",H.sourceUrl=_,R.emit("error",H)});else{if(E.body instanceof Buffer)G=E.body;else if(typeof E.body==="object")try{G=Buffer.from(Object.keys(E.body).map((H)=>{let X=E.body[H].toString().trim();return encodeURIComponent(H)+"="+encodeURIComponent(X)}).join("&"))}catch(H){if(L)return;L=!0,H.type="FETCH",H.sourceUrl=_,R.emit("error",H);return}else G=Buffer.from(E.body.toString().trim());C["Content-Type"]=E.contentType||"application/x-www-form-urlencoded",C["Content-Length"]=G.length}A=(E.method||"").toString().trim().toUpperCase()||"POST"}let Y,M={method:A,host:N.hostname,path:N.path,port:N.port?N.port:N.protocol==="https:"?443:80,headers:C,rejectUnauthorized:!1,agent:!1};if(E.tls)Object.keys(E.tls).forEach((H)=>{M[H]=E.tls[H]});if(N.protocol==="https:"&&N.hostname&&N.hostname!==M.host&&!Hj.isIP(N.hostname)&&!M.servername)M.servername=N.hostname;try{Y=S.request(M)}catch(H){return L=!0,setImmediate(()=>{H.type="FETCH",H.sourceUrl=_,R.emit("error",H)}),R}if(E.timeout)Y.setTimeout(E.timeout,()=>{if(L)return;L=!0,Y.abort();let H=new Error("Request Timeout");H.type="FETCH",H.sourceUrl=_,R.emit("error",H)});return Y.on("error",(H)=>{if(L)return;L=!0,H.type="FETCH",H.sourceUrl=_,R.emit("error",H)}),Y.on("response",(H)=>{let X;if(L)return;switch(H.headers["content-encoding"]){case"gzip":case"deflate":X=Cj.createUnzip();break}if(H.headers["set-cookie"])[].concat(H.headers["set-cookie"]||[]).forEach(($)=>{E.cookies.set($,_)});if([301,302,303,307,308].includes(H.statusCode)&&H.headers.location){if(E.redirects++,E.redirects>E.maxRedirects){L=!0;let $=new Error("Maximum redirect count exceeded");$.type="FETCH",$.sourceUrl=_,R.emit("error",$),Y.abort();return}return E.method="GET",E.body=!1,ZY(JY.resolve(_,H.headers.location),E)}if(R.statusCode=H.statusCode,R.headers=H.headers,H.statusCode>=300&&!E.allowErrorResponse){L=!0;let $=new Error("Invalid status code "+H.statusCode);$.type="FETCH",$.sourceUrl=_,R.emit("error",$),Y.abort();return}if(H.on("error",($)=>{if(L)return;L=!0,$.type="FETCH",$.sourceUrl=_,R.emit("error",$),Y.abort()}),X)H.pipe(X).pipe(R),X.on("error",($)=>{if(L)return;L=!0,$.type="FETCH",$.sourceUrl=_,R.emit("error",$),Y.abort()});else H.pipe(R)}),setImmediate(()=>{if(G)try{if(typeof G.pipe==="function")return G.pipe(Y);else Y.write(G)}catch(H){L=!0,H.type="FETCH",H.sourceUrl=_,R.emit("error",H);return}Y.end()}),R}});var IR=j((Qb,ER)=>{var Wj=require("url"),Mj=require("util"),Fj=require("fs"),Bj=UA(),ZN=require("dns"),Vj=require("net"),Kj=require("os"),QY;try{QY=Kj.networkInterfaces()}catch(_){}ER.exports.networkInterfaces=QY;var zY=(_,E)=>{let R=ER.exports.networkInterfaces;if(!R)return!0;return Object.keys(R).map((A)=>R[A]).reduce((A,L)=>A.concat(L),[]).filter((A)=>!A.internal||E).filter((A)=>A.family==="IPv"+_||A.family===_).length>0},wY=(_,E,R,N)=>{if(R=R||{},!zY(_,R.allowInternalNetworkInterfaces))return N(null,[]);(ZN.Resolver?new ZN.Resolver(R):ZN)["resolve"+_](E,(U,G)=>{if(U){switch(U.code){case ZN.NODATA:case ZN.NOTFOUND:case ZN.NOTIMP:case ZN.SERVFAIL:case ZN.CONNREFUSED:case ZN.REFUSED:case"EAI_AGAIN":return N(null,[])}return N(U)}return N(null,Array.isArray(G)?G:[].concat(G||[]))})},GA=ER.exports.dnsCache=new Map,$N=(_,E)=>{if(!_)return Object.assign({},E||{});return Object.assign({servername:_.servername,host:!_.addresses||!_.addresses.length?null:_.addresses.length===1?_.addresses[0]:_.addresses[Math.floor(Math.random()*_.addresses.length)]},E||{})};ER.exports.resolveHostname=(_,E)=>{if(_=_||{},!_.host&&_.servername)_.host=_.servername;if(!_.host||Vj.isIP(_.host)){let N={addresses:[_.host],servername:_.servername||!1};return E(null,$N(N,{cached:!1}))}let R;if(GA.has(_.host)){if(R=GA.get(_.host),!R.expires||R.expires>=Date.now())return E(null,$N(R.value,{cached:!0}))}wY(4,_.host,_,(N,A)=>{if(N){if(R)return E(null,$N(R.value,{cached:!0,error:N}));return E(N)}if(A&&A.length){let L={addresses:A,servername:_.servername||_.host};return GA.set(_.host,{value:L,expires:Date.now()+(_.dnsTtl||300000)}),E(null,$N(L,{cached:!1}))}wY(6,_.host,_,(L,U)=>{if(L){if(R)return E(null,$N(R.value,{cached:!0,error:L}));return E(L)}if(U&&U.length){let G={addresses:U,servername:_.servername||_.host};return GA.set(_.host,{value:G,expires:Date.now()+(_.dnsTtl||300000)}),E(null,$N(G,{cached:!1}))}try{ZN.lookup(_.host,{all:!0},(G,S)=>{if(G){if(R)return E(null,$N(R.value,{cached:!0,error:G}));return E(G)}let C=S?S.filter((M)=>zY(M.family)).map((M)=>M.address).shift():!1;if(S&&S.length&&!C)console.warn(`Failed to resolve IPv${S[0].family} addresses with current network`);if(!C&&R)return E(null,$N(R.value,{cached:!0}));let Y={addresses:C?[C]:[_.host],servername:_.servername||_.host};return GA.set(_.host,{value:Y,expires:Date.now()+(_.dnsTtl||300000)}),E(null,$N(Y,{cached:!1}))})}catch(G){if(R)return E(null,$N(R.value,{cached:!0,error:G}));return E(G)}})})};ER.exports.parseConnectionUrl=(_)=>{_=_||"";let E={};return[Wj.parse(_,!0)].forEach((R)=>{let N;switch(R.protocol){case"smtp:":E.secure=!1;break;case"smtps:":E.secure=!0;break;case"direct:":E.direct=!0;break}if(!isNaN(R.port)&&Number(R.port))E.port=Number(R.port);if(R.hostname)E.host=R.hostname;if(R.auth){if(N=R.auth.split(":"),!E.auth)E.auth={};E.auth.user=N.shift(),E.auth.pass=N.join(":")}Object.keys(R.query||{}).forEach((A)=>{let L=E,U=A,G=R.query[A];if(!isNaN(G))G=Number(G);switch(G){case"true":G=!0;break;case"false":G=!1;break}if(A.indexOf("tls.")===0){if(U=A.substr(4),!E.tls)E.tls={};L=E.tls}else if(A.indexOf(".")>=0)return;if(!(U in L))L[U]=G})}),E};ER.exports._logFunc=(_,E,R,N,A,...L)=>{let U={};Object.keys(R||{}).forEach((G)=>{if(G!=="level")U[G]=R[G]}),Object.keys(N||{}).forEach((G)=>{if(G!=="level")U[G]=N[G]}),_[E](U,A,...L)};ER.exports.getLogger=(_,E)=>{_=_||{};let R={},N=["trace","debug","info","warn","error","fatal"];if(!_.logger)return N.forEach((L)=>{R[L]=()=>!1}),R;let A=_.logger;if(_.logger===!0)A=Xj(N);return N.forEach((L)=>{R[L]=(U,G,...S)=>{ER.exports._logFunc(A,L,E,U,G,...S)}}),R};ER.exports.callbackPromise=(_,E)=>function(){let R=Array.from(arguments),N=R.shift();if(N)E(N);else _(...R)};ER.exports.parseDataURI=(_)=>{let E=_,R=E.indexOf(",");if(!R)return _;let N=E.substring(R+1),A=E.substring("data:".length,R),L,U=A.split(";"),G=U.length>1?U[U.length-1]:!1;if(G&&G.indexOf("=")<0)L=G.toLowerCase(),U.pop();let S=U.shift()||"application/octet-stream",C={};for(let Y of U){let M=Y.indexOf("=");if(M>=0){let H=Y.substring(0,M),X=Y.substring(M+1);C[H]=X}}switch(L){case"base64":N=Buffer.from(N,"base64");break;case"utf8":N=Buffer.from(N);break;default:try{N=Buffer.from(decodeURIComponent(N))}catch(Y){N=Buffer.from(N)}N=Buffer.from(N)}return{data:N,encoding:L,contentType:S,params:C}};ER.exports.resolveContent=(_,E,R)=>{let N;if(!R)N=new Promise((G,S)=>{R=ER.exports.callbackPromise(G,S)});let A=_&&_[E]&&_[E].content||_[E],L,U=(typeof _[E]==="object"&&_[E].encoding||"utf8").toString().toLowerCase().replace(/[-_\s]/g,"");if(!A)return R(null,A);if(typeof A==="object"){if(typeof A.pipe==="function")return O2(A,(G,S)=>{if(G)return R(G);if(_[E].content)_[E].content=S;else _[E]=S;R(null,S)});else if(/^https?:\/\//i.test(A.path||A.href))return L=Bj(A.path||A.href),O2(L,R);else if(/^data:/i.test(A.path||A.href)){let G=ER.exports.parseDataURI(A.path||A.href);if(!G||!G.data)return R(null,Buffer.from(0));return R(null,G.data)}else if(A.path)return O2(Fj.createReadStream(A.path),R)}if(typeof _[E].content==="string"&&!["utf8","usascii","ascii"].includes(U))A=Buffer.from(_[E].content,U);return setImmediate(()=>R(null,A)),N};ER.exports.assign=function(){let _=Array.from(arguments),E=_.shift()||{};return _.forEach((R)=>{Object.keys(R||{}).forEach((N)=>{if(["tls","auth"].includes(N)&&R[N]&&typeof R[N]==="object"){if(!E[N])E[N]={};Object.keys(R[N]).forEach((A)=>{E[N][A]=R[N][A]})}else E[N]=R[N]})}),E};ER.exports.encodeXText=(_)=>{if(!/[^\x21-\x2A\x2C-\x3C\x3E-\x7E]/.test(_))return _;let E=Buffer.from(_),R="";for(let N=0,A=E.length;N126||L===43||L===61)R+="+"+(L<16?"0":"")+L.toString(16).toUpperCase();else R+=String.fromCharCode(L)}return R};function O2(_,E){let R=!1,N=[],A=0;_.on("error",(L)=>{if(R)return;R=!0,E(L)}),_.on("readable",()=>{let L;while((L=_.read())!==null)N.push(L),A+=L.length}),_.on("end",()=>{if(R)return;R=!0;let L;try{L=Buffer.concat(N,A)}catch(U){return E(U)}E(null,L)})}function Xj(_){let E=0,R=new Map;_.forEach((L)=>{if(L.length>E)E=L.length}),_.forEach((L)=>{let U=L.toUpperCase();if(U.length{let C="";if(U){if(U.tnx==="server")C="S: ";else if(U.tnx==="client")C="C: ";if(U.sid)C="["+U.sid+"] "+C;if(U.cid)C="[#"+U.cid+"] "+C}G=Mj.format(G,...S),G.split(/\r?\n/).forEach((Y)=>{console.log("[%s] %s %s",new Date().toISOString().substr(0,19).replace(/T/," "),R.get(L),C+Y)})},A={};return _.forEach((L)=>{A[L]=N.bind(null,L)}),A}});var A2=j((zb,fY)=>{var Jj=require("path"),xY=new Map([["application/acad","dwg"],["application/applixware","aw"],["application/arj","arj"],["application/atom+xml","xml"],["application/atomcat+xml","atomcat"],["application/atomsvc+xml","atomsvc"],["application/base64",["mm","mme"]],["application/binhex","hqx"],["application/binhex4","hqx"],["application/book",["book","boo"]],["application/ccxml+xml,","ccxml"],["application/cdf","cdf"],["application/cdmi-capability","cdmia"],["application/cdmi-container","cdmic"],["application/cdmi-domain","cdmid"],["application/cdmi-object","cdmio"],["application/cdmi-queue","cdmiq"],["application/clariscad","ccad"],["application/commonground","dp"],["application/cu-seeme","cu"],["application/davmount+xml","davmount"],["application/drafting","drw"],["application/dsptype","tsp"],["application/dssc+der","dssc"],["application/dssc+xml","xdssc"],["application/dxf","dxf"],["application/ecmascript",["js","es"]],["application/emma+xml","emma"],["application/envoy","evy"],["application/epub+zip","epub"],["application/excel",["xls","xl","xla","xlb","xlc","xld","xlk","xll","xlm","xlt","xlv","xlw"]],["application/exi","exi"],["application/font-tdpfr","pfr"],["application/fractals","fif"],["application/freeloader","frl"],["application/futuresplash","spl"],["application/gnutar","tgz"],["application/groupwise","vew"],["application/hlp","hlp"],["application/hta","hta"],["application/hyperstudio","stk"],["application/i-deas","unv"],["application/iges",["iges","igs"]],["application/inf","inf"],["application/internet-property-stream","acx"],["application/ipfix","ipfix"],["application/java","class"],["application/java-archive","jar"],["application/java-byte-code","class"],["application/java-serialized-object","ser"],["application/java-vm","class"],["application/javascript","js"],["application/json","json"],["application/lha","lha"],["application/lzx","lzx"],["application/mac-binary","bin"],["application/mac-binhex","hqx"],["application/mac-binhex40","hqx"],["application/mac-compactpro","cpt"],["application/macbinary","bin"],["application/mads+xml","mads"],["application/marc","mrc"],["application/marcxml+xml","mrcx"],["application/mathematica","ma"],["application/mathml+xml","mathml"],["application/mbedlet","mbd"],["application/mbox","mbox"],["application/mcad","mcd"],["application/mediaservercontrol+xml","mscml"],["application/metalink4+xml","meta4"],["application/mets+xml","mets"],["application/mime","aps"],["application/mods+xml","mods"],["application/mp21","m21"],["application/mp4","mp4"],["application/mspowerpoint",["ppt","pot","pps","ppz"]],["application/msword",["doc","dot","w6w","wiz","word"]],["application/mswrite","wri"],["application/mxf","mxf"],["application/netmc","mcp"],["application/octet-stream",["*"]],["application/oda","oda"],["application/oebps-package+xml","opf"],["application/ogg","ogx"],["application/olescript","axs"],["application/onenote","onetoc"],["application/patch-ops-error+xml","xer"],["application/pdf","pdf"],["application/pgp-encrypted","asc"],["application/pgp-signature","pgp"],["application/pics-rules","prf"],["application/pkcs-12","p12"],["application/pkcs-crl","crl"],["application/pkcs10","p10"],["application/pkcs7-mime",["p7c","p7m"]],["application/pkcs7-signature","p7s"],["application/pkcs8","p8"],["application/pkix-attr-cert","ac"],["application/pkix-cert",["cer","crt"]],["application/pkix-crl","crl"],["application/pkix-pkipath","pkipath"],["application/pkixcmp","pki"],["application/plain","text"],["application/pls+xml","pls"],["application/postscript",["ps","ai","eps"]],["application/powerpoint","ppt"],["application/pro_eng",["part","prt"]],["application/prs.cww","cww"],["application/pskc+xml","pskcxml"],["application/rdf+xml","rdf"],["application/reginfo+xml","rif"],["application/relax-ng-compact-syntax","rnc"],["application/resource-lists+xml","rl"],["application/resource-lists-diff+xml","rld"],["application/ringing-tones","rng"],["application/rls-services+xml","rs"],["application/rsd+xml","rsd"],["application/rss+xml","xml"],["application/rtf",["rtf","rtx"]],["application/sbml+xml","sbml"],["application/scvp-cv-request","scq"],["application/scvp-cv-response","scs"],["application/scvp-vp-request","spq"],["application/scvp-vp-response","spp"],["application/sdp","sdp"],["application/sea","sea"],["application/set","set"],["application/set-payment-initiation","setpay"],["application/set-registration-initiation","setreg"],["application/shf+xml","shf"],["application/sla","stl"],["application/smil",["smi","smil"]],["application/smil+xml","smi"],["application/solids","sol"],["application/sounder","sdr"],["application/sparql-query","rq"],["application/sparql-results+xml","srx"],["application/srgs","gram"],["application/srgs+xml","grxml"],["application/sru+xml","sru"],["application/ssml+xml","ssml"],["application/step",["step","stp"]],["application/streamingmedia","ssm"],["application/tei+xml","tei"],["application/thraud+xml","tfi"],["application/timestamped-data","tsd"],["application/toolbook","tbk"],["application/vda","vda"],["application/vnd.3gpp.pic-bw-large","plb"],["application/vnd.3gpp.pic-bw-small","psb"],["application/vnd.3gpp.pic-bw-var","pvb"],["application/vnd.3gpp2.tcap","tcap"],["application/vnd.3m.post-it-notes","pwn"],["application/vnd.accpac.simply.aso","aso"],["application/vnd.accpac.simply.imp","imp"],["application/vnd.acucobol","acu"],["application/vnd.acucorp","atc"],["application/vnd.adobe.air-application-installer-package+zip","air"],["application/vnd.adobe.fxp","fxp"],["application/vnd.adobe.xdp+xml","xdp"],["application/vnd.adobe.xfdf","xfdf"],["application/vnd.ahead.space","ahead"],["application/vnd.airzip.filesecure.azf","azf"],["application/vnd.airzip.filesecure.azs","azs"],["application/vnd.amazon.ebook","azw"],["application/vnd.americandynamics.acc","acc"],["application/vnd.amiga.ami","ami"],["application/vnd.android.package-archive","apk"],["application/vnd.anser-web-certificate-issue-initiation","cii"],["application/vnd.anser-web-funds-transfer-initiation","fti"],["application/vnd.antix.game-component","atx"],["application/vnd.apple.installer+xml","mpkg"],["application/vnd.apple.mpegurl","m3u8"],["application/vnd.aristanetworks.swi","swi"],["application/vnd.audiograph","aep"],["application/vnd.blueice.multipass","mpm"],["application/vnd.bmi","bmi"],["application/vnd.businessobjects","rep"],["application/vnd.chemdraw+xml","cdxml"],["application/vnd.chipnuts.karaoke-mmd","mmd"],["application/vnd.cinderella","cdy"],["application/vnd.claymore","cla"],["application/vnd.cloanto.rp9","rp9"],["application/vnd.clonk.c4group","c4g"],["application/vnd.cluetrust.cartomobile-config","c11amc"],["application/vnd.cluetrust.cartomobile-config-pkg","c11amz"],["application/vnd.commonspace","csp"],["application/vnd.contact.cmsg","cdbcmsg"],["application/vnd.cosmocaller","cmc"],["application/vnd.crick.clicker","clkx"],["application/vnd.crick.clicker.keyboard","clkk"],["application/vnd.crick.clicker.palette","clkp"],["application/vnd.crick.clicker.template","clkt"],["application/vnd.crick.clicker.wordbank","clkw"],["application/vnd.criticaltools.wbs+xml","wbs"],["application/vnd.ctc-posml","pml"],["application/vnd.cups-ppd","ppd"],["application/vnd.curl.car","car"],["application/vnd.curl.pcurl","pcurl"],["application/vnd.data-vision.rdz","rdz"],["application/vnd.denovo.fcselayout-link","fe_launch"],["application/vnd.dna","dna"],["application/vnd.dolby.mlp","mlp"],["application/vnd.dpgraph","dpg"],["application/vnd.dreamfactory","dfac"],["application/vnd.dvb.ait","ait"],["application/vnd.dvb.service","svc"],["application/vnd.dynageo","geo"],["application/vnd.ecowin.chart","mag"],["application/vnd.enliven","nml"],["application/vnd.epson.esf","esf"],["application/vnd.epson.msf","msf"],["application/vnd.epson.quickanime","qam"],["application/vnd.epson.salt","slt"],["application/vnd.epson.ssf","ssf"],["application/vnd.eszigno3+xml","es3"],["application/vnd.ezpix-album","ez2"],["application/vnd.ezpix-package","ez3"],["application/vnd.fdf","fdf"],["application/vnd.fdsn.seed","seed"],["application/vnd.flographit","gph"],["application/vnd.fluxtime.clip","ftc"],["application/vnd.framemaker","fm"],["application/vnd.frogans.fnc","fnc"],["application/vnd.frogans.ltf","ltf"],["application/vnd.fsc.weblaunch","fsc"],["application/vnd.fujitsu.oasys","oas"],["application/vnd.fujitsu.oasys2","oa2"],["application/vnd.fujitsu.oasys3","oa3"],["application/vnd.fujitsu.oasysgp","fg5"],["application/vnd.fujitsu.oasysprs","bh2"],["application/vnd.fujixerox.ddd","ddd"],["application/vnd.fujixerox.docuworks","xdw"],["application/vnd.fujixerox.docuworks.binder","xbd"],["application/vnd.fuzzysheet","fzs"],["application/vnd.genomatix.tuxedo","txd"],["application/vnd.geogebra.file","ggb"],["application/vnd.geogebra.tool","ggt"],["application/vnd.geometry-explorer","gex"],["application/vnd.geonext","gxt"],["application/vnd.geoplan","g2w"],["application/vnd.geospace","g3w"],["application/vnd.gmx","gmx"],["application/vnd.google-earth.kml+xml","kml"],["application/vnd.google-earth.kmz","kmz"],["application/vnd.grafeq","gqf"],["application/vnd.groove-account","gac"],["application/vnd.groove-help","ghf"],["application/vnd.groove-identity-message","gim"],["application/vnd.groove-injector","grv"],["application/vnd.groove-tool-message","gtm"],["application/vnd.groove-tool-template","tpl"],["application/vnd.groove-vcard","vcg"],["application/vnd.hal+xml","hal"],["application/vnd.handheld-entertainment+xml","zmm"],["application/vnd.hbci","hbci"],["application/vnd.hhe.lesson-player","les"],["application/vnd.hp-hpgl",["hgl","hpg","hpgl"]],["application/vnd.hp-hpid","hpid"],["application/vnd.hp-hps","hps"],["application/vnd.hp-jlyt","jlt"],["application/vnd.hp-pcl","pcl"],["application/vnd.hp-pclxl","pclxl"],["application/vnd.hydrostatix.sof-data","sfd-hdstx"],["application/vnd.hzn-3d-crossword","x3d"],["application/vnd.ibm.minipay","mpy"],["application/vnd.ibm.modcap","afp"],["application/vnd.ibm.rights-management","irm"],["application/vnd.ibm.secure-container","sc"],["application/vnd.iccprofile","icc"],["application/vnd.igloader","igl"],["application/vnd.immervision-ivp","ivp"],["application/vnd.immervision-ivu","ivu"],["application/vnd.insors.igm","igm"],["application/vnd.intercon.formnet","xpw"],["application/vnd.intergeo","i2g"],["application/vnd.intu.qbo","qbo"],["application/vnd.intu.qfx","qfx"],["application/vnd.ipunplugged.rcprofile","rcprofile"],["application/vnd.irepository.package+xml","irp"],["application/vnd.is-xpr","xpr"],["application/vnd.isac.fcs","fcs"],["application/vnd.jam","jam"],["application/vnd.jcp.javame.midlet-rms","rms"],["application/vnd.jisp","jisp"],["application/vnd.joost.joda-archive","joda"],["application/vnd.kahootz","ktz"],["application/vnd.kde.karbon","karbon"],["application/vnd.kde.kchart","chrt"],["application/vnd.kde.kformula","kfo"],["application/vnd.kde.kivio","flw"],["application/vnd.kde.kontour","kon"],["application/vnd.kde.kpresenter","kpr"],["application/vnd.kde.kspread","ksp"],["application/vnd.kde.kword","kwd"],["application/vnd.kenameaapp","htke"],["application/vnd.kidspiration","kia"],["application/vnd.kinar","kne"],["application/vnd.koan","skp"],["application/vnd.kodak-descriptor","sse"],["application/vnd.las.las+xml","lasxml"],["application/vnd.llamagraphics.life-balance.desktop","lbd"],["application/vnd.llamagraphics.life-balance.exchange+xml","lbe"],["application/vnd.lotus-1-2-3","123"],["application/vnd.lotus-approach","apr"],["application/vnd.lotus-freelance","pre"],["application/vnd.lotus-notes","nsf"],["application/vnd.lotus-organizer","org"],["application/vnd.lotus-screencam","scm"],["application/vnd.lotus-wordpro","lwp"],["application/vnd.macports.portpkg","portpkg"],["application/vnd.mcd","mcd"],["application/vnd.medcalcdata","mc1"],["application/vnd.mediastation.cdkey","cdkey"],["application/vnd.mfer","mwf"],["application/vnd.mfmp","mfm"],["application/vnd.micrografx.flo","flo"],["application/vnd.micrografx.igx","igx"],["application/vnd.mif","mif"],["application/vnd.mobius.daf","daf"],["application/vnd.mobius.dis","dis"],["application/vnd.mobius.mbk","mbk"],["application/vnd.mobius.mqy","mqy"],["application/vnd.mobius.msl","msl"],["application/vnd.mobius.plc","plc"],["application/vnd.mobius.txf","txf"],["application/vnd.mophun.application","mpn"],["application/vnd.mophun.certificate","mpc"],["application/vnd.mozilla.xul+xml","xul"],["application/vnd.ms-artgalry","cil"],["application/vnd.ms-cab-compressed","cab"],["application/vnd.ms-excel",["xls","xla","xlc","xlm","xlt","xlw","xlb","xll"]],["application/vnd.ms-excel.addin.macroenabled.12","xlam"],["application/vnd.ms-excel.sheet.binary.macroenabled.12","xlsb"],["application/vnd.ms-excel.sheet.macroenabled.12","xlsm"],["application/vnd.ms-excel.template.macroenabled.12","xltm"],["application/vnd.ms-fontobject","eot"],["application/vnd.ms-htmlhelp","chm"],["application/vnd.ms-ims","ims"],["application/vnd.ms-lrm","lrm"],["application/vnd.ms-officetheme","thmx"],["application/vnd.ms-outlook","msg"],["application/vnd.ms-pki.certstore","sst"],["application/vnd.ms-pki.pko","pko"],["application/vnd.ms-pki.seccat","cat"],["application/vnd.ms-pki.stl","stl"],["application/vnd.ms-pkicertstore","sst"],["application/vnd.ms-pkiseccat","cat"],["application/vnd.ms-pkistl","stl"],["application/vnd.ms-powerpoint",["ppt","pot","pps","ppa","pwz"]],["application/vnd.ms-powerpoint.addin.macroenabled.12","ppam"],["application/vnd.ms-powerpoint.presentation.macroenabled.12","pptm"],["application/vnd.ms-powerpoint.slide.macroenabled.12","sldm"],["application/vnd.ms-powerpoint.slideshow.macroenabled.12","ppsm"],["application/vnd.ms-powerpoint.template.macroenabled.12","potm"],["application/vnd.ms-project","mpp"],["application/vnd.ms-word.document.macroenabled.12","docm"],["application/vnd.ms-word.template.macroenabled.12","dotm"],["application/vnd.ms-works",["wks","wcm","wdb","wps"]],["application/vnd.ms-wpl","wpl"],["application/vnd.ms-xpsdocument","xps"],["application/vnd.mseq","mseq"],["application/vnd.musician","mus"],["application/vnd.muvee.style","msty"],["application/vnd.neurolanguage.nlu","nlu"],["application/vnd.noblenet-directory","nnd"],["application/vnd.noblenet-sealer","nns"],["application/vnd.noblenet-web","nnw"],["application/vnd.nokia.configuration-message","ncm"],["application/vnd.nokia.n-gage.data","ngdat"],["application/vnd.nokia.n-gage.symbian.install","n-gage"],["application/vnd.nokia.radio-preset","rpst"],["application/vnd.nokia.radio-presets","rpss"],["application/vnd.nokia.ringing-tone","rng"],["application/vnd.novadigm.edm","edm"],["application/vnd.novadigm.edx","edx"],["application/vnd.novadigm.ext","ext"],["application/vnd.oasis.opendocument.chart","odc"],["application/vnd.oasis.opendocument.chart-template","otc"],["application/vnd.oasis.opendocument.database","odb"],["application/vnd.oasis.opendocument.formula","odf"],["application/vnd.oasis.opendocument.formula-template","odft"],["application/vnd.oasis.opendocument.graphics","odg"],["application/vnd.oasis.opendocument.graphics-template","otg"],["application/vnd.oasis.opendocument.image","odi"],["application/vnd.oasis.opendocument.image-template","oti"],["application/vnd.oasis.opendocument.presentation","odp"],["application/vnd.oasis.opendocument.presentation-template","otp"],["application/vnd.oasis.opendocument.spreadsheet","ods"],["application/vnd.oasis.opendocument.spreadsheet-template","ots"],["application/vnd.oasis.opendocument.text","odt"],["application/vnd.oasis.opendocument.text-master","odm"],["application/vnd.oasis.opendocument.text-template","ott"],["application/vnd.oasis.opendocument.text-web","oth"],["application/vnd.olpc-sugar","xo"],["application/vnd.oma.dd2+xml","dd2"],["application/vnd.openofficeorg.extension","oxt"],["application/vnd.openxmlformats-officedocument.presentationml.presentation","pptx"],["application/vnd.openxmlformats-officedocument.presentationml.slide","sldx"],["application/vnd.openxmlformats-officedocument.presentationml.slideshow","ppsx"],["application/vnd.openxmlformats-officedocument.presentationml.template","potx"],["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xlsx"],["application/vnd.openxmlformats-officedocument.spreadsheetml.template","xltx"],["application/vnd.openxmlformats-officedocument.wordprocessingml.document","docx"],["application/vnd.openxmlformats-officedocument.wordprocessingml.template","dotx"],["application/vnd.osgeo.mapguide.package","mgp"],["application/vnd.osgi.dp","dp"],["application/vnd.palm","pdb"],["application/vnd.pawaafile","paw"],["application/vnd.pg.format","str"],["application/vnd.pg.osasli","ei6"],["application/vnd.picsel","efif"],["application/vnd.pmi.widget","wg"],["application/vnd.pocketlearn","plf"],["application/vnd.powerbuilder6","pbd"],["application/vnd.previewsystems.box","box"],["application/vnd.proteus.magazine","mgz"],["application/vnd.publishare-delta-tree","qps"],["application/vnd.pvi.ptid1","ptid"],["application/vnd.quark.quarkxpress","qxd"],["application/vnd.realvnc.bed","bed"],["application/vnd.recordare.musicxml","mxl"],["application/vnd.recordare.musicxml+xml","musicxml"],["application/vnd.rig.cryptonote","cryptonote"],["application/vnd.rim.cod","cod"],["application/vnd.rn-realmedia","rm"],["application/vnd.rn-realplayer","rnx"],["application/vnd.route66.link66+xml","link66"],["application/vnd.sailingtracker.track","st"],["application/vnd.seemail","see"],["application/vnd.sema","sema"],["application/vnd.semd","semd"],["application/vnd.semf","semf"],["application/vnd.shana.informed.formdata","ifm"],["application/vnd.shana.informed.formtemplate","itp"],["application/vnd.shana.informed.interchange","iif"],["application/vnd.shana.informed.package","ipk"],["application/vnd.simtech-mindmapper","twd"],["application/vnd.smaf","mmf"],["application/vnd.smart.teacher","teacher"],["application/vnd.solent.sdkm+xml","sdkm"],["application/vnd.spotfire.dxp","dxp"],["application/vnd.spotfire.sfs","sfs"],["application/vnd.stardivision.calc","sdc"],["application/vnd.stardivision.draw","sda"],["application/vnd.stardivision.impress","sdd"],["application/vnd.stardivision.math","smf"],["application/vnd.stardivision.writer","sdw"],["application/vnd.stardivision.writer-global","sgl"],["application/vnd.stepmania.stepchart","sm"],["application/vnd.sun.xml.calc","sxc"],["application/vnd.sun.xml.calc.template","stc"],["application/vnd.sun.xml.draw","sxd"],["application/vnd.sun.xml.draw.template","std"],["application/vnd.sun.xml.impress","sxi"],["application/vnd.sun.xml.impress.template","sti"],["application/vnd.sun.xml.math","sxm"],["application/vnd.sun.xml.writer","sxw"],["application/vnd.sun.xml.writer.global","sxg"],["application/vnd.sun.xml.writer.template","stw"],["application/vnd.sus-calendar","sus"],["application/vnd.svd","svd"],["application/vnd.symbian.install","sis"],["application/vnd.syncml+xml","xsm"],["application/vnd.syncml.dm+wbxml","bdm"],["application/vnd.syncml.dm+xml","xdm"],["application/vnd.tao.intent-module-archive","tao"],["application/vnd.tmobile-livetv","tmo"],["application/vnd.trid.tpt","tpt"],["application/vnd.triscape.mxs","mxs"],["application/vnd.trueapp","tra"],["application/vnd.ufdl","ufd"],["application/vnd.uiq.theme","utz"],["application/vnd.umajin","umj"],["application/vnd.unity","unityweb"],["application/vnd.uoml+xml","uoml"],["application/vnd.vcx","vcx"],["application/vnd.visio","vsd"],["application/vnd.visionary","vis"],["application/vnd.vsf","vsf"],["application/vnd.wap.wbxml","wbxml"],["application/vnd.wap.wmlc","wmlc"],["application/vnd.wap.wmlscriptc","wmlsc"],["application/vnd.webturbo","wtb"],["application/vnd.wolfram.player","nbp"],["application/vnd.wordperfect","wpd"],["application/vnd.wqd","wqd"],["application/vnd.wt.stf","stf"],["application/vnd.xara",["web","xar"]],["application/vnd.xfdl","xfdl"],["application/vnd.yamaha.hv-dic","hvd"],["application/vnd.yamaha.hv-script","hvs"],["application/vnd.yamaha.hv-voice","hvp"],["application/vnd.yamaha.openscoreformat","osf"],["application/vnd.yamaha.openscoreformat.osfpvg+xml","osfpvg"],["application/vnd.yamaha.smaf-audio","saf"],["application/vnd.yamaha.smaf-phrase","spf"],["application/vnd.yellowriver-custom-menu","cmp"],["application/vnd.zul","zir"],["application/vnd.zzazz.deck+xml","zaz"],["application/vocaltec-media-desc","vmd"],["application/vocaltec-media-file","vmf"],["application/voicexml+xml","vxml"],["application/widget","wgt"],["application/winhlp","hlp"],["application/wordperfect",["wp","wp5","wp6","wpd"]],["application/wordperfect6.0",["w60","wp5"]],["application/wordperfect6.1","w61"],["application/wsdl+xml","wsdl"],["application/wspolicy+xml","wspolicy"],["application/x-123","wk1"],["application/x-7z-compressed","7z"],["application/x-abiword","abw"],["application/x-ace-compressed","ace"],["application/x-aim","aim"],["application/x-authorware-bin","aab"],["application/x-authorware-map","aam"],["application/x-authorware-seg","aas"],["application/x-bcpio","bcpio"],["application/x-binary","bin"],["application/x-binhex40","hqx"],["application/x-bittorrent","torrent"],["application/x-bsh",["bsh","sh","shar"]],["application/x-bytecode.elisp","elc"],["application/x-bytecode.python","pyc"],["application/x-bzip","bz"],["application/x-bzip2",["boz","bz2"]],["application/x-cdf","cdf"],["application/x-cdlink","vcd"],["application/x-chat",["cha","chat"]],["application/x-chess-pgn","pgn"],["application/x-cmu-raster","ras"],["application/x-cocoa","cco"],["application/x-compactpro","cpt"],["application/x-compress","z"],["application/x-compressed",["tgz","gz","z","zip"]],["application/x-conference","nsc"],["application/x-cpio","cpio"],["application/x-cpt","cpt"],["application/x-csh","csh"],["application/x-debian-package","deb"],["application/x-deepv","deepv"],["application/x-director",["dir","dcr","dxr"]],["application/x-doom","wad"],["application/x-dtbncx+xml","ncx"],["application/x-dtbook+xml","dtb"],["application/x-dtbresource+xml","res"],["application/x-dvi","dvi"],["application/x-elc","elc"],["application/x-envoy",["env","evy"]],["application/x-esrehber","es"],["application/x-excel",["xls","xla","xlb","xlc","xld","xlk","xll","xlm","xlt","xlv","xlw"]],["application/x-font-bdf","bdf"],["application/x-font-ghostscript","gsf"],["application/x-font-linux-psf","psf"],["application/x-font-otf","otf"],["application/x-font-pcf","pcf"],["application/x-font-snf","snf"],["application/x-font-ttf","ttf"],["application/x-font-type1","pfa"],["application/x-font-woff","woff"],["application/x-frame","mif"],["application/x-freelance","pre"],["application/x-futuresplash","spl"],["application/x-gnumeric","gnumeric"],["application/x-gsp","gsp"],["application/x-gss","gss"],["application/x-gtar","gtar"],["application/x-gzip",["gz","gzip"]],["application/x-hdf","hdf"],["application/x-helpfile",["help","hlp"]],["application/x-httpd-imap","imap"],["application/x-ima","ima"],["application/x-internet-signup",["ins","isp"]],["application/x-internett-signup","ins"],["application/x-inventor","iv"],["application/x-ip2","ip"],["application/x-iphone","iii"],["application/x-java-class","class"],["application/x-java-commerce","jcm"],["application/x-java-jnlp-file","jnlp"],["application/x-javascript","js"],["application/x-koan",["skd","skm","skp","skt"]],["application/x-ksh","ksh"],["application/x-latex",["latex","ltx"]],["application/x-lha","lha"],["application/x-lisp","lsp"],["application/x-livescreen","ivy"],["application/x-lotus","wq1"],["application/x-lotusscreencam","scm"],["application/x-lzh","lzh"],["application/x-lzx","lzx"],["application/x-mac-binhex40","hqx"],["application/x-macbinary","bin"],["application/x-magic-cap-package-1.0","mc$"],["application/x-mathcad","mcd"],["application/x-meme","mm"],["application/x-midi",["mid","midi"]],["application/x-mif","mif"],["application/x-mix-transfer","nix"],["application/x-mobipocket-ebook","prc"],["application/x-mplayer2","asx"],["application/x-ms-application","application"],["application/x-ms-wmd","wmd"],["application/x-ms-wmz","wmz"],["application/x-ms-xbap","xbap"],["application/x-msaccess","mdb"],["application/x-msbinder","obd"],["application/x-mscardfile","crd"],["application/x-msclip","clp"],["application/x-msdownload",["exe","dll"]],["application/x-msexcel",["xls","xla","xlw"]],["application/x-msmediaview",["mvb","m13","m14"]],["application/x-msmetafile","wmf"],["application/x-msmoney","mny"],["application/x-mspowerpoint","ppt"],["application/x-mspublisher","pub"],["application/x-msschedule","scd"],["application/x-msterminal","trm"],["application/x-mswrite","wri"],["application/x-navi-animation","ani"],["application/x-navidoc","nvd"],["application/x-navimap","map"],["application/x-navistyle","stl"],["application/x-netcdf",["cdf","nc"]],["application/x-newton-compatible-pkg","pkg"],["application/x-nokia-9000-communicator-add-on-software","aos"],["application/x-omc","omc"],["application/x-omcdatamaker","omcd"],["application/x-omcregerator","omcr"],["application/x-pagemaker",["pm4","pm5"]],["application/x-pcl","pcl"],["application/x-perfmon",["pma","pmc","pml","pmr","pmw"]],["application/x-pixclscript","plx"],["application/x-pkcs10","p10"],["application/x-pkcs12",["p12","pfx"]],["application/x-pkcs7-certificates",["p7b","spc"]],["application/x-pkcs7-certreqresp","p7r"],["application/x-pkcs7-mime",["p7m","p7c"]],["application/x-pkcs7-signature",["p7s","p7a"]],["application/x-pointplus","css"],["application/x-portable-anymap","pnm"],["application/x-project",["mpc","mpt","mpv","mpx"]],["application/x-qpro","wb1"],["application/x-rar-compressed","rar"],["application/x-rtf","rtf"],["application/x-sdp","sdp"],["application/x-sea","sea"],["application/x-seelogo","sl"],["application/x-sh","sh"],["application/x-shar",["shar","sh"]],["application/x-shockwave-flash","swf"],["application/x-silverlight-app","xap"],["application/x-sit","sit"],["application/x-sprite",["spr","sprite"]],["application/x-stuffit","sit"],["application/x-stuffitx","sitx"],["application/x-sv4cpio","sv4cpio"],["application/x-sv4crc","sv4crc"],["application/x-tar","tar"],["application/x-tbook",["sbk","tbk"]],["application/x-tcl","tcl"],["application/x-tex","tex"],["application/x-tex-tfm","tfm"],["application/x-texinfo",["texi","texinfo"]],["application/x-troff",["roff","t","tr"]],["application/x-troff-man","man"],["application/x-troff-me","me"],["application/x-troff-ms","ms"],["application/x-troff-msvideo","avi"],["application/x-ustar","ustar"],["application/x-visio",["vsd","vst","vsw"]],["application/x-vnd.audioexplosion.mzz","mzz"],["application/x-vnd.ls-xpix","xpix"],["application/x-vrml","vrml"],["application/x-wais-source",["src","wsrc"]],["application/x-winhelp","hlp"],["application/x-wintalk","wtk"],["application/x-world",["wrl","svr"]],["application/x-wpwin","wpd"],["application/x-wri","wri"],["application/x-x509-ca-cert",["cer","crt","der"]],["application/x-x509-user-cert","crt"],["application/x-xfig","fig"],["application/x-xpinstall","xpi"],["application/x-zip-compressed","zip"],["application/xcap-diff+xml","xdf"],["application/xenc+xml","xenc"],["application/xhtml+xml","xhtml"],["application/xml","xml"],["application/xml-dtd","dtd"],["application/xop+xml","xop"],["application/xslt+xml","xslt"],["application/xspf+xml","xspf"],["application/xv+xml","mxml"],["application/yang","yang"],["application/yin+xml","yin"],["application/ynd.ms-pkipko","pko"],["application/zip","zip"],["audio/adpcm","adp"],["audio/aiff",["aiff","aif","aifc"]],["audio/basic",["snd","au"]],["audio/it","it"],["audio/make",["funk","my","pfunk"]],["audio/make.my.funk","pfunk"],["audio/mid",["mid","rmi"]],["audio/midi",["midi","kar","mid"]],["audio/mod","mod"],["audio/mp4","mp4a"],["audio/mpeg",["mpga","mp3","m2a","mp2","mpa","mpg"]],["audio/mpeg3","mp3"],["audio/nspaudio",["la","lma"]],["audio/ogg","oga"],["audio/s3m","s3m"],["audio/tsp-audio","tsi"],["audio/tsplayer","tsp"],["audio/vnd.dece.audio","uva"],["audio/vnd.digital-winds","eol"],["audio/vnd.dra","dra"],["audio/vnd.dts","dts"],["audio/vnd.dts.hd","dtshd"],["audio/vnd.lucent.voice","lvp"],["audio/vnd.ms-playready.media.pya","pya"],["audio/vnd.nuera.ecelp4800","ecelp4800"],["audio/vnd.nuera.ecelp7470","ecelp7470"],["audio/vnd.nuera.ecelp9600","ecelp9600"],["audio/vnd.qcelp","qcp"],["audio/vnd.rip","rip"],["audio/voc","voc"],["audio/voxware","vox"],["audio/wav","wav"],["audio/webm","weba"],["audio/x-aac","aac"],["audio/x-adpcm","snd"],["audio/x-aiff",["aiff","aif","aifc"]],["audio/x-au","au"],["audio/x-gsm",["gsd","gsm"]],["audio/x-jam","jam"],["audio/x-liveaudio","lam"],["audio/x-mid",["mid","midi"]],["audio/x-midi",["midi","mid"]],["audio/x-mod","mod"],["audio/x-mpeg","mp2"],["audio/x-mpeg-3","mp3"],["audio/x-mpegurl","m3u"],["audio/x-mpequrl","m3u"],["audio/x-ms-wax","wax"],["audio/x-ms-wma","wma"],["audio/x-nspaudio",["la","lma"]],["audio/x-pn-realaudio",["ra","ram","rm","rmm","rmp"]],["audio/x-pn-realaudio-plugin",["ra","rmp","rpm"]],["audio/x-psid","sid"],["audio/x-realaudio","ra"],["audio/x-twinvq","vqf"],["audio/x-twinvq-plugin",["vqe","vql"]],["audio/x-vnd.audioexplosion.mjuicemediafile","mjf"],["audio/x-voc","voc"],["audio/x-wav","wav"],["audio/xm","xm"],["chemical/x-cdx","cdx"],["chemical/x-cif","cif"],["chemical/x-cmdf","cmdf"],["chemical/x-cml","cml"],["chemical/x-csml","csml"],["chemical/x-pdb",["pdb","xyz"]],["chemical/x-xyz","xyz"],["drawing/x-dwf","dwf"],["i-world/i-vrml","ivr"],["image/bmp",["bmp","bm"]],["image/cgm","cgm"],["image/cis-cod","cod"],["image/cmu-raster",["ras","rast"]],["image/fif","fif"],["image/florian",["flo","turbot"]],["image/g3fax","g3"],["image/gif","gif"],["image/ief",["ief","iefs"]],["image/jpeg",["jpeg","jpe","jpg","jfif","jfif-tbnl"]],["image/jutvision","jut"],["image/ktx","ktx"],["image/naplps",["nap","naplps"]],["image/pict",["pic","pict"]],["image/pipeg","jfif"],["image/pjpeg",["jfif","jpe","jpeg","jpg"]],["image/png",["png","x-png"]],["image/prs.btif","btif"],["image/svg+xml","svg"],["image/tiff",["tif","tiff"]],["image/vasa","mcf"],["image/vnd.adobe.photoshop","psd"],["image/vnd.dece.graphic","uvi"],["image/vnd.djvu","djvu"],["image/vnd.dvb.subtitle","sub"],["image/vnd.dwg",["dwg","dxf","svf"]],["image/vnd.dxf","dxf"],["image/vnd.fastbidsheet","fbs"],["image/vnd.fpx","fpx"],["image/vnd.fst","fst"],["image/vnd.fujixerox.edmics-mmr","mmr"],["image/vnd.fujixerox.edmics-rlc","rlc"],["image/vnd.ms-modi","mdi"],["image/vnd.net-fpx",["fpx","npx"]],["image/vnd.rn-realflash","rf"],["image/vnd.rn-realpix","rp"],["image/vnd.wap.wbmp","wbmp"],["image/vnd.xiff","xif"],["image/webp","webp"],["image/x-cmu-raster","ras"],["image/x-cmx","cmx"],["image/x-dwg",["dwg","dxf","svf"]],["image/x-freehand","fh"],["image/x-icon","ico"],["image/x-jg","art"],["image/x-jps","jps"],["image/x-niff",["niff","nif"]],["image/x-pcx","pcx"],["image/x-pict",["pct","pic"]],["image/x-portable-anymap","pnm"],["image/x-portable-bitmap","pbm"],["image/x-portable-graymap","pgm"],["image/x-portable-greymap","pgm"],["image/x-portable-pixmap","ppm"],["image/x-quicktime",["qif","qti","qtif"]],["image/x-rgb","rgb"],["image/x-tiff",["tif","tiff"]],["image/x-windows-bmp","bmp"],["image/x-xbitmap","xbm"],["image/x-xbm","xbm"],["image/x-xpixmap",["xpm","pm"]],["image/x-xwd","xwd"],["image/x-xwindowdump","xwd"],["image/xbm","xbm"],["image/xpm","xpm"],["message/rfc822",["eml","mht","mhtml","nws","mime"]],["model/iges",["iges","igs"]],["model/mesh","msh"],["model/vnd.collada+xml","dae"],["model/vnd.dwf","dwf"],["model/vnd.gdl","gdl"],["model/vnd.gtw","gtw"],["model/vnd.mts","mts"],["model/vnd.vtu","vtu"],["model/vrml",["vrml","wrl","wrz"]],["model/x-pov","pov"],["multipart/x-gzip","gzip"],["multipart/x-ustar","ustar"],["multipart/x-zip","zip"],["music/crescendo",["mid","midi"]],["music/x-karaoke","kar"],["paleovu/x-pv","pvu"],["text/asp","asp"],["text/calendar","ics"],["text/css","css"],["text/csv","csv"],["text/ecmascript","js"],["text/h323","323"],["text/html",["html","htm","stm","acgi","htmls","htx","shtml"]],["text/iuls","uls"],["text/javascript","js"],["text/mcf","mcf"],["text/n3","n3"],["text/pascal","pas"],["text/plain",["txt","bas","c","h","c++","cc","com","conf","cxx","def","f","f90","for","g","hh","idc","jav","java","list","log","lst","m","mar","pl","sdml","text"]],["text/plain-bas","par"],["text/prs.lines.tag","dsc"],["text/richtext",["rtx","rt","rtf"]],["text/scriplet","wsc"],["text/scriptlet","sct"],["text/sgml",["sgm","sgml"]],["text/tab-separated-values","tsv"],["text/troff","t"],["text/turtle","ttl"],["text/uri-list",["uni","unis","uri","uris"]],["text/vnd.abc","abc"],["text/vnd.curl","curl"],["text/vnd.curl.dcurl","dcurl"],["text/vnd.curl.mcurl","mcurl"],["text/vnd.curl.scurl","scurl"],["text/vnd.fly","fly"],["text/vnd.fmi.flexstor","flx"],["text/vnd.graphviz","gv"],["text/vnd.in3d.3dml","3dml"],["text/vnd.in3d.spot","spot"],["text/vnd.rn-realtext","rt"],["text/vnd.sun.j2me.app-descriptor","jad"],["text/vnd.wap.wml","wml"],["text/vnd.wap.wmlscript","wmls"],["text/webviewhtml","htt"],["text/x-asm",["asm","s"]],["text/x-audiosoft-intra","aip"],["text/x-c",["c","cc","cpp"]],["text/x-component","htc"],["text/x-fortran",["for","f","f77","f90"]],["text/x-h",["h","hh"]],["text/x-java-source",["java","jav"]],["text/x-java-source,java","java"],["text/x-la-asf","lsx"],["text/x-m","m"],["text/x-pascal","p"],["text/x-script","hlb"],["text/x-script.csh","csh"],["text/x-script.elisp","el"],["text/x-script.guile","scm"],["text/x-script.ksh","ksh"],["text/x-script.lisp","lsp"],["text/x-script.perl","pl"],["text/x-script.perl-module","pm"],["text/x-script.phyton","py"],["text/x-script.rexx","rexx"],["text/x-script.scheme","scm"],["text/x-script.sh","sh"],["text/x-script.tcl","tcl"],["text/x-script.tcsh","tcsh"],["text/x-script.zsh","zsh"],["text/x-server-parsed-html",["shtml","ssi"]],["text/x-setext","etx"],["text/x-sgml",["sgm","sgml"]],["text/x-speech",["spc","talk"]],["text/x-uil","uil"],["text/x-uuencode",["uu","uue"]],["text/x-vcalendar","vcs"],["text/x-vcard","vcf"],["text/xml","xml"],["video/3gpp","3gp"],["video/3gpp2","3g2"],["video/animaflex","afl"],["video/avi","avi"],["video/avs-video","avs"],["video/dl","dl"],["video/fli","fli"],["video/gl","gl"],["video/h261","h261"],["video/h263","h263"],["video/h264","h264"],["video/jpeg","jpgv"],["video/jpm","jpm"],["video/mj2","mj2"],["video/mp4","mp4"],["video/mpeg",["mpeg","mp2","mpa","mpe","mpg","mpv2","m1v","m2v","mp3"]],["video/msvideo","avi"],["video/ogg","ogv"],["video/quicktime",["mov","qt","moov"]],["video/vdo","vdo"],["video/vivo",["viv","vivo"]],["video/vnd.dece.hd","uvh"],["video/vnd.dece.mobile","uvm"],["video/vnd.dece.pd","uvp"],["video/vnd.dece.sd","uvs"],["video/vnd.dece.video","uvv"],["video/vnd.fvt","fvt"],["video/vnd.mpegurl","mxu"],["video/vnd.ms-playready.media.pyv","pyv"],["video/vnd.rn-realvideo","rv"],["video/vnd.uvvu.mp4","uvu"],["video/vnd.vivo",["viv","vivo"]],["video/vosaic","vos"],["video/webm","webm"],["video/x-amt-demorun","xdr"],["video/x-amt-showrun","xsr"],["video/x-atomic3d-feature","fmf"],["video/x-dl","dl"],["video/x-dv",["dif","dv"]],["video/x-f4v","f4v"],["video/x-fli","fli"],["video/x-flv","flv"],["video/x-gl","gl"],["video/x-isvideo","isu"],["video/x-la-asf",["lsf","lsx"]],["video/x-m4v","m4v"],["video/x-motion-jpeg","mjpg"],["video/x-mpeg",["mp3","mp2"]],["video/x-mpeq2a","mp2"],["video/x-ms-asf",["asf","asr","asx"]],["video/x-ms-asf-plugin","asx"],["video/x-ms-wm","wm"],["video/x-ms-wmv","wmv"],["video/x-ms-wmx","wmx"],["video/x-ms-wvx","wvx"],["video/x-msvideo","avi"],["video/x-qtc","qtc"],["video/x-scm","scm"],["video/x-sgi-movie",["movie","mv"]],["windows/metafile","wmf"],["www/mime","mime"],["x-conference/x-cooltalk","ice"],["x-music/x-midi",["mid","midi"]],["x-world/x-3dmf",["3dm","3dmf","qd3","qd3d"]],["x-world/x-svr","svr"],["x-world/x-vrml",["flr","vrml","wrl","wrz","xaf","xof"]],["x-world/x-vrt","vrt"],["xgl/drawing","xgz"],["xgl/movie","xmz"]]),qY=new Map([["123","application/vnd.lotus-1-2-3"],["323","text/h323"],["*","application/octet-stream"],["3dm","x-world/x-3dmf"],["3dmf","x-world/x-3dmf"],["3dml","text/vnd.in3d.3dml"],["3g2","video/3gpp2"],["3gp","video/3gpp"],["7z","application/x-7z-compressed"],["a","application/octet-stream"],["aab","application/x-authorware-bin"],["aac","audio/x-aac"],["aam","application/x-authorware-map"],["aas","application/x-authorware-seg"],["abc","text/vnd.abc"],["abw","application/x-abiword"],["ac","application/pkix-attr-cert"],["acc","application/vnd.americandynamics.acc"],["ace","application/x-ace-compressed"],["acgi","text/html"],["acu","application/vnd.acucobol"],["acx","application/internet-property-stream"],["adp","audio/adpcm"],["aep","application/vnd.audiograph"],["afl","video/animaflex"],["afp","application/vnd.ibm.modcap"],["ahead","application/vnd.ahead.space"],["ai","application/postscript"],["aif",["audio/aiff","audio/x-aiff"]],["aifc",["audio/aiff","audio/x-aiff"]],["aiff",["audio/aiff","audio/x-aiff"]],["aim","application/x-aim"],["aip","text/x-audiosoft-intra"],["air","application/vnd.adobe.air-application-installer-package+zip"],["ait","application/vnd.dvb.ait"],["ami","application/vnd.amiga.ami"],["ani","application/x-navi-animation"],["aos","application/x-nokia-9000-communicator-add-on-software"],["apk","application/vnd.android.package-archive"],["application","application/x-ms-application"],["apr","application/vnd.lotus-approach"],["aps","application/mime"],["arc","application/octet-stream"],["arj",["application/arj","application/octet-stream"]],["art","image/x-jg"],["asf","video/x-ms-asf"],["asm","text/x-asm"],["aso","application/vnd.accpac.simply.aso"],["asp","text/asp"],["asr","video/x-ms-asf"],["asx",["video/x-ms-asf","application/x-mplayer2","video/x-ms-asf-plugin"]],["atc","application/vnd.acucorp"],["atomcat","application/atomcat+xml"],["atomsvc","application/atomsvc+xml"],["atx","application/vnd.antix.game-component"],["au",["audio/basic","audio/x-au"]],["avi",["video/avi","video/msvideo","application/x-troff-msvideo","video/x-msvideo"]],["avs","video/avs-video"],["aw","application/applixware"],["axs","application/olescript"],["azf","application/vnd.airzip.filesecure.azf"],["azs","application/vnd.airzip.filesecure.azs"],["azw","application/vnd.amazon.ebook"],["bas","text/plain"],["bcpio","application/x-bcpio"],["bdf","application/x-font-bdf"],["bdm","application/vnd.syncml.dm+wbxml"],["bed","application/vnd.realvnc.bed"],["bh2","application/vnd.fujitsu.oasysprs"],["bin",["application/octet-stream","application/mac-binary","application/macbinary","application/x-macbinary","application/x-binary"]],["bm","image/bmp"],["bmi","application/vnd.bmi"],["bmp",["image/bmp","image/x-windows-bmp"]],["boo","application/book"],["book","application/book"],["box","application/vnd.previewsystems.box"],["boz","application/x-bzip2"],["bsh","application/x-bsh"],["btif","image/prs.btif"],["bz","application/x-bzip"],["bz2","application/x-bzip2"],["c",["text/plain","text/x-c"]],["c++","text/plain"],["c11amc","application/vnd.cluetrust.cartomobile-config"],["c11amz","application/vnd.cluetrust.cartomobile-config-pkg"],["c4g","application/vnd.clonk.c4group"],["cab","application/vnd.ms-cab-compressed"],["car","application/vnd.curl.car"],["cat",["application/vnd.ms-pkiseccat","application/vnd.ms-pki.seccat"]],["cc",["text/plain","text/x-c"]],["ccad","application/clariscad"],["cco","application/x-cocoa"],["ccxml","application/ccxml+xml,"],["cdbcmsg","application/vnd.contact.cmsg"],["cdf",["application/cdf","application/x-cdf","application/x-netcdf"]],["cdkey","application/vnd.mediastation.cdkey"],["cdmia","application/cdmi-capability"],["cdmic","application/cdmi-container"],["cdmid","application/cdmi-domain"],["cdmio","application/cdmi-object"],["cdmiq","application/cdmi-queue"],["cdx","chemical/x-cdx"],["cdxml","application/vnd.chemdraw+xml"],["cdy","application/vnd.cinderella"],["cer",["application/pkix-cert","application/x-x509-ca-cert"]],["cgm","image/cgm"],["cha","application/x-chat"],["chat","application/x-chat"],["chm","application/vnd.ms-htmlhelp"],["chrt","application/vnd.kde.kchart"],["cif","chemical/x-cif"],["cii","application/vnd.anser-web-certificate-issue-initiation"],["cil","application/vnd.ms-artgalry"],["cla","application/vnd.claymore"],["class",["application/octet-stream","application/java","application/java-byte-code","application/java-vm","application/x-java-class"]],["clkk","application/vnd.crick.clicker.keyboard"],["clkp","application/vnd.crick.clicker.palette"],["clkt","application/vnd.crick.clicker.template"],["clkw","application/vnd.crick.clicker.wordbank"],["clkx","application/vnd.crick.clicker"],["clp","application/x-msclip"],["cmc","application/vnd.cosmocaller"],["cmdf","chemical/x-cmdf"],["cml","chemical/x-cml"],["cmp","application/vnd.yellowriver-custom-menu"],["cmx","image/x-cmx"],["cod",["image/cis-cod","application/vnd.rim.cod"]],["com",["application/octet-stream","text/plain"]],["conf","text/plain"],["cpio","application/x-cpio"],["cpp","text/x-c"],["cpt",["application/mac-compactpro","application/x-compactpro","application/x-cpt"]],["crd","application/x-mscardfile"],["crl",["application/pkix-crl","application/pkcs-crl"]],["crt",["application/pkix-cert","application/x-x509-user-cert","application/x-x509-ca-cert"]],["cryptonote","application/vnd.rig.cryptonote"],["csh",["text/x-script.csh","application/x-csh"]],["csml","chemical/x-csml"],["csp","application/vnd.commonspace"],["css",["text/css","application/x-pointplus"]],["csv","text/csv"],["cu","application/cu-seeme"],["curl","text/vnd.curl"],["cww","application/prs.cww"],["cxx","text/plain"],["dae","model/vnd.collada+xml"],["daf","application/vnd.mobius.daf"],["davmount","application/davmount+xml"],["dcr","application/x-director"],["dcurl","text/vnd.curl.dcurl"],["dd2","application/vnd.oma.dd2+xml"],["ddd","application/vnd.fujixerox.ddd"],["deb","application/x-debian-package"],["deepv","application/x-deepv"],["def","text/plain"],["der","application/x-x509-ca-cert"],["dfac","application/vnd.dreamfactory"],["dif","video/x-dv"],["dir","application/x-director"],["dis","application/vnd.mobius.dis"],["djvu","image/vnd.djvu"],["dl",["video/dl","video/x-dl"]],["dll","application/x-msdownload"],["dms","application/octet-stream"],["dna","application/vnd.dna"],["doc","application/msword"],["docm","application/vnd.ms-word.document.macroenabled.12"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["dot","application/msword"],["dotm","application/vnd.ms-word.template.macroenabled.12"],["dotx","application/vnd.openxmlformats-officedocument.wordprocessingml.template"],["dp",["application/commonground","application/vnd.osgi.dp"]],["dpg","application/vnd.dpgraph"],["dra","audio/vnd.dra"],["drw","application/drafting"],["dsc","text/prs.lines.tag"],["dssc","application/dssc+der"],["dtb","application/x-dtbook+xml"],["dtd","application/xml-dtd"],["dts","audio/vnd.dts"],["dtshd","audio/vnd.dts.hd"],["dump","application/octet-stream"],["dv","video/x-dv"],["dvi","application/x-dvi"],["dwf",["model/vnd.dwf","drawing/x-dwf"]],["dwg",["application/acad","image/vnd.dwg","image/x-dwg"]],["dxf",["application/dxf","image/vnd.dwg","image/vnd.dxf","image/x-dwg"]],["dxp","application/vnd.spotfire.dxp"],["dxr","application/x-director"],["ecelp4800","audio/vnd.nuera.ecelp4800"],["ecelp7470","audio/vnd.nuera.ecelp7470"],["ecelp9600","audio/vnd.nuera.ecelp9600"],["edm","application/vnd.novadigm.edm"],["edx","application/vnd.novadigm.edx"],["efif","application/vnd.picsel"],["ei6","application/vnd.pg.osasli"],["el","text/x-script.elisp"],["elc",["application/x-elc","application/x-bytecode.elisp"]],["eml","message/rfc822"],["emma","application/emma+xml"],["env","application/x-envoy"],["eol","audio/vnd.digital-winds"],["eot","application/vnd.ms-fontobject"],["eps","application/postscript"],["epub","application/epub+zip"],["es",["application/ecmascript","application/x-esrehber"]],["es3","application/vnd.eszigno3+xml"],["esf","application/vnd.epson.esf"],["etx","text/x-setext"],["evy",["application/envoy","application/x-envoy"]],["exe",["application/octet-stream","application/x-msdownload"]],["exi","application/exi"],["ext","application/vnd.novadigm.ext"],["ez2","application/vnd.ezpix-album"],["ez3","application/vnd.ezpix-package"],["f",["text/plain","text/x-fortran"]],["f4v","video/x-f4v"],["f77","text/x-fortran"],["f90",["text/plain","text/x-fortran"]],["fbs","image/vnd.fastbidsheet"],["fcs","application/vnd.isac.fcs"],["fdf","application/vnd.fdf"],["fe_launch","application/vnd.denovo.fcselayout-link"],["fg5","application/vnd.fujitsu.oasysgp"],["fh","image/x-freehand"],["fif",["application/fractals","image/fif"]],["fig","application/x-xfig"],["fli",["video/fli","video/x-fli"]],["flo",["image/florian","application/vnd.micrografx.flo"]],["flr","x-world/x-vrml"],["flv","video/x-flv"],["flw","application/vnd.kde.kivio"],["flx","text/vnd.fmi.flexstor"],["fly","text/vnd.fly"],["fm","application/vnd.framemaker"],["fmf","video/x-atomic3d-feature"],["fnc","application/vnd.frogans.fnc"],["for",["text/plain","text/x-fortran"]],["fpx",["image/vnd.fpx","image/vnd.net-fpx"]],["frl","application/freeloader"],["fsc","application/vnd.fsc.weblaunch"],["fst","image/vnd.fst"],["ftc","application/vnd.fluxtime.clip"],["fti","application/vnd.anser-web-funds-transfer-initiation"],["funk","audio/make"],["fvt","video/vnd.fvt"],["fxp","application/vnd.adobe.fxp"],["fzs","application/vnd.fuzzysheet"],["g","text/plain"],["g2w","application/vnd.geoplan"],["g3","image/g3fax"],["g3w","application/vnd.geospace"],["gac","application/vnd.groove-account"],["gdl","model/vnd.gdl"],["geo","application/vnd.dynageo"],["gex","application/vnd.geometry-explorer"],["ggb","application/vnd.geogebra.file"],["ggt","application/vnd.geogebra.tool"],["ghf","application/vnd.groove-help"],["gif","image/gif"],["gim","application/vnd.groove-identity-message"],["gl",["video/gl","video/x-gl"]],["gmx","application/vnd.gmx"],["gnumeric","application/x-gnumeric"],["gph","application/vnd.flographit"],["gqf","application/vnd.grafeq"],["gram","application/srgs"],["grv","application/vnd.groove-injector"],["grxml","application/srgs+xml"],["gsd","audio/x-gsm"],["gsf","application/x-font-ghostscript"],["gsm","audio/x-gsm"],["gsp","application/x-gsp"],["gss","application/x-gss"],["gtar","application/x-gtar"],["gtm","application/vnd.groove-tool-message"],["gtw","model/vnd.gtw"],["gv","text/vnd.graphviz"],["gxt","application/vnd.geonext"],["gz",["application/x-gzip","application/x-compressed"]],["gzip",["multipart/x-gzip","application/x-gzip"]],["h",["text/plain","text/x-h"]],["h261","video/h261"],["h263","video/h263"],["h264","video/h264"],["hal","application/vnd.hal+xml"],["hbci","application/vnd.hbci"],["hdf","application/x-hdf"],["help","application/x-helpfile"],["hgl","application/vnd.hp-hpgl"],["hh",["text/plain","text/x-h"]],["hlb","text/x-script"],["hlp",["application/winhlp","application/hlp","application/x-helpfile","application/x-winhelp"]],["hpg","application/vnd.hp-hpgl"],["hpgl","application/vnd.hp-hpgl"],["hpid","application/vnd.hp-hpid"],["hps","application/vnd.hp-hps"],["hqx",["application/mac-binhex40","application/binhex","application/binhex4","application/mac-binhex","application/x-binhex40","application/x-mac-binhex40"]],["hta","application/hta"],["htc","text/x-component"],["htke","application/vnd.kenameaapp"],["htm","text/html"],["html","text/html"],["htmls","text/html"],["htt","text/webviewhtml"],["htx","text/html"],["hvd","application/vnd.yamaha.hv-dic"],["hvp","application/vnd.yamaha.hv-voice"],["hvs","application/vnd.yamaha.hv-script"],["i2g","application/vnd.intergeo"],["icc","application/vnd.iccprofile"],["ice","x-conference/x-cooltalk"],["ico","image/x-icon"],["ics","text/calendar"],["idc","text/plain"],["ief","image/ief"],["iefs","image/ief"],["ifm","application/vnd.shana.informed.formdata"],["iges",["application/iges","model/iges"]],["igl","application/vnd.igloader"],["igm","application/vnd.insors.igm"],["igs",["application/iges","model/iges"]],["igx","application/vnd.micrografx.igx"],["iif","application/vnd.shana.informed.interchange"],["iii","application/x-iphone"],["ima","application/x-ima"],["imap","application/x-httpd-imap"],["imp","application/vnd.accpac.simply.imp"],["ims","application/vnd.ms-ims"],["inf","application/inf"],["ins",["application/x-internet-signup","application/x-internett-signup"]],["ip","application/x-ip2"],["ipfix","application/ipfix"],["ipk","application/vnd.shana.informed.package"],["irm","application/vnd.ibm.rights-management"],["irp","application/vnd.irepository.package+xml"],["isp","application/x-internet-signup"],["isu","video/x-isvideo"],["it","audio/it"],["itp","application/vnd.shana.informed.formtemplate"],["iv","application/x-inventor"],["ivp","application/vnd.immervision-ivp"],["ivr","i-world/i-vrml"],["ivu","application/vnd.immervision-ivu"],["ivy","application/x-livescreen"],["jad","text/vnd.sun.j2me.app-descriptor"],["jam",["application/vnd.jam","audio/x-jam"]],["jar","application/java-archive"],["jav",["text/plain","text/x-java-source"]],["java",["text/plain","text/x-java-source,java","text/x-java-source"]],["jcm","application/x-java-commerce"],["jfif",["image/pipeg","image/jpeg","image/pjpeg"]],["jfif-tbnl","image/jpeg"],["jisp","application/vnd.jisp"],["jlt","application/vnd.hp-jlyt"],["jnlp","application/x-java-jnlp-file"],["joda","application/vnd.joost.joda-archive"],["jpe",["image/jpeg","image/pjpeg"]],["jpeg",["image/jpeg","image/pjpeg"]],["jpg",["image/jpeg","image/pjpeg"]],["jpgv","video/jpeg"],["jpm","video/jpm"],["jps","image/x-jps"],["js",["application/javascript","application/ecmascript","text/javascript","text/ecmascript","application/x-javascript"]],["json","application/json"],["jut","image/jutvision"],["kar",["audio/midi","music/x-karaoke"]],["karbon","application/vnd.kde.karbon"],["kfo","application/vnd.kde.kformula"],["kia","application/vnd.kidspiration"],["kml","application/vnd.google-earth.kml+xml"],["kmz","application/vnd.google-earth.kmz"],["kne","application/vnd.kinar"],["kon","application/vnd.kde.kontour"],["kpr","application/vnd.kde.kpresenter"],["ksh",["application/x-ksh","text/x-script.ksh"]],["ksp","application/vnd.kde.kspread"],["ktx","image/ktx"],["ktz","application/vnd.kahootz"],["kwd","application/vnd.kde.kword"],["la",["audio/nspaudio","audio/x-nspaudio"]],["lam","audio/x-liveaudio"],["lasxml","application/vnd.las.las+xml"],["latex","application/x-latex"],["lbd","application/vnd.llamagraphics.life-balance.desktop"],["lbe","application/vnd.llamagraphics.life-balance.exchange+xml"],["les","application/vnd.hhe.lesson-player"],["lha",["application/octet-stream","application/lha","application/x-lha"]],["lhx","application/octet-stream"],["link66","application/vnd.route66.link66+xml"],["list","text/plain"],["lma",["audio/nspaudio","audio/x-nspaudio"]],["log","text/plain"],["lrm","application/vnd.ms-lrm"],["lsf","video/x-la-asf"],["lsp",["application/x-lisp","text/x-script.lisp"]],["lst","text/plain"],["lsx",["video/x-la-asf","text/x-la-asf"]],["ltf","application/vnd.frogans.ltf"],["ltx","application/x-latex"],["lvp","audio/vnd.lucent.voice"],["lwp","application/vnd.lotus-wordpro"],["lzh",["application/octet-stream","application/x-lzh"]],["lzx",["application/lzx","application/octet-stream","application/x-lzx"]],["m",["text/plain","text/x-m"]],["m13","application/x-msmediaview"],["m14","application/x-msmediaview"],["m1v","video/mpeg"],["m21","application/mp21"],["m2a","audio/mpeg"],["m2v","video/mpeg"],["m3u",["audio/x-mpegurl","audio/x-mpequrl"]],["m3u8","application/vnd.apple.mpegurl"],["m4v","video/x-m4v"],["ma","application/mathematica"],["mads","application/mads+xml"],["mag","application/vnd.ecowin.chart"],["man","application/x-troff-man"],["map","application/x-navimap"],["mar","text/plain"],["mathml","application/mathml+xml"],["mbd","application/mbedlet"],["mbk","application/vnd.mobius.mbk"],["mbox","application/mbox"],["mc$","application/x-magic-cap-package-1.0"],["mc1","application/vnd.medcalcdata"],["mcd",["application/mcad","application/vnd.mcd","application/x-mathcad"]],["mcf",["image/vasa","text/mcf"]],["mcp","application/netmc"],["mcurl","text/vnd.curl.mcurl"],["mdb","application/x-msaccess"],["mdi","image/vnd.ms-modi"],["me","application/x-troff-me"],["meta4","application/metalink4+xml"],["mets","application/mets+xml"],["mfm","application/vnd.mfmp"],["mgp","application/vnd.osgeo.mapguide.package"],["mgz","application/vnd.proteus.magazine"],["mht","message/rfc822"],["mhtml","message/rfc822"],["mid",["audio/mid","audio/midi","music/crescendo","x-music/x-midi","audio/x-midi","application/x-midi","audio/x-mid"]],["midi",["audio/midi","music/crescendo","x-music/x-midi","audio/x-midi","application/x-midi","audio/x-mid"]],["mif",["application/vnd.mif","application/x-mif","application/x-frame"]],["mime",["message/rfc822","www/mime"]],["mj2","video/mj2"],["mjf","audio/x-vnd.audioexplosion.mjuicemediafile"],["mjpg","video/x-motion-jpeg"],["mlp","application/vnd.dolby.mlp"],["mm",["application/base64","application/x-meme"]],["mmd","application/vnd.chipnuts.karaoke-mmd"],["mme","application/base64"],["mmf","application/vnd.smaf"],["mmr","image/vnd.fujixerox.edmics-mmr"],["mny","application/x-msmoney"],["mod",["audio/mod","audio/x-mod"]],["mods","application/mods+xml"],["moov","video/quicktime"],["mov","video/quicktime"],["movie","video/x-sgi-movie"],["mp2",["video/mpeg","audio/mpeg","video/x-mpeg","audio/x-mpeg","video/x-mpeq2a"]],["mp3",["audio/mpeg","audio/mpeg3","video/mpeg","audio/x-mpeg-3","video/x-mpeg"]],["mp4",["video/mp4","application/mp4"]],["mp4a","audio/mp4"],["mpa",["video/mpeg","audio/mpeg"]],["mpc",["application/vnd.mophun.certificate","application/x-project"]],["mpe","video/mpeg"],["mpeg","video/mpeg"],["mpg",["video/mpeg","audio/mpeg"]],["mpga","audio/mpeg"],["mpkg","application/vnd.apple.installer+xml"],["mpm","application/vnd.blueice.multipass"],["mpn","application/vnd.mophun.application"],["mpp","application/vnd.ms-project"],["mpt","application/x-project"],["mpv","application/x-project"],["mpv2","video/mpeg"],["mpx","application/x-project"],["mpy","application/vnd.ibm.minipay"],["mqy","application/vnd.mobius.mqy"],["mrc","application/marc"],["mrcx","application/marcxml+xml"],["ms","application/x-troff-ms"],["mscml","application/mediaservercontrol+xml"],["mseq","application/vnd.mseq"],["msf","application/vnd.epson.msf"],["msg","application/vnd.ms-outlook"],["msh","model/mesh"],["msl","application/vnd.mobius.msl"],["msty","application/vnd.muvee.style"],["mts","model/vnd.mts"],["mus","application/vnd.musician"],["musicxml","application/vnd.recordare.musicxml+xml"],["mv","video/x-sgi-movie"],["mvb","application/x-msmediaview"],["mwf","application/vnd.mfer"],["mxf","application/mxf"],["mxl","application/vnd.recordare.musicxml"],["mxml","application/xv+xml"],["mxs","application/vnd.triscape.mxs"],["mxu","video/vnd.mpegurl"],["my","audio/make"],["mzz","application/x-vnd.audioexplosion.mzz"],["n-gage","application/vnd.nokia.n-gage.symbian.install"],["n3","text/n3"],["nap","image/naplps"],["naplps","image/naplps"],["nbp","application/vnd.wolfram.player"],["nc","application/x-netcdf"],["ncm","application/vnd.nokia.configuration-message"],["ncx","application/x-dtbncx+xml"],["ngdat","application/vnd.nokia.n-gage.data"],["nif","image/x-niff"],["niff","image/x-niff"],["nix","application/x-mix-transfer"],["nlu","application/vnd.neurolanguage.nlu"],["nml","application/vnd.enliven"],["nnd","application/vnd.noblenet-directory"],["nns","application/vnd.noblenet-sealer"],["nnw","application/vnd.noblenet-web"],["npx","image/vnd.net-fpx"],["nsc","application/x-conference"],["nsf","application/vnd.lotus-notes"],["nvd","application/x-navidoc"],["nws","message/rfc822"],["o","application/octet-stream"],["oa2","application/vnd.fujitsu.oasys2"],["oa3","application/vnd.fujitsu.oasys3"],["oas","application/vnd.fujitsu.oasys"],["obd","application/x-msbinder"],["oda","application/oda"],["odb","application/vnd.oasis.opendocument.database"],["odc","application/vnd.oasis.opendocument.chart"],["odf","application/vnd.oasis.opendocument.formula"],["odft","application/vnd.oasis.opendocument.formula-template"],["odg","application/vnd.oasis.opendocument.graphics"],["odi","application/vnd.oasis.opendocument.image"],["odm","application/vnd.oasis.opendocument.text-master"],["odp","application/vnd.oasis.opendocument.presentation"],["ods","application/vnd.oasis.opendocument.spreadsheet"],["odt","application/vnd.oasis.opendocument.text"],["oga","audio/ogg"],["ogv","video/ogg"],["ogx","application/ogg"],["omc","application/x-omc"],["omcd","application/x-omcdatamaker"],["omcr","application/x-omcregerator"],["onetoc","application/onenote"],["opf","application/oebps-package+xml"],["org","application/vnd.lotus-organizer"],["osf","application/vnd.yamaha.openscoreformat"],["osfpvg","application/vnd.yamaha.openscoreformat.osfpvg+xml"],["otc","application/vnd.oasis.opendocument.chart-template"],["otf","application/x-font-otf"],["otg","application/vnd.oasis.opendocument.graphics-template"],["oth","application/vnd.oasis.opendocument.text-web"],["oti","application/vnd.oasis.opendocument.image-template"],["otp","application/vnd.oasis.opendocument.presentation-template"],["ots","application/vnd.oasis.opendocument.spreadsheet-template"],["ott","application/vnd.oasis.opendocument.text-template"],["oxt","application/vnd.openofficeorg.extension"],["p","text/x-pascal"],["p10",["application/pkcs10","application/x-pkcs10"]],["p12",["application/pkcs-12","application/x-pkcs12"]],["p7a","application/x-pkcs7-signature"],["p7b","application/x-pkcs7-certificates"],["p7c",["application/pkcs7-mime","application/x-pkcs7-mime"]],["p7m",["application/pkcs7-mime","application/x-pkcs7-mime"]],["p7r","application/x-pkcs7-certreqresp"],["p7s",["application/pkcs7-signature","application/x-pkcs7-signature"]],["p8","application/pkcs8"],["par","text/plain-bas"],["part","application/pro_eng"],["pas","text/pascal"],["paw","application/vnd.pawaafile"],["pbd","application/vnd.powerbuilder6"],["pbm","image/x-portable-bitmap"],["pcf","application/x-font-pcf"],["pcl",["application/vnd.hp-pcl","application/x-pcl"]],["pclxl","application/vnd.hp-pclxl"],["pct","image/x-pict"],["pcurl","application/vnd.curl.pcurl"],["pcx","image/x-pcx"],["pdb",["application/vnd.palm","chemical/x-pdb"]],["pdf","application/pdf"],["pfa","application/x-font-type1"],["pfr","application/font-tdpfr"],["pfunk",["audio/make","audio/make.my.funk"]],["pfx","application/x-pkcs12"],["pgm",["image/x-portable-graymap","image/x-portable-greymap"]],["pgn","application/x-chess-pgn"],["pgp","application/pgp-signature"],["pic",["image/pict","image/x-pict"]],["pict","image/pict"],["pkg","application/x-newton-compatible-pkg"],["pki","application/pkixcmp"],["pkipath","application/pkix-pkipath"],["pko",["application/ynd.ms-pkipko","application/vnd.ms-pki.pko"]],["pl",["text/plain","text/x-script.perl"]],["plb","application/vnd.3gpp.pic-bw-large"],["plc","application/vnd.mobius.plc"],["plf","application/vnd.pocketlearn"],["pls","application/pls+xml"],["plx","application/x-pixclscript"],["pm",["text/x-script.perl-module","image/x-xpixmap"]],["pm4","application/x-pagemaker"],["pm5","application/x-pagemaker"],["pma","application/x-perfmon"],["pmc","application/x-perfmon"],["pml",["application/vnd.ctc-posml","application/x-perfmon"]],["pmr","application/x-perfmon"],["pmw","application/x-perfmon"],["png","image/png"],["pnm",["application/x-portable-anymap","image/x-portable-anymap"]],["portpkg","application/vnd.macports.portpkg"],["pot",["application/vnd.ms-powerpoint","application/mspowerpoint"]],["potm","application/vnd.ms-powerpoint.template.macroenabled.12"],["potx","application/vnd.openxmlformats-officedocument.presentationml.template"],["pov","model/x-pov"],["ppa","application/vnd.ms-powerpoint"],["ppam","application/vnd.ms-powerpoint.addin.macroenabled.12"],["ppd","application/vnd.cups-ppd"],["ppm","image/x-portable-pixmap"],["pps",["application/vnd.ms-powerpoint","application/mspowerpoint"]],["ppsm","application/vnd.ms-powerpoint.slideshow.macroenabled.12"],["ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"],["ppt",["application/vnd.ms-powerpoint","application/mspowerpoint","application/powerpoint","application/x-mspowerpoint"]],["pptm","application/vnd.ms-powerpoint.presentation.macroenabled.12"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["ppz","application/mspowerpoint"],["prc","application/x-mobipocket-ebook"],["pre",["application/vnd.lotus-freelance","application/x-freelance"]],["prf","application/pics-rules"],["prt","application/pro_eng"],["ps","application/postscript"],["psb","application/vnd.3gpp.pic-bw-small"],["psd",["application/octet-stream","image/vnd.adobe.photoshop"]],["psf","application/x-font-linux-psf"],["pskcxml","application/pskc+xml"],["ptid","application/vnd.pvi.ptid1"],["pub","application/x-mspublisher"],["pvb","application/vnd.3gpp.pic-bw-var"],["pvu","paleovu/x-pv"],["pwn","application/vnd.3m.post-it-notes"],["pwz","application/vnd.ms-powerpoint"],["py","text/x-script.phyton"],["pya","audio/vnd.ms-playready.media.pya"],["pyc","application/x-bytecode.python"],["pyv","video/vnd.ms-playready.media.pyv"],["qam","application/vnd.epson.quickanime"],["qbo","application/vnd.intu.qbo"],["qcp","audio/vnd.qcelp"],["qd3","x-world/x-3dmf"],["qd3d","x-world/x-3dmf"],["qfx","application/vnd.intu.qfx"],["qif","image/x-quicktime"],["qps","application/vnd.publishare-delta-tree"],["qt","video/quicktime"],["qtc","video/x-qtc"],["qti","image/x-quicktime"],["qtif","image/x-quicktime"],["qxd","application/vnd.quark.quarkxpress"],["ra",["audio/x-realaudio","audio/x-pn-realaudio","audio/x-pn-realaudio-plugin"]],["ram","audio/x-pn-realaudio"],["rar","application/x-rar-compressed"],["ras",["image/cmu-raster","application/x-cmu-raster","image/x-cmu-raster"]],["rast","image/cmu-raster"],["rcprofile","application/vnd.ipunplugged.rcprofile"],["rdf","application/rdf+xml"],["rdz","application/vnd.data-vision.rdz"],["rep","application/vnd.businessobjects"],["res","application/x-dtbresource+xml"],["rexx","text/x-script.rexx"],["rf","image/vnd.rn-realflash"],["rgb","image/x-rgb"],["rif","application/reginfo+xml"],["rip","audio/vnd.rip"],["rl","application/resource-lists+xml"],["rlc","image/vnd.fujixerox.edmics-rlc"],["rld","application/resource-lists-diff+xml"],["rm",["application/vnd.rn-realmedia","audio/x-pn-realaudio"]],["rmi","audio/mid"],["rmm","audio/x-pn-realaudio"],["rmp",["audio/x-pn-realaudio-plugin","audio/x-pn-realaudio"]],["rms","application/vnd.jcp.javame.midlet-rms"],["rnc","application/relax-ng-compact-syntax"],["rng",["application/ringing-tones","application/vnd.nokia.ringing-tone"]],["rnx","application/vnd.rn-realplayer"],["roff","application/x-troff"],["rp","image/vnd.rn-realpix"],["rp9","application/vnd.cloanto.rp9"],["rpm","audio/x-pn-realaudio-plugin"],["rpss","application/vnd.nokia.radio-presets"],["rpst","application/vnd.nokia.radio-preset"],["rq","application/sparql-query"],["rs","application/rls-services+xml"],["rsd","application/rsd+xml"],["rt",["text/richtext","text/vnd.rn-realtext"]],["rtf",["application/rtf","text/richtext","application/x-rtf"]],["rtx",["text/richtext","application/rtf"]],["rv","video/vnd.rn-realvideo"],["s","text/x-asm"],["s3m","audio/s3m"],["saf","application/vnd.yamaha.smaf-audio"],["saveme","application/octet-stream"],["sbk","application/x-tbook"],["sbml","application/sbml+xml"],["sc","application/vnd.ibm.secure-container"],["scd","application/x-msschedule"],["scm",["application/vnd.lotus-screencam","video/x-scm","text/x-script.guile","application/x-lotusscreencam","text/x-script.scheme"]],["scq","application/scvp-cv-request"],["scs","application/scvp-cv-response"],["sct","text/scriptlet"],["scurl","text/vnd.curl.scurl"],["sda","application/vnd.stardivision.draw"],["sdc","application/vnd.stardivision.calc"],["sdd","application/vnd.stardivision.impress"],["sdkm","application/vnd.solent.sdkm+xml"],["sdml","text/plain"],["sdp",["application/sdp","application/x-sdp"]],["sdr","application/sounder"],["sdw","application/vnd.stardivision.writer"],["sea",["application/sea","application/x-sea"]],["see","application/vnd.seemail"],["seed","application/vnd.fdsn.seed"],["sema","application/vnd.sema"],["semd","application/vnd.semd"],["semf","application/vnd.semf"],["ser","application/java-serialized-object"],["set","application/set"],["setpay","application/set-payment-initiation"],["setreg","application/set-registration-initiation"],["sfd-hdstx","application/vnd.hydrostatix.sof-data"],["sfs","application/vnd.spotfire.sfs"],["sgl","application/vnd.stardivision.writer-global"],["sgm",["text/sgml","text/x-sgml"]],["sgml",["text/sgml","text/x-sgml"]],["sh",["application/x-shar","application/x-bsh","application/x-sh","text/x-script.sh"]],["shar",["application/x-bsh","application/x-shar"]],["shf","application/shf+xml"],["shtml",["text/html","text/x-server-parsed-html"]],["sid","audio/x-psid"],["sis","application/vnd.symbian.install"],["sit",["application/x-stuffit","application/x-sit"]],["sitx","application/x-stuffitx"],["skd","application/x-koan"],["skm","application/x-koan"],["skp",["application/vnd.koan","application/x-koan"]],["skt","application/x-koan"],["sl","application/x-seelogo"],["sldm","application/vnd.ms-powerpoint.slide.macroenabled.12"],["sldx","application/vnd.openxmlformats-officedocument.presentationml.slide"],["slt","application/vnd.epson.salt"],["sm","application/vnd.stepmania.stepchart"],["smf","application/vnd.stardivision.math"],["smi",["application/smil","application/smil+xml"]],["smil","application/smil"],["snd",["audio/basic","audio/x-adpcm"]],["snf","application/x-font-snf"],["sol","application/solids"],["spc",["text/x-speech","application/x-pkcs7-certificates"]],["spf","application/vnd.yamaha.smaf-phrase"],["spl",["application/futuresplash","application/x-futuresplash"]],["spot","text/vnd.in3d.spot"],["spp","application/scvp-vp-response"],["spq","application/scvp-vp-request"],["spr","application/x-sprite"],["sprite","application/x-sprite"],["src","application/x-wais-source"],["sru","application/sru+xml"],["srx","application/sparql-results+xml"],["sse","application/vnd.kodak-descriptor"],["ssf","application/vnd.epson.ssf"],["ssi","text/x-server-parsed-html"],["ssm","application/streamingmedia"],["ssml","application/ssml+xml"],["sst",["application/vnd.ms-pkicertstore","application/vnd.ms-pki.certstore"]],["st","application/vnd.sailingtracker.track"],["stc","application/vnd.sun.xml.calc.template"],["std","application/vnd.sun.xml.draw.template"],["step","application/step"],["stf","application/vnd.wt.stf"],["sti","application/vnd.sun.xml.impress.template"],["stk","application/hyperstudio"],["stl",["application/vnd.ms-pkistl","application/sla","application/vnd.ms-pki.stl","application/x-navistyle"]],["stm","text/html"],["stp","application/step"],["str","application/vnd.pg.format"],["stw","application/vnd.sun.xml.writer.template"],["sub","image/vnd.dvb.subtitle"],["sus","application/vnd.sus-calendar"],["sv4cpio","application/x-sv4cpio"],["sv4crc","application/x-sv4crc"],["svc","application/vnd.dvb.service"],["svd","application/vnd.svd"],["svf",["image/vnd.dwg","image/x-dwg"]],["svg","image/svg+xml"],["svr",["x-world/x-svr","application/x-world"]],["swf","application/x-shockwave-flash"],["swi","application/vnd.aristanetworks.swi"],["sxc","application/vnd.sun.xml.calc"],["sxd","application/vnd.sun.xml.draw"],["sxg","application/vnd.sun.xml.writer.global"],["sxi","application/vnd.sun.xml.impress"],["sxm","application/vnd.sun.xml.math"],["sxw","application/vnd.sun.xml.writer"],["t",["text/troff","application/x-troff"]],["talk","text/x-speech"],["tao","application/vnd.tao.intent-module-archive"],["tar","application/x-tar"],["tbk",["application/toolbook","application/x-tbook"]],["tcap","application/vnd.3gpp2.tcap"],["tcl",["text/x-script.tcl","application/x-tcl"]],["tcsh","text/x-script.tcsh"],["teacher","application/vnd.smart.teacher"],["tei","application/tei+xml"],["tex","application/x-tex"],["texi","application/x-texinfo"],["texinfo","application/x-texinfo"],["text",["application/plain","text/plain"]],["tfi","application/thraud+xml"],["tfm","application/x-tex-tfm"],["tgz",["application/gnutar","application/x-compressed"]],["thmx","application/vnd.ms-officetheme"],["tif",["image/tiff","image/x-tiff"]],["tiff",["image/tiff","image/x-tiff"]],["tmo","application/vnd.tmobile-livetv"],["torrent","application/x-bittorrent"],["tpl","application/vnd.groove-tool-template"],["tpt","application/vnd.trid.tpt"],["tr","application/x-troff"],["tra","application/vnd.trueapp"],["trm","application/x-msterminal"],["tsd","application/timestamped-data"],["tsi","audio/tsp-audio"],["tsp",["application/dsptype","audio/tsplayer"]],["tsv","text/tab-separated-values"],["ttf","application/x-font-ttf"],["ttl","text/turtle"],["turbot","image/florian"],["twd","application/vnd.simtech-mindmapper"],["txd","application/vnd.genomatix.tuxedo"],["txf","application/vnd.mobius.txf"],["txt","text/plain"],["ufd","application/vnd.ufdl"],["uil","text/x-uil"],["uls","text/iuls"],["umj","application/vnd.umajin"],["uni","text/uri-list"],["unis","text/uri-list"],["unityweb","application/vnd.unity"],["unv","application/i-deas"],["uoml","application/vnd.uoml+xml"],["uri","text/uri-list"],["uris","text/uri-list"],["ustar",["application/x-ustar","multipart/x-ustar"]],["utz","application/vnd.uiq.theme"],["uu",["application/octet-stream","text/x-uuencode"]],["uue","text/x-uuencode"],["uva","audio/vnd.dece.audio"],["uvh","video/vnd.dece.hd"],["uvi","image/vnd.dece.graphic"],["uvm","video/vnd.dece.mobile"],["uvp","video/vnd.dece.pd"],["uvs","video/vnd.dece.sd"],["uvu","video/vnd.uvvu.mp4"],["uvv","video/vnd.dece.video"],["vcd","application/x-cdlink"],["vcf","text/x-vcard"],["vcg","application/vnd.groove-vcard"],["vcs","text/x-vcalendar"],["vcx","application/vnd.vcx"],["vda","application/vda"],["vdo","video/vdo"],["vew","application/groupwise"],["vis","application/vnd.visionary"],["viv",["video/vivo","video/vnd.vivo"]],["vivo",["video/vivo","video/vnd.vivo"]],["vmd","application/vocaltec-media-desc"],["vmf","application/vocaltec-media-file"],["voc",["audio/voc","audio/x-voc"]],["vos","video/vosaic"],["vox","audio/voxware"],["vqe","audio/x-twinvq-plugin"],["vqf","audio/x-twinvq"],["vql","audio/x-twinvq-plugin"],["vrml",["model/vrml","x-world/x-vrml","application/x-vrml"]],["vrt","x-world/x-vrt"],["vsd",["application/vnd.visio","application/x-visio"]],["vsf","application/vnd.vsf"],["vst","application/x-visio"],["vsw","application/x-visio"],["vtu","model/vnd.vtu"],["vxml","application/voicexml+xml"],["w60","application/wordperfect6.0"],["w61","application/wordperfect6.1"],["w6w","application/msword"],["wad","application/x-doom"],["wav",["audio/wav","audio/x-wav"]],["wax","audio/x-ms-wax"],["wb1","application/x-qpro"],["wbmp","image/vnd.wap.wbmp"],["wbs","application/vnd.criticaltools.wbs+xml"],["wbxml","application/vnd.wap.wbxml"],["wcm","application/vnd.ms-works"],["wdb","application/vnd.ms-works"],["web","application/vnd.xara"],["weba","audio/webm"],["webm","video/webm"],["webp","image/webp"],["wg","application/vnd.pmi.widget"],["wgt","application/widget"],["wiz","application/msword"],["wk1","application/x-123"],["wks","application/vnd.ms-works"],["wm","video/x-ms-wm"],["wma","audio/x-ms-wma"],["wmd","application/x-ms-wmd"],["wmf",["windows/metafile","application/x-msmetafile"]],["wml","text/vnd.wap.wml"],["wmlc","application/vnd.wap.wmlc"],["wmls","text/vnd.wap.wmlscript"],["wmlsc","application/vnd.wap.wmlscriptc"],["wmv","video/x-ms-wmv"],["wmx","video/x-ms-wmx"],["wmz","application/x-ms-wmz"],["woff","application/x-font-woff"],["word","application/msword"],["wp","application/wordperfect"],["wp5",["application/wordperfect","application/wordperfect6.0"]],["wp6","application/wordperfect"],["wpd",["application/wordperfect","application/vnd.wordperfect","application/x-wpwin"]],["wpl","application/vnd.ms-wpl"],["wps","application/vnd.ms-works"],["wq1","application/x-lotus"],["wqd","application/vnd.wqd"],["wri",["application/mswrite","application/x-wri","application/x-mswrite"]],["wrl",["model/vrml","x-world/x-vrml","application/x-world"]],["wrz",["model/vrml","x-world/x-vrml"]],["wsc","text/scriplet"],["wsdl","application/wsdl+xml"],["wspolicy","application/wspolicy+xml"],["wsrc","application/x-wais-source"],["wtb","application/vnd.webturbo"],["wtk","application/x-wintalk"],["wvx","video/x-ms-wvx"],["x-png","image/png"],["x3d","application/vnd.hzn-3d-crossword"],["xaf","x-world/x-vrml"],["xap","application/x-silverlight-app"],["xar","application/vnd.xara"],["xbap","application/x-ms-xbap"],["xbd","application/vnd.fujixerox.docuworks.binder"],["xbm",["image/xbm","image/x-xbm","image/x-xbitmap"]],["xdf","application/xcap-diff+xml"],["xdm","application/vnd.syncml.dm+xml"],["xdp","application/vnd.adobe.xdp+xml"],["xdr","video/x-amt-demorun"],["xdssc","application/dssc+xml"],["xdw","application/vnd.fujixerox.docuworks"],["xenc","application/xenc+xml"],["xer","application/patch-ops-error+xml"],["xfdf","application/vnd.adobe.xfdf"],["xfdl","application/vnd.xfdl"],["xgz","xgl/drawing"],["xhtml","application/xhtml+xml"],["xif","image/vnd.xiff"],["xl","application/excel"],["xla",["application/vnd.ms-excel","application/excel","application/x-msexcel","application/x-excel"]],["xlam","application/vnd.ms-excel.addin.macroenabled.12"],["xlb",["application/excel","application/vnd.ms-excel","application/x-excel"]],["xlc",["application/vnd.ms-excel","application/excel","application/x-excel"]],["xld",["application/excel","application/x-excel"]],["xlk",["application/excel","application/x-excel"]],["xll",["application/excel","application/vnd.ms-excel","application/x-excel"]],["xlm",["application/vnd.ms-excel","application/excel","application/x-excel"]],["xls",["application/vnd.ms-excel","application/excel","application/x-msexcel","application/x-excel"]],["xlsb","application/vnd.ms-excel.sheet.binary.macroenabled.12"],["xlsm","application/vnd.ms-excel.sheet.macroenabled.12"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["xlt",["application/vnd.ms-excel","application/excel","application/x-excel"]],["xltm","application/vnd.ms-excel.template.macroenabled.12"],["xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"],["xlv",["application/excel","application/x-excel"]],["xlw",["application/vnd.ms-excel","application/excel","application/x-msexcel","application/x-excel"]],["xm","audio/xm"],["xml",["application/xml","text/xml","application/atom+xml","application/rss+xml"]],["xmz","xgl/movie"],["xo","application/vnd.olpc-sugar"],["xof","x-world/x-vrml"],["xop","application/xop+xml"],["xpi","application/x-xpinstall"],["xpix","application/x-vnd.ls-xpix"],["xpm",["image/xpm","image/x-xpixmap"]],["xpr","application/vnd.is-xpr"],["xps","application/vnd.ms-xpsdocument"],["xpw","application/vnd.intercon.formnet"],["xslt","application/xslt+xml"],["xsm","application/vnd.syncml+xml"],["xspf","application/xspf+xml"],["xsr","video/x-amt-showrun"],["xul","application/vnd.mozilla.xul+xml"],["xwd",["image/x-xwd","image/x-xwindowdump"]],["xyz",["chemical/x-xyz","chemical/x-pdb"]],["yang","application/yang"],["yin","application/yin+xml"],["z",["application/x-compressed","application/x-compress"]],["zaz","application/vnd.zzazz.deck+xml"],["zip",["application/zip","multipart/x-zip","application/x-zip-compressed","application/x-compressed"]],["zir","application/vnd.zul"],["zmm","application/vnd.handheld-entertainment+xml"],["zoo","application/octet-stream"],["zsh","text/x-script.zsh"]]);fY.exports={detectMimeType(_){if(!_)return"application/octet-stream";let E=Jj.parse(_),R=(E.ext.substr(1)||E.name||"").split("?").shift().trim().toLowerCase(),N="application/octet-stream";if(qY.has(R))N=qY.get(R);if(Array.isArray(N))return N[0];return N},detectExtension(_){if(!_)return"bin";let E=(_||"").toLowerCase().trim().split("/"),R=E.shift().trim(),N=E.join("/").trim();if(xY.has(R+"/"+N)){let A=xY.get(R+"/"+N);if(Array.isArray(A))return A[0];return A}switch(R){case"text":return"txt";default:return"bin"}}}});var L2=j((xb,gY)=>{var $j=/^xn--/,Zj=/[^\0-\x7F]/,wj=/[\x2E\u3002\uFF0E\uFF61]/g,Qj={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},wN=Math.floor,I2=String.fromCharCode;function J1(_){throw new RangeError(Qj[_])}function zj(_,E){let R=[],N=_.length;while(N--)R[N]=E(_[N]);return R}function vY(_,E){let R=_.split("@"),N="";if(R.length>1)N=R[0]+"@",_=R[1];_=_.replace(wj,".");let A=_.split("."),L=zj(A,E).join(".");return N+L}function pY(_){let E=[],R=0,N=_.length;while(R=55296&&A<=56319&&RString.fromCodePoint(..._),qj=function(_){if(_>=48&&_<58)return 26+(_-48);if(_>=65&&_<91)return _-65;if(_>=97&&_<123)return _-97;return 36},jY=function(_,E){return _+22+75*(_<26)-((E!=0)<<5)},hY=function(_,E,R){let N=0;_=R?wN(_/700):_>>1,_+=wN(_/E);for(;_>455;N+=36)_=wN(_/35);return wN(N+36*_/(_+38))},kY=function(_){let E=[],R=_.length,N=0,A=128,L=72,U=_.lastIndexOf("-");if(U<0)U=0;for(let G=0;G=128)J1("not-basic");E.push(_.charCodeAt(G))}for(let G=U>0?U+1:0;G=R)J1("invalid-input");let H=qj(_.charCodeAt(G++));if(H>=36)J1("invalid-input");if(H>wN((2147483647-N)/Y))J1("overflow");N+=H*Y;let X=M<=L?1:M>=L+26?26:M-L;if(HwN(2147483647/$))J1("overflow");Y*=$}let C=E.length+1;if(L=hY(N-S,C,S==0),wN(N/C)>2147483647-A)J1("overflow");A+=wN(N/C),N%=C,E.splice(N++,0,A)}return String.fromCodePoint(...E)},mY=function(_){let E=[];_=pY(_);let R=_.length,N=128,A=0,L=72;for(let S of _)if(S<128)E.push(I2(S));let U=E.length,G=U;if(U)E.push("-");while(G=N&&YwN((2147483647-A)/C))J1("overflow");A+=(S-N)*C,N=S;for(let Y of _){if(Y2147483647)J1("overflow");if(Y===N){let M=A;for(let H=36;;H+=36){let X=H<=L?1:H>=L+26?26:H-L;if(M{var pj=require("stream").Transform;function U2(_){if(typeof _==="string")_=Buffer.from(_,"utf-8");return _.toString("base64")}function G2(_,E){if(_=(_||"").toString(),E=E||76,_.length<=E)return _;let R=[],N=0,A=E*1024;while(N<_.length){let L=_.substr(N,A).replace(new RegExp(".{"+E+"}","g"),"$&\r\n").trim();R.push(L),N+=A}return R.join("\r\n").trim()}class yY extends pj{constructor(_){super();if(this.options=_||{},this.options.lineLength!==!1)this.options.lineLength=this.options.lineLength||76;this._curLine="",this._remainingBytes=!1,this.inputBytes=0,this.outputBytes=0}_transform(_,E,R){if(E!=="buffer")_=Buffer.from(_,E);if(!_||!_.length)return setImmediate(R);if(this.inputBytes+=_.length,this._remainingBytes&&this._remainingBytes.length)_=Buffer.concat([this._remainingBytes,_],this._remainingBytes.length+_.length),this._remainingBytes=!1;if(_.length%3)this._remainingBytes=_.slice(_.length-_.length%3),_=_.slice(0,_.length-_.length%3);else this._remainingBytes=!1;let N=this._curLine+U2(_);if(this.options.lineLength){N=G2(N,this.options.lineLength);let A=N.lastIndexOf("\n");if(A<0)this._curLine=N,N="";else if(A===N.length-1)this._curLine="";else this._curLine=N.substr(A+1),N=N.substr(0,A+1)}if(N)this.outputBytes+=N.length,this.push(Buffer.from(N,"ascii"));setImmediate(R)}_flush(_){if(this._remainingBytes&&this._remainingBytes.length)this._curLine+=U2(this._remainingBytes);if(this._curLine)this._curLine=G2(this._curLine,this.options.lineLength),this.outputBytes+=this._curLine.length,this.push(this._curLine,"ascii"),this._curLine="";_()}}bY.exports={encode:U2,wrap:G2,Encoder:yY}});var C2=j((fb,cY)=>{var hj=require("stream").Transform;function S2(_){if(typeof _==="string")_=Buffer.from(_,"utf-8");let E=[[9],[10],[13],[32,60],[62,126]],R="",N;for(let A=0,L=_.length;AE-G&&(A=U.substr(-G).match(/[ \t.,!?][^ \t.,!?]*$/)))U=U.substr(0,U.length-(A[0].length-1));else if(U.match(/[=][\da-f]{0,2}$/i)){if(A=U.match(/[=][\da-f]{0,1}$/i))U=U.substr(0,U.length-A[0].length);while(U.length>3&&U.length=192)break}}if(R+U.length=0;R--){if(!E[R].length)continue;if(E[R].length===1&&_===E[R][0])return!0;if(E[R].length===2&&_>=E[R][0]&&_<=E[R][1])return!0}return!1}class uY extends hj{constructor(_){super();if(this.options=_||{},this.options.lineLength!==!1)this.options.lineLength=this.options.lineLength||76;this._curLine="",this.inputBytes=0,this.outputBytes=0}_transform(_,E,R){let N;if(E!=="buffer")_=Buffer.from(_,E);if(!_||!_.length)return R();if(this.inputBytes+=_.length,this.options.lineLength){if(N=this._curLine+S2(_),N=iY(N,this.options.lineLength),N=N.replace(/(^|\n)([^\n]*)$/,(A,L,U)=>{return this._curLine=U,L}),N)this.outputBytes+=N.length,this.push(N)}else N=S2(_),this.outputBytes+=N.length,this.push(N,"ascii");R()}_flush(_){if(this._curLine)this.outputBytes+=this._curLine.length,this.push(this._curLine,"ascii");_()}}cY.exports={encode:S2,wrap:iY,Encoder:uY}});var SA=j((jb,lY)=>{var DA=D2(),mj=C2(),dY=A2();lY.exports={isPlainText(_,E){if(typeof _!=="string"||(E?/[\x00-\x08\x0b\x0c\x0e-\x1f"\u0080-\uFFFF]/:/[\x00-\x08\x0b\x0c\x0e-\x1f\u0080-\uFFFF]/).test(_))return!1;else return!0},hasLongerLines(_,E){if(_.length>131072)return!0;return new RegExp("^.{"+(E+1)+",}","m").test(_)},encodeWord(_,E,R){E=(E||"Q").toString().toUpperCase().trim().charAt(0),R=R||0;let N,A="UTF-8";if(R&&R>7+A.length)R-=7+A.length;if(E==="Q")N=mj.encode(_).replace(/[^a-z0-9!*+\-/=]/gi,(L)=>{let U=L.charCodeAt(0).toString(16).toUpperCase();if(L===" ")return"_";else return"="+(U.length===1?"0"+U:U)});else if(E==="B")N=typeof _==="string"?_:DA.encode(_),R=R?Math.max(3,(R-R%4)/4*3):0;if(R&&(E!=="B"?N:DA.encode(_)).length>R)if(E==="Q")N=this.splitMimeEncodedString(N,R).join("?= =?"+A+"?"+E+"?");else{let L=[],U="";for(let G=0,S=N.length;G1)N=L.join("?= =?"+A+"?"+E+"?");else N=L.join("")}else if(E==="B")N=DA.encode(_);return"=?"+A+"?"+E+"?"+N+(N.substr(-2)==="?="?"":"?=")},encodeWords(_,E,R,N){R=R||0;let A,L=_.match(/(?:^|\s)([^\s]*["\u0080-\uFFFF])/);if(!L)return _;if(N)return this.encodeWord(_,E,R);let U=_.match(/(["\u0080-\uFFFF][^\s]*)[^"\u0080-\uFFFF]*$/);if(!U)return _;let G=L.index+(L[0].match(/[^\s]/)||{index:0}).index,S=U.index+(U[1]||"").length;return A=(G?_.substr(0,G):"")+this.encodeWord(_.substring(G,S),E||"Q",R)+(S<_.length?_.substr(S):""),A},buildHeaderValue(_){let E=[];return Object.keys(_.params||{}).forEach((R)=>{let N=_.params[R];if(!this.isPlainText(N,!0)||N.length>=75)this.buildHeaderParam(R,N,50).forEach((A)=>{if(!/[\s"\\;:/=(),<>@[\]?]|^[-']|'$/.test(A.value)||A.key.substr(-1)==="*")E.push(A.key+"="+A.value);else E.push(A.key+"="+JSON.stringify(A.value))});else if(/[\s'"\\;:/=(),<>@[\]?]|^-/.test(N))E.push(R+"="+JSON.stringify(N));else E.push(R+"="+N)}),_.value+(E.length?"; "+E.join("; "):"")},buildHeaderParam(_,E,R){let N=[],A=typeof E==="string"?E:(E||"").toString(),L,U,G,S,C=0,Y,M;if(R=R||50,this.isPlainText(E,!0)){if(A.length<=R)return[{key:_,value:A}];if(A=A.replace(new RegExp(".{"+R+"}","g"),(H)=>{return N.push({line:H}),""}),A)N.push({line:A})}else{if(/[\uD800-\uDBFF]/.test(A)){L=[];for(Y=0,M=A.length;Y=55296&&G<=56319&&Y=R)N.push({line:S,encoded:H}),S="",C=Y-1;else{H=!0,Y=C,S="";continue}if((S+U).length>=R)if(N.push({line:S,encoded:H}),S=U=A[Y]===" "?" ":this.safeEncodeURIComponent(A[Y]),U===A[Y])H=!1,C=Y-1;else H=!0;else S+=U}if(S)N.push({line:S,encoded:H})}return N.map((H,X)=>({key:_+"*"+X+(H.encoded?"*":""),value:H.line}))},parseHeaderValue(_){let E={value:!1,params:{}},R=!1,N="",A="value",L=!1,U=!1,G;for(let S=0,C=_.length;S{let C,Y,M,H;if(M=S.match(/(\*(\d+)|\*(\d+)\*|\*)$/)){if(C=S.substr(0,M.index),Y=Number(M[2]||M[3])||0,!E.params[C]||typeof E.params[C]!=="object")E.params[C]={charset:!1,values:[]};if(H=E.params[S],Y===0&&M[0].substr(-1)==="*"&&(M=H.match(/^([^']*)'[^']*'(.*)$/)))E.params[C].charset=M[1]||"iso-8859-1",H=M[2];E.params[C].values[Y]=H,delete E.params[S]}}),Object.keys(E.params).forEach((S)=>{let C;if(E.params[S]&&Array.isArray(E.params[S].values))if(C=E.params[S].values.map((Y)=>Y||"").join(""),E.params[S].charset)E.params[S]="=?"+E.params[S].charset+"?Q?"+C.replace(/[=?_\s]/g,(Y)=>{let M=Y.charCodeAt(0).toString(16);if(Y===" ")return"_";else return"%"+(M.length<2?"0":"")+M}).replace(/%/g,"=")+"?=";else E.params[S]=C}),E},detectExtension:(_)=>dY.detectExtension(_),detectMimeType:(_)=>dY.detectMimeType(_),foldLines(_,E,R){_=(_||"").toString(),E=E||76;let N=0,A=_.length,L="",U,G;while(N{let R,N,A,L,U=[];E=Math.max(E||0,12);while(_.length){if(R=_.substr(0,E),N=R.match(/[=][0-9A-F]?$/i))R=R.substr(0,N.index);L=!1;while(!L)if(L=!0,N=_.substr(R.length).match(/^[=]([0-9A-F]{2})/i)){if(A=parseInt(N[1],16),A<194&&A>127)R=R.substr(0,R.length-3),L=!1}if(R.length)U.push(R);_=_.substr(R.length)}return U},encodeURICharComponent:(_)=>{let E="",R=_.charCodeAt(0).toString(16).toUpperCase();if(R.length%2)R="0"+R;if(R.length>2)for(let N=0,A=R.length/2;N@,;:\\"[\]?=\u007F-\uFFFF]+/g,"")}return _.replace(/[\x00-\x1F *'()<>@,;:\\"[\]?=\u007F-\uFFFF]/g,(E)=>this.encodeURICharComponent(E))}}});var tY=j((vb,sY)=>{function gj(_){let E,R=!1,N="text",A,L=[],U={address:[],comment:[],group:[],text:[]},G,S;for(G=0,S=_.length;G=0;G--)if(U.text[G].match(/^[^@\s]+@[^@\s]+$/)){U.address=U.text.splice(G,1);break}let C=function(Y){if(!U.address.length)return U.address=[Y.trim()]," ";else return Y};if(!U.address.length){for(G=U.text.length-1;G>=0;G--)if(U.text[G]=U.text[G].replace(/\s*\b[^@\s]+@[^\s]+\b\s*/,C).trim(),U.address.length)break}}if(!U.text.length&&U.comment.length)U.text=U.comment,U.comment=[];if(U.address.length>1)U.text=U.text.concat(U.address.splice(1));if(U.text=U.text.join(" "),U.address=U.address.join(" "),!U.address&&R)return[];else{if(A={address:U.address||U.text||"",name:U.text||U.address||""},A.address===A.name)if((A.address||"").match(/@/))A.name="";else A.address="";L.push(A)}}return L}class nY{constructor(_){this.str=(_||"").toString(),this.operatorCurrent="",this.operatorExpecting="",this.node=null,this.escaped=!1,this.list=[],this.operators={'"':'"',"(":")","<":">",",":"",":":";",";":""}}tokenize(){let _,E=[];for(let R=0,N=this.str.length;R{if(R.value=(R.value||"").toString().trim(),R.value)E.push(R)}),E}checkChar(_){if(this.escaped);else if(_===this.operatorExpecting){this.node={type:"operator",value:_},this.list.push(this.node),this.node=null,this.operatorExpecting="",this.escaped=!1;return}else if(!this.operatorExpecting&&_ in this.operators){this.node={type:"operator",value:_},this.list.push(this.node),this.node=null,this.operatorExpecting=this.operators[_],this.escaped=!1;return}else if(['"',"'"].includes(this.operatorExpecting)&&_==="\\"){this.escaped=!0;return}if(!this.node)this.node={type:"text",value:""},this.list.push(this.node);if(_==="\n")_=" ";if(_.charCodeAt(0)>=33||[" ","\t"].includes(_))this.node.value+=_;this.escaped=!1}}function oY(_,E){E=E||{};let N=new nY(_).tokenize(),A=[],L=[],U=[];if(N.forEach((G)=>{if(G.type==="operator"&&(G.value===","||G.value===";")){if(L.length)A.push(L);L=[]}else L.push(G)}),L.length)A.push(L);if(A.forEach((G)=>{if(G=gj(G),G.length)U=U.concat(G)}),E.flatten){let G=[],S=(C)=>{C.forEach((Y)=>{if(Y.group)return S(Y.group);else G.push(Y)})};return S(U),G}return U}sY.exports=oY});var eY=j((pb,aY)=>{var yj=require("stream").Transform;class rY extends yj{constructor(){super();this.lastByte=!1}_transform(_,E,R){if(_.length)this.lastByte=_[_.length-1];this.push(_),R()}_flush(_){if(this.lastByte===10)return _();if(this.lastByte===13)return this.push(Buffer.from("\n")),_();return this.push(Buffer.from("\r\n")),_()}}aY.exports=rY});var P2=j((hb,EH)=>{var bj=require("stream"),ij=bj.Transform;class _H extends ij{constructor(_){super(_);this.options=_||{},this.lastByte=!1}_transform(_,E,R){let N,A=0;for(let L=0,U=_.length;LA)N=_.slice(A,L),this.push(N);this.push(Buffer.from("\r\n")),A=L+1}}if(A&&A<_.length)N=_.slice(A),this.push(N);else if(!A)this.push(_);this.lastByte=_[_.length-1],R()}}EH.exports=_H});var TH=j((kb,NH)=>{var uj=require("stream"),cj=uj.Transform;class RH extends cj{constructor(_){super(_);this.options=_||{}}_transform(_,E,R){let N,A=0;for(let L=0,U=_.length;L{var Y2=require("crypto"),dj=require("fs"),lj=L2(),CA=require("stream").PassThrough,nj=IR(),UN=SA(),oj=C2(),sj=D2(),tj=tY(),rj=UA(),aj=eY(),ej=P2(),_v=TH();class H2{constructor(_,E){if(this.nodeCounter=0,E=E||{},this.baseBoundary=E.baseBoundary||Y2.randomBytes(8).toString("hex"),this.boundaryPrefix=E.boundaryPrefix||"--_NmP",this.disableFileAccess=!!E.disableFileAccess,this.disableUrlAccess=!!E.disableUrlAccess,this.normalizeHeaderKey=E.normalizeHeaderKey,this.date=new Date,this.rootNode=E.rootNode||this,this.keepBcc=!!E.keepBcc,E.filename){if(this.filename=E.filename,!_)_=UN.detectMimeType(this.filename.split(".").pop())}if(this.textEncoding=(E.textEncoding||"").toString().trim().charAt(0).toUpperCase(),this.parentNode=E.parentNode,this.hostname=E.hostname,this.newline=E.newline,this.childNodes=[],this._nodeId=++this.rootNode.nodeCounter,this._headers=[],this._isPlainText=!1,this._hasLongLines=!1,this._envelope=!1,this._raw=!1,this._transforms=[],this._processFuncs=[],_)this.setHeader("Content-Type",_)}createChild(_,E){if(!E&&typeof _==="object")E=_,_=void 0;let R=new H2(_,E);return this.appendChild(R),R}appendChild(_){if(_.rootNode!==this.rootNode)_.rootNode=this.rootNode,_._nodeId=++this.rootNode.nodeCounter;return _.parentNode=this,this.childNodes.push(_),_}replace(_){if(_===this)return this;return this.parentNode.childNodes.forEach((E,R)=>{if(E===this)_.rootNode=this.rootNode,_.parentNode=this.parentNode,_._nodeId=this._nodeId,this.rootNode=this,this.parentNode=void 0,_.parentNode.childNodes[R]=_}),_}remove(){if(!this.parentNode)return this;for(let _=this.parentNode.childNodes.length-1;_>=0;_--)if(this.parentNode.childNodes[_]===this)return this.parentNode.childNodes.splice(_,1),this.parentNode=void 0,this.rootNode=this,this}setHeader(_,E){let R=!1,N;if(!E&&_&&typeof _==="object"){if(_.key&&"value"in _)this.setHeader(_.key,_.value);else if(Array.isArray(_))_.forEach((A)=>{this.setHeader(A.key,A.value)});else Object.keys(_).forEach((A)=>{this.setHeader(A,_[A])});return this}_=this._normalizeHeaderKey(_),N={key:_,value:E};for(let A=0,L=this._headers.length;A{this.addHeader(R.key,R.value)});else Object.keys(_).forEach((R)=>{this.addHeader(R,_[R])});return this}else if(Array.isArray(E))return E.forEach((R)=>{this.addHeader(_,R)}),this;return this._headers.push({key:this._normalizeHeaderKey(_),value:E}),this}getHeader(_){_=this._normalizeHeaderKey(_);for(let E=0,R=this._headers.length;E{this.content.removeListener("error",this._contentErrorHandler),this.content=E},this.content.once("error",this._contentErrorHandler);else if(typeof this.content==="string"){if(this._isPlainText=UN.isPlainText(this.content),this._isPlainText&&UN.hasLongerLines(this.content,76))this._hasLongLines=!0}return this}build(_){let E;if(!_)E=new Promise((U,G)=>{_=nj.callbackPromise(U,G)});let R=this.createReadStream(),N=[],A=0,L=!1;return R.on("readable",()=>{let U;while((U=R.read())!==null)N.push(U),A+=U.length}),R.once("error",(U)=>{if(L)return;return L=!0,_(U)}),R.once("end",(U)=>{if(L)return;if(L=!0,U&&U.length)N.push(U),A+=U.length;return _(null,Buffer.concat(N,A))}),E}getTransferEncoding(){let _=!1,E=(this.getHeader("Content-Type")||"").toString().toLowerCase().trim();if(this.content){if(_=(this.getHeader("Content-Transfer-Encoding")||"").toString().toLowerCase().trim(),!_||!["base64","quoted-printable"].includes(_)){if(/^text\//i.test(E))if(this._isPlainText&&!this._hasLongLines)_="7bit";else if(typeof this.content==="string"||this.content instanceof Buffer)_=this._getTextEncoding(this.content)==="Q"?"quoted-printable":"base64";else _=this.textEncoding==="B"?"base64":"quoted-printable";else if(!/^(multipart|message)\//i.test(E))_=_||"base64"}}return _}buildHeaders(){let _=this.getTransferEncoding(),E=[];if(_)this.setHeader("Content-Transfer-Encoding",_);if(this.filename&&!this.getHeader("Content-Disposition"))this.setHeader("Content-Disposition","attachment");if(this.rootNode===this){if(!this.getHeader("Date"))this.setHeader("Date",this.date.toUTCString().replace(/GMT/,"+0000"));if(this.messageId(),!this.getHeader("MIME-Version"))this.setHeader("MIME-Version","1.0");for(let R=this._headers.length-2;R>=0;R--){let N=this._headers[R];if(N.key==="Content-Type")this._headers.splice(R,1),this._headers.push(N)}}return this._headers.forEach((R)=>{let{key:N,value:A}=R,L,U,G={};if(A&&typeof A==="object"&&!["From","Sender","To","Cc","Bcc","Reply-To","Date","References"].includes(N)){if(Object.keys(A).forEach((C)=>{if(C!=="value")G[C]=A[C]}),A=(A.value||"").toString(),!A.trim())return}if(G.prepared){if(G.foldLines)E.push(UN.foldLines(N+": "+A));else E.push(N+": "+A);return}switch(R.key){case"Content-Disposition":if(L=UN.parseHeaderValue(A),this.filename)L.params.filename=this.filename;A=UN.buildHeaderValue(L);break;case"Content-Type":if(L=UN.parseHeaderValue(A),this._handleContentType(L),L.value.match(/^text\/plain\b/)&&typeof this.content==="string"&&/[\u0080-\uFFFF]/.test(this.content))L.params.charset="utf-8";if(A=UN.buildHeaderValue(L),this.filename){if(U=this._encodeWords(this.filename),U!==this.filename||/[\s'"\\;:/=(),<>@[\]?]|^-/.test(U))U='"'+U+'"';A+="; name="+U}break;case"Bcc":if(!this.keepBcc)return;break}if(A=this._encodeHeaderValue(N,A),!(A||"").toString().trim())return;if(typeof this.normalizeHeaderKey==="function"){let C=this.normalizeHeaderKey(N,A);if(C&&typeof C==="string"&&C.length)N=C}E.push(UN.foldLines(N+": "+A,76))}),E.join("\r\n")}createReadStream(_){_=_||{};let E=new CA(_),R=E,N;this.stream(E,_,(A)=>{if(A){R.emit("error",A);return}E.end()});for(let A=0,L=this._transforms.length;A{N.emit("error",U)}),R=R.pipe(N);N=new aj,R.once("error",(A)=>{N.emit("error",A)}),R=R.pipe(N);for(let A=0,L=this._processFuncs.length;AU.emit("error",G)),U}return R}transform(_){this._transforms.push(_)}processFunc(_){this._processFuncs.push(_)}stream(_,E,R){let N=this.getTransferEncoding(),A,L,U=!1,G=(Y)=>{if(U)return;U=!0,R(Y)},S=()=>{let Y=0,M=()=>{if(Y>=this.childNodes.length)return _.write("\r\n--"+this.boundary+"--\r\n"),G();let H=this.childNodes[Y++];_.write((Y>1?"\r\n":"")+"--"+this.boundary+"\r\n"),H.stream(_,E,(X)=>{if(X)return G(X);setImmediate(M)})};if(this.multipart)setImmediate(M);else return G()},C=()=>{if(this.content){if(Object.prototype.toString.call(this.content)==="[object Error]")return G(this.content);if(typeof this.content.pipe==="function")this.content.removeListener("error",this._contentErrorHandler),this._contentErrorHandler=(M)=>G(M),this.content.once("error",this._contentErrorHandler);let Y=()=>{if(["quoted-printable","base64"].includes(N))A=new(N==="base64"?sj:oj).Encoder(E),A.pipe(_,{end:!1}),A.once("end",S),A.once("error",(M)=>G(M)),L=this._getStream(this.content),L.pipe(A);else L=this._getStream(this.content),L.pipe(_,{end:!1}),L.once("end",S);L.once("error",(M)=>G(M))};if(this.content._resolve){let M=[],H=0,X=!1,$=this._getStream(this.content);$.on("error",(z)=>{if(X)return;X=!0,G(z)}),$.on("readable",()=>{let z;while((z=$.read())!==null)M.push(z),H+=z.length}),$.on("end",()=>{if(X)return;X=!0,this.content._resolve=!1,this.content._resolvedValue=Buffer.concat(M,H),setImmediate(Y)})}else setImmediate(Y);return}else return setImmediate(S)};if(this._raw)setImmediate(()=>{if(Object.prototype.toString.call(this._raw)==="[object Error]")return G(this._raw);if(typeof this._raw.pipe==="function")this._raw.removeListener("error",this._contentErrorHandler);let Y=this._getStream(this._raw);Y.pipe(_,{end:!1}),Y.on("error",(M)=>_.emit("error",M)),Y.on("end",S)});else _.write(this.buildHeaders()+"\r\n\r\n"),setImmediate(C)}setEnvelope(_){let E;if(this._envelope={from:!1,to:[]},_.from){if(E=[],this._convertAddresses(this._parseAddresses(_.from),E),E=E.filter((N)=>N&&N.address),E.length&&E[0])this._envelope.from=E[0].address}["to","cc","bcc"].forEach((N)=>{if(_[N])this._convertAddresses(this._parseAddresses(_[N]),this._envelope.to)}),this._envelope.to=this._envelope.to.map((N)=>N.address).filter((N)=>N);let R=["to","cc","bcc","from"];return Object.keys(_).forEach((N)=>{if(!R.includes(N))this._envelope[N]=_[N]}),this}getAddresses(){let _={};return this._headers.forEach((E)=>{let R=E.key.toLowerCase();if(["from","sender","reply-to","to","cc","bcc"].includes(R)){if(!Array.isArray(_[R]))_[R]=[];this._convertAddresses(this._parseAddresses(E.value),_[R])}}),_}getEnvelope(){if(this._envelope)return this._envelope;let _={from:!1,to:[]};return this._headers.forEach((E)=>{let R=[];if(E.key==="From"||!_.from&&["Reply-To","Sender"].includes(E.key)){if(this._convertAddresses(this._parseAddresses(E.value),R),R.length&&R[0])_.from=R[0].address}else if(["To","Cc","Bcc"].includes(E.key))this._convertAddresses(this._parseAddresses(E.value),_.to)}),_.to=_.to.map((E)=>E.address),_}messageId(){let _=this.getHeader("Message-ID");if(!_)_=this._generateMessageId(),this.setHeader("Message-ID",_);return _}setRaw(_){if(this._raw=_,this._raw&&typeof this._raw.pipe==="function")this._contentErrorHandler=(E)=>{this._raw.removeListener("error",this._contentErrorHandler),this._raw=E},this._raw.once("error",this._contentErrorHandler);return this}_getStream(_){let E;if(_._resolvedValue)return E=new CA,setImmediate(()=>{try{E.end(_._resolvedValue)}catch(R){E.emit("error",R)}}),E;else if(typeof _.pipe==="function")return _;else if(_&&typeof _.path==="string"&&!_.href){if(this.disableFileAccess)return E=new CA,setImmediate(()=>E.emit("error",new Error("File access rejected for "+_.path))),E;return dj.createReadStream(_.path)}else if(_&&typeof _.href==="string"){if(this.disableUrlAccess)return E=new CA,setImmediate(()=>E.emit("error",new Error("Url access rejected for "+_.href))),E;return rj(_.href,{headers:_.httpHeaders})}else return E=new CA,setImmediate(()=>{try{E.end(_||"")}catch(R){E.emit("error",R)}}),E}_parseAddresses(_){return[].concat.apply([],[].concat(_).map((E)=>{if(E&&E.address)return E.address=this._normalizeAddress(E.address),E.name=E.name||"",[E];return tj(E)}))}_normalizeHeaderKey(_){return _=(_||"").toString().replace(/\r?\n|\r/g," ").trim().toLowerCase().replace(/^X-SMTPAPI$|^(MIME|DKIM|ARC|BIMI)\b|^[a-z]|-(SPF|FBL|ID|MD5)$|-[a-z]/gi,(E)=>E.toUpperCase()).replace(/^Content-Features$/i,"Content-features"),_}_handleContentType(_){if(this.contentType=_.value.trim().toLowerCase(),this.multipart=/^multipart\//i.test(this.contentType)?this.contentType.substr(this.contentType.indexOf("/")+1):!1,this.multipart)this.boundary=_.params.boundary=_.params.boundary||this.boundary||this._generateBoundary();else this.boundary=!1}_generateBoundary(){return this.rootNode.boundaryPrefix+"-"+this.rootNode.baseBoundary+"-Part_"+this._nodeId}_encodeHeaderValue(_,E){switch(_=this._normalizeHeaderKey(_),_){case"From":case"Sender":case"To":case"Cc":case"Bcc":case"Reply-To":return this._convertAddresses(this._parseAddresses(E));case"Message-ID":case"In-Reply-To":case"Content-Id":if(E=(E||"").toString().replace(/\r?\n|\r/g," "),E.charAt(0)!=="<")E="<"+E;if(E.charAt(E.length-1)!==">")E=E+">";return E;case"References":return E=[].concat.apply([],[].concat(E||"").map((R)=>{return R=(R||"").toString().replace(/\r?\n|\r/g," ").trim(),R.replace(/<[^>]*>/g,(N)=>N.replace(/\s/g,"")).split(/\s+/)})).map((R)=>{if(R.charAt(0)!=="<")R="<"+R;if(R.charAt(R.length-1)!==">")R=R+">";return R}),E.join(" ").trim();case"Date":if(Object.prototype.toString.call(E)==="[object Date]")return E.toUTCString().replace(/GMT/,"+0000");return E=(E||"").toString().replace(/\r?\n|\r/g," "),this._encodeWords(E);case"Content-Type":case"Content-Disposition":return(E||"").toString().replace(/\r?\n|\r/g," ");default:return E=(E||"").toString().replace(/\r?\n|\r/g," "),this._encodeWords(E)}}_convertAddresses(_,E){let R=[];return E=E||[],[].concat(_||[]).forEach((N)=>{if(N.address){if(N.address=this._normalizeAddress(N.address),!N.name)R.push(N.address.indexOf(" ")>=0?`<${N.address}>`:`${N.address}`);else if(N.name)R.push(`${this._encodeAddressName(N.name)} <${N.address}>`);if(N.address){if(!E.filter((A)=>A.address===N.address).length)E.push(N)}}else if(N.group){let A=(N.group.length?this._convertAddresses(N.group,E):"").trim();R.push(`${this._encodeAddressName(N.name)}:${A};`)}}),R.join(", ")}_normalizeAddress(_){_=(_||"").toString().replace(/[\x00-\x1F<>]+/g," ").trim();let E=_.lastIndexOf("@");if(E<0)return _;let R=_.substr(0,E),N=_.substr(E+1),A;try{A=lj.toASCII(N.toLowerCase())}catch(L){}if(R.indexOf(" ")>=0){if(R.charAt(0)!=='"')R='"'+R;if(R.substr(-1)!=='"')R=R+'"'}return`${R}@${A}`}_encodeAddressName(_){if(!/^[\w ]*$/.test(_))if(/^[\x20-\x7e]*$/.test(_))return'"'+_.replace(/([\\"])/g,"\\$1")+'"';else return UN.encodeWord(_,this._getTextEncoding(_),52);return _}_encodeWords(_){return UN.encodeWords(_,this._getTextEncoding(_),52,!0)}_getTextEncoding(_){_=(_||"").toString();let E=this.textEncoding,R,N;if(!E)N=(_.match(/[\x00-\x08\x0B\x0C\x0E-\x1F\u0080-\uFFFF]/g)||[]).length,R=(_.match(/[a-z]/gi)||[]).length,E=N_+"-"+Y2.randomBytes(E).toString("hex"),Y2.randomBytes(4).toString("hex"))+"@"+(this.getEnvelope().from||this.hostname||"localhost").split("@").pop()+">"}}OH.exports=H2});var LH=j((gb,IH)=>{var PA=W2(),M2=SA(),Ev=IR().parseDataURI;class AH{constructor(_){this.mail=_||{},this.message=!1}compile(){if(this._alternatives=this.getAlternatives(),this._htmlNode=this._alternatives.filter((_)=>/^text\/html\b/i.test(_.contentType)).pop(),this._attachments=this.getAttachments(!!this._htmlNode),this._useRelated=!!(this._htmlNode&&this._attachments.related.length),this._useAlternative=this._alternatives.length>1,this._useMixed=this._attachments.attached.length>1||this._alternatives.length&&this._attachments.attached.length===1,this.mail.raw)this.message=new PA("message/rfc822",{newline:this.mail.newline}).setRaw(this.mail.raw);else if(this._useMixed)this.message=this._createMixed();else if(this._useAlternative)this.message=this._createAlternative();else if(this._useRelated)this.message=this._createRelated();else this.message=this._createContentNode(!1,[].concat(this._alternatives||[]).concat(this._attachments.attached||[]).shift()||{contentType:"text/plain",content:""});if(this.mail.headers)this.message.addHeader(this.mail.headers);if(["from","sender","to","cc","bcc","reply-to","in-reply-to","references","subject","message-id","date"].forEach((_)=>{let E=_.replace(/-(\w)/g,(R,N)=>N.toUpperCase());if(this.mail[E])this.message.setHeader(_,this.mail[E])}),this.mail.envelope)this.message.setEnvelope(this.mail.envelope);return this.message.messageId(),this.message}getAttachments(_){let E,R,N=[].concat(this.mail.attachments||[]).map((A,L)=>{let U,G=/^message\//i.test(A.contentType);if(/^data:/i.test(A.path||A.href))A=this._processDataUrl(A);let S=A.contentType||M2.detectMimeType(A.filename||A.path||A.href||"bin"),C=/^image\//i.test(S),Y=A.contentDisposition||(G||C&&A.cid?"inline":"attachment");if(U={contentType:S,contentDisposition:Y,contentTransferEncoding:"contentTransferEncoding"in A?A.contentTransferEncoding:"base64"},A.filename)U.filename=A.filename;else if(!G&&A.filename!==!1){if(U.filename=(A.path||A.href||"").split("/").pop().split("?").shift()||"attachment-"+(L+1),U.filename.indexOf(".")<0)U.filename+="."+M2.detectExtension(U.contentType)}if(/^https?:\/\//i.test(A.path))A.href=A.path,A.path=void 0;if(A.cid)U.cid=A.cid;if(A.raw)U.raw=A.raw;else if(A.path)U.content={path:A.path};else if(A.href)U.content={href:A.href,httpHeaders:A.httpHeaders};else U.content=A.content||"";if(A.encoding)U.encoding=A.encoding;if(A.headers)U.headers=A.headers;return U});if(this.mail.icalEvent){if(typeof this.mail.icalEvent==="object"&&(this.mail.icalEvent.content||this.mail.icalEvent.path||this.mail.icalEvent.href||this.mail.icalEvent.raw))E=this.mail.icalEvent;else E={content:this.mail.icalEvent};if(R={},Object.keys(E).forEach((A)=>{R[A]=E[A]}),R.contentType="application/ics",!R.headers)R.headers={};R.filename=R.filename||"invite.ics",R.headers["Content-Disposition"]="attachment",R.headers["Content-Transfer-Encoding"]="base64"}if(!_)return{attached:N.concat(R||[]),related:[]};else return{attached:N.filter((A)=>!A.cid).concat(R||[]),related:N.filter((A)=>!!A.cid)}}getAlternatives(){let _=[],E,R,N,A,L,U;if(this.mail.text){if(typeof this.mail.text==="object"&&(this.mail.text.content||this.mail.text.path||this.mail.text.href||this.mail.text.raw))E=this.mail.text;else E={content:this.mail.text};E.contentType="text/plain; charset=utf-8"}if(this.mail.watchHtml){if(typeof this.mail.watchHtml==="object"&&(this.mail.watchHtml.content||this.mail.watchHtml.path||this.mail.watchHtml.href||this.mail.watchHtml.raw))N=this.mail.watchHtml;else N={content:this.mail.watchHtml};N.contentType="text/watch-html; charset=utf-8"}if(this.mail.amp){if(typeof this.mail.amp==="object"&&(this.mail.amp.content||this.mail.amp.path||this.mail.amp.href||this.mail.amp.raw))A=this.mail.amp;else A={content:this.mail.amp};A.contentType="text/x-amp-html; charset=utf-8"}if(this.mail.icalEvent){if(typeof this.mail.icalEvent==="object"&&(this.mail.icalEvent.content||this.mail.icalEvent.path||this.mail.icalEvent.href||this.mail.icalEvent.raw))L=this.mail.icalEvent;else L={content:this.mail.icalEvent};if(U={},Object.keys(L).forEach((G)=>{U[G]=L[G]}),U.content&&typeof U.content==="object")U.content._resolve=!0;if(U.filename=!1,U.contentType="text/calendar; charset=utf-8; method="+(U.method||"PUBLISH").toString().trim().toUpperCase(),!U.headers)U.headers={}}if(this.mail.html){if(typeof this.mail.html==="object"&&(this.mail.html.content||this.mail.html.path||this.mail.html.href||this.mail.html.raw))R=this.mail.html;else R={content:this.mail.html};R.contentType="text/html; charset=utf-8"}return[].concat(E||[]).concat(N||[]).concat(A||[]).concat(R||[]).concat(U||[]).concat(this.mail.alternatives||[]).forEach((G)=>{let S;if(/^data:/i.test(G.path||G.href))G=this._processDataUrl(G);if(S={contentType:G.contentType||M2.detectMimeType(G.filename||G.path||G.href||"txt"),contentTransferEncoding:G.contentTransferEncoding},G.filename)S.filename=G.filename;if(/^https?:\/\//i.test(G.path))G.href=G.path,G.path=void 0;if(G.raw)S.raw=G.raw;else if(G.path)S.content={path:G.path};else if(G.href)S.content={href:G.href};else S.content=G.content||"";if(G.encoding)S.encoding=G.encoding;if(G.headers)S.headers=G.headers;_.push(S)}),_}_createMixed(_){let E;if(!_)E=new PA("multipart/mixed",{baseBoundary:this.mail.baseBoundary,textEncoding:this.mail.textEncoding,boundaryPrefix:this.mail.boundaryPrefix,disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});else E=_.createChild("multipart/mixed",{disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});if(this._useAlternative)this._createAlternative(E);else if(this._useRelated)this._createRelated(E);return[].concat(!this._useAlternative&&this._alternatives||[]).concat(this._attachments.attached||[]).forEach((R)=>{if(!this._useRelated||R!==this._htmlNode)this._createContentNode(E,R)}),E}_createAlternative(_){let E;if(!_)E=new PA("multipart/alternative",{baseBoundary:this.mail.baseBoundary,textEncoding:this.mail.textEncoding,boundaryPrefix:this.mail.boundaryPrefix,disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});else E=_.createChild("multipart/alternative",{disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});return this._alternatives.forEach((R)=>{if(this._useRelated&&this._htmlNode===R)this._createRelated(E);else this._createContentNode(E,R)}),E}_createRelated(_){let E;if(!_)E=new PA('multipart/related; type="text/html"',{baseBoundary:this.mail.baseBoundary,textEncoding:this.mail.textEncoding,boundaryPrefix:this.mail.boundaryPrefix,disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});else E=_.createChild('multipart/related; type="text/html"',{disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});return this._createContentNode(E,this._htmlNode),this._attachments.related.forEach((R)=>this._createContentNode(E,R)),E}_createContentNode(_,E){E=E||{},E.content=E.content||"";let R,N=(E.encoding||"utf8").toString().toLowerCase().replace(/[-_\s]/g,"");if(!_)R=new PA(E.contentType,{filename:E.filename,baseBoundary:this.mail.baseBoundary,textEncoding:this.mail.textEncoding,boundaryPrefix:this.mail.boundaryPrefix,disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});else R=_.createChild(E.contentType,{filename:E.filename,textEncoding:this.mail.textEncoding,disableUrlAccess:this.mail.disableUrlAccess,disableFileAccess:this.mail.disableFileAccess,normalizeHeaderKey:this.mail.normalizeHeaderKey,newline:this.mail.newline});if(E.headers)R.addHeader(E.headers);if(E.cid)R.setHeader("Content-Id","<"+E.cid.replace(/[<>]/g,"")+">");if(E.contentTransferEncoding)R.setHeader("Content-Transfer-Encoding",E.contentTransferEncoding);else if(this.mail.encoding&&/^text\//i.test(E.contentType))R.setHeader("Content-Transfer-Encoding",this.mail.encoding);if(!/^text\//i.test(E.contentType)||E.contentDisposition)R.setHeader("Content-Disposition",E.contentDisposition||(E.cid&&/^image\//i.test(E.contentType)?"inline":"attachment"));if(typeof E.content==="string"&&!["utf8","usascii","ascii"].includes(N))E.content=Buffer.from(E.content,N);if(E.raw)R.setRaw(E.raw);else R.setContent(E.content);return R}_processDataUrl(_){let E;if((_.path||_.href).match(/^data:/))E=Ev(_.path||_.href);if(!E)return _;if(_.content=E.data,_.contentType=_.contentType||E.contentType,"path"in _)_.path=!1;if("href"in _)_.href=!1;return _}}IH.exports=AH});var DH=j((yb,GH)=>{var Rv=require("stream").Transform;class UH extends Rv{constructor(_){super(_);this.lastBytes=Buffer.alloc(4),this.headersParsed=!1,this.headerBytes=0,this.headerChunks=[],this.rawHeaders=!1,this.bodySize=0}updateLastBytes(_){let E=this.lastBytes.length,R=Math.min(_.length,E);for(let N=0,A=E-R;N1?N-2R){let N=_.slice(R);this.bodySize+=N.length,setImmediate(()=>this.push(N))}return!1}else this.headerBytes+=_.length,this.headerChunks.push(_);return this.updateLastBytes(_),!1}_transform(_,E,R){if(!_||!_.length)return R();if(typeof _==="string")_=Buffer.from(_,E);let N;try{N=this.checkHeaders(_)}catch(A){return R(A)}if(N)this.bodySize+=_.length,this.push(_);setImmediate(R)}_flush(_){if(this.headerChunks){let E=Buffer.concat(this.headerChunks,this.headerBytes);this.bodySize+=E.length,this.push(E),this.headerChunks=null}_()}parseHeaders(){let _=(this.rawHeaders||"").toString().split(/\r?\n/);for(let E=_.length-1;E>0;E--)if(/^\s/.test(_[E]))_[E-1]+="\n"+_[E],_.splice(E,1);return _.filter((E)=>E.trim()).map((E)=>({key:E.substr(0,E.indexOf(":")).trim().toLowerCase(),line:E}))}}GH.exports=UH});var PH=j((bb,CH)=>{var Nv=require("stream").Transform,Tv=require("crypto");class SH extends Nv{constructor(_){super();_=_||{},this.chunkBuffer=[],this.chunkBufferLen=0,this.bodyHash=Tv.createHash(_.hashAlgo||"sha1"),this.remainder="",this.byteLength=0,this.debug=_.debug,this._debugBody=_.debug?[]:!1}updateHash(_){let E,R="",N="file";for(let L=_.length-1;L>=0;L--){let U=_[L];if(N==="file"&&(U===10||U===13));else if(N==="file"&&(U===9||U===32))N="line";else if(N==="line"&&(U===9||U===32));else if(N==="file"||N==="line"){if(N="body",L===_.length-1)break}if(L===0){if(N==="file"&&(!this.remainder||/[\r\n]$/.test(this.remainder))||N==="line"&&(!this.remainder||/[ \t]$/.test(this.remainder))){this.remainder+=_.toString("binary");return}else if(N==="line"||N==="file"){R=_.toString("binary"),_=!1;break}}if(N!=="body")continue;R=_.slice(L+1).toString("binary"),_=_.slice(0,L+1);break}let A=!!this.remainder;if(_&&!A){for(let L=0,U=_.length;L2)this.bodyHash.update(Buffer.from("\r\n"));if(!this.byteLength)this.push(Buffer.from("\r\n"));this.emit("hash",this.bodyHash.digest("base64"),this.debug?Buffer.concat(this._debugBody):!1),_()}}CH.exports=SH});var WH=j((ib,F2)=>{var Ov=L2(),Av=SA(),Iv=require("crypto");F2.exports=(_,E,R,N)=>{N=N||{};let A="From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive",L=N.headerFieldNames||A,U=YH(_,L,N.skipFields),G=Lv(N.domainName,N.keySelector,U.fieldNames,E,R),S,C;U.headers+="dkim-signature:"+HH(G),S=Iv.createSign(("rsa-"+E).toUpperCase()),S.update(U.headers);try{C=S.sign(N.privateKey,"base64")}catch(Y){return!1}return G+C.replace(/(^.{73}|.{75}(?!\r?\n|\r))/g,"$&\r\n ").trim()};F2.exports.relaxedHeaders=YH;function Lv(_,E,R,N,A){let L=["v=1","a=rsa-"+N,"c=relaxed/relaxed","d="+Ov.toASCII(_),"q=dns/txt","s="+E,"bh="+A,"h="+R].join("; ");return Av.foldLines("DKIM-Signature: "+L,76)+";\r\n b="}function YH(_,E,R){let N=new Set,A=new Set,L=new Map;(R||"").toLowerCase().split(":").forEach((S)=>{A.add(S.trim())}),(E||"").toLowerCase().split(":").filter((S)=>!A.has(S.trim())).forEach((S)=>{N.add(S.trim())});for(let S=_.length-1;S>=0;S--){let C=_[S];if(N.has(C.key)&&!L.has(C.key))L.set(C.key,HH(C.line))}let U=[],G=[];return N.forEach((S)=>{if(L.has(S))G.push(S),U.push(S+":"+L.get(S))}),{headers:U.join("\r\n")+"\r\n",fieldNames:G.join(":")}}function HH(_){return _.substr(_.indexOf(":")+1).replace(/\r?\n/g,"").replace(/\s+/g," ").trim()}});var VH=j((ub,BH)=>{var Uv=DH(),Gv=PH(),Dv=WH(),B2=require("stream").PassThrough,V2=require("fs"),Sv=require("path"),Cv=require("crypto");class MH{constructor(_,E,R,N){this.options=_||{},this.keys=E,this.cacheTreshold=Number(this.options.cacheTreshold)||131072,this.hashAlgo=this.options.hashAlgo||"sha256",this.cacheDir=this.options.cacheDir||!1,this.chunks=[],this.chunklen=0,this.readPos=0,this.cachePath=this.cacheDir?Sv.join(this.cacheDir,"message."+Date.now()+"-"+Cv.randomBytes(14).toString("hex")):!1,this.cache=!1,this.headers=!1,this.bodyHash=!1,this.parser=!1,this.relaxedBody=!1,this.input=R,this.output=N,this.output.usingCache=!1,this.hasErrored=!1,this.input.on("error",(A)=>{this.hasErrored=!0,this.cleanup(),N.emit("error",A)})}cleanup(){if(!this.cache||!this.cachePath)return;V2.unlink(this.cachePath,()=>!1)}createReadCache(){this.cache=V2.createReadStream(this.cachePath),this.cache.once("error",(_)=>{this.cleanup(),this.output.emit("error",_)}),this.cache.once("close",()=>{this.cleanup()}),this.cache.pipe(this.output)}sendNextChunk(){if(this.hasErrored)return;if(this.readPos>=this.chunks.length){if(!this.cache)return this.output.end();return this.createReadCache()}let _=this.chunks[this.readPos++];if(this.output.write(_)===!1)return this.output.once("drain",()=>{this.sendNextChunk()});setImmediate(()=>this.sendNextChunk())}sendSignedOutput(){let _=0,E=()=>{if(_>=this.keys.length)return this.output.write(this.parser.rawHeaders),setImmediate(()=>this.sendNextChunk());let R=this.keys[_++],N=Dv(this.headers,this.hashAlgo,this.bodyHash,{domainName:R.domainName,keySelector:R.keySelector,privateKey:R.privateKey,headerFieldNames:this.options.headerFieldNames,skipFields:this.options.skipFields});if(N)this.output.write(Buffer.from(N+"\r\n"));return setImmediate(E)};if(this.bodyHash&&this.headers)return E();this.output.write(this.parser.rawHeaders),this.sendNextChunk()}createWriteCache(){this.output.usingCache=!0,this.cache=V2.createWriteStream(this.cachePath),this.cache.once("error",(_)=>{this.cleanup(),this.relaxedBody.unpipe(this.cache),this.relaxedBody.on("readable",()=>{while(this.relaxedBody.read()!==null);}),this.hasErrored=!0,this.output.emit("error",_)}),this.cache.once("close",()=>{this.sendSignedOutput()}),this.relaxedBody.removeAllListeners("readable"),this.relaxedBody.pipe(this.cache)}signStream(){this.parser=new Uv,this.relaxedBody=new Gv({hashAlgo:this.hashAlgo}),this.parser.on("headers",(_)=>{this.headers=_}),this.relaxedBody.on("hash",(_)=>{this.bodyHash=_}),this.relaxedBody.on("readable",()=>{let _;if(this.cache)return;while((_=this.relaxedBody.read())!==null)if(this.chunks.push(_),this.chunklen+=_.length,this.chunklen>=this.cacheTreshold&&this.cachePath)return this.createWriteCache()}),this.relaxedBody.on("end",()=>{if(this.cache)return;this.sendSignedOutput()}),this.parser.pipe(this.relaxedBody),setImmediate(()=>this.input.pipe(this.parser))}}class FH{constructor(_){this.options=_||{},this.keys=[].concat(this.options.keys||{domainName:_.domainName,keySelector:_.keySelector,privateKey:_.privateKey})}sign(_,E){let R=new B2,N=_,A=!1;if(Buffer.isBuffer(_))A=_,N=new B2;else if(typeof _==="string")A=Buffer.from(_),N=new B2;let L=this.options;if(E&&Object.keys(E).length)L={},Object.keys(this.options||{}).forEach((G)=>{L[G]=this.options[G]}),Object.keys(E||{}).forEach((G)=>{if(!(G in L))L[G]=E[G]});let U=new MH(L,this.keys,N,R);return setImmediate(()=>{if(U.signStream(),A)setImmediate(()=>{N.end(A)})}),R}}BH.exports=FH});var ZH=j((cb,$H)=>{var KH=require("net"),XH=require("tls"),Pv=require("url");function JH(_,E,R,N){let A=Pv.parse(_),L,U,G;if(L={host:A.hostname,port:Number(A.port)?Number(A.port):A.protocol==="https:"?443:80},A.protocol==="https:")L.rejectUnauthorized=!1,U=XH.connect.bind(XH);else U=KH.connect.bind(KH);let S=!1,C=(M)=>{if(S)return;S=!0;try{G.destroy()}catch(H){}N(M)},Y=()=>{let M=new Error("Proxy socket timed out");M.code="ETIMEDOUT",C(M)};G=U(L,()=>{if(S)return;let M={Host:R+":"+E,Connection:"close"};if(A.auth)M["Proxy-Authorization"]="Basic "+Buffer.from(A.auth).toString("base64");G.write("CONNECT "+R+":"+E+" HTTP/1.1\r\n"+Object.keys(M).map(($)=>$+": "+M[$]).join("\r\n")+"\r\n\r\n");let H="",X=($)=>{let z,w;if(S)return;if(H+=$.toString("binary"),z=H.match(/\r\n\r\n/)){if(G.removeListener("data",X),w=H.substr(z.index+z[0].length),H=H.substr(0,z.index),w)G.unshift(Buffer.from(w,"binary"));if(S=!0,z=H.match(/^HTTP\/\d+\.\d+ (\d+)/i),!z||(z[1]||"").charAt(0)!=="2"){try{G.destroy()}catch(g){}return N(new Error("Invalid response from proxy"+(z&&": "+z[1]||"")))}return G.removeListener("error",C),G.removeListener("timeout",Y),G.setTimeout(0),N(null,G)}};G.on("data",X)}),G.setTimeout(JH.timeout||30000),G.on("timeout",Y),G.once("error",C)}$H.exports=JH});var xH=j((db,zH)=>{var wH=IR(),Yv=W2(),oT=SA();class QH{constructor(_,E){this.mailer=_,this.data={},this.message=null,E=E||{};let R=_.options||{},N=_._defaults||{};Object.keys(E).forEach((A)=>{this.data[A]=E[A]}),this.data.headers=this.data.headers||{},Object.keys(N).forEach((A)=>{if(!(A in this.data))this.data[A]=N[A];else if(A==="headers")Object.keys(N.headers).forEach((L)=>{if(!(L in this.data.headers))this.data.headers[L]=N.headers[L]})}),["disableFileAccess","disableUrlAccess","normalizeHeaderKey"].forEach((A)=>{if(A in R)this.data[A]=R[A]})}resolveContent(..._){return wH.resolveContent(..._)}resolveAll(_){let E=[[this.data,"html"],[this.data,"text"],[this.data,"watchHtml"],[this.data,"amp"],[this.data,"icalEvent"]];if(this.data.alternatives&&this.data.alternatives.length)this.data.alternatives.forEach((G,S)=>{E.push([this.data.alternatives,S])});if(this.data.attachments&&this.data.attachments.length)this.data.attachments.forEach((G,S)=>{if(!G.filename){if(G.filename=(G.path||G.href||"").split("/").pop().split("?").shift()||"attachment-"+(S+1),G.filename.indexOf(".")<0)G.filename+="."+oT.detectExtension(G.contentType)}if(!G.contentType)G.contentType=oT.detectMimeType(G.filename||G.path||G.href||"bin");E.push([this.data.attachments,S])});let R=new Yv;["from","to","cc","bcc","sender","replyTo"].forEach((G)=>{let S;if(this.message)S=[].concat(R._parseAddresses(this.message.getHeader(G==="replyTo"?"reply-to":G))||[]);else if(this.data[G])S=[].concat(R._parseAddresses(this.data[G])||[]);if(S&&S.length)this.data[G]=S;else if(G in this.data)this.data[G]=null}),["from","sender"].forEach((G)=>{if(this.data[G])this.data[G]=this.data[G].shift()});let L=0,U=()=>{if(L>=E.length)return _(null,this.data);let G=E[L++];if(!G[0]||!G[0][G[1]])return U();wH.resolveContent(...G,(S,C)=>{if(S)return _(S);let Y={content:C};if(G[0][G[1]]&&typeof G[0][G[1]]==="object"&&!Buffer.isBuffer(G[0][G[1]]))Object.keys(G[0][G[1]]).forEach((M)=>{if(!(M in Y)&&!["content","path","href","raw"].includes(M))Y[M]=G[0][G[1]][M]});G[0][G[1]]=Y,U()})};setImmediate(()=>U())}normalize(_){let E=this.data.envelope||this.message.getEnvelope(),R=this.message.messageId();this.resolveAll((N,A)=>{if(N)return _(N);if(A.envelope=E,A.messageId=R,["html","text","watchHtml","amp"].forEach((L)=>{if(A[L]&&A[L].content){if(typeof A[L].content==="string")A[L]=A[L].content;else if(Buffer.isBuffer(A[L].content))A[L]=A[L].content.toString()}}),A.icalEvent&&Buffer.isBuffer(A.icalEvent.content))A.icalEvent.content=A.icalEvent.content.toString("base64"),A.icalEvent.encoding="base64";if(A.alternatives&&A.alternatives.length)A.alternatives.forEach((L)=>{if(L&&L.content&&Buffer.isBuffer(L.content))L.content=L.content.toString("base64"),L.encoding="base64"});if(A.attachments&&A.attachments.length)A.attachments.forEach((L)=>{if(L&&L.content&&Buffer.isBuffer(L.content))L.content=L.content.toString("base64"),L.encoding="base64"});if(A.normalizedHeaders={},Object.keys(A.headers||{}).forEach((L)=>{let U=[].concat(A.headers[L]||[]).shift();if(U=U&&U.value||U,U){if(["references","in-reply-to","message-id","content-id"].includes(L))U=this.message._encodeHeaderValue(L,U);A.normalizedHeaders[L]=U}}),A.list&&typeof A.list==="object")this._getListHeaders(A.list).forEach((U)=>{A.normalizedHeaders[U.key]=U.value.map((G)=>G&&G.value||G).join(", ")});if(A.references)A.normalizedHeaders.references=this.message._encodeHeaderValue("references",A.references);if(A.inReplyTo)A.normalizedHeaders["in-reply-to"]=this.message._encodeHeaderValue("in-reply-to",A.inReplyTo);return _(null,A)})}setMailerHeader(){if(!this.message||!this.data.xMailer)return;this.message.setHeader("X-Mailer",this.data.xMailer)}setPriorityHeaders(){if(!this.message||!this.data.priority)return;switch((this.data.priority||"").toString().toLowerCase()){case"high":this.message.setHeader("X-Priority","1 (Highest)"),this.message.setHeader("X-MSMail-Priority","High"),this.message.setHeader("Importance","High");break;case"low":this.message.setHeader("X-Priority","5 (Lowest)"),this.message.setHeader("X-MSMail-Priority","Low"),this.message.setHeader("Importance","Low");break;default:}}setListHeaders(){if(!this.message||!this.data.list||typeof this.data.list!=="object")return;if(this.data.list&&typeof this.data.list==="object")this._getListHeaders(this.data.list).forEach((_)=>{_.value.forEach((E)=>{this.message.addHeader(_.key,E)})})}_getListHeaders(_){return Object.keys(_).map((E)=>({key:"list-"+E.toLowerCase().trim(),value:[].concat(_[E]||[]).map((R)=>({prepared:!0,foldLines:!0,value:[].concat(R||[]).map((N)=>{if(typeof N==="string")N={url:N};if(N&&N.url){if(E.toLowerCase().trim()==="id"){let L=N.comment||"";if(oT.isPlainText(L))L='"'+L+'"';else L=oT.encodeWord(L);return(N.comment?L+" ":"")+this._formatListUrl(N.url).replace(/^<[^:]+\/{,2}/,"")}let A=N.comment||"";if(!oT.isPlainText(A))A=oT.encodeWord(A);return this._formatListUrl(N.url)+(N.comment?" ("+A+")":"")}return""}).filter((N)=>N).join(", ")}))}))}_formatListUrl(_){if(_=_.replace(/[\s<]+|[\s>]+/g,""),/^(https?|mailto|ftp):/.test(_))return"<"+_+">";if(/^[^@]+@[^@]+$/.test(_))return"";return""}}zH.exports=QH});var pH=j((lb,vH)=>{var Hv=require("events"),qH=IR(),Wv=A2(),Mv=LH(),fH=VH(),Fv=ZH(),Bv=require("util"),Vv=require("url"),K2=LN(),Kv=xH(),Xv=require("net"),Jv=require("dns"),$v=require("crypto");class jH extends Hv{constructor(_,E,R){super();if(this.options=E||{},this._defaults=R||{},this._defaultPlugins={compile:[(...N)=>this._convertDataImages(...N)],stream:[]},this._userPlugins={compile:[],stream:[]},this.meta=new Map,this.dkim=this.options.dkim?new fH(this.options.dkim):!1,this.transporter=_,this.transporter.mailer=this,this.logger=qH.getLogger(this.options,{component:this.options.component||"mail"}),this.logger.debug({tnx:"create"},"Creating transport: %s",this.getVersionString()),typeof this.transporter.on==="function")this.transporter.on("log",(N)=>{this.logger.debug({tnx:"transport"},"%s: %s",N.type,N.message)}),this.transporter.on("error",(N)=>{this.logger.error({err:N,tnx:"transport"},"Transport Error: %s",N.message),this.emit("error",N)}),this.transporter.on("idle",(...N)=>{this.emit("idle",...N)});if(["close","isIdle","verify"].forEach((N)=>{this[N]=(...A)=>{if(typeof this.transporter[N]==="function"){if(N==="verify"&&typeof this.getSocket==="function")this.transporter.getSocket=this.getSocket,this.getSocket=!1;return this.transporter[N](...A)}else return this.logger.warn({tnx:"transport",methodName:N},"Non existing method %s called for transport",N),!1}}),this.options.proxy&&typeof this.options.proxy==="string")this.setupProxy(this.options.proxy)}use(_,E){if(_=(_||"").toString(),!this._userPlugins.hasOwnProperty(_))this._userPlugins[_]=[E];else this._userPlugins[_].push(E);return this}sendMail(_,E=null){let R;if(!E)R=new Promise((A,L)=>{E=qH.callbackPromise(A,L)});if(typeof this.getSocket==="function")this.transporter.getSocket=this.getSocket,this.getSocket=!1;let N=new Kv(this,_);return this.logger.debug({tnx:"transport",name:this.transporter.name,version:this.transporter.version,action:"send"},"Sending mail using %s/%s",this.transporter.name,this.transporter.version),this._processPlugins("compile",N,(A)=>{if(A)return this.logger.error({err:A,tnx:"plugin",action:"compile"},"PluginCompile Error: %s",A.message),E(A);N.message=new Mv(N.data).compile(),N.setMailerHeader(),N.setPriorityHeaders(),N.setListHeaders(),this._processPlugins("stream",N,(L)=>{if(L)return this.logger.error({err:L,tnx:"plugin",action:"stream"},"PluginStream Error: %s",L.message),E(L);if(N.data.dkim||this.dkim)N.message.processFunc((U)=>{let G=N.data.dkim?new fH(N.data.dkim):this.dkim;return this.logger.debug({tnx:"DKIM",messageId:N.message.messageId(),dkimDomains:G.keys.map((S)=>S.keySelector+"."+S.domainName).join(", ")},"Signing outgoing message with %s keys",G.keys.length),G.sign(U,N.data._dkim)});this.transporter.send(N,(...U)=>{if(U[0])this.logger.error({err:U[0],tnx:"transport",action:"send"},"Send Error: %s",U[0].message);E(...U)})})}),R}getVersionString(){return Bv.format("%s (%s; +%s; %s/%s)",K2.name,K2.version,K2.homepage,this.transporter.name,this.transporter.version)}_processPlugins(_,E,R){if(_=(_||"").toString(),!this._userPlugins.hasOwnProperty(_))return R();let N=this._userPlugins[_]||[],A=this._defaultPlugins[_]||[];if(N.length)this.logger.debug({tnx:"transaction",pluginCount:N.length,step:_},"Using %s plugins for %s",N.length,_);if(N.length+A.length===0)return R();let L=0,U="default",G=()=>{let S=U==="default"?A:N;if(L>=S.length)if(U==="default"&&N.length)U="user",L=0,S=N;else return R();let C=S[L++];C(E,(Y)=>{if(Y)return R(Y);G()})};G()}setupProxy(_){let E=Vv.parse(_);this.getSocket=(R,N)=>{let A=E.protocol.replace(/:$/,"").toLowerCase();if(this.meta.has("proxy_handler_"+A))return this.meta.get("proxy_handler_"+A)(E,R,N);switch(A){case"http":case"https":Fv(E.href,R.port,R.host,(L,U)=>{if(L)return N(L);return N(null,{connection:U})});return;case"socks":case"socks5":case"socks4":case"socks4a":{if(!this.meta.has("proxy_socks_module"))return N(new Error("Socks module not loaded"));let L=(U)=>{let G=!!this.meta.get("proxy_socks_module").SocksClient,S=G?this.meta.get("proxy_socks_module").SocksClient:this.meta.get("proxy_socks_module"),C=Number(E.protocol.replace(/\D/g,""))||5,Y={proxy:{ipaddress:U,port:Number(E.port),type:C},[G?"destination":"target"]:{host:R.host,port:R.port},command:"connect"};if(E.auth){let M=decodeURIComponent(E.auth.split(":").shift()),H=decodeURIComponent(E.auth.split(":").pop());if(G)Y.proxy.userId=M,Y.proxy.password=H;else if(C===4)Y.userid=M;else Y.authentication={username:M,password:H}}S.createConnection(Y,(M,H)=>{if(M)return N(M);return N(null,{connection:H.socket||H})})};if(Xv.isIP(E.hostname))return L(E.hostname);return Jv.resolve(E.hostname,(U,G)=>{if(U)return N(U);L(Array.isArray(G)?G[0]:G)})}}N(new Error("Unknown proxy configuration"))}}_convertDataImages(_,E){if(!this.options.attachDataUrls&&!_.data.attachDataUrls||!_.data.html)return E();_.resolveContent(_.data,"html",(R,N)=>{if(R)return E(R);let A=0;N=(N||"").toString().replace(/(]{0,1024} src\s{0,20}=[\s"']{0,20})(data:([^;]+);[^"'>\s]+)/gi,(L,U,G,S)=>{let C=$v.randomBytes(10).toString("hex")+"@localhost";if(!_.data.attachments)_.data.attachments=[];if(!Array.isArray(_.data.attachments))_.data.attachments=[].concat(_.data.attachments||[]);return _.data.attachments.push({path:G,cid:C,filename:"image-"+ ++A+"."+Wv.detectExtension(S)}),U+"cid:"+C}),_.data.html=N,E()})}set(_,E){return this.meta.set(_,E)}get(_){return this.meta.get(_)}}vH.exports=jH});var mH=j((nb,kH)=>{var Zv=require("stream"),wv=Zv.Transform;class hH extends wv{constructor(_){super(_);this.options=_||{},this._curLine="",this.inByteCount=0,this.outByteCount=0,this.lastByte=!1}_transform(_,E,R){let N=[],A=0,L,U,G=0,S;if(!_||!_.length)return R();if(typeof _==="string")_=Buffer.from(_);this.inByteCount+=_.length;for(L=0,U=_.length;LG)S=_.slice(G,L),N.push(S),A+=S.length+2;else A+=2;N.push(Buffer.from("\r\n")),G=L+1}}if(A){if(G<_.length)S=_.slice(G),N.push(S),A+=S.length;this.outByteCount+=A,this.push(Buffer.concat(N,A))}else this.outByteCount+=_.length,this.push(_);this.lastByte=_[_.length-1],R()}_flush(_){let E;if(this.lastByte===10)E=Buffer.from(".\r\n");else if(this.lastByte===13)E=Buffer.from("\n.\r\n");else E=Buffer.from("\r\n.\r\n");this.outByteCount+=E.length,this.push(E),_()}}kH.exports=hH});var lL=j((ob,uH)=>{var Qv=LN(),zv=require("events").EventEmitter,gH=require("net"),yH=require("tls"),xv=require("os"),bH=require("crypto"),qv=mH(),fv=require("stream").PassThrough,eN=IR();class iH extends zv{constructor(_){super(_);if(this.id=bH.randomBytes(8).toString("base64").replace(/\W/g,""),this.stage="init",this.options=_||{},this.secureConnection=!!this.options.secure,this.alreadySecured=!!this.options.secured,this.port=Number(this.options.port)||(this.secureConnection?465:587),this.host=this.options.host||"localhost",this.servername=this.options.servername?this.options.servername:!gH.isIP(this.host)?this.host:!1,this.allowInternalNetworkInterfaces=this.options.allowInternalNetworkInterfaces||!1,typeof this.options.secure==="undefined"&&this.port===465)this.secureConnection=!0;this.name=this.options.name||this._getHostname(),this.logger=eN.getLogger(this.options,{component:this.options.component||"smtp-connection",sid:this.id}),this.customAuth=new Map,Object.keys(this.options.customAuth||{}).forEach((E)=>{let R=(E||"").toString().trim().toUpperCase();if(!R)return;this.customAuth.set(R,this.options.customAuth[E])}),this.version=Qv.version,this.authenticated=!1,this.destroyed=!1,this.secure=!!this.secureConnection,this._remainder="",this._responseQueue=[],this.lastServerResponse=!1,this._socket=!1,this._supportedAuth=[],this.allowsAuth=!1,this._envelope=!1,this._supportedExtensions=[],this._maxAllowedSize=0,this._responseActions=[],this._recipientQueue=[],this._greetingTimeout=!1,this._connectionTimeout=!1,this._destroyed=!1,this._closing=!1,this._onSocketData=(E)=>this._onData(E),this._onSocketError=(E)=>this._onError(E,"ESOCKET",!1,"CONN"),this._onSocketClose=()=>this._onClose(),this._onSocketEnd=()=>this._onEnd(),this._onSocketTimeout=()=>this._onTimeout()}connect(_){if(typeof _==="function"){this.once("connect",()=>{this.logger.debug({tnx:"smtp"},"SMTP handshake finished"),_()});let N=this._isDestroyedMessage("connect");if(N)return _(this._formatError(N,"ECONNECTION",!1,"CONN"))}let E={port:this.port,host:this.host,allowInternalNetworkInterfaces:this.allowInternalNetworkInterfaces,timeout:this.options.dnsTimeout||30000};if(this.options.localAddress)E.localAddress=this.options.localAddress;let R=()=>{this._connectionTimeout=setTimeout(()=>{this._onError("Connection timeout","ETIMEDOUT",!1,"CONN")},this.options.connectionTimeout||120000),this._socket.on("error",this._onSocketError)};if(this.options.connection){if(this._socket=this.options.connection,this.secureConnection&&!this.alreadySecured)setImmediate(()=>this._upgradeConnection((N)=>{if(N){this._onError(new Error("Error initiating TLS - "+(N.message||N)),"ETLS",!1,"CONN");return}this._onConnect()}));else setImmediate(()=>this._onConnect());return}else if(this.options.socket)return this._socket=this.options.socket,eN.resolveHostname(E,(N,A)=>{if(N)return setImmediate(()=>this._onError(N,"EDNS",!1,"CONN"));this.logger.debug({tnx:"dns",source:E.host,resolved:A.host,cached:!!A.cached},"Resolved %s as %s [cache %s]",E.host,A.host,A.cached?"hit":"miss"),Object.keys(A).forEach((L)=>{if(L.charAt(0)!=="_"&&A[L])E[L]=A[L]});try{this._socket.connect(this.port,this.host,()=>{this._socket.setKeepAlive(!0),this._onConnect()}),R()}catch(L){return setImmediate(()=>this._onError(L,"ECONNECTION",!1,"CONN"))}});else if(this.secureConnection){if(this.options.tls)Object.keys(this.options.tls).forEach((N)=>{E[N]=this.options.tls[N]});if(this.servername&&!E.servername)E.servername=this.servername;return eN.resolveHostname(E,(N,A)=>{if(N)return setImmediate(()=>this._onError(N,"EDNS",!1,"CONN"));this.logger.debug({tnx:"dns",source:E.host,resolved:A.host,cached:!!A.cached},"Resolved %s as %s [cache %s]",E.host,A.host,A.cached?"hit":"miss"),Object.keys(A).forEach((L)=>{if(L.charAt(0)!=="_"&&A[L])E[L]=A[L]});try{this._socket=yH.connect(E,()=>{this._socket.setKeepAlive(!0),this._onConnect()}),R()}catch(L){return setImmediate(()=>this._onError(L,"ECONNECTION",!1,"CONN"))}})}else return eN.resolveHostname(E,(N,A)=>{if(N)return setImmediate(()=>this._onError(N,"EDNS",!1,"CONN"));this.logger.debug({tnx:"dns",source:E.host,resolved:A.host,cached:!!A.cached},"Resolved %s as %s [cache %s]",E.host,A.host,A.cached?"hit":"miss"),Object.keys(A).forEach((L)=>{if(L.charAt(0)!=="_"&&A[L])E[L]=A[L]});try{this._socket=gH.connect(E,()=>{this._socket.setKeepAlive(!0),this._onConnect()}),R()}catch(L){return setImmediate(()=>this._onError(L,"ECONNECTION",!1,"CONN"))}})}quit(){this._sendCommand("QUIT"),this._responseActions.push(this.close)}close(){if(clearTimeout(this._connectionTimeout),clearTimeout(this._greetingTimeout),this._responseActions=[],this._closing)return;this._closing=!0;let _="end";if(this.stage==="init")_="destroy";this.logger.debug({tnx:"smtp"},'Closing connection to the server using "%s"',_);let E=this._socket&&this._socket.socket||this._socket;if(E&&!E.destroyed)try{this._socket[_]()}catch(R){}this._destroy()}login(_,E){let R=this._isDestroyedMessage("login");if(R)return E(this._formatError(R,"ECONNECTION",!1,"API"));if(this._auth=_||{},this._authMethod=(this._auth.method||"").toString().trim().toUpperCase()||!1,!this._authMethod&&this._auth.oauth2&&!this._auth.credentials)this._authMethod="XOAUTH2";else if(!this._authMethod||this._authMethod==="XOAUTH2"&&!this._auth.oauth2)this._authMethod=(this._supportedAuth[0]||"PLAIN").toUpperCase().trim();if(this._authMethod!=="XOAUTH2"&&(!this._auth.credentials||!this._auth.credentials.user||!this._auth.credentials.pass))if(this._auth.user&&this._auth.pass||this.customAuth.has(this._authMethod))this._auth.credentials={user:this._auth.user,pass:this._auth.pass,options:this._auth.options};else return E(this._formatError('Missing credentials for "'+this._authMethod+'"',"EAUTH",!1,"API"));if(this.customAuth.has(this._authMethod)){let N=this.customAuth.get(this._authMethod),A,L=!1,U=()=>{if(L)return;L=!0,this.logger.info({tnx:"smtp",username:this._auth.user,action:"authenticated",method:this._authMethod},"User %s authenticated",JSON.stringify(this._auth.user)),this.authenticated=!0,E(null,!0)},G=(C)=>{if(L)return;L=!0,E(this._formatError(C,"EAUTH",A,"AUTH "+this._authMethod))},S=N({auth:this._auth,method:this._authMethod,extensions:[].concat(this._supportedExtensions),authMethods:[].concat(this._supportedAuth),maxAllowedSize:this._maxAllowedSize||!1,sendCommand:(C,Y)=>{let M;if(!Y)M=new Promise((H,X)=>{Y=eN.callbackPromise(H,X)});return this._responseActions.push((H)=>{A=H;let X=H.match(/^(\d+)(?:\s(\d+\.\d+\.\d+))?\s/),$={command:C,response:H};if(X){if($.status=Number(X[1])||0,X[2])$.code=X[2];$.text=H.substr(X[0].length)}else $.text=H,$.status=0;Y(null,$)}),setImmediate(()=>this._sendCommand(C)),M},resolve:U,reject:G});if(S&&typeof S.catch==="function")S.then(U).catch(G);return}switch(this._authMethod){case"XOAUTH2":this._handleXOauth2Token(!1,E);return;case"LOGIN":this._responseActions.push((N)=>{this._actionAUTH_LOGIN_USER(N,E)}),this._sendCommand("AUTH LOGIN");return;case"PLAIN":this._responseActions.push((N)=>{this._actionAUTHComplete(N,E)}),this._sendCommand("AUTH PLAIN "+Buffer.from("\0"+this._auth.credentials.user+"\0"+this._auth.credentials.pass,"utf-8").toString("base64"),"AUTH PLAIN "+Buffer.from("\0"+this._auth.credentials.user+"\0"+"/* secret */","utf-8").toString("base64"));return;case"CRAM-MD5":this._responseActions.push((N)=>{this._actionAUTH_CRAM_MD5(N,E)}),this._sendCommand("AUTH CRAM-MD5");return}return E(this._formatError('Unknown authentication method "'+this._authMethod+'"',"EAUTH",!1,"API"))}send(_,E,R){if(!E)return R(this._formatError("Empty message","EMESSAGE",!1,"API"));let N=this._isDestroyedMessage("send message");if(N)return R(this._formatError(N,"ECONNECTION",!1,"API"));if(this._maxAllowedSize&&_.size>this._maxAllowedSize)return setImmediate(()=>{R(this._formatError("Message size larger than allowed "+this._maxAllowedSize,"EMESSAGE",!1,"MAIL FROM"))});let A=!1,L=function(){if(A)return;A=!0,R(...arguments)};if(typeof E.on==="function")E.on("error",(G)=>L(this._formatError(G,"ESTREAM",!1,"API")));let U=Date.now();this._setEnvelope(_,(G,S)=>{if(G)return L(G);let C=Date.now(),Y=this._createSendStream((M,H)=>{if(M)return L(M);return S.envelopeTime=C-U,S.messageTime=Date.now()-C,S.messageSize=Y.outByteCount,S.response=H,L(null,S)});if(typeof E.pipe==="function")E.pipe(Y);else Y.write(E),Y.end()})}reset(_){this._sendCommand("RSET"),this._responseActions.push((E)=>{if(E.charAt(0)!=="2")return _(this._formatError("Could not reset session state. response="+E,"EPROTOCOL",E,"RSET"));return this._envelope=!1,_(null,!0)})}_onConnect(){if(clearTimeout(this._connectionTimeout),this.logger.info({tnx:"network",localAddress:this._socket.localAddress,localPort:this._socket.localPort,remoteAddress:this._socket.remoteAddress,remotePort:this._socket.remotePort},"%s established to %s:%s",this.secure?"Secure connection":"Connection",this._socket.remoteAddress,this._socket.remotePort),this._destroyed){this.close();return}this.stage="connected",this._socket.removeListener("data",this._onSocketData),this._socket.removeListener("timeout",this._onSocketTimeout),this._socket.removeListener("close",this._onSocketClose),this._socket.removeListener("end",this._onSocketEnd),this._socket.on("data",this._onSocketData),this._socket.once("close",this._onSocketClose),this._socket.once("end",this._onSocketEnd),this._socket.setTimeout(this.options.socketTimeout||600000),this._socket.on("timeout",this._onSocketTimeout),this._greetingTimeout=setTimeout(()=>{if(this._socket&&!this._destroyed&&this._responseActions[0]===this._actionGreeting)this._onError("Greeting never received","ETIMEDOUT",!1,"CONN")},this.options.greetingTimeout||30000),this._responseActions.push(this._actionGreeting),this._socket.resume()}_onData(_){if(this._destroyed||!_||!_.length)return;let E=(_||"").toString("binary"),R=(this._remainder+E).split(/\r?\n/),N;this._remainder=R.pop();for(let A=0,L=R.length;A{R[N]=this.options.tls[N]}),this.servername&&!R.servername)R.servername=this.servername;this.upgrading=!0;try{this._socket=yH.connect(R,()=>{return this.secure=!0,this.upgrading=!1,this._socket.on("data",this._onSocketData),E.removeListener("close",this._onSocketClose),E.removeListener("end",this._onSocketEnd),_(null,!0)})}catch(N){return _(N)}this._socket.on("error",this._onSocketError),this._socket.once("close",this._onSocketClose),this._socket.once("end",this._onSocketEnd),this._socket.setTimeout(this.options.socketTimeout||600000),this._socket.on("timeout",this._onSocketTimeout),E.resume()}_processResponse(){if(!this._responseQueue.length)return!1;let _=this.lastServerResponse=(this._responseQueue.shift()||"").toString();if(/^\d+-/.test(_.split("\n").pop()))return;if(this.options.debug||this.options.transactionLog)this.logger.debug({tnx:"server"},_.replace(/\r?\n$/,""));if(!_.trim())setImmediate(()=>this._processResponse());let E=this._responseActions.shift();if(typeof E==="function")E.call(this,_),setImmediate(()=>this._processResponse());else return this._onError(new Error("Unexpected Response"),"EPROTOCOL",_,"CONN")}_sendCommand(_,E){if(this._destroyed)return;if(this._socket.destroyed)return this.close();if(this.options.debug||this.options.transactionLog)this.logger.debug({tnx:"client"},(E||_||"").toString().replace(/\r?\n$/,""));this._socket.write(Buffer.from(_+"\r\n","utf-8"))}_setEnvelope(_,E){let R=[],N=!1;if(this._envelope=_||{},this._envelope.from=(this._envelope.from&&this._envelope.from.address||this._envelope.from||"").toString().trim(),this._envelope.to=[].concat(this._envelope.to||[]).map((A)=>(A&&A.address||A||"").toString().trim()),!this._envelope.to.length)return E(this._formatError("No recipients defined","EENVELOPE",!1,"API"));if(this._envelope.from&&/[\r\n<>]/.test(this._envelope.from))return E(this._formatError("Invalid sender "+JSON.stringify(this._envelope.from),"EENVELOPE",!1,"API"));if(/[\x80-\uFFFF]/.test(this._envelope.from))N=!0;for(let A=0,L=this._envelope.to.length;A]/.test(this._envelope.to[A]))return E(this._formatError("Invalid recipient "+JSON.stringify(this._envelope.to[A]),"EENVELOPE",!1,"API"));if(/[\x80-\uFFFF]/.test(this._envelope.to[A]))N=!0}if(this._envelope.rcptQueue=JSON.parse(JSON.stringify(this._envelope.to||[])),this._envelope.rejected=[],this._envelope.rejectedErrors=[],this._envelope.accepted=[],this._envelope.dsn)try{this._envelope.dsn=this._setDsnEnvelope(this._envelope.dsn)}catch(A){return E(this._formatError("Invalid DSN "+A.message,"EENVELOPE",!1,"API"))}if(this._responseActions.push((A)=>{this._actionMAIL(A,E)}),N&&this._supportedExtensions.includes("SMTPUTF8"))R.push("SMTPUTF8"),this._usingSmtpUtf8=!0;if(this._envelope.use8BitMime&&this._supportedExtensions.includes("8BITMIME"))R.push("BODY=8BITMIME"),this._using8BitMime=!0;if(this._envelope.size&&this._supportedExtensions.includes("SIZE"))R.push("SIZE="+this._envelope.size);if(this._envelope.dsn&&this._supportedExtensions.includes("DSN")){if(this._envelope.dsn.ret)R.push("RET="+eN.encodeXText(this._envelope.dsn.ret));if(this._envelope.dsn.envid)R.push("ENVID="+eN.encodeXText(this._envelope.dsn.envid))}this._sendCommand("MAIL FROM:<"+this._envelope.from+">"+(R.length?" "+R.join(" "):""))}_setDsnEnvelope(_){let E=(_.ret||_.return||"").toString().toUpperCase()||null;if(E)switch(E){case"HDRS":case"HEADERS":E="HDRS";break;case"FULL":case"BODY":E="FULL";break}if(E&&!["FULL","HDRS"].includes(E))throw new Error("ret: "+JSON.stringify(E));let R=(_.envid||_.id||"").toString()||null,N=_.notify||null;if(N){if(typeof N==="string")N=N.split(",");N=N.map((G)=>G.trim().toUpperCase());let L=["NEVER","SUCCESS","FAILURE","DELAY"];if(N.filter((G)=>!L.includes(G)).length||N.length>1&&N.includes("NEVER"))throw new Error("notify: "+JSON.stringify(N.join(",")));N=N.join(",")}let A=(_.recipient||_.orcpt||"").toString()||null;if(A&&A.indexOf(";")<0)A="rfc822;"+A;return{ret:E,envid:R,notify:N,orcpt:A}}_getDsnRcptToArgs(){let _=[];if(this._envelope.dsn&&this._supportedExtensions.includes("DSN")){if(this._envelope.dsn.notify)_.push("NOTIFY="+eN.encodeXText(this._envelope.dsn.notify));if(this._envelope.dsn.orcpt)_.push("ORCPT="+eN.encodeXText(this._envelope.dsn.orcpt))}return _.length?" "+_.join(" "):""}_createSendStream(_){let E=new qv,R;if(this.options.lmtp)this._envelope.accepted.forEach((N,A)=>{let L=A===this._envelope.accepted.length-1;this._responseActions.push((U)=>{this._actionLMTPStream(N,L,U,_)})});else this._responseActions.push((N)=>{this._actionSMTPStream(N,_)});if(E.pipe(this._socket,{end:!1}),this.options.debug)R=new fv,R.on("readable",()=>{let N;while(N=R.read())this.logger.debug({tnx:"message"},N.toString("binary").replace(/\r?\n$/,""))}),E.pipe(R);return E.once("end",()=>{this.logger.info({tnx:"message",inByteCount:E.inByteCount,outByteCount:E.outByteCount},"<%s bytes encoded mime message (source size %s bytes)>",E.outByteCount,E.inByteCount)}),E}_actionGreeting(_){if(clearTimeout(this._greetingTimeout),_.substr(0,3)!=="220"){this._onError(new Error("Invalid greeting. response="+_),"EPROTOCOL",_,"CONN");return}if(this.options.lmtp)this._responseActions.push(this._actionLHLO),this._sendCommand("LHLO "+this.name);else this._responseActions.push(this._actionEHLO),this._sendCommand("EHLO "+this.name)}_actionLHLO(_){if(_.charAt(0)!=="2"){this._onError(new Error("Invalid LHLO. response="+_),"EPROTOCOL",_,"LHLO");return}this._actionEHLO(_)}_actionEHLO(_){let E;if(_.substr(0,3)==="421"){this._onError(new Error("Server terminates connection. response="+_),"ECONNECTION",_,"EHLO");return}if(_.charAt(0)!=="2"){if(this.options.requireTLS){this._onError(new Error("EHLO failed but HELO does not support required STARTTLS. response="+_),"ECONNECTION",_,"EHLO");return}this._responseActions.push(this._actionHELO),this._sendCommand("HELO "+this.name);return}if(this._ehloLines=_.split(/\r?\n/).map((R)=>R.replace(/^\d+[ -]/,"").trim()).filter((R)=>R).slice(1),!this.secure&&!this.options.ignoreTLS&&(/[ -]STARTTLS\b/im.test(_)||this.options.requireTLS)){this._sendCommand("STARTTLS"),this._responseActions.push(this._actionSTARTTLS);return}if(/[ -]SMTPUTF8\b/im.test(_))this._supportedExtensions.push("SMTPUTF8");if(/[ -]DSN\b/im.test(_))this._supportedExtensions.push("DSN");if(/[ -]8BITMIME\b/im.test(_))this._supportedExtensions.push("8BITMIME");if(/[ -]PIPELINING\b/im.test(_))this._supportedExtensions.push("PIPELINING");if(/[ -]AUTH\b/i.test(_))this.allowsAuth=!0;if(/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)PLAIN/i.test(_))this._supportedAuth.push("PLAIN");if(/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)LOGIN/i.test(_))this._supportedAuth.push("LOGIN");if(/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)CRAM-MD5/i.test(_))this._supportedAuth.push("CRAM-MD5");if(/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)XOAUTH2/i.test(_))this._supportedAuth.push("XOAUTH2");if(E=_.match(/[ -]SIZE(?:[ \t]+(\d+))?/im))this._supportedExtensions.push("SIZE"),this._maxAllowedSize=Number(E[1])||0;this.emit("connect")}_actionHELO(_){if(_.charAt(0)!=="2"){this._onError(new Error("Invalid HELO. response="+_),"EPROTOCOL",_,"HELO");return}this.allowsAuth=!0,this.emit("connect")}_actionSTARTTLS(_){if(_.charAt(0)!=="2"){if(this.options.opportunisticTLS)return this.logger.info({tnx:"smtp"},"Failed STARTTLS upgrade, continuing unencrypted"),this.emit("connect");this._onError(new Error("Error upgrading connection with STARTTLS"),"ETLS",_,"STARTTLS");return}this._upgradeConnection((E,R)=>{if(E){this._onError(new Error("Error initiating TLS - "+(E.message||E)),"ETLS",!1,"STARTTLS");return}if(this.logger.info({tnx:"smtp"},"Connection upgraded with STARTTLS"),R)if(this.options.lmtp)this._responseActions.push(this._actionLHLO),this._sendCommand("LHLO "+this.name);else this._responseActions.push(this._actionEHLO),this._sendCommand("EHLO "+this.name);else this.emit("connect")})}_actionAUTH_LOGIN_USER(_,E){if(!/^334[ -]/.test(_)){E(this._formatError('Invalid login sequence while waiting for "334 VXNlcm5hbWU6"',"EAUTH",_,"AUTH LOGIN"));return}this._responseActions.push((R)=>{this._actionAUTH_LOGIN_PASS(R,E)}),this._sendCommand(Buffer.from(this._auth.credentials.user+"","utf-8").toString("base64"))}_actionAUTH_CRAM_MD5(_,E){let R=_.match(/^334\s+(.+)$/),N="";if(!R)return E(this._formatError("Invalid login sequence while waiting for server challenge string","EAUTH",_,"AUTH CRAM-MD5"));else N=R[1];let A=Buffer.from(N,"base64").toString("ascii"),L=bH.createHmac("md5",this._auth.credentials.pass);L.update(A);let U=this._auth.credentials.user+" "+L.digest("hex");this._responseActions.push((G)=>{this._actionAUTH_CRAM_MD5_PASS(G,E)}),this._sendCommand(Buffer.from(U).toString("base64"),Buffer.from(this._auth.credentials.user+" /* secret */").toString("base64"))}_actionAUTH_CRAM_MD5_PASS(_,E){if(!_.match(/^235\s+/))return E(this._formatError('Invalid login sequence while waiting for "235"',"EAUTH",_,"AUTH CRAM-MD5"));this.logger.info({tnx:"smtp",username:this._auth.user,action:"authenticated",method:this._authMethod},"User %s authenticated",JSON.stringify(this._auth.user)),this.authenticated=!0,E(null,!0)}_actionAUTH_LOGIN_PASS(_,E){if(!/^334[ -]/.test(_))return E(this._formatError('Invalid login sequence while waiting for "334 UGFzc3dvcmQ6"',"EAUTH",_,"AUTH LOGIN"));this._responseActions.push((R)=>{this._actionAUTHComplete(R,E)}),this._sendCommand(Buffer.from((this._auth.credentials.pass||"").toString(),"utf-8").toString("base64"),Buffer.from("/* secret */","utf-8").toString("base64"))}_actionAUTHComplete(_,E,R){if(!R&&typeof E==="function")R=E,E=!1;if(_.substr(0,3)==="334"){this._responseActions.push((N)=>{if(E||this._authMethod!=="XOAUTH2")this._actionAUTHComplete(N,!0,R);else setImmediate(()=>this._handleXOauth2Token(!0,R))}),this._sendCommand("");return}if(_.charAt(0)!=="2")return this.logger.info({tnx:"smtp",username:this._auth.user,action:"authfail",method:this._authMethod},"User %s failed to authenticate",JSON.stringify(this._auth.user)),R(this._formatError("Invalid login","EAUTH",_,"AUTH "+this._authMethod));this.logger.info({tnx:"smtp",username:this._auth.user,action:"authenticated",method:this._authMethod},"User %s authenticated",JSON.stringify(this._auth.user)),this.authenticated=!0,R(null,!0)}_actionMAIL(_,E){let R,N;if(Number(_.charAt(0))!==2){if(this._usingSmtpUtf8&&/^550 /.test(_)&&/[\x80-\uFFFF]/.test(this._envelope.from))R="Internationalized mailbox name not allowed";else R="Mail command failed";return E(this._formatError(R,"EENVELOPE",_,"MAIL FROM"))}if(!this._envelope.rcptQueue.length)return E(this._formatError("Can't send mail - no recipients defined","EENVELOPE",!1,"API"));else if(this._recipientQueue=[],this._supportedExtensions.includes("PIPELINING"))while(this._envelope.rcptQueue.length)N=this._envelope.rcptQueue.shift(),this._recipientQueue.push(N),this._responseActions.push((A)=>{this._actionRCPT(A,E)}),this._sendCommand("RCPT TO:<"+N+">"+this._getDsnRcptToArgs());else N=this._envelope.rcptQueue.shift(),this._recipientQueue.push(N),this._responseActions.push((A)=>{this._actionRCPT(A,E)}),this._sendCommand("RCPT TO:<"+N+">"+this._getDsnRcptToArgs())}_actionRCPT(_,E){let R,N,A=this._recipientQueue.shift();if(Number(_.charAt(0))!==2){if(this._usingSmtpUtf8&&/^553 /.test(_)&&/[\x80-\uFFFF]/.test(A))R="Internationalized mailbox name not allowed";else R="Recipient command failed";this._envelope.rejected.push(A),N=this._formatError(R,"EENVELOPE",_,"RCPT TO"),N.recipient=A,this._envelope.rejectedErrors.push(N)}else this._envelope.accepted.push(A);if(!this._envelope.rcptQueue.length&&!this._recipientQueue.length)if(this._envelope.rejected.length{this._actionDATA(L,E)}),this._sendCommand("DATA");else return N=this._formatError("Can't send mail - all recipients were rejected","EENVELOPE",_,"RCPT TO"),N.rejected=this._envelope.rejected,N.rejectedErrors=this._envelope.rejectedErrors,E(N);else if(this._envelope.rcptQueue.length)A=this._envelope.rcptQueue.shift(),this._recipientQueue.push(A),this._responseActions.push((L)=>{this._actionRCPT(L,E)}),this._sendCommand("RCPT TO:<"+A+">"+this._getDsnRcptToArgs())}_actionDATA(_,E){if(!/^[23]/.test(_))return E(this._formatError("Data command failed","EENVELOPE",_,"DATA"));let R={accepted:this._envelope.accepted,rejected:this._envelope.rejected};if(this._ehloLines&&this._ehloLines.length)R.ehlo=this._ehloLines;if(this._envelope.rejectedErrors.length)R.rejectedErrors=this._envelope.rejectedErrors;E(null,R)}_actionSMTPStream(_,E){if(Number(_.charAt(0))!==2)return E(this._formatError("Message failed","EMESSAGE",_,"DATA"));else return E(null,_)}_actionLMTPStream(_,E,R,N){let A;if(Number(R.charAt(0))!==2){A=this._formatError("Message failed for recipient "+_,"EMESSAGE",R,"DATA"),A.recipient=_,this._envelope.rejected.push(_),this._envelope.rejectedErrors.push(A);for(let L=0,U=this._envelope.accepted.length;L{if(R)return this.logger.info({tnx:"smtp",username:this._auth.user,action:"authfail",method:this._authMethod},"User %s failed to authenticate",JSON.stringify(this._auth.user)),E(this._formatError(R,"EAUTH",!1,"AUTH XOAUTH2"));this._responseActions.push((A)=>{this._actionAUTHComplete(A,_,E)}),this._sendCommand("AUTH XOAUTH2 "+this._auth.oauth2.buildXOAuth2Token(N),"AUTH XOAUTH2 "+this._auth.oauth2.buildXOAuth2Token("/* secret */"))})}_isDestroyedMessage(_){if(this._destroyed)return"Cannot "+_+" - smtp connection is already destroyed.";if(this._socket){if(this._socket.destroyed)return"Cannot "+_+" - smtp connection socket is already destroyed.";if(!this._socket.writable)return"Cannot "+_+" - smtp connection socket is already half-closed."}}_getHostname(){let _;try{_=xv.hostname()||""}catch(E){_="localhost"}if(!_||_.indexOf(".")<0)_="[127.0.0.1]";if(_.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/))_="["+_+"]";return _}}uH.exports=iH});var X2=j((sb,dH)=>{var jv=require("stream").Stream,vv=UA(),pv=require("crypto"),hv=IR();class cH extends jv{constructor(_,E){super();if(this.options=_||{},_&&_.serviceClient){if(!_.privateKey||!_.user){setImmediate(()=>this.emit("error",new Error('Options "privateKey" and "user" are required for service account!')));return}let R=Math.min(Math.max(Number(this.options.serviceRequestTimeout)||0,0),3600);this.options.serviceRequestTimeout=R||300}if(this.logger=hv.getLogger({logger:E},{component:this.options.component||"OAuth2"}),this.provisionCallback=typeof this.options.provisionCallback==="function"?this.options.provisionCallback:!1,this.options.accessUrl=this.options.accessUrl||"https://accounts.google.com/o/oauth2/token",this.options.customHeaders=this.options.customHeaders||{},this.options.customParams=this.options.customParams||{},this.accessToken=this.options.accessToken||!1,this.options.expires&&Number(this.options.expires))this.expires=this.options.expires;else{let R=Math.max(Number(this.options.timeout)||0,0);this.expires=R&&Date.now()+R*1000||0}}getToken(_,E){if(!_&&this.accessToken&&(!this.expires||this.expires>Date.now()))return E(null,this.accessToken);let R=(...N)=>{if(N[0])this.logger.error({err:N[0],tnx:"OAUTH2",user:this.options.user,action:"renew"},"Failed generating new Access Token for %s",this.options.user);else this.logger.info({tnx:"OAUTH2",user:this.options.user,action:"renew"},"Generated new Access Token for %s",this.options.user);E(...N)};if(this.provisionCallback)this.provisionCallback(this.options.user,!!_,(N,A,L)=>{if(!N&&A)this.accessToken=A,this.expires=L||0;R(N,A)});else this.generateToken(R)}updateToken(_,E){this.accessToken=_,E=Math.max(Number(E)||0,0),this.expires=E&&Date.now()+E*1000||0,this.emit("token",{user:this.options.user,accessToken:_||"",expires:this.expires})}generateToken(_){let E,R;if(this.options.serviceClient){let N=Math.floor(Date.now()/1000),A={iss:this.options.serviceClient,scope:this.options.scope||"https://mail.google.com/",sub:this.options.user,aud:this.options.accessUrl,iat:N,exp:N+this.options.serviceRequestTimeout},L;try{L=this.jwtSignRS256(A)}catch(U){return _(new Error("Can't generate token. Check your auth options"))}E={grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",assertion:L},R={grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",assertion:A}}else{if(!this.options.refreshToken)return _(new Error("Can't create new access token for user"));E={client_id:this.options.clientId||"",client_secret:this.options.clientSecret||"",refresh_token:this.options.refreshToken,grant_type:"refresh_token"},R={client_id:this.options.clientId||"",client_secret:(this.options.clientSecret||"").substr(0,6)+"...",refresh_token:(this.options.refreshToken||"").substr(0,6)+"...",grant_type:"refresh_token"}}Object.keys(this.options.customParams).forEach((N)=>{E[N]=this.options.customParams[N],R[N]=this.options.customParams[N]}),this.logger.debug({tnx:"OAUTH2",user:this.options.user,action:"generate"},"Requesting token using: %s",JSON.stringify(R)),this.postRequest(this.options.accessUrl,E,this.options,(N,A)=>{let L;if(N)return _(N);try{L=JSON.parse(A.toString())}catch(G){return _(G)}if(!L||typeof L!=="object")return this.logger.debug({tnx:"OAUTH2",user:this.options.user,action:"post"},"Response: %s",(A||"").toString()),_(new Error("Invalid authentication response"));let U={};if(Object.keys(L).forEach((G)=>{if(G!=="access_token")U[G]=L[G];else U[G]=(L[G]||"").toString().substr(0,6)+"..."}),this.logger.debug({tnx:"OAUTH2",user:this.options.user,action:"post"},"Response: %s",JSON.stringify(U)),L.error){let G=L.error;if(L.error_description)G+=": "+L.error_description;if(L.error_uri)G+=" ("+L.error_uri+")";return _(new Error(G))}if(L.access_token)return this.updateToken(L.access_token,L.expires_in),_(null,this.accessToken);return _(new Error("No access token"))})}buildXOAuth2Token(_){let E=["user="+(this.options.user||""),"auth=Bearer "+(_||this.accessToken),"",""];return Buffer.from(E.join("\x01"),"utf-8").toString("base64")}postRequest(_,E,R,N){let A=!1,L=[],U=0,G=vv(_,{method:"post",headers:R.customHeaders,body:E,allowErrorResponse:!0});G.on("readable",()=>{let S;while((S=G.read())!==null)L.push(S),U+=S.length}),G.once("error",(S)=>{if(A)return;return A=!0,N(S)}),G.once("end",()=>{if(A)return;return A=!0,N(null,Buffer.concat(L,U))})}toBase64URL(_){if(typeof _==="string")_=Buffer.from(_);return _.toString("base64").replace(/[=]+/g,"").replace(/\+/g,"-").replace(/\//g,"_")}jwtSignRS256(_){_=['{"alg":"RS256","typ":"JWT"}',JSON.stringify(_)].map((R)=>this.toBase64URL(R)).join(".");let E=pv.createSign("RSA-SHA256").update(_).sign(this.options.privateKey);return _+"."+this.toBase64URL(E)}}dH.exports=cH});var oH=j((tb,nH)=>{var kv=lL(),mv=IR().assign,gv=X2(),yv=require("events");class lH extends yv{constructor(_){super();if(this.pool=_,this.options=_.options,this.logger=this.pool.logger,this.options.auth)switch((this.options.auth.type||"").toString().toUpperCase()){case"OAUTH2":{let E=new gv(this.options.auth,this.logger);E.provisionCallback=this.pool.mailer&&this.pool.mailer.get("oauth2_provision_cb")||E.provisionCallback,this.auth={type:"OAUTH2",user:this.options.auth.user,oauth2:E,method:"XOAUTH2"},E.on("token",(R)=>this.pool.mailer.emit("token",R)),E.on("error",(R)=>this.emit("error",R));break}default:if(!this.options.auth.user&&!this.options.auth.pass)break;this.auth={type:(this.options.auth.type||"").toString().toUpperCase()||"LOGIN",user:this.options.auth.user,credentials:{user:this.options.auth.user||"",pass:this.options.auth.pass,options:this.options.auth.options},method:(this.options.auth.method||"").trim().toUpperCase()||this.options.authMethod||!1}}this._connection=!1,this._connected=!1,this.messages=0,this.available=!0}connect(_){this.pool.getSocket(this.options,(E,R)=>{if(E)return _(E);let N=!1,A=this.options;if(R&&R.connection)this.logger.info({tnx:"proxy",remoteAddress:R.connection.remoteAddress,remotePort:R.connection.remotePort,destHost:A.host||"",destPort:A.port||"",action:"connected"},"Using proxied socket from %s:%s to %s:%s",R.connection.remoteAddress,R.connection.remotePort,A.host||"",A.port||""),A=mv(!1,A),Object.keys(R).forEach((L)=>{A[L]=R[L]});this.connection=new kv(A),this.connection.once("error",(L)=>{if(this.emit("error",L),N)return;return N=!0,_(L)}),this.connection.once("end",()=>{if(this.close(),N)return;N=!0;let L=setTimeout(()=>{if(N)return;let U=new Error("Unexpected socket close");if(this.connection&&this.connection._socket&&this.connection._socket.upgrading)U.code="ETLS";_(U)},1000);try{L.unref()}catch(U){}}),this.connection.connect(()=>{if(N)return;if(this.auth&&(this.connection.allowsAuth||A.forceAuth))this.connection.login(this.auth,(L)=>{if(N)return;if(N=!0,L)return this.connection.close(),this.emit("error",L),_(L);this._connected=!0,_(null,!0)});else return N=!0,this._connected=!0,_(null,!0)})})}send(_,E){if(!this._connected)return this.connect((L)=>{if(L)return E(L);return this.send(_,E)});let R=_.message.getEnvelope(),N=_.message.messageId(),A=[].concat(R.to||[]);if(A.length>3)A.push("...and "+A.splice(2).length+" more");if(this.logger.info({tnx:"send",messageId:N,cid:this.id},"Sending message %s using #%s to <%s>",N,this.id,A.join(", ")),_.data.dsn)R.dsn=_.data.dsn;this.connection.send(R,_.message.createReadStream(),(L,U)=>{if(this.messages++,L)return this.connection.close(),this.emit("error",L),E(L);U.envelope={from:R.from,to:R.to},U.messageId=N,setImmediate(()=>{let G;if(this.messages>=this.options.maxMessages)G=new Error("Resource exhausted"),G.code="EMAXLIMIT",this.connection.close(),this.emit("error",G);else this.pool._checkRateLimit(()=>{this.available=!0,this.emit("available")})}),E(null,U)})}close(){if(this._connected=!1,this.auth&&this.auth.oauth2)this.auth.oauth2.removeAllListeners();if(this.connection)this.connection.close();this.emit("close")}}nH.exports=lH});var sH=j((rb,bv)=>{bv.exports={"1und1":{host:"smtp.1und1.de",port:465,secure:!0,authMethod:"LOGIN"},Aliyun:{domains:["aliyun.com"],host:"smtp.aliyun.com",port:465,secure:!0},AOL:{domains:["aol.com"],host:"smtp.aol.com",port:587},Bluewin:{host:"smtpauths.bluewin.ch",domains:["bluewin.ch"],port:465},DebugMail:{host:"debugmail.io",port:25},DynectEmail:{aliases:["Dynect"],host:"smtp.dynect.net",port:25},Ethereal:{aliases:["ethereal.email"],host:"smtp.ethereal.email",port:587},FastMail:{domains:["fastmail.fm"],host:"smtp.fastmail.com",port:465,secure:!0},"Forward Email":{aliases:["FE","ForwardEmail"],domains:["forwardemail.net"],host:"smtp.forwardemail.net",port:465,secure:!0},"Feishu Mail":{aliases:["Feishu","FeishuMail"],domains:["www.feishu.cn"],host:"smtp.feishu.cn",port:465,secure:!0},GandiMail:{aliases:["Gandi","Gandi Mail"],host:"mail.gandi.net",port:587},Gmail:{aliases:["Google Mail"],domains:["gmail.com","googlemail.com"],host:"smtp.gmail.com",port:465,secure:!0},Godaddy:{host:"smtpout.secureserver.net",port:25},GodaddyAsia:{host:"smtp.asia.secureserver.net",port:25},GodaddyEurope:{host:"smtp.europe.secureserver.net",port:25},"hot.ee":{host:"mail.hot.ee"},Hotmail:{aliases:["Outlook","Outlook.com","Hotmail.com"],domains:["hotmail.com","outlook.com"],host:"smtp-mail.outlook.com",port:587},iCloud:{aliases:["Me","Mac"],domains:["me.com","mac.com"],host:"smtp.mail.me.com",port:587},Infomaniak:{host:"mail.infomaniak.com",domains:["ik.me","ikmail.com","etik.com"],port:587},Loopia:{host:"mailcluster.loopia.se",port:465},"mail.ee":{host:"smtp.mail.ee"},"Mail.ru":{host:"smtp.mail.ru",port:465,secure:!0},"Mailcatch.app":{host:"sandbox-smtp.mailcatch.app",port:2525},Maildev:{port:1025,ignoreTLS:!0},Mailgun:{host:"smtp.mailgun.org",port:465,secure:!0},Mailjet:{host:"in.mailjet.com",port:587},Mailosaur:{host:"mailosaur.io",port:25},Mailtrap:{host:"live.smtp.mailtrap.io",port:587},Mandrill:{host:"smtp.mandrillapp.com",port:587},Naver:{host:"smtp.naver.com",port:587},One:{host:"send.one.com",port:465,secure:!0},OpenMailBox:{aliases:["OMB","openmailbox.org"],host:"smtp.openmailbox.org",port:465,secure:!0},Outlook365:{host:"smtp.office365.com",port:587,secure:!1},OhMySMTP:{host:"smtp.ohmysmtp.com",port:587,secure:!1},Postmark:{aliases:["PostmarkApp"],host:"smtp.postmarkapp.com",port:2525},"qiye.aliyun":{host:"smtp.mxhichina.com",port:"465",secure:!0},QQ:{domains:["qq.com"],host:"smtp.qq.com",port:465,secure:!0},QQex:{aliases:["QQ Enterprise"],domains:["exmail.qq.com"],host:"smtp.exmail.qq.com",port:465,secure:!0},SendCloud:{host:"smtp.sendcloud.net",port:2525},SendGrid:{host:"smtp.sendgrid.net",port:587},SendinBlue:{aliases:["Brevo"],host:"smtp-relay.brevo.com",port:587},SendPulse:{host:"smtp-pulse.com",port:465,secure:!0},SES:{host:"email-smtp.us-east-1.amazonaws.com",port:465,secure:!0},"SES-US-EAST-1":{host:"email-smtp.us-east-1.amazonaws.com",port:465,secure:!0},"SES-US-WEST-2":{host:"email-smtp.us-west-2.amazonaws.com",port:465,secure:!0},"SES-EU-WEST-1":{host:"email-smtp.eu-west-1.amazonaws.com",port:465,secure:!0},"SES-AP-SOUTH-1":{host:"email-smtp.ap-south-1.amazonaws.com",port:465,secure:!0},"SES-AP-NORTHEAST-1":{host:"email-smtp.ap-northeast-1.amazonaws.com",port:465,secure:!0},"SES-AP-NORTHEAST-2":{host:"email-smtp.ap-northeast-2.amazonaws.com",port:465,secure:!0},"SES-AP-NORTHEAST-3":{host:"email-smtp.ap-northeast-3.amazonaws.com",port:465,secure:!0},"SES-AP-SOUTHEAST-1":{host:"email-smtp.ap-southeast-1.amazonaws.com",port:465,secure:!0},"SES-AP-SOUTHEAST-2":{host:"email-smtp.ap-southeast-2.amazonaws.com",port:465,secure:!0},Sparkpost:{aliases:["SparkPost","SparkPost Mail"],domains:["sparkpost.com"],host:"smtp.sparkpostmail.com",port:587,secure:!1},Tipimail:{host:"smtp.tipimail.com",port:587},Yahoo:{domains:["yahoo.com"],host:"smtp.mail.yahoo.com",port:465,secure:!0},Yandex:{domains:["yandex.ru"],host:"smtp.yandex.ru",port:465,secure:!0},Zoho:{host:"smtp.zoho.com",port:465,secure:!0,authMethod:"LOGIN"},"126":{host:"smtp.126.com",port:465,secure:!0},"163":{host:"smtp.163.com",port:465,secure:!0}}});var $2=j((ab,rH)=>{var tH=sH(),nL={};Object.keys(tH).forEach((_)=>{let E=tH[_];nL[oL(_)]=J2(E),[].concat(E.aliases||[]).forEach((R)=>{nL[oL(R)]=J2(E)}),[].concat(E.domains||[]).forEach((R)=>{nL[oL(R)]=J2(E)})});function oL(_){return _.replace(/[^a-zA-Z0-9.-]/g,"").toLowerCase()}function J2(_){let E=["domains","aliases"],R={};return Object.keys(_).forEach((N)=>{if(E.indexOf(N)<0)R[N]=_[N]}),R}rH.exports=function(_){return _=oL(_.split("@").pop()),nL[_]||!1}});var RW=j((eb,EW)=>{var iv=require("events"),aH=oH(),eH=lL(),uv=$2(),YA=IR(),cv=LN();class _W extends iv{constructor(_){super();if(_=_||{},typeof _==="string")_={url:_};let E,R=_.service;if(typeof _.getSocket==="function")this.getSocket=_.getSocket;if(_.url)E=YA.parseConnectionUrl(_.url),R=R||E.service;this.options=YA.assign(!1,_,E,R&&uv(R)),this.options.maxConnections=this.options.maxConnections||5,this.options.maxMessages=this.options.maxMessages||100,this.logger=YA.getLogger(this.options,{component:this.options.component||"smtp-pool"});let N=new eH(this.options);this.name="SMTP (pool)",this.version=cv.version+"[client:"+N.version+"]",this._rateLimit={counter:0,timeout:null,waiting:[],checkpoint:!1,delta:Number(this.options.rateDelta)||1000,limit:Number(this.options.rateLimit)||0},this._closed=!1,this._queue=[],this._connections=[],this._connectionCounter=0,this.idling=!0,setImmediate(()=>{if(this.idling)this.emit("idle")})}getSocket(_,E){return setImmediate(()=>E(null,!1))}send(_,E){if(this._closed)return!1;if(this._queue.push({mail:_,requeueAttempts:0,callback:E}),this.idling&&this._queue.length>=this.options.maxConnections)this.idling=!1;return setImmediate(()=>this._processMessages()),!0}close(){let _,E=this._connections.length;if(this._closed=!0,clearTimeout(this._rateLimit.timeout),!E&&!this._queue.length)return;for(let N=E-1;N>=0;N--)if(this._connections[N]&&this._connections[N].available)_=this._connections[N],_.close(),this.logger.info({tnx:"connection",cid:_.id,action:"removed"},"Connection #%s removed",_.id);if(E&&!this._connections.length)this.logger.debug({tnx:"connection"},"All connections removed");if(!this._queue.length)return;let R=()=>{if(!this._queue.length){this.logger.debug({tnx:"connection"},"Pending queue entries cleared");return}let N=this._queue.shift();if(N&&typeof N.callback==="function")try{N.callback(new Error("Connection pool was closed"))}catch(A){this.logger.error({err:A,tnx:"callback",cid:_.id},"Callback error for #%s: %s",_.id,A.message)}setImmediate(R)};setImmediate(R)}_processMessages(){let _,E,R;if(this._closed)return;if(!this._queue.length){if(!this.idling)this.idling=!0,this.emit("idle");return}for(E=0,R=this._connections.length;E\s]/g,""),_.available=!1,this.logger.debug({tnx:"pool",cid:_.id,messageId:N.messageId,action:"assign"},"Assigned message <%s> to #%s (%s)",N.messageId,_.id,_.messages+1),this._rateLimit.limit){if(this._rateLimit.counter++,!this._rateLimit.checkpoint)this._rateLimit.checkpoint=Date.now()}_.send(N.mail,(A,L)=>{if(N===_.queueEntry){try{N.callback(A,L)}catch(U){this.logger.error({err:U,tnx:"callback",cid:_.id},"Callback error for #%s: %s",_.id,U.message)}_.queueEntry=!1}})}_createConnection(){let _=new aH(this);return _.id=++this._connectionCounter,this.logger.info({tnx:"pool",cid:_.id,action:"conection"},"Created new pool resource #%s",_.id),_.on("available",()=>{if(this.logger.debug({tnx:"connection",cid:_.id,action:"available"},"Connection #%s became available",_.id),this._closed)this.close();else this._processMessages()}),_.once("error",(E)=>{if(E.code!=="EMAXLIMIT")this.logger.error({err:E,tnx:"pool",cid:_.id},"Pool Error for #%s: %s",_.id,E.message);else this.logger.debug({tnx:"pool",cid:_.id,action:"maxlimit"},"Max messages limit exchausted for #%s",_.id);if(_.queueEntry){try{_.queueEntry.callback(E)}catch(R){this.logger.error({err:R,tnx:"callback",cid:_.id},"Callback error for #%s: %s",_.id,R.message)}_.queueEntry=!1}this._removeConnection(_),this._continueProcessing()}),_.once("close",()=>{if(this.logger.info({tnx:"connection",cid:_.id,action:"closed"},"Connection #%s was closed",_.id),this._removeConnection(_),_.queueEntry)setTimeout(()=>{if(_.queueEntry)if(this._shouldRequeuOnConnectionClose(_.queueEntry))this._requeueEntryOnConnectionClose(_);else this._failDeliveryOnConnectionClose(_);this._continueProcessing()},50);else this._continueProcessing()}),this._connections.push(_),_}_shouldRequeuOnConnectionClose(_){if(this.options.maxRequeues===void 0||this.options.maxRequeues<0)return!0;return _.requeueAttempts for #%s. Attempt: #%s",_.queueEntry.messageId,_.id,_.queueEntry.requeueAttempts),this._queue.unshift(_.queueEntry),_.queueEntry=!1}_continueProcessing(){if(this._closed)this.close();else setTimeout(()=>this._processMessages(),100)}_removeConnection(_){let E=this._connections.indexOf(_);if(E!==-1)this._connections.splice(E,1)}_checkRateLimit(_){if(!this._rateLimit.limit)return _();let E=Date.now();if(this._rateLimit.counterthis._clearRateLimit(),this._rateLimit.delta-(E-this._rateLimit.checkpoint)),this._rateLimit.checkpoint=E}_clearRateLimit(){clearTimeout(this._rateLimit.timeout),this._rateLimit.timeout=null,this._rateLimit.counter=0,this._rateLimit.checkpoint=!1;while(this._rateLimit.waiting.length){let _=this._rateLimit.waiting.shift();setImmediate(_)}}isIdle(){return this.idling}verify(_){let E;if(!_)E=new Promise((N,A)=>{_=YA.callbackPromise(N,A)});let R=new aH(this).auth;return this.getSocket(this.options,(N,A)=>{if(N)return _(N);let L=this.options;if(A&&A.connection)this.logger.info({tnx:"proxy",remoteAddress:A.connection.remoteAddress,remotePort:A.connection.remotePort,destHost:L.host||"",destPort:L.port||"",action:"connected"},"Using proxied socket from %s:%s to %s:%s",A.connection.remoteAddress,A.connection.remotePort,L.host||"",L.port||""),L=YA.assign(!1,L),Object.keys(A).forEach((C)=>{L[C]=A[C]});let U=new eH(L),G=!1;U.once("error",(C)=>{if(G)return;return G=!0,U.close(),_(C)}),U.once("end",()=>{if(G)return;return G=!0,_(new Error("Connection closed"))});let S=()=>{if(G)return;return G=!0,U.quit(),_(null,!0)};U.connect(()=>{if(G)return;if(R&&(U.allowsAuth||L.forceAuth))U.login(R,(C)=>{if(G)return;if(C)return G=!0,U.close(),_(C);S()});else if(!R&&U.allowsAuth&&L.forceAuth){let C=new Error("Authentication info was not provided");return C.code="NoAuth",G=!0,U.close(),_(C)}else S()})}),E}}EW.exports=_W});var OW=j((_i,TW)=>{var dv=require("events"),Z2=lL(),lv=$2(),sT=IR(),nv=X2(),ov=LN();class NW extends dv{constructor(_){super();if(_=_||{},typeof _==="string")_={url:_};let E,R=_.service;if(typeof _.getSocket==="function")this.getSocket=_.getSocket;if(_.url)E=sT.parseConnectionUrl(_.url),R=R||E.service;this.options=sT.assign(!1,_,E,R&&lv(R)),this.logger=sT.getLogger(this.options,{component:this.options.component||"smtp-transport"});let N=new Z2(this.options);if(this.name="SMTP",this.version=ov.version+"[client:"+N.version+"]",this.options.auth)this.auth=this.getAuth({})}getSocket(_,E){return setImmediate(()=>E(null,!1))}getAuth(_){if(!_)return this.auth;let E=!1,R={};if(this.options.auth&&typeof this.options.auth==="object")Object.keys(this.options.auth).forEach((N)=>{E=!0,R[N]=this.options.auth[N]});if(_&&typeof _==="object")Object.keys(_).forEach((N)=>{E=!0,R[N]=_[N]});if(!E)return!1;switch((R.type||"").toString().toUpperCase()){case"OAUTH2":{if(!R.service&&!R.user)return!1;let N=new nv(R,this.logger);return N.provisionCallback=this.mailer&&this.mailer.get("oauth2_provision_cb")||N.provisionCallback,N.on("token",(A)=>this.mailer.emit("token",A)),N.on("error",(A)=>this.emit("error",A)),{type:"OAUTH2",user:R.user,oauth2:N,method:"XOAUTH2"}}default:return{type:(R.type||"").toString().toUpperCase()||"LOGIN",user:R.user,credentials:{user:R.user||"",pass:R.pass,options:R.options},method:(R.method||"").trim().toUpperCase()||this.options.authMethod||!1}}}send(_,E){this.getSocket(this.options,(R,N)=>{if(R)return E(R);let A=!1,L=this.options;if(N&&N.connection)this.logger.info({tnx:"proxy",remoteAddress:N.connection.remoteAddress,remotePort:N.connection.remotePort,destHost:L.host||"",destPort:L.port||"",action:"connected"},"Using proxied socket from %s:%s to %s:%s",N.connection.remoteAddress,N.connection.remotePort,L.host||"",L.port||""),L=sT.assign(!1,L),Object.keys(N).forEach((S)=>{L[S]=N[S]});let U=new Z2(L);U.once("error",(S)=>{if(A)return;return A=!0,U.close(),E(S)}),U.once("end",()=>{if(A)return;let S=setTimeout(()=>{if(A)return;A=!0;let C=new Error("Unexpected socket close");if(U&&U._socket&&U._socket.upgrading)C.code="ETLS";E(C)},1000);try{S.unref()}catch(C){}});let G=()=>{let S=_.message.getEnvelope(),C=_.message.messageId(),Y=[].concat(S.to||[]);if(Y.length>3)Y.push("...and "+Y.splice(2).length+" more");if(_.data.dsn)S.dsn=_.data.dsn;this.logger.info({tnx:"send",messageId:C},"Sending message %s to <%s>",C,Y.join(", ")),U.send(S,_.message.createReadStream(),(M,H)=>{if(A=!0,U.close(),M)return this.logger.error({err:M,tnx:"send"},"Send error for %s: %s",C,M.message),E(M);H.envelope={from:S.from,to:S.to},H.messageId=C;try{return E(null,H)}catch(X){this.logger.error({err:X,tnx:"callback"},"Callback error for %s: %s",C,X.message)}})};U.connect(()=>{if(A)return;let S=this.getAuth(_.data.auth);if(S&&(U.allowsAuth||L.forceAuth))U.login(S,(C)=>{if(S&&S!==this.auth&&S.oauth2)S.oauth2.removeAllListeners();if(A)return;if(C)return A=!0,U.close(),E(C);G()});else G()})})}verify(_){let E;if(!_)E=new Promise((R,N)=>{_=sT.callbackPromise(R,N)});return this.getSocket(this.options,(R,N)=>{if(R)return _(R);let A=this.options;if(N&&N.connection)this.logger.info({tnx:"proxy",remoteAddress:N.connection.remoteAddress,remotePort:N.connection.remotePort,destHost:A.host||"",destPort:A.port||"",action:"connected"},"Using proxied socket from %s:%s to %s:%s",N.connection.remoteAddress,N.connection.remotePort,A.host||"",A.port||""),A=sT.assign(!1,A),Object.keys(N).forEach((S)=>{A[S]=N[S]});let L=new Z2(A),U=!1;L.once("error",(S)=>{if(U)return;return U=!0,L.close(),_(S)}),L.once("end",()=>{if(U)return;return U=!0,_(new Error("Connection closed"))});let G=()=>{if(U)return;return U=!0,L.quit(),_(null,!0)};L.connect(()=>{if(U)return;let S=this.getAuth({});if(S&&(L.allowsAuth||A.forceAuth))L.login(S,(C)=>{if(U)return;if(C)return U=!0,L.close(),_(C);G()});else if(!S&&L.allowsAuth&&A.forceAuth){let C=new Error("Authentication info was not provided");return C.code="NoAuth",U=!0,L.close(),_(C)}else G()})}),E}close(){if(this.auth&&this.auth.oauth2)this.auth.oauth2.removeAllListeners();this.emit("close")}}TW.exports=NW});var LW=j((Ei,IW)=>{var sv=require("child_process").spawn,tv=LN(),rv=IR();class AW{constructor(_){if(_=_||{},this._spawn=sv,this.options=_||{},this.name="Sendmail",this.version=tv.version,this.path="sendmail",this.args=!1,this.winbreak=!1,this.logger=rv.getLogger(this.options,{component:this.options.component||"sendmail"}),_){if(typeof _==="string")this.path=_;else if(typeof _==="object"){if(_.path)this.path=_.path;if(Array.isArray(_.args))this.args=_.args;this.winbreak=["win","windows","dos","\r\n"].includes((_.newline||"").toString().toLowerCase())}}}send(_,E){_.message.keepBcc=!0;let R=_.data.envelope||_.message.getEnvelope(),N=_.message.messageId(),A,L,U;if([].concat(R.from||[]).concat(R.to||[]).some((C)=>/^-/.test(C)))return E(new Error("Can not send mail. Invalid envelope addresses."));if(this.args)A=["-i"].concat(this.args).concat(R.to);else A=["-i"].concat(R.from?["-f",R.from]:[]).concat(R.to);let S=(C)=>{if(U)return;if(U=!0,typeof E==="function")if(C)return E(C);else return E(null,{envelope:_.data.envelope||_.message.getEnvelope(),messageId:N,response:"Messages queued for delivery"})};try{L=this._spawn(this.path,A)}catch(C){return this.logger.error({err:C,tnx:"spawn",messageId:N},"Error occurred while spawning sendmail. %s",C.message),S(C)}if(L){L.on("error",(M)=>{this.logger.error({err:M,tnx:"spawn",messageId:N},"Error occurred when sending message %s. %s",N,M.message),S(M)}),L.once("exit",(M)=>{if(!M)return S();let H;if(M===127)H=new Error("Sendmail command not found, process exited with code "+M);else H=new Error("Sendmail exited with code "+M);this.logger.error({err:H,tnx:"stdin",messageId:N},"Error sending message %s to sendmail. %s",N,H.message),S(H)}),L.once("close",S),L.stdin.on("error",(M)=>{this.logger.error({err:M,tnx:"stdin",messageId:N},"Error occurred when piping message %s to sendmail. %s",N,M.message),S(M)});let C=[].concat(R.to||[]);if(C.length>3)C.push("...and "+C.splice(2).length+" more");this.logger.info({tnx:"send",messageId:N},"Sending message %s to <%s>",N,C.join(", "));let Y=_.message.createReadStream();Y.once("error",(M)=>{this.logger.error({err:M,tnx:"stdin",messageId:N},"Error occurred when generating message %s. %s",N,M.message),L.kill("SIGINT"),S(M)}),Y.pipe(L.stdin)}else return S(new Error("sendmail was not found"))}}IW.exports=AW});var DW=j((Ri,GW)=>{var av=LN(),ev=IR();class UW{constructor(_){_=_||{},this.options=_||{},this.name="StreamTransport",this.version=av.version,this.logger=ev.getLogger(this.options,{component:this.options.component||"stream-transport"}),this.winbreak=["win","windows","dos","\r\n"].includes((_.newline||"").toString().toLowerCase())}send(_,E){_.message.keepBcc=!0;let R=_.data.envelope||_.message.getEnvelope(),N=_.message.messageId(),A=[].concat(R.to||[]);if(A.length>3)A.push("...and "+A.splice(2).length+" more");this.logger.info({tnx:"send",messageId:N},"Sending message %s to <%s> using %s line breaks",N,A.join(", "),this.winbreak?"":""),setImmediate(()=>{let L;try{L=_.message.createReadStream()}catch(S){return this.logger.error({err:S,tnx:"send",messageId:N},"Creating send stream failed for %s. %s",N,S.message),E(S)}if(!this.options.buffer)return L.once("error",(S)=>{this.logger.error({err:S,tnx:"send",messageId:N},"Failed creating message for %s. %s",N,S.message)}),E(null,{envelope:_.data.envelope||_.message.getEnvelope(),messageId:N,message:L});let U=[],G=0;L.on("readable",()=>{let S;while((S=L.read())!==null)U.push(S),G+=S.length}),L.once("error",(S)=>{return this.logger.error({err:S,tnx:"send",messageId:N},"Failed creating message for %s. %s",N,S.message),E(S)}),L.on("end",()=>E(null,{envelope:_.data.envelope||_.message.getEnvelope(),messageId:N,message:Buffer.concat(U,G)}))})}}GW.exports=UW});var PW=j((Ni,CW)=>{var _p=LN(),Ep=IR();class SW{constructor(_){_=_||{},this.options=_||{},this.name="JSONTransport",this.version=_p.version,this.logger=Ep.getLogger(this.options,{component:this.options.component||"json-transport"})}send(_,E){_.message.keepBcc=!0;let R=_.data.envelope||_.message.getEnvelope(),N=_.message.messageId(),A=[].concat(R.to||[]);if(A.length>3)A.push("...and "+A.splice(2).length+" more");this.logger.info({tnx:"send",messageId:N},"Composing JSON structure of %s to <%s>",N,A.join(", ")),setImmediate(()=>{_.normalize((L,U)=>{if(L)return this.logger.error({err:L,tnx:"send",messageId:N},"Failed building JSON structure for %s. %s",N,L.message),E(L);return delete U.envelope,delete U.normalizedHeaders,E(null,{envelope:R,messageId:N,message:this.options.skipEncoding?U:JSON.stringify(U)})})})}}CW.exports=SW});var MW=j((Ti,WW)=>{var Rp=require("events"),Np=LN(),YW=IR(),Tp=P2();class HW extends Rp{constructor(_){super();_=_||{},this.options=_||{},this.ses=this.options.SES,this.name="SESTransport",this.version=Np.version,this.logger=YW.getLogger(this.options,{component:this.options.component||"ses-transport"}),this.maxConnections=Number(this.options.maxConnections)||1/0,this.connections=0,this.sendingRate=Number(this.options.sendingRate)||1/0,this.sendingRateTTL=null,this.rateInterval=1000,this.rateMessages=[],this.pending=[],this.idling=!0,setImmediate(()=>{if(this.idling)this.emit("idle")})}send(_,E){if(this.connections>=this.maxConnections)return this.idling=!1,this.pending.push({mail:_,callback:E});if(!this._checkSendingRate())return this.idling=!1,this.pending.push({mail:_,callback:E});this._send(_,(...R)=>{setImmediate(()=>E(...R)),this._sent()})}_checkRatedQueue(){if(this.connections>=this.maxConnections||!this._checkSendingRate())return;if(!this.pending.length){if(!this.idling)this.idling=!0,this.emit("idle");return}let _=this.pending.shift();this._send(_.mail,(...E)=>{setImmediate(()=>_.callback(...E)),this._sent()})}_checkSendingRate(){clearTimeout(this.sendingRateTTL);let _=Date.now(),E=!1;for(let N=this.rateMessages.length-1;N>=0;N--){if(this.rateMessages[N].ts>=_-this.rateInterval&&(!E||this.rateMessages[N].tsthis._checkRatedQueue(),_-R);try{this.sendingRateTTL.unref()}catch(N){}return!1}_sent(){this.connections--,this._checkRatedQueue()}isIdle(){return this.idling}_send(_,E){let R={ts:Date.now(),pending:!0};this.connections++,this.rateMessages.push(R);let N=_.data.envelope||_.message.getEnvelope(),A=_.message.messageId(),L=[].concat(N.to||[]);if(L.length>3)L.push("...and "+L.splice(2).length+" more");this.logger.info({tnx:"send",messageId:A},"Sending message %s to <%s>",A,L.join(", "));let U=(G)=>{if(!_.data._dkim)_.data._dkim={};if(_.data._dkim.skipFields&&typeof _.data._dkim.skipFields==="string")_.data._dkim.skipFields+=":date:message-id";else _.data._dkim.skipFields="date:message-id";let S=_.message.createReadStream(),C=S.pipe(new Tp),Y=[],M=0;C.on("readable",()=>{let H;while((H=C.read())!==null)Y.push(H),M+=H.length}),S.once("error",(H)=>C.emit("error",H)),C.once("error",(H)=>{G(H)}),C.once("end",()=>G(null,Buffer.concat(Y,M)))};setImmediate(()=>U((G,S)=>{if(G)return this.logger.error({err:G,tnx:"send",messageId:A},"Failed creating message for %s. %s",A,G.message),R.pending=!1,E(G);let C={RawMessage:{Data:S},Source:N.from,Destinations:N.to};Object.keys(_.data.ses||{}).forEach((X)=>{C[X]=_.data.ses[X]});let Y=(this.ses.aws?this.ses.ses:this.ses)||{},M=this.ses.aws||{};((X)=>{if(Y.config&&typeof Y.config.region==="function")return Y.config.region().then(($)=>X(null,$)).catch(($)=>X($));return X(null,Y.config&&Y.config.region||"us-east-1")})((X,$)=>{if(X||!$)$="us-east-1";let z;if(typeof Y.send==="function"&&M.SendRawEmailCommand)z=Y.send(new M.SendRawEmailCommand(C));else z=Y.sendRawEmail(C).promise();z.then((w)=>{if($==="us-east-1")$="email";R.pending=!1,E(null,{envelope:{from:N.from,to:N.to},messageId:"<"+w.MessageId+(!/@/.test(w.MessageId)?"@"+$+".amazonses.com":"")+">",response:w.MessageId,raw:S})}).catch((w)=>{this.logger.error({err:w,tnx:"send"},"Send error for %s: %s",A,w.message),R.pending=!1,E(w)})})}))}verify(_){let E,R=(this.ses.aws?this.ses.ses:this.ses)||{},N=this.ses.aws||{},A={RawMessage:{Data:"From: invalid@invalid\r\nTo: invalid@invalid\r\n Subject: Invalid\r\n\r\nInvalid"},Source:"invalid@invalid",Destinations:["invalid@invalid"]};if(!_)E=new Promise((U,G)=>{_=YW.callbackPromise(U,G)});let L=(U)=>{if(U&&(U.code||U.Code)!=="InvalidParameterValue")return _(U);return _(null,!0)};if(typeof R.send==="function"&&N.SendRawEmailCommand)A.RawMessage.Data=Buffer.from(A.RawMessage.Data),R.send(new N.SendRawEmailCommand(A),L);else R.sendRawEmail(A,L);return E}}WW.exports=HW});var w2=j((Oi,sL)=>{var Op=pH(),VW=IR(),Ap=RW(),Ip=OW(),Lp=LW(),Up=DW(),Gp=PW(),Dp=MW(),Sp=UA(),FW=LN(),Cp=(process.env.ETHEREAL_API||"https://api.nodemailer.com").replace(/\/+$/,""),Pp=(process.env.ETHEREAL_WEB||"https://ethereal.email").replace(/\/+$/,""),BW=(process.env.ETHEREAL_API_KEY||"").replace(/\s*/g,"")||null,Yp=["true","yes","y","1"].includes((process.env.ETHEREAL_CACHE||"yes").toString().trim().toLowerCase()),HA=!1;sL.exports.createTransport=function(_,E){let R,N,A;if(typeof _==="object"&&typeof _.send!=="function"||typeof _==="string"&&/^(smtps?|direct):/i.test(_)){if(R=typeof _==="string"?_:_.url)N=VW.parseConnectionUrl(R);else N=_;if(N.pool)_=new Ap(N);else if(N.sendmail)_=new Lp(N);else if(N.streamTransport)_=new Up(N);else if(N.jsonTransport)_=new Gp(N);else if(N.SES)_=new Dp(N);else _=new Ip(N)}return A=new Op(_,N,E),A};sL.exports.createTestAccount=function(_,E){let R;if(!E&&typeof _==="function")E=_,_=!1;if(!E)R=new Promise((S,C)=>{E=VW.callbackPromise(S,C)});if(Yp&&HA)return setImmediate(()=>E(null,HA)),R;_=_||Cp;let N=[],A=0,L={},U={requestor:FW.name,version:FW.version};if(BW)L.Authorization="Bearer "+BW;let G=Sp(_+"/user",{contentType:"application/json",method:"POST",headers:L,body:Buffer.from(JSON.stringify(U))});return G.on("readable",()=>{let S;while((S=G.read())!==null)N.push(S),A+=S.length}),G.once("error",(S)=>E(S)),G.once("end",()=>{let S=Buffer.concat(N,A),C,Y;try{C=JSON.parse(S.toString())}catch(M){Y=M}if(Y)return E(Y);if(C.status!=="success"||C.error)return E(new Error(C.error||"Request failed"));delete C.status,HA=C,E(null,HA)}),R};sL.exports.getTestMessageUrl=function(_){if(!_||!_.response)return!1;let E=new Map;if(_.response.replace(/\[([^\]]+)\]$/,(R,N)=>{N.replace(/\b([A-Z0-9]+)=([^\s]+)/g,(A,L,U)=>{E.set(L,U)})}),E.has("STATUS")&&E.has("MSGID"))return(HA.web||Pp)+"/message/"+E.get("MSGID");return!1}});function GN({request:_,cookieString:E}){try{let R=_?_.headers.cookie:E?E:void 0;if(!R)return{};if(!R||typeof R!=="string")return{};let N=R.split(";"),A={};return N.forEach((L)=>{let[U,G]=L.split("=");if(U&&typeof U=="string"){let S=U.replace(/^ +| +$/,"");A[S]=G&&typeof G=="string"?G.replace(/^ +| +$/,""):""}}),A}catch(R){return console.log(`ERROR parsing cookies: ${R.message}`),{}}}var xW=j((li,rL)=>{var Vp=require("crypto"),Kp=256,FA,g2,QW=function(){if(FA===void 0||FA>=g2.length)FA=0,g2=Vp.randomBytes(Kp);var _=g2[FA];return FA+=1,_},Xp=function(_){var E=QW();while(E>=256-256%_)E=QW();return E%_},Jp="abcdefghijklmnopqrstuvwxyz",$p="ABCDEFGHIJKLMNOPQRSTUVWXYZ",Zp="0123456789",wp='!@#$%^&*()+_-=}{[]|:;"/?.><,`~',Qp=/[ilLI|`oO0]/g,zp=[{name:"lowercase",rule:/[a-z]/},{name:"uppercase",rule:/[A-Z]/},{name:"numbers",rule:/[0-9]/},{name:"symbols",rule:/[!@#$%^&*()+_\-=}{[\]|:;"/?.><,`~]/}],zW=function(_,E){var R="",N=_.length,A=E.length;for(var L=0;L_.length)throw new TypeError("Length must correlate with strict guidelines")}var R="";if(_.lowercase)R+=Jp;if(_.uppercase)R+=$p;if(_.numbers)R+=Zp;if(_.symbols)if(typeof _.symbols==="string")R+=_.symbols;else R+=wp;if(!R)throw new TypeError("At least one rule for pools must be true");if(_.excludeSimilarCharacters)R=R.replace(Qp,"");var N=_.exclude.length;while(N--)R=R.replace(_.exclude[N],"");var A=zW(_,R);return A};rL.exports.generateMultiple=function(_,E){var R=[];for(var N=0;N<_;N++)R[N]=rL.exports.generate(E);return R}});var fW=j((ni,qW)=>{qW.exports=xW()});async function SD({dbFullName:_,deletedUserId:E,useLocal:R}){if(!(await LE({queryString:"SELECT * FROM users WHERE id = ?",queryValuesArray:[E],database:_,useLocal:R}))?.[0])return{success:!1,msg:"User not found"};return{success:!0,result:await eO({dbContext:"Dsql User",paradigm:"Full Access",dbFullName:_,tableName:"users",identifierColumnName:"id",identifierValue:E,useLocal:R})}}var lW=dE(()=>{jG();JN()});var tW={};YT(tW,{default:()=>sW});async function sW({key:_,database:E,user_id:R,useLocal:N,deletedUserId:A}){let{DSQL_DB_HOST:L,DSQL_DB_USERNAME:U,DSQL_DB_PASSWORD:G,DSQL_DB_NAME:S}=process.env,C=t_(),{host:Y,port:M,scheme:H}=C;if(L?.match(/./)&&U?.match(/./)&&G?.match(/./)&&S?.match(/./)&&N){let $;try{let z=nW.default.resolve(process.cwd(),"dsql.schema.json");$=JSON.parse(oW.default.readFileSync(z,"utf8"))}catch(z){}return await SD({dbFullName:S,useLocal:N,deletedUserId:A})}return await new Promise(($,z)=>{let w=JSON.stringify({database:E,deletedUserId:A}),g=H.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(w).length,Authorization:process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY||_},port:M,hostname:Y,path:`/api/user/${R||C.user_id}/delete-user`},(d)=>{var t="";d.on("data",function(s){t+=s}),d.on("end",function(){$(JSON.parse(t))}),d.on("error",(s)=>{z(s)})});g.write(w),g.end()})}var nW,oW;var rW=dE(()=>{nW=X_(require("path")),oW=X_(require("fs"));aE();lW()});var eW={};YT(eW,{default:()=>aW});async function aW({request:_,email:E,cookieString:R}){try{let A=uE().oneTimeCodeName,U=GN({request:_,cookieString:R})[A],G=OR({encryptedString:U}),S=tR.parse(G);if(S?.email&&!E)return S;if(S?.email&&S.email===E)return S;return null}catch(N){return console.log("validateTempEmailCode error:",N.message),null}}var _M=dE(()=>{P1();a1()});var yp={};YT(yp,{default:()=>bp});module.exports=PT(yp);var cP=X_(require("path")),dP=X_(require("fs"));aE();var uP=X_(SI());CR();i1();WN();yI();CR();async function K3({queryString:_,database:E,tableSchema:R,queryValuesArray:N,local:A}){let L;try{L=A?await xE(_,N):await MR({paradigm:"Full Access",database:E,queryString:_,queryValues:N})}catch(U){return NE({component:"fullAccessDbHandler",message:U.message}),U.message}if(L&&R)return await u1({unparsedResults:L,tableSchema:R});else if(L)return L;else return null}CR();yI();i1();WN();async function X3({queryString:_,database:E,queryValuesArray:R,tableSchema:N,useLocal:A}){let L;try{L=A?await xE(_,R):await MR({paradigm:"Read Only",database:E,queryString:_,queryValues:R})}catch(U){return NE({component:"varReadOnlyDatabaseDbHandler",message:U.message,noMail:!0}),U.message}if(L)return await u1({unparsedResults:L,tableSchema:N});else return null}CR();var iP=X_(fG());var jf={allowedTags:["b","i","em","strong","a","p","span","ul","ol","li","h1","h2","h3","h4","h5","h6","img","div","button","pre","code","br"],allowedAttributes:{a:["href"],img:["src","alt","width","height","class","style"],"*":["style","class"]}},gL=jf;var bP=X_(fG());rN();i1();sR();WN();async function r1({dbContext:_,paradigm:E,dbFullName:R,tableName:N,data:A,tableSchema:L,identifierColumnName:U,identifierValue:G,encryptionKey:S,encryptionSalt:C,useLocal:Y}){if(!A||!Object.keys(A).length)return null;let M=Y?!0:_?.match(/dsql.user/i)?!1:R&&!R.match(/^datasquirel$/)?!1:!0,H=Y?xE:M?oE:MR,X=Object.keys(A),$=[],z=[];for(let d=0;do.fieldName===t):null,k=m&&m[0]?m[0]:null;if(s==null||s==null)continue;let e=/<[^>]+>/g;if(k?.richText||String(s).match(e))s=bP.default(s,gL);if(k?.encrypted)s=BE({data:s,encryptionKey:S,encryptionSalt:C});if(typeof s==="object")s=JSON.stringify(s);if(k?.pattern){if(!new RegExp(k.pattern,k.patternFlags||"").test(s))console.log("DSQL: Pattern not matched =>",s),s=""}if(typeof s==="string"&&s.match(/^null$/i))s={toSqlString:function(){return"NULL"}};if(typeof s==="string"&&!s.match(/./i))s={toSqlString:function(){return"NULL"}};if($.push(`\`${t}\`=?`),typeof s=="number")z.push(String(s));else z.push(s)}catch(t){console.log("DSQL: Error in parsing data keys in update function =>",t.message);continue}$.push(`date_updated='${Date()}'`),$.push(`date_updated_code='${Date.now()}'`);let w=`UPDATE ${N} SET ${$.join(",")} WHERE \`${U}\`=?`;return z.push(G),M?await H(w,z):await H({paradigm:E,database:R,queryString:w,queryValues:z})}rN();i1();sR();WN();async function $R({dbContext:_,paradigm:E,dbFullName:R,tableName:N,data:A,tableSchema:L,duplicateColumnName:U,duplicateColumnValue:G,update:S,encryptionKey:C,encryptionSalt:Y,useLocal:M}){let H=M?!0:_?.match(/dsql.user/i)?!1:R&&!R.match(/^datasquirel$/)?!1:!0,X=M?xE:H?oE:MR;if(A?.date_created_timestamp)delete A.date_created_timestamp;if(A?.date_updated_timestamp)delete A.date_updated_timestamp;if(A?.date_updated)delete A.date_updated;if(A?.date_updated_code)delete A.date_updated_code;if(A?.date_created)delete A.date_created;if(A?.date_created_code)delete A.date_created_code;if(U&&typeof U==="string"){let s=H?await X(`SELECT * FROM \`${N}\` WHERE \`${U}\`=?`,[G]):await X({paradigm:"Read Only",database:R,queryString:`SELECT * FROM \`${N}\` WHERE \`${U}\`=?`,queryValues:[G]});if(s?.[0]&&!S)return null;else if(s&&s[0]&&S)return await r1({dbContext:_,paradigm:E,dbFullName:R,tableName:N,data:A,tableSchema:L,encryptionKey:C,encryptionSalt:Y,identifierColumnName:U,identifierValue:G||""})}let $=Object.keys(A),z=[],w=[];for(let s=0;s<$.length;s++)try{let m=$[s],k=A?.[m],e=L?L?.fields?.filter((S_)=>S_.fieldName==m):null,o=e&&e[0]?e[0]:null;if(k==null||k==null)continue;if(o?.dataType?.match(/int$/i)&&typeof k=="string"&&!k?.match(/./))continue;if(o?.encrypted)k=BE({data:k,encryptionKey:C,encryptionSalt:Y}),console.log("DSQL: Encrypted value =>",k);let c=/<[^>]+>/g;if(o?.richText||String(k).match(c))k=iP.default(k,gL);if(o?.pattern){if(!new RegExp(o.pattern,o.patternFlags||"").test(k))console.log("DSQL: Pattern not matched =>",k),k=""}if(z.push("`"+m+"`"),typeof k==="object")k=JSON.stringify(k);if(typeof k=="number")w.push(String(k));else w.push(k)}catch(m){console.log("DSQL: Error in parsing data keys =>",m.message);continue}if(!A?.date_created)z.push("`date_created`"),w.push(Date());if(!A?.date_created_code)z.push("`date_created_code`"),w.push(Date.now());if(!A?.date_updated)z.push("`date_updated`"),w.push(Date());if(!A?.date_updated_code)z.push("`date_updated_code`"),w.push(Date.now());let g=`INSERT INTO \`${N}\` (${z.join(",")}) VALUES (${w.map(()=>"?").join(",")})`,d=w;return H?await X(g,d):await X({paradigm:E,database:R,queryString:g,queryValues:d})}jG();function _A(_){return _.replace(/\n|\r|\n\r|\r\n/gm," ").replace(/ {2,}/g," ").trim()}async function EA({dbFullName:_,query:E,readOnly:R,dbSchema:N,queryValuesArray:A,tableName:L,local:U}){let G,S,C;if(N)try{let Y=L?L:typeof E=="string"?null:E?E?.table:null;if(!Y)throw new Error("No table name provided");C=N.tables.filter((M)=>M?.tableName===Y)[0]}catch(Y){}try{if(typeof E==="string"){let Y=_A(E);if(R&&Y.match(/^alter|^delete|information_schema|^create/i))throw new Error("Wrong Input!");if(R)G=await X3({queryString:Y,queryValuesArray:A?.map((M)=>String(M)),database:_,tableSchema:C,useLocal:U});else G=await K3({queryString:Y,queryValuesArray:A?.map((M)=>String(M)),database:_,tableSchema:C,local:U})}else if(typeof E==="object"){let{data:Y,action:M,table:H,identifierColumnName:X,identifierValue:$,update:z,duplicateColumnName:w,duplicateColumnValue:g}=E;switch(M.toLowerCase()){case"insert":if(G=await $R({dbContext:U?"Master":"Dsql User",paradigm:"Full Access",dbFullName:_,tableName:H,data:Y,update:z,duplicateColumnName:w,duplicateColumnValue:g,tableSchema:C,useLocal:U}),!G?.insertId)S=new Error("Couldn't insert data");break;case"update":G=await r1({dbContext:U?"Master":"Dsql User",paradigm:"Full Access",dbFullName:_,tableName:H,data:Y,identifierColumnName:X,identifierValue:$,tableSchema:C,useLocal:U});break;case"delete":G=await eO({dbContext:U?"Master":"Dsql User",paradigm:"Full Access",dbFullName:_,tableName:H,identifierColumnName:X,identifierValue:$,tableSchema:C,useLocal:U});break;default:G=null;break}}}catch(Y){NE({component:"functions/backend/runQuery",message:Y.message}),G=null,Y=Y.message}return{result:G,error:S}}async function vG({query:_,dbFullName:E,queryValues:R,tableName:N,dbSchema:A,useLocal:L}){if(typeof _=="string"&&_.match(/^alter|^delete|information_schema|databases|^create/i))return{success:!1,msg:"Wrong Input."};let U;try{let{result:G,error:S}=await EA({dbFullName:E,query:_,queryValuesArray:R,readOnly:!0,dbSchema:A,tableName:N,local:L}),C;if(A){let M=A.tables.find((H)=>H.tableName===N);if(M){let H=uP.default.cloneDeep(M);delete H.childTable,delete H.childTableDbFullName,delete H.childTableName,delete H.childrenTables,delete H.updateData,delete H.tableNameOld,delete H.indexes,C=H}}if(S)throw S;if(G.error)throw new Error(G.error);return U=G,{success:!0,payload:U,schema:N&&C?C:void 0}}catch(G){return NE({component:"/api/query/get/lines-85-94",message:G.message}),{success:!1,payload:null,error:G.message}}}a1();function e1(_){let E="?";if(typeof _!=="object")return console.log("Invalid Query type"),E;if(Array.isArray(_))return console.log("Query is an Array. This is invalid."),E;if(!_)return console.log("No Query provided."),E;let R=Object.keys(_),N=[];return R.forEach((A)=>{if(!A||!_[A])return;let L=_[A];if(typeof L==="object"){let U=tR.stringify(L);N.push(`${A}=${encodeURIComponent(String(U))}`)}else if(typeof L==="string"||typeof L==="number")N.push(`${A}=${encodeURIComponent(L)}`);else N.push(`${A}=${String(L)}`)}),E+=N.join("&"),E}async function pG({key:_,db:E,query:R,queryValues:N,tableName:A,useLocal:L,user_id:U}){let G=t_(),{host:S,port:C,scheme:Y}=G,{DSQL_DB_HOST:M,DSQL_DB_USERNAME:H,DSQL_DB_PASSWORD:X,DSQL_DB_NAME:$}=process.env;if(M?.match(/./)&&H?.match(/./)&&X?.match(/./)&&$?.match(/./)&&L){let w;try{let g=cP.default.resolve(process.cwd(),"dsql.schema.json");w=JSON.parse(dP.default.readFileSync(g,"utf8"))}catch(g){}return await vG({dbFullName:$,query:R,queryValues:N,tableName:A,dbSchema:w,useLocal:L})}return await new Promise((w,g)=>{let d={db:process.env.DSQL_API_DB_NAME||String(E),query:String(R.replace(/\n|\r|\n\r/g,"").replace(/ {2,}/g," ")),queryValues:N?JSON.stringify(N):void 0,tableName:A},t=e1({...d}),s=`/api/query/${U||G.user_id}/get${t}`,m={method:"GET",headers:{"Content-Type":"application/json",Authorization:_||process.env.DSQL_READ_ONLY_API_KEY||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:C,hostname:S,path:s};Y.request(m,(k)=>{var e="";k.on("data",function(o){e+=o}),k.on("end",function(){try{w(JSON.parse(e))}catch(o){g({error:o.message,result:e})}}),k.on("error",(o)=>{console.log("DSQL get Error,",o.message),w(null)})}).end()})}var nP=X_(require("path")),oP=X_(require("fs"));aE();var lP=X_(SI());CR();async function hG({query:_,dbFullName:E,queryValues:R,tableName:N,dbSchema:A,useLocal:L}){if(typeof _==="string"&&_?.match(/^create |^alter |^drop /i))return{success:!1,msg:"Wrong Input"};if(typeof _==="object"&&_?.action?.match(/^create |^alter |^drop /i))return{success:!1,msg:"Wrong Input"};let U;try{let{result:G,error:S}=await EA({dbFullName:E,query:_,dbSchema:A,queryValuesArray:R,tableName:N,local:L});if(U=G,S)throw S;let C;if(A){let Y=A.tables.find((M)=>M.tableName===N);if(Y){let M=lP.default.cloneDeep(Y);delete M.childTable,delete M.childTableDbFullName,delete M.childTableName,delete M.childrenTables,delete M.updateData,delete M.tableNameOld,delete M.indexes,C=M}}return{success:!0,payload:U,error:S,schema:N&&C?C:void 0}}catch(G){return NE({component:"/api/query/post/lines-132-142",message:G.message}),{success:!1,payload:U,error:G.message}}}async function kG({key:_,query:E,queryValues:R,database:N,tableName:A,useLocal:L,user_id:U}){let G=t_(),{host:S,port:C,scheme:Y}=G,{DSQL_DB_HOST:M,DSQL_DB_USERNAME:H,DSQL_DB_PASSWORD:X,DSQL_DB_NAME:$}=process.env;if(M?.match(/./)&&H?.match(/./)&&X?.match(/./)&&$?.match(/./)&&L){let w;try{let g=nP.default.resolve(process.cwd(),"dsql.schema.json");w=JSON.parse(oP.default.readFileSync(g,"utf8"))}catch(g){}return await hG({dbFullName:$,query:E,dbSchema:w,queryValues:R,tableName:A,useLocal:L})}return await new Promise((w,g)=>{let d=JSON.stringify({query:E,queryValues:R,database:process.env.DSQL_API_DB_NAME||N,tableName:A?A:null}).replace(/\n|\r|\n\r/gm,"");try{JSON.parse(d)}catch(k){return console.log(k),console.log(d),{success:!1,payload:null,error:"Query object is invalid. Please Check query data values"}}let t=d,s=`/api/query/${U||G.user_id}/post`,m=Y.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(t).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:C,hostname:S,path:s},(k)=>{var e="";k.on("data",function(o){e+=o}),k.on("end",function(){try{w(JSON.parse(e))}catch(o){console.log("Route ERROR:",o.message),w({success:!1,payload:null,error:o.message,errPayload:e})}}),k.on("error",(o)=>{w({success:!1,payload:null,error:o.message})})});m.write(t),m.on("error",(k)=>{console.log("HTTPS request ERROR =>",k)}),m.end()})}aE();async function mG({key:_,database:E,field:R,table:N,user_id:A}){let L=t_(),{host:U,port:G,scheme:S}=L;return{success:!0,payload:await new Promise((Y,M)=>{let H={database:E,field:R,table:N},X=Object.keys(H).filter(($)=>H[$]).map(($)=>`${$}=${H[$]}`).join("&");S.request({method:"GET",headers:{"Content-Type":"application/json",Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:G,hostname:U,path:`/api/query/${A||L.user_id}/get-schema`+(X?.match(/./)?`?${X}`:"")},($)=>{var z="";$.on("data",function(w){z+=w}),$.on("end",function(){Y(JSON.parse(z))}),$.on("error",(w)=>{Y(null)})}).end()})}}aE();async function bL({key:_,payload:E,user_id:R}){let N=t_(),{host:A,port:L,scheme:U}=N;try{return await new Promise((S,C)=>{let Y=JSON.stringify(E),M=U.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(Y).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:L,hostname:A,path:`/api/query/${R||N.user_id}/add-image`},(H)=>{var X="";H.on("data",function($){X+=$}),H.on("end",function(){S(JSON.parse(X))}),H.on("error",($)=>{C($)})});M.write(Y),M.end()})}catch(G){return console.log("Error in uploading image: ",G.message),{success:!1,payload:null,msg:G.message}}}mf.exports=bL;aE();async function gG({key:_,payload:E,user_id:R}){let N=t_(),{host:A,port:L,scheme:U}=N;try{return await new Promise((S,C)=>{let Y=JSON.stringify(E),M=U.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(Y).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:L,hostname:A,path:`/api/query/${R||N.user_id}/add-file`},(H)=>{var X="";H.on("data",function($){X+=$}),H.on("end",function(){S(JSON.parse(X))}),H.on("error",($)=>{C($)})});M.write(Y),M.end()})}catch(G){return console.log("Error in uploading file: ",G.message),{success:!1,payload:null,msg:G.message}}}aE();async function iL({key:_,url:E,user_id:R}){let N=t_(),{host:A,port:L,scheme:U}=N;try{return await new Promise((S,C)=>{let Y=JSON.stringify({url:E}),M=U.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(Y).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:L,hostname:A,path:`/api/query/${R||N.user_id}/delete-file`},(H)=>{var X="";H.on("data",function($){X+=$}),H.on("end",function(){S(JSON.parse(X))}),H.on("error",($)=>{C($)})});M.write(Y),M.end()})}catch(G){return console.log("Error deleting file: ",G.message),{success:!1,payload:null,msg:G.message}}}gf.exports=iL;var CY=X_(require("path")),PY=X_(require("fs"));aE();CR();rN();CR();var sP=X_(require("fs")),tP=X_(require("path"));function RA({userId:_}){try{let E=tP.default.resolve(process.cwd(),`${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${_}/main.json`);return JSON.parse(sP.default.readFileSync(E,"utf-8"))}catch(E){return NE({component:"grabUserSchemaData",message:E.message}),null}}CR();var rP=X_(require("fs")),aP=X_(require("path"));function NA({userId:_,schemaData:E}){try{let R=aP.default.resolve(process.cwd(),`${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${_}/main.json`);return rP.default.writeFileSync(R,JSON.stringify(E),"utf8"),!0}catch(R){return NE({component:"/functions/backend/setUserSchemaData",message:R.message}),!1}}var nG=X_(require("path")),IY=X_(require("fs"));var eP=X_(require("fs")),_Y=X_(require("path")),yG=X_(ZT());wT();var __dirname="/home/benoti/Projects/Git/moduletrace/datasquirel/datasquirel/package-shared/shell/utils",TA=yG.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_USERNAME,password:process.env.DSQL_DB_PASSWORD,database:process.env.DSQL_DB_NAME,charset:"utf8mb4",ssl:WR()}});async function rR({query:_,values:E,database:R}){let N=!0;if(R)TA=yG.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_USERNAME,password:process.env.DSQL_DB_PASSWORD,database:R,charset:"utf8mb4",ssl:WR()}});if(!N)return console.log("Shell Db Handler ERROR in switching Database! Operation Failed!"),null;let A;try{if(_&&E)A=await TA.query(_,E);else A=await TA.query(_);await TA.end()}catch(L){if(process.env.FIRST_RUN)return null;console.log("ERROR in dbHandler =>",L.message),console.log(L),console.log(TA.config()),eP.default.appendFileSync(_Y.default.resolve(__dirname,"../.tmp/dbErrorLogs.txt"),JSON.stringify(L,null,4)+"\n"+Date()+"\n\n\n","utf8"),A=null}if(A)return JSON.parse(JSON.stringify(A));else return null}async function OA(_){let E;try{E=await rR({query:_})}catch(R){console.log("ERROR in noDatabaseDbHandler =>",R.message)}if(E)return E;else return null}async function XE({queryString:_,queryValuesArray:E,database:R,tableSchema:N}){let A;try{if(_&&E&&Array.isArray(E)&&E[0])A=await rR({query:_,values:E,database:R});else A=await rR({query:_,database:R})}catch(L){console.log("Shell Vardb Error =>",L.message)}return A}function AA({columnData:_,primaryKeySet:E}){let{fieldName:R,dataType:N,nullValue:A,primaryKey:L,autoIncrement:U,defaultValue:G,defaultValueLiteral:S,onUpdateLiteral:C,notNullValue:Y}=_,M="";if(M+=`\`${R}\` ${N}`,A)M+=" DEFAULT NULL";else if(S)M+=` DEFAULT ${S}`;else if(G)if(String(G).match(/uuid\(\)/i))M+=" DEFAULT UUID()";else M+=` DEFAULT '${G}'`;else if(Y)M+=" NOT NULL";if(C)M+=` ON UPDATE ${C}`;if(L&&!E)M+=" PRIMARY KEY",E=!0;if(U)M+=" AUTO_INCREMENT",E=!0;return{fieldEntryText:M,newPrimaryKeySet:E||!1}}function iG({tableInfoArray:_}){let E=_,R=bG(),N=E.filter((A)=>A.primaryKey);return R.forEach((A)=>{let L=E.filter((U)=>U.fieldName===A.fieldName);if(L&&L[0])return;else if(A.fieldName==="id"&&!N[0])E.unshift(A);else E.push(A)}),E}async function uG({dbFullName:_,tableName:E,tableInfoArray:R,dbSchema:N,clone:A,tableSchema:L,recordedDbEntry:U}){let G=iG({tableInfoArray:R}),S=[];S.push(`CREATE TABLE IF NOT EXISTS \`${E}\` (`);try{if(!U)throw new Error("Recorded Db entry not found!");if(!(await XE({database:"datasquirel",queryString:"SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?",queryValuesArray:[U.id,L?.tableName]}))?.[0]?.id){let z=await rR({query:"INSERT INTO user_database_tables SET ?",values:{user_id:U.user_id,db_id:U.id,db_slug:U.db_slug,table_name:L?.tableFullName,table_slug:L?.tableName,child_table:L?.childTable?"1":null,child_table_parent_database:L?.childTableDbFullName||null,child_table_parent_table:L?.childTableName||null,date_created:Date(),date_created_code:Date.now(),date_updated:Date(),date_updated_code:Date.now()},database:"datasquirel"})}}catch(X){}let C=!1,Y=[];for(let X=0;X{if(Y[0])return",";if(X===G.length-1)return"";return","})();S.push(" "+a+q_)}if(Y[0])Y.forEach((X,$,z)=>{let w=X.fieldName,g=X.foreignKey?.destinationTableName,d=X.foreignKey?.destinationTableColumnName,t=X.foreignKey?.cascadeDelete,s=X.foreignKey?.cascadeUpdate,m=X.foreignKey?.foreignKeyName,k=(()=>{if($===Y.length-1)return"";return","})();S.push(` CONSTRAINT \`${m}\` FOREIGN KEY (\`${w}\`) REFERENCES \`${g}\`(${d})${t?" ON DELETE CASCADE":""}${s?" ON UPDATE CASCADE":""}${k}`)});S.push(") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;");let M=S.join("\n");return await XE({queryString:M,database:_})}var EY=X_(require("fs"));var bf=/^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/;async function uL({dbFullName:_,tableName:E,tableInfoArray:R,userId:N,dbSchema:A,tableIndexes:L,tableSchema:U,clone:G,childDb:S,tableIndex:C,tableNameFull:Y,recordedDbEntry:M}){let H=[],X=R;try{let $=[],z=[];if($.push(`ALTER TABLE \`${E}\``),S)try{if(!M)throw new Error("Recorded Db entry not found!");if(!(await XE({database:"datasquirel",queryString:"SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?",queryValuesArray:[M.id,E]}))?.[0]?.id){let e=await rR({query:"INSERT INTO user_database_tables SET ?",values:{user_id:M.user_id,db_id:M.id,db_slug:M.db_slug,table_name:Y,table_slug:E,child_table:U?.childTable?"1":null,child_table_parent_database:U?.childTableDbFullName||null,child_table_parent_table:U.childTableName||null,date_created:Date(),date_created_code:Date.now(),date_updated:Date(),date_updated_code:Date.now()},database:"datasquirel"})}}catch(m){}let w=await XE({queryString:`SHOW INDEXES FROM \`${E}\``,database:_}),g=await XE({queryString:`SHOW COLUMNS FROM \`${E}\``,database:_}),d=[];for(let m=0;mo.fieldName===k||o.originName===k);if(e&&e[0]){if(e[0].updatedField&&e[0].fieldName){d.push(e[0].fieldName);let o=await XE({queryString:`ALTER TABLE ${E} RENAME COLUMN \`${e[0].originName}\` TO \`${e[0].fieldName}\``,database:_});console.log(`Column Renamed from "${e[0].originName}" to "${e[0].fieldName}"`);try{let c=A,S_=c.findIndex((K_)=>K_.dbFullName===_),U_=c[S_].tables.findIndex((K_)=>K_.tableName===E),V_=c[S_].tables[U_].fields.findIndex((K_)=>K_.fieldName===e[0].fieldName);delete c[S_].tables[U_].fields[V_].originName,delete c[S_].tables[U_].fields[V_].updatedField,X=c[S_].tables[U_].fields,EY.default.writeFileSync(`${String(process.env.DSQL_USER_DB_SCHEMA_PATH)}/user-${N}/main.json`,JSON.stringify(c),"utf8")}catch(c){console.log("Update table error =>",c.message)}}continue}else await XE({queryString:`ALTER TABLE ${E} DROP COLUMN \`${k}\``,database:_})}for(let m=0;mc.alias===k)?.[0])throw new Error(`This Index(${k}) Has been Deleted!`)}catch(o){await XE({queryString:`ALTER TABLE ${E} DROP INDEX \`${k}\``,database:_})}}if(L&&L[0])for(let m=0;mU_.Key_name===c)[0])throw new Error("This Index Does not Exist")}catch(S_){await XE({queryString:`CREATE${k?.match(/fullText/i)?" FULLTEXT":""} INDEX \`${c}\` ON ${E}(${o?.map((U_)=>U_.value).map((U_)=>`\`${U_}\``).join(",")}) COMMENT 'schema_index'`,database:_})}}let t=await XE({queryString:`SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${_}' AND TABLE_NAME='${E}' AND CONSTRAINT_TYPE='FOREIGN KEY'`,database:_});if(t)for(let m=0;m{if(a.Field===c)return p_=WE,!0}):null,{fieldEntryText:j_}=AA({columnData:k});if(l_&&l_[0]?.Field){let{Field:a,Type:WE,Null:q_,Key:k_,Default:n_,Extra:e_}=l_[0],V=m1)return await XE({queryString:s,database:_});else return"No Changes Made to Table"}catch($){return console.log('Error in "updateTable" shell function =>',$.message),"Error in Updating Table"}}a1();var __dirname="/home/benoti/Projects/Git/moduletrace/datasquirel/datasquirel/package-shared/shell";AY().config({path:"./../.env"});var Oj=process.argv.find((_)=>_==="--exec");async function _T({userId:_,targetDatabase:E,dbSchemaData:R}){let N=_?nG.default.join(String(process.env.DSQL_USER_DB_SCHEMA_PATH),`/user-${_}/main.json`):nG.default.resolve(__dirname,"../../jsonData/dbSchemas/main.json"),A=R||tR.parse(IY.default.readFileSync(N,"utf8"));if(!A){console.log("Schema Not Found!");return}for(let L=0;Ld.tableName===g)[0]){let d=S.filter((t)=>t.tableNameOld&&t.tableNameOld===g);if(d&&d[0])console.log("Renaming Table"),await XE({queryString:`RENAME TABLE \`${d[0].tableNameOld}\` TO \`${d[0].tableName}\``,database:G});else{console.log(`Dropping Table from ${G}`),await XE({queryString:`DROP TABLE \`${g}\``,database:G});let t=await rR({query:"DELETE FROM user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?",values:[_,Y,g],database:"datasquirel"})}}}let z=(_?await XE({database:"datasquirel",queryString:"SELECT * FROM user_databases WHERE db_full_name = ?",queryValuesArray:[G]}):void 0)?.[0];for(let w=0;w0){let k=await uL({dbFullName:G,tableName:d,tableNameFull:g.tableFullName,tableInfoArray:t,userId:_,dbSchema:A,tableIndexes:s,tableIndex:w,childDb:U.childDatabase||void 0,recordedDbEntry:z,tableSchema:g});if(g.childrenTables&&g.childrenTables[0])for(let e=0;ez_.Key_name===U_)[0])throw new Error("This Index Does not Exist")}catch(V_){await XE({queryString:`CREATE${o?.match(/fullText/i)?" FULLTEXT":""} INDEX \`${U_}\` ON ${d}(${S_?.map((K_)=>K_.value).map((K_)=>`\`${K_}\``).join(",")}) COMMENT 'schema_index'`,database:G})}}}}}if(M?.[0])for(let w=0;w!R||!Object.keys(R).includes(S)).filter((S)=>!N||!N.find((C)=>C.fieldName==S)),G.forEach((S)=>{let C=_?_[S]:null;if(typeof C=="string"){let Y={fieldName:S,dataType:C.length>255?"TEXT":"VARCHAR(255)"};if(Boolean(C.match(/<[^>]+>/g)))Y.richText=!0;U.push(Y)}else if(typeof C=="number")U.push({fieldName:S,dataType:"INT"});else U.push({fieldName:S,dataType:"VARCHAR(255)"})}),U}catch(A){return console.log(`grabSchemaFieldsFromData.js ERROR: ${A.message}`),NE({component:"grabSchemaFieldsFromData.js",message:A.message}),[]}}CR();function oG(_){try{let E=GY(),R=bG(),N=_?.payload?IA({data:_?.payload,excludeData:R,excludeFields:E.fields}):[];console.log("supplementalFields",N);let A=[...E.fields,...N];console.log("allFields",A);let L=[...R.slice(0,2),...A,...R.slice(2)];return E.fields=[...L],E}catch(E){return console.log(`grabNewUsersTableSchema.js ERROR: ${E.message}`),NE({component:"grabNewUsersTableSchema",message:E.message}),null}}async function sG({userId:_,database:E,useLocal:R,payload:N}){try{let A=E,L=oG({payload:N});if(!L)throw new Error("Couldn't Get User Preset!");let U=RA({userId:_});if(!U)throw new Error("User schema data not found!");let G=U.find((M)=>M.dbFullName===E);if(!G)throw new Error("Couldn't Find Target Database!");let S=G?.tables.findIndex((M)=>M.tableName==="users");if(typeof S=="number"&&S>0)G.tables[S]=L;else G.tables.push(L);NA({schemaData:U,userId:_});let C=R?await xE("SELECT id FROM user_databases WHERE user_id=? AND db_slug=?",[_,E]):await oE("SELECT id FROM user_databases WHERE user_id=? AND db_slug=?",[_,E]);if(C?.[0]){let M=await $R({dbFullName:"datasquirel",tableName:"user_database_tables",data:{user_id:_,db_id:C[0].id,db_slug:G.dbSlug,table_name:"Users",table_slug:"users"},useLocal:R})}let Y=await _T({userId:_,targetDatabase:A});return"Done!"}catch(A){return console.log(`addUsersTableToDb.js ERROR: ${A.message}`),NE({component:"addUsersTableToDb",message:A.message,user:{id:_}}),A.message}}CR();async function tG({userId:_,database:E,newFields:R,newPayload:N}){try{let A=E,L=RA({userId:_});if(!L)throw new Error("User schema data not found!");let U=L.findIndex((X)=>X.dbFullName===E);if(U<0)throw new Error("Couldn't Find Target Database!");let G=L[U]?.tables.findIndex((X)=>X.tableName==="users"),S=L[U].tables[G];if(!S?.fields?.[0])throw new Error("Users Table Not Found!");let C=IA({fields:R,data:N}),Y=S.fields.findIndex((X)=>X.fieldName==="date_created"),M=Y>=0?Y:0;S.fields.splice(M,0,...C),NA({schemaData:L,userId:_});let H=await _T({userId:_,targetDatabase:A});return"Done!"}catch(A){return console.log(`addUsersTableToDb.js ERROR: ${A.message}`),NE({component:"addUsersTableToDb",message:A.message,user:{id:_}}),A.message}}JN();LA();async function rG({encryptionKey:_,payload:E,database:R,userId:N,useLocal:A}){let L=R,U=N||process.env.DSQL_API_USER_ID,G=_||process.env.DSQL_ENCRYPTION_PASSWORD;if(!G)return{success:!1,msg:"No encryption key provided",payload:null};if(!G?.match(/.{8,}/))return{success:!1,msg:"Encryption key must be at least 8 characters long",payload:null};let S=K1({encryptionKey:G,password:String(E.password)});E.password=S;let C="SHOW COLUMNS FROM users",Y=await LE({queryString:C,database:L,useLocal:A});if(!Y?.[0]){let g=await sG({userId:Number(U),database:L,useLocal:A,payload:E});Y=await LE({queryString:C,database:L,useLocal:A})}if(!Y?.[0])return{success:!1,msg:"Could not create users table"};let M=Y.map((g)=>g.Field),H=null;for(let g=0;g{let t=JSON.stringify({payload:E,database:R,encryptionKey:N}),s=z.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(t).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:$,hostname:X,path:`/api/user/${A||H.user_id}/add-user`},(m)=>{var k="";m.on("data",function(e){k+=e}),m.on("end",function(){g(JSON.parse(k))}),m.on("error",(e)=>{d(e)})});s.write(t),s.end()})}var YY=X_(require("path")),HY=X_(require("fs"));aE();sR();LA();JN();async function eG({payload:_,dbFullName:E,updatedUserId:R,useLocal:N,dbSchema:A}){if(!(await LE({queryString:"SELECT * FROM users WHERE id = ?",queryValuesArray:[R],database:E,useLocal:N}))?.[0])return{success:!1,msg:"User not found"};let S=(()=>{let Y=Object.keys(_),M=(()=>{try{return A?.tables?.find(($)=>$.tableName=="users")}catch(X){return}})(),H={};if(Y.forEach((X)=>{let $=M?.fields?.find((w)=>w.fieldName==X);if(X?.match(/^date_|^id$|^uuid$/))return;let z=_[X];if($?.encrypted)z=BE({data:z});H[X]=z}),H.password&&typeof H.password=="string")H.password=K1({password:H.password});return H})();return{success:!0,payload:await r1({dbContext:"Dsql User",paradigm:"Full Access",dbFullName:E,tableName:"users",identifierColumnName:"id",identifierValue:R,data:S,useLocal:N})}}async function _2({key:_,payload:E,database:R,user_id:N,useLocal:A,updatedUserId:L}){let{DSQL_DB_HOST:U,DSQL_DB_USERNAME:G,DSQL_DB_PASSWORD:S,DSQL_DB_NAME:C}=process.env,Y=t_(),{host:M,port:H,scheme:X}=Y;if(U?.match(/./)&&G?.match(/./)&&S?.match(/./)&&C?.match(/./)&&A){let z;try{let w=YY.default.resolve(process.cwd(),"dsql.schema.json");z=JSON.parse(HY.default.readFileSync(w,"utf8"))}catch(w){}return await eG({payload:E,dbFullName:C,useLocal:A,updatedUserId:L,dbSchema:z})}return await new Promise((z,w)=>{let g=JSON.stringify({payload:E,database:R,updatedUserId:L}),d=X.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(g).length,Authorization:process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY||_},port:H,hostname:M,path:`/api/user/${N||Y.user_id}/update-user`},(t)=>{var s="";t.on("data",function(m){s+=m}),t.on("end",function(){z(JSON.parse(s))}),t.on("error",(m)=>{w(m)})});d.write(g),d.end()})}var MY=X_(require("fs")),FY=X_(require("path"));sR();aE();JN();LA();async function E2({encryptionKey:_,email:E,username:R,password:N,database:A,additionalFields:L,email_login:U,email_login_code:G,email_login_field:S,token:C,skipPassword:Y,social:M,useLocal:H}){let X=A;if(E?.match(/ /)||R&&R?.match(/ /)||N&&N?.match(/ /))return{success:!1,msg:"Invalid Email/Password format"};let $=N?K1({encryptionKey:_,password:N}):null,z=await LE({queryString:"SELECT * FROM users WHERE email = ? OR username = ?",queryValuesArray:[E,R],database:X.replace(/[^a-z0-9_]/g,""),useLocal:H});if((!z||!z[0])&&!M)return{success:!1,payload:null,msg:"No user found"};let w=!1;if(z?.[0]&&!U&&Y)w=!0;else if(z?.[0]&&!U)w=$===z[0].password;else if(z&&z[0]&&U&&G&&S){let m=z[0][S];if(!m)throw new Error("No code Found!");let k=m.split("-"),[e,o]=k,c=900000;if(Date.now()-Number(o)>c)throw new Error("Code Expired");w=e===G}if(!w&&!0)return{success:!1,msg:"Wrong password, no social login validity",payload:null};if(w&&U){let m=await LE({queryString:`UPDATE users SET ${S} = '' WHERE email = ? OR username = ?`,queryValuesArray:[E,R],database:X.replace(/[^a-z0-9_]/g,""),useLocal:H})}let d=Math.random().toString(36).substring(2)+"-"+Math.random().toString(36).substring(2),t={id:z[0].id,first_name:z[0].first_name,last_name:z[0].last_name,username:z[0].username,email:z[0].email,phone:z[0].phone,social_id:z[0].social_id,image:z[0].image,image_thumbnail:z[0].image_thumbnail,verification_status:z[0].verification_status,social_login:z[0].social_login,social_platform:z[0].social_platform,csrf_k:d,more_data:z[0].more_user_data,logged_in_status:!0,date:Date.now()},s={success:!0,msg:"Login Successful",payload:t,userId:z[0].id,csrf:d};if(L&&Array.isArray(L)&&L.length>0)L.forEach((m)=>{t[m]=z[0][m]});return s}var X1=X_(require("fs")),lT=X_(require("path")),cL=()=>{let _=process.env.DSQL_AUTH_DIR,E=_?.match(/./)?_:lT.default.resolve(process.cwd(),"./.tmp"),R=lT.default.join(E,"logins");return{root:E,auth:R}},Uj=()=>{try{let _=cL();if(!X1.default.existsSync(_.root))X1.default.mkdirSync(_.root,{recursive:!0});if(!X1.default.existsSync(_.auth))X1.default.mkdirSync(_.auth,{recursive:!0});return!0}catch(_){return console.log(`Error initializing Auth Files: ${_.message}`),!1}},nT=(_,E)=>{Uj();try{return X1.default.writeFileSync(lT.default.join(cL().auth,_),E),!0}catch(R){return console.log(`Error writing Auth File: ${R.message}`),!1}};var dL=(_)=>{try{return X1.default.rmSync(lT.default.join(cL().auth,_))}catch(E){return console.log(`Error deleting Auth File: ${E.message}`),null}},WY=(_)=>{try{return X1.default.existsSync(lT.default.join(cL().auth,_))}catch(E){return console.log(`Error checking Auth File: ${E.message}`),!1}};async function N2({key:_,payload:E,database:R,additionalFields:N,response:A,encryptionKey:L,encryptionSalt:U,email_login:G,email_login_code:S,temp_code_field:C,token:Y,user_id:M,skipPassword:H,useLocal:X,apiUserID:$,skipWriteAuthFile:z}){let w=t_(),{host:g,port:d,scheme:t}=w,s="temp_login_code",m=G?C?C:"temp_login_code":void 0,k=L||process.env.DSQL_ENCRYPTION_PASSWORD,e=U||process.env.DSQL_ENCRYPTION_SALT;if(!k?.match(/.{8,}/))return console.log("Encryption key is invalid"),{success:!1,payload:null,msg:"Encryption key is invalid"};if(!e?.match(/.{8,}/))return console.log("Encryption salt is invalid"),{success:!1,payload:null,msg:"Encryption salt is invalid"};if(!E.email)return{success:!1,payload:null,msg:"Email Required"};let o={success:!1},{DSQL_DB_HOST:c,DSQL_DB_USERNAME:S_,DSQL_DB_PASSWORD:U_,DSQL_DB_NAME:V_}=process.env;if(c?.match(/./)&&S_?.match(/./)&&U_?.match(/./)&&V_?.match(/./)&&X){let K_;try{let z_=FY.default.resolve(process.cwd(),"dsql.schema.json");K_=JSON.parse(MY.default.readFileSync(z_,"utf8"))}catch(z_){}o=await E2({database:process.env.DSQL_DB_NAME||"",email:E.email,username:E.username,password:E.password,skipPassword:H,encryptionKey:k,additionalFields:N,email_login:G,email_login_code:S,email_login_field:m,token:Y,useLocal:X})}else o=await new Promise((K_,z_)=>{let r={encryptionKey:k,payload:E,database:R,additionalFields:N,email_login:G,email_login_code:S,email_login_field:m,token:Y,skipPassword:H},A_=JSON.stringify(r),L_=t.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(A_).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:d,hostname:g,path:`/api/user/${M||w.user_id}/login-user`},(P_)=>{var p_="";P_.on("data",function(l_){p_+=l_}),P_.on("end",function(){K_(JSON.parse(p_))}),P_.on("error",(l_)=>{z_(l_)})});L_.write(A_),L_.end()});if(o?.success){let K_=BE({data:JSON.stringify(o.payload),encryptionKey:k,encryptionSalt:e});try{if(Y&&K_)o.token=K_}catch(L_){}let z_=uE({database:R,userId:$||M||w.user_id});if(o.csrf&&!z)nT(o.csrf,JSON.stringify(o.payload));o.cookieNames=z_,o.key=String(K_);let{keyCookieName:r,csrfCookieName:A_}=z_;A?.setHeader("Set-Cookie",[`${r}=${K_};samesite=strict;path=/;HttpOnly=true;Secure=true`,`${A_}=${o.payload?.csrf_k};samesite=strict;path=/;HttpOnly=true`])}return o}var z2=X_(require("fs")),x2=X_(require("path"));aE();JN();var KW=X_(w2());sR();function WA({cookies:_}){let E=[];for(let R=0;R<_.length;R++){let N=_[R],A=`${N.name}=${N.value}`;if(N.maxAge)A+=`;Max-Age=${N.maxAge}`;if(N.path)A+=`;Path=${N.path}`;if(N.domain)A+=`;Domain=${N.domain}`;if(N.secure)A+=";Secure";if(N.httpOnly)A+=";HttpOnly";if(N.sameSite)A+=`;SameSite=${N.sameSite}`;if(N.expires)A+=`;expires=${N.expires}`;if(N.priority)A+=`;priority=${N.priority}`;E.push(A)}return E}async function Q2({email:_,database:E,email_login_field:R,mail_domain:N,mail_port:A,sender:L,mail_username:U,mail_password:G,html:S,useLocal:C,response:Y,extraCookies:M}){if(_?.match(/ /))return{success:!1,msg:"Invalid Email/Password format"};let H=Date.now(),z=await LE({queryString:"SELECT * FROM users WHERE email = ?",queryValuesArray:[_],database:E,useLocal:C});if(!z||!z[0])return{success:!1,msg:"No user found"};function w(){let d="";for(let t=0;t<8;t++)d+="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[Math.floor(Math.random()*"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".length)];return d}if(z?.[0]&&R){let g=w(),d=KW.default.createTransport({host:N||process.env.DSQL_MAIL_HOST,port:A?A:process.env.DSQL_MAIL_PORT?Number(process.env.DSQL_MAIL_PORT):465,secure:!0,auth:{user:U||process.env.DSQL_MAIL_EMAIL,pass:G||process.env.DSQL_MAIL_PASSWORD}}),t={};if(t.from=`"Datasquirel SSO" <${L||"support@datasquirel.com"}>`,t.sender=L||"support@datasquirel.com",t.to=_,t.subject="One Time Login Code",t.html=S.replace(/{{code}}/,g),!(await d.sendMail(t))?.accepted)throw new Error("Mail not Sent!");let m=`UPDATE users SET ${R} = ? WHERE email = ?`,k=[g+`-${H}`,_],e=await LE({queryString:m,queryValuesArray:k,database:E,useLocal:C}),o={success:!0,code:g,email:_,createdAt:H,msg:"Success"};if(Y){let S_=uE().oneTimeCodeName,U_=BE({data:JSON.stringify(o)});if(!U_)throw new Error("apiSendEmailCode Error: Failed to encrypt payload");let V_={name:S_,value:U_,sameSite:"Strict",path:"/",httpOnly:!0,secure:!0},K_=M?[...M,V_]:[V_],z_=WA({cookies:K_});Y.setHeader("Set-Cookie",z_)}return o}else return{success:!1,msg:"Invalid Email/Password format"}}var __dirname="/home/benoti/Projects/Git/moduletrace/datasquirel/datasquirel/users";async function q2({key:_,email:E,database:R,temp_code_field_name:N,mail_domain:A,mail_password:L,mail_username:U,mail_port:G,sender:S,user_id:C,useLocal:Y,response:M,extraCookies:H}){let X=t_(),{host:$,port:z,scheme:w}=X,g="temp_login_code",d=N?N:"temp_login_code",t=z2.default.readFileSync(x2.default.resolve(__dirname,"../package-shared/html/one-time-code.html"),"utf-8"),{DSQL_DB_HOST:s,DSQL_DB_USERNAME:m,DSQL_DB_PASSWORD:k,DSQL_DB_NAME:e}=process.env;if(s?.match(/./)&&m?.match(/./)&&k?.match(/./)&&e?.match(/./)&&Y){let o;try{let c=x2.default.resolve(process.cwd(),"dsql.schema.json");o=JSON.parse(z2.default.readFileSync(c,"utf8"))}catch(c){}return await Q2({database:e,email:E,email_login_field:d,html:t,mail_domain:A,mail_password:L,mail_port:G,mail_username:U,sender:S,useLocal:Y,response:M,extraCookies:H})}else return await new Promise((c,S_)=>{let U_=JSON.stringify({email:E,database:R,email_login_field:d,mail_domain:A,mail_password:L,mail_username:U,mail_port:G,sender:S,html:t}),V_=w.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(U_).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:z,hostname:$,path:`/api/user/${C||X.user_id}/send-email-code`},(K_)=>{var z_="";K_.on("data",function(r){z_+=r}),K_.on("end",function(){c(JSON.parse(z_))}),K_.on("error",(r)=>{S_(r)})});V_.write(U_),V_.end()})}P1();a1();function tL({response:_,database:E,dsqlUserId:R,encryptedUserString:N,request:A,cookieString:L}){try{let U=uE({database:E,userId:R||process.env.DSQL_API_USER_ID}),G=U.keyCookieName,S=U.csrfCookieName,C=uE().oneTimeCodeName,Y=(()=>{try{if(A){let X=GN({request:A,cookieString:L});return OR({encryptedString:X[G]})}else if(N)return OR({encryptedString:N});else return}catch(X){console.log("Error getting decrypted User JSON to logout:",X.message);return}})();if(!Y)throw new Error("Invalid User");let M=tR.parse(Y);if(!M?.csrf_k)throw new Error("Invalid User. Please check key");_?.setHeader("Set-Cookie",[`${G}=null;max-age=0`,`${S}=null;max-age=0`,`${C}=null;max-age=0`]);let H=M.csrf_k;return dL(H),{success:!0,msg:"User Logged Out",cookieNames:U}}catch(U){return console.log("Logout Error:",U.message),{success:!1,msg:"Logout Failed"}}}Hp.exports=tL;P1();var Wp=60000,Mp=Wp*60,f2=Mp*24,Fp=f2*7,wi=f2*30,Qi=f2*365;function MA({request:_,req:E,encryptionKey:R,encryptionSalt:N,level:A,database:L,dsqlUserId:U,encryptedUserString:G,expiry:S=Fp,cookieString:C,csrfHeaderIsValue:Y,csrfHeaderName:M}){try{let H=E||_,X=R||process.env.DSQL_ENCRYPTION_PASSWORD,$=N||process.env.DSQL_ENCRYPTION_SALT,z=GN({request:H,cookieString:C}),w=uE({userId:U||process.env.DSQL_API_USER_ID,database:L||process.env.DSQL_DB_NAME}),g=w.keyCookieName,d=w.csrfCookieName,t=G?G:z[g],s=z[d],m=OR({encryptedString:t,encryptionKey:X,encryptionSalt:$});if(!m)return{success:!1,payload:null,msg:"Couldn't Decrypt cookie"};let k=JSON.parse(m);if(!k.csrf_k)return{success:!1,payload:null,msg:"No CSRF_K in decrypted payload"};if(!WY(k.csrf_k))return{success:!1,payload:null,msg:"Auth file doesn't exist"};if(A?.match(/deep/i)&&H){if(M&&H.headers[M]!==k.csrf_k)return{success:!1,payload:null,msg:"CSRF_K mismatch"};let S_=Object.keys(H.headers).map((U_)=>U_.replace(/[^a-zA-Z0-9\-]/g,"")).find((U_)=>U_==k.csrf_k);if(Y&&!S_)return{success:!1,payload:null,msg:"CSRF_K Header Key mismatch"}}let e=Number(k.date);if(Number.isNaN(e)||typeof e!=="number")return{success:!1,payload:null,msg:"Payload Creation Date is not a number"};let o=Date.now()-e,c=process.env.DSQL_SESSION_EXPIRY_TIME?Number(process.env.DSQL_SESSION_EXPIRY_TIME):S;if(o>c)return{success:!1,payload:null,msg:"Session has expired"};return{success:!0,payload:k}}catch(H){return{success:!1,payload:null,msg:H.message}}}var XW=X_(require("fs")),JW=X_(require("path"));sR();aE();JN();async function j2({existingUser:_,database:E,additionalFields:R,useLocal:N}){let A=_?.id&&_.id.toString().match(/./)?await LE({queryString:"SELECT * FROM users WHERE id=?",queryValuesArray:[_.id.toString()],database:E,useLocal:N}):null;if(!A||!A[0])return{success:!1,payload:null,msg:"No user found"};let L=Math.random().toString(36).substring(2)+"-"+Math.random().toString(36).substring(2),U={id:A[0].id,first_name:A[0].first_name,last_name:A[0].last_name,username:A[0].username,email:A[0].email,phone:A[0].phone,social_id:A[0].social_id,image:A[0].image,image_thumbnail:A[0].image_thumbnail,verification_status:A[0].verification_status,social_login:A[0].social_login,social_platform:A[0].social_platform,csrf_k:L,more_data:A[0].more_user_data,logged_in_status:!0,date:Date.now()};if(R&&Array.isArray(R)&&R.length>0)R.forEach((G)=>{U[G]=A[0][G]});return{success:!0,msg:"Login Successful",payload:U,csrf:L}}async function v2({key:_,database:E,response:R,request:N,level:A,encryptionKey:L,encryptionSalt:U,additionalFields:G,encryptedUserString:S,user_id:C,useLocal:Y}){let M=t_(),{host:H,port:X,scheme:$}=M,z=L||process.env.DSQL_ENCRYPTION_PASSWORD,w=U||process.env.DSQL_ENCRYPTION_SALT,g=MA({database:E,encryptionKey:z,encryptionSalt:w,level:A,request:N,encryptedUserString:S});if(!g?.payload?.id)return{success:!1,payload:null,msg:"Cookie Credentials Invalid"};let d,{DSQL_DB_HOST:t,DSQL_DB_USERNAME:s,DSQL_DB_PASSWORD:m,DSQL_DB_NAME:k}=process.env;if(t?.match(/./)&&s?.match(/./)&&m?.match(/./)&&k?.match(/./)&&Y){let e;try{let o=JW.default.resolve(process.cwd(),"dsql.schema.json");e=JSON.parse(XW.default.readFileSync(o,"utf8"))}catch(o){}d=await j2({existingUser:g.payload,additionalFields:G,useLocal:Y})}else d=await new Promise((e,o)=>{let c=JSON.stringify({existingUser:g.payload,database:E,additionalFields:G}),S_=$.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(c).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:X,hostname:H,path:`/api/user/${C||M.user_id}/reauth-user`},(U_)=>{var V_="";U_.on("data",function(K_){V_+=K_}),U_.on("end",function(){e(JSON.parse(V_))}),U_.on("error",(K_)=>{o(K_)})});S_.write(c),S_.end()});if(d?.success){let e=BE({data:JSON.stringify(d.payload),encryptionKey:z,encryptionSalt:w}),o=uE({database:E,userId:C||M.user_id});d.cookieNames=o,d.key=String(e);let{keyCookieName:c,csrfCookieName:S_}=o;if(R?.setHeader("Set-Cookie",[`${c}=${e};samesite=strict;path=/;HttpOnly=true;Secure=true`,`${S_}=${d.payload?.csrf_k};samesite=strict;path=/;HttpOnly=true`]),d.csrf)dL(String(g.payload.csrf_k)),nT(d.csrf,JSON.stringify(d.payload))}return d}var $W=X_(require("path")),ZW=X_(require("fs"));aE();JN();async function p2({fields:_,dbFullName:E,userId:R,useLocal:N}){let A=`SELECT ${_.join(",")} FROM users WHERE id=?`,L=R||process.env.DSQL_API_USER_ID,U=await LE({queryString:A,queryValuesArray:[L],database:E.replace(/[^a-z0-9_]/g,""),useLocal:N});if(!U||!U[0])return{success:!1,payload:null};return{success:!0,payload:U[0]}}async function h2({key:_,userId:E,database:R,fields:N,apiUserId:A,useLocal:L}){let U=["id","first_name","last_name","email","username","image","image_thumbnail","verification_status","date_created","date_created_code","date_created_timestamp","date_updated","date_updated_code","date_updated_timestamp"],G=N&&N[0]?[...U,...N]:U,S=JSON.stringify({userId:E,database:R,fields:[...new Set(G)]}),C=t_(),{host:Y,port:M,scheme:H}=C,{DSQL_DB_HOST:X,DSQL_DB_USERNAME:$,DSQL_DB_PASSWORD:z,DSQL_DB_NAME:w}=process.env;if(X?.match(/./)&&$?.match(/./)&&z?.match(/./)&&w?.match(/./)&&L){let d;try{let t=$W.default.resolve(process.cwd(),"dsql.schema.json");d=JSON.parse(ZW.default.readFileSync(t,"utf8"))}catch(t){}return await p2({userId:E,fields:[...new Set(G)],dbFullName:w,useLocal:L})}return await new Promise((d,t)=>{let s=H.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(S).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:M,hostname:Y,path:`/api/user/${A||C.user_id}/get-user`},(m)=>{var k="";m.on("data",function(e){k+=e}),m.on("end",function(){d(JSON.parse(k))}),m.on("error",(e)=>{t(e)})});s.write(S),s.end()})}sR();aE();var hW=X_(require("https"));var VA=X_(require("fs"));var k2=X_(require("fs")),wW=X_(w2()),Bp=wW.default.createTransport({host:process.env.DSQL_MAIL_HOST,port:465,secure:!0,auth:{user:process.env.DSQL_MAIL_EMAIL,pass:process.env.DSQL_MAIL_PASSWORD}});async function m2({to:_,subject:E,text:R,html:N,alias:A,senderName:L}){if(!process.env.DSQL_MAIL_HOST||!process.env.DSQL_MAIL_EMAIL||!process.env.DSQL_MAIL_PASSWORD)return null;let U=(()=>{if(A?.match(/support/i))return process.env.DSQL_MAIL_EMAIL;return process.env.DSQL_MAIL_EMAIL})(),G;if(!k2.default.existsSync("./email/index.html"))return;let C=k2.default.readFileSync("./email/index.html","utf8").replace(/{{email_body}}/,N?N:"").replace(/{{issue_date}}/,Date().substring(0,24));try{let Y={};if(Y.from=`"${L||"Datasquirel"}" <${U}>`,Y.sender=U,A)Y.replyTo=U;Y.to=_,Y.subject=E,Y.text=R,Y.html=C,G=await Bp.sendMail(Y)}catch(Y){console.log("ERROR in handleNodemailer Function =>",Y.message)}return G}var pW=X_(require("path"));var vW=X_(fW());rN();var jW=X_(ZT());wT();var y2=jW.default({config:{host:process.env.DSQL_DB_HOST,user:process.env.DSQL_DB_USERNAME,password:process.env.DSQL_DB_PASSWORD,charset:"utf8mb4",ssl:WR()}});function b2(..._){try{return new Promise((E,R)=>{y2.query(..._).then((N)=>{y2.end(),E(JSON.parse(JSON.stringify(N)))}).catch((N)=>{y2.end(),E({error:N.message,sql:N.sql})})})}catch(E){return{success:!1,error:E.message}}}sR();WN();async function i2({userId:_,useLocal:E}){try{let R=process.env.DSQL_DB_HOST||"127.0.0.1",N=`dsql_user_${_}`,A=vW.default.generate({length:16,numbers:!0,symbols:!0,uppercase:!0,exclude:"*#.'`\""}),L=BE({data:A}),U=`CREATE USER IF NOT EXISTS '${N}'@'127.0.0.1' IDENTIFIED BY '${A}'`;if(E)await xE(U);else await b2(U);let G="UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1', mariadb_pass = ? WHERE id = ?",S=[N,L,_],C=E?await xE(G,S):await oE(G,S),Y=await $R({tableName:"mariadb_users",data:{user_id:_,username:N,host:R,password:L,primary:"1",grants:'[{"database":"*","table":"*","privileges":["ALL"]}]'},dbContext:"Master",useLocal:E});console.log(`User ${_} SQL credentials successfully added.`)}catch(R){console.log("Error in adding SQL user in 'addMariadbUser' function =>",R.message)}}JN();sR();CR();rN();WN();async function u2({query:_,user:E,useLocal:R}){try{let N=R?xE:oE,{invite:A,database_access:L,priviledge:U,email:G}=_,S="SELECT date_created_code FROM invitations WHERE inviting_user_id=? AND invited_user_email=?",Y=await N("SELECT date_created_code FROM invitations WHERE inviting_user_id=? AND invited_user_email=?",[A,G]);if(!Y||!Y[0])throw new Error("No Invitation Found");if((await N("SELECT first_name,last_name,email FROM users WHERE id=?",[A]))?.[0]){if((await N("SELECT email FROM user_users WHERE user_id=? AND invited_user_id=? AND user_type='admin' AND email=?",[A,E.id,G]))?.[0])console.log("User already added");else{$R({dbFullName:"datasquirel",tableName:"user_users",data:{user_id:A,invited_user_id:E.id,database_access:L,first_name:E.first_name,last_name:E.last_name,phone:E.phone,email:E.email,username:E.username,user_type:"admin",user_priviledge:U,image:E.image,image_thumbnail:E.image_thumbnail},useLocal:R});let w=await N("SELECT db_tables_data FROM invitations WHERE inviting_user_id=? AND invited_user_email=?",[A,G]),g=await N("DELETE FROM delegated_user_tables WHERE root_user_id=? AND delegated_user_id=?",[A,E.id]);if(w&&w[0]){let d=w[0].db_tables_data.split("|");for(let t=0;t{Y[H]=S[0][H]});if(R&&(!N||N?.match(/^datasquirel$/)))u2({query:R,user:Y,useLocal:L});return{success:!0,payload:Y,csrf:C}}async function KA({database:_,social_id:E,email:R,social_platform:N,payload:A,invitation:L,supEmail:U,additionalFields:G,useLocal:S}){try{let Y=[E.toString(),N],M=await LE({database:_?_:"datasquirel",queryString:"SELECT * FROM users WHERE social_id = ? AND social_login='1' AND social_platform = ? ",queryValuesArray:Y,useLocal:S});if(M&&M[0])return await BA({user:M[0],social_platform:N,invitation:L,database:_,additionalFields:G,useLocal:S});let H=R?R:U?U:null;if(!H)return{success:!1,payload:null,msg:"No Email Present"};let X=`SELECT * FROM users WHERE email='${H}'`,$=await LE({database:_?_:"datasquirel",queryString:X,useLocal:S});if($&&$[0])return{success:!1,payload:null,msg:"This Email is already taken"};let g=await LE({database:_?_:"datasquirel",queryString:"SELECT * FROM users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?",queryValuesArray:[H,N,E],useLocal:S});if(g&&g[0])return await BA({user:A,social_platform:N,invitation:L,database:_,additionalFields:G,useLocal:S});let d=BE({data:E.toString()}),t={social_login:"1",verification_status:U?"0":"1",password:d};Object.keys(A).forEach((m)=>{t[m]=A[m]});let s=await $R({dbContext:_?"Dsql User":void 0,paradigm:_?"Full Access":void 0,dbFullName:_?_:"datasquirel",tableName:"users",duplicateColumnName:"email",duplicateColumnValue:H,data:{...t,email:H},useLocal:S});if(s?.insertId){if(!_)await i2({userId:s.insertId,useLocal:S});let m=`SELECT * FROM users WHERE id='${s.insertId}'`,k=await LE({database:_?_:"datasquirel",queryString:m,useLocal:S});if(!k||!k[0])return{success:!1,payload:null,msg:"User Insertion Failed!"};if(U&&_?.match(/^datasquirel$/)){let o=BE({data:JSON.stringify({id:s.insertId,email:U,dateCode:Date.now()})});m2({to:U,subject:"Verify Email Address",text:"Please click the link to verify your email address",html:VA.default.readFileSync("./email/send-email-verification-link.html","utf8").replace(/{{host}}/,process.env.DSQL_HOST||"").replace(/{{token}}/,o||"")}).then(()=>{})}let e=process.env.DSQL_STATIC_SERVER_DIR;if(!e)return console.log("Static File ENV not Found!"),{success:!1,payload:null,msg:"Static File ENV not Found!"};if(!_||_?.match(/^datasquirel$/)){let o=`${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${s.insertId}`,c=pW.default.join(e,`images/user-images/user-${s.insertId}`);VA.default.mkdirSync(o),VA.default.mkdirSync(c),VA.default.writeFileSync(`${o}/main.json`,JSON.stringify([]),"utf8")}return await BA({user:k[0],social_platform:N,invitation:L,database:_,additionalFields:G,useLocal:S})}else return console.log("Social User Failed to insert in 'handleSocialDb.js' backend function =>",s),{success:!1,payload:null,msg:"Social User Failed to insert in 'handleSocialDb.js' backend function"}}catch(C){return console.log("ERROR in 'handleSocialDb.js' backend function =>",C.message),{success:!1,payload:null,msg:C.message}}}a1();async function c2({token:_,database:E,additionalFields:R,additionalData:N}){try{let A=await new Promise((H,X)=>{hW.default.request({method:"GET",hostname:"www.googleapis.com",path:"/oauth2/v3/userinfo",headers:{Authorization:`Bearer ${_}`}},($)=>{let z="";$.on("data",(w)=>{z+=w}),$.on("end",()=>{H(tR.parse(z))})}).end()});if(!A?.email_verified)throw new Error("No Google User.");if(!E||typeof E!="string"||E?.match(/ /))return{success:!1,payload:void 0,msg:"Please provide a database slug(database name in lowercase with no spaces)"};let{given_name:L,family_name:U,email:G,sub:S,picture:C}=A,Y={email:G,first_name:L,last_name:U,social_id:S,social_platform:"google",image:C,image_thumbnail:C,username:`google-user-${S}`};if(N)Y={...Y,...N};return{...await KA({database:E,email:G||"",payload:Y,social_platform:"google",social_id:S,additionalFields:R})}}catch(A){return console.log(`apo-google-login.js ERROR: ${A.message}`),{success:!1,payload:void 0,msg:A.message}}}async function d2({key:_,token:E,database:R,response:N,encryptionKey:A,encryptionSalt:L,additionalFields:U,additionalData:G,apiUserID:S,useLocal:C}){let Y=t_(),{host:M,port:H,scheme:X}=Y,$=A||process.env.DSQL_ENCRYPTION_PASSWORD,z=L||process.env.DSQL_ENCRYPTION_SALT;if(!$?.match(/.{8,}/))return console.log("Encryption key is invalid"),{success:!1,payload:null,msg:"Encryption key is invalid"};if(!z?.match(/.{8,}/))return console.log("Encryption salt is invalid"),{success:!1,payload:null,msg:"Encryption salt is invalid"};if(!E||E?.match(/ /))return{success:!1,payload:null,msg:"Please enter Google Access Token"};let w={success:!1},{DSQL_DB_HOST:g,DSQL_DB_USERNAME:d,DSQL_DB_PASSWORD:t,DSQL_DB_NAME:s}=process.env;if(g?.match(/./)&&d?.match(/./)&&t?.match(/./)&&s?.match(/./)&&C)w=await c2({token:E,additionalFields:U,database:s,additionalData:G});else w=await new Promise((m,k)=>{let e=JSON.stringify({token:E,database:R,additionalFields:U,additionalData:G}),o=X.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(e).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:H,hostname:M,path:`/api/user/${S||Y.user_id}/google-login`},(c)=>{var S_="";c.on("data",function(U_){S_+=U_}),c.on("end",function(){m(JSON.parse(S_))}),c.on("error",(U_)=>{k(U_)})});o.write(e),o.end()});if(w?.success&&w?.payload){let m=BE({data:JSON.stringify(w.payload),encryptionKey:$,encryptionSalt:z}),k=uE({database:R,userId:S||process.env.DSQL_API_USER_ID});if(w.csrf)nT(w.csrf,JSON.stringify(w.payload));w.cookieNames=k,w.key=String(m);let{keyCookieName:e,csrfCookieName:o}=k;N?.setHeader("Set-Cookie",[`${e}=${m};samesite=strict;path=/;HttpOnly=true;Secure=true`,`${o}=${w.payload?.csrf_k};samesite=strict;path=/;HttpOnly=true`])}return w}var gW=X_(require("fs")),yW=X_(require("path"));sR();aE();rN();var l2=X_(require("https")),kW=X_(require("http")),mW=require("url");function aL({url:_,method:E,hostname:R,path:N,headers:A,body:L,port:U,scheme:G}){let S=L?JSON.stringify(L):null,C=_?new mW.URL(_):null,Y={method:E||"GET",hostname:C?C.hostname:R,port:G?.match(/https/i)?443:C?C.protocol?.match(/https/i)?443:C.port:U?Number(U):80,headers:{}};if(N)Y.path=N;if(A)Y.headers=A;if(L)Y.headers["Content-Type"]="application/json",Y.headers["Content-Length"]=S?Buffer.from(S).length:void 0;return new Promise((M,H)=>{let X=((G?.match(/https/i))?l2.default:(C?.protocol?.match(/https/i))?l2.default:kW.default).request(Y,($)=>{var z="";$.on("data",function(w){z+=w}),$.on("end",function(){M(z)}),$.on("error",(w)=>{console.log("HTTP response error =>",w.message),H(`HTTP response error =>, ${w.message}`)}),$.on("close",()=>{console.log("HTTP(S) Response Closed Successfully")})});if(L)X.write(S);X.on("error",($)=>{console.log("HTTPS request ERROR =>",$.message),H(`HTTP request error =>, ${$.message}`)}),X.end()})}async function n2({code:_,clientId:E,clientSecret:R}){let N;try{let A=await aL({method:"POST",hostname:"github.com",path:`/login/oauth/access_token?client_id=${E}&client_secret=${R}&code=${_}`,headers:{Accept:"application/json","User-Agent":"*"},scheme:"https"}),L=JSON.parse(A);if(!L?.access_token)return N;let U=await aL({method:"GET",hostname:"api.github.com",path:"/user",headers:{Authorization:`Bearer ${L.access_token}`,"User-Agent":"*"},scheme:"https"});if(N=JSON.parse(U),!N?.email&&N){let G=await oE(`SELECT email FROM users WHERE social_login='1' AND social_platform='github' AND social_id='${N.id}'`);if(G&&G[0])N.email=G[0].email}}catch(A){console.log("ERROR in githubLogin.js backend function =>",A.message)}return N}function eL(_){if(!_?.match(/./))return"";if(_?.match(/ /))return _;if(_){let E=_.split(""),R=[];for(let A=0;A{let S_=JSON.stringify({code:E,email:R,clientId:A,clientSecret:L,database:N,additionalFields:C,additionalData:M}),U_=z.request({method:"POST",headers:{"Content-Type":"application/json","Content-Length":Buffer.from(S_).length,Authorization:_||process.env.DSQL_FULL_ACCESS_API_KEY||process.env.DSQL_API_KEY},port:$,hostname:X,path:`/api/user/${Y||H.user_id}/github-login`},(V_)=>{var K_="";V_.on("data",function(z_){K_+=z_}),V_.on("end",function(){try{o(JSON.parse(K_))}catch(z_){console.log(z_),o({success:!1,user:null,msg:"Something went wrong"})}}),V_.on("error",(z_)=>{c(z_)})});U_.write(S_),U_.end()});if(w?.success&&w?.user){let o=BE({data:JSON.stringify(w.user),encryptionKey:G,encryptionSalt:S}),{user:c,dsqlUserId:S_}=w,U_=`datasquirel_${S_}_${N}_auth_key`,V_=`datasquirel_${S_}_${N}_csrf`;U.setHeader("Set-Cookie",[`${U_}=${o};samesite=strict;path=/;HttpOnly=true;Secure=true`,`${V_}=${c.csrf_k};samesite=strict;path=/;HttpOnly=true`,`dsqluid=${S_};samesite=strict;path=/;HttpOnly=true`,`datasquirel_social_id=${c.social_id};samesite=strict;path=/`])}return w}P1();function t2({request:_,encryptionKey:E,encryptionSalt:R,database:N,useLocal:A,cookieString:L}){try{let U=GN({request:_,cookieString:L}),G=uE(),S=G.keyCookieName,C=G.csrfCookieName,Y=U[S],M=U[C],H=OR({encryptedString:Y,encryptionKey:E,encryptionSalt:R});if(!H)return{key:void 0,csrf:void 0};if(!JSON.parse(H).csrf_k)return{key:void 0,csrf:void 0};return{key:Y,csrf:M}}catch(U){return{key:void 0,csrf:void 0}}}P1();function r2({token:_,encryptionKey:E,encryptionSalt:R}){try{let A=OR({encryptedString:_,encryptionKey:E,encryptionSalt:R});if(!A)return null;let L=JSON.parse(A);if(!L.csrf_k)return null;return L}catch(N){return null}}async function a2({imageInputFile:_,maxWidth:E,imagePreviewNode:R}){try{let N=_.name.replace(/\..*/,""),A,L,U=document.createElement("canvas"),G=_.type,S=0.95,C=E?E:null,Y=_,M=URL.createObjectURL(Y),H=new Image;return H.src=M,A=await new Promise((X,$)=>{H.onerror=function(){URL.revokeObjectURL(this.src),console.log("Cannot load image")},H.onload=function(z){let w=z.target;if(URL.revokeObjectURL(w.src),C){let t=C/H.naturalWidth;U.width=H.naturalWidth{U.toBlob((z)=>{X(z?.size)},G,S)}),{imageBase64:A?.replace(/.*?base64,/,""),imageBase64Full:A,imageName:N,imageSize:L}}catch(N){return console.log("Image Processing Error! =>",N.message),{imageBase64:void 0,imageBase64Full:void 0,imageName:void 0,imageSize:void 0}}}async function e2({imageInput:_,maxWidth:E,mimeType:R}){try{let N=document.querySelector("[data-imagepreview='image']"),A=_.files?.[0].name.replace(/\..*/,""),L,U=R?R:"image/jpeg",G=0.95,S=E?E:null,C=_.files?.[0],Y=C?URL.createObjectURL(C):void 0,M=new Image;if(Y)return M.src=Y,L=await new Promise((H,X)=>{M.onerror=function(){URL.revokeObjectURL(this.src),window.alert("Cannot load image!")},M.onload=function($){let z=$.target;URL.revokeObjectURL(z.src);let w=document.createElement("canvas");if(S){let t=S/M.naturalWidth;w.width=M.naturalWidth{let s=t;s.src=d});H(d)}}),{imageBase64:L?.replace(/.*?base64,/,""),imageBase64Full:L,imageName:A};else return{}}catch(N){return console.log("Image Processing Error! =>",N.message),{}}}async function _D({inputFile:_,allowedRegex:E}){let R=E?E:/image\/*|\/pdf/;if(!_?.type?.match(R))return window.alert(`We currently don't support ${_.type} file types. Support is coming soon. For now we support only images and PDFs.`),{fileName:_.name};try{let N=_.name.replace(/\..*/,""),A=await new Promise((L,U)=>{var G=new FileReader;G.readAsDataURL(_),G.onload=function(){L(G.result?.toString())},G.onerror=function(S){console.log("Error: ",S.message)}});return{fileBase64:A?.replace(/.*?base64,/,""),fileBase64Full:A,fileName:N,fileSize:_.size,fileType:_.type}}catch(N){return console.log("File Processing Error! =>",N.message),{fileName:_.name}}}var bW;async function ED(_){_.setLoading?.(!0);let E=await new Promise((R,N)=>{bW=setInterval(()=>{let A=window.google;if(A)window.clearInterval(bW),R(xp({..._,google:A}))},500)});return _.setLoading?.(!1),E}function xp({google:_,clientId:E,setLoading:R,triggerPrompt:N}){return setTimeout(()=>{R?.(!1)},3000),new Promise((A,L)=>{function U(C){A(C.access_token)}if(_.accounts.oauth2.initTokenClient({client_id:E,scope:"email profile",callback:U}).requestAccessToken(),N)_.accounts.id.prompt(S);function S(C){console.log(C)}})}function RD({clientId:_,redirectUrl:E,setLoading:R,scopes:N}){if(R)R(!0);let A=N?N.join("%20"):"read:user",L=`https://github.com/login/oauth/authorize?client_id=${_}&scope=${A}&redirect_uri=${E}`;window.location.assign(L)}function ND(){let _=document.cookie;if(!_||typeof _!=="string")return null;let E=_.split(";"),R={};return E.forEach((N)=>{let[A,L]=N.split("=");if(A&&typeof A=="string")R[A.replace(/^ +| +$/,"")]=L&&typeof L=="string"?L.replace(/^ +| +$/,""):null}),R}async function TD(_){try{let E=localStorage.getItem("user"),R;try{R=JSON.parse(E||"")}catch(U){console.log(U)}if(!R)return!1;let N=ND(),A=N?.datasquirel_social_id&&typeof N.datasquirel_social_id=="string"&&!N.datasquirel_social_id.match(/^null$/i)?N.datasquirel_social_id:null;return localStorage.setItem("user","{}"),localStorage.removeItem("csrf"),document.cookie="datasquirel_social_id=null;samesite=strict;path=/",await new Promise((U,G)=>{if(A&&!A?.match(/^null$/i)){let S=_?.googleClientId;if(S){let C=document.createElement("script");C.src="https://accounts.google.com/gsi/client",C.className="social-script-tag",document.body.appendChild(C),C.onload=function(Y){let M=window.google;if(M)M.accounts.id.initialize({client_id:S}),M.accounts.id.revoke(A,(H)=>{console.log(H.error),U(!0)})}}else U(!0)}else U(!0)})}catch(E){return!1}}var OD=X_(SI());async function XA(_,E,R,N){let A,L=localStorage.getItem(N||"csrf"),U={"Content-Type":"application/json"};if(R&&L)U[`'${L.replace(/\"/g,"")}'`]="true";if(typeof E==="string")try{let G;switch(E){case"post":G=await fetch(_,{method:E,headers:U}),A=G.json();break;default:G=await fetch(_),A=G.json();break}}catch(G){console.log("FetchAPI error #1:",G.message),A=null}else if(typeof E==="object")try{let G;if(E.body&&typeof E.body==="object"){let S=OD.default.cloneDeep(E.body);E.body=JSON.stringify(S)}if(E.headers){E.headers=OD.default.merge(E.headers,U);let S={...E};G=await fetch(_,S)}else{let S={...E,headers:U};G=await fetch(_,S)}A=G.json()}catch(G){console.log("FetchAPI error #2:",G.message),A=null}else try{A=await(await fetch(_)).json()}catch(G){console.log("FetchAPI error #3:",G.message),A=null}return A}a1();function AD(_,E){try{let R=Number(_);if(typeof R!=="number")return 0;if(isNaN(R))return 0;if(E)return Number(R.toFixed(E));return Math.round(R)}catch(R){return console.log(`Numberfy ERROR: ${R.message}`),0}}function ID(_){try{return String(_).trim().toLowerCase().replace(/ {2,}/g," ").replace(/ /g,"-").replace(/[^a-z0-9]/g,"-").replace(/-{2,}/g,"-").replace(/^-/,"").replace(/-$/,"")}catch(E){return console.log(`Slugify ERROR: ${E.message}`),""}}var qp={imageInputToBase64:e2,imageInputFileToBase64:a2,inputFileToBase64:_D},fp={google:{getAccessToken:ED},github:{getAccessToken:RD},logout:TD},jp={serializeQuery:e1,serializeCookies:WA,EJSON:tR,numberfy:AD,slugify:ID},vp={fetchApi:XA,clientFetch:XA},pp={media:qp,auth:fp,fetch:vp,utils:jp},iW=pp;function LD({tableName:_,genObject:E}){if(!E)return;let R=E.query?E.query:void 0,N=R?Object.keys(R):void 0,A=[];function L({queryObj:C,join:Y,field:M}){let H=(()=>{if(C?.tableName)return`${C.tableName}.${M}`;if(Y)return`${_}.${M}`;return M})(),X=`${H}=?`;if(typeof C.value=="string"||typeof C.value=="number"){let $=String(C.value);if(C.equality=="LIKE")X=`LOWER(${H}) LIKE LOWER('%${$}%')`;else if(C.equality=="NOT EQUAL")X=`${H} != ?`,A.push($);else A.push($)}else if(Array.isArray(C.value)){let $=[];C.value.forEach((z)=>{let w=z;if(C.equality=="LIKE")$.push(`LOWER(${H}) LIKE LOWER('%${w}%')`);else if(C.equality=="NOT EQUAL")$.push(`${H} != ?`),A.push(w);else $.push(`${H} = ?`),A.push(w)}),X="("+$.join(` ${C.operator||"AND"} `)+")"}return X}let U=N?.map((C)=>{let Y=R?.[C];if(!Y)return;if(Y.__query){let M=Y.__query,X=Object.keys(M).map(($)=>{let z=M?.[$];return L({queryObj:z,field:$,join:E.join})});return console.log("queryObj.operator",Y.operator),"("+X.join(` ${Y.operator||"AND"} `)+")"}return L({queryObj:Y,field:C,join:E.join})});function G(C,Y){return`${typeof C.source=="object"?C.source.tableName:_}.${typeof C.source=="object"?C.source.fieldName:C.source}=${(()=>{if(C.targetLiteral)return`'${C.targetLiteral}'`;if(Y.alias)return`${typeof C.target=="object"?C.target.tableName:Y.alias}.${typeof C.target=="object"?C.target.fieldName:C.target}`;return`${typeof C.target=="object"?C.target.tableName:Y.tableName}.${typeof C.target=="object"?C.target.fieldName:C.target}`})()}`}let S=(()=>{let C="SELECT";if(E.selectFields?.[0])if(E.join)C+=` ${E.selectFields?.map((Y)=>`${_}.${Y}`).join(",")}`;else C+=` ${E.selectFields?.join(",")}`;else if(E.join)C+=` ${_}.*`;else C+=" *";if(E.join){let Y=[_];C+=","+E.join.map((M)=>{let H=M.alias?M.alias:M.tableName;if(Y.includes(H))return null;if(Y.push(H),M.selectFields)return M.selectFields.map((X)=>{if(typeof X=="string")return`${H}.${X}`;else if(typeof X=="object"){let $=X.count?`COUNT(${H}.${X.field})`:`${H}.${X.field}`;if(X.alias)$+=` AS ${X.alias}`;return $}}).join(",");else return`${H}.*`}).filter((M)=>Boolean(M)).join(",")}if(C+=` FROM ${_}`,E.join)C+=" "+E.join.map((Y)=>{return Y.joinType+" "+(Y.alias?Y.tableName+" "+Y.alias:Y.tableName)+" ON "+(()=>{if(Array.isArray(Y.match))return"("+Y.match.map((M)=>G(M,Y)).join(Y.operator?` ${Y.operator} `:" AND ")+")";else if(typeof Y.match=="object")return G(Y.match,Y)})()}).join(" ");return C})();if(U?.[0]&&U.find((C)=>C)){let C=E?.searchOperator||"AND";S+=` WHERE ${U.join(` ${C} `)} `}if(E.order)S+=` ORDER BY ${E.join?`${_}.${E.order.field}`:E.order.field} ${E.order.strategy}`;if(E.limit)S+=` LIMIT ${E.limit}`;if(E.offset)S+=` OFFSET ${E.offset}`;return{string:S,values:A}}function UD({tableName:_,data:E}){try{if(Array.isArray(E)&&E?.[0]){let R=[];E.forEach((U)=>{Object.keys(U).forEach((S)=>{if(!R.includes(S))R.push(S)})});let N=[],A=[];return E.forEach((U)=>{N.push(`(${R.map((G)=>{return A.push(U[G]?.toString()?.match(/./)?U[G]:null),"?"}).join(",")})`)}),{query:`INSERT INTO ${_} (${R.join(",")}) VALUES ${N.join(",")}`,values:A}}else return}catch(R){console.log(`SQL insert gen ERROR: ${R.message}`);return}}function GD({tableName:_,data:E}){try{let R=`DELETE FROM ${_}`,N=[],A=[];return Object.keys(E).forEach((L)=>{N.push(`${L}=?`),A.push(E[L])}),R+=` WHERE ${N.join(" AND ")}`,{query:R,values:A}}catch(R){console.log(`SQL delete gen ERROR: ${R.message}`);return}}var uW=X_(require("node:http")),cW=X_(require("node:https")),dW=X_(require("querystring"));function DD(_){return new Promise((E,R)=>{let N=_.urlEncodedFormBody,A=_.body?N?dW.default.stringify(_.body):JSON.stringify(_.body).replace(/\n|\r|\n\r/gm,""):void 0,L=_.query?e1(_.query):void 0,U=_.scheme,G=U=="http"?uW.default:cW.default,S=_.path?_.path+(L?L:""):void 0;delete _.body,delete _.scheme,delete _.query,delete _.urlEncodedFormBody;let C={..._,headers:{"Content-Type":N?"application/x-www-form-urlencoded":"application/json","Content-Length":A?Buffer.from(A).length:void 0,..._.headers},port:U=="https"?443:_.port,path:S},Y=G.request(C,(M)=>{var H="";M.on("data",function(X){H+=X}),M.on("end",function(){let X=(()=>{try{return JSON.parse(H)}catch($){return}})();E({status:M.statusCode||404,data:X,str:H,requestedPath:S})}),M.on("error",(X)=>{E({status:M.statusCode||404,str:H,error:X.message,requestedPath:S})})});if(A)Y.write(A);Y.on("error",(M)=>{console.log("HTTPS request ERROR =>",M)}),Y.end()})}var hp={createUser:aG,deleteUser:(rW(),PT(tW)),loginUser:N2,sendEmailCode:q2,logoutUser:tL,userAuth:MA,reAuthUser:v2,updateUser:_2,getUser:h2,getToken:t2,validateToken:r2,validateTempEmailCode:(_M(),PT(eW)),social:{loginWithGoogle:d2,loginWithGithub:s2}},kp={uploadImage:bL,uploadFile:gG,deleteFile:iL},mp={sqlGenerator:LD,sqlInsertGenerator:UD,sqlDeleteGenerator:GD,trim:_A},gp={get:pG,post:kG,media:kp,user:hp,getSchema:mG,client:iW,sql:mp,utils:{crypto:{encrypt:(sR(),PT(yP)),decrypt:(P1(),PT(US)),hash:(LA(),PT(SY))},parseCookies:GN,httpRequest:DD}},bp=gp; diff --git a/dist/client/auth/github/getAccessToken.d.ts b/dist/client/auth/github/getAccessToken.d.ts new file mode 100644 index 0000000..b09acb4 --- /dev/null +++ b/dist/client/auth/github/getAccessToken.d.ts @@ -0,0 +1,13 @@ +type Param = { + clientId: string; + redirectUrl: string; + setLoading?: (arg0: boolean) => void; + scopes?: string[]; +}; +/** + * Login with Github Function + * =============================================================================== + * @description This function uses github api to login a user with datasquirel + */ +export default function getAccessToken({ clientId, redirectUrl, setLoading, scopes, }: Param): void; +export {}; diff --git a/dist/client/auth/github/getAccessToken.js b/dist/client/auth/github/getAccessToken.js new file mode 100644 index 0000000..9b8ea89 --- /dev/null +++ b/dist/client/auth/github/getAccessToken.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getAccessToken; +/** + * Login with Github Function + * =============================================================================== + * @description This function uses github api to login a user with datasquirel + */ +function getAccessToken({ clientId, redirectUrl, setLoading, scopes, }) { + if (setLoading) + setLoading(true); + const scopeString = scopes ? scopes.join("%20") : "read:user"; + const fetchUrl = `https://github.com/login/oauth/authorize?client_id=${clientId}&scope=${scopeString}&redirect_uri=${redirectUrl}`; + window.location.assign(fetchUrl); +} diff --git a/dist/client/auth/google/getAccessToken.d.ts b/dist/client/auth/google/getAccessToken.d.ts new file mode 100644 index 0000000..714c31b --- /dev/null +++ b/dist/client/auth/google/getAccessToken.d.ts @@ -0,0 +1,18 @@ +interface GoogleGetAccessTokenFunctionParams { + clientId: string; + triggerPrompt?: boolean; + setLoading?: React.Dispatch>; +} +/** + * Login with Google Function + * =============================================================================== + * @description This function uses google identity api to login a user with datasquirel + */ +export default function getAccessToken(params: GoogleGetAccessTokenFunctionParams): Promise; +/** + * # Google Login Function + */ +export declare function googleLogin({ google, clientId, setLoading, triggerPrompt, }: GoogleGetAccessTokenFunctionParams & { + google: any; +}): Promise; +export {}; diff --git a/dist/client/auth/google/getAccessToken.js b/dist/client/auth/google/getAccessToken.js new file mode 100644 index 0000000..7c53bbe --- /dev/null +++ b/dist/client/auth/google/getAccessToken.js @@ -0,0 +1,71 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getAccessToken; +exports.googleLogin = googleLogin; +let interval; +/** + * Login with Google Function + * =============================================================================== + * @description This function uses google identity api to login a user with datasquirel + */ +function getAccessToken(params) { + return __awaiter(this, void 0, void 0, function* () { + var _a, _b; + (_a = params.setLoading) === null || _a === void 0 ? void 0 : _a.call(params, true); + const response = (yield new Promise((resolve, reject) => { + interval = setInterval(() => { + // @ts-ignore + let google = window.google; + if (google) { + window.clearInterval(interval); + resolve(googleLogin(Object.assign(Object.assign({}, params), { google }))); + } + }, 500); + })); + (_b = params.setLoading) === null || _b === void 0 ? void 0 : _b.call(params, false); + return response; + }); +} +/** + * # Google Login Function + */ +function googleLogin({ google, clientId, setLoading, triggerPrompt, }) { + setTimeout(() => { + setLoading === null || setLoading === void 0 ? void 0 : setLoading(false); + }, 3000); + return new Promise((resolve, reject) => { + /** + * # Callback Function + * @param {import("../../../package-shared/types").GoogleAccessTokenObject} response + */ + function handleCredentialResponse(response) { + resolve(response.access_token); + } + const googleAuth = google.accounts.oauth2.initTokenClient({ + client_id: clientId, + scope: "email profile", + callback: handleCredentialResponse, + }); + googleAuth.requestAccessToken(); + if (triggerPrompt) { + google.accounts.id.prompt(triggerGooglePromptCallback); + } + /** + * Google prompt notification callback + * ======================================================== + * @param {import("../../../package-shared/types").GoogleIdentityPromptNotification} notification + */ + function triggerGooglePromptCallback(notification) { + console.log(notification); + } + }); +} diff --git a/dist/client/auth/logout.d.ts b/dist/client/auth/logout.d.ts new file mode 100644 index 0000000..b3a345e --- /dev/null +++ b/dist/client/auth/logout.d.ts @@ -0,0 +1,8 @@ +/** + * Login with Google Function + * =============================================================================== + * @description This function uses google identity api to login a user with datasquirel + */ +export default function logout(params: { + [s: string]: any; +} | null): Promise; diff --git a/dist/client/auth/logout.js b/dist/client/auth/logout.js new file mode 100644 index 0000000..06a2a52 --- /dev/null +++ b/dist/client/auth/logout.js @@ -0,0 +1,102 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = logout; +const parseClientCookies_1 = __importDefault(require("../utils/parseClientCookies")); +/** + * Login with Google Function + * =============================================================================== + * @description This function uses google identity api to login a user with datasquirel + */ +function logout(params) { + return __awaiter(this, void 0, void 0, function* () { + try { + const localUser = localStorage.getItem("user"); + let targetUser; + try { + targetUser = JSON.parse(localUser || ""); + } + catch (error) { + console.log(error); + } + if (!targetUser) { + return false; + } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + const cookies = (0, parseClientCookies_1.default)(); + const socialId = (cookies === null || cookies === void 0 ? void 0 : cookies.datasquirel_social_id) && + typeof cookies.datasquirel_social_id == "string" && + !cookies.datasquirel_social_id.match(/^null$/i) + ? cookies.datasquirel_social_id + : null; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + localStorage.setItem("user", "{}"); + localStorage.removeItem("csrf"); + document.cookie = `datasquirel_social_id=null;samesite=strict;path=/`; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + const response = yield new Promise((resolve, reject) => { + if (socialId && !(socialId === null || socialId === void 0 ? void 0 : socialId.match(/^null$/i))) { + const googleClientId = params === null || params === void 0 ? void 0 : params.googleClientId; + if (googleClientId) { + const googleScript = document.createElement("script"); + googleScript.src = "https://accounts.google.com/gsi/client"; + googleScript.className = "social-script-tag"; + document.body.appendChild(googleScript); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + googleScript.onload = function (e) { + // @ts-ignore + const google = window.google; + if (google) { + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + google.accounts.id.initialize({ + client_id: googleClientId, + }); + google.accounts.id.revoke(socialId, (done) => { + console.log(done.error); + resolve(true); + }); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + } + }; + } + else { + resolve(true); + } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + } + else { + resolve(true); + } + }); + return response; + } + catch (error) { + return false; + } + }); +} diff --git a/dist/client/fetch/index.d.ts b/dist/client/fetch/index.d.ts new file mode 100644 index 0000000..9976f51 --- /dev/null +++ b/dist/client/fetch/index.d.ts @@ -0,0 +1,21 @@ +type FetchApiOptions = { + method: "POST" | "GET" | "DELETE" | "PUT" | "PATCH" | "post" | "get" | "delete" | "put" | "patch"; + body?: object | string; + headers?: FetchHeader; +}; +type FetchHeader = HeadersInit & { + [key: string]: string | null; +}; +export type FetchApiReturn = { + success: boolean; + payload: any; + msg?: string; + [key: string]: any; +}; +/** + * # Fetch API + */ +export default function fetchApi(url: string, options?: FetchApiOptions, csrf?: boolean, +/** Key to use to grab local Storage csrf value. */ +localStorageCSRFKey?: string): Promise; +export {}; diff --git a/dist/client/fetch/index.js b/dist/client/fetch/index.js new file mode 100644 index 0000000..1178ded --- /dev/null +++ b/dist/client/fetch/index.js @@ -0,0 +1,89 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = fetchApi; +const lodash_1 = __importDefault(require("lodash")); +/** + * # Fetch API + */ +function fetchApi(url, options, csrf, +/** Key to use to grab local Storage csrf value. */ +localStorageCSRFKey) { + return __awaiter(this, void 0, void 0, function* () { + let data; + const csrfValue = localStorage.getItem(localStorageCSRFKey || "csrf"); + let finalHeaders = { + "Content-Type": "application/json", + }; + if (csrf && csrfValue) { + finalHeaders[`'${csrfValue.replace(/\"/g, "")}'`] = "true"; + } + if (typeof options === "string") { + try { + let fetchData; + switch (options) { + case "post": + fetchData = yield fetch(url, { + method: options, + headers: finalHeaders, + }); + data = fetchData.json(); + break; + default: + fetchData = yield fetch(url); + data = fetchData.json(); + break; + } + } + catch (error) { + console.log("FetchAPI error #1:", error.message); + data = null; + } + } + else if (typeof options === "object") { + try { + let fetchData; + if (options.body && typeof options.body === "object") { + let oldOptionsBody = lodash_1.default.cloneDeep(options.body); + options.body = JSON.stringify(oldOptionsBody); + } + if (options.headers) { + options.headers = lodash_1.default.merge(options.headers, finalHeaders); + const finalOptions = Object.assign({}, options); + fetchData = yield fetch(url, finalOptions); + } + else { + const finalOptions = Object.assign(Object.assign({}, options), { headers: finalHeaders }); + fetchData = yield fetch(url, finalOptions); + } + data = fetchData.json(); + } + catch (error) { + console.log("FetchAPI error #2:", error.message); + data = null; + } + } + else { + try { + let fetchData = yield fetch(url); + data = yield fetchData.json(); + } + catch (error) { + console.log("FetchAPI error #3:", error.message); + data = null; + } + } + return data; + }); +} diff --git a/dist/client/index.d.ts b/dist/client/index.d.ts new file mode 100644 index 0000000..0a8bcb7 --- /dev/null +++ b/dist/client/index.d.ts @@ -0,0 +1,49 @@ +import imageInputFileToBase64 from "./media/imageInputFileToBase64"; +import imageInputToBase64 from "./media/imageInputToBase64"; +import inputFileToBase64 from "./media/inputFileToBase64"; +import getAccessToken from "./auth/google/getAccessToken"; +import getGithubAccessToken from "./auth/github/getAccessToken"; +import logout from "./auth/logout"; +import fetchApi from "./fetch"; +import serializeQuery from "../package-shared/utils/serialize-query"; +import serializeCookies from "../package-shared/utils/serialize-cookies"; +import numberfy from "../package-shared/utils/numberfy"; +import slugify from "../package-shared/utils/slugify"; +/** + * Main Export + */ +declare const datasquirelClient: { + media: { + imageInputToBase64: typeof imageInputToBase64; + imageInputFileToBase64: typeof imageInputFileToBase64; + inputFileToBase64: typeof inputFileToBase64; + }; + auth: { + google: { + getAccessToken: typeof getAccessToken; + }; + github: { + getAccessToken: typeof getGithubAccessToken; + }; + logout: typeof logout; + }; + fetch: { + fetchApi: typeof fetchApi; + clientFetch: typeof fetchApi; + }; + utils: { + serializeQuery: typeof serializeQuery; + serializeCookies: typeof serializeCookies; + EJSON: { + parse: (string: string | null | number, reviver?: (this: any, key: string, value: any) => any) => { + [s: string]: any; + } | { + [s: string]: any; + }[] | undefined; + stringify: (value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number) => string | undefined; + }; + numberfy: typeof numberfy; + slugify: typeof slugify; + }; +}; +export default datasquirelClient; diff --git a/dist/client/index.js b/dist/client/index.js new file mode 100644 index 0000000..a29d5fb --- /dev/null +++ b/dist/client/index.js @@ -0,0 +1,60 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const imageInputFileToBase64_1 = __importDefault(require("./media/imageInputFileToBase64")); +const imageInputToBase64_1 = __importDefault(require("./media/imageInputToBase64")); +const inputFileToBase64_1 = __importDefault(require("./media/inputFileToBase64")); +const getAccessToken_1 = __importDefault(require("./auth/google/getAccessToken")); +const getAccessToken_2 = __importDefault(require("./auth/github/getAccessToken")); +const logout_1 = __importDefault(require("./auth/logout")); +const fetch_1 = __importDefault(require("./fetch")); +const fetch_2 = __importDefault(require("./fetch")); +const serialize_query_1 = __importDefault(require("../package-shared/utils/serialize-query")); +const serialize_cookies_1 = __importDefault(require("../package-shared/utils/serialize-cookies")); +const ejson_1 = __importDefault(require("../package-shared/utils/ejson")); +const numberfy_1 = __importDefault(require("../package-shared/utils/numberfy")); +const slugify_1 = __importDefault(require("../package-shared/utils/slugify")); +//////////////////////////////////////// +//////////////////////////////////////// +//////////////////////////////////////// +/** + * Media Functions Object + */ +const media = { + imageInputToBase64: imageInputToBase64_1.default, + imageInputFileToBase64: imageInputFileToBase64_1.default, + inputFileToBase64: inputFileToBase64_1.default, +}; +/** + * User Auth Object + */ +const auth = { + google: { + getAccessToken: getAccessToken_1.default, + }, + github: { + getAccessToken: getAccessToken_2.default, + }, + logout: logout_1.default, +}; +const utils = { + serializeQuery: serialize_query_1.default, + serializeCookies: serialize_cookies_1.default, + EJSON: ejson_1.default, + numberfy: numberfy_1.default, + slugify: slugify_1.default, +}; +/** + * Fetch + */ +const fetch = { + fetchApi: fetch_1.default, + clientFetch: fetch_2.default, +}; +/** + * Main Export + */ +const datasquirelClient = { media, auth, fetch, utils }; +exports.default = datasquirelClient; diff --git a/dist/client/media/client.d.ts b/dist/client/media/client.d.ts new file mode 100644 index 0000000..c4d102c --- /dev/null +++ b/dist/client/media/client.d.ts @@ -0,0 +1,14 @@ +import imageInputFileToBase64 from "./imageInputFileToBase64"; +import imageInputToBase64 from "./imageInputToBase64"; +/** + * ========================== + * Main Export + * ========================== + */ +declare const datasquirelClient: { + media: { + imageInputToBase64: typeof imageInputToBase64; + imageInputFileToBase64: typeof imageInputFileToBase64; + }; +}; +export default datasquirelClient; diff --git a/dist/client/media/client.js b/dist/client/media/client.js new file mode 100644 index 0000000..5bdfeae --- /dev/null +++ b/dist/client/media/client.js @@ -0,0 +1,34 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const imageInputFileToBase64_1 = __importDefault(require("./imageInputFileToBase64")); +const imageInputToBase64_1 = __importDefault(require("./imageInputToBase64")); +/** + * ========================== + * Media Functions Object + * ========================== + */ +const media = { + imageInputToBase64: imageInputToBase64_1.default, + imageInputFileToBase64: imageInputFileToBase64_1.default, +}; +/** + * ========================== + * Media Functions Object + * ========================== + */ +const auth = { + imageInputToBase64: imageInputToBase64_1.default, + imageInputFileToBase64: imageInputFileToBase64_1.default, +}; +/** + * ========================== + * Main Export + * ========================== + */ +const datasquirelClient = { + media: media, +}; +exports.default = datasquirelClient; diff --git a/dist/client/media/imageInputFileToBase64.d.ts b/dist/client/media/imageInputFileToBase64.d.ts new file mode 100644 index 0000000..1ae7a4c --- /dev/null +++ b/dist/client/media/imageInputFileToBase64.d.ts @@ -0,0 +1,11 @@ +import { ImageInputFileToBase64FunctionReturn } from "../../package-shared/types"; +type Param = { + imageInputFile: File; + maxWidth?: number; + imagePreviewNode?: HTMLImageElement; +}; +/** + * # Image input File top Base64 + */ +export default function imageInputFileToBase64({ imageInputFile, maxWidth, imagePreviewNode, }: Param): Promise; +export {}; diff --git a/dist/client/media/imageInputFileToBase64.js b/dist/client/media/imageInputFileToBase64.js new file mode 100644 index 0000000..05417f9 --- /dev/null +++ b/dist/client/media/imageInputFileToBase64.js @@ -0,0 +1,92 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = imageInputFileToBase64; +/** + * # Image input File top Base64 + */ +function imageInputFileToBase64(_a) { + return __awaiter(this, arguments, void 0, function* ({ imageInputFile, maxWidth, imagePreviewNode, }) { + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + try { + let imageName = imageInputFile.name.replace(/\..*/, ""); + let imageDataBase64; + let imageSize; + let canvas = document.createElement("canvas"); + const MIME_TYPE = imageInputFile.type; + const QUALITY = 0.95; + const MAX_WIDTH = maxWidth ? maxWidth : null; + const file = imageInputFile; + const blobURL = URL.createObjectURL(file); + const img = new Image(); + /** ********************* Add source to new image */ + img.src = blobURL; + imageDataBase64 = yield new Promise((res, rej) => { + /** ********************* Handle Errors in loading image */ + img.onerror = function () { + URL.revokeObjectURL(this.src); + console.log("Cannot load image"); + }; + /** ********************* Handle new image when loaded */ + img.onload = function (e) { + const imgEl = e.target; + URL.revokeObjectURL(imgEl.src); + if (MAX_WIDTH) { + const scaleSize = MAX_WIDTH / img.naturalWidth; + canvas.width = + img.naturalWidth < MAX_WIDTH + ? img.naturalWidth + : MAX_WIDTH; + canvas.height = + img.naturalWidth < MAX_WIDTH + ? img.naturalHeight + : img.naturalHeight * scaleSize; + } + else { + canvas.width = img.naturalWidth; + canvas.height = img.naturalHeight; + } + const ctx = canvas.getContext("2d"); + ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(img, 0, 0, canvas.width, canvas.height); + const srcEncoded = canvas.toDataURL(MIME_TYPE, QUALITY); + if (imagePreviewNode) { + imagePreviewNode.src = srcEncoded; + } + res(srcEncoded); + }; + }); + imageSize = yield new Promise((res, rej) => { + canvas.toBlob((blob) => { + res(blob === null || blob === void 0 ? void 0 : blob.size); + }, MIME_TYPE, QUALITY); + }); + return { + imageBase64: imageDataBase64 === null || imageDataBase64 === void 0 ? void 0 : imageDataBase64.replace(/.*?base64,/, ""), + imageBase64Full: imageDataBase64, + imageName: imageName, + imageSize: imageSize, + }; + } + catch (error) { + console.log("Image Processing Error! =>", error.message); + return { + imageBase64: undefined, + imageBase64Full: undefined, + imageName: undefined, + imageSize: undefined, + }; + } + }); +} diff --git a/dist/client/media/imageInputToBase64.d.ts b/dist/client/media/imageInputToBase64.d.ts new file mode 100644 index 0000000..469fabe --- /dev/null +++ b/dist/client/media/imageInputToBase64.d.ts @@ -0,0 +1,15 @@ +type FunctionReturn = { + imageBase64?: string; + imageBase64Full?: string; + imageName?: string; +}; +type Param = { + imageInput: HTMLInputElement; + maxWidth?: number; + mimeType?: string; +}; +/** + * # Image Input Element to Base 64 + */ +export default function imageInputToBase64({ imageInput, maxWidth, mimeType, }: Param): Promise; +export {}; diff --git a/dist/client/media/imageInputToBase64.js b/dist/client/media/imageInputToBase64.js new file mode 100644 index 0000000..8e8decb --- /dev/null +++ b/dist/client/media/imageInputToBase64.js @@ -0,0 +1,90 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = imageInputToBase64; +/** + * # Image Input Element to Base 64 + */ +function imageInputToBase64(_a) { + return __awaiter(this, arguments, void 0, function* ({ imageInput, maxWidth, mimeType, }) { + var _b, _c; + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + try { + let imagePreviewNode = document.querySelector(`[data-imagepreview='image']`); + let imageName = (_b = imageInput.files) === null || _b === void 0 ? void 0 : _b[0].name.replace(/\..*/, ""); + let imageDataBase64; + const MIME_TYPE = mimeType ? mimeType : "image/jpeg"; + const QUALITY = 0.95; + const MAX_WIDTH = maxWidth ? maxWidth : null; + const file = (_c = imageInput.files) === null || _c === void 0 ? void 0 : _c[0]; + const blobURL = file ? URL.createObjectURL(file) : undefined; + const img = new Image(); + if (blobURL) { + img.src = blobURL; + imageDataBase64 = yield new Promise((res, rej) => { + /** ********************* Handle Errors in loading image */ + img.onerror = function () { + URL.revokeObjectURL(this.src); + window.alert("Cannot load image!"); + }; + img.onload = function (e) { + const imgEl = e.target; + URL.revokeObjectURL(imgEl.src); + const canvas = document.createElement("canvas"); + if (MAX_WIDTH) { + const scaleSize = MAX_WIDTH / img.naturalWidth; + canvas.width = + img.naturalWidth < MAX_WIDTH + ? img.naturalWidth + : MAX_WIDTH; + canvas.height = + img.naturalWidth < MAX_WIDTH + ? img.naturalHeight + : img.naturalHeight * scaleSize; + } + else { + canvas.width = img.naturalWidth; + canvas.height = img.naturalHeight; + } + const ctx = canvas.getContext("2d"); + ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(img, 0, 0, canvas.width, canvas.height); + const srcEncoded = canvas.toDataURL(MIME_TYPE, QUALITY); + if (imagePreviewNode) { + document + .querySelectorAll(`[data-imagepreview='image']`) + .forEach((_img) => { + const _imgEl = _img; + _imgEl.src = srcEncoded; + }); + } + res(srcEncoded); + }; + }); + return { + imageBase64: imageDataBase64 === null || imageDataBase64 === void 0 ? void 0 : imageDataBase64.replace(/.*?base64,/, ""), + imageBase64Full: imageDataBase64, + imageName: imageName, + }; + } + else { + return {}; + } + } + catch ( /** @type {*} */error) { + console.log("Image Processing Error! =>", error.message); + return {}; + } + }); +} diff --git a/dist/client/media/inputFileToBase64.d.ts b/dist/client/media/inputFileToBase64.d.ts new file mode 100644 index 0000000..1e3431e --- /dev/null +++ b/dist/client/media/inputFileToBase64.d.ts @@ -0,0 +1,21 @@ +type FunctionReturn = { + fileBase64?: string; + fileBase64Full?: string; + fileName?: string; + fileSize?: number; + fileType?: string; +}; +type Param = { + inputFile: File; + allowedRegex?: RegExp; +}; +/** + * Input File to base64 + * ============================================================================== + * + * @description This function takes in a *SINGLE* input file from a HTML file input element. + * HTML file input elements usually return an array of input objects, so be sure to select the target + * file from the array. + */ +export default function inputFileToBase64({ inputFile, allowedRegex, }: Param): Promise; +export {}; diff --git a/dist/client/media/inputFileToBase64.js b/dist/client/media/inputFileToBase64.js new file mode 100644 index 0000000..5ef9e13 --- /dev/null +++ b/dist/client/media/inputFileToBase64.js @@ -0,0 +1,59 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = inputFileToBase64; +/** + * Input File to base64 + * ============================================================================== + * + * @description This function takes in a *SINGLE* input file from a HTML file input element. + * HTML file input elements usually return an array of input objects, so be sure to select the target + * file from the array. + */ +function inputFileToBase64(_a) { + return __awaiter(this, arguments, void 0, function* ({ inputFile, allowedRegex, }) { + var _b; + const allowedTypesRegex = allowedRegex ? allowedRegex : /image\/*|\/pdf/; + if (!((_b = inputFile === null || inputFile === void 0 ? void 0 : inputFile.type) === null || _b === void 0 ? void 0 : _b.match(allowedTypesRegex))) { + window.alert(`We currently don't support ${inputFile.type} file types. Support is coming soon. For now we support only images and PDFs.`); + return { + fileName: inputFile.name, + }; + } + try { + let fileName = inputFile.name.replace(/\..*/, ""); + const fileData = yield new Promise((resolve, reject) => { + var reader = new FileReader(); + reader.readAsDataURL(inputFile); + reader.onload = function () { + var _a; + resolve((_a = reader.result) === null || _a === void 0 ? void 0 : _a.toString()); + }; + reader.onerror = function (/** @type {*} */ error) { + console.log("Error: ", error.message); + }; + }); + return { + fileBase64: fileData === null || fileData === void 0 ? void 0 : fileData.replace(/.*?base64,/, ""), + fileBase64Full: fileData, + fileName: fileName, + fileSize: inputFile.size, + fileType: inputFile.type, + }; + } + catch (error) { + console.log("File Processing Error! =>", error.message); + return { + fileName: inputFile.name, + }; + } + }); +} diff --git a/dist/client/utils/parseClientCookies.d.ts b/dist/client/utils/parseClientCookies.d.ts new file mode 100644 index 0000000..87d9b65 --- /dev/null +++ b/dist/client/utils/parseClientCookies.d.ts @@ -0,0 +1,8 @@ +/** + * Parse request cookies + * ============================================================================== * + * @description This function takes in a request object and returns the cookies as a JS object + */ +export default function (): { + [s: string]: any; +} | null; diff --git a/dist/client/utils/parseClientCookies.js b/dist/client/utils/parseClientCookies.js new file mode 100644 index 0000000..a9d31be --- /dev/null +++ b/dist/client/utils/parseClientCookies.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = default_1; +/** + * Parse request cookies + * ============================================================================== * + * @description This function takes in a request object and returns the cookies as a JS object + */ +function default_1() { + /** + * Check inputs + * + * @description Check inputs + */ + const cookieString = document.cookie; + if (!cookieString || typeof cookieString !== "string") { + return null; + } + const cookieSplitArray = cookieString.split(";"); + let cookieObject = {}; + cookieSplitArray.forEach((keyValueString) => { + const [key, value] = keyValueString.split("="); + if (key && typeof key == "string") { + cookieObject[key.replace(/^ +| +$/, "")] = + value && typeof value == "string" + ? value.replace(/^ +| +$/, "") + : null; + } + }); + return cookieObject; +} diff --git a/dist/console-colors.d.ts b/dist/console-colors.d.ts new file mode 100644 index 0000000..ab20fc1 --- /dev/null +++ b/dist/console-colors.d.ts @@ -0,0 +1,28 @@ +declare const colors: { + Reset: string; + Bright: string; + Dim: string; + Underscore: string; + Blink: string; + Reverse: string; + Hidden: string; + FgBlack: string; + FgRed: string; + FgGreen: string; + FgYellow: string; + FgBlue: string; + FgMagenta: string; + FgCyan: string; + FgWhite: string; + FgGray: string; + BgBlack: string; + BgRed: string; + BgGreen: string; + BgYellow: string; + BgBlue: string; + BgMagenta: string; + BgCyan: string; + BgWhite: string; + BgGray: string; +}; +export default colors; diff --git a/dist/console-colors.js b/dist/console-colors.js new file mode 100644 index 0000000..f1d612e --- /dev/null +++ b/dist/console-colors.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const colors = { + Reset: "\x1b[0m", + Bright: "\x1b[1m", + Dim: "\x1b[2m", + Underscore: "\x1b[4m", + Blink: "\x1b[5m", + Reverse: "\x1b[7m", + Hidden: "\x1b[8m", + FgBlack: "\x1b[30m", + FgRed: "\x1b[31m", + FgGreen: "\x1b[32m", + FgYellow: "\x1b[33m", + FgBlue: "\x1b[34m", + FgMagenta: "\x1b[35m", + FgCyan: "\x1b[36m", + FgWhite: "\x1b[37m", + FgGray: "\x1b[90m", + BgBlack: "\x1b[40m", + BgRed: "\x1b[41m", + BgGreen: "\x1b[42m", + BgYellow: "\x1b[43m", + BgBlue: "\x1b[44m", + BgMagenta: "\x1b[45m", + BgCyan: "\x1b[46m", + BgWhite: "\x1b[47m", + BgGray: "\x1b[100m", +}; +exports.default = colors; diff --git a/dist/engine/dsql.d.ts b/dist/engine/dsql.d.ts new file mode 100644 index 0000000..82d43b5 --- /dev/null +++ b/dist/engine/dsql.d.ts @@ -0,0 +1,2 @@ +#! /usr/bin/env node +export default function run(): Promise; diff --git a/dist/engine/dsql.js b/dist/engine/dsql.js new file mode 100644 index 0000000..84070f5 --- /dev/null +++ b/dist/engine/dsql.js @@ -0,0 +1,115 @@ +#! /usr/bin/env node +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = run; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +require("dotenv").config({ + path: path_1.default.resolve(process.cwd(), ".env"), +}); +const index_1 = __importDefault(require("../index")); +const console_colors_1 = __importDefault(require("../console-colors")); +const createDbFromSchema_1 = __importDefault(require("../package-shared/shell/createDbFromSchema")); +if (!fs_1.default.existsSync(path_1.default.resolve(process.cwd(), ".env"))) { + console.log(".env file not found"); + process.exit(); +} +const { DSQL_HOST, DSQL_USER, DSQL_PASS, DSQL_DB_NAME, DSQL_KEY, DSQL_REF_DB_NAME, DSQL_FULL_SYNC, } = process.env; +if (!(DSQL_HOST === null || DSQL_HOST === void 0 ? void 0 : DSQL_HOST.match(/./))) { + console.log("DSQL_HOST is required in your `.env` file"); + process.exit(); +} +if (!(DSQL_USER === null || DSQL_USER === void 0 ? void 0 : DSQL_USER.match(/./))) { + console.log("DSQL_USER is required in your `.env` file"); + process.exit(); +} +if (!(DSQL_PASS === null || DSQL_PASS === void 0 ? void 0 : DSQL_PASS.match(/./))) { + console.log("DSQL_PASS is required in your `.env` file"); + process.exit(); +} +const dbSchemaLocalFilePath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); +function run() { + return __awaiter(this, void 0, void 0, function* () { + let schemaData; + if (DSQL_KEY && (DSQL_REF_DB_NAME === null || DSQL_REF_DB_NAME === void 0 ? void 0 : DSQL_REF_DB_NAME.match(/./))) { + const dbSchemaDataResponse = yield index_1.default.getSchema({ + key: DSQL_KEY, + database: DSQL_REF_DB_NAME || undefined, + }); + if (!dbSchemaDataResponse.payload || + Array.isArray(dbSchemaDataResponse.payload)) { + console.log("DSQL_KEY+DSQL_REF_DB_NAME => Error in fetching DB schema"); + console.log(dbSchemaDataResponse); + process.exit(); + } + let fetchedDbSchemaObject = dbSchemaDataResponse.payload; + if (DSQL_DB_NAME) + fetchedDbSchemaObject.dbFullName = DSQL_DB_NAME; + schemaData = [fetchedDbSchemaObject]; + } + else if (DSQL_KEY) { + const dbSchemaDataResponse = yield index_1.default.getSchema({ + key: DSQL_KEY, + database: DSQL_REF_DB_NAME || undefined, + }); + if (!dbSchemaDataResponse.payload || + !Array.isArray(dbSchemaDataResponse.payload)) { + console.log("DSQL_KEY => Error in fetching DB schema"); + console.log(dbSchemaDataResponse); + process.exit(); + } + let fetchedDbSchemaObject = dbSchemaDataResponse.payload; + // fetchedDbSchemaObject.forEach((db, index) => { + // db.dbFullName = db.dbFullName?.replace(/^datasquirel_user_\d+_/, ""); + // }); + schemaData = fetchedDbSchemaObject; + } + else if (fs_1.default.existsSync(dbSchemaLocalFilePath)) { + schemaData = [ + JSON.parse(fs_1.default.readFileSync(dbSchemaLocalFilePath, "utf8")), + ]; + } + else { + console.log("No source for DB Schema. Please provide a local `dsql.schema.json` file, or provide `DSQL_KEY` and `DSQL_REF_DB_NAME` environment variables."); + process.exit(); + } + if (!schemaData) { + console.log("No schema found"); + process.exit(); + } + if (DSQL_FULL_SYNC === null || DSQL_FULL_SYNC === void 0 ? void 0 : DSQL_FULL_SYNC.match(/true/i)) { + fs_1.default.writeFileSync(dbSchemaLocalFilePath, JSON.stringify(schemaData[0], null, 4), "utf8"); + } + console.log(` - ${console_colors_1.default.FgBlue}Info:${console_colors_1.default.Reset} Now generating and mapping databases ...`); + yield (0, createDbFromSchema_1.default)({ + dbSchemaData: schemaData, + }); + console.log(` - ${console_colors_1.default.FgGreen}Success:${console_colors_1.default.Reset} Databases created Successfully!`); + }); +} +let interval; +if (fs_1.default.existsSync(dbSchemaLocalFilePath) && !(DSQL_KEY === null || DSQL_KEY === void 0 ? void 0 : DSQL_KEY.match(/....../))) { + fs_1.default.watchFile(dbSchemaLocalFilePath, { interval: 1000 }, (curr, prev) => { + console.log(` - ${console_colors_1.default.FgBlue}Info:${console_colors_1.default.Reset} Syncing Databases Locally ...`); + run(); + }); +} +else if (DSQL_KEY === null || DSQL_KEY === void 0 ? void 0 : DSQL_KEY.match(/....../)) { + interval = setInterval(() => { + console.log(` - ${console_colors_1.default.FgMagenta}Info:${console_colors_1.default.Reset} Syncing Databases from the cloud ...`); + run(); + }, 20000); +} +run(); diff --git a/dist/engine/dump.d.ts b/dist/engine/dump.d.ts new file mode 100644 index 0000000..237deca --- /dev/null +++ b/dist/engine/dump.d.ts @@ -0,0 +1,2 @@ +#! /usr/bin/env node +export {}; diff --git a/dist/engine/dump.js b/dist/engine/dump.js new file mode 100644 index 0000000..ef443d4 --- /dev/null +++ b/dist/engine/dump.js @@ -0,0 +1,50 @@ +#! /usr/bin/env node +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __importDefault(require("path")); +const child_process_1 = require("child_process"); +require("dotenv").config({ + path: path_1.default.resolve(process.cwd(), ".env"), +}); +const mysqlPath = ((_a = process.platform) === null || _a === void 0 ? void 0 : _a.match(/win/i)) + ? "'" + "C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysql.exe" + "'" + : "mysql"; +const mysqlDumpPath = ((_b = process.platform) === null || _b === void 0 ? void 0 : _b.match(/win/i)) + ? "'" + + "C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqldump.exe" + + "'" + : "mysqldump"; +const { DSQL_USER, DSQL_PASS, DSQL_DB_NAME } = process.env; +const dbName = DSQL_DB_NAME || ""; +const dumpFilePathArg = process.argv.indexOf("--file"); +if (dumpFilePathArg < 0) { + console.log("Please provide a dump file path using `--file` argument"); + process.exit(); +} +const dumpFilePath = process.argv[dumpFilePathArg + 1]; +if (!(dbName === null || dbName === void 0 ? void 0 : dbName.match(/./))) { + console.log("DSQL_DB_NAME is required in your `.env` file"); + process.exit(); +} +if (!(DSQL_USER === null || DSQL_USER === void 0 ? void 0 : DSQL_USER.match(/./)) || !(DSQL_PASS === null || DSQL_PASS === void 0 ? void 0 : DSQL_PASS.match(/./))) { + console.log("DSQL_USER and DSQL_PASS are required in your `.env` file"); + process.exit(); +} +try { + let execSyncOptions = { + cwd: process.cwd(), + }; + // if (process.platform.match(/win/i)) execSyncOptions.shell = "bash.exe"; + const dump = (0, child_process_1.execSync)(`${mysqlPath} -u ${DSQL_USER} -p${DSQL_PASS} ${dbName} < ${dumpFilePath}`, execSyncOptions); + console.log("Dumped successfully", dump.toString()); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// +} +catch (error) { + console.log("Dump Error: ", error.message); +} diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..bb8777f --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,108 @@ +/** + * Imports + */ +import get from "./utils/get"; +import post from "./utils/post"; +import getSchema from "./utils/get-schema"; +import uploadImage from "./utils/upload-image"; +import uploadFile from "./utils/upload-file"; +import deleteFile from "./utils/delete-file"; +import createUser from "./users/add-user"; +import updateUser from "./users/update-user"; +import loginUser from "./users/login-user"; +import sendEmailCode from "./users/send-email-code"; +import logoutUser from "./users/logout-user"; +import userAuth from "./users/user-auth"; +import reAuthUser from "./users/reauth-user"; +import getUser from "./users/get-user"; +import loginWithGoogle from "./users/social/google-auth"; +import loginWithGithub from "./users/social/github-auth"; +import getToken from "./users/get-token"; +import validateToken from "./users/validate-token"; +import sqlGenerator from "./package-shared/functions/dsql/sql/sql-generator"; +import sqlInsertGenerator from "./package-shared/functions/dsql/sql/sql-insert-generator"; +import sqlDeleteGenerator from "./package-shared/functions/dsql/sql/sql-delete-generator"; +import trimSql from "./package-shared/utils/trim-sql"; +import parseCookies from "./package-shared/utils/backend/parseCookies"; +import httpRequest from "./package-shared/functions/backend/httpRequest"; +/** + * Main Export + */ +declare const datasquirel: { + get: typeof get; + post: typeof post; + media: { + uploadImage: typeof uploadImage; + uploadFile: typeof uploadFile; + deleteFile: typeof deleteFile; + }; + user: { + createUser: typeof createUser; + deleteUser: any; + loginUser: typeof loginUser; + sendEmailCode: typeof sendEmailCode; + logoutUser: typeof logoutUser; + userAuth: typeof userAuth; + reAuthUser: typeof reAuthUser; + updateUser: typeof updateUser; + getUser: typeof getUser; + getToken: typeof getToken; + validateToken: typeof validateToken; + validateTempEmailCode: any; + social: { + loginWithGoogle: typeof loginWithGoogle; + loginWithGithub: typeof loginWithGithub; + }; + }; + getSchema: typeof getSchema; + client: { + media: { + imageInputToBase64: typeof import("./client/media/imageInputToBase64").default; + imageInputFileToBase64: typeof import("./client/media/imageInputFileToBase64").default; + inputFileToBase64: typeof import("./client/media/inputFileToBase64").default; + }; + auth: { + google: { + getAccessToken: typeof import("./client/auth/google/getAccessToken").default; + }; + github: { + getAccessToken: typeof import("./client/auth/github/getAccessToken").default; + }; + logout: typeof import("./client/auth/logout").default; + }; + fetch: { + fetchApi: typeof import("./client/fetch").default; + clientFetch: typeof import("./client/fetch").default; + }; + utils: { + serializeQuery: typeof import("./package-shared/utils/serialize-query").default; + serializeCookies: typeof import("./package-shared/utils/serialize-cookies").default; + EJSON: { + parse: (string: string | null | number, reviver?: (this: any, key: string, value: any) => any) => { + [s: string]: any; + } | { + [s: string]: any; + }[] | undefined; + stringify: (value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number) => string | undefined; + }; + numberfy: typeof import("./package-shared/utils/numberfy").default; + slugify: typeof import("./package-shared/utils/slugify").default; + }; + }; + sql: { + sqlGenerator: typeof sqlGenerator; + sqlInsertGenerator: typeof sqlInsertGenerator; + sqlDeleteGenerator: typeof sqlDeleteGenerator; + trim: typeof trimSql; + }; + utils: { + crypto: { + encrypt: any; + decrypt: any; + hash: any; + }; + parseCookies: typeof parseCookies; + httpRequest: typeof httpRequest; + }; +}; +export default datasquirel; diff --git a/dist/index.js b/dist/index.js index 19db025..ec754fe 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,42558 +1,97 @@ -import { createRequire } from "node:module"; -var __create = Object.create; -var __getProtoOf = Object.getPrototypeOf; -var __defProp = Object.defineProperty; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __toESM = (mod, isNodeMode, target) => { - target = mod != null ? __create(__getProtoOf(mod)) : {}; - const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; - for (let key of __getOwnPropNames(mod)) - if (!__hasOwnProp.call(to, key)) - __defProp(to, key, { - get: () => mod[key], - enumerable: true - }); - return to; +"use strict"; +// @ts-check +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; }; -var __moduleCache = /* @__PURE__ */ new WeakMap; -var __toCommonJS = (from) => { - var entry = __moduleCache.get(from), desc; - if (entry) - return entry; - entry = __defProp({}, "__esModule", { value: true }); - if (from && typeof from === "object" || typeof from === "function") - __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, { - get: () => from[key], - enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable - })); - __moduleCache.set(from, entry); - return entry; -}; -var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { - get: all[name], - enumerable: true, - configurable: true, - set: (newValue) => all[name] = () => newValue - }); -}; -var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res); -var __require = /* @__PURE__ */ createRequire(import.meta.url); - -// package-shared/utils/grab-host-names.ts -import https from "https"; -import http from "http"; -function grabHostNames() { - const scheme = process.env.DSQL_HTTP_SCHEME; - const localHost = process.env.DSQL_LOCAL_HOST; - const localHostPort = process.env.DSQL_LOCAL_HOST_PORT; - const remoteHost = process.env.DSQL_API_REMOTE_HOST?.match(/.*\..*/) ? process.env.DSQL_API_REMOTE_HOST : undefined; - const remoteHostPort = process.env.DSQL_API_REMOTE_HOST_PORT?.match(/./) ? process.env.DSQL_API_REMOTE_HOST_PORT : undefined; - return { - host: remoteHost || localHost || "datasquirel.com", - port: remoteHostPort || localHostPort || 443, - scheme: scheme?.match(/^http$/i) ? http : https, - user_id: String(process.env.DSQL_API_USER_ID || 0) - }; -} -var init_grab_host_names = () => { -}; - -// node_modules/lodash/lodash.js -var require_lodash = __commonJS((exports, module) => { - (function() { - var undefined2; - var VERSION = "4.17.21"; - var LARGE_ARRAY_SIZE = 200; - var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`"; - var HASH_UNDEFINED = "__lodash_hash_undefined__"; - var MAX_MEMOIZE_SIZE = 500; - var PLACEHOLDER = "__lodash_placeholder__"; - var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4; - var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; - var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512; - var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "..."; - var HOT_COUNT = 800, HOT_SPAN = 16; - var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3; - var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, NAN = 0 / 0; - var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - var wrapFlags = [ - ["ary", WRAP_ARY_FLAG], - ["bind", WRAP_BIND_FLAG], - ["bindKey", WRAP_BIND_KEY_FLAG], - ["curry", WRAP_CURRY_FLAG], - ["curryRight", WRAP_CURRY_RIGHT_FLAG], - ["flip", WRAP_FLIP_FLAG], - ["partial", WRAP_PARTIAL_FLAG], - ["partialRight", WRAP_PARTIAL_RIGHT_FLAG], - ["rearg", WRAP_REARG_FLAG] - ]; - var argsTag = "[object Arguments]", arrayTag = "[object Array]", asyncTag = "[object AsyncFunction]", boolTag = "[object Boolean]", dateTag = "[object Date]", domExcTag = "[object DOMException]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", nullTag = "[object Null]", objectTag = "[object Object]", promiseTag = "[object Promise]", proxyTag = "[object Proxy]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", undefinedTag = "[object Undefined]", weakMapTag = "[object WeakMap]", weakSetTag = "[object WeakSet]"; - var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; - var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g; - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source); - var reTrimStart = /^\s+/; - var reWhitespace = /\s/; - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /; - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; - var reEscapeChar = /\\(\\)?/g; - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - var reFlags = /\w*$/; - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - var reIsBinary = /^0b[01]+$/i; - var reIsHostCtor = /^\[object .+?Constructor\]$/; - var reIsOctal = /^0o[0-7]+$/i; - var reIsUint = /^(?:0|[1-9]\d*)$/; - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - var reNoMatch = /($^)/; - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d"; - var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")"; - var reApos = RegExp(rsApos, "g"); - var reComboMark = RegExp(rsCombo, "g"); - var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g"); - var reUnicodeWord = RegExp([ - rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", - rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")", - rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower, - rsUpper + "+" + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join("|"), "g"); - var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]"); - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - var contextProps = [ - "Array", - "Buffer", - "DataView", - "Date", - "Error", - "Float32Array", - "Float64Array", - "Function", - "Int8Array", - "Int16Array", - "Int32Array", - "Map", - "Math", - "Object", - "Promise", - "RegExp", - "Set", - "String", - "Symbol", - "TypeError", - "Uint8Array", - "Uint8ClampedArray", - "Uint16Array", - "Uint32Array", - "WeakMap", - "_", - "clearTimeout", - "isFinite", - "parseInt", - "setTimeout" - ]; - var templateCounter = -1; - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; - var deburredLetters = { - "\xC0": "A", - "\xC1": "A", - "\xC2": "A", - "\xC3": "A", - "\xC4": "A", - "\xC5": "A", - "\xE0": "a", - "\xE1": "a", - "\xE2": "a", - "\xE3": "a", - "\xE4": "a", - "\xE5": "a", - "\xC7": "C", - "\xE7": "c", - "\xD0": "D", - "\xF0": "d", - "\xC8": "E", - "\xC9": "E", - "\xCA": "E", - "\xCB": "E", - "\xE8": "e", - "\xE9": "e", - "\xEA": "e", - "\xEB": "e", - "\xCC": "I", - "\xCD": "I", - "\xCE": "I", - "\xCF": "I", - "\xEC": "i", - "\xED": "i", - "\xEE": "i", - "\xEF": "i", - "\xD1": "N", - "\xF1": "n", - "\xD2": "O", - "\xD3": "O", - "\xD4": "O", - "\xD5": "O", - "\xD6": "O", - "\xD8": "O", - "\xF2": "o", - "\xF3": "o", - "\xF4": "o", - "\xF5": "o", - "\xF6": "o", - "\xF8": "o", - "\xD9": "U", - "\xDA": "U", - "\xDB": "U", - "\xDC": "U", - "\xF9": "u", - "\xFA": "u", - "\xFB": "u", - "\xFC": "u", - "\xDD": "Y", - "\xFD": "y", - "\xFF": "y", - "\xC6": "Ae", - "\xE6": "ae", - "\xDE": "Th", - "\xFE": "th", - "\xDF": "ss", - "\u0100": "A", - "\u0102": "A", - "\u0104": "A", - "\u0101": "a", - "\u0103": "a", - "\u0105": "a", - "\u0106": "C", - "\u0108": "C", - "\u010A": "C", - "\u010C": "C", - "\u0107": "c", - "\u0109": "c", - "\u010B": "c", - "\u010D": "c", - "\u010E": "D", - "\u0110": "D", - "\u010F": "d", - "\u0111": "d", - "\u0112": "E", - "\u0114": "E", - "\u0116": "E", - "\u0118": "E", - "\u011A": "E", - "\u0113": "e", - "\u0115": "e", - "\u0117": "e", - "\u0119": "e", - "\u011B": "e", - "\u011C": "G", - "\u011E": "G", - "\u0120": "G", - "\u0122": "G", - "\u011D": "g", - "\u011F": "g", - "\u0121": "g", - "\u0123": "g", - "\u0124": "H", - "\u0126": "H", - "\u0125": "h", - "\u0127": "h", - "\u0128": "I", - "\u012A": "I", - "\u012C": "I", - "\u012E": "I", - "\u0130": "I", - "\u0129": "i", - "\u012B": "i", - "\u012D": "i", - "\u012F": "i", - "\u0131": "i", - "\u0134": "J", - "\u0135": "j", - "\u0136": "K", - "\u0137": "k", - "\u0138": "k", - "\u0139": "L", - "\u013B": "L", - "\u013D": "L", - "\u013F": "L", - "\u0141": "L", - "\u013A": "l", - "\u013C": "l", - "\u013E": "l", - "\u0140": "l", - "\u0142": "l", - "\u0143": "N", - "\u0145": "N", - "\u0147": "N", - "\u014A": "N", - "\u0144": "n", - "\u0146": "n", - "\u0148": "n", - "\u014B": "n", - "\u014C": "O", - "\u014E": "O", - "\u0150": "O", - "\u014D": "o", - "\u014F": "o", - "\u0151": "o", - "\u0154": "R", - "\u0156": "R", - "\u0158": "R", - "\u0155": "r", - "\u0157": "r", - "\u0159": "r", - "\u015A": "S", - "\u015C": "S", - "\u015E": "S", - "\u0160": "S", - "\u015B": "s", - "\u015D": "s", - "\u015F": "s", - "\u0161": "s", - "\u0162": "T", - "\u0164": "T", - "\u0166": "T", - "\u0163": "t", - "\u0165": "t", - "\u0167": "t", - "\u0168": "U", - "\u016A": "U", - "\u016C": "U", - "\u016E": "U", - "\u0170": "U", - "\u0172": "U", - "\u0169": "u", - "\u016B": "u", - "\u016D": "u", - "\u016F": "u", - "\u0171": "u", - "\u0173": "u", - "\u0174": "W", - "\u0175": "w", - "\u0176": "Y", - "\u0177": "y", - "\u0178": "Y", - "\u0179": "Z", - "\u017B": "Z", - "\u017D": "Z", - "\u017A": "z", - "\u017C": "z", - "\u017E": "z", - "\u0132": "IJ", - "\u0133": "ij", - "\u0152": "Oe", - "\u0153": "oe", - "\u0149": "'n", - "\u017F": "s" - }; - var htmlEscapes = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'" - }; - var htmlUnescapes = { - "&": "&", - "<": "<", - ">": ">", - """: '"', - "'": "'" - }; - var stringEscapes = { - "\\": "\\", - "'": "'", - "\n": "n", - "\r": "r", - "\u2028": "u2028", - "\u2029": "u2029" - }; - var freeParseFloat = parseFloat, freeParseInt = parseInt; - var freeGlobal = typeof global == "object" && global && global.Object === Object && global; - var freeSelf = typeof self == "object" && self && self.Object === Object && self; - var root = freeGlobal || freeSelf || Function("return this")(); - var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; - var moduleExports = freeModule && freeModule.exports === freeExports; - var freeProcess = moduleExports && freeGlobal.process; - var nodeUtil = function() { - try { - var types = freeModule && freeModule.require && freeModule.require("util").types; - if (types) { - return types; - } - return freeProcess && freeProcess.binding && freeProcess.binding("util"); - } catch (e) { - } - }(); - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - function apply(func, thisArg, args) { - switch (args.length) { - case 0: - return func.call(thisArg); - case 1: - return func.call(thisArg, args[0]); - case 2: - return func.call(thisArg, args[0], args[1]); - case 3: - return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - function arrayEach(array, iteratee) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - function arrayEvery(array, predicate) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - function arrayFilter(array, predicate) { - var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } - function arrayIncludesWith(array, value, comparator) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - function arrayMap(array, iteratee) { - var index = -1, length = array == null ? 0 : array.length, result = Array(length); - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - function arrayPush(array, values) { - var index = -1, length = values.length, offset = array.length; - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - function arraySome(array, predicate) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - var asciiSize = baseProperty("length"); - function asciiToArray(string) { - return string.split(""); - } - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection2) { - if (predicate(value, key, collection2)) { - result = key; - return false; - } - }); - return result; - } - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, index = fromIndex + (fromRight ? 1 : -1); - while (fromRight ? index-- : ++index < length) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - function baseIndexOf(array, value, fromIndex) { - return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); - } - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, length = array.length; - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - function baseIsNaN(value) { - return value !== value; - } - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? baseSum(array, iteratee) / length : NAN; - } - function baseProperty(key) { - return function(object) { - return object == null ? undefined2 : object[key]; - }; - } - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined2 : object[key]; - }; - } - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection2) { - accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2); - }); - return accumulator; - } - function baseSortBy(array, comparer) { - var length = array.length; - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - function baseSum(array, iteratee) { - var result, index = -1, length = array.length; - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined2) { - result = result === undefined2 ? current : result + current; - } - } - return result; - } - function baseTimes(n, iteratee) { - var index = -1, result = Array(n); - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - function baseTrim(string) { - return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string; - } - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - function cacheHas(cache, key) { - return cache.has(key); - } - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, length = strSymbols.length; - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { - } - return index; - } - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { - } - return index; - } - function countHolders(array, placeholder) { - var length = array.length, result = 0; - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - var deburrLetter = basePropertyOf(deburredLetters); - var escapeHtmlChar = basePropertyOf(htmlEscapes); - function escapeStringChar(chr) { - return "\\" + stringEscapes[chr]; - } - function getValue(object, key) { - return object == null ? undefined2 : object[key]; - } - function hasUnicode(string) { - return reHasUnicode.test(string); - } - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - function iteratorToArray(iterator) { - var data, result = []; - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - function mapToArray(map) { - var index = -1, result = Array(map.size); - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - function replaceHolders(array, placeholder) { - var index = -1, length = array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - function setToArray(set) { - var index = -1, result = Array(set.size); - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - function setToPairs(set) { - var index = -1, result = Array(set.size); - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, length = array.length; - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; - } - function stringSize(string) { - return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); - } - function stringToArray(string) { - return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); - } - function trimmedEndIndex(string) { - var index = string.length; - while (index-- && reWhitespace.test(string.charAt(index))) { - } - return index; - } - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - var runInContext = function runInContext(context) { - context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); - var { Array: Array2, Date: Date2, Error: Error2, Function: Function2, Math: Math2, Object: Object2, RegExp: RegExp2, String: String2, TypeError: TypeError2 } = context; - var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype; - var coreJsData = context["__core-js_shared__"]; - var funcToString = funcProto.toString; - var hasOwnProperty = objectProto.hasOwnProperty; - var idCounter = 0; - var maskSrcKey = function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); - return uid ? "Symbol(src)_1." + uid : ""; - }(); - var nativeObjectToString = objectProto.toString; - var objectCtorString = funcToString.call(Object2); - var oldDash = root._; - var reIsNative = RegExp2("^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); - var Buffer2 = moduleExports ? context.Buffer : undefined2, Symbol2 = context.Symbol, Uint8Array2 = context.Uint8Array, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : undefined2, getPrototype = overArg(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : undefined2, symIterator = Symbol2 ? Symbol2.iterator : undefined2, symToStringTag = Symbol2 ? Symbol2.toStringTag : undefined2; - var defineProperty = function() { - try { - var func = getNative(Object2, "defineProperty"); - func({}, "", {}); - return func; - } catch (e) { - } - }(); - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; - var { ceil: nativeCeil, floor: nativeFloor } = Math2, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse; - var DataView = getNative(context, "DataView"), Map2 = getNative(context, "Map"), Promise2 = getNative(context, "Promise"), Set2 = getNative(context, "Set"), WeakMap2 = getNative(context, "WeakMap"), nativeCreate = getNative(Object2, "create"); - var metaMap = WeakMap2 && new WeakMap2; - var realNames = {}; - var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap2); - var symbolProto = Symbol2 ? Symbol2.prototype : undefined2, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined2, symbolToString = symbolProto ? symbolProto.toString : undefined2; - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, "__wrapped__")) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - var baseCreate = function() { - function object() { - } - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result2 = new object; - object.prototype = undefined2; - return result2; - }; - }(); - function baseLodash() { - } - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined2; - } - lodash.templateSettings = { - escape: reEscape, - evaluate: reEvaluate, - interpolate: reInterpolate, - variable: "", - imports: { - _: lodash - } - }; - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - function lazyClone() { - var result2 = new LazyWrapper(this.__wrapped__); - result2.__actions__ = copyArray(this.__actions__); - result2.__dir__ = this.__dir__; - result2.__filtered__ = this.__filtered__; - result2.__iteratees__ = copyArray(this.__iteratees__); - result2.__takeCount__ = this.__takeCount__; - result2.__views__ = copyArray(this.__views__); - return result2; - } - function lazyReverse() { - if (this.__filtered__) { - var result2 = new LazyWrapper(this); - result2.__dir__ = -1; - result2.__filtered__ = true; - } else { - result2 = this.clone(); - result2.__dir__ *= -1; - } - return result2; - } - function lazyValue() { - var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__); - if (!isArr || !isRight && arrLength == length && takeCount == length) { - return baseWrapperValue(array, this.__actions__); - } - var result2 = []; - outer: - while (length-- && resIndex < takeCount) { - index += dir; - var iterIndex = -1, value = array[index]; - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], iteratee2 = data.iteratee, type = data.type, computed = iteratee2(value); - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result2[resIndex++] = value; - } - return result2; - } - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - function Hash(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - function hashDelete(key) { - var result2 = this.has(key) && delete this.__data__[key]; - this.size -= result2 ? 1 : 0; - return result2; - } - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result2 = data[key]; - return result2 === HASH_UNDEFINED ? undefined2 : result2; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined2; - } - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined2 : hasOwnProperty.call(data, key); - } - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = nativeCreate && value === undefined2 ? HASH_UNDEFINED : value; - return this; - } - Hash.prototype.clear = hashClear; - Hash.prototype["delete"] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - function ListCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - function listCacheDelete(key) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - function listCacheGet(key) { - var data = this.__data__, index = assocIndexOf(data, key); - return index < 0 ? undefined2 : data[index][1]; - } - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - function listCacheSet(key, value) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - ListCache.prototype.clear = listCacheClear; - ListCache.prototype["delete"] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - function MapCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - function mapCacheClear() { - this.size = 0; - this.__data__ = { - hash: new Hash, - map: new (Map2 || ListCache), - string: new Hash - }; - } - function mapCacheDelete(key) { - var result2 = getMapData(this, key)["delete"](key); - this.size -= result2 ? 1 : 0; - return result2; - } - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - function mapCacheSet(key, value) { - var data = getMapData(this, key), size2 = data.size; - data.set(key, value); - this.size += data.size == size2 ? 0 : 1; - return this; - } - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype["delete"] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - function SetCache(values2) { - var index = -1, length = values2 == null ? 0 : values2.length; - this.__data__ = new MapCache; - while (++index < length) { - this.add(values2[index]); - } - } - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - function setCacheHas(value) { - return this.__data__.has(value); - } - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } - function stackDelete(key) { - var data = this.__data__, result2 = data["delete"](key); - this.size = data.size; - return result2; - } - function stackGet(key) { - return this.__data__.get(key); - } - function stackHas(key) { - return this.__data__.has(key); - } - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - Stack.prototype.clear = stackClear; - Stack.prototype["delete"] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes(value.length, String2) : [], length = result2.length; - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length)))) { - result2.push(key); - } - } - return result2; - } - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined2; - } - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - function assignMergeValue(object, key, value) { - if (value !== undefined2 && !eq(object[key], value) || value === undefined2 && !(key in object)) { - baseAssignValue(object, key, value); - } - } - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined2 && !(key in object)) { - baseAssignValue(object, key, value); - } - } - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - function baseAggregator(collection, setter, iteratee2, accumulator) { - baseEach(collection, function(value, key, collection2) { - setter(accumulator, value, iteratee2(value), collection2); - }); - return accumulator; - } - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - function baseAssignValue(object, key, value) { - if (key == "__proto__" && defineProperty) { - defineProperty(object, key, { - configurable: true, - enumerable: true, - value, - writable: true - }); - } else { - object[key] = value; - } - } - function baseAt(object, paths) { - var index = -1, length = paths.length, result2 = Array2(length), skip = object == null; - while (++index < length) { - result2[index] = skip ? undefined2 : get(object, paths[index]); - } - return result2; - } - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined2) { - number = number <= upper ? number : upper; - } - if (lower !== undefined2) { - number = number >= lower ? number : lower; - } - } - return number; - } - function baseClone(value, bitmask, customizer, key, object, stack) { - var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG; - if (customizer) { - result2 = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result2 !== undefined2) { - return result2; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result2 = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result2); - } - } else { - var tag = getTag(value), isFunc = tag == funcTag || tag == genTag; - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || isFunc && !object) { - result2 = isFlat || isFunc ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result2 = initCloneByTag(value, tag, isDeep); - } - } - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result2); - if (isSet(value)) { - value.forEach(function(subValue) { - result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key2) { - result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - } - var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys; - var props = isArr ? undefined2 : keysFunc(value); - arrayEach(props || value, function(subValue, key2) { - if (props) { - key2 = subValue; - subValue = value[key2]; - } - assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - return result2; - } - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object2(object); - while (length--) { - var key = props[length], predicate = source[key], value = object[key]; - if (value === undefined2 && !(key in object) || !predicate(value)) { - return false; - } - } - return true; - } - function baseDelay(func, wait, args) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return setTimeout2(function() { - func.apply(undefined2, args); - }, wait); - } - function baseDifference(array, values2, iteratee2, comparator) { - var index = -1, includes2 = arrayIncludes, isCommon = true, length = array.length, result2 = [], valuesLength = values2.length; - if (!length) { - return result2; - } - if (iteratee2) { - values2 = arrayMap(values2, baseUnary(iteratee2)); - } - if (comparator) { - includes2 = arrayIncludesWith; - isCommon = false; - } else if (values2.length >= LARGE_ARRAY_SIZE) { - includes2 = cacheHas; - isCommon = false; - values2 = new SetCache(values2); - } - outer: - while (++index < length) { - var value = array[index], computed = iteratee2 == null ? value : iteratee2(value); - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values2[valuesIndex] === computed) { - continue outer; - } - } - result2.push(value); - } else if (!includes2(values2, computed, comparator)) { - result2.push(value); - } - } - return result2; - } - var baseEach = createBaseEach(baseForOwn); - var baseEachRight = createBaseEach(baseForOwnRight, true); - function baseEvery(collection, predicate) { - var result2 = true; - baseEach(collection, function(value, index, collection2) { - result2 = !!predicate(value, index, collection2); - return result2; - }); - return result2; - } - function baseExtremum(array, iteratee2, comparator) { - var index = -1, length = array.length; - while (++index < length) { - var value = array[index], current = iteratee2(value); - if (current != null && (computed === undefined2 ? current === current && !isSymbol(current) : comparator(current, computed))) { - var computed = current, result2 = value; - } - } - return result2; - } - function baseFill(array, value, start, end) { - var length = array.length; - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end === undefined2 || end > length ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - function baseFilter(collection, predicate) { - var result2 = []; - baseEach(collection, function(value, index, collection2) { - if (predicate(value, index, collection2)) { - result2.push(value); - } - }); - return result2; - } - function baseFlatten(array, depth, predicate, isStrict, result2) { - var index = -1, length = array.length; - predicate || (predicate = isFlattenable); - result2 || (result2 = []); - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - baseFlatten(value, depth - 1, predicate, isStrict, result2); - } else { - arrayPush(result2, value); - } - } else if (!isStrict) { - result2[result2.length] = value; - } - } - return result2; - } - var baseFor = createBaseFor(); - var baseForRight = createBaseFor(true); - function baseForOwn(object, iteratee2) { - return object && baseFor(object, iteratee2, keys); - } - function baseForOwnRight(object, iteratee2) { - return object && baseForRight(object, iteratee2, keys); - } - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - function baseGet(object, path) { - path = castPath(path, object); - var index = 0, length = path.length; - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return index && index == length ? object : undefined2; - } - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result2 = keysFunc(object); - return isArray(object) ? result2 : arrayPush(result2, symbolsFunc(object)); - } - function baseGetTag(value) { - if (value == null) { - return value === undefined2 ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object2(value) ? getRawTag(value) : objectToString(value); - } - function baseGt(value, other) { - return value > other; - } - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - function baseHasIn(object, key) { - return object != null && key in Object2(object); - } - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - function baseIntersection(arrays, iteratee2, comparator) { - var includes2 = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = []; - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee2) { - array = arrayMap(array, baseUnary(iteratee2)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee2 || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined2; - } - array = arrays[0]; - var index = -1, seen = caches[0]; - outer: - while (++index < length && result2.length < maxLength) { - var value = array[index], computed = iteratee2 ? iteratee2(value) : value; - value = comparator || value !== 0 ? value : 0; - if (!(seen ? cacheHas(seen, computed) : includes2(result2, computed, comparator))) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache ? cacheHas(cache, computed) : includes2(arrays[othIndex], computed, comparator))) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result2.push(value); - } - } - return result2; - } - function baseInverter(object, setter, iteratee2, accumulator) { - baseForOwn(object, function(value, key, object2) { - setter(accumulator, iteratee2(value), key, object2); - }); - return accumulator; - } - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined2 : apply(func, object, args); - } - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); - } - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, length = index, noCustomizer = !customizer; - if (object == null) { - return !length; - } - object = Object2(object); - while (index--) { - var data = matchData[index]; - if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], objValue = object[key], srcValue = data[1]; - if (noCustomizer && data[2]) { - if (objValue === undefined2 && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result2 = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result2 === undefined2 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result2)) { - return false; - } - } - } - return true; - } - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - function baseIsTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - function baseIteratee(value) { - if (typeof value == "function") { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == "object") { - return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); - } - return property(value); - } - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result2 = []; - for (var key in Object2(object)) { - if (hasOwnProperty.call(object, key) && key != "constructor") { - result2.push(key); - } - } - return result2; - } - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), result2 = []; - for (var key in object) { - if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) { - result2.push(key); - } - } - return result2; - } - function baseLt(value, other) { - return value < other; - } - function baseMap(collection, iteratee2) { - var index = -1, result2 = isArrayLike(collection) ? Array2(collection.length) : []; - baseEach(collection, function(value, key, collection2) { - result2[++index] = iteratee2(value, key, collection2); - }); - return result2; - } - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return objValue === undefined2 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } else { - var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : undefined2; - if (newValue === undefined2) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : undefined2; - var isCommon = newValue === undefined2; - if (isCommon) { - var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } else { - newValue = []; - } - } else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } else { - isCommon = false; - } - } - if (isCommon) { - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack["delete"](srcValue); - } - assignMergeValue(object, key, newValue); - } - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined2; - } - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee2) { - if (isArray(iteratee2)) { - return function(value) { - return baseGet(value, iteratee2.length === 1 ? iteratee2[0] : iteratee2); - }; - } - return iteratee2; - }); - } else { - iteratees = [identity]; - } - var index = -1; - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - var result2 = baseMap(collection, function(value, key, collection2) { - var criteria = arrayMap(iteratees, function(iteratee2) { - return iteratee2(value); - }); - return { criteria, index: ++index, value }; - }); - return baseSortBy(result2, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - function basePick(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); - } - function basePickBy(object, paths, predicate) { - var index = -1, length = paths.length, result2 = {}; - while (++index < length) { - var path = paths[index], value = baseGet(object, path); - if (predicate(value, path)) { - baseSet(result2, castPath(path, object), value); - } - } - return result2; - } - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - function basePullAll(array, values2, iteratee2, comparator) { - var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values2.length, seen = array; - if (array === values2) { - values2 = copyArray(values2); - } - if (iteratee2) { - seen = arrayMap(array, baseUnary(iteratee2)); - } - while (++index < length) { - var fromIndex = 0, value = values2[index], computed = iteratee2 ? iteratee2(value) : value; - while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, lastIndex = length - 1; - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; - } - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - function baseRange(start, end, step, fromRight) { - var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result2 = Array2(length); - while (length--) { - result2[fromRight ? length : ++index] = start; - start += step; - } - return result2; - } - function baseRepeat(string, n) { - var result2 = ""; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result2; - } - do { - if (n % 2) { - result2 += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - return result2; - } - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ""); - } - function baseSample(collection) { - return arraySample(values(collection)); - } - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - var index = -1, length = path.length, lastIndex = length - 1, nested = object; - while (nested != null && ++index < length) { - var key = toKey(path[index]), newValue = value; - if (key === "__proto__" || key === "constructor" || key === "prototype") { - return object; - } - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined2; - if (newValue === undefined2) { - newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}; - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, "toString", { - configurable: true, - enumerable: false, - value: constant(string), - writable: true - }); - }; - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - function baseSlice(array, start, end) { - var index = -1, length = array.length; - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : end - start >>> 0; - start >>>= 0; - var result2 = Array2(length); - while (++index < length) { - result2[index] = array[index + start]; - } - return result2; - } - function baseSome(collection, predicate) { - var result2; - baseEach(collection, function(value, index, collection2) { - result2 = predicate(value, index, collection2); - return !result2; - }); - return !!result2; - } - function baseSortedIndex(array, value, retHighest) { - var low = 0, high = array == null ? low : array.length; - if (typeof value == "number" && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = low + high >>> 1, computed = array[mid]; - if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - function baseSortedIndexBy(array, value, iteratee2, retHighest) { - var low = 0, high = array == null ? 0 : array.length; - if (high === 0) { - return 0; - } - value = iteratee2(value); - var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined2; - while (low < high) { - var mid = nativeFloor((low + high) / 2), computed = iteratee2(array[mid]), othIsDefined = computed !== undefined2, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed); - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? computed <= value : computed < value; - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - function baseSortedUniq(array, iteratee2) { - var index = -1, length = array.length, resIndex = 0, result2 = []; - while (++index < length) { - var value = array[index], computed = iteratee2 ? iteratee2(value) : value; - if (!index || !eq(computed, seen)) { - var seen = computed; - result2[resIndex++] = value === 0 ? 0 : value; - } - } - return result2; - } - function baseToNumber(value) { - if (typeof value == "number") { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - function baseToString(value) { - if (typeof value == "string") { - return value; - } - if (isArray(value)) { - return arrayMap(value, baseToString) + ""; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ""; - } - var result2 = value + ""; - return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2; - } - function baseUniq(array, iteratee2, comparator) { - var index = -1, includes2 = arrayIncludes, length = array.length, isCommon = true, result2 = [], seen = result2; - if (comparator) { - isCommon = false; - includes2 = arrayIncludesWith; - } else if (length >= LARGE_ARRAY_SIZE) { - var set2 = iteratee2 ? null : createSet(array); - if (set2) { - return setToArray(set2); - } - isCommon = false; - includes2 = cacheHas; - seen = new SetCache; - } else { - seen = iteratee2 ? [] : result2; - } - outer: - while (++index < length) { - var value = array[index], computed = iteratee2 ? iteratee2(value) : value; - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee2) { - seen.push(computed); - } - result2.push(value); - } else if (!includes2(seen, computed, comparator)) { - if (seen !== result2) { - seen.push(computed); - } - result2.push(value); - } - } - return result2; - } - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; - } - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, index = fromRight ? length : -1; - while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) { - } - return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index); - } - function baseWrapperValue(value, actions) { - var result2 = value; - if (result2 instanceof LazyWrapper) { - result2 = result2.value(); - } - return arrayReduce(actions, function(result3, action) { - return action.func.apply(action.thisArg, arrayPush([result3], action.args)); - }, result2); - } - function baseXor(arrays, iteratee2, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, result2 = Array2(length); - while (++index < length) { - var array = arrays[index], othIndex = -1; - while (++othIndex < length) { - if (othIndex != index) { - result2[index] = baseDifference(result2[index] || array, arrays[othIndex], iteratee2, comparator); - } - } - } - return baseUniq(baseFlatten(result2, 1), iteratee2, comparator); - } - function baseZipObject(props, values2, assignFunc) { - var index = -1, length = props.length, valsLength = values2.length, result2 = {}; - while (++index < length) { - var value = index < valsLength ? values2[index] : undefined2; - assignFunc(result2, props[index], value); - } - return result2; - } - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - function castFunction(value) { - return typeof value == "function" ? value : identity; - } - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); - } - var castRest = baseRest; - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined2 ? length : end; - return !start && end >= length ? array : baseSlice(array, start, end); - } - var clearTimeout2 = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, result2 = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - buffer.copy(result2); - return result2; - } - function cloneArrayBuffer(arrayBuffer) { - var result2 = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array2(result2).set(new Uint8Array2(arrayBuffer)); - return result2; - } - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - function cloneRegExp(regexp) { - var result2 = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result2.lastIndex = regexp.lastIndex; - return result2; - } - function cloneSymbol(symbol) { - return symbolValueOf ? Object2(symbolValueOf.call(symbol)) : {}; - } - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined2, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value); - var othIsDefined = other !== undefined2, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other); - if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) { - return 1; - } - if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) { - return -1; - } - } - return 0; - } - function compareMultiple(object, other, orders) { - var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; - while (++index < length) { - var result2 = compareAscending(objCriteria[index], othCriteria[index]); - if (result2) { - if (index >= ordersLength) { - return result2; - } - var order = orders[index]; - return result2 * (order == "desc" ? -1 : 1); - } - } - return object.index - other.index; - } - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried; - while (++leftIndex < leftLength) { - result2[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result2[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result2[leftIndex++] = args[argsIndex++]; - } - return result2; - } - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(rangeLength + rightLength), isUncurried = !isCurried; - while (++argsIndex < rangeLength) { - result2[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result2[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result2[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result2; - } - function copyArray(source, array) { - var index = -1, length = source.length; - array || (array = Array2(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - var index = -1, length = props.length; - while (++index < length) { - var key = props[index]; - var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined2; - if (newValue === undefined2) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } - function createAggregator(setter, initializer) { - return function(collection, iteratee2) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; - return func(collection, setter, getIteratee(iteratee2, 2), accumulator); - }; - } - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined2, guard = length > 2 ? sources[2] : undefined2; - customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined2; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined2 : customizer; - length = 1; - } - object = Object2(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee2) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee2); - } - var length = collection.length, index = fromRight ? length : -1, iterable = Object2(collection); - while (fromRight ? index-- : ++index < length) { - if (iteratee2(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - function createBaseFor(fromRight) { - return function(object, iteratee2, keysFunc) { - var index = -1, iterable = Object2(object), props = keysFunc(object), length = props.length; - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee2(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - function wrapper() { - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined2; - var chr = strSymbols ? strSymbols[0] : string.charAt(0); - var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1); - return chr[methodName]() + trailing; - }; - } - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, "")), callback, ""); - }; - } - function createCtor(Ctor) { - return function() { - var args = arguments; - switch (args.length) { - case 0: - return new Ctor; - case 1: - return new Ctor(args[0]); - case 2: - return new Ctor(args[0], args[1]); - case 3: - return new Ctor(args[0], args[1], args[2]); - case 4: - return new Ctor(args[0], args[1], args[2], args[3]); - case 5: - return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), result2 = Ctor.apply(thisBinding, args); - return isObject(result2) ? result2 : thisBinding; - }; - } - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - function wrapper() { - var length = arguments.length, args = Array2(length), index = length, placeholder = getHolder(wrapper); - while (index--) { - args[index] = arguments[index]; - } - var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder); - length -= holders.length; - if (length < arity) { - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined2, args, holders, undefined2, undefined2, arity - length); - } - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object2(collection); - if (!isArrayLike(collection)) { - var iteratee2 = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { - return iteratee2(iterable[key], key, iterable); - }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee2 ? collection[index] : index] : undefined2; - }; - } - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == "wrapper") { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - var funcName = getFuncName(func), data = funcName == "wrapper" ? getData(func) : undefined2; - if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func); - } - } - return function() { - var args = arguments, value = args[0]; - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index2 = 0, result2 = length ? funcs[index2].apply(this, args) : value; - while (++index2 < length) { - result2 = funcs[index2].call(this, result2); - } - return result2; - }; - }); - } - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined2 : createCtor(func); - function wrapper() { - var length = arguments.length, args = Array2(length), index = length; - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary2, arity - length); - } - var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func; - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary2 < length) { - args.length = ary2; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - function createInverter(setter, toIteratee) { - return function(object, iteratee2) { - return baseInverter(object, setter, toIteratee(iteratee2), {}); - }; - } - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result2; - if (value === undefined2 && other === undefined2) { - return defaultValue; - } - if (value !== undefined2) { - result2 = value; - } - if (other !== undefined2) { - if (result2 === undefined2) { - return other; - } - if (typeof value == "string" || typeof other == "string") { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result2 = operator(value, other); - } - return result2; - }; - } - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee2) { - return apply(iteratee2, thisArg, args); - }); - }); - }); - } - function createPadding(length, chars) { - chars = chars === undefined2 ? " " : baseToString(chars); - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result2 = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) ? castSlice(stringToArray(result2), 0, length).join("") : result2.slice(0, length); - } - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - function wrapper() { - var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array2(leftLength + argsLength), fn = this && this !== root && this instanceof wrapper ? Ctor : func; - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != "number" && isIterateeCall(start, end, step)) { - end = step = undefined2; - } - start = toFinite(start); - if (end === undefined2) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined2 ? start < end ? 1 : -1 : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == "string" && typeof other == "string")) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary2, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined2, newHoldersRight = isCurry ? undefined2 : holders, newPartials = isCurry ? partials : undefined2, newPartialsRight = isCurry ? undefined2 : partials; - bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG; - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, - bitmask, - thisArg, - newPartials, - newHolders, - newPartialsRight, - newHoldersRight, - argPos, - ary2, - arity - ]; - var result2 = wrapFunc.apply(undefined2, newData); - if (isLaziable(func)) { - setData(result2, newData); - } - result2.placeholder = placeholder; - return setWrapToString(result2, func, bitmask); - } - function createRound(methodName) { - var func = Math2[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision && nativeIsFinite(number)) { - var pair = (toString(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision)); - pair = (toString(value) + "e").split("e"); - return +(pair[0] + "e" + (+pair[1] - precision)); - } - return func(number); - }; - } - var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop : function(values2) { - return new Set2(values2); - }; - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary2, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined2; - } - ary2 = ary2 === undefined2 ? ary2 : nativeMax(toInteger(ary2), 0); - arity = arity === undefined2 ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, holdersRight = holders; - partials = holders = undefined2; - } - var data = isBindKey ? undefined2 : getData(func); - var newData = [ - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary2, - arity - ]; - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined2 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0); - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result2 = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result2 = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result2 = createPartial(func, bitmask, thisArg, partials); - } else { - result2 = createHybrid.apply(undefined2, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result2, newData), func, bitmask); - } - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if (objValue === undefined2 || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) { - return srcValue; - } - return objValue; - } - function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined2, customDefaultsMerge, stack); - stack["delete"](srcValue); - } - return objValue; - } - function customOmitClone(value) { - return isPlainObject(value) ? undefined2 : value; - } - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache : undefined2; - stack.set(array, other); - stack.set(other, array); - while (++index < arrLength) { - var arrValue = array[index], othValue = other[index]; - if (customizer) { - var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined2) { - if (compared) { - continue; - } - result2 = false; - break; - } - if (seen) { - if (!arraySome(other, function(othValue2, othIndex) { - if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result2 = false; - break; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - result2 = false; - break; - } - } - stack["delete"](array); - stack["delete"](other); - return result2; - } - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { - return false; - } - object = object.buffer; - other = other.buffer; - case arrayBufferTag: - if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) { - return false; - } - return true; - case boolTag: - case dateTag: - case numberTag: - return eq(+object, +other); - case errorTag: - return object.name == other.name && object.message == other.message; - case regexpTag: - case stringTag: - return object == other + ""; - case mapTag: - var convert = mapToArray; - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - if (object.size != other.size && !isPartial) { - return false; - } - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - stack.set(object, other); - var result2 = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack["delete"](object); - return result2; - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result2 = true; - stack.set(object, other); - stack.set(other, object); - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], othValue = other[key]; - if (customizer) { - var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); - } - if (!(compared === undefined2 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { - result2 = false; - break; - } - skipCtor || (skipCtor = key == "constructor"); - } - if (result2 && !skipCtor) { - var objCtor = object.constructor, othCtor = other.constructor; - if (objCtor != othCtor && (("constructor" in object) && ("constructor" in other)) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { - result2 = false; - } - } - stack["delete"](object); - stack["delete"](other); - return result2; - } - function flatRest(func) { - return setToString(overRest(func, undefined2, flatten), func + ""); - } - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - function getFuncName(func) { - var result2 = func.name + "", array = realNames[result2], length = hasOwnProperty.call(realNames, result2) ? array.length : 0; - while (length--) { - var data = array[length], otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result2; - } - function getHolder(func) { - var object = hasOwnProperty.call(lodash, "placeholder") ? lodash : func; - return object.placeholder; - } - function getIteratee() { - var result2 = lodash.iteratee || iteratee; - result2 = result2 === iteratee ? baseIteratee : result2; - return arguments.length ? result2(arguments[0], arguments[1]) : result2; - } - function getMapData(map2, key) { - var data = map2.__data__; - return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; - } - function getMatchData(object) { - var result2 = keys(object), length = result2.length; - while (length--) { - var key = result2[length], value = object[key]; - result2[length] = [key, value, isStrictComparable(value)]; - } - return result2; - } - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined2; - } - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; - try { - value[symToStringTag] = undefined2; - var unmasked = true; - } catch (e) { - } - var result2 = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result2; - } - var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object2(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); - }; - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result2 = []; - while (object) { - arrayPush(result2, getSymbols(object)); - object = getPrototype(object); - } - return result2; - }; - var getTag = baseGetTag; - if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2) != setTag || WeakMap2 && getTag(new WeakMap2) != weakMapTag) { - getTag = function(value) { - var result2 = baseGetTag(value), Ctor = result2 == objectTag ? value.constructor : undefined2, ctorString = Ctor ? toSource(Ctor) : ""; - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: - return dataViewTag; - case mapCtorString: - return mapTag; - case promiseCtorString: - return promiseTag; - case setCtorString: - return setTag; - case weakMapCtorString: - return weakMapTag; - } - } - return result2; - }; - } - function getView(start, end, transforms) { - var index = -1, length = transforms.length; - while (++index < length) { - var data = transforms[index], size2 = data.size; - switch (data.type) { - case "drop": - start += size2; - break; - case "dropRight": - end -= size2; - break; - case "take": - end = nativeMin(end, start + size2); - break; - case "takeRight": - start = nativeMax(start, end - size2); - break; - } - } - return { start, end }; - } - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - var index = -1, length = path.length, result2 = false; - while (++index < length) { - var key = toKey(path[index]); - if (!(result2 = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result2 || ++index != length) { - return result2; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); - } - function initCloneArray(array) { - var length = array.length, result2 = new array.constructor(length); - if (length && typeof array[0] == "string" && hasOwnProperty.call(array, "index")) { - result2.index = array.index; - result2.input = array.input; - } - return result2; - } - function initCloneObject(object) { - return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {}; - } - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - case boolTag: - case dateTag: - return new Ctor(+object); - case dataViewTag: - return cloneDataView(object, isDeep); - case float32Tag: - case float64Tag: - case int8Tag: - case int16Tag: - case int32Tag: - case uint8Tag: - case uint8ClampedTag: - case uint16Tag: - case uint32Tag: - return cloneTypedArray(object, isDeep); - case mapTag: - return new Ctor; - case numberTag: - case stringTag: - return new Ctor(object); - case regexpTag: - return cloneRegExp(object); - case setTag: - return new Ctor; - case symbolTag: - return cloneSymbol(object); - } - } - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? "& " : "") + details[lastIndex]; - details = details.join(length > 2 ? ", " : " "); - return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n"); - } - function isFlattenable(value) { - return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); - } - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); - } - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && (index in object)) { - return eq(object[index], value); - } - return false; - } - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object2(object); - } - function isKeyable(value) { - var type = typeof value; - return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; - } - function isLaziable(func) { - var funcName = getFuncName(func), other = lodash[funcName]; - if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - function isMasked(func) { - return !!maskSrcKey && maskSrcKey in func; - } - var isMaskable = coreJsData ? isFunction : stubFalse; - function isPrototype(value) { - var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto; - return value === proto; - } - function isStrictComparable(value) { - return value === value && !isObject(value); - } - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && (srcValue !== undefined2 || (key in Object2(object))); - }; - } - function memoizeCapped(func) { - var result2 = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - var cache = result2.cache; - return result2; - } - function mergeData(data, source) { - var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG; - if (!(isCommon || isCombo)) { - return data; - } - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - value = source[7]; - if (value) { - data[7] = value; - } - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - if (data[9] == null) { - data[9] = source[9]; - } - data[0] = source[0]; - data[1] = newBitmask; - return data; - } - function nativeKeysIn(object) { - var result2 = []; - if (object != null) { - for (var key in Object2(object)) { - result2.push(key); - } - } - return result2; - } - function objectToString(value) { - return nativeObjectToString.call(value); - } - function overRest(func, start, transform2) { - start = nativeMax(start === undefined2 ? func.length - 1 : start, 0); - return function() { - var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array2(length); - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array2(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform2(array); - return apply(func, this, otherArgs); - }; - } - function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - function reorder(array, indexes) { - var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array); - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined2; - } - return array; - } - function safeGet(object, key) { - if (key === "constructor" && typeof object[key] === "function") { - return; - } - if (key == "__proto__") { - return; - } - return object[key]; - } - var setData = shortOut(baseSetData); - var setTimeout2 = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; - var setToString = shortOut(baseSetToString); - function setWrapToString(wrapper, reference, bitmask) { - var source = reference + ""; - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - function shortOut(func) { - var count = 0, lastCalled = 0; - return function() { - var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined2, arguments); - }; - } - function shuffleSelf(array, size2) { - var index = -1, length = array.length, lastIndex = length - 1; - size2 = size2 === undefined2 ? length : size2; - while (++index < size2) { - var rand = baseRandom(index, lastIndex), value = array[rand]; - array[rand] = array[index]; - array[index] = value; - } - array.length = size2; - return array; - } - var stringToPath = memoizeCapped(function(string) { - var result2 = []; - if (string.charCodeAt(0) === 46) { - result2.push(""); - } - string.replace(rePropName, function(match, number, quote, subString) { - result2.push(quote ? subString.replace(reEscapeChar, "$1") : number || match); - }); - return result2; - }); - function toKey(value) { - if (typeof value == "string" || isSymbol(value)) { - return value; - } - var result2 = value + ""; - return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2; - } - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) { - } - try { - return func + ""; - } catch (e) { - } - } - return ""; - } - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = "_." + pair[0]; - if (bitmask & pair[1] && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result2 = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result2.__actions__ = copyArray(wrapper.__actions__); - result2.__index__ = wrapper.__index__; - result2.__values__ = wrapper.__values__; - return result2; - } - function chunk(array, size2, guard) { - if (guard ? isIterateeCall(array, size2, guard) : size2 === undefined2) { - size2 = 1; - } else { - size2 = nativeMax(toInteger(size2), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size2 < 1) { - return []; - } - var index = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size2)); - while (index < length) { - result2[resIndex++] = baseSlice(array, index, index += size2); - } - return result2; - } - function compact(array) { - var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result2 = []; - while (++index < length) { - var value = array[index]; - if (value) { - result2[resIndex++] = value; - } - } - return result2; - } - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array2(length - 1), array = arguments[0], index = length; - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - var difference = baseRest(function(array, values2) { - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true)) : []; - }); - var differenceBy = baseRest(function(array, values2) { - var iteratee2 = last(values2); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)) : []; - }); - var differenceWith = baseRest(function(array, values2) { - var comparator = last(values2); - if (isArrayLikeObject(comparator)) { - comparator = undefined2; - } - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), undefined2, comparator) : []; - }); - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - function dropRightWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : []; - } - function dropWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : []; - } - function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (start && typeof start != "number" && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined2) { - index = toInteger(fromIndex); - index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } - function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === undefined2 ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - function fromPairs(pairs) { - var index = -1, length = pairs == null ? 0 : pairs.length, result2 = {}; - while (++index < length) { - var pair = pairs[index]; - result2[pair[0]] = pair[1]; - } - return result2; - } - function head(array) { - return array && array.length ? array[0] : undefined2; - } - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; - } - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : []; - }); - var intersectionBy = baseRest(function(arrays) { - var iteratee2 = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - if (iteratee2 === last(mapped)) { - iteratee2 = undefined2; - } else { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee2, 2)) : []; - }); - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - comparator = typeof comparator == "function" ? comparator : undefined2; - if (comparator) { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : []; - }); - function join(array, separator) { - return array == null ? "" : nativeJoin.call(array, separator); - } - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined2; - } - function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined2) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true); - } - function nth(array, n) { - return array && array.length ? baseNth(array, toInteger(n)) : undefined2; - } - var pull = baseRest(pullAll); - function pullAll(array, values2) { - return array && array.length && values2 && values2.length ? basePullAll(array, values2) : array; - } - function pullAllBy(array, values2, iteratee2) { - return array && array.length && values2 && values2.length ? basePullAll(array, values2, getIteratee(iteratee2, 2)) : array; - } - function pullAllWith(array, values2, comparator) { - return array && array.length && values2 && values2.length ? basePullAll(array, values2, undefined2, comparator) : array; - } - var pullAt = flatRest(function(array, indexes) { - var length = array == null ? 0 : array.length, result2 = baseAt(array, indexes); - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - return result2; - }); - function remove(array, predicate) { - var result2 = []; - if (!(array && array.length)) { - return result2; - } - var index = -1, indexes = [], length = array.length; - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result2.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result2; - } - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (end && typeof end != "number" && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } else { - start = start == null ? 0 : toInteger(start); - end = end === undefined2 ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - function sortedIndexBy(array, value, iteratee2) { - return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2)); - } - function sortedIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - function sortedLastIndexBy(array, value, iteratee2) { - return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2), true); - } - function sortedLastIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - function sortedUniq(array) { - return array && array.length ? baseSortedUniq(array) : []; - } - function sortedUniqBy(array, iteratee2) { - return array && array.length ? baseSortedUniq(array, getIteratee(iteratee2, 2)) : []; - } - function tail(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 1, length) : []; - } - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === undefined2 ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - function takeRightWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : []; - } - function takeWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : []; - } - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - var unionBy = baseRest(function(arrays) { - var iteratee2 = last(arrays); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)); - }); - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == "function" ? comparator : undefined2; - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined2, comparator); - }); - function uniq(array) { - return array && array.length ? baseUniq(array) : []; - } - function uniqBy(array, iteratee2) { - return array && array.length ? baseUniq(array, getIteratee(iteratee2, 2)) : []; - } - function uniqWith(array, comparator) { - comparator = typeof comparator == "function" ? comparator : undefined2; - return array && array.length ? baseUniq(array, undefined2, comparator) : []; - } - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - function unzipWith(array, iteratee2) { - if (!(array && array.length)) { - return []; - } - var result2 = unzip(array); - if (iteratee2 == null) { - return result2; - } - return arrayMap(result2, function(group) { - return apply(iteratee2, undefined2, group); - }); - } - var without = baseRest(function(array, values2) { - return isArrayLikeObject(array) ? baseDifference(array, values2) : []; - }); - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - var xorBy = baseRest(function(arrays) { - var iteratee2 = last(arrays); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee2, 2)); - }); - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == "function" ? comparator : undefined2; - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined2, comparator); - }); - var zip = baseRest(unzip); - function zipObject(props, values2) { - return baseZipObject(props || [], values2 || [], assignValue); - } - function zipObjectDeep(props, values2) { - return baseZipObject(props || [], values2 || [], baseSet); - } - var zipWith = baseRest(function(arrays) { - var length = arrays.length, iteratee2 = length > 1 ? arrays[length - 1] : undefined2; - iteratee2 = typeof iteratee2 == "function" ? (arrays.pop(), iteratee2) : undefined2; - return unzipWith(arrays, iteratee2); - }); - function chain(value) { - var result2 = lodash(value); - result2.__chain__ = true; - return result2; - } - function tap(value, interceptor) { - interceptor(value); - return value; - } - function thru(value, interceptor) { - return interceptor(value); - } - var wrapperAt = flatRest(function(paths) { - var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) { - return baseAt(object, paths); - }; - if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - func: thru, - args: [interceptor], - thisArg: undefined2 - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined2); - } - return array; - }); - }); - function wrapperChain() { - return chain(this); - } - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - function wrapperNext() { - if (this.__values__ === undefined2) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, value = done ? undefined2 : this.__values__[this.__index__++]; - return { done, value }; - } - function wrapperToIterator() { - return this; - } - function wrapperPlant(value) { - var result2, parent2 = this; - while (parent2 instanceof baseLodash) { - var clone2 = wrapperClone(parent2); - clone2.__index__ = 0; - clone2.__values__ = undefined2; - if (result2) { - previous.__wrapped__ = clone2; - } else { - result2 = clone2; - } - var previous = clone2; - parent2 = parent2.__wrapped__; - } - previous.__wrapped__ = value; - return result2; - } - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - func: thru, - args: [reverse], - thisArg: undefined2 - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - var countBy = createAggregator(function(result2, value, key) { - if (hasOwnProperty.call(result2, key)) { - ++result2[key]; - } else { - baseAssignValue(result2, key, 1); - } - }); - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined2; - } - return func(collection, getIteratee(predicate, 3)); - } - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - var find = createFind(findIndex); - var findLast = createFind(findLastIndex); - function flatMap(collection, iteratee2) { - return baseFlatten(map(collection, iteratee2), 1); - } - function flatMapDeep(collection, iteratee2) { - return baseFlatten(map(collection, iteratee2), INFINITY); - } - function flatMapDepth(collection, iteratee2, depth) { - depth = depth === undefined2 ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee2), depth); - } - function forEach(collection, iteratee2) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee2, 3)); - } - function forEachRight(collection, iteratee2) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee2, 3)); - } - var groupBy = createAggregator(function(result2, value, key) { - if (hasOwnProperty.call(result2, key)) { - result2[key].push(value); - } else { - baseAssignValue(result2, key, [value]); - } - }); - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; - } - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, isFunc = typeof path == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : []; - baseEach(collection, function(value) { - result2[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result2; - }); - var keyBy = createAggregator(function(result2, value, key) { - baseAssignValue(result2, key, value); - }); - function map(collection, iteratee2) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee2, 3)); - } - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined2 : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - var partition = createAggregator(function(result2, value, key) { - result2[key ? 0 : 1].push(value); - }, function() { - return [[], []]; - }); - function reduce(collection, iteratee2, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; - return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEach); - } - function reduceRight(collection, iteratee2, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3; - return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEachRight); - } - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - function sampleSize(collection, n, guard) { - if (guard ? isIterateeCall(collection, n, guard) : n === undefined2) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined2; - } - return func(collection, getIteratee(predicate, 3)); - } - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - var now = ctxNow || function() { - return root.Date.now(); - }; - function after(n, func) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - function ary(func, n, guard) { - n = guard ? undefined2 : n; - n = func && n == null ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG, undefined2, undefined2, undefined2, undefined2, n); - } - function before(n, func) { - var result2; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result2 = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined2; - } - return result2; - }; - } - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); - function curry(func, arity, guard) { - arity = guard ? undefined2 : arity; - var result2 = createWrap(func, WRAP_CURRY_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); - result2.placeholder = curry.placeholder; - return result2; - } - function curryRight(func, arity, guard) { - arity = guard ? undefined2 : arity; - var result2 = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); - result2.placeholder = curryRight.placeholder; - return result2; - } - function debounce(func, wait, options) { - var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = "maxWait" in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - function invokeFunc(time) { - var args = lastArgs, thisArg = lastThis; - lastArgs = lastThis = undefined2; - lastInvokeTime = time; - result2 = func.apply(thisArg, args); - return result2; - } - function leadingEdge(time) { - lastInvokeTime = time; - timerId = setTimeout2(timerExpired, wait); - return leading ? invokeFunc(time) : result2; - } - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; - return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; - } - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; - return lastCallTime === undefined2 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; - } - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - timerId = setTimeout2(timerExpired, remainingWait(time)); - } - function trailingEdge(time) { - timerId = undefined2; - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined2; - return result2; - } - function cancel() { - if (timerId !== undefined2) { - clearTimeout2(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined2; - } - function flush() { - return timerId === undefined2 ? result2 : trailingEdge(now()); - } - function debounced() { - var time = now(), isInvoking = shouldInvoke(time); - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - if (isInvoking) { - if (timerId === undefined2) { - return leadingEdge(lastCallTime); - } - if (maxing) { - clearTimeout2(timerId); - timerId = setTimeout2(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined2) { - timerId = setTimeout2(timerExpired, wait); - } - return result2; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } - function memoize(func, resolver) { - if (typeof func != "function" || resolver != null && typeof resolver != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; - if (cache.has(key)) { - return cache.get(key); - } - var result2 = func.apply(this, args); - memoized.cache = cache.set(key, result2) || cache; - return result2; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - memoize.Cache = MapCache; - function negate(predicate) { - if (typeof predicate != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: - return !predicate.call(this); - case 1: - return !predicate.call(this, args[0]); - case 2: - return !predicate.call(this, args[0], args[1]); - case 3: - return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - function once(func) { - return before(2, func); - } - var overArgs = castRest(function(func, transforms) { - transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, length = nativeMin(args.length, funcsLength); - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, WRAP_PARTIAL_FLAG, undefined2, partials, holders); - }); - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined2, partials, holders); - }); - var rearg = flatRest(function(func, indexes) { - return createWrap(func, WRAP_REARG_FLAG, undefined2, undefined2, undefined2, indexes); - }); - function rest(func, start) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - start = start === undefined2 ? start : toInteger(start); - return baseRest(func, start); - } - function spread(func, start) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - start = start == null ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], otherArgs = castSlice(args, 0, start); - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - function throttle(func, wait, options) { - var leading = true, trailing = true; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = "leading" in options ? !!options.leading : leading; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - leading, - maxWait: wait, - trailing - }); - } - function unary(func) { - return ary(func, 1); - } - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value); - } - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - function cloneWith(value, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); - } - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); - } - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } - function eq(value, other) { - return value === other || value !== value && other !== other; - } - var gt = createRelationalOperation(baseGt); - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - var isArguments = baseIsArguments(function() { - return arguments; - }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee"); - }; - var isArray = Array2.isArray; - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - function isBoolean(value) { - return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag; - } - var isBuffer = nativeIsBuffer || stubFalse; - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); - } - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && (isArray(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - function isEqual(value, other) { - return baseIsEqual(value, other); - } - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - var result2 = customizer ? customizer(value, other) : undefined2; - return result2 === undefined2 ? baseIsEqual(value, other, undefined2, customizer) : !!result2; - } - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject(value); - } - function isFinite2(value) { - return typeof value == "number" && nativeIsFinite(value); - } - function isFunction(value) { - if (!isObject(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - function isInteger(value) { - return typeof value == "number" && value == toInteger(value); - } - function isLength(value) { - return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - function isObject(value) { - var type = typeof value; - return value != null && (type == "object" || type == "function"); - } - function isObjectLike(value) { - return value != null && typeof value == "object"; - } - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - function isNaN2(value) { - return isNumber(value) && value != +value; - } - function isNative(value) { - if (isMaskable(value)) { - throw new Error2(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - function isNull(value) { - return value === null; - } - function isNil(value) { - return value == null; - } - function isNumber(value) { - return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag; - } - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; - } - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - function isString(value) { - return typeof value == "string" || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag; - } - function isSymbol(value) { - return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag; - } - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - function isUndefined(value) { - return value === undefined2; - } - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } - var lt = createRelationalOperation(baseLt); - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values; - return func(value); - } - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = value < 0 ? -1 : 1; - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - function toInteger(value) { - var result2 = toFinite(value), remainder = result2 % 1; - return result2 === result2 ? remainder ? result2 - remainder : result2 : 0; - } - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - function toNumber(value) { - if (typeof value == "number") { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == "function" ? value.valueOf() : value; - value = isObject(other) ? other + "" : other; - } - if (typeof value != "string") { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; - } - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - function toSafeInteger(value) { - return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0; - } - function toString(value) { - return value == null ? "" : baseToString(value); - } - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - var at = flatRest(baseAt); - function create(prototype, properties) { - var result2 = baseCreate(prototype); - return properties == null ? result2 : baseAssign(result2, properties); - } - var defaults = baseRest(function(object, sources) { - object = Object2(object); - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined2; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - if (value === undefined2 || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) { - object[key] = source[key]; - } - } - } - return object; - }); - var defaultsDeep = baseRest(function(args) { - args.push(undefined2, customDefaultsMerge); - return apply(mergeWith, undefined2, args); - }); - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - function forIn(object, iteratee2) { - return object == null ? object : baseFor(object, getIteratee(iteratee2, 3), keysIn); - } - function forInRight(object, iteratee2) { - return object == null ? object : baseForRight(object, getIteratee(iteratee2, 3), keysIn); - } - function forOwn(object, iteratee2) { - return object && baseForOwn(object, getIteratee(iteratee2, 3)); - } - function forOwnRight(object, iteratee2) { - return object && baseForOwnRight(object, getIteratee(iteratee2, 3)); - } - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - function get(object, path, defaultValue) { - var result2 = object == null ? undefined2 : baseGet(object, path); - return result2 === undefined2 ? defaultValue : result2; - } - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - var invert = createInverter(function(result2, value, key) { - if (value != null && typeof value.toString != "function") { - value = nativeObjectToString.call(value); - } - result2[value] = key; - }, constant(identity)); - var invertBy = createInverter(function(result2, value, key) { - if (value != null && typeof value.toString != "function") { - value = nativeObjectToString.call(value); - } - if (hasOwnProperty.call(result2, value)) { - result2[value].push(key); - } else { - result2[value] = [key]; - } - }, getIteratee); - var invoke = baseRest(baseInvoke); - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - function mapKeys(object, iteratee2) { - var result2 = {}; - iteratee2 = getIteratee(iteratee2, 3); - baseForOwn(object, function(value, key, object2) { - baseAssignValue(result2, iteratee2(value, key, object2), value); - }); - return result2; - } - function mapValues(object, iteratee2) { - var result2 = {}; - iteratee2 = getIteratee(iteratee2, 3); - baseForOwn(object, function(value, key, object2) { - baseAssignValue(result2, key, iteratee2(value, key, object2)); - }); - return result2; - } - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - var omit = flatRest(function(object, paths) { - var result2 = {}; - if (object == null) { - return result2; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result2); - if (isDeep) { - result2 = baseClone(result2, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result2, paths[length]); - } - return result2; - }); - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); - }); - } - function result(object, path, defaultValue) { - path = castPath(path, object); - var index = -1, length = path.length; - if (!length) { - length = 1; - object = undefined2; - } - while (++index < length) { - var value = object == null ? undefined2 : object[toKey(path[index])]; - if (value === undefined2) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - function setWith(object, path, value, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return object == null ? object : baseSet(object, path, value, customizer); - } - var toPairs = createToPairs(keys); - var toPairsIn = createToPairs(keysIn); - function transform(object, iteratee2, accumulator) { - var isArr = isArray(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object); - iteratee2 = getIteratee(iteratee2, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object2) { - return iteratee2(accumulator, value, index, object2); - }); - return accumulator; - } - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - function clamp(number, lower, upper) { - if (upper === undefined2) { - upper = lower; - lower = undefined2; - } - if (upper !== undefined2) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined2) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined2) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - function random(lower, upper, floating) { - if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined2; - } - if (floating === undefined2) { - if (typeof upper == "boolean") { - floating = upper; - upper = undefined2; - } else if (typeof lower == "boolean") { - floating = lower; - lower = undefined2; - } - } - if (lower === undefined2 && upper === undefined2) { - lower = 0; - upper = 1; - } else { - lower = toFinite(lower); - if (upper === undefined2) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper); - } - return baseRandom(lower, upper); - } - var camelCase = createCompounder(function(result2, word, index) { - word = word.toLowerCase(); - return result2 + (index ? capitalize(word) : word); - }); - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ""); - } - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - var length = string.length; - position = position === undefined2 ? length : baseClamp(toInteger(position), 0, length); - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - function escape(string) { - string = toString(string); - return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string; - } - function escapeRegExp(string) { - string = toString(string); - return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, "\\$&") : string; - } - var kebabCase = createCompounder(function(result2, word, index) { - return result2 + (index ? "-" : "") + word.toLowerCase(); - }); - var lowerCase = createCompounder(function(result2, word, index) { - return result2 + (index ? " " : "") + word.toLowerCase(); - }); - var lowerFirst = createCaseFirst("toLowerCase"); - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars); - } - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - var strLength = length ? stringSize(string) : 0; - return length && strLength < length ? string + createPadding(length - strLength, chars) : string; - } - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - var strLength = length ? stringSize(string) : 0; - return length && strLength < length ? createPadding(length - strLength, chars) + string : string; - } - function parseInt2(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart, ""), radix || 0); - } - function repeat(string, n, guard) { - if (guard ? isIterateeCall(string, n, guard) : n === undefined2) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - function replace() { - var args = arguments, string = toString(args[0]); - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - var snakeCase = createCompounder(function(result2, word, index) { - return result2 + (index ? "_" : "") + word.toLowerCase(); - }); - function split(string, separator, limit) { - if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) { - separator = limit = undefined2; - } - limit = limit === undefined2 ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - var startCase = createCompounder(function(result2, word, index) { - return result2 + (index ? " " : "") + upperFirst(word); - }); - function startsWith(string, target, position) { - string = toString(string); - position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length); - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - function template(string, options, guard) { - var settings = lodash.templateSettings; - if (guard && isIterateeCall(string, options, guard)) { - options = undefined2; - } - string = toString(string); - options = assignInWith({}, options, settings, customDefaultsAssignIn); - var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys); - var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '"; - var reDelimiters = RegExp2((options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$", "g"); - var sourceURL = "//# sourceURL=" + (hasOwnProperty.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + "\n"; - string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { - interpolateValue || (interpolateValue = esTemplateValue); - source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); - if (escapeValue) { - isEscaping = true; - source += "' +\n__e(" + escapeValue + ") +\n'"; - } - if (evaluateValue) { - isEvaluating = true; - source += "';\n" + evaluateValue + ";\n__p += '"; - } - if (interpolateValue) { - source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; - } - index = offset + match.length; - return match; - }); - source += "';\n"; - var variable = hasOwnProperty.call(options, "variable") && options.variable; - if (!variable) { - source = "with (obj) {\n" + source + "\n}\n"; - } else if (reForbiddenIdentifierChars.test(variable)) { - throw new Error2(INVALID_TEMPL_VAR_ERROR_TEXT); - } - source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;"); - source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\n" + "function print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}"; - var result2 = attempt(function() { - return Function2(importsKeys, sourceURL + "return " + source).apply(undefined2, importsValues); - }); - result2.source = source; - if (isError(result2)) { - throw result2; - } - return result2; - } - function toLower(value) { - return toString(value).toLowerCase(); - } - function toUpper(value) { - return toString(value).toUpperCase(); - } - function trim(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === undefined2)) { - return baseTrim(string); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1; - return castSlice(strSymbols, start, end).join(""); - } - function trimEnd(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === undefined2)) { - return string.slice(0, trimmedEndIndex(string) + 1); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; - return castSlice(strSymbols, 0, end).join(""); - } - function trimStart(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === undefined2)) { - return string.replace(reTrimStart, ""); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars)); - return castSlice(strSymbols, start).join(""); - } - function truncate(string, options) { - var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION; - if (isObject(options)) { - var separator = "separator" in options ? options.separator : separator; - length = "length" in options ? toInteger(options.length) : length; - omission = "omission" in options ? baseToString(options.omission) : omission; - } - string = toString(string); - var strLength = string.length; - if (hasUnicode(string)) { - var strSymbols = stringToArray(string); - strLength = strSymbols.length; - } - if (length >= strLength) { - return string; - } - var end = length - stringSize(omission); - if (end < 1) { - return omission; - } - var result2 = strSymbols ? castSlice(strSymbols, 0, end).join("") : string.slice(0, end); - if (separator === undefined2) { - return result2 + omission; - } - if (strSymbols) { - end += result2.length - end; - } - if (isRegExp(separator)) { - if (string.slice(end).search(separator)) { - var match, substring = result2; - if (!separator.global) { - separator = RegExp2(separator.source, toString(reFlags.exec(separator)) + "g"); - } - separator.lastIndex = 0; - while (match = separator.exec(substring)) { - var newEnd = match.index; - } - result2 = result2.slice(0, newEnd === undefined2 ? end : newEnd); - } - } else if (string.indexOf(baseToString(separator), end) != end) { - var index = result2.lastIndexOf(separator); - if (index > -1) { - result2 = result2.slice(0, index); - } - } - return result2 + omission; - } - function unescape2(string) { - string = toString(string); - return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string; - } - var upperCase = createCompounder(function(result2, word, index) { - return result2 + (index ? " " : "") + word.toUpperCase(); - }); - var upperFirst = createCaseFirst("toUpperCase"); - function words(string, pattern, guard) { - string = toString(string); - pattern = guard ? undefined2 : pattern; - if (pattern === undefined2) { - return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); - } - return string.match(pattern) || []; - } - var attempt = baseRest(function(func, args) { - try { - return apply(func, undefined2, args); - } catch (e) { - return isError(e) ? e : new Error2(e); - } - }); - var bindAll = flatRest(function(object, methodNames) { - arrayEach(methodNames, function(key) { - key = toKey(key); - baseAssignValue(object, key, bind(object[key], object)); - }); - return object; - }); - function cond(pairs) { - var length = pairs == null ? 0 : pairs.length, toIteratee = getIteratee(); - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - return baseRest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); - } - function conforms(source) { - return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); - } - function constant(value) { - return function() { - return value; - }; - } - function defaultTo(value, defaultValue) { - return value == null || value !== value ? defaultValue : value; - } - var flow = createFlow(); - var flowRight = createFlow(true); - function identity(value) { - return value; - } - function iteratee(func) { - return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG)); - } - function matches(source) { - return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); - } - function matchesProperty(path, srcValue) { - return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); - } - var method = baseRest(function(path, args) { - return function(object) { - return baseInvoke(object, path, args); - }; - }); - var methodOf = baseRest(function(object, args) { - return function(path) { - return baseInvoke(object, path, args); - }; - }); - function mixin(object, source, options) { - var props = keys(source), methodNames = baseFunctions(source, props); - if (options == null && !(isObject(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain2 = !(isObject(options) && ("chain" in options)) || !!options.chain, isFunc = isFunction(object); - arrayEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain2 || chainAll) { - var result2 = object(this.__wrapped__), actions = result2.__actions__ = copyArray(this.__actions__); - actions.push({ func, args: arguments, thisArg: object }); - result2.__chain__ = chainAll; - return result2; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - return object; - } - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - function noop() { - } - function nthArg(n) { - n = toInteger(n); - return baseRest(function(args) { - return baseNth(args, n); - }); - } - var over = createOver(arrayMap); - var overEvery = createOver(arrayEvery); - var overSome = createOver(arraySome); - function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); - } - function propertyOf(object) { - return function(path) { - return object == null ? undefined2 : baseGet(object, path); - }; - } - var range = createRange(); - var rangeRight = createRange(true); - function stubArray() { - return []; - } - function stubFalse() { - return false; - } - function stubObject() { - return {}; - } - function stubString() { - return ""; - } - function stubTrue() { - return true; - } - function times(n, iteratee2) { - n = toInteger(n); - if (n < 1 || n > MAX_SAFE_INTEGER) { - return []; - } - var index = MAX_ARRAY_LENGTH, length = nativeMin(n, MAX_ARRAY_LENGTH); - iteratee2 = getIteratee(iteratee2); - n -= MAX_ARRAY_LENGTH; - var result2 = baseTimes(length, iteratee2); - while (++index < n) { - iteratee2(index); - } - return result2; - } - function toPath(value) { - if (isArray(value)) { - return arrayMap(value, toKey); - } - return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); - } - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - var add = createMathOperation(function(augend, addend) { - return augend + addend; - }, 0); - var ceil = createRound("ceil"); - var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; - }, 1); - var floor = createRound("floor"); - function max(array) { - return array && array.length ? baseExtremum(array, identity, baseGt) : undefined2; - } - function maxBy(array, iteratee2) { - return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseGt) : undefined2; - } - function mean(array) { - return baseMean(array, identity); - } - function meanBy(array, iteratee2) { - return baseMean(array, getIteratee(iteratee2, 2)); - } - function min(array) { - return array && array.length ? baseExtremum(array, identity, baseLt) : undefined2; - } - function minBy(array, iteratee2) { - return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseLt) : undefined2; - } - var multiply = createMathOperation(function(multiplier, multiplicand) { - return multiplier * multiplicand; - }, 1); - var round = createRound("round"); - var subtract = createMathOperation(function(minuend, subtrahend) { - return minuend - subtrahend; - }, 0); - function sum(array) { - return array && array.length ? baseSum(array, identity) : 0; - } - function sumBy(array, iteratee2) { - return array && array.length ? baseSum(array, getIteratee(iteratee2, 2)) : 0; - } - lodash.after = after; - lodash.ary = ary; - lodash.assign = assign; - lodash.assignIn = assignIn; - lodash.assignInWith = assignInWith; - lodash.assignWith = assignWith; - lodash.at = at; - lodash.before = before; - lodash.bind = bind; - lodash.bindAll = bindAll; - lodash.bindKey = bindKey; - lodash.castArray = castArray; - lodash.chain = chain; - lodash.chunk = chunk; - lodash.compact = compact; - lodash.concat = concat; - lodash.cond = cond; - lodash.conforms = conforms; - lodash.constant = constant; - lodash.countBy = countBy; - lodash.create = create; - lodash.curry = curry; - lodash.curryRight = curryRight; - lodash.debounce = debounce; - lodash.defaults = defaults; - lodash.defaultsDeep = defaultsDeep; - lodash.defer = defer; - lodash.delay = delay; - lodash.difference = difference; - lodash.differenceBy = differenceBy; - lodash.differenceWith = differenceWith; - lodash.drop = drop; - lodash.dropRight = dropRight; - lodash.dropRightWhile = dropRightWhile; - lodash.dropWhile = dropWhile; - lodash.fill = fill; - lodash.filter = filter; - lodash.flatMap = flatMap; - lodash.flatMapDeep = flatMapDeep; - lodash.flatMapDepth = flatMapDepth; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.flattenDepth = flattenDepth; - lodash.flip = flip; - lodash.flow = flow; - lodash.flowRight = flowRight; - lodash.fromPairs = fromPairs; - lodash.functions = functions; - lodash.functionsIn = functionsIn; - lodash.groupBy = groupBy; - lodash.initial = initial; - lodash.intersection = intersection; - lodash.intersectionBy = intersectionBy; - lodash.intersectionWith = intersectionWith; - lodash.invert = invert; - lodash.invertBy = invertBy; - lodash.invokeMap = invokeMap; - lodash.iteratee = iteratee; - lodash.keyBy = keyBy; - lodash.keys = keys; - lodash.keysIn = keysIn; - lodash.map = map; - lodash.mapKeys = mapKeys; - lodash.mapValues = mapValues; - lodash.matches = matches; - lodash.matchesProperty = matchesProperty; - lodash.memoize = memoize; - lodash.merge = merge; - lodash.mergeWith = mergeWith; - lodash.method = method; - lodash.methodOf = methodOf; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.nthArg = nthArg; - lodash.omit = omit; - lodash.omitBy = omitBy; - lodash.once = once; - lodash.orderBy = orderBy; - lodash.over = over; - lodash.overArgs = overArgs; - lodash.overEvery = overEvery; - lodash.overSome = overSome; - lodash.partial = partial; - lodash.partialRight = partialRight; - lodash.partition = partition; - lodash.pick = pick; - lodash.pickBy = pickBy; - lodash.property = property; - lodash.propertyOf = propertyOf; - lodash.pull = pull; - lodash.pullAll = pullAll; - lodash.pullAllBy = pullAllBy; - lodash.pullAllWith = pullAllWith; - lodash.pullAt = pullAt; - lodash.range = range; - lodash.rangeRight = rangeRight; - lodash.rearg = rearg; - lodash.reject = reject; - lodash.remove = remove; - lodash.rest = rest; - lodash.reverse = reverse; - lodash.sampleSize = sampleSize; - lodash.set = set; - lodash.setWith = setWith; - lodash.shuffle = shuffle; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.sortedUniq = sortedUniq; - lodash.sortedUniqBy = sortedUniqBy; - lodash.split = split; - lodash.spread = spread; - lodash.tail = tail; - lodash.take = take; - lodash.takeRight = takeRight; - lodash.takeRightWhile = takeRightWhile; - lodash.takeWhile = takeWhile; - lodash.tap = tap; - lodash.throttle = throttle; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.toPairs = toPairs; - lodash.toPairsIn = toPairsIn; - lodash.toPath = toPath; - lodash.toPlainObject = toPlainObject; - lodash.transform = transform; - lodash.unary = unary; - lodash.union = union; - lodash.unionBy = unionBy; - lodash.unionWith = unionWith; - lodash.uniq = uniq; - lodash.uniqBy = uniqBy; - lodash.uniqWith = uniqWith; - lodash.unset = unset; - lodash.unzip = unzip; - lodash.unzipWith = unzipWith; - lodash.update = update; - lodash.updateWith = updateWith; - lodash.values = values; - lodash.valuesIn = valuesIn; - lodash.without = without; - lodash.words = words; - lodash.wrap = wrap; - lodash.xor = xor; - lodash.xorBy = xorBy; - lodash.xorWith = xorWith; - lodash.zip = zip; - lodash.zipObject = zipObject; - lodash.zipObjectDeep = zipObjectDeep; - lodash.zipWith = zipWith; - lodash.entries = toPairs; - lodash.entriesIn = toPairsIn; - lodash.extend = assignIn; - lodash.extendWith = assignInWith; - mixin(lodash, lodash); - lodash.add = add; - lodash.attempt = attempt; - lodash.camelCase = camelCase; - lodash.capitalize = capitalize; - lodash.ceil = ceil; - lodash.clamp = clamp; - lodash.clone = clone; - lodash.cloneDeep = cloneDeep; - lodash.cloneDeepWith = cloneDeepWith; - lodash.cloneWith = cloneWith; - lodash.conformsTo = conformsTo; - lodash.deburr = deburr; - lodash.defaultTo = defaultTo; - lodash.divide = divide; - lodash.endsWith = endsWith; - lodash.eq = eq; - lodash.escape = escape; - lodash.escapeRegExp = escapeRegExp; - lodash.every = every; - lodash.find = find; - lodash.findIndex = findIndex; - lodash.findKey = findKey; - lodash.findLast = findLast; - lodash.findLastIndex = findLastIndex; - lodash.findLastKey = findLastKey; - lodash.floor = floor; - lodash.forEach = forEach; - lodash.forEachRight = forEachRight; - lodash.forIn = forIn; - lodash.forInRight = forInRight; - lodash.forOwn = forOwn; - lodash.forOwnRight = forOwnRight; - lodash.get = get; - lodash.gt = gt; - lodash.gte = gte; - lodash.has = has; - lodash.hasIn = hasIn; - lodash.head = head; - lodash.identity = identity; - lodash.includes = includes; - lodash.indexOf = indexOf; - lodash.inRange = inRange; - lodash.invoke = invoke; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isArrayBuffer = isArrayBuffer; - lodash.isArrayLike = isArrayLike; - lodash.isArrayLikeObject = isArrayLikeObject; - lodash.isBoolean = isBoolean; - lodash.isBuffer = isBuffer; - lodash.isDate = isDate; - lodash.isElement = isElement; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isEqualWith = isEqualWith; - lodash.isError = isError; - lodash.isFinite = isFinite2; - lodash.isFunction = isFunction; - lodash.isInteger = isInteger; - lodash.isLength = isLength; - lodash.isMap = isMap; - lodash.isMatch = isMatch; - lodash.isMatchWith = isMatchWith; - lodash.isNaN = isNaN2; - lodash.isNative = isNative; - lodash.isNil = isNil; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isObjectLike = isObjectLike; - lodash.isPlainObject = isPlainObject; - lodash.isRegExp = isRegExp; - lodash.isSafeInteger = isSafeInteger; - lodash.isSet = isSet; - lodash.isString = isString; - lodash.isSymbol = isSymbol; - lodash.isTypedArray = isTypedArray; - lodash.isUndefined = isUndefined; - lodash.isWeakMap = isWeakMap; - lodash.isWeakSet = isWeakSet; - lodash.join = join; - lodash.kebabCase = kebabCase; - lodash.last = last; - lodash.lastIndexOf = lastIndexOf; - lodash.lowerCase = lowerCase; - lodash.lowerFirst = lowerFirst; - lodash.lt = lt; - lodash.lte = lte; - lodash.max = max; - lodash.maxBy = maxBy; - lodash.mean = mean; - lodash.meanBy = meanBy; - lodash.min = min; - lodash.minBy = minBy; - lodash.stubArray = stubArray; - lodash.stubFalse = stubFalse; - lodash.stubObject = stubObject; - lodash.stubString = stubString; - lodash.stubTrue = stubTrue; - lodash.multiply = multiply; - lodash.nth = nth; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.now = now; - lodash.pad = pad; - lodash.padEnd = padEnd; - lodash.padStart = padStart; - lodash.parseInt = parseInt2; - lodash.random = random; - lodash.reduce = reduce; - lodash.reduceRight = reduceRight; - lodash.repeat = repeat; - lodash.replace = replace; - lodash.result = result; - lodash.round = round; - lodash.runInContext = runInContext; - lodash.sample = sample; - lodash.size = size; - lodash.snakeCase = snakeCase; - lodash.some = some; - lodash.sortedIndex = sortedIndex; - lodash.sortedIndexBy = sortedIndexBy; - lodash.sortedIndexOf = sortedIndexOf; - lodash.sortedLastIndex = sortedLastIndex; - lodash.sortedLastIndexBy = sortedLastIndexBy; - lodash.sortedLastIndexOf = sortedLastIndexOf; - lodash.startCase = startCase; - lodash.startsWith = startsWith; - lodash.subtract = subtract; - lodash.sum = sum; - lodash.sumBy = sumBy; - lodash.template = template; - lodash.times = times; - lodash.toFinite = toFinite; - lodash.toInteger = toInteger; - lodash.toLength = toLength; - lodash.toLower = toLower; - lodash.toNumber = toNumber; - lodash.toSafeInteger = toSafeInteger; - lodash.toString = toString; - lodash.toUpper = toUpper; - lodash.trim = trim; - lodash.trimEnd = trimEnd; - lodash.trimStart = trimStart; - lodash.truncate = truncate; - lodash.unescape = unescape2; - lodash.uniqueId = uniqueId; - lodash.upperCase = upperCase; - lodash.upperFirst = upperFirst; - lodash.each = forEach; - lodash.eachRight = forEachRight; - lodash.first = head; - mixin(lodash, function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }(), { chain: false }); - lodash.VERSION = VERSION; - arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) { - lodash[methodName].placeholder = lodash; - }); - arrayEach(["drop", "take"], function(methodName, index) { - LazyWrapper.prototype[methodName] = function(n) { - n = n === undefined2 ? 1 : nativeMax(toInteger(n), 0); - var result2 = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone(); - if (result2.__filtered__) { - result2.__takeCount__ = nativeMin(n, result2.__takeCount__); - } else { - result2.__views__.push({ - size: nativeMin(n, MAX_ARRAY_LENGTH), - type: methodName + (result2.__dir__ < 0 ? "Right" : "") - }); - } - return result2; - }; - LazyWrapper.prototype[methodName + "Right"] = function(n) { - return this.reverse()[methodName](n).reverse(); - }; - }); - arrayEach(["filter", "map", "takeWhile"], function(methodName, index) { - var type = index + 1, isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; - LazyWrapper.prototype[methodName] = function(iteratee2) { - var result2 = this.clone(); - result2.__iteratees__.push({ - iteratee: getIteratee(iteratee2, 3), - type - }); - result2.__filtered__ = result2.__filtered__ || isFilter; - return result2; - }; - }); - arrayEach(["head", "last"], function(methodName, index) { - var takeName = "take" + (index ? "Right" : ""); - LazyWrapper.prototype[methodName] = function() { - return this[takeName](1).value()[0]; - }; - }); - arrayEach(["initial", "tail"], function(methodName, index) { - var dropName = "drop" + (index ? "" : "Right"); - LazyWrapper.prototype[methodName] = function() { - return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); - }; - }); - LazyWrapper.prototype.compact = function() { - return this.filter(identity); - }; - LazyWrapper.prototype.find = function(predicate) { - return this.filter(predicate).head(); - }; - LazyWrapper.prototype.findLast = function(predicate) { - return this.reverse().find(predicate); - }; - LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { - if (typeof path == "function") { - return new LazyWrapper(this); - } - return this.map(function(value) { - return baseInvoke(value, path, args); - }); - }); - LazyWrapper.prototype.reject = function(predicate) { - return this.filter(negate(getIteratee(predicate))); - }; - LazyWrapper.prototype.slice = function(start, end) { - start = toInteger(start); - var result2 = this; - if (result2.__filtered__ && (start > 0 || end < 0)) { - return new LazyWrapper(result2); - } - if (start < 0) { - result2 = result2.takeRight(-start); - } else if (start) { - result2 = result2.drop(start); - } - if (end !== undefined2) { - end = toInteger(end); - result2 = end < 0 ? result2.dropRight(-end) : result2.take(end - start); - } - return result2; - }; - LazyWrapper.prototype.takeRightWhile = function(predicate) { - return this.reverse().takeWhile(predicate).reverse(); - }; - LazyWrapper.prototype.toArray = function() { - return this.take(MAX_ARRAY_LENGTH); - }; - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName); - if (!lodashFunc) { - return; - } - lodash.prototype[methodName] = function() { - var value = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value instanceof LazyWrapper, iteratee2 = args[0], useLazy = isLazy || isArray(value); - var interceptor = function(value2) { - var result3 = lodashFunc.apply(lodash, arrayPush([value2], args)); - return isTaker && chainAll ? result3[0] : result3; - }; - if (useLazy && checkIteratee && typeof iteratee2 == "function" && iteratee2.length != 1) { - isLazy = useLazy = false; - } - var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid; - if (!retUnwrapped && useLazy) { - value = onlyLazy ? value : new LazyWrapper(this); - var result2 = func.apply(value, args); - result2.__actions__.push({ func: thru, args: [interceptor], thisArg: undefined2 }); - return new LodashWrapper(result2, chainAll); - } - if (isUnwrapped && onlyLazy) { - return func.apply(this, args); - } - result2 = this.thru(interceptor); - return isUnwrapped ? isTaker ? result2.value()[0] : result2.value() : result2; - }; - }); - arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) { - var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName); - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value2) { - return func.apply(isArray(value2) ? value2 : [], args); - }); - }; - }); - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var lodashFunc = lodash[methodName]; - if (lodashFunc) { - var key = lodashFunc.name + ""; - if (!hasOwnProperty.call(realNames, key)) { - realNames[key] = []; - } - realNames[key].push({ name: methodName, func: lodashFunc }); - } - }); - realNames[createHybrid(undefined2, WRAP_BIND_KEY_FLAG).name] = [{ - name: "wrapper", - func: undefined2 - }]; - LazyWrapper.prototype.clone = lazyClone; - LazyWrapper.prototype.reverse = lazyReverse; - LazyWrapper.prototype.value = lazyValue; - lodash.prototype.at = wrapperAt; - lodash.prototype.chain = wrapperChain; - lodash.prototype.commit = wrapperCommit; - lodash.prototype.next = wrapperNext; - lodash.prototype.plant = wrapperPlant; - lodash.prototype.reverse = wrapperReverse; - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - lodash.prototype.first = lodash.prototype.head; - if (symIterator) { - lodash.prototype[symIterator] = wrapperToIterator; - } - return lodash; - }; - var _ = runInContext(); - if (typeof define == "function" && typeof define.amd == "object" && define.amd) { - root._ = _; - define(function() { - return _; - }); - } else if (freeModule) { - (freeModule.exports = _)._ = _; - freeExports._ = _; - } else { - root._ = _; - } - }).call(exports); -}); - -// package-shared/functions/backend/serverError.ts -import fs from "fs"; -async function serverError({ - user, - message, - component, - noMail, - req -}) { - const date = new Date; - const reqIp = (() => { - if (!req) - return null; - try { - const forwarded = req.headers["x-forwarded-for"]; - const realIp = req.headers["x-real-ip"]; - const cloudflareIp = req.headers["cf-connecting-ip"]; - const forwardedIp = Array.isArray(forwarded) ? forwarded[0] : forwarded?.split(",")[0]; - const clientIp = cloudflareIp || forwardedIp || realIp || req.socket.remoteAddress; - if (!clientIp) - return null; - return String(clientIp); - } catch (error) { - return null; - } - })(); - try { - let log = `\uD83D\uDE80 SERVER ERROR =========================== -Error Message: ${message}\nComponent: ${component}`; - if (user?.id && user?.first_name && user?.last_name && user?.email) { - log += `\nUser Id: ${user?.id}\nUser Name: ${user?.first_name} ${user?.last_name}\nUser Email: ${user?.email}`; - } - if (req?.url) { - log += `\nURL: ${req.url}`; - } - if (req?.body) { - log += `\nRequest Body: ${JSON.stringify(req.body, null, 4)}`; - } - if (reqIp) { - log += `\nIP: ${reqIp}`; - } - log += `\nDate: ${date.toDateString()}`; - log += "\n========================================"; - if (!fs.existsSync(`./.tmp/error.log`)) { - fs.writeFileSync(`./.tmp/error.log`, "", "utf-8"); - } - const initialText = fs.readFileSync(`./.tmp/error.log`, "utf-8"); - fs.writeFileSync(`./.tmp/error.log`, log); - fs.appendFileSync(`./.tmp/error.log`, `\n\n\n\n\n${initialText}`); - } catch (error) { - console.log("Server Error Reporting Error:", error.message); - } -} -var init_serverError = () => { -}; - -// node_modules/mysql/lib/protocol/constants/client.js -var require_client = __commonJS((exports) => { - exports.CLIENT_LONG_PASSWORD = 1; - exports.CLIENT_FOUND_ROWS = 2; - exports.CLIENT_LONG_FLAG = 4; - exports.CLIENT_CONNECT_WITH_DB = 8; - exports.CLIENT_NO_SCHEMA = 16; - exports.CLIENT_COMPRESS = 32; - exports.CLIENT_ODBC = 64; - exports.CLIENT_LOCAL_FILES = 128; - exports.CLIENT_IGNORE_SPACE = 256; - exports.CLIENT_PROTOCOL_41 = 512; - exports.CLIENT_INTERACTIVE = 1024; - exports.CLIENT_SSL = 2048; - exports.CLIENT_IGNORE_SIGPIPE = 4096; - exports.CLIENT_TRANSACTIONS = 8192; - exports.CLIENT_RESERVED = 16384; - exports.CLIENT_SECURE_CONNECTION = 32768; - exports.CLIENT_MULTI_STATEMENTS = 65536; - exports.CLIENT_MULTI_RESULTS = 131072; - exports.CLIENT_PS_MULTI_RESULTS = 262144; - exports.CLIENT_PLUGIN_AUTH = 524288; - exports.CLIENT_SSL_VERIFY_SERVER_CERT = 1073741824; - exports.CLIENT_REMEMBER_OPTIONS = 2147483648; -}); - -// node_modules/mysql/lib/protocol/constants/charsets.js -var require_charsets = __commonJS((exports) => { - exports.BIG5_CHINESE_CI = 1; - exports.LATIN2_CZECH_CS = 2; - exports.DEC8_SWEDISH_CI = 3; - exports.CP850_GENERAL_CI = 4; - exports.LATIN1_GERMAN1_CI = 5; - exports.HP8_ENGLISH_CI = 6; - exports.KOI8R_GENERAL_CI = 7; - exports.LATIN1_SWEDISH_CI = 8; - exports.LATIN2_GENERAL_CI = 9; - exports.SWE7_SWEDISH_CI = 10; - exports.ASCII_GENERAL_CI = 11; - exports.UJIS_JAPANESE_CI = 12; - exports.SJIS_JAPANESE_CI = 13; - exports.CP1251_BULGARIAN_CI = 14; - exports.LATIN1_DANISH_CI = 15; - exports.HEBREW_GENERAL_CI = 16; - exports.TIS620_THAI_CI = 18; - exports.EUCKR_KOREAN_CI = 19; - exports.LATIN7_ESTONIAN_CS = 20; - exports.LATIN2_HUNGARIAN_CI = 21; - exports.KOI8U_GENERAL_CI = 22; - exports.CP1251_UKRAINIAN_CI = 23; - exports.GB2312_CHINESE_CI = 24; - exports.GREEK_GENERAL_CI = 25; - exports.CP1250_GENERAL_CI = 26; - exports.LATIN2_CROATIAN_CI = 27; - exports.GBK_CHINESE_CI = 28; - exports.CP1257_LITHUANIAN_CI = 29; - exports.LATIN5_TURKISH_CI = 30; - exports.LATIN1_GERMAN2_CI = 31; - exports.ARMSCII8_GENERAL_CI = 32; - exports.UTF8_GENERAL_CI = 33; - exports.CP1250_CZECH_CS = 34; - exports.UCS2_GENERAL_CI = 35; - exports.CP866_GENERAL_CI = 36; - exports.KEYBCS2_GENERAL_CI = 37; - exports.MACCE_GENERAL_CI = 38; - exports.MACROMAN_GENERAL_CI = 39; - exports.CP852_GENERAL_CI = 40; - exports.LATIN7_GENERAL_CI = 41; - exports.LATIN7_GENERAL_CS = 42; - exports.MACCE_BIN = 43; - exports.CP1250_CROATIAN_CI = 44; - exports.UTF8MB4_GENERAL_CI = 45; - exports.UTF8MB4_BIN = 46; - exports.LATIN1_BIN = 47; - exports.LATIN1_GENERAL_CI = 48; - exports.LATIN1_GENERAL_CS = 49; - exports.CP1251_BIN = 50; - exports.CP1251_GENERAL_CI = 51; - exports.CP1251_GENERAL_CS = 52; - exports.MACROMAN_BIN = 53; - exports.UTF16_GENERAL_CI = 54; - exports.UTF16_BIN = 55; - exports.UTF16LE_GENERAL_CI = 56; - exports.CP1256_GENERAL_CI = 57; - exports.CP1257_BIN = 58; - exports.CP1257_GENERAL_CI = 59; - exports.UTF32_GENERAL_CI = 60; - exports.UTF32_BIN = 61; - exports.UTF16LE_BIN = 62; - exports.BINARY = 63; - exports.ARMSCII8_BIN = 64; - exports.ASCII_BIN = 65; - exports.CP1250_BIN = 66; - exports.CP1256_BIN = 67; - exports.CP866_BIN = 68; - exports.DEC8_BIN = 69; - exports.GREEK_BIN = 70; - exports.HEBREW_BIN = 71; - exports.HP8_BIN = 72; - exports.KEYBCS2_BIN = 73; - exports.KOI8R_BIN = 74; - exports.KOI8U_BIN = 75; - exports.LATIN2_BIN = 77; - exports.LATIN5_BIN = 78; - exports.LATIN7_BIN = 79; - exports.CP850_BIN = 80; - exports.CP852_BIN = 81; - exports.SWE7_BIN = 82; - exports.UTF8_BIN = 83; - exports.BIG5_BIN = 84; - exports.EUCKR_BIN = 85; - exports.GB2312_BIN = 86; - exports.GBK_BIN = 87; - exports.SJIS_BIN = 88; - exports.TIS620_BIN = 89; - exports.UCS2_BIN = 90; - exports.UJIS_BIN = 91; - exports.GEOSTD8_GENERAL_CI = 92; - exports.GEOSTD8_BIN = 93; - exports.LATIN1_SPANISH_CI = 94; - exports.CP932_JAPANESE_CI = 95; - exports.CP932_BIN = 96; - exports.EUCJPMS_JAPANESE_CI = 97; - exports.EUCJPMS_BIN = 98; - exports.CP1250_POLISH_CI = 99; - exports.UTF16_UNICODE_CI = 101; - exports.UTF16_ICELANDIC_CI = 102; - exports.UTF16_LATVIAN_CI = 103; - exports.UTF16_ROMANIAN_CI = 104; - exports.UTF16_SLOVENIAN_CI = 105; - exports.UTF16_POLISH_CI = 106; - exports.UTF16_ESTONIAN_CI = 107; - exports.UTF16_SPANISH_CI = 108; - exports.UTF16_SWEDISH_CI = 109; - exports.UTF16_TURKISH_CI = 110; - exports.UTF16_CZECH_CI = 111; - exports.UTF16_DANISH_CI = 112; - exports.UTF16_LITHUANIAN_CI = 113; - exports.UTF16_SLOVAK_CI = 114; - exports.UTF16_SPANISH2_CI = 115; - exports.UTF16_ROMAN_CI = 116; - exports.UTF16_PERSIAN_CI = 117; - exports.UTF16_ESPERANTO_CI = 118; - exports.UTF16_HUNGARIAN_CI = 119; - exports.UTF16_SINHALA_CI = 120; - exports.UTF16_GERMAN2_CI = 121; - exports.UTF16_CROATIAN_MYSQL561_CI = 122; - exports.UTF16_UNICODE_520_CI = 123; - exports.UTF16_VIETNAMESE_CI = 124; - exports.UCS2_UNICODE_CI = 128; - exports.UCS2_ICELANDIC_CI = 129; - exports.UCS2_LATVIAN_CI = 130; - exports.UCS2_ROMANIAN_CI = 131; - exports.UCS2_SLOVENIAN_CI = 132; - exports.UCS2_POLISH_CI = 133; - exports.UCS2_ESTONIAN_CI = 134; - exports.UCS2_SPANISH_CI = 135; - exports.UCS2_SWEDISH_CI = 136; - exports.UCS2_TURKISH_CI = 137; - exports.UCS2_CZECH_CI = 138; - exports.UCS2_DANISH_CI = 139; - exports.UCS2_LITHUANIAN_CI = 140; - exports.UCS2_SLOVAK_CI = 141; - exports.UCS2_SPANISH2_CI = 142; - exports.UCS2_ROMAN_CI = 143; - exports.UCS2_PERSIAN_CI = 144; - exports.UCS2_ESPERANTO_CI = 145; - exports.UCS2_HUNGARIAN_CI = 146; - exports.UCS2_SINHALA_CI = 147; - exports.UCS2_GERMAN2_CI = 148; - exports.UCS2_CROATIAN_MYSQL561_CI = 149; - exports.UCS2_UNICODE_520_CI = 150; - exports.UCS2_VIETNAMESE_CI = 151; - exports.UCS2_GENERAL_MYSQL500_CI = 159; - exports.UTF32_UNICODE_CI = 160; - exports.UTF32_ICELANDIC_CI = 161; - exports.UTF32_LATVIAN_CI = 162; - exports.UTF32_ROMANIAN_CI = 163; - exports.UTF32_SLOVENIAN_CI = 164; - exports.UTF32_POLISH_CI = 165; - exports.UTF32_ESTONIAN_CI = 166; - exports.UTF32_SPANISH_CI = 167; - exports.UTF32_SWEDISH_CI = 168; - exports.UTF32_TURKISH_CI = 169; - exports.UTF32_CZECH_CI = 170; - exports.UTF32_DANISH_CI = 171; - exports.UTF32_LITHUANIAN_CI = 172; - exports.UTF32_SLOVAK_CI = 173; - exports.UTF32_SPANISH2_CI = 174; - exports.UTF32_ROMAN_CI = 175; - exports.UTF32_PERSIAN_CI = 176; - exports.UTF32_ESPERANTO_CI = 177; - exports.UTF32_HUNGARIAN_CI = 178; - exports.UTF32_SINHALA_CI = 179; - exports.UTF32_GERMAN2_CI = 180; - exports.UTF32_CROATIAN_MYSQL561_CI = 181; - exports.UTF32_UNICODE_520_CI = 182; - exports.UTF32_VIETNAMESE_CI = 183; - exports.UTF8_UNICODE_CI = 192; - exports.UTF8_ICELANDIC_CI = 193; - exports.UTF8_LATVIAN_CI = 194; - exports.UTF8_ROMANIAN_CI = 195; - exports.UTF8_SLOVENIAN_CI = 196; - exports.UTF8_POLISH_CI = 197; - exports.UTF8_ESTONIAN_CI = 198; - exports.UTF8_SPANISH_CI = 199; - exports.UTF8_SWEDISH_CI = 200; - exports.UTF8_TURKISH_CI = 201; - exports.UTF8_CZECH_CI = 202; - exports.UTF8_DANISH_CI = 203; - exports.UTF8_LITHUANIAN_CI = 204; - exports.UTF8_SLOVAK_CI = 205; - exports.UTF8_SPANISH2_CI = 206; - exports.UTF8_ROMAN_CI = 207; - exports.UTF8_PERSIAN_CI = 208; - exports.UTF8_ESPERANTO_CI = 209; - exports.UTF8_HUNGARIAN_CI = 210; - exports.UTF8_SINHALA_CI = 211; - exports.UTF8_GERMAN2_CI = 212; - exports.UTF8_CROATIAN_MYSQL561_CI = 213; - exports.UTF8_UNICODE_520_CI = 214; - exports.UTF8_VIETNAMESE_CI = 215; - exports.UTF8_GENERAL_MYSQL500_CI = 223; - exports.UTF8MB4_UNICODE_CI = 224; - exports.UTF8MB4_ICELANDIC_CI = 225; - exports.UTF8MB4_LATVIAN_CI = 226; - exports.UTF8MB4_ROMANIAN_CI = 227; - exports.UTF8MB4_SLOVENIAN_CI = 228; - exports.UTF8MB4_POLISH_CI = 229; - exports.UTF8MB4_ESTONIAN_CI = 230; - exports.UTF8MB4_SPANISH_CI = 231; - exports.UTF8MB4_SWEDISH_CI = 232; - exports.UTF8MB4_TURKISH_CI = 233; - exports.UTF8MB4_CZECH_CI = 234; - exports.UTF8MB4_DANISH_CI = 235; - exports.UTF8MB4_LITHUANIAN_CI = 236; - exports.UTF8MB4_SLOVAK_CI = 237; - exports.UTF8MB4_SPANISH2_CI = 238; - exports.UTF8MB4_ROMAN_CI = 239; - exports.UTF8MB4_PERSIAN_CI = 240; - exports.UTF8MB4_ESPERANTO_CI = 241; - exports.UTF8MB4_HUNGARIAN_CI = 242; - exports.UTF8MB4_SINHALA_CI = 243; - exports.UTF8MB4_GERMAN2_CI = 244; - exports.UTF8MB4_CROATIAN_MYSQL561_CI = 245; - exports.UTF8MB4_UNICODE_520_CI = 246; - exports.UTF8MB4_VIETNAMESE_CI = 247; - exports.UTF8_GENERAL50_CI = 253; - exports.ARMSCII8 = exports.ARMSCII8_GENERAL_CI; - exports.ASCII = exports.ASCII_GENERAL_CI; - exports.BIG5 = exports.BIG5_CHINESE_CI; - exports.BINARY = exports.BINARY; - exports.CP1250 = exports.CP1250_GENERAL_CI; - exports.CP1251 = exports.CP1251_GENERAL_CI; - exports.CP1256 = exports.CP1256_GENERAL_CI; - exports.CP1257 = exports.CP1257_GENERAL_CI; - exports.CP866 = exports.CP866_GENERAL_CI; - exports.CP850 = exports.CP850_GENERAL_CI; - exports.CP852 = exports.CP852_GENERAL_CI; - exports.CP932 = exports.CP932_JAPANESE_CI; - exports.DEC8 = exports.DEC8_SWEDISH_CI; - exports.EUCJPMS = exports.EUCJPMS_JAPANESE_CI; - exports.EUCKR = exports.EUCKR_KOREAN_CI; - exports.GB2312 = exports.GB2312_CHINESE_CI; - exports.GBK = exports.GBK_CHINESE_CI; - exports.GEOSTD8 = exports.GEOSTD8_GENERAL_CI; - exports.GREEK = exports.GREEK_GENERAL_CI; - exports.HEBREW = exports.HEBREW_GENERAL_CI; - exports.HP8 = exports.HP8_ENGLISH_CI; - exports.KEYBCS2 = exports.KEYBCS2_GENERAL_CI; - exports.KOI8R = exports.KOI8R_GENERAL_CI; - exports.KOI8U = exports.KOI8U_GENERAL_CI; - exports.LATIN1 = exports.LATIN1_SWEDISH_CI; - exports.LATIN2 = exports.LATIN2_GENERAL_CI; - exports.LATIN5 = exports.LATIN5_TURKISH_CI; - exports.LATIN7 = exports.LATIN7_GENERAL_CI; - exports.MACCE = exports.MACCE_GENERAL_CI; - exports.MACROMAN = exports.MACROMAN_GENERAL_CI; - exports.SJIS = exports.SJIS_JAPANESE_CI; - exports.SWE7 = exports.SWE7_SWEDISH_CI; - exports.TIS620 = exports.TIS620_THAI_CI; - exports.UCS2 = exports.UCS2_GENERAL_CI; - exports.UJIS = exports.UJIS_JAPANESE_CI; - exports.UTF16 = exports.UTF16_GENERAL_CI; - exports.UTF16LE = exports.UTF16LE_GENERAL_CI; - exports.UTF8 = exports.UTF8_GENERAL_CI; - exports.UTF8MB4 = exports.UTF8MB4_GENERAL_CI; - exports.UTF32 = exports.UTF32_GENERAL_CI; -}); - -// node_modules/mysql/lib/protocol/constants/ssl_profiles.js -var require_ssl_profiles = __commonJS((exports) => { - exports["Amazon RDS"] = { - ca: [ - "-----BEGIN CERTIFICATE-----\n" + "MIIDQzCCAqygAwIBAgIJAOd1tlfiGoEoMA0GCSqGSIb3DQEBBQUAMHUxCzAJBgNV\n" + "BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdTZWF0dGxlMRMw\n" + "EQYDVQQKEwpBbWF6b24uY29tMQwwCgYDVQQLEwNSRFMxHDAaBgNVBAMTE2F3cy5h\n" + "bWF6b24uY29tL3Jkcy8wHhcNMTAwNDA1MjI0NDMxWhcNMTUwNDA0MjI0NDMxWjB1\n" + "MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHU2Vh\n" + "dHRsZTETMBEGA1UEChMKQW1hem9uLmNvbTEMMAoGA1UECxMDUkRTMRwwGgYDVQQD\n" + "ExNhd3MuYW1hem9uLmNvbS9yZHMvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\n" + "gQDKhXGU7tizxUR5WaFoMTFcxNxa05PEjZaIOEN5ctkWrqYSRov0/nOMoZjqk8bC\n" + "med9vPFoQGD0OTakPs0jVe3wwmR735hyVwmKIPPsGlaBYj1O6llIpZeQVyupNx56\n" + "UzqtiLaDzh1KcmfqP3qP2dInzBfJQKjiRudo1FWnpPt33QIDAQABo4HaMIHXMB0G\n" + "A1UdDgQWBBT/H3x+cqSkR/ePSIinPtc4yWKe3DCBpwYDVR0jBIGfMIGcgBT/H3x+\n" + "cqSkR/ePSIinPtc4yWKe3KF5pHcwdTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh\n" + "c2hpbmd0b24xEDAOBgNVBAcTB1NlYXR0bGUxEzARBgNVBAoTCkFtYXpvbi5jb20x\n" + "DDAKBgNVBAsTA1JEUzEcMBoGA1UEAxMTYXdzLmFtYXpvbi5jb20vcmRzL4IJAOd1\n" + "tlfiGoEoMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAvguZy/BDT66x\n" + "GfgnJlyQwnFSeVLQm9u/FIvz4huGjbq9dqnD6h/Gm56QPFdyMEyDiZWaqY6V08lY\n" + "LTBNb4kcIc9/6pc0/ojKciP5QJRm6OiZ4vgG05nF4fYjhU7WClUx7cxq1fKjNc2J\n" + "UCmmYqgiVkAGWRETVo+byOSDZ4swb10=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID9DCCAtygAwIBAgIBQjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUwOTExMzFaFw0y\n" + "MDAzMDUwOTExMzFaMIGKMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEbMBkGA1UEAwwSQW1hem9uIFJE\n" + "UyBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuD8nrZ8V\n" + "u+VA8yVlUipCZIKPTDcOILYpUe8Tct0YeQQr0uyl018StdBsa3CjBgvwpDRq1HgF\n" + "Ji2N3+39+shCNspQeE6aYU+BHXhKhIIStt3r7gl/4NqYiDDMWKHxHq0nsGDFfArf\n" + "AOcjZdJagOMqb3fF46flc8k2E7THTm9Sz4L7RY1WdABMuurpICLFE3oHcGdapOb9\n" + "T53pQR+xpHW9atkcf3pf7gbO0rlKVSIoUenBlZipUlp1VZl/OD/E+TtRhDDNdI2J\n" + "P/DSMM3aEsq6ZQkfbz/Ilml+Lx3tJYXUDmp+ZjzMPLk/+3beT8EhrwtcG3VPpvwp\n" + "BIOqsqVVTvw/CwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw\n" + "AwEB/zAdBgNVHQ4EFgQUTgLurD72FchM7Sz1BcGPnIQISYMwHwYDVR0jBBgwFoAU\n" + "TgLurD72FchM7Sz1BcGPnIQISYMwDQYJKoZIhvcNAQEFBQADggEBAHZcgIio8pAm\n" + "MjHD5cl6wKjXxScXKtXygWH2BoDMYBJF9yfyKO2jEFxYKbHePpnXB1R04zJSWAw5\n" + "2EUuDI1pSBh9BA82/5PkuNlNeSTB3dXDD2PEPdzVWbSKvUB8ZdooV+2vngL0Zm4r\n" + "47QPyd18yPHrRIbtBtHR/6CwKevLZ394zgExqhnekYKIqqEX41xsUV0Gm6x4vpjf\n" + "2u6O/+YE2U+qyyxHE5Wd5oqde0oo9UUpFETJPVb6Q2cEeQib8PBAyi0i6KnF+kIV\n" + "A9dY7IHSubtCK/i8wxMVqfd5GtbA8mmpeJFwnDvm9rBEsHybl08qlax9syEwsUYr\n" + "/40NawZfTUU=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\n" + "VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n" + "MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n" + "em9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkw\n" + "ODIyMTcwODUwWhcNMjQwODIyMTcwODUwWjCBjzELMAkGA1UEBhMCVVMxEDAOBgNV\n" + "BAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFtYXpv\n" + "biBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIDAeBgNV\n" + "BAMMF0FtYXpvbiBSRFMgUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" + "AQ8AMIIBCgKCAQEArXnF/E6/Qh+ku3hQTSKPMhQQlCpoWvnIthzX6MK3p5a0eXKZ\n" + "oWIjYcNNG6UwJjp4fUXl6glp53Jobn+tWNX88dNH2n8DVbppSwScVE2LpuL+94vY\n" + "0EYE/XxN7svKea8YvlrqkUBKyxLxTjh+U/KrGOaHxz9v0l6ZNlDbuaZw3qIWdD/I\n" + "6aNbGeRUVtpM6P+bWIoxVl/caQylQS6CEYUk+CpVyJSkopwJlzXT07tMoDL5WgX9\n" + "O08KVgDNz9qP/IGtAcRduRcNioH3E9v981QO1zt/Gpb2f8NqAjUUCUZzOnij6mx9\n" + "McZ+9cWX88CRzR0vQODWuZscgI08NvM69Fn2SQIDAQABo2MwYTAOBgNVHQ8BAf8E\n" + "BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUc19g2LzLA5j0Kxc0LjZa\n" + "pmD/vB8wHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJKoZIhvcN\n" + "AQELBQADggEBAHAG7WTmyjzPRIM85rVj+fWHsLIvqpw6DObIjMWokpliCeMINZFV\n" + "ynfgBKsf1ExwbvJNzYFXW6dihnguDG9VMPpi2up/ctQTN8tm9nDKOy08uNZoofMc\n" + "NUZxKCEkVKZv+IL4oHoeayt8egtv3ujJM6V14AstMQ6SwvwvA93EP/Ug2e4WAXHu\n" + "cbI1NAbUgVDqp+DRdfvZkgYKryjTWd/0+1fS8X1bBZVWzl7eirNVnHbSH2ZDpNuY\n" + "0SBd8dj5F6ld3t58ydZbrTHze7JJOd8ijySAp4/kiu9UfZWuTPABzDa/DSdz9Dk/\n" + "zPW4CXXvhLmE02TA9/HeCw3KEHIwicNuEfw=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEATCCAumgAwIBAgIBRDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMDZaFw0y\n" + "MDAzMDUyMjAzMDZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\n" + "UyBhcC1ub3J0aGVhc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" + "ggEBAMmM2B4PfTXCZjbZMWiDPyxvk/eeNwIRJAhfzesiGUiLozX6CRy3rwC1ZOPV\n" + "AcQf0LB+O8wY88C/cV+d4Q2nBDmnk+Vx7o2MyMh343r5rR3Na+4izd89tkQVt0WW\n" + "vO21KRH5i8EuBjinboOwAwu6IJ+HyiQiM0VjgjrmEr/YzFPL8MgHD/YUHehqjACn\n" + "C0+B7/gu7W4qJzBL2DOf7ub2qszGtwPE+qQzkCRDwE1A4AJmVE++/FLH2Zx78Egg\n" + "fV1sUxPtYgjGH76VyyO6GNKM6rAUMD/q5mnPASQVIXgKbupr618bnH+SWHFjBqZq\n" + "HvDGPMtiiWII41EmGUypyt5AbysCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\n" + "A1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIiKM0Q6n1K4EmLxs3ZXxINbwEwR\n" + "MB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\n" + "A4IBAQBezGbE9Rw/k2e25iGjj5n8r+M3dlye8ORfCE/dijHtxqAKasXHgKX8I9Tw\n" + "JkBiGWiuzqn7gO5MJ0nMMro1+gq29qjZnYX1pDHPgsRjUX8R+juRhgJ3JSHijRbf\n" + "4qNJrnwga7pj94MhcLq9u0f6dxH6dXbyMv21T4TZMTmcFduf1KgaiVx1PEyJjC6r\n" + "M+Ru+A0eM+jJ7uCjUoZKcpX8xkj4nmSnz9NMPog3wdOSB9cAW7XIc5mHa656wr7I\n" + "WJxVcYNHTXIjCcng2zMKd1aCcl2KSFfy56sRfT7J5Wp69QSr+jq8KM55gw8uqAwi\n" + "VPrXn2899T1rcTtFYFP16WXjGuc0\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEATCCAumgAwIBAgIBTDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTExMDYwMDA1NDZaFw0y\n" + "MDAzMDUwMDA1NDZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\n" + "UyBhcC1ub3J0aGVhc3QtMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" + "ggEBAKSwd+RVUzTRH0FgnbwoTK8TMm/zMT4+2BvALpAUe6YXbkisg2goycWuuWLg\n" + "jOpFBB3GtyvXZnkqi7MkDWUmj1a2kf8l2oLyoaZ+Hm9x/sV+IJzOqPvj1XVUGjP6\n" + "yYYnPJmUYqvZeI7fEkIGdFkP2m4/sgsSGsFvpD9FK1bL1Kx2UDpYX0kHTtr18Zm/\n" + "1oN6irqWALSmXMDydb8hE0FB2A1VFyeKE6PnoDj/Y5cPHwPPdEi6/3gkDkSaOG30\n" + "rWeQfL3pOcKqzbHaWTxMphd0DSL/quZ64Nr+Ly65Q5PRcTrtr55ekOUziuqXwk+o\n" + "9QpACMwcJ7ROqOznZTqTzSFVXFECAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\n" + "A1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFM6Nox/QWbhzWVvzoJ/y0kGpNPK+\n" + "MB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\n" + "A4IBAQCTkWBqNvyRf3Y/W21DwFx3oT/AIWrHt0BdGZO34tavummXemTH9LZ/mqv9\n" + "aljt6ZuDtf5DEQjdsAwXMsyo03ffnP7doWm8iaF1+Mui77ot0TmTsP/deyGwukvJ\n" + "tkxX8bZjDh+EaNauWKr+CYnniNxCQLfFtXYJsfOdVBzK3xNL+Z3ucOQRhr2helWc\n" + "CDQgwfhP1+3pRVKqHvWCPC4R3fT7RZHuRmZ38kndv476GxRntejh+ePffif78bFI\n" + "3rIZCPBGobrrUMycafSbyXteoGca/kA+/IqrAPlk0pWQ4aEL0yTWN2h2dnjoD7oX\n" + "byIuL/g9AGRh97+ssn7D6bDRPTbW\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEATCCAumgAwIBAgIBRTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMTlaFw0y\n" + "MDAzMDUyMjAzMTlaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\n" + "UyBhcC1zb3V0aGVhc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" + "ggEBANaXElmSEYt/UtxHFsARFhSUahTf1KNJzR0Dmay6hqOXQuRVbKRwPd19u5vx\n" + "DdF1sLT7D69IK3VDnUiQScaCv2Dpu9foZt+rLx+cpx1qiQd1UHrvqq8xPzQOqCdC\n" + "RFStq6yVYZ69yfpfoI67AjclMOjl2Vph3ftVnqP0IgVKZdzeC7fd+umGgR9xY0Qr\n" + "Ubhd/lWdsbNvzK3f1TPWcfIKQnpvSt85PIEDJir6/nuJUKMtmJRwTymJf0i+JZ4x\n" + "7dJa341p2kHKcHMgOPW7nJQklGBA70ytjUV6/qebS3yIugr/28mwReflg3TJzVDl\n" + "EOvi6pqbqNbkMuEwGDCmEQIVqgkCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\n" + "A1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAu93/4k5xbWOsgdCdn+/KdiRuit\n" + "MB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\n" + "A4IBAQBlcjSyscpPjf5+MgzMuAsCxByqUt+WFspwcMCpwdaBeHOPSQrXNqX2Sk6P\n" + "kth6oCivA64trWo8tFMvPYlUA1FYVD5WpN0kCK+P5pD4KHlaDsXhuhClJzp/OP8t\n" + "pOyUr5109RHLxqoKB5J5m1XA7rgcFjnMxwBSWFe3/4uMk/+4T53YfCVXuc6QV3i7\n" + "I/2LAJwFf//pTtt6fZenYfCsahnr2nvrNRNyAxcfvGZ/4Opn/mJtR6R/AjvQZHiR\n" + "bkRNKF2GW0ueK5W4FkZVZVhhX9xh1Aj2Ollb+lbOqADaVj+AT3PoJPZ3MPQHKCXm\n" + "xwG0LOLlRr/TfD6li1AfOVTAJXv9\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEATCCAumgAwIBAgIBRjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMjRaFw0y\n" + "MDAzMDUyMjAzMjRaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\n" + "UyBhcC1zb3V0aGVhc3QtMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" + "ggEBAJqBAJutz69hFOh3BtLHZTbwE8eejGGKayn9hu98YMDPzWzGXWCmW+ZYWELA\n" + "cY3cNWNF8K4FqKXFr2ssorBYim1UtYFX8yhydT2hMD5zgQ2sCGUpuidijuPA6zaq\n" + "Z3tdhVR94f0q8mpwpv2zqR9PcqaGDx2VR1x773FupRPRo7mEW1vC3IptHCQlP/zE\n" + "7jQiLl28bDIH2567xg7e7E9WnZToRnhlYdTaDaJsHTzi5mwILi4cihSok7Shv/ME\n" + "hnukvxeSPUpaVtFaBhfBqq055ePq9I+Ns4KGreTKMhU0O9fkkaBaBmPaFgmeX/XO\n" + "n2AX7gMouo3mtv34iDTZ0h6YCGkCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\n" + "A1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIlQnY0KHYWn1jYumSdJYfwj/Nfw\n" + "MB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\n" + "A4IBAQA0wVU6/l41cTzHc4azc4CDYY2Wd90DFWiH9C/mw0SgToYfCJ/5Cfi0NT/Y\n" + "PRnk3GchychCJgoPA/k9d0//IhYEAIiIDjyFVgjbTkKV3sh4RbdldKVOUB9kumz/\n" + "ZpShplsGt3z4QQiVnKfrAgqxWDjR0I0pQKkxXa6Sjkicos9LQxVtJ0XA4ieG1E7z\n" + "zJr+6t80wmzxvkInSaWP3xNJK9azVRTrgQZQlvkbpDbExl4mNTG66VD3bAp6t3Wa\n" + "B49//uDdfZmPkqqbX+hsxp160OH0rxJppwO3Bh869PkDnaPEd/Pxw7PawC+li0gi\n" + "NRV8iCEx85aFxcyOhqn0WZOasxee\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/zCCAuegAwIBAgIBRzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMzFaFw0y\n" + "MDAzMDUyMjAzMzFaMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEjMCEGA1UEAwwaQW1hem9uIFJE\n" + "UyBldS1jZW50cmFsLTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\n" + "AQDFtP2dhSLuaPOI4ZrrPWsK4OY9ocQBp3yApH1KJYmI9wpQKZG/KCH2E6Oo7JAw\n" + "QORU519r033T+FO2Z7pFPlmz1yrxGXyHpJs8ySx3Yo5S8ncDCdZJCLmtPiq/hahg\n" + "5/0ffexMFUCQaYicFZsrJ/cStdxUV+tSw2JQLD7UxS9J97LQWUPyyG+ZrjYVTVq+\n" + "zudnFmNSe4QoecXMhAFTGJFQXxP7nhSL9Ao5FGgdXy7/JWeWdQIAj8ku6cBDKPa6\n" + "Y6kP+ak+In+Lye8z9qsCD/afUozfWjPR2aA4JoIZVF8dNRShIMo8l0XfgfM2q0+n\n" + "ApZWZ+BjhIO5XuoUgHS3D2YFAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNV\n" + "HRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRm4GsWIA/M6q+tK8WGHWDGh2gcyTAf\n" + "BgNVHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOC\n" + "AQEAHpMmeVQNqcxgfQdbDIi5UIy+E7zZykmtAygN1XQrvga9nXTis4kOTN6g5/+g\n" + "HCx7jIXeNJzAbvg8XFqBN84Quqgpl/tQkbpco9Jh1HDs558D5NnZQxNqH5qXQ3Mm\n" + "uPgCw0pYcPOa7bhs07i+MdVwPBsX27CFDtsgAIru8HvKxY1oTZrWnyIRo93tt/pk\n" + "WuItVMVHjaQZVfTCow0aDUbte6Vlw82KjUFq+n2NMSCJDiDKsDDHT6BJc4AJHIq3\n" + "/4Z52MSC9KMr0yAaaoWfW/yMEj9LliQauAgwVjArF4q78rxpfKTG9Rfd8U1BZANP\n" + "7FrFMN0ThjfA1IvmOYcgskY5bQ==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBSDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzMzVaFw0y\n" + "MDAzMDUyMjAzMzVaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyBldS13ZXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx\n" + "PdbqQ0HKRj79Pmocxvjc+P6i4Ux24kgFIl+ckiir1vzkmesc3a58gjrMlCksEObt\n" + "Yihs5IhzEq1ePT0gbfS9GYFp34Uj/MtPwlrfCBWG4d2TcrsKRHr1/EXUYhWqmdrb\n" + "RhX8XqoRhVkbF/auzFSBhTzcGGvZpQ2KIaxRcQfcXlMVhj/pxxAjh8U4F350Fb0h\n" + "nX1jw4/KvEreBL0Xb2lnlGTkwVxaKGSgXEnOgIyOFdOQc61vdome0+eeZsP4jqeR\n" + "TGYJA9izJsRbe2YJxHuazD+548hsPlM3vFzKKEVURCha466rAaYAHy3rKur3HYQx\n" + "Yt+SoKcEz9PXuSGj96ejAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBTebg//h2oeXbZjQ4uuoiuLYzuiPDAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\n" + "TikPaGeZasTPw+4RBemlsyPAjtFFQLo7ddaFdORLgdEysVf8aBqndvbA6MT/v4lj\n" + "GtEtUdF59ZcbWOrVm+fBZ2h/jYJ59dYF/xzb09nyRbdMSzB9+mkSsnOMqluq5y8o\n" + "DY/PfP2vGhEg/2ZncRC7nlQU1Dm8F4lFWEiQ2fi7O1cW852Vmbq61RIfcYsH/9Ma\n" + "kpgk10VZ75b8m3UhmpZ/2uRY+JEHImH5WpcTJ7wNiPNJsciZMznGtrgOnPzYco8L\n" + "cDleOASIZifNMQi9PKOJKvi0ITz0B/imr8KBsW0YjZVJ54HMa7W1lwugSM7aMAs+\n" + "E3Sd5lS+SHwWaOCHwhOEVA==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBSTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzNDBaFw0y\n" + "MDAzMDUyMjAzNDBaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyBzYS1lYXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCU\n" + "X4OBnQ5xA6TLJAiFEI6l7bUWjoVJBa/VbMdCCSs2i2dOKmqUaXu2ix2zcPILj3lZ\n" + "GMk3d/2zvTK/cKhcFrewHUBamTeVHdEmynhMQamqNmkM4ptYzFcvEUw1TGxHT4pV\n" + "Q6gSN7+/AJewQvyHexHo8D0+LDN0/Wa9mRm4ixCYH2CyYYJNKaZt9+EZfNu+PPS4\n" + "8iB0TWH0DgQkbWMBfCRgolLLitAZklZ4dvdlEBS7evN1/7ttBxUK6SvkeeSx3zBl\n" + "ww3BlXqc3bvTQL0A+RRysaVyFbvtp9domFaDKZCpMmDFAN/ntx215xmQdrSt+K3F\n" + "cXdGQYHx5q410CAclGnbAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBT6iVWnm/uakS+tEX2mzIfw+8JL0zAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\n" + "FmDD+QuDklXn2EgShwQxV13+txPRuVdOSrutHhoCgMwFWCMtPPtBAKs6KPY7Guvw\n" + "DpJoZSehDiOfsgMirjOWjvfkeWSNvKfjWTVneX7pZD9W5WPnsDBvTbCGezm+v87z\n" + "b+ZM2ZMo98m/wkMcIEAgdSKilR2fuw8rLkAjhYFfs0A7tDgZ9noKwgHvoE4dsrI0\n" + "KZYco6DlP/brASfHTPa2puBLN9McK3v+h0JaSqqm5Ro2Bh56tZkQh8AWy/miuDuK\n" + "3+hNEVdxosxlkM1TPa1DGj0EzzK0yoeerXuH2HX7LlCrrxf6/wdKnjR12PMrLQ4A\n" + "pCqkcWw894z6bV9MAvKe6A==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBQzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMTU0MDRaFw0y\n" + "MDAzMDUyMTU0MDRaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyB1cy1lYXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDI\n" + "UIuwh8NusKHk1SqPXcP7OqxY3S/M2ZyQWD3w7Bfihpyyy/fc1w0/suIpX3kbMhAV\n" + "2ESwged2/2zSx4pVnjp/493r4luhSqQYzru78TuPt9bhJIJ51WXunZW2SWkisSaf\n" + "USYUzVN9ezR/bjXTumSUQaLIouJt3OHLX49s+3NAbUyOI8EdvgBQWD68H1epsC0n\n" + "CI5s+pIktyOZ59c4DCDLQcXErQ+tNbDC++oct1ANd/q8p9URonYwGCGOBy7sbCYq\n" + "9eVHh1Iy2M+SNXddVOGw5EuruvHoCIQyOz5Lz4zSuZA9dRbrfztNOpezCNYu6NKM\n" + "n+hzcvdiyxv77uNm8EaxAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBQSQG3TmMe6Sa3KufaPBa72v4QFDzAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\n" + "L/mOZfB3187xTmjOHMqN2G2oSKHBKiQLM9uv8+97qT+XR+TVsBT6b3yoPpMAGhHA\n" + "Pc7nxAF5gPpuzatx0OTLPcmYucFmfqT/1qA5WlgCnMNtczyNMH97lKFTNV7Njtek\n" + "jWEzAEQSyEWrkNpNlC4j6kMYyPzVXQeXUeZTgJ9FNnVZqmvfjip2N22tawMjrCn5\n" + "7KN/zN65EwY2oO9XsaTwwWmBu3NrDdMbzJnbxoWcFWj4RBwanR1XjQOVNhDwmCOl\n" + "/1Et13b8CPyj69PC8BOVU6cfTSx8WUVy0qvYOKHNY9Bqa5BDnIL3IVmUkeTlM1mt\n" + "enRpyBj+Bk9rh/ICdiRKmA==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBSjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzNDVaFw0y\n" + "MDAzMDUyMjAzNDVaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyB1cy13ZXN0LTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDE\n" + "Dhw+uw/ycaiIhhyu2pXFRimq0DlB8cNtIe8hdqndH8TV/TFrljNgR8QdzOgZtZ9C\n" + "zzQ2GRpInN/qJF6slEd6wO+6TaDBQkPY+07TXNt52POFUhdVkhJXHpE2BS7Xn6J7\n" + "7RFAOeG1IZmc2DDt+sR1BgXzUqHslQGfFYNS0/MBO4P+ya6W7IhruB1qfa4HiYQS\n" + "dbe4MvGWnv0UzwAqdR7OF8+8/5c58YXZIXCO9riYF2ql6KNSL5cyDPcYK5VK0+Q9\n" + "VI6vuJHSMYcF7wLePw8jtBktqAFE/wbdZiIHhZvNyiNWPPNTGUmQbaJ+TzQEHDs5\n" + "8en+/W7JKnPyBOkxxENbAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBS0nw/tFR9bCjgqWTPJkyy4oOD8bzAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\n" + "CXGAY3feAak6lHdqj6+YWjy6yyUnLK37bRxZDsyDVXrPRQaXRzPTzx79jvDwEb/H\n" + "Q/bdQ7zQRWqJcbivQlwhuPJ4kWPUZgSt3JUUuqkMsDzsvj/bwIjlrEFDOdHGh0mi\n" + "eVIngFEjUXjMh+5aHPEF9BlQnB8LfVtKj18e15UDTXFa+xJPFxUR7wDzCfo4WI1m\n" + "sUMG4q1FkGAZgsoyFPZfF8IVvgCuGdR8z30VWKklFxttlK0eGLlPAyIO0CQxPQlo\n" + "saNJrHf4tLOgZIWk+LpDhNd9Et5EzvJ3aURUsKY4pISPPF5WdvM9OE59bERwUErd\n" + "nuOuQWQeeadMceZnauRzJQ==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBSzANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNTAyMDUyMjAzNTBaFw0y\n" + "MDAzMDUyMjAzNTBaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyB1cy13ZXN0LTIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDM\n" + "H58SR48U6jyERC1vYTnub34smf5EQVXyzaTmspWGWGzT31NLNZGSDFaa7yef9kdO\n" + "mzJsgebR5tXq6LdwlIoWkKYQ7ycUaadtVKVYdI40QcI3cHn0qLFlg2iBXmWp/B+i\n" + "Z34VuVlCh31Uj5WmhaBoz8t/GRqh1V/aCsf3Wc6jCezH3QfuCjBpzxdOOHN6Ie2v\n" + "xX09O5qmZTvMoRBAvPkxdaPg/Mi7fxueWTbEVk78kuFbF1jHYw8U1BLILIAhcqlq\n" + "x4u8nl73t3O3l/soNUcIwUDK0/S+Kfqhwn9yQyPlhb4Wy3pfnZLJdkyHldktnQav\n" + "9TB9u7KH5Lk0aAYslMLxAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBT8roM4lRnlFHWMPWRz0zkwFZog1jAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQUFAAOCAQEA\n" + "JwrxwgwmPtcdaU7O7WDdYa4hprpOMamI49NDzmE0s10oGrqmLwZygcWU0jT+fJ+Y\n" + "pJe1w0CVfKaeLYNsOBVW3X4ZPmffYfWBheZiaiEflq/P6t7/Eg81gaKYnZ/x1Dfa\n" + "sUYkzPvCkXe9wEz5zdUTOCptDt89rBR9CstL9vE7WYUgiVVmBJffWbHQLtfjv6OF\n" + "NMb0QME981kGRzc2WhgP71YS2hHd1kXtsoYP1yTu4vThSKsoN4bkiHsaC1cRkLoy\n" + "0fFA4wpB3WloMEvCDaUvvH1LZlBXTNlwi9KtcwD4tDxkkBt4tQczKLGpQ/nF/W9n\n" + "8YDWk3IIc1sd0bkZqoau2Q==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/TCCAuWgAwIBAgIBTTANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjA1MDMyMTI5MjJaFw0y\n" + "MDAzMDUyMTI5MjJaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UEAwwYQW1hem9uIFJE\n" + "UyBhcC1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n" + "06eWGLE0TeqL9kyWOLkS8q0fXO97z+xyBV3DKSB2lg2GkgBz3B98MkmkeB0SZy3G\n" + "Ce4uCpCPbFKiFEdiUclOlhZsrBuCeaimxLM3Ig2wuenElO/7TqgaYHYUbT3d+VQW\n" + "GUbLn5GRZJZe1OAClYdOWm7A1CKpuo+cVV1vxbY2nGUQSJPpVn2sT9gnwvjdE60U\n" + "JGYU/RLCTm8zmZBvlWaNIeKDnreIc4rKn6gUnJ2cQn1ryCVleEeyc3xjYDSrjgdn\n" + "FLYGcp9mphqVT0byeQMOk0c7RHpxrCSA0V5V6/CreFV2LteK50qcDQzDSM18vWP/\n" + "p09FoN8O7QrtOeZJzH/lmwIDAQABo2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0T\n" + "AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU2i83QHuEl/d0keXF+69HNJph7cMwHwYD\n" + "VR0jBBgwFoAUTgLurD72FchM7Sz1BcGPnIQISYMwDQYJKoZIhvcNAQELBQADggEB\n" + "ACqnH2VjApoDqoSQOky52QBwsGaj+xWYHW5Gm7EvCqvQuhWMkeBuD6YJmMvNyA9G\n" + "I2lh6/o+sUk/RIsbYbxPRdhNPTOgDR9zsNRw6qxaHztq/CEC+mxDCLa3O1hHBaDV\n" + "BmB3nCZb93BvO0EQSEk7aytKq/f+sjyxqOcs385gintdHGU9uM7gTZHnU9vByJsm\n" + "/TL07Miq67X0NlhIoo3jAk+xHaeKJdxdKATQp0448P5cY20q4b8aMk1twcNaMvCP\n" + "dG4M5doaoUA8OQ/0ukLLae/LBxLeTw04q1/a2SyFaVUX2Twbb1S3xVWwLA8vsyGr\n" + "igXx7B5GgP+IHb6DTjPJAi0=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBTjANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjA4MTExOTU4NDVaFw0y\n" + "MDAzMDUxOTU4NDVaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyB1cy1lYXN0LTIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCp\n" + "WnnUX7wM0zzstccX+4iXKJa9GR0a2PpvB1paEX4QRCgfhEdQWDaSqyrWNgdVCKkt\n" + "1aQkWu5j6VAC2XIG7kKoonm1ZdBVyBLqW5lXNywlaiU9yhJkwo8BR+/OqgE+PLt/\n" + "EO1mlN0PQudja/XkExCXTO29TG2j7F/O7hox6vTyHNHc0H88zS21uPuBE+jivViS\n" + "yzj/BkyoQ85hnkues3f9R6gCGdc+J51JbZnmgzUkvXjAEuKhAm9JksVOxcOKUYe5\n" + "ERhn0U9zjzpfbAITIkul97VVa5IxskFFTHIPJbvRKHJkiF6wTJww/tc9wm+fSCJ1\n" + "+DbQTGZgkQ3bJrqRN29/AgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBSAHQzUYYZbepwKEMvGdHp8wzHnfDAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOCAQEA\n" + "MbaEzSYZ+aZeTBxf8yi0ta8K4RdwEJsEmP6IhFFQHYUtva2Cynl4Q9tZg3RMsybT\n" + "9mlnSQQlbN/wqIIXbkrcgFcHoXG9Odm/bDtUwwwDaiEhXVfeQom3G77QHOWMTCGK\n" + "qadwuh5msrb17JdXZoXr4PYHDKP7j0ONfAyFNER2+uecblHfRSpVq5UeF3L6ZJb8\n" + "fSw/GtAV6an+/0r+Qm+PiI2H5XuZ4GmRJYnGMhqWhBYrY7p3jtVnKcsh39wgfUnW\n" + "AvZEZG/yhFyAZW0Essa39LiL5VSq14Y1DOj0wgnhSY/9WHxaAo1HB1T9OeZknYbD\n" + "fl/EGSZ0TEvZkENrXcPlVA==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/zCCAuegAwIBAgIBTzANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjA5MTUwMDEwMTFaFw0y\n" + "MDAzMDUwMDEwMTFaMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEjMCEGA1UEAwwaQW1hem9uIFJE\n" + "UyBjYS1jZW50cmFsLTEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\n" + "AQCZYI/iQ6DrS3ny3t1EwX1wAD+3LMgh7Fd01EW5LIuaK2kYIIQpsVKhxLCit/V5\n" + "AGc/1qiJS1Qz9ODLTh0Na6bZW6EakRzuHJLe32KJtoFYPC7Z09UqzXrpA/XL+1hM\n" + "P0ZmCWsU7Nn/EmvfBp9zX3dZp6P6ATrvDuYaVFr+SA7aT3FXpBroqBS1fyzUPs+W\n" + "c6zTR6+yc4zkHX0XQxC5RH6xjgpeRkoOajA/sNo7AQF7KlWmKHbdVF44cvvAhRKZ\n" + "XaoVs/C4GjkaAEPTCbopYdhzg+KLx9eB2BQnYLRrIOQZtRfbQI2Nbj7p3VsRuOW1\n" + "tlcks2w1Gb0YC6w6SuIMFkl1AgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNV\n" + "HRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBToYWxE1lawl6Ks6NsvpbHQ3GKEtzAf\n" + "BgNVHSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOC\n" + "AQEAG/8tQ0ooi3hoQpa5EJz0/E5VYBsAz3YxA2HoIonn0jJyG16bzB4yZt4vNQMA\n" + "KsNlQ1uwDWYL1nz63axieUUFIxqxl1KmwfhsmLgZ0Hd2mnTPIl2Hw3uj5+wdgGBg\n" + "agnAZ0bajsBYgD2VGQbqjdk2Qn7Fjy3LEWIvGZx4KyZ99OJ2QxB7JOPdauURAtWA\n" + "DKYkP4LLJxtj07DSzG8kuRWb9B47uqUD+eKDIyjfjbnzGtd9HqqzYFau7EX3HVD9\n" + "9Qhnjl7bTZ6YfAEZ3nH2t3Vc0z76XfGh47rd0pNRhMV+xpok75asKf/lNh5mcUrr\n" + "VKwflyMkQpSbDCmcdJ90N2xEXQ==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBUDANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNjEwMTAxNzQ0NDJaFw0y\n" + "MDAzMDUxNzQ0NDJaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyBldS13ZXN0LTIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDO\n" + "cttLJfubB4XMMIGWNfJISkIdCMGJyOzLiMJaiWB5GYoXKhEl7YGotpy0qklwW3BQ\n" + "a0fmVdcCLX+dIuVQ9iFK+ZcK7zwm7HtdDTCHOCKeOh2IcnU4c/VIokFi6Gn8udM6\n" + "N/Zi5M5OGpVwLVALQU7Yctsn3c95el6MdVx6mJiIPVu7tCVZn88Z2koBQ2gq9P4O\n" + "Sb249SHFqOb03lYDsaqy1NDsznEOhaRBw7DPJFpvmw1lA3/Y6qrExRI06H2VYR2i\n" + "7qxwDV50N58fs10n7Ye1IOxTVJsgEA7X6EkRRXqYaM39Z76R894548WHfwXWjUsi\n" + "MEX0RS0/t1GmnUQjvevDAgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBQBxmcuRSxERYCtNnSr5xNfySokHjAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOCAQEA\n" + "UyCUQjsF3nUAABjfEZmpksTuUo07aT3KGYt+EMMFdejnBQ0+2lJJFGtT+CDAk1SD\n" + "RSgfEBon5vvKEtlnTf9a3pv8WXOAkhfxnryr9FH6NiB8obISHNQNPHn0ljT2/T+I\n" + "Y6ytfRvKHa0cu3V0NXbJm2B4KEOt4QCDiFxUIX9z6eB4Kditwu05OgQh6KcogOiP\n" + "JesWxBMXXGoDC1rIYTFO7szwDyOHlCcVXJDNsTJhc32oDWYdeIbW7o/5I+aQsrXZ\n" + "C96HykZcgWzz6sElrQxUaT3IoMw/5nmw4uWKKnZnxgI9bY4fpQwMeBZ96iHfFxvH\n" + "mqfEEuC7uUoPofXdBp2ObQ==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIECjCCAvKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZMxCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSQwIgYDVQQDDBtBbWF6b24gUkRTIEdvdkNsb3VkIFJvb3QgQ0EwHhcNMTcwNTE5\n" + "MjIzMTE5WhcNMjIwNTE4MTIwMDAwWjCBkzELMAkGA1UEBhMCVVMxEzARBgNVBAgM\n" + "Cldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBX\n" + "ZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJDAiBgNVBAMM\n" + "G0FtYXpvbiBSRFMgdXMtZ292LXdlc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\n" + "ggEPADCCAQoCggEBAM8YZLKAzzOdNnoi7Klih26Zkj+OCpDfwx4ZYB6f8L8UoQi5\n" + "8z9ZtIwMjiJ/kO08P1yl4gfc7YZcNFvhGruQZNat3YNpxwUpQcr4mszjuffbL4uz\n" + "+/8FBxALdqCVOJ5Q0EVSfz3d9Bd1pUPL7ARtSpy7bn/tUPyQeI+lODYO906C0TQ3\n" + "b9bjOsgAdBKkHfjLdsknsOZYYIzYWOJyFJJa0B11XjDUNBy/3IuC0KvDl6At0V5b\n" + "8M6cWcKhte2hgjwTYepV+/GTadeube1z5z6mWsN5arOAQUtYDLH6Aztq9mCJzLHm\n" + "RccBugnGl3fRLJ2VjioN8PoGoN9l9hFBy5fnFgsCAwEAAaNmMGQwDgYDVR0PAQH/\n" + "BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEG7+br8KkvwPd5g\n" + "71Rvh2stclJbMB8GA1UdIwQYMBaAFEkQz6S4NS5lOYKcDjBSuCcVpdzjMA0GCSqG\n" + "SIb3DQEBCwUAA4IBAQBMA327u5ABmhX+aPxljoIbxnydmAFWxW6wNp5+rZrvPig8\n" + "zDRqGQWWr7wWOIjfcWugSElYtf/m9KZHG/Z6+NG7nAoUrdcd1h/IQhb+lFQ2b5g9\n" + "sVzQv/H2JNkfZA8fL/Ko/Tm/f9tcqe0zrGCtT+5u0Nvz35Wl8CEUKLloS5xEb3k5\n" + "7D9IhG3fsE3vHWlWrGCk1cKry3j12wdPG5cUsug0vt34u6rdhP+FsM0tHI15Kjch\n" + "RuUCvyQecy2ZFNAa3jmd5ycNdL63RWe8oayRBpQBxPPCbHfILxGZEdJbCH9aJ2D/\n" + "l8oHIDnvOLdv7/cBjyYuvmprgPtu3QEkbre5Hln/\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIID/DCCAuSgAwIBAgIBUTANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNzA4MjUyMTM5MjZaFw0y\n" + "MDAzMDUyMTM5MjZaMIGPMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJE\n" + "UyBldS13ZXN0LTMgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+\n" + "xmlEC/3a4cJH+UPwXCE02lC7Zq5NHd0dn6peMeLN8agb6jW4VfSY0NydjRj2DJZ8\n" + "K7wV6sub5NUGT1NuFmvSmdbNR2T59KX0p2dVvxmXHHtIpQ9Y8Aq3ZfhmC5q5Bqgw\n" + "tMA1xayDi7HmoPX3R8kk9ktAZQf6lDeksCvok8idjTu9tiSpDiMwds5BjMsWfyjZ\n" + "d13PTGGNHYVdP692BSyXzSP1Vj84nJKnciW8tAqwIiadreJt5oXyrCXi8ekUMs80\n" + "cUTuGm3aA3Q7PB5ljJMPqz0eVddaiIvmTJ9O3Ez3Du/HpImyMzXjkFaf+oNXf/Hx\n" + "/EW5jCRR6vEiXJcDRDS7AgMBAAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB\n" + "Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBRZ9mRtS5fHk3ZKhG20Oack4cAqMTAfBgNV\n" + "HSMEGDAWgBROAu6sPvYVyEztLPUFwY+chAhJgzANBgkqhkiG9w0BAQsFAAOCAQEA\n" + "F/u/9L6ExQwD73F/bhCw7PWcwwqsK1mypIdrjdIsu0JSgwWwGCXmrIspA3n3Dqxq\n" + "sMhAJD88s9Em7337t+naar2VyLO63MGwjj+vA4mtvQRKq8ScIpiEc7xN6g8HUMsd\n" + "gPG9lBGfNjuAZsrGJflrko4HyuSM7zHExMjXLH+CXcv/m3lWOZwnIvlVMa4x0Tz0\n" + "A4fklaawryngzeEjuW6zOiYCzjZtPlP8Fw0SpzppJ8VpQfrZ751RDo4yudmPqoPK\n" + "5EUe36L8U+oYBXnC5TlYs9bpVv9o5wJQI5qA9oQE2eFWxF1E0AyZ4V5sgGUBStaX\n" + "BjDDWul0wSo7rt1Tq7XpnA==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEATCCAumgAwIBAgIBTjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCVVMx\n" + "EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "GzAZBgNVBAMMEkFtYXpvbiBSRFMgUm9vdCBDQTAeFw0xNzEyMDEwMDU1NDJaFw0y\n" + "MDAzMDUwMDU1NDJaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3Rv\n" + "bjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n" + "cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJE\n" + "UyBhcC1ub3J0aGVhc3QtMyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" + "ggEBAMZtQNnm/XT19mTa10ftHLzg5UhajoI65JHv4TQNdGXdsv+CQdGYU49BJ9Eu\n" + "3bYgiEtTzR2lQe9zGMvtuJobLhOWuavzp7IixoIQcHkFHN6wJ1CvqrxgvJfBq6Hy\n" + "EuCDCiU+PPDLUNA6XM6Qx3IpHd1wrJkjRB80dhmMSpxmRmx849uFafhN+P1QybsM\n" + "TI0o48VON2+vj+mNuQTyLMMP8D4odSQHjaoG+zyJfJGZeAyqQyoOUOFEyQaHC3TT\n" + "3IDSNCQlpxb9LerbCoKu79WFBBq3CS5cYpg8/fsnV2CniRBFFUumBt5z4dhw9RJU\n" + "qlUXXO1ZyzpGd+c5v6FtrfXtnIUCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMBIG\n" + "A1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFETv7ELNplYy/xTeIOInl6nzeiHg\n" + "MB8GA1UdIwQYMBaAFE4C7qw+9hXITO0s9QXBj5yECEmDMA0GCSqGSIb3DQEBBQUA\n" + "A4IBAQCpKxOQcd0tEKb3OtsOY8q/MPwTyustGk2Rt7t9G68idADp8IytB7M0SDRo\n" + "wWZqynEq7orQVKdVOanhEWksNDzGp0+FPAf/KpVvdYCd7ru3+iI+V4ZEp2JFdjuZ\n" + "Zz0PIjS6AgsZqE5Ri1J+NmfmjGZCPhsHnGZiBaenX6K5VRwwwmLN6xtoqrrfR5zL\n" + "QfBeeZNJG6KiM3R/DxJ5rAa6Fz+acrhJ60L7HprhB7SFtj1RCijau3+ZwiGmUOMr\n" + "yKlMv+VgmzSw7o4Hbxy1WVrA6zQsTHHSGf+vkQn2PHvnFMUEu/ZLbTDYFNmTLK91\n" + "K6o4nMsEvhBKgo4z7H1EqqxXhvN2\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEDjCCAvagAwIBAgIJAMM61RQn3/kdMA0GCSqGSIb3DQEBCwUAMIGTMQswCQYD\n" + "VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n" + "MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n" + "em9uIFJEUzEkMCIGA1UEAwwbQW1hem9uIFJEUyBHb3ZDbG91ZCBSb290IENBMB4X\n" + "DTE3MDUxOTIyMjkxMVoXDTIyMDUxODIyMjkxMVowgZMxCzAJBgNVBAYTAlVTMRAw\n" + "DgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQKDBlB\n" + "bWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMSQw\n" + "IgYDVQQDDBtBbWF6b24gUkRTIEdvdkNsb3VkIFJvb3QgQ0EwggEiMA0GCSqGSIb3\n" + "DQEBAQUAA4IBDwAwggEKAoIBAQDGS9bh1FGiJPT+GRb3C5aKypJVDC1H2gbh6n3u\n" + "j8cUiyMXfmm+ak402zdLpSYMaxiQ7oL/B3wEmumIpRDAsQrSp3B/qEeY7ipQGOfh\n" + "q2TXjXGIUjiJ/FaoGqkymHRLG+XkNNBtb7MRItsjlMVNELXECwSiMa3nJL2/YyHW\n" + "nTr1+11/weeZEKgVbCUrOugFkMXnfZIBSn40j6EnRlO2u/NFU5ksK5ak2+j8raZ7\n" + "xW7VXp9S1Tgf1IsWHjGZZZguwCkkh1tHOlHC9gVA3p63WecjrIzcrR/V27atul4m\n" + "tn56s5NwFvYPUIx1dbC8IajLUrepVm6XOwdQCfd02DmOyjWJAgMBAAGjYzBhMA4G\n" + "A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRJEM+kuDUu\n" + "ZTmCnA4wUrgnFaXc4zAfBgNVHSMEGDAWgBRJEM+kuDUuZTmCnA4wUrgnFaXc4zAN\n" + "BgkqhkiG9w0BAQsFAAOCAQEAcfA7uirXsNZyI2j4AJFVtOTKOZlQwqbyNducnmlg\n" + "/5nug9fAkwM4AgvF5bBOD1Hw6khdsccMwIj+1S7wpL+EYb/nSc8G0qe1p/9lZ/mZ\n" + "ff5g4JOa26lLuCrZDqAk4TzYnt6sQKfa5ZXVUUn0BK3okhiXS0i+NloMyaBCL7vk\n" + "kDwkHwEqflRKfZ9/oFTcCfoiHPA7AdBtaPVr0/Kj9L7k+ouz122huqG5KqX0Zpo8\n" + "S0IGvcd2FZjNSNPttNAK7YuBVsZ0m2nIH1SLp//00v7yAHIgytQwwB17PBcp4NXD\n" + "pCfTa27ng9mMMC2YLqWQpW4TkqjDin2ZC+5X/mbrjzTvVg==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBzCCAu+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSUwIwYDVQQDDBxBbWF6b24gUkRTIGFwLWVhc3QtMSBSb290IENBMB4XDTE5MDIx\n" + "NzAyNDcwMFoXDTIyMDYwMTEyMDAwMFowgY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQI\n" + "DApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6b24g\n" + "V2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMSAwHgYDVQQD\n" + "DBdBbWF6b24gUkRTIGFwLWVhc3QtMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" + "ADCCAQoCggEBAOcJAUofyJuBuPr5ISHi/Ha5ed8h3eGdzn4MBp6rytPOg9NVGRQs\n" + "O93fNGCIKsUT6gPuk+1f1ncMTV8Y0Fdf4aqGWme+Khm3ZOP3V1IiGnVq0U2xiOmn\n" + "SQ4Q7LoeQC4lC6zpoCHVJyDjZ4pAknQQfsXb77Togdt/tK5ahev0D+Q3gCwAoBoO\n" + "DHKJ6t820qPi63AeGbJrsfNjLKiXlFPDUj4BGir4dUzjEeH7/hx37na1XG/3EcxP\n" + "399cT5k7sY/CR9kctMlUyEEUNQOmhi/ly1Lgtihm3QfjL6K9aGLFNwX35Bkh9aL2\n" + "F058u+n8DP/dPeKUAcJKiQZUmzuen5n57x8CAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n" + "AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFlqgF4FQlb9yP6c+Q3E\n" + "O3tXv+zOMB8GA1UdIwQYMBaAFK9T6sY/PBZVbnHcNcQXf58P4OuPMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQDeXiS3v1z4jWAo1UvVyKDeHjtrtEH1Rida1eOXauFuEQa5tuOk\n" + "E53Os4haZCW4mOlKjigWs4LN+uLIAe1aFXGo92nGIqyJISHJ1L+bopx/JmIbHMCZ\n" + "0lTNJfR12yBma5VQy7vzeFku/SisKwX0Lov1oHD4MVhJoHbUJYkmAjxorcIHORvh\n" + "I3Vj5XrgDWtLDPL8/Id/roul/L+WX5ir+PGScKBfQIIN2lWdZoqdsx8YWqhm/ikL\n" + "C6qNieSwcvWL7C03ri0DefTQMY54r5wP33QU5hJ71JoaZI3YTeT0Nf+NRL4hM++w\n" + "Q0veeNzBQXg1f/JxfeA39IDIX1kiCf71tGlT\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEDDCCAvSgAwIBAgICcEUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNjU2\n" + "MjBaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n" + "em9uIFJEUyBhcC1ub3J0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n" + "AAOCAQ8AMIIBCgKCAQEAndtkldmHtk4TVQAyqhAvtEHSMb6pLhyKrIFved1WO3S7\n" + "+I+bWwv9b2W/ljJxLq9kdT43bhvzonNtI4a1LAohS6bqyirmk8sFfsWT3akb+4Sx\n" + "1sjc8Ovc9eqIWJCrUiSvv7+cS7ZTA9AgM1PxvHcsqrcUXiK3Jd/Dax9jdZE1e15s\n" + "BEhb2OEPE+tClFZ+soj8h8Pl2Clo5OAppEzYI4LmFKtp1X/BOf62k4jviXuCSst3\n" + "UnRJzE/CXtjmN6oZySVWSe0rQYuyqRl6//9nK40cfGKyxVnimB8XrrcxUN743Vud\n" + "QQVU0Esm8OVTX013mXWQXJHP2c0aKkog8LOga0vobQIDAQABo2YwZDAOBgNVHQ8B\n" + "Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQULmoOS1mFSjj+\n" + "snUPx4DgS3SkLFYwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n" + "KoZIhvcNAQELBQADggEBAAkVL2P1M2/G9GM3DANVAqYOwmX0Xk58YBHQu6iiQg4j\n" + "b4Ky/qsZIsgT7YBsZA4AOcPKQFgGTWhe9pvhmXqoN3RYltN8Vn7TbUm/ZVDoMsrM\n" + "gwv0+TKxW1/u7s8cXYfHPiTzVSJuOogHx99kBW6b2f99GbP7O1Sv3sLq4j6lVvBX\n" + "Fiacf5LAWC925nvlTzLlBgIc3O9xDtFeAGtZcEtxZJ4fnGXiqEnN4539+nqzIyYq\n" + "nvlgCzyvcfRAxwltrJHuuRu6Maw5AGcd2Y0saMhqOVq9KYKFKuD/927BTrbd2JVf\n" + "2sGWyuPZPCk3gq+5pCjbD0c6DkhcMGI6WwxvM5V/zSM=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEDDCCAvSgAwIBAgICOFAwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAxNzQ2\n" + "MjFaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n" + "em9uIFJEUyBhcC1ub3J0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n" + "AAOCAQ8AMIIBCgKCAQEAzU72e6XbaJbi4HjJoRNjKxzUEuChKQIt7k3CWzNnmjc5\n" + "8I1MjCpa2W1iw1BYVysXSNSsLOtUsfvBZxi/1uyMn5ZCaf9aeoA9UsSkFSZBjOCN\n" + "DpKPCmfV1zcEOvJz26+1m8WDg+8Oa60QV0ou2AU1tYcw98fOQjcAES0JXXB80P2s\n" + "3UfkNcnDz+l4k7j4SllhFPhH6BQ4lD2NiFAP4HwoG6FeJUn45EPjzrydxjq6v5Fc\n" + "cQ8rGuHADVXotDbEhaYhNjIrsPL+puhjWfhJjheEw8c4whRZNp6gJ/b6WEes/ZhZ\n" + "h32DwsDsZw0BfRDUMgUn8TdecNexHUw8vQWeC181hwIDAQABo2YwZDAOBgNVHQ8B\n" + "Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwW9bWgkWkr0U\n" + "lrOsq2kvIdrECDgwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n" + "KoZIhvcNAQELBQADggEBAEugF0Gj7HVhX0ehPZoGRYRt3PBuI2YjfrrJRTZ9X5wc\n" + "9T8oHmw07mHmNy1qqWvooNJg09bDGfB0k5goC2emDiIiGfc/kvMLI7u+eQOoMKj6\n" + "mkfCncyRN3ty08Po45vTLBFZGUvtQmjM6yKewc4sXiASSBmQUpsMbiHRCL72M5qV\n" + "obcJOjGcIdDTmV1BHdWT+XcjynsGjUqOvQWWhhLPrn4jWe6Xuxll75qlrpn3IrIx\n" + "CRBv/5r7qbcQJPOgwQsyK4kv9Ly8g7YT1/vYBlR3cRsYQjccw5ceWUj2DrMVWhJ4\n" + "prf+E3Aa4vYmLLOUUvKnDQ1k3RGNu56V0tonsQbfsaM=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEDDCCAvSgAwIBAgICOYIwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTcyMDA1\n" + "MjlaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n" + "em9uIFJEUyBhcC1ub3J0aGVhc3QtMyAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n" + "AAOCAQ8AMIIBCgKCAQEA4dMak8W+XW8y/2F6nRiytFiA4XLwePadqWebGtlIgyCS\n" + "kbug8Jv5w7nlMkuxOxoUeD4WhI6A9EkAn3r0REM/2f0aYnd2KPxeqS2MrtdxxHw1\n" + "xoOxk2x0piNSlOz6yog1idsKR5Wurf94fvM9FdTrMYPPrDabbGqiBMsZZmoHLvA3\n" + "Z+57HEV2tU0Ei3vWeGIqnNjIekS+E06KhASxrkNU5vi611UsnYZlSi0VtJsH4UGV\n" + "LhnHl53aZL0YFO5mn/fzuNG/51qgk/6EFMMhaWInXX49Dia9FnnuWXwVwi6uX1Wn\n" + "7kjoHi5VtmC8ZlGEHroxX2DxEr6bhJTEpcLMnoQMqwIDAQABo2YwZDAOBgNVHQ8B\n" + "Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUsUI5Cb3SWB8+\n" + "gv1YLN/ABPMdxSAwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n" + "KoZIhvcNAQELBQADggEBAJAF3E9PM1uzVL8YNdzb6fwJrxxqI2shvaMVmC1mXS+w\n" + "G0zh4v2hBZOf91l1EO0rwFD7+fxoI6hzQfMxIczh875T6vUXePKVOCOKI5wCrDad\n" + "zQbVqbFbdhsBjF4aUilOdtw2qjjs9JwPuB0VXN4/jY7m21oKEOcnpe36+7OiSPjN\n" + "xngYewCXKrSRqoj3mw+0w/+exYj3Wsush7uFssX18av78G+ehKPIVDXptOCP/N7W\n" + "8iKVNeQ2QGTnu2fzWsGUSvMGyM7yqT+h1ILaT//yQS8er511aHMLc142bD4D9VSy\n" + "DgactwPDTShK/PXqhvNey9v/sKXm4XatZvwcc8KYlW4=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIECDCCAvCgAwIBAgICVIYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDQxNzEz\n" + "MDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\n" + "em9uIFJEUyBhcC1zb3V0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" + "DwAwggEKAoIBAQDUYOz1hGL42yUCrcsMSOoU8AeD/3KgZ4q7gP+vAz1WnY9K/kim\n" + "eWN/2Qqzlo3+mxSFQFyD4MyV3+CnCPnBl9Sh1G/F6kThNiJ7dEWSWBQGAB6HMDbC\n" + "BaAsmUc1UIz8sLTL3fO+S9wYhA63Wun0Fbm/Rn2yk/4WnJAaMZcEtYf6e0KNa0LM\n" + "p/kN/70/8cD3iz3dDR8zOZFpHoCtf0ek80QqTich0A9n3JLxR6g6tpwoYviVg89e\n" + "qCjQ4axxOkWWeusLeTJCcY6CkVyFvDAKvcUl1ytM5AiaUkXblE7zDFXRM4qMMRdt\n" + "lPm8d3pFxh0fRYk8bIKnpmtOpz3RIctDrZZxAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n" + "AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT99wKJftD3jb4sHoHG\n" + "i3uGlH6W6TAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n" + "9w0BAQsFAAOCAQEAZ17hhr3dII3hUfuHQ1hPWGrpJOX/G9dLzkprEIcCidkmRYl+\n" + "hu1Pe3caRMh/17+qsoEErmnVq5jNY9X1GZL04IZH8YbHc7iRHw3HcWAdhN8633+K\n" + "jYEB2LbJ3vluCGnCejq9djDb6alOugdLMJzxOkHDhMZ6/gYbECOot+ph1tQuZXzD\n" + "tZ7prRsrcuPBChHlPjmGy8M9z8u+kF196iNSUGC4lM8vLkHM7ycc1/ZOwRq9aaTe\n" + "iOghbQQyAEe03MWCyDGtSmDfr0qEk+CHN+6hPiaL8qKt4s+V9P7DeK4iW08ny8Ox\n" + "AVS7u0OK/5+jKMAMrKwpYrBydOjTUTHScocyNw==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEDDCCAvSgAwIBAgICY4kwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTMyMDEx\n" + "NDJaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n" + "em9uIFJEUyBhcC1zb3V0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n" + "AAOCAQ8AMIIBCgKCAQEAr5u9OuLL/OF/fBNUX2kINJLzFl4DnmrhnLuSeSnBPgbb\n" + "qddjf5EFFJBfv7IYiIWEFPDbDG5hoBwgMup5bZDbas+ZTJTotnnxVJTQ6wlhTmns\n" + "eHECcg2pqGIKGrxZfbQhlj08/4nNAPvyYCTS0bEcmQ1emuDPyvJBYDDLDU6AbCB5\n" + "6Z7YKFQPTiCBblvvNzchjLWF9IpkqiTsPHiEt21sAdABxj9ityStV3ja/W9BfgxH\n" + "wzABSTAQT6FbDwmQMo7dcFOPRX+hewQSic2Rn1XYjmNYzgEHisdUsH7eeXREAcTw\n" + "61TRvaLH8AiOWBnTEJXPAe6wYfrcSd1pD0MXpoB62wIDAQABo2YwZDAOBgNVHQ8B\n" + "Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUytwMiomQOgX5\n" + "Ichd+2lDWRUhkikwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n" + "KoZIhvcNAQELBQADggEBACf6lRDpfCD7BFRqiWM45hqIzffIaysmVfr+Jr+fBTjP\n" + "uYe/ba1omSrNGG23bOcT9LJ8hkQJ9d+FxUwYyICQNWOy6ejicm4z0C3VhphbTPqj\n" + "yjpt9nG56IAcV8BcRJh4o/2IfLNzC/dVuYJV8wj7XzwlvjysenwdrJCoLadkTr1h\n" + "eIdG6Le07sB9IxrGJL9e04afk37h7c8ESGSE4E+oS4JQEi3ATq8ne1B9DQ9SasXi\n" + "IRmhNAaISDzOPdyLXi9N9V9Lwe/DHcja7hgLGYx3UqfjhLhOKwp8HtoZORixAmOI\n" + "HfILgNmwyugAbuZoCazSKKBhQ0wgO0WZ66ZKTMG8Oho=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEDDCCAvSgAwIBAgICEkYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxOTUz\n" + "NDdaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n" + "em9uIFJEUyBhcC1zb3V0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n" + "AAOCAQ8AMIIBCgKCAQEAufodI2Flker8q7PXZG0P0vmFSlhQDw907A6eJuF/WeMo\n" + "GHnll3b4S6nC3oRS3nGeRMHbyU2KKXDwXNb3Mheu+ox+n5eb/BJ17eoj9HbQR1cd\n" + "gEkIciiAltf8gpMMQH4anP7TD+HNFlZnP7ii3geEJB2GGXSxgSWvUzH4etL67Zmn\n" + "TpGDWQMB0T8lK2ziLCMF4XAC/8xDELN/buHCNuhDpxpPebhct0T+f6Arzsiswt2j\n" + "7OeNeLLZwIZvVwAKF7zUFjC6m7/VmTQC8nidVY559D6l0UhhU0Co/txgq3HVsMOH\n" + "PbxmQUwJEKAzQXoIi+4uZzHFZrvov/nDTNJUhC6DqwIDAQABo2YwZDAOBgNVHQ8B\n" + "Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwaZpaCme+EiV\n" + "M5gcjeHZSTgOn4owHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n" + "KoZIhvcNAQELBQADggEBAAR6a2meCZuXO2TF9bGqKGtZmaah4pH2ETcEVUjkvXVz\n" + "sl+ZKbYjrun+VkcMGGKLUjS812e7eDF726ptoku9/PZZIxlJB0isC/0OyixI8N4M\n" + "NsEyvp52XN9QundTjkl362bomPnHAApeU0mRbMDRR2JdT70u6yAzGLGsUwMkoNnw\n" + "1VR4XKhXHYGWo7KMvFrZ1KcjWhubxLHxZWXRulPVtGmyWg/MvE6KF+2XMLhojhUL\n" + "+9jB3Fpn53s6KMx5tVq1x8PukHmowcZuAF8k+W4gk8Y68wIwynrdZrKRyRv6CVtR\n" + "FZ8DeJgoNZT3y/GT254VqMxxfuy2Ccb/RInd16tEvVk=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIECjCCAvKgAwIBAgICEzUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAyMDUy\n" + "MjVaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\n" + "em9uIFJEUyBjYS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\n" + "ggEPADCCAQoCggEBAOxHqdcPSA2uBjsCP4DLSlqSoPuQ/X1kkJLusVRKiQE2zayB\n" + "viuCBt4VB9Qsh2rW3iYGM+usDjltGnI1iUWA5KHcvHszSMkWAOYWLiMNKTlg6LCp\n" + "XnE89tvj5dIH6U8WlDvXLdjB/h30gW9JEX7S8supsBSci2GxEzb5mRdKaDuuF/0O\n" + "qvz4YE04pua3iZ9QwmMFuTAOYzD1M72aOpj+7Ac+YLMM61qOtU+AU6MndnQkKoQi\n" + "qmUN2A9IFaqHFzRlSdXwKCKUA4otzmz+/N3vFwjb5F4DSsbsrMfjeHMo6o/nb6Nh\n" + "YDb0VJxxPee6TxSuN7CQJ2FxMlFUezcoXqwqXD0CAwEAAaNmMGQwDgYDVR0PAQH/\n" + "BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDGGpon9WfIpsggE\n" + "CxHq8hZ7E2ESMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\n" + "SIb3DQEBCwUAA4IBAQAvpeQYEGZvoTVLgV9rd2+StPYykMsmFjWQcyn3dBTZRXC2\n" + "lKq7QhQczMAOhEaaN29ZprjQzsA2X/UauKzLR2Uyqc2qOeO9/YOl0H3qauo8C/W9\n" + "r8xqPbOCDLEXlOQ19fidXyyEPHEq5WFp8j+fTh+s8WOx2M7IuC0ANEetIZURYhSp\n" + "xl9XOPRCJxOhj7JdelhpweX0BJDNHeUFi0ClnFOws8oKQ7sQEv66d5ddxqqZ3NVv\n" + "RbCvCtEutQMOUMIuaygDlMn1anSM8N7Wndx8G6+Uy67AnhjGx7jw/0YPPxopEj6x\n" + "JXP8j0sJbcT9K/9/fPVLNT25RvQ/93T2+IQL4Ca2\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIECjCCAvKgAwIBAgICV2YwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExOTM2\n" + "MjBaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\n" + "em9uIFJEUyBldS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\n" + "ggEPADCCAQoCggEBAMEx54X2pHVv86APA0RWqxxRNmdkhAyp2R1cFWumKQRofoFv\n" + "n+SPXdkpIINpMuEIGJANozdiEz7SPsrAf8WHyD93j/ZxrdQftRcIGH41xasetKGl\n" + "I67uans8d+pgJgBKGb/Z+B5m+UsIuEVekpvgpwKtmmaLFC/NCGuSsJoFsRqoa6Gh\n" + "m34W6yJoY87UatddCqLY4IIXaBFsgK9Q/wYzYLbnWM6ZZvhJ52VMtdhcdzeTHNW0\n" + "5LGuXJOF7Ahb4JkEhoo6TS2c0NxB4l4MBfBPgti+O7WjR3FfZHpt18A6Zkq6A2u6\n" + "D/oTSL6c9/3sAaFTFgMyL3wHb2YlW0BPiljZIqECAwEAAaNmMGQwDgYDVR0PAQH/\n" + "BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOcAToAc6skWffJa\n" + "TnreaswAfrbcMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\n" + "SIb3DQEBCwUAA4IBAQA1d0Whc1QtspK496mFWfFEQNegLh0a9GWYlJm+Htcj5Nxt\n" + "DAIGXb+8xrtOZFHmYP7VLCT5Zd2C+XytqseK/+s07iAr0/EPF+O2qcyQWMN5KhgE\n" + "cXw2SwuP9FPV3i+YAm11PBVeenrmzuk9NrdHQ7TxU4v7VGhcsd2C++0EisrmquWH\n" + "mgIfmVDGxphwoES52cY6t3fbnXmTkvENvR+h3rj+fUiSz0aSo+XZUGHPgvuEKM/W\n" + "CBD9Smc9CBoBgvy7BgHRgRUmwtABZHFUIEjHI5rIr7ZvYn+6A0O6sogRfvVYtWFc\n" + "qpyrW1YX8mD0VlJ8fGKM3G+aCOsiiPKDV/Uafrm+\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIECDCCAvCgAwIBAgICGAcwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIxODE5\n" + "NDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\n" + "em9uIFJEUyBldS1ub3J0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" + "DwAwggEKAoIBAQCiIYnhe4UNBbdBb/nQxl5giM0XoVHWNrYV5nB0YukA98+TPn9v\n" + "Aoj1RGYmtryjhrf01Kuv8SWO+Eom95L3zquoTFcE2gmxCfk7bp6qJJ3eHOJB+QUO\n" + "XsNRh76fwDzEF1yTeZWH49oeL2xO13EAx4PbZuZpZBttBM5zAxgZkqu4uWQczFEs\n" + "JXfla7z2fvWmGcTagX10O5C18XaFroV0ubvSyIi75ue9ykg/nlFAeB7O0Wxae88e\n" + "uhiBEFAuLYdqWnsg3459NfV8Yi1GnaitTym6VI3tHKIFiUvkSiy0DAlAGV2iiyJE\n" + "q+DsVEO4/hSINJEtII4TMtysOsYPpINqeEzRAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n" + "AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRR0UpnbQyjnHChgmOc\n" + "hnlc0PogzTAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n" + "9w0BAQsFAAOCAQEAKJD4xVzSf4zSGTBJrmamo86jl1NHQxXUApAZuBZEc8tqC6TI\n" + "T5CeoSr9CMuVC8grYyBjXblC4OsM5NMvmsrXl/u5C9dEwtBFjo8mm53rOOIm1fxl\n" + "I1oYB/9mtO9ANWjkykuLzWeBlqDT/i7ckaKwalhLODsRDO73vRhYNjsIUGloNsKe\n" + "pxw3dzHwAZx4upSdEVG4RGCZ1D0LJ4Gw40OfD69hfkDfRVVxKGrbEzqxXRvovmDc\n" + "tKLdYZO/6REoca36v4BlgIs1CbUXJGLSXUwtg7YXGLSVBJ/U0+22iGJmBSNcoyUN\n" + "cjPFD9JQEhDDIYYKSGzIYpvslvGc4T5ISXFiuQ==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBzCCAu+gAwIBAgICYpgwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExNzMx\n" + "NDhaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n" + "em9uIFJEUyBldS13ZXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" + "ADCCAQoCggEBAMk3YdSZ64iAYp6MyyKtYJtNzv7zFSnnNf6vv0FB4VnfITTMmOyZ\n" + "LXqKAT2ahZ00hXi34ewqJElgU6eUZT/QlzdIu359TEZyLVPwURflL6SWgdG01Q5X\n" + "O++7fSGcBRyIeuQWs9FJNIIqK8daF6qw0Rl5TXfu7P9dBc3zkgDXZm2DHmxGDD69\n" + "7liQUiXzoE1q2Z9cA8+jirDioJxN9av8hQt12pskLQumhlArsMIhjhHRgF03HOh5\n" + "tvi+RCfihVOxELyIRTRpTNiIwAqfZxxTWFTgfn+gijTmd0/1DseAe82aYic8JbuS\n" + "EMbrDduAWsqrnJ4GPzxHKLXX0JasCUcWyMECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n" + "AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPLtsq1NrwJXO13C9eHt\n" + "sLY11AGwMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQAnWBKj5xV1A1mYd0kIgDdkjCwQkiKF5bjIbGkT3YEFFbXoJlSP\n" + "0lZZ/hDaOHI8wbLT44SzOvPEEmWF9EE7SJzkvSdQrUAWR9FwDLaU427ALI3ngNHy\n" + "lGJ2hse1fvSRNbmg8Sc9GBv8oqNIBPVuw+AJzHTacZ1OkyLZrz1c1QvwvwN2a+Jd\n" + "vH0V0YIhv66llKcYDMUQJAQi4+8nbRxXWv6Gq3pvrFoorzsnkr42V3JpbhnYiK+9\n" + "nRKd4uWl62KRZjGkfMbmsqZpj2fdSWMY1UGyN1k+kDmCSWYdrTRDP0xjtIocwg+A\n" + "J116n4hV/5mbA0BaPiS2krtv17YAeHABZcvz\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBzCCAu+gAwIBAgICZIEwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIyMTMy\n" + "MzJaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n" + "em9uIFJEUyBldS13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" + "ADCCAQoCggEBALGiwqjiF7xIjT0Sx7zB3764K2T2a1DHnAxEOr+/EIftWKxWzT3u\n" + "PFwS2eEZcnKqSdRQ+vRzonLBeNLO4z8aLjQnNbkizZMBuXGm4BqRm1Kgq3nlLDQn\n" + "7YqdijOq54SpShvR/8zsO4sgMDMmHIYAJJOJqBdaus2smRt0NobIKc0liy7759KB\n" + "6kmQ47Gg+kfIwxrQA5zlvPLeQImxSoPi9LdbRoKvu7Iot7SOa+jGhVBh3VdqndJX\n" + "7tm/saj4NE375csmMETFLAOXjat7zViMRwVorX4V6AzEg1vkzxXpA9N7qywWIT5Y\n" + "fYaq5M8i6vvLg0CzrH9fHORtnkdjdu1y+0MCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n" + "AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFOhOx1yt3Z7mvGB9jBv\n" + "2ymdZwiOMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQBehqY36UGDvPVU9+vtaYGr38dBbp+LzkjZzHwKT1XJSSUc2wqM\n" + "hnCIQKilonrTIvP1vmkQi8qHPvDRtBZKqvz/AErW/ZwQdZzqYNFd+BmOXaeZWV0Q\n" + "oHtDzXmcwtP8aUQpxN0e1xkWb1E80qoy+0uuRqb/50b/R4Q5qqSfJhkn6z8nwB10\n" + "7RjLtJPrK8igxdpr3tGUzfAOyiPrIDncY7UJaL84GFp7WWAkH0WG3H8Y8DRcRXOU\n" + "mqDxDLUP3rNuow3jnGxiUY+gGX5OqaZg4f4P6QzOSmeQYs6nLpH0PiN00+oS1BbD\n" + "bpWdZEttILPI+vAYkU4QuBKKDjJL6HbSd+cn\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBzCCAu+gAwIBAgICJDQwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNzAz\n" + "MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n" + "em9uIFJEUyBldS13ZXN0LTMgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" + "ADCCAQoCggEBAL9bL7KE0n02DLVtlZ2PL+g/BuHpMYFq2JnE2RgompGurDIZdjmh\n" + "1pxfL3nT+QIVMubuAOy8InRfkRxfpxyjKYdfLJTPJG+jDVL+wDcPpACFVqoV7Prg\n" + "pVYEV0lc5aoYw4bSeYFhdzgim6F8iyjoPnObjll9mo4XsHzSoqJLCd0QC+VG9Fw2\n" + "q+GDRZrLRmVM2oNGDRbGpGIFg77aRxRapFZa8SnUgs2AqzuzKiprVH5i0S0M6dWr\n" + "i+kk5epmTtkiDHceX+dP/0R1NcnkCPoQ9TglyXyPdUdTPPRfKCq12dftqll+u4mV\n" + "ARdN6WFjovxax8EAP2OAUTi1afY+1JFMj+sCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n" + "AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLfhrbrO5exkCVgxW0x3\n" + "Y2mAi8lNMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQAigQ5VBNGyw+OZFXwxeJEAUYaXVoP/qrhTOJ6mCE2DXUVEoJeV\n" + "SxScy/TlFA9tJXqmit8JH8VQ/xDL4ubBfeMFAIAo4WzNWDVoeVMqphVEcDWBHsI1\n" + "AETWzfsapRS9yQekOMmxg63d/nV8xewIl8aNVTHdHYXMqhhik47VrmaVEok1UQb3\n" + "O971RadLXIEbVd9tjY5bMEHm89JsZDnDEw1hQXBb67Elu64OOxoKaHBgUH8AZn/2\n" + "zFsL1ynNUjOhCSAA15pgd1vjwc0YsBbAEBPcHBWYBEyME6NLNarjOzBl4FMtATSF\n" + "wWCKRGkvqN8oxYhwR2jf2rR5Mu4DWkK5Q8Ep\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEEjCCAvqgAwIBAgIJANew34ehz5l8MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\n" + "VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n" + "MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n" + "em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0Ew\n" + "HhcNMTkwNTEwMjE0ODI3WhcNMjQwNTA4MjE0ODI3WjCBlTELMAkGA1UEBhMCVVMx\n" + "EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\n" + "GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n" + "JjAkBgNVBAMMHUFtYXpvbiBSRFMgbWUtc291dGgtMSBSb290IENBMIIBIjANBgkq\n" + "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp7BYV88MukcY+rq0r79+C8UzkT30fEfT\n" + "aPXbx1d6M7uheGN4FMaoYmL+JE1NZPaMRIPTHhFtLSdPccInvenRDIatcXX+jgOk\n" + "UA6lnHQ98pwN0pfDUyz/Vph4jBR9LcVkBbe0zdoKKp+HGbMPRU0N2yNrog9gM5O8\n" + "gkU/3O2csJ/OFQNnj4c2NQloGMUpEmedwJMOyQQfcUyt9CvZDfIPNnheUS29jGSw\n" + "ERpJe/AENu8Pxyc72jaXQuD+FEi2Ck6lBkSlWYQFhTottAeGvVFNCzKszCntrtqd\n" + "rdYUwurYsLTXDHv9nW2hfDUQa0mhXf9gNDOBIVAZugR9NqNRNyYLHQIDAQABo2Mw\n" + "YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU54cf\n" + "DjgwBx4ycBH8+/r8WXdaiqYwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXda\n" + "iqYwDQYJKoZIhvcNAQELBQADggEBAIIMTSPx/dR7jlcxggr+O6OyY49Rlap2laKA\n" + "eC/XI4ySP3vQkIFlP822U9Kh8a9s46eR0uiwV4AGLabcu0iKYfXjPkIprVCqeXV7\n" + "ny9oDtrbflyj7NcGdZLvuzSwgl9SYTJp7PVCZtZutsPYlbJrBPHwFABvAkMvRtDB\n" + "hitIg4AESDGPoCl94sYHpfDfjpUDMSrAMDUyO6DyBdZH5ryRMAs3lGtsmkkNUrso\n" + "aTW6R05681Z0mvkRdb+cdXtKOSuDZPoe2wJJIaz3IlNQNSrB5TImMYgmt6iAsFhv\n" + "3vfTSTKrZDNTJn4ybG6pq1zWExoXsktZPylJly6R3RBwV6nwqBM=\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBzCCAu+gAwIBAgICQ2QwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDUxODQ2\n" + "MjlaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n" + "em9uIFJEUyBzYS1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" + "ADCCAQoCggEBAMMvR+ReRnOzqJzoaPipNTt1Z2VA968jlN1+SYKUrYM3No+Vpz0H\n" + "M6Tn0oYB66ByVsXiGc28ulsqX1HbHsxqDPwvQTKvO7SrmDokoAkjJgLocOLUAeld\n" + "5AwvUjxGRP6yY90NV7X786MpnYb2Il9DIIaV9HjCmPt+rjy2CZjS0UjPjCKNfB8J\n" + "bFjgW6GGscjeyGb/zFwcom5p4j0rLydbNaOr9wOyQrtt3ZQWLYGY9Zees/b8pmcc\n" + "Jt+7jstZ2UMV32OO/kIsJ4rMUn2r/uxccPwAc1IDeRSSxOrnFKhW3Cu69iB3bHp7\n" + "JbawY12g7zshE4I14sHjv3QoXASoXjx4xgMCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n" + "AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI1Fc/Ql2jx+oJPgBVYq\n" + "ccgP0pQ8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQB4VVVabVp70myuYuZ3vltQIWqSUMhkaTzehMgGcHjMf9iLoZ/I\n" + "93KiFUSGnek5cRePyS9wcpp0fcBT3FvkjpUdCjVtdttJgZFhBxgTd8y26ImdDDMR\n" + "4+BUuhI5msvjL08f+Vkkpu1GQcGmyFVPFOy/UY8iefu+QyUuiBUnUuEDd49Hw0Fn\n" + "/kIPII6Vj82a2mWV/Q8e+rgN8dIRksRjKI03DEoP8lhPlsOkhdwU6Uz9Vu6NOB2Q\n" + "Ls1kbcxAc7cFSyRVJEhh12Sz9d0q/CQSTFsVJKOjSNQBQfVnLz1GwO/IieUEAr4C\n" + "jkTntH0r1LX5b/GwN4R887LvjAEdTbg1his7\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBzCCAu+gAwIBAgICJVUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTkxODE2\n" + "NTNaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n" + "em9uIFJEUyB1cy1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" + "ADCCAQoCggEBAM3i/k2u6cqbMdcISGRvh+m+L0yaSIoOXjtpNEoIftAipTUYoMhL\n" + "InXGlQBVA4shkekxp1N7HXe1Y/iMaPEyb3n+16pf3vdjKl7kaSkIhjdUz3oVUEYt\n" + "i8Z/XeJJ9H2aEGuiZh3kHixQcZczn8cg3dA9aeeyLSEnTkl/npzLf//669Ammyhs\n" + "XcAo58yvT0D4E0D/EEHf2N7HRX7j/TlyWvw/39SW0usiCrHPKDLxByLojxLdHzso\n" + "QIp/S04m+eWn6rmD+uUiRteN1hI5ncQiA3wo4G37mHnUEKo6TtTUh+sd/ku6a8HK\n" + "glMBcgqudDI90s1OpuIAWmuWpY//8xEG2YECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n" + "AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPqhoWZcrVY9mU7tuemR\n" + "RBnQIj1jMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQB6zOLZ+YINEs72heHIWlPZ8c6WY8MDU+Be5w1M+BK2kpcVhCUK\n" + "PJO4nMXpgamEX8DIiaO7emsunwJzMSvavSPRnxXXTKIc0i/g1EbiDjnYX9d85DkC\n" + "E1LaAUCmCZBVi9fIe0H2r9whIh4uLWZA41oMnJx/MOmo3XyMfQoWcqaSFlMqfZM4\n" + "0rNoB/tdHLNuV4eIdaw2mlHxdWDtF4oH+HFm+2cVBUVC1jXKrFv/euRVtsTT+A6i\n" + "h2XBHKxQ1Y4HgAn0jACP2QSPEmuoQEIa57bEKEcZsBR8SDY6ZdTd2HLRIApcCOSF\n" + "MRM8CKLeF658I0XgF8D5EsYoKPsA+74Z+jDH\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIECDCCAvCgAwIBAgIDAIVCMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\n" + "UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n" + "CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n" + "UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTEzMTcw\n" + "NjQxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\n" + "c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\n" + "U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\n" + "YXpvbiBSRFMgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" + "DwAwggEKAoIBAQDE+T2xYjUbxOp+pv+gRA3FO24+1zCWgXTDF1DHrh1lsPg5k7ht\n" + "2KPYzNc+Vg4E+jgPiW0BQnA6jStX5EqVh8BU60zELlxMNvpg4KumniMCZ3krtMUC\n" + "au1NF9rM7HBh+O+DYMBLK5eSIVt6lZosOb7bCi3V6wMLA8YqWSWqabkxwN4w0vXI\n" + "8lu5uXXFRemHnlNf+yA/4YtN4uaAyd0ami9+klwdkZfkrDOaiy59haOeBGL8EB/c\n" + "dbJJlguHH5CpCscs3RKtOOjEonXnKXldxarFdkMzi+aIIjQ8GyUOSAXHtQHb3gZ4\n" + "nS6Ey0CMlwkB8vUObZU9fnjKJcL5QCQqOfwvAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n" + "AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQUPuRHohPxx4VjykmH\n" + "6usGrLL1ETAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n" + "9w0BAQsFAAOCAQEAUdR9Vb3y33Yj6X6KGtuthZ08SwjImVQPtknzpajNE5jOJAh8\n" + "quvQnU9nlnMO85fVDU1Dz3lLHGJ/YG1pt1Cqq2QQ200JcWCvBRgdvH6MjHoDQpqZ\n" + "HvQ3vLgOGqCLNQKFuet9BdpsHzsctKvCVaeBqbGpeCtt3Hh/26tgx0rorPLw90A2\n" + "V8QSkZJjlcKkLa58N5CMM8Xz8KLWg3MZeT4DmlUXVCukqK2RGuP2L+aME8dOxqNv\n" + "OnOz1zrL5mR2iJoDpk8+VE/eBDmJX40IJk6jBjWoxAO/RXq+vBozuF5YHN1ujE92\n" + "tO8HItgTp37XT8bJBAiAnt5mxw+NLSqtxk2QdQ==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIECDCCAvCgAwIBAgIDAIkHMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\n" + "UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n" + "CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n" + "UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTA2MTc0\n" + "MDIxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\n" + "c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\n" + "U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\n" + "YXpvbiBSRFMgdXMtd2VzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" + "DwAwggEKAoIBAQDD2yzbbAl77OofTghDMEf624OvU0eS9O+lsdO0QlbfUfWa1Kd6\n" + "0WkgjkLZGfSRxEHMCnrv4UPBSK/Qwn6FTjkDLgemhqBtAnplN4VsoDL+BkRX4Wwq\n" + "/dSQJE2b+0hm9w9UMVGFDEq1TMotGGTD2B71eh9HEKzKhGzqiNeGsiX4VV+LJzdH\n" + "uM23eGisNqmd4iJV0zcAZ+Gbh2zK6fqTOCvXtm7Idccv8vZZnyk1FiWl3NR4WAgK\n" + "AkvWTIoFU3Mt7dIXKKClVmvssG8WHCkd3Xcb4FHy/G756UZcq67gMMTX/9fOFM/v\n" + "l5C0+CHl33Yig1vIDZd+fXV1KZD84dEJfEvHAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n" + "AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+ap20kO/6A7pPxo3+\n" + "T3CfqZpQWjAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n" + "9w0BAQsFAAOCAQEAHCJky2tPjPttlDM/RIqExupBkNrnSYnOK4kr9xJ3sl8UF2DA\n" + "PAnYsjXp3rfcjN/k/FVOhxwzi3cXJF/2Tjj39Bm/OEfYTOJDNYtBwB0VVH4ffa/6\n" + "tZl87jaIkrxJcreeeHqYMnIxeN0b/kliyA+a5L2Yb0VPjt9INq34QDc1v74FNZ17\n" + "4z8nr1nzg4xsOWu0Dbjo966lm4nOYIGBRGOKEkHZRZ4mEiMgr3YLkv8gSmeitx57\n" + "Z6dVemNtUic/LVo5Iqw4n3TBS0iF2C1Q1xT/s3h+0SXZlfOWttzSluDvoMv5PvCd\n" + "pFjNn+aXLAALoihL1MJSsxydtsLjOBro5eK0Vw==\n" + "-----END CERTIFICATE-----\n", - "-----BEGIN CERTIFICATE-----\n" + "MIIEBzCCAu+gAwIBAgICUYkwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n" + "MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n" + "DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n" + "MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxODIx\n" + "MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n" + "aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n" + "ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n" + "em9uIFJEUyB1cy13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" + "ADCCAQoCggEBANCEZBZyu6yJQFZBJmSUZfSZd3Ui2gitczMKC4FLr0QzkbxY+cLa\n" + "uVONIOrPt4Rwi+3h/UdnUg917xao3S53XDf1TDMFEYp4U8EFPXqCn/GXBIWlU86P\n" + "PvBN+gzw3nS+aco7WXb+woTouvFVkk8FGU7J532llW8o/9ydQyDIMtdIkKTuMfho\n" + "OiNHSaNc+QXQ32TgvM9A/6q7ksUoNXGCP8hDOkSZ/YOLiI5TcdLh/aWj00ziL5bj\n" + "pvytiMZkilnc9dLY9QhRNr0vGqL0xjmWdoEXz9/OwjmCihHqJq+20MJPsvFm7D6a\n" + "2NKybR9U+ddrjb8/iyLOjURUZnj5O+2+OPcCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n" + "AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEBxMBdv81xuzqcK5TVu\n" + "pHj+Aor8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQBZkfiVqGoJjBI37aTlLOSjLcjI75L5wBrwO39q+B4cwcmpj58P\n" + "3sivv+jhYfAGEbQnGRzjuFoyPzWnZ1DesRExX+wrmHsLLQbF2kVjLZhEJMHF9eB7\n" + "GZlTPdTzHErcnuXkwA/OqyXMpj9aghcQFuhCNguEfnROY9sAoK2PTfnTz9NJHL+Q\n" + "UpDLEJEUfc0GZMVWYhahc0x38ZnSY2SKacIPECQrTI0KpqZv/P+ijCEcMD9xmYEb\n" + "jL4en+XKS1uJpw5fIU5Sj0MxhdGstH6S84iAE5J3GM3XHklGSFwwqPYvuTXvANH6\n" + "uboynxRgSae59jIlAK6Jrr6GWMwQRbgcaAlW\n" + "-----END CERTIFICATE-----\n" - ] - }; -}); - -// node_modules/mysql/lib/ConnectionConfig.js -var require_ConnectionConfig = __commonJS((exports, module) => { - var urlParse = __require("url").parse; - var ClientConstants = require_client(); - var Charsets = require_charsets(); - var SSLProfiles = null; - module.exports = ConnectionConfig; - function ConnectionConfig(options) { - if (typeof options === "string") { - options = ConnectionConfig.parseUrl(options); - } - this.host = options.host || "localhost"; - this.port = options.port || 3306; - this.localAddress = options.localAddress; - this.socketPath = options.socketPath; - this.user = options.user || undefined; - this.password = options.password || undefined; - this.database = options.database; - this.connectTimeout = options.connectTimeout === undefined ? 10 * 1000 : options.connectTimeout; - this.insecureAuth = options.insecureAuth || false; - this.supportBigNumbers = options.supportBigNumbers || false; - this.bigNumberStrings = options.bigNumberStrings || false; - this.dateStrings = options.dateStrings || false; - this.debug = options.debug; - this.trace = options.trace !== false; - this.stringifyObjects = options.stringifyObjects || false; - this.timezone = options.timezone || "local"; - this.flags = options.flags || ""; - this.queryFormat = options.queryFormat; - this.pool = options.pool || undefined; - this.ssl = typeof options.ssl === "string" ? ConnectionConfig.getSSLProfile(options.ssl) : options.ssl || false; - this.localInfile = options.localInfile === undefined ? true : options.localInfile; - this.multipleStatements = options.multipleStatements || false; - this.typeCast = options.typeCast === undefined ? true : options.typeCast; - if (this.timezone[0] === " ") { - this.timezone = "+" + this.timezone.substr(1); - } - if (this.ssl) { - this.ssl.rejectUnauthorized = this.ssl.rejectUnauthorized !== false; - } - this.maxPacketSize = 0; - this.charsetNumber = options.charset ? ConnectionConfig.getCharsetNumber(options.charset) : options.charsetNumber || Charsets.UTF8_GENERAL_CI; - var defaultFlags = ConnectionConfig.getDefaultFlags(options); - this.clientFlags = ConnectionConfig.mergeFlags(defaultFlags, options.flags); - } - ConnectionConfig.mergeFlags = function mergeFlags(defaultFlags, userFlags) { - var allFlags = ConnectionConfig.parseFlagList(defaultFlags); - var newFlags = ConnectionConfig.parseFlagList(userFlags); - for (var flag in newFlags) { - if (allFlags[flag] !== false) { - allFlags[flag] = newFlags[flag]; - } - } - var flags = 0; - for (var flag in allFlags) { - if (allFlags[flag]) { - flags |= ClientConstants["CLIENT_" + flag] || 0; - } - } - return flags; - }; - ConnectionConfig.getCharsetNumber = function getCharsetNumber(charset) { - var num = Charsets[charset.toUpperCase()]; - if (num === undefined) { - throw new TypeError("Unknown charset \'" + charset + "\'"); - } - return num; - }; - ConnectionConfig.getDefaultFlags = function getDefaultFlags(options) { - var defaultFlags = [ - "-COMPRESS", - "-CONNECT_ATTRS", - "+CONNECT_WITH_DB", - "+FOUND_ROWS", - "+IGNORE_SIGPIPE", - "+IGNORE_SPACE", - "+LOCAL_FILES", - "+LONG_FLAG", - "+LONG_PASSWORD", - "+MULTI_RESULTS", - "+ODBC", - "-PLUGIN_AUTH", - "+PROTOCOL_41", - "+PS_MULTI_RESULTS", - "+RESERVED", - "+SECURE_CONNECTION", - "+TRANSACTIONS" - ]; - if (options && options.localInfile !== undefined && !options.localInfile) { - defaultFlags.push("-LOCAL_FILES"); - } - if (options && options.multipleStatements) { - defaultFlags.push("+MULTI_STATEMENTS"); - } - return defaultFlags; - }; - ConnectionConfig.getSSLProfile = function getSSLProfile(name) { - if (!SSLProfiles) { - SSLProfiles = require_ssl_profiles(); - } - var ssl = SSLProfiles[name]; - if (ssl === undefined) { - throw new TypeError("Unknown SSL profile \'" + name + "\'"); - } - return ssl; - }; - ConnectionConfig.parseFlagList = function parseFlagList(flagList) { - var allFlags = Object.create(null); - if (!flagList) { - return allFlags; - } - var flags = !Array.isArray(flagList) ? String(flagList || "").toUpperCase().split(/\s*,+\s*/) : flagList; - for (var i = 0;i < flags.length; i++) { - var flag = flags[i]; - var offset = 1; - var state = flag[0]; - if (state === undefined) { - continue; - } - if (state !== "-" && state !== "+") { - offset = 0; - state = "+"; - } - allFlags[flag.substr(offset)] = state === "+"; - } - return allFlags; - }; - ConnectionConfig.parseUrl = function(url) { - url = urlParse(url, true); - var options = { - host: url.hostname, - port: url.port, - database: url.pathname.substr(1) - }; - if (url.auth) { - var auth = url.auth.split(":"); - options.user = auth.shift(); - options.password = auth.join(":"); - } - if (url.query) { - for (var key in url.query) { - var value = url.query[key]; - try { - options[key] = JSON.parse(value); - } catch (err) { - options[key] = value; - } - } - } - return options; - }; -}); - -// node_modules/mysql/lib/protocol/PacketHeader.js -var require_PacketHeader = __commonJS((exports, module) => { - module.exports = PacketHeader; - function PacketHeader(length, number) { - this.length = length; - this.number = number; - } -}); - -// node_modules/bignumber.js/bignumber.js -var require_bignumber = __commonJS((exports, module) => { - (function(globalObject) { - var BigNumber, isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, mathceil = Math.ceil, mathfloor = Math.floor, bignumberError = "[BigNumber Error] ", tooManyDigits = bignumberError + "Number primitive has more than 15 significant digits: ", BASE = 100000000000000, LOG_BASE = 14, MAX_SAFE_INTEGER = 9007199254740991, POWS_TEN = [1, 10, 100, 1000, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 10000000000, 100000000000, 1000000000000, 10000000000000], SQRT_BASE = 1e7, MAX = 1e9; - function clone(configObject) { - var div, convertBase, parseNumeric, P = BigNumber2.prototype = { constructor: BigNumber2, toString: null, valueOf: null }, ONE = new BigNumber2(1), DECIMAL_PLACES = 20, ROUNDING_MODE = 4, TO_EXP_NEG = -7, TO_EXP_POS = 21, MIN_EXP = -1e7, MAX_EXP = 1e7, CRYPTO = false, MODULO_MODE = 1, POW_PRECISION = 0, FORMAT = { - prefix: "", - groupSize: 3, - secondaryGroupSize: 0, - groupSeparator: ",", - decimalSeparator: ".", - fractionGroupSize: 0, - fractionGroupSeparator: "\xA0", - suffix: "" - }, ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz"; - function BigNumber2(v, b) { - var alphabet, c, caseChanged, e, i, isNum, len, str, x = this; - if (!(x instanceof BigNumber2)) - return new BigNumber2(v, b); - if (b == null) { - if (v && v._isBigNumber === true) { - x.s = v.s; - if (!v.c || v.e > MAX_EXP) { - x.c = x.e = null; - } else if (v.e < MIN_EXP) { - x.c = [x.e = 0]; - } else { - x.e = v.e; - x.c = v.c.slice(); - } - return; - } - if ((isNum = typeof v == "number") && v * 0 == 0) { - x.s = 1 / v < 0 ? (v = -v, -1) : 1; - if (v === ~~v) { - for (e = 0, i = v;i >= 10; i /= 10, e++) - ; - if (e > MAX_EXP) { - x.c = x.e = null; - } else { - x.e = e; - x.c = [v]; - } - return; - } - str = String(v); - } else { - if (!isNumeric.test(str = String(v))) - return parseNumeric(x, str, isNum); - x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; - } - if ((e = str.indexOf(".")) > -1) - str = str.replace(".", ""); - if ((i = str.search(/e/i)) > 0) { - if (e < 0) - e = i; - e += +str.slice(i + 1); - str = str.substring(0, i); - } else if (e < 0) { - e = str.length; - } - } else { - intCheck(b, 2, ALPHABET.length, "Base"); - if (b == 10) { - x = new BigNumber2(v); - return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); - } - str = String(v); - if (isNum = typeof v == "number") { - if (v * 0 != 0) - return parseNumeric(x, str, isNum, b); - x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; - if (BigNumber2.DEBUG && str.replace(/^0\.0*|\./, "").length > 15) { - throw Error(tooManyDigits + v); - } - } else { - x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; - } - alphabet = ALPHABET.slice(0, b); - e = i = 0; - for (len = str.length;i < len; i++) { - if (alphabet.indexOf(c = str.charAt(i)) < 0) { - if (c == ".") { - if (i > e) { - e = len; - continue; - } - } else if (!caseChanged) { - if (str == str.toUpperCase() && (str = str.toLowerCase()) || str == str.toLowerCase() && (str = str.toUpperCase())) { - caseChanged = true; - i = -1; - e = 0; - continue; - } - } - return parseNumeric(x, String(v), isNum, b); - } - } - isNum = false; - str = convertBase(str, b, 10, x.s); - if ((e = str.indexOf(".")) > -1) - str = str.replace(".", ""); - else - e = str.length; - } - for (i = 0;str.charCodeAt(i) === 48; i++) - ; - for (len = str.length;str.charCodeAt(--len) === 48; ) - ; - if (str = str.slice(i, ++len)) { - len -= i; - if (isNum && BigNumber2.DEBUG && len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { - throw Error(tooManyDigits + x.s * v); - } - if ((e = e - i - 1) > MAX_EXP) { - x.c = x.e = null; - } else if (e < MIN_EXP) { - x.c = [x.e = 0]; - } else { - x.e = e; - x.c = []; - i = (e + 1) % LOG_BASE; - if (e < 0) - i += LOG_BASE; - if (i < len) { - if (i) - x.c.push(+str.slice(0, i)); - for (len -= LOG_BASE;i < len; ) { - x.c.push(+str.slice(i, i += LOG_BASE)); - } - i = LOG_BASE - (str = str.slice(i)).length; - } else { - i -= len; - } - for (;i--; str += "0") - ; - x.c.push(+str); - } - } else { - x.c = [x.e = 0]; - } - } - BigNumber2.clone = clone; - BigNumber2.ROUND_UP = 0; - BigNumber2.ROUND_DOWN = 1; - BigNumber2.ROUND_CEIL = 2; - BigNumber2.ROUND_FLOOR = 3; - BigNumber2.ROUND_HALF_UP = 4; - BigNumber2.ROUND_HALF_DOWN = 5; - BigNumber2.ROUND_HALF_EVEN = 6; - BigNumber2.ROUND_HALF_CEIL = 7; - BigNumber2.ROUND_HALF_FLOOR = 8; - BigNumber2.EUCLID = 9; - BigNumber2.config = BigNumber2.set = function(obj) { - var p, v; - if (obj != null) { - if (typeof obj == "object") { - if (obj.hasOwnProperty(p = "DECIMAL_PLACES")) { - v = obj[p]; - intCheck(v, 0, MAX, p); - DECIMAL_PLACES = v; - } - if (obj.hasOwnProperty(p = "ROUNDING_MODE")) { - v = obj[p]; - intCheck(v, 0, 8, p); - ROUNDING_MODE = v; - } - if (obj.hasOwnProperty(p = "EXPONENTIAL_AT")) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, 0, p); - intCheck(v[1], 0, MAX, p); - TO_EXP_NEG = v[0]; - TO_EXP_POS = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); - } - } - if (obj.hasOwnProperty(p = "RANGE")) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, -1, p); - intCheck(v[1], 1, MAX, p); - MIN_EXP = v[0]; - MAX_EXP = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - if (v) { - MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); - } else { - throw Error(bignumberError + p + " cannot be zero: " + v); - } - } - } - if (obj.hasOwnProperty(p = "CRYPTO")) { - v = obj[p]; - if (v === !!v) { - if (v) { - if (typeof crypto != "undefined" && crypto && (crypto.getRandomValues || crypto.randomBytes)) { - CRYPTO = v; - } else { - CRYPTO = !v; - throw Error(bignumberError + "crypto unavailable"); - } - } else { - CRYPTO = v; - } - } else { - throw Error(bignumberError + p + " not true or false: " + v); - } - } - if (obj.hasOwnProperty(p = "MODULO_MODE")) { - v = obj[p]; - intCheck(v, 0, 9, p); - MODULO_MODE = v; - } - if (obj.hasOwnProperty(p = "POW_PRECISION")) { - v = obj[p]; - intCheck(v, 0, MAX, p); - POW_PRECISION = v; - } - if (obj.hasOwnProperty(p = "FORMAT")) { - v = obj[p]; - if (typeof v == "object") - FORMAT = v; - else - throw Error(bignumberError + p + " not an object: " + v); - } - if (obj.hasOwnProperty(p = "ALPHABET")) { - v = obj[p]; - if (typeof v == "string" && !/^.$|[+-.\s]|(.).*\1/.test(v)) { - ALPHABET = v; - } else { - throw Error(bignumberError + p + " invalid: " + v); - } - } - } else { - throw Error(bignumberError + "Object expected: " + obj); - } - } - return { - DECIMAL_PLACES, - ROUNDING_MODE, - EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], - RANGE: [MIN_EXP, MAX_EXP], - CRYPTO, - MODULO_MODE, - POW_PRECISION, - FORMAT, - ALPHABET - }; - }; - BigNumber2.isBigNumber = function(v) { - if (!v || v._isBigNumber !== true) - return false; - if (!BigNumber2.DEBUG) - return true; - var i, n, c = v.c, e = v.e, s = v.s; - out: - if ({}.toString.call(c) == "[object Array]") { - if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { - if (c[0] === 0) { - if (e === 0 && c.length === 1) - return true; - break out; - } - i = (e + 1) % LOG_BASE; - if (i < 1) - i += LOG_BASE; - if (String(c[0]).length == i) { - for (i = 0;i < c.length; i++) { - n = c[i]; - if (n < 0 || n >= BASE || n !== mathfloor(n)) - break out; - } - if (n !== 0) - return true; - } - } - } else if (c === null && e === null && (s === null || s === 1 || s === -1)) { - return true; - } - throw Error(bignumberError + "Invalid BigNumber: " + v); - }; - BigNumber2.maximum = BigNumber2.max = function() { - return maxOrMin(arguments, P.lt); - }; - BigNumber2.minimum = BigNumber2.min = function() { - return maxOrMin(arguments, P.gt); - }; - BigNumber2.random = function() { - var pow2_53 = 9007199254740992; - var random53bitInt = Math.random() * pow2_53 & 2097151 ? function() { - return mathfloor(Math.random() * pow2_53); - } : function() { - return (Math.random() * 1073741824 | 0) * 8388608 + (Math.random() * 8388608 | 0); - }; - return function(dp) { - var a, b, e, k, v, i = 0, c = [], rand = new BigNumber2(ONE); - if (dp == null) - dp = DECIMAL_PLACES; - else - intCheck(dp, 0, MAX); - k = mathceil(dp / LOG_BASE); - if (CRYPTO) { - if (crypto.getRandomValues) { - a = crypto.getRandomValues(new Uint32Array(k *= 2)); - for (;i < k; ) { - v = a[i] * 131072 + (a[i + 1] >>> 11); - if (v >= 9000000000000000) { - b = crypto.getRandomValues(new Uint32Array(2)); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - c.push(v % 100000000000000); - i += 2; - } - } - i = k / 2; - } else if (crypto.randomBytes) { - a = crypto.randomBytes(k *= 7); - for (;i < k; ) { - v = (a[i] & 31) * 281474976710656 + a[i + 1] * 1099511627776 + a[i + 2] * 4294967296 + a[i + 3] * 16777216 + (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; - if (v >= 9000000000000000) { - crypto.randomBytes(7).copy(a, i); - } else { - c.push(v % 100000000000000); - i += 7; - } - } - i = k / 7; - } else { - CRYPTO = false; - throw Error(bignumberError + "crypto unavailable"); - } - } - if (!CRYPTO) { - for (;i < k; ) { - v = random53bitInt(); - if (v < 9000000000000000) - c[i++] = v % 100000000000000; - } - } - k = c[--i]; - dp %= LOG_BASE; - if (k && dp) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor(k / v) * v; - } - for (;c[i] === 0; c.pop(), i--) - ; - if (i < 0) { - c = [e = 0]; - } else { - for (e = -1;c[0] === 0; c.splice(0, 1), e -= LOG_BASE) - ; - for (i = 1, v = c[0];v >= 10; v /= 10, i++) - ; - if (i < LOG_BASE) - e -= LOG_BASE - i; - } - rand.e = e; - rand.c = c; - return rand; - }; - }(); - BigNumber2.sum = function() { - var i = 1, args = arguments, sum = new BigNumber2(args[0]); - for (;i < args.length; ) - sum = sum.plus(args[i++]); - return sum; - }; - convertBase = function() { - var decimal = "0123456789"; - function toBaseOut(str, baseIn, baseOut, alphabet) { - var j, arr = [0], arrL, i = 0, len = str.length; - for (;i < len; ) { - for (arrL = arr.length;arrL--; arr[arrL] *= baseIn) - ; - arr[0] += alphabet.indexOf(str.charAt(i++)); - for (j = 0;j < arr.length; j++) { - if (arr[j] > baseOut - 1) { - if (arr[j + 1] == null) - arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - return arr.reverse(); - } - return function(str, baseIn, baseOut, sign, callerIsToString) { - var alphabet, d, e, k, r, x, xc, y, i = str.indexOf("."), dp = DECIMAL_PLACES, rm = ROUNDING_MODE; - if (i >= 0) { - k = POW_PRECISION; - POW_PRECISION = 0; - str = str.replace(".", ""); - y = new BigNumber2(baseIn); - x = y.pow(str.length - i); - POW_PRECISION = k; - y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, "0"), 10, baseOut, decimal); - y.e = y.c.length; - } - xc = toBaseOut(str, baseIn, baseOut, callerIsToString ? (alphabet = ALPHABET, decimal) : (alphabet = decimal, ALPHABET)); - e = k = xc.length; - for (;xc[--k] == 0; xc.pop()) - ; - if (!xc[0]) - return alphabet.charAt(0); - if (i < 0) { - --e; - } else { - x.c = xc; - x.e = e; - x.s = sign; - x = div(x, y, dp, rm, baseOut); - xc = x.c; - r = x.r; - e = x.e; - } - d = e + dp + 1; - i = xc[d]; - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : i > k || i == k && (rm == 4 || r || rm == 6 && xc[d - 1] & 1 || rm == (x.s < 0 ? 8 : 7)); - if (d < 1 || !xc[0]) { - str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); - } else { - xc.length = d; - if (r) { - for (--baseOut;++xc[--d] > baseOut; ) { - xc[d] = 0; - if (!d) { - ++e; - xc = [1].concat(xc); - } - } - } - for (k = xc.length;!xc[--k]; ) - ; - for (i = 0, str = "";i <= k; str += alphabet.charAt(xc[i++])) - ; - str = toFixedPoint(str, e, alphabet.charAt(0)); - } - return str; - }; - }(); - div = function() { - function multiply(x, k, base) { - var m, temp, xlo, xhi, carry = 0, i = x.length, klo = k % SQRT_BASE, khi = k / SQRT_BASE | 0; - for (x = x.slice();i--; ) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + m % SQRT_BASE * SQRT_BASE + carry; - carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; - x[i] = temp % base; - } - if (carry) - x = [carry].concat(x); - return x; - } - function compare2(a, b, aL, bL) { - var i, cmp; - if (aL != bL) { - cmp = aL > bL ? 1 : -1; - } else { - for (i = cmp = 0;i < aL; i++) { - if (a[i] != b[i]) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - return cmp; - } - function subtract(a, b, aL, base) { - var i = 0; - for (;aL--; ) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - for (;!a[0] && a.length > 1; a.splice(0, 1)) - ; - } - return function(x, y, dp, rm, base) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, yL, yz, s = x.s == y.s ? 1 : -1, xc = x.c, yc = y.c; - if (!xc || !xc[0] || !yc || !yc[0]) { - return new BigNumber2(!x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : xc && xc[0] == 0 || !yc ? s * 0 : s / 0); - } - q = new BigNumber2(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - if (!base) { - base = BASE; - e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); - s = s / LOG_BASE | 0; - } - for (i = 0;yc[i] == (xc[i] || 0); i++) - ; - if (yc[i] > (xc[i] || 0)) - e--; - if (s < 0) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - n = mathfloor(base / (yc[0] + 1)); - if (n > 1) { - yc = multiply(yc, n, base); - xc = multiply(xc, n, base); - yL = yc.length; - xL = xc.length; - } - xi = yL; - rem = xc.slice(0, yL); - remL = rem.length; - for (;remL < yL; rem[remL++] = 0) - ; - yz = yc.slice(); - yz = [0].concat(yz); - yc0 = yc[0]; - if (yc[1] >= base / 2) - yc0++; - do { - n = 0; - cmp = compare2(yc, rem, yL, remL); - if (cmp < 0) { - rem0 = rem[0]; - if (yL != remL) - rem0 = rem0 * base + (rem[1] || 0); - n = mathfloor(rem0 / yc0); - if (n > 1) { - if (n >= base) - n = base - 1; - prod = multiply(yc, n, base); - prodL = prod.length; - remL = rem.length; - while (compare2(prod, rem, prodL, remL) == 1) { - n--; - subtract(prod, yL < prodL ? yz : yc, prodL, base); - prodL = prod.length; - cmp = 1; - } - } else { - if (n == 0) { - cmp = n = 1; - } - prod = yc.slice(); - prodL = prod.length; - } - if (prodL < remL) - prod = [0].concat(prod); - subtract(rem, prod, remL, base); - remL = rem.length; - if (cmp == -1) { - while (compare2(yc, rem, yL, remL) < 1) { - n++; - subtract(rem, yL < remL ? yz : yc, remL, base); - remL = rem.length; - } - } - } else if (cmp === 0) { - n++; - rem = [0]; - } - qc[i++] = n; - if (rem[0]) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [xc[xi]]; - remL = 1; - } - } while ((xi++ < xL || rem[0] != null) && s--); - more = rem[0] != null; - if (!qc[0]) - qc.splice(0, 1); - } - if (base == BASE) { - for (i = 1, s = qc[0];s >= 10; s /= 10, i++) - ; - round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); - } else { - q.e = e; - q.r = +more; - } - return q; - }; - }(); - function format(n, i, rm, id) { - var c0, e, ne, len, str; - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - if (!n.c) - return n.toString(); - c0 = n.c[0]; - ne = n.e; - if (i == null) { - str = coeffToString(n.c); - str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) ? toExponential(str, ne) : toFixedPoint(str, ne, "0"); - } else { - n = round(new BigNumber2(n), i, rm); - e = n.e; - str = coeffToString(n.c); - len = str.length; - if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { - for (;len < i; str += "0", len++) - ; - str = toExponential(str, e); - } else { - i -= ne; - str = toFixedPoint(str, e, "0"); - if (e + 1 > len) { - if (--i > 0) - for (str += ".";i--; str += "0") - ; - } else { - i += e - len; - if (i > 0) { - if (e + 1 == len) - str += "."; - for (;i--; str += "0") - ; - } - } - } - } - return n.s < 0 && c0 ? "-" + str : str; - } - function maxOrMin(args, method) { - var n, i = 1, m = new BigNumber2(args[0]); - for (;i < args.length; i++) { - n = new BigNumber2(args[i]); - if (!n.s) { - m = n; - break; - } else if (method.call(m, n)) { - m = n; - } - } - return m; - } - function normalise(n, c, e) { - var i = 1, j = c.length; - for (;!c[--j]; c.pop()) - ; - for (j = c[0];j >= 10; j /= 10, i++) - ; - if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { - n.c = n.e = null; - } else if (e < MIN_EXP) { - n.c = [n.e = 0]; - } else { - n.e = e; - n.c = c; - } - return n; - } - parseNumeric = function() { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, dotAfter = /^([^.]+)\.$/, dotBefore = /^\.([^.]+)$/, isInfinityOrNaN = /^-?(Infinity|NaN)$/, whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - return function(x, str, isNum, b) { - var base, s = isNum ? str : str.replace(whitespaceOrPlus, ""); - if (isInfinityOrNaN.test(s)) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if (!isNum) { - s = s.replace(basePrefix, function(m, p1, p2) { - base = (p2 = p2.toLowerCase()) == "x" ? 16 : p2 == "b" ? 2 : 8; - return !b || b == base ? p1 : m; - }); - if (b) { - base = b; - s = s.replace(dotAfter, "$1").replace(dotBefore, "0.$1"); - } - if (str != s) - return new BigNumber2(s, base); - } - if (BigNumber2.DEBUG) { - throw Error(bignumberError + "Not a" + (b ? " base " + b : "") + " number: " + str); - } - x.s = null; - } - x.c = x.e = null; - }; - }(); - function round(x, sd, rm, r) { - var d, i, j, k, n, ni, rd, xc = x.c, pows10 = POWS_TEN; - if (xc) { - out: { - for (d = 1, k = xc[0];k >= 10; k /= 10, d++) - ; - i = sd - d; - if (i < 0) { - i += LOG_BASE; - j = sd; - n = xc[ni = 0]; - rd = n / pows10[d - j - 1] % 10 | 0; - } else { - ni = mathceil((i + 1) / LOG_BASE); - if (ni >= xc.length) { - if (r) { - for (;xc.length <= ni; xc.push(0)) - ; - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - for (d = 1;k >= 10; k /= 10, d++) - ; - i %= LOG_BASE; - j = i - LOG_BASE + d; - rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0; - } - } - r = r || sd < 0 || xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); - r = rm < 4 ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && (i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10 & 1 || rm == (x.s < 0 ? 8 : 7)); - if (sd < 1 || !xc[0]) { - xc.length = 0; - if (r) { - sd -= x.e + 1; - xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; - x.e = -sd || 0; - } else { - xc[0] = x.e = 0; - } - return x; - } - if (i == 0) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[LOG_BASE - i]; - xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; - } - if (r) { - for (;; ) { - if (ni == 0) { - for (i = 1, j = xc[0];j >= 10; j /= 10, i++) - ; - j = xc[0] += k; - for (k = 1;j >= 10; j /= 10, k++) - ; - if (i != k) { - x.e++; - if (xc[0] == BASE) - xc[0] = 1; - } - break; - } else { - xc[ni] += k; - if (xc[ni] != BASE) - break; - xc[ni--] = 0; - k = 1; - } - } - } - for (i = xc.length;xc[--i] === 0; xc.pop()) - ; - } - if (x.e > MAX_EXP) { - x.c = x.e = null; - } else if (x.e < MIN_EXP) { - x.c = [x.e = 0]; - } - } - return x; - } - function valueOf(n) { - var str, e = n.e; - if (e === null) - return n.toString(); - str = coeffToString(n.c); - str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(str, e) : toFixedPoint(str, e, "0"); - return n.s < 0 ? "-" + str : str; - } - P.absoluteValue = P.abs = function() { - var x = new BigNumber2(this); - if (x.s < 0) - x.s = 1; - return x; - }; - P.comparedTo = function(y, b) { - return compare(this, new BigNumber2(y, b)); - }; - P.decimalPlaces = P.dp = function(dp, rm) { - var c, n, v, x = this; - if (dp != null) { - intCheck(dp, 0, MAX); - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - return round(new BigNumber2(x), dp + x.e + 1, rm); - } - if (!(c = x.c)) - return null; - n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; - if (v = c[v]) - for (;v % 10 == 0; v /= 10, n--) - ; - if (n < 0) - n = 0; - return n; - }; - P.dividedBy = P.div = function(y, b) { - return div(this, new BigNumber2(y, b), DECIMAL_PLACES, ROUNDING_MODE); - }; - P.dividedToIntegerBy = P.idiv = function(y, b) { - return div(this, new BigNumber2(y, b), 0, 1); - }; - P.exponentiatedBy = P.pow = function(n, m) { - var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, x = this; - n = new BigNumber2(n); - if (n.c && !n.isInteger()) { - throw Error(bignumberError + "Exponent not an integer: " + valueOf(n)); - } - if (m != null) - m = new BigNumber2(m); - nIsBig = n.e > 14; - if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { - y = new BigNumber2(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n))); - return m ? y.mod(m) : y; - } - nIsNeg = n.s < 0; - if (m) { - if (m.c ? !m.c[0] : !m.s) - return new BigNumber2(NaN); - isModExp = !nIsNeg && x.isInteger() && m.isInteger(); - if (isModExp) - x = x.mod(m); - } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 ? x.c[0] > 1 || nIsBig && x.c[1] >= 240000000 : x.c[0] < 80000000000000 || nIsBig && x.c[0] <= 99999750000000))) { - k = x.s < 0 && isOdd(n) ? -0 : 0; - if (x.e > -1) - k = 1 / k; - return new BigNumber2(nIsNeg ? 1 / k : k); - } else if (POW_PRECISION) { - k = mathceil(POW_PRECISION / LOG_BASE + 2); - } - if (nIsBig) { - half = new BigNumber2(0.5); - if (nIsNeg) - n.s = 1; - nIsOdd = isOdd(n); - } else { - i = Math.abs(+valueOf(n)); - nIsOdd = i % 2; - } - y = new BigNumber2(ONE); - for (;; ) { - if (nIsOdd) { - y = y.times(x); - if (!y.c) - break; - if (k) { - if (y.c.length > k) - y.c.length = k; - } else if (isModExp) { - y = y.mod(m); - } - } - if (i) { - i = mathfloor(i / 2); - if (i === 0) - break; - nIsOdd = i % 2; - } else { - n = n.times(half); - round(n, n.e + 1, 1); - if (n.e > 14) { - nIsOdd = isOdd(n); - } else { - i = +valueOf(n); - if (i === 0) - break; - nIsOdd = i % 2; - } - } - x = x.times(x); - if (k) { - if (x.c && x.c.length > k) - x.c.length = k; - } else if (isModExp) { - x = x.mod(m); - } - } - if (isModExp) - return y; - if (nIsNeg) - y = ONE.div(y); - return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; - }; - P.integerValue = function(rm) { - var n = new BigNumber2(this); - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - return round(n, n.e + 1, rm); - }; - P.isEqualTo = P.eq = function(y, b) { - return compare(this, new BigNumber2(y, b)) === 0; - }; - P.isFinite = function() { - return !!this.c; - }; - P.isGreaterThan = P.gt = function(y, b) { - return compare(this, new BigNumber2(y, b)) > 0; - }; - P.isGreaterThanOrEqualTo = P.gte = function(y, b) { - return (b = compare(this, new BigNumber2(y, b))) === 1 || b === 0; - }; - P.isInteger = function() { - return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; - }; - P.isLessThan = P.lt = function(y, b) { - return compare(this, new BigNumber2(y, b)) < 0; - }; - P.isLessThanOrEqualTo = P.lte = function(y, b) { - return (b = compare(this, new BigNumber2(y, b))) === -1 || b === 0; - }; - P.isNaN = function() { - return !this.s; - }; - P.isNegative = function() { - return this.s < 0; - }; - P.isPositive = function() { - return this.s > 0; - }; - P.isZero = function() { - return !!this.c && this.c[0] == 0; - }; - P.minus = function(y, b) { - var i, j, t, xLTy, x = this, a = x.s; - y = new BigNumber2(y, b); - b = y.s; - if (!a || !b) - return new BigNumber2(NaN); - if (a != b) { - y.s = -b; - return x.plus(y); - } - var xe = x.e / LOG_BASE, ye = y.e / LOG_BASE, xc = x.c, yc = y.c; - if (!xe || !ye) { - if (!xc || !yc) - return xc ? (y.s = -b, y) : new BigNumber2(yc ? x : NaN); - if (!xc[0] || !yc[0]) { - return yc[0] ? (y.s = -b, y) : new BigNumber2(xc[0] ? x : ROUNDING_MODE == 3 ? -0 : 0); - } - } - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - if (a = xe - ye) { - if (xLTy = a < 0) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - t.reverse(); - for (b = a;b--; t.push(0)) - ; - t.reverse(); - } else { - j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; - for (a = b = 0;b < j; b++) { - if (xc[b] != yc[b]) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - if (xLTy) - t = xc, xc = yc, yc = t, y.s = -y.s; - b = (j = yc.length) - (i = xc.length); - if (b > 0) - for (;b--; xc[i++] = 0) - ; - b = BASE - 1; - for (;j > a; ) { - if (xc[--j] < yc[j]) { - for (i = j;i && !xc[--i]; xc[i] = b) - ; - --xc[i]; - xc[j] += BASE; - } - xc[j] -= yc[j]; - } - for (;xc[0] == 0; xc.splice(0, 1), --ye) - ; - if (!xc[0]) { - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [y.e = 0]; - return y; - } - return normalise(y, xc, ye); - }; - P.modulo = P.mod = function(y, b) { - var q, s, x = this; - y = new BigNumber2(y, b); - if (!x.c || !y.s || y.c && !y.c[0]) { - return new BigNumber2(NaN); - } else if (!y.c || x.c && !x.c[0]) { - return new BigNumber2(x); - } - if (MODULO_MODE == 9) { - s = y.s; - y.s = 1; - q = div(x, y, 0, 3); - y.s = s; - q.s *= s; - } else { - q = div(x, y, 0, MODULO_MODE); - } - y = x.minus(q.times(y)); - if (!y.c[0] && MODULO_MODE == 1) - y.s = x.s; - return y; - }; - P.multipliedBy = P.times = function(y, b) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, base, sqrtBase, x = this, xc = x.c, yc = (y = new BigNumber2(y, b)).c; - if (!xc || !yc || !xc[0] || !yc[0]) { - if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - if (!xc || !yc) { - y.c = y.e = null; - } else { - y.c = [0]; - y.e = 0; - } - } - return y; - } - e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - if (xcL < ycL) - zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - for (i = xcL + ycL, zc = [];i--; zc.push(0)) - ; - base = BASE; - sqrtBase = SQRT_BASE; - for (i = ycL;--i >= 0; ) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - for (k = xcL, j = i + k;j > i; ) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + m % sqrtBase * sqrtBase + zc[j] + c; - c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; - zc[j--] = xlo % base; - } - zc[j] = c; - } - if (c) { - ++e; - } else { - zc.splice(0, 1); - } - return normalise(y, zc, e); - }; - P.negated = function() { - var x = new BigNumber2(this); - x.s = -x.s || null; - return x; - }; - P.plus = function(y, b) { - var t, x = this, a = x.s; - y = new BigNumber2(y, b); - b = y.s; - if (!a || !b) - return new BigNumber2(NaN); - if (a != b) { - y.s = -b; - return x.minus(y); - } - var xe = x.e / LOG_BASE, ye = y.e / LOG_BASE, xc = x.c, yc = y.c; - if (!xe || !ye) { - if (!xc || !yc) - return new BigNumber2(a / 0); - if (!xc[0] || !yc[0]) - return yc[0] ? y : new BigNumber2(xc[0] ? x : a * 0); - } - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - if (a = xe - ye) { - if (a > 0) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - t.reverse(); - for (;a--; t.push(0)) - ; - t.reverse(); - } - a = xc.length; - b = yc.length; - if (a - b < 0) - t = yc, yc = xc, xc = t, b = a; - for (a = 0;b; ) { - a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; - xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; - } - if (a) { - xc = [a].concat(xc); - ++ye; - } - return normalise(y, xc, ye); - }; - P.precision = P.sd = function(sd, rm) { - var c, n, v, x = this; - if (sd != null && sd !== !!sd) { - intCheck(sd, 1, MAX); - if (rm == null) - rm = ROUNDING_MODE; - else - intCheck(rm, 0, 8); - return round(new BigNumber2(x), sd, rm); - } - if (!(c = x.c)) - return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - if (v = c[v]) { - for (;v % 10 == 0; v /= 10, n--) - ; - for (v = c[0];v >= 10; v /= 10, n++) - ; - } - if (sd && x.e + 1 > n) - n = x.e + 1; - return n; - }; - P.shiftedBy = function(k) { - intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - return this.times("1e" + k); - }; - P.squareRoot = P.sqrt = function() { - var m, n, r, rep, t, x = this, c = x.c, s = x.s, e = x.e, dp = DECIMAL_PLACES + 4, half = new BigNumber2("0.5"); - if (s !== 1 || !c || !c[0]) { - return new BigNumber2(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); - } - s = Math.sqrt(+valueOf(x)); - if (s == 0 || s == 1 / 0) { - n = coeffToString(c); - if ((n.length + e) % 2 == 0) - n += "0"; - s = Math.sqrt(+n); - e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); - if (s == 1 / 0) { - n = "1e" + e; - } else { - n = s.toExponential(); - n = n.slice(0, n.indexOf("e") + 1) + e; - } - r = new BigNumber2(n); - } else { - r = new BigNumber2(s + ""); - } - if (r.c[0]) { - e = r.e; - s = e + dp; - if (s < 3) - s = 0; - for (;; ) { - t = r; - r = half.times(t.plus(div(x, t, dp, 1))); - if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) { - if (r.e < e) - --s; - n = n.slice(s - 3, s + 1); - if (n == "9999" || !rep && n == "4999") { - if (!rep) { - round(t, t.e + DECIMAL_PLACES + 2, 0); - if (t.times(t).eq(x)) { - r = t; - break; - } - } - dp += 4; - s += 4; - rep = 1; - } else { - if (!+n || !+n.slice(1) && n.charAt(0) == "5") { - round(r, r.e + DECIMAL_PLACES + 2, 1); - m = !r.times(r).eq(x); - } - break; - } - } - } - } - return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); - }; - P.toExponential = function(dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp++; - } - return format(this, dp, rm, 1); - }; - P.toFixed = function(dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp = dp + this.e + 1; - } - return format(this, dp, rm); - }; - P.toFormat = function(dp, rm, format2) { - var str, x = this; - if (format2 == null) { - if (dp != null && rm && typeof rm == "object") { - format2 = rm; - rm = null; - } else if (dp && typeof dp == "object") { - format2 = dp; - dp = rm = null; - } else { - format2 = FORMAT; - } - } else if (typeof format2 != "object") { - throw Error(bignumberError + "Argument not an object: " + format2); - } - str = x.toFixed(dp, rm); - if (x.c) { - var i, arr = str.split("."), g1 = +format2.groupSize, g2 = +format2.secondaryGroupSize, groupSeparator = format2.groupSeparator || "", intPart = arr[0], fractionPart = arr[1], isNeg = x.s < 0, intDigits = isNeg ? intPart.slice(1) : intPart, len = intDigits.length; - if (g2) - i = g1, g1 = g2, g2 = i, len -= i; - if (g1 > 0 && len > 0) { - i = len % g1 || g1; - intPart = intDigits.substr(0, i); - for (;i < len; i += g1) - intPart += groupSeparator + intDigits.substr(i, g1); - if (g2 > 0) - intPart += groupSeparator + intDigits.slice(i); - if (isNeg) - intPart = "-" + intPart; - } - str = fractionPart ? intPart + (format2.decimalSeparator || "") + ((g2 = +format2.fractionGroupSize) ? fractionPart.replace(new RegExp("\\d{" + g2 + "}\\B", "g"), "$&" + (format2.fractionGroupSeparator || "")) : fractionPart) : intPart; - } - return (format2.prefix || "") + str + (format2.suffix || ""); - }; - P.toFraction = function(md) { - var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, x = this, xc = x.c; - if (md != null) { - n = new BigNumber2(md); - if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { - throw Error(bignumberError + "Argument " + (n.isInteger() ? "out of range: " : "not an integer: ") + valueOf(n)); - } - } - if (!xc) - return new BigNumber2(x); - d = new BigNumber2(ONE); - n1 = d0 = new BigNumber2(ONE); - d1 = n0 = new BigNumber2(ONE); - s = coeffToString(xc); - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; - md = !md || n.comparedTo(d) > 0 ? e > 0 ? d : n1 : n; - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber2(s); - n0.c[0] = 0; - for (;; ) { - q = div(n, d, 0, 1); - d2 = d0.plus(q.times(d1)); - if (d2.comparedTo(md) == 1) - break; - d0 = d1; - d1 = d2; - n1 = n0.plus(q.times(d2 = n1)); - n0 = d2; - d = n.minus(q.times(d2 = d)); - n = d2; - } - d2 = div(md.minus(d0), d1, 0, 1); - n0 = n0.plus(d2.times(n1)); - d0 = d0.plus(d2.times(d1)); - n0.s = n1.s = x.s; - e = e * 2; - r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; - MAX_EXP = exp; - return r; - }; - P.toNumber = function() { - return +valueOf(this); - }; - P.toPrecision = function(sd, rm) { - if (sd != null) - intCheck(sd, 1, MAX); - return format(this, sd, rm, 2); - }; - P.toString = function(b) { - var str, n = this, s = n.s, e = n.e; - if (e === null) { - if (s) { - str = "Infinity"; - if (s < 0) - str = "-" + str; - } else { - str = "NaN"; - } - } else { - if (b == null) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(coeffToString(n.c), e) : toFixedPoint(coeffToString(n.c), e, "0"); - } else if (b === 10) { - n = round(new BigNumber2(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); - str = toFixedPoint(coeffToString(n.c), n.e, "0"); - } else { - intCheck(b, 2, ALPHABET.length, "Base"); - str = convertBase(toFixedPoint(coeffToString(n.c), e, "0"), 10, b, s, true); - } - if (s < 0 && n.c[0]) - str = "-" + str; - } - return str; - }; - P.valueOf = P.toJSON = function() { - return valueOf(this); - }; - P._isBigNumber = true; - if (configObject != null) - BigNumber2.set(configObject); - return BigNumber2; - } - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - function coeffToString(a) { - var s, z, i = 1, j = a.length, r = a[0] + ""; - for (;i < j; ) { - s = a[i++] + ""; - z = LOG_BASE - s.length; - for (;z--; s = "0" + s) - ; - r += s; - } - for (j = r.length;r.charCodeAt(--j) === 48; ) - ; - return r.slice(0, j + 1 || 1); - } - function compare(x, y) { - var a, b, xc = x.c, yc = y.c, i = x.s, j = y.s, k = x.e, l = y.e; - if (!i || !j) - return null; - a = xc && !xc[0]; - b = yc && !yc[0]; - if (a || b) - return a ? b ? 0 : -j : i; - if (i != j) - return i; - a = i < 0; - b = k == l; - if (!xc || !yc) - return b ? 0 : !xc ^ a ? 1 : -1; - if (!b) - return k > l ^ a ? 1 : -1; - j = (k = xc.length) < (l = yc.length) ? k : l; - for (i = 0;i < j; i++) - if (xc[i] != yc[i]) - return xc[i] > yc[i] ^ a ? 1 : -1; - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - function intCheck(n, min, max, name) { - if (n < min || n > max || n !== mathfloor(n)) { - throw Error(bignumberError + (name || "Argument") + (typeof n == "number" ? n < min || n > max ? " out of range: " : " not an integer: " : " not a primitive number: ") + String(n)); - } - } - function isOdd(n) { - var k = n.c.length - 1; - return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; - } - function toExponential(str, e) { - return (str.length > 1 ? str.charAt(0) + "." + str.slice(1) : str) + (e < 0 ? "e" : "e+") + e; - } - function toFixedPoint(str, e, z) { - var len, zs; - if (e < 0) { - for (zs = z + ".";++e; zs += z) - ; - str = zs + str; - } else { - len = str.length; - if (++e > len) { - for (zs = z, e -= len;--e; zs += z) - ; - str += zs; - } else if (e < len) { - str = str.slice(0, e) + "." + str.slice(e); - } - } - return str; - } - BigNumber = clone(); - BigNumber["default"] = BigNumber.BigNumber = BigNumber; - if (typeof define == "function" && define.amd) { - define(function() { - return BigNumber; - }); - } else if (typeof module != "undefined" && module.exports) { - module.exports = BigNumber; - } else { - if (!globalObject) { - globalObject = typeof self != "undefined" && self ? self : window; - } - globalObject.BigNumber = BigNumber; - } - })(exports); -}); - -// node_modules/safe-buffer/index.js -var require_safe_buffer = __commonJS((exports, module) => { - var buffer = __require("buffer"); - var Buffer2 = buffer.Buffer; - function copyProps(src, dst) { - for (var key in src) { - dst[key] = src[key]; - } - } - if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { - module.exports = buffer; - } else { - copyProps(buffer, exports); - exports.Buffer = SafeBuffer; - } - function SafeBuffer(arg, encodingOrOffset, length) { - return Buffer2(arg, encodingOrOffset, length); - } - copyProps(Buffer2, SafeBuffer); - SafeBuffer.from = function(arg, encodingOrOffset, length) { - if (typeof arg === "number") { - throw new TypeError("Argument must not be a number"); - } - return Buffer2(arg, encodingOrOffset, length); - }; - SafeBuffer.alloc = function(size, fill, encoding) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - var buf = Buffer2(size); - if (fill !== undefined) { - if (typeof encoding === "string") { - buf.fill(fill, encoding); - } else { - buf.fill(fill); - } - } else { - buf.fill(0); - } - return buf; - }; - SafeBuffer.allocUnsafe = function(size) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - return Buffer2(size); - }; - SafeBuffer.allocUnsafeSlow = function(size) { - if (typeof size !== "number") { - throw new TypeError("Argument must be a number"); - } - return buffer.SlowBuffer(size); - }; -}); - -// node_modules/mysql/lib/protocol/BufferList.js -var require_BufferList = __commonJS((exports, module) => { - module.exports = BufferList; - function BufferList() { - this.bufs = []; - this.size = 0; - } - BufferList.prototype.shift = function shift() { - var buf = this.bufs.shift(); - if (buf) { - this.size -= buf.length; - } - return buf; - }; - BufferList.prototype.push = function push(buf) { - if (!buf || !buf.length) { - return; - } - this.bufs.push(buf); - this.size += buf.length; - }; -}); - -// node_modules/mysql/lib/protocol/Parser.js -var require_Parser = __commonJS((exports, module) => { - var PacketHeader = require_PacketHeader(); - var BigNumber = require_bignumber(); - var Buffer2 = require_safe_buffer().Buffer; - var BufferList = require_BufferList(); - var MAX_PACKET_LENGTH = Math.pow(2, 24) - 1; - var MUL_32BIT = Math.pow(2, 32); - var PACKET_HEADER_LENGTH = 4; - module.exports = Parser; - function Parser(options) { - options = options || {}; - this._supportBigNumbers = options.config && options.config.supportBigNumbers; - this._buffer = Buffer2.alloc(0); - this._nextBuffers = new BufferList; - this._longPacketBuffers = new BufferList; - this._offset = 0; - this._packetEnd = null; - this._packetHeader = null; - this._packetOffset = null; - this._onError = options.onError || function(err) { - throw err; - }; - this._onPacket = options.onPacket || function() { - }; - this._nextPacketNumber = 0; - this._encoding = "utf-8"; - this._paused = false; - } - Parser.prototype.write = function write(chunk) { - this._nextBuffers.push(chunk); - while (!this._paused) { - var packetHeader = this._tryReadPacketHeader(); - if (!packetHeader) { - break; - } - if (!this._combineNextBuffers(packetHeader.length)) { - break; - } - this._parsePacket(packetHeader); - } - }; - Parser.prototype.append = function append(chunk) { - if (!chunk || chunk.length === 0) { - return; - } - var sliceEnd = this._buffer.length; - var sliceStart = this._packetOffset === null ? this._offset : this._packetOffset; - var sliceLength = sliceEnd - sliceStart; - var buffer = null; - var chunks = !(chunk instanceof Array || Array.isArray(chunk)) ? [chunk] : chunk; - var length = 0; - var offset = 0; - for (var i = 0;i < chunks.length; i++) { - length += chunks[i].length; - } - if (sliceLength !== 0) { - buffer = Buffer2.allocUnsafe(sliceLength + length); - offset = 0; - offset += this._buffer.copy(buffer, 0, sliceStart, sliceEnd); - for (var i = 0;i < chunks.length; i++) { - offset += chunks[i].copy(buffer, offset); - } - } else if (chunks.length > 1) { - buffer = Buffer2.allocUnsafe(length); - offset = 0; - for (var i = 0;i < chunks.length; i++) { - offset += chunks[i].copy(buffer, offset); - } - } else { - buffer = chunks[0]; - } - this._buffer = buffer; - this._offset = this._offset - sliceStart; - this._packetEnd = this._packetEnd !== null ? this._packetEnd - sliceStart : null; - this._packetOffset = this._packetOffset !== null ? this._packetOffset - sliceStart : null; - }; - Parser.prototype.pause = function() { - this._paused = true; - }; - Parser.prototype.resume = function() { - this._paused = false; - process.nextTick(this.write.bind(this)); - }; - Parser.prototype.peak = function peak(offset) { - return this._buffer[this._offset + (offset >>> 0)]; - }; - Parser.prototype.parseUnsignedNumber = function parseUnsignedNumber(bytes) { - if (bytes === 1) { - return this._buffer[this._offset++]; - } - var buffer = this._buffer; - var offset = this._offset + bytes - 1; - var value = 0; - if (bytes > 4) { - var err = new Error("parseUnsignedNumber: Supports only up to 4 bytes"); - err.offset = this._offset - this._packetOffset - 1; - err.code = "PARSER_UNSIGNED_TOO_LONG"; - throw err; - } - while (offset >= this._offset) { - value = (value << 8 | buffer[offset]) >>> 0; - offset--; - } - this._offset += bytes; - return value; - }; - Parser.prototype.parseLengthCodedString = function() { - var length = this.parseLengthCodedNumber(); - if (length === null) { - return null; - } - return this.parseString(length); - }; - Parser.prototype.parseLengthCodedBuffer = function() { - var length = this.parseLengthCodedNumber(); - if (length === null) { - return null; - } - return this.parseBuffer(length); - }; - Parser.prototype.parseLengthCodedNumber = function parseLengthCodedNumber() { - if (this._offset >= this._buffer.length) { - var err = new Error("Parser: read past end"); - err.offset = this._offset - this._packetOffset; - err.code = "PARSER_READ_PAST_END"; - throw err; - } - var bits = this._buffer[this._offset++]; - if (bits <= 250) { - return bits; - } - switch (bits) { - case 251: - return null; - case 252: - return this.parseUnsignedNumber(2); - case 253: - return this.parseUnsignedNumber(3); - case 254: - break; - default: - var err = new Error("Unexpected first byte" + (bits ? ": 0x" + bits.toString(16) : "")); - err.offset = this._offset - this._packetOffset - 1; - err.code = "PARSER_BAD_LENGTH_BYTE"; - throw err; - } - var low = this.parseUnsignedNumber(4); - var high = this.parseUnsignedNumber(4); - var value; - if (high >>> 21) { - value = BigNumber(MUL_32BIT).times(high).plus(low).toString(); - if (this._supportBigNumbers) { - return value; - } - var err = new Error("parseLengthCodedNumber: JS precision range exceeded, " + 'number is >= 53 bit: "' + value + '"'); - err.offset = this._offset - this._packetOffset - 8; - err.code = "PARSER_JS_PRECISION_RANGE_EXCEEDED"; - throw err; - } - value = low + MUL_32BIT * high; - return value; - }; - Parser.prototype.parseFiller = function(length) { - return this.parseBuffer(length); - }; - Parser.prototype.parseNullTerminatedBuffer = function() { - var end = this._nullByteOffset(); - var value = this._buffer.slice(this._offset, end); - this._offset = end + 1; - return value; - }; - Parser.prototype.parseNullTerminatedString = function() { - var end = this._nullByteOffset(); - var value = this._buffer.toString(this._encoding, this._offset, end); - this._offset = end + 1; - return value; - }; - Parser.prototype._nullByteOffset = function() { - var offset = this._offset; - while (this._buffer[offset] !== 0) { - offset++; - if (offset >= this._buffer.length) { - var err = new Error("Offset of null terminated string not found."); - err.offset = this._offset - this._packetOffset; - err.code = "PARSER_MISSING_NULL_BYTE"; - throw err; - } - } - return offset; - }; - Parser.prototype.parsePacketTerminatedBuffer = function parsePacketTerminatedBuffer() { - var length = this._packetEnd - this._offset; - return this.parseBuffer(length); - }; - Parser.prototype.parsePacketTerminatedString = function() { - var length = this._packetEnd - this._offset; - return this.parseString(length); - }; - Parser.prototype.parseBuffer = function(length) { - var response = Buffer2.alloc(length); - this._buffer.copy(response, 0, this._offset, this._offset + length); - this._offset += length; - return response; - }; - Parser.prototype.parseString = function(length) { - var offset = this._offset; - var end = offset + length; - var value = this._buffer.toString(this._encoding, offset, end); - this._offset = end; - return value; - }; - Parser.prototype.parseGeometryValue = function() { - var buffer = this.parseLengthCodedBuffer(); - var offset = 4; - if (buffer === null || !buffer.length) { - return null; - } - function parseGeometry() { - var result = null; - var byteOrder = buffer.readUInt8(offset); - offset += 1; - var wkbType = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); - offset += 4; - switch (wkbType) { - case 1: - var x = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); - offset += 8; - var y = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); - offset += 8; - result = { x, y }; - break; - case 2: - var numPoints = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); - offset += 4; - result = []; - for (var i = numPoints;i > 0; i--) { - var x = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); - offset += 8; - var y = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); - offset += 8; - result.push({ x, y }); - } - break; - case 3: - var numRings = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); - offset += 4; - result = []; - for (var i = numRings;i > 0; i--) { - var numPoints = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); - offset += 4; - var line = []; - for (var j = numPoints;j > 0; j--) { - var x = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); - offset += 8; - var y = byteOrder ? buffer.readDoubleLE(offset) : buffer.readDoubleBE(offset); - offset += 8; - line.push({ x, y }); - } - result.push(line); - } - break; - case 4: - case 5: - case 6: - case 7: - var num = byteOrder ? buffer.readUInt32LE(offset) : buffer.readUInt32BE(offset); - offset += 4; - var result = []; - for (var i = num;i > 0; i--) { - result.push(parseGeometry()); - } - break; - } - return result; - } - return parseGeometry(); - }; - Parser.prototype.reachedPacketEnd = function() { - return this._offset === this._packetEnd; - }; - Parser.prototype.incrementPacketNumber = function() { - var currentPacketNumber = this._nextPacketNumber; - this._nextPacketNumber = (this._nextPacketNumber + 1) % 256; - return currentPacketNumber; - }; - Parser.prototype.resetPacketNumber = function() { - this._nextPacketNumber = 0; - }; - Parser.prototype.packetLength = function packetLength() { - if (!this._packetHeader) { - return null; - } - return this._packetHeader.length + this._longPacketBuffers.size; - }; - Parser.prototype._combineNextBuffers = function _combineNextBuffers(bytes) { - var length = this._buffer.length - this._offset; - if (length >= bytes) { - return true; - } - if (length + this._nextBuffers.size < bytes) { - return false; - } - var buffers = []; - var bytesNeeded = bytes - length; - while (bytesNeeded > 0) { - var buffer = this._nextBuffers.shift(); - buffers.push(buffer); - bytesNeeded -= buffer.length; - } - this.append(buffers); - return true; - }; - Parser.prototype._combineLongPacketBuffers = function _combineLongPacketBuffers() { - if (!this._longPacketBuffers.size) { - return; - } - var remainingBytes = this._buffer.length - this._offset; - var trailingPacketBytes = this._buffer.length - this._packetEnd; - var buf = null; - var buffer = Buffer2.allocUnsafe(remainingBytes + this._longPacketBuffers.size); - var offset = 0; - while (buf = this._longPacketBuffers.shift()) { - offset += buf.copy(buffer, offset); - } - this._buffer.copy(buffer, offset, this._offset); - this._buffer = buffer; - this._offset = 0; - this._packetEnd = this._buffer.length - trailingPacketBytes; - this._packetOffset = 0; - }; - Parser.prototype._parsePacket = function _parsePacket(packetHeader) { - this._packetEnd = this._offset + packetHeader.length; - this._packetOffset = this._offset; - if (packetHeader.length === MAX_PACKET_LENGTH) { - this._longPacketBuffers.push(this._buffer.slice(this._packetOffset, this._packetEnd)); - this._advanceToNextPacket(); - return; - } - this._combineLongPacketBuffers(); - var hadException = true; - try { - this._onPacket(packetHeader); - hadException = false; - } catch (err) { - if (!err || typeof err.code !== "string" || err.code.substr(0, 7) !== "PARSER_") { - throw err; - } - this._onError(err); - hadException = false; - } finally { - this._advanceToNextPacket(); - if (hadException) { - process.nextTick(this.write.bind(this)); - } - } - }; - Parser.prototype._tryReadPacketHeader = function _tryReadPacketHeader() { - if (this._packetHeader) { - return this._packetHeader; - } - if (!this._combineNextBuffers(PACKET_HEADER_LENGTH)) { - return null; - } - this._packetHeader = new PacketHeader(this.parseUnsignedNumber(3), this.parseUnsignedNumber(1)); - if (this._packetHeader.number !== this._nextPacketNumber) { - var err = new Error("Packets out of order. Got: " + this._packetHeader.number + " " + "Expected: " + this._nextPacketNumber); - err.code = "PROTOCOL_PACKETS_OUT_OF_ORDER"; - err.fatal = true; - this._onError(err); - } - this.incrementPacketNumber(); - return this._packetHeader; - }; - Parser.prototype._advanceToNextPacket = function() { - this._offset = this._packetEnd; - this._packetHeader = null; - this._packetEnd = null; - this._packetOffset = null; - }; -}); - -// node_modules/mysql/lib/protocol/packets/AuthSwitchRequestPacket.js -var require_AuthSwitchRequestPacket = __commonJS((exports, module) => { - module.exports = AuthSwitchRequestPacket; - function AuthSwitchRequestPacket(options) { - options = options || {}; - this.status = 254; - this.authMethodName = options.authMethodName; - this.authMethodData = options.authMethodData; - } - AuthSwitchRequestPacket.prototype.parse = function parse(parser) { - this.status = parser.parseUnsignedNumber(1); - this.authMethodName = parser.parseNullTerminatedString(); - this.authMethodData = parser.parsePacketTerminatedBuffer(); - }; - AuthSwitchRequestPacket.prototype.write = function write(writer) { - writer.writeUnsignedNumber(1, this.status); - writer.writeNullTerminatedString(this.authMethodName); - writer.writeBuffer(this.authMethodData); - }; -}); - -// node_modules/mysql/lib/protocol/packets/AuthSwitchResponsePacket.js -var require_AuthSwitchResponsePacket = __commonJS((exports, module) => { - module.exports = AuthSwitchResponsePacket; - function AuthSwitchResponsePacket(options) { - options = options || {}; - this.data = options.data; - } - AuthSwitchResponsePacket.prototype.parse = function parse(parser) { - this.data = parser.parsePacketTerminatedBuffer(); - }; - AuthSwitchResponsePacket.prototype.write = function write(writer) { - writer.writeBuffer(this.data); - }; -}); - -// node_modules/mysql/lib/protocol/packets/ClientAuthenticationPacket.js -var require_ClientAuthenticationPacket = __commonJS((exports, module) => { - var Buffer2 = require_safe_buffer().Buffer; - module.exports = ClientAuthenticationPacket; - function ClientAuthenticationPacket(options) { - options = options || {}; - this.clientFlags = options.clientFlags; - this.maxPacketSize = options.maxPacketSize; - this.charsetNumber = options.charsetNumber; - this.filler = undefined; - this.user = options.user; - this.scrambleBuff = options.scrambleBuff; - this.database = options.database; - this.protocol41 = options.protocol41; - } - ClientAuthenticationPacket.prototype.parse = function(parser) { - if (this.protocol41) { - this.clientFlags = parser.parseUnsignedNumber(4); - this.maxPacketSize = parser.parseUnsignedNumber(4); - this.charsetNumber = parser.parseUnsignedNumber(1); - this.filler = parser.parseFiller(23); - this.user = parser.parseNullTerminatedString(); - this.scrambleBuff = parser.parseLengthCodedBuffer(); - this.database = parser.parseNullTerminatedString(); - } else { - this.clientFlags = parser.parseUnsignedNumber(2); - this.maxPacketSize = parser.parseUnsignedNumber(3); - this.user = parser.parseNullTerminatedString(); - this.scrambleBuff = parser.parseBuffer(8); - this.database = parser.parseLengthCodedBuffer(); - } - }; - ClientAuthenticationPacket.prototype.write = function(writer) { - if (this.protocol41) { - writer.writeUnsignedNumber(4, this.clientFlags); - writer.writeUnsignedNumber(4, this.maxPacketSize); - writer.writeUnsignedNumber(1, this.charsetNumber); - writer.writeFiller(23); - writer.writeNullTerminatedString(this.user); - writer.writeLengthCodedBuffer(this.scrambleBuff); - writer.writeNullTerminatedString(this.database); - } else { - writer.writeUnsignedNumber(2, this.clientFlags); - writer.writeUnsignedNumber(3, this.maxPacketSize); - writer.writeNullTerminatedString(this.user); - writer.writeBuffer(this.scrambleBuff); - if (this.database && this.database.length) { - writer.writeFiller(1); - writer.writeBuffer(Buffer2.from(this.database)); - } - } - }; -}); - -// node_modules/mysql/lib/protocol/packets/ComChangeUserPacket.js -var require_ComChangeUserPacket = __commonJS((exports, module) => { - module.exports = ComChangeUserPacket; - function ComChangeUserPacket(options) { - options = options || {}; - this.command = 17; - this.user = options.user; - this.scrambleBuff = options.scrambleBuff; - this.database = options.database; - this.charsetNumber = options.charsetNumber; - } - ComChangeUserPacket.prototype.parse = function(parser) { - this.command = parser.parseUnsignedNumber(1); - this.user = parser.parseNullTerminatedString(); - this.scrambleBuff = parser.parseLengthCodedBuffer(); - this.database = parser.parseNullTerminatedString(); - this.charsetNumber = parser.parseUnsignedNumber(1); - }; - ComChangeUserPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, this.command); - writer.writeNullTerminatedString(this.user); - writer.writeLengthCodedBuffer(this.scrambleBuff); - writer.writeNullTerminatedString(this.database); - writer.writeUnsignedNumber(2, this.charsetNumber); - }; -}); - -// node_modules/mysql/lib/protocol/packets/ComPingPacket.js -var require_ComPingPacket = __commonJS((exports, module) => { - module.exports = ComPingPacket; - function ComPingPacket() { - this.command = 14; - } - ComPingPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, this.command); - }; - ComPingPacket.prototype.parse = function(parser) { - this.command = parser.parseUnsignedNumber(1); - }; -}); - -// node_modules/mysql/lib/protocol/packets/ComQueryPacket.js -var require_ComQueryPacket = __commonJS((exports, module) => { - module.exports = ComQueryPacket; - function ComQueryPacket(sql) { - this.command = 3; - this.sql = sql; - } - ComQueryPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, this.command); - writer.writeString(this.sql); - }; - ComQueryPacket.prototype.parse = function(parser) { - this.command = parser.parseUnsignedNumber(1); - this.sql = parser.parsePacketTerminatedString(); - }; -}); - -// node_modules/mysql/lib/protocol/packets/ComQuitPacket.js -var require_ComQuitPacket = __commonJS((exports, module) => { - module.exports = ComQuitPacket; - function ComQuitPacket() { - this.command = 1; - } - ComQuitPacket.prototype.parse = function parse(parser) { - this.command = parser.parseUnsignedNumber(1); - }; - ComQuitPacket.prototype.write = function write(writer) { - writer.writeUnsignedNumber(1, this.command); - }; -}); - -// node_modules/mysql/lib/protocol/packets/ComStatisticsPacket.js -var require_ComStatisticsPacket = __commonJS((exports, module) => { - module.exports = ComStatisticsPacket; - function ComStatisticsPacket() { - this.command = 9; - } - ComStatisticsPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, this.command); - }; - ComStatisticsPacket.prototype.parse = function(parser) { - this.command = parser.parseUnsignedNumber(1); - }; -}); - -// node_modules/mysql/lib/protocol/packets/EmptyPacket.js -var require_EmptyPacket = __commonJS((exports, module) => { - module.exports = EmptyPacket; - function EmptyPacket() { - } - EmptyPacket.prototype.parse = function parse() { - }; - EmptyPacket.prototype.write = function write() { - }; -}); - -// node_modules/mysql/lib/protocol/packets/EofPacket.js -var require_EofPacket = __commonJS((exports, module) => { - module.exports = EofPacket; - function EofPacket(options) { - options = options || {}; - this.fieldCount = undefined; - this.warningCount = options.warningCount; - this.serverStatus = options.serverStatus; - this.protocol41 = options.protocol41; - } - EofPacket.prototype.parse = function(parser) { - this.fieldCount = parser.parseUnsignedNumber(1); - if (this.protocol41) { - this.warningCount = parser.parseUnsignedNumber(2); - this.serverStatus = parser.parseUnsignedNumber(2); - } - }; - EofPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, 254); - if (this.protocol41) { - writer.writeUnsignedNumber(2, this.warningCount); - writer.writeUnsignedNumber(2, this.serverStatus); - } - }; -}); - -// node_modules/mysql/lib/protocol/packets/ErrorPacket.js -var require_ErrorPacket = __commonJS((exports, module) => { - module.exports = ErrorPacket; - function ErrorPacket(options) { - options = options || {}; - this.fieldCount = options.fieldCount; - this.errno = options.errno; - this.sqlStateMarker = options.sqlStateMarker; - this.sqlState = options.sqlState; - this.message = options.message; - } - ErrorPacket.prototype.parse = function(parser) { - this.fieldCount = parser.parseUnsignedNumber(1); - this.errno = parser.parseUnsignedNumber(2); - if (parser.peak() === 35) { - this.sqlStateMarker = parser.parseString(1); - this.sqlState = parser.parseString(5); - } - this.message = parser.parsePacketTerminatedString(); - }; - ErrorPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, 255); - writer.writeUnsignedNumber(2, this.errno); - if (this.sqlStateMarker) { - writer.writeString(this.sqlStateMarker); - writer.writeString(this.sqlState); - } - writer.writeString(this.message); - }; -}); - -// node_modules/mysql/lib/protocol/constants/types.js -var require_types = __commonJS((exports) => { - exports.DECIMAL = 0; - exports.TINY = 1; - exports.SHORT = 2; - exports.LONG = 3; - exports.FLOAT = 4; - exports.DOUBLE = 5; - exports.NULL = 6; - exports.TIMESTAMP = 7; - exports.LONGLONG = 8; - exports.INT24 = 9; - exports.DATE = 10; - exports.TIME = 11; - exports.DATETIME = 12; - exports.YEAR = 13; - exports.NEWDATE = 14; - exports.VARCHAR = 15; - exports.BIT = 16; - exports.TIMESTAMP2 = 17; - exports.DATETIME2 = 18; - exports.TIME2 = 19; - exports.JSON = 245; - exports.NEWDECIMAL = 246; - exports.ENUM = 247; - exports.SET = 248; - exports.TINY_BLOB = 249; - exports.MEDIUM_BLOB = 250; - exports.LONG_BLOB = 251; - exports.BLOB = 252; - exports.VAR_STRING = 253; - exports.STRING = 254; - exports.GEOMETRY = 255; - exports[0] = "DECIMAL"; - exports[1] = "TINY"; - exports[2] = "SHORT"; - exports[3] = "LONG"; - exports[4] = "FLOAT"; - exports[5] = "DOUBLE"; - exports[6] = "NULL"; - exports[7] = "TIMESTAMP"; - exports[8] = "LONGLONG"; - exports[9] = "INT24"; - exports[10] = "DATE"; - exports[11] = "TIME"; - exports[12] = "DATETIME"; - exports[13] = "YEAR"; - exports[14] = "NEWDATE"; - exports[15] = "VARCHAR"; - exports[16] = "BIT"; - exports[17] = "TIMESTAMP2"; - exports[18] = "DATETIME2"; - exports[19] = "TIME2"; - exports[245] = "JSON"; - exports[246] = "NEWDECIMAL"; - exports[247] = "ENUM"; - exports[248] = "SET"; - exports[249] = "TINY_BLOB"; - exports[250] = "MEDIUM_BLOB"; - exports[251] = "LONG_BLOB"; - exports[252] = "BLOB"; - exports[253] = "VAR_STRING"; - exports[254] = "STRING"; - exports[255] = "GEOMETRY"; -}); - -// node_modules/mysql/lib/protocol/packets/Field.js -var require_Field = __commonJS((exports, module) => { - var Types = require_types(); - module.exports = Field; - function Field(options) { - options = options || {}; - this.parser = options.parser; - this.packet = options.packet; - this.db = options.packet.db; - this.table = options.packet.table; - this.name = options.packet.name; - this.type = Types[options.packet.type]; - this.length = options.packet.length; - } - Field.prototype.string = function() { - return this.parser.parseLengthCodedString(); - }; - Field.prototype.buffer = function() { - return this.parser.parseLengthCodedBuffer(); - }; - Field.prototype.geometry = function() { - return this.parser.parseGeometryValue(); - }; -}); - -// node_modules/mysql/lib/protocol/packets/FieldPacket.js -var require_FieldPacket = __commonJS((exports, module) => { - module.exports = FieldPacket; - function FieldPacket(options) { - options = options || {}; - this.catalog = options.catalog; - this.db = options.db; - this.table = options.table; - this.orgTable = options.orgTable; - this.name = options.name; - this.orgName = options.orgName; - this.charsetNr = options.charsetNr; - this.length = options.length; - this.type = options.type; - this.flags = options.flags; - this.decimals = options.decimals; - this.default = options.default; - this.zeroFill = options.zeroFill; - this.protocol41 = options.protocol41; - } - FieldPacket.prototype.parse = function(parser) { - if (this.protocol41) { - this.catalog = parser.parseLengthCodedString(); - this.db = parser.parseLengthCodedString(); - this.table = parser.parseLengthCodedString(); - this.orgTable = parser.parseLengthCodedString(); - this.name = parser.parseLengthCodedString(); - this.orgName = parser.parseLengthCodedString(); - if (parser.parseLengthCodedNumber() !== 12) { - var err = new TypeError("Received invalid field length"); - err.code = "PARSER_INVALID_FIELD_LENGTH"; - throw err; - } - this.charsetNr = parser.parseUnsignedNumber(2); - this.length = parser.parseUnsignedNumber(4); - this.type = parser.parseUnsignedNumber(1); - this.flags = parser.parseUnsignedNumber(2); - this.decimals = parser.parseUnsignedNumber(1); - var filler = parser.parseBuffer(2); - if (filler[0] !== 0 || filler[1] !== 0) { - var err = new TypeError("Received invalid filler"); - err.code = "PARSER_INVALID_FILLER"; - throw err; - } - this.zeroFill = this.flags & 64 ? true : false; - if (parser.reachedPacketEnd()) { - return; - } - this.default = parser.parseLengthCodedString(); - } else { - this.table = parser.parseLengthCodedString(); - this.name = parser.parseLengthCodedString(); - this.length = parser.parseUnsignedNumber(parser.parseUnsignedNumber(1)); - this.type = parser.parseUnsignedNumber(parser.parseUnsignedNumber(1)); - } - }; - FieldPacket.prototype.write = function(writer) { - if (this.protocol41) { - writer.writeLengthCodedString(this.catalog); - writer.writeLengthCodedString(this.db); - writer.writeLengthCodedString(this.table); - writer.writeLengthCodedString(this.orgTable); - writer.writeLengthCodedString(this.name); - writer.writeLengthCodedString(this.orgName); - writer.writeLengthCodedNumber(12); - writer.writeUnsignedNumber(2, this.charsetNr || 0); - writer.writeUnsignedNumber(4, this.length || 0); - writer.writeUnsignedNumber(1, this.type || 0); - writer.writeUnsignedNumber(2, this.flags || 0); - writer.writeUnsignedNumber(1, this.decimals || 0); - writer.writeFiller(2); - if (this.default !== undefined) { - writer.writeLengthCodedString(this.default); - } - } else { - writer.writeLengthCodedString(this.table); - writer.writeLengthCodedString(this.name); - writer.writeUnsignedNumber(1, 1); - writer.writeUnsignedNumber(1, this.length); - writer.writeUnsignedNumber(1, 1); - writer.writeUnsignedNumber(1, this.type); - } - }; -}); - -// node_modules/mysql/lib/protocol/packets/HandshakeInitializationPacket.js -var require_HandshakeInitializationPacket = __commonJS((exports, module) => { - var Buffer2 = require_safe_buffer().Buffer; - var Client = require_client(); - module.exports = HandshakeInitializationPacket; - function HandshakeInitializationPacket(options) { - options = options || {}; - this.protocolVersion = options.protocolVersion; - this.serverVersion = options.serverVersion; - this.threadId = options.threadId; - this.scrambleBuff1 = options.scrambleBuff1; - this.filler1 = options.filler1; - this.serverCapabilities1 = options.serverCapabilities1; - this.serverLanguage = options.serverLanguage; - this.serverStatus = options.serverStatus; - this.serverCapabilities2 = options.serverCapabilities2; - this.scrambleLength = options.scrambleLength; - this.filler2 = options.filler2; - this.scrambleBuff2 = options.scrambleBuff2; - this.filler3 = options.filler3; - this.pluginData = options.pluginData; - this.protocol41 = options.protocol41; - if (this.protocol41) { - this.serverCapabilities1 |= Client.CLIENT_PROTOCOL_41; - } - } - HandshakeInitializationPacket.prototype.parse = function(parser) { - this.protocolVersion = parser.parseUnsignedNumber(1); - this.serverVersion = parser.parseNullTerminatedString(); - this.threadId = parser.parseUnsignedNumber(4); - this.scrambleBuff1 = parser.parseBuffer(8); - this.filler1 = parser.parseFiller(1); - this.serverCapabilities1 = parser.parseUnsignedNumber(2); - this.serverLanguage = parser.parseUnsignedNumber(1); - this.serverStatus = parser.parseUnsignedNumber(2); - this.protocol41 = (this.serverCapabilities1 & 1 << 9) > 0; - if (this.protocol41) { - this.serverCapabilities2 = parser.parseUnsignedNumber(2); - this.scrambleLength = parser.parseUnsignedNumber(1); - this.filler2 = parser.parseFiller(10); - this.scrambleBuff2 = parser.parseBuffer(12); - this.filler3 = parser.parseFiller(1); - } else { - this.filler2 = parser.parseFiller(13); - } - if (parser.reachedPacketEnd()) { - return; - } - this.pluginData = parser.parsePacketTerminatedString(); - var lastChar = this.pluginData.length - 1; - if (this.pluginData[lastChar] === "\0") { - this.pluginData = this.pluginData.substr(0, lastChar); - } - }; - HandshakeInitializationPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, this.protocolVersion); - writer.writeNullTerminatedString(this.serverVersion); - writer.writeUnsignedNumber(4, this.threadId); - writer.writeBuffer(this.scrambleBuff1); - writer.writeFiller(1); - writer.writeUnsignedNumber(2, this.serverCapabilities1); - writer.writeUnsignedNumber(1, this.serverLanguage); - writer.writeUnsignedNumber(2, this.serverStatus); - if (this.protocol41) { - writer.writeUnsignedNumber(2, this.serverCapabilities2); - writer.writeUnsignedNumber(1, this.scrambleLength); - writer.writeFiller(10); - } - writer.writeNullTerminatedBuffer(this.scrambleBuff2); - if (this.pluginData !== undefined) { - writer.writeNullTerminatedString(this.pluginData); - } - }; - HandshakeInitializationPacket.prototype.scrambleBuff = function() { - var buffer = null; - if (typeof this.scrambleBuff2 === "undefined") { - buffer = Buffer2.from(this.scrambleBuff1); - } else { - buffer = Buffer2.allocUnsafe(this.scrambleBuff1.length + this.scrambleBuff2.length); - this.scrambleBuff1.copy(buffer, 0); - this.scrambleBuff2.copy(buffer, this.scrambleBuff1.length); - } - return buffer; - }; -}); - -// node_modules/mysql/lib/protocol/packets/LocalDataFilePacket.js -var require_LocalDataFilePacket = __commonJS((exports, module) => { - module.exports = LocalDataFilePacket; - function LocalDataFilePacket(data) { - this.data = data; - } - LocalDataFilePacket.prototype.write = function(writer) { - writer.writeBuffer(this.data); - }; -}); - -// node_modules/mysql/lib/protocol/packets/LocalInfileRequestPacket.js -var require_LocalInfileRequestPacket = __commonJS((exports, module) => { - module.exports = LocalInfileRequestPacket; - function LocalInfileRequestPacket(options) { - options = options || {}; - this.filename = options.filename; - } - LocalInfileRequestPacket.prototype.parse = function parse(parser) { - if (parser.parseLengthCodedNumber() !== null) { - var err = new TypeError("Received invalid field length"); - err.code = "PARSER_INVALID_FIELD_LENGTH"; - throw err; - } - this.filename = parser.parsePacketTerminatedString(); - }; - LocalInfileRequestPacket.prototype.write = function write(writer) { - writer.writeLengthCodedNumber(null); - writer.writeString(this.filename); - }; -}); - -// node_modules/mysql/lib/protocol/packets/OkPacket.js -var require_OkPacket = __commonJS((exports, module) => { - var ER_UPDATE_INFO_REGEXP = /^[^:0-9]+: [0-9]+[^:0-9]+: ([0-9]+)[^:0-9]+: [0-9]+[^:0-9]*$/; - module.exports = OkPacket; - function OkPacket(options) { - options = options || {}; - this.fieldCount = undefined; - this.affectedRows = undefined; - this.insertId = undefined; - this.serverStatus = undefined; - this.warningCount = undefined; - this.message = undefined; - this.protocol41 = options.protocol41; - } - OkPacket.prototype.parse = function(parser) { - this.fieldCount = parser.parseUnsignedNumber(1); - this.affectedRows = parser.parseLengthCodedNumber(); - this.insertId = parser.parseLengthCodedNumber(); - if (this.protocol41) { - this.serverStatus = parser.parseUnsignedNumber(2); - this.warningCount = parser.parseUnsignedNumber(2); - } - this.message = parser.parsePacketTerminatedString(); - this.changedRows = 0; - var m = ER_UPDATE_INFO_REGEXP.exec(this.message); - if (m !== null) { - this.changedRows = parseInt(m[1], 10); - } - }; - OkPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, 0); - writer.writeLengthCodedNumber(this.affectedRows || 0); - writer.writeLengthCodedNumber(this.insertId || 0); - if (this.protocol41) { - writer.writeUnsignedNumber(2, this.serverStatus || 0); - writer.writeUnsignedNumber(2, this.warningCount || 0); - } - writer.writeString(this.message); - }; -}); - -// node_modules/mysql/lib/protocol/packets/OldPasswordPacket.js -var require_OldPasswordPacket = __commonJS((exports, module) => { - module.exports = OldPasswordPacket; - function OldPasswordPacket(options) { - options = options || {}; - this.scrambleBuff = options.scrambleBuff; - } - OldPasswordPacket.prototype.parse = function(parser) { - this.scrambleBuff = parser.parsePacketTerminatedBuffer(); - }; - OldPasswordPacket.prototype.write = function(writer) { - writer.writeBuffer(this.scrambleBuff); - }; -}); - -// node_modules/mysql/lib/protocol/packets/ResultSetHeaderPacket.js -var require_ResultSetHeaderPacket = __commonJS((exports, module) => { - module.exports = ResultSetHeaderPacket; - function ResultSetHeaderPacket(options) { - options = options || {}; - this.fieldCount = options.fieldCount; - } - ResultSetHeaderPacket.prototype.parse = function(parser) { - this.fieldCount = parser.parseLengthCodedNumber(); - }; - ResultSetHeaderPacket.prototype.write = function(writer) { - writer.writeLengthCodedNumber(this.fieldCount); - }; -}); - -// node_modules/mysql/lib/protocol/packets/RowDataPacket.js -var require_RowDataPacket = __commonJS((exports, module) => { - var Types = require_types(); - var Charsets = require_charsets(); - var Field = require_Field(); - var IEEE_754_BINARY_64_PRECISION = Math.pow(2, 53); - module.exports = RowDataPacket; - function RowDataPacket() { - } - Object.defineProperty(RowDataPacket.prototype, "parse", { - configurable: true, - enumerable: false, - value: parse - }); - Object.defineProperty(RowDataPacket.prototype, "_typeCast", { - configurable: true, - enumerable: false, - value: typeCast - }); - function parse(parser, fieldPackets, typeCast2, nestTables, connection) { - var self2 = this; - var next = function() { - return self2._typeCast(fieldPacket, parser, connection.config.timezone, connection.config.supportBigNumbers, connection.config.bigNumberStrings, connection.config.dateStrings); - }; - for (var i = 0;i < fieldPackets.length; i++) { - var fieldPacket = fieldPackets[i]; - var value; - if (typeof typeCast2 === "function") { - value = typeCast2.apply(connection, [new Field({ packet: fieldPacket, parser }), next]); - } else { - value = typeCast2 ? this._typeCast(fieldPacket, parser, connection.config.timezone, connection.config.supportBigNumbers, connection.config.bigNumberStrings, connection.config.dateStrings) : fieldPacket.charsetNr === Charsets.BINARY ? parser.parseLengthCodedBuffer() : parser.parseLengthCodedString(); - } - if (typeof nestTables === "string" && nestTables.length) { - this[fieldPacket.table + nestTables + fieldPacket.name] = value; - } else if (nestTables) { - this[fieldPacket.table] = this[fieldPacket.table] || {}; - this[fieldPacket.table][fieldPacket.name] = value; - } else { - this[fieldPacket.name] = value; - } - } - } - function typeCast(field, parser, timeZone, supportBigNumbers, bigNumberStrings, dateStrings) { - var numberString; - switch (field.type) { - case Types.TIMESTAMP: - case Types.TIMESTAMP2: - case Types.DATE: - case Types.DATETIME: - case Types.DATETIME2: - case Types.NEWDATE: - var dateString = parser.parseLengthCodedString(); - if (typeMatch(field.type, dateStrings)) { - return dateString; - } - if (dateString === null) { - return null; - } - var originalString = dateString; - if (field.type === Types.DATE) { - dateString += " 00:00:00"; - } - if (timeZone !== "local") { - dateString += " " + timeZone; - } - var dt = new Date(dateString); - if (isNaN(dt.getTime())) { - return originalString; - } - return dt; - case Types.TINY: - case Types.SHORT: - case Types.LONG: - case Types.INT24: - case Types.YEAR: - case Types.FLOAT: - case Types.DOUBLE: - numberString = parser.parseLengthCodedString(); - return numberString === null || field.zeroFill && numberString[0] === "0" ? numberString : Number(numberString); - case Types.NEWDECIMAL: - case Types.LONGLONG: - numberString = parser.parseLengthCodedString(); - return numberString === null || field.zeroFill && numberString[0] === "0" ? numberString : supportBigNumbers && (bigNumberStrings || Number(numberString) >= IEEE_754_BINARY_64_PRECISION || Number(numberString) <= -IEEE_754_BINARY_64_PRECISION) ? numberString : Number(numberString); - case Types.BIT: - return parser.parseLengthCodedBuffer(); - case Types.STRING: - case Types.VAR_STRING: - case Types.TINY_BLOB: - case Types.MEDIUM_BLOB: - case Types.LONG_BLOB: - case Types.BLOB: - return field.charsetNr === Charsets.BINARY ? parser.parseLengthCodedBuffer() : parser.parseLengthCodedString(); - case Types.GEOMETRY: - return parser.parseGeometryValue(); - default: - return parser.parseLengthCodedString(); - } - } - function typeMatch(type, list) { - if (Array.isArray(list)) { - return list.indexOf(Types[type]) !== -1; - } else { - return Boolean(list); - } - } -}); - -// node_modules/mysql/lib/protocol/packets/SSLRequestPacket.js -var require_SSLRequestPacket = __commonJS((exports, module) => { - var ClientConstants = require_client(); - module.exports = SSLRequestPacket; - function SSLRequestPacket(options) { - options = options || {}; - this.clientFlags = options.clientFlags | ClientConstants.CLIENT_SSL; - this.maxPacketSize = options.maxPacketSize; - this.charsetNumber = options.charsetNumber; - } - SSLRequestPacket.prototype.parse = function(parser) { - this.clientFlags = parser.parseUnsignedNumber(4); - this.maxPacketSize = parser.parseUnsignedNumber(4); - this.charsetNumber = parser.parseUnsignedNumber(1); - }; - SSLRequestPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(4, this.clientFlags); - writer.writeUnsignedNumber(4, this.maxPacketSize); - writer.writeUnsignedNumber(1, this.charsetNumber); - writer.writeFiller(23); - }; -}); - -// node_modules/mysql/lib/protocol/packets/StatisticsPacket.js -var require_StatisticsPacket = __commonJS((exports, module) => { - module.exports = StatisticsPacket; - function StatisticsPacket() { - this.message = undefined; - } - StatisticsPacket.prototype.parse = function(parser) { - this.message = parser.parsePacketTerminatedString(); - var items = this.message.split(/\s\s/); - for (var i = 0;i < items.length; i++) { - var m = items[i].match(/^(.+)\:\s+(.+)$/); - if (m !== null) { - this[m[1].toLowerCase().replace(/\s/g, "_")] = Number(m[2]); - } - } - }; - StatisticsPacket.prototype.write = function(writer) { - writer.writeString(this.message); - }; -}); - -// node_modules/mysql/lib/protocol/packets/UseOldPasswordPacket.js -var require_UseOldPasswordPacket = __commonJS((exports, module) => { - module.exports = UseOldPasswordPacket; - function UseOldPasswordPacket(options) { - options = options || {}; - this.firstByte = options.firstByte || 254; - } - UseOldPasswordPacket.prototype.parse = function(parser) { - this.firstByte = parser.parseUnsignedNumber(1); - }; - UseOldPasswordPacket.prototype.write = function(writer) { - writer.writeUnsignedNumber(1, this.firstByte); - }; -}); - -// node_modules/mysql/lib/protocol/packets/index.js -var require_packets = __commonJS((exports) => { - exports.AuthSwitchRequestPacket = require_AuthSwitchRequestPacket(); - exports.AuthSwitchResponsePacket = require_AuthSwitchResponsePacket(); - exports.ClientAuthenticationPacket = require_ClientAuthenticationPacket(); - exports.ComChangeUserPacket = require_ComChangeUserPacket(); - exports.ComPingPacket = require_ComPingPacket(); - exports.ComQueryPacket = require_ComQueryPacket(); - exports.ComQuitPacket = require_ComQuitPacket(); - exports.ComStatisticsPacket = require_ComStatisticsPacket(); - exports.EmptyPacket = require_EmptyPacket(); - exports.EofPacket = require_EofPacket(); - exports.ErrorPacket = require_ErrorPacket(); - exports.Field = require_Field(); - exports.FieldPacket = require_FieldPacket(); - exports.HandshakeInitializationPacket = require_HandshakeInitializationPacket(); - exports.LocalDataFilePacket = require_LocalDataFilePacket(); - exports.LocalInfileRequestPacket = require_LocalInfileRequestPacket(); - exports.OkPacket = require_OkPacket(); - exports.OldPasswordPacket = require_OldPasswordPacket(); - exports.ResultSetHeaderPacket = require_ResultSetHeaderPacket(); - exports.RowDataPacket = require_RowDataPacket(); - exports.SSLRequestPacket = require_SSLRequestPacket(); - exports.StatisticsPacket = require_StatisticsPacket(); - exports.UseOldPasswordPacket = require_UseOldPasswordPacket(); -}); - -// node_modules/mysql/lib/protocol/constants/errors.js -var require_errors = __commonJS((exports) => { - exports.EE_CANTCREATEFILE = 1; - exports.EE_READ = 2; - exports.EE_WRITE = 3; - exports.EE_BADCLOSE = 4; - exports.EE_OUTOFMEMORY = 5; - exports.EE_DELETE = 6; - exports.EE_LINK = 7; - exports.EE_EOFERR = 9; - exports.EE_CANTLOCK = 10; - exports.EE_CANTUNLOCK = 11; - exports.EE_DIR = 12; - exports.EE_STAT = 13; - exports.EE_CANT_CHSIZE = 14; - exports.EE_CANT_OPEN_STREAM = 15; - exports.EE_GETWD = 16; - exports.EE_SETWD = 17; - exports.EE_LINK_WARNING = 18; - exports.EE_OPEN_WARNING = 19; - exports.EE_DISK_FULL = 20; - exports.EE_CANT_MKDIR = 21; - exports.EE_UNKNOWN_CHARSET = 22; - exports.EE_OUT_OF_FILERESOURCES = 23; - exports.EE_CANT_READLINK = 24; - exports.EE_CANT_SYMLINK = 25; - exports.EE_REALPATH = 26; - exports.EE_SYNC = 27; - exports.EE_UNKNOWN_COLLATION = 28; - exports.EE_FILENOTFOUND = 29; - exports.EE_FILE_NOT_CLOSED = 30; - exports.EE_CHANGE_OWNERSHIP = 31; - exports.EE_CHANGE_PERMISSIONS = 32; - exports.EE_CANT_SEEK = 33; - exports.EE_CAPACITY_EXCEEDED = 34; - exports.HA_ERR_KEY_NOT_FOUND = 120; - exports.HA_ERR_FOUND_DUPP_KEY = 121; - exports.HA_ERR_INTERNAL_ERROR = 122; - exports.HA_ERR_RECORD_CHANGED = 123; - exports.HA_ERR_WRONG_INDEX = 124; - exports.HA_ERR_CRASHED = 126; - exports.HA_ERR_WRONG_IN_RECORD = 127; - exports.HA_ERR_OUT_OF_MEM = 128; - exports.HA_ERR_NOT_A_TABLE = 130; - exports.HA_ERR_WRONG_COMMAND = 131; - exports.HA_ERR_OLD_FILE = 132; - exports.HA_ERR_NO_ACTIVE_RECORD = 133; - exports.HA_ERR_RECORD_DELETED = 134; - exports.HA_ERR_RECORD_FILE_FULL = 135; - exports.HA_ERR_INDEX_FILE_FULL = 136; - exports.HA_ERR_END_OF_FILE = 137; - exports.HA_ERR_UNSUPPORTED = 138; - exports.HA_ERR_TOO_BIG_ROW = 139; - exports.HA_WRONG_CREATE_OPTION = 140; - exports.HA_ERR_FOUND_DUPP_UNIQUE = 141; - exports.HA_ERR_UNKNOWN_CHARSET = 142; - exports.HA_ERR_WRONG_MRG_TABLE_DEF = 143; - exports.HA_ERR_CRASHED_ON_REPAIR = 144; - exports.HA_ERR_CRASHED_ON_USAGE = 145; - exports.HA_ERR_LOCK_WAIT_TIMEOUT = 146; - exports.HA_ERR_LOCK_TABLE_FULL = 147; - exports.HA_ERR_READ_ONLY_TRANSACTION = 148; - exports.HA_ERR_LOCK_DEADLOCK = 149; - exports.HA_ERR_CANNOT_ADD_FOREIGN = 150; - exports.HA_ERR_NO_REFERENCED_ROW = 151; - exports.HA_ERR_ROW_IS_REFERENCED = 152; - exports.HA_ERR_NO_SAVEPOINT = 153; - exports.HA_ERR_NON_UNIQUE_BLOCK_SIZE = 154; - exports.HA_ERR_NO_SUCH_TABLE = 155; - exports.HA_ERR_TABLE_EXIST = 156; - exports.HA_ERR_NO_CONNECTION = 157; - exports.HA_ERR_NULL_IN_SPATIAL = 158; - exports.HA_ERR_TABLE_DEF_CHANGED = 159; - exports.HA_ERR_NO_PARTITION_FOUND = 160; - exports.HA_ERR_RBR_LOGGING_FAILED = 161; - exports.HA_ERR_DROP_INDEX_FK = 162; - exports.HA_ERR_FOREIGN_DUPLICATE_KEY = 163; - exports.HA_ERR_TABLE_NEEDS_UPGRADE = 164; - exports.HA_ERR_TABLE_READONLY = 165; - exports.HA_ERR_AUTOINC_READ_FAILED = 166; - exports.HA_ERR_AUTOINC_ERANGE = 167; - exports.HA_ERR_GENERIC = 168; - exports.HA_ERR_RECORD_IS_THE_SAME = 169; - exports.HA_ERR_LOGGING_IMPOSSIBLE = 170; - exports.HA_ERR_CORRUPT_EVENT = 171; - exports.HA_ERR_NEW_FILE = 172; - exports.HA_ERR_ROWS_EVENT_APPLY = 173; - exports.HA_ERR_INITIALIZATION = 174; - exports.HA_ERR_FILE_TOO_SHORT = 175; - exports.HA_ERR_WRONG_CRC = 176; - exports.HA_ERR_TOO_MANY_CONCURRENT_TRXS = 177; - exports.HA_ERR_NOT_IN_LOCK_PARTITIONS = 178; - exports.HA_ERR_INDEX_COL_TOO_LONG = 179; - exports.HA_ERR_INDEX_CORRUPT = 180; - exports.HA_ERR_UNDO_REC_TOO_BIG = 181; - exports.HA_FTS_INVALID_DOCID = 182; - exports.HA_ERR_TABLE_IN_FK_CHECK = 183; - exports.HA_ERR_TABLESPACE_EXISTS = 184; - exports.HA_ERR_TOO_MANY_FIELDS = 185; - exports.HA_ERR_ROW_IN_WRONG_PARTITION = 186; - exports.HA_ERR_INNODB_READ_ONLY = 187; - exports.HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT = 188; - exports.HA_ERR_TEMP_FILE_WRITE_FAILURE = 189; - exports.HA_ERR_INNODB_FORCED_RECOVERY = 190; - exports.HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE = 191; - exports.HA_ERR_FK_DEPTH_EXCEEDED = 192; - exports.HA_MISSING_CREATE_OPTION = 193; - exports.HA_ERR_SE_OUT_OF_MEMORY = 194; - exports.HA_ERR_TABLE_CORRUPT = 195; - exports.HA_ERR_QUERY_INTERRUPTED = 196; - exports.HA_ERR_TABLESPACE_MISSING = 197; - exports.HA_ERR_TABLESPACE_IS_NOT_EMPTY = 198; - exports.HA_ERR_WRONG_FILE_NAME = 199; - exports.HA_ERR_NOT_ALLOWED_COMMAND = 200; - exports.HA_ERR_COMPUTE_FAILED = 201; - exports.ER_HASHCHK = 1000; - exports.ER_NISAMCHK = 1001; - exports.ER_NO = 1002; - exports.ER_YES = 1003; - exports.ER_CANT_CREATE_FILE = 1004; - exports.ER_CANT_CREATE_TABLE = 1005; - exports.ER_CANT_CREATE_DB = 1006; - exports.ER_DB_CREATE_EXISTS = 1007; - exports.ER_DB_DROP_EXISTS = 1008; - exports.ER_DB_DROP_DELETE = 1009; - exports.ER_DB_DROP_RMDIR = 1010; - exports.ER_CANT_DELETE_FILE = 1011; - exports.ER_CANT_FIND_SYSTEM_REC = 1012; - exports.ER_CANT_GET_STAT = 1013; - exports.ER_CANT_GET_WD = 1014; - exports.ER_CANT_LOCK = 1015; - exports.ER_CANT_OPEN_FILE = 1016; - exports.ER_FILE_NOT_FOUND = 1017; - exports.ER_CANT_READ_DIR = 1018; - exports.ER_CANT_SET_WD = 1019; - exports.ER_CHECKREAD = 1020; - exports.ER_DISK_FULL = 1021; - exports.ER_DUP_KEY = 1022; - exports.ER_ERROR_ON_CLOSE = 1023; - exports.ER_ERROR_ON_READ = 1024; - exports.ER_ERROR_ON_RENAME = 1025; - exports.ER_ERROR_ON_WRITE = 1026; - exports.ER_FILE_USED = 1027; - exports.ER_FILSORT_ABORT = 1028; - exports.ER_FORM_NOT_FOUND = 1029; - exports.ER_GET_ERRNO = 1030; - exports.ER_ILLEGAL_HA = 1031; - exports.ER_KEY_NOT_FOUND = 1032; - exports.ER_NOT_FORM_FILE = 1033; - exports.ER_NOT_KEYFILE = 1034; - exports.ER_OLD_KEYFILE = 1035; - exports.ER_OPEN_AS_READONLY = 1036; - exports.ER_OUTOFMEMORY = 1037; - exports.ER_OUT_OF_SORTMEMORY = 1038; - exports.ER_UNEXPECTED_EOF = 1039; - exports.ER_CON_COUNT_ERROR = 1040; - exports.ER_OUT_OF_RESOURCES = 1041; - exports.ER_BAD_HOST_ERROR = 1042; - exports.ER_HANDSHAKE_ERROR = 1043; - exports.ER_DBACCESS_DENIED_ERROR = 1044; - exports.ER_ACCESS_DENIED_ERROR = 1045; - exports.ER_NO_DB_ERROR = 1046; - exports.ER_UNKNOWN_COM_ERROR = 1047; - exports.ER_BAD_NULL_ERROR = 1048; - exports.ER_BAD_DB_ERROR = 1049; - exports.ER_TABLE_EXISTS_ERROR = 1050; - exports.ER_BAD_TABLE_ERROR = 1051; - exports.ER_NON_UNIQ_ERROR = 1052; - exports.ER_SERVER_SHUTDOWN = 1053; - exports.ER_BAD_FIELD_ERROR = 1054; - exports.ER_WRONG_FIELD_WITH_GROUP = 1055; - exports.ER_WRONG_GROUP_FIELD = 1056; - exports.ER_WRONG_SUM_SELECT = 1057; - exports.ER_WRONG_VALUE_COUNT = 1058; - exports.ER_TOO_LONG_IDENT = 1059; - exports.ER_DUP_FIELDNAME = 1060; - exports.ER_DUP_KEYNAME = 1061; - exports.ER_DUP_ENTRY = 1062; - exports.ER_WRONG_FIELD_SPEC = 1063; - exports.ER_PARSE_ERROR = 1064; - exports.ER_EMPTY_QUERY = 1065; - exports.ER_NONUNIQ_TABLE = 1066; - exports.ER_INVALID_DEFAULT = 1067; - exports.ER_MULTIPLE_PRI_KEY = 1068; - exports.ER_TOO_MANY_KEYS = 1069; - exports.ER_TOO_MANY_KEY_PARTS = 1070; - exports.ER_TOO_LONG_KEY = 1071; - exports.ER_KEY_COLUMN_DOES_NOT_EXITS = 1072; - exports.ER_BLOB_USED_AS_KEY = 1073; - exports.ER_TOO_BIG_FIELDLENGTH = 1074; - exports.ER_WRONG_AUTO_KEY = 1075; - exports.ER_READY = 1076; - exports.ER_NORMAL_SHUTDOWN = 1077; - exports.ER_GOT_SIGNAL = 1078; - exports.ER_SHUTDOWN_COMPLETE = 1079; - exports.ER_FORCING_CLOSE = 1080; - exports.ER_IPSOCK_ERROR = 1081; - exports.ER_NO_SUCH_INDEX = 1082; - exports.ER_WRONG_FIELD_TERMINATORS = 1083; - exports.ER_BLOBS_AND_NO_TERMINATED = 1084; - exports.ER_TEXTFILE_NOT_READABLE = 1085; - exports.ER_FILE_EXISTS_ERROR = 1086; - exports.ER_LOAD_INFO = 1087; - exports.ER_ALTER_INFO = 1088; - exports.ER_WRONG_SUB_KEY = 1089; - exports.ER_CANT_REMOVE_ALL_FIELDS = 1090; - exports.ER_CANT_DROP_FIELD_OR_KEY = 1091; - exports.ER_INSERT_INFO = 1092; - exports.ER_UPDATE_TABLE_USED = 1093; - exports.ER_NO_SUCH_THREAD = 1094; - exports.ER_KILL_DENIED_ERROR = 1095; - exports.ER_NO_TABLES_USED = 1096; - exports.ER_TOO_BIG_SET = 1097; - exports.ER_NO_UNIQUE_LOGFILE = 1098; - exports.ER_TABLE_NOT_LOCKED_FOR_WRITE = 1099; - exports.ER_TABLE_NOT_LOCKED = 1100; - exports.ER_BLOB_CANT_HAVE_DEFAULT = 1101; - exports.ER_WRONG_DB_NAME = 1102; - exports.ER_WRONG_TABLE_NAME = 1103; - exports.ER_TOO_BIG_SELECT = 1104; - exports.ER_UNKNOWN_ERROR = 1105; - exports.ER_UNKNOWN_PROCEDURE = 1106; - exports.ER_WRONG_PARAMCOUNT_TO_PROCEDURE = 1107; - exports.ER_WRONG_PARAMETERS_TO_PROCEDURE = 1108; - exports.ER_UNKNOWN_TABLE = 1109; - exports.ER_FIELD_SPECIFIED_TWICE = 1110; - exports.ER_INVALID_GROUP_FUNC_USE = 1111; - exports.ER_UNSUPPORTED_EXTENSION = 1112; - exports.ER_TABLE_MUST_HAVE_COLUMNS = 1113; - exports.ER_RECORD_FILE_FULL = 1114; - exports.ER_UNKNOWN_CHARACTER_SET = 1115; - exports.ER_TOO_MANY_TABLES = 1116; - exports.ER_TOO_MANY_FIELDS = 1117; - exports.ER_TOO_BIG_ROWSIZE = 1118; - exports.ER_STACK_OVERRUN = 1119; - exports.ER_WRONG_OUTER_JOIN = 1120; - exports.ER_NULL_COLUMN_IN_INDEX = 1121; - exports.ER_CANT_FIND_UDF = 1122; - exports.ER_CANT_INITIALIZE_UDF = 1123; - exports.ER_UDF_NO_PATHS = 1124; - exports.ER_UDF_EXISTS = 1125; - exports.ER_CANT_OPEN_LIBRARY = 1126; - exports.ER_CANT_FIND_DL_ENTRY = 1127; - exports.ER_FUNCTION_NOT_DEFINED = 1128; - exports.ER_HOST_IS_BLOCKED = 1129; - exports.ER_HOST_NOT_PRIVILEGED = 1130; - exports.ER_PASSWORD_ANONYMOUS_USER = 1131; - exports.ER_PASSWORD_NOT_ALLOWED = 1132; - exports.ER_PASSWORD_NO_MATCH = 1133; - exports.ER_UPDATE_INFO = 1134; - exports.ER_CANT_CREATE_THREAD = 1135; - exports.ER_WRONG_VALUE_COUNT_ON_ROW = 1136; - exports.ER_CANT_REOPEN_TABLE = 1137; - exports.ER_INVALID_USE_OF_NULL = 1138; - exports.ER_REGEXP_ERROR = 1139; - exports.ER_MIX_OF_GROUP_FUNC_AND_FIELDS = 1140; - exports.ER_NONEXISTING_GRANT = 1141; - exports.ER_TABLEACCESS_DENIED_ERROR = 1142; - exports.ER_COLUMNACCESS_DENIED_ERROR = 1143; - exports.ER_ILLEGAL_GRANT_FOR_TABLE = 1144; - exports.ER_GRANT_WRONG_HOST_OR_USER = 1145; - exports.ER_NO_SUCH_TABLE = 1146; - exports.ER_NONEXISTING_TABLE_GRANT = 1147; - exports.ER_NOT_ALLOWED_COMMAND = 1148; - exports.ER_SYNTAX_ERROR = 1149; - exports.ER_DELAYED_CANT_CHANGE_LOCK = 1150; - exports.ER_TOO_MANY_DELAYED_THREADS = 1151; - exports.ER_ABORTING_CONNECTION = 1152; - exports.ER_NET_PACKET_TOO_LARGE = 1153; - exports.ER_NET_READ_ERROR_FROM_PIPE = 1154; - exports.ER_NET_FCNTL_ERROR = 1155; - exports.ER_NET_PACKETS_OUT_OF_ORDER = 1156; - exports.ER_NET_UNCOMPRESS_ERROR = 1157; - exports.ER_NET_READ_ERROR = 1158; - exports.ER_NET_READ_INTERRUPTED = 1159; - exports.ER_NET_ERROR_ON_WRITE = 1160; - exports.ER_NET_WRITE_INTERRUPTED = 1161; - exports.ER_TOO_LONG_STRING = 1162; - exports.ER_TABLE_CANT_HANDLE_BLOB = 1163; - exports.ER_TABLE_CANT_HANDLE_AUTO_INCREMENT = 1164; - exports.ER_DELAYED_INSERT_TABLE_LOCKED = 1165; - exports.ER_WRONG_COLUMN_NAME = 1166; - exports.ER_WRONG_KEY_COLUMN = 1167; - exports.ER_WRONG_MRG_TABLE = 1168; - exports.ER_DUP_UNIQUE = 1169; - exports.ER_BLOB_KEY_WITHOUT_LENGTH = 1170; - exports.ER_PRIMARY_CANT_HAVE_NULL = 1171; - exports.ER_TOO_MANY_ROWS = 1172; - exports.ER_REQUIRES_PRIMARY_KEY = 1173; - exports.ER_NO_RAID_COMPILED = 1174; - exports.ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE = 1175; - exports.ER_KEY_DOES_NOT_EXITS = 1176; - exports.ER_CHECK_NO_SUCH_TABLE = 1177; - exports.ER_CHECK_NOT_IMPLEMENTED = 1178; - exports.ER_CANT_DO_THIS_DURING_AN_TRANSACTION = 1179; - exports.ER_ERROR_DURING_COMMIT = 1180; - exports.ER_ERROR_DURING_ROLLBACK = 1181; - exports.ER_ERROR_DURING_FLUSH_LOGS = 1182; - exports.ER_ERROR_DURING_CHECKPOINT = 1183; - exports.ER_NEW_ABORTING_CONNECTION = 1184; - exports.ER_DUMP_NOT_IMPLEMENTED = 1185; - exports.ER_FLUSH_MASTER_BINLOG_CLOSED = 1186; - exports.ER_INDEX_REBUILD = 1187; - exports.ER_MASTER = 1188; - exports.ER_MASTER_NET_READ = 1189; - exports.ER_MASTER_NET_WRITE = 1190; - exports.ER_FT_MATCHING_KEY_NOT_FOUND = 1191; - exports.ER_LOCK_OR_ACTIVE_TRANSACTION = 1192; - exports.ER_UNKNOWN_SYSTEM_VARIABLE = 1193; - exports.ER_CRASHED_ON_USAGE = 1194; - exports.ER_CRASHED_ON_REPAIR = 1195; - exports.ER_WARNING_NOT_COMPLETE_ROLLBACK = 1196; - exports.ER_TRANS_CACHE_FULL = 1197; - exports.ER_SLAVE_MUST_STOP = 1198; - exports.ER_SLAVE_NOT_RUNNING = 1199; - exports.ER_BAD_SLAVE = 1200; - exports.ER_MASTER_INFO = 1201; - exports.ER_SLAVE_THREAD = 1202; - exports.ER_TOO_MANY_USER_CONNECTIONS = 1203; - exports.ER_SET_CONSTANTS_ONLY = 1204; - exports.ER_LOCK_WAIT_TIMEOUT = 1205; - exports.ER_LOCK_TABLE_FULL = 1206; - exports.ER_READ_ONLY_TRANSACTION = 1207; - exports.ER_DROP_DB_WITH_READ_LOCK = 1208; - exports.ER_CREATE_DB_WITH_READ_LOCK = 1209; - exports.ER_WRONG_ARGUMENTS = 1210; - exports.ER_NO_PERMISSION_TO_CREATE_USER = 1211; - exports.ER_UNION_TABLES_IN_DIFFERENT_DIR = 1212; - exports.ER_LOCK_DEADLOCK = 1213; - exports.ER_TABLE_CANT_HANDLE_FT = 1214; - exports.ER_CANNOT_ADD_FOREIGN = 1215; - exports.ER_NO_REFERENCED_ROW = 1216; - exports.ER_ROW_IS_REFERENCED = 1217; - exports.ER_CONNECT_TO_MASTER = 1218; - exports.ER_QUERY_ON_MASTER = 1219; - exports.ER_ERROR_WHEN_EXECUTING_COMMAND = 1220; - exports.ER_WRONG_USAGE = 1221; - exports.ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT = 1222; - exports.ER_CANT_UPDATE_WITH_READLOCK = 1223; - exports.ER_MIXING_NOT_ALLOWED = 1224; - exports.ER_DUP_ARGUMENT = 1225; - exports.ER_USER_LIMIT_REACHED = 1226; - exports.ER_SPECIFIC_ACCESS_DENIED_ERROR = 1227; - exports.ER_LOCAL_VARIABLE = 1228; - exports.ER_GLOBAL_VARIABLE = 1229; - exports.ER_NO_DEFAULT = 1230; - exports.ER_WRONG_VALUE_FOR_VAR = 1231; - exports.ER_WRONG_TYPE_FOR_VAR = 1232; - exports.ER_VAR_CANT_BE_READ = 1233; - exports.ER_CANT_USE_OPTION_HERE = 1234; - exports.ER_NOT_SUPPORTED_YET = 1235; - exports.ER_MASTER_FATAL_ERROR_READING_BINLOG = 1236; - exports.ER_SLAVE_IGNORED_TABLE = 1237; - exports.ER_INCORRECT_GLOBAL_LOCAL_VAR = 1238; - exports.ER_WRONG_FK_DEF = 1239; - exports.ER_KEY_REF_DO_NOT_MATCH_TABLE_REF = 1240; - exports.ER_OPERAND_COLUMNS = 1241; - exports.ER_SUBQUERY_NO_1_ROW = 1242; - exports.ER_UNKNOWN_STMT_HANDLER = 1243; - exports.ER_CORRUPT_HELP_DB = 1244; - exports.ER_CYCLIC_REFERENCE = 1245; - exports.ER_AUTO_CONVERT = 1246; - exports.ER_ILLEGAL_REFERENCE = 1247; - exports.ER_DERIVED_MUST_HAVE_ALIAS = 1248; - exports.ER_SELECT_REDUCED = 1249; - exports.ER_TABLENAME_NOT_ALLOWED_HERE = 1250; - exports.ER_NOT_SUPPORTED_AUTH_MODE = 1251; - exports.ER_SPATIAL_CANT_HAVE_NULL = 1252; - exports.ER_COLLATION_CHARSET_MISMATCH = 1253; - exports.ER_SLAVE_WAS_RUNNING = 1254; - exports.ER_SLAVE_WAS_NOT_RUNNING = 1255; - exports.ER_TOO_BIG_FOR_UNCOMPRESS = 1256; - exports.ER_ZLIB_Z_MEM_ERROR = 1257; - exports.ER_ZLIB_Z_BUF_ERROR = 1258; - exports.ER_ZLIB_Z_DATA_ERROR = 1259; - exports.ER_CUT_VALUE_GROUP_CONCAT = 1260; - exports.ER_WARN_TOO_FEW_RECORDS = 1261; - exports.ER_WARN_TOO_MANY_RECORDS = 1262; - exports.ER_WARN_NULL_TO_NOTNULL = 1263; - exports.ER_WARN_DATA_OUT_OF_RANGE = 1264; - exports.WARN_DATA_TRUNCATED = 1265; - exports.ER_WARN_USING_OTHER_HANDLER = 1266; - exports.ER_CANT_AGGREGATE_2COLLATIONS = 1267; - exports.ER_DROP_USER = 1268; - exports.ER_REVOKE_GRANTS = 1269; - exports.ER_CANT_AGGREGATE_3COLLATIONS = 1270; - exports.ER_CANT_AGGREGATE_NCOLLATIONS = 1271; - exports.ER_VARIABLE_IS_NOT_STRUCT = 1272; - exports.ER_UNKNOWN_COLLATION = 1273; - exports.ER_SLAVE_IGNORED_SSL_PARAMS = 1274; - exports.ER_SERVER_IS_IN_SECURE_AUTH_MODE = 1275; - exports.ER_WARN_FIELD_RESOLVED = 1276; - exports.ER_BAD_SLAVE_UNTIL_COND = 1277; - exports.ER_MISSING_SKIP_SLAVE = 1278; - exports.ER_UNTIL_COND_IGNORED = 1279; - exports.ER_WRONG_NAME_FOR_INDEX = 1280; - exports.ER_WRONG_NAME_FOR_CATALOG = 1281; - exports.ER_WARN_QC_RESIZE = 1282; - exports.ER_BAD_FT_COLUMN = 1283; - exports.ER_UNKNOWN_KEY_CACHE = 1284; - exports.ER_WARN_HOSTNAME_WONT_WORK = 1285; - exports.ER_UNKNOWN_STORAGE_ENGINE = 1286; - exports.ER_WARN_DEPRECATED_SYNTAX = 1287; - exports.ER_NON_UPDATABLE_TABLE = 1288; - exports.ER_FEATURE_DISABLED = 1289; - exports.ER_OPTION_PREVENTS_STATEMENT = 1290; - exports.ER_DUPLICATED_VALUE_IN_TYPE = 1291; - exports.ER_TRUNCATED_WRONG_VALUE = 1292; - exports.ER_TOO_MUCH_AUTO_TIMESTAMP_COLS = 1293; - exports.ER_INVALID_ON_UPDATE = 1294; - exports.ER_UNSUPPORTED_PS = 1295; - exports.ER_GET_ERRMSG = 1296; - exports.ER_GET_TEMPORARY_ERRMSG = 1297; - exports.ER_UNKNOWN_TIME_ZONE = 1298; - exports.ER_WARN_INVALID_TIMESTAMP = 1299; - exports.ER_INVALID_CHARACTER_STRING = 1300; - exports.ER_WARN_ALLOWED_PACKET_OVERFLOWED = 1301; - exports.ER_CONFLICTING_DECLARATIONS = 1302; - exports.ER_SP_NO_RECURSIVE_CREATE = 1303; - exports.ER_SP_ALREADY_EXISTS = 1304; - exports.ER_SP_DOES_NOT_EXIST = 1305; - exports.ER_SP_DROP_FAILED = 1306; - exports.ER_SP_STORE_FAILED = 1307; - exports.ER_SP_LILABEL_MISMATCH = 1308; - exports.ER_SP_LABEL_REDEFINE = 1309; - exports.ER_SP_LABEL_MISMATCH = 1310; - exports.ER_SP_UNINIT_VAR = 1311; - exports.ER_SP_BADSELECT = 1312; - exports.ER_SP_BADRETURN = 1313; - exports.ER_SP_BADSTATEMENT = 1314; - exports.ER_UPDATE_LOG_DEPRECATED_IGNORED = 1315; - exports.ER_UPDATE_LOG_DEPRECATED_TRANSLATED = 1316; - exports.ER_QUERY_INTERRUPTED = 1317; - exports.ER_SP_WRONG_NO_OF_ARGS = 1318; - exports.ER_SP_COND_MISMATCH = 1319; - exports.ER_SP_NORETURN = 1320; - exports.ER_SP_NORETURNEND = 1321; - exports.ER_SP_BAD_CURSOR_QUERY = 1322; - exports.ER_SP_BAD_CURSOR_SELECT = 1323; - exports.ER_SP_CURSOR_MISMATCH = 1324; - exports.ER_SP_CURSOR_ALREADY_OPEN = 1325; - exports.ER_SP_CURSOR_NOT_OPEN = 1326; - exports.ER_SP_UNDECLARED_VAR = 1327; - exports.ER_SP_WRONG_NO_OF_FETCH_ARGS = 1328; - exports.ER_SP_FETCH_NO_DATA = 1329; - exports.ER_SP_DUP_PARAM = 1330; - exports.ER_SP_DUP_VAR = 1331; - exports.ER_SP_DUP_COND = 1332; - exports.ER_SP_DUP_CURS = 1333; - exports.ER_SP_CANT_ALTER = 1334; - exports.ER_SP_SUBSELECT_NYI = 1335; - exports.ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG = 1336; - exports.ER_SP_VARCOND_AFTER_CURSHNDLR = 1337; - exports.ER_SP_CURSOR_AFTER_HANDLER = 1338; - exports.ER_SP_CASE_NOT_FOUND = 1339; - exports.ER_FPARSER_TOO_BIG_FILE = 1340; - exports.ER_FPARSER_BAD_HEADER = 1341; - exports.ER_FPARSER_EOF_IN_COMMENT = 1342; - exports.ER_FPARSER_ERROR_IN_PARAMETER = 1343; - exports.ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER = 1344; - exports.ER_VIEW_NO_EXPLAIN = 1345; - exports.ER_FRM_UNKNOWN_TYPE = 1346; - exports.ER_WRONG_OBJECT = 1347; - exports.ER_NONUPDATEABLE_COLUMN = 1348; - exports.ER_VIEW_SELECT_DERIVED = 1349; - exports.ER_VIEW_SELECT_CLAUSE = 1350; - exports.ER_VIEW_SELECT_VARIABLE = 1351; - exports.ER_VIEW_SELECT_TMPTABLE = 1352; - exports.ER_VIEW_WRONG_LIST = 1353; - exports.ER_WARN_VIEW_MERGE = 1354; - exports.ER_WARN_VIEW_WITHOUT_KEY = 1355; - exports.ER_VIEW_INVALID = 1356; - exports.ER_SP_NO_DROP_SP = 1357; - exports.ER_SP_GOTO_IN_HNDLR = 1358; - exports.ER_TRG_ALREADY_EXISTS = 1359; - exports.ER_TRG_DOES_NOT_EXIST = 1360; - exports.ER_TRG_ON_VIEW_OR_TEMP_TABLE = 1361; - exports.ER_TRG_CANT_CHANGE_ROW = 1362; - exports.ER_TRG_NO_SUCH_ROW_IN_TRG = 1363; - exports.ER_NO_DEFAULT_FOR_FIELD = 1364; - exports.ER_DIVISION_BY_ZERO = 1365; - exports.ER_TRUNCATED_WRONG_VALUE_FOR_FIELD = 1366; - exports.ER_ILLEGAL_VALUE_FOR_TYPE = 1367; - exports.ER_VIEW_NONUPD_CHECK = 1368; - exports.ER_VIEW_CHECK_FAILED = 1369; - exports.ER_PROCACCESS_DENIED_ERROR = 1370; - exports.ER_RELAY_LOG_FAIL = 1371; - exports.ER_PASSWD_LENGTH = 1372; - exports.ER_UNKNOWN_TARGET_BINLOG = 1373; - exports.ER_IO_ERR_LOG_INDEX_READ = 1374; - exports.ER_BINLOG_PURGE_PROHIBITED = 1375; - exports.ER_FSEEK_FAIL = 1376; - exports.ER_BINLOG_PURGE_FATAL_ERR = 1377; - exports.ER_LOG_IN_USE = 1378; - exports.ER_LOG_PURGE_UNKNOWN_ERR = 1379; - exports.ER_RELAY_LOG_INIT = 1380; - exports.ER_NO_BINARY_LOGGING = 1381; - exports.ER_RESERVED_SYNTAX = 1382; - exports.ER_WSAS_FAILED = 1383; - exports.ER_DIFF_GROUPS_PROC = 1384; - exports.ER_NO_GROUP_FOR_PROC = 1385; - exports.ER_ORDER_WITH_PROC = 1386; - exports.ER_LOGGING_PROHIBIT_CHANGING_OF = 1387; - exports.ER_NO_FILE_MAPPING = 1388; - exports.ER_WRONG_MAGIC = 1389; - exports.ER_PS_MANY_PARAM = 1390; - exports.ER_KEY_PART_0 = 1391; - exports.ER_VIEW_CHECKSUM = 1392; - exports.ER_VIEW_MULTIUPDATE = 1393; - exports.ER_VIEW_NO_INSERT_FIELD_LIST = 1394; - exports.ER_VIEW_DELETE_MERGE_VIEW = 1395; - exports.ER_CANNOT_USER = 1396; - exports.ER_XAER_NOTA = 1397; - exports.ER_XAER_INVAL = 1398; - exports.ER_XAER_RMFAIL = 1399; - exports.ER_XAER_OUTSIDE = 1400; - exports.ER_XAER_RMERR = 1401; - exports.ER_XA_RBROLLBACK = 1402; - exports.ER_NONEXISTING_PROC_GRANT = 1403; - exports.ER_PROC_AUTO_GRANT_FAIL = 1404; - exports.ER_PROC_AUTO_REVOKE_FAIL = 1405; - exports.ER_DATA_TOO_LONG = 1406; - exports.ER_SP_BAD_SQLSTATE = 1407; - exports.ER_STARTUP = 1408; - exports.ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR = 1409; - exports.ER_CANT_CREATE_USER_WITH_GRANT = 1410; - exports.ER_WRONG_VALUE_FOR_TYPE = 1411; - exports.ER_TABLE_DEF_CHANGED = 1412; - exports.ER_SP_DUP_HANDLER = 1413; - exports.ER_SP_NOT_VAR_ARG = 1414; - exports.ER_SP_NO_RETSET = 1415; - exports.ER_CANT_CREATE_GEOMETRY_OBJECT = 1416; - exports.ER_FAILED_ROUTINE_BREAK_BINLOG = 1417; - exports.ER_BINLOG_UNSAFE_ROUTINE = 1418; - exports.ER_BINLOG_CREATE_ROUTINE_NEED_SUPER = 1419; - exports.ER_EXEC_STMT_WITH_OPEN_CURSOR = 1420; - exports.ER_STMT_HAS_NO_OPEN_CURSOR = 1421; - exports.ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG = 1422; - exports.ER_NO_DEFAULT_FOR_VIEW_FIELD = 1423; - exports.ER_SP_NO_RECURSION = 1424; - exports.ER_TOO_BIG_SCALE = 1425; - exports.ER_TOO_BIG_PRECISION = 1426; - exports.ER_M_BIGGER_THAN_D = 1427; - exports.ER_WRONG_LOCK_OF_SYSTEM_TABLE = 1428; - exports.ER_CONNECT_TO_FOREIGN_DATA_SOURCE = 1429; - exports.ER_QUERY_ON_FOREIGN_DATA_SOURCE = 1430; - exports.ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST = 1431; - exports.ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE = 1432; - exports.ER_FOREIGN_DATA_STRING_INVALID = 1433; - exports.ER_CANT_CREATE_FEDERATED_TABLE = 1434; - exports.ER_TRG_IN_WRONG_SCHEMA = 1435; - exports.ER_STACK_OVERRUN_NEED_MORE = 1436; - exports.ER_TOO_LONG_BODY = 1437; - exports.ER_WARN_CANT_DROP_DEFAULT_KEYCACHE = 1438; - exports.ER_TOO_BIG_DISPLAYWIDTH = 1439; - exports.ER_XAER_DUPID = 1440; - exports.ER_DATETIME_FUNCTION_OVERFLOW = 1441; - exports.ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG = 1442; - exports.ER_VIEW_PREVENT_UPDATE = 1443; - exports.ER_PS_NO_RECURSION = 1444; - exports.ER_SP_CANT_SET_AUTOCOMMIT = 1445; - exports.ER_MALFORMED_DEFINER = 1446; - exports.ER_VIEW_FRM_NO_USER = 1447; - exports.ER_VIEW_OTHER_USER = 1448; - exports.ER_NO_SUCH_USER = 1449; - exports.ER_FORBID_SCHEMA_CHANGE = 1450; - exports.ER_ROW_IS_REFERENCED_2 = 1451; - exports.ER_NO_REFERENCED_ROW_2 = 1452; - exports.ER_SP_BAD_VAR_SHADOW = 1453; - exports.ER_TRG_NO_DEFINER = 1454; - exports.ER_OLD_FILE_FORMAT = 1455; - exports.ER_SP_RECURSION_LIMIT = 1456; - exports.ER_SP_PROC_TABLE_CORRUPT = 1457; - exports.ER_SP_WRONG_NAME = 1458; - exports.ER_TABLE_NEEDS_UPGRADE = 1459; - exports.ER_SP_NO_AGGREGATE = 1460; - exports.ER_MAX_PREPARED_STMT_COUNT_REACHED = 1461; - exports.ER_VIEW_RECURSIVE = 1462; - exports.ER_NON_GROUPING_FIELD_USED = 1463; - exports.ER_TABLE_CANT_HANDLE_SPKEYS = 1464; - exports.ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA = 1465; - exports.ER_REMOVED_SPACES = 1466; - exports.ER_AUTOINC_READ_FAILED = 1467; - exports.ER_USERNAME = 1468; - exports.ER_HOSTNAME = 1469; - exports.ER_WRONG_STRING_LENGTH = 1470; - exports.ER_NON_INSERTABLE_TABLE = 1471; - exports.ER_ADMIN_WRONG_MRG_TABLE = 1472; - exports.ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT = 1473; - exports.ER_NAME_BECOMES_EMPTY = 1474; - exports.ER_AMBIGUOUS_FIELD_TERM = 1475; - exports.ER_FOREIGN_SERVER_EXISTS = 1476; - exports.ER_FOREIGN_SERVER_DOESNT_EXIST = 1477; - exports.ER_ILLEGAL_HA_CREATE_OPTION = 1478; - exports.ER_PARTITION_REQUIRES_VALUES_ERROR = 1479; - exports.ER_PARTITION_WRONG_VALUES_ERROR = 1480; - exports.ER_PARTITION_MAXVALUE_ERROR = 1481; - exports.ER_PARTITION_SUBPARTITION_ERROR = 1482; - exports.ER_PARTITION_SUBPART_MIX_ERROR = 1483; - exports.ER_PARTITION_WRONG_NO_PART_ERROR = 1484; - exports.ER_PARTITION_WRONG_NO_SUBPART_ERROR = 1485; - exports.ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR = 1486; - exports.ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR = 1487; - exports.ER_FIELD_NOT_FOUND_PART_ERROR = 1488; - exports.ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR = 1489; - exports.ER_INCONSISTENT_PARTITION_INFO_ERROR = 1490; - exports.ER_PARTITION_FUNC_NOT_ALLOWED_ERROR = 1491; - exports.ER_PARTITIONS_MUST_BE_DEFINED_ERROR = 1492; - exports.ER_RANGE_NOT_INCREASING_ERROR = 1493; - exports.ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR = 1494; - exports.ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR = 1495; - exports.ER_PARTITION_ENTRY_ERROR = 1496; - exports.ER_MIX_HANDLER_ERROR = 1497; - exports.ER_PARTITION_NOT_DEFINED_ERROR = 1498; - exports.ER_TOO_MANY_PARTITIONS_ERROR = 1499; - exports.ER_SUBPARTITION_ERROR = 1500; - exports.ER_CANT_CREATE_HANDLER_FILE = 1501; - exports.ER_BLOB_FIELD_IN_PART_FUNC_ERROR = 1502; - exports.ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF = 1503; - exports.ER_NO_PARTS_ERROR = 1504; - exports.ER_PARTITION_MGMT_ON_NONPARTITIONED = 1505; - exports.ER_FOREIGN_KEY_ON_PARTITIONED = 1506; - exports.ER_DROP_PARTITION_NON_EXISTENT = 1507; - exports.ER_DROP_LAST_PARTITION = 1508; - exports.ER_COALESCE_ONLY_ON_HASH_PARTITION = 1509; - exports.ER_REORG_HASH_ONLY_ON_SAME_NO = 1510; - exports.ER_REORG_NO_PARAM_ERROR = 1511; - exports.ER_ONLY_ON_RANGE_LIST_PARTITION = 1512; - exports.ER_ADD_PARTITION_SUBPART_ERROR = 1513; - exports.ER_ADD_PARTITION_NO_NEW_PARTITION = 1514; - exports.ER_COALESCE_PARTITION_NO_PARTITION = 1515; - exports.ER_REORG_PARTITION_NOT_EXIST = 1516; - exports.ER_SAME_NAME_PARTITION = 1517; - exports.ER_NO_BINLOG_ERROR = 1518; - exports.ER_CONSECUTIVE_REORG_PARTITIONS = 1519; - exports.ER_REORG_OUTSIDE_RANGE = 1520; - exports.ER_PARTITION_FUNCTION_FAILURE = 1521; - exports.ER_PART_STATE_ERROR = 1522; - exports.ER_LIMITED_PART_RANGE = 1523; - exports.ER_PLUGIN_IS_NOT_LOADED = 1524; - exports.ER_WRONG_VALUE = 1525; - exports.ER_NO_PARTITION_FOR_GIVEN_VALUE = 1526; - exports.ER_FILEGROUP_OPTION_ONLY_ONCE = 1527; - exports.ER_CREATE_FILEGROUP_FAILED = 1528; - exports.ER_DROP_FILEGROUP_FAILED = 1529; - exports.ER_TABLESPACE_AUTO_EXTEND_ERROR = 1530; - exports.ER_WRONG_SIZE_NUMBER = 1531; - exports.ER_SIZE_OVERFLOW_ERROR = 1532; - exports.ER_ALTER_FILEGROUP_FAILED = 1533; - exports.ER_BINLOG_ROW_LOGGING_FAILED = 1534; - exports.ER_BINLOG_ROW_WRONG_TABLE_DEF = 1535; - exports.ER_BINLOG_ROW_RBR_TO_SBR = 1536; - exports.ER_EVENT_ALREADY_EXISTS = 1537; - exports.ER_EVENT_STORE_FAILED = 1538; - exports.ER_EVENT_DOES_NOT_EXIST = 1539; - exports.ER_EVENT_CANT_ALTER = 1540; - exports.ER_EVENT_DROP_FAILED = 1541; - exports.ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG = 1542; - exports.ER_EVENT_ENDS_BEFORE_STARTS = 1543; - exports.ER_EVENT_EXEC_TIME_IN_THE_PAST = 1544; - exports.ER_EVENT_OPEN_TABLE_FAILED = 1545; - exports.ER_EVENT_NEITHER_M_EXPR_NOR_M_AT = 1546; - exports.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED = 1547; - exports.ER_CANNOT_LOAD_FROM_TABLE = 1548; - exports.ER_EVENT_CANNOT_DELETE = 1549; - exports.ER_EVENT_COMPILE_ERROR = 1550; - exports.ER_EVENT_SAME_NAME = 1551; - exports.ER_EVENT_DATA_TOO_LONG = 1552; - exports.ER_DROP_INDEX_FK = 1553; - exports.ER_WARN_DEPRECATED_SYNTAX_WITH_VER = 1554; - exports.ER_CANT_WRITE_LOCK_LOG_TABLE = 1555; - exports.ER_CANT_LOCK_LOG_TABLE = 1556; - exports.ER_FOREIGN_DUPLICATE_KEY = 1557; - exports.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE = 1558; - exports.ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR = 1559; - exports.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT = 1560; - exports.ER_NDB_CANT_SWITCH_BINLOG_FORMAT = 1561; - exports.ER_PARTITION_NO_TEMPORARY = 1562; - exports.ER_PARTITION_CONST_DOMAIN_ERROR = 1563; - exports.ER_PARTITION_FUNCTION_IS_NOT_ALLOWED = 1564; - exports.ER_DDL_LOG_ERROR = 1565; - exports.ER_NULL_IN_VALUES_LESS_THAN = 1566; - exports.ER_WRONG_PARTITION_NAME = 1567; - exports.ER_CANT_CHANGE_TX_CHARACTERISTICS = 1568; - exports.ER_DUP_ENTRY_AUTOINCREMENT_CASE = 1569; - exports.ER_EVENT_MODIFY_QUEUE_ERROR = 1570; - exports.ER_EVENT_SET_VAR_ERROR = 1571; - exports.ER_PARTITION_MERGE_ERROR = 1572; - exports.ER_CANT_ACTIVATE_LOG = 1573; - exports.ER_RBR_NOT_AVAILABLE = 1574; - exports.ER_BASE64_DECODE_ERROR = 1575; - exports.ER_EVENT_RECURSION_FORBIDDEN = 1576; - exports.ER_EVENTS_DB_ERROR = 1577; - exports.ER_ONLY_INTEGERS_ALLOWED = 1578; - exports.ER_UNSUPORTED_LOG_ENGINE = 1579; - exports.ER_BAD_LOG_STATEMENT = 1580; - exports.ER_CANT_RENAME_LOG_TABLE = 1581; - exports.ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT = 1582; - exports.ER_WRONG_PARAMETERS_TO_NATIVE_FCT = 1583; - exports.ER_WRONG_PARAMETERS_TO_STORED_FCT = 1584; - exports.ER_NATIVE_FCT_NAME_COLLISION = 1585; - exports.ER_DUP_ENTRY_WITH_KEY_NAME = 1586; - exports.ER_BINLOG_PURGE_EMFILE = 1587; - exports.ER_EVENT_CANNOT_CREATE_IN_THE_PAST = 1588; - exports.ER_EVENT_CANNOT_ALTER_IN_THE_PAST = 1589; - exports.ER_SLAVE_INCIDENT = 1590; - exports.ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT = 1591; - exports.ER_BINLOG_UNSAFE_STATEMENT = 1592; - exports.ER_SLAVE_FATAL_ERROR = 1593; - exports.ER_SLAVE_RELAY_LOG_READ_FAILURE = 1594; - exports.ER_SLAVE_RELAY_LOG_WRITE_FAILURE = 1595; - exports.ER_SLAVE_CREATE_EVENT_FAILURE = 1596; - exports.ER_SLAVE_MASTER_COM_FAILURE = 1597; - exports.ER_BINLOG_LOGGING_IMPOSSIBLE = 1598; - exports.ER_VIEW_NO_CREATION_CTX = 1599; - exports.ER_VIEW_INVALID_CREATION_CTX = 1600; - exports.ER_SR_INVALID_CREATION_CTX = 1601; - exports.ER_TRG_CORRUPTED_FILE = 1602; - exports.ER_TRG_NO_CREATION_CTX = 1603; - exports.ER_TRG_INVALID_CREATION_CTX = 1604; - exports.ER_EVENT_INVALID_CREATION_CTX = 1605; - exports.ER_TRG_CANT_OPEN_TABLE = 1606; - exports.ER_CANT_CREATE_SROUTINE = 1607; - exports.ER_NEVER_USED = 1608; - exports.ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT = 1609; - exports.ER_SLAVE_CORRUPT_EVENT = 1610; - exports.ER_LOAD_DATA_INVALID_COLUMN = 1611; - exports.ER_LOG_PURGE_NO_FILE = 1612; - exports.ER_XA_RBTIMEOUT = 1613; - exports.ER_XA_RBDEADLOCK = 1614; - exports.ER_NEED_REPREPARE = 1615; - exports.ER_DELAYED_NOT_SUPPORTED = 1616; - exports.WARN_NO_MASTER_INFO = 1617; - exports.WARN_OPTION_IGNORED = 1618; - exports.ER_PLUGIN_DELETE_BUILTIN = 1619; - exports.WARN_PLUGIN_BUSY = 1620; - exports.ER_VARIABLE_IS_READONLY = 1621; - exports.ER_WARN_ENGINE_TRANSACTION_ROLLBACK = 1622; - exports.ER_SLAVE_HEARTBEAT_FAILURE = 1623; - exports.ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE = 1624; - exports.ER_NDB_REPLICATION_SCHEMA_ERROR = 1625; - exports.ER_CONFLICT_FN_PARSE_ERROR = 1626; - exports.ER_EXCEPTIONS_WRITE_ERROR = 1627; - exports.ER_TOO_LONG_TABLE_COMMENT = 1628; - exports.ER_TOO_LONG_FIELD_COMMENT = 1629; - exports.ER_FUNC_INEXISTENT_NAME_COLLISION = 1630; - exports.ER_DATABASE_NAME = 1631; - exports.ER_TABLE_NAME = 1632; - exports.ER_PARTITION_NAME = 1633; - exports.ER_SUBPARTITION_NAME = 1634; - exports.ER_TEMPORARY_NAME = 1635; - exports.ER_RENAMED_NAME = 1636; - exports.ER_TOO_MANY_CONCURRENT_TRXS = 1637; - exports.WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED = 1638; - exports.ER_DEBUG_SYNC_TIMEOUT = 1639; - exports.ER_DEBUG_SYNC_HIT_LIMIT = 1640; - exports.ER_DUP_SIGNAL_SET = 1641; - exports.ER_SIGNAL_WARN = 1642; - exports.ER_SIGNAL_NOT_FOUND = 1643; - exports.ER_SIGNAL_EXCEPTION = 1644; - exports.ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER = 1645; - exports.ER_SIGNAL_BAD_CONDITION_TYPE = 1646; - exports.WARN_COND_ITEM_TRUNCATED = 1647; - exports.ER_COND_ITEM_TOO_LONG = 1648; - exports.ER_UNKNOWN_LOCALE = 1649; - exports.ER_SLAVE_IGNORE_SERVER_IDS = 1650; - exports.ER_QUERY_CACHE_DISABLED = 1651; - exports.ER_SAME_NAME_PARTITION_FIELD = 1652; - exports.ER_PARTITION_COLUMN_LIST_ERROR = 1653; - exports.ER_WRONG_TYPE_COLUMN_VALUE_ERROR = 1654; - exports.ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR = 1655; - exports.ER_MAXVALUE_IN_VALUES_IN = 1656; - exports.ER_TOO_MANY_VALUES_ERROR = 1657; - exports.ER_ROW_SINGLE_PARTITION_FIELD_ERROR = 1658; - exports.ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD = 1659; - exports.ER_PARTITION_FIELDS_TOO_LONG = 1660; - exports.ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE = 1661; - exports.ER_BINLOG_ROW_MODE_AND_STMT_ENGINE = 1662; - exports.ER_BINLOG_UNSAFE_AND_STMT_ENGINE = 1663; - exports.ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE = 1664; - exports.ER_BINLOG_STMT_MODE_AND_ROW_ENGINE = 1665; - exports.ER_BINLOG_ROW_INJECTION_AND_STMT_MODE = 1666; - exports.ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE = 1667; - exports.ER_BINLOG_UNSAFE_LIMIT = 1668; - exports.ER_BINLOG_UNSAFE_INSERT_DELAYED = 1669; - exports.ER_BINLOG_UNSAFE_SYSTEM_TABLE = 1670; - exports.ER_BINLOG_UNSAFE_AUTOINC_COLUMNS = 1671; - exports.ER_BINLOG_UNSAFE_UDF = 1672; - exports.ER_BINLOG_UNSAFE_SYSTEM_VARIABLE = 1673; - exports.ER_BINLOG_UNSAFE_SYSTEM_FUNCTION = 1674; - exports.ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS = 1675; - exports.ER_MESSAGE_AND_STATEMENT = 1676; - exports.ER_SLAVE_CONVERSION_FAILED = 1677; - exports.ER_SLAVE_CANT_CREATE_CONVERSION = 1678; - exports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT = 1679; - exports.ER_PATH_LENGTH = 1680; - exports.ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT = 1681; - exports.ER_WRONG_NATIVE_TABLE_STRUCTURE = 1682; - exports.ER_WRONG_PERFSCHEMA_USAGE = 1683; - exports.ER_WARN_I_S_SKIPPED_TABLE = 1684; - exports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT = 1685; - exports.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT = 1686; - exports.ER_SPATIAL_MUST_HAVE_GEOM_COL = 1687; - exports.ER_TOO_LONG_INDEX_COMMENT = 1688; - exports.ER_LOCK_ABORTED = 1689; - exports.ER_DATA_OUT_OF_RANGE = 1690; - exports.ER_WRONG_SPVAR_TYPE_IN_LIMIT = 1691; - exports.ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE = 1692; - exports.ER_BINLOG_UNSAFE_MIXED_STATEMENT = 1693; - exports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN = 1694; - exports.ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN = 1695; - exports.ER_FAILED_READ_FROM_PAR_FILE = 1696; - exports.ER_VALUES_IS_NOT_INT_TYPE_ERROR = 1697; - exports.ER_ACCESS_DENIED_NO_PASSWORD_ERROR = 1698; - exports.ER_SET_PASSWORD_AUTH_PLUGIN = 1699; - exports.ER_GRANT_PLUGIN_USER_EXISTS = 1700; - exports.ER_TRUNCATE_ILLEGAL_FK = 1701; - exports.ER_PLUGIN_IS_PERMANENT = 1702; - exports.ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN = 1703; - exports.ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX = 1704; - exports.ER_STMT_CACHE_FULL = 1705; - exports.ER_MULTI_UPDATE_KEY_CONFLICT = 1706; - exports.ER_TABLE_NEEDS_REBUILD = 1707; - exports.WARN_OPTION_BELOW_LIMIT = 1708; - exports.ER_INDEX_COLUMN_TOO_LONG = 1709; - exports.ER_ERROR_IN_TRIGGER_BODY = 1710; - exports.ER_ERROR_IN_UNKNOWN_TRIGGER_BODY = 1711; - exports.ER_INDEX_CORRUPT = 1712; - exports.ER_UNDO_RECORD_TOO_BIG = 1713; - exports.ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT = 1714; - exports.ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE = 1715; - exports.ER_BINLOG_UNSAFE_REPLACE_SELECT = 1716; - exports.ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT = 1717; - exports.ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT = 1718; - exports.ER_BINLOG_UNSAFE_UPDATE_IGNORE = 1719; - exports.ER_PLUGIN_NO_UNINSTALL = 1720; - exports.ER_PLUGIN_NO_INSTALL = 1721; - exports.ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT = 1722; - exports.ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC = 1723; - exports.ER_BINLOG_UNSAFE_INSERT_TWO_KEYS = 1724; - exports.ER_TABLE_IN_FK_CHECK = 1725; - exports.ER_UNSUPPORTED_ENGINE = 1726; - exports.ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST = 1727; - exports.ER_CANNOT_LOAD_FROM_TABLE_V2 = 1728; - exports.ER_MASTER_DELAY_VALUE_OUT_OF_RANGE = 1729; - exports.ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT = 1730; - exports.ER_PARTITION_EXCHANGE_DIFFERENT_OPTION = 1731; - exports.ER_PARTITION_EXCHANGE_PART_TABLE = 1732; - exports.ER_PARTITION_EXCHANGE_TEMP_TABLE = 1733; - exports.ER_PARTITION_INSTEAD_OF_SUBPARTITION = 1734; - exports.ER_UNKNOWN_PARTITION = 1735; - exports.ER_TABLES_DIFFERENT_METADATA = 1736; - exports.ER_ROW_DOES_NOT_MATCH_PARTITION = 1737; - exports.ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX = 1738; - exports.ER_WARN_INDEX_NOT_APPLICABLE = 1739; - exports.ER_PARTITION_EXCHANGE_FOREIGN_KEY = 1740; - exports.ER_NO_SUCH_KEY_VALUE = 1741; - exports.ER_RPL_INFO_DATA_TOO_LONG = 1742; - exports.ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE = 1743; - exports.ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE = 1744; - exports.ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX = 1745; - exports.ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT = 1746; - exports.ER_PARTITION_CLAUSE_ON_NONPARTITIONED = 1747; - exports.ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET = 1748; - exports.ER_NO_SUCH_PARTITION = 1749; - exports.ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE = 1750; - exports.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE = 1751; - exports.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE = 1752; - exports.ER_MTS_FEATURE_IS_NOT_SUPPORTED = 1753; - exports.ER_MTS_UPDATED_DBS_GREATER_MAX = 1754; - exports.ER_MTS_CANT_PARALLEL = 1755; - exports.ER_MTS_INCONSISTENT_DATA = 1756; - exports.ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING = 1757; - exports.ER_DA_INVALID_CONDITION_NUMBER = 1758; - exports.ER_INSECURE_PLAIN_TEXT = 1759; - exports.ER_INSECURE_CHANGE_MASTER = 1760; - exports.ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO = 1761; - exports.ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO = 1762; - exports.ER_SQLTHREAD_WITH_SECURE_SLAVE = 1763; - exports.ER_TABLE_HAS_NO_FT = 1764; - exports.ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER = 1765; - exports.ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION = 1766; - exports.ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST = 1767; - exports.ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION = 1768; - exports.ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION = 1769; - exports.ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL = 1770; - exports.ER_SKIPPING_LOGGED_TRANSACTION = 1771; - exports.ER_MALFORMED_GTID_SET_SPECIFICATION = 1772; - exports.ER_MALFORMED_GTID_SET_ENCODING = 1773; - exports.ER_MALFORMED_GTID_SPECIFICATION = 1774; - exports.ER_GNO_EXHAUSTED = 1775; - exports.ER_BAD_SLAVE_AUTO_POSITION = 1776; - exports.ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF = 1777; - exports.ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET = 1778; - exports.ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON = 1779; - exports.ER_GTID_MODE_REQUIRES_BINLOG = 1780; - exports.ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF = 1781; - exports.ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON = 1782; - exports.ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF = 1783; - exports.ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF = 1784; - exports.ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE = 1785; - exports.ER_GTID_UNSAFE_CREATE_SELECT = 1786; - exports.ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION = 1787; - exports.ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME = 1788; - exports.ER_MASTER_HAS_PURGED_REQUIRED_GTIDS = 1789; - exports.ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID = 1790; - exports.ER_UNKNOWN_EXPLAIN_FORMAT = 1791; - exports.ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION = 1792; - exports.ER_TOO_LONG_TABLE_PARTITION_COMMENT = 1793; - exports.ER_SLAVE_CONFIGURATION = 1794; - exports.ER_INNODB_FT_LIMIT = 1795; - exports.ER_INNODB_NO_FT_TEMP_TABLE = 1796; - exports.ER_INNODB_FT_WRONG_DOCID_COLUMN = 1797; - exports.ER_INNODB_FT_WRONG_DOCID_INDEX = 1798; - exports.ER_INNODB_ONLINE_LOG_TOO_BIG = 1799; - exports.ER_UNKNOWN_ALTER_ALGORITHM = 1800; - exports.ER_UNKNOWN_ALTER_LOCK = 1801; - exports.ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS = 1802; - exports.ER_MTS_RECOVERY_FAILURE = 1803; - exports.ER_MTS_RESET_WORKERS = 1804; - exports.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2 = 1805; - exports.ER_SLAVE_SILENT_RETRY_TRANSACTION = 1806; - exports.ER_DISCARD_FK_CHECKS_RUNNING = 1807; - exports.ER_TABLE_SCHEMA_MISMATCH = 1808; - exports.ER_TABLE_IN_SYSTEM_TABLESPACE = 1809; - exports.ER_IO_READ_ERROR = 1810; - exports.ER_IO_WRITE_ERROR = 1811; - exports.ER_TABLESPACE_MISSING = 1812; - exports.ER_TABLESPACE_EXISTS = 1813; - exports.ER_TABLESPACE_DISCARDED = 1814; - exports.ER_INTERNAL_ERROR = 1815; - exports.ER_INNODB_IMPORT_ERROR = 1816; - exports.ER_INNODB_INDEX_CORRUPT = 1817; - exports.ER_INVALID_YEAR_COLUMN_LENGTH = 1818; - exports.ER_NOT_VALID_PASSWORD = 1819; - exports.ER_MUST_CHANGE_PASSWORD = 1820; - exports.ER_FK_NO_INDEX_CHILD = 1821; - exports.ER_FK_NO_INDEX_PARENT = 1822; - exports.ER_FK_FAIL_ADD_SYSTEM = 1823; - exports.ER_FK_CANNOT_OPEN_PARENT = 1824; - exports.ER_FK_INCORRECT_OPTION = 1825; - exports.ER_FK_DUP_NAME = 1826; - exports.ER_PASSWORD_FORMAT = 1827; - exports.ER_FK_COLUMN_CANNOT_DROP = 1828; - exports.ER_FK_COLUMN_CANNOT_DROP_CHILD = 1829; - exports.ER_FK_COLUMN_NOT_NULL = 1830; - exports.ER_DUP_INDEX = 1831; - exports.ER_FK_COLUMN_CANNOT_CHANGE = 1832; - exports.ER_FK_COLUMN_CANNOT_CHANGE_CHILD = 1833; - exports.ER_FK_CANNOT_DELETE_PARENT = 1834; - exports.ER_MALFORMED_PACKET = 1835; - exports.ER_READ_ONLY_MODE = 1836; - exports.ER_GTID_NEXT_TYPE_UNDEFINED_GROUP = 1837; - exports.ER_VARIABLE_NOT_SETTABLE_IN_SP = 1838; - exports.ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF = 1839; - exports.ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY = 1840; - exports.ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY = 1841; - exports.ER_GTID_PURGED_WAS_CHANGED = 1842; - exports.ER_GTID_EXECUTED_WAS_CHANGED = 1843; - exports.ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES = 1844; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED = 1845; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON = 1846; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY = 1847; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION = 1848; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME = 1849; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE = 1850; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK = 1851; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE = 1852; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK = 1853; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC = 1854; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS = 1855; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS = 1856; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS = 1857; - exports.ER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE = 1858; - exports.ER_DUP_UNKNOWN_IN_INDEX = 1859; - exports.ER_IDENT_CAUSES_TOO_LONG_PATH = 1860; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL = 1861; - exports.ER_MUST_CHANGE_PASSWORD_LOGIN = 1862; - exports.ER_ROW_IN_WRONG_PARTITION = 1863; - exports.ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX = 1864; - exports.ER_INNODB_NO_FT_USES_PARSER = 1865; - exports.ER_BINLOG_LOGICAL_CORRUPTION = 1866; - exports.ER_WARN_PURGE_LOG_IN_USE = 1867; - exports.ER_WARN_PURGE_LOG_IS_ACTIVE = 1868; - exports.ER_AUTO_INCREMENT_CONFLICT = 1869; - exports.WARN_ON_BLOCKHOLE_IN_RBR = 1870; - exports.ER_SLAVE_MI_INIT_REPOSITORY = 1871; - exports.ER_SLAVE_RLI_INIT_REPOSITORY = 1872; - exports.ER_ACCESS_DENIED_CHANGE_USER_ERROR = 1873; - exports.ER_INNODB_READ_ONLY = 1874; - exports.ER_STOP_SLAVE_SQL_THREAD_TIMEOUT = 1875; - exports.ER_STOP_SLAVE_IO_THREAD_TIMEOUT = 1876; - exports.ER_TABLE_CORRUPT = 1877; - exports.ER_TEMP_FILE_WRITE_FAILURE = 1878; - exports.ER_INNODB_FT_AUX_NOT_HEX_ID = 1879; - exports.ER_OLD_TEMPORALS_UPGRADED = 1880; - exports.ER_INNODB_FORCED_RECOVERY = 1881; - exports.ER_AES_INVALID_IV = 1882; - exports.ER_PLUGIN_CANNOT_BE_UNINSTALLED = 1883; - exports.ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_GTID_GROUP = 1884; - exports.ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER = 1885; - exports.ER_MISSING_KEY = 1886; - exports.WARN_NAMED_PIPE_ACCESS_EVERYONE = 1887; - exports.ER_FOUND_MISSING_GTIDS = 1888; - exports.ER_FILE_CORRUPT = 3000; - exports.ER_ERROR_ON_MASTER = 3001; - exports.ER_INCONSISTENT_ERROR = 3002; - exports.ER_STORAGE_ENGINE_NOT_LOADED = 3003; - exports.ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER = 3004; - exports.ER_WARN_LEGACY_SYNTAX_CONVERTED = 3005; - exports.ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN = 3006; - exports.ER_CANNOT_DISCARD_TEMPORARY_TABLE = 3007; - exports.ER_FK_DEPTH_EXCEEDED = 3008; - exports.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2 = 3009; - exports.ER_WARN_TRIGGER_DOESNT_HAVE_CREATED = 3010; - exports.ER_REFERENCED_TRG_DOES_NOT_EXIST = 3011; - exports.ER_EXPLAIN_NOT_SUPPORTED = 3012; - exports.ER_INVALID_FIELD_SIZE = 3013; - exports.ER_MISSING_HA_CREATE_OPTION = 3014; - exports.ER_ENGINE_OUT_OF_MEMORY = 3015; - exports.ER_PASSWORD_EXPIRE_ANONYMOUS_USER = 3016; - exports.ER_SLAVE_SQL_THREAD_MUST_STOP = 3017; - exports.ER_NO_FT_MATERIALIZED_SUBQUERY = 3018; - exports.ER_INNODB_UNDO_LOG_FULL = 3019; - exports.ER_INVALID_ARGUMENT_FOR_LOGARITHM = 3020; - exports.ER_SLAVE_CHANNEL_IO_THREAD_MUST_STOP = 3021; - exports.ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO = 3022; - exports.ER_WARN_ONLY_MASTER_LOG_FILE_NO_POS = 3023; - exports.ER_QUERY_TIMEOUT = 3024; - exports.ER_NON_RO_SELECT_DISABLE_TIMER = 3025; - exports.ER_DUP_LIST_ENTRY = 3026; - exports.ER_SQL_MODE_NO_EFFECT = 3027; - exports.ER_AGGREGATE_ORDER_FOR_UNION = 3028; - exports.ER_AGGREGATE_ORDER_NON_AGG_QUERY = 3029; - exports.ER_SLAVE_WORKER_STOPPED_PREVIOUS_THD_ERROR = 3030; - exports.ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER = 3031; - exports.ER_SERVER_OFFLINE_MODE = 3032; - exports.ER_GIS_DIFFERENT_SRIDS = 3033; - exports.ER_GIS_UNSUPPORTED_ARGUMENT = 3034; - exports.ER_GIS_UNKNOWN_ERROR = 3035; - exports.ER_GIS_UNKNOWN_EXCEPTION = 3036; - exports.ER_GIS_INVALID_DATA = 3037; - exports.ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION = 3038; - exports.ER_BOOST_GEOMETRY_CENTROID_EXCEPTION = 3039; - exports.ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION = 3040; - exports.ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION = 3041; - exports.ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION = 3042; - exports.ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION = 3043; - exports.ER_STD_BAD_ALLOC_ERROR = 3044; - exports.ER_STD_DOMAIN_ERROR = 3045; - exports.ER_STD_LENGTH_ERROR = 3046; - exports.ER_STD_INVALID_ARGUMENT = 3047; - exports.ER_STD_OUT_OF_RANGE_ERROR = 3048; - exports.ER_STD_OVERFLOW_ERROR = 3049; - exports.ER_STD_RANGE_ERROR = 3050; - exports.ER_STD_UNDERFLOW_ERROR = 3051; - exports.ER_STD_LOGIC_ERROR = 3052; - exports.ER_STD_RUNTIME_ERROR = 3053; - exports.ER_STD_UNKNOWN_EXCEPTION = 3054; - exports.ER_GIS_DATA_WRONG_ENDIANESS = 3055; - exports.ER_CHANGE_MASTER_PASSWORD_LENGTH = 3056; - exports.ER_USER_LOCK_WRONG_NAME = 3057; - exports.ER_USER_LOCK_DEADLOCK = 3058; - exports.ER_REPLACE_INACCESSIBLE_ROWS = 3059; - exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS = 3060; - exports.ER_ILLEGAL_USER_VAR = 3061; - exports.ER_GTID_MODE_OFF = 3062; - exports.ER_UNSUPPORTED_BY_REPLICATION_THREAD = 3063; - exports.ER_INCORRECT_TYPE = 3064; - exports.ER_FIELD_IN_ORDER_NOT_SELECT = 3065; - exports.ER_AGGREGATE_IN_ORDER_NOT_SELECT = 3066; - exports.ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN = 3067; - exports.ER_NET_OK_PACKET_TOO_LARGE = 3068; - exports.ER_INVALID_JSON_DATA = 3069; - exports.ER_INVALID_GEOJSON_MISSING_MEMBER = 3070; - exports.ER_INVALID_GEOJSON_WRONG_TYPE = 3071; - exports.ER_INVALID_GEOJSON_UNSPECIFIED = 3072; - exports.ER_DIMENSION_UNSUPPORTED = 3073; - exports.ER_SLAVE_CHANNEL_DOES_NOT_EXIST = 3074; - exports.ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT = 3075; - exports.ER_SLAVE_CHANNEL_NAME_INVALID_OR_TOO_LONG = 3076; - exports.ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY = 3077; - exports.ER_SLAVE_CHANNEL_DELETE = 3078; - exports.ER_SLAVE_MULTIPLE_CHANNELS_CMD = 3079; - exports.ER_SLAVE_MAX_CHANNELS_EXCEEDED = 3080; - exports.ER_SLAVE_CHANNEL_MUST_STOP = 3081; - exports.ER_SLAVE_CHANNEL_NOT_RUNNING = 3082; - exports.ER_SLAVE_CHANNEL_WAS_RUNNING = 3083; - exports.ER_SLAVE_CHANNEL_WAS_NOT_RUNNING = 3084; - exports.ER_SLAVE_CHANNEL_SQL_THREAD_MUST_STOP = 3085; - exports.ER_SLAVE_CHANNEL_SQL_SKIP_COUNTER = 3086; - exports.ER_WRONG_FIELD_WITH_GROUP_V2 = 3087; - exports.ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2 = 3088; - exports.ER_WARN_DEPRECATED_SYSVAR_UPDATE = 3089; - exports.ER_WARN_DEPRECATED_SQLMODE = 3090; - exports.ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID = 3091; - exports.ER_GROUP_REPLICATION_CONFIGURATION = 3092; - exports.ER_GROUP_REPLICATION_RUNNING = 3093; - exports.ER_GROUP_REPLICATION_APPLIER_INIT_ERROR = 3094; - exports.ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT = 3095; - exports.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR = 3096; - exports.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR = 3097; - exports.ER_BEFORE_DML_VALIDATION_ERROR = 3098; - exports.ER_PREVENTS_VARIABLE_WITHOUT_RBR = 3099; - exports.ER_RUN_HOOK_ERROR = 3100; - exports.ER_TRANSACTION_ROLLBACK_DURING_COMMIT = 3101; - exports.ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED = 3102; - exports.ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN = 3103; - exports.ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN = 3104; - exports.ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN = 3105; - exports.ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN = 3106; - exports.ER_GENERATED_COLUMN_NON_PRIOR = 3107; - exports.ER_DEPENDENT_BY_GENERATED_COLUMN = 3108; - exports.ER_GENERATED_COLUMN_REF_AUTO_INC = 3109; - exports.ER_FEATURE_NOT_AVAILABLE = 3110; - exports.ER_CANT_SET_GTID_MODE = 3111; - exports.ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF = 3112; - exports.ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION = 3113; - exports.ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON = 3114; - exports.ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF = 3115; - exports.ER_CANT_SET_ENFORCE_GTID_CONSISTENCY_ON_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS = 3116; - exports.ER_SET_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS = 3117; - exports.ER_ACCOUNT_HAS_BEEN_LOCKED = 3118; - exports.ER_WRONG_TABLESPACE_NAME = 3119; - exports.ER_TABLESPACE_IS_NOT_EMPTY = 3120; - exports.ER_WRONG_FILE_NAME = 3121; - exports.ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION = 3122; - exports.ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR = 3123; - exports.ER_WARN_BAD_MAX_EXECUTION_TIME = 3124; - exports.ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME = 3125; - exports.ER_WARN_CONFLICTING_HINT = 3126; - exports.ER_WARN_UNKNOWN_QB_NAME = 3127; - exports.ER_UNRESOLVED_HINT_NAME = 3128; - exports.ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE = 3129; - exports.ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED = 3130; - exports.ER_LOCKING_SERVICE_WRONG_NAME = 3131; - exports.ER_LOCKING_SERVICE_DEADLOCK = 3132; - exports.ER_LOCKING_SERVICE_TIMEOUT = 3133; - exports.ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED = 3134; - exports.ER_SQL_MODE_MERGED = 3135; - exports.ER_VTOKEN_PLUGIN_TOKEN_MISMATCH = 3136; - exports.ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND = 3137; - exports.ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID = 3138; - exports.ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED = 3139; - exports.ER_INVALID_JSON_TEXT = 3140; - exports.ER_INVALID_JSON_TEXT_IN_PARAM = 3141; - exports.ER_INVALID_JSON_BINARY_DATA = 3142; - exports.ER_INVALID_JSON_PATH = 3143; - exports.ER_INVALID_JSON_CHARSET = 3144; - exports.ER_INVALID_JSON_CHARSET_IN_FUNCTION = 3145; - exports.ER_INVALID_TYPE_FOR_JSON = 3146; - exports.ER_INVALID_CAST_TO_JSON = 3147; - exports.ER_INVALID_JSON_PATH_CHARSET = 3148; - exports.ER_INVALID_JSON_PATH_WILDCARD = 3149; - exports.ER_JSON_VALUE_TOO_BIG = 3150; - exports.ER_JSON_KEY_TOO_BIG = 3151; - exports.ER_JSON_USED_AS_KEY = 3152; - exports.ER_JSON_VACUOUS_PATH = 3153; - exports.ER_JSON_BAD_ONE_OR_ALL_ARG = 3154; - exports.ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE = 3155; - exports.ER_INVALID_JSON_VALUE_FOR_CAST = 3156; - exports.ER_JSON_DOCUMENT_TOO_DEEP = 3157; - exports.ER_JSON_DOCUMENT_NULL_KEY = 3158; - exports.ER_SECURE_TRANSPORT_REQUIRED = 3159; - exports.ER_NO_SECURE_TRANSPORTS_CONFIGURED = 3160; - exports.ER_DISABLED_STORAGE_ENGINE = 3161; - exports.ER_USER_DOES_NOT_EXIST = 3162; - exports.ER_USER_ALREADY_EXISTS = 3163; - exports.ER_AUDIT_API_ABORT = 3164; - exports.ER_INVALID_JSON_PATH_ARRAY_CELL = 3165; - exports.ER_BUFPOOL_RESIZE_INPROGRESS = 3166; - exports.ER_FEATURE_DISABLED_SEE_DOC = 3167; - exports.ER_SERVER_ISNT_AVAILABLE = 3168; - exports.ER_SESSION_WAS_KILLED = 3169; - exports.ER_CAPACITY_EXCEEDED = 3170; - exports.ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER = 3171; - exports.ER_TABLE_NEEDS_UPG_PART = 3172; - exports.ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID = 3173; - exports.ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL = 3174; - exports.ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT = 3175; - exports.ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE = 3176; - exports.ER_LOCK_REFUSED_BY_ENGINE = 3177; - exports.ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN = 3178; - exports.ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE = 3179; - exports.ER_MASTER_KEY_ROTATION_ERROR_BY_SE = 3180; - exports.ER_MASTER_KEY_ROTATION_BINLOG_FAILED = 3181; - exports.ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE = 3182; - exports.ER_TABLESPACE_CANNOT_ENCRYPT = 3183; - exports.ER_INVALID_ENCRYPTION_OPTION = 3184; - exports.ER_CANNOT_FIND_KEY_IN_KEYRING = 3185; - exports.ER_CAPACITY_EXCEEDED_IN_PARSER = 3186; - exports.ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE = 3187; - exports.ER_KEYRING_UDF_KEYRING_SERVICE_ERROR = 3188; - exports.ER_USER_COLUMN_OLD_LENGTH = 3189; - exports.ER_CANT_RESET_MASTER = 3190; - exports.ER_GROUP_REPLICATION_MAX_GROUP_SIZE = 3191; - exports.ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED = 3192; - exports.ER_TABLE_REFERENCED = 3193; - exports.ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE = 3194; - exports.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO = 3195; - exports.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID = 3196; - exports.ER_XA_RETRY = 3197; - exports.ER_KEYRING_AWS_UDF_AWS_KMS_ERROR = 3198; - exports.ER_BINLOG_UNSAFE_XA = 3199; - exports.ER_UDF_ERROR = 3200; - exports.ER_KEYRING_MIGRATION_FAILURE = 3201; - exports.ER_KEYRING_ACCESS_DENIED_ERROR = 3202; - exports.ER_KEYRING_MIGRATION_STATUS = 3203; - exports.ER_PLUGIN_FAILED_TO_OPEN_TABLES = 3204; - exports.ER_PLUGIN_FAILED_TO_OPEN_TABLE = 3205; - exports.ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED = 3206; - exports.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET = 3207; - exports.ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY = 3208; - exports.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED = 3209; - exports.ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED = 3210; - exports.ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE = 3211; - exports.ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED = 3212; - exports.ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS = 3213; - exports.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE = 3214; - exports.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT = 3215; - exports.ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED = 3216; - exports.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE = 3217; - exports.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE = 3218; - exports.ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR = 3219; - exports.ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY = 3220; - exports.ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY = 3221; - exports.ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS = 3222; - exports.ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC = 3223; - exports.ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER = 3224; - exports.ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER = 3225; - exports.WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP = 3226; - exports.ER_XA_REPLICATION_FILTERS = 3227; - exports.ER_CANT_OPEN_ERROR_LOG = 3228; - exports.ER_GROUPING_ON_TIMESTAMP_IN_DST = 3229; - exports.ER_CANT_START_SERVER_NAMED_PIPE = 3230; - exports[1] = "EE_CANTCREATEFILE"; - exports[2] = "EE_READ"; - exports[3] = "EE_WRITE"; - exports[4] = "EE_BADCLOSE"; - exports[5] = "EE_OUTOFMEMORY"; - exports[6] = "EE_DELETE"; - exports[7] = "EE_LINK"; - exports[9] = "EE_EOFERR"; - exports[10] = "EE_CANTLOCK"; - exports[11] = "EE_CANTUNLOCK"; - exports[12] = "EE_DIR"; - exports[13] = "EE_STAT"; - exports[14] = "EE_CANT_CHSIZE"; - exports[15] = "EE_CANT_OPEN_STREAM"; - exports[16] = "EE_GETWD"; - exports[17] = "EE_SETWD"; - exports[18] = "EE_LINK_WARNING"; - exports[19] = "EE_OPEN_WARNING"; - exports[20] = "EE_DISK_FULL"; - exports[21] = "EE_CANT_MKDIR"; - exports[22] = "EE_UNKNOWN_CHARSET"; - exports[23] = "EE_OUT_OF_FILERESOURCES"; - exports[24] = "EE_CANT_READLINK"; - exports[25] = "EE_CANT_SYMLINK"; - exports[26] = "EE_REALPATH"; - exports[27] = "EE_SYNC"; - exports[28] = "EE_UNKNOWN_COLLATION"; - exports[29] = "EE_FILENOTFOUND"; - exports[30] = "EE_FILE_NOT_CLOSED"; - exports[31] = "EE_CHANGE_OWNERSHIP"; - exports[32] = "EE_CHANGE_PERMISSIONS"; - exports[33] = "EE_CANT_SEEK"; - exports[34] = "EE_CAPACITY_EXCEEDED"; - exports[120] = "HA_ERR_KEY_NOT_FOUND"; - exports[121] = "HA_ERR_FOUND_DUPP_KEY"; - exports[122] = "HA_ERR_INTERNAL_ERROR"; - exports[123] = "HA_ERR_RECORD_CHANGED"; - exports[124] = "HA_ERR_WRONG_INDEX"; - exports[126] = "HA_ERR_CRASHED"; - exports[127] = "HA_ERR_WRONG_IN_RECORD"; - exports[128] = "HA_ERR_OUT_OF_MEM"; - exports[130] = "HA_ERR_NOT_A_TABLE"; - exports[131] = "HA_ERR_WRONG_COMMAND"; - exports[132] = "HA_ERR_OLD_FILE"; - exports[133] = "HA_ERR_NO_ACTIVE_RECORD"; - exports[134] = "HA_ERR_RECORD_DELETED"; - exports[135] = "HA_ERR_RECORD_FILE_FULL"; - exports[136] = "HA_ERR_INDEX_FILE_FULL"; - exports[137] = "HA_ERR_END_OF_FILE"; - exports[138] = "HA_ERR_UNSUPPORTED"; - exports[139] = "HA_ERR_TOO_BIG_ROW"; - exports[140] = "HA_WRONG_CREATE_OPTION"; - exports[141] = "HA_ERR_FOUND_DUPP_UNIQUE"; - exports[142] = "HA_ERR_UNKNOWN_CHARSET"; - exports[143] = "HA_ERR_WRONG_MRG_TABLE_DEF"; - exports[144] = "HA_ERR_CRASHED_ON_REPAIR"; - exports[145] = "HA_ERR_CRASHED_ON_USAGE"; - exports[146] = "HA_ERR_LOCK_WAIT_TIMEOUT"; - exports[147] = "HA_ERR_LOCK_TABLE_FULL"; - exports[148] = "HA_ERR_READ_ONLY_TRANSACTION"; - exports[149] = "HA_ERR_LOCK_DEADLOCK"; - exports[150] = "HA_ERR_CANNOT_ADD_FOREIGN"; - exports[151] = "HA_ERR_NO_REFERENCED_ROW"; - exports[152] = "HA_ERR_ROW_IS_REFERENCED"; - exports[153] = "HA_ERR_NO_SAVEPOINT"; - exports[154] = "HA_ERR_NON_UNIQUE_BLOCK_SIZE"; - exports[155] = "HA_ERR_NO_SUCH_TABLE"; - exports[156] = "HA_ERR_TABLE_EXIST"; - exports[157] = "HA_ERR_NO_CONNECTION"; - exports[158] = "HA_ERR_NULL_IN_SPATIAL"; - exports[159] = "HA_ERR_TABLE_DEF_CHANGED"; - exports[160] = "HA_ERR_NO_PARTITION_FOUND"; - exports[161] = "HA_ERR_RBR_LOGGING_FAILED"; - exports[162] = "HA_ERR_DROP_INDEX_FK"; - exports[163] = "HA_ERR_FOREIGN_DUPLICATE_KEY"; - exports[164] = "HA_ERR_TABLE_NEEDS_UPGRADE"; - exports[165] = "HA_ERR_TABLE_READONLY"; - exports[166] = "HA_ERR_AUTOINC_READ_FAILED"; - exports[167] = "HA_ERR_AUTOINC_ERANGE"; - exports[168] = "HA_ERR_GENERIC"; - exports[169] = "HA_ERR_RECORD_IS_THE_SAME"; - exports[170] = "HA_ERR_LOGGING_IMPOSSIBLE"; - exports[171] = "HA_ERR_CORRUPT_EVENT"; - exports[172] = "HA_ERR_NEW_FILE"; - exports[173] = "HA_ERR_ROWS_EVENT_APPLY"; - exports[174] = "HA_ERR_INITIALIZATION"; - exports[175] = "HA_ERR_FILE_TOO_SHORT"; - exports[176] = "HA_ERR_WRONG_CRC"; - exports[177] = "HA_ERR_TOO_MANY_CONCURRENT_TRXS"; - exports[178] = "HA_ERR_NOT_IN_LOCK_PARTITIONS"; - exports[179] = "HA_ERR_INDEX_COL_TOO_LONG"; - exports[180] = "HA_ERR_INDEX_CORRUPT"; - exports[181] = "HA_ERR_UNDO_REC_TOO_BIG"; - exports[182] = "HA_FTS_INVALID_DOCID"; - exports[183] = "HA_ERR_TABLE_IN_FK_CHECK"; - exports[184] = "HA_ERR_TABLESPACE_EXISTS"; - exports[185] = "HA_ERR_TOO_MANY_FIELDS"; - exports[186] = "HA_ERR_ROW_IN_WRONG_PARTITION"; - exports[187] = "HA_ERR_INNODB_READ_ONLY"; - exports[188] = "HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT"; - exports[189] = "HA_ERR_TEMP_FILE_WRITE_FAILURE"; - exports[190] = "HA_ERR_INNODB_FORCED_RECOVERY"; - exports[191] = "HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE"; - exports[192] = "HA_ERR_FK_DEPTH_EXCEEDED"; - exports[193] = "HA_MISSING_CREATE_OPTION"; - exports[194] = "HA_ERR_SE_OUT_OF_MEMORY"; - exports[195] = "HA_ERR_TABLE_CORRUPT"; - exports[196] = "HA_ERR_QUERY_INTERRUPTED"; - exports[197] = "HA_ERR_TABLESPACE_MISSING"; - exports[198] = "HA_ERR_TABLESPACE_IS_NOT_EMPTY"; - exports[199] = "HA_ERR_WRONG_FILE_NAME"; - exports[200] = "HA_ERR_NOT_ALLOWED_COMMAND"; - exports[201] = "HA_ERR_COMPUTE_FAILED"; - exports[1000] = "ER_HASHCHK"; - exports[1001] = "ER_NISAMCHK"; - exports[1002] = "ER_NO"; - exports[1003] = "ER_YES"; - exports[1004] = "ER_CANT_CREATE_FILE"; - exports[1005] = "ER_CANT_CREATE_TABLE"; - exports[1006] = "ER_CANT_CREATE_DB"; - exports[1007] = "ER_DB_CREATE_EXISTS"; - exports[1008] = "ER_DB_DROP_EXISTS"; - exports[1009] = "ER_DB_DROP_DELETE"; - exports[1010] = "ER_DB_DROP_RMDIR"; - exports[1011] = "ER_CANT_DELETE_FILE"; - exports[1012] = "ER_CANT_FIND_SYSTEM_REC"; - exports[1013] = "ER_CANT_GET_STAT"; - exports[1014] = "ER_CANT_GET_WD"; - exports[1015] = "ER_CANT_LOCK"; - exports[1016] = "ER_CANT_OPEN_FILE"; - exports[1017] = "ER_FILE_NOT_FOUND"; - exports[1018] = "ER_CANT_READ_DIR"; - exports[1019] = "ER_CANT_SET_WD"; - exports[1020] = "ER_CHECKREAD"; - exports[1021] = "ER_DISK_FULL"; - exports[1022] = "ER_DUP_KEY"; - exports[1023] = "ER_ERROR_ON_CLOSE"; - exports[1024] = "ER_ERROR_ON_READ"; - exports[1025] = "ER_ERROR_ON_RENAME"; - exports[1026] = "ER_ERROR_ON_WRITE"; - exports[1027] = "ER_FILE_USED"; - exports[1028] = "ER_FILSORT_ABORT"; - exports[1029] = "ER_FORM_NOT_FOUND"; - exports[1030] = "ER_GET_ERRNO"; - exports[1031] = "ER_ILLEGAL_HA"; - exports[1032] = "ER_KEY_NOT_FOUND"; - exports[1033] = "ER_NOT_FORM_FILE"; - exports[1034] = "ER_NOT_KEYFILE"; - exports[1035] = "ER_OLD_KEYFILE"; - exports[1036] = "ER_OPEN_AS_READONLY"; - exports[1037] = "ER_OUTOFMEMORY"; - exports[1038] = "ER_OUT_OF_SORTMEMORY"; - exports[1039] = "ER_UNEXPECTED_EOF"; - exports[1040] = "ER_CON_COUNT_ERROR"; - exports[1041] = "ER_OUT_OF_RESOURCES"; - exports[1042] = "ER_BAD_HOST_ERROR"; - exports[1043] = "ER_HANDSHAKE_ERROR"; - exports[1044] = "ER_DBACCESS_DENIED_ERROR"; - exports[1045] = "ER_ACCESS_DENIED_ERROR"; - exports[1046] = "ER_NO_DB_ERROR"; - exports[1047] = "ER_UNKNOWN_COM_ERROR"; - exports[1048] = "ER_BAD_NULL_ERROR"; - exports[1049] = "ER_BAD_DB_ERROR"; - exports[1050] = "ER_TABLE_EXISTS_ERROR"; - exports[1051] = "ER_BAD_TABLE_ERROR"; - exports[1052] = "ER_NON_UNIQ_ERROR"; - exports[1053] = "ER_SERVER_SHUTDOWN"; - exports[1054] = "ER_BAD_FIELD_ERROR"; - exports[1055] = "ER_WRONG_FIELD_WITH_GROUP"; - exports[1056] = "ER_WRONG_GROUP_FIELD"; - exports[1057] = "ER_WRONG_SUM_SELECT"; - exports[1058] = "ER_WRONG_VALUE_COUNT"; - exports[1059] = "ER_TOO_LONG_IDENT"; - exports[1060] = "ER_DUP_FIELDNAME"; - exports[1061] = "ER_DUP_KEYNAME"; - exports[1062] = "ER_DUP_ENTRY"; - exports[1063] = "ER_WRONG_FIELD_SPEC"; - exports[1064] = "ER_PARSE_ERROR"; - exports[1065] = "ER_EMPTY_QUERY"; - exports[1066] = "ER_NONUNIQ_TABLE"; - exports[1067] = "ER_INVALID_DEFAULT"; - exports[1068] = "ER_MULTIPLE_PRI_KEY"; - exports[1069] = "ER_TOO_MANY_KEYS"; - exports[1070] = "ER_TOO_MANY_KEY_PARTS"; - exports[1071] = "ER_TOO_LONG_KEY"; - exports[1072] = "ER_KEY_COLUMN_DOES_NOT_EXITS"; - exports[1073] = "ER_BLOB_USED_AS_KEY"; - exports[1074] = "ER_TOO_BIG_FIELDLENGTH"; - exports[1075] = "ER_WRONG_AUTO_KEY"; - exports[1076] = "ER_READY"; - exports[1077] = "ER_NORMAL_SHUTDOWN"; - exports[1078] = "ER_GOT_SIGNAL"; - exports[1079] = "ER_SHUTDOWN_COMPLETE"; - exports[1080] = "ER_FORCING_CLOSE"; - exports[1081] = "ER_IPSOCK_ERROR"; - exports[1082] = "ER_NO_SUCH_INDEX"; - exports[1083] = "ER_WRONG_FIELD_TERMINATORS"; - exports[1084] = "ER_BLOBS_AND_NO_TERMINATED"; - exports[1085] = "ER_TEXTFILE_NOT_READABLE"; - exports[1086] = "ER_FILE_EXISTS_ERROR"; - exports[1087] = "ER_LOAD_INFO"; - exports[1088] = "ER_ALTER_INFO"; - exports[1089] = "ER_WRONG_SUB_KEY"; - exports[1090] = "ER_CANT_REMOVE_ALL_FIELDS"; - exports[1091] = "ER_CANT_DROP_FIELD_OR_KEY"; - exports[1092] = "ER_INSERT_INFO"; - exports[1093] = "ER_UPDATE_TABLE_USED"; - exports[1094] = "ER_NO_SUCH_THREAD"; - exports[1095] = "ER_KILL_DENIED_ERROR"; - exports[1096] = "ER_NO_TABLES_USED"; - exports[1097] = "ER_TOO_BIG_SET"; - exports[1098] = "ER_NO_UNIQUE_LOGFILE"; - exports[1099] = "ER_TABLE_NOT_LOCKED_FOR_WRITE"; - exports[1100] = "ER_TABLE_NOT_LOCKED"; - exports[1101] = "ER_BLOB_CANT_HAVE_DEFAULT"; - exports[1102] = "ER_WRONG_DB_NAME"; - exports[1103] = "ER_WRONG_TABLE_NAME"; - exports[1104] = "ER_TOO_BIG_SELECT"; - exports[1105] = "ER_UNKNOWN_ERROR"; - exports[1106] = "ER_UNKNOWN_PROCEDURE"; - exports[1107] = "ER_WRONG_PARAMCOUNT_TO_PROCEDURE"; - exports[1108] = "ER_WRONG_PARAMETERS_TO_PROCEDURE"; - exports[1109] = "ER_UNKNOWN_TABLE"; - exports[1110] = "ER_FIELD_SPECIFIED_TWICE"; - exports[1111] = "ER_INVALID_GROUP_FUNC_USE"; - exports[1112] = "ER_UNSUPPORTED_EXTENSION"; - exports[1113] = "ER_TABLE_MUST_HAVE_COLUMNS"; - exports[1114] = "ER_RECORD_FILE_FULL"; - exports[1115] = "ER_UNKNOWN_CHARACTER_SET"; - exports[1116] = "ER_TOO_MANY_TABLES"; - exports[1117] = "ER_TOO_MANY_FIELDS"; - exports[1118] = "ER_TOO_BIG_ROWSIZE"; - exports[1119] = "ER_STACK_OVERRUN"; - exports[1120] = "ER_WRONG_OUTER_JOIN"; - exports[1121] = "ER_NULL_COLUMN_IN_INDEX"; - exports[1122] = "ER_CANT_FIND_UDF"; - exports[1123] = "ER_CANT_INITIALIZE_UDF"; - exports[1124] = "ER_UDF_NO_PATHS"; - exports[1125] = "ER_UDF_EXISTS"; - exports[1126] = "ER_CANT_OPEN_LIBRARY"; - exports[1127] = "ER_CANT_FIND_DL_ENTRY"; - exports[1128] = "ER_FUNCTION_NOT_DEFINED"; - exports[1129] = "ER_HOST_IS_BLOCKED"; - exports[1130] = "ER_HOST_NOT_PRIVILEGED"; - exports[1131] = "ER_PASSWORD_ANONYMOUS_USER"; - exports[1132] = "ER_PASSWORD_NOT_ALLOWED"; - exports[1133] = "ER_PASSWORD_NO_MATCH"; - exports[1134] = "ER_UPDATE_INFO"; - exports[1135] = "ER_CANT_CREATE_THREAD"; - exports[1136] = "ER_WRONG_VALUE_COUNT_ON_ROW"; - exports[1137] = "ER_CANT_REOPEN_TABLE"; - exports[1138] = "ER_INVALID_USE_OF_NULL"; - exports[1139] = "ER_REGEXP_ERROR"; - exports[1140] = "ER_MIX_OF_GROUP_FUNC_AND_FIELDS"; - exports[1141] = "ER_NONEXISTING_GRANT"; - exports[1142] = "ER_TABLEACCESS_DENIED_ERROR"; - exports[1143] = "ER_COLUMNACCESS_DENIED_ERROR"; - exports[1144] = "ER_ILLEGAL_GRANT_FOR_TABLE"; - exports[1145] = "ER_GRANT_WRONG_HOST_OR_USER"; - exports[1146] = "ER_NO_SUCH_TABLE"; - exports[1147] = "ER_NONEXISTING_TABLE_GRANT"; - exports[1148] = "ER_NOT_ALLOWED_COMMAND"; - exports[1149] = "ER_SYNTAX_ERROR"; - exports[1150] = "ER_DELAYED_CANT_CHANGE_LOCK"; - exports[1151] = "ER_TOO_MANY_DELAYED_THREADS"; - exports[1152] = "ER_ABORTING_CONNECTION"; - exports[1153] = "ER_NET_PACKET_TOO_LARGE"; - exports[1154] = "ER_NET_READ_ERROR_FROM_PIPE"; - exports[1155] = "ER_NET_FCNTL_ERROR"; - exports[1156] = "ER_NET_PACKETS_OUT_OF_ORDER"; - exports[1157] = "ER_NET_UNCOMPRESS_ERROR"; - exports[1158] = "ER_NET_READ_ERROR"; - exports[1159] = "ER_NET_READ_INTERRUPTED"; - exports[1160] = "ER_NET_ERROR_ON_WRITE"; - exports[1161] = "ER_NET_WRITE_INTERRUPTED"; - exports[1162] = "ER_TOO_LONG_STRING"; - exports[1163] = "ER_TABLE_CANT_HANDLE_BLOB"; - exports[1164] = "ER_TABLE_CANT_HANDLE_AUTO_INCREMENT"; - exports[1165] = "ER_DELAYED_INSERT_TABLE_LOCKED"; - exports[1166] = "ER_WRONG_COLUMN_NAME"; - exports[1167] = "ER_WRONG_KEY_COLUMN"; - exports[1168] = "ER_WRONG_MRG_TABLE"; - exports[1169] = "ER_DUP_UNIQUE"; - exports[1170] = "ER_BLOB_KEY_WITHOUT_LENGTH"; - exports[1171] = "ER_PRIMARY_CANT_HAVE_NULL"; - exports[1172] = "ER_TOO_MANY_ROWS"; - exports[1173] = "ER_REQUIRES_PRIMARY_KEY"; - exports[1174] = "ER_NO_RAID_COMPILED"; - exports[1175] = "ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE"; - exports[1176] = "ER_KEY_DOES_NOT_EXITS"; - exports[1177] = "ER_CHECK_NO_SUCH_TABLE"; - exports[1178] = "ER_CHECK_NOT_IMPLEMENTED"; - exports[1179] = "ER_CANT_DO_THIS_DURING_AN_TRANSACTION"; - exports[1180] = "ER_ERROR_DURING_COMMIT"; - exports[1181] = "ER_ERROR_DURING_ROLLBACK"; - exports[1182] = "ER_ERROR_DURING_FLUSH_LOGS"; - exports[1183] = "ER_ERROR_DURING_CHECKPOINT"; - exports[1184] = "ER_NEW_ABORTING_CONNECTION"; - exports[1185] = "ER_DUMP_NOT_IMPLEMENTED"; - exports[1186] = "ER_FLUSH_MASTER_BINLOG_CLOSED"; - exports[1187] = "ER_INDEX_REBUILD"; - exports[1188] = "ER_MASTER"; - exports[1189] = "ER_MASTER_NET_READ"; - exports[1190] = "ER_MASTER_NET_WRITE"; - exports[1191] = "ER_FT_MATCHING_KEY_NOT_FOUND"; - exports[1192] = "ER_LOCK_OR_ACTIVE_TRANSACTION"; - exports[1193] = "ER_UNKNOWN_SYSTEM_VARIABLE"; - exports[1194] = "ER_CRASHED_ON_USAGE"; - exports[1195] = "ER_CRASHED_ON_REPAIR"; - exports[1196] = "ER_WARNING_NOT_COMPLETE_ROLLBACK"; - exports[1197] = "ER_TRANS_CACHE_FULL"; - exports[1198] = "ER_SLAVE_MUST_STOP"; - exports[1199] = "ER_SLAVE_NOT_RUNNING"; - exports[1200] = "ER_BAD_SLAVE"; - exports[1201] = "ER_MASTER_INFO"; - exports[1202] = "ER_SLAVE_THREAD"; - exports[1203] = "ER_TOO_MANY_USER_CONNECTIONS"; - exports[1204] = "ER_SET_CONSTANTS_ONLY"; - exports[1205] = "ER_LOCK_WAIT_TIMEOUT"; - exports[1206] = "ER_LOCK_TABLE_FULL"; - exports[1207] = "ER_READ_ONLY_TRANSACTION"; - exports[1208] = "ER_DROP_DB_WITH_READ_LOCK"; - exports[1209] = "ER_CREATE_DB_WITH_READ_LOCK"; - exports[1210] = "ER_WRONG_ARGUMENTS"; - exports[1211] = "ER_NO_PERMISSION_TO_CREATE_USER"; - exports[1212] = "ER_UNION_TABLES_IN_DIFFERENT_DIR"; - exports[1213] = "ER_LOCK_DEADLOCK"; - exports[1214] = "ER_TABLE_CANT_HANDLE_FT"; - exports[1215] = "ER_CANNOT_ADD_FOREIGN"; - exports[1216] = "ER_NO_REFERENCED_ROW"; - exports[1217] = "ER_ROW_IS_REFERENCED"; - exports[1218] = "ER_CONNECT_TO_MASTER"; - exports[1219] = "ER_QUERY_ON_MASTER"; - exports[1220] = "ER_ERROR_WHEN_EXECUTING_COMMAND"; - exports[1221] = "ER_WRONG_USAGE"; - exports[1222] = "ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT"; - exports[1223] = "ER_CANT_UPDATE_WITH_READLOCK"; - exports[1224] = "ER_MIXING_NOT_ALLOWED"; - exports[1225] = "ER_DUP_ARGUMENT"; - exports[1226] = "ER_USER_LIMIT_REACHED"; - exports[1227] = "ER_SPECIFIC_ACCESS_DENIED_ERROR"; - exports[1228] = "ER_LOCAL_VARIABLE"; - exports[1229] = "ER_GLOBAL_VARIABLE"; - exports[1230] = "ER_NO_DEFAULT"; - exports[1231] = "ER_WRONG_VALUE_FOR_VAR"; - exports[1232] = "ER_WRONG_TYPE_FOR_VAR"; - exports[1233] = "ER_VAR_CANT_BE_READ"; - exports[1234] = "ER_CANT_USE_OPTION_HERE"; - exports[1235] = "ER_NOT_SUPPORTED_YET"; - exports[1236] = "ER_MASTER_FATAL_ERROR_READING_BINLOG"; - exports[1237] = "ER_SLAVE_IGNORED_TABLE"; - exports[1238] = "ER_INCORRECT_GLOBAL_LOCAL_VAR"; - exports[1239] = "ER_WRONG_FK_DEF"; - exports[1240] = "ER_KEY_REF_DO_NOT_MATCH_TABLE_REF"; - exports[1241] = "ER_OPERAND_COLUMNS"; - exports[1242] = "ER_SUBQUERY_NO_1_ROW"; - exports[1243] = "ER_UNKNOWN_STMT_HANDLER"; - exports[1244] = "ER_CORRUPT_HELP_DB"; - exports[1245] = "ER_CYCLIC_REFERENCE"; - exports[1246] = "ER_AUTO_CONVERT"; - exports[1247] = "ER_ILLEGAL_REFERENCE"; - exports[1248] = "ER_DERIVED_MUST_HAVE_ALIAS"; - exports[1249] = "ER_SELECT_REDUCED"; - exports[1250] = "ER_TABLENAME_NOT_ALLOWED_HERE"; - exports[1251] = "ER_NOT_SUPPORTED_AUTH_MODE"; - exports[1252] = "ER_SPATIAL_CANT_HAVE_NULL"; - exports[1253] = "ER_COLLATION_CHARSET_MISMATCH"; - exports[1254] = "ER_SLAVE_WAS_RUNNING"; - exports[1255] = "ER_SLAVE_WAS_NOT_RUNNING"; - exports[1256] = "ER_TOO_BIG_FOR_UNCOMPRESS"; - exports[1257] = "ER_ZLIB_Z_MEM_ERROR"; - exports[1258] = "ER_ZLIB_Z_BUF_ERROR"; - exports[1259] = "ER_ZLIB_Z_DATA_ERROR"; - exports[1260] = "ER_CUT_VALUE_GROUP_CONCAT"; - exports[1261] = "ER_WARN_TOO_FEW_RECORDS"; - exports[1262] = "ER_WARN_TOO_MANY_RECORDS"; - exports[1263] = "ER_WARN_NULL_TO_NOTNULL"; - exports[1264] = "ER_WARN_DATA_OUT_OF_RANGE"; - exports[1265] = "WARN_DATA_TRUNCATED"; - exports[1266] = "ER_WARN_USING_OTHER_HANDLER"; - exports[1267] = "ER_CANT_AGGREGATE_2COLLATIONS"; - exports[1268] = "ER_DROP_USER"; - exports[1269] = "ER_REVOKE_GRANTS"; - exports[1270] = "ER_CANT_AGGREGATE_3COLLATIONS"; - exports[1271] = "ER_CANT_AGGREGATE_NCOLLATIONS"; - exports[1272] = "ER_VARIABLE_IS_NOT_STRUCT"; - exports[1273] = "ER_UNKNOWN_COLLATION"; - exports[1274] = "ER_SLAVE_IGNORED_SSL_PARAMS"; - exports[1275] = "ER_SERVER_IS_IN_SECURE_AUTH_MODE"; - exports[1276] = "ER_WARN_FIELD_RESOLVED"; - exports[1277] = "ER_BAD_SLAVE_UNTIL_COND"; - exports[1278] = "ER_MISSING_SKIP_SLAVE"; - exports[1279] = "ER_UNTIL_COND_IGNORED"; - exports[1280] = "ER_WRONG_NAME_FOR_INDEX"; - exports[1281] = "ER_WRONG_NAME_FOR_CATALOG"; - exports[1282] = "ER_WARN_QC_RESIZE"; - exports[1283] = "ER_BAD_FT_COLUMN"; - exports[1284] = "ER_UNKNOWN_KEY_CACHE"; - exports[1285] = "ER_WARN_HOSTNAME_WONT_WORK"; - exports[1286] = "ER_UNKNOWN_STORAGE_ENGINE"; - exports[1287] = "ER_WARN_DEPRECATED_SYNTAX"; - exports[1288] = "ER_NON_UPDATABLE_TABLE"; - exports[1289] = "ER_FEATURE_DISABLED"; - exports[1290] = "ER_OPTION_PREVENTS_STATEMENT"; - exports[1291] = "ER_DUPLICATED_VALUE_IN_TYPE"; - exports[1292] = "ER_TRUNCATED_WRONG_VALUE"; - exports[1293] = "ER_TOO_MUCH_AUTO_TIMESTAMP_COLS"; - exports[1294] = "ER_INVALID_ON_UPDATE"; - exports[1295] = "ER_UNSUPPORTED_PS"; - exports[1296] = "ER_GET_ERRMSG"; - exports[1297] = "ER_GET_TEMPORARY_ERRMSG"; - exports[1298] = "ER_UNKNOWN_TIME_ZONE"; - exports[1299] = "ER_WARN_INVALID_TIMESTAMP"; - exports[1300] = "ER_INVALID_CHARACTER_STRING"; - exports[1301] = "ER_WARN_ALLOWED_PACKET_OVERFLOWED"; - exports[1302] = "ER_CONFLICTING_DECLARATIONS"; - exports[1303] = "ER_SP_NO_RECURSIVE_CREATE"; - exports[1304] = "ER_SP_ALREADY_EXISTS"; - exports[1305] = "ER_SP_DOES_NOT_EXIST"; - exports[1306] = "ER_SP_DROP_FAILED"; - exports[1307] = "ER_SP_STORE_FAILED"; - exports[1308] = "ER_SP_LILABEL_MISMATCH"; - exports[1309] = "ER_SP_LABEL_REDEFINE"; - exports[1310] = "ER_SP_LABEL_MISMATCH"; - exports[1311] = "ER_SP_UNINIT_VAR"; - exports[1312] = "ER_SP_BADSELECT"; - exports[1313] = "ER_SP_BADRETURN"; - exports[1314] = "ER_SP_BADSTATEMENT"; - exports[1315] = "ER_UPDATE_LOG_DEPRECATED_IGNORED"; - exports[1316] = "ER_UPDATE_LOG_DEPRECATED_TRANSLATED"; - exports[1317] = "ER_QUERY_INTERRUPTED"; - exports[1318] = "ER_SP_WRONG_NO_OF_ARGS"; - exports[1319] = "ER_SP_COND_MISMATCH"; - exports[1320] = "ER_SP_NORETURN"; - exports[1321] = "ER_SP_NORETURNEND"; - exports[1322] = "ER_SP_BAD_CURSOR_QUERY"; - exports[1323] = "ER_SP_BAD_CURSOR_SELECT"; - exports[1324] = "ER_SP_CURSOR_MISMATCH"; - exports[1325] = "ER_SP_CURSOR_ALREADY_OPEN"; - exports[1326] = "ER_SP_CURSOR_NOT_OPEN"; - exports[1327] = "ER_SP_UNDECLARED_VAR"; - exports[1328] = "ER_SP_WRONG_NO_OF_FETCH_ARGS"; - exports[1329] = "ER_SP_FETCH_NO_DATA"; - exports[1330] = "ER_SP_DUP_PARAM"; - exports[1331] = "ER_SP_DUP_VAR"; - exports[1332] = "ER_SP_DUP_COND"; - exports[1333] = "ER_SP_DUP_CURS"; - exports[1334] = "ER_SP_CANT_ALTER"; - exports[1335] = "ER_SP_SUBSELECT_NYI"; - exports[1336] = "ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG"; - exports[1337] = "ER_SP_VARCOND_AFTER_CURSHNDLR"; - exports[1338] = "ER_SP_CURSOR_AFTER_HANDLER"; - exports[1339] = "ER_SP_CASE_NOT_FOUND"; - exports[1340] = "ER_FPARSER_TOO_BIG_FILE"; - exports[1341] = "ER_FPARSER_BAD_HEADER"; - exports[1342] = "ER_FPARSER_EOF_IN_COMMENT"; - exports[1343] = "ER_FPARSER_ERROR_IN_PARAMETER"; - exports[1344] = "ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER"; - exports[1345] = "ER_VIEW_NO_EXPLAIN"; - exports[1346] = "ER_FRM_UNKNOWN_TYPE"; - exports[1347] = "ER_WRONG_OBJECT"; - exports[1348] = "ER_NONUPDATEABLE_COLUMN"; - exports[1349] = "ER_VIEW_SELECT_DERIVED"; - exports[1350] = "ER_VIEW_SELECT_CLAUSE"; - exports[1351] = "ER_VIEW_SELECT_VARIABLE"; - exports[1352] = "ER_VIEW_SELECT_TMPTABLE"; - exports[1353] = "ER_VIEW_WRONG_LIST"; - exports[1354] = "ER_WARN_VIEW_MERGE"; - exports[1355] = "ER_WARN_VIEW_WITHOUT_KEY"; - exports[1356] = "ER_VIEW_INVALID"; - exports[1357] = "ER_SP_NO_DROP_SP"; - exports[1358] = "ER_SP_GOTO_IN_HNDLR"; - exports[1359] = "ER_TRG_ALREADY_EXISTS"; - exports[1360] = "ER_TRG_DOES_NOT_EXIST"; - exports[1361] = "ER_TRG_ON_VIEW_OR_TEMP_TABLE"; - exports[1362] = "ER_TRG_CANT_CHANGE_ROW"; - exports[1363] = "ER_TRG_NO_SUCH_ROW_IN_TRG"; - exports[1364] = "ER_NO_DEFAULT_FOR_FIELD"; - exports[1365] = "ER_DIVISION_BY_ZERO"; - exports[1366] = "ER_TRUNCATED_WRONG_VALUE_FOR_FIELD"; - exports[1367] = "ER_ILLEGAL_VALUE_FOR_TYPE"; - exports[1368] = "ER_VIEW_NONUPD_CHECK"; - exports[1369] = "ER_VIEW_CHECK_FAILED"; - exports[1370] = "ER_PROCACCESS_DENIED_ERROR"; - exports[1371] = "ER_RELAY_LOG_FAIL"; - exports[1372] = "ER_PASSWD_LENGTH"; - exports[1373] = "ER_UNKNOWN_TARGET_BINLOG"; - exports[1374] = "ER_IO_ERR_LOG_INDEX_READ"; - exports[1375] = "ER_BINLOG_PURGE_PROHIBITED"; - exports[1376] = "ER_FSEEK_FAIL"; - exports[1377] = "ER_BINLOG_PURGE_FATAL_ERR"; - exports[1378] = "ER_LOG_IN_USE"; - exports[1379] = "ER_LOG_PURGE_UNKNOWN_ERR"; - exports[1380] = "ER_RELAY_LOG_INIT"; - exports[1381] = "ER_NO_BINARY_LOGGING"; - exports[1382] = "ER_RESERVED_SYNTAX"; - exports[1383] = "ER_WSAS_FAILED"; - exports[1384] = "ER_DIFF_GROUPS_PROC"; - exports[1385] = "ER_NO_GROUP_FOR_PROC"; - exports[1386] = "ER_ORDER_WITH_PROC"; - exports[1387] = "ER_LOGGING_PROHIBIT_CHANGING_OF"; - exports[1388] = "ER_NO_FILE_MAPPING"; - exports[1389] = "ER_WRONG_MAGIC"; - exports[1390] = "ER_PS_MANY_PARAM"; - exports[1391] = "ER_KEY_PART_0"; - exports[1392] = "ER_VIEW_CHECKSUM"; - exports[1393] = "ER_VIEW_MULTIUPDATE"; - exports[1394] = "ER_VIEW_NO_INSERT_FIELD_LIST"; - exports[1395] = "ER_VIEW_DELETE_MERGE_VIEW"; - exports[1396] = "ER_CANNOT_USER"; - exports[1397] = "ER_XAER_NOTA"; - exports[1398] = "ER_XAER_INVAL"; - exports[1399] = "ER_XAER_RMFAIL"; - exports[1400] = "ER_XAER_OUTSIDE"; - exports[1401] = "ER_XAER_RMERR"; - exports[1402] = "ER_XA_RBROLLBACK"; - exports[1403] = "ER_NONEXISTING_PROC_GRANT"; - exports[1404] = "ER_PROC_AUTO_GRANT_FAIL"; - exports[1405] = "ER_PROC_AUTO_REVOKE_FAIL"; - exports[1406] = "ER_DATA_TOO_LONG"; - exports[1407] = "ER_SP_BAD_SQLSTATE"; - exports[1408] = "ER_STARTUP"; - exports[1409] = "ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR"; - exports[1410] = "ER_CANT_CREATE_USER_WITH_GRANT"; - exports[1411] = "ER_WRONG_VALUE_FOR_TYPE"; - exports[1412] = "ER_TABLE_DEF_CHANGED"; - exports[1413] = "ER_SP_DUP_HANDLER"; - exports[1414] = "ER_SP_NOT_VAR_ARG"; - exports[1415] = "ER_SP_NO_RETSET"; - exports[1416] = "ER_CANT_CREATE_GEOMETRY_OBJECT"; - exports[1417] = "ER_FAILED_ROUTINE_BREAK_BINLOG"; - exports[1418] = "ER_BINLOG_UNSAFE_ROUTINE"; - exports[1419] = "ER_BINLOG_CREATE_ROUTINE_NEED_SUPER"; - exports[1420] = "ER_EXEC_STMT_WITH_OPEN_CURSOR"; - exports[1421] = "ER_STMT_HAS_NO_OPEN_CURSOR"; - exports[1422] = "ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG"; - exports[1423] = "ER_NO_DEFAULT_FOR_VIEW_FIELD"; - exports[1424] = "ER_SP_NO_RECURSION"; - exports[1425] = "ER_TOO_BIG_SCALE"; - exports[1426] = "ER_TOO_BIG_PRECISION"; - exports[1427] = "ER_M_BIGGER_THAN_D"; - exports[1428] = "ER_WRONG_LOCK_OF_SYSTEM_TABLE"; - exports[1429] = "ER_CONNECT_TO_FOREIGN_DATA_SOURCE"; - exports[1430] = "ER_QUERY_ON_FOREIGN_DATA_SOURCE"; - exports[1431] = "ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST"; - exports[1432] = "ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE"; - exports[1433] = "ER_FOREIGN_DATA_STRING_INVALID"; - exports[1434] = "ER_CANT_CREATE_FEDERATED_TABLE"; - exports[1435] = "ER_TRG_IN_WRONG_SCHEMA"; - exports[1436] = "ER_STACK_OVERRUN_NEED_MORE"; - exports[1437] = "ER_TOO_LONG_BODY"; - exports[1438] = "ER_WARN_CANT_DROP_DEFAULT_KEYCACHE"; - exports[1439] = "ER_TOO_BIG_DISPLAYWIDTH"; - exports[1440] = "ER_XAER_DUPID"; - exports[1441] = "ER_DATETIME_FUNCTION_OVERFLOW"; - exports[1442] = "ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG"; - exports[1443] = "ER_VIEW_PREVENT_UPDATE"; - exports[1444] = "ER_PS_NO_RECURSION"; - exports[1445] = "ER_SP_CANT_SET_AUTOCOMMIT"; - exports[1446] = "ER_MALFORMED_DEFINER"; - exports[1447] = "ER_VIEW_FRM_NO_USER"; - exports[1448] = "ER_VIEW_OTHER_USER"; - exports[1449] = "ER_NO_SUCH_USER"; - exports[1450] = "ER_FORBID_SCHEMA_CHANGE"; - exports[1451] = "ER_ROW_IS_REFERENCED_2"; - exports[1452] = "ER_NO_REFERENCED_ROW_2"; - exports[1453] = "ER_SP_BAD_VAR_SHADOW"; - exports[1454] = "ER_TRG_NO_DEFINER"; - exports[1455] = "ER_OLD_FILE_FORMAT"; - exports[1456] = "ER_SP_RECURSION_LIMIT"; - exports[1457] = "ER_SP_PROC_TABLE_CORRUPT"; - exports[1458] = "ER_SP_WRONG_NAME"; - exports[1459] = "ER_TABLE_NEEDS_UPGRADE"; - exports[1460] = "ER_SP_NO_AGGREGATE"; - exports[1461] = "ER_MAX_PREPARED_STMT_COUNT_REACHED"; - exports[1462] = "ER_VIEW_RECURSIVE"; - exports[1463] = "ER_NON_GROUPING_FIELD_USED"; - exports[1464] = "ER_TABLE_CANT_HANDLE_SPKEYS"; - exports[1465] = "ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA"; - exports[1466] = "ER_REMOVED_SPACES"; - exports[1467] = "ER_AUTOINC_READ_FAILED"; - exports[1468] = "ER_USERNAME"; - exports[1469] = "ER_HOSTNAME"; - exports[1470] = "ER_WRONG_STRING_LENGTH"; - exports[1471] = "ER_NON_INSERTABLE_TABLE"; - exports[1472] = "ER_ADMIN_WRONG_MRG_TABLE"; - exports[1473] = "ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT"; - exports[1474] = "ER_NAME_BECOMES_EMPTY"; - exports[1475] = "ER_AMBIGUOUS_FIELD_TERM"; - exports[1476] = "ER_FOREIGN_SERVER_EXISTS"; - exports[1477] = "ER_FOREIGN_SERVER_DOESNT_EXIST"; - exports[1478] = "ER_ILLEGAL_HA_CREATE_OPTION"; - exports[1479] = "ER_PARTITION_REQUIRES_VALUES_ERROR"; - exports[1480] = "ER_PARTITION_WRONG_VALUES_ERROR"; - exports[1481] = "ER_PARTITION_MAXVALUE_ERROR"; - exports[1482] = "ER_PARTITION_SUBPARTITION_ERROR"; - exports[1483] = "ER_PARTITION_SUBPART_MIX_ERROR"; - exports[1484] = "ER_PARTITION_WRONG_NO_PART_ERROR"; - exports[1485] = "ER_PARTITION_WRONG_NO_SUBPART_ERROR"; - exports[1486] = "ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR"; - exports[1487] = "ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR"; - exports[1488] = "ER_FIELD_NOT_FOUND_PART_ERROR"; - exports[1489] = "ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR"; - exports[1490] = "ER_INCONSISTENT_PARTITION_INFO_ERROR"; - exports[1491] = "ER_PARTITION_FUNC_NOT_ALLOWED_ERROR"; - exports[1492] = "ER_PARTITIONS_MUST_BE_DEFINED_ERROR"; - exports[1493] = "ER_RANGE_NOT_INCREASING_ERROR"; - exports[1494] = "ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR"; - exports[1495] = "ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR"; - exports[1496] = "ER_PARTITION_ENTRY_ERROR"; - exports[1497] = "ER_MIX_HANDLER_ERROR"; - exports[1498] = "ER_PARTITION_NOT_DEFINED_ERROR"; - exports[1499] = "ER_TOO_MANY_PARTITIONS_ERROR"; - exports[1500] = "ER_SUBPARTITION_ERROR"; - exports[1501] = "ER_CANT_CREATE_HANDLER_FILE"; - exports[1502] = "ER_BLOB_FIELD_IN_PART_FUNC_ERROR"; - exports[1503] = "ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF"; - exports[1504] = "ER_NO_PARTS_ERROR"; - exports[1505] = "ER_PARTITION_MGMT_ON_NONPARTITIONED"; - exports[1506] = "ER_FOREIGN_KEY_ON_PARTITIONED"; - exports[1507] = "ER_DROP_PARTITION_NON_EXISTENT"; - exports[1508] = "ER_DROP_LAST_PARTITION"; - exports[1509] = "ER_COALESCE_ONLY_ON_HASH_PARTITION"; - exports[1510] = "ER_REORG_HASH_ONLY_ON_SAME_NO"; - exports[1511] = "ER_REORG_NO_PARAM_ERROR"; - exports[1512] = "ER_ONLY_ON_RANGE_LIST_PARTITION"; - exports[1513] = "ER_ADD_PARTITION_SUBPART_ERROR"; - exports[1514] = "ER_ADD_PARTITION_NO_NEW_PARTITION"; - exports[1515] = "ER_COALESCE_PARTITION_NO_PARTITION"; - exports[1516] = "ER_REORG_PARTITION_NOT_EXIST"; - exports[1517] = "ER_SAME_NAME_PARTITION"; - exports[1518] = "ER_NO_BINLOG_ERROR"; - exports[1519] = "ER_CONSECUTIVE_REORG_PARTITIONS"; - exports[1520] = "ER_REORG_OUTSIDE_RANGE"; - exports[1521] = "ER_PARTITION_FUNCTION_FAILURE"; - exports[1522] = "ER_PART_STATE_ERROR"; - exports[1523] = "ER_LIMITED_PART_RANGE"; - exports[1524] = "ER_PLUGIN_IS_NOT_LOADED"; - exports[1525] = "ER_WRONG_VALUE"; - exports[1526] = "ER_NO_PARTITION_FOR_GIVEN_VALUE"; - exports[1527] = "ER_FILEGROUP_OPTION_ONLY_ONCE"; - exports[1528] = "ER_CREATE_FILEGROUP_FAILED"; - exports[1529] = "ER_DROP_FILEGROUP_FAILED"; - exports[1530] = "ER_TABLESPACE_AUTO_EXTEND_ERROR"; - exports[1531] = "ER_WRONG_SIZE_NUMBER"; - exports[1532] = "ER_SIZE_OVERFLOW_ERROR"; - exports[1533] = "ER_ALTER_FILEGROUP_FAILED"; - exports[1534] = "ER_BINLOG_ROW_LOGGING_FAILED"; - exports[1535] = "ER_BINLOG_ROW_WRONG_TABLE_DEF"; - exports[1536] = "ER_BINLOG_ROW_RBR_TO_SBR"; - exports[1537] = "ER_EVENT_ALREADY_EXISTS"; - exports[1538] = "ER_EVENT_STORE_FAILED"; - exports[1539] = "ER_EVENT_DOES_NOT_EXIST"; - exports[1540] = "ER_EVENT_CANT_ALTER"; - exports[1541] = "ER_EVENT_DROP_FAILED"; - exports[1542] = "ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG"; - exports[1543] = "ER_EVENT_ENDS_BEFORE_STARTS"; - exports[1544] = "ER_EVENT_EXEC_TIME_IN_THE_PAST"; - exports[1545] = "ER_EVENT_OPEN_TABLE_FAILED"; - exports[1546] = "ER_EVENT_NEITHER_M_EXPR_NOR_M_AT"; - exports[1547] = "ER_COL_COUNT_DOESNT_MATCH_CORRUPTED"; - exports[1548] = "ER_CANNOT_LOAD_FROM_TABLE"; - exports[1549] = "ER_EVENT_CANNOT_DELETE"; - exports[1550] = "ER_EVENT_COMPILE_ERROR"; - exports[1551] = "ER_EVENT_SAME_NAME"; - exports[1552] = "ER_EVENT_DATA_TOO_LONG"; - exports[1553] = "ER_DROP_INDEX_FK"; - exports[1554] = "ER_WARN_DEPRECATED_SYNTAX_WITH_VER"; - exports[1555] = "ER_CANT_WRITE_LOCK_LOG_TABLE"; - exports[1556] = "ER_CANT_LOCK_LOG_TABLE"; - exports[1557] = "ER_FOREIGN_DUPLICATE_KEY"; - exports[1558] = "ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE"; - exports[1559] = "ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR"; - exports[1560] = "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT"; - exports[1561] = "ER_NDB_CANT_SWITCH_BINLOG_FORMAT"; - exports[1562] = "ER_PARTITION_NO_TEMPORARY"; - exports[1563] = "ER_PARTITION_CONST_DOMAIN_ERROR"; - exports[1564] = "ER_PARTITION_FUNCTION_IS_NOT_ALLOWED"; - exports[1565] = "ER_DDL_LOG_ERROR"; - exports[1566] = "ER_NULL_IN_VALUES_LESS_THAN"; - exports[1567] = "ER_WRONG_PARTITION_NAME"; - exports[1568] = "ER_CANT_CHANGE_TX_CHARACTERISTICS"; - exports[1569] = "ER_DUP_ENTRY_AUTOINCREMENT_CASE"; - exports[1570] = "ER_EVENT_MODIFY_QUEUE_ERROR"; - exports[1571] = "ER_EVENT_SET_VAR_ERROR"; - exports[1572] = "ER_PARTITION_MERGE_ERROR"; - exports[1573] = "ER_CANT_ACTIVATE_LOG"; - exports[1574] = "ER_RBR_NOT_AVAILABLE"; - exports[1575] = "ER_BASE64_DECODE_ERROR"; - exports[1576] = "ER_EVENT_RECURSION_FORBIDDEN"; - exports[1577] = "ER_EVENTS_DB_ERROR"; - exports[1578] = "ER_ONLY_INTEGERS_ALLOWED"; - exports[1579] = "ER_UNSUPORTED_LOG_ENGINE"; - exports[1580] = "ER_BAD_LOG_STATEMENT"; - exports[1581] = "ER_CANT_RENAME_LOG_TABLE"; - exports[1582] = "ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT"; - exports[1583] = "ER_WRONG_PARAMETERS_TO_NATIVE_FCT"; - exports[1584] = "ER_WRONG_PARAMETERS_TO_STORED_FCT"; - exports[1585] = "ER_NATIVE_FCT_NAME_COLLISION"; - exports[1586] = "ER_DUP_ENTRY_WITH_KEY_NAME"; - exports[1587] = "ER_BINLOG_PURGE_EMFILE"; - exports[1588] = "ER_EVENT_CANNOT_CREATE_IN_THE_PAST"; - exports[1589] = "ER_EVENT_CANNOT_ALTER_IN_THE_PAST"; - exports[1590] = "ER_SLAVE_INCIDENT"; - exports[1591] = "ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT"; - exports[1592] = "ER_BINLOG_UNSAFE_STATEMENT"; - exports[1593] = "ER_SLAVE_FATAL_ERROR"; - exports[1594] = "ER_SLAVE_RELAY_LOG_READ_FAILURE"; - exports[1595] = "ER_SLAVE_RELAY_LOG_WRITE_FAILURE"; - exports[1596] = "ER_SLAVE_CREATE_EVENT_FAILURE"; - exports[1597] = "ER_SLAVE_MASTER_COM_FAILURE"; - exports[1598] = "ER_BINLOG_LOGGING_IMPOSSIBLE"; - exports[1599] = "ER_VIEW_NO_CREATION_CTX"; - exports[1600] = "ER_VIEW_INVALID_CREATION_CTX"; - exports[1601] = "ER_SR_INVALID_CREATION_CTX"; - exports[1602] = "ER_TRG_CORRUPTED_FILE"; - exports[1603] = "ER_TRG_NO_CREATION_CTX"; - exports[1604] = "ER_TRG_INVALID_CREATION_CTX"; - exports[1605] = "ER_EVENT_INVALID_CREATION_CTX"; - exports[1606] = "ER_TRG_CANT_OPEN_TABLE"; - exports[1607] = "ER_CANT_CREATE_SROUTINE"; - exports[1608] = "ER_NEVER_USED"; - exports[1609] = "ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT"; - exports[1610] = "ER_SLAVE_CORRUPT_EVENT"; - exports[1611] = "ER_LOAD_DATA_INVALID_COLUMN"; - exports[1612] = "ER_LOG_PURGE_NO_FILE"; - exports[1613] = "ER_XA_RBTIMEOUT"; - exports[1614] = "ER_XA_RBDEADLOCK"; - exports[1615] = "ER_NEED_REPREPARE"; - exports[1616] = "ER_DELAYED_NOT_SUPPORTED"; - exports[1617] = "WARN_NO_MASTER_INFO"; - exports[1618] = "WARN_OPTION_IGNORED"; - exports[1619] = "ER_PLUGIN_DELETE_BUILTIN"; - exports[1620] = "WARN_PLUGIN_BUSY"; - exports[1621] = "ER_VARIABLE_IS_READONLY"; - exports[1622] = "ER_WARN_ENGINE_TRANSACTION_ROLLBACK"; - exports[1623] = "ER_SLAVE_HEARTBEAT_FAILURE"; - exports[1624] = "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE"; - exports[1625] = "ER_NDB_REPLICATION_SCHEMA_ERROR"; - exports[1626] = "ER_CONFLICT_FN_PARSE_ERROR"; - exports[1627] = "ER_EXCEPTIONS_WRITE_ERROR"; - exports[1628] = "ER_TOO_LONG_TABLE_COMMENT"; - exports[1629] = "ER_TOO_LONG_FIELD_COMMENT"; - exports[1630] = "ER_FUNC_INEXISTENT_NAME_COLLISION"; - exports[1631] = "ER_DATABASE_NAME"; - exports[1632] = "ER_TABLE_NAME"; - exports[1633] = "ER_PARTITION_NAME"; - exports[1634] = "ER_SUBPARTITION_NAME"; - exports[1635] = "ER_TEMPORARY_NAME"; - exports[1636] = "ER_RENAMED_NAME"; - exports[1637] = "ER_TOO_MANY_CONCURRENT_TRXS"; - exports[1638] = "WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED"; - exports[1639] = "ER_DEBUG_SYNC_TIMEOUT"; - exports[1640] = "ER_DEBUG_SYNC_HIT_LIMIT"; - exports[1641] = "ER_DUP_SIGNAL_SET"; - exports[1642] = "ER_SIGNAL_WARN"; - exports[1643] = "ER_SIGNAL_NOT_FOUND"; - exports[1644] = "ER_SIGNAL_EXCEPTION"; - exports[1645] = "ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER"; - exports[1646] = "ER_SIGNAL_BAD_CONDITION_TYPE"; - exports[1647] = "WARN_COND_ITEM_TRUNCATED"; - exports[1648] = "ER_COND_ITEM_TOO_LONG"; - exports[1649] = "ER_UNKNOWN_LOCALE"; - exports[1650] = "ER_SLAVE_IGNORE_SERVER_IDS"; - exports[1651] = "ER_QUERY_CACHE_DISABLED"; - exports[1652] = "ER_SAME_NAME_PARTITION_FIELD"; - exports[1653] = "ER_PARTITION_COLUMN_LIST_ERROR"; - exports[1654] = "ER_WRONG_TYPE_COLUMN_VALUE_ERROR"; - exports[1655] = "ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR"; - exports[1656] = "ER_MAXVALUE_IN_VALUES_IN"; - exports[1657] = "ER_TOO_MANY_VALUES_ERROR"; - exports[1658] = "ER_ROW_SINGLE_PARTITION_FIELD_ERROR"; - exports[1659] = "ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD"; - exports[1660] = "ER_PARTITION_FIELDS_TOO_LONG"; - exports[1661] = "ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE"; - exports[1662] = "ER_BINLOG_ROW_MODE_AND_STMT_ENGINE"; - exports[1663] = "ER_BINLOG_UNSAFE_AND_STMT_ENGINE"; - exports[1664] = "ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE"; - exports[1665] = "ER_BINLOG_STMT_MODE_AND_ROW_ENGINE"; - exports[1666] = "ER_BINLOG_ROW_INJECTION_AND_STMT_MODE"; - exports[1667] = "ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE"; - exports[1668] = "ER_BINLOG_UNSAFE_LIMIT"; - exports[1669] = "ER_BINLOG_UNSAFE_INSERT_DELAYED"; - exports[1670] = "ER_BINLOG_UNSAFE_SYSTEM_TABLE"; - exports[1671] = "ER_BINLOG_UNSAFE_AUTOINC_COLUMNS"; - exports[1672] = "ER_BINLOG_UNSAFE_UDF"; - exports[1673] = "ER_BINLOG_UNSAFE_SYSTEM_VARIABLE"; - exports[1674] = "ER_BINLOG_UNSAFE_SYSTEM_FUNCTION"; - exports[1675] = "ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS"; - exports[1676] = "ER_MESSAGE_AND_STATEMENT"; - exports[1677] = "ER_SLAVE_CONVERSION_FAILED"; - exports[1678] = "ER_SLAVE_CANT_CREATE_CONVERSION"; - exports[1679] = "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT"; - exports[1680] = "ER_PATH_LENGTH"; - exports[1681] = "ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT"; - exports[1682] = "ER_WRONG_NATIVE_TABLE_STRUCTURE"; - exports[1683] = "ER_WRONG_PERFSCHEMA_USAGE"; - exports[1684] = "ER_WARN_I_S_SKIPPED_TABLE"; - exports[1685] = "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT"; - exports[1686] = "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT"; - exports[1687] = "ER_SPATIAL_MUST_HAVE_GEOM_COL"; - exports[1688] = "ER_TOO_LONG_INDEX_COMMENT"; - exports[1689] = "ER_LOCK_ABORTED"; - exports[1690] = "ER_DATA_OUT_OF_RANGE"; - exports[1691] = "ER_WRONG_SPVAR_TYPE_IN_LIMIT"; - exports[1692] = "ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE"; - exports[1693] = "ER_BINLOG_UNSAFE_MIXED_STATEMENT"; - exports[1694] = "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN"; - exports[1695] = "ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN"; - exports[1696] = "ER_FAILED_READ_FROM_PAR_FILE"; - exports[1697] = "ER_VALUES_IS_NOT_INT_TYPE_ERROR"; - exports[1698] = "ER_ACCESS_DENIED_NO_PASSWORD_ERROR"; - exports[1699] = "ER_SET_PASSWORD_AUTH_PLUGIN"; - exports[1700] = "ER_GRANT_PLUGIN_USER_EXISTS"; - exports[1701] = "ER_TRUNCATE_ILLEGAL_FK"; - exports[1702] = "ER_PLUGIN_IS_PERMANENT"; - exports[1703] = "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN"; - exports[1704] = "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX"; - exports[1705] = "ER_STMT_CACHE_FULL"; - exports[1706] = "ER_MULTI_UPDATE_KEY_CONFLICT"; - exports[1707] = "ER_TABLE_NEEDS_REBUILD"; - exports[1708] = "WARN_OPTION_BELOW_LIMIT"; - exports[1709] = "ER_INDEX_COLUMN_TOO_LONG"; - exports[1710] = "ER_ERROR_IN_TRIGGER_BODY"; - exports[1711] = "ER_ERROR_IN_UNKNOWN_TRIGGER_BODY"; - exports[1712] = "ER_INDEX_CORRUPT"; - exports[1713] = "ER_UNDO_RECORD_TOO_BIG"; - exports[1714] = "ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT"; - exports[1715] = "ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE"; - exports[1716] = "ER_BINLOG_UNSAFE_REPLACE_SELECT"; - exports[1717] = "ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT"; - exports[1718] = "ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT"; - exports[1719] = "ER_BINLOG_UNSAFE_UPDATE_IGNORE"; - exports[1720] = "ER_PLUGIN_NO_UNINSTALL"; - exports[1721] = "ER_PLUGIN_NO_INSTALL"; - exports[1722] = "ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT"; - exports[1723] = "ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC"; - exports[1724] = "ER_BINLOG_UNSAFE_INSERT_TWO_KEYS"; - exports[1725] = "ER_TABLE_IN_FK_CHECK"; - exports[1726] = "ER_UNSUPPORTED_ENGINE"; - exports[1727] = "ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST"; - exports[1728] = "ER_CANNOT_LOAD_FROM_TABLE_V2"; - exports[1729] = "ER_MASTER_DELAY_VALUE_OUT_OF_RANGE"; - exports[1730] = "ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT"; - exports[1731] = "ER_PARTITION_EXCHANGE_DIFFERENT_OPTION"; - exports[1732] = "ER_PARTITION_EXCHANGE_PART_TABLE"; - exports[1733] = "ER_PARTITION_EXCHANGE_TEMP_TABLE"; - exports[1734] = "ER_PARTITION_INSTEAD_OF_SUBPARTITION"; - exports[1735] = "ER_UNKNOWN_PARTITION"; - exports[1736] = "ER_TABLES_DIFFERENT_METADATA"; - exports[1737] = "ER_ROW_DOES_NOT_MATCH_PARTITION"; - exports[1738] = "ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX"; - exports[1739] = "ER_WARN_INDEX_NOT_APPLICABLE"; - exports[1740] = "ER_PARTITION_EXCHANGE_FOREIGN_KEY"; - exports[1741] = "ER_NO_SUCH_KEY_VALUE"; - exports[1742] = "ER_RPL_INFO_DATA_TOO_LONG"; - exports[1743] = "ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE"; - exports[1744] = "ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE"; - exports[1745] = "ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX"; - exports[1746] = "ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT"; - exports[1747] = "ER_PARTITION_CLAUSE_ON_NONPARTITIONED"; - exports[1748] = "ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET"; - exports[1749] = "ER_NO_SUCH_PARTITION"; - exports[1750] = "ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE"; - exports[1751] = "ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE"; - exports[1752] = "ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE"; - exports[1753] = "ER_MTS_FEATURE_IS_NOT_SUPPORTED"; - exports[1754] = "ER_MTS_UPDATED_DBS_GREATER_MAX"; - exports[1755] = "ER_MTS_CANT_PARALLEL"; - exports[1756] = "ER_MTS_INCONSISTENT_DATA"; - exports[1757] = "ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING"; - exports[1758] = "ER_DA_INVALID_CONDITION_NUMBER"; - exports[1759] = "ER_INSECURE_PLAIN_TEXT"; - exports[1760] = "ER_INSECURE_CHANGE_MASTER"; - exports[1761] = "ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO"; - exports[1762] = "ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO"; - exports[1763] = "ER_SQLTHREAD_WITH_SECURE_SLAVE"; - exports[1764] = "ER_TABLE_HAS_NO_FT"; - exports[1765] = "ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER"; - exports[1766] = "ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION"; - exports[1767] = "ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST"; - exports[1768] = "ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION"; - exports[1769] = "ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION"; - exports[1770] = "ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL"; - exports[1771] = "ER_SKIPPING_LOGGED_TRANSACTION"; - exports[1772] = "ER_MALFORMED_GTID_SET_SPECIFICATION"; - exports[1773] = "ER_MALFORMED_GTID_SET_ENCODING"; - exports[1774] = "ER_MALFORMED_GTID_SPECIFICATION"; - exports[1775] = "ER_GNO_EXHAUSTED"; - exports[1776] = "ER_BAD_SLAVE_AUTO_POSITION"; - exports[1777] = "ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF"; - exports[1778] = "ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET"; - exports[1779] = "ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON"; - exports[1780] = "ER_GTID_MODE_REQUIRES_BINLOG"; - exports[1781] = "ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF"; - exports[1782] = "ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON"; - exports[1783] = "ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF"; - exports[1784] = "ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF"; - exports[1785] = "ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE"; - exports[1786] = "ER_GTID_UNSAFE_CREATE_SELECT"; - exports[1787] = "ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION"; - exports[1788] = "ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME"; - exports[1789] = "ER_MASTER_HAS_PURGED_REQUIRED_GTIDS"; - exports[1790] = "ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID"; - exports[1791] = "ER_UNKNOWN_EXPLAIN_FORMAT"; - exports[1792] = "ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION"; - exports[1793] = "ER_TOO_LONG_TABLE_PARTITION_COMMENT"; - exports[1794] = "ER_SLAVE_CONFIGURATION"; - exports[1795] = "ER_INNODB_FT_LIMIT"; - exports[1796] = "ER_INNODB_NO_FT_TEMP_TABLE"; - exports[1797] = "ER_INNODB_FT_WRONG_DOCID_COLUMN"; - exports[1798] = "ER_INNODB_FT_WRONG_DOCID_INDEX"; - exports[1799] = "ER_INNODB_ONLINE_LOG_TOO_BIG"; - exports[1800] = "ER_UNKNOWN_ALTER_ALGORITHM"; - exports[1801] = "ER_UNKNOWN_ALTER_LOCK"; - exports[1802] = "ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS"; - exports[1803] = "ER_MTS_RECOVERY_FAILURE"; - exports[1804] = "ER_MTS_RESET_WORKERS"; - exports[1805] = "ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2"; - exports[1806] = "ER_SLAVE_SILENT_RETRY_TRANSACTION"; - exports[1807] = "ER_DISCARD_FK_CHECKS_RUNNING"; - exports[1808] = "ER_TABLE_SCHEMA_MISMATCH"; - exports[1809] = "ER_TABLE_IN_SYSTEM_TABLESPACE"; - exports[1810] = "ER_IO_READ_ERROR"; - exports[1811] = "ER_IO_WRITE_ERROR"; - exports[1812] = "ER_TABLESPACE_MISSING"; - exports[1813] = "ER_TABLESPACE_EXISTS"; - exports[1814] = "ER_TABLESPACE_DISCARDED"; - exports[1815] = "ER_INTERNAL_ERROR"; - exports[1816] = "ER_INNODB_IMPORT_ERROR"; - exports[1817] = "ER_INNODB_INDEX_CORRUPT"; - exports[1818] = "ER_INVALID_YEAR_COLUMN_LENGTH"; - exports[1819] = "ER_NOT_VALID_PASSWORD"; - exports[1820] = "ER_MUST_CHANGE_PASSWORD"; - exports[1821] = "ER_FK_NO_INDEX_CHILD"; - exports[1822] = "ER_FK_NO_INDEX_PARENT"; - exports[1823] = "ER_FK_FAIL_ADD_SYSTEM"; - exports[1824] = "ER_FK_CANNOT_OPEN_PARENT"; - exports[1825] = "ER_FK_INCORRECT_OPTION"; - exports[1826] = "ER_FK_DUP_NAME"; - exports[1827] = "ER_PASSWORD_FORMAT"; - exports[1828] = "ER_FK_COLUMN_CANNOT_DROP"; - exports[1829] = "ER_FK_COLUMN_CANNOT_DROP_CHILD"; - exports[1830] = "ER_FK_COLUMN_NOT_NULL"; - exports[1831] = "ER_DUP_INDEX"; - exports[1832] = "ER_FK_COLUMN_CANNOT_CHANGE"; - exports[1833] = "ER_FK_COLUMN_CANNOT_CHANGE_CHILD"; - exports[1834] = "ER_FK_CANNOT_DELETE_PARENT"; - exports[1835] = "ER_MALFORMED_PACKET"; - exports[1836] = "ER_READ_ONLY_MODE"; - exports[1837] = "ER_GTID_NEXT_TYPE_UNDEFINED_GROUP"; - exports[1838] = "ER_VARIABLE_NOT_SETTABLE_IN_SP"; - exports[1839] = "ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF"; - exports[1840] = "ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY"; - exports[1841] = "ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY"; - exports[1842] = "ER_GTID_PURGED_WAS_CHANGED"; - exports[1843] = "ER_GTID_EXECUTED_WAS_CHANGED"; - exports[1844] = "ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES"; - exports[1845] = "ER_ALTER_OPERATION_NOT_SUPPORTED"; - exports[1846] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON"; - exports[1847] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY"; - exports[1848] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION"; - exports[1849] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME"; - exports[1850] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE"; - exports[1851] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK"; - exports[1852] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE"; - exports[1853] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK"; - exports[1854] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC"; - exports[1855] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS"; - exports[1856] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS"; - exports[1857] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS"; - exports[1858] = "ER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE"; - exports[1859] = "ER_DUP_UNKNOWN_IN_INDEX"; - exports[1860] = "ER_IDENT_CAUSES_TOO_LONG_PATH"; - exports[1861] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL"; - exports[1862] = "ER_MUST_CHANGE_PASSWORD_LOGIN"; - exports[1863] = "ER_ROW_IN_WRONG_PARTITION"; - exports[1864] = "ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX"; - exports[1865] = "ER_INNODB_NO_FT_USES_PARSER"; - exports[1866] = "ER_BINLOG_LOGICAL_CORRUPTION"; - exports[1867] = "ER_WARN_PURGE_LOG_IN_USE"; - exports[1868] = "ER_WARN_PURGE_LOG_IS_ACTIVE"; - exports[1869] = "ER_AUTO_INCREMENT_CONFLICT"; - exports[1870] = "WARN_ON_BLOCKHOLE_IN_RBR"; - exports[1871] = "ER_SLAVE_MI_INIT_REPOSITORY"; - exports[1872] = "ER_SLAVE_RLI_INIT_REPOSITORY"; - exports[1873] = "ER_ACCESS_DENIED_CHANGE_USER_ERROR"; - exports[1874] = "ER_INNODB_READ_ONLY"; - exports[1875] = "ER_STOP_SLAVE_SQL_THREAD_TIMEOUT"; - exports[1876] = "ER_STOP_SLAVE_IO_THREAD_TIMEOUT"; - exports[1877] = "ER_TABLE_CORRUPT"; - exports[1878] = "ER_TEMP_FILE_WRITE_FAILURE"; - exports[1879] = "ER_INNODB_FT_AUX_NOT_HEX_ID"; - exports[1880] = "ER_OLD_TEMPORALS_UPGRADED"; - exports[1881] = "ER_INNODB_FORCED_RECOVERY"; - exports[1882] = "ER_AES_INVALID_IV"; - exports[1883] = "ER_PLUGIN_CANNOT_BE_UNINSTALLED"; - exports[1884] = "ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_GTID_GROUP"; - exports[1885] = "ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER"; - exports[1886] = "ER_MISSING_KEY"; - exports[1887] = "WARN_NAMED_PIPE_ACCESS_EVERYONE"; - exports[1888] = "ER_FOUND_MISSING_GTIDS"; - exports[3000] = "ER_FILE_CORRUPT"; - exports[3001] = "ER_ERROR_ON_MASTER"; - exports[3002] = "ER_INCONSISTENT_ERROR"; - exports[3003] = "ER_STORAGE_ENGINE_NOT_LOADED"; - exports[3004] = "ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER"; - exports[3005] = "ER_WARN_LEGACY_SYNTAX_CONVERTED"; - exports[3006] = "ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN"; - exports[3007] = "ER_CANNOT_DISCARD_TEMPORARY_TABLE"; - exports[3008] = "ER_FK_DEPTH_EXCEEDED"; - exports[3009] = "ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2"; - exports[3010] = "ER_WARN_TRIGGER_DOESNT_HAVE_CREATED"; - exports[3011] = "ER_REFERENCED_TRG_DOES_NOT_EXIST"; - exports[3012] = "ER_EXPLAIN_NOT_SUPPORTED"; - exports[3013] = "ER_INVALID_FIELD_SIZE"; - exports[3014] = "ER_MISSING_HA_CREATE_OPTION"; - exports[3015] = "ER_ENGINE_OUT_OF_MEMORY"; - exports[3016] = "ER_PASSWORD_EXPIRE_ANONYMOUS_USER"; - exports[3017] = "ER_SLAVE_SQL_THREAD_MUST_STOP"; - exports[3018] = "ER_NO_FT_MATERIALIZED_SUBQUERY"; - exports[3019] = "ER_INNODB_UNDO_LOG_FULL"; - exports[3020] = "ER_INVALID_ARGUMENT_FOR_LOGARITHM"; - exports[3021] = "ER_SLAVE_CHANNEL_IO_THREAD_MUST_STOP"; - exports[3022] = "ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO"; - exports[3023] = "ER_WARN_ONLY_MASTER_LOG_FILE_NO_POS"; - exports[3024] = "ER_QUERY_TIMEOUT"; - exports[3025] = "ER_NON_RO_SELECT_DISABLE_TIMER"; - exports[3026] = "ER_DUP_LIST_ENTRY"; - exports[3027] = "ER_SQL_MODE_NO_EFFECT"; - exports[3028] = "ER_AGGREGATE_ORDER_FOR_UNION"; - exports[3029] = "ER_AGGREGATE_ORDER_NON_AGG_QUERY"; - exports[3030] = "ER_SLAVE_WORKER_STOPPED_PREVIOUS_THD_ERROR"; - exports[3031] = "ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER"; - exports[3032] = "ER_SERVER_OFFLINE_MODE"; - exports[3033] = "ER_GIS_DIFFERENT_SRIDS"; - exports[3034] = "ER_GIS_UNSUPPORTED_ARGUMENT"; - exports[3035] = "ER_GIS_UNKNOWN_ERROR"; - exports[3036] = "ER_GIS_UNKNOWN_EXCEPTION"; - exports[3037] = "ER_GIS_INVALID_DATA"; - exports[3038] = "ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION"; - exports[3039] = "ER_BOOST_GEOMETRY_CENTROID_EXCEPTION"; - exports[3040] = "ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION"; - exports[3041] = "ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION"; - exports[3042] = "ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION"; - exports[3043] = "ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION"; - exports[3044] = "ER_STD_BAD_ALLOC_ERROR"; - exports[3045] = "ER_STD_DOMAIN_ERROR"; - exports[3046] = "ER_STD_LENGTH_ERROR"; - exports[3047] = "ER_STD_INVALID_ARGUMENT"; - exports[3048] = "ER_STD_OUT_OF_RANGE_ERROR"; - exports[3049] = "ER_STD_OVERFLOW_ERROR"; - exports[3050] = "ER_STD_RANGE_ERROR"; - exports[3051] = "ER_STD_UNDERFLOW_ERROR"; - exports[3052] = "ER_STD_LOGIC_ERROR"; - exports[3053] = "ER_STD_RUNTIME_ERROR"; - exports[3054] = "ER_STD_UNKNOWN_EXCEPTION"; - exports[3055] = "ER_GIS_DATA_WRONG_ENDIANESS"; - exports[3056] = "ER_CHANGE_MASTER_PASSWORD_LENGTH"; - exports[3057] = "ER_USER_LOCK_WRONG_NAME"; - exports[3058] = "ER_USER_LOCK_DEADLOCK"; - exports[3059] = "ER_REPLACE_INACCESSIBLE_ROWS"; - exports[3060] = "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS"; - exports[3061] = "ER_ILLEGAL_USER_VAR"; - exports[3062] = "ER_GTID_MODE_OFF"; - exports[3063] = "ER_UNSUPPORTED_BY_REPLICATION_THREAD"; - exports[3064] = "ER_INCORRECT_TYPE"; - exports[3065] = "ER_FIELD_IN_ORDER_NOT_SELECT"; - exports[3066] = "ER_AGGREGATE_IN_ORDER_NOT_SELECT"; - exports[3067] = "ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN"; - exports[3068] = "ER_NET_OK_PACKET_TOO_LARGE"; - exports[3069] = "ER_INVALID_JSON_DATA"; - exports[3070] = "ER_INVALID_GEOJSON_MISSING_MEMBER"; - exports[3071] = "ER_INVALID_GEOJSON_WRONG_TYPE"; - exports[3072] = "ER_INVALID_GEOJSON_UNSPECIFIED"; - exports[3073] = "ER_DIMENSION_UNSUPPORTED"; - exports[3074] = "ER_SLAVE_CHANNEL_DOES_NOT_EXIST"; - exports[3075] = "ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT"; - exports[3076] = "ER_SLAVE_CHANNEL_NAME_INVALID_OR_TOO_LONG"; - exports[3077] = "ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY"; - exports[3078] = "ER_SLAVE_CHANNEL_DELETE"; - exports[3079] = "ER_SLAVE_MULTIPLE_CHANNELS_CMD"; - exports[3080] = "ER_SLAVE_MAX_CHANNELS_EXCEEDED"; - exports[3081] = "ER_SLAVE_CHANNEL_MUST_STOP"; - exports[3082] = "ER_SLAVE_CHANNEL_NOT_RUNNING"; - exports[3083] = "ER_SLAVE_CHANNEL_WAS_RUNNING"; - exports[3084] = "ER_SLAVE_CHANNEL_WAS_NOT_RUNNING"; - exports[3085] = "ER_SLAVE_CHANNEL_SQL_THREAD_MUST_STOP"; - exports[3086] = "ER_SLAVE_CHANNEL_SQL_SKIP_COUNTER"; - exports[3087] = "ER_WRONG_FIELD_WITH_GROUP_V2"; - exports[3088] = "ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2"; - exports[3089] = "ER_WARN_DEPRECATED_SYSVAR_UPDATE"; - exports[3090] = "ER_WARN_DEPRECATED_SQLMODE"; - exports[3091] = "ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID"; - exports[3092] = "ER_GROUP_REPLICATION_CONFIGURATION"; - exports[3093] = "ER_GROUP_REPLICATION_RUNNING"; - exports[3094] = "ER_GROUP_REPLICATION_APPLIER_INIT_ERROR"; - exports[3095] = "ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT"; - exports[3096] = "ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR"; - exports[3097] = "ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR"; - exports[3098] = "ER_BEFORE_DML_VALIDATION_ERROR"; - exports[3099] = "ER_PREVENTS_VARIABLE_WITHOUT_RBR"; - exports[3100] = "ER_RUN_HOOK_ERROR"; - exports[3101] = "ER_TRANSACTION_ROLLBACK_DURING_COMMIT"; - exports[3102] = "ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED"; - exports[3103] = "ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN"; - exports[3104] = "ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN"; - exports[3105] = "ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN"; - exports[3106] = "ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN"; - exports[3107] = "ER_GENERATED_COLUMN_NON_PRIOR"; - exports[3108] = "ER_DEPENDENT_BY_GENERATED_COLUMN"; - exports[3109] = "ER_GENERATED_COLUMN_REF_AUTO_INC"; - exports[3110] = "ER_FEATURE_NOT_AVAILABLE"; - exports[3111] = "ER_CANT_SET_GTID_MODE"; - exports[3112] = "ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF"; - exports[3113] = "ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION"; - exports[3114] = "ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON"; - exports[3115] = "ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF"; - exports[3116] = "ER_CANT_SET_ENFORCE_GTID_CONSISTENCY_ON_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS"; - exports[3117] = "ER_SET_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS"; - exports[3118] = "ER_ACCOUNT_HAS_BEEN_LOCKED"; - exports[3119] = "ER_WRONG_TABLESPACE_NAME"; - exports[3120] = "ER_TABLESPACE_IS_NOT_EMPTY"; - exports[3121] = "ER_WRONG_FILE_NAME"; - exports[3122] = "ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION"; - exports[3123] = "ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR"; - exports[3124] = "ER_WARN_BAD_MAX_EXECUTION_TIME"; - exports[3125] = "ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME"; - exports[3126] = "ER_WARN_CONFLICTING_HINT"; - exports[3127] = "ER_WARN_UNKNOWN_QB_NAME"; - exports[3128] = "ER_UNRESOLVED_HINT_NAME"; - exports[3129] = "ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE"; - exports[3130] = "ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED"; - exports[3131] = "ER_LOCKING_SERVICE_WRONG_NAME"; - exports[3132] = "ER_LOCKING_SERVICE_DEADLOCK"; - exports[3133] = "ER_LOCKING_SERVICE_TIMEOUT"; - exports[3134] = "ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED"; - exports[3135] = "ER_SQL_MODE_MERGED"; - exports[3136] = "ER_VTOKEN_PLUGIN_TOKEN_MISMATCH"; - exports[3137] = "ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND"; - exports[3138] = "ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID"; - exports[3139] = "ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED"; - exports[3140] = "ER_INVALID_JSON_TEXT"; - exports[3141] = "ER_INVALID_JSON_TEXT_IN_PARAM"; - exports[3142] = "ER_INVALID_JSON_BINARY_DATA"; - exports[3143] = "ER_INVALID_JSON_PATH"; - exports[3144] = "ER_INVALID_JSON_CHARSET"; - exports[3145] = "ER_INVALID_JSON_CHARSET_IN_FUNCTION"; - exports[3146] = "ER_INVALID_TYPE_FOR_JSON"; - exports[3147] = "ER_INVALID_CAST_TO_JSON"; - exports[3148] = "ER_INVALID_JSON_PATH_CHARSET"; - exports[3149] = "ER_INVALID_JSON_PATH_WILDCARD"; - exports[3150] = "ER_JSON_VALUE_TOO_BIG"; - exports[3151] = "ER_JSON_KEY_TOO_BIG"; - exports[3152] = "ER_JSON_USED_AS_KEY"; - exports[3153] = "ER_JSON_VACUOUS_PATH"; - exports[3154] = "ER_JSON_BAD_ONE_OR_ALL_ARG"; - exports[3155] = "ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE"; - exports[3156] = "ER_INVALID_JSON_VALUE_FOR_CAST"; - exports[3157] = "ER_JSON_DOCUMENT_TOO_DEEP"; - exports[3158] = "ER_JSON_DOCUMENT_NULL_KEY"; - exports[3159] = "ER_SECURE_TRANSPORT_REQUIRED"; - exports[3160] = "ER_NO_SECURE_TRANSPORTS_CONFIGURED"; - exports[3161] = "ER_DISABLED_STORAGE_ENGINE"; - exports[3162] = "ER_USER_DOES_NOT_EXIST"; - exports[3163] = "ER_USER_ALREADY_EXISTS"; - exports[3164] = "ER_AUDIT_API_ABORT"; - exports[3165] = "ER_INVALID_JSON_PATH_ARRAY_CELL"; - exports[3166] = "ER_BUFPOOL_RESIZE_INPROGRESS"; - exports[3167] = "ER_FEATURE_DISABLED_SEE_DOC"; - exports[3168] = "ER_SERVER_ISNT_AVAILABLE"; - exports[3169] = "ER_SESSION_WAS_KILLED"; - exports[3170] = "ER_CAPACITY_EXCEEDED"; - exports[3171] = "ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER"; - exports[3172] = "ER_TABLE_NEEDS_UPG_PART"; - exports[3173] = "ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID"; - exports[3174] = "ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL"; - exports[3175] = "ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT"; - exports[3176] = "ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE"; - exports[3177] = "ER_LOCK_REFUSED_BY_ENGINE"; - exports[3178] = "ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN"; - exports[3179] = "ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE"; - exports[3180] = "ER_MASTER_KEY_ROTATION_ERROR_BY_SE"; - exports[3181] = "ER_MASTER_KEY_ROTATION_BINLOG_FAILED"; - exports[3182] = "ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE"; - exports[3183] = "ER_TABLESPACE_CANNOT_ENCRYPT"; - exports[3184] = "ER_INVALID_ENCRYPTION_OPTION"; - exports[3185] = "ER_CANNOT_FIND_KEY_IN_KEYRING"; - exports[3186] = "ER_CAPACITY_EXCEEDED_IN_PARSER"; - exports[3187] = "ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE"; - exports[3188] = "ER_KEYRING_UDF_KEYRING_SERVICE_ERROR"; - exports[3189] = "ER_USER_COLUMN_OLD_LENGTH"; - exports[3190] = "ER_CANT_RESET_MASTER"; - exports[3191] = "ER_GROUP_REPLICATION_MAX_GROUP_SIZE"; - exports[3192] = "ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED"; - exports[3193] = "ER_TABLE_REFERENCED"; - exports[3194] = "ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE"; - exports[3195] = "ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO"; - exports[3196] = "ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID"; - exports[3197] = "ER_XA_RETRY"; - exports[3198] = "ER_KEYRING_AWS_UDF_AWS_KMS_ERROR"; - exports[3199] = "ER_BINLOG_UNSAFE_XA"; - exports[3200] = "ER_UDF_ERROR"; - exports[3201] = "ER_KEYRING_MIGRATION_FAILURE"; - exports[3202] = "ER_KEYRING_ACCESS_DENIED_ERROR"; - exports[3203] = "ER_KEYRING_MIGRATION_STATUS"; - exports[3204] = "ER_PLUGIN_FAILED_TO_OPEN_TABLES"; - exports[3205] = "ER_PLUGIN_FAILED_TO_OPEN_TABLE"; - exports[3206] = "ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED"; - exports[3207] = "ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET"; - exports[3208] = "ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY"; - exports[3209] = "ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED"; - exports[3210] = "ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED"; - exports[3211] = "ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE"; - exports[3212] = "ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED"; - exports[3213] = "ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS"; - exports[3214] = "ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE"; - exports[3215] = "ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT"; - exports[3216] = "ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED"; - exports[3217] = "ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE"; - exports[3218] = "ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE"; - exports[3219] = "ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR"; - exports[3220] = "ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY"; - exports[3221] = "ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY"; - exports[3222] = "ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS"; - exports[3223] = "ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC"; - exports[3224] = "ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER"; - exports[3225] = "ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER"; - exports[3226] = "WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP"; - exports[3227] = "ER_XA_REPLICATION_FILTERS"; - exports[3228] = "ER_CANT_OPEN_ERROR_LOG"; - exports[3229] = "ER_GROUPING_ON_TIMESTAMP_IN_DST"; - exports[3230] = "ER_CANT_START_SERVER_NAMED_PIPE"; -}); - -// node_modules/mysql/lib/protocol/Timer.js -var require_Timer = __commonJS((exports, module) => { - var Timers = __require("timers"); - module.exports = Timer; - function Timer(object) { - this._object = object; - this._timeout = null; - } - Timer.prototype.active = function active() { - if (this._timeout) { - if (this._timeout.refresh) { - this._timeout.refresh(); - } else { - Timers.active(this._timeout); - } - } - }; - Timer.prototype.start = function start(msecs) { - this.stop(); - this._timeout = Timers.setTimeout(this._onTimeout.bind(this), msecs); - }; - Timer.prototype.stop = function stop() { - if (this._timeout) { - Timers.clearTimeout(this._timeout); - this._timeout = null; - } - }; - Timer.prototype._onTimeout = function _onTimeout() { - return this._object._onTimeout(); - }; -}); - -// node_modules/mysql/lib/protocol/sequences/Sequence.js -var require_Sequence = __commonJS((exports, module) => { - var Util = __require("util"); - var EventEmitter = __require("events").EventEmitter; - var Packets = require_packets(); - var ErrorConstants = require_errors(); - var Timer = require_Timer(); - var listenerCount = EventEmitter.listenerCount || function(emitter, type) { - return emitter.listeners(type).length; - }; - var LONG_STACK_DELIMITER = "\n --------------------\n"; - module.exports = Sequence; - Util.inherits(Sequence, EventEmitter); - function Sequence(options, callback) { - if (typeof options === "function") { - callback = options; - options = {}; - } - EventEmitter.call(this); - options = options || {}; - this._callback = callback; - this._callSite = null; - this._ended = false; - this._timeout = options.timeout; - this._timer = new Timer(this); - } - Sequence.determinePacket = function(byte) { - switch (byte) { - case 0: - return Packets.OkPacket; - case 254: - return Packets.EofPacket; - case 255: - return Packets.ErrorPacket; - default: - return; - } - }; - Sequence.prototype.hasErrorHandler = function() { - return Boolean(this._callback) || listenerCount(this, "error") > 1; - }; - Sequence.prototype._packetToError = function(packet) { - var code = ErrorConstants[packet.errno] || "UNKNOWN_CODE_PLEASE_REPORT"; - var err = new Error(code + ": " + packet.message); - err.code = code; - err.errno = packet.errno; - err.sqlMessage = packet.message; - err.sqlState = packet.sqlState; - return err; - }; - Sequence.prototype.end = function(err) { - if (this._ended) { - return; - } - this._ended = true; - if (err) { - this._addLongStackTrace(err); - } - this._callSite = null; - try { - if (err) { - this.emit("error", err); - } - } finally { - try { - if (this._callback) { - this._callback.apply(this, arguments); - } - } finally { - this.emit("end"); - } - } - }; - Sequence.prototype["OkPacket"] = function(packet) { - this.end(null, packet); - }; - Sequence.prototype["ErrorPacket"] = function(packet) { - this.end(this._packetToError(packet)); - }; - Sequence.prototype.start = function() { - }; - Sequence.prototype._addLongStackTrace = function _addLongStackTrace(err) { - var callSiteStack = this._callSite && this._callSite.stack; - if (!callSiteStack || typeof callSiteStack !== "string") { - return; - } - if (err.stack.indexOf(LONG_STACK_DELIMITER) !== -1) { - return; - } - var index = callSiteStack.indexOf("\n"); - if (index !== -1) { - err.stack += LONG_STACK_DELIMITER + callSiteStack.substr(index + 1); - } - }; - Sequence.prototype._onTimeout = function _onTimeout() { - this.emit("timeout"); - }; -}); - -// node_modules/mysql/lib/protocol/Auth.js -var require_Auth = __commonJS((exports) => { - var Buffer2 = require_safe_buffer().Buffer; - var Crypto = __require("crypto"); - var Auth = exports; - function auth(name, data, options) { - options = options || {}; - switch (name) { - case "mysql_native_password": - return Auth.token(options.password, data.slice(0, 20)); - default: - return; - } - } - Auth.auth = auth; - function sha1(msg) { - var hash = Crypto.createHash("sha1"); - hash.update(msg, "binary"); - return hash.digest("binary"); - } - Auth.sha1 = sha1; - function xor(a, b) { - a = Buffer2.from(a, "binary"); - b = Buffer2.from(b, "binary"); - var result = Buffer2.allocUnsafe(a.length); - for (var i = 0;i < a.length; i++) { - result[i] = a[i] ^ b[i]; - } - return result; - } - Auth.xor = xor; - Auth.token = function(password, scramble) { - if (!password) { - return Buffer2.alloc(0); - } - var stage1 = sha1(Buffer2.from(password, "utf8").toString("binary")); - var stage2 = sha1(stage1); - var stage3 = sha1(scramble.toString("binary") + stage2); - return xor(stage3, stage1); - }; - Auth.hashPassword = function(password) { - var nr = [20528, 22325]; - var add = 7; - var nr2 = [4660, 22129]; - var result = Buffer2.alloc(8); - if (typeof password === "string") { - password = Buffer2.from(password); - } - for (var i = 0;i < password.length; i++) { - var c = password[i]; - if (c === 32 || c === 9) { - continue; - } - nr = this.xor32(nr, this.add32(this.mul32(this.add32(this.and32(nr, [0, 63]), [0, add]), [0, c]), this.shl32(nr, 8))); - nr2 = this.add32(nr2, this.xor32(this.shl32(nr2, 8), nr)); - add += c; - } - this.int31Write(result, nr, 0); - this.int31Write(result, nr2, 4); - return result; - }; - Auth.randomInit = function(seed1, seed2) { - return { - max_value: 1073741823, - max_value_dbl: 1073741823, - seed1: seed1 % 1073741823, - seed2: seed2 % 1073741823 - }; - }; - Auth.myRnd = function(r) { - r.seed1 = (r.seed1 * 3 + r.seed2) % r.max_value; - r.seed2 = (r.seed1 + r.seed2 + 33) % r.max_value; - return r.seed1 / r.max_value_dbl; - }; - Auth.scramble323 = function(message, password) { - if (!password) { - return Buffer2.alloc(0); - } - var to = Buffer2.allocUnsafe(8); - var hashPass = this.hashPassword(password); - var hashMessage = this.hashPassword(message.slice(0, 8)); - var seed1 = this.int32Read(hashPass, 0) ^ this.int32Read(hashMessage, 0); - var seed2 = this.int32Read(hashPass, 4) ^ this.int32Read(hashMessage, 4); - var r = this.randomInit(seed1, seed2); - for (var i = 0;i < 8; i++) { - to[i] = Math.floor(this.myRnd(r) * 31) + 64; - } - var extra = Math.floor(this.myRnd(r) * 31); - for (var i = 0;i < 8; i++) { - to[i] ^= extra; - } - return to; - }; - Auth.xor32 = function(a, b) { - return [a[0] ^ b[0], a[1] ^ b[1]]; - }; - Auth.add32 = function(a, b) { - var w1 = a[1] + b[1]; - var w2 = a[0] + b[0] + ((w1 & 4294901760) >> 16); - return [w2 & 65535, w1 & 65535]; - }; - Auth.mul32 = function(a, b) { - var w1 = a[1] * b[1]; - var w2 = (a[1] * b[1] >> 16 & 65535) + (a[0] * b[1] & 65535) + (a[1] * b[0] & 65535); - return [w2 & 65535, w1 & 65535]; - }; - Auth.and32 = function(a, b) { - return [a[0] & b[0], a[1] & b[1]]; - }; - Auth.shl32 = function(a, b) { - var w1 = a[1] << b; - var w2 = a[0] << b | (w1 & 4294901760) >> 16; - return [w2 & 65535, w1 & 65535]; - }; - Auth.int31Write = function(buffer, number, offset) { - buffer[offset] = number[0] >> 8 & 127; - buffer[offset + 1] = number[0] & 255; - buffer[offset + 2] = number[1] >> 8 & 255; - buffer[offset + 3] = number[1] & 255; - }; - Auth.int32Read = function(buffer, offset) { - return (buffer[offset] << 24) + (buffer[offset + 1] << 16) + (buffer[offset + 2] << 8) + buffer[offset + 3]; - }; -}); - -// node_modules/mysql/lib/protocol/sequences/ChangeUser.js -var require_ChangeUser = __commonJS((exports, module) => { - var Sequence = require_Sequence(); - var Util = __require("util"); - var Packets = require_packets(); - var Auth = require_Auth(); - module.exports = ChangeUser; - Util.inherits(ChangeUser, Sequence); - function ChangeUser(options, callback) { - Sequence.call(this, options, callback); - this._user = options.user; - this._password = options.password; - this._database = options.database; - this._charsetNumber = options.charsetNumber; - this._currentConfig = options.currentConfig; - } - ChangeUser.prototype.determinePacket = function determinePacket(firstByte) { - switch (firstByte) { - case 254: - return Packets.AuthSwitchRequestPacket; - case 255: - return Packets.ErrorPacket; - default: - return; - } - }; - ChangeUser.prototype.start = function(handshakeInitializationPacket) { - var scrambleBuff = handshakeInitializationPacket.scrambleBuff(); - scrambleBuff = Auth.token(this._password, scrambleBuff); - var packet = new Packets.ComChangeUserPacket({ - user: this._user, - scrambleBuff, - database: this._database, - charsetNumber: this._charsetNumber - }); - this._currentConfig.user = this._user; - this._currentConfig.password = this._password; - this._currentConfig.database = this._database; - this._currentConfig.charsetNumber = this._charsetNumber; - this.emit("packet", packet); - }; - ChangeUser.prototype["AuthSwitchRequestPacket"] = function(packet) { - var name = packet.authMethodName; - var data = Auth.auth(name, packet.authMethodData, { - password: this._password - }); - if (data !== undefined) { - this.emit("packet", new Packets.AuthSwitchResponsePacket({ - data - })); - } else { - var err = new Error("MySQL is requesting the " + name + " authentication method, which is not supported."); - err.code = "UNSUPPORTED_AUTH_METHOD"; - err.fatal = true; - this.end(err); - } - }; - ChangeUser.prototype["ErrorPacket"] = function(packet) { - var err = this._packetToError(packet); - err.fatal = true; - this.end(err); - }; -}); - -// node_modules/mysql/lib/protocol/sequences/Handshake.js -var require_Handshake = __commonJS((exports, module) => { - var Sequence = require_Sequence(); - var Util = __require("util"); - var Packets = require_packets(); - var Auth = require_Auth(); - var ClientConstants = require_client(); - module.exports = Handshake; - Util.inherits(Handshake, Sequence); - function Handshake(options, callback) { - Sequence.call(this, options, callback); - options = options || {}; - this._config = options.config; - this._handshakeInitializationPacket = null; - } - Handshake.prototype.determinePacket = function determinePacket(firstByte, parser) { - if (firstByte === 255) { - return Packets.ErrorPacket; - } - if (!this._handshakeInitializationPacket) { - return Packets.HandshakeInitializationPacket; - } - if (firstByte === 254) { - return parser.packetLength() === 1 ? Packets.UseOldPasswordPacket : Packets.AuthSwitchRequestPacket; - } - return; - }; - Handshake.prototype["AuthSwitchRequestPacket"] = function(packet) { - var name = packet.authMethodName; - var data = Auth.auth(name, packet.authMethodData, { - password: this._config.password - }); - if (data !== undefined) { - this.emit("packet", new Packets.AuthSwitchResponsePacket({ - data - })); - } else { - var err = new Error("MySQL is requesting the " + name + " authentication method, which is not supported."); - err.code = "UNSUPPORTED_AUTH_METHOD"; - err.fatal = true; - this.end(err); - } - }; - Handshake.prototype["HandshakeInitializationPacket"] = function(packet) { - this._handshakeInitializationPacket = packet; - this._config.protocol41 = packet.protocol41; - var serverSSLSupport = packet.serverCapabilities1 & ClientConstants.CLIENT_SSL; - if (this._config.ssl) { - if (!serverSSLSupport) { - var err = new Error("Server does not support secure connection"); - err.code = "HANDSHAKE_NO_SSL_SUPPORT"; - err.fatal = true; - this.end(err); - return; - } - this._config.clientFlags |= ClientConstants.CLIENT_SSL; - this.emit("packet", new Packets.SSLRequestPacket({ - clientFlags: this._config.clientFlags, - maxPacketSize: this._config.maxPacketSize, - charsetNumber: this._config.charsetNumber - })); - this.emit("start-tls"); - } else { - this._sendCredentials(); - } - }; - Handshake.prototype._tlsUpgradeCompleteHandler = function() { - this._sendCredentials(); - }; - Handshake.prototype._sendCredentials = function() { - var packet = this._handshakeInitializationPacket; - this.emit("packet", new Packets.ClientAuthenticationPacket({ - clientFlags: this._config.clientFlags, - maxPacketSize: this._config.maxPacketSize, - charsetNumber: this._config.charsetNumber, - user: this._config.user, - database: this._config.database, - protocol41: packet.protocol41, - scrambleBuff: packet.protocol41 ? Auth.token(this._config.password, packet.scrambleBuff()) : Auth.scramble323(packet.scrambleBuff(), this._config.password) - })); - }; - Handshake.prototype["UseOldPasswordPacket"] = function() { - if (!this._config.insecureAuth) { - var err = new Error("MySQL server is requesting the old and insecure pre-4.1 auth mechanism. " + "Upgrade the user password or use the {insecureAuth: true} option."); - err.code = "HANDSHAKE_INSECURE_AUTH"; - err.fatal = true; - this.end(err); - return; - } - this.emit("packet", new Packets.OldPasswordPacket({ - scrambleBuff: Auth.scramble323(this._handshakeInitializationPacket.scrambleBuff(), this._config.password) - })); - }; - Handshake.prototype["ErrorPacket"] = function(packet) { - var err = this._packetToError(packet, true); - err.fatal = true; - this.end(err); - }; -}); - -// node_modules/mysql/lib/protocol/sequences/Ping.js -var require_Ping = __commonJS((exports, module) => { - var Sequence = require_Sequence(); - var Util = __require("util"); - var Packets = require_packets(); - module.exports = Ping; - Util.inherits(Ping, Sequence); - function Ping(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - Sequence.call(this, options, callback); - } - Ping.prototype.start = function() { - this.emit("packet", new Packets.ComPingPacket); - }; -}); - -// node_modules/mysql/lib/protocol/ResultSet.js -var require_ResultSet = __commonJS((exports, module) => { - module.exports = ResultSet; - function ResultSet(resultSetHeaderPacket) { - this.resultSetHeaderPacket = resultSetHeaderPacket; - this.fieldPackets = []; - this.eofPackets = []; - this.rows = []; - } -}); - -// node_modules/mysql/lib/protocol/constants/server_status.js -var require_server_status = __commonJS((exports) => { - exports.SERVER_STATUS_IN_TRANS = 1; - exports.SERVER_STATUS_AUTOCOMMIT = 2; - exports.SERVER_MORE_RESULTS_EXISTS = 8; - exports.SERVER_QUERY_NO_GOOD_INDEX_USED = 16; - exports.SERVER_QUERY_NO_INDEX_USED = 32; - exports.SERVER_STATUS_CURSOR_EXISTS = 64; - exports.SERVER_STATUS_LAST_ROW_SENT = 128; - exports.SERVER_STATUS_DB_DROPPED = 256; - exports.SERVER_STATUS_NO_BACKSLASH_ESCAPES = 512; - exports.SERVER_STATUS_METADATA_CHANGED = 1024; - exports.SERVER_QUERY_WAS_SLOW = 2048; - exports.SERVER_PS_OUT_PARAMS = 4096; -}); - -// node_modules/process-nextick-args/index.js -var require_process_nextick_args = __commonJS((exports, module) => { - if (typeof process === "undefined" || !process.version || process.version.indexOf("v0.") === 0 || process.version.indexOf("v1.") === 0 && process.version.indexOf("v1.8.") !== 0) { - module.exports = { nextTick }; - } else { - module.exports = process; - } - function nextTick(fn, arg1, arg2, arg3) { - if (typeof fn !== "function") { - throw new TypeError('"callback" argument must be a function'); - } - var len = arguments.length; - var args, i; - switch (len) { - case 0: - case 1: - return process.nextTick(fn); - case 2: - return process.nextTick(function afterTickOne() { - fn.call(null, arg1); - }); - case 3: - return process.nextTick(function afterTickTwo() { - fn.call(null, arg1, arg2); - }); - case 4: - return process.nextTick(function afterTickThree() { - fn.call(null, arg1, arg2, arg3); - }); - default: - args = new Array(len - 1); - i = 0; - while (i < args.length) { - args[i++] = arguments[i]; - } - return process.nextTick(function afterTick() { - fn.apply(null, args); - }); - } - } -}); - -// node_modules/isarray/index.js -var require_isarray = __commonJS((exports, module) => { - var toString = {}.toString; - module.exports = Array.isArray || function(arr) { - return toString.call(arr) == "[object Array]"; - }; -}); - -// node_modules/core-util-is/lib/util.js -var require_util = __commonJS((exports) => { - function isArray(arg) { - if (Array.isArray) { - return Array.isArray(arg); - } - return objectToString(arg) === "[object Array]"; - } - exports.isArray = isArray; - function isBoolean(arg) { - return typeof arg === "boolean"; - } - exports.isBoolean = isBoolean; - function isNull(arg) { - return arg === null; - } - exports.isNull = isNull; - function isNullOrUndefined(arg) { - return arg == null; - } - exports.isNullOrUndefined = isNullOrUndefined; - function isNumber(arg) { - return typeof arg === "number"; - } - exports.isNumber = isNumber; - function isString(arg) { - return typeof arg === "string"; - } - exports.isString = isString; - function isSymbol(arg) { - return typeof arg === "symbol"; - } - exports.isSymbol = isSymbol; - function isUndefined(arg) { - return arg === undefined; - } - exports.isUndefined = isUndefined; - function isRegExp(re) { - return objectToString(re) === "[object RegExp]"; - } - exports.isRegExp = isRegExp; - function isObject(arg) { - return typeof arg === "object" && arg !== null; - } - exports.isObject = isObject; - function isDate(d) { - return objectToString(d) === "[object Date]"; - } - exports.isDate = isDate; - function isError(e) { - return objectToString(e) === "[object Error]" || e instanceof Error; - } - exports.isError = isError; - function isFunction(arg) { - return typeof arg === "function"; - } - exports.isFunction = isFunction; - function isPrimitive(arg) { - return arg === null || typeof arg === "boolean" || typeof arg === "number" || typeof arg === "string" || typeof arg === "symbol" || typeof arg === "undefined"; - } - exports.isPrimitive = isPrimitive; - exports.isBuffer = __require("buffer").Buffer.isBuffer; - function objectToString(o) { - return Object.prototype.toString.call(o); - } -}); - -// node_modules/inherits/inherits_browser.js -var require_inherits_browser = __commonJS((exports, module) => { - if (typeof Object.create === "function") { - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - } - }; - } else { - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - var TempCtor = function() { - }; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor; - ctor.prototype.constructor = ctor; - } - }; - } -}); - -// node_modules/inherits/inherits.js -var require_inherits = __commonJS((exports, module) => { - try { - util = __require("util"); - if (typeof util.inherits !== "function") - throw ""; - module.exports = util.inherits; - } catch (e) { - module.exports = require_inherits_browser(); - } - var util; -}); - -// node_modules/readable-stream/lib/internal/streams/BufferList.js -var require_BufferList2 = __commonJS((exports, module) => { - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - var Buffer2 = require_safe_buffer().Buffer; - var util = __require("util"); - function copyBuffer(src, target, offset) { - src.copy(target, offset); - } - module.exports = function() { - function BufferList() { - _classCallCheck(this, BufferList); - this.head = null; - this.tail = null; - this.length = 0; - } - BufferList.prototype.push = function push(v) { - var entry = { data: v, next: null }; - if (this.length > 0) - this.tail.next = entry; - else - this.head = entry; - this.tail = entry; - ++this.length; - }; - BufferList.prototype.unshift = function unshift(v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) - this.tail = entry; - this.head = entry; - ++this.length; - }; - BufferList.prototype.shift = function shift() { - if (this.length === 0) - return; - var ret = this.head.data; - if (this.length === 1) - this.head = this.tail = null; - else - this.head = this.head.next; - --this.length; - return ret; - }; - BufferList.prototype.clear = function clear() { - this.head = this.tail = null; - this.length = 0; - }; - BufferList.prototype.join = function join(s) { - if (this.length === 0) - return ""; - var p = this.head; - var ret = "" + p.data; - while (p = p.next) { - ret += s + p.data; - } - return ret; - }; - BufferList.prototype.concat = function concat(n) { - if (this.length === 0) - return Buffer2.alloc(0); - if (this.length === 1) - return this.head.data; - var ret = Buffer2.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - }; - return BufferList; - }(); - if (util && util.inspect && util.inspect.custom) { - module.exports.prototype[util.inspect.custom] = function() { - var obj = util.inspect({ length: this.length }); - return this.constructor.name + " " + obj; - }; - } -}); - -// node_modules/readable-stream/lib/internal/streams/destroy.js -var require_destroy = __commonJS((exports, module) => { - var pna = require_process_nextick_args(); - function destroy(err, cb) { - var _this = this; - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { - pna.nextTick(emitErrorNT, this, err); - } - return this; - } - if (this._readableState) { - this._readableState.destroyed = true; - } - if (this._writableState) { - this._writableState.destroyed = true; - } - this._destroy(err || null, function(err2) { - if (!cb && err2) { - pna.nextTick(emitErrorNT, _this, err2); - if (_this._writableState) { - _this._writableState.errorEmitted = true; - } - } else if (cb) { - cb(err2); - } - }); - return this; - } - function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } - } - function emitErrorNT(self2, err) { - self2.emit("error", err); - } - module.exports = { - destroy, - undestroy - }; -}); - -// node_modules/util-deprecate/node.js -var require_node = __commonJS((exports, module) => { - module.exports = __require("util").deprecate; -}); - -// node_modules/readable-stream/lib/_stream_writable.js -var require__stream_writable = __commonJS((exports, module) => { - var pna = require_process_nextick_args(); - module.exports = Writable; - function CorkedRequest(state) { - var _this = this; - this.next = null; - this.entry = null; - this.finish = function() { - onCorkedFinish(_this, state); - }; - } - var asyncWrite = ["v0.10", "v0.9."].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; - var Duplex; - Writable.WritableState = WritableState; - var util = Object.create(require_util()); - util.inherits = require_inherits(); - var internalUtil = { - deprecate: require_node() - }; - var Stream = __require("stream"); - var Buffer2 = require_safe_buffer().Buffer; - var OurUint8Array = global.Uint8Array || function() { - }; - function _uint8ArrayToBuffer(chunk) { - return Buffer2.from(chunk); - } - function _isUint8Array(obj) { - return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array; - } - var destroyImpl = require_destroy(); - util.inherits(Writable, Stream); - function nop() { - } - function WritableState(options, stream) { - Duplex = Duplex || require__stream_duplex(); - options = options || {}; - var isDuplex = stream instanceof Duplex; - this.objectMode = !!options.objectMode; - if (isDuplex) - this.objectMode = this.objectMode || !!options.writableObjectMode; - var hwm = options.highWaterMark; - var writableHwm = options.writableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - if (hwm || hwm === 0) - this.highWaterMark = hwm; - else if (isDuplex && (writableHwm || writableHwm === 0)) - this.highWaterMark = writableHwm; - else - this.highWaterMark = defaultHwm; - this.highWaterMark = Math.floor(this.highWaterMark); - this.finalCalled = false; - this.needDrain = false; - this.ending = false; - this.ended = false; - this.finished = false; - this.destroyed = false; - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - this.defaultEncoding = options.defaultEncoding || "utf8"; - this.length = 0; - this.writing = false; - this.corked = 0; - this.sync = true; - this.bufferProcessing = false; - this.onwrite = function(er) { - onwrite(stream, er); - }; - this.writecb = null; - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; - this.pendingcb = 0; - this.prefinished = false; - this.errorEmitted = false; - this.bufferedRequestCount = 0; - this.corkedRequestsFree = new CorkedRequest(this); - } - WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; - }; - (function() { - try { - Object.defineProperty(WritableState.prototype, "buffer", { - get: internalUtil.deprecate(function() { - return this.getBuffer(); - }, "_writableState.buffer is deprecated. Use _writableState.getBuffer " + "instead.", "DEP0003") - }); - } catch (_) { - } - })(); - var realHasInstance; - if (typeof Symbol === "function" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === "function") { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function(object) { - if (realHasInstance.call(this, object)) - return true; - if (this !== Writable) - return false; - return object && object._writableState instanceof WritableState; - } - }); - } else { - realHasInstance = function(object) { - return object instanceof this; - }; - } - function Writable(options) { - Duplex = Duplex || require__stream_duplex(); - if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { - return new Writable(options); - } - this._writableState = new WritableState(options, this); - this.writable = true; - if (options) { - if (typeof options.write === "function") - this._write = options.write; - if (typeof options.writev === "function") - this._writev = options.writev; - if (typeof options.destroy === "function") - this._destroy = options.destroy; - if (typeof options.final === "function") - this._final = options.final; - } - Stream.call(this); - } - Writable.prototype.pipe = function() { - this.emit("error", new Error("Cannot pipe, not readable")); - }; - function writeAfterEnd(stream, cb) { - var er = new Error("write after end"); - stream.emit("error", er); - pna.nextTick(cb, er); - } - function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; - if (chunk === null) { - er = new TypeError("May not write null values to stream"); - } else if (typeof chunk !== "string" && chunk !== undefined && !state.objectMode) { - er = new TypeError("Invalid non-string/buffer chunk"); - } - if (er) { - stream.emit("error", er); - pna.nextTick(cb, er); - valid = false; - } - return valid; - } - Writable.prototype.write = function(chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - var isBuf = !state.objectMode && _isUint8Array(chunk); - if (isBuf && !Buffer2.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - if (typeof encoding === "function") { - cb = encoding; - encoding = null; - } - if (isBuf) - encoding = "buffer"; - else if (!encoding) - encoding = state.defaultEncoding; - if (typeof cb !== "function") - cb = nop; - if (state.ended) - writeAfterEnd(this, cb); - else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - return ret; - }; - Writable.prototype.cork = function() { - var state = this._writableState; - state.corked++; - }; - Writable.prototype.uncork = function() { - var state = this._writableState; - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) - clearBuffer(this, state); - } - }; - Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - if (typeof encoding === "string") - encoding = encoding.toLowerCase(); - if (!(["hex", "utf8", "utf-8", "ascii", "binary", "base64", "ucs2", "ucs-2", "utf16le", "utf-16le", "raw"].indexOf((encoding + "").toLowerCase()) > -1)) - throw new TypeError("Unknown encoding: " + encoding); - this._writableState.defaultEncoding = encoding; - return this; - }; - function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === "string") { - chunk = Buffer2.from(chunk, encoding); - } - return chunk; - } - Object.defineProperty(Writable.prototype, "writableHighWaterMark", { - enumerable: false, - get: function() { - return this._writableState.highWaterMark; - } - }); - function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - if (chunk !== newChunk) { - isBuf = true; - encoding = "buffer"; - chunk = newChunk; - } - } - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; - if (!ret) - state.needDrain = true; - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk, - encoding, - isBuf, - callback: cb, - next: null - }; - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - return ret; - } - function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) - stream._writev(chunk, state.onwrite); - else - stream._write(chunk, encoding, state.onwrite); - state.sync = false; - } - function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - if (sync) { - pna.nextTick(cb, er); - pna.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - stream.emit("error", er); - } else { - cb(er); - stream._writableState.errorEmitted = true; - stream.emit("error", er); - finishMaybe(stream, state); - } - } - function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; - } - function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - onwriteStateUpdate(state); - if (er) - onwriteError(stream, state, sync, er, cb); - else { - var finished = needFinish(state); - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - if (sync) { - asyncWrite(afterWrite, stream, state, finished, cb); - } else { - afterWrite(stream, state, finished, cb); - } - } - } - function afterWrite(stream, state, finished, cb) { - if (!finished) - onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); - } - function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit("drain"); - } - } - function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - if (stream._writev && entry && entry.next) { - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) - allBuffers = false; - entry = entry.next; - count += 1; - } - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, "", holder.finish); - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - state.bufferedRequestCount = 0; - } else { - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; - if (state.writing) { - break; - } - } - if (entry === null) - state.lastBufferedRequest = null; - } - state.bufferedRequest = entry; - state.bufferProcessing = false; - } - Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error("_write() is not implemented")); - }; - Writable.prototype._writev = null; - Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; - if (typeof chunk === "function") { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === "function") { - cb = encoding; - encoding = null; - } - if (chunk !== null && chunk !== undefined) - this.write(chunk, encoding); - if (state.corked) { - state.corked = 1; - this.uncork(); - } - if (!state.ending && !state.finished) - endWritable(this, state, cb); - }; - function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; - } - function callFinal(stream, state) { - stream._final(function(err) { - state.pendingcb--; - if (err) { - stream.emit("error", err); - } - state.prefinished = true; - stream.emit("prefinish"); - finishMaybe(stream, state); - }); - } - function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === "function") { - state.pendingcb++; - state.finalCalled = true; - pna.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit("prefinish"); - } - } - } - function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); - if (state.pendingcb === 0) { - state.finished = true; - stream.emit("finish"); - } - } - return need; - } - function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) - pna.nextTick(cb); - else - stream.once("finish", cb); - } - state.ended = true; - stream.writable = false; - } - function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - if (state.corkedRequestsFree) { - state.corkedRequestsFree.next = corkReq; - } else { - state.corkedRequestsFree = corkReq; - } - } - Object.defineProperty(Writable.prototype, "destroyed", { - get: function() { - if (this._writableState === undefined) { - return false; - } - return this._writableState.destroyed; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Imports + */ +const get_1 = __importDefault(require("./utils/get")); +const post_1 = __importDefault(require("./utils/post")); +const get_schema_1 = __importDefault(require("./utils/get-schema")); +const upload_image_1 = __importDefault(require("./utils/upload-image")); +const upload_file_1 = __importDefault(require("./utils/upload-file")); +const delete_file_1 = __importDefault(require("./utils/delete-file")); +const add_user_1 = __importDefault(require("./users/add-user")); +const update_user_1 = __importDefault(require("./users/update-user")); +const login_user_1 = __importDefault(require("./users/login-user")); +const send_email_code_1 = __importDefault(require("./users/send-email-code")); +const logout_user_1 = __importDefault(require("./users/logout-user")); +const user_auth_1 = __importDefault(require("./users/user-auth")); +const reauth_user_1 = __importDefault(require("./users/reauth-user")); +const get_user_1 = __importDefault(require("./users/get-user")); +const google_auth_1 = __importDefault(require("./users/social/google-auth")); +const github_auth_1 = __importDefault(require("./users/social/github-auth")); +const get_token_1 = __importDefault(require("./users/get-token")); +const validate_token_1 = __importDefault(require("./users/validate-token")); +const client_1 = __importDefault(require("./client")); +const sql_generator_1 = __importDefault(require("./package-shared/functions/dsql/sql/sql-generator")); +const sql_insert_generator_1 = __importDefault(require("./package-shared/functions/dsql/sql/sql-insert-generator")); +const sql_delete_generator_1 = __importDefault(require("./package-shared/functions/dsql/sql/sql-delete-generator")); +const trim_sql_1 = __importDefault(require("./package-shared/utils/trim-sql")); +const parseCookies_1 = __importDefault(require("./package-shared/utils/backend/parseCookies")); +const httpRequest_1 = __importDefault(require("./package-shared/functions/backend/httpRequest")); +//////////////////////////////////////// +//////////////////////////////////////// +//////////////////////////////////////// +/** + * User Functions Object + */ +const user = { + createUser: add_user_1.default, + deleteUser: require("./users/delete-user"), + loginUser: login_user_1.default, + sendEmailCode: send_email_code_1.default, + logoutUser: logout_user_1.default, + userAuth: user_auth_1.default, + reAuthUser: reauth_user_1.default, + updateUser: update_user_1.default, + getUser: get_user_1.default, + getToken: get_token_1.default, + validateToken: validate_token_1.default, + validateTempEmailCode: require("./users/validate-temp-email-code"), + social: { + loginWithGoogle: google_auth_1.default, + loginWithGithub: github_auth_1.default, }, - set: function(value) { - if (!this._writableState) { - return; - } - this._writableState.destroyed = value; - } - }); - Writable.prototype.destroy = destroyImpl.destroy; - Writable.prototype._undestroy = destroyImpl.undestroy; - Writable.prototype._destroy = function(err, cb) { - this.end(); - cb(err); - }; -}); - -// node_modules/readable-stream/lib/_stream_duplex.js -var require__stream_duplex = __commonJS((exports, module) => { - var pna = require_process_nextick_args(); - var objectKeys = Object.keys || function(obj) { - var keys2 = []; - for (var key in obj) { - keys2.push(key); - } - return keys2; - }; - module.exports = Duplex; - var util = Object.create(require_util()); - util.inherits = require_inherits(); - var Readable = require__stream_readable(); - var Writable = require__stream_writable(); - util.inherits(Duplex, Readable); - { - keys = objectKeys(Writable.prototype); - for (v = 0;v < keys.length; v++) { - method = keys[v]; - if (!Duplex.prototype[method]) - Duplex.prototype[method] = Writable.prototype[method]; - } - } - var keys; - var method; - var v; - function Duplex(options) { - if (!(this instanceof Duplex)) - return new Duplex(options); - Readable.call(this, options); - Writable.call(this, options); - if (options && options.readable === false) - this.readable = false; - if (options && options.writable === false) - this.writable = false; - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) - this.allowHalfOpen = false; - this.once("end", onend); - } - Object.defineProperty(Duplex.prototype, "writableHighWaterMark", { - enumerable: false, - get: function() { - return this._writableState.highWaterMark; - } - }); - function onend() { - if (this.allowHalfOpen || this._writableState.ended) - return; - pna.nextTick(onEndNT, this); - } - function onEndNT(self2) { - self2.end(); - } - Object.defineProperty(Duplex.prototype, "destroyed", { - get: function() { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function(value) { - if (this._readableState === undefined || this._writableState === undefined) { - return; - } - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } - }); - Duplex.prototype._destroy = function(err, cb) { - this.push(null); - this.end(); - pna.nextTick(cb, err); - }; -}); - -// node_modules/string_decoder/lib/string_decoder.js -var require_string_decoder = __commonJS((exports) => { - var Buffer2 = require_safe_buffer().Buffer; - var isEncoding = Buffer2.isEncoding || function(encoding) { - encoding = "" + encoding; - switch (encoding && encoding.toLowerCase()) { - case "hex": - case "utf8": - case "utf-8": - case "ascii": - case "binary": - case "base64": - case "ucs2": - case "ucs-2": - case "utf16le": - case "utf-16le": - case "raw": - return true; - default: - return false; - } - }; - function _normalizeEncoding(enc) { - if (!enc) - return "utf8"; - var retried; - while (true) { - switch (enc) { - case "utf8": - case "utf-8": - return "utf8"; - case "ucs2": - case "ucs-2": - case "utf16le": - case "utf-16le": - return "utf16le"; - case "latin1": - case "binary": - return "latin1"; - case "base64": - case "ascii": - case "hex": - return enc; - default: - if (retried) - return; - enc = ("" + enc).toLowerCase(); - retried = true; - } - } - } - function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== "string" && (Buffer2.isEncoding === isEncoding || !isEncoding(enc))) - throw new Error("Unknown encoding: " + enc); - return nenc || enc; - } - exports.StringDecoder = StringDecoder; - function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case "utf16le": - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case "utf8": - this.fillLast = utf8FillLast; - nb = 4; - break; - case "base64": - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer2.allocUnsafe(nb); - } - StringDecoder.prototype.write = function(buf) { - if (buf.length === 0) - return ""; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) - return ""; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) - return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ""; - }; - StringDecoder.prototype.end = utf8End; - StringDecoder.prototype.text = utf8Text; - StringDecoder.prototype.fillLast = function(buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; - }; - function utf8CheckByte(byte) { - if (byte <= 127) - return 0; - else if (byte >> 5 === 6) - return 2; - else if (byte >> 4 === 14) - return 3; - else if (byte >> 3 === 30) - return 4; - return byte >> 6 === 2 ? -1 : -2; - } - function utf8CheckIncomplete(self2, buf, i) { - var j = buf.length - 1; - if (j < i) - return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) - self2.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) - return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) - self2.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) - return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) - nb = 0; - else - self2.lastNeed = nb - 3; - } - return nb; - } - return 0; - } - function utf8CheckExtraBytes(self2, buf, p) { - if ((buf[0] & 192) !== 128) { - self2.lastNeed = 0; - return "\uFFFD"; - } - if (self2.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 192) !== 128) { - self2.lastNeed = 1; - return "\uFFFD"; - } - if (self2.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 192) !== 128) { - self2.lastNeed = 2; - return "\uFFFD"; - } - } - } - } - function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) - return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; - } - function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) - return buf.toString("utf8", i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString("utf8", i, end); - } - function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ""; - if (this.lastNeed) - return r + "\uFFFD"; - return r; - } - function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString("utf16le", i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 55296 && c <= 56319) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString("utf16le", i, buf.length - 1); - } - function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ""; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString("utf16le", 0, end); - } - return r; - } - function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) - return buf.toString("base64", i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString("base64", i, buf.length - n); - } - function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ""; - if (this.lastNeed) - return r + this.lastChar.toString("base64", 0, 3 - this.lastNeed); - return r; - } - function simpleWrite(buf) { - return buf.toString(this.encoding); - } - function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ""; - } -}); - -// node_modules/readable-stream/lib/_stream_readable.js -var require__stream_readable = __commonJS((exports, module) => { - var pna = require_process_nextick_args(); - module.exports = Readable; - var isArray = require_isarray(); - var Duplex; - Readable.ReadableState = ReadableState; - var EE = __require("events").EventEmitter; - var EElistenerCount = function(emitter, type) { - return emitter.listeners(type).length; - }; - var Stream = __require("stream"); - var Buffer2 = require_safe_buffer().Buffer; - var OurUint8Array = global.Uint8Array || function() { - }; - function _uint8ArrayToBuffer(chunk) { - return Buffer2.from(chunk); - } - function _isUint8Array(obj) { - return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array; - } - var util = Object.create(require_util()); - util.inherits = require_inherits(); - var debugUtil = __require("util"); - var debug = undefined; - if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog("stream"); - } else { - debug = function() { - }; - } - var BufferList = require_BufferList2(); - var destroyImpl = require_destroy(); - var StringDecoder; - util.inherits(Readable, Stream); - var kProxyEvents = ["error", "close", "destroy", "pause", "resume"]; - function prependListener(emitter, event, fn) { - if (typeof emitter.prependListener === "function") - return emitter.prependListener(event, fn); - if (!emitter._events || !emitter._events[event]) - emitter.on(event, fn); - else if (isArray(emitter._events[event])) - emitter._events[event].unshift(fn); - else - emitter._events[event] = [fn, emitter._events[event]]; - } - function ReadableState(options, stream) { - Duplex = Duplex || require__stream_duplex(); - options = options || {}; - var isDuplex = stream instanceof Duplex; - this.objectMode = !!options.objectMode; - if (isDuplex) - this.objectMode = this.objectMode || !!options.readableObjectMode; - var hwm = options.highWaterMark; - var readableHwm = options.readableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - if (hwm || hwm === 0) - this.highWaterMark = hwm; - else if (isDuplex && (readableHwm || readableHwm === 0)) - this.highWaterMark = readableHwm; - else - this.highWaterMark = defaultHwm; - this.highWaterMark = Math.floor(this.highWaterMark); - this.buffer = new BufferList; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - this.sync = true; - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - this.destroyed = false; - this.defaultEncoding = options.defaultEncoding || "utf8"; - this.awaitDrain = 0; - this.readingMore = false; - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) - StringDecoder = require_string_decoder().StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } - } - function Readable(options) { - Duplex = Duplex || require__stream_duplex(); - if (!(this instanceof Readable)) - return new Readable(options); - this._readableState = new ReadableState(options, this); - this.readable = true; - if (options) { - if (typeof options.read === "function") - this._read = options.read; - if (typeof options.destroy === "function") - this._destroy = options.destroy; - } - Stream.call(this); - } - Object.defineProperty(Readable.prototype, "destroyed", { - get: function() { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function(value) { - if (!this._readableState) { - return; - } - this._readableState.destroyed = value; - } - }); - Readable.prototype.destroy = destroyImpl.destroy; - Readable.prototype._undestroy = destroyImpl.undestroy; - Readable.prototype._destroy = function(err, cb) { - this.push(null); - cb(err); - }; - Readable.prototype.push = function(chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - if (!state.objectMode) { - if (typeof chunk === "string") { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer2.from(chunk, encoding); - encoding = ""; - } - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); - }; - Readable.prototype.unshift = function(chunk) { - return readableAddChunk(this, chunk, null, true, false); - }; - function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) - er = chunkInvalid(state, chunk); - if (er) { - stream.emit("error", er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== "string" && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer2.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - if (addToFront) { - if (state.endEmitted) - stream.emit("error", new Error("stream.unshift() after end event")); - else - addChunk(stream, state, chunk, true); - } else if (state.ended) { - stream.emit("error", new Error("stream.push() after EOF")); - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) - addChunk(stream, state, chunk, false); - else - maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - } - } - return needMoreData(state); - } - function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit("data", chunk); - stream.read(0); - } else { - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) - state.buffer.unshift(chunk); - else - state.buffer.push(chunk); - if (state.needReadable) - emitReadable(stream); - } - maybeReadMore(stream, state); - } - function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== "string" && chunk !== undefined && !state.objectMode) { - er = new TypeError("Invalid non-string/buffer chunk"); - } - return er; - } - function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); - } - Readable.prototype.isPaused = function() { - return this._readableState.flowing === false; - }; - Readable.prototype.setEncoding = function(enc) { - if (!StringDecoder) - StringDecoder = require_string_decoder().StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; - }; - var MAX_HWM = 8388608; - function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; - } - function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) - return 0; - if (state.objectMode) - return 1; - if (n !== n) { - if (state.flowing && state.length) - return state.buffer.head.data.length; - else - return state.length; - } - if (n > state.highWaterMark) - state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) - return n; - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; - } - Readable.prototype.read = function(n) { - debug("read", n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - if (n !== 0) - state.emittedReadable = false; - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug("read: emitReadable", state.length, state.ended); - if (state.length === 0 && state.ended) - endReadable(this); - else - emitReadable(this); - return null; - } - n = howMuchToRead(n, state); - if (n === 0 && state.ended) { - if (state.length === 0) - endReadable(this); - return null; - } - var doRead = state.needReadable; - debug("need readable", doRead); - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug("length less than watermark", doRead); - } - if (state.ended || state.reading) { - doRead = false; - debug("reading or ended", doRead); - } else if (doRead) { - debug("do read"); - state.reading = true; - state.sync = true; - if (state.length === 0) - state.needReadable = true; - this._read(state.highWaterMark); - state.sync = false; - if (!state.reading) - n = howMuchToRead(nOrig, state); - } - var ret; - if (n > 0) - ret = fromList(n, state); - else - ret = null; - if (ret === null) { - state.needReadable = true; - n = 0; - } else { - state.length -= n; - } - if (state.length === 0) { - if (!state.ended) - state.needReadable = true; - if (nOrig !== n && state.ended) - endReadable(this); - } - if (ret !== null) - this.emit("data", ret); - return ret; - }; - function onEofChunk(stream, state) { - if (state.ended) - return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - emitReadable(stream); - } - function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug("emitReadable", state.flowing); - state.emittedReadable = true; - if (state.sync) - pna.nextTick(emitReadable_, stream); - else - emitReadable_(stream); - } - } - function emitReadable_(stream) { - debug("emit readable"); - stream.emit("readable"); - flow(stream); - } - function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - pna.nextTick(maybeReadMore_, stream, state); - } - } - function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug("maybeReadMore read 0"); - stream.read(0); - if (len === state.length) - break; - else - len = state.length; - } - state.readingMore = false; - } - Readable.prototype._read = function(n) { - this.emit("error", new Error("_read() is not implemented")); - }; - Readable.prototype.pipe = function(dest, pipeOpts) { - var src = this; - var state = this._readableState; - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug("pipe count=%d opts=%j", state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) - pna.nextTick(endFn); - else - src.once("end", endFn); - dest.on("unpipe", onunpipe); - function onunpipe(readable, unpipeInfo) { - debug("onunpipe"); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - function onend() { - debug("onend"); - dest.end(); - } - var ondrain = pipeOnDrain(src); - dest.on("drain", ondrain); - var cleanedUp = false; - function cleanup() { - debug("cleanup"); - dest.removeListener("close", onclose); - dest.removeListener("finish", onfinish); - dest.removeListener("drain", ondrain); - dest.removeListener("error", onerror); - dest.removeListener("unpipe", onunpipe); - src.removeListener("end", onend); - src.removeListener("end", unpipe); - src.removeListener("data", ondata); - cleanedUp = true; - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) - ondrain(); - } - var increasedAwaitDrain = false; - src.on("data", ondata); - function ondata(chunk) { - debug("ondata"); - increasedAwaitDrain = false; - var ret = dest.write(chunk); - if (ret === false && !increasedAwaitDrain) { - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug("false write response, pause", src._readableState.awaitDrain); - src._readableState.awaitDrain++; - increasedAwaitDrain = true; - } - src.pause(); - } - } - function onerror(er) { - debug("onerror", er); - unpipe(); - dest.removeListener("error", onerror); - if (EElistenerCount(dest, "error") === 0) - dest.emit("error", er); - } - prependListener(dest, "error", onerror); - function onclose() { - dest.removeListener("finish", onfinish); - unpipe(); - } - dest.once("close", onclose); - function onfinish() { - debug("onfinish"); - dest.removeListener("close", onclose); - unpipe(); - } - dest.once("finish", onfinish); - function unpipe() { - debug("unpipe"); - src.unpipe(dest); - } - dest.emit("pipe", src); - if (!state.flowing) { - debug("pipe resume"); - src.resume(); - } - return dest; - }; - function pipeOnDrain(src) { - return function() { - var state = src._readableState; - debug("pipeOnDrain", state.awaitDrain); - if (state.awaitDrain) - state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, "data")) { - state.flowing = true; - flow(src); - } - }; - } - Readable.prototype.unpipe = function(dest) { - var state = this._readableState; - var unpipeInfo = { hasUnpiped: false }; - if (state.pipesCount === 0) - return this; - if (state.pipesCount === 1) { - if (dest && dest !== state.pipes) - return this; - if (!dest) - dest = state.pipes; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) - dest.emit("unpipe", this, unpipeInfo); - return this; - } - if (!dest) { - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - for (var i = 0;i < len; i++) { - dests[i].emit("unpipe", this, unpipeInfo); - } - return this; - } - var index = indexOf(state.pipes, dest); - if (index === -1) - return this; - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) - state.pipes = state.pipes[0]; - dest.emit("unpipe", this, unpipeInfo); - return this; - }; - Readable.prototype.on = function(ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - if (ev === "data") { - if (this._readableState.flowing !== false) - this.resume(); - } else if (ev === "readable") { - var state = this._readableState; - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.emittedReadable = false; - if (!state.reading) { - pna.nextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this); - } - } - } - return res; - }; - Readable.prototype.addListener = Readable.prototype.on; - function nReadingNextTick(self2) { - debug("readable nexttick read 0"); - self2.read(0); - } - Readable.prototype.resume = function() { - var state = this._readableState; - if (!state.flowing) { - debug("resume"); - state.flowing = true; - resume(this, state); - } - return this; - }; - function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - pna.nextTick(resume_, stream, state); - } - } - function resume_(stream, state) { - if (!state.reading) { - debug("resume read 0"); - stream.read(0); - } - state.resumeScheduled = false; - state.awaitDrain = 0; - stream.emit("resume"); - flow(stream); - if (state.flowing && !state.reading) - stream.read(0); - } - Readable.prototype.pause = function() { - debug("call pause flowing=%j", this._readableState.flowing); - if (this._readableState.flowing !== false) { - debug("pause"); - this._readableState.flowing = false; - this.emit("pause"); - } - return this; - }; - function flow(stream) { - var state = stream._readableState; - debug("flow", state.flowing); - while (state.flowing && stream.read() !== null) { - } - } - Readable.prototype.wrap = function(stream) { - var _this = this; - var state = this._readableState; - var paused = false; - stream.on("end", function() { - debug("wrapped end"); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) - _this.push(chunk); - } - _this.push(null); - }); - stream.on("data", function(chunk) { - debug("wrapped data"); - if (state.decoder) - chunk = state.decoder.write(chunk); - if (state.objectMode && (chunk === null || chunk === undefined)) - return; - else if (!state.objectMode && (!chunk || !chunk.length)) - return; - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === "function") { - this[i] = function(method) { - return function() { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - for (var n = 0;n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - this._read = function(n2) { - debug("wrapped _read", n2); - if (paused) { - paused = false; - stream.resume(); - } - }; - return this; - }; - Object.defineProperty(Readable.prototype, "readableHighWaterMark", { - enumerable: false, - get: function() { - return this._readableState.highWaterMark; - } - }); - Readable._fromList = fromList; - function fromList(n, state) { - if (state.length === 0) - return null; - var ret; - if (state.objectMode) - ret = state.buffer.shift(); - else if (!n || n >= state.length) { - if (state.decoder) - ret = state.buffer.join(""); - else if (state.buffer.length === 1) - ret = state.buffer.head.data; - else - ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - ret = fromListPartial(n, state.buffer, state.decoder); - } - return ret; - } - function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - ret = list.shift(); - } else { - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; - } - function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) - ret += str; - else - ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) - list.head = p.next; - else - list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; - } - function copyFromBuffer(n, list) { - var ret = Buffer2.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) - list.head = p.next; - else - list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; - } - function endReadable(stream) { - var state = stream._readableState; - if (state.length > 0) - throw new Error('"endReadable()" called on non-empty stream'); - if (!state.endEmitted) { - state.ended = true; - pna.nextTick(endReadableNT, state, stream); - } - } - function endReadableNT(state, stream) { - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit("end"); - } - } - function indexOf(xs, x) { - for (var i = 0, l = xs.length;i < l; i++) { - if (xs[i] === x) - return i; - } - return -1; - } -}); - -// node_modules/readable-stream/lib/_stream_transform.js -var require__stream_transform = __commonJS((exports, module) => { - module.exports = Transform; - var Duplex = require__stream_duplex(); - var util = Object.create(require_util()); - util.inherits = require_inherits(); - util.inherits(Transform, Duplex); - function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - var cb = ts.writecb; - if (!cb) { - return this.emit("error", new Error("write callback called multiple times")); - } - ts.writechunk = null; - ts.writecb = null; - if (data != null) - this.push(data); - cb(er); - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } - } - function Transform(options) { - if (!(this instanceof Transform)) - return new Transform(options); - Duplex.call(this, options); - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; - this._readableState.needReadable = true; - this._readableState.sync = false; - if (options) { - if (typeof options.transform === "function") - this._transform = options.transform; - if (typeof options.flush === "function") - this._flush = options.flush; - } - this.on("prefinish", prefinish); - } - function prefinish() { - var _this = this; - if (typeof this._flush === "function") { - this._flush(function(er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } - } - Transform.prototype.push = function(chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); - }; - Transform.prototype._transform = function(chunk, encoding, cb) { - throw new Error("_transform() is not implemented"); - }; - Transform.prototype._write = function(chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) - this._read(rs.highWaterMark); - } - }; - Transform.prototype._read = function(n) { - var ts = this._transformState; - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - ts.needTransform = true; - } - }; - Transform.prototype._destroy = function(err, cb) { - var _this2 = this; - Duplex.prototype._destroy.call(this, err, function(err2) { - cb(err2); - _this2.emit("close"); - }); - }; - function done(stream, er, data) { - if (er) - return stream.emit("error", er); - if (data != null) - stream.push(data); - if (stream._writableState.length) - throw new Error("Calling transform done when ws.length != 0"); - if (stream._transformState.transforming) - throw new Error("Calling transform done when still transforming"); - return stream.push(null); - } -}); - -// node_modules/readable-stream/lib/_stream_passthrough.js -var require__stream_passthrough = __commonJS((exports, module) => { - module.exports = PassThrough; - var Transform = require__stream_transform(); - var util = Object.create(require_util()); - util.inherits = require_inherits(); - util.inherits(PassThrough, Transform); - function PassThrough(options) { - if (!(this instanceof PassThrough)) - return new PassThrough(options); - Transform.call(this, options); - } - PassThrough.prototype._transform = function(chunk, encoding, cb) { - cb(null, chunk); - }; -}); - -// node_modules/readable-stream/readable.js -var require_readable = __commonJS((exports, module) => { - var Stream = __require("stream"); - if (process.env.READABLE_STREAM === "disable" && Stream) { - module.exports = Stream; - exports = module.exports = Stream.Readable; - exports.Readable = Stream.Readable; - exports.Writable = Stream.Writable; - exports.Duplex = Stream.Duplex; - exports.Transform = Stream.Transform; - exports.PassThrough = Stream.PassThrough; - exports.Stream = Stream; - } else { - exports = module.exports = require__stream_readable(); - exports.Stream = Stream || exports; - exports.Readable = exports; - exports.Writable = require__stream_writable(); - exports.Duplex = require__stream_duplex(); - exports.Transform = require__stream_transform(); - exports.PassThrough = require__stream_passthrough(); - } -}); - -// node_modules/mysql/lib/protocol/sequences/Query.js -var require_Query = __commonJS((exports, module) => { - var ClientConstants = require_client(); - var fs2 = __require("fs"); - var Packets = require_packets(); - var ResultSet = require_ResultSet(); - var Sequence = require_Sequence(); - var ServerStatus = require_server_status(); - var Readable = require_readable(); - var Util = __require("util"); - module.exports = Query; - Util.inherits(Query, Sequence); - function Query(options, callback) { - Sequence.call(this, options, callback); - this.sql = options.sql; - this.values = options.values; - this.typeCast = options.typeCast === undefined ? true : options.typeCast; - this.nestTables = options.nestTables || false; - this._resultSet = null; - this._results = []; - this._fields = []; - this._index = 0; - this._loadError = null; - } - Query.prototype.start = function() { - this.emit("packet", new Packets.ComQueryPacket(this.sql)); - }; - Query.prototype.determinePacket = function determinePacket(byte, parser) { - var resultSet = this._resultSet; - if (!resultSet) { - switch (byte) { - case 0: - return Packets.OkPacket; - case 251: - return Packets.LocalInfileRequestPacket; - case 255: - return Packets.ErrorPacket; - default: - return Packets.ResultSetHeaderPacket; - } - } - if (resultSet.eofPackets.length === 0) { - return resultSet.fieldPackets.length < resultSet.resultSetHeaderPacket.fieldCount ? Packets.FieldPacket : Packets.EofPacket; - } - if (byte === 255) { - return Packets.ErrorPacket; - } - if (byte === 254 && parser.packetLength() < 9) { - return Packets.EofPacket; - } - return Packets.RowDataPacket; - }; - Query.prototype["OkPacket"] = function(packet) { - try { - if (!this._callback) { - this.emit("result", packet, this._index); - } else { - this._results.push(packet); - this._fields.push(undefined); - } - } finally { - this._index++; - this._resultSet = null; - this._handleFinalResultPacket(packet); - } - }; - Query.prototype["ErrorPacket"] = function(packet) { - var err = this._packetToError(packet); - var results = this._results.length > 0 ? this._results : undefined; - var fields = this._fields.length > 0 ? this._fields : undefined; - err.index = this._index; - err.sql = this.sql; - this.end(err, results, fields); - }; - Query.prototype["LocalInfileRequestPacket"] = function(packet) { - if (this._connection.config.clientFlags & ClientConstants.CLIENT_LOCAL_FILES) { - this._sendLocalDataFile(packet.filename); - } else { - this._loadError = new Error("Load local files command is disabled"); - this._loadError.code = "LOCAL_FILES_DISABLED"; - this._loadError.fatal = false; - this.emit("packet", new Packets.EmptyPacket); - } - }; - Query.prototype["ResultSetHeaderPacket"] = function(packet) { - this._resultSet = new ResultSet(packet); - }; - Query.prototype["FieldPacket"] = function(packet) { - this._resultSet.fieldPackets.push(packet); - }; - Query.prototype["EofPacket"] = function(packet) { - this._resultSet.eofPackets.push(packet); - if (this._resultSet.eofPackets.length === 1 && !this._callback) { - this.emit("fields", this._resultSet.fieldPackets, this._index); - } - if (this._resultSet.eofPackets.length !== 2) { - return; - } - if (this._callback) { - this._results.push(this._resultSet.rows); - this._fields.push(this._resultSet.fieldPackets); - } - this._index++; - this._resultSet = null; - this._handleFinalResultPacket(packet); - }; - Query.prototype._handleFinalResultPacket = function(packet) { - if (packet.serverStatus & ServerStatus.SERVER_MORE_RESULTS_EXISTS) { - return; - } - var results = this._results.length > 1 ? this._results : this._results[0]; - var fields = this._fields.length > 1 ? this._fields : this._fields[0]; - this.end(this._loadError, results, fields); - }; - Query.prototype["RowDataPacket"] = function(packet, parser, connection) { - packet.parse(parser, this._resultSet.fieldPackets, this.typeCast, this.nestTables, connection); - if (this._callback) { - this._resultSet.rows.push(packet); - } else { - this.emit("result", packet, this._index); - } - }; - Query.prototype._sendLocalDataFile = function(path) { - var self2 = this; - var localStream = fs2.createReadStream(path, { - flag: "r", - encoding: null, - autoClose: true - }); - this.on("pause", function() { - localStream.pause(); - }); - this.on("resume", function() { - localStream.resume(); - }); - localStream.on("data", function(data) { - self2.emit("packet", new Packets.LocalDataFilePacket(data)); - }); - localStream.on("error", function(err) { - self2._loadError = err; - localStream.emit("end"); - }); - localStream.on("end", function() { - self2.emit("packet", new Packets.EmptyPacket); - }); - }; - Query.prototype.stream = function(options) { - var self2 = this; - options = options || {}; - options.objectMode = true; - var stream = new Readable(options); - stream._read = function() { - self2._connection && self2._connection.resume(); - }; - stream.once("end", function() { - process.nextTick(function() { - stream.emit("close"); - }); - }); - this.on("result", function(row, i) { - if (!stream.push(row)) - self2._connection.pause(); - stream.emit("result", row, i); - }); - this.on("error", function(err) { - stream.emit("error", err); - }); - this.on("end", function() { - stream.push(null); - }); - this.on("fields", function(fields, i) { - stream.emit("fields", fields, i); - }); - return stream; - }; -}); - -// node_modules/mysql/lib/protocol/sequences/Quit.js -var require_Quit = __commonJS((exports, module) => { - var Sequence = require_Sequence(); - var Util = __require("util"); - var Packets = require_packets(); - module.exports = Quit; - Util.inherits(Quit, Sequence); - function Quit(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - Sequence.call(this, options, callback); - this._started = false; - } - Quit.prototype.end = function end(err) { - if (this._ended) { - return; - } - if (!this._started) { - Sequence.prototype.end.call(this, err); - return; - } - if (err && err.code === "ECONNRESET" && err.syscall === "read") { - Sequence.prototype.end.call(this); - return; - } - Sequence.prototype.end.call(this, err); - }; - Quit.prototype.start = function() { - this._started = true; - this.emit("packet", new Packets.ComQuitPacket); - }; -}); - -// node_modules/mysql/lib/protocol/sequences/Statistics.js -var require_Statistics = __commonJS((exports, module) => { - var Sequence = require_Sequence(); - var Util = __require("util"); - var Packets = require_packets(); - module.exports = Statistics; - Util.inherits(Statistics, Sequence); - function Statistics(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - Sequence.call(this, options, callback); - } - Statistics.prototype.start = function() { - this.emit("packet", new Packets.ComStatisticsPacket); - }; - Statistics.prototype["StatisticsPacket"] = function(packet) { - this.end(null, packet); - }; - Statistics.prototype.determinePacket = function determinePacket(firstByte) { - if (firstByte === 85) { - return Packets.StatisticsPacket; - } - return; - }; -}); - -// node_modules/mysql/lib/protocol/sequences/index.js -var require_sequences = __commonJS((exports) => { - exports.ChangeUser = require_ChangeUser(); - exports.Handshake = require_Handshake(); - exports.Ping = require_Ping(); - exports.Query = require_Query(); - exports.Quit = require_Quit(); - exports.Sequence = require_Sequence(); - exports.Statistics = require_Statistics(); -}); - -// node_modules/mysql/lib/protocol/PacketWriter.js -var require_PacketWriter = __commonJS((exports, module) => { - var BIT_16 = Math.pow(2, 16); - var BIT_24 = Math.pow(2, 24); - var BUFFER_ALLOC_SIZE = Math.pow(2, 8); - var IEEE_754_BINARY_64_PRECISION = Math.pow(2, 53); - var MAX_PACKET_LENGTH = Math.pow(2, 24) - 1; - var Buffer2 = require_safe_buffer().Buffer; - module.exports = PacketWriter; - function PacketWriter() { - this._buffer = null; - this._offset = 0; - } - PacketWriter.prototype.toBuffer = function toBuffer(parser) { - if (!this._buffer) { - this._buffer = Buffer2.alloc(0); - this._offset = 0; - } - var buffer = this._buffer; - var length = this._offset; - var packets = Math.floor(length / MAX_PACKET_LENGTH) + 1; - this._buffer = Buffer2.allocUnsafe(length + packets * 4); - this._offset = 0; - for (var packet = 0;packet < packets; packet++) { - var isLast = packet + 1 === packets; - var packetLength = isLast ? length % MAX_PACKET_LENGTH : MAX_PACKET_LENGTH; - var packetNumber = parser.incrementPacketNumber(); - this.writeUnsignedNumber(3, packetLength); - this.writeUnsignedNumber(1, packetNumber); - var start = packet * MAX_PACKET_LENGTH; - var end = start + packetLength; - this.writeBuffer(buffer.slice(start, end)); - } - return this._buffer; - }; - PacketWriter.prototype.writeUnsignedNumber = function(bytes, value) { - this._allocate(bytes); - for (var i = 0;i < bytes; i++) { - this._buffer[this._offset++] = value >> i * 8 & 255; - } - }; - PacketWriter.prototype.writeFiller = function(bytes) { - this._allocate(bytes); - for (var i = 0;i < bytes; i++) { - this._buffer[this._offset++] = 0; - } - }; - PacketWriter.prototype.writeNullTerminatedString = function(value, encoding) { - value = value || ""; - value = value + ""; - var bytes = Buffer2.byteLength(value, encoding || "utf-8") + 1; - this._allocate(bytes); - this._buffer.write(value, this._offset, encoding); - this._buffer[this._offset + bytes - 1] = 0; - this._offset += bytes; - }; - PacketWriter.prototype.writeString = function(value) { - value = value || ""; - value = value + ""; - var bytes = Buffer2.byteLength(value, "utf-8"); - this._allocate(bytes); - this._buffer.write(value, this._offset, "utf-8"); - this._offset += bytes; - }; - PacketWriter.prototype.writeBuffer = function(value) { - var bytes = value.length; - this._allocate(bytes); - value.copy(this._buffer, this._offset); - this._offset += bytes; - }; - PacketWriter.prototype.writeLengthCodedNumber = function(value) { - if (value === null) { - this._allocate(1); - this._buffer[this._offset++] = 251; - return; - } - if (value <= 250) { - this._allocate(1); - this._buffer[this._offset++] = value; - return; - } - if (value > IEEE_754_BINARY_64_PRECISION) { - throw new Error("writeLengthCodedNumber: JS precision range exceeded, your " + 'number is > 53 bit: "' + value + '"'); - } - if (value < BIT_16) { - this._allocate(3); - this._buffer[this._offset++] = 252; - } else if (value < BIT_24) { - this._allocate(4); - this._buffer[this._offset++] = 253; - } else { - this._allocate(9); - this._buffer[this._offset++] = 254; - } - this._buffer[this._offset++] = value & 255; - this._buffer[this._offset++] = value >> 8 & 255; - if (value < BIT_16) { - return; - } - this._buffer[this._offset++] = value >> 16 & 255; - if (value < BIT_24) { - return; - } - this._buffer[this._offset++] = value >> 24 & 255; - value = value.toString(2); - value = value.substr(0, value.length - 32); - value = parseInt(value, 2); - this._buffer[this._offset++] = value & 255; - this._buffer[this._offset++] = value >> 8 & 255; - this._buffer[this._offset++] = value >> 16 & 255; - this._buffer[this._offset++] = 0; - }; - PacketWriter.prototype.writeLengthCodedBuffer = function(value) { - var bytes = value.length; - this.writeLengthCodedNumber(bytes); - this.writeBuffer(value); - }; - PacketWriter.prototype.writeNullTerminatedBuffer = function(value) { - this.writeBuffer(value); - this.writeFiller(1); - }; - PacketWriter.prototype.writeLengthCodedString = function(value) { - if (value === null) { - this.writeLengthCodedNumber(null); - return; - } - value = value === undefined ? "" : String(value); - var bytes = Buffer2.byteLength(value, "utf-8"); - this.writeLengthCodedNumber(bytes); - if (!bytes) { - return; - } - this._allocate(bytes); - this._buffer.write(value, this._offset, "utf-8"); - this._offset += bytes; - }; - PacketWriter.prototype._allocate = function _allocate(bytes) { - if (!this._buffer) { - this._buffer = Buffer2.alloc(Math.max(BUFFER_ALLOC_SIZE, bytes)); - this._offset = 0; - return; - } - var bytesRemaining = this._buffer.length - this._offset; - if (bytesRemaining >= bytes) { - return; - } - var newSize = this._buffer.length + Math.max(BUFFER_ALLOC_SIZE, bytes); - var oldBuffer = this._buffer; - this._buffer = Buffer2.alloc(newSize); - oldBuffer.copy(this._buffer); - }; -}); - -// node_modules/mysql/lib/protocol/Protocol.js -var require_Protocol = __commonJS((exports, module) => { - var Parser = require_Parser(); - var Sequences = require_sequences(); - var Packets = require_packets(); - var Stream = __require("stream").Stream; - var Util = __require("util"); - var PacketWriter = require_PacketWriter(); - module.exports = Protocol; - Util.inherits(Protocol, Stream); - function Protocol(options) { - Stream.call(this); - options = options || {}; - this.readable = true; - this.writable = true; - this._config = options.config || {}; - this._connection = options.connection; - this._callback = null; - this._fatalError = null; - this._quitSequence = null; - this._handshake = false; - this._handshaked = false; - this._ended = false; - this._destroyed = false; - this._queue = []; - this._handshakeInitializationPacket = null; - this._parser = new Parser({ - onError: this.handleParserError.bind(this), - onPacket: this._parsePacket.bind(this), - config: this._config - }); - } - Protocol.prototype.write = function(buffer) { - this._parser.write(buffer); - return true; - }; - Protocol.prototype.handshake = function handshake(options, callback) { - if (typeof options === "function") { - callback = options; - options = {}; - } - options = options || {}; - options.config = this._config; - var sequence = this._enqueue(new Sequences.Handshake(options, callback)); - this._handshake = true; - return sequence; - }; - Protocol.prototype.query = function query(options, callback) { - return this._enqueue(new Sequences.Query(options, callback)); - }; - Protocol.prototype.changeUser = function changeUser(options, callback) { - return this._enqueue(new Sequences.ChangeUser(options, callback)); - }; - Protocol.prototype.ping = function ping(options, callback) { - if (typeof options === "function") { - callback = options; - options = {}; - } - return this._enqueue(new Sequences.Ping(options, callback)); - }; - Protocol.prototype.stats = function stats(options, callback) { - if (typeof options === "function") { - callback = options; - options = {}; - } - return this._enqueue(new Sequences.Statistics(options, callback)); - }; - Protocol.prototype.quit = function quit(options, callback) { - if (typeof options === "function") { - callback = options; - options = {}; - } - var self2 = this; - var sequence = this._enqueue(new Sequences.Quit(options, callback)); - sequence.on("end", function() { - self2.end(); - }); - return this._quitSequence = sequence; - }; - Protocol.prototype.end = function() { - if (this._ended) { - return; - } - this._ended = true; - if (this._quitSequence && (this._quitSequence._ended || this._queue[0] === this._quitSequence)) { - this._quitSequence.end(); - this.emit("end"); - return; - } - var err = new Error("Connection lost: The server closed the connection."); - err.fatal = true; - err.code = "PROTOCOL_CONNECTION_LOST"; - this._delegateError(err); - }; - Protocol.prototype.pause = function() { - this._parser.pause(); - var seq = this._queue[0]; - if (seq && seq.emit) { - seq.emit("pause"); - } - }; - Protocol.prototype.resume = function() { - this._parser.resume(); - var seq = this._queue[0]; - if (seq && seq.emit) { - seq.emit("resume"); - } - }; - Protocol.prototype._enqueue = function(sequence) { - if (!this._validateEnqueue(sequence)) { - return sequence; - } - if (this._config.trace) { - sequence._callSite = sequence._callSite || new Error; - } - this._queue.push(sequence); - this.emit("enqueue", sequence); - var self2 = this; - sequence.on("error", function(err) { - self2._delegateError(err, sequence); - }).on("packet", function(packet) { - sequence._timer.active(); - self2._emitPacket(packet); - }).on("timeout", function() { - var err = new Error(sequence.constructor.name + " inactivity timeout"); - err.code = "PROTOCOL_SEQUENCE_TIMEOUT"; - err.fatal = true; - err.timeout = sequence._timeout; - self2._delegateError(err, sequence); - }); - if (sequence.constructor === Sequences.Handshake) { - sequence.on("start-tls", function() { - sequence._timer.active(); - self2._connection._startTLS(function(err) { - if (err) { - err.code = "HANDSHAKE_SSL_ERROR"; - err.fatal = true; - sequence.end(err); - return; - } - sequence._timer.active(); - sequence._tlsUpgradeCompleteHandler(); - }); - }); - sequence.on("end", function() { - self2._handshaked = true; - if (!self2._fatalError) { - self2.emit("handshake", self2._handshakeInitializationPacket); - } - }); - } - sequence.on("end", function() { - self2._dequeue(sequence); - }); - if (this._queue.length === 1) { - this._parser.resetPacketNumber(); - this._startSequence(sequence); - } - return sequence; - }; - Protocol.prototype._validateEnqueue = function _validateEnqueue(sequence) { - var err; - var prefix = "Cannot enqueue " + sequence.constructor.name; - if (this._fatalError) { - err = new Error(prefix + " after fatal error."); - err.code = "PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR"; - } else if (this._quitSequence) { - err = new Error(prefix + " after invoking quit."); - err.code = "PROTOCOL_ENQUEUE_AFTER_QUIT"; - } else if (this._destroyed) { - err = new Error(prefix + " after being destroyed."); - err.code = "PROTOCOL_ENQUEUE_AFTER_DESTROY"; - } else if ((this._handshake || this._handshaked) && sequence.constructor === Sequences.Handshake) { - err = new Error(prefix + " after already enqueuing a Handshake."); - err.code = "PROTOCOL_ENQUEUE_HANDSHAKE_TWICE"; - } else { - return true; - } - var self2 = this; - err.fatal = false; - sequence.on("error", function(err2) { - self2._delegateError(err2, sequence); - }); - process.nextTick(function() { - sequence.end(err); - }); - return false; - }; - Protocol.prototype._parsePacket = function() { - var sequence = this._queue[0]; - if (!sequence) { - var err = new Error("Received packet with no active sequence."); - err.code = "PROTOCOL_STRAY_PACKET"; - err.fatal = true; - this._delegateError(err); - return; - } - var Packet = this._determinePacket(sequence); - var packet = new Packet({ protocol41: this._config.protocol41 }); - var packetName = Packet.name; - if (Packet === Packets.RowDataPacket) { - sequence.RowDataPacket(packet, this._parser, this._connection); - if (this._config.debug) { - this._debugPacket(true, packet); - } - return; - } - if (this._config.debug) { - this._parsePacketDebug(packet); - } else { - packet.parse(this._parser); - } - if (Packet === Packets.HandshakeInitializationPacket) { - this._handshakeInitializationPacket = packet; - this.emit("initialize", packet); - } - sequence._timer.active(); - if (!sequence[packetName]) { - var err = new Error("Received packet in the wrong sequence."); - err.code = "PROTOCOL_INCORRECT_PACKET_SEQUENCE"; - err.fatal = true; - this._delegateError(err); - return; - } - sequence[packetName](packet); - }; - Protocol.prototype._parsePacketDebug = function _parsePacketDebug(packet) { - try { - packet.parse(this._parser); - } finally { - this._debugPacket(true, packet); - } - }; - Protocol.prototype._emitPacket = function(packet) { - var packetWriter = new PacketWriter; - packet.write(packetWriter); - this.emit("data", packetWriter.toBuffer(this._parser)); - if (this._config.debug) { - this._debugPacket(false, packet); - } - }; - Protocol.prototype._determinePacket = function(sequence) { - var firstByte = this._parser.peak(); - if (sequence.determinePacket) { - var Packet = sequence.determinePacket(firstByte, this._parser); - if (Packet) { - return Packet; - } - } - switch (firstByte) { - case 0: - return Packets.OkPacket; - case 254: - return Packets.EofPacket; - case 255: - return Packets.ErrorPacket; - } - throw new Error("Could not determine packet, firstByte = " + firstByte); - }; - Protocol.prototype._dequeue = function(sequence) { - sequence._timer.stop(); - if (this._fatalError) { - return; - } - this._queue.shift(); - var sequence = this._queue[0]; - if (!sequence) { - this.emit("drain"); - return; - } - this._parser.resetPacketNumber(); - this._startSequence(sequence); - }; - Protocol.prototype._startSequence = function(sequence) { - if (sequence._timeout > 0 && isFinite(sequence._timeout)) { - sequence._timer.start(sequence._timeout); - } - if (sequence.constructor === Sequences.ChangeUser) { - sequence.start(this._handshakeInitializationPacket); - } else { - sequence.start(); - } - }; - Protocol.prototype.handleNetworkError = function(err) { - err.fatal = true; - var sequence = this._queue[0]; - if (sequence) { - sequence.end(err); - } else { - this._delegateError(err); - } - }; - Protocol.prototype.handleParserError = function handleParserError(err) { - var sequence = this._queue[0]; - if (sequence) { - sequence.end(err); - } else { - this._delegateError(err); - } - }; - Protocol.prototype._delegateError = function(err, sequence) { - if (this._fatalError) { - return; - } - if (err.fatal) { - this._fatalError = err; - } - if (this._shouldErrorBubbleUp(err, sequence)) { - this.emit("unhandledError", err); - } else if (err.fatal) { - var queue = this._queue; - process.nextTick(function() { - queue.forEach(function(sequence2) { - sequence2.end(err); - }); - queue.length = 0; - }); - } - if (err.fatal) { - this.emit("end", err); - } - }; - Protocol.prototype._shouldErrorBubbleUp = function(err, sequence) { - if (sequence) { - if (sequence.hasErrorHandler()) { - return false; - } else if (!err.fatal) { - return true; - } - } - return err.fatal && !this._hasPendingErrorHandlers(); - }; - Protocol.prototype._hasPendingErrorHandlers = function() { - return this._queue.some(function(sequence) { - return sequence.hasErrorHandler(); - }); - }; - Protocol.prototype.destroy = function() { - this._destroyed = true; - this._parser.pause(); - if (this._connection.state !== "disconnected") { - if (!this._ended) { - this.end(); - } - } - }; - Protocol.prototype._debugPacket = function(incoming, packet) { - var connection = this._connection; - var direction = incoming ? "<--" : "-->"; - var packetName = packet.constructor.name; - var threadId = connection && connection.threadId !== null ? " (" + connection.threadId + ")" : ""; - if (Array.isArray(this._config.debug) && this._config.debug.indexOf(packetName) === -1) { - return; - } - var packetPayload = Util.inspect(packet).replace(/^[^{]+/, ""); - console.log("%s%s %s %s\n", direction, threadId, packetName, packetPayload); - }; -}); - -// node_modules/sqlstring/lib/SqlString.js -var require_SqlString = __commonJS((exports) => { - var SqlString = exports; - var ID_GLOBAL_REGEXP = /`/g; - var QUAL_GLOBAL_REGEXP = /\./g; - var CHARS_GLOBAL_REGEXP = /[\0\b\t\n\r\x1a\"\'\\]/g; - var CHARS_ESCAPE_MAP = { - "\0": "\\0", - "\b": "\\b", - "\t": "\\t", - "\n": "\\n", - "\r": "\\r", - "\x1A": "\\Z", - '"': '\\"', - "\'": "\\\'", - "\\": "\\\\" - }; - SqlString.escapeId = function escapeId(val, forbidQualified) { - if (Array.isArray(val)) { - var sql = ""; - for (var i = 0;i < val.length; i++) { - sql += (i === 0 ? "" : ", ") + SqlString.escapeId(val[i], forbidQualified); - } - return sql; - } else if (forbidQualified) { - return "`" + String(val).replace(ID_GLOBAL_REGEXP, "``") + "`"; - } else { - return "`" + String(val).replace(ID_GLOBAL_REGEXP, "``").replace(QUAL_GLOBAL_REGEXP, "`.`") + "`"; - } - }; - SqlString.escape = function escape(val, stringifyObjects, timeZone) { - if (val === undefined || val === null) { - return "NULL"; - } - switch (typeof val) { - case "boolean": - return val ? "true" : "false"; - case "number": - return val + ""; - case "object": - if (val instanceof Date) { - return SqlString.dateToString(val, timeZone || "local"); - } else if (Array.isArray(val)) { - return SqlString.arrayToList(val, timeZone); - } else if (Buffer.isBuffer(val)) { - return SqlString.bufferToString(val); - } else if (typeof val.toSqlString === "function") { - return String(val.toSqlString()); - } else if (stringifyObjects) { - return escapeString(val.toString()); - } else { - return SqlString.objectToValues(val, timeZone); - } - default: - return escapeString(val); - } - }; - SqlString.arrayToList = function arrayToList(array, timeZone) { - var sql = ""; - for (var i = 0;i < array.length; i++) { - var val = array[i]; - if (Array.isArray(val)) { - sql += (i === 0 ? "" : ", ") + "(" + SqlString.arrayToList(val, timeZone) + ")"; - } else { - sql += (i === 0 ? "" : ", ") + SqlString.escape(val, true, timeZone); - } - } - return sql; - }; - SqlString.format = function format(sql, values, stringifyObjects, timeZone) { - if (values == null) { - return sql; - } - if (!(values instanceof Array || Array.isArray(values))) { - values = [values]; - } - var chunkIndex = 0; - var placeholdersRegex = /\?+/g; - var result = ""; - var valuesIndex = 0; - var match; - while (valuesIndex < values.length && (match = placeholdersRegex.exec(sql))) { - var len = match[0].length; - if (len > 2) { - continue; - } - var value = len === 2 ? SqlString.escapeId(values[valuesIndex]) : SqlString.escape(values[valuesIndex], stringifyObjects, timeZone); - result += sql.slice(chunkIndex, match.index) + value; - chunkIndex = placeholdersRegex.lastIndex; - valuesIndex++; - } - if (chunkIndex === 0) { - return sql; - } - if (chunkIndex < sql.length) { - return result + sql.slice(chunkIndex); - } - return result; - }; - SqlString.dateToString = function dateToString(date, timeZone) { - var dt = new Date(date); - if (isNaN(dt.getTime())) { - return "NULL"; - } - var year; - var month; - var day; - var hour; - var minute; - var second; - var millisecond; - if (timeZone === "local") { - year = dt.getFullYear(); - month = dt.getMonth() + 1; - day = dt.getDate(); - hour = dt.getHours(); - minute = dt.getMinutes(); - second = dt.getSeconds(); - millisecond = dt.getMilliseconds(); - } else { - var tz = convertTimezone(timeZone); - if (tz !== false && tz !== 0) { - dt.setTime(dt.getTime() + tz * 60000); - } - year = dt.getUTCFullYear(); - month = dt.getUTCMonth() + 1; - day = dt.getUTCDate(); - hour = dt.getUTCHours(); - minute = dt.getUTCMinutes(); - second = dt.getUTCSeconds(); - millisecond = dt.getUTCMilliseconds(); - } - var str = zeroPad(year, 4) + "-" + zeroPad(month, 2) + "-" + zeroPad(day, 2) + " " + zeroPad(hour, 2) + ":" + zeroPad(minute, 2) + ":" + zeroPad(second, 2) + "." + zeroPad(millisecond, 3); - return escapeString(str); - }; - SqlString.bufferToString = function bufferToString(buffer) { - return "X" + escapeString(buffer.toString("hex")); - }; - SqlString.objectToValues = function objectToValues(object, timeZone) { - var sql = ""; - for (var key in object) { - var val = object[key]; - if (typeof val === "function") { - continue; - } - sql += (sql.length === 0 ? "" : ", ") + SqlString.escapeId(key) + " = " + SqlString.escape(val, true, timeZone); - } - return sql; - }; - SqlString.raw = function raw(sql) { - if (typeof sql !== "string") { - throw new TypeError("argument sql must be a string"); - } - return { - toSqlString: function toSqlString() { - return sql; - } - }; - }; - function escapeString(val) { - var chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex = 0; - var escapedVal = ""; - var match; - while (match = CHARS_GLOBAL_REGEXP.exec(val)) { - escapedVal += val.slice(chunkIndex, match.index) + CHARS_ESCAPE_MAP[match[0]]; - chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex; - } - if (chunkIndex === 0) { - return "'" + val + "'"; - } - if (chunkIndex < val.length) { - return "'" + escapedVal + val.slice(chunkIndex) + "'"; - } - return "'" + escapedVal + "'"; - } - function zeroPad(number, length) { - number = number.toString(); - while (number.length < length) { - number = "0" + number; - } - return number; - } - function convertTimezone(tz) { - if (tz === "Z") { - return 0; - } - var m = tz.match(/([\+\-\s])(\d\d):?(\d\d)?/); - if (m) { - return (m[1] === "-" ? -1 : 1) * (parseInt(m[2], 10) + (m[3] ? parseInt(m[3], 10) : 0) / 60) * 60; - } - return false; - } -}); - -// node_modules/mysql/lib/Connection.js -var require_Connection = __commonJS((exports, module) => { - var Crypto = __require("crypto"); - var Events = __require("events"); - var Net = __require("net"); - var tls = __require("tls"); - var ConnectionConfig = require_ConnectionConfig(); - var Protocol = require_Protocol(); - var SqlString = require_SqlString(); - var Query = require_Query(); - var Util = __require("util"); - module.exports = Connection; - Util.inherits(Connection, Events.EventEmitter); - function Connection(options) { - Events.EventEmitter.call(this); - this.config = options.config; - this._socket = options.socket; - this._protocol = new Protocol({ config: this.config, connection: this }); - this._connectCalled = false; - this.state = "disconnected"; - this.threadId = null; - } - Connection.createQuery = function createQuery(sql, values, callback) { - if (sql instanceof Query) { - return sql; - } - var cb = callback; - var options = {}; - if (typeof sql === "function") { - cb = sql; - } else if (typeof sql === "object") { - options = Object.create(sql); - if (typeof values === "function") { - cb = values; - } else if (values !== undefined) { - Object.defineProperty(options, "values", { value: values }); - } - } else { - options.sql = sql; - if (typeof values === "function") { - cb = values; - } else if (values !== undefined) { - options.values = values; - } - } - if (cb !== undefined) { - cb = wrapCallbackInDomain(null, cb); - if (cb === undefined) { - throw new TypeError("argument callback must be a function when provided"); - } - } - return new Query(options, cb); - }; - Connection.prototype.connect = function connect(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - if (!this._connectCalled) { - this._connectCalled = true; - this._socket = this.config.socketPath ? Net.createConnection(this.config.socketPath) : Net.createConnection(this.config.port, this.config.host); - if (Events.usingDomains) { - this._socket.domain = this.domain; - } - var connection = this; - this._protocol.on("data", function(data) { - connection._socket.write(data); - }); - this._socket.on("data", wrapToDomain(connection, function(data) { - connection._protocol.write(data); - })); - this._protocol.on("end", function() { - connection._socket.end(); - }); - this._socket.on("end", wrapToDomain(connection, function() { - connection._protocol.end(); - })); - this._socket.on("error", this._handleNetworkError.bind(this)); - this._socket.on("connect", this._handleProtocolConnect.bind(this)); - this._protocol.on("handshake", this._handleProtocolHandshake.bind(this)); - this._protocol.on("initialize", this._handleProtocolInitialize.bind(this)); - this._protocol.on("unhandledError", this._handleProtocolError.bind(this)); - this._protocol.on("drain", this._handleProtocolDrain.bind(this)); - this._protocol.on("end", this._handleProtocolEnd.bind(this)); - this._protocol.on("enqueue", this._handleProtocolEnqueue.bind(this)); - if (this.config.connectTimeout) { - var handleConnectTimeout = this._handleConnectTimeout.bind(this); - this._socket.setTimeout(this.config.connectTimeout, handleConnectTimeout); - this._socket.once("connect", function() { - this.setTimeout(0, handleConnectTimeout); - }); - } - } - this._protocol.handshake(options, wrapCallbackInDomain(this, callback)); - }; - Connection.prototype.changeUser = function changeUser(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - this._implyConnect(); - var charsetNumber = options.charset ? ConnectionConfig.getCharsetNumber(options.charset) : this.config.charsetNumber; - return this._protocol.changeUser({ - user: options.user || this.config.user, - password: options.password || this.config.password, - database: options.database || this.config.database, - timeout: options.timeout, - charsetNumber, - currentConfig: this.config - }, wrapCallbackInDomain(this, callback)); - }; - Connection.prototype.beginTransaction = function beginTransaction(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - options = options || {}; - options.sql = "START TRANSACTION"; - options.values = null; - return this.query(options, callback); - }; - Connection.prototype.commit = function commit(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - options = options || {}; - options.sql = "COMMIT"; - options.values = null; - return this.query(options, callback); - }; - Connection.prototype.rollback = function rollback(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - options = options || {}; - options.sql = "ROLLBACK"; - options.values = null; - return this.query(options, callback); - }; - Connection.prototype.query = function query(sql, values, cb) { - var query = Connection.createQuery(sql, values, cb); - query._connection = this; - if (!(typeof sql === "object" && ("typeCast" in sql))) { - query.typeCast = this.config.typeCast; - } - if (query.sql) { - query.sql = this.format(query.sql, query.values); - } - if (query._callback) { - query._callback = wrapCallbackInDomain(this, query._callback); - } - this._implyConnect(); - return this._protocol._enqueue(query); - }; - Connection.prototype.ping = function ping(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - this._implyConnect(); - this._protocol.ping(options, wrapCallbackInDomain(this, callback)); - }; - Connection.prototype.statistics = function statistics(options, callback) { - if (!callback && typeof options === "function") { - callback = options; - options = {}; - } - this._implyConnect(); - this._protocol.stats(options, wrapCallbackInDomain(this, callback)); - }; - Connection.prototype.end = function end(options, callback) { - var cb = callback; - var opts = options; - if (!callback && typeof options === "function") { - cb = options; - opts = null; - } - opts = Object.create(opts || null); - if (opts.timeout === undefined) { - opts.timeout = 30000; - } - this._implyConnect(); - this._protocol.quit(opts, wrapCallbackInDomain(this, cb)); - }; - Connection.prototype.destroy = function() { - this.state = "disconnected"; - this._implyConnect(); - this._socket.destroy(); - this._protocol.destroy(); - }; - Connection.prototype.pause = function() { - this._socket.pause(); - this._protocol.pause(); - }; - Connection.prototype.resume = function() { - this._socket.resume(); - this._protocol.resume(); - }; - Connection.prototype.escape = function(value) { - return SqlString.escape(value, false, this.config.timezone); - }; - Connection.prototype.escapeId = function escapeId(value) { - return SqlString.escapeId(value, false); - }; - Connection.prototype.format = function(sql, values) { - if (typeof this.config.queryFormat === "function") { - return this.config.queryFormat.call(this, sql, values, this.config.timezone); - } - return SqlString.format(sql, values, this.config.stringifyObjects, this.config.timezone); - }; - if (tls.TLSSocket) { - Connection.prototype._startTLS = function _startTLS(onSecure) { - var connection = this; - createSecureContext(this.config, function(err, secureContext) { - if (err) { - onSecure(err); - return; - } - connection._socket.removeAllListeners("data"); - connection._protocol.removeAllListeners("data"); - var rejectUnauthorized = connection.config.ssl.rejectUnauthorized; - var secureEstablished = false; - var secureSocket = new tls.TLSSocket(connection._socket, { - rejectUnauthorized, - requestCert: true, - secureContext, - isServer: false - }); - secureSocket.on("_tlsError", function(err2) { - if (secureEstablished) { - connection._handleNetworkError(err2); - } else { - onSecure(err2); - } - }); - secureSocket.pipe(connection._protocol); - connection._protocol.on("data", function(data) { - secureSocket.write(data); - }); - secureSocket.on("secure", function() { - secureEstablished = true; - onSecure(rejectUnauthorized ? this.ssl.verifyError() : null); - }); - secureSocket._start(); - }); - }; - } else { - Connection.prototype._startTLS = function _startTLS(onSecure) { - var connection = this; - var credentials = Crypto.createCredentials({ - ca: this.config.ssl.ca, - cert: this.config.ssl.cert, - ciphers: this.config.ssl.ciphers, - key: this.config.ssl.key, - passphrase: this.config.ssl.passphrase - }); - var rejectUnauthorized = this.config.ssl.rejectUnauthorized; - var secureEstablished = false; - var securePair = tls.createSecurePair(credentials, false, true, rejectUnauthorized); - securePair.on("error", function(err) { - if (secureEstablished) { - connection._handleNetworkError(err); - } else { - onSecure(err); - } - }); - this._socket.removeAllListeners("data"); - this._protocol.removeAllListeners("data"); - securePair.encrypted.pipe(this._socket); - this._socket.on("data", function(data) { - securePair.encrypted.write(data); - }); - securePair.cleartext.pipe(this._protocol); - this._protocol.on("data", function(data) { - securePair.cleartext.write(data); - }); - securePair.on("secure", function() { - secureEstablished = true; - if (!rejectUnauthorized) { - onSecure(); - return; - } - var verifyError = this.ssl.verifyError(); - var err = verifyError; - if (typeof err === "string") { - err = new Error(verifyError); - err.code = verifyError; - } - onSecure(err); - }); - securePair._cycle = securePair.cycle; - securePair.cycle = function cycle() { - if (this.ssl && this.ssl.error) { - this.error(); - } - return this._cycle.apply(this, arguments); - }; - }; - } - Connection.prototype._handleConnectTimeout = function() { - if (this._socket) { - this._socket.setTimeout(0); - this._socket.destroy(); - } - var err = new Error("connect ETIMEDOUT"); - err.errorno = "ETIMEDOUT"; - err.code = "ETIMEDOUT"; - err.syscall = "connect"; - this._handleNetworkError(err); - }; - Connection.prototype._handleNetworkError = function(err) { - this._protocol.handleNetworkError(err); - }; - Connection.prototype._handleProtocolError = function(err) { - this.state = "protocol_error"; - this.emit("error", err); - }; - Connection.prototype._handleProtocolDrain = function() { - this.emit("drain"); - }; - Connection.prototype._handleProtocolConnect = function() { - this.state = "connected"; - this.emit("connect"); - }; - Connection.prototype._handleProtocolHandshake = function _handleProtocolHandshake() { - this.state = "authenticated"; - }; - Connection.prototype._handleProtocolInitialize = function _handleProtocolInitialize(packet) { - this.threadId = packet.threadId; - }; - Connection.prototype._handleProtocolEnd = function(err) { - this.state = "disconnected"; - this.emit("end", err); - }; - Connection.prototype._handleProtocolEnqueue = function _handleProtocolEnqueue(sequence) { - this.emit("enqueue", sequence); - }; - Connection.prototype._implyConnect = function() { - if (!this._connectCalled) { - this.connect(); - } - }; - function createSecureContext(config, cb) { - var context = null; - var error = null; - try { - context = tls.createSecureContext({ - ca: config.ssl.ca, - cert: config.ssl.cert, - ciphers: config.ssl.ciphers, - key: config.ssl.key, - passphrase: config.ssl.passphrase - }); - } catch (err) { - error = err; - } - cb(error, context); - } - function unwrapFromDomain(fn) { - return function() { - var domains = []; - var ret; - while (process.domain) { - domains.shift(process.domain); - process.domain.exit(); - } - try { - ret = fn.apply(this, arguments); - } finally { - for (var i = 0;i < domains.length; i++) { - domains[i].enter(); - } - } - return ret; - }; - } - function wrapCallbackInDomain(ee, fn) { - if (typeof fn !== "function") { - return; - } - if (fn.domain) { - return fn; - } - var domain = process.domain; - if (domain) { - return domain.bind(fn); - } else if (ee) { - return unwrapFromDomain(wrapToDomain(ee, fn)); - } else { - return fn; - } - } - function wrapToDomain(ee, fn) { - return function() { - if (Events.usingDomains && ee.domain) { - ee.domain.enter(); - fn.apply(this, arguments); - ee.domain.exit(); - } else { - fn.apply(this, arguments); - } - }; - } -}); - -// node_modules/mysql/lib/PoolConnection.js -var require_PoolConnection = __commonJS((exports, module) => { - var inherits = __require("util").inherits; - var Connection = require_Connection(); - var Events = __require("events"); - module.exports = PoolConnection; - inherits(PoolConnection, Connection); - function PoolConnection(pool, options) { - Connection.call(this, options); - this._pool = pool; - if (Events.usingDomains) { - this.domain = pool.domain; - } - this.on("end", this._removeFromPool); - this.on("error", function(err) { - if (err.fatal) { - this._removeFromPool(); - } - }); - } - PoolConnection.prototype.release = function release() { - var pool = this._pool; - if (!pool || pool._closed) { - return; - } - return pool.releaseConnection(this); - }; - PoolConnection.prototype._realEnd = Connection.prototype.end; - PoolConnection.prototype.end = function() { - console.warn("Calling conn.end() to release a pooled connection is " + "deprecated. In next version calling conn.end() will be " + "restored to default conn.end() behavior. Use " + "conn.release() instead."); - this.release(); - }; - PoolConnection.prototype.destroy = function() { - Connection.prototype.destroy.apply(this, arguments); - this._removeFromPool(this); - }; - PoolConnection.prototype._removeFromPool = function _removeFromPool() { - if (!this._pool || this._pool._closed) { - return; - } - var pool = this._pool; - this._pool = null; - pool._purgeConnection(this); - }; -}); - -// node_modules/mysql/lib/Pool.js -var require_Pool = __commonJS((exports, module) => { - var mysql = require_mysql(); - var Connection = require_Connection(); - var EventEmitter = __require("events").EventEmitter; - var Util = __require("util"); - var PoolConnection = require_PoolConnection(); - module.exports = Pool; - Util.inherits(Pool, EventEmitter); - function Pool(options) { - EventEmitter.call(this); - this.config = options.config; - this.config.connectionConfig.pool = this; - this._acquiringConnections = []; - this._allConnections = []; - this._freeConnections = []; - this._connectionQueue = []; - this._closed = false; - } - Pool.prototype.getConnection = function(cb) { - if (this._closed) { - var err = new Error("Pool is closed."); - err.code = "POOL_CLOSED"; - process.nextTick(function() { - cb(err); - }); - return; - } - var connection; - var pool = this; - if (this._freeConnections.length > 0) { - connection = this._freeConnections.shift(); - this.acquireConnection(connection, cb); - return; - } - if (this.config.connectionLimit === 0 || this._allConnections.length < this.config.connectionLimit) { - connection = new PoolConnection(this, { config: this.config.newConnectionConfig() }); - this._acquiringConnections.push(connection); - this._allConnections.push(connection); - connection.connect({ timeout: this.config.acquireTimeout }, function onConnect(err2) { - spliceConnection(pool._acquiringConnections, connection); - if (pool._closed) { - err2 = new Error("Pool is closed."); - err2.code = "POOL_CLOSED"; - } - if (err2) { - pool._purgeConnection(connection); - cb(err2); - return; - } - pool.emit("connection", connection); - pool.emit("acquire", connection); - cb(null, connection); - }); - return; - } - if (!this.config.waitForConnections) { - process.nextTick(function() { - var err2 = new Error("No connections available."); - err2.code = "POOL_CONNLIMIT"; - cb(err2); - }); - return; - } - this._enqueueCallback(cb); - }; - Pool.prototype.acquireConnection = function acquireConnection(connection, cb) { - if (connection._pool !== this) { - throw new Error("Connection acquired from wrong pool."); - } - var changeUser = this._needsChangeUser(connection); - var pool = this; - this._acquiringConnections.push(connection); - function onOperationComplete(err) { - spliceConnection(pool._acquiringConnections, connection); - if (pool._closed) { - err = new Error("Pool is closed."); - err.code = "POOL_CLOSED"; - } - if (err) { - pool._connectionQueue.unshift(cb); - pool._purgeConnection(connection); - return; - } - if (changeUser) { - pool.emit("connection", connection); - } - pool.emit("acquire", connection); - cb(null, connection); - } - if (changeUser) { - connection.config = this.config.newConnectionConfig(); - connection.changeUser({ timeout: this.config.acquireTimeout }, onOperationComplete); - } else { - connection.ping({ timeout: this.config.acquireTimeout }, onOperationComplete); - } - }; - Pool.prototype.releaseConnection = function releaseConnection(connection) { - if (this._acquiringConnections.indexOf(connection) !== -1) { - return; - } - if (connection._pool) { - if (connection._pool !== this) { - throw new Error("Connection released to wrong pool"); - } - if (this._freeConnections.indexOf(connection) !== -1) { - throw new Error("Connection already released"); - } else { - this._freeConnections.push(connection); - this.emit("release", connection); - } - } - if (this._closed) { - this._connectionQueue.splice(0).forEach(function(cb) { - var err = new Error("Pool is closed."); - err.code = "POOL_CLOSED"; - process.nextTick(function() { - cb(err); - }); - }); - } else if (this._connectionQueue.length) { - this.getConnection(this._connectionQueue.shift()); - } - }; - Pool.prototype.end = function(cb) { - this._closed = true; - if (typeof cb !== "function") { - cb = function(err) { - if (err) - throw err; - }; - } - var calledBack = false; - var waitingClose = 0; - function onEnd(err) { - if (!calledBack && (err || --waitingClose <= 0)) { - calledBack = true; - cb(err); - } - } - while (this._allConnections.length !== 0) { - waitingClose++; - this._purgeConnection(this._allConnections[0], onEnd); - } - if (waitingClose === 0) { - process.nextTick(onEnd); - } - }; - Pool.prototype.query = function(sql, values, cb) { - var query = Connection.createQuery(sql, values, cb); - if (!(typeof sql === "object" && ("typeCast" in sql))) { - query.typeCast = this.config.connectionConfig.typeCast; - } - if (this.config.connectionConfig.trace) { - query._callSite = new Error; - } - this.getConnection(function(err, conn) { - if (err) { - query.on("error", function() { - }); - query.end(err); - return; - } - query.once("end", function() { - conn.release(); - }); - conn.query(query); - }); - return query; - }; - Pool.prototype._enqueueCallback = function _enqueueCallback(callback) { - if (this.config.queueLimit && this._connectionQueue.length >= this.config.queueLimit) { - process.nextTick(function() { - var err = new Error("Queue limit reached."); - err.code = "POOL_ENQUEUELIMIT"; - callback(err); - }); - return; - } - var cb = process.domain ? process.domain.bind(callback) : callback; - this._connectionQueue.push(cb); - this.emit("enqueue"); - }; - Pool.prototype._needsChangeUser = function _needsChangeUser(connection) { - var connConfig = connection.config; - var poolConfig = this.config.connectionConfig; - return connConfig.user !== poolConfig.user || connConfig.database !== poolConfig.database || connConfig.password !== poolConfig.password || connConfig.charsetNumber !== poolConfig.charsetNumber; - }; - Pool.prototype._purgeConnection = function _purgeConnection(connection, callback) { - var cb = callback || function() { - }; - if (connection.state === "disconnected") { - connection.destroy(); - } - this._removeConnection(connection); - if (connection.state !== "disconnected" && !connection._protocol._quitSequence) { - connection._realEnd(cb); - return; - } - process.nextTick(cb); - }; - Pool.prototype._removeConnection = function(connection) { - connection._pool = null; - spliceConnection(this._allConnections, connection); - spliceConnection(this._freeConnections, connection); - this.releaseConnection(connection); - }; - Pool.prototype.escape = function(value) { - return mysql.escape(value, this.config.connectionConfig.stringifyObjects, this.config.connectionConfig.timezone); - }; - Pool.prototype.escapeId = function escapeId(value) { - return mysql.escapeId(value, false); - }; - function spliceConnection(array, connection) { - var index; - if ((index = array.indexOf(connection)) !== -1) { - array.splice(index, 1); - } - } -}); - -// node_modules/mysql/lib/PoolConfig.js -var require_PoolConfig = __commonJS((exports, module) => { - var ConnectionConfig = require_ConnectionConfig(); - module.exports = PoolConfig; - function PoolConfig(options) { - if (typeof options === "string") { - options = ConnectionConfig.parseUrl(options); - } - this.acquireTimeout = options.acquireTimeout === undefined ? 10 * 1000 : Number(options.acquireTimeout); - this.connectionConfig = new ConnectionConfig(options); - this.waitForConnections = options.waitForConnections === undefined ? true : Boolean(options.waitForConnections); - this.connectionLimit = options.connectionLimit === undefined ? 10 : Number(options.connectionLimit); - this.queueLimit = options.queueLimit === undefined ? 0 : Number(options.queueLimit); - } - PoolConfig.prototype.newConnectionConfig = function newConnectionConfig() { - var connectionConfig = new ConnectionConfig(this.connectionConfig); - connectionConfig.clientFlags = this.connectionConfig.clientFlags; - connectionConfig.maxPacketSize = this.connectionConfig.maxPacketSize; - return connectionConfig; - }; -}); - -// node_modules/mysql/lib/PoolSelector.js -var require_PoolSelector = __commonJS((exports, module) => { - var PoolSelector = module.exports = {}; - PoolSelector.RR = function PoolSelectorRoundRobin() { - var index = 0; - return function(clusterIds) { - if (index >= clusterIds.length) { - index = 0; - } - var clusterId = clusterIds[index++]; - return clusterId; - }; - }; - PoolSelector.RANDOM = function PoolSelectorRandom() { - return function(clusterIds) { - return clusterIds[Math.floor(Math.random() * clusterIds.length)]; - }; - }; - PoolSelector.ORDER = function PoolSelectorOrder() { - return function(clusterIds) { - return clusterIds[0]; - }; - }; -}); - -// node_modules/mysql/lib/PoolNamespace.js -var require_PoolNamespace = __commonJS((exports, module) => { - var Connection = require_Connection(); - var PoolSelector = require_PoolSelector(); - module.exports = PoolNamespace; - function PoolNamespace(cluster, pattern, selector) { - this._cluster = cluster; - this._pattern = pattern; - this._selector = new PoolSelector[selector]; - } - PoolNamespace.prototype.getConnection = function(cb) { - var clusterNode = this._getClusterNode(); - var cluster = this._cluster; - var namespace = this; - if (clusterNode === null) { - var err = null; - if (this._cluster._findNodeIds(this._pattern, true).length !== 0) { - err = new Error("Pool does not have online node."); - err.code = "POOL_NONEONLINE"; - } else { - err = new Error("Pool does not exist."); - err.code = "POOL_NOEXIST"; - } - cb(err); - return; - } - cluster._getConnection(clusterNode, function(err2, connection) { - var retry = err2 && cluster._canRetry && cluster._findNodeIds(namespace._pattern).length !== 0; - if (retry) { - namespace.getConnection(cb); - return; - } - if (err2) { - cb(err2); - return; - } - cb(null, connection); - }); - }; - PoolNamespace.prototype.query = function(sql, values, cb) { - var cluster = this._cluster; - var clusterNode = this._getClusterNode(); - var query = Connection.createQuery(sql, values, cb); - var namespace = this; - if (clusterNode === null) { - var err = null; - if (this._cluster._findNodeIds(this._pattern, true).length !== 0) { - err = new Error("Pool does not have online node."); - err.code = "POOL_NONEONLINE"; - } else { - err = new Error("Pool does not exist."); - err.code = "POOL_NOEXIST"; - } - process.nextTick(function() { - query.on("error", function() { - }); - query.end(err); - }); - return query; - } - if (!(typeof sql === "object" && ("typeCast" in sql))) { - query.typeCast = clusterNode.pool.config.connectionConfig.typeCast; - } - if (clusterNode.pool.config.connectionConfig.trace) { - query._callSite = new Error; - } - cluster._getConnection(clusterNode, function(err2, conn) { - var retry = err2 && cluster._canRetry && cluster._findNodeIds(namespace._pattern).length !== 0; - if (retry) { - namespace.query(query); - return; - } - if (err2) { - query.on("error", function() { - }); - query.end(err2); - return; - } - query.once("end", function() { - conn.release(); - }); - conn.query(query); - }); - return query; - }; - PoolNamespace.prototype._getClusterNode = function _getClusterNode() { - var foundNodeIds = this._cluster._findNodeIds(this._pattern); - var nodeId; - switch (foundNodeIds.length) { - case 0: - nodeId = null; - break; - case 1: - nodeId = foundNodeIds[0]; - break; - default: - nodeId = this._selector(foundNodeIds); - break; - } - return nodeId !== null ? this._cluster._getNode(nodeId) : null; - }; -}); - -// node_modules/mysql/lib/PoolCluster.js -var require_PoolCluster = __commonJS((exports, module) => { - var Pool = require_Pool(); - var PoolConfig = require_PoolConfig(); - var PoolNamespace = require_PoolNamespace(); - var PoolSelector = require_PoolSelector(); - var Util = __require("util"); - var EventEmitter = __require("events").EventEmitter; - module.exports = PoolCluster; - function PoolCluster(config) { - EventEmitter.call(this); - config = config || {}; - this._canRetry = typeof config.canRetry === "undefined" ? true : config.canRetry; - this._defaultSelector = config.defaultSelector || "RR"; - this._removeNodeErrorCount = config.removeNodeErrorCount || 5; - this._restoreNodeTimeout = config.restoreNodeTimeout || 0; - this._closed = false; - this._findCaches = Object.create(null); - this._lastId = 0; - this._namespaces = Object.create(null); - this._nodes = Object.create(null); - } - Util.inherits(PoolCluster, EventEmitter); - PoolCluster.prototype.add = function add(id, config) { - if (this._closed) { - throw new Error("PoolCluster is closed."); - } - var nodeId = typeof id === "object" ? "CLUSTER::" + ++this._lastId : String(id); - if (this._nodes[nodeId] !== undefined) { - throw new Error('Node ID "' + nodeId + '" is already defined in PoolCluster.'); - } - var poolConfig = typeof id !== "object" ? new PoolConfig(config) : new PoolConfig(id); - this._nodes[nodeId] = { - id: nodeId, - errorCount: 0, - pool: new Pool({ config: poolConfig }), - _offlineUntil: 0 - }; - this._clearFindCaches(); - }; - PoolCluster.prototype.end = function end(callback) { - var cb = callback !== undefined ? callback : _cb; - if (typeof cb !== "function") { - throw TypeError("callback argument must be a function"); - } - if (this._closed) { - process.nextTick(cb); - return; - } - this._closed = true; - var calledBack = false; - var nodeIds = Object.keys(this._nodes); - var waitingClose = 0; - function onEnd(err) { - if (!calledBack && (err || --waitingClose <= 0)) { - calledBack = true; - cb(err); - } - } - for (var i = 0;i < nodeIds.length; i++) { - var nodeId = nodeIds[i]; - var node = this._nodes[nodeId]; - waitingClose++; - node.pool.end(onEnd); - } - if (waitingClose === 0) { - process.nextTick(onEnd); - } - }; - PoolCluster.prototype.of = function(pattern, selector) { - pattern = pattern || "*"; - selector = selector || this._defaultSelector; - selector = selector.toUpperCase(); - if (typeof PoolSelector[selector] === "undefined") { - selector = this._defaultSelector; - } - var key = pattern + selector; - if (typeof this._namespaces[key] === "undefined") { - this._namespaces[key] = new PoolNamespace(this, pattern, selector); - } - return this._namespaces[key]; - }; - PoolCluster.prototype.remove = function remove(pattern) { - var foundNodeIds = this._findNodeIds(pattern, true); - for (var i = 0;i < foundNodeIds.length; i++) { - var node = this._getNode(foundNodeIds[i]); - if (node) { - this._removeNode(node); - } - } - }; - PoolCluster.prototype.getConnection = function(pattern, selector, cb) { - var namespace; - if (typeof pattern === "function") { - cb = pattern; - namespace = this.of(); - } else { - if (typeof selector === "function") { - cb = selector; - selector = this._defaultSelector; - } - namespace = this.of(pattern, selector); - } - namespace.getConnection(cb); - }; - PoolCluster.prototype._clearFindCaches = function _clearFindCaches() { - this._findCaches = Object.create(null); - }; - PoolCluster.prototype._decreaseErrorCount = function _decreaseErrorCount(node) { - var errorCount = node.errorCount; - if (errorCount > this._removeNodeErrorCount) { - errorCount = this._removeNodeErrorCount; - } - if (errorCount < 1) { - errorCount = 1; - } - node.errorCount = errorCount - 1; - if (node._offlineUntil) { - node._offlineUntil = 0; - this.emit("online", node.id); - } - }; - PoolCluster.prototype._findNodeIds = function _findNodeIds(pattern, includeOffline) { - var currentTime = 0; - var foundNodeIds = this._findCaches[pattern]; - if (foundNodeIds === undefined) { - var expression = patternRegExp(pattern); - var nodeIds = Object.keys(this._nodes); - foundNodeIds = nodeIds.filter(function(id) { - return id.match(expression); - }); - this._findCaches[pattern] = foundNodeIds; - } - if (includeOffline) { - return foundNodeIds; - } - return foundNodeIds.filter(function(nodeId) { - var node = this._getNode(nodeId); - if (!node._offlineUntil) { - return true; - } - if (!currentTime) { - currentTime = getMonotonicMilliseconds(); - } - return node._offlineUntil <= currentTime; - }, this); - }; - PoolCluster.prototype._getNode = function _getNode(id) { - return this._nodes[id] || null; - }; - PoolCluster.prototype._increaseErrorCount = function _increaseErrorCount(node) { - var errorCount = ++node.errorCount; - if (this._removeNodeErrorCount > errorCount) { - return; - } - if (this._restoreNodeTimeout > 0) { - node._offlineUntil = getMonotonicMilliseconds() + this._restoreNodeTimeout; - this.emit("offline", node.id); - return; - } - this._removeNode(node); - this.emit("remove", node.id); - }; - PoolCluster.prototype._getConnection = function(node, cb) { - var self2 = this; - node.pool.getConnection(function(err, connection) { - if (err) { - self2._increaseErrorCount(node); - cb(err); - return; - } else { - self2._decreaseErrorCount(node); - } - connection._clusterId = node.id; - cb(null, connection); - }); - }; - PoolCluster.prototype._removeNode = function _removeNode(node) { - delete this._nodes[node.id]; - this._clearFindCaches(); - node.pool.end(_noop); - }; - function getMonotonicMilliseconds() { - var ms; - if (typeof process.hrtime === "function") { - ms = process.hrtime(); - ms = ms[0] * 1000 + ms[1] * 0.000001; - } else { - ms = process.uptime() * 1000; - } - return Math.floor(ms); - } - function isRegExp(val) { - return typeof val === "object" && Object.prototype.toString.call(val) === "[object RegExp]"; - } - function patternRegExp(pattern) { - if (isRegExp(pattern)) { - return pattern; - } - var source = pattern.replace(/([.+?^=!:${}()|\[\]\/\\])/g, "\\$1").replace(/\*/g, ".*"); - return new RegExp("^" + source + "$"); - } - function _cb(err) { - if (err) { - throw err; - } - } - function _noop() { - } -}); - -// node_modules/mysql/index.js -var require_mysql = __commonJS((exports) => { - var Classes = Object.create(null); - exports.createConnection = function createConnection(config) { - var Connection = loadClass("Connection"); - var ConnectionConfig = loadClass("ConnectionConfig"); - return new Connection({ config: new ConnectionConfig(config) }); - }; - exports.createPool = function createPool(config) { - var Pool = loadClass("Pool"); - var PoolConfig = loadClass("PoolConfig"); - return new Pool({ config: new PoolConfig(config) }); - }; - exports.createPoolCluster = function createPoolCluster(config) { - var PoolCluster = loadClass("PoolCluster"); - return new PoolCluster(config); - }; - exports.createQuery = function createQuery(sql, values, callback) { - var Connection = loadClass("Connection"); - return Connection.createQuery(sql, values, callback); - }; - exports.escape = function escape(value, stringifyObjects, timeZone) { - var SqlString = loadClass("SqlString"); - return SqlString.escape(value, stringifyObjects, timeZone); - }; - exports.escapeId = function escapeId(value, forbidQualified) { - var SqlString = loadClass("SqlString"); - return SqlString.escapeId(value, forbidQualified); - }; - exports.format = function format(sql, values, stringifyObjects, timeZone) { - var SqlString = loadClass("SqlString"); - return SqlString.format(sql, values, stringifyObjects, timeZone); - }; - exports.raw = function raw(sql) { - var SqlString = loadClass("SqlString"); - return SqlString.raw(sql); - }; - Object.defineProperty(exports, "Types", { - get: loadClass.bind(null, "Types") - }); - function loadClass(className) { - var Class = Classes[className]; - if (Class !== undefined) { - return Class; - } - switch (className) { - case "Connection": - Class = require_Connection(); - break; - case "ConnectionConfig": - Class = require_ConnectionConfig(); - break; - case "Pool": - Class = require_Pool(); - break; - case "PoolCluster": - Class = require_PoolCluster(); - break; - case "PoolConfig": - Class = require_PoolConfig(); - break; - case "SqlString": - Class = require_SqlString(); - break; - case "Types": - Class = require_types(); - break; - default: - throw new Error("Cannot find class \'" + className + "\'"); - } - Classes[className] = Class; - return Class; - } -}); - -// node_modules/serverless-mysql/index.js -var require_serverless_mysql = __commonJS((exports, module) => { - var NodeURL = __require("url"); - module.exports = (params) => { - let client = null; - let counter = 0; - let errors = 0; - let retries = 0; - let _cfg = {}; - let _maxConns = { updated: 0 }; - let _usedConns = { updated: 0 }; - const tooManyConnsErrors = [ - "ER_TOO_MANY_USER_CONNECTIONS", - "ER_CON_COUNT_ERROR", - "ER_USER_LIMIT_REACHED", - "ER_OUT_OF_RESOURCES", - "PROTOCOL_CONNECTION_LOST", - "PROTOCOL_SEQUENCE_TIMEOUT", - "ETIMEDOUT" - ]; - let MYSQL, manageConns, cap, base, maxRetries, connUtilization, backoff, zombieMinTimeout, zombieMaxTimeout, maxConnsFreq, usedConnsFreq, onConnect, onConnectError, onRetry, onClose, onError, onKill, onKillError, PromiseLibrary; - const getCounter = () => counter; - const incCounter = () => counter++; - const resetCounter = () => counter = 0; - const getClient = () => client; - const resetClient = () => client = null; - const resetRetries = () => retries = 0; - const getErrorCount = () => errors; - const getConfig = () => _cfg; - const config = (args) => { - if (typeof args === "string") { - return Object.assign(_cfg, uriToConnectionConfig(args)); - } - return Object.assign(_cfg, args); - }; - const delay = (ms) => new PromiseLibrary((res) => setTimeout(res, ms)); - const randRange = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; - const fullJitter = () => randRange(0, Math.min(cap, base * 2 ** retries)); - const decorrelatedJitter = (sleep = 0) => Math.min(cap, randRange(base, sleep * 3)); - const uriToConnectionConfig = (connectionString) => { - let uri = undefined; - try { - uri = new NodeURL.URL(connectionString); - } catch (error) { - throw new Error("Invalid data source URL provided"); - } - const extraFields = {}; - for (const [name, value] of uri.searchParams) { - extraFields[name] = value; - } - const database = uri.pathname && uri.pathname.startsWith("/") ? uri.pathname.slice(1) : undefined; - const connectionFields = { - host: uri.hostname ? uri.hostname : undefined, - user: uri.username ? uri.username : undefined, - port: uri.port ? Number(uri.port) : undefined, - password: uri.password ? uri.password : undefined, - database - }; - return Object.assign(connectionFields, extraFields); - }; - const connect = async (wait) => { - try { - await _connect(); - } catch (e) { - if (tooManyConnsErrors.includes(e.code) && retries < maxRetries) { - retries++; - wait = Number.isInteger(wait) ? wait : 0; - let sleep = backoff === "decorrelated" ? decorrelatedJitter(wait) : typeof backoff === "function" ? backoff(wait, retries) : fullJitter(); - onRetry(e, retries, sleep, typeof backoff === "function" ? "custom" : backoff); - await delay(sleep).then(() => connect(sleep)); - } else { - onConnectError(e); - throw new Error(e); - } - } - }; - const _connect = () => { - if (client === null) { - resetCounter(); - return new PromiseLibrary((resolve, reject) => { - client = MYSQL.createConnection(_cfg); - client.connect(function(err) { - if (err) { - resetClient(); - reject(err); - } else { - resetRetries(); - onConnect(client); - return resolve(true); - } - }); - client.on("error", async (err) => { - errors++; - resetClient(); - resetCounter(); - onError(err); - }); - }); - } else { - return PromiseLibrary.resolve(); - } - }; - const end = async () => { - if (client !== null && manageConns) { - incCounter(); - let maxConns = await getMaxConnections(); - let usedConns = await getTotalConnections(); - if (usedConns.total / maxConns.total > connUtilization) { - let timeout = Math.min(Math.max(usedConns.maxAge, zombieMinTimeout), zombieMaxTimeout); - let killedZombies = timeout <= usedConns.maxAge ? await killZombieConnections(timeout) : 0; - if (killedZombies === 0) { - quit(); - } - } else if (usedConns.maxAge > zombieMaxTimeout) { - await killZombieConnections(zombieMaxTimeout); - } - } - }; - const quit = () => { - if (client !== null) { - client.end(); - resetClient(); - resetCounter(); - onClose(); - } - }; - const query = async function(...args) { - await connect(); - return new PromiseLibrary((resolve, reject) => { - if (client !== null) { - if (this && this.rollback && args.length === 0) { - return resolve([]); - } - client.query(...args, async (err, results) => { - if (err && err.code === "PROTOCOL_SEQUENCE_TIMEOUT") { - client.destroy(); - resetClient(); - reject(err); - } else if (err && (/^PROTOCOL_ENQUEUE_AFTER_/.test(err.code) || err.code === "PROTOCOL_CONNECTION_LOST" || err.code === "EPIPE" || err.code === "ECONNRESET")) { - resetClient(); - return resolve(query(...args)); - } else if (err) { - if (this && this.rollback) { - await query("ROLLBACK"); - this.rollback(err); - } - reject(err); - } - return resolve(results); - }); - } - }); - }; - const getMaxConnections = async () => { - if (Date.now() - _maxConns.updated > maxConnsFreq) { - let results = await query(`SELECT IF(@@max_user_connections > 0, - LEAST(@@max_user_connections,@@max_connections), - @@max_connections) AS total, - IF(@@max_user_connections > 0,true,false) AS userLimit`); - _maxConns = { - total: results[0].total || 0, - userLimit: results[0].userLimit === 1 ? true : false, - updated: Date.now() - }; - } - return _maxConns; - }; - const getTotalConnections = async () => { - if (Date.now() - _usedConns.updated > usedConnsFreq) { - let results = await query(`SELECT COUNT(ID) as total, MAX(time) as max_age - FROM information_schema.processlist - WHERE (user = ? AND @@max_user_connections > 0) OR true`, [_cfg.user]); - _usedConns = { - total: results[0].total || 0, - maxAge: results[0].max_age || 0, - updated: Date.now() - }; - } - return _usedConns; - }; - const killZombieConnections = async (timeout) => { - let killedZombies = 0; - let zombies = await query(`SELECT ID,time FROM information_schema.processlist - WHERE command = 'Sleep' AND time >= ? AND user = ? - ORDER BY time DESC`, [!isNaN(timeout) ? timeout : 60 * 15, _cfg.user]); - for (let i = 0;i < zombies.length; i++) { - try { - await query("KILL ?", zombies[i].ID); - onKill(zombies[i]); - killedZombies++; - } catch (e) { - onKillError(e); - } - } - return killedZombies; - }; - const transaction = () => { - let queries = []; - let rollback = () => { - }; - return { - query: function(...args) { - if (typeof args[0] === "function") { - queries.push(args[0]); - } else { - queries.push(() => [...args]); - } - return this; +}; +/** + * Media Functions Object + */ +const media = { + uploadImage: upload_image_1.default, + uploadFile: upload_file_1.default, + deleteFile: delete_file_1.default, +}; +/** + * SQL Utils + */ +const sql = { + sqlGenerator: sql_generator_1.default, + sqlInsertGenerator: sql_insert_generator_1.default, + sqlDeleteGenerator: sql_delete_generator_1.default, + trim: trim_sql_1.default, +}; +/** + * Main Export + */ +const datasquirel = { + get: get_1.default, + post: post_1.default, + media, + user, + getSchema: get_schema_1.default, + client: client_1.default, + sql, + utils: { + crypto: { + encrypt: require("./package-shared/functions/dsql/encrypt"), + decrypt: require("./package-shared/functions/dsql/decrypt"), + hash: require("./package-shared/functions/dsql/hashPassword"), }, - rollback: function(fn) { - if (typeof fn === "function") { - rollback = fn; - } - return this; - }, - commit: async function() { - return await commit(queries, rollback); - } - }; - }; - const commit = async (queries, rollback) => { - let results = []; - await query("START TRANSACTION"); - for (let i = 0;i < queries.length; i++) { - let result = await query.apply({ rollback }, queries[i](results[results.length - 1], results)); - results.push(result); - } - await query("COMMIT"); - return results; - }; - const cfg = typeof params === "object" && !Array.isArray(params) ? params : {}; - MYSQL = cfg.library || require_mysql(); - PromiseLibrary = cfg.promise || Promise; - manageConns = cfg.manageConns === false ? false : true; - cap = Number.isInteger(cfg.cap) ? cfg.cap : 100; - base = Number.isInteger(cfg.base) ? cfg.base : 2; - maxRetries = Number.isInteger(cfg.maxRetries) ? cfg.maxRetries : 50; - backoff = typeof cfg.backoff === "function" ? cfg.backoff : cfg.backoff && ["full", "decorrelated"].includes(cfg.backoff.toLowerCase()) ? cfg.backoff.toLowerCase() : "full"; - connUtilization = !isNaN(cfg.connUtilization) ? cfg.connUtilization : 0.8; - zombieMinTimeout = Number.isInteger(cfg.zombieMinTimeout) ? cfg.zombieMinTimeout : 3; - zombieMaxTimeout = Number.isInteger(cfg.zombieMaxTimeout) ? cfg.zombieMaxTimeout : 60 * 15; - maxConnsFreq = Number.isInteger(cfg.maxConnsFreq) ? cfg.maxConnsFreq : 15 * 1000; - usedConnsFreq = Number.isInteger(cfg.usedConnsFreq) ? cfg.usedConnsFreq : 0; - onConnect = typeof cfg.onConnect === "function" ? cfg.onConnect : () => { - }; - onConnectError = typeof cfg.onConnectError === "function" ? cfg.onConnectError : () => { - }; - onRetry = typeof cfg.onRetry === "function" ? cfg.onRetry : () => { - }; - onClose = typeof cfg.onClose === "function" ? cfg.onClose : () => { - }; - onError = typeof cfg.onError === "function" ? cfg.onError : () => { - }; - onKill = typeof cfg.onKill === "function" ? cfg.onKill : () => { - }; - onKillError = typeof cfg.onKillError === "function" ? cfg.onKillError : () => { - }; - let connCfg = {}; - if (typeof cfg.config === "object" && !Array.isArray(cfg.config)) { - connCfg = cfg.config; - } else if (typeof params === "string") { - connCfg = params; - } - let escape = MYSQL.escape; - let escapeId = MYSQL.escapeId; - let format = MYSQL.format; - config(connCfg); - return { - connect, - config, - query, - end, - escape, - escapeId, - format, - quit, - transaction, - getCounter, - getClient, - getConfig, - getErrorCount - }; - }; -}); - -// package-shared/utils/backend/grabDbSSL.ts -import fs2 from "fs"; -function grabDbSSL() { - const SSL_DIR = process.env.DSQL_SSL_DIR; - if (!SSL_DIR?.match(/./)) { - return; - } - const caFilePath = `${SSL_DIR}/ca-cert.pem`; - if (!fs2.existsSync(caFilePath)) { - console.log(`${caFilePath} does not exist`); - return; - } - return { - ca: fs2.readFileSync(`${SSL_DIR}/ca-cert.pem`) - }; -} -var init_grabDbSSL = () => { -}; - -// package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts -import fs3 from "fs"; -function DSQL_USER_DB_HANDLER({ - paradigm, - database, - queryString, - queryValues -}) { - try { - return new Promise((resolve, reject) => { - const fullAccess = paradigm?.match(/full.access|^fa$/i) ? true : false; - try { - let runQuery = function(results) { - DSQL_USER.end(); - resolve(JSON.parse(JSON.stringify(results))); - }, queryError = function(err) { - DSQL_USER.end(); - resolve({ - error: err.message, - queryStringGenerated: queryString, - queryValuesGenerated: queryValues, - sql: err.sql - }); - }; - if (fullAccess) { - DSQL_USER = import_serverless_mysql.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, - password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, - database, - ssl: grabDbSSL() - } - }); - } else { - DSQL_USER = import_serverless_mysql.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_READ_ONLY_USERNAME, - password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - database, - ssl: grabDbSSL() - } - }); - } - if (queryValues && Array.isArray(queryValues) && queryValues[0]) { - DSQL_USER.query(queryString, queryValues).then(runQuery).catch(queryError); - } else { - DSQL_USER.query(queryString).then(runQuery).catch(queryError); - } - } catch (error) { - fs3.appendFileSync("./.tmp/dbErrorLogs.txt", error.message + "\n" + Date() + "\n\n\n", "utf8"); - resolve({ - error: error.message - }); - } - }); - } catch (error) { - return { - success: false, - error: error.message - }; - } -} -var import_serverless_mysql, DSQL_USER; -var init_DSQL_USER_DB_HANDLER = __esm(() => { - import_serverless_mysql = __toESM(require_serverless_mysql(), 1); - init_grabDbSSL(); - DSQL_USER = import_serverless_mysql.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_READ_ONLY_USERNAME, - password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - charset: "utf8mb4", - ssl: grabDbSSL() - } - }); - module_DSQL_USER_DB_HANDLER.exports = DSQL_USER_DB_HANDLER; -}); - -// package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts -async function LOCAL_DB_HANDLER(...args) { - const MASTER = import_serverless_mysql2.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - port: process.env.DSQL_DB_PORT ? Number(process.env.DSQL_DB_PORT) : undefined, - charset: "utf8mb4", - ssl: grabDbSSL() - }, - onConnect: () => { - console.log("Connection Successful!"); - }, - onConnectError: (err) => { - console.log("Connection Error", err.message); - }, - onError: (err) => { - console.log("Client Error", err.message); - } - }); - console.log("Querying ..."); - try { - const results = await MASTER.query(...args); - await MASTER.end(); - return JSON.parse(JSON.stringify(results)); - } catch (error) { - console.log("DB Error =>", error.message); - return { - success: false, - error: error.message - }; - } -} -var import_serverless_mysql2; -var init_LOCAL_DB_HANDLER = __esm(() => { - import_serverless_mysql2 = __toESM(require_serverless_mysql(), 1); - init_grabDbSSL(); -}); - -// package-shared/functions/dsql/decrypt.ts -var exports_decrypt = {}; -__export(exports_decrypt, { - default: () => decrypt -}); -import { scryptSync, createDecipheriv } from "crypto"; -import { Buffer as Buffer2 } from "buffer"; -function decrypt({ - encryptedString, - encryptionKey, - encryptionSalt -}) { - if (!encryptedString?.match(/./)) { - console.log("Encrypted string is invalid"); - return encryptedString; - } - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; - const finalKeyLen = process.env.DSQL_ENCRYPTION_KEY_LENGTH ? Number(process.env.DSQL_ENCRYPTION_KEY_LENGTH) : 24; - if (!finalEncryptionKey?.match(/.{8,}/)) { - console.log("Decrption key is invalid"); - return encryptedString; - } - if (!finalEncryptionSalt?.match(/.{8,}/)) { - console.log("Decrption salt is invalid"); - return encryptedString; - } - const algorithm = "aes-192-cbc"; - let key = scryptSync(finalEncryptionKey, finalEncryptionSalt, finalKeyLen); - let iv = Buffer2.alloc(16, 0); - const decipher = createDecipheriv(algorithm, key, iv); - try { - let decrypted = decipher.update(encryptedString, "hex", "utf8"); - decrypted += decipher.final("utf8"); - return decrypted; - } catch (error) { - console.log("Error in decrypting =>", error.message); - return encryptedString; - } -} -var init_decrypt = () => { -}; - -// package-shared/functions/backend/defaultFieldsRegexp.ts -var defaultFieldsRegexp, defaultFieldsRegexp_default; -var init_defaultFieldsRegexp = __esm(() => { - defaultFieldsRegexp = /^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/; - defaultFieldsRegexp_default = defaultFieldsRegexp; -}); - -// package-shared/functions/backend/parseDbResults.ts -async function parseDbResults({ - unparsedResults, - tableSchema -}) { - let parsedResults = []; - try { - for (let pr = 0;pr < unparsedResults.length; pr++) { - let result = unparsedResults[pr]; - let resultFieldNames = Object.keys(result); - for (let i = 0;i < resultFieldNames.length; i++) { - const resultFieldName = resultFieldNames[i]; - let resultFieldSchema = tableSchema?.fields[i]; - if (resultFieldName?.match(defaultFieldsRegexp_default)) { - continue; - } - let value = result[resultFieldName]; - if (typeof value !== "number" && !value) { - continue; - } - if (resultFieldSchema?.encrypted) { - if (value?.match(/./)) { - result[resultFieldName] = decrypt({ - encryptedString: value - }); - } - } - } - parsedResults.push(result); - } - return parsedResults; - } catch (error) { - console.log("ERROR in parseDbResults Function =>", error.message); - return unparsedResults; - } -} -var init_parseDbResults = __esm(() => { - init_decrypt(); - init_defaultFieldsRegexp(); -}); - -// node_modules/entities/lib/generated/decode-data-html.js -var require_decode_data_html = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\uD835\uDD04rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\uD835\uDD38plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\uD835\uDC9Cign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\uD835\uDD05pf;\uC000\uD835\uDD39eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\uD835\uDC9Ep\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\uD835\uDD07\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\uD835\uDD3B\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\uD835\uDC9Frok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\uD835\uDD08rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\uD835\uDD3Csilon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\uD835\uDD09lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\uD835\uDD3DAll;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\uD835\uDD0A;\u62D9pf;\uC000\uD835\uDD3Eeater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\uD835\uDCA2;\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\uD835\uDD40a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\uD835\uDD0Dpf;\uC000\uD835\uDD41\u01E3\u07C7\0\u07CCr;\uC000\uD835\uDCA5rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\uD835\uDD0Epf;\uC000\uD835\uDD42cr;\uC000\uD835\uDCA6\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\uD835\uDD0F\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\uD835\uDD43er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\uD835\uDD10nusPlus;\u6213pf;\uC000\uD835\uDD44c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\uD835\uDD11\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\uD835\uDCA9ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\uD835\uDD12rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\uD835\uDD46enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\uD835\uDCAAash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\uD835\uDD13i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\uD835\uDCAB;\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\uD835\uDD14pf;\u611Acr;\uC000\uD835\uDCAC\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\uD835\uDD16ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\uD835\uDD4A\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\uD835\uDCAEar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\uD835\uDD17\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\uD835\uDD4BipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\uD835\uDCAFrok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\uD835\uDD18rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\uD835\uDD4C\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\uD835\uDCB0ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\uD835\uDD19pf;\uC000\uD835\uDD4Dcr;\uC000\uD835\uDCB1dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\uD835\uDD1Apf;\uC000\uD835\uDD4Ecr;\uC000\uD835\uDCB2\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\uD835\uDD1B;\u439Epf;\uC000\uD835\uDD4Fcr;\uC000\uD835\uDCB3\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\uD835\uDD1Cpf;\uC000\uD835\uDD50cr;\uC000\uD835\uDCB4ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\uD835\uDCB5\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\uD835\uDD1Erave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\uD835\uDD52\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\uD835\uDCB6;\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\uD835\uDD1Fg\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\uD835\uDD53\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\uD835\uDCB7mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\uD835\uDD20\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\uD835\uDD54o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\uD835\uDCB8\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\uD835\uDD21ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\uD835\uDD55\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\uD835\uDCB9;\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\uD835\uDD22\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\uD835\uDD56\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\uD835\uDD23lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\uD835\uDD57\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\uD835\uDCBB\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\uD835\uDD24\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\uD835\uDD58\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\uD835\uDD25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\uD835\uDD59bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\uD835\uDCBDas\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\uD835\uDD26rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\uD835\uDD5Aa;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\uD835\uDCBEn\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\uD835\uDD27ath;\u4237pf;\uC000\uD835\uDD5B\u01E3\u23EC\0\u23F1r;\uC000\uD835\uDCBFrcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\uD835\uDD28reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\uD835\uDD5Ccr;\uC000\uD835\uDCC0\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\uD835\uDD29\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\uD835\uDD5Dus;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\uD835\uDCC1m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\uD835\uDD2Ao;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\uD835\uDD5E\u0100ct\u28F8\u28FDr;\uC000\uD835\uDCC2pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\uD835\uDD2B\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\uD835\uDD5F\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\uD835\uDCC3ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\uD835\uDD2C\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\uD835\uDD60\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\uD835\uDD2D\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\uD835\uDD61nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\uD835\uDCC5;\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\uD835\uDD2Epf;\uC000\uD835\uDD62rime;\u6057cr;\uC000\uD835\uDCC6\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\uD835\uDD2F\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\uD835\uDD63us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\uD835\uDCC7\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\uD835\uDD30\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\uD835\uDD64a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\uD835\uDCC8tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\uD835\uDD31\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\uD835\uDD65rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\uD835\uDCC9;\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\uD835\uDD32rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\uD835\uDD66\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\uD835\uDCCA\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\uD835\uDD33tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\uD835\uDD67ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\uD835\uDCCB\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\uD835\uDD34pf;\uC000\uD835\uDD68\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\uD835\uDCCC\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\uD835\uDD35\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\uD835\uDD69im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\uD835\uDCCD\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\uD835\uDD36cy;\u4457pf;\uC000\uD835\uDD6Acr;\uC000\uD835\uDCCE\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\uD835\uDD37cy;\u4436grarr;\u61DDpf;\uC000\uD835\uDD6Bcr;\uC000\uD835\uDCCF\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(function(c) { - return c.charCodeAt(0); - })); -}); - -// node_modules/entities/lib/generated/decode-data-xml.js -var require_decode_data_xml = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = new Uint16Array("\u0200aglq\t\x15\x18\x1B\u026D\x0F\0\0\x12p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(function(c) { - return c.charCodeAt(0); - })); -}); - -// node_modules/entities/lib/decode_codepoint.js -var require_decode_codepoint = __commonJS((exports) => { - var _a; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.replaceCodePoint = exports.fromCodePoint = undefined; - var decodeMap = new Map([ - [0, 65533], - [128, 8364], - [130, 8218], - [131, 402], - [132, 8222], - [133, 8230], - [134, 8224], - [135, 8225], - [136, 710], - [137, 8240], - [138, 352], - [139, 8249], - [140, 338], - [142, 381], - [145, 8216], - [146, 8217], - [147, 8220], - [148, 8221], - [149, 8226], - [150, 8211], - [151, 8212], - [152, 732], - [153, 8482], - [154, 353], - [155, 8250], - [156, 339], - [158, 382], - [159, 376] - ]); - exports.fromCodePoint = (_a = String.fromCodePoint) !== null && _a !== undefined ? _a : function(codePoint) { - var output = ""; - if (codePoint > 65535) { - codePoint -= 65536; - output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296); - codePoint = 56320 | codePoint & 1023; - } - output += String.fromCharCode(codePoint); - return output; - }; - function replaceCodePoint(codePoint) { - var _a2; - if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) { - return 65533; - } - return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== undefined ? _a2 : codePoint; - } - exports.replaceCodePoint = replaceCodePoint; - function decodeCodePoint(codePoint) { - return (0, exports.fromCodePoint)(replaceCodePoint(codePoint)); - } - exports.default = decodeCodePoint; -}); - -// node_modules/entities/lib/decode.js -var require_decode = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - var __importDefault = exports && exports.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = undefined; - var decode_data_html_js_1 = __importDefault(require_decode_data_html()); - exports.htmlDecodeTree = decode_data_html_js_1.default; - var decode_data_xml_js_1 = __importDefault(require_decode_data_xml()); - exports.xmlDecodeTree = decode_data_xml_js_1.default; - var decode_codepoint_js_1 = __importStar(require_decode_codepoint()); - exports.decodeCodePoint = decode_codepoint_js_1.default; - var decode_codepoint_js_2 = require_decode_codepoint(); - Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function() { - return decode_codepoint_js_2.replaceCodePoint; - } }); - Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function() { - return decode_codepoint_js_2.fromCodePoint; - } }); - var CharCodes; - (function(CharCodes2) { - CharCodes2[CharCodes2["NUM"] = 35] = "NUM"; - CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI"; - CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS"; - CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO"; - CharCodes2[CharCodes2["NINE"] = 57] = "NINE"; - CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A"; - CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F"; - CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X"; - CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z"; - CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A"; - CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F"; - CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z"; - })(CharCodes || (CharCodes = {})); - var TO_LOWER_BIT = 32; - var BinTrieFlags; - (function(BinTrieFlags2) { - BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH"; - BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH"; - BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE"; - })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {})); - function isNumber(code) { - return code >= CharCodes.ZERO && code <= CharCodes.NINE; - } - function isHexadecimalCharacter(code) { - return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F; - } - function isAsciiAlphaNumeric(code) { - return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code); - } - function isEntityInAttributeInvalidEnd(code) { - return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code); - } - var EntityDecoderState; - (function(EntityDecoderState2) { - EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart"; - EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart"; - EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal"; - EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex"; - EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity"; - })(EntityDecoderState || (EntityDecoderState = {})); - var DecodingMode; - (function(DecodingMode2) { - DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy"; - DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict"; - DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute"; - })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {})); - var EntityDecoder = function() { - function EntityDecoder2(decodeTree, emitCodePoint, errors) { - this.decodeTree = decodeTree; - this.emitCodePoint = emitCodePoint; - this.errors = errors; - this.state = EntityDecoderState.EntityStart; - this.consumed = 1; - this.result = 0; - this.treeIndex = 0; - this.excess = 1; - this.decodeMode = DecodingMode.Strict; - } - EntityDecoder2.prototype.startEntity = function(decodeMode) { - this.decodeMode = decodeMode; - this.state = EntityDecoderState.EntityStart; - this.result = 0; - this.treeIndex = 0; - this.excess = 1; - this.consumed = 1; - }; - EntityDecoder2.prototype.write = function(str, offset) { - switch (this.state) { - case EntityDecoderState.EntityStart: { - if (str.charCodeAt(offset) === CharCodes.NUM) { - this.state = EntityDecoderState.NumericStart; - this.consumed += 1; - return this.stateNumericStart(str, offset + 1); - } - this.state = EntityDecoderState.NamedEntity; - return this.stateNamedEntity(str, offset); - } - case EntityDecoderState.NumericStart: { - return this.stateNumericStart(str, offset); - } - case EntityDecoderState.NumericDecimal: { - return this.stateNumericDecimal(str, offset); - } - case EntityDecoderState.NumericHex: { - return this.stateNumericHex(str, offset); - } - case EntityDecoderState.NamedEntity: { - return this.stateNamedEntity(str, offset); - } - } - }; - EntityDecoder2.prototype.stateNumericStart = function(str, offset) { - if (offset >= str.length) { - return -1; - } - if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) { - this.state = EntityDecoderState.NumericHex; - this.consumed += 1; - return this.stateNumericHex(str, offset + 1); - } - this.state = EntityDecoderState.NumericDecimal; - return this.stateNumericDecimal(str, offset); - }; - EntityDecoder2.prototype.addToNumericResult = function(str, start, end, base) { - if (start !== end) { - var digitCount = end - start; - this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base); - this.consumed += digitCount; - } - }; - EntityDecoder2.prototype.stateNumericHex = function(str, offset) { - var startIdx = offset; - while (offset < str.length) { - var char = str.charCodeAt(offset); - if (isNumber(char) || isHexadecimalCharacter(char)) { - offset += 1; - } else { - this.addToNumericResult(str, startIdx, offset, 16); - return this.emitNumericEntity(char, 3); - } - } - this.addToNumericResult(str, startIdx, offset, 16); - return -1; - }; - EntityDecoder2.prototype.stateNumericDecimal = function(str, offset) { - var startIdx = offset; - while (offset < str.length) { - var char = str.charCodeAt(offset); - if (isNumber(char)) { - offset += 1; - } else { - this.addToNumericResult(str, startIdx, offset, 10); - return this.emitNumericEntity(char, 2); - } - } - this.addToNumericResult(str, startIdx, offset, 10); - return -1; - }; - EntityDecoder2.prototype.emitNumericEntity = function(lastCp, expectedLength) { - var _a; - if (this.consumed <= expectedLength) { - (_a = this.errors) === null || _a === undefined || _a.absenceOfDigitsInNumericCharacterReference(this.consumed); - return 0; - } - if (lastCp === CharCodes.SEMI) { - this.consumed += 1; - } else if (this.decodeMode === DecodingMode.Strict) { - return 0; - } - this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed); - if (this.errors) { - if (lastCp !== CharCodes.SEMI) { - this.errors.missingSemicolonAfterCharacterReference(); - } - this.errors.validateNumericCharacterReference(this.result); - } - return this.consumed; - }; - EntityDecoder2.prototype.stateNamedEntity = function(str, offset) { - var decodeTree = this.decodeTree; - var current = decodeTree[this.treeIndex]; - var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; - for (;offset < str.length; offset++, this.excess++) { - var char = str.charCodeAt(offset); - this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char); - if (this.treeIndex < 0) { - return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity(); - } - current = decodeTree[this.treeIndex]; - valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; - if (valueLength !== 0) { - if (char === CharCodes.SEMI) { - return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess); - } - if (this.decodeMode !== DecodingMode.Strict) { - this.result = this.treeIndex; - this.consumed += this.excess; - this.excess = 0; - } - } - } - return -1; - }; - EntityDecoder2.prototype.emitNotTerminatedNamedEntity = function() { - var _a; - var _b = this, result = _b.result, decodeTree = _b.decodeTree; - var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14; - this.emitNamedEntityData(result, valueLength, this.consumed); - (_a = this.errors) === null || _a === undefined || _a.missingSemicolonAfterCharacterReference(); - return this.consumed; - }; - EntityDecoder2.prototype.emitNamedEntityData = function(result, valueLength, consumed) { - var decodeTree = this.decodeTree; - this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed); - if (valueLength === 3) { - this.emitCodePoint(decodeTree[result + 2], consumed); - } - return consumed; - }; - EntityDecoder2.prototype.end = function() { - var _a; - switch (this.state) { - case EntityDecoderState.NamedEntity: { - return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0; - } - case EntityDecoderState.NumericDecimal: { - return this.emitNumericEntity(0, 2); - } - case EntityDecoderState.NumericHex: { - return this.emitNumericEntity(0, 3); - } - case EntityDecoderState.NumericStart: { - (_a = this.errors) === null || _a === undefined || _a.absenceOfDigitsInNumericCharacterReference(this.consumed); - return 0; - } - case EntityDecoderState.EntityStart: { - return 0; - } - } - }; - return EntityDecoder2; - }(); - exports.EntityDecoder = EntityDecoder; - function getDecoder(decodeTree) { - var ret = ""; - var decoder = new EntityDecoder(decodeTree, function(str) { - return ret += (0, decode_codepoint_js_1.fromCodePoint)(str); - }); - return function decodeWithTrie(str, decodeMode) { - var lastIndex = 0; - var offset = 0; - while ((offset = str.indexOf("&", offset)) >= 0) { - ret += str.slice(lastIndex, offset); - decoder.startEntity(decodeMode); - var len = decoder.write(str, offset + 1); - if (len < 0) { - lastIndex = offset + decoder.end(); - break; - } - lastIndex = offset + len; - offset = len === 0 ? lastIndex + 1 : lastIndex; - } - var result = ret + str.slice(lastIndex); - ret = ""; - return result; - }; - } - function determineBranch(decodeTree, current, nodeIdx, char) { - var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; - var jumpOffset = current & BinTrieFlags.JUMP_TABLE; - if (branchCount === 0) { - return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1; - } - if (jumpOffset) { - var value = char - jumpOffset; - return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1; - } - var lo = nodeIdx; - var hi = lo + branchCount - 1; - while (lo <= hi) { - var mid = lo + hi >>> 1; - var midVal = decodeTree[mid]; - if (midVal < char) { - lo = mid + 1; - } else if (midVal > char) { - hi = mid - 1; - } else { - return decodeTree[mid + branchCount]; - } - } - return -1; - } - exports.determineBranch = determineBranch; - var htmlDecoder = getDecoder(decode_data_html_js_1.default); - var xmlDecoder = getDecoder(decode_data_xml_js_1.default); - function decodeHTML(str, mode) { - if (mode === undefined) { - mode = DecodingMode.Legacy; - } - return htmlDecoder(str, mode); - } - exports.decodeHTML = decodeHTML; - function decodeHTMLAttribute(str) { - return htmlDecoder(str, DecodingMode.Attribute); - } - exports.decodeHTMLAttribute = decodeHTMLAttribute; - function decodeHTMLStrict(str) { - return htmlDecoder(str, DecodingMode.Strict); - } - exports.decodeHTMLStrict = decodeHTMLStrict; - function decodeXML(str) { - return xmlDecoder(str, DecodingMode.Strict); - } - exports.decodeXML = decodeXML; -}); - -// node_modules/htmlparser2/lib/Tokenizer.js -var require_Tokenizer = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.QuoteType = undefined; - var decode_js_1 = require_decode(); - var CharCodes; - (function(CharCodes2) { - CharCodes2[CharCodes2["Tab"] = 9] = "Tab"; - CharCodes2[CharCodes2["NewLine"] = 10] = "NewLine"; - CharCodes2[CharCodes2["FormFeed"] = 12] = "FormFeed"; - CharCodes2[CharCodes2["CarriageReturn"] = 13] = "CarriageReturn"; - CharCodes2[CharCodes2["Space"] = 32] = "Space"; - CharCodes2[CharCodes2["ExclamationMark"] = 33] = "ExclamationMark"; - CharCodes2[CharCodes2["Number"] = 35] = "Number"; - CharCodes2[CharCodes2["Amp"] = 38] = "Amp"; - CharCodes2[CharCodes2["SingleQuote"] = 39] = "SingleQuote"; - CharCodes2[CharCodes2["DoubleQuote"] = 34] = "DoubleQuote"; - CharCodes2[CharCodes2["Dash"] = 45] = "Dash"; - CharCodes2[CharCodes2["Slash"] = 47] = "Slash"; - CharCodes2[CharCodes2["Zero"] = 48] = "Zero"; - CharCodes2[CharCodes2["Nine"] = 57] = "Nine"; - CharCodes2[CharCodes2["Semi"] = 59] = "Semi"; - CharCodes2[CharCodes2["Lt"] = 60] = "Lt"; - CharCodes2[CharCodes2["Eq"] = 61] = "Eq"; - CharCodes2[CharCodes2["Gt"] = 62] = "Gt"; - CharCodes2[CharCodes2["Questionmark"] = 63] = "Questionmark"; - CharCodes2[CharCodes2["UpperA"] = 65] = "UpperA"; - CharCodes2[CharCodes2["LowerA"] = 97] = "LowerA"; - CharCodes2[CharCodes2["UpperF"] = 70] = "UpperF"; - CharCodes2[CharCodes2["LowerF"] = 102] = "LowerF"; - CharCodes2[CharCodes2["UpperZ"] = 90] = "UpperZ"; - CharCodes2[CharCodes2["LowerZ"] = 122] = "LowerZ"; - CharCodes2[CharCodes2["LowerX"] = 120] = "LowerX"; - CharCodes2[CharCodes2["OpeningSquareBracket"] = 91] = "OpeningSquareBracket"; - })(CharCodes || (CharCodes = {})); - var State; - (function(State2) { - State2[State2["Text"] = 1] = "Text"; - State2[State2["BeforeTagName"] = 2] = "BeforeTagName"; - State2[State2["InTagName"] = 3] = "InTagName"; - State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag"; - State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName"; - State2[State2["InClosingTagName"] = 6] = "InClosingTagName"; - State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName"; - State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName"; - State2[State2["InAttributeName"] = 9] = "InAttributeName"; - State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName"; - State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue"; - State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq"; - State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq"; - State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq"; - State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration"; - State2[State2["InDeclaration"] = 16] = "InDeclaration"; - State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction"; - State2[State2["BeforeComment"] = 18] = "BeforeComment"; - State2[State2["CDATASequence"] = 19] = "CDATASequence"; - State2[State2["InSpecialComment"] = 20] = "InSpecialComment"; - State2[State2["InCommentLike"] = 21] = "InCommentLike"; - State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS"; - State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence"; - State2[State2["InSpecialTag"] = 24] = "InSpecialTag"; - State2[State2["BeforeEntity"] = 25] = "BeforeEntity"; - State2[State2["BeforeNumericEntity"] = 26] = "BeforeNumericEntity"; - State2[State2["InNamedEntity"] = 27] = "InNamedEntity"; - State2[State2["InNumericEntity"] = 28] = "InNumericEntity"; - State2[State2["InHexEntity"] = 29] = "InHexEntity"; - })(State || (State = {})); - function isWhitespace(c) { - return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn; - } - function isEndOfTagSection(c) { - return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c); - } - function isNumber(c) { - return c >= CharCodes.Zero && c <= CharCodes.Nine; - } - function isASCIIAlpha(c) { - return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ; - } - function isHexDigit(c) { - return c >= CharCodes.UpperA && c <= CharCodes.UpperF || c >= CharCodes.LowerA && c <= CharCodes.LowerF; - } - var QuoteType; - (function(QuoteType2) { - QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue"; - QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted"; - QuoteType2[QuoteType2["Single"] = 2] = "Single"; - QuoteType2[QuoteType2["Double"] = 3] = "Double"; - })(QuoteType = exports.QuoteType || (exports.QuoteType = {})); - var Sequences = { - Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]), - CdataEnd: new Uint8Array([93, 93, 62]), - CommentEnd: new Uint8Array([45, 45, 62]), - ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]), - StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]), - TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]) - }; - var Tokenizer = function() { - function Tokenizer2(_a, cbs) { - var _b = _a.xmlMode, xmlMode = _b === undefined ? false : _b, _c = _a.decodeEntities, decodeEntities = _c === undefined ? true : _c; - this.cbs = cbs; - this.state = State.Text; - this.buffer = ""; - this.sectionStart = 0; - this.index = 0; - this.baseState = State.Text; - this.isSpecial = false; - this.running = true; - this.offset = 0; - this.currentSequence = undefined; - this.sequenceIndex = 0; - this.trieIndex = 0; - this.trieCurrent = 0; - this.entityResult = 0; - this.entityExcess = 0; - this.xmlMode = xmlMode; - this.decodeEntities = decodeEntities; - this.entityTrie = xmlMode ? decode_js_1.xmlDecodeTree : decode_js_1.htmlDecodeTree; - } - Tokenizer2.prototype.reset = function() { - this.state = State.Text; - this.buffer = ""; - this.sectionStart = 0; - this.index = 0; - this.baseState = State.Text; - this.currentSequence = undefined; - this.running = true; - this.offset = 0; - }; - Tokenizer2.prototype.write = function(chunk) { - this.offset += this.buffer.length; - this.buffer = chunk; - this.parse(); - }; - Tokenizer2.prototype.end = function() { - if (this.running) - this.finish(); - }; - Tokenizer2.prototype.pause = function() { - this.running = false; - }; - Tokenizer2.prototype.resume = function() { - this.running = true; - if (this.index < this.buffer.length + this.offset) { - this.parse(); - } - }; - Tokenizer2.prototype.getIndex = function() { - return this.index; - }; - Tokenizer2.prototype.getSectionStart = function() { - return this.sectionStart; - }; - Tokenizer2.prototype.stateText = function(c) { - if (c === CharCodes.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes.Lt)) { - if (this.index > this.sectionStart) { - this.cbs.ontext(this.sectionStart, this.index); - } - this.state = State.BeforeTagName; - this.sectionStart = this.index; - } else if (this.decodeEntities && c === CharCodes.Amp) { - this.state = State.BeforeEntity; - } - }; - Tokenizer2.prototype.stateSpecialStartSequence = function(c) { - var isEnd = this.sequenceIndex === this.currentSequence.length; - var isMatch = isEnd ? isEndOfTagSection(c) : (c | 32) === this.currentSequence[this.sequenceIndex]; - if (!isMatch) { - this.isSpecial = false; - } else if (!isEnd) { - this.sequenceIndex++; - return; - } - this.sequenceIndex = 0; - this.state = State.InTagName; - this.stateInTagName(c); - }; - Tokenizer2.prototype.stateInSpecialTag = function(c) { - if (this.sequenceIndex === this.currentSequence.length) { - if (c === CharCodes.Gt || isWhitespace(c)) { - var endOfText = this.index - this.currentSequence.length; - if (this.sectionStart < endOfText) { - var actualIndex = this.index; - this.index = endOfText; - this.cbs.ontext(this.sectionStart, endOfText); - this.index = actualIndex; - } - this.isSpecial = false; - this.sectionStart = endOfText + 2; - this.stateInClosingTagName(c); - return; - } - this.sequenceIndex = 0; - } - if ((c | 32) === this.currentSequence[this.sequenceIndex]) { - this.sequenceIndex += 1; - } else if (this.sequenceIndex === 0) { - if (this.currentSequence === Sequences.TitleEnd) { - if (this.decodeEntities && c === CharCodes.Amp) { - this.state = State.BeforeEntity; - } - } else if (this.fastForwardTo(CharCodes.Lt)) { - this.sequenceIndex = 1; - } - } else { - this.sequenceIndex = Number(c === CharCodes.Lt); - } - }; - Tokenizer2.prototype.stateCDATASequence = function(c) { - if (c === Sequences.Cdata[this.sequenceIndex]) { - if (++this.sequenceIndex === Sequences.Cdata.length) { - this.state = State.InCommentLike; - this.currentSequence = Sequences.CdataEnd; - this.sequenceIndex = 0; - this.sectionStart = this.index + 1; - } - } else { - this.sequenceIndex = 0; - this.state = State.InDeclaration; - this.stateInDeclaration(c); - } - }; - Tokenizer2.prototype.fastForwardTo = function(c) { - while (++this.index < this.buffer.length + this.offset) { - if (this.buffer.charCodeAt(this.index - this.offset) === c) { - return true; - } - } - this.index = this.buffer.length + this.offset - 1; - return false; - }; - Tokenizer2.prototype.stateInCommentLike = function(c) { - if (c === this.currentSequence[this.sequenceIndex]) { - if (++this.sequenceIndex === this.currentSequence.length) { - if (this.currentSequence === Sequences.CdataEnd) { - this.cbs.oncdata(this.sectionStart, this.index, 2); - } else { - this.cbs.oncomment(this.sectionStart, this.index, 2); - } - this.sequenceIndex = 0; - this.sectionStart = this.index + 1; - this.state = State.Text; - } - } else if (this.sequenceIndex === 0) { - if (this.fastForwardTo(this.currentSequence[0])) { - this.sequenceIndex = 1; - } - } else if (c !== this.currentSequence[this.sequenceIndex - 1]) { - this.sequenceIndex = 0; - } - }; - Tokenizer2.prototype.isTagStartChar = function(c) { - return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c); - }; - Tokenizer2.prototype.startSpecial = function(sequence, offset) { - this.isSpecial = true; - this.currentSequence = sequence; - this.sequenceIndex = offset; - this.state = State.SpecialStartSequence; - }; - Tokenizer2.prototype.stateBeforeTagName = function(c) { - if (c === CharCodes.ExclamationMark) { - this.state = State.BeforeDeclaration; - this.sectionStart = this.index + 1; - } else if (c === CharCodes.Questionmark) { - this.state = State.InProcessingInstruction; - this.sectionStart = this.index + 1; - } else if (this.isTagStartChar(c)) { - var lower = c | 32; - this.sectionStart = this.index; - if (!this.xmlMode && lower === Sequences.TitleEnd[2]) { - this.startSpecial(Sequences.TitleEnd, 3); - } else { - this.state = !this.xmlMode && lower === Sequences.ScriptEnd[2] ? State.BeforeSpecialS : State.InTagName; - } - } else if (c === CharCodes.Slash) { - this.state = State.BeforeClosingTagName; - } else { - this.state = State.Text; - this.stateText(c); - } - }; - Tokenizer2.prototype.stateInTagName = function(c) { - if (isEndOfTagSection(c)) { - this.cbs.onopentagname(this.sectionStart, this.index); - this.sectionStart = -1; - this.state = State.BeforeAttributeName; - this.stateBeforeAttributeName(c); - } - }; - Tokenizer2.prototype.stateBeforeClosingTagName = function(c) { - if (isWhitespace(c)) { - } else if (c === CharCodes.Gt) { - this.state = State.Text; - } else { - this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment; - this.sectionStart = this.index; - } - }; - Tokenizer2.prototype.stateInClosingTagName = function(c) { - if (c === CharCodes.Gt || isWhitespace(c)) { - this.cbs.onclosetag(this.sectionStart, this.index); - this.sectionStart = -1; - this.state = State.AfterClosingTagName; - this.stateAfterClosingTagName(c); - } - }; - Tokenizer2.prototype.stateAfterClosingTagName = function(c) { - if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { - this.state = State.Text; - this.baseState = State.Text; - this.sectionStart = this.index + 1; - } - }; - Tokenizer2.prototype.stateBeforeAttributeName = function(c) { - if (c === CharCodes.Gt) { - this.cbs.onopentagend(this.index); - if (this.isSpecial) { - this.state = State.InSpecialTag; - this.sequenceIndex = 0; - } else { - this.state = State.Text; - } - this.baseState = this.state; - this.sectionStart = this.index + 1; - } else if (c === CharCodes.Slash) { - this.state = State.InSelfClosingTag; - } else if (!isWhitespace(c)) { - this.state = State.InAttributeName; - this.sectionStart = this.index; - } - }; - Tokenizer2.prototype.stateInSelfClosingTag = function(c) { - if (c === CharCodes.Gt) { - this.cbs.onselfclosingtag(this.index); - this.state = State.Text; - this.baseState = State.Text; - this.sectionStart = this.index + 1; - this.isSpecial = false; - } else if (!isWhitespace(c)) { - this.state = State.BeforeAttributeName; - this.stateBeforeAttributeName(c); - } - }; - Tokenizer2.prototype.stateInAttributeName = function(c) { - if (c === CharCodes.Eq || isEndOfTagSection(c)) { - this.cbs.onattribname(this.sectionStart, this.index); - this.sectionStart = -1; - this.state = State.AfterAttributeName; - this.stateAfterAttributeName(c); - } - }; - Tokenizer2.prototype.stateAfterAttributeName = function(c) { - if (c === CharCodes.Eq) { - this.state = State.BeforeAttributeValue; - } else if (c === CharCodes.Slash || c === CharCodes.Gt) { - this.cbs.onattribend(QuoteType.NoValue, this.index); - this.state = State.BeforeAttributeName; - this.stateBeforeAttributeName(c); - } else if (!isWhitespace(c)) { - this.cbs.onattribend(QuoteType.NoValue, this.index); - this.state = State.InAttributeName; - this.sectionStart = this.index; - } - }; - Tokenizer2.prototype.stateBeforeAttributeValue = function(c) { - if (c === CharCodes.DoubleQuote) { - this.state = State.InAttributeValueDq; - this.sectionStart = this.index + 1; - } else if (c === CharCodes.SingleQuote) { - this.state = State.InAttributeValueSq; - this.sectionStart = this.index + 1; - } else if (!isWhitespace(c)) { - this.sectionStart = this.index; - this.state = State.InAttributeValueNq; - this.stateInAttributeValueNoQuotes(c); - } - }; - Tokenizer2.prototype.handleInAttributeValue = function(c, quote) { - if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) { - this.cbs.onattribdata(this.sectionStart, this.index); - this.sectionStart = -1; - this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index); - this.state = State.BeforeAttributeName; - } else if (this.decodeEntities && c === CharCodes.Amp) { - this.baseState = this.state; - this.state = State.BeforeEntity; - } - }; - Tokenizer2.prototype.stateInAttributeValueDoubleQuotes = function(c) { - this.handleInAttributeValue(c, CharCodes.DoubleQuote); - }; - Tokenizer2.prototype.stateInAttributeValueSingleQuotes = function(c) { - this.handleInAttributeValue(c, CharCodes.SingleQuote); - }; - Tokenizer2.prototype.stateInAttributeValueNoQuotes = function(c) { - if (isWhitespace(c) || c === CharCodes.Gt) { - this.cbs.onattribdata(this.sectionStart, this.index); - this.sectionStart = -1; - this.cbs.onattribend(QuoteType.Unquoted, this.index); - this.state = State.BeforeAttributeName; - this.stateBeforeAttributeName(c); - } else if (this.decodeEntities && c === CharCodes.Amp) { - this.baseState = this.state; - this.state = State.BeforeEntity; - } - }; - Tokenizer2.prototype.stateBeforeDeclaration = function(c) { - if (c === CharCodes.OpeningSquareBracket) { - this.state = State.CDATASequence; - this.sequenceIndex = 0; - } else { - this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration; - } - }; - Tokenizer2.prototype.stateInDeclaration = function(c) { - if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { - this.cbs.ondeclaration(this.sectionStart, this.index); - this.state = State.Text; - this.sectionStart = this.index + 1; - } - }; - Tokenizer2.prototype.stateInProcessingInstruction = function(c) { - if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { - this.cbs.onprocessinginstruction(this.sectionStart, this.index); - this.state = State.Text; - this.sectionStart = this.index + 1; - } - }; - Tokenizer2.prototype.stateBeforeComment = function(c) { - if (c === CharCodes.Dash) { - this.state = State.InCommentLike; - this.currentSequence = Sequences.CommentEnd; - this.sequenceIndex = 2; - this.sectionStart = this.index + 1; - } else { - this.state = State.InDeclaration; - } - }; - Tokenizer2.prototype.stateInSpecialComment = function(c) { - if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { - this.cbs.oncomment(this.sectionStart, this.index, 0); - this.state = State.Text; - this.sectionStart = this.index + 1; - } - }; - Tokenizer2.prototype.stateBeforeSpecialS = function(c) { - var lower = c | 32; - if (lower === Sequences.ScriptEnd[3]) { - this.startSpecial(Sequences.ScriptEnd, 4); - } else if (lower === Sequences.StyleEnd[3]) { - this.startSpecial(Sequences.StyleEnd, 4); - } else { - this.state = State.InTagName; - this.stateInTagName(c); - } - }; - Tokenizer2.prototype.stateBeforeEntity = function(c) { - this.entityExcess = 1; - this.entityResult = 0; - if (c === CharCodes.Number) { - this.state = State.BeforeNumericEntity; - } else if (c === CharCodes.Amp) { - } else { - this.trieIndex = 0; - this.trieCurrent = this.entityTrie[0]; - this.state = State.InNamedEntity; - this.stateInNamedEntity(c); - } - }; - Tokenizer2.prototype.stateInNamedEntity = function(c) { - this.entityExcess += 1; - this.trieIndex = (0, decode_js_1.determineBranch)(this.entityTrie, this.trieCurrent, this.trieIndex + 1, c); - if (this.trieIndex < 0) { - this.emitNamedEntity(); - this.index--; - return; - } - this.trieCurrent = this.entityTrie[this.trieIndex]; - var masked = this.trieCurrent & decode_js_1.BinTrieFlags.VALUE_LENGTH; - if (masked) { - var valueLength = (masked >> 14) - 1; - if (!this.allowLegacyEntity() && c !== CharCodes.Semi) { - this.trieIndex += valueLength; - } else { - var entityStart = this.index - this.entityExcess + 1; - if (entityStart > this.sectionStart) { - this.emitPartial(this.sectionStart, entityStart); - } - this.entityResult = this.trieIndex; - this.trieIndex += valueLength; - this.entityExcess = 0; - this.sectionStart = this.index + 1; - if (valueLength === 0) { - this.emitNamedEntity(); - } - } - } - }; - Tokenizer2.prototype.emitNamedEntity = function() { - this.state = this.baseState; - if (this.entityResult === 0) { - return; - } - var valueLength = (this.entityTrie[this.entityResult] & decode_js_1.BinTrieFlags.VALUE_LENGTH) >> 14; - switch (valueLength) { - case 1: { - this.emitCodePoint(this.entityTrie[this.entityResult] & ~decode_js_1.BinTrieFlags.VALUE_LENGTH); - break; - } - case 2: { - this.emitCodePoint(this.entityTrie[this.entityResult + 1]); - break; - } - case 3: { - this.emitCodePoint(this.entityTrie[this.entityResult + 1]); - this.emitCodePoint(this.entityTrie[this.entityResult + 2]); - } - } - }; - Tokenizer2.prototype.stateBeforeNumericEntity = function(c) { - if ((c | 32) === CharCodes.LowerX) { - this.entityExcess++; - this.state = State.InHexEntity; - } else { - this.state = State.InNumericEntity; - this.stateInNumericEntity(c); - } - }; - Tokenizer2.prototype.emitNumericEntity = function(strict) { - var entityStart = this.index - this.entityExcess - 1; - var numberStart = entityStart + 2 + Number(this.state === State.InHexEntity); - if (numberStart !== this.index) { - if (entityStart > this.sectionStart) { - this.emitPartial(this.sectionStart, entityStart); - } - this.sectionStart = this.index + Number(strict); - this.emitCodePoint((0, decode_js_1.replaceCodePoint)(this.entityResult)); - } - this.state = this.baseState; - }; - Tokenizer2.prototype.stateInNumericEntity = function(c) { - if (c === CharCodes.Semi) { - this.emitNumericEntity(true); - } else if (isNumber(c)) { - this.entityResult = this.entityResult * 10 + (c - CharCodes.Zero); - this.entityExcess++; - } else { - if (this.allowLegacyEntity()) { - this.emitNumericEntity(false); - } else { - this.state = this.baseState; - } - this.index--; - } - }; - Tokenizer2.prototype.stateInHexEntity = function(c) { - if (c === CharCodes.Semi) { - this.emitNumericEntity(true); - } else if (isNumber(c)) { - this.entityResult = this.entityResult * 16 + (c - CharCodes.Zero); - this.entityExcess++; - } else if (isHexDigit(c)) { - this.entityResult = this.entityResult * 16 + ((c | 32) - CharCodes.LowerA + 10); - this.entityExcess++; - } else { - if (this.allowLegacyEntity()) { - this.emitNumericEntity(false); - } else { - this.state = this.baseState; - } - this.index--; - } - }; - Tokenizer2.prototype.allowLegacyEntity = function() { - return !this.xmlMode && (this.baseState === State.Text || this.baseState === State.InSpecialTag); - }; - Tokenizer2.prototype.cleanup = function() { - if (this.running && this.sectionStart !== this.index) { - if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) { - this.cbs.ontext(this.sectionStart, this.index); - this.sectionStart = this.index; - } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) { - this.cbs.onattribdata(this.sectionStart, this.index); - this.sectionStart = this.index; - } - } - }; - Tokenizer2.prototype.shouldContinue = function() { - return this.index < this.buffer.length + this.offset && this.running; - }; - Tokenizer2.prototype.parse = function() { - while (this.shouldContinue()) { - var c = this.buffer.charCodeAt(this.index - this.offset); - switch (this.state) { - case State.Text: { - this.stateText(c); - break; - } - case State.SpecialStartSequence: { - this.stateSpecialStartSequence(c); - break; - } - case State.InSpecialTag: { - this.stateInSpecialTag(c); - break; - } - case State.CDATASequence: { - this.stateCDATASequence(c); - break; - } - case State.InAttributeValueDq: { - this.stateInAttributeValueDoubleQuotes(c); - break; - } - case State.InAttributeName: { - this.stateInAttributeName(c); - break; - } - case State.InCommentLike: { - this.stateInCommentLike(c); - break; - } - case State.InSpecialComment: { - this.stateInSpecialComment(c); - break; - } - case State.BeforeAttributeName: { - this.stateBeforeAttributeName(c); - break; - } - case State.InTagName: { - this.stateInTagName(c); - break; - } - case State.InClosingTagName: { - this.stateInClosingTagName(c); - break; - } - case State.BeforeTagName: { - this.stateBeforeTagName(c); - break; - } - case State.AfterAttributeName: { - this.stateAfterAttributeName(c); - break; - } - case State.InAttributeValueSq: { - this.stateInAttributeValueSingleQuotes(c); - break; - } - case State.BeforeAttributeValue: { - this.stateBeforeAttributeValue(c); - break; - } - case State.BeforeClosingTagName: { - this.stateBeforeClosingTagName(c); - break; - } - case State.AfterClosingTagName: { - this.stateAfterClosingTagName(c); - break; - } - case State.BeforeSpecialS: { - this.stateBeforeSpecialS(c); - break; - } - case State.InAttributeValueNq: { - this.stateInAttributeValueNoQuotes(c); - break; - } - case State.InSelfClosingTag: { - this.stateInSelfClosingTag(c); - break; - } - case State.InDeclaration: { - this.stateInDeclaration(c); - break; - } - case State.BeforeDeclaration: { - this.stateBeforeDeclaration(c); - break; - } - case State.BeforeComment: { - this.stateBeforeComment(c); - break; - } - case State.InProcessingInstruction: { - this.stateInProcessingInstruction(c); - break; - } - case State.InNamedEntity: { - this.stateInNamedEntity(c); - break; - } - case State.BeforeEntity: { - this.stateBeforeEntity(c); - break; - } - case State.InHexEntity: { - this.stateInHexEntity(c); - break; - } - case State.InNumericEntity: { - this.stateInNumericEntity(c); - break; - } - default: { - this.stateBeforeNumericEntity(c); - } - } - this.index++; - } - this.cleanup(); - }; - Tokenizer2.prototype.finish = function() { - if (this.state === State.InNamedEntity) { - this.emitNamedEntity(); - } - if (this.sectionStart < this.index) { - this.handleTrailingData(); - } - this.cbs.onend(); - }; - Tokenizer2.prototype.handleTrailingData = function() { - var endIndex = this.buffer.length + this.offset; - if (this.state === State.InCommentLike) { - if (this.currentSequence === Sequences.CdataEnd) { - this.cbs.oncdata(this.sectionStart, endIndex, 0); - } else { - this.cbs.oncomment(this.sectionStart, endIndex, 0); - } - } else if (this.state === State.InNumericEntity && this.allowLegacyEntity()) { - this.emitNumericEntity(false); - } else if (this.state === State.InHexEntity && this.allowLegacyEntity()) { - this.emitNumericEntity(false); - } else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) { - } else { - this.cbs.ontext(this.sectionStart, endIndex); - } - }; - Tokenizer2.prototype.emitPartial = function(start, endIndex) { - if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) { - this.cbs.onattribdata(start, endIndex); - } else { - this.cbs.ontext(start, endIndex); - } - }; - Tokenizer2.prototype.emitCodePoint = function(cp) { - if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) { - this.cbs.onattribentity(cp); - } else { - this.cbs.ontextentity(cp); - } - }; - return Tokenizer2; - }(); - exports.default = Tokenizer; -}); - -// node_modules/htmlparser2/lib/Parser.js -var require_Parser2 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Parser = undefined; - var Tokenizer_js_1 = __importStar(require_Tokenizer()); - var decode_js_1 = require_decode(); - var formTags = new Set([ - "input", - "option", - "optgroup", - "select", - "button", - "datalist", - "textarea" - ]); - var pTag = new Set(["p"]); - var tableSectionTags = new Set(["thead", "tbody"]); - var ddtTags = new Set(["dd", "dt"]); - var rtpTags = new Set(["rt", "rp"]); - var openImpliesClose = new Map([ - ["tr", new Set(["tr", "th", "td"])], - ["th", new Set(["th"])], - ["td", new Set(["thead", "th", "td"])], - ["body", new Set(["head", "link", "script"])], - ["li", new Set(["li"])], - ["p", pTag], - ["h1", pTag], - ["h2", pTag], - ["h3", pTag], - ["h4", pTag], - ["h5", pTag], - ["h6", pTag], - ["select", formTags], - ["input", formTags], - ["output", formTags], - ["button", formTags], - ["datalist", formTags], - ["textarea", formTags], - ["option", new Set(["option"])], - ["optgroup", new Set(["optgroup", "option"])], - ["dd", ddtTags], - ["dt", ddtTags], - ["address", pTag], - ["article", pTag], - ["aside", pTag], - ["blockquote", pTag], - ["details", pTag], - ["div", pTag], - ["dl", pTag], - ["fieldset", pTag], - ["figcaption", pTag], - ["figure", pTag], - ["footer", pTag], - ["form", pTag], - ["header", pTag], - ["hr", pTag], - ["main", pTag], - ["nav", pTag], - ["ol", pTag], - ["pre", pTag], - ["section", pTag], - ["table", pTag], - ["ul", pTag], - ["rt", rtpTags], - ["rp", rtpTags], - ["tbody", tableSectionTags], - ["tfoot", tableSectionTags] - ]); - var voidElements = new Set([ - "area", - "base", - "basefont", - "br", - "col", - "command", - "embed", - "frame", - "hr", - "img", - "input", - "isindex", - "keygen", - "link", - "meta", - "param", - "source", - "track", - "wbr" - ]); - var foreignContextElements = new Set(["math", "svg"]); - var htmlIntegrationElements = new Set([ - "mi", - "mo", - "mn", - "ms", - "mtext", - "annotation-xml", - "foreignobject", - "desc", - "title" - ]); - var reNameEnd = /\s|\//; - var Parser = function() { - function Parser2(cbs, options) { - if (options === undefined) { - options = {}; - } - var _a, _b, _c, _d, _e; - this.options = options; - this.startIndex = 0; - this.endIndex = 0; - this.openTagStart = 0; - this.tagname = ""; - this.attribname = ""; - this.attribvalue = ""; - this.attribs = null; - this.stack = []; - this.foreignContext = []; - this.buffers = []; - this.bufferOffset = 0; - this.writeIndex = 0; - this.ended = false; - this.cbs = cbs !== null && cbs !== undefined ? cbs : {}; - this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== undefined ? _a : !options.xmlMode; - this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== undefined ? _b : !options.xmlMode; - this.tokenizer = new ((_c = options.Tokenizer) !== null && _c !== undefined ? _c : Tokenizer_js_1.default)(this.options, this); - (_e = (_d = this.cbs).onparserinit) === null || _e === undefined || _e.call(_d, this); - } - Parser2.prototype.ontext = function(start, endIndex) { - var _a, _b; - var data = this.getSlice(start, endIndex); - this.endIndex = endIndex - 1; - (_b = (_a = this.cbs).ontext) === null || _b === undefined || _b.call(_a, data); - this.startIndex = endIndex; - }; - Parser2.prototype.ontextentity = function(cp) { - var _a, _b; - var index = this.tokenizer.getSectionStart(); - this.endIndex = index - 1; - (_b = (_a = this.cbs).ontext) === null || _b === undefined || _b.call(_a, (0, decode_js_1.fromCodePoint)(cp)); - this.startIndex = index; - }; - Parser2.prototype.isVoidElement = function(name) { - return !this.options.xmlMode && voidElements.has(name); - }; - Parser2.prototype.onopentagname = function(start, endIndex) { - this.endIndex = endIndex; - var name = this.getSlice(start, endIndex); - if (this.lowerCaseTagNames) { - name = name.toLowerCase(); - } - this.emitOpenTag(name); - }; - Parser2.prototype.emitOpenTag = function(name) { - var _a, _b, _c, _d; - this.openTagStart = this.startIndex; - this.tagname = name; - var impliesClose = !this.options.xmlMode && openImpliesClose.get(name); - if (impliesClose) { - while (this.stack.length > 0 && impliesClose.has(this.stack[this.stack.length - 1])) { - var element = this.stack.pop(); - (_b = (_a = this.cbs).onclosetag) === null || _b === undefined || _b.call(_a, element, true); - } - } - if (!this.isVoidElement(name)) { - this.stack.push(name); - if (foreignContextElements.has(name)) { - this.foreignContext.push(true); - } else if (htmlIntegrationElements.has(name)) { - this.foreignContext.push(false); - } - } - (_d = (_c = this.cbs).onopentagname) === null || _d === undefined || _d.call(_c, name); - if (this.cbs.onopentag) - this.attribs = {}; - }; - Parser2.prototype.endOpenTag = function(isImplied) { - var _a, _b; - this.startIndex = this.openTagStart; - if (this.attribs) { - (_b = (_a = this.cbs).onopentag) === null || _b === undefined || _b.call(_a, this.tagname, this.attribs, isImplied); - this.attribs = null; - } - if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) { - this.cbs.onclosetag(this.tagname, true); - } - this.tagname = ""; - }; - Parser2.prototype.onopentagend = function(endIndex) { - this.endIndex = endIndex; - this.endOpenTag(false); - this.startIndex = endIndex + 1; - }; - Parser2.prototype.onclosetag = function(start, endIndex) { - var _a, _b, _c, _d, _e, _f; - this.endIndex = endIndex; - var name = this.getSlice(start, endIndex); - if (this.lowerCaseTagNames) { - name = name.toLowerCase(); - } - if (foreignContextElements.has(name) || htmlIntegrationElements.has(name)) { - this.foreignContext.pop(); - } - if (!this.isVoidElement(name)) { - var pos = this.stack.lastIndexOf(name); - if (pos !== -1) { - if (this.cbs.onclosetag) { - var count = this.stack.length - pos; - while (count--) { - this.cbs.onclosetag(this.stack.pop(), count !== 0); - } - } else - this.stack.length = pos; - } else if (!this.options.xmlMode && name === "p") { - this.emitOpenTag("p"); - this.closeCurrentTag(true); - } - } else if (!this.options.xmlMode && name === "br") { - (_b = (_a = this.cbs).onopentagname) === null || _b === undefined || _b.call(_a, "br"); - (_d = (_c = this.cbs).onopentag) === null || _d === undefined || _d.call(_c, "br", {}, true); - (_f = (_e = this.cbs).onclosetag) === null || _f === undefined || _f.call(_e, "br", false); - } - this.startIndex = endIndex + 1; - }; - Parser2.prototype.onselfclosingtag = function(endIndex) { - this.endIndex = endIndex; - if (this.options.xmlMode || this.options.recognizeSelfClosing || this.foreignContext[this.foreignContext.length - 1]) { - this.closeCurrentTag(false); - this.startIndex = endIndex + 1; - } else { - this.onopentagend(endIndex); - } - }; - Parser2.prototype.closeCurrentTag = function(isOpenImplied) { - var _a, _b; - var name = this.tagname; - this.endOpenTag(isOpenImplied); - if (this.stack[this.stack.length - 1] === name) { - (_b = (_a = this.cbs).onclosetag) === null || _b === undefined || _b.call(_a, name, !isOpenImplied); - this.stack.pop(); - } - }; - Parser2.prototype.onattribname = function(start, endIndex) { - this.startIndex = start; - var name = this.getSlice(start, endIndex); - this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name; - }; - Parser2.prototype.onattribdata = function(start, endIndex) { - this.attribvalue += this.getSlice(start, endIndex); - }; - Parser2.prototype.onattribentity = function(cp) { - this.attribvalue += (0, decode_js_1.fromCodePoint)(cp); - }; - Parser2.prototype.onattribend = function(quote, endIndex) { - var _a, _b; - this.endIndex = endIndex; - (_b = (_a = this.cbs).onattribute) === null || _b === undefined || _b.call(_a, this.attribname, this.attribvalue, quote === Tokenizer_js_1.QuoteType.Double ? '"' : quote === Tokenizer_js_1.QuoteType.Single ? "'" : quote === Tokenizer_js_1.QuoteType.NoValue ? undefined : null); - if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) { - this.attribs[this.attribname] = this.attribvalue; - } - this.attribvalue = ""; - }; - Parser2.prototype.getInstructionName = function(value) { - var index = value.search(reNameEnd); - var name = index < 0 ? value : value.substr(0, index); - if (this.lowerCaseTagNames) { - name = name.toLowerCase(); - } - return name; - }; - Parser2.prototype.ondeclaration = function(start, endIndex) { - this.endIndex = endIndex; - var value = this.getSlice(start, endIndex); - if (this.cbs.onprocessinginstruction) { - var name = this.getInstructionName(value); - this.cbs.onprocessinginstruction("!".concat(name), "!".concat(value)); - } - this.startIndex = endIndex + 1; - }; - Parser2.prototype.onprocessinginstruction = function(start, endIndex) { - this.endIndex = endIndex; - var value = this.getSlice(start, endIndex); - if (this.cbs.onprocessinginstruction) { - var name = this.getInstructionName(value); - this.cbs.onprocessinginstruction("?".concat(name), "?".concat(value)); - } - this.startIndex = endIndex + 1; - }; - Parser2.prototype.oncomment = function(start, endIndex, offset) { - var _a, _b, _c, _d; - this.endIndex = endIndex; - (_b = (_a = this.cbs).oncomment) === null || _b === undefined || _b.call(_a, this.getSlice(start, endIndex - offset)); - (_d = (_c = this.cbs).oncommentend) === null || _d === undefined || _d.call(_c); - this.startIndex = endIndex + 1; - }; - Parser2.prototype.oncdata = function(start, endIndex, offset) { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; - this.endIndex = endIndex; - var value = this.getSlice(start, endIndex - offset); - if (this.options.xmlMode || this.options.recognizeCDATA) { - (_b = (_a = this.cbs).oncdatastart) === null || _b === undefined || _b.call(_a); - (_d = (_c = this.cbs).ontext) === null || _d === undefined || _d.call(_c, value); - (_f = (_e = this.cbs).oncdataend) === null || _f === undefined || _f.call(_e); - } else { - (_h = (_g = this.cbs).oncomment) === null || _h === undefined || _h.call(_g, "[CDATA[".concat(value, "]]")); - (_k = (_j = this.cbs).oncommentend) === null || _k === undefined || _k.call(_j); - } - this.startIndex = endIndex + 1; - }; - Parser2.prototype.onend = function() { - var _a, _b; - if (this.cbs.onclosetag) { - this.endIndex = this.startIndex; - for (var index = this.stack.length;index > 0; this.cbs.onclosetag(this.stack[--index], true)) - ; - } - (_b = (_a = this.cbs).onend) === null || _b === undefined || _b.call(_a); - }; - Parser2.prototype.reset = function() { - var _a, _b, _c, _d; - (_b = (_a = this.cbs).onreset) === null || _b === undefined || _b.call(_a); - this.tokenizer.reset(); - this.tagname = ""; - this.attribname = ""; - this.attribs = null; - this.stack.length = 0; - this.startIndex = 0; - this.endIndex = 0; - (_d = (_c = this.cbs).onparserinit) === null || _d === undefined || _d.call(_c, this); - this.buffers.length = 0; - this.bufferOffset = 0; - this.writeIndex = 0; - this.ended = false; - }; - Parser2.prototype.parseComplete = function(data) { - this.reset(); - this.end(data); - }; - Parser2.prototype.getSlice = function(start, end) { - while (start - this.bufferOffset >= this.buffers[0].length) { - this.shiftBuffer(); - } - var slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset); - while (end - this.bufferOffset > this.buffers[0].length) { - this.shiftBuffer(); - slice += this.buffers[0].slice(0, end - this.bufferOffset); - } - return slice; - }; - Parser2.prototype.shiftBuffer = function() { - this.bufferOffset += this.buffers[0].length; - this.writeIndex--; - this.buffers.shift(); - }; - Parser2.prototype.write = function(chunk) { - var _a, _b; - if (this.ended) { - (_b = (_a = this.cbs).onerror) === null || _b === undefined || _b.call(_a, new Error(".write() after done!")); - return; - } - this.buffers.push(chunk); - if (this.tokenizer.running) { - this.tokenizer.write(chunk); - this.writeIndex++; - } - }; - Parser2.prototype.end = function(chunk) { - var _a, _b; - if (this.ended) { - (_b = (_a = this.cbs).onerror) === null || _b === undefined || _b.call(_a, new Error(".end() after done!")); - return; - } - if (chunk) - this.write(chunk); - this.ended = true; - this.tokenizer.end(); - }; - Parser2.prototype.pause = function() { - this.tokenizer.pause(); - }; - Parser2.prototype.resume = function() { - this.tokenizer.resume(); - while (this.tokenizer.running && this.writeIndex < this.buffers.length) { - this.tokenizer.write(this.buffers[this.writeIndex++]); - } - if (this.ended) - this.tokenizer.end(); - }; - Parser2.prototype.parseChunk = function(chunk) { - this.write(chunk); - }; - Parser2.prototype.done = function(chunk) { - this.end(chunk); - }; - return Parser2; - }(); - exports.Parser = Parser; -}); - -// node_modules/domelementtype/lib/index.js -var require_lib = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = undefined; - var ElementType; - (function(ElementType2) { - ElementType2["Root"] = "root"; - ElementType2["Text"] = "text"; - ElementType2["Directive"] = "directive"; - ElementType2["Comment"] = "comment"; - ElementType2["Script"] = "script"; - ElementType2["Style"] = "style"; - ElementType2["Tag"] = "tag"; - ElementType2["CDATA"] = "cdata"; - ElementType2["Doctype"] = "doctype"; - })(ElementType = exports.ElementType || (exports.ElementType = {})); - function isTag(elem) { - return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style; - } - exports.isTag = isTag; - exports.Root = ElementType.Root; - exports.Text = ElementType.Text; - exports.Directive = ElementType.Directive; - exports.Comment = ElementType.Comment; - exports.Script = ElementType.Script; - exports.Style = ElementType.Style; - exports.Tag = ElementType.Tag; - exports.CDATA = ElementType.CDATA; - exports.Doctype = ElementType.Doctype; -}); - -// node_modules/domhandler/lib/node.js -var require_node2 = __commonJS((exports) => { - var __extends = exports && exports.__extends || function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) - if (Object.prototype.hasOwnProperty.call(b2, p)) - d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __); - }; - }(); - var __assign = exports && exports.__assign || function() { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length;i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = undefined; - var domelementtype_1 = require_lib(); - var Node = function() { - function Node2() { - this.parent = null; - this.prev = null; - this.next = null; - this.startIndex = null; - this.endIndex = null; - } - Object.defineProperty(Node2.prototype, "parentNode", { - get: function() { - return this.parent; - }, - set: function(parent) { - this.parent = parent; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Node2.prototype, "previousSibling", { - get: function() { - return this.prev; - }, - set: function(prev) { - this.prev = prev; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Node2.prototype, "nextSibling", { - get: function() { - return this.next; - }, - set: function(next) { - this.next = next; - }, - enumerable: false, - configurable: true - }); - Node2.prototype.cloneNode = function(recursive) { - if (recursive === undefined) { - recursive = false; - } - return cloneNode(this, recursive); - }; - return Node2; - }(); - exports.Node = Node; - var DataNode = function(_super) { - __extends(DataNode2, _super); - function DataNode2(data) { - var _this = _super.call(this) || this; - _this.data = data; - return _this; - } - Object.defineProperty(DataNode2.prototype, "nodeValue", { - get: function() { - return this.data; - }, - set: function(data) { - this.data = data; - }, - enumerable: false, - configurable: true - }); - return DataNode2; - }(Node); - exports.DataNode = DataNode; - var Text = function(_super) { - __extends(Text2, _super); - function Text2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = domelementtype_1.ElementType.Text; - return _this; - } - Object.defineProperty(Text2.prototype, "nodeType", { - get: function() { - return 3; - }, - enumerable: false, - configurable: true - }); - return Text2; - }(DataNode); - exports.Text = Text; - var Comment = function(_super) { - __extends(Comment2, _super); - function Comment2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = domelementtype_1.ElementType.Comment; - return _this; - } - Object.defineProperty(Comment2.prototype, "nodeType", { - get: function() { - return 8; - }, - enumerable: false, - configurable: true - }); - return Comment2; - }(DataNode); - exports.Comment = Comment; - var ProcessingInstruction = function(_super) { - __extends(ProcessingInstruction2, _super); - function ProcessingInstruction2(name, data) { - var _this = _super.call(this, data) || this; - _this.name = name; - _this.type = domelementtype_1.ElementType.Directive; - return _this; - } - Object.defineProperty(ProcessingInstruction2.prototype, "nodeType", { - get: function() { - return 1; - }, - enumerable: false, - configurable: true - }); - return ProcessingInstruction2; - }(DataNode); - exports.ProcessingInstruction = ProcessingInstruction; - var NodeWithChildren = function(_super) { - __extends(NodeWithChildren2, _super); - function NodeWithChildren2(children) { - var _this = _super.call(this) || this; - _this.children = children; - return _this; - } - Object.defineProperty(NodeWithChildren2.prototype, "firstChild", { - get: function() { - var _a; - return (_a = this.children[0]) !== null && _a !== undefined ? _a : null; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(NodeWithChildren2.prototype, "lastChild", { - get: function() { - return this.children.length > 0 ? this.children[this.children.length - 1] : null; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(NodeWithChildren2.prototype, "childNodes", { - get: function() { - return this.children; - }, - set: function(children) { - this.children = children; - }, - enumerable: false, - configurable: true - }); - return NodeWithChildren2; - }(Node); - exports.NodeWithChildren = NodeWithChildren; - var CDATA = function(_super) { - __extends(CDATA2, _super); - function CDATA2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = domelementtype_1.ElementType.CDATA; - return _this; - } - Object.defineProperty(CDATA2.prototype, "nodeType", { - get: function() { - return 4; - }, - enumerable: false, - configurable: true - }); - return CDATA2; - }(NodeWithChildren); - exports.CDATA = CDATA; - var Document = function(_super) { - __extends(Document2, _super); - function Document2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = domelementtype_1.ElementType.Root; - return _this; - } - Object.defineProperty(Document2.prototype, "nodeType", { - get: function() { - return 9; - }, - enumerable: false, - configurable: true - }); - return Document2; - }(NodeWithChildren); - exports.Document = Document; - var Element = function(_super) { - __extends(Element2, _super); - function Element2(name, attribs, children, type) { - if (children === undefined) { - children = []; - } - if (type === undefined) { - type = name === "script" ? domelementtype_1.ElementType.Script : name === "style" ? domelementtype_1.ElementType.Style : domelementtype_1.ElementType.Tag; - } - var _this = _super.call(this, children) || this; - _this.name = name; - _this.attribs = attribs; - _this.type = type; - return _this; - } - Object.defineProperty(Element2.prototype, "nodeType", { - get: function() { - return 1; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Element2.prototype, "tagName", { - get: function() { - return this.name; - }, - set: function(name) { - this.name = name; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Element2.prototype, "attributes", { - get: function() { - var _this = this; - return Object.keys(this.attribs).map(function(name) { - var _a, _b; - return { - name, - value: _this.attribs[name], - namespace: (_a = _this["x-attribsNamespace"]) === null || _a === undefined ? undefined : _a[name], - prefix: (_b = _this["x-attribsPrefix"]) === null || _b === undefined ? undefined : _b[name] - }; - }); - }, - enumerable: false, - configurable: true - }); - return Element2; - }(NodeWithChildren); - exports.Element = Element; - function isTag(node) { - return (0, domelementtype_1.isTag)(node); - } - exports.isTag = isTag; - function isCDATA(node) { - return node.type === domelementtype_1.ElementType.CDATA; - } - exports.isCDATA = isCDATA; - function isText(node) { - return node.type === domelementtype_1.ElementType.Text; - } - exports.isText = isText; - function isComment(node) { - return node.type === domelementtype_1.ElementType.Comment; - } - exports.isComment = isComment; - function isDirective(node) { - return node.type === domelementtype_1.ElementType.Directive; - } - exports.isDirective = isDirective; - function isDocument(node) { - return node.type === domelementtype_1.ElementType.Root; - } - exports.isDocument = isDocument; - function hasChildren(node) { - return Object.prototype.hasOwnProperty.call(node, "children"); - } - exports.hasChildren = hasChildren; - function cloneNode(node, recursive) { - if (recursive === undefined) { - recursive = false; - } - var result; - if (isText(node)) { - result = new Text(node.data); - } else if (isComment(node)) { - result = new Comment(node.data); - } else if (isTag(node)) { - var children = recursive ? cloneChildren(node.children) : []; - var clone_1 = new Element(node.name, __assign({}, node.attribs), children); - children.forEach(function(child) { - return child.parent = clone_1; - }); - if (node.namespace != null) { - clone_1.namespace = node.namespace; - } - if (node["x-attribsNamespace"]) { - clone_1["x-attribsNamespace"] = __assign({}, node["x-attribsNamespace"]); - } - if (node["x-attribsPrefix"]) { - clone_1["x-attribsPrefix"] = __assign({}, node["x-attribsPrefix"]); - } - result = clone_1; - } else if (isCDATA(node)) { - var children = recursive ? cloneChildren(node.children) : []; - var clone_2 = new CDATA(children); - children.forEach(function(child) { - return child.parent = clone_2; - }); - result = clone_2; - } else if (isDocument(node)) { - var children = recursive ? cloneChildren(node.children) : []; - var clone_3 = new Document(children); - children.forEach(function(child) { - return child.parent = clone_3; - }); - if (node["x-mode"]) { - clone_3["x-mode"] = node["x-mode"]; - } - result = clone_3; - } else if (isDirective(node)) { - var instruction = new ProcessingInstruction(node.name, node.data); - if (node["x-name"] != null) { - instruction["x-name"] = node["x-name"]; - instruction["x-publicId"] = node["x-publicId"]; - instruction["x-systemId"] = node["x-systemId"]; - } - result = instruction; - } else { - throw new Error("Not implemented yet: ".concat(node.type)); - } - result.startIndex = node.startIndex; - result.endIndex = node.endIndex; - if (node.sourceCodeLocation != null) { - result.sourceCodeLocation = node.sourceCodeLocation; - } - return result; - } - exports.cloneNode = cloneNode; - function cloneChildren(childs) { - var children = childs.map(function(child) { - return cloneNode(child, true); - }); - for (var i = 1;i < children.length; i++) { - children[i].prev = children[i - 1]; - children[i - 1].next = children[i]; - } - return children; - } -}); - -// node_modules/domhandler/lib/index.js -var require_lib2 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DomHandler = undefined; - var domelementtype_1 = require_lib(); - var node_js_1 = require_node2(); - __exportStar(require_node2(), exports); - var defaultOpts = { - withStartIndices: false, - withEndIndices: false, - xmlMode: false - }; - var DomHandler = function() { - function DomHandler2(callback, options, elementCB) { - this.dom = []; - this.root = new node_js_1.Document(this.dom); - this.done = false; - this.tagStack = [this.root]; - this.lastNode = null; - this.parser = null; - if (typeof options === "function") { - elementCB = options; - options = defaultOpts; - } - if (typeof callback === "object") { - options = callback; - callback = undefined; - } - this.callback = callback !== null && callback !== undefined ? callback : null; - this.options = options !== null && options !== undefined ? options : defaultOpts; - this.elementCB = elementCB !== null && elementCB !== undefined ? elementCB : null; - } - DomHandler2.prototype.onparserinit = function(parser) { - this.parser = parser; - }; - DomHandler2.prototype.onreset = function() { - this.dom = []; - this.root = new node_js_1.Document(this.dom); - this.done = false; - this.tagStack = [this.root]; - this.lastNode = null; - this.parser = null; - }; - DomHandler2.prototype.onend = function() { - if (this.done) - return; - this.done = true; - this.parser = null; - this.handleCallback(null); - }; - DomHandler2.prototype.onerror = function(error) { - this.handleCallback(error); - }; - DomHandler2.prototype.onclosetag = function() { - this.lastNode = null; - var elem = this.tagStack.pop(); - if (this.options.withEndIndices) { - elem.endIndex = this.parser.endIndex; - } - if (this.elementCB) - this.elementCB(elem); - }; - DomHandler2.prototype.onopentag = function(name, attribs) { - var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined; - var element = new node_js_1.Element(name, attribs, undefined, type); - this.addNode(element); - this.tagStack.push(element); - }; - DomHandler2.prototype.ontext = function(data) { - var lastNode = this.lastNode; - if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) { - lastNode.data += data; - if (this.options.withEndIndices) { - lastNode.endIndex = this.parser.endIndex; - } - } else { - var node = new node_js_1.Text(data); - this.addNode(node); - this.lastNode = node; - } - }; - DomHandler2.prototype.oncomment = function(data) { - if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) { - this.lastNode.data += data; - return; - } - var node = new node_js_1.Comment(data); - this.addNode(node); - this.lastNode = node; - }; - DomHandler2.prototype.oncommentend = function() { - this.lastNode = null; - }; - DomHandler2.prototype.oncdatastart = function() { - var text = new node_js_1.Text(""); - var node = new node_js_1.CDATA([text]); - this.addNode(node); - text.parent = node; - this.lastNode = text; - }; - DomHandler2.prototype.oncdataend = function() { - this.lastNode = null; - }; - DomHandler2.prototype.onprocessinginstruction = function(name, data) { - var node = new node_js_1.ProcessingInstruction(name, data); - this.addNode(node); - }; - DomHandler2.prototype.handleCallback = function(error) { - if (typeof this.callback === "function") { - this.callback(error, this.dom); - } else if (error) { - throw error; - } - }; - DomHandler2.prototype.addNode = function(node) { - var parent = this.tagStack[this.tagStack.length - 1]; - var previousSibling = parent.children[parent.children.length - 1]; - if (this.options.withStartIndices) { - node.startIndex = this.parser.startIndex; - } - if (this.options.withEndIndices) { - node.endIndex = this.parser.endIndex; - } - parent.children.push(node); - if (previousSibling) { - node.prev = previousSibling; - previousSibling.next = node; - } - node.parent = parent; - this.lastNode = null; - }; - return DomHandler2; - }(); - exports.DomHandler = DomHandler; - exports.default = DomHandler; -}); - -// node_modules/entities/lib/generated/encode-html.js -var require_encode_html = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - function restoreDiff(arr) { - for (var i = 1;i < arr.length; i++) { - arr[i][0] += arr[i - 1][0] + 1; - } - return arr; - } - exports.default = new Map(/* @__PURE__ */ restoreDiff([[9, " "], [0, " "], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]])); -}); - -// node_modules/entities/lib/escape.js -var require_escape = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = undefined; - exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; - var xmlCodeMap = new Map([ - [34, """], - [38, "&"], - [39, "'"], - [60, "<"], - [62, ">"] - ]); - exports.getCodePoint = String.prototype.codePointAt != null ? function(str, index) { - return str.codePointAt(index); - } : function(c, index) { - return (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index); - }; - function encodeXML(str) { - var ret = ""; - var lastIdx = 0; - var match; - while ((match = exports.xmlReplacer.exec(str)) !== null) { - var i = match.index; - var char = str.charCodeAt(i); - var next = xmlCodeMap.get(char); - if (next !== undefined) { - ret += str.substring(lastIdx, i) + next; - lastIdx = i + 1; - } else { - ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";"); - lastIdx = exports.xmlReplacer.lastIndex += Number((char & 64512) === 55296); - } - } - return ret + str.substr(lastIdx); - } - exports.encodeXML = encodeXML; - exports.escape = encodeXML; - function getEscaper(regex, map) { - return function escape(data) { - var match; - var lastIdx = 0; - var result = ""; - while (match = regex.exec(data)) { - if (lastIdx !== match.index) { - result += data.substring(lastIdx, match.index); - } - result += map.get(match[0].charCodeAt(0)); - lastIdx = match.index + 1; - } - return result + data.substring(lastIdx); - }; - } - exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); - exports.escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([ - [34, """], - [38, "&"], - [160, " "] - ])); - exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([ - [38, "&"], - [60, "<"], - [62, ">"], - [160, " "] - ])); -}); - -// node_modules/entities/lib/encode.js -var require_encode = __commonJS((exports) => { - var __importDefault = exports && exports.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.encodeNonAsciiHTML = exports.encodeHTML = undefined; - var encode_html_js_1 = __importDefault(require_encode_html()); - var escape_js_1 = require_escape(); - var htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g; - function encodeHTML(data) { - return encodeHTMLTrieRe(htmlReplacer, data); - } - exports.encodeHTML = encodeHTML; - function encodeNonAsciiHTML(data) { - return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data); - } - exports.encodeNonAsciiHTML = encodeNonAsciiHTML; - function encodeHTMLTrieRe(regExp, str) { - var ret = ""; - var lastIdx = 0; - var match; - while ((match = regExp.exec(str)) !== null) { - var i = match.index; - ret += str.substring(lastIdx, i); - var char = str.charCodeAt(i); - var next = encode_html_js_1.default.get(char); - if (typeof next === "object") { - if (i + 1 < str.length) { - var nextChar = str.charCodeAt(i + 1); - var value = typeof next.n === "number" ? next.n === nextChar ? next.o : undefined : next.n.get(nextChar); - if (value !== undefined) { - ret += value; - lastIdx = regExp.lastIndex += 1; - continue; - } - } - next = next.v; - } - if (next !== undefined) { - ret += next; - lastIdx = i + 1; - } else { - var cp = (0, escape_js_1.getCodePoint)(str, i); - ret += "&#x".concat(cp.toString(16), ";"); - lastIdx = regExp.lastIndex += Number(cp !== char); - } - } - return ret + str.substr(lastIdx); - } -}); - -// node_modules/entities/lib/index.js -var require_lib3 = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = undefined; - var decode_js_1 = require_decode(); - var encode_js_1 = require_encode(); - var escape_js_1 = require_escape(); - var EntityLevel; - (function(EntityLevel2) { - EntityLevel2[EntityLevel2["XML"] = 0] = "XML"; - EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML"; - })(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {})); - var EncodingMode; - (function(EncodingMode2) { - EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8"; - EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII"; - EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive"; - EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute"; - EncodingMode2[EncodingMode2["Text"] = 4] = "Text"; - })(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {})); - function decode(data, options) { - if (options === undefined) { - options = EntityLevel.XML; - } - var level = typeof options === "number" ? options : options.level; - if (level === EntityLevel.HTML) { - var mode = typeof options === "object" ? options.mode : undefined; - return (0, decode_js_1.decodeHTML)(data, mode); - } - return (0, decode_js_1.decodeXML)(data); - } - exports.decode = decode; - function decodeStrict(data, options) { - var _a; - if (options === undefined) { - options = EntityLevel.XML; - } - var opts = typeof options === "number" ? { level: options } : options; - (_a = opts.mode) !== null && _a !== undefined || (opts.mode = decode_js_1.DecodingMode.Strict); - return decode(data, opts); - } - exports.decodeStrict = decodeStrict; - function encode(data, options) { - if (options === undefined) { - options = EntityLevel.XML; - } - var opts = typeof options === "number" ? { level: options } : options; - if (opts.mode === EncodingMode.UTF8) - return (0, escape_js_1.escapeUTF8)(data); - if (opts.mode === EncodingMode.Attribute) - return (0, escape_js_1.escapeAttribute)(data); - if (opts.mode === EncodingMode.Text) - return (0, escape_js_1.escapeText)(data); - if (opts.level === EntityLevel.HTML) { - if (opts.mode === EncodingMode.ASCII) { - return (0, encode_js_1.encodeNonAsciiHTML)(data); - } - return (0, encode_js_1.encodeHTML)(data); - } - return (0, escape_js_1.encodeXML)(data); - } - exports.encode = encode; - var escape_js_2 = require_escape(); - Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function() { - return escape_js_2.encodeXML; - } }); - Object.defineProperty(exports, "escape", { enumerable: true, get: function() { - return escape_js_2.escape; - } }); - Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function() { - return escape_js_2.escapeUTF8; - } }); - Object.defineProperty(exports, "escapeAttribute", { enumerable: true, get: function() { - return escape_js_2.escapeAttribute; - } }); - Object.defineProperty(exports, "escapeText", { enumerable: true, get: function() { - return escape_js_2.escapeText; - } }); - var encode_js_2 = require_encode(); - Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function() { - return encode_js_2.encodeHTML; - } }); - Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function() { - return encode_js_2.encodeNonAsciiHTML; - } }); - Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function() { - return encode_js_2.encodeHTML; - } }); - Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function() { - return encode_js_2.encodeHTML; - } }); - var decode_js_2 = require_decode(); - Object.defineProperty(exports, "EntityDecoder", { enumerable: true, get: function() { - return decode_js_2.EntityDecoder; - } }); - Object.defineProperty(exports, "DecodingMode", { enumerable: true, get: function() { - return decode_js_2.DecodingMode; - } }); - Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function() { - return decode_js_2.decodeXML; - } }); - Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function() { - return decode_js_2.decodeHTML; - } }); - Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function() { - return decode_js_2.decodeHTMLStrict; - } }); - Object.defineProperty(exports, "decodeHTMLAttribute", { enumerable: true, get: function() { - return decode_js_2.decodeHTMLAttribute; - } }); - Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function() { - return decode_js_2.decodeHTML; - } }); - Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function() { - return decode_js_2.decodeHTML; - } }); - Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function() { - return decode_js_2.decodeHTMLStrict; - } }); - Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function() { - return decode_js_2.decodeHTMLStrict; - } }); - Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function() { - return decode_js_2.decodeXML; - } }); -}); - -// node_modules/dom-serializer/lib/foreignNames.js -var require_foreignNames = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.attributeNames = exports.elementNames = undefined; - exports.elementNames = new Map([ - "altGlyph", - "altGlyphDef", - "altGlyphItem", - "animateColor", - "animateMotion", - "animateTransform", - "clipPath", - "feBlend", - "feColorMatrix", - "feComponentTransfer", - "feComposite", - "feConvolveMatrix", - "feDiffuseLighting", - "feDisplacementMap", - "feDistantLight", - "feDropShadow", - "feFlood", - "feFuncA", - "feFuncB", - "feFuncG", - "feFuncR", - "feGaussianBlur", - "feImage", - "feMerge", - "feMergeNode", - "feMorphology", - "feOffset", - "fePointLight", - "feSpecularLighting", - "feSpotLight", - "feTile", - "feTurbulence", - "foreignObject", - "glyphRef", - "linearGradient", - "radialGradient", - "textPath" - ].map(function(val) { - return [val.toLowerCase(), val]; - })); - exports.attributeNames = new Map([ - "definitionURL", - "attributeName", - "attributeType", - "baseFrequency", - "baseProfile", - "calcMode", - "clipPathUnits", - "diffuseConstant", - "edgeMode", - "filterUnits", - "glyphRef", - "gradientTransform", - "gradientUnits", - "kernelMatrix", - "kernelUnitLength", - "keyPoints", - "keySplines", - "keyTimes", - "lengthAdjust", - "limitingConeAngle", - "markerHeight", - "markerUnits", - "markerWidth", - "maskContentUnits", - "maskUnits", - "numOctaves", - "pathLength", - "patternContentUnits", - "patternTransform", - "patternUnits", - "pointsAtX", - "pointsAtY", - "pointsAtZ", - "preserveAlpha", - "preserveAspectRatio", - "primitiveUnits", - "refX", - "refY", - "repeatCount", - "repeatDur", - "requiredExtensions", - "requiredFeatures", - "specularConstant", - "specularExponent", - "spreadMethod", - "startOffset", - "stdDeviation", - "stitchTiles", - "surfaceScale", - "systemLanguage", - "tableValues", - "targetX", - "targetY", - "textLength", - "viewBox", - "viewTarget", - "xChannelSelector", - "yChannelSelector", - "zoomAndPan" - ].map(function(val) { - return [val.toLowerCase(), val]; - })); -}); - -// node_modules/dom-serializer/lib/index.js -var require_lib4 = __commonJS((exports) => { - var __assign = exports && exports.__assign || function() { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length;i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.render = undefined; - var ElementType = __importStar(require_lib()); - var entities_1 = require_lib3(); - var foreignNames_js_1 = require_foreignNames(); - var unencodedElements = new Set([ - "style", - "script", - "xmp", - "iframe", - "noembed", - "noframes", - "plaintext", - "noscript" - ]); - function replaceQuotes(value) { - return value.replace(/"/g, """); - } - function formatAttributes(attributes, opts) { - var _a; - if (!attributes) - return; - var encode = ((_a = opts.encodeEntities) !== null && _a !== undefined ? _a : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== "utf8" ? entities_1.encodeXML : entities_1.escapeAttribute; - return Object.keys(attributes).map(function(key) { - var _a2, _b; - var value = (_a2 = attributes[key]) !== null && _a2 !== undefined ? _a2 : ""; - if (opts.xmlMode === "foreign") { - key = (_b = foreignNames_js_1.attributeNames.get(key)) !== null && _b !== undefined ? _b : key; - } - if (!opts.emptyAttrs && !opts.xmlMode && value === "") { - return key; - } - return "".concat(key, "=\"").concat(encode(value), "\""); - }).join(" "); - } - var singleTag = new Set([ - "area", - "base", - "basefont", - "br", - "col", - "command", - "embed", - "frame", - "hr", - "img", - "input", - "isindex", - "keygen", - "link", - "meta", - "param", - "source", - "track", - "wbr" - ]); - function render(node, options) { - if (options === undefined) { - options = {}; - } - var nodes = "length" in node ? node : [node]; - var output = ""; - for (var i = 0;i < nodes.length; i++) { - output += renderNode(nodes[i], options); - } - return output; - } - exports.render = render; - exports.default = render; - function renderNode(node, options) { - switch (node.type) { - case ElementType.Root: - return render(node.children, options); - case ElementType.Doctype: - case ElementType.Directive: - return renderDirective(node); - case ElementType.Comment: - return renderComment(node); - case ElementType.CDATA: - return renderCdata(node); - case ElementType.Script: - case ElementType.Style: - case ElementType.Tag: - return renderTag(node, options); - case ElementType.Text: - return renderText(node, options); - } - } - var foreignModeIntegrationPoints = new Set([ - "mi", - "mo", - "mn", - "ms", - "mtext", - "annotation-xml", - "foreignObject", - "desc", - "title" - ]); - var foreignElements = new Set(["svg", "math"]); - function renderTag(elem, opts) { - var _a; - if (opts.xmlMode === "foreign") { - elem.name = (_a = foreignNames_js_1.elementNames.get(elem.name)) !== null && _a !== undefined ? _a : elem.name; - if (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) { - opts = __assign(__assign({}, opts), { xmlMode: false }); - } - } - if (!opts.xmlMode && foreignElements.has(elem.name)) { - opts = __assign(__assign({}, opts), { xmlMode: "foreign" }); - } - var tag = "<".concat(elem.name); - var attribs = formatAttributes(elem.attribs, opts); - if (attribs) { - tag += " ".concat(attribs); - } - if (elem.children.length === 0 && (opts.xmlMode ? opts.selfClosingTags !== false : opts.selfClosingTags && singleTag.has(elem.name))) { - if (!opts.xmlMode) - tag += " "; - tag += "/>"; - } else { - tag += ">"; - if (elem.children.length > 0) { - tag += render(elem.children, opts); - } - if (opts.xmlMode || !singleTag.has(elem.name)) { - tag += ""); - } - } - return tag; - } - function renderDirective(elem) { - return "<".concat(elem.data, ">"); - } - function renderText(elem, opts) { - var _a; - var data = elem.data || ""; - if (((_a = opts.encodeEntities) !== null && _a !== undefined ? _a : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) { - data = opts.xmlMode || opts.encodeEntities !== "utf8" ? (0, entities_1.encodeXML)(data) : (0, entities_1.escapeText)(data); - } - return data; - } - function renderCdata(elem) { - return ""); - } - function renderComment(elem) { - return ""); - } -}); - -// node_modules/domutils/lib/stringify.js -var require_stringify = __commonJS((exports) => { - var __importDefault = exports && exports.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.innerText = exports.textContent = exports.getText = exports.getInnerHTML = exports.getOuterHTML = undefined; - var domhandler_1 = require_lib2(); - var dom_serializer_1 = __importDefault(require_lib4()); - var domelementtype_1 = require_lib(); - function getOuterHTML(node, options) { - return (0, dom_serializer_1.default)(node, options); - } - exports.getOuterHTML = getOuterHTML; - function getInnerHTML(node, options) { - return (0, domhandler_1.hasChildren)(node) ? node.children.map(function(node2) { - return getOuterHTML(node2, options); - }).join("") : ""; - } - exports.getInnerHTML = getInnerHTML; - function getText(node) { - if (Array.isArray(node)) - return node.map(getText).join(""); - if ((0, domhandler_1.isTag)(node)) - return node.name === "br" ? "\n" : getText(node.children); - if ((0, domhandler_1.isCDATA)(node)) - return getText(node.children); - if ((0, domhandler_1.isText)(node)) - return node.data; - return ""; - } - exports.getText = getText; - function textContent(node) { - if (Array.isArray(node)) - return node.map(textContent).join(""); - if ((0, domhandler_1.hasChildren)(node) && !(0, domhandler_1.isComment)(node)) { - return textContent(node.children); - } - if ((0, domhandler_1.isText)(node)) - return node.data; - return ""; - } - exports.textContent = textContent; - function innerText(node) { - if (Array.isArray(node)) - return node.map(innerText).join(""); - if ((0, domhandler_1.hasChildren)(node) && (node.type === domelementtype_1.ElementType.Tag || (0, domhandler_1.isCDATA)(node))) { - return innerText(node.children); - } - if ((0, domhandler_1.isText)(node)) - return node.data; - return ""; - } - exports.innerText = innerText; -}); - -// node_modules/domutils/lib/traversal.js -var require_traversal = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prevElementSibling = exports.nextElementSibling = exports.getName = exports.hasAttrib = exports.getAttributeValue = exports.getSiblings = exports.getParent = exports.getChildren = undefined; - var domhandler_1 = require_lib2(); - function getChildren(elem) { - return (0, domhandler_1.hasChildren)(elem) ? elem.children : []; - } - exports.getChildren = getChildren; - function getParent(elem) { - return elem.parent || null; - } - exports.getParent = getParent; - function getSiblings(elem) { - var _a, _b; - var parent = getParent(elem); - if (parent != null) - return getChildren(parent); - var siblings = [elem]; - var { prev, next } = elem; - while (prev != null) { - siblings.unshift(prev); - _a = prev, prev = _a.prev; - } - while (next != null) { - siblings.push(next); - _b = next, next = _b.next; - } - return siblings; - } - exports.getSiblings = getSiblings; - function getAttributeValue(elem, name) { - var _a; - return (_a = elem.attribs) === null || _a === undefined ? undefined : _a[name]; - } - exports.getAttributeValue = getAttributeValue; - function hasAttrib(elem, name) { - return elem.attribs != null && Object.prototype.hasOwnProperty.call(elem.attribs, name) && elem.attribs[name] != null; - } - exports.hasAttrib = hasAttrib; - function getName(elem) { - return elem.name; - } - exports.getName = getName; - function nextElementSibling(elem) { - var _a; - var next = elem.next; - while (next !== null && !(0, domhandler_1.isTag)(next)) - _a = next, next = _a.next; - return next; - } - exports.nextElementSibling = nextElementSibling; - function prevElementSibling(elem) { - var _a; - var prev = elem.prev; - while (prev !== null && !(0, domhandler_1.isTag)(prev)) - _a = prev, prev = _a.prev; - return prev; - } - exports.prevElementSibling = prevElementSibling; -}); - -// node_modules/domutils/lib/manipulation.js -var require_manipulation = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.prepend = exports.prependChild = exports.append = exports.appendChild = exports.replaceElement = exports.removeElement = undefined; - function removeElement(elem) { - if (elem.prev) - elem.prev.next = elem.next; - if (elem.next) - elem.next.prev = elem.prev; - if (elem.parent) { - var childs = elem.parent.children; - var childsIndex = childs.lastIndexOf(elem); - if (childsIndex >= 0) { - childs.splice(childsIndex, 1); - } - } - elem.next = null; - elem.prev = null; - elem.parent = null; - } - exports.removeElement = removeElement; - function replaceElement(elem, replacement) { - var prev = replacement.prev = elem.prev; - if (prev) { - prev.next = replacement; - } - var next = replacement.next = elem.next; - if (next) { - next.prev = replacement; - } - var parent = replacement.parent = elem.parent; - if (parent) { - var childs = parent.children; - childs[childs.lastIndexOf(elem)] = replacement; - elem.parent = null; - } - } - exports.replaceElement = replaceElement; - function appendChild(parent, child) { - removeElement(child); - child.next = null; - child.parent = parent; - if (parent.children.push(child) > 1) { - var sibling = parent.children[parent.children.length - 2]; - sibling.next = child; - child.prev = sibling; - } else { - child.prev = null; - } - } - exports.appendChild = appendChild; - function append(elem, next) { - removeElement(next); - var parent = elem.parent; - var currNext = elem.next; - next.next = currNext; - next.prev = elem; - elem.next = next; - next.parent = parent; - if (currNext) { - currNext.prev = next; - if (parent) { - var childs = parent.children; - childs.splice(childs.lastIndexOf(currNext), 0, next); - } - } else if (parent) { - parent.children.push(next); - } - } - exports.append = append; - function prependChild(parent, child) { - removeElement(child); - child.parent = parent; - child.prev = null; - if (parent.children.unshift(child) !== 1) { - var sibling = parent.children[1]; - sibling.prev = child; - child.next = sibling; - } else { - child.next = null; - } - } - exports.prependChild = prependChild; - function prepend(elem, prev) { - removeElement(prev); - var parent = elem.parent; - if (parent) { - var childs = parent.children; - childs.splice(childs.indexOf(elem), 0, prev); - } - if (elem.prev) { - elem.prev.next = prev; - } - prev.parent = parent; - prev.prev = elem.prev; - prev.next = elem; - elem.prev = prev; - } - exports.prepend = prepend; -}); - -// node_modules/domutils/lib/querying.js -var require_querying = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.findAll = exports.existsOne = exports.findOne = exports.findOneChild = exports.find = exports.filter = undefined; - var domhandler_1 = require_lib2(); - function filter(test, node, recurse, limit) { - if (recurse === undefined) { - recurse = true; - } - if (limit === undefined) { - limit = Infinity; - } - return find(test, Array.isArray(node) ? node : [node], recurse, limit); - } - exports.filter = filter; - function find(test, nodes, recurse, limit) { - var result = []; - var nodeStack = [nodes]; - var indexStack = [0]; - for (;; ) { - if (indexStack[0] >= nodeStack[0].length) { - if (indexStack.length === 1) { - return result; - } - nodeStack.shift(); - indexStack.shift(); - continue; - } - var elem = nodeStack[0][indexStack[0]++]; - if (test(elem)) { - result.push(elem); - if (--limit <= 0) - return result; - } - if (recurse && (0, domhandler_1.hasChildren)(elem) && elem.children.length > 0) { - indexStack.unshift(0); - nodeStack.unshift(elem.children); - } - } - } - exports.find = find; - function findOneChild(test, nodes) { - return nodes.find(test); - } - exports.findOneChild = findOneChild; - function findOne(test, nodes, recurse) { - if (recurse === undefined) { - recurse = true; - } - var elem = null; - for (var i = 0;i < nodes.length && !elem; i++) { - var node = nodes[i]; - if (!(0, domhandler_1.isTag)(node)) { - continue; - } else if (test(node)) { - elem = node; - } else if (recurse && node.children.length > 0) { - elem = findOne(test, node.children, true); - } - } - return elem; - } - exports.findOne = findOne; - function existsOne(test, nodes) { - return nodes.some(function(checked) { - return (0, domhandler_1.isTag)(checked) && (test(checked) || existsOne(test, checked.children)); - }); - } - exports.existsOne = existsOne; - function findAll(test, nodes) { - var result = []; - var nodeStack = [nodes]; - var indexStack = [0]; - for (;; ) { - if (indexStack[0] >= nodeStack[0].length) { - if (nodeStack.length === 1) { - return result; - } - nodeStack.shift(); - indexStack.shift(); - continue; - } - var elem = nodeStack[0][indexStack[0]++]; - if (!(0, domhandler_1.isTag)(elem)) - continue; - if (test(elem)) - result.push(elem); - if (elem.children.length > 0) { - indexStack.unshift(0); - nodeStack.unshift(elem.children); - } - } - } - exports.findAll = findAll; -}); - -// node_modules/domutils/lib/legacy.js -var require_legacy = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getElementsByTagType = exports.getElementsByTagName = exports.getElementById = exports.getElements = exports.testElement = undefined; - var domhandler_1 = require_lib2(); - var querying_js_1 = require_querying(); - var Checks = { - tag_name: function(name) { - if (typeof name === "function") { - return function(elem) { - return (0, domhandler_1.isTag)(elem) && name(elem.name); - }; - } else if (name === "*") { - return domhandler_1.isTag; - } - return function(elem) { - return (0, domhandler_1.isTag)(elem) && elem.name === name; - }; - }, - tag_type: function(type) { - if (typeof type === "function") { - return function(elem) { - return type(elem.type); - }; - } - return function(elem) { - return elem.type === type; - }; - }, - tag_contains: function(data) { - if (typeof data === "function") { - return function(elem) { - return (0, domhandler_1.isText)(elem) && data(elem.data); - }; - } - return function(elem) { - return (0, domhandler_1.isText)(elem) && elem.data === data; - }; - } - }; - function getAttribCheck(attrib, value) { - if (typeof value === "function") { - return function(elem) { - return (0, domhandler_1.isTag)(elem) && value(elem.attribs[attrib]); - }; - } - return function(elem) { - return (0, domhandler_1.isTag)(elem) && elem.attribs[attrib] === value; - }; - } - function combineFuncs(a, b) { - return function(elem) { - return a(elem) || b(elem); - }; - } - function compileTest(options) { - var funcs = Object.keys(options).map(function(key) { - var value = options[key]; - return Object.prototype.hasOwnProperty.call(Checks, key) ? Checks[key](value) : getAttribCheck(key, value); - }); - return funcs.length === 0 ? null : funcs.reduce(combineFuncs); - } - function testElement(options, node) { - var test = compileTest(options); - return test ? test(node) : true; - } - exports.testElement = testElement; - function getElements(options, nodes, recurse, limit) { - if (limit === undefined) { - limit = Infinity; - } - var test = compileTest(options); - return test ? (0, querying_js_1.filter)(test, nodes, recurse, limit) : []; - } - exports.getElements = getElements; - function getElementById(id, nodes, recurse) { - if (recurse === undefined) { - recurse = true; - } - if (!Array.isArray(nodes)) - nodes = [nodes]; - return (0, querying_js_1.findOne)(getAttribCheck("id", id), nodes, recurse); - } - exports.getElementById = getElementById; - function getElementsByTagName(tagName, nodes, recurse, limit) { - if (recurse === undefined) { - recurse = true; - } - if (limit === undefined) { - limit = Infinity; - } - return (0, querying_js_1.filter)(Checks["tag_name"](tagName), nodes, recurse, limit); - } - exports.getElementsByTagName = getElementsByTagName; - function getElementsByTagType(type, nodes, recurse, limit) { - if (recurse === undefined) { - recurse = true; - } - if (limit === undefined) { - limit = Infinity; - } - return (0, querying_js_1.filter)(Checks["tag_type"](type), nodes, recurse, limit); - } - exports.getElementsByTagType = getElementsByTagType; -}); - -// node_modules/domutils/lib/helpers.js -var require_helpers = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.uniqueSort = exports.compareDocumentPosition = exports.DocumentPosition = exports.removeSubsets = undefined; - var domhandler_1 = require_lib2(); - function removeSubsets(nodes) { - var idx = nodes.length; - while (--idx >= 0) { - var node = nodes[idx]; - if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) { - nodes.splice(idx, 1); - continue; - } - for (var ancestor = node.parent;ancestor; ancestor = ancestor.parent) { - if (nodes.includes(ancestor)) { - nodes.splice(idx, 1); - break; - } - } - } - return nodes; - } - exports.removeSubsets = removeSubsets; - var DocumentPosition; - (function(DocumentPosition2) { - DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED"; - DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING"; - DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING"; - DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS"; - DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY"; - })(DocumentPosition = exports.DocumentPosition || (exports.DocumentPosition = {})); - function compareDocumentPosition(nodeA, nodeB) { - var aParents = []; - var bParents = []; - if (nodeA === nodeB) { - return 0; - } - var current = (0, domhandler_1.hasChildren)(nodeA) ? nodeA : nodeA.parent; - while (current) { - aParents.unshift(current); - current = current.parent; - } - current = (0, domhandler_1.hasChildren)(nodeB) ? nodeB : nodeB.parent; - while (current) { - bParents.unshift(current); - current = current.parent; - } - var maxIdx = Math.min(aParents.length, bParents.length); - var idx = 0; - while (idx < maxIdx && aParents[idx] === bParents[idx]) { - idx++; - } - if (idx === 0) { - return DocumentPosition.DISCONNECTED; - } - var sharedParent = aParents[idx - 1]; - var siblings = sharedParent.children; - var aSibling = aParents[idx]; - var bSibling = bParents[idx]; - if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) { - if (sharedParent === nodeB) { - return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY; - } - return DocumentPosition.FOLLOWING; - } - if (sharedParent === nodeA) { - return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS; - } - return DocumentPosition.PRECEDING; - } - exports.compareDocumentPosition = compareDocumentPosition; - function uniqueSort(nodes) { - nodes = nodes.filter(function(node, i, arr) { - return !arr.includes(node, i + 1); - }); - nodes.sort(function(a, b) { - var relative = compareDocumentPosition(a, b); - if (relative & DocumentPosition.PRECEDING) { - return -1; - } else if (relative & DocumentPosition.FOLLOWING) { - return 1; - } - return 0; - }); - return nodes; - } - exports.uniqueSort = uniqueSort; -}); - -// node_modules/domutils/lib/feeds.js -var require_feeds = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getFeed = undefined; - var stringify_js_1 = require_stringify(); - var legacy_js_1 = require_legacy(); - function getFeed(doc) { - var feedRoot = getOneElement(isValidFeed, doc); - return !feedRoot ? null : feedRoot.name === "feed" ? getAtomFeed(feedRoot) : getRssFeed(feedRoot); - } - exports.getFeed = getFeed; - function getAtomFeed(feedRoot) { - var _a; - var childs = feedRoot.children; - var feed = { - type: "atom", - items: (0, legacy_js_1.getElementsByTagName)("entry", childs).map(function(item) { - var _a2; - var children = item.children; - var entry = { media: getMediaElements(children) }; - addConditionally(entry, "id", "id", children); - addConditionally(entry, "title", "title", children); - var href2 = (_a2 = getOneElement("link", children)) === null || _a2 === undefined ? undefined : _a2.attribs["href"]; - if (href2) { - entry.link = href2; - } - var description = fetch2("summary", children) || fetch2("content", children); - if (description) { - entry.description = description; - } - var pubDate = fetch2("updated", children); - if (pubDate) { - entry.pubDate = new Date(pubDate); - } - return entry; - }) - }; - addConditionally(feed, "id", "id", childs); - addConditionally(feed, "title", "title", childs); - var href = (_a = getOneElement("link", childs)) === null || _a === undefined ? undefined : _a.attribs["href"]; - if (href) { - feed.link = href; - } - addConditionally(feed, "description", "subtitle", childs); - var updated = fetch2("updated", childs); - if (updated) { - feed.updated = new Date(updated); - } - addConditionally(feed, "author", "email", childs, true); - return feed; - } - function getRssFeed(feedRoot) { - var _a, _b; - var childs = (_b = (_a = getOneElement("channel", feedRoot.children)) === null || _a === undefined ? undefined : _a.children) !== null && _b !== undefined ? _b : []; - var feed = { - type: feedRoot.name.substr(0, 3), - id: "", - items: (0, legacy_js_1.getElementsByTagName)("item", feedRoot.children).map(function(item) { - var children = item.children; - var entry = { media: getMediaElements(children) }; - addConditionally(entry, "id", "guid", children); - addConditionally(entry, "title", "title", children); - addConditionally(entry, "link", "link", children); - addConditionally(entry, "description", "description", children); - var pubDate = fetch2("pubDate", children) || fetch2("dc:date", children); - if (pubDate) - entry.pubDate = new Date(pubDate); - return entry; - }) - }; - addConditionally(feed, "title", "title", childs); - addConditionally(feed, "link", "link", childs); - addConditionally(feed, "description", "description", childs); - var updated = fetch2("lastBuildDate", childs); - if (updated) { - feed.updated = new Date(updated); - } - addConditionally(feed, "author", "managingEditor", childs, true); - return feed; - } - var MEDIA_KEYS_STRING = ["url", "type", "lang"]; - var MEDIA_KEYS_INT = [ - "fileSize", - "bitrate", - "framerate", - "samplingrate", - "channels", - "duration", - "height", - "width" - ]; - function getMediaElements(where) { - return (0, legacy_js_1.getElementsByTagName)("media:content", where).map(function(elem) { - var attribs = elem.attribs; - var media = { - medium: attribs["medium"], - isDefault: !!attribs["isDefault"] - }; - for (var _i = 0, MEDIA_KEYS_STRING_1 = MEDIA_KEYS_STRING;_i < MEDIA_KEYS_STRING_1.length; _i++) { - var attrib = MEDIA_KEYS_STRING_1[_i]; - if (attribs[attrib]) { - media[attrib] = attribs[attrib]; - } - } - for (var _a = 0, MEDIA_KEYS_INT_1 = MEDIA_KEYS_INT;_a < MEDIA_KEYS_INT_1.length; _a++) { - var attrib = MEDIA_KEYS_INT_1[_a]; - if (attribs[attrib]) { - media[attrib] = parseInt(attribs[attrib], 10); - } - } - if (attribs["expression"]) { - media.expression = attribs["expression"]; - } - return media; - }); - } - function getOneElement(tagName, node) { - return (0, legacy_js_1.getElementsByTagName)(tagName, node, true, 1)[0]; - } - function fetch2(tagName, where, recurse) { - if (recurse === undefined) { - recurse = false; - } - return (0, stringify_js_1.textContent)((0, legacy_js_1.getElementsByTagName)(tagName, where, recurse, 1)).trim(); - } - function addConditionally(obj, prop, tagName, where, recurse) { - if (recurse === undefined) { - recurse = false; - } - var val = fetch2(tagName, where, recurse); - if (val) - obj[prop] = val; - } - function isValidFeed(value) { - return value === "rss" || value === "feed" || value === "rdf:RDF"; - } -}); - -// node_modules/domutils/lib/index.js -var require_lib5 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) - if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) - __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.hasChildren = exports.isDocument = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = undefined; - __exportStar(require_stringify(), exports); - __exportStar(require_traversal(), exports); - __exportStar(require_manipulation(), exports); - __exportStar(require_querying(), exports); - __exportStar(require_legacy(), exports); - __exportStar(require_helpers(), exports); - __exportStar(require_feeds(), exports); - var domhandler_1 = require_lib2(); - Object.defineProperty(exports, "isTag", { enumerable: true, get: function() { - return domhandler_1.isTag; - } }); - Object.defineProperty(exports, "isCDATA", { enumerable: true, get: function() { - return domhandler_1.isCDATA; - } }); - Object.defineProperty(exports, "isText", { enumerable: true, get: function() { - return domhandler_1.isText; - } }); - Object.defineProperty(exports, "isComment", { enumerable: true, get: function() { - return domhandler_1.isComment; - } }); - Object.defineProperty(exports, "isDocument", { enumerable: true, get: function() { - return domhandler_1.isDocument; - } }); - Object.defineProperty(exports, "hasChildren", { enumerable: true, get: function() { - return domhandler_1.hasChildren; - } }); -}); - -// node_modules/htmlparser2/lib/index.js -var require_lib6 = __commonJS((exports) => { - var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports && exports.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - var __importDefault = exports && exports.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.Tokenizer = exports.createDomStream = exports.parseDOM = exports.parseDocument = exports.DefaultHandler = exports.DomHandler = exports.Parser = undefined; - var Parser_js_1 = require_Parser2(); - var Parser_js_2 = require_Parser2(); - Object.defineProperty(exports, "Parser", { enumerable: true, get: function() { - return Parser_js_2.Parser; - } }); - var domhandler_1 = require_lib2(); - var domhandler_2 = require_lib2(); - Object.defineProperty(exports, "DomHandler", { enumerable: true, get: function() { - return domhandler_2.DomHandler; - } }); - Object.defineProperty(exports, "DefaultHandler", { enumerable: true, get: function() { - return domhandler_2.DomHandler; - } }); - function parseDocument(data, options) { - var handler = new domhandler_1.DomHandler(undefined, options); - new Parser_js_1.Parser(handler, options).end(data); - return handler.root; - } - exports.parseDocument = parseDocument; - function parseDOM(data, options) { - return parseDocument(data, options).children; - } - exports.parseDOM = parseDOM; - function createDomStream(callback, options, elementCallback) { - var handler = new domhandler_1.DomHandler(callback, options, elementCallback); - return new Parser_js_1.Parser(handler, options); - } - exports.createDomStream = createDomStream; - var Tokenizer_js_1 = require_Tokenizer(); - Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function() { - return __importDefault(Tokenizer_js_1).default; - } }); - exports.ElementType = __importStar(require_lib()); - var domutils_1 = require_lib5(); - var domutils_2 = require_lib5(); - Object.defineProperty(exports, "getFeed", { enumerable: true, get: function() { - return domutils_2.getFeed; - } }); - var parseFeedDefaultOptions = { xmlMode: true }; - function parseFeed(feed, options) { - if (options === undefined) { - options = parseFeedDefaultOptions; - } - return (0, domutils_1.getFeed)(parseDOM(feed, options)); - } - exports.parseFeed = parseFeed; - exports.DomUtils = __importStar(require_lib5()); -}); - -// node_modules/escape-string-regexp/index.js -var require_escape_string_regexp = __commonJS((exports, module) => { - module.exports = (string) => { - if (typeof string !== "string") { - throw new TypeError("Expected a string"); - } - return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); - }; -}); - -// node_modules/is-plain-object/dist/is-plain-object.js -var require_is_plain_object = __commonJS((exports) => { - Object.defineProperty(exports, "__esModule", { value: true }); - /*! - * is-plain-object - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - function isObject(o) { - return Object.prototype.toString.call(o) === "[object Object]"; - } - function isPlainObject(o) { - var ctor, prot; - if (isObject(o) === false) - return false; - ctor = o.constructor; - if (ctor === undefined) - return true; - prot = ctor.prototype; - if (isObject(prot) === false) - return false; - if (prot.hasOwnProperty("isPrototypeOf") === false) { - return false; - } - return true; - } - exports.isPlainObject = isPlainObject; -}); - -// node_modules/deepmerge/dist/cjs.js -var require_cjs = __commonJS((exports, module) => { - var isMergeableObject = function isMergeableObject(value) { - return isNonNullObject(value) && !isSpecial(value); - }; - function isNonNullObject(value) { - return !!value && typeof value === "object"; - } - function isSpecial(value) { - var stringValue = Object.prototype.toString.call(value); - return stringValue === "[object RegExp]" || stringValue === "[object Date]" || isReactElement(value); - } - var canUseSymbol = typeof Symbol === "function" && Symbol.for; - var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for("react.element") : 60103; - function isReactElement(value) { - return value.$$typeof === REACT_ELEMENT_TYPE; - } - function emptyTarget(val) { - return Array.isArray(val) ? [] : {}; - } - function cloneUnlessOtherwiseSpecified(value, options) { - return options.clone !== false && options.isMergeableObject(value) ? deepmerge(emptyTarget(value), value, options) : value; - } - function defaultArrayMerge(target, source, options) { - return target.concat(source).map(function(element) { - return cloneUnlessOtherwiseSpecified(element, options); - }); - } - function getMergeFunction(key, options) { - if (!options.customMerge) { - return deepmerge; - } - var customMerge = options.customMerge(key); - return typeof customMerge === "function" ? customMerge : deepmerge; - } - function getEnumerableOwnPropertySymbols(target) { - return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) { - return Object.propertyIsEnumerable.call(target, symbol); - }) : []; - } - function getKeys(target) { - return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)); - } - function propertyIsOnObject(object, property) { - try { - return property in object; - } catch (_) { - return false; - } - } - function propertyIsUnsafe(target, key) { - return propertyIsOnObject(target, key) && !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key)); - } - function mergeObject(target, source, options) { - var destination = {}; - if (options.isMergeableObject(target)) { - getKeys(target).forEach(function(key) { - destination[key] = cloneUnlessOtherwiseSpecified(target[key], options); - }); - } - getKeys(source).forEach(function(key) { - if (propertyIsUnsafe(target, key)) { - return; - } - if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) { - destination[key] = getMergeFunction(key, options)(target[key], source[key], options); - } else { - destination[key] = cloneUnlessOtherwiseSpecified(source[key], options); - } - }); - return destination; - } - function deepmerge(target, source, options) { - options = options || {}; - options.arrayMerge = options.arrayMerge || defaultArrayMerge; - options.isMergeableObject = options.isMergeableObject || isMergeableObject; - options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified; - var sourceIsArray = Array.isArray(source); - var targetIsArray = Array.isArray(target); - var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; - if (!sourceAndTargetTypesMatch) { - return cloneUnlessOtherwiseSpecified(source, options); - } else if (sourceIsArray) { - return options.arrayMerge(target, source, options); - } else { - return mergeObject(target, source, options); - } - } - deepmerge.all = function deepmergeAll(array, options) { - if (!Array.isArray(array)) { - throw new Error("first argument should be an array"); - } - return array.reduce(function(prev, next) { - return deepmerge(prev, next, options); - }, {}); - }; - var deepmerge_1 = deepmerge; - module.exports = deepmerge_1; -}); - -// node_modules/parse-srcset/src/parse-srcset.js -var require_parse_srcset = __commonJS((exports, module) => { - (function(root, factory) { - if (typeof define === "function" && define.amd) { - define([], factory); - } else if (typeof module === "object" && module.exports) { - module.exports = factory(); - } else { - root.parseSrcset = factory(); - } - })(exports, function() { - return function(input) { - function isSpace(c2) { - return c2 === " " || c2 === "\t" || c2 === ` -` || c2 === "\f" || c2 === `\r`; - } - function collectCharacters(regEx) { - var chars, match = regEx.exec(input.substring(pos)); - if (match) { - chars = match[0]; - pos += chars.length; - return chars; - } - } - var inputLength = input.length, regexLeadingSpaces = /^[ \t\n\r\u000c]+/, regexLeadingCommasOrSpaces = /^[, \t\n\r\u000c]+/, regexLeadingNotSpaces = /^[^ \t\n\r\u000c]+/, regexTrailingCommas = /[,]+$/, regexNonNegativeInteger = /^\d+$/, regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/, url, descriptors, currentDescriptor, state, c, pos = 0, candidates = []; - while (true) { - collectCharacters(regexLeadingCommasOrSpaces); - if (pos >= inputLength) { - return candidates; - } - url = collectCharacters(regexLeadingNotSpaces); - descriptors = []; - if (url.slice(-1) === ",") { - url = url.replace(regexTrailingCommas, ""); - parseDescriptors(); - } else { - tokenize(); - } - } - function tokenize() { - collectCharacters(regexLeadingSpaces); - currentDescriptor = ""; - state = "in descriptor"; - while (true) { - c = input.charAt(pos); - if (state === "in descriptor") { - if (isSpace(c)) { - if (currentDescriptor) { - descriptors.push(currentDescriptor); - currentDescriptor = ""; - state = "after descriptor"; - } - } else if (c === ",") { - pos += 1; - if (currentDescriptor) { - descriptors.push(currentDescriptor); - } - parseDescriptors(); - return; - } else if (c === "(") { - currentDescriptor = currentDescriptor + c; - state = "in parens"; - } else if (c === "") { - if (currentDescriptor) { - descriptors.push(currentDescriptor); - } - parseDescriptors(); - return; - } else { - currentDescriptor = currentDescriptor + c; - } - } else if (state === "in parens") { - if (c === ")") { - currentDescriptor = currentDescriptor + c; - state = "in descriptor"; - } else if (c === "") { - descriptors.push(currentDescriptor); - parseDescriptors(); - return; - } else { - currentDescriptor = currentDescriptor + c; - } - } else if (state === "after descriptor") { - if (isSpace(c)) { - } else if (c === "") { - parseDescriptors(); - return; - } else { - state = "in descriptor"; - pos -= 1; - } - } - pos += 1; - } - } - function parseDescriptors() { - var pError = false, w, d, h, i, candidate = {}, desc, lastChar, value, intVal, floatVal; - for (i = 0;i < descriptors.length; i++) { - desc = descriptors[i]; - lastChar = desc[desc.length - 1]; - value = desc.substring(0, desc.length - 1); - intVal = parseInt(value, 10); - floatVal = parseFloat(value); - if (regexNonNegativeInteger.test(value) && lastChar === "w") { - if (w || d) { - pError = true; - } - if (intVal === 0) { - pError = true; - } else { - w = intVal; - } - } else if (regexFloatingPoint.test(value) && lastChar === "x") { - if (w || d || h) { - pError = true; - } - if (floatVal < 0) { - pError = true; - } else { - d = floatVal; - } - } else if (regexNonNegativeInteger.test(value) && lastChar === "h") { - if (h || d) { - pError = true; - } - if (intVal === 0) { - pError = true; - } else { - h = intVal; - } - } else { - pError = true; - } - } - if (!pError) { - candidate.url = url; - if (w) { - candidate.w = w; - } - if (d) { - candidate.d = d; - } - if (h) { - candidate.h = h; - } - candidates.push(candidate); - } else if (console && console.log) { - console.log("Invalid srcset descriptor found in '" + input + "' at '" + desc + "'."); - } - } - }; - }); -}); - -// node_modules/picocolors/picocolors.js -var require_picocolors = __commonJS((exports, module) => { - var p = process || {}; - var argv = p.argv || []; - var env = p.env || {}; - var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI); - var formatter = (open, close, replace = open) => (input) => { - let string = "" + input, index = string.indexOf(close, open.length); - return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close; - }; - var replaceClose = (string, close, replace, index) => { - let result = "", cursor = 0; - do { - result += string.substring(cursor, index) + replace; - cursor = index + close.length; - index = string.indexOf(close, cursor); - } while (~index); - return result + string.substring(cursor); - }; - var createColors = (enabled = isColorSupported) => { - let f = enabled ? formatter : () => String; - return { - isColorSupported: enabled, - reset: f("\x1B[0m", "\x1B[0m"), - bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"), - dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"), - italic: f("\x1B[3m", "\x1B[23m"), - underline: f("\x1B[4m", "\x1B[24m"), - inverse: f("\x1B[7m", "\x1B[27m"), - hidden: f("\x1B[8m", "\x1B[28m"), - strikethrough: f("\x1B[9m", "\x1B[29m"), - black: f("\x1B[30m", "\x1B[39m"), - red: f("\x1B[31m", "\x1B[39m"), - green: f("\x1B[32m", "\x1B[39m"), - yellow: f("\x1B[33m", "\x1B[39m"), - blue: f("\x1B[34m", "\x1B[39m"), - magenta: f("\x1B[35m", "\x1B[39m"), - cyan: f("\x1B[36m", "\x1B[39m"), - white: f("\x1B[37m", "\x1B[39m"), - gray: f("\x1B[90m", "\x1B[39m"), - bgBlack: f("\x1B[40m", "\x1B[49m"), - bgRed: f("\x1B[41m", "\x1B[49m"), - bgGreen: f("\x1B[42m", "\x1B[49m"), - bgYellow: f("\x1B[43m", "\x1B[49m"), - bgBlue: f("\x1B[44m", "\x1B[49m"), - bgMagenta: f("\x1B[45m", "\x1B[49m"), - bgCyan: f("\x1B[46m", "\x1B[49m"), - bgWhite: f("\x1B[47m", "\x1B[49m"), - blackBright: f("\x1B[90m", "\x1B[39m"), - redBright: f("\x1B[91m", "\x1B[39m"), - greenBright: f("\x1B[92m", "\x1B[39m"), - yellowBright: f("\x1B[93m", "\x1B[39m"), - blueBright: f("\x1B[94m", "\x1B[39m"), - magentaBright: f("\x1B[95m", "\x1B[39m"), - cyanBright: f("\x1B[96m", "\x1B[39m"), - whiteBright: f("\x1B[97m", "\x1B[39m"), - bgBlackBright: f("\x1B[100m", "\x1B[49m"), - bgRedBright: f("\x1B[101m", "\x1B[49m"), - bgGreenBright: f("\x1B[102m", "\x1B[49m"), - bgYellowBright: f("\x1B[103m", "\x1B[49m"), - bgBlueBright: f("\x1B[104m", "\x1B[49m"), - bgMagentaBright: f("\x1B[105m", "\x1B[49m"), - bgCyanBright: f("\x1B[106m", "\x1B[49m"), - bgWhiteBright: f("\x1B[107m", "\x1B[49m") - }; - }; - module.exports = createColors(); - module.exports.createColors = createColors; -}); - -// node_modules/postcss/lib/tokenize.js -var require_tokenize = __commonJS((exports, module) => { - var SINGLE_QUOTE = "'".charCodeAt(0); - var DOUBLE_QUOTE = '"'.charCodeAt(0); - var BACKSLASH = "\\".charCodeAt(0); - var SLASH = "/".charCodeAt(0); - var NEWLINE = "\n".charCodeAt(0); - var SPACE = " ".charCodeAt(0); - var FEED = "\f".charCodeAt(0); - var TAB = "\t".charCodeAt(0); - var CR = "\r".charCodeAt(0); - var OPEN_SQUARE = "[".charCodeAt(0); - var CLOSE_SQUARE = "]".charCodeAt(0); - var OPEN_PARENTHESES = "(".charCodeAt(0); - var CLOSE_PARENTHESES = ")".charCodeAt(0); - var OPEN_CURLY = "{".charCodeAt(0); - var CLOSE_CURLY = "}".charCodeAt(0); - var SEMICOLON = ";".charCodeAt(0); - var ASTERISK = "*".charCodeAt(0); - var COLON = ":".charCodeAt(0); - var AT = "@".charCodeAt(0); - var RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g; - var RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g; - var RE_BAD_BRACKET = /.[\r\n"'(/\\]/; - var RE_HEX_ESCAPE = /[\da-f]/i; - module.exports = function tokenizer(input, options = {}) { - let css = input.css.valueOf(); - let ignore = options.ignoreErrors; - let code, content, escape, next, quote; - let currentToken, escaped, escapePos, n, prev; - let length = css.length; - let pos = 0; - let buffer = []; - let returned = []; - function position() { - return pos; - } - function unclosed(what) { - throw input.error("Unclosed " + what, pos); - } - function endOfFile() { - return returned.length === 0 && pos >= length; - } - function nextToken(opts) { - if (returned.length) - return returned.pop(); - if (pos >= length) - return; - let ignoreUnclosed = opts ? opts.ignoreUnclosed : false; - code = css.charCodeAt(pos); - switch (code) { - case NEWLINE: - case SPACE: - case TAB: - case CR: - case FEED: { - next = pos; - do { - next += 1; - code = css.charCodeAt(next); - } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED); - currentToken = ["space", css.slice(pos, next)]; - pos = next - 1; - break; - } - case OPEN_SQUARE: - case CLOSE_SQUARE: - case OPEN_CURLY: - case CLOSE_CURLY: - case COLON: - case SEMICOLON: - case CLOSE_PARENTHESES: { - let controlChar = String.fromCharCode(code); - currentToken = [controlChar, controlChar, pos]; - break; - } - case OPEN_PARENTHESES: { - prev = buffer.length ? buffer.pop()[1] : ""; - n = css.charCodeAt(pos + 1); - if (prev === "url" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) { - next = pos; - do { - escaped = false; - next = css.indexOf(")", next + 1); - if (next === -1) { - if (ignore || ignoreUnclosed) { - next = pos; - break; - } else { - unclosed("bracket"); - } - } - escapePos = next; - while (css.charCodeAt(escapePos - 1) === BACKSLASH) { - escapePos -= 1; - escaped = !escaped; - } - } while (escaped); - currentToken = ["brackets", css.slice(pos, next + 1), pos, next]; - pos = next; - } else { - next = css.indexOf(")", pos + 1); - content = css.slice(pos, next + 1); - if (next === -1 || RE_BAD_BRACKET.test(content)) { - currentToken = ["(", "(", pos]; - } else { - currentToken = ["brackets", content, pos, next]; - pos = next; - } - } - break; - } - case SINGLE_QUOTE: - case DOUBLE_QUOTE: { - quote = code === SINGLE_QUOTE ? "'" : '"'; - next = pos; - do { - escaped = false; - next = css.indexOf(quote, next + 1); - if (next === -1) { - if (ignore || ignoreUnclosed) { - next = pos + 1; - break; - } else { - unclosed("string"); - } - } - escapePos = next; - while (css.charCodeAt(escapePos - 1) === BACKSLASH) { - escapePos -= 1; - escaped = !escaped; - } - } while (escaped); - currentToken = ["string", css.slice(pos, next + 1), pos, next]; - pos = next; - break; - } - case AT: { - RE_AT_END.lastIndex = pos + 1; - RE_AT_END.test(css); - if (RE_AT_END.lastIndex === 0) { - next = css.length - 1; - } else { - next = RE_AT_END.lastIndex - 2; - } - currentToken = ["at-word", css.slice(pos, next + 1), pos, next]; - pos = next; - break; - } - case BACKSLASH: { - next = pos; - escape = true; - while (css.charCodeAt(next + 1) === BACKSLASH) { - next += 1; - escape = !escape; - } - code = css.charCodeAt(next + 1); - if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) { - next += 1; - if (RE_HEX_ESCAPE.test(css.charAt(next))) { - while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) { - next += 1; - } - if (css.charCodeAt(next + 1) === SPACE) { - next += 1; - } - } - } - currentToken = ["word", css.slice(pos, next + 1), pos, next]; - pos = next; - break; - } - default: { - if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) { - next = css.indexOf("*/", pos + 2) + 1; - if (next === 0) { - if (ignore || ignoreUnclosed) { - next = css.length; - } else { - unclosed("comment"); - } - } - currentToken = ["comment", css.slice(pos, next + 1), pos, next]; - pos = next; - } else { - RE_WORD_END.lastIndex = pos + 1; - RE_WORD_END.test(css); - if (RE_WORD_END.lastIndex === 0) { - next = css.length - 1; - } else { - next = RE_WORD_END.lastIndex - 2; - } - currentToken = ["word", css.slice(pos, next + 1), pos, next]; - buffer.push(currentToken); - pos = next; - } - break; - } - } - pos++; - return currentToken; - } - function back(token) { - returned.push(token); - } - return { - back, - endOfFile, - nextToken, - position - }; - }; -}); - -// node_modules/postcss/lib/terminal-highlight.js -var require_terminal_highlight = __commonJS((exports, module) => { - var pico = require_picocolors(); - var tokenizer = require_tokenize(); - var Input; - function registerInput(dependant) { - Input = dependant; - } - var HIGHLIGHT_THEME = { - ";": pico.yellow, - ":": pico.yellow, - "(": pico.cyan, - ")": pico.cyan, - "[": pico.yellow, - "]": pico.yellow, - "{": pico.yellow, - "}": pico.yellow, - "at-word": pico.cyan, - brackets: pico.cyan, - call: pico.cyan, - class: pico.yellow, - comment: pico.gray, - hash: pico.magenta, - string: pico.green - }; - function getTokenType([type, value], processor) { - if (type === "word") { - if (value[0] === ".") { - return "class"; - } - if (value[0] === "#") { - return "hash"; - } - } - if (!processor.endOfFile()) { - let next = processor.nextToken(); - processor.back(next); - if (next[0] === "brackets" || next[0] === "(") - return "call"; - } - return type; - } - function terminalHighlight(css) { - let processor = tokenizer(new Input(css), { ignoreErrors: true }); - let result = ""; - while (!processor.endOfFile()) { - let token = processor.nextToken(); - let color = HIGHLIGHT_THEME[getTokenType(token, processor)]; - if (color) { - result += token[1].split(/\r?\n/).map((i) => color(i)).join("\n"); - } else { - result += token[1]; - } - } - return result; - } - terminalHighlight.registerInput = registerInput; - module.exports = terminalHighlight; -}); - -// node_modules/postcss/lib/css-syntax-error.js -var require_css_syntax_error = __commonJS((exports, module) => { - var pico = require_picocolors(); - var terminalHighlight = require_terminal_highlight(); - - class CssSyntaxError extends Error { - constructor(message, line, column, source, file, plugin) { - super(message); - this.name = "CssSyntaxError"; - this.reason = message; - if (file) { - this.file = file; - } - if (source) { - this.source = source; - } - if (plugin) { - this.plugin = plugin; - } - if (typeof line !== "undefined" && typeof column !== "undefined") { - if (typeof line === "number") { - this.line = line; - this.column = column; - } else { - this.line = line.line; - this.column = line.column; - this.endLine = column.line; - this.endColumn = column.column; - } - } - this.setMessage(); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, CssSyntaxError); - } - } - setMessage() { - this.message = this.plugin ? this.plugin + ": " : ""; - this.message += this.file ? this.file : ""; - if (typeof this.line !== "undefined") { - this.message += ":" + this.line + ":" + this.column; - } - this.message += ": " + this.reason; - } - showSourceCode(color) { - if (!this.source) - return ""; - let css = this.source; - if (color == null) - color = pico.isColorSupported; - let aside = (text) => text; - let mark = (text) => text; - let highlight = (text) => text; - if (color) { - let { bold, gray, red } = pico.createColors(true); - mark = (text) => bold(red(text)); - aside = (text) => gray(text); - if (terminalHighlight) { - highlight = (text) => terminalHighlight(text); - } - } - let lines = css.split(/\r?\n/); - let start = Math.max(this.line - 3, 0); - let end = Math.min(this.line + 2, lines.length); - let maxWidth = String(end).length; - return lines.slice(start, end).map((line, index) => { - let number = start + 1 + index; - let gutter = " " + (" " + number).slice(-maxWidth) + " | "; - if (number === this.line) { - if (line.length > 160) { - let padding = 20; - let subLineStart = Math.max(0, this.column - padding); - let subLineEnd = Math.max(this.column + padding, this.endColumn + padding); - let subLine = line.slice(subLineStart, subLineEnd); - let spacing2 = aside(gutter.replace(/\d/g, " ")) + line.slice(0, Math.min(this.column - 1, padding - 1)).replace(/[^\t]/g, " "); - return mark(">") + aside(gutter) + highlight(subLine) + "\n " + spacing2 + mark("^"); - } - let spacing = aside(gutter.replace(/\d/g, " ")) + line.slice(0, this.column - 1).replace(/[^\t]/g, " "); - return mark(">") + aside(gutter) + highlight(line) + "\n " + spacing + mark("^"); - } - return " " + aside(gutter) + highlight(line); - }).join("\n"); - } - toString() { - let code = this.showSourceCode(); - if (code) { - code = "\n\n" + code + "\n"; - } - return this.name + ": " + this.message + code; - } - } - module.exports = CssSyntaxError; - CssSyntaxError.default = CssSyntaxError; -}); - -// node_modules/postcss/lib/stringifier.js -var require_stringifier = __commonJS((exports, module) => { - var DEFAULT_RAW = { - after: "\n", - beforeClose: "\n", - beforeComment: "\n", - beforeDecl: "\n", - beforeOpen: " ", - beforeRule: "\n", - colon: ": ", - commentLeft: " ", - commentRight: " ", - emptyBody: "", - indent: " ", - semicolon: false - }; - function capitalize(str) { - return str[0].toUpperCase() + str.slice(1); - } - - class Stringifier { - constructor(builder) { - this.builder = builder; - } - atrule(node, semicolon) { - let name = "@" + node.name; - let params = node.params ? this.rawValue(node, "params") : ""; - if (typeof node.raws.afterName !== "undefined") { - name += node.raws.afterName; - } else if (params) { - name += " "; - } - if (node.nodes) { - this.block(node, name + params); - } else { - let end = (node.raws.between || "") + (semicolon ? ";" : ""); - this.builder(name + params + end, node); - } - } - beforeAfter(node, detect) { - let value; - if (node.type === "decl") { - value = this.raw(node, null, "beforeDecl"); - } else if (node.type === "comment") { - value = this.raw(node, null, "beforeComment"); - } else if (detect === "before") { - value = this.raw(node, null, "beforeRule"); - } else { - value = this.raw(node, null, "beforeClose"); - } - let buf = node.parent; - let depth = 0; - while (buf && buf.type !== "root") { - depth += 1; - buf = buf.parent; - } - if (value.includes("\n")) { - let indent = this.raw(node, null, "indent"); - if (indent.length) { - for (let step = 0;step < depth; step++) - value += indent; - } - } - return value; - } - block(node, start) { - let between = this.raw(node, "between", "beforeOpen"); - this.builder(start + between + "{", node, "start"); - let after; - if (node.nodes && node.nodes.length) { - this.body(node); - after = this.raw(node, "after"); - } else { - after = this.raw(node, "after", "emptyBody"); - } - if (after) - this.builder(after); - this.builder("}", node, "end"); - } - body(node) { - let last = node.nodes.length - 1; - while (last > 0) { - if (node.nodes[last].type !== "comment") - break; - last -= 1; - } - let semicolon = this.raw(node, "semicolon"); - for (let i = 0;i < node.nodes.length; i++) { - let child = node.nodes[i]; - let before = this.raw(child, "before"); - if (before) - this.builder(before); - this.stringify(child, last !== i || semicolon); - } - } - comment(node) { - let left = this.raw(node, "left", "commentLeft"); - let right = this.raw(node, "right", "commentRight"); - this.builder("/*" + left + node.text + right + "*/", node); - } - decl(node, semicolon) { - let between = this.raw(node, "between", "colon"); - let string = node.prop + between + this.rawValue(node, "value"); - if (node.important) { - string += node.raws.important || " !important"; - } - if (semicolon) - string += ";"; - this.builder(string, node); - } - document(node) { - this.body(node); - } - raw(node, own, detect) { - let value; - if (!detect) - detect = own; - if (own) { - value = node.raws[own]; - if (typeof value !== "undefined") - return value; - } - let parent = node.parent; - if (detect === "before") { - if (!parent || parent.type === "root" && parent.first === node) { - return ""; - } - if (parent && parent.type === "document") { - return ""; - } - } - if (!parent) - return DEFAULT_RAW[detect]; - let root = node.root(); - if (!root.rawCache) - root.rawCache = {}; - if (typeof root.rawCache[detect] !== "undefined") { - return root.rawCache[detect]; - } - if (detect === "before" || detect === "after") { - return this.beforeAfter(node, detect); - } else { - let method = "raw" + capitalize(detect); - if (this[method]) { - value = this[method](root, node); - } else { - root.walk((i) => { - value = i.raws[own]; - if (typeof value !== "undefined") - return false; - }); - } - } - if (typeof value === "undefined") - value = DEFAULT_RAW[detect]; - root.rawCache[detect] = value; - return value; - } - rawBeforeClose(root) { - let value; - root.walk((i) => { - if (i.nodes && i.nodes.length > 0) { - if (typeof i.raws.after !== "undefined") { - value = i.raws.after; - if (value.includes("\n")) { - value = value.replace(/[^\n]+$/, ""); - } - return false; - } - } - }); - if (value) - value = value.replace(/\S/g, ""); - return value; - } - rawBeforeComment(root, node) { - let value; - root.walkComments((i) => { - if (typeof i.raws.before !== "undefined") { - value = i.raws.before; - if (value.includes("\n")) { - value = value.replace(/[^\n]+$/, ""); - } - return false; - } - }); - if (typeof value === "undefined") { - value = this.raw(node, null, "beforeDecl"); - } else if (value) { - value = value.replace(/\S/g, ""); - } - return value; - } - rawBeforeDecl(root, node) { - let value; - root.walkDecls((i) => { - if (typeof i.raws.before !== "undefined") { - value = i.raws.before; - if (value.includes("\n")) { - value = value.replace(/[^\n]+$/, ""); - } - return false; - } - }); - if (typeof value === "undefined") { - value = this.raw(node, null, "beforeRule"); - } else if (value) { - value = value.replace(/\S/g, ""); - } - return value; - } - rawBeforeOpen(root) { - let value; - root.walk((i) => { - if (i.type !== "decl") { - value = i.raws.between; - if (typeof value !== "undefined") - return false; - } - }); - return value; - } - rawBeforeRule(root) { - let value; - root.walk((i) => { - if (i.nodes && (i.parent !== root || root.first !== i)) { - if (typeof i.raws.before !== "undefined") { - value = i.raws.before; - if (value.includes("\n")) { - value = value.replace(/[^\n]+$/, ""); - } - return false; - } - } - }); - if (value) - value = value.replace(/\S/g, ""); - return value; - } - rawColon(root) { - let value; - root.walkDecls((i) => { - if (typeof i.raws.between !== "undefined") { - value = i.raws.between.replace(/[^\s:]/g, ""); - return false; - } - }); - return value; - } - rawEmptyBody(root) { - let value; - root.walk((i) => { - if (i.nodes && i.nodes.length === 0) { - value = i.raws.after; - if (typeof value !== "undefined") - return false; - } - }); - return value; - } - rawIndent(root) { - if (root.raws.indent) - return root.raws.indent; - let value; - root.walk((i) => { - let p = i.parent; - if (p && p !== root && p.parent && p.parent === root) { - if (typeof i.raws.before !== "undefined") { - let parts = i.raws.before.split("\n"); - value = parts[parts.length - 1]; - value = value.replace(/\S/g, ""); - return false; - } - } - }); - return value; - } - rawSemicolon(root) { - let value; - root.walk((i) => { - if (i.nodes && i.nodes.length && i.last.type === "decl") { - value = i.raws.semicolon; - if (typeof value !== "undefined") - return false; - } - }); - return value; - } - rawValue(node, prop) { - let value = node[prop]; - let raw = node.raws[prop]; - if (raw && raw.value === value) { - return raw.raw; - } - return value; - } - root(node) { - this.body(node); - if (node.raws.after) - this.builder(node.raws.after); - } - rule(node) { - this.block(node, this.rawValue(node, "selector")); - if (node.raws.ownSemicolon) { - this.builder(node.raws.ownSemicolon, node, "end"); - } - } - stringify(node, semicolon) { - if (!this[node.type]) { - throw new Error("Unknown AST node type " + node.type + ". " + "Maybe you need to change PostCSS stringifier."); - } - this[node.type](node, semicolon); - } - } - module.exports = Stringifier; - Stringifier.default = Stringifier; -}); - -// node_modules/postcss/lib/stringify.js -var require_stringify2 = __commonJS((exports, module) => { - var Stringifier = require_stringifier(); - function stringify(node, builder) { - let str = new Stringifier(builder); - str.stringify(node); - } - module.exports = stringify; - stringify.default = stringify; -}); - -// node_modules/postcss/lib/symbols.js -var require_symbols = __commonJS((exports, module) => { - exports.isClean = Symbol("isClean"); - exports.my = Symbol("my"); -}); - -// node_modules/postcss/lib/node.js -var require_node3 = __commonJS((exports, module) => { - var CssSyntaxError = require_css_syntax_error(); - var Stringifier = require_stringifier(); - var stringify = require_stringify2(); - var { isClean, my } = require_symbols(); - function cloneNode(obj, parent) { - let cloned = new obj.constructor; - for (let i in obj) { - if (!Object.prototype.hasOwnProperty.call(obj, i)) { - continue; - } - if (i === "proxyCache") - continue; - let value = obj[i]; - let type = typeof value; - if (i === "parent" && type === "object") { - if (parent) - cloned[i] = parent; - } else if (i === "source") { - cloned[i] = value; - } else if (Array.isArray(value)) { - cloned[i] = value.map((j) => cloneNode(j, cloned)); - } else { - if (type === "object" && value !== null) - value = cloneNode(value); - cloned[i] = value; - } - } - return cloned; - } - - class Node { - constructor(defaults = {}) { - this.raws = {}; - this[isClean] = false; - this[my] = true; - for (let name in defaults) { - if (name === "nodes") { - this.nodes = []; - for (let node of defaults[name]) { - if (typeof node.clone === "function") { - this.append(node.clone()); - } else { - this.append(node); - } - } - } else { - this[name] = defaults[name]; - } - } - } - addToError(error) { - error.postcssNode = this; - if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) { - let s = this.source; - error.stack = error.stack.replace(/\n\s{4}at /, `\$&${s.input.from}:${s.start.line}:${s.start.column}\$&`); - } - return error; - } - after(add) { - this.parent.insertAfter(this, add); - return this; - } - assign(overrides = {}) { - for (let name in overrides) { - this[name] = overrides[name]; - } - return this; - } - before(add) { - this.parent.insertBefore(this, add); - return this; - } - cleanRaws(keepBetween) { - delete this.raws.before; - delete this.raws.after; - if (!keepBetween) - delete this.raws.between; - } - clone(overrides = {}) { - let cloned = cloneNode(this); - for (let name in overrides) { - cloned[name] = overrides[name]; - } - return cloned; - } - cloneAfter(overrides = {}) { - let cloned = this.clone(overrides); - this.parent.insertAfter(this, cloned); - return cloned; - } - cloneBefore(overrides = {}) { - let cloned = this.clone(overrides); - this.parent.insertBefore(this, cloned); - return cloned; - } - error(message, opts = {}) { - if (this.source) { - let { end, start } = this.rangeBy(opts); - return this.source.input.error(message, { column: start.column, line: start.line }, { column: end.column, line: end.line }, opts); - } - return new CssSyntaxError(message); - } - getProxyProcessor() { - return { - get(node, prop) { - if (prop === "proxyOf") { - return node; - } else if (prop === "root") { - return () => node.root().toProxy(); - } else { - return node[prop]; - } - }, - set(node, prop, value) { - if (node[prop] === value) - return true; - node[prop] = value; - if (prop === "prop" || prop === "value" || prop === "name" || prop === "params" || prop === "important" || prop === "text") { - node.markDirty(); - } - return true; - } - }; - } - markClean() { - this[isClean] = true; - } - markDirty() { - if (this[isClean]) { - this[isClean] = false; - let next = this; - while (next = next.parent) { - next[isClean] = false; - } - } - } - next() { - if (!this.parent) - return; - let index = this.parent.index(this); - return this.parent.nodes[index + 1]; - } - positionBy(opts, stringRepresentation) { - let pos = this.source.start; - if (opts.index) { - pos = this.positionInside(opts.index, stringRepresentation); - } else if (opts.word) { - stringRepresentation = this.toString(); - let index = stringRepresentation.indexOf(opts.word); - if (index !== -1) - pos = this.positionInside(index, stringRepresentation); - } - return pos; - } - positionInside(index, stringRepresentation) { - let string = stringRepresentation || this.toString(); - let column = this.source.start.column; - let line = this.source.start.line; - for (let i = 0;i < index; i++) { - if (string[i] === "\n") { - column = 1; - line += 1; - } else { - column += 1; - } - } - return { column, line }; - } - prev() { - if (!this.parent) - return; - let index = this.parent.index(this); - return this.parent.nodes[index - 1]; - } - rangeBy(opts) { - let start = { - column: this.source.start.column, - line: this.source.start.line - }; - let end = this.source.end ? { - column: this.source.end.column + 1, - line: this.source.end.line - } : { - column: start.column + 1, - line: start.line - }; - if (opts.word) { - let stringRepresentation = this.toString(); - let index = stringRepresentation.indexOf(opts.word); - if (index !== -1) { - start = this.positionInside(index, stringRepresentation); - end = this.positionInside(index + opts.word.length, stringRepresentation); - } - } else { - if (opts.start) { - start = { - column: opts.start.column, - line: opts.start.line - }; - } else if (opts.index) { - start = this.positionInside(opts.index); - } - if (opts.end) { - end = { - column: opts.end.column, - line: opts.end.line - }; - } else if (typeof opts.endIndex === "number") { - end = this.positionInside(opts.endIndex); - } else if (opts.index) { - end = this.positionInside(opts.index + 1); - } - } - if (end.line < start.line || end.line === start.line && end.column <= start.column) { - end = { column: start.column + 1, line: start.line }; - } - return { end, start }; - } - raw(prop, defaultType) { - let str = new Stringifier; - return str.raw(this, prop, defaultType); - } - remove() { - if (this.parent) { - this.parent.removeChild(this); - } - this.parent = undefined; - return this; - } - replaceWith(...nodes) { - if (this.parent) { - let bookmark = this; - let foundSelf = false; - for (let node of nodes) { - if (node === this) { - foundSelf = true; - } else if (foundSelf) { - this.parent.insertAfter(bookmark, node); - bookmark = node; - } else { - this.parent.insertBefore(bookmark, node); - } - } - if (!foundSelf) { - this.remove(); - } - } - return this; - } - root() { - let result = this; - while (result.parent && result.parent.type !== "document") { - result = result.parent; - } - return result; - } - toJSON(_, inputs) { - let fixed = {}; - let emitInputs = inputs == null; - inputs = inputs || new Map; - let inputsNextIndex = 0; - for (let name in this) { - if (!Object.prototype.hasOwnProperty.call(this, name)) { - continue; - } - if (name === "parent" || name === "proxyCache") - continue; - let value = this[name]; - if (Array.isArray(value)) { - fixed[name] = value.map((i) => { - if (typeof i === "object" && i.toJSON) { - return i.toJSON(null, inputs); - } else { - return i; - } - }); - } else if (typeof value === "object" && value.toJSON) { - fixed[name] = value.toJSON(null, inputs); - } else if (name === "source") { - let inputId = inputs.get(value.input); - if (inputId == null) { - inputId = inputsNextIndex; - inputs.set(value.input, inputsNextIndex); - inputsNextIndex++; - } - fixed[name] = { - end: value.end, - inputId, - start: value.start - }; - } else { - fixed[name] = value; - } - } - if (emitInputs) { - fixed.inputs = [...inputs.keys()].map((input) => input.toJSON()); - } - return fixed; - } - toProxy() { - if (!this.proxyCache) { - this.proxyCache = new Proxy(this, this.getProxyProcessor()); - } - return this.proxyCache; - } - toString(stringifier = stringify) { - if (stringifier.stringify) - stringifier = stringifier.stringify; - let result = ""; - stringifier(this, (i) => { - result += i; - }); - return result; - } - warn(result, text, opts) { - let data = { node: this }; - for (let i in opts) - data[i] = opts[i]; - return result.warn(text, data); - } - get proxyOf() { - return this; - } - } - module.exports = Node; - Node.default = Node; -}); - -// node_modules/postcss/lib/comment.js -var require_comment = __commonJS((exports, module) => { - var Node = require_node3(); - - class Comment extends Node { - constructor(defaults) { - super(defaults); - this.type = "comment"; - } - } - module.exports = Comment; - Comment.default = Comment; -}); - -// node_modules/postcss/lib/declaration.js -var require_declaration = __commonJS((exports, module) => { - var Node = require_node3(); - - class Declaration extends Node { - constructor(defaults) { - if (defaults && typeof defaults.value !== "undefined" && typeof defaults.value !== "string") { - defaults = { ...defaults, value: String(defaults.value) }; - } - super(defaults); - this.type = "decl"; - } - get variable() { - return this.prop.startsWith("--") || this.prop[0] === "$"; - } - } - module.exports = Declaration; - Declaration.default = Declaration; -}); - -// node_modules/postcss/lib/container.js -var require_container = __commonJS((exports, module) => { - var Comment = require_comment(); - var Declaration = require_declaration(); - var Node = require_node3(); - var { isClean, my } = require_symbols(); - var AtRule; - var parse; - var Root; - var Rule; - function cleanSource(nodes) { - return nodes.map((i) => { - if (i.nodes) - i.nodes = cleanSource(i.nodes); - delete i.source; - return i; - }); - } - function markTreeDirty(node) { - node[isClean] = false; - if (node.proxyOf.nodes) { - for (let i of node.proxyOf.nodes) { - markTreeDirty(i); - } - } - } - - class Container extends Node { - append(...children) { - for (let child of children) { - let nodes = this.normalize(child, this.last); - for (let node of nodes) - this.proxyOf.nodes.push(node); - } - this.markDirty(); - return this; - } - cleanRaws(keepBetween) { - super.cleanRaws(keepBetween); - if (this.nodes) { - for (let node of this.nodes) - node.cleanRaws(keepBetween); - } - } - each(callback) { - if (!this.proxyOf.nodes) - return; - let iterator = this.getIterator(); - let index, result; - while (this.indexes[iterator] < this.proxyOf.nodes.length) { - index = this.indexes[iterator]; - result = callback(this.proxyOf.nodes[index], index); - if (result === false) - break; - this.indexes[iterator] += 1; - } - delete this.indexes[iterator]; - return result; - } - every(condition) { - return this.nodes.every(condition); - } - getIterator() { - if (!this.lastEach) - this.lastEach = 0; - if (!this.indexes) - this.indexes = {}; - this.lastEach += 1; - let iterator = this.lastEach; - this.indexes[iterator] = 0; - return iterator; - } - getProxyProcessor() { - return { - get(node, prop) { - if (prop === "proxyOf") { - return node; - } else if (!node[prop]) { - return node[prop]; - } else if (prop === "each" || typeof prop === "string" && prop.startsWith("walk")) { - return (...args) => { - return node[prop](...args.map((i) => { - if (typeof i === "function") { - return (child, index) => i(child.toProxy(), index); - } else { - return i; - } - })); - }; - } else if (prop === "every" || prop === "some") { - return (cb) => { - return node[prop]((child, ...other) => cb(child.toProxy(), ...other)); - }; - } else if (prop === "root") { - return () => node.root().toProxy(); - } else if (prop === "nodes") { - return node.nodes.map((i) => i.toProxy()); - } else if (prop === "first" || prop === "last") { - return node[prop].toProxy(); - } else { - return node[prop]; - } - }, - set(node, prop, value) { - if (node[prop] === value) - return true; - node[prop] = value; - if (prop === "name" || prop === "params" || prop === "selector") { - node.markDirty(); - } - return true; - } - }; - } - index(child) { - if (typeof child === "number") - return child; - if (child.proxyOf) - child = child.proxyOf; - return this.proxyOf.nodes.indexOf(child); - } - insertAfter(exist, add) { - let existIndex = this.index(exist); - let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse(); - existIndex = this.index(exist); - for (let node of nodes) - this.proxyOf.nodes.splice(existIndex + 1, 0, node); - let index; - for (let id in this.indexes) { - index = this.indexes[id]; - if (existIndex < index) { - this.indexes[id] = index + nodes.length; - } - } - this.markDirty(); - return this; - } - insertBefore(exist, add) { - let existIndex = this.index(exist); - let type = existIndex === 0 ? "prepend" : false; - let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse(); - existIndex = this.index(exist); - for (let node of nodes) - this.proxyOf.nodes.splice(existIndex, 0, node); - let index; - for (let id in this.indexes) { - index = this.indexes[id]; - if (existIndex <= index) { - this.indexes[id] = index + nodes.length; - } - } - this.markDirty(); - return this; - } - normalize(nodes, sample) { - if (typeof nodes === "string") { - nodes = cleanSource(parse(nodes).nodes); - } else if (typeof nodes === "undefined") { - nodes = []; - } else if (Array.isArray(nodes)) { - nodes = nodes.slice(0); - for (let i of nodes) { - if (i.parent) - i.parent.removeChild(i, "ignore"); - } - } else if (nodes.type === "root" && this.type !== "document") { - nodes = nodes.nodes.slice(0); - for (let i of nodes) { - if (i.parent) - i.parent.removeChild(i, "ignore"); - } - } else if (nodes.type) { - nodes = [nodes]; - } else if (nodes.prop) { - if (typeof nodes.value === "undefined") { - throw new Error("Value field is missed in node creation"); - } else if (typeof nodes.value !== "string") { - nodes.value = String(nodes.value); - } - nodes = [new Declaration(nodes)]; - } else if (nodes.selector || nodes.selectors) { - nodes = [new Rule(nodes)]; - } else if (nodes.name) { - nodes = [new AtRule(nodes)]; - } else if (nodes.text) { - nodes = [new Comment(nodes)]; - } else { - throw new Error("Unknown node type in node creation"); - } - let processed = nodes.map((i) => { - if (!i[my]) - Container.rebuild(i); - i = i.proxyOf; - if (i.parent) - i.parent.removeChild(i); - if (i[isClean]) - markTreeDirty(i); - if (!i.raws) - i.raws = {}; - if (typeof i.raws.before === "undefined") { - if (sample && typeof sample.raws.before !== "undefined") { - i.raws.before = sample.raws.before.replace(/\S/g, ""); - } - } - i.parent = this.proxyOf; - return i; - }); - return processed; - } - prepend(...children) { - children = children.reverse(); - for (let child of children) { - let nodes = this.normalize(child, this.first, "prepend").reverse(); - for (let node of nodes) - this.proxyOf.nodes.unshift(node); - for (let id in this.indexes) { - this.indexes[id] = this.indexes[id] + nodes.length; - } - } - this.markDirty(); - return this; - } - push(child) { - child.parent = this; - this.proxyOf.nodes.push(child); - return this; - } - removeAll() { - for (let node of this.proxyOf.nodes) - node.parent = undefined; - this.proxyOf.nodes = []; - this.markDirty(); - return this; - } - removeChild(child) { - child = this.index(child); - this.proxyOf.nodes[child].parent = undefined; - this.proxyOf.nodes.splice(child, 1); - let index; - for (let id in this.indexes) { - index = this.indexes[id]; - if (index >= child) { - this.indexes[id] = index - 1; - } - } - this.markDirty(); - return this; - } - replaceValues(pattern, opts, callback) { - if (!callback) { - callback = opts; - opts = {}; - } - this.walkDecls((decl) => { - if (opts.props && !opts.props.includes(decl.prop)) - return; - if (opts.fast && !decl.value.includes(opts.fast)) - return; - decl.value = decl.value.replace(pattern, callback); - }); - this.markDirty(); - return this; - } - some(condition) { - return this.nodes.some(condition); - } - walk(callback) { - return this.each((child, i) => { - let result; - try { - result = callback(child, i); - } catch (e) { - throw child.addToError(e); - } - if (result !== false && child.walk) { - result = child.walk(callback); - } - return result; - }); - } - walkAtRules(name, callback) { - if (!callback) { - callback = name; - return this.walk((child, i) => { - if (child.type === "atrule") { - return callback(child, i); - } - }); - } - if (name instanceof RegExp) { - return this.walk((child, i) => { - if (child.type === "atrule" && name.test(child.name)) { - return callback(child, i); - } - }); - } - return this.walk((child, i) => { - if (child.type === "atrule" && child.name === name) { - return callback(child, i); - } - }); - } - walkComments(callback) { - return this.walk((child, i) => { - if (child.type === "comment") { - return callback(child, i); - } - }); - } - walkDecls(prop, callback) { - if (!callback) { - callback = prop; - return this.walk((child, i) => { - if (child.type === "decl") { - return callback(child, i); - } - }); - } - if (prop instanceof RegExp) { - return this.walk((child, i) => { - if (child.type === "decl" && prop.test(child.prop)) { - return callback(child, i); - } - }); - } - return this.walk((child, i) => { - if (child.type === "decl" && child.prop === prop) { - return callback(child, i); - } - }); - } - walkRules(selector, callback) { - if (!callback) { - callback = selector; - return this.walk((child, i) => { - if (child.type === "rule") { - return callback(child, i); - } - }); - } - if (selector instanceof RegExp) { - return this.walk((child, i) => { - if (child.type === "rule" && selector.test(child.selector)) { - return callback(child, i); - } - }); - } - return this.walk((child, i) => { - if (child.type === "rule" && child.selector === selector) { - return callback(child, i); - } - }); - } - get first() { - if (!this.proxyOf.nodes) - return; - return this.proxyOf.nodes[0]; - } - get last() { - if (!this.proxyOf.nodes) - return; - return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]; - } - } - Container.registerParse = (dependant) => { - parse = dependant; - }; - Container.registerRule = (dependant) => { - Rule = dependant; - }; - Container.registerAtRule = (dependant) => { - AtRule = dependant; - }; - Container.registerRoot = (dependant) => { - Root = dependant; - }; - module.exports = Container; - Container.default = Container; - Container.rebuild = (node) => { - if (node.type === "atrule") { - Object.setPrototypeOf(node, AtRule.prototype); - } else if (node.type === "rule") { - Object.setPrototypeOf(node, Rule.prototype); - } else if (node.type === "decl") { - Object.setPrototypeOf(node, Declaration.prototype); - } else if (node.type === "comment") { - Object.setPrototypeOf(node, Comment.prototype); - } else if (node.type === "root") { - Object.setPrototypeOf(node, Root.prototype); - } - node[my] = true; - if (node.nodes) { - node.nodes.forEach((child) => { - Container.rebuild(child); - }); - } - }; -}); - -// node_modules/postcss/lib/at-rule.js -var require_at_rule = __commonJS((exports, module) => { - var Container = require_container(); - - class AtRule extends Container { - constructor(defaults) { - super(defaults); - this.type = "atrule"; - } - append(...children) { - if (!this.proxyOf.nodes) - this.nodes = []; - return super.append(...children); - } - prepend(...children) { - if (!this.proxyOf.nodes) - this.nodes = []; - return super.prepend(...children); - } - } - module.exports = AtRule; - AtRule.default = AtRule; - Container.registerAtRule(AtRule); -}); - -// node_modules/postcss/lib/document.js -var require_document = __commonJS((exports, module) => { - var Container = require_container(); - var LazyResult; - var Processor; - - class Document extends Container { - constructor(defaults) { - super({ type: "document", ...defaults }); - if (!this.nodes) { - this.nodes = []; - } - } - toResult(opts = {}) { - let lazy = new LazyResult(new Processor, this, opts); - return lazy.stringify(); - } - } - Document.registerLazyResult = (dependant) => { - LazyResult = dependant; - }; - Document.registerProcessor = (dependant) => { - Processor = dependant; - }; - module.exports = Document; - Document.default = Document; -}); - -// node_modules/nanoid/non-secure/index.cjs -var require_non_secure = __commonJS((exports, module) => { - var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"; - var customAlphabet = (alphabet, defaultSize = 21) => { - return (size = defaultSize) => { - let id = ""; - let i = size; - while (i--) { - id += alphabet[Math.random() * alphabet.length | 0]; - } - return id; - }; - }; - var nanoid = (size = 21) => { - let id = ""; - let i = size; - while (i--) { - id += urlAlphabet[Math.random() * 64 | 0]; - } - return id; - }; - module.exports = { nanoid, customAlphabet }; -}); - -// node_modules/source-map-js/lib/base64.js -var require_base64 = __commonJS((exports) => { - var intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); - exports.encode = function(number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); - }; - exports.decode = function(charCode) { - var bigA = 65; - var bigZ = 90; - var littleA = 97; - var littleZ = 122; - var zero = 48; - var nine = 57; - var plus = 43; - var slash = 47; - var littleOffset = 26; - var numberOffset = 52; - if (bigA <= charCode && charCode <= bigZ) { - return charCode - bigA; - } - if (littleA <= charCode && charCode <= littleZ) { - return charCode - littleA + littleOffset; - } - if (zero <= charCode && charCode <= nine) { - return charCode - zero + numberOffset; - } - if (charCode == plus) { - return 62; - } - if (charCode == slash) { - return 63; - } - return -1; - }; -}); - -// node_modules/source-map-js/lib/base64-vlq.js -var require_base64_vlq = __commonJS((exports) => { - var base64 = require_base64(); - var VLQ_BASE_SHIFT = 5; - var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - var VLQ_BASE_MASK = VLQ_BASE - 1; - var VLQ_CONTINUATION_BIT = VLQ_BASE; - function toVLQSigned(aValue) { - return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0; - } - function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative ? -shifted : shifted; - } - exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - var vlq = toVLQSigned(aValue); - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - return encoded; - }; - exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; - }; -}); - -// node_modules/source-map-js/lib/util.js -var require_util2 = __commonJS((exports) => { - function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } - } - exports.getArg = getArg; - var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; - var dataUrlRegexp = /^data:.+\,.+$/; - function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; - } - exports.urlParse = urlParse; - function urlGenerate(aParsedUrl) { - var url = ""; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ":"; - } - url += "//"; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + "@"; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port; - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; - } - exports.urlGenerate = urlGenerate; - var MAX_CACHED_INPUTS = 32; - function lruMemoize(f) { - var cache = []; - return function(input) { - for (var i = 0;i < cache.length; i++) { - if (cache[i].input === input) { - var temp = cache[0]; - cache[0] = cache[i]; - cache[i] = temp; - return cache[0].result; - } - } - var result = f(input); - cache.unshift({ - input, - result - }); - if (cache.length > MAX_CACHED_INPUTS) { - cache.pop(); - } - return result; - }; - } - var normalize = lruMemoize(function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - var parts = []; - var start = 0; - var i = 0; - while (true) { - start = i; - i = path.indexOf("/", start); - if (i === -1) { - parts.push(path.slice(start)); - break; - } else { - parts.push(path.slice(start, i)); - while (i < path.length && path[i] === "/") { - i++; - } - } - } - for (var part, up = 0, i = parts.length - 1;i >= 0; i--) { - part = parts[i]; - if (part === ".") { - parts.splice(i, 1); - } else if (part === "..") { - up++; - } else if (up > 0) { - if (part === "") { - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join("/"); - if (path === "") { - path = isAbsolute ? "/" : "."; - } - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; - }); - exports.normalize = normalize; - function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || "/"; - } - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - var joined = aPath.charAt(0) === "/" ? aPath : normalize(aRoot.replace(/\/+$/, "") + "/" + aPath); - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; - } - exports.join = join; - exports.isAbsolute = function(aPath) { - return aPath.charAt(0) === "/" || urlRegexp.test(aPath); - }; - function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - aRoot = aRoot.replace(/\/$/, ""); - var level = 0; - while (aPath.indexOf(aRoot + "/") !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - ++level; - } - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); - } - exports.relative = relative; - var supportsNullProto = function() { - var obj = Object.create(null); - return !("__proto__" in obj); - }(); - function identity(s) { - return s; - } - function toSetString(aStr) { - if (isProtoString(aStr)) { - return "$" + aStr; - } - return aStr; - } - exports.toSetString = supportsNullProto ? identity : toSetString; - function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - return aStr; - } - exports.fromSetString = supportsNullProto ? identity : fromSetString; - function isProtoString(s) { - if (!s) { - return false; - } - var length = s.length; - if (length < 9) { - return false; - } - if (s.charCodeAt(length - 1) !== 95 || s.charCodeAt(length - 2) !== 95 || s.charCodeAt(length - 3) !== 111 || s.charCodeAt(length - 4) !== 116 || s.charCodeAt(length - 5) !== 111 || s.charCodeAt(length - 6) !== 114 || s.charCodeAt(length - 7) !== 112 || s.charCodeAt(length - 8) !== 95 || s.charCodeAt(length - 9) !== 95) { - return false; - } - for (var i = length - 10;i >= 0; i--) { - if (s.charCodeAt(i) !== 36) { - return false; - } - } - return true; - } - function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByOriginalPositions = compareByOriginalPositions; - function compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) { - var cmp; - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource; - function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - function compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine; - function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - if (aStr1 === null) { - return 1; - } - if (aStr2 === null) { - return -1; - } - if (aStr1 > aStr2) { - return 1; - } - return -1; - } - function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; - function parseSourceMapInput(str) { - return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, "")); - } - exports.parseSourceMapInput = parseSourceMapInput; - function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { - sourceURL = sourceURL || ""; - if (sourceRoot) { - if (sourceRoot[sourceRoot.length - 1] !== "/" && sourceURL[0] !== "/") { - sourceRoot += "/"; - } - sourceURL = sourceRoot + sourceURL; - } - if (sourceMapURL) { - var parsed = urlParse(sourceMapURL); - if (!parsed) { - throw new Error("sourceMapURL could not be parsed"); - } - if (parsed.path) { - var index = parsed.path.lastIndexOf("/"); - if (index >= 0) { - parsed.path = parsed.path.substring(0, index + 1); - } - } - sourceURL = join(urlGenerate(parsed), sourceURL); - } - return normalize(sourceURL); - } - exports.computeSourceURL = computeSourceURL; -}); - -// node_modules/source-map-js/lib/array-set.js -var require_array_set = __commonJS((exports) => { - var util = require_util2(); - var has = Object.prototype.hasOwnProperty; - var hasNativeMap = typeof Map !== "undefined"; - function ArraySet() { - this._array = []; - this._set = hasNativeMap ? new Map : Object.create(null); - } - ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet; - for (var i = 0, len = aArray.length;i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; - }; - ArraySet.prototype.size = function ArraySet_size() { - return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; - }; - ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var sStr = hasNativeMap ? aStr : util.toSetString(aStr); - var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - if (hasNativeMap) { - this._set.set(aStr, idx); - } else { - this._set[sStr] = idx; - } - } - }; - ArraySet.prototype.has = function ArraySet_has(aStr) { - if (hasNativeMap) { - return this._set.has(aStr); - } else { - var sStr = util.toSetString(aStr); - return has.call(this._set, sStr); - } - }; - ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - if (hasNativeMap) { - var idx = this._set.get(aStr); - if (idx >= 0) { - return idx; - } - } else { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - } - throw new Error('"' + aStr + '" is not in the set.'); - }; - ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error("No element indexed by " + aIdx); - }; - ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); - }; - exports.ArraySet = ArraySet; -}); - -// node_modules/source-map-js/lib/mapping-list.js -var require_mapping_list = __commonJS((exports) => { - var util = require_util2(); - function generatedPositionAfter(mappingA, mappingB) { - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; - } - function MappingList() { - this._array = []; - this._sorted = true; - this._last = { generatedLine: -1, generatedColumn: 0 }; - } - MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } - }; - MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; - }; - exports.MappingList = MappingList; -}); - -// node_modules/source-map-js/lib/source-map-generator.js -var require_source_map_generator = __commonJS((exports) => { - var base64VLQ = require_base64_vlq(); - var util = require_util2(); - var ArraySet = require_array_set().ArraySet; - var MappingList = require_mapping_list().MappingList; - function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, "file", null); - this._sourceRoot = util.getArg(aArgs, "sourceRoot", null); - this._skipValidation = util.getArg(aArgs, "skipValidation", false); - this._ignoreInvalidMapping = util.getArg(aArgs, "ignoreInvalidMapping", false); - this._sources = new ArraySet; - this._names = new ArraySet; - this._mappings = new MappingList; - this._sourcesContents = null; - } - SourceMapGenerator.prototype._version = 3; - SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, { - file: aSourceMapConsumer.file, - sourceRoot - })); - aSourceMapConsumer.eachMapping(function(mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function(sourceFile) { - var sourceRelative = sourceFile; - if (sourceRoot !== null) { - sourceRelative = util.relative(sourceRoot, sourceFile); - } - if (!generator._sources.has(sourceRelative)) { - generator._sources.add(sourceRelative); - } - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, "generated"); - var original = util.getArg(aArgs, "original", null); - var source = util.getArg(aArgs, "source", null); - var name = util.getArg(aArgs, "name", null); - if (!this._skipValidation) { - if (this._validateMapping(generated, original, source, name) === false) { - return; - } - } - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source, - name - }); - }; - SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - if (aSourceContent != null) { - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error("SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, " + 'or the source map\'s "file" property. Both were omitted.'); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - var newSources = new ArraySet; - var newNames = new ArraySet; - this._mappings.unsortedForEach(function(mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source); - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - }, this); - this._sources = newSources; - this._names = newNames; - aSourceMapConsumer.sources.forEach(function(sourceFile2) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile2); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile2 = util.join(aSourceMapPath, sourceFile2); - } - if (sourceRoot != null) { - sourceFile2 = util.relative(sourceRoot, sourceFile2); - } - this.setSourceContent(sourceFile2, content); - } - }, this); - }; - SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) { - if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") { - var message = "original.line and original.column are not numbers -- you probably meant to omit " + "the original mapping entirely and only map the generated position. If so, pass " + "null for the original mapping instead of an object with empty or null values."; - if (this._ignoreInvalidMapping) { - if (typeof console !== "undefined" && console.warn) { - console.warn(message); - } - return false; - } else { - throw new Error(message); - } - } - if (aGenerated && "line" in aGenerated && "column" in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) { - return; - } else if (aGenerated && "line" in aGenerated && "column" in aGenerated && aOriginal && "line" in aOriginal && "column" in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) { - return; - } else { - var message = "Invalid mapping: " + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - }); - if (this._ignoreInvalidMapping) { - if (typeof console !== "undefined" && console.warn) { - console.warn(message); - } - return false; - } else { - throw new Error(message); - } - } - }; - SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ""; - var next; - var mapping; - var nameIdx; - var sourceIdx; - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length;i < len; i++) { - mapping = mappings[i]; - next = ""; - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ";"; - previousGeneratedLine++; - } - } else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ","; - } - } - next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - result += next; - } - return result; - }; - SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function(source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null; - }, this); - }; - SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - return map; - }; - SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - exports.SourceMapGenerator = SourceMapGenerator; -}); - -// node_modules/source-map-js/lib/binary-search.js -var require_binary_search = __commonJS((exports) => { - exports.GREATEST_LOWER_BOUND = 1; - exports.LEAST_UPPER_BOUND = 2; - function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - return mid; - } else if (cmp > 0) { - if (aHigh - mid > 1) { - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } else { - if (mid - aLow > 1) { - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } - } - exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - return index; - }; -}); - -// node_modules/source-map-js/lib/quick-sort.js -var require_quick_sort = __commonJS((exports) => { - function SortTemplate(comparator) { - function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; - } - function randomIntInRange(low, high) { - return Math.round(low + Math.random() * (high - low)); - } - function doQuickSort(ary, comparator2, p, r) { - if (p < r) { - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - swap(ary, pivotIndex, r); - var pivot = ary[r]; - for (var j = p;j < r; j++) { - if (comparator2(ary[j], pivot, false) <= 0) { - i += 1; - swap(ary, i, j); - } - } - swap(ary, i + 1, j); - var q = i + 1; - doQuickSort(ary, comparator2, p, q - 1); - doQuickSort(ary, comparator2, q + 1, r); - } - } - return doQuickSort; - } - function cloneSort(comparator) { - let template = SortTemplate.toString(); - let templateFn = new Function(`return ${template}`)(); - return templateFn(comparator); - } - var sortCache = new WeakMap; - exports.quickSort = function(ary, comparator, start = 0) { - let doQuickSort = sortCache.get(comparator); - if (doQuickSort === undefined) { - doQuickSort = cloneSort(comparator); - sortCache.set(comparator, doQuickSort); - } - doQuickSort(ary, comparator, start, ary.length - 1); - }; -}); - -// node_modules/source-map-js/lib/source-map-consumer.js -var require_source_map_consumer = __commonJS((exports) => { - var util = require_util2(); - var binarySearch = require_binary_search(); - var ArraySet = require_array_set().ArraySet; - var base64VLQ = require_base64_vlq(); - var quickSort = require_quick_sort().quickSort; - function SourceMapConsumer(aSourceMap, aSourceMapURL) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === "string") { - sourceMap = util.parseSourceMapInput(aSourceMap); - } - return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); - } - SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); - }; - SourceMapConsumer.prototype._version = 3; - SourceMapConsumer.prototype.__generatedMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, "_generatedMappings", { - configurable: true, - enumerable: true, - get: function() { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - return this.__generatedMappings; - } - }); - SourceMapConsumer.prototype.__originalMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, "_originalMappings", { - configurable: true, - enumerable: true, - get: function() { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - return this.__originalMappings; - } - }); - SourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - SourceMapConsumer.GENERATED_ORDER = 1; - SourceMapConsumer.ORIGINAL_ORDER = 2; - SourceMapConsumer.GREATEST_LOWER_BOUND = 1; - SourceMapConsumer.LEAST_UPPER_BOUND = 2; - SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - var sourceRoot = this.sourceRoot; - var boundCallback = aCallback.bind(context); - var names = this._names; - var sources = this._sources; - var sourceMapURL = this._sourceMapURL; - for (var i = 0, n = mappings.length;i < n; i++) { - var mapping = mappings[i]; - var source = mapping.source === null ? null : sources.at(mapping.source); - if (source !== null) { - source = util.computeSourceURL(sourceRoot, source, sourceMapURL); - } - boundCallback({ - source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : names.at(mapping.name) - }); - } - }; - SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, "line"); - var needle = { - source: util.getArg(aArgs, "source"), - originalLine: line, - originalColumn: util.getArg(aArgs, "column", 0) - }; - needle.source = this._findSourceIndex(needle.source); - if (needle.source < 0) { - return []; - } - var mappings = []; - var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, "generatedLine", null), - column: util.getArg(mapping, "generatedColumn", null), - lastColumn: util.getArg(mapping, "lastGeneratedColumn", null) - }); - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, "generatedLine", null), - column: util.getArg(mapping, "generatedColumn", null), - lastColumn: util.getArg(mapping, "lastGeneratedColumn", null) - }); - mapping = this._originalMappings[++index]; - } - } - } - return mappings; - }; - exports.SourceMapConsumer = SourceMapConsumer; - function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === "string") { - sourceMap = util.parseSourceMapInput(aSourceMap); - } - var version = util.getArg(sourceMap, "version"); - var sources = util.getArg(sourceMap, "sources"); - var names = util.getArg(sourceMap, "names", []); - var sourceRoot = util.getArg(sourceMap, "sourceRoot", null); - var sourcesContent = util.getArg(sourceMap, "sourcesContent", null); - var mappings = util.getArg(sourceMap, "mappings"); - var file = util.getArg(sourceMap, "file", null); - if (version != this._version) { - throw new Error("Unsupported version: " + version); - } - if (sourceRoot) { - sourceRoot = util.normalize(sourceRoot); - } - sources = sources.map(String).map(util.normalize).map(function(source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source; - }); - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - this._absoluteSources = this._sources.toArray().map(function(s) { - return util.computeSourceURL(sourceRoot, s, aSourceMapURL); - }); - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this._sourceMapURL = aSourceMapURL; - this.file = file; - } - BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { - var relativeSource = aSource; - if (this.sourceRoot != null) { - relativeSource = util.relative(this.sourceRoot, relativeSource); - } - if (this._sources.has(relativeSource)) { - return this._sources.indexOf(relativeSource); - } - var i; - for (i = 0;i < this._absoluteSources.length; ++i) { - if (this._absoluteSources[i] == aSource) { - return i; - } - } - return -1; - }; - BasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot); - smc.file = aSourceMap._file; - smc._sourceMapURL = aSourceMapURL; - smc._absoluteSources = smc._sources.toArray().map(function(s) { - return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); - }); - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - for (var i = 0, length = generatedMappings.length;i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - destOriginalMappings.push(destMapping); - } - destGeneratedMappings.push(destMapping); - } - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - return smc; - }; - BasicSourceMapConsumer.prototype._version = 3; - Object.defineProperty(BasicSourceMapConsumer.prototype, "sources", { - get: function() { - return this._absoluteSources.slice(); - } - }); - function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; - } - var compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine; - function sortGenerated(array, start) { - let l = array.length; - let n = array.length - start; - if (n <= 1) { - return; - } else if (n == 2) { - let a = array[start]; - let b = array[start + 1]; - if (compareGenerated(a, b) > 0) { - array[start] = b; - array[start + 1] = a; - } - } else if (n < 20) { - for (let i = start;i < l; i++) { - for (let j = i;j > start; j--) { - let a = array[j - 1]; - let b = array[j]; - if (compareGenerated(a, b) <= 0) { - break; - } - array[j - 1] = b; - array[j] = a; - } - } - } else { - quickSort(array, compareGenerated, start); - } - } - BasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - let subarrayStart = 0; - while (index < length) { - if (aStr.charAt(index) === ";") { - generatedLine++; - index++; - previousGeneratedColumn = 0; - sortGenerated(generatedMappings, subarrayStart); - subarrayStart = generatedMappings.length; - } else if (aStr.charAt(index) === ",") { - index++; - } else { - mapping = new Mapping; - mapping.generatedLine = generatedLine; - for (end = index;end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - if (segment.length === 2) { - throw new Error("Found a source, but no line and column"); - } - if (segment.length === 3) { - throw new Error("Found a source and line, but no column"); - } - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - if (segment.length > 1) { - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - mapping.originalLine += 1; - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - if (segment.length > 4) { - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - generatedMappings.push(mapping); - if (typeof mapping.originalLine === "number") { - let currentSource = mapping.source; - while (originalMappings.length <= currentSource) { - originalMappings.push(null); - } - if (originalMappings[currentSource] === null) { - originalMappings[currentSource] = []; - } - originalMappings[currentSource].push(mapping); - } - } - } - sortGenerated(generatedMappings, subarrayStart); - this.__generatedMappings = generatedMappings; - for (var i = 0;i < originalMappings.length; i++) { - if (originalMappings[i] != null) { - quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource); - } - } - this.__originalMappings = [].concat(...originalMappings); - }; - BasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) { - if (aNeedle[aLineName] <= 0) { - throw new TypeError("Line must be greater than or equal to 1, got " + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError("Column must be greater than or equal to 0, got " + aNeedle[aColumnName]); - } - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - BasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() { - for (var index = 0;index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - mapping.lastGeneratedColumn = Infinity; - } - }; - BasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, "line"), - generatedColumn: util.getArg(aArgs, "column") - }; - var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND)); - if (index >= 0) { - var mapping = this._generatedMappings[index]; - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, "source", null); - if (source !== null) { - source = this._sources.at(source); - source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); - } - var name = util.getArg(mapping, "name", null); - if (name !== null) { - name = this._names.at(name); - } - return { - source, - line: util.getArg(mapping, "originalLine", null), - column: util.getArg(mapping, "originalColumn", null), - name - }; - } - } - return { - source: null, - line: null, - column: null, - name: null - }; - }; - BasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function(sc) { - return sc == null; - }); - }; - BasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - var index = this._findSourceIndex(aSource); - if (index >= 0) { - return this.sourcesContent[index]; - } - var relativeSource = aSource; - if (this.sourceRoot != null) { - relativeSource = util.relative(this.sourceRoot, relativeSource); - } - var url; - if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) { - var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]; - } - if ((!url.path || url.path == "/") && this._sources.has("/" + relativeSource)) { - return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; - } - } - if (nullOnMissing) { - return null; - } else { - throw new Error('"' + relativeSource + '" is not in the SourceMap.'); - } - }; - BasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, "source"); - source = this._findSourceIndex(source); - if (source < 0) { - return { - line: null, - column: null, - lastColumn: null - }; - } - var needle = { - source, - originalLine: util.getArg(aArgs, "line"), - originalColumn: util.getArg(aArgs, "column") - }; - var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions, util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND)); - if (index >= 0) { - var mapping = this._originalMappings[index]; - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, "generatedLine", null), - column: util.getArg(mapping, "generatedColumn", null), - lastColumn: util.getArg(mapping, "lastGeneratedColumn", null) - }; - } - } - return { - line: null, - column: null, - lastColumn: null - }; - }; - exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === "string") { - sourceMap = util.parseSourceMapInput(aSourceMap); - } - var version = util.getArg(sourceMap, "version"); - var sections = util.getArg(sourceMap, "sections"); - if (version != this._version) { - throw new Error("Unsupported version: " + version); - } - this._sources = new ArraySet; - this._names = new ArraySet; - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function(s) { - if (s.url) { - throw new Error("Support for url field in sections not implemented."); - } - var offset = util.getArg(s, "offset"); - var offsetLine = util.getArg(offset, "line"); - var offsetColumn = util.getArg(offset, "column"); - if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) { - throw new Error("Section offsets must be ordered and non-overlapping."); - } - lastOffset = offset; - return { - generatedOffset: { - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, "map"), aSourceMapURL) - }; - }); - } - IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - IndexedSourceMapConsumer.prototype._version = 3; - Object.defineProperty(IndexedSourceMapConsumer.prototype, "sources", { - get: function() { - var sources = []; - for (var i = 0;i < this._sections.length; i++) { - for (var j = 0;j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } - }); - IndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, "line"), - generatedColumn: util.getArg(aArgs, "column") - }; - var sectionIndex = binarySearch.search(needle, this._sections, function(needle2, section2) { - var cmp = needle2.generatedLine - section2.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - return needle2.generatedColumn - section2.generatedOffset.generatedColumn; - }); - var section = this._sections[sectionIndex]; - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - return section.consumer.originalPositionFor({ - line: needle.generatedLine - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), - bias: aArgs.bias - }); - }; - IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function(s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - IndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0;i < this._sections.length; i++) { - var section = this._sections[i]; - var content = section.consumer.sourceContentFor(aSource, true); - if (content || content === "") { - return content; - } - } - if (nullOnMissing) { - return null; - } else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - IndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0;i < this._sections.length; i++) { - var section = this._sections[i]; - if (section.consumer._findSourceIndex(util.getArg(aArgs, "source")) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0) - }; - return ret; - } - } - return { - line: null, - column: null - }; - }; - IndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0;i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0;j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - var source = section.consumer._sources.at(mapping.source); - if (source !== null) { - source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); - } - this._sources.add(source); - source = this._sources.indexOf(source); - var name = null; - if (mapping.name) { - name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - } - var adjustedMapping = { - source, - generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name - }; - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === "number") { - this.__originalMappings.push(adjustedMapping); - } - } - } - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; -}); - -// node_modules/source-map-js/lib/source-node.js -var require_source_node = __commonJS((exports) => { - var SourceMapGenerator = require_source_map_generator().SourceMapGenerator; - var util = require_util2(); - var REGEX_NEWLINE = /(\r?\n)/; - var NEWLINE_CODE = 10; - var isSourceNode = "$$$isSourceNode$$$"; - function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) - this.add(aChunks); - } - SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - var node = new SourceNode; - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var remainingLinesIndex = 0; - var shiftNextLine = function() { - var lineContents = getNextLine(); - var newLine = getNextLine() || ""; - return lineContents + newLine; - function getNextLine() { - return remainingLinesIndex < remainingLines.length ? remainingLines[remainingLinesIndex++] : undefined; - } - }; - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - var lastMapping = null; - aSourceMapConsumer.eachMapping(function(mapping) { - if (lastMapping !== null) { - if (lastGeneratedLine < mapping.generatedLine) { - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - } else { - var nextLine = remainingLines[remainingLinesIndex] || ""; - var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - lastMapping = mapping; - return; - } - } - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[remainingLinesIndex] || ""; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - if (remainingLinesIndex < remainingLines.length) { - if (lastMapping) { - addMappingWithCode(lastMapping, shiftNextLine()); - } - node.add(remainingLines.splice(remainingLinesIndex).join("")); - } - aSourceMapConsumer.sources.forEach(function(sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - return node; - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source; - node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name)); - } - } - }; - SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function(chunk) { - this.add(chunk); - }, this); - } else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } else { - throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); - } - return this; - }; - SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length - 1;i >= 0; i--) { - this.prepend(aChunk[i]); - } - } else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } else { - throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); - } - return this; - }; - SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length;i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } else { - if (chunk !== "") { - aFn(chunk, { - source: this.source, - line: this.line, - column: this.column, - name: this.name - }); - } - } - } - }; - SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0;i < len - 1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; - }; - SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } else if (typeof lastChild === "string") { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } else { - this.children.push("".replace(aPattern, aReplacement)); - } - return this; - }; - SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length;i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length;i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function(chunk) { - str += chunk; - }); - return str; - }; - SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function(chunk, original) { - generated.code += chunk; - if (original.source !== null && original.line !== null && original.column !== null) { - if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length;idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function(sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - return { code: generated.code, map }; - }; - exports.SourceNode = SourceNode; -}); - -// node_modules/source-map-js/source-map.js -var require_source_map = __commonJS((exports) => { - exports.SourceMapGenerator = require_source_map_generator().SourceMapGenerator; - exports.SourceMapConsumer = require_source_map_consumer().SourceMapConsumer; - exports.SourceNode = require_source_node().SourceNode; -}); - -// node_modules/postcss/lib/previous-map.js -var require_previous_map = __commonJS((exports, module) => { - var { existsSync, readFileSync } = __require("fs"); - var { dirname, join } = __require("path"); - var { SourceMapConsumer, SourceMapGenerator } = require_source_map(); - function fromBase64(str) { - if (Buffer) { - return Buffer.from(str, "base64").toString(); - } else { - return window.atob(str); - } - } - - class PreviousMap { - constructor(css, opts) { - if (opts.map === false) - return; - this.loadAnnotation(css); - this.inline = this.startWith(this.annotation, "data:"); - let prev = opts.map ? opts.map.prev : undefined; - let text = this.loadMap(opts.from, prev); - if (!this.mapFile && opts.from) { - this.mapFile = opts.from; - } - if (this.mapFile) - this.root = dirname(this.mapFile); - if (text) - this.text = text; - } - consumer() { - if (!this.consumerCache) { - this.consumerCache = new SourceMapConsumer(this.text); - } - return this.consumerCache; - } - decodeInline(text) { - let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/; - let baseUri = /^data:application\/json;base64,/; - let charsetUri = /^data:application\/json;charset=utf-?8,/; - let uri = /^data:application\/json,/; - let uriMatch = text.match(charsetUri) || text.match(uri); - if (uriMatch) { - return decodeURIComponent(text.substr(uriMatch[0].length)); - } - let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri); - if (baseUriMatch) { - return fromBase64(text.substr(baseUriMatch[0].length)); - } - let encoding = text.match(/data:application\/json;([^,]+),/)[1]; - throw new Error("Unsupported source map encoding " + encoding); - } - getAnnotationURL(sourceMapString) { - return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, "").trim(); - } - isMap(map) { - if (typeof map !== "object") - return false; - return typeof map.mappings === "string" || typeof map._mappings === "string" || Array.isArray(map.sections); - } - loadAnnotation(css) { - let comments = css.match(/\/\*\s*# sourceMappingURL=/g); - if (!comments) - return; - let start = css.lastIndexOf(comments.pop()); - let end = css.indexOf("*/", start); - if (start > -1 && end > -1) { - this.annotation = this.getAnnotationURL(css.substring(start, end)); - } - } - loadFile(path) { - this.root = dirname(path); - if (existsSync(path)) { - this.mapFile = path; - return readFileSync(path, "utf-8").toString().trim(); - } - } - loadMap(file, prev) { - if (prev === false) - return false; - if (prev) { - if (typeof prev === "string") { - return prev; - } else if (typeof prev === "function") { - let prevPath = prev(file); - if (prevPath) { - let map = this.loadFile(prevPath); - if (!map) { - throw new Error("Unable to load previous source map: " + prevPath.toString()); - } - return map; - } - } else if (prev instanceof SourceMapConsumer) { - return SourceMapGenerator.fromSourceMap(prev).toString(); - } else if (prev instanceof SourceMapGenerator) { - return prev.toString(); - } else if (this.isMap(prev)) { - return JSON.stringify(prev); - } else { - throw new Error("Unsupported previous source map format: " + prev.toString()); - } - } else if (this.inline) { - return this.decodeInline(this.annotation); - } else if (this.annotation) { - let map = this.annotation; - if (file) - map = join(dirname(file), map); - return this.loadFile(map); - } - } - startWith(string, start) { - if (!string) - return false; - return string.substr(0, start.length) === start; - } - withContent() { - return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0); - } - } - module.exports = PreviousMap; - PreviousMap.default = PreviousMap; -}); - -// node_modules/postcss/lib/input.js -var require_input = __commonJS((exports, module) => { - var { nanoid } = require_non_secure(); - var { isAbsolute, resolve } = __require("path"); - var { SourceMapConsumer, SourceMapGenerator } = require_source_map(); - var { fileURLToPath, pathToFileURL } = __require("url"); - var CssSyntaxError = require_css_syntax_error(); - var PreviousMap = require_previous_map(); - var terminalHighlight = require_terminal_highlight(); - var fromOffsetCache = Symbol("fromOffsetCache"); - var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator); - var pathAvailable = Boolean(resolve && isAbsolute); - - class Input { - constructor(css, opts = {}) { - if (css === null || typeof css === "undefined" || typeof css === "object" && !css.toString) { - throw new Error(`PostCSS received ${css} instead of CSS string`); - } - this.css = css.toString(); - if (this.css[0] === "\uFEFF" || this.css[0] === "\uFFFE") { - this.hasBOM = true; - this.css = this.css.slice(1); - } else { - this.hasBOM = false; - } - if (opts.from) { - if (!pathAvailable || /^\w+:\/\//.test(opts.from) || isAbsolute(opts.from)) { - this.file = opts.from; - } else { - this.file = resolve(opts.from); - } - } - if (pathAvailable && sourceMapAvailable) { - let map = new PreviousMap(this.css, opts); - if (map.text) { - this.map = map; - let file = map.consumer().file; - if (!this.file && file) - this.file = this.mapResolve(file); - } - } - if (!this.file) { - this.id = ""; - } - if (this.map) - this.map.file = this.from; - } - error(message, line, column, opts = {}) { - let endColumn, endLine, result; - if (line && typeof line === "object") { - let start = line; - let end = column; - if (typeof start.offset === "number") { - let pos = this.fromOffset(start.offset); - line = pos.line; - column = pos.col; - } else { - line = start.line; - column = start.column; - } - if (typeof end.offset === "number") { - let pos = this.fromOffset(end.offset); - endLine = pos.line; - endColumn = pos.col; - } else { - endLine = end.line; - endColumn = end.column; - } - } else if (!column) { - let pos = this.fromOffset(line); - line = pos.line; - column = pos.col; - } - let origin = this.origin(line, column, endLine, endColumn); - if (origin) { - result = new CssSyntaxError(message, origin.endLine === undefined ? origin.line : { column: origin.column, line: origin.line }, origin.endLine === undefined ? origin.column : { column: origin.endColumn, line: origin.endLine }, origin.source, origin.file, opts.plugin); - } else { - result = new CssSyntaxError(message, endLine === undefined ? line : { column, line }, endLine === undefined ? column : { column: endColumn, line: endLine }, this.css, this.file, opts.plugin); - } - result.input = { column, endColumn, endLine, line, source: this.css }; - if (this.file) { - if (pathToFileURL) { - result.input.url = pathToFileURL(this.file).toString(); - } - result.input.file = this.file; - } - return result; - } - fromOffset(offset) { - let lastLine, lineToIndex; - if (!this[fromOffsetCache]) { - let lines = this.css.split("\n"); - lineToIndex = new Array(lines.length); - let prevIndex = 0; - for (let i = 0, l = lines.length;i < l; i++) { - lineToIndex[i] = prevIndex; - prevIndex += lines[i].length + 1; - } - this[fromOffsetCache] = lineToIndex; - } else { - lineToIndex = this[fromOffsetCache]; - } - lastLine = lineToIndex[lineToIndex.length - 1]; - let min = 0; - if (offset >= lastLine) { - min = lineToIndex.length - 1; - } else { - let max = lineToIndex.length - 2; - let mid; - while (min < max) { - mid = min + (max - min >> 1); - if (offset < lineToIndex[mid]) { - max = mid - 1; - } else if (offset >= lineToIndex[mid + 1]) { - min = mid + 1; - } else { - min = mid; - break; - } - } - } - return { - col: offset - lineToIndex[min] + 1, - line: min + 1 - }; - } - mapResolve(file) { - if (/^\w+:\/\//.test(file)) { - return file; - } - return resolve(this.map.consumer().sourceRoot || this.map.root || ".", file); - } - origin(line, column, endLine, endColumn) { - if (!this.map) - return false; - let consumer = this.map.consumer(); - let from = consumer.originalPositionFor({ column, line }); - if (!from.source) - return false; - let to; - if (typeof endLine === "number") { - to = consumer.originalPositionFor({ column: endColumn, line: endLine }); - } - let fromUrl; - if (isAbsolute(from.source)) { - fromUrl = pathToFileURL(from.source); - } else { - fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)); - } - let result = { - column: from.column, - endColumn: to && to.column, - endLine: to && to.line, - line: from.line, - url: fromUrl.toString() - }; - if (fromUrl.protocol === "file:") { - if (fileURLToPath) { - result.file = fileURLToPath(fromUrl); - } else { - throw new Error(`file: protocol is not available in this PostCSS build`); - } - } - let source = consumer.sourceContentFor(from.source); - if (source) - result.source = source; - return result; - } - toJSON() { - let json = {}; - for (let name of ["hasBOM", "css", "file", "id"]) { - if (this[name] != null) { - json[name] = this[name]; - } - } - if (this.map) { - json.map = { ...this.map }; - if (json.map.consumerCache) { - json.map.consumerCache = undefined; - } - } - return json; - } - get from() { - return this.file || this.id; - } - } - module.exports = Input; - Input.default = Input; - if (terminalHighlight && terminalHighlight.registerInput) { - terminalHighlight.registerInput(Input); - } -}); - -// node_modules/postcss/lib/root.js -var require_root = __commonJS((exports, module) => { - var Container = require_container(); - var LazyResult; - var Processor; - - class Root extends Container { - constructor(defaults) { - super(defaults); - this.type = "root"; - if (!this.nodes) - this.nodes = []; - } - normalize(child, sample, type) { - let nodes = super.normalize(child); - if (sample) { - if (type === "prepend") { - if (this.nodes.length > 1) { - sample.raws.before = this.nodes[1].raws.before; - } else { - delete sample.raws.before; - } - } else if (this.first !== sample) { - for (let node of nodes) { - node.raws.before = sample.raws.before; - } - } - } - return nodes; - } - removeChild(child, ignore) { - let index = this.index(child); - if (!ignore && index === 0 && this.nodes.length > 1) { - this.nodes[1].raws.before = this.nodes[index].raws.before; - } - return super.removeChild(child); - } - toResult(opts = {}) { - let lazy = new LazyResult(new Processor, this, opts); - return lazy.stringify(); - } - } - Root.registerLazyResult = (dependant) => { - LazyResult = dependant; - }; - Root.registerProcessor = (dependant) => { - Processor = dependant; - }; - module.exports = Root; - Root.default = Root; - Container.registerRoot(Root); -}); - -// node_modules/postcss/lib/list.js -var require_list = __commonJS((exports, module) => { - var list = { - comma(string) { - return list.split(string, [","], true); - }, - space(string) { - let spaces = [" ", "\n", "\t"]; - return list.split(string, spaces); - }, - split(string, separators, last) { - let array = []; - let current = ""; - let split = false; - let func = 0; - let inQuote = false; - let prevQuote = ""; - let escape = false; - for (let letter of string) { - if (escape) { - escape = false; - } else if (letter === "\\") { - escape = true; - } else if (inQuote) { - if (letter === prevQuote) { - inQuote = false; - } - } else if (letter === '"' || letter === "'") { - inQuote = true; - prevQuote = letter; - } else if (letter === "(") { - func += 1; - } else if (letter === ")") { - if (func > 0) - func -= 1; - } else if (func === 0) { - if (separators.includes(letter)) - split = true; - } - if (split) { - if (current !== "") - array.push(current.trim()); - current = ""; - split = false; - } else { - current += letter; - } - } - if (last || current !== "") - array.push(current.trim()); - return array; - } - }; - module.exports = list; - list.default = list; -}); - -// node_modules/postcss/lib/rule.js -var require_rule = __commonJS((exports, module) => { - var Container = require_container(); - var list = require_list(); - - class Rule extends Container { - constructor(defaults) { - super(defaults); - this.type = "rule"; - if (!this.nodes) - this.nodes = []; - } - get selectors() { - return list.comma(this.selector); - } - set selectors(values) { - let match = this.selector ? this.selector.match(/,\s*/) : null; - let sep = match ? match[0] : "," + this.raw("between", "beforeOpen"); - this.selector = values.join(sep); - } - } - module.exports = Rule; - Rule.default = Rule; - Container.registerRule(Rule); -}); - -// node_modules/postcss/lib/fromJSON.js -var require_fromJSON = __commonJS((exports, module) => { - var AtRule = require_at_rule(); - var Comment = require_comment(); - var Declaration = require_declaration(); - var Input = require_input(); - var PreviousMap = require_previous_map(); - var Root = require_root(); - var Rule = require_rule(); - function fromJSON(json, inputs) { - if (Array.isArray(json)) - return json.map((n) => fromJSON(n)); - let { inputs: ownInputs, ...defaults } = json; - if (ownInputs) { - inputs = []; - for (let input of ownInputs) { - let inputHydrated = { ...input, __proto__: Input.prototype }; - if (inputHydrated.map) { - inputHydrated.map = { - ...inputHydrated.map, - __proto__: PreviousMap.prototype - }; - } - inputs.push(inputHydrated); - } - } - if (defaults.nodes) { - defaults.nodes = json.nodes.map((n) => fromJSON(n, inputs)); - } - if (defaults.source) { - let { inputId, ...source } = defaults.source; - defaults.source = source; - if (inputId != null) { - defaults.source.input = inputs[inputId]; - } - } - if (defaults.type === "root") { - return new Root(defaults); - } else if (defaults.type === "decl") { - return new Declaration(defaults); - } else if (defaults.type === "rule") { - return new Rule(defaults); - } else if (defaults.type === "comment") { - return new Comment(defaults); - } else if (defaults.type === "atrule") { - return new AtRule(defaults); - } else { - throw new Error("Unknown node type: " + json.type); - } - } - module.exports = fromJSON; - fromJSON.default = fromJSON; -}); - -// node_modules/postcss/lib/map-generator.js -var require_map_generator = __commonJS((exports, module) => { - var { dirname, relative, resolve, sep } = __require("path"); - var { SourceMapConsumer, SourceMapGenerator } = require_source_map(); - var { pathToFileURL } = __require("url"); - var Input = require_input(); - var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator); - var pathAvailable = Boolean(dirname && resolve && relative && sep); - - class MapGenerator { - constructor(stringify, root, opts, cssString) { - this.stringify = stringify; - this.mapOpts = opts.map || {}; - this.root = root; - this.opts = opts; - this.css = cssString; - this.originalCSS = cssString; - this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute; - this.memoizedFileURLs = new Map; - this.memoizedPaths = new Map; - this.memoizedURLs = new Map; - } - addAnnotation() { - let content; - if (this.isInline()) { - content = "data:application/json;base64," + this.toBase64(this.map.toString()); - } else if (typeof this.mapOpts.annotation === "string") { - content = this.mapOpts.annotation; - } else if (typeof this.mapOpts.annotation === "function") { - content = this.mapOpts.annotation(this.opts.to, this.root); - } else { - content = this.outputFile() + ".map"; - } - let eol = "\n"; - if (this.css.includes("\r\n")) - eol = "\r\n"; - this.css += eol + "/*# sourceMappingURL=" + content + " */"; - } - applyPrevMaps() { - for (let prev of this.previous()) { - let from = this.toUrl(this.path(prev.file)); - let root = prev.root || dirname(prev.file); - let map; - if (this.mapOpts.sourcesContent === false) { - map = new SourceMapConsumer(prev.text); - if (map.sourcesContent) { - map.sourcesContent = null; - } - } else { - map = prev.consumer(); - } - this.map.applySourceMap(map, from, this.toUrl(this.path(root))); - } - } - clearAnnotation() { - if (this.mapOpts.annotation === false) - return; - if (this.root) { - let node; - for (let i = this.root.nodes.length - 1;i >= 0; i--) { - node = this.root.nodes[i]; - if (node.type !== "comment") - continue; - if (node.text.startsWith("# sourceMappingURL=")) { - this.root.removeChild(i); - } - } - } else if (this.css) { - this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, ""); - } - } - generate() { - this.clearAnnotation(); - if (pathAvailable && sourceMapAvailable && this.isMap()) { - return this.generateMap(); - } else { - let result = ""; - this.stringify(this.root, (i) => { - result += i; - }); - return [result]; - } - } - generateMap() { - if (this.root) { - this.generateString(); - } else if (this.previous().length === 1) { - let prev = this.previous()[0].consumer(); - prev.file = this.outputFile(); - this.map = SourceMapGenerator.fromSourceMap(prev, { - ignoreInvalidMapping: true - }); - } else { - this.map = new SourceMapGenerator({ - file: this.outputFile(), - ignoreInvalidMapping: true - }); - this.map.addMapping({ - generated: { column: 0, line: 1 }, - original: { column: 0, line: 1 }, - source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : "" - }); - } - if (this.isSourcesContent()) - this.setSourcesContent(); - if (this.root && this.previous().length > 0) - this.applyPrevMaps(); - if (this.isAnnotation()) - this.addAnnotation(); - if (this.isInline()) { - return [this.css]; - } else { - return [this.css, this.map]; - } - } - generateString() { - this.css = ""; - this.map = new SourceMapGenerator({ - file: this.outputFile(), - ignoreInvalidMapping: true - }); - let line = 1; - let column = 1; - let noSource = ""; - let mapping = { - generated: { column: 0, line: 0 }, - original: { column: 0, line: 0 }, - source: "" - }; - let last, lines; - this.stringify(this.root, (str, node, type) => { - this.css += str; - if (node && type !== "end") { - mapping.generated.line = line; - mapping.generated.column = column - 1; - if (node.source && node.source.start) { - mapping.source = this.sourcePath(node); - mapping.original.line = node.source.start.line; - mapping.original.column = node.source.start.column - 1; - this.map.addMapping(mapping); - } else { - mapping.source = noSource; - mapping.original.line = 1; - mapping.original.column = 0; - this.map.addMapping(mapping); - } - } - lines = str.match(/\n/g); - if (lines) { - line += lines.length; - last = str.lastIndexOf("\n"); - column = str.length - last; - } else { - column += str.length; - } - if (node && type !== "start") { - let p = node.parent || { raws: {} }; - let childless = node.type === "decl" || node.type === "atrule" && !node.nodes; - if (!childless || node !== p.last || p.raws.semicolon) { - if (node.source && node.source.end) { - mapping.source = this.sourcePath(node); - mapping.original.line = node.source.end.line; - mapping.original.column = node.source.end.column - 1; - mapping.generated.line = line; - mapping.generated.column = column - 2; - this.map.addMapping(mapping); - } else { - mapping.source = noSource; - mapping.original.line = 1; - mapping.original.column = 0; - mapping.generated.line = line; - mapping.generated.column = column - 1; - this.map.addMapping(mapping); - } - } - } - }); - } - isAnnotation() { - if (this.isInline()) { - return true; - } - if (typeof this.mapOpts.annotation !== "undefined") { - return this.mapOpts.annotation; - } - if (this.previous().length) { - return this.previous().some((i) => i.annotation); - } - return true; - } - isInline() { - if (typeof this.mapOpts.inline !== "undefined") { - return this.mapOpts.inline; - } - let annotation = this.mapOpts.annotation; - if (typeof annotation !== "undefined" && annotation !== true) { - return false; - } - if (this.previous().length) { - return this.previous().some((i) => i.inline); - } - return true; - } - isMap() { - if (typeof this.opts.map !== "undefined") { - return !!this.opts.map; - } - return this.previous().length > 0; - } - isSourcesContent() { - if (typeof this.mapOpts.sourcesContent !== "undefined") { - return this.mapOpts.sourcesContent; - } - if (this.previous().length) { - return this.previous().some((i) => i.withContent()); - } - return true; - } - outputFile() { - if (this.opts.to) { - return this.path(this.opts.to); - } else if (this.opts.from) { - return this.path(this.opts.from); - } else { - return "to.css"; - } - } - path(file) { - if (this.mapOpts.absolute) - return file; - if (file.charCodeAt(0) === 60) - return file; - if (/^\w+:\/\//.test(file)) - return file; - let cached = this.memoizedPaths.get(file); - if (cached) - return cached; - let from = this.opts.to ? dirname(this.opts.to) : "."; - if (typeof this.mapOpts.annotation === "string") { - from = dirname(resolve(from, this.mapOpts.annotation)); - } - let path = relative(from, file); - this.memoizedPaths.set(file, path); - return path; - } - previous() { - if (!this.previousMaps) { - this.previousMaps = []; - if (this.root) { - this.root.walk((node) => { - if (node.source && node.source.input.map) { - let map = node.source.input.map; - if (!this.previousMaps.includes(map)) { - this.previousMaps.push(map); - } - } - }); - } else { - let input = new Input(this.originalCSS, this.opts); - if (input.map) - this.previousMaps.push(input.map); - } - } - return this.previousMaps; - } - setSourcesContent() { - let already = {}; - if (this.root) { - this.root.walk((node) => { - if (node.source) { - let from = node.source.input.from; - if (from && !already[from]) { - already[from] = true; - let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from)); - this.map.setSourceContent(fromUrl, node.source.input.css); - } - } - }); - } else if (this.css) { - let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : ""; - this.map.setSourceContent(from, this.css); - } - } - sourcePath(node) { - if (this.mapOpts.from) { - return this.toUrl(this.mapOpts.from); - } else if (this.usesFileUrls) { - return this.toFileUrl(node.source.input.from); - } else { - return this.toUrl(this.path(node.source.input.from)); - } - } - toBase64(str) { - if (Buffer) { - return Buffer.from(str).toString("base64"); - } else { - return window.btoa(unescape(encodeURIComponent(str))); - } - } - toFileUrl(path) { - let cached = this.memoizedFileURLs.get(path); - if (cached) - return cached; - if (pathToFileURL) { - let fileURL = pathToFileURL(path).toString(); - this.memoizedFileURLs.set(path, fileURL); - return fileURL; - } else { - throw new Error("`map.absolute` option is not available in this PostCSS build"); - } - } - toUrl(path) { - let cached = this.memoizedURLs.get(path); - if (cached) - return cached; - if (sep === "\\") { - path = path.replace(/\\/g, "/"); - } - let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent); - this.memoizedURLs.set(path, url); - return url; - } - } - module.exports = MapGenerator; -}); - -// node_modules/postcss/lib/parser.js -var require_parser = __commonJS((exports, module) => { - var AtRule = require_at_rule(); - var Comment = require_comment(); - var Declaration = require_declaration(); - var Root = require_root(); - var Rule = require_rule(); - var tokenizer = require_tokenize(); - var SAFE_COMMENT_NEIGHBOR = { - empty: true, - space: true - }; - function findLastWithPosition(tokens) { - for (let i = tokens.length - 1;i >= 0; i--) { - let token = tokens[i]; - let pos = token[3] || token[2]; - if (pos) - return pos; - } - } - - class Parser { - constructor(input) { - this.input = input; - this.root = new Root; - this.current = this.root; - this.spaces = ""; - this.semicolon = false; - this.createTokenizer(); - this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }; - } - atrule(token) { - let node = new AtRule; - node.name = token[1].slice(1); - if (node.name === "") { - this.unnamedAtrule(node, token); - } - this.init(node, token[2]); - let type; - let prev; - let shift; - let last = false; - let open = false; - let params = []; - let brackets = []; - while (!this.tokenizer.endOfFile()) { - token = this.tokenizer.nextToken(); - type = token[0]; - if (type === "(" || type === "[") { - brackets.push(type === "(" ? ")" : "]"); - } else if (type === "{" && brackets.length > 0) { - brackets.push("}"); - } else if (type === brackets[brackets.length - 1]) { - brackets.pop(); - } - if (brackets.length === 0) { - if (type === ";") { - node.source.end = this.getPosition(token[2]); - node.source.end.offset++; - this.semicolon = true; - break; - } else if (type === "{") { - open = true; - break; - } else if (type === "}") { - if (params.length > 0) { - shift = params.length - 1; - prev = params[shift]; - while (prev && prev[0] === "space") { - prev = params[--shift]; - } - if (prev) { - node.source.end = this.getPosition(prev[3] || prev[2]); - node.source.end.offset++; - } - } - this.end(token); - break; - } else { - params.push(token); - } - } else { - params.push(token); - } - if (this.tokenizer.endOfFile()) { - last = true; - break; - } - } - node.raws.between = this.spacesAndCommentsFromEnd(params); - if (params.length) { - node.raws.afterName = this.spacesAndCommentsFromStart(params); - this.raw(node, "params", params); - if (last) { - token = params[params.length - 1]; - node.source.end = this.getPosition(token[3] || token[2]); - node.source.end.offset++; - this.spaces = node.raws.between; - node.raws.between = ""; - } - } else { - node.raws.afterName = ""; - node.params = ""; - } - if (open) { - node.nodes = []; - this.current = node; - } - } - checkMissedSemicolon(tokens) { - let colon = this.colon(tokens); - if (colon === false) - return; - let founded = 0; - let token; - for (let j = colon - 1;j >= 0; j--) { - token = tokens[j]; - if (token[0] !== "space") { - founded += 1; - if (founded === 2) - break; - } - } - throw this.input.error("Missed semicolon", token[0] === "word" ? token[3] + 1 : token[2]); - } - colon(tokens) { - let brackets = 0; - let prev, token, type; - for (let [i, element] of tokens.entries()) { - token = element; - type = token[0]; - if (type === "(") { - brackets += 1; - } - if (type === ")") { - brackets -= 1; - } - if (brackets === 0 && type === ":") { - if (!prev) { - this.doubleColon(token); - } else if (prev[0] === "word" && prev[1] === "progid") { - continue; - } else { - return i; - } - } - prev = token; - } - return false; - } - comment(token) { - let node = new Comment; - this.init(node, token[2]); - node.source.end = this.getPosition(token[3] || token[2]); - node.source.end.offset++; - let text = token[1].slice(2, -2); - if (/^\s*$/.test(text)) { - node.text = ""; - node.raws.left = text; - node.raws.right = ""; - } else { - let match = text.match(/^(\s*)([^]*\S)(\s*)$/); - node.text = match[2]; - node.raws.left = match[1]; - node.raws.right = match[3]; - } - } - createTokenizer() { - this.tokenizer = tokenizer(this.input); - } - decl(tokens, customProperty) { - let node = new Declaration; - this.init(node, tokens[0][2]); - let last = tokens[tokens.length - 1]; - if (last[0] === ";") { - this.semicolon = true; - tokens.pop(); - } - node.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens)); - node.source.end.offset++; - while (tokens[0][0] !== "word") { - if (tokens.length === 1) - this.unknownWord(tokens); - node.raws.before += tokens.shift()[1]; - } - node.source.start = this.getPosition(tokens[0][2]); - node.prop = ""; - while (tokens.length) { - let type = tokens[0][0]; - if (type === ":" || type === "space" || type === "comment") { - break; - } - node.prop += tokens.shift()[1]; - } - node.raws.between = ""; - let token; - while (tokens.length) { - token = tokens.shift(); - if (token[0] === ":") { - node.raws.between += token[1]; - break; - } else { - if (token[0] === "word" && /\w/.test(token[1])) { - this.unknownWord([token]); - } - node.raws.between += token[1]; - } - } - if (node.prop[0] === "_" || node.prop[0] === "*") { - node.raws.before += node.prop[0]; - node.prop = node.prop.slice(1); - } - let firstSpaces = []; - let next; - while (tokens.length) { - next = tokens[0][0]; - if (next !== "space" && next !== "comment") - break; - firstSpaces.push(tokens.shift()); - } - this.precheckMissedSemicolon(tokens); - for (let i = tokens.length - 1;i >= 0; i--) { - token = tokens[i]; - if (token[1].toLowerCase() === "!important") { - node.important = true; - let string = this.stringFrom(tokens, i); - string = this.spacesFromEnd(tokens) + string; - if (string !== " !important") - node.raws.important = string; - break; - } else if (token[1].toLowerCase() === "important") { - let cache = tokens.slice(0); - let str = ""; - for (let j = i;j > 0; j--) { - let type = cache[j][0]; - if (str.trim().startsWith("!") && type !== "space") { - break; - } - str = cache.pop()[1] + str; - } - if (str.trim().startsWith("!")) { - node.important = true; - node.raws.important = str; - tokens = cache; - } - } - if (token[0] !== "space" && token[0] !== "comment") { - break; - } - } - let hasWord = tokens.some((i) => i[0] !== "space" && i[0] !== "comment"); - if (hasWord) { - node.raws.between += firstSpaces.map((i) => i[1]).join(""); - firstSpaces = []; - } - this.raw(node, "value", firstSpaces.concat(tokens), customProperty); - if (node.value.includes(":") && !customProperty) { - this.checkMissedSemicolon(tokens); - } - } - doubleColon(token) { - throw this.input.error("Double colon", { offset: token[2] }, { offset: token[2] + token[1].length }); - } - emptyRule(token) { - let node = new Rule; - this.init(node, token[2]); - node.selector = ""; - node.raws.between = ""; - this.current = node; - } - end(token) { - if (this.current.nodes && this.current.nodes.length) { - this.current.raws.semicolon = this.semicolon; - } - this.semicolon = false; - this.current.raws.after = (this.current.raws.after || "") + this.spaces; - this.spaces = ""; - if (this.current.parent) { - this.current.source.end = this.getPosition(token[2]); - this.current.source.end.offset++; - this.current = this.current.parent; - } else { - this.unexpectedClose(token); - } - } - endFile() { - if (this.current.parent) - this.unclosedBlock(); - if (this.current.nodes && this.current.nodes.length) { - this.current.raws.semicolon = this.semicolon; - } - this.current.raws.after = (this.current.raws.after || "") + this.spaces; - this.root.source.end = this.getPosition(this.tokenizer.position()); - } - freeSemicolon(token) { - this.spaces += token[1]; - if (this.current.nodes) { - let prev = this.current.nodes[this.current.nodes.length - 1]; - if (prev && prev.type === "rule" && !prev.raws.ownSemicolon) { - prev.raws.ownSemicolon = this.spaces; - this.spaces = ""; - } - } - } - getPosition(offset) { - let pos = this.input.fromOffset(offset); - return { - column: pos.col, - line: pos.line, - offset - }; - } - init(node, offset) { - this.current.push(node); - node.source = { - input: this.input, - start: this.getPosition(offset) - }; - node.raws.before = this.spaces; - this.spaces = ""; - if (node.type !== "comment") - this.semicolon = false; - } - other(start) { - let end = false; - let type = null; - let colon = false; - let bracket = null; - let brackets = []; - let customProperty = start[1].startsWith("--"); - let tokens = []; - let token = start; - while (token) { - type = token[0]; - tokens.push(token); - if (type === "(" || type === "[") { - if (!bracket) - bracket = token; - brackets.push(type === "(" ? ")" : "]"); - } else if (customProperty && colon && type === "{") { - if (!bracket) - bracket = token; - brackets.push("}"); - } else if (brackets.length === 0) { - if (type === ";") { - if (colon) { - this.decl(tokens, customProperty); - return; - } else { - break; - } - } else if (type === "{") { - this.rule(tokens); - return; - } else if (type === "}") { - this.tokenizer.back(tokens.pop()); - end = true; - break; - } else if (type === ":") { - colon = true; - } - } else if (type === brackets[brackets.length - 1]) { - brackets.pop(); - if (brackets.length === 0) - bracket = null; - } - token = this.tokenizer.nextToken(); - } - if (this.tokenizer.endOfFile()) - end = true; - if (brackets.length > 0) - this.unclosedBracket(bracket); - if (end && colon) { - if (!customProperty) { - while (tokens.length) { - token = tokens[tokens.length - 1][0]; - if (token !== "space" && token !== "comment") - break; - this.tokenizer.back(tokens.pop()); - } - } - this.decl(tokens, customProperty); - } else { - this.unknownWord(tokens); - } - } - parse() { - let token; - while (!this.tokenizer.endOfFile()) { - token = this.tokenizer.nextToken(); - switch (token[0]) { - case "space": - this.spaces += token[1]; - break; - case ";": - this.freeSemicolon(token); - break; - case "}": - this.end(token); - break; - case "comment": - this.comment(token); - break; - case "at-word": - this.atrule(token); - break; - case "{": - this.emptyRule(token); - break; - default: - this.other(token); - break; - } - } - this.endFile(); - } - precheckMissedSemicolon() { - } - raw(node, prop, tokens, customProperty) { - let token, type; - let length = tokens.length; - let value = ""; - let clean = true; - let next, prev; - for (let i = 0;i < length; i += 1) { - token = tokens[i]; - type = token[0]; - if (type === "space" && i === length - 1 && !customProperty) { - clean = false; - } else if (type === "comment") { - prev = tokens[i - 1] ? tokens[i - 1][0] : "empty"; - next = tokens[i + 1] ? tokens[i + 1][0] : "empty"; - if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) { - if (value.slice(-1) === ",") { - clean = false; - } else { - value += token[1]; - } - } else { - clean = false; - } - } else { - value += token[1]; - } - } - if (!clean) { - let raw = tokens.reduce((all, i) => all + i[1], ""); - node.raws[prop] = { raw, value }; - } - node[prop] = value; - } - rule(tokens) { - tokens.pop(); - let node = new Rule; - this.init(node, tokens[0][2]); - node.raws.between = this.spacesAndCommentsFromEnd(tokens); - this.raw(node, "selector", tokens); - this.current = node; - } - spacesAndCommentsFromEnd(tokens) { - let lastTokenType; - let spaces = ""; - while (tokens.length) { - lastTokenType = tokens[tokens.length - 1][0]; - if (lastTokenType !== "space" && lastTokenType !== "comment") - break; - spaces = tokens.pop()[1] + spaces; - } - return spaces; - } - spacesAndCommentsFromStart(tokens) { - let next; - let spaces = ""; - while (tokens.length) { - next = tokens[0][0]; - if (next !== "space" && next !== "comment") - break; - spaces += tokens.shift()[1]; - } - return spaces; - } - spacesFromEnd(tokens) { - let lastTokenType; - let spaces = ""; - while (tokens.length) { - lastTokenType = tokens[tokens.length - 1][0]; - if (lastTokenType !== "space") - break; - spaces = tokens.pop()[1] + spaces; - } - return spaces; - } - stringFrom(tokens, from) { - let result = ""; - for (let i = from;i < tokens.length; i++) { - result += tokens[i][1]; - } - tokens.splice(from, tokens.length - from); - return result; - } - unclosedBlock() { - let pos = this.current.source.start; - throw this.input.error("Unclosed block", pos.line, pos.column); - } - unclosedBracket(bracket) { - throw this.input.error("Unclosed bracket", { offset: bracket[2] }, { offset: bracket[2] + 1 }); - } - unexpectedClose(token) { - throw this.input.error("Unexpected }", { offset: token[2] }, { offset: token[2] + 1 }); - } - unknownWord(tokens) { - throw this.input.error("Unknown word", { offset: tokens[0][2] }, { offset: tokens[0][2] + tokens[0][1].length }); - } - unnamedAtrule(node, token) { - throw this.input.error("At-rule without name", { offset: token[2] }, { offset: token[2] + token[1].length }); - } - } - module.exports = Parser; -}); - -// node_modules/postcss/lib/parse.js -var require_parse = __commonJS((exports, module) => { - var Container = require_container(); - var Input = require_input(); - var Parser = require_parser(); - function parse(css, opts) { - let input = new Input(css, opts); - let parser = new Parser(input); - try { - parser.parse(); - } catch (e) { - if (true) { - if (e.name === "CssSyntaxError" && opts && opts.from) { - if (/\.scss$/i.test(opts.from)) { - e.message += "\nYou tried to parse SCSS with " + "the standard CSS parser; " + "try again with the postcss-scss parser"; - } else if (/\.sass/i.test(opts.from)) { - e.message += "\nYou tried to parse Sass with " + "the standard CSS parser; " + "try again with the postcss-sass parser"; - } else if (/\.less$/i.test(opts.from)) { - e.message += "\nYou tried to parse Less with " + "the standard CSS parser; " + "try again with the postcss-less parser"; - } - } - } - throw e; - } - return parser.root; - } - module.exports = parse; - parse.default = parse; - Container.registerParse(parse); -}); - -// node_modules/postcss/lib/warning.js -var require_warning = __commonJS((exports, module) => { - class Warning { - constructor(text, opts = {}) { - this.type = "warning"; - this.text = text; - if (opts.node && opts.node.source) { - let range = opts.node.rangeBy(opts); - this.line = range.start.line; - this.column = range.start.column; - this.endLine = range.end.line; - this.endColumn = range.end.column; - } - for (let opt in opts) - this[opt] = opts[opt]; - } - toString() { - if (this.node) { - return this.node.error(this.text, { - index: this.index, - plugin: this.plugin, - word: this.word - }).message; - } - if (this.plugin) { - return this.plugin + ": " + this.text; - } - return this.text; - } - } - module.exports = Warning; - Warning.default = Warning; -}); - -// node_modules/postcss/lib/result.js -var require_result = __commonJS((exports, module) => { - var Warning = require_warning(); - - class Result { - constructor(processor, root, opts) { - this.processor = processor; - this.messages = []; - this.root = root; - this.opts = opts; - this.css = undefined; - this.map = undefined; - } - toString() { - return this.css; - } - warn(text, opts = {}) { - if (!opts.plugin) { - if (this.lastPlugin && this.lastPlugin.postcssPlugin) { - opts.plugin = this.lastPlugin.postcssPlugin; - } - } - let warning = new Warning(text, opts); - this.messages.push(warning); - return warning; - } - warnings() { - return this.messages.filter((i) => i.type === "warning"); - } - get content() { - return this.css; - } - } - module.exports = Result; - Result.default = Result; -}); - -// node_modules/postcss/lib/warn-once.js -var require_warn_once = __commonJS((exports, module) => { - var printed = {}; - module.exports = function warnOnce(message) { - if (printed[message]) - return; - printed[message] = true; - if (typeof console !== "undefined" && console.warn) { - console.warn(message); - } - }; -}); - -// node_modules/postcss/lib/lazy-result.js -var require_lazy_result = __commonJS((exports, module) => { - var Container = require_container(); - var Document = require_document(); - var MapGenerator = require_map_generator(); - var parse = require_parse(); - var Result = require_result(); - var Root = require_root(); - var stringify = require_stringify2(); - var { isClean, my } = require_symbols(); - var warnOnce = require_warn_once(); - var TYPE_TO_CLASS_NAME = { - atrule: "AtRule", - comment: "Comment", - decl: "Declaration", - document: "Document", - root: "Root", - rule: "Rule" - }; - var PLUGIN_PROPS = { - AtRule: true, - AtRuleExit: true, - Comment: true, - CommentExit: true, - Declaration: true, - DeclarationExit: true, - Document: true, - DocumentExit: true, - Once: true, - OnceExit: true, - postcssPlugin: true, - prepare: true, - Root: true, - RootExit: true, - Rule: true, - RuleExit: true - }; - var NOT_VISITORS = { - Once: true, - postcssPlugin: true, - prepare: true - }; - var CHILDREN = 0; - function isPromise(obj) { - return typeof obj === "object" && typeof obj.then === "function"; - } - function getEvents(node) { - let key = false; - let type = TYPE_TO_CLASS_NAME[node.type]; - if (node.type === "decl") { - key = node.prop.toLowerCase(); - } else if (node.type === "atrule") { - key = node.name.toLowerCase(); - } - if (key && node.append) { - return [ - type, - type + "-" + key, - CHILDREN, - type + "Exit", - type + "Exit-" + key - ]; - } else if (key) { - return [type, type + "-" + key, type + "Exit", type + "Exit-" + key]; - } else if (node.append) { - return [type, CHILDREN, type + "Exit"]; - } else { - return [type, type + "Exit"]; - } - } - function toStack(node) { - let events; - if (node.type === "document") { - events = ["Document", CHILDREN, "DocumentExit"]; - } else if (node.type === "root") { - events = ["Root", CHILDREN, "RootExit"]; - } else { - events = getEvents(node); - } - return { - eventIndex: 0, - events, - iterator: 0, - node, - visitorIndex: 0, - visitors: [] - }; - } - function cleanMarks(node) { - node[isClean] = false; - if (node.nodes) - node.nodes.forEach((i) => cleanMarks(i)); - return node; - } - var postcss = {}; - - class LazyResult { - constructor(processor, css, opts) { - this.stringified = false; - this.processed = false; - let root; - if (typeof css === "object" && css !== null && (css.type === "root" || css.type === "document")) { - root = cleanMarks(css); - } else if (css instanceof LazyResult || css instanceof Result) { - root = cleanMarks(css.root); - if (css.map) { - if (typeof opts.map === "undefined") - opts.map = {}; - if (!opts.map.inline) - opts.map.inline = false; - opts.map.prev = css.map; - } - } else { - let parser = parse; - if (opts.syntax) - parser = opts.syntax.parse; - if (opts.parser) - parser = opts.parser; - if (parser.parse) - parser = parser.parse; - try { - root = parser(css, opts); - } catch (error) { - this.processed = true; - this.error = error; - } - if (root && !root[my]) { - Container.rebuild(root); - } - } - this.result = new Result(processor, root, opts); - this.helpers = { ...postcss, postcss, result: this.result }; - this.plugins = this.processor.plugins.map((plugin) => { - if (typeof plugin === "object" && plugin.prepare) { - return { ...plugin, ...plugin.prepare(this.result) }; - } else { - return plugin; - } - }); - } - async() { - if (this.error) - return Promise.reject(this.error); - if (this.processed) - return Promise.resolve(this.result); - if (!this.processing) { - this.processing = this.runAsync(); - } - return this.processing; - } - catch(onRejected) { - return this.async().catch(onRejected); - } - finally(onFinally) { - return this.async().then(onFinally, onFinally); - } - getAsyncError() { - throw new Error("Use process(css).then(cb) to work with async plugins"); - } - handleError(error, node) { - let plugin = this.result.lastPlugin; - try { - if (node) - node.addToError(error); - this.error = error; - if (error.name === "CssSyntaxError" && !error.plugin) { - error.plugin = plugin.postcssPlugin; - error.setMessage(); - } else if (plugin.postcssVersion) { - if (true) { - let pluginName = plugin.postcssPlugin; - let pluginVer = plugin.postcssVersion; - let runtimeVer = this.result.processor.version; - let a = pluginVer.split("."); - let b = runtimeVer.split("."); - if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) { - console.error("Unknown error from PostCSS plugin. Your current PostCSS " + "version is " + runtimeVer + ", but " + pluginName + " uses " + pluginVer + ". Perhaps this is the source of the error below."); - } - } - } - } catch (err) { - if (console && console.error) - console.error(err); - } - return error; - } - prepareVisitors() { - this.listeners = {}; - let add = (plugin, type, cb) => { - if (!this.listeners[type]) - this.listeners[type] = []; - this.listeners[type].push([plugin, cb]); - }; - for (let plugin of this.plugins) { - if (typeof plugin === "object") { - for (let event in plugin) { - if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) { - throw new Error(`Unknown event ${event} in ${plugin.postcssPlugin}. ` + `Try to update PostCSS (${this.processor.version} now).`); - } - if (!NOT_VISITORS[event]) { - if (typeof plugin[event] === "object") { - for (let filter in plugin[event]) { - if (filter === "*") { - add(plugin, event, plugin[event][filter]); - } else { - add(plugin, event + "-" + filter.toLowerCase(), plugin[event][filter]); - } - } - } else if (typeof plugin[event] === "function") { - add(plugin, event, plugin[event]); - } - } - } - } - } - this.hasListener = Object.keys(this.listeners).length > 0; - } - async runAsync() { - this.plugin = 0; - for (let i = 0;i < this.plugins.length; i++) { - let plugin = this.plugins[i]; - let promise = this.runOnRoot(plugin); - if (isPromise(promise)) { - try { - await promise; - } catch (error) { - throw this.handleError(error); - } - } - } - this.prepareVisitors(); - if (this.hasListener) { - let root = this.result.root; - while (!root[isClean]) { - root[isClean] = true; - let stack = [toStack(root)]; - while (stack.length > 0) { - let promise = this.visitTick(stack); - if (isPromise(promise)) { - try { - await promise; - } catch (e) { - let node = stack[stack.length - 1].node; - throw this.handleError(e, node); - } - } - } - } - if (this.listeners.OnceExit) { - for (let [plugin, visitor] of this.listeners.OnceExit) { - this.result.lastPlugin = plugin; - try { - if (root.type === "document") { - let roots = root.nodes.map((subRoot) => visitor(subRoot, this.helpers)); - await Promise.all(roots); - } else { - await visitor(root, this.helpers); - } - } catch (e) { - throw this.handleError(e); - } - } - } - } - this.processed = true; - return this.stringify(); - } - runOnRoot(plugin) { - this.result.lastPlugin = plugin; - try { - if (typeof plugin === "object" && plugin.Once) { - if (this.result.root.type === "document") { - let roots = this.result.root.nodes.map((root) => plugin.Once(root, this.helpers)); - if (isPromise(roots[0])) { - return Promise.all(roots); - } - return roots; - } - return plugin.Once(this.result.root, this.helpers); - } else if (typeof plugin === "function") { - return plugin(this.result.root, this.result); - } - } catch (error) { - throw this.handleError(error); - } - } - stringify() { - if (this.error) - throw this.error; - if (this.stringified) - return this.result; - this.stringified = true; - this.sync(); - let opts = this.result.opts; - let str = stringify; - if (opts.syntax) - str = opts.syntax.stringify; - if (opts.stringifier) - str = opts.stringifier; - if (str.stringify) - str = str.stringify; - let map = new MapGenerator(str, this.result.root, this.result.opts); - let data = map.generate(); - this.result.css = data[0]; - this.result.map = data[1]; - return this.result; - } - sync() { - if (this.error) - throw this.error; - if (this.processed) - return this.result; - this.processed = true; - if (this.processing) { - throw this.getAsyncError(); - } - for (let plugin of this.plugins) { - let promise = this.runOnRoot(plugin); - if (isPromise(promise)) { - throw this.getAsyncError(); - } - } - this.prepareVisitors(); - if (this.hasListener) { - let root = this.result.root; - while (!root[isClean]) { - root[isClean] = true; - this.walkSync(root); - } - if (this.listeners.OnceExit) { - if (root.type === "document") { - for (let subRoot of root.nodes) { - this.visitSync(this.listeners.OnceExit, subRoot); - } - } else { - this.visitSync(this.listeners.OnceExit, root); - } - } - } - return this.result; - } - then(onFulfilled, onRejected) { - if (true) { - if (!("from" in this.opts)) { - warnOnce("Without `from` option PostCSS could generate wrong source map " + "and will not find Browserslist config. Set it to CSS file path " + "or to `undefined` to prevent this warning."); - } - } - return this.async().then(onFulfilled, onRejected); - } - toString() { - return this.css; - } - visitSync(visitors, node) { - for (let [plugin, visitor] of visitors) { - this.result.lastPlugin = plugin; - let promise; - try { - promise = visitor(node, this.helpers); - } catch (e) { - throw this.handleError(e, node.proxyOf); - } - if (node.type !== "root" && node.type !== "document" && !node.parent) { - return true; - } - if (isPromise(promise)) { - throw this.getAsyncError(); - } - } - } - visitTick(stack) { - let visit = stack[stack.length - 1]; - let { node, visitors } = visit; - if (node.type !== "root" && node.type !== "document" && !node.parent) { - stack.pop(); - return; - } - if (visitors.length > 0 && visit.visitorIndex < visitors.length) { - let [plugin, visitor] = visitors[visit.visitorIndex]; - visit.visitorIndex += 1; - if (visit.visitorIndex === visitors.length) { - visit.visitors = []; - visit.visitorIndex = 0; - } - this.result.lastPlugin = plugin; - try { - return visitor(node.toProxy(), this.helpers); - } catch (e) { - throw this.handleError(e, node); - } - } - if (visit.iterator !== 0) { - let iterator = visit.iterator; - let child; - while (child = node.nodes[node.indexes[iterator]]) { - node.indexes[iterator] += 1; - if (!child[isClean]) { - child[isClean] = true; - stack.push(toStack(child)); - return; - } - } - visit.iterator = 0; - delete node.indexes[iterator]; - } - let events = visit.events; - while (visit.eventIndex < events.length) { - let event = events[visit.eventIndex]; - visit.eventIndex += 1; - if (event === CHILDREN) { - if (node.nodes && node.nodes.length) { - node[isClean] = true; - visit.iterator = node.getIterator(); - } - return; - } else if (this.listeners[event]) { - visit.visitors = this.listeners[event]; - return; - } - } - stack.pop(); - } - walkSync(node) { - node[isClean] = true; - let events = getEvents(node); - for (let event of events) { - if (event === CHILDREN) { - if (node.nodes) { - node.each((child) => { - if (!child[isClean]) - this.walkSync(child); - }); - } - } else { - let visitors = this.listeners[event]; - if (visitors) { - if (this.visitSync(visitors, node.toProxy())) - return; - } - } - } - } - warnings() { - return this.sync().warnings(); - } - get content() { - return this.stringify().content; - } - get css() { - return this.stringify().css; - } - get map() { - return this.stringify().map; - } - get messages() { - return this.sync().messages; - } - get opts() { - return this.result.opts; - } - get processor() { - return this.result.processor; - } - get root() { - return this.sync().root; - } - get [Symbol.toStringTag]() { - return "LazyResult"; - } - } - LazyResult.registerPostcss = (dependant) => { - postcss = dependant; - }; - module.exports = LazyResult; - LazyResult.default = LazyResult; - Root.registerLazyResult(LazyResult); - Document.registerLazyResult(LazyResult); -}); - -// node_modules/postcss/lib/no-work-result.js -var require_no_work_result = __commonJS((exports, module) => { - var MapGenerator = require_map_generator(); - var parse = require_parse(); - var Result = require_result(); - var stringify = require_stringify2(); - var warnOnce = require_warn_once(); - - class NoWorkResult { - constructor(processor, css, opts) { - css = css.toString(); - this.stringified = false; - this._processor = processor; - this._css = css; - this._opts = opts; - this._map = undefined; - let root; - let str = stringify; - this.result = new Result(this._processor, root, this._opts); - this.result.css = css; - let self2 = this; - Object.defineProperty(this.result, "root", { - get() { - return self2.root; - } - }); - let map = new MapGenerator(str, root, this._opts, css); - if (map.isMap()) { - let [generatedCSS, generatedMap] = map.generate(); - if (generatedCSS) { - this.result.css = generatedCSS; - } - if (generatedMap) { - this.result.map = generatedMap; - } - } else { - map.clearAnnotation(); - this.result.css = map.css; - } - } - async() { - if (this.error) - return Promise.reject(this.error); - return Promise.resolve(this.result); - } - catch(onRejected) { - return this.async().catch(onRejected); - } - finally(onFinally) { - return this.async().then(onFinally, onFinally); - } - sync() { - if (this.error) - throw this.error; - return this.result; - } - then(onFulfilled, onRejected) { - if (true) { - if (!("from" in this._opts)) { - warnOnce("Without `from` option PostCSS could generate wrong source map " + "and will not find Browserslist config. Set it to CSS file path " + "or to `undefined` to prevent this warning."); - } - } - return this.async().then(onFulfilled, onRejected); - } - toString() { - return this._css; - } - warnings() { - return []; - } - get content() { - return this.result.css; - } - get css() { - return this.result.css; - } - get map() { - return this.result.map; - } - get messages() { - return []; - } - get opts() { - return this.result.opts; - } - get processor() { - return this.result.processor; - } - get root() { - if (this._root) { - return this._root; - } - let root; - let parser = parse; - try { - root = parser(this._css, this._opts); - } catch (error) { - this.error = error; - } - if (this.error) { - throw this.error; - } else { - this._root = root; - return root; - } - } - get [Symbol.toStringTag]() { - return "NoWorkResult"; - } - } - module.exports = NoWorkResult; - NoWorkResult.default = NoWorkResult; -}); - -// node_modules/postcss/lib/processor.js -var require_processor = __commonJS((exports, module) => { - var Document = require_document(); - var LazyResult = require_lazy_result(); - var NoWorkResult = require_no_work_result(); - var Root = require_root(); - - class Processor { - constructor(plugins = []) { - this.version = "8.4.47"; - this.plugins = this.normalize(plugins); - } - normalize(plugins) { - let normalized = []; - for (let i of plugins) { - if (i.postcss === true) { - i = i(); - } else if (i.postcss) { - i = i.postcss; - } - if (typeof i === "object" && Array.isArray(i.plugins)) { - normalized = normalized.concat(i.plugins); - } else if (typeof i === "object" && i.postcssPlugin) { - normalized.push(i); - } else if (typeof i === "function") { - normalized.push(i); - } else if (typeof i === "object" && (i.parse || i.stringify)) { - if (true) { - throw new Error("PostCSS syntaxes cannot be used as plugins. Instead, please use " + "one of the syntax/parser/stringifier options as outlined " + "in your PostCSS runner documentation."); - } - } else { - throw new Error(i + " is not a PostCSS plugin"); - } - } - return normalized; - } - process(css, opts = {}) { - if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) { - return new NoWorkResult(this, css, opts); - } else { - return new LazyResult(this, css, opts); - } - } - use(plugin) { - this.plugins = this.plugins.concat(this.normalize([plugin])); - return this; - } - } - module.exports = Processor; - Processor.default = Processor; - Root.registerProcessor(Processor); - Document.registerProcessor(Processor); -}); - -// node_modules/postcss/lib/postcss.js -var require_postcss = __commonJS((exports, module) => { - var AtRule = require_at_rule(); - var Comment = require_comment(); - var Container = require_container(); - var CssSyntaxError = require_css_syntax_error(); - var Declaration = require_declaration(); - var Document = require_document(); - var fromJSON = require_fromJSON(); - var Input = require_input(); - var LazyResult = require_lazy_result(); - var list = require_list(); - var Node = require_node3(); - var parse = require_parse(); - var Processor = require_processor(); - var Result = require_result(); - var Root = require_root(); - var Rule = require_rule(); - var stringify = require_stringify2(); - var Warning = require_warning(); - function postcss(...plugins) { - if (plugins.length === 1 && Array.isArray(plugins[0])) { - plugins = plugins[0]; - } - return new Processor(plugins); - } - postcss.plugin = function plugin(name, initializer) { - let warningPrinted = false; - function creator(...args) { - if (console && console.warn && !warningPrinted) { - warningPrinted = true; - console.warn(name + ": postcss.plugin was deprecated. Migration guide:\n" + "https://evilmartians.com/chronicles/postcss-8-plugin-migration"); - if (process.env.LANG && process.env.LANG.startsWith("cn")) { - console.warn(name + `: \u91CC\u9762 postcss.plugin \u88AB\u5F03\u7528. \u8FC1\u79FB\u6307\u5357: -` + "https://www.w3ctech.com/topic/2226"); - } - } - let transformer = initializer(...args); - transformer.postcssPlugin = name; - transformer.postcssVersion = new Processor().version; - return transformer; - } - let cache; - Object.defineProperty(creator, "postcss", { - get() { - if (!cache) - cache = creator(); - return cache; - } - }); - creator.process = function(css, processOpts, pluginOpts) { - return postcss([creator(pluginOpts)]).process(css, processOpts); - }; - return creator; - }; - postcss.stringify = stringify; - postcss.parse = parse; - postcss.fromJSON = fromJSON; - postcss.list = list; - postcss.comment = (defaults) => new Comment(defaults); - postcss.atRule = (defaults) => new AtRule(defaults); - postcss.decl = (defaults) => new Declaration(defaults); - postcss.rule = (defaults) => new Rule(defaults); - postcss.root = (defaults) => new Root(defaults); - postcss.document = (defaults) => new Document(defaults); - postcss.CssSyntaxError = CssSyntaxError; - postcss.Declaration = Declaration; - postcss.Container = Container; - postcss.Processor = Processor; - postcss.Document = Document; - postcss.Comment = Comment; - postcss.Warning = Warning; - postcss.AtRule = AtRule; - postcss.Result = Result; - postcss.Input = Input; - postcss.Rule = Rule; - postcss.Root = Root; - postcss.Node = Node; - LazyResult.registerPostcss(postcss); - module.exports = postcss; - postcss.default = postcss; -}); - -// node_modules/sanitize-html/index.js -var require_sanitize_html = __commonJS((exports, module) => { - var htmlparser = require_lib6(); - var escapeStringRegexp = require_escape_string_regexp(); - var { isPlainObject } = require_is_plain_object(); - var deepmerge = require_cjs(); - var parseSrcset = require_parse_srcset(); - var { parse: postcssParse } = require_postcss(); - var mediaTags = [ - "img", - "audio", - "video", - "picture", - "svg", - "object", - "map", - "iframe", - "embed" - ]; - var vulnerableTags = ["script", "style"]; - function each(obj, cb) { - if (obj) { - Object.keys(obj).forEach(function(key) { - cb(obj[key], key); - }); - } - } - function has(obj, key) { - return {}.hasOwnProperty.call(obj, key); - } - function filter(a, cb) { - const n = []; - each(a, function(v) { - if (cb(v)) { - n.push(v); - } - }); - return n; - } - function isEmptyObject(obj) { - for (const key in obj) { - if (has(obj, key)) { - return false; - } - } - return true; - } - function stringifySrcset(parsedSrcset) { - return parsedSrcset.map(function(part) { - if (!part.url) { - throw new Error("URL missing"); - } - return part.url + (part.w ? ` ${part.w}w` : "") + (part.h ? ` ${part.h}h` : "") + (part.d ? ` ${part.d}x` : ""); - }).join(", "); - } - module.exports = sanitizeHtml; - var VALID_HTML_ATTRIBUTE_NAME = /^[^\0\t\n\f\r /<=>]+$/; - function sanitizeHtml(html, options, _recursing) { - if (html == null) { - return ""; - } - if (typeof html === "number") { - html = html.toString(); - } - let result = ""; - let tempResult = ""; - function Frame(tag, attribs) { - const that = this; - this.tag = tag; - this.attribs = attribs || {}; - this.tagPosition = result.length; - this.text = ""; - this.mediaChildren = []; - this.updateParentNodeText = function() { - if (stack.length) { - const parentFrame = stack[stack.length - 1]; - parentFrame.text += that.text; - } - }; - this.updateParentNodeMediaChildren = function() { - if (stack.length && mediaTags.includes(this.tag)) { - const parentFrame = stack[stack.length - 1]; - parentFrame.mediaChildren.push(this.tag); - } - }; - } - options = Object.assign({}, sanitizeHtml.defaults, options); - options.parser = Object.assign({}, htmlParserDefaults, options.parser); - const tagAllowed = function(name) { - return options.allowedTags === false || (options.allowedTags || []).indexOf(name) > -1; - }; - vulnerableTags.forEach(function(tag) { - if (tagAllowed(tag) && !options.allowVulnerableTags) { - console.warn(` - -\u26A0\uFE0F Your \`allowedTags\` option includes, \`${tag}\`, which is inherently\nvulnerable to XSS attacks. Please remove it from \`allowedTags\`.\nOr, to disable this warning, add the \`allowVulnerableTags\` option\nand ensure you are accounting for this risk.\n\n`); - } - }); - const nonTextTagsArray = options.nonTextTags || [ - "script", - "style", - "textarea", - "option" - ]; - let allowedAttributesMap; - let allowedAttributesGlobMap; - if (options.allowedAttributes) { - allowedAttributesMap = {}; - allowedAttributesGlobMap = {}; - each(options.allowedAttributes, function(attributes, tag) { - allowedAttributesMap[tag] = []; - const globRegex = []; - attributes.forEach(function(obj) { - if (typeof obj === "string" && obj.indexOf("*") >= 0) { - globRegex.push(escapeStringRegexp(obj).replace(/\\\*/g, ".*")); - } else { - allowedAttributesMap[tag].push(obj); - } - }); - if (globRegex.length) { - allowedAttributesGlobMap[tag] = new RegExp("^(" + globRegex.join("|") + ")$"); - } - }); - } - const allowedClassesMap = {}; - const allowedClassesGlobMap = {}; - const allowedClassesRegexMap = {}; - each(options.allowedClasses, function(classes, tag) { - if (allowedAttributesMap) { - if (!has(allowedAttributesMap, tag)) { - allowedAttributesMap[tag] = []; - } - allowedAttributesMap[tag].push("class"); - } - allowedClassesMap[tag] = classes; - if (Array.isArray(classes)) { - const globRegex = []; - allowedClassesMap[tag] = []; - allowedClassesRegexMap[tag] = []; - classes.forEach(function(obj) { - if (typeof obj === "string" && obj.indexOf("*") >= 0) { - globRegex.push(escapeStringRegexp(obj).replace(/\\\*/g, ".*")); - } else if (obj instanceof RegExp) { - allowedClassesRegexMap[tag].push(obj); - } else { - allowedClassesMap[tag].push(obj); - } - }); - if (globRegex.length) { - allowedClassesGlobMap[tag] = new RegExp("^(" + globRegex.join("|") + ")$"); - } - } - }); - const transformTagsMap = {}; - let transformTagsAll; - each(options.transformTags, function(transform, tag) { - let transFun; - if (typeof transform === "function") { - transFun = transform; - } else if (typeof transform === "string") { - transFun = sanitizeHtml.simpleTransform(transform); - } - if (tag === "*") { - transformTagsAll = transFun; - } else { - transformTagsMap[tag] = transFun; - } - }); - let depth; - let stack; - let skipMap; - let transformMap; - let skipText; - let skipTextDepth; - let addedText = false; - initializeState(); - const parser = new htmlparser.Parser({ - onopentag: function(name, attribs) { - if (options.enforceHtmlBoundary && name === "html") { - initializeState(); - } - if (skipText) { - skipTextDepth++; - return; - } - const frame = new Frame(name, attribs); - stack.push(frame); - let skip = false; - const hasText = !!frame.text; - let transformedTag; - if (has(transformTagsMap, name)) { - transformedTag = transformTagsMap[name](name, attribs); - frame.attribs = attribs = transformedTag.attribs; - if (transformedTag.text !== undefined) { - frame.innerText = transformedTag.text; - } - if (name !== transformedTag.tagName) { - frame.name = name = transformedTag.tagName; - transformMap[depth] = transformedTag.tagName; - } - } - if (transformTagsAll) { - transformedTag = transformTagsAll(name, attribs); - frame.attribs = attribs = transformedTag.attribs; - if (name !== transformedTag.tagName) { - frame.name = name = transformedTag.tagName; - transformMap[depth] = transformedTag.tagName; - } - } - if (!tagAllowed(name) || options.disallowedTagsMode === "recursiveEscape" && !isEmptyObject(skipMap) || options.nestingLimit != null && depth >= options.nestingLimit) { - skip = true; - skipMap[depth] = true; - if (options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") { - if (nonTextTagsArray.indexOf(name) !== -1) { - skipText = true; - skipTextDepth = 1; - } - } - skipMap[depth] = true; - } - depth++; - if (skip) { - if (options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") { - return; - } - tempResult = result; - result = ""; - } - result += "<" + name; - if (name === "script") { - if (options.allowedScriptHostnames || options.allowedScriptDomains) { - frame.innerText = ""; - } - } - if (!allowedAttributesMap || has(allowedAttributesMap, name) || allowedAttributesMap["*"]) { - each(attribs, function(value, a) { - if (!VALID_HTML_ATTRIBUTE_NAME.test(a)) { - delete frame.attribs[a]; - return; - } - if (value === "" && !options.allowedEmptyAttributes.includes(a) && (options.nonBooleanAttributes.includes(a) || options.nonBooleanAttributes.includes("*"))) { - delete frame.attribs[a]; - return; - } - let passedAllowedAttributesMapCheck = false; - if (!allowedAttributesMap || has(allowedAttributesMap, name) && allowedAttributesMap[name].indexOf(a) !== -1 || allowedAttributesMap["*"] && allowedAttributesMap["*"].indexOf(a) !== -1 || has(allowedAttributesGlobMap, name) && allowedAttributesGlobMap[name].test(a) || allowedAttributesGlobMap["*"] && allowedAttributesGlobMap["*"].test(a)) { - passedAllowedAttributesMapCheck = true; - } else if (allowedAttributesMap && allowedAttributesMap[name]) { - for (const o of allowedAttributesMap[name]) { - if (isPlainObject(o) && o.name && o.name === a) { - passedAllowedAttributesMapCheck = true; - let newValue = ""; - if (o.multiple === true) { - const splitStrArray = value.split(" "); - for (const s of splitStrArray) { - if (o.values.indexOf(s) !== -1) { - if (newValue === "") { - newValue = s; - } else { - newValue += " " + s; - } - } - } - } else if (o.values.indexOf(value) >= 0) { - newValue = value; - } - value = newValue; - } - } - } - if (passedAllowedAttributesMapCheck) { - if (options.allowedSchemesAppliedToAttributes.indexOf(a) !== -1) { - if (naughtyHref(name, value)) { - delete frame.attribs[a]; - return; - } - } - if (name === "script" && a === "src") { - let allowed = true; - try { - const parsed = parseUrl(value); - if (options.allowedScriptHostnames || options.allowedScriptDomains) { - const allowedHostname = (options.allowedScriptHostnames || []).find(function(hostname) { - return hostname === parsed.url.hostname; - }); - const allowedDomain = (options.allowedScriptDomains || []).find(function(domain) { - return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`); - }); - allowed = allowedHostname || allowedDomain; - } - } catch (e) { - allowed = false; - } - if (!allowed) { - delete frame.attribs[a]; - return; - } - } - if (name === "iframe" && a === "src") { - let allowed = true; - try { - const parsed = parseUrl(value); - if (parsed.isRelativeUrl) { - allowed = has(options, "allowIframeRelativeUrls") ? options.allowIframeRelativeUrls : !options.allowedIframeHostnames && !options.allowedIframeDomains; - } else if (options.allowedIframeHostnames || options.allowedIframeDomains) { - const allowedHostname = (options.allowedIframeHostnames || []).find(function(hostname) { - return hostname === parsed.url.hostname; - }); - const allowedDomain = (options.allowedIframeDomains || []).find(function(domain) { - return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`); - }); - allowed = allowedHostname || allowedDomain; - } - } catch (e) { - allowed = false; - } - if (!allowed) { - delete frame.attribs[a]; - return; - } - } - if (a === "srcset") { - try { - let parsed = parseSrcset(value); - parsed.forEach(function(value2) { - if (naughtyHref("srcset", value2.url)) { - value2.evil = true; - } - }); - parsed = filter(parsed, function(v) { - return !v.evil; - }); - if (!parsed.length) { - delete frame.attribs[a]; - return; - } else { - value = stringifySrcset(filter(parsed, function(v) { - return !v.evil; - })); - frame.attribs[a] = value; - } - } catch (e) { - delete frame.attribs[a]; - return; - } - } - if (a === "class") { - const allowedSpecificClasses = allowedClassesMap[name]; - const allowedWildcardClasses = allowedClassesMap["*"]; - const allowedSpecificClassesGlob = allowedClassesGlobMap[name]; - const allowedSpecificClassesRegex = allowedClassesRegexMap[name]; - const allowedWildcardClassesRegex = allowedClassesRegexMap["*"]; - const allowedWildcardClassesGlob = allowedClassesGlobMap["*"]; - const allowedClassesGlobs = [ - allowedSpecificClassesGlob, - allowedWildcardClassesGlob - ].concat(allowedSpecificClassesRegex, allowedWildcardClassesRegex).filter(function(t) { - return t; - }); - if (allowedSpecificClasses && allowedWildcardClasses) { - value = filterClasses(value, deepmerge(allowedSpecificClasses, allowedWildcardClasses), allowedClassesGlobs); - } else { - value = filterClasses(value, allowedSpecificClasses || allowedWildcardClasses, allowedClassesGlobs); - } - if (!value.length) { - delete frame.attribs[a]; - return; - } - } - if (a === "style") { - if (options.parseStyleAttributes) { - try { - const abstractSyntaxTree = postcssParse(name + " {" + value + "}", { map: false }); - const filteredAST = filterCss(abstractSyntaxTree, options.allowedStyles); - value = stringifyStyleAttributes(filteredAST); - if (value.length === 0) { - delete frame.attribs[a]; - return; - } - } catch (e) { - if (typeof window !== "undefined") { - console.warn('Failed to parse "' + name + " {" + value + "}" + '", If you\'re running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547'); - } - delete frame.attribs[a]; - return; - } - } else if (options.allowedStyles) { - throw new Error("allowedStyles option cannot be used together with parseStyleAttributes: false."); - } - } - result += " " + a; - if (value && value.length) { - result += '="' + escapeHtml(value, true) + '"'; - } else if (options.allowedEmptyAttributes.includes(a)) { - result += '=""'; - } - } else { - delete frame.attribs[a]; - } - }); - } - if (options.selfClosing.indexOf(name) !== -1) { - result += " />"; - } else { - result += ">"; - if (frame.innerText && !hasText && !options.textFilter) { - result += escapeHtml(frame.innerText); - addedText = true; - } - } - if (skip) { - result = tempResult + escapeHtml(result); - tempResult = ""; - } - }, - ontext: function(text) { - if (skipText) { - return; - } - const lastFrame = stack[stack.length - 1]; - let tag; - if (lastFrame) { - tag = lastFrame.tag; - text = lastFrame.innerText !== undefined ? lastFrame.innerText : text; - } - if (options.disallowedTagsMode === "completelyDiscard" && !tagAllowed(tag)) { - text = ""; - } else if ((options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") && (tag === "script" || tag === "style")) { - result += text; - } else { - const escaped = escapeHtml(text, false); - if (options.textFilter && !addedText) { - result += options.textFilter(escaped, tag); - } else if (!addedText) { - result += escaped; - } - } - if (stack.length) { - const frame = stack[stack.length - 1]; - frame.text += text; - } - }, - onclosetag: function(name, isImplied) { - if (skipText) { - skipTextDepth--; - if (!skipTextDepth) { - skipText = false; - } else { - return; - } - } - const frame = stack.pop(); - if (!frame) { - return; - } - if (frame.tag !== name) { - stack.push(frame); - return; - } - skipText = options.enforceHtmlBoundary ? name === "html" : false; - depth--; - const skip = skipMap[depth]; - if (skip) { - delete skipMap[depth]; - if (options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") { - frame.updateParentNodeText(); - return; - } - tempResult = result; - result = ""; - } - if (transformMap[depth]) { - name = transformMap[depth]; - delete transformMap[depth]; - } - if (options.exclusiveFilter && options.exclusiveFilter(frame)) { - result = result.substr(0, frame.tagPosition); - return; - } - frame.updateParentNodeMediaChildren(); - frame.updateParentNodeText(); - if (options.selfClosing.indexOf(name) !== -1 || isImplied && !tagAllowed(name) && ["escape", "recursiveEscape"].indexOf(options.disallowedTagsMode) >= 0) { - if (skip) { - result = tempResult; - tempResult = ""; - } - return; - } - result += ""; - if (skip) { - result = tempResult + escapeHtml(result); - tempResult = ""; - } - addedText = false; - } - }, options.parser); - parser.write(html); - parser.end(); - return result; - function initializeState() { - result = ""; - depth = 0; - stack = []; - skipMap = {}; - transformMap = {}; - skipText = false; - skipTextDepth = 0; - } - function escapeHtml(s, quote) { - if (typeof s !== "string") { - s = s + ""; - } - if (options.parser.decodeEntities) { - s = s.replace(/&/g, "&").replace(//g, ">"); - if (quote) { - s = s.replace(/"/g, """); - } - } - s = s.replace(/&(?![a-zA-Z0-9#]{1,20};)/g, "&").replace(//g, ">"); - if (quote) { - s = s.replace(/"/g, """); - } - return s; - } - function naughtyHref(name, href) { - href = href.replace(/[\x00-\x20]+/g, ""); - while (true) { - const firstIndex = href.indexOf("", firstIndex + 4); - if (lastIndex === -1) { - break; - } - href = href.substring(0, firstIndex) + href.substring(lastIndex + 3); - } - const matches = href.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/); - if (!matches) { - if (href.match(/^[/\\]{2}/)) { - return !options.allowProtocolRelative; - } - return false; - } - const scheme = matches[1].toLowerCase(); - if (has(options.allowedSchemesByTag, name)) { - return options.allowedSchemesByTag[name].indexOf(scheme) === -1; - } - return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1; - } - function parseUrl(value) { - value = value.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/, "$1//"); - if (value.startsWith("relative:")) { - throw new Error("relative: exploit attempt"); - } - let base = "relative://relative-site"; - for (let i = 0;i < 100; i++) { - base += `/${i}`; - } - const parsed = new URL(value, base); - const isRelativeUrl = parsed && parsed.hostname === "relative-site" && parsed.protocol === "relative:"; - return { - isRelativeUrl, - url: parsed - }; - } - function filterCss(abstractSyntaxTree, allowedStyles) { - if (!allowedStyles) { - return abstractSyntaxTree; - } - const astRules = abstractSyntaxTree.nodes[0]; - let selectedRule; - if (allowedStyles[astRules.selector] && allowedStyles["*"]) { - selectedRule = deepmerge(allowedStyles[astRules.selector], allowedStyles["*"]); - } else { - selectedRule = allowedStyles[astRules.selector] || allowedStyles["*"]; - } - if (selectedRule) { - abstractSyntaxTree.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []); - } - return abstractSyntaxTree; - } - function stringifyStyleAttributes(filteredAST) { - return filteredAST.nodes[0].nodes.reduce(function(extractedAttributes, attrObject) { - extractedAttributes.push(`${attrObject.prop}:${attrObject.value}${attrObject.important ? " !important" : ""}`); - return extractedAttributes; - }, []).join(";"); - } - function filterDeclarations(selectedRule) { - return function(allowedDeclarationsList, attributeObject) { - if (has(selectedRule, attributeObject.prop)) { - const matchesRegex = selectedRule[attributeObject.prop].some(function(regularExpression) { - return regularExpression.test(attributeObject.value); - }); - if (matchesRegex) { - allowedDeclarationsList.push(attributeObject); - } - } - return allowedDeclarationsList; - }; - } - function filterClasses(classes, allowed, allowedGlobs) { - if (!allowed) { - return classes; - } - classes = classes.split(/\s+/); - return classes.filter(function(clss) { - return allowed.indexOf(clss) !== -1 || allowedGlobs.some(function(glob) { - return glob.test(clss); - }); - }).join(" "); - } - } - var htmlParserDefaults = { - decodeEntities: true - }; - sanitizeHtml.defaults = { - allowedTags: [ - "address", - "article", - "aside", - "footer", - "header", - "h1", - "h2", - "h3", - "h4", - "h5", - "h6", - "hgroup", - "main", - "nav", - "section", - "blockquote", - "dd", - "div", - "dl", - "dt", - "figcaption", - "figure", - "hr", - "li", - "main", - "ol", - "p", - "pre", - "ul", - "a", - "abbr", - "b", - "bdi", - "bdo", - "br", - "cite", - "code", - "data", - "dfn", - "em", - "i", - "kbd", - "mark", - "q", - "rb", - "rp", - "rt", - "rtc", - "ruby", - "s", - "samp", - "small", - "span", - "strong", - "sub", - "sup", - "time", - "u", - "var", - "wbr", - "caption", - "col", - "colgroup", - "table", - "tbody", - "td", - "tfoot", - "th", - "thead", - "tr" - ], - nonBooleanAttributes: [ - "abbr", - "accept", - "accept-charset", - "accesskey", - "action", - "allow", - "alt", - "as", - "autocapitalize", - "autocomplete", - "blocking", - "charset", - "cite", - "class", - "color", - "cols", - "colspan", - "content", - "contenteditable", - "coords", - "crossorigin", - "data", - "datetime", - "decoding", - "dir", - "dirname", - "download", - "draggable", - "enctype", - "enterkeyhint", - "fetchpriority", - "for", - "form", - "formaction", - "formenctype", - "formmethod", - "formtarget", - "headers", - "height", - "hidden", - "high", - "href", - "hreflang", - "http-equiv", - "id", - "imagesizes", - "imagesrcset", - "inputmode", - "integrity", - "is", - "itemid", - "itemprop", - "itemref", - "itemtype", - "kind", - "label", - "lang", - "list", - "loading", - "low", - "max", - "maxlength", - "media", - "method", - "min", - "minlength", - "name", - "nonce", - "optimum", - "pattern", - "ping", - "placeholder", - "popover", - "popovertarget", - "popovertargetaction", - "poster", - "preload", - "referrerpolicy", - "rel", - "rows", - "rowspan", - "sandbox", - "scope", - "shape", - "size", - "sizes", - "slot", - "span", - "spellcheck", - "src", - "srcdoc", - "srclang", - "srcset", - "start", - "step", - "style", - "tabindex", - "target", - "title", - "translate", - "type", - "usemap", - "value", - "width", - "wrap", - "onauxclick", - "onafterprint", - "onbeforematch", - "onbeforeprint", - "onbeforeunload", - "onbeforetoggle", - "onblur", - "oncancel", - "oncanplay", - "oncanplaythrough", - "onchange", - "onclick", - "onclose", - "oncontextlost", - "oncontextmenu", - "oncontextrestored", - "oncopy", - "oncuechange", - "oncut", - "ondblclick", - "ondrag", - "ondragend", - "ondragenter", - "ondragleave", - "ondragover", - "ondragstart", - "ondrop", - "ondurationchange", - "onemptied", - "onended", - "onerror", - "onfocus", - "onformdata", - "onhashchange", - "oninput", - "oninvalid", - "onkeydown", - "onkeypress", - "onkeyup", - "onlanguagechange", - "onload", - "onloadeddata", - "onloadedmetadata", - "onloadstart", - "onmessage", - "onmessageerror", - "onmousedown", - "onmouseenter", - "onmouseleave", - "onmousemove", - "onmouseout", - "onmouseover", - "onmouseup", - "onoffline", - "ononline", - "onpagehide", - "onpageshow", - "onpaste", - "onpause", - "onplay", - "onplaying", - "onpopstate", - "onprogress", - "onratechange", - "onreset", - "onresize", - "onrejectionhandled", - "onscroll", - "onscrollend", - "onsecuritypolicyviolation", - "onseeked", - "onseeking", - "onselect", - "onslotchange", - "onstalled", - "onstorage", - "onsubmit", - "onsuspend", - "ontimeupdate", - "ontoggle", - "onunhandledrejection", - "onunload", - "onvolumechange", - "onwaiting", - "onwheel" - ], - disallowedTagsMode: "discard", - allowedAttributes: { - a: ["href", "name", "target"], - img: ["src", "srcset", "alt", "title", "width", "height", "loading"] - }, - allowedEmptyAttributes: [ - "alt" - ], - selfClosing: ["img", "br", "hr", "area", "base", "basefont", "input", "link", "meta"], - allowedSchemes: ["http", "https", "ftp", "mailto", "tel"], - allowedSchemesByTag: {}, - allowedSchemesAppliedToAttributes: ["href", "src", "cite"], - allowProtocolRelative: true, - enforceHtmlBoundary: false, - parseStyleAttributes: true - }; - sanitizeHtml.simpleTransform = function(newTagName, newAttribs, merge) { - merge = merge === undefined ? true : merge; - newAttribs = newAttribs || {}; - return function(tagName, attribs) { - let attrib; - if (merge) { - for (attrib in newAttribs) { - attribs[attrib] = newAttribs[attrib]; - } - } else { - attribs = newAttribs; - } - return { - tagName: newTagName, - attribs - }; - }; - }; -}); - -// package-shared/utils/backend/global-db/DB_HANDLER.ts -async function DB_HANDLER(...args) { - try { - const results = await MASTER.query(...args); - await MASTER.end(); - return JSON.parse(JSON.stringify(results)); - } catch (error) { - console.log("DB Error =>", error); - return { - success: false, - error: error.message - }; - } -} -var import_serverless_mysql3, MASTER; -var init_DB_HANDLER = __esm(() => { - import_serverless_mysql3 = __toESM(require_serverless_mysql(), 1); - init_grabDbSSL(); - MASTER = import_serverless_mysql3.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - port: process.env.DSQL_DB_PORT ? Number(process.env.DSQL_DB_PORT) : undefined, - charset: "utf8mb4", - ssl: grabDbSSL() - } - }); -}); - -// package-shared/functions/dsql/encrypt.ts -var exports_encrypt = {}; -__export(exports_encrypt, { - default: () => encrypt -}); -import { scryptSync as scryptSync2, createCipheriv } from "crypto"; -import { Buffer as Buffer3 } from "buffer"; -function encrypt({ - data, - encryptionKey, - encryptionSalt -}) { - if (!data?.match(/./)) { - console.log("Encryption string is invalid"); - return data; - } - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; - const finalKeyLen = process.env.DSQL_ENCRYPTION_KEY_LENGTH ? Number(process.env.DSQL_ENCRYPTION_KEY_LENGTH) : 24; - if (!finalEncryptionKey?.match(/.{8,}/)) { - console.log("Encryption key is invalid"); - return data; - } - if (!finalEncryptionSalt?.match(/.{8,}/)) { - console.log("Encryption salt is invalid"); - return data; - } - const algorithm = "aes-192-cbc"; - const password = finalEncryptionKey; - let key = scryptSync2(password, finalEncryptionSalt, finalKeyLen); - let iv = Buffer3.alloc(16, 0); - const cipher = createCipheriv(algorithm, key, iv); - try { - let encrypted = cipher.update(data, "utf8", "hex"); - encrypted += cipher.final("hex"); - return encrypted; - } catch (error) { - console.log("Error in encrypting =>", error.message); - return data; - } -} -var init_encrypt = __esm(() => { - module_encrypt.exports = encrypt; -}); - -// package-shared/functions/backend/db/deleteDbEntry.ts -async function deleteDbEntry({ - dbContext, - paradigm, - dbFullName, - tableName, - identifierColumnName, - identifierValue, - useLocal -}) { - try { - const isMaster = useLocal ? true : dbContext?.match(/dsql.user/i) ? false : dbFullName && !dbFullName.match(/^datasquirel$/) ? false : true; - const dbHandler = useLocal ? LOCAL_DB_HANDLER : isMaster ? DB_HANDLER : DSQL_USER_DB_HANDLER; - const query = `DELETE FROM ${tableName} WHERE \`${identifierColumnName}\`=?`; - const deletedEntry = isMaster ? await dbHandler(query, [identifierValue]) : await dbHandler({ - paradigm, - queryString: query, - database: dbFullName, - queryValues: [identifierValue] - }); - return deletedEntry; - } catch (error) { - return null; - } -} -var init_deleteDbEntry = __esm(() => { - init_DB_HANDLER(); - init_DSQL_USER_DB_HANDLER(); - init_LOCAL_DB_HANDLER(); -}); - -// package-shared/utils/ejson.ts -function parse(string, reviver) { - if (!string) - return; - if (typeof string == "object") - return string; - if (typeof string !== "string") - return; - try { - return JSON.parse(string, reviver); - } catch (error) { - return; - } -} -function stringify(value, replacer, space) { - try { - return JSON.stringify(value, replacer, space); - } catch (error) { - return; - } -} -var EJSON, ejson_default; -var init_ejson = __esm(() => { - EJSON = { - parse, - stringify - }; - ejson_default = EJSON; -}); - -// package-shared/data/defaultFields.json -var require_defaultFields = __commonJS((exports, module) => { - module.exports = [ - { - fieldName: "id", - dataType: "BIGINT", - notNullValue: true, - primaryKey: true, - autoIncrement: true - }, - { - fieldName: "uuid", - dataType: "UUID", - defaultValueLiteral: "UUID()" - }, - { - fieldName: "date_created", - dataType: "VARCHAR(250)", - nullValue: true - }, - { - fieldName: "date_created_code", - dataType: "BIGINT", - nullValue: true - }, - { - fieldName: "date_created_timestamp", - dataType: "TIMESTAMP", - defaultValueLiteral: "CURRENT_TIMESTAMP" - }, - { - fieldName: "date_updated", - dataType: "VARCHAR(250)", - nullValue: true - }, - { - fieldName: "date_updated_code", - dataType: "BIGINT", - nullValue: true - }, - { - fieldName: "date_updated_timestamp", - dataType: "TIMESTAMP", - defaultValueLiteral: "CURRENT_TIMESTAMP", - onUpdateLiteral: "CURRENT_TIMESTAMP" - } - ]; -}); - -// node_modules/dotenv/package.json -var require_package = __commonJS((exports, module) => { - module.exports = { - name: "dotenv", - version: "16.3.1", - description: "Loads environment variables from .env file", - main: "lib/main.js", - types: "lib/main.d.ts", - exports: { - ".": { - types: "./lib/main.d.ts", - require: "./lib/main.js", - default: "./lib/main.js" - }, - "./config": "./config.js", - "./config.js": "./config.js", - "./lib/env-options": "./lib/env-options.js", - "./lib/env-options.js": "./lib/env-options.js", - "./lib/cli-options": "./lib/cli-options.js", - "./lib/cli-options.js": "./lib/cli-options.js", - "./package.json": "./package.json" - }, - scripts: { - "dts-check": "tsc --project tests/types/tsconfig.json", - lint: "standard", - "lint-readme": "standard-markdown", - pretest: "npm run lint && npm run dts-check", - test: "tap tests/*.js --100 -Rspec", - prerelease: "npm test", - release: "standard-version" - }, - repository: { - type: "git", - url: "git://github.com/motdotla/dotenv.git" - }, - funding: "https://github.com/motdotla/dotenv?sponsor=1", - keywords: [ - "dotenv", - "env", - ".env", - "environment", - "variables", - "config", - "settings" - ], - readmeFilename: "README.md", - license: "BSD-2-Clause", - devDependencies: { - "@definitelytyped/dtslint": "^0.0.133", - "@types/node": "^18.11.3", - decache: "^4.6.1", - sinon: "^14.0.1", - standard: "^17.0.0", - "standard-markdown": "^7.1.0", - "standard-version": "^9.5.0", - tap: "^16.3.0", - tar: "^6.1.11", - typescript: "^4.8.4" - }, - engines: { - node: ">=12" - }, - browser: { - fs: false - } - }; -}); - -// node_modules/dotenv/lib/main.js -var require_main = __commonJS((exports, module) => { - var fs10 = __require("fs"); - var path6 = __require("path"); - var os = __require("os"); - var crypto2 = __require("crypto"); - var packageJson = require_package(); - var version = packageJson.version; - var LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg; - function parse2(src) { - const obj = {}; - let lines = src.toString(); - lines = lines.replace(/\r\n?/mg, "\n"); - let match; - while ((match = LINE.exec(lines)) != null) { - const key = match[1]; - let value = match[2] || ""; - value = value.trim(); - const maybeQuote = value[0]; - value = value.replace(/^(['"`])([\s\S]*)\1$/mg, "$2"); - if (maybeQuote === '"') { - value = value.replace(/\\n/g, "\n"); - value = value.replace(/\\r/g, "\r"); - } - obj[key] = value; - } - return obj; - } - function _parseVault(options) { - const vaultPath = _vaultPath(options); - const result = DotenvModule.configDotenv({ path: vaultPath }); - if (!result.parsed) { - throw new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`); - } - const keys = _dotenvKey(options).split(","); - const length = keys.length; - let decrypted; - for (let i = 0;i < length; i++) { - try { - const key = keys[i].trim(); - const attrs = _instructions(result, key); - decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key); - break; - } catch (error) { - if (i + 1 >= length) { - throw error; - } - } - } - return DotenvModule.parse(decrypted); - } - function _log(message) { - console.log(`[dotenv@${version}][INFO] ${message}`); - } - function _warn(message) { - console.log(`[dotenv@${version}][WARN] ${message}`); - } - function _debug(message) { - console.log(`[dotenv@${version}][DEBUG] ${message}`); - } - function _dotenvKey(options) { - if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) { - return options.DOTENV_KEY; - } - if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) { - return process.env.DOTENV_KEY; - } - return ""; - } - function _instructions(result, dotenvKey) { - let uri; - try { - uri = new URL(dotenvKey); - } catch (error) { - if (error.code === "ERR_INVALID_URL") { - throw new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"); - } - throw error; - } - const key = uri.password; - if (!key) { - throw new Error("INVALID_DOTENV_KEY: Missing key part"); - } - const environment = uri.searchParams.get("environment"); - if (!environment) { - throw new Error("INVALID_DOTENV_KEY: Missing environment part"); - } - const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`; - const ciphertext = result.parsed[environmentKey]; - if (!ciphertext) { - throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`); - } - return { ciphertext, key }; - } - function _vaultPath(options) { - let dotenvPath = path6.resolve(process.cwd(), ".env"); - if (options && options.path && options.path.length > 0) { - dotenvPath = options.path; - } - return dotenvPath.endsWith(".vault") ? dotenvPath : `${dotenvPath}.vault`; - } - function _resolveHome(envPath) { - return envPath[0] === "~" ? path6.join(os.homedir(), envPath.slice(1)) : envPath; - } - function _configVault(options) { - _log("Loading env from encrypted .env.vault"); - const parsed = DotenvModule._parseVault(options); - let processEnv = process.env; - if (options && options.processEnv != null) { - processEnv = options.processEnv; - } - DotenvModule.populate(processEnv, parsed, options); - return { parsed }; - } - function configDotenv(options) { - let dotenvPath = path6.resolve(process.cwd(), ".env"); - let encoding = "utf8"; - const debug = Boolean(options && options.debug); - if (options) { - if (options.path != null) { - dotenvPath = _resolveHome(options.path); - } - if (options.encoding != null) { - encoding = options.encoding; - } - } - try { - const parsed = DotenvModule.parse(fs10.readFileSync(dotenvPath, { encoding })); - let processEnv = process.env; - if (options && options.processEnv != null) { - processEnv = options.processEnv; - } - DotenvModule.populate(processEnv, parsed, options); - return { parsed }; - } catch (e) { - if (debug) { - _debug(`Failed to load ${dotenvPath} ${e.message}`); - } - return { error: e }; - } - } - function config(options) { - const vaultPath = _vaultPath(options); - if (_dotenvKey(options).length === 0) { - return DotenvModule.configDotenv(options); - } - if (!fs10.existsSync(vaultPath)) { - _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`); - return DotenvModule.configDotenv(options); - } - return DotenvModule._configVault(options); - } - function decrypt2(encrypted, keyStr) { - const key = Buffer.from(keyStr.slice(-64), "hex"); - let ciphertext = Buffer.from(encrypted, "base64"); - const nonce = ciphertext.slice(0, 12); - const authTag = ciphertext.slice(-16); - ciphertext = ciphertext.slice(12, -16); - try { - const aesgcm = crypto2.createDecipheriv("aes-256-gcm", key, nonce); - aesgcm.setAuthTag(authTag); - return `${aesgcm.update(ciphertext)}${aesgcm.final()}`; - } catch (error) { - const isRange = error instanceof RangeError; - const invalidKeyLength = error.message === "Invalid key length"; - const decryptionFailed = error.message === "Unsupported state or unable to authenticate data"; - if (isRange || invalidKeyLength) { - const msg = "INVALID_DOTENV_KEY: It must be 64 characters long (or more)"; - throw new Error(msg); - } else if (decryptionFailed) { - const msg = "DECRYPTION_FAILED: Please check your DOTENV_KEY"; - throw new Error(msg); - } else { - console.error("Error: ", error.code); - console.error("Error: ", error.message); - throw error; - } - } - } - function populate(processEnv, parsed, options = {}) { - const debug = Boolean(options && options.debug); - const override = Boolean(options && options.override); - if (typeof parsed !== "object") { - throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate"); - } - for (const key of Object.keys(parsed)) { - if (Object.prototype.hasOwnProperty.call(processEnv, key)) { - if (override === true) { - processEnv[key] = parsed[key]; - } - if (debug) { - if (override === true) { - _debug(`"${key}" is already defined and WAS overwritten`); - } else { - _debug(`"${key}" is already defined and was NOT overwritten`); - } - } - } else { - processEnv[key] = parsed[key]; - } - } - } - var DotenvModule = { - configDotenv, - _configVault, - _parseVault, - config, - decrypt: decrypt2, - parse: parse2, - populate - }; - exports.configDotenv = DotenvModule.configDotenv; - exports._configVault = DotenvModule._configVault; - exports._parseVault = DotenvModule._parseVault; - exports.config = DotenvModule.config; - exports.decrypt = DotenvModule.decrypt; - exports.parse = DotenvModule.parse; - exports.populate = DotenvModule.populate; - module.exports = DotenvModule; -}); - -// package-shared/data/possibleFields.json -var require_possibleFields = __commonJS((exports, module) => { - module.exports = { - fieldName: "string", - dataType: "BIGINT", - nullValue: true, - primaryKey: true, - autoIncrement: true, - defaultValue: "CURRENT_TIMESTAMP", - defaultValueLiteral: "CURRENT_TIMESTAMP", - notNullValue: true, - foreignKey: { - foreignKeyName: "Name", - destinationTableName: "Table Name", - destinationTableColumnName: "Column Name", - cascadeDelete: true, - cascadeUpdate: true - }, - onUpdate: "CURRENT_TIMESTAMP", - onUpdateLiteral: "CURRENT_TIMESTAMP", - onDelete: "CURRENT_TIMESTAMP", - onDeleteLiteral: "CURRENT_TIMESTAMP", - encrypted: false - }; -}); - -// package-shared/data/dataTypes.json -var require_dataTypes = __commonJS((exports, module) => { - module.exports = [ - { - title: "VARCHAR", - name: "VARCHAR", - value: "0-255", - argument: true, - description: "Varchar is simply letters and numbers within the range 0 - 255", - maxValue: 255 - }, - { - title: "TINYINT", - name: "TINYINT", - value: "0-100", - description: "TINYINT means Integers: 0 to 100", - maxValue: 127 - }, - { - title: "SMALLINT", - name: "SMALLINT", - value: "0-255", - description: "SMALLINT means Integers: 0 to 240933", - maxValue: 32767 - }, - { - title: "MEDIUMINT", - name: "MEDIUMINT", - value: "0-255", - description: "MEDIUMINT means Integers: 0 to 1245568545560", - maxValue: 8388607 - }, - { - title: "INT", - name: "INT", - value: "0-255", - description: "INT means Integers: 0 to 12560", - maxValue: 2147483647 - }, - { - title: "BIGINT", - name: "BIGINT", - value: "0-255", - description: "BIGINT means Integers: 0 to 1245569056767568545560", - maxValue: 2000000000000000000000000000000000000000000000000000000000000000 - }, - { - title: "TINYTEXT", - name: "TINYTEXT", - value: "0-255", - description: "Text with 255 max characters", - maxValue: 127 - }, - { - title: "TEXT", - name: "TEXT", - value: "0-100", - description: "MEDIUMTEXT is just text with max length 16,777,215", - maxValue: 127 - }, - { - title: "MEDIUMTEXT", - name: "MEDIUMTEXT", - value: "0-255", - description: "MEDIUMTEXT is just text with max length 16,777,215", - maxValue: 127 - }, - { - title: "LONGTEXT", - name: "LONGTEXT", - value: "0-255", - description: "LONGTEXT is just text with max length 4,294,967,295", - maxValue: 127 - }, - { - title: "UUID", - name: "UUID", - valueLiteral: "UUID()", - description: "A Unique ID" - } - ]; -}); - -// package-shared/data/presets/users.json -var require_users = __commonJS((exports, module) => { - module.exports = { - tableName: "users", - tableFullName: "Users", - fields: [ - { - fieldName: "first_name", - dataType: "VARCHAR(100)", - notNullValue: true - }, - { - fieldName: "last_name", - dataType: "VARCHAR(100)", - notNullValue: true - }, - { - fieldName: "email", - dataType: "VARCHAR(200)", - notNullValue: true - }, - { - fieldName: "phone", - dataType: "VARCHAR(50)" - }, - { - fieldName: "user_type", - dataType: "VARCHAR(20)", - defaultValue: "default" - }, - { - fieldName: "username", - dataType: "VARCHAR(100)", - nullValue: true - }, - { - fieldName: "password", - dataType: "TEXT" - }, - { - fieldName: "image", - dataType: "VARCHAR(250)" - }, - { - fieldName: "image_thumbnail", - dataType: "VARCHAR(250)" - }, - { - fieldName: "address", - dataType: "VARCHAR(255)" - }, - { - fieldName: "city", - dataType: "VARCHAR(50)" - }, - { - fieldName: "state", - dataType: "VARCHAR(50)" - }, - { - fieldName: "country", - dataType: "VARCHAR(50)" - }, - { - fieldName: "zip_code", - dataType: "VARCHAR(50)" - }, - { - fieldName: "social_login", - dataType: "TINYINT", - defaultValue: "0" - }, - { - fieldName: "social_platform", - dataType: "VARCHAR(50)", - nullValue: true - }, - { - fieldName: "social_id", - dataType: "VARCHAR(250)", - nullValue: true - }, - { - fieldName: "more_user_data", - dataType: "BIGINT", - defaultValue: "0" - }, - { - fieldName: "verification_status", - dataType: "TINYINT", - defaultValue: "0" - }, - { - fieldName: "temp_login_code", - dataType: "VARCHAR(50)", - nullValue: true - } - ] - }; -}); - -// package-shared/functions/backend/varDatabaseDbHandler.ts -async function varDatabaseDbHandler2({ - queryString, - queryValuesArray, - database, - tableSchema, - useLocal -}) { - const isMaster = useLocal ? true : database?.match(/^datasquirel$/) ? true : false; - const FINAL_DB_HANDLER = useLocal ? LOCAL_DB_HANDLER : isMaster ? DB_HANDLER : DSQL_USER_DB_HANDLER; - let results; - try { - if (queryString && queryValuesArray && Array.isArray(queryValuesArray) && queryValuesArray[0]) { - results = isMaster ? await FINAL_DB_HANDLER(queryString, queryValuesArray) : await FINAL_DB_HANDLER({ - paradigm: "Full Access", - database, - queryString, - queryValues: queryValuesArray - }); - } else { - results = isMaster ? await FINAL_DB_HANDLER(queryString) : await FINAL_DB_HANDLER({ - paradigm: "Full Access", - database, - queryString - }); - } - } catch (error) { - serverError({ - component: "varDatabaseDbHandler/lines-29-32", - message: error.message - }); - } - if (results && tableSchema) { - try { - const unparsedResults = results; - const parsedResults = await parseDbResults({ - unparsedResults, - tableSchema - }); - return parsedResults; - } catch (error) { - console.log("\x1B[31mvarDatabaseDbHandler ERROR\x1B[0m =>", database, error); - serverError({ - component: "varDatabaseDbHandler/lines-52-53", - message: error.message - }); - return null; - } - } else if (results) { - return results; - } else { - return null; - } -} -var init_varDatabaseDbHandler = __esm(() => { - init_parseDbResults(); - init_serverError(); - init_DB_HANDLER(); - init_DSQL_USER_DB_HANDLER(); - init_LOCAL_DB_HANDLER(); -}); - -// package-shared/functions/dsql/hashPassword.ts -var exports_hashPassword = {}; -__export(exports_hashPassword, { - default: () => hashPassword -}); -import { createHmac } from "crypto"; -function hashPassword({ - password, - encryptionKey -}) { - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - if (!finalEncryptionKey?.match(/.{8,}/)) { - throw new Error("Encryption key is invalid"); - } - const hmac = createHmac("sha512", finalEncryptionKey); - hmac.update(password); - let hashed = hmac.digest("base64"); - return hashed; -} -var init_hashPassword = () => { -}; - -// package-shared/functions/backend/cookies/get-auth-cookie-names.ts -function getAuthCookieNames(params) { - const cookiesPrefix = process.env.DSQL_COOKIES_PREFIX || "dsql_"; - const cookiesKeyName = process.env.DSQL_COOKIES_KEY_NAME || "key"; - const cookiesCSRFName = process.env.DSQL_COOKIES_CSRF_NAME || "csrf"; - const cookieOneTimeCodeName = process.env.DSQL_COOKIES_ONE_TIME_CODE_NAME || "one-time-code"; - const targetDatabase = params?.database?.replace(/^datasquirel_user_\d+_/, "") || process.env.DSQL_DB_NAME?.replace(/^datasquirel_user_\d+_/, ""); - let keyCookieName = cookiesPrefix; - if (params?.userId) - keyCookieName += `user_${params.userId}_`; - if (targetDatabase) - keyCookieName += `${targetDatabase}_`; - keyCookieName += cookiesKeyName; - let csrfCookieName = cookiesPrefix; - if (params?.userId) - csrfCookieName += `user_${params.userId}_`; - if (targetDatabase) - csrfCookieName += `${targetDatabase}_`; - csrfCookieName += cookiesCSRFName; - let oneTimeCodeName = cookiesPrefix; - if (params?.userId) - oneTimeCodeName += `user_${params.userId}_`; - if (targetDatabase) - oneTimeCodeName += `${targetDatabase}_`; - oneTimeCodeName += cookieOneTimeCodeName; - return { - keyCookieName, - csrfCookieName, - oneTimeCodeName - }; -} - -// node_modules/nodemailer/lib/fetch/cookies.js -var require_cookies = __commonJS((exports, module) => { - var urllib = __require("url"); - var SESSION_TIMEOUT = 1800; - - class Cookies { - constructor(options) { - this.options = options || {}; - this.cookies = []; - } - set(cookieStr, url) { - let urlparts = urllib.parse(url || ""); - let cookie = this.parse(cookieStr); - let domain; - if (cookie.domain) { - domain = cookie.domain.replace(/^\./, ""); - if (urlparts.hostname.length < domain.length || ("." + urlparts.hostname).substr(-domain.length + 1) !== "." + domain) { - cookie.domain = urlparts.hostname; - } - } else { - cookie.domain = urlparts.hostname; - } - if (!cookie.path) { - cookie.path = this.getPath(urlparts.pathname); - } - if (!cookie.expires) { - cookie.expires = new Date(Date.now() + (Number(this.options.sessionTimeout || SESSION_TIMEOUT) || SESSION_TIMEOUT) * 1000); - } - return this.add(cookie); - } - get(url) { - return this.list(url).map((cookie) => cookie.name + "=" + cookie.value).join("; "); - } - list(url) { - let result = []; - let i; - let cookie; - for (i = this.cookies.length - 1;i >= 0; i--) { - cookie = this.cookies[i]; - if (this.isExpired(cookie)) { - this.cookies.splice(i, i); - continue; - } - if (this.match(cookie, url)) { - result.unshift(cookie); - } - } - return result; - } - parse(cookieStr) { - let cookie = {}; - (cookieStr || "").toString().split(";").forEach((cookiePart) => { - let valueParts = cookiePart.split("="); - let key = valueParts.shift().trim().toLowerCase(); - let value = valueParts.join("=").trim(); - let domain; - if (!key) { - return; - } - switch (key) { - case "expires": - value = new Date(value); - if (value.toString() !== "Invalid Date") { - cookie.expires = value; - } - break; - case "path": - cookie.path = value; - break; - case "domain": - domain = value.toLowerCase(); - if (domain.length && domain.charAt(0) !== ".") { - domain = "." + domain; - } - cookie.domain = domain; - break; - case "max-age": - cookie.expires = new Date(Date.now() + (Number(value) || 0) * 1000); - break; - case "secure": - cookie.secure = true; - break; - case "httponly": - cookie.httponly = true; - break; - default: - if (!cookie.name) { - cookie.name = key; - cookie.value = value; - } - } - }); - return cookie; - } - match(cookie, url) { - let urlparts = urllib.parse(url || ""); - if (urlparts.hostname !== cookie.domain && (cookie.domain.charAt(0) !== "." || ("." + urlparts.hostname).substr(-cookie.domain.length) !== cookie.domain)) { - return false; - } - let path11 = this.getPath(urlparts.pathname); - if (path11.substr(0, cookie.path.length) !== cookie.path) { - return false; - } - if (cookie.secure && urlparts.protocol !== "https:") { - return false; - } - return true; - } - add(cookie) { - let i; - let len; - if (!cookie || !cookie.name) { - return false; - } - for (i = 0, len = this.cookies.length;i < len; i++) { - if (this.compare(this.cookies[i], cookie)) { - if (this.isExpired(cookie)) { - this.cookies.splice(i, 1); - return false; - } - this.cookies[i] = cookie; - return true; - } - } - if (!this.isExpired(cookie)) { - this.cookies.push(cookie); - } - return true; - } - compare(a, b) { - return a.name === b.name && a.path === b.path && a.domain === b.domain && a.secure === b.secure && a.httponly === a.httponly; - } - isExpired(cookie) { - return cookie.expires && cookie.expires < new Date || !cookie.value; - } - getPath(pathname) { - let path11 = (pathname || "/").split("/"); - path11.pop(); - path11 = path11.join("/").trim(); - if (path11.charAt(0) !== "/") { - path11 = "/" + path11; - } - if (path11.substr(-1) !== "/") { - path11 += "/"; - } - return path11; - } - } - module.exports = Cookies; -}); - -// node_modules/nodemailer/package.json -var require_package2 = __commonJS((exports, module) => { - module.exports = { - name: "nodemailer", - version: "6.9.14", - description: "Easy as cake e-mail sending from your Node.js applications", - main: "lib/nodemailer.js", - scripts: { - test: "node --test --test-concurrency=1 test/**/*.test.js test/**/*-test.js", - "test:coverage": "c8 node --test --test-concurrency=1 test/**/*.test.js test/**/*-test.js", - lint: "eslint .", - update: "rm -rf node_modules/ package-lock.json && ncu -u && npm install" - }, - repository: { - type: "git", - url: "https://github.com/nodemailer/nodemailer.git" - }, - keywords: [ - "Nodemailer" - ], - author: "Andris Reinman", - license: "MIT-0", - bugs: { - url: "https://github.com/nodemailer/nodemailer/issues" - }, - homepage: "https://nodemailer.com/", - devDependencies: { - "@aws-sdk/client-ses": "3.600.0", - bunyan: "1.8.15", - c8: "10.1.2", - eslint: "8.57.0", - "eslint-config-nodemailer": "1.2.0", - "eslint-config-prettier": "9.1.0", - libbase64: "1.3.0", - libmime: "5.3.5", - libqp: "2.1.0", - "nodemailer-ntlm-auth": "1.0.4", - proxy: "1.0.2", - "proxy-test-server": "1.0.0", - "smtp-server": "3.13.4" - }, - engines: { - node: ">=6.0.0" - } - }; -}); - -// node_modules/nodemailer/lib/fetch/index.js -var require_fetch = __commonJS((exports, module) => { - var http2 = __require("http"); - var https2 = __require("https"); - var urllib = __require("url"); - var zlib = __require("zlib"); - var PassThrough = __require("stream").PassThrough; - var Cookies = require_cookies(); - var packageData = require_package2(); - var net = __require("net"); - var MAX_REDIRECTS = 5; - module.exports = function(url, options) { - return nmfetch(url, options); - }; - module.exports.Cookies = Cookies; - function nmfetch(url, options) { - options = options || {}; - options.fetchRes = options.fetchRes || new PassThrough; - options.cookies = options.cookies || new Cookies; - options.redirects = options.redirects || 0; - options.maxRedirects = isNaN(options.maxRedirects) ? MAX_REDIRECTS : options.maxRedirects; - if (options.cookie) { - [].concat(options.cookie || []).forEach((cookie) => { - options.cookies.set(cookie, url); - }); - options.cookie = false; - } - let fetchRes = options.fetchRes; - let parsed = urllib.parse(url); - let method = (options.method || "").toString().trim().toUpperCase() || "GET"; - let finished = false; - let cookies; - let body; - let handler = parsed.protocol === "https:" ? https2 : http2; - let headers = { - "accept-encoding": "gzip,deflate", - "user-agent": "nodemailer/" + packageData.version - }; - Object.keys(options.headers || {}).forEach((key) => { - headers[key.toLowerCase().trim()] = options.headers[key]; - }); - if (options.userAgent) { - headers["user-agent"] = options.userAgent; - } - if (parsed.auth) { - headers.Authorization = "Basic " + Buffer.from(parsed.auth).toString("base64"); - } - if (cookies = options.cookies.get(url)) { - headers.cookie = cookies; - } - if (options.body) { - if (options.contentType !== false) { - headers["Content-Type"] = options.contentType || "application/x-www-form-urlencoded"; - } - if (typeof options.body.pipe === "function") { - headers["Transfer-Encoding"] = "chunked"; - body = options.body; - body.on("error", (err) => { - if (finished) { - return; - } - finished = true; - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - }); - } else { - if (options.body instanceof Buffer) { - body = options.body; - } else if (typeof options.body === "object") { - try { - body = Buffer.from(Object.keys(options.body).map((key) => { - let value = options.body[key].toString().trim(); - return encodeURIComponent(key) + "=" + encodeURIComponent(value); - }).join("&")); - } catch (E) { - if (finished) { - return; - } - finished = true; - E.type = "FETCH"; - E.sourceUrl = url; - fetchRes.emit("error", E); - return; - } - } else { - body = Buffer.from(options.body.toString().trim()); - } - headers["Content-Type"] = options.contentType || "application/x-www-form-urlencoded"; - headers["Content-Length"] = body.length; - } - method = (options.method || "").toString().trim().toUpperCase() || "POST"; - } - let req; - let reqOptions = { - method, - host: parsed.hostname, - path: parsed.path, - port: parsed.port ? parsed.port : parsed.protocol === "https:" ? 443 : 80, - headers, - rejectUnauthorized: false, - agent: false - }; - if (options.tls) { - Object.keys(options.tls).forEach((key) => { - reqOptions[key] = options.tls[key]; - }); - } - if (parsed.protocol === "https:" && parsed.hostname && parsed.hostname !== reqOptions.host && !net.isIP(parsed.hostname) && !reqOptions.servername) { - reqOptions.servername = parsed.hostname; - } - try { - req = handler.request(reqOptions); - } catch (E) { - finished = true; - setImmediate(() => { - E.type = "FETCH"; - E.sourceUrl = url; - fetchRes.emit("error", E); - }); - return fetchRes; - } - if (options.timeout) { - req.setTimeout(options.timeout, () => { - if (finished) { - return; - } - finished = true; - req.abort(); - let err = new Error("Request Timeout"); - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - }); - } - req.on("error", (err) => { - if (finished) { - return; - } - finished = true; - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - }); - req.on("response", (res) => { - let inflate; - if (finished) { - return; - } - switch (res.headers["content-encoding"]) { - case "gzip": - case "deflate": - inflate = zlib.createUnzip(); - break; - } - if (res.headers["set-cookie"]) { - [].concat(res.headers["set-cookie"] || []).forEach((cookie) => { - options.cookies.set(cookie, url); - }); - } - if ([301, 302, 303, 307, 308].includes(res.statusCode) && res.headers.location) { - options.redirects++; - if (options.redirects > options.maxRedirects) { - finished = true; - let err = new Error("Maximum redirect count exceeded"); - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - req.abort(); - return; - } - options.method = "GET"; - options.body = false; - return nmfetch(urllib.resolve(url, res.headers.location), options); - } - fetchRes.statusCode = res.statusCode; - fetchRes.headers = res.headers; - if (res.statusCode >= 300 && !options.allowErrorResponse) { - finished = true; - let err = new Error("Invalid status code " + res.statusCode); - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - req.abort(); - return; - } - res.on("error", (err) => { - if (finished) { - return; - } - finished = true; - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - req.abort(); - }); - if (inflate) { - res.pipe(inflate).pipe(fetchRes); - inflate.on("error", (err) => { - if (finished) { - return; - } - finished = true; - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - req.abort(); - }); - } else { - res.pipe(fetchRes); - } - }); - setImmediate(() => { - if (body) { - try { - if (typeof body.pipe === "function") { - return body.pipe(req); - } else { - req.write(body); - } - } catch (err) { - finished = true; - err.type = "FETCH"; - err.sourceUrl = url; - fetchRes.emit("error", err); - return; - } - } - req.end(); - }); - return fetchRes; - } -}); - -// node_modules/nodemailer/lib/shared/index.js -var require_shared = __commonJS((exports, module) => { - var urllib = __require("url"); - var util = __require("util"); - var fs15 = __require("fs"); - var nmfetch = require_fetch(); - var dns = __require("dns"); - var net = __require("net"); - var os = __require("os"); - var DNS_TTL = 5 * 60 * 1000; - var networkInterfaces; - try { - networkInterfaces = os.networkInterfaces(); - } catch (err) { - } - exports.networkInterfaces = networkInterfaces; - var isFamilySupported = (family, allowInternal) => { - let networkInterfaces2 = exports.networkInterfaces; - if (!networkInterfaces2) { - return true; - } - const familySupported = Object.keys(networkInterfaces2).map((key) => networkInterfaces2[key]).reduce((acc, val) => acc.concat(val), []).filter((i) => !i.internal || allowInternal).filter((i) => i.family === "IPv" + family || i.family === family).length > 0; - return familySupported; - }; - var resolver = (family, hostname, options, callback) => { - options = options || {}; - const familySupported = isFamilySupported(family, options.allowInternalNetworkInterfaces); - if (!familySupported) { - return callback(null, []); - } - const resolver2 = dns.Resolver ? new dns.Resolver(options) : dns; - resolver2["resolve" + family](hostname, (err, addresses) => { - if (err) { - switch (err.code) { - case dns.NODATA: - case dns.NOTFOUND: - case dns.NOTIMP: - case dns.SERVFAIL: - case dns.CONNREFUSED: - case dns.REFUSED: - case "EAI_AGAIN": - return callback(null, []); - } - return callback(err); - } - return callback(null, Array.isArray(addresses) ? addresses : [].concat(addresses || [])); - }); - }; - var dnsCache = exports.dnsCache = new Map; - var formatDNSValue = (value, extra) => { - if (!value) { - return Object.assign({}, extra || {}); - } - return Object.assign({ - servername: value.servername, - host: !value.addresses || !value.addresses.length ? null : value.addresses.length === 1 ? value.addresses[0] : value.addresses[Math.floor(Math.random() * value.addresses.length)] - }, extra || {}); - }; - exports.resolveHostname = (options, callback) => { - options = options || {}; - if (!options.host && options.servername) { - options.host = options.servername; - } - if (!options.host || net.isIP(options.host)) { - let value = { - addresses: [options.host], - servername: options.servername || false - }; - return callback(null, formatDNSValue(value, { - cached: false - })); - } - let cached; - if (dnsCache.has(options.host)) { - cached = dnsCache.get(options.host); - if (!cached.expires || cached.expires >= Date.now()) { - return callback(null, formatDNSValue(cached.value, { - cached: true - })); - } - } - resolver(4, options.host, options, (err, addresses) => { - if (err) { - if (cached) { - return callback(null, formatDNSValue(cached.value, { - cached: true, - error: err - })); - } - return callback(err); - } - if (addresses && addresses.length) { - let value = { - addresses, - servername: options.servername || options.host - }; - dnsCache.set(options.host, { - value, - expires: Date.now() + (options.dnsTtl || DNS_TTL) - }); - return callback(null, formatDNSValue(value, { - cached: false - })); - } - resolver(6, options.host, options, (err2, addresses2) => { - if (err2) { - if (cached) { - return callback(null, formatDNSValue(cached.value, { - cached: true, - error: err2 - })); - } - return callback(err2); - } - if (addresses2 && addresses2.length) { - let value = { - addresses: addresses2, - servername: options.servername || options.host - }; - dnsCache.set(options.host, { - value, - expires: Date.now() + (options.dnsTtl || DNS_TTL) - }); - return callback(null, formatDNSValue(value, { - cached: false - })); - } - try { - dns.lookup(options.host, { all: true }, (err3, addresses3) => { - if (err3) { - if (cached) { - return callback(null, formatDNSValue(cached.value, { - cached: true, - error: err3 - })); - } - return callback(err3); - } - let address = addresses3 ? addresses3.filter((addr) => isFamilySupported(addr.family)).map((addr) => addr.address).shift() : false; - if (addresses3 && addresses3.length && !address) { - console.warn(`Failed to resolve IPv${addresses3[0].family} addresses with current network`); - } - if (!address && cached) { - return callback(null, formatDNSValue(cached.value, { - cached: true - })); - } - let value = { - addresses: address ? [address] : [options.host], - servername: options.servername || options.host - }; - dnsCache.set(options.host, { - value, - expires: Date.now() + (options.dnsTtl || DNS_TTL) - }); - return callback(null, formatDNSValue(value, { - cached: false - })); - }); - } catch (err3) { - if (cached) { - return callback(null, formatDNSValue(cached.value, { - cached: true, - error: err3 - })); - } - return callback(err3); - } - }); - }); - }; - exports.parseConnectionUrl = (str) => { - str = str || ""; - let options = {}; - [urllib.parse(str, true)].forEach((url) => { - let auth; - switch (url.protocol) { - case "smtp:": - options.secure = false; - break; - case "smtps:": - options.secure = true; - break; - case "direct:": - options.direct = true; - break; - } - if (!isNaN(url.port) && Number(url.port)) { - options.port = Number(url.port); - } - if (url.hostname) { - options.host = url.hostname; - } - if (url.auth) { - auth = url.auth.split(":"); - if (!options.auth) { - options.auth = {}; - } - options.auth.user = auth.shift(); - options.auth.pass = auth.join(":"); - } - Object.keys(url.query || {}).forEach((key) => { - let obj = options; - let lKey = key; - let value = url.query[key]; - if (!isNaN(value)) { - value = Number(value); - } - switch (value) { - case "true": - value = true; - break; - case "false": - value = false; - break; - } - if (key.indexOf("tls.") === 0) { - lKey = key.substr(4); - if (!options.tls) { - options.tls = {}; - } - obj = options.tls; - } else if (key.indexOf(".") >= 0) { - return; - } - if (!(lKey in obj)) { - obj[lKey] = value; - } - }); - }); - return options; - }; - exports._logFunc = (logger, level, defaults, data, message, ...args) => { - let entry = {}; - Object.keys(defaults || {}).forEach((key) => { - if (key !== "level") { - entry[key] = defaults[key]; - } - }); - Object.keys(data || {}).forEach((key) => { - if (key !== "level") { - entry[key] = data[key]; - } - }); - logger[level](entry, message, ...args); - }; - exports.getLogger = (options, defaults) => { - options = options || {}; - let response = {}; - let levels = ["trace", "debug", "info", "warn", "error", "fatal"]; - if (!options.logger) { - levels.forEach((level) => { - response[level] = () => false; - }); - return response; - } - let logger = options.logger; - if (options.logger === true) { - logger = createDefaultLogger(levels); - } - levels.forEach((level) => { - response[level] = (data, message, ...args) => { - exports._logFunc(logger, level, defaults, data, message, ...args); - }; - }); - return response; - }; - exports.callbackPromise = (resolve, reject) => function() { - let args = Array.from(arguments); - let err = args.shift(); - if (err) { - reject(err); - } else { - resolve(...args); - } - }; - exports.parseDataURI = (uri) => { - let input = uri; - let commaPos = input.indexOf(","); - if (!commaPos) { - return uri; - } - let data = input.substring(commaPos + 1); - let metaStr = input.substring("data:".length, commaPos); - let encoding; - let metaEntries = metaStr.split(";"); - let lastMetaEntry = metaEntries.length > 1 ? metaEntries[metaEntries.length - 1] : false; - if (lastMetaEntry && lastMetaEntry.indexOf("=") < 0) { - encoding = lastMetaEntry.toLowerCase(); - metaEntries.pop(); - } - let contentType = metaEntries.shift() || "application/octet-stream"; - let params = {}; - for (let entry of metaEntries) { - let sep = entry.indexOf("="); - if (sep >= 0) { - let key = entry.substring(0, sep); - let value = entry.substring(sep + 1); - params[key] = value; - } - } - switch (encoding) { - case "base64": - data = Buffer.from(data, "base64"); - break; - case "utf8": - data = Buffer.from(data); - break; - default: - try { - data = Buffer.from(decodeURIComponent(data)); - } catch (err) { - data = Buffer.from(data); - } - data = Buffer.from(data); - } - return { data, encoding, contentType, params }; - }; - exports.resolveContent = (data, key, callback) => { - let promise; - if (!callback) { - promise = new Promise((resolve, reject) => { - callback = exports.callbackPromise(resolve, reject); - }); - } - let content = data && data[key] && data[key].content || data[key]; - let contentStream; - let encoding = (typeof data[key] === "object" && data[key].encoding || "utf8").toString().toLowerCase().replace(/[-_\s]/g, ""); - if (!content) { - return callback(null, content); - } - if (typeof content === "object") { - if (typeof content.pipe === "function") { - return resolveStream(content, (err, value) => { - if (err) { - return callback(err); - } - if (data[key].content) { - data[key].content = value; - } else { - data[key] = value; - } - callback(null, value); - }); - } else if (/^https?:\/\//i.test(content.path || content.href)) { - contentStream = nmfetch(content.path || content.href); - return resolveStream(contentStream, callback); - } else if (/^data:/i.test(content.path || content.href)) { - let parsedDataUri = exports.parseDataURI(content.path || content.href); - if (!parsedDataUri || !parsedDataUri.data) { - return callback(null, Buffer.from(0)); - } - return callback(null, parsedDataUri.data); - } else if (content.path) { - return resolveStream(fs15.createReadStream(content.path), callback); - } - } - if (typeof data[key].content === "string" && !["utf8", "usascii", "ascii"].includes(encoding)) { - content = Buffer.from(data[key].content, encoding); - } - setImmediate(() => callback(null, content)); - return promise; - }; - exports.assign = function() { - let args = Array.from(arguments); - let target = args.shift() || {}; - args.forEach((source) => { - Object.keys(source || {}).forEach((key) => { - if (["tls", "auth"].includes(key) && source[key] && typeof source[key] === "object") { - if (!target[key]) { - target[key] = {}; - } - Object.keys(source[key]).forEach((subKey) => { - target[key][subKey] = source[key][subKey]; - }); - } else { - target[key] = source[key]; - } - }); - }); - return target; - }; - exports.encodeXText = (str) => { - if (!/[^\x21-\x2A\x2C-\x3C\x3E-\x7E]/.test(str)) { - return str; - } - let buf = Buffer.from(str); - let result = ""; - for (let i = 0, len = buf.length;i < len; i++) { - let c = buf[i]; - if (c < 33 || c > 126 || c === 43 || c === 61) { - result += "+" + (c < 16 ? "0" : "") + c.toString(16).toUpperCase(); - } else { - result += String.fromCharCode(c); - } - } - return result; - }; - function resolveStream(stream, callback) { - let responded = false; - let chunks = []; - let chunklen = 0; - stream.on("error", (err) => { - if (responded) { - return; - } - responded = true; - callback(err); - }); - stream.on("readable", () => { - let chunk; - while ((chunk = stream.read()) !== null) { - chunks.push(chunk); - chunklen += chunk.length; - } - }); - stream.on("end", () => { - if (responded) { - return; - } - responded = true; - let value; - try { - value = Buffer.concat(chunks, chunklen); - } catch (E) { - return callback(E); - } - callback(null, value); - }); - } - function createDefaultLogger(levels) { - let levelMaxLen = 0; - let levelNames = new Map; - levels.forEach((level) => { - if (level.length > levelMaxLen) { - levelMaxLen = level.length; - } - }); - levels.forEach((level) => { - let levelName = level.toUpperCase(); - if (levelName.length < levelMaxLen) { - levelName += " ".repeat(levelMaxLen - levelName.length); - } - levelNames.set(level, levelName); - }); - let print = (level, entry, message, ...args) => { - let prefix = ""; - if (entry) { - if (entry.tnx === "server") { - prefix = "S: "; - } else if (entry.tnx === "client") { - prefix = "C: "; - } - if (entry.sid) { - prefix = "[" + entry.sid + "] " + prefix; - } - if (entry.cid) { - prefix = "[#" + entry.cid + "] " + prefix; - } - } - message = util.format(message, ...args); - message.split(/\r?\n/).forEach((line) => { - console.log("[%s] %s %s", new Date().toISOString().substr(0, 19).replace(/T/, " "), levelNames.get(level), prefix + line); - }); - }; - let logger = {}; - levels.forEach((level) => { - logger[level] = print.bind(null, level); - }); - return logger; - } -}); - -// node_modules/nodemailer/lib/mime-funcs/mime-types.js -var require_mime_types = __commonJS((exports, module) => { - var path11 = __require("path"); - var defaultMimeType = "application/octet-stream"; - var defaultExtension = "bin"; - var mimeTypes = new Map([ - ["application/acad", "dwg"], - ["application/applixware", "aw"], - ["application/arj", "arj"], - ["application/atom+xml", "xml"], - ["application/atomcat+xml", "atomcat"], - ["application/atomsvc+xml", "atomsvc"], - ["application/base64", ["mm", "mme"]], - ["application/binhex", "hqx"], - ["application/binhex4", "hqx"], - ["application/book", ["book", "boo"]], - ["application/ccxml+xml,", "ccxml"], - ["application/cdf", "cdf"], - ["application/cdmi-capability", "cdmia"], - ["application/cdmi-container", "cdmic"], - ["application/cdmi-domain", "cdmid"], - ["application/cdmi-object", "cdmio"], - ["application/cdmi-queue", "cdmiq"], - ["application/clariscad", "ccad"], - ["application/commonground", "dp"], - ["application/cu-seeme", "cu"], - ["application/davmount+xml", "davmount"], - ["application/drafting", "drw"], - ["application/dsptype", "tsp"], - ["application/dssc+der", "dssc"], - ["application/dssc+xml", "xdssc"], - ["application/dxf", "dxf"], - ["application/ecmascript", ["js", "es"]], - ["application/emma+xml", "emma"], - ["application/envoy", "evy"], - ["application/epub+zip", "epub"], - ["application/excel", ["xls", "xl", "xla", "xlb", "xlc", "xld", "xlk", "xll", "xlm", "xlt", "xlv", "xlw"]], - ["application/exi", "exi"], - ["application/font-tdpfr", "pfr"], - ["application/fractals", "fif"], - ["application/freeloader", "frl"], - ["application/futuresplash", "spl"], - ["application/gnutar", "tgz"], - ["application/groupwise", "vew"], - ["application/hlp", "hlp"], - ["application/hta", "hta"], - ["application/hyperstudio", "stk"], - ["application/i-deas", "unv"], - ["application/iges", ["iges", "igs"]], - ["application/inf", "inf"], - ["application/internet-property-stream", "acx"], - ["application/ipfix", "ipfix"], - ["application/java", "class"], - ["application/java-archive", "jar"], - ["application/java-byte-code", "class"], - ["application/java-serialized-object", "ser"], - ["application/java-vm", "class"], - ["application/javascript", "js"], - ["application/json", "json"], - ["application/lha", "lha"], - ["application/lzx", "lzx"], - ["application/mac-binary", "bin"], - ["application/mac-binhex", "hqx"], - ["application/mac-binhex40", "hqx"], - ["application/mac-compactpro", "cpt"], - ["application/macbinary", "bin"], - ["application/mads+xml", "mads"], - ["application/marc", "mrc"], - ["application/marcxml+xml", "mrcx"], - ["application/mathematica", "ma"], - ["application/mathml+xml", "mathml"], - ["application/mbedlet", "mbd"], - ["application/mbox", "mbox"], - ["application/mcad", "mcd"], - ["application/mediaservercontrol+xml", "mscml"], - ["application/metalink4+xml", "meta4"], - ["application/mets+xml", "mets"], - ["application/mime", "aps"], - ["application/mods+xml", "mods"], - ["application/mp21", "m21"], - ["application/mp4", "mp4"], - ["application/mspowerpoint", ["ppt", "pot", "pps", "ppz"]], - ["application/msword", ["doc", "dot", "w6w", "wiz", "word"]], - ["application/mswrite", "wri"], - ["application/mxf", "mxf"], - ["application/netmc", "mcp"], - ["application/octet-stream", ["*"]], - ["application/oda", "oda"], - ["application/oebps-package+xml", "opf"], - ["application/ogg", "ogx"], - ["application/olescript", "axs"], - ["application/onenote", "onetoc"], - ["application/patch-ops-error+xml", "xer"], - ["application/pdf", "pdf"], - ["application/pgp-encrypted", "asc"], - ["application/pgp-signature", "pgp"], - ["application/pics-rules", "prf"], - ["application/pkcs-12", "p12"], - ["application/pkcs-crl", "crl"], - ["application/pkcs10", "p10"], - ["application/pkcs7-mime", ["p7c", "p7m"]], - ["application/pkcs7-signature", "p7s"], - ["application/pkcs8", "p8"], - ["application/pkix-attr-cert", "ac"], - ["application/pkix-cert", ["cer", "crt"]], - ["application/pkix-crl", "crl"], - ["application/pkix-pkipath", "pkipath"], - ["application/pkixcmp", "pki"], - ["application/plain", "text"], - ["application/pls+xml", "pls"], - ["application/postscript", ["ps", "ai", "eps"]], - ["application/powerpoint", "ppt"], - ["application/pro_eng", ["part", "prt"]], - ["application/prs.cww", "cww"], - ["application/pskc+xml", "pskcxml"], - ["application/rdf+xml", "rdf"], - ["application/reginfo+xml", "rif"], - ["application/relax-ng-compact-syntax", "rnc"], - ["application/resource-lists+xml", "rl"], - ["application/resource-lists-diff+xml", "rld"], - ["application/ringing-tones", "rng"], - ["application/rls-services+xml", "rs"], - ["application/rsd+xml", "rsd"], - ["application/rss+xml", "xml"], - ["application/rtf", ["rtf", "rtx"]], - ["application/sbml+xml", "sbml"], - ["application/scvp-cv-request", "scq"], - ["application/scvp-cv-response", "scs"], - ["application/scvp-vp-request", "spq"], - ["application/scvp-vp-response", "spp"], - ["application/sdp", "sdp"], - ["application/sea", "sea"], - ["application/set", "set"], - ["application/set-payment-initiation", "setpay"], - ["application/set-registration-initiation", "setreg"], - ["application/shf+xml", "shf"], - ["application/sla", "stl"], - ["application/smil", ["smi", "smil"]], - ["application/smil+xml", "smi"], - ["application/solids", "sol"], - ["application/sounder", "sdr"], - ["application/sparql-query", "rq"], - ["application/sparql-results+xml", "srx"], - ["application/srgs", "gram"], - ["application/srgs+xml", "grxml"], - ["application/sru+xml", "sru"], - ["application/ssml+xml", "ssml"], - ["application/step", ["step", "stp"]], - ["application/streamingmedia", "ssm"], - ["application/tei+xml", "tei"], - ["application/thraud+xml", "tfi"], - ["application/timestamped-data", "tsd"], - ["application/toolbook", "tbk"], - ["application/vda", "vda"], - ["application/vnd.3gpp.pic-bw-large", "plb"], - ["application/vnd.3gpp.pic-bw-small", "psb"], - ["application/vnd.3gpp.pic-bw-var", "pvb"], - ["application/vnd.3gpp2.tcap", "tcap"], - ["application/vnd.3m.post-it-notes", "pwn"], - ["application/vnd.accpac.simply.aso", "aso"], - ["application/vnd.accpac.simply.imp", "imp"], - ["application/vnd.acucobol", "acu"], - ["application/vnd.acucorp", "atc"], - ["application/vnd.adobe.air-application-installer-package+zip", "air"], - ["application/vnd.adobe.fxp", "fxp"], - ["application/vnd.adobe.xdp+xml", "xdp"], - ["application/vnd.adobe.xfdf", "xfdf"], - ["application/vnd.ahead.space", "ahead"], - ["application/vnd.airzip.filesecure.azf", "azf"], - ["application/vnd.airzip.filesecure.azs", "azs"], - ["application/vnd.amazon.ebook", "azw"], - ["application/vnd.americandynamics.acc", "acc"], - ["application/vnd.amiga.ami", "ami"], - ["application/vnd.android.package-archive", "apk"], - ["application/vnd.anser-web-certificate-issue-initiation", "cii"], - ["application/vnd.anser-web-funds-transfer-initiation", "fti"], - ["application/vnd.antix.game-component", "atx"], - ["application/vnd.apple.installer+xml", "mpkg"], - ["application/vnd.apple.mpegurl", "m3u8"], - ["application/vnd.aristanetworks.swi", "swi"], - ["application/vnd.audiograph", "aep"], - ["application/vnd.blueice.multipass", "mpm"], - ["application/vnd.bmi", "bmi"], - ["application/vnd.businessobjects", "rep"], - ["application/vnd.chemdraw+xml", "cdxml"], - ["application/vnd.chipnuts.karaoke-mmd", "mmd"], - ["application/vnd.cinderella", "cdy"], - ["application/vnd.claymore", "cla"], - ["application/vnd.cloanto.rp9", "rp9"], - ["application/vnd.clonk.c4group", "c4g"], - ["application/vnd.cluetrust.cartomobile-config", "c11amc"], - ["application/vnd.cluetrust.cartomobile-config-pkg", "c11amz"], - ["application/vnd.commonspace", "csp"], - ["application/vnd.contact.cmsg", "cdbcmsg"], - ["application/vnd.cosmocaller", "cmc"], - ["application/vnd.crick.clicker", "clkx"], - ["application/vnd.crick.clicker.keyboard", "clkk"], - ["application/vnd.crick.clicker.palette", "clkp"], - ["application/vnd.crick.clicker.template", "clkt"], - ["application/vnd.crick.clicker.wordbank", "clkw"], - ["application/vnd.criticaltools.wbs+xml", "wbs"], - ["application/vnd.ctc-posml", "pml"], - ["application/vnd.cups-ppd", "ppd"], - ["application/vnd.curl.car", "car"], - ["application/vnd.curl.pcurl", "pcurl"], - ["application/vnd.data-vision.rdz", "rdz"], - ["application/vnd.denovo.fcselayout-link", "fe_launch"], - ["application/vnd.dna", "dna"], - ["application/vnd.dolby.mlp", "mlp"], - ["application/vnd.dpgraph", "dpg"], - ["application/vnd.dreamfactory", "dfac"], - ["application/vnd.dvb.ait", "ait"], - ["application/vnd.dvb.service", "svc"], - ["application/vnd.dynageo", "geo"], - ["application/vnd.ecowin.chart", "mag"], - ["application/vnd.enliven", "nml"], - ["application/vnd.epson.esf", "esf"], - ["application/vnd.epson.msf", "msf"], - ["application/vnd.epson.quickanime", "qam"], - ["application/vnd.epson.salt", "slt"], - ["application/vnd.epson.ssf", "ssf"], - ["application/vnd.eszigno3+xml", "es3"], - ["application/vnd.ezpix-album", "ez2"], - ["application/vnd.ezpix-package", "ez3"], - ["application/vnd.fdf", "fdf"], - ["application/vnd.fdsn.seed", "seed"], - ["application/vnd.flographit", "gph"], - ["application/vnd.fluxtime.clip", "ftc"], - ["application/vnd.framemaker", "fm"], - ["application/vnd.frogans.fnc", "fnc"], - ["application/vnd.frogans.ltf", "ltf"], - ["application/vnd.fsc.weblaunch", "fsc"], - ["application/vnd.fujitsu.oasys", "oas"], - ["application/vnd.fujitsu.oasys2", "oa2"], - ["application/vnd.fujitsu.oasys3", "oa3"], - ["application/vnd.fujitsu.oasysgp", "fg5"], - ["application/vnd.fujitsu.oasysprs", "bh2"], - ["application/vnd.fujixerox.ddd", "ddd"], - ["application/vnd.fujixerox.docuworks", "xdw"], - ["application/vnd.fujixerox.docuworks.binder", "xbd"], - ["application/vnd.fuzzysheet", "fzs"], - ["application/vnd.genomatix.tuxedo", "txd"], - ["application/vnd.geogebra.file", "ggb"], - ["application/vnd.geogebra.tool", "ggt"], - ["application/vnd.geometry-explorer", "gex"], - ["application/vnd.geonext", "gxt"], - ["application/vnd.geoplan", "g2w"], - ["application/vnd.geospace", "g3w"], - ["application/vnd.gmx", "gmx"], - ["application/vnd.google-earth.kml+xml", "kml"], - ["application/vnd.google-earth.kmz", "kmz"], - ["application/vnd.grafeq", "gqf"], - ["application/vnd.groove-account", "gac"], - ["application/vnd.groove-help", "ghf"], - ["application/vnd.groove-identity-message", "gim"], - ["application/vnd.groove-injector", "grv"], - ["application/vnd.groove-tool-message", "gtm"], - ["application/vnd.groove-tool-template", "tpl"], - ["application/vnd.groove-vcard", "vcg"], - ["application/vnd.hal+xml", "hal"], - ["application/vnd.handheld-entertainment+xml", "zmm"], - ["application/vnd.hbci", "hbci"], - ["application/vnd.hhe.lesson-player", "les"], - ["application/vnd.hp-hpgl", ["hgl", "hpg", "hpgl"]], - ["application/vnd.hp-hpid", "hpid"], - ["application/vnd.hp-hps", "hps"], - ["application/vnd.hp-jlyt", "jlt"], - ["application/vnd.hp-pcl", "pcl"], - ["application/vnd.hp-pclxl", "pclxl"], - ["application/vnd.hydrostatix.sof-data", "sfd-hdstx"], - ["application/vnd.hzn-3d-crossword", "x3d"], - ["application/vnd.ibm.minipay", "mpy"], - ["application/vnd.ibm.modcap", "afp"], - ["application/vnd.ibm.rights-management", "irm"], - ["application/vnd.ibm.secure-container", "sc"], - ["application/vnd.iccprofile", "icc"], - ["application/vnd.igloader", "igl"], - ["application/vnd.immervision-ivp", "ivp"], - ["application/vnd.immervision-ivu", "ivu"], - ["application/vnd.insors.igm", "igm"], - ["application/vnd.intercon.formnet", "xpw"], - ["application/vnd.intergeo", "i2g"], - ["application/vnd.intu.qbo", "qbo"], - ["application/vnd.intu.qfx", "qfx"], - ["application/vnd.ipunplugged.rcprofile", "rcprofile"], - ["application/vnd.irepository.package+xml", "irp"], - ["application/vnd.is-xpr", "xpr"], - ["application/vnd.isac.fcs", "fcs"], - ["application/vnd.jam", "jam"], - ["application/vnd.jcp.javame.midlet-rms", "rms"], - ["application/vnd.jisp", "jisp"], - ["application/vnd.joost.joda-archive", "joda"], - ["application/vnd.kahootz", "ktz"], - ["application/vnd.kde.karbon", "karbon"], - ["application/vnd.kde.kchart", "chrt"], - ["application/vnd.kde.kformula", "kfo"], - ["application/vnd.kde.kivio", "flw"], - ["application/vnd.kde.kontour", "kon"], - ["application/vnd.kde.kpresenter", "kpr"], - ["application/vnd.kde.kspread", "ksp"], - ["application/vnd.kde.kword", "kwd"], - ["application/vnd.kenameaapp", "htke"], - ["application/vnd.kidspiration", "kia"], - ["application/vnd.kinar", "kne"], - ["application/vnd.koan", "skp"], - ["application/vnd.kodak-descriptor", "sse"], - ["application/vnd.las.las+xml", "lasxml"], - ["application/vnd.llamagraphics.life-balance.desktop", "lbd"], - ["application/vnd.llamagraphics.life-balance.exchange+xml", "lbe"], - ["application/vnd.lotus-1-2-3", "123"], - ["application/vnd.lotus-approach", "apr"], - ["application/vnd.lotus-freelance", "pre"], - ["application/vnd.lotus-notes", "nsf"], - ["application/vnd.lotus-organizer", "org"], - ["application/vnd.lotus-screencam", "scm"], - ["application/vnd.lotus-wordpro", "lwp"], - ["application/vnd.macports.portpkg", "portpkg"], - ["application/vnd.mcd", "mcd"], - ["application/vnd.medcalcdata", "mc1"], - ["application/vnd.mediastation.cdkey", "cdkey"], - ["application/vnd.mfer", "mwf"], - ["application/vnd.mfmp", "mfm"], - ["application/vnd.micrografx.flo", "flo"], - ["application/vnd.micrografx.igx", "igx"], - ["application/vnd.mif", "mif"], - ["application/vnd.mobius.daf", "daf"], - ["application/vnd.mobius.dis", "dis"], - ["application/vnd.mobius.mbk", "mbk"], - ["application/vnd.mobius.mqy", "mqy"], - ["application/vnd.mobius.msl", "msl"], - ["application/vnd.mobius.plc", "plc"], - ["application/vnd.mobius.txf", "txf"], - ["application/vnd.mophun.application", "mpn"], - ["application/vnd.mophun.certificate", "mpc"], - ["application/vnd.mozilla.xul+xml", "xul"], - ["application/vnd.ms-artgalry", "cil"], - ["application/vnd.ms-cab-compressed", "cab"], - ["application/vnd.ms-excel", ["xls", "xla", "xlc", "xlm", "xlt", "xlw", "xlb", "xll"]], - ["application/vnd.ms-excel.addin.macroenabled.12", "xlam"], - ["application/vnd.ms-excel.sheet.binary.macroenabled.12", "xlsb"], - ["application/vnd.ms-excel.sheet.macroenabled.12", "xlsm"], - ["application/vnd.ms-excel.template.macroenabled.12", "xltm"], - ["application/vnd.ms-fontobject", "eot"], - ["application/vnd.ms-htmlhelp", "chm"], - ["application/vnd.ms-ims", "ims"], - ["application/vnd.ms-lrm", "lrm"], - ["application/vnd.ms-officetheme", "thmx"], - ["application/vnd.ms-outlook", "msg"], - ["application/vnd.ms-pki.certstore", "sst"], - ["application/vnd.ms-pki.pko", "pko"], - ["application/vnd.ms-pki.seccat", "cat"], - ["application/vnd.ms-pki.stl", "stl"], - ["application/vnd.ms-pkicertstore", "sst"], - ["application/vnd.ms-pkiseccat", "cat"], - ["application/vnd.ms-pkistl", "stl"], - ["application/vnd.ms-powerpoint", ["ppt", "pot", "pps", "ppa", "pwz"]], - ["application/vnd.ms-powerpoint.addin.macroenabled.12", "ppam"], - ["application/vnd.ms-powerpoint.presentation.macroenabled.12", "pptm"], - ["application/vnd.ms-powerpoint.slide.macroenabled.12", "sldm"], - ["application/vnd.ms-powerpoint.slideshow.macroenabled.12", "ppsm"], - ["application/vnd.ms-powerpoint.template.macroenabled.12", "potm"], - ["application/vnd.ms-project", "mpp"], - ["application/vnd.ms-word.document.macroenabled.12", "docm"], - ["application/vnd.ms-word.template.macroenabled.12", "dotm"], - ["application/vnd.ms-works", ["wks", "wcm", "wdb", "wps"]], - ["application/vnd.ms-wpl", "wpl"], - ["application/vnd.ms-xpsdocument", "xps"], - ["application/vnd.mseq", "mseq"], - ["application/vnd.musician", "mus"], - ["application/vnd.muvee.style", "msty"], - ["application/vnd.neurolanguage.nlu", "nlu"], - ["application/vnd.noblenet-directory", "nnd"], - ["application/vnd.noblenet-sealer", "nns"], - ["application/vnd.noblenet-web", "nnw"], - ["application/vnd.nokia.configuration-message", "ncm"], - ["application/vnd.nokia.n-gage.data", "ngdat"], - ["application/vnd.nokia.n-gage.symbian.install", "n-gage"], - ["application/vnd.nokia.radio-preset", "rpst"], - ["application/vnd.nokia.radio-presets", "rpss"], - ["application/vnd.nokia.ringing-tone", "rng"], - ["application/vnd.novadigm.edm", "edm"], - ["application/vnd.novadigm.edx", "edx"], - ["application/vnd.novadigm.ext", "ext"], - ["application/vnd.oasis.opendocument.chart", "odc"], - ["application/vnd.oasis.opendocument.chart-template", "otc"], - ["application/vnd.oasis.opendocument.database", "odb"], - ["application/vnd.oasis.opendocument.formula", "odf"], - ["application/vnd.oasis.opendocument.formula-template", "odft"], - ["application/vnd.oasis.opendocument.graphics", "odg"], - ["application/vnd.oasis.opendocument.graphics-template", "otg"], - ["application/vnd.oasis.opendocument.image", "odi"], - ["application/vnd.oasis.opendocument.image-template", "oti"], - ["application/vnd.oasis.opendocument.presentation", "odp"], - ["application/vnd.oasis.opendocument.presentation-template", "otp"], - ["application/vnd.oasis.opendocument.spreadsheet", "ods"], - ["application/vnd.oasis.opendocument.spreadsheet-template", "ots"], - ["application/vnd.oasis.opendocument.text", "odt"], - ["application/vnd.oasis.opendocument.text-master", "odm"], - ["application/vnd.oasis.opendocument.text-template", "ott"], - ["application/vnd.oasis.opendocument.text-web", "oth"], - ["application/vnd.olpc-sugar", "xo"], - ["application/vnd.oma.dd2+xml", "dd2"], - ["application/vnd.openofficeorg.extension", "oxt"], - ["application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx"], - ["application/vnd.openxmlformats-officedocument.presentationml.slide", "sldx"], - ["application/vnd.openxmlformats-officedocument.presentationml.slideshow", "ppsx"], - ["application/vnd.openxmlformats-officedocument.presentationml.template", "potx"], - ["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx"], - ["application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xltx"], - ["application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx"], - ["application/vnd.openxmlformats-officedocument.wordprocessingml.template", "dotx"], - ["application/vnd.osgeo.mapguide.package", "mgp"], - ["application/vnd.osgi.dp", "dp"], - ["application/vnd.palm", "pdb"], - ["application/vnd.pawaafile", "paw"], - ["application/vnd.pg.format", "str"], - ["application/vnd.pg.osasli", "ei6"], - ["application/vnd.picsel", "efif"], - ["application/vnd.pmi.widget", "wg"], - ["application/vnd.pocketlearn", "plf"], - ["application/vnd.powerbuilder6", "pbd"], - ["application/vnd.previewsystems.box", "box"], - ["application/vnd.proteus.magazine", "mgz"], - ["application/vnd.publishare-delta-tree", "qps"], - ["application/vnd.pvi.ptid1", "ptid"], - ["application/vnd.quark.quarkxpress", "qxd"], - ["application/vnd.realvnc.bed", "bed"], - ["application/vnd.recordare.musicxml", "mxl"], - ["application/vnd.recordare.musicxml+xml", "musicxml"], - ["application/vnd.rig.cryptonote", "cryptonote"], - ["application/vnd.rim.cod", "cod"], - ["application/vnd.rn-realmedia", "rm"], - ["application/vnd.rn-realplayer", "rnx"], - ["application/vnd.route66.link66+xml", "link66"], - ["application/vnd.sailingtracker.track", "st"], - ["application/vnd.seemail", "see"], - ["application/vnd.sema", "sema"], - ["application/vnd.semd", "semd"], - ["application/vnd.semf", "semf"], - ["application/vnd.shana.informed.formdata", "ifm"], - ["application/vnd.shana.informed.formtemplate", "itp"], - ["application/vnd.shana.informed.interchange", "iif"], - ["application/vnd.shana.informed.package", "ipk"], - ["application/vnd.simtech-mindmapper", "twd"], - ["application/vnd.smaf", "mmf"], - ["application/vnd.smart.teacher", "teacher"], - ["application/vnd.solent.sdkm+xml", "sdkm"], - ["application/vnd.spotfire.dxp", "dxp"], - ["application/vnd.spotfire.sfs", "sfs"], - ["application/vnd.stardivision.calc", "sdc"], - ["application/vnd.stardivision.draw", "sda"], - ["application/vnd.stardivision.impress", "sdd"], - ["application/vnd.stardivision.math", "smf"], - ["application/vnd.stardivision.writer", "sdw"], - ["application/vnd.stardivision.writer-global", "sgl"], - ["application/vnd.stepmania.stepchart", "sm"], - ["application/vnd.sun.xml.calc", "sxc"], - ["application/vnd.sun.xml.calc.template", "stc"], - ["application/vnd.sun.xml.draw", "sxd"], - ["application/vnd.sun.xml.draw.template", "std"], - ["application/vnd.sun.xml.impress", "sxi"], - ["application/vnd.sun.xml.impress.template", "sti"], - ["application/vnd.sun.xml.math", "sxm"], - ["application/vnd.sun.xml.writer", "sxw"], - ["application/vnd.sun.xml.writer.global", "sxg"], - ["application/vnd.sun.xml.writer.template", "stw"], - ["application/vnd.sus-calendar", "sus"], - ["application/vnd.svd", "svd"], - ["application/vnd.symbian.install", "sis"], - ["application/vnd.syncml+xml", "xsm"], - ["application/vnd.syncml.dm+wbxml", "bdm"], - ["application/vnd.syncml.dm+xml", "xdm"], - ["application/vnd.tao.intent-module-archive", "tao"], - ["application/vnd.tmobile-livetv", "tmo"], - ["application/vnd.trid.tpt", "tpt"], - ["application/vnd.triscape.mxs", "mxs"], - ["application/vnd.trueapp", "tra"], - ["application/vnd.ufdl", "ufd"], - ["application/vnd.uiq.theme", "utz"], - ["application/vnd.umajin", "umj"], - ["application/vnd.unity", "unityweb"], - ["application/vnd.uoml+xml", "uoml"], - ["application/vnd.vcx", "vcx"], - ["application/vnd.visio", "vsd"], - ["application/vnd.visionary", "vis"], - ["application/vnd.vsf", "vsf"], - ["application/vnd.wap.wbxml", "wbxml"], - ["application/vnd.wap.wmlc", "wmlc"], - ["application/vnd.wap.wmlscriptc", "wmlsc"], - ["application/vnd.webturbo", "wtb"], - ["application/vnd.wolfram.player", "nbp"], - ["application/vnd.wordperfect", "wpd"], - ["application/vnd.wqd", "wqd"], - ["application/vnd.wt.stf", "stf"], - ["application/vnd.xara", ["web", "xar"]], - ["application/vnd.xfdl", "xfdl"], - ["application/vnd.yamaha.hv-dic", "hvd"], - ["application/vnd.yamaha.hv-script", "hvs"], - ["application/vnd.yamaha.hv-voice", "hvp"], - ["application/vnd.yamaha.openscoreformat", "osf"], - ["application/vnd.yamaha.openscoreformat.osfpvg+xml", "osfpvg"], - ["application/vnd.yamaha.smaf-audio", "saf"], - ["application/vnd.yamaha.smaf-phrase", "spf"], - ["application/vnd.yellowriver-custom-menu", "cmp"], - ["application/vnd.zul", "zir"], - ["application/vnd.zzazz.deck+xml", "zaz"], - ["application/vocaltec-media-desc", "vmd"], - ["application/vocaltec-media-file", "vmf"], - ["application/voicexml+xml", "vxml"], - ["application/widget", "wgt"], - ["application/winhlp", "hlp"], - ["application/wordperfect", ["wp", "wp5", "wp6", "wpd"]], - ["application/wordperfect6.0", ["w60", "wp5"]], - ["application/wordperfect6.1", "w61"], - ["application/wsdl+xml", "wsdl"], - ["application/wspolicy+xml", "wspolicy"], - ["application/x-123", "wk1"], - ["application/x-7z-compressed", "7z"], - ["application/x-abiword", "abw"], - ["application/x-ace-compressed", "ace"], - ["application/x-aim", "aim"], - ["application/x-authorware-bin", "aab"], - ["application/x-authorware-map", "aam"], - ["application/x-authorware-seg", "aas"], - ["application/x-bcpio", "bcpio"], - ["application/x-binary", "bin"], - ["application/x-binhex40", "hqx"], - ["application/x-bittorrent", "torrent"], - ["application/x-bsh", ["bsh", "sh", "shar"]], - ["application/x-bytecode.elisp", "elc"], - ["application/x-bytecode.python", "pyc"], - ["application/x-bzip", "bz"], - ["application/x-bzip2", ["boz", "bz2"]], - ["application/x-cdf", "cdf"], - ["application/x-cdlink", "vcd"], - ["application/x-chat", ["cha", "chat"]], - ["application/x-chess-pgn", "pgn"], - ["application/x-cmu-raster", "ras"], - ["application/x-cocoa", "cco"], - ["application/x-compactpro", "cpt"], - ["application/x-compress", "z"], - ["application/x-compressed", ["tgz", "gz", "z", "zip"]], - ["application/x-conference", "nsc"], - ["application/x-cpio", "cpio"], - ["application/x-cpt", "cpt"], - ["application/x-csh", "csh"], - ["application/x-debian-package", "deb"], - ["application/x-deepv", "deepv"], - ["application/x-director", ["dir", "dcr", "dxr"]], - ["application/x-doom", "wad"], - ["application/x-dtbncx+xml", "ncx"], - ["application/x-dtbook+xml", "dtb"], - ["application/x-dtbresource+xml", "res"], - ["application/x-dvi", "dvi"], - ["application/x-elc", "elc"], - ["application/x-envoy", ["env", "evy"]], - ["application/x-esrehber", "es"], - ["application/x-excel", ["xls", "xla", "xlb", "xlc", "xld", "xlk", "xll", "xlm", "xlt", "xlv", "xlw"]], - ["application/x-font-bdf", "bdf"], - ["application/x-font-ghostscript", "gsf"], - ["application/x-font-linux-psf", "psf"], - ["application/x-font-otf", "otf"], - ["application/x-font-pcf", "pcf"], - ["application/x-font-snf", "snf"], - ["application/x-font-ttf", "ttf"], - ["application/x-font-type1", "pfa"], - ["application/x-font-woff", "woff"], - ["application/x-frame", "mif"], - ["application/x-freelance", "pre"], - ["application/x-futuresplash", "spl"], - ["application/x-gnumeric", "gnumeric"], - ["application/x-gsp", "gsp"], - ["application/x-gss", "gss"], - ["application/x-gtar", "gtar"], - ["application/x-gzip", ["gz", "gzip"]], - ["application/x-hdf", "hdf"], - ["application/x-helpfile", ["help", "hlp"]], - ["application/x-httpd-imap", "imap"], - ["application/x-ima", "ima"], - ["application/x-internet-signup", ["ins", "isp"]], - ["application/x-internett-signup", "ins"], - ["application/x-inventor", "iv"], - ["application/x-ip2", "ip"], - ["application/x-iphone", "iii"], - ["application/x-java-class", "class"], - ["application/x-java-commerce", "jcm"], - ["application/x-java-jnlp-file", "jnlp"], - ["application/x-javascript", "js"], - ["application/x-koan", ["skd", "skm", "skp", "skt"]], - ["application/x-ksh", "ksh"], - ["application/x-latex", ["latex", "ltx"]], - ["application/x-lha", "lha"], - ["application/x-lisp", "lsp"], - ["application/x-livescreen", "ivy"], - ["application/x-lotus", "wq1"], - ["application/x-lotusscreencam", "scm"], - ["application/x-lzh", "lzh"], - ["application/x-lzx", "lzx"], - ["application/x-mac-binhex40", "hqx"], - ["application/x-macbinary", "bin"], - ["application/x-magic-cap-package-1.0", "mc$"], - ["application/x-mathcad", "mcd"], - ["application/x-meme", "mm"], - ["application/x-midi", ["mid", "midi"]], - ["application/x-mif", "mif"], - ["application/x-mix-transfer", "nix"], - ["application/x-mobipocket-ebook", "prc"], - ["application/x-mplayer2", "asx"], - ["application/x-ms-application", "application"], - ["application/x-ms-wmd", "wmd"], - ["application/x-ms-wmz", "wmz"], - ["application/x-ms-xbap", "xbap"], - ["application/x-msaccess", "mdb"], - ["application/x-msbinder", "obd"], - ["application/x-mscardfile", "crd"], - ["application/x-msclip", "clp"], - ["application/x-msdownload", ["exe", "dll"]], - ["application/x-msexcel", ["xls", "xla", "xlw"]], - ["application/x-msmediaview", ["mvb", "m13", "m14"]], - ["application/x-msmetafile", "wmf"], - ["application/x-msmoney", "mny"], - ["application/x-mspowerpoint", "ppt"], - ["application/x-mspublisher", "pub"], - ["application/x-msschedule", "scd"], - ["application/x-msterminal", "trm"], - ["application/x-mswrite", "wri"], - ["application/x-navi-animation", "ani"], - ["application/x-navidoc", "nvd"], - ["application/x-navimap", "map"], - ["application/x-navistyle", "stl"], - ["application/x-netcdf", ["cdf", "nc"]], - ["application/x-newton-compatible-pkg", "pkg"], - ["application/x-nokia-9000-communicator-add-on-software", "aos"], - ["application/x-omc", "omc"], - ["application/x-omcdatamaker", "omcd"], - ["application/x-omcregerator", "omcr"], - ["application/x-pagemaker", ["pm4", "pm5"]], - ["application/x-pcl", "pcl"], - ["application/x-perfmon", ["pma", "pmc", "pml", "pmr", "pmw"]], - ["application/x-pixclscript", "plx"], - ["application/x-pkcs10", "p10"], - ["application/x-pkcs12", ["p12", "pfx"]], - ["application/x-pkcs7-certificates", ["p7b", "spc"]], - ["application/x-pkcs7-certreqresp", "p7r"], - ["application/x-pkcs7-mime", ["p7m", "p7c"]], - ["application/x-pkcs7-signature", ["p7s", "p7a"]], - ["application/x-pointplus", "css"], - ["application/x-portable-anymap", "pnm"], - ["application/x-project", ["mpc", "mpt", "mpv", "mpx"]], - ["application/x-qpro", "wb1"], - ["application/x-rar-compressed", "rar"], - ["application/x-rtf", "rtf"], - ["application/x-sdp", "sdp"], - ["application/x-sea", "sea"], - ["application/x-seelogo", "sl"], - ["application/x-sh", "sh"], - ["application/x-shar", ["shar", "sh"]], - ["application/x-shockwave-flash", "swf"], - ["application/x-silverlight-app", "xap"], - ["application/x-sit", "sit"], - ["application/x-sprite", ["spr", "sprite"]], - ["application/x-stuffit", "sit"], - ["application/x-stuffitx", "sitx"], - ["application/x-sv4cpio", "sv4cpio"], - ["application/x-sv4crc", "sv4crc"], - ["application/x-tar", "tar"], - ["application/x-tbook", ["sbk", "tbk"]], - ["application/x-tcl", "tcl"], - ["application/x-tex", "tex"], - ["application/x-tex-tfm", "tfm"], - ["application/x-texinfo", ["texi", "texinfo"]], - ["application/x-troff", ["roff", "t", "tr"]], - ["application/x-troff-man", "man"], - ["application/x-troff-me", "me"], - ["application/x-troff-ms", "ms"], - ["application/x-troff-msvideo", "avi"], - ["application/x-ustar", "ustar"], - ["application/x-visio", ["vsd", "vst", "vsw"]], - ["application/x-vnd.audioexplosion.mzz", "mzz"], - ["application/x-vnd.ls-xpix", "xpix"], - ["application/x-vrml", "vrml"], - ["application/x-wais-source", ["src", "wsrc"]], - ["application/x-winhelp", "hlp"], - ["application/x-wintalk", "wtk"], - ["application/x-world", ["wrl", "svr"]], - ["application/x-wpwin", "wpd"], - ["application/x-wri", "wri"], - ["application/x-x509-ca-cert", ["cer", "crt", "der"]], - ["application/x-x509-user-cert", "crt"], - ["application/x-xfig", "fig"], - ["application/x-xpinstall", "xpi"], - ["application/x-zip-compressed", "zip"], - ["application/xcap-diff+xml", "xdf"], - ["application/xenc+xml", "xenc"], - ["application/xhtml+xml", "xhtml"], - ["application/xml", "xml"], - ["application/xml-dtd", "dtd"], - ["application/xop+xml", "xop"], - ["application/xslt+xml", "xslt"], - ["application/xspf+xml", "xspf"], - ["application/xv+xml", "mxml"], - ["application/yang", "yang"], - ["application/yin+xml", "yin"], - ["application/ynd.ms-pkipko", "pko"], - ["application/zip", "zip"], - ["audio/adpcm", "adp"], - ["audio/aiff", ["aiff", "aif", "aifc"]], - ["audio/basic", ["snd", "au"]], - ["audio/it", "it"], - ["audio/make", ["funk", "my", "pfunk"]], - ["audio/make.my.funk", "pfunk"], - ["audio/mid", ["mid", "rmi"]], - ["audio/midi", ["midi", "kar", "mid"]], - ["audio/mod", "mod"], - ["audio/mp4", "mp4a"], - ["audio/mpeg", ["mpga", "mp3", "m2a", "mp2", "mpa", "mpg"]], - ["audio/mpeg3", "mp3"], - ["audio/nspaudio", ["la", "lma"]], - ["audio/ogg", "oga"], - ["audio/s3m", "s3m"], - ["audio/tsp-audio", "tsi"], - ["audio/tsplayer", "tsp"], - ["audio/vnd.dece.audio", "uva"], - ["audio/vnd.digital-winds", "eol"], - ["audio/vnd.dra", "dra"], - ["audio/vnd.dts", "dts"], - ["audio/vnd.dts.hd", "dtshd"], - ["audio/vnd.lucent.voice", "lvp"], - ["audio/vnd.ms-playready.media.pya", "pya"], - ["audio/vnd.nuera.ecelp4800", "ecelp4800"], - ["audio/vnd.nuera.ecelp7470", "ecelp7470"], - ["audio/vnd.nuera.ecelp9600", "ecelp9600"], - ["audio/vnd.qcelp", "qcp"], - ["audio/vnd.rip", "rip"], - ["audio/voc", "voc"], - ["audio/voxware", "vox"], - ["audio/wav", "wav"], - ["audio/webm", "weba"], - ["audio/x-aac", "aac"], - ["audio/x-adpcm", "snd"], - ["audio/x-aiff", ["aiff", "aif", "aifc"]], - ["audio/x-au", "au"], - ["audio/x-gsm", ["gsd", "gsm"]], - ["audio/x-jam", "jam"], - ["audio/x-liveaudio", "lam"], - ["audio/x-mid", ["mid", "midi"]], - ["audio/x-midi", ["midi", "mid"]], - ["audio/x-mod", "mod"], - ["audio/x-mpeg", "mp2"], - ["audio/x-mpeg-3", "mp3"], - ["audio/x-mpegurl", "m3u"], - ["audio/x-mpequrl", "m3u"], - ["audio/x-ms-wax", "wax"], - ["audio/x-ms-wma", "wma"], - ["audio/x-nspaudio", ["la", "lma"]], - ["audio/x-pn-realaudio", ["ra", "ram", "rm", "rmm", "rmp"]], - ["audio/x-pn-realaudio-plugin", ["ra", "rmp", "rpm"]], - ["audio/x-psid", "sid"], - ["audio/x-realaudio", "ra"], - ["audio/x-twinvq", "vqf"], - ["audio/x-twinvq-plugin", ["vqe", "vql"]], - ["audio/x-vnd.audioexplosion.mjuicemediafile", "mjf"], - ["audio/x-voc", "voc"], - ["audio/x-wav", "wav"], - ["audio/xm", "xm"], - ["chemical/x-cdx", "cdx"], - ["chemical/x-cif", "cif"], - ["chemical/x-cmdf", "cmdf"], - ["chemical/x-cml", "cml"], - ["chemical/x-csml", "csml"], - ["chemical/x-pdb", ["pdb", "xyz"]], - ["chemical/x-xyz", "xyz"], - ["drawing/x-dwf", "dwf"], - ["i-world/i-vrml", "ivr"], - ["image/bmp", ["bmp", "bm"]], - ["image/cgm", "cgm"], - ["image/cis-cod", "cod"], - ["image/cmu-raster", ["ras", "rast"]], - ["image/fif", "fif"], - ["image/florian", ["flo", "turbot"]], - ["image/g3fax", "g3"], - ["image/gif", "gif"], - ["image/ief", ["ief", "iefs"]], - ["image/jpeg", ["jpeg", "jpe", "jpg", "jfif", "jfif-tbnl"]], - ["image/jutvision", "jut"], - ["image/ktx", "ktx"], - ["image/naplps", ["nap", "naplps"]], - ["image/pict", ["pic", "pict"]], - ["image/pipeg", "jfif"], - ["image/pjpeg", ["jfif", "jpe", "jpeg", "jpg"]], - ["image/png", ["png", "x-png"]], - ["image/prs.btif", "btif"], - ["image/svg+xml", "svg"], - ["image/tiff", ["tif", "tiff"]], - ["image/vasa", "mcf"], - ["image/vnd.adobe.photoshop", "psd"], - ["image/vnd.dece.graphic", "uvi"], - ["image/vnd.djvu", "djvu"], - ["image/vnd.dvb.subtitle", "sub"], - ["image/vnd.dwg", ["dwg", "dxf", "svf"]], - ["image/vnd.dxf", "dxf"], - ["image/vnd.fastbidsheet", "fbs"], - ["image/vnd.fpx", "fpx"], - ["image/vnd.fst", "fst"], - ["image/vnd.fujixerox.edmics-mmr", "mmr"], - ["image/vnd.fujixerox.edmics-rlc", "rlc"], - ["image/vnd.ms-modi", "mdi"], - ["image/vnd.net-fpx", ["fpx", "npx"]], - ["image/vnd.rn-realflash", "rf"], - ["image/vnd.rn-realpix", "rp"], - ["image/vnd.wap.wbmp", "wbmp"], - ["image/vnd.xiff", "xif"], - ["image/webp", "webp"], - ["image/x-cmu-raster", "ras"], - ["image/x-cmx", "cmx"], - ["image/x-dwg", ["dwg", "dxf", "svf"]], - ["image/x-freehand", "fh"], - ["image/x-icon", "ico"], - ["image/x-jg", "art"], - ["image/x-jps", "jps"], - ["image/x-niff", ["niff", "nif"]], - ["image/x-pcx", "pcx"], - ["image/x-pict", ["pct", "pic"]], - ["image/x-portable-anymap", "pnm"], - ["image/x-portable-bitmap", "pbm"], - ["image/x-portable-graymap", "pgm"], - ["image/x-portable-greymap", "pgm"], - ["image/x-portable-pixmap", "ppm"], - ["image/x-quicktime", ["qif", "qti", "qtif"]], - ["image/x-rgb", "rgb"], - ["image/x-tiff", ["tif", "tiff"]], - ["image/x-windows-bmp", "bmp"], - ["image/x-xbitmap", "xbm"], - ["image/x-xbm", "xbm"], - ["image/x-xpixmap", ["xpm", "pm"]], - ["image/x-xwd", "xwd"], - ["image/x-xwindowdump", "xwd"], - ["image/xbm", "xbm"], - ["image/xpm", "xpm"], - ["message/rfc822", ["eml", "mht", "mhtml", "nws", "mime"]], - ["model/iges", ["iges", "igs"]], - ["model/mesh", "msh"], - ["model/vnd.collada+xml", "dae"], - ["model/vnd.dwf", "dwf"], - ["model/vnd.gdl", "gdl"], - ["model/vnd.gtw", "gtw"], - ["model/vnd.mts", "mts"], - ["model/vnd.vtu", "vtu"], - ["model/vrml", ["vrml", "wrl", "wrz"]], - ["model/x-pov", "pov"], - ["multipart/x-gzip", "gzip"], - ["multipart/x-ustar", "ustar"], - ["multipart/x-zip", "zip"], - ["music/crescendo", ["mid", "midi"]], - ["music/x-karaoke", "kar"], - ["paleovu/x-pv", "pvu"], - ["text/asp", "asp"], - ["text/calendar", "ics"], - ["text/css", "css"], - ["text/csv", "csv"], - ["text/ecmascript", "js"], - ["text/h323", "323"], - ["text/html", ["html", "htm", "stm", "acgi", "htmls", "htx", "shtml"]], - ["text/iuls", "uls"], - ["text/javascript", "js"], - ["text/mcf", "mcf"], - ["text/n3", "n3"], - ["text/pascal", "pas"], - [ - "text/plain", - [ - "txt", - "bas", - "c", - "h", - "c++", - "cc", - "com", - "conf", - "cxx", - "def", - "f", - "f90", - "for", - "g", - "hh", - "idc", - "jav", - "java", - "list", - "log", - "lst", - "m", - "mar", - "pl", - "sdml", - "text" - ] - ], - ["text/plain-bas", "par"], - ["text/prs.lines.tag", "dsc"], - ["text/richtext", ["rtx", "rt", "rtf"]], - ["text/scriplet", "wsc"], - ["text/scriptlet", "sct"], - ["text/sgml", ["sgm", "sgml"]], - ["text/tab-separated-values", "tsv"], - ["text/troff", "t"], - ["text/turtle", "ttl"], - ["text/uri-list", ["uni", "unis", "uri", "uris"]], - ["text/vnd.abc", "abc"], - ["text/vnd.curl", "curl"], - ["text/vnd.curl.dcurl", "dcurl"], - ["text/vnd.curl.mcurl", "mcurl"], - ["text/vnd.curl.scurl", "scurl"], - ["text/vnd.fly", "fly"], - ["text/vnd.fmi.flexstor", "flx"], - ["text/vnd.graphviz", "gv"], - ["text/vnd.in3d.3dml", "3dml"], - ["text/vnd.in3d.spot", "spot"], - ["text/vnd.rn-realtext", "rt"], - ["text/vnd.sun.j2me.app-descriptor", "jad"], - ["text/vnd.wap.wml", "wml"], - ["text/vnd.wap.wmlscript", "wmls"], - ["text/webviewhtml", "htt"], - ["text/x-asm", ["asm", "s"]], - ["text/x-audiosoft-intra", "aip"], - ["text/x-c", ["c", "cc", "cpp"]], - ["text/x-component", "htc"], - ["text/x-fortran", ["for", "f", "f77", "f90"]], - ["text/x-h", ["h", "hh"]], - ["text/x-java-source", ["java", "jav"]], - ["text/x-java-source,java", "java"], - ["text/x-la-asf", "lsx"], - ["text/x-m", "m"], - ["text/x-pascal", "p"], - ["text/x-script", "hlb"], - ["text/x-script.csh", "csh"], - ["text/x-script.elisp", "el"], - ["text/x-script.guile", "scm"], - ["text/x-script.ksh", "ksh"], - ["text/x-script.lisp", "lsp"], - ["text/x-script.perl", "pl"], - ["text/x-script.perl-module", "pm"], - ["text/x-script.phyton", "py"], - ["text/x-script.rexx", "rexx"], - ["text/x-script.scheme", "scm"], - ["text/x-script.sh", "sh"], - ["text/x-script.tcl", "tcl"], - ["text/x-script.tcsh", "tcsh"], - ["text/x-script.zsh", "zsh"], - ["text/x-server-parsed-html", ["shtml", "ssi"]], - ["text/x-setext", "etx"], - ["text/x-sgml", ["sgm", "sgml"]], - ["text/x-speech", ["spc", "talk"]], - ["text/x-uil", "uil"], - ["text/x-uuencode", ["uu", "uue"]], - ["text/x-vcalendar", "vcs"], - ["text/x-vcard", "vcf"], - ["text/xml", "xml"], - ["video/3gpp", "3gp"], - ["video/3gpp2", "3g2"], - ["video/animaflex", "afl"], - ["video/avi", "avi"], - ["video/avs-video", "avs"], - ["video/dl", "dl"], - ["video/fli", "fli"], - ["video/gl", "gl"], - ["video/h261", "h261"], - ["video/h263", "h263"], - ["video/h264", "h264"], - ["video/jpeg", "jpgv"], - ["video/jpm", "jpm"], - ["video/mj2", "mj2"], - ["video/mp4", "mp4"], - ["video/mpeg", ["mpeg", "mp2", "mpa", "mpe", "mpg", "mpv2", "m1v", "m2v", "mp3"]], - ["video/msvideo", "avi"], - ["video/ogg", "ogv"], - ["video/quicktime", ["mov", "qt", "moov"]], - ["video/vdo", "vdo"], - ["video/vivo", ["viv", "vivo"]], - ["video/vnd.dece.hd", "uvh"], - ["video/vnd.dece.mobile", "uvm"], - ["video/vnd.dece.pd", "uvp"], - ["video/vnd.dece.sd", "uvs"], - ["video/vnd.dece.video", "uvv"], - ["video/vnd.fvt", "fvt"], - ["video/vnd.mpegurl", "mxu"], - ["video/vnd.ms-playready.media.pyv", "pyv"], - ["video/vnd.rn-realvideo", "rv"], - ["video/vnd.uvvu.mp4", "uvu"], - ["video/vnd.vivo", ["viv", "vivo"]], - ["video/vosaic", "vos"], - ["video/webm", "webm"], - ["video/x-amt-demorun", "xdr"], - ["video/x-amt-showrun", "xsr"], - ["video/x-atomic3d-feature", "fmf"], - ["video/x-dl", "dl"], - ["video/x-dv", ["dif", "dv"]], - ["video/x-f4v", "f4v"], - ["video/x-fli", "fli"], - ["video/x-flv", "flv"], - ["video/x-gl", "gl"], - ["video/x-isvideo", "isu"], - ["video/x-la-asf", ["lsf", "lsx"]], - ["video/x-m4v", "m4v"], - ["video/x-motion-jpeg", "mjpg"], - ["video/x-mpeg", ["mp3", "mp2"]], - ["video/x-mpeq2a", "mp2"], - ["video/x-ms-asf", ["asf", "asr", "asx"]], - ["video/x-ms-asf-plugin", "asx"], - ["video/x-ms-wm", "wm"], - ["video/x-ms-wmv", "wmv"], - ["video/x-ms-wmx", "wmx"], - ["video/x-ms-wvx", "wvx"], - ["video/x-msvideo", "avi"], - ["video/x-qtc", "qtc"], - ["video/x-scm", "scm"], - ["video/x-sgi-movie", ["movie", "mv"]], - ["windows/metafile", "wmf"], - ["www/mime", "mime"], - ["x-conference/x-cooltalk", "ice"], - ["x-music/x-midi", ["mid", "midi"]], - ["x-world/x-3dmf", ["3dm", "3dmf", "qd3", "qd3d"]], - ["x-world/x-svr", "svr"], - ["x-world/x-vrml", ["flr", "vrml", "wrl", "wrz", "xaf", "xof"]], - ["x-world/x-vrt", "vrt"], - ["xgl/drawing", "xgz"], - ["xgl/movie", "xmz"] - ]); - var extensions = new Map([ - ["123", "application/vnd.lotus-1-2-3"], - ["323", "text/h323"], - ["*", "application/octet-stream"], - ["3dm", "x-world/x-3dmf"], - ["3dmf", "x-world/x-3dmf"], - ["3dml", "text/vnd.in3d.3dml"], - ["3g2", "video/3gpp2"], - ["3gp", "video/3gpp"], - ["7z", "application/x-7z-compressed"], - ["a", "application/octet-stream"], - ["aab", "application/x-authorware-bin"], - ["aac", "audio/x-aac"], - ["aam", "application/x-authorware-map"], - ["aas", "application/x-authorware-seg"], - ["abc", "text/vnd.abc"], - ["abw", "application/x-abiword"], - ["ac", "application/pkix-attr-cert"], - ["acc", "application/vnd.americandynamics.acc"], - ["ace", "application/x-ace-compressed"], - ["acgi", "text/html"], - ["acu", "application/vnd.acucobol"], - ["acx", "application/internet-property-stream"], - ["adp", "audio/adpcm"], - ["aep", "application/vnd.audiograph"], - ["afl", "video/animaflex"], - ["afp", "application/vnd.ibm.modcap"], - ["ahead", "application/vnd.ahead.space"], - ["ai", "application/postscript"], - ["aif", ["audio/aiff", "audio/x-aiff"]], - ["aifc", ["audio/aiff", "audio/x-aiff"]], - ["aiff", ["audio/aiff", "audio/x-aiff"]], - ["aim", "application/x-aim"], - ["aip", "text/x-audiosoft-intra"], - ["air", "application/vnd.adobe.air-application-installer-package+zip"], - ["ait", "application/vnd.dvb.ait"], - ["ami", "application/vnd.amiga.ami"], - ["ani", "application/x-navi-animation"], - ["aos", "application/x-nokia-9000-communicator-add-on-software"], - ["apk", "application/vnd.android.package-archive"], - ["application", "application/x-ms-application"], - ["apr", "application/vnd.lotus-approach"], - ["aps", "application/mime"], - ["arc", "application/octet-stream"], - ["arj", ["application/arj", "application/octet-stream"]], - ["art", "image/x-jg"], - ["asf", "video/x-ms-asf"], - ["asm", "text/x-asm"], - ["aso", "application/vnd.accpac.simply.aso"], - ["asp", "text/asp"], - ["asr", "video/x-ms-asf"], - ["asx", ["video/x-ms-asf", "application/x-mplayer2", "video/x-ms-asf-plugin"]], - ["atc", "application/vnd.acucorp"], - ["atomcat", "application/atomcat+xml"], - ["atomsvc", "application/atomsvc+xml"], - ["atx", "application/vnd.antix.game-component"], - ["au", ["audio/basic", "audio/x-au"]], - ["avi", ["video/avi", "video/msvideo", "application/x-troff-msvideo", "video/x-msvideo"]], - ["avs", "video/avs-video"], - ["aw", "application/applixware"], - ["axs", "application/olescript"], - ["azf", "application/vnd.airzip.filesecure.azf"], - ["azs", "application/vnd.airzip.filesecure.azs"], - ["azw", "application/vnd.amazon.ebook"], - ["bas", "text/plain"], - ["bcpio", "application/x-bcpio"], - ["bdf", "application/x-font-bdf"], - ["bdm", "application/vnd.syncml.dm+wbxml"], - ["bed", "application/vnd.realvnc.bed"], - ["bh2", "application/vnd.fujitsu.oasysprs"], - ["bin", ["application/octet-stream", "application/mac-binary", "application/macbinary", "application/x-macbinary", "application/x-binary"]], - ["bm", "image/bmp"], - ["bmi", "application/vnd.bmi"], - ["bmp", ["image/bmp", "image/x-windows-bmp"]], - ["boo", "application/book"], - ["book", "application/book"], - ["box", "application/vnd.previewsystems.box"], - ["boz", "application/x-bzip2"], - ["bsh", "application/x-bsh"], - ["btif", "image/prs.btif"], - ["bz", "application/x-bzip"], - ["bz2", "application/x-bzip2"], - ["c", ["text/plain", "text/x-c"]], - ["c++", "text/plain"], - ["c11amc", "application/vnd.cluetrust.cartomobile-config"], - ["c11amz", "application/vnd.cluetrust.cartomobile-config-pkg"], - ["c4g", "application/vnd.clonk.c4group"], - ["cab", "application/vnd.ms-cab-compressed"], - ["car", "application/vnd.curl.car"], - ["cat", ["application/vnd.ms-pkiseccat", "application/vnd.ms-pki.seccat"]], - ["cc", ["text/plain", "text/x-c"]], - ["ccad", "application/clariscad"], - ["cco", "application/x-cocoa"], - ["ccxml", "application/ccxml+xml,"], - ["cdbcmsg", "application/vnd.contact.cmsg"], - ["cdf", ["application/cdf", "application/x-cdf", "application/x-netcdf"]], - ["cdkey", "application/vnd.mediastation.cdkey"], - ["cdmia", "application/cdmi-capability"], - ["cdmic", "application/cdmi-container"], - ["cdmid", "application/cdmi-domain"], - ["cdmio", "application/cdmi-object"], - ["cdmiq", "application/cdmi-queue"], - ["cdx", "chemical/x-cdx"], - ["cdxml", "application/vnd.chemdraw+xml"], - ["cdy", "application/vnd.cinderella"], - ["cer", ["application/pkix-cert", "application/x-x509-ca-cert"]], - ["cgm", "image/cgm"], - ["cha", "application/x-chat"], - ["chat", "application/x-chat"], - ["chm", "application/vnd.ms-htmlhelp"], - ["chrt", "application/vnd.kde.kchart"], - ["cif", "chemical/x-cif"], - ["cii", "application/vnd.anser-web-certificate-issue-initiation"], - ["cil", "application/vnd.ms-artgalry"], - ["cla", "application/vnd.claymore"], - ["class", ["application/octet-stream", "application/java", "application/java-byte-code", "application/java-vm", "application/x-java-class"]], - ["clkk", "application/vnd.crick.clicker.keyboard"], - ["clkp", "application/vnd.crick.clicker.palette"], - ["clkt", "application/vnd.crick.clicker.template"], - ["clkw", "application/vnd.crick.clicker.wordbank"], - ["clkx", "application/vnd.crick.clicker"], - ["clp", "application/x-msclip"], - ["cmc", "application/vnd.cosmocaller"], - ["cmdf", "chemical/x-cmdf"], - ["cml", "chemical/x-cml"], - ["cmp", "application/vnd.yellowriver-custom-menu"], - ["cmx", "image/x-cmx"], - ["cod", ["image/cis-cod", "application/vnd.rim.cod"]], - ["com", ["application/octet-stream", "text/plain"]], - ["conf", "text/plain"], - ["cpio", "application/x-cpio"], - ["cpp", "text/x-c"], - ["cpt", ["application/mac-compactpro", "application/x-compactpro", "application/x-cpt"]], - ["crd", "application/x-mscardfile"], - ["crl", ["application/pkix-crl", "application/pkcs-crl"]], - ["crt", ["application/pkix-cert", "application/x-x509-user-cert", "application/x-x509-ca-cert"]], - ["cryptonote", "application/vnd.rig.cryptonote"], - ["csh", ["text/x-script.csh", "application/x-csh"]], - ["csml", "chemical/x-csml"], - ["csp", "application/vnd.commonspace"], - ["css", ["text/css", "application/x-pointplus"]], - ["csv", "text/csv"], - ["cu", "application/cu-seeme"], - ["curl", "text/vnd.curl"], - ["cww", "application/prs.cww"], - ["cxx", "text/plain"], - ["dae", "model/vnd.collada+xml"], - ["daf", "application/vnd.mobius.daf"], - ["davmount", "application/davmount+xml"], - ["dcr", "application/x-director"], - ["dcurl", "text/vnd.curl.dcurl"], - ["dd2", "application/vnd.oma.dd2+xml"], - ["ddd", "application/vnd.fujixerox.ddd"], - ["deb", "application/x-debian-package"], - ["deepv", "application/x-deepv"], - ["def", "text/plain"], - ["der", "application/x-x509-ca-cert"], - ["dfac", "application/vnd.dreamfactory"], - ["dif", "video/x-dv"], - ["dir", "application/x-director"], - ["dis", "application/vnd.mobius.dis"], - ["djvu", "image/vnd.djvu"], - ["dl", ["video/dl", "video/x-dl"]], - ["dll", "application/x-msdownload"], - ["dms", "application/octet-stream"], - ["dna", "application/vnd.dna"], - ["doc", "application/msword"], - ["docm", "application/vnd.ms-word.document.macroenabled.12"], - ["docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"], - ["dot", "application/msword"], - ["dotm", "application/vnd.ms-word.template.macroenabled.12"], - ["dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"], - ["dp", ["application/commonground", "application/vnd.osgi.dp"]], - ["dpg", "application/vnd.dpgraph"], - ["dra", "audio/vnd.dra"], - ["drw", "application/drafting"], - ["dsc", "text/prs.lines.tag"], - ["dssc", "application/dssc+der"], - ["dtb", "application/x-dtbook+xml"], - ["dtd", "application/xml-dtd"], - ["dts", "audio/vnd.dts"], - ["dtshd", "audio/vnd.dts.hd"], - ["dump", "application/octet-stream"], - ["dv", "video/x-dv"], - ["dvi", "application/x-dvi"], - ["dwf", ["model/vnd.dwf", "drawing/x-dwf"]], - ["dwg", ["application/acad", "image/vnd.dwg", "image/x-dwg"]], - ["dxf", ["application/dxf", "image/vnd.dwg", "image/vnd.dxf", "image/x-dwg"]], - ["dxp", "application/vnd.spotfire.dxp"], - ["dxr", "application/x-director"], - ["ecelp4800", "audio/vnd.nuera.ecelp4800"], - ["ecelp7470", "audio/vnd.nuera.ecelp7470"], - ["ecelp9600", "audio/vnd.nuera.ecelp9600"], - ["edm", "application/vnd.novadigm.edm"], - ["edx", "application/vnd.novadigm.edx"], - ["efif", "application/vnd.picsel"], - ["ei6", "application/vnd.pg.osasli"], - ["el", "text/x-script.elisp"], - ["elc", ["application/x-elc", "application/x-bytecode.elisp"]], - ["eml", "message/rfc822"], - ["emma", "application/emma+xml"], - ["env", "application/x-envoy"], - ["eol", "audio/vnd.digital-winds"], - ["eot", "application/vnd.ms-fontobject"], - ["eps", "application/postscript"], - ["epub", "application/epub+zip"], - ["es", ["application/ecmascript", "application/x-esrehber"]], - ["es3", "application/vnd.eszigno3+xml"], - ["esf", "application/vnd.epson.esf"], - ["etx", "text/x-setext"], - ["evy", ["application/envoy", "application/x-envoy"]], - ["exe", ["application/octet-stream", "application/x-msdownload"]], - ["exi", "application/exi"], - ["ext", "application/vnd.novadigm.ext"], - ["ez2", "application/vnd.ezpix-album"], - ["ez3", "application/vnd.ezpix-package"], - ["f", ["text/plain", "text/x-fortran"]], - ["f4v", "video/x-f4v"], - ["f77", "text/x-fortran"], - ["f90", ["text/plain", "text/x-fortran"]], - ["fbs", "image/vnd.fastbidsheet"], - ["fcs", "application/vnd.isac.fcs"], - ["fdf", "application/vnd.fdf"], - ["fe_launch", "application/vnd.denovo.fcselayout-link"], - ["fg5", "application/vnd.fujitsu.oasysgp"], - ["fh", "image/x-freehand"], - ["fif", ["application/fractals", "image/fif"]], - ["fig", "application/x-xfig"], - ["fli", ["video/fli", "video/x-fli"]], - ["flo", ["image/florian", "application/vnd.micrografx.flo"]], - ["flr", "x-world/x-vrml"], - ["flv", "video/x-flv"], - ["flw", "application/vnd.kde.kivio"], - ["flx", "text/vnd.fmi.flexstor"], - ["fly", "text/vnd.fly"], - ["fm", "application/vnd.framemaker"], - ["fmf", "video/x-atomic3d-feature"], - ["fnc", "application/vnd.frogans.fnc"], - ["for", ["text/plain", "text/x-fortran"]], - ["fpx", ["image/vnd.fpx", "image/vnd.net-fpx"]], - ["frl", "application/freeloader"], - ["fsc", "application/vnd.fsc.weblaunch"], - ["fst", "image/vnd.fst"], - ["ftc", "application/vnd.fluxtime.clip"], - ["fti", "application/vnd.anser-web-funds-transfer-initiation"], - ["funk", "audio/make"], - ["fvt", "video/vnd.fvt"], - ["fxp", "application/vnd.adobe.fxp"], - ["fzs", "application/vnd.fuzzysheet"], - ["g", "text/plain"], - ["g2w", "application/vnd.geoplan"], - ["g3", "image/g3fax"], - ["g3w", "application/vnd.geospace"], - ["gac", "application/vnd.groove-account"], - ["gdl", "model/vnd.gdl"], - ["geo", "application/vnd.dynageo"], - ["gex", "application/vnd.geometry-explorer"], - ["ggb", "application/vnd.geogebra.file"], - ["ggt", "application/vnd.geogebra.tool"], - ["ghf", "application/vnd.groove-help"], - ["gif", "image/gif"], - ["gim", "application/vnd.groove-identity-message"], - ["gl", ["video/gl", "video/x-gl"]], - ["gmx", "application/vnd.gmx"], - ["gnumeric", "application/x-gnumeric"], - ["gph", "application/vnd.flographit"], - ["gqf", "application/vnd.grafeq"], - ["gram", "application/srgs"], - ["grv", "application/vnd.groove-injector"], - ["grxml", "application/srgs+xml"], - ["gsd", "audio/x-gsm"], - ["gsf", "application/x-font-ghostscript"], - ["gsm", "audio/x-gsm"], - ["gsp", "application/x-gsp"], - ["gss", "application/x-gss"], - ["gtar", "application/x-gtar"], - ["gtm", "application/vnd.groove-tool-message"], - ["gtw", "model/vnd.gtw"], - ["gv", "text/vnd.graphviz"], - ["gxt", "application/vnd.geonext"], - ["gz", ["application/x-gzip", "application/x-compressed"]], - ["gzip", ["multipart/x-gzip", "application/x-gzip"]], - ["h", ["text/plain", "text/x-h"]], - ["h261", "video/h261"], - ["h263", "video/h263"], - ["h264", "video/h264"], - ["hal", "application/vnd.hal+xml"], - ["hbci", "application/vnd.hbci"], - ["hdf", "application/x-hdf"], - ["help", "application/x-helpfile"], - ["hgl", "application/vnd.hp-hpgl"], - ["hh", ["text/plain", "text/x-h"]], - ["hlb", "text/x-script"], - ["hlp", ["application/winhlp", "application/hlp", "application/x-helpfile", "application/x-winhelp"]], - ["hpg", "application/vnd.hp-hpgl"], - ["hpgl", "application/vnd.hp-hpgl"], - ["hpid", "application/vnd.hp-hpid"], - ["hps", "application/vnd.hp-hps"], - [ - "hqx", - [ - "application/mac-binhex40", - "application/binhex", - "application/binhex4", - "application/mac-binhex", - "application/x-binhex40", - "application/x-mac-binhex40" - ] - ], - ["hta", "application/hta"], - ["htc", "text/x-component"], - ["htke", "application/vnd.kenameaapp"], - ["htm", "text/html"], - ["html", "text/html"], - ["htmls", "text/html"], - ["htt", "text/webviewhtml"], - ["htx", "text/html"], - ["hvd", "application/vnd.yamaha.hv-dic"], - ["hvp", "application/vnd.yamaha.hv-voice"], - ["hvs", "application/vnd.yamaha.hv-script"], - ["i2g", "application/vnd.intergeo"], - ["icc", "application/vnd.iccprofile"], - ["ice", "x-conference/x-cooltalk"], - ["ico", "image/x-icon"], - ["ics", "text/calendar"], - ["idc", "text/plain"], - ["ief", "image/ief"], - ["iefs", "image/ief"], - ["ifm", "application/vnd.shana.informed.formdata"], - ["iges", ["application/iges", "model/iges"]], - ["igl", "application/vnd.igloader"], - ["igm", "application/vnd.insors.igm"], - ["igs", ["application/iges", "model/iges"]], - ["igx", "application/vnd.micrografx.igx"], - ["iif", "application/vnd.shana.informed.interchange"], - ["iii", "application/x-iphone"], - ["ima", "application/x-ima"], - ["imap", "application/x-httpd-imap"], - ["imp", "application/vnd.accpac.simply.imp"], - ["ims", "application/vnd.ms-ims"], - ["inf", "application/inf"], - ["ins", ["application/x-internet-signup", "application/x-internett-signup"]], - ["ip", "application/x-ip2"], - ["ipfix", "application/ipfix"], - ["ipk", "application/vnd.shana.informed.package"], - ["irm", "application/vnd.ibm.rights-management"], - ["irp", "application/vnd.irepository.package+xml"], - ["isp", "application/x-internet-signup"], - ["isu", "video/x-isvideo"], - ["it", "audio/it"], - ["itp", "application/vnd.shana.informed.formtemplate"], - ["iv", "application/x-inventor"], - ["ivp", "application/vnd.immervision-ivp"], - ["ivr", "i-world/i-vrml"], - ["ivu", "application/vnd.immervision-ivu"], - ["ivy", "application/x-livescreen"], - ["jad", "text/vnd.sun.j2me.app-descriptor"], - ["jam", ["application/vnd.jam", "audio/x-jam"]], - ["jar", "application/java-archive"], - ["jav", ["text/plain", "text/x-java-source"]], - ["java", ["text/plain", "text/x-java-source,java", "text/x-java-source"]], - ["jcm", "application/x-java-commerce"], - ["jfif", ["image/pipeg", "image/jpeg", "image/pjpeg"]], - ["jfif-tbnl", "image/jpeg"], - ["jisp", "application/vnd.jisp"], - ["jlt", "application/vnd.hp-jlyt"], - ["jnlp", "application/x-java-jnlp-file"], - ["joda", "application/vnd.joost.joda-archive"], - ["jpe", ["image/jpeg", "image/pjpeg"]], - ["jpeg", ["image/jpeg", "image/pjpeg"]], - ["jpg", ["image/jpeg", "image/pjpeg"]], - ["jpgv", "video/jpeg"], - ["jpm", "video/jpm"], - ["jps", "image/x-jps"], - ["js", ["application/javascript", "application/ecmascript", "text/javascript", "text/ecmascript", "application/x-javascript"]], - ["json", "application/json"], - ["jut", "image/jutvision"], - ["kar", ["audio/midi", "music/x-karaoke"]], - ["karbon", "application/vnd.kde.karbon"], - ["kfo", "application/vnd.kde.kformula"], - ["kia", "application/vnd.kidspiration"], - ["kml", "application/vnd.google-earth.kml+xml"], - ["kmz", "application/vnd.google-earth.kmz"], - ["kne", "application/vnd.kinar"], - ["kon", "application/vnd.kde.kontour"], - ["kpr", "application/vnd.kde.kpresenter"], - ["ksh", ["application/x-ksh", "text/x-script.ksh"]], - ["ksp", "application/vnd.kde.kspread"], - ["ktx", "image/ktx"], - ["ktz", "application/vnd.kahootz"], - ["kwd", "application/vnd.kde.kword"], - ["la", ["audio/nspaudio", "audio/x-nspaudio"]], - ["lam", "audio/x-liveaudio"], - ["lasxml", "application/vnd.las.las+xml"], - ["latex", "application/x-latex"], - ["lbd", "application/vnd.llamagraphics.life-balance.desktop"], - ["lbe", "application/vnd.llamagraphics.life-balance.exchange+xml"], - ["les", "application/vnd.hhe.lesson-player"], - ["lha", ["application/octet-stream", "application/lha", "application/x-lha"]], - ["lhx", "application/octet-stream"], - ["link66", "application/vnd.route66.link66+xml"], - ["list", "text/plain"], - ["lma", ["audio/nspaudio", "audio/x-nspaudio"]], - ["log", "text/plain"], - ["lrm", "application/vnd.ms-lrm"], - ["lsf", "video/x-la-asf"], - ["lsp", ["application/x-lisp", "text/x-script.lisp"]], - ["lst", "text/plain"], - ["lsx", ["video/x-la-asf", "text/x-la-asf"]], - ["ltf", "application/vnd.frogans.ltf"], - ["ltx", "application/x-latex"], - ["lvp", "audio/vnd.lucent.voice"], - ["lwp", "application/vnd.lotus-wordpro"], - ["lzh", ["application/octet-stream", "application/x-lzh"]], - ["lzx", ["application/lzx", "application/octet-stream", "application/x-lzx"]], - ["m", ["text/plain", "text/x-m"]], - ["m13", "application/x-msmediaview"], - ["m14", "application/x-msmediaview"], - ["m1v", "video/mpeg"], - ["m21", "application/mp21"], - ["m2a", "audio/mpeg"], - ["m2v", "video/mpeg"], - ["m3u", ["audio/x-mpegurl", "audio/x-mpequrl"]], - ["m3u8", "application/vnd.apple.mpegurl"], - ["m4v", "video/x-m4v"], - ["ma", "application/mathematica"], - ["mads", "application/mads+xml"], - ["mag", "application/vnd.ecowin.chart"], - ["man", "application/x-troff-man"], - ["map", "application/x-navimap"], - ["mar", "text/plain"], - ["mathml", "application/mathml+xml"], - ["mbd", "application/mbedlet"], - ["mbk", "application/vnd.mobius.mbk"], - ["mbox", "application/mbox"], - ["mc$", "application/x-magic-cap-package-1.0"], - ["mc1", "application/vnd.medcalcdata"], - ["mcd", ["application/mcad", "application/vnd.mcd", "application/x-mathcad"]], - ["mcf", ["image/vasa", "text/mcf"]], - ["mcp", "application/netmc"], - ["mcurl", "text/vnd.curl.mcurl"], - ["mdb", "application/x-msaccess"], - ["mdi", "image/vnd.ms-modi"], - ["me", "application/x-troff-me"], - ["meta4", "application/metalink4+xml"], - ["mets", "application/mets+xml"], - ["mfm", "application/vnd.mfmp"], - ["mgp", "application/vnd.osgeo.mapguide.package"], - ["mgz", "application/vnd.proteus.magazine"], - ["mht", "message/rfc822"], - ["mhtml", "message/rfc822"], - ["mid", ["audio/mid", "audio/midi", "music/crescendo", "x-music/x-midi", "audio/x-midi", "application/x-midi", "audio/x-mid"]], - ["midi", ["audio/midi", "music/crescendo", "x-music/x-midi", "audio/x-midi", "application/x-midi", "audio/x-mid"]], - ["mif", ["application/vnd.mif", "application/x-mif", "application/x-frame"]], - ["mime", ["message/rfc822", "www/mime"]], - ["mj2", "video/mj2"], - ["mjf", "audio/x-vnd.audioexplosion.mjuicemediafile"], - ["mjpg", "video/x-motion-jpeg"], - ["mlp", "application/vnd.dolby.mlp"], - ["mm", ["application/base64", "application/x-meme"]], - ["mmd", "application/vnd.chipnuts.karaoke-mmd"], - ["mme", "application/base64"], - ["mmf", "application/vnd.smaf"], - ["mmr", "image/vnd.fujixerox.edmics-mmr"], - ["mny", "application/x-msmoney"], - ["mod", ["audio/mod", "audio/x-mod"]], - ["mods", "application/mods+xml"], - ["moov", "video/quicktime"], - ["mov", "video/quicktime"], - ["movie", "video/x-sgi-movie"], - ["mp2", ["video/mpeg", "audio/mpeg", "video/x-mpeg", "audio/x-mpeg", "video/x-mpeq2a"]], - ["mp3", ["audio/mpeg", "audio/mpeg3", "video/mpeg", "audio/x-mpeg-3", "video/x-mpeg"]], - ["mp4", ["video/mp4", "application/mp4"]], - ["mp4a", "audio/mp4"], - ["mpa", ["video/mpeg", "audio/mpeg"]], - ["mpc", ["application/vnd.mophun.certificate", "application/x-project"]], - ["mpe", "video/mpeg"], - ["mpeg", "video/mpeg"], - ["mpg", ["video/mpeg", "audio/mpeg"]], - ["mpga", "audio/mpeg"], - ["mpkg", "application/vnd.apple.installer+xml"], - ["mpm", "application/vnd.blueice.multipass"], - ["mpn", "application/vnd.mophun.application"], - ["mpp", "application/vnd.ms-project"], - ["mpt", "application/x-project"], - ["mpv", "application/x-project"], - ["mpv2", "video/mpeg"], - ["mpx", "application/x-project"], - ["mpy", "application/vnd.ibm.minipay"], - ["mqy", "application/vnd.mobius.mqy"], - ["mrc", "application/marc"], - ["mrcx", "application/marcxml+xml"], - ["ms", "application/x-troff-ms"], - ["mscml", "application/mediaservercontrol+xml"], - ["mseq", "application/vnd.mseq"], - ["msf", "application/vnd.epson.msf"], - ["msg", "application/vnd.ms-outlook"], - ["msh", "model/mesh"], - ["msl", "application/vnd.mobius.msl"], - ["msty", "application/vnd.muvee.style"], - ["mts", "model/vnd.mts"], - ["mus", "application/vnd.musician"], - ["musicxml", "application/vnd.recordare.musicxml+xml"], - ["mv", "video/x-sgi-movie"], - ["mvb", "application/x-msmediaview"], - ["mwf", "application/vnd.mfer"], - ["mxf", "application/mxf"], - ["mxl", "application/vnd.recordare.musicxml"], - ["mxml", "application/xv+xml"], - ["mxs", "application/vnd.triscape.mxs"], - ["mxu", "video/vnd.mpegurl"], - ["my", "audio/make"], - ["mzz", "application/x-vnd.audioexplosion.mzz"], - ["n-gage", "application/vnd.nokia.n-gage.symbian.install"], - ["n3", "text/n3"], - ["nap", "image/naplps"], - ["naplps", "image/naplps"], - ["nbp", "application/vnd.wolfram.player"], - ["nc", "application/x-netcdf"], - ["ncm", "application/vnd.nokia.configuration-message"], - ["ncx", "application/x-dtbncx+xml"], - ["ngdat", "application/vnd.nokia.n-gage.data"], - ["nif", "image/x-niff"], - ["niff", "image/x-niff"], - ["nix", "application/x-mix-transfer"], - ["nlu", "application/vnd.neurolanguage.nlu"], - ["nml", "application/vnd.enliven"], - ["nnd", "application/vnd.noblenet-directory"], - ["nns", "application/vnd.noblenet-sealer"], - ["nnw", "application/vnd.noblenet-web"], - ["npx", "image/vnd.net-fpx"], - ["nsc", "application/x-conference"], - ["nsf", "application/vnd.lotus-notes"], - ["nvd", "application/x-navidoc"], - ["nws", "message/rfc822"], - ["o", "application/octet-stream"], - ["oa2", "application/vnd.fujitsu.oasys2"], - ["oa3", "application/vnd.fujitsu.oasys3"], - ["oas", "application/vnd.fujitsu.oasys"], - ["obd", "application/x-msbinder"], - ["oda", "application/oda"], - ["odb", "application/vnd.oasis.opendocument.database"], - ["odc", "application/vnd.oasis.opendocument.chart"], - ["odf", "application/vnd.oasis.opendocument.formula"], - ["odft", "application/vnd.oasis.opendocument.formula-template"], - ["odg", "application/vnd.oasis.opendocument.graphics"], - ["odi", "application/vnd.oasis.opendocument.image"], - ["odm", "application/vnd.oasis.opendocument.text-master"], - ["odp", "application/vnd.oasis.opendocument.presentation"], - ["ods", "application/vnd.oasis.opendocument.spreadsheet"], - ["odt", "application/vnd.oasis.opendocument.text"], - ["oga", "audio/ogg"], - ["ogv", "video/ogg"], - ["ogx", "application/ogg"], - ["omc", "application/x-omc"], - ["omcd", "application/x-omcdatamaker"], - ["omcr", "application/x-omcregerator"], - ["onetoc", "application/onenote"], - ["opf", "application/oebps-package+xml"], - ["org", "application/vnd.lotus-organizer"], - ["osf", "application/vnd.yamaha.openscoreformat"], - ["osfpvg", "application/vnd.yamaha.openscoreformat.osfpvg+xml"], - ["otc", "application/vnd.oasis.opendocument.chart-template"], - ["otf", "application/x-font-otf"], - ["otg", "application/vnd.oasis.opendocument.graphics-template"], - ["oth", "application/vnd.oasis.opendocument.text-web"], - ["oti", "application/vnd.oasis.opendocument.image-template"], - ["otp", "application/vnd.oasis.opendocument.presentation-template"], - ["ots", "application/vnd.oasis.opendocument.spreadsheet-template"], - ["ott", "application/vnd.oasis.opendocument.text-template"], - ["oxt", "application/vnd.openofficeorg.extension"], - ["p", "text/x-pascal"], - ["p10", ["application/pkcs10", "application/x-pkcs10"]], - ["p12", ["application/pkcs-12", "application/x-pkcs12"]], - ["p7a", "application/x-pkcs7-signature"], - ["p7b", "application/x-pkcs7-certificates"], - ["p7c", ["application/pkcs7-mime", "application/x-pkcs7-mime"]], - ["p7m", ["application/pkcs7-mime", "application/x-pkcs7-mime"]], - ["p7r", "application/x-pkcs7-certreqresp"], - ["p7s", ["application/pkcs7-signature", "application/x-pkcs7-signature"]], - ["p8", "application/pkcs8"], - ["par", "text/plain-bas"], - ["part", "application/pro_eng"], - ["pas", "text/pascal"], - ["paw", "application/vnd.pawaafile"], - ["pbd", "application/vnd.powerbuilder6"], - ["pbm", "image/x-portable-bitmap"], - ["pcf", "application/x-font-pcf"], - ["pcl", ["application/vnd.hp-pcl", "application/x-pcl"]], - ["pclxl", "application/vnd.hp-pclxl"], - ["pct", "image/x-pict"], - ["pcurl", "application/vnd.curl.pcurl"], - ["pcx", "image/x-pcx"], - ["pdb", ["application/vnd.palm", "chemical/x-pdb"]], - ["pdf", "application/pdf"], - ["pfa", "application/x-font-type1"], - ["pfr", "application/font-tdpfr"], - ["pfunk", ["audio/make", "audio/make.my.funk"]], - ["pfx", "application/x-pkcs12"], - ["pgm", ["image/x-portable-graymap", "image/x-portable-greymap"]], - ["pgn", "application/x-chess-pgn"], - ["pgp", "application/pgp-signature"], - ["pic", ["image/pict", "image/x-pict"]], - ["pict", "image/pict"], - ["pkg", "application/x-newton-compatible-pkg"], - ["pki", "application/pkixcmp"], - ["pkipath", "application/pkix-pkipath"], - ["pko", ["application/ynd.ms-pkipko", "application/vnd.ms-pki.pko"]], - ["pl", ["text/plain", "text/x-script.perl"]], - ["plb", "application/vnd.3gpp.pic-bw-large"], - ["plc", "application/vnd.mobius.plc"], - ["plf", "application/vnd.pocketlearn"], - ["pls", "application/pls+xml"], - ["plx", "application/x-pixclscript"], - ["pm", ["text/x-script.perl-module", "image/x-xpixmap"]], - ["pm4", "application/x-pagemaker"], - ["pm5", "application/x-pagemaker"], - ["pma", "application/x-perfmon"], - ["pmc", "application/x-perfmon"], - ["pml", ["application/vnd.ctc-posml", "application/x-perfmon"]], - ["pmr", "application/x-perfmon"], - ["pmw", "application/x-perfmon"], - ["png", "image/png"], - ["pnm", ["application/x-portable-anymap", "image/x-portable-anymap"]], - ["portpkg", "application/vnd.macports.portpkg"], - ["pot", ["application/vnd.ms-powerpoint", "application/mspowerpoint"]], - ["potm", "application/vnd.ms-powerpoint.template.macroenabled.12"], - ["potx", "application/vnd.openxmlformats-officedocument.presentationml.template"], - ["pov", "model/x-pov"], - ["ppa", "application/vnd.ms-powerpoint"], - ["ppam", "application/vnd.ms-powerpoint.addin.macroenabled.12"], - ["ppd", "application/vnd.cups-ppd"], - ["ppm", "image/x-portable-pixmap"], - ["pps", ["application/vnd.ms-powerpoint", "application/mspowerpoint"]], - ["ppsm", "application/vnd.ms-powerpoint.slideshow.macroenabled.12"], - ["ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"], - ["ppt", ["application/vnd.ms-powerpoint", "application/mspowerpoint", "application/powerpoint", "application/x-mspowerpoint"]], - ["pptm", "application/vnd.ms-powerpoint.presentation.macroenabled.12"], - ["pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"], - ["ppz", "application/mspowerpoint"], - ["prc", "application/x-mobipocket-ebook"], - ["pre", ["application/vnd.lotus-freelance", "application/x-freelance"]], - ["prf", "application/pics-rules"], - ["prt", "application/pro_eng"], - ["ps", "application/postscript"], - ["psb", "application/vnd.3gpp.pic-bw-small"], - ["psd", ["application/octet-stream", "image/vnd.adobe.photoshop"]], - ["psf", "application/x-font-linux-psf"], - ["pskcxml", "application/pskc+xml"], - ["ptid", "application/vnd.pvi.ptid1"], - ["pub", "application/x-mspublisher"], - ["pvb", "application/vnd.3gpp.pic-bw-var"], - ["pvu", "paleovu/x-pv"], - ["pwn", "application/vnd.3m.post-it-notes"], - ["pwz", "application/vnd.ms-powerpoint"], - ["py", "text/x-script.phyton"], - ["pya", "audio/vnd.ms-playready.media.pya"], - ["pyc", "application/x-bytecode.python"], - ["pyv", "video/vnd.ms-playready.media.pyv"], - ["qam", "application/vnd.epson.quickanime"], - ["qbo", "application/vnd.intu.qbo"], - ["qcp", "audio/vnd.qcelp"], - ["qd3", "x-world/x-3dmf"], - ["qd3d", "x-world/x-3dmf"], - ["qfx", "application/vnd.intu.qfx"], - ["qif", "image/x-quicktime"], - ["qps", "application/vnd.publishare-delta-tree"], - ["qt", "video/quicktime"], - ["qtc", "video/x-qtc"], - ["qti", "image/x-quicktime"], - ["qtif", "image/x-quicktime"], - ["qxd", "application/vnd.quark.quarkxpress"], - ["ra", ["audio/x-realaudio", "audio/x-pn-realaudio", "audio/x-pn-realaudio-plugin"]], - ["ram", "audio/x-pn-realaudio"], - ["rar", "application/x-rar-compressed"], - ["ras", ["image/cmu-raster", "application/x-cmu-raster", "image/x-cmu-raster"]], - ["rast", "image/cmu-raster"], - ["rcprofile", "application/vnd.ipunplugged.rcprofile"], - ["rdf", "application/rdf+xml"], - ["rdz", "application/vnd.data-vision.rdz"], - ["rep", "application/vnd.businessobjects"], - ["res", "application/x-dtbresource+xml"], - ["rexx", "text/x-script.rexx"], - ["rf", "image/vnd.rn-realflash"], - ["rgb", "image/x-rgb"], - ["rif", "application/reginfo+xml"], - ["rip", "audio/vnd.rip"], - ["rl", "application/resource-lists+xml"], - ["rlc", "image/vnd.fujixerox.edmics-rlc"], - ["rld", "application/resource-lists-diff+xml"], - ["rm", ["application/vnd.rn-realmedia", "audio/x-pn-realaudio"]], - ["rmi", "audio/mid"], - ["rmm", "audio/x-pn-realaudio"], - ["rmp", ["audio/x-pn-realaudio-plugin", "audio/x-pn-realaudio"]], - ["rms", "application/vnd.jcp.javame.midlet-rms"], - ["rnc", "application/relax-ng-compact-syntax"], - ["rng", ["application/ringing-tones", "application/vnd.nokia.ringing-tone"]], - ["rnx", "application/vnd.rn-realplayer"], - ["roff", "application/x-troff"], - ["rp", "image/vnd.rn-realpix"], - ["rp9", "application/vnd.cloanto.rp9"], - ["rpm", "audio/x-pn-realaudio-plugin"], - ["rpss", "application/vnd.nokia.radio-presets"], - ["rpst", "application/vnd.nokia.radio-preset"], - ["rq", "application/sparql-query"], - ["rs", "application/rls-services+xml"], - ["rsd", "application/rsd+xml"], - ["rt", ["text/richtext", "text/vnd.rn-realtext"]], - ["rtf", ["application/rtf", "text/richtext", "application/x-rtf"]], - ["rtx", ["text/richtext", "application/rtf"]], - ["rv", "video/vnd.rn-realvideo"], - ["s", "text/x-asm"], - ["s3m", "audio/s3m"], - ["saf", "application/vnd.yamaha.smaf-audio"], - ["saveme", "application/octet-stream"], - ["sbk", "application/x-tbook"], - ["sbml", "application/sbml+xml"], - ["sc", "application/vnd.ibm.secure-container"], - ["scd", "application/x-msschedule"], - ["scm", ["application/vnd.lotus-screencam", "video/x-scm", "text/x-script.guile", "application/x-lotusscreencam", "text/x-script.scheme"]], - ["scq", "application/scvp-cv-request"], - ["scs", "application/scvp-cv-response"], - ["sct", "text/scriptlet"], - ["scurl", "text/vnd.curl.scurl"], - ["sda", "application/vnd.stardivision.draw"], - ["sdc", "application/vnd.stardivision.calc"], - ["sdd", "application/vnd.stardivision.impress"], - ["sdkm", "application/vnd.solent.sdkm+xml"], - ["sdml", "text/plain"], - ["sdp", ["application/sdp", "application/x-sdp"]], - ["sdr", "application/sounder"], - ["sdw", "application/vnd.stardivision.writer"], - ["sea", ["application/sea", "application/x-sea"]], - ["see", "application/vnd.seemail"], - ["seed", "application/vnd.fdsn.seed"], - ["sema", "application/vnd.sema"], - ["semd", "application/vnd.semd"], - ["semf", "application/vnd.semf"], - ["ser", "application/java-serialized-object"], - ["set", "application/set"], - ["setpay", "application/set-payment-initiation"], - ["setreg", "application/set-registration-initiation"], - ["sfd-hdstx", "application/vnd.hydrostatix.sof-data"], - ["sfs", "application/vnd.spotfire.sfs"], - ["sgl", "application/vnd.stardivision.writer-global"], - ["sgm", ["text/sgml", "text/x-sgml"]], - ["sgml", ["text/sgml", "text/x-sgml"]], - ["sh", ["application/x-shar", "application/x-bsh", "application/x-sh", "text/x-script.sh"]], - ["shar", ["application/x-bsh", "application/x-shar"]], - ["shf", "application/shf+xml"], - ["shtml", ["text/html", "text/x-server-parsed-html"]], - ["sid", "audio/x-psid"], - ["sis", "application/vnd.symbian.install"], - ["sit", ["application/x-stuffit", "application/x-sit"]], - ["sitx", "application/x-stuffitx"], - ["skd", "application/x-koan"], - ["skm", "application/x-koan"], - ["skp", ["application/vnd.koan", "application/x-koan"]], - ["skt", "application/x-koan"], - ["sl", "application/x-seelogo"], - ["sldm", "application/vnd.ms-powerpoint.slide.macroenabled.12"], - ["sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"], - ["slt", "application/vnd.epson.salt"], - ["sm", "application/vnd.stepmania.stepchart"], - ["smf", "application/vnd.stardivision.math"], - ["smi", ["application/smil", "application/smil+xml"]], - ["smil", "application/smil"], - ["snd", ["audio/basic", "audio/x-adpcm"]], - ["snf", "application/x-font-snf"], - ["sol", "application/solids"], - ["spc", ["text/x-speech", "application/x-pkcs7-certificates"]], - ["spf", "application/vnd.yamaha.smaf-phrase"], - ["spl", ["application/futuresplash", "application/x-futuresplash"]], - ["spot", "text/vnd.in3d.spot"], - ["spp", "application/scvp-vp-response"], - ["spq", "application/scvp-vp-request"], - ["spr", "application/x-sprite"], - ["sprite", "application/x-sprite"], - ["src", "application/x-wais-source"], - ["sru", "application/sru+xml"], - ["srx", "application/sparql-results+xml"], - ["sse", "application/vnd.kodak-descriptor"], - ["ssf", "application/vnd.epson.ssf"], - ["ssi", "text/x-server-parsed-html"], - ["ssm", "application/streamingmedia"], - ["ssml", "application/ssml+xml"], - ["sst", ["application/vnd.ms-pkicertstore", "application/vnd.ms-pki.certstore"]], - ["st", "application/vnd.sailingtracker.track"], - ["stc", "application/vnd.sun.xml.calc.template"], - ["std", "application/vnd.sun.xml.draw.template"], - ["step", "application/step"], - ["stf", "application/vnd.wt.stf"], - ["sti", "application/vnd.sun.xml.impress.template"], - ["stk", "application/hyperstudio"], - ["stl", ["application/vnd.ms-pkistl", "application/sla", "application/vnd.ms-pki.stl", "application/x-navistyle"]], - ["stm", "text/html"], - ["stp", "application/step"], - ["str", "application/vnd.pg.format"], - ["stw", "application/vnd.sun.xml.writer.template"], - ["sub", "image/vnd.dvb.subtitle"], - ["sus", "application/vnd.sus-calendar"], - ["sv4cpio", "application/x-sv4cpio"], - ["sv4crc", "application/x-sv4crc"], - ["svc", "application/vnd.dvb.service"], - ["svd", "application/vnd.svd"], - ["svf", ["image/vnd.dwg", "image/x-dwg"]], - ["svg", "image/svg+xml"], - ["svr", ["x-world/x-svr", "application/x-world"]], - ["swf", "application/x-shockwave-flash"], - ["swi", "application/vnd.aristanetworks.swi"], - ["sxc", "application/vnd.sun.xml.calc"], - ["sxd", "application/vnd.sun.xml.draw"], - ["sxg", "application/vnd.sun.xml.writer.global"], - ["sxi", "application/vnd.sun.xml.impress"], - ["sxm", "application/vnd.sun.xml.math"], - ["sxw", "application/vnd.sun.xml.writer"], - ["t", ["text/troff", "application/x-troff"]], - ["talk", "text/x-speech"], - ["tao", "application/vnd.tao.intent-module-archive"], - ["tar", "application/x-tar"], - ["tbk", ["application/toolbook", "application/x-tbook"]], - ["tcap", "application/vnd.3gpp2.tcap"], - ["tcl", ["text/x-script.tcl", "application/x-tcl"]], - ["tcsh", "text/x-script.tcsh"], - ["teacher", "application/vnd.smart.teacher"], - ["tei", "application/tei+xml"], - ["tex", "application/x-tex"], - ["texi", "application/x-texinfo"], - ["texinfo", "application/x-texinfo"], - ["text", ["application/plain", "text/plain"]], - ["tfi", "application/thraud+xml"], - ["tfm", "application/x-tex-tfm"], - ["tgz", ["application/gnutar", "application/x-compressed"]], - ["thmx", "application/vnd.ms-officetheme"], - ["tif", ["image/tiff", "image/x-tiff"]], - ["tiff", ["image/tiff", "image/x-tiff"]], - ["tmo", "application/vnd.tmobile-livetv"], - ["torrent", "application/x-bittorrent"], - ["tpl", "application/vnd.groove-tool-template"], - ["tpt", "application/vnd.trid.tpt"], - ["tr", "application/x-troff"], - ["tra", "application/vnd.trueapp"], - ["trm", "application/x-msterminal"], - ["tsd", "application/timestamped-data"], - ["tsi", "audio/tsp-audio"], - ["tsp", ["application/dsptype", "audio/tsplayer"]], - ["tsv", "text/tab-separated-values"], - ["ttf", "application/x-font-ttf"], - ["ttl", "text/turtle"], - ["turbot", "image/florian"], - ["twd", "application/vnd.simtech-mindmapper"], - ["txd", "application/vnd.genomatix.tuxedo"], - ["txf", "application/vnd.mobius.txf"], - ["txt", "text/plain"], - ["ufd", "application/vnd.ufdl"], - ["uil", "text/x-uil"], - ["uls", "text/iuls"], - ["umj", "application/vnd.umajin"], - ["uni", "text/uri-list"], - ["unis", "text/uri-list"], - ["unityweb", "application/vnd.unity"], - ["unv", "application/i-deas"], - ["uoml", "application/vnd.uoml+xml"], - ["uri", "text/uri-list"], - ["uris", "text/uri-list"], - ["ustar", ["application/x-ustar", "multipart/x-ustar"]], - ["utz", "application/vnd.uiq.theme"], - ["uu", ["application/octet-stream", "text/x-uuencode"]], - ["uue", "text/x-uuencode"], - ["uva", "audio/vnd.dece.audio"], - ["uvh", "video/vnd.dece.hd"], - ["uvi", "image/vnd.dece.graphic"], - ["uvm", "video/vnd.dece.mobile"], - ["uvp", "video/vnd.dece.pd"], - ["uvs", "video/vnd.dece.sd"], - ["uvu", "video/vnd.uvvu.mp4"], - ["uvv", "video/vnd.dece.video"], - ["vcd", "application/x-cdlink"], - ["vcf", "text/x-vcard"], - ["vcg", "application/vnd.groove-vcard"], - ["vcs", "text/x-vcalendar"], - ["vcx", "application/vnd.vcx"], - ["vda", "application/vda"], - ["vdo", "video/vdo"], - ["vew", "application/groupwise"], - ["vis", "application/vnd.visionary"], - ["viv", ["video/vivo", "video/vnd.vivo"]], - ["vivo", ["video/vivo", "video/vnd.vivo"]], - ["vmd", "application/vocaltec-media-desc"], - ["vmf", "application/vocaltec-media-file"], - ["voc", ["audio/voc", "audio/x-voc"]], - ["vos", "video/vosaic"], - ["vox", "audio/voxware"], - ["vqe", "audio/x-twinvq-plugin"], - ["vqf", "audio/x-twinvq"], - ["vql", "audio/x-twinvq-plugin"], - ["vrml", ["model/vrml", "x-world/x-vrml", "application/x-vrml"]], - ["vrt", "x-world/x-vrt"], - ["vsd", ["application/vnd.visio", "application/x-visio"]], - ["vsf", "application/vnd.vsf"], - ["vst", "application/x-visio"], - ["vsw", "application/x-visio"], - ["vtu", "model/vnd.vtu"], - ["vxml", "application/voicexml+xml"], - ["w60", "application/wordperfect6.0"], - ["w61", "application/wordperfect6.1"], - ["w6w", "application/msword"], - ["wad", "application/x-doom"], - ["wav", ["audio/wav", "audio/x-wav"]], - ["wax", "audio/x-ms-wax"], - ["wb1", "application/x-qpro"], - ["wbmp", "image/vnd.wap.wbmp"], - ["wbs", "application/vnd.criticaltools.wbs+xml"], - ["wbxml", "application/vnd.wap.wbxml"], - ["wcm", "application/vnd.ms-works"], - ["wdb", "application/vnd.ms-works"], - ["web", "application/vnd.xara"], - ["weba", "audio/webm"], - ["webm", "video/webm"], - ["webp", "image/webp"], - ["wg", "application/vnd.pmi.widget"], - ["wgt", "application/widget"], - ["wiz", "application/msword"], - ["wk1", "application/x-123"], - ["wks", "application/vnd.ms-works"], - ["wm", "video/x-ms-wm"], - ["wma", "audio/x-ms-wma"], - ["wmd", "application/x-ms-wmd"], - ["wmf", ["windows/metafile", "application/x-msmetafile"]], - ["wml", "text/vnd.wap.wml"], - ["wmlc", "application/vnd.wap.wmlc"], - ["wmls", "text/vnd.wap.wmlscript"], - ["wmlsc", "application/vnd.wap.wmlscriptc"], - ["wmv", "video/x-ms-wmv"], - ["wmx", "video/x-ms-wmx"], - ["wmz", "application/x-ms-wmz"], - ["woff", "application/x-font-woff"], - ["word", "application/msword"], - ["wp", "application/wordperfect"], - ["wp5", ["application/wordperfect", "application/wordperfect6.0"]], - ["wp6", "application/wordperfect"], - ["wpd", ["application/wordperfect", "application/vnd.wordperfect", "application/x-wpwin"]], - ["wpl", "application/vnd.ms-wpl"], - ["wps", "application/vnd.ms-works"], - ["wq1", "application/x-lotus"], - ["wqd", "application/vnd.wqd"], - ["wri", ["application/mswrite", "application/x-wri", "application/x-mswrite"]], - ["wrl", ["model/vrml", "x-world/x-vrml", "application/x-world"]], - ["wrz", ["model/vrml", "x-world/x-vrml"]], - ["wsc", "text/scriplet"], - ["wsdl", "application/wsdl+xml"], - ["wspolicy", "application/wspolicy+xml"], - ["wsrc", "application/x-wais-source"], - ["wtb", "application/vnd.webturbo"], - ["wtk", "application/x-wintalk"], - ["wvx", "video/x-ms-wvx"], - ["x-png", "image/png"], - ["x3d", "application/vnd.hzn-3d-crossword"], - ["xaf", "x-world/x-vrml"], - ["xap", "application/x-silverlight-app"], - ["xar", "application/vnd.xara"], - ["xbap", "application/x-ms-xbap"], - ["xbd", "application/vnd.fujixerox.docuworks.binder"], - ["xbm", ["image/xbm", "image/x-xbm", "image/x-xbitmap"]], - ["xdf", "application/xcap-diff+xml"], - ["xdm", "application/vnd.syncml.dm+xml"], - ["xdp", "application/vnd.adobe.xdp+xml"], - ["xdr", "video/x-amt-demorun"], - ["xdssc", "application/dssc+xml"], - ["xdw", "application/vnd.fujixerox.docuworks"], - ["xenc", "application/xenc+xml"], - ["xer", "application/patch-ops-error+xml"], - ["xfdf", "application/vnd.adobe.xfdf"], - ["xfdl", "application/vnd.xfdl"], - ["xgz", "xgl/drawing"], - ["xhtml", "application/xhtml+xml"], - ["xif", "image/vnd.xiff"], - ["xl", "application/excel"], - ["xla", ["application/vnd.ms-excel", "application/excel", "application/x-msexcel", "application/x-excel"]], - ["xlam", "application/vnd.ms-excel.addin.macroenabled.12"], - ["xlb", ["application/excel", "application/vnd.ms-excel", "application/x-excel"]], - ["xlc", ["application/vnd.ms-excel", "application/excel", "application/x-excel"]], - ["xld", ["application/excel", "application/x-excel"]], - ["xlk", ["application/excel", "application/x-excel"]], - ["xll", ["application/excel", "application/vnd.ms-excel", "application/x-excel"]], - ["xlm", ["application/vnd.ms-excel", "application/excel", "application/x-excel"]], - ["xls", ["application/vnd.ms-excel", "application/excel", "application/x-msexcel", "application/x-excel"]], - ["xlsb", "application/vnd.ms-excel.sheet.binary.macroenabled.12"], - ["xlsm", "application/vnd.ms-excel.sheet.macroenabled.12"], - ["xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"], - ["xlt", ["application/vnd.ms-excel", "application/excel", "application/x-excel"]], - ["xltm", "application/vnd.ms-excel.template.macroenabled.12"], - ["xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"], - ["xlv", ["application/excel", "application/x-excel"]], - ["xlw", ["application/vnd.ms-excel", "application/excel", "application/x-msexcel", "application/x-excel"]], - ["xm", "audio/xm"], - ["xml", ["application/xml", "text/xml", "application/atom+xml", "application/rss+xml"]], - ["xmz", "xgl/movie"], - ["xo", "application/vnd.olpc-sugar"], - ["xof", "x-world/x-vrml"], - ["xop", "application/xop+xml"], - ["xpi", "application/x-xpinstall"], - ["xpix", "application/x-vnd.ls-xpix"], - ["xpm", ["image/xpm", "image/x-xpixmap"]], - ["xpr", "application/vnd.is-xpr"], - ["xps", "application/vnd.ms-xpsdocument"], - ["xpw", "application/vnd.intercon.formnet"], - ["xslt", "application/xslt+xml"], - ["xsm", "application/vnd.syncml+xml"], - ["xspf", "application/xspf+xml"], - ["xsr", "video/x-amt-showrun"], - ["xul", "application/vnd.mozilla.xul+xml"], - ["xwd", ["image/x-xwd", "image/x-xwindowdump"]], - ["xyz", ["chemical/x-xyz", "chemical/x-pdb"]], - ["yang", "application/yang"], - ["yin", "application/yin+xml"], - ["z", ["application/x-compressed", "application/x-compress"]], - ["zaz", "application/vnd.zzazz.deck+xml"], - ["zip", ["application/zip", "multipart/x-zip", "application/x-zip-compressed", "application/x-compressed"]], - ["zir", "application/vnd.zul"], - ["zmm", "application/vnd.handheld-entertainment+xml"], - ["zoo", "application/octet-stream"], - ["zsh", "text/x-script.zsh"] - ]); - module.exports = { - detectMimeType(filename) { - if (!filename) { - return defaultMimeType; - } - let parsed = path11.parse(filename); - let extension = (parsed.ext.substr(1) || parsed.name || "").split("?").shift().trim().toLowerCase(); - let value = defaultMimeType; - if (extensions.has(extension)) { - value = extensions.get(extension); - } - if (Array.isArray(value)) { - return value[0]; - } - return value; - }, - detectExtension(mimeType) { - if (!mimeType) { - return defaultExtension; - } - let parts = (mimeType || "").toLowerCase().trim().split("/"); - let rootType = parts.shift().trim(); - let subType = parts.join("/").trim(); - if (mimeTypes.has(rootType + "/" + subType)) { - let value = mimeTypes.get(rootType + "/" + subType); - if (Array.isArray(value)) { - return value[0]; - } - return value; - } - switch (rootType) { - case "text": - return "txt"; - default: - return "bin"; - } - } - }; -}); - -// node_modules/nodemailer/lib/punycode/index.js -var require_punycode = __commonJS((exports, module) => { - var maxInt = 2147483647; - var base = 36; - var tMin = 1; - var tMax = 26; - var skew = 38; - var damp = 700; - var initialBias = 72; - var initialN = 128; - var delimiter = "-"; - var regexPunycode = /^xn--/; - var regexNonASCII = /[^\0-\x7F]/; - var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; - var errors = { - overflow: "Overflow: input needs wider integers to process", - "not-basic": "Illegal input >= 0x80 (not a basic code point)", - "invalid-input": "Invalid input" - }; - var baseMinusTMin = base - tMin; - var floor = Math.floor; - var stringFromCharCode = String.fromCharCode; - function error(type) { - throw new RangeError(errors[type]); - } - function map(array, callback) { - const result = []; - let length = array.length; - while (length--) { - result[length] = callback(array[length]); - } - return result; - } - function mapDomain(domain, callback) { - const parts = domain.split("@"); - let result = ""; - if (parts.length > 1) { - result = parts[0] + "@"; - domain = parts[1]; - } - domain = domain.replace(regexSeparators, "."); - const labels = domain.split("."); - const encoded = map(labels, callback).join("."); - return result + encoded; - } - function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 55296 && value <= 56319 && counter < length) { - const extra = string.charCodeAt(counter++); - if ((extra & 64512) == 56320) { - output.push(((value & 1023) << 10) + (extra & 1023) + 65536); - } else { - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - var ucs2encode = (codePoints) => String.fromCodePoint(...codePoints); - var basicToDigit = function(codePoint) { - if (codePoint >= 48 && codePoint < 58) { - return 26 + (codePoint - 48); - } - if (codePoint >= 65 && codePoint < 91) { - return codePoint - 65; - } - if (codePoint >= 97 && codePoint < 123) { - return codePoint - 97; - } - return base; - }; - var digitToBasic = function(digit, flag) { - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - }; - var adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (;delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - }; - var decode = function(input) { - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - for (let j = 0;j < basic; ++j) { - if (input.charCodeAt(j) >= 128) { - error("not-basic"); - } - output.push(input.charCodeAt(j)); - } - for (let index = basic > 0 ? basic + 1 : 0;index < inputLength; ) { - const oldi = i; - for (let w = 1, k = base;; k += base) { - if (index >= inputLength) { - error("invalid-input"); - } - const digit = basicToDigit(input.charCodeAt(index++)); - if (digit >= base) { - error("invalid-input"); - } - if (digit > floor((maxInt - i) / w)) { - error("overflow"); - } - i += digit * w; - const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - if (digit < t) { - break; - } - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error("overflow"); - } - w *= baseMinusT; - } - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - if (floor(i / out) > maxInt - n) { - error("overflow"); - } - n += floor(i / out); - i %= out; - output.splice(i++, 0, n); - } - return String.fromCodePoint(...output); - }; - var encode = function(input) { - const output = []; - input = ucs2decode(input); - const inputLength = input.length; - let n = initialN; - let delta = 0; - let bias = initialBias; - for (const currentValue of input) { - if (currentValue < 128) { - output.push(stringFromCharCode(currentValue)); - } - } - const basicLength = output.length; - let handledCPCount = basicLength; - if (basicLength) { - output.push(delimiter); - } - while (handledCPCount < inputLength) { - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error("overflow"); - } - delta += (m - n) * handledCPCountPlusOne; - n = m; - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error("overflow"); - } - if (currentValue === n) { - let q = delta; - for (let k = base;; k += base) { - const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); - q = floor(qMinusT / baseMinusT); - } - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); - delta = 0; - ++handledCPCount; - } - } - ++delta; - ++n; - } - return output.join(""); - }; - var toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; - }); - }; - var toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) ? "xn--" + encode(string) : string; - }); - }; - var punycode = { - version: "2.3.1", - ucs2: { - decode: ucs2decode, - encode: ucs2encode - }, - decode, - encode, - toASCII, - toUnicode - }; - module.exports = punycode; -}); - -// node_modules/nodemailer/lib/base64/index.js -var require_base642 = __commonJS((exports, module) => { - var Transform = __require("stream").Transform; - function encode(buffer) { - if (typeof buffer === "string") { - buffer = Buffer.from(buffer, "utf-8"); - } - return buffer.toString("base64"); - } - function wrap(str, lineLength) { - str = (str || "").toString(); - lineLength = lineLength || 76; - if (str.length <= lineLength) { - return str; - } - let result = []; - let pos = 0; - let chunkLength = lineLength * 1024; - while (pos < str.length) { - let wrappedLines = str.substr(pos, chunkLength).replace(new RegExp(".{" + lineLength + "}", "g"), "$&\r\n").trim(); - result.push(wrappedLines); - pos += chunkLength; - } - return result.join("\r\n").trim(); - } - - class Encoder extends Transform { - constructor(options) { - super(); - this.options = options || {}; - if (this.options.lineLength !== false) { - this.options.lineLength = this.options.lineLength || 76; - } - this._curLine = ""; - this._remainingBytes = false; - this.inputBytes = 0; - this.outputBytes = 0; - } - _transform(chunk, encoding, done) { - if (encoding !== "buffer") { - chunk = Buffer.from(chunk, encoding); - } - if (!chunk || !chunk.length) { - return setImmediate(done); - } - this.inputBytes += chunk.length; - if (this._remainingBytes && this._remainingBytes.length) { - chunk = Buffer.concat([this._remainingBytes, chunk], this._remainingBytes.length + chunk.length); - this._remainingBytes = false; - } - if (chunk.length % 3) { - this._remainingBytes = chunk.slice(chunk.length - chunk.length % 3); - chunk = chunk.slice(0, chunk.length - chunk.length % 3); - } else { - this._remainingBytes = false; - } - let b64 = this._curLine + encode(chunk); - if (this.options.lineLength) { - b64 = wrap(b64, this.options.lineLength); - let lastLF = b64.lastIndexOf("\n"); - if (lastLF < 0) { - this._curLine = b64; - b64 = ""; - } else if (lastLF === b64.length - 1) { - this._curLine = ""; - } else { - this._curLine = b64.substr(lastLF + 1); - b64 = b64.substr(0, lastLF + 1); - } - } - if (b64) { - this.outputBytes += b64.length; - this.push(Buffer.from(b64, "ascii")); - } - setImmediate(done); - } - _flush(done) { - if (this._remainingBytes && this._remainingBytes.length) { - this._curLine += encode(this._remainingBytes); - } - if (this._curLine) { - this._curLine = wrap(this._curLine, this.options.lineLength); - this.outputBytes += this._curLine.length; - this.push(this._curLine, "ascii"); - this._curLine = ""; - } - done(); - } - } - module.exports = { - encode, - wrap, - Encoder - }; -}); - -// node_modules/nodemailer/lib/qp/index.js -var require_qp = __commonJS((exports, module) => { - var Transform = __require("stream").Transform; - function encode(buffer) { - if (typeof buffer === "string") { - buffer = Buffer.from(buffer, "utf-8"); - } - let ranges = [ - [9], - [10], - [13], - [32, 60], - [62, 126] - ]; - let result = ""; - let ord; - for (let i = 0, len = buffer.length;i < len; i++) { - ord = buffer[i]; - if (checkRanges(ord, ranges) && !((ord === 32 || ord === 9) && (i === len - 1 || buffer[i + 1] === 10 || buffer[i + 1] === 13))) { - result += String.fromCharCode(ord); - continue; - } - result += "=" + (ord < 16 ? "0" : "") + ord.toString(16).toUpperCase(); - } - return result; - } - function wrap(str, lineLength) { - str = (str || "").toString(); - lineLength = lineLength || 76; - if (str.length <= lineLength) { - return str; - } - let pos = 0; - let len = str.length; - let match, code, line; - let lineMargin = Math.floor(lineLength / 3); - let result = ""; - while (pos < len) { - line = str.substr(pos, lineLength); - if (match = line.match(/\r\n/)) { - line = line.substr(0, match.index + match[0].length); - result += line; - pos += line.length; - continue; - } - if (line.substr(-1) === "\n") { - result += line; - pos += line.length; - continue; - } else if (match = line.substr(-lineMargin).match(/\n.*?$/)) { - line = line.substr(0, line.length - (match[0].length - 1)); - result += line; - pos += line.length; - continue; - } else if (line.length > lineLength - lineMargin && (match = line.substr(-lineMargin).match(/[ \t.,!?][^ \t.,!?]*$/))) { - line = line.substr(0, line.length - (match[0].length - 1)); - } else if (line.match(/[=][\da-f]{0,2}$/i)) { - if (match = line.match(/[=][\da-f]{0,1}$/i)) { - line = line.substr(0, line.length - match[0].length); - } - while (line.length > 3 && line.length < len - pos && !line.match(/^(?:=[\da-f]{2}){1,4}$/i) && (match = line.match(/[=][\da-f]{2}$/gi))) { - code = parseInt(match[0].substr(1, 2), 16); - if (code < 128) { - break; - } - line = line.substr(0, line.length - 3); - if (code >= 192) { - break; - } - } - } - if (pos + line.length < len && line.substr(-1) !== "\n") { - if (line.length === lineLength && line.match(/[=][\da-f]{2}$/i)) { - line = line.substr(0, line.length - 3); - } else if (line.length === lineLength) { - line = line.substr(0, line.length - 1); - } - pos += line.length; - line += "=\r\n"; - } else { - pos += line.length; - } - result += line; - } - return result; - } - function checkRanges(nr, ranges) { - for (let i = ranges.length - 1;i >= 0; i--) { - if (!ranges[i].length) { - continue; - } - if (ranges[i].length === 1 && nr === ranges[i][0]) { - return true; - } - if (ranges[i].length === 2 && nr >= ranges[i][0] && nr <= ranges[i][1]) { - return true; - } - } - return false; - } - - class Encoder extends Transform { - constructor(options) { - super(); - this.options = options || {}; - if (this.options.lineLength !== false) { - this.options.lineLength = this.options.lineLength || 76; - } - this._curLine = ""; - this.inputBytes = 0; - this.outputBytes = 0; - } - _transform(chunk, encoding, done) { - let qp; - if (encoding !== "buffer") { - chunk = Buffer.from(chunk, encoding); - } - if (!chunk || !chunk.length) { - return done(); - } - this.inputBytes += chunk.length; - if (this.options.lineLength) { - qp = this._curLine + encode(chunk); - qp = wrap(qp, this.options.lineLength); - qp = qp.replace(/(^|\n)([^\n]*)$/, (match, lineBreak, lastLine) => { - this._curLine = lastLine; - return lineBreak; - }); - if (qp) { - this.outputBytes += qp.length; - this.push(qp); - } - } else { - qp = encode(chunk); - this.outputBytes += qp.length; - this.push(qp, "ascii"); - } - done(); - } - _flush(done) { - if (this._curLine) { - this.outputBytes += this._curLine.length; - this.push(this._curLine, "ascii"); - } - done(); - } - } - module.exports = { - encode, - wrap, - Encoder - }; -}); - -// node_modules/nodemailer/lib/mime-funcs/index.js -var require_mime_funcs = __commonJS((exports, module) => { - var base64 = require_base642(); - var qp = require_qp(); - var mimeTypes = require_mime_types(); - module.exports = { - isPlainText(value, isParam) { - const re = isParam ? /[\x00-\x08\x0b\x0c\x0e-\x1f"\u0080-\uFFFF]/ : /[\x00-\x08\x0b\x0c\x0e-\x1f\u0080-\uFFFF]/; - if (typeof value !== "string" || re.test(value)) { - return false; - } else { - return true; - } - }, - hasLongerLines(str, lineLength) { - if (str.length > 128 * 1024) { - return true; - } - return new RegExp("^.{" + (lineLength + 1) + ",}", "m").test(str); - }, - encodeWord(data, mimeWordEncoding, maxLength) { - mimeWordEncoding = (mimeWordEncoding || "Q").toString().toUpperCase().trim().charAt(0); - maxLength = maxLength || 0; - let encodedStr; - let toCharset = "UTF-8"; - if (maxLength && maxLength > 7 + toCharset.length) { - maxLength -= 7 + toCharset.length; - } - if (mimeWordEncoding === "Q") { - encodedStr = qp.encode(data).replace(/[^a-z0-9!*+\-/=]/gi, (chr) => { - let ord = chr.charCodeAt(0).toString(16).toUpperCase(); - if (chr === " ") { - return "_"; - } else { - return "=" + (ord.length === 1 ? "0" + ord : ord); - } - }); - } else if (mimeWordEncoding === "B") { - encodedStr = typeof data === "string" ? data : base64.encode(data); - maxLength = maxLength ? Math.max(3, (maxLength - maxLength % 4) / 4 * 3) : 0; - } - if (maxLength && (mimeWordEncoding !== "B" ? encodedStr : base64.encode(data)).length > maxLength) { - if (mimeWordEncoding === "Q") { - encodedStr = this.splitMimeEncodedString(encodedStr, maxLength).join("?= =?" + toCharset + "?" + mimeWordEncoding + "?"); - } else { - let parts = []; - let lpart = ""; - for (let i = 0, len = encodedStr.length;i < len; i++) { - let chr = encodedStr.charAt(i); - if (/[\ud83c\ud83d\ud83e]/.test(chr) && i < len - 1) { - chr += encodedStr.charAt(++i); - } - if (Buffer.byteLength(lpart + chr) <= maxLength || i === 0) { - lpart += chr; - } else { - parts.push(base64.encode(lpart)); - lpart = chr; - } - } - if (lpart) { - parts.push(base64.encode(lpart)); - } - if (parts.length > 1) { - encodedStr = parts.join("?= =?" + toCharset + "?" + mimeWordEncoding + "?"); - } else { - encodedStr = parts.join(""); - } - } - } else if (mimeWordEncoding === "B") { - encodedStr = base64.encode(data); - } - return "=?" + toCharset + "?" + mimeWordEncoding + "?" + encodedStr + (encodedStr.substr(-2) === "?=" ? "" : "?="); - }, - encodeWords(value, mimeWordEncoding, maxLength, encodeAll) { - maxLength = maxLength || 0; - let encodedValue; - let firstMatch = value.match(/(?:^|\s)([^\s]*["\u0080-\uFFFF])/); - if (!firstMatch) { - return value; - } - if (encodeAll) { - return this.encodeWord(value, mimeWordEncoding, maxLength); - } - let lastMatch = value.match(/(["\u0080-\uFFFF][^\s]*)[^"\u0080-\uFFFF]*$/); - if (!lastMatch) { - return value; - } - let startIndex = firstMatch.index + (firstMatch[0].match(/[^\s]/) || { - index: 0 - }).index; - let endIndex = lastMatch.index + (lastMatch[1] || "").length; - encodedValue = (startIndex ? value.substr(0, startIndex) : "") + this.encodeWord(value.substring(startIndex, endIndex), mimeWordEncoding || "Q", maxLength) + (endIndex < value.length ? value.substr(endIndex) : ""); - return encodedValue; - }, - buildHeaderValue(structured) { - let paramsArray = []; - Object.keys(structured.params || {}).forEach((param) => { - let value = structured.params[param]; - if (!this.isPlainText(value, true) || value.length >= 75) { - this.buildHeaderParam(param, value, 50).forEach((encodedParam) => { - if (!/[\s"\\;:/=(),<>@[\]?]|^[-']|'$/.test(encodedParam.value) || encodedParam.key.substr(-1) === "*") { - paramsArray.push(encodedParam.key + "=" + encodedParam.value); - } else { - paramsArray.push(encodedParam.key + "=" + JSON.stringify(encodedParam.value)); - } - }); - } else if (/[\s'"\\;:/=(),<>@[\]?]|^-/.test(value)) { - paramsArray.push(param + "=" + JSON.stringify(value)); - } else { - paramsArray.push(param + "=" + value); - } - }); - return structured.value + (paramsArray.length ? "; " + paramsArray.join("; ") : ""); - }, - buildHeaderParam(key, data, maxLength) { - let list = []; - let encodedStr = typeof data === "string" ? data : (data || "").toString(); - let encodedStrArr; - let chr, ord; - let line; - let startPos = 0; - let i, len; - maxLength = maxLength || 50; - if (this.isPlainText(data, true)) { - if (encodedStr.length <= maxLength) { - return [ - { - key, - value: encodedStr - } - ]; - } - encodedStr = encodedStr.replace(new RegExp(".{" + maxLength + "}", "g"), (str) => { - list.push({ - line: str - }); - return ""; - }); - if (encodedStr) { - list.push({ - line: encodedStr - }); - } - } else { - if (/[\uD800-\uDBFF]/.test(encodedStr)) { - encodedStrArr = []; - for (i = 0, len = encodedStr.length;i < len; i++) { - chr = encodedStr.charAt(i); - ord = chr.charCodeAt(0); - if (ord >= 55296 && ord <= 56319 && i < len - 1) { - chr += encodedStr.charAt(i + 1); - encodedStrArr.push(chr); - i++; - } else { - encodedStrArr.push(chr); - } - } - encodedStr = encodedStrArr; - } - line = "utf-8''"; - let encoded = true; - startPos = 0; - for (i = 0, len = encodedStr.length;i < len; i++) { - chr = encodedStr[i]; - if (encoded) { - chr = this.safeEncodeURIComponent(chr); - } else { - chr = chr === " " ? chr : this.safeEncodeURIComponent(chr); - if (chr !== encodedStr[i]) { - if ((this.safeEncodeURIComponent(line) + chr).length >= maxLength) { - list.push({ - line, - encoded - }); - line = ""; - startPos = i - 1; - } else { - encoded = true; - i = startPos; - line = ""; - continue; - } - } - } - if ((line + chr).length >= maxLength) { - list.push({ - line, - encoded - }); - line = chr = encodedStr[i] === " " ? " " : this.safeEncodeURIComponent(encodedStr[i]); - if (chr === encodedStr[i]) { - encoded = false; - startPos = i - 1; - } else { - encoded = true; - } - } else { - line += chr; - } - } - if (line) { - list.push({ - line, - encoded - }); - } - } - return list.map((item, i2) => ({ - key: key + "*" + i2 + (item.encoded ? "*" : ""), - value: item.line - })); - }, - parseHeaderValue(str) { - let response = { - value: false, - params: {} - }; - let key = false; - let value = ""; - let type = "value"; - let quote = false; - let escaped = false; - let chr; - for (let i = 0, len = str.length;i < len; i++) { - chr = str.charAt(i); - if (type === "key") { - if (chr === "=") { - key = value.trim().toLowerCase(); - type = "value"; - value = ""; - continue; - } - value += chr; - } else { - if (escaped) { - value += chr; - } else if (chr === "\\") { - escaped = true; - continue; - } else if (quote && chr === quote) { - quote = false; - } else if (!quote && chr === '"') { - quote = chr; - } else if (!quote && chr === ";") { - if (key === false) { - response.value = value.trim(); - } else { - response.params[key] = value.trim(); - } - type = "key"; - value = ""; - } else { - value += chr; - } - escaped = false; - } - } - if (type === "value") { - if (key === false) { - response.value = value.trim(); - } else { - response.params[key] = value.trim(); - } - } else if (value.trim()) { - response.params[value.trim().toLowerCase()] = ""; - } - Object.keys(response.params).forEach((key2) => { - let actualKey, nr, match, value2; - if (match = key2.match(/(\*(\d+)|\*(\d+)\*|\*)$/)) { - actualKey = key2.substr(0, match.index); - nr = Number(match[2] || match[3]) || 0; - if (!response.params[actualKey] || typeof response.params[actualKey] !== "object") { - response.params[actualKey] = { - charset: false, - values: [] - }; - } - value2 = response.params[key2]; - if (nr === 0 && match[0].substr(-1) === "*" && (match = value2.match(/^([^']*)'[^']*'(.*)$/))) { - response.params[actualKey].charset = match[1] || "iso-8859-1"; - value2 = match[2]; - } - response.params[actualKey].values[nr] = value2; - delete response.params[key2]; - } - }); - Object.keys(response.params).forEach((key2) => { - let value2; - if (response.params[key2] && Array.isArray(response.params[key2].values)) { - value2 = response.params[key2].values.map((val) => val || "").join(""); - if (response.params[key2].charset) { - response.params[key2] = "=?" + response.params[key2].charset + "?Q?" + value2.replace(/[=?_\s]/g, (s) => { - let c = s.charCodeAt(0).toString(16); - if (s === " ") { - return "_"; - } else { - return "%" + (c.length < 2 ? "0" : "") + c; - } - }).replace(/%/g, "=") + "?="; - } else { - response.params[key2] = value2; - } - } - }); - return response; - }, - detectExtension: (mimeType) => mimeTypes.detectExtension(mimeType), - detectMimeType: (extension) => mimeTypes.detectMimeType(extension), - foldLines(str, lineLength, afterSpace) { - str = (str || "").toString(); - lineLength = lineLength || 76; - let pos = 0, len = str.length, result = "", line, match; - while (pos < len) { - line = str.substr(pos, lineLength); - if (line.length < lineLength) { - result += line; - break; - } - if (match = line.match(/^[^\n\r]*(\r?\n|\r)/)) { - line = match[0]; - result += line; - pos += line.length; - continue; - } else if ((match = line.match(/(\s+)[^\s]*$/)) && match[0].length - (afterSpace ? (match[1] || "").length : 0) < line.length) { - line = line.substr(0, line.length - (match[0].length - (afterSpace ? (match[1] || "").length : 0))); - } else if (match = str.substr(pos + line.length).match(/^[^\s]+(\s*)/)) { - line = line + match[0].substr(0, match[0].length - (!afterSpace ? (match[1] || "").length : 0)); - } - result += line; - pos += line.length; - if (pos < len) { - result += "\r\n"; - } - } - return result; - }, - splitMimeEncodedString: (str, maxlen) => { - let curLine, match, chr, done, lines = []; - maxlen = Math.max(maxlen || 0, 12); - while (str.length) { - curLine = str.substr(0, maxlen); - if (match = curLine.match(/[=][0-9A-F]?$/i)) { - curLine = curLine.substr(0, match.index); - } - done = false; - while (!done) { - done = true; - if (match = str.substr(curLine.length).match(/^[=]([0-9A-F]{2})/i)) { - chr = parseInt(match[1], 16); - if (chr < 194 && chr > 127) { - curLine = curLine.substr(0, curLine.length - 3); - done = false; - } - } - } - if (curLine.length) { - lines.push(curLine); - } - str = str.substr(curLine.length); - } - return lines; - }, - encodeURICharComponent: (chr) => { - let res = ""; - let ord = chr.charCodeAt(0).toString(16).toUpperCase(); - if (ord.length % 2) { - ord = "0" + ord; - } - if (ord.length > 2) { - for (let i = 0, len = ord.length / 2;i < len; i++) { - res += "%" + ord.substr(i, 2); - } - } else { - res += "%" + ord; - } - return res; - }, - safeEncodeURIComponent(str) { - str = (str || "").toString(); - try { - str = encodeURIComponent(str); - } catch (E) { - return str.replace(/[^\x00-\x1F *'()<>@,;:\\"[\]?=\u007F-\uFFFF]+/g, ""); - } - return str.replace(/[\x00-\x1F *'()<>@,;:\\"[\]?=\u007F-\uFFFF]/g, (chr) => this.encodeURICharComponent(chr)); - } - }; -}); - -// node_modules/nodemailer/lib/addressparser/index.js -var require_addressparser = __commonJS((exports, module) => { - function _handleAddress(tokens) { - let token; - let isGroup = false; - let state = "text"; - let address; - let addresses = []; - let data = { - address: [], - comment: [], - group: [], - text: [] - }; - let i; - let len; - for (i = 0, len = tokens.length;i < len; i++) { - token = tokens[i]; - if (token.type === "operator") { - switch (token.value) { - case "<": - state = "address"; - break; - case "(": - state = "comment"; - break; - case ":": - state = "group"; - isGroup = true; - break; - default: - state = "text"; - } - } else if (token.value) { - if (state === "address") { - token.value = token.value.replace(/^[^<]*<\s*/, ""); - } - data[state].push(token.value); - } - } - if (!data.text.length && data.comment.length) { - data.text = data.comment; - data.comment = []; - } - if (isGroup) { - data.text = data.text.join(" "); - addresses.push({ - name: data.text || address && address.name, - group: data.group.length ? addressparser(data.group.join(",")) : [] - }); - } else { - if (!data.address.length && data.text.length) { - for (i = data.text.length - 1;i >= 0; i--) { - if (data.text[i].match(/^[^@\s]+@[^@\s]+$/)) { - data.address = data.text.splice(i, 1); - break; - } - } - let _regexHandler = function(address2) { - if (!data.address.length) { - data.address = [address2.trim()]; - return " "; - } else { - return address2; - } - }; - if (!data.address.length) { - for (i = data.text.length - 1;i >= 0; i--) { - data.text[i] = data.text[i].replace(/\s*\b[^@\s]+@[^\s]+\b\s*/, _regexHandler).trim(); - if (data.address.length) { - break; - } - } - } - } - if (!data.text.length && data.comment.length) { - data.text = data.comment; - data.comment = []; - } - if (data.address.length > 1) { - data.text = data.text.concat(data.address.splice(1)); - } - data.text = data.text.join(" "); - data.address = data.address.join(" "); - if (!data.address && isGroup) { - return []; - } else { - address = { - address: data.address || data.text || "", - name: data.text || data.address || "" - }; - if (address.address === address.name) { - if ((address.address || "").match(/@/)) { - address.name = ""; - } else { - address.address = ""; - } - } - addresses.push(address); - } - } - return addresses; - } - - class Tokenizer { - constructor(str) { - this.str = (str || "").toString(); - this.operatorCurrent = ""; - this.operatorExpecting = ""; - this.node = null; - this.escaped = false; - this.list = []; - this.operators = { - '"': '"', - "(": ")", - "<": ">", - ",": "", - ":": ";", - ";": "" - }; - } - tokenize() { - let chr, list = []; - for (let i = 0, len = this.str.length;i < len; i++) { - chr = this.str.charAt(i); - this.checkChar(chr); - } - this.list.forEach((node) => { - node.value = (node.value || "").toString().trim(); - if (node.value) { - list.push(node); - } - }); - return list; - } - checkChar(chr) { - if (this.escaped) { - } else if (chr === this.operatorExpecting) { - this.node = { - type: "operator", - value: chr - }; - this.list.push(this.node); - this.node = null; - this.operatorExpecting = ""; - this.escaped = false; - return; - } else if (!this.operatorExpecting && chr in this.operators) { - this.node = { - type: "operator", - value: chr - }; - this.list.push(this.node); - this.node = null; - this.operatorExpecting = this.operators[chr]; - this.escaped = false; - return; - } else if (['"', "'"].includes(this.operatorExpecting) && chr === "\\") { - this.escaped = true; - return; - } - if (!this.node) { - this.node = { - type: "text", - value: "" - }; - this.list.push(this.node); - } - if (chr === "\n") { - chr = " "; - } - if (chr.charCodeAt(0) >= 33 || [" ", "\t"].includes(chr)) { - this.node.value += chr; - } - this.escaped = false; - } - } - function addressparser(str, options) { - options = options || {}; - let tokenizer = new Tokenizer(str); - let tokens = tokenizer.tokenize(); - let addresses = []; - let address = []; - let parsedAddresses = []; - tokens.forEach((token) => { - if (token.type === "operator" && (token.value === "," || token.value === ";")) { - if (address.length) { - addresses.push(address); - } - address = []; - } else { - address.push(token); - } - }); - if (address.length) { - addresses.push(address); - } - addresses.forEach((address2) => { - address2 = _handleAddress(address2); - if (address2.length) { - parsedAddresses = parsedAddresses.concat(address2); - } - }); - if (options.flatten) { - let addresses2 = []; - let walkAddressList = (list) => { - list.forEach((address2) => { - if (address2.group) { - return walkAddressList(address2.group); - } else { - addresses2.push(address2); - } - }); - }; - walkAddressList(parsedAddresses); - return addresses2; - } - return parsedAddresses; - } - module.exports = addressparser; -}); - -// node_modules/nodemailer/lib/mime-node/last-newline.js -var require_last_newline = __commonJS((exports, module) => { - var Transform = __require("stream").Transform; - - class LastNewline extends Transform { - constructor() { - super(); - this.lastByte = false; - } - _transform(chunk, encoding, done) { - if (chunk.length) { - this.lastByte = chunk[chunk.length - 1]; - } - this.push(chunk); - done(); - } - _flush(done) { - if (this.lastByte === 10) { - return done(); - } - if (this.lastByte === 13) { - this.push(Buffer.from("\n")); - return done(); - } - this.push(Buffer.from("\r\n")); - return done(); - } - } - module.exports = LastNewline; -}); - -// node_modules/nodemailer/lib/mime-node/le-windows.js -var require_le_windows = __commonJS((exports, module) => { - var stream = __require("stream"); - var Transform = stream.Transform; - - class LeWindows extends Transform { - constructor(options) { - super(options); - this.options = options || {}; - this.lastByte = false; - } - _transform(chunk, encoding, done) { - let buf; - let lastPos = 0; - for (let i = 0, len = chunk.length;i < len; i++) { - if (chunk[i] === 10) { - if (i && chunk[i - 1] !== 13 || !i && this.lastByte !== 13) { - if (i > lastPos) { - buf = chunk.slice(lastPos, i); - this.push(buf); - } - this.push(Buffer.from("\r\n")); - lastPos = i + 1; - } - } - } - if (lastPos && lastPos < chunk.length) { - buf = chunk.slice(lastPos); - this.push(buf); - } else if (!lastPos) { - this.push(chunk); - } - this.lastByte = chunk[chunk.length - 1]; - done(); - } - } - module.exports = LeWindows; -}); - -// node_modules/nodemailer/lib/mime-node/le-unix.js -var require_le_unix = __commonJS((exports, module) => { - var stream = __require("stream"); - var Transform = stream.Transform; - - class LeWindows extends Transform { - constructor(options) { - super(options); - this.options = options || {}; - } - _transform(chunk, encoding, done) { - let buf; - let lastPos = 0; - for (let i = 0, len = chunk.length;i < len; i++) { - if (chunk[i] === 13) { - buf = chunk.slice(lastPos, i); - lastPos = i + 1; - this.push(buf); - } - } - if (lastPos && lastPos < chunk.length) { - buf = chunk.slice(lastPos); - this.push(buf); - } else if (!lastPos) { - this.push(chunk); - } - done(); - } - } - module.exports = LeWindows; -}); - -// node_modules/nodemailer/lib/mime-node/index.js -var require_mime_node = __commonJS((exports, module) => { - var crypto2 = __require("crypto"); - var fs15 = __require("fs"); - var punycode = require_punycode(); - var PassThrough = __require("stream").PassThrough; - var shared = require_shared(); - var mimeFuncs = require_mime_funcs(); - var qp = require_qp(); - var base64 = require_base642(); - var addressparser = require_addressparser(); - var nmfetch = require_fetch(); - var LastNewline = require_last_newline(); - var LeWindows = require_le_windows(); - var LeUnix = require_le_unix(); - - class MimeNode { - constructor(contentType, options) { - this.nodeCounter = 0; - options = options || {}; - this.baseBoundary = options.baseBoundary || crypto2.randomBytes(8).toString("hex"); - this.boundaryPrefix = options.boundaryPrefix || "--_NmP"; - this.disableFileAccess = !!options.disableFileAccess; - this.disableUrlAccess = !!options.disableUrlAccess; - this.normalizeHeaderKey = options.normalizeHeaderKey; - this.date = new Date; - this.rootNode = options.rootNode || this; - this.keepBcc = !!options.keepBcc; - if (options.filename) { - this.filename = options.filename; - if (!contentType) { - contentType = mimeFuncs.detectMimeType(this.filename.split(".").pop()); - } - } - this.textEncoding = (options.textEncoding || "").toString().trim().charAt(0).toUpperCase(); - this.parentNode = options.parentNode; - this.hostname = options.hostname; - this.newline = options.newline; - this.childNodes = []; - this._nodeId = ++this.rootNode.nodeCounter; - this._headers = []; - this._isPlainText = false; - this._hasLongLines = false; - this._envelope = false; - this._raw = false; - this._transforms = []; - this._processFuncs = []; - if (contentType) { - this.setHeader("Content-Type", contentType); - } - } - createChild(contentType, options) { - if (!options && typeof contentType === "object") { - options = contentType; - contentType = undefined; - } - let node = new MimeNode(contentType, options); - this.appendChild(node); - return node; - } - appendChild(childNode) { - if (childNode.rootNode !== this.rootNode) { - childNode.rootNode = this.rootNode; - childNode._nodeId = ++this.rootNode.nodeCounter; - } - childNode.parentNode = this; - this.childNodes.push(childNode); - return childNode; - } - replace(node) { - if (node === this) { - return this; - } - this.parentNode.childNodes.forEach((childNode, i) => { - if (childNode === this) { - node.rootNode = this.rootNode; - node.parentNode = this.parentNode; - node._nodeId = this._nodeId; - this.rootNode = this; - this.parentNode = undefined; - node.parentNode.childNodes[i] = node; - } - }); - return node; - } - remove() { - if (!this.parentNode) { - return this; - } - for (let i = this.parentNode.childNodes.length - 1;i >= 0; i--) { - if (this.parentNode.childNodes[i] === this) { - this.parentNode.childNodes.splice(i, 1); - this.parentNode = undefined; - this.rootNode = this; - return this; - } - } - } - setHeader(key, value) { - let added = false, headerValue; - if (!value && key && typeof key === "object") { - if (key.key && "value" in key) { - this.setHeader(key.key, key.value); - } else if (Array.isArray(key)) { - key.forEach((i) => { - this.setHeader(i.key, i.value); - }); - } else { - Object.keys(key).forEach((i) => { - this.setHeader(i, key[i]); - }); - } - return this; - } - key = this._normalizeHeaderKey(key); - headerValue = { - key, - value - }; - for (let i = 0, len = this._headers.length;i < len; i++) { - if (this._headers[i].key === key) { - if (!added) { - this._headers[i] = headerValue; - added = true; - } else { - this._headers.splice(i, 1); - i--; - len--; - } - } - } - if (!added) { - this._headers.push(headerValue); - } - return this; - } - addHeader(key, value) { - if (!value && key && typeof key === "object") { - if (key.key && key.value) { - this.addHeader(key.key, key.value); - } else if (Array.isArray(key)) { - key.forEach((i) => { - this.addHeader(i.key, i.value); - }); - } else { - Object.keys(key).forEach((i) => { - this.addHeader(i, key[i]); - }); - } - return this; - } else if (Array.isArray(value)) { - value.forEach((val) => { - this.addHeader(key, val); - }); - return this; - } - this._headers.push({ - key: this._normalizeHeaderKey(key), - value - }); - return this; - } - getHeader(key) { - key = this._normalizeHeaderKey(key); - for (let i = 0, len = this._headers.length;i < len; i++) { - if (this._headers[i].key === key) { - return this._headers[i].value; - } - } - } - setContent(content) { - this.content = content; - if (typeof this.content.pipe === "function") { - this._contentErrorHandler = (err) => { - this.content.removeListener("error", this._contentErrorHandler); - this.content = err; - }; - this.content.once("error", this._contentErrorHandler); - } else if (typeof this.content === "string") { - this._isPlainText = mimeFuncs.isPlainText(this.content); - if (this._isPlainText && mimeFuncs.hasLongerLines(this.content, 76)) { - this._hasLongLines = true; - } - } - return this; - } - build(callback) { - let promise; - if (!callback) { - promise = new Promise((resolve, reject) => { - callback = shared.callbackPromise(resolve, reject); - }); - } - let stream = this.createReadStream(); - let buf = []; - let buflen = 0; - let returned = false; - stream.on("readable", () => { - let chunk; - while ((chunk = stream.read()) !== null) { - buf.push(chunk); - buflen += chunk.length; - } - }); - stream.once("error", (err) => { - if (returned) { - return; - } - returned = true; - return callback(err); - }); - stream.once("end", (chunk) => { - if (returned) { - return; - } - returned = true; - if (chunk && chunk.length) { - buf.push(chunk); - buflen += chunk.length; - } - return callback(null, Buffer.concat(buf, buflen)); - }); - return promise; - } - getTransferEncoding() { - let transferEncoding = false; - let contentType = (this.getHeader("Content-Type") || "").toString().toLowerCase().trim(); - if (this.content) { - transferEncoding = (this.getHeader("Content-Transfer-Encoding") || "").toString().toLowerCase().trim(); - if (!transferEncoding || !["base64", "quoted-printable"].includes(transferEncoding)) { - if (/^text\//i.test(contentType)) { - if (this._isPlainText && !this._hasLongLines) { - transferEncoding = "7bit"; - } else if (typeof this.content === "string" || this.content instanceof Buffer) { - transferEncoding = this._getTextEncoding(this.content) === "Q" ? "quoted-printable" : "base64"; - } else { - transferEncoding = this.textEncoding === "B" ? "base64" : "quoted-printable"; - } - } else if (!/^(multipart|message)\//i.test(contentType)) { - transferEncoding = transferEncoding || "base64"; - } - } - } - return transferEncoding; - } - buildHeaders() { - let transferEncoding = this.getTransferEncoding(); - let headers = []; - if (transferEncoding) { - this.setHeader("Content-Transfer-Encoding", transferEncoding); - } - if (this.filename && !this.getHeader("Content-Disposition")) { - this.setHeader("Content-Disposition", "attachment"); - } - if (this.rootNode === this) { - if (!this.getHeader("Date")) { - this.setHeader("Date", this.date.toUTCString().replace(/GMT/, "+0000")); - } - this.messageId(); - if (!this.getHeader("MIME-Version")) { - this.setHeader("MIME-Version", "1.0"); - } - for (let i = this._headers.length - 2;i >= 0; i--) { - let header = this._headers[i]; - if (header.key === "Content-Type") { - this._headers.splice(i, 1); - this._headers.push(header); - } - } - } - this._headers.forEach((header) => { - let key = header.key; - let value = header.value; - let structured; - let param; - let options = {}; - let formattedHeaders = ["From", "Sender", "To", "Cc", "Bcc", "Reply-To", "Date", "References"]; - if (value && typeof value === "object" && !formattedHeaders.includes(key)) { - Object.keys(value).forEach((key2) => { - if (key2 !== "value") { - options[key2] = value[key2]; - } - }); - value = (value.value || "").toString(); - if (!value.trim()) { - return; - } - } - if (options.prepared) { - if (options.foldLines) { - headers.push(mimeFuncs.foldLines(key + ": " + value)); - } else { - headers.push(key + ": " + value); - } - return; - } - switch (header.key) { - case "Content-Disposition": - structured = mimeFuncs.parseHeaderValue(value); - if (this.filename) { - structured.params.filename = this.filename; - } - value = mimeFuncs.buildHeaderValue(structured); - break; - case "Content-Type": - structured = mimeFuncs.parseHeaderValue(value); - this._handleContentType(structured); - if (structured.value.match(/^text\/plain\b/) && typeof this.content === "string" && /[\u0080-\uFFFF]/.test(this.content)) { - structured.params.charset = "utf-8"; - } - value = mimeFuncs.buildHeaderValue(structured); - if (this.filename) { - param = this._encodeWords(this.filename); - if (param !== this.filename || /[\s'"\\;:/=(),<>@[\]?]|^-/.test(param)) { - param = '"' + param + '"'; - } - value += "; name=" + param; - } - break; - case "Bcc": - if (!this.keepBcc) { - return; - } - break; - } - value = this._encodeHeaderValue(key, value); - if (!(value || "").toString().trim()) { - return; - } - if (typeof this.normalizeHeaderKey === "function") { - let normalized = this.normalizeHeaderKey(key, value); - if (normalized && typeof normalized === "string" && normalized.length) { - key = normalized; - } - } - headers.push(mimeFuncs.foldLines(key + ": " + value, 76)); - }); - return headers.join("\r\n"); - } - createReadStream(options) { - options = options || {}; - let stream = new PassThrough(options); - let outputStream = stream; - let transform; - this.stream(stream, options, (err) => { - if (err) { - outputStream.emit("error", err); - return; - } - stream.end(); - }); - for (let i = 0, len = this._transforms.length;i < len; i++) { - transform = typeof this._transforms[i] === "function" ? this._transforms[i]() : this._transforms[i]; - outputStream.once("error", (err) => { - transform.emit("error", err); - }); - outputStream = outputStream.pipe(transform); - } - transform = new LastNewline; - outputStream.once("error", (err) => { - transform.emit("error", err); - }); - outputStream = outputStream.pipe(transform); - for (let i = 0, len = this._processFuncs.length;i < len; i++) { - transform = this._processFuncs[i]; - outputStream = transform(outputStream); - } - if (this.newline) { - const winbreak = ["win", "windows", "dos", "\r\n"].includes(this.newline.toString().toLowerCase()); - const newlineTransform = winbreak ? new LeWindows : new LeUnix; - const stream2 = outputStream.pipe(newlineTransform); - outputStream.on("error", (err) => stream2.emit("error", err)); - return stream2; - } - return outputStream; - } - transform(transform) { - this._transforms.push(transform); - } - processFunc(processFunc) { - this._processFuncs.push(processFunc); - } - stream(outputStream, options, done) { - let transferEncoding = this.getTransferEncoding(); - let contentStream; - let localStream; - let returned = false; - let callback = (err) => { - if (returned) { - return; - } - returned = true; - done(err); - }; - let finalize = () => { - let childId = 0; - let processChildNode = () => { - if (childId >= this.childNodes.length) { - outputStream.write("\r\n--" + this.boundary + "--\r\n"); - return callback(); - } - let child = this.childNodes[childId++]; - outputStream.write((childId > 1 ? "\r\n" : "") + "--" + this.boundary + "\r\n"); - child.stream(outputStream, options, (err) => { - if (err) { - return callback(err); - } - setImmediate(processChildNode); - }); - }; - if (this.multipart) { - setImmediate(processChildNode); - } else { - return callback(); - } - }; - let sendContent = () => { - if (this.content) { - if (Object.prototype.toString.call(this.content) === "[object Error]") { - return callback(this.content); - } - if (typeof this.content.pipe === "function") { - this.content.removeListener("error", this._contentErrorHandler); - this._contentErrorHandler = (err) => callback(err); - this.content.once("error", this._contentErrorHandler); - } - let createStream = () => { - if (["quoted-printable", "base64"].includes(transferEncoding)) { - contentStream = new (transferEncoding === "base64" ? base64 : qp).Encoder(options); - contentStream.pipe(outputStream, { - end: false - }); - contentStream.once("end", finalize); - contentStream.once("error", (err) => callback(err)); - localStream = this._getStream(this.content); - localStream.pipe(contentStream); - } else { - localStream = this._getStream(this.content); - localStream.pipe(outputStream, { - end: false - }); - localStream.once("end", finalize); - } - localStream.once("error", (err) => callback(err)); - }; - if (this.content._resolve) { - let chunks = []; - let chunklen = 0; - let returned2 = false; - let sourceStream = this._getStream(this.content); - sourceStream.on("error", (err) => { - if (returned2) { - return; - } - returned2 = true; - callback(err); - }); - sourceStream.on("readable", () => { - let chunk; - while ((chunk = sourceStream.read()) !== null) { - chunks.push(chunk); - chunklen += chunk.length; - } - }); - sourceStream.on("end", () => { - if (returned2) { - return; - } - returned2 = true; - this.content._resolve = false; - this.content._resolvedValue = Buffer.concat(chunks, chunklen); - setImmediate(createStream); - }); - } else { - setImmediate(createStream); - } - return; - } else { - return setImmediate(finalize); - } - }; - if (this._raw) { - setImmediate(() => { - if (Object.prototype.toString.call(this._raw) === "[object Error]") { - return callback(this._raw); - } - if (typeof this._raw.pipe === "function") { - this._raw.removeListener("error", this._contentErrorHandler); - } - let raw = this._getStream(this._raw); - raw.pipe(outputStream, { - end: false - }); - raw.on("error", (err) => outputStream.emit("error", err)); - raw.on("end", finalize); - }); - } else { - outputStream.write(this.buildHeaders() + "\r\n\r\n"); - setImmediate(sendContent); - } - } - setEnvelope(envelope) { - let list; - this._envelope = { - from: false, - to: [] - }; - if (envelope.from) { - list = []; - this._convertAddresses(this._parseAddresses(envelope.from), list); - list = list.filter((address) => address && address.address); - if (list.length && list[0]) { - this._envelope.from = list[0].address; - } - } - ["to", "cc", "bcc"].forEach((key) => { - if (envelope[key]) { - this._convertAddresses(this._parseAddresses(envelope[key]), this._envelope.to); - } - }); - this._envelope.to = this._envelope.to.map((to) => to.address).filter((address) => address); - let standardFields = ["to", "cc", "bcc", "from"]; - Object.keys(envelope).forEach((key) => { - if (!standardFields.includes(key)) { - this._envelope[key] = envelope[key]; - } - }); - return this; - } - getAddresses() { - let addresses = {}; - this._headers.forEach((header) => { - let key = header.key.toLowerCase(); - if (["from", "sender", "reply-to", "to", "cc", "bcc"].includes(key)) { - if (!Array.isArray(addresses[key])) { - addresses[key] = []; - } - this._convertAddresses(this._parseAddresses(header.value), addresses[key]); - } - }); - return addresses; - } - getEnvelope() { - if (this._envelope) { - return this._envelope; - } - let envelope = { - from: false, - to: [] - }; - this._headers.forEach((header) => { - let list = []; - if (header.key === "From" || !envelope.from && ["Reply-To", "Sender"].includes(header.key)) { - this._convertAddresses(this._parseAddresses(header.value), list); - if (list.length && list[0]) { - envelope.from = list[0].address; - } - } else if (["To", "Cc", "Bcc"].includes(header.key)) { - this._convertAddresses(this._parseAddresses(header.value), envelope.to); - } - }); - envelope.to = envelope.to.map((to) => to.address); - return envelope; - } - messageId() { - let messageId = this.getHeader("Message-ID"); - if (!messageId) { - messageId = this._generateMessageId(); - this.setHeader("Message-ID", messageId); - } - return messageId; - } - setRaw(raw) { - this._raw = raw; - if (this._raw && typeof this._raw.pipe === "function") { - this._contentErrorHandler = (err) => { - this._raw.removeListener("error", this._contentErrorHandler); - this._raw = err; - }; - this._raw.once("error", this._contentErrorHandler); - } - return this; - } - _getStream(content) { - let contentStream; - if (content._resolvedValue) { - contentStream = new PassThrough; - setImmediate(() => { - try { - contentStream.end(content._resolvedValue); - } catch (err) { - contentStream.emit("error", err); - } - }); - return contentStream; - } else if (typeof content.pipe === "function") { - return content; - } else if (content && typeof content.path === "string" && !content.href) { - if (this.disableFileAccess) { - contentStream = new PassThrough; - setImmediate(() => contentStream.emit("error", new Error("File access rejected for " + content.path))); - return contentStream; - } - return fs15.createReadStream(content.path); - } else if (content && typeof content.href === "string") { - if (this.disableUrlAccess) { - contentStream = new PassThrough; - setImmediate(() => contentStream.emit("error", new Error("Url access rejected for " + content.href))); - return contentStream; - } - return nmfetch(content.href, { headers: content.httpHeaders }); - } else { - contentStream = new PassThrough; - setImmediate(() => { - try { - contentStream.end(content || ""); - } catch (err) { - contentStream.emit("error", err); - } - }); - return contentStream; - } - } - _parseAddresses(addresses) { - return [].concat.apply([], [].concat(addresses).map((address) => { - if (address && address.address) { - address.address = this._normalizeAddress(address.address); - address.name = address.name || ""; - return [address]; - } - return addressparser(address); - })); - } - _normalizeHeaderKey(key) { - key = (key || "").toString().replace(/\r?\n|\r/g, " ").trim().toLowerCase().replace(/^X-SMTPAPI$|^(MIME|DKIM|ARC|BIMI)\b|^[a-z]|-(SPF|FBL|ID|MD5)$|-[a-z]/gi, (c) => c.toUpperCase()).replace(/^Content-Features$/i, "Content-features"); - return key; - } - _handleContentType(structured) { - this.contentType = structured.value.trim().toLowerCase(); - this.multipart = /^multipart\//i.test(this.contentType) ? this.contentType.substr(this.contentType.indexOf("/") + 1) : false; - if (this.multipart) { - this.boundary = structured.params.boundary = structured.params.boundary || this.boundary || this._generateBoundary(); - } else { - this.boundary = false; - } - } - _generateBoundary() { - return this.rootNode.boundaryPrefix + "-" + this.rootNode.baseBoundary + "-Part_" + this._nodeId; - } - _encodeHeaderValue(key, value) { - key = this._normalizeHeaderKey(key); - switch (key) { - case "From": - case "Sender": - case "To": - case "Cc": - case "Bcc": - case "Reply-To": - return this._convertAddresses(this._parseAddresses(value)); - case "Message-ID": - case "In-Reply-To": - case "Content-Id": - value = (value || "").toString().replace(/\r?\n|\r/g, " "); - if (value.charAt(0) !== "<") { - value = "<" + value; - } - if (value.charAt(value.length - 1) !== ">") { - value = value + ">"; - } - return value; - case "References": - value = [].concat.apply([], [].concat(value || "").map((elm) => { - elm = (elm || "").toString().replace(/\r?\n|\r/g, " ").trim(); - return elm.replace(/<[^>]*>/g, (str) => str.replace(/\s/g, "")).split(/\s+/); - })).map((elm) => { - if (elm.charAt(0) !== "<") { - elm = "<" + elm; - } - if (elm.charAt(elm.length - 1) !== ">") { - elm = elm + ">"; - } - return elm; - }); - return value.join(" ").trim(); - case "Date": - if (Object.prototype.toString.call(value) === "[object Date]") { - return value.toUTCString().replace(/GMT/, "+0000"); - } - value = (value || "").toString().replace(/\r?\n|\r/g, " "); - return this._encodeWords(value); - case "Content-Type": - case "Content-Disposition": - return (value || "").toString().replace(/\r?\n|\r/g, " "); - default: - value = (value || "").toString().replace(/\r?\n|\r/g, " "); - return this._encodeWords(value); - } - } - _convertAddresses(addresses, uniqueList) { - let values = []; - uniqueList = uniqueList || []; - [].concat(addresses || []).forEach((address) => { - if (address.address) { - address.address = this._normalizeAddress(address.address); - if (!address.name) { - values.push(address.address.indexOf(" ") >= 0 ? `<${address.address}>` : `${address.address}`); - } else if (address.name) { - values.push(`${this._encodeAddressName(address.name)} <${address.address}>`); - } - if (address.address) { - if (!uniqueList.filter((a) => a.address === address.address).length) { - uniqueList.push(address); - } - } - } else if (address.group) { - let groupListAddresses = (address.group.length ? this._convertAddresses(address.group, uniqueList) : "").trim(); - values.push(`${this._encodeAddressName(address.name)}:${groupListAddresses};`); - } - }); - return values.join(", "); - } - _normalizeAddress(address) { - address = (address || "").toString().replace(/[\x00-\x1F<>]+/g, " ").trim(); - let lastAt = address.lastIndexOf("@"); - if (lastAt < 0) { - return address; - } - let user = address.substr(0, lastAt); - let domain = address.substr(lastAt + 1); - let encodedDomain; - try { - encodedDomain = punycode.toASCII(domain.toLowerCase()); - } catch (err) { - } - if (user.indexOf(" ") >= 0) { - if (user.charAt(0) !== '"') { - user = '"' + user; - } - if (user.substr(-1) !== '"') { - user = user + '"'; - } - } - return `${user}@${encodedDomain}`; - } - _encodeAddressName(name) { - if (!/^[\w ]*$/.test(name)) { - if (/^[\x20-\x7e]*$/.test(name)) { - return '"' + name.replace(/([\\"])/g, "\\$1") + '"'; - } else { - return mimeFuncs.encodeWord(name, this._getTextEncoding(name), 52); - } - } - return name; - } - _encodeWords(value) { - return mimeFuncs.encodeWords(value, this._getTextEncoding(value), 52, true); - } - _getTextEncoding(value) { - value = (value || "").toString(); - let encoding = this.textEncoding; - let latinLen; - let nonLatinLen; - if (!encoding) { - nonLatinLen = (value.match(/[\x00-\x08\x0B\x0C\x0E-\x1F\u0080-\uFFFF]/g) || []).length; - latinLen = (value.match(/[a-z]/gi) || []).length; - encoding = nonLatinLen < latinLen ? "Q" : "B"; - } - return encoding; - } - _generateMessageId() { - return "<" + [2, 2, 2, 6].reduce((prev, len) => prev + "-" + crypto2.randomBytes(len).toString("hex"), crypto2.randomBytes(4).toString("hex")) + "@" + (this.getEnvelope().from || this.hostname || "localhost").split("@").pop() + ">"; - } - } - module.exports = MimeNode; -}); - -// node_modules/nodemailer/lib/mail-composer/index.js -var require_mail_composer = __commonJS((exports, module) => { - var MimeNode = require_mime_node(); - var mimeFuncs = require_mime_funcs(); - var parseDataURI = require_shared().parseDataURI; - - class MailComposer { - constructor(mail) { - this.mail = mail || {}; - this.message = false; - } - compile() { - this._alternatives = this.getAlternatives(); - this._htmlNode = this._alternatives.filter((alternative) => /^text\/html\b/i.test(alternative.contentType)).pop(); - this._attachments = this.getAttachments(!!this._htmlNode); - this._useRelated = !!(this._htmlNode && this._attachments.related.length); - this._useAlternative = this._alternatives.length > 1; - this._useMixed = this._attachments.attached.length > 1 || this._alternatives.length && this._attachments.attached.length === 1; - if (this.mail.raw) { - this.message = new MimeNode("message/rfc822", { newline: this.mail.newline }).setRaw(this.mail.raw); - } else if (this._useMixed) { - this.message = this._createMixed(); - } else if (this._useAlternative) { - this.message = this._createAlternative(); - } else if (this._useRelated) { - this.message = this._createRelated(); - } else { - this.message = this._createContentNode(false, [].concat(this._alternatives || []).concat(this._attachments.attached || []).shift() || { - contentType: "text/plain", - content: "" - }); - } - if (this.mail.headers) { - this.message.addHeader(this.mail.headers); - } - ["from", "sender", "to", "cc", "bcc", "reply-to", "in-reply-to", "references", "subject", "message-id", "date"].forEach((header) => { - let key = header.replace(/-(\w)/g, (o, c) => c.toUpperCase()); - if (this.mail[key]) { - this.message.setHeader(header, this.mail[key]); - } - }); - if (this.mail.envelope) { - this.message.setEnvelope(this.mail.envelope); - } - this.message.messageId(); - return this.message; - } - getAttachments(findRelated) { - let icalEvent, eventObject; - let attachments = [].concat(this.mail.attachments || []).map((attachment, i) => { - let data; - let isMessageNode = /^message\//i.test(attachment.contentType); - if (/^data:/i.test(attachment.path || attachment.href)) { - attachment = this._processDataUrl(attachment); - } - let contentType = attachment.contentType || mimeFuncs.detectMimeType(attachment.filename || attachment.path || attachment.href || "bin"); - let isImage = /^image\//i.test(contentType); - let contentDisposition = attachment.contentDisposition || (isMessageNode || isImage && attachment.cid ? "inline" : "attachment"); - data = { - contentType, - contentDisposition, - contentTransferEncoding: "contentTransferEncoding" in attachment ? attachment.contentTransferEncoding : "base64" - }; - if (attachment.filename) { - data.filename = attachment.filename; - } else if (!isMessageNode && attachment.filename !== false) { - data.filename = (attachment.path || attachment.href || "").split("/").pop().split("?").shift() || "attachment-" + (i + 1); - if (data.filename.indexOf(".") < 0) { - data.filename += "." + mimeFuncs.detectExtension(data.contentType); - } - } - if (/^https?:\/\//i.test(attachment.path)) { - attachment.href = attachment.path; - attachment.path = undefined; - } - if (attachment.cid) { - data.cid = attachment.cid; - } - if (attachment.raw) { - data.raw = attachment.raw; - } else if (attachment.path) { - data.content = { - path: attachment.path - }; - } else if (attachment.href) { - data.content = { - href: attachment.href, - httpHeaders: attachment.httpHeaders - }; - } else { - data.content = attachment.content || ""; - } - if (attachment.encoding) { - data.encoding = attachment.encoding; - } - if (attachment.headers) { - data.headers = attachment.headers; - } - return data; - }); - if (this.mail.icalEvent) { - if (typeof this.mail.icalEvent === "object" && (this.mail.icalEvent.content || this.mail.icalEvent.path || this.mail.icalEvent.href || this.mail.icalEvent.raw)) { - icalEvent = this.mail.icalEvent; - } else { - icalEvent = { - content: this.mail.icalEvent - }; - } - eventObject = {}; - Object.keys(icalEvent).forEach((key) => { - eventObject[key] = icalEvent[key]; - }); - eventObject.contentType = "application/ics"; - if (!eventObject.headers) { - eventObject.headers = {}; - } - eventObject.filename = eventObject.filename || "invite.ics"; - eventObject.headers["Content-Disposition"] = "attachment"; - eventObject.headers["Content-Transfer-Encoding"] = "base64"; - } - if (!findRelated) { - return { - attached: attachments.concat(eventObject || []), - related: [] - }; - } else { - return { - attached: attachments.filter((attachment) => !attachment.cid).concat(eventObject || []), - related: attachments.filter((attachment) => !!attachment.cid) - }; - } - } - getAlternatives() { - let alternatives = [], text, html, watchHtml, amp, icalEvent, eventObject; - if (this.mail.text) { - if (typeof this.mail.text === "object" && (this.mail.text.content || this.mail.text.path || this.mail.text.href || this.mail.text.raw)) { - text = this.mail.text; - } else { - text = { - content: this.mail.text - }; - } - text.contentType = "text/plain; charset=utf-8"; - } - if (this.mail.watchHtml) { - if (typeof this.mail.watchHtml === "object" && (this.mail.watchHtml.content || this.mail.watchHtml.path || this.mail.watchHtml.href || this.mail.watchHtml.raw)) { - watchHtml = this.mail.watchHtml; - } else { - watchHtml = { - content: this.mail.watchHtml - }; - } - watchHtml.contentType = "text/watch-html; charset=utf-8"; - } - if (this.mail.amp) { - if (typeof this.mail.amp === "object" && (this.mail.amp.content || this.mail.amp.path || this.mail.amp.href || this.mail.amp.raw)) { - amp = this.mail.amp; - } else { - amp = { - content: this.mail.amp - }; - } - amp.contentType = "text/x-amp-html; charset=utf-8"; - } - if (this.mail.icalEvent) { - if (typeof this.mail.icalEvent === "object" && (this.mail.icalEvent.content || this.mail.icalEvent.path || this.mail.icalEvent.href || this.mail.icalEvent.raw)) { - icalEvent = this.mail.icalEvent; - } else { - icalEvent = { - content: this.mail.icalEvent - }; - } - eventObject = {}; - Object.keys(icalEvent).forEach((key) => { - eventObject[key] = icalEvent[key]; - }); - if (eventObject.content && typeof eventObject.content === "object") { - eventObject.content._resolve = true; - } - eventObject.filename = false; - eventObject.contentType = "text/calendar; charset=utf-8; method=" + (eventObject.method || "PUBLISH").toString().trim().toUpperCase(); - if (!eventObject.headers) { - eventObject.headers = {}; - } - } - if (this.mail.html) { - if (typeof this.mail.html === "object" && (this.mail.html.content || this.mail.html.path || this.mail.html.href || this.mail.html.raw)) { - html = this.mail.html; - } else { - html = { - content: this.mail.html - }; - } - html.contentType = "text/html; charset=utf-8"; - } - [].concat(text || []).concat(watchHtml || []).concat(amp || []).concat(html || []).concat(eventObject || []).concat(this.mail.alternatives || []).forEach((alternative) => { - let data; - if (/^data:/i.test(alternative.path || alternative.href)) { - alternative = this._processDataUrl(alternative); - } - data = { - contentType: alternative.contentType || mimeFuncs.detectMimeType(alternative.filename || alternative.path || alternative.href || "txt"), - contentTransferEncoding: alternative.contentTransferEncoding - }; - if (alternative.filename) { - data.filename = alternative.filename; - } - if (/^https?:\/\//i.test(alternative.path)) { - alternative.href = alternative.path; - alternative.path = undefined; - } - if (alternative.raw) { - data.raw = alternative.raw; - } else if (alternative.path) { - data.content = { - path: alternative.path - }; - } else if (alternative.href) { - data.content = { - href: alternative.href - }; - } else { - data.content = alternative.content || ""; - } - if (alternative.encoding) { - data.encoding = alternative.encoding; - } - if (alternative.headers) { - data.headers = alternative.headers; - } - alternatives.push(data); - }); - return alternatives; - } - _createMixed(parentNode) { - let node; - if (!parentNode) { - node = new MimeNode("multipart/mixed", { - baseBoundary: this.mail.baseBoundary, - textEncoding: this.mail.textEncoding, - boundaryPrefix: this.mail.boundaryPrefix, - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } else { - node = parentNode.createChild("multipart/mixed", { - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } - if (this._useAlternative) { - this._createAlternative(node); - } else if (this._useRelated) { - this._createRelated(node); - } - [].concat(!this._useAlternative && this._alternatives || []).concat(this._attachments.attached || []).forEach((element) => { - if (!this._useRelated || element !== this._htmlNode) { - this._createContentNode(node, element); - } - }); - return node; - } - _createAlternative(parentNode) { - let node; - if (!parentNode) { - node = new MimeNode("multipart/alternative", { - baseBoundary: this.mail.baseBoundary, - textEncoding: this.mail.textEncoding, - boundaryPrefix: this.mail.boundaryPrefix, - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } else { - node = parentNode.createChild("multipart/alternative", { - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } - this._alternatives.forEach((alternative) => { - if (this._useRelated && this._htmlNode === alternative) { - this._createRelated(node); - } else { - this._createContentNode(node, alternative); - } - }); - return node; - } - _createRelated(parentNode) { - let node; - if (!parentNode) { - node = new MimeNode('multipart/related; type="text/html"', { - baseBoundary: this.mail.baseBoundary, - textEncoding: this.mail.textEncoding, - boundaryPrefix: this.mail.boundaryPrefix, - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } else { - node = parentNode.createChild('multipart/related; type="text/html"', { - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } - this._createContentNode(node, this._htmlNode); - this._attachments.related.forEach((alternative) => this._createContentNode(node, alternative)); - return node; - } - _createContentNode(parentNode, element) { - element = element || {}; - element.content = element.content || ""; - let node; - let encoding = (element.encoding || "utf8").toString().toLowerCase().replace(/[-_\s]/g, ""); - if (!parentNode) { - node = new MimeNode(element.contentType, { - filename: element.filename, - baseBoundary: this.mail.baseBoundary, - textEncoding: this.mail.textEncoding, - boundaryPrefix: this.mail.boundaryPrefix, - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } else { - node = parentNode.createChild(element.contentType, { - filename: element.filename, - textEncoding: this.mail.textEncoding, - disableUrlAccess: this.mail.disableUrlAccess, - disableFileAccess: this.mail.disableFileAccess, - normalizeHeaderKey: this.mail.normalizeHeaderKey, - newline: this.mail.newline - }); - } - if (element.headers) { - node.addHeader(element.headers); - } - if (element.cid) { - node.setHeader("Content-Id", "<" + element.cid.replace(/[<>]/g, "") + ">"); - } - if (element.contentTransferEncoding) { - node.setHeader("Content-Transfer-Encoding", element.contentTransferEncoding); - } else if (this.mail.encoding && /^text\//i.test(element.contentType)) { - node.setHeader("Content-Transfer-Encoding", this.mail.encoding); - } - if (!/^text\//i.test(element.contentType) || element.contentDisposition) { - node.setHeader("Content-Disposition", element.contentDisposition || (element.cid && /^image\//i.test(element.contentType) ? "inline" : "attachment")); - } - if (typeof element.content === "string" && !["utf8", "usascii", "ascii"].includes(encoding)) { - element.content = Buffer.from(element.content, encoding); - } - if (element.raw) { - node.setRaw(element.raw); - } else { - node.setContent(element.content); - } - return node; - } - _processDataUrl(element) { - let parsedDataUri; - if ((element.path || element.href).match(/^data:/)) { - parsedDataUri = parseDataURI(element.path || element.href); - } - if (!parsedDataUri) { - return element; - } - element.content = parsedDataUri.data; - element.contentType = element.contentType || parsedDataUri.contentType; - if ("path" in element) { - element.path = false; - } - if ("href" in element) { - element.href = false; - } - return element; - } - } - module.exports = MailComposer; -}); - -// node_modules/nodemailer/lib/dkim/message-parser.js -var require_message_parser = __commonJS((exports, module) => { - var Transform = __require("stream").Transform; - - class MessageParser extends Transform { - constructor(options) { - super(options); - this.lastBytes = Buffer.alloc(4); - this.headersParsed = false; - this.headerBytes = 0; - this.headerChunks = []; - this.rawHeaders = false; - this.bodySize = 0; - } - updateLastBytes(data) { - let lblen = this.lastBytes.length; - let nblen = Math.min(data.length, lblen); - for (let i = 0, len = lblen - nblen;i < len; i++) { - this.lastBytes[i] = this.lastBytes[i + nblen]; - } - for (let i = 1;i <= nblen; i++) { - this.lastBytes[lblen - i] = data[data.length - i]; - } - } - checkHeaders(data) { - if (this.headersParsed) { - return true; - } - let lblen = this.lastBytes.length; - let headerPos = 0; - this.curLinePos = 0; - for (let i = 0, len = this.lastBytes.length + data.length;i < len; i++) { - let chr; - if (i < lblen) { - chr = this.lastBytes[i]; - } else { - chr = data[i - lblen]; - } - if (chr === 10 && i) { - let pr1 = i - 1 < lblen ? this.lastBytes[i - 1] : data[i - 1 - lblen]; - let pr2 = i > 1 ? i - 2 < lblen ? this.lastBytes[i - 2] : data[i - 2 - lblen] : false; - if (pr1 === 10) { - this.headersParsed = true; - headerPos = i - lblen + 1; - this.headerBytes += headerPos; - break; - } else if (pr1 === 13 && pr2 === 10) { - this.headersParsed = true; - headerPos = i - lblen + 1; - this.headerBytes += headerPos; - break; - } - } - } - if (this.headersParsed) { - this.headerChunks.push(data.slice(0, headerPos)); - this.rawHeaders = Buffer.concat(this.headerChunks, this.headerBytes); - this.headerChunks = null; - this.emit("headers", this.parseHeaders()); - if (data.length - 1 > headerPos) { - let chunk = data.slice(headerPos); - this.bodySize += chunk.length; - setImmediate(() => this.push(chunk)); - } - return false; - } else { - this.headerBytes += data.length; - this.headerChunks.push(data); - } - this.updateLastBytes(data); - return false; - } - _transform(chunk, encoding, callback) { - if (!chunk || !chunk.length) { - return callback(); - } - if (typeof chunk === "string") { - chunk = Buffer.from(chunk, encoding); - } - let headersFound; - try { - headersFound = this.checkHeaders(chunk); - } catch (E) { - return callback(E); - } - if (headersFound) { - this.bodySize += chunk.length; - this.push(chunk); - } - setImmediate(callback); - } - _flush(callback) { - if (this.headerChunks) { - let chunk = Buffer.concat(this.headerChunks, this.headerBytes); - this.bodySize += chunk.length; - this.push(chunk); - this.headerChunks = null; - } - callback(); - } - parseHeaders() { - let lines = (this.rawHeaders || "").toString().split(/\r?\n/); - for (let i = lines.length - 1;i > 0; i--) { - if (/^\s/.test(lines[i])) { - lines[i - 1] += "\n" + lines[i]; - lines.splice(i, 1); - } - } - return lines.filter((line) => line.trim()).map((line) => ({ - key: line.substr(0, line.indexOf(":")).trim().toLowerCase(), - line - })); - } - } - module.exports = MessageParser; -}); - -// node_modules/nodemailer/lib/dkim/relaxed-body.js -var require_relaxed_body = __commonJS((exports, module) => { - var Transform = __require("stream").Transform; - var crypto2 = __require("crypto"); - - class RelaxedBody extends Transform { - constructor(options) { - super(); - options = options || {}; - this.chunkBuffer = []; - this.chunkBufferLen = 0; - this.bodyHash = crypto2.createHash(options.hashAlgo || "sha1"); - this.remainder = ""; - this.byteLength = 0; - this.debug = options.debug; - this._debugBody = options.debug ? [] : false; - } - updateHash(chunk) { - let bodyStr; - let nextRemainder = ""; - let state = "file"; - for (let i = chunk.length - 1;i >= 0; i--) { - let c = chunk[i]; - if (state === "file" && (c === 10 || c === 13)) { - } else if (state === "file" && (c === 9 || c === 32)) { - state = "line"; - } else if (state === "line" && (c === 9 || c === 32)) { - } else if (state === "file" || state === "line") { - state = "body"; - if (i === chunk.length - 1) { - break; - } - } - if (i === 0) { - if (state === "file" && (!this.remainder || /[\r\n]$/.test(this.remainder)) || state === "line" && (!this.remainder || /[ \t]$/.test(this.remainder))) { - this.remainder += chunk.toString("binary"); - return; - } else if (state === "line" || state === "file") { - nextRemainder = chunk.toString("binary"); - chunk = false; - break; - } - } - if (state !== "body") { - continue; - } - nextRemainder = chunk.slice(i + 1).toString("binary"); - chunk = chunk.slice(0, i + 1); - break; - } - let needsFixing = !!this.remainder; - if (chunk && !needsFixing) { - for (let i = 0, len = chunk.length;i < len; i++) { - if (i && chunk[i] === 10 && chunk[i - 1] !== 13) { - needsFixing = true; - break; - } else if (i && chunk[i] === 13 && chunk[i - 1] === 32) { - needsFixing = true; - break; - } else if (i && chunk[i] === 32 && chunk[i - 1] === 32) { - needsFixing = true; - break; - } else if (chunk[i] === 9) { - needsFixing = true; - break; - } - } - } - if (needsFixing) { - bodyStr = this.remainder + (chunk ? chunk.toString("binary") : ""); - this.remainder = nextRemainder; - bodyStr = bodyStr.replace(/\r?\n/g, "\n").replace(/[ \t]*$/gm, "").replace(/[ \t]+/gm, " ").replace(/\n/g, "\r\n"); - chunk = Buffer.from(bodyStr, "binary"); - } else if (nextRemainder) { - this.remainder = nextRemainder; - } - if (this.debug) { - this._debugBody.push(chunk); - } - this.bodyHash.update(chunk); - } - _transform(chunk, encoding, callback) { - if (!chunk || !chunk.length) { - return callback(); - } - if (typeof chunk === "string") { - chunk = Buffer.from(chunk, encoding); - } - this.updateHash(chunk); - this.byteLength += chunk.length; - this.push(chunk); - callback(); - } - _flush(callback) { - if (/[\r\n]$/.test(this.remainder) && this.byteLength > 2) { - this.bodyHash.update(Buffer.from("\r\n")); - } - if (!this.byteLength) { - this.push(Buffer.from("\r\n")); - } - this.emit("hash", this.bodyHash.digest("base64"), this.debug ? Buffer.concat(this._debugBody) : false); - callback(); - } - } - module.exports = RelaxedBody; -}); - -// node_modules/nodemailer/lib/dkim/sign.js -var require_sign = __commonJS((exports, module) => { - var punycode = require_punycode(); - var mimeFuncs = require_mime_funcs(); - var crypto2 = __require("crypto"); - module.exports = (headers, hashAlgo, bodyHash, options) => { - options = options || {}; - let defaultFieldNames = "From:Sender:Reply-To:Subject:Date:Message-ID:To:" + "Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:" + "Content-Description:Resent-Date:Resent-From:Resent-Sender:" + "Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:" + "List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:" + "List-Owner:List-Archive"; - let fieldNames = options.headerFieldNames || defaultFieldNames; - let canonicalizedHeaderData = relaxedHeaders(headers, fieldNames, options.skipFields); - let dkimHeader = generateDKIMHeader(options.domainName, options.keySelector, canonicalizedHeaderData.fieldNames, hashAlgo, bodyHash); - let signer, signature; - canonicalizedHeaderData.headers += "dkim-signature:" + relaxedHeaderLine(dkimHeader); - signer = crypto2.createSign(("rsa-" + hashAlgo).toUpperCase()); - signer.update(canonicalizedHeaderData.headers); - try { - signature = signer.sign(options.privateKey, "base64"); - } catch (E) { - return false; - } - return dkimHeader + signature.replace(/(^.{73}|.{75}(?!\r?\n|\r))/g, "$&\r\n ").trim(); - }; - module.exports.relaxedHeaders = relaxedHeaders; - function generateDKIMHeader(domainName, keySelector, fieldNames, hashAlgo, bodyHash) { - let dkim = [ - "v=1", - "a=rsa-" + hashAlgo, - "c=relaxed/relaxed", - "d=" + punycode.toASCII(domainName), - "q=dns/txt", - "s=" + keySelector, - "bh=" + bodyHash, - "h=" + fieldNames - ].join("; "); - return mimeFuncs.foldLines("DKIM-Signature: " + dkim, 76) + ";\r\n b="; - } - function relaxedHeaders(headers, fieldNames, skipFields) { - let includedFields = new Set; - let skip = new Set; - let headerFields = new Map; - (skipFields || "").toLowerCase().split(":").forEach((field) => { - skip.add(field.trim()); - }); - (fieldNames || "").toLowerCase().split(":").filter((field) => !skip.has(field.trim())).forEach((field) => { - includedFields.add(field.trim()); - }); - for (let i = headers.length - 1;i >= 0; i--) { - let line = headers[i]; - if (includedFields.has(line.key) && !headerFields.has(line.key)) { - headerFields.set(line.key, relaxedHeaderLine(line.line)); - } - } - let headersList = []; - let fields = []; - includedFields.forEach((field) => { - if (headerFields.has(field)) { - fields.push(field); - headersList.push(field + ":" + headerFields.get(field)); - } - }); - return { - headers: headersList.join("\r\n") + "\r\n", - fieldNames: fields.join(":") - }; - } - function relaxedHeaderLine(line) { - return line.substr(line.indexOf(":") + 1).replace(/\r?\n/g, "").replace(/\s+/g, " ").trim(); - } -}); - -// node_modules/nodemailer/lib/dkim/index.js -var require_dkim = __commonJS((exports, module) => { - var MessageParser = require_message_parser(); - var RelaxedBody = require_relaxed_body(); - var sign = require_sign(); - var PassThrough = __require("stream").PassThrough; - var fs15 = __require("fs"); - var path11 = __require("path"); - var crypto2 = __require("crypto"); - var DKIM_ALGO = "sha256"; - var MAX_MESSAGE_SIZE = 128 * 1024; - - class DKIMSigner { - constructor(options, keys, input, output) { - this.options = options || {}; - this.keys = keys; - this.cacheTreshold = Number(this.options.cacheTreshold) || MAX_MESSAGE_SIZE; - this.hashAlgo = this.options.hashAlgo || DKIM_ALGO; - this.cacheDir = this.options.cacheDir || false; - this.chunks = []; - this.chunklen = 0; - this.readPos = 0; - this.cachePath = this.cacheDir ? path11.join(this.cacheDir, "message." + Date.now() + "-" + crypto2.randomBytes(14).toString("hex")) : false; - this.cache = false; - this.headers = false; - this.bodyHash = false; - this.parser = false; - this.relaxedBody = false; - this.input = input; - this.output = output; - this.output.usingCache = false; - this.hasErrored = false; - this.input.on("error", (err) => { - this.hasErrored = true; - this.cleanup(); - output.emit("error", err); - }); - } - cleanup() { - if (!this.cache || !this.cachePath) { - return; - } - fs15.unlink(this.cachePath, () => false); - } - createReadCache() { - this.cache = fs15.createReadStream(this.cachePath); - this.cache.once("error", (err) => { - this.cleanup(); - this.output.emit("error", err); - }); - this.cache.once("close", () => { - this.cleanup(); - }); - this.cache.pipe(this.output); - } - sendNextChunk() { - if (this.hasErrored) { - return; - } - if (this.readPos >= this.chunks.length) { - if (!this.cache) { - return this.output.end(); - } - return this.createReadCache(); - } - let chunk = this.chunks[this.readPos++]; - if (this.output.write(chunk) === false) { - return this.output.once("drain", () => { - this.sendNextChunk(); - }); - } - setImmediate(() => this.sendNextChunk()); - } - sendSignedOutput() { - let keyPos = 0; - let signNextKey = () => { - if (keyPos >= this.keys.length) { - this.output.write(this.parser.rawHeaders); - return setImmediate(() => this.sendNextChunk()); - } - let key = this.keys[keyPos++]; - let dkimField = sign(this.headers, this.hashAlgo, this.bodyHash, { - domainName: key.domainName, - keySelector: key.keySelector, - privateKey: key.privateKey, - headerFieldNames: this.options.headerFieldNames, - skipFields: this.options.skipFields - }); - if (dkimField) { - this.output.write(Buffer.from(dkimField + "\r\n")); - } - return setImmediate(signNextKey); - }; - if (this.bodyHash && this.headers) { - return signNextKey(); - } - this.output.write(this.parser.rawHeaders); - this.sendNextChunk(); - } - createWriteCache() { - this.output.usingCache = true; - this.cache = fs15.createWriteStream(this.cachePath); - this.cache.once("error", (err) => { - this.cleanup(); - this.relaxedBody.unpipe(this.cache); - this.relaxedBody.on("readable", () => { - while (this.relaxedBody.read() !== null) { - } - }); - this.hasErrored = true; - this.output.emit("error", err); - }); - this.cache.once("close", () => { - this.sendSignedOutput(); - }); - this.relaxedBody.removeAllListeners("readable"); - this.relaxedBody.pipe(this.cache); - } - signStream() { - this.parser = new MessageParser; - this.relaxedBody = new RelaxedBody({ - hashAlgo: this.hashAlgo - }); - this.parser.on("headers", (value) => { - this.headers = value; - }); - this.relaxedBody.on("hash", (value) => { - this.bodyHash = value; - }); - this.relaxedBody.on("readable", () => { - let chunk; - if (this.cache) { - return; - } - while ((chunk = this.relaxedBody.read()) !== null) { - this.chunks.push(chunk); - this.chunklen += chunk.length; - if (this.chunklen >= this.cacheTreshold && this.cachePath) { - return this.createWriteCache(); - } - } - }); - this.relaxedBody.on("end", () => { - if (this.cache) { - return; - } - this.sendSignedOutput(); - }); - this.parser.pipe(this.relaxedBody); - setImmediate(() => this.input.pipe(this.parser)); - } - } - - class DKIM { - constructor(options) { - this.options = options || {}; - this.keys = [].concat(this.options.keys || { - domainName: options.domainName, - keySelector: options.keySelector, - privateKey: options.privateKey - }); - } - sign(input, extraOptions) { - let output = new PassThrough; - let inputStream = input; - let writeValue = false; - if (Buffer.isBuffer(input)) { - writeValue = input; - inputStream = new PassThrough; - } else if (typeof input === "string") { - writeValue = Buffer.from(input); - inputStream = new PassThrough; - } - let options = this.options; - if (extraOptions && Object.keys(extraOptions).length) { - options = {}; - Object.keys(this.options || {}).forEach((key) => { - options[key] = this.options[key]; - }); - Object.keys(extraOptions || {}).forEach((key) => { - if (!(key in options)) { - options[key] = extraOptions[key]; - } - }); - } - let signer = new DKIMSigner(options, this.keys, inputStream, output); - setImmediate(() => { - signer.signStream(); - if (writeValue) { - setImmediate(() => { - inputStream.end(writeValue); - }); - } - }); - return output; - } - } - module.exports = DKIM; -}); - -// node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js -var require_http_proxy_client = __commonJS((exports, module) => { - var net = __require("net"); - var tls = __require("tls"); - var urllib = __require("url"); - function httpProxyClient(proxyUrl, destinationPort, destinationHost, callback) { - let proxy = urllib.parse(proxyUrl); - let options; - let connect; - let socket; - options = { - host: proxy.hostname, - port: Number(proxy.port) ? Number(proxy.port) : proxy.protocol === "https:" ? 443 : 80 - }; - if (proxy.protocol === "https:") { - options.rejectUnauthorized = false; - connect = tls.connect.bind(tls); - } else { - connect = net.connect.bind(net); - } - let finished = false; - let tempSocketErr = (err) => { - if (finished) { - return; - } - finished = true; - try { - socket.destroy(); - } catch (E) { - } - callback(err); - }; - let timeoutErr = () => { - let err = new Error("Proxy socket timed out"); - err.code = "ETIMEDOUT"; - tempSocketErr(err); - }; - socket = connect(options, () => { - if (finished) { - return; - } - let reqHeaders = { - Host: destinationHost + ":" + destinationPort, - Connection: "close" - }; - if (proxy.auth) { - reqHeaders["Proxy-Authorization"] = "Basic " + Buffer.from(proxy.auth).toString("base64"); - } - socket.write("CONNECT " + destinationHost + ":" + destinationPort + " HTTP/1.1\r\n" + Object.keys(reqHeaders).map((key) => key + ": " + reqHeaders[key]).join("\r\n") + "\r\n\r\n"); - let headers = ""; - let onSocketData = (chunk) => { - let match; - let remainder; - if (finished) { - return; - } - headers += chunk.toString("binary"); - if (match = headers.match(/\r\n\r\n/)) { - socket.removeListener("data", onSocketData); - remainder = headers.substr(match.index + match[0].length); - headers = headers.substr(0, match.index); - if (remainder) { - socket.unshift(Buffer.from(remainder, "binary")); - } - finished = true; - match = headers.match(/^HTTP\/\d+\.\d+ (\d+)/i); - if (!match || (match[1] || "").charAt(0) !== "2") { - try { - socket.destroy(); - } catch (E) { - } - return callback(new Error("Invalid response from proxy" + (match && ": " + match[1] || ""))); - } - socket.removeListener("error", tempSocketErr); - socket.removeListener("timeout", timeoutErr); - socket.setTimeout(0); - return callback(null, socket); - } - }; - socket.on("data", onSocketData); - }); - socket.setTimeout(httpProxyClient.timeout || 30 * 1000); - socket.on("timeout", timeoutErr); - socket.once("error", tempSocketErr); - } - module.exports = httpProxyClient; -}); - -// node_modules/nodemailer/lib/mailer/mail-message.js -var require_mail_message = __commonJS((exports, module) => { - var shared = require_shared(); - var MimeNode = require_mime_node(); - var mimeFuncs = require_mime_funcs(); - - class MailMessage { - constructor(mailer, data) { - this.mailer = mailer; - this.data = {}; - this.message = null; - data = data || {}; - let options = mailer.options || {}; - let defaults = mailer._defaults || {}; - Object.keys(data).forEach((key) => { - this.data[key] = data[key]; - }); - this.data.headers = this.data.headers || {}; - Object.keys(defaults).forEach((key) => { - if (!(key in this.data)) { - this.data[key] = defaults[key]; - } else if (key === "headers") { - Object.keys(defaults.headers).forEach((key2) => { - if (!(key2 in this.data.headers)) { - this.data.headers[key2] = defaults.headers[key2]; - } - }); - } - }); - ["disableFileAccess", "disableUrlAccess", "normalizeHeaderKey"].forEach((key) => { - if (key in options) { - this.data[key] = options[key]; - } - }); - } - resolveContent(...args) { - return shared.resolveContent(...args); - } - resolveAll(callback) { - let keys = [ - [this.data, "html"], - [this.data, "text"], - [this.data, "watchHtml"], - [this.data, "amp"], - [this.data, "icalEvent"] - ]; - if (this.data.alternatives && this.data.alternatives.length) { - this.data.alternatives.forEach((alternative, i) => { - keys.push([this.data.alternatives, i]); - }); - } - if (this.data.attachments && this.data.attachments.length) { - this.data.attachments.forEach((attachment, i) => { - if (!attachment.filename) { - attachment.filename = (attachment.path || attachment.href || "").split("/").pop().split("?").shift() || "attachment-" + (i + 1); - if (attachment.filename.indexOf(".") < 0) { - attachment.filename += "." + mimeFuncs.detectExtension(attachment.contentType); - } - } - if (!attachment.contentType) { - attachment.contentType = mimeFuncs.detectMimeType(attachment.filename || attachment.path || attachment.href || "bin"); - } - keys.push([this.data.attachments, i]); - }); - } - let mimeNode = new MimeNode; - let addressKeys = ["from", "to", "cc", "bcc", "sender", "replyTo"]; - addressKeys.forEach((address) => { - let value; - if (this.message) { - value = [].concat(mimeNode._parseAddresses(this.message.getHeader(address === "replyTo" ? "reply-to" : address)) || []); - } else if (this.data[address]) { - value = [].concat(mimeNode._parseAddresses(this.data[address]) || []); - } - if (value && value.length) { - this.data[address] = value; - } else if (address in this.data) { - this.data[address] = null; - } - }); - let singleKeys = ["from", "sender"]; - singleKeys.forEach((address) => { - if (this.data[address]) { - this.data[address] = this.data[address].shift(); - } - }); - let pos = 0; - let resolveNext = () => { - if (pos >= keys.length) { - return callback(null, this.data); - } - let args = keys[pos++]; - if (!args[0] || !args[0][args[1]]) { - return resolveNext(); - } - shared.resolveContent(...args, (err, value) => { - if (err) { - return callback(err); - } - let node = { - content: value - }; - if (args[0][args[1]] && typeof args[0][args[1]] === "object" && !Buffer.isBuffer(args[0][args[1]])) { - Object.keys(args[0][args[1]]).forEach((key) => { - if (!(key in node) && !["content", "path", "href", "raw"].includes(key)) { - node[key] = args[0][args[1]][key]; - } - }); - } - args[0][args[1]] = node; - resolveNext(); - }); - }; - setImmediate(() => resolveNext()); - } - normalize(callback) { - let envelope = this.data.envelope || this.message.getEnvelope(); - let messageId = this.message.messageId(); - this.resolveAll((err, data) => { - if (err) { - return callback(err); - } - data.envelope = envelope; - data.messageId = messageId; - ["html", "text", "watchHtml", "amp"].forEach((key) => { - if (data[key] && data[key].content) { - if (typeof data[key].content === "string") { - data[key] = data[key].content; - } else if (Buffer.isBuffer(data[key].content)) { - data[key] = data[key].content.toString(); - } - } - }); - if (data.icalEvent && Buffer.isBuffer(data.icalEvent.content)) { - data.icalEvent.content = data.icalEvent.content.toString("base64"); - data.icalEvent.encoding = "base64"; - } - if (data.alternatives && data.alternatives.length) { - data.alternatives.forEach((alternative) => { - if (alternative && alternative.content && Buffer.isBuffer(alternative.content)) { - alternative.content = alternative.content.toString("base64"); - alternative.encoding = "base64"; - } - }); - } - if (data.attachments && data.attachments.length) { - data.attachments.forEach((attachment) => { - if (attachment && attachment.content && Buffer.isBuffer(attachment.content)) { - attachment.content = attachment.content.toString("base64"); - attachment.encoding = "base64"; - } - }); - } - data.normalizedHeaders = {}; - Object.keys(data.headers || {}).forEach((key) => { - let value = [].concat(data.headers[key] || []).shift(); - value = value && value.value || value; - if (value) { - if (["references", "in-reply-to", "message-id", "content-id"].includes(key)) { - value = this.message._encodeHeaderValue(key, value); - } - data.normalizedHeaders[key] = value; - } - }); - if (data.list && typeof data.list === "object") { - let listHeaders = this._getListHeaders(data.list); - listHeaders.forEach((entry) => { - data.normalizedHeaders[entry.key] = entry.value.map((val) => val && val.value || val).join(", "); - }); - } - if (data.references) { - data.normalizedHeaders.references = this.message._encodeHeaderValue("references", data.references); - } - if (data.inReplyTo) { - data.normalizedHeaders["in-reply-to"] = this.message._encodeHeaderValue("in-reply-to", data.inReplyTo); - } - return callback(null, data); - }); - } - setMailerHeader() { - if (!this.message || !this.data.xMailer) { - return; - } - this.message.setHeader("X-Mailer", this.data.xMailer); - } - setPriorityHeaders() { - if (!this.message || !this.data.priority) { - return; - } - switch ((this.data.priority || "").toString().toLowerCase()) { - case "high": - this.message.setHeader("X-Priority", "1 (Highest)"); - this.message.setHeader("X-MSMail-Priority", "High"); - this.message.setHeader("Importance", "High"); - break; - case "low": - this.message.setHeader("X-Priority", "5 (Lowest)"); - this.message.setHeader("X-MSMail-Priority", "Low"); - this.message.setHeader("Importance", "Low"); - break; - default: - } - } - setListHeaders() { - if (!this.message || !this.data.list || typeof this.data.list !== "object") { - return; - } - if (this.data.list && typeof this.data.list === "object") { - this._getListHeaders(this.data.list).forEach((listHeader) => { - listHeader.value.forEach((value) => { - this.message.addHeader(listHeader.key, value); - }); - }); - } - } - _getListHeaders(listData) { - return Object.keys(listData).map((key) => ({ - key: "list-" + key.toLowerCase().trim(), - value: [].concat(listData[key] || []).map((value) => ({ - prepared: true, - foldLines: true, - value: [].concat(value || []).map((value2) => { - if (typeof value2 === "string") { - value2 = { - url: value2 - }; - } - if (value2 && value2.url) { - if (key.toLowerCase().trim() === "id") { - let comment2 = value2.comment || ""; - if (mimeFuncs.isPlainText(comment2)) { - comment2 = '"' + comment2 + '"'; - } else { - comment2 = mimeFuncs.encodeWord(comment2); - } - return (value2.comment ? comment2 + " " : "") + this._formatListUrl(value2.url).replace(/^<[^:]+\/{,2}/, ""); - } - let comment = value2.comment || ""; - if (!mimeFuncs.isPlainText(comment)) { - comment = mimeFuncs.encodeWord(comment); - } - return this._formatListUrl(value2.url) + (value2.comment ? " (" + comment + ")" : ""); - } - return ""; - }).filter((value2) => value2).join(", ") - })) - })); - } - _formatListUrl(url) { - url = url.replace(/[\s<]+|[\s>]+/g, ""); - if (/^(https?|mailto|ftp):/.test(url)) { - return "<" + url + ">"; - } - if (/^[^@]+@[^@]+$/.test(url)) { - return ""; - } - return ""; - } - } - module.exports = MailMessage; -}); - -// node_modules/nodemailer/lib/mailer/index.js -var require_mailer = __commonJS((exports, module) => { - var EventEmitter = __require("events"); - var shared = require_shared(); - var mimeTypes = require_mime_types(); - var MailComposer = require_mail_composer(); - var DKIM = require_dkim(); - var httpProxyClient = require_http_proxy_client(); - var util = __require("util"); - var urllib = __require("url"); - var packageData = require_package2(); - var MailMessage = require_mail_message(); - var net = __require("net"); - var dns = __require("dns"); - var crypto2 = __require("crypto"); - - class Mail extends EventEmitter { - constructor(transporter, options, defaults) { - super(); - this.options = options || {}; - this._defaults = defaults || {}; - this._defaultPlugins = { - compile: [(...args) => this._convertDataImages(...args)], - stream: [] - }; - this._userPlugins = { - compile: [], - stream: [] - }; - this.meta = new Map; - this.dkim = this.options.dkim ? new DKIM(this.options.dkim) : false; - this.transporter = transporter; - this.transporter.mailer = this; - this.logger = shared.getLogger(this.options, { - component: this.options.component || "mail" - }); - this.logger.debug({ - tnx: "create" - }, "Creating transport: %s", this.getVersionString()); - if (typeof this.transporter.on === "function") { - this.transporter.on("log", (log) => { - this.logger.debug({ - tnx: "transport" - }, "%s: %s", log.type, log.message); - }); - this.transporter.on("error", (err) => { - this.logger.error({ - err, - tnx: "transport" - }, "Transport Error: %s", err.message); - this.emit("error", err); - }); - this.transporter.on("idle", (...args) => { - this.emit("idle", ...args); - }); - } - ["close", "isIdle", "verify"].forEach((method) => { - this[method] = (...args) => { - if (typeof this.transporter[method] === "function") { - if (method === "verify" && typeof this.getSocket === "function") { - this.transporter.getSocket = this.getSocket; - this.getSocket = false; - } - return this.transporter[method](...args); - } else { - this.logger.warn({ - tnx: "transport", - methodName: method - }, "Non existing method %s called for transport", method); - return false; - } - }; - }); - if (this.options.proxy && typeof this.options.proxy === "string") { - this.setupProxy(this.options.proxy); - } - } - use(step, plugin) { - step = (step || "").toString(); - if (!this._userPlugins.hasOwnProperty(step)) { - this._userPlugins[step] = [plugin]; - } else { - this._userPlugins[step].push(plugin); - } - return this; - } - sendMail(data, callback = null) { - let promise; - if (!callback) { - promise = new Promise((resolve, reject) => { - callback = shared.callbackPromise(resolve, reject); - }); - } - if (typeof this.getSocket === "function") { - this.transporter.getSocket = this.getSocket; - this.getSocket = false; - } - let mail = new MailMessage(this, data); - this.logger.debug({ - tnx: "transport", - name: this.transporter.name, - version: this.transporter.version, - action: "send" - }, "Sending mail using %s/%s", this.transporter.name, this.transporter.version); - this._processPlugins("compile", mail, (err) => { - if (err) { - this.logger.error({ - err, - tnx: "plugin", - action: "compile" - }, "PluginCompile Error: %s", err.message); - return callback(err); - } - mail.message = new MailComposer(mail.data).compile(); - mail.setMailerHeader(); - mail.setPriorityHeaders(); - mail.setListHeaders(); - this._processPlugins("stream", mail, (err2) => { - if (err2) { - this.logger.error({ - err: err2, - tnx: "plugin", - action: "stream" - }, "PluginStream Error: %s", err2.message); - return callback(err2); - } - if (mail.data.dkim || this.dkim) { - mail.message.processFunc((input) => { - let dkim = mail.data.dkim ? new DKIM(mail.data.dkim) : this.dkim; - this.logger.debug({ - tnx: "DKIM", - messageId: mail.message.messageId(), - dkimDomains: dkim.keys.map((key) => key.keySelector + "." + key.domainName).join(", ") - }, "Signing outgoing message with %s keys", dkim.keys.length); - return dkim.sign(input, mail.data._dkim); - }); - } - this.transporter.send(mail, (...args) => { - if (args[0]) { - this.logger.error({ - err: args[0], - tnx: "transport", - action: "send" - }, "Send Error: %s", args[0].message); - } - callback(...args); - }); - }); - }); - return promise; - } - getVersionString() { - return util.format("%s (%s; +%s; %s/%s)", packageData.name, packageData.version, packageData.homepage, this.transporter.name, this.transporter.version); - } - _processPlugins(step, mail, callback) { - step = (step || "").toString(); - if (!this._userPlugins.hasOwnProperty(step)) { - return callback(); - } - let userPlugins = this._userPlugins[step] || []; - let defaultPlugins = this._defaultPlugins[step] || []; - if (userPlugins.length) { - this.logger.debug({ - tnx: "transaction", - pluginCount: userPlugins.length, - step - }, "Using %s plugins for %s", userPlugins.length, step); - } - if (userPlugins.length + defaultPlugins.length === 0) { - return callback(); - } - let pos = 0; - let block = "default"; - let processPlugins = () => { - let curplugins = block === "default" ? defaultPlugins : userPlugins; - if (pos >= curplugins.length) { - if (block === "default" && userPlugins.length) { - block = "user"; - pos = 0; - curplugins = userPlugins; - } else { - return callback(); - } - } - let plugin = curplugins[pos++]; - plugin(mail, (err) => { - if (err) { - return callback(err); - } - processPlugins(); - }); - }; - processPlugins(); - } - setupProxy(proxyUrl) { - let proxy = urllib.parse(proxyUrl); - this.getSocket = (options, callback) => { - let protocol = proxy.protocol.replace(/:$/, "").toLowerCase(); - if (this.meta.has("proxy_handler_" + protocol)) { - return this.meta.get("proxy_handler_" + protocol)(proxy, options, callback); - } - switch (protocol) { - case "http": - case "https": - httpProxyClient(proxy.href, options.port, options.host, (err, socket) => { - if (err) { - return callback(err); - } - return callback(null, { - connection: socket - }); - }); - return; - case "socks": - case "socks5": - case "socks4": - case "socks4a": { - if (!this.meta.has("proxy_socks_module")) { - return callback(new Error("Socks module not loaded")); - } - let connect = (ipaddress) => { - let proxyV2 = !!this.meta.get("proxy_socks_module").SocksClient; - let socksClient = proxyV2 ? this.meta.get("proxy_socks_module").SocksClient : this.meta.get("proxy_socks_module"); - let proxyType = Number(proxy.protocol.replace(/\D/g, "")) || 5; - let connectionOpts = { - proxy: { - ipaddress, - port: Number(proxy.port), - type: proxyType - }, - [proxyV2 ? "destination" : "target"]: { - host: options.host, - port: options.port - }, - command: "connect" - }; - if (proxy.auth) { - let username = decodeURIComponent(proxy.auth.split(":").shift()); - let password = decodeURIComponent(proxy.auth.split(":").pop()); - if (proxyV2) { - connectionOpts.proxy.userId = username; - connectionOpts.proxy.password = password; - } else if (proxyType === 4) { - connectionOpts.userid = username; - } else { - connectionOpts.authentication = { - username, - password - }; - } - } - socksClient.createConnection(connectionOpts, (err, info) => { - if (err) { - return callback(err); - } - return callback(null, { - connection: info.socket || info - }); - }); - }; - if (net.isIP(proxy.hostname)) { - return connect(proxy.hostname); - } - return dns.resolve(proxy.hostname, (err, address) => { - if (err) { - return callback(err); - } - connect(Array.isArray(address) ? address[0] : address); - }); - } - } - callback(new Error("Unknown proxy configuration")); - }; - } - _convertDataImages(mail, callback) { - if (!this.options.attachDataUrls && !mail.data.attachDataUrls || !mail.data.html) { - return callback(); - } - mail.resolveContent(mail.data, "html", (err, html) => { - if (err) { - return callback(err); - } - let cidCounter = 0; - html = (html || "").toString().replace(/(]{0,1024} src\s{0,20}=[\s"']{0,20})(data:([^;]+);[^"'>\s]+)/gi, (match, prefix, dataUri, mimeType) => { - let cid = crypto2.randomBytes(10).toString("hex") + "@localhost"; - if (!mail.data.attachments) { - mail.data.attachments = []; - } - if (!Array.isArray(mail.data.attachments)) { - mail.data.attachments = [].concat(mail.data.attachments || []); - } - mail.data.attachments.push({ - path: dataUri, - cid, - filename: "image-" + ++cidCounter + "." + mimeTypes.detectExtension(mimeType) - }); - return prefix + "cid:" + cid; - }); - mail.data.html = html; - callback(); - }); - } - set(key, value) { - return this.meta.set(key, value); - } - get(key) { - return this.meta.get(key); - } - } - module.exports = Mail; -}); - -// node_modules/nodemailer/lib/smtp-connection/data-stream.js -var require_data_stream = __commonJS((exports, module) => { - var stream = __require("stream"); - var Transform = stream.Transform; - - class DataStream extends Transform { - constructor(options) { - super(options); - this.options = options || {}; - this._curLine = ""; - this.inByteCount = 0; - this.outByteCount = 0; - this.lastByte = false; - } - _transform(chunk, encoding, done) { - let chunks = []; - let chunklen = 0; - let i, len, lastPos = 0; - let buf; - if (!chunk || !chunk.length) { - return done(); - } - if (typeof chunk === "string") { - chunk = Buffer.from(chunk); - } - this.inByteCount += chunk.length; - for (i = 0, len = chunk.length;i < len; i++) { - if (chunk[i] === 46) { - if (i && chunk[i - 1] === 10 || !i && (!this.lastByte || this.lastByte === 10)) { - buf = chunk.slice(lastPos, i + 1); - chunks.push(buf); - chunks.push(Buffer.from(".")); - chunklen += buf.length + 1; - lastPos = i + 1; - } - } else if (chunk[i] === 10) { - if (i && chunk[i - 1] !== 13 || !i && this.lastByte !== 13) { - if (i > lastPos) { - buf = chunk.slice(lastPos, i); - chunks.push(buf); - chunklen += buf.length + 2; - } else { - chunklen += 2; - } - chunks.push(Buffer.from("\r\n")); - lastPos = i + 1; - } - } - } - if (chunklen) { - if (lastPos < chunk.length) { - buf = chunk.slice(lastPos); - chunks.push(buf); - chunklen += buf.length; - } - this.outByteCount += chunklen; - this.push(Buffer.concat(chunks, chunklen)); - } else { - this.outByteCount += chunk.length; - this.push(chunk); - } - this.lastByte = chunk[chunk.length - 1]; - done(); - } - _flush(done) { - let buf; - if (this.lastByte === 10) { - buf = Buffer.from(".\r\n"); - } else if (this.lastByte === 13) { - buf = Buffer.from("\n.\r\n"); - } else { - buf = Buffer.from("\r\n.\r\n"); - } - this.outByteCount += buf.length; - this.push(buf); - done(); - } - } - module.exports = DataStream; -}); - -// node_modules/nodemailer/lib/smtp-connection/index.js -var require_smtp_connection = __commonJS((exports, module) => { - var packageInfo = require_package2(); - var EventEmitter = __require("events").EventEmitter; - var net = __require("net"); - var tls = __require("tls"); - var os = __require("os"); - var crypto2 = __require("crypto"); - var DataStream = require_data_stream(); - var PassThrough = __require("stream").PassThrough; - var shared = require_shared(); - var CONNECTION_TIMEOUT = 2 * 60 * 1000; - var SOCKET_TIMEOUT = 10 * 60 * 1000; - var GREETING_TIMEOUT = 30 * 1000; - var DNS_TIMEOUT = 30 * 1000; - - class SMTPConnection extends EventEmitter { - constructor(options) { - super(options); - this.id = crypto2.randomBytes(8).toString("base64").replace(/\W/g, ""); - this.stage = "init"; - this.options = options || {}; - this.secureConnection = !!this.options.secure; - this.alreadySecured = !!this.options.secured; - this.port = Number(this.options.port) || (this.secureConnection ? 465 : 587); - this.host = this.options.host || "localhost"; - this.servername = this.options.servername ? this.options.servername : !net.isIP(this.host) ? this.host : false; - this.allowInternalNetworkInterfaces = this.options.allowInternalNetworkInterfaces || false; - if (typeof this.options.secure === "undefined" && this.port === 465) { - this.secureConnection = true; - } - this.name = this.options.name || this._getHostname(); - this.logger = shared.getLogger(this.options, { - component: this.options.component || "smtp-connection", - sid: this.id - }); - this.customAuth = new Map; - Object.keys(this.options.customAuth || {}).forEach((key) => { - let mapKey = (key || "").toString().trim().toUpperCase(); - if (!mapKey) { - return; - } - this.customAuth.set(mapKey, this.options.customAuth[key]); - }); - this.version = packageInfo.version; - this.authenticated = false; - this.destroyed = false; - this.secure = !!this.secureConnection; - this._remainder = ""; - this._responseQueue = []; - this.lastServerResponse = false; - this._socket = false; - this._supportedAuth = []; - this.allowsAuth = false; - this._envelope = false; - this._supportedExtensions = []; - this._maxAllowedSize = 0; - this._responseActions = []; - this._recipientQueue = []; - this._greetingTimeout = false; - this._connectionTimeout = false; - this._destroyed = false; - this._closing = false; - this._onSocketData = (chunk) => this._onData(chunk); - this._onSocketError = (error) => this._onError(error, "ESOCKET", false, "CONN"); - this._onSocketClose = () => this._onClose(); - this._onSocketEnd = () => this._onEnd(); - this._onSocketTimeout = () => this._onTimeout(); - } - connect(connectCallback) { - if (typeof connectCallback === "function") { - this.once("connect", () => { - this.logger.debug({ - tnx: "smtp" - }, "SMTP handshake finished"); - connectCallback(); - }); - const isDestroyedMessage = this._isDestroyedMessage("connect"); - if (isDestroyedMessage) { - return connectCallback(this._formatError(isDestroyedMessage, "ECONNECTION", false, "CONN")); - } - } - let opts = { - port: this.port, - host: this.host, - allowInternalNetworkInterfaces: this.allowInternalNetworkInterfaces, - timeout: this.options.dnsTimeout || DNS_TIMEOUT - }; - if (this.options.localAddress) { - opts.localAddress = this.options.localAddress; - } - let setupConnectionHandlers = () => { - this._connectionTimeout = setTimeout(() => { - this._onError("Connection timeout", "ETIMEDOUT", false, "CONN"); - }, this.options.connectionTimeout || CONNECTION_TIMEOUT); - this._socket.on("error", this._onSocketError); - }; - if (this.options.connection) { - this._socket = this.options.connection; - if (this.secureConnection && !this.alreadySecured) { - setImmediate(() => this._upgradeConnection((err) => { - if (err) { - this._onError(new Error("Error initiating TLS - " + (err.message || err)), "ETLS", false, "CONN"); - return; - } - this._onConnect(); - })); - } else { - setImmediate(() => this._onConnect()); - } - return; - } else if (this.options.socket) { - this._socket = this.options.socket; - return shared.resolveHostname(opts, (err, resolved) => { - if (err) { - return setImmediate(() => this._onError(err, "EDNS", false, "CONN")); - } - this.logger.debug({ - tnx: "dns", - source: opts.host, - resolved: resolved.host, - cached: !!resolved.cached - }, "Resolved %s as %s [cache %s]", opts.host, resolved.host, resolved.cached ? "hit" : "miss"); - Object.keys(resolved).forEach((key) => { - if (key.charAt(0) !== "_" && resolved[key]) { - opts[key] = resolved[key]; - } - }); - try { - this._socket.connect(this.port, this.host, () => { - this._socket.setKeepAlive(true); - this._onConnect(); - }); - setupConnectionHandlers(); - } catch (E) { - return setImmediate(() => this._onError(E, "ECONNECTION", false, "CONN")); - } - }); - } else if (this.secureConnection) { - if (this.options.tls) { - Object.keys(this.options.tls).forEach((key) => { - opts[key] = this.options.tls[key]; - }); - } - if (this.servername && !opts.servername) { - opts.servername = this.servername; - } - return shared.resolveHostname(opts, (err, resolved) => { - if (err) { - return setImmediate(() => this._onError(err, "EDNS", false, "CONN")); - } - this.logger.debug({ - tnx: "dns", - source: opts.host, - resolved: resolved.host, - cached: !!resolved.cached - }, "Resolved %s as %s [cache %s]", opts.host, resolved.host, resolved.cached ? "hit" : "miss"); - Object.keys(resolved).forEach((key) => { - if (key.charAt(0) !== "_" && resolved[key]) { - opts[key] = resolved[key]; - } - }); - try { - this._socket = tls.connect(opts, () => { - this._socket.setKeepAlive(true); - this._onConnect(); - }); - setupConnectionHandlers(); - } catch (E) { - return setImmediate(() => this._onError(E, "ECONNECTION", false, "CONN")); - } - }); - } else { - return shared.resolveHostname(opts, (err, resolved) => { - if (err) { - return setImmediate(() => this._onError(err, "EDNS", false, "CONN")); - } - this.logger.debug({ - tnx: "dns", - source: opts.host, - resolved: resolved.host, - cached: !!resolved.cached - }, "Resolved %s as %s [cache %s]", opts.host, resolved.host, resolved.cached ? "hit" : "miss"); - Object.keys(resolved).forEach((key) => { - if (key.charAt(0) !== "_" && resolved[key]) { - opts[key] = resolved[key]; - } - }); - try { - this._socket = net.connect(opts, () => { - this._socket.setKeepAlive(true); - this._onConnect(); - }); - setupConnectionHandlers(); - } catch (E) { - return setImmediate(() => this._onError(E, "ECONNECTION", false, "CONN")); - } - }); - } - } - quit() { - this._sendCommand("QUIT"); - this._responseActions.push(this.close); - } - close() { - clearTimeout(this._connectionTimeout); - clearTimeout(this._greetingTimeout); - this._responseActions = []; - if (this._closing) { - return; - } - this._closing = true; - let closeMethod = "end"; - if (this.stage === "init") { - closeMethod = "destroy"; - } - this.logger.debug({ - tnx: "smtp" - }, 'Closing connection to the server using "%s"', closeMethod); - let socket = this._socket && this._socket.socket || this._socket; - if (socket && !socket.destroyed) { - try { - this._socket[closeMethod](); - } catch (E) { - } - } - this._destroy(); - } - login(authData, callback) { - const isDestroyedMessage = this._isDestroyedMessage("login"); - if (isDestroyedMessage) { - return callback(this._formatError(isDestroyedMessage, "ECONNECTION", false, "API")); - } - this._auth = authData || {}; - this._authMethod = (this._auth.method || "").toString().trim().toUpperCase() || false; - if (!this._authMethod && this._auth.oauth2 && !this._auth.credentials) { - this._authMethod = "XOAUTH2"; - } else if (!this._authMethod || this._authMethod === "XOAUTH2" && !this._auth.oauth2) { - this._authMethod = (this._supportedAuth[0] || "PLAIN").toUpperCase().trim(); - } - if (this._authMethod !== "XOAUTH2" && (!this._auth.credentials || !this._auth.credentials.user || !this._auth.credentials.pass)) { - if (this._auth.user && this._auth.pass || this.customAuth.has(this._authMethod)) { - this._auth.credentials = { - user: this._auth.user, - pass: this._auth.pass, - options: this._auth.options - }; - } else { - return callback(this._formatError('Missing credentials for "' + this._authMethod + '"', "EAUTH", false, "API")); - } - } - if (this.customAuth.has(this._authMethod)) { - let handler = this.customAuth.get(this._authMethod); - let lastResponse; - let returned = false; - let resolve = () => { - if (returned) { - return; - } - returned = true; - this.logger.info({ - tnx: "smtp", - username: this._auth.user, - action: "authenticated", - method: this._authMethod - }, "User %s authenticated", JSON.stringify(this._auth.user)); - this.authenticated = true; - callback(null, true); - }; - let reject = (err) => { - if (returned) { - return; - } - returned = true; - callback(this._formatError(err, "EAUTH", lastResponse, "AUTH " + this._authMethod)); - }; - let handlerResponse = handler({ - auth: this._auth, - method: this._authMethod, - extensions: [].concat(this._supportedExtensions), - authMethods: [].concat(this._supportedAuth), - maxAllowedSize: this._maxAllowedSize || false, - sendCommand: (cmd, done) => { - let promise; - if (!done) { - promise = new Promise((resolve2, reject2) => { - done = shared.callbackPromise(resolve2, reject2); - }); - } - this._responseActions.push((str) => { - lastResponse = str; - let codes = str.match(/^(\d+)(?:\s(\d+\.\d+\.\d+))?\s/); - let data = { - command: cmd, - response: str - }; - if (codes) { - data.status = Number(codes[1]) || 0; - if (codes[2]) { - data.code = codes[2]; - } - data.text = str.substr(codes[0].length); - } else { - data.text = str; - data.status = 0; - } - done(null, data); - }); - setImmediate(() => this._sendCommand(cmd)); - return promise; - }, - resolve, - reject - }); - if (handlerResponse && typeof handlerResponse.catch === "function") { - handlerResponse.then(resolve).catch(reject); - } - return; - } - switch (this._authMethod) { - case "XOAUTH2": - this._handleXOauth2Token(false, callback); - return; - case "LOGIN": - this._responseActions.push((str) => { - this._actionAUTH_LOGIN_USER(str, callback); - }); - this._sendCommand("AUTH LOGIN"); - return; - case "PLAIN": - this._responseActions.push((str) => { - this._actionAUTHComplete(str, callback); - }); - this._sendCommand("AUTH PLAIN " + Buffer.from("\0" + this._auth.credentials.user + "\0" + this._auth.credentials.pass, "utf-8").toString("base64"), "AUTH PLAIN " + Buffer.from("\0" + this._auth.credentials.user + "\0" + "/* secret */", "utf-8").toString("base64")); - return; - case "CRAM-MD5": - this._responseActions.push((str) => { - this._actionAUTH_CRAM_MD5(str, callback); - }); - this._sendCommand("AUTH CRAM-MD5"); - return; - } - return callback(this._formatError('Unknown authentication method "' + this._authMethod + '"', "EAUTH", false, "API")); - } - send(envelope, message, done) { - if (!message) { - return done(this._formatError("Empty message", "EMESSAGE", false, "API")); - } - const isDestroyedMessage = this._isDestroyedMessage("send message"); - if (isDestroyedMessage) { - return done(this._formatError(isDestroyedMessage, "ECONNECTION", false, "API")); - } - if (this._maxAllowedSize && envelope.size > this._maxAllowedSize) { - return setImmediate(() => { - done(this._formatError("Message size larger than allowed " + this._maxAllowedSize, "EMESSAGE", false, "MAIL FROM")); - }); - } - let returned = false; - let callback = function() { - if (returned) { - return; - } - returned = true; - done(...arguments); - }; - if (typeof message.on === "function") { - message.on("error", (err) => callback(this._formatError(err, "ESTREAM", false, "API"))); - } - let startTime = Date.now(); - this._setEnvelope(envelope, (err, info) => { - if (err) { - return callback(err); - } - let envelopeTime = Date.now(); - let stream = this._createSendStream((err2, str) => { - if (err2) { - return callback(err2); - } - info.envelopeTime = envelopeTime - startTime; - info.messageTime = Date.now() - envelopeTime; - info.messageSize = stream.outByteCount; - info.response = str; - return callback(null, info); - }); - if (typeof message.pipe === "function") { - message.pipe(stream); - } else { - stream.write(message); - stream.end(); - } - }); - } - reset(callback) { - this._sendCommand("RSET"); - this._responseActions.push((str) => { - if (str.charAt(0) !== "2") { - return callback(this._formatError("Could not reset session state. response=" + str, "EPROTOCOL", str, "RSET")); - } - this._envelope = false; - return callback(null, true); - }); - } - _onConnect() { - clearTimeout(this._connectionTimeout); - this.logger.info({ - tnx: "network", - localAddress: this._socket.localAddress, - localPort: this._socket.localPort, - remoteAddress: this._socket.remoteAddress, - remotePort: this._socket.remotePort - }, "%s established to %s:%s", this.secure ? "Secure connection" : "Connection", this._socket.remoteAddress, this._socket.remotePort); - if (this._destroyed) { - this.close(); - return; - } - this.stage = "connected"; - this._socket.removeListener("data", this._onSocketData); - this._socket.removeListener("timeout", this._onSocketTimeout); - this._socket.removeListener("close", this._onSocketClose); - this._socket.removeListener("end", this._onSocketEnd); - this._socket.on("data", this._onSocketData); - this._socket.once("close", this._onSocketClose); - this._socket.once("end", this._onSocketEnd); - this._socket.setTimeout(this.options.socketTimeout || SOCKET_TIMEOUT); - this._socket.on("timeout", this._onSocketTimeout); - this._greetingTimeout = setTimeout(() => { - if (this._socket && !this._destroyed && this._responseActions[0] === this._actionGreeting) { - this._onError("Greeting never received", "ETIMEDOUT", false, "CONN"); - } - }, this.options.greetingTimeout || GREETING_TIMEOUT); - this._responseActions.push(this._actionGreeting); - this._socket.resume(); - } - _onData(chunk) { - if (this._destroyed || !chunk || !chunk.length) { - return; - } - let data = (chunk || "").toString("binary"); - let lines = (this._remainder + data).split(/\r?\n/); - let lastline; - this._remainder = lines.pop(); - for (let i = 0, len = lines.length;i < len; i++) { - if (this._responseQueue.length) { - lastline = this._responseQueue[this._responseQueue.length - 1]; - if (/^\d+-/.test(lastline.split("\n").pop())) { - this._responseQueue[this._responseQueue.length - 1] += "\n" + lines[i]; - continue; - } - } - this._responseQueue.push(lines[i]); - } - if (this._responseQueue.length) { - lastline = this._responseQueue[this._responseQueue.length - 1]; - if (/^\d+-/.test(lastline.split("\n").pop())) { - return; - } - } - this._processResponse(); - } - _onError(err, type, data, command) { - clearTimeout(this._connectionTimeout); - clearTimeout(this._greetingTimeout); - if (this._destroyed) { - return; - } - err = this._formatError(err, type, data, command); - this.logger.error(data, err.message); - this.emit("error", err); - this.close(); - } - _formatError(message, type, response, command) { - let err; - if (/Error\]$/i.test(Object.prototype.toString.call(message))) { - err = message; - } else { - err = new Error(message); - } - if (type && type !== "Error") { - err.code = type; - } - if (response) { - err.response = response; - err.message += ": " + response; - } - let responseCode = typeof response === "string" && Number((response.match(/^\d+/) || [])[0]) || false; - if (responseCode) { - err.responseCode = responseCode; - } - if (command) { - err.command = command; - } - return err; - } - _onClose() { - let serverResponse = false; - if (this._remainder && this._remainder.trim()) { - if (this.options.debug || this.options.transactionLog) { - this.logger.debug({ - tnx: "server" - }, this._remainder.replace(/\r?\n$/, "")); - } - this.lastServerResponse = serverResponse = this._remainder.trim(); - } - this.logger.info({ - tnx: "network" - }, "Connection closed"); - if (this.upgrading && !this._destroyed) { - return this._onError(new Error("Connection closed unexpectedly"), "ETLS", serverResponse, "CONN"); - } else if (![this._actionGreeting, this.close].includes(this._responseActions[0]) && !this._destroyed) { - return this._onError(new Error("Connection closed unexpectedly"), "ECONNECTION", serverResponse, "CONN"); - } else if (/^[45]\d{2}\b/.test(serverResponse)) { - return this._onError(new Error("Connection closed unexpectedly"), "ECONNECTION", serverResponse, "CONN"); - } - this._destroy(); - } - _onEnd() { - if (this._socket && !this._socket.destroyed) { - this._socket.destroy(); - } - } - _onTimeout() { - return this._onError(new Error("Timeout"), "ETIMEDOUT", false, "CONN"); - } - _destroy() { - if (this._destroyed) { - return; - } - this._destroyed = true; - this.emit("end"); - } - _upgradeConnection(callback) { - this._socket.removeListener("data", this._onSocketData); - this._socket.removeListener("timeout", this._onSocketTimeout); - let socketPlain = this._socket; - let opts = { - socket: this._socket, - host: this.host - }; - Object.keys(this.options.tls || {}).forEach((key) => { - opts[key] = this.options.tls[key]; - }); - if (this.servername && !opts.servername) { - opts.servername = this.servername; - } - this.upgrading = true; - try { - this._socket = tls.connect(opts, () => { - this.secure = true; - this.upgrading = false; - this._socket.on("data", this._onSocketData); - socketPlain.removeListener("close", this._onSocketClose); - socketPlain.removeListener("end", this._onSocketEnd); - return callback(null, true); - }); - } catch (err) { - return callback(err); - } - this._socket.on("error", this._onSocketError); - this._socket.once("close", this._onSocketClose); - this._socket.once("end", this._onSocketEnd); - this._socket.setTimeout(this.options.socketTimeout || SOCKET_TIMEOUT); - this._socket.on("timeout", this._onSocketTimeout); - socketPlain.resume(); - } - _processResponse() { - if (!this._responseQueue.length) { - return false; - } - let str = this.lastServerResponse = (this._responseQueue.shift() || "").toString(); - if (/^\d+-/.test(str.split("\n").pop())) { - return; - } - if (this.options.debug || this.options.transactionLog) { - this.logger.debug({ - tnx: "server" - }, str.replace(/\r?\n$/, "")); - } - if (!str.trim()) { - setImmediate(() => this._processResponse()); - } - let action = this._responseActions.shift(); - if (typeof action === "function") { - action.call(this, str); - setImmediate(() => this._processResponse()); - } else { - return this._onError(new Error("Unexpected Response"), "EPROTOCOL", str, "CONN"); - } - } - _sendCommand(str, logStr) { - if (this._destroyed) { - return; - } - if (this._socket.destroyed) { - return this.close(); - } - if (this.options.debug || this.options.transactionLog) { - this.logger.debug({ - tnx: "client" - }, (logStr || str || "").toString().replace(/\r?\n$/, "")); - } - this._socket.write(Buffer.from(str + "\r\n", "utf-8")); - } - _setEnvelope(envelope, callback) { - let args = []; - let useSmtpUtf8 = false; - this._envelope = envelope || {}; - this._envelope.from = (this._envelope.from && this._envelope.from.address || this._envelope.from || "").toString().trim(); - this._envelope.to = [].concat(this._envelope.to || []).map((to) => (to && to.address || to || "").toString().trim()); - if (!this._envelope.to.length) { - return callback(this._formatError("No recipients defined", "EENVELOPE", false, "API")); - } - if (this._envelope.from && /[\r\n<>]/.test(this._envelope.from)) { - return callback(this._formatError("Invalid sender " + JSON.stringify(this._envelope.from), "EENVELOPE", false, "API")); - } - if (/[\x80-\uFFFF]/.test(this._envelope.from)) { - useSmtpUtf8 = true; - } - for (let i = 0, len = this._envelope.to.length;i < len; i++) { - if (!this._envelope.to[i] || /[\r\n<>]/.test(this._envelope.to[i])) { - return callback(this._formatError("Invalid recipient " + JSON.stringify(this._envelope.to[i]), "EENVELOPE", false, "API")); - } - if (/[\x80-\uFFFF]/.test(this._envelope.to[i])) { - useSmtpUtf8 = true; - } - } - this._envelope.rcptQueue = JSON.parse(JSON.stringify(this._envelope.to || [])); - this._envelope.rejected = []; - this._envelope.rejectedErrors = []; - this._envelope.accepted = []; - if (this._envelope.dsn) { - try { - this._envelope.dsn = this._setDsnEnvelope(this._envelope.dsn); - } catch (err) { - return callback(this._formatError("Invalid DSN " + err.message, "EENVELOPE", false, "API")); - } - } - this._responseActions.push((str) => { - this._actionMAIL(str, callback); - }); - if (useSmtpUtf8 && this._supportedExtensions.includes("SMTPUTF8")) { - args.push("SMTPUTF8"); - this._usingSmtpUtf8 = true; - } - if (this._envelope.use8BitMime && this._supportedExtensions.includes("8BITMIME")) { - args.push("BODY=8BITMIME"); - this._using8BitMime = true; - } - if (this._envelope.size && this._supportedExtensions.includes("SIZE")) { - args.push("SIZE=" + this._envelope.size); - } - if (this._envelope.dsn && this._supportedExtensions.includes("DSN")) { - if (this._envelope.dsn.ret) { - args.push("RET=" + shared.encodeXText(this._envelope.dsn.ret)); - } - if (this._envelope.dsn.envid) { - args.push("ENVID=" + shared.encodeXText(this._envelope.dsn.envid)); - } - } - this._sendCommand("MAIL FROM:<" + this._envelope.from + ">" + (args.length ? " " + args.join(" ") : "")); - } - _setDsnEnvelope(params) { - let ret = (params.ret || params.return || "").toString().toUpperCase() || null; - if (ret) { - switch (ret) { - case "HDRS": - case "HEADERS": - ret = "HDRS"; - break; - case "FULL": - case "BODY": - ret = "FULL"; - break; - } - } - if (ret && !["FULL", "HDRS"].includes(ret)) { - throw new Error("ret: " + JSON.stringify(ret)); - } - let envid = (params.envid || params.id || "").toString() || null; - let notify = params.notify || null; - if (notify) { - if (typeof notify === "string") { - notify = notify.split(","); - } - notify = notify.map((n) => n.trim().toUpperCase()); - let validNotify = ["NEVER", "SUCCESS", "FAILURE", "DELAY"]; - let invaliNotify = notify.filter((n) => !validNotify.includes(n)); - if (invaliNotify.length || notify.length > 1 && notify.includes("NEVER")) { - throw new Error("notify: " + JSON.stringify(notify.join(","))); - } - notify = notify.join(","); - } - let orcpt = (params.recipient || params.orcpt || "").toString() || null; - if (orcpt && orcpt.indexOf(";") < 0) { - orcpt = "rfc822;" + orcpt; - } - return { - ret, - envid, - notify, - orcpt - }; - } - _getDsnRcptToArgs() { - let args = []; - if (this._envelope.dsn && this._supportedExtensions.includes("DSN")) { - if (this._envelope.dsn.notify) { - args.push("NOTIFY=" + shared.encodeXText(this._envelope.dsn.notify)); - } - if (this._envelope.dsn.orcpt) { - args.push("ORCPT=" + shared.encodeXText(this._envelope.dsn.orcpt)); - } - } - return args.length ? " " + args.join(" ") : ""; - } - _createSendStream(callback) { - let dataStream = new DataStream; - let logStream; - if (this.options.lmtp) { - this._envelope.accepted.forEach((recipient, i) => { - let final = i === this._envelope.accepted.length - 1; - this._responseActions.push((str) => { - this._actionLMTPStream(recipient, final, str, callback); - }); - }); - } else { - this._responseActions.push((str) => { - this._actionSMTPStream(str, callback); - }); - } - dataStream.pipe(this._socket, { - end: false - }); - if (this.options.debug) { - logStream = new PassThrough; - logStream.on("readable", () => { - let chunk; - while (chunk = logStream.read()) { - this.logger.debug({ - tnx: "message" - }, chunk.toString("binary").replace(/\r?\n$/, "")); - } - }); - dataStream.pipe(logStream); - } - dataStream.once("end", () => { - this.logger.info({ - tnx: "message", - inByteCount: dataStream.inByteCount, - outByteCount: dataStream.outByteCount - }, "<%s bytes encoded mime message (source size %s bytes)>", dataStream.outByteCount, dataStream.inByteCount); - }); - return dataStream; - } - _actionGreeting(str) { - clearTimeout(this._greetingTimeout); - if (str.substr(0, 3) !== "220") { - this._onError(new Error("Invalid greeting. response=" + str), "EPROTOCOL", str, "CONN"); - return; - } - if (this.options.lmtp) { - this._responseActions.push(this._actionLHLO); - this._sendCommand("LHLO " + this.name); - } else { - this._responseActions.push(this._actionEHLO); - this._sendCommand("EHLO " + this.name); - } - } - _actionLHLO(str) { - if (str.charAt(0) !== "2") { - this._onError(new Error("Invalid LHLO. response=" + str), "EPROTOCOL", str, "LHLO"); - return; - } - this._actionEHLO(str); - } - _actionEHLO(str) { - let match; - if (str.substr(0, 3) === "421") { - this._onError(new Error("Server terminates connection. response=" + str), "ECONNECTION", str, "EHLO"); - return; - } - if (str.charAt(0) !== "2") { - if (this.options.requireTLS) { - this._onError(new Error("EHLO failed but HELO does not support required STARTTLS. response=" + str), "ECONNECTION", str, "EHLO"); - return; - } - this._responseActions.push(this._actionHELO); - this._sendCommand("HELO " + this.name); - return; - } - this._ehloLines = str.split(/\r?\n/).map((line) => line.replace(/^\d+[ -]/, "").trim()).filter((line) => line).slice(1); - if (!this.secure && !this.options.ignoreTLS && (/[ -]STARTTLS\b/im.test(str) || this.options.requireTLS)) { - this._sendCommand("STARTTLS"); - this._responseActions.push(this._actionSTARTTLS); - return; - } - if (/[ -]SMTPUTF8\b/im.test(str)) { - this._supportedExtensions.push("SMTPUTF8"); - } - if (/[ -]DSN\b/im.test(str)) { - this._supportedExtensions.push("DSN"); - } - if (/[ -]8BITMIME\b/im.test(str)) { - this._supportedExtensions.push("8BITMIME"); - } - if (/[ -]PIPELINING\b/im.test(str)) { - this._supportedExtensions.push("PIPELINING"); - } - if (/[ -]AUTH\b/i.test(str)) { - this.allowsAuth = true; - } - if (/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)PLAIN/i.test(str)) { - this._supportedAuth.push("PLAIN"); - } - if (/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)LOGIN/i.test(str)) { - this._supportedAuth.push("LOGIN"); - } - if (/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)CRAM-MD5/i.test(str)) { - this._supportedAuth.push("CRAM-MD5"); - } - if (/[ -]AUTH(?:(\s+|=)[^\n]*\s+|\s+|=)XOAUTH2/i.test(str)) { - this._supportedAuth.push("XOAUTH2"); - } - if (match = str.match(/[ -]SIZE(?:[ \t]+(\d+))?/im)) { - this._supportedExtensions.push("SIZE"); - this._maxAllowedSize = Number(match[1]) || 0; - } - this.emit("connect"); - } - _actionHELO(str) { - if (str.charAt(0) !== "2") { - this._onError(new Error("Invalid HELO. response=" + str), "EPROTOCOL", str, "HELO"); - return; - } - this.allowsAuth = true; - this.emit("connect"); - } - _actionSTARTTLS(str) { - if (str.charAt(0) !== "2") { - if (this.options.opportunisticTLS) { - this.logger.info({ - tnx: "smtp" - }, "Failed STARTTLS upgrade, continuing unencrypted"); - return this.emit("connect"); - } - this._onError(new Error("Error upgrading connection with STARTTLS"), "ETLS", str, "STARTTLS"); - return; - } - this._upgradeConnection((err, secured) => { - if (err) { - this._onError(new Error("Error initiating TLS - " + (err.message || err)), "ETLS", false, "STARTTLS"); - return; - } - this.logger.info({ - tnx: "smtp" - }, "Connection upgraded with STARTTLS"); - if (secured) { - if (this.options.lmtp) { - this._responseActions.push(this._actionLHLO); - this._sendCommand("LHLO " + this.name); - } else { - this._responseActions.push(this._actionEHLO); - this._sendCommand("EHLO " + this.name); - } - } else { - this.emit("connect"); - } - }); - } - _actionAUTH_LOGIN_USER(str, callback) { - if (!/^334[ -]/.test(str)) { - callback(this._formatError('Invalid login sequence while waiting for "334 VXNlcm5hbWU6"', "EAUTH", str, "AUTH LOGIN")); - return; - } - this._responseActions.push((str2) => { - this._actionAUTH_LOGIN_PASS(str2, callback); - }); - this._sendCommand(Buffer.from(this._auth.credentials.user + "", "utf-8").toString("base64")); - } - _actionAUTH_CRAM_MD5(str, callback) { - let challengeMatch = str.match(/^334\s+(.+)$/); - let challengeString = ""; - if (!challengeMatch) { - return callback(this._formatError("Invalid login sequence while waiting for server challenge string", "EAUTH", str, "AUTH CRAM-MD5")); - } else { - challengeString = challengeMatch[1]; - } - let base64decoded = Buffer.from(challengeString, "base64").toString("ascii"), hmacMD5 = crypto2.createHmac("md5", this._auth.credentials.pass); - hmacMD5.update(base64decoded); - let prepended = this._auth.credentials.user + " " + hmacMD5.digest("hex"); - this._responseActions.push((str2) => { - this._actionAUTH_CRAM_MD5_PASS(str2, callback); - }); - this._sendCommand(Buffer.from(prepended).toString("base64"), Buffer.from(this._auth.credentials.user + " /* secret */").toString("base64")); - } - _actionAUTH_CRAM_MD5_PASS(str, callback) { - if (!str.match(/^235\s+/)) { - return callback(this._formatError('Invalid login sequence while waiting for "235"', "EAUTH", str, "AUTH CRAM-MD5")); - } - this.logger.info({ - tnx: "smtp", - username: this._auth.user, - action: "authenticated", - method: this._authMethod - }, "User %s authenticated", JSON.stringify(this._auth.user)); - this.authenticated = true; - callback(null, true); - } - _actionAUTH_LOGIN_PASS(str, callback) { - if (!/^334[ -]/.test(str)) { - return callback(this._formatError('Invalid login sequence while waiting for "334 UGFzc3dvcmQ6"', "EAUTH", str, "AUTH LOGIN")); - } - this._responseActions.push((str2) => { - this._actionAUTHComplete(str2, callback); - }); - this._sendCommand(Buffer.from((this._auth.credentials.pass || "").toString(), "utf-8").toString("base64"), Buffer.from("/* secret */", "utf-8").toString("base64")); - } - _actionAUTHComplete(str, isRetry, callback) { - if (!callback && typeof isRetry === "function") { - callback = isRetry; - isRetry = false; - } - if (str.substr(0, 3) === "334") { - this._responseActions.push((str2) => { - if (isRetry || this._authMethod !== "XOAUTH2") { - this._actionAUTHComplete(str2, true, callback); - } else { - setImmediate(() => this._handleXOauth2Token(true, callback)); - } - }); - this._sendCommand(""); - return; - } - if (str.charAt(0) !== "2") { - this.logger.info({ - tnx: "smtp", - username: this._auth.user, - action: "authfail", - method: this._authMethod - }, "User %s failed to authenticate", JSON.stringify(this._auth.user)); - return callback(this._formatError("Invalid login", "EAUTH", str, "AUTH " + this._authMethod)); - } - this.logger.info({ - tnx: "smtp", - username: this._auth.user, - action: "authenticated", - method: this._authMethod - }, "User %s authenticated", JSON.stringify(this._auth.user)); - this.authenticated = true; - callback(null, true); - } - _actionMAIL(str, callback) { - let message, curRecipient; - if (Number(str.charAt(0)) !== 2) { - if (this._usingSmtpUtf8 && /^550 /.test(str) && /[\x80-\uFFFF]/.test(this._envelope.from)) { - message = "Internationalized mailbox name not allowed"; - } else { - message = "Mail command failed"; - } - return callback(this._formatError(message, "EENVELOPE", str, "MAIL FROM")); - } - if (!this._envelope.rcptQueue.length) { - return callback(this._formatError("Can't send mail - no recipients defined", "EENVELOPE", false, "API")); - } else { - this._recipientQueue = []; - if (this._supportedExtensions.includes("PIPELINING")) { - while (this._envelope.rcptQueue.length) { - curRecipient = this._envelope.rcptQueue.shift(); - this._recipientQueue.push(curRecipient); - this._responseActions.push((str2) => { - this._actionRCPT(str2, callback); - }); - this._sendCommand("RCPT TO:<" + curRecipient + ">" + this._getDsnRcptToArgs()); - } - } else { - curRecipient = this._envelope.rcptQueue.shift(); - this._recipientQueue.push(curRecipient); - this._responseActions.push((str2) => { - this._actionRCPT(str2, callback); - }); - this._sendCommand("RCPT TO:<" + curRecipient + ">" + this._getDsnRcptToArgs()); - } - } - } - _actionRCPT(str, callback) { - let message, err, curRecipient = this._recipientQueue.shift(); - if (Number(str.charAt(0)) !== 2) { - if (this._usingSmtpUtf8 && /^553 /.test(str) && /[\x80-\uFFFF]/.test(curRecipient)) { - message = "Internationalized mailbox name not allowed"; - } else { - message = "Recipient command failed"; - } - this._envelope.rejected.push(curRecipient); - err = this._formatError(message, "EENVELOPE", str, "RCPT TO"); - err.recipient = curRecipient; - this._envelope.rejectedErrors.push(err); - } else { - this._envelope.accepted.push(curRecipient); - } - if (!this._envelope.rcptQueue.length && !this._recipientQueue.length) { - if (this._envelope.rejected.length < this._envelope.to.length) { - this._responseActions.push((str2) => { - this._actionDATA(str2, callback); - }); - this._sendCommand("DATA"); - } else { - err = this._formatError("Can't send mail - all recipients were rejected", "EENVELOPE", str, "RCPT TO"); - err.rejected = this._envelope.rejected; - err.rejectedErrors = this._envelope.rejectedErrors; - return callback(err); - } - } else if (this._envelope.rcptQueue.length) { - curRecipient = this._envelope.rcptQueue.shift(); - this._recipientQueue.push(curRecipient); - this._responseActions.push((str2) => { - this._actionRCPT(str2, callback); - }); - this._sendCommand("RCPT TO:<" + curRecipient + ">" + this._getDsnRcptToArgs()); - } - } - _actionDATA(str, callback) { - if (!/^[23]/.test(str)) { - return callback(this._formatError("Data command failed", "EENVELOPE", str, "DATA")); - } - let response = { - accepted: this._envelope.accepted, - rejected: this._envelope.rejected - }; - if (this._ehloLines && this._ehloLines.length) { - response.ehlo = this._ehloLines; - } - if (this._envelope.rejectedErrors.length) { - response.rejectedErrors = this._envelope.rejectedErrors; - } - callback(null, response); - } - _actionSMTPStream(str, callback) { - if (Number(str.charAt(0)) !== 2) { - return callback(this._formatError("Message failed", "EMESSAGE", str, "DATA")); - } else { - return callback(null, str); - } - } - _actionLMTPStream(recipient, final, str, callback) { - let err; - if (Number(str.charAt(0)) !== 2) { - err = this._formatError("Message failed for recipient " + recipient, "EMESSAGE", str, "DATA"); - err.recipient = recipient; - this._envelope.rejected.push(recipient); - this._envelope.rejectedErrors.push(err); - for (let i = 0, len = this._envelope.accepted.length;i < len; i++) { - if (this._envelope.accepted[i] === recipient) { - this._envelope.accepted.splice(i, 1); - } - } - } - if (final) { - return callback(null, str); - } - } - _handleXOauth2Token(isRetry, callback) { - this._auth.oauth2.getToken(isRetry, (err, accessToken) => { - if (err) { - this.logger.info({ - tnx: "smtp", - username: this._auth.user, - action: "authfail", - method: this._authMethod - }, "User %s failed to authenticate", JSON.stringify(this._auth.user)); - return callback(this._formatError(err, "EAUTH", false, "AUTH XOAUTH2")); - } - this._responseActions.push((str) => { - this._actionAUTHComplete(str, isRetry, callback); - }); - this._sendCommand("AUTH XOAUTH2 " + this._auth.oauth2.buildXOAuth2Token(accessToken), "AUTH XOAUTH2 " + this._auth.oauth2.buildXOAuth2Token("/* secret */")); - }); - } - _isDestroyedMessage(command) { - if (this._destroyed) { - return "Cannot " + command + " - smtp connection is already destroyed."; - } - if (this._socket) { - if (this._socket.destroyed) { - return "Cannot " + command + " - smtp connection socket is already destroyed."; - } - if (!this._socket.writable) { - return "Cannot " + command + " - smtp connection socket is already half-closed."; - } - } - } - _getHostname() { - let defaultHostname; - try { - defaultHostname = os.hostname() || ""; - } catch (err) { - defaultHostname = "localhost"; - } - if (!defaultHostname || defaultHostname.indexOf(".") < 0) { - defaultHostname = "[127.0.0.1]"; - } - if (defaultHostname.match(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)) { - defaultHostname = "[" + defaultHostname + "]"; - } - return defaultHostname; - } - } - module.exports = SMTPConnection; -}); - -// node_modules/nodemailer/lib/xoauth2/index.js -var require_xoauth2 = __commonJS((exports, module) => { - var Stream = __require("stream").Stream; - var nmfetch = require_fetch(); - var crypto2 = __require("crypto"); - var shared = require_shared(); - - class XOAuth2 extends Stream { - constructor(options, logger) { - super(); - this.options = options || {}; - if (options && options.serviceClient) { - if (!options.privateKey || !options.user) { - setImmediate(() => this.emit("error", new Error('Options "privateKey" and "user" are required for service account!'))); - return; - } - let serviceRequestTimeout = Math.min(Math.max(Number(this.options.serviceRequestTimeout) || 0, 0), 3600); - this.options.serviceRequestTimeout = serviceRequestTimeout || 5 * 60; - } - this.logger = shared.getLogger({ - logger - }, { - component: this.options.component || "OAuth2" - }); - this.provisionCallback = typeof this.options.provisionCallback === "function" ? this.options.provisionCallback : false; - this.options.accessUrl = this.options.accessUrl || "https://accounts.google.com/o/oauth2/token"; - this.options.customHeaders = this.options.customHeaders || {}; - this.options.customParams = this.options.customParams || {}; - this.accessToken = this.options.accessToken || false; - if (this.options.expires && Number(this.options.expires)) { - this.expires = this.options.expires; - } else { - let timeout = Math.max(Number(this.options.timeout) || 0, 0); - this.expires = timeout && Date.now() + timeout * 1000 || 0; - } - } - getToken(renew, callback) { - if (!renew && this.accessToken && (!this.expires || this.expires > Date.now())) { - return callback(null, this.accessToken); - } - let generateCallback = (...args) => { - if (args[0]) { - this.logger.error({ - err: args[0], - tnx: "OAUTH2", - user: this.options.user, - action: "renew" - }, "Failed generating new Access Token for %s", this.options.user); - } else { - this.logger.info({ - tnx: "OAUTH2", - user: this.options.user, - action: "renew" - }, "Generated new Access Token for %s", this.options.user); - } - callback(...args); - }; - if (this.provisionCallback) { - this.provisionCallback(this.options.user, !!renew, (err, accessToken, expires) => { - if (!err && accessToken) { - this.accessToken = accessToken; - this.expires = expires || 0; - } - generateCallback(err, accessToken); - }); - } else { - this.generateToken(generateCallback); - } - } - updateToken(accessToken, timeout) { - this.accessToken = accessToken; - timeout = Math.max(Number(timeout) || 0, 0); - this.expires = timeout && Date.now() + timeout * 1000 || 0; - this.emit("token", { - user: this.options.user, - accessToken: accessToken || "", - expires: this.expires - }); - } - generateToken(callback) { - let urlOptions; - let loggedUrlOptions; - if (this.options.serviceClient) { - let iat = Math.floor(Date.now() / 1000); - let tokenData = { - iss: this.options.serviceClient, - scope: this.options.scope || "https://mail.google.com/", - sub: this.options.user, - aud: this.options.accessUrl, - iat, - exp: iat + this.options.serviceRequestTimeout - }; - let token; - try { - token = this.jwtSignRS256(tokenData); - } catch (err) { - return callback(new Error("Can't generate token. Check your auth options")); - } - urlOptions = { - grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", - assertion: token - }; - loggedUrlOptions = { - grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", - assertion: tokenData - }; - } else { - if (!this.options.refreshToken) { - return callback(new Error("Can't create new access token for user")); - } - urlOptions = { - client_id: this.options.clientId || "", - client_secret: this.options.clientSecret || "", - refresh_token: this.options.refreshToken, - grant_type: "refresh_token" - }; - loggedUrlOptions = { - client_id: this.options.clientId || "", - client_secret: (this.options.clientSecret || "").substr(0, 6) + "...", - refresh_token: (this.options.refreshToken || "").substr(0, 6) + "...", - grant_type: "refresh_token" - }; - } - Object.keys(this.options.customParams).forEach((key) => { - urlOptions[key] = this.options.customParams[key]; - loggedUrlOptions[key] = this.options.customParams[key]; - }); - this.logger.debug({ - tnx: "OAUTH2", - user: this.options.user, - action: "generate" - }, "Requesting token using: %s", JSON.stringify(loggedUrlOptions)); - this.postRequest(this.options.accessUrl, urlOptions, this.options, (error, body) => { - let data; - if (error) { - return callback(error); - } - try { - data = JSON.parse(body.toString()); - } catch (E) { - return callback(E); - } - if (!data || typeof data !== "object") { - this.logger.debug({ - tnx: "OAUTH2", - user: this.options.user, - action: "post" - }, "Response: %s", (body || "").toString()); - return callback(new Error("Invalid authentication response")); - } - let logData = {}; - Object.keys(data).forEach((key) => { - if (key !== "access_token") { - logData[key] = data[key]; - } else { - logData[key] = (data[key] || "").toString().substr(0, 6) + "..."; - } - }); - this.logger.debug({ - tnx: "OAUTH2", - user: this.options.user, - action: "post" - }, "Response: %s", JSON.stringify(logData)); - if (data.error) { - let errorMessage = data.error; - if (data.error_description) { - errorMessage += ": " + data.error_description; - } - if (data.error_uri) { - errorMessage += " (" + data.error_uri + ")"; - } - return callback(new Error(errorMessage)); - } - if (data.access_token) { - this.updateToken(data.access_token, data.expires_in); - return callback(null, this.accessToken); - } - return callback(new Error("No access token")); - }); - } - buildXOAuth2Token(accessToken) { - let authData = ["user=" + (this.options.user || ""), "auth=Bearer " + (accessToken || this.accessToken), "", ""]; - return Buffer.from(authData.join("\x01"), "utf-8").toString("base64"); - } - postRequest(url, payload, params, callback) { - let returned = false; - let chunks = []; - let chunklen = 0; - let req = nmfetch(url, { - method: "post", - headers: params.customHeaders, - body: payload, - allowErrorResponse: true - }); - req.on("readable", () => { - let chunk; - while ((chunk = req.read()) !== null) { - chunks.push(chunk); - chunklen += chunk.length; - } - }); - req.once("error", (err) => { - if (returned) { - return; - } - returned = true; - return callback(err); - }); - req.once("end", () => { - if (returned) { - return; - } - returned = true; - return callback(null, Buffer.concat(chunks, chunklen)); - }); - } - toBase64URL(data) { - if (typeof data === "string") { - data = Buffer.from(data); - } - return data.toString("base64").replace(/[=]+/g, "").replace(/\+/g, "-").replace(/\//g, "_"); - } - jwtSignRS256(payload) { - payload = ['{"alg":"RS256","typ":"JWT"}', JSON.stringify(payload)].map((val) => this.toBase64URL(val)).join("."); - let signature = crypto2.createSign("RSA-SHA256").update(payload).sign(this.options.privateKey); - return payload + "." + this.toBase64URL(signature); - } - } - module.exports = XOAuth2; -}); - -// node_modules/nodemailer/lib/smtp-pool/pool-resource.js -var require_pool_resource = __commonJS((exports, module) => { - var SMTPConnection = require_smtp_connection(); - var assign = require_shared().assign; - var XOAuth2 = require_xoauth2(); - var EventEmitter = __require("events"); - - class PoolResource extends EventEmitter { - constructor(pool) { - super(); - this.pool = pool; - this.options = pool.options; - this.logger = this.pool.logger; - if (this.options.auth) { - switch ((this.options.auth.type || "").toString().toUpperCase()) { - case "OAUTH2": { - let oauth2 = new XOAuth2(this.options.auth, this.logger); - oauth2.provisionCallback = this.pool.mailer && this.pool.mailer.get("oauth2_provision_cb") || oauth2.provisionCallback; - this.auth = { - type: "OAUTH2", - user: this.options.auth.user, - oauth2, - method: "XOAUTH2" - }; - oauth2.on("token", (token) => this.pool.mailer.emit("token", token)); - oauth2.on("error", (err) => this.emit("error", err)); - break; - } - default: - if (!this.options.auth.user && !this.options.auth.pass) { - break; - } - this.auth = { - type: (this.options.auth.type || "").toString().toUpperCase() || "LOGIN", - user: this.options.auth.user, - credentials: { - user: this.options.auth.user || "", - pass: this.options.auth.pass, - options: this.options.auth.options - }, - method: (this.options.auth.method || "").trim().toUpperCase() || this.options.authMethod || false - }; - } - } - this._connection = false; - this._connected = false; - this.messages = 0; - this.available = true; - } - connect(callback) { - this.pool.getSocket(this.options, (err, socketOptions) => { - if (err) { - return callback(err); - } - let returned = false; - let options = this.options; - if (socketOptions && socketOptions.connection) { - this.logger.info({ - tnx: "proxy", - remoteAddress: socketOptions.connection.remoteAddress, - remotePort: socketOptions.connection.remotePort, - destHost: options.host || "", - destPort: options.port || "", - action: "connected" - }, "Using proxied socket from %s:%s to %s:%s", socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || "", options.port || ""); - options = assign(false, options); - Object.keys(socketOptions).forEach((key) => { - options[key] = socketOptions[key]; - }); - } - this.connection = new SMTPConnection(options); - this.connection.once("error", (err2) => { - this.emit("error", err2); - if (returned) { - return; - } - returned = true; - return callback(err2); - }); - this.connection.once("end", () => { - this.close(); - if (returned) { - return; - } - returned = true; - let timer = setTimeout(() => { - if (returned) { - return; - } - let err2 = new Error("Unexpected socket close"); - if (this.connection && this.connection._socket && this.connection._socket.upgrading) { - err2.code = "ETLS"; - } - callback(err2); - }, 1000); - try { - timer.unref(); - } catch (E) { - } - }); - this.connection.connect(() => { - if (returned) { - return; - } - if (this.auth && (this.connection.allowsAuth || options.forceAuth)) { - this.connection.login(this.auth, (err2) => { - if (returned) { - return; - } - returned = true; - if (err2) { - this.connection.close(); - this.emit("error", err2); - return callback(err2); - } - this._connected = true; - callback(null, true); - }); - } else { - returned = true; - this._connected = true; - return callback(null, true); - } - }); - }); - } - send(mail, callback) { - if (!this._connected) { - return this.connect((err) => { - if (err) { - return callback(err); - } - return this.send(mail, callback); - }); - } - let envelope = mail.message.getEnvelope(); - let messageId = mail.message.messageId(); - let recipients = [].concat(envelope.to || []); - if (recipients.length > 3) { - recipients.push("...and " + recipients.splice(2).length + " more"); - } - this.logger.info({ - tnx: "send", - messageId, - cid: this.id - }, "Sending message %s using #%s to <%s>", messageId, this.id, recipients.join(", ")); - if (mail.data.dsn) { - envelope.dsn = mail.data.dsn; - } - this.connection.send(envelope, mail.message.createReadStream(), (err, info) => { - this.messages++; - if (err) { - this.connection.close(); - this.emit("error", err); - return callback(err); - } - info.envelope = { - from: envelope.from, - to: envelope.to - }; - info.messageId = messageId; - setImmediate(() => { - let err2; - if (this.messages >= this.options.maxMessages) { - err2 = new Error("Resource exhausted"); - err2.code = "EMAXLIMIT"; - this.connection.close(); - this.emit("error", err2); - } else { - this.pool._checkRateLimit(() => { - this.available = true; - this.emit("available"); - }); - } - }); - callback(null, info); - }); - } - close() { - this._connected = false; - if (this.auth && this.auth.oauth2) { - this.auth.oauth2.removeAllListeners(); - } - if (this.connection) { - this.connection.close(); - } - this.emit("close"); - } - } - module.exports = PoolResource; -}); - -// node_modules/nodemailer/lib/well-known/services.json -var require_services = __commonJS((exports, module) => { - module.exports = { - "1und1": { - host: "smtp.1und1.de", - port: 465, - secure: true, - authMethod: "LOGIN" - }, - Aliyun: { - domains: ["aliyun.com"], - host: "smtp.aliyun.com", - port: 465, - secure: true - }, - AOL: { - domains: ["aol.com"], - host: "smtp.aol.com", - port: 587 - }, - Bluewin: { - host: "smtpauths.bluewin.ch", - domains: ["bluewin.ch"], - port: 465 - }, - DebugMail: { - host: "debugmail.io", - port: 25 - }, - DynectEmail: { - aliases: ["Dynect"], - host: "smtp.dynect.net", - port: 25 - }, - Ethereal: { - aliases: ["ethereal.email"], - host: "smtp.ethereal.email", - port: 587 - }, - FastMail: { - domains: ["fastmail.fm"], - host: "smtp.fastmail.com", - port: 465, - secure: true - }, - "Forward Email": { - aliases: ["FE", "ForwardEmail"], - domains: ["forwardemail.net"], - host: "smtp.forwardemail.net", - port: 465, - secure: true - }, - "Feishu Mail": { - aliases: ["Feishu", "FeishuMail"], - domains: ["www.feishu.cn"], - host: "smtp.feishu.cn", - port: 465, - secure: true - }, - GandiMail: { - aliases: ["Gandi", "Gandi Mail"], - host: "mail.gandi.net", - port: 587 - }, - Gmail: { - aliases: ["Google Mail"], - domains: ["gmail.com", "googlemail.com"], - host: "smtp.gmail.com", - port: 465, - secure: true - }, - Godaddy: { - host: "smtpout.secureserver.net", - port: 25 - }, - GodaddyAsia: { - host: "smtp.asia.secureserver.net", - port: 25 - }, - GodaddyEurope: { - host: "smtp.europe.secureserver.net", - port: 25 - }, - "hot.ee": { - host: "mail.hot.ee" - }, - Hotmail: { - aliases: ["Outlook", "Outlook.com", "Hotmail.com"], - domains: ["hotmail.com", "outlook.com"], - host: "smtp-mail.outlook.com", - port: 587 - }, - iCloud: { - aliases: ["Me", "Mac"], - domains: ["me.com", "mac.com"], - host: "smtp.mail.me.com", - port: 587 - }, - Infomaniak: { - host: "mail.infomaniak.com", - domains: ["ik.me", "ikmail.com", "etik.com"], - port: 587 - }, - Loopia: { - host: "mailcluster.loopia.se", - port: 465 - }, - "mail.ee": { - host: "smtp.mail.ee" - }, - "Mail.ru": { - host: "smtp.mail.ru", - port: 465, - secure: true - }, - "Mailcatch.app": { - host: "sandbox-smtp.mailcatch.app", - port: 2525 - }, - Maildev: { - port: 1025, - ignoreTLS: true - }, - Mailgun: { - host: "smtp.mailgun.org", - port: 465, - secure: true - }, - Mailjet: { - host: "in.mailjet.com", - port: 587 - }, - Mailosaur: { - host: "mailosaur.io", - port: 25 - }, - Mailtrap: { - host: "live.smtp.mailtrap.io", - port: 587 - }, - Mandrill: { - host: "smtp.mandrillapp.com", - port: 587 - }, - Naver: { - host: "smtp.naver.com", - port: 587 - }, - One: { - host: "send.one.com", - port: 465, - secure: true - }, - OpenMailBox: { - aliases: ["OMB", "openmailbox.org"], - host: "smtp.openmailbox.org", - port: 465, - secure: true - }, - Outlook365: { - host: "smtp.office365.com", - port: 587, - secure: false - }, - OhMySMTP: { - host: "smtp.ohmysmtp.com", - port: 587, - secure: false - }, - Postmark: { - aliases: ["PostmarkApp"], - host: "smtp.postmarkapp.com", - port: 2525 - }, - "qiye.aliyun": { - host: "smtp.mxhichina.com", - port: "465", - secure: true - }, - QQ: { - domains: ["qq.com"], - host: "smtp.qq.com", - port: 465, - secure: true - }, - QQex: { - aliases: ["QQ Enterprise"], - domains: ["exmail.qq.com"], - host: "smtp.exmail.qq.com", - port: 465, - secure: true - }, - SendCloud: { - host: "smtp.sendcloud.net", - port: 2525 - }, - SendGrid: { - host: "smtp.sendgrid.net", - port: 587 - }, - SendinBlue: { - aliases: ["Brevo"], - host: "smtp-relay.brevo.com", - port: 587 - }, - SendPulse: { - host: "smtp-pulse.com", - port: 465, - secure: true - }, - SES: { - host: "email-smtp.us-east-1.amazonaws.com", - port: 465, - secure: true - }, - "SES-US-EAST-1": { - host: "email-smtp.us-east-1.amazonaws.com", - port: 465, - secure: true - }, - "SES-US-WEST-2": { - host: "email-smtp.us-west-2.amazonaws.com", - port: 465, - secure: true - }, - "SES-EU-WEST-1": { - host: "email-smtp.eu-west-1.amazonaws.com", - port: 465, - secure: true - }, - "SES-AP-SOUTH-1": { - host: "email-smtp.ap-south-1.amazonaws.com", - port: 465, - secure: true - }, - "SES-AP-NORTHEAST-1": { - host: "email-smtp.ap-northeast-1.amazonaws.com", - port: 465, - secure: true - }, - "SES-AP-NORTHEAST-2": { - host: "email-smtp.ap-northeast-2.amazonaws.com", - port: 465, - secure: true - }, - "SES-AP-NORTHEAST-3": { - host: "email-smtp.ap-northeast-3.amazonaws.com", - port: 465, - secure: true - }, - "SES-AP-SOUTHEAST-1": { - host: "email-smtp.ap-southeast-1.amazonaws.com", - port: 465, - secure: true - }, - "SES-AP-SOUTHEAST-2": { - host: "email-smtp.ap-southeast-2.amazonaws.com", - port: 465, - secure: true - }, - Sparkpost: { - aliases: ["SparkPost", "SparkPost Mail"], - domains: ["sparkpost.com"], - host: "smtp.sparkpostmail.com", - port: 587, - secure: false - }, - Tipimail: { - host: "smtp.tipimail.com", - port: 587 - }, - Yahoo: { - domains: ["yahoo.com"], - host: "smtp.mail.yahoo.com", - port: 465, - secure: true - }, - Yandex: { - domains: ["yandex.ru"], - host: "smtp.yandex.ru", - port: 465, - secure: true - }, - Zoho: { - host: "smtp.zoho.com", - port: 465, - secure: true, - authMethod: "LOGIN" - }, - "126": { - host: "smtp.126.com", - port: 465, - secure: true - }, - "163": { - host: "smtp.163.com", - port: 465, - secure: true - } - }; -}); - -// node_modules/nodemailer/lib/well-known/index.js -var require_well_known = __commonJS((exports, module) => { - var services = require_services(); - var normalized = {}; - Object.keys(services).forEach((key) => { - let service = services[key]; - normalized[normalizeKey(key)] = normalizeService(service); - [].concat(service.aliases || []).forEach((alias) => { - normalized[normalizeKey(alias)] = normalizeService(service); - }); - [].concat(service.domains || []).forEach((domain) => { - normalized[normalizeKey(domain)] = normalizeService(service); - }); - }); - function normalizeKey(key) { - return key.replace(/[^a-zA-Z0-9.-]/g, "").toLowerCase(); - } - function normalizeService(service) { - let filter = ["domains", "aliases"]; - let response = {}; - Object.keys(service).forEach((key) => { - if (filter.indexOf(key) < 0) { - response[key] = service[key]; - } - }); - return response; - } - module.exports = function(key) { - key = normalizeKey(key.split("@").pop()); - return normalized[key] || false; - }; -}); - -// node_modules/nodemailer/lib/smtp-pool/index.js -var require_smtp_pool = __commonJS((exports, module) => { - var EventEmitter = __require("events"); - var PoolResource = require_pool_resource(); - var SMTPConnection = require_smtp_connection(); - var wellKnown = require_well_known(); - var shared = require_shared(); - var packageData = require_package2(); - - class SMTPPool extends EventEmitter { - constructor(options) { - super(); - options = options || {}; - if (typeof options === "string") { - options = { - url: options - }; - } - let urlData; - let service = options.service; - if (typeof options.getSocket === "function") { - this.getSocket = options.getSocket; - } - if (options.url) { - urlData = shared.parseConnectionUrl(options.url); - service = service || urlData.service; - } - this.options = shared.assign(false, options, urlData, service && wellKnown(service)); - this.options.maxConnections = this.options.maxConnections || 5; - this.options.maxMessages = this.options.maxMessages || 100; - this.logger = shared.getLogger(this.options, { - component: this.options.component || "smtp-pool" - }); - let connection2 = new SMTPConnection(this.options); - this.name = "SMTP (pool)"; - this.version = packageData.version + "[client:" + connection2.version + "]"; - this._rateLimit = { - counter: 0, - timeout: null, - waiting: [], - checkpoint: false, - delta: Number(this.options.rateDelta) || 1000, - limit: Number(this.options.rateLimit) || 0 - }; - this._closed = false; - this._queue = []; - this._connections = []; - this._connectionCounter = 0; - this.idling = true; - setImmediate(() => { - if (this.idling) { - this.emit("idle"); - } - }); - } - getSocket(options, callback) { - return setImmediate(() => callback(null, false)); - } - send(mail, callback) { - if (this._closed) { - return false; - } - this._queue.push({ - mail, - requeueAttempts: 0, - callback - }); - if (this.idling && this._queue.length >= this.options.maxConnections) { - this.idling = false; - } - setImmediate(() => this._processMessages()); - return true; - } - close() { - let connection2; - let len = this._connections.length; - this._closed = true; - clearTimeout(this._rateLimit.timeout); - if (!len && !this._queue.length) { - return; - } - for (let i = len - 1;i >= 0; i--) { - if (this._connections[i] && this._connections[i].available) { - connection2 = this._connections[i]; - connection2.close(); - this.logger.info({ - tnx: "connection", - cid: connection2.id, - action: "removed" - }, "Connection #%s removed", connection2.id); - } - } - if (len && !this._connections.length) { - this.logger.debug({ - tnx: "connection" - }, "All connections removed"); - } - if (!this._queue.length) { - return; - } - let invokeCallbacks = () => { - if (!this._queue.length) { - this.logger.debug({ - tnx: "connection" - }, "Pending queue entries cleared"); - return; - } - let entry = this._queue.shift(); - if (entry && typeof entry.callback === "function") { - try { - entry.callback(new Error("Connection pool was closed")); - } catch (E) { - this.logger.error({ - err: E, - tnx: "callback", - cid: connection2.id - }, "Callback error for #%s: %s", connection2.id, E.message); - } - } - setImmediate(invokeCallbacks); - }; - setImmediate(invokeCallbacks); - } - _processMessages() { - let connection2; - let i, len; - if (this._closed) { - return; - } - if (!this._queue.length) { - if (!this.idling) { - this.idling = true; - this.emit("idle"); - } - return; - } - for (i = 0, len = this._connections.length;i < len; i++) { - if (this._connections[i].available) { - connection2 = this._connections[i]; - break; - } - } - if (!connection2 && this._connections.length < this.options.maxConnections) { - connection2 = this._createConnection(); - } - if (!connection2) { - this.idling = false; - return; - } - if (!this.idling && this._queue.length < this.options.maxConnections) { - this.idling = true; - this.emit("idle"); - } - let entry = connection2.queueEntry = this._queue.shift(); - entry.messageId = (connection2.queueEntry.mail.message.getHeader("message-id") || "").replace(/[<>\s]/g, ""); - connection2.available = false; - this.logger.debug({ - tnx: "pool", - cid: connection2.id, - messageId: entry.messageId, - action: "assign" - }, "Assigned message <%s> to #%s (%s)", entry.messageId, connection2.id, connection2.messages + 1); - if (this._rateLimit.limit) { - this._rateLimit.counter++; - if (!this._rateLimit.checkpoint) { - this._rateLimit.checkpoint = Date.now(); - } - } - connection2.send(entry.mail, (err, info) => { - if (entry === connection2.queueEntry) { - try { - entry.callback(err, info); - } catch (E) { - this.logger.error({ - err: E, - tnx: "callback", - cid: connection2.id - }, "Callback error for #%s: %s", connection2.id, E.message); - } - connection2.queueEntry = false; - } - }); - } - _createConnection() { - let connection2 = new PoolResource(this); - connection2.id = ++this._connectionCounter; - this.logger.info({ - tnx: "pool", - cid: connection2.id, - action: "conection" - }, "Created new pool resource #%s", connection2.id); - connection2.on("available", () => { - this.logger.debug({ - tnx: "connection", - cid: connection2.id, - action: "available" - }, "Connection #%s became available", connection2.id); - if (this._closed) { - this.close(); - } else { - this._processMessages(); - } - }); - connection2.once("error", (err) => { - if (err.code !== "EMAXLIMIT") { - this.logger.error({ - err, - tnx: "pool", - cid: connection2.id - }, "Pool Error for #%s: %s", connection2.id, err.message); - } else { - this.logger.debug({ - tnx: "pool", - cid: connection2.id, - action: "maxlimit" - }, "Max messages limit exchausted for #%s", connection2.id); - } - if (connection2.queueEntry) { - try { - connection2.queueEntry.callback(err); - } catch (E) { - this.logger.error({ - err: E, - tnx: "callback", - cid: connection2.id - }, "Callback error for #%s: %s", connection2.id, E.message); - } - connection2.queueEntry = false; - } - this._removeConnection(connection2); - this._continueProcessing(); - }); - connection2.once("close", () => { - this.logger.info({ - tnx: "connection", - cid: connection2.id, - action: "closed" - }, "Connection #%s was closed", connection2.id); - this._removeConnection(connection2); - if (connection2.queueEntry) { - setTimeout(() => { - if (connection2.queueEntry) { - if (this._shouldRequeuOnConnectionClose(connection2.queueEntry)) { - this._requeueEntryOnConnectionClose(connection2); - } else { - this._failDeliveryOnConnectionClose(connection2); - } - } - this._continueProcessing(); - }, 50); - } else { - this._continueProcessing(); - } - }); - this._connections.push(connection2); - return connection2; - } - _shouldRequeuOnConnectionClose(queueEntry) { - if (this.options.maxRequeues === undefined || this.options.maxRequeues < 0) { - return true; - } - return queueEntry.requeueAttempts < this.options.maxRequeues; - } - _failDeliveryOnConnectionClose(connection2) { - if (connection2.queueEntry && connection2.queueEntry.callback) { - try { - connection2.queueEntry.callback(new Error("Reached maximum number of retries after connection was closed")); - } catch (E) { - this.logger.error({ - err: E, - tnx: "callback", - messageId: connection2.queueEntry.messageId, - cid: connection2.id - }, "Callback error for #%s: %s", connection2.id, E.message); - } - connection2.queueEntry = false; - } - } - _requeueEntryOnConnectionClose(connection2) { - connection2.queueEntry.requeueAttempts = connection2.queueEntry.requeueAttempts + 1; - this.logger.debug({ - tnx: "pool", - cid: connection2.id, - messageId: connection2.queueEntry.messageId, - action: "requeue" - }, "Re-queued message <%s> for #%s. Attempt: #%s", connection2.queueEntry.messageId, connection2.id, connection2.queueEntry.requeueAttempts); - this._queue.unshift(connection2.queueEntry); - connection2.queueEntry = false; - } - _continueProcessing() { - if (this._closed) { - this.close(); - } else { - setTimeout(() => this._processMessages(), 100); - } - } - _removeConnection(connection2) { - let index = this._connections.indexOf(connection2); - if (index !== -1) { - this._connections.splice(index, 1); - } - } - _checkRateLimit(callback) { - if (!this._rateLimit.limit) { - return callback(); - } - let now = Date.now(); - if (this._rateLimit.counter < this._rateLimit.limit) { - return callback(); - } - this._rateLimit.waiting.push(callback); - if (this._rateLimit.checkpoint <= now - this._rateLimit.delta) { - return this._clearRateLimit(); - } else if (!this._rateLimit.timeout) { - this._rateLimit.timeout = setTimeout(() => this._clearRateLimit(), this._rateLimit.delta - (now - this._rateLimit.checkpoint)); - this._rateLimit.checkpoint = now; - } - } - _clearRateLimit() { - clearTimeout(this._rateLimit.timeout); - this._rateLimit.timeout = null; - this._rateLimit.counter = 0; - this._rateLimit.checkpoint = false; - while (this._rateLimit.waiting.length) { - let cb = this._rateLimit.waiting.shift(); - setImmediate(cb); - } - } - isIdle() { - return this.idling; - } - verify(callback) { - let promise; - if (!callback) { - promise = new Promise((resolve, reject) => { - callback = shared.callbackPromise(resolve, reject); - }); - } - let auth = new PoolResource(this).auth; - this.getSocket(this.options, (err, socketOptions) => { - if (err) { - return callback(err); - } - let options = this.options; - if (socketOptions && socketOptions.connection) { - this.logger.info({ - tnx: "proxy", - remoteAddress: socketOptions.connection.remoteAddress, - remotePort: socketOptions.connection.remotePort, - destHost: options.host || "", - destPort: options.port || "", - action: "connected" - }, "Using proxied socket from %s:%s to %s:%s", socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || "", options.port || ""); - options = shared.assign(false, options); - Object.keys(socketOptions).forEach((key) => { - options[key] = socketOptions[key]; - }); - } - let connection2 = new SMTPConnection(options); - let returned = false; - connection2.once("error", (err2) => { - if (returned) { - return; - } - returned = true; - connection2.close(); - return callback(err2); - }); - connection2.once("end", () => { - if (returned) { - return; - } - returned = true; - return callback(new Error("Connection closed")); - }); - let finalize = () => { - if (returned) { - return; - } - returned = true; - connection2.quit(); - return callback(null, true); - }; - connection2.connect(() => { - if (returned) { - return; - } - if (auth && (connection2.allowsAuth || options.forceAuth)) { - connection2.login(auth, (err2) => { - if (returned) { - return; - } - if (err2) { - returned = true; - connection2.close(); - return callback(err2); - } - finalize(); - }); - } else if (!auth && connection2.allowsAuth && options.forceAuth) { - let err2 = new Error("Authentication info was not provided"); - err2.code = "NoAuth"; - returned = true; - connection2.close(); - return callback(err2); - } else { - finalize(); - } - }); - }); - return promise; - } - } - module.exports = SMTPPool; -}); - -// node_modules/nodemailer/lib/smtp-transport/index.js -var require_smtp_transport = __commonJS((exports, module) => { - var EventEmitter = __require("events"); - var SMTPConnection = require_smtp_connection(); - var wellKnown = require_well_known(); - var shared = require_shared(); - var XOAuth2 = require_xoauth2(); - var packageData = require_package2(); - - class SMTPTransport extends EventEmitter { - constructor(options) { - super(); - options = options || {}; - if (typeof options === "string") { - options = { - url: options - }; - } - let urlData; - let service = options.service; - if (typeof options.getSocket === "function") { - this.getSocket = options.getSocket; - } - if (options.url) { - urlData = shared.parseConnectionUrl(options.url); - service = service || urlData.service; - } - this.options = shared.assign(false, options, urlData, service && wellKnown(service)); - this.logger = shared.getLogger(this.options, { - component: this.options.component || "smtp-transport" - }); - let connection2 = new SMTPConnection(this.options); - this.name = "SMTP"; - this.version = packageData.version + "[client:" + connection2.version + "]"; - if (this.options.auth) { - this.auth = this.getAuth({}); - } - } - getSocket(options, callback) { - return setImmediate(() => callback(null, false)); - } - getAuth(authOpts) { - if (!authOpts) { - return this.auth; - } - let hasAuth = false; - let authData = {}; - if (this.options.auth && typeof this.options.auth === "object") { - Object.keys(this.options.auth).forEach((key) => { - hasAuth = true; - authData[key] = this.options.auth[key]; - }); - } - if (authOpts && typeof authOpts === "object") { - Object.keys(authOpts).forEach((key) => { - hasAuth = true; - authData[key] = authOpts[key]; - }); - } - if (!hasAuth) { - return false; - } - switch ((authData.type || "").toString().toUpperCase()) { - case "OAUTH2": { - if (!authData.service && !authData.user) { - return false; - } - let oauth2 = new XOAuth2(authData, this.logger); - oauth2.provisionCallback = this.mailer && this.mailer.get("oauth2_provision_cb") || oauth2.provisionCallback; - oauth2.on("token", (token) => this.mailer.emit("token", token)); - oauth2.on("error", (err) => this.emit("error", err)); - return { - type: "OAUTH2", - user: authData.user, - oauth2, - method: "XOAUTH2" - }; - } - default: - return { - type: (authData.type || "").toString().toUpperCase() || "LOGIN", - user: authData.user, - credentials: { - user: authData.user || "", - pass: authData.pass, - options: authData.options - }, - method: (authData.method || "").trim().toUpperCase() || this.options.authMethod || false - }; - } - } - send(mail, callback) { - this.getSocket(this.options, (err, socketOptions) => { - if (err) { - return callback(err); - } - let returned = false; - let options = this.options; - if (socketOptions && socketOptions.connection) { - this.logger.info({ - tnx: "proxy", - remoteAddress: socketOptions.connection.remoteAddress, - remotePort: socketOptions.connection.remotePort, - destHost: options.host || "", - destPort: options.port || "", - action: "connected" - }, "Using proxied socket from %s:%s to %s:%s", socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || "", options.port || ""); - options = shared.assign(false, options); - Object.keys(socketOptions).forEach((key) => { - options[key] = socketOptions[key]; - }); - } - let connection2 = new SMTPConnection(options); - connection2.once("error", (err2) => { - if (returned) { - return; - } - returned = true; - connection2.close(); - return callback(err2); - }); - connection2.once("end", () => { - if (returned) { - return; - } - let timer = setTimeout(() => { - if (returned) { - return; - } - returned = true; - let err2 = new Error("Unexpected socket close"); - if (connection2 && connection2._socket && connection2._socket.upgrading) { - err2.code = "ETLS"; - } - callback(err2); - }, 1000); - try { - timer.unref(); - } catch (E) { - } - }); - let sendMessage = () => { - let envelope = mail.message.getEnvelope(); - let messageId = mail.message.messageId(); - let recipients = [].concat(envelope.to || []); - if (recipients.length > 3) { - recipients.push("...and " + recipients.splice(2).length + " more"); - } - if (mail.data.dsn) { - envelope.dsn = mail.data.dsn; - } - this.logger.info({ - tnx: "send", - messageId - }, "Sending message %s to <%s>", messageId, recipients.join(", ")); - connection2.send(envelope, mail.message.createReadStream(), (err2, info) => { - returned = true; - connection2.close(); - if (err2) { - this.logger.error({ - err: err2, - tnx: "send" - }, "Send error for %s: %s", messageId, err2.message); - return callback(err2); - } - info.envelope = { - from: envelope.from, - to: envelope.to - }; - info.messageId = messageId; - try { - return callback(null, info); - } catch (E) { - this.logger.error({ - err: E, - tnx: "callback" - }, "Callback error for %s: %s", messageId, E.message); - } - }); - }; - connection2.connect(() => { - if (returned) { - return; - } - let auth = this.getAuth(mail.data.auth); - if (auth && (connection2.allowsAuth || options.forceAuth)) { - connection2.login(auth, (err2) => { - if (auth && auth !== this.auth && auth.oauth2) { - auth.oauth2.removeAllListeners(); - } - if (returned) { - return; - } - if (err2) { - returned = true; - connection2.close(); - return callback(err2); - } - sendMessage(); - }); - } else { - sendMessage(); - } - }); - }); - } - verify(callback) { - let promise; - if (!callback) { - promise = new Promise((resolve, reject) => { - callback = shared.callbackPromise(resolve, reject); - }); - } - this.getSocket(this.options, (err, socketOptions) => { - if (err) { - return callback(err); - } - let options = this.options; - if (socketOptions && socketOptions.connection) { - this.logger.info({ - tnx: "proxy", - remoteAddress: socketOptions.connection.remoteAddress, - remotePort: socketOptions.connection.remotePort, - destHost: options.host || "", - destPort: options.port || "", - action: "connected" - }, "Using proxied socket from %s:%s to %s:%s", socketOptions.connection.remoteAddress, socketOptions.connection.remotePort, options.host || "", options.port || ""); - options = shared.assign(false, options); - Object.keys(socketOptions).forEach((key) => { - options[key] = socketOptions[key]; - }); - } - let connection2 = new SMTPConnection(options); - let returned = false; - connection2.once("error", (err2) => { - if (returned) { - return; - } - returned = true; - connection2.close(); - return callback(err2); - }); - connection2.once("end", () => { - if (returned) { - return; - } - returned = true; - return callback(new Error("Connection closed")); - }); - let finalize = () => { - if (returned) { - return; - } - returned = true; - connection2.quit(); - return callback(null, true); - }; - connection2.connect(() => { - if (returned) { - return; - } - let authData = this.getAuth({}); - if (authData && (connection2.allowsAuth || options.forceAuth)) { - connection2.login(authData, (err2) => { - if (returned) { - return; - } - if (err2) { - returned = true; - connection2.close(); - return callback(err2); - } - finalize(); - }); - } else if (!authData && connection2.allowsAuth && options.forceAuth) { - let err2 = new Error("Authentication info was not provided"); - err2.code = "NoAuth"; - returned = true; - connection2.close(); - return callback(err2); - } else { - finalize(); - } - }); - }); - return promise; - } - close() { - if (this.auth && this.auth.oauth2) { - this.auth.oauth2.removeAllListeners(); - } - this.emit("close"); - } - } - module.exports = SMTPTransport; -}); - -// node_modules/nodemailer/lib/sendmail-transport/index.js -var require_sendmail_transport = __commonJS((exports, module) => { - var spawn = __require("child_process").spawn; - var packageData = require_package2(); - var shared = require_shared(); - - class SendmailTransport { - constructor(options) { - options = options || {}; - this._spawn = spawn; - this.options = options || {}; - this.name = "Sendmail"; - this.version = packageData.version; - this.path = "sendmail"; - this.args = false; - this.winbreak = false; - this.logger = shared.getLogger(this.options, { - component: this.options.component || "sendmail" - }); - if (options) { - if (typeof options === "string") { - this.path = options; - } else if (typeof options === "object") { - if (options.path) { - this.path = options.path; - } - if (Array.isArray(options.args)) { - this.args = options.args; - } - this.winbreak = ["win", "windows", "dos", "\r\n"].includes((options.newline || "").toString().toLowerCase()); - } - } - } - send(mail, done) { - mail.message.keepBcc = true; - let envelope = mail.data.envelope || mail.message.getEnvelope(); - let messageId = mail.message.messageId(); - let args; - let sendmail; - let returned; - const hasInvalidAddresses = [].concat(envelope.from || []).concat(envelope.to || []).some((addr) => /^-/.test(addr)); - if (hasInvalidAddresses) { - return done(new Error("Can not send mail. Invalid envelope addresses.")); - } - if (this.args) { - args = ["-i"].concat(this.args).concat(envelope.to); - } else { - args = ["-i"].concat(envelope.from ? ["-f", envelope.from] : []).concat(envelope.to); - } - let callback = (err) => { - if (returned) { - return; - } - returned = true; - if (typeof done === "function") { - if (err) { - return done(err); - } else { - return done(null, { - envelope: mail.data.envelope || mail.message.getEnvelope(), - messageId, - response: "Messages queued for delivery" - }); - } - } - }; - try { - sendmail = this._spawn(this.path, args); - } catch (E) { - this.logger.error({ - err: E, - tnx: "spawn", - messageId - }, "Error occurred while spawning sendmail. %s", E.message); - return callback(E); - } - if (sendmail) { - sendmail.on("error", (err) => { - this.logger.error({ - err, - tnx: "spawn", - messageId - }, "Error occurred when sending message %s. %s", messageId, err.message); - callback(err); - }); - sendmail.once("exit", (code) => { - if (!code) { - return callback(); - } - let err; - if (code === 127) { - err = new Error("Sendmail command not found, process exited with code " + code); - } else { - err = new Error("Sendmail exited with code " + code); - } - this.logger.error({ - err, - tnx: "stdin", - messageId - }, "Error sending message %s to sendmail. %s", messageId, err.message); - callback(err); - }); - sendmail.once("close", callback); - sendmail.stdin.on("error", (err) => { - this.logger.error({ - err, - tnx: "stdin", - messageId - }, "Error occurred when piping message %s to sendmail. %s", messageId, err.message); - callback(err); - }); - let recipients = [].concat(envelope.to || []); - if (recipients.length > 3) { - recipients.push("...and " + recipients.splice(2).length + " more"); - } - this.logger.info({ - tnx: "send", - messageId - }, "Sending message %s to <%s>", messageId, recipients.join(", ")); - let sourceStream = mail.message.createReadStream(); - sourceStream.once("error", (err) => { - this.logger.error({ - err, - tnx: "stdin", - messageId - }, "Error occurred when generating message %s. %s", messageId, err.message); - sendmail.kill("SIGINT"); - callback(err); - }); - sourceStream.pipe(sendmail.stdin); - } else { - return callback(new Error("sendmail was not found")); - } - } - } - module.exports = SendmailTransport; -}); - -// node_modules/nodemailer/lib/stream-transport/index.js -var require_stream_transport = __commonJS((exports, module) => { - var packageData = require_package2(); - var shared = require_shared(); - - class StreamTransport { - constructor(options) { - options = options || {}; - this.options = options || {}; - this.name = "StreamTransport"; - this.version = packageData.version; - this.logger = shared.getLogger(this.options, { - component: this.options.component || "stream-transport" - }); - this.winbreak = ["win", "windows", "dos", "\r\n"].includes((options.newline || "").toString().toLowerCase()); - } - send(mail, done) { - mail.message.keepBcc = true; - let envelope = mail.data.envelope || mail.message.getEnvelope(); - let messageId = mail.message.messageId(); - let recipients = [].concat(envelope.to || []); - if (recipients.length > 3) { - recipients.push("...and " + recipients.splice(2).length + " more"); - } - this.logger.info({ - tnx: "send", - messageId - }, "Sending message %s to <%s> using %s line breaks", messageId, recipients.join(", "), this.winbreak ? "" : ""); - setImmediate(() => { - let stream; - try { - stream = mail.message.createReadStream(); - } catch (E) { - this.logger.error({ - err: E, - tnx: "send", - messageId - }, "Creating send stream failed for %s. %s", messageId, E.message); - return done(E); - } - if (!this.options.buffer) { - stream.once("error", (err) => { - this.logger.error({ - err, - tnx: "send", - messageId - }, "Failed creating message for %s. %s", messageId, err.message); - }); - return done(null, { - envelope: mail.data.envelope || mail.message.getEnvelope(), - messageId, - message: stream - }); - } - let chunks = []; - let chunklen = 0; - stream.on("readable", () => { - let chunk; - while ((chunk = stream.read()) !== null) { - chunks.push(chunk); - chunklen += chunk.length; - } - }); - stream.once("error", (err) => { - this.logger.error({ - err, - tnx: "send", - messageId - }, "Failed creating message for %s. %s", messageId, err.message); - return done(err); - }); - stream.on("end", () => done(null, { - envelope: mail.data.envelope || mail.message.getEnvelope(), - messageId, - message: Buffer.concat(chunks, chunklen) - })); - }); - } - } - module.exports = StreamTransport; -}); - -// node_modules/nodemailer/lib/json-transport/index.js -var require_json_transport = __commonJS((exports, module) => { - var packageData = require_package2(); - var shared = require_shared(); - - class JSONTransport { - constructor(options) { - options = options || {}; - this.options = options || {}; - this.name = "JSONTransport"; - this.version = packageData.version; - this.logger = shared.getLogger(this.options, { - component: this.options.component || "json-transport" - }); - } - send(mail, done) { - mail.message.keepBcc = true; - let envelope = mail.data.envelope || mail.message.getEnvelope(); - let messageId = mail.message.messageId(); - let recipients = [].concat(envelope.to || []); - if (recipients.length > 3) { - recipients.push("...and " + recipients.splice(2).length + " more"); - } - this.logger.info({ - tnx: "send", - messageId - }, "Composing JSON structure of %s to <%s>", messageId, recipients.join(", ")); - setImmediate(() => { - mail.normalize((err, data) => { - if (err) { - this.logger.error({ - err, - tnx: "send", - messageId - }, "Failed building JSON structure for %s. %s", messageId, err.message); - return done(err); - } - delete data.envelope; - delete data.normalizedHeaders; - return done(null, { - envelope, - messageId, - message: this.options.skipEncoding ? data : JSON.stringify(data) - }); - }); - }); - } - } - module.exports = JSONTransport; -}); - -// node_modules/nodemailer/lib/ses-transport/index.js -var require_ses_transport = __commonJS((exports, module) => { - var EventEmitter = __require("events"); - var packageData = require_package2(); - var shared = require_shared(); - var LeWindows = require_le_windows(); - - class SESTransport extends EventEmitter { - constructor(options) { - super(); - options = options || {}; - this.options = options || {}; - this.ses = this.options.SES; - this.name = "SESTransport"; - this.version = packageData.version; - this.logger = shared.getLogger(this.options, { - component: this.options.component || "ses-transport" - }); - this.maxConnections = Number(this.options.maxConnections) || Infinity; - this.connections = 0; - this.sendingRate = Number(this.options.sendingRate) || Infinity; - this.sendingRateTTL = null; - this.rateInterval = 1000; - this.rateMessages = []; - this.pending = []; - this.idling = true; - setImmediate(() => { - if (this.idling) { - this.emit("idle"); - } - }); - } - send(mail, callback) { - if (this.connections >= this.maxConnections) { - this.idling = false; - return this.pending.push({ - mail, - callback - }); - } - if (!this._checkSendingRate()) { - this.idling = false; - return this.pending.push({ - mail, - callback - }); - } - this._send(mail, (...args) => { - setImmediate(() => callback(...args)); - this._sent(); - }); - } - _checkRatedQueue() { - if (this.connections >= this.maxConnections || !this._checkSendingRate()) { - return; - } - if (!this.pending.length) { - if (!this.idling) { - this.idling = true; - this.emit("idle"); - } - return; - } - let next = this.pending.shift(); - this._send(next.mail, (...args) => { - setImmediate(() => next.callback(...args)); - this._sent(); - }); - } - _checkSendingRate() { - clearTimeout(this.sendingRateTTL); - let now = Date.now(); - let oldest = false; - for (let i = this.rateMessages.length - 1;i >= 0; i--) { - if (this.rateMessages[i].ts >= now - this.rateInterval && (!oldest || this.rateMessages[i].ts < oldest)) { - oldest = this.rateMessages[i].ts; - } - if (this.rateMessages[i].ts < now - this.rateInterval && !this.rateMessages[i].pending) { - this.rateMessages.splice(i, 1); - } - } - if (this.rateMessages.length < this.sendingRate) { - return true; - } - let delay = Math.max(oldest + 1001, now + 20); - this.sendingRateTTL = setTimeout(() => this._checkRatedQueue(), now - delay); - try { - this.sendingRateTTL.unref(); - } catch (E) { - } - return false; - } - _sent() { - this.connections--; - this._checkRatedQueue(); - } - isIdle() { - return this.idling; - } - _send(mail, callback) { - let statObject = { - ts: Date.now(), - pending: true - }; - this.connections++; - this.rateMessages.push(statObject); - let envelope = mail.data.envelope || mail.message.getEnvelope(); - let messageId = mail.message.messageId(); - let recipients = [].concat(envelope.to || []); - if (recipients.length > 3) { - recipients.push("...and " + recipients.splice(2).length + " more"); - } - this.logger.info({ - tnx: "send", - messageId - }, "Sending message %s to <%s>", messageId, recipients.join(", ")); - let getRawMessage = (next) => { - if (!mail.data._dkim) { - mail.data._dkim = {}; - } - if (mail.data._dkim.skipFields && typeof mail.data._dkim.skipFields === "string") { - mail.data._dkim.skipFields += ":date:message-id"; - } else { - mail.data._dkim.skipFields = "date:message-id"; - } - let sourceStream = mail.message.createReadStream(); - let stream = sourceStream.pipe(new LeWindows); - let chunks = []; - let chunklen = 0; - stream.on("readable", () => { - let chunk; - while ((chunk = stream.read()) !== null) { - chunks.push(chunk); - chunklen += chunk.length; - } - }); - sourceStream.once("error", (err) => stream.emit("error", err)); - stream.once("error", (err) => { - next(err); - }); - stream.once("end", () => next(null, Buffer.concat(chunks, chunklen))); - }; - setImmediate(() => getRawMessage((err, raw) => { - if (err) { - this.logger.error({ - err, - tnx: "send", - messageId - }, "Failed creating message for %s. %s", messageId, err.message); - statObject.pending = false; - return callback(err); - } - let sesMessage = { - RawMessage: { - Data: raw - }, - Source: envelope.from, - Destinations: envelope.to - }; - Object.keys(mail.data.ses || {}).forEach((key) => { - sesMessage[key] = mail.data.ses[key]; - }); - let ses = (this.ses.aws ? this.ses.ses : this.ses) || {}; - let aws = this.ses.aws || {}; - let getRegion = (cb) => { - if (ses.config && typeof ses.config.region === "function") { - return ses.config.region().then((region) => cb(null, region)).catch((err2) => cb(err2)); - } - return cb(null, ses.config && ses.config.region || "us-east-1"); - }; - getRegion((err2, region) => { - if (err2 || !region) { - region = "us-east-1"; - } - let sendPromise; - if (typeof ses.send === "function" && aws.SendRawEmailCommand) { - sendPromise = ses.send(new aws.SendRawEmailCommand(sesMessage)); - } else { - sendPromise = ses.sendRawEmail(sesMessage).promise(); - } - sendPromise.then((data) => { - if (region === "us-east-1") { - region = "email"; - } - statObject.pending = false; - callback(null, { - envelope: { - from: envelope.from, - to: envelope.to - }, - messageId: "<" + data.MessageId + (!/@/.test(data.MessageId) ? "@" + region + ".amazonses.com" : "") + ">", - response: data.MessageId, - raw - }); - }).catch((err3) => { - this.logger.error({ - err: err3, - tnx: "send" - }, "Send error for %s: %s", messageId, err3.message); - statObject.pending = false; - callback(err3); - }); - }); - })); - } - verify(callback) { - let promise; - let ses = (this.ses.aws ? this.ses.ses : this.ses) || {}; - let aws = this.ses.aws || {}; - const sesMessage = { - RawMessage: { - Data: "From: invalid@invalid\r\nTo: invalid@invalid\r\n Subject: Invalid\r\n\r\nInvalid" - }, - Source: "invalid@invalid", - Destinations: ["invalid@invalid"] - }; - if (!callback) { - promise = new Promise((resolve, reject) => { - callback = shared.callbackPromise(resolve, reject); - }); - } - const cb = (err) => { - if (err && (err.code || err.Code) !== "InvalidParameterValue") { - return callback(err); - } - return callback(null, true); - }; - if (typeof ses.send === "function" && aws.SendRawEmailCommand) { - sesMessage.RawMessage.Data = Buffer.from(sesMessage.RawMessage.Data); - ses.send(new aws.SendRawEmailCommand(sesMessage), cb); - } else { - ses.sendRawEmail(sesMessage, cb); - } - return promise; - } - } - module.exports = SESTransport; -}); - -// node_modules/nodemailer/lib/nodemailer.js -var require_nodemailer = __commonJS((exports, module) => { - var Mailer = require_mailer(); - var shared = require_shared(); - var SMTPPool = require_smtp_pool(); - var SMTPTransport = require_smtp_transport(); - var SendmailTransport = require_sendmail_transport(); - var StreamTransport = require_stream_transport(); - var JSONTransport = require_json_transport(); - var SESTransport = require_ses_transport(); - var nmfetch = require_fetch(); - var packageData = require_package2(); - var ETHEREAL_API = (process.env.ETHEREAL_API || "https://api.nodemailer.com").replace(/\/+$/, ""); - var ETHEREAL_WEB = (process.env.ETHEREAL_WEB || "https://ethereal.email").replace(/\/+$/, ""); - var ETHEREAL_API_KEY = (process.env.ETHEREAL_API_KEY || "").replace(/\s*/g, "") || null; - var ETHEREAL_CACHE = ["true", "yes", "y", "1"].includes((process.env.ETHEREAL_CACHE || "yes").toString().trim().toLowerCase()); - var testAccount = false; - exports.createTransport = function(transporter, defaults) { - let urlConfig; - let options; - let mailer; - if (typeof transporter === "object" && typeof transporter.send !== "function" || typeof transporter === "string" && /^(smtps?|direct):/i.test(transporter)) { - if (urlConfig = typeof transporter === "string" ? transporter : transporter.url) { - options = shared.parseConnectionUrl(urlConfig); - } else { - options = transporter; - } - if (options.pool) { - transporter = new SMTPPool(options); - } else if (options.sendmail) { - transporter = new SendmailTransport(options); - } else if (options.streamTransport) { - transporter = new StreamTransport(options); - } else if (options.jsonTransport) { - transporter = new JSONTransport(options); - } else if (options.SES) { - transporter = new SESTransport(options); - } else { - transporter = new SMTPTransport(options); - } - } - mailer = new Mailer(transporter, options, defaults); - return mailer; - }; - exports.createTestAccount = function(apiUrl, callback) { - let promise; - if (!callback && typeof apiUrl === "function") { - callback = apiUrl; - apiUrl = false; - } - if (!callback) { - promise = new Promise((resolve, reject) => { - callback = shared.callbackPromise(resolve, reject); - }); - } - if (ETHEREAL_CACHE && testAccount) { - setImmediate(() => callback(null, testAccount)); - return promise; - } - apiUrl = apiUrl || ETHEREAL_API; - let chunks = []; - let chunklen = 0; - let requestHeaders = {}; - let requestBody = { - requestor: packageData.name, - version: packageData.version - }; - if (ETHEREAL_API_KEY) { - requestHeaders.Authorization = "Bearer " + ETHEREAL_API_KEY; - } - let req = nmfetch(apiUrl + "/user", { - contentType: "application/json", - method: "POST", - headers: requestHeaders, - body: Buffer.from(JSON.stringify(requestBody)) - }); - req.on("readable", () => { - let chunk; - while ((chunk = req.read()) !== null) { - chunks.push(chunk); - chunklen += chunk.length; - } - }); - req.once("error", (err) => callback(err)); - req.once("end", () => { - let res = Buffer.concat(chunks, chunklen); - let data; - let err; - try { - data = JSON.parse(res.toString()); - } catch (E) { - err = E; - } - if (err) { - return callback(err); - } - if (data.status !== "success" || data.error) { - return callback(new Error(data.error || "Request failed")); - } - delete data.status; - testAccount = data; - callback(null, testAccount); - }); - return promise; - }; - exports.getTestMessageUrl = function(info) { - if (!info || !info.response) { - return false; - } - let infoProps = new Map; - info.response.replace(/\[([^\]]+)\]$/, (m, props) => { - props.replace(/\b([A-Z0-9]+)=([^\s]+)/g, (m2, key, value) => { - infoProps.set(key, value); - }); - }); - if (infoProps.has("STATUS") && infoProps.has("MSGID")) { - return (testAccount.web || ETHEREAL_WEB) + "/message/" + infoProps.get("MSGID"); - } - return false; - }; -}); - -// package-shared/utils/backend/parseCookies.ts -function parseCookies({ - request, - cookieString -}) { - try { - const cookieStr = request ? request.headers.cookie : cookieString ? cookieString : undefined; - if (!cookieStr) - return {}; - if (!cookieStr || typeof cookieStr !== "string") { - return {}; - } - const cookieSplitArray = cookieStr.split(";"); - let cookieObject = {}; - cookieSplitArray.forEach((keyValueString) => { - const [key, value] = keyValueString.split("="); - if (key && typeof key == "string") { - const parsedKey = key.replace(/^ +| +$/, ""); - cookieObject[parsedKey] = value && typeof value == "string" ? value.replace(/^ +| +$/, "") : ""; - } - }); - return cookieObject; - } catch (error) { - console.log(`ERROR parsing cookies: ${error.message}`); - return {}; - } -} - -// node_modules/generate-password/src/generate.js -var require_generate = __commonJS((exports, module) => { - var crypto2 = __require("crypto"); - var RANDOM_BATCH_SIZE = 256; - var randomIndex; - var randomBytes; - var getNextRandomValue = function() { - if (randomIndex === undefined || randomIndex >= randomBytes.length) { - randomIndex = 0; - randomBytes = crypto2.randomBytes(RANDOM_BATCH_SIZE); - } - var result = randomBytes[randomIndex]; - randomIndex += 1; - return result; - }; - var randomNumber = function(max) { - var rand = getNextRandomValue(); - while (rand >= 256 - 256 % max) { - rand = getNextRandomValue(); - } - return rand % max; - }; - var lowercase = "abcdefghijklmnopqrstuvwxyz"; - var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - var numbers = "0123456789"; - var symbols = '!@#$%^&*()+_-=}{[]|:;"/?.><,`~'; - var similarCharacters = /[ilLI|`oO0]/g; - var strictRules = [ - { name: "lowercase", rule: /[a-z]/ }, - { name: "uppercase", rule: /[A-Z]/ }, - { name: "numbers", rule: /[0-9]/ }, - { name: "symbols", rule: /[!@#$%^&*()+_\-=}{[\]|:;"/?.><,`~]/ } - ]; - var generate = function(options, pool) { - var password = "", optionsLength = options.length, poolLength = pool.length; - for (var i = 0;i < optionsLength; i++) { - password += pool[randomNumber(poolLength)]; - } - if (options.strict) { - var fitsRules = strictRules.every(function(rule) { - if (options[rule.name] == false) - return true; - if (rule.name === "symbols" && typeof options[rule.name] === "string") { - var re = new RegExp("[" + options[rule.name] + "]"); - return re.test(password); - } - return rule.rule.test(password); - }); - if (!fitsRules) - return generate(options, pool); - } - return password; - }; - exports.generate = function(options) { - options = options || {}; - if (!Object.prototype.hasOwnProperty.call(options, "length")) - options.length = 10; - if (!Object.prototype.hasOwnProperty.call(options, "numbers")) - options.numbers = false; - if (!Object.prototype.hasOwnProperty.call(options, "symbols")) - options.symbols = false; - if (!Object.prototype.hasOwnProperty.call(options, "exclude")) - options.exclude = ""; - if (!Object.prototype.hasOwnProperty.call(options, "uppercase")) - options.uppercase = true; - if (!Object.prototype.hasOwnProperty.call(options, "lowercase")) - options.lowercase = true; - if (!Object.prototype.hasOwnProperty.call(options, "excludeSimilarCharacters")) - options.excludeSimilarCharacters = false; - if (!Object.prototype.hasOwnProperty.call(options, "strict")) - options.strict = false; - if (options.strict) { - var minStrictLength = 1 + (options.numbers ? 1 : 0) + (options.symbols ? 1 : 0) + (options.uppercase ? 1 : 0); - if (minStrictLength > options.length) { - throw new TypeError("Length must correlate with strict guidelines"); - } - } - var pool = ""; - if (options.lowercase) { - pool += lowercase; - } - if (options.uppercase) { - pool += uppercase; - } - if (options.numbers) { - pool += numbers; - } - if (options.symbols) { - if (typeof options.symbols === "string") { - pool += options.symbols; - } else { - pool += symbols; - } - } - if (!pool) { - throw new TypeError("At least one rule for pools must be true"); - } - if (options.excludeSimilarCharacters) { - pool = pool.replace(similarCharacters, ""); - } - var i = options.exclude.length; - while (i--) { - pool = pool.replace(options.exclude[i], ""); - } - var password = generate(options, pool); - return password; - }; - exports.generateMultiple = function(amount, options) { - var passwords = []; - for (var i = 0;i < amount; i++) { - passwords[i] = exports.generate(options); - } - return passwords; - }; -}); - -// package-shared/functions/api/users/api-delete-user.ts -async function apiDeleteUser({ - dbFullName, - deletedUserId, - useLocal -}) { - const existingUserQuery = `SELECT * FROM users WHERE id = ?`; - const existingUserValues = [deletedUserId]; - const existingUser = await varDatabaseDbHandler2({ - queryString: existingUserQuery, - queryValuesArray: existingUserValues, - database: dbFullName, - useLocal - }); - if (!existingUser?.[0]) { - return { - success: false, - msg: "User not found" - }; - } - const deleteUser = await deleteDbEntry({ - dbContext: "Dsql User", - paradigm: "Full Access", - dbFullName, - tableName: "users", - identifierColumnName: "id", - identifierValue: deletedUserId, - useLocal - }); - return { - success: true, - result: deleteUser - }; -} -var init_api_delete_user = __esm(() => { - init_deleteDbEntry(); - init_varDatabaseDbHandler(); -}); - -// users/delete-user.ts -var exports_delete_user = {}; -__export(exports_delete_user, { - default: () => deleteUser -}); -import path16 from "path"; -import fs21 from "fs"; -async function deleteUser({ - key, - database, - user_id, - useLocal, - deletedUserId -}) { - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path16.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs21.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - return await apiDeleteUser({ - dbFullName: DSQL_DB_NAME, - useLocal, - deletedUserId - }); - } - const httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ - database, - deletedUserId - }); - const httpsRequest2 = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY || key - }, - port, - hostname: host, - path: `/api/user/${user_id || grabedHostNames.user_id}/delete-user` - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - reject(err); - }); - }); - httpsRequest2.write(reqPayload); - httpsRequest2.end(); - }); - return httpResponse; -} -var init_delete_user = __esm(() => { - init_grab_host_names(); - init_api_delete_user(); -}); - -// users/validate-temp-email-code.ts -var exports_validate_temp_email_code = {}; -__export(exports_validate_temp_email_code, { - default: () => validateTempEmailCode -}); -async function validateTempEmailCode({ - request, - email, - cookieString -}) { - try { - const keyNames = getAuthCookieNames(); - const oneTimeCodeCookieName = keyNames.oneTimeCodeName; - const cookies = parseCookies({ request, cookieString }); - const encryptedOneTimeCode = cookies[oneTimeCodeCookieName]; - const encryptedPayload = decrypt({ - encryptedString: encryptedOneTimeCode - }); - const payload = ejson_default.parse(encryptedPayload); - if (payload?.email && !email) { - return payload; - } - if (payload?.email && payload.email === email) { - return payload; - } - return null; - } catch (error) { - console.log("validateTempEmailCode error:", error.message); - return null; - } -} -var init_validate_temp_email_code = __esm(() => { - init_decrypt(); - init_ejson(); -}); - -// utils/get.ts -init_grab_host_names(); -import path from "path"; -import fs4 from "fs"; - -// package-shared/functions/api/query/get.ts -var import_lodash = __toESM(require_lodash(), 1); -init_serverError(); - -// package-shared/functions/backend/fullAccessDbHandler.ts -init_DSQL_USER_DB_HANDLER(); -init_LOCAL_DB_HANDLER(); -init_parseDbResults(); -init_serverError(); -async function fullAccessDbHandler({ - queryString, - database, - tableSchema, - queryValuesArray, - local -}) { - let results; - try { - results = local ? await LOCAL_DB_HANDLER(queryString, queryValuesArray) : await DSQL_USER_DB_HANDLER({ - paradigm: "Full Access", - database, - queryString, - queryValues: queryValuesArray - }); - } catch (error) { - serverError({ - component: "fullAccessDbHandler", - message: error.message - }); - return error.message; - } - if (results && tableSchema) { - const unparsedResults = results; - const parsedResults = await parseDbResults({ - unparsedResults, - tableSchema - }); - return parsedResults; - } else if (results) { - return results; - } else { - return null; - } -} - -// package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts -init_serverError(); -init_parseDbResults(); -init_DSQL_USER_DB_HANDLER(); -init_LOCAL_DB_HANDLER(); -async function varReadOnlyDatabaseDbHandler({ - queryString, - database, - queryValuesArray, - tableSchema, - useLocal -}) { - let results; - try { - results = useLocal ? await LOCAL_DB_HANDLER(queryString, queryValuesArray) : await DSQL_USER_DB_HANDLER({ - paradigm: "Read Only", - database, - queryString, - queryValues: queryValuesArray - }); - } catch (error) { - serverError({ - component: "varReadOnlyDatabaseDbHandler", - message: error.message, - noMail: true - }); - return error.message; - } - if (results) { - const unparsedResults = results; - const parsedResults = await parseDbResults({ - unparsedResults, - tableSchema - }); - return parsedResults; - } else { - return null; - } -} - -// package-shared/functions/backend/db/runQuery.ts -init_serverError(); - -// package-shared/functions/backend/db/addDbEntry.ts -var import_sanitize_html2 = __toESM(require_sanitize_html(), 1); - -// package-shared/functions/backend/html/sanitizeHtmlOptions.ts -var sanitizeHtmlOptions = { - allowedTags: [ - "b", - "i", - "em", - "strong", - "a", - "p", - "span", - "ul", - "ol", - "li", - "h1", - "h2", - "h3", - "h4", - "h5", - "h6", - "img", - "div", - "button", - "pre", - "code", - "br" - ], - allowedAttributes: { - a: ["href"], - img: ["src", "alt", "width", "height", "class", "style"], - "*": ["style", "class"] - } -}; -var sanitizeHtmlOptions_default = sanitizeHtmlOptions; - -// package-shared/functions/backend/db/updateDbEntry.ts -var import_sanitize_html = __toESM(require_sanitize_html(), 1); -init_DB_HANDLER(); -init_DSQL_USER_DB_HANDLER(); -init_encrypt(); -init_LOCAL_DB_HANDLER(); -async function updateDbEntry({ - dbContext, - paradigm, - dbFullName, - tableName, - data, - tableSchema, - identifierColumnName, - identifierValue, - encryptionKey, - encryptionSalt, - useLocal -}) { - if (!data || !Object.keys(data).length) - return null; - const isMaster = useLocal ? true : dbContext?.match(/dsql.user/i) ? false : dbFullName && !dbFullName.match(/^datasquirel$/) ? false : true; - const dbHandler = useLocal ? LOCAL_DB_HANDLER : isMaster ? DB_HANDLER : DSQL_USER_DB_HANDLER; - const dataKeys = Object.keys(data); - let updateKeyValueArray = []; - let updateValues = []; - for (let i = 0;i < dataKeys.length; i++) { - try { - const dataKey = dataKeys[i]; - let value = data[dataKey]; - const targetFieldSchemaArray = tableSchema ? tableSchema?.fields?.filter((field) => field.fieldName === dataKey) : null; - const targetFieldSchema = targetFieldSchemaArray && targetFieldSchemaArray[0] ? targetFieldSchemaArray[0] : null; - if (value == null || value == undefined) - continue; - const htmlRegex = /<[^>]+>/g; - if (targetFieldSchema?.richText || String(value).match(htmlRegex)) { - value = import_sanitize_html.default(value, sanitizeHtmlOptions_default); - } - if (targetFieldSchema?.encrypted) { - value = encrypt({ - data: value, - encryptionKey, - encryptionSalt - }); - } - if (typeof value === "object") { - value = JSON.stringify(value); - } - if (targetFieldSchema?.pattern) { - const pattern = new RegExp(targetFieldSchema.pattern, targetFieldSchema.patternFlags || ""); - if (!pattern.test(value)) { - console.log("DSQL: Pattern not matched =>", value); - value = ""; - } - } - if (typeof value === "string" && value.match(/^null$/i)) { - value = { - toSqlString: function() { - return "NULL"; - } - }; - } - if (typeof value === "string" && !value.match(/./i)) { - value = { - toSqlString: function() { - return "NULL"; - } - }; - } - updateKeyValueArray.push(`\`${dataKey}\`=?`); - if (typeof value == "number") { - updateValues.push(String(value)); - } else { - updateValues.push(value); - } - } catch (error) { - console.log("DSQL: Error in parsing data keys in update function =>", error.message); - continue; - } - } - updateKeyValueArray.push(`date_updated='${Date()}'`); - updateKeyValueArray.push(`date_updated_code='${Date.now()}'`); - const query = `UPDATE ${tableName} SET ${updateKeyValueArray.join(",")} WHERE \`${identifierColumnName}\`=?`; - updateValues.push(identifierValue); - const updatedEntry = isMaster ? await dbHandler(query, updateValues) : await dbHandler({ - paradigm, - database: dbFullName, - queryString: query, - queryValues: updateValues - }); - return updatedEntry; -} - -// package-shared/functions/backend/db/addDbEntry.ts -init_DB_HANDLER(); -init_DSQL_USER_DB_HANDLER(); -init_encrypt(); -init_LOCAL_DB_HANDLER(); -async function addDbEntry({ - dbContext, - paradigm, - dbFullName, - tableName, - data, - tableSchema, - duplicateColumnName, - duplicateColumnValue, - update, - encryptionKey, - encryptionSalt, - useLocal -}) { - const isMaster = useLocal ? true : dbContext?.match(/dsql.user/i) ? false : dbFullName && !dbFullName.match(/^datasquirel$/) ? false : true; - const dbHandler = useLocal ? LOCAL_DB_HANDLER : isMaster ? DB_HANDLER : DSQL_USER_DB_HANDLER; - if (data?.["date_created_timestamp"]) - delete data["date_created_timestamp"]; - if (data?.["date_updated_timestamp"]) - delete data["date_updated_timestamp"]; - if (data?.["date_updated"]) - delete data["date_updated"]; - if (data?.["date_updated_code"]) - delete data["date_updated_code"]; - if (data?.["date_created"]) - delete data["date_created"]; - if (data?.["date_created_code"]) - delete data["date_created_code"]; - if (duplicateColumnName && typeof duplicateColumnName === "string") { - const duplicateValue = isMaster ? await dbHandler(`SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, [duplicateColumnValue]) : await dbHandler({ - paradigm: "Read Only", - database: dbFullName, - queryString: `SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, - queryValues: [duplicateColumnValue] - }); - if (duplicateValue?.[0] && !update) { - return null; - } else if (duplicateValue && duplicateValue[0] && update) { - return await updateDbEntry({ - dbContext, - paradigm, - dbFullName, - tableName, - data, - tableSchema, - encryptionKey, - encryptionSalt, - identifierColumnName: duplicateColumnName, - identifierValue: duplicateColumnValue || "" - }); - } - } - const dataKeys = Object.keys(data); - let insertKeysArray = []; - let insertValuesArray = []; - for (let i = 0;i < dataKeys.length; i++) { - try { - const dataKey = dataKeys[i]; - let value = data?.[dataKey]; - const targetFieldSchemaArray = tableSchema ? tableSchema?.fields?.filter((field) => field.fieldName == dataKey) : null; - const targetFieldSchema = targetFieldSchemaArray && targetFieldSchemaArray[0] ? targetFieldSchemaArray[0] : null; - if (value == null || value == undefined) - continue; - if (targetFieldSchema?.dataType?.match(/int$/i) && typeof value == "string" && !value?.match(/./)) - continue; - if (targetFieldSchema?.encrypted) { - value = encrypt({ - data: value, - encryptionKey, - encryptionSalt - }); - console.log("DSQL: Encrypted value =>", value); - } - const htmlRegex = /<[^>]+>/g; - if (targetFieldSchema?.richText || String(value).match(htmlRegex)) { - value = import_sanitize_html2.default(value, sanitizeHtmlOptions_default); - } - if (targetFieldSchema?.pattern) { - const pattern = new RegExp(targetFieldSchema.pattern, targetFieldSchema.patternFlags || ""); - if (!pattern.test(value)) { - console.log("DSQL: Pattern not matched =>", value); - value = ""; - } - } - insertKeysArray.push("`" + dataKey + "`"); - if (typeof value === "object") { - value = JSON.stringify(value); - } - if (typeof value == "number") { - insertValuesArray.push(String(value)); - } else { - insertValuesArray.push(value); - } - } catch (error) { - console.log("DSQL: Error in parsing data keys =>", error.message); - continue; - } - } - if (!data?.["date_created"]) { - insertKeysArray.push("`date_created`"); - insertValuesArray.push(Date()); - } - if (!data?.["date_created_code"]) { - insertKeysArray.push("`date_created_code`"); - insertValuesArray.push(Date.now()); - } - if (!data?.["date_updated"]) { - insertKeysArray.push("`date_updated`"); - insertValuesArray.push(Date()); - } - if (!data?.["date_updated_code"]) { - insertKeysArray.push("`date_updated_code`"); - insertValuesArray.push(Date.now()); - } - const query = `INSERT INTO \`${tableName}\` (${insertKeysArray.join(",")}) VALUES (${insertValuesArray.map(() => "?").join(",")})`; - const queryValuesArray = insertValuesArray; - const newInsert = isMaster ? await dbHandler(query, queryValuesArray) : await dbHandler({ - paradigm, - database: dbFullName, - queryString: query, - queryValues: queryValuesArray - }); - return newInsert; -} - -// package-shared/functions/backend/db/runQuery.ts -init_deleteDbEntry(); - -// package-shared/utils/trim-sql.ts -function trimSql(sql) { - return sql.replace(/\n|\r|\n\r|\r\n/gm, " ").replace(/ {2,}/g, " ").trim(); -} - -// package-shared/functions/backend/db/runQuery.ts -async function runQuery({ - dbFullName, - query, - readOnly, - dbSchema, - queryValuesArray, - tableName, - local -}) { - let result; - let error; - let tableSchema; - if (dbSchema) { - try { - const table = tableName ? tableName : typeof query == "string" ? null : query ? query?.table : null; - if (!table) - throw new Error("No table name provided"); - tableSchema = dbSchema.tables.filter((tb) => tb?.tableName === table)[0]; - } catch (_err) { - } - } - try { - if (typeof query === "string") { - const formattedQuery = trimSql(query); - if (readOnly && formattedQuery.match(/^alter|^delete|information_schema|^create/i)) { - throw new Error("Wrong Input!"); - } - if (readOnly) { - result = await varReadOnlyDatabaseDbHandler({ - queryString: formattedQuery, - queryValuesArray: queryValuesArray?.map((vl) => String(vl)), - database: dbFullName, - tableSchema, - useLocal: local - }); - } else { - result = await fullAccessDbHandler({ - queryString: formattedQuery, - queryValuesArray: queryValuesArray?.map((vl) => String(vl)), - database: dbFullName, - tableSchema, - local - }); - } - } else if (typeof query === "object") { - const { - data, - action, - table, - identifierColumnName, - identifierValue, - update, - duplicateColumnName, - duplicateColumnValue - } = query; - switch (action.toLowerCase()) { - case "insert": - result = await addDbEntry({ - dbContext: local ? "Master" : "Dsql User", - paradigm: "Full Access", - dbFullName, - tableName: table, - data, - update, - duplicateColumnName, - duplicateColumnValue, - tableSchema, - useLocal: local - }); - if (!result?.insertId) { - error = new Error("Couldn't insert data"); - } - break; - case "update": - result = await updateDbEntry({ - dbContext: local ? "Master" : "Dsql User", - paradigm: "Full Access", - dbFullName, - tableName: table, - data, - identifierColumnName, - identifierValue, - tableSchema, - useLocal: local - }); - break; - case "delete": - result = await deleteDbEntry({ - dbContext: local ? "Master" : "Dsql User", - paradigm: "Full Access", - dbFullName, - tableName: table, - identifierColumnName, - identifierValue, - tableSchema, - useLocal: local - }); - break; - default: - result = null; - break; - } - } - } catch (error2) { - serverError({ - component: "functions/backend/runQuery", - message: error2.message - }); - result = null; - error2 = error2.message; - } - return { result, error }; -} - -// package-shared/functions/api/query/get.ts -async function apiGet({ - query, - dbFullName, - queryValues, - tableName, - dbSchema, - useLocal -}) { - if (typeof query == "string" && query.match(/^alter|^delete|information_schema|databases|^create/i)) { - return { success: false, msg: "Wrong Input." }; - } - let results; - try { - let { result, error } = await runQuery({ - dbFullName, - query, - queryValuesArray: queryValues, - readOnly: true, - dbSchema, - tableName, - local: useLocal - }); - let tableSchema; - if (dbSchema) { - const targetTable = dbSchema.tables.find((table) => table.tableName === tableName); - if (targetTable) { - const clonedTargetTable = import_lodash.default.cloneDeep(targetTable); - delete clonedTargetTable.childTable; - delete clonedTargetTable.childTableDbFullName; - delete clonedTargetTable.childTableName; - delete clonedTargetTable.childrenTables; - delete clonedTargetTable.updateData; - delete clonedTargetTable.tableNameOld; - delete clonedTargetTable.indexes; - tableSchema = clonedTargetTable; - } - } - if (error) - throw error; - if (result.error) - throw new Error(result.error); - results = result; - const resObject = { - success: true, - payload: results, - schema: tableName && tableSchema ? tableSchema : undefined - }; - return resObject; - } catch (error) { - serverError({ - component: "/api/query/get/lines-85-94", - message: error.message - }); - return { success: false, payload: null, error: error.message }; - } -} - -// package-shared/utils/serialize-query.ts -init_ejson(); -function serializeQuery(query) { - let str = "?"; - if (typeof query !== "object") { - console.log("Invalid Query type"); - return str; - } - if (Array.isArray(query)) { - console.log("Query is an Array. This is invalid."); - return str; - } - if (!query) { - console.log("No Query provided."); - return str; - } - const keys = Object.keys(query); - const queryArr = []; - keys.forEach((key) => { - if (!key || !query[key]) - return; - const value = query[key]; - if (typeof value === "object") { - const jsonStr = ejson_default.stringify(value); - queryArr.push(`${key}=${encodeURIComponent(String(jsonStr))}`); - } else if (typeof value === "string" || typeof value === "number") { - queryArr.push(`${key}=${encodeURIComponent(value)}`); - } else { - queryArr.push(`${key}=${String(value)}`); - } - }); - str += queryArr.join("&"); - return str; -} - -// utils/get.ts -async function get({ - key, - db, - query, - queryValues, - tableName, - useLocal, - user_id -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs4.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - return await apiGet({ - dbFullName: DSQL_DB_NAME, - query, - queryValues, - tableName, - dbSchema, - useLocal - }); - } - const httpResponse = await new Promise((resolve, reject) => { - const queryObject = { - db: process.env.DSQL_API_DB_NAME || String(db), - query: String(query.replace(/\n|\r|\n\r/g, "").replace(/ {2,}/g, " ")), - queryValues: queryValues ? JSON.stringify(queryValues) : undefined, - tableName - }; - const queryString = serializeQuery({ ...queryObject }); - let path2 = `/api/query/${user_id || grabedHostNames.user_id}/get${queryString}`; - const requestObject = { - method: "GET", - headers: { - "Content-Type": "application/json", - Authorization: key || process.env.DSQL_READ_ONLY_API_KEY || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: path2 - }; - scheme.request(requestObject, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - try { - resolve(JSON.parse(str)); - } catch (error) { - reject({ - error: error.message, - result: str - }); - } - }); - response.on("error", (err) => { - console.log("DSQL get Error,", err.message); - resolve(null); - }); - }).end(); - }); - return httpResponse; -} - -// utils/post.ts -init_grab_host_names(); -import path2 from "path"; -import fs5 from "fs"; - -// package-shared/functions/api/query/post.ts -var import_lodash2 = __toESM(require_lodash(), 1); -init_serverError(); -async function apiPost({ - query, - dbFullName, - queryValues, - tableName, - dbSchema, - useLocal -}) { - if (typeof query === "string" && query?.match(/^create |^alter |^drop /i)) { - return { success: false, msg: "Wrong Input" }; - } - if (typeof query === "object" && query?.action?.match(/^create |^alter |^drop /i)) { - return { success: false, msg: "Wrong Input" }; - } - let results; - try { - let { result, error } = await runQuery({ - dbFullName, - query, - dbSchema, - queryValuesArray: queryValues, - tableName, - local: useLocal - }); - results = result; - if (error) - throw error; - let tableSchema; - if (dbSchema) { - const targetTable = dbSchema.tables.find((table) => table.tableName === tableName); - if (targetTable) { - const clonedTargetTable = import_lodash2.default.cloneDeep(targetTable); - delete clonedTargetTable.childTable; - delete clonedTargetTable.childTableDbFullName; - delete clonedTargetTable.childTableName; - delete clonedTargetTable.childrenTables; - delete clonedTargetTable.updateData; - delete clonedTargetTable.tableNameOld; - delete clonedTargetTable.indexes; - tableSchema = clonedTargetTable; - } - } - return { - success: true, - payload: results, - error, - schema: tableName && tableSchema ? tableSchema : undefined - }; - } catch (error) { - serverError({ - component: "/api/query/post/lines-132-142", - message: error.message - }); - return { - success: false, - payload: results, - error: error.message - }; - } -} - -// utils/post.ts -async function post({ - key, - query, - queryValues, - database, - tableName, - useLocal, - user_id -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path2.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs5.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - return await apiPost({ - dbFullName: DSQL_DB_NAME, - query, - dbSchema, - queryValues, - tableName, - useLocal - }); - } - const httpResponse = await new Promise((resolve, reject) => { - const reqPayloadString = JSON.stringify({ - query, - queryValues, - database: process.env.DSQL_API_DB_NAME || database, - tableName: tableName ? tableName : null - }).replace(/\n|\r|\n\r/gm, ""); - try { - JSON.parse(reqPayloadString); - } catch (error) { - console.log(error); - console.log(reqPayloadString); - return { - success: false, - payload: null, - error: "Query object is invalid. Please Check query data values" - }; - } - const reqPayload = reqPayloadString; - const requPath = `/api/query/${user_id || grabedHostNames.user_id}/post`; - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: requPath - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - try { - resolve(JSON.parse(str)); - } catch (error) { - console.log("Route ERROR:", error.message); - resolve({ - success: false, - payload: null, - error: error.message, - errPayload: str - }); - } - }); - response.on("error", (err) => { - resolve({ - success: false, - payload: null, - error: err.message - }); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.on("error", (error) => { - console.log("HTTPS request ERROR =>", error); - }); - httpsRequest.end(); - }); - return httpResponse; -} - -// utils/get-schema.ts -init_grab_host_names(); -async function getSchema({ - key, - database, - field, - table, - user_id -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const httpResponse = await new Promise((resolve, reject) => { - const queryObject = { database, field, table }; - let query = Object.keys(queryObject).filter((k) => queryObject[k]).map((k) => `${k}=${queryObject[k]}`).join("&"); - scheme.request({ - method: "GET", - headers: { - "Content-Type": "application/json", - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/query/${user_id || grabedHostNames.user_id}/get-schema` + (query?.match(/./) ? `?${query}` : "") - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - resolve(null); - }); - }).end(); - }); - return { - success: true, - payload: httpResponse - }; -} - -// utils/upload-image.ts -init_grab_host_names(); -async function uploadImage({ - key, - payload, - user_id -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - try { - const httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify(payload); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/query/${user_id || grabedHostNames.user_id}/add-image` - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - return httpResponse; - } catch (error) { - console.log("Error in uploading image: ", error.message); - return { - success: false, - payload: null, - msg: error.message - }; - } -} -module_upload_image.exports = uploadImage; - -// utils/upload-file.ts -init_grab_host_names(); -async function uploadImage2({ - key, - payload, - user_id -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - try { - const httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify(payload); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/query/${user_id || grabedHostNames.user_id}/add-file` - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - return httpResponse; - } catch (error) { - console.log("Error in uploading file: ", error.message); - return { - success: false, - payload: null, - msg: error.message - }; - } -} - -// utils/delete-file.ts -init_grab_host_names(); -async function deleteFile({ - key, - url, - user_id -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - try { - const httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ url }); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/query/${user_id || grabedHostNames.user_id}/delete-file` - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - return httpResponse; - } catch (error) { - console.log("Error deleting file: ", error.message); - return { - success: false, - payload: null, - msg: error.message - }; - } -} -module_delete_file.exports = deleteFile; - -// users/add-user.ts -init_grab_host_names(); -import path7 from "path"; -import fs11 from "fs"; - -// package-shared/functions/backend/addUsersTableToDb.ts -init_serverError(); -init_DB_HANDLER(); - -// package-shared/functions/backend/grabUserSchemaData.ts -init_serverError(); -import fs6 from "fs"; -import path3 from "path"; -function grabUserSchemaData({ - userId -}) { - try { - const userSchemaFilePath = path3.resolve(process.cwd(), `${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${userId}/main.json`); - const userSchemaData = JSON.parse(fs6.readFileSync(userSchemaFilePath, "utf-8")); - return userSchemaData; - } catch (error) { - serverError({ - component: "grabUserSchemaData", - message: error.message - }); - return null; - } -} - -// package-shared/functions/backend/setUserSchemaData.ts -init_serverError(); -import fs7 from "fs"; -import path4 from "path"; -function setUserSchemaData({ - userId, - schemaData -}) { - try { - const userSchemaFilePath = path4.resolve(process.cwd(), `${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${userId}/main.json`); - fs7.writeFileSync(userSchemaFilePath, JSON.stringify(schemaData), "utf8"); - return true; - } catch (error) { - serverError({ - component: "/functions/backend/setUserSchemaData", - message: error.message - }); - return false; - } -} - -// package-shared/shell/createDbFromSchema.ts -import path6 from "path"; -import fs10 from "fs"; - -// package-shared/shell/utils/dbHandler.ts -var import_serverless_mysql4 = __toESM(require_serverless_mysql(), 1); -init_grabDbSSL(); -import fs8 from "fs"; -import path5 from "path"; -var __dirname = "/home/benoti/Projects/Git/moduletrace/datasquirel/datasquirel/package-shared/shell/utils"; -var connection = import_serverless_mysql4.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: grabDbSSL() - } -}); -async function dbHandler({ - query, - values, - database -}) { - let isDbCorrect = true; - if (database) { - connection = import_serverless_mysql4.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database, - charset: "utf8mb4", - ssl: grabDbSSL() - } - }); - } - if (!isDbCorrect) { - console.log("Shell Db Handler ERROR in switching Database! Operation Failed!"); - return null; - } - let results; - try { - if (query && values) { - results = await connection.query(query, values); - } else { - results = await connection.query(query); - } - await connection.end(); - } catch (error) { - if (process.env.FIRST_RUN) { - return null; - } - console.log("ERROR in dbHandler =>", error.message); - console.log(error); - console.log(connection.config()); - fs8.appendFileSync(path5.resolve(__dirname, "../.tmp/dbErrorLogs.txt"), JSON.stringify(error, null, 4) + "\n" + Date() + "\n\n\n", "utf8"); - results = null; - } - if (results) { - return JSON.parse(JSON.stringify(results)); - } else { - return null; - } -} - -// package-shared/shell/utils/noDatabaseDbHandler.ts -async function noDatabaseDbHandler(queryString) { - let results; - try { - results = await dbHandler({ query: queryString }); - } catch (error) { - console.log("ERROR in noDatabaseDbHandler =>", error.message); - } - if (results) { - return results; - } else { - return null; - } -} - -// package-shared/shell/utils/varDatabaseDbHandler.ts -async function varDatabaseDbHandler({ - queryString, - queryValuesArray, - database, - tableSchema -}) { - let results; - try { - if (queryString && queryValuesArray && Array.isArray(queryValuesArray) && queryValuesArray[0]) { - results = await dbHandler({ - query: queryString, - values: queryValuesArray, - database - }); - } else { - results = await dbHandler({ - query: queryString, - database - }); - } - } catch (error) { - console.log("Shell Vardb Error =>", error.message); - } - return results; -} - -// package-shared/shell/utils/generateColumnDescription.ts -function generateColumnDescription({ - columnData, - primaryKeySet -}) { - const { - fieldName, - dataType, - nullValue, - primaryKey, - autoIncrement, - defaultValue, - defaultValueLiteral, - onUpdateLiteral, - notNullValue - } = columnData; - let fieldEntryText = ""; - fieldEntryText += `\`${fieldName}\` ${dataType}`; - if (nullValue) { - fieldEntryText += " DEFAULT NULL"; - } else if (defaultValueLiteral) { - fieldEntryText += ` DEFAULT ${defaultValueLiteral}`; - } else if (defaultValue) { - if (String(defaultValue).match(/uuid\(\)/i)) { - fieldEntryText += ` DEFAULT UUID()`; - } else { - fieldEntryText += ` DEFAULT '${defaultValue}'`; - } - } else if (notNullValue) { - fieldEntryText += ` NOT NULL`; - } - if (onUpdateLiteral) { - fieldEntryText += ` ON UPDATE ${onUpdateLiteral}`; - } - if (primaryKey && !primaryKeySet) { - fieldEntryText += " PRIMARY KEY"; - primaryKeySet = true; - } - if (autoIncrement) { - fieldEntryText += " AUTO_INCREMENT"; - primaryKeySet = true; - } - return { - fieldEntryText, - newPrimaryKeySet: primaryKeySet || false - }; -} - -// package-shared/shell/utils/supplementTable.ts -function supplementTable({ tableInfoArray }) { - let finalTableArray = tableInfoArray; - const defaultFields = require_defaultFields(); - let primaryKeyExists = finalTableArray.filter((_field) => _field.primaryKey); - defaultFields.forEach((field) => { - let fieldExists = finalTableArray.filter((_field) => _field.fieldName === field.fieldName); - if (fieldExists && fieldExists[0]) { - return; - } else if (field.fieldName === "id" && !primaryKeyExists[0]) { - finalTableArray.unshift(field); - } else { - finalTableArray.push(field); - } - }); - return finalTableArray; -} - -// package-shared/shell/utils/createTable.ts -async function createTable({ - dbFullName, - tableName, - tableInfoArray, - dbSchema, - clone, - tableSchema, - recordedDbEntry -}) { - const finalTable = supplementTable({ tableInfoArray }); - const createTableQueryArray = []; - createTableQueryArray.push(`CREATE TABLE IF NOT EXISTS \`${tableName}\` (`); - try { - if (!recordedDbEntry) { - throw new Error("Recorded Db entry not found!"); - } - const existingTable = await varDatabaseDbHandler({ - database: "datasquirel", - queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, - queryValuesArray: [recordedDbEntry.id, tableSchema?.tableName] - }); - const table = existingTable?.[0]; - if (!table?.id) { - const newTableEntry = await dbHandler({ - query: `INSERT INTO user_database_tables SET ?`, - values: { - user_id: recordedDbEntry.user_id, - db_id: recordedDbEntry.id, - db_slug: recordedDbEntry.db_slug, - table_name: tableSchema?.tableFullName, - table_slug: tableSchema?.tableName, - child_table: tableSchema?.childTable ? "1" : null, - child_table_parent_database: tableSchema?.childTableDbFullName || null, - child_table_parent_table: tableSchema?.childTableName || null, - date_created: Date(), - date_created_code: Date.now(), - date_updated: Date(), - date_updated_code: Date.now() - }, - database: "datasquirel" - }); - } - } catch (error) { - } - let primaryKeySet = false; - let foreignKeys = []; - for (let i = 0;i < finalTable.length; i++) { - const column = finalTable[i]; - const { - fieldName, - dataType, - nullValue, - primaryKey, - autoIncrement, - defaultValue, - defaultValueLiteral, - foreignKey, - updatedField, - onUpdate, - onUpdateLiteral, - onDelete, - onDeleteLiteral, - defaultField, - encrypted, - json, - newTempField, - notNullValue, - originName, - plainText, - pattern, - patternFlags, - richText - } = column; - if (foreignKey) { - foreignKeys.push({ - ...column - }); - } - let { fieldEntryText, newPrimaryKeySet } = generateColumnDescription({ - columnData: column, - primaryKeySet - }); - primaryKeySet = newPrimaryKeySet; - const comma = (() => { - if (foreignKeys[0]) - return ","; - if (i === finalTable.length - 1) - return ""; - return ","; - })(); - createTableQueryArray.push(" " + fieldEntryText + comma); - } - if (foreignKeys[0]) { - foreignKeys.forEach((foreighKey, index, array) => { - const fieldName = foreighKey.fieldName; - const destinationTableName = foreighKey.foreignKey?.destinationTableName; - const destinationTableColumnName = foreighKey.foreignKey?.destinationTableColumnName; - const cascadeDelete = foreighKey.foreignKey?.cascadeDelete; - const cascadeUpdate = foreighKey.foreignKey?.cascadeUpdate; - const foreignKeyName = foreighKey.foreignKey?.foreignKeyName; - const comma = (() => { - if (index === foreignKeys.length - 1) - return ""; - return ","; - })(); - createTableQueryArray.push(` CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (\`${fieldName}\`) REFERENCES \`${destinationTableName}\`(${destinationTableColumnName})${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}${comma}`); - }); - } - createTableQueryArray.push(`) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;`); - const createTableQuery = createTableQueryArray.join("\n"); - const newTable = await varDatabaseDbHandler({ - queryString: createTableQuery, - database: dbFullName - }); - return newTable; -} - -// package-shared/shell/utils/updateTable.ts -import fs9 from "fs"; -var defaultFieldsRegexp2 = /^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/; -async function updateTable({ - dbFullName, - tableName, - tableInfoArray, - userId, - dbSchema, - tableIndexes, - tableSchema, - clone, - childDb, - tableIndex, - tableNameFull, - recordedDbEntry -}) { - let errorLogs = []; - let upToDateTableFieldsArray = tableInfoArray; - try { - const updateTableQueryArray = []; - const constraintsQueryArray = []; - updateTableQueryArray.push(`ALTER TABLE \`${tableName}\``); - if (childDb) { - try { - if (!recordedDbEntry) { - throw new Error("Recorded Db entry not found!"); - } - const existingTable = await varDatabaseDbHandler({ - database: "datasquirel", - queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, - queryValuesArray: [recordedDbEntry.id, tableName] - }); - const table = existingTable?.[0]; - if (!table?.id) { - const newTableEntry = await dbHandler({ - query: `INSERT INTO user_database_tables SET ?`, - values: { - user_id: recordedDbEntry.user_id, - db_id: recordedDbEntry.id, - db_slug: recordedDbEntry.db_slug, - table_name: tableNameFull, - table_slug: tableName, - child_table: tableSchema?.childTable ? "1" : null, - child_table_parent_database: tableSchema?.childTableDbFullName || null, - child_table_parent_table: tableSchema.childTableName || null, - date_created: Date(), - date_created_code: Date.now(), - date_updated: Date(), - date_updated_code: Date.now() - }, - database: "datasquirel" - }); - } - } catch (error) { - } - } - const allExistingIndexes = await varDatabaseDbHandler({ - queryString: `SHOW INDEXES FROM \`${tableName}\``, - database: dbFullName - }); - const allExistingColumns = await varDatabaseDbHandler({ - queryString: `SHOW COLUMNS FROM \`${tableName}\``, - database: dbFullName - }); - const updatedColumnsArray = []; - for (let e = 0;e < allExistingColumns.length; e++) { - const { Field } = allExistingColumns[e]; - if (Field.match(defaultFieldsRegexp2)) - continue; - let existingEntry = upToDateTableFieldsArray.filter((column) => column.fieldName === Field || column.originName === Field); - if (existingEntry && existingEntry[0]) { - if (existingEntry[0].updatedField && existingEntry[0].fieldName) { - updatedColumnsArray.push(existingEntry[0].fieldName); - const renameColumn = await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, - database: dbFullName - }); - console.log(`Column Renamed from "${existingEntry[0].originName}" to "${existingEntry[0].fieldName}"`); - try { - const userSchemaData = dbSchema; - const targetDbIndex = userSchemaData.findIndex((db) => db.dbFullName === dbFullName); - const targetTableIndex = userSchemaData[targetDbIndex].tables.findIndex((table) => table.tableName === tableName); - const targetFieldIndex = userSchemaData[targetDbIndex].tables[targetTableIndex].fields.findIndex((field) => field.fieldName === existingEntry[0].fieldName); - delete userSchemaData[targetDbIndex].tables[targetTableIndex].fields[targetFieldIndex]["originName"]; - delete userSchemaData[targetDbIndex].tables[targetTableIndex].fields[targetFieldIndex]["updatedField"]; - upToDateTableFieldsArray = userSchemaData[targetDbIndex].tables[targetTableIndex].fields; - fs9.writeFileSync(`${String(process.env.DSQL_USER_DB_SCHEMA_PATH)}/user-${userId}/main.json`, JSON.stringify(userSchemaData), "utf8"); - } catch (error) { - console.log("Update table error =>", error.message); - } - } - continue; - } else { - await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} DROP COLUMN \`${Field}\``, - database: dbFullName - }); - } - } - for (let f = 0;f < allExistingIndexes.length; f++) { - const { Key_name, Index_comment } = allExistingIndexes[f]; - if (Index_comment?.match(/schema_index/)) { - try { - const existingKeyInSchema = tableIndexes?.filter((indexObject) => indexObject.alias === Key_name); - if (!existingKeyInSchema?.[0]) - throw new Error(`This Index(${Key_name}) Has been Deleted!`); - } catch (error) { - await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} DROP INDEX \`${Key_name}\``, - database: dbFullName - }); - } - } - } - if (tableIndexes && tableIndexes[0]) { - for (let g = 0;g < tableIndexes.length; g++) { - const { indexType, indexName, indexTableFields, alias } = tableIndexes[g]; - if (!alias?.match(/./)) - continue; - try { - const existingKeyInDb = allExistingIndexes.filter((indexObject) => indexObject.Key_name === alias); - if (!existingKeyInDb[0]) - throw new Error("This Index Does not Exist"); - } catch (error) { - await varDatabaseDbHandler({ - queryString: `CREATE${indexType?.match(/fullText/i) ? " FULLTEXT" : ""} INDEX \`${alias}\` ON ${tableName}(${indexTableFields?.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, - database: dbFullName - }); - } - } - } - const allForeignKeys = await varDatabaseDbHandler({ - queryString: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`, - database: dbFullName - }); - if (allForeignKeys) { - for (let c = 0;c < allForeignKeys.length; c++) { - const { CONSTRAINT_NAME } = allForeignKeys[c]; - if (CONSTRAINT_NAME.match(/PRIMARY/)) - continue; - const dropForeignKey = await varDatabaseDbHandler({ - queryString: `ALTER TABLE ${tableName} DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, - database: dbFullName - }); - } - } - for (let i = 0;i < upToDateTableFieldsArray.length; i++) { - const column = upToDateTableFieldsArray[i]; - const prevColumn = upToDateTableFieldsArray[i - 1]; - const nextColumn = upToDateTableFieldsArray[i + 1]; - const { - fieldName, - dataType, - nullValue, - primaryKey, - autoIncrement, - defaultValue, - defaultValueLiteral, - foreignKey, - updatedField - } = column; - if (fieldName?.match(/^id$|^date_/)) - continue; - let updateText = ""; - let existingColumnIndex; - let existingColumn = allExistingColumns && allExistingColumns[0] ? allExistingColumns.filter((_column, _index) => { - if (_column.Field === fieldName) { - existingColumnIndex = _index; - return true; - } - }) : null; - let { fieldEntryText } = generateColumnDescription({ - columnData: column - }); - if (existingColumn && existingColumn[0]?.Field) { - const { Field, Type, Null, Key, Default, Extra } = existingColumn[0]; - let isColumnReordered = i < existingColumnIndex; - if (Field === fieldName && !isColumnReordered && dataType?.toUpperCase() === Type.toUpperCase()) { - updateText += `MODIFY COLUMN ${fieldEntryText}`; - } else { - if (userId) { - updateText += `MODIFY COLUMN ${fieldEntryText}${isColumnReordered ? prevColumn?.fieldName ? " AFTER `" + prevColumn.fieldName + "`" : nextColumn?.fieldName ? " BEFORE `" + nextColumn.fieldName + "`" : "" : ""}`; - } else { - updateText += `MODIFY COLUMN ${fieldEntryText}`; - } - } - } else if (prevColumn && prevColumn.fieldName) { - updateText += `ADD COLUMN ${fieldEntryText} AFTER \`${prevColumn.fieldName}\``; - } else if (nextColumn && nextColumn.fieldName) { - updateText += `ADD COLUMN ${fieldEntryText} BEFORE \`${nextColumn.fieldName}\``; - } else { - updateText += `ADD COLUMN ${fieldEntryText}`; - } - updateTableQueryArray.push(updateText + ","); - if (!clone && foreignKey) { - const { - destinationTableName, - destinationTableColumnName, - cascadeDelete, - cascadeUpdate, - foreignKeyName - } = foreignKey; - const foreinKeyText = `ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (\`${fieldName}\`) REFERENCES \`${destinationTableName}\`(\`${destinationTableColumnName}\`)${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}`; - const finalQueryString = `ALTER TABLE \`${tableName}\` ${foreinKeyText}`; - const addForeignKey = await varDatabaseDbHandler({ - database: dbFullName, - queryString: finalQueryString - }); - if (!addForeignKey?.serverStatus) { - errorLogs.push(addForeignKey); - } - } - } - const updateTableQuery = updateTableQueryArray.join(" ").replace(/,$/, ""); - if (updateTableQueryArray.length > 1) { - const updateTable2 = await varDatabaseDbHandler({ - queryString: updateTableQuery, - database: dbFullName - }); - return updateTable2; - } else { - return "No Changes Made to Table"; - } - } catch (error) { - console.log('Error in "updateTable" shell function =>', error.message); - return "Error in Updating Table"; - } -} - -// package-shared/shell/createDbFromSchema.ts -init_ejson(); -var __dirname = "/home/benoti/Projects/Git/moduletrace/datasquirel/datasquirel/package-shared/shell"; -require_main().config({ path: "./../.env" }); -var execFlag = process.argv.find((arg) => arg === "--exec"); -async function createDbFromSchema({ - userId, - targetDatabase, - dbSchemaData -}) { - const schemaPath = userId ? path6.join(String(process.env.DSQL_USER_DB_SCHEMA_PATH), `/user-${userId}/main.json`) : path6.resolve(__dirname, "../../jsonData/dbSchemas/main.json"); - const dbSchema = dbSchemaData || ejson_default.parse(fs10.readFileSync(schemaPath, "utf8")); - if (!dbSchema) { - console.log("Schema Not Found!"); - return; - } - for (let i = 0;i < dbSchema.length; i++) { - const database = dbSchema[i]; - const { dbFullName, tables, dbName, dbSlug, childrenDatabases } = database; - if (targetDatabase && dbFullName != targetDatabase) { - continue; - } - const dbCheck = await noDatabaseDbHandler(`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`); - if (dbCheck && dbCheck[0]?.dbFullName) { - } else { - const newDatabase = await noDatabaseDbHandler(`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`); - } - const allTables = await noDatabaseDbHandler(`SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`); - for (let tb = 0;tb < allTables.length; tb++) { - const { TABLE_NAME } = allTables[tb]; - if (!tables.filter((_table) => _table.tableName === TABLE_NAME)[0]) { - const oldTableFilteredArray = tables.filter((_table) => _table.tableNameOld && _table.tableNameOld === TABLE_NAME); - if (oldTableFilteredArray && oldTableFilteredArray[0]) { - console.log("Renaming Table"); - await varDatabaseDbHandler({ - queryString: `RENAME TABLE \`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, - database: dbFullName - }); - } else { - console.log(`Dropping Table from ${dbFullName}`); - await varDatabaseDbHandler({ - queryString: `DROP TABLE \`${TABLE_NAME}\``, - database: dbFullName - }); - const deleteTableEntry = await dbHandler({ - query: `DELETE FROM user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`, - values: [userId, dbSlug, TABLE_NAME], - database: "datasquirel" - }); - } - } - } - const recordedDbEntryArray = userId ? await varDatabaseDbHandler({ - database: "datasquirel", - queryString: `SELECT * FROM user_databases WHERE db_full_name = ?`, - queryValuesArray: [dbFullName] - }) : undefined; - const recordedDbEntry = recordedDbEntryArray?.[0]; - for (let t = 0;t < tables.length; t++) { - const table = tables[t]; - const { tableName, fields, indexes } = table; - const tableCheck = await varDatabaseDbHandler({ - queryString: ` - SELECT EXISTS ( - SELECT - TABLE_NAME - FROM - information_schema.TABLES - WHERE - TABLE_SCHEMA = ? AND - TABLE_NAME = ? - ) AS tableExists`, - queryValuesArray: [dbFullName, table.tableName], - database: dbFullName - }); - if (tableCheck && tableCheck[0]?.tableExists > 0) { - const updateExistingTable = await updateTable({ - dbFullName, - tableName, - tableNameFull: table.tableFullName, - tableInfoArray: fields, - userId, - dbSchema, - tableIndexes: indexes, - tableIndex: t, - childDb: database.childDatabase || undefined, - recordedDbEntry, - tableSchema: table - }); - if (table.childrenTables && table.childrenTables[0]) { - for (let ch = 0;ch < table.childrenTables.length; ch++) { - const childTable = table.childrenTables[ch]; - const updateExistingChildTable = await updateTable({ - dbFullName: childTable.dbNameFull, - tableName: childTable.tableName, - tableNameFull: childTable.tableNameFull, - tableInfoArray: fields, - userId, - dbSchema, - tableIndexes: indexes, - clone: true, - childDb: database.childDatabase || undefined, - recordedDbEntry, - tableSchema: table - }); - } - } - } else { - const createNewTable = await createTable({ - tableName, - tableInfoArray: fields, - dbFullName, - dbSchema, - tableSchema: table, - recordedDbEntry - }); - if (indexes && indexes[0]) { - if (indexes && indexes[0]) { - for (let g = 0;g < indexes.length; g++) { - const { - indexType, - indexName, - indexTableFields, - alias - } = indexes[g]; - if (!alias?.match(/./)) - continue; - try { - const allExistingIndexes = await varDatabaseDbHandler({ - queryString: `SHOW INDEXES FROM \`${tableName}\``, - database: dbFullName - }); - const existingKeyInDb = allExistingIndexes.filter((indexObject) => indexObject.Key_name === alias); - if (!existingKeyInDb[0]) - throw new Error("This Index Does not Exist"); - } catch (error) { - await varDatabaseDbHandler({ - queryString: `CREATE${indexType?.match(/fullText/i) ? " FULLTEXT" : ""} INDEX \`${alias}\` ON ${tableName}(${indexTableFields?.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, - database: dbFullName - }); - } - } - } - } - } - } - if (childrenDatabases?.[0]) { - for (let ch = 0;ch < childrenDatabases.length; ch++) { - const childDb = childrenDatabases[ch]; - const { dbFullName: dbFullName2 } = childDb; - await createDbFromSchema({ - userId, - targetDatabase: dbFullName2 - }); - } - } - } -} -if (execFlag) { - createDbFromSchema({}); -} - -// package-shared/functions/backend/addUsersTableToDb.ts -init_LOCAL_DB_HANDLER(); - -// package-shared/functions/backend/grabSchemaFieldsFromData.ts -init_serverError(); -function grabSchemaFieldsFromData({ - data, - fields, - excludeData, - excludeFields -}) { - try { - const possibleFields = require_possibleFields(); - const dataTypes = require_dataTypes(); - const finalFields = []; - let filteredFields = []; - if (data && Object.keys(data)?.[0]) { - filteredFields = Object.keys(data); - } - if (fields) { - filteredFields = [...filteredFields, ...fields]; - filteredFields = [...new Set(filteredFields)]; - } - filteredFields = filteredFields.filter((fld) => !excludeData || !Object.keys(excludeData).includes(fld)).filter((fld) => !excludeFields || !excludeFields.find((exlFld) => exlFld.fieldName == fld)); - filteredFields.forEach((fld) => { - const value = data ? data[fld] : null; - if (typeof value == "string") { - const newField = { - fieldName: fld, - dataType: value.length > 255 ? "TEXT" : "VARCHAR(255)" - }; - if (Boolean(value.match(/<[^>]+>/g))) { - newField.richText = true; - } - finalFields.push(newField); - } else if (typeof value == "number") { - finalFields.push({ - fieldName: fld, - dataType: "INT" - }); - } else { - finalFields.push({ - fieldName: fld, - dataType: "VARCHAR(255)" - }); - } - }); - return finalFields; - } catch (error) { - console.log(`grabSchemaFieldsFromData.js ERROR: ${error.message}`); - serverError({ - component: "grabSchemaFieldsFromData.js", - message: error.message - }); - return []; - } -} - -// package-shared/functions/backend/grabNewUsersTableSchema.ts -init_serverError(); -function grabNewUsersTableSchema(params) { - try { - const userPreset = require_users(); - const defaultFields = require_defaultFields(); - const supplementalFields = params?.payload ? grabSchemaFieldsFromData({ - data: params?.payload, - excludeData: defaultFields, - excludeFields: userPreset.fields - }) : []; - console.log("supplementalFields", supplementalFields); - const allFields = [...userPreset.fields, ...supplementalFields]; - console.log("allFields", allFields); - const finalFields = [ - ...defaultFields.slice(0, 2), - ...allFields, - ...defaultFields.slice(2) - ]; - userPreset.fields = [...finalFields]; - return userPreset; - } catch (error) { - console.log(`grabNewUsersTableSchema.js ERROR: ${error.message}`); - serverError({ - component: "grabNewUsersTableSchema", - message: error.message - }); - return null; - } -} - -// package-shared/functions/backend/addUsersTableToDb.ts -async function addUsersTableToDb({ - userId, - database, - useLocal, - payload -}) { - try { - const dbFullName = database; - const userPreset = grabNewUsersTableSchema({ payload }); - if (!userPreset) - throw new Error("Couldn't Get User Preset!"); - const userSchemaData = grabUserSchemaData({ userId }); - if (!userSchemaData) - throw new Error("User schema data not found!"); - let targetDatabase = userSchemaData.find((db) => db.dbFullName === database); - if (!targetDatabase) { - throw new Error("Couldn't Find Target Database!"); - } - let existingTableIndex = targetDatabase?.tables.findIndex((table) => table.tableName === "users"); - if (typeof existingTableIndex == "number" && existingTableIndex > 0) { - targetDatabase.tables[existingTableIndex] = userPreset; - } else { - targetDatabase.tables.push(userPreset); - } - setUserSchemaData({ schemaData: userSchemaData, userId }); - const targetDb = useLocal ? await LOCAL_DB_HANDLER(`SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`, [userId, database]) : await DB_HANDLER(`SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`, [userId, database]); - if (targetDb?.[0]) { - const newTableEntry = await addDbEntry({ - dbFullName: "datasquirel", - tableName: "user_database_tables", - data: { - user_id: userId, - db_id: targetDb[0].id, - db_slug: targetDatabase.dbSlug, - table_name: "Users", - table_slug: "users" - }, - useLocal - }); - } - const dbShellUpdate = await createDbFromSchema({ - userId, - targetDatabase: dbFullName - }); - return `Done!`; - } catch (error) { - console.log(`addUsersTableToDb.js ERROR: ${error.message}`); - serverError({ - component: "addUsersTableToDb", - message: error.message, - user: { id: userId } - }); - return error.message; - } -} - -// package-shared/functions/backend/updateUsersTableSchema.ts -init_serverError(); -async function updateUsersTableSchema({ - userId, - database, - newFields, - newPayload -}) { - try { - const dbFullName = database; - const userSchemaData = grabUserSchemaData({ userId }); - if (!userSchemaData) - throw new Error("User schema data not found!"); - let targetDatabaseIndex = userSchemaData.findIndex((db) => db.dbFullName === database); - if (targetDatabaseIndex < 0) { - throw new Error("Couldn't Find Target Database!"); - } - let existingTableIndex = userSchemaData[targetDatabaseIndex]?.tables.findIndex((table) => table.tableName === "users"); - const usersTable = userSchemaData[targetDatabaseIndex].tables[existingTableIndex]; - if (!usersTable?.fields?.[0]) - throw new Error("Users Table Not Found!"); - const additionalFields = grabSchemaFieldsFromData({ - fields: newFields, - data: newPayload - }); - const spliceStartIndex = usersTable.fields.findIndex((field) => field.fieldName === "date_created"); - const finalSpliceStartIndex = spliceStartIndex >= 0 ? spliceStartIndex : 0; - usersTable.fields.splice(finalSpliceStartIndex, 0, ...additionalFields); - setUserSchemaData({ schemaData: userSchemaData, userId }); - const dbShellUpdate = await createDbFromSchema({ - userId, - targetDatabase: dbFullName - }); - return `Done!`; - } catch (error) { - console.log(`addUsersTableToDb.js ERROR: ${error.message}`); - serverError({ - component: "addUsersTableToDb", - message: error.message, - user: { id: userId } - }); - return error.message; - } -} - -// package-shared/functions/api/users/api-create-user.ts -init_varDatabaseDbHandler(); -init_hashPassword(); -async function apiCreateUser({ - encryptionKey, - payload, - database, - userId, - useLocal -}) { - const dbFullName = database; - const API_USER_ID = userId || process.env.DSQL_API_USER_ID; - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - if (!finalEncryptionKey) { - return { - success: false, - msg: "No encryption key provided", - payload: null - }; - } - if (!finalEncryptionKey?.match(/.{8,}/)) { - return { - success: false, - msg: "Encryption key must be at least 8 characters long", - payload: null - }; - } - const hashedPassword = hashPassword({ - encryptionKey: finalEncryptionKey, - password: String(payload.password) - }); - payload.password = hashedPassword; - const fieldsQuery = `SHOW COLUMNS FROM users`; - let fields = await varDatabaseDbHandler2({ - queryString: fieldsQuery, - database: dbFullName, - useLocal - }); - if (!fields?.[0]) { - const newTable = await addUsersTableToDb({ - userId: Number(API_USER_ID), - database: dbFullName, - useLocal, - payload - }); - fields = await varDatabaseDbHandler2({ - queryString: fieldsQuery, - database: dbFullName, - useLocal - }); - } - if (!fields?.[0]) { - return { - success: false, - msg: "Could not create users table" - }; - } - const fieldsTitles = fields.map((fieldObject) => fieldObject.Field); - let invalidField = null; - for (let i = 0;i < Object.keys(payload).length; i++) { - const key = Object.keys(payload)[i]; - if (!fieldsTitles.includes(key)) { - await updateUsersTableSchema({ - userId: Number(API_USER_ID), - database: dbFullName, - newPayload: { - [key]: payload[key] - } - }); - } - } - if (invalidField) { - return { - success: false, - msg: `${invalidField} is not a valid field!` - }; - } - const existingUserQuery = `SELECT * FROM users WHERE email = ?${payload.username ? " OR username = ?" : ""}`; - const existingUserValues = payload.username ? [payload.email, payload.username] : [payload.email]; - const existingUser = await varDatabaseDbHandler2({ - queryString: existingUserQuery, - queryValuesArray: existingUserValues, - database: dbFullName, - useLocal - }); - if (existingUser?.[0]) { - return { - success: false, - msg: "User Already Exists", - payload: null - }; - } - const addUser = await addDbEntry({ - dbContext: "Dsql User", - paradigm: "Full Access", - dbFullName, - tableName: "users", - data: { - ...payload, - image: process.env.DSQL_DEFAULT_USER_IMAGE || "/images/user-preset.png", - image_thumbnail: process.env.DSQL_DEFAULT_USER_IMAGE || "/images/user-preset-thumbnail.png" - }, - useLocal - }); - if (addUser?.insertId) { - const newlyAddedUserQuery = `SELECT id,first_name,last_name,email,username,phone,image,image_thumbnail,city,state,country,zip_code,address,verification_status,more_user_data FROM users WHERE id='${addUser.insertId}'`; - const newlyAddedUser = await varDatabaseDbHandler2({ - queryString: newlyAddedUserQuery, - database: dbFullName, - useLocal - }); - return { - success: true, - payload: newlyAddedUser[0] - }; - } else { - return { - success: false, - msg: "Could not create user", - sqlResult: addUser, - payload: null - }; - } -} - -// users/add-user.ts -async function addUser({ - key, - payload, - database, - encryptionKey, - user_id, - useLocal, - apiUserId -}) { - const { - DSQL_DB_HOST, - DSQL_DB_USERNAME, - DSQL_DB_PASSWORD, - DSQL_DB_NAME, - DSQL_API_USER_ID - } = process.env; - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path7.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs11.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - return await apiCreateUser({ - database: DSQL_DB_NAME, - encryptionKey, - payload, - userId: apiUserId, - useLocal - }); - } - const httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ - payload, - database, - encryptionKey - }); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/user/${user_id || grabedHostNames.user_id}/add-user` - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - return httpResponse; -} - -// users/update-user.ts -init_grab_host_names(); -import path8 from "path"; -import fs12 from "fs"; - -// package-shared/functions/api/users/api-update-user.ts -init_encrypt(); -init_hashPassword(); -init_varDatabaseDbHandler(); -async function apiUpdateUser({ - payload, - dbFullName, - updatedUserId, - useLocal, - dbSchema -}) { - const existingUserQuery = `SELECT * FROM users WHERE id = ?`; - const existingUserValues = [updatedUserId]; - const existingUser = await varDatabaseDbHandler2({ - queryString: existingUserQuery, - queryValuesArray: existingUserValues, - database: dbFullName, - useLocal - }); - if (!existingUser?.[0]) { - return { - success: false, - msg: "User not found" - }; - } - const data = (() => { - const reqBodyKeys = Object.keys(payload); - const targetTableSchema = (() => { - try { - const targetDatabaseSchema = dbSchema?.tables?.find((tbl) => tbl.tableName == "users"); - return targetDatabaseSchema; - } catch (error) { - return; - } - })(); - const finalData = {}; - reqBodyKeys.forEach((key) => { - const targetFieldSchema = targetTableSchema?.fields?.find((field) => field.fieldName == key); - if (key?.match(/^date_|^id$|^uuid$/)) - return; - let value = payload[key]; - if (targetFieldSchema?.encrypted) { - value = encrypt({ data: value }); - } - finalData[key] = value; - }); - if (finalData.password && typeof finalData.password == "string") { - finalData.password = hashPassword({ password: finalData.password }); - } - return finalData; - })(); - const updateUser = await updateDbEntry({ - dbContext: "Dsql User", - paradigm: "Full Access", - dbFullName, - tableName: "users", - identifierColumnName: "id", - identifierValue: updatedUserId, - data, - useLocal - }); - return { - success: true, - payload: updateUser - }; -} - -// users/update-user.ts -async function updateUser({ - key, - payload, - database, - user_id, - useLocal, - updatedUserId -}) { - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path8.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs12.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - return await apiUpdateUser({ - payload, - dbFullName: DSQL_DB_NAME, - useLocal, - updatedUserId, - dbSchema - }); - } - const httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ - payload, - database, - updatedUserId - }); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY || key - }, - port, - hostname: host, - path: `/api/user/${user_id || grabedHostNames.user_id}/update-user` - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - return httpResponse; -} - -// users/login-user.ts -init_encrypt(); -init_grab_host_names(); -import fs14 from "fs"; -import path10 from "path"; - -// package-shared/functions/api/users/api-login.ts -init_varDatabaseDbHandler(); -init_hashPassword(); -async function apiLoginUser({ - encryptionKey, - email, - username, - password, - database, - additionalFields, - email_login, - email_login_code, - email_login_field, - token, - skipPassword, - social, - useLocal -}) { - const dbFullName = database; - if (email?.match(/ /) || username && username?.match(/ /) || password && password?.match(/ /)) { - return { - success: false, - msg: "Invalid Email/Password format" - }; - } - let hashedPassword = password ? hashPassword({ - encryptionKey, - password - }) : null; - let foundUser = await varDatabaseDbHandler2({ - queryString: `SELECT * FROM users WHERE email = ? OR username = ?`, - queryValuesArray: [email, username], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), - useLocal - }); - if ((!foundUser || !foundUser[0]) && !social) - return { - success: false, - payload: null, - msg: "No user found" - }; - let isPasswordCorrect = false; - if (foundUser?.[0] && !email_login && skipPassword) { - isPasswordCorrect = true; - } else if (foundUser?.[0] && !email_login) { - isPasswordCorrect = hashedPassword === foundUser[0].password; - } else if (foundUser && foundUser[0] && email_login && email_login_code && email_login_field) { - const tempCode = foundUser[0][email_login_field]; - if (!tempCode) - throw new Error("No code Found!"); - const tempCodeArray = tempCode.split("-"); - const [code, codeDate] = tempCodeArray; - const millisecond15mins = 1000 * 60 * 15; - if (Date.now() - Number(codeDate) > millisecond15mins) { - throw new Error("Code Expired"); - } - isPasswordCorrect = code === email_login_code; - } - let socialUserValid = false; - if (!isPasswordCorrect && !socialUserValid) { - return { - success: false, - msg: "Wrong password, no social login validity", - payload: null - }; - } - if (isPasswordCorrect && email_login) { - const resetTempCode = await varDatabaseDbHandler2({ - queryString: `UPDATE users SET ${email_login_field} = '' WHERE email = ? OR username = ?`, - queryValuesArray: [email, username], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), - useLocal - }); - } - let csrfKey = Math.random().toString(36).substring(2) + "-" + Math.random().toString(36).substring(2); - let userPayload = { - id: foundUser[0].id, - first_name: foundUser[0].first_name, - last_name: foundUser[0].last_name, - username: foundUser[0].username, - email: foundUser[0].email, - phone: foundUser[0].phone, - social_id: foundUser[0].social_id, - image: foundUser[0].image, - image_thumbnail: foundUser[0].image_thumbnail, - verification_status: foundUser[0].verification_status, - social_login: foundUser[0].social_login, - social_platform: foundUser[0].social_platform, - csrf_k: csrfKey, - more_data: foundUser[0].more_user_data, - logged_in_status: true, - date: Date.now() - }; - const resposeObject = { - success: true, - msg: "Login Successful", - payload: userPayload, - userId: foundUser[0].id, - csrf: csrfKey - }; - if (additionalFields && Array.isArray(additionalFields) && additionalFields.length > 0) { - additionalFields.forEach((key) => { - userPayload[key] = foundUser[0][key]; - }); - } - return resposeObject; -} -// package-shared/functions/backend/auth/write-auth-files.ts -import fs13 from "fs"; -import path9 from "path"; -var grabAuthDirs = () => { - const DSQL_AUTH_DIR = process.env.DSQL_AUTH_DIR; - const ROOT_DIR = DSQL_AUTH_DIR?.match(/./) ? DSQL_AUTH_DIR : path9.resolve(process.cwd(), "./.tmp"); - const AUTH_DIR = path9.join(ROOT_DIR, "logins"); - return { root: ROOT_DIR, auth: AUTH_DIR }; -}; -var initAuthFiles = () => { - try { - const authDirs = grabAuthDirs(); - if (!fs13.existsSync(authDirs.root)) - fs13.mkdirSync(authDirs.root, { recursive: true }); - if (!fs13.existsSync(authDirs.auth)) - fs13.mkdirSync(authDirs.auth, { recursive: true }); - return true; - } catch (error) { - console.log(`Error initializing Auth Files: ${error.message}`); - return false; - } -}; -var writeAuthFile = (name, data) => { - initAuthFiles(); - try { - fs13.writeFileSync(path9.join(grabAuthDirs().auth, name), data); - return true; - } catch (error) { - console.log(`Error writing Auth File: ${error.message}`); - return false; - } -}; -var deleteAuthFile = (name) => { - try { - return fs13.rmSync(path9.join(grabAuthDirs().auth, name)); - } catch (error) { - console.log(`Error deleting Auth File: ${error.message}`); - return null; - } -}; -var checkAuthFile = (name) => { - try { - return fs13.existsSync(path9.join(grabAuthDirs().auth, name)); - return true; - } catch (error) { - console.log(`Error checking Auth File: ${error.message}`); - return false; - } -}; - -// users/login-user.ts -async function loginUser({ - key, - payload, - database, - additionalFields, - response, - encryptionKey, - encryptionSalt, - email_login, - email_login_code, - temp_code_field, - token, - user_id, - skipPassword, - useLocal, - apiUserID, - skipWriteAuthFile -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const defaultTempLoginFieldName = "temp_login_code"; - const emailLoginTempCodeFieldName = email_login ? temp_code_field ? temp_code_field : defaultTempLoginFieldName : undefined; - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; - if (!finalEncryptionKey?.match(/.{8,}/)) { - console.log("Encryption key is invalid"); - return { - success: false, - payload: null, - msg: "Encryption key is invalid" - }; - } - if (!finalEncryptionSalt?.match(/.{8,}/)) { - console.log("Encryption salt is invalid"); - return { - success: false, - payload: null, - msg: "Encryption salt is invalid" - }; - } - if (!payload.email) { - return { - success: false, - payload: null, - msg: "Email Required" - }; - } - let httpResponse = { - success: false - }; - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path10.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs14.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - httpResponse = await apiLoginUser({ - database: process.env.DSQL_DB_NAME || "", - email: payload.email, - username: payload.username, - password: payload.password, - skipPassword, - encryptionKey: finalEncryptionKey, - additionalFields, - email_login, - email_login_code, - email_login_field: emailLoginTempCodeFieldName, - token, - useLocal - }); - } else { - httpResponse = await new Promise((resolve, reject) => { - const reqPayload = { - encryptionKey: finalEncryptionKey, - payload, - database, - additionalFields, - email_login, - email_login_code, - email_login_field: emailLoginTempCodeFieldName, - token, - skipPassword - }; - const reqPayloadJSON = JSON.stringify(reqPayload); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayloadJSON).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/user/${user_id || grabedHostNames.user_id}/login-user` - }, (res) => { - var str = ""; - res.on("data", function(chunk) { - str += chunk; - }); - res.on("end", function() { - resolve(JSON.parse(str)); - }); - res.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayloadJSON); - httpsRequest.end(); - }); - } - if (httpResponse?.success) { - let encryptedPayload = encrypt({ - data: JSON.stringify(httpResponse.payload), - encryptionKey: finalEncryptionKey, - encryptionSalt: finalEncryptionSalt - }); - try { - if (token && encryptedPayload) - httpResponse["token"] = encryptedPayload; - } catch (error) { - } - const cookieNames = getAuthCookieNames({ - database, - userId: apiUserID || user_id || grabedHostNames.user_id - }); - if (httpResponse.csrf && !skipWriteAuthFile) { - writeAuthFile(httpResponse.csrf, JSON.stringify(httpResponse.payload)); - } - httpResponse["cookieNames"] = cookieNames; - httpResponse["key"] = String(encryptedPayload); - const authKeyName = cookieNames.keyCookieName; - const csrfName = cookieNames.csrfCookieName; - response?.setHeader("Set-Cookie", [ - `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, - `${csrfName}=${httpResponse.payload?.csrf_k};samesite=strict;path=/;HttpOnly=true` - ]); - } - return httpResponse; -} - -// users/send-email-code.ts -init_grab_host_names(); -import fs15 from "fs"; -import path11 from "path"; - -// package-shared/functions/api/users/api-send-email-code.ts -init_varDatabaseDbHandler(); -var import_nodemailer = __toESM(require_nodemailer(), 1); -init_encrypt(); - -// package-shared/utils/serialize-cookies.ts -function serializeCookies({ - cookies -}) { - let cookiesStringsArray = []; - for (let i = 0;i < cookies.length; i++) { - const cookieObject = cookies[i]; - let cookieString = `${cookieObject.name}=${cookieObject.value}`; - if (cookieObject.maxAge) { - cookieString += `;Max-Age=${cookieObject.maxAge}`; - } - if (cookieObject.path) { - cookieString += `;Path=${cookieObject.path}`; - } - if (cookieObject.domain) { - cookieString += `;Domain=${cookieObject.domain}`; - } - if (cookieObject.secure) { - cookieString += ";Secure"; - } - if (cookieObject.httpOnly) { - cookieString += ";HttpOnly"; - } - if (cookieObject.sameSite) { - cookieString += `;SameSite=${cookieObject.sameSite}`; - } - if (cookieObject.expires) { - cookieString += `;expires=${cookieObject.expires}`; - } - if (cookieObject.priority) { - cookieString += `;priority=${cookieObject.priority}`; - } - cookiesStringsArray.push(cookieString); - } - return cookiesStringsArray; -} - -// package-shared/functions/api/users/api-send-email-code.ts -async function apiSendEmailCode({ - email, - database, - email_login_field, - mail_domain, - mail_port, - sender, - mail_username, - mail_password, - html, - useLocal, - response, - extraCookies -}) { - if (email?.match(/ /)) { - return { - success: false, - msg: "Invalid Email/Password format" - }; - } - const createdAt = Date.now(); - const foundUserQuery = `SELECT * FROM users WHERE email = ?`; - const foundUserValues = [email]; - let foundUser = await varDatabaseDbHandler2({ - queryString: foundUserQuery, - queryValuesArray: foundUserValues, - database, - useLocal - }); - if (!foundUser || !foundUser[0]) { - return { - success: false, - msg: "No user found" - }; - } - function generateCode() { - const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - let code = ""; - for (let i = 0;i < 8; i++) { - code += chars[Math.floor(Math.random() * chars.length)]; - } - return code; - } - if (foundUser?.[0] && email_login_field) { - const tempCode = generateCode(); - let transporter = import_nodemailer.default.createTransport({ - host: mail_domain || process.env.DSQL_MAIL_HOST, - port: mail_port ? mail_port : process.env.DSQL_MAIL_PORT ? Number(process.env.DSQL_MAIL_PORT) : 465, - secure: true, - auth: { - user: mail_username || process.env.DSQL_MAIL_EMAIL, - pass: mail_password || process.env.DSQL_MAIL_PASSWORD - } - }); - let mailObject = {}; - mailObject["from"] = `"Datasquirel SSO" <${sender || "support@datasquirel.com"}>`; - mailObject["sender"] = sender || "support@datasquirel.com"; - mailObject["to"] = email; - mailObject["subject"] = "One Time Login Code"; - mailObject["html"] = html.replace(/{{code}}/, tempCode); - const info = await transporter.sendMail(mailObject); - if (!info?.accepted) - throw new Error("Mail not Sent!"); - const setTempCodeQuery = `UPDATE users SET ${email_login_field} = ? WHERE email = ?`; - const setTempCodeValues = [tempCode + `-${createdAt}`, email]; - let setTempCode = await varDatabaseDbHandler2({ - queryString: setTempCodeQuery, - queryValuesArray: setTempCodeValues, - database, - useLocal - }); - const resObject = { - success: true, - code: tempCode, - email, - createdAt, - msg: "Success" - }; - if (response) { - const cookieKeyNames = getAuthCookieNames(); - const oneTimeCodeCookieName = cookieKeyNames.oneTimeCodeName; - const encryptedPayload = encrypt({ - data: JSON.stringify(resObject) - }); - if (!encryptedPayload) { - throw new Error("apiSendEmailCode Error: Failed to encrypt payload"); - } - const oneTimeCookieObject = { - name: oneTimeCodeCookieName, - value: encryptedPayload, - sameSite: "Strict", - path: "/", - httpOnly: true, - secure: true - }; - const cookiesObjectArray = extraCookies ? [...extraCookies, oneTimeCookieObject] : [oneTimeCookieObject]; - const serializedCookies = serializeCookies({ - cookies: cookiesObjectArray - }); - response.setHeader("Set-Cookie", serializedCookies); - } - return resObject; - } else { - return { - success: false, - msg: "Invalid Email/Password format" - }; - } -} - -// users/send-email-code.ts -var __dirname = "/home/benoti/Projects/Git/moduletrace/datasquirel/datasquirel/users"; -async function sendEmailCode({ - key, - email, - database, - temp_code_field_name, - mail_domain, - mail_password, - mail_username, - mail_port, - sender, - user_id, - useLocal, - response, - extraCookies -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const defaultTempLoginFieldName = "temp_login_code"; - const emailLoginTempCodeFieldName = temp_code_field_name ? temp_code_field_name : defaultTempLoginFieldName; - const emailHtml = fs15.readFileSync(path11.resolve(__dirname, "../package-shared/html/one-time-code.html"), "utf-8"); - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path11.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs15.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - return await apiSendEmailCode({ - database: DSQL_DB_NAME, - email, - email_login_field: emailLoginTempCodeFieldName, - html: emailHtml, - mail_domain, - mail_password, - mail_port, - mail_username, - sender, - useLocal, - response, - extraCookies - }); - } else { - const httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ - email, - database, - email_login_field: emailLoginTempCodeFieldName, - mail_domain, - mail_password, - mail_username, - mail_port, - sender, - html: emailHtml - }); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/user/${user_id || grabedHostNames.user_id}/send-email-code` - }, (res) => { - var str = ""; - res.on("data", function(chunk) { - str += chunk; - }); - res.on("end", function() { - resolve(JSON.parse(str)); - }); - res.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - return httpResponse; - } -} - -// users/logout-user.ts -init_decrypt(); -init_ejson(); -function logoutUser({ - response, - database, - dsqlUserId, - encryptedUserString, - request, - cookieString -}) { - try { - const cookieNames = getAuthCookieNames({ - database, - userId: dsqlUserId || process.env.DSQL_API_USER_ID - }); - const authKeyName = cookieNames.keyCookieName; - const csrfName = cookieNames.csrfCookieName; - const oneTimeCodeName = getAuthCookieNames().oneTimeCodeName; - const decryptedUserJSON = (() => { - try { - if (request) { - const cookiesObject = parseCookies({ - request, - cookieString - }); - return decrypt({ - encryptedString: cookiesObject[authKeyName] - }); - } else if (encryptedUserString) { - return decrypt({ - encryptedString: encryptedUserString - }); - } else { - return; - } - } catch (error) { - console.log("Error getting decrypted User JSON to logout:", error.message); - return; - } - })(); - if (!decryptedUserJSON) - throw new Error("Invalid User"); - const userObject = ejson_default.parse(decryptedUserJSON); - if (!userObject?.csrf_k) - throw new Error("Invalid User. Please check key"); - response?.setHeader("Set-Cookie", [ - `${authKeyName}=null;max-age=0`, - `${csrfName}=null;max-age=0`, - `${oneTimeCodeName}=null;max-age=0` - ]); - const csrf = userObject.csrf_k; - deleteAuthFile(csrf); - return { - success: true, - msg: "User Logged Out", - cookieNames - }; - } catch (error) { - console.log("Logout Error:", error.message); - return { - success: false, - msg: "Logout Failed" - }; - } -} -module_logout_user.exports = logoutUser; - -// users/user-auth.ts -init_decrypt(); -var minuteInMilliseconds = 60000; -var hourInMilliseconds = minuteInMilliseconds * 60; -var dayInMilliseconds = hourInMilliseconds * 24; -var weekInMilliseconds = dayInMilliseconds * 7; -var monthInMilliseconds = dayInMilliseconds * 30; -var yearInMilliseconds = dayInMilliseconds * 365; -function userAuth({ - request, - req, - encryptionKey, - encryptionSalt, - level, - database, - dsqlUserId, - encryptedUserString, - expiry = weekInMilliseconds, - cookieString, - csrfHeaderIsValue, - csrfHeaderName -}) { - try { - const finalRequest = req || request; - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; - const cookies = parseCookies({ - request: finalRequest, - cookieString - }); - const keyNames = getAuthCookieNames({ - userId: dsqlUserId || process.env.DSQL_API_USER_ID, - database: database || process.env.DSQL_DB_NAME - }); - const authKeyName = keyNames.keyCookieName; - const csrfName = keyNames.csrfCookieName; - const key = encryptedUserString ? encryptedUserString : cookies[authKeyName]; - const csrf = cookies[csrfName]; - let userPayloadJSON = decrypt({ - encryptedString: key, - encryptionKey: finalEncryptionKey, - encryptionSalt: finalEncryptionSalt - }); - if (!userPayloadJSON) { - return { - success: false, - payload: null, - msg: "Couldn't Decrypt cookie" - }; - } - let userObject = JSON.parse(userPayloadJSON); - if (!userObject.csrf_k) { - return { - success: false, - payload: null, - msg: "No CSRF_K in decrypted payload" - }; - } - if (!checkAuthFile(userObject.csrf_k)) { - return { - success: false, - payload: null, - msg: "Auth file doesn't exist" - }; - } - if (level?.match(/deep/i) && finalRequest) { - if (csrfHeaderName && finalRequest.headers[csrfHeaderName] !== userObject.csrf_k) { - return { - success: false, - payload: null, - msg: "CSRF_K mismatch" - }; - } - const targetCsrfHeaderKey = Object.keys(finalRequest.headers).map((k) => k.replace(/[^a-zA-Z0-9\-]/g, "")).find((k) => k == userObject.csrf_k); - if (csrfHeaderIsValue && !targetCsrfHeaderKey) { - return { - success: false, - payload: null, - msg: "CSRF_K Header Key mismatch" - }; - } - } - const payloadCreationDate = Number(userObject.date); - if (Number.isNaN(payloadCreationDate) || typeof payloadCreationDate !== "number") { - return { - success: false, - payload: null, - msg: "Payload Creation Date is not a number" - }; - } - const timeElapsed = Date.now() - payloadCreationDate; - const finalExpiry = process.env.DSQL_SESSION_EXPIRY_TIME ? Number(process.env.DSQL_SESSION_EXPIRY_TIME) : expiry; - if (timeElapsed > finalExpiry) { - return { - success: false, - payload: null, - msg: "Session has expired" - }; - } - return { - success: true, - payload: userObject - }; - } catch (error) { - return { - success: false, - payload: null, - msg: error.message - }; - } -} - -// users/reauth-user.ts -init_encrypt(); -import fs16 from "fs"; -import path12 from "path"; -init_grab_host_names(); - -// package-shared/functions/api/users/api-reauth-user.ts -init_varDatabaseDbHandler(); -async function apiReauthUser({ - existingUser, - database, - additionalFields, - useLocal -}) { - let foundUser = existingUser?.id && existingUser.id.toString().match(/./) ? await varDatabaseDbHandler2({ - queryString: `SELECT * FROM users WHERE id=?`, - queryValuesArray: [existingUser.id.toString()], - database, - useLocal - }) : null; - if (!foundUser || !foundUser[0]) - return { - success: false, - payload: null, - msg: "No user found" - }; - let csrfKey = Math.random().toString(36).substring(2) + "-" + Math.random().toString(36).substring(2); - let userPayload = { - id: foundUser[0].id, - first_name: foundUser[0].first_name, - last_name: foundUser[0].last_name, - username: foundUser[0].username, - email: foundUser[0].email, - phone: foundUser[0].phone, - social_id: foundUser[0].social_id, - image: foundUser[0].image, - image_thumbnail: foundUser[0].image_thumbnail, - verification_status: foundUser[0].verification_status, - social_login: foundUser[0].social_login, - social_platform: foundUser[0].social_platform, - csrf_k: csrfKey, - more_data: foundUser[0].more_user_data, - logged_in_status: true, - date: Date.now() - }; - if (additionalFields && Array.isArray(additionalFields) && additionalFields.length > 0) { - additionalFields.forEach((key) => { - userPayload[key] = foundUser[0][key]; - }); - } - return { - success: true, - msg: "Login Successful", - payload: userPayload, - csrf: csrfKey - }; -} - -// users/reauth-user.ts -async function reauthUser({ - key, - database, - response, - request, - level, - encryptionKey, - encryptionSalt, - additionalFields, - encryptedUserString, - user_id, - useLocal -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; - const existingUser = userAuth({ - database, - encryptionKey: finalEncryptionKey, - encryptionSalt: finalEncryptionSalt, - level, - request, - encryptedUserString - }); - if (!existingUser?.payload?.id) { - return { - success: false, - payload: null, - msg: "Cookie Credentials Invalid" - }; - } - let httpResponse; - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path12.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs16.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - httpResponse = await apiReauthUser({ - existingUser: existingUser.payload, - additionalFields, - useLocal - }); - } else { - httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ - existingUser: existingUser.payload, - database, - additionalFields - }); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/user/${user_id || grabedHostNames.user_id}/reauth-user` - }, (response2) => { - var str = ""; - response2.on("data", function(chunk) { - str += chunk; - }); - response2.on("end", function() { - resolve(JSON.parse(str)); - }); - response2.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - } - if (httpResponse?.success) { - let encryptedPayload = encrypt({ - data: JSON.stringify(httpResponse.payload), - encryptionKey: finalEncryptionKey, - encryptionSalt: finalEncryptionSalt - }); - const cookieNames = getAuthCookieNames({ - database, - userId: user_id || grabedHostNames.user_id - }); - httpResponse["cookieNames"] = cookieNames; - httpResponse["key"] = String(encryptedPayload); - const authKeyName = cookieNames.keyCookieName; - const csrfName = cookieNames.csrfCookieName; - response?.setHeader("Set-Cookie", [ - `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, - `${csrfName}=${httpResponse.payload?.csrf_k};samesite=strict;path=/;HttpOnly=true` - ]); - if (httpResponse.csrf) { - deleteAuthFile(String(existingUser.payload.csrf_k)); - writeAuthFile(httpResponse.csrf, JSON.stringify(httpResponse.payload)); - } - } - return httpResponse; -} - -// users/get-user.ts -init_grab_host_names(); -import path13 from "path"; -import fs17 from "fs"; - -// package-shared/functions/api/users/api-get-user.ts -init_varDatabaseDbHandler(); -async function apiGetUser({ - fields, - dbFullName, - userId, - useLocal -}) { - const query = `SELECT ${fields.join(",")} FROM users WHERE id=?`; - const API_USER_ID = userId || process.env.DSQL_API_USER_ID; - let foundUser = await varDatabaseDbHandler2({ - queryString: query, - queryValuesArray: [API_USER_ID], - database: dbFullName.replace(/[^a-z0-9_]/g, ""), - useLocal - }); - if (!foundUser || !foundUser[0]) { - return { - success: false, - payload: null - }; - } - return { - success: true, - payload: foundUser[0] - }; -} - -// users/get-user.ts -async function getUser({ - key, - userId, - database, - fields, - apiUserId, - useLocal -}) { - const defaultFields = [ - "id", - "first_name", - "last_name", - "email", - "username", - "image", - "image_thumbnail", - "verification_status", - "date_created", - "date_created_code", - "date_created_timestamp", - "date_updated", - "date_updated_code", - "date_updated_timestamp" - ]; - const updatedFields = fields && fields[0] ? [...defaultFields, ...fields] : defaultFields; - const reqPayload = JSON.stringify({ - userId, - database, - fields: [...new Set(updatedFields)] - }); - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - let dbSchema; - try { - const localDbSchemaPath = path13.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs17.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - return await apiGetUser({ - userId, - fields: [...new Set(updatedFields)], - dbFullName: DSQL_DB_NAME, - useLocal - }); - } - const httpResponse = await new Promise((resolve, reject) => { - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/user/${apiUserId || grabedHostNames.user_id}/get-user` - }, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - resolve(JSON.parse(str)); - }); - response.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - return httpResponse; -} - -// users/social/google-auth.ts -init_encrypt(); -init_grab_host_names(); - -// package-shared/functions/api/users/social/api-google-login.ts -import https2 from "https"; - -// package-shared/functions/api/social-login/handleSocialDb.ts -import fs19 from "fs"; - -// package-shared/functions/backend/handleNodemailer.ts -var import_nodemailer2 = __toESM(require_nodemailer(), 1); -import fs18 from "fs"; -var transporter = import_nodemailer2.default.createTransport({ - host: process.env.DSQL_MAIL_HOST, - port: 465, - secure: true, - auth: { - user: process.env.DSQL_MAIL_EMAIL, - pass: process.env.DSQL_MAIL_PASSWORD - } -}); -async function handleNodemailer({ - to, - subject, - text, - html, - alias, - senderName -}) { - if (!process.env.DSQL_MAIL_HOST || !process.env.DSQL_MAIL_EMAIL || !process.env.DSQL_MAIL_PASSWORD) { - return null; - } - const sender = (() => { - if (alias?.match(/support/i)) - return process.env.DSQL_MAIL_EMAIL; - return process.env.DSQL_MAIL_EMAIL; - })(); - let sentMessage; - if (!fs18.existsSync("./email/index.html")) { - return; - } - let mailRoot = fs18.readFileSync("./email/index.html", "utf8"); - let finalHtml = mailRoot.replace(/{{email_body}}/, html ? html : "").replace(/{{issue_date}}/, Date().substring(0, 24)); - try { - let mailObject = {}; - mailObject["from"] = `"${senderName || "Datasquirel"}" <${sender}>`; - mailObject["sender"] = sender; - if (alias) - mailObject["replyTo"] = sender; - mailObject["to"] = to; - mailObject["subject"] = subject; - mailObject["text"] = text; - mailObject["html"] = finalHtml; - let info = await transporter.sendMail(mailObject); - sentMessage = info; - } catch (error) { - console.log("ERROR in handleNodemailer Function =>", error.message); - } - return sentMessage; -} - -// package-shared/functions/api/social-login/handleSocialDb.ts -import path14 from "path"; - -// package-shared/functions/backend/addMariadbUser.ts -var import_generate_password = __toESM(require_generate(), 1); -init_DB_HANDLER(); - -// package-shared/utils/backend/global-db/NO_DB_HANDLER.ts -var import_serverless_mysql5 = __toESM(require_serverless_mysql(), 1); -init_grabDbSSL(); -var NO_DB = import_serverless_mysql5.default({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - charset: "utf8mb4", - ssl: grabDbSSL() - } -}); -function NO_DB_HANDLER(...args) { - try { - return new Promise((resolve, reject) => { - NO_DB.query(...args).then((results) => { - NO_DB.end(); - resolve(JSON.parse(JSON.stringify(results))); - }).catch((err) => { - NO_DB.end(); - resolve({ - error: err.message, - sql: err.sql - }); - }); - }); - } catch (error) { - return { - success: false, - error: error.message - }; - } -} - -// package-shared/functions/backend/addMariadbUser.ts -init_encrypt(); -init_LOCAL_DB_HANDLER(); -async function addMariadbUser({ - userId, - useLocal -}) { - try { - const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; - const username = `dsql_user_${userId}`; - const password = import_generate_password.default.generate({ - length: 16, - numbers: true, - symbols: true, - uppercase: true, - exclude: "*#.'`\"" - }); - const encryptedPassword = encrypt({ data: password }); - const createMariadbUsersQuery = `CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`; - if (useLocal) { - await LOCAL_DB_HANDLER(createMariadbUsersQuery); - } else { - await NO_DB_HANDLER(createMariadbUsersQuery); - } - const updateUserQuery = `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1', mariadb_pass = ? WHERE id = ?`; - const updateUserValues = [username, encryptedPassword, userId]; - const updateUser2 = useLocal ? await LOCAL_DB_HANDLER(updateUserQuery, updateUserValues) : await DB_HANDLER(updateUserQuery, updateUserValues); - const addMariadbUser2 = await addDbEntry({ - tableName: "mariadb_users", - data: { - user_id: userId, - username, - host: defaultMariadbUserHost, - password: encryptedPassword, - primary: "1", - grants: '[{"database":"*","table":"*","privileges":["ALL"]}]' - }, - dbContext: "Master", - useLocal - }); - console.log(`User ${userId} SQL credentials successfully added.`); - } catch (error) { - console.log(`Error in adding SQL user in 'addMariadbUser' function =>`, error.message); - } -} - -// package-shared/functions/api/social-login/handleSocialDb.ts -init_varDatabaseDbHandler(); -init_encrypt(); - -// package-shared/functions/backend/addAdminUserOnLogin.ts -init_serverError(); -init_DB_HANDLER(); -init_LOCAL_DB_HANDLER(); -async function addAdminUserOnLogin({ - query, - user, - useLocal -}) { - try { - const finalDbHandler = useLocal ? LOCAL_DB_HANDLER : DB_HANDLER; - const { invite, database_access, priviledge, email } = query; - const lastInviteTimeQuery = `SELECT date_created_code FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`; - const lastInviteTimeValues = [invite, email]; - const lastInviteTimeArray = await finalDbHandler(lastInviteTimeQuery, lastInviteTimeValues); - if (!lastInviteTimeArray || !lastInviteTimeArray[0]) { - throw new Error("No Invitation Found"); - } - const invitingUserDbQuery = `SELECT first_name,last_name,email FROM users WHERE id=?`; - const invitingUserDbValues = [invite]; - const invitingUserDb = await finalDbHandler(invitingUserDbQuery, invitingUserDbValues); - if (invitingUserDb?.[0]) { - const existingUserUser = await finalDbHandler(`SELECT email FROM user_users WHERE user_id=? AND invited_user_id=? AND user_type='admin' AND email=?`, [invite, user.id, email]); - if (existingUserUser?.[0]) { - console.log("User already added"); - } else { - addDbEntry({ - dbFullName: "datasquirel", - tableName: "user_users", - data: { - user_id: invite, - invited_user_id: user.id, - database_access, - first_name: user.first_name, - last_name: user.last_name, - phone: user.phone, - email: user.email, - username: user.username, - user_type: "admin", - user_priviledge: priviledge, - image: user.image, - image_thumbnail: user.image_thumbnail - }, - useLocal - }); - const dbTableData = await finalDbHandler(`SELECT db_tables_data FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`, [invite, email]); - const clearEntries = await finalDbHandler(`DELETE FROM delegated_user_tables WHERE root_user_id=? AND delegated_user_id=?`, [invite, user.id]); - if (dbTableData && dbTableData[0]) { - const dbTableEntries = dbTableData[0].db_tables_data.split("|"); - for (let i = 0;i < dbTableEntries.length; i++) { - const dbTableEntry = dbTableEntries[i]; - const dbTableEntryArray = dbTableEntry.split("-"); - const [db_slug, table_slug] = dbTableEntryArray; - const newEntry = await addDbEntry({ - dbFullName: "datasquirel", - tableName: "delegated_user_tables", - data: { - delegated_user_id: user.id, - root_user_id: invite, - database: db_slug, - table: table_slug, - priviledge - }, - useLocal - }); - } - } - } - const inviteAccepted = await finalDbHandler(`UPDATE invitations SET invitation_status='Accepted' WHERE inviting_user_id=? AND invited_user_email=?`, [invite, email]); - } - } catch (error) { - serverError({ - component: "addAdminUserOnLogin", - message: error.message, - user - }); - } -} - -// package-shared/functions/api/social-login/loginSocialUser.ts -init_varDatabaseDbHandler(); -async function loginSocialUser({ - user, - social_platform, - invitation, - database, - additionalFields, - useLocal -}) { - const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_id=? AND social_platform=?`; - const foundUserValues = [user.email, user.social_id, social_platform]; - const foundUser = await varDatabaseDbHandler2({ - database: database ? database : "datasquirel", - queryString: foundUserQuery, - queryValuesArray: foundUserValues, - useLocal - }); - if (!foundUser?.[0]) - return { - success: false, - payload: null - }; - let csrfKey = Math.random().toString(36).substring(2) + "-" + Math.random().toString(36).substring(2); - let userPayload = { - id: foundUser[0].id, - first_name: foundUser[0].first_name, - last_name: foundUser[0].last_name, - username: foundUser[0].username, - user_type: foundUser[0].user_type, - email: foundUser[0].email, - social_id: foundUser[0].social_id, - image: foundUser[0].image, - image_thumbnail: foundUser[0].image_thumbnail, - verification_status: foundUser[0].verification_status, - social_login: foundUser[0].social_login, - social_platform: foundUser[0].social_platform, - csrf_k: csrfKey, - logged_in_status: true, - date: Date.now() - }; - if (additionalFields?.[0]) { - additionalFields.forEach((key) => { - userPayload[key] = foundUser[0][key]; - }); - } - if (invitation && (!database || database?.match(/^datasquirel$/))) { - addAdminUserOnLogin({ - query: invitation, - user: userPayload, - useLocal - }); - } - let result = { - success: true, - payload: userPayload, - csrf: csrfKey - }; - return result; -} - -// package-shared/functions/api/social-login/handleSocialDb.ts -async function handleSocialDb({ - database, - social_id, - email, - social_platform, - payload, - invitation, - supEmail, - additionalFields, - useLocal -}) { - try { - const existingSocialIdUserQuery = `SELECT * FROM users WHERE social_id = ? AND social_login='1' AND social_platform = ? `; - const existingSocialIdUserValues = [ - social_id.toString(), - social_platform - ]; - let existingSocialIdUser = await varDatabaseDbHandler2({ - database: database ? database : "datasquirel", - queryString: existingSocialIdUserQuery, - queryValuesArray: existingSocialIdUserValues, - useLocal - }); - if (existingSocialIdUser && existingSocialIdUser[0]) { - return await loginSocialUser({ - user: existingSocialIdUser[0], - social_platform, - invitation, - database, - additionalFields, - useLocal - }); - } - const finalEmail = email ? email : supEmail ? supEmail : null; - if (!finalEmail) { - return { - success: false, - payload: null, - msg: "No Email Present" - }; - } - const existingEmailOnlyQuery = `SELECT * FROM users WHERE email='${finalEmail}'`; - let existingEmailOnly = await varDatabaseDbHandler2({ - database: database ? database : "datasquirel", - queryString: existingEmailOnlyQuery, - useLocal - }); - if (existingEmailOnly && existingEmailOnly[0]) { - return { - success: false, - payload: null, - msg: "This Email is already taken" - }; - } - const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`; - const foundUserQueryValues = [finalEmail, social_platform, social_id]; - const foundUser = await varDatabaseDbHandler2({ - database: database ? database : "datasquirel", - queryString: foundUserQuery, - queryValuesArray: foundUserQueryValues, - useLocal - }); - if (foundUser && foundUser[0]) { - return await loginSocialUser({ - user: payload, - social_platform, - invitation, - database, - additionalFields, - useLocal - }); - } - const socialHashedPassword = encrypt({ - data: social_id.toString() - }); - const data = { - social_login: "1", - verification_status: supEmail ? "0" : "1", - password: socialHashedPassword - }; - Object.keys(payload).forEach((key) => { - data[key] = payload[key]; - }); - const newUser = await addDbEntry({ - dbContext: database ? "Dsql User" : undefined, - paradigm: database ? "Full Access" : undefined, - dbFullName: database ? database : "datasquirel", - tableName: "users", - duplicateColumnName: "email", - duplicateColumnValue: finalEmail, - data: { - ...data, - email: finalEmail - }, - useLocal - }); - if (newUser?.insertId) { - if (!database) { - await addMariadbUser({ userId: newUser.insertId, useLocal }); - } - const newUserQueriedQuery = `SELECT * FROM users WHERE id='${newUser.insertId}'`; - const newUserQueried = await varDatabaseDbHandler2({ - database: database ? database : "datasquirel", - queryString: newUserQueriedQuery, - useLocal - }); - if (!newUserQueried || !newUserQueried[0]) - return { - success: false, - payload: null, - msg: "User Insertion Failed!" - }; - if (supEmail && database?.match(/^datasquirel$/)) { - let generatedToken = encrypt({ - data: JSON.stringify({ - id: newUser.insertId, - email: supEmail, - dateCode: Date.now() - }) - }); - handleNodemailer({ - to: supEmail, - subject: "Verify Email Address", - text: "Please click the link to verify your email address", - html: fs19.readFileSync("./email/send-email-verification-link.html", "utf8").replace(/{{host}}/, process.env.DSQL_HOST || "").replace(/{{token}}/, generatedToken || "") - }).then(() => { - }); - } - const STATIC_ROOT = process.env.DSQL_STATIC_SERVER_DIR; - if (!STATIC_ROOT) { - console.log("Static File ENV not Found!"); - return { - success: false, - payload: null, - msg: "Static File ENV not Found!" - }; - } - if (!database || database?.match(/^datasquirel$/)) { - let newUserSchemaFolderPath = `${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${newUser.insertId}`; - let newUserMediaFolderPath = path14.join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}`); - fs19.mkdirSync(newUserSchemaFolderPath); - fs19.mkdirSync(newUserMediaFolderPath); - fs19.writeFileSync(`${newUserSchemaFolderPath}/main.json`, JSON.stringify([]), "utf8"); - } - return await loginSocialUser({ - user: newUserQueried[0], - social_platform, - invitation, - database, - additionalFields, - useLocal - }); - } else { - console.log("Social User Failed to insert in 'handleSocialDb.js' backend function =>", newUser); - return { - success: false, - payload: null, - msg: "Social User Failed to insert in 'handleSocialDb.js' backend function" - }; - } - } catch (error) { - console.log("ERROR in 'handleSocialDb.js' backend function =>", error.message); - return { - success: false, - payload: null, - msg: error.message - }; - } -} - -// package-shared/functions/api/users/social/api-google-login.ts -init_ejson(); -async function apiGoogleLogin({ - token, - database, - additionalFields, - additionalData -}) { - try { - const gUser = await new Promise((resolve, reject) => { - https2.request({ - method: "GET", - hostname: "www.googleapis.com", - path: "/oauth2/v3/userinfo", - headers: { - Authorization: `Bearer ${token}` - } - }, (res) => { - let data = ""; - res.on("data", (chunk) => { - data += chunk; - }); - res.on("end", () => { - resolve(ejson_default.parse(data)); - }); - }).end(); - }); - if (!gUser?.email_verified) - throw new Error("No Google User."); - if (!database || typeof database != "string" || database?.match(/ /)) { - return { - success: false, - payload: undefined, - msg: "Please provide a database slug(database name in lowercase with no spaces)" - }; - } - const { given_name, family_name, email, sub, picture } = gUser; - let payloadObject = { - email, - first_name: given_name, - last_name: family_name, - social_id: sub, - social_platform: "google", - image: picture, - image_thumbnail: picture, - username: `google-user-${sub}` - }; - if (additionalData) { - payloadObject = { ...payloadObject, ...additionalData }; - } - const loggedInGoogleUser = await handleSocialDb({ - database, - email: email || "", - payload: payloadObject, - social_platform: "google", - social_id: sub, - additionalFields - }); - return { ...loggedInGoogleUser }; - } catch (error) { - console.log(`apo-google-login.js ERROR: ${error.message}`); - return { - success: false, - payload: undefined, - msg: error.message - }; - } -} -// users/social/google-auth.ts -async function googleAuth({ - key, - token, - database, - response, - encryptionKey, - encryptionSalt, - additionalFields, - additionalData, - apiUserID, - useLocal -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; - const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; - if (!finalEncryptionKey?.match(/.{8,}/)) { - console.log("Encryption key is invalid"); - return { - success: false, - payload: null, - msg: "Encryption key is invalid" - }; - } - if (!finalEncryptionSalt?.match(/.{8,}/)) { - console.log("Encryption salt is invalid"); - return { - success: false, - payload: null, - msg: "Encryption salt is invalid" - }; - } - if (!token || token?.match(/ /)) { - return { - success: false, - payload: null, - msg: "Please enter Google Access Token" - }; - } - let httpResponse = { - success: false - }; - const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./) && useLocal) { - httpResponse = await apiGoogleLogin({ - token, - additionalFields, - database: DSQL_DB_NAME, - additionalData - }); - } else { - httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ - token, - database, - additionalFields, - additionalData - }); - const httpsRequest = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/user/${apiUserID || grabedHostNames.user_id}/google-login` - }, (response2) => { - var str = ""; - response2.on("data", function(chunk) { - str += chunk; - }); - response2.on("end", function() { - resolve(JSON.parse(str)); - }); - response2.on("error", (err) => { - reject(err); - }); - }); - httpsRequest.write(reqPayload); - httpsRequest.end(); - }); - } - if (httpResponse?.success && httpResponse?.payload) { - let encryptedPayload = encrypt({ - data: JSON.stringify(httpResponse.payload), - encryptionKey: finalEncryptionKey, - encryptionSalt: finalEncryptionSalt - }); - const cookieNames = getAuthCookieNames({ - database, - userId: apiUserID || process.env.DSQL_API_USER_ID - }); - if (httpResponse.csrf) { - writeAuthFile(httpResponse.csrf, JSON.stringify(httpResponse.payload)); - } - httpResponse["cookieNames"] = cookieNames; - httpResponse["key"] = String(encryptedPayload); - const authKeyName = cookieNames.keyCookieName; - const csrfName = cookieNames.csrfCookieName; - response?.setHeader("Set-Cookie", [ - `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, - `${csrfName}=${httpResponse.payload?.csrf_k};samesite=strict;path=/;HttpOnly=true` - ]); - } - return httpResponse; -} - -// users/social/github-auth.ts -init_encrypt(); -init_grab_host_names(); -import fs20 from "fs"; -import path15 from "path"; - -// package-shared/functions/api/social-login/githubLogin.ts -init_DB_HANDLER(); - -// package-shared/functions/backend/httpsRequest.ts -import https3 from "https"; -import http2 from "http"; -import { URL as URL2 } from "url"; -function httpsRequest({ - url, - method, - hostname, - path: path15, - headers, - body, - port, - scheme -}) { - const reqPayloadString = body ? JSON.stringify(body) : null; - const PARSED_URL = url ? new URL2(url) : null; - let requestOptions = { - method: method || "GET", - hostname: PARSED_URL ? PARSED_URL.hostname : hostname, - port: scheme?.match(/https/i) ? 443 : PARSED_URL ? PARSED_URL.protocol?.match(/https/i) ? 443 : PARSED_URL.port : port ? Number(port) : 80, - headers: {} - }; - if (path15) - requestOptions.path = path15; - if (headers) - requestOptions.headers = headers; - if (body) { - requestOptions.headers["Content-Type"] = "application/json"; - requestOptions.headers["Content-Length"] = reqPayloadString ? Buffer.from(reqPayloadString).length : undefined; - } - return new Promise((res, rej) => { - const httpsRequest2 = ((scheme?.match(/https/i)) ? https3 : (PARSED_URL?.protocol?.match(/https/i)) ? https3 : http2).request(requestOptions, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - res(str); - }); - response.on("error", (error) => { - console.log("HTTP response error =>", error.message); - rej(`HTTP response error =>, ${error.message}`); - }); - response.on("close", () => { - console.log("HTTP(S) Response Closed Successfully"); - }); - }); - if (body) - httpsRequest2.write(reqPayloadString); - httpsRequest2.on("error", (error) => { - console.log("HTTPS request ERROR =>", error.message); - rej(`HTTP request error =>, ${error.message}`); - }); - httpsRequest2.end(); - }); -} - -// package-shared/functions/api/social-login/githubLogin.ts -async function githubLogin({ - code, - clientId, - clientSecret -}) { - let gitHubUser; - try { - const response = await httpsRequest({ - method: "POST", - hostname: "github.com", - path: `/login/oauth/access_token?client_id=${clientId}&client_secret=${clientSecret}&code=${code}`, - headers: { - Accept: "application/json", - "User-Agent": "*" - }, - scheme: "https" - }); - const accessTokenObject = JSON.parse(response); - if (!accessTokenObject?.access_token) { - return gitHubUser; - } - const userDataResponse = await httpsRequest({ - method: "GET", - hostname: "api.github.com", - path: "/user", - headers: { - Authorization: `Bearer ${accessTokenObject.access_token}`, - "User-Agent": "*" - }, - scheme: "https" - }); - gitHubUser = JSON.parse(userDataResponse); - if (!gitHubUser?.email && gitHubUser) { - const existingGithubUser = await DB_HANDLER(`SELECT email FROM users WHERE social_login='1' AND social_platform='github' AND social_id='${gitHubUser.id}'`); - if (existingGithubUser && existingGithubUser[0]) { - gitHubUser.email = existingGithubUser[0].email; - } - } - } catch (error) { - console.log("ERROR in githubLogin.js backend function =>", error.message); - } - return gitHubUser; -} - -// package-shared/utils/camelJoinedtoCamelSpace.ts -function camelJoinedtoCamelSpace(text) { - if (!text?.match(/./)) { - return ""; - } - if (text?.match(/ /)) { - return text; - } - if (text) { - let textArray = text.split(""); - let capIndexes = []; - for (let i = 0;i < textArray.length; i++) { - const char = textArray[i]; - if (i === 0) - continue; - if (char.match(/[A-Z]/)) { - capIndexes.push(i); - } - } - let textChunks = [ - `${textArray[0].toUpperCase()}${text.substring(1, capIndexes[0])}` - ]; - for (let j = 0;j < capIndexes.length; j++) { - const capIndex = capIndexes[j]; - if (capIndex === 0) - continue; - const startIndex = capIndex + 1; - const endIndex = capIndexes[j + 1]; - textChunks.push(`${textArray[capIndex].toUpperCase()}${text.substring(startIndex, endIndex)}`); - } - return textChunks.join(" "); - } else { - return null; - } -} - -// package-shared/functions/api/users/social/api-github-login.ts -async function apiGithubLogin({ - code, - clientId, - clientSecret, - database, - additionalFields, - email, - additionalData -}) { - if (!code || !clientId || !clientSecret || !database) { - return { - success: false, - msg: "Missing query params" - }; - } - if (typeof code !== "string" || typeof clientId !== "string" || typeof clientSecret !== "string" || typeof database !== "string") { - return { - success: false, - msg: "Wrong Parameters" - }; - } - const gitHubUser = await githubLogin({ - code, - clientId, - clientSecret - }); - if (!gitHubUser) { - return { - success: false, - msg: "No github user returned" - }; - } - const socialId = gitHubUser.name || gitHubUser.id || gitHubUser.login; - const targetName = gitHubUser.name || gitHubUser.login; - const nameArray = targetName?.match(/ /) ? targetName?.split(" ") : targetName?.match(/\-/) ? targetName?.split("-") : [targetName]; - let payload = { - email: gitHubUser.email, - first_name: camelJoinedtoCamelSpace(nameArray[0]), - last_name: camelJoinedtoCamelSpace(nameArray[1]), - social_id: socialId, - social_platform: "github", - image: gitHubUser.avatar_url, - image_thumbnail: gitHubUser.avatar_url, - username: "github-user-" + socialId - }; - if (additionalData) { - payload = { ...payload, ...additionalData }; - } - const loggedInGithubUser = await handleSocialDb({ - database, - email: gitHubUser.email, - payload, - social_platform: "github", - social_id: socialId, - supEmail: email, - additionalFields - }); - return { ...loggedInGithubUser }; -} - -// users/social/github-auth.ts -async function githubAuth({ - key, - code, - email, - database, - clientId, - clientSecret, - response, - encryptionKey, - encryptionSalt, - additionalFields, - user_id, - additionalData -}) { - const grabedHostNames = grabHostNames(); - const { host, port, scheme } = grabedHostNames; - if (!code || code?.match(/ /)) { - return { - success: false, - user: null, - msg: "Please enter Github Access Token" - }; - } - if (!database || database?.match(/ /)) { - return { - success: false, - user: null, - msg: "Please provide database slug name you want to access" - }; - } - if (!clientId || clientId?.match(/ /)) { - return { - success: false, - user: null, - msg: "Please enter Github OAUTH client ID" - }; - } - let httpResponse; - const { - DSQL_DB_HOST, - DSQL_DB_USERNAME, - DSQL_DB_PASSWORD, - DSQL_DB_NAME, - DSQL_KEY, - DSQL_REF_DB_NAME, - DSQL_FULL_SYNC - } = process.env; - if (DSQL_DB_HOST?.match(/./) && DSQL_DB_USERNAME?.match(/./) && DSQL_DB_PASSWORD?.match(/./) && DSQL_DB_NAME?.match(/./)) { - let dbSchema; - try { - const localDbSchemaPath = path15.resolve(process.cwd(), "dsql.schema.json"); - dbSchema = JSON.parse(fs20.readFileSync(localDbSchemaPath, "utf8")); - } catch (error) { - } - httpResponse = await apiGithubLogin({ - code, - email: email || undefined, - clientId, - clientSecret, - additionalFields, - database: DSQL_DB_NAME, - additionalData - }); - } else { - httpResponse = await new Promise((resolve, reject) => { - const reqPayload = JSON.stringify({ - code, - email, - clientId, - clientSecret, - database, - additionalFields, - additionalData - }); - const httpsRequest2 = scheme.request({ - method: "POST", - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.from(reqPayload).length, - Authorization: key || process.env.DSQL_FULL_ACCESS_API_KEY || process.env.DSQL_API_KEY - }, - port, - hostname: host, - path: `/api/user/${user_id || grabedHostNames.user_id}/github-login` - }, (response2) => { - var str = ""; - response2.on("data", function(chunk) { - str += chunk; - }); - response2.on("end", function() { - try { - resolve(JSON.parse(str)); - } catch (error) { - console.log(error); - resolve({ - success: false, - user: null, - msg: "Something went wrong" - }); - } - }); - response2.on("error", (err) => { - reject(err); - }); - }); - httpsRequest2.write(reqPayload); - httpsRequest2.end(); - }); - } - if (httpResponse?.success && httpResponse?.user) { - let encryptedPayload = encrypt({ - data: JSON.stringify(httpResponse.user), - encryptionKey, - encryptionSalt - }); - const { user, dsqlUserId } = httpResponse; - const authKeyName = `datasquirel_${dsqlUserId}_${database}_auth_key`; - const csrfName = `datasquirel_${dsqlUserId}_${database}_csrf`; - response.setHeader("Set-Cookie", [ - `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, - `${csrfName}=${user.csrf_k};samesite=strict;path=/;HttpOnly=true`, - `dsqluid=${dsqlUserId};samesite=strict;path=/;HttpOnly=true`, - `datasquirel_social_id=${user.social_id};samesite=strict;path=/` - ]); - } - return httpResponse; -} - -// users/get-token.ts -init_decrypt(); -function getToken({ - request, - encryptionKey, - encryptionSalt, - database, - useLocal, - cookieString -}) { - try { - const cookies = parseCookies({ request, cookieString }); - const keynames = getAuthCookieNames(); - const authKeyName = keynames.keyCookieName; - const csrfName = keynames.csrfCookieName; - const key = cookies[authKeyName]; - const csrf = cookies[csrfName]; - let userPayload = decrypt({ - encryptedString: key, - encryptionKey, - encryptionSalt - }); - if (!userPayload) { - return { key: undefined, csrf: undefined }; - } - let userObject = JSON.parse(userPayload); - if (!userObject.csrf_k) { - return { key: undefined, csrf: undefined }; - } - return { key, csrf }; - } catch (error) { - return { - key: undefined, - csrf: undefined - }; - } -} - -// users/validate-token.ts -init_decrypt(); -function validateToken({ - token, - encryptionKey, - encryptionSalt -}) { - try { - const key = token; - let userPayload = decrypt({ - encryptedString: key, - encryptionKey, - encryptionSalt - }); - if (!userPayload) { - return null; - } - let userObject = JSON.parse(userPayload); - if (!userObject.csrf_k) { - return null; - } - return userObject; - } catch (error) { - return null; - } -} - -// client/media/imageInputFileToBase64.ts -async function imageInputFileToBase64({ - imageInputFile, - maxWidth, - imagePreviewNode -}) { - try { - let imageName = imageInputFile.name.replace(/\..*/, ""); - let imageDataBase64; - let imageSize; - let canvas = document.createElement("canvas"); - const MIME_TYPE = imageInputFile.type; - const QUALITY = 0.95; - const MAX_WIDTH = maxWidth ? maxWidth : null; - const file = imageInputFile; - const blobURL = URL.createObjectURL(file); - const img = new Image; - img.src = blobURL; - imageDataBase64 = await new Promise((res, rej) => { - img.onerror = function() { - URL.revokeObjectURL(this.src); - console.log("Cannot load image"); - }; - img.onload = function(e) { - const imgEl = e.target; - URL.revokeObjectURL(imgEl.src); - if (MAX_WIDTH) { - const scaleSize = MAX_WIDTH / img.naturalWidth; - canvas.width = img.naturalWidth < MAX_WIDTH ? img.naturalWidth : MAX_WIDTH; - canvas.height = img.naturalWidth < MAX_WIDTH ? img.naturalHeight : img.naturalHeight * scaleSize; - } else { - canvas.width = img.naturalWidth; - canvas.height = img.naturalHeight; - } - const ctx = canvas.getContext("2d"); - ctx?.drawImage(img, 0, 0, canvas.width, canvas.height); - const srcEncoded = canvas.toDataURL(MIME_TYPE, QUALITY); - if (imagePreviewNode) { - imagePreviewNode.src = srcEncoded; - } - res(srcEncoded); - }; - }); - imageSize = await new Promise((res, rej) => { - canvas.toBlob((blob) => { - res(blob?.size); - }, MIME_TYPE, QUALITY); - }); - return { - imageBase64: imageDataBase64?.replace(/.*?base64,/, ""), - imageBase64Full: imageDataBase64, - imageName, - imageSize - }; - } catch (error) { - console.log("Image Processing Error! =>", error.message); - return { - imageBase64: undefined, - imageBase64Full: undefined, - imageName: undefined, - imageSize: undefined - }; - } -} - -// client/media/imageInputToBase64.ts -async function imageInputToBase64({ - imageInput, - maxWidth, - mimeType -}) { - try { - let imagePreviewNode = document.querySelector(`[data-imagepreview='image']`); - let imageName = imageInput.files?.[0].name.replace(/\..*/, ""); - let imageDataBase64; - const MIME_TYPE = mimeType ? mimeType : "image/jpeg"; - const QUALITY = 0.95; - const MAX_WIDTH = maxWidth ? maxWidth : null; - const file = imageInput.files?.[0]; - const blobURL = file ? URL.createObjectURL(file) : undefined; - const img = new Image; - if (blobURL) { - img.src = blobURL; - imageDataBase64 = await new Promise((res, rej) => { - img.onerror = function() { - URL.revokeObjectURL(this.src); - window.alert("Cannot load image!"); - }; - img.onload = function(e) { - const imgEl = e.target; - URL.revokeObjectURL(imgEl.src); - const canvas = document.createElement("canvas"); - if (MAX_WIDTH) { - const scaleSize = MAX_WIDTH / img.naturalWidth; - canvas.width = img.naturalWidth < MAX_WIDTH ? img.naturalWidth : MAX_WIDTH; - canvas.height = img.naturalWidth < MAX_WIDTH ? img.naturalHeight : img.naturalHeight * scaleSize; - } else { - canvas.width = img.naturalWidth; - canvas.height = img.naturalHeight; - } - const ctx = canvas.getContext("2d"); - ctx?.drawImage(img, 0, 0, canvas.width, canvas.height); - const srcEncoded = canvas.toDataURL(MIME_TYPE, QUALITY); - if (imagePreviewNode) { - document.querySelectorAll(`[data-imagepreview='image']`).forEach((_img) => { - const _imgEl = _img; - _imgEl.src = srcEncoded; - }); - } - res(srcEncoded); - }; - }); - return { - imageBase64: imageDataBase64?.replace(/.*?base64,/, ""), - imageBase64Full: imageDataBase64, - imageName - }; - } else { - return {}; - } - } catch (error) { - console.log("Image Processing Error! =>", error.message); - return {}; - } -} - -// client/media/inputFileToBase64.ts -async function inputFileToBase64({ - inputFile, - allowedRegex -}) { - const allowedTypesRegex = allowedRegex ? allowedRegex : /image\/*|\/pdf/; - if (!inputFile?.type?.match(allowedTypesRegex)) { - window.alert(`We currently don't support ${inputFile.type} file types. Support is coming soon. For now we support only images and PDFs.`); - return { - fileName: inputFile.name - }; - } - try { - let fileName = inputFile.name.replace(/\..*/, ""); - const fileData = await new Promise((resolve, reject) => { - var reader = new FileReader; - reader.readAsDataURL(inputFile); - reader.onload = function() { - resolve(reader.result?.toString()); - }; - reader.onerror = function(error) { - console.log("Error: ", error.message); - }; - }); - return { - fileBase64: fileData?.replace(/.*?base64,/, ""), - fileBase64Full: fileData, - fileName, - fileSize: inputFile.size, - fileType: inputFile.type - }; - } catch (error) { - console.log("File Processing Error! =>", error.message); - return { - fileName: inputFile.name - }; - } -} - -// client/auth/google/getAccessToken.ts -var interval; -async function getAccessToken(params) { - params.setLoading?.(true); - const response = await new Promise((resolve, reject) => { - interval = setInterval(() => { - let google = window.google; - if (google) { - window.clearInterval(interval); - resolve(googleLogin({ ...params, google })); - } - }, 500); - }); - params.setLoading?.(false); - return response; -} -function googleLogin({ - google, - clientId, - setLoading, - triggerPrompt -}) { - setTimeout(() => { - setLoading?.(false); - }, 3000); - return new Promise((resolve, reject) => { - function handleCredentialResponse(response) { - resolve(response.access_token); - } - const googleAuth2 = google.accounts.oauth2.initTokenClient({ - client_id: clientId, - scope: "email profile", - callback: handleCredentialResponse - }); - googleAuth2.requestAccessToken(); - if (triggerPrompt) { - google.accounts.id.prompt(triggerGooglePromptCallback); - } - function triggerGooglePromptCallback(notification) { - console.log(notification); - } - }); -} - -// client/auth/github/getAccessToken.ts -function getAccessToken2({ - clientId, - redirectUrl, - setLoading, - scopes -}) { - if (setLoading) - setLoading(true); - const scopeString = scopes ? scopes.join("%20") : "read:user"; - const fetchUrl = `https://github.com/login/oauth/authorize?client_id=${clientId}&scope=${scopeString}&redirect_uri=${redirectUrl}`; - window.location.assign(fetchUrl); -} - -// client/utils/parseClientCookies.ts -function parseClientCookies_default() { - const cookieString = document.cookie; - if (!cookieString || typeof cookieString !== "string") { - return null; - } - const cookieSplitArray = cookieString.split(";"); - let cookieObject = {}; - cookieSplitArray.forEach((keyValueString) => { - const [key, value] = keyValueString.split("="); - if (key && typeof key == "string") { - cookieObject[key.replace(/^ +| +$/, "")] = value && typeof value == "string" ? value.replace(/^ +| +$/, "") : null; - } - }); - return cookieObject; -} - -// client/auth/logout.ts -async function logout(params) { - try { - const localUser = localStorage.getItem("user"); - let targetUser; - try { - targetUser = JSON.parse(localUser || ""); - } catch (error) { - console.log(error); - } - if (!targetUser) { - return false; - } - const cookies = parseClientCookies_default(); - const socialId = cookies?.datasquirel_social_id && typeof cookies.datasquirel_social_id == "string" && !cookies.datasquirel_social_id.match(/^null$/i) ? cookies.datasquirel_social_id : null; - localStorage.setItem("user", "{}"); - localStorage.removeItem("csrf"); - document.cookie = `datasquirel_social_id=null;samesite=strict;path=/`; - const response = await new Promise((resolve, reject) => { - if (socialId && !socialId?.match(/^null$/i)) { - const googleClientId = params?.googleClientId; - if (googleClientId) { - const googleScript = document.createElement("script"); - googleScript.src = "https://accounts.google.com/gsi/client"; - googleScript.className = "social-script-tag"; - document.body.appendChild(googleScript); - googleScript.onload = function(e) { - const google = window.google; - if (google) { - google.accounts.id.initialize({ - client_id: googleClientId - }); - google.accounts.id.revoke(socialId, (done) => { - console.log(done.error); - resolve(true); - }); - } - }; - } else { - resolve(true); - } - } else { - resolve(true); - } - }); - return response; - } catch (error) { - return false; - } -} - -// client/fetch/index.ts -var import_lodash3 = __toESM(require_lodash(), 1); -async function fetchApi(url, options, csrf, localStorageCSRFKey) { - let data; - const csrfValue = localStorage.getItem(localStorageCSRFKey || "csrf"); - let finalHeaders = { - "Content-Type": "application/json" - }; - if (csrf && csrfValue) { - finalHeaders[`'${csrfValue.replace(/\"/g, "")}'`] = "true"; - } - if (typeof options === "string") { - try { - let fetchData; - switch (options) { - case "post": - fetchData = await fetch(url, { - method: options, - headers: finalHeaders - }); - data = fetchData.json(); - break; - default: - fetchData = await fetch(url); - data = fetchData.json(); - break; - } - } catch (error) { - console.log("FetchAPI error #1:", error.message); - data = null; - } - } else if (typeof options === "object") { - try { - let fetchData; - if (options.body && typeof options.body === "object") { - let oldOptionsBody = import_lodash3.default.cloneDeep(options.body); - options.body = JSON.stringify(oldOptionsBody); - } - if (options.headers) { - options.headers = import_lodash3.default.merge(options.headers, finalHeaders); - const finalOptions = { ...options }; - fetchData = await fetch(url, finalOptions); - } else { - const finalOptions = { - ...options, - headers: finalHeaders - }; - fetchData = await fetch(url, finalOptions); - } - data = fetchData.json(); - } catch (error) { - console.log("FetchAPI error #2:", error.message); - data = null; - } - } else { - try { - let fetchData = await fetch(url); - data = await fetchData.json(); - } catch (error) { - console.log("FetchAPI error #3:", error.message); - data = null; - } - } - return data; -} - -// client/index.ts -init_ejson(); - -// package-shared/utils/numberfy.ts -function numberfy(num, decimals) { - try { - const numberfiedNum = Number(num); - if (typeof numberfiedNum !== "number") - return 0; - if (isNaN(numberfiedNum)) - return 0; - if (decimals) - return Number(numberfiedNum.toFixed(decimals)); - return Math.round(numberfiedNum); - } catch (error) { - console.log(`Numberfy ERROR: ${error.message}`); - return 0; - } -} - -// package-shared/utils/slugify.ts -function slugify(str) { - try { - return String(str).trim().toLowerCase().replace(/ {2,}/g, " ").replace(/ /g, "-").replace(/[^a-z0-9]/g, "-").replace(/-{2,}/g, "-").replace(/^-/, "").replace(/-$/, ""); - } catch (error) { - console.log(`Slugify ERROR: ${error.message}`); - return ""; - } -} - -// client/index.ts -var media = { - imageInputToBase64, - imageInputFileToBase64, - inputFileToBase64 -}; -var auth = { - google: { - getAccessToken - }, - github: { - getAccessToken: getAccessToken2 - }, - logout -}; -var utils = { - serializeQuery, - serializeCookies, - EJSON: ejson_default, - numberfy, - slugify -}; -var fetch2 = { - fetchApi, - clientFetch: fetchApi -}; -var datasquirelClient = { media, auth, fetch: fetch2, utils }; -var client_default = datasquirelClient; - -// package-shared/functions/dsql/sql/sql-generator.ts -function sqlGenerator({ tableName, genObject }) { - if (!genObject) - return; - const finalQuery = genObject.query ? genObject.query : undefined; - const queryKeys = finalQuery ? Object.keys(finalQuery) : undefined; - const sqlSearhValues = []; - function genSqlSrchStr({ - queryObj, - join, - field - }) { - const finalFieldName = (() => { - if (queryObj?.tableName) { - return `${queryObj.tableName}.${field}`; - } - if (join) { - return `${tableName}.${field}`; - } - return field; - })(); - let str = `${finalFieldName}=?`; - if (typeof queryObj.value == "string" || typeof queryObj.value == "number") { - const valueParsed = String(queryObj.value); - if (queryObj.equality == "LIKE") { - str = `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`; - } else if (queryObj.equality == "NOT EQUAL") { - str = `${finalFieldName} != ?`; - sqlSearhValues.push(valueParsed); - } else { - sqlSearhValues.push(valueParsed); - } - } else if (Array.isArray(queryObj.value)) { - const strArray = []; - queryObj.value.forEach((val) => { - const valueParsed = val; - if (queryObj.equality == "LIKE") { - strArray.push(`LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`); - } else if (queryObj.equality == "NOT EQUAL") { - strArray.push(`${finalFieldName} != ?`); - sqlSearhValues.push(valueParsed); - } else { - strArray.push(`${finalFieldName} = ?`); - sqlSearhValues.push(valueParsed); - } - }); - str = "(" + strArray.join(` ${queryObj.operator || "AND"} `) + ")"; - } - return str; - } - const sqlSearhString = queryKeys?.map((field) => { - const queryObj = finalQuery?.[field]; - if (!queryObj) - return; - if (queryObj.__query) { - const subQueryGroup = queryObj.__query; - const subSearchKeys = Object.keys(subQueryGroup); - const subSearchString = subSearchKeys.map((_field) => { - const newSubQueryObj = subQueryGroup?.[_field]; - return genSqlSrchStr({ - queryObj: newSubQueryObj, - field: _field, - join: genObject.join - }); - }); - console.log("queryObj.operator", queryObj.operator); - return "(" + subSearchString.join(` ${queryObj.operator || "AND"} `) + ")"; - } - return genSqlSrchStr({ queryObj, field, join: genObject.join }); - }); - function generateJoinStr(mtch, join) { - return `${typeof mtch.source == "object" ? mtch.source.tableName : tableName}.${typeof mtch.source == "object" ? mtch.source.fieldName : mtch.source}=${(() => { - if (mtch.targetLiteral) { - return `'${mtch.targetLiteral}'`; - } - if (join.alias) { - return `${typeof mtch.target == "object" ? mtch.target.tableName : join.alias}.${typeof mtch.target == "object" ? mtch.target.fieldName : mtch.target}`; - } - return `${typeof mtch.target == "object" ? mtch.target.tableName : join.tableName}.${typeof mtch.target == "object" ? mtch.target.fieldName : mtch.target}`; - })()}`; - } - let queryString = (() => { - let str = "SELECT"; - if (genObject.selectFields?.[0]) { - if (genObject.join) { - str += ` ${genObject.selectFields?.map((fld) => `${tableName}.${fld}`).join(",")}`; - } else { - str += ` ${genObject.selectFields?.join(",")}`; - } - } else { - if (genObject.join) { - str += ` ${tableName}.*`; - } else { - str += " *"; - } - } - if (genObject.join) { - const existingJoinTableNames = [tableName]; - str += "," + genObject.join.map((joinObj) => { - const joinTableName = joinObj.alias ? joinObj.alias : joinObj.tableName; - if (existingJoinTableNames.includes(joinTableName)) - return null; - existingJoinTableNames.push(joinTableName); - if (joinObj.selectFields) { - return joinObj.selectFields.map((selectField) => { - if (typeof selectField == "string") { - return `${joinTableName}.${selectField}`; - } else if (typeof selectField == "object") { - let aliasSelectField = selectField.count ? `COUNT(${joinTableName}.${selectField.field})` : `${joinTableName}.${selectField.field}`; - if (selectField.alias) - aliasSelectField += ` AS ${selectField.alias}`; - return aliasSelectField; - } - }).join(","); - } else { - return `${joinTableName}.*`; - } - }).filter((_4) => Boolean(_4)).join(","); - } - str += ` FROM ${tableName}`; - if (genObject.join) { - str += " " + genObject.join.map((join) => { - return join.joinType + " " + (join.alias ? join.tableName + " " + join.alias : join.tableName) + " ON " + (() => { - if (Array.isArray(join.match)) { - return "(" + join.match.map((mtch) => generateJoinStr(mtch, join)).join(join.operator ? ` ${join.operator} ` : " AND ") + ")"; - } else if (typeof join.match == "object") { - return generateJoinStr(join.match, join); - } - })(); - }).join(" "); - } - return str; - })(); - if (sqlSearhString?.[0] && sqlSearhString.find((str) => str)) { - const stringOperator = genObject?.searchOperator || "AND"; - queryString += ` WHERE ${sqlSearhString.join(` ${stringOperator} `)} `; - } - if (genObject.order) - queryString += ` ORDER BY ${genObject.join ? `${tableName}.${genObject.order.field}` : genObject.order.field} ${genObject.order.strategy}`; - if (genObject.limit) - queryString += ` LIMIT ${genObject.limit}`; - if (genObject.offset) - queryString += ` OFFSET ${genObject.offset}`; - return { - string: queryString, - values: sqlSearhValues - }; -} - -// package-shared/functions/dsql/sql/sql-insert-generator.ts -function sqlInsertGenerator({ - tableName, - data -}) { - try { - if (Array.isArray(data) && data?.[0]) { - let insertKeys = []; - data.forEach((dt) => { - const kys = Object.keys(dt); - kys.forEach((ky) => { - if (!insertKeys.includes(ky)) { - insertKeys.push(ky); - } - }); - }); - let queryBatches = []; - let queryValues = []; - data.forEach((item) => { - queryBatches.push(`(${insertKeys.map((ky) => { - queryValues.push(item[ky]?.toString()?.match(/./) ? item[ky] : null); - return "?"; - }).join(",")})`); - }); - let query = `INSERT INTO ${tableName} (${insertKeys.join(",")}) VALUES ${queryBatches.join(",")}`; - return { - query, - values: queryValues - }; - } else { - return; - } - } catch (error) { - console.log(`SQL insert gen ERROR: ${error.message}`); - return; - } -} - -// package-shared/functions/dsql/sql/sql-delete-generator.ts -function sqlDeleteGenerator({ - tableName, - data -}) { - try { - let queryStr = `DELETE FROM ${tableName}`; - let deleteBatch = []; - let queryArr = []; - Object.keys(data).forEach((ky) => { - deleteBatch.push(`${ky}=?`); - queryArr.push(data[ky]); - }); - queryStr += ` WHERE ${deleteBatch.join(" AND ")}`; - return { - query: queryStr, - values: queryArr - }; - } catch (error) { - console.log(`SQL delete gen ERROR: ${error.message}`); - return; - } -} -// package-shared/functions/backend/httpRequest.ts -import http3 from "node:http"; -import https4 from "node:https"; -import querystring from "querystring"; -function httpRequest(params) { - return new Promise((resolve, reject) => { - const isUrlEncodedFormBody = params.urlEncodedFormBody; - const reqPayloadString = params.body ? isUrlEncodedFormBody ? querystring.stringify(params.body) : JSON.stringify(params.body).replace(/\n|\r|\n\r/gm, "") : undefined; - const reqQueryString = params.query ? serializeQuery(params.query) : undefined; - const paramScheme = params.scheme; - const finalScheme = paramScheme == "http" ? http3 : https4; - const finalPath = params.path ? params.path + (reqQueryString ? reqQueryString : "") : undefined; - delete params.body; - delete params.scheme; - delete params.query; - delete params.urlEncodedFormBody; - const requestOptions = { - ...params, - headers: { - "Content-Type": isUrlEncodedFormBody ? "application/x-www-form-urlencoded" : "application/json", - "Content-Length": reqPayloadString ? Buffer.from(reqPayloadString).length : undefined, - ...params.headers - }, - port: paramScheme == "https" ? 443 : params.port, - path: finalPath - }; - const httpsRequest2 = finalScheme.request(requestOptions, (response) => { - var str = ""; - response.on("data", function(chunk) { - str += chunk; - }); - response.on("end", function() { - const data = (() => { - try { - const jsonObj = JSON.parse(str); - return jsonObj; - } catch (error) { - return; - } - })(); - resolve({ - status: response.statusCode || 404, - data, - str, - requestedPath: finalPath - }); - }); - response.on("error", (err) => { - resolve({ - status: response.statusCode || 404, - str, - error: err.message, - requestedPath: finalPath - }); - }); - }); - if (reqPayloadString) { - httpsRequest2.write(reqPayloadString); - } - httpsRequest2.on("error", (error) => { - console.log("HTTPS request ERROR =>", error); - }); - httpsRequest2.end(); - }); -} - -// index.ts -var user = { - createUser: addUser, - deleteUser: (init_delete_user(), __toCommonJS(exports_delete_user)), - loginUser, - sendEmailCode, - logoutUser, - userAuth, - reAuthUser: reauthUser, - updateUser, - getUser, - getToken, - validateToken, - validateTempEmailCode: (init_validate_temp_email_code(), __toCommonJS(exports_validate_temp_email_code)), - social: { - loginWithGoogle: googleAuth, - loginWithGithub: githubAuth - } -}; -var media2 = { - uploadImage, - uploadFile: uploadImage2, - deleteFile -}; -var sql = { - sqlGenerator, - sqlInsertGenerator, - sqlDeleteGenerator, - trim: trimSql -}; -var datasquirel = { - get, - post, - media: media2, - user, - getSchema, - client: client_default, - sql, - utils: { - crypto: { - encrypt: (init_encrypt(), __toCommonJS(exports_encrypt)), - decrypt: (init_decrypt(), __toCommonJS(exports_decrypt)), - hash: (init_hashPassword(), __toCommonJS(exports_hashPassword)) - }, - parseCookies, - httpRequest - } -}; -var datasquirel_default = datasquirel; -export { - datasquirel_default as default + parseCookies: parseCookies_1.default, + httpRequest: httpRequest_1.default, + }, }; +exports.default = datasquirel; diff --git a/dist/package-shared/functions/api/query/get.d.ts b/dist/package-shared/functions/api/query/get.d.ts new file mode 100644 index 0000000..58e2187 --- /dev/null +++ b/dist/package-shared/functions/api/query/get.d.ts @@ -0,0 +1,13 @@ +type Param = { + query: string; + queryValues?: (string | number)[]; + dbFullName: string; + tableName?: string; + dbSchema?: import("../../../types").DSQL_DatabaseSchemaType; + useLocal?: boolean; +}; +/** + * # Get Function FOr API + */ +export default function apiGet({ query, dbFullName, queryValues, tableName, dbSchema, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/query/get.js b/dist/package-shared/functions/api/query/get.js new file mode 100644 index 0000000..816cb2d --- /dev/null +++ b/dist/package-shared/functions/api/query/get.js @@ -0,0 +1,82 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiGet; +const lodash_1 = __importDefault(require("lodash")); +const serverError_1 = __importDefault(require("../../backend/serverError")); +const runQuery_1 = __importDefault(require("../../backend/db/runQuery")); +/** + * # Get Function FOr API + */ +function apiGet(_a) { + return __awaiter(this, arguments, void 0, function* ({ query, dbFullName, queryValues, tableName, dbSchema, useLocal, }) { + if (typeof query == "string" && + query.match(/^alter|^delete|information_schema|databases|^create/i)) { + return { success: false, msg: "Wrong Input." }; + } + /** + * Create new user folder and file + * + * @description Create new user folder and file + */ + let results; + try { + let { result, error } = yield (0, runQuery_1.default)({ + dbFullName: dbFullName, + query: query, + queryValuesArray: queryValues, + readOnly: true, + dbSchema, + tableName, + local: useLocal, + }); + /** @type {import("../../../types").DSQL_TableSchemaType | undefined} */ + let tableSchema; + if (dbSchema) { + const targetTable = dbSchema.tables.find((table) => table.tableName === tableName); + if (targetTable) { + const clonedTargetTable = lodash_1.default.cloneDeep(targetTable); + delete clonedTargetTable.childTable; + delete clonedTargetTable.childTableDbFullName; + delete clonedTargetTable.childTableName; + delete clonedTargetTable.childrenTables; + delete clonedTargetTable.updateData; + delete clonedTargetTable.tableNameOld; + delete clonedTargetTable.indexes; + tableSchema = clonedTargetTable; + } + } + if (error) + throw error; + if (result.error) + throw new Error(result.error); + results = result; + /** @type {import("../../../types").GetReturn} */ + const resObject = { + success: true, + payload: results, + schema: tableName && tableSchema ? tableSchema : undefined, + }; + return resObject; + } + catch ( /** @type {any} */error) { + (0, serverError_1.default)({ + component: "/api/query/get/lines-85-94", + message: error.message, + }); + return { success: false, payload: null, error: error.message }; + } + }); +} diff --git a/dist/package-shared/functions/api/query/post.d.ts b/dist/package-shared/functions/api/query/post.d.ts new file mode 100644 index 0000000..9c57af9 --- /dev/null +++ b/dist/package-shared/functions/api/query/post.d.ts @@ -0,0 +1,14 @@ +import { DSQL_DatabaseSchemaType, PostReturn } from "../../../types"; +type Param = { + query: any; + queryValues?: (string | number)[]; + dbFullName: string; + tableName?: string; + dbSchema?: DSQL_DatabaseSchemaType; + useLocal?: boolean; +}; +/** + * # Post Function For API + */ +export default function apiPost({ query, dbFullName, queryValues, tableName, dbSchema, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/query/post.js b/dist/package-shared/functions/api/query/post.js new file mode 100644 index 0000000..ef18e11 --- /dev/null +++ b/dist/package-shared/functions/api/query/post.js @@ -0,0 +1,86 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiPost; +const lodash_1 = __importDefault(require("lodash")); +const serverError_1 = __importDefault(require("../../backend/serverError")); +const runQuery_1 = __importDefault(require("../../backend/db/runQuery")); +/** + * # Post Function For API + */ +function apiPost(_a) { + return __awaiter(this, arguments, void 0, function* ({ query, dbFullName, queryValues, tableName, dbSchema, useLocal, }) { + var _b; + if (typeof query === "string" && (query === null || query === void 0 ? void 0 : query.match(/^create |^alter |^drop /i))) { + return { success: false, msg: "Wrong Input" }; + } + if (typeof query === "object" && + ((_b = query === null || query === void 0 ? void 0 : query.action) === null || _b === void 0 ? void 0 : _b.match(/^create |^alter |^drop /i))) { + return { success: false, msg: "Wrong Input" }; + } + /** @type {any} */ + let results; + /** + * Create new user folder and file + * + * @description Create new user folder and file + */ + try { + let { result, error } = yield (0, runQuery_1.default)({ + dbFullName: dbFullName, + query: query, + dbSchema: dbSchema, + queryValuesArray: queryValues, + tableName, + local: useLocal, + }); + results = result; + if (error) + throw error; + /** @type {import("../../../types").DSQL_TableSchemaType | undefined} */ + let tableSchema; + if (dbSchema) { + const targetTable = dbSchema.tables.find((table) => table.tableName === tableName); + if (targetTable) { + const clonedTargetTable = lodash_1.default.cloneDeep(targetTable); + delete clonedTargetTable.childTable; + delete clonedTargetTable.childTableDbFullName; + delete clonedTargetTable.childTableName; + delete clonedTargetTable.childrenTables; + delete clonedTargetTable.updateData; + delete clonedTargetTable.tableNameOld; + delete clonedTargetTable.indexes; + tableSchema = clonedTargetTable; + } + } + return { + success: true, + payload: results, + error: error, + schema: tableName && tableSchema ? tableSchema : undefined, + }; + } + catch (error) { + (0, serverError_1.default)({ + component: "/api/query/post/lines-132-142", + message: error.message, + }); + return { + success: false, + payload: results, + error: error.message, + }; + } + }); +} diff --git a/dist/package-shared/functions/api/social-login/facebookLogin.d.ts b/dist/package-shared/functions/api/social-login/facebookLogin.d.ts new file mode 100644 index 0000000..ffab001 --- /dev/null +++ b/dist/package-shared/functions/api/social-login/facebookLogin.d.ts @@ -0,0 +1,8 @@ +import { UserType } from "../../../types"; +/** + * # Facebook Login + */ +export default function facebookLogin({ usertype, body, }: { + body: any; + usertype: UserType; +}): Promise; diff --git a/dist/package-shared/functions/api/social-login/facebookLogin.js b/dist/package-shared/functions/api/social-login/facebookLogin.js new file mode 100644 index 0000000..32b5e94 --- /dev/null +++ b/dist/package-shared/functions/api/social-login/facebookLogin.js @@ -0,0 +1,78 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = facebookLogin; +const DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DB_HANDLER")); +const serverError_1 = __importDefault(require("../../backend/serverError")); +const hashPassword_1 = __importDefault(require("../../dsql/hashPassword")); +/** + * # Facebook Login + */ +function facebookLogin(_a) { + return __awaiter(this, arguments, void 0, function* ({ usertype, body, }) { + try { + const foundUser = yield (0, DB_HANDLER_1.default)(`SELECT * FROM users WHERE email='${body.facebookUserEmail}' AND social_login='1'`); + if (foundUser && foundUser[0]) { + return foundUser[0]; + } + let socialHashedPassword = (0, hashPassword_1.default)({ + password: body.facebookUserId, + }); + let newUser = yield (0, DB_HANDLER_1.default)(`INSERT INTO ${usertype} ( + first_name, + last_name, + social_platform, + social_name, + email, + image, + image_thumbnail, + password, + verification_status, + social_login, + social_id, + terms_agreement, + date_created, + date_code + ) VALUES ( + '${body.facebookUserFirstName}', + '${body.facebookUserLastName}', + 'facebook', + 'facebook_${body.facebookUserEmail + ? body.facebookUserEmail.replace(/@.*/, "") + : body.facebookUserFirstName.toLowerCase()}', + '${body.facebookUserEmail}', + '${body.facebookUserImage}', + '${body.facebookUserImage}', + '${socialHashedPassword}', + '1', + '1', + '${body.facebookUserId}', + '1', + '${Date()}', + '${Date.now()}' + )`); + const newFoundUser = yield (0, DB_HANDLER_1.default)(`SELECT * FROM ${usertype} WHERE id='${newUser.insertId}'`); + } + catch ( /** @type {any} */error) { + (0, serverError_1.default)({ + component: "functions/backend/facebookLogin", + message: error.message, + }); + } + return { + isFacebookAuthValid: false, + newFoundUser: null, + }; + }); +} diff --git a/dist/package-shared/functions/api/social-login/githubLogin.d.ts b/dist/package-shared/functions/api/social-login/githubLogin.d.ts new file mode 100644 index 0000000..4f064bd --- /dev/null +++ b/dist/package-shared/functions/api/social-login/githubLogin.d.ts @@ -0,0 +1,43 @@ +export interface GithubUserPayload { + login: string; + id: number; + node_id: string; + avatar_url: string; + gravatar_id: string; + url: string; + html_url: string; + followers_url: string; + following_url: string; + gists_url: string; + starred_url: string; + subscriptions_url: string; + organizations_url: string; + repos_url: string; + received_events_url: string; + type: string; + site_admin: boolean; + name: string; + company: string; + blog: string; + location: string; + email: string; + hireable: string; + bio: string; + twitter_username: string; + public_repos: number; + public_gists: number; + followers: number; + following: number; + created_at: string; + updated_at: string; +} +type Param = { + code: string; + clientId: string; + clientSecret: string; +}; +/** + * # Login/signup a github user + */ +export default function githubLogin({ code, clientId, clientSecret, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/social-login/githubLogin.js b/dist/package-shared/functions/api/social-login/githubLogin.js new file mode 100644 index 0000000..e027a51 --- /dev/null +++ b/dist/package-shared/functions/api/social-login/githubLogin.js @@ -0,0 +1,62 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = githubLogin; +const DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DB_HANDLER")); +const httpsRequest_1 = __importDefault(require("../../backend/httpsRequest")); +/** + * # Login/signup a github user + */ +function githubLogin(_a) { + return __awaiter(this, arguments, void 0, function* ({ code, clientId, clientSecret, }) { + let gitHubUser; + try { + const response = yield (0, httpsRequest_1.default)({ + method: "POST", + hostname: "github.com", + path: `/login/oauth/access_token?client_id=${clientId}&client_secret=${clientSecret}&code=${code}`, + headers: { + Accept: "application/json", + "User-Agent": "*", + }, + scheme: "https", + }); + const accessTokenObject = JSON.parse(response); + if (!(accessTokenObject === null || accessTokenObject === void 0 ? void 0 : accessTokenObject.access_token)) { + return gitHubUser; + } + const userDataResponse = yield (0, httpsRequest_1.default)({ + method: "GET", + hostname: "api.github.com", + path: "/user", + headers: { + Authorization: `Bearer ${accessTokenObject.access_token}`, + "User-Agent": "*", + }, + scheme: "https", + }); + gitHubUser = JSON.parse(userDataResponse); + if (!(gitHubUser === null || gitHubUser === void 0 ? void 0 : gitHubUser.email) && gitHubUser) { + const existingGithubUser = yield (0, DB_HANDLER_1.default)(`SELECT email FROM users WHERE social_login='1' AND social_platform='github' AND social_id='${gitHubUser.id}'`); + if (existingGithubUser && existingGithubUser[0]) { + gitHubUser.email = existingGithubUser[0].email; + } + } + } + catch ( /** @type {any} */error) { + console.log("ERROR in githubLogin.js backend function =>", error.message); + } + return gitHubUser; + }); +} diff --git a/dist/package-shared/functions/api/social-login/googleLogin.d.ts b/dist/package-shared/functions/api/social-login/googleLogin.d.ts new file mode 100644 index 0000000..0ed8594 --- /dev/null +++ b/dist/package-shared/functions/api/social-login/googleLogin.d.ts @@ -0,0 +1,22 @@ +type Param = { + usertype: string; + foundUser: any; + isSocialValidated: boolean; + isUserValid: boolean; + reqBody: any; + serverRes: any; + loginFailureReason: any; +}; +/** + * # Google Login + */ +export default function googleLogin({ usertype, foundUser, isSocialValidated, isUserValid, reqBody, serverRes, loginFailureReason, }: Param): Promise<{ + isGoogleAuthValid: boolean; + newFoundUser: null; + loginFailureReason: any; +} | { + isGoogleAuthValid: boolean; + newFoundUser: any; + loginFailureReason?: undefined; +} | undefined>; +export {}; diff --git a/dist/package-shared/functions/api/social-login/googleLogin.js b/dist/package-shared/functions/api/social-login/googleLogin.js new file mode 100644 index 0000000..594bd9a --- /dev/null +++ b/dist/package-shared/functions/api/social-login/googleLogin.js @@ -0,0 +1,123 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = googleLogin; +const google_auth_library_1 = require("google-auth-library"); +const serverError_1 = __importDefault(require("../../backend/serverError")); +const DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DB_HANDLER")); +const hashPassword_1 = __importDefault(require("../../dsql/hashPassword")); +/** + * # Google Login + */ +function googleLogin(_a) { + return __awaiter(this, arguments, void 0, function* ({ usertype, foundUser, isSocialValidated, isUserValid, reqBody, serverRes, loginFailureReason, }) { + var _b; + const client = new google_auth_library_1.OAuth2Client(process.env.NEXT_PUBLIC_DSQL_GOOGLE_CLIENT_ID); + let isGoogleAuthValid = false; + let newFoundUser = null; + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + try { + const ticket = yield client.verifyIdToken({ + idToken: reqBody.token, + audience: process.env.NEXT_PUBLIC_DSQL_GOOGLE_CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend + // Or, if multiple clients access the backend: + //[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3] + }); + const payload = ticket.getPayload(); + const userid = payload === null || payload === void 0 ? void 0 : payload["sub"]; + if (!payload) + throw new Error("Google login failed. Credentials invalid"); + isUserValid = Boolean(payload.email_verified); + if (!isUserValid || !payload || !payload.email_verified) + return; + serverRes.isUserValid = payload.email_verified; + isSocialValidated = payload.email_verified; + isGoogleAuthValid = payload.email_verified; + ////// If request specified a G Suite domain: + ////// const domain = payload['hd']; + let socialHashedPassword = (0, hashPassword_1.default)({ + password: payload.at_hash || "", + }); + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + let existinEmail = yield (0, DB_HANDLER_1.default)(`SELECT * FROM ${usertype} WHERE email='${payload.email}' AND social_login!='1' AND social_platform!='google'`); + if (existinEmail && existinEmail[0]) { + loginFailureReason = "Email Exists Already"; + isGoogleAuthValid = false; + return { + isGoogleAuthValid: isGoogleAuthValid, + newFoundUser: newFoundUser, + loginFailureReason: loginFailureReason, + }; + } + //////////////////////////////////////// + foundUser = yield (0, DB_HANDLER_1.default)(`SELECT * FROM ${usertype} WHERE email='${payload.email}' AND social_login='1' AND social_platform='google'`); + if (foundUser && foundUser[0]) { + newFoundUser = foundUser; + return { + isGoogleAuthValid: isGoogleAuthValid, + newFoundUser: newFoundUser, + }; + } + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + let newUser = yield (0, DB_HANDLER_1.default)(`INSERT INTO ${usertype} ( + first_name, + last_name, + social_platform, + social_name, + social_id, + email, + image, + image_thumbnail, + password, + verification_status, + social_login, + terms_agreement, + date_created, + date_code + ) VALUES ( + '${payload.given_name}', + '${payload.family_name}', + 'google', + 'google_${(_b = payload.email) === null || _b === void 0 ? void 0 : _b.replace(/@.*/, "")}', + '${payload.sub}', + '${payload.email}', + '${payload.picture}', + '${payload.picture}', + '${socialHashedPassword}', + '1', + '1', + '1', + '${Date()}', + '${Date.now()}' + )`); + newFoundUser = yield (0, DB_HANDLER_1.default)(`SELECT * FROM ${usertype} WHERE id='${newUser.insertId}'`); + } + catch (error) { + (0, serverError_1.default)({ + component: "googleLogin", + message: error.message, + }); + loginFailureReason = error; + isUserValid = false; + isSocialValidated = false; + } + return { isGoogleAuthValid: isGoogleAuthValid, newFoundUser: newFoundUser }; + }); +} diff --git a/dist/package-shared/functions/api/social-login/handleSocialDb.d.ts b/dist/package-shared/functions/api/social-login/handleSocialDb.d.ts new file mode 100644 index 0000000..91061df --- /dev/null +++ b/dist/package-shared/functions/api/social-login/handleSocialDb.d.ts @@ -0,0 +1,5 @@ +import { APILoginFunctionReturn, HandleSocialDbFunctionParams } from "../../../types"; +/** + * # Handle Social DB + */ +export default function handleSocialDb({ database, social_id, email, social_platform, payload, invitation, supEmail, additionalFields, useLocal, }: HandleSocialDbFunctionParams): Promise; diff --git a/dist/package-shared/functions/api/social-login/handleSocialDb.js b/dist/package-shared/functions/api/social-login/handleSocialDb.js new file mode 100644 index 0000000..d04a1cc --- /dev/null +++ b/dist/package-shared/functions/api/social-login/handleSocialDb.js @@ -0,0 +1,202 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = handleSocialDb; +const fs_1 = __importDefault(require("fs")); +const handleNodemailer_1 = __importDefault(require("../../backend/handleNodemailer")); +const path_1 = __importDefault(require("path")); +const addMariadbUser_1 = __importDefault(require("../../backend/addMariadbUser")); +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +const encrypt_1 = __importDefault(require("../../dsql/encrypt")); +const addDbEntry_1 = __importDefault(require("../../backend/db/addDbEntry")); +const loginSocialUser_1 = __importDefault(require("./loginSocialUser")); +/** + * # Handle Social DB + */ +function handleSocialDb(_a) { + return __awaiter(this, arguments, void 0, function* ({ database, social_id, email, social_platform, payload, invitation, supEmail, additionalFields, useLocal, }) { + try { + const existingSocialIdUserQuery = `SELECT * FROM users WHERE social_id = ? AND social_login='1' AND social_platform = ? `; + const existingSocialIdUserValues = [ + social_id.toString(), + social_platform, + ]; + let existingSocialIdUser = yield (0, varDatabaseDbHandler_1.default)({ + database: database ? database : "datasquirel", + queryString: existingSocialIdUserQuery, + queryValuesArray: existingSocialIdUserValues, + useLocal, + }); + if (existingSocialIdUser && existingSocialIdUser[0]) { + return yield (0, loginSocialUser_1.default)({ + user: existingSocialIdUser[0], + social_platform, + invitation, + database, + additionalFields, + useLocal, + }); + } + const finalEmail = email ? email : supEmail ? supEmail : null; + if (!finalEmail) { + return { + success: false, + payload: null, + msg: "No Email Present", + }; + } + const existingEmailOnlyQuery = `SELECT * FROM users WHERE email='${finalEmail}'`; + let existingEmailOnly = yield (0, varDatabaseDbHandler_1.default)({ + database: database ? database : "datasquirel", + queryString: existingEmailOnlyQuery, + useLocal, + }); + if (existingEmailOnly && existingEmailOnly[0]) { + return { + success: false, + payload: null, + msg: "This Email is already taken", + }; + } + const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_login='1' AND social_platform=? AND social_id=?`; + const foundUserQueryValues = [finalEmail, social_platform, social_id]; + const foundUser = yield (0, varDatabaseDbHandler_1.default)({ + database: database ? database : "datasquirel", + queryString: foundUserQuery, + queryValuesArray: foundUserQueryValues, + useLocal, + }); + if (foundUser && foundUser[0]) { + return yield (0, loginSocialUser_1.default)({ + user: payload, + social_platform, + invitation, + database, + additionalFields, + useLocal, + }); + } + const socialHashedPassword = (0, encrypt_1.default)({ + data: social_id.toString(), + }); + const data = { + social_login: "1", + verification_status: supEmail ? "0" : "1", + password: socialHashedPassword, + }; + Object.keys(payload).forEach((key) => { + data[key] = payload[key]; + }); + /** @type {any} */ + const newUser = yield (0, addDbEntry_1.default)({ + dbContext: database ? "Dsql User" : undefined, + paradigm: database ? "Full Access" : undefined, + dbFullName: database ? database : "datasquirel", + tableName: "users", + duplicateColumnName: "email", + duplicateColumnValue: finalEmail, + data: Object.assign(Object.assign({}, data), { email: finalEmail }), + useLocal, + }); + if (newUser === null || newUser === void 0 ? void 0 : newUser.insertId) { + if (!database) { + /** + * Add a Mariadb User for this User + */ + yield (0, addMariadbUser_1.default)({ userId: newUser.insertId, useLocal }); + } + const newUserQueriedQuery = `SELECT * FROM users WHERE id='${newUser.insertId}'`; + const newUserQueried = yield (0, varDatabaseDbHandler_1.default)({ + database: database ? database : "datasquirel", + queryString: newUserQueriedQuery, + useLocal, + }); + if (!newUserQueried || !newUserQueried[0]) + return { + success: false, + payload: null, + msg: "User Insertion Failed!", + }; + if (supEmail && (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/))) { + /** + * Send email Verification + * + * @description Send verification email to newly created agent + */ + let generatedToken = (0, encrypt_1.default)({ + data: JSON.stringify({ + id: newUser.insertId, + email: supEmail, + dateCode: Date.now(), + }), + }); + (0, handleNodemailer_1.default)({ + to: supEmail, + subject: "Verify Email Address", + text: "Please click the link to verify your email address", + html: fs_1.default + .readFileSync("./email/send-email-verification-link.html", "utf8") + .replace(/{{host}}/, process.env.DSQL_HOST || "") + .replace(/{{token}}/, generatedToken || ""), + }).then(() => { }); + } + const STATIC_ROOT = process.env.DSQL_STATIC_SERVER_DIR; + if (!STATIC_ROOT) { + console.log("Static File ENV not Found!"); + return { + success: false, + payload: null, + msg: "Static File ENV not Found!", + }; + } + /** + * Create new user folder and file + * + * @description Create new user folder and file + */ + if (!database || (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/))) { + let newUserSchemaFolderPath = `${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${newUser.insertId}`; + let newUserMediaFolderPath = path_1.default.join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}`); + fs_1.default.mkdirSync(newUserSchemaFolderPath); + fs_1.default.mkdirSync(newUserMediaFolderPath); + fs_1.default.writeFileSync(`${newUserSchemaFolderPath}/main.json`, JSON.stringify([]), "utf8"); + } + return yield (0, loginSocialUser_1.default)({ + user: newUserQueried[0], + social_platform, + invitation, + database, + additionalFields, + useLocal, + }); + } + else { + console.log("Social User Failed to insert in 'handleSocialDb.js' backend function =>", newUser); + return { + success: false, + payload: null, + msg: "Social User Failed to insert in 'handleSocialDb.js' backend function", + }; + } + } + catch (error) { + console.log("ERROR in 'handleSocialDb.js' backend function =>", error.message); + return { + success: false, + payload: null, + msg: error.message, + }; + } + }); +} diff --git a/dist/package-shared/functions/api/social-login/loginSocialUser.d.ts b/dist/package-shared/functions/api/social-login/loginSocialUser.d.ts new file mode 100644 index 0000000..a024f35 --- /dev/null +++ b/dist/package-shared/functions/api/social-login/loginSocialUser.d.ts @@ -0,0 +1,22 @@ +import { APILoginFunctionReturn } from "../../../types"; +type Param = { + user: { + first_name: string; + last_name: string; + email: string; + social_id: string | number; + }; + social_platform: string; + invitation?: any; + database?: string; + additionalFields?: string[]; + useLocal?: boolean; +}; +/** + * Function to login social user + * ============================================================================== + * @description This function logs in the user after 'handleSocialDb' function finishes + * the user creation or confirmation process + */ +export default function loginSocialUser({ user, social_platform, invitation, database, additionalFields, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/social-login/loginSocialUser.js b/dist/package-shared/functions/api/social-login/loginSocialUser.js new file mode 100644 index 0000000..89bdf8d --- /dev/null +++ b/dist/package-shared/functions/api/social-login/loginSocialUser.js @@ -0,0 +1,80 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = loginSocialUser; +const addAdminUserOnLogin_1 = __importDefault(require("../../backend/addAdminUserOnLogin")); +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +/** + * Function to login social user + * ============================================================================== + * @description This function logs in the user after 'handleSocialDb' function finishes + * the user creation or confirmation process + */ +function loginSocialUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ user, social_platform, invitation, database, additionalFields, useLocal, }) { + const foundUserQuery = `SELECT * FROM users WHERE email=? AND social_id=? AND social_platform=?`; + const foundUserValues = [user.email, user.social_id, social_platform]; + const foundUser = yield (0, varDatabaseDbHandler_1.default)({ + database: database ? database : "datasquirel", + queryString: foundUserQuery, + queryValuesArray: foundUserValues, + useLocal, + }); + if (!(foundUser === null || foundUser === void 0 ? void 0 : foundUser[0])) + return { + success: false, + payload: null, + }; + let csrfKey = Math.random().toString(36).substring(2) + + "-" + + Math.random().toString(36).substring(2); + /** @type {import("../../../types").DATASQUIREL_LoggedInUser} */ + let userPayload = { + id: foundUser[0].id, + first_name: foundUser[0].first_name, + last_name: foundUser[0].last_name, + username: foundUser[0].username, + user_type: foundUser[0].user_type, + email: foundUser[0].email, + social_id: foundUser[0].social_id, + image: foundUser[0].image, + image_thumbnail: foundUser[0].image_thumbnail, + verification_status: foundUser[0].verification_status, + social_login: foundUser[0].social_login, + social_platform: foundUser[0].social_platform, + csrf_k: csrfKey, + logged_in_status: true, + date: Date.now(), + }; + if (additionalFields === null || additionalFields === void 0 ? void 0 : additionalFields[0]) { + additionalFields.forEach((key) => { + userPayload[key] = foundUser[0][key]; + }); + } + if (invitation && (!database || (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/)))) { + (0, addAdminUserOnLogin_1.default)({ + query: invitation, + user: userPayload, + useLocal, + }); + } + /** @type {import("../../../types").APILoginFunctionReturn} */ + let result = { + success: true, + payload: userPayload, + csrf: csrfKey, + }; + return result; + }); +} diff --git a/dist/package-shared/functions/api/users/api-create-user.d.ts b/dist/package-shared/functions/api/users/api-create-user.d.ts new file mode 100644 index 0000000..18556ba --- /dev/null +++ b/dist/package-shared/functions/api/users/api-create-user.d.ts @@ -0,0 +1,25 @@ +import { APICreateUserFunctionParams } from "../../../types"; +/** + * # API Create User + */ +export default function apiCreateUser({ encryptionKey, payload, database, userId, useLocal, }: APICreateUserFunctionParams): Promise<{ + success: boolean; + msg: string; + payload: null; + sqlResult?: undefined; +} | { + success: boolean; + msg: string; + payload?: undefined; + sqlResult?: undefined; +} | { + success: boolean; + payload: any; + msg?: undefined; + sqlResult?: undefined; +} | { + success: boolean; + msg: string; + sqlResult: any; + payload: null; +}>; diff --git a/dist/package-shared/functions/api/users/api-create-user.js b/dist/package-shared/functions/api/users/api-create-user.js new file mode 100644 index 0000000..d74fd86 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-create-user.js @@ -0,0 +1,142 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiCreateUser; +const addUsersTableToDb_1 = __importDefault(require("../../backend/addUsersTableToDb")); +const addDbEntry_1 = __importDefault(require("../../backend/db/addDbEntry")); +const updateUsersTableSchema_1 = __importDefault(require("../../backend/updateUsersTableSchema")); +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +const hashPassword_1 = __importDefault(require("../../dsql/hashPassword")); +/** + * # API Create User + */ +function apiCreateUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ encryptionKey, payload, database, userId, useLocal, }) { + const dbFullName = database; + const API_USER_ID = userId || process.env.DSQL_API_USER_ID; + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + if (!finalEncryptionKey) { + return { + success: false, + msg: "No encryption key provided", + payload: null, + }; + } + if (!(finalEncryptionKey === null || finalEncryptionKey === void 0 ? void 0 : finalEncryptionKey.match(/.{8,}/))) { + return { + success: false, + msg: "Encryption key must be at least 8 characters long", + payload: null, + }; + } + const hashedPassword = (0, hashPassword_1.default)({ + encryptionKey: finalEncryptionKey, + password: String(payload.password), + }); + payload.password = hashedPassword; + const fieldsQuery = `SHOW COLUMNS FROM users`; + let fields = yield (0, varDatabaseDbHandler_1.default)({ + queryString: fieldsQuery, + database: dbFullName, + useLocal, + }); + if (!(fields === null || fields === void 0 ? void 0 : fields[0])) { + const newTable = yield (0, addUsersTableToDb_1.default)({ + userId: Number(API_USER_ID), + database: dbFullName, + useLocal, + payload: payload, + }); + fields = yield (0, varDatabaseDbHandler_1.default)({ + queryString: fieldsQuery, + database: dbFullName, + useLocal, + }); + } + if (!(fields === null || fields === void 0 ? void 0 : fields[0])) { + return { + success: false, + msg: "Could not create users table", + }; + } + const fieldsTitles = fields.map((fieldObject) => fieldObject.Field); + let invalidField = null; + for (let i = 0; i < Object.keys(payload).length; i++) { + const key = Object.keys(payload)[i]; + if (!fieldsTitles.includes(key)) { + yield (0, updateUsersTableSchema_1.default)({ + userId: Number(API_USER_ID), + database: dbFullName, + newPayload: { + [key]: payload[key], + }, + }); + } + } + if (invalidField) { + return { + success: false, + msg: `${invalidField} is not a valid field!`, + }; + } + const existingUserQuery = `SELECT * FROM users WHERE email = ?${payload.username ? " OR username = ?" : ""}`; + const existingUserValues = payload.username + ? [payload.email, payload.username] + : [payload.email]; + const existingUser = yield (0, varDatabaseDbHandler_1.default)({ + queryString: existingUserQuery, + queryValuesArray: existingUserValues, + database: dbFullName, + useLocal, + }); + if (existingUser === null || existingUser === void 0 ? void 0 : existingUser[0]) { + return { + success: false, + msg: "User Already Exists", + payload: null, + }; + } + const addUser = yield (0, addDbEntry_1.default)({ + dbContext: "Dsql User", + paradigm: "Full Access", + dbFullName: dbFullName, + tableName: "users", + data: Object.assign(Object.assign({}, payload), { image: process.env.DSQL_DEFAULT_USER_IMAGE || + "/images/user-preset.png", image_thumbnail: process.env.DSQL_DEFAULT_USER_IMAGE || + "/images/user-preset-thumbnail.png" }), + useLocal, + }); + if (addUser === null || addUser === void 0 ? void 0 : addUser.insertId) { + const newlyAddedUserQuery = `SELECT id,first_name,last_name,email,username,phone,image,image_thumbnail,city,state,country,zip_code,address,verification_status,more_user_data FROM users WHERE id='${addUser.insertId}'`; + const newlyAddedUser = yield (0, varDatabaseDbHandler_1.default)({ + queryString: newlyAddedUserQuery, + database: dbFullName, + useLocal, + }); + return { + success: true, + payload: newlyAddedUser[0], + }; + } + else { + return { + success: false, + msg: "Could not create user", + sqlResult: addUser, + payload: null, + }; + } + }); +} diff --git a/dist/package-shared/functions/api/users/api-delete-user.d.ts b/dist/package-shared/functions/api/users/api-delete-user.d.ts new file mode 100644 index 0000000..781e5d9 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-delete-user.d.ts @@ -0,0 +1,15 @@ +type Param = { + dbFullName: string; + deletedUserId: string | number; + useLocal?: boolean; +}; +type Return = { + success: boolean; + result?: any; + msg?: string; +}; +/** + * # Update API User Function + */ +export default function apiDeleteUser({ dbFullName, deletedUserId, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/users/api-delete-user.js b/dist/package-shared/functions/api/users/api-delete-user.js new file mode 100644 index 0000000..b17bb03 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-delete-user.js @@ -0,0 +1,51 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiDeleteUser; +const deleteDbEntry_1 = __importDefault(require("../../backend/db/deleteDbEntry")); +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +/** + * # Update API User Function + */ +function apiDeleteUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ dbFullName, deletedUserId, useLocal, }) { + const existingUserQuery = `SELECT * FROM users WHERE id = ?`; + const existingUserValues = [deletedUserId]; + const existingUser = yield (0, varDatabaseDbHandler_1.default)({ + queryString: existingUserQuery, + queryValuesArray: existingUserValues, + database: dbFullName, + useLocal, + }); + if (!(existingUser === null || existingUser === void 0 ? void 0 : existingUser[0])) { + return { + success: false, + msg: "User not found", + }; + } + const deleteUser = yield (0, deleteDbEntry_1.default)({ + dbContext: "Dsql User", + paradigm: "Full Access", + dbFullName, + tableName: "users", + identifierColumnName: "id", + identifierValue: deletedUserId, + useLocal, + }); + return { + success: true, + result: deleteUser, + }; + }); +} diff --git a/dist/package-shared/functions/api/users/api-get-user.d.ts b/dist/package-shared/functions/api/users/api-get-user.d.ts new file mode 100644 index 0000000..d2ff185 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-get-user.d.ts @@ -0,0 +1,5 @@ +import { APIGetUserFunctionParams, GetUserFunctionReturn } from "../../../types"; +/** + * # API Get User + */ +export default function apiGetUser({ fields, dbFullName, userId, useLocal, }: APIGetUserFunctionParams): Promise; diff --git a/dist/package-shared/functions/api/users/api-get-user.js b/dist/package-shared/functions/api/users/api-get-user.js new file mode 100644 index 0000000..407fac3 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-get-user.js @@ -0,0 +1,41 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiGetUser; +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +/** + * # API Get User + */ +function apiGetUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ fields, dbFullName, userId, useLocal, }) { + const query = `SELECT ${fields.join(",")} FROM users WHERE id=?`; + const API_USER_ID = userId || process.env.DSQL_API_USER_ID; + let foundUser = yield (0, varDatabaseDbHandler_1.default)({ + queryString: query, + queryValuesArray: [API_USER_ID], + database: dbFullName.replace(/[^a-z0-9_]/g, ""), + useLocal, + }); + if (!foundUser || !foundUser[0]) { + return { + success: false, + payload: null, + }; + } + return { + success: true, + payload: foundUser[0], + }; + }); +} diff --git a/dist/package-shared/functions/api/users/api-login.d.ts b/dist/package-shared/functions/api/users/api-login.d.ts new file mode 100644 index 0000000..27a7fa5 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-login.d.ts @@ -0,0 +1,5 @@ +import { APILoginFunctionParams, APILoginFunctionReturn } from "../../../types"; +/** + * # API Login + */ +export default function apiLoginUser({ encryptionKey, email, username, password, database, additionalFields, email_login, email_login_code, email_login_field, token, skipPassword, social, useLocal, }: APILoginFunctionParams): Promise; diff --git a/dist/package-shared/functions/api/users/api-login.js b/dist/package-shared/functions/api/users/api-login.js new file mode 100644 index 0000000..6af8b27 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-login.js @@ -0,0 +1,137 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiLoginUser; +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +const hashPassword_1 = __importDefault(require("../../dsql/hashPassword")); +/** + * # API Login + */ +function apiLoginUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ encryptionKey, email, username, password, database, additionalFields, email_login, email_login_code, email_login_field, token, skipPassword, social, useLocal, }) { + const dbFullName = database; + /** + * Check input validity + * + * @description Check input validity + */ + if ((email === null || email === void 0 ? void 0 : email.match(/ /)) || + (username && (username === null || username === void 0 ? void 0 : username.match(/ /))) || + (password && (password === null || password === void 0 ? void 0 : password.match(/ /)))) { + return { + success: false, + msg: "Invalid Email/Password format", + }; + } + /** + * Password hash + * + * @description Password hash + */ + let hashedPassword = password + ? (0, hashPassword_1.default)({ + encryptionKey: encryptionKey, + password: password, + }) + : null; + let foundUser = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT * FROM users WHERE email = ? OR username = ?`, + queryValuesArray: [email, username], + database: dbFullName.replace(/[^a-z0-9_]/g, ""), + useLocal, + }); + if ((!foundUser || !foundUser[0]) && !social) + return { + success: false, + payload: null, + msg: "No user found", + }; + let isPasswordCorrect = false; + if ((foundUser === null || foundUser === void 0 ? void 0 : foundUser[0]) && !email_login && skipPassword) { + isPasswordCorrect = true; + } + else if ((foundUser === null || foundUser === void 0 ? void 0 : foundUser[0]) && !email_login) { + isPasswordCorrect = hashedPassword === foundUser[0].password; + } + else if (foundUser && + foundUser[0] && + email_login && + email_login_code && + email_login_field) { + /** @type {string} */ + const tempCode = foundUser[0][email_login_field]; + if (!tempCode) + throw new Error("No code Found!"); + const tempCodeArray = tempCode.split("-"); + const [code, codeDate] = tempCodeArray; + const millisecond15mins = 1000 * 60 * 15; + if (Date.now() - Number(codeDate) > millisecond15mins) { + throw new Error("Code Expired"); + } + isPasswordCorrect = code === email_login_code; + } + let socialUserValid = false; + if (!isPasswordCorrect && !socialUserValid) { + return { + success: false, + msg: "Wrong password, no social login validity", + payload: null, + }; + } + if (isPasswordCorrect && email_login) { + const resetTempCode = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `UPDATE users SET ${email_login_field} = '' WHERE email = ? OR username = ?`, + queryValuesArray: [email, username], + database: dbFullName.replace(/[^a-z0-9_]/g, ""), + useLocal, + }); + } + let csrfKey = Math.random().toString(36).substring(2) + + "-" + + Math.random().toString(36).substring(2); + let userPayload = { + id: foundUser[0].id, + first_name: foundUser[0].first_name, + last_name: foundUser[0].last_name, + username: foundUser[0].username, + email: foundUser[0].email, + phone: foundUser[0].phone, + social_id: foundUser[0].social_id, + image: foundUser[0].image, + image_thumbnail: foundUser[0].image_thumbnail, + verification_status: foundUser[0].verification_status, + social_login: foundUser[0].social_login, + social_platform: foundUser[0].social_platform, + csrf_k: csrfKey, + more_data: foundUser[0].more_user_data, + logged_in_status: true, + date: Date.now(), + }; + const resposeObject = { + success: true, + msg: "Login Successful", + payload: userPayload, + userId: foundUser[0].id, + csrf: csrfKey, + }; + if (additionalFields && + Array.isArray(additionalFields) && + additionalFields.length > 0) { + additionalFields.forEach((key) => { + userPayload[key] = foundUser[0][key]; + }); + } + return resposeObject; + }); +} diff --git a/dist/package-shared/functions/api/users/api-reauth-user.d.ts b/dist/package-shared/functions/api/users/api-reauth-user.d.ts new file mode 100644 index 0000000..5af5e71 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-reauth-user.d.ts @@ -0,0 +1,14 @@ +import { APILoginFunctionReturn } from "../../../types"; +type Param = { + existingUser: { + [s: string]: any; + }; + database?: string; + additionalFields?: string[]; + useLocal?: boolean; +}; +/** + * # Re-authenticate API user + */ +export default function apiReauthUser({ existingUser, database, additionalFields, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/users/api-reauth-user.js b/dist/package-shared/functions/api/users/api-reauth-user.js new file mode 100644 index 0000000..56860d8 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-reauth-user.js @@ -0,0 +1,72 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiReauthUser; +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +/** + * # Re-authenticate API user + */ +function apiReauthUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ existingUser, database, additionalFields, useLocal, }) { + let foundUser = (existingUser === null || existingUser === void 0 ? void 0 : existingUser.id) && existingUser.id.toString().match(/./) + ? yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT * FROM users WHERE id=?`, + queryValuesArray: [existingUser.id.toString()], + database, + useLocal, + }) + : null; + if (!foundUser || !foundUser[0]) + return { + success: false, + payload: null, + msg: "No user found", + }; + let csrfKey = Math.random().toString(36).substring(2) + + "-" + + Math.random().toString(36).substring(2); + /** @type {import("../../../types").DATASQUIREL_LoggedInUser} */ + let userPayload = { + id: foundUser[0].id, + first_name: foundUser[0].first_name, + last_name: foundUser[0].last_name, + username: foundUser[0].username, + email: foundUser[0].email, + phone: foundUser[0].phone, + social_id: foundUser[0].social_id, + image: foundUser[0].image, + image_thumbnail: foundUser[0].image_thumbnail, + verification_status: foundUser[0].verification_status, + social_login: foundUser[0].social_login, + social_platform: foundUser[0].social_platform, + csrf_k: csrfKey, + more_data: foundUser[0].more_user_data, + logged_in_status: true, + date: Date.now(), + }; + if (additionalFields && + Array.isArray(additionalFields) && + additionalFields.length > 0) { + additionalFields.forEach((key) => { + userPayload[key] = foundUser[0][key]; + }); + } + return { + success: true, + msg: "Login Successful", + payload: userPayload, + csrf: csrfKey, + }; + }); +} diff --git a/dist/package-shared/functions/api/users/api-send-email-code.d.ts b/dist/package-shared/functions/api/users/api-send-email-code.d.ts new file mode 100644 index 0000000..d505301 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-send-email-code.d.ts @@ -0,0 +1,23 @@ +import http from "http"; +import { SendOneTimeCodeEmailResponse } from "../../../types"; +type Param = { + email: string; + database: string; + email_login_field?: string; + mail_domain?: string; + mail_port?: number; + sender?: string; + mail_username?: string; + mail_password?: string; + html: string; + useLocal?: boolean; + response?: http.ServerResponse & { + [s: string]: any; + }; + extraCookies?: import("../../../../package-shared/types").CookieObject[]; +}; +/** + * # Send Email Login Code + */ +export default function apiSendEmailCode({ email, database, email_login_field, mail_domain, mail_port, sender, mail_username, mail_password, html, useLocal, response, extraCookies, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/users/api-send-email-code.js b/dist/package-shared/functions/api/users/api-send-email-code.js new file mode 100644 index 0000000..95b395a --- /dev/null +++ b/dist/package-shared/functions/api/users/api-send-email-code.js @@ -0,0 +1,134 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiSendEmailCode; +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +const nodemailer_1 = __importDefault(require("nodemailer")); +const get_auth_cookie_names_1 = __importDefault(require("../../backend/cookies/get-auth-cookie-names")); +const encrypt_1 = __importDefault(require("../../dsql/encrypt")); +const serialize_cookies_1 = __importDefault(require("../../../utils/serialize-cookies")); +/** + * # Send Email Login Code + */ +function apiSendEmailCode(_a) { + return __awaiter(this, arguments, void 0, function* ({ email, database, email_login_field, mail_domain, mail_port, sender, mail_username, mail_password, html, useLocal, response, extraCookies, }) { + if (email === null || email === void 0 ? void 0 : email.match(/ /)) { + return { + success: false, + msg: "Invalid Email/Password format", + }; + } + const createdAt = Date.now(); + const foundUserQuery = `SELECT * FROM users WHERE email = ?`; + const foundUserValues = [email]; + let foundUser = yield (0, varDatabaseDbHandler_1.default)({ + queryString: foundUserQuery, + queryValuesArray: foundUserValues, + database, + useLocal, + }); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + if (!foundUser || !foundUser[0]) { + return { + success: false, + msg: "No user found", + }; + } + function generateCode() { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + let code = ""; + for (let i = 0; i < 8; i++) { + code += chars[Math.floor(Math.random() * chars.length)]; + } + return code; + } + if ((foundUser === null || foundUser === void 0 ? void 0 : foundUser[0]) && email_login_field) { + const tempCode = generateCode(); + let transporter = nodemailer_1.default.createTransport({ + host: mail_domain || process.env.DSQL_MAIL_HOST, + port: mail_port + ? mail_port + : process.env.DSQL_MAIL_PORT + ? Number(process.env.DSQL_MAIL_PORT) + : 465, + secure: true, + auth: { + user: mail_username || process.env.DSQL_MAIL_EMAIL, + pass: mail_password || process.env.DSQL_MAIL_PASSWORD, + }, + }); + let mailObject = {}; + mailObject["from"] = `"Datasquirel SSO" <${sender || "support@datasquirel.com"}>`; + mailObject["sender"] = sender || "support@datasquirel.com"; + mailObject["to"] = email; + mailObject["subject"] = "One Time Login Code"; + mailObject["html"] = html.replace(/{{code}}/, tempCode); + const info = yield transporter.sendMail(mailObject); + if (!(info === null || info === void 0 ? void 0 : info.accepted)) + throw new Error("Mail not Sent!"); + const setTempCodeQuery = `UPDATE users SET ${email_login_field} = ? WHERE email = ?`; + const setTempCodeValues = [tempCode + `-${createdAt}`, email]; + let setTempCode = yield (0, varDatabaseDbHandler_1.default)({ + queryString: setTempCodeQuery, + queryValuesArray: setTempCodeValues, + database: database, + useLocal, + }); + /** @type {import("../../../types").SendOneTimeCodeEmailResponse} */ + const resObject = { + success: true, + code: tempCode, + email: email, + createdAt, + msg: "Success", + }; + if (response) { + const cookieKeyNames = (0, get_auth_cookie_names_1.default)(); + const oneTimeCodeCookieName = cookieKeyNames.oneTimeCodeName; + const encryptedPayload = (0, encrypt_1.default)({ + data: JSON.stringify(resObject), + }); + if (!encryptedPayload) { + throw new Error("apiSendEmailCode Error: Failed to encrypt payload"); + } + /** @type {import("../../../../package-shared/types").CookieObject} */ + const oneTimeCookieObject = { + name: oneTimeCodeCookieName, + value: encryptedPayload, + sameSite: "Strict", + path: "/", + httpOnly: true, + secure: true, + }; + /** @type {import("../../../../package-shared/types").CookieObject[]} */ + const cookiesObjectArray = extraCookies + ? [...extraCookies, oneTimeCookieObject] + : [oneTimeCookieObject]; + const serializedCookies = (0, serialize_cookies_1.default)({ + cookies: cookiesObjectArray, + }); + response.setHeader("Set-Cookie", serializedCookies); + } + return resObject; + } + else { + return { + success: false, + msg: "Invalid Email/Password format", + }; + } + }); +} diff --git a/dist/package-shared/functions/api/users/api-update-user.d.ts b/dist/package-shared/functions/api/users/api-update-user.d.ts new file mode 100644 index 0000000..f9abcb6 --- /dev/null +++ b/dist/package-shared/functions/api/users/api-update-user.d.ts @@ -0,0 +1,19 @@ +type Param = { + payload: { + [s: string]: any; + }; + dbFullName: string; + updatedUserId: string | number; + useLocal?: boolean; + dbSchema?: import("../../../types").DSQL_DatabaseSchemaType; +}; +type Return = { + success: boolean; + payload?: any; + msg?: string; +}; +/** + * # Update API User Function + */ +export default function apiUpdateUser({ payload, dbFullName, updatedUserId, useLocal, dbSchema, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/users/api-update-user.js b/dist/package-shared/functions/api/users/api-update-user.js new file mode 100644 index 0000000..6dd14ff --- /dev/null +++ b/dist/package-shared/functions/api/users/api-update-user.js @@ -0,0 +1,85 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiUpdateUser; +const updateDbEntry_1 = __importDefault(require("../../backend/db/updateDbEntry")); +const encrypt_1 = __importDefault(require("../../dsql/encrypt")); +const hashPassword_1 = __importDefault(require("../../dsql/hashPassword")); +const varDatabaseDbHandler_1 = __importDefault(require("../../backend/varDatabaseDbHandler")); +/** + * # Update API User Function + */ +function apiUpdateUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ payload, dbFullName, updatedUserId, useLocal, dbSchema, }) { + const existingUserQuery = `SELECT * FROM users WHERE id = ?`; + const existingUserValues = [updatedUserId]; + const existingUser = yield (0, varDatabaseDbHandler_1.default)({ + queryString: existingUserQuery, + queryValuesArray: existingUserValues, + database: dbFullName, + useLocal, + }); + if (!(existingUser === null || existingUser === void 0 ? void 0 : existingUser[0])) { + return { + success: false, + msg: "User not found", + }; + } + const data = (() => { + const reqBodyKeys = Object.keys(payload); + const targetTableSchema = (() => { + var _a; + try { + const targetDatabaseSchema = (_a = dbSchema === null || dbSchema === void 0 ? void 0 : dbSchema.tables) === null || _a === void 0 ? void 0 : _a.find((tbl) => tbl.tableName == "users"); + return targetDatabaseSchema; + } + catch (error) { + return undefined; + } + })(); + /** @type {any} */ + const finalData = {}; + reqBodyKeys.forEach((key) => { + var _a; + const targetFieldSchema = (_a = targetTableSchema === null || targetTableSchema === void 0 ? void 0 : targetTableSchema.fields) === null || _a === void 0 ? void 0 : _a.find((field) => field.fieldName == key); + if (key === null || key === void 0 ? void 0 : key.match(/^date_|^id$|^uuid$/)) + return; + let value = payload[key]; + if (targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.encrypted) { + value = (0, encrypt_1.default)({ data: value }); + } + finalData[key] = value; + }); + if (finalData.password && typeof finalData.password == "string") { + finalData.password = (0, hashPassword_1.default)({ password: finalData.password }); + } + return finalData; + })(); + const updateUser = yield (0, updateDbEntry_1.default)({ + dbContext: "Dsql User", + paradigm: "Full Access", + dbFullName, + tableName: "users", + identifierColumnName: "id", + identifierValue: updatedUserId, + data: data, + useLocal, + }); + return { + success: true, + payload: updateUser, + }; + }); +} diff --git a/dist/package-shared/functions/api/users/social/api-github-login.d.ts b/dist/package-shared/functions/api/users/social/api-github-login.d.ts new file mode 100644 index 0000000..93e3442 --- /dev/null +++ b/dist/package-shared/functions/api/users/social/api-github-login.d.ts @@ -0,0 +1,17 @@ +import { APILoginFunctionReturn } from "../../../../types"; +type Param = { + code?: string; + clientId?: string; + clientSecret?: string; + database?: string; + additionalFields?: string[]; + additionalData?: { + [s: string]: string | number; + }; + email?: string; +}; +/** + * # API Login with Github + */ +export default function apiGithubLogin({ code, clientId, clientSecret, database, additionalFields, email, additionalData, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/api/users/social/api-github-login.js b/dist/package-shared/functions/api/users/social/api-github-login.js new file mode 100644 index 0000000..faf21f1 --- /dev/null +++ b/dist/package-shared/functions/api/users/social/api-github-login.js @@ -0,0 +1,89 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiGithubLogin; +const handleSocialDb_1 = __importDefault(require("../../social-login/handleSocialDb")); +const githubLogin_1 = __importDefault(require("../../social-login/githubLogin")); +const camelJoinedtoCamelSpace_1 = __importDefault(require("../../../../utils/camelJoinedtoCamelSpace")); +/** + * # API Login with Github + */ +function apiGithubLogin(_a) { + return __awaiter(this, arguments, void 0, function* ({ code, clientId, clientSecret, database, additionalFields, email, additionalData, }) { + if (!code || !clientId || !clientSecret || !database) { + return { + success: false, + msg: "Missing query params", + }; + } + if (typeof code !== "string" || + typeof clientId !== "string" || + typeof clientSecret !== "string" || + typeof database !== "string") { + return { + success: false, + msg: "Wrong Parameters", + }; + } + /** + * Create new user folder and file + * + * @description Create new user folder and file + */ + const gitHubUser = yield (0, githubLogin_1.default)({ + code: code, + clientId: clientId, + clientSecret: clientSecret, + }); + if (!gitHubUser) { + return { + success: false, + msg: "No github user returned", + }; + } + const socialId = gitHubUser.name || gitHubUser.id || gitHubUser.login; + const targetName = gitHubUser.name || gitHubUser.login; + const nameArray = (targetName === null || targetName === void 0 ? void 0 : targetName.match(/ /)) + ? targetName === null || targetName === void 0 ? void 0 : targetName.split(" ") + : (targetName === null || targetName === void 0 ? void 0 : targetName.match(/\-/)) + ? targetName === null || targetName === void 0 ? void 0 : targetName.split("-") + : [targetName]; + let payload = { + email: gitHubUser.email, + first_name: (0, camelJoinedtoCamelSpace_1.default)(nameArray[0]), + last_name: (0, camelJoinedtoCamelSpace_1.default)(nameArray[1]), + social_id: socialId, + social_platform: "github", + image: gitHubUser.avatar_url, + image_thumbnail: gitHubUser.avatar_url, + username: "github-user-" + socialId, + }; + if (additionalData) { + payload = Object.assign(Object.assign({}, payload), additionalData); + } + const loggedInGithubUser = yield (0, handleSocialDb_1.default)({ + database, + email: gitHubUser.email, + payload, + social_platform: "github", + social_id: socialId, + supEmail: email, + additionalFields, + }); + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + return Object.assign({}, loggedInGithubUser); + }); +} diff --git a/dist/package-shared/functions/api/users/social/api-google-login.d.ts b/dist/package-shared/functions/api/users/social/api-google-login.d.ts new file mode 100644 index 0000000..996e949 --- /dev/null +++ b/dist/package-shared/functions/api/users/social/api-google-login.d.ts @@ -0,0 +1,5 @@ +import { APIGoogleLoginFunctionParams, APILoginFunctionReturn } from "../../../../types"; +/** + * # API google login + */ +export default function apiGoogleLogin({ token, database, additionalFields, additionalData, }: APIGoogleLoginFunctionParams): Promise; diff --git a/dist/package-shared/functions/api/users/social/api-google-login.js b/dist/package-shared/functions/api/users/social/api-google-login.js new file mode 100644 index 0000000..b0b6879 --- /dev/null +++ b/dist/package-shared/functions/api/users/social/api-google-login.js @@ -0,0 +1,99 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = apiGoogleLogin; +const https_1 = __importDefault(require("https")); +const handleSocialDb_1 = __importDefault(require("../../social-login/handleSocialDb")); +const ejson_1 = __importDefault(require("../../../../utils/ejson")); +/** + * # API google login + */ +function apiGoogleLogin(_a) { + return __awaiter(this, arguments, void 0, function* ({ token, database, additionalFields, additionalData, }) { + try { + const gUser = yield new Promise((resolve, reject) => { + https_1.default + .request({ + method: "GET", + hostname: "www.googleapis.com", + path: "/oauth2/v3/userinfo", + headers: { + Authorization: `Bearer ${token}`, + }, + }, (res) => { + let data = ""; + res.on("data", (chunk) => { + data += chunk; + }); + res.on("end", () => { + resolve(ejson_1.default.parse(data)); + }); + }) + .end(); + }); + if (!(gUser === null || gUser === void 0 ? void 0 : gUser.email_verified)) + throw new Error("No Google User."); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + if (!database || typeof database != "string" || (database === null || database === void 0 ? void 0 : database.match(/ /))) { + return { + success: false, + payload: undefined, + msg: "Please provide a database slug(database name in lowercase with no spaces)", + }; + } + /** + * Create new user folder and file + * + * @description Create new user folder and file + */ + const { given_name, family_name, email, sub, picture } = gUser; + /** @type {Object} */ + let payloadObject = { + email: email, + first_name: given_name, + last_name: family_name, + social_id: sub, + social_platform: "google", + image: picture, + image_thumbnail: picture, + username: `google-user-${sub}`, + }; + if (additionalData) { + payloadObject = Object.assign(Object.assign({}, payloadObject), additionalData); + } + const loggedInGoogleUser = yield (0, handleSocialDb_1.default)({ + database, + email: email || "", + payload: payloadObject, + social_platform: "google", + social_id: sub, + additionalFields, + }); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + return Object.assign({}, loggedInGoogleUser); + } + catch ( /** @type {any} */error) { + console.log(`apo-google-login.js ERROR: ${error.message}`); + return { + success: false, + payload: undefined, + msg: error.message, + }; + } + }); +} diff --git a/dist/package-shared/functions/backend/addAdminUserOnLogin.d.ts b/dist/package-shared/functions/backend/addAdminUserOnLogin.d.ts new file mode 100644 index 0000000..3940e1d --- /dev/null +++ b/dist/package-shared/functions/backend/addAdminUserOnLogin.d.ts @@ -0,0 +1,21 @@ +import { DATASQUIREL_LoggedInUser } from "../../types"; +type Param = { + query: { + invite: number; + database_access: string; + priviledge: string; + email: string; + }; + useLocal?: boolean; + user: DATASQUIREL_LoggedInUser; +}; +/** + * Add Admin User on Login + * ============================================================================== + * + * @description this function handles admin users that have been invited by another + * admin user. This fires when the invited user has been logged in or a new account + * has been created for the invited user + */ +export default function addAdminUserOnLogin({ query, user, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/addAdminUserOnLogin.js b/dist/package-shared/functions/backend/addAdminUserOnLogin.js new file mode 100644 index 0000000..9a484f4 --- /dev/null +++ b/dist/package-shared/functions/backend/addAdminUserOnLogin.js @@ -0,0 +1,110 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = addAdminUserOnLogin; +const serverError_1 = __importDefault(require("./serverError")); +const DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/DB_HANDLER")); +const addDbEntry_1 = __importDefault(require("./db/addDbEntry")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/LOCAL_DB_HANDLER")); +/** + * Add Admin User on Login + * ============================================================================== + * + * @description this function handles admin users that have been invited by another + * admin user. This fires when the invited user has been logged in or a new account + * has been created for the invited user + */ +function addAdminUserOnLogin(_a) { + return __awaiter(this, arguments, void 0, function* ({ query, user, useLocal, }) { + try { + const finalDbHandler = useLocal ? LOCAL_DB_HANDLER_1.default : DB_HANDLER_1.default; + const { invite, database_access, priviledge, email } = query; + const lastInviteTimeQuery = `SELECT date_created_code FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`; + const lastInviteTimeValues = [invite, email]; + const lastInviteTimeArray = yield finalDbHandler(lastInviteTimeQuery, lastInviteTimeValues); + if (!lastInviteTimeArray || !lastInviteTimeArray[0]) { + throw new Error("No Invitation Found"); + } + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + const invitingUserDbQuery = `SELECT first_name,last_name,email FROM users WHERE id=?`; + const invitingUserDbValues = [invite]; + const invitingUserDb = yield finalDbHandler(invitingUserDbQuery, invitingUserDbValues); + if (invitingUserDb === null || invitingUserDb === void 0 ? void 0 : invitingUserDb[0]) { + const existingUserUser = yield finalDbHandler(`SELECT email FROM user_users WHERE user_id=? AND invited_user_id=? AND user_type='admin' AND email=?`, [invite, user.id, email]); + if (existingUserUser === null || existingUserUser === void 0 ? void 0 : existingUserUser[0]) { + console.log("User already added"); + } + else { + (0, addDbEntry_1.default)({ + dbFullName: "datasquirel", + tableName: "user_users", + data: { + user_id: invite, + invited_user_id: user.id, + database_access: database_access, + first_name: user.first_name, + last_name: user.last_name, + phone: user.phone, + email: user.email, + username: user.username, + user_type: "admin", + user_priviledge: priviledge, + image: user.image, + image_thumbnail: user.image_thumbnail, + }, + useLocal, + }); + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + const dbTableData = yield finalDbHandler(`SELECT db_tables_data FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`, [invite, email]); + const clearEntries = yield finalDbHandler(`DELETE FROM delegated_user_tables WHERE root_user_id=? AND delegated_user_id=?`, [invite, user.id]); + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + if (dbTableData && dbTableData[0]) { + const dbTableEntries = dbTableData[0].db_tables_data.split("|"); + for (let i = 0; i < dbTableEntries.length; i++) { + const dbTableEntry = dbTableEntries[i]; + const dbTableEntryArray = dbTableEntry.split("-"); + const [db_slug, table_slug] = dbTableEntryArray; + const newEntry = yield (0, addDbEntry_1.default)({ + dbFullName: "datasquirel", + tableName: "delegated_user_tables", + data: { + delegated_user_id: user.id, + root_user_id: invite, + database: db_slug, + table: table_slug, + priviledge: priviledge, + }, + useLocal, + }); + } + } + } + const inviteAccepted = yield finalDbHandler(`UPDATE invitations SET invitation_status='Accepted' WHERE inviting_user_id=? AND invited_user_email=?`, [invite, email]); + } + } + catch (error) { + (0, serverError_1.default)({ + component: "addAdminUserOnLogin", + message: error.message, + user: user, + }); + } + }); +} diff --git a/dist/package-shared/functions/backend/addMariadbUser.d.ts b/dist/package-shared/functions/backend/addMariadbUser.d.ts new file mode 100644 index 0000000..474c421 --- /dev/null +++ b/dist/package-shared/functions/backend/addMariadbUser.d.ts @@ -0,0 +1,9 @@ +type Param = { + userId: number | string; + useLocal?: boolean; +}; +/** + * # Add Mariadb User + */ +export default function addMariadbUser({ userId, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/addMariadbUser.js b/dist/package-shared/functions/backend/addMariadbUser.js new file mode 100644 index 0000000..aa8c2db --- /dev/null +++ b/dist/package-shared/functions/backend/addMariadbUser.js @@ -0,0 +1,72 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = addMariadbUser; +const generate_password_1 = __importDefault(require("generate-password")); +const DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/DB_HANDLER")); +const NO_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/NO_DB_HANDLER")); +const addDbEntry_1 = __importDefault(require("./db/addDbEntry")); +const encrypt_1 = __importDefault(require("../dsql/encrypt")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/LOCAL_DB_HANDLER")); +/** + * # Add Mariadb User + */ +function addMariadbUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ userId, useLocal, }) { + try { + const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; + const username = `dsql_user_${userId}`; + const password = generate_password_1.default.generate({ + length: 16, + numbers: true, + symbols: true, + uppercase: true, + exclude: "*#.'`\"", + }); + const encryptedPassword = (0, encrypt_1.default)({ data: password }); + const createMariadbUsersQuery = `CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`; + if (useLocal) { + yield (0, LOCAL_DB_HANDLER_1.default)(createMariadbUsersQuery); + } + else { + yield (0, NO_DB_HANDLER_1.default)(createMariadbUsersQuery); + } + const updateUserQuery = `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1', mariadb_pass = ? WHERE id = ?`; + const updateUserValues = [username, encryptedPassword, userId]; + const updateUser = useLocal + ? yield (0, LOCAL_DB_HANDLER_1.default)(updateUserQuery, updateUserValues) + : yield (0, DB_HANDLER_1.default)(updateUserQuery, updateUserValues); + const addMariadbUser = yield (0, addDbEntry_1.default)({ + tableName: "mariadb_users", + data: { + user_id: userId, + username, + host: defaultMariadbUserHost, + password: encryptedPassword, + primary: "1", + grants: '[{"database":"*","table":"*","privileges":["ALL"]}]', + }, + dbContext: "Master", + useLocal, + }); + console.log(`User ${userId} SQL credentials successfully added.`); + } + catch ( /** @type {any} */error) { + console.log(`Error in adding SQL user in 'addMariadbUser' function =>`, error.message); + } + }); +} +//////////////////////////////////////////////// +//////////////////////////////////////////////// +//////////////////////////////////////////////// diff --git a/dist/package-shared/functions/backend/addUsersTableToDb.d.ts b/dist/package-shared/functions/backend/addUsersTableToDb.d.ts new file mode 100644 index 0000000..bc342a6 --- /dev/null +++ b/dist/package-shared/functions/backend/addUsersTableToDb.d.ts @@ -0,0 +1,13 @@ +type Param = { + userId: number; + database: string; + useLocal?: boolean; + payload?: { + [s: string]: any; + }; +}; +/** + * # Add User Table to Database + */ +export default function addUsersTableToDb({ userId, database, useLocal, payload, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/addUsersTableToDb.js b/dist/package-shared/functions/backend/addUsersTableToDb.js new file mode 100644 index 0000000..c28e7b0 --- /dev/null +++ b/dist/package-shared/functions/backend/addUsersTableToDb.js @@ -0,0 +1,83 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = addUsersTableToDb; +const serverError_1 = __importDefault(require("./serverError")); +const DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/DB_HANDLER")); +const grabUserSchemaData_1 = __importDefault(require("./grabUserSchemaData")); +const setUserSchemaData_1 = __importDefault(require("./setUserSchemaData")); +const addDbEntry_1 = __importDefault(require("./db/addDbEntry")); +const createDbFromSchema_1 = __importDefault(require("../../shell/createDbFromSchema")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/LOCAL_DB_HANDLER")); +const grabNewUsersTableSchema_1 = __importDefault(require("./grabNewUsersTableSchema")); +/** + * # Add User Table to Database + */ +function addUsersTableToDb(_a) { + return __awaiter(this, arguments, void 0, function* ({ userId, database, useLocal, payload, }) { + try { + const dbFullName = database; + const userPreset = (0, grabNewUsersTableSchema_1.default)({ payload }); + if (!userPreset) + throw new Error("Couldn't Get User Preset!"); + const userSchemaData = (0, grabUserSchemaData_1.default)({ userId }); + if (!userSchemaData) + throw new Error("User schema data not found!"); + let targetDatabase = userSchemaData.find((db) => db.dbFullName === database); + if (!targetDatabase) { + throw new Error("Couldn't Find Target Database!"); + } + let existingTableIndex = targetDatabase === null || targetDatabase === void 0 ? void 0 : targetDatabase.tables.findIndex((table) => table.tableName === "users"); + if (typeof existingTableIndex == "number" && existingTableIndex > 0) { + targetDatabase.tables[existingTableIndex] = userPreset; + } + else { + targetDatabase.tables.push(userPreset); + } + (0, setUserSchemaData_1.default)({ schemaData: userSchemaData, userId }); + /** @type {any[] | null} */ + const targetDb = useLocal + ? yield (0, LOCAL_DB_HANDLER_1.default)(`SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`, [userId, database]) + : yield (0, DB_HANDLER_1.default)(`SELECT id FROM user_databases WHERE user_id=? AND db_slug=?`, [userId, database]); + if (targetDb === null || targetDb === void 0 ? void 0 : targetDb[0]) { + const newTableEntry = yield (0, addDbEntry_1.default)({ + dbFullName: "datasquirel", + tableName: "user_database_tables", + data: { + user_id: userId, + db_id: targetDb[0].id, + db_slug: targetDatabase.dbSlug, + table_name: "Users", + table_slug: "users", + }, + useLocal, + }); + } + const dbShellUpdate = yield (0, createDbFromSchema_1.default)({ + userId, + targetDatabase: dbFullName, + }); + return `Done!`; + } + catch ( /** @type {any} */error) { + console.log(`addUsersTableToDb.js ERROR: ${error.message}`); + (0, serverError_1.default)({ + component: "addUsersTableToDb", + message: error.message, + user: { id: userId }, + }); + return error.message; + } + }); +} diff --git a/dist/package-shared/functions/backend/api-cred.d.ts b/dist/package-shared/functions/backend/api-cred.d.ts new file mode 100644 index 0000000..c88266c --- /dev/null +++ b/dist/package-shared/functions/backend/api-cred.d.ts @@ -0,0 +1,6 @@ +import { CheckApiCredentialsFn } from "../../types"; +/** + * # Grap API Credentials + */ +declare const grabApiCred: CheckApiCredentialsFn; +export default grabApiCred; diff --git a/dist/package-shared/functions/backend/api-cred.js b/dist/package-shared/functions/backend/api-cred.js new file mode 100644 index 0000000..2df8e62 --- /dev/null +++ b/dist/package-shared/functions/backend/api-cred.js @@ -0,0 +1,50 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const decrypt_1 = __importDefault(require("../dsql/decrypt")); +/** + * # Grap API Credentials + */ +const grabApiCred = ({ key, database, table, user_id, media, }) => { + var _a, _b; + if (!key) + return null; + if (!user_id) + return null; + try { + const allowedKeysPath = process.env.DSQL_API_KEYS_PATH; + if (!allowedKeysPath) + throw new Error("process.env.DSQL_API_KEYS_PATH variable not found"); + const ApiJSON = (0, decrypt_1.default)({ encryptedString: key }); + /** @type {import("../../types").ApiKeyObject} */ + const ApiObject = JSON.parse(ApiJSON || ""); + const isApiKeyValid = fs_1.default.existsSync(`${allowedKeysPath}/${ApiObject.sign}`); + if (String(ApiObject.user_id) !== String(user_id)) + return null; + if (!isApiKeyValid) + return null; + if (!ApiObject.target_database) + return ApiObject; + if (media) + return ApiObject; + if (!database && ApiObject.target_database) + return null; + const isDatabaseAllowed = (_a = ApiObject.target_database) === null || _a === void 0 ? void 0 : _a.split(",").includes(String(database)); + if (isDatabaseAllowed && !ApiObject.target_table) + return ApiObject; + if (isDatabaseAllowed && !table && ApiObject.target_table) + return null; + const isTableAllowed = (_b = ApiObject.target_table) === null || _b === void 0 ? void 0 : _b.split(",").includes(String(table)); + if (isTableAllowed) + return ApiObject; + return null; + } + catch ( /** @type {any} */error) { + console.log(`api-cred ERROR: ${error.message}`); + return { error: `api-cred ERROR: ${error.message}` }; + } +}; +exports.default = grabApiCred; diff --git a/dist/package-shared/functions/backend/auth/write-auth-files.d.ts b/dist/package-shared/functions/backend/auth/write-auth-files.d.ts new file mode 100644 index 0000000..1d78968 --- /dev/null +++ b/dist/package-shared/functions/backend/auth/write-auth-files.d.ts @@ -0,0 +1,23 @@ +export declare const grabAuthDirs: () => { + root: string; + auth: string; +}; +export declare const initAuthFiles: () => boolean; +/** + * # Write Auth Files + */ +export declare const writeAuthFile: (name: string, data: string) => boolean; +/** + * # Get Auth Files + */ +export declare const getAuthFile: (name: string) => string | null; +/** + * # Delete Auth Files + * @param {string} name + */ +export declare const deleteAuthFile: (name: string) => void | null; +/** + * # Delete Auth Files + * @param {string} name + */ +export declare const checkAuthFile: (name: string) => boolean; diff --git a/dist/package-shared/functions/backend/auth/write-auth-files.js b/dist/package-shared/functions/backend/auth/write-auth-files.js new file mode 100644 index 0000000..032c00e --- /dev/null +++ b/dist/package-shared/functions/backend/auth/write-auth-files.js @@ -0,0 +1,90 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.checkAuthFile = exports.deleteAuthFile = exports.getAuthFile = exports.writeAuthFile = exports.initAuthFiles = exports.grabAuthDirs = void 0; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const grabAuthDirs = () => { + const DSQL_AUTH_DIR = process.env.DSQL_AUTH_DIR; + const ROOT_DIR = (DSQL_AUTH_DIR === null || DSQL_AUTH_DIR === void 0 ? void 0 : DSQL_AUTH_DIR.match(/./)) + ? DSQL_AUTH_DIR + : path_1.default.resolve(process.cwd(), "./.tmp"); + const AUTH_DIR = path_1.default.join(ROOT_DIR, "logins"); + return { root: ROOT_DIR, auth: AUTH_DIR }; +}; +exports.grabAuthDirs = grabAuthDirs; +const initAuthFiles = () => { + try { + const authDirs = (0, exports.grabAuthDirs)(); + if (!fs_1.default.existsSync(authDirs.root)) + fs_1.default.mkdirSync(authDirs.root, { recursive: true }); + if (!fs_1.default.existsSync(authDirs.auth)) + fs_1.default.mkdirSync(authDirs.auth, { recursive: true }); + return true; + } + catch (error) { + console.log(`Error initializing Auth Files: ${error.message}`); + return false; + } +}; +exports.initAuthFiles = initAuthFiles; +/** + * # Write Auth Files + */ +const writeAuthFile = (name, data) => { + (0, exports.initAuthFiles)(); + try { + fs_1.default.writeFileSync(path_1.default.join((0, exports.grabAuthDirs)().auth, name), data); + return true; + } + catch ( /** @type {any} */error) { + console.log(`Error writing Auth File: ${error.message}`); + return false; + } +}; +exports.writeAuthFile = writeAuthFile; +/** + * # Get Auth Files + */ +const getAuthFile = (name) => { + try { + const authFilePath = path_1.default.join((0, exports.grabAuthDirs)().auth, name); + return fs_1.default.readFileSync(authFilePath, "utf-8"); + } + catch ( /** @type {any} */error) { + console.log(`Error getting Auth File: ${error.message}`); + return null; + } +}; +exports.getAuthFile = getAuthFile; +/** + * # Delete Auth Files + * @param {string} name + */ +const deleteAuthFile = (name) => { + try { + return fs_1.default.rmSync(path_1.default.join((0, exports.grabAuthDirs)().auth, name)); + } + catch ( /** @type {any} */error) { + console.log(`Error deleting Auth File: ${error.message}`); + return null; + } +}; +exports.deleteAuthFile = deleteAuthFile; +/** + * # Delete Auth Files + * @param {string} name + */ +const checkAuthFile = (name) => { + try { + return fs_1.default.existsSync(path_1.default.join((0, exports.grabAuthDirs)().auth, name)); + return true; + } + catch ( /** @type {any} */error) { + console.log(`Error checking Auth File: ${error.message}`); + return false; + } +}; +exports.checkAuthFile = checkAuthFile; diff --git a/dist/package-shared/functions/backend/cookies/get-auth-cookie-names.d.ts b/dist/package-shared/functions/backend/cookies/get-auth-cookie-names.d.ts new file mode 100644 index 0000000..d4e65ee --- /dev/null +++ b/dist/package-shared/functions/backend/cookies/get-auth-cookie-names.d.ts @@ -0,0 +1,14 @@ +type Param = { + database?: string; + userId?: string | number; +}; +type Return = { + keyCookieName: string; + csrfCookieName: string; + oneTimeCodeName: string; +}; +/** + * # Grab Auth Cookie Names + */ +export default function getAuthCookieNames(params?: Param): Return; +export {}; diff --git a/dist/package-shared/functions/backend/cookies/get-auth-cookie-names.js b/dist/package-shared/functions/backend/cookies/get-auth-cookie-names.js new file mode 100644 index 0000000..cccde6a --- /dev/null +++ b/dist/package-shared/functions/backend/cookies/get-auth-cookie-names.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getAuthCookieNames; +/** + * # Grab Auth Cookie Names + */ +function getAuthCookieNames(params) { + var _a, _b; + const cookiesPrefix = process.env.DSQL_COOKIES_PREFIX || "dsql_"; + const cookiesKeyName = process.env.DSQL_COOKIES_KEY_NAME || "key"; + const cookiesCSRFName = process.env.DSQL_COOKIES_CSRF_NAME || "csrf"; + const cookieOneTimeCodeName = process.env.DSQL_COOKIES_ONE_TIME_CODE_NAME || "one-time-code"; + const targetDatabase = ((_a = params === null || params === void 0 ? void 0 : params.database) === null || _a === void 0 ? void 0 : _a.replace(/^datasquirel_user_\d+_/, "")) || + ((_b = process.env.DSQL_DB_NAME) === null || _b === void 0 ? void 0 : _b.replace(/^datasquirel_user_\d+_/, "")); + let keyCookieName = cookiesPrefix; + if (params === null || params === void 0 ? void 0 : params.userId) + keyCookieName += `user_${params.userId}_`; + if (targetDatabase) + keyCookieName += `${targetDatabase}_`; + keyCookieName += cookiesKeyName; + let csrfCookieName = cookiesPrefix; + if (params === null || params === void 0 ? void 0 : params.userId) + csrfCookieName += `user_${params.userId}_`; + if (targetDatabase) + csrfCookieName += `${targetDatabase}_`; + csrfCookieName += cookiesCSRFName; + let oneTimeCodeName = cookiesPrefix; + if (params === null || params === void 0 ? void 0 : params.userId) + oneTimeCodeName += `user_${params.userId}_`; + if (targetDatabase) + oneTimeCodeName += `${targetDatabase}_`; + oneTimeCodeName += cookieOneTimeCodeName; + return { + keyCookieName, + csrfCookieName, + oneTimeCodeName, + }; +} diff --git a/dist/package-shared/functions/backend/db/addDbEntry.d.ts b/dist/package-shared/functions/backend/db/addDbEntry.d.ts new file mode 100644 index 0000000..0bee513 --- /dev/null +++ b/dist/package-shared/functions/backend/db/addDbEntry.d.ts @@ -0,0 +1,40 @@ +type Param = { + dbContext?: "Master" | "Dsql User"; + paradigm?: "Read Only" | "Full Access"; + dbFullName?: string; + tableName: string; + data: any; + tableSchema?: import("../../../types").DSQL_TableSchemaType; + duplicateColumnName?: string; + duplicateColumnValue?: string; + update?: boolean; + encryptionKey?: string; + encryptionSalt?: string; + useLocal?: boolean; +}; +/** + * Add a db Entry Function + * ============================================================================== + * @description Description + * @async + * + * @param {object} params - An object containing the function parameters. + * @param {("Master" | "Dsql User")} [params.dbContext] - What is the database context? "Master" + * or "Dsql User". Defaults to "Master" + * @param {("Read Only" | "Full Access")} [params.paradigm] - What is the paradigm for "Dsql User"? + * "Read only" or "Full Access"? Defaults to "Read Only" + * @param {string} [params.dbFullName] - Database full name + * @param {string} params.tableName - Table name + * @param {any} params.data - Data to add + * @param {import("../../../types").DSQL_TableSchemaType} [params.tableSchema] - Table schema + * @param {string} [params.duplicateColumnName] - Duplicate column name + * @param {string} [params.duplicateColumnValue] - Duplicate column value + * @param {boolean} [params.update] - Update this row if it exists + * @param {string} [params.encryptionKey] - Update this row if it exists + * @param {string} [params.encryptionSalt] - Update this row if it exists + * @param {boolean} [params.useLocal] + * + * @returns {Promise} + */ +export default function addDbEntry({ dbContext, paradigm, dbFullName, tableName, data, tableSchema, duplicateColumnName, duplicateColumnValue, update, encryptionKey, encryptionSalt, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/db/addDbEntry.js b/dist/package-shared/functions/backend/db/addDbEntry.js new file mode 100644 index 0000000..3c9572f --- /dev/null +++ b/dist/package-shared/functions/backend/db/addDbEntry.js @@ -0,0 +1,209 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = addDbEntry; +const sanitize_html_1 = __importDefault(require("sanitize-html")); +const sanitizeHtmlOptions_1 = __importDefault(require("../html/sanitizeHtmlOptions")); +const updateDbEntry_1 = __importDefault(require("./updateDbEntry")); +const DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DB_HANDLER")); +const DSQL_USER_DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DSQL_USER_DB_HANDLER")); +const encrypt_1 = __importDefault(require("../../dsql/encrypt")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/LOCAL_DB_HANDLER")); +/** + * Add a db Entry Function + * ============================================================================== + * @description Description + * @async + * + * @param {object} params - An object containing the function parameters. + * @param {("Master" | "Dsql User")} [params.dbContext] - What is the database context? "Master" + * or "Dsql User". Defaults to "Master" + * @param {("Read Only" | "Full Access")} [params.paradigm] - What is the paradigm for "Dsql User"? + * "Read only" or "Full Access"? Defaults to "Read Only" + * @param {string} [params.dbFullName] - Database full name + * @param {string} params.tableName - Table name + * @param {any} params.data - Data to add + * @param {import("../../../types").DSQL_TableSchemaType} [params.tableSchema] - Table schema + * @param {string} [params.duplicateColumnName] - Duplicate column name + * @param {string} [params.duplicateColumnValue] - Duplicate column value + * @param {boolean} [params.update] - Update this row if it exists + * @param {string} [params.encryptionKey] - Update this row if it exists + * @param {string} [params.encryptionSalt] - Update this row if it exists + * @param {boolean} [params.useLocal] + * + * @returns {Promise} + */ +function addDbEntry(_a) { + return __awaiter(this, arguments, void 0, function* ({ dbContext, paradigm, dbFullName, tableName, data, tableSchema, duplicateColumnName, duplicateColumnValue, update, encryptionKey, encryptionSalt, useLocal, }) { + var _b, _c; + /** + * Initialize variables + */ + const isMaster = useLocal + ? true + : (dbContext === null || dbContext === void 0 ? void 0 : dbContext.match(/dsql.user/i)) + ? false + : dbFullName && !dbFullName.match(/^datasquirel$/) + ? false + : true; + /** @type { any } */ + const dbHandler = useLocal + ? LOCAL_DB_HANDLER_1.default + : isMaster + ? DB_HANDLER_1.default + : DSQL_USER_DB_HANDLER_1.default; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + if (data === null || data === void 0 ? void 0 : data["date_created_timestamp"]) + delete data["date_created_timestamp"]; + if (data === null || data === void 0 ? void 0 : data["date_updated_timestamp"]) + delete data["date_updated_timestamp"]; + if (data === null || data === void 0 ? void 0 : data["date_updated"]) + delete data["date_updated"]; + if (data === null || data === void 0 ? void 0 : data["date_updated_code"]) + delete data["date_updated_code"]; + if (data === null || data === void 0 ? void 0 : data["date_created"]) + delete data["date_created"]; + if (data === null || data === void 0 ? void 0 : data["date_created_code"]) + delete data["date_created_code"]; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + /** + * Handle function logic + */ + if (duplicateColumnName && typeof duplicateColumnName === "string") { + const duplicateValue = isMaster + ? yield dbHandler(`SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, [duplicateColumnValue]) + : yield dbHandler({ + paradigm: "Read Only", + database: dbFullName, + queryString: `SELECT * FROM \`${tableName}\` WHERE \`${duplicateColumnName}\`=?`, + queryValues: [duplicateColumnValue], + }); + if ((duplicateValue === null || duplicateValue === void 0 ? void 0 : duplicateValue[0]) && !update) { + return null; + } + else if (duplicateValue && duplicateValue[0] && update) { + return yield (0, updateDbEntry_1.default)({ + dbContext, + paradigm, + dbFullName, + tableName, + data, + tableSchema, + encryptionKey, + encryptionSalt, + identifierColumnName: duplicateColumnName, + identifierValue: duplicateColumnValue || "", + }); + } + } + /** + * Declare variables + * + * @description Declare "results" variable + */ + const dataKeys = Object.keys(data); + let insertKeysArray = []; + let insertValuesArray = []; + for (let i = 0; i < dataKeys.length; i++) { + try { + const dataKey = dataKeys[i]; + // @ts-ignore + let value = data === null || data === void 0 ? void 0 : data[dataKey]; + const targetFieldSchemaArray = tableSchema + ? (_b = tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.fields) === null || _b === void 0 ? void 0 : _b.filter((field) => field.fieldName == dataKey) + : null; + const targetFieldSchema = targetFieldSchemaArray && targetFieldSchemaArray[0] + ? targetFieldSchemaArray[0] + : null; + if (value == null || value == undefined) + continue; + if (((_c = targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.dataType) === null || _c === void 0 ? void 0 : _c.match(/int$/i)) && + typeof value == "string" && + !(value === null || value === void 0 ? void 0 : value.match(/./))) + continue; + if (targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.encrypted) { + value = (0, encrypt_1.default)({ + data: value, + encryptionKey, + encryptionSalt, + }); + console.log("DSQL: Encrypted value =>", value); + } + const htmlRegex = /<[^>]+>/g; + if ((targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.richText) || String(value).match(htmlRegex)) { + value = (0, sanitize_html_1.default)(value, sanitizeHtmlOptions_1.default); + } + if (targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.pattern) { + const pattern = new RegExp(targetFieldSchema.pattern, targetFieldSchema.patternFlags || ""); + if (!pattern.test(value)) { + console.log("DSQL: Pattern not matched =>", value); + value = ""; + } + } + insertKeysArray.push("`" + dataKey + "`"); + if (typeof value === "object") { + value = JSON.stringify(value); + } + if (typeof value == "number") { + insertValuesArray.push(String(value)); + } + else { + insertValuesArray.push(value); + } + } + catch ( /** @type {any} */error) { + console.log("DSQL: Error in parsing data keys =>", error.message); + continue; + } + } + //////////////////////////////////////// + if (!(data === null || data === void 0 ? void 0 : data["date_created"])) { + insertKeysArray.push("`date_created`"); + insertValuesArray.push(Date()); + } + if (!(data === null || data === void 0 ? void 0 : data["date_created_code"])) { + insertKeysArray.push("`date_created_code`"); + insertValuesArray.push(Date.now()); + } + //////////////////////////////////////// + if (!(data === null || data === void 0 ? void 0 : data["date_updated"])) { + insertKeysArray.push("`date_updated`"); + insertValuesArray.push(Date()); + } + if (!(data === null || data === void 0 ? void 0 : data["date_updated_code"])) { + insertKeysArray.push("`date_updated_code`"); + insertValuesArray.push(Date.now()); + } + //////////////////////////////////////// + const query = `INSERT INTO \`${tableName}\` (${insertKeysArray.join(",")}) VALUES (${insertValuesArray.map(() => "?").join(",")})`; + const queryValuesArray = insertValuesArray; + const newInsert = isMaster + ? yield dbHandler(query, queryValuesArray) + : yield dbHandler({ + paradigm, + database: dbFullName, + queryString: query, + queryValues: queryValuesArray, + }); + /** + * Return statement + */ + return newInsert; + }); +} diff --git a/dist/package-shared/functions/backend/db/deleteDbEntry.d.ts b/dist/package-shared/functions/backend/db/deleteDbEntry.d.ts new file mode 100644 index 0000000..fcf4ddb --- /dev/null +++ b/dist/package-shared/functions/backend/db/deleteDbEntry.d.ts @@ -0,0 +1,16 @@ +type Param = { + dbContext?: string; + paradigm?: "Read Only" | "Full Access"; + dbFullName: string; + tableName: string; + tableSchema?: import("../../../types").DSQL_TableSchemaType; + identifierColumnName: string; + identifierValue: string | number; + useLocal?: boolean; +}; +/** + * # Delete DB Entry Function + * @description + */ +export default function deleteDbEntry({ dbContext, paradigm, dbFullName, tableName, identifierColumnName, identifierValue, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/db/deleteDbEntry.js b/dist/package-shared/functions/backend/db/deleteDbEntry.js new file mode 100644 index 0000000..23e5c18 --- /dev/null +++ b/dist/package-shared/functions/backend/db/deleteDbEntry.js @@ -0,0 +1,62 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = deleteDbEntry; +const DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DB_HANDLER")); +const DSQL_USER_DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DSQL_USER_DB_HANDLER")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/LOCAL_DB_HANDLER")); +/** + * # Delete DB Entry Function + * @description + */ +function deleteDbEntry(_a) { + return __awaiter(this, arguments, void 0, function* ({ dbContext, paradigm, dbFullName, tableName, identifierColumnName, identifierValue, useLocal, }) { + try { + const isMaster = useLocal + ? true + : (dbContext === null || dbContext === void 0 ? void 0 : dbContext.match(/dsql.user/i)) + ? false + : dbFullName && !dbFullName.match(/^datasquirel$/) + ? false + : true; + /** @type { (a1:any, a2?:any) => any } */ + const dbHandler = useLocal + ? LOCAL_DB_HANDLER_1.default + : isMaster + ? DB_HANDLER_1.default + : DSQL_USER_DB_HANDLER_1.default; + /** + * Execution + * + * @description + */ + const query = `DELETE FROM ${tableName} WHERE \`${identifierColumnName}\`=?`; + const deletedEntry = isMaster + ? yield dbHandler(query, [identifierValue]) + : yield dbHandler({ + paradigm, + queryString: query, + database: dbFullName, + queryValues: [identifierValue], + }); + /** + * Return statement + */ + return deletedEntry; + } + catch (error) { + return null; + } + }); +} diff --git a/dist/package-shared/functions/backend/db/pathTraversalCheck.d.ts b/dist/package-shared/functions/backend/db/pathTraversalCheck.d.ts new file mode 100644 index 0000000..628f1c8 --- /dev/null +++ b/dist/package-shared/functions/backend/db/pathTraversalCheck.d.ts @@ -0,0 +1,5 @@ +/** + * # Path Traversal Check + * @returns {string} + */ +export default function pathTraversalCheck(text: string | number): string; diff --git a/dist/package-shared/functions/backend/db/pathTraversalCheck.js b/dist/package-shared/functions/backend/db/pathTraversalCheck.js new file mode 100644 index 0000000..66ca645 --- /dev/null +++ b/dist/package-shared/functions/backend/db/pathTraversalCheck.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = pathTraversalCheck; +/** + * # Path Traversal Check + * @returns {string} + */ +function pathTraversalCheck(text) { + return text.toString().replace(/\//g, ""); +} diff --git a/dist/package-shared/functions/backend/db/runQuery.d.ts b/dist/package-shared/functions/backend/db/runQuery.d.ts new file mode 100644 index 0000000..eac0671 --- /dev/null +++ b/dist/package-shared/functions/backend/db/runQuery.d.ts @@ -0,0 +1,14 @@ +type Param = { + dbFullName: string; + query: string | any; + readOnly?: boolean; + local?: boolean; + dbSchema?: import("../../../types").DSQL_DatabaseSchemaType; + queryValuesArray?: (string | number)[]; + tableName?: string; +}; +/** + * # Run DSQL users queries + */ +export default function runQuery({ dbFullName, query, readOnly, dbSchema, queryValuesArray, tableName, local, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/db/runQuery.js b/dist/package-shared/functions/backend/db/runQuery.js new file mode 100644 index 0000000..3d7140a --- /dev/null +++ b/dist/package-shared/functions/backend/db/runQuery.js @@ -0,0 +1,155 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = runQuery; +const fullAccessDbHandler_1 = __importDefault(require("../fullAccessDbHandler")); +const varReadOnlyDatabaseDbHandler_1 = __importDefault(require("../varReadOnlyDatabaseDbHandler")); +const serverError_1 = __importDefault(require("../serverError")); +const addDbEntry_1 = __importDefault(require("./addDbEntry")); +const updateDbEntry_1 = __importDefault(require("./updateDbEntry")); +const deleteDbEntry_1 = __importDefault(require("./deleteDbEntry")); +const trim_sql_1 = __importDefault(require("../../../utils/trim-sql")); +/** + * # Run DSQL users queries + */ +function runQuery(_a) { + return __awaiter(this, arguments, void 0, function* ({ dbFullName, query, readOnly, dbSchema, queryValuesArray, tableName, local, }) { + /** + * Declare variables + * + * @description Declare "results" variable + */ + let result; + let error; + let tableSchema; + if (dbSchema) { + try { + const table = tableName + ? tableName + : typeof query == "string" + ? null + : query + ? query === null || query === void 0 ? void 0 : query.table + : null; + if (!table) + throw new Error("No table name provided"); + tableSchema = dbSchema.tables.filter((tb) => (tb === null || tb === void 0 ? void 0 : tb.tableName) === table)[0]; + } + catch (_err) { + // console.log("ERROR getting tableSchema: ", _err.message); + } + } + /** + * Declare variables + * + * @description Declare "results" variable + */ + try { + if (typeof query === "string") { + const formattedQuery = (0, trim_sql_1.default)(query); + /** + * Input Validation + * + * @description Input Validation + */ + if (readOnly && + formattedQuery.match(/^alter|^delete|information_schema|^create/i)) { + throw new Error("Wrong Input!"); + } + if (readOnly) { + result = yield (0, varReadOnlyDatabaseDbHandler_1.default)({ + queryString: formattedQuery, + queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)), + database: dbFullName, + tableSchema, + useLocal: local, + }); + } + else { + result = yield (0, fullAccessDbHandler_1.default)({ + queryString: formattedQuery, + queryValuesArray: queryValuesArray === null || queryValuesArray === void 0 ? void 0 : queryValuesArray.map((vl) => String(vl)), + database: dbFullName, + tableSchema, + local, + }); + } + } + else if (typeof query === "object") { + /** + * Declare variables + * + * @description Declare "results" variable + */ + const { data, action, table, identifierColumnName, identifierValue, update, duplicateColumnName, duplicateColumnValue, } = query; + switch (action.toLowerCase()) { + case "insert": + result = yield (0, addDbEntry_1.default)({ + dbContext: local ? "Master" : "Dsql User", + paradigm: "Full Access", + dbFullName: dbFullName, + tableName: table, + data: data, + update, + duplicateColumnName, + duplicateColumnValue, + tableSchema, + useLocal: local, + }); + if (!(result === null || result === void 0 ? void 0 : result.insertId)) { + error = new Error("Couldn't insert data"); + } + break; + case "update": + result = yield (0, updateDbEntry_1.default)({ + dbContext: local ? "Master" : "Dsql User", + paradigm: "Full Access", + dbFullName: dbFullName, + tableName: table, + data: data, + identifierColumnName, + identifierValue, + tableSchema, + useLocal: local, + }); + break; + case "delete": + result = yield (0, deleteDbEntry_1.default)({ + dbContext: local ? "Master" : "Dsql User", + paradigm: "Full Access", + dbFullName: dbFullName, + tableName: table, + identifierColumnName, + identifierValue, + tableSchema, + useLocal: local, + }); + break; + default: + result = null; + break; + } + } + } + catch ( /** @type {any} */error) { + (0, serverError_1.default)({ + component: "functions/backend/runQuery", + message: error.message, + }); + result = null; + error = error.message; + } + return { result, error }; + }); +} diff --git a/dist/package-shared/functions/backend/db/sanitizeSql.d.ts b/dist/package-shared/functions/backend/db/sanitizeSql.d.ts new file mode 100644 index 0000000..07d1ab3 --- /dev/null +++ b/dist/package-shared/functions/backend/db/sanitizeSql.d.ts @@ -0,0 +1,8 @@ +/** + * Sanitize SQL function + * ============================================================================== + * @description this function takes in a text(or number) and returns a sanitized + * text, usually without spaces + */ +declare function sanitizeSql(text: any, spaces: boolean, regex?: RegExp | null): any; +export default sanitizeSql; diff --git a/dist/package-shared/functions/backend/db/sanitizeSql.js b/dist/package-shared/functions/backend/db/sanitizeSql.js new file mode 100644 index 0000000..d6ca0a6 --- /dev/null +++ b/dist/package-shared/functions/backend/db/sanitizeSql.js @@ -0,0 +1,111 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const lodash_1 = __importDefault(require("lodash")); +/** + * Sanitize SQL function + * ============================================================================== + * @description this function takes in a text(or number) and returns a sanitized + * text, usually without spaces + */ +function sanitizeSql(text, spaces, regex) { + var _a; + if (!text) + return ""; + if (typeof text == "number" || typeof text == "boolean") + return text; + if (typeof text == "string" && !((_a = text === null || text === void 0 ? void 0 : text.toString()) === null || _a === void 0 ? void 0 : _a.match(/./))) + return ""; + if (typeof text == "object" && !Array.isArray(text)) { + const newObject = sanitizeObjects(text, spaces); + return newObject; + } + else if (typeof text == "object" && Array.isArray(text)) { + const newArray = sanitizeArrays(text, spaces); + return newArray; + } + let finalText = text; + if (regex) { + finalText = text.toString().replace(regex, ""); + } + if (spaces) { + } + else { + finalText = text + .toString() + .replace(/\n|\r|\n\r|\r\n/g, "") + .replace(/ /g, ""); + } + const escapeRegex = /select |insert |drop |delete |alter |create |exec | union | or | like | concat|LOAD_FILE|ASCII| COLLATE | HAVING | information_schema|DECLARE |\#|WAITFOR |delay |BENCHMARK |\/\*.*\*\//gi; + finalText = finalText + .replace(/(? { + const value = objectUpdated[key]; + if (!value) { + delete objectUpdated[key]; + return; + } + if (typeof value == "string" || typeof value == "number") { + objectUpdated[key] = sanitizeSql(value, spaces); + } + else if (typeof value == "object" && !Array.isArray(value)) { + objectUpdated[key] = sanitizeObjects(value, spaces); + } + else if (typeof value == "object" && Array.isArray(value)) { + objectUpdated[key] = sanitizeArrays(value, spaces); + } + }); + return objectUpdated; +} +/** + * Sanitize Objects Function + * ============================================================================== + * @description Sanitize objects in the form { key: "value" } + * + * @param {any[]} array - Database Full Name + * @param {boolean} [spaces] - Allow spaces + * + * @returns {string[]|number[]|object[]} + */ +function sanitizeArrays(array, spaces) { + let arrayUpdated = lodash_1.default.cloneDeep(array); + arrayUpdated.forEach((item, index) => { + const value = item; + if (!value) { + arrayUpdated.splice(index, 1); + return; + } + if (typeof item == "string" || typeof item == "number") { + arrayUpdated[index] = sanitizeSql(value, spaces); + } + else if (typeof item == "object" && !Array.isArray(value)) { + arrayUpdated[index] = sanitizeObjects(value, spaces); + } + else if (typeof item == "object" && Array.isArray(value)) { + arrayUpdated[index] = sanitizeArrays(item, spaces); + } + }); + return arrayUpdated; +} +exports.default = sanitizeSql; diff --git a/dist/package-shared/functions/backend/db/updateDbEntry.d.ts b/dist/package-shared/functions/backend/db/updateDbEntry.d.ts new file mode 100644 index 0000000..1972158 --- /dev/null +++ b/dist/package-shared/functions/backend/db/updateDbEntry.d.ts @@ -0,0 +1,19 @@ +type Param = { + dbContext?: "Master" | "Dsql User"; + paradigm?: "Read Only" | "Full Access"; + dbFullName?: string; + tableName: string; + encryptionKey?: string; + encryptionSalt?: string; + data: any; + tableSchema?: import("../../../types").DSQL_TableSchemaType; + identifierColumnName: string; + identifierValue: string | number; + useLocal?: boolean; +}; +/** + * # Update DB Function + * @description + */ +export default function updateDbEntry({ dbContext, paradigm, dbFullName, tableName, data, tableSchema, identifierColumnName, identifierValue, encryptionKey, encryptionSalt, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/db/updateDbEntry.js b/dist/package-shared/functions/backend/db/updateDbEntry.js new file mode 100644 index 0000000..d75d57b --- /dev/null +++ b/dist/package-shared/functions/backend/db/updateDbEntry.js @@ -0,0 +1,144 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = updateDbEntry; +const sanitize_html_1 = __importDefault(require("sanitize-html")); +const sanitizeHtmlOptions_1 = __importDefault(require("../html/sanitizeHtmlOptions")); +const DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DB_HANDLER")); +const DSQL_USER_DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DSQL_USER_DB_HANDLER")); +const encrypt_1 = __importDefault(require("../../dsql/encrypt")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/LOCAL_DB_HANDLER")); +/** + * # Update DB Function + * @description + */ +function updateDbEntry(_a) { + return __awaiter(this, arguments, void 0, function* ({ dbContext, paradigm, dbFullName, tableName, data, tableSchema, identifierColumnName, identifierValue, encryptionKey, encryptionSalt, useLocal, }) { + var _b; + /** + * Check if data is valid + */ + if (!data || !Object.keys(data).length) + return null; + const isMaster = useLocal + ? true + : (dbContext === null || dbContext === void 0 ? void 0 : dbContext.match(/dsql.user/i)) + ? false + : dbFullName && !dbFullName.match(/^datasquirel$/) + ? false + : true; + /** @type {(a1:any, a2?:any)=> any } */ + const dbHandler = useLocal + ? LOCAL_DB_HANDLER_1.default + : isMaster + ? DB_HANDLER_1.default + : DSQL_USER_DB_HANDLER_1.default; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + /** + * Declare variables + * + * @description Declare "results" variable + */ + const dataKeys = Object.keys(data); + let updateKeyValueArray = []; + let updateValues = []; + for (let i = 0; i < dataKeys.length; i++) { + try { + const dataKey = dataKeys[i]; + // @ts-ignore + let value = data[dataKey]; + const targetFieldSchemaArray = tableSchema + ? (_b = tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.fields) === null || _b === void 0 ? void 0 : _b.filter((field) => field.fieldName === dataKey) + : null; + const targetFieldSchema = targetFieldSchemaArray && targetFieldSchemaArray[0] + ? targetFieldSchemaArray[0] + : null; + if (value == null || value == undefined) + continue; + const htmlRegex = /<[^>]+>/g; + if ((targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.richText) || String(value).match(htmlRegex)) { + value = (0, sanitize_html_1.default)(value, sanitizeHtmlOptions_1.default); + } + if (targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.encrypted) { + value = (0, encrypt_1.default)({ + data: value, + encryptionKey, + encryptionSalt, + }); + } + if (typeof value === "object") { + value = JSON.stringify(value); + } + if (targetFieldSchema === null || targetFieldSchema === void 0 ? void 0 : targetFieldSchema.pattern) { + const pattern = new RegExp(targetFieldSchema.pattern, targetFieldSchema.patternFlags || ""); + if (!pattern.test(value)) { + console.log("DSQL: Pattern not matched =>", value); + value = ""; + } + } + if (typeof value === "string" && value.match(/^null$/i)) { + value = { + toSqlString: function () { + return "NULL"; + }, + }; + } + if (typeof value === "string" && !value.match(/./i)) { + value = { + toSqlString: function () { + return "NULL"; + }, + }; + } + updateKeyValueArray.push(`\`${dataKey}\`=?`); + if (typeof value == "number") { + updateValues.push(String(value)); + } + else { + updateValues.push(value); + } + //////////////////////////////////////// + //////////////////////////////////////// + } + catch ( /** @type {any} */error) { + //////////////////////////////////////// + //////////////////////////////////////// + console.log("DSQL: Error in parsing data keys in update function =>", error.message); + continue; + } + } + //////////////////////////////////////// + //////////////////////////////////////// + updateKeyValueArray.push(`date_updated='${Date()}'`); + updateKeyValueArray.push(`date_updated_code='${Date.now()}'`); + //////////////////////////////////////// + //////////////////////////////////////// + const query = `UPDATE ${tableName} SET ${updateKeyValueArray.join(",")} WHERE \`${identifierColumnName}\`=?`; + updateValues.push(identifierValue); + const updatedEntry = isMaster + ? yield dbHandler(query, updateValues) + : yield dbHandler({ + paradigm, + database: dbFullName, + queryString: query, + queryValues: updateValues, + }); + /** + * Return statement + */ + return updatedEntry; + }); +} diff --git a/dist/package-shared/functions/backend/dbHandler.d.ts b/dist/package-shared/functions/backend/dbHandler.d.ts new file mode 100644 index 0000000..7bfe147 --- /dev/null +++ b/dist/package-shared/functions/backend/dbHandler.d.ts @@ -0,0 +1,4 @@ +/** + * # Main DB Handler Function + */ +export default function dbHandler(...args: any[]): Promise; diff --git a/dist/package-shared/functions/backend/dbHandler.js b/dist/package-shared/functions/backend/dbHandler.js new file mode 100644 index 0000000..1af4c51 --- /dev/null +++ b/dist/package-shared/functions/backend/dbHandler.js @@ -0,0 +1,82 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = dbHandler; +const fs_1 = __importDefault(require("fs")); +const serverError_1 = __importDefault(require("./serverError")); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../../utils/backend/grabDbSSL")); +const connection = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # Main DB Handler Function + */ +function dbHandler(...args) { + return __awaiter(this, void 0, void 0, function* () { + var _a; + ((_a = process.env.NODE_ENV) === null || _a === void 0 ? void 0 : _a.match(/dev/)) && + fs_1.default.appendFileSync("./.tmp/sqlQuery.sql", args[0] + "\n" + Date() + "\n\n\n", "utf8"); + /** + * Declare variables + * + * @description Declare "results" variable + */ + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + results = yield new Promise((resolve, reject) => { + connection.query(...args, (error, result, fields) => { + if (error) { + resolve({ error: error.message }); + } + else { + resolve(result); + } + }); + }); + yield connection.end(); + } + catch (error) { + fs_1.default.appendFileSync("./.tmp/dbErrorLogs.txt", JSON.stringify(error, null, 4) + "\n" + Date() + "\n\n\n", "utf8"); + results = null; + (0, serverError_1.default)({ + component: "dbHandler", + message: error.message, + }); + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + if (results) { + return JSON.parse(JSON.stringify(results)); + } + else { + return null; + } + }); +} diff --git a/dist/package-shared/functions/backend/defaultFieldsRegexp.d.ts b/dist/package-shared/functions/backend/defaultFieldsRegexp.d.ts new file mode 100644 index 0000000..f9e698e --- /dev/null +++ b/dist/package-shared/functions/backend/defaultFieldsRegexp.d.ts @@ -0,0 +1,7 @@ +/** + * Regular expression to match default fields + * + * @description Regular expression to match default fields + */ +declare const defaultFieldsRegexp: RegExp; +export default defaultFieldsRegexp; diff --git a/dist/package-shared/functions/backend/defaultFieldsRegexp.js b/dist/package-shared/functions/backend/defaultFieldsRegexp.js new file mode 100644 index 0000000..df09adf --- /dev/null +++ b/dist/package-shared/functions/backend/defaultFieldsRegexp.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Regular expression to match default fields + * + * @description Regular expression to match default fields + */ +const defaultFieldsRegexp = /^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/; +exports.default = defaultFieldsRegexp; diff --git a/dist/package-shared/functions/backend/fullAccessDbHandler.d.ts b/dist/package-shared/functions/backend/fullAccessDbHandler.d.ts new file mode 100644 index 0000000..eb0e480 --- /dev/null +++ b/dist/package-shared/functions/backend/fullAccessDbHandler.d.ts @@ -0,0 +1,12 @@ +type Param = { + queryString: string; + database: string; + local?: boolean; + tableSchema?: import("../../types").DSQL_TableSchemaType | null; + queryValuesArray?: string[]; +}; +/** + * # Full Access Db Handler + */ +export default function fullAccessDbHandler({ queryString, database, tableSchema, queryValuesArray, local, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/fullAccessDbHandler.js b/dist/package-shared/functions/backend/fullAccessDbHandler.js new file mode 100644 index 0000000..b036ef5 --- /dev/null +++ b/dist/package-shared/functions/backend/fullAccessDbHandler.js @@ -0,0 +1,80 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = fullAccessDbHandler; +const DSQL_USER_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/DSQL_USER_DB_HANDLER")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/LOCAL_DB_HANDLER")); +const parseDbResults_1 = __importDefault(require("./parseDbResults")); +const serverError_1 = __importDefault(require("./serverError")); +/** + * # Full Access Db Handler + */ +function fullAccessDbHandler(_a) { + return __awaiter(this, arguments, void 0, function* ({ queryString, database, tableSchema, queryValuesArray, local, }) { + /** + * Declare variables + * + * @description Declare "results" variable + */ + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + /** ********************* Run Query */ + results = local + ? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray) + : yield (0, DSQL_USER_DB_HANDLER_1.default)({ + paradigm: "Full Access", + database, + queryString, + queryValues: queryValuesArray, + }); + //////////////////////////////////////// + } + catch ( /** @type {any} */error) { + //////////////////////////////////////// + (0, serverError_1.default)({ + component: "fullAccessDbHandler", + message: error.message, + }); + /** + * Return error + */ + return error.message; + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + if (results && tableSchema) { + const unparsedResults = results; + const parsedResults = yield (0, parseDbResults_1.default)({ + unparsedResults: unparsedResults, + tableSchema: tableSchema, + }); + return parsedResults; + } + else if (results) { + return results; + } + else { + return null; + } + }); +} diff --git a/dist/package-shared/functions/backend/grabNewUsersTableSchema.d.ts b/dist/package-shared/functions/backend/grabNewUsersTableSchema.d.ts new file mode 100644 index 0000000..35a5aaa --- /dev/null +++ b/dist/package-shared/functions/backend/grabNewUsersTableSchema.d.ts @@ -0,0 +1,9 @@ +import { DSQL_TableSchemaType } from "../../types"; +/** + * # Add User Table to Database + */ +export default function grabNewUsersTableSchema(params: { + payload?: { + [s: string]: any; + }; +}): DSQL_TableSchemaType | null; diff --git a/dist/package-shared/functions/backend/grabNewUsersTableSchema.js b/dist/package-shared/functions/backend/grabNewUsersTableSchema.js new file mode 100644 index 0000000..0eb955a --- /dev/null +++ b/dist/package-shared/functions/backend/grabNewUsersTableSchema.js @@ -0,0 +1,42 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = grabNewUsersTableSchema; +const grabSchemaFieldsFromData_1 = __importDefault(require("./grabSchemaFieldsFromData")); +const serverError_1 = __importDefault(require("./serverError")); +/** + * # Add User Table to Database + */ +function grabNewUsersTableSchema(params) { + try { + const userPreset = require("../../data/presets/users.json"); + const defaultFields = require("../../data/defaultFields.json"); + const supplementalFields = (params === null || params === void 0 ? void 0 : params.payload) + ? (0, grabSchemaFieldsFromData_1.default)({ + data: params === null || params === void 0 ? void 0 : params.payload, + excludeData: defaultFields, + excludeFields: userPreset.fields, + }) + : []; + console.log("supplementalFields", supplementalFields); + const allFields = [...userPreset.fields, ...supplementalFields]; + console.log("allFields", allFields); + const finalFields = [ + ...defaultFields.slice(0, 2), + ...allFields, + ...defaultFields.slice(2), + ]; + userPreset.fields = [...finalFields]; + return userPreset; + } + catch ( /** @type {any} */error) { + console.log(`grabNewUsersTableSchema.js ERROR: ${error.message}`); + (0, serverError_1.default)({ + component: "grabNewUsersTableSchema", + message: error.message, + }); + return null; + } +} diff --git a/dist/package-shared/functions/backend/grabSchemaFieldsFromData.d.ts b/dist/package-shared/functions/backend/grabSchemaFieldsFromData.d.ts new file mode 100644 index 0000000..3c76808 --- /dev/null +++ b/dist/package-shared/functions/backend/grabSchemaFieldsFromData.d.ts @@ -0,0 +1,16 @@ +import { DSQL_FieldSchemaType } from "../../types"; +type Param = { + data?: { + [s: string]: any; + }; + fields?: string[]; + excludeData?: { + [s: string]: any; + }; + excludeFields?: DSQL_FieldSchemaType[]; +}; +/** + * # Add User Table to Database + */ +export default function grabSchemaFieldsFromData({ data, fields, excludeData, excludeFields, }: Param): DSQL_FieldSchemaType[]; +export {}; diff --git a/dist/package-shared/functions/backend/grabSchemaFieldsFromData.js b/dist/package-shared/functions/backend/grabSchemaFieldsFromData.js new file mode 100644 index 0000000..46ac8fc --- /dev/null +++ b/dist/package-shared/functions/backend/grabSchemaFieldsFromData.js @@ -0,0 +1,66 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = grabSchemaFieldsFromData; +const serverError_1 = __importDefault(require("./serverError")); +/** + * # Add User Table to Database + */ +function grabSchemaFieldsFromData({ data, fields, excludeData, excludeFields, }) { + var _a; + try { + const possibleFields = require("../../data/possibleFields.json"); + const dataTypes = require("../../data/dataTypes.json"); + /** @type {DSQL_FieldSchemaType[]} */ + const finalFields = []; + /** @type {string[]} */ + let filteredFields = []; + if (data && ((_a = Object.keys(data)) === null || _a === void 0 ? void 0 : _a[0])) { + filteredFields = Object.keys(data); + } + if (fields) { + filteredFields = [...filteredFields, ...fields]; + filteredFields = [...new Set(filteredFields)]; + } + filteredFields = filteredFields + .filter((fld) => !excludeData || !Object.keys(excludeData).includes(fld)) + .filter((fld) => !excludeFields || + !excludeFields.find((exlFld) => exlFld.fieldName == fld)); + filteredFields.forEach((fld) => { + const value = data ? data[fld] : null; + if (typeof value == "string") { + const newField = { + fieldName: fld, + dataType: value.length > 255 ? "TEXT" : "VARCHAR(255)", + }; + if (Boolean(value.match(/<[^>]+>/g))) { + newField.richText = true; + } + finalFields.push(newField); + } + else if (typeof value == "number") { + finalFields.push({ + fieldName: fld, + dataType: "INT", + }); + } + else { + finalFields.push({ + fieldName: fld, + dataType: "VARCHAR(255)", + }); + } + }); + return finalFields; + } + catch ( /** @type {any} */error) { + console.log(`grabSchemaFieldsFromData.js ERROR: ${error.message}`); + (0, serverError_1.default)({ + component: "grabSchemaFieldsFromData.js", + message: error.message, + }); + return []; + } +} diff --git a/dist/package-shared/functions/backend/grabUserSchemaData.d.ts b/dist/package-shared/functions/backend/grabUserSchemaData.d.ts new file mode 100644 index 0000000..db0268c --- /dev/null +++ b/dist/package-shared/functions/backend/grabUserSchemaData.d.ts @@ -0,0 +1,6 @@ +/** + * # Grab User Schema Data + */ +export default function grabUserSchemaData({ userId, }: { + userId: string | number; +}): import("../../types").DSQL_DatabaseSchemaType[] | null; diff --git a/dist/package-shared/functions/backend/grabUserSchemaData.js b/dist/package-shared/functions/backend/grabUserSchemaData.js new file mode 100644 index 0000000..ce5dfa4 --- /dev/null +++ b/dist/package-shared/functions/backend/grabUserSchemaData.js @@ -0,0 +1,26 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = grabUserSchemaData; +const serverError_1 = __importDefault(require("./serverError")); +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +/** + * # Grab User Schema Data + */ +function grabUserSchemaData({ userId, }) { + try { + const userSchemaFilePath = path_1.default.resolve(process.cwd(), `${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${userId}/main.json`); + const userSchemaData = JSON.parse(fs_1.default.readFileSync(userSchemaFilePath, "utf-8")); + return userSchemaData; + } + catch (error) { + (0, serverError_1.default)({ + component: "grabUserSchemaData", + message: error.message, + }); + return null; + } +} diff --git a/dist/package-shared/functions/backend/handleNodemailer.d.ts b/dist/package-shared/functions/backend/handleNodemailer.d.ts new file mode 100644 index 0000000..89cee35 --- /dev/null +++ b/dist/package-shared/functions/backend/handleNodemailer.d.ts @@ -0,0 +1,13 @@ +type Param = { + to?: string; + subject?: string; + text?: string; + html?: string; + senderName?: string; + alias?: string | null; +}; +/** + * # Handle mails With Nodemailer + */ +export default function handleNodemailer({ to, subject, text, html, alias, senderName, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/handleNodemailer.js b/dist/package-shared/functions/backend/handleNodemailer.js new file mode 100644 index 0000000..5fa16d6 --- /dev/null +++ b/dist/package-shared/functions/backend/handleNodemailer.js @@ -0,0 +1,89 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = handleNodemailer; +const fs_1 = __importDefault(require("fs")); +const nodemailer_1 = __importDefault(require("nodemailer")); +let transporter = nodemailer_1.default.createTransport({ + host: process.env.DSQL_MAIL_HOST, + port: 465, + secure: true, + auth: { + user: process.env.DSQL_MAIL_EMAIL, + pass: process.env.DSQL_MAIL_PASSWORD, + }, +}); +/** + * # Handle mails With Nodemailer + */ +function handleNodemailer(_a) { + return __awaiter(this, arguments, void 0, function* ({ to, subject, text, html, alias, senderName, }) { + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + if (!process.env.DSQL_MAIL_HOST || + !process.env.DSQL_MAIL_EMAIL || + !process.env.DSQL_MAIL_PASSWORD) { + return null; + } + const sender = (() => { + if (alias === null || alias === void 0 ? void 0 : alias.match(/support/i)) + return process.env.DSQL_MAIL_EMAIL; + return process.env.DSQL_MAIL_EMAIL; + })(); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + let sentMessage; + if (!fs_1.default.existsSync("./email/index.html")) { + return; + } + let mailRoot = fs_1.default.readFileSync("./email/index.html", "utf8"); + let finalHtml = mailRoot + .replace(/{{email_body}}/, html ? html : "") + .replace(/{{issue_date}}/, Date().substring(0, 24)); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + try { + let mailObject = {}; + mailObject["from"] = `"${senderName || "Datasquirel"}" <${sender}>`; + mailObject["sender"] = sender; + if (alias) + mailObject["replyTo"] = sender; + mailObject["to"] = to; + mailObject["subject"] = subject; + mailObject["text"] = text; + mailObject["html"] = finalHtml; + // send mail with defined transport object + let info = yield transporter.sendMail(mailObject); + sentMessage = info; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + } + catch ( /** @type {any} */error) { + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + console.log("ERROR in handleNodemailer Function =>", error.message); + // serverError({ + // component: "handleNodemailer", + // message: error.message, + // user: { email: to }, + // }); + } + return sentMessage; + }); +} diff --git a/dist/package-shared/functions/backend/html/sanitizeHtmlOptions.d.ts b/dist/package-shared/functions/backend/html/sanitizeHtmlOptions.d.ts new file mode 100644 index 0000000..676f6c7 --- /dev/null +++ b/dist/package-shared/functions/backend/html/sanitizeHtmlOptions.d.ts @@ -0,0 +1,9 @@ +declare const sanitizeHtmlOptions: { + allowedTags: string[]; + allowedAttributes: { + a: string[]; + img: string[]; + "*": string[]; + }; +}; +export default sanitizeHtmlOptions; diff --git a/dist/package-shared/functions/backend/html/sanitizeHtmlOptions.js b/dist/package-shared/functions/backend/html/sanitizeHtmlOptions.js new file mode 100644 index 0000000..57494aa --- /dev/null +++ b/dist/package-shared/functions/backend/html/sanitizeHtmlOptions.js @@ -0,0 +1,35 @@ +"use strict"; +// @ts-check +Object.defineProperty(exports, "__esModule", { value: true }); +const sanitizeHtmlOptions = { + allowedTags: [ + "b", + "i", + "em", + "strong", + "a", + "p", + "span", + "ul", + "ol", + "li", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "img", + "div", + "button", + "pre", + "code", + "br", + ], + allowedAttributes: { + a: ["href"], + img: ["src", "alt", "width", "height", "class", "style"], + "*": ["style", "class"], + }, +}; +exports.default = sanitizeHtmlOptions; diff --git a/dist/package-shared/functions/backend/httpRequest.d.ts b/dist/package-shared/functions/backend/httpRequest.d.ts new file mode 100644 index 0000000..254966e --- /dev/null +++ b/dist/package-shared/functions/backend/httpRequest.d.ts @@ -0,0 +1,13 @@ +import { HttpFunctionResponse, HttpRequestParams } from "../../types"; +/** + * # Generate a http Request + */ +export default function httpRequest(params: HttpRequestParams): Promise>; diff --git a/dist/package-shared/functions/backend/httpRequest.js b/dist/package-shared/functions/backend/httpRequest.js new file mode 100644 index 0000000..9ff5fd6 --- /dev/null +++ b/dist/package-shared/functions/backend/httpRequest.js @@ -0,0 +1,85 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = httpRequest; +const node_http_1 = __importDefault(require("node:http")); +const node_https_1 = __importDefault(require("node:https")); +const querystring_1 = __importDefault(require("querystring")); +const serialize_query_1 = __importDefault(require("../../utils/serialize-query")); +/** + * # Generate a http Request + */ +function httpRequest(params) { + return new Promise((resolve, reject) => { + const isUrlEncodedFormBody = params.urlEncodedFormBody; + const reqPayloadString = params.body + ? isUrlEncodedFormBody + ? querystring_1.default.stringify(params.body) + : JSON.stringify(params.body).replace(/\n|\r|\n\r/gm, "") + : undefined; + const reqQueryString = params.query + ? (0, serialize_query_1.default)(params.query) + : undefined; + const paramScheme = params.scheme; + const finalScheme = paramScheme == "http" ? node_http_1.default : node_https_1.default; + const finalPath = params.path + ? params.path + (reqQueryString ? reqQueryString : "") + : undefined; + delete params.body; + delete params.scheme; + delete params.query; + delete params.urlEncodedFormBody; + /** @type {import("node:https").RequestOptions} */ + const requestOptions = Object.assign(Object.assign({}, params), { headers: Object.assign({ "Content-Type": isUrlEncodedFormBody + ? "application/x-www-form-urlencoded" + : "application/json", "Content-Length": reqPayloadString + ? Buffer.from(reqPayloadString).length + : undefined }, params.headers), port: paramScheme == "https" ? 443 : params.port, path: finalPath }); + const httpsRequest = finalScheme.request(requestOptions, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + const data = (() => { + try { + const jsonObj = JSON.parse(str); + return jsonObj; + } + catch (error) { + return undefined; + } + })(); + resolve({ + status: response.statusCode || 404, + data, + str, + requestedPath: finalPath, + }); + }); + response.on("error", (err) => { + resolve({ + status: response.statusCode || 404, + str, + error: err.message, + requestedPath: finalPath, + }); + }); + }); + if (reqPayloadString) { + httpsRequest.write(reqPayloadString); + } + httpsRequest.on("error", (error) => { + console.log("HTTPS request ERROR =>", error); + }); + httpsRequest.end(); + }); +} diff --git a/dist/package-shared/functions/backend/httpsRequest.d.ts b/dist/package-shared/functions/backend/httpsRequest.d.ts new file mode 100644 index 0000000..836d4ca --- /dev/null +++ b/dist/package-shared/functions/backend/httpsRequest.d.ts @@ -0,0 +1,15 @@ +type Param = { + scheme?: string; + url?: string; + method?: string; + hostname?: string; + path?: string; + port?: number | string; + headers?: object; + body?: object; +}; +/** + * # Make Https Request + */ +export default function httpsRequest({ url, method, hostname, path, headers, body, port, scheme, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/httpsRequest.js b/dist/package-shared/functions/backend/httpsRequest.js new file mode 100644 index 0000000..53d4abd --- /dev/null +++ b/dist/package-shared/functions/backend/httpsRequest.js @@ -0,0 +1,88 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = httpsRequest; +const https_1 = __importDefault(require("https")); +const http_1 = __importDefault(require("http")); +const url_1 = require("url"); +/** + * # Make Https Request + */ +function httpsRequest({ url, method, hostname, path, headers, body, port, scheme, }) { + var _a; + const reqPayloadString = body ? JSON.stringify(body) : null; + const PARSED_URL = url ? new url_1.URL(url) : null; + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + /** @type {any} */ + let requestOptions = { + method: method || "GET", + hostname: PARSED_URL ? PARSED_URL.hostname : hostname, + port: (scheme === null || scheme === void 0 ? void 0 : scheme.match(/https/i)) + ? 443 + : PARSED_URL + ? ((_a = PARSED_URL.protocol) === null || _a === void 0 ? void 0 : _a.match(/https/i)) + ? 443 + : PARSED_URL.port + : port + ? Number(port) + : 80, + headers: {}, + }; + if (path) + requestOptions.path = path; + // if (href) requestOptions.href = href; + if (headers) + requestOptions.headers = headers; + if (body) { + requestOptions.headers["Content-Type"] = "application/json"; + requestOptions.headers["Content-Length"] = reqPayloadString + ? Buffer.from(reqPayloadString).length + : undefined; + } + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + return new Promise((res, rej) => { + var _a; + const httpsRequest = ((scheme === null || scheme === void 0 ? void 0 : scheme.match(/https/i)) + ? https_1.default + : ((_a = PARSED_URL === null || PARSED_URL === void 0 ? void 0 : PARSED_URL.protocol) === null || _a === void 0 ? void 0 : _a.match(/https/i)) + ? https_1.default + : http_1.default).request( + /* ====== Request Options object ====== */ + requestOptions, + //////////////////////////////////////////////// + //////////////////////////////////////////////// + //////////////////////////////////////////////// + /* ====== Callback function ====== */ + (response) => { + var str = ""; + // ## another chunk of data has been received, so append it to `str` + response.on("data", function (chunk) { + str += chunk; + }); + // ## the whole response has been received, so we just print it out here + response.on("end", function () { + res(str); + }); + response.on("error", (error) => { + console.log("HTTP response error =>", error.message); + rej(`HTTP response error =>, ${error.message}`); + }); + response.on("close", () => { + console.log("HTTP(S) Response Closed Successfully"); + }); + }); + if (body) + httpsRequest.write(reqPayloadString); + httpsRequest.on("error", (error) => { + console.log("HTTPS request ERROR =>", error.message); + rej(`HTTP request error =>, ${error.message}`); + }); + httpsRequest.end(); + }); +} diff --git a/dist/package-shared/functions/backend/noDatabaseDbHandler.d.ts b/dist/package-shared/functions/backend/noDatabaseDbHandler.d.ts new file mode 100644 index 0000000..95dce69 --- /dev/null +++ b/dist/package-shared/functions/backend/noDatabaseDbHandler.d.ts @@ -0,0 +1,4 @@ +/** + * # No Database DB Handler + */ +export default function noDatabaseDbHandler(queryString: string): Promise; diff --git a/dist/package-shared/functions/backend/noDatabaseDbHandler.js b/dist/package-shared/functions/backend/noDatabaseDbHandler.js new file mode 100644 index 0000000..460f6ce --- /dev/null +++ b/dist/package-shared/functions/backend/noDatabaseDbHandler.js @@ -0,0 +1,64 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = noDatabaseDbHandler; +const fs_1 = __importDefault(require("fs")); +const serverError_1 = __importDefault(require("./serverError")); +const NO_DB_HANDLER_1 = __importDefault(require("../../../package-shared/utils/backend/global-db/NO_DB_HANDLER")); +/** + * # No Database DB Handler + */ +function noDatabaseDbHandler(queryString) { + return __awaiter(this, void 0, void 0, function* () { + var _a; + ((_a = process.env.NODE_ENV) === null || _a === void 0 ? void 0 : _a.match(/dev/)) && + fs_1.default.appendFileSync("./.tmp/sqlQuery.sql", queryString + "\n" + Date() + "\n\n\n", "utf8"); + /** + * Declare variables + * + * @description Declare "results" variable + */ + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + /** ********************* Run Query */ + results = yield (0, NO_DB_HANDLER_1.default)(queryString); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + } + catch ( /** @type {any} */error) { + (0, serverError_1.default)({ + component: "noDatabaseDbHandler", + message: error.message, + }); + console.log("ERROR in noDatabaseDbHandler =>", error.message); + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + if (results) { + return results; + } + else { + return null; + } + }); +} diff --git a/dist/package-shared/functions/backend/parseDbResults.d.ts b/dist/package-shared/functions/backend/parseDbResults.d.ts new file mode 100644 index 0000000..51a7845 --- /dev/null +++ b/dist/package-shared/functions/backend/parseDbResults.d.ts @@ -0,0 +1,13 @@ +type Param = { + unparsedResults: any[]; + tableSchema?: import("../../types").DSQL_TableSchemaType; +}; +/** + * Parse Database results + * ============================================================================== + * @description this function takes a database results array gotten from a DB handler + * function, decrypts encrypted fields, and returns an updated array with no encrypted + * fields + */ +export default function parseDbResults({ unparsedResults, tableSchema, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/parseDbResults.js b/dist/package-shared/functions/backend/parseDbResults.js new file mode 100644 index 0000000..6ce9a41 --- /dev/null +++ b/dist/package-shared/functions/backend/parseDbResults.js @@ -0,0 +1,76 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = parseDbResults; +const decrypt_1 = __importDefault(require("../dsql/decrypt")); +const defaultFieldsRegexp_1 = __importDefault(require("./defaultFieldsRegexp")); +/** + * Parse Database results + * ============================================================================== + * @description this function takes a database results array gotten from a DB handler + * function, decrypts encrypted fields, and returns an updated array with no encrypted + * fields + */ +function parseDbResults(_a) { + return __awaiter(this, arguments, void 0, function* ({ unparsedResults, tableSchema, }) { + /** + * Declare variables + * + * @description Declare "results" variable + */ + let parsedResults = []; + try { + /** + * Declare variables + * + * @description Declare "results" variable + */ + for (let pr = 0; pr < unparsedResults.length; pr++) { + let result = unparsedResults[pr]; + let resultFieldNames = Object.keys(result); + for (let i = 0; i < resultFieldNames.length; i++) { + const resultFieldName = resultFieldNames[i]; + let resultFieldSchema = tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.fields[i]; + if (resultFieldName === null || resultFieldName === void 0 ? void 0 : resultFieldName.match(defaultFieldsRegexp_1.default)) { + continue; + } + let value = result[resultFieldName]; + if (typeof value !== "number" && !value) { + // parsedResults.push(result); + continue; + } + if (resultFieldSchema === null || resultFieldSchema === void 0 ? void 0 : resultFieldSchema.encrypted) { + if (value === null || value === void 0 ? void 0 : value.match(/./)) { + result[resultFieldName] = (0, decrypt_1.default)({ + encryptedString: value, + }); + } + } + } + parsedResults.push(result); + } + /** + * Declare variables + * + * @description Declare "results" variable + */ + return parsedResults; + } + catch ( /** @type {any} */error) { + console.log("ERROR in parseDbResults Function =>", error.message); + return unparsedResults; + } + }); +} diff --git a/dist/package-shared/functions/backend/serverError.d.ts b/dist/package-shared/functions/backend/serverError.d.ts new file mode 100644 index 0000000..f8f1951 --- /dev/null +++ b/dist/package-shared/functions/backend/serverError.d.ts @@ -0,0 +1,18 @@ +import { IncomingMessage } from "http"; +type Param = { + user?: { + id?: number | string; + first_name?: string; + last_name?: string; + email?: string; + } & any; + message: string; + component?: string; + noMail?: boolean; + req?: import("next").NextApiRequest & IncomingMessage; +}; +/** + * # Server Error + */ +export default function serverError({ user, message, component, noMail, req, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/serverError.js b/dist/package-shared/functions/backend/serverError.js new file mode 100644 index 0000000..2bc28a4 --- /dev/null +++ b/dist/package-shared/functions/backend/serverError.js @@ -0,0 +1,77 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = serverError; +const fs_1 = __importDefault(require("fs")); +/** + * # Server Error + */ +function serverError(_a) { + return __awaiter(this, arguments, void 0, function* ({ user, message, component, noMail, req, }) { + const date = new Date(); + const reqIp = (() => { + if (!req) + return null; + try { + const forwarded = req.headers["x-forwarded-for"]; + const realIp = req.headers["x-real-ip"]; + const cloudflareIp = req.headers["cf-connecting-ip"]; + // Convert forwarded IPs to string and get the first IP if multiple exist + const forwardedIp = Array.isArray(forwarded) + ? forwarded[0] + : forwarded === null || forwarded === void 0 ? void 0 : forwarded.split(",")[0]; + const clientIp = cloudflareIp || + forwardedIp || + realIp || + req.socket.remoteAddress; + if (!clientIp) + return null; + return String(clientIp); + } + catch (error) { + return null; + } + })(); + try { + let log = `🚀 SERVER ERROR ===========================\nError Message: ${message}\nComponent: ${component}`; + if ((user === null || user === void 0 ? void 0 : user.id) && (user === null || user === void 0 ? void 0 : user.first_name) && (user === null || user === void 0 ? void 0 : user.last_name) && (user === null || user === void 0 ? void 0 : user.email)) { + log += `\nUser Id: ${user === null || user === void 0 ? void 0 : user.id}\nUser Name: ${user === null || user === void 0 ? void 0 : user.first_name} ${user === null || user === void 0 ? void 0 : user.last_name}\nUser Email: ${user === null || user === void 0 ? void 0 : user.email}`; + } + if (req === null || req === void 0 ? void 0 : req.url) { + log += `\nURL: ${req.url}`; + } + if (req === null || req === void 0 ? void 0 : req.body) { + log += `\nRequest Body: ${JSON.stringify(req.body, null, 4)}`; + } + if (reqIp) { + log += `\nIP: ${reqIp}`; + } + log += `\nDate: ${date.toDateString()}`; + log += "\n========================================"; + if (!fs_1.default.existsSync(`./.tmp/error.log`)) { + fs_1.default.writeFileSync(`./.tmp/error.log`, "", "utf-8"); + } + const initialText = fs_1.default.readFileSync(`./.tmp/error.log`, "utf-8"); + fs_1.default.writeFileSync(`./.tmp/error.log`, log); + fs_1.default.appendFileSync(`./.tmp/error.log`, `\n\n\n\n\n${initialText}`); + } + catch ( /** @type {any} */error) { + console.log("Server Error Reporting Error:", error.message); + } + }); +} +//////////////////////////////////////// +//////////////////////////////////////// +//////////////////////////////////////// diff --git a/dist/package-shared/functions/backend/setUserSchemaData.d.ts b/dist/package-shared/functions/backend/setUserSchemaData.d.ts new file mode 100644 index 0000000..bc981aa --- /dev/null +++ b/dist/package-shared/functions/backend/setUserSchemaData.d.ts @@ -0,0 +1,16 @@ +import { DSQL_DatabaseSchemaType } from "../../types"; +type Param = { + userId: string | number; + schemaData: DSQL_DatabaseSchemaType[]; +}; +/** + * # Set User Schema Data + */ +export default function setUserSchemaData({ userId, schemaData, }: Param): boolean; +export {}; +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/functions/backend/setUserSchemaData.js b/dist/package-shared/functions/backend/setUserSchemaData.js new file mode 100644 index 0000000..fdc1e3d --- /dev/null +++ b/dist/package-shared/functions/backend/setUserSchemaData.js @@ -0,0 +1,32 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = setUserSchemaData; +const serverError_1 = __importDefault(require("./serverError")); +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +/** + * # Set User Schema Data + */ +function setUserSchemaData({ userId, schemaData, }) { + try { + const userSchemaFilePath = path_1.default.resolve(process.cwd(), `${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${userId}/main.json`); + fs_1.default.writeFileSync(userSchemaFilePath, JSON.stringify(schemaData), "utf8"); + return true; + } + catch (error) { + (0, serverError_1.default)({ + component: "/functions/backend/setUserSchemaData", + message: error.message, + }); + return false; + } +} +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/functions/backend/suSocketAuth.d.ts b/dist/package-shared/functions/backend/suSocketAuth.d.ts new file mode 100644 index 0000000..719ec0b --- /dev/null +++ b/dist/package-shared/functions/backend/suSocketAuth.d.ts @@ -0,0 +1,8 @@ +import { IncomingMessage } from "http"; +export default function (req: IncomingMessage): Promise<{ + email: string; + password: string; + authKey: string; + logged_in_status: boolean; + date: number; +} | null>; diff --git a/dist/package-shared/functions/backend/suSocketAuth.js b/dist/package-shared/functions/backend/suSocketAuth.js new file mode 100644 index 0000000..00b8001 --- /dev/null +++ b/dist/package-shared/functions/backend/suSocketAuth.js @@ -0,0 +1,47 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = default_1; +const parseCookies_1 = __importDefault(require("../../utils/backend/parseCookies")); +const decrypt_1 = __importDefault(require("../dsql/decrypt")); +const get_auth_cookie_names_1 = __importDefault(require("./cookies/get-auth-cookie-names")); +function default_1(req) { + return __awaiter(this, void 0, void 0, function* () { + const { keyCookieName, csrfCookieName } = (0, get_auth_cookie_names_1.default)(); + const suKeyName = `${keyCookieName}_su`; + const cookies = (0, parseCookies_1.default)({ request: req }); + if (!(cookies === null || cookies === void 0 ? void 0 : cookies[suKeyName])) { + return null; + } + /** ********************* Grab the payload */ + let userPayload = (0, decrypt_1.default)({ + encryptedString: cookies[suKeyName], + }); + /** ********************* Return if no payload */ + if (!userPayload) + return null; + /** ********************* Parse the payload */ + let userObject = JSON.parse(userPayload); + if (userObject.password !== process.env.DSQL_USER_KEY) + return null; + if (userObject.authKey !== process.env.DSQL_SPECIAL_KEY) + return null; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + /** ********************* return user object */ + return userObject; + }); +} diff --git a/dist/package-shared/functions/backend/updateUsersTableSchema.d.ts b/dist/package-shared/functions/backend/updateUsersTableSchema.d.ts new file mode 100644 index 0000000..896c89e --- /dev/null +++ b/dist/package-shared/functions/backend/updateUsersTableSchema.d.ts @@ -0,0 +1,13 @@ +type Param = { + userId: number | string; + database: string; + newFields?: string[]; + newPayload?: { + [s: string]: any; + }; +}; +/** + * # Add User Table to Database + */ +export default function updateUsersTableSchema({ userId, database, newFields, newPayload, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/updateUsersTableSchema.js b/dist/package-shared/functions/backend/updateUsersTableSchema.js new file mode 100644 index 0000000..3490d3f --- /dev/null +++ b/dist/package-shared/functions/backend/updateUsersTableSchema.js @@ -0,0 +1,64 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = updateUsersTableSchema; +const serverError_1 = __importDefault(require("./serverError")); +const grabUserSchemaData_1 = __importDefault(require("./grabUserSchemaData")); +const setUserSchemaData_1 = __importDefault(require("./setUserSchemaData")); +const createDbFromSchema_1 = __importDefault(require("../../shell/createDbFromSchema")); +const grabSchemaFieldsFromData_1 = __importDefault(require("./grabSchemaFieldsFromData")); +/** + * # Add User Table to Database + */ +function updateUsersTableSchema(_a) { + return __awaiter(this, arguments, void 0, function* ({ userId, database, newFields, newPayload, }) { + var _b, _c; + try { + const dbFullName = database; + const userSchemaData = (0, grabUserSchemaData_1.default)({ userId }); + if (!userSchemaData) + throw new Error("User schema data not found!"); + let targetDatabaseIndex = userSchemaData.findIndex((db) => db.dbFullName === database); + if (targetDatabaseIndex < 0) { + throw new Error("Couldn't Find Target Database!"); + } + let existingTableIndex = (_b = userSchemaData[targetDatabaseIndex]) === null || _b === void 0 ? void 0 : _b.tables.findIndex((table) => table.tableName === "users"); + const usersTable = userSchemaData[targetDatabaseIndex].tables[existingTableIndex]; + if (!((_c = usersTable === null || usersTable === void 0 ? void 0 : usersTable.fields) === null || _c === void 0 ? void 0 : _c[0])) + throw new Error("Users Table Not Found!"); + const additionalFields = (0, grabSchemaFieldsFromData_1.default)({ + fields: newFields, + data: newPayload, + }); + const spliceStartIndex = usersTable.fields.findIndex((field) => field.fieldName === "date_created"); + const finalSpliceStartIndex = spliceStartIndex >= 0 ? spliceStartIndex : 0; + usersTable.fields.splice(finalSpliceStartIndex, 0, ...additionalFields); + (0, setUserSchemaData_1.default)({ schemaData: userSchemaData, userId }); + const dbShellUpdate = yield (0, createDbFromSchema_1.default)({ + userId, + targetDatabase: dbFullName, + }); + return `Done!`; + } + catch (error) { + console.log(`addUsersTableToDb.js ERROR: ${error.message}`); + (0, serverError_1.default)({ + component: "addUsersTableToDb", + message: error.message, + user: { id: userId }, + }); + return error.message; + } + }); +} diff --git a/dist/package-shared/functions/backend/varDatabaseDbHandler.d.ts b/dist/package-shared/functions/backend/varDatabaseDbHandler.d.ts new file mode 100644 index 0000000..d1b7418 --- /dev/null +++ b/dist/package-shared/functions/backend/varDatabaseDbHandler.d.ts @@ -0,0 +1,12 @@ +type Param = { + queryString: string; + queryValuesArray?: any[]; + database?: string; + tableSchema?: import("../../types").DSQL_TableSchemaType; + useLocal?: boolean; +}; +/** + * # DB handler for specific database + */ +export default function varDatabaseDbHandler({ queryString, queryValuesArray, database, tableSchema, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/varDatabaseDbHandler.js b/dist/package-shared/functions/backend/varDatabaseDbHandler.js new file mode 100644 index 0000000..e3d123f --- /dev/null +++ b/dist/package-shared/functions/backend/varDatabaseDbHandler.js @@ -0,0 +1,108 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = varDatabaseDbHandler; +const parseDbResults_1 = __importDefault(require("./parseDbResults")); +const serverError_1 = __importDefault(require("./serverError")); +const DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/DB_HANDLER")); +const DSQL_USER_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/DSQL_USER_DB_HANDLER")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/LOCAL_DB_HANDLER")); +/** + * # DB handler for specific database + */ +function varDatabaseDbHandler(_a) { + return __awaiter(this, arguments, void 0, function* ({ queryString, queryValuesArray, database, tableSchema, useLocal, }) { + /** + * Declare variables + * + * @description Declare "results" variable + */ + const isMaster = useLocal + ? true + : (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/)) + ? true + : false; + /** @type {any} */ + const FINAL_DB_HANDLER = useLocal + ? LOCAL_DB_HANDLER_1.default + : isMaster + ? DB_HANDLER_1.default + : DSQL_USER_DB_HANDLER_1.default; + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + if (queryString && + queryValuesArray && + Array.isArray(queryValuesArray) && + queryValuesArray[0]) { + results = isMaster + ? yield FINAL_DB_HANDLER(queryString, queryValuesArray) + : yield FINAL_DB_HANDLER({ + paradigm: "Full Access", + database, + queryString, + queryValues: queryValuesArray, + }); + } + else { + results = isMaster + ? yield FINAL_DB_HANDLER(queryString) + : yield FINAL_DB_HANDLER({ + paradigm: "Full Access", + database, + queryString, + }); + } + } + catch (error) { + (0, serverError_1.default)({ + component: "varDatabaseDbHandler/lines-29-32", + message: error.message, + }); + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + if (results && tableSchema) { + try { + const unparsedResults = results; + const parsedResults = yield (0, parseDbResults_1.default)({ + unparsedResults: unparsedResults, + tableSchema: tableSchema, + }); + return parsedResults; + } + catch (error) { + console.log("\x1b[31mvarDatabaseDbHandler ERROR\x1b[0m =>", database, error); + (0, serverError_1.default)({ + component: "varDatabaseDbHandler/lines-52-53", + message: error.message, + }); + return null; + } + } + else if (results) { + return results; + } + else { + return null; + } + }); +} diff --git a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.d.ts b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.d.ts new file mode 100644 index 0000000..f39b5a7 --- /dev/null +++ b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.d.ts @@ -0,0 +1,13 @@ +type Param = { + queryString: string; + database: string; + queryValuesArray?: string[]; + tableSchema?: import("../../types").DSQL_TableSchemaType; + useLocal?: boolean; +}; +/** + * # Read Only Db Handler with Varaibles + * @returns + */ +export default function varReadOnlyDatabaseDbHandler({ queryString, database, queryValuesArray, tableSchema, useLocal, }: Param): Promise; +export {}; diff --git a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js new file mode 100644 index 0000000..0d452bc --- /dev/null +++ b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js @@ -0,0 +1,78 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = varReadOnlyDatabaseDbHandler; +const serverError_1 = __importDefault(require("./serverError")); +const parseDbResults_1 = __importDefault(require("./parseDbResults")); +const DSQL_USER_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/DSQL_USER_DB_HANDLER")); +const LOCAL_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/LOCAL_DB_HANDLER")); +/** + * # Read Only Db Handler with Varaibles + * @returns + */ +function varReadOnlyDatabaseDbHandler(_a) { + return __awaiter(this, arguments, void 0, function* ({ queryString, database, queryValuesArray, tableSchema, useLocal, }) { + /** + * Declare variables + * + * @description Declare "results" variable + */ + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + results = useLocal + ? yield (0, LOCAL_DB_HANDLER_1.default)(queryString, queryValuesArray) + : yield (0, DSQL_USER_DB_HANDLER_1.default)({ + paradigm: "Read Only", + database, + queryString, + queryValues: queryValuesArray, + }); + //////////////////////////////////////// + } + catch ( /** @type {any} */error) { + //////////////////////////////////////// + (0, serverError_1.default)({ + component: "varReadOnlyDatabaseDbHandler", + message: error.message, + noMail: true, + }); + /** + * Return error + */ + return error.message; + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + if (results) { + const unparsedResults = results; + const parsedResults = yield (0, parseDbResults_1.default)({ + unparsedResults: unparsedResults, + tableSchema: tableSchema, + }); + return parsedResults; + } + else { + return null; + } + }); +} diff --git a/dist/package-shared/functions/dsql/decrypt.d.ts b/dist/package-shared/functions/dsql/decrypt.d.ts new file mode 100644 index 0000000..eb8b2f5 --- /dev/null +++ b/dist/package-shared/functions/dsql/decrypt.d.ts @@ -0,0 +1,10 @@ +type Param = { + encryptedString: string; + encryptionKey?: string; + encryptionSalt?: string; +}; +/** + * # Decrypt Function + */ +export default function decrypt({ encryptedString, encryptionKey, encryptionSalt, }: Param): string; +export {}; diff --git a/dist/package-shared/functions/dsql/decrypt.js b/dist/package-shared/functions/dsql/decrypt.js new file mode 100644 index 0000000..0297c7e --- /dev/null +++ b/dist/package-shared/functions/dsql/decrypt.js @@ -0,0 +1,41 @@ +"use strict"; +// @ts-check +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = decrypt; +const crypto_1 = require("crypto"); +const buffer_1 = require("buffer"); +/** + * # Decrypt Function + */ +function decrypt({ encryptedString, encryptionKey, encryptionSalt, }) { + if (!(encryptedString === null || encryptedString === void 0 ? void 0 : encryptedString.match(/./))) { + console.log("Encrypted string is invalid"); + return encryptedString; + } + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; + const finalKeyLen = process.env.DSQL_ENCRYPTION_KEY_LENGTH + ? Number(process.env.DSQL_ENCRYPTION_KEY_LENGTH) + : 24; + if (!(finalEncryptionKey === null || finalEncryptionKey === void 0 ? void 0 : finalEncryptionKey.match(/.{8,}/))) { + console.log("Decrption key is invalid"); + return encryptedString; + } + if (!(finalEncryptionSalt === null || finalEncryptionSalt === void 0 ? void 0 : finalEncryptionSalt.match(/.{8,}/))) { + console.log("Decrption salt is invalid"); + return encryptedString; + } + const algorithm = "aes-192-cbc"; + let key = (0, crypto_1.scryptSync)(finalEncryptionKey, finalEncryptionSalt, finalKeyLen); + let iv = buffer_1.Buffer.alloc(16, 0); + const decipher = (0, crypto_1.createDecipheriv)(algorithm, key, iv); + try { + let decrypted = decipher.update(encryptedString, "hex", "utf8"); + decrypted += decipher.final("utf8"); + return decrypted; + } + catch (error) { + console.log("Error in decrypting =>", error.message); + return encryptedString; + } +} diff --git a/dist/package-shared/functions/dsql/encrypt.d.ts b/dist/package-shared/functions/dsql/encrypt.d.ts new file mode 100644 index 0000000..e5aab16 --- /dev/null +++ b/dist/package-shared/functions/dsql/encrypt.d.ts @@ -0,0 +1,10 @@ +type Param = { + data: string; + encryptionKey?: string; + encryptionSalt?: string; +}; +/** + * # Encrypt String + */ +export default function encrypt({ data, encryptionKey, encryptionSalt, }: Param): string | null; +export {}; diff --git a/dist/package-shared/functions/dsql/encrypt.js b/dist/package-shared/functions/dsql/encrypt.js new file mode 100644 index 0000000..ac1f6f7 --- /dev/null +++ b/dist/package-shared/functions/dsql/encrypt.js @@ -0,0 +1,44 @@ +"use strict"; +// @ts-check +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = encrypt; +const crypto_1 = require("crypto"); +const buffer_1 = require("buffer"); +/** + * # Encrypt String + */ +function encrypt({ data, encryptionKey, encryptionSalt, }) { + if (!(data === null || data === void 0 ? void 0 : data.match(/./))) { + console.log("Encryption string is invalid"); + return data; + } + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; + const finalKeyLen = process.env.DSQL_ENCRYPTION_KEY_LENGTH + ? Number(process.env.DSQL_ENCRYPTION_KEY_LENGTH) + : 24; + if (!(finalEncryptionKey === null || finalEncryptionKey === void 0 ? void 0 : finalEncryptionKey.match(/.{8,}/))) { + console.log("Encryption key is invalid"); + return data; + } + if (!(finalEncryptionSalt === null || finalEncryptionSalt === void 0 ? void 0 : finalEncryptionSalt.match(/.{8,}/))) { + console.log("Encryption salt is invalid"); + return data; + } + const algorithm = "aes-192-cbc"; + const password = finalEncryptionKey; + let key = (0, crypto_1.scryptSync)(password, finalEncryptionSalt, finalKeyLen); + let iv = buffer_1.Buffer.alloc(16, 0); + // @ts-ignore + const cipher = (0, crypto_1.createCipheriv)(algorithm, key, iv); + try { + let encrypted = cipher.update(data, "utf8", "hex"); + encrypted += cipher.final("hex"); + return encrypted; + } + catch ( /** @type {*} */error) { + console.log("Error in encrypting =>", error.message); + return data; + } +} +module.exports = encrypt; diff --git a/dist/package-shared/functions/dsql/hashPassword.d.ts b/dist/package-shared/functions/dsql/hashPassword.d.ts new file mode 100644 index 0000000..359ae68 --- /dev/null +++ b/dist/package-shared/functions/dsql/hashPassword.d.ts @@ -0,0 +1,9 @@ +type Param = { + password: string; + encryptionKey?: string; +}; +/** + * # Hash password Function + */ +export default function hashPassword({ password, encryptionKey, }: Param): string; +export {}; diff --git a/dist/package-shared/functions/dsql/hashPassword.js b/dist/package-shared/functions/dsql/hashPassword.js new file mode 100644 index 0000000..2331d39 --- /dev/null +++ b/dist/package-shared/functions/dsql/hashPassword.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = hashPassword; +const crypto_1 = require("crypto"); +/** + * # Hash password Function + */ +function hashPassword({ password, encryptionKey, }) { + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + if (!(finalEncryptionKey === null || finalEncryptionKey === void 0 ? void 0 : finalEncryptionKey.match(/.{8,}/))) { + throw new Error("Encryption key is invalid"); + } + const hmac = (0, crypto_1.createHmac)("sha512", finalEncryptionKey); + hmac.update(password); + let hashed = hmac.digest("base64"); + return hashed; +} diff --git a/dist/package-shared/functions/dsql/sql/sql-delete-generator.d.ts b/dist/package-shared/functions/dsql/sql/sql-delete-generator.d.ts new file mode 100644 index 0000000..4bfca3e --- /dev/null +++ b/dist/package-shared/functions/dsql/sql/sql-delete-generator.d.ts @@ -0,0 +1,12 @@ +interface SQLDeleteGenReturn { + query: string; + values: string[]; +} +/** + * # SQL Delete Generator + */ +export default function sqlDeleteGenerator({ tableName, data, }: { + data: any; + tableName: string; +}): SQLDeleteGenReturn | undefined; +export {}; diff --git a/dist/package-shared/functions/dsql/sql/sql-delete-generator.js b/dist/package-shared/functions/dsql/sql/sql-delete-generator.js new file mode 100644 index 0000000..2e4edbe --- /dev/null +++ b/dist/package-shared/functions/dsql/sql/sql-delete-generator.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = sqlDeleteGenerator; +/** + * # SQL Delete Generator + */ +function sqlDeleteGenerator({ tableName, data, }) { + try { + let queryStr = `DELETE FROM ${tableName}`; + let deleteBatch = []; + let queryArr = []; + Object.keys(data).forEach((ky) => { + deleteBatch.push(`${ky}=?`); + queryArr.push(data[ky]); + }); + queryStr += ` WHERE ${deleteBatch.join(" AND ")}`; + return { + query: queryStr, + values: queryArr, + }; + } + catch ( /** @type {any} */error) { + console.log(`SQL delete gen ERROR: ${error.message}`); + return undefined; + } +} diff --git a/dist/package-shared/functions/dsql/sql/sql-generator.d.ts b/dist/package-shared/functions/dsql/sql/sql-generator.d.ts new file mode 100644 index 0000000..b4c8a39 --- /dev/null +++ b/dist/package-shared/functions/dsql/sql/sql-generator.d.ts @@ -0,0 +1,15 @@ +import { ServerQueryParam } from "../../../types"; +type Param = { + genObject?: ServerQueryParam; + tableName: string; +}; +type Return = { + string: string; + values: string[]; +} | undefined; +/** + * # SQL Query Generator + * @description Generates an SQL Query for node module `mysql` or `serverless-mysql` + */ +export default function sqlGenerator({ tableName, genObject }: Param): Return; +export {}; diff --git a/dist/package-shared/functions/dsql/sql/sql-generator.js b/dist/package-shared/functions/dsql/sql/sql-generator.js new file mode 100644 index 0000000..dfbe7e6 --- /dev/null +++ b/dist/package-shared/functions/dsql/sql/sql-generator.js @@ -0,0 +1,211 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = sqlGenerator; +/** + * # SQL Query Generator + * @description Generates an SQL Query for node module `mysql` or `serverless-mysql` + */ +function sqlGenerator({ tableName, genObject }) { + if (!genObject) + return undefined; + const finalQuery = genObject.query ? genObject.query : undefined; + const queryKeys = finalQuery ? Object.keys(finalQuery) : undefined; + const sqlSearhValues = []; + /** + * # Generate Query + */ + function genSqlSrchStr({ queryObj, join, field, }) { + const finalFieldName = (() => { + if (queryObj === null || queryObj === void 0 ? void 0 : queryObj.tableName) { + return `${queryObj.tableName}.${field}`; + } + if (join) { + return `${tableName}.${field}`; + } + return field; + })(); + let str = `${finalFieldName}=?`; + if (typeof queryObj.value == "string" || + typeof queryObj.value == "number") { + const valueParsed = String(queryObj.value); + if (queryObj.equality == "LIKE") { + str = `LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`; + } + else if (queryObj.equality == "NOT EQUAL") { + str = `${finalFieldName} != ?`; + sqlSearhValues.push(valueParsed); + } + else { + sqlSearhValues.push(valueParsed); + } + } + else if (Array.isArray(queryObj.value)) { + /** @type {string[]} */ + const strArray = []; + queryObj.value.forEach((val) => { + const valueParsed = val; + if (queryObj.equality == "LIKE") { + strArray.push(`LOWER(${finalFieldName}) LIKE LOWER('%${valueParsed}%')`); + } + else if (queryObj.equality == "NOT EQUAL") { + strArray.push(`${finalFieldName} != ?`); + sqlSearhValues.push(valueParsed); + } + else { + strArray.push(`${finalFieldName} = ?`); + sqlSearhValues.push(valueParsed); + } + }); + str = "(" + strArray.join(` ${queryObj.operator || "AND"} `) + ")"; + } + return str; + } + const sqlSearhString = queryKeys === null || queryKeys === void 0 ? void 0 : queryKeys.map((field) => { + const queryObj = + /** @type {import("../../../types").ServerQueryQueryObject} */ finalQuery === null || finalQuery === void 0 ? void 0 : finalQuery[field]; + if (!queryObj) + return; + if (queryObj.__query) { + const subQueryGroup = + /** @type {import("../../../types").ServerQueryQueryObject}} */ queryObj.__query; + const subSearchKeys = Object.keys(subQueryGroup); + const subSearchString = subSearchKeys.map((_field) => { + const newSubQueryObj = subQueryGroup === null || subQueryGroup === void 0 ? void 0 : subQueryGroup[_field]; + return genSqlSrchStr({ + queryObj: newSubQueryObj, + field: _field, + join: genObject.join, + }); + }); + console.log("queryObj.operator", queryObj.operator); + return ("(" + + subSearchString.join(` ${queryObj.operator || "AND"} `) + + ")"); + } + return genSqlSrchStr({ queryObj, field, join: genObject.join }); + }); + function generateJoinStr( + /** @type {import("../../../types").ServerQueryParamsJoinMatchObject} */ mtch, + /** @type {import("../../../types").ServerQueryParamsJoin} */ join) { + return `${typeof mtch.source == "object" ? mtch.source.tableName : tableName}.${typeof mtch.source == "object" ? mtch.source.fieldName : mtch.source}=${(() => { + if (mtch.targetLiteral) { + return `'${mtch.targetLiteral}'`; + } + if (join.alias) { + return `${typeof mtch.target == "object" + ? mtch.target.tableName + : join.alias}.${typeof mtch.target == "object" + ? mtch.target.fieldName + : mtch.target}`; + } + return `${typeof mtch.target == "object" + ? mtch.target.tableName + : join.tableName}.${typeof mtch.target == "object" + ? mtch.target.fieldName + : mtch.target}`; + })()}`; + } + let queryString = (() => { + var _a, _b, _c; + let str = "SELECT"; + if ((_a = genObject.selectFields) === null || _a === void 0 ? void 0 : _a[0]) { + if (genObject.join) { + str += ` ${(_b = genObject.selectFields) === null || _b === void 0 ? void 0 : _b.map((fld) => `${tableName}.${fld}`).join(",")}`; + } + else { + str += ` ${(_c = genObject.selectFields) === null || _c === void 0 ? void 0 : _c.join(",")}`; + } + } + else { + if (genObject.join) { + str += ` ${tableName}.*`; + } + else { + str += " *"; + } + } + if (genObject.join) { + /** @type {string[]} */ + const existingJoinTableNames = [tableName]; + str += + "," + + genObject.join + .map((joinObj) => { + const joinTableName = joinObj.alias + ? joinObj.alias + : joinObj.tableName; + if (existingJoinTableNames.includes(joinTableName)) + return null; + existingJoinTableNames.push(joinTableName); + if (joinObj.selectFields) { + return joinObj.selectFields + .map((selectField) => { + if (typeof selectField == "string") { + return `${joinTableName}.${selectField}`; + } + else if (typeof selectField == "object") { + let aliasSelectField = selectField.count + ? `COUNT(${joinTableName}.${selectField.field})` + : `${joinTableName}.${selectField.field}`; + if (selectField.alias) + aliasSelectField += ` AS ${selectField.alias}`; + return aliasSelectField; + } + }) + .join(","); + } + else { + return `${joinTableName}.*`; + } + }) + .filter((_) => Boolean(_)) + .join(","); + } + str += ` FROM ${tableName}`; + if (genObject.join) { + str += + " " + + genObject.join + .map((join) => { + return (join.joinType + + " " + + (join.alias + ? join.tableName + " " + join.alias + : join.tableName) + + " ON " + + (() => { + if (Array.isArray(join.match)) { + return ("(" + + join.match + .map((mtch) => generateJoinStr(mtch, join)) + .join(join.operator + ? ` ${join.operator} ` + : " AND ") + + ")"); + } + else if (typeof join.match == "object") { + return generateJoinStr(join.match, join); + } + })()); + }) + .join(" "); + } + return str; + })(); + if ((sqlSearhString === null || sqlSearhString === void 0 ? void 0 : sqlSearhString[0]) && sqlSearhString.find((str) => str)) { + const stringOperator = (genObject === null || genObject === void 0 ? void 0 : genObject.searchOperator) || "AND"; + queryString += ` WHERE ${sqlSearhString.join(` ${stringOperator} `)} `; + } + if (genObject.order) + queryString += ` ORDER BY ${genObject.join + ? `${tableName}.${genObject.order.field}` + : genObject.order.field} ${genObject.order.strategy}`; + if (genObject.limit) + queryString += ` LIMIT ${genObject.limit}`; + if (genObject.offset) + queryString += ` OFFSET ${genObject.offset}`; + return { + string: queryString, + values: sqlSearhValues, + }; +} diff --git a/dist/package-shared/functions/dsql/sql/sql-insert-generator.d.ts b/dist/package-shared/functions/dsql/sql/sql-insert-generator.d.ts new file mode 100644 index 0000000..984a376 --- /dev/null +++ b/dist/package-shared/functions/dsql/sql/sql-insert-generator.d.ts @@ -0,0 +1,12 @@ +interface SQLInsertGenReturn { + query: string; + values: string[]; +} +/** + * # SQL Insert Generator + */ +export default function sqlInsertGenerator({ tableName, data, }: { + data: any[]; + tableName: string; +}): SQLInsertGenReturn | undefined; +export {}; diff --git a/dist/package-shared/functions/dsql/sql/sql-insert-generator.js b/dist/package-shared/functions/dsql/sql/sql-insert-generator.js new file mode 100644 index 0000000..1dacf48 --- /dev/null +++ b/dist/package-shared/functions/dsql/sql/sql-insert-generator.js @@ -0,0 +1,50 @@ +"use strict"; +// @ts-check +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = sqlInsertGenerator; +/** + * # SQL Insert Generator + */ +function sqlInsertGenerator({ tableName, data, }) { + try { + if (Array.isArray(data) && (data === null || data === void 0 ? void 0 : data[0])) { + /** @type {string[]} */ + let insertKeys = []; + data.forEach((dt) => { + const kys = Object.keys(dt); + kys.forEach((ky) => { + if (!insertKeys.includes(ky)) { + insertKeys.push(ky); + } + }); + }); + /** @type {string[]} */ + let queryBatches = []; + /** @type {string[]} */ + let queryValues = []; + data.forEach((item) => { + queryBatches.push(`(${insertKeys + .map((ky) => { + var _a, _b; + queryValues.push(((_b = (_a = item[ky]) === null || _a === void 0 ? void 0 : _a.toString()) === null || _b === void 0 ? void 0 : _b.match(/./)) + ? item[ky] + : null); + return "?"; + }) + .join(",")})`); + }); + let query = `INSERT INTO ${tableName} (${insertKeys.join(",")}) VALUES ${queryBatches.join(",")}`; + return { + query: query, + values: queryValues, + }; + } + else { + return undefined; + } + } + catch ( /** @type {any} */error) { + console.log(`SQL insert gen ERROR: ${error.message}`); + return undefined; + } +} diff --git a/dist/package-shared/shell/checkDb.d.ts b/dist/package-shared/shell/checkDb.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/checkDb.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/checkDb.js b/dist/package-shared/shell/checkDb.js new file mode 100644 index 0000000..8b72e45 --- /dev/null +++ b/dist/package-shared/shell/checkDb.js @@ -0,0 +1,56 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../utils/backend/grabDbSSL")); +const connection = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # Main DB Handler Function + * @async + * + * @param {object} params + * @param {string} params.query + * @param {string[] | object} [params.values] + * @param {string} [params.database] + * + * @returns {Promise} + */ +(() => __awaiter(void 0, void 0, void 0, function* () { + /** + * Switch Database + * + * @description If a database is provided, switch to it + */ + try { + const result = yield connection.query("SELECT id,first_name,last_name FROM users LIMIT 3"); + console.log("Connection Query Success =>", result); + } + catch (error) { + console.log("Connection query ERROR =>", error.message); + } + finally { + connection.end(); + process.exit(); + } +}))(); diff --git a/dist/package-shared/shell/createDbFromSchema.d.ts b/dist/package-shared/shell/createDbFromSchema.d.ts new file mode 100644 index 0000000..d946c66 --- /dev/null +++ b/dist/package-shared/shell/createDbFromSchema.d.ts @@ -0,0 +1,10 @@ +type Param = { + userId?: number | string | null; + targetDatabase?: string; + dbSchemaData?: import("../types").DSQL_DatabaseSchemaType[]; +}; +/** + * # Create database from Schema Function + */ +export default function createDbFromSchema({ userId, targetDatabase, dbSchemaData, }: Param): Promise; +export {}; diff --git a/dist/package-shared/shell/createDbFromSchema.js b/dist/package-shared/shell/createDbFromSchema.js new file mode 100644 index 0000000..2afe3b5 --- /dev/null +++ b/dist/package-shared/shell/createDbFromSchema.js @@ -0,0 +1,245 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = createDbFromSchema; +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +require("dotenv").config({ path: "./../.env" }); +const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler")); +const varDatabaseDbHandler_1 = __importDefault(require("./utils/varDatabaseDbHandler")); +const createTable_1 = __importDefault(require("./utils/createTable")); +const updateTable_1 = __importDefault(require("./utils/updateTable")); +const dbHandler_1 = __importDefault(require("./utils/dbHandler")); +const ejson_1 = __importDefault(require("../utils/ejson")); +const execFlag = process.argv.find((arg) => arg === "--exec"); +/** + * # Create database from Schema Function + */ +function createDbFromSchema(_a) { + return __awaiter(this, arguments, void 0, function* ({ userId, targetDatabase, dbSchemaData, }) { + var _b, _c; + const schemaPath = userId + ? path_1.default.join(String(process.env.DSQL_USER_DB_SCHEMA_PATH), `/user-${userId}/main.json`) + : path_1.default.resolve(__dirname, "../../jsonData/dbSchemas/main.json"); + const dbSchema = dbSchemaData || + ejson_1.default.parse(fs_1.default.readFileSync(schemaPath, "utf8")); + if (!dbSchema) { + console.log("Schema Not Found!"); + return; + } + // await createDatabasesFromSchema(dbSchema); + for (let i = 0; i < dbSchema.length; i++) { + /** @type {import("../types").DSQL_DatabaseSchemaType} */ + const database = dbSchema[i]; + const { dbFullName, tables, dbName, dbSlug, childrenDatabases } = database; + if (targetDatabase && dbFullName != targetDatabase) { + continue; + } + /** @type {any} */ + const dbCheck = yield (0, noDatabaseDbHandler_1.default)(`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`); + if (dbCheck && ((_b = dbCheck[0]) === null || _b === void 0 ? void 0 : _b.dbFullName)) { + // Database Exists + } + else { + const newDatabase = yield (0, noDatabaseDbHandler_1.default)(`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`); + } + /** + * Select all tables + * @type {any} + * @description Select All tables in target database + */ + const allTables = yield (0, noDatabaseDbHandler_1.default)(`SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`); + // let tableDropped; + for (let tb = 0; tb < allTables.length; tb++) { + const { TABLE_NAME } = allTables[tb]; + /** + * @description Check if TABLE_NAME is part of the tables contained + * in the user schema JSON. If it's not, the table is either deleted + * or the table name has been recently changed + */ + if (!tables.filter((_table) => _table.tableName === TABLE_NAME)[0]) { + const oldTableFilteredArray = tables.filter((_table) => _table.tableNameOld && + _table.tableNameOld === TABLE_NAME); + /** + * @description Check if this table has been recently renamed. Rename + * table id true. Drop table if false + */ + if (oldTableFilteredArray && oldTableFilteredArray[0]) { + console.log("Renaming Table"); + yield (0, varDatabaseDbHandler_1.default)({ + queryString: `RENAME TABLE \`${oldTableFilteredArray[0].tableNameOld}\` TO \`${oldTableFilteredArray[0].tableName}\``, + database: dbFullName, + }); + } + else { + console.log(`Dropping Table from ${dbFullName}`); + yield (0, varDatabaseDbHandler_1.default)({ + queryString: `DROP TABLE \`${TABLE_NAME}\``, + database: dbFullName, + }); + const deleteTableEntry = yield (0, dbHandler_1.default)({ + query: `DELETE FROM user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`, + values: [userId, dbSlug, TABLE_NAME], + database: "datasquirel", + }); + } + } + } + const recordedDbEntryArray = userId + ? yield (0, varDatabaseDbHandler_1.default)({ + database: "datasquirel", + queryString: `SELECT * FROM user_databases WHERE db_full_name = ?`, + queryValuesArray: [dbFullName], + }) + : undefined; + const recordedDbEntry = recordedDbEntryArray === null || recordedDbEntryArray === void 0 ? void 0 : recordedDbEntryArray[0]; + /** + * @description Iterate through each table and perform table actions + */ + for (let t = 0; t < tables.length; t++) { + const table = tables[t]; + const { tableName, fields, indexes } = table; + /** + * @description Check if table exists + * @type {any} + */ + const tableCheck = yield (0, varDatabaseDbHandler_1.default)({ + queryString: ` + SELECT EXISTS ( + SELECT + TABLE_NAME + FROM + information_schema.TABLES + WHERE + TABLE_SCHEMA = ? AND + TABLE_NAME = ? + ) AS tableExists`, + queryValuesArray: [dbFullName, table.tableName], + database: dbFullName, + }); + //////////////////////////////////////// + if (tableCheck && ((_c = tableCheck[0]) === null || _c === void 0 ? void 0 : _c.tableExists) > 0) { + /** + * @description Update table if table exists + */ + const updateExistingTable = yield (0, updateTable_1.default)({ + dbFullName: dbFullName, + tableName: tableName, + tableNameFull: table.tableFullName, + tableInfoArray: fields, + userId, + dbSchema, + tableIndexes: indexes, + tableIndex: t, + childDb: database.childDatabase || undefined, + recordedDbEntry, + tableSchema: table, + }); + if (table.childrenTables && table.childrenTables[0]) { + for (let ch = 0; ch < table.childrenTables.length; ch++) { + const childTable = table.childrenTables[ch]; + const updateExistingChildTable = yield (0, updateTable_1.default)({ + dbFullName: childTable.dbNameFull, + tableName: childTable.tableName, + tableNameFull: childTable.tableNameFull, + tableInfoArray: fields, + userId, + dbSchema, + tableIndexes: indexes, + clone: true, + childDb: database.childDatabase || undefined, + recordedDbEntry, + tableSchema: table, + }); + } + } + //////////////////////////////////////// + } + else { + //////////////////////////////////////// + /** + * @description Create new Table if table doesnt exist + */ + const createNewTable = yield (0, createTable_1.default)({ + tableName: tableName, + tableInfoArray: fields, + dbFullName: dbFullName, + dbSchema, + tableSchema: table, + recordedDbEntry, + }); + if (indexes && indexes[0]) { + /** + * Handle DATASQUIREL Table Indexes + * =================================================== + * @description Iterate through each datasquirel schema + * table index(if available), and perform operations + */ + if (indexes && indexes[0]) { + for (let g = 0; g < indexes.length; g++) { + const { indexType, indexName, indexTableFields, alias, } = indexes[g]; + if (!(alias === null || alias === void 0 ? void 0 : alias.match(/./))) + continue; + /** + * @description Check for existing Index in MYSQL db + */ + try { + /** + * @type {import("../types").DSQL_MYSQL_SHOW_INDEXES_Type[]} + * @description All indexes from MYSQL db + */ // @ts-ignore + const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SHOW INDEXES FROM \`${tableName}\``, + database: dbFullName, + }); + const existingKeyInDb = allExistingIndexes.filter((indexObject) => indexObject.Key_name === alias); + if (!existingKeyInDb[0]) + throw new Error("This Index Does not Exist"); + } + catch (error) { + /** + * @description Create new index if determined that it + * doesn't exist in MYSQL db + */ + yield (0, varDatabaseDbHandler_1.default)({ + queryString: `CREATE${(indexType === null || indexType === void 0 ? void 0 : indexType.match(/fullText/i)) + ? " FULLTEXT" + : ""} INDEX \`${alias}\` ON ${tableName}(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, + database: dbFullName, + }); + } + } + } + } + } + } + /** + * @description Check all children databases + */ + if (childrenDatabases === null || childrenDatabases === void 0 ? void 0 : childrenDatabases[0]) { + for (let ch = 0; ch < childrenDatabases.length; ch++) { + const childDb = childrenDatabases[ch]; + const { dbFullName } = childDb; + yield createDbFromSchema({ + userId, + targetDatabase: dbFullName, + }); + } + } + } + }); +} +if (execFlag) { + createDbFromSchema({}); +} diff --git a/dist/package-shared/shell/deploy.d.ts b/dist/package-shared/shell/deploy.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/deploy.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/deploy.js b/dist/package-shared/shell/deploy.js new file mode 100644 index 0000000..2abfbc7 --- /dev/null +++ b/dist/package-shared/shell/deploy.js @@ -0,0 +1,15 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +function deploy() { + return __awaiter(this, void 0, void 0, function* () { }); +} +deploy(); diff --git a/dist/package-shared/shell/encodingUpdate.d.ts b/dist/package-shared/shell/encodingUpdate.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/encodingUpdate.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/encodingUpdate.js b/dist/package-shared/shell/encodingUpdate.js new file mode 100644 index 0000000..cadf5e0 --- /dev/null +++ b/dist/package-shared/shell/encodingUpdate.js @@ -0,0 +1,49 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const varDatabaseDbHandler_1 = __importDefault(require("../functions/backend/varDatabaseDbHandler")); +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * Grab Schema + * + * @description Grab Schema + */ +(0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`, + database: "datasquirel", +}).then((tables) => __awaiter(void 0, void 0, void 0, function* () { + for (let i = 0; i < tables.length; i++) { + const table = tables[i]; + const { id, user_id, db_id, db_full_name, table_name, table_slug, table_description, } = table; + const tableInfo = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, + database: db_full_name, + }); + const updateDbCharset = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`, + database: db_full_name, + }); + const updateEncoding = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER TABLE \`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`, + database: db_full_name, + }); + } + process.exit(); +})); diff --git a/dist/package-shared/shell/functions/jsonToBase64.d.ts b/dist/package-shared/shell/functions/jsonToBase64.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/functions/jsonToBase64.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/functions/jsonToBase64.js b/dist/package-shared/shell/functions/jsonToBase64.js new file mode 100644 index 0000000..c44ae99 --- /dev/null +++ b/dist/package-shared/shell/functions/jsonToBase64.js @@ -0,0 +1,10 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const jsonFile = path_1.default.resolve(__dirname, "../../jsonData/userPriviledges.json"); +const base64File = Buffer.from(fs_1.default.readFileSync(jsonFile, "utf8")).toString("base64"); +console.log(base64File); diff --git a/dist/package-shared/shell/grantFullPriviledges.d.ts b/dist/package-shared/shell/grantFullPriviledges.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/grantFullPriviledges.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/grantFullPriviledges.js b/dist/package-shared/shell/grantFullPriviledges.js new file mode 100644 index 0000000..91e0c5a --- /dev/null +++ b/dist/package-shared/shell/grantFullPriviledges.js @@ -0,0 +1,52 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const serverError_1 = __importDefault(require("../functions/backend/serverError")); +const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler")); +/** + * # Create Database From Schema + */ +function grantFullPrivileges(_a) { + return __awaiter(this, arguments, void 0, function* ({ userId }) { + /** + * Grab Schema + * + * @description Grab Schema + */ + try { + const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; + const allDatabases = yield (0, noDatabaseDbHandler_1.default)(`SHOW DATABASES`); + const datasquirelUserDatabases = allDatabases.filter((/** @type {any} */ database) => database.Database.match(/datasquirel_user_/)); + for (let i = 0; i < datasquirelUserDatabases.length; i++) { + const datasquirelUserDatabase = datasquirelUserDatabases[i]; + const { Database } = datasquirelUserDatabase; + const grantDbPriviledges = yield (0, noDatabaseDbHandler_1.default)(`GRANT ALL PRIVILEGES ON ${Database}.* TO '${process.env.DSQL_DB_FULL_ACCESS_USERNAME}'@'%' WITH GRANT OPTION`); + const grantRead = yield (0, noDatabaseDbHandler_1.default)(`GRANT SELECT ON ${Database}.* TO '${process.env.DSQL_DB_READ_ONLY_USERNAME}'@'%'`); + } + const flushPriviledged = yield (0, noDatabaseDbHandler_1.default)(`FLUSH PRIVILEGES`); + } + catch ( /** @type {any} */error) { + (0, serverError_1.default)({ + component: "shell/grantDbPriviledges/main-catch-error", + message: error.message, + user: { id: userId }, + }); + } + process.exit(); + }); +} +const userArg = process.argv[process.argv.indexOf("--user")]; +const externalUser = process.argv[process.argv.indexOf("--user") + 1]; +grantFullPrivileges({ userId: userArg ? externalUser : null }); diff --git a/dist/package-shared/shell/lessWatch.d.ts b/dist/package-shared/shell/lessWatch.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/lessWatch.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/lessWatch.js b/dist/package-shared/shell/lessWatch.js new file mode 100644 index 0000000..8f89a70 --- /dev/null +++ b/dist/package-shared/shell/lessWatch.js @@ -0,0 +1,54 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const child_process_1 = require("child_process"); +require("dotenv").config({ path: "./../.env" }); +const sourceFile = process.argv.indexOf("--src") >= 0 + ? process.argv[process.argv.indexOf("--src") + 1] + : null; +const destinationFile = process.argv.indexOf("--dst") >= 0 + ? process.argv[process.argv.indexOf("--dst") + 1] + : null; +console.log("Running Less compiler ..."); +const sourceFiles = sourceFile === null || sourceFile === void 0 ? void 0 : sourceFile.split(","); +const dstFiles = destinationFile === null || destinationFile === void 0 ? void 0 : destinationFile.split(","); +if (!sourceFiles || !dstFiles) { + throw new Error("No Source or Destination Files!"); +} +for (let i = 0; i < sourceFiles.length; i++) { + const srcFolder = sourceFiles[i]; + const dstFile = dstFiles[i]; + fs_1.default.watch(srcFolder, { recursive: true }, (evtType, prev) => { + if ((prev === null || prev === void 0 ? void 0 : prev.match(/\(/)) || (prev === null || prev === void 0 ? void 0 : prev.match(/\.js$/i))) { + return; + } + let finalSrcPath = `${srcFolder}/main.less`; + let finalDstPath = dstFile; + if (prev === null || prev === void 0 ? void 0 : prev.match(/\[/)) { + const paths = prev.split("/"); + const targetPathFull = paths[paths.length - 1]; + const targetPath = targetPathFull + .replace(/\[|\]/g, "") + .replace(/\.less/, ""); + const destinationFileParentFolder = dstFile.replace(/\/[^\/]+\.css$/, ""); + const targetDstFilePath = `${destinationFileParentFolder}/${targetPath}.css`; + finalSrcPath = `${srcFolder}/${targetPathFull}`; + finalDstPath = targetDstFilePath; + } + (0, child_process_1.exec)(`lessc ${finalSrcPath} ${(finalDstPath === null || finalDstPath === void 0 ? void 0 : finalDstPath.match(/\.css$/)) + ? finalDstPath + : finalDstPath.replace(/\/$/, "") + "/_main.css"}`, (error, stdout, stderr) => { + if (error) { + console.log("ERROR =>", error.message); + if (!(evtType === null || evtType === void 0 ? void 0 : evtType.match(/change/i)) && (prev === null || prev === void 0 ? void 0 : prev.match(/\[/))) { + fs_1.default.unlinkSync(finalDstPath); + } + return; + } + console.log("Less Compilation \x1b[32msuccessful\x1b[0m!"); + }); + }); +} diff --git a/dist/package-shared/shell/mariadb-users/handleGrants.d.ts b/dist/package-shared/shell/mariadb-users/handleGrants.d.ts new file mode 100644 index 0000000..be56951 --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/handleGrants.d.ts @@ -0,0 +1,16 @@ +export interface GrantType { + database: string; + table: string; + privileges: string[]; +} +type Param = { + username: string; + host: string; + grants: GrantType[]; + userId: string; +}; +/** + * # Handle Grants for Users + */ +export default function handleGrants({ username, host, grants, userId, }: Param): Promise; +export {}; diff --git a/dist/package-shared/shell/mariadb-users/handleGrants.js b/dist/package-shared/shell/mariadb-users/handleGrants.js new file mode 100644 index 0000000..fa359e6 --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/handleGrants.js @@ -0,0 +1,77 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = handleGrants; +const noDatabaseDbHandler_1 = __importDefault(require("../utils/noDatabaseDbHandler")); +/** + * # Handle Grants for Users + */ +function handleGrants(_a) { + return __awaiter(this, arguments, void 0, function* ({ username, host, grants, userId, }) { + var _b; + let success = false; + console.log(`Handling Grants for User =>`, username, host); + if (!username) { + console.log(`No username provided.`); + return success; + } + if (!host) { + console.log(`No Host provided. \x1b[35m\`--host\`\x1b[0m flag is required`); + return success; + } + if (!grants) { + console.log(`No grants Array provided.`); + return success; + } + try { + const existingUser = yield (0, noDatabaseDbHandler_1.default)(`SELECT * FROM mysql.user WHERE User = '${username}' AND Host = '${host}'`); + const isUserExisting = Boolean((_b = existingUser === null || existingUser === void 0 ? void 0 : existingUser[0]) === null || _b === void 0 ? void 0 : _b.User); + if (isUserExisting) { + const userGrants = yield (0, noDatabaseDbHandler_1.default)(`SHOW GRANTS FOR '${username}'@'${host}'`); + for (let i = 0; i < userGrants.length; i++) { + const grantObject = userGrants[i]; + const grant = grantObject === null || grantObject === void 0 ? void 0 : grantObject[Object.keys(grantObject)[0]]; + if (grant === null || grant === void 0 ? void 0 : grant.match(/GRANT .* PRIVILEGES ON .* TO/)) { + const revokeGrantText = grant + .replace(/GRANT/, "REVOKE") + .replace(/ TO /, " FROM "); + const revokePrivilege = yield (0, noDatabaseDbHandler_1.default)(revokeGrantText); + } + } + /** + * @type {GrantType[]} + */ + const grantsArray = grants; + for (let i = 0; i < grantsArray.length; i++) { + const grantObject = grantsArray[i]; + const { database, table, privileges } = grantObject; + const tableText = table == "*" ? "*" : `\`${table}\``; + const databaseText = database == "*" + ? `\`${process.env.DSQL_USER_DB_PREFIX}${userId}_%\`` + : `\`${database}\``; + const privilegesText = privileges.includes("ALL") + ? "ALL PRIVILEGES" + : privileges.join(", "); + const grantText = `GRANT ${privilegesText} ON ${databaseText}.${tableText} TO '${username}'@'${host}'`; + const grantPriviledge = yield (0, noDatabaseDbHandler_1.default)(grantText); + } + } + success = true; + } + catch ( /** @type {any} */error) { + console.log(`Error in adding SQL user =>`, error.message); + } + return success; + }); +} diff --git a/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.d.ts b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.d.ts new file mode 100644 index 0000000..509b2c9 --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.d.ts @@ -0,0 +1,11 @@ +type Param = { + userId?: number | string; + mariadbUserHost?: string; + mariadbUser?: string; + sqlUserID?: string | number; +}; +/** + * # Refresh Mariadb User Grants + */ +export default function refreshUsersAndGrants({ userId, mariadbUserHost, mariadbUser, sqlUserID, }: Param): Promise; +export {}; diff --git a/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.js b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.js new file mode 100644 index 0000000..e138f39 --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/refreshUsersAndGrants.js @@ -0,0 +1,195 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = refreshUsersAndGrants; +const path_1 = __importDefault(require("path")); +require("dotenv").config({ path: path_1.default.resolve(__dirname, "../../../.env") }); +const generate_password_1 = __importDefault(require("generate-password")); +const noDatabaseDbHandler_1 = __importDefault(require("../utils/noDatabaseDbHandler")); +const dbHandler_1 = __importDefault(require("../utils/dbHandler")); +const handleGrants_1 = __importDefault(require("./handleGrants")); +const encrypt_1 = __importDefault(require("../../functions/dsql/encrypt")); +const decrypt_1 = __importDefault(require("../../functions/dsql/decrypt")); +const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; +/** + * # Refresh Mariadb User Grants + */ +function refreshUsersAndGrants(_a) { + return __awaiter(this, arguments, void 0, function* ({ userId, mariadbUserHost, mariadbUser, sqlUserID, }) { + var _b, _c, _d, _e; + /** + * @description Users + * @type {*[] | null} + */ // @ts-ignore + const users = yield (0, dbHandler_1.default)({ + query: `SELECT * FROM users`, + }); + if (!(users === null || users === void 0 ? void 0 : users[0])) { + process.exit(); + } + for (let i = 0; i < users.length; i++) { + const user = users[i]; + if (!user) + continue; + if (userId && user.id != userId) + continue; + try { + const { mariadb_user, mariadb_host, mariadb_pass, id } = user; + const existingUser = yield (0, noDatabaseDbHandler_1.default)(`SELECT * FROM mysql.user WHERE User = '${mariadb_user}' AND Host = '${mariadb_host}'`); + const existingMariaDBUserArray = userId && sqlUserID + ? yield (0, dbHandler_1.default)({ + query: `SELECT * FROM mariadb_users WHERE id = ? AND user_id = ?`, + values: [sqlUserID, userId], + }) + : null; + /** + * @type {import("../../types").MYSQL_mariadb_users_table_def | undefined} + */ + const activeMariadbUserObject = Array.isArray(existingMariaDBUserArray) + ? existingMariaDBUserArray === null || existingMariaDBUserArray === void 0 ? void 0 : existingMariaDBUserArray[0] + : undefined; + const isPrimary = activeMariadbUserObject + ? ((_b = String(activeMariadbUserObject.primary)) === null || _b === void 0 ? void 0 : _b.match(/1/)) + ? true + : false + : false; + const isUserExisting = Boolean((_c = existingUser === null || existingUser === void 0 ? void 0 : existingUser[0]) === null || _c === void 0 ? void 0 : _c.User); + const isThisPrimaryHost = Boolean(mariadbUserHost == defaultMariadbUserHost); + const dslUsername = `dsql_user_${id}`; + const dsqlPassword = (activeMariadbUserObject === null || activeMariadbUserObject === void 0 ? void 0 : activeMariadbUserObject.password) + ? activeMariadbUserObject.password + : isUserExisting + ? mariadb_pass + : generate_password_1.default.generate({ + length: 16, + numbers: true, + symbols: true, + uppercase: true, + exclude: "*#.'`\"", + }); + const encryptedPassword = (activeMariadbUserObject === null || activeMariadbUserObject === void 0 ? void 0 : activeMariadbUserObject.password) + ? activeMariadbUserObject.password + : isUserExisting + ? mariadb_pass + : (0, encrypt_1.default)({ + data: dsqlPassword, + encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, + encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, + }); + if (!isUserExisting && + !sqlUserID && + !isPrimary && + !mariadbUserHost && + !mariadbUser) { + const createNewUser = yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${dslUsername}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${dsqlPassword}'`); + console.log("createNewUser", createNewUser); + console.log(`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully updated.`); + const updateUser = yield (0, dbHandler_1.default)({ + query: `UPDATE users SET mariadb_user = ?, mariadb_host = ?, mariadb_pass = ? WHERE id = ?`, + values: [ + dslUsername, + defaultMariadbUserHost, + encryptedPassword, + user.id, + ], + }); + } + if (isPrimary) { + const finalHost = mariadbUserHost + ? mariadbUserHost + : mariadb_host; + const updateUser = yield (0, dbHandler_1.default)({ + query: `UPDATE users SET mariadb_user = ?, mariadb_host = ?, mariadb_pass = ? WHERE id = ?`, + values: [ + dslUsername, + finalHost, + encryptedPassword, + user.id, + ], + }); + } + ////////////////////////////////////////////// + ////////////////////////////////////////////// + ////////////////////////////////////////////// + /** + * @description Handle mariadb_users table + */ + const existingMariadbPrimaryUser = yield (0, dbHandler_1.default)({ + query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` = 1`, + values: [id], + }); + const isPrimaryUserExisting = Boolean(Array.isArray(existingMariadbPrimaryUser) && + ((_d = existingMariadbPrimaryUser === null || existingMariadbPrimaryUser === void 0 ? void 0 : existingMariadbPrimaryUser[0]) === null || _d === void 0 ? void 0 : _d.user_id)); + const primaryUserGrants = [ + { + database: "*", + table: "*", + privileges: ["ALL"], + }, + ]; + if (!isPrimaryUserExisting) { + const insertPrimaryMariadbUser = yield (0, dbHandler_1.default)({ + query: `INSERT INTO mariadb_users (user_id, username, password, \`primary\`, grants) VALUES (?, ?, ?, ?, ?)`, + values: [ + id, + dslUsername, + encryptedPassword, + "1", + JSON.stringify(primaryUserGrants), + ], + }); + } + ////////////////////////////////////////////// + const existingExtraMariadbUsers = yield (0, dbHandler_1.default)({ + query: `SELECT * FROM mariadb_users WHERE user_id = ? AND \`primary\` != '1'`, + values: [id], + }); + if (Array.isArray(existingExtraMariadbUsers)) { + for (let i = 0; i < existingExtraMariadbUsers.length; i++) { + const mariadbUser = existingExtraMariadbUsers[i]; + const { user_id, username, host, password, primary, grants, } = mariadbUser; + if (mariadbUser && username != mariadbUser) + continue; + if (mariadbUserHost && host != mariadbUserHost) + continue; + const decrptedPassword = (0, decrypt_1.default)({ + encryptedString: password, + encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, + encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, + }); + const existingExtraMariadbUser = yield (0, noDatabaseDbHandler_1.default)(`SELECT * FROM mysql.user WHERE User = '${username}' AND Host = '${host}'`); + const isExtraMariadbUserExisting = Boolean((_e = existingExtraMariadbUser === null || existingExtraMariadbUser === void 0 ? void 0 : existingExtraMariadbUser[0]) === null || _e === void 0 ? void 0 : _e.User); + if (!isExtraMariadbUserExisting) { + yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${username}'@'${host}' IDENTIFIED BY '${decrptedPassword}'`); + } + const isGrantHandled = yield (0, handleGrants_1.default)({ + username, + host, + grants: grants && typeof grants == "string" + ? JSON.parse(grants) + : [], + userId: String(userId), + }); + if (!isGrantHandled) { + console.log(`Error in handling grants for user ${username}@${host}`); + } + } + } + } + catch (error) { + console.log(`Error in adding SQL user =>`, error.message); + } + } + }); +} diff --git a/dist/package-shared/shell/mariadb-users/resetSQLPasswords.d.ts b/dist/package-shared/shell/mariadb-users/resetSQLPasswords.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/resetSQLPasswords.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/mariadb-users/resetSQLPasswords.js b/dist/package-shared/shell/mariadb-users/resetSQLPasswords.js new file mode 100644 index 0000000..f9ae408 --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/resetSQLPasswords.js @@ -0,0 +1,70 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "../../.env" }); +const generate_password_1 = __importDefault(require("generate-password")); +const noDatabaseDbHandler_1 = __importDefault(require("../utils/noDatabaseDbHandler")); +const dbHandler_1 = __importDefault(require("../utils/dbHandler")); +const encrypt_1 = __importDefault(require("../../functions/dsql/encrypt")); +/** + * # Reset SQL Passwords + */ +function resetSQLCredentialsPasswords() { + return __awaiter(this, void 0, void 0, function* () { + const users = (yield (0, dbHandler_1.default)({ + query: `SELECT * FROM users`, + })); + if (!users) { + process.exit(); + } + for (let i = 0; i < users.length; i++) { + const user = users[i]; + if (!user) + continue; + try { + const maridbUsers = (yield (0, dbHandler_1.default)({ + query: `SELECT * FROM mysql.user WHERE User = 'dsql_user_${user.id}'`, + })); + for (let j = 0; j < maridbUsers.length; j++) { + const { User, Host } = maridbUsers[j]; + const password = generate_password_1.default.generate({ + length: 16, + numbers: true, + symbols: true, + uppercase: true, + exclude: "*#.'`\"", + }); + const encryptedPassword = (0, encrypt_1.default)({ + data: password, + encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD, + encryptionSalt: process.env.DSQL_ENCRYPTION_SALT, + }); + yield (0, noDatabaseDbHandler_1.default)(`SET PASSWORD FOR '${User}'@'${Host}' = PASSWORD('${password}')`); + if (user.mariadb_user == User && user.mariadb_host == Host) { + const updateUser = yield (0, dbHandler_1.default)({ + query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`, + values: [encryptedPassword, user.id], + }); + } + console.log(`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`); + } + } + catch (error) { + console.log(`Error Updating User ${user.id} Password =>`, error.message); + } + } + process.exit(); + }); +} +resetSQLCredentialsPasswords(); diff --git a/dist/package-shared/shell/mariadb-users/users/create-user.d.ts b/dist/package-shared/shell/mariadb-users/users/create-user.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/users/create-user.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/mariadb-users/users/create-user.js b/dist/package-shared/shell/mariadb-users/users/create-user.js new file mode 100644 index 0000000..8cf53e1 --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/users/create-user.js @@ -0,0 +1,142 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __importDefault(require("path")); +require("dotenv").config({ path: "../../../.env" }); +const fs_1 = __importDefault(require("fs")); +const child_process_1 = require("child_process"); +const ejson_1 = __importDefault(require("../../../utils/ejson")); +const DB_HANDLER_1 = __importDefault(require("../../../utils/backend/global-db/DB_HANDLER")); +const addDbEntry_1 = __importDefault(require("../../../functions/backend/db/addDbEntry")); +const addMariadbUser_1 = __importDefault(require("../../../functions/backend/addMariadbUser")); +const updateDbEntry_1 = __importDefault(require("../../../functions/backend/db/updateDbEntry")); +const hashPassword_1 = __importDefault(require("../../../functions/dsql/hashPassword")); +const tmpDir = process.argv[process.argv.length - 1]; +/** + * # Create New User + */ +function createUser() { + return __awaiter(this, void 0, void 0, function* () { + /** + * Validate Form + * + * @description Check if request body is valid + */ + try { + const isTmpDir = Boolean(tmpDir === null || tmpDir === void 0 ? void 0 : tmpDir.match(/\.json$/)); + const targetPath = isTmpDir + ? path_1.default.resolve(process.cwd(), tmpDir) + : path_1.default.resolve(__dirname, "./new-user.json"); + const userObj = ejson_1.default.parse(fs_1.default.readFileSync(targetPath, "utf-8")); + if (typeof userObj !== "object" || Array.isArray(userObj)) + throw new Error("User Object Invalid!"); + const ROOT_DIR = path_1.default.resolve(__dirname, "../../../"); + /** + * Validate Form + * + * @description Check if request body is valid + */ + const first_name = userObj.first_name; + const last_name = userObj.last_name; + const email = userObj.email; + const password = userObj.password; + const username = userObj.username; + if (!(email === null || email === void 0 ? void 0 : email.match(/.*@.*\..*/))) + return false; + if (!(first_name === null || first_name === void 0 ? void 0 : first_name.match(/^[a-zA-Z]+$/)) || + !(last_name === null || last_name === void 0 ? void 0 : last_name.match(/^[a-zA-Z]+$/))) + return false; + if (password === null || password === void 0 ? void 0 : password.match(/ /)) + return false; + if (username === null || username === void 0 ? void 0 : username.match(/ /)) + return false; + let hashedPassword = (0, hashPassword_1.default)({ + encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD || "", + password: password, + }); + let existingUser = yield (0, DB_HANDLER_1.default)(`SELECT * FROM users WHERE email='${email}'`); + if (existingUser === null || existingUser === void 0 ? void 0 : existingUser[0]) { + console.log("User Exists"); + return false; + } + const newUser = yield (0, addDbEntry_1.default)({ + dbFullName: "datasquirel", + tableName: "users", + data: Object.assign(Object.assign({}, userObj), { password: hashedPassword }), + }); + if (!(newUser === null || newUser === void 0 ? void 0 : newUser.insertId)) + return false; + /** + * Add a Mariadb User for this User + */ + yield (0, addMariadbUser_1.default)({ userId: newUser.insertId }); + const STATIC_ROOT = process.env.DSQL_STATIC_SERVER_DIR; + if (!STATIC_ROOT) { + console.log("Static File ENV not Found!"); + throw new Error("No Static Path"); + } + /** + * Create new user folder and file + * + * @description Create new user folder and file + */ + let newUserSchemaFolderPath = `${process.env.DSQL_USER_DB_SCHEMA_PATH}/user-${newUser.insertId}`; + let newUserMediaFolderPath = path_1.default.join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}`); + fs_1.default.mkdirSync(newUserSchemaFolderPath, { recursive: true }); + fs_1.default.mkdirSync(newUserMediaFolderPath, { recursive: true }); + fs_1.default.writeFileSync(`${newUserSchemaFolderPath}/main.json`, JSON.stringify([]), "utf8"); + const imageBasePath = path_1.default.join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}`); + if (!fs_1.default.existsSync(imageBasePath)) { + fs_1.default.mkdirSync(imageBasePath, { recursive: true }); + } + let imagePath = path_1.default.join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}/user-${newUser.insertId}-profile.jpg`); + let imageThumbnailPath = path_1.default.join(STATIC_ROOT, `images/user-images/user-${newUser.insertId}/user-${newUser.insertId}-profile-thumbnail.jpg`); + let prodImageUrl = imagePath.replace(STATIC_ROOT, process.env.DSQL_STATIC_HOST || ""); + let prodImageThumbnailUrl = imageThumbnailPath.replace(STATIC_ROOT, process.env.DSQL_STATIC_HOST || ""); + fs_1.default.copyFileSync(path_1.default.join(ROOT_DIR, "/public/images/user-preset.png"), imagePath); + fs_1.default.copyFileSync(path_1.default.join(ROOT_DIR, "/public/images/user-preset-thumbnail.png"), imageThumbnailPath); + (0, child_process_1.execSync)(`chmod 644 ${imagePath} ${imageThumbnailPath}`); + const updateImages = yield (0, updateDbEntry_1.default)({ + dbFullName: "datasquirel", + tableName: "users", + identifierColumnName: "id", + identifierValue: newUser.insertId, + data: { + image: prodImageUrl, + image_thumbnail: prodImageThumbnailUrl, + }, + }); + if (isTmpDir) { + try { + fs_1.default.unlinkSync(path_1.default.resolve(process.cwd(), tmpDir)); + } + catch (error) { } + } + return true; + } + catch (error) { + console.log(`Error in creating user => ${error.message}`); + return false; + } + }); +} +createUser().then((res) => { + if (res) { + console.log("User Creation Success!!!"); + } + else { + console.log("User Creation Failed!"); + } + process.exit(); +}); diff --git a/dist/package-shared/shell/mariadb-users/users/update-user.d.ts b/dist/package-shared/shell/mariadb-users/users/update-user.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/users/update-user.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/mariadb-users/users/update-user.js b/dist/package-shared/shell/mariadb-users/users/update-user.js new file mode 100644 index 0000000..b723e5d --- /dev/null +++ b/dist/package-shared/shell/mariadb-users/users/update-user.js @@ -0,0 +1,81 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __importDefault(require("path")); +require("dotenv").config({ path: "../../../.env" }); +const fs_1 = __importDefault(require("fs")); +const ejson_1 = __importDefault(require("../../../utils/ejson")); +const hashPassword_1 = __importDefault(require("../../../functions/dsql/hashPassword")); +const updateDbEntry_1 = __importDefault(require("../../../functions/backend/db/updateDbEntry")); +const tmpDir = process.argv[process.argv.length - 1]; +/** + * # Create New User + */ +function createUser() { + return __awaiter(this, void 0, void 0, function* () { + /** + * Validate Form + * + * @description Check if request body is valid + */ + try { + const isTmpDir = Boolean(tmpDir === null || tmpDir === void 0 ? void 0 : tmpDir.match(/\.json$/)); + const targetPath = isTmpDir + ? path_1.default.resolve(process.cwd(), tmpDir) + : path_1.default.resolve(__dirname, "./update-user.json"); + const updateUserObj = ejson_1.default.parse(fs_1.default.readFileSync(targetPath, "utf-8")); + if (typeof updateUserObj !== "object" || Array.isArray(updateUserObj)) + throw new Error("Update User Object Invalid!"); + let hashedPassword = updateUserObj.password + ? (0, hashPassword_1.default)({ + encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD || "", + password: updateUserObj.password, + }) + : undefined; + let updatePayload = Object.assign({}, updateUserObj); + if (hashedPassword) { + updatePayload["password"] = hashedPassword; + } + const newUser = yield (0, updateDbEntry_1.default)({ + dbFullName: "datasquirel", + tableName: "users", + data: Object.assign(Object.assign({}, updatePayload), { id: undefined }), + identifierColumnName: "id", + identifierValue: updatePayload.id, + }); + if (!(newUser === null || newUser === void 0 ? void 0 : newUser.affectedRows)) + return false; + if (isTmpDir) { + try { + fs_1.default.unlinkSync(path_1.default.resolve(process.cwd(), tmpDir)); + } + catch (error) { } + } + return true; + } + catch (error) { + console.log(`Error in creating user => ${error.message}`); + return false; + } + }); +} +createUser().then((res) => { + if (res) { + console.log("User Update Success!!!"); + } + else { + console.log("User Update Failed!"); + } + process.exit(); +}); diff --git a/dist/package-shared/shell/readImage.d.ts b/dist/package-shared/shell/readImage.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/readImage.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/readImage.js b/dist/package-shared/shell/readImage.js new file mode 100644 index 0000000..0693d08 --- /dev/null +++ b/dist/package-shared/shell/readImage.js @@ -0,0 +1,7 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const imageBase64 = fs_1.default.readFileSync("./../public/images/unique-tokens-icon.png", "base64"); diff --git a/dist/package-shared/shell/recoverMainJsonFromDb.d.ts b/dist/package-shared/shell/recoverMainJsonFromDb.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/recoverMainJsonFromDb.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/recoverMainJsonFromDb.js b/dist/package-shared/shell/recoverMainJsonFromDb.js new file mode 100644 index 0000000..c7c5713 --- /dev/null +++ b/dist/package-shared/shell/recoverMainJsonFromDb.js @@ -0,0 +1,86 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +require("dotenv").config({ path: "./../.env" }); +const varDatabaseDbHandler_1 = __importDefault(require("../functions/backend/varDatabaseDbHandler")); +const DB_HANDLER_1 = __importDefault(require("../utils/backend/global-db/DB_HANDLER")); +const userId = process.argv.indexOf("--userId") >= 0 + ? process.argv[process.argv.indexOf("--userId") + 1] + : null; +/** + * Grab Schema + * + * @description Grab Schema + */ +function recoverMainJsonFromDb() { + return __awaiter(this, void 0, void 0, function* () { + if (!userId) { + console.log("No user Id provided"); + return; + } + const databases = yield (0, DB_HANDLER_1.default)(`SELECT * FROM user_databases WHERE user_id='${userId}'`); + const dbWrite = []; + for (let i = 0; i < databases.length; i++) { + const { id, db_name, db_slug, db_full_name, db_image, db_description } = databases[i]; + const dbObject = { + dbName: db_name, + dbSlug: db_slug, + dbFullName: db_full_name, + dbDescription: db_description, + dbImage: db_image, + tables: [], + }; + const tables = yield (0, DB_HANDLER_1.default)(`SELECT * FROM user_database_tables WHERE user_id='${userId}' AND db_id='${id}'`); + for (let j = 0; j < tables.length; j++) { + const { table_name, table_slug, table_description } = tables[j]; + const tableObject = { + tableName: table_slug, + tableFullName: table_name, + fields: [], + indexes: [], + }; + const tableFields = yield (0, varDatabaseDbHandler_1.default)({ + database: db_full_name, + queryString: `SHOW COLUMNS FROM ${table_slug}`, + }); + for (let k = 0; k < tableFields.length; k++) { + const { Field, Type, Null, Default, Key } = tableFields[k]; + const fieldObject = { + fieldName: Field, + dataType: Type.toUpperCase(), + }; + if ((Default === null || Default === void 0 ? void 0 : Default.match(/./)) && !(Default === null || Default === void 0 ? void 0 : Default.match(/timestamp/i))) + fieldObject["defaultValue"] = Default; + if (Key === null || Key === void 0 ? void 0 : Key.match(/pri/i)) { + fieldObject["primaryKey"] = true; + fieldObject["autoIncrement"] = true; + } + if (Default === null || Default === void 0 ? void 0 : Default.match(/timestamp/i)) + fieldObject["defaultValueLiteral"] = Default; + if (Null === null || Null === void 0 ? void 0 : Null.match(/yes/i)) + fieldObject["nullValue"] = true; + if (Null === null || Null === void 0 ? void 0 : Null.match(/no/i)) + fieldObject["notNullValue"] = true; + tableObject.fields.push(fieldObject); + } + dbObject.tables.push(tableObject); + } + dbWrite.push(dbObject); + } + fs_1.default.writeFileSync(`${String(process.env.DSQL_USER_DB_SCHEMA_PATH)}/user-${userId}/main.json`, JSON.stringify(dbWrite, null, 4), "utf-8"); + process.exit(); + }); +} +recoverMainJsonFromDb(); diff --git a/dist/package-shared/shell/resetSQLCredentials.d.ts b/dist/package-shared/shell/resetSQLCredentials.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/resetSQLCredentials.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/resetSQLCredentials.js b/dist/package-shared/shell/resetSQLCredentials.js new file mode 100644 index 0000000..a26cbe8 --- /dev/null +++ b/dist/package-shared/shell/resetSQLCredentials.js @@ -0,0 +1,72 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const generate_password_1 = __importDefault(require("generate-password")); +const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler")); +const dbHandler_1 = __importDefault(require("./utils/dbHandler")); +const encrypt_1 = __importDefault(require("../functions/dsql/encrypt")); +/** + * Create database from Schema Function + * ============================================================================== + * @param {object} params - Single object params + * @param {number|string|null} params.userId - User ID or null + */ +function resetSQLCredentials() { + return __awaiter(this, void 0, void 0, function* () { + const users = (yield (0, dbHandler_1.default)({ + query: `SELECT * FROM users`, + })); + if (!users) { + process.exit(); + } + for (let i = 0; i < users.length; i++) { + const user = users[i]; + if (!user) + continue; + const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; + try { + const username = `dsql_user_${user.id}`; + const password = generate_password_1.default.generate({ + length: 16, + numbers: true, + symbols: true, + uppercase: true, + exclude: "*#.'`\"", + }); + const encryptedPassword = (0, encrypt_1.default)({ data: password }); + yield (0, noDatabaseDbHandler_1.default)(`DROP USER IF EXISTS '${username}'@'%'`); + yield (0, noDatabaseDbHandler_1.default)(`DROP USER IF EXISTS '${username}'@'${defaultMariadbUserHost}'`); + yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${username}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${password}'`); + yield (0, noDatabaseDbHandler_1.default)(`GRANT ALL PRIVILEGES ON \`datasquirel_user_${user.id}_%\`.* TO '${username}'@'${defaultMariadbUserHost}'`); + yield (0, noDatabaseDbHandler_1.default)(`FLUSH PRIVILEGES`); + const updateUser = yield (0, dbHandler_1.default)({ + query: `UPDATE users SET mariadb_user = ?, mariadb_host = ?, mariadb_pass = ? WHERE id = ?`, + values: [ + username, + defaultMariadbUserHost, + encryptedPassword, + user.id, + ], + }); + console.log(`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`); + } + catch (error) { + console.log(`Error in adding SQL user =>`, error.message); + } + } + process.exit(); + }); +} +resetSQLCredentials(); diff --git a/dist/package-shared/shell/resetSQLCredentialsPasswords.d.ts b/dist/package-shared/shell/resetSQLCredentialsPasswords.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/resetSQLCredentialsPasswords.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/resetSQLCredentialsPasswords.js b/dist/package-shared/shell/resetSQLCredentialsPasswords.js new file mode 100644 index 0000000..6f52b44 --- /dev/null +++ b/dist/package-shared/shell/resetSQLCredentialsPasswords.js @@ -0,0 +1,60 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const generate_password_1 = __importDefault(require("generate-password")); +const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler")); +const dbHandler_1 = __importDefault(require("./utils/dbHandler")); +const encrypt_1 = __importDefault(require("../functions/dsql/encrypt")); +/** + * # Create database from Schema Function + */ +function resetSQLCredentialsPasswords() { + return __awaiter(this, void 0, void 0, function* () { + const users = (yield (0, dbHandler_1.default)({ + query: `SELECT * FROM users`, + })); + if (!users) { + process.exit(); + } + for (let i = 0; i < users.length; i++) { + const user = users[i]; + if (!user) + continue; + const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; + try { + const username = `dsql_user_${user.id}`; + const password = generate_password_1.default.generate({ + length: 16, + numbers: true, + symbols: true, + uppercase: true, + exclude: "*#.'`\"", + }); + const encryptedPassword = (0, encrypt_1.default)({ data: password }); + yield (0, noDatabaseDbHandler_1.default)(`SET PASSWORD FOR '${username}'@'${defaultMariadbUserHost}' = PASSWORD('${password}')`); + const updateUser = yield (0, dbHandler_1.default)({ + query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`, + values: [encryptedPassword, user.id], + }); + console.log(`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`); + } + catch (error) { + console.log(`Error Updating User ${user.id} Password =>`, error.message); + } + } + process.exit(); + }); +} +resetSQLCredentialsPasswords(); diff --git a/dist/package-shared/shell/scripts/convert-js-to-ts.d.ts b/dist/package-shared/shell/scripts/convert-js-to-ts.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/scripts/convert-js-to-ts.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/scripts/convert-js-to-ts.js b/dist/package-shared/shell/scripts/convert-js-to-ts.js new file mode 100644 index 0000000..9137347 --- /dev/null +++ b/dist/package-shared/shell/scripts/convert-js-to-ts.js @@ -0,0 +1,40 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +const rootDir = path_1.default.resolve(__dirname, "../../../"); +const ignorePattern = /\/\.git\/|\/\.next\/|\/\.dist\/|node_modules|\/\.local_dist\/|\/\.tmp\/|\/types\/|\.config\.js|\/public\//; +function transformJsToTs(dir) { + var _a; + const dirContent = fs_1.default.readdirSync(dir); + for (let i = 0; i < dirContent.length; i++) { + const fileFolder = dirContent[i]; + const fullFileFolderPath = path_1.default.join(dir, fileFolder); + const stat = fs_1.default.statSync(fullFileFolderPath); + if (stat.isDirectory()) { + transformJsToTs(fullFileFolderPath); + continue; + } + if (ignorePattern.test(fullFileFolderPath)) + continue; + if (fullFileFolderPath.match(/\.jsx?$/)) { + const extension = (_a = fullFileFolderPath.match(/\.jsx?$/)) === null || _a === void 0 ? void 0 : _a[0]; + if (!extension) + continue; + const newExtension = extension.replace("js", "ts"); + const newFilePath = fullFileFolderPath.replace(/\.jsx?$/, newExtension); + console.log(fullFileFolderPath); + console.log(extension, "=>", newExtension); + console.log(newFilePath); + console.log("\n/////////////////////////////////////////"); + console.log("/////////////////////////////////////////\n"); + fs_1.default.copyFileSync(fullFileFolderPath, newFilePath); + fs_1.default.unlinkSync(fullFileFolderPath); + } + } +} +console.log("rootDir", rootDir); +transformJsToTs(rootDir); diff --git a/dist/package-shared/shell/setSQLCredentials.d.ts b/dist/package-shared/shell/setSQLCredentials.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/setSQLCredentials.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/setSQLCredentials.js b/dist/package-shared/shell/setSQLCredentials.js new file mode 100644 index 0000000..d81acfe --- /dev/null +++ b/dist/package-shared/shell/setSQLCredentials.js @@ -0,0 +1,69 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const generate_password_1 = __importDefault(require("generate-password")); +const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler")); +const dbHandler_1 = __importDefault(require("./utils/dbHandler")); +const encrypt_1 = __importDefault(require("../functions/dsql/encrypt")); +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * # Set SQL Credentials + */ +function setSQLCredentials() { + return __awaiter(this, void 0, void 0, function* () { + const users = (yield (0, dbHandler_1.default)({ + query: `SELECT * FROM users`, + })); + if (!users) { + process.exit(); + } + for (let i = 0; i < users.length; i++) { + const user = users[i]; + if (!user) + continue; + if (user.mariadb_user && user.mariadb_pass) { + continue; + } + try { + const username = `dsql_user_${user.id}`; + const password = generate_password_1.default.generate({ + length: 16, + numbers: true, + symbols: true, + uppercase: true, + exclude: "*#.'`\"", + }); + const encryptedPassword = (0, encrypt_1.default)({ data: password }); + yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`); + yield (0, noDatabaseDbHandler_1.default)(`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'127.0.0.1'`); + yield (0, noDatabaseDbHandler_1.default)(`FLUSH PRIVILEGES`); + const updateUser = yield (0, dbHandler_1.default)({ + query: `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1' mariadb_pass = ? WHERE id = ?`, + values: [username, encryptedPassword, user.id], + }); + console.log(`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`); + } + catch (error) { + console.log(`Error in adding SQL user =>`, error.message); + } + } + }); +} +setSQLCredentials(); diff --git a/dist/package-shared/shell/tailwindWatch.d.ts b/dist/package-shared/shell/tailwindWatch.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/tailwindWatch.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/tailwindWatch.js b/dist/package-shared/shell/tailwindWatch.js new file mode 100644 index 0000000..02a9f39 --- /dev/null +++ b/dist/package-shared/shell/tailwindWatch.js @@ -0,0 +1,30 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const child_process_1 = require("child_process"); +require("dotenv").config({ path: "./../.env" }); +const sourceFile = process.argv.indexOf("--src") >= 0 + ? process.argv[process.argv.indexOf("--src") + 1] + : null; +const destinationFile = process.argv.indexOf("--dst") >= 0 + ? process.argv[process.argv.indexOf("--dst") + 1] + : null; +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +console.log("Running Tailwind CSS compiler ..."); +fs_1.default.watch("./../", (curr, prev) => { + (0, child_process_1.exec)(`npx tailwindcss -i ./tailwind/main.css -o ./styles/tailwind.css`, (error, stdout, stderr) => { + if (error) { + console.log("ERROR =>", error.message); + return; + } + console.log("Tailwind CSS Compilation \x1b[32msuccessful\x1b[0m!"); + }); +}); diff --git a/dist/package-shared/shell/test-external-server.d.ts b/dist/package-shared/shell/test-external-server.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/test-external-server.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/test-external-server.js b/dist/package-shared/shell/test-external-server.js new file mode 100644 index 0000000..1471762 --- /dev/null +++ b/dist/package-shared/shell/test-external-server.js @@ -0,0 +1,57 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./.env" }); +const grabDbSSL_1 = __importDefault(require("../utils/backend/grabDbSSL")); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const connection = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASS, + // database: process.env.DSQL_DB_NAME, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # Main DB Handler Function + * @async + * + * @param {object} params + * @param {string} params.query + * @param {string[] | object} [params.values] + * @param {string} [params.database] + * + * @returns {Promise} + */ +(() => __awaiter(void 0, void 0, void 0, function* () { + /** + * Switch Database + * + * @description If a database is provided, switch to it + */ + try { + const result = yield connection.query("SHOW DATABASES"); + const parsedResults = JSON.parse(JSON.stringify(result)); + console.log("parsedResults =>", parsedResults); + } + catch (error) { + console.log("Connection query ERROR =>", error.message); + } + finally { + connection.end(); + process.exit(); + } +}))(); diff --git a/dist/package-shared/shell/testSQLEscape.d.ts b/dist/package-shared/shell/testSQLEscape.d.ts new file mode 100644 index 0000000..4d08c82 --- /dev/null +++ b/dist/package-shared/shell/testSQLEscape.d.ts @@ -0,0 +1,10 @@ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * # Test SQL Escape + */ +export default function testSQLEscape(): Promise; diff --git a/dist/package-shared/shell/testSQLEscape.js b/dist/package-shared/shell/testSQLEscape.js new file mode 100644 index 0000000..21b0386 --- /dev/null +++ b/dist/package-shared/shell/testSQLEscape.js @@ -0,0 +1,79 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = testSQLEscape; +//////////////////////////////////////// +//////////////////////////////////////// +//////////////////////////////////////// +require("dotenv").config({ path: "./../.env" }); +const generate_password_1 = __importDefault(require("generate-password")); +const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler")); +const dbHandler_1 = __importDefault(require("./utils/dbHandler")); +const encrypt_1 = __importDefault(require("../functions/dsql/encrypt")); +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * # Test SQL Escape + */ +function testSQLEscape() { + return __awaiter(this, void 0, void 0, function* () { + const users = (yield (0, dbHandler_1.default)({ + query: `SELECT * FROM users`, + })); + if (!users) { + process.exit(); + } + for (let i = 0; i < users.length; i++) { + const user = users[i]; + if (!user) + continue; + const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1"; + try { + const username = `dsql_user_${user.id}`; + const password = generate_password_1.default.generate({ + length: 16, + numbers: true, + symbols: true, + uppercase: true, + exclude: "*#.'`\"", + }); + const encryptedPassword = (0, encrypt_1.default)({ data: password }); + yield (0, noDatabaseDbHandler_1.default)(`DROP USER '${username}'@'${defaultMariadbUserHost}'`); + yield (0, noDatabaseDbHandler_1.default)(`CREATE USER IF NOT EXISTS '${username}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${password}'`); + yield (0, noDatabaseDbHandler_1.default)(`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'${defaultMariadbUserHost}'`); + yield (0, noDatabaseDbHandler_1.default)(`FLUSH PRIVILEGES`); + const updateUser = yield (0, dbHandler_1.default)({ + query: `UPDATE users SET mariadb_user = ?, mariadb_host = ? mariadb_pass = ? WHERE id = ?`, + values: [ + username, + defaultMariadbUserHost, + encryptedPassword, + user.id, + ], + }); + console.log(`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`); + } + catch (error) { + console.log(`Error in adding SQL user =>`, error.message); + } + } + process.exit(); + }); +} +testSQLEscape(); diff --git a/dist/package-shared/shell/updateChildrenTablesOnDb.d.ts b/dist/package-shared/shell/updateChildrenTablesOnDb.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/updateChildrenTablesOnDb.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/updateChildrenTablesOnDb.js b/dist/package-shared/shell/updateChildrenTablesOnDb.js new file mode 100644 index 0000000..641139f --- /dev/null +++ b/dist/package-shared/shell/updateChildrenTablesOnDb.js @@ -0,0 +1,56 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const DB_HANDLER_1 = __importDefault(require("../utils/backend/global-db/DB_HANDLER")); +const fs_1 = __importDefault(require("fs")); +require("dotenv").config({ path: "./../.env" }); +function updateChildrenTablesOnDb() { + return __awaiter(this, void 0, void 0, function* () { + /** + * Grab Schema + * + * @description Grab Schema + */ + try { + const rootDir = String(process.env.DSQL_USER_DB_SCHEMA_PATH); + const userFolders = fs_1.default.readdirSync(rootDir); + for (let i = 0; i < userFolders.length; i++) { + const folder = userFolders[i]; + const userId = folder.replace(/user-/, ""); + const databases = JSON.parse(fs_1.default.readFileSync(`${rootDir}/${folder}/main.json`, "utf-8")); + for (let j = 0; j < databases.length; j++) { + const db = databases[j]; + const dbTables = db.tables; + for (let k = 0; k < dbTables.length; k++) { + const table = dbTables[k]; + if (table === null || table === void 0 ? void 0 : table.childTable) { + const originTableName = table.childTableName; + const originDbName = table.childTableDbFullName; + const WHERE_CLAUSE = `WHERE user_id='${userId}' AND db_slug='${db.dbSlug}' AND table_slug='${table.tableName}'`; + const existingTableInDb = yield (0, DB_HANDLER_1.default)(`SELECT * FROM user_database_tables ${WHERE_CLAUSE}`); + if (existingTableInDb && existingTableInDb[0]) { + const updateChildrenTablesInfo = yield (0, DB_HANDLER_1.default)(`UPDATE user_database_tables SET child_table='1',child_table_parent_database='${originDbName}',child_table_parent_table='${originTableName}' WHERE id='${existingTableInDb[0].id}'`); + } + } + } + } + } + } + catch (error) { + console.log(error); + } + process.exit(); + }); +} +updateChildrenTablesOnDb(); diff --git a/dist/package-shared/shell/updateDateTimestamps.d.ts b/dist/package-shared/shell/updateDateTimestamps.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/updateDateTimestamps.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/updateDateTimestamps.js b/dist/package-shared/shell/updateDateTimestamps.js new file mode 100644 index 0000000..4f434df --- /dev/null +++ b/dist/package-shared/shell/updateDateTimestamps.js @@ -0,0 +1,44 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const varDatabaseDbHandler_1 = __importDefault(require("../functions/backend/varDatabaseDbHandler")); +/** + * Grab Schema + * + * @description Grab Schema + */ +(0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`, + database: "datasquirel", +}).then((tables) => __awaiter(void 0, void 0, void 0, function* () { + for (let i = 0; i < tables.length; i++) { + const table = tables[i]; + const { id, user_id, db_id, db_full_name, table_name, table_slug, table_description, } = table; + const tableInfo = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`, + database: db_full_name, + }); + const updateCreationDateTimestamp = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`, + database: db_full_name, + }); + const updateDateTimestamp = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER TABLE \`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`, + database: db_full_name, + }); + console.log("Date Updated Column updated"); + } + process.exit(); +})); diff --git a/dist/package-shared/shell/updateDbSlugsForTableRecords.d.ts b/dist/package-shared/shell/updateDbSlugsForTableRecords.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/updateDbSlugsForTableRecords.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/updateDbSlugsForTableRecords.js b/dist/package-shared/shell/updateDbSlugsForTableRecords.js new file mode 100644 index 0000000..82b7028 --- /dev/null +++ b/dist/package-shared/shell/updateDbSlugsForTableRecords.js @@ -0,0 +1,52 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const serverError_1 = __importDefault(require("../functions/backend/serverError")); +const varDatabaseDbHandler_1 = __importDefault(require("./utils/varDatabaseDbHandler")); +const DB_HANDLER_1 = __importDefault(require("../utils/backend/global-db/DB_HANDLER")); +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * Grab Schema + * + * @description Grab Schema + */ +(0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT DISTINCT db_id FROM user_database_tables`, + database: "datasquirel", +}).then((tables) => __awaiter(void 0, void 0, void 0, function* () { + // console.log(tables); + // process.exit(); + for (let i = 0; i < tables.length; i++) { + const table = tables[i]; + try { + const { db_id } = table; + const dbSlug = yield (0, DB_HANDLER_1.default)(`SELECT db_slug FROM user_databases WHERE id='${db_id}'`); + const updateTableSlug = yield (0, DB_HANDLER_1.default)(`UPDATE user_database_tables SET db_slug='${dbSlug[0].db_slug}' WHERE db_id='${db_id}'`); + } + catch (error) { + (0, serverError_1.default)({ + component: "shell/updateDbSlugsForTableRecords/main-catch-error", + message: error.message, + user: {}, + }); + } + } + process.exit(); +})); diff --git a/dist/package-shared/shell/updateSSLUsers.d.ts b/dist/package-shared/shell/updateSSLUsers.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/shell/updateSSLUsers.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/shell/updateSSLUsers.js b/dist/package-shared/shell/updateSSLUsers.js new file mode 100644 index 0000000..7f55731 --- /dev/null +++ b/dist/package-shared/shell/updateSSLUsers.js @@ -0,0 +1,71 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("dotenv").config({ path: "./../.env" }); +const grabDbSSL_1 = __importDefault(require("../utils/backend/grabDbSSL")); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const connection = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # Main DB Handler Function + * @async + * + * @param {object} params + * @param {string} params.query + * @param {string[] | object} [params.values] + * @param {string} [params.database] + * + * @returns {Promise} + */ +(() => __awaiter(void 0, void 0, void 0, function* () { + var _a; + /** + * Switch Database + * + * @description If a database is provided, switch to it + */ + try { + const result = yield connection.query("SELECT user,host,ssl_type FROM mysql.user"); + const parsedResults = JSON.parse(JSON.stringify(result)); + for (let i = 0; i < parsedResults.length; i++) { + const user = parsedResults[i]; + if (user.User !== process.env.DSQL_DB_READ_ONLY_USERNAME || + user.User !== process.env.DSQL_DB_FULL_ACCESS_USERNAME || + !((_a = user.User) === null || _a === void 0 ? void 0 : _a.match(/dsql_user_.*/i))) { + continue; + } + const { User, Host, ssl_type } = user; + if (ssl_type === "ANY") { + continue; + } + const addUserSSL = yield connection.query(`ALTER USER '${User}'@'${Host}'`); + console.log(`addUserSSL => ${User}@${Host}`, addUserSSL); + } + } + catch (error) { + console.log("Connection query ERROR =>", error.message); + } + finally { + connection.end(); + process.exit(); + } +}))(); diff --git a/dist/package-shared/shell/utils/camelJoinedtoCamelSpace.d.ts b/dist/package-shared/shell/utils/camelJoinedtoCamelSpace.d.ts new file mode 100644 index 0000000..0e45d5d --- /dev/null +++ b/dist/package-shared/shell/utils/camelJoinedtoCamelSpace.d.ts @@ -0,0 +1,7 @@ +/** + * Convert Camel Joined Text to Camel Spaced Text + * ============================================================================== + * @description this function takes a camel cased text without spaces, and returns + * a camel-case-spaced text + */ +export default function camelJoinedtoCamelSpace(text: string): string | null; diff --git a/dist/package-shared/shell/utils/camelJoinedtoCamelSpace.js b/dist/package-shared/shell/utils/camelJoinedtoCamelSpace.js new file mode 100644 index 0000000..239bfc5 --- /dev/null +++ b/dist/package-shared/shell/utils/camelJoinedtoCamelSpace.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = camelJoinedtoCamelSpace; +/** + * Convert Camel Joined Text to Camel Spaced Text + * ============================================================================== + * @description this function takes a camel cased text without spaces, and returns + * a camel-case-spaced text + */ +function camelJoinedtoCamelSpace(text) { + if (!(text === null || text === void 0 ? void 0 : text.match(/./))) { + return ""; + } + if (text === null || text === void 0 ? void 0 : text.match(/ /)) { + return text; + } + if (text) { + let textArray = text.split(""); + let capIndexes = []; + for (let i = 0; i < textArray.length; i++) { + const char = textArray[i]; + if (i === 0) + continue; + if (char.match(/[A-Z]/)) { + capIndexes.push(i); + } + } + let textChunks = [ + `${textArray[0].toUpperCase()}${text.substring(1, capIndexes[0])}`, + ]; + for (let j = 0; j < capIndexes.length; j++) { + const capIndex = capIndexes[j]; + if (capIndex === 0) + continue; + const startIndex = capIndex + 1; + const endIndex = capIndexes[j + 1]; + textChunks.push(`${textArray[capIndex].toUpperCase()}${text.substring(startIndex, endIndex)}`); + } + return textChunks.join(" "); + } + else { + return null; + } +} diff --git a/dist/package-shared/shell/utils/createTable.d.ts b/dist/package-shared/shell/utils/createTable.d.ts new file mode 100644 index 0000000..4a587d6 --- /dev/null +++ b/dist/package-shared/shell/utils/createTable.d.ts @@ -0,0 +1,20 @@ +import { DSQL_DatabaseSchemaType, DSQL_TableSchemaType } from "../../types"; +type Param = { + dbFullName: string; + tableName: string; + tableInfoArray: any[]; + dbSchema?: DSQL_DatabaseSchemaType[]; + tableSchema?: DSQL_TableSchemaType; + recordedDbEntry?: any; + clone?: boolean; +}; +/** + * # Create Table Functions + */ +export default function createTable({ dbFullName, tableName, tableInfoArray, dbSchema, clone, tableSchema, recordedDbEntry, }: Param): Promise; +export {}; +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/shell/utils/createTable.js b/dist/package-shared/shell/utils/createTable.js new file mode 100644 index 0000000..d61a1e3 --- /dev/null +++ b/dist/package-shared/shell/utils/createTable.js @@ -0,0 +1,141 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = createTable; +const varDatabaseDbHandler_1 = __importDefault(require("./varDatabaseDbHandler")); +const generateColumnDescription_1 = __importDefault(require("./generateColumnDescription")); +const supplementTable_1 = __importDefault(require("./supplementTable")); +const dbHandler_1 = __importDefault(require("./dbHandler")); +/** + * # Create Table Functions + */ +function createTable(_a) { + return __awaiter(this, arguments, void 0, function* ({ dbFullName, tableName, tableInfoArray, dbSchema, clone, tableSchema, recordedDbEntry, }) { + /** + * Format tableInfoArray + * + * @description Format tableInfoArray + */ + const finalTable = (0, supplementTable_1.default)({ tableInfoArray: tableInfoArray }); + /** + * Grab Schema + * + * @description Grab Schema + */ + const createTableQueryArray = []; + createTableQueryArray.push(`CREATE TABLE IF NOT EXISTS \`${tableName}\` (`); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + try { + if (!recordedDbEntry) { + throw new Error("Recorded Db entry not found!"); + } + const existingTable = yield (0, varDatabaseDbHandler_1.default)({ + database: "datasquirel", + queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, + queryValuesArray: [recordedDbEntry.id, tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.tableName], + }); + /** @type {import("../../types").MYSQL_user_database_tables_table_def} */ + const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0]; + if (!(table === null || table === void 0 ? void 0 : table.id)) { + const newTableEntry = yield (0, dbHandler_1.default)({ + query: `INSERT INTO user_database_tables SET ?`, + values: { + user_id: recordedDbEntry.user_id, + db_id: recordedDbEntry.id, + db_slug: recordedDbEntry.db_slug, + table_name: tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.tableFullName, + table_slug: tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.tableName, + child_table: (tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.childTable) ? "1" : null, + child_table_parent_database: (tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.childTableDbFullName) || null, + child_table_parent_table: (tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.childTableName) || null, + date_created: Date(), + date_created_code: Date.now(), + date_updated: Date(), + date_updated_code: Date.now(), + }, + database: "datasquirel", + }); + } + } + catch (error) { } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + let primaryKeySet = false; + /** @type {import("../../types").DSQL_FieldSchemaType[]} */ + let foreignKeys = []; + //////////////////////////////////////// + for (let i = 0; i < finalTable.length; i++) { + const column = finalTable[i]; + const { fieldName, dataType, nullValue, primaryKey, autoIncrement, defaultValue, defaultValueLiteral, foreignKey, updatedField, onUpdate, onUpdateLiteral, onDelete, onDeleteLiteral, defaultField, encrypted, json, newTempField, notNullValue, originName, plainText, pattern, patternFlags, richText, } = column; + if (foreignKey) { + foreignKeys.push(Object.assign({}, column)); + } + let { fieldEntryText, newPrimaryKeySet } = (0, generateColumnDescription_1.default)({ + columnData: column, + primaryKeySet: primaryKeySet, + }); + primaryKeySet = newPrimaryKeySet; + //////////////////////////////////////// + const comma = (() => { + if (foreignKeys[0]) + return ","; + if (i === finalTable.length - 1) + return ""; + return ","; + })(); + createTableQueryArray.push(" " + fieldEntryText + comma); + //////////////////////////////////////// + } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + if (foreignKeys[0]) { + foreignKeys.forEach((foreighKey, index, array) => { + var _a, _b, _c, _d, _e; + const fieldName = foreighKey.fieldName; + const destinationTableName = (_a = foreighKey.foreignKey) === null || _a === void 0 ? void 0 : _a.destinationTableName; + const destinationTableColumnName = (_b = foreighKey.foreignKey) === null || _b === void 0 ? void 0 : _b.destinationTableColumnName; + const cascadeDelete = (_c = foreighKey.foreignKey) === null || _c === void 0 ? void 0 : _c.cascadeDelete; + const cascadeUpdate = (_d = foreighKey.foreignKey) === null || _d === void 0 ? void 0 : _d.cascadeUpdate; + const foreignKeyName = (_e = foreighKey.foreignKey) === null || _e === void 0 ? void 0 : _e.foreignKeyName; + const comma = (() => { + if (index === foreignKeys.length - 1) + return ""; + return ","; + })(); + createTableQueryArray.push(` CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (\`${fieldName}\`) REFERENCES \`${destinationTableName}\`(${destinationTableColumnName})${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}${comma}`); + }); + } + //////////////////////////////////////// + createTableQueryArray.push(`) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;`); + const createTableQuery = createTableQueryArray.join("\n"); + //////////////////////////////////////// + const newTable = yield (0, varDatabaseDbHandler_1.default)({ + queryString: createTableQuery, + database: dbFullName, + }); + return newTable; + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + }); +} +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/shell/utils/dbHandler.d.ts b/dist/package-shared/shell/utils/dbHandler.d.ts new file mode 100644 index 0000000..9b726b6 --- /dev/null +++ b/dist/package-shared/shell/utils/dbHandler.d.ts @@ -0,0 +1,10 @@ +type Param = { + query: string; + values?: string[] | object; + database?: string; +}; +/** + * # Main DB Handler Function + */ +export default function dbHandler({ query, values, database, }: Param): Promise; +export {}; diff --git a/dist/package-shared/shell/utils/dbHandler.js b/dist/package-shared/shell/utils/dbHandler.js new file mode 100644 index 0000000..8bf72d0 --- /dev/null +++ b/dist/package-shared/shell/utils/dbHandler.js @@ -0,0 +1,100 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = dbHandler; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../../utils/backend/grabDbSSL")); +let connection = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # Main DB Handler Function + */ +function dbHandler(_a) { + return __awaiter(this, arguments, void 0, function* ({ query, values, database, }) { + /** + * Switch Database + * + * @description If a database is provided, switch to it + */ + let isDbCorrect = true; + if (database) { + connection = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: database, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, + }); + } + if (!isDbCorrect) { + console.log("Shell Db Handler ERROR in switching Database! Operation Failed!"); + return null; + } + /** + * Declare variables + * + * @description Declare "results" variable + */ + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + if (query && values) { + results = yield connection.query(query, values); + } + else { + results = yield connection.query(query); + } + /** ********************* Clean up */ + yield connection.end(); + } + catch ( /** @type {any} */error) { + if (process.env.FIRST_RUN) { + return null; + } + console.log("ERROR in dbHandler =>", error.message); + console.log(error); + console.log(connection.config()); + fs_1.default.appendFileSync(path_1.default.resolve(__dirname, "../.tmp/dbErrorLogs.txt"), JSON.stringify(error, null, 4) + "\n" + Date() + "\n\n\n", "utf8"); + results = null; + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + if (results) { + return JSON.parse(JSON.stringify(results)); + } + else { + return null; + } + }); +} diff --git a/dist/package-shared/shell/utils/generateColumnDescription.d.ts b/dist/package-shared/shell/utils/generateColumnDescription.d.ts new file mode 100644 index 0000000..39e293f --- /dev/null +++ b/dist/package-shared/shell/utils/generateColumnDescription.d.ts @@ -0,0 +1,13 @@ +type Param = { + columnData: import("../../types").DSQL_FieldSchemaType; + primaryKeySet?: boolean; +}; +type Return = { + fieldEntryText: string; + newPrimaryKeySet: boolean; +}; +/** + * # Generate Table Column Description + */ +export default function generateColumnDescription({ columnData, primaryKeySet, }: Param): Return; +export {}; diff --git a/dist/package-shared/shell/utils/generateColumnDescription.js b/dist/package-shared/shell/utils/generateColumnDescription.js new file mode 100644 index 0000000..a9c0ab7 --- /dev/null +++ b/dist/package-shared/shell/utils/generateColumnDescription.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = generateColumnDescription; +/** + * # Generate Table Column Description + */ +function generateColumnDescription({ columnData, primaryKeySet, }) { + /** + * Format tableInfoArray + * + * @description Format tableInfoArray + */ + const { fieldName, dataType, nullValue, primaryKey, autoIncrement, defaultValue, defaultValueLiteral, onUpdateLiteral, notNullValue, } = columnData; + let fieldEntryText = ""; + fieldEntryText += `\`${fieldName}\` ${dataType}`; + //////////////////////////////////////// + if (nullValue) { + fieldEntryText += " DEFAULT NULL"; + } + else if (defaultValueLiteral) { + fieldEntryText += ` DEFAULT ${defaultValueLiteral}`; + } + else if (defaultValue) { + if (String(defaultValue).match(/uuid\(\)/i)) { + fieldEntryText += ` DEFAULT UUID()`; + } + else { + fieldEntryText += ` DEFAULT '${defaultValue}'`; + } + } + else if (notNullValue) { + fieldEntryText += ` NOT NULL`; + } + //////////////////////////////////////// + if (onUpdateLiteral) { + fieldEntryText += ` ON UPDATE ${onUpdateLiteral}`; + } + //////////////////////////////////////// + if (primaryKey && !primaryKeySet) { + fieldEntryText += " PRIMARY KEY"; + primaryKeySet = true; + } + //////////////////////////////////////// + if (autoIncrement) { + fieldEntryText += " AUTO_INCREMENT"; + primaryKeySet = true; + } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + return { + fieldEntryText, + newPrimaryKeySet: primaryKeySet || false, + }; +} diff --git a/dist/package-shared/shell/utils/noDatabaseDbHandler.d.ts b/dist/package-shared/shell/utils/noDatabaseDbHandler.d.ts new file mode 100644 index 0000000..ca7283a --- /dev/null +++ b/dist/package-shared/shell/utils/noDatabaseDbHandler.d.ts @@ -0,0 +1,4 @@ +/** + * # Create database from Schema Function + */ +export default function noDatabaseDbHandler(queryString: string): Promise; diff --git a/dist/package-shared/shell/utils/noDatabaseDbHandler.js b/dist/package-shared/shell/utils/noDatabaseDbHandler.js new file mode 100644 index 0000000..1b53895 --- /dev/null +++ b/dist/package-shared/shell/utils/noDatabaseDbHandler.js @@ -0,0 +1,55 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = noDatabaseDbHandler; +const dbHandler_1 = __importDefault(require("./dbHandler")); +/** + * # Create database from Schema Function + */ +function noDatabaseDbHandler(queryString) { + return __awaiter(this, void 0, void 0, function* () { + /** + * Declare variables + * + * @description Declare "results" variable + */ + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + /** ********************* Run Query */ + results = yield (0, dbHandler_1.default)({ query: queryString }); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + } + catch (error) { + console.log("ERROR in noDatabaseDbHandler =>", error.message); + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + if (results) { + return results; + } + else { + return null; + } + }); +} diff --git a/dist/package-shared/shell/utils/slugToCamelTitle.d.ts b/dist/package-shared/shell/utils/slugToCamelTitle.d.ts new file mode 100644 index 0000000..6da4a1e --- /dev/null +++ b/dist/package-shared/shell/utils/slugToCamelTitle.d.ts @@ -0,0 +1,4 @@ +/** + * # Sulg To Camel Case + */ +export default function slugToCamelTitle(text: string): string | null; diff --git a/dist/package-shared/shell/utils/slugToCamelTitle.js b/dist/package-shared/shell/utils/slugToCamelTitle.js new file mode 100644 index 0000000..300c96f --- /dev/null +++ b/dist/package-shared/shell/utils/slugToCamelTitle.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = slugToCamelTitle; +/** + * # Sulg To Camel Case + */ +function slugToCamelTitle(text) { + if (text) { + let addArray = text.split("-").filter((item) => item !== ""); + let camelArray = addArray.map((item) => { + return (item.substr(0, 1).toUpperCase() + item.substr(1).toLowerCase()); + }); + let parsedAddress = camelArray.join(" "); + return parsedAddress; + } + else { + return null; + } +} diff --git a/dist/package-shared/shell/utils/supplementTable.d.ts b/dist/package-shared/shell/utils/supplementTable.d.ts new file mode 100644 index 0000000..5bd56ad --- /dev/null +++ b/dist/package-shared/shell/utils/supplementTable.d.ts @@ -0,0 +1,14 @@ +import { DSQL_FieldSchemaType } from "../../types"; +type Param = { + tableInfoArray: DSQL_FieldSchemaType[]; +}; +/** + * # Supplement Table + */ +export default function supplementTable({ tableInfoArray }: Param): DSQL_FieldSchemaType[]; +export {}; +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/shell/utils/supplementTable.js b/dist/package-shared/shell/utils/supplementTable.js new file mode 100644 index 0000000..c41d3dc --- /dev/null +++ b/dist/package-shared/shell/utils/supplementTable.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = supplementTable; +/** + * # Supplement Table + */ +function supplementTable({ tableInfoArray }) { + /** + * Format tableInfoArray + * + * @description Format tableInfoArray + */ + let finalTableArray = tableInfoArray; + const defaultFields = require("../../../package-shared/data/defaultFields.json"); + //////////////////////////////////////// + let primaryKeyExists = finalTableArray.filter((_field) => _field.primaryKey); + //////////////////////////////////////// + defaultFields.forEach((field) => { + let fieldExists = finalTableArray.filter((_field) => _field.fieldName === field.fieldName); + if (fieldExists && fieldExists[0]) { + return; + } + else if (field.fieldName === "id" && !primaryKeyExists[0]) { + finalTableArray.unshift(field); + } + else { + finalTableArray.push(field); + } + }); + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + return finalTableArray; +} +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/shell/utils/updateTable.d.ts b/dist/package-shared/shell/utils/updateTable.d.ts new file mode 100644 index 0000000..290cf59 --- /dev/null +++ b/dist/package-shared/shell/utils/updateTable.d.ts @@ -0,0 +1,19 @@ +type Param = { + dbFullName: string; + tableName: string; + tableSchema: import("../../types").DSQL_TableSchemaType; + tableNameFull?: string; + tableInfoArray: import("../../types").DSQL_FieldSchemaType[]; + userId?: number | string | null; + dbSchema: import("../../types").DSQL_DatabaseSchemaType[]; + tableIndexes?: import("../../types").DSQL_IndexSchemaType[]; + clone?: boolean; + tableIndex?: number; + childDb?: boolean; + recordedDbEntry?: any; +}; +/** + * # Update table function + */ +export default function updateTable({ dbFullName, tableName, tableInfoArray, userId, dbSchema, tableIndexes, tableSchema, clone, childDb, tableIndex, tableNameFull, recordedDbEntry, }: Param): Promise; +export {}; diff --git a/dist/package-shared/shell/utils/updateTable.js b/dist/package-shared/shell/utils/updateTable.js new file mode 100644 index 0000000..a31e302 --- /dev/null +++ b/dist/package-shared/shell/utils/updateTable.js @@ -0,0 +1,417 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = updateTable; +const fs_1 = __importDefault(require("fs")); +const varDatabaseDbHandler_1 = __importDefault(require("./varDatabaseDbHandler")); +const defaultFieldsRegexp = /^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/; +const generateColumnDescription_1 = __importDefault(require("./generateColumnDescription")); +const dbHandler_1 = __importDefault(require("./dbHandler")); +/** + * # Update table function + */ +function updateTable(_a) { + return __awaiter(this, arguments, void 0, function* ({ dbFullName, tableName, tableInfoArray, userId, dbSchema, tableIndexes, tableSchema, clone, childDb, tableIndex, tableNameFull, recordedDbEntry, }) { + /** + * Initialize + * ========================================== + * @description Initial setup + */ + var _b; + /** @type {any[]} */ + let errorLogs = []; + /** + * @description Initialize table info array. This value will be + * changing depending on if a field is renamed or not. + */ + let upToDateTableFieldsArray = tableInfoArray; + /** + * Handle Table updates + * + * @description Try to undate table, catch error if anything goes wrong + */ + try { + /** + * @type {string[]} + * @description Table update query string array + */ + const updateTableQueryArray = []; + /** + * @type {string[]} + * @description Constriants query string array + */ + const constraintsQueryArray = []; + /** + * @description Push the query initial value + */ + updateTableQueryArray.push(`ALTER TABLE \`${tableName}\``); + if (childDb) { + try { + if (!recordedDbEntry) { + throw new Error("Recorded Db entry not found!"); + } + const existingTable = yield (0, varDatabaseDbHandler_1.default)({ + database: "datasquirel", + queryString: `SELECT * FROM user_database_tables WHERE db_id = ? AND table_slug = ?`, + queryValuesArray: [recordedDbEntry.id, tableName], + }); + /** @type {import("../../types").MYSQL_user_database_tables_table_def} */ + const table = existingTable === null || existingTable === void 0 ? void 0 : existingTable[0]; + if (!(table === null || table === void 0 ? void 0 : table.id)) { + const newTableEntry = yield (0, dbHandler_1.default)({ + query: `INSERT INTO user_database_tables SET ?`, + values: { + user_id: recordedDbEntry.user_id, + db_id: recordedDbEntry.id, + db_slug: recordedDbEntry.db_slug, + table_name: tableNameFull, + table_slug: tableName, + child_table: (tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.childTable) ? "1" : null, + child_table_parent_database: (tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.childTableDbFullName) || null, + child_table_parent_table: tableSchema.childTableName || null, + date_created: Date(), + date_created_code: Date.now(), + date_updated: Date(), + date_updated_code: Date.now(), + }, + database: "datasquirel", + }); + } + } + catch (error) { } + } + /** + * @type {import("../../types").DSQL_MYSQL_SHOW_INDEXES_Type[]} + * @description All indexes from MYSQL db + */ // @ts-ignore + const allExistingIndexes = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SHOW INDEXES FROM \`${tableName}\``, + database: dbFullName, + }); + /** + * @type {import("../../types").DSQL_MYSQL_SHOW_COLUMNS_Type[]} + * @description All columns from MYSQL db + */ // @ts-ignore + const allExistingColumns = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SHOW COLUMNS FROM \`${tableName}\``, + database: dbFullName, + }); + //////////////////////////////////////// + /** + * @type {string[]} + * @description Updated column names Array + */ + const updatedColumnsArray = []; + /** + * @description Iterate through every existing column + */ + for (let e = 0; e < allExistingColumns.length; e++) { + const { Field } = allExistingColumns[e]; + if (Field.match(defaultFieldsRegexp)) + continue; + /** + * @description This finds out whether the fieldName corresponds with the MSQL Field name + * if the fildName doesn't match any MYSQL Field name, the field is deleted. + */ + let existingEntry = upToDateTableFieldsArray.filter((column) => column.fieldName === Field || column.originName === Field); + if (existingEntry && existingEntry[0]) { + /** + * @description Check if Field name has been updated + */ + if (existingEntry[0].updatedField && + existingEntry[0].fieldName) { + updatedColumnsArray.push(existingEntry[0].fieldName); + const renameColumn = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER TABLE ${tableName} RENAME COLUMN \`${existingEntry[0].originName}\` TO \`${existingEntry[0].fieldName}\``, + database: dbFullName, + }); + console.log(`Column Renamed from "${existingEntry[0].originName}" to "${existingEntry[0].fieldName}"`); + /** + * Update Db Schema + * =================================================== + * @description Update Db Schema after renaming column + */ + try { + const userSchemaData = dbSchema; + const targetDbIndex = userSchemaData.findIndex((db) => db.dbFullName === dbFullName); + const targetTableIndex = userSchemaData[targetDbIndex].tables.findIndex((table) => table.tableName === tableName); + const targetFieldIndex = userSchemaData[targetDbIndex].tables[targetTableIndex].fields.findIndex((field) => field.fieldName === existingEntry[0].fieldName); + delete userSchemaData[targetDbIndex].tables[targetTableIndex].fields[targetFieldIndex]["originName"]; + delete userSchemaData[targetDbIndex].tables[targetTableIndex].fields[targetFieldIndex]["updatedField"]; + /** + * @description Set New Table Fields Array + */ + upToDateTableFieldsArray = + userSchemaData[targetDbIndex].tables[targetTableIndex].fields; + fs_1.default.writeFileSync(`${String(process.env.DSQL_USER_DB_SCHEMA_PATH)}/user-${userId}/main.json`, JSON.stringify(userSchemaData), "utf8"); + } + catch ( /** @type {any} */error) { + console.log("Update table error =>", error.message); + } + //////////////////////////////////////// + } + //////////////////////////////////////// + continue; + //////////////////////////////////////// + } + else { + yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER TABLE ${tableName} DROP COLUMN \`${Field}\``, + database: dbFullName, + }); + } + } + /** + * Handle MYSQL Table Indexes + * =================================================== + * @description Iterate through each table index(if available) + * and perform operations + */ + for (let f = 0; f < allExistingIndexes.length; f++) { + const { Key_name, Index_comment } = allExistingIndexes[f]; + /** + * @description Check if this index was specifically created + * by datasquirel + */ + if (Index_comment === null || Index_comment === void 0 ? void 0 : Index_comment.match(/schema_index/)) { + try { + const existingKeyInSchema = tableIndexes === null || tableIndexes === void 0 ? void 0 : tableIndexes.filter((indexObject) => indexObject.alias === Key_name); + if (!(existingKeyInSchema === null || existingKeyInSchema === void 0 ? void 0 : existingKeyInSchema[0])) + throw new Error(`This Index(${Key_name}) Has been Deleted!`); + } + catch (error) { + /** + * @description Drop Index: This happens when the MYSQL index is not + * present in the datasquirel DB schema + */ + yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER TABLE ${tableName} DROP INDEX \`${Key_name}\``, + database: dbFullName, + }); + } + } + } + /** + * Handle DATASQUIREL Table Indexes + * =================================================== + * @description Iterate through each datasquirel schema + * table index(if available), and perform operations + */ + if (tableIndexes && tableIndexes[0]) { + for (let g = 0; g < tableIndexes.length; g++) { + const { indexType, indexName, indexTableFields, alias } = tableIndexes[g]; + if (!(alias === null || alias === void 0 ? void 0 : alias.match(/./))) + continue; + /** + * @description Check for existing Index in MYSQL db + */ + try { + const existingKeyInDb = allExistingIndexes.filter((indexObject) => indexObject.Key_name === alias); + if (!existingKeyInDb[0]) + throw new Error("This Index Does not Exist"); + } + catch (error) { + /** + * @description Create new index if determined that it + * doesn't exist in MYSQL db + */ + yield (0, varDatabaseDbHandler_1.default)({ + queryString: `CREATE${(indexType === null || indexType === void 0 ? void 0 : indexType.match(/fullText/i)) ? " FULLTEXT" : ""} INDEX \`${alias}\` ON ${tableName}(${indexTableFields === null || indexTableFields === void 0 ? void 0 : indexTableFields.map((nm) => nm.value).map((nm) => `\`${nm}\``).join(",")}) COMMENT 'schema_index'`, + database: dbFullName, + }); + } + } + } + /** + * Handle MYSQL Foreign Keys + * =================================================== + * @description Iterate through each datasquirel schema + * table index(if available), and perform operations + */ + /** + * @description All MSQL Foreign Keys + * @type {import("../../types").DSQL_MYSQL_FOREIGN_KEYS_Type[] | null} + */ // @ts-ignore + const allForeignKeys = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`, + database: dbFullName, + }); + if (allForeignKeys) { + for (let c = 0; c < allForeignKeys.length; c++) { + const { CONSTRAINT_NAME } = allForeignKeys[c]; + /** + * @description Skip if Key is the PRIMARY Key + */ + if (CONSTRAINT_NAME.match(/PRIMARY/)) + continue; + /** + * @description Drop all foreign Keys to avoid MYSQL errors when adding/updating + * Foreign keys + */ + const dropForeignKey = yield (0, varDatabaseDbHandler_1.default)({ + queryString: `ALTER TABLE ${tableName} DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``, + database: dbFullName, + }); + } + } + /** + * Handle DATASQUIREL schema fields for current table + * =================================================== + * @description Iterate through each field object and + * perform operations + */ + for (let i = 0; i < upToDateTableFieldsArray.length; i++) { + const column = upToDateTableFieldsArray[i]; + const prevColumn = upToDateTableFieldsArray[i - 1]; + const nextColumn = upToDateTableFieldsArray[i + 1]; + const { fieldName, dataType, nullValue, primaryKey, autoIncrement, defaultValue, defaultValueLiteral, foreignKey, updatedField, } = column; + //////////////////////////////////////// + /** + * @description Skip default fields + */ + if (fieldName === null || fieldName === void 0 ? void 0 : fieldName.match(/^id$|^date_/)) + continue; + /** + * @description Skip columns that have been updated recently + */ + // if (updatedColumnsArray.includes(fieldName)) continue; + //////////////////////////////////////// + let updateText = ""; + //////////////////////////////////////// + /** @type {any} */ + let existingColumnIndex; + /** + * @description Existing MYSQL field object + */ + let existingColumn = allExistingColumns && allExistingColumns[0] + ? allExistingColumns.filter((_column, _index) => { + if (_column.Field === fieldName) { + existingColumnIndex = _index; + return true; + } + }) + : null; + /** + * @description Construct SQL text snippet for this field + */ + let { fieldEntryText } = (0, generateColumnDescription_1.default)({ + columnData: column, + }); + /** + * @description Modify Column(Field) if it already exists + * in MYSQL database + */ + if (existingColumn && ((_b = existingColumn[0]) === null || _b === void 0 ? void 0 : _b.Field)) { + const { Field, Type, Null, Key, Default, Extra } = existingColumn[0]; + let isColumnReordered = i < existingColumnIndex; + if (Field === fieldName && + !isColumnReordered && + (dataType === null || dataType === void 0 ? void 0 : dataType.toUpperCase()) === Type.toUpperCase()) { + updateText += `MODIFY COLUMN ${fieldEntryText}`; + // continue; + } + else { + if (userId) { + updateText += `MODIFY COLUMN ${fieldEntryText}${isColumnReordered + ? (prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.fieldName) + ? " AFTER `" + prevColumn.fieldName + "`" + : (nextColumn === null || nextColumn === void 0 ? void 0 : nextColumn.fieldName) + ? " BEFORE `" + nextColumn.fieldName + "`" + : "" + : ""}`; + } + else { + updateText += `MODIFY COLUMN ${fieldEntryText}`; + } + } + } + else if (prevColumn && prevColumn.fieldName) { + /** + * @description Add new Column AFTER previous column, if + * previous column exists + */ + updateText += `ADD COLUMN ${fieldEntryText} AFTER \`${prevColumn.fieldName}\``; + } + else if (nextColumn && nextColumn.fieldName) { + /** + * @description Add new Column BEFORE next column, if + * next column exists + */ + updateText += `ADD COLUMN ${fieldEntryText} BEFORE \`${nextColumn.fieldName}\``; + } + else { + /** + * @description Append new column to the end of existing columns + */ + updateText += `ADD COLUMN ${fieldEntryText}`; + } + //////////////////////////////////////// + /** + * @description Pust SQL code snippet to updateTableQueryArray Array + * Add a comma(,) to separate from the next snippet + */ + updateTableQueryArray.push(updateText + ","); + /** + * @description Handle foreing keys if available, and if there is no + * "clone" boolean = true + */ + if (!clone && foreignKey) { + const { destinationTableName, destinationTableColumnName, cascadeDelete, cascadeUpdate, foreignKeyName, } = foreignKey; + const foreinKeyText = `ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (\`${fieldName}\`) REFERENCES \`${destinationTableName}\`(\`${destinationTableColumnName}\`)${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}`; + // const foreinKeyText = `ADD CONSTRAINT \`${foreignKeyName}\` FOREIGN KEY (${fieldName}) REFERENCES ${destinationTableName}(${destinationTableColumnName})${cascadeDelete ? " ON DELETE CASCADE" : ""}${cascadeUpdate ? " ON UPDATE CASCADE" : ""}` + ","; + const finalQueryString = `ALTER TABLE \`${tableName}\` ${foreinKeyText}`; + const addForeignKey = yield (0, varDatabaseDbHandler_1.default)({ + database: dbFullName, + queryString: finalQueryString, + }); + if (!(addForeignKey === null || addForeignKey === void 0 ? void 0 : addForeignKey.serverStatus)) { + errorLogs.push(addForeignKey); + } + } + //////////////////////////////////////// + } + /** + * @description Construct final SQL query by combning all SQL snippets in + * updateTableQueryArray Arry, and trimming the final comma(,) + */ + const updateTableQuery = updateTableQueryArray + .join(" ") + .replace(/,$/, ""); + //////////////////////////////////////// + /** + * @description Check if SQL snippets array has more than 1 entries + * This is because 1 entry means "ALTER TABLE table_name" only, without any + * Alter directives like "ADD COLUMN" or "MODIFY COLUMN" + */ + if (updateTableQueryArray.length > 1) { + const updateTable = yield (0, varDatabaseDbHandler_1.default)({ + queryString: updateTableQuery, + database: dbFullName, + }); + return updateTable; + } + else { + /** + * @description If only 1 SQL snippet is left in updateTableQueryArray, this + * means that no updates have been made to the table + */ + return "No Changes Made to Table"; + } + } + catch ( /** @type {any} */error) { + console.log('Error in "updateTable" shell function =>', error.message); + return "Error in Updating Table"; + } + }); +} diff --git a/dist/package-shared/shell/utils/varDatabaseDbHandler.d.ts b/dist/package-shared/shell/utils/varDatabaseDbHandler.d.ts new file mode 100644 index 0000000..b8fd2c9 --- /dev/null +++ b/dist/package-shared/shell/utils/varDatabaseDbHandler.d.ts @@ -0,0 +1,12 @@ +import { DSQL_TableSchemaType } from "../../types"; +type Param = { + queryString: string; + queryValuesArray?: string[]; + database?: string; + tableSchema?: DSQL_TableSchemaType; +}; +/** + * # DB handler for specific database + */ +export default function varDatabaseDbHandler({ queryString, queryValuesArray, database, tableSchema, }: Param): Promise; +export {}; diff --git a/dist/package-shared/shell/utils/varDatabaseDbHandler.js b/dist/package-shared/shell/utils/varDatabaseDbHandler.js new file mode 100644 index 0000000..4ad6fe3 --- /dev/null +++ b/dist/package-shared/shell/utils/varDatabaseDbHandler.js @@ -0,0 +1,64 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = varDatabaseDbHandler; +const dbHandler_1 = __importDefault(require("./dbHandler")); +/** + * # DB handler for specific database + */ +function varDatabaseDbHandler(_a) { + return __awaiter(this, arguments, void 0, function* ({ queryString, queryValuesArray, database, tableSchema, }) { + /** + * Declare variables + * + * @description Declare "results" variable + */ + let results; + /** + * Fetch from db + * + * @description Fetch data from db if no cache + */ + try { + if (queryString && + queryValuesArray && + Array.isArray(queryValuesArray) && + queryValuesArray[0]) { + results = yield (0, dbHandler_1.default)({ + query: queryString, + values: queryValuesArray, + database, + }); + } + else { + results = yield (0, dbHandler_1.default)({ + query: queryString, + database, + }); + } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + } + catch ( /** @type {any} */error) { + console.log("Shell Vardb Error =>", error.message); + } + /** + * Return results + * + * @description Return results add to cache if "req" param is passed + */ + return results; + }); +} diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts new file mode 100644 index 0000000..46636bd --- /dev/null +++ b/dist/package-shared/types/index.d.ts @@ -0,0 +1,1254 @@ +import { RequestOptions } from "https"; +import { Editor } from "tinymce"; +export type DSQL_DatabaseFullName = string; +export interface DSQL_DatabaseSchemaType { + dbName: string; + dbSlug: string; + dbFullName: string; + dbDescription?: string; + dbImage?: string; + tables: DSQL_TableSchemaType[]; + childrenDatabases?: DSQL_ChildrenDatabaseObject[]; + childDatabase?: boolean; + childDatabaseDbFullName?: string; + updateData?: boolean; +} +export interface DSQL_ChildrenDatabaseObject { + dbFullName: string; +} +export interface DSQL_TableSchemaType { + tableName: string; + tableFullName: string; + tableDescription?: string; + fields: DSQL_FieldSchemaType[]; + indexes?: DSQL_IndexSchemaType[]; + childrenTables?: DSQL_ChildrenTablesType[]; + childTable?: boolean; + updateData?: boolean; + childTableName?: string; + childTableDbFullName?: string; + tableNameOld?: string; +} +export interface DSQL_ChildrenTablesType { + dbNameFull: string; + tableName: string; + tableNameFull?: string; +} +export interface DSQL_FieldSchemaType { + fieldName?: string; + originName?: string; + updatedField?: boolean; + dataType?: string; + nullValue?: boolean; + notNullValue?: boolean; + primaryKey?: boolean; + encrypted?: boolean; + autoIncrement?: boolean; + defaultValue?: string | number; + defaultValueLiteral?: string; + foreignKey?: DSQL_ForeignKeyType; + richText?: boolean; + json?: boolean; + yaml?: boolean; + html?: boolean; + css?: boolean; + javascript?: boolean; + shell?: boolean; + newTempField?: boolean; + defaultField?: boolean; + plainText?: boolean; + unique?: boolean; + pattern?: string; + patternFlags?: string; + onUpdate?: string; + onUpdateLiteral?: string; + onDelete?: string; + onDeleteLiteral?: string; + cssFiles?: string[]; +} +export interface DSQL_ForeignKeyType { + foreignKeyName?: string; + destinationTableName?: string; + destinationTableColumnName?: string; + destinationTableColumnType?: string; + cascadeDelete?: boolean; + cascadeUpdate?: boolean; +} +export interface DSQL_IndexSchemaType { + indexName?: string; + indexType?: string; + indexTableFields?: DSQL_IndexTableFieldType[]; + alias?: string; + newTempIndex?: boolean; +} +export interface DSQL_IndexTableFieldType { + value: string; + dataType: string; +} +export interface DSQL_MYSQL_SHOW_INDEXES_Type { + Key_name: string; + Table: string; + Column_name: string; + Collation: string; + Index_type: string; + Cardinality: string; + Index_comment: string; + Comment: string; +} +export interface DSQL_MYSQL_SHOW_COLUMNS_Type { + Field: string; + Type: string; + Null: string; + Key: string; + Default: string; + Extra: string; +} +export interface DSQL_MYSQL_FOREIGN_KEYS_Type { + CONSTRAINT_NAME: string; + CONSTRAINT_SCHEMA: string; + TABLE_NAME: string; +} +export interface DSQL_MYSQL_user_databases_Type { + id: number; + user_id: number; + db_full_name: string; + db_name: string; + db_slug: string; + db_image: string; + db_description: string; + active_clone: number; + active_clone_parent_db: string; + remote_connected?: number; + remote_db_full_name?: string; + remote_connection_host?: string; + remote_connection_key?: string; + remote_connection_type?: string; + user_priviledge?: string; + date_created?: string; + image_thumbnail?: string; + first_name?: string; + last_name?: string; + email?: string; +} +export interface PackageUserLoginRequestBody { + encryptionKey: string; + payload: any; + database: string; + additionalFields?: string[]; + email_login?: boolean; + email_login_code?: string; + email_login_field?: string; + token?: boolean; + social?: boolean; + dbSchema?: DSQL_DatabaseSchemaType; + skipPassword?: boolean; +} +export interface PackageUserLoginLocalBody { + payload: any; + additionalFields?: string[]; + email_login?: boolean; + email_login_code?: string; + email_login_field?: string; + token?: boolean; + social?: boolean; + dbSchema?: DSQL_DatabaseSchemaType; + skipPassword?: boolean; +} +export type ImageInputFileToBase64FunctionReturn = { + imageBase64?: string; + imageBase64Full?: string; + imageName?: string; + imageSize?: number; +}; +export interface GetReqQueryObject { + db: string; + query: string; + queryValues?: string; + tableName?: string; +} +export type DATASQUIREL_LoggedInUser = { + id: number; + uuid?: string; + first_name: string; + last_name: string; + email: string; + phone?: string; + user_type?: string; + username?: string; + image?: string; + image_thumbnail?: string; + social_login?: number; + social_platform?: string; + social_id?: string; + verification_status?: number; + csrf_k: string; + logged_in_status: boolean; + date: number; +} & { + [key: string]: any; +}; +export interface AuthenticatedUser { + success: boolean; + payload: DATASQUIREL_LoggedInUser | null; + msg?: string; + userId?: number; + cookieNames?: any; +} +export interface SuccessUserObject { + id: number; + first_name: string; + last_name: string; + email: string; +} +export interface AddUserFunctionReturn { + success: boolean; + payload?: SuccessUserObject | null; + msg?: string; + sqlResult?: any; +} +export interface GoogleIdentityPromptNotification { + getMomentType: () => string; + getDismissedReason: () => string; + getNotDisplayedReason: () => string; + getSkippedReason: () => string; + isDismissedMoment: () => boolean; + isDisplayMoment: () => boolean; + isDisplayed: () => boolean; + isNotDisplayed: () => boolean; + isSkippedMoment: () => boolean; +} +export type UserDataPayload = { + first_name: string; + last_name: string; + email: string; + password?: string; + username?: string; +} & { + [key: string]: any; +}; +export interface GetUserFunctionReturn { + success: boolean; + payload: { + id: number; + first_name: string; + last_name: string; + username: string; + email: string; + phone: string; + social_id: [string]; + image: string; + image_thumbnail: string; + verification_status: [number]; + } | null; +} +export interface ReauthUserFunctionReturn { + success: boolean; + payload: DATASQUIREL_LoggedInUser | null; + msg?: string; + userId?: number; + token?: string; +} +export interface UpdateUserFunctionReturn { + success: boolean; + payload?: Object[] | string; +} +export interface GetReturn { + success: boolean; + payload?: any; + msg?: string; + error?: string; + schema?: DSQL_TableSchemaType; +} +export interface GetSchemaRequestQuery { + database?: string; + table?: string; + field?: string; + user_id?: string | number; +} +export interface GetSchemaAPICredentialsParam { + key: string; +} +export type GetSchemaAPIParam = GetSchemaRequestQuery & GetSchemaAPICredentialsParam; +export interface PostReturn { + success: boolean; + payload?: Object[] | string | PostInsertReturn; + msg?: string; + error?: any; + schema?: DSQL_TableSchemaType; +} +export interface PostDataPayload { + action: "insert" | "update" | "delete"; + table: string; + data?: object; + identifierColumnName?: string; + identifierValue?: string; + duplicateColumnName?: string; + duplicateColumnValue?: string; + update?: boolean; +} +export interface LocalPostReturn { + success: boolean; + payload?: any; + msg?: string; + error?: string; +} +export interface LocalPostQueryObject { + query: string | PostDataPayload; + tableName?: string; + queryValues?: string[]; +} +export interface PostInsertReturn { + fieldCount: number; + affectedRows: number; + insertId: number; + serverStatus: number; + warningCount: number; + message: string; + protocol41: boolean; + changedRows: number; +} +export type UserType = DATASQUIREL_LoggedInUser; +export interface ApiKeyDef { + name: string; + scope: string; + date_created: string; + apiKeyPayload: string; +} +export interface MetricsType { + dbCount: number; + tablesCount: number; + mediaCount: number; + apiKeysCount: number; +} +export interface DashboardContextType { + user?: UserType; + databases?: DSQL_MYSQL_user_databases_Type[]; + setTargetDatabase?: React.Dispatch>; + targetDatabase?: DSQL_MYSQL_user_databases_Type; + metrics?: MetricsType; +} +export interface AddDbContextType { + user?: UserType; + databases?: DSQL_MYSQL_user_databases_Type[]; + dbImage?: string | null | ImageObjectType; + setDbImage?: React.Dispatch>; + query?: any; + duplicateDb?: DSQL_MYSQL_user_databases_Type; +} +export interface EditDbContextType { + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + dbImage?: string | null | ImageObjectType; + setDbImage?: React.Dispatch>; +} +export interface RichTextEditorsRefArray { + fieldName: string; + ref: React.MutableRefObject; +} +export interface JSONTextEditorsRefArray { + fieldName: string; + ref: React.MutableRefObject; +} +export interface TableEntriesContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + entries: any[]; + targetEntry?: any; + setTargetEntry: React.Dispatch>; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query?: any; + confirmedDelegetedUser?: any; + activeEntries: any[] | null; + setActiveEntries: React.Dispatch>; + targetField: React.MutableRefObject; + searchTerm: React.MutableRefObject; + entriesCount: number; +} +export interface AddEntryContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query: any; + duplicateEntry?: any; + confirmedDelegetedUser: any; +} +export interface UserDatabasesContextType { + user: UserType; + users: any[]; + targetUser: any; + setTargetUser: React.Dispatch>; + databases: DSQL_MYSQL_user_databases_Type[]; +} +export interface SettingsPageContextType { + user: UserType; + image: any; + setImage: React.Dispatch>; + activeUser: any; +} +export interface MediaFolderPageContextType { + user: UserType; + media: any[]; + targetMedia: any; + setTargetMedia: React.Dispatch>; + folders: any[]; + query: any; + staticHost: string; + folder: string; +} +export interface TablesContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + tables: MYSQL_user_database_tables_table_def[]; + targetTable: MYSQL_user_database_tables_table_def | null; + setTargetTable: React.Dispatch>; + query: any; + confirmedDelegetedUser: any; +} +export interface EditTableContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch>; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch>; + pageRefresh: number; + setPageRefresh: React.Dispatch>; + refreshFieldsListRef: React.MutableRefObject> | undefined>; + dbSchemaData: DSQL_DatabaseSchemaType[]; + query: any; + confirmedDelegetedUser: any; +} +export interface SingleDatabaseContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + tables: MYSQL_user_database_tables_table_def[]; + targetTable: MYSQL_user_database_tables_table_def | null; + setTargetTable: React.Dispatch>; + query: any; + confirmedDelegetedUser: any; +} +export interface ApiKeysContextType { + user: UserType; + apiKeys: any[]; + setApiKeys: React.Dispatch>; + targetApiKey: any | null; + setTargetApiKey: React.Dispatch>; + newApiKey: any | null; + setNewApiKey: React.Dispatch>; +} +export interface LoginFormContextType { + user?: UserType | null; + loading: boolean; + setLoading: React.Dispatch>; + alert: string | boolean; + setAlert: React.Dispatch>; +} +export interface CreateAccountContextType { + user?: UserType | null; + query: CreateAccountQueryType; + invitingUser: any; +} +export interface CreateAccountQueryType { + invite?: number; + database_access?: string; + priviledge?: string; + email?: string; +} +export interface DocsAsidePageObject { + id: number; + title: string; + slug: string; + parent_id?: number; + level?: number; +} +export interface AllUserUsersContextType { + user: UserType; + users: MYSQL_delegated_users_table_def[]; + targetUser: MYSQL_user_users_table_def | null; + setTargetUser: React.Dispatch>; + databases: DSQL_MYSQL_user_databases_Type[]; + pendingInvitations: MYSQL_invitations_table_def[]; + pendingInvitationsReceived: any[]; + adminUsers: any[]; + invitedAccounts: any[]; +} +export interface AddSocialLoginContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + query: any; + socialLogins: SocialLoginObjectType[]; +} +export interface DelegatedDbContextType { + user: UserType; + users: MYSQL_user_users_table_def[]; + targetUser: MYSQL_user_users_table_def | null; + setTargetUser: React.Dispatch>; + database: DSQL_MYSQL_user_databases_Type; +} +export interface AddUserUserContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + query: any; + confirmedDelegetedUser: any; +} +export interface UserUsersContextType { + user: UserType; + users: MYSQL_user_users_table_def[]; + targetUser: MYSQL_user_users_table_def; + setTargetUser: React.Dispatch>; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + query: any; + confirmedDelegetedUser: any; +} +export interface DatabaseSingleUserContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + singleUser: MYSQL_user_users_table_def; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + query: any; + confirmedDelegetedUser: any; +} +export interface SingleUserUserContextType { + user: UserType; + singleUser: MYSQL_user_users_table_def; +} +export interface AddUserContextType { + user: UserType; + users: MYSQL_delegated_users_table_def[]; + databases: DSQL_MYSQL_user_databases_Type[]; + query: any; +} +export interface MediaContextType { + user: UserType; + media: MYSQL_user_media_table_def[]; + targetMedia: MYSQL_user_media_table_def | null; + setTargetMedia: React.Dispatch>; + folders: string[]; + staticHost: string; +} +export interface MediaSubFolderContextType { + user: UserType; + media: MYSQL_user_media_table_def[]; + targetMedia: MYSQL_user_media_table_def | null; + setTargetMedia: React.Dispatch>; + folders: string[]; + query: any; + folder: string; + staticHost: string; +} +export interface FieldsContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch>; + refreshFieldsListRef: React.MutableRefObject> | undefined>; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch>; + updateTableAfterFieldsUpdateFunction: () => void; + query: any; + confirmedDelegetedUser: any; +} +export interface SingleTableContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + tableRecord: MYSQL_user_database_tables_table_def; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch>; + tableIndexes: DSQL_IndexSchemaType[]; + setTableIndexes: React.Dispatch>; + dbSchemaData: DSQL_DatabaseSchemaType[]; + entries: any[]; + targetEntry: any; + setTargetEntry: React.Dispatch>; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query: any; + confirmedDelegetedUser: any; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch>; + refreshFieldsListRef: React.MutableRefObject>>; + updateTableAfterFieldsUpdateFunction: () => void; + entriesCount: number; +} +export interface SingleEntryContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + entry: any; + targetEntry: any; + setTargetEntry: React.Dispatch>; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query: any; + confirmedDelegetedUser: any; + prevEntry: any; + nextEntry: any; +} +export interface UserSchemaContextType { + user: UserType; + dbSchemaData: DSQL_DatabaseSchemaType[]; +} +export interface ConnectContextType { + user: UserType; + query: any; + mariadbUserCred: MariaDBUserCredType; + mariadbUsers: MYSQL_mariadb_users_table_def[]; + targetMariadbUser: MYSQL_mariadb_users_table_def | null; + setTargetMariadbUser: React.Dispatch>; + refresh: number; + setRefresh: React.Dispatch>; +} +export interface MYSQL_mariadb_users_table_def { + id?: number; + user_id?: number; + username?: string; + host?: string; + password?: string; + primary?: number; + grants?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} +export interface DbContextType { + user?: UserType; + databases?: DSQL_MYSQL_user_databases_Type[]; + targetDatabase?: DSQL_MYSQL_user_databases_Type; + setTargetDatabase?: React.Dispatch>; +} +export interface MariaDBUserCredType { + mariadb_user?: string; + mariadb_host?: string; + mariadb_pass?: string; +} +export interface AddTableContextType { + user: UserType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + database: DSQL_MYSQL_user_databases_Type; + tables: DSQL_TableSchemaType[]; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch>; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch>; + pageRefresh: number | null; + setPageRefresh: React.Dispatch>; + refreshFieldsListRef: React.MutableRefObject>>; + query: any; +} +export interface DbSchemaContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + dbImage: string; + setDbImage: React.Dispatch>; + dbSchemaData: DSQL_DatabaseSchemaType[]; + tables: any[]; +} +export interface DbShellContextType { + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + dbImage?: string; + setDbImage?: React.Dispatch>; + dbSchemaData?: DSQL_DatabaseSchemaType[]; + tables?: any[]; +} +export interface DbConnectContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + targetDbSchema: DSQL_DatabaseSchemaType; + query: any; +} +export interface ImageObjectType { + imageName?: string; + mimeType?: string; + imageSize?: number; + private?: boolean; + imageBase64?: string; + imageBase64Full?: string; +} +export interface FileObjectType { + fileName?: string; + private?: boolean; + fileType?: string; + fileSize?: number; + fileBase64?: string; + fileBase64Full?: string; +} +export interface SocialLoginObjectType { + platform?: string; + paradigm?: string; + clientId?: string; + clientSecret?: string; + callbackUrl?: string; + domain1?: string; + domain2?: string; + domain3?: string; +} +export interface DbConnectType { + url: string; + key: string; + database: DSQL_MYSQL_user_databases_Type; + dbSchema: DSQL_DatabaseSchemaType; + type: "pull" | "push"; + remoteDbs?: DSQL_DatabaseSchemaType[]; + targetDb?: DSQL_DatabaseSchemaType; +} +export interface MYSQL_MediaType { + id?: number; + user_id?: number; + media_name?: string; + folder?: string; + media_url?: string; + media_thumbnail_url?: string; + media_type?: string; + width?: string; + height?: string; + size?: string; + private?: string; +} +export interface UserFileObject { + title?: string; + path?: string; + data?: string; +} +export interface UserFileObject2 { + type?: string; + name?: string; + root?: string; + content?: UserFileObject2[]; +} +export interface MYSQL_user_users_table_def { + id?: number; + user_id?: number; + invited_user_id?: number; + database?: string; + database_access?: string; + first_name?: string; + last_name?: string; + email?: string; + username?: string; + password?: string; + phone?: string; + user_type?: string; + user_priviledge?: string; + image?: string; + image_thumbnail?: string; + city?: string; + state?: string; + country?: string; + zip_code?: string; + address?: string; + social_login?: number; + social_platform?: string; + social_id?: string; + verification_status?: number; + more_user_data?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; + inviteeFirstName?: string; + inviteeLastName?: string; + inviteeEmail?: string; + inviteeImage?: string; +} +export interface MYSQL_user_database_tables_table_def { + id?: number; + user_id?: number; + db_id?: number; + db_slug?: string; + table_name?: string; + table_slug?: string; + table_description?: string; + child_table?: number; + child_table_parent_database?: string; + child_table_parent_table?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} +export interface MYSQL_user_media_table_def { + id?: number; + user_id?: number; + media_name?: string; + folder?: string; + media_url?: string; + media_thumbnail_url?: string; + media_path?: string; + media_thumbnail_path?: string; + media_type?: string; + width?: number; + height?: number; + size?: number; + private?: number; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} +export interface MYSQL_delegated_users_table_def { + id?: number; + user_id?: number; + delegated_user_id?: number; + permissions?: string; + permission_level_code?: number; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} +export interface MYSQL_invitations_table_def { + id?: number; + inviting_user_id?: number; + invited_user_email?: string; + invitation_status?: string; + database_access?: string; + priviledge?: string; + db_tables_data?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} +export interface MYSQL_docs_pages_table_def { + id?: number; + title?: string; + slug?: string; + description?: string; + content?: string; + text_content?: string; + level?: number; + page_order?: number; + parent_id?: number; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} +export interface MYSQL_delegated_user_tables_table_def { + id?: number; + delegated_user_id?: number; + root_user_id?: number; + database?: string; + table?: string; + priviledge?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} +export type ApiKeyObject = { + user_id?: string | number; + full_access?: boolean; + sign?: string; + date_code?: number; + target_database?: string; + target_table?: string; + error?: string; +}; +export type AddApiKeyRequestBody = { + api_key_name: string; + api_key_slug: string; + api_key_scope?: "fullAccess" | "readOnly"; + target_database?: string; + target_table?: string; +}; +export type CheckApiCredentialsFn = (param: CheckApiCredentialsFnParam) => ApiKeyObject | null | undefined; +export type CheckApiCredentialsFnParam = { + key?: string; + database?: string; + table?: string; + user_id?: string | number; + media?: boolean; +}; +export type FetchApiFn = (url: string, options?: FetchApiOptions, csrf?: boolean) => Promise; +export type FetchApiOptions = RequestInit & { + method: "POST" | "GET" | "DELETE" | "PUT" | "PATCH" | "post" | "get" | "delete" | "put" | "patch"; + body?: object | string; + headers?: FetchHeader; + query?: { + [key: string]: any; + }; +}; +export type AuthCsrfHeaderName = "x-csrf-auth"; +type FetchHeader = HeadersInit & { + [key in AuthCsrfHeaderName]?: string | null; +} & { + [key: string]: any; +}; +export type FetchApiReturn = { + success: boolean; + payload: any; + msg?: string; + [key: string]: any; +}; +export declare const ServerQueryOperators: readonly ["AND", "OR"]; +export declare const ServerQueryEqualities: readonly ["EQUAL", "LIKE", "NOT EQUAL"]; +export type ServerQueryParam = { + selectFields?: string[]; + query?: ServerQueryQueryObject; + limit?: number; + offset?: number; + order?: { + field: string; + strategy: "ASC" | "DESC"; + }; + searchOperator?: (typeof ServerQueryOperators)[number]; + searchEquality?: (typeof ServerQueryEqualities)[number]; + addUserId?: { + fieldName: string; + }; + join?: ServerQueryParamsJoin[]; + [key: string]: any; +}; +export type ServerQueryObject = { + value?: string | string[]; + operator?: (typeof ServerQueryOperators)[number]; + equality?: (typeof ServerQueryEqualities)[number]; + tableName?: string; + __query?: { + [key in keyof T]: Omit, "__query">; + }; +}; +export type ServerQueryQueryObject = { + [key in keyof T]: ServerQueryObject; +}; +export type FetchDataParams = { + path: string; + method?: "GET" | "POST" | "PATCH" | "PUT" | "DELETE"; + body?: object | string; + query?: AuthFetchQuery; + tableName?: string; +}; +export type AuthFetchQuery = ServerQueryParam & { + [key: string]: any; +}; +export type ServerQueryParamsJoin = { + joinType: "INNER JOIN" | "JOIN" | "LEFT JOIN" | "RIGHT JOIN"; + alias?: string; + tableName: Table; + match?: ServerQueryParamsJoinMatchObject | ServerQueryParamsJoinMatchObject[]; + selectFields?: (keyof Field | { + field: keyof Field; + alias?: string; + count?: boolean; + })[]; + operator?: (typeof ServerQueryOperators)[number]; +}; +export type ServerQueryParamsJoinMatchObject = { + /** Field name from the **Root Table** */ + source: string | ServerQueryParamsJoinMatchSourceTargetObject; + /** Field name from the **Join Table** */ + target?: keyof Field | ServerQueryParamsJoinMatchSourceTargetObject; + /** A literal value: No source and target Needed! */ + targetLiteral?: string; +}; +export type ServerQueryParamsJoinMatchSourceTargetObject = { + tableName: string; + fieldName: string; +}; +export type ApiConnectBody = { + url: string; + key: string; + database: DSQL_MYSQL_user_databases_Type; + dbSchema: DSQL_DatabaseSchemaType; + type: "pull" | "push"; + user_id?: string | number; +}; +export type SuUserType = { + email: string; + password: string; + authKey: string; + logged_in_status: boolean; + date: number; +}; +export type MariadbRemoteServerObject = { + host: string; + port: number; + primary?: boolean; + loadBalanced?: boolean; + users?: MariadbRemoteServerUserObject[]; +}; +export type MariadbRemoteServerUserObject = { + name: string; + password: string; + host: string; +}; +export type APILoginFunctionParams = { + encryptionKey: string; + email: string; + username?: string; + password?: string; + database: string; + additionalFields?: string[]; + email_login?: boolean; + email_login_code?: string; + email_login_field?: string; + token?: boolean; + skipPassword?: boolean; + social?: boolean; + useLocal?: boolean; +}; +export type APILoginFunctionReturn = { + success: boolean; + msg?: string; + payload?: DATASQUIREL_LoggedInUser | null; + userId?: number | string; + key?: string; + token?: string; + csrf?: string; + cookieNames?: any; +}; +export type APICreateUserFunctionParams = { + encryptionKey?: string; + payload: any; + database: string; + userId?: string | number; + useLocal?: boolean; +}; +export type APICreateUserFunction = (params: APICreateUserFunctionParams) => Promise; +/** + * API Get User Function + */ +export type APIGetUserFunctionParams = { + fields: string[]; + dbFullName: string; + userId: string | number; + useLocal?: boolean; +}; +/** + * API Google Login Function + */ +export type APIGoogleLoginFunctionParams = { + token: string; + database: string; + additionalFields?: string[]; + additionalData?: { + [key: string]: string | number; + }; +}; +export type APIGoogleLoginFunction = (params: APIGoogleLoginFunctionParams) => Promise; +/** + * Handle Social DB Function + */ +export type HandleSocialDbFunctionParams = { + database?: string; + social_id: string | number; + email: string; + social_platform: string; + payload: any; + invitation?: any; + supEmail?: string; + additionalFields?: string[]; + useLocal?: boolean; +}; +export type HandleSocialDbFunctionReturn = { + success: boolean; + user?: DATASQUIREL_LoggedInUser | null; + msg?: string; + social_id?: string | number; + social_platform?: string; + payload?: any; + alert?: boolean; + newUser?: any; + error?: any; +} | null; +/** + * Handle Social User Auth on Datasquirel Database + * ============================================================================== + * + * @description This function handles all social login logic after the social user + * has been authenticated and userpayload is present. The payload MUST contain the + * specified fields because this funciton will create a new user if the authenticated + * user does not exist. + * + * @param {HandleSocialDbFunctionParams} params - function parameters inside an object + * + * @returns {Promise} - Response object + */ +export type HandleSocialDbFunction = (params: HandleSocialDbFunctionParams) => Promise; +export type ApiReauthUserReturn = { + success: boolean; + payload?: { + [key: string]: any; + } | null; + msg?: string; + userId?: string | number; +}; +export type GoogleAccessTokenObject = { + access_token: string; + token_type: "Bearer"; + expires_in: number; + scope: string; + authuser: string; + prompt: string; +}; +export type GoogleOauth2User = { + sub: string; + name: string; + given_name: string; + family_name: string; + picture: string; + email: string; + email_verified: boolean; +}; +export interface AceEditorOptions { + animatedScroll?: boolean; + autoScrollEditorIntoView?: boolean; + behavioursEnabled?: boolean; + copyWithEmptySelection?: boolean; + cursorStyle?: "ace" | "slim" | "smooth" | "wide"; + customScrollbar?: boolean; + displayIndentGuides?: boolean; + dragDelay?: number; + dragEnabled?: boolean; + enableAutoIndent?: boolean; + enableBasicAutocompletion?: boolean | any[]; + enableKeyboardAccessibility?: boolean; + enableLiveAutocompletion?: boolean | any[]; + enableMobileMenu?: boolean; + enableMultiselect?: boolean; + enableSnippets?: boolean; + fadeFoldWidgets?: boolean; + firstLineNumber?: number; + fixedWidthGutter?: boolean; + focusTimeout?: number; + foldStyle?: "markbegin" | "markbeginend" | "manual"; + fontFamily?: string; + fontSize?: number; + hScrollBarAlwaysVisible?: boolean; + hasCssTransforms?: boolean; + highlightActiveLine?: boolean; + highlightGutterLine?: boolean; + highlightIndentGuides?: boolean; + highlightSelectedWord?: boolean; + indentedSoftWrap?: boolean; + keyboardHandler?: string; + liveAutocompletionDelay?: number; + liveAutocompletionThreshold?: number; + maxLines?: number; + maxPixelHeight?: number; + mergeUndoDeltas?: boolean | "always"; + minLines?: number; + mode?: string; + navigateWithinSoftTabs?: boolean; + newLineMode?: AceAjax.NewLineMode; + overwrite?: boolean; + placeholder?: string; + printMargin?: number | boolean; + printMarginColumn?: number; + readOnly?: boolean; + relativeLineNumbers?: boolean; + scrollPastEnd?: number; + scrollSpeed?: number; + selectionStyle?: string; + session?: any; + showFoldWidgets?: boolean; + showFoldedAnnotations?: boolean; + showGutter?: boolean; + showInvisibles?: boolean; + showLineNumbers?: boolean; + showPrintMargin?: boolean; + tabSize?: number; + textInputAriaLabel?: string; + theme?: string; + tooltipFollowsMouse?: boolean; + useSoftTabs?: boolean; + useSvgGutterIcons?: boolean; + useWorker?: boolean; + vScrollBarAlwaysVisible?: boolean; + value?: string; + wrap?: number | boolean | "off" | "free" | "printmargin"; + wrapBehavioursEnabled?: boolean; + wrapMethod?: "code" | "text" | "auto"; +} +export type SendOneTimeCodeEmailResponse = { + success: boolean; + code?: string; + createdAt?: number; + email?: string; + msg?: string; +}; +export type CookieObject = { + name: string; + value: string; + domain?: string; + path?: string; + expires?: Date; + maxAge?: number; + secure?: boolean; + httpOnly?: boolean; + sameSite?: "Strict" | "Lax" | "None"; + priority?: "Low" | "Medium" | "High"; +}; +export type HttpRequestParams = RequestOptions & { + scheme?: "http" | "https"; + body?: ReqObj; + query?: ReqObj; + urlEncodedFormBody?: boolean; +}; +export type HttpRequestFunction = (param: HttpRequestParams) => Promise>; +export type HttpFunctionResponse = { + status: number; + data?: ResObj; + error?: string; + str?: string; + requestedPath?: string; +}; +export {}; diff --git a/dist/package-shared/types/index.js b/dist/package-shared/types/index.js new file mode 100644 index 0000000..60e56d6 --- /dev/null +++ b/dist/package-shared/types/index.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ServerQueryEqualities = exports.ServerQueryOperators = void 0; +exports.ServerQueryOperators = ["AND", "OR"]; +exports.ServerQueryEqualities = ["EQUAL", "LIKE", "NOT EQUAL"]; diff --git a/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts new file mode 100644 index 0000000..a382337 --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts @@ -0,0 +1,4 @@ +/** + * # DSQL user read-only DB handler + */ +export default function DB_HANDLER(...args: any[]): Promise; diff --git a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js new file mode 100644 index 0000000..74dc354 --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js @@ -0,0 +1,50 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = DB_HANDLER; +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); +const MASTER = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # DSQL user read-only DB handler + */ +function DB_HANDLER(...args) { + return __awaiter(this, void 0, void 0, function* () { + try { + const results = yield MASTER.query(...args); + /** ********************* Clean up */ + yield MASTER.end(); + return JSON.parse(JSON.stringify(results)); + } + catch (error) { + console.log("DB Error =>", error); + return { + success: false, + error: error.message, + }; + } + }); +} diff --git a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.d.ts new file mode 100644 index 0000000..6f4b5bf --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.d.ts @@ -0,0 +1,14 @@ +type Param = { + paradigm: "Full Access" | "FA" | "Read Only"; + database: string; + queryString: string; + queryValues?: string[]; +}; +/** + * # DSQL user read-only DB handler + */ +export default function DSQL_USER_DB_HANDLER({ paradigm, database, queryString, queryValues, }: Param): Promise | { + success: boolean; + error: any; +}; +export {}; diff --git a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js new file mode 100644 index 0000000..2cd4fa3 --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js @@ -0,0 +1,103 @@ +"use strict"; +// @ts-check +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = DSQL_USER_DB_HANDLER; +const fs_1 = __importDefault(require("fs")); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); +let DSQL_USER = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_READ_ONLY_USERNAME, + password: process.env.DSQL_DB_READ_ONLY_PASSWORD, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # DSQL user read-only DB handler + */ +function DSQL_USER_DB_HANDLER({ paradigm, database, queryString, queryValues, }) { + try { + return new Promise((resolve, reject) => { + const fullAccess = (paradigm === null || paradigm === void 0 ? void 0 : paradigm.match(/full.access|^fa$/i)) + ? true + : false; + try { + if (fullAccess) { + DSQL_USER = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, + password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, + database: database, + ssl: (0, grabDbSSL_1.default)(), + }, + }); + } + else { + DSQL_USER = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_READ_ONLY_USERNAME, + password: process.env.DSQL_DB_READ_ONLY_PASSWORD, + database: database, + ssl: (0, grabDbSSL_1.default)(), + }, + }); + } + /** + * ### Run query Function + * @param {any} results + */ + function runQuery(results) { + DSQL_USER.end(); + resolve(JSON.parse(JSON.stringify(results))); + } + /** + * ### Query Error + * @param {any} err + */ + function queryError(err) { + DSQL_USER.end(); + resolve({ + error: err.message, + queryStringGenerated: queryString, + queryValuesGenerated: queryValues, + sql: err.sql, + }); + } + if (queryValues && + Array.isArray(queryValues) && + queryValues[0]) { + DSQL_USER.query(queryString, queryValues) + .then(runQuery) + .catch(queryError); + } + else { + DSQL_USER.query(queryString) + .then(runQuery) + .catch(queryError); + } + //////////////////////////////////////// + } + catch ( /** @type {any} */error) { + //////////////////////////////////////// + fs_1.default.appendFileSync("./.tmp/dbErrorLogs.txt", error.message + "\n" + Date() + "\n\n\n", "utf8"); + resolve({ + error: error.message, + }); + } + }); + } + catch ( /** @type {any} */error) { + return { + success: false, + error: error.message, + }; + } +} +module.exports = DSQL_USER_DB_HANDLER; diff --git a/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.d.ts new file mode 100644 index 0000000..5914fda --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.d.ts @@ -0,0 +1,4 @@ +/** + * # DSQL user read-only DB handler + */ +export default function LOCAL_DB_HANDLER(...args: any[]): Promise; diff --git a/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.js new file mode 100644 index 0000000..49e27cf --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.js @@ -0,0 +1,59 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = LOCAL_DB_HANDLER; +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); +/** + * # DSQL user read-only DB handler + */ +function LOCAL_DB_HANDLER(...args) { + return __awaiter(this, void 0, void 0, function* () { + const MASTER = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, + onConnect: () => { + console.log("Connection Successful!"); + }, + onConnectError: (/** @type {any} */ err) => { + console.log("Connection Error", err.message); + }, + onError: (/** @type {any} */ err) => { + console.log("Client Error", err.message); + }, + }); + console.log("Querying ..."); + try { + const results = yield MASTER.query(...args); + yield MASTER.end(); + return JSON.parse(JSON.stringify(results)); + } + catch ( /** @type {any} */error) { + console.log("DB Error =>", error.message); + return { + success: false, + error: error.message, + }; + } + }); +} diff --git a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.d.ts new file mode 100644 index 0000000..f40dff3 --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.d.ts @@ -0,0 +1,7 @@ +/** + * # DSQL user read-only DB handler + */ +export default function NO_DB_HANDLER(...args: any[]): Promise | { + success: boolean; + error: any; +}; diff --git a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js new file mode 100644 index 0000000..d8acf26 --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js @@ -0,0 +1,44 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = NO_DB_HANDLER; +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); +let NO_DB = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # DSQL user read-only DB handler + */ +function NO_DB_HANDLER(...args) { + try { + return new Promise((resolve, reject) => { + NO_DB.query(...args) + .then((results) => { + NO_DB.end(); + resolve(JSON.parse(JSON.stringify(results))); + }) + .catch((err) => { + NO_DB.end(); + resolve({ + error: err.message, + sql: err.sql, + }); + }); + }); + } + catch (error) { + return { + success: false, + error: error.message, + }; + } +} diff --git a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.d.ts new file mode 100644 index 0000000..e671f45 --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.d.ts @@ -0,0 +1,7 @@ +/** + * # Root DB handler + */ +export default function ROOT_DB_HANDLER(...args: any[]): Promise | { + success: boolean; + error: any; +}; diff --git a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js new file mode 100644 index 0000000..2c0d27d --- /dev/null +++ b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js @@ -0,0 +1,45 @@ +"use strict"; +// @ts-check +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = ROOT_DB_HANDLER; +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); +let NO_DB = (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), + }, +}); +/** + * # Root DB handler + */ +function ROOT_DB_HANDLER(...args) { + try { + return new Promise((resolve, reject) => { + NO_DB.query(...args) + .then((results) => { + NO_DB.end(); + resolve(JSON.parse(JSON.stringify(results))); + }) + .catch((err) => { + NO_DB.end(); + resolve({ + error: err.message, + sql: err.sql, + }); + }); + }); + } + catch (error) { + return { + success: false, + error: error.message, + }; + } +} diff --git a/dist/package-shared/utils/backend/grabDbSSL.d.ts b/dist/package-shared/utils/backend/grabDbSSL.d.ts new file mode 100644 index 0000000..4ca0dd9 --- /dev/null +++ b/dist/package-shared/utils/backend/grabDbSSL.d.ts @@ -0,0 +1,8 @@ +type Return = string | (import("tls").SecureContextOptions & { + rejectUnauthorized?: boolean | undefined; +}) | undefined; +/** + * # Grall SSL + */ +export default function grabDbSSL(): Return; +export {}; diff --git a/dist/package-shared/utils/backend/grabDbSSL.js b/dist/package-shared/utils/backend/grabDbSSL.js new file mode 100644 index 0000000..f17481a --- /dev/null +++ b/dist/package-shared/utils/backend/grabDbSSL.js @@ -0,0 +1,24 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = grabDbSSL; +const fs_1 = __importDefault(require("fs")); +/** + * # Grall SSL + */ +function grabDbSSL() { + const SSL_DIR = process.env.DSQL_SSL_DIR; + if (!(SSL_DIR === null || SSL_DIR === void 0 ? void 0 : SSL_DIR.match(/./))) { + return undefined; + } + const caFilePath = `${SSL_DIR}/ca-cert.pem`; + if (!fs_1.default.existsSync(caFilePath)) { + console.log(`${caFilePath} does not exist`); + return undefined; + } + return { + ca: fs_1.default.readFileSync(`${SSL_DIR}/ca-cert.pem`), + }; +} diff --git a/dist/package-shared/utils/backend/parseCookies.d.ts b/dist/package-shared/utils/backend/parseCookies.d.ts new file mode 100644 index 0000000..f90911e --- /dev/null +++ b/dist/package-shared/utils/backend/parseCookies.d.ts @@ -0,0 +1,16 @@ +import { IncomingMessage } from "http"; +/** + * Parse request cookies + * =================================================== + * + * @description This function takes in a request object and + * returns the cookies as a JS object + */ +export default function parseCookies({ request, cookieString, }: { + request?: IncomingMessage & { + [s: string]: any; + }; + cookieString?: string; +}): { + [s: string]: string; +}; diff --git a/dist/package-shared/utils/backend/parseCookies.js b/dist/package-shared/utils/backend/parseCookies.js new file mode 100644 index 0000000..fe35e0c --- /dev/null +++ b/dist/package-shared/utils/backend/parseCookies.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = parseCookies; +/** + * Parse request cookies + * =================================================== + * + * @description This function takes in a request object and + * returns the cookies as a JS object + */ +function parseCookies({ request, cookieString, }) { + try { + /** @type {string | undefined} */ + const cookieStr = request + ? request.headers.cookie + : cookieString + ? cookieString + : undefined; + if (!cookieStr) + return {}; + if (!cookieStr || typeof cookieStr !== "string") { + return {}; + } + const cookieSplitArray = cookieStr.split(";"); + let cookieObject = {}; + cookieSplitArray.forEach((keyValueString) => { + const [key, value] = keyValueString.split("="); + if (key && typeof key == "string") { + const parsedKey = key.replace(/^ +| +$/, ""); + cookieObject[parsedKey] = + value && typeof value == "string" + ? value.replace(/^ +| +$/, "") + : ""; + } + }); + return cookieObject; + } + catch (error) { + console.log(`ERROR parsing cookies: ${error.message}`); + return {}; + } +} diff --git a/dist/package-shared/utils/camelJoinedtoCamelSpace.d.ts b/dist/package-shared/utils/camelJoinedtoCamelSpace.d.ts new file mode 100644 index 0000000..0e45d5d --- /dev/null +++ b/dist/package-shared/utils/camelJoinedtoCamelSpace.d.ts @@ -0,0 +1,7 @@ +/** + * Convert Camel Joined Text to Camel Spaced Text + * ============================================================================== + * @description this function takes a camel cased text without spaces, and returns + * a camel-case-spaced text + */ +export default function camelJoinedtoCamelSpace(text: string): string | null; diff --git a/dist/package-shared/utils/camelJoinedtoCamelSpace.js b/dist/package-shared/utils/camelJoinedtoCamelSpace.js new file mode 100644 index 0000000..239bfc5 --- /dev/null +++ b/dist/package-shared/utils/camelJoinedtoCamelSpace.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = camelJoinedtoCamelSpace; +/** + * Convert Camel Joined Text to Camel Spaced Text + * ============================================================================== + * @description this function takes a camel cased text without spaces, and returns + * a camel-case-spaced text + */ +function camelJoinedtoCamelSpace(text) { + if (!(text === null || text === void 0 ? void 0 : text.match(/./))) { + return ""; + } + if (text === null || text === void 0 ? void 0 : text.match(/ /)) { + return text; + } + if (text) { + let textArray = text.split(""); + let capIndexes = []; + for (let i = 0; i < textArray.length; i++) { + const char = textArray[i]; + if (i === 0) + continue; + if (char.match(/[A-Z]/)) { + capIndexes.push(i); + } + } + let textChunks = [ + `${textArray[0].toUpperCase()}${text.substring(1, capIndexes[0])}`, + ]; + for (let j = 0; j < capIndexes.length; j++) { + const capIndex = capIndexes[j]; + if (capIndex === 0) + continue; + const startIndex = capIndex + 1; + const endIndex = capIndexes[j + 1]; + textChunks.push(`${textArray[capIndex].toUpperCase()}${text.substring(startIndex, endIndex)}`); + } + return textChunks.join(" "); + } + else { + return null; + } +} diff --git a/dist/package-shared/utils/deserialize-query.d.ts b/dist/package-shared/utils/deserialize-query.d.ts new file mode 100644 index 0000000..d0930b8 --- /dev/null +++ b/dist/package-shared/utils/deserialize-query.d.ts @@ -0,0 +1,8 @@ +/** + * # Convert Serialized Query back to object + */ +export default function deserializeQuery(query: string | { + [s: string]: any; +}): { + [s: string]: any; +}; diff --git a/dist/package-shared/utils/deserialize-query.js b/dist/package-shared/utils/deserialize-query.js new file mode 100644 index 0000000..9363441 --- /dev/null +++ b/dist/package-shared/utils/deserialize-query.js @@ -0,0 +1,25 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = deserializeQuery; +const ejson_1 = __importDefault(require("./ejson")); +/** + * # Convert Serialized Query back to object + */ +function deserializeQuery(query) { + /** @type {Object} */ + let queryObject = typeof query == "object" ? query : Object(ejson_1.default.parse(query)); + const keys = Object.keys(queryObject); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = queryObject[key]; + if (typeof value == "string") { + if (value.match(/^\{|^\[/)) { + queryObject[key] = ejson_1.default.parse(value); + } + } + } + return queryObject; +} diff --git a/dist/package-shared/utils/ejson.d.ts b/dist/package-shared/utils/ejson.d.ts new file mode 100644 index 0000000..a29694f --- /dev/null +++ b/dist/package-shared/utils/ejson.d.ts @@ -0,0 +1,17 @@ +/** + * # EJSON parse string + */ +declare function parse(string: string | null | number, reviver?: (this: any, key: string, value: any) => any): { + [s: string]: any; +} | { + [s: string]: any; +}[] | undefined; +/** + * # EJSON stringify object + */ +declare function stringify(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string | undefined; +declare const EJSON: { + parse: typeof parse; + stringify: typeof stringify; +}; +export default EJSON; diff --git a/dist/package-shared/utils/ejson.js b/dist/package-shared/utils/ejson.js new file mode 100644 index 0000000..5ac22bd --- /dev/null +++ b/dist/package-shared/utils/ejson.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * # EJSON parse string + */ +function parse(string, reviver) { + if (!string) + return undefined; + if (typeof string == "object") + return string; + if (typeof string !== "string") + return undefined; + try { + return JSON.parse(string, reviver); + } + catch (error) { + return undefined; + } +} +/** + * # EJSON stringify object + */ +function stringify(value, replacer, space) { + try { + return JSON.stringify(value, replacer, space); + } + catch (error) { + return undefined; + } +} +const EJSON = { + parse, + stringify, +}; +exports.default = EJSON; diff --git a/dist/package-shared/utils/empty-dir.d.ts b/dist/package-shared/utils/empty-dir.d.ts new file mode 100644 index 0000000..eb1e20b --- /dev/null +++ b/dist/package-shared/utils/empty-dir.d.ts @@ -0,0 +1 @@ +export default function emptyDirectory(dir: string): void; diff --git a/dist/package-shared/utils/empty-dir.js b/dist/package-shared/utils/empty-dir.js new file mode 100644 index 0000000..4fc500f --- /dev/null +++ b/dist/package-shared/utils/empty-dir.js @@ -0,0 +1,26 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = emptyDirectory; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +function emptyDirectory(dir) { + try { + const dirContent = fs_1.default.readdirSync(dir); + for (let i = 0; i < dirContent.length; i++) { + const fileFolder = dirContent[i]; + const fullFileFolderPath = path_1.default.join(dir, fileFolder); + const stat = fs_1.default.statSync(fullFileFolderPath); + if (stat.isDirectory()) { + emptyDirectory(fullFileFolderPath); + continue; + } + fs_1.default.unlinkSync(fullFileFolderPath); + } + } + catch (error) { + console.log(`Error Emptying ${dir}: ${error.message}`); + } +} diff --git a/dist/package-shared/utils/endConnection.d.ts b/dist/package-shared/utils/endConnection.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/package-shared/utils/endConnection.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/package-shared/utils/endConnection.js b/dist/package-shared/utils/endConnection.js new file mode 100644 index 0000000..94afe23 --- /dev/null +++ b/dist/package-shared/utils/endConnection.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * # End MYSQL Connection + */ +function endConnection(connection) { + if (connection.state !== "disconnected") { + connection.end((err) => { + console.log(err === null || err === void 0 ? void 0 : err.message); + }); + } +} +module.exports = endConnection; diff --git a/dist/package-shared/utils/generateColumnDescription.d.ts b/dist/package-shared/utils/generateColumnDescription.d.ts new file mode 100644 index 0000000..eb1d28b --- /dev/null +++ b/dist/package-shared/utils/generateColumnDescription.d.ts @@ -0,0 +1,21 @@ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * # Generate SQL text for Field + */ +export default function generateColumnDescription({ columnData, primaryKeySet, }: { + columnData: import("../types").DSQL_FieldSchemaType; + primaryKeySet?: boolean; +}): { + fieldEntryText: string; + newPrimaryKeySet: boolean; +}; +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/utils/generateColumnDescription.js b/dist/package-shared/utils/generateColumnDescription.js new file mode 100644 index 0000000..ff9abc9 --- /dev/null +++ b/dist/package-shared/utils/generateColumnDescription.js @@ -0,0 +1,55 @@ +"use strict"; +// @ts-check +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = generateColumnDescription; +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * # Generate SQL text for Field + */ +function generateColumnDescription({ columnData, primaryKeySet, }) { + /** + * Format tableInfoArray + * + * @description Format tableInfoArray + */ + const { fieldName, dataType, nullValue, primaryKey, autoIncrement, defaultValue, defaultValueLiteral, notNullValue, } = columnData; + let fieldEntryText = ""; + fieldEntryText += `\`${fieldName}\` ${dataType}`; + //////////////////////////////////////// + if (nullValue) { + fieldEntryText += " DEFAULT NULL"; + } + else if (defaultValueLiteral) { + fieldEntryText += ` DEFAULT ${defaultValueLiteral}`; + } + else if (defaultValue) { + fieldEntryText += ` DEFAULT '${defaultValue}'`; + } + else if (notNullValue) { + fieldEntryText += ` NOT NULL`; + } + //////////////////////////////////////// + if (primaryKey && !primaryKeySet) { + fieldEntryText += " PRIMARY KEY"; + primaryKeySet = true; + } + //////////////////////////////////////// + if (autoIncrement) { + fieldEntryText += " AUTO_INCREMENT"; + primaryKeySet = true; + } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + return { fieldEntryText, newPrimaryKeySet: primaryKeySet || false }; +} +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ diff --git a/dist/package-shared/utils/grab-host-names.d.ts b/dist/package-shared/utils/grab-host-names.d.ts new file mode 100644 index 0000000..57216bb --- /dev/null +++ b/dist/package-shared/utils/grab-host-names.d.ts @@ -0,0 +1,13 @@ +import https from "https"; +import http from "http"; +type GrabHostNamesReturn = { + host: string; + port: number | string; + scheme: typeof http | typeof https; + user_id: string | number; +}; +/** + * # Grab Names For Query + */ +export default function grabHostNames(): GrabHostNamesReturn; +export {}; diff --git a/dist/package-shared/utils/grab-host-names.js b/dist/package-shared/utils/grab-host-names.js new file mode 100644 index 0000000..325131c --- /dev/null +++ b/dist/package-shared/utils/grab-host-names.js @@ -0,0 +1,30 @@ +"use strict"; +// @ts-check +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = grabHostNames; +const https_1 = __importDefault(require("https")); +const http_1 = __importDefault(require("http")); +/** + * # Grab Names For Query + */ +function grabHostNames() { + var _a, _b; + const scheme = process.env.DSQL_HTTP_SCHEME; + const localHost = process.env.DSQL_LOCAL_HOST; + const localHostPort = process.env.DSQL_LOCAL_HOST_PORT; + const remoteHost = ((_a = process.env.DSQL_API_REMOTE_HOST) === null || _a === void 0 ? void 0 : _a.match(/.*\..*/)) + ? process.env.DSQL_API_REMOTE_HOST + : undefined; + const remoteHostPort = ((_b = process.env.DSQL_API_REMOTE_HOST_PORT) === null || _b === void 0 ? void 0 : _b.match(/./)) + ? process.env.DSQL_API_REMOTE_HOST_PORT + : undefined; + return { + host: remoteHost || localHost || "datasquirel.com", + port: remoteHostPort || localHostPort || 443, + scheme: (scheme === null || scheme === void 0 ? void 0 : scheme.match(/^http$/i)) ? http_1.default : https_1.default, + user_id: String(process.env.DSQL_API_USER_ID || 0), + }; +} diff --git a/dist/package-shared/utils/numberfy.d.ts b/dist/package-shared/utils/numberfy.d.ts new file mode 100644 index 0000000..3bf1dc3 --- /dev/null +++ b/dist/package-shared/utils/numberfy.d.ts @@ -0,0 +1,10 @@ +/** + * # Get Number from any input + * @example + * numberfy("123") // 123 + * numberfy("123.456") // 123 + * numberfy("123.456", 2) // 123.46 + * numberfy("123.456", 0) // 123 + * numberfy("123.456", 3) // 123.456 + */ +export default function numberfy(num: any, decimals: number): number; diff --git a/dist/package-shared/utils/numberfy.js b/dist/package-shared/utils/numberfy.js new file mode 100644 index 0000000..14d3395 --- /dev/null +++ b/dist/package-shared/utils/numberfy.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = numberfy; +/** + * # Get Number from any input + * @example + * numberfy("123") // 123 + * numberfy("123.456") // 123 + * numberfy("123.456", 2) // 123.46 + * numberfy("123.456", 0) // 123 + * numberfy("123.456", 3) // 123.456 + */ +function numberfy(num, decimals) { + try { + const numberfiedNum = Number(num); + if (typeof numberfiedNum !== "number") + return 0; + if (isNaN(numberfiedNum)) + return 0; + if (decimals) + return Number(numberfiedNum.toFixed(decimals)); + return Math.round(numberfiedNum); + } + catch ( /** @type {any} */error) { + console.log(`Numberfy ERROR: ${error.message}`); + return 0; + } +} diff --git a/dist/package-shared/utils/serialize-cookies.d.ts b/dist/package-shared/utils/serialize-cookies.d.ts new file mode 100644 index 0000000..e88432e --- /dev/null +++ b/dist/package-shared/utils/serialize-cookies.d.ts @@ -0,0 +1,8 @@ +import { CookieObject } from "../types"; +/** + * # Serialize Cookies + * @description Convert cookie object to string array + */ +export default function serializeCookies({ cookies, }: { + cookies: CookieObject[]; +}): string[]; diff --git a/dist/package-shared/utils/serialize-cookies.js b/dist/package-shared/utils/serialize-cookies.js new file mode 100644 index 0000000..8b76b11 --- /dev/null +++ b/dist/package-shared/utils/serialize-cookies.js @@ -0,0 +1,41 @@ +"use strict"; +// @ts-check +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = serializeCookies; +/** + * # Serialize Cookies + * @description Convert cookie object to string array + */ +function serializeCookies({ cookies, }) { + let cookiesStringsArray = []; + for (let i = 0; i < cookies.length; i++) { + const cookieObject = cookies[i]; + let cookieString = `${cookieObject.name}=${cookieObject.value}`; + if (cookieObject.maxAge) { + cookieString += `;Max-Age=${cookieObject.maxAge}`; + } + if (cookieObject.path) { + cookieString += `;Path=${cookieObject.path}`; + } + if (cookieObject.domain) { + cookieString += `;Domain=${cookieObject.domain}`; + } + if (cookieObject.secure) { + cookieString += ";Secure"; + } + if (cookieObject.httpOnly) { + cookieString += ";HttpOnly"; + } + if (cookieObject.sameSite) { + cookieString += `;SameSite=${cookieObject.sameSite}`; + } + if (cookieObject.expires) { + cookieString += `;expires=${cookieObject.expires}`; + } + if (cookieObject.priority) { + cookieString += `;priority=${cookieObject.priority}`; + } + cookiesStringsArray.push(cookieString); + } + return cookiesStringsArray; +} diff --git a/dist/package-shared/utils/serialize-query.d.ts b/dist/package-shared/utils/serialize-query.d.ts new file mode 100644 index 0000000..139698b --- /dev/null +++ b/dist/package-shared/utils/serialize-query.d.ts @@ -0,0 +1,4 @@ +/** + * # Serialize Query + */ +export default function serializeQuery(query: any): string; diff --git a/dist/package-shared/utils/serialize-query.js b/dist/package-shared/utils/serialize-query.js new file mode 100644 index 0000000..7865a66 --- /dev/null +++ b/dist/package-shared/utils/serialize-query.js @@ -0,0 +1,44 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = serializeQuery; +const ejson_1 = __importDefault(require("./ejson")); +/** + * # Serialize Query + */ +function serializeQuery(query) { + let str = "?"; + if (typeof query !== "object") { + console.log("Invalid Query type"); + return str; + } + if (Array.isArray(query)) { + console.log("Query is an Array. This is invalid."); + return str; + } + if (!query) { + console.log("No Query provided."); + return str; + } + const keys = Object.keys(query); + const queryArr = []; + keys.forEach((key) => { + if (!key || !query[key]) + return; + const value = query[key]; + if (typeof value === "object") { + const jsonStr = ejson_1.default.stringify(value); + queryArr.push(`${key}=${encodeURIComponent(String(jsonStr))}`); + } + else if (typeof value === "string" || typeof value === "number") { + queryArr.push(`${key}=${encodeURIComponent(value)}`); + } + else { + queryArr.push(`${key}=${String(value)}`); + } + }); + str += queryArr.join("&"); + return str; +} diff --git a/dist/package-shared/utils/slugToCamelTitle.d.ts b/dist/package-shared/utils/slugToCamelTitle.d.ts new file mode 100644 index 0000000..610626f --- /dev/null +++ b/dist/package-shared/utils/slugToCamelTitle.d.ts @@ -0,0 +1,4 @@ +/** + * # Slug to Camel case Title + */ +export default function slugToCamelTitle(text: String): string | null; diff --git a/dist/package-shared/utils/slugToCamelTitle.js b/dist/package-shared/utils/slugToCamelTitle.js new file mode 100644 index 0000000..7c9023b --- /dev/null +++ b/dist/package-shared/utils/slugToCamelTitle.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = slugToCamelTitle; +/** + * # Slug to Camel case Title + */ +function slugToCamelTitle(text) { + if (text) { + let addArray = text.split("-").filter((item) => item !== ""); + let camelArray = addArray.map((item) => { + return (item.substring(0, 1).toUpperCase() + + item.substring(1).toLowerCase()); + }); + let parsedAddress = camelArray.join(" "); + return parsedAddress; + } + else { + return null; + } +} diff --git a/dist/package-shared/utils/slugify.d.ts b/dist/package-shared/utils/slugify.d.ts new file mode 100644 index 0000000..6549342 --- /dev/null +++ b/dist/package-shared/utils/slugify.d.ts @@ -0,0 +1,9 @@ +/** + * # Return the slug of a string + * + * @example + * slugify("Hello World") // "hello-world" + * slugify("Yes!") // "yes" + * slugify("Hello!!! World!") // "hello-world" + */ +export default function slugify(str: string): string; diff --git a/dist/package-shared/utils/slugify.js b/dist/package-shared/utils/slugify.js new file mode 100644 index 0000000..cbb0b42 --- /dev/null +++ b/dist/package-shared/utils/slugify.js @@ -0,0 +1,29 @@ +"use strict"; +// @ts-check +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = slugify; +/** + * # Return the slug of a string + * + * @example + * slugify("Hello World") // "hello-world" + * slugify("Yes!") // "yes" + * slugify("Hello!!! World!") // "hello-world" + */ +function slugify(str) { + try { + return String(str) + .trim() + .toLowerCase() + .replace(/ {2,}/g, " ") + .replace(/ /g, "-") + .replace(/[^a-z0-9]/g, "-") + .replace(/-{2,}/g, "-") + .replace(/^-/, "") + .replace(/-$/, ""); + } + catch ( /** @type {any} */error) { + console.log(`Slugify ERROR: ${error.message}`); + return ""; + } +} diff --git a/dist/package-shared/utils/trim-sql.d.ts b/dist/package-shared/utils/trim-sql.d.ts new file mode 100644 index 0000000..c70059b --- /dev/null +++ b/dist/package-shared/utils/trim-sql.d.ts @@ -0,0 +1,5 @@ +/** + * # Trim SQL + * @description Remove Returns and miltiple spaces from SQL Query + */ +export default function trimSql(sql: string): string; diff --git a/dist/package-shared/utils/trim-sql.js b/dist/package-shared/utils/trim-sql.js new file mode 100644 index 0000000..21a1916 --- /dev/null +++ b/dist/package-shared/utils/trim-sql.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = trimSql; +/** + * # Trim SQL + * @description Remove Returns and miltiple spaces from SQL Query + */ +function trimSql(sql) { + return sql + .replace(/\n|\r|\n\r|\r\n/gm, " ") + .replace(/ {2,}/g, " ") + .trim(); +} diff --git a/dist/users/add-user.d.ts b/dist/users/add-user.d.ts new file mode 100644 index 0000000..5b6eb80 --- /dev/null +++ b/dist/users/add-user.d.ts @@ -0,0 +1,16 @@ +import { AddUserFunctionReturn, UserDataPayload } from "../package-shared/types"; +type Param = { + key?: string; + database?: string; + payload: UserDataPayload; + encryptionKey?: string; + encryptionSalt?: string; + user_id?: string | number; + apiUserId?: string | number; + useLocal?: boolean; +}; +/** + * # Add User to Database + */ +export default function addUser({ key, payload, database, encryptionKey, user_id, useLocal, apiUserId, }: Param): Promise; +export {}; diff --git a/dist/users/add-user.js b/dist/users/add-user.js new file mode 100644 index 0000000..18fbd13 --- /dev/null +++ b/dist/users/add-user.js @@ -0,0 +1,99 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = addUser; +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const api_create_user_1 = __importDefault(require("../package-shared/functions/api/users/api-create-user")); +/** + * # Add User to Database + */ +function addUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, payload, database, encryptionKey, user_id, useLocal, apiUserId, }) { + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME, DSQL_API_USER_ID, } = process.env; + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + return yield (0, api_create_user_1.default)({ + database: DSQL_DB_NAME, + encryptionKey, + payload, + userId: apiUserId, + useLocal, + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ + payload, + database, + encryptionKey, + }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/user/${user_id || grabedHostNames.user_id}/add-user`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + return httpResponse; + }); +} diff --git a/dist/users/delete-user.d.ts b/dist/users/delete-user.d.ts new file mode 100644 index 0000000..8849577 --- /dev/null +++ b/dist/users/delete-user.d.ts @@ -0,0 +1,13 @@ +import { UpdateUserFunctionReturn } from "../package-shared/types"; +type Param = { + key?: string; + database?: string; + deletedUserId: string | number; + user_id?: boolean; + useLocal?: boolean; +}; +/** + * # Update User + */ +export default function deleteUser({ key, database, user_id, useLocal, deletedUserId, }: Param): Promise; +export {}; diff --git a/dist/users/delete-user.js b/dist/users/delete-user.js new file mode 100644 index 0000000..55de154 --- /dev/null +++ b/dist/users/delete-user.js @@ -0,0 +1,96 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = deleteUser; +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const api_delete_user_1 = __importDefault(require("../package-shared/functions/api/users/api-delete-user")); +/** + * # Update User + */ +function deleteUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, database, user_id, useLocal, deletedUserId, }) { + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + return yield (0, api_delete_user_1.default)({ + dbFullName: DSQL_DB_NAME, + useLocal, + deletedUserId, + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = (yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ + database, + deletedUserId, + }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY || + key, + }, + port, + hostname: host, + path: `/api/user/${user_id || grabedHostNames.user_id}/delete-user`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + })); + return httpResponse; + }); +} diff --git a/dist/users/get-token.d.ts b/dist/users/get-token.d.ts new file mode 100644 index 0000000..c216478 --- /dev/null +++ b/dist/users/get-token.d.ts @@ -0,0 +1,21 @@ +import http from "http"; +type Param = { + request?: http.IncomingMessage; + cookieString?: string; + encryptionKey: string; + encryptionSalt: string; + database: string; + useLocal?: boolean; +}; +type Return = { + key: string | undefined; + csrf: string | undefined; +}; +/** + * Get just the access token for user + * ============================================================================== + * @description This Function takes in a request object and returns a user token + * string and csrf token string + */ +export default function getToken({ request, encryptionKey, encryptionSalt, database, useLocal, cookieString, }: Param): Return; +export {}; diff --git a/dist/users/get-token.js b/dist/users/get-token.js new file mode 100644 index 0000000..d72d3b2 --- /dev/null +++ b/dist/users/get-token.js @@ -0,0 +1,74 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getToken; +const decrypt_1 = __importDefault(require("../package-shared/functions/dsql/decrypt")); +const get_auth_cookie_names_1 = __importDefault(require("../package-shared/functions/backend/cookies/get-auth-cookie-names")); +const parseCookies_1 = __importDefault(require("../package-shared/utils/backend/parseCookies")); +/** + * Get just the access token for user + * ============================================================================== + * @description This Function takes in a request object and returns a user token + * string and csrf token string + */ +function getToken({ request, encryptionKey, encryptionSalt, database, useLocal, cookieString, }) { + try { + /** + * Grab the payload + * + * @description Grab the payload + */ + const cookies = (0, parseCookies_1.default)({ request, cookieString }); + const keynames = (0, get_auth_cookie_names_1.default)(); + const authKeyName = keynames.keyCookieName; + const csrfName = keynames.csrfCookieName; + const key = cookies[authKeyName]; + const csrf = cookies[csrfName]; + /** + * Grab the payload + * + * @description Grab the payload + */ + let userPayload = (0, decrypt_1.default)({ + encryptedString: key, + encryptionKey, + encryptionSalt, + }); + /** + * Grab the payload + * + * @description Grab the payload + */ + if (!userPayload) { + return { key: undefined, csrf: undefined }; + } + /** + * Grab the payload + * + * @description Grab the payload + */ + let userObject = JSON.parse(userPayload); + if (!userObject.csrf_k) { + return { key: undefined, csrf: undefined }; + } + /** + * Return User Object + * + * @description Return User Object + */ + return { key, csrf }; + } + catch (error) { + /** + * Return User Object + * + * @description Return User Object + */ + return { + key: undefined, + csrf: undefined, + }; + } +} diff --git a/dist/users/get-user.d.ts b/dist/users/get-user.d.ts new file mode 100644 index 0000000..5db3e8c --- /dev/null +++ b/dist/users/get-user.d.ts @@ -0,0 +1,14 @@ +import { GetUserFunctionReturn } from "../package-shared/types"; +type Param = { + key: string; + database: string; + userId: number; + fields?: string[]; + apiUserId?: boolean; + useLocal?: boolean; +}; +/** + * # Get User + */ +export default function getUser({ key, userId, database, fields, apiUserId, useLocal, }: Param): Promise; +export {}; diff --git a/dist/users/get-user.js b/dist/users/get-user.js new file mode 100644 index 0000000..efe6736 --- /dev/null +++ b/dist/users/get-user.js @@ -0,0 +1,121 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getUser; +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const api_get_user_1 = __importDefault(require("../package-shared/functions/api/users/api-get-user")); +/** + * # Get User + */ +function getUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, userId, database, fields, apiUserId, useLocal, }) { + /** + * Initialize + */ + const defaultFields = [ + "id", + "first_name", + "last_name", + "email", + "username", + "image", + "image_thumbnail", + "verification_status", + "date_created", + "date_created_code", + "date_created_timestamp", + "date_updated", + "date_updated_code", + "date_updated_timestamp", + ]; + const updatedFields = fields && fields[0] ? [...defaultFields, ...fields] : defaultFields; + const reqPayload = JSON.stringify({ + userId, + database, + fields: [...new Set(updatedFields)], + }); + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + return yield (0, api_get_user_1.default)({ + userId, + fields: [...new Set(updatedFields)], + dbFullName: DSQL_DB_NAME, + useLocal, + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/user/${apiUserId || grabedHostNames.user_id}/get-user`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + /** ********************************************** */ + /** ********************************************** */ + /** ********************************************** */ + return httpResponse; + }); +} diff --git a/dist/users/login-user.d.ts b/dist/users/login-user.d.ts new file mode 100644 index 0000000..111689d --- /dev/null +++ b/dist/users/login-user.d.ts @@ -0,0 +1,31 @@ +import http from "http"; +import { APILoginFunctionReturn } from "../package-shared/types"; +type Param = { + key?: string; + database: string; + payload: { + email?: string; + username?: string; + password?: string; + }; + additionalFields?: string[]; + response?: http.ServerResponse & { + [s: string]: any; + }; + encryptionKey?: string; + encryptionSalt?: string; + email_login?: boolean; + email_login_code?: string; + temp_code_field?: string; + token?: boolean; + user_id?: string | number; + skipPassword?: boolean; + useLocal?: boolean; + skipWriteAuthFile?: boolean; + apiUserID?: string | number; +}; +/** + * # Login A user + */ +export default function loginUser({ key, payload, database, additionalFields, response, encryptionKey, encryptionSalt, email_login, email_login_code, temp_code_field, token, user_id, skipPassword, useLocal, apiUserID, skipWriteAuthFile, }: Param): Promise; +export {}; diff --git a/dist/users/login-user.js b/dist/users/login-user.js new file mode 100644 index 0000000..479bbb5 --- /dev/null +++ b/dist/users/login-user.js @@ -0,0 +1,197 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = loginUser; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const encrypt_1 = __importDefault(require("../package-shared/functions/dsql/encrypt")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const api_login_1 = __importDefault(require("../package-shared/functions/api/users/api-login")); +const get_auth_cookie_names_1 = __importDefault(require("../package-shared/functions/backend/cookies/get-auth-cookie-names")); +const write_auth_files_1 = require("../package-shared/functions/backend/auth/write-auth-files"); +/** + * # Login A user + */ +function loginUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, payload, database, additionalFields, response, encryptionKey, encryptionSalt, email_login, email_login_code, temp_code_field, token, user_id, skipPassword, useLocal, apiUserID, skipWriteAuthFile, }) { + var _b; + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + const defaultTempLoginFieldName = "temp_login_code"; + const emailLoginTempCodeFieldName = email_login + ? temp_code_field + ? temp_code_field + : defaultTempLoginFieldName + : undefined; + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; + if (!(finalEncryptionKey === null || finalEncryptionKey === void 0 ? void 0 : finalEncryptionKey.match(/.{8,}/))) { + console.log("Encryption key is invalid"); + return { + success: false, + payload: null, + msg: "Encryption key is invalid", + }; + } + if (!(finalEncryptionSalt === null || finalEncryptionSalt === void 0 ? void 0 : finalEncryptionSalt.match(/.{8,}/))) { + console.log("Encryption salt is invalid"); + return { + success: false, + payload: null, + msg: "Encryption salt is invalid", + }; + } + /** + * Check required fields + * + * @description Check required fields + */ + if (!payload.email) { + return { + success: false, + payload: null, + msg: "Email Required", + }; + } + /** + * Initialize HTTP response variable + */ + /** @type {import("../package-shared/types").APILoginFunctionReturn} */ + let httpResponse = { + success: false, + }; + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + httpResponse = yield (0, api_login_1.default)({ + database: process.env.DSQL_DB_NAME || "", + email: payload.email, + username: payload.username, + password: payload.password, + skipPassword, + encryptionKey: finalEncryptionKey, + additionalFields, + email_login, + email_login_code, + email_login_field: emailLoginTempCodeFieldName, + token, + useLocal, + }); + } + else { + /** + * Make https request + * + * @description make a request to datasquirel.com + * + * @type {{ success: boolean, payload: import("../package-shared/types").DATASQUIREL_LoggedInUser | null, userId?: number, msg?: string }} + */ + httpResponse = yield new Promise((resolve, reject) => { + /** @type {import("../package-shared/types").PackageUserLoginRequestBody} */ + const reqPayload = { + encryptionKey: finalEncryptionKey, + payload, + database, + additionalFields, + email_login, + email_login_code, + email_login_field: emailLoginTempCodeFieldName, + token, + skipPassword: skipPassword, + }; + const reqPayloadJSON = JSON.stringify(reqPayload); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayloadJSON).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/user/${user_id || grabedHostNames.user_id}/login-user`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (res) => { + var str = ""; + res.on("data", function (chunk) { + str += chunk; + }); + res.on("end", function () { + resolve(JSON.parse(str)); + }); + res.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayloadJSON); + httpsRequest.end(); + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + if (httpResponse === null || httpResponse === void 0 ? void 0 : httpResponse.success) { + let encryptedPayload = (0, encrypt_1.default)({ + data: JSON.stringify(httpResponse.payload), + encryptionKey: finalEncryptionKey, + encryptionSalt: finalEncryptionSalt, + }); + try { + if (token && encryptedPayload) + httpResponse["token"] = encryptedPayload; + } + catch (error) { } + const cookieNames = (0, get_auth_cookie_names_1.default)({ + database, + userId: apiUserID || user_id || grabedHostNames.user_id, + }); + if (httpResponse.csrf && !skipWriteAuthFile) { + (0, write_auth_files_1.writeAuthFile)(httpResponse.csrf, JSON.stringify(httpResponse.payload)); + } + httpResponse["cookieNames"] = cookieNames; + httpResponse["key"] = String(encryptedPayload); + const authKeyName = cookieNames.keyCookieName; + const csrfName = cookieNames.csrfCookieName; + response === null || response === void 0 ? void 0 : response.setHeader("Set-Cookie", [ + `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, + `${csrfName}=${(_b = httpResponse.payload) === null || _b === void 0 ? void 0 : _b.csrf_k};samesite=strict;path=/;HttpOnly=true`, + ]); + } + return httpResponse; + }); +} diff --git a/dist/users/logout-user.d.ts b/dist/users/logout-user.d.ts new file mode 100644 index 0000000..58f9125 --- /dev/null +++ b/dist/users/logout-user.d.ts @@ -0,0 +1,23 @@ +import http from "http"; +type Param = { + encryptedUserString?: string; + request?: http.IncomingMessage & { + [s: string]: any; + }; + response?: http.ServerResponse & { + [s: string]: any; + }; + cookieString?: string; + database?: string; + dsqlUserId?: string | number; +}; +type Return = { + success: boolean; + msg: string; + cookieNames?: any; +}; +/** + * # Logout user + */ +export default function logoutUser({ response, database, dsqlUserId, encryptedUserString, request, cookieString, }: Param): Return; +export {}; diff --git a/dist/users/logout-user.js b/dist/users/logout-user.js new file mode 100644 index 0000000..0ab7b4d --- /dev/null +++ b/dist/users/logout-user.js @@ -0,0 +1,80 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = logoutUser; +const get_auth_cookie_names_1 = __importDefault(require("../package-shared/functions/backend/cookies/get-auth-cookie-names")); +const decrypt_1 = __importDefault(require("../package-shared/functions/dsql/decrypt")); +const ejson_1 = __importDefault(require("../package-shared/utils/ejson")); +const write_auth_files_1 = require("../package-shared/functions/backend/auth/write-auth-files"); +const parseCookies_1 = __importDefault(require("../package-shared/utils/backend/parseCookies")); +/** + * # Logout user + */ +function logoutUser({ response, database, dsqlUserId, encryptedUserString, request, cookieString, }) { + /** + * Check Encryption Keys + * + * @description Check Encryption Keys + */ + try { + const cookieNames = (0, get_auth_cookie_names_1.default)({ + database, + userId: dsqlUserId || process.env.DSQL_API_USER_ID, + }); + const authKeyName = cookieNames.keyCookieName; + const csrfName = cookieNames.csrfCookieName; + const oneTimeCodeName = (0, get_auth_cookie_names_1.default)().oneTimeCodeName; + const decryptedUserJSON = (() => { + try { + if (request) { + const cookiesObject = (0, parseCookies_1.default)({ + request, + cookieString, + }); + return (0, decrypt_1.default)({ + encryptedString: cookiesObject[authKeyName], + }); + } + else if (encryptedUserString) { + return (0, decrypt_1.default)({ + encryptedString: encryptedUserString, + }); + } + else { + return undefined; + } + } + catch ( /** @type {any} */error) { + console.log("Error getting decrypted User JSON to logout:", error.message); + return undefined; + } + })(); + if (!decryptedUserJSON) + throw new Error("Invalid User"); + const userObject = ejson_1.default.parse(decryptedUserJSON); + if (!(userObject === null || userObject === void 0 ? void 0 : userObject.csrf_k)) + throw new Error("Invalid User. Please check key"); + response === null || response === void 0 ? void 0 : response.setHeader("Set-Cookie", [ + `${authKeyName}=null;max-age=0`, + `${csrfName}=null;max-age=0`, + `${oneTimeCodeName}=null;max-age=0`, + ]); + const csrf = userObject.csrf_k; + (0, write_auth_files_1.deleteAuthFile)(csrf); + return { + success: true, + msg: "User Logged Out", + cookieNames, + }; + } + catch ( /** @type {any} */error) { + console.log("Logout Error:", error.message); + return { + success: false, + msg: "Logout Failed", + }; + } +} +module.exports = logoutUser; diff --git a/dist/users/reauth-user.d.ts b/dist/users/reauth-user.d.ts new file mode 100644 index 0000000..b8e9c7e --- /dev/null +++ b/dist/users/reauth-user.d.ts @@ -0,0 +1,20 @@ +import http from "http"; +import { APILoginFunctionReturn } from "../package-shared/types"; +type Param = { + key?: string; + database?: string; + response?: http.ServerResponse; + request?: http.IncomingMessage; + level?: "deep" | "normal"; + encryptionKey?: string; + encryptionSalt?: string; + additionalFields?: string[]; + encryptedUserString?: string; + user_id?: string | number; + useLocal?: boolean; +}; +/** + * # Reauthorize User + */ +export default function reauthUser({ key, database, response, request, level, encryptionKey, encryptionSalt, additionalFields, encryptedUserString, user_id, useLocal, }: Param): Promise; +export {}; diff --git a/dist/users/reauth-user.js b/dist/users/reauth-user.js new file mode 100644 index 0000000..79c5927 --- /dev/null +++ b/dist/users/reauth-user.js @@ -0,0 +1,158 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = reauthUser; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const encrypt_1 = __importDefault(require("../package-shared/functions/dsql/encrypt")); +const user_auth_1 = __importDefault(require("./user-auth")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const api_reauth_user_1 = __importDefault(require("../package-shared/functions/api/users/api-reauth-user")); +const write_auth_files_1 = require("../package-shared/functions/backend/auth/write-auth-files"); +const get_auth_cookie_names_1 = __importDefault(require("../package-shared/functions/backend/cookies/get-auth-cookie-names")); +/** + * # Reauthorize User + */ +function reauthUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, database, response, request, level, encryptionKey, encryptionSalt, additionalFields, encryptedUserString, user_id, useLocal, }) { + var _b, _c; + /** + * Check Encryption Keys + * + * @description Check Encryption Keys + */ + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; + const existingUser = (0, user_auth_1.default)({ + database, + encryptionKey: finalEncryptionKey, + encryptionSalt: finalEncryptionSalt, + level, + request, + encryptedUserString, + }); + if (!((_b = existingUser === null || existingUser === void 0 ? void 0 : existingUser.payload) === null || _b === void 0 ? void 0 : _b.id)) { + return { + success: false, + payload: null, + msg: "Cookie Credentials Invalid", + }; + } + /** + * Initialize HTTP response variable + */ + let httpResponse; + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + httpResponse = yield (0, api_reauth_user_1.default)({ + existingUser: existingUser.payload, + additionalFields, + useLocal, + }); + } + else { + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + httpResponse = (yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ + existingUser: existingUser.payload, + database, + additionalFields, + }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/user/${user_id || grabedHostNames.user_id}/reauth-user`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + })); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + if (httpResponse === null || httpResponse === void 0 ? void 0 : httpResponse.success) { + let encryptedPayload = (0, encrypt_1.default)({ + data: JSON.stringify(httpResponse.payload), + encryptionKey: finalEncryptionKey, + encryptionSalt: finalEncryptionSalt, + }); + const cookieNames = (0, get_auth_cookie_names_1.default)({ + database, + userId: user_id || grabedHostNames.user_id, + }); + httpResponse["cookieNames"] = cookieNames; + httpResponse["key"] = String(encryptedPayload); + const authKeyName = cookieNames.keyCookieName; + const csrfName = cookieNames.csrfCookieName; + response === null || response === void 0 ? void 0 : response.setHeader("Set-Cookie", [ + `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, + `${csrfName}=${(_c = httpResponse.payload) === null || _c === void 0 ? void 0 : _c.csrf_k};samesite=strict;path=/;HttpOnly=true`, + ]); + if (httpResponse.csrf) { + (0, write_auth_files_1.deleteAuthFile)(String(existingUser.payload.csrf_k)); + (0, write_auth_files_1.writeAuthFile)(httpResponse.csrf, JSON.stringify(httpResponse.payload)); + } + } + return httpResponse; + }); +} diff --git a/dist/users/send-email-code.d.ts b/dist/users/send-email-code.d.ts new file mode 100644 index 0000000..a6864f4 --- /dev/null +++ b/dist/users/send-email-code.d.ts @@ -0,0 +1,24 @@ +import http from "http"; +import { SendOneTimeCodeEmailResponse } from "../package-shared/types"; +type Param = { + key?: string; + database?: string; + email: string; + temp_code_field_name?: string; + response?: http.ServerResponse & { + [s: string]: any; + }; + mail_domain?: string; + mail_username?: string; + mail_password?: string; + mail_port?: number; + sender?: string; + user_id?: boolean; + useLocal?: boolean; + extraCookies?: import("../package-shared/types").CookieObject[]; +}; +/** + * # Send Email Code to a User + */ +export default function sendEmailCode({ key, email, database, temp_code_field_name, mail_domain, mail_password, mail_username, mail_port, sender, user_id, useLocal, response, extraCookies, }: Param): Promise; +export {}; diff --git a/dist/users/send-email-code.js b/dist/users/send-email-code.js new file mode 100644 index 0000000..7126a74 --- /dev/null +++ b/dist/users/send-email-code.js @@ -0,0 +1,121 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = sendEmailCode; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const api_send_email_code_1 = __importDefault(require("../package-shared/functions/api/users/api-send-email-code")); +/** + * # Send Email Code to a User + */ +function sendEmailCode(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, email, database, temp_code_field_name, mail_domain, mail_password, mail_username, mail_port, sender, user_id, useLocal, response, extraCookies, }) { + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + const defaultTempLoginFieldName = "temp_login_code"; + const emailLoginTempCodeFieldName = temp_code_field_name + ? temp_code_field_name + : defaultTempLoginFieldName; + const emailHtml = fs_1.default.readFileSync(path_1.default.resolve(__dirname, "../package-shared/html/one-time-code.html"), "utf-8"); + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + return yield (0, api_send_email_code_1.default)({ + database: DSQL_DB_NAME, + email, + email_login_field: emailLoginTempCodeFieldName, + html: emailHtml, + mail_domain, + mail_password, + mail_port, + mail_username, + sender, + useLocal, + response, + extraCookies, + }); + } + else { + /** + * Make https request + * + * @description make a request to datasquirel.com + * + * @type {import("../package-shared/types").SendOneTimeCodeEmailResponse} + */ + const httpResponse = yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ + email, + database, + email_login_field: emailLoginTempCodeFieldName, + mail_domain, + mail_password, + mail_username, + mail_port, + sender, + html: emailHtml, + }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/user/${user_id || grabedHostNames.user_id}/send-email-code`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (res) => { + var str = ""; + res.on("data", function (chunk) { + str += chunk; + }); + res.on("end", function () { + resolve(JSON.parse(str)); + }); + res.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + return httpResponse; + } + }); +} diff --git a/dist/users/social/github-auth.d.ts b/dist/users/social/github-auth.d.ts new file mode 100644 index 0000000..0b26c1c --- /dev/null +++ b/dist/users/social/github-auth.d.ts @@ -0,0 +1,34 @@ +import http from "http"; +interface FunctionReturn { + success: boolean; + user: { + id: number; + first_name: string; + last_name: string; + csrf_k: string; + social_id: string; + } | null; + dsqlUserId?: number; + msg?: string; +} +type Param = { + key: string; + code: string; + email: string | null; + database: string; + clientId: string; + clientSecret: string; + response: http.ServerResponse; + encryptionKey: string; + encryptionSalt: string; + additionalFields?: string[]; + additionalData?: { + [s: string]: string | number; + }; + user_id?: boolean; +}; +/** + * # SERVER FUNCTION: Login with google Function + */ +export default function githubAuth({ key, code, email, database, clientId, clientSecret, response, encryptionKey, encryptionSalt, additionalFields, user_id, additionalData, }: Param): Promise; +export {}; diff --git a/dist/users/social/github-auth.js b/dist/users/social/github-auth.js new file mode 100644 index 0000000..c1739bc --- /dev/null +++ b/dist/users/social/github-auth.js @@ -0,0 +1,172 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = githubAuth; +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +const encrypt_1 = __importDefault(require("../../package-shared/functions/dsql/encrypt")); +const grab_host_names_1 = __importDefault(require("../../package-shared/utils/grab-host-names")); +const api_github_login_1 = __importDefault(require("../../package-shared/functions/api/users/social/api-github-login")); +/** + * # SERVER FUNCTION: Login with google Function + */ +function githubAuth(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, code, email, database, clientId, clientSecret, response, encryptionKey, encryptionSalt, additionalFields, user_id, additionalData, }) { + /** + * Check inputs + * + * @description Check inputs + */ + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + if (!code || (code === null || code === void 0 ? void 0 : code.match(/ /))) { + return { + success: false, + user: null, + msg: "Please enter Github Access Token", + }; + } + if (!database || (database === null || database === void 0 ? void 0 : database.match(/ /))) { + return { + success: false, + user: null, + msg: "Please provide database slug name you want to access", + }; + } + if (!clientId || (clientId === null || clientId === void 0 ? void 0 : clientId.match(/ /))) { + return { + success: false, + user: null, + msg: "Please enter Github OAUTH client ID", + }; + } + /** + * Initialize HTTP response variable + */ + let httpResponse; + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME, DSQL_KEY, DSQL_REF_DB_NAME, DSQL_FULL_SYNC, } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./))) { + /** @type {import("../../package-shared/types").DSQL_DatabaseSchemaType | undefined | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + httpResponse = yield (0, api_github_login_1.default)({ + code, + email: email || undefined, + clientId, + clientSecret, + additionalFields, + database: DSQL_DB_NAME, + additionalData, + }); + } + else { + /** + * Make https request + * + * @description make a request to datasquirel.com + * @type {FunctionReturn} - Https response object + */ + httpResponse = (yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ + code, + email, + clientId, + clientSecret, + database, + additionalFields, + additionalData, + }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/user/${user_id || grabedHostNames.user_id}/github-login`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + try { + resolve(JSON.parse(str)); + } + catch (error) { + console.log(error); + resolve({ + success: false, + user: null, + msg: "Something went wrong", + }); + } + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + })); + } + //////////////////////////////////////// + //////////////////////////////////////// + //////////////////////////////////////// + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + if ((httpResponse === null || httpResponse === void 0 ? void 0 : httpResponse.success) && (httpResponse === null || httpResponse === void 0 ? void 0 : httpResponse.user)) { + let encryptedPayload = (0, encrypt_1.default)({ + data: JSON.stringify(httpResponse.user), + encryptionKey, + encryptionSalt, + }); + const { user, dsqlUserId } = httpResponse; + const authKeyName = `datasquirel_${dsqlUserId}_${database}_auth_key`; + const csrfName = `datasquirel_${dsqlUserId}_${database}_csrf`; + response.setHeader("Set-Cookie", [ + `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, + `${csrfName}=${user.csrf_k};samesite=strict;path=/;HttpOnly=true`, + `dsqluid=${dsqlUserId};samesite=strict;path=/;HttpOnly=true`, + `datasquirel_social_id=${user.social_id};samesite=strict;path=/`, + ]); + } + return httpResponse; + }); +} diff --git a/dist/users/social/google-auth.d.ts b/dist/users/social/google-auth.d.ts new file mode 100644 index 0000000..528a180 --- /dev/null +++ b/dist/users/social/google-auth.d.ts @@ -0,0 +1,21 @@ +import http from "http"; +import { APILoginFunctionReturn } from "../../package-shared/types"; +type Param = { + key?: string; + token: string; + database?: string; + response?: http.ServerResponse; + encryptionKey?: string; + encryptionSalt?: string; + additionalFields?: string[]; + additionalData?: { + [s: string]: string | number; + }; + apiUserID?: string | number; + useLocal?: boolean; +}; +/** + * # SERVER FUNCTION: Login with google Function + */ +export default function googleAuth({ key, token, database, response, encryptionKey, encryptionSalt, additionalFields, additionalData, apiUserID, useLocal, }: Param): Promise; +export {}; diff --git a/dist/users/social/google-auth.js b/dist/users/social/google-auth.js new file mode 100644 index 0000000..97fb11b --- /dev/null +++ b/dist/users/social/google-auth.js @@ -0,0 +1,161 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = googleAuth; +const encrypt_1 = __importDefault(require("../../package-shared/functions/dsql/encrypt")); +const grab_host_names_1 = __importDefault(require("../../package-shared/utils/grab-host-names")); +const api_google_login_1 = __importDefault(require("../../package-shared/functions/api/users/social/api-google-login")); +const get_auth_cookie_names_1 = __importDefault(require("../../package-shared/functions/backend/cookies/get-auth-cookie-names")); +const write_auth_files_1 = require("../../package-shared/functions/backend/auth/write-auth-files"); +/** + * # SERVER FUNCTION: Login with google Function + */ +function googleAuth(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, token, database, response, encryptionKey, encryptionSalt, additionalFields, additionalData, apiUserID, useLocal, }) { + var _b; + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; + if (!(finalEncryptionKey === null || finalEncryptionKey === void 0 ? void 0 : finalEncryptionKey.match(/.{8,}/))) { + console.log("Encryption key is invalid"); + return { + success: false, + payload: null, + msg: "Encryption key is invalid", + }; + } + if (!(finalEncryptionSalt === null || finalEncryptionSalt === void 0 ? void 0 : finalEncryptionSalt.match(/.{8,}/))) { + console.log("Encryption salt is invalid"); + return { + success: false, + payload: null, + msg: "Encryption salt is invalid", + }; + } + /** + * Check inputs + * + * @description Check inputs + */ + if (!token || (token === null || token === void 0 ? void 0 : token.match(/ /))) { + return { + success: false, + payload: null, + msg: "Please enter Google Access Token", + }; + } + /** + * Initialize HTTP response variable + */ + /** @type {import("../../package-shared/types").APILoginFunctionReturn} */ + let httpResponse = { + success: false, + }; + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + httpResponse = yield (0, api_google_login_1.default)({ + token, + additionalFields, + database: DSQL_DB_NAME, + additionalData, + }); + } + else { + /** + * Make https request + * + * @description make a request to datasquirel.com + * @type {{ success: boolean, user: import("../../package-shared/types").DATASQUIREL_LoggedInUser | null, msg?: string, dsqlUserId?: number } | null } - Https response object + */ + httpResponse = yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ + token, + database, + additionalFields, + additionalData, + }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/user/${apiUserID || grabedHostNames.user_id}/google-login`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + if ((httpResponse === null || httpResponse === void 0 ? void 0 : httpResponse.success) && (httpResponse === null || httpResponse === void 0 ? void 0 : httpResponse.payload)) { + let encryptedPayload = (0, encrypt_1.default)({ + data: JSON.stringify(httpResponse.payload), + encryptionKey: finalEncryptionKey, + encryptionSalt: finalEncryptionSalt, + }); + const cookieNames = (0, get_auth_cookie_names_1.default)({ + database, + userId: apiUserID || process.env.DSQL_API_USER_ID, + }); + if (httpResponse.csrf) { + (0, write_auth_files_1.writeAuthFile)(httpResponse.csrf, JSON.stringify(httpResponse.payload)); + } + httpResponse["cookieNames"] = cookieNames; + httpResponse["key"] = String(encryptedPayload); + const authKeyName = cookieNames.keyCookieName; + const csrfName = cookieNames.csrfCookieName; + response === null || response === void 0 ? void 0 : response.setHeader("Set-Cookie", [ + `${authKeyName}=${encryptedPayload};samesite=strict;path=/;HttpOnly=true;Secure=true`, + `${csrfName}=${(_b = httpResponse.payload) === null || _b === void 0 ? void 0 : _b.csrf_k};samesite=strict;path=/;HttpOnly=true`, + ]); + } + return httpResponse; + }); +} diff --git a/dist/users/update-user.d.ts b/dist/users/update-user.d.ts new file mode 100644 index 0000000..dccf7e5 --- /dev/null +++ b/dist/users/update-user.d.ts @@ -0,0 +1,16 @@ +import { UpdateUserFunctionReturn } from "../package-shared/types"; +type Param = { + key?: string; + database?: string; + updatedUserId: string | number; + payload: { + [s: string]: any; + }; + user_id?: boolean; + useLocal?: boolean; +}; +/** + * # Update User + */ +export default function updateUser({ key, payload, database, user_id, useLocal, updatedUserId, }: Param): Promise; +export {}; diff --git a/dist/users/update-user.js b/dist/users/update-user.js new file mode 100644 index 0000000..5f770a6 --- /dev/null +++ b/dist/users/update-user.js @@ -0,0 +1,99 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = updateUser; +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const api_update_user_1 = __importDefault(require("../package-shared/functions/api/users/api-update-user")); +/** + * # Update User + */ +function updateUser(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, payload, database, user_id, useLocal, updatedUserId, }) { + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + return yield (0, api_update_user_1.default)({ + payload: payload, + dbFullName: DSQL_DB_NAME, + useLocal, + updatedUserId, + dbSchema, + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ + payload, + database, + updatedUserId, + }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY || + key, + }, + port, + hostname: host, + path: `/api/user/${user_id || grabedHostNames.user_id}/update-user`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + return httpResponse; + }); +} diff --git a/dist/users/user-auth.d.ts b/dist/users/user-auth.d.ts new file mode 100644 index 0000000..dc8460b --- /dev/null +++ b/dist/users/user-auth.d.ts @@ -0,0 +1,28 @@ +import http from "http"; +import { AuthenticatedUser } from "../package-shared/types"; +type Param = { + request?: http.IncomingMessage & { + [s: string]: any; + }; + req?: http.IncomingMessage & { + [s: string]: any; + }; + cookieString?: string; + encryptedUserString?: string; + encryptionKey?: string; + encryptionSalt?: string; + level?: "deep" | "normal"; + database?: string; + dsqlUserId?: string | number; + expiry?: number; + csrfHeaderName?: string; + csrfHeaderIsValue?: boolean; +}; +/** + * Authenticate User from request + * ============================================================================== + * @description This Function takes in a request object and returns a user object + * with the user's data + */ +export default function userAuth({ request, req, encryptionKey, encryptionSalt, level, database, dsqlUserId, encryptedUserString, expiry, cookieString, csrfHeaderIsValue, csrfHeaderName, }: Param): AuthenticatedUser; +export {}; diff --git a/dist/users/user-auth.js b/dist/users/user-auth.js new file mode 100644 index 0000000..ccc71eb --- /dev/null +++ b/dist/users/user-auth.js @@ -0,0 +1,153 @@ +"use strict"; +// @ts-check +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = userAuth; +const decrypt_1 = __importDefault(require("../package-shared/functions/dsql/decrypt")); +const get_auth_cookie_names_1 = __importDefault(require("../package-shared/functions/backend/cookies/get-auth-cookie-names")); +const write_auth_files_1 = require("../package-shared/functions/backend/auth/write-auth-files"); +const parseCookies_1 = __importDefault(require("../package-shared/utils/backend/parseCookies")); +const minuteInMilliseconds = 60000; +const hourInMilliseconds = minuteInMilliseconds * 60; +const dayInMilliseconds = hourInMilliseconds * 24; +const weekInMilliseconds = dayInMilliseconds * 7; +const monthInMilliseconds = dayInMilliseconds * 30; +const yearInMilliseconds = dayInMilliseconds * 365; +/** + * Authenticate User from request + * ============================================================================== + * @description This Function takes in a request object and returns a user object + * with the user's data + */ +function userAuth({ request, req, encryptionKey, encryptionSalt, level, database, dsqlUserId, encryptedUserString, expiry = weekInMilliseconds, cookieString, csrfHeaderIsValue, csrfHeaderName, }) { + try { + const finalRequest = req || request; + const finalEncryptionKey = encryptionKey || process.env.DSQL_ENCRYPTION_PASSWORD; + const finalEncryptionSalt = encryptionSalt || process.env.DSQL_ENCRYPTION_SALT; + const cookies = (0, parseCookies_1.default)({ + request: finalRequest, + cookieString, + }); + const keyNames = (0, get_auth_cookie_names_1.default)({ + userId: dsqlUserId || process.env.DSQL_API_USER_ID, + database: database || process.env.DSQL_DB_NAME, + }); + const authKeyName = keyNames.keyCookieName; + const csrfName = keyNames.csrfCookieName; + const key = encryptedUserString + ? encryptedUserString + : cookies[authKeyName]; + const csrf = cookies[csrfName]; + /** + * Grab the payload + * + * @description Grab the payload + */ + let userPayloadJSON = (0, decrypt_1.default)({ + encryptedString: key, + encryptionKey: finalEncryptionKey, + encryptionSalt: finalEncryptionSalt, + }); + /** + * Grab the payload + * + * @description Grab the payload + */ + if (!userPayloadJSON) { + return { + success: false, + payload: null, + msg: "Couldn't Decrypt cookie", + }; + } + /** + * Grab the payload + * + * @description Grab the payload + */ + /** @type {import("../package-shared/types").DATASQUIREL_LoggedInUser} */ + let userObject = JSON.parse(userPayloadJSON); + if (!userObject.csrf_k) { + return { + success: false, + payload: null, + msg: "No CSRF_K in decrypted payload", + }; + } + if (!(0, write_auth_files_1.checkAuthFile)(userObject.csrf_k)) { + return { + success: false, + payload: null, + msg: "Auth file doesn't exist", + }; + } + /** + * Grab the payload + * + * @description Grab the payload + */ + if ((level === null || level === void 0 ? void 0 : level.match(/deep/i)) && finalRequest) { + if (csrfHeaderName && + finalRequest.headers[csrfHeaderName] !== userObject.csrf_k) { + return { + success: false, + payload: null, + msg: "CSRF_K mismatch", + }; + } + const targetCsrfHeaderKey = Object.keys(finalRequest.headers) + .map((k) => k.replace(/[^a-zA-Z0-9\-]/g, "")) + .find((k) => k == userObject.csrf_k); + if (csrfHeaderIsValue && !targetCsrfHeaderKey) { + return { + success: false, + payload: null, + msg: "CSRF_K Header Key mismatch", + }; + } + } + const payloadCreationDate = Number(userObject.date); + if (Number.isNaN(payloadCreationDate) || + typeof payloadCreationDate !== "number") { + return { + success: false, + payload: null, + msg: "Payload Creation Date is not a number", + }; + } + const timeElapsed = Date.now() - payloadCreationDate; + const finalExpiry = process.env.DSQL_SESSION_EXPIRY_TIME + ? Number(process.env.DSQL_SESSION_EXPIRY_TIME) + : expiry; + if (timeElapsed > finalExpiry) { + return { + success: false, + payload: null, + msg: "Session has expired", + }; + } + /** + * Return User Object + * + * @description Return User Object + */ + return { + success: true, + payload: userObject, + }; + } + catch ( /** @type {any} */error) { + /** + * Return User Object + * + * @description Return User Object + */ + return { + success: false, + payload: null, + msg: error.message, + }; + } +} diff --git a/dist/users/validate-temp-email-code.d.ts b/dist/users/validate-temp-email-code.d.ts new file mode 100644 index 0000000..e9ad864 --- /dev/null +++ b/dist/users/validate-temp-email-code.d.ts @@ -0,0 +1,14 @@ +import http from "http"; +import { SendOneTimeCodeEmailResponse } from "../package-shared/types"; +type Param = { + request?: http.IncomingMessage & { + [s: string]: any; + }; + cookieString?: string; + email?: string; +}; +/** + * # Verify the temp email code sent to the user's email address + */ +export default function validateTempEmailCode({ request, email, cookieString, }: Param): Promise; +export {}; diff --git a/dist/users/validate-temp-email-code.js b/dist/users/validate-temp-email-code.js new file mode 100644 index 0000000..f9048e4 --- /dev/null +++ b/dist/users/validate-temp-email-code.js @@ -0,0 +1,47 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = validateTempEmailCode; +const get_auth_cookie_names_1 = __importDefault(require("../package-shared/functions/backend/cookies/get-auth-cookie-names")); +const parseCookies_1 = __importDefault(require("../package-shared/utils/backend/parseCookies")); +const decrypt_1 = __importDefault(require("../package-shared/functions/dsql/decrypt")); +const ejson_1 = __importDefault(require("../package-shared/utils/ejson")); +/** + * # Verify the temp email code sent to the user's email address + */ +function validateTempEmailCode(_a) { + return __awaiter(this, arguments, void 0, function* ({ request, email, cookieString, }) { + try { + const keyNames = (0, get_auth_cookie_names_1.default)(); + const oneTimeCodeCookieName = keyNames.oneTimeCodeName; + const cookies = (0, parseCookies_1.default)({ request, cookieString }); + const encryptedOneTimeCode = cookies[oneTimeCodeCookieName]; + const encryptedPayload = (0, decrypt_1.default)({ + encryptedString: encryptedOneTimeCode, + }); + const payload = ejson_1.default.parse(encryptedPayload); + if ((payload === null || payload === void 0 ? void 0 : payload.email) && !email) { + return payload; + } + if ((payload === null || payload === void 0 ? void 0 : payload.email) && payload.email === email) { + return payload; + } + return null; + } + catch (error) { + console.log("validateTempEmailCode error:", error.message); + return null; + } + }); +} diff --git a/dist/users/validate-token.d.ts b/dist/users/validate-token.d.ts new file mode 100644 index 0000000..07a4294 --- /dev/null +++ b/dist/users/validate-token.d.ts @@ -0,0 +1,15 @@ +import { DATASQUIREL_LoggedInUser } from "../package-shared/types"; +type Param = { + token: string; + encryptionKey: string; + encryptionSalt: string; + level?: ("deep" | "normal") | null; + database: string; +}; +/** + * Validate Token + * ====================================== + * @description This Function takes in a encrypted token and returns a user object + */ +export default function validateToken({ token, encryptionKey, encryptionSalt, }: Param): DATASQUIREL_LoggedInUser | null; +export {}; diff --git a/dist/users/validate-token.js b/dist/users/validate-token.js new file mode 100644 index 0000000..747213b --- /dev/null +++ b/dist/users/validate-token.js @@ -0,0 +1,63 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = validateToken; +const decrypt_1 = __importDefault(require("../package-shared/functions/dsql/decrypt")); +/** + * Validate Token + * ====================================== + * @description This Function takes in a encrypted token and returns a user object + */ +function validateToken({ token, encryptionKey, encryptionSalt, }) { + try { + /** + * Grab the payload + * + * @description Grab the payload + */ + const key = token; + /** + * Grab the payload + * + * @description Grab the payload + */ + let userPayload = (0, decrypt_1.default)({ + encryptedString: key, + encryptionKey, + encryptionSalt, + }); + /** + * Grab the payload + * + * @description Grab the payload + */ + if (!userPayload) { + return null; + } + /** + * Grab the payload + * + * @description Grab the payload + */ + let userObject = JSON.parse(userPayload); + if (!userObject.csrf_k) { + return null; + } + /** + * Return User Object + * + * @description Return User Object + */ + return userObject; + } + catch (error) { + /** + * Return User Object + * + * @description Return User Object + */ + return null; + } +} diff --git a/dist/utils/delete-file.d.ts b/dist/utils/delete-file.d.ts new file mode 100644 index 0000000..af89680 --- /dev/null +++ b/dist/utils/delete-file.d.ts @@ -0,0 +1,18 @@ +interface Return { + success: boolean; + payload: { + urlPath: string; + urlThumbnailPath: string; + } | null; + msg?: string; +} +type Param = { + key: string; + url: string; + user_id?: string | number; +}; +/** + * # Delete File via API + */ +export default function deleteFile({ key, url, user_id, }: Param): Promise; +export {}; diff --git a/dist/utils/delete-file.js b/dist/utils/delete-file.js new file mode 100644 index 0000000..3391a2f --- /dev/null +++ b/dist/utils/delete-file.js @@ -0,0 +1,77 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = deleteFile; +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +/** + * # Delete File via API + */ +function deleteFile(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, url, user_id, }) { + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + try { + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify({ url: url }); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/query/${user_id || grabedHostNames.user_id}/delete-file`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + return httpResponse; + } + catch ( /** @type {*} */error) { + console.log("Error deleting file: ", error.message); + return { + success: false, + payload: null, + msg: error.message, + }; + } + }); +} +module.exports = deleteFile; diff --git a/dist/utils/get-schema.d.ts b/dist/utils/get-schema.d.ts new file mode 100644 index 0000000..f77ca5f --- /dev/null +++ b/dist/utils/get-schema.d.ts @@ -0,0 +1,10 @@ +import { DSQL_DatabaseSchemaType, DSQL_FieldSchemaType, DSQL_TableSchemaType, GetSchemaAPIParam } from "../package-shared/types"; +type GetSchemaReturn = { + success: boolean; + payload?: DSQL_DatabaseSchemaType | DSQL_TableSchemaType | DSQL_FieldSchemaType | null; +}; +/** + * # Get Schema for Database, table, or field * + */ +export default function getSchema({ key, database, field, table, user_id, }: GetSchemaAPIParam): Promise; +export {}; diff --git a/dist/utils/get-schema.js b/dist/utils/get-schema.js new file mode 100644 index 0000000..34ad679 --- /dev/null +++ b/dist/utils/get-schema.js @@ -0,0 +1,73 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = getSchema; +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +/** + * # Get Schema for Database, table, or field * + */ +function getSchema(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, database, field, table, user_id, }) { + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const queryObject = { database, field, table }; + let query = Object.keys(queryObject) + .filter((k) => queryObject[k]) + .map((k) => `${k}=${queryObject[k]}`) + .join("&"); + scheme + .request({ + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/query/${user_id || grabedHostNames.user_id}/get-schema` + ((query === null || query === void 0 ? void 0 : query.match(/./)) ? `?${query}` : ""), + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + resolve(null); + }); + }) + .end(); + }); + return { + success: true, + payload: httpResponse, + }; + }); +} diff --git a/dist/utils/get.d.ts b/dist/utils/get.d.ts new file mode 100644 index 0000000..bd3d2f5 --- /dev/null +++ b/dist/utils/get.d.ts @@ -0,0 +1,15 @@ +import { GetReturn } from "../package-shared/types"; +type Param = { + key?: string; + db?: string; + query: string; + queryValues?: string[]; + tableName?: string; + useLocal?: boolean; + user_id?: string | number; +}; +/** + * # Make a get request to Datasquirel API + */ +export default function get({ key, db, query, queryValues, tableName, useLocal, user_id, }: Param): Promise; +export {}; diff --git a/dist/utils/get.js b/dist/utils/get.js new file mode 100644 index 0000000..90218d6 --- /dev/null +++ b/dist/utils/get.js @@ -0,0 +1,119 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = get; +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const get_1 = __importDefault(require("../package-shared/functions/api/query/get")); +const serialize_query_1 = __importDefault(require("../package-shared/utils/serialize-query")); +/** + * # Make a get request to Datasquirel API + */ +function get(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, db, query, queryValues, tableName, useLocal, user_id, }) { + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + return yield (0, get_1.default)({ + dbFullName: DSQL_DB_NAME, + query, + queryValues, + tableName, + dbSchema, + useLocal, + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + /** @type {import("../package-shared/types").GetReqQueryObject} */ + const queryObject = { + db: process.env.DSQL_API_DB_NAME || String(db), + query: String(query.replace(/\n|\r|\n\r/g, "").replace(/ {2,}/g, " ")), + queryValues: queryValues + ? JSON.stringify(queryValues) + : undefined, + tableName, + }; + const queryString = (0, serialize_query_1.default)(Object.assign({}, queryObject)); + let path = `/api/query/${user_id || grabedHostNames.user_id}/get${queryString}`; + /** @type {https.RequestOptions} */ + const requestObject = { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: key || + process.env.DSQL_READ_ONLY_API_KEY || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path, + }; + scheme + .request(requestObject, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + try { + resolve(JSON.parse(str)); + } + catch ( /** @type {any} */error) { + reject({ + error: error.message, + result: str, + }); + } + }); + response.on("error", (err) => { + console.log("DSQL get Error,", err.message); + resolve(null); + }); + }) + .end(); + }); + return httpResponse; + }); +} diff --git a/dist/utils/post.d.ts b/dist/utils/post.d.ts new file mode 100644 index 0000000..f17841d --- /dev/null +++ b/dist/utils/post.d.ts @@ -0,0 +1,15 @@ +import { PostDataPayload, PostReturn } from "../package-shared/types"; +type Param = { + key?: string; + database?: string; + query: PostDataPayload; + queryValues?: any[]; + tableName?: string; + useLocal?: boolean; + user_id?: boolean; +}; +/** + * # Make a post request to Datasquirel API + */ +export default function post({ key, query, queryValues, database, tableName, useLocal, user_id, }: Param): Promise; +export {}; diff --git a/dist/utils/post.js b/dist/utils/post.js new file mode 100644 index 0000000..424cb60 --- /dev/null +++ b/dist/utils/post.js @@ -0,0 +1,134 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = post; +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +const post_1 = __importDefault(require("../package-shared/functions/api/query/post")); +/** + * # Make a post request to Datasquirel API + */ +function post(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, query, queryValues, database, tableName, useLocal, user_id, }) { + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + /** + * Check for local DB settings + * + * @description Look for local db settings in `.env` file and by pass the http request if available + */ + const { DSQL_DB_HOST, DSQL_DB_USERNAME, DSQL_DB_PASSWORD, DSQL_DB_NAME } = process.env; + if ((DSQL_DB_HOST === null || DSQL_DB_HOST === void 0 ? void 0 : DSQL_DB_HOST.match(/./)) && + (DSQL_DB_USERNAME === null || DSQL_DB_USERNAME === void 0 ? void 0 : DSQL_DB_USERNAME.match(/./)) && + (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && + (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && + useLocal) { + /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ + let dbSchema; + try { + const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); + dbSchema = JSON.parse(fs_1.default.readFileSync(localDbSchemaPath, "utf8")); + } + catch (error) { } + return yield (0, post_1.default)({ + dbFullName: DSQL_DB_NAME, + query, + dbSchema, + queryValues, + tableName, + useLocal, + }); + } + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const reqPayloadString = JSON.stringify({ + query, + queryValues, + database: process.env.DSQL_API_DB_NAME || database, + tableName: tableName ? tableName : null, + }).replace(/\n|\r|\n\r/gm, ""); + try { + JSON.parse(reqPayloadString); + } + catch (error) { + console.log(error); + console.log(reqPayloadString); + return { + success: false, + payload: null, + error: "Query object is invalid. Please Check query data values", + }; + } + const reqPayload = reqPayloadString; + const requPath = `/api/query/${user_id || grabedHostNames.user_id}/post`; + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: requPath, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + try { + resolve(JSON.parse(str)); + } + catch ( /** @type {any} */error) { + console.log("Route ERROR:", error.message); + resolve({ + success: false, + payload: null, + error: error.message, + errPayload: str, + }); + } + }); + response.on("error", (err) => { + resolve({ + success: false, + payload: null, + error: err.message, + }); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.on("error", (error) => { + console.log("HTTPS request ERROR =>", error); + }); + httpsRequest.end(); + }); + return httpResponse; + }); +} diff --git a/dist/utils/upload-file.d.ts b/dist/utils/upload-file.d.ts new file mode 100644 index 0000000..8944248 --- /dev/null +++ b/dist/utils/upload-file.d.ts @@ -0,0 +1,23 @@ +interface Return { + success: boolean; + payload: { + urlPath: string; + } | null; + msg?: string; +} +type Param = { + key: string; + payload: { + fileData: string; + fileName: string; + mimeType?: string; + folder?: string; + isPrivate?: boolean; + }; + user_id?: boolean; +}; +/** + * # Upload File via API + */ +export default function uploadImage({ key, payload, user_id, }: Param): Promise; +export {}; diff --git a/dist/utils/upload-file.js b/dist/utils/upload-file.js new file mode 100644 index 0000000..b2f2389 --- /dev/null +++ b/dist/utils/upload-file.js @@ -0,0 +1,76 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = uploadImage; +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +/** + * # Upload File via API + */ +function uploadImage(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, payload, user_id, }) { + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + try { + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify(payload); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/query/${user_id || grabedHostNames.user_id}/add-file`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + return httpResponse; + } + catch (error) { + console.log("Error in uploading file: ", error.message); + return { + success: false, + payload: null, + msg: error.message, + }; + } + }); +} diff --git a/dist/utils/upload-image.d.ts b/dist/utils/upload-image.d.ts new file mode 100644 index 0000000..2cdba7a --- /dev/null +++ b/dist/utils/upload-image.d.ts @@ -0,0 +1,25 @@ +interface FunctionReturn { + success: boolean; + payload: { + urlPath: string; + urlThumbnailPath: string; + } | null; + msg?: string; +} +type Param = { + key?: string; + payload: { + imageData: string; + imageName: string; + mimeType?: string; + thumbnailSize?: number; + folder?: string; + isPrivate?: boolean; + }; + user_id?: boolean; +}; +/** + * # Upload Image via API + */ +export default function uploadImage({ key, payload, user_id, }: Param): Promise; +export {}; diff --git a/dist/utils/upload-image.js b/dist/utils/upload-image.js new file mode 100644 index 0000000..8c57ec1 --- /dev/null +++ b/dist/utils/upload-image.js @@ -0,0 +1,78 @@ +"use strict"; +// @ts-check +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = uploadImage; +const grab_host_names_1 = __importDefault(require("../package-shared/utils/grab-host-names")); +/** + * # Upload Image via API + */ +function uploadImage(_a) { + return __awaiter(this, arguments, void 0, function* ({ key, payload, user_id, }) { + const grabedHostNames = (0, grab_host_names_1.default)(); + const { host, port, scheme } = grabedHostNames; + try { + /** + * Make https request + * + * @description make a request to datasquirel.com + */ + const httpResponse = yield new Promise((resolve, reject) => { + const reqPayload = JSON.stringify(payload); + const httpsRequest = scheme.request({ + method: "POST", + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.from(reqPayload).length, + Authorization: key || + process.env.DSQL_FULL_ACCESS_API_KEY || + process.env.DSQL_API_KEY, + }, + port, + hostname: host, + path: `/api/query/${user_id || grabedHostNames.user_id}/add-image`, + }, + /** + * Callback Function + * + * @description https request callback + */ + (response) => { + var str = ""; + response.on("data", function (chunk) { + str += chunk; + }); + response.on("end", function () { + resolve(JSON.parse(str)); + }); + response.on("error", (err) => { + reject(err); + }); + }); + httpsRequest.write(reqPayload); + httpsRequest.end(); + }); + return httpResponse; + } + catch (error) { + console.log("Error in uploading image: ", error.message); + return { + success: false, + payload: null, + msg: error.message, + }; + } + }); +} +module.exports = uploadImage; diff --git a/package.json b/package.json index cee874f..a45e56e 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,7 @@ "dsql-dump": "dist/engine/dump.js" }, "scripts": { - "build": "bun build ./index.ts --outdir ./dist --target node --splitting --minify", - "build:cjs": "bun build ./index.ts --outdir ./dist/cjs --target node --format cjs --splitting --minify", - "build:esm": "bun build ./index.ts --outdir ./dist/esm --target node --format esm --splitting --minify", - "dev": "bun build ./index.ts --outdir ./dist --target node --splitting --minify --watch" + "dev": "tsc --watch" }, "repository": { "type": "git", diff --git a/publish.sh b/publish.sh index 28bf7c3..440d9d7 100755 --- a/publish.sh +++ b/publish.sh @@ -6,6 +6,4 @@ else msg="$1" fi -npm run compile git add . && git commit -m "$msg" && git push && npm publish -npm run delete-ts diff --git a/tsconfig.json b/tsconfig.json index 614bd65..b69fc02 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,17 +6,15 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, - // "skipLibCheck": true, + "skipLibCheck": true, "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "incremental": true, "resolveJsonModule": true, - "isolatedModules": true, "jsx": "preserve", "moduleResolution": "node", - "emitDeclarationOnly": true, "declaration": true, - "outDir": "./dump/tsc", + "outDir": "dist", "plugins": [ { "name": "next"