text: /*
  双12红包领取
  15 0,20 * * * jd_1212red.js
  */
  const $ = new Env("双12红包领取");
  const jdCookieNode = $.isNode() ? require("./jdCookie.js") : "";
  let cookiesArr = [], cookie;
  if ($.isNode()) {
    Object.keys(jdCookieNode).forEach((item) => {
      cookiesArr.push(jdCookieNode[item]);
    });
    if (process.env.JD_DEBUG && process.env.JD_DEBUG === "false")
      console.log = () => {};
  } else {
    cookiesArr = [$.getdata("CookieJD"), $.getdata("CookieJD2"), ...$.toObj($.getdata("CookiesJD") || "[]").map((item) => item.cookie)].filter((item) => !!item);
  }
  
  !(async () => {
    if (!cookiesArr[0]) {
      $.msg($.name, "【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取", "https://bean.m.jd.com/bean/signIndex.action", { "open-url": "https://bean.m.jd.com/bean/signIndex.action" });
      return;
    }
    for (let i = 0; i < cookiesArr.length; i++) {
      if (cookiesArr[i]) {
        cookie = cookiesArr[i];
        $.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
        $.index = i + 1;
        $.isLogin = true;
        $.nickName = "";
        //await TotalBean();
        console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`);
        if (!$.isLogin) {
          $.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {"open-url": "https://bean.m.jd.com/bean/signIndex.action"});
          if ($.isNode()) {
            await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`);
          }
          continue;
        }
        await main();
      }
    }
  })()
    .catch((e) => {
      $.log("", `❌ ${$.name}, 失败! 原因: ${e}!`, "");
    })
    .finally(() => {
      $.done();
    });
  
  async function main() {
    let userName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]);
    $.UA = `jdapp;iPhone;10.2.0;13.1.2;${randomString(40)};M/5.0;network/wifi;ADID/;model/iPhone8,1;addressid/2308460622;appBuild/167853;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 13_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1;`;
    $.max = false;
    $.hotFlag = false;
    let codeLsit = ['vCCDbUB']
    $.code = codeLsit[random(0, codeLsit.length)];
    for (let i = 0; i < 1 && !$.max; i++) {
      $.newCookie = "";
      $.url1 = "";
      $.url2 = "";
      $.eid = "";
      await getInfo1();
      if (!$.url1) {
        console.log(`${userName},初始化1失败,可能黑号`);
        $.hotFlag = true;
        break;
      }
      await getInfo2();
      if (!$.url2) {
        console.log(`${userName},初始化2失败,可能黑号`);
        $.hotFlag = true;
        break;
      }
      $.actId = ($.url2.match(/mall\/active\/([^/]+)\/index\.html/) && $.url2.match(/mall\/active\/([^/]+)\/index\.html/)[1]) || "3nJaTysLg4QmXejNy3R8uWwNR1x8";
      let arr = getBody($.UA, $.url2);
      await getEid(arr);
      console.log(`$.actId:` + $.actId);
      await getcouponUrl()
      if ($.eid) {
        await getCoupons("");
      }
      await $.wait(2000);
    }
  }
  
  function getcouponUrl() {
    return new Promise((resolve) => {
      const options = {
        url: $.url2,
        headers: {
          "Host": "prodev.m.jd.com",
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "User-Agent": $.UA,
          "Accept-Language": "zh-CN,zh-Hans;q=0.9",
          "Accept-Encoding": "gzip, deflate, br",
          "Cookie": cookie
        },
      };
      $.post(options, async (err, resp, data) => {
        try {
          if (err) {
            console.log(`${$.toStr(err)}`);
            console.log(`${$.name} getcouponUrl API请求失败，请检查网路重试`);
          } else {
            if (data) {
              if ($.code === "vCCDbUB") {
                $.couponUrl = (data.match(/"value":"(.*)"\}'/) && data.match(/"value":"(.*)"\}'/)[1]) || ''
              } else {
                $.couponUrl = ''
              }
            }
          }
        } catch (e) {
          $.logErr(e, resp);
        } finally {
          resolve(data);
        }
      });
    });
  }
  function getEid(arr) {
    return new Promise((resolve) => {
      const options = {
        url: `https://gia.jd.com/fcf.html?a=${arr.a}`,
        body: `d=${arr.d}`,
        headers: {
          "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
          "User-Agent": $.UA,
        },
      };
      $.post(options, async (err, resp, data) => {
        try {
          if (err) {
            throw new Error(err);
          } else {
            if (data.indexOf("*_*") > 0) {
              data = data.split("*_*", 2);
              data = JSON.parse(data[1]);
              $.eid = data.eid;
            } else {
              console.log(`京豆api返回数据为空，请检查自身原因`);
            }
          }
        } catch (e) {
          $.logErr(e, resp);
        } finally {
          resolve(data);
        }
      });
    });
  }
  function randomString(e) {
    e = e || 32;
    let t = "abcdef0123456789",
      a = t.length,
      n = "";
    for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
    return n;
  }
  
  async function getCoupons() {
    return new Promise((resolve) => {
      let opts = {
        url: `https://api.m.jd.com/api?functionId=getUnionFreeCoupon&appid=u&loginType=2&_=${Date.now()}&body=${encodeURIComponent(JSON.stringify({"couponUrl":$.couponUrl,"source":20118}))}`,
        headers: {
          "Host": "api.m.jd.com",
          "Accept": "application/json, text/plain, */*",
          "Origin": "https://prodev.m.jd.com",
          "Accept-Encoding": "gzip, deflate, br",
          "User-Agent": $.UA,
          "Accept-Language": "zh-CN,zh-Hans;q=0.9",
          "Referer": "https://prodev.m.jd.com/",
          "Cookie": `${cookie} ${$.newCookie}`
    
        }
      };
      $.get(opts, async (err, resp, data) => {
        try {
          if (err) {
            console.log(`${$.toStr(err)}`);
            console.log(`${$.name} API请求失败，请检查网路重试`);
          } else {
            let res = $.toObj(data, data);
            if (typeof res == "object") {
              if (res.msg) {
                console.log("异常：" + res.msg);
              }
              if (res.msg.indexOf("上限") !== -1 || res.msg.indexOf("未登录") !== -1) {
                $.max = true;
              }
              if (res.code == 200 && res.data) {
                if (res.data.couponType == 2) {
                  console.log(`获得红包：${res.data.discount || 0}元`);
                }
              }
            } else {
              console.log(data);
            }
          }
        } catch (e) {
          $.logErr(e, resp);
        } finally {
          resolve();
        }
      });
    });
  }
  
  async function getInfo2() {
    return new Promise((resolve) => {
      const options = {
        url: $.url1,
        followRedirect: false,
        headers: {
          Cookie: `${cookie} ${$.newCookie}`,
          "user-agent": $.UA,
        },
      };
      $.get(options, async (err, resp, data) => {
        try {
          let setcookies = (resp && resp["headers"] && (resp["headers"]["set-cookie"] || resp["headers"]["Set-Cookie"] || "")) || "";
          let setcookie = "";
          if (setcookies) {
            if (typeof setcookies != "object") {
              setcookie = setcookies.split(",");
            } else setcookie = setcookies;
            for (let ck of setcookie) {
              let name = ck.split(";")[0].trim();
              if (name.split("=")[1]) {
                if ($.newCookie.indexOf(name.split("=")[1]) == -1)
                  $.newCookie += name.replace(/ /g, "") + "; ";
              }
            }
          }
          $.url2 = (resp && resp["headers"] && (resp["headers"]["location"] || resp["headers"]["Location"] || "")) || "";
          $.url2 = decodeURIComponent($.url2);
          $.url2 = ($.url2.match(/(https:\/\/prodev\.m\.jd\.com\/mall[^'"]+)/) && $.url2.match(/(https:\/\/prodev\.m\.jd\.com\/mall[^'"]+)/)[1]) || "";
        } catch (e) {
          $.logErr(e, resp);
        } finally {
          resolve(data);
        }
      });
    });
  }
  
  async function getInfo1(cookie) {
    return new Promise((resolve) => {
      const options = {
        url: `https://u.jd.com/${$.code}`,
        followRedirect: false,
        headers: {
          Cookie: cookie,
          "user-agent": $.UA,
        },
      };
      $.get(options, async (err, resp, data) => {
        try {
          let setcookies = (resp && resp["headers"] && (resp["headers"]["set-cookie"] || resp["headers"]["Set-Cookie"] || "")) || "";
          let setcookie = "";
          if (setcookies) {
            if (typeof setcookies != "object") {
              setcookie = setcookies.split(",");
            } else setcookie = setcookies;
            for (let ck of setcookie) {
              let name = ck.split(";")[0].trim();
              if (name.split("=")[1]) {
                if ($.newCookie.indexOf(name.split("=")[1]) == -1)
                  $.newCookie += name.replace(/ /g, "") + "; ";
              }
            }
          }
          $.url1 = (data.match(/(https:\/\/u\.jd\.com\/jda[^']+)/) && data.match(/(https:\/\/u\.jd\.com\/jda[^']+)/)[1]) || "";
        } catch (e) {
          $.logErr(e, resp);
        } finally {
          resolve(data);
        }
      });
    });
  }
  
  const navigator = {
    userAgent: $.isNode() ? require("./USER_AGENTS").USER_AGENT : $.UA,
    plugins: { length: 0 },
    language: "zh-CN",
  };
  const screen = {
    availHeight: 812,
    availWidth: 375,
    colorDepth: 24,
    height: 812,
    width: 375,
    pixelDepth: 24,
  };
  const window = {};
  const document = {
    location: {
      ancestorOrigins: {},
      href: "https://prodev.m.jd.com/mall/active/3BbAVGQPDd6vTyHYjmAutXrKAos6/index.html",
      origin: "https://prodev.m.jd.com",
      protocol: "https:",
      host: "prodev.m.jd.com",
      hostname: "prodev.m.jd.com",
      port: "",
      pathname: "/mall/active/3BbAVGQPDd6vTyHYjmAutXrKAos6/index.html",
      search: "",
      hash: "",
    },
  };
  var start_time = new Date().getTime(),
    _jdfp_canvas_md5 = "",
    _jdfp_webgl_md5 = "",
    _fingerprint_step = 1,
    _JdEid = "",
    _eidFlag = !1,
    risk_jd_local_fingerprint = "",
    _jd_e_joint_;
  
  function t(a) {
    if (null == a || void 0 == a || "" == a) return "NA";
    if (null == a || void 0 == a || "" == a) var b = "";
    else {
      b = [];
      for (var c = 0; c < 8 * a.length; c += 8)
        b[c >> 5] |= (a.charCodeAt(c / 8) & 255) << c % 32;
    }
    a = 8 * a.length;
    b[a >> 5] |= 128 << a % 32;
    b[(((a + 64) >>> 9) << 4) + 14] = a;
    a = 1732584193;
    c = -271733879;
    for (var l = -1732584194, h = 271733878, q = 0; q < b.length; q += 16) {
      var z = a,
        C = c,
        D = l,
        B = h;
      a = v(a, c, l, h, b[q + 0], 7, -680876936);
      h = v(h, a, c, l, b[q + 1], 12, -389564586);
      l = v(l, h, a, c, b[q + 2], 17, 606105819);
      c = v(c, l, h, a, b[q + 3], 22, -1044525330);
      a = v(a, c, l, h, b[q + 4], 7, -176418897);
      h = v(h, a, c, l, b[q + 5], 12, 1200080426);
      l = v(l, h, a, c, b[q + 6], 17, -1473231341);
      c = v(c, l, h, a, b[q + 7], 22, -45705983);
      a = v(a, c, l, h, b[q + 8], 7, 1770035416);
      h = v(h, a, c, l, b[q + 9], 12, -1958414417);
      l = v(l, h, a, c, b[q + 10], 17, -42063);
      c = v(c, l, h, a, b[q + 11], 22, -1990404162);
      a = v(a, c, l, h, b[q + 12], 7, 1804603682);
      h = v(h, a, c, l, b[q + 13], 12, -40341101);
      l = v(l, h, a, c, b[q + 14], 17, -1502002290);
      c = v(c, l, h, a, b[q + 15], 22, 1236535329);
      a = x(a, c, l, h, b[q + 1], 5, -165796510);
      h = x(h, a, c, l, b[q + 6], 9, -1069501632);
      l = x(l, h, a, c, b[q + 11], 14, 643717713);
      c = x(c, l, h, a, b[q + 0], 20, -373897302);
      a = x(a, c, l, h, b[q + 5], 5, -701558691);
      h = x(h, a, c, l, b[q + 10], 9, 38016083);
      l = x(l, h, a, c, b[q + 15], 14, -660478335);
      c = x(c, l, h, a, b[q + 4], 20, -405537848);
      a = x(a, c, l, h, b[q + 9], 5, 568446438);
      h = x(h, a, c, l, b[q + 14], 9, -1019803690);
      l = x(l, h, a, c, b[q + 3], 14, -187363961);
      c = x(c, l, h, a, b[q + 8], 20, 1163531501);
      a = x(a, c, l, h, b[q + 13], 5, -1444681467);
      h = x(h, a, c, l, b[q + 2], 9, -51403784);
      l = x(l, h, a, c, b[q + 7], 14, 1735328473);
      c = x(c, l, h, a, b[q + 12], 20, -1926607734);
      a = u(c ^ l ^ h, a, c, b[q + 5], 4, -378558);
      h = u(a ^ c ^ l, h, a, b[q + 8], 11, -2022574463);
      l = u(h ^ a ^ c, l, h, b[q + 11], 16, 1839030562);
      c = u(l ^ h ^ a, c, l, b[q + 14], 23, -35309556);
      a = u(c ^ l ^ h, a, c, b[q + 1], 4, -1530992060);
      h = u(a ^ c ^ l, h, a, b[q + 4], 11, 1272893353);
      l = u(h ^ a ^ c, l, h, b[q + 7], 16, -155497632);
      c = u(l ^ h ^ a, c, l, b[q + 10], 23, -1094730640);
      a = u(c ^ l ^ h, a, c, b[q + 13], 4, 681279174);
      h = u(a ^ c ^ l, h, a, b[q + 0], 11, -358537222);
      l = u(h ^ a ^ c, l, h, b[q + 3], 16, -722521979);
      c = u(l ^ h ^ a, c, l, b[q + 6], 23, 76029189);
      a = u(c ^ l ^ h, a, c, b[q + 9], 4, -640364487);
      h = u(a ^ c ^ l, h, a, b[q + 12], 11, -421815835);
      l = u(h ^ a ^ c, l, h, b[q + 15], 16, 530742520);
      c = u(l ^ h ^ a, c, l, b[q + 2], 23, -995338651);
      a = w(a, c, l, h, b[q + 0], 6, -198630844);
      h = w(h, a, c, l, b[q + 7], 10, 1126891415);
      l = w(l, h, a, c, b[q + 14], 15, -1416354905);
      c = w(c, l, h, a, b[q + 5], 21, -57434055);
      a = w(a, c, l, h, b[q + 12], 6, 1700485571);
      h = w(h, a, c, l, b[q + 3], 10, -1894986606);
      l = w(l, h, a, c, b[q + 10], 15, -1051523);
      c = w(c, l, h, a, b[q + 1], 21, -2054922799);
      a = w(a, c, l, h, b[q + 8], 6, 1873313359);
      h = w(h, a, c, l, b[q + 15], 10, -30611744);
      l = w(l, h, a, c, b[q + 6], 15, -1560198380);
      c = w(c, l, h, a, b[q + 13], 21, 1309151649);
      a = w(a, c, l, h, b[q + 4], 6, -145523070);
      h = w(h, a, c, l, b[q + 11], 10, -1120210379);
      l = w(l, h, a, c, b[q + 2], 15, 718787259);
      c = w(c, l, h, a, b[q + 9], 21, -343485551);
      a = A(a, z);
      c = A(c, C);
      l = A(l, D);
      h = A(h, B);
    }
    b = [a, c, l, h];
    a = "";
    for (c = 0; c < 4 * b.length; c++)
      a +=
        "0123456789abcdef".charAt((b[c >> 2] >> ((c % 4) * 8 + 4)) & 15) +
        "0123456789abcdef".charAt((b[c >> 2] >> ((c % 4) * 8)) & 15);
    return a;
  }
  
  function u(a, b, c, l, h, q) {
    a = A(A(b, a), A(l, q));
    return A((a << h) | (a >>> (32 - h)), c);
  }
  
  function v(a, b, c, l, h, q, z) {
    return u((b & c) | (~b & l), a, b, h, q, z);
  }
  
  function x(a, b, c, l, h, q, z) {
    return u((b & l) | (c & ~l), a, b, h, q, z);
  }
  
  function w(a, b, c, l, h, q, z) {
    return u(c ^ (b | ~l), a, b, h, q, z);
  }
  
  function A(a, b) {
    var c = (a & 65535) + (b & 65535);
    return (((a >> 16) + (b >> 16) + (c >> 16)) << 16) | (c & 65535);
  }
  
  _fingerprint_step = 2;
  var y = "",
    n = navigator.userAgent.toLowerCase();
  n.indexOf("jdapp") && (n = n.substring(0, 90));
  var e = navigator.language,
    f = n;
  -1 != f.indexOf("ipad") ||
    -1 != f.indexOf("iphone os") ||
    -1 != f.indexOf("midp") ||
    -1 != f.indexOf("rv:1.2.3.4") ||
    -1 != f.indexOf("ucweb") ||
    -1 != f.indexOf("android") ||
    -1 != f.indexOf("windows ce") ||
    f.indexOf("windows mobile");
  var r = "NA",
    k = "NA";
  try {
    -1 != f.indexOf("win") &&
      -1 != f.indexOf("95") &&
      ((r = "windows"), (k = "95")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("98") &&
        ((r = "windows"), (k = "98")),
      -1 != f.indexOf("win 9x") &&
        -1 != f.indexOf("4.90") &&
        ((r = "windows"), (k = "me")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("nt 5.0") &&
        ((r = "windows"), (k = "2000")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("nt") &&
        ((r = "windows"), (k = "NT")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("nt 5.1") &&
        ((r = "windows"), (k = "xp")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("32") &&
        ((r = "windows"), (k = "32")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("nt 5.1") &&
        ((r = "windows"), (k = "7")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("6.0") &&
        ((r = "windows"), (k = "8")),
      -1 == f.indexOf("win") ||
        (-1 == f.indexOf("nt 6.0") && -1 == f.indexOf("nt 6.1")) ||
        ((r = "windows"), (k = "9")),
      -1 != f.indexOf("win") &&
        -1 != f.indexOf("nt 6.2") &&
        ((r = "windows"), (k = "10")),
      -1 != f.indexOf("linux") && (r = "linux"),
      -1 != f.indexOf("unix") && (r = "unix"),
      -1 != f.indexOf("sun") && -1 != f.indexOf("os") && (r = "sun os"),
      -1 != f.indexOf("ibm") && -1 != f.indexOf("os") && (r = "ibm os/2"),
      -1 != f.indexOf("mac") && -1 != f.indexOf("pc") && (r = "mac"),
      -1 != f.indexOf("aix") && (r = "aix"),
      -1 != f.indexOf("powerpc") && (r = "powerPC"),
      -1 != f.indexOf("hpux") && (r = "hpux"),
      -1 != f.indexOf("netbsd") && (r = "NetBSD"),
      -1 != f.indexOf("bsd") && (r = "BSD"),
      -1 != f.indexOf("osf1") && (r = "OSF1"),
      -1 != f.indexOf("irix") && ((r = "IRIX"), (k = "")),
      -1 != f.indexOf("freebsd") && (r = "FreeBSD"),
      -1 != f.indexOf("symbianos") &&
        ((r = "SymbianOS"), (k = f.substring(f.indexOf("SymbianOS/") + 10, 3)));
  } catch (a) {}
  _fingerprint_step = 3;
  var g = "NA",
    m = "NA";
  try {
    -1 != f.indexOf("msie") &&
      ((g = "ie"),
      (m = f.substring(f.indexOf("msie ") + 5)),
      m.indexOf(";") && (m = m.substring(0, m.indexOf(";"))));
    -1 != f.indexOf("firefox") &&
      ((g = "Firefox"), (m = f.substring(f.indexOf("firefox/") + 8)));
    -1 != f.indexOf("opera") &&
      ((g = "Opera"), (m = f.substring(f.indexOf("opera/") + 6, 4)));
    -1 != f.indexOf("safari") &&
      ((g = "safari"), (m = f.substring(f.indexOf("safari/") + 7)));
    -1 != f.indexOf("chrome") &&
      ((g = "chrome"),
      (m = f.substring(f.indexOf("chrome/") + 7)),
      m.indexOf(" ") && (m = m.substring(0, m.indexOf(" "))));
    -1 != f.indexOf("navigator") &&
      ((g = "navigator"), (m = f.substring(f.indexOf("navigator/") + 10)));
    -1 != f.indexOf("applewebkit") &&
      ((g = "applewebkit_chrome"),
      (m = f.substring(f.indexOf("applewebkit/") + 12)),
      m.indexOf(" ") && (m = m.substring(0, m.indexOf(" "))));
    -1 != f.indexOf("sogoumobilebrowser") &&
      (g = "\u641c\u72d7\u624b\u673a\u6d4f\u89c8\u5668");
    if (-1 != f.indexOf("ucbrowser") || -1 != f.indexOf("ucweb"))
      g = "UC\u6d4f\u89c8\u5668";
    if (-1 != f.indexOf("qqbrowser") || -1 != f.indexOf("tencenttraveler"))
      g = "QQ\u6d4f\u89c8\u5668";
    -1 != f.indexOf("metasr") && (g = "\u641c\u72d7\u6d4f\u89c8\u5668");
    -1 != f.indexOf("360se") && (g = "360\u6d4f\u89c8\u5668");
    -1 != f.indexOf("the world") &&
      (g = "\u4e16\u754c\u4e4b\u7a97\u6d4f\u89c8\u5668");
    -1 != f.indexOf("maxthon") && (g = "\u9068\u6e38\u6d4f\u89c8\u5668");
  } catch (a) {}
  
  class JdJrTdRiskFinger {
    f = {
      options: function () {
        return {};
      },
      nativeForEach: Array.prototype.forEach,
      nativeMap: Array.prototype.map,
      extend: function (a, b) {
        if (null == a) return b;
        for (var c in a) null != a[c] && b[c] !== a[c] && (b[c] = a[c]);
        return b;
      },
      getData: function () {
        return y;
      },
      get: function (a) {
        var b = 1 * m,
          c = [];
        "ie" == g && 7 <= b
          ? (c.push(n),
            c.push(e),
            (y = y + ",'userAgent':'" + t(n) + "','language':'" + e + "'"),
            this.browserRedirect(n))
          : ((c = this.userAgentKey(c)), (c = this.languageKey(c)));
        c.push(g);
        c.push(m);
        c.push(r);
        c.push(k);
        y =
          y +
          ",'os':'" +
          r +
          "','osVersion':'" +
          k +
          "','browser':'" +
          g +
          "','browserVersion':'" +
          m +
          "'";
        c = this.colorDepthKey(c);
        c = this.screenResolutionKey(c);
        c = this.timezoneOffsetKey(c);
        c = this.sessionStorageKey(c);
        c = this.localStorageKey(c);
        c = this.indexedDbKey(c);
        c = this.addBehaviorKey(c);
        c = this.openDatabaseKey(c);
        c = this.cpuClassKey(c);
        c = this.platformKey(c);
        c = this.hardwareConcurrencyKey(c);
        c = this.doNotTrackKey(c);
        c = this.pluginsKey(c);
        c = this.canvasKey(c);
        c = this.webglKey(c);
        b = this.x64hash128(c.join("~~~"), 31);
        return a(b);
      },
      userAgentKey: function (a) {
        a.push(navigator.userAgent),
          (y = y + ",'userAgent':'" + t(navigator.userAgent) + "'"),
          this.browserRedirect(navigator.userAgent);
        return a;
      },
      replaceAll: function (a, b, c) {
        for (; 0 <= a.indexOf(b); ) a = a.replace(b, c);
        return a;
      },
      browserRedirect: function (a) {
        var b = a.toLowerCase();
        a = "ipad" == b.match(/ipad/i);
        var c = "iphone os" == b.match(/iphone os/i),
          l = "midp" == b.match(/midp/i),
          h = "rv:1.2.3.4" == b.match(/rv:1.2.3.4/i),
          q = "ucweb" == b.match(/ucweb/i),
          z = "android" == b.match(/android/i),
          C = "windows ce" == b.match(/windows ce/i);
        b = "windows mobile" == b.match(/windows mobile/i);
        y =
          a || c || l || h || q || z || C || b
            ? y + ",'origin':'mobile'"
            : y + ",'origin':'pc'";
      },
      languageKey: function (a) {
        "" ||
          (a.push(navigator.language),
          (y =
            y +
            ",'language':'" +
            this.replaceAll(navigator.language, " ", "_") +
            "'"));
        return a;
      },
      colorDepthKey: function (a) {
        "" ||
          (a.push(screen.colorDepth),
          (y = y + ",'colorDepth':'" + screen.colorDepth + "'"));
        return a;
      },
      screenResolutionKey: function (a) {
        if (!this.options.excludeScreenResolution) {
          var b = this.getScreenResolution();
          "undefined" !== typeof b &&
            (a.push(b.join("x")),
            (y = y + ",'screenResolution':'" + b.join("x") + "'"));
        }
        return a;
      },
      getScreenResolution: function () {
        return this.options.detectScreenOrientation
          ? screen.height > screen.width
            ? [screen.height, screen.width]
            : [screen.width, screen.height]
          : [screen.height, screen.width];
      },
      timezoneOffsetKey: function (a) {
        this.options.excludeTimezoneOffset ||
          (a.push(new Date().getTimezoneOffset()),
          (y =
            y +
            ",'timezoneOffset':'" +
            new Date().getTimezoneOffset() / 60 +
            "'"));
        return a;
      },
      sessionStorageKey: function (a) {
        !this.options.excludeSessionStorage &&
          this.hasSessionStorage() &&
          (a.push("sessionStorageKey"), (y += ",'sessionStorage':true"));
        return a;
      },
      localStorageKey: function (a) {
        !this.options.excludeSessionStorage &&
          this.hasLocalStorage() &&
          (a.push("localStorageKey"), (y += ",'localStorage':true"));
        return a;
      },
      indexedDbKey: function (a) {
        !this.options.excludeIndexedDB &&
          this.hasIndexedDB() &&
          (a.push("indexedDbKey"), (y += ",'indexedDb':true"));
        return a;
      },
      addBehaviorKey: function (a) {
        document.body &&
        !this.options.excludeAddBehavior &&
        document.body.addBehavior
          ? (a.push("addBehaviorKey"), (y += ",'addBehavior':true"))
          : (y += ",'addBehavior':false");
        return a;
      },
      openDatabaseKey: function (a) {
        !this.options.excludeOpenDatabase && window.openDatabase
          ? (a.push("openDatabase"), (y += ",'openDatabase':true"))
          : (y += ",'openDatabase':false");
        return a;
      },
      cpuClassKey: function (a) {
        this.options.excludeCpuClass ||
          (a.push(this.getNavigatorCpuClass()),
          (y = y + ",'cpu':'" + this.getNavigatorCpuClass() + "'"));
        return a;
      },
      platformKey: function (a) {
        this.options.excludePlatform ||
          (a.push(this.getNavigatorPlatform()),
          (y = y + ",'platform':'" + this.getNavigatorPlatform() + "'"));
        return a;
      },
      hardwareConcurrencyKey: function (a) {
        var b = this.getHardwareConcurrency();
        a.push(b);
        y = y + ",'ccn':'" + b + "'";
        return a;
      },
      doNotTrackKey: function (a) {
        this.options.excludeDoNotTrack ||
          (a.push(this.getDoNotTrack()),
          (y = y + ",'track':'" + this.getDoNotTrack() + "'"));
        return a;
      },
      canvasKey: function (a) {
        if (!this.options.excludeCanvas && this.isCanvasSupported()) {
          var b = this.getCanvasFp();
          a.push(b);
          _jdfp_canvas_md5 = t(b);
          y = y + ",'canvas':'" + _jdfp_canvas_md5 + "'";
        }
        return a;
      },
      webglKey: function (a) {
        if (!this.options.excludeWebGL && this.isCanvasSupported()) {
          var b = this.getWebglFp();
          _jdfp_webgl_md5 = t(b);
          a.push(b);
          y = y + ",'webglFp':'" + _jdfp_webgl_md5 + "'";
        }
        return a;
      },
      pluginsKey: function (a) {
        this.isIE()
          ? (a.push(this.getIEPluginsString()),
            (y = y + ",'plugins':'" + t(this.getIEPluginsString()) + "'"))
          : (a.push(this.getRegularPluginsString()),
            (y = y + ",'plugins':'" + t(this.getRegularPluginsString()) + "'"));
        return a;
      },
      getRegularPluginsString: function () {
        return this.map(
          navigator.plugins,
          function (a) {
            var b = this.map(a, function (c) {
              return [c.type, c.suffixes].join("~");
            }).join(",");
            return [a.name, a.description, b].join("::");
          },
          this
        ).join(";");
      },
      getIEPluginsString: function () {
        return window.ActiveXObject
          ? this.map(
              "AcroPDF.PDF;Adodb.Stream;AgControl.AgControl;DevalVRXCtrl.DevalVRXCtrl.1;MacromediaFlashPaper.MacromediaFlashPaper;Msxml2.DOMDocument;Msxml2.XMLHTTP;PDF.PdfCtrl;QuickTime.QuickTime;QuickTimeCheckObject.QuickTimeCheck.1;RealPlayer;RealPlayer.RealPlayer(tm) ActiveX Control (32-bit);RealVideo.RealVideo(tm) ActiveX Control (32-bit);Scripting.Dictionary;SWCtl.SWCtl;Shell.UIHelper;ShockwaveFlash.ShockwaveFlash;Skype.Detection;TDCCtl.TDCCtl;WMPlayer.OCX;rmocx.RealPlayer G2 Control;rmocx.RealPlayer G2 Control.1".split(
                ";"
              ),
              function (a) {
                try {
                  return new ActiveXObject(a), a;
                } catch (b) {
                  return null;
                }
              }
            ).join(";")
          : "";
      },
      hasSessionStorage: function () {
        try {
          return !!window.sessionStorage;
        } catch (a) {
          return !0;
        }
      },
      hasLocalStorage: function () {
        try {
          return !!window.localStorage;
        } catch (a) {
          return !0;
        }
      },
      hasIndexedDB: function () {
        return true;
        return !!window.indexedDB;
      },
      getNavigatorCpuClass: function () {
        return navigator.cpuClass ? navigator.cpuClass : "NA";
      },
      getNavigatorPlatform: function () {
        return navigator.platform ? navigator.platform : "NA";
      },
      getHardwareConcurrency: function () {
        return navigator.hardwareConcurrency
          ? navigator.hardwareConcurrency
          : "NA";
      },
      getDoNotTrack: function () {
        return navigator.doNotTrack ? navigator.doNotTrack : "NA";
      },
      getCanvasFp: function () {
        return "";
        var a = navigator.userAgent.toLowerCase();
        if (
          (0 < a.indexOf("jdjr-app") || 0 <= a.indexOf("jdapp")) &&
          (0 < a.indexOf("iphone") || 0 < a.indexOf("ipad"))
        )
          return null;
        a = document.createElement("canvas");
        var b = a.getContext("2d");
        b.fillStyle = "red";
        b.fillRect(30, 10, 200, 100);
        b.strokeStyle = "#1a3bc1";
        b.lineWidth = 6;
        b.lineCap = "round";
        b.arc(50, 50, 20, 0, Math.PI, !1);
        b.stroke();
        b.fillStyle = "#42e1a2";
        b.font = "15.4px 'Arial'";
        b.textBaseline = "alphabetic";
        b.fillText("PR flacks quiz gym: TV DJ box when? \u2620", 15, 60);
        b.shadowOffsetX = 1;
        b.shadowOffsetY = 2;
        b.shadowColor = "white";
        b.fillStyle = "rgba(0, 0, 200, 0.5)";
        b.font = "60px 'Not a real font'";
        b.fillText("No\u9a97", 40, 80);
        return a.toDataURL();
      },
      getWebglFp: function () {
        var a = navigator.userAgent;
        a = a.toLowerCase();
        if (
          (0 < a.indexOf("jdjr-app") || 0 <= a.indexOf("jdapp")) &&
          (0 < a.indexOf("iphone") || 0 < a.indexOf("ipad"))
        )
          return null;
        a = function (D) {
          b.clearColor(0, 0, 0, 1);
          b.enable(b.DEPTH_TEST);
          b.depthFunc(b.LEQUAL);
          b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT);
          return "[" + D[0] + ", " + D[1] + "]";
        };
        var b = this.getWebglCanvas();
        if (!b) return null;
        var c = [],
          l = b.createBuffer();
        b.bindBuffer(b.ARRAY_BUFFER, l);
        var h = new Float32Array([
          -0.2, -0.9, 0, 0.4, -0.26, 0, 0, 0.732134444, 0,
        ]);
        b.bufferData(b.ARRAY_BUFFER, h, b.STATIC_DRAW);
        l.itemSize = 3;
        l.numItems = 3;
        h = b.createProgram();
        var q = b.createShader(b.VERTEX_SHADER);
        b.shaderSource(
          q,
          "attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}"
        );
        b.compileShader(q);
        var z = b.createShader(b.FRAGMENT_SHADER);
        b.shaderSource(
          z,
          "precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}"
        );
        b.compileShader(z);
        b.attachShader(h, q);
        b.attachShader(h, z);
        b.linkProgram(h);
        b.useProgram(h);
        h.vertexPosAttrib = b.getAttribLocation(h, "attrVertex");
        h.offsetUniform = b.getUniformLocation(h, "uniformOffset");
        b.enableVertexAttribArray(h.vertexPosArray);
        b.vertexAttribPointer(h.vertexPosAttrib, l.itemSize, b.FLOAT, !1, 0, 0);
        b.uniform2f(h.offsetUniform, 1, 1);
        b.drawArrays(b.TRIANGLE_STRIP, 0, l.numItems);
        null != b.canvas && c.push(b.canvas.toDataURL());
        c.push("extensions:" + b.getSupportedExtensions().join(";"));
        c.push("extensions:" + b.getSupportedExtensions().join(";"));
        c.push("w1" + a(b.getParameter(b.ALIASED_LINE_WIDTH_RANGE)));
        c.push("w2" + a(b.getParameter(b.ALIASED_POINT_SIZE_RANGE)));
        c.push("w3" + b.getParameter(b.ALPHA_BITS));
        c.push("w4" + (b.getContextAttributes().antialias ? "yes" : "no"));
        c.push("w5" + b.getParameter(b.BLUE_BITS));
        c.push("w6" + b.getParameter(b.DEPTH_BITS));
        c.push("w7" + b.getParameter(b.GREEN_BITS));
        c.push(
          "w8" +
            (function (D) {
              var B,
                F =
                  D.getExtension("EXT_texture_filter_anisotropic") ||
                  D.getExtension("WEBKIT_EXT_texture_filter_anisotropic") ||
                  D.getExtension("MOZ_EXT_texture_filter_anisotropic");
              return F
                ? ((B = D.getParameter(F.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),
                  0 === B && (B = 2),
                  B)
                : null;
            })(b)
        );
        c.push("w9" + b.getParameter(b.MAX_COMBINED_TEXTURE_IMAGE_UNITS));
        c.push("w10" + b.getParameter(b.MAX_CUBE_MAP_TEXTURE_SIZE));
        c.push("w11" + b.getParameter(b.MAX_FRAGMENT_UNIFORM_VECTORS));
        c.push("w12" + b.getParameter(b.MAX_RENDERBUFFER_SIZE));
        c.push("w13" + b.getParameter(b.MAX_TEXTURE_IMAGE_UNITS));
        c.push("w14" + b.getParameter(b.MAX_TEXTURE_SIZE));
        c.push("w15" + b.getParameter(b.MAX_VARYING_VECTORS));
        c.push("w16" + b.getParameter(b.MAX_VERTEX_ATTRIBS));
        c.push("w17" + b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS));
        c.push("w18" + b.getParameter(b.MAX_VERTEX_UNIFORM_VECTORS));
        c.push("w19" + a(b.getParameter(b.MAX_VIEWPORT_DIMS)));
        c.push("w20" + b.getParameter(b.RED_BITS));
        c.push("w21" + b.getParameter(b.RENDERER));
        c.push("w22" + b.getParameter(b.SHADING_LANGUAGE_VERSION));
        c.push("w23" + b.getParameter(b.STENCIL_BITS));
        c.push("w24" + b.getParameter(b.VENDOR));
        c.push("w25" + b.getParameter(b.VERSION));
        try {
          var C = b.getExtension("WEBGL_debug_renderer_info");
          C &&
            (c.push("wuv:" + b.getParameter(C.UNMASKED_VENDOR_WEBGL)),
            c.push("wur:" + b.getParameter(C.UNMASKED_RENDERER_WEBGL)));
        } catch (D) {}
        return c.join("\u00a7");
      },
      isCanvasSupported: function () {
        return true;
        var a = document.createElement("canvas");
        return !(!a.getContext || !a.getContext("2d"));
      },
      isIE: function () {
        return "Microsoft Internet Explorer" === navigator.appName ||
          ("Netscape" === navigator.appName &&
            /Trident/.test(navigator.userAgent))
          ? !0
          : !1;
      },
      getWebglCanvas: function () {
        return null;
        var a = document.createElement("canvas"),
          b = null;
        try {
          var c = navigator.userAgent;
          c = c.toLowerCase();
          ((0 < c.indexOf("jdjr-app") || 0 <= c.indexOf("jdapp")) &&
            (0 < c.indexOf("iphone") || 0 < c.indexOf("ipad"))) ||
            (b = a.getContext("webgl") || a.getContext("experimental-webgl"));
        } catch (l) {}
        b || (b = null);
        return b;
      },
      each: function (a, b, c) {
        if (null !== a)
          if (this.nativeForEach && a.forEach === this.nativeForEach)
            a.forEach(b, c);
          else if (a.length === +a.length)
            for (
              var l = 0, h = a.length;
              l < h && b.call(c, a[l], l, a) !== {};
              l++
            );
          else
            for (l in a)
              if (a.hasOwnProperty(l) && b.call(c, a[l], l, a) === {}) break;
      },
      map: function (a, b, c) {
        var l = [];
        if (null == a) return l;
        if (this.nativeMap && a.map === this.nativeMap) return a.map(b, c);
        this.each(a, function (h, q, z) {
          l[l.length] = b.call(c, h, q, z);
        });
        return l;
      },
      x64Add: function (a, b) {
        a = [a[0] >>> 16, a[0] & 65535, a[1] >>> 16, a[1] & 65535];
        b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535];
        var c = [0, 0, 0, 0];
        c[3] += a[3] + b[3];
        c[2] += c[3] >>> 16;
        c[3] &= 65535;
        c[2] += a[2] + b[2];
        c[1] += c[2] >>> 16;
        c[2] &= 65535;
        c[1] += a[1] + b[1];
        c[0] += c[1] >>> 16;
        c[1] &= 65535;
        c[0] += a[0] + b[0];
        c[0] &= 65535;
        return [(c[0] << 16) | c[1], (c[2] << 16) | c[3]];
      },
      x64Multiply: function (a, b) {
        a = [a[0] >>> 16, a[0] & 65535, a[1] >>> 16, a[1] & 65535];
        b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535];
        var c = [0, 0, 0, 0];
        c[3] += a[3] * b[3];
        c[2] += c[3] >>> 16;
        c[3] &= 65535;
        c[2] += a[2] * b[3];
        c[1] += c[2] >>> 16;
        c[2] &= 65535;
        c[2] += a[3] * b[2];
        c[1] += c[2] >>> 16;
        c[2] &= 65535;
        c[1] += a[1] * b[3];
        c[0] += c[1] >>> 16;
        c[1] &= 65535;
        c[1] += a[2] * b[2];
        c[0] += c[1] >>> 16;
        c[1] &= 65535;
        c[1] += a[3] * b[1];
        c[0] += c[1] >>> 16;
        c[1] &= 65535;
        c[0] += a[0] * b[3] + a[1] * b[2] + a[2] * b[1] + a[3] * b[0];
        c[0] &= 65535;
        return [(c[0] << 16) | c[1], (c[2] << 16) | c[3]];
      },
      x64Rotl: function (a, b) {
        b %= 64;
        if (32 === b) return [a[1], a[0]];
        if (32 > b)
          return [
            (a[0] << b) | (a[1] >>> (32 - b)),
            (a[1] << b) | (a[0] >>> (32 - b)),
          ];
        b -= 32;
        return [
          (a[1] << b) | (a[0] >>> (32 - b)),
          (a[0] << b) | (a[1] >>> (32 - b)),
        ];
      },
      x64LeftShift: function (a, b) {
        b %= 64;
        return 0 === b
          ? a
          : 32 > b
          ? [(a[0] << b) | (a[1] >>> (32 - b)), a[1] << b]
          : [a[1] << (b - 32), 0];
      },
      x64Xor: function (a, b) {
        return [a[0] ^ b[0], a[1] ^ b[1]];
      },
      x64Fmix: function (a) {
        a = this.x64Xor(a, [0, a[0] >>> 1]);
        a = this.x64Multiply(a, [4283543511, 3981806797]);
        a = this.x64Xor(a, [0, a[0] >>> 1]);
        a = this.x64Multiply(a, [3301882366, 444984403]);
        return (a = this.x64Xor(a, [0, a[0] >>> 1]));
      },
      x64hash128: function (a, b) {
        a = a || "";
        b = b || 0;
        var c = a.length % 16,
          l = a.length - c,
          h = [0, b];
        b = [0, b];
        for (
          var q,
            z,
            C = [2277735313, 289559509],
            D = [1291169091, 658871167],
            B = 0;
          B < l;
          B += 16
        )
          (q = [
            (a.charCodeAt(B + 4) & 255) |
              ((a.charCodeAt(B + 5) & 255) << 8) |
              ((a.charCodeAt(B + 6) & 255) << 16) |
              ((a.charCodeAt(B + 7) & 255) << 24),
            (a.charCodeAt(B) & 255) |
              ((a.charCodeAt(B + 1) & 255) << 8) |
              ((a.charCodeAt(B + 2) & 255) << 16) |
              ((a.charCodeAt(B + 3) & 255) << 24),
          ]),
            (z = [
              (a.charCodeAt(B + 12) & 255) |
                ((a.charCodeAt(B + 13) & 255) << 8) |
                ((a.charCodeAt(B + 14) & 255) << 16) |
                ((a.charCodeAt(B + 15) & 255) << 24),
              (a.charCodeAt(B + 8) & 255) |
                ((a.charCodeAt(B + 9) & 255) << 8) |
                ((a.charCodeAt(B + 10) & 255) << 16) |
                ((a.charCodeAt(B + 11) & 255) << 24),
            ]),
            (q = this.x64Multiply(q, C)),
            (q = this.x64Rotl(q, 31)),
            (q = this.x64Multiply(q, D)),
            (h = this.x64Xor(h, q)),
            (h = this.x64Rotl(h, 27)),
            (h = this.x64Add(h, b)),
            (h = this.x64Add(this.x64Multiply(h, [0, 5]), [0, 1390208809])),
            (z = this.x64Multiply(z, D)),
            (z = this.x64Rotl(z, 33)),
            (z = this.x64Multiply(z, C)),
            (b = this.x64Xor(b, z)),
            (b = this.x64Rotl(b, 31)),
            (b = this.x64Add(b, h)),
            (b = this.x64Add(this.x64Multiply(b, [0, 5]), [0, 944331445]));
        q = [0, 0];
        z = [0, 0];
        switch (c) {
          case 15:
            z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 14)], 48));
          case 14:
            z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 13)], 40));
          case 13:
            z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 12)], 32));
          case 12:
            z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 11)], 24));
          case 11:
            z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 10)], 16));
          case 10:
            z = this.x64Xor(z, this.x64LeftShift([0, a.charCodeAt(B + 9)], 8));
          case 9:
            (z = this.x64Xor(z, [0, a.charCodeAt(B + 8)])),
              (z = this.x64Multiply(z, D)),
              (z = this.x64Rotl(z, 33)),
              (z = this.x64Multiply(z, C)),
              (b = this.x64Xor(b, z));
          case 8:
            q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 7)], 56));
          case 7:
            q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 6)], 48));
          case 6:
            q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 5)], 40));
          case 5:
            q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 4)], 32));
          case 4:
            q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 3)], 24));
          case 3:
            q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 2)], 16));
          case 2:
            q = this.x64Xor(q, this.x64LeftShift([0, a.charCodeAt(B + 1)], 8));
          case 1:
            (q = this.x64Xor(q, [0, a.charCodeAt(B)])),
              (q = this.x64Multiply(q, C)),
              (q = this.x64Rotl(q, 31)),
              (q = this.x64Multiply(q, D)),
              (h = this.x64Xor(h, q));
        }
        h = this.x64Xor(h, [0, a.length]);
        b = this.x64Xor(b, [0, a.length]);
        h = this.x64Add(h, b);
        b = this.x64Add(b, h);
        h = this.x64Fmix(h);
        b = this.x64Fmix(b);
        h = this.x64Add(h, b);
        b = this.x64Add(b, h);
        return (
          ("00000000" + (h[0] >>> 0).toString(16)).slice(-8) +
          ("00000000" + (h[1] >>> 0).toString(16)).slice(-8) +
          ("00000000" + (b[0] >>> 0).toString(16)).slice(-8) +
          ("00000000" + (b[1] >>> 0).toString(16)).slice(-8)
        );
      },
    };
  }
  
  var JDDSecCryptoJS =
    JDDSecCryptoJS ||
    (function (t, u) {
      var v = {},
        x = (v.lib = {}),
        w = (x.Base = (function () {
          function g() {}
  
          return {
            extend: function (m) {
              g.prototype = this;
              var a = new g();
              m && a.mixIn(m);
              a.hasOwnProperty("init") ||
                (a.init = function () {
                  a.$super.init.apply(this, arguments);
                });
              a.init.prototype = a;
              a.$super = this;
              return a;
            },
            create: function () {
              var m = this.extend();
              m.init.apply(m, arguments);
              return m;
            },
            init: function () {},
            mixIn: function (m) {
              for (var a in m) m.hasOwnProperty(a) && (this[a] = m[a]);
              m.hasOwnProperty("toString") && (this.toString = m.toString);
            },
            clone: function () {
              return this.init.prototype.extend(this);
            },
          };
        })()),
        A = (x.WordArray = w.extend({
          init: function (g, m) {
            g = this.words = g || [];
            this.sigBytes = m != u ? m : 4 * g.length;
          },
          toString: function (g) {
            return (g || n).stringify(this);
          },
          concat: function (g) {
            var m = this.words,
              a = g.words,
              b = this.sigBytes;
            g = g.sigBytes;
            this.clamp();
            if (b % 4)
              for (var c = 0; c < g; c++)
                m[(b + c) >>> 2] |=
                  ((a[c >>> 2] >>> (24 - (c % 4) * 8)) & 255) <<
                  (24 - ((b + c) % 4) * 8);
            else if (65535 < a.length)
              for (c = 0; c < g; c += 4) m[(b + c) >>> 2] = a[c >>> 2];
            else m.push.apply(m, a);
            this.sigBytes += g;
            return this;
          },
          clamp: function () {
            var g = this.words,
              m = this.sigBytes;
            g[m >>> 2] &= 4294967295 << (32 - (m % 4) * 8);
            g.length = t.ceil(m / 4);
          },
          clone: function () {
            var g = w.clone.call(this);
            g.words = this.words.slice(0);
            return g;
          },
          random: function (g) {
            for (var m = [], a = 0; a < g; a += 4)
              m.push((4294967296 * t.random()) | 0);
            return new A.init(m, g);
          },
        }));
      x.UUID = w.extend({
        generateUuid: function () {
          for (
            var g = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split(""),
              m = 0,
              a = g.length;
            m < a;
            m++
          )
            switch (g[m]) {
              case "x":
                g[m] = t.floor(16 * t.random()).toString(16);
                break;
              case "y":
                g[m] = (t.floor(4 * t.random()) + 8).toString(16);
            }
          return g.join("");
        },
      });
      var y = (v.enc = {}),
        n = (y.Hex = {
          stringify: function (g) {
            var m = g.words;
            g = g.sigBytes;
            var a = [];
            for (var b = 0; b < g; b++) {
              var c = (m[b >>> 2] >>> (24 - (b % 4) * 8)) & 255;
              a.push((c >>> 4).toString(16));
              a.push((c & 15).toString(16));
            }
            return a.join("");
          },
          parse: function (g) {
            for (var m = g.length, a = [], b = 0; b < m; b += 2)
              a[b >>> 3] |= parseInt(g.substr(b, 2), 16) << (24 - (b % 8) * 4);
            return new A.init(a, m / 2);
          },
        }),
        e = (y.Latin1 = {
          stringify: function (g) {
            var m = g.words;
            g = g.sigBytes;
            for (var a = [], b = 0; b < g; b++)
              a.push(
                String.fromCharCode((m[b >>> 2] >>> (24 - (b % 4) * 8)) & 255)
              );
            return a.join("");
          },
          parse: function (g) {
            for (var m = g.length, a = [], b = 0; b < m; b++)
              a[b >>> 2] |= (g.charCodeAt(b) & 255) << (24 - (b % 4) * 8);
            return new A.init(a, m);
          },
        }),
        f = (y.Utf8 = {
          stringify: function (g) {
            try {
              return decodeURIComponent(escape(e.stringify(g)));
            } catch (m) {
              throw Error("Malformed UTF-8 data");
            }
          },
          parse: function (g) {
            return e.parse(unescape(encodeURIComponent(g)));
          },
        }),
        r = (x.BufferedBlockAlgorithm = w.extend({
          reset: function () {
            this._data = new A.init();
            this._nDataBytes = 0;
          },
          _append: function (g) {
            "string" == typeof g && (g = f.parse(g));
            this._data.concat(g);
            this._nDataBytes += g.sigBytes;
          },
          _process: function (g) {
            var m = this._data,
              a = m.words,
              b = m.sigBytes,
              c = this.blockSize,
              l = b / (4 * c);
            l = g ? t.ceil(l) : t.max((l | 0) - this._minBufferSize, 0);
            g = l * c;
            b = t.min(4 * g, b);
            if (g) {
              for (var h = 0; h < g; h += c) this._doProcessBlock(a, h);
              h = a.splice(0, g);
              m.sigBytes -= b;
            }
            return new A.init(h, b);
          },
          clone: function () {
            var g = w.clone.call(this);
            g._data = this._data.clone();
            return g;
          },
          _minBufferSize: 0,
        }));
      x.Hasher = r.extend({
        cfg: w.extend(),
        init: function (g) {
          this.cfg = this.cfg.extend(g);
          this.reset();
        },
        reset: function () {
          r.reset.call(this);
          this._doReset();
        },
        update: function (g) {
          this._append(g);
          this._process();
          return this;
        },
        finalize: function (g) {
          g && this._append(g);
          return this._doFinalize();
        },
        blockSize: 16,
        _createHelper: function (g) {
          return function (m, a) {
            return new g.init(a).finalize(m);
          };
        },
        _createHmacHelper: function (g) {
          return function (m, a) {
            return new k.HMAC.init(g, a).finalize(m);
          };
        },
      });
      var k = (v.algo = {});
      v.channel = {};
      return v;
    })(Math);
  JDDSecCryptoJS.lib.Cipher ||
    (function (t) {
      var u = JDDSecCryptoJS,
        v = u.lib,
        x = v.Base,
        w = v.WordArray,
        A = v.BufferedBlockAlgorithm,
        y = (v.Cipher = A.extend({
          cfg: x.extend(),
          createEncryptor: function (g, m) {
            return this.create(this._ENC_XFORM_MODE, g, m);
          },
          createDecryptor: function (g, m) {
            return this.create(this._DEC_XFORM_MODE, g, m);
          },
          init: function (g, m, a) {
            this.cfg = this.cfg.extend(a);
            this._xformMode = g;
            this._key = m;
            this.reset();
          },
          reset: function () {
            A.reset.call(this);
            this._doReset();
          },
          process: function (g) {
            this._append(g);
            return this._process();
          },
          finalize: function (g) {
            g && this._append(g);
            return this._doFinalize();
          },
          keySize: 4,
          ivSize: 4,
          _ENC_XFORM_MODE: 1,
          _DEC_XFORM_MODE: 2,
          _createHelper: (function () {
            function g(m) {
              if ("string" != typeof m) return k;
            }
  
            return function (m) {
              return {
                encrypt: function (a, b, c) {
                  return g(b).encrypt(m, a, b, c);
                },
                decrypt: function (a, b, c) {
                  return g(b).decrypt(m, a, b, c);
                },
              };
            };
          })(),
        }));
      v.StreamCipher = y.extend({
        _doFinalize: function () {
          return this._process(!0);
        },
        blockSize: 1,
      });
      var n = (u.mode = {}),
        e = (v.BlockCipherMode = x.extend({
          createEncryptor: function (g, m) {
            return this.Encryptor.create(g, m);
          },
          createDecryptor: function (g, m) {
            return this.Decryptor.create(g, m);
          },
          init: function (g, m) {
            this._cipher = g;
            this._iv = m;
          },
        }));
      n = n.CBC = (function () {
        function g(a, b, c) {
          var l = this._iv;
          l ? (this._iv = t) : (l = this._prevBlock);
          for (var h = 0; h < c; h++) a[b + h] ^= l[h];
        }
  
        var m = e.extend();
        m.Encryptor = m.extend({
          processBlock: function (a, b) {
            var c = this._cipher,
              l = c.blockSize;
            g.call(this, a, b, l);
            c.encryptBlock(a, b);
            this._prevBlock = a.slice(b, b + l);
          },
        });
        m.Decryptor = m.extend({
          processBlock: function (a, b) {
            var c = this._cipher,
              l = c.blockSize,
              h = a.slice(b, b + l);
            c.decryptBlock(a, b);
            g.call(this, a, b, l);
            this._prevBlock = h;
          },
        });
        return m;
      })();
      var f = ((u.pad = {}).Pkcs7 = {
        pad: function (g, m) {
          m *= 4;
          m -= g.sigBytes % m;
          for (
            var a = (m << 24) | (m << 16) | (m << 8) | m, b = [], c = 0;
            c < m;
            c += 4
          )
            b.push(a);
          m = w.create(b, m);
          g.concat(m);
        },
        unpad: function (g) {
          g.sigBytes -= g.words[(g.sigBytes - 1) >>> 2] & 255;
        },
      });
      v.BlockCipher = y.extend({
        cfg: y.cfg.extend({
          mode: n,
          padding: f,
        }),
        reset: function () {
          y.reset.call(this);
          var g = this.cfg,
            m = g.iv;
          g = g.mode;
          if (this._xformMode == this._ENC_XFORM_MODE) var a = g.createEncryptor;
          else (a = g.createDecryptor), (this._minBufferSize = 1);
          this._mode = a.call(g, this, m && m.words);
        },
        _doProcessBlock: function (g, m) {
          this._mode.processBlock(g, m);
        },
        _doFinalize: function () {
          var g = this.cfg.padding;
          if (this._xformMode == this._ENC_XFORM_MODE) {
            g.pad(this._data, this.blockSize);
            var m = this._process(!0);
          } else (m = this._process(!0)), g.unpad(m);
          return m;
        },
        blockSize: 4,
      });
      var r = (v.CipherParams = x.extend({
        init: function (g) {
          this.mixIn(g);
        },
        toString: function (g) {
          return (g || this.formatter).stringify(this);
        },
      }));
      u.format = {};
      var k = (v.SerializableCipher = x.extend({
        cfg: x.extend({}),
        encrypt: function (g, m, a, b) {
          b = this.cfg.extend(b);
          var c = g.createEncryptor(a, b);
          m = c.finalize(m);
          c = c.cfg;
          return r.create({
            ciphertext: m,
            key: a,
            iv: c.iv,
            algorithm: g,
            mode: c.mode,
            padding: c.padding,
            blockSize: g.blockSize,
            formatter: b.format,
          });
        },
        decrypt: function (g, m, a, b) {
          b = this.cfg.extend(b);
          m = this._parse(m, b.format);
          return g.createDecryptor(a, b).finalize(m.ciphertext);
        },
        _parse: function (g, m) {
          return "string" == typeof g ? m.parse(g, this) : g;
        },
      }));
    })();
  (function () {
    var t = JDDSecCryptoJS,
      u = t.lib.BlockCipher,
      v = t.algo,
      x = [],
      w = [],
      A = [],
      y = [],
      n = [],
      e = [],
      f = [],
      r = [],
      k = [],
      g = [];
    (function () {
      for (var a = [], b = 0; 256 > b; b++)
        a[b] = 128 > b ? b << 1 : (b << 1) ^ 283;
      var c = 0,
        l = 0;
      for (b = 0; 256 > b; b++) {
        var h = l ^ (l << 1) ^ (l << 2) ^ (l << 3) ^ (l << 4);
        h = (h >>> 8) ^ (h & 255) ^ 99;
        x[c] = h;
        w[h] = c;
        var q = a[c],
          z = a[q],
          C = a[z],
          D = (257 * a[h]) ^ (16843008 * h);
        A[c] = (D << 24) | (D >>> 8);
        y[c] = (D << 16) | (D >>> 16);
        n[c] = (D << 8) | (D >>> 24);
        e[c] = D;
        D = (16843009 * C) ^ (65537 * z) ^ (257 * q) ^ (16843008 * c);
        f[h] = (D << 24) | (D >>> 8);
        r[h] = (D << 16) | (D >>> 16);
        k[h] = (D << 8) | (D >>> 24);
        g[h] = D;
        c ? ((c = q ^ a[a[a[C ^ q]]]), (l ^= a[a[l]])) : (c = l = 1);
      }
    })();
    var m = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
    v = v.AES = u.extend({
      _doReset: function () {
        var a = this._key,
          b = a.words,
          c = a.sigBytes / 4;
        a = 4 * ((this._nRounds = c + 6) + 1);
        for (var l = (this._keySchedule = []), h = 0; h < a; h++)
          if (h < c) l[h] = b[h];
          else {
            var q = l[h - 1];
            h % c
              ? 6 < c &&
                4 == h % c &&
                (q =
                  (x[q >>> 24] << 24) |
                  (x[(q >>> 16) & 255] << 16) |
                  (x[(q >>> 8) & 255] << 8) |
                  x[q & 255])
              : ((q = (q << 8) | (q >>> 24)),
                (q =
                  (x[q >>> 24] << 24) |
                  (x[(q >>> 16) & 255] << 16) |
                  (x[(q >>> 8) & 255] << 8) |
                  x[q & 255]),
                (q ^= m[(h / c) | 0] << 24));
            l[h] = l[h - c] ^ q;
          }
        b = this._invKeySchedule = [];
        for (c = 0; c < a; c++)
          (h = a - c),
            (q = c % 4 ? l[h] : l[h - 4]),
            (b[c] =
              4 > c || 4 >= h
                ? q
                : f[x[q >>> 24]] ^
                  r[x[(q >>> 16) & 255]] ^
                  k[x[(q >>> 8) & 255]] ^
                  g[x[q & 255]]);
      },
      encryptBlock: function (a, b) {
        this._doCryptBlock(a, b, this._keySchedule, A, y, n, e, x);
      },
      decryptBlock: function (a, b) {
        var c = a[b + 1];
        a[b + 1] = a[b + 3];
        a[b + 3] = c;
        this._doCryptBlock(a, b, this._invKeySchedule, f, r, k, g, w);
        c = a[b + 1];
        a[b + 1] = a[b + 3];
        a[b + 3] = c;
      },
      _doCryptBlock: function (a, b, c, l, h, q, z, C) {
        for (
          var D = this._nRounds,
            B = a[b] ^ c[0],
            F = a[b + 1] ^ c[1],
            H = a[b + 2] ^ c[2],
            G = a[b + 3] ^ c[3],
            I = 4,
            M = 1;
          M < D;
          M++
        ) {
          var J =
              l[B >>> 24] ^
              h[(F >>> 16) & 255] ^
              q[(H >>> 8) & 255] ^
              z[G & 255] ^
              c[I++],
            K =
              l[F >>> 24] ^
              h[(H >>> 16) & 255] ^
              q[(G >>> 8) & 255] ^
              z[B & 255] ^
              c[I++],
            L =
              l[H >>> 24] ^
              h[(G >>> 16) & 255] ^
              q[(B >>> 8) & 255] ^
              z[F & 255] ^
              c[I++];
          G =
            l[G >>> 24] ^
            h[(B >>> 16) & 255] ^
            q[(F >>> 8) & 255] ^
            z[H & 255] ^
            c[I++];
          B = J;
          F = K;
          H = L;
        }
        J =
          ((C[B >>> 24] << 24) |
            (C[(F >>> 16) & 255] << 16) |
            (C[(H >>> 8) & 255] << 8) |
            C[G & 255]) ^
          c[I++];
        K =
          ((C[F >>> 24] << 24) |
            (C[(H >>> 16) & 255] << 16) |
            (C[(G >>> 8) & 255] << 8) |
            C[B & 255]) ^
          c[I++];
        L =
          ((C[H >>> 24] << 24) |
            (C[(G >>> 16) & 255] << 16) |
            (C[(B >>> 8) & 255] << 8) |
            C[F & 255]) ^
          c[I++];
        G =
          ((C[G >>> 24] << 24) |
            (C[(B >>> 16) & 255] << 16) |
            (C[(F >>> 8) & 255] << 8) |
            C[H & 255]) ^
          c[I++];
        a[b] = J;
        a[b + 1] = K;
        a[b + 2] = L;
        a[b + 3] = G;
      },
      keySize: 8,
    });
    t.AES = u._createHelper(v);
  })();
  
  (function () {
    var t = JDDSecCryptoJS,
      u = t.lib,
      v = u.WordArray,
      x = u.Hasher,
      w = [];
    u = t.algo.SHA1 = x.extend({
      _doReset: function () {
        this._hash = new v.init([
          1732584193, 4023233417, 2562383102, 271733878, 3285377520,
        ]);
      },
      _doProcessBlock: function (A, y) {
        for (
          var n = this._hash.words,
            e = n[0],
            f = n[1],
            r = n[2],
            k = n[3],
            g = n[4],
            m = 0;
          80 > m;
          m++
        ) {
          if (16 > m) w[m] = A[y + m] | 0;
          else {
            var a = w[m - 3] ^ w[m - 8] ^ w[m - 14] ^ w[m - 16];
            w[m] = (a << 1) | (a >>> 31);
          }
          a = ((e << 5) | (e >>> 27)) + g + w[m];
          a =
            20 > m
              ? a + (((f & r) | (~f & k)) + 1518500249)
              : 40 > m
              ? a + ((f ^ r ^ k) + 1859775393)
              : 60 > m
              ? a + (((f & r) | (f & k) | (r & k)) - 1894007588)
              : a + ((f ^ r ^ k) - 899497514);
          g = k;
          k = r;
          r = (f << 30) | (f >>> 2);
          f = e;
          e = a;
        }
        n[0] = (n[0] + e) | 0;
        n[1] = (n[1] + f) | 0;
        n[2] = (n[2] + r) | 0;
        n[3] = (n[3] + k) | 0;
        n[4] = (n[4] + g) | 0;
      },
      _doFinalize: function () {
        var A = this._data,
          y = A.words,
          n = 8 * this._nDataBytes,
          e = 8 * A.sigBytes;
        y[e >>> 5] |= 128 << (24 - (e % 32));
        y[(((e + 64) >>> 9) << 4) + 14] = Math.floor(n / 4294967296);
        y[(((e + 64) >>> 9) << 4) + 15] = n;
        A.sigBytes = 4 * y.length;
        this._process();
        return this._hash;
      },
      clone: function () {
        var A = x.clone.call(this);
        A._hash = this._hash.clone();
        return A;
      },
    });
    t.SHA1 = x._createHelper(u);
    t.HmacSHA1 = x._createHmacHelper(u);
  })();
  
  (function () {
    var t = JDDSecCryptoJS,
      u = t.channel;
    u.Downlink = {
      deBase32: function (v) {
        if (void 0 == v || "" == v || null == v) return "";
        var x = t.enc.Hex.parse("30313233343536373839616263646566"),
          w = t.enc.Hex.parse("724e5428476f307361374d3233784a6c");
        return t.AES.decrypt(
          {
            ciphertext: t.enc.Base32.parse(v),
          },
          w,
          {
            mode: t.mode.CBC,
            padding: t.pad.Pkcs7,
            iv: x,
          }
        ).toString(t.enc.Utf8);
      },
      deBase64: function (v) {
        return "";
      },
    };
    u.Uplink = {
      enAsBase32: function (v) {
        return "";
      },
      enAsBase64: function (v) {
        return "";
      },
    };
  })();
  
  (function () {
    var t = JDDSecCryptoJS,
      u = t.lib.WordArray;
    t.enc.Base32 = {
      stringify: function (v) {
        var x = v.words,
          w = v.sigBytes,
          A = this._map;
        v.clamp();
        v = [];
        for (var y = 0; y < w; y += 5) {
          for (var n = [], e = 0; 5 > e; e++)
            n[e] = (x[(y + e) >>> 2] >>> (24 - ((y + e) % 4) * 8)) & 255;
          n = [
            (n[0] >>> 3) & 31,
            ((n[0] & 7) << 2) | ((n[1] >>> 6) & 3),
            (n[1] >>> 1) & 31,
            ((n[1] & 1) << 4) | ((n[2] >>> 4) & 15),
            ((n[2] & 15) << 1) | ((n[3] >>> 7) & 1),
            (n[3] >>> 2) & 31,
            ((n[3] & 3) << 3) | ((n[4] >>> 5) & 7),
            n[4] & 31,
          ];
          for (e = 0; 8 > e && y + 0.625 * e < w; e++) v.push(A.charAt(n[e]));
        }
        if ((x = A.charAt(32))) for (; v.length % 8; ) v.push(x);
        return v.join("");
      },
      parse: function (v) {
        var x = v.length,
          w = this._map,
          A = w.charAt(32);
        A && ((A = v.indexOf(A)), -1 != A && (x = A));
        A = [];
        for (var y = 0, n = 0; n < x; n++) {
          var e = n % 8;
          if (0 != e && 2 != e && 5 != e) {
            var f = 255 & (w.indexOf(v.charAt(n - 1)) << (40 - 5 * e) % 8),
              r = 255 & (w.indexOf(v.charAt(n)) >>> (5 * e - 3) % 8);
            e =
              e % 3 ? 0 : 255 & (w.indexOf(v.charAt(n - 2)) << (3 == e ? 6 : 7));
            A[y >>> 2] |= (f | r | e) << (24 - (y % 4) * 8);
            y++;
          }
        }
        return u.create(A, y);
      },
      _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",
    };
  })();
  
  class JDDMAC {
    static t() {
      return "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D"
        .split(" ")
        .map(function (v) {
          return parseInt(v, 16);
        });
    }
  
    mac(v) {
      for (var x = -1, w = 0, A = v.length; w < A; w++)
        x = (x >>> 8) ^ t[(x ^ v.charCodeAt(w)) & 255];
      return (x ^ -1) >>> 0;
    }
  }
  
  var _CurrentPageProtocol =
      "https:" == document.location.protocol ? "https://" : "http://",
    _JdJrTdRiskDomainName = window.__fp_domain || "gia.jd.com",
    _url_query_str = "",
    _root_domain = "",
    _CurrentPageUrl = (function () {
      var t = document.location.href.toString();
      try {
        _root_domain =
          /^https?:\/\/(?:\w+\.)*?(\w*\.(?:com\.cn|cn|com|net|id))[\\\/]*/.exec(
            t
          )[1];
      } catch (v) {}
      var u = t.indexOf("?");
      0 < u &&
        ((_url_query_str = t.substring(u + 1)),
        500 < _url_query_str.length &&
          (_url_query_str = _url_query_str.substring(0, 499)),
        (t = t.substring(0, u)));
      return (t = t.substring(_CurrentPageProtocol.length));
    })(),
    jd_shadow__ = (function () {
      try {
        var t = JDDSecCryptoJS,
          u = [];
        u.push(_CurrentPageUrl);
        var v = t.lib.UUID.generateUuid();
        u.push(v);
        var x = new Date().getTime();
        u.push(x);
        var w = t.SHA1(u.join("")).toString().toUpperCase();
        u = [];
        u.push("JD3");
        u.push(w);
        var A = new JDDMAC().mac(u.join(""));
        u.push(A);
        var y = t.enc.Hex.parse("30313233343536373839616263646566"),
          n = t.enc.Hex.parse("4c5751554935255042304e6458323365"),
          e = u.join("");
        return t.AES.encrypt(t.enc.Utf8.parse(e), n, {
          mode: t.mode.CBC,
          padding: t.pad.Pkcs7,
          iv: y,
        }).ciphertext.toString(t.enc.Base32);
      } catch (f) {
        console.log(f);
      }
    })();
  var td_collect = new (function () {
    function t() {
      var n =
        window.webkitRTCPeerConnection ||
        window.mozRTCPeerConnection ||
        window.RTCPeerConnection;
      if (n) {
        var e = function (k) {
            var g = /([0-9]{1,3}(\.[0-9]{1,3}){3})/,
              m =
                /\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*/;
            try {
              var a = g.exec(k);
              if (null == a || 0 == a.length || void 0 == a) a = m.exec(k);
              var b = a[1];
              void 0 === f[b] && w.push(b);
              f[b] = !0;
            } catch (c) {}
          },
          f = {};
        try {
          var r = new n({
            iceServers: [
              {
                url: "stun:stun.services.mozilla.com",
              },
            ],
          });
        } catch (k) {}
        try {
          void 0 === r &&
            (r = new n({
              iceServers: [],
            }));
        } catch (k) {}
        if (r || window.mozRTCPeerConnection)
          try {
            r.createDataChannel("chat", {
              reliable: !1,
            });
          } catch (k) {}
        r &&
          ((r.onicecandidate = function (k) {
            k.candidate && e(k.candidate.candidate);
          }),
          r.createOffer(
            function (k) {
              r.setLocalDescription(
                k,
                function () {},
                function () {}
              );
            },
            function () {}
          ),
          setTimeout(function () {
            try {
              r.localDescription.sdp.split("\n").forEach(function (k) {
                0 === k.indexOf("a=candidate:") && e(k);
              });
            } catch (k) {}
          }, 800));
      }
    }
  
    function u(n) {
      var e;
      return (e = document.cookie.match(
        new RegExp("(^| )" + n + "=([^;]*)(;|$)")
      ))
        ? e[2]
        : "";
    }
  
    function v() {
      function n(g) {
        var m = {};
        r.style.fontFamily = g;
        document.body.appendChild(r);
        m.height = r.offsetHeight;
        m.width = r.offsetWidth;
        document.body.removeChild(r);
        return m;
      }
  
      var e = ["monospace", "sans-serif", "serif"],
        f = [],
        r = document.createElement("span");
      r.style.fontSize = "72px";
      r.style.visibility = "hidden";
      r.innerHTML = "mmmmmmmmmmlli";
      for (var k = 0; k < e.length; k++) f[k] = n(e[k]);
      this.checkSupportFont = function (g) {
        for (var m = 0; m < f.length; m++) {
          var a = n(g + "," + e[m]),
            b = f[m];
          if (a.height !== b.height || a.width !== b.width) return !0;
        }
        return !1;
      };
    }
  
    function x(n) {
      var e = {};
      e.name = n.name;
      e.filename = n.filename.toLowerCase();
      e.description = n.description;
      void 0 !== n.version && (e.version = n.version);
      e.mimeTypes = [];
      for (var f = 0; f < n.length; f++) {
        var r = n[f],
          k = {};
        k.description = r.description;
        k.suffixes = r.suffixes;
        k.type = r.type;
        e.mimeTypes.push(k);
      }
      return e;
    }
  
    this.bizId = "";
    this.bioConfig = {
      type: "42",
      operation: 1,
      duraTime: 2,
      interval: 50,
    };
    this.worder = null;
    this.deviceInfo = {
      userAgent: "",
      isJdApp: !1,
      isJrApp: !1,
      sdkToken: "",
      fp: "",
      eid: "",
    };
    this.isRpTok = !1;
    this.obtainLocal = function (n) {
      n = "undefined" !== typeof n && n ? !0 : !1;
      var e = {};
      try {
        var f = document.cookie.replace(
          /(?:(?:^|.*;\s*)3AB9D23F7A4B3C9B\s*=\s*([^;]*).*$)|^.*$/,
          "$1"
        );
        0 !== f.length && (e.cookie = f);
      } catch (k) {}
      try {
        window.localStorage &&
          null !== window.localStorage &&
          0 !== window.localStorage.length &&
          (e.localStorage = window.localStorage.getItem("3AB9D23F7A4B3C9B"));
      } catch (k) {}
      try {
        window.sessionStorage &&
          null !== window.sessionStorage &&
          (e.sessionStorage = window.sessionStorage["3AB9D23F7A4B3C9B"]);
      } catch (k) {}
      try {
        p.globalStorage &&
          (e.globalStorage =
            window.globalStorage[".localdomain"]["3AB9D23F7A4B3C9B"]);
      } catch (k) {}
      try {
        d &&
          "function" == typeof d.load &&
          "function" == typeof d.getAttribute &&
          (d.load("jdgia_user_data"),
          (e.userData = d.getAttribute("3AB9D23F7A4B3C9B")));
      } catch (k) {}
      try {
        E.indexedDbId && (e.indexedDb = E.indexedDbId);
      } catch (k) {}
      try {
        E.webDbId && (e.webDb = E.webDbId);
      } catch (k) {}
      try {
        for (var r in e)
          if (32 < e[r].length) {
            _JdEid = e[r];
            n || (_eidFlag = !0);
            break;
          }
      } catch (k) {}
      try {
        ("undefined" === typeof _JdEid || 0 >= _JdEid.length) &&
          this.db("3AB9D23F7A4B3C9B");
        if ("undefined" === typeof _JdEid || 0 >= _JdEid.length)
          _JdEid = u("3AB9D23F7A4B3C9B");
        if ("undefined" === typeof _JdEid || 0 >= _JdEid.length) _eidFlag = !0;
      } catch (k) {}
      return _JdEid;
    };
    var w = [],
      A =
        "Abadi MT Condensed Light;Adobe Fangsong Std;Adobe Hebrew;Adobe Ming Std;Agency FB;Arab;Arabic Typesetting;Arial Black;Batang;Bauhaus 93;Bell MT;Bitstream Vera Serif;Bodoni MT;Bookman Old Style;Braggadocio;Broadway;Calibri;Californian FB;Castellar;Casual;Centaur;Century Gothic;Chalkduster;Colonna MT;Copperplate Gothic Light;DejaVu LGC Sans Mono;Desdemona;DFKai-SB;Dotum;Engravers MT;Eras Bold ITC;Eurostile;FangSong;Forte;Franklin Gothic Heavy;French Script MT;Gabriola;Gigi;Gisha;Goudy Old Style;Gulim;GungSeo;Haettenschweiler;Harrington;Hiragino Sans GB;Impact;Informal Roman;KacstOne;Kino MT;Kozuka Gothic Pr6N;Lohit Gujarati;Loma;Lucida Bright;Lucida Fax;Magneto;Malgun Gothic;Matura MT Script Capitals;Menlo;MingLiU-ExtB;MoolBoran;MS PMincho;MS Reference Sans Serif;News Gothic MT;Niagara Solid;Nyala;Palace Script MT;Papyrus;Perpetua;Playbill;PMingLiU;Rachana;Rockwell;Sawasdee;Script MT Bold;Segoe Print;Showcard Gothic;SimHei;Snap ITC;TlwgMono;Tw Cen MT Condensed Extra Bold;Ubuntu;Umpush;Univers;Utopia;Vladimir Script;Wide Latin".split(
          ";"
        ),
      y =
        "4game;AdblockPlugin;AdobeExManCCDetect;AdobeExManDetect;Alawar NPAPI utils;Aliedit Plug-In;Alipay Security Control 3;AliSSOLogin plugin;AmazonMP3DownloaderPlugin;AOL Media Playback Plugin;AppUp;ArchiCAD;AVG SiteSafety plugin;Babylon ToolBar;Battlelog Game Launcher;BitCometAgent;Bitdefender QuickScan;BlueStacks Install Detector;CatalinaGroup Update;Citrix ICA Client;Citrix online plug-in;Citrix Receiver Plug-in;Coowon Update;DealPlyLive Update;Default Browser Helper;DivX Browser Plug-In;DivX Plus Web Player;DivX VOD Helper Plug-in;doubleTwist Web Plugin;Downloaders plugin;downloadUpdater;eMusicPlugin DLM6;ESN Launch Mozilla Plugin;ESN Sonar API;Exif Everywhere;Facebook Plugin;File Downloader Plug-in;FileLab plugin;FlyOrDie Games Plugin;Folx 3 Browser Plugin;FUZEShare;GDL Object Web Plug-in 16.00;GFACE Plugin;Ginger;Gnome Shell Integration;Google Earth Plugin;Google Earth Plug-in;Google Gears 0.5.33.0;Google Talk Effects Plugin;Google Update;Harmony Firefox Plugin;Harmony Plug-In;Heroes & Generals live;HPDetect;Html5 location provider;IE Tab plugin;iGetterScriptablePlugin;iMesh plugin;Kaspersky Password Manager;LastPass;LogMeIn Plugin 1.0.0.935;LogMeIn Plugin 1.0.0.961;Ma-Config.com plugin;Microsoft Office 2013;MinibarPlugin;Native Client;Nitro PDF Plug-In;Nokia Suite Enabler Plugin;Norton Identity Safe;npAPI Plugin;NPLastPass;NPPlayerShell;npTongbuAddin;NyxLauncher;Octoshape Streaming Services;Online Storage plug-in;Orbit Downloader;Pando Web Plugin;Parom.TV player plugin;PDF integrado do WebKit;PDF-XChange Viewer;PhotoCenterPlugin1.1.2.2;Picasa;PlayOn Plug-in;QQ2013 Firefox Plugin;QQDownload Plugin;QQMiniDL Plugin;QQMusic;RealDownloader Plugin;Roblox Launcher Plugin;RockMelt Update;Safer Update;SafeSearch;Scripting.Dictionary;SefClient Plugin;Shell.UIHelper;Silverlight Plug-In;Simple Pass;Skype Web Plugin;SumatraPDF Browser Plugin;Symantec PKI Client;Tencent FTN plug-in;Thunder DapCtrl NPAPI Plugin;TorchHelper;Unity Player;Uplay PC;VDownloader;Veetle TV Core;VLC Multimedia Plugin;Web Components;WebKit-integrierte PDF;WEBZEN Browser Extension;Wolfram Mathematica;WordCaptureX;WPI Detector 1.4;Yandex Media Plugin;Yandex PDF Viewer;YouTube Plug-in;zako".split(
          ";"
        );
    this.toJson = "object" === typeof JSON && JSON.stringify;
    this.init = function () {
      _fingerprint_step = 6;
      t();
      _fingerprint_step = 7;
      "function" !== typeof this.toJson &&
        (this.toJson = function (n) {
          var e = typeof n;
          if ("undefined" === e || null === n) return "null";
          if ("number" === e || "boolean" === e) return n + "";
          if ("object" === e && n && n.constructor === Array) {
            e = [];
            for (var f = 0; n.length > f; f++) e.push(this.toJson(n[f]));
            return "[" + (e + "]");
          }
          if ("object" === e) {
            e = [];
            for (f in n)
              n.hasOwnProperty(f) && e.push('"' + f + '":' + this.toJson(n[f]));
            return "{" + (e + "}");
          }
        });
      this.sdkCollectInit();
    };
    this.sdkCollectInit = function () {
      try {
        try {
          bp_bizid && (this.bizId = bp_bizid);
        } catch (f) {
          this.bizId = "jsDefault";
        }
        var n = navigator.userAgent.toLowerCase(),
          e =
            !n.match(/(iphone|ipad|ipod)/i) &&
            (-1 < n.indexOf("android") || -1 < n.indexOf("adr"));
        this.deviceInfo.isJdApp = -1 < n.indexOf("jdapp");
        this.deviceInfo.isJrApp = -1 < n.indexOf("jdjr");
        this.deviceInfo.userAgent = navigator.userAgent;
        this.deviceInfo.isAndroid = e;
        this.createWorker();
      } catch (f) {}
    };
    this.db = function (n, e) {
      try {
        _fingerprint_step = "m";
        if (window.openDatabase) {
          var f = window.openDatabase(
            "sqlite_jdtdstorage",
            "",
            "jdtdstorage",
            1048576
          );
          void 0 !== e && "" != e
            ? f.transaction(function (r) {
                r.executeSql(
                  "CREATE TABLE IF NOT EXISTS cache(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, value TEXT NOT NULL, UNIQUE (name))",
                  [],
                  function (k, g) {},
                  function (k, g) {}
                );
                r.executeSql(
                  "INSERT OR REPLACE INTO cache(name, value) VALUES(?, ?)",
                  [n, e],
                  function (k, g) {},
                  function (k, g) {}
                );
              })
            : f.transaction(function (r) {
                r.executeSql(
                  "SELECT value FROM cache WHERE name=?",
                  [n],
                  function (k, g) {
                    1 <= g.rows.length && (_JdEid = g.rows.item(0).value);
                  },
                  function (k, g) {}
                );
              });
        }
        _fingerprint_step = "n";
      } catch (r) {}
    };
    this.setCookie = function (n, e) {
      void 0 !== e &&
        "" != e &&
        (document.cookie =
          n +
          "=" +
          e +
          "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" +
          _root_domain);
    };
    this.tdencrypt = function (n) {
      n = this.toJson(n);
      n = encodeURIComponent(n);
      var e = "",
        f = 0;
      do {
        var r = n.charCodeAt(f++);
        var k = n.charCodeAt(f++);
        var g = n.charCodeAt(f++);
        var m = r >> 2;
        r = ((r & 3) << 4) | (k >> 4);
        var a = ((k & 15) << 2) | (g >> 6);
        var b = g & 63;
        isNaN(k) ? (a = b = 64) : isNaN(g) && (b = 64);
        e =
          e +
          "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(
            m
          ) +
          "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(
            r
          ) +
          "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(
            a
          ) +
          "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(
            b
          );
      } while (f < n.length);
      return e + "/";
    };
    this.collect = function () {
      var n = new Date();
      try {
        var e = document.createElement("div"),
          f = {},
          r =
            "ActiveBorder ActiveCaption AppWorkspace Background ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText".split(
              " "
            );
        if (window.getComputedStyle)
          for (var k = 0; k < r.length; k++)
            document.body.appendChild(e),
              (e.style.color = r[k]),
              (f[r[k]] = window.getComputedStyle(e).getPropertyValue("color")),
              document.body.removeChild(e);
      } catch (D) {}
      e = {
        ca: {},
        ts: {},
        m: {},
      };
      r = e.ca;
      r.tdHash = _jdfp_canvas_md5;
      var g = !1;
      if ((k = window.WebGLRenderingContext))
        (k = navigator.userAgent),
          (k = k.toLowerCase()),
          (k =
            (0 < k.indexOf("jdjr-app") || 0 <= k.indexOf("jdapp")) &&
            (0 < k.indexOf("iphone") || 0 < k.indexOf("ipad"))
              ? !0
              : !1),
          (k = !k);
      if (k) {
        var m = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"],
          a = [],
          b;
        for (k = 0; k < m.length; k++)
          try {
            var c = !1;
            (c = document.createElement("canvas").getContext(m[k], {
              stencil: !0,
            })) &&
              c &&
              ((b = c), a.push(m[k]));
          } catch (D) {}
        a.length &&
          (g = {
            name: a,
            gl: b,
          });
      }
      if (g) {
        k = g.gl;
        r.contextName = g.name.join();
        r.webglversion = k.getParameter(k.VERSION);
        r.shadingLV = k.getParameter(k.SHADING_LANGUAGE_VERSION);
        r.vendor = k.getParameter(k.VENDOR);
        r.renderer = k.getParameter(k.RENDERER);
        b = [];
        try {
          (b = k.getSupportedExtensions()), (r.extensions = b);
        } catch (D) {}
        try {
          var l = k.getExtension("WEBGL_debug_renderer_info");
          l &&
            ((r.wuv = k.getParameter(l.UNMASKED_VENDOR_WEBGL)),
            (r.wur = k.getParameter(l.UNMASKED_RENDERER_WEBGL)));
        } catch (D) {}
      }
      e.m.documentMode = document.documentMode;
      e.m.compatMode = document.compatMode;
      l = [];
      // r = new v;
      // for (k = 0; k < A.length; k++) b = A[k], r.checkSupportFont(b) && l.push(b);
      e.fo = l;
      k = {};
      l = [];
      for (var h in navigator)
        "object" != typeof navigator[h] && (k[h] = navigator[h]), l.push(h);
      k.enumerationOrder = l;
      k.javaEnabled = false;
      try {
        k.taintEnabled = navigator.taintEnabled();
      } catch (D) {}
      e.n = k;
      k = navigator.userAgent.toLowerCase();
      if ((h = k.match(/rv:([\d.]+)\) like gecko/))) var q = h[1];
      if ((h = k.match(/msie ([\d.]+)/))) q = h[1];
      h = [];
      if (q)
        for (
          q =
            "AcroPDF.PDF;Adodb.Stream;AgControl.AgControl;DevalVRXCtrl.DevalVRXCtrl.1;MacromediaFlashPaper.MacromediaFlashPaper;Msxml2.DOMDocument;Msxml2.XMLHTTP;PDF.PdfCtrl;QuickTime.QuickTime;QuickTimeCheckObject.QuickTimeCheck.1;RealPlayer;RealPlayer.RealPlayer(tm) ActiveX Control (32-bit);RealVideo.RealVideo(tm) ActiveX Control (32-bit);rmocx.RealPlayer G2 Control;Scripting.Dictionary;Shell.UIHelper;ShockwaveFlash.ShockwaveFlash;SWCtl.SWCtl;TDCCtl.TDCCtl;WMPlayer.OCX".split(
              ";"
            ),
            k = 0;
          k < q.length;
          k++
        ) {
          var z = q[k];
          try {
            var C = new ActiveXObject(z);
            l = {};
            l.name = z;
            try {
              l.version = C.GetVariable("$version");
            } catch (D) {}
            try {
              l.version = C.GetVersions();
            } catch (D) {}
            (l.version && 0 < l.version.length) || (l.version = "");
            h.push(l);
          } catch (D) {}
        }
      else {
        q = navigator.plugins;
        l = {};
        for (k = 0; k < q.length; k++) (z = q[k]), (l[z.name] = 1), h.push(x(z));
        for (k = 0; k < y.length; k++)
          (C = y[k]), l[C] || ((z = q[C]), z && h.push(x(z)));
      }
      q =
        "availHeight availWidth colorDepth bufferDepth deviceXDPI deviceYDPI height width logicalXDPI logicalYDPI pixelDepth updateInterval".split(
          " "
        );
      z = {};
      for (k = 0; q.length > k; k++)
        (C = q[k]), void 0 !== screen[C] && (z[C] = screen[C]);
      q = ["devicePixelRatio", "screenTop", "screenLeft"];
      l = {};
      for (k = 0; q.length > k; k++)
        (C = q[k]), void 0 !== window[C] && (l[C] = window[C]);
      e.p = h;
      e.w = l;
      e.s = z;
      e.sc = f;
      e.tz = n.getTimezoneOffset();
      e.lil = w.sort().join("|");
      e.wil = "";
      f = {};
      try {
        (f.cookie = navigator.cookieEnabled),
          (f.localStorage = !!window.localStorage),
          (f.sessionStorage = !!window.sessionStorage),
          (f.globalStorage = !!window.globalStorage),
          (f.indexedDB = !!window.indexedDB);
      } catch (D) {}
      e.ss = f;
      e.ts.deviceTime = n.getTime();
      e.ts.deviceEndTime = new Date().getTime();
      return this.tdencrypt(e);
    };
    this.collectSdk = function (n) {
      try {
        var e = this,
          f = !1,
          r = e.getLocal("BATQW722QTLYVCRD");
        if (null != r && void 0 != r && "" != r)
          try {
            var k = JSON.parse(r),
              g = new Date().getTime();
            null != k &&
              void 0 != k.t &&
              "number" == typeof k.t &&
              (12e5 >= g - k.t &&
              void 0 != k.tk &&
              null != k.tk &&
              "" != k.tk &&
              k.tk.startsWith("jdd")
                ? ((e.deviceInfo.sdkToken = k.tk), (f = !0))
                : void 0 != k.tk &&
                  null != k.tk &&
                  "" != k.tk &&
                  (e.deviceInfo.sdkToken = k.tk));
          } catch (m) {}
        r = !1;
        e.deviceInfo.isJdApp
          ? ((e.deviceInfo.clientVersion = navigator.userAgent.split(";")[2]),
            (r = 0 < e.compareVersion(e.deviceInfo.clientVersion, "7.0.2")) &&
              !f &&
              e.getJdSdkCacheToken(function (m) {
                e.deviceInfo.sdkToken = m;
                (null != m && "" != m && m.startsWith("jdd")) ||
                  e.getJdBioToken(n);
              }))
          : e.deviceInfo.isJrApp &&
            ((e.deviceInfo.clientVersion = navigator.userAgent.match(
              /clientVersion=([^&]*)(&|$)/
            )[1]),
            (r = 0 < e.compareVersion(e.deviceInfo.clientVersion, "4.6.0")) &&
              !f &&
              e.getJdJrSdkCacheToken(function (m) {
                e.deviceInfo.sdkToken = m;
                (null != m && "" != m && m.startsWith("jdd")) ||
                  e.getJdJrBioToken(n);
              }));
        "function" == typeof n && n(e.deviceInfo);
      } catch (m) {}
    };
    this.compareVersion = function (n, e) {
      try {
        if (n === e) return 0;
        var f = n.split(".");
        var r = e.split(".");
        for (n = 0; n < f.length; n++) {
          var k = parseInt(f[n]);
          if (!r[n]) return 1;
          var g = parseInt(r[n]);
          if (k < g) break;
          if (k > g) return 1;
        }
      } catch (m) {}
      return -1;
    };
    this.isWKWebView = function () {
      return this.deviceInfo.userAgent.match(/supportJDSHWK/i) ||
        1 == window._is_jdsh_wkwebview
        ? !0
        : !1;
    };
    this.getErrorToken = function (n) {
      try {
        if (n) {
          var e = (n + "").match(/"token":"(.*?)"/);
          if (e && 1 < e.length) return e[1];
        }
      } catch (f) {}
      return "";
    };
    this.getJdJrBioToken = function (n) {
      var e = this;
      "undefined" != typeof JrBridge &&
        null != JrBridge &&
        "undefined" != typeof JrBridge._version &&
        (0 > e.compareVersion(JrBridge._version, "2.0.0")
          ? console.error(
              "\u6865\u7248\u672c\u4f4e\u4e8e2.0\u4e0d\u652f\u6301bio"
            )
          : JrBridge.callNative(
              {
                type: e.bioConfig.type,
                operation: e.bioConfig.operation,
                biometricData: {
                  bizId: e.bizId,
                  duraTime: e.bioConfig.duraTime,
                  interval: e.bioConfig.interval,
                },
              },
              function (f) {
                try {
                  "object" != typeof f && (f = JSON.parse(f)),
                    (e.deviceInfo.sdkToken = f.token);
                } catch (r) {
                  console.error(r);
                }
                null != e.deviceInfo.sdkToken &&
                  "" != e.deviceInfo.sdkToken &&
                  ((f = {
                    tk: e.deviceInfo.sdkToken,
                    t: new Date().getTime(),
                  }),
                  e.store("BATQW722QTLYVCRD", JSON.stringify(f)));
              }
            ));
    };
    this.getJdJrSdkCacheToken = function (n) {
      var e = this;
      try {
        "undefined" == typeof JrBridge ||
          null == JrBridge ||
          "undefined" == typeof JrBridge._version ||
          0 > e.compareVersion(JrBridge._version, "2.0.0") ||
          JrBridge.callNative(
            {
              type: e.bioConfig.type,
              operation: 5,
              biometricData: {
                bizId: e.bizId,
                duraTime: e.bioConfig.duraTime,
                interval: e.bioConfig.interval,
              },
            },
            function (f) {
              var r = "";
              try {
                "object" != typeof f && (f = JSON.parse(f)), (r = f.token);
              } catch (k) {
                console.error(k);
              }
              null != r &&
                "" != r &&
                "function" == typeof n &&
                (n(r),
                r.startsWith("jdd") &&
                  ((f = {
                    tk: r,
                    t: new Date().getTime(),
                  }),
                  e.store("BATQW722QTLYVCRD", JSON.stringify(f))));
            }
          );
      } catch (f) {}
    };
    this.getJdBioToken = function (n) {
      var e = this;
      n = JSON.stringify({
        businessType: "bridgeBiologicalProbe",
        callBackName: "_bioDeviceCb",
        params: {
          pin: "",
          jsonData: {
            type: e.bioConfig.type,
            operation: e.bioConfig.operation,
            data: {
              bizId: e.bizId,
              duraTime: e.bioConfig.duraTime,
              interval: e.bioConfig.interval,
            },
            biometricData: {
              bizId: e.bizId,
              duraTime: e.bioConfig.duraTime,
              interval: e.bioConfig.interval,
            },
          },
        },
      });
      e.isWKWebView()
        ? window.webkit.messageHandlers.JDAppUnite.postMessage({
            method: "notifyMessageToNative",
            params: n,
          })
        : window.JDAppUnite && window.JDAppUnite.notifyMessageToNative(n);
      window._bioDeviceCb = function (f) {
        try {
          var r = "object" == typeof f ? f : JSON.parse(f);
          if (void 0 != r && null != r && "0" != r.status) return;
          null != r.data.token &&
            void 0 != r.data.token &&
            "" != r.data.token &&
            (e.deviceInfo.sdkToken = r.data.token);
        } catch (k) {
          (f = e.getErrorToken(f)),
            null != f && "" != f && (e.deviceInfo.sdkToken = f);
        }
        null != e.deviceInfo.sdkToken &&
          "" != e.deviceInfo.sdkToken &&
          ((f = {
            tk: e.deviceInfo.sdkToken,
            t: new Date().getTime(),
          }),
          e.store("BATQW722QTLYVCRD", JSON.stringify(f)));
      };
    };
    this.getJdSdkCacheToken = function (n) {
      try {
        var e = this,
          f = JSON.stringify({
            businessType: "bridgeBiologicalProbe",
            callBackName: "_bioDeviceSdkCacheCb",
            params: {
              pin: "",
              jsonData: {
                type: e.bioConfig.type,
                operation: 5,
                data: {
                  bizId: e.bizId,
                  duraTime: e.bioConfig.duraTime,
                  interval: e.bioConfig.interval,
                },
                biometricData: {
                  bizId: e.bizId,
                  duraTime: e.bioConfig.duraTime,
                  interval: e.bioConfig.interval,
                },
              },
            },
          });
        e.isWKWebView()
          ? window.webkit.messageHandlers.JDAppUnite.postMessage({
              method: "notifyMessageToNative",
              params: f,
            })
          : window.JDAppUnite && window.JDAppUnite.notifyMessageToNative(f);
        window._bioDeviceSdkCacheCb = function (r) {
          var k = "";
          try {
            var g = "object" == typeof r ? r : JSON.parse(r);
            if (void 0 != g && null != g && "0" != g.status) return;
            k = g.data.token;
          } catch (m) {
            k = e.getErrorToken(r);
          }
          null != k &&
            "" != k &&
            "function" == typeof n &&
            (n(k),
            k.startsWith("jdd") &&
              ((r = {
                tk: k,
                t: new Date().getTime(),
              }),
              e.store("BATQW722QTLYVCRD", JSON.stringify(r))));
        };
      } catch (r) {}
    };
    this.store = function (n, e) {
      try {
        this.setCookie(n, e);
      } catch (f) {}
      try {
        window.localStorage && window.localStorage.setItem(n, e);
      } catch (f) {}
      try {
        window.sessionStorage && window.sessionStorage.setItem(n, e);
      } catch (f) {}
      try {
        window.globalStorage &&
          window.globalStorage[".localdomain"].setItem(n, e);
      } catch (f) {}
      try {
        this.db(n, _JdEid);
      } catch (f) {}
    };
    this.getLocal = function (n) {
      var e = {},
        f = null;
      try {
        var r = document.cookie.replace(
          new RegExp("(?:(?:^|.*;\\s*)" + n + "\\s*\\=\\s*([^;]*).*$)|^.*$"),
          "$1"
        );
        0 !== r.length && (e.cookie = r);
      } catch (g) {}
      try {
        window.localStorage &&
          null !== window.localStorage &&
          0 !== window.localStorage.length &&
          (e.localStorage = window.localStorage.getItem(n));
      } catch (g) {}
      try {
        window.sessionStorage &&
          null !== window.sessionStorage &&
          (e.sessionStorage = window.sessionStorage[n]);
      } catch (g) {}
      try {
        p.globalStorage &&
          (e.globalStorage = window.globalStorage[".localdomain"][n]);
      } catch (g) {}
      try {
        d &&
          "function" == typeof d.load &&
          "function" == typeof d.getAttribute &&
          (d.load("jdgia_user_data"), (e.userData = d.getAttribute(n)));
      } catch (g) {}
      try {
        E.indexedDbId && (e.indexedDb = E.indexedDbId);
      } catch (g) {}
      try {
        E.webDbId && (e.webDb = E.webDbId);
      } catch (g) {}
      try {
        for (var k in e)
          if (32 < e[k].length) {
            f = e[k];
            break;
          }
      } catch (g) {}
      try {
        if (null == f || "undefined" === typeof f || 0 >= f.length) f = u(n);
      } catch (g) {}
      return f;
    };
    this.createWorker = function () {
      if (window.Worker) {
        try {
          var n = new Blob(
            [
              "onmessage = function (event) {\n    var data = JSON.parse(event.data);\n    try {\n        var httpRequest;\n        try {\n            httpRequest = new XMLHttpRequest();\n        } catch (h) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Microsoft.XMLHTTP')\n            } catch (l) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml2.XMLHTTP')\n            } catch (r) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml3.XMLHTTP')\n            } catch (n) {}\n\n        if(data){\n            httpRequest['open']('POST', data.url, false);\n            httpRequest['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            httpRequest['onreadystatechange'] = function () {\n                if (4 === httpRequest['readyState'] && 200 === httpRequest['status']) {\n                    postMessage(httpRequest.responseText);\n                }\n            };\n            httpRequest['send'](data.data);\n        }\n\n    }catch (e){console.error(e);}\n};",
            ],
            {
              type: "application/javascript",
            }
          );
        } catch (e) {
          (window.BlobBuilder =
            window.BlobBuilder ||
            window.WebKitBlobBuilder ||
            window.MozBlobBuilder),
            (n = new BlobBuilder()),
            n.append(
              "onmessage = function (event) {\n    var data = JSON.parse(event.data);\n    try {\n        var httpRequest;\n        try {\n            httpRequest = new XMLHttpRequest();\n        } catch (h) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Microsoft.XMLHTTP')\n            } catch (l) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml2.XMLHTTP')\n            } catch (r) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml3.XMLHTTP')\n            } catch (n) {}\n\n        if(data){\n            httpRequest['open']('POST', data.url, false);\n            httpRequest['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            httpRequest['onreadystatechange'] = function () {\n                if (4 === httpRequest['readyState'] && 200 === httpRequest['status']) {\n                    postMessage(httpRequest.responseText);\n                }\n            };\n            httpRequest['send'](data.data);\n        }\n\n    }catch (e){console.error(e);}\n};"
            ),
            (n = n.getBlob());
        }
        try {
          this.worker = new Worker(URL.createObjectURL(n));
        } catch (e) {}
      }
    };
    this.reportWorker = function (n, e, f, r) {
      try {
        null != this.worker &&
          (this.worker.postMessage(
            JSON.stringify({
              url: n,
              data: e,
              success: !1,
              async: !1,
            })
          ),
          (this.worker.onmessage = function (k) {}));
      } catch (k) {}
    };
  })();
  
  function td_collect_exe() {
    _fingerprint_step = 8;
    var t = td_collect.collect();
    td_collect.collectSdk();
    var u = "string" === typeof orderId ? orderId : "",
      v = "undefined" !== typeof jdfp_pinenp_ext && jdfp_pinenp_ext ? 2 : 1;
    u = {
      pin: _jdJrTdCommonsObtainPin(v),
      oid: u,
      p: "https:" == document.location.protocol ? "s" : "h",
      fp: risk_jd_local_fingerprint,
      ctype: v,
      v: "2.7.10.4",
      f: "3",
    };
    try {
      (u.o = _CurrentPageUrl), (u.qs = _url_query_str);
    } catch (w) {}
    _fingerprint_step = 9;
    0 >= _JdEid.length &&
      ((_JdEid = td_collect.obtainLocal()), 0 < _JdEid.length && (_eidFlag = !0));
    u.fc = _JdEid;
    try {
      u.t = jd_risk_token_id;
    } catch (w) {}
    try {
      if ("undefined" != typeof gia_fp_qd_uuid && 0 <= gia_fp_qd_uuid.length)
        u.qi = gia_fp_qd_uuid;
      else {
        var x = _JdJrRiskClientStorage.jdtdstorage_cookie("qd_uid");
        u.qi = void 0 == x ? "" : x;
      }
    } catch (w) {}
    "undefined" != typeof jd_shadow__ &&
      0 < jd_shadow__.length &&
      (u.jtb = jd_shadow__);
    try {
      td_collect.deviceInfo &&
      void 0 != td_collect.deviceInfo &&
      null != td_collect.deviceInfo.sdkToken &&
      "" != td_collect.deviceInfo.sdkToken
        ? ((u.stk = td_collect.deviceInfo.sdkToken), (td_collect.isRpTok = !0))
        : (td_collect.isRpTok = !1);
    } catch (w) {
      td_collect.isRpTok = !1;
    }
    x = td_collect.tdencrypt(u);
    // console.log(u)
    return { a: x, d: t };
  }
  
  function _jdJrTdCommonsObtainPin(t) {
    var u = "";
    "string" === typeof jd_jr_td_risk_pin && 1 == t
      ? (u = jd_jr_td_risk_pin)
      : "string" === typeof pin
      ? (u = pin)
      : "object" === typeof pin &&
        "string" === typeof jd_jr_td_risk_pin &&
        (u = jd_jr_td_risk_pin);
    return u;
  }
  
  function getBody(userAgent, url = document.location.href) {
    navigator.userAgent = userAgent;
    let href = url;
    let choose = /((https?:)\/\/([^\/]+))(.+)/.exec(url);
    let [, origin, protocol, host, pathname] = choose;
    document.location.href = href;
    document.location.origin = origin;
    document.location.protocol = protocol;
    document.location.host = host;
    document.location.pathname = pathname;
    const JF = new JdJrTdRiskFinger();
    let fp = JF.f.get(function (t) {
      risk_jd_local_fingerprint = t;
      return t;
    });
    let arr = td_collect_exe();
    return { fp, ...arr };
  }
  
  function Env(t, e) {
    "undefined" != typeof process &&
      JSON.stringify(process.env).indexOf("GITHUB") > -1 &&
      process.exit(0);
  
    class s {
      constructor(t) {
        this.env = t;
      }
  
      send(t, e = "GET") {
        t = "string" == typeof t ? { url: t } : t;
        let s = this.get;
        return (
          "POST" === e && (s = this.post),
          new Promise((e, i) => {
            s.call(this, t, (t, s, r) => {
              t ? i(t) : e(s);
            });
          })
        );
      }
  
      get(t) {
        return this.send.call(this.env, t);
      }
  
      post(t) {
        return this.send.call(this.env, t, "POST");
      }
    }
  
    return new (class {
      constructor(t, e) {
        (this.name = t),
          (this.http = new s(this)),
          (this.data = null),
          (this.dataFile = "box.dat"),
          (this.logs = []),
          (this.isMute = !1),
          (this.isNeedRewrite = !1),
          (this.logSeparator = "\n"),
          (this.startTime = new Date().getTime()),
          Object.assign(this, e),
          this.log("", `🔔${this.name}, 开始!`);
      }
  
      isNode() {
        return "undefined" != typeof module && !!module.exports;
      }
  
      isQuanX() {
        return "undefined" != typeof $task;
      }
  
      isSurge() {
        return "undefined" != typeof $httpClient && "undefined" == typeof $loon;
      }
  
      isLoon() {
        return "undefined" != typeof $loon;
      }
  
      toObj(t, e = null) {
        try {
          return JSON.parse(t);
        } catch {
          return e;
        }
      }
  
      toStr(t, e = null) {
        try {
          return JSON.stringify(t);
        } catch {
          return e;
        }
      }
  
      getjson(t, e) {
        let s = e;
        const i = this.getdata(t);
        if (i)
          try {
            s = JSON.parse(this.getdata(t));
          } catch {}
        return s;
      }
  
      setjson(t, e) {
        try {
          return this.setdata(JSON.stringify(t), e);
        } catch {
          return !1;
        }
      }
  
      getScript(t) {
        return new Promise((e) => {
          this.get({ url: t }, (t, s, i) => e(i));
        });
      }
  
      runScript(t, e) {
        return new Promise((s) => {
          let i = this.getdata("@chavy_boxjs_userCfgs.httpapi");
          i = i ? i.replace(/\n/g, "").trim() : i;
          let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");
          (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r);
          const [o, h] = i.split("@"),
            n = {
              url: `http://${h}/v1/scripting/evaluate`,
              body: { script_text: t, mock_type: "cron", timeout: r },
              headers: { "X-Key": o, Accept: "*/*" },
            };
          this.post(n, (t, e, i) => s(i));
        }).catch((t) => this.logErr(t));
      }
  
      loaddata() {
        if (!this.isNode()) return {};
        {
          (this.fs = this.fs ? this.fs : require("fs")),
            (this.path = this.path ? this.path : require("path"));
          const t = this.path.resolve(this.dataFile),
            e = this.path.resolve(process.cwd(), this.dataFile),
            s = this.fs.existsSync(t),
            i = !s && this.fs.existsSync(e);
          if (!s && !i) return {};
          {
            const i = s ? t : e;
            try {
              return JSON.parse(this.fs.readFileSync(i));
            } catch (t) {
              return {};
            }
          }
        }
      }
  
      writedata() {
        if (this.isNode()) {
          (this.fs = this.fs ? this.fs : require("fs")),
            (this.path = this.path ? this.path : require("path"));
          const t = this.path.resolve(this.dataFile),
            e = this.path.resolve(process.cwd(), this.dataFile),
            s = this.fs.existsSync(t),
            i = !s && this.fs.existsSync(e),
            r = JSON.stringify(this.data);
          s
            ? this.fs.writeFileSync(t, r)
            : i
            ? this.fs.writeFileSync(e, r)
            : this.fs.writeFileSync(t, r);
        }
      }
  
      lodash_get(t, e, s) {
        const i = e.replace(/\[(\d+)\]/g, ".$1").split(".");
        let r = t;
        for (const t of i) if (((r = Object(r)[t]), void 0 === r)) return s;
        return r;
      }
  
      lodash_set(t, e, s) {
        return Object(t) !== t
          ? t
          : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []),
            (e
              .slice(0, -1)
              .reduce(
                (t, s, i) =>
                  Object(t[s]) === t[s]
                    ? t[s]
                    : (t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}),
                t
              )[e[e.length - 1]] = s),
            t);
      }
  
      getdata(t) {
        let e = this.getval(t);
        if (/^@/.test(t)) {
          const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t),
            r = s ? this.getval(s) : "";
          if (r)
            try {
              const t = JSON.parse(r);
              e = t ? this.lodash_get(t, i, "") : e;
            } catch (t) {
              e = "";
            }
        }
        return e;
      }
  
      setdata(t, e) {
        let s = !1;
        if (/^@/.test(e)) {
          const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e),
            o = this.getval(i),
            h = i ? ("null" === o ? null : o || "{}") : "{}";
          try {
            const e = JSON.parse(h);
            this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), i));
          } catch (e) {
            const o = {};
            this.lodash_set(o, r, t), (s = this.setval(JSON.stringify(o), i));
          }
        } else s = this.setval(t, e);
        return s;
      }
  
      getval(t) {
        return this.isSurge() || this.isLoon()
          ? $persistentStore.read(t)
          : this.isQuanX()
          ? $prefs.valueForKey(t)
          : this.isNode()
          ? ((this.data = this.loaddata()), this.data[t])
          : (this.data && this.data[t]) || null;
      }
  
      setval(t, e) {
        return this.isSurge() || this.isLoon()
          ? $persistentStore.write(t, e)
          : this.isQuanX()
          ? $prefs.setValueForKey(t, e)
          : this.isNode()
          ? ((this.data = this.loaddata()),
            (this.data[e] = t),
            this.writedata(),
            !0)
          : (this.data && this.data[e]) || null;
      }
  
      initGotEnv(t) {
        (this.got = this.got ? this.got : require("got")),
          (this.cktough = this.cktough ? this.cktough : require("tough-cookie")),
          (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()),
          t &&
            ((t.headers = t.headers ? t.headers : {}),
            void 0 === t.headers.Cookie &&
              void 0 === t.cookieJar &&
              (t.cookieJar = this.ckjar));
      }
  
      get(t, e = () => {}) {
        t.headers &&
          (delete t.headers["Content-Type"], delete t.headers["Content-Length"]),
          this.isSurge() || this.isLoon()
            ? (this.isSurge() &&
                this.isNeedRewrite &&
                ((t.headers = t.headers || {}),
                Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })),
              $httpClient.get(t, (t, s, i) => {
                !t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i);
              }))
            : this.isQuanX()
            ? (this.isNeedRewrite &&
                ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })),
              $task.fetch(t).then(
                (t) => {
                  const { statusCode: s, statusCode: i, headers: r, body: o } = t;
                  e(null, { status: s, statusCode: i, headers: r, body: o }, o);
                },
                (t) => e(t)
              ))
            : this.isNode() &&
              (this.initGotEnv(t),
              this.got(t)
                .on("redirect", (t, e) => {
                  try {
                    if (t.headers["set-cookie"]) {
                      const s = t.headers["set-cookie"]
                        .map(this.cktough.Cookie.parse)
                        .toString();
                      s && this.ckjar.setCookieSync(s, null),
                        (e.cookieJar = this.ckjar);
                    }
                  } catch (t) {
                    this.logErr(t);
                  }
                })
                .then(
                  (t) => {
                    const {
                      statusCode: s,
                      statusCode: i,
                      headers: r,
                      body: o,
                    } = t;
                    e(null, { status: s, statusCode: i, headers: r, body: o }, o);
                  },
                  (t) => {
                    const { message: s, response: i } = t;
                    e(s, i, i && i.body);
                  }
                ));
      }
  
      post(t, e = () => {}) {
        if (
          (t.body &&
            t.headers &&
            !t.headers["Content-Type"] &&
            (t.headers["Content-Type"] = "application/x-www-form-urlencoded"),
          t.headers && delete t.headers["Content-Length"],
          this.isSurge() || this.isLoon())
        )
          this.isSurge() &&
            this.isNeedRewrite &&
            ((t.headers = t.headers || {}),
            Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })),
            $httpClient.post(t, (t, s, i) => {
              !t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i);
            });
        else if (this.isQuanX())
          (t.method = "POST"),
            this.isNeedRewrite &&
              ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })),
            $task.fetch(t).then(
              (t) => {
                const { statusCode: s, statusCode: i, headers: r, body: o } = t;
                e(null, { status: s, statusCode: i, headers: r, body: o }, o);
              },
              (t) => e(t)
            );
        else if (this.isNode()) {
          this.initGotEnv(t);
          const { url: s, ...i } = t;
          this.got.post(s, i).then(
            (t) => {
              const { statusCode: s, statusCode: i, headers: r, body: o } = t;
              e(null, { status: s, statusCode: i, headers: r, body: o }, o);
            },
            (t) => {
              const { message: s, response: i } = t;
              e(s, i, i && i.body);
            }
          );
        }
      }
  
      time(t, e = null) {
        const s = e ? new Date(e) : new Date();
        let i = {
          "M+": s.getMonth() + 1,
          "d+": s.getDate(),
          "H+": s.getHours(),
          "m+": s.getMinutes(),
          "s+": s.getSeconds(),
          "q+": Math.floor((s.getMonth() + 3) / 3),
          S: s.getMilliseconds(),
        };
        /(y+)/.test(t) &&
          (t = t.replace(
            RegExp.$1,
            (s.getFullYear() + "").substr(4 - RegExp.$1.length)
          ));
        for (let e in i)
          new RegExp("(" + e + ")").test(t) &&
            (t = t.replace(
              RegExp.$1,
              1 == RegExp.$1.length
                ? i[e]
                : ("00" + i[e]).substr(("" + i[e]).length)
            ));
        return t;
      }
  
      msg(e = t, s = "", i = "", r) {
        const o = (t) => {
          if (!t) return t;
          if ("string" == typeof t)
            return this.isLoon()
              ? t
              : this.isQuanX()
              ? { "open-url": t }
              : this.isSurge()
              ? { url: t }
              : void 0;
          if ("object" == typeof t) {
            if (this.isLoon()) {
              let e = t.openUrl || t.url || t["open-url"],
                s = t.mediaUrl || t["media-url"];
              return { openUrl: e, mediaUrl: s };
            }
            if (this.isQuanX()) {
              let e = t["open-url"] || t.url || t.openUrl,
                s = t["media-url"] || t.mediaUrl;
              return { "open-url": e, "media-url": s };
            }
            if (this.isSurge()) {
              let e = t.url || t.openUrl || t["open-url"];
              return { url: e };
            }
          }
        };
        if (
          (this.isMute ||
            (this.isSurge() || this.isLoon()
              ? $notification.post(e, s, i, o(r))
              : this.isQuanX() && $notify(e, s, i, o(r))),
          !this.isMuteLog)
        ) {
          let t = ["", "==============📣系统通知📣=============="];
          t.push(e),
            s && t.push(s),
            i && t.push(i),
            console.log(t.join("\n")),
            (this.logs = this.logs.concat(t));
        }
      }
  
      log(...t) {
        t.length > 0 && (this.logs = [...this.logs, ...t]),
          console.log(t.join(this.logSeparator));
      }
  
      logErr(t, e) {
        const s = !this.isSurge() && !this.isQuanX() && !this.isLoon();
        s
          ? this.log("", `❗️${this.name}, 错误!`, t.stack)
          : this.log("", `❗️${this.name}, 错误!`, t);
      }
  
      wait(t) {
        return new Promise((e) => setTimeout(e, t));
      }
  
      done(t = {}) {
        const e = new Date().getTime(),
          s = (e - this.startTime) / 1e3;
        this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`),
          this.log(),
          (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t);
      }
    })(t, e);
  }
  function random(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
  }