const crypto = require('crypto') const generate_mid = () => { return "" + Math.floor(1e3 * Math.random()) + new Date().getTime() + " 0" } const generate_uuid = () => { return "-" + Date.now() + "1" } const generate_device_id = (user_id) => { for (var ee, et = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), en = [], eo = Math.random, ei = 0; ei < 36; ei++) 8 === ei || 13 === ei || 18 === ei || 23 === ei ? en[ei] = "-" : 14 === ei ? en[ei] = "4" : (ee = 0 | 16 * eo(), en[ei] = et[19 === ei ? 3 & ee | 8 : ee]); return en.join("") + "-" + user_id } const generate_sign = (t, token, data) => { const j = t const h = 34839810 const msg = token + "&" + j + "&" + h + "&" + data const md5 = crypto.createHash('md5') md5.update(msg) return md5.digest('hex') } eM = new TextDecoder("utf-8"); eL = null var sv = Array(4096); function sg() { var ee, et = eI[aG++]; if (!(et >= 160) || !(et < 192)) return aG--, sy(a5()); if (et -= 160, aX >= aG) return eR.slice(aG - aq, (aG += et) - aq); if (!(0 == aX && eO < 180)) return se(et); var en = (et << 5 ^ (et > 1 ? eZ.getUint16(aG) : et > 0 ? eI[aG] : 0)) & 4095 , eo = sv[en] , ei = aG , ec = aG + et - 3 , eu = 0; if (eo && eo.bytes == et) { for (; ei < ec;) { if ((ee = eZ.getUint32(ei)) != eo[eu++]) { ei = 1879048192; break } ei += 4 } for (ec += 3; ei < ec;) if ((ee = eI[ei++]) != eo[eu++]) { ei = 1879048192; break } if (ei === ec) return aG = ei, eo.string; ec -= 3, ei = aG } for (eo = [], sv[en] = eo, eo.bytes = et; ei < ec;) ee = eZ.getUint32(ei), eo.push(ee), ei += 4; for (ec += 3; ei < ec;) ee = eI[ei++], eo.push(ee); var ed = et < 16 ? su(et) : sl(et); return null != ed ? eo.string = ed : eo.string = se(et) } function sy(ee) { if ("string" == typeof ee) return ee; if ("number" == typeof ee || "boolean" == typeof ee || "bigint" == typeof ee) return ee.toString(); if (null == ee) return ee + ""; throw Error("Invalid property type for record", typeof ee) } r9 = function (ee) { return atob(rW(ee)) } rW = function (ee) { return ee.replace(/[^A-Za-z0-9\+\/]/g, "") } aW = { "useRecords": false, "mapsAsObjects": true } aJ = false eP = [] function a3(ee) { if (!aW.trusted && !aJ) { var et, en, eo = eP.sharedLength || 0; eo < eP.length && (eP.length = eo) } if (aW.randomAccessStructure && eI[aG] < 64 && eI[aG] >= 32 && ej ? (et = ej(eI, aG, eO, aW), eI = null, !(ee && ee.lazy) && et && (et = et.toJSON()), aG = eO) : et = a5(), eD && (aG = eD.postBundlePosition, eD = null), aJ && (eP.restoreStructures = null), aG == eO) eP && eP.restoreStructures && a4(), eP = null, eI = null, eL && (eL = null); else if (aG > eO) throw Error("Unexpected end of MessagePack data"); else if (!aJ) { try { en = JSON.stringify(et, function (ee, et) { return "bigint" == typeof et ? "".concat(et, "n") : et }).slice(0, 100) } catch (ee) { en = "(JSON view not available " + ee + ")" } throw Error("Data read, but end of buffer not reached " + en) } return et } function so(ee) { if (ee < 16 && (et = su(ee))) return et; if (ee > 64 && eM) return eM.decode(eI.subarray(aG, aG += ee)); var et, en = aG + ee, eo = []; for (et = ""; aG < en;) { var ei = eI[aG++]; if ((128 & ei) === 0) eo.push(ei); else if ((224 & ei) === 192) { var ec = 63 & eI[aG++]; eo.push((31 & ei) << 6 | ec) } else if ((240 & ei) === 224) { var eu = 63 & eI[aG++] , ed = 63 & eI[aG++]; eo.push((31 & ei) << 12 | eu << 6 | ed) } else if ((248 & ei) === 240) { var ef = (7 & ei) << 18 | (63 & eI[aG++]) << 12 | (63 & eI[aG++]) << 6 | 63 & eI[aG++]; ef > 65535 && (ef -= 65536, eo.push(ef >>> 10 & 1023 | 55296), ef = 56320 | 1023 & ef), eo.push(ef) } else eo.push(ei); eo.length >= 4096 && (et += sc.apply(String, eo), eo.length = 0) } return eo.length > 0 && (et += sc.apply(String, eo)), et } se = so; var sc = String.fromCharCode; function sl(ee) { for (var et = aG, en = Array(ee), eo = 0; eo < ee; eo++) { var ei = eI[aG++]; if ((128 & ei) > 0) { aG = et; return } en[eo] = ei } return sc.apply(String, en) } function su(ee) { if (ee < 4) { if (ee < 2) { if (0 === ee) return ""; var et = eI[aG++]; if ((128 & et) > 1) { aG -= 1; return } return sc(et) } var en = eI[aG++] , eo = eI[aG++]; if ((128 & en) > 0 || (128 & eo) > 0) { aG -= 2; return } if (ee < 3) return sc(en, eo); var ei = eI[aG++]; if ((128 & ei) > 0) { aG -= 3; return } return sc(en, eo, ei) } var ec = eI[aG++] , eu = eI[aG++] , ed = eI[aG++] , ef = eI[aG++]; if ((128 & ec) > 0 || (128 & eu) > 0 || (128 & ed) > 0 || (128 & ef) > 0) { aG -= 4; return } if (ee < 6) { if (4 === ee) return sc(ec, eu, ed, ef); var ep = eI[aG++]; if ((128 & ep) > 0) { aG -= 5; return } return sc(ec, eu, ed, ef, ep) } if (ee < 8) { var em = eI[aG++] , eh = eI[aG++]; if ((128 & em) > 0 || (128 & eh) > 0) { aG -= 6; return } if (ee < 7) return sc(ec, eu, ed, ef, em, eh); var ev = eI[aG++]; if ((128 & ev) > 0) { aG -= 7; return } return sc(ec, eu, ed, ef, em, eh, ev) } var eg = eI[aG++] , eC = eI[aG++] , eS = eI[aG++] , ew = eI[aG++]; if ((128 & eg) > 0 || (128 & eC) > 0 || (128 & eS) > 0 || (128 & ew) > 0) { aG -= 8; return } if (ee < 10) { if (8 === ee) return sc(ec, eu, ed, ef, eg, eC, eS, ew); var eE = eI[aG++]; if ((128 & eE) > 0) { aG -= 9; return } return sc(ec, eu, ed, ef, eg, eC, eS, ew, eE) } if (ee < 12) { var ek = eI[aG++] , e_ = eI[aG++]; if ((128 & ek) > 0 || (128 & e_) > 0) { aG -= 10; return } if (ee < 11) return sc(ec, eu, ed, ef, eg, eC, eS, ew, ek, e_); var eT = eI[aG++]; if ((128 & eT) > 0) { aG -= 11; return } return sc(ec, eu, ed, ef, eg, eC, eS, ew, ek, e_, eT) } var eN = eI[aG++] , eM = eI[aG++] , eO = eI[aG++] , eP = eI[aG++]; if ((128 & eN) > 0 || (128 & eM) > 0 || (128 & eO) > 0 || (128 & eP) > 0) { aG -= 12; return } if (ee < 14) { if (12 === ee) return sc(ec, eu, ed, ef, eg, eC, eS, ew, eN, eM, eO, eP); var eR = eI[aG++]; if ((128 & eR) > 0) { aG -= 13; return } return sc(ec, eu, ed, ef, eg, eC, eS, ew, eN, eM, eO, eP, eR) } var eD = eI[aG++] , eL = eI[aG++]; if ((128 & eD) > 0 || (128 & eL) > 0) { aG -= 14; return } if (ee < 15) return sc(ec, eu, ed, ef, eg, eC, eS, ew, eN, eM, eO, eP, eD, eL); var eZ = eI[aG++]; if ((128 & eZ) > 0) { aG -= 15; return } return sc(ec, eu, ed, ef, eg, eC, eS, ew, eN, eM, eO, eP, eD, eL, eZ) } function ss(ee) { if (aW.mapsAsObjects) { for (var et = {}, en = 0; en < ee; en++) { var eo = sg(); "__proto__" === eo && (eo = "__proto_"), et[eo] = a5() } return et } for (var ei = new Map, ec = 0; ec < ee; ec++) ei.set(a5(), a5()); return ei } function a5() { var ee, et = eI[aG++]; if (et < 160) { if (et < 128) { if (et < 64) return et; var en = eP[63 & et] || aW.getStructures && a9()[63 & et]; return en ? (en.read || (en.read = a8(en, 63 & et)), en.read()) : et } if (et < 144) { if (et -= 128, aW.mapsAsObjects) { for (var eo = {}, ei = 0; ei < et; ei++) { var ec = sg(); "__proto__" === ec && (ec = "__proto_"), eo[ec] = a5() } return eo } for (var eu = new Map, ed = 0; ed < et; ed++) eu.set(a5(), a5()); return eu } for (var ef = Array(et -= 144), ep = 0; ep < et; ep++) ef[ep] = a5(); return aW.freezeData ? Object.freeze(ef) : ef } if (et < 192) { var em = et - 160; if (aX >= aG) return eR.slice(aG - aq, (aG += em) - aq); if (0 == aX && eO < 140) { var eh = em < 16 ? su(em) : sl(em); if (null != eh) return eh } return se(em) } switch (et) { case 192: return null; case 193: if (eD) { if ((ee = a5()) > 0) return eD[1].slice(eD.position1, eD.position1 += ee); return eD[0].slice(eD.position0, eD.position0 -= ee) } return aY; case 194: return !1; case 195: return !0; case 196: if (void 0 === (ee = eI[aG++])) throw Error("Unexpected end of buffer"); return sm(ee); case 197: return ee = eZ.getUint16(aG), aG += 2, sm(ee); case 198: return ee = eZ.getUint32(aG), aG += 4, sm(ee); case 199: return sh(eI[aG++]); case 200: return ee = eZ.getUint16(aG), aG += 2, sh(ee); case 201: return ee = eZ.getUint32(aG), aG += 4, sh(ee); case 202: if (ee = eZ.getFloat32(aG), aW.useFloat32 > 2) { var ev = sT[(127 & eI[aG]) << 1 | eI[aG + 1] >> 7]; return aG += 4, (ev * ee + (ee > 0 ? .5 : -.5) >> 0) / ev } return aG += 4, ee; case 203: return ee = eZ.getFloat64(aG), aG += 8, ee; case 204: return eI[aG++]; case 205: return ee = eZ.getUint16(aG), aG += 2, ee; case 206: return ee = eZ.getUint32(aG), aG += 4, ee; case 207: return "number" === aW.int64AsType ? ee = 4294967296 * eZ.getUint32(aG) + eZ.getUint32(aG + 4) : "string" === aW.int64AsType ? ee = eZ.getBigUint64(aG).toString() : "auto" === aW.int64AsType ? (ee = eZ.getBigUint64(aG)) <= BigInt(2) << BigInt(52) && (ee = Number(ee)) : ee = eZ.getBigUint64(aG), aG += 8, ee; case 208: return eZ.getInt8(aG++); case 209: return ee = eZ.getInt16(aG), aG += 2, ee; case 210: return ee = eZ.getInt32(aG), aG += 4, ee; case 211: return "number" === aW.int64AsType ? ee = 4294967296 * eZ.getInt32(aG) + eZ.getUint32(aG + 4) : "string" === aW.int64AsType ? ee = eZ.getBigInt64(aG).toString() : "auto" === aW.int64AsType ? (ee = eZ.getBigInt64(aG)) >= BigInt(-2) << BigInt(52) && ee <= BigInt(2) << BigInt(52) && (ee = Number(ee)) : ee = eZ.getBigInt64(aG), aG += 8, ee; case 212: if (114 == (ee = eI[aG++])) return sC(63 & eI[aG++]); var eg = aK[ee]; if (eg) { if (eg.read) return aG++, eg.read(a5()); if (eg.noBuffer) return aG++, eg(); return eg(eI.subarray(aG, ++aG)) } throw Error("Unknown extension " + ee); case 213: if (114 == (ee = eI[aG])) return aG++, sC(63 & eI[aG++], eI[aG++]); return sh(2); case 214: return sh(4); case 215: return sh(8); case 216: return sh(16); case 217: if (ee = eI[aG++], aX >= aG) return eR.slice(aG - aq, (aG += ee) - aq); return st(ee); case 218: if (ee = eZ.getUint16(aG), aG += 2, aX >= aG) return eR.slice(aG - aq, (aG += ee) - aq); return sn(ee); case 219: if (ee = eZ.getUint32(aG), aG += 4, aX >= aG) return eR.slice(aG - aq, (aG += ee) - aq); return sr(ee); case 220: return ee = eZ.getUint16(aG), aG += 2, si(ee); case 221: return ee = eZ.getUint32(aG), aG += 4, si(ee); case 222: return ee = eZ.getUint16(aG), aG += 2, ss(ee); case 223: return ee = eZ.getUint32(aG), aG += 4, ss(ee); default: if (et >= 224) return et - 256; if (void 0 === et) { var eC = Error("Unexpected end of MessagePack data"); throw eC.incomplete = !0, eC } throw Error("Unknown MessagePack token " + et) } } sn = so var a6 = /^[a-zA-Z_$][a-zA-Z\d_$]*$/; const decrypt = (ee) => { for (var et, en, eo = r9(ee), ei = eo.length, ec = new Uint8Array(ei), eu = 0; eu < ei; eu++) { var ed = eo.charCodeAt(eu); ec[eu] = ed } en = {} et = ec; et.buffer || et.constructor !== ArrayBuffer || (et = "undefined" != typeof Buffer ? Buffer.from(et) : new Uint8Array(et)), "object" == typeof en ? (eO = en.end || et.length, aG = en.start || 0) : (aG = 0, eO = en > -1 ? en : et.length), aX = 0, eR = null, eD = null, eI = et; eM = new TextDecoder("utf-8"); eL = null eP = []; eZ = et.dataView || (et.dataView = new DataView(et.buffer, et.byteOffset, et.byteLength)) res = a3(en) // ec = ecc; // rA = 0; // rB = 0; // ed = []; // eu = ec.length; // rj = { // "useRecords": false, // "mapsAsObjects": true // } // // ei 是 TextDecoder // ei = new TextDecoder("utf-8"); // eh = new DataView(ec.buffer, ec.byteOffset, ec.byteLength); // ec.dataView = eh; // let res = rK() const replacer = (key, value) => { if (typeof value === 'bigint') { return value.toString(); } return value; }; res = JSON.stringify(res, replacer); return res; } // console.log(generate_mid()) // console.log(generate_uuid()) // console.log(generate_device_id()) // console.log(generate_sign('5f65b00f83994987e334f97360d69557', '{"sessionTypes":"1,19"}')) // let msg = "ggGLAYEBtTIyMDI2NDA5MTgwNzlAZ29vZmlzaAKzNDc4MTI4NzAwMDBAZ29vZmlzaAOxMzQwMjM5MTQ3MjUwMy5QTk0EAAXPAAABlYW04bIGggFlA4UBoAKjMTExA6AEAQXaADR7ImF0VXNlcnMiOltdLCJjb250ZW50VHlwZSI6MSwidGV4dCI6eyJ0ZXh0IjoiMTExIn19BwIIAQkACoupX3BsYXRmb3Jtp2FuZHJvaWSmYml6VGFn2gBBeyJzb3VyY2VJZCI6IlM6MSIsIm1lc3NhZ2VJZCI6ImYzNjkwMmVmZjQ1NDQ1YmRiMmQxYjBmZDE2OGY4MjY0In2sZGV0YWlsTm90aWNlozExMadleHRKc29u2gBLeyJxdWlja1JlcGx5IjoiMSIsIm1lc3NhZ2VJZCI6ImYzNjkwMmVmZjQ1NDQ1YmRiMmQxYjBmZDE2OGY4MjY0IiwidGFnIjoidSJ9r3JlbWluZGVyQ29udGVudKMxMTGucmVtaW5kZXJOb3RpY2W15Y+R5p2l5LiA5p2h5paw5raI5oGvrXJlbWluZGVyVGl0bGWmc2hh5L+uq3JlbWluZGVyVXJs2gCbZmxlYW1hcmtldDovL21lc3NhZ2VfY2hhdD9pdGVtSWQ9ODk3NzQyNzQ4MDExJnBlZXJVc2VySWQ9MjIwMjY0MDkxODA3OSZwZWVyVXNlck5pY2s9dCoqKjEmc2lkPTQ3ODEyODcwMDAwJm1lc3NhZ2VJZD1mMzY5MDJlZmY0NTQ0NWJkYjJkMWIwZmQxNjhmODI2NCZhZHY9bm+sc2VuZGVyVXNlcklkrTIyMDI2NDA5MTgwNzmuc2VuZGVyVXNlclR5cGWhMKtzZXNzaW9uVHlwZaExDAEDgahuZWVkUHVzaKR0cnVl"; // // msg = "ggGLAYEBsjMxNDk2MzcwNjNAZ29vZmlzaAKzNDc5ODMzODkwOTZAZ29vZmlzaAOxMzQxNjU2NTI3NDU0Mi5QTk0EAAXPAAABlbKji20GggFlA4UBoAK6W+aIkeW3suaLjeS4i++8jOW+heS7mOasvl0DoAQaBdoEKnsiY29udGVudFR5cGUiOjI2LCJkeENhcmQiOnsiaXRlbSI6eyJtYWluIjp7ImNsaWNrUGFyYW0iOnsiYXJnMSI6Ik1zZ0NhcmQiLCJhcmdzIjp7InNvdXJjZSI6ImltIiwidGFza19pZCI6IjNleFFKSE9UbVBVMSIsIm1zZ19pZCI6ImNjOGJjMmRmN2M5MzRkZjA4NmUwNTY3Y2I2OWYxNTczIn19LCJleENvbnRlbnQiOnsiYmdDb2xvciI6IiNGRkZGRkYiLCJidXR0b24iOnsiYmdDb2xvciI6IiNGRkU2MEYiLCJib3JkZXJDb2xvciI6IiNGRkU2MEYiLCJjbGlja1BhcmFtIjp7ImFyZzEiOiJNc2dDYXJkQWN0aW9uIiwiYXJncyI6eyJzb3VyY2UiOiJpbSIsInRhc2tfaWQiOiIzZXhRSkhPVG1QVTEiLCJtc2dfaWQiOiJjYzhiYzJkZjdjOTM0ZGYwODZlMDU2N2NiNjlmMTU3MyJ9fSwiZm9udENvbG9yIjoiIzMzMzMzMyIsInRhcmdldFVybCI6ImZsZWFtYXJrZXQ6Ly9hZGp1c3RfcHJpY2U/Zmx1dHRlcj10cnVlJmJpek9yZGVySWQ9MjUwMzY4ODEyNjM1NjYzNjM3MCIsInRleHQiOiLkv67mlLnku7fmoLwifSwiZGVzYyI6Iuivt+WPjOaWueayn+mAmuWPiuaXtuehruiupOS7t+agvCIsImRlc2NDb2xvciI6IiNBM0EzQTMiLCJ0aXRsZSI6IuaIkeW3suaLjeS4i++8jOW+heS7mOasviIsInVwZ3JhZGUiOnsidGFyZ2V0VXJsIjoiaHR0cHM6Ly9oNS5tLmdvb2Zpc2guY29tL2FwcC9pZGxlRmlzaC1GMmUvZm0tZG93bmxhb2QvaG9tZS5odG1sP25vUmVkcmllY3Q9dHJ1ZSZjYW5CYWNrPXRydWUmY2hlY2tWZXJzaW9uPXRydWUiLCJ2ZXJzaW9uIjoiNy43LjkwIn19LCJ0YXJnZXRVcmwiOiJmbGVhbWFya2V0Oi8vb3JkZXJfZGV0YWlsP2lkPTI1MDM2ODgxMjYzNTY2MzYzNzAmcm9sZT1zZWxsZXIifX0sInRlbXBsYXRlIjp7Im5hbWUiOiJpZGxlZmlzaF9tZXNzYWdlX3RyYWRlX2NoYXRfY2FyZCIsInVybCI6Imh0dHBzOi8vZGluYW1pY3guYWxpYmFiYXVzZXJjb250ZW50LmNvbS9wdWIvaWRsZWZpc2hfbWVzc2FnZV90cmFkZV9jaGF0X2NhcmQvMTY2NzIyMjA1Mjc2Ny9pZGxlZmlzaF9tZXNzYWdlX3RyYWRlX2NoYXRfY2FyZC56aXAiLCJ2ZXJzaW9uIjoiMTY2NzIyMjA1Mjc2NyJ9fX0HAQgBCQAK3gAQpmJpelRhZ9oAe3sic291cmNlSWQiOiJDMkM6M2V4UUpIT1RtUFUxIiwidGFza05hbWUiOiLlt7Lmi43kuItf5pyq5LuY5qy+X+WNluWutiIsIm1hdGVyaWFsSWQiOiIzZXhRSkhPVG1QVTEiLCJ0YXNrSWQiOiIzZXhRSkhPVG1QVTEifbFjbG9zZVB1c2hSZWNlaXZlcqVmYWxzZbFjbG9zZVVucmVhZE51bWJlcqVmYWxzZaxkZXRhaWxOb3RpY2W6W+aIkeW3suaLjeS4i++8jOW+heS7mOasvl2nZXh0SnNvbtoBr3sibXNnQXJncyI6eyJ0YXNrX2lkIjoiM2V4UUpIT1RtUFUxIiwic291cmNlIjoiaW0iLCJtc2dfaWQiOiJjYzhiYzJkZjdjOTM0ZGYwODZlMDU2N2NiNjlmMTU3MyJ9LCJxdWlja1JlcGx5IjoiMSIsIm1zZ0FyZzEiOiJNc2dDYXJkIiwidXBkYXRlS2V5IjoiNDc5ODMzODkwOTY6MjUwMzY4ODEyNjM1NjYzNjM3MDoxX25vdF9wYXlfc2VsbGVyIiwibWVzc2FnZUlkIjoiY2M4YmMyZGY3YzkzNGRmMDg2ZTA1NjdjYjY5ZjE1NzMiLCJtdWx0aUNoYW5uZWwiOnsiaHVhd2VpIjoiRVhQUkVTUyIsInhpYW9taSI6IjEwODAwMCIsIm9wcG8iOiJFWFBSRVNTIiwiaG9ub3IiOiJOT1JNQUwiLCJhZ29vIjoicHJvZHVjdCIsInZpdm8iOiJPUkRFUiJ9LCJjb250ZW50VHlwZSI6IjI2IiwiY29ycmVsYXRpb25Hcm91cElkIjoiM2V4UUpIT1RtUFUxX0ZGcjRHT1NuOE9RbyJ9qHJlY2VpdmVyrTIyMDI2NDA5MTgwNzmrcmVkUmVtaW5kZXKy562J5b6F5Lmw5a625LuY5qy+sHJlZFJlbWluZGVyU3R5bGWhMa9yZW1pbmRlckNvbnRlbnS6W+aIkeW3suaLjeS4i++8jOW+heS7mOasvl2ucmVtaW5kZXJOb3RpY2W75Lmw5a625bey5ouN5LiL77yM5b6F5LuY5qy+rXJlbWluZGVyVGl0bGW75Lmw5a625bey5ouN5LiL77yM5b6F5LuY5qy+q3JlbWluZGVyVXJs2gCaZmxlYW1hcmtldDovL21lc3NhZ2VfY2hhdD9pdGVtSWQ9OTAwMDUyNjQ0Mjc3JnBlZXJVc2VySWQ9MzE0OTYzNzA2MyZwZWVyVXNlck5pY2s955S3KioqeSZzaWQ9NDc5ODMzODkwOTYmbWVzc2FnZUlkPWNjOGJjMmRmN2M5MzRkZjA4NmUwNTY3Y2I2OWYxNTczJmFkdj1ub6xzZW5kZXJVc2VySWSqMzE0OTYzNzA2M65zZW5kZXJVc2VyVHlwZaEwq3Nlc3Npb25UeXBloTGqdXBkYXRlSGVhZKR0cnVlDAEDgahuZWVkUHVzaKR0cnVl" // msg = "hAGzNDc5ODMzODkwOTZAZ29vZmlzaAIBA4KrcmVkUmVtaW5kZXKy562J5b6F5Lmw5a625LuY5qy+sHJlZFJlbWluZGVyU3R5bGWhMQTPAAABlbMlNng=" // res = decrypt(msg); // console.log(res);