{"version":3,"file":"jspredict-dc.esm.mjs","sources":["../src/runtime.js","../node_modules/satellite.js/dist/satellite.es.js","../src/utils.js","../src/constants.js","../src/core.js","../src/index.js?commonjs-entry","../src/index.js"],"sourcesContent":["// 这里保存的是库级别的可变运行时状态，只用于控制迭代次数和调试日志。\r\nmodule.exports = {\r\n  printIntervalInfo: false,\r\n  maxIterations: 99999,\r\n};\r\n","var pi = Math.PI;\nvar twoPi = pi * 2;\nvar deg2rad = pi / 180.0;\nvar rad2deg = 180 / pi;\nvar minutesPerDay = 1440.0;\nvar mu = 398600.8; // in km3 / s2\nvar earthRadius = 6378.135; // in km\nvar xke = 60.0 / Math.sqrt(earthRadius * earthRadius * earthRadius / mu);\nvar vkmpersec = earthRadius * xke / 60.0;\nvar tumin = 1.0 / xke;\nvar j2 = 0.001082616;\nvar j3 = -0.00000253881;\nvar j4 = -0.00000165597;\nvar j3oj2 = j3 / j2;\nvar x2o3 = 2.0 / 3.0;\nvar xpdotp = 1440.0 / (2.0 * pi); // 229.1831180523293;\n\nvar constants = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    deg2rad: deg2rad,\n    earthRadius: earthRadius,\n    j2: j2,\n    j3: j3,\n    j3oj2: j3oj2,\n    j4: j4,\n    minutesPerDay: minutesPerDay,\n    mu: mu,\n    pi: pi,\n    rad2deg: rad2deg,\n    tumin: tumin,\n    twoPi: twoPi,\n    vkmpersec: vkmpersec,\n    x2o3: x2o3,\n    xke: xke,\n    xpdotp: xpdotp\n});\n\n/* -----------------------------------------------------------------------------\n *\n *                           procedure days2mdhms\n *\n *  this procedure converts the day of the year, days, to the equivalent month\n *    day, hour, minute and second.\n *\n *  algorithm     : set up array for the number of days per month\n *                  find leap year - use 1900 because 2000 is a leap year\n *                  loop through a temp value while the value is < the days\n *                  perform int conversions to the correct day and month\n *                  convert remainder into h m s using type conversions\n *\n *  author        : david vallado                  719-573-2600    1 mar 2001\n *\n *  inputs          description                    range / units\n *    year        - year                           1900 .. 2100\n *    days        - julian day of the year         0.0  .. 366.0\n *\n *  outputs       :\n *    mon         - month                          1 .. 12\n *    day         - day                            1 .. 28,29,30,31\n *    hr          - hour                           0 .. 23\n *    min         - minute                         0 .. 59\n *    sec         - second                         0.0 .. 59.999\n *\n *  locals        :\n *    dayofyr     - day of year\n *    temp        - temporary extended values\n *    inttemp     - temporary int value\n *    i           - index\n *    lmonth[12]  - int array containing the number of days per month\n *\n *  coupling      :\n *    none.\n * --------------------------------------------------------------------------- */\nfunction days2mdhms(year, days) {\n  var lmonth = [31, year % 4 === 0 ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n  var dayofyr = Math.floor(days);\n  //  ----------------- find month and day of month ----------------\n  var i = 1;\n  var inttemp = 0;\n  // i starts from 1 so no null check is needed\n  while (dayofyr > inttemp + lmonth[i - 1] && i < 12) {\n    inttemp += lmonth[i - 1];\n    i += 1;\n  }\n  var mon = i;\n  var day = dayofyr - inttemp;\n  //  ----------------- find hours minutes and seconds -------------\n  var temp = (days - dayofyr) * 24.0;\n  var hr = Math.floor(temp);\n  temp = (temp - hr) * 60.0;\n  var minute = Math.floor(temp);\n  var sec = (temp - minute) * 60.0;\n  return {\n    mon: mon,\n    day: day,\n    hr: hr,\n    minute: minute,\n    sec: sec\n  };\n}\n/* -----------------------------------------------------------------------------\n *\n *                           procedure jday\n *\n *  this procedure finds the julian date given the year, month, day, and time.\n *    the julian date is defined by each elapsed day since noon, jan 1, 4713 bc.\n *\n *  algorithm     : calculate the answer in one step for efficiency\n *\n *  author        : david vallado                  719-573-2600    1 mar 2001\n *\n *  inputs          description                    range / units\n *    year        - year                           1900 .. 2100\n *    mon         - month                          1 .. 12\n *    day         - day                            1 .. 28,29,30,31\n *    hr          - universal time hour            0 .. 23\n *    min         - universal time min             0 .. 59\n *    sec         - universal time sec             0.0 .. 59.999\n *\n *  outputs       :\n *    jd          - julian date                    days from 4713 bc\n *\n *  locals        :\n *    none.\n *\n *  coupling      :\n *    none.\n *\n *  references    :\n *    vallado       2007, 189, alg 14, ex 3-14\n *\n * --------------------------------------------------------------------------- */\nfunction jdayInternal(year, mon, day, hr, minute, sec) {\n  var msec = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n  return 367.0 * year - Math.floor(7 * (year + Math.floor((mon + 9) / 12.0)) * 0.25) + Math.floor(275 * mon / 9.0) + day + 1721013.5 + ((msec / 60000 + sec / 60.0 + minute) / 60.0 + hr) / 24.0 // ut in days\n  // # - 0.5*sgn(100.0*year + mon - 190002.5) + 0.5;\n  ;\n}\nfunction jday(yearOrDate, mon, day, hr, minute, sec) {\n  var msec = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n  if (yearOrDate instanceof Date) {\n    var date = yearOrDate;\n    return jdayInternal(date.getUTCFullYear(), date.getUTCMonth() + 1,\n    // Note, this function requires months in range 1-12.\n    date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n  }\n  return jdayInternal(yearOrDate, mon, day, hr, minute, sec, msec);\n}\nfunction invjday(jd, asArray) {\n  // --------------- find year and days of the year -\n  var temp = jd - 2415019.5;\n  var tu = temp / 365.25;\n  var year = 1900 + Math.floor(tu);\n  var leapyrs = Math.floor((year - 1901) * 0.25);\n  // optional nudge by 8.64x10-7 sec to get even outputs\n  var days = temp - ((year - 1900) * 365.0 + leapyrs) + 0.00000000001;\n  // ------------ check for case of beginning of a year -----------\n  if (days < 1.0) {\n    year -= 1;\n    leapyrs = Math.floor((year - 1901) * 0.25);\n    days = temp - ((year - 1900) * 365.0 + leapyrs);\n  }\n  // ----------------- find remaing data  -------------------------\n  var mdhms = days2mdhms(year, days);\n  var mon = mdhms.mon,\n    day = mdhms.day,\n    hr = mdhms.hr,\n    minute = mdhms.minute;\n  var sec = mdhms.sec - 0.00000086400;\n  if (asArray) {\n    return [year, mon, day, hr, minute, Math.floor(sec)];\n  }\n  return new Date(Date.UTC(year, mon - 1, day, hr, minute, Math.floor(sec)));\n}\n\n/* -----------------------------------------------------------------------------\n *\n *                           procedure dpper\n *\n *  this procedure provides deep space long period periodic contributions\n *    to the mean elements.  by design, these periodics are zero at epoch.\n *    this used to be dscom which included initialization, but it's really a\n *    recurring function.\n *\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *\n *  inputs        :\n *    e3          -\n *    ee2         -\n *    peo         -\n *    pgho        -\n *    pho         -\n *    pinco       -\n *    plo         -\n *    se2 , se3 , sgh2, sgh3, sgh4, sh2, sh3, si2, si3, sl2, sl3, sl4 -\n *    t           -\n *    xh2, xh3, xi2, xi3, xl2, xl3, xl4 -\n *    zmol        -\n *    zmos        -\n *    ep          - eccentricity                           0.0 - 1.0\n *    inclo       - inclination - needed for lyddane modification\n *    nodep       - right ascension of ascending node\n *    argpp       - argument of perigee\n *    mp          - mean anomaly\n *\n *  outputs       :\n *    ep          - eccentricity                           0.0 - 1.0\n *    inclp       - inclination\n *    nodep        - right ascension of ascending node\n *    argpp       - argument of perigee\n *    mp          - mean anomaly\n *\n *  locals        :\n *    alfdp       -\n *    betdp       -\n *    cosip  , sinip  , cosop  , sinop  ,\n *    dalf        -\n *    dbet        -\n *    dls         -\n *    f2, f3      -\n *    pe          -\n *    pgh         -\n *    ph          -\n *    pinc        -\n *    pl          -\n *    sel   , ses   , sghl  , sghs  , shl   , shs   , sil   , sinzf , sis   ,\n *    sll   , sls\n *    xls         -\n *    xnoh        -\n *    zf          -\n *    zm          -\n *\n *  coupling      :\n *    none.\n *\n *  references    :\n *    hoots, roehrich, norad spacetrack report #3 1980\n *    hoots, norad spacetrack report #6 1986\n *    hoots, schumacher and glover 2004\n *    vallado, crawford, hujsak, kelso  2006\n ----------------------------------------------------------------------------*/\nfunction dpper(satrec, options) {\n  var e3 = satrec.e3,\n    ee2 = satrec.ee2,\n    peo = satrec.peo,\n    pgho = satrec.pgho,\n    pho = satrec.pho,\n    pinco = satrec.pinco,\n    plo = satrec.plo,\n    se2 = satrec.se2,\n    se3 = satrec.se3,\n    sgh2 = satrec.sgh2,\n    sgh3 = satrec.sgh3,\n    sgh4 = satrec.sgh4,\n    sh2 = satrec.sh2,\n    sh3 = satrec.sh3,\n    si2 = satrec.si2,\n    si3 = satrec.si3,\n    sl2 = satrec.sl2,\n    sl3 = satrec.sl3,\n    sl4 = satrec.sl4,\n    t = satrec.t,\n    xgh2 = satrec.xgh2,\n    xgh3 = satrec.xgh3,\n    xgh4 = satrec.xgh4,\n    xh2 = satrec.xh2,\n    xh3 = satrec.xh3,\n    xi2 = satrec.xi2,\n    xi3 = satrec.xi3,\n    xl2 = satrec.xl2,\n    xl3 = satrec.xl3,\n    xl4 = satrec.xl4,\n    zmol = satrec.zmol,\n    zmos = satrec.zmos;\n  var init = options.init,\n    opsmode = options.opsmode;\n  var ep = options.ep,\n    inclp = options.inclp,\n    nodep = options.nodep,\n    argpp = options.argpp,\n    mp = options.mp;\n  // Copy satellite attributes into local variables for convenience\n  // and symmetry in writing formulae.\n  var alfdp;\n  var betdp;\n  var cosip;\n  var sinip;\n  var cosop;\n  var sinop;\n  var dalf;\n  var dbet;\n  var dls;\n  var f2;\n  var f3;\n  var pe;\n  var pgh;\n  var ph;\n  var pinc;\n  var pl;\n  var sinzf;\n  var xls;\n  var xnoh;\n  var zf;\n  var zm;\n  //  ---------------------- constants -----------------------------\n  var zns = 1.19459e-5;\n  var zes = 0.01675;\n  var znl = 1.5835218e-4;\n  var zel = 0.05490;\n  //  --------------- calculate time varying periodics -----------\n  zm = zmos + zns * t;\n  // be sure that the initial call has time set to zero\n  if (init === 'y') {\n    zm = zmos;\n  }\n  zf = zm + 2.0 * zes * Math.sin(zm);\n  sinzf = Math.sin(zf);\n  f2 = 0.5 * sinzf * sinzf - 0.25;\n  f3 = -0.5 * sinzf * Math.cos(zf);\n  var ses = se2 * f2 + se3 * f3;\n  var sis = si2 * f2 + si3 * f3;\n  var sls = sl2 * f2 + sl3 * f3 + sl4 * sinzf;\n  var sghs = sgh2 * f2 + sgh3 * f3 + sgh4 * sinzf;\n  var shs = sh2 * f2 + sh3 * f3;\n  zm = zmol + znl * t;\n  if (init === 'y') {\n    zm = zmol;\n  }\n  zf = zm + 2.0 * zel * Math.sin(zm);\n  sinzf = Math.sin(zf);\n  f2 = 0.5 * sinzf * sinzf - 0.25;\n  f3 = -0.5 * sinzf * Math.cos(zf);\n  var sel = ee2 * f2 + e3 * f3;\n  var sil = xi2 * f2 + xi3 * f3;\n  var sll = xl2 * f2 + xl3 * f3 + xl4 * sinzf;\n  var sghl = xgh2 * f2 + xgh3 * f3 + xgh4 * sinzf;\n  var shll = xh2 * f2 + xh3 * f3;\n  pe = ses + sel;\n  pinc = sis + sil;\n  pl = sls + sll;\n  pgh = sghs + sghl;\n  ph = shs + shll;\n  if (init === 'n') {\n    pe -= peo;\n    pinc -= pinco;\n    pl -= plo;\n    pgh -= pgho;\n    ph -= pho;\n    inclp += pinc;\n    ep += pe;\n    sinip = Math.sin(inclp);\n    cosip = Math.cos(inclp);\n    /* ----------------- apply periodics directly ------------ */\n    // sgp4fix for lyddane choice\n    // strn3 used original inclination - this is technically feasible\n    // gsfc used perturbed inclination - also technically feasible\n    // probably best to readjust the 0.2 limit value and limit discontinuity\n    // 0.2 rad = 11.45916 deg\n    // use next line for original strn3 approach and original inclination\n    // if (inclo >= 0.2)\n    // use next line for gsfc version and perturbed inclination\n    if (inclp >= 0.2) {\n      ph /= sinip;\n      pgh -= cosip * ph;\n      argpp += pgh;\n      nodep += ph;\n      mp += pl;\n    } else {\n      //  ---- apply periodics with lyddane modification ----\n      sinop = Math.sin(nodep);\n      cosop = Math.cos(nodep);\n      alfdp = sinip * sinop;\n      betdp = sinip * cosop;\n      dalf = ph * cosop + pinc * cosip * sinop;\n      dbet = -ph * sinop + pinc * cosip * cosop;\n      alfdp += dalf;\n      betdp += dbet;\n      nodep %= twoPi;\n      //  sgp4fix for afspc written intrinsic functions\n      //  nodep used without a trigonometric function ahead\n      if (nodep < 0.0 && opsmode === 'a') {\n        nodep += twoPi;\n      }\n      xls = mp + argpp + cosip * nodep;\n      dls = pl + pgh - pinc * nodep * sinip;\n      xls += dls;\n      xnoh = nodep;\n      nodep = Math.atan2(alfdp, betdp);\n      //  sgp4fix for afspc written intrinsic functions\n      //  nodep used without a trigonometric function ahead\n      if (nodep < 0.0 && opsmode === 'a') {\n        nodep += twoPi;\n      }\n      if (Math.abs(xnoh - nodep) > pi) {\n        if (nodep < xnoh) {\n          nodep += twoPi;\n        } else {\n          nodep -= twoPi;\n        }\n      }\n      mp += pl;\n      argpp = xls - mp - cosip * nodep;\n    }\n  }\n  return {\n    ep: ep,\n    inclp: inclp,\n    nodep: nodep,\n    argpp: argpp,\n    mp: mp\n  };\n}\n\n/*-----------------------------------------------------------------------------\n *\n *                           procedure dscom\n *\n *  this procedure provides deep space common items used by both the secular\n *    and periodics subroutines.  input is provided as shown. this routine\n *    used to be called dpper, but the functions inside weren't well organized.\n *\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *\n *  inputs        :\n *    epoch       -\n *    ep          - eccentricity\n *    argpp       - argument of perigee\n *    tc          -\n *    inclp       - inclination\n *    nodep       - right ascension of ascending node\n *    np          - mean motion\n *\n *  outputs       :\n *    sinim  , cosim  , sinomm , cosomm , snodm  , cnodm\n *    day         -\n *    e3          -\n *    ee2         -\n *    em          - eccentricity\n *    emsq        - eccentricity squared\n *    gam         -\n *    peo         -\n *    pgho        -\n *    pho         -\n *    pinco       -\n *    plo         -\n *    rtemsq      -\n *    se2, se3         -\n *    sgh2, sgh3, sgh4        -\n *    sh2, sh3, si2, si3, sl2, sl3, sl4         -\n *    s1, s2, s3, s4, s5, s6, s7          -\n *    ss1, ss2, ss3, ss4, ss5, ss6, ss7, sz1, sz2, sz3         -\n *    sz11, sz12, sz13, sz21, sz22, sz23, sz31, sz32, sz33        -\n *    xgh2, xgh3, xgh4, xh2, xh3, xi2, xi3, xl2, xl3, xl4         -\n *    nm          - mean motion\n *    z1, z2, z3, z11, z12, z13, z21, z22, z23, z31, z32, z33         -\n *    zmol        -\n *    zmos        -\n *\n *  locals        :\n *    a1, a2, a3, a4, a5, a6, a7, a8, a9, a10         -\n *    betasq      -\n *    cc          -\n *    ctem, stem        -\n *    x1, x2, x3, x4, x5, x6, x7, x8          -\n *    xnodce      -\n *    xnoi        -\n *    zcosg  , zsing  , zcosgl , zsingl , zcosh  , zsinh  , zcoshl , zsinhl ,\n *    zcosi  , zsini  , zcosil , zsinil ,\n *    zx          -\n *    zy          -\n *\n *  coupling      :\n *    none.\n *\n *  references    :\n *    hoots, roehrich, norad spacetrack report #3 1980\n *    hoots, norad spacetrack report #6 1986\n *    hoots, schumacher and glover 2004\n *    vallado, crawford, hujsak, kelso  2006\n ----------------------------------------------------------------------------*/\nfunction dscom(options) {\n  var epoch = options.epoch,\n    ep = options.ep,\n    argpp = options.argpp,\n    tc = options.tc,\n    inclp = options.inclp,\n    nodep = options.nodep,\n    np = options.np;\n  var a1;\n  var a2;\n  var a3;\n  var a4;\n  var a5;\n  var a6;\n  var a7;\n  var a8;\n  var a9;\n  var a10;\n  var cc;\n  var x1;\n  var x2;\n  var x3;\n  var x4;\n  var x5;\n  var x6;\n  var x7;\n  var x8;\n  var zcosg;\n  var zsing;\n  var zcosh;\n  var zsinh;\n  var zcosi;\n  var zsini;\n  var ss1;\n  var ss2;\n  var ss3;\n  var ss4;\n  var ss5;\n  var ss6;\n  var ss7;\n  var sz1;\n  var sz2;\n  var sz3;\n  var sz11;\n  var sz12;\n  var sz13;\n  var sz21;\n  var sz22;\n  var sz23;\n  var sz31;\n  var sz32;\n  var sz33;\n  var s1;\n  var s2;\n  var s3;\n  var s4;\n  var s5;\n  var s6;\n  var s7;\n  var z1;\n  var z2;\n  var z3;\n  var z11;\n  var z12;\n  var z13;\n  var z21;\n  var z22;\n  var z23;\n  var z31;\n  var z32;\n  var z33;\n  // -------------------------- constants -------------------------\n  var zes = 0.01675;\n  var zel = 0.05490;\n  var c1ss = 2.9864797e-6;\n  var c1l = 4.7968065e-7;\n  var zsinis = 0.39785416;\n  var zcosis = 0.91744867;\n  var zcosgs = 0.1945905;\n  var zsings = -0.98088458;\n  //  --------------------- local variables ------------------------\n  var nm = np;\n  var em = ep;\n  var snodm = Math.sin(nodep);\n  var cnodm = Math.cos(nodep);\n  var sinomm = Math.sin(argpp);\n  var cosomm = Math.cos(argpp);\n  var sinim = Math.sin(inclp);\n  var cosim = Math.cos(inclp);\n  var emsq = em * em;\n  var betasq = 1.0 - emsq;\n  var rtemsq = Math.sqrt(betasq);\n  //  ----------------- initialize lunar solar terms ---------------\n  var peo = 0.0;\n  var pinco = 0.0;\n  var plo = 0.0;\n  var pgho = 0.0;\n  var pho = 0.0;\n  var day = epoch + 18261.5 + tc / 1440.0;\n  var xnodce = (4.5236020 - 9.2422029e-4 * day) % twoPi;\n  var stem = Math.sin(xnodce);\n  var ctem = Math.cos(xnodce);\n  var zcosil = 0.91375164 - 0.03568096 * ctem;\n  var zsinil = Math.sqrt(1.0 - zcosil * zcosil);\n  var zsinhl = 0.089683511 * stem / zsinil;\n  var zcoshl = Math.sqrt(1.0 - zsinhl * zsinhl);\n  var gam = 5.8351514 + 0.0019443680 * day;\n  var zx = 0.39785416 * stem / zsinil;\n  var zy = zcoshl * ctem + 0.91744867 * zsinhl * stem;\n  zx = Math.atan2(zx, zy);\n  zx += gam - xnodce;\n  var zcosgl = Math.cos(zx);\n  var zsingl = Math.sin(zx);\n  //  ------------------------- do solar terms ---------------------\n  zcosg = zcosgs;\n  zsing = zsings;\n  zcosi = zcosis;\n  zsini = zsinis;\n  zcosh = cnodm;\n  zsinh = snodm;\n  cc = c1ss;\n  var xnoi = 1.0 / nm;\n  var lsflg = 0;\n  while (lsflg < 2) {\n    lsflg += 1;\n    a1 = zcosg * zcosh + zsing * zcosi * zsinh;\n    a3 = -zsing * zcosh + zcosg * zcosi * zsinh;\n    a7 = -zcosg * zsinh + zsing * zcosi * zcosh;\n    a8 = zsing * zsini;\n    a9 = zsing * zsinh + zcosg * zcosi * zcosh;\n    a10 = zcosg * zsini;\n    a2 = cosim * a7 + sinim * a8;\n    a4 = cosim * a9 + sinim * a10;\n    a5 = -sinim * a7 + cosim * a8;\n    a6 = -sinim * a9 + cosim * a10;\n    x1 = a1 * cosomm + a2 * sinomm;\n    x2 = a3 * cosomm + a4 * sinomm;\n    x3 = -a1 * sinomm + a2 * cosomm;\n    x4 = -a3 * sinomm + a4 * cosomm;\n    x5 = a5 * sinomm;\n    x6 = a6 * sinomm;\n    x7 = a5 * cosomm;\n    x8 = a6 * cosomm;\n    z31 = 12.0 * x1 * x1 - 3.0 * x3 * x3;\n    z32 = 24.0 * x1 * x2 - 6.0 * x3 * x4;\n    z33 = 12.0 * x2 * x2 - 3.0 * x4 * x4;\n    z1 = 3.0 * (a1 * a1 + a2 * a2) + z31 * emsq;\n    z2 = 6.0 * (a1 * a3 + a2 * a4) + z32 * emsq;\n    z3 = 3.0 * (a3 * a3 + a4 * a4) + z33 * emsq;\n    z11 = -6.0 * a1 * a5 + emsq * (-24.0 * x1 * x7 - 6.0 * x3 * x5);\n    z12 = -6.0 * (a1 * a6 + a3 * a5) + emsq * (-24.0 * (x2 * x7 + x1 * x8) + -6.0 * (x3 * x6 + x4 * x5));\n    z13 = -6.0 * a3 * a6 + emsq * (-24.0 * x2 * x8 - 6.0 * x4 * x6);\n    z21 = 6.0 * a2 * a5 + emsq * (24.0 * x1 * x5 - 6.0 * x3 * x7);\n    z22 = 6.0 * (a4 * a5 + a2 * a6) + emsq * (24.0 * (x2 * x5 + x1 * x6) - 6.0 * (x4 * x7 + x3 * x8));\n    z23 = 6.0 * a4 * a6 + emsq * (24.0 * x2 * x6 - 6.0 * x4 * x8);\n    z1 = z1 + z1 + betasq * z31;\n    z2 = z2 + z2 + betasq * z32;\n    z3 = z3 + z3 + betasq * z33;\n    s3 = cc * xnoi;\n    s2 = -0.5 * s3 / rtemsq;\n    s4 = s3 * rtemsq;\n    s1 = -15.0 * em * s4;\n    s5 = x1 * x3 + x2 * x4;\n    s6 = x2 * x3 + x1 * x4;\n    s7 = x2 * x4 - x1 * x3;\n    //  ----------------------- do lunar terms -------------------\n    if (lsflg === 1) {\n      ss1 = s1;\n      ss2 = s2;\n      ss3 = s3;\n      ss4 = s4;\n      ss5 = s5;\n      ss6 = s6;\n      ss7 = s7;\n      sz1 = z1;\n      sz2 = z2;\n      sz3 = z3;\n      sz11 = z11;\n      sz12 = z12;\n      sz13 = z13;\n      sz21 = z21;\n      sz22 = z22;\n      sz23 = z23;\n      sz31 = z31;\n      sz32 = z32;\n      sz33 = z33;\n      zcosg = zcosgl;\n      zsing = zsingl;\n      zcosi = zcosil;\n      zsini = zsinil;\n      zcosh = zcoshl * cnodm + zsinhl * snodm;\n      zsinh = snodm * zcoshl - cnodm * zsinhl;\n      cc = c1l;\n    }\n  }\n  var zmol = (4.7199672 + (0.22997150 * day - gam)) % twoPi;\n  var zmos = (6.2565837 + 0.017201977 * day) % twoPi;\n  //  ------------------------ do solar terms ----------------------\n  var se2 = 2.0 * ss1 * ss6;\n  var se3 = 2.0 * ss1 * ss7;\n  var si2 = 2.0 * ss2 * sz12;\n  var si3 = 2.0 * ss2 * (sz13 - sz11);\n  var sl2 = -2.0 * ss3 * sz2;\n  var sl3 = -2.0 * ss3 * (sz3 - sz1);\n  var sl4 = -2.0 * ss3 * (-21.0 - 9.0 * emsq) * zes;\n  var sgh2 = 2.0 * ss4 * sz32;\n  var sgh3 = 2.0 * ss4 * (sz33 - sz31);\n  var sgh4 = -18.0 * ss4 * zes;\n  var sh2 = -2.0 * ss2 * sz22;\n  var sh3 = -2.0 * ss2 * (sz23 - sz21);\n  //  ------------------------ do lunar terms ----------------------\n  var ee2 = 2.0 * s1 * s6;\n  var e3 = 2.0 * s1 * s7;\n  var xi2 = 2.0 * s2 * z12;\n  var xi3 = 2.0 * s2 * (z13 - z11);\n  var xl2 = -2.0 * s3 * z2;\n  var xl3 = -2.0 * s3 * (z3 - z1);\n  var xl4 = -2.0 * s3 * (-21.0 - 9.0 * emsq) * zel;\n  var xgh2 = 2.0 * s4 * z32;\n  var xgh3 = 2.0 * s4 * (z33 - z31);\n  var xgh4 = -18.0 * s4 * zel;\n  var xh2 = -2.0 * s2 * z22;\n  var xh3 = -2.0 * s2 * (z23 - z21);\n  return {\n    snodm: snodm,\n    cnodm: cnodm,\n    sinim: sinim,\n    cosim: cosim,\n    sinomm: sinomm,\n    cosomm: cosomm,\n    day: day,\n    e3: e3,\n    ee2: ee2,\n    em: em,\n    emsq: emsq,\n    gam: gam,\n    peo: peo,\n    pgho: pgho,\n    pho: pho,\n    pinco: pinco,\n    plo: plo,\n    rtemsq: rtemsq,\n    se2: se2,\n    se3: se3,\n    sgh2: sgh2,\n    sgh3: sgh3,\n    sgh4: sgh4,\n    sh2: sh2,\n    sh3: sh3,\n    si2: si2,\n    si3: si3,\n    sl2: sl2,\n    sl3: sl3,\n    sl4: sl4,\n    s1: s1,\n    s2: s2,\n    s3: s3,\n    s4: s4,\n    s5: s5,\n    s6: s6,\n    s7: s7,\n    ss1: ss1,\n    ss2: ss2,\n    ss3: ss3,\n    ss4: ss4,\n    ss5: ss5,\n    ss6: ss6,\n    ss7: ss7,\n    sz1: sz1,\n    sz2: sz2,\n    sz3: sz3,\n    sz11: sz11,\n    sz12: sz12,\n    sz13: sz13,\n    sz21: sz21,\n    sz22: sz22,\n    sz23: sz23,\n    sz31: sz31,\n    sz32: sz32,\n    sz33: sz33,\n    xgh2: xgh2,\n    xgh3: xgh3,\n    xgh4: xgh4,\n    xh2: xh2,\n    xh3: xh3,\n    xi2: xi2,\n    xi3: xi3,\n    xl2: xl2,\n    xl3: xl3,\n    xl4: xl4,\n    nm: nm,\n    z1: z1,\n    z2: z2,\n    z3: z3,\n    z11: z11,\n    z12: z12,\n    z13: z13,\n    z21: z21,\n    z22: z22,\n    z23: z23,\n    z31: z31,\n    z32: z32,\n    z33: z33,\n    zmol: zmol,\n    zmos: zmos\n  };\n}\n\n/*-----------------------------------------------------------------------------\n *\n *                           procedure dsinit\n *\n *  this procedure provides deep space contributions to mean motion dot due\n *    to geopotential resonance with half day and one day orbits.\n *\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *\n *  inputs        :\n *    cosim, sinim-\n *    emsq        - eccentricity squared\n *    argpo       - argument of perigee\n *    s1, s2, s3, s4, s5      -\n *    ss1, ss2, ss3, ss4, ss5 -\n *    sz1, sz3, sz11, sz13, sz21, sz23, sz31, sz33 -\n *    t           - time\n *    tc          -\n *    gsto        - greenwich sidereal time                   rad\n *    mo          - mean anomaly\n *    mdot        - mean anomaly dot (rate)\n *    no          - mean motion\n *    nodeo       - right ascension of ascending node\n *    nodedot     - right ascension of ascending node dot (rate)\n *    xpidot      -\n *    z1, z3, z11, z13, z21, z23, z31, z33 -\n *    eccm        - eccentricity\n *    argpm       - argument of perigee\n *    inclm       - inclination\n *    mm          - mean anomaly\n *    xn          - mean motion\n *    nodem       - right ascension of ascending node\n *\n *  outputs       :\n *    em          - eccentricity\n *    argpm       - argument of perigee\n *    inclm       - inclination\n *    mm          - mean anomaly\n *    nm          - mean motion\n *    nodem       - right ascension of ascending node\n *    irez        - flag for resonance           0-none, 1-one day, 2-half day\n *    atime       -\n *    d2201, d2211, d3210, d3222, d4410, d4422, d5220, d5232, d5421, d5433    -\n *    dedt        -\n *    didt        -\n *    dmdt        -\n *    dndt        -\n *    dnodt       -\n *    domdt       -\n *    del1, del2, del3        -\n *    ses  , sghl , sghs , sgs  , shl  , shs  , sis  , sls\n *    theta       -\n *    xfact       -\n *    xlamo       -\n *    xli         -\n *    xni\n *\n *  locals        :\n *    ainv2       -\n *    aonv        -\n *    cosisq      -\n *    eoc         -\n *    f220, f221, f311, f321, f322, f330, f441, f442, f522, f523, f542, f543  -\n *    g200, g201, g211, g300, g310, g322, g410, g422, g520, g521, g532, g533  -\n *    sini2       -\n *    temp        -\n *    temp1       -\n *    theta       -\n *    xno2        -\n *\n *  coupling      :\n *    getgravconst\n *\n *  references    :\n *    hoots, roehrich, norad spacetrack report #3 1980\n *    hoots, norad spacetrack report #6 1986\n *    hoots, schumacher and glover 2004\n *    vallado, crawford, hujsak, kelso  2006\n ----------------------------------------------------------------------------*/\nfunction dsinit(options) {\n  var cosim = options.cosim,\n    argpo = options.argpo,\n    s1 = options.s1,\n    s2 = options.s2,\n    s3 = options.s3,\n    s4 = options.s4,\n    s5 = options.s5,\n    sinim = options.sinim,\n    ss1 = options.ss1,\n    ss2 = options.ss2,\n    ss3 = options.ss3,\n    ss4 = options.ss4,\n    ss5 = options.ss5,\n    sz1 = options.sz1,\n    sz3 = options.sz3,\n    sz11 = options.sz11,\n    sz13 = options.sz13,\n    sz21 = options.sz21,\n    sz23 = options.sz23,\n    sz31 = options.sz31,\n    sz33 = options.sz33,\n    t = options.t,\n    tc = options.tc,\n    gsto = options.gsto,\n    mo = options.mo,\n    mdot = options.mdot,\n    no = options.no,\n    nodeo = options.nodeo,\n    nodedot = options.nodedot,\n    xpidot = options.xpidot,\n    z1 = options.z1,\n    z3 = options.z3,\n    z11 = options.z11,\n    z13 = options.z13,\n    z21 = options.z21,\n    z23 = options.z23,\n    z31 = options.z31,\n    z33 = options.z33,\n    ecco = options.ecco,\n    eccsq = options.eccsq;\n  var emsq = options.emsq,\n    em = options.em,\n    argpm = options.argpm,\n    inclm = options.inclm,\n    mm = options.mm,\n    nm = options.nm,\n    nodem = options.nodem,\n    irez = options.irez,\n    atime = options.atime,\n    d2201 = options.d2201,\n    d2211 = options.d2211,\n    d3210 = options.d3210,\n    d3222 = options.d3222,\n    d4410 = options.d4410,\n    d4422 = options.d4422,\n    d5220 = options.d5220,\n    d5232 = options.d5232,\n    d5421 = options.d5421,\n    d5433 = options.d5433,\n    dedt = options.dedt,\n    didt = options.didt,\n    dmdt = options.dmdt,\n    dnodt = options.dnodt,\n    domdt = options.domdt,\n    del1 = options.del1,\n    del2 = options.del2,\n    del3 = options.del3,\n    xfact = options.xfact,\n    xlamo = options.xlamo,\n    xli = options.xli,\n    xni = options.xni;\n  var f220;\n  var f221;\n  var f311;\n  var f321;\n  var f322;\n  var f330;\n  var f441;\n  var f442;\n  var f522;\n  var f523;\n  var f542;\n  var f543;\n  var g200;\n  var g201;\n  var g211;\n  var g300;\n  var g310;\n  var g322;\n  var g410;\n  var g422;\n  var g520;\n  var g521;\n  var g532;\n  var g533;\n  var sini2;\n  var temp;\n  var temp1;\n  var xno2;\n  var ainv2;\n  var aonv;\n  var cosisq;\n  var eoc;\n  var q22 = 1.7891679e-6;\n  var q31 = 2.1460748e-6;\n  var q33 = 2.2123015e-7;\n  var root22 = 1.7891679e-6;\n  var root44 = 7.3636953e-9;\n  var root54 = 2.1765803e-9;\n  // eslint-disable-next-line no-loss-of-precision\n  var rptim = 4.37526908801129966e-3; // equates to 7.29211514668855e-5 rad/sec\n  var root32 = 3.7393792e-7;\n  var root52 = 1.1428639e-7;\n  var znl = 1.5835218e-4;\n  var zns = 1.19459e-5;\n  // -------------------- deep space initialization ------------\n  irez = 0;\n  if (nm < 0.0052359877 && nm > 0.0034906585) {\n    irez = 1;\n  }\n  if (nm >= 8.26e-3 && nm <= 9.24e-3 && em >= 0.5) {\n    irez = 2;\n  }\n  // ------------------------ do solar terms -------------------\n  var ses = ss1 * zns * ss5;\n  var sis = ss2 * zns * (sz11 + sz13);\n  var sls = -zns * ss3 * (sz1 + sz3 - 14.0 - 6.0 * emsq);\n  var sghs = ss4 * zns * (sz31 + sz33 - 6.0);\n  var shs = -zns * ss2 * (sz21 + sz23);\n  // sgp4fix for 180 deg incl\n  if (inclm < 5.2359877e-2 || inclm > pi - 5.2359877e-2) {\n    shs = 0.0;\n  }\n  if (sinim !== 0.0) {\n    shs /= sinim;\n  }\n  var sgs = sghs - cosim * shs;\n  // ------------------------- do lunar terms ------------------\n  dedt = ses + s1 * znl * s5;\n  didt = sis + s2 * znl * (z11 + z13);\n  dmdt = sls - znl * s3 * (z1 + z3 - 14.0 - 6.0 * emsq);\n  var sghl = s4 * znl * (z31 + z33 - 6.0);\n  var shll = -znl * s2 * (z21 + z23);\n  // sgp4fix for 180 deg incl\n  if (inclm < 5.2359877e-2 || inclm > pi - 5.2359877e-2) {\n    shll = 0.0;\n  }\n  domdt = sgs + sghl;\n  dnodt = shs;\n  if (sinim !== 0.0) {\n    domdt -= cosim / sinim * shll;\n    dnodt += shll / sinim;\n  }\n  // ----------- calculate deep space resonance effects --------\n  var dndt = 0.0;\n  var theta = (gsto + tc * rptim) % twoPi;\n  em += dedt * t;\n  inclm += didt * t;\n  argpm += domdt * t;\n  nodem += dnodt * t;\n  mm += dmdt * t;\n  // sgp4fix for negative inclinations\n  // the following if statement should be commented out\n  // if (inclm < 0.0)\n  // {\n  //   inclm  = -inclm;\n  //   argpm  = argpm - pi;\n  //   nodem = nodem + pi;\n  // }\n  // -------------- initialize the resonance terms -------------\n  if (irez !== 0) {\n    aonv = Math.pow(nm / xke, x2o3);\n    // ---------- geopotential resonance for 12 hour orbits ------\n    if (irez === 2) {\n      cosisq = cosim * cosim;\n      var emo = em;\n      em = ecco;\n      var emsqo = emsq;\n      emsq = eccsq;\n      eoc = em * emsq;\n      g201 = -0.306 - (em - 0.64) * 0.440;\n      if (em <= 0.65) {\n        g211 = 3.616 - 13.2470 * em + 16.2900 * emsq;\n        g310 = -19.302 + 117.3900 * em - 228.4190 * emsq + 156.5910 * eoc;\n        g322 = -18.9068 + 109.7927 * em - 214.6334 * emsq + 146.5816 * eoc;\n        g410 = -41.122 + 242.6940 * em - 471.0940 * emsq + 313.9530 * eoc;\n        g422 = -146.407 + 841.8800 * em - 1629.014 * emsq + 1083.4350 * eoc;\n        g520 = -532.114 + 3017.977 * em - 5740.032 * emsq + 3708.2760 * eoc;\n      } else {\n        g211 = -72.099 + 331.819 * em - 508.738 * emsq + 266.724 * eoc;\n        g310 = -346.844 + 1582.851 * em - 2415.925 * emsq + 1246.113 * eoc;\n        g322 = -342.585 + 1554.908 * em - 2366.899 * emsq + 1215.972 * eoc;\n        g410 = -1052.797 + 4758.686 * em - 7193.992 * emsq + 3651.957 * eoc;\n        g422 = -3581.690 + 16178.110 * em - 24462.770 * emsq + 12422.520 * eoc;\n        if (em > 0.715) {\n          g520 = -5149.66 + 29936.92 * em - 54087.36 * emsq + 31324.56 * eoc;\n        } else {\n          g520 = 1464.74 - 4664.75 * em + 3763.64 * emsq;\n        }\n      }\n      if (em < 0.7) {\n        g533 = -919.22770 + 4988.6100 * em - 9064.7700 * emsq + 5542.21 * eoc;\n        g521 = -822.71072 + 4568.6173 * em - 8491.4146 * emsq + 5337.524 * eoc;\n        g532 = -853.66600 + 4690.2500 * em - 8624.7700 * emsq + 5341.4 * eoc;\n      } else {\n        g533 = -37995.780 + 161616.52 * em - 229838.20 * emsq + 109377.94 * eoc;\n        g521 = -51752.104 + 218913.95 * em - 309468.16 * emsq + 146349.42 * eoc;\n        g532 = -40023.880 + 170470.89 * em - 242699.48 * emsq + 115605.82 * eoc;\n      }\n      sini2 = sinim * sinim;\n      f220 = 0.75 * (1.0 + 2.0 * cosim + cosisq);\n      f221 = 1.5 * sini2;\n      f321 = 1.875 * sinim * (1.0 - 2.0 * cosim - 3.0 * cosisq);\n      f322 = -1.875 * sinim * (1.0 + 2.0 * cosim - 3.0 * cosisq);\n      f441 = 35.0 * sini2 * f220;\n      f442 = 39.3750 * sini2 * sini2;\n      f522 = 9.84375 * sinim * (sini2 * (1.0 - 2.0 * cosim - 5.0 * cosisq) + 0.33333333 * (-2.0 + 4.0 * cosim + 6.0 * cosisq));\n      f523 = sinim * (4.92187512 * sini2 * (-2.0 - 4.0 * cosim + 10.0 * cosisq) + 6.56250012 * (1.0 + 2.0 * cosim - 3.0 * cosisq));\n      f542 = 29.53125 * sinim * (2.0 - 8.0 * cosim + cosisq * (-12.0 + 8.0 * cosim + 10.0 * cosisq));\n      f543 = 29.53125 * sinim * (-2.0 - 8.0 * cosim + cosisq * (12.0 + 8.0 * cosim - 10.0 * cosisq));\n      xno2 = nm * nm;\n      ainv2 = aonv * aonv;\n      temp1 = 3.0 * xno2 * ainv2;\n      temp = temp1 * root22;\n      d2201 = temp * f220 * g201;\n      d2211 = temp * f221 * g211;\n      temp1 *= aonv;\n      temp = temp1 * root32;\n      d3210 = temp * f321 * g310;\n      d3222 = temp * f322 * g322;\n      temp1 *= aonv;\n      temp = 2.0 * temp1 * root44;\n      d4410 = temp * f441 * g410;\n      d4422 = temp * f442 * g422;\n      temp1 *= aonv;\n      temp = temp1 * root52;\n      d5220 = temp * f522 * g520;\n      d5232 = temp * f523 * g532;\n      temp = 2.0 * temp1 * root54;\n      d5421 = temp * f542 * g521;\n      d5433 = temp * f543 * g533;\n      xlamo = (mo + nodeo + nodeo - (theta + theta)) % twoPi;\n      xfact = mdot + dmdt + 2.0 * (nodedot + dnodt - rptim) - no;\n      em = emo;\n      emsq = emsqo;\n    }\n    //  ---------------- synchronous resonance terms --------------\n    if (irez === 1) {\n      g200 = 1.0 + emsq * (-2.5 + 0.8125 * emsq);\n      g310 = 1.0 + 2.0 * emsq;\n      g300 = 1.0 + emsq * (-6.0 + 6.60937 * emsq);\n      f220 = 0.75 * (1.0 + cosim) * (1.0 + cosim);\n      f311 = 0.9375 * sinim * sinim * (1.0 + 3.0 * cosim) - 0.75 * (1.0 + cosim);\n      f330 = 1.0 + cosim;\n      f330 *= 1.875 * f330 * f330;\n      del1 = 3.0 * nm * nm * aonv * aonv;\n      del2 = 2.0 * del1 * f220 * g200 * q22;\n      del3 = 3.0 * del1 * f330 * g300 * q33 * aonv;\n      del1 = del1 * f311 * g310 * q31 * aonv;\n      xlamo = (mo + nodeo + argpo - theta) % twoPi;\n      xfact = mdot + xpidot + dmdt + domdt + dnodt - (no + rptim);\n    }\n    //  ------------ for sgp4, initialize the integrator ----------\n    xli = xlamo;\n    xni = no;\n    atime = 0.0;\n    nm = no + dndt;\n  }\n  return {\n    em: em,\n    argpm: argpm,\n    inclm: inclm,\n    mm: mm,\n    nm: nm,\n    nodem: nodem,\n    irez: irez,\n    atime: atime,\n    d2201: d2201,\n    d2211: d2211,\n    d3210: d3210,\n    d3222: d3222,\n    d4410: d4410,\n    d4422: d4422,\n    d5220: d5220,\n    d5232: d5232,\n    d5421: d5421,\n    d5433: d5433,\n    dedt: dedt,\n    didt: didt,\n    dmdt: dmdt,\n    dndt: dndt,\n    dnodt: dnodt,\n    domdt: domdt,\n    del1: del1,\n    del2: del2,\n    del3: del3,\n    xfact: xfact,\n    xlamo: xlamo,\n    xli: xli,\n    xni: xni\n  };\n}\n\n/* -----------------------------------------------------------------------------\n *\n *                           function gstime\n *\n *  this function finds the greenwich sidereal time.\n *\n *  author        : david vallado                  719-573-2600    1 mar 2001\n *\n *  inputs          description                    range / units\n *    jdut1       - julian date in ut1             days from 4713 bc\n *\n *  outputs       :\n *    gstime      - greenwich sidereal time        0 to 2pi rad\n *\n *  locals        :\n *    temp        - temporary variable for doubles   rad\n *    tut1        - julian centuries from the\n *                  jan 1, 2000 12 h epoch (ut1)\n *\n *  coupling      :\n *    none\n *\n *  references    :\n *    vallado       2004, 191, eq 3-45\n * --------------------------------------------------------------------------- */\nfunction gstimeInternal(jdut1) {\n  var tut1 = (jdut1 - 2451545.0) / 36525.0;\n  var temp = -6.2e-6 * tut1 * tut1 * tut1 + 0.093104 * tut1 * tut1 + (876600.0 * 3600 + 8640184.812866) * tut1 + 67310.54841; // # sec\n  temp = temp * deg2rad / 240.0 % twoPi; // 360/86400 = 1/240, to deg, to rad\n  //  ------------------------ check quadrants ---------------------\n  if (temp < 0.0) {\n    temp += twoPi;\n  }\n  return temp;\n}\nfunction gstime(first, month, day, hour, minute, second, millisecond) {\n  if (first instanceof Date) {\n    return gstimeInternal(jday(first));\n  } else if (month !== undefined) {\n    return gstimeInternal(jday(first, month, day, hour, minute, second, millisecond));\n  } else {\n    return gstimeInternal(first);\n  }\n}\n\n/*-----------------------------------------------------------------------------\n *\n *                           procedure initl\n *\n *  this procedure initializes the sgp4 propagator. all the initialization is\n *    consolidated here instead of having multiple loops inside other routines.\n *\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *\n *  inputs        :\n *    ecco        - eccentricity                           0.0 - 1.0\n *    epoch       - epoch time in days from jan 0, 1950. 0 hr\n *    inclo       - inclination of satellite\n *    no          - mean motion of satellite\n *    satn        - satellite number\n *\n *  outputs       :\n *    ainv        - 1.0 / a\n *    ao          - semi major axis\n *    con41       -\n *    con42       - 1.0 - 5.0 cos(i)\n *    cosio       - cosine of inclination\n *    cosio2      - cosio squared\n *    eccsq       - eccentricity squared\n *    method      - flag for deep space                    'd', 'n'\n *    omeosq      - 1.0 - ecco * ecco\n *    posq        - semi-parameter squared\n *    rp          - radius of perigee\n *    rteosq      - square root of (1.0 - ecco*ecco)\n *    sinio       - sine of inclination\n *    gsto        - gst at time of observation               rad\n *    no          - mean motion of satellite\n *\n *  locals        :\n *    ak          -\n *    d1          -\n *    del         -\n *    adel        -\n *    po          -\n *\n *  coupling      :\n *    getgravconst\n *    gstime      - find greenwich sidereal time from the julian date\n *\n *  references    :\n *    hoots, roehrich, norad spacetrack report #3 1980\n *    hoots, norad spacetrack report #6 1986\n *    hoots, schumacher and glover 2004\n *    vallado, crawford, hujsak, kelso  2006\n ----------------------------------------------------------------------------*/\nfunction initl(options) {\n  var ecco = options.ecco,\n    epoch = options.epoch,\n    inclo = options.inclo,\n    opsmode = options.opsmode;\n  var no = options.no;\n  // sgp4fix use old way of finding gst\n  // ----------------------- earth constants ---------------------\n  // sgp4fix identify constants and allow alternate values\n  // ------------- calculate auxillary epoch quantities ----------\n  var eccsq = ecco * ecco;\n  var omeosq = 1.0 - eccsq;\n  var rteosq = Math.sqrt(omeosq);\n  var cosio = Math.cos(inclo);\n  var cosio2 = cosio * cosio;\n  // ------------------ un-kozai the mean motion -----------------\n  var ak = Math.pow(xke / no, x2o3);\n  var d1 = 0.75 * j2 * (3.0 * cosio2 - 1.0) / (rteosq * omeosq);\n  var delPrime = d1 / (ak * ak);\n  var adel = ak * (1.0 - delPrime * delPrime - delPrime * (1.0 / 3.0 + 134.0 * delPrime * delPrime / 81.0));\n  delPrime = d1 / (adel * adel);\n  no /= 1.0 + delPrime;\n  var ao = Math.pow(xke / no, x2o3);\n  var sinio = Math.sin(inclo);\n  var po = ao * omeosq;\n  var con42 = 1.0 - 5.0 * cosio2;\n  var con41 = -con42 - cosio2 - cosio2;\n  var ainv = 1.0 / ao;\n  var posq = po * po;\n  var rp = ao * (1.0 - ecco);\n  var method = 'n';\n  //  sgp4fix modern approach to finding sidereal time\n  var gsto;\n  if (opsmode === 'a') {\n    //  sgp4fix use old way of finding gst\n    //  count integer number of days from 0 jan 1970\n    var ts70 = epoch - 7305.0;\n    var ds70 = Math.floor(ts70 + 1.0e-8);\n    var tfrac = ts70 - ds70;\n    //  find greenwich location at epoch\n    var c1 = 1.72027916940703639e-2; // eslint-disable-line no-loss-of-precision\n    var thgr70 = 1.7321343856509374; // eslint-disable-line no-loss-of-precision\n    var fk5r = 5.07551419432269442e-15; // eslint-disable-line no-loss-of-precision\n    var c1p2p = c1 + twoPi;\n    gsto = (thgr70 + c1 * ds70 + c1p2p * tfrac + ts70 * ts70 * fk5r) % twoPi;\n    if (gsto < 0.0) {\n      gsto += twoPi;\n    }\n  } else {\n    gsto = gstime(epoch + 2433281.5);\n  }\n  return {\n    no: no,\n    method: method,\n    ainv: ainv,\n    ao: ao,\n    con41: con41,\n    con42: con42,\n    cosio: cosio,\n    cosio2: cosio2,\n    eccsq: eccsq,\n    omeosq: omeosq,\n    posq: posq,\n    rp: rp,\n    rteosq: rteosq,\n    sinio: sinio,\n    gsto: gsto\n  };\n}\n\n/*-----------------------------------------------------------------------------\n *\n *                           procedure dspace\n *\n *  this procedure provides deep space contributions to mean elements for\n *    perturbing third body.  these effects have been averaged over one\n *    revolution of the sun and moon.  for earth resonance effects, the\n *    effects have been averaged over no revolutions of the satellite.\n *    (mean motion)\n *\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *\n *  inputs        :\n *    d2201, d2211, d3210, d3222, d4410, d4422, d5220, d5232, d5421, d5433 -\n *    dedt        -\n *    del1, del2, del3  -\n *    didt        -\n *    dmdt        -\n *    dnodt       -\n *    domdt       -\n *    irez        - flag for resonance           0-none, 1-one day, 2-half day\n *    argpo       - argument of perigee\n *    argpdot     - argument of perigee dot (rate)\n *    t           - time\n *    tc          -\n *    gsto        - gst\n *    xfact       -\n *    xlamo       -\n *    no          - mean motion\n *    atime       -\n *    em          - eccentricity\n *    ft          -\n *    argpm       - argument of perigee\n *    inclm       - inclination\n *    xli         -\n *    mm          - mean anomaly\n *    xni         - mean motion\n *    nodem       - right ascension of ascending node\n *\n *  outputs       :\n *    atime       -\n *    em          - eccentricity\n *    argpm       - argument of perigee\n *    inclm       - inclination\n *    xli         -\n *    mm          - mean anomaly\n *    xni         -\n *    nodem       - right ascension of ascending node\n *    dndt        -\n *    nm          - mean motion\n *\n *  locals        :\n *    delt        -\n *    ft          -\n *    theta       -\n *    x2li        -\n *    x2omi       -\n *    xl          -\n *    xldot       -\n *    xnddt       -\n *    xndt        -\n *    xomi        -\n *\n *  coupling      :\n *    none        -\n *\n *  references    :\n *    hoots, roehrich, norad spacetrack report #3 1980\n *    hoots, norad spacetrack report #6 1986\n *    hoots, schumacher and glover 2004\n *    vallado, crawford, hujsak, kelso  2006\n ----------------------------------------------------------------------------*/\nfunction dspace(options) {\n  var irez = options.irez,\n    d2201 = options.d2201,\n    d2211 = options.d2211,\n    d3210 = options.d3210,\n    d3222 = options.d3222,\n    d4410 = options.d4410,\n    d4422 = options.d4422,\n    d5220 = options.d5220,\n    d5232 = options.d5232,\n    d5421 = options.d5421,\n    d5433 = options.d5433,\n    dedt = options.dedt,\n    del1 = options.del1,\n    del2 = options.del2,\n    del3 = options.del3,\n    didt = options.didt,\n    dmdt = options.dmdt,\n    dnodt = options.dnodt,\n    domdt = options.domdt,\n    argpo = options.argpo,\n    argpdot = options.argpdot,\n    t = options.t,\n    tc = options.tc,\n    gsto = options.gsto,\n    xfact = options.xfact,\n    xlamo = options.xlamo,\n    no = options.no;\n  var atime = options.atime,\n    em = options.em,\n    argpm = options.argpm,\n    inclm = options.inclm,\n    xli = options.xli,\n    mm = options.mm,\n    xni = options.xni,\n    nodem = options.nodem,\n    nm = options.nm;\n  var fasx2 = 0.13130908;\n  var fasx4 = 2.8843198;\n  var fasx6 = 0.37448087;\n  var g22 = 5.7686396;\n  var g32 = 0.95240898;\n  var g44 = 1.8014998;\n  var g52 = 1.0508330;\n  var g54 = 4.4108898;\n  // eslint-disable-next-line no-loss-of-precision\n  var rptim = 4.37526908801129966e-3; // equates to 7.29211514668855e-5 rad/sec\n  var stepp = 720.0;\n  var stepn = -720.0;\n  var step2 = 259200.0;\n  var delt;\n  var x2li;\n  var x2omi;\n  var xl;\n  var xldot;\n  var xnddt;\n  var xndt;\n  var xomi;\n  var dndt = 0.0;\n  var ft = 0.0;\n  //  ----------- calculate deep space resonance effects -----------\n  var theta = (gsto + tc * rptim) % twoPi;\n  em += dedt * t;\n  inclm += didt * t;\n  argpm += domdt * t;\n  nodem += dnodt * t;\n  mm += dmdt * t;\n  // sgp4fix for negative inclinations\n  // the following if statement should be commented out\n  // if (inclm < 0.0)\n  // {\n  //   inclm = -inclm;\n  //   argpm = argpm - pi;\n  //   nodem = nodem + pi;\n  // }\n  /* - update resonances : numerical (euler-maclaurin) integration - */\n  /* ------------------------- epoch restart ----------------------  */\n  //   sgp4fix for propagator problems\n  //   the following integration works for negative time steps and periods\n  //   the specific changes are unknown because the original code was so convoluted\n  // sgp4fix take out atime = 0.0 and fix for faster operation\n  if (irez !== 0) {\n    //  sgp4fix streamline check\n    if (atime === 0.0 || t * atime <= 0.0 || Math.abs(t) < Math.abs(atime)) {\n      atime = 0.0;\n      xni = no;\n      xli = xlamo;\n    }\n    // sgp4fix move check outside loop\n    if (t > 0.0) {\n      delt = stepp;\n    } else {\n      delt = stepn;\n    }\n    var iretn = 381; // added for do loop\n    while (iretn === 381) {\n      //  ------------------- dot terms calculated -------------\n      //  ----------- near - synchronous resonance terms -------\n      if (irez !== 2) {\n        xndt = del1 * Math.sin(xli - fasx2) + del2 * Math.sin(2.0 * (xli - fasx4)) + del3 * Math.sin(3.0 * (xli - fasx6));\n        xldot = xni + xfact;\n        xnddt = del1 * Math.cos(xli - fasx2) + 2.0 * del2 * Math.cos(2.0 * (xli - fasx4)) + 3.0 * del3 * Math.cos(3.0 * (xli - fasx6));\n        xnddt *= xldot;\n      } else {\n        // --------- near - half-day resonance terms --------\n        xomi = argpo + argpdot * atime;\n        x2omi = xomi + xomi;\n        x2li = xli + xli;\n        xndt = d2201 * Math.sin(x2omi + xli - g22) + d2211 * Math.sin(xli - g22) + d3210 * Math.sin(xomi + xli - g32) + d3222 * Math.sin(-xomi + xli - g32) + d4410 * Math.sin(x2omi + x2li - g44) + d4422 * Math.sin(x2li - g44) + d5220 * Math.sin(xomi + xli - g52) + d5232 * Math.sin(-xomi + xli - g52) + d5421 * Math.sin(xomi + x2li - g54) + d5433 * Math.sin(-xomi + x2li - g54);\n        xldot = xni + xfact;\n        xnddt = d2201 * Math.cos(x2omi + xli - g22) + d2211 * Math.cos(xli - g22) + d3210 * Math.cos(xomi + xli - g32) + d3222 * Math.cos(-xomi + xli - g32) + d5220 * Math.cos(xomi + xli - g52) + d5232 * Math.cos(-xomi + xli - g52) + 2.0 * (d4410 * Math.cos(x2omi + x2li - g44) + d4422 * Math.cos(x2li - g44) + d5421 * Math.cos(xomi + x2li - g54) + d5433 * Math.cos(-xomi + x2li - g54));\n        xnddt *= xldot;\n      }\n      //  ----------------------- integrator -------------------\n      //  sgp4fix move end checks to end of routine\n      if (Math.abs(t - atime) >= stepp) {\n        iretn = 381;\n      } else {\n        ft = t - atime;\n        iretn = 0;\n      }\n      if (iretn === 381) {\n        xli += xldot * delt + xndt * step2;\n        xni += xndt * delt + xnddt * step2;\n        atime += delt;\n      }\n    }\n    nm = xni + xndt * ft + xnddt * ft * ft * 0.5;\n    xl = xli + xldot * ft + xndt * ft * ft * 0.5;\n    if (irez !== 1) {\n      mm = xl - 2.0 * nodem + 2.0 * theta;\n      dndt = nm - no;\n    } else {\n      mm = xl - nodem - argpm + theta;\n      dndt = nm - no;\n    }\n    nm = no + dndt;\n  }\n  return {\n    atime: atime,\n    em: em,\n    argpm: argpm,\n    inclm: inclm,\n    xli: xli,\n    mm: mm,\n    xni: xni,\n    nodem: nodem,\n    dndt: dndt,\n    nm: nm\n  };\n}\n\nvar SatRecError;\n(function (SatRecError) {\n  /**\n   * No error, propagation for the last supplied date is successful\n   */\n  SatRecError[SatRecError[\"None\"] = 0] = \"None\";\n  /**\n   * Mean eccentricity is out of range 0 ≤ e < 1\n   */\n  SatRecError[SatRecError[\"MeanEccentricityOutOfRange\"] = 1] = \"MeanEccentricityOutOfRange\";\n  /**\n   * Mean motion has fallen below zero.\n   */\n  SatRecError[SatRecError[\"MeanMotionBelowZero\"] = 2] = \"MeanMotionBelowZero\";\n  /**\n   * Perturbed eccentricity is out of range 0 ≤ e < 1\n   */\n  SatRecError[SatRecError[\"PerturbedEccentricityOutOfRange\"] = 3] = \"PerturbedEccentricityOutOfRange\";\n  /**\n   * Length of the orbit’s semi-latus rectum has fallen below zero.\n   */\n  SatRecError[SatRecError[\"SemiLatusRectumBelowZero\"] = 4] = \"SemiLatusRectumBelowZero\";\n  // 5 is not used\n  /**\n   * Orbit has decayed: the computed position is underground.\n   */\n  SatRecError[SatRecError[\"Decayed\"] = 6] = \"Decayed\";\n})(SatRecError || (SatRecError = {}));\n\n/*----------------------------------------------------------------------------\n *\n *                             procedure sgp4\n *\n *  this procedure is the sgp4 prediction model from space command. this is an\n *    updated and combined version of sgp4 and sdp4, which were originally\n *    published separately in spacetrack report //3. this version follows the\n *    methodology from the aiaa paper (2006) describing the history and\n *    development of the code.\n *\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *\n *  inputs        :\n *    satrec  - initialised structure from sgp4init() call.\n *    tsince  - time since epoch (minutes)\n *\n *  outputs       :\n *    r           - position vector                     km\n *    v           - velocity                            km/sec\n *  return code - non-zero on error.\n *                   1 - mean elements, ecc >= 1.0 or ecc < -0.001 or a < 0.95 er\n *                   2 - mean motion less than 0.0\n *                   3 - pert elements, ecc < 0.0  or  ecc > 1.0\n *                   4 - semi-latus rectum < 0.0\n *                   5 - epoch elements are sub-orbital\n *                   6 - satellite has decayed\n *\n *  locals        :\n *    am          -\n *    axnl, aynl        -\n *    betal       -\n *    cosim   , sinim   , cosomm  , sinomm  , cnod    , snod    , cos2u   ,\n *    sin2u   , coseo1  , sineo1  , cosi    , sini    , cosip   , sinip   ,\n *    cosisq  , cossu   , sinsu   , cosu    , sinu\n *    delm        -\n *    delomg      -\n *    dndt        -\n *    eccm        -\n *    emsq        -\n *    ecose       -\n *    el2         -\n *    eo1         -\n *    eccp        -\n *    esine       -\n *    argpm       -\n *    argpp       -\n *    omgadf      -\n *    pl          -\n *    r           -\n *    rtemsq      -\n *    rdotl       -\n *    rl          -\n *    rvdot       -\n *    rvdotl      -\n *    su          -\n *    t2  , t3   , t4    , tc\n *    tem5, temp , temp1 , temp2  , tempa  , tempe  , templ\n *    u   , ux   , uy    , uz     , vx     , vy     , vz\n *    inclm       - inclination\n *    mm          - mean anomaly\n *    nm          - mean motion\n *    nodem       - right asc of ascending node\n *    xinc        -\n *    xincp       -\n *    xl          -\n *    xlm         -\n *    mp          -\n *    xmdf        -\n *    xmx         -\n *    xmy         -\n *    nodedf      -\n *    xnode       -\n *    nodep       -\n *    np          -\n *\n *  coupling      :\n *    getgravconst-\n *    dpper\n *    dspace\n *\n *  references    :\n *    hoots, roehrich, norad spacetrack report //3 1980\n *    hoots, norad spacetrack report //6 1986\n *    hoots, schumacher and glover 2004\n *    vallado, crawford, hujsak, kelso  2006\n ----------------------------------------------------------------------------*/\nfunction sgp4(satrec, tsince) {\n  var coseo1;\n  var sineo1;\n  var cosip;\n  var sinip;\n  var cosisq;\n  var delm;\n  var delomg;\n  var eo1;\n  var argpm;\n  var argpp;\n  var su;\n  var t3;\n  var t4;\n  var tc;\n  var tem5;\n  var temp;\n  var tempa;\n  var tempe;\n  var templ;\n  var inclm;\n  var mm;\n  var nm;\n  var nodem;\n  var xincp;\n  var xlm;\n  var mp;\n  var nodep;\n  /* ------------------ set mathematical constants --------------- */\n  // sgp4fix divisor for divide by zero check on inclination\n  // the old check used 1.0 + cos(pi-1.0e-9), but then compared it to\n  // 1.5 e-12, so the threshold was changed to 1.5e-12 for consistency\n  var temp4 = 1.5e-12;\n  // --------------------- clear sgp4 error flag -----------------\n  satrec.t = tsince;\n  satrec.error = SatRecError.None;\n  //  ------- update for secular gravity and atmospheric drag -----\n  var xmdf = satrec.mo + satrec.mdot * satrec.t;\n  var argpdf = satrec.argpo + satrec.argpdot * satrec.t;\n  var nodedf = satrec.nodeo + satrec.nodedot * satrec.t;\n  argpm = argpdf;\n  mm = xmdf;\n  var t2 = satrec.t * satrec.t;\n  nodem = nodedf + satrec.nodecf * t2;\n  tempa = 1.0 - satrec.cc1 * satrec.t;\n  tempe = satrec.bstar * satrec.cc4 * satrec.t;\n  templ = satrec.t2cof * t2;\n  if (satrec.isimp !== 1) {\n    delomg = satrec.omgcof * satrec.t;\n    //  sgp4fix use mutliply for speed instead of pow\n    var delmtemp = 1.0 + satrec.eta * Math.cos(xmdf);\n    delm = satrec.xmcof * (delmtemp * delmtemp * delmtemp - satrec.delmo);\n    temp = delomg + delm;\n    mm = xmdf + temp;\n    argpm = argpdf - temp;\n    t3 = t2 * satrec.t;\n    t4 = t3 * satrec.t;\n    tempa = tempa - satrec.d2 * t2 - satrec.d3 * t3 - satrec.d4 * t4;\n    tempe += satrec.bstar * satrec.cc5 * (Math.sin(mm) - satrec.sinmao);\n    templ = templ + satrec.t3cof * t3 + t4 * (satrec.t4cof + satrec.t * satrec.t5cof);\n  }\n  nm = satrec.no;\n  var em = satrec.ecco;\n  inclm = satrec.inclo;\n  if (satrec.method === 'd') {\n    tc = satrec.t;\n    var dspaceOptions = {\n      irez: satrec.irez,\n      d2201: satrec.d2201,\n      d2211: satrec.d2211,\n      d3210: satrec.d3210,\n      d3222: satrec.d3222,\n      d4410: satrec.d4410,\n      d4422: satrec.d4422,\n      d5220: satrec.d5220,\n      d5232: satrec.d5232,\n      d5421: satrec.d5421,\n      d5433: satrec.d5433,\n      dedt: satrec.dedt,\n      del1: satrec.del1,\n      del2: satrec.del2,\n      del3: satrec.del3,\n      didt: satrec.didt,\n      dmdt: satrec.dmdt,\n      dnodt: satrec.dnodt,\n      domdt: satrec.domdt,\n      argpo: satrec.argpo,\n      argpdot: satrec.argpdot,\n      t: satrec.t,\n      tc: tc,\n      gsto: satrec.gsto,\n      xfact: satrec.xfact,\n      xlamo: satrec.xlamo,\n      no: satrec.no,\n      atime: satrec.atime,\n      em: em,\n      argpm: argpm,\n      inclm: inclm,\n      xli: satrec.xli,\n      mm: mm,\n      xni: satrec.xni,\n      nodem: nodem,\n      nm: nm\n    };\n    var dspaceResult = dspace(dspaceOptions);\n    em = dspaceResult.em;\n    argpm = dspaceResult.argpm;\n    inclm = dspaceResult.inclm;\n    mm = dspaceResult.mm;\n    nodem = dspaceResult.nodem;\n    nm = dspaceResult.nm;\n  }\n  if (nm <= 0.0) {\n    // printf(\"// error nm %f\\n\", nm);\n    satrec.error = SatRecError.MeanMotionBelowZero;\n    // sgp4fix add return\n    return null;\n  }\n  var am = Math.pow(xke / nm, x2o3) * tempa * tempa;\n  nm = xke / Math.pow(am, 1.5);\n  em -= tempe;\n  // fix tolerance for error recognition\n  // sgp4fix am is fixed from the previous nm check\n  if (em >= 1.0 || em < -0.001) {\n    // || (am < 0.95)\n    // printf(\"// error em %f\\n\", em);\n    satrec.error = SatRecError.MeanEccentricityOutOfRange;\n    // sgp4fix to return if there is an error in eccentricity\n    return null;\n  }\n  //  sgp4fix fix tolerance to avoid a divide by zero\n  if (em < 1.0e-6) {\n    em = 1.0e-6;\n  }\n  mm += satrec.no * templ;\n  xlm = mm + argpm + nodem;\n  nodem %= twoPi;\n  argpm %= twoPi;\n  xlm %= twoPi;\n  mm = (xlm - argpm - nodem) % twoPi;\n  var meanElements = {\n    am: am,\n    em: em,\n    im: inclm,\n    Om: nodem,\n    om: argpm,\n    mm: mm,\n    nm: nm\n  };\n  // ----------------- compute extra mean quantities -------------\n  var sinim = Math.sin(inclm);\n  var cosim = Math.cos(inclm);\n  // -------------------- add lunar-solar periodics --------------\n  var ep = em;\n  xincp = inclm;\n  argpp = argpm;\n  nodep = nodem;\n  mp = mm;\n  sinip = sinim;\n  cosip = cosim;\n  if (satrec.method === 'd') {\n    var dpperParameters = {\n      inclo: satrec.inclo,\n      init: 'n',\n      ep: ep,\n      inclp: xincp,\n      nodep: nodep,\n      argpp: argpp,\n      mp: mp,\n      opsmode: satrec.operationmode\n    };\n    var dpperResult = dpper(satrec, dpperParameters);\n    ep = dpperResult.ep;\n    nodep = dpperResult.nodep;\n    argpp = dpperResult.argpp;\n    mp = dpperResult.mp;\n    xincp = dpperResult.inclp;\n    if (xincp < 0.0) {\n      xincp = -xincp;\n      nodep += pi;\n      argpp -= pi;\n    }\n    if (ep < 0.0 || ep > 1.0) {\n      //  printf(\"// error ep %f\\n\", ep);\n      satrec.error = SatRecError.PerturbedEccentricityOutOfRange;\n      //  sgp4fix add return\n      return null;\n    }\n  }\n  //  -------------------- long period periodics ------------------\n  if (satrec.method === 'd') {\n    sinip = Math.sin(xincp);\n    cosip = Math.cos(xincp);\n    satrec.aycof = -0.5 * j3oj2 * sinip;\n    //  sgp4fix for divide by zero for xincp = 180 deg\n    if (Math.abs(cosip + 1.0) > 1.5e-12) {\n      satrec.xlcof = -0.25 * j3oj2 * sinip * (3.0 + 5.0 * cosip) / (1.0 + cosip);\n    } else {\n      satrec.xlcof = -0.25 * j3oj2 * sinip * (3.0 + 5.0 * cosip) / temp4;\n    }\n  }\n  var axnl = ep * Math.cos(argpp);\n  temp = 1.0 / (am * (1.0 - ep * ep));\n  var aynl = ep * Math.sin(argpp) + temp * satrec.aycof;\n  var xl = mp + argpp + nodep + temp * satrec.xlcof * axnl;\n  // --------------------- solve kepler's equation ---------------\n  var u = (xl - nodep) % twoPi;\n  eo1 = u;\n  tem5 = 9999.9;\n  var ktr = 1;\n  //    sgp4fix for kepler iteration\n  //    the following iteration needs better limits on corrections\n  while (Math.abs(tem5) >= 1.0e-12 && ktr <= 10) {\n    sineo1 = Math.sin(eo1);\n    coseo1 = Math.cos(eo1);\n    tem5 = 1.0 - coseo1 * axnl - sineo1 * aynl;\n    tem5 = (u - aynl * coseo1 + axnl * sineo1 - eo1) / tem5;\n    if (Math.abs(tem5) >= 0.95) {\n      if (tem5 > 0.0) {\n        tem5 = 0.95;\n      } else {\n        tem5 = -0.95;\n      }\n    }\n    eo1 += tem5;\n    ktr += 1;\n  }\n  //  ------------- short period preliminary quantities -----------\n  var ecose = axnl * coseo1 + aynl * sineo1;\n  var esine = axnl * sineo1 - aynl * coseo1;\n  var el2 = axnl * axnl + aynl * aynl;\n  var pl = am * (1.0 - el2);\n  if (pl < 0.0) {\n    //  printf(\"// error pl %f\\n\", pl);\n    satrec.error = SatRecError.SemiLatusRectumBelowZero;\n    //  sgp4fix add return\n    return null;\n  }\n  var rl = am * (1.0 - ecose);\n  var rdotl = Math.sqrt(am) * esine / rl;\n  var rvdotl = Math.sqrt(pl) / rl;\n  var betal = Math.sqrt(1.0 - el2);\n  temp = esine / (1.0 + betal);\n  var sinu = am / rl * (sineo1 - aynl - axnl * temp);\n  var cosu = am / rl * (coseo1 - axnl + aynl * temp);\n  su = Math.atan2(sinu, cosu);\n  var sin2u = (cosu + cosu) * sinu;\n  var cos2u = 1.0 - 2.0 * sinu * sinu;\n  temp = 1.0 / pl;\n  var temp1 = 0.5 * j2 * temp;\n  var temp2 = temp1 * temp;\n  // -------------- update for short period periodics ------------\n  if (satrec.method === 'd') {\n    cosisq = cosip * cosip;\n    satrec.con41 = 3.0 * cosisq - 1.0;\n    satrec.x1mth2 = 1.0 - cosisq;\n    satrec.x7thm1 = 7.0 * cosisq - 1.0;\n  }\n  var mrt = rl * (1.0 - 1.5 * temp2 * betal * satrec.con41) + 0.5 * temp1 * satrec.x1mth2 * cos2u;\n  // sgp4fix for decaying satellites\n  if (mrt < 1.0) {\n    // printf(\"// decay condition %11.6f \\n\",mrt);\n    satrec.error = SatRecError.Decayed;\n    return null;\n  }\n  su -= 0.25 * temp2 * satrec.x7thm1 * sin2u;\n  var xnode = nodep + 1.5 * temp2 * cosip * sin2u;\n  var xinc = xincp + 1.5 * temp2 * cosip * sinip * cos2u;\n  var mvt = rdotl - nm * temp1 * satrec.x1mth2 * sin2u / xke;\n  var rvdot = rvdotl + nm * temp1 * (satrec.x1mth2 * cos2u + 1.5 * satrec.con41) / xke;\n  // --------------------- orientation vectors -------------------\n  var sinsu = Math.sin(su);\n  var cossu = Math.cos(su);\n  var snod = Math.sin(xnode);\n  var cnod = Math.cos(xnode);\n  var sini = Math.sin(xinc);\n  var cosi = Math.cos(xinc);\n  var xmx = -snod * cosi;\n  var xmy = cnod * cosi;\n  var ux = xmx * sinsu + cnod * cossu;\n  var uy = xmy * sinsu + snod * cossu;\n  var uz = sini * sinsu;\n  var vx = xmx * cossu - cnod * sinsu;\n  var vy = xmy * cossu - snod * sinsu;\n  var vz = sini * cossu;\n  // --------- position and velocity (in km and km/sec) ----------\n  var r = {\n    x: mrt * ux * earthRadius,\n    y: mrt * uy * earthRadius,\n    z: mrt * uz * earthRadius\n  };\n  var v = {\n    x: (mvt * ux + rvdot * vx) * vkmpersec,\n    y: (mvt * uy + rvdot * vy) * vkmpersec,\n    z: (mvt * uz + rvdot * vz) * vkmpersec\n  };\n  return {\n    position: r,\n    velocity: v,\n    meanElements: meanElements\n  };\n}\n\n/*-----------------------------------------------------------------------------\n *\n *                             procedure sgp4init\n *\n *  this procedure initializes variables for sgp4.\n *\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *  author        : david vallado                  719-573-2600   28 jun 2005\n *\n *  inputs        :\n *    opsmode     - mode of operation afspc or improved 'a', 'i'\n *    satn        - satellite number\n *    bstar       - sgp4 type drag coefficient              kg/m2er\n *    ecco        - eccentricity\n *    epoch       - epoch time in days from jan 0, 1950. 0 hr\n *    argpo       - argument of perigee (output if ds)\n *    inclo       - inclination\n *    mo          - mean anomaly (output if ds)\n *    no          - mean motion\n *    nodeo       - right ascension of ascending node\n *\n *  outputs       :\n *    rec      - common values for subsequent calls\n *    return code - non-zero on error.\n *                   1 - mean elements, ecc >= 1.0 or ecc < -0.001 or a < 0.95 er\n *                   2 - mean motion less than 0.0\n *                   3 - pert elements, ecc < 0.0  or  ecc > 1.0\n *                   4 - semi-latus rectum < 0.0\n *                   5 - epoch elements are sub-orbital\n *                   6 - satellite has decayed\n *\n *  locals        :\n *    cnodm  , snodm  , cosim  , sinim  , cosomm , sinomm\n *    cc1sq  , cc2    , cc3\n *    coef   , coef1\n *    cosio4      -\n *    day         -\n *    dndt        -\n *    em          - eccentricity\n *    emsq        - eccentricity squared\n *    eeta        -\n *    etasq       -\n *    gam         -\n *    argpm       - argument of perigee\n *    nodem       -\n *    inclm       - inclination\n *    mm          - mean anomaly\n *    nm          - mean motion\n *    perige      - perigee\n *    pinvsq      -\n *    psisq       -\n *    qzms24      -\n *    rtemsq      -\n *    s1, s2, s3, s4, s5, s6, s7          -\n *    sfour       -\n *    ss1, ss2, ss3, ss4, ss5, ss6, ss7         -\n *    sz1, sz2, sz3\n *    sz11, sz12, sz13, sz21, sz22, sz23, sz31, sz32, sz33        -\n *    tc          -\n *    temp        -\n *    temp1, temp2, temp3       -\n *    tsi         -\n *    xpidot      -\n *    xhdot1      -\n *    z1, z2, z3          -\n *    z11, z12, z13, z21, z22, z23, z31, z32, z33         -\n *\n *  coupling      :\n *    getgravconst-\n *    initl       -\n *    dscom       -\n *    dpper       -\n *    dsinit      -\n *    sgp4        -\n *\n *  references    :\n *    hoots, roehrich, norad spacetrack report #3 1980\n *    hoots, norad spacetrack report #6 1986\n *    hoots, schumacher and glover 2004\n *    vallado, crawford, hujsak, kelso  2006\n ----------------------------------------------------------------------------*/\nfunction sgp4init(satrecInit, options) {\n  var opsmode = options.opsmode,\n    satn = options.satn,\n    epoch = options.epoch,\n    xbstar = options.xbstar,\n    xecco = options.xecco,\n    xargpo = options.xargpo,\n    xinclo = options.xinclo,\n    xmo = options.xmo,\n    xno = options.xno,\n    xnodeo = options.xnodeo;\n  var cosim;\n  var sinim;\n  var cc1sq;\n  var cc2;\n  var cc3;\n  var coef;\n  var coef1;\n  var cosio4;\n  var em;\n  var emsq;\n  var eeta;\n  var etasq;\n  var argpm;\n  var nodem;\n  var inclm;\n  var mm;\n  var nm;\n  var perige;\n  var pinvsq;\n  var psisq;\n  var qzms24;\n  var s1;\n  var s2;\n  var s3;\n  var s4;\n  var s5;\n  var sfour;\n  var ss1;\n  var ss2;\n  var ss3;\n  var ss4;\n  var ss5;\n  var sz1;\n  var sz3;\n  var sz11;\n  var sz13;\n  var sz21;\n  var sz23;\n  var sz31;\n  var sz33;\n  var tc;\n  var temp;\n  var temp1;\n  var temp2;\n  var temp3;\n  var tsi;\n  var xpidot;\n  var xhdot1;\n  var z1;\n  var z3;\n  var z11;\n  var z13;\n  var z21;\n  var z23;\n  var z31;\n  var z33;\n  /* ------------------------ initialization --------------------- */\n  // sgp4fix divisor for divide by zero check on inclination\n  // the old check used 1.0 + Math.cos(pi-1.0e-9), but then compared it to\n  // 1.5 e-12, so the threshold was changed to 1.5e-12 for consistency\n  var temp4 = 1.5e-12;\n  var satrec = satrecInit;\n  // ----------- set all near earth variables to zero ------------\n  satrec.isimp = 0;\n  satrec.method = 'n';\n  satrec.aycof = 0.0;\n  satrec.con41 = 0.0;\n  satrec.cc1 = 0.0;\n  satrec.cc4 = 0.0;\n  satrec.cc5 = 0.0;\n  satrec.d2 = 0.0;\n  satrec.d3 = 0.0;\n  satrec.d4 = 0.0;\n  satrec.delmo = 0.0;\n  satrec.eta = 0.0;\n  satrec.argpdot = 0.0;\n  satrec.omgcof = 0.0;\n  satrec.sinmao = 0.0;\n  satrec.t = 0.0;\n  satrec.t2cof = 0.0;\n  satrec.t3cof = 0.0;\n  satrec.t4cof = 0.0;\n  satrec.t5cof = 0.0;\n  satrec.x1mth2 = 0.0;\n  satrec.x7thm1 = 0.0;\n  satrec.mdot = 0.0;\n  satrec.nodedot = 0.0;\n  satrec.xlcof = 0.0;\n  satrec.xmcof = 0.0;\n  satrec.nodecf = 0.0;\n  // ----------- set all deep space variables to zero ------------\n  satrec.irez = 0;\n  satrec.d2201 = 0.0;\n  satrec.d2211 = 0.0;\n  satrec.d3210 = 0.0;\n  satrec.d3222 = 0.0;\n  satrec.d4410 = 0.0;\n  satrec.d4422 = 0.0;\n  satrec.d5220 = 0.0;\n  satrec.d5232 = 0.0;\n  satrec.d5421 = 0.0;\n  satrec.d5433 = 0.0;\n  satrec.dedt = 0.0;\n  satrec.del1 = 0.0;\n  satrec.del2 = 0.0;\n  satrec.del3 = 0.0;\n  satrec.didt = 0.0;\n  satrec.dmdt = 0.0;\n  satrec.dnodt = 0.0;\n  satrec.domdt = 0.0;\n  satrec.e3 = 0.0;\n  satrec.ee2 = 0.0;\n  satrec.peo = 0.0;\n  satrec.pgho = 0.0;\n  satrec.pho = 0.0;\n  satrec.pinco = 0.0;\n  satrec.plo = 0.0;\n  satrec.se2 = 0.0;\n  satrec.se3 = 0.0;\n  satrec.sgh2 = 0.0;\n  satrec.sgh3 = 0.0;\n  satrec.sgh4 = 0.0;\n  satrec.sh2 = 0.0;\n  satrec.sh3 = 0.0;\n  satrec.si2 = 0.0;\n  satrec.si3 = 0.0;\n  satrec.sl2 = 0.0;\n  satrec.sl3 = 0.0;\n  satrec.sl4 = 0.0;\n  satrec.gsto = 0.0;\n  satrec.xfact = 0.0;\n  satrec.xgh2 = 0.0;\n  satrec.xgh3 = 0.0;\n  satrec.xgh4 = 0.0;\n  satrec.xh2 = 0.0;\n  satrec.xh3 = 0.0;\n  satrec.xi2 = 0.0;\n  satrec.xi3 = 0.0;\n  satrec.xl2 = 0.0;\n  satrec.xl3 = 0.0;\n  satrec.xl4 = 0.0;\n  satrec.xlamo = 0.0;\n  satrec.zmol = 0.0;\n  satrec.zmos = 0.0;\n  satrec.atime = 0.0;\n  satrec.xli = 0.0;\n  satrec.xni = 0.0;\n  // sgp4fix - note the following variables are also passed directly via satrec.\n  // it is possible to streamline the sgp4init call by deleting the \"x\"\n  // variables, but the user would need to set the satrec.* values first. we\n  // include the additional assignments in case twoline2rv is not used.\n  satrec.bstar = xbstar;\n  satrec.ecco = xecco;\n  satrec.argpo = xargpo;\n  satrec.inclo = xinclo;\n  satrec.mo = xmo;\n  satrec.no = xno;\n  satrec.nodeo = xnodeo;\n  //  sgp4fix add opsmode\n  satrec.operationmode = opsmode;\n  // ------------------------ earth constants -----------------------\n  // sgp4fix identify constants and allow alternate values\n  var ss = 78.0 / earthRadius + 1.0;\n  // sgp4fix use multiply for speed instead of pow\n  var qzms2ttemp = (120.0 - 78.0) / earthRadius;\n  var qzms2t = qzms2ttemp * qzms2ttemp * qzms2ttemp * qzms2ttemp;\n  satrec.init = 'y';\n  satrec.t = 0.0;\n  var initlOptions = {\n    satn: satn,\n    ecco: satrec.ecco,\n    epoch: epoch,\n    inclo: satrec.inclo,\n    no: satrec.no,\n    method: satrec.method,\n    opsmode: satrec.operationmode\n  };\n  var initlResult = initl(initlOptions);\n  var ao = initlResult.ao,\n    con42 = initlResult.con42,\n    cosio = initlResult.cosio,\n    cosio2 = initlResult.cosio2,\n    eccsq = initlResult.eccsq,\n    omeosq = initlResult.omeosq,\n    posq = initlResult.posq,\n    rp = initlResult.rp,\n    rteosq = initlResult.rteosq,\n    sinio = initlResult.sinio;\n  satrec.no = initlResult.no;\n  satrec.con41 = initlResult.con41;\n  satrec.gsto = initlResult.gsto;\n  satrec.a = Math.pow(satrec.no * tumin, -2.0 / 3.0);\n  satrec.alta = satrec.a * (1.0 + satrec.ecco) - 1.0;\n  satrec.altp = satrec.a * (1.0 - satrec.ecco) - 1.0;\n  satrec.error = 0;\n  // sgp4fix remove this check as it is unnecessary\n  // the mrt check in sgp4 handles decaying satellite cases even if the starting\n  // condition is below the surface of te earth\n  // if (rp < 1.0)\n  // {\n  //   printf(\"// *** satn%d epoch elts sub-orbital ***\\n\", satn);\n  //   satrec.error = 5;\n  // }\n  if (omeosq >= 0.0 || satrec.no >= 0.0) {\n    satrec.isimp = 0;\n    if (rp < 220.0 / earthRadius + 1.0) {\n      satrec.isimp = 1;\n    }\n    sfour = ss;\n    qzms24 = qzms2t;\n    perige = (rp - 1.0) * earthRadius;\n    // - for perigees below 156 km, s and qoms2t are altered -\n    if (perige < 156.0) {\n      sfour = perige - 78.0;\n      if (perige < 98.0) {\n        sfour = 20.0;\n      }\n      // sgp4fix use multiply for speed instead of pow\n      var qzms24temp = (120.0 - sfour) / earthRadius;\n      qzms24 = qzms24temp * qzms24temp * qzms24temp * qzms24temp;\n      sfour = sfour / earthRadius + 1.0;\n    }\n    pinvsq = 1.0 / posq;\n    tsi = 1.0 / (ao - sfour);\n    satrec.eta = ao * satrec.ecco * tsi;\n    etasq = satrec.eta * satrec.eta;\n    eeta = satrec.ecco * satrec.eta;\n    psisq = Math.abs(1.0 - etasq);\n    coef = qzms24 * Math.pow(tsi, 4.0);\n    coef1 = coef / Math.pow(psisq, 3.5);\n    cc2 = coef1 * satrec.no * (ao * (1.0 + 1.5 * etasq + eeta * (4.0 + etasq)) + 0.375 * j2 * tsi / psisq * satrec.con41 * (8.0 + 3.0 * etasq * (8.0 + etasq)));\n    satrec.cc1 = satrec.bstar * cc2;\n    cc3 = 0.0;\n    if (satrec.ecco > 1.0e-4) {\n      cc3 = -2.0 * coef * tsi * j3oj2 * satrec.no * sinio / satrec.ecco;\n    }\n    satrec.x1mth2 = 1.0 - cosio2;\n    satrec.cc4 = 2.0 * satrec.no * coef1 * ao * omeosq * (satrec.eta * (2.0 + 0.5 * etasq) + satrec.ecco * (0.5 + 2.0 * etasq) - j2 * tsi / (ao * psisq) * (-3.0 * satrec.con41 * (1.0 - 2.0 * eeta + etasq * (1.5 - 0.5 * eeta)) + 0.75 * satrec.x1mth2 * (2.0 * etasq - eeta * (1.0 + etasq)) * Math.cos(2.0 * satrec.argpo)));\n    satrec.cc5 = 2.0 * coef1 * ao * omeosq * (1.0 + 2.75 * (etasq + eeta) + eeta * etasq);\n    cosio4 = cosio2 * cosio2;\n    temp1 = 1.5 * j2 * pinvsq * satrec.no;\n    temp2 = 0.5 * temp1 * j2 * pinvsq;\n    temp3 = -0.46875 * j4 * pinvsq * pinvsq * satrec.no;\n    satrec.mdot = satrec.no + 0.5 * temp1 * rteosq * satrec.con41 + 0.0625 * temp2 * rteosq * (13.0 - 78.0 * cosio2 + 137.0 * cosio4);\n    satrec.argpdot = -0.5 * temp1 * con42 + 0.0625 * temp2 * (7.0 - 114.0 * cosio2 + 395.0 * cosio4) + temp3 * (3.0 - 36.0 * cosio2 + 49.0 * cosio4);\n    xhdot1 = -temp1 * cosio;\n    satrec.nodedot = xhdot1 + (0.5 * temp2 * (4.0 - 19.0 * cosio2) + 2.0 * temp3 * (3.0 - 7.0 * cosio2)) * cosio;\n    xpidot = satrec.argpdot + satrec.nodedot;\n    satrec.omgcof = satrec.bstar * cc3 * Math.cos(satrec.argpo);\n    satrec.xmcof = 0.0;\n    if (satrec.ecco > 1.0e-4) {\n      satrec.xmcof = -x2o3 * coef * satrec.bstar / eeta;\n    }\n    satrec.nodecf = 3.5 * omeosq * xhdot1 * satrec.cc1;\n    satrec.t2cof = 1.5 * satrec.cc1;\n    // sgp4fix for divide by zero with xinco = 180 deg\n    if (Math.abs(cosio + 1.0) > 1.5e-12) {\n      satrec.xlcof = -0.25 * j3oj2 * sinio * (3.0 + 5.0 * cosio) / (1.0 + cosio);\n    } else {\n      satrec.xlcof = -0.25 * j3oj2 * sinio * (3.0 + 5.0 * cosio) / temp4;\n    }\n    satrec.aycof = -0.5 * j3oj2 * sinio;\n    // sgp4fix use multiply for speed instead of pow\n    var delmotemp = 1.0 + satrec.eta * Math.cos(satrec.mo);\n    satrec.delmo = delmotemp * delmotemp * delmotemp;\n    satrec.sinmao = Math.sin(satrec.mo);\n    satrec.x7thm1 = 7.0 * cosio2 - 1.0;\n    // --------------- deep space initialization -------------\n    if (2 * pi / satrec.no >= 225.0) {\n      satrec.method = 'd';\n      satrec.isimp = 1;\n      tc = 0.0;\n      inclm = satrec.inclo;\n      var dscomOptions = {\n        epoch: epoch,\n        ep: satrec.ecco,\n        argpp: satrec.argpo,\n        tc: tc,\n        inclp: satrec.inclo,\n        nodep: satrec.nodeo,\n        np: satrec.no,\n        e3: satrec.e3,\n        ee2: satrec.ee2,\n        peo: satrec.peo,\n        pgho: satrec.pgho,\n        pho: satrec.pho,\n        pinco: satrec.pinco,\n        plo: satrec.plo,\n        se2: satrec.se2,\n        se3: satrec.se3,\n        sgh2: satrec.sgh2,\n        sgh3: satrec.sgh3,\n        sgh4: satrec.sgh4,\n        sh2: satrec.sh2,\n        sh3: satrec.sh3,\n        si2: satrec.si2,\n        si3: satrec.si3,\n        sl2: satrec.sl2,\n        sl3: satrec.sl3,\n        sl4: satrec.sl4,\n        xgh2: satrec.xgh2,\n        xgh3: satrec.xgh3,\n        xgh4: satrec.xgh4,\n        xh2: satrec.xh2,\n        xh3: satrec.xh3,\n        xi2: satrec.xi2,\n        xi3: satrec.xi3,\n        xl2: satrec.xl2,\n        xl3: satrec.xl3,\n        xl4: satrec.xl4,\n        zmol: satrec.zmol,\n        zmos: satrec.zmos\n      };\n      var dscomResult = dscom(dscomOptions);\n      satrec.e3 = dscomResult.e3;\n      satrec.ee2 = dscomResult.ee2;\n      satrec.peo = dscomResult.peo;\n      satrec.pgho = dscomResult.pgho;\n      satrec.pho = dscomResult.pho;\n      satrec.pinco = dscomResult.pinco;\n      satrec.plo = dscomResult.plo;\n      satrec.se2 = dscomResult.se2;\n      satrec.se3 = dscomResult.se3;\n      satrec.sgh2 = dscomResult.sgh2;\n      satrec.sgh3 = dscomResult.sgh3;\n      satrec.sgh4 = dscomResult.sgh4;\n      satrec.sh2 = dscomResult.sh2;\n      satrec.sh3 = dscomResult.sh3;\n      satrec.si2 = dscomResult.si2;\n      satrec.si3 = dscomResult.si3;\n      satrec.sl2 = dscomResult.sl2;\n      satrec.sl3 = dscomResult.sl3;\n      satrec.sl4 = dscomResult.sl4;\n      sinim = dscomResult.sinim;\n      cosim = dscomResult.cosim;\n      em = dscomResult.em;\n      emsq = dscomResult.emsq;\n      s1 = dscomResult.s1;\n      s2 = dscomResult.s2;\n      s3 = dscomResult.s3;\n      s4 = dscomResult.s4;\n      s5 = dscomResult.s5;\n      ss1 = dscomResult.ss1;\n      ss2 = dscomResult.ss2;\n      ss3 = dscomResult.ss3;\n      ss4 = dscomResult.ss4;\n      ss5 = dscomResult.ss5;\n      sz1 = dscomResult.sz1;\n      sz3 = dscomResult.sz3;\n      sz11 = dscomResult.sz11;\n      sz13 = dscomResult.sz13;\n      sz21 = dscomResult.sz21;\n      sz23 = dscomResult.sz23;\n      sz31 = dscomResult.sz31;\n      sz33 = dscomResult.sz33;\n      satrec.xgh2 = dscomResult.xgh2;\n      satrec.xgh3 = dscomResult.xgh3;\n      satrec.xgh4 = dscomResult.xgh4;\n      satrec.xh2 = dscomResult.xh2;\n      satrec.xh3 = dscomResult.xh3;\n      satrec.xi2 = dscomResult.xi2;\n      satrec.xi3 = dscomResult.xi3;\n      satrec.xl2 = dscomResult.xl2;\n      satrec.xl3 = dscomResult.xl3;\n      satrec.xl4 = dscomResult.xl4;\n      satrec.zmol = dscomResult.zmol;\n      satrec.zmos = dscomResult.zmos;\n      nm = dscomResult.nm;\n      z1 = dscomResult.z1;\n      z3 = dscomResult.z3;\n      z11 = dscomResult.z11;\n      z13 = dscomResult.z13;\n      z21 = dscomResult.z21;\n      z23 = dscomResult.z23;\n      z31 = dscomResult.z31;\n      z33 = dscomResult.z33;\n      var dpperOptions = {\n        inclo: inclm,\n        init: satrec.init,\n        ep: satrec.ecco,\n        inclp: satrec.inclo,\n        nodep: satrec.nodeo,\n        argpp: satrec.argpo,\n        mp: satrec.mo,\n        opsmode: satrec.operationmode\n      };\n      var dpperResult = dpper(satrec, dpperOptions);\n      satrec.ecco = dpperResult.ep;\n      satrec.inclo = dpperResult.inclp;\n      satrec.nodeo = dpperResult.nodep;\n      satrec.argpo = dpperResult.argpp;\n      satrec.mo = dpperResult.mp;\n      argpm = 0.0;\n      nodem = 0.0;\n      mm = 0.0;\n      var dsinitOptions = {\n        cosim: cosim,\n        emsq: emsq,\n        argpo: satrec.argpo,\n        s1: s1,\n        s2: s2,\n        s3: s3,\n        s4: s4,\n        s5: s5,\n        sinim: sinim,\n        ss1: ss1,\n        ss2: ss2,\n        ss3: ss3,\n        ss4: ss4,\n        ss5: ss5,\n        sz1: sz1,\n        sz3: sz3,\n        sz11: sz11,\n        sz13: sz13,\n        sz21: sz21,\n        sz23: sz23,\n        sz31: sz31,\n        sz33: sz33,\n        t: satrec.t,\n        tc: tc,\n        gsto: satrec.gsto,\n        mo: satrec.mo,\n        mdot: satrec.mdot,\n        no: satrec.no,\n        nodeo: satrec.nodeo,\n        nodedot: satrec.nodedot,\n        xpidot: xpidot,\n        z1: z1,\n        z3: z3,\n        z11: z11,\n        z13: z13,\n        z21: z21,\n        z23: z23,\n        z31: z31,\n        z33: z33,\n        ecco: satrec.ecco,\n        eccsq: eccsq,\n        em: em,\n        argpm: argpm,\n        inclm: inclm,\n        mm: mm,\n        nm: nm,\n        nodem: nodem,\n        irez: satrec.irez,\n        atime: satrec.atime,\n        d2201: satrec.d2201,\n        d2211: satrec.d2211,\n        d3210: satrec.d3210,\n        d3222: satrec.d3222,\n        d4410: satrec.d4410,\n        d4422: satrec.d4422,\n        d5220: satrec.d5220,\n        d5232: satrec.d5232,\n        d5421: satrec.d5421,\n        d5433: satrec.d5433,\n        dedt: satrec.dedt,\n        didt: satrec.didt,\n        dmdt: satrec.dmdt,\n        dnodt: satrec.dnodt,\n        domdt: satrec.domdt,\n        del1: satrec.del1,\n        del2: satrec.del2,\n        del3: satrec.del3,\n        xfact: satrec.xfact,\n        xlamo: satrec.xlamo,\n        xli: satrec.xli,\n        xni: satrec.xni\n      };\n      var dsinitResult = dsinit(dsinitOptions);\n      satrec.irez = dsinitResult.irez;\n      satrec.atime = dsinitResult.atime;\n      satrec.d2201 = dsinitResult.d2201;\n      satrec.d2211 = dsinitResult.d2211;\n      satrec.d3210 = dsinitResult.d3210;\n      satrec.d3222 = dsinitResult.d3222;\n      satrec.d4410 = dsinitResult.d4410;\n      satrec.d4422 = dsinitResult.d4422;\n      satrec.d5220 = dsinitResult.d5220;\n      satrec.d5232 = dsinitResult.d5232;\n      satrec.d5421 = dsinitResult.d5421;\n      satrec.d5433 = dsinitResult.d5433;\n      satrec.dedt = dsinitResult.dedt;\n      satrec.didt = dsinitResult.didt;\n      satrec.dmdt = dsinitResult.dmdt;\n      satrec.dnodt = dsinitResult.dnodt;\n      satrec.domdt = dsinitResult.domdt;\n      satrec.del1 = dsinitResult.del1;\n      satrec.del2 = dsinitResult.del2;\n      satrec.del3 = dsinitResult.del3;\n      satrec.xfact = dsinitResult.xfact;\n      satrec.xlamo = dsinitResult.xlamo;\n      satrec.xli = dsinitResult.xli;\n      satrec.xni = dsinitResult.xni;\n    }\n    // ----------- set variables if not deep space -----------\n    if (satrec.isimp !== 1) {\n      cc1sq = satrec.cc1 * satrec.cc1;\n      satrec.d2 = 4.0 * ao * tsi * cc1sq;\n      temp = satrec.d2 * tsi * satrec.cc1 / 3.0;\n      satrec.d3 = (17.0 * ao + sfour) * temp;\n      satrec.d4 = 0.5 * temp * ao * tsi * (221.0 * ao + 31.0 * sfour) * satrec.cc1;\n      satrec.t3cof = satrec.d2 + 2.0 * cc1sq;\n      satrec.t4cof = 0.25 * (3.0 * satrec.d3 + satrec.cc1 * (12.0 * satrec.d2 + 10.0 * cc1sq));\n      satrec.t5cof = 0.2 * (3.0 * satrec.d4 + 12.0 * satrec.cc1 * satrec.d3 + 6.0 * satrec.d2 * satrec.d2 + 15.0 * cc1sq * (2.0 * satrec.d2 + cc1sq));\n    }\n    /* finally propogate to zero epoch to initialize all others. */\n    // sgp4fix take out check to let satellites process until they are actually below earth surface\n    // if(satrec.error == 0)\n  }\n  sgp4(satrec, 0);\n  satrec.init = 'n';\n}\n\n/* -----------------------------------------------------------------------------\n *\n *                           function twoline2satrec\n *\n *  this function converts the two line element set character string data to\n *    variables and initializes the sgp4 variables. several intermediate varaibles\n *    and quantities are determined. note that the result is a structure so multiple\n *    satellites can be processed simultaneously without having to reinitialize. the\n *    verification mode is an important option that permits quick checks of any\n *    changes to the underlying technical theory. this option works using a\n *    modified tle file in which the start, stop, and delta time values are\n *    included at the end of the second line of data. this only works with the\n *    verification mode. the catalog mode simply propagates from -1440 to 1440 min\n *    from epoch and is useful when performing entire catalog runs.\n *\n *  author        : david vallado                  719-573-2600    1 mar 2001\n *\n *  inputs        :\n *    longstr1    - first line of the tle\n *    longstr2    - second line of the tle\n *    typerun     - type of run                    verification 'v', catalog 'c',\n *                                                 manual 'm'\n *    typeinput   - type of manual input           mfe 'm', epoch 'e', dayofyr 'd'\n *    opsmode     - mode of operation afspc or improved 'a', 'i'\n *    whichconst  - which set of constants to use  72, 84\n *\n *  outputs       :\n *    satrec      - structure containing all the sgp4 satellite information\n *\n *  coupling      :\n *    getgravconst-\n *    days2mdhms  - conversion of days to month, day, hour, minute, second\n *    jday        - convert day month year hour minute second into julian date\n *    sgp4init    - initialize the sgp4 variables\n *\n *  references    :\n *    norad spacetrack report #3\n *    vallado, crawford, hujsak, kelso  2006\n --------------------------------------------------------------------------- */\n/**\n * Return a Satellite imported from two lines of TLE data.\n *\n * Provide the two TLE lines as strings `tleLine1` and `tleLine2`,\n * and select which standard set of gravitational constants you want\n * by providing `gravity_constants`:\n *\n * `sgp4.propagation.wgs72` - Standard WGS 72 model\n * `sgp4.propagation.wgs84` - More recent WGS 84 model\n * `sgp4.propagation.wgs72old` - Legacy support for old SGP4 behavior\n *\n * Normally, computations are made using letious recent improvements\n * to the algorithm.  If you want to turn some of these off and go\n * back into \"afspc\" mode, then set `afspc_mode` to `True`.\n */\nfunction twoline2satrec(longstr1, longstr2) {\n  var opsmode = 'i';\n  var error = 0;\n  var satnum = longstr1.substring(2, 7);\n  var epochyr = parseInt(longstr1.substring(18, 20), 10);\n  var epochdays = parseFloat(longstr1.substring(20, 32));\n  var ndot = parseFloat(longstr1.substring(33, 43));\n  var nddot = parseFloat(\"\".concat(longstr1.substring(44, 45), \".\").concat(longstr1.substring(45, 50), \"E\").concat(longstr1.substring(50, 52)));\n  var bstar = parseFloat(\"\".concat(longstr1.substring(53, 54), \".\").concat(longstr1.substring(54, 59), \"E\").concat(longstr1.substring(59, 61)));\n  // satrec.satnum = longstr2.substring(2, 7);\n  // ---- find standard orbital elements ----\n  var inclo = parseFloat(longstr2.substring(8, 16)) * deg2rad;\n  var nodeo = parseFloat(longstr2.substring(17, 25)) * deg2rad;\n  var ecco = parseFloat(\".\".concat(longstr2.substring(26, 33).replace(/\\s/g, '0')));\n  var argpo = parseFloat(longstr2.substring(34, 42)) * deg2rad;\n  var mo = parseFloat(longstr2.substring(43, 51)) * deg2rad;\n  // ---- find no, ndot, nddot ----\n  var no = parseFloat(longstr2.substring(52, 63)) / xpdotp;\n  // satrec.nddot= satrec.nddot * Math.pow(10.0, nexp);\n  // satrec.bstar= satrec.bstar * Math.pow(10.0, ibexp);\n  // ---- convert to sgp4 units ----\n  // satrec.ndot /= (xpdotp * 1440.0); // ? * minperday\n  // satrec.nddot /= (xpdotp * 1440.0 * 1440);\n  // ----------------------------------------------------------------\n  // find sgp4epoch time of element set\n  // remember that sgp4 uses units of days from 0 jan 1950 (sgp4epoch)\n  // and minutes from the epoch (time)\n  // ----------------------------------------------------------------\n  // ---------------- temp fix for years from 1957-2056 -------------------\n  // --------- correct fix will occur when year is 4-digit in tle ---------\n  var year = epochyr < 57 ? epochyr + 2000 : epochyr + 1900;\n  var mdhmsResult = days2mdhms(year, epochdays);\n  var mon = mdhmsResult.mon,\n    day = mdhmsResult.day,\n    hr = mdhmsResult.hr,\n    minute = mdhmsResult.minute,\n    sec = mdhmsResult.sec;\n  var jdsatepoch = jday(year, mon, day, hr, minute, sec);\n  var satrec = {\n    error: error,\n    satnum: satnum,\n    epochyr: epochyr,\n    epochdays: epochdays,\n    ndot: ndot,\n    nddot: nddot,\n    bstar: bstar,\n    inclo: inclo,\n    nodeo: nodeo,\n    ecco: ecco,\n    argpo: argpo,\n    mo: mo,\n    no: no,\n    jdsatepoch: jdsatepoch\n  };\n  //  ---------------- initialize the orbit at sgp4epoch -------------------\n  sgp4init(satrec, {\n    opsmode: opsmode,\n    satn: satrec.satnum,\n    epoch: satrec.jdsatepoch - 2433281.5,\n    xbstar: satrec.bstar,\n    xecco: satrec.ecco,\n    xargpo: satrec.argpo,\n    xinclo: satrec.inclo,\n    xmo: satrec.mo,\n    xno: satrec.no,\n    xnodeo: satrec.nodeo\n  });\n  return satrec;\n}\n/* -----------------------------------------------------------------------------\n *\n *                           function json2satrec\n *\n *  this function converts the OMM json data to variables and initializes the sgp4\n *    variables. several intermediate varaibles and quantities are determined. note\n *    that the result is a structure so multiple satellites can be processed\n *    simultaneously without having to reinitialize. the verification mode is an\n *    important option that permits quick checks of any changes to the underlying\n *    technical theory. this option works using a modified tle file in which the\n *    start, stop, and delta time values are included at the end of the second line\n *    of data. this only works with the verification mode. the catalog mode simply\n *    propagates from -1440 to 1440 min from epoch and is useful when performing\n *    entire catalog runs.\n *\n *  author        : Hariharan Vitaladevuni                   18 Aug 2023\n *                  Theodore Kruczek                         19 Aug 2023\n *\n *  inputs        :\n *    jsonobj     - OMM json data\n *    opsmode     - mode of operation afspc or improved 'a', 'i'. Default: 'i'.\n *\n *  outputs       :\n *    satrec      - structure containing all the sgp4 satellite information\n *\n *  coupling      :\n *    days2mdhms  - conversion of days to month, day, hour, minute, second\n *    jday        - convert day month year hour minute second into julian date\n *    sgp4init    - initialize the sgp4 variables\n *\n *  warning       : the epoch date in OMM format is more accurate than TLE format!\n *                  this will result in extremely close, but different\n *                  position/velocity values. Depending on your use case, it may\n *                  be better to use twoline2satrec, but for the average user this\n *                  will provide comparable results.\n *\n *  references    :\n *    https://celestrak.org/NORAD/documentation/gp-data-formats.php\n --------------------------------------------------------------------------- */\nfunction json2satrec(jsonobj) {\n  var opsmode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'i';\n  var error = 0;\n  var satnum = jsonobj.NORAD_CAT_ID.toString();\n  var epoch = new Date(jsonobj.EPOCH.endsWith('Z') ? jsonobj.EPOCH : jsonobj.EPOCH + 'Z');\n  var year = epoch.getUTCFullYear();\n  var epochyr = Number(year.toString().slice(-2));\n  var epochdays = (epoch.valueOf() - new Date(Date.UTC(year, 0, 1, 0, 0, 0)).valueOf()) / (86400 * 1000) + 1;\n  var ndot = Number(jsonobj.MEAN_MOTION_DOT);\n  var nddot = Number(jsonobj.MEAN_MOTION_DDOT);\n  var bstar = Number(jsonobj.BSTAR);\n  var inclo = Number(jsonobj.INCLINATION) * deg2rad;\n  var nodeo = Number(jsonobj.RA_OF_ASC_NODE) * deg2rad;\n  var ecco = Number(jsonobj.ECCENTRICITY);\n  var argpo = Number(jsonobj.ARG_OF_PERICENTER) * deg2rad;\n  var mo = Number(jsonobj.MEAN_ANOMALY) * deg2rad;\n  var no = Number(jsonobj.MEAN_MOTION) / xpdotp;\n  // ----------------------------------------------------------------\n  // find sgp4epoch time of element set\n  // remember that sgp4 uses units of days from 0 jan 1950 (sgp4epoch)\n  // and minutes from the epoch (time)\n  // ----------------------------------------------------------------\n  var mdhmsResult = days2mdhms(year, epochdays);\n  var mon = mdhmsResult.mon,\n    day = mdhmsResult.day,\n    hr = mdhmsResult.hr,\n    minute = mdhmsResult.minute,\n    sec = mdhmsResult.sec;\n  var jdsatepoch = jday(year, mon, day, hr, minute, sec);\n  var satrec = {\n    error: error,\n    satnum: satnum,\n    epochyr: epochyr,\n    epochdays: epochdays,\n    ndot: ndot,\n    nddot: nddot,\n    bstar: bstar,\n    inclo: inclo,\n    nodeo: nodeo,\n    ecco: ecco,\n    argpo: argpo,\n    mo: mo,\n    no: no,\n    jdsatepoch: jdsatepoch\n  };\n  //  ---------------- initialize the orbit at sgp4epoch -------------------\n  sgp4init(satrec, {\n    opsmode: opsmode,\n    satn: satrec.satnum,\n    epoch: satrec.jdsatepoch - 2433281.5,\n    xbstar: satrec.bstar,\n    xecco: satrec.ecco,\n    xargpo: satrec.argpo,\n    xinclo: satrec.inclo,\n    xmo: satrec.mo,\n    xno: satrec.no,\n    xnodeo: satrec.nodeo\n  });\n  return satrec;\n}\n\nfunction propagate(satrec) {\n  for (var _len = arguments.length, jdayArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    jdayArgs[_key - 1] = arguments[_key];\n  }\n  // Return a position and velocity vector for a given date and time.\n  var j = jday.apply(void 0, jdayArgs);\n  var m = (j - satrec.jdsatepoch) * minutesPerDay;\n  return sgp4(satrec, m);\n}\n\nvar earthRotation = 7.292115E-5;\nvar c = 299792.458; // Speed of light in km/s\n/**\n * Negative range rate means the satellite is moving towards the observer and\n * its frequency is shifted higher because 1 minus a negative range rate is\n * positive. If the range rate is positive, the satellite is moving away from\n * the observer and its frequency is shifted lower.\n */\nfunction dopplerFactor(observerCoordsEcf, positionEcf, velocityEcf) {\n  var rangeX = positionEcf.x - observerCoordsEcf.x;\n  var rangeY = positionEcf.y - observerCoordsEcf.y;\n  var rangeZ = positionEcf.z - observerCoordsEcf.z;\n  var length = Math.sqrt(Math.pow(rangeX, 2) + Math.pow(rangeY, 2) + Math.pow(rangeZ, 2));\n  var rangeVel = {\n    x: velocityEcf.x + earthRotation * observerCoordsEcf.y,\n    y: velocityEcf.y - earthRotation * observerCoordsEcf.x,\n    z: velocityEcf.z\n  };\n  var rangeRate = (rangeX * rangeVel.x + rangeY * rangeVel.y + rangeZ * rangeVel.z) / length;\n  return 1 - rangeRate / c;\n}\n\nfunction radiansToDegrees(radians) {\n  return radians * rad2deg;\n}\nfunction degreesToRadians(degrees) {\n  return degrees * deg2rad;\n}\nfunction degreesLat(radians) {\n  if (radians < -pi / 2 || radians > pi / 2) {\n    throw new RangeError('Latitude radians must be in range [-pi/2; pi/2].');\n  }\n  return radiansToDegrees(radians);\n}\nfunction degreesLong(radians) {\n  if (radians < -pi || radians > pi) {\n    throw new RangeError('Longitude radians must be in range [-pi; pi].');\n  }\n  return radiansToDegrees(radians);\n}\nfunction radiansLat(degrees) {\n  if (degrees < -90 || degrees > 90) {\n    throw new RangeError('Latitude degrees must be in range [-90; 90].');\n  }\n  return degreesToRadians(degrees);\n}\nfunction radiansLong(degrees) {\n  if (degrees < -180 || degrees > 180) {\n    throw new RangeError('Longitude degrees must be in range [-180; 180].');\n  }\n  return degreesToRadians(degrees);\n}\nfunction geodeticToEcf(_ref) {\n  var longitude = _ref.longitude,\n    latitude = _ref.latitude,\n    height = _ref.height;\n  var a = 6378.137;\n  var b = 6356.7523142;\n  var f = (a - b) / a;\n  var e2 = 2 * f - f * f;\n  var normal = a / Math.sqrt(1 - e2 * (Math.sin(latitude) * Math.sin(latitude)));\n  var x = (normal + height) * Math.cos(latitude) * Math.cos(longitude);\n  var y = (normal + height) * Math.cos(latitude) * Math.sin(longitude);\n  var z = (normal * (1 - e2) + height) * Math.sin(latitude);\n  return {\n    x: x,\n    y: y,\n    z: z\n  };\n}\nfunction eciToGeodetic(eci, gmst) {\n  // http://www.celestrak.com/columns/v02n03/\n  var a = 6378.137;\n  var b = 6356.7523142;\n  var R = Math.sqrt(eci.x * eci.x + eci.y * eci.y);\n  var f = (a - b) / a;\n  var e2 = 2 * f - f * f;\n  var longitude = Math.atan2(eci.y, eci.x) - gmst;\n  while (longitude < -pi) {\n    longitude += twoPi;\n  }\n  while (longitude > pi) {\n    longitude -= twoPi;\n  }\n  var kmax = 20;\n  var k = 0;\n  var latitude = Math.atan2(eci.z, Math.sqrt(eci.x * eci.x + eci.y * eci.y));\n  var C;\n  while (k++ < kmax) {\n    C = 1 / Math.sqrt(1 - e2 * (Math.sin(latitude) * Math.sin(latitude)));\n    latitude = Math.atan2(eci.z + a * C * e2 * Math.sin(latitude), R);\n  }\n  var height = R / Math.cos(latitude) - a * C;\n  return {\n    longitude: longitude,\n    latitude: latitude,\n    height: height\n  };\n}\nfunction ecfToEci(ecf, gmst) {\n  // ccar.colorado.edu/ASEN5070/handouts/coordsys.doc\n  //\n  // [X]     [C -S  0][X]\n  // [Y]  =  [S  C  0][Y]\n  // [Z]eci  [0  0  1][Z]ecf\n  //\n  var X = ecf.x * Math.cos(gmst) - ecf.y * Math.sin(gmst);\n  var Y = ecf.x * Math.sin(gmst) + ecf.y * Math.cos(gmst);\n  var Z = ecf.z;\n  return {\n    x: X,\n    y: Y,\n    z: Z\n  };\n}\nfunction eciToEcf(eci, gmst) {\n  // ccar.colorado.edu/ASEN5070/handouts/coordsys.doc\n  //\n  // [X]     [C -S  0][X]\n  // [Y]  =  [S  C  0][Y]\n  // [Z]eci  [0  0  1][Z]ecf\n  //\n  //\n  // Inverse:\n  // [X]     [C  S  0][X]\n  // [Y]  =  [-S C  0][Y]\n  // [Z]ecf  [0  0  1][Z]eci\n  var x = eci.x * Math.cos(gmst) + eci.y * Math.sin(gmst);\n  var y = eci.x * -Math.sin(gmst) + eci.y * Math.cos(gmst);\n  var z = eci.z;\n  return {\n    x: x,\n    y: y,\n    z: z\n  };\n}\nfunction topocentric(observerGeodetic, satelliteEcf) {\n  // http://www.celestrak.com/columns/v02n02/\n  // TS Kelso's method, except I'm using ECF frame\n  // and he uses ECI.\n  var longitude = observerGeodetic.longitude,\n    latitude = observerGeodetic.latitude;\n  var observerEcf = geodeticToEcf(observerGeodetic);\n  var rx = satelliteEcf.x - observerEcf.x;\n  var ry = satelliteEcf.y - observerEcf.y;\n  var rz = satelliteEcf.z - observerEcf.z;\n  var topS = Math.sin(latitude) * Math.cos(longitude) * rx + Math.sin(latitude) * Math.sin(longitude) * ry - Math.cos(latitude) * rz;\n  var topE = -Math.sin(longitude) * rx + Math.cos(longitude) * ry;\n  var topZ = Math.cos(latitude) * Math.cos(longitude) * rx + Math.cos(latitude) * Math.sin(longitude) * ry + Math.sin(latitude) * rz;\n  return {\n    topS: topS,\n    topE: topE,\n    topZ: topZ\n  };\n}\nfunction topocentricToLookAngles(tc) {\n  var topS = tc.topS,\n    topE = tc.topE,\n    topZ = tc.topZ;\n  var rangeSat = Math.sqrt(topS * topS + topE * topE + topZ * topZ);\n  var El = Math.asin(topZ / rangeSat);\n  var Az = Math.atan2(-topE, topS) + pi;\n  return {\n    azimuth: Az,\n    elevation: El,\n    rangeSat: rangeSat // Range in km\n  };\n}\nfunction ecfToLookAngles(observerGeodetic, satelliteEcf) {\n  var topocentricCoords = topocentric(observerGeodetic, satelliteEcf);\n  return topocentricToLookAngles(topocentricCoords);\n}\n\n////////////////////////////////////////////////////////////////////////////////////\n/* Line by Line MATLAB-to-Javascript conversion of \"sun.mat\" from Vallado package */\n////////////////////////////////////////////////////////////////////////////////////\n/* -----------------------------------------------------------------------------\n *\n *                              function sunPos\n *\n *  this function calculates the geocentric equatorial position vector\n *      the sun given the julian date.  this is the low precision formula and\n *      is valid for years from 1950 to 2050.  accuaracy of apparent coordinates\n *      is 0.01  degrees.  notice many of the calculations are performed in\n *      degrees, and are not changed until later.  this is due to the fact that\n *      the almanac uses degrees exclusively in their formulations.\n *\n *  author        : david vallado                  719-573-2600    1 mar 2001\n *\n *  inputs          description                       range / units\n *      jd          - julian date                       days from 4713 bc\n *\n *  outputs       :\n *      rsun        - ijk position vector of the sun    au\n *      rtasc       - right ascension                   rad\n *      decl        - declination                       rad\n *\n *  coupling      :\n *      -\n *\n *  references    :\n *      VALLADO, DAVID A. (2022) ‘Computer software in MATLAB’, in Fundamentals of astrodynamics and applications. 5th edn.\n *      Computer software in MATLAB: http://celestrak.org/software/vallado-sw.php\n *  --------------------------------------------------------------------------- */\nfunction sunPos(jday) {\n  // -------------------------  implementation   -----------------\n  // -------------------  initialize values   --------------------\n  var tut1 = (jday - 2451545) / 36525;\n  var meanlong = (280.460 + 36000.77 * tut1) % 360; //deg\n  var ttdb = tut1; // is this declaration required instead of replacing `ttdb` with `tut1`\n  var meananomaly = (357.5277233 + 35999.05034 * ttdb * deg2rad) % twoPi; //rad\n  if (meananomaly < 0) {\n    meananomaly += twoPi;\n  }\n  var eclplong_raw = (meanlong + 1.914666471 * Math.sin(meananomaly) + 0.019994643 * Math.sin(2.0 * meananomaly)) % 360.0 * deg2rad; //rad\n  var obliquity = (23.439291 - 0.0130042 * ttdb) * deg2rad; //rad\n  // --------- find magnitude of sun vector, and it's components ------\n  var magr = 1.000140612 - 0.016708617 * Math.cos(meananomaly) - 0.000139589 * Math.cos(2.0 * meananomaly); // in au's\n  var rsun = [magr * Math.cos(eclplong_raw), magr * Math.cos(obliquity) * Math.sin(eclplong_raw), magr * Math.sin(obliquity) * Math.sin(eclplong_raw)];\n  var rtasc_raw = Math.atan(Math.cos(obliquity) * Math.tan(eclplong_raw));\n  var rtasc = rtasc_raw;\n  if (Math.abs(eclplong_raw - rtasc) > pi * 0.5) {\n    rtasc += 0.5 * pi * Math.round((eclplong_raw - rtasc_raw) / (0.5 * pi));\n  }\n  var decl = Math.asin(Math.sin(obliquity) * Math.sin(eclplong_raw));\n  return {\n    rsun: rsun,\n    rtasc: rtasc,\n    decl: decl\n  };\n}\n/* Original MATLAB code for Sun position from Vallado package (sun.mat)  */\n/*\nfunction [rsun,rtasc,decl] = sun ( jd );\n\n        twopi      =     2.0*pi;\n        deg2rad    =     pi/180.0;\n        show = 'n';\n\n        % -------------------------  implementation   -----------------\n        % -------------------  initialize values   --------------------\n        tut1= ( jd - 2451545.0  )/ 36525.0;\n\n        if show == 'y'\n            fprintf(1,'tut1 %14.9f \\n',tut1);\n        end\n\n        meanlong= 280.460  + 36000.77*tut1;\n        meanlong= rem( meanlong,360.0  );  %deg\n\n        ttdb= tut1;\n        meananomaly= 357.5277233  + 35999.05034 *ttdb;\n        meananomaly= rem( meananomaly*deg2rad,twopi );  %rad\n        if ( meananomaly < 0.0  )\n            meananomaly= twopi + meananomaly;\n        end\n\n        eclplong_raw= meanlong + 1.914666471 *sin(meananomaly) ...\n                    + 0.019994643 *sin(2.0 *meananomaly); %deg\n        eclplong_raw= rem( eclplong_raw,360.0  );  %deg\n\n        obliquity= 23.439291  - 0.0130042 *ttdb;  %deg\n\n        eclplong_raw = eclplong_raw *deg2rad;\n        obliquity= obliquity *deg2rad;\n\n        % --------- find magnitude of sun vector, )   components ------\n        magr= 1.000140612  - 0.016708617 *cos( meananomaly ) ...\n                              - 0.000139589 *cos( 2.0 *meananomaly );    % in au's\n\n        rsun(1)= magr*cos( eclplong_raw );\n        rsun(2)= magr*cos(obliquity)*sin(eclplong_raw);\n        rsun(3)= magr*sin(obliquity)*sin(eclplong_raw);\n\n        if show == 'y'\n            fprintf(1,'meanlon %11.6f meanan %11.6f eclplon %11.6f obli %11.6f \\n', ...\n                    meanlong,meananomaly/deg2rad,eclplong_raw/deg2rad,obliquity/deg2rad);\n            fprintf(1,'rs %11.9f %11.9f %11.9f \\n',rsun);\n            fprintf(1,'magr %14.7f \\n',magr);\n        end\n\n        rtasc= atan( cos(obliquity)*tan(eclplong_raw) );\n\n        % --- check that rtasc is in the same quadrant as eclplong_raw ----\n        if ( eclplong_raw < 0.0  )\n            eclplong_raw= eclplong_raw + twopi;    % make sure it's in 0 to 2pi range\n        end\n        if ( abs( eclplong_raw-rtasc ) > pi*0.5  )\n            rtasc= rtasc + 0.5 *pi*round( (eclplong_raw-rtasc)/(0.5 *pi));\n        end\n        decl = asin( sin(obliquity)*sin(eclplong_raw) );\n*/\n\nexport { SatRecError, constants, degreesLat, degreesLong, degreesToRadians, dopplerFactor, ecfToEci, ecfToLookAngles, eciToEcf, eciToGeodetic, geodeticToEcf, gstime, invjday, jday, json2satrec, propagate, radiansLat, radiansLong, radiansToDegrees, sgp4, sunPos, twoline2satrec };\n","const satellite = require('satellite.js');\r\nconst {\n  astronomicalUnitKm,\n  deg2rad,\n  earthRadiusKm,\n  msPerDay,\n} = require('./constants');\n\nconst observerWarningCache = new Set();\nconst DEFAULT_MAX_TRANSITS = 100;\n\r\n// 将输入值判断为普通对象，避免把数组、Date 或其它宿主对象误当成结构化配置。\r\nfunction isPlainObject(value) {\r\n  return Boolean(value) && Object.prototype.toString.call(value) === '[object Object]';\r\n}\r\n\r\n// 把支持的各种时间输入统一成 Date，后续传播与采样只处理这一种时间形式。\r\nfunction toDate(value) {\r\n  if (value == null) {\r\n    return new Date();\r\n  }\r\n\r\n  if (value instanceof Date) {\r\n    return new Date(value.getTime());\r\n  }\r\n\r\n  if (typeof value === 'number' && Number.isFinite(value)) {\r\n    return new Date(value);\r\n  }\r\n\r\n  if (typeof value === 'string') {\r\n    const parsed = new Date(value);\r\n    if (!Number.isNaN(parsed.getTime())) {\r\n      return parsed;\r\n    }\r\n  }\r\n\r\n  if (typeof value.valueOf === 'function') {\r\n    const numeric = value.valueOf();\r\n    if (typeof numeric === 'number' && Number.isFinite(numeric)) {\r\n      return new Date(numeric);\r\n    }\r\n  }\r\n\r\n  throw new Error('Invalid time value');\r\n}\r\n\r\n// 将时间对象转换成毫秒时间戳，便于做窗口比较和差值计算。\r\nfunction toMillis(value) {\r\n  return toDate(value).getTime();\r\n}\r\n\r\n// 把 number、字符串或者“单位对象”都折算成毫秒长度，方便星历采样复用同一套入口。\r\nfunction toDurationMs(interval, fallbackMs = 60 * 1000) {\n  if (interval == null) {\r\n    return fallbackMs;\r\n  }\r\n\r\n  if (typeof interval === 'number') {\r\n    if (!Number.isFinite(interval) || interval <= 0) {\r\n      throw new Error('Interval must be a positive number');\r\n    }\r\n    return interval;\r\n  }\r\n\r\n  if (typeof interval === 'string') {\r\n    const parsed = Number(interval);\r\n    if (Number.isFinite(parsed) && parsed > 0) {\r\n      return parsed;\r\n    }\r\n  }\r\n\r\n  if (isPlainObject(interval)) {\r\n    const unitMap = {\r\n      milliseconds: 1,\r\n      ms: 1,\r\n      seconds: 1000,\r\n      second: 1000,\r\n      s: 1000,\r\n      minutes: 60 * 1000,\r\n      minute: 60 * 1000,\r\n      m: 60 * 1000,\r\n      hours: 60 * 60 * 1000,\r\n      hour: 60 * 60 * 1000,\r\n      h: 60 * 60 * 1000,\r\n      days: 24 * 60 * 60 * 1000,\r\n      day: 24 * 60 * 60 * 1000,\r\n      d: 24 * 60 * 60 * 1000,\r\n      weeks: 7 * 24 * 60 * 60 * 1000,\r\n      week: 7 * 24 * 60 * 60 * 1000,\r\n      w: 7 * 24 * 60 * 60 * 1000,\r\n    };\r\n\r\n    const total = Object.entries(interval).reduce((sum, [key, rawValue]) => {\r\n      const multiplier = unitMap[key];\r\n      if (!multiplier || typeof rawValue !== 'number') {\r\n        return sum;\r\n      }\r\n      return sum + rawValue * multiplier;\r\n    }, 0);\r\n\r\n    if (total > 0) {\r\n      return total;\r\n    }\r\n  }\r\n\r\n  throw new Error('Invalid interval value');\n}\n\nfunction observerWarning(message, key) {\n  if (observerWarningCache.has(key)) {\n    return;\n  }\n  observerWarningCache.add(key);\n  console.warn(`[jspredict-dc] ${message}`);\n}\n\nfunction normalizeObserverAltitudeKm(rawAltitude, apiName = 'observerLocation') {\n  const altitude = Number(rawAltitude);\n  ensureFiniteObserverValue(altitude, 'altitude');\n\n  // 对数组等无单位输入做轻量推断：常见误用是把米值直接传到 km 字段。\n  if (Math.abs(altitude) > 200) {\n    const converted = altitude / 1000;\n    observerWarning(\n      `${apiName}: altitude=${altitude} was interpreted as meters and converted to ${converted} km.`,\n      `${apiName}|alt-auto-meter-convert|${altitude}`,\n    );\n    return converted;\n  }\n\n  return altitude;\n}\n\nfunction ensureFiniteObserverValue(value, fieldName) {\n  if (!Number.isFinite(value)) {\n    throw new Error(`Observer ${fieldName} must be a finite number`);\n  }\n}\n\nfunction warnObserverSuspiciousInput(observer, apiName) {\n  const [latitude, longitude, altitude] = observer;\n  const prefix = `${apiName} observerLocation`;\n\n  if (Math.abs(latitude) > 90) {\n    observerWarning(\n      `${prefix}: latitude=${latitude} is outside [-90, 90]. You may have passed [lon, lat, alt] instead of [lat, lon, alt].`,\n      `${apiName}|lat-out-of-range|${latitude}|${longitude}`,\n    );\n  }\n\n  if (Math.abs(longitude) > 180) {\n    observerWarning(\n      `${prefix}: longitude=${longitude} is outside [-180, 180].`,\n      `${apiName}|lon-out-of-range|${longitude}`,\n    );\n  }\n\n  if (Math.abs(latitude) > 90 && Math.abs(longitude) <= 90) {\n    observerWarning(\n      `${prefix}: value pattern strongly suggests [lon, lat, alt] was provided.`,\n      `${apiName}|swapped-lat-lon|${latitude}|${longitude}`,\n    );\n  }\n\n  if (altitude > 20) {\n    observerWarning(\n      `${prefix}: altitude=${altitude} km is unusually high for a ground observer. Check that altitude is provided in kilometers.`,\n      `${apiName}|alt-high|${altitude}`,\n    );\n  }\n\n  if (altitude > 100) {\n    observerWarning(\n      `${prefix}: altitude=${altitude} km is likely not a ground-observer altitude. Unit may be meters instead of kilometers.`,\n      `${apiName}|alt-very-high|${altitude}`,\n    );\n  }\n\n  if (altitude < -1) {\n    observerWarning(\n      `${prefix}: altitude=${altitude} km is below a typical ground range. Check unit and sign.`,\n      `${apiName}|alt-low|${altitude}`,\n    );\n  }\n}\n\r\n// 统一观察者输入，支持数组和对象两种写法，最终都返回 [lat, lon, alt]。\r\nfunction normalizeObserverLocation(observerLocation) {\n  if (observerLocation == null) {\r\n    return null;\r\n  }\r\n\r\n  if (Array.isArray(observerLocation)) {\r\n    if (observerLocation.length < 3) {\r\n      throw new Error('Observer location must contain latitude, longitude, and altitude');\r\n    }\r\n    const normalized = [\n      Number(observerLocation[0]),\n      Number(observerLocation[1]),\n      normalizeObserverAltitudeKm(observerLocation[2]),\n    ];\n    ensureFiniteObserverValue(normalized[0], 'latitude');\n    ensureFiniteObserverValue(normalized[1], 'longitude');\n    ensureFiniteObserverValue(normalized[2], 'altitude');\n    return normalized;\n  }\n\r\n  if (isPlainObject(observerLocation)) {\n    const latitude = observerLocation.latitude ?? observerLocation.lat;\n    const longitude = observerLocation.longitude ?? observerLocation.lon ?? observerLocation.lng;\n    const altitudeMeters = observerLocation.altMeters ?? observerLocation.altitudeMeters ?? observerLocation.heightMeters;\n    const altitude = altitudeMeters == null\n      ? (observerLocation.altitude ?? observerLocation.height ?? observerLocation.alt)\n      : Number(altitudeMeters) / 1000;\n\n    if ([latitude, longitude, altitude].some((value) => value == null)) {\n      throw new Error('Observer location object must expose latitude, longitude, and altitude');\n    }\n\n    if (altitudeMeters != null) {\n      observerWarning(\n        `observerLocation: altMeters=${altitudeMeters} converted to ${(Number(altitudeMeters) / 1000)} km.`,\n        `observerLocation|alt-meters-field|${altitudeMeters}`,\n      );\n    }\n\n    const normalized = [Number(latitude), Number(longitude), normalizeObserverAltitudeKm(altitude)];\n    ensureFiniteObserverValue(normalized[0], 'latitude');\n    ensureFiniteObserverValue(normalized[1], 'longitude');\n    ensureFiniteObserverValue(normalized[2], 'altitude');\n    return normalized;\n  }\n\r\n  throw new Error('Unsupported observer location format');\r\n}\r\n\r\n// 需要地面观测几何的 API 必须显式提供观测者位置，避免后续循环里出现隐式 NaN 故障。\r\nfunction requireObserverLocation(observerLocation, apiName) {\n  const normalized = normalizeObserverLocation(observerLocation);\n  if (!normalized) {\n    throw new Error(`${apiName} requires observerLocation`);\n  }\n  warnObserverSuspiciousInput(normalized, apiName);\n  return normalized;\n}\n\r\n// 对经度做 -180 到 180 的闭环处理，避免跨日界线时出现不连续跳变。\r\nfunction clamp(value, min, max) {\r\n  return Math.min(max, Math.max(min, value));\r\n}\r\n\r\n// 对经度做闭环归一化，保持输出结果适合地图或天球显示。\r\nfunction boundLongitude(longitude) {\r\n  let value = longitude;\r\n  while (value < -180) {\r\n    value += 360;\r\n  }\r\n  while (value > 180) {\r\n    value -= 360;\r\n  }\r\n  return value;\r\n}\r\n\r\n// 从 TLE / OMM 文本中拆出干净的行，后续解析统一使用去空白后的结果。\r\nfunction splitOrbitLines(text) {\r\n  return text\r\n    .replace(/\\r/g, '\\n')\r\n    .split('\\n')\r\n    .map((line) => line.trim())\r\n    .filter(Boolean);\r\n}\r\n\r\n// 判断字符串是否看起来像 XML 轨道源。\r\nfunction looksLikeXml(text) {\r\n  return /^\\s*<[\\s\\S]+>\\s*$/.test(text);\r\n}\r\n\r\n// 判断字符串是否看起来像 JSON 轨道源。\r\nfunction looksLikeJson(text) {\n  return /^\\s*[{[]/.test(text);\n}\n\nfunction looksLikeCsv(text) {\n  const lines = splitOrbitLines(text);\n  if (lines.length < 2) {\n    return false;\n  }\n  return lines[0].includes(',') && /(OBJECT_NAME|NORAD_CAT_ID|EPOCH)/.test(lines[0]);\n}\n\nfunction looksLikeKvn(text) {\n  return /^\\s*[A-Z0-9_]+\\s*=\\s*/m.test(text);\n}\n\r\n// 提取 XML 中某个标签的文本值，同时兼容带命名空间前缀的字段。\r\nfunction extractXmlTag(xml, tagName) {\r\n  const escaped = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n  const patterns = [\r\n    new RegExp(`<${escaped}\\\\b[^>]*>([\\\\s\\\\S]*?)</${escaped}>`, 'i'),\r\n    new RegExp(`<[^:>]+:${escaped}\\\\b[^>]*>([\\\\s\\\\S]*?)</[^:>]+:${escaped}>`, 'i'),\r\n  ];\r\n\r\n  for (const pattern of patterns) {\r\n    const match = pattern.exec(xml);\r\n    if (match) {\r\n      return match[1].trim();\r\n    }\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\n// 将 OMM 记录裁剪到库真正会使用的字段，并规范化日期与字符串值。\r\nfunction normalizeOmmRecord(record) {\n  const omm = {};\n  const keys = [\n    'CCSDS_OMM_VERS',\n    'COMMENT',\n    'CLASSIFICATION',\n    'OBJECT_NAME',\n    'OBJECT_ID',\n    'OBJECT_TYPE',\n    'COUNTRY_CODE',\n    'LAUNCH_DATE',\n    'SITE',\n    'DECAY_DATE',\n    'FILE',\n    'GP_ID',\n    'CENTER_NAME',\n    'REF_FRAME',\n    'REF_FRAME_EPOCH',\n    'TIME_SYSTEM',\n    'MEAN_ELEMENT_THEORY',\n    'CREATION_DATE',\n    'ORIGINATOR',\n    'MEAN_MOTION',\n    'ECCENTRICITY',\r\n    'INCLINATION',\r\n    'RA_OF_ASC_NODE',\r\n    'ARG_OF_PERICENTER',\r\n    'MEAN_ANOMALY',\r\n    'EPHEMERIS_TYPE',\r\n    'CLASSIFICATION_TYPE',\r\n    'NORAD_CAT_ID',\r\n    'ELEMENT_SET_NO',\r\n    'REV_AT_EPOCH',\r\n    'BSTAR',\r\n    'MEAN_MOTION_DOT',\r\n    'MEAN_MOTION_DDOT',\r\n    'EPOCH',\r\n  ];\r\n\r\n  for (const key of keys) {\r\n    const value = record[key];\r\n    if (value !== undefined && value !== null && value !== '') {\r\n      omm[key] = typeof value === 'string' ? value.trim() : value;\r\n    }\r\n  }\r\n\r\n  if (omm.EPOCH instanceof Date) {\r\n    omm.EPOCH = omm.EPOCH.toISOString();\r\n  }\r\n\r\n  return omm;\r\n}\r\n\r\n// 从 OMM XML 文本中抽取字段并归一化，作为 JSON GP / XML 两种输入的统一入口。\r\nfunction parseOmmXml(xml) {\n  const omm = {};\n  const fields = [\n    'CCSDS_OMM_VERS',\n    'COMMENT',\n    'CLASSIFICATION',\n    'OBJECT_NAME',\n    'OBJECT_ID',\n    'OBJECT_TYPE',\n    'COUNTRY_CODE',\n    'LAUNCH_DATE',\n    'SITE',\n    'DECAY_DATE',\n    'FILE',\n    'GP_ID',\n    'CENTER_NAME',\n    'REF_FRAME',\n    'REF_FRAME_EPOCH',\n    'TIME_SYSTEM',\n    'MEAN_ELEMENT_THEORY',\n    'CREATION_DATE',\n    'ORIGINATOR',\n    'MEAN_MOTION',\n    'ECCENTRICITY',\r\n    'INCLINATION',\r\n    'RA_OF_ASC_NODE',\r\n    'ARG_OF_PERICENTER',\r\n    'MEAN_ANOMALY',\r\n    'EPHEMERIS_TYPE',\r\n    'CLASSIFICATION_TYPE',\r\n    'NORAD_CAT_ID',\r\n    'ELEMENT_SET_NO',\r\n    'REV_AT_EPOCH',\r\n    'BSTAR',\r\n    'MEAN_MOTION_DOT',\r\n    'MEAN_MOTION_DDOT',\r\n    'EPOCH',\r\n  ];\r\n\r\n  for (const field of fields) {\r\n    const value = extractXmlTag(xml, field);\r\n    if (value !== undefined) {\r\n      omm[field] = value;\r\n    }\r\n  }\r\n\r\n  if (!omm.EPOCH) {\r\n    const epoch = extractXmlTag(xml, 'EPOCH');\r\n    if (epoch) {\r\n      omm.EPOCH = epoch;\r\n    }\r\n  }\r\n\r\n  return normalizeOmmRecord(omm);\n}\n\nfunction parseCsvRecord(text) {\n  const lines = splitOrbitLines(text);\n  if (lines.length < 2) {\n    throw new Error('Invalid CSV orbit source');\n  }\n\n  const headers = lines[0].split(',').map((part) => part.trim());\n  const values = lines[1].split(',').map((part) => part.trim());\n  const record = {};\n\n  headers.forEach((header, index) => {\n    if (!header) {\n      return;\n    }\n    record[header] = values[index] ?? '';\n  });\n\n  return normalizeOmmRecord(record);\n}\n\nfunction parseKvnRecord(text) {\n  const record = {};\n  const lines = text.replace(/\\r/g, '\\n').split('\\n');\n\n  for (const line of lines) {\n    const match = /^\\s*([A-Z0-9_]+)\\s*=\\s*(.*?)\\s*$/.exec(line);\n    if (!match) {\n      continue;\n    }\n    const [, key, value] = match;\n    record[key] = value;\n  }\n\n  return normalizeOmmRecord(record);\n}\n\r\n// 把用户传入的任意轨道源写法统一成内部标准结构，后续只处理少数几种分支。\r\nfunction parseOrbitSource(source) {\r\n  if (source && typeof source === 'object' && source.kind === 'satrec' && source.satrec) {\r\n    return {\r\n      kind: 'satrec',\r\n      satrec: source.satrec,\r\n    };\r\n  }\r\n\r\n  if (source && typeof source === 'object' && source.kind === 'tle' && source.tle) {\n    return {\n      kind: 'tle',\n      tle: {\n        name: source.tle.name ? String(source.tle.name).trim() : undefined,\n        line1: String(source.tle.line1).trim(),\n        line2: String(source.tle.line2).trim(),\n      },\n    };\r\n  }\r\n\r\n  if (source && typeof source === 'object' && source.kind === 'omm' && source.omm) {\r\n    return {\r\n      kind: 'omm',\r\n      omm: normalizeOmmRecord(source.omm),\r\n    };\r\n  }\r\n\r\n  if (source && typeof source === 'object' && source.no != null && source.ecco != null && source.inclo != null) {\r\n    return {\r\n      kind: 'satrec',\r\n      satrec: source,\r\n    };\r\n  }\r\n\r\n  if (typeof source === 'string') {\r\n    const text = source.trim();\r\n    if (!text) {\r\n      throw new Error('Orbit source is empty');\r\n    }\r\n\r\n    if (looksLikeXml(text)) {\n      return {\n        kind: 'omm',\n        source: text,\n        omm: parseOmmXml(text),\n      };\n    }\n\n    if (looksLikeJson(text)) {\n      try {\n        const parsed = JSON.parse(text);\n        if (Array.isArray(parsed)) {\n          if (parsed.length !== 1) {\n            throw new Error('JSON orbit source must contain exactly one record');\n          }\n          return parseOrbitSource(parsed[0]);\n        }\n        return parseOrbitSource(parsed);\n      } catch (error) {\n        throw new Error(`Invalid JSON orbit source: ${error.message}`);\n      }\n    }\n\n    if (looksLikeCsv(text)) {\n      return {\n        kind: 'omm',\n        source: text,\n        omm: parseCsvRecord(text),\n      };\n    }\n\n    if (looksLikeKvn(text)) {\n      return {\n        kind: 'omm',\n        source: text,\n        omm: parseKvnRecord(text),\n      };\n    }\n\n    const lines = splitOrbitLines(text);\n    if (lines.length === 2) {\r\n      return {\r\n        kind: 'tle',\r\n        source: text,\r\n        tle: {\r\n          line1: lines[0],\r\n          line2: lines[1],\r\n        },\r\n      };\r\n    }\r\n\r\n    if (lines.length >= 3) {\n      return {\n        kind: 'tle',\n        source: text,\n        tle: {\n          name: lines[0],\n          line1: lines[lines.length - 2],\n          line2: lines[lines.length - 1],\n        },\n      };\r\n    }\r\n\r\n    throw new Error('Invalid orbit source string');\r\n  }\r\n\n  if (Array.isArray(source)) {\n    if (source.length !== 1) {\n      throw new Error('Orbit source array must contain exactly one record');\n    }\n    return parseOrbitSource(source[0]);\n  }\n\r\n  if (isPlainObject(source)) {\r\n    if (source.line1 && source.line2) {\n      return {\n        kind: 'tle',\n        tle: {\n          name: source.name ? String(source.name).trim() : undefined,\n          line1: String(source.line1).trim(),\n          line2: String(source.line2).trim(),\n        },\n      };\r\n    }\r\n\r\n    if (source.type === 'tle' && source.tle) {\r\n      return parseOrbitSource(source.tle);\r\n    }\r\n\r\n    if (source.format === 'tle' && source.line1 && source.line2) {\n      return {\n        kind: 'tle',\n        tle: {\n          name: source.name ? String(source.name).trim() : undefined,\n          line1: String(source.line1).trim(),\n          line2: String(source.line2).trim(),\n        },\n      };\r\n    }\r\n\r\n    if (source.type === 'omm' && source.omm) {\r\n      return {\r\n        kind: 'omm',\r\n        omm: normalizeOmmRecord(source.omm),\r\n      };\r\n    }\r\n\r\n    if (\r\n      source.MEAN_MOTION != null ||\r\n      source.ECCENTRICITY != null ||\r\n      source.INCLINATION != null ||\r\n      source.NORAD_CAT_ID != null\r\n    ) {\r\n      return {\r\n        kind: 'omm',\r\n        omm: normalizeOmmRecord(source),\r\n      };\r\n    }\r\n  }\r\n\r\n  throw new Error('Unsupported orbit source format');\r\n}\r\n\r\n// 把归一化后的轨道源转换为 satellite.js 可直接传播的 satrec。\r\nfunction toSatrec(source) {\r\n  const normalized = parseOrbitSource(source);\r\n  const satelliteLib = satellite;\r\n\r\n  if (normalized.kind === 'satrec') {\r\n    return normalized.satrec;\r\n  }\r\n\r\n  if (normalized.kind === 'tle') {\r\n    return satelliteLib.twoline2satrec(normalized.tle.line1, normalized.tle.line2);\r\n  }\r\n\r\n  if (normalized.kind === 'omm') {\r\n    if (typeof satelliteLib.json2satrec !== 'function') {\r\n      throw new Error('satellite.js json2satrec is unavailable in this build');\r\n    }\r\n    return satelliteLib.json2satrec(normalized.omm);\r\n  }\r\n\r\n  throw new Error('Unable to convert orbit source to satrec');\r\n}\r\n\r\n// 兼容不同 satellite.js 构建里的时间接口，统一拿到 satrec 的历元毫秒值。\r\nfunction satrecEpochMillis(satrec) {\n  if (Number.isFinite(satrec.jdsatepoch)) {\n    return (satrec.jdsatepoch - 2440587.5) * msPerDay;\n  }\n\r\n  if (Number.isFinite(satrec.epochyr) && Number.isFinite(satrec.epochdays)) {\r\n    const year = satrec.epochyr < 100 ? 2000 + satrec.epochyr : satrec.epochyr;\r\n    return Date.UTC(year, 0, 1) + (satrec.epochdays - 1) * msPerDay;\r\n  }\r\n\n  return NaN;\n}\n\nfunction toFiniteNumberOrNull(value) {\n  if (value == null || value === '') {\n    return null;\n  }\n  const numeric = Number(value);\n  return Number.isFinite(numeric) ? numeric : null;\n}\n\nfunction toTrimmedStringOrNull(value) {\n  if (value == null) {\n    return null;\n  }\n  const text = String(value).trim();\n  return text ? text : null;\n}\n\nfunction toIsoStringOrNull(value) {\n  if (value == null || value === '') {\n    return null;\n  }\n\n  if (value instanceof Date) {\n    return Number.isNaN(value.getTime()) ? null : value.toISOString();\n  }\n\n  const text = String(value).trim();\n  if (!text) {\n    return null;\n  }\n  const normalizedText = /(?:Z|[+\\-]\\d{2}:\\d{2})$/i.test(text) ? text : `${text}Z`;\n  const parsed = new Date(normalizedText);\n  return Number.isNaN(parsed.getTime()) ? null : parsed.toISOString();\n}\n\nfunction formatInternationalDesignator(rawDesignator) {\n  const compact = toTrimmedStringOrNull(rawDesignator);\n  if (!compact) {\n    return null;\n  }\n\n  if (/^\\d{4}-\\d{3}[A-Z]+$/i.test(compact)) {\n    return compact.toUpperCase();\n  }\n\n  const match = /^(\\d{2})(\\d{3})([A-Z]+)$/i.exec(compact.replace(/\\s+/g, ''));\n  if (!match) {\n    return compact.toUpperCase();\n  }\n\n  const shortYear = Number(match[1]);\n  const fullYear = shortYear < 57 ? 2000 + shortYear : 1900 + shortYear;\n  return `${fullYear}-${match[2]}${match[3].toUpperCase()}`;\n}\n\nfunction parseInternationalDesignator(designator) {\n  const canonical = formatInternationalDesignator(designator);\n  if (!canonical) {\n    return {\n      internationalDesignator: null,\n      launchYear: null,\n      launchNumberOfYear: null,\n      launchPiece: null,\n    };\n  }\n\n  const match = /^(\\d{4})-(\\d{3})([A-Z]+)$/.exec(canonical);\n  if (!match) {\n    return {\n      internationalDesignator: canonical,\n      launchYear: null,\n      launchNumberOfYear: null,\n      launchPiece: null,\n    };\n  }\n\n  return {\n    internationalDesignator: canonical,\n    launchYear: Number(match[1]),\n    launchNumberOfYear: Number(match[2]),\n    launchPiece: match[3],\n  };\n}\n\nfunction classifyOrbit(semiMajorAxisKm, eccentricity) {\n  if (!Number.isFinite(semiMajorAxisKm) || semiMajorAxisKm <= 0) {\n    return null;\n  }\n\n  const e = Number.isFinite(eccentricity) ? eccentricity : 0;\n  const perigeeAltitudeKm = semiMajorAxisKm * (1 - e) - earthRadiusKm;\n  const apogeeAltitudeKm = semiMajorAxisKm * (1 + e) - earthRadiusKm;\n\n  if (Math.abs(semiMajorAxisKm - 42164) < 2000 && e < 0.1) {\n    return 'GEO';\n  }\n\n  if (apogeeAltitudeKm < 2000) {\n    return 'LEO';\n  }\n\n  if (apogeeAltitudeKm < 35786) {\n    return 'MEO';\n  }\n\n  if (perigeeAltitudeKm < 2000 && apogeeAltitudeKm >= 35786) {\n    return 'HEO';\n  }\n\n  return 'DEEP_SPACE';\n}\n\nfunction parseTleMetadata(tle, satrec) {\n  const line1 = tle.line1;\n  const line2 = tle.line2;\n  const epochMs = satrecEpochMillis(satrec);\n  const epoch = Number.isFinite(epochMs) ? new Date(epochMs).toISOString() : null;\n  const designatorInfo = parseInternationalDesignator(line1.substring(9, 17));\n  const meanMotion = toFiniteNumberOrNull(line2.substring(52, 63));\n  const eccentricity = toFiniteNumberOrNull(`0.${line2.substring(26, 33).replace(/\\s/g, '0')}`);\n  const orbitalPeriodSeconds = Number.isFinite(meanMotion) && meanMotion > 0\n    ? 86400 / meanMotion\n    : null;\n  const semiMajorAxisKm = Number.isFinite(satrec.a) ? satrec.a * earthRadiusKm : null;\n\n  return {\n    format: 'tle',\n    name: toTrimmedStringOrNull(tle.name),\n    noradCatalogNumber: toTrimmedStringOrNull(line1.substring(2, 7)),\n    classification: toTrimmedStringOrNull(line1.substring(7, 8)),\n    ...designatorInfo,\n    centerName: 'EARTH',\n    referenceFrame: 'TEME',\n    timeSystem: 'UTC',\n    meanElementTheory: 'SGP4',\n    epoch,\n    epochMs: Number.isFinite(epochMs) ? epochMs : null,\n    epochYear: Number.isFinite(satrec.epochyr) ? (satrec.epochyr < 57 ? 2000 + satrec.epochyr : 1900 + satrec.epochyr) : null,\n    epochDayOfYear: Number.isFinite(satrec.epochdays) ? satrec.epochdays : null,\n    meanMotion,\n    meanMotionFirstDerivative: Number.isFinite(satrec.ndot) ? satrec.ndot : null,\n    meanMotionSecondDerivative: Number.isFinite(satrec.nddot) ? satrec.nddot : null,\n    bstar: Number.isFinite(satrec.bstar) ? satrec.bstar : null,\n    inclination: toFiniteNumberOrNull(line2.substring(8, 16)),\n    rightAscensionOfAscendingNode: toFiniteNumberOrNull(line2.substring(17, 25)),\n    eccentricity,\n    argumentOfPerigee: toFiniteNumberOrNull(line2.substring(34, 42)),\n    meanAnomaly: toFiniteNumberOrNull(line2.substring(43, 51)),\n    ephemerisType: toTrimmedStringOrNull(line1.substring(62, 63)),\n    elementSetNumber: toFiniteNumberOrNull(line1.substring(64, 68)),\n    revolutionNumberAtEpoch: toFiniteNumberOrNull(line2.substring(63, 68)),\n    semiMajorAxisKm,\n    orbitalPeriodSeconds,\n    orbitClass: classifyOrbit(semiMajorAxisKm, eccentricity),\n    isDeepSpace: Boolean(Number.isFinite(orbitalPeriodSeconds) && orbitalPeriodSeconds >= 225 * 60),\n    raw: {\n      line0: toTrimmedStringOrNull(tle.name),\n      line1,\n      line2,\n    },\n  };\n}\n\nfunction parseOmmMetadata(omm, satrec) {\n  const epoch = toIsoStringOrNull(omm.EPOCH);\n  const epochDate = epoch ? new Date(epoch) : null;\n  const epochMs = epochDate ? epochDate.getTime() : null;\n  const designatorInfo = parseInternationalDesignator(omm.OBJECT_ID);\n  const meanMotion = toFiniteNumberOrNull(omm.MEAN_MOTION);\n  const eccentricity = toFiniteNumberOrNull(omm.ECCENTRICITY);\n  const orbitalPeriodSeconds = Number.isFinite(meanMotion) && meanMotion > 0\n    ? 86400 / meanMotion\n    : null;\n  const semiMajorAxisKm = Number.isFinite(satrec.a) ? satrec.a * earthRadiusKm : null;\n\n  return {\n    format: 'omm',\n    name: toTrimmedStringOrNull(omm.OBJECT_NAME),\n    noradCatalogNumber: toTrimmedStringOrNull(omm.NORAD_CAT_ID),\n    classification: toTrimmedStringOrNull(omm.CLASSIFICATION_TYPE ?? omm.CLASSIFICATION),\n    ...designatorInfo,\n    objectType: toTrimmedStringOrNull(omm.OBJECT_TYPE),\n    countryCode: toTrimmedStringOrNull(omm.COUNTRY_CODE),\n    launchDate: toIsoStringOrNull(omm.LAUNCH_DATE),\n    decayDate: toIsoStringOrNull(omm.DECAY_DATE),\n    centerName: toTrimmedStringOrNull(omm.CENTER_NAME) ?? 'EARTH',\n    referenceFrame: toTrimmedStringOrNull(omm.REF_FRAME) ?? 'TEME',\n    referenceFrameEpoch: toIsoStringOrNull(omm.REF_FRAME_EPOCH),\n    timeSystem: toTrimmedStringOrNull(omm.TIME_SYSTEM) ?? 'UTC',\n    meanElementTheory: toTrimmedStringOrNull(omm.MEAN_ELEMENT_THEORY),\n    creationDate: toIsoStringOrNull(omm.CREATION_DATE),\n    originator: toTrimmedStringOrNull(omm.ORIGINATOR),\n    comment: toTrimmedStringOrNull(omm.COMMENT),\n    epoch,\n    epochMs,\n    epochYear: epochDate ? epochDate.getUTCFullYear() : null,\n    epochDayOfYear: epochDate ? ((epochMs - Date.UTC(epochDate.getUTCFullYear(), 0, 1)) / msPerDay) + 1 : null,\n    meanMotion,\n    meanMotionFirstDerivative: toFiniteNumberOrNull(omm.MEAN_MOTION_DOT),\n    meanMotionSecondDerivative: toFiniteNumberOrNull(omm.MEAN_MOTION_DDOT),\n    bstar: toFiniteNumberOrNull(omm.BSTAR),\n    inclination: toFiniteNumberOrNull(omm.INCLINATION),\n    rightAscensionOfAscendingNode: toFiniteNumberOrNull(omm.RA_OF_ASC_NODE),\n    eccentricity,\n    argumentOfPerigee: toFiniteNumberOrNull(omm.ARG_OF_PERICENTER),\n    meanAnomaly: toFiniteNumberOrNull(omm.MEAN_ANOMALY),\n    ephemerisType: toTrimmedStringOrNull(omm.EPHEMERIS_TYPE),\n    elementSetNumber: toFiniteNumberOrNull(omm.ELEMENT_SET_NO),\n    revolutionNumberAtEpoch: toFiniteNumberOrNull(omm.REV_AT_EPOCH),\n    semiMajorAxisKm,\n    orbitalPeriodSeconds,\n    orbitClass: classifyOrbit(semiMajorAxisKm, eccentricity),\n    isDeepSpace: Boolean(Number.isFinite(orbitalPeriodSeconds) && orbitalPeriodSeconds >= 225 * 60),\n    raw: { ...omm },\n  };\n}\n\nfunction parseSatrecMetadata(satrec) {\n  const epochMs = satrecEpochMillis(satrec);\n  const epoch = Number.isFinite(epochMs) ? new Date(epochMs).toISOString() : null;\n  const semiMajorAxisKm = Number.isFinite(satrec.a) ? satrec.a * earthRadiusKm : null;\n  const meanMotion = Number.isFinite(satrec.no) ? satrec.no * 1440 / (2 * Math.PI) : null;\n  const eccentricity = Number.isFinite(satrec.ecco) ? satrec.ecco : null;\n  const orbitalPeriodSeconds = Number.isFinite(meanMotion) && meanMotion > 0 ? 86400 / meanMotion : null;\n\n  return {\n    format: 'satrec',\n    name: null,\n    noradCatalogNumber: toTrimmedStringOrNull(satrec.satnum),\n    classification: null,\n    internationalDesignator: null,\n    launchYear: null,\n    launchNumberOfYear: null,\n    launchPiece: null,\n    centerName: 'EARTH',\n    referenceFrame: 'TEME',\n    timeSystem: 'UTC',\n    meanElementTheory: 'SGP4',\n    epoch,\n    epochMs: Number.isFinite(epochMs) ? epochMs : null,\n    epochYear: Number.isFinite(satrec.epochyr) ? (satrec.epochyr < 57 ? 2000 + satrec.epochyr : 1900 + satrec.epochyr) : null,\n    epochDayOfYear: Number.isFinite(satrec.epochdays) ? satrec.epochdays : null,\n    meanMotion,\n    meanMotionFirstDerivative: Number.isFinite(satrec.ndot) ? satrec.ndot : null,\n    meanMotionSecondDerivative: Number.isFinite(satrec.nddot) ? satrec.nddot : null,\n    bstar: Number.isFinite(satrec.bstar) ? satrec.bstar : null,\n    inclination: Number.isFinite(satrec.inclo) ? satrec.inclo / deg2rad : null,\n    rightAscensionOfAscendingNode: Number.isFinite(satrec.nodeo) ? satrec.nodeo / deg2rad : null,\n    eccentricity,\n    argumentOfPerigee: Number.isFinite(satrec.argpo) ? satrec.argpo / deg2rad : null,\n    meanAnomaly: Number.isFinite(satrec.mo) ? satrec.mo / deg2rad : null,\n    ephemerisType: null,\n    elementSetNumber: null,\n    revolutionNumberAtEpoch: null,\n    semiMajorAxisKm,\n    orbitalPeriodSeconds,\n    orbitClass: classifyOrbit(semiMajorAxisKm, eccentricity),\n    isDeepSpace: Boolean(Number.isFinite(orbitalPeriodSeconds) && orbitalPeriodSeconds >= 225 * 60),\n    raw: satrec,\n  };\n}\n\nfunction parseOrbitMetadata(source) {\n  const normalized = parseOrbitSource(source);\n  const satrec = toSatrec(normalized);\n\n  if (normalized.kind === 'tle') {\n    return parseTleMetadata(normalized.tle, satrec);\n  }\n\n  if (normalized.kind === 'omm') {\n    return parseOmmMetadata(normalized.omm, satrec);\n  }\n\n  return parseSatrecMetadata(satrec);\n}\n\nfunction parseOrbitElements(source) {\n  const metadata = parseOrbitMetadata(source);\n  return {\n    epoch: metadata.epoch,\n    epochMs: metadata.epochMs,\n    epochYear: metadata.epochYear,\n    epochDayOfYear: metadata.epochDayOfYear,\n    meanMotion: metadata.meanMotion,\n    meanMotionFirstDerivative: metadata.meanMotionFirstDerivative,\n    meanMotionSecondDerivative: metadata.meanMotionSecondDerivative,\n    bstar: metadata.bstar,\n    inclination: metadata.inclination,\n    rightAscensionOfAscendingNode: metadata.rightAscensionOfAscendingNode,\n    eccentricity: metadata.eccentricity,\n    argumentOfPerigee: metadata.argumentOfPerigee,\n    meanAnomaly: metadata.meanAnomaly,\n    semiMajorAxisKm: metadata.semiMajorAxisKm,\n    orbitalPeriodSeconds: metadata.orbitalPeriodSeconds,\n    revolutionNumberAtEpoch: metadata.revolutionNumberAtEpoch,\n    ephemerisType: metadata.ephemerisType,\n  };\n}\n\nfunction parseTle(source) {\n  const normalized = parseOrbitSource(source);\n  if (normalized.kind !== 'tle') {\n    throw new Error('parseTle requires TLE input');\n  }\n  return parseOrbitMetadata(normalized);\n}\n\r\n// 计算给定时间的 GMST，优先使用库自带方法，兼容旧签名回退。\r\nfunction getGmst(date) {\r\n  const jday = satellite.jday(date);\r\n  try {\r\n    return satellite.gstime(jday);\r\n  } catch (error) {\r\n    return satellite.gstime(\r\n      date.getUTCFullYear(),\r\n      date.getUTCMonth() + 1,\r\n      date.getUTCDate(),\r\n      date.getUTCHours(),\r\n      date.getUTCMinutes(),\r\n      date.getUTCSeconds(),\r\n    );\r\n  }\r\n}\r\n\r\n// 调用传播器获取某一时刻的卫星状态，并兼容不同 satellite.js 版本的参数签名。\r\nfunction getPropagation(date, satrec) {\r\n  try {\r\n    const propagated = satellite.propagate(satrec, date);\r\n    if (propagated && propagated.position) {\r\n      return propagated;\r\n    }\r\n  } catch (error) {\r\n    // Fall through to the component-based call for older satellite.js builds.\r\n  }\r\n\r\n  return satellite.propagate(\r\n    satrec,\r\n    date.getUTCFullYear(),\r\n    date.getUTCMonth() + 1,\r\n    date.getUTCDate(),\r\n    date.getUTCHours(),\r\n    date.getUTCMinutes(),\r\n    date.getUTCSeconds(),\r\n  );\r\n}\r\n\r\n// 计算太阳位置向量，用于判断卫星是否处于地影中。\r\nfunction getSunVector(date) {\r\n  if (typeof satellite.sunPos === 'function') {\r\n    const solar = satellite.sunPos(satellite.jday(date));\r\n    if (solar && Array.isArray(solar.rsun) && solar.rsun.length >= 3) {\r\n      return {\r\n        x: solar.rsun[0] * astronomicalUnitKm,\r\n        y: solar.rsun[1] * astronomicalUnitKm,\r\n        z: solar.rsun[2] * astronomicalUnitKm,\r\n      };\r\n    }\r\n  }\r\n\r\n  const time = date.getTime() / msPerDay + 2444238.5;\r\n  const mjd = time - 2415020.0;\r\n  const year = 1900 + mjd / 365.25;\r\n  const deltaEt = 26.465 + 0.747622 * (year - 1950) + 1.886913 * Math.sin((2 * Math.PI) * (year - 1975) / 33);\r\n  const T = (mjd + deltaEt / (msPerDay / 1000)) / 36525.0;\r\n  const M = deg2rad * ((358.47583 + ((35999.04975 * T) % 360) - (0.000150 + 0.0000033 * T) * Math.pow(T, 2)) % 360);\r\n  const L = deg2rad * ((279.69668 + ((36000.76892 * T) % 360) + 0.0003025 * Math.pow(T, 2)) % 360);\r\n  const e = 0.01675104 - (0.0000418 + 0.000000126 * T) * T;\r\n  const C = deg2rad * ((1.919460 - (0.004789 + 0.000100 * T) * T) * Math.sin(M) + (0.020094 - 0.000100 * T) * Math.sin(2 * M) + 0.000293 * Math.sin(3 * M));\r\n  const O = deg2rad * ((259.18 - 1934.142 * T) % 360.0);\r\n  const Lsa = (L + C - deg2rad * (0.00569 - 0.00479 * Math.sin(O))) % (2 * Math.PI);\r\n  const nu = (M + C) % (2 * Math.PI);\r\n  let radius = 1.0000002 * (1 - Math.pow(e, 2)) / (1 + e * Math.cos(nu));\r\n  const eps = deg2rad * (23.452294 - (0.0130125 + (0.00000164 - 0.000000503 * T) * T) * T + 0.00256 * Math.cos(O));\r\n  radius = astronomicalUnitKm * radius;\r\n\r\n  return {\r\n    x: radius * Math.cos(Lsa),\r\n    y: radius * Math.sin(Lsa) * Math.cos(eps),\r\n    z: radius * Math.sin(Lsa) * Math.sin(eps),\r\n  };\r\n}\r\n\r\n// 判断卫星是否被地球遮挡太阳，返回日照状态和阴影深度。\r\nfunction satEclipsed(position, sunVector) {\r\n  const positionMagnitude = Math.sqrt(position.x ** 2 + position.y ** 2 + position.z ** 2);\r\n  const sunDelta = {\r\n    x: sunVector.x - position.x,\r\n    y: sunVector.y - position.y,\r\n    z: sunVector.z - position.z,\r\n  };\r\n  const sunMagnitude = Math.sqrt(sunDelta.x ** 2 + sunDelta.y ** 2 + sunDelta.z ** 2);\r\n  const earthRadius = earthRadiusKm;\r\n  const sunRadius = 696000;\r\n  const sdEarth = Math.asin(clamp(earthRadius / positionMagnitude, -1, 1));\r\n  const sdSun = Math.asin(clamp(sunRadius / sunMagnitude, -1, 1));\r\n  const earth = {\r\n    x: -position.x,\r\n    y: -position.y,\r\n    z: -position.z,\r\n  };\r\n  const dot = sunVector.x * earth.x + sunVector.y * earth.y + sunVector.z * earth.z;\r\n  const delta = Math.acos(clamp(dot / (Math.sqrt(sunVector.x ** 2 + sunVector.y ** 2 + sunVector.z ** 2) * positionMagnitude), -1, 1));\r\n  const eclipseDepth = sdEarth - sdSun - delta;\r\n  return {\r\n    depth: eclipseDepth,\r\n    eclipsed: sdEarth >= sdSun && eclipseDepth >= 0,\r\n  };\r\n}\r\n\r\n// 判断轨道是否接近地球同步轨道，用于快速过滤不需要过境搜索的目标。\r\nfunction isGeostationary(satrec) {\r\n  const revPerDay = satrec.no * 24 * 60 / (2 * Math.PI);\r\n  return Math.abs(revPerDay - 1.0027) < 0.005;\r\n}\r\n\r\n// 判断给定卫星是否可能在当前观察者位置产生有效过境。\r\nfunction aosHappens(satrec, observerLocation) {\r\n  let meanMotion = satrec.no * 24 * 60 / (2 * Math.PI);\r\n  if (meanMotion === 0) {\r\n    return false;\r\n  }\r\n\r\n  let inclination = satrec.inclo / deg2rad;\r\n  if (inclination >= 90.0) {\r\n    inclination = 180.0 - inclination;\r\n  }\r\n\r\n  const sma = 331.25 * Math.exp(Math.log(1440.0 / meanMotion) * (2.0 / 3.0));\r\n  const apogee = sma * (1.0 + satrec.ecco) - earthRadiusKm;\r\n  return (Math.acos(earthRadiusKm / (apogee + earthRadiusKm)) + (inclination * deg2rad)) > Math.abs(observerLocation[0] * deg2rad);\r\n}\r\n\r\n// 通过历元和阻尼参数粗略判断卫星是否已经衰减失效。\r\nfunction decayed(satrec, startMs) {\r\n  const satelliteEpoch = satrecEpochMillis(satrec);\r\n  const meanMotion = satrec.no * 24 * 60 / (2 * Math.PI);\r\n  const drag = satrec.ndot * 24 * 60 * 24 * 60 / (2 * Math.PI);\r\n\r\n  if (!Number.isFinite(satelliteEpoch) || !Number.isFinite(meanMotion) || drag === 0) {\r\n    return false;\r\n  }\r\n\r\n  return satelliteEpoch + msPerDay * ((16.666666 - meanMotion) / (10.0 * Math.abs(drag))) < startMs;\r\n}\r\n\r\n// 组合几何条件和衰减判断，快速排除不需要继续搜索的轨道。\r\nfunction badSat(satrec, observerLocation, startMs) {\r\n  if (observerLocation && !aosHappens(satrec, observerLocation)) {\r\n    return true;\r\n  }\r\n\r\n  if (startMs != null && decayed(satrec, startMs)) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\n// 向量减法，供可见性和轨道可达性判断复用。\r\nfunction vecSub(v1, v2) {\r\n  return {\r\n    x: v1.x - v2.x,\r\n    y: v1.y - v2.y,\r\n    z: v1.z - v2.z,\r\n  };\r\n}\r\n\r\n// 计算向量模长。\r\nfunction magnitude(v) {\r\n  return Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\r\n}\r\n\r\n// 向量按标量缩放。\r\nfunction scalarMultiply(k, v) {\r\n  return {\r\n    x: k * v.x,\r\n    y: k * v.y,\r\n    z: k * v.z,\r\n  };\r\n}\r\n\r\n// 计算两个向量的夹角。\r\nfunction angle(v1, v2) {\r\n  const dot = (v1.x * v2.x + v1.y * v2.y + v1.z * v2.z);\r\n  return Math.acos(dot / (magnitude(v1) * magnitude(v2)));\r\n}\r\n\r\n// 观测单个时刻的卫星状态，返回地理位置、方位角、仰角、距离和多普勒等结果。\r\nfunction observeAt(source, observerLocation, time) {\n  const satrec = toSatrec(source);\r\n  const date = toDate(time);\r\n  const propagated = getPropagation(date, satrec);\r\n\r\n  if (!propagated || !propagated.position) {\r\n    return null;\r\n  }\r\n\r\n  const gmst = getGmst(date);\r\n  const geo = satellite.eciToGeodetic(propagated.position, gmst);\r\n  const sunVector = getSunVector(date);\r\n  const eclipse = satEclipsed(propagated.position, sunVector);\r\n  const altitude = geo.height;\r\n  const ratio = clamp(earthRadiusKm / Math.max(earthRadiusKm + altitude, 1e-6), -1, 1);\r\n\r\n  const track = {\n    timestamp: date.getTime(),\n    eci: propagated,\n    gmst,\n    latitude: geo.latitude / deg2rad,\r\n    longitude: boundLongitude(geo.longitude / deg2rad),\r\n    altitude,\r\n    footprint: 2 * earthRadiusKm * Math.acos(ratio),\r\n    sunlit: !eclipse.eclipsed,\r\n    eclipseDepth: eclipse.depth / deg2rad,\r\n  };\r\n\r\n  const normalizedObserver = normalizeObserverLocation(observerLocation);\n  if (normalizedObserver) {\n    warnObserverSuspiciousInput(normalizedObserver, 'observeAt');\n    const observerGd = {\n      longitude: normalizedObserver[1] * deg2rad,\n      latitude: normalizedObserver[0] * deg2rad,\n      height: normalizedObserver[2],\r\n    };\r\n\r\n    const positionEcf = satellite.eciToEcf(propagated.position, gmst);\r\n    const velocityEcf = satellite.eciToEcf(propagated.velocity, gmst);\r\n    const observerEcf = satellite.geodeticToEcf(observerGd);\r\n    const lookAngles = satellite.ecfToLookAngles(observerGd, positionEcf);\r\n    const doppler = satellite.dopplerFactor(observerEcf, positionEcf, velocityEcf);\r\n\r\n    track.azimuth = lookAngles.azimuth / deg2rad;\r\n    track.elevation = lookAngles.elevation / deg2rad;\r\n    track.rangeSat = lookAngles.rangeSat;\r\n    track.doppler = doppler;\r\n  }\r\n\r\n  return track;\r\n}\r\n\r\n// 从给定时刻向前后搜索卫星升起和落下的边界。\r\nfunction findAOS(satrec, observerLocation, startMs) {\r\n  let current = startMs;\r\n  let observed = observeAt(satrec, observerLocation, current);\r\n  if (!observed) {\r\n    return null;\r\n  }\r\n\r\n  let aostime = 0;\r\n  let iterations = 0;\r\n\r\n  if (observed.elevation > 0) {\r\n    return current;\r\n  }\r\n\r\n  while (observed.elevation < -1 && iterations < require('./runtime').maxIterations) {\r\n    current -= msPerDay * 0.00035 * (observed.elevation * ((observed.altitude / 8400.0) + 0.46) - 2.0);\r\n    observed = observeAt(satrec, observerLocation, current);\r\n    if (!observed) {\r\n      break;\r\n    }\r\n    iterations += 1;\r\n  }\r\n\r\n  iterations = 0;\r\n  while (aostime === 0 && iterations < require('./runtime').maxIterations) {\r\n    if (!observed) {\r\n      break;\r\n    }\r\n    if (Math.abs(observed.elevation) < 0.50) {\r\n      aostime = current;\r\n    } else {\r\n      current -= msPerDay * observed.elevation * Math.sqrt(observed.altitude) / 530000.0;\r\n      observed = observeAt(satrec, observerLocation, current);\r\n    }\r\n    iterations += 1;\r\n  }\r\n\r\n  if (aostime === 0) {\r\n    return null;\r\n  }\r\n\r\n  return aostime;\r\n}\r\n\r\n// 从当前的升起时刻继续搜索，找到过境结束时刻。\r\nfunction findLOS(satrec, observerLocation, startMs) {\r\n  let current = startMs;\r\n  let observed = observeAt(satrec, observerLocation, current);\r\n  let lostime = 0;\r\n  let iterations = 0;\r\n\r\n  while (lostime === 0 && iterations < require('./runtime').maxIterations) {\r\n    if (Math.abs(observed.elevation) < 0.50) {\r\n      lostime = current;\r\n    } else {\r\n      current += msPerDay * observed.elevation * Math.sqrt(observed.altitude) / 502500.0;\r\n      observed = observeAt(satrec, observerLocation, current);\r\n      if (!observed) {\r\n        break;\r\n      }\r\n    }\r\n    iterations += 1;\r\n  }\r\n\r\n  return lostime;\r\n}\r\n\r\n// 快速预测一次过境窗口，并估计峰值仰角、方位和持续时间。\r\nfunction quickPredict(satrec, observerLocation, startMs, endMs) {\n  if (isGeostationary(satrec)) {\r\n    return null;\r\n  }\r\n\r\n  if (badSat(satrec, observerLocation, startMs)) {\r\n    return null;\r\n  }\r\n\r\n  const transit = {};\r\n  let lastEl = 0;\r\n  let iterations = 0;\r\n  const maxIterations = require('./runtime').maxIterations;\r\n\r\n  let daynum = findAOS(satrec, observerLocation, startMs);\r\n  if (!daynum) {\r\n    return null;\r\n  }\r\n\r\n  transit.start = daynum;\r\n\r\n  let observed = observeAt(satrec, observerLocation, daynum);\r\n  if (!observed) {\r\n    return null;\r\n  }\r\n\r\n  let iel = Math.round(observed.elevation);\r\n  let maxEl = 0;\n  let apexAz = 0;\n  let apexTime = null;\n  let minAz = 360;\n  let maxAz = 0;\n\r\n  while (iel >= 0 && iterations < maxIterations && (!endMs || daynum < endMs)) {\r\n    lastEl = iel;\r\n    daynum += msPerDay * Math.cos((observed.elevation - 1.0) * deg2rad) * Math.sqrt(observed.altitude) / 25000.0;\r\n    observed = observeAt(satrec, observerLocation, daynum);\r\n    if (!observed) {\r\n      break;\r\n    }\r\n    iel = Math.round(observed.elevation);\r\n    if (maxEl < observed.elevation) {\n      maxEl = observed.elevation;\n      apexAz = observed.azimuth;\n      apexTime = daynum;\n    }\n    maxAz = Math.max(maxAz, observed.azimuth);\r\n    minAz = Math.min(minAz, observed.azimuth);\r\n    iterations += 1;\r\n  }\r\n\r\n  if (lastEl !== 0) {\r\n    daynum = findLOS(satrec, observerLocation, daynum);\r\n  }\r\n\r\n  transit.end = daynum;\r\n  transit.maxElevation = maxEl;\n  transit.apexAzimuth = apexAz;\n  transit.apexTime = apexTime;\n  transit.maxAzimuth = maxAz;\n  transit.minAzimuth = minAz;\r\n  transit.duration = transit.end - transit.start;\r\n\r\n  return transit;\r\n}\r\n\r\n// 判断两颗卫星之间的视线是否被地球遮挡。\r\nfunction isSatToSatVisible(pos1, pos2) {\r\n  const vec = vecSub(pos2, pos1);\r\n  const dist = magnitude(vec);\r\n\r\n  if (dist === 0) {\r\n    return false;\r\n  }\r\n\r\n  const a = vec.x * vec.x + vec.y * vec.y + vec.z * vec.z;\r\n  const b = 2 * (pos1.x * vec.x + pos1.y * vec.y + pos1.z * vec.z);\r\n  const c = pos1.x * pos1.x + pos1.y * pos1.y + pos1.z * pos1.z - earthRadiusKm * earthRadiusKm;\r\n  const discriminant = b * b - 4 * a * c;\r\n\r\n  if (discriminant < 0) {\r\n    return true;\r\n  }\r\n\r\n  const t1 = (-b + Math.sqrt(discriminant)) / (2 * a);\r\n  const t2 = (-b - Math.sqrt(discriminant)) / (2 * a);\r\n  return t1 < 0 || t1 > 1 || t2 < 0 || t2 > 1;\r\n}\r\n\r\n// 根据两次传播结果和相对速度，计算更合适的自适应步长。\r\nfunction adaptiveStep(eci1, eci2, isVisible, defaultStep) {\r\n  const dist = magnitude(vecSub(eci2.position, eci1.position));\r\n  const relSpeed = magnitude(vecSub(eci2.velocity, eci1.velocity));\r\n  if (relSpeed === 0) {\r\n    return defaultStep;\r\n  }\r\n\r\n  const minStep = 1;\r\n  // dist / relSpeed 已经是秒，不能再乘 1000。\r\n  const adaptiveStepValue = Math.max(minStep, Math.min(defaultStep, dist / relSpeed));\r\n  return isVisible ? defaultStep : Math.min(defaultStep, adaptiveStepValue / 2);\r\n}\r\n\r\n// 计算两个轨道源之间在给定时间段内的相互可见窗口。\r\nfunction satelliteVisibilityWindows(source1, source2, start, end, stepSeconds = 60) {\r\n  const satrec1 = toSatrec(source1);\r\n  const satrec2 = toSatrec(source2);\r\n  const startDate = toDate(start);\r\n  const endDate = toDate(end);\r\n  const windows = [];\r\n  let current = new Date(startDate.getTime());\r\n  let isVisible = false;\r\n  let windowStart = null;\r\n  const maxIterations = require('./runtime').maxIterations;\r\n\r\n  while (current <= endDate && windows.length < maxIterations) {\r\n    const eci1 = getPropagation(current, satrec1);\r\n    const eci2 = getPropagation(current, satrec2);\r\n\r\n    if (!eci1.position || !eci2.position) {\r\n      break;\r\n    }\r\n\r\n    const visible = isSatToSatVisible(eci1.position, eci2.position);\r\n    if (visible && !isVisible) {\r\n      isVisible = true;\r\n      windowStart = current.getTime();\r\n    } else if (!visible && isVisible) {\r\n      isVisible = false;\r\n      windows.push([windowStart, current.getTime()]);\r\n      windowStart = null;\r\n    }\r\n\r\n    const nextStep = adaptiveStep(eci1, eci2, visible, stepSeconds);\r\n    current = new Date(current.getTime() + nextStep * 1000);\r\n  }\r\n\r\n  if (isVisible && windowStart != null) {\r\n    windows.push([windowStart, endDate.getTime()]);\r\n  }\r\n\r\n  return windows;\r\n}\r\n\r\n// 以固定步长生成星历采样，用于绘图、表格或调试输出。\r\nfunction ephemeris(source, observerLocation, start, end, interval) {\n  const startDate = toDate(start);\r\n  const endDate = toDate(end);\r\n  const stepMs = toDurationMs(interval, 60 * 1000);\r\n  const observations = [];\r\n  const maxIterations = require('./runtime').maxIterations;\r\n  let current = new Date(startDate.getTime());\r\n  let iterations = 0;\r\n\r\n  while (current < endDate && iterations < maxIterations) {\r\n    const observation = observeAt(source, observerLocation, current);\r\n    if (!observation) {\r\n      break;\r\n    }\r\n    observations.push(observation);\r\n    current = new Date(current.getTime() + stepMs);\r\n    if (require('./runtime').printIntervalInfo) {\r\n      console.log(current.toISOString());\r\n    }\r\n    iterations += 1;\r\n  }\r\n\r\n  return observations;\n}\n\nfunction getObservedElevation(source, observerLocation, timeMs) {\n  const observation = observeAt(source, observerLocation, timeMs);\n  if (!observation || !Number.isFinite(observation.elevation)) {\n    return null;\n  }\n  return observation;\n}\n\nfunction chooseCloserToThreshold(left, right, threshold) {\n  if (!left) {\n    return right;\n  }\n  if (!right) {\n    return left;\n  }\n\n  return Math.abs(left.elevation - threshold) <= Math.abs(right.elevation - threshold)\n    ? left\n    : right;\n}\n\nfunction refineElevationCrossing(source, observerLocation, leftMs, rightMs, threshold) {\n  let leftObs = getObservedElevation(source, observerLocation, leftMs);\n  let rightObs = getObservedElevation(source, observerLocation, rightMs);\n  if (!leftObs || !rightObs) {\n    return chooseCloserToThreshold(leftObs, rightObs, threshold);\n  }\n\n  let leftTime = leftMs;\n  let rightTime = rightMs;\n  let iterations = 0;\n\n  while ((rightTime - leftTime) > 250 && iterations < 25) {\n    const midTime = Math.floor((leftTime + rightTime) / 2);\n    const midObs = getObservedElevation(source, observerLocation, midTime);\n    if (!midObs) {\n      break;\n    }\n\n    const leftDelta = leftObs.elevation - threshold;\n    const midDelta = midObs.elevation - threshold;\n    if (leftDelta === 0) {\n      return leftObs;\n    }\n\n    if ((leftDelta < 0 && midDelta >= 0) || (leftDelta >= 0 && midDelta < 0)) {\n      rightTime = midTime;\n      rightObs = midObs;\n    } else {\n      leftTime = midTime;\n      leftObs = midObs;\n    }\n\n    iterations += 1;\n  }\n\n  return chooseCloserToThreshold(leftObs, rightObs, threshold);\n}\n\nfunction computeTransitMetrics(source, observerLocation, startMs, endMs) {\n  const duration = Math.max(endMs - startMs, 0);\n  const stepMs = Math.max(1000, Math.min(5000, Math.floor(duration / 120) || 1000));\n  let current = startMs;\n  let maxElevation = Number.NEGATIVE_INFINITY;\n  let apexAzimuth = 0;\n  let apexTime = null;\n  let minAzimuth = Number.POSITIVE_INFINITY;\n  let maxAzimuth = Number.NEGATIVE_INFINITY;\n\n  while (current <= endMs) {\n    const observed = getObservedElevation(source, observerLocation, current);\n    if (observed) {\n      if (observed.elevation > maxElevation) {\n        maxElevation = observed.elevation;\n        apexAzimuth = observed.azimuth;\n        apexTime = current;\n      }\n      minAzimuth = Math.min(minAzimuth, observed.azimuth);\n      maxAzimuth = Math.max(maxAzimuth, observed.azimuth);\n    }\n    current += stepMs;\n  }\n\n  const finalObserved = getObservedElevation(source, observerLocation, endMs);\n  if (finalObserved) {\n    if (finalObserved.elevation > maxElevation) {\n      maxElevation = finalObserved.elevation;\n      apexAzimuth = finalObserved.azimuth;\n      apexTime = endMs;\n    }\n    minAzimuth = Math.min(minAzimuth, finalObserved.azimuth);\n    maxAzimuth = Math.max(maxAzimuth, finalObserved.azimuth);\n  }\n\n  return {\n    maxElevation: Number.isFinite(maxElevation) ? maxElevation : 0,\n    apexAzimuth,\n    apexTime,\n    minAzimuth: Number.isFinite(minAzimuth) ? minAzimuth : 0,\n    maxAzimuth: Number.isFinite(maxAzimuth) ? maxAzimuth : 0,\n  };\n}\n\r\n// 搜索指定时间段内的所有过境窗口。\r\nfunction findTransits(source, observerLocation, start, end, minElevation, maxTransits = DEFAULT_MAX_TRANSITS) {\n  const startDate = toDate(start);\n  const endDate = toDate(end);\n  const satrec = toSatrec(source);\n  const threshold = minElevation == null ? 4 : minElevation;\n  const effectiveMaxTransits = maxTransits == null ? require('./runtime').maxIterations : maxTransits;\r\n  const normalizedObserver = requireObserverLocation(observerLocation, 'findTransits');\r\n\r\n  if (!Number.isFinite(effectiveMaxTransits) || effectiveMaxTransits < 0) {\r\n    throw new Error('maxTransits must be a non-negative number');\r\n  }\r\n\r\n  const result = searchTransits(\n    satrec,\n    normalizedObserver,\n    startDate.getTime(),\n    endDate.getTime(),\n    threshold,\n    effectiveMaxTransits,\n  );\n\n  return result.transits;\n}\n\nfunction searchTransits(satrec, observerLocation, startMs, endMs, minElevation, maxTransits) {\n  const transits = [];\n  const stepMs = 30 * 1000;\n  let prevTime = startMs;\n  let prevObs = getObservedElevation(satrec, observerLocation, prevTime);\n  let iterations = 0;\n  let terminationReason = 'windowEnded';\n  let lastScanTime = startMs;\n  const maxIterations = require('./runtime').maxIterations;\n  let inTransit = Boolean(prevObs && prevObs.elevation >= minElevation);\n  let transitStart = inTransit ? startMs : null;\n\n  while (prevObs && prevTime < endMs && iterations < maxIterations && transits.length < maxTransits) {\n    const currentTime = Math.min(prevTime + stepMs, endMs);\n    const currentObs = getObservedElevation(satrec, observerLocation, currentTime);\n    lastScanTime = currentTime;\n    if (!currentObs) {\n      terminationReason = 'noTransitPredicted';\n      break;\n    }\n\n    if (!inTransit && prevObs.elevation < minElevation && currentObs.elevation >= minElevation) {\n      const entryObs = refineElevationCrossing(satrec, observerLocation, prevTime, currentTime, minElevation);\n      transitStart = entryObs ? entryObs.timestamp : currentTime;\n      inTransit = true;\n    }\n\n    if (inTransit && prevObs.elevation >= minElevation && currentObs.elevation < minElevation) {\n      const exitObs = refineElevationCrossing(satrec, observerLocation, prevTime, currentTime, minElevation);\n      const transitEnd = exitObs ? exitObs.timestamp : currentTime;\n      const metrics = computeTransitMetrics(satrec, observerLocation, transitStart, transitEnd);\n      transits.push({\n        start: transitStart,\n        end: transitEnd,\n        maxElevation: metrics.maxElevation,\n        apexAzimuth: metrics.apexAzimuth,\n        apexTime: metrics.apexTime,\n        maxAzimuth: metrics.maxAzimuth,\n        minAzimuth: metrics.minAzimuth,\n        duration: transitEnd - transitStart,\n      });\n      inTransit = false;\n      transitStart = null;\n    }\n\n    prevTime = currentTime;\n    prevObs = currentObs;\n    iterations += 1;\n  }\n\n  if (inTransit && transitStart != null && prevObs) {\n    const transitEnd = Math.min(prevTime, endMs);\n    const metrics = computeTransitMetrics(satrec, observerLocation, transitStart, transitEnd);\n    transits.push({\n      start: transitStart,\n      end: transitEnd,\n      maxElevation: metrics.maxElevation,\n      apexAzimuth: metrics.apexAzimuth,\n      apexTime: metrics.apexTime,\n      maxAzimuth: metrics.maxAzimuth,\n      minAzimuth: metrics.minAzimuth,\n      duration: transitEnd - transitStart,\n    });\n  }\n\n  if (transits.length >= maxTransits) {\n    terminationReason = 'maxTransitsReached';\n  } else if (iterations >= maxIterations) {\n    terminationReason = 'maxIterationsReached';\n  } else if (transits.length === 0) {\n    terminationReason = 'noTransitPredicted';\n  }\n\n  return {\n    transits,\n    iterations,\n    terminationReason,\n    lastScanTime,\n  };\n}\n\nfunction scanTransitDiagnostics(satrec, observerLocation, startMs, endMs, stepMs) {\n  const diagnostics = {\n    scanStepMs: stepMs,\n    maxElevationInWindow: Number.NEGATIVE_INFINITY,\n    closestToHorizonAt: null,\n    closestToHorizonElevation: null,\n    latestNearHorizonAt: null,\n    sampledPoints: 0,\n  };\n\n  if (endMs <= startMs) {\n    diagnostics.maxElevationInWindow = null;\n    return diagnostics;\n  }\n\n  let current = startMs;\n  let bestAbsElevation = Number.POSITIVE_INFINITY;\n  let iterations = 0;\n  const maxIterations = require('./runtime').maxIterations;\n\n  while (current <= endMs && iterations < maxIterations) {\n    const observed = observeAt(satrec, observerLocation, current);\n    if (!observed) {\n      break;\n    }\n\n    diagnostics.sampledPoints += 1;\n    if (Number.isFinite(observed.elevation)) {\n      if (observed.elevation > diagnostics.maxElevationInWindow) {\n        diagnostics.maxElevationInWindow = observed.elevation;\n      }\n\n      const absElevation = Math.abs(observed.elevation);\n      if (absElevation < bestAbsElevation) {\n        bestAbsElevation = absElevation;\n        diagnostics.closestToHorizonAt = current;\n        diagnostics.closestToHorizonElevation = observed.elevation;\n      }\n\n      if (absElevation <= 1) {\n        diagnostics.latestNearHorizonAt = current;\n      }\n    }\n\n    current += stepMs;\n    iterations += 1;\n  }\n\n  if (diagnostics.maxElevationInWindow === Number.NEGATIVE_INFINITY) {\n    diagnostics.maxElevationInWindow = null;\n  }\n\n  return diagnostics;\n}\n\nfunction findTransitsDebug(\n  source,\n  observerLocation,\n  start,\n  end,\n  minElevation,\n  maxTransits = DEFAULT_MAX_TRANSITS,\n  options = {},\n) {\n  const startDate = toDate(start);\n  const endDate = toDate(end);\n  const satrec = toSatrec(source);\n  const threshold = minElevation == null ? 4 : minElevation;\n  const effectiveMaxTransits = maxTransits == null ? require('./runtime').maxIterations : maxTransits;\n  const normalizedObserver = requireObserverLocation(observerLocation, 'findTransitsDebug');\n  const scanStepMs = toDurationMs(options.scanStepMs, 60 * 1000);\n\n  if (!Number.isFinite(effectiveMaxTransits) || effectiveMaxTransits < 0) {\n    throw new Error('maxTransits must be a non-negative number');\n  }\n\n  const searchResult = searchTransits(\n    satrec,\n    normalizedObserver,\n    startDate.getTime(),\n    endDate.getTime(),\n    threshold,\n    effectiveMaxTransits,\n  );\n\n  const diagnostics = scanTransitDiagnostics(\n    satrec,\n    normalizedObserver,\n    startDate.getTime(),\n    endDate.getTime(),\n    scanStepMs,\n  );\n\n  return {\n    transits: searchResult.transits,\n    diagnostics: {\n      ...diagnostics,\n      thresholdElevation: threshold,\n      searchIterations: searchResult.iterations,\n      terminationReason: searchResult.terminationReason,\n      lastScanTime: searchResult.lastScanTime,\n    },\n  };\n}\n\r\n// 搜索单个过境窗口，适合做“下一次过境”之类的交互。\r\nfunction transitSegment(source, observerLocation, start, end) {\n  const startDate = toDate(start);\n  const endDate = toDate(end);\n  const satrec = toSatrec(source);\n  const normalizedObserver = requireObserverLocation(observerLocation, 'transitSegment');\n  const result = searchTransits(\n    satrec,\n    normalizedObserver,\n    startDate.getTime(),\n    endDate.getTime(),\n    0,\n    1,\n  );\n  return result.transits[0] || null;\n}\n\r\n// 计算观测者在整个时间段内的可见窗口，输出起止时间戳数组。\r\nfunction visibilityWindows(source, observerLocation, start, end) {\n  const startDate = toDate(start);\r\n  const endDate = toDate(end);\r\n  const satrec = toSatrec(source);\r\n  const normalizedObserver = requireObserverLocation(observerLocation, 'visibilityWindows');\r\n\r\n  if (isGeostationary(satrec) && aosHappens(satrec, normalizedObserver)) {\r\n    return [[startDate.getTime(), endDate.getTime()]];\r\n  }\r\n\r\n  const transits = findTransits(satrec, normalizedObserver, startDate, endDate, 0);\n  if (!transits || transits.length === 0) {\r\n    return [];\r\n  }\r\n\r\n  return transits.map((transit) => [transit.start, transit.end]);\n}\n\n// 语义更清晰的地面可见窗口命名，保留 visibilityWindows 兼容入口。\nfunction groundVisibilityWindows(source, observerLocation, start, end) {\n  return visibilityWindows(source, observerLocation, start, end);\n}\n\r\n// 根据轨道源里的半长轴估算轨道周期。\r\nfunction orbitalPeriodFromOrbitSource(source) {\r\n  const satrec = toSatrec(source);\r\n  const semiMajorAxisKm = satrec.a * earthRadiusKm;\r\n  return 2 * Math.PI * Math.sqrt(Math.pow(semiMajorAxisKm, 3) / 398600.5);\r\n}\r\n\r\n// 根据笛卡尔坐标半径估算对应的开普勒周期。\r\nfunction orbitalPeriodFromCartesian3(cartesian3 = [0, 0, 0]) {\r\n  const [x, y, z] = cartesian3;\r\n  const radius = Math.sqrt(x * x + y * y + z * z);\r\n  if (radius <= 0) {\r\n    return 0;\r\n  }\r\n\r\n  return 2 * Math.PI * Math.sqrt(Math.pow(radius, 3) / 398600.5);\r\n}\r\n\r\nmodule.exports = {\n  DEFAULT_MAX_TRANSITS,\n  parseOrbitSource,\n  normalizeOrbitSource: parseOrbitSource,\n  parseOrbitMetadata,\n  parseOrbitElements,\n  parseTle,\n  fromTle(line1OrText, maybeLine2) {\n    if (maybeLine2) {\r\n      return parseOrbitSource({ line1: line1OrText, line2: maybeLine2 });\r\n    }\r\n    return parseOrbitSource(line1OrText);\r\n  },\r\n  fromJsonGp(record) {\r\n    return parseOrbitSource(normalizeOmmRecord(record));\r\n  },\r\n  fromOmmXml(xml) {\r\n    return parseOrbitSource(parseOmmXml(xml));\r\n  },\r\n  toSatrec,\r\n  observeAt,\r\n  ephemeris,\r\n  findTransits,\n  findTransitsDebug,\n  transitSegment,\n  groundVisibilityWindows,\n  visibilityWindows,\n  satelliteVisibilityWindows,\r\n  orbitalPeriodFromOrbitSource,\r\n  orbitalPeriodFromCartesian3,\r\n  _internals: {\r\n    boundLongitude,\r\n    clamp,\r\n    getPropagation,\r\n    getGmst,\r\n    getSunVector,\r\n    satEclipsed,\r\n    isGeostationary,\r\n    badSat,\r\n    aosHappens,\r\n    decayed,\r\n    findAOS,\r\n    findLOS,\r\n    quickPredict,\r\n    isSatToSatVisible,\r\n    adaptiveStep,\r\n    vecSub,\r\n    magnitude,\r\n    scalarMultiply,\r\n    angle,\r\n  },\r\n};\r\n","// 这些常量用于统一角度、距离和时间换算，保持与底层轨道库一致的单位体系。\r\nconst deg2rad = Math.PI / 180;\r\nconst rad2deg = 180 / Math.PI;\r\n\r\nmodule.exports = {\r\n  deg2rad,\r\n  rad2deg,\r\n  earthRadiusKm: 6378.137,\r\n  earthDiameterKm: 12756.274,\r\n  solarRadiusKm: 696000,\r\n  astronomicalUnitKm: 149597870.7,\r\n  muKm3PerS2: 398600.5,\r\n  msPerDay: 24 * 60 * 60 * 1000,\r\n  defaultMinElevation: 4,\r\n  defaultStepSeconds: 60,\r\n  defaultMaxIterations: 99999,\r\n};\r\n","module.exports = require('./utils');\r\n","import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireSrc } from \"D:\\\\work\\\\openSource\\\\jspredict-dc\\\\src\\\\index.js\";\nvar srcExports = requireSrc();\nexport { srcExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(srcExports);","const runtime = require('./runtime');\r\nconst core = require('./core');\r\n\r\n// 运行时开关只保留最小表面，避免把内部状态暴露给调用方。\r\nfunction setMax(max) {\r\n  if (max == null) {\r\n    return runtime.maxIterations;\r\n  }\r\n\r\n  if (!Number.isFinite(max) || max <= 0) {\r\n    throw new Error('max must be a positive number');\r\n  }\r\n\r\n  runtime.maxIterations = Math.floor(max);\r\n  return runtime.maxIterations;\r\n}\r\n\r\n// 兼容 2.x 的调试开关：保留旧名字，同时让新代码可以统一用更直观的 API。\r\nfunction printIntervalInfo(open) {\r\n  runtime.printIntervalInfo = Boolean(open);\r\n  return runtime.printIntervalInfo;\r\n}\r\n\r\nconst api = {\r\n  // 运行时配置。\r\n  printIntervalInfo,\r\n  setDebugIntervalLogging: printIntervalInfo,\r\n  setMax,\n  setIterationLimit: setMax,\n\n  // 轨道输入归一化。\n  DEFAULT_MAX_TRANSITS: core.DEFAULT_MAX_TRANSITS,\n  normalizeOrbitSource: core.normalizeOrbitSource,\n  parseOrbitMetadata: core.parseOrbitMetadata,\n  parseOrbitElements: core.parseOrbitElements,\n  parseTle: core.parseTle,\n  fromTle: core.fromTle,\n  fromJsonGp: core.fromJsonGp,\n  fromOmmXml: core.fromOmmXml,\n\r\n  // 单时刻观测与星历。\r\n  observeAt: core.observeAt,\r\n  getPositionByTime: core.observeAt,\r\n\r\n  ephemeris: core.ephemeris,\r\n  getEphemeris: core.ephemeris,\r\n\r\n  // 过境与可见性。\n  findTransits: core.findTransits,\n  transits: core.findTransits,\n  findTransitsDebug: core.findTransitsDebug,\n\n  transitSegment: core.transitSegment,\n  getTransitSegment: core.transitSegment,\n\r\n  visibilityWindows: core.visibilityWindows,\n  getVisibilityWindows: core.visibilityWindows,\n  groundVisibilityWindows: core.groundVisibilityWindows,\n  getGroundVisibilityWindows: core.groundVisibilityWindows,\n\n  satelliteVisibilityWindows: core.satelliteVisibilityWindows,\n  getSatelliteVisibilityWindows: core.satelliteVisibilityWindows,\r\n\r\n  // 轨道周期。\r\n  orbitalPeriodFromOrbitSource: core.orbitalPeriodFromOrbitSource,\r\n  orbitalPeriodFromTle: core.orbitalPeriodFromOrbitSource,\r\n  getOrbitalPeriodByTle: core.orbitalPeriodFromOrbitSource,\r\n\r\n  orbitalPeriodFromCartesian3: core.orbitalPeriodFromCartesian3,\r\n  getOrbitalPeriodByCartesian3: core.orbitalPeriodFromCartesian3,\r\n};\n\nmodule.exports = api;\n"],"names":["runtime","printIntervalInfo","maxIterations","SatRecError","pi","Math","PI","twoPi","deg2rad","rad2deg","mu","earthRadius","xke","sqrt","vkmpersec","tumin","j2","j3","j4","j3oj2","x2o3","xpdotp","constants","Object","freeze","__proto__","minutesPerDay","days2mdhms","year","days","lmonth","dayofyr","floor","i","inttemp","mon","day","temp","hr","minute","sec","jdayInternal","msec","arguments","length","undefined","jday","yearOrDate","Date","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","dpper","satrec","options","alfdp","betdp","cosip","sinip","cosop","sinop","f2","f3","pe","pgh","ph","pinc","pl","sinzf","xls","xnoh","zf","zm","e3","ee2","peo","pgho","pho","pinco","plo","se2","se3","sgh2","sgh3","sgh4","sh2","sh3","si2","si3","sl2","sl3","sl4","t","xgh2","xgh3","xgh4","xh2","xh3","xi2","xi3","xl2","xl3","xl4","zmol","zmos","init","opsmode","ep","inclp","nodep","argpp","mp","sin","ses","cos","sis","sls","sghs","shs","atan2","abs","gstimeInternal","jdut1","tut1","gstime","first","month","hour","second","millisecond","sgp4","tsince","coseo1","sineo1","cosisq","delomg","eo1","argpm","su","t3","t4","tc","tem5","tempa","tempe","templ","inclm","mm","nm","nodem","xincp","xlm","error","None","xmdf","mo","mdot","argpdf","argpo","argpdot","nodedf","nodeo","nodedot","t2","nodecf","cc1","bstar","cc4","t2cof","isimp","omgcof","delmtemp","eta","xmcof","delmo","d2","d3","d4","cc5","sinmao","t3cof","t4cof","t5cof","no","em","ecco","inclo","method","dspaceResult","delt","x2li","x2omi","xl","xldot","xnddt","xndt","xomi","irez","d2201","d2211","d3210","d3222","d4410","d4422","d5220","d5232","d5421","d5433","dedt","del1","del2","del3","didt","dmdt","dnodt","domdt","gsto","xfact","xlamo","atime","xli","xni","fasx2","fasx4","fasx6","g22","g32","g44","g52","g54","step2","dndt","ft","theta","iretn","dspace","MeanMotionBelowZero","am","pow","MeanEccentricityOutOfRange","meanElements","im","Om","om","dpperResult","operationmode","PerturbedEccentricityOutOfRange","aycof","xlcof","axnl","aynl","u","ktr","ecose","esine","el2","SemiLatusRectumBelowZero","rl","rdotl","rvdotl","betal","sinu","cosu","sin2u","cos2u","temp1","temp2","con41","x1mth2","x7thm1","mrt","Decayed","xnode","xinc","mvt","rvdot","sinsu","cossu","snod","cnod","sini","cosi","xmx","xmy","ux","uy","uz","position","x","y","z","velocity","sgp4init","satrecInit","satn","cosim","sinim","cc1sq","cc2","cc3","coef","coef1","cosio4","emsq","eeta","etasq","perige","pinvsq","psisq","qzms24","s1","s2","s3","s4","s5","sfour","ss1","ss2","ss3","ss4","ss5","sz1","sz3","sz11","sz13","sz21","sz23","sz31","sz33","temp3","tsi","xpidot","xhdot1","z1","z3","z11","z13","z21","z23","z31","z33","epoch","xbstar","xecco","xargpo","xinclo","xmo","xno","xnodeo","ss","initlResult","eccsq","omeosq","rteosq","cosio","cosio2","ak","d1","delPrime","adel","ao","sinio","po","con42","ainv","posq","rp","ts70","ds70","c1","initl","a","alta","altp","qzms2ttemp","qzms24temp","delmotemp","dscomResult","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","cc","x1","x2","x3","x4","x5","x6","x7","x8","zcosg","zsing","zcosh","zsinh","zcosi","zsini","ss6","ss7","sz2","sz12","sz22","sz32","s6","s7","z2","z12","z22","z32","zes","zel","np","snodm","cnodm","sinomm","cosomm","betasq","rtemsq","xnodce","stem","ctem","zcosil","zsinil","zsinhl","zcoshl","gam","zx","zy","zcosgl","zsingl","xnoi","lsflg","dscom","dsinitResult","f220","f330","g211","g310","g322","g410","g422","g520","g521","g532","g533","sini2","aonv","eoc","rptim","znl","zns","shll","emo","emsqo","dsinit","earthRotation","radiansToDegrees","radians","degreesToRadians","degrees","geodeticToEcf","_ref","longitude","latitude","height","f","e2","normal","RangeError","observerCoordsEcf","positionEcf","velocityEcf","rangeX","rangeY","rangeZ","ecf","gmst","observerGeodetic","satelliteEcf","topS","topE","topZ","rangeSat","El","topocentricCoords","observerEcf","rx","ry","rz","topocentric","asin","azimuth","elevation","eci","R","C","k","jd","asArray","tu","leapyrs","mdhms","UTC","jsonobj","satnum","NORAD_CAT_ID","toString","EPOCH","endsWith","epochyr","Number","slice","epochdays","valueOf","ndot","MEAN_MOTION_DOT","nddot","MEAN_MOTION_DDOT","BSTAR","INCLINATION","RA_OF_ASC_NODE","ECCENTRICITY","ARG_OF_PERICENTER","MEAN_ANOMALY","MEAN_MOTION","mdhmsResult","jdsatepoch","_len","jdayArgs","Array","_key","apply","ttdb","meananomaly","eclplong_raw","obliquity","magr","rsun","rtasc_raw","atan","tan","rtasc","round","decl","longstr1","longstr2","substring","parseInt","parseFloat","concat","replace","satellite","require$$0","astronomicalUnitKm","earthRadiusKm","msPerDay","earthDiameterKm","solarRadiusKm","muKm3PerS2","defaultMinElevation","defaultStepSeconds","defaultMaxIterations","require$$1","observerWarningCache","Set","isPlainObject","value","Boolean","prototype","call","toDate","getTime","isFinite","parsed","isNaN","numeric","Error","toDurationMs","interval","fallbackMs","unitMap","milliseconds","ms","seconds","s","minutes","m","hours","h","d","weeks","week","w","total","entries","reduce","sum","key","rawValue","multiplier","observerWarning","message","has","add","console","warn","normalizeObserverAltitudeKm","rawAltitude","apiName","altitude","ensureFiniteObserverValue","converted","fieldName","warnObserverSuspiciousInput","observer","prefix","normalizeObserverLocation","observerLocation","isArray","normalized","lat","lon","lng","altitudeMeters","altMeters","heightMeters","alt","some","requireObserverLocation","clamp","min","max","boundLongitude","splitOrbitLines","text","split","map","line","trim","filter","extractXmlTag","xml","tagName","escaped","patterns","RegExp","pattern","match","exec","normalizeOmmRecord","record","omm","keys","toISOString","parseOmmXml","fields","field","parseCsvRecord","lines","headers","part","values","forEach","header","index","parseKvnRecord","parseOrbitSource","source","kind","tle","name","String","line1","line2","test","looksLikeXml","looksLikeJson","JSON","parse","includes","looksLikeCsv","looksLikeKvn","type","format","toSatrec","satelliteLib","twoline2satrec","json2satrec","satrecEpochMillis","NaN","toFiniteNumberOrNull","toTrimmedStringOrNull","toIsoStringOrNull","normalizedText","parseInternationalDesignator","designator","canonical","rawDesignator","compact","toUpperCase","shortYear","formatInternationalDesignator","internationalDesignator","launchYear","launchNumberOfYear","launchPiece","classifyOrbit","semiMajorAxisKm","eccentricity","e","perigeeAltitudeKm","apogeeAltitudeKm","parseOrbitMetadata","epochMs","designatorInfo","meanMotion","orbitalPeriodSeconds","noradCatalogNumber","classification","centerName","referenceFrame","timeSystem","meanElementTheory","epochYear","epochDayOfYear","meanMotionFirstDerivative","meanMotionSecondDerivative","inclination","rightAscensionOfAscendingNode","argumentOfPerigee","meanAnomaly","ephemerisType","elementSetNumber","revolutionNumberAtEpoch","orbitClass","isDeepSpace","raw","line0","parseTleMetadata","epochDate","OBJECT_ID","OBJECT_NAME","CLASSIFICATION_TYPE","CLASSIFICATION","objectType","OBJECT_TYPE","countryCode","COUNTRY_CODE","launchDate","LAUNCH_DATE","decayDate","DECAY_DATE","CENTER_NAME","REF_FRAME","referenceFrameEpoch","REF_FRAME_EPOCH","TIME_SYSTEM","MEAN_ELEMENT_THEORY","creationDate","CREATION_DATE","originator","ORIGINATOR","comment","COMMENT","EPHEMERIS_TYPE","ELEMENT_SET_NO","REV_AT_EPOCH","parseOmmMetadata","parseSatrecMetadata","getGmst","getPropagation","propagated","propagate","getSunVector","sunPos","solar","mjd","T","M","L","O","Lsa","nu","radius","eps","satEclipsed","sunVector","positionMagnitude","sunDelta","sunMagnitude","sdEarth","sdSun","earth","dot","eclipseDepth","acos","depth","eclipsed","isGeostationary","revPerDay","aosHappens","apogee","exp","log","decayed","startMs","satelliteEpoch","drag","badSat","vecSub","v1","v2","magnitude","v","observeAt","time","geo","eciToGeodetic","eclipse","ratio","track","timestamp","footprint","sunlit","normalizedObserver","observerGd","eciToEcf","lookAngles","ecfToLookAngles","doppler","dopplerFactor","findAOS","current","observed","aostime","iterations","require$$2","findLOS","lostime","isSatToSatVisible","pos1","pos2","vec","b","discriminant","t1","adaptiveStep","eci1","eci2","isVisible","defaultStep","dist","relSpeed","adaptiveStepValue","getObservedElevation","timeMs","observation","chooseCloserToThreshold","left","right","threshold","refineElevationCrossing","leftMs","rightMs","leftObs","rightObs","leftTime","rightTime","midTime","midObs","leftDelta","midDelta","computeTransitMetrics","endMs","duration","stepMs","maxElevation","NEGATIVE_INFINITY","apexAzimuth","apexTime","minAzimuth","POSITIVE_INFINITY","maxAzimuth","finalObserved","findTransits","start","end","minElevation","maxTransits","startDate","endDate","effectiveMaxTransits","searchTransits","transits","prevTime","prevObs","terminationReason","lastScanTime","inTransit","transitStart","currentTime","currentObs","entryObs","exitObs","transitEnd","metrics","push","visibilityWindows","transit","utils","DEFAULT_MAX_TRANSITS","normalizeOrbitSource","parseOrbitElements","metadata","parseTle","fromTle","line1OrText","maybeLine2","fromJsonGp","fromOmmXml","ephemeris","observations","findTransitsDebug","scanStepMs","searchResult","diagnostics","maxElevationInWindow","closestToHorizonAt","closestToHorizonElevation","latestNearHorizonAt","sampledPoints","bestAbsElevation","absElevation","scanTransitDiagnostics","thresholdElevation","searchIterations","transitSegment","groundVisibilityWindows","satelliteVisibilityWindows","source1","source2","stepSeconds","satrec1","satrec2","windows","windowStart","visible","nextStep","orbitalPeriodFromOrbitSource","orbitalPeriodFromCartesian3","cartesian3","_internals","quickPredict","lastEl","daynum","iel","maxEl","apexAz","minAz","maxAz","scalarMultiply","angle","core","srcExports","setMax","open","api","setDebugIntervalLogging","setIterationLimit","getPositionByTime","getEphemeris","getTransitSegment","getVisibilityWindows","getGroundVisibilityWindows","getSatelliteVisibilityWindows","orbitalPeriodFromTle","getOrbitalPeriodByTle","getOrbitalPeriodByCartesian3","src","requireSrc","getDefaultExportFromCjs"],"mappings":"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","x_google_ignoreList":[1]}