MMCT TEAM
Server IP : 103.191.208.50  /  Your IP : 216.73.216.53
Web Server : LiteSpeed
System : Linux orion.herosite.pro 4.18.0-553.53.1.lve.el8.x86_64 #1 SMP Wed May 28 17:01:02 UTC 2025 x86_64
User : celkcksm ( 1031)
PHP Version : 7.4.33
Disable Function : show_source, system, shell_exec, passthru, popen, exec
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /home/celkcksm/hrms.ncriptech.com/public/face/js/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/celkcksm/hrms.ncriptech.com/public/face/js/face-api.min.js
!(function (t, e) {
  "object" == typeof exports && "undefined" != typeof module
    ? e(exports)
    : "function" == typeof define && define.amd
    ? define(["exports"], e)
    : e(((t = t || self).faceapi = t.faceapi || {}));
})(this, function (c) {
  "use strict";
  var r = function (t, e) {
    return (r =
      Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array &&
        function (t, e) {
          t.__proto__ = e;
        }) ||
      function (t, e) {
        for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
      })(t, e);
  };
  function a(t, e) {
    function n() {
      this.constructor = t;
    }
    r(t, e),
      (t.prototype =
        null === e ? Object.create(e) : ((n.prototype = e.prototype), new n()));
  }
  var O = function () {
    return (O =
      Object.assign ||
      function (t) {
        for (var e, n = 1, r = arguments.length; n < r; n++)
          for (var o in (e = arguments[n]))
            Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);
        return t;
      }).apply(this, arguments);
  };
  function p(i, a, s, u) {
    return new (s || (s = Promise))(function (t, e) {
      function n(t) {
        try {
          o(u.next(t));
        } catch (t) {
          e(t);
        }
      }
      function r(t) {
        try {
          o(u.throw(t));
        } catch (t) {
          e(t);
        }
      }
      function o(e) {
        e.done
          ? t(e.value)
          : new s(function (t) {
              t(e.value);
            }).then(n, r);
      }
      o((u = u.apply(i, a || [])).next());
    });
  }
  function P(n, r) {
    var o,
      i,
      a,
      t,
      s = {
        label: 0,
        sent: function () {
          if (1 & a[0]) throw a[1];
          return a[1];
        },
        trys: [],
        ops: [],
      };
    return (
      (t = { next: e(0), throw: e(1), return: e(2) }),
      "function" == typeof Symbol &&
        (t[Symbol.iterator] = function () {
          return this;
        }),
      t
    );
    function e(e) {
      return function (t) {
        return (function (e) {
          if (o) throw new TypeError("Generator is already executing.");
          for (; s; )
            try {
              if (
                ((o = 1),
                i &&
                  (a =
                    2 & e[0]
                      ? i.return
                      : e[0]
                      ? i.throw || ((a = i.return) && a.call(i), 0)
                      : i.next) &&
                  !(a = a.call(i, e[1])).done)
              )
                return a;
              switch (((i = 0), a && (e = [2 & e[0], a.value]), e[0])) {
                case 0:
                case 1:
                  a = e;
                  break;
                case 4:
                  return s.label++, { value: e[1], done: !1 };
                case 5:
                  s.label++, (i = e[1]), (e = [0]);
                  continue;
                case 7:
                  (e = s.ops.pop()), s.trys.pop();
                  continue;
                default:
                  if (
                    !(a = 0 < (a = s.trys).length && a[a.length - 1]) &&
                    (6 === e[0] || 2 === e[0])
                  ) {
                    s = 0;
                    continue;
                  }
                  if (3 === e[0] && (!a || (e[1] > a[0] && e[1] < a[3]))) {
                    s.label = e[1];
                    break;
                  }
                  if (6 === e[0] && s.label < a[1]) {
                    (s.label = a[1]), (a = e);
                    break;
                  }
                  if (a && s.label < a[2]) {
                    (s.label = a[2]), s.ops.push(e);
                    break;
                  }
                  a[2] && s.ops.pop(), s.trys.pop();
                  continue;
              }
              e = r.call(n, s);
            } catch (t) {
              (e = [6, t]), (i = 0);
            } finally {
              o = a = 0;
            }
          if (5 & e[0]) throw e[1];
          return { value: e[0] ? e[1] : void 0, done: !0 };
        })([e, t]);
      };
    }
  }
  var o = function (t, e) {
    return (o =
      Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array &&
        function (t, e) {
          t.__proto__ = e;
        }) ||
      function (t, e) {
        for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
      })(t, e);
  };
  function s(t, e) {
    function n() {
      this.constructor = t;
    }
    o(t, e),
      (t.prototype =
        null === e ? Object.create(e) : ((n.prototype = e.prototype), new n()));
  }
  var n = function () {
    return (n =
      Object.assign ||
      function (t) {
        for (var e, n = 1, r = arguments.length; n < r; n++)
          for (var o in (e = arguments[n]))
            Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]);
        return t;
      }).apply(this, arguments);
  };
  function m(i, a, s, u) {
    return new (s || (s = Promise))(function (t, e) {
      function n(t) {
        try {
          o(u.next(t));
        } catch (t) {
          e(t);
        }
      }
      function r(t) {
        try {
          o(u.throw(t));
        } catch (t) {
          e(t);
        }
      }
      function o(e) {
        e.done
          ? t(e.value)
          : new s(function (t) {
              t(e.value);
            }).then(n, r);
      }
      o((u = u.apply(i, a || [])).next());
    });
  }
  function R(n, r) {
    var o,
      i,
      a,
      t,
      s = {
        label: 0,
        sent: function () {
          if (1 & a[0]) throw a[1];
          return a[1];
        },
        trys: [],
        ops: [],
      };
    return (
      (t = { next: e(0), throw: e(1), return: e(2) }),
      "function" == typeof Symbol &&
        (t[Symbol.iterator] = function () {
          return this;
        }),
      t
    );
    function e(e) {
      return function (t) {
        return (function (e) {
          if (o) throw new TypeError("Generator is already executing.");
          for (; s; )
            try {
              if (
                ((o = 1),
                i &&
                  (a =
                    2 & e[0]
                      ? i.return
                      : e[0]
                      ? i.throw || ((a = i.return) && a.call(i), 0)
                      : i.next) &&
                  !(a = a.call(i, e[1])).done)
              )
                return a;
              switch (((i = 0), a && (e = [2 & e[0], a.value]), e[0])) {
                case 0:
                case 1:
                  a = e;
                  break;
                case 4:
                  return s.label++, { value: e[1], done: !1 };
                case 5:
                  s.label++, (i = e[1]), (e = [0]);
                  continue;
                case 7:
                  (e = s.ops.pop()), s.trys.pop();
                  continue;
                default:
                  if (
                    !(a = 0 < (a = s.trys).length && a[a.length - 1]) &&
                    (6 === e[0] || 2 === e[0])
                  ) {
                    s = 0;
                    continue;
                  }
                  if (3 === e[0] && (!a || (e[1] > a[0] && e[1] < a[3]))) {
                    s.label = e[1];
                    break;
                  }
                  if (6 === e[0] && s.label < a[1]) {
                    (s.label = a[1]), (a = e);
                    break;
                  }
                  if (a && s.label < a[2]) {
                    (s.label = a[2]), s.ops.push(e);
                    break;
                  }
                  a[2] && s.ops.pop(), s.trys.pop();
                  continue;
              }
              e = r.call(n, s);
            } catch (t) {
              (e = [6, t]), (i = 0);
            } finally {
              o = a = 0;
            }
          if (5 & e[0]) throw e[1];
          return { value: e[0] ? e[1] : void 0, done: !0 };
        })([e, t]);
      };
    }
  }
  var i = {},
    u = {
      alpha: !1,
      antialias: !1,
      premultipliedAlpha: !1,
      preserveDrawingBuffer: !1,
      depth: !1,
      stencil: !1,
      failIfMajorPerformanceCaveat: !0,
    };
  function l(t) {
    t in i ||
      (i[t] = (function (e) {
        if (1 !== e && 2 !== e)
          throw new Error(
            "Cannot get WebGL rendering context, WebGL is disabled."
          );
        var t = document.createElement("canvas");
        return (
          t.addEventListener(
            "webglcontextlost",
            function (t) {
              t.preventDefault(), delete i[e];
            },
            !1
          ),
          1 === e
            ? t.getContext("webgl", u) || t.getContext("experimental-webgl", u)
            : t.getContext("webgl2", u)
        );
      })(t));
    var e = i[t];
    return e.isContextLost()
      ? (delete i[t], l(t))
      : (e.disable(e.DEPTH_TEST),
        e.disable(e.STENCIL_TEST),
        e.disable(e.BLEND),
        e.disable(e.DITHER),
        e.disable(e.POLYGON_OFFSET_FILL),
        e.disable(e.SAMPLE_COVERAGE),
        e.enable(e.SCISSOR_TEST),
        e.enable(e.CULL_FACE),
        e.cullFace(e.BACK),
        i[t]);
  }
  function h(t) {
    for (var e = t.length, n = 0, r = 0; 0 < e; )
      (r = (Math.random() * e) | 0), (n = t[--e]), (t[e] = t[r]), (t[r] = n);
  }
  function f(t, e, n) {
    return Math.max(t, Math.min(e, n));
  }
  function _(t) {
    return t % 2 == 0 ? t : t + 1;
  }
  function d(t) {
    for (var e = 0, n = 0; n < t.length; n++) e += t[n];
    return e;
  }
  function v(t, e) {
    var n = Math.random();
    return e * n + (1 - n) * t;
  }
  function D(t, e) {
    if (!t) throw new Error("string" == typeof e ? e : e());
  }
  function g(t, e, n) {
    void 0 === n && (n = ""),
      D(E(t, e), function () {
        return n + " Shapes " + t + " and " + e + " must match";
      });
  }
  function y(t) {
    D(null != t, function () {
      return "The input to the tensor constructor must be a non-null value.";
    });
  }
  function x(t, e) {
    if (
      (void 0 === e && (e = []),
      null == e && (e = []),
      Array.isArray(t) || z(t))
    )
      for (var n = 0; n < t.length; ++n) x(t[n], e);
    else e.push(t);
    return e;
  }
  function B(t) {
    if (0 === t.length) return 1;
    for (var e = t[0], n = 1; n < t.length; n++) e *= t[n];
    return e;
  }
  function E(t, e) {
    if (t === e) return !0;
    if (null == t || null == e) return !1;
    if (t.length !== e.length) return !1;
    for (var n = 0; n < t.length; n++) if (t[n] !== e[n]) return !1;
    return !0;
  }
  function T(t) {
    return t % 1 == 0;
  }
  function w(t) {
    if (null != Math.tanh) return Math.tanh(t);
    if (t === 1 / 0) return 1;
    if (t === -1 / 0) return -1;
    var e = Math.exp(2 * t);
    return (e - 1) / (e + 1);
  }
  function b(t) {
    var e = Math.ceil(Math.sqrt(t));
    return [e, Math.ceil(t / e)];
  }
  function C(t, e) {
    return e <= t.length ? t : t + " ".repeat(e - t.length);
  }
  function S(i, a, s) {
    return (
      void 0 === a &&
        (a = function (t) {
          return 0;
        }),
      new Promise(function (e, n) {
        var r = 0,
          o = function () {
            if (i()) e();
            else {
              var t = a(++r);
              null != s && s <= r ? n() : setTimeout(o, t);
            }
          };
        o();
      })
    );
  }
  function N(t, e) {
    for (var n = 1, r = -1, o = 0; o < t.length; ++o)
      if (0 <= t[o]) n *= t[o];
      else if (-1 === t[o]) {
        if (-1 !== r)
          throw Error(
            "Shapes can only have 1 implicit size. Found -1 at dim " +
              r +
              " and dim " +
              o
          );
        r = o;
      } else if (t[o] < 0)
        throw Error("Shapes can not be < 0. Found " + t[o] + " at dim " + o);
    if (-1 === r) {
      if (0 < e && e !== n)
        throw Error("Size(" + e + ") must match the product of shape " + t);
      return t;
    }
    if (0 === n)
      throw Error(
        "Cannot infer the missing size in [" + t + "] when there are 0 elements"
      );
    if (e % n != 0)
      throw Error(
        "The implicit shape can't be a fractional number. Got " + e + " / " + n
      );
    var i = t.slice();
    return (i[r] = e / n), i;
  }
  function k(t, e) {
    var n = e.length;
    return (
      D(
        (t =
          null == t
            ? e.map(function (t, e) {
                return e;
              })
            : [].concat(t)).every(function (t) {
          return -n <= t && t < n;
        }),
        function () {
          return (
            "All values in axis param must be in range [-" +
            n +
            ", " +
            n +
            ") but got axis " +
            t
          );
        }
      ),
      D(
        t.every(function (t) {
          return T(t);
        }),
        function () {
          return "All values in axis param must be integers but got axis " + t;
        }
      ),
      t.map(function (t) {
        return t < 0 ? n + t : t;
      })
    );
  }
  function I(t, e) {
    for (
      var n = [], r = [], o = null == e ? null : k(e, t).sort(), i = 0, a = 0;
      a < t.length;
      ++a
    ) {
      if (null != o) {
        if (o[i] === a && 1 !== t[a])
          throw new Error(
            "Can't squeeze axis " + a + " since its dim '" + t[a] + "' is not 1"
          );
        (null == o[i] || o[i] > a) && 1 === t[a] && (n.push(t[a]), r.push(a)),
          o[i] <= a && i++;
      }
      1 !== t[a] && (n.push(t[a]), r.push(a));
    }
    return { newShape: n, keptDims: r };
  }
  function A(t, e) {
    var n = null;
    if (null == t || "float32" === t) n = new Float32Array(e);
    else if ("int32" === t) n = new Int32Array(e);
    else {
      if ("bool" !== t) throw new Error("Unknown data type " + t);
      n = new Uint8Array(e);
    }
    return n;
  }
  function M(t, e) {
    var n = null;
    if (null == t || "float32" === t) n = new Float32Array(e);
    else if ("int32" === t) n = new Int32Array(e);
    else if ("bool" === t) n = new Uint8Array(e);
    else {
      if ("string" !== t) throw new Error("Unknown data type " + t);
      n = new Array(e);
    }
    return n;
  }
  function F(t, e, n) {
    if ("float32" === e)
      for (var r = 0; r < t.length; r++) {
        var o = t[r];
        if (isNaN(o) || !isFinite(o))
          throw Error("The result of the '" + n + "' is " + o + ".");
      }
  }
  function L(t, e) {
    for (var n = 0; n < t.length; n++) {
      var r = t[n];
      if (isNaN(r) || !isFinite(r))
        throw Error(
          "A tensor of type " + e + " being uploaded contains " + r + "."
        );
    }
  }
  function W(t, e) {
    return !(
      "complex64" === e ||
      ("float32" === e && "complex64" !== t) ||
      ("int32" === e && "float32" !== t && "complex64" !== t) ||
      ("bool" === e && "bool" === t)
    );
  }
  function z(t) {
    return (
      t instanceof Float32Array ||
      t instanceof Int32Array ||
      t instanceof Uint8Array
    );
  }
  function U(t) {
    if ("float32" === t || "int32" === t) return 4;
    if ("complex64" === t) return 8;
    if ("bool" === t) return 1;
    throw new Error("Unknown dtype " + t);
  }
  function G(t) {
    if (null == t) return 0;
    var e = 0;
    return (
      t.forEach(function (t) {
        return (e += 2 * t.length);
      }),
      e
    );
  }
  function V(t) {
    return "string" == typeof t || t instanceof String;
  }
  function e(t) {
    return "boolean" == typeof t;
  }
  function H(t) {
    return "number" == typeof t;
  }
  function q(t) {
    return Array.isArray(t)
      ? q(t[0])
      : t instanceof Float32Array
      ? "float32"
      : t instanceof Int32Array || t instanceof Uint8Array
      ? "int32"
      : H(t)
      ? "float32"
      : V(t)
      ? "string"
      : e(t)
      ? "bool"
      : "float32";
  }
  function j(t) {
    return !!(t && t.constructor && t.call && t.apply);
  }
  function $(t, e) {
    for (var n = e; n < t; ++n) if (t % n == 0) return n;
    return t;
  }
  function K(t) {
    var e = t.length;
    if (e < 2) return [];
    var n = new Array(e - 1);
    n[e - 2] = t[e - 1];
    for (var r = e - 3; 0 <= r; --r) n[r] = n[r + 1] * t[r + 1];
    return n;
  }
  function X(t, e, n) {
    if ("string" === e)
      throw new Error("Cannot convert a string[] to a TypedArray");
    if (
      (Array.isArray(t) && (t = x(t)),
      n && L(t, e),
      (o = e),
      ((r = t) instanceof Float32Array && "float32" === o) ||
        (r instanceof Int32Array && "int32" === o) ||
        (r instanceof Uint8Array && "bool" === o))
    )
      return t;
    var r, o;
    if (null == e || "float32" === e || "complex64" === e)
      return new Float32Array(t);
    if ("int32" === e) return new Int32Array(t);
    if ("bool" !== e) throw new Error("Unknown data type " + e);
    for (var i = new Uint8Array(t.length), a = 0; a < i.length; ++a)
      0 !== Math.round(t[a]) && (i[a] = 1);
    return i;
  }
  function Y(t, e) {
    if (0 === t.length) return e[0];
    var n = t.reduce(function (t, e) {
      return t * e;
    });
    if (0 === n) return [];
    if (n !== e.length)
      throw new Error("[" + t + "] does not match the input size.");
    return (function t(e, n, r) {
      var o = new Array();
      if (1 === n.length) for (var i = n[0], a = 0; a < i; a++) o[a] = r[e + a];
      else {
        i = n[0];
        var s = n.slice(1),
          u = s.reduce(function (t, e) {
            return t * e;
          });
        for (a = 0; a < i; a++) o[a] = t(e + a * u, s, r);
      }
      return o;
    })(0, t, e);
  }
  function Q(t, e) {
    for (var n = J(t, e), r = 0; r < n.length; r++) n[r] = 1;
    return n;
  }
  function J(t, e) {
    if (null == e || "float32" === e || "complex64" === e)
      return new Float32Array(t);
    if ("int32" === e) return new Int32Array(t);
    if ("bool" === e) return new Uint8Array(t);
    throw new Error("Unknown data type " + e);
  }
  function Z() {
    if ("undefined" != typeof performance) return performance.now();
    if ("undefined" == typeof process)
      throw new Error(
        "Cannot measure time in this environment. You should run tf.js in the browser or in Node.js"
      );
    var t = process.hrtime();
    return 1e3 * t[0] + t[1] / 1e6;
  }
  function tt(e) {
    e.forEach(function (t) {
      D(Number.isInteger(t) && 0 <= t, function () {
        return (
          "Tensor must have a shape comprised of positive integers but got shape [" +
          e +
          "]."
        );
      });
    });
  }
  var t = Object.freeze({
      shuffle: h,
      clamp: f,
      nearestLargerEven: _,
      sum: d,
      randUniform: v,
      distSquared: function (t, e) {
        for (var n = 0, r = 0; r < t.length; r++) {
          var o = Number(t[r]) - Number(e[r]);
          n += o * o;
        }
        return n;
      },
      assert: D,
      assertShapesMatch: g,
      assertNonNull: y,
      flatten: x,
      sizeFromShape: B,
      isScalarShape: function (t) {
        return 0 === t.length;
      },
      arraysEqual: E,
      isInt: T,
      tanh: w,
      sizeToSquarishShape: b,
      createShuffledIndices: function (t) {
        for (var e = new Uint32Array(t), n = 0; n < t; ++n) e[n] = n;
        return h(e), e;
      },
      rightPad: C,
      repeatedTry: S,
      inferFromImplicitShape: N,
      parseAxisParam: k,
      squeezeShape: I,
      getTypedArrayFromDType: A,
      getArrayFromDType: M,
      checkComputationForErrors: F,
      checkConversionForErrors: L,
      hasEncodingLoss: W,
      isTypedArray: z,
      bytesPerElement: U,
      bytesFromStringArray: G,
      isString: V,
      isBoolean: e,
      isNumber: H,
      inferDtype: q,
      isFunction: j,
      nearestDivisor: $,
      computeStrides: K,
      toTypedArray: X,
      toNestedArray: Y,
      makeOnesTypedArray: Q,
      makeZerosTypedArray: J,
      now: Z,
      assertNonNegativeIntegerDimensions: tt,
    }),
    et = (function () {
      function t(t, e) {
        (this.backendTimer = t),
          null == (this.logger = e) && (this.logger = new nt());
      }
      return (
        (t.prototype.profileKernel = function (o, t) {
          var e,
            i = this,
            a = this.backendTimer.time(function () {
              e = t();
            });
          return (
            (Array.isArray(e) ? e : [e]).forEach(function (n) {
              var r = n.dataSync();
              F(r, n.dtype, o),
                a.then(function (t) {
                  var e = "";
                  null != t.getExtraProfileInfo &&
                    (e = t.getExtraProfileInfo()),
                    i.logger.logKernelProfile(o, n, r, t.kernelMs, e);
                });
            }),
            e
          );
        }),
        t
      );
    })(),
    nt = (function () {
      function t() {}
      return (
        (t.prototype.logKernelProfile = function (t, e, n, r, o) {
          var i = C(r + "ms", 9),
            a = C(t, 25),
            s = e.rank,
            u = e.size,
            c = C(e.shape.toString(), 14);
          console.log(
            "%c" +
              a +
              "\t%c" +
              i +
              "\t%c" +
              s +
              "D " +
              c +
              "\t%c" +
              u +
              "\t%c" +
              o,
            "font-weight:bold",
            "color:red",
            "color:blue",
            "color: orange",
            "color: green"
          );
        }),
        t
      );
    })(),
    rt = 20,
    ot = 3,
    it = 7;
  function at(t, e, n, r) {
    var o = K(e),
      i = (function (t, e, n, r) {
        var o = B(e),
          i = r[r.length - 1],
          a = new Array(i).fill(0),
          s = e.length,
          u = "complex64" === n ? ct(t) : t;
        if (1 < s)
          for (var c = 0; c < o / i; c++)
            for (var l = c * i, h = 0; h < i; h++)
              a[h] = Math.max(a[h], st(u[l + h], 0, n).length);
        return a;
      })(t, e, n, o),
      a = e.length,
      s = (function t(e, n, r, o, i, a) {
        void 0 === a && (a = !0);
        var s = "complex64" === r ? 2 : 1,
          u = n[0],
          c = n.length;
        if (0 === c)
          return "complex64" === r
            ? [st(ct(e)[0], 0, r)]
            : "bool" === r
            ? [ut(e[0])]
            : [e[0].toString()];
        if (1 === c) {
          if (rt < u) {
            var l = ot * s,
              h = Array.from(e.slice(0, l)),
              p = Array.from(e.slice(u - ot * s, u));
            return (
              "complex64" === r && ((h = ct(h)), (p = ct(p))),
              [
                "[" +
                  h
                    .map(function (t, e) {
                      return st(t, i[e], r);
                    })
                    .join(", ") +
                  ", ..., " +
                  p
                    .map(function (t, e) {
                      return st(t, i[u - ot + e], r);
                    })
                    .join(", ") +
                  "]",
              ]
            );
          }
          return [
            "[" +
              ("complex64" === r ? ct(e) : Array.from(e))
                .map(function (t, e) {
                  return st(t, i[e], r);
                })
                .join(", ") +
              "]",
          ];
        }
        var f = n.slice(1),
          d = o.slice(1),
          v = o[0] * s,
          m = [];
        if (rt < u) {
          for (var g = 0; g < ot; g++) {
            var y = (x = g * v) + v;
            m.push.apply(m, t(e.slice(x, y), f, r, d, i, !1));
          }
          for (m.push("..."), g = u - ot; g < u; g++)
            (y = (x = g * v) + v),
              m.push.apply(m, t(e.slice(x, y), f, r, d, i, g === u - 1));
        } else
          for (g = 0; g < u; g++) {
            var x;
            (y = (x = g * v) + v),
              m.push.apply(m, t(e.slice(x, y), f, r, d, i, g === u - 1));
          }
        var w = 2 === c ? "," : "";
        m[0] = "[" + m[0] + w;
        for (g = 1; g < m.length - 1; g++) m[g] = " " + m[g] + w;
        var b = ",\n";
        for (g = 2; g < c; g++) b += "\n";
        return (
          (m[m.length - 1] = " " + m[m.length - 1] + "]" + (a ? "" : b)), m
        );
      })(t, e, n, o, i),
      u = ["Tensor"];
    return (
      r &&
        (u.push("  dtype: " + n),
        u.push("  rank: " + a),
        u.push("  shape: [" + e + "]"),
        u.push("  values:")),
      u.push(
        s
          .map(function (t) {
            return "    " + t;
          })
          .join("\n")
      ),
      u.join("\n")
    );
  }
  function st(t, e, n) {
    return C(
      Array.isArray(t)
        ? parseFloat(t[0].toFixed(it)) +
            " + " +
            parseFloat(t[1].toFixed(it)) +
            "j"
        : V(t)
        ? "'" + t + "'"
        : "bool" === n
        ? ut(t)
        : parseFloat(t.toFixed(it)).toString(),
      e
    );
  }
  function ut(t) {
    return 0 === t ? "false" : "true";
  }
  function ct(t) {
    for (var e = [], n = 0; n < t.length; n += 2) e.push([t[n], t[n + 1]]);
    return e;
  }
  var lt = (function () {
      function t(t, e, n) {
        var r = this;
        if (
          ((this.dtype = e),
          (this.shape = t.slice()),
          (this.size = B(t)),
          null != n)
        ) {
          var o = n.length;
          D(o === this.size, function () {
            return (
              "Length of values '" +
              o +
              "' does not match the size inferred by the shape '" +
              r.size +
              "'."
            );
          });
        }
        if ("complex64" === e)
          throw new Error(
            "complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag)."
          );
        (this.values = n || M(e, this.size)), (this.strides = K(t));
      }
      return (
        (t.prototype.set = function (t) {
          for (var e = this, n = [], r = 1; r < arguments.length; r++)
            n[r - 1] = arguments[r];
          0 === n.length && (n = [0]),
            D(n.length === this.rank, function () {
              return (
                "The number of provided coordinates (" +
                n.length +
                ") must match the rank (" +
                e.rank +
                ")"
              );
            });
          var o = this.locToIndex(n);
          this.values[o] = t;
        }),
        (t.prototype.get = function () {
          for (var t = [], e = 0; e < arguments.length; e++)
            t[e] = arguments[e];
          0 === t.length && (t = [0]);
          for (var n = 0, r = 0, o = t; r < o.length; r++) {
            var i = o[r];
            if (i < 0 || i >= this.shape[n]) {
              var a =
                "Requested out of range element at " +
                t +
                ".   Buffer shape=" +
                this.shape;
              throw new Error(a);
            }
            n++;
          }
          for (var s = t[t.length - 1], u = 0; u < t.length - 1; ++u)
            s += this.strides[u] * t[u];
          return this.values[s];
        }),
        (t.prototype.locToIndex = function (t) {
          if (0 === this.rank) return 0;
          if (1 === this.rank) return t[0];
          for (var e = t[t.length - 1], n = 0; n < t.length - 1; ++n)
            e += this.strides[n] * t[n];
          return e;
        }),
        (t.prototype.indexToLoc = function (t) {
          if (0 === this.rank) return [];
          if (1 === this.rank) return [t];
          for (
            var e = new Array(this.shape.length), n = 0;
            n < e.length - 1;
            ++n
          )
            (e[n] = Math.floor(t / this.strides[n])),
              (t -= e[n] * this.strides[n]);
          return (e[e.length - 1] = t), e;
        }),
        Object.defineProperty(t.prototype, "rank", {
          get: function () {
            return this.shape.length;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.toTensor = function () {
          return dt.make(this.shape, { values: this.values }, this.dtype);
        }),
        t
      );
    })(),
    ht = null,
    pt = null,
    ft = null;
  var dt = (function () {
    function o(t, e, n, r, o) {
      (this.kept = !1),
        (this.isDisposedInternal = !1),
        (this.shape = t.slice()),
        (this.dtype = e || "float32"),
        (this.size = B(t)),
        (this.strides = K(t)),
        (this.dataId = null != r ? r : {}),
        (this.id = ht().nextTensorId()),
        (this.rankType = this.rank < 5 ? this.rank.toString() : "higher"),
        ht().registerTensor(this, o),
        null != n && ht().write(this.dataId, n);
    }
    return (
      (o.make = function (t, e, n, r) {
        return new o(t, n, e.values, e.dataId, r);
      }),
      (o.prototype.flatten = function () {
        return this.throwIfDisposed(), this.as1D();
      }),
      (o.prototype.asScalar = function () {
        return (
          this.throwIfDisposed(),
          D(1 === this.size, function () {
            return "The array must have only 1 element.";
          }),
          this.reshape([])
        );
      }),
      (o.prototype.as1D = function () {
        return this.throwIfDisposed(), this.reshape([this.size]);
      }),
      (o.prototype.as2D = function (t, e) {
        return this.throwIfDisposed(), this.reshape([t, e]);
      }),
      (o.prototype.as3D = function (t, e, n) {
        return this.throwIfDisposed(), this.reshape([t, e, n]);
      }),
      (o.prototype.as4D = function (t, e, n, r) {
        return this.throwIfDisposed(), this.reshape([t, e, n, r]);
      }),
      (o.prototype.as5D = function (t, e, n, r, o) {
        return this.throwIfDisposed(), this.reshape([t, e, n, r, o]);
      }),
      (o.prototype.asType = function (t) {
        return this.throwIfDisposed(), pt.cast(this, t);
      }),
      Object.defineProperty(o.prototype, "rank", {
        get: function () {
          return this.shape.length;
        },
        enumerable: !0,
        configurable: !0,
      }),
      (o.prototype.buffer = function () {
        return m(this, void 0, void 0, function () {
          var e;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                return [4, this.data()];
              case 1:
                return (
                  (e = t.sent()), [2, pt.buffer(this.shape, this.dtype, e)]
                );
            }
          });
        });
      }),
      (o.prototype.bufferSync = function () {
        return pt.buffer(this.shape, this.dtype, this.dataSync());
      }),
      (o.prototype.array = function () {
        return m(this, void 0, void 0, function () {
          var e;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                return [4, this.data()];
              case 1:
                return (e = t.sent()), [2, Y(this.shape, e)];
            }
          });
        });
      }),
      (o.prototype.arraySync = function () {
        return Y(this.shape, this.dataSync());
      }),
      (o.prototype.data = function () {
        return m(this, void 0, void 0, function () {
          return R(this, function (t) {
            return this.throwIfDisposed(), [2, ht().read(this.dataId)];
          });
        });
      }),
      (o.prototype.dataSync = function () {
        return this.throwIfDisposed(), ht().readSync(this.dataId);
      }),
      (o.prototype.dispose = function () {
        this.isDisposed ||
          (ht().disposeTensor(this), (this.isDisposedInternal = !0));
      }),
      Object.defineProperty(o.prototype, "isDisposed", {
        get: function () {
          return this.isDisposedInternal;
        },
        enumerable: !0,
        configurable: !0,
      }),
      (o.prototype.throwIfDisposed = function () {
        if (this.isDisposed) throw new Error("Tensor is disposed.");
      }),
      (o.prototype.toFloat = function () {
        return this.asType("float32");
      }),
      (o.prototype.toInt = function () {
        return this.asType("int32");
      }),
      (o.prototype.toBool = function () {
        return this.asType("bool");
      }),
      (o.prototype.print = function (t) {
        return void 0 === t && (t = !1), pt.print(this, t);
      }),
      (o.prototype.reshape = function (t) {
        return this.throwIfDisposed(), pt.reshape(this, t);
      }),
      (o.prototype.reshapeAs = function (t) {
        return this.throwIfDisposed(), this.reshape(t.shape);
      }),
      (o.prototype.expandDims = function (t) {
        return void 0 === t && (t = 0), pt.expandDims(this, t);
      }),
      (o.prototype.cumsum = function (t, e, n) {
        return (
          void 0 === t && (t = 0),
          void 0 === e && (e = !1),
          void 0 === n && (n = !1),
          pt.cumsum(this, t, e, n)
        );
      }),
      (o.prototype.squeeze = function (t) {
        return this.throwIfDisposed(), pt.squeeze(this, t);
      }),
      (o.prototype.clone = function () {
        return this.throwIfDisposed(), pt.clone(this);
      }),
      (o.prototype.oneHot = function (t, e, n) {
        return this.throwIfDisposed(), pt.oneHot(this, t, e, n);
      }),
      (o.prototype.toString = function (t) {
        return (
          void 0 === t && (t = !1),
          at(this.dataSync(), this.shape, this.dtype, t)
        );
      }),
      (o.prototype.tile = function (t) {
        return this.throwIfDisposed(), pt.tile(this, t);
      }),
      (o.prototype.gather = function (t, e) {
        return (
          void 0 === e && (e = 0), this.throwIfDisposed(), pt.gather(this, t, e)
        );
      }),
      (o.prototype.matMul = function (t, e, n) {
        return (
          void 0 === e && (e = !1),
          void 0 === n && (n = !1),
          this.throwIfDisposed(),
          pt.matMul(this, t, e, n)
        );
      }),
      (o.prototype.dot = function (t) {
        return this.throwIfDisposed(), pt.dot(this, t);
      }),
      (o.prototype.norm = function (t, e, n) {
        return (
          void 0 === t && (t = "euclidean"),
          void 0 === e && (e = null),
          void 0 === n && (n = !1),
          this.throwIfDisposed(),
          pt.norm(this, t, e, n)
        );
      }),
      (o.prototype.slice = function (t, e) {
        return this.throwIfDisposed(), pt.slice(this, t, e);
      }),
      (o.prototype.reverse = function (t) {
        return this.throwIfDisposed(), pt.reverse(this, t);
      }),
      (o.prototype.concat = function (t, e) {
        return (
          void 0 === e && (e = 0),
          this.throwIfDisposed(),
          t instanceof o && (t = [t]),
          pt.concat([this].concat(t), e)
        );
      }),
      (o.prototype.split = function (t, e) {
        return (
          void 0 === e && (e = 0), this.throwIfDisposed(), pt.split(this, t, e)
        );
      }),
      (o.prototype.stack = function (t, e) {
        return void 0 === e && (e = 0), pt.stack([this, t], e);
      }),
      (o.prototype.unstack = function (t) {
        return void 0 === t && (t = 0), pt.unstack(this, t);
      }),
      (o.prototype.pad = function (t, e) {
        return void 0 === e && (e = 0), pt.pad(this, t, e);
      }),
      (o.prototype.batchNormalization = function (t, e, n, r, o) {
        return (
          void 0 === n && (n = 0.001),
          ft(
            "tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon"
          ),
          this.batchNorm(t, e, o, r, n)
        );
      }),
      (o.prototype.batchNorm = function (t, e, n, r, o) {
        return (
          void 0 === o && (o = 0.001),
          this.throwIfDisposed(),
          pt.batchNorm(this, t, e, n, r, o)
        );
      }),
      (o.prototype.all = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.all(this, t, e)
        );
      }),
      (o.prototype.any = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.any(this, t, e)
        );
      }),
      (o.prototype.logSumExp = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.logSumExp(this, t, e)
        );
      }),
      (o.prototype.sum = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.sum(this, t, e)
        );
      }),
      (o.prototype.prod = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.prod(this, t, e)
        );
      }),
      (o.prototype.mean = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.mean(this, t, e)
        );
      }),
      (o.prototype.min = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.min(this, t, e)
        );
      }),
      (o.prototype.max = function (t, e) {
        return (
          void 0 === t && (t = null),
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.max(this, t, e)
        );
      }),
      (o.prototype.argMin = function (t) {
        return (
          void 0 === t && (t = null), this.throwIfDisposed(), pt.argMin(this, t)
        );
      }),
      (o.prototype.argMax = function (t) {
        return (
          void 0 === t && (t = null), this.throwIfDisposed(), pt.argMax(this, t)
        );
      }),
      (o.prototype.cast = function (t) {
        return this.throwIfDisposed(), pt.cast(this, t);
      }),
      (o.prototype.add = function (t) {
        return this.throwIfDisposed(), pt.add(this, t);
      }),
      (o.prototype.addStrict = function (t) {
        return this.throwIfDisposed(), pt.addStrict(this, t);
      }),
      (o.prototype.atan2 = function (t) {
        return this.throwIfDisposed(), pt.atan2(this, t);
      }),
      (o.prototype.sub = function (t) {
        return this.throwIfDisposed(), pt.sub(this, t);
      }),
      (o.prototype.subStrict = function (t) {
        return this.throwIfDisposed(), pt.subStrict(this, t);
      }),
      (o.prototype.pow = function (t) {
        return this.throwIfDisposed(), pt.pow(this, t);
      }),
      (o.prototype.powStrict = function (t) {
        return this.throwIfDisposed(), pt.powStrict(this, t);
      }),
      (o.prototype.mul = function (t) {
        return this.throwIfDisposed(), pt.mul(this, t);
      }),
      (o.prototype.mulStrict = function (t) {
        return this.throwIfDisposed(), pt.mulStrict(this, t);
      }),
      (o.prototype.div = function (t) {
        return this.throwIfDisposed(), pt.div(this, t);
      }),
      (o.prototype.floorDiv = function (t) {
        return this.throwIfDisposed(), pt.floorDiv(this, t);
      }),
      (o.prototype.divStrict = function (t) {
        return this.throwIfDisposed(), pt.divStrict(this, t);
      }),
      (o.prototype.minimum = function (t) {
        return this.throwIfDisposed(), pt.minimum(this, t);
      }),
      (o.prototype.minimumStrict = function (t) {
        return this.throwIfDisposed(), pt.minimumStrict(this, t);
      }),
      (o.prototype.maximum = function (t) {
        return this.throwIfDisposed(), pt.maximum(this, t);
      }),
      (o.prototype.maximumStrict = function (t) {
        return this.throwIfDisposed(), pt.maximumStrict(this, t);
      }),
      (o.prototype.mod = function (t) {
        return this.throwIfDisposed(), pt.mod(this, t);
      }),
      (o.prototype.modStrict = function (t) {
        return this.throwIfDisposed(), pt.modStrict(this, t);
      }),
      (o.prototype.squaredDifference = function (t) {
        return this.throwIfDisposed(), pt.squaredDifference(this, t);
      }),
      (o.prototype.squaredDifferenceStrict = function (t) {
        return this.throwIfDisposed(), pt.squaredDifferenceStrict(this, t);
      }),
      (o.prototype.transpose = function (t) {
        return this.throwIfDisposed(), pt.transpose(this, t);
      }),
      (o.prototype.notEqual = function (t) {
        return this.throwIfDisposed(), pt.notEqual(this, t);
      }),
      (o.prototype.notEqualStrict = function (t) {
        return this.throwIfDisposed(), pt.notEqualStrict(this, t);
      }),
      (o.prototype.less = function (t) {
        return this.throwIfDisposed(), pt.less(this, t);
      }),
      (o.prototype.lessStrict = function (t) {
        return this.throwIfDisposed(), pt.lessStrict(this, t);
      }),
      (o.prototype.equal = function (t) {
        return this.throwIfDisposed(), pt.equal(this, t);
      }),
      (o.prototype.equalStrict = function (t) {
        return this.throwIfDisposed(), pt.equalStrict(this, t);
      }),
      (o.prototype.lessEqual = function (t) {
        return this.throwIfDisposed(), pt.lessEqual(this, t);
      }),
      (o.prototype.lessEqualStrict = function (t) {
        return this.throwIfDisposed(), pt.lessEqualStrict(this, t);
      }),
      (o.prototype.greater = function (t) {
        return this.throwIfDisposed(), pt.greater(this, t);
      }),
      (o.prototype.greaterStrict = function (t) {
        return this.throwIfDisposed(), pt.greaterStrict(this, t);
      }),
      (o.prototype.greaterEqual = function (t) {
        return this.throwIfDisposed(), pt.greaterEqual(this, t);
      }),
      (o.prototype.greaterEqualStrict = function (t) {
        return this.throwIfDisposed(), pt.greaterEqualStrict(this, t);
      }),
      (o.prototype.logicalAnd = function (t) {
        return this.throwIfDisposed(), pt.logicalAnd(this, t);
      }),
      (o.prototype.logicalOr = function (t) {
        return this.throwIfDisposed(), pt.logicalOr(this, t);
      }),
      (o.prototype.logicalNot = function () {
        return this.throwIfDisposed(), pt.logicalNot(this);
      }),
      (o.prototype.logicalXor = function (t) {
        return this.throwIfDisposed(), pt.logicalXor(this, t);
      }),
      (o.prototype.where = function (t, e) {
        return this.throwIfDisposed(), pt.where(t, this, e);
      }),
      (o.prototype.neg = function () {
        return this.throwIfDisposed(), pt.neg(this);
      }),
      (o.prototype.ceil = function () {
        return this.throwIfDisposed(), pt.ceil(this);
      }),
      (o.prototype.floor = function () {
        return this.throwIfDisposed(), pt.floor(this);
      }),
      (o.prototype.sign = function () {
        return this.throwIfDisposed(), pt.sign(this);
      }),
      (o.prototype.exp = function () {
        return this.throwIfDisposed(), pt.exp(this);
      }),
      (o.prototype.expm1 = function () {
        return this.throwIfDisposed(), pt.expm1(this);
      }),
      (o.prototype.log = function () {
        return this.throwIfDisposed(), pt.log(this);
      }),
      (o.prototype.log1p = function () {
        return this.throwIfDisposed(), pt.log1p(this);
      }),
      (o.prototype.sqrt = function () {
        return this.throwIfDisposed(), pt.sqrt(this);
      }),
      (o.prototype.rsqrt = function () {
        return this.throwIfDisposed(), pt.rsqrt(this);
      }),
      (o.prototype.square = function () {
        return this.throwIfDisposed(), pt.square(this);
      }),
      (o.prototype.reciprocal = function () {
        return this.throwIfDisposed(), pt.reciprocal(this);
      }),
      (o.prototype.abs = function () {
        return this.throwIfDisposed(), pt.abs(this);
      }),
      (o.prototype.clipByValue = function (t, e) {
        return this.throwIfDisposed(), pt.clipByValue(this, t, e);
      }),
      (o.prototype.relu = function () {
        return this.throwIfDisposed(), pt.relu(this);
      }),
      (o.prototype.elu = function () {
        return this.throwIfDisposed(), pt.elu(this);
      }),
      (o.prototype.selu = function () {
        return this.throwIfDisposed(), pt.selu(this);
      }),
      (o.prototype.leakyRelu = function (t) {
        return (
          void 0 === t && (t = 0.2),
          this.throwIfDisposed(),
          pt.leakyRelu(this, t)
        );
      }),
      (o.prototype.prelu = function (t) {
        return this.throwIfDisposed(), pt.prelu(this, t);
      }),
      (o.prototype.sigmoid = function () {
        return this.throwIfDisposed(), pt.sigmoid(this);
      }),
      (o.prototype.logSigmoid = function () {
        return this.throwIfDisposed(), pt.logSigmoid(this);
      }),
      (o.prototype.softplus = function () {
        return this.throwIfDisposed(), pt.softplus(this);
      }),
      (o.prototype.zerosLike = function () {
        return this.throwIfDisposed(), pt.zerosLike(this);
      }),
      (o.prototype.onesLike = function () {
        return this.throwIfDisposed(), pt.onesLike(this);
      }),
      (o.prototype.sin = function () {
        return this.throwIfDisposed(), pt.sin(this);
      }),
      (o.prototype.cos = function () {
        return this.throwIfDisposed(), pt.cos(this);
      }),
      (o.prototype.tan = function () {
        return this.throwIfDisposed(), pt.tan(this);
      }),
      (o.prototype.asin = function () {
        return this.throwIfDisposed(), pt.asin(this);
      }),
      (o.prototype.acos = function () {
        return this.throwIfDisposed(), pt.acos(this);
      }),
      (o.prototype.atan = function () {
        return this.throwIfDisposed(), pt.atan(this);
      }),
      (o.prototype.sinh = function () {
        return this.throwIfDisposed(), pt.sinh(this);
      }),
      (o.prototype.cosh = function () {
        return this.throwIfDisposed(), pt.cosh(this);
      }),
      (o.prototype.tanh = function () {
        return this.throwIfDisposed(), pt.tanh(this);
      }),
      (o.prototype.asinh = function () {
        return this.throwIfDisposed(), pt.asinh(this);
      }),
      (o.prototype.acosh = function () {
        return this.throwIfDisposed(), pt.acosh(this);
      }),
      (o.prototype.atanh = function () {
        return this.throwIfDisposed(), pt.atanh(this);
      }),
      (o.prototype.erf = function () {
        return this.throwIfDisposed(), pt.erf(this);
      }),
      (o.prototype.round = function () {
        return this.throwIfDisposed(), pt.round(this);
      }),
      (o.prototype.step = function (t) {
        return (
          void 0 === t && (t = 0), this.throwIfDisposed(), pt.step(this, t)
        );
      }),
      (o.prototype.softmax = function (t) {
        return (
          void 0 === t && (t = -1), this.throwIfDisposed(), pt.softmax(this, t)
        );
      }),
      (o.prototype.logSoftmax = function (t) {
        return (
          void 0 === t && (t = -1),
          this.throwIfDisposed(),
          pt.logSoftmax(this, t)
        );
      }),
      (o.prototype.resizeBilinear = function (t, e) {
        return (
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.image.resizeBilinear(this, t, e)
        );
      }),
      (o.prototype.resizeNearestNeighbor = function (t, e) {
        return (
          void 0 === e && (e = !1),
          this.throwIfDisposed(),
          pt.image.resizeNearestNeighbor(this, t, e)
        );
      }),
      (o.prototype.conv1d = function (t, e, n, r, o, i) {
        return (
          void 0 === r && (r = "NWC"),
          void 0 === o && (o = 1),
          this.throwIfDisposed(),
          pt.conv1d(this, t, e, n, r, o, i)
        );
      }),
      (o.prototype.conv2d = function (t, e, n, r, o, i) {
        return (
          void 0 === r && (r = "NHWC"),
          void 0 === o && (o = [1, 1]),
          this.throwIfDisposed(),
          pt.conv2d(this, t, e, n, r, o, i)
        );
      }),
      (o.prototype.conv2dTranspose = function (t, e, n, r, o) {
        return this.throwIfDisposed(), pt.conv2dTranspose(this, t, e, n, r, o);
      }),
      (o.prototype.depthwiseConv2D = function (t, e, n, r, o, i) {
        return (
          void 0 === r && (r = "NHWC"),
          void 0 === o && (o = [1, 1]),
          this.throwIfDisposed(),
          pt.depthwiseConv2d(this, t, e, n, r, o, i)
        );
      }),
      (o.prototype.separableConv2d = function (t, e, n, r, o, i) {
        return (
          void 0 === o && (o = [1, 1]),
          void 0 === i && (i = "NHWC"),
          this.throwIfDisposed(),
          pt.separableConv2d(this, t, e, n, r, o, i)
        );
      }),
      (o.prototype.avgPool = function (t, e, n, r) {
        return this.throwIfDisposed(), pt.avgPool(this, t, e, n, r);
      }),
      (o.prototype.maxPool = function (t, e, n, r) {
        return this.throwIfDisposed(), pt.maxPool(this, t, e, n, r);
      }),
      (o.prototype.localResponseNormalization = function (t, e, n, r) {
        return (
          void 0 === t && (t = 5),
          void 0 === e && (e = 1),
          void 0 === n && (n = 1),
          void 0 === r && (r = 0.5),
          pt.localResponseNormalization(this, t, e, n, r)
        );
      }),
      (o.prototype.pool = function (t, e, n, r, o) {
        return this.throwIfDisposed(), pt.pool(this, t, e, n, r, o);
      }),
      (o.prototype.variable = function (t, e, n) {
        return (
          void 0 === t && (t = !0),
          this.throwIfDisposed(),
          vt.variable(this, t, e, n)
        );
      }),
      (o.prototype.unsortedSegmentSum = function (t, e) {
        return this.throwIfDisposed(), pt.unsortedSegmentSum(this, t, e);
      }),
      (o.prototype.batchToSpaceND = function (t, e) {
        return this.throwIfDisposed(), pt.batchToSpaceND(this, t, e);
      }),
      (o.prototype.spaceToBatchND = function (t, e) {
        return this.throwIfDisposed(), pt.spaceToBatchND(this, t, e);
      }),
      (o.prototype.topk = function (t, e) {
        return (
          void 0 === t && (t = 1),
          void 0 === e && (e = !0),
          this.throwIfDisposed(),
          pt.topk(this, t, e)
        );
      }),
      (o.prototype.stridedSlice = function (t, e, n, r, o, i, a, s) {
        return (
          void 0 === r && (r = 0),
          void 0 === o && (o = 0),
          void 0 === i && (i = 0),
          void 0 === a && (a = 0),
          void 0 === s && (s = 0),
          this.throwIfDisposed(),
          pt.stridedSlice(this, t, e, n, r, o, i, a, s)
        );
      }),
      (o.prototype.depthToSpace = function (t, e) {
        return this.throwIfDisposed(), pt.depthToSpace(this, t, e);
      }),
      (o.prototype.fft = function () {
        return this.throwIfDisposed(), pt.spectral.fft(this);
      }),
      (o.prototype.ifft = function () {
        return this.throwIfDisposed(), pt.spectral.ifft(this);
      }),
      (o.prototype.rfft = function () {
        return this.throwIfDisposed(), pt.spectral.rfft(this);
      }),
      (o.prototype.irfft = function () {
        return this.throwIfDisposed(), pt.spectral.irfft(this);
      }),
      o
    );
  })();
  Object.defineProperty(dt, Symbol.hasInstance, {
    value: function (t) {
      return !!t && null != t.dataId && null != t.shape && null != t.dtype;
    },
  });
  var vt = (function (o) {
    function i(t, e, n) {
      void 0 === e && (e = !0);
      var r = o.call(this, t.shape, t.dtype, null, t.dataId) || this;
      (r.trainable = e),
        (r.name = n),
        null == r.name && (r.name = ht().nextVariableId().toString());
      try {
        ht().registerVariable(r);
      } catch (t) {
        throw (ht().disposeTensor(r), t);
      }
      return r;
    }
    return (
      s(i, o),
      (i.variable = function (t, e, n, r) {
        return (
          void 0 === e && (e = !0),
          null != r && r !== t.dtype && (t = t.asType(r)),
          new i(t, e, n)
        );
      }),
      (i.prototype.assign = function (t) {
        if (t.dtype !== this.dtype)
          throw new Error(
            "dtype of the new value (" +
              t.dtype +
              ") and previous value (" +
              this.dtype +
              ") must match"
          );
        if (!E(t.shape, this.shape))
          throw new Error(
            "shape of the new value (" +
              t.shape +
              ") and previous value (" +
              this.shape +
              ") must match"
          );
        ht().disposeTensor(this),
          (this.dataId = t.dataId),
          ht().registerTensor(this);
      }),
      i
    );
  })(dt);
  Object.defineProperty(vt, Symbol.hasInstance, {
    value: function (t) {
      return (
        t instanceof dt && null != t.assign && t.assign instanceof Function
      );
    },
  });
  var mt,
    gt,
    yt,
    xt,
    wt,
    bt,
    Et,
    Ct,
    _t,
    St,
    Rt = vt.variable;
  ((St = mt || (mt = {})).R0 = "R0"),
    (St.R1 = "R1"),
    (St.R2 = "R2"),
    (St.R3 = "R3"),
    (St.R4 = "R4"),
    (St.R5 = "R5"),
    (St.R6 = "R6"),
    ((_t = gt || (gt = {})).float32 = "float32"),
    (_t.int32 = "int32"),
    (_t.bool = "int32"),
    (_t.complex64 = "complex64"),
    ((Ct = yt || (yt = {})).float32 = "float32"),
    (Ct.int32 = "int32"),
    (Ct.bool = "bool"),
    (Ct.complex64 = "complex64"),
    ((Et = xt || (xt = {})).float32 = "float32"),
    (Et.int32 = "float32"),
    (Et.bool = "float32"),
    (Et.complex64 = "complex64"),
    ((bt = wt || (wt = {})).float32 = "complex64"),
    (bt.int32 = "complex64"),
    (bt.bool = "complex64"),
    (bt.complex64 = "complex64");
  var Nt = { float32: xt, int32: gt, bool: yt, complex64: wt };
  function kt(t, e) {
    if ("string" !== t && "string" !== e) return Nt[t][e];
    if ("string" === t && "string" === e) return "string";
    throw new Error("Can not upcast " + t + " with " + e);
  }
  function It(t) {
    return kt(t, "int32");
  }
  function Tt(t, e) {
    if (t.dtype === e.dtype) return [t, e];
    var n = kt(t.dtype, e.dtype);
    return [t.cast(n), e.cast(n)];
  }
  function At(t, e) {
    D(t.dtype === e.dtype, function () {
      return (
        "The dtypes of the first(" +
        t.dtype +
        ") and second(" +
        e.dtype +
        ") input must match"
      );
    });
  }
  function Dt(t) {
    var e = [];
    return (
      (function t(e, n, r) {
        if (null != e)
          if (e instanceof dt) n.push(e);
          else if (((s = e), Array.isArray(s) || "object" == typeof s)) {
            var o = e;
            for (var i in o) {
              var a = o[i];
              r.has(a) || (r.add(a), t(a, n, r));
            }
          }
        var s;
      })(t, e, new Set()),
      e
    );
  }
  var Mt,
    Ot,
    Pt = Object.freeze({
      makeTypesMatch: Tt,
      assertTypesMatch: At,
      isTensorInList: function (t, e) {
        for (var n = 0; n < e.length; n++) if (e[n].id === t.id) return !0;
        return !1;
      },
      getTensorsInContainer: Dt,
    }),
    Ft = (function () {
      function t(t, e, n) {
        (this.backend = t),
          (this.safeMode = e),
          (this.debugMode = n),
          (this.registeredVariables = {}),
          (this.nextTapeNodeId = 0),
          (this.numBytes = 0),
          (this.numTensors = 0),
          (this.numStringTensors = 0),
          (this.numDataBuffers = 0),
          (this.profiling = !1),
          (this.gradientDepth = 0),
          (this.kernelDepth = 0),
          (this.scopeStack = []),
          (this.nextScopeId = 0),
          (this.tensorInfo = new WeakMap()),
          (this.profiler = new et(t)),
          (this.activeProfile = {
            newBytes: 0,
            newTensors: 0,
            peakBytes: 0,
            kernels: [],
            result: null,
          });
      }
      return (
        (t.prototype.moveData = function (t) {
          this.write(t, this.readSync(t));
        }),
        (t.prototype.tidy = function (t, e) {
          var n,
            r = this,
            o = null;
          if (null == e) {
            if ("function" != typeof t)
              throw new Error("Please provide a function to tidy()");
            e = t;
          } else {
            if ("string" != typeof t && !(t instanceof String))
              throw new Error(
                "When calling with two arguments, the first argument to tidy() must be a string"
              );
            if ("function" != typeof e)
              throw new Error(
                "When calling with two arguments, the 2nd argument to tidy() must be a function"
              );
            o = t;
          }
          return this.scopedRun(
            function () {
              return r.startScope(o);
            },
            function () {
              return r.endScope(n);
            },
            function () {
              return (
                (n = e()) instanceof Promise &&
                  console.error("Cannot return a Promise inside of tidy."),
                n
              );
            }
          );
        }),
        (t.prototype.scopedRun = function (t, e, n) {
          t();
          try {
            var r = n();
            return e(), r;
          } catch (t) {
            throw (e(), t);
          }
        }),
        (t.prototype.nextTensorId = function () {
          return t.nextTensorId++;
        }),
        (t.prototype.nextVariableId = function () {
          return t.nextVariableId++;
        }),
        (t.prototype.clone = function (t) {
          var e = dt.make(t.shape, { dataId: t.dataId }, t.dtype);
          return (
            this.addTapeNode([t], e, function (t) {
              return [t.toFloat()];
            }),
            e
          );
        }),
        (t.prototype.runKernel = function (t, e, n) {
          var r,
            o = this,
            i = [],
            a = this.isTapeOn(),
            s = null != this.activeScope ? this.activeScope.name : "",
            u = function (t) {
              a &&
                (i = t.map(function (t) {
                  return o.keep(o.clone(t));
                }));
            },
            c = this.numBytes,
            l = this.numTensors;
          if (
            (this.scopedRun(
              function () {
                return o.kernelDepth++;
              },
              function () {
                return o.kernelDepth--;
              },
              function () {
                r = o.debugMode()
                  ? o.profiler.profileKernel(s, function () {
                      return t(o.backend, u);
                    })
                  : t(o.backend, u);
              }
            ),
            a)
          ) {
            var h = {
              id: this.nextTapeNodeId++,
              name: s,
              inputs: e,
              outputs: Array.isArray(r) ? r : [r],
              saved: i,
            };
            null != n &&
              (h.gradient = function (t) {
                return n(t, i);
              }),
              this.activeTape.push(h);
          }
          return (
            this.profiling &&
              this.activeProfile.kernels.push({
                name: s,
                bytesAdded: this.numBytes - c,
                totalBytesSnapshot: this.numBytes,
                tensorsAdded: this.numTensors - l,
                totalTensorsSnapshot: this.numTensors,
                inputShapes: Object.keys(e).map(function (t) {
                  return e[t].shape;
                }),
                outputShape: Array.isArray(r)
                  ? r.map(function (t) {
                      return t.shape;
                    })
                  : r.shape,
              }),
            r
          );
        }),
        (t.prototype.registerTensor = function (t, e) {
          var n = this.tensorInfo.has(t.dataId)
            ? this.tensorInfo.get(t.dataId).refCount
            : 0;
          if (
            (this.numTensors++,
            "string" === t.dtype && this.numStringTensors++,
            0 === n)
          ) {
            this.numDataBuffers++;
            var r = 0;
            "complex64" !== t.dtype &&
              "string" !== t.dtype &&
              (r = t.size * U(t.dtype)),
              this.tensorInfo.set(t.dataId, {
                backend: null != e ? e : this.backend,
                dtype: t.dtype,
                shape: t.shape,
                bytes: r,
                refCount: 0,
              }),
              (this.numBytes += r),
              null != e
                ? e.register(t.dataId, t.shape, t.dtype)
                : this.backend.register(t.dataId, t.shape, t.dtype);
          }
          this.tensorInfo.get(t.dataId).refCount++,
            t instanceof vt || this.track(t);
        }),
        (t.prototype.registerVariable = function (t) {
          if (null != this.registeredVariables[t.name])
            throw new Error(
              "Variable with name " + t.name + " was already registered"
            );
          this.registeredVariables[t.name] = t;
        }),
        (t.prototype.disposeTensor = function (t) {
          if (this.tensorInfo.has(t.dataId)) {
            this.numTensors--, "string" === t.dtype && this.numStringTensors--;
            var e = this.tensorInfo.get(t.dataId);
            e.refCount <= 1
              ? ("complex64" !== t.dtype && (this.numBytes -= e.bytes),
                this.numDataBuffers--,
                e.backend.disposeData(t.dataId),
                this.tensorInfo.delete(t.dataId))
              : this.tensorInfo.get(t.dataId).refCount--;
          }
        }),
        (t.prototype.disposeVariables = function () {
          for (var t in this.registeredVariables) {
            var e = this.registeredVariables[t];
            this.disposeTensor(e), delete this.registeredVariables[t];
          }
        }),
        (t.prototype.memory = function () {
          var t = this.backend.memory();
          return (
            (t.numTensors = this.numTensors),
            (t.numDataBuffers = this.numDataBuffers),
            (t.numBytes = this.numBytes),
            0 < this.numStringTensors &&
              ((t.unreliable = !0),
              null == t.reasons && (t.reasons = []),
              t.reasons.push(
                "Memory usage by string tensors is approximate (2 bytes per character)"
              )),
            t
          );
        }),
        (t.prototype.profile = function (r) {
          return m(this, void 0, void 0, function () {
            var e, n;
            return R(this, function (t) {
              return (
                (this.profiling = !0),
                (e = this.numBytes),
                (n = this.numTensors),
                (this.activeProfile.kernels = []),
                (this.activeProfile.result = r()),
                (this.profiling = !1),
                (this.activeProfile.peakBytes = Math.max.apply(
                  Math,
                  this.activeProfile.kernels.map(function (t) {
                    return t.totalBytesSnapshot;
                  })
                )),
                (this.activeProfile.newBytes = this.numBytes - e),
                (this.activeProfile.newTensors = this.numTensors - n),
                [2, this.activeProfile]
              );
            });
          });
        }),
        (t.prototype.isTapeOn = function () {
          return 0 < this.gradientDepth && 0 === this.kernelDepth;
        }),
        (t.prototype.addTapeNode = function (t, e, r) {
          var n = {};
          t.forEach(function (t, e) {
            n[e] = t;
          });
          var o = {
            id: this.nextTapeNodeId++,
            name: this.activeScope.name,
            inputs: n,
            outputs: [e],
            gradient: function (t) {
              var n = {};
              return (
                r(t).forEach(function (t, e) {
                  n[e] = function () {
                    return t;
                  };
                }),
                n
              );
            },
          };
          this.activeTape.push(o);
        }),
        (t.prototype.keep = function (t) {
          if (1 === this.scopeStack.length && this.safeMode)
            throw new Error(
              "Safe mode is ON. Enclose all tensor operations inside tf.tidy(): tf.tidy(() => {...}) to avoid memory leaks."
            );
          return (t.kept = !0), t;
        }),
        (t.prototype.startTape = function () {
          0 === this.gradientDepth && (this.activeTape = []),
            this.gradientDepth++;
        }),
        (t.prototype.endTape = function () {
          this.gradientDepth--;
        }),
        (t.prototype.startScope = function (t) {
          var e = { track: [], name: "unnamed scope", id: this.nextScopeId++ };
          t && (e.name = t), this.scopeStack.push(e), (this.activeScope = e);
        }),
        (t.prototype.endScope = function (t) {
          for (
            var e = this,
              n = Dt(t),
              r = new Set(
                n.map(function (t) {
                  return t.id;
                })
              ),
              o = 0;
            o < this.activeScope.track.length;
            o++
          ) {
            var i = this.activeScope.track[o];
            i.kept || r.has(i.id) || i.dispose();
          }
          var a = this.scopeStack.pop();
          (this.activeScope =
            0 === this.scopeStack.length
              ? null
              : this.scopeStack[this.scopeStack.length - 1]),
            n.forEach(function (t) {
              t.kept || t.scopeId !== a.id || e.track(t);
            });
        }),
        (t.prototype.gradients = function (t, o, i, e) {
          var a = this;
          if (
            (void 0 === e && (e = !1),
            D(0 < o.length, function () {
              return "gradients() received an empty list of xs.";
            }),
            null != i && "float32" !== i.dtype)
          )
            throw new Error(
              "dy must have 'float32' dtype, but has '" + i.dtype + "'"
            );
          var s = this.scopedRun(
            function () {
              return a.startTape();
            },
            function () {
              return a.endTape();
            },
            function () {
              return a.tidy("forward", t);
            }
          );
          D(s instanceof dt, function () {
            return "The result y returned by f() must be a tensor.";
          });
          var u = (function (t, e, n) {
            for (var r = {}, o = {}, i = 0; i < e.length; i++) r[e[i].id] = !0;
            for (i = 0; i < t.length; i++) {
              var a = (d = t[i]).inputs;
              for (var s in a) {
                for (var u = a[s], c = !1, l = 0; l < e.length; l++)
                  if (r[u.id]) {
                    d.outputs.forEach(function (t) {
                      return (r[t.id] = !0);
                    }),
                      (c = !0),
                      (o[d.id] = !0);
                    break;
                  }
                if (c) break;
              }
            }
            var h = {};
            h[n.id] = !0;
            var p = {};
            for (i = t.length - 1; 0 <= i; i--)
              for (a = (d = t[i]).inputs, l = 0; l < d.outputs.length; l++)
                if (h[d.outputs[l].id]) {
                  for (var s in a) (h[a[s].id] = !0), (p[d.id] = !0);
                  break;
                }
            var f = [];
            for (i = 0; i < t.length; i++) {
              var d;
              if (o[(d = t[i]).id] && p[d.id]) {
                var v = {};
                for (var s in d.inputs) {
                  var m = d.inputs[s];
                  r[m.id] && (v[s] = m);
                }
                var g = Object.assign({}, d);
                (g.inputs = v), (g.outputs = d.outputs), f.push(g);
              }
            }
            return f;
          })(this.activeTape, o, s);
          if (!e && 0 === u.length && 0 < o.length)
            throw new Error(
              "Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y."
            );
          return this.tidy("backward", function () {
            var t,
              e,
              n = {};
            (n[s.id] =
              null == i
                ? ((t = s.shape),
                  (e = Q(B(t), "float32")),
                  dt.make(t, { values: e }))
                : i),
              (function (a, s, u) {
                for (
                  var t = function (t) {
                      var o = s[t],
                        r = [];
                      if (
                        (o.outputs.forEach(function (t) {
                          var e = a[t.id];
                          if (null != e) r.push(e);
                          else {
                            var n = dt.make(
                              t.shape,
                              { values: J(t.size, t.dtype) },
                              t.dtype
                            );
                            r.push(n);
                          }
                        }),
                        null == o.gradient)
                      )
                        throw new Error(
                          "Cannot compute gradient: gradient function not found for " +
                            o.name +
                            "."
                        );
                      var i = o.gradient(1 === o.outputs.length ? r[0] : r),
                        e = function (t) {
                          if (!(t in i))
                            throw new Error(
                              "Cannot backprop through input " +
                                t +
                                ". Available gradients found: " +
                                Object.keys(i) +
                                "."
                            );
                          var e = u(function () {
                            return i[t]();
                          });
                          if ("float32" !== e.dtype)
                            throw new Error(
                              "Error in gradient for op " +
                                o.name +
                                ". The gradient of input " +
                                t +
                                " must have 'float32' dtype, but has '" +
                                e.dtype +
                                "'"
                            );
                          var n = o.inputs[t];
                          if (!E(e.shape, n.shape))
                            throw new Error(
                              "Error in gradient for op " +
                                o.name +
                                ". The gradient of input '" +
                                t +
                                "' has shape '" +
                                e.shape +
                                "', which does not match the shape of the input '" +
                                n.shape +
                                "'"
                            );
                          if (null == a[n.id]) a[n.id] = e;
                          else {
                            var r = a[n.id];
                            (a[n.id] = r.add(e)), r.dispose();
                          }
                        };
                      for (var n in o.inputs) e(n);
                    },
                    e = s.length - 1;
                  0 <= e;
                  e--
                )
                  t(e);
              })(n, u, function (t) {
                return a.tidy(t);
              });
            var r = o.map(function (t) {
              return n[t.id];
            });
            return (
              0 === a.gradientDepth &&
                (a.activeTape.forEach(function (t) {
                  for (var e in t.saved) t.saved[e].dispose();
                }),
                (a.activeTape = null)),
              { value: s, grads: r }
            );
          });
        }),
        (t.prototype.customGrad = function (r) {
          var e = this;
          return (
            D(j(r), function () {
              return "The f passed in customGrad(f) must be a function.";
            }),
            function () {
              for (var i, a = [], t = 0; t < arguments.length; t++)
                a[t] = arguments[t];
              D(
                a.every(function (t) {
                  return t instanceof dt;
                }),
                function () {
                  return "The args passed in customGrad(f)(x1, x2,...) must all be tensors";
                }
              );
              var n = {};
              return (
                a.forEach(function (t, e) {
                  n[e] = t;
                }),
                e.runKernel(
                  function (t, e) {
                    return (
                      D(
                        (i = r.apply(void 0, a.concat([e]))).value instanceof
                          dt,
                        function () {
                          return "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor";
                        }
                      ),
                      D(j(i.gradFunc), function () {
                        return "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.";
                      }),
                      i.value
                    );
                  },
                  n,
                  function (t, e) {
                    var n = i.gradFunc(t, e),
                      r = Array.isArray(n) ? n : [n];
                    D(r.length === a.length, function () {
                      return "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...).";
                    }),
                      D(
                        r.every(function (t) {
                          return t instanceof dt;
                        }),
                        function () {
                          return "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.";
                        }
                      );
                    var o = {};
                    return (
                      r.forEach(function (t, e) {
                        o[e] = function () {
                          return t;
                        };
                      }),
                      o
                    );
                  }
                )
              );
            }
          );
        }),
        (t.prototype.write = function (t, e) {
          var n = this.tensorInfo.get(t);
          if ("string" === n.dtype) {
            var r = G(e);
            (this.numBytes += r - n.bytes), (n.bytes = r);
          }
          this.backend !== n.backend &&
            (n.backend.disposeData(t),
            (n.backend = this.backend),
            this.backend.register(t, n.shape, n.dtype)),
            this.backend.write(t, e);
        }),
        (t.prototype.readSync = function (t) {
          return this.tensorInfo.get(t).backend.readSync(t);
        }),
        (t.prototype.read = function (t) {
          return this.tensorInfo.get(t).backend.read(t);
        }),
        (t.prototype.fromPixels = function (t, e) {
          return this.backend.fromPixels(t, e);
        }),
        (t.prototype.time = function (r) {
          return m(this, void 0, void 0, function () {
            var e, n;
            return R(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = Z()), [4, this.backend.time(r)];
                case 1:
                  return ((n = t.sent()).wallMs = Z() - e), [2, n];
              }
            });
          });
        }),
        (t.prototype.track = function (t) {
          if (1 === this.scopeStack.length && this.safeMode)
            throw new Error(
              "Safe mode is ON. Enclose all tensor operations inside tf.tidy(): tf.tidy(() => {op();...}); to avoid memory leaks."
            );
          return (
            null != this.activeScope &&
              ((t.scopeId = this.activeScope.id),
              this.activeScope.track.push(t)),
            t
          );
        }),
        (t.nextTensorId = 0),
        (t.nextVariableId = 0),
        t
      );
    })();
  ((Ot = Mt || (Mt = {}))[(Ot.NUMBER = 0)] = "NUMBER"),
    (Ot[(Ot.BOOLEAN = 1)] = "BOOLEAN"),
    (Ot[(Ot.STRING = 2)] = "STRING");
  var Lt,
    Bt,
    Wt = [
      { name: "DEBUG", type: Mt.BOOLEAN },
      { name: "IS_BROWSER", type: Mt.BOOLEAN },
      { name: "WEBGL_LAZILY_UNPACK", type: Mt.BOOLEAN },
      { name: "WEBGL_CPU_FORWARD", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK_BATCHNORMALIZATION", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK_CLIP", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK_DEPTHWISECONV", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK_BINARY_OPERATIONS", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK_ARRAY_OPERATIONS", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK_IMAGE_OPERATIONS", type: Mt.BOOLEAN },
      { name: "WEBGL_PACK_REDUCE", type: Mt.BOOLEAN },
      { name: "WEBGL_CONV_IM2COL", type: Mt.BOOLEAN },
      { name: "WEBGL_MAX_TEXTURE_SIZE", type: Mt.NUMBER },
      { name: "WEBGL_NUM_MB_BEFORE_PAGING", type: Mt.NUMBER },
      { name: "WEBGL_MAX_TEXTURES_IN_SHADER", type: Mt.NUMBER },
      { name: "WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION", type: Mt.NUMBER },
      {
        name: "WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",
        type: Mt.BOOLEAN,
      },
      { name: "WEBGL_VERSION", type: Mt.NUMBER },
      { name: "WEBGL_RENDER_FLOAT32_ENABLED", type: Mt.BOOLEAN },
      { name: "WEBGL_DOWNLOAD_FLOAT_ENABLED", type: Mt.BOOLEAN },
      { name: "WEBGL_FENCE_API_ENABLED", type: Mt.BOOLEAN },
      { name: "WEBGL_SIZE_UPLOAD_UNIFORM", type: Mt.NUMBER },
      { name: "BACKEND", type: Mt.STRING },
      { name: "EPSILON", type: Mt.NUMBER },
      { name: "PROD", type: Mt.BOOLEAN },
      { name: "TENSORLIKE_CHECK_SHAPE_CONSISTENCY", type: Mt.BOOLEAN },
      { name: "DEPRECATION_WARNINGS_ENABLED", type: Mt.BOOLEAN },
    ];
  function zt(t) {
    try {
      if (null != l(t)) return !0;
    } catch (t) {
      return !1;
    }
    return !1;
  }
  var Ut = "tfjsflags";
  function Gt() {
    var e = {};
    if (
      "undefined" == typeof window ||
      void 0 === window.location ||
      void 0 === window.location.search
    )
      return e;
    var t,
      a,
      n =
        ((t = window.location.search),
        (a = {}),
        t.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, function (t) {
          for (var e = [], n = 1; n < arguments.length; n++)
            e[n - 1] = arguments[n];
          return (
            (r = a),
            (o = e[0]),
            (i = e[1]),
            (r[decodeURIComponent(o)] = decodeURIComponent(i || "")),
            e.join("=")
          );
          var r, o, i;
        }),
        a);
    if (Ut in n) {
      var o = {};
      n[Ut].split(",").forEach(function (t) {
        var e = t.split(":"),
          n = e[0],
          r = e[1];
        o[n] = r;
      }),
        Wt.forEach(function (t) {
          t.name in o &&
            (console.log(
              "Setting feature override from URL " + t.name + ": " + o[t.name]
            ),
            t.type === Mt.NUMBER
              ? (e[t.name] = +o[t.name])
              : t.type === Mt.BOOLEAN
              ? (e[t.name] = "true" === o[t.name])
              : t.type === Mt.STRING
              ? (e[t.name] = o[t.name])
              : console.warn("Unknown URL param: " + t.name + "."));
        });
    }
    return e;
  }
  function Vt(t, e) {
    return null != t.getExtension(e);
  }
  function Ht(t, e) {
    var n = t.createFramebuffer(),
      r = t.createTexture();
    t.bindTexture(t.TEXTURE_2D, r);
    var o = 2 === e ? t.RGBA32F : t.RGBA;
    t.texImage2D(t.TEXTURE_2D, 0, o, 1, 1, 0, t.RGBA, t.FLOAT, null),
      t.bindFramebuffer(t.FRAMEBUFFER, n),
      t.framebufferTexture2D(
        t.FRAMEBUFFER,
        t.COLOR_ATTACHMENT0,
        t.TEXTURE_2D,
        r,
        0
      );
    var i = t.checkFramebufferStatus(t.FRAMEBUFFER) === t.FRAMEBUFFER_COMPLETE;
    return (
      t.bindTexture(t.TEXTURE_2D, null),
      t.bindFramebuffer(t.FRAMEBUFFER, null),
      t.deleteTexture(r),
      t.deleteFramebuffer(n),
      i
    );
  }
  var qt,
    jt = (function () {
      function t(t) {
        (this.features = {}),
          (this.registry = {}),
          (this.registryFactory = {}),
          null != t && (this.features = t),
          this.get("DEBUG") &&
            console.warn(
              "Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance."
            );
      }
      return (
        (t.setBackend = function (t, e) {
          if ((void 0 === e && (e = !1), !(t in Zt.registry)))
            throw new Error("Backend name '" + t + "' not found in registry");
          (Zt.engine.backend = Zt.findBackend(t)), (Zt.backendName = t);
        }),
        (t.getBackend = function () {
          return Zt.initEngine(), Zt.backendName;
        }),
        (t.disposeVariables = function () {
          Zt.engine.disposeVariables();
        }),
        (t.memory = function () {
          return Zt.engine.memory();
        }),
        (t.profile = function (t) {
          return Zt.engine.profile(t);
        }),
        (t.tidy = function (t, e) {
          return Zt.engine.tidy(t, e);
        }),
        (t.dispose = function (t) {
          Dt(t).forEach(function (t) {
            return t.dispose();
          });
        }),
        (t.keep = function (t) {
          return Zt.engine.keep(t);
        }),
        (t.time = function (t) {
          return Zt.engine.time(t);
        }),
        (t.prototype.get = function (t) {
          return (
            t in this.features || (this.features[t] = this.evaluateFeature(t)),
            this.features[t]
          );
        }),
        (t.prototype.getFeatures = function () {
          return this.features;
        }),
        (t.prototype.set = function (t, e) {
          this.features[t] = e;
        }),
        (t.prototype.getBestBackendName = function () {
          var e = this;
          if (0 === Object.keys(this.registry).length)
            throw new Error("No backend found in registry.");
          return Object.keys(this.registry)
            .map(function (t) {
              return { name: t, entry: e.registry[t] };
            })
            .sort(function (t, e) {
              return e.entry.priority - t.entry.priority;
            })[0].name;
        }),
        (t.prototype.evaluateFeature = function (t) {
          if ("DEBUG" === t) return !1;
          if ("IS_BROWSER" === t) return "undefined" != typeof window;
          if ("IS_NODE" === t)
            return (
              "undefined" != typeof process &&
              void 0 !== process.versions &&
              void 0 !== process.versions.node
            );
          if ("IS_CHROME" === t)
            return (
              "undefined" != typeof navigator &&
              null != navigator &&
              null != navigator.userAgent &&
              /Chrome/.test(navigator.userAgent) &&
              /Google Inc/.test(navigator.vendor)
            );
          if ("WEBGL_CPU_FORWARD" === t) return !0;
          if ("WEBGL_PACK" === t) return 0 !== this.get("WEBGL_VERSION");
          if ("WEBGL_PACK_BATCHNORMALIZATION" === t)
            return this.get("WEBGL_PACK");
          if ("WEBGL_PACK_CLIP" === t) return this.get("WEBGL_PACK");
          if ("WEBGL_PACK_DEPTHWISECONV" === t) return this.get("WEBGL_PACK");
          if ("WEBGL_PACK_BINARY_OPERATIONS" === t)
            return this.get("WEBGL_PACK");
          if ("WEBGL_PACK_ARRAY_OPERATIONS" === t)
            return this.get("WEBGL_PACK");
          if ("WEBGL_PACK_IMAGE_OPERATIONS" === t)
            return this.get("WEBGL_PACK");
          if ("WEBGL_PACK_REDUCE" === t) return this.get("WEBGL_PACK");
          if ("WEBGL_LAZILY_UNPACK" === t) return this.get("WEBGL_PACK");
          if ("WEBGL_CONV_IM2COL" === t) return this.get("WEBGL_PACK");
          if ("WEBGL_NUM_MB_BEFORE_PAGING" === t)
            return this.get("PROD") || !this.get("IS_BROWSER")
              ? Number.POSITIVE_INFINITY
              : (window.screen.height *
                  window.screen.width *
                  window.devicePixelRatio *
                  600) /
                  1024;
          if ("WEBGL_MAX_TEXTURE_SIZE" === t)
            return (function (t) {
              if (null == Lt) {
                var e = l(t);
                Lt = e.getParameter(e.MAX_TEXTURE_SIZE);
              }
              return Lt;
            })(this.get("WEBGL_VERSION"));
          if ("WEBGL_MAX_TEXTURES_IN_SHADER" === t)
            return (function (t) {
              if (null == Bt) {
                var e = l(t);
                Bt = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);
              }
              return Math.min(16, Bt);
            })(this.get("WEBGL_VERSION"));
          if ("IS_TEST" === t) return !1;
          if ("BACKEND" === t) return this.getBestBackendName();
          if ("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION" === t) {
            var e = this.get("WEBGL_VERSION");
            return 0 === e
              ? 0
              : (function (t) {
                  if (0 === t) return 0;
                  var e = l(t);
                  return Vt(e, "EXT_disjoint_timer_query_webgl2") && 2 === t
                    ? 2
                    : Vt(e, "EXT_disjoint_timer_query")
                    ? 1
                    : 0;
                })(e);
          }
          if ("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE" === t)
            return (
              0 < this.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") &&
              ((n = navigator.userAgent || navigator.vendor || window.opera),
              !(
                /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
                  n
                ) ||
                /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
                  n.substr(0, 4)
                )
              ))
            );
          var n, r;
          if ("HAS_WEBGL" === t) return 0 < this.get("WEBGL_VERSION");
          if ("WEBGL_VERSION" === t) return zt(2) ? 2 : zt(1) ? 1 : 0;
          if ("WEBGL_RENDER_FLOAT32_ENABLED" === t)
            return (function (t) {
              if (0 === t) return !1;
              var e = l(t);
              if (1 === t) {
                if (!Vt(e, "OES_texture_float")) return !1;
              } else if (!Vt(e, "EXT_color_buffer_float")) return !1;
              return Ht(e, t);
            })(this.get("WEBGL_VERSION"));
          if ("WEBGL_DOWNLOAD_FLOAT_ENABLED" === t)
            return (function (t) {
              if (0 === t) return !1;
              var e = l(t);
              if (1 === t) {
                if (!Vt(e, "OES_texture_float")) return !1;
                if (!Vt(e, "WEBGL_color_buffer_float")) return !1;
              } else if (!Vt(e, "EXT_color_buffer_float")) return !1;
              return Ht(e, t);
            })(this.get("WEBGL_VERSION"));
          if ("WEBGL_FENCE_API_ENABLED" === t)
            return (
              2 === (r = this.get("WEBGL_VERSION")) && null != l(r).fenceSync
            );
          if ("WEBGL_SIZE_UPLOAD_UNIFORM" === t)
            return this.get("WEBGL_RENDER_FLOAT32_ENABLED") ? 4 : 0;
          if ("TEST_EPSILON" === t)
            return 32 === this.backend.floatPrecision() ? 0.001 : 0.1;
          if ("EPSILON" === t)
            return 32 === this.backend.floatPrecision() ? 1e-7 : 1e-4;
          if ("PROD" === t) return !1;
          if ("TENSORLIKE_CHECK_SHAPE_CONSISTENCY" === t)
            return !this.get("PROD");
          if ("DEPRECATION_WARNINGS_ENABLED" === t) return !0;
          throw new Error("Unknown feature " + t + ".");
        }),
        (t.prototype.setFeatures = function (t) {
          this.features = Object.assign({}, t);
        }),
        (t.prototype.reset = function () {
          (this.features = Gt()),
            null != this.globalEngine && (this.globalEngine = null);
        }),
        Object.defineProperty(t.prototype, "backend", {
          get: function () {
            return this.engine.backend;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.findBackend = function (t) {
          return t in this.registry ? this.registry[t].backend : null;
        }),
        (t.prototype.findBackendFactory = function (t) {
          return t in this.registryFactory ? this.registryFactory[t] : null;
        }),
        (t.prototype.registerBackend = function (t, e, n) {
          var r = this;
          if ((void 0 === n && (n = 1), t in this.registry))
            return (
              console.warn(
                t + " backend was already registered. Reusing existing backend"
              ),
              !1
            );
          try {
            var o = e();
            return (
              o.setDataMover({
                moveData: function (t) {
                  return r.engine.moveData(t);
                },
              }),
              (this.registry[t] = { backend: o, priority: n }),
              (this.registryFactory[t] = e),
              !0
            );
          } catch (e) {
            return (
              console.warn("Registration of backend " + t + " failed"),
              console.warn(e.stack || e.message),
              !1
            );
          }
        }),
        (t.prototype.removeBackend = function (t) {
          if (!(t in this.registry))
            throw new Error(t + " backend not found in registry");
          this.registry[t].backend.dispose(), delete this.registry[t];
        }),
        Object.defineProperty(t.prototype, "engine", {
          get: function () {
            return this.initEngine(), this.globalEngine;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.initEngine = function () {
          var t = this;
          if (null == this.globalEngine) {
            this.backendName = this.get("BACKEND");
            var e = this.findBackend(this.backendName);
            this.globalEngine = new Ft(e, !1, function () {
              return t.get("DEBUG");
            });
          }
        }),
        Object.defineProperty(t.prototype, "global", {
          get: function () {
            return $t();
          },
          enumerable: !0,
          configurable: !0,
        }),
        t
      );
    })();
  function $t() {
    if (null == qt) {
      var t = void 0;
      if ("undefined" != typeof window) t = window;
      else if ("undefined" != typeof global) t = global;
      else {
        if ("undefined" == typeof process)
          throw new Error("Could not find a global object");
        t = process;
      }
      qt = t;
    }
    return qt;
  }
  function Kt() {
    Zt.set("PROD", !0);
  }
  function Xt() {
    Zt.set("DEBUG", !0);
  }
  function Yt() {
    Zt.set("DEPRECATION_WARNINGS_ENABLED", !1),
      console.warn("TensorFlow.js deprecation warnings have been disabled.");
  }
  function Qt(t) {
    Zt.get("DEPRECATION_WARNINGS_ENABLED") &&
      console.warn(
        t +
          " You can disable deprecation warnings with tf.disableDeprecationWarnings()."
      );
  }
  ft = Qt;
  var Jt,
    Zt =
      (null == (Jt = $t()).ENV && (Jt.ENV = new jt(Gt())),
      (ht = function () {
        return Jt.ENV.engine;
      }),
      Jt.ENV),
    te = Object.freeze({
      EPSILON_FLOAT16: 1e-4,
      EPSILON_FLOAT32: 1e-7,
      Environment: jt,
      enableProdMode: Kt,
      enableDebugMode: Xt,
      disableDeprecationWarnings: Yt,
      deprecationWarn: Qt,
      ENV: Zt,
    });
  function ee(t) {
    var e = t;
    if (z(t)) return [t.length];
    if (!Array.isArray(t)) return [];
    for (var n = []; Array.isArray(e) || z(e); ) n.push(e.length), (e = e[0]);
    return (
      Array.isArray(t) &&
        Zt.get("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") &&
        (function t(e, n, r) {
          if (((r = r || []), Array.isArray(e) || z(e))) {
            D(0 < n.length, function () {
              return (
                "Element arr[" +
                r.join("][") +
                "] should be a primitive, but is an array of " +
                e.length +
                " elements"
              );
            }),
              D(e.length === n[0], function () {
                return (
                  "Element arr[" +
                  r.join("][") +
                  "] should have " +
                  n[0] +
                  " elements, but has " +
                  e.length +
                  " elements"
                );
              });
            for (var o = n.slice(1), i = 0; i < e.length; ++i)
              t(e[i], o, r.concat(i));
          } else
            D(0 === n.length, function () {
              return (
                "Element arr[" +
                r.join("][") +
                "] is a primitive, but should be an array/TypedArray of " +
                n[0] +
                " elements"
              );
            });
        })(t, n, []),
      n
    );
  }
  function ne(t, e, n, r) {
    if (
      null != t &&
      (("numeric" !== t && t !== e) || ("numeric" === t && "string" === e))
    )
      throw new Error(
        "Argument '" +
          n +
          "' passed to '" +
          r +
          "' must be " +
          t +
          " tensor, but got " +
          e +
          " tensor"
      );
  }
  function re(t, e, n, r) {
    if ((void 0 === r && (r = "numeric"), t instanceof dt))
      return ne(r, t.dtype, e, n), t;
    var o = q(t);
    if (
      ("string" !== o &&
        0 <= ["bool", "int32", "float32"].indexOf(r) &&
        (o = r),
      ne(r, o, e, n),
      null == t ||
        (!z(t) &&
          !Array.isArray(t) &&
          "number" != typeof t &&
          "boolean" != typeof t &&
          "string" != typeof t))
    ) {
      var i = null == t ? "null" : t.constructor.name;
      throw new Error(
        "Argument '" +
          e +
          "' passed to '" +
          n +
          "' must be a Tensor or TensorLike, but got '" +
          i +
          "'"
      );
    }
    var a = ee(t);
    z(t) || Array.isArray(t) || (t = [t]);
    var s = "string" !== o ? X(t, o, Zt.get("DEBUG")) : x(t);
    return dt.make(a, { values: s }, o);
  }
  function oe(t, n, r, e) {
    if ((void 0 === e && (e = "numeric"), !Array.isArray(t)))
      throw new Error(
        "Argument " +
          n +
          " passed to " +
          r +
          " must be a `Tensor[]` or `TensorLike[]`"
      );
    return t.map(function (t, e) {
      return re(t, n + "[" + e + "]", r);
    }, e);
  }
  function ie(t, e) {
    if (
      (D(j(t), function () {
        return "The f passed in variableGrads(f) must be a function";
      }),
      D(
        null == e ||
          (Array.isArray(e) &&
            e.every(function (t) {
              return t instanceof vt;
            })),
        function () {
          return "The varList passed in variableGrads(f, varList) must be an array of variables";
        }
      ),
      null == e)
    )
      for (var n in ((e = []), Zt.engine.registeredVariables))
        e.push(Zt.engine.registeredVariables[n]);
    var r = e.length;
    D(
      0 <
        (e = e.filter(function (t) {
          return t.trainable;
        })).length,
      function () {
        return (
          "variableGrads() expects at least one of the input variables to be trainable, but none of the " +
          r +
          " variables is trainable."
        );
      }
    );
    var o = Zt.engine.gradients(t, e, null, !0),
      i = o.value,
      a = o.grads;
    D(
      a.some(function (t) {
        return null != t;
      }),
      function () {
        return "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().";
      }
    ),
      D(0 === i.rank, function () {
        return (
          "The f passed in variableGrads(f) must return a scalar, but it returned a rank-" +
          i.rank +
          " tensor"
        );
      });
    var s = {};
    return (
      e.forEach(function (t, e) {
        null != a[e] && (s[t.name] = a[e]);
      }),
      { value: i, grads: s }
    );
  }
  function ae(t) {
    return Zt.engine.customGrad(t);
  }
  function se(t) {
    if (
      0 <
      t.filter(function (t) {
        return null == t;
      }).length
    )
      throw new Error(
        "Cannot compute gradient of y=f(x) with respect to x. Make sure that\n    the f you passed encloses all operations that lead from x to y."
      );
  }
  var ue = jt.tidy,
    ce = jt.keep,
    le = jt.dispose,
    he = jt.time,
    pe = jt.profile;
  function fe() {
    for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];
    Zt.get("IS_TEST") || console.warn.apply(console, t);
  }
  function de(t, e, n, r) {
    void 0 === r && (r = !0);
    var o = [];
    if (r)
      (o = o.concat(e.slice(0))).push(t[0] / n), (o = o.concat(t.slice(1)));
    else {
      o = o.concat(t[0]);
      for (var i = e.length, a = 0; a < i; ++a)
        o = o.concat([t[a + 1] / e[a], e[a]]);
      o = o.concat(t.slice(i + 1));
    }
    return o;
  }
  function ve(t, e, n) {
    void 0 === n && (n = !0);
    var r = [];
    if (n) {
      r.push(e);
      for (var o = e + 1; o < t; ++o)
        o <= 2 * e ? (r.push(o), r.push(o - (e + 1))) : r.push(o);
    } else {
      var i = [],
        a = [];
      for (o = 1; o < t; ++o)
        2 * e + 1 <= o || o % 2 == 1 ? a.push(o) : i.push(o);
      r.push.apply(r, i), r.push(0), r.push.apply(r, a);
    }
    return r;
  }
  function me(t, e, n, r) {
    void 0 === r && (r = !0);
    var o = [];
    r ? o.push(t[0] / n) : o.push(t[0] * n);
    for (var i = 1; i < t.length; ++i)
      i <= e.length
        ? r
          ? o.push(e[i - 1] * t[i])
          : o.push(t[i] / e[i - 1])
        : o.push(t[i]);
    return o;
  }
  function ge(t, e) {
    for (var n = [0], r = 0; r < e; ++r) n.push(t[r][0]);
    return n;
  }
  function ye(t, e, n) {
    for (var r = t.slice(0, 1), o = 0; o < n; ++o)
      r.push(t[o + 1] - e[o][0] - e[o][1]);
    return r;
  }
  function xe(t, e) {
    for (var n = 0; n < t.length; ++n)
      if (t[t.length - n - 1] !== e - 1 - n) return !1;
    return !0;
  }
  function we(e, t) {
    for (var n = [], r = e.length, o = 0; o < r; o++)
      -1 === t.indexOf(o) && n.push(e[o]);
    return [
      n,
      t.map(function (t) {
        return e[t];
      }),
    ];
  }
  function be(t, e) {
    return (function (t, e, n) {
      for (var r = t.length + e.length, o = [], i = 0, a = 0, s = 0; s < r; s++)
        -1 === n.indexOf(s) ? o.push(t[i++]) : o.push(e[a++]);
      return o;
    })(
      t,
      e.map(function (t) {
        return 1;
      }),
      e
    );
  }
  function Ee(t, e, n) {
    D(xe(e, n), function () {
      return (
        t +
        " supports only inner-most axes for now. Got axes " +
        e +
        " and rank-" +
        n +
        " input."
      );
    });
  }
  function Ce(t, e) {
    if (xe(t, e)) return null;
    for (var n = [], r = 0; r < e; ++r) -1 === t.indexOf(r) && n.push(r);
    return (
      t.forEach(function (t) {
        return n.push(t);
      }),
      n
    );
  }
  function _e(t) {
    return t
      .map(function (t, e) {
        return [e, t];
      })
      .sort(function (t, e) {
        return t[1] - e[1];
      })
      .map(function (t) {
        return t[0];
      });
  }
  function Se(t, e) {
    for (var n = [], r = e - t; r < e; ++r) n.push(r);
    return n;
  }
  function Re(t, e) {
    for (var n = t[0].slice(), r = 1; r < t.length; r++) n[e] += t[r][e];
    return n;
  }
  function Ne(t, e) {
    if (t.rank < 1)
      throw new Error(
        "tf.gatherND() expects the input to be rank 1 or higher, but the rank was " +
          t.rank +
          "."
      );
    if (e.rank < 1)
      throw new Error(
        "tf.gatherND() expects the indices to be rank 1 or higher, but the rank was " +
          e.rank +
          "."
      );
    if ("int32" !== e.dtype)
      throw new Error(
        "tf.gatherND() expects the indices to be int32 type, but the dtype was " +
          e.dtype +
          "."
      );
    if (e.shape[e.rank - 1] > t.rank)
      throw new Error(
        "index innermost dimension length must be <= tensor rank; saw: " +
          e.shape[e.rank - 1] +
          " vs. " +
          t.rank
      );
    if (0 === t.size)
      throw new Error(
        "Requested more than 0 entries, but input is empty. Input shape: " +
          t.shape +
          "."
      );
    for (
      var n = e.shape, r = n[n.length - 1], o = 1, i = 0;
      i < n.length - 1;
      ++i
    )
      o *= n[i];
    var a = t.shape,
      s = n.slice();
    s.pop();
    var u = 1;
    for (i = r; i < t.rank; ++i) (u *= a[i]), s.push(a[i]);
    var c = K(t.shape)
      .map(function (t) {
        return t / u;
      })
      .concat([1])
      .slice(0, r);
    return [s, o, u, c];
  }
  function ke(t) {
    return t <= 30 ? t : $(t, Math.floor(Math.sqrt(t)));
  }
  function Ie(t, e, n) {
    if (e.rank < 1)
      throw new Error(
        "tf.scatterND() expects the indices to be rank 1 or higher, but the rank was " +
          e.rank +
          "."
      );
    if (t.rank < 1)
      throw new Error(
        "tf.scatterND() expects the updates to be rank 1 or higher, but the rank was " +
          t.rank +
          "."
      );
    if ("int32" !== e.dtype)
      throw new Error(
        "The dtype of 'indices' should be int32, but got dtype: " + e.dtype
      );
    if (n.length < 1)
      throw new Error(
        "Output rank must be greater or equal to 1, but got shape: " + n
      );
    if (0 === n.length) {
      if (0 === e.size)
        throw new Error(
          "Indices specified for empty output. indices shape: " + e.shape
        );
      if (0 === t.size)
        throw new Error(
          "Updates specified for empty output. updates shape: " + t.shape
        );
    }
    !(function (t, e, n) {
      var r = 1 < e.rank ? e.shape[e.rank - 1] : 1,
        o = 1 < e.rank ? e.rank - 1 : 1,
        i =
          "Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: " +
          n.shape +
          ", indices.shape: " +
          e.shape +
          ", shape: " +
          t +
          ", sliceDim: " +
          r +
          ", and batchDim: " +
          o +
          ".";
      if (n.rank < o) throw new Error(i + " update.rank < " + o + ". ");
      if (t.length < r + (n.rank - o))
        throw new Error(i + " Output shape length < " + (r + (n.rank - o)));
      if (n.rank !== o + t.length - r)
        throw new Error(i + " update.rank != " + (o + t.length - r));
      for (var a = 0; a < o; ++a)
        if (n.shape[a] !== e.shape[a])
          throw new Error(
            i +
              " updates.shape[" +
              a +
              "] (" +
              n.shape[a] +
              ") != indices.shape[" +
              a +
              "] (" +
              e.shape[a] +
              ")."
          );
      for (a = 0; a < n.rank - o; ++a)
        if (n.shape[a + o] !== t[a + r])
          throw new Error(
            i +
              " updates.shape[" +
              (a + o) +
              "] (" +
              n.shape[a + o] +
              ") != shape[" +
              (a + o) +
              "] (" +
              t[a + o] +
              ")"
          );
    })(n, e, t);
  }
  function Te(t, e, n) {
    for (
      var r = 1 < e.rank ? e.shape[e.rank - 1] : 1, o = n.length, i = 1, a = r;
      a < o;
      ++a
    )
      i *= n[a];
    var s = r < 1 ? 1 : r;
    return {
      sliceRank: r,
      numUpdates: e.size / s,
      sliceSize: i,
      strides: K(n.slice(0, r)).concat([1]),
      outputSize: B(n),
    };
  }
  function Ae(t, e, n, i, r, o, a, s, u) {
    if (
      (void 0 === r && (r = 0),
      void 0 === o && (o = 0),
      void 0 === a && (a = 0),
      void 0 === s && (s = 0),
      void 0 === u && (u = 0),
      0 !== a)
    )
      throw new Error("ellipsis mask is not yet supported");
    if (0 !== s) throw new Error("new axis mask is not yet supported");
    for (var c = [], l = [], h = [], p = 0; p < t.length; p++)
      (c[p] = De(r, e, i, t, p)),
        (l[p] = Me(o, n, i, t, p)),
        u & (1 << p) && ((l[p] = c[p] + 1), h.push(p));
    var f = new Array(t.length).fill(0);
    return (
      (f = f.map(function (t, e) {
        for (
          var n = 0, r = i[e] || 1, o = c[e];
          !(0 < r ? o >= l[e] : o <= l[e]);
          o += r
        )
          n += 1;
        return n;
      })),
      [c, f, h]
    );
  }
  function De(t, e, n, r, o) {
    var i = e[o],
      a = n[o] || 1;
    (t & (1 << o) || null == i) &&
      (i = 0 < a ? Number.MIN_SAFE_INTEGER : Number.MAX_SAFE_INTEGER);
    var s = r[o];
    return i < 0 && (i += s), f(0, i, s - 1);
  }
  function Me(t, e, n, r, o) {
    var i = e[o],
      a = n[o] || 1;
    (t & (1 << o) || null == i) &&
      (i = 0 < a ? Number.MAX_SAFE_INTEGER : Number.MIN_SAFE_INTEGER);
    var s = r[o];
    return i < 0 && (i += s), 0 < a ? f(0, i, s) : f(-1, i, s - 1);
  }
  function Oe(t, e, n) {
    for (var r = n.length, o = 0; o < n.length; o++)
      if (1 < n[o]) {
        r = o;
        break;
      }
    for (o = r + 1; o < n.length; o++) if (0 < e[o] || n[o] !== t[o]) return !1;
    return !0;
  }
  function Pe(t, e) {
    for (
      var n = 0 < t.length ? t[t.length - 1] : 1, r = 0;
      r < t.length - 1;
      r++
    )
      n += t[r] * e[r];
    return n;
  }
  function Fe(t) {
    var e = Object.keys(t);
    if (1 !== e.length)
      throw new Error(
        "Please provide an object with a single key (operation name) mapping to a function. Got an object with " +
          e.length +
          " keys."
      );
    var r = e[0],
      o = t[r];
    r.endsWith("_") && (r = r.substring(0, r.length - 1));
    var n = function () {
      for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];
      Zt.engine.startScope(r);
      try {
        var n = o.apply(void 0, t);
        return (
          n instanceof Promise &&
            console.error("Cannot return a Promise inside of tidy."),
          Zt.engine.endScope(n),
          n
        );
      } catch (t) {
        throw (Zt.engine.endScope(null), t);
      }
    };
    return Object.defineProperty(n, "name", { value: r, configurable: !0 }), n;
  }
  var Le = Fe({
      softmax_: function (t, o) {
        void 0 === o && (o = -1);
        var e = re(t, "logits", "softmax");
        if ((-1 === o && (o = e.rank - 1), o !== e.rank - 1))
          throw Error(
            "Softmax along a non-last dimension is not yet supported. Logits was rank " +
              e.rank +
              " and dim was " +
              o
          );
        return ae(function (t, e) {
          var n = t.logSumExp([o], !0),
            r = t.toFloat().sub(n).exp();
          return (
            e([r]),
            {
              value: r,
              gradFunc: function (t, e) {
                var n = e[0],
                  r = t.mul(n);
                return r.sub(r.sum([o], !0).mul(n));
              },
            }
          );
        })(e);
      },
    }),
    Be = Fe({
      logSoftmax_: function (t, i) {
        void 0 === i && (i = -1);
        var e = re(t, "logits", "logSoftmax");
        if ((-1 === i && (i = e.rank - 1), i !== e.rank - 1))
          throw Error(
            "Log Softmax along a non-last dimension is not yet supported. Logits was rank " +
              e.rank +
              " and axis was " +
              i
          );
        return ae(function (t, e) {
          var n = t.max(i, !0),
            r = t.sub(n),
            o = r.toFloat().sub(r.exp().sum(i, !0).log());
          return (
            e([o]),
            {
              value: o,
              gradFunc: function (t, e) {
                var n = e[0].exp();
                return t.sub(t.sum(i, !0).mul(n));
              },
            }
          );
        })(e);
      },
    });
  var We = Fe({
      complex_: function (t, e) {
        var n = re(t, "real", "complex"),
          r = re(e, "imag", "complex");
        return (
          g(
            n.shape,
            r.shape,
            "real and imag shapes, " +
              n.shape +
              " and " +
              r.shape +
              ", must match in call to tf.complex()."
          ),
          Zt.engine.runKernel(
            function (t) {
              return t.complex(n, r);
            },
            { $real: n, $imag: r }
          )
        );
      },
    }),
    ze = Fe({
      real_: function (t) {
        var e = re(t, "input", "real");
        return Zt.engine.runKernel(
          function (t) {
            return t.real(e);
          },
          { $input: e }
        );
      },
    }),
    Ue = Fe({
      imag_: function (t) {
        var e = re(t, "input", "imag");
        return Zt.engine.runKernel(
          function (t) {
            return t.imag(e);
          },
          { $input: e }
        );
      },
    });
  function Ge(t, e, n) {
    if ((null == n && (n = q(t)), "complex64" === n))
      throw new Error(
        "Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag)."
      );
    if (
      !z(t) &&
      !Array.isArray(t) &&
      "number" != typeof t &&
      "boolean" != typeof t &&
      "string" != typeof t
    )
      throw new Error(
        "values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray"
      );
    var r = ee(t);
    if (null != e) {
      tt(e);
      var o = B(e),
        i = B(r);
      D(o === i, function () {
        return (
          "Based on the provided shape, [" +
          e +
          "], the tensor should have " +
          o +
          " values but has " +
          i
        );
      });
      for (var a = 0; a < r.length; ++a) {
        var s = r[a],
          u = a !== r.length - 1 || s !== B(e.slice(a));
        D(r[a] === e[a] || !u, function () {
          return (
            "Error creating a new Tensor. Inferred shape (" +
            r +
            ") does not match the provided shape (" +
            e +
            "). "
          );
        });
      }
    }
    return (
      z(t) || Array.isArray(t) || (t = [t]),
      (e = e || r),
      (t = "string" !== n ? X(t, n, Zt.get("DEBUG")) : x(t)),
      dt.make(e, { values: t }, n)
    );
  }
  function Ve(t, e) {
    if ((z(t) || Array.isArray(t)) && "complex64" !== e)
      throw new Error(
        "Error creating a new Scalar: value must be a primitive (number|boolean|string)"
      );
    return Ge(t, [], e);
  }
  function He(t, e) {
    y(t);
    var n = ee(t);
    if (1 !== n.length)
      throw new Error("tensor1d() requires values to be a flat/TypedArray");
    return Ge(t, n, e);
  }
  function qe(t, e, n) {
    if ((y(t), null != e && 2 !== e.length))
      throw new Error("tensor2d() requires shape to have two numbers");
    var r = ee(t);
    if (2 !== r.length && 1 !== r.length)
      throw new Error(
        "tensor2d() requires values to be number[][] or flat/TypedArray"
      );
    if (1 === r.length && null == e)
      throw new Error(
        "tensor2d() requires shape to be provided when `values` are a flat/TypedArray"
      );
    return Ge(t, (e = e || r), n);
  }
  function je(t, e, n) {
    if ((y(t), null != e && 3 !== e.length))
      throw new Error("tensor3d() requires shape to have three numbers");
    var r = ee(t);
    if (3 !== r.length && 1 !== r.length)
      throw new Error(
        "tensor3d() requires values to be number[][][] or flat/TypedArray"
      );
    if (1 === r.length && null == e)
      throw new Error(
        "tensor3d() requires shape to be provided when `values` are a flat array"
      );
    return Ge(t, (e = e || r), n);
  }
  function $e(t, e, n) {
    if ((y(t), null != e && 4 !== e.length))
      throw new Error("tensor4d() requires shape to have four numbers");
    var r = ee(t);
    if (4 !== r.length && 1 !== r.length)
      throw new Error(
        "tensor4d() requires values to be number[][][][] or flat/TypedArray"
      );
    if (1 === r.length && null == e)
      throw new Error(
        "tensor4d() requires shape to be provided when `values` are a flat array"
      );
    return Ge(t, (e = e || r), n);
  }
  function Ke(t, e, n) {
    if ((y(t), null != e && 5 !== e.length))
      throw new Error("tensor5d() requires shape to have five numbers");
    var r = ee(t);
    if (5 !== r.length && 1 !== r.length)
      throw new Error(
        "tensor5d() requires values to be number[][][][][] or flat/TypedArray"
      );
    if (1 === r.length && null == e)
      throw new Error(
        "tensor5d() requires shape to be provided when `values` are a flat array"
      );
    return Ge(t, (e = e || r), n);
  }
  function Xe(t, e, n) {
    if ((y(t), null != e && 6 !== e.length))
      throw new Error("tensor6d() requires shape to have six numbers");
    var r = ee(t);
    if (6 !== r.length && 1 !== r.length)
      throw new Error(
        "tensor6d() requires values to be number[][][][][][] or flat/TypedArray"
      );
    if (1 === r.length && null == e)
      throw new Error(
        "tensor6d() requires shape to be provided when `values` are a flat array"
      );
    return Ge(t, (e = e || r), n);
  }
  function Ye(t, e) {
    if ((void 0 === e && (e = "float32"), "complex64" === e)) {
      var n = Ye(t, "float32"),
        r = Ye(t, "float32");
      return We(n, r);
    }
    var o = Q(B(t), e);
    return dt.make(t, { values: o }, e);
  }
  function Qe(t, e) {
    if ((void 0 === e && (e = "float32"), "complex64" === e)) {
      var n = Qe(t, "float32"),
        r = Qe(t, "float32");
      return We(n, r);
    }
    var o = J(B(t), e);
    return dt.make(t, { values: o }, e);
  }
  function Je(e, n, r) {
    return Zt.engine.runKernel(function (t) {
      return t.fill(e, n, r);
    }, {});
  }
  function Ze(t, e, n) {
    if (0 === n) throw new Error("Cannot request zero samples");
    var r = (e - t) / (n - 1),
      o = J(n, "float32");
    o[0] = t;
    for (var i = 1; i < o.length; i++) o[i] = o[i - 1] + r;
    return He(o, "float32");
  }
  function tn(t, e, n, r) {
    if ((void 0 === n && (n = 1), void 0 === r && (r = "float32"), 0 === n))
      throw new Error("Cannot have a step of zero");
    if (t === e || (t < e && n < 0) || (e < t && 1 < n)) return Qe([0], r);
    var o = J(Math.abs(Math.ceil((e - t) / n)), r);
    e < t && 1 === n && (n = -1), (o[0] = t);
    for (var i = 1; i < o.length; i++) o[i] = o[i - 1] + n;
    return He(o, r);
  }
  var en = Fe({
      onesLike_: function (t) {
        var e = re(t, "x", "onesLike");
        if ("complex64" !== e.dtype)
          return Zt.engine.runKernel(
            function (t) {
              return t.onesLike(e);
            },
            { $x: e },
            null
          );
        var n = en(ze(e)),
          r = nn(Ue(e));
        return We(n, r);
      },
    }),
    nn = Fe({
      zerosLike_: function (t) {
        var e = re(t, "x", "zerosLike");
        return Zt.engine.runKernel(
          function (t) {
            return t.zerosLike(e);
          },
          { $x: e },
          null
        );
      },
    }),
    rn = (function () {
      function t(t) {
        (this.dataMover = t), (this.data = new WeakMap());
      }
      return (
        (t.prototype.get = function (t) {
          return (
            this.data.has(t) || this.dataMover.moveData(t), this.data.get(t)
          );
        }),
        (t.prototype.set = function (t, e) {
          this.data.set(t, e);
        }),
        (t.prototype.has = function (t) {
          return this.data.has(t);
        }),
        (t.prototype.delete = function (t) {
          return this.data.delete(t);
        }),
        t
      );
    })(),
    on = (function () {
      function t() {}
      return (
        (t.prototype.time = function (t) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.read = function (t) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.readSync = function (t) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.disposeData = function (t) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.write = function (t, e) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.fromPixels = function (t, e) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.register = function (t, e, n) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.memory = function () {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.floatPrecision = function () {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.batchMatMul = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.fusedBatchMatMul = function (t, e, n, r, o, i) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.slice = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.stridedSlice = function (t, e, n, r, o, i, a, s, u) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.unstack = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.reverse = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.concat = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.neg = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.add = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.addN = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.subtract = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.multiply = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.realDivide = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.floorDiv = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.sum = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.prod = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.unsortedSegmentSum = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.argMin = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.argMax = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.equal = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.notEqual = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.less = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.lessEqual = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.greater = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.greaterEqual = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.logicalNot = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.logicalAnd = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.logicalOr = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.where = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.select = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.topk = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.min = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.minimum = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.mod = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.max = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.maximum = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.all = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.any = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.squaredDifference = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.ceil = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.floor = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.round = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.sign = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.isNaN = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.isInf = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.isFinite = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.pow = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.exp = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.expm1 = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.log = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.log1p = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.sqrt = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.rsqrt = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.square = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.reciprocal = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.relu = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.prelu = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.elu = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.eluDer = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.selu = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.int = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.clip = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.abs = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.complexAbs = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.sigmoid = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.softplus = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.sin = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.cos = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.tan = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.asin = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.acos = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.atan = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.atan2 = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.sinh = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.cosh = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.tanh = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.asinh = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.acosh = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.atanh = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.erf = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.step = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.conv2d = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.conv2dDerInput = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.conv2dDerFilter = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.depthwiseConv2D = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.depthwiseConv2DDerInput = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.depthwiseConv2DDerFilter = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.conv3d = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.conv3dDerInput = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.conv3dDerFilter = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.maxPool = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.maxPoolBackprop = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.avgPool = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.avgPoolBackprop = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.reshape = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.cast = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.tile = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.pad = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.transpose = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.gather = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.gatherND = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.scatterND = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.batchToSpaceND = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.spaceToBatchND = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.resizeBilinear = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.resizeBilinearBackprop = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.resizeNearestNeighbor = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.resizeNearestNeighborBackprop = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.batchNormalization = function (t, e, n, r, o, i) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.localResponseNormalization4D = function (t, e, n, r, o) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.LRNGrad = function (t, e, n, r, o, i, a) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.multinomial = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.oneHot = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.cumsum = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.nonMaxSuppression = function (t, e, n, r, o) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.fft = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.ifft = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.complex = function (t, e) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.real = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.imag = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.cropAndResize = function (t, e, n, r, o, i) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.depthToSpace = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.split = function (t, e, n) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.sparseToDense = function (t, e, n, r) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.fill = function (t, e, n) {
          throw new Error("Not yet implemented.");
        }),
        (t.prototype.onesLike = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.zerosLike = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.setDataMover = function (t) {
          throw new Error("Not yet implemented");
        }),
        (t.prototype.dispose = function () {
          throw new Error("Not yet implemented");
        }),
        t
      );
    })();
  function an(t, e, n) {
    if ("complex64" === e) {
      if ("complex64" === t.dtype) return t.clone();
      var r = Qe(t.shape),
        o = t.toFloat(),
        i = n.complex(o, r);
      return r.dispose(), o.dispose(), i;
    }
    if (!W(t.dtype, e)) return dt.make(t.shape, { dataId: t.dataId }, e);
    if ("complex64" === t.dtype) {
      var a = n.real(t);
      return (i = a.cast(e)), a.dispose(), i;
    }
    if ("int32" === e) return n.int(t);
    if ("bool" !== e)
      throw new Error("Error in Cast: unknown dtype argument (" + e + ")");
    var s = Ve(0, t.dtype);
    return (i = n.notEqual(t, s)), s.dispose(), i;
  }
  function sn(t, e) {
    return dt.make(e, { dataId: t.dataId }, t.dtype);
  }
  function un(t, e) {
    if (t.length !== e.length)
      throw new Error(
        "Cannot merge real and imag arrays of different lengths. real:" +
          t.length +
          ", imag: " +
          e.length +
          "."
      );
    for (var n = new Float32Array(2 * t.length), r = 0; r < n.length; r += 2)
      (n[r] = t[r / 2]), (n[r + 1] = e[r / 2]);
    return n;
  }
  function cn(t, e) {
    return { real: t[2 * e], imag: t[2 * e + 1] };
  }
  function ln(t, e, n, r, o) {
    for (
      var i = Array.from(e)
          .map(function (t, e) {
            return { score: t, boxIndex: e };
          })
          .filter(function (t) {
            return t.score > o;
          })
          .sort(function (t, e) {
            return e.score - t.score;
          }),
        a = [],
        s = 0;
      s < i.length;
      s++
    ) {
      var u = i[s],
        c = u.score,
        l = u.boxIndex;
      if (c < o) break;
      for (var h = !1, p = a.length - 1; 0 <= p; --p)
        if (hn(t, l, a[p]) >= r) {
          h = !0;
          break;
        }
      if (!h && (a.push(l), a.length >= n)) break;
    }
    return He(a, "int32");
  }
  function hn(t, e, n) {
    var r = t.subarray(4 * e, 4 * e + 4),
      o = t.subarray(4 * n, 4 * n + 4),
      i = Math.min(r[0], r[2]),
      a = Math.min(r[1], r[3]),
      s = Math.max(r[0], r[2]),
      u = Math.max(r[1], r[3]),
      c = Math.min(o[0], o[2]),
      l = Math.min(o[1], o[3]),
      h = Math.max(o[0], o[2]),
      p = Math.max(o[1], o[3]),
      f = (s - i) * (u - a),
      d = (h - c) * (p - l);
    if (f <= 0 || d <= 0) return 0;
    var v = Math.max(i, c),
      m = Math.max(a, l),
      g = Math.min(s, h),
      y = Math.min(u, p),
      x = Math.max(g - v, 0) * Math.max(y - m, 0);
    return x / (f + d - x);
  }
  function pn(n, t, r) {
    var o = new Array(n.rank).fill(0),
      i = n.shape.slice();
    return t.map(function (t) {
      i[r] = t;
      var e = n.slice(o, i);
      return (o[r] += t), e;
    });
  }
  function fn(t, e, n, r, o) {
    for (
      var i = e[e.length - 1],
        a = [t.length / i, i],
        s = a[0],
        u = a[1],
        c = A(n, s * r),
        l = A("int32", s * r),
        h = 0;
      h < s;
      h++
    ) {
      for (
        var p = h * u, f = t.subarray(p, p + u), d = [], v = 0;
        v < f.length;
        v++
      )
        d.push({ value: f[v], index: v });
      d.sort(function (t, e) {
        return e.value - t.value;
      });
      var m = h * r,
        g = c.subarray(m, m + r),
        y = l.subarray(m, m + r);
      for (v = 0; v < r; v++) (g[v] = d[v].value), (y[v] = d[v].index);
    }
    var x = e.slice();
    return (x[x.length - 1] = r), [Ge(c, x, n), Ge(l, x, "int32")];
  }
  var dn = function (t, e, n) {
    this.variableNames = ["A"];
    var r = t.windowSize,
      o = t.batchSize,
      i = t.inSize,
      a = Math.ceil(i / r);
    n || this.variableNames.push("bestIndicesA"), (this.outputShape = [o, a]);
    var s = "max" === e ? ">" : "<",
      u = n ? "inOffset + i;" : "round(getBestIndicesA(batch, inOffset + i));";
    this.userCode =
      "\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * " +
      r +
      ";\n\n        int bestIndex = inOffset;\n        float bestValue = getA(batch, bestIndex);\n\n        for (int i = 0; i < " +
      r +
      "; i++) {\n          int inIdx = " +
      u +
      ";\n          float candidate = getA(batch, inIdx);\n          if (candidate " +
      s +
      " bestValue) {\n            bestValue = candidate;\n            bestIndex = inIdx;\n          }\n        }\n        setOutput(float(bestIndex));\n      }\n    ";
  };
  function vn(e, t) {
    return ["x", "y", "z", "w", "u", "v"].slice(0, t).map(function (t) {
      return e + "." + t;
    });
  }
  function mn(t, e) {
    return 1 === e ? [t] : vn(t, e);
  }
  function gn(t, e) {
    for (var n = t.length, r = [], o = 0; o < n; o++) {
      var i = n - 1 - o,
        a = t[i] || 1;
      1 < (e[e.length - 1 - o] || 1) && 1 === a && r.unshift(i);
    }
    return r;
  }
  function yn(t, e) {
    for (var n = [], r = 0; r < e.length; r++) {
      var o = t[t.length - r - 1],
        i = e.length - r - 1,
        a = e[i];
      (null == o || (1 === o && 1 < a)) && n.unshift(i);
    }
    return n;
  }
  function xn(t, e) {
    for (var n = [], r = Math.max(t.length, e.length), o = 0; o < r; o++) {
      var i = t[t.length - o - 1];
      null == i && (i = 1);
      var a = e[e.length - o - 1];
      if ((null == a && (a = 1), 1 === i)) n.unshift(a);
      else if (1 === a) n.unshift(i);
      else {
        if (i !== a)
          throw Error(
            "Operands could not be broadcast together with shapes " +
              t +
              " and " +
              e +
              "."
          );
        n.unshift(i);
      }
    }
    return n;
  }
  function wn() {
    var t, e, n, r, o, i, a, s, u, c;
    return (
      (c =
        2 === Zt.get("WEBGL_VERSION")
          ? ((t = "#version 300 es"),
            (n = "out"),
            (r = e = "in"),
            (o = "texture"),
            (i = "outputColor"),
            (a = "out vec4 outputColor;"),
            (s =
              "\n      const float NAN = uintBitsToFloat(uint(0x7fc00000));\n    "),
            (u =
              "\n      const float INFINITY = uintBitsToFloat(uint(0x7f800000));\n    "),
            "\n      #define round(value) newRound(value)\n      int newRound(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 newRound(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    ")
          : ((e = "attribute"),
            (r = n = "varying"),
            (o = "texture2D"),
            (i = "gl_FragColor"),
            (a = t = ""),
            (s =
              "\n      uniform float NAN;\n\n      bool isnan(float val) {\n        return (val < 1.0 || 0.0 < val || val == 0.0) ? false : true;\n      }\n      bvec4 isnan(vec4 val) {\n        return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n      }\n    "),
            (u =
              "\n      uniform float INFINITY;\n\n      bool isinf(float val) {\n        return abs(val) == INFINITY;\n      }\n      bvec4 isinf(vec4 val) {\n        return equal(abs(val), vec4(INFINITY));\n      }\n    "),
            "\n      int round(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 round(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    ")),
      {
        version: t,
        attribute: e,
        varyingVs: n,
        varyingFs: r,
        texture2D: o,
        output: i,
        defineOutput: a,
        defineSpecialNaN: s,
        defineSpecialInf: u,
        defineRound: c,
      }
    );
  }
  function bn(n, t, r) {
    void 0 === r && (r = "index");
    var o = K(t);
    return o
      .map(function (t, e) {
        return (
          "int " +
          n[e] +
          " = " +
          r +
          " / " +
          t +
          "; " +
          (e === o.length - 1
            ? "int " + n[e + 1] + " = " + r + " - " + n[e] + " * " + t
            : "index -= " + n[e] + " * " + t) +
          ";"
        );
      })
      .join("");
  }
  function En(t) {
    return 1 === t.length
      ? "" + t[0]
      : "vec" + t.length + "(" + t.join(",") + ")";
  }
  function Cn(t, e, n, r) {
    var o = [];
    t.forEach(function (t) {
      var e = B(t.shapeInfo.logicalShape);
      t.shapeInfo.isUniform
        ? o.push("uniform float " + t.name + (1 < e ? "[" + e + "]" : "") + ";")
        : (o.push("uniform sampler2D " + t.name + ";"),
          o.push("uniform int offset" + t.name + ";"));
    });
    var i,
      a,
      s,
      u = o.join("\n"),
      c = t
        .map(function (t) {
          return (function (t, e, n) {
            void 0 === n && (n = !1);
            var r = "";
            r += n ? Sn(t) : _n(t);
            var o = t.shapeInfo.logicalShape,
              i = e.logicalShape;
            return (
              o.length <= i.length &&
                (r += n
                  ? (function (t, e) {
                      var n,
                        r = t.name,
                        o = r.charAt(0).toUpperCase() + r.slice(1),
                        i = "get" + o + "AtOutCoords",
                        a = t.shapeInfo.logicalShape.length,
                        s = e.logicalShape.length,
                        u = gn(t.shapeInfo.logicalShape, e.logicalShape),
                        c = Dn(s),
                        l = s - a,
                        h = ["x", "y", "z", "w", "u", "v"];
                      n =
                        0 === a
                          ? ""
                          : s < 2 && 1 <= u.length
                          ? "coords = 0;"
                          : u
                              .map(function (t) {
                                return "coords." + h[t + l] + " = 0;";
                              })
                              .join("\n");
                      var p = "";
                      p =
                        s < 2 && 0 < a
                          ? "coords"
                          : t.shapeInfo.logicalShape
                              .map(function (t, e) {
                                return "coords." + h[e + l];
                              })
                              .join(", ");
                      var f = "return outputValue;";
                      if (1 === a && 1 < s)
                        f =
                          "\n      return vec4(outputValue.xy, outputValue.xy);\n    ";
                      else if (0 === a && 0 < s)
                        f =
                          1 === s
                            ? "\n        return vec4(outputValue.x, outputValue.x, 0., 0.);\n      "
                            : "\n        return vec4(outputValue.x);\n      ";
                      else if (u.length) {
                        var d = a - 2,
                          v = a - 1;
                        -1 < u.indexOf(d) && -1 < u.indexOf(v)
                          ? (f = "return vec4(outputValue.x);")
                          : -1 < u.indexOf(d)
                          ? (f =
                              "return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);")
                          : -1 < u.indexOf(v) &&
                            (f =
                              "return vec4(outputValue.xx, outputValue.zz);");
                      }
                      return (
                        "\n    vec4 " +
                        i +
                        "() {\n      " +
                        c +
                        " coords = getOutputCoords();\n      " +
                        n +
                        "\n      vec4 outputValue = get" +
                        o +
                        "(" +
                        p +
                        ");\n      " +
                        f +
                        "\n    }\n  "
                      );
                    })(t, e)
                  : (function (t, e) {
                      var n = t.name,
                        r = n.charAt(0).toUpperCase() + n.slice(1),
                        o = "get" + r + "AtOutCoords",
                        i = e.texShape,
                        a = t.shapeInfo.texShape,
                        s = t.shapeInfo.logicalShape.length,
                        u = e.logicalShape.length;
                      if (
                        !t.shapeInfo.isUniform &&
                        s === u &&
                        null == t.shapeInfo.flatOffset &&
                        E(a, i)
                      )
                        return (
                          "\n      float " +
                          o +
                          "() {\n        return sampleTexture(" +
                          n +
                          ", resultUV);\n      }\n    "
                        );
                      var c = Dn(u),
                        l = gn(t.shapeInfo.logicalShape, e.logicalShape),
                        h = u - s,
                        p = ["x", "y", "z", "w", "u", "v"];
                      return (
                        "\n    float " +
                        o +
                        "() {\n      " +
                        c +
                        " coords = getOutputCoords();\n      " +
                        (0 === s
                          ? ""
                          : u < 2 && 1 <= l.length
                          ? "coords = 0;"
                          : l
                              .map(function (t) {
                                return "coords." + p[t + h] + " = 0;";
                              })
                              .join("\n")) +
                        "\n      return get" +
                        r +
                        "(" +
                        (u < 2 && 0 < s
                          ? "coords"
                          : t.shapeInfo.logicalShape
                              .map(function (t, e) {
                                return "coords." + p[e + h];
                              })
                              .join(", ")) +
                        ");\n    }\n  "
                      );
                    })(t, e)),
              r
            );
          })(t, e, r);
        })
        .join("\n"),
      l = e.texShape,
      h = wn(),
      p =
        "\n    float sampleTexture(sampler2D textureSampler, vec2 uv) {\n      return " +
        h.texture2D +
        "(textureSampler, uv).r;\n    }\n  ",
      f =
        (s = h).version +
        "\n    precision highp float;\n    precision highp int;\n    precision highp sampler2D;\n    " +
        s.varyingFs +
        " vec2 resultUV;\n    " +
        s.defineOutput +
        "\n    const vec2 halfCR = vec2(0.5, 0.5);\n\n    struct ivec5\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n    };\n\n    struct ivec6\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n      int v;\n    };\n\n    " +
        s.defineSpecialNaN +
        "\n    " +
        s.defineSpecialInf +
        "\n    " +
        s.defineRound +
        "\n\n    int imod(int x, int y) {\n      return x - y * (x / y);\n    }\n\n    //Based on the work of Dave Hoskins\n    //https://www.shadertoy.com/view/4djSRW\n    #define HASHSCALE1 443.8975\n    float random(float seed){\n      vec2 p = resultUV * seed;\n      vec3 p3  = fract(vec3(p.xyx) * HASHSCALE1);\n      p3 += dot(p3, p3.yzx + 19.19);\n      return fract((p3.x + p3.y) * p3.z);\n    }\n\n    " +
        Rn +
        "\n    " +
        Nn +
        "\n    " +
        kn +
        "\n  ";
    return (
      (a = e.isPacked
        ? ((i = (function (t, e) {
            switch (t.length) {
              case 0:
                return "\n    int getOutputCoords() {\n      return 0;\n    }\n  ";
              case 1:
                return (
                  (s = e),
                  1 === (u = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)])[0]
                    ? "\n      int getOutputCoords() {\n        return 2 * int(resultUV.x * " +
                      u[1] +
                      ".0);\n      }\n    "
                    : 1 === u[1]
                    ? "\n      int getOutputCoords() {\n        return 2 * int(resultUV.y * " +
                      u[0] +
                      ".0);\n      }\n    "
                    : "\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(" +
                      u[0] +
                      ", " +
                      u[1] +
                      "));\n      return resTexRC.x * " +
                      u[1] +
                      " + resTexRC.y;\n    }\n  "
                );
              case 2:
                return (function (t, e) {
                  var n = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)];
                  if (E(t, e))
                    return (
                      "\n      ivec2 getOutputCoords() {\n        return 2 * ivec2(resultUV.yx * vec2(" +
                      n[0] +
                      ", " +
                      n[1] +
                      "));\n      }\n    "
                    );
                  var r = Math.ceil(t[1] / 2);
                  return (
                    "\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(" +
                    n[0] +
                    ", " +
                    n[1] +
                    "));\n\n      int index = resTexRC.x * " +
                    n[1] +
                    " + resTexRC.y;\n      int r = 2 * (index / " +
                    r +
                    ");\n      int c = imod(index, " +
                    r +
                    ") * 2;\n\n      return ivec2(r, c);\n    }\n  "
                  );
                })(t, e);
              case 3:
                return (
                  (n = t),
                  (r = e),
                  (o = [Math.ceil(r[0] / 2), Math.ceil(r[1] / 2)]),
                  (i = Math.ceil(n[2] / 2)),
                  (a = i * Math.ceil(n[1] / 2)),
                  "\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(" +
                    o[0] +
                    ", " +
                    o[1] +
                    "));\n      int index = resTexRC.x * " +
                    o[1] +
                    " + resTexRC.y;\n\n      int b = index / " +
                    a +
                    ";\n      index -= b * " +
                    a +
                    ";\n\n      int r = 2 * (index / " +
                    i +
                    ");\n      int c = imod(index, " +
                    i +
                    ") * 2;\n\n      return ivec3(b, r, c);\n    }\n  "
                );
              default:
                return (function (t, e) {
                  for (
                    var n = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)],
                      r = Math.ceil(t[t.length - 1] / 2),
                      o = r * Math.ceil(t[t.length - 2] / 2),
                      i = o,
                      a = "",
                      s = "b, r, c",
                      u = 2;
                    u < t.length - 1;
                    u++
                  )
                    (a =
                      "\n      int b" +
                      u +
                      " = index / " +
                      (i *= t[t.length - u - 1]) +
                      ";\n      index -= b" +
                      u +
                      " * " +
                      i +
                      ";\n    " +
                      a),
                      (s = "b" + u + ", " + s);
                  return (
                    "\n    ivec" +
                    t.length +
                    " getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(" +
                    n[0] +
                    ", " +
                    n[1] +
                    "));\n      int index = resTexRC.x * " +
                    n[1] +
                    " + resTexRC.y;\n\n      " +
                    a +
                    "\n\n      int b = index / " +
                    o +
                    ";\n      index -= b * " +
                    o +
                    ";\n\n      int r = 2 * (index / " +
                    r +
                    ");\n      int c = imod(index, " +
                    r +
                    ") * 2;\n\n      return ivec" +
                    t.length +
                    "(" +
                    s +
                    ");\n    }\n  "
                  );
                })(t, e);
            }
            var n, r, o, i, a;
            var s, u;
          })(e.logicalShape, l)),
          "\n    void setOutput(vec4 val) {\n      " +
            h.output +
            " = val;\n    }\n  ")
        : ((i = (function (t, e) {
            switch (t.length) {
              case 0:
                return "\n    int getOutputCoords() {\n      return 0;\n    }\n  ";
              case 1:
                return 1 === (p = e)[0]
                  ? "\n      int getOutputCoords() {\n        return int(resultUV.x * " +
                      p[1] +
                      ".0);\n      }\n    "
                  : 1 === p[1]
                  ? "\n      int getOutputCoords() {\n        return int(resultUV.y * " +
                    p[0] +
                    ".0);\n      }\n    "
                  : "\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(" +
                    p[0] +
                    ", " +
                    p[1] +
                    "));\n      return resTexRC.x * " +
                    p[1] +
                    " + resTexRC.y;\n    }\n  ";
              case 2:
                return E((l = t), (h = e))
                  ? "\n      ivec2 getOutputCoords() {\n        return ivec2(resultUV.yx * vec2(" +
                      h[0] +
                      ", " +
                      h[1] +
                      "));\n      }\n    "
                  : 1 === l[1]
                  ? "\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(" +
                    h[0] +
                    ", " +
                    h[1] +
                    "));\n        int index = resTexRC.x * " +
                    h[1] +
                    " + resTexRC.y;\n        return ivec2(index, 0);\n      }\n    "
                  : 1 === l[0]
                  ? "\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(" +
                    h[0] +
                    ", " +
                    h[1] +
                    "));\n        int index = resTexRC.x * " +
                    h[1] +
                    " + resTexRC.y;\n        return ivec2(0, index);\n      }\n    "
                  : "\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(" +
                    h[0] +
                    ", " +
                    h[1] +
                    "));\n      int index = resTexRC.x * " +
                    h[1] +
                    " + resTexRC.y;\n      int r = index / " +
                    l[1] +
                    ";\n      int c = index - r * " +
                    l[1] +
                    ";\n      return ivec2(r, c);\n    }\n  ";
              case 3:
                return (
                  (u = e),
                  (c = bn(["r", "c", "d"], t)),
                  "\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(" +
                    u[0] +
                    ", " +
                    u[1] +
                    "));\n      int index = resTexRC.x * " +
                    u[1] +
                    " + resTexRC.y;\n      " +
                    c +
                    "\n      return ivec3(r, c, d);\n    }\n  "
                );
              case 4:
                return (
                  (a = e),
                  (s = bn(["r", "c", "d", "d2"], t)),
                  "\n    ivec4 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2(" +
                    a[0] +
                    ", " +
                    a[1] +
                    "));\n      int index = resTexRC.x * " +
                    a[1] +
                    " + resTexRC.y;\n      " +
                    s +
                    "\n      return ivec4(r, c, d, d2);\n    }\n  "
                );
              case 5:
                return (
                  (o = e),
                  (i = bn(["r", "c", "d", "d2", "d3"], t)),
                  "\n    ivec5 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx * vec2(" +
                    o[0] +
                    ",\n                             " +
                    o[1] +
                    "));\n\n      int index = resTexRC.x * " +
                    o[1] +
                    " + resTexRC.y;\n\n      " +
                    i +
                    "\n\n      ivec5 outShape = ivec5(r, c, d, d2, d3);\n      return outShape;\n    }\n  "
                );
              case 6:
                return (
                  (n = e),
                  (r = bn(["r", "c", "d", "d2", "d3", "d4"], t)),
                  "\n    ivec6 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2(" +
                    n[0] +
                    ", " +
                    n[1] +
                    "));\n      int index = resTexRC.x * " +
                    n[1] +
                    " + resTexRC.y;\n\n      " +
                    r +
                    "\n\n      ivec6 result = ivec6(r, c, d, d2, d3, d4);\n      return result;\n    }\n  "
                );
              default:
                throw new Error(
                  t.length + "-D output sampling is not yet supported"
                );
            }
            var n, r;
            var o, i;
            var a, s;
            var u, c;
            var l, h;
            var p;
          })(e.logicalShape, l)),
          "\n    void setOutput(float val) {\n      " +
            h.output +
            " = vec4(val, 0, 0, 0);\n    }\n  ")),
      r && (f += In),
      [f, p, a, u, i, c, n].join("\n")
    );
  }
  function _n(t) {
    var e = t.shapeInfo.logicalShape;
    switch (e.length) {
      case 0:
        return (function (t) {
          var e = t.name,
            n = "get" + e.charAt(0).toUpperCase() + e.slice(1);
          if (t.shapeInfo.isUniform)
            return "float " + n + "() {return " + e + ";}";
          var r = t.shapeInfo.texShape,
            o = r[0],
            i = r[1];
          if (1 === o && 1 === i)
            return (
              "\n      float " +
              n +
              "() {\n        return sampleTexture(" +
              e +
              ", halfCR);\n      }\n    "
            );
          var a = t.shapeInfo.texShape;
          return (
            "\n    float " +
            n +
            "() {\n      vec2 uv = uvFromFlat(" +
            a[0] +
            ", " +
            a[1] +
            ", " +
            Tn(e) +
            ");\n      return sampleTexture(" +
            e +
            ", uv);\n    }\n  "
          );
        })(t);
      case 1:
        return (function (t) {
          var e = t.name,
            n = "get" + e.charAt(0).toUpperCase() + e.slice(1);
          if (t.shapeInfo.isUniform)
            return (
              "\n      float " +
              n +
              "(int index) {\n        " +
              An(t) +
              "\n      }\n    "
            );
          var r = t.shapeInfo.texShape,
            o = r[0],
            i = r[1];
          if (1 === i && 1 === o)
            return (
              "\n      float " +
              n +
              "(int index) {\n        return sampleTexture(" +
              e +
              ", halfCR);\n      }\n    "
            );
          var a = Tn(e);
          return 1 === i
            ? "\n      float " +
                n +
                "(int index) {\n        vec2 uv = vec2(0.5, (float(index + " +
                a +
                ") + 0.5) / " +
                o +
                ".0);\n        return sampleTexture(" +
                e +
                ", uv);\n      }\n    "
            : 1 === o
            ? "\n      float " +
              n +
              "(int index) {\n        vec2 uv = vec2((float(index + " +
              a +
              ") + 0.5) / " +
              i +
              ".0, 0.5);\n        return sampleTexture(" +
              e +
              ", uv);\n      }\n    "
            : "\n    float " +
              n +
              "(int index) {\n      vec2 uv = uvFromFlat(" +
              o +
              ", " +
              i +
              ", index + " +
              a +
              ");\n      return sampleTexture(" +
              e +
              ", uv);\n    }\n  ";
        })(t);
      case 2:
        return (function (t) {
          var e = t.shapeInfo.logicalShape,
            n = t.name,
            r = "get" + n.charAt(0).toUpperCase() + n.slice(1),
            o = t.shapeInfo.texShape;
          if (null != o && E(e, o)) {
            var i = o[0];
            return (
              "\n    float " +
              r +
              "(int row, int col) {\n      vec2 uv = (vec2(col, row) + halfCR) / vec2(" +
              o[1] +
              ".0, " +
              i +
              ".0);\n      return sampleTexture(" +
              n +
              ", uv);\n    }\n  "
            );
          }
          var a = I(e),
            s = a.newShape,
            u = a.keptDims,
            c = s;
          if (c.length < e.length)
            return (
              "\n      " +
              _n(Mn(t, c)) +
              "\n      float " +
              r +
              "(int row, int col) {\n        return " +
              r +
              "(" +
              On(["row", "col"], u) +
              ");\n      }\n    "
            );
          if (t.shapeInfo.isUniform)
            return (
              "\n      float " +
              r +
              "(int row, int col) {\n        int index = round(dot(vec2(row, col), vec2(" +
              e[1] +
              ", 1)));\n        " +
              An(t) +
              "\n      }\n    "
            );
          var l = o[0],
            h = o[1],
            p = Tn(n);
          return 1 === h
            ? "\n    float " +
                r +
                "(int row, int col) {\n      float index = dot(vec3(row, col, " +
                p +
                "), vec3(" +
                e[1] +
                ", 1, 1));\n      vec2 uv = vec2(0.5, (index + 0.5) / " +
                l +
                ".0);\n      return sampleTexture(" +
                n +
                ", uv);\n    }\n  "
            : 1 === l
            ? "\n    float " +
              r +
              "(int row, int col) {\n      float index = dot(vec3(row, col, " +
              p +
              "), vec3(" +
              e[1] +
              ", 1, 1));\n      vec2 uv = vec2((index + 0.5) / " +
              h +
              ".0, 0.5);\n      return sampleTexture(" +
              n +
              ", uv);\n    }\n  "
            : "\n  float " +
              r +
              "(int row, int col) {\n    // Explicitly use integer operations as dot() only works on floats.\n    int index = row * " +
              e[1] +
              " + col + " +
              p +
              ";\n    vec2 uv = uvFromFlat(" +
              l +
              ", " +
              h +
              ", index);\n    return sampleTexture(" +
              n +
              ", uv);\n  }\n";
        })(t);
      case 3:
        return (function (t) {
          var e = t.shapeInfo.logicalShape,
            n = t.name,
            r = "get" + n.charAt(0).toUpperCase() + n.slice(1),
            o = e[1] * e[2],
            i = e[2],
            a = I(e),
            s = a.newShape,
            u = a.keptDims,
            c = s;
          if (c.length < e.length)
            return (
              "\n        " +
              _n(Mn(t, c)) +
              "\n        float " +
              r +
              "(int row, int col, int depth) {\n          return " +
              r +
              "(" +
              On(["row", "col", "depth"], u) +
              ");\n        }\n      "
            );
          if (t.shapeInfo.isUniform)
            return (
              "\n      float " +
              r +
              "(int row, int col, int depth) {\n        int index = round(dot(vec3(row, col, depth),\n                          vec3(" +
              o +
              ", " +
              i +
              ", 1)));\n        " +
              An(t) +
              "\n      }\n    "
            );
          var l = t.shapeInfo.texShape,
            h = l[0],
            p = l[1],
            f = t.shapeInfo.flatOffset;
          return p === o && null == f
            ? "\n        float " +
                r +
                "(int row, int col, int depth) {\n          float texR = float(row);\n          float texC = dot(vec2(col, depth), vec2(" +
                i +
                ", 1));\n          vec2 uv = (vec2(texC, texR) + halfCR) /\n                     vec2(" +
                p +
                ".0, " +
                h +
                ".0);\n          return sampleTexture(" +
                n +
                ", uv);\n        }\n      "
            : p === i && null == f
            ? "\n    float " +
              r +
              "(int row, int col, int depth) {\n      float texR = dot(vec2(row, col), vec2(" +
              e[1] +
              ", 1));\n      float texC = float(depth);\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(" +
              p +
              ".0, " +
              h +
              ".0);\n      return sampleTexture(" +
              n +
              ", uv);\n    }\n  "
            : "\n      float " +
              r +
              "(int row, int col, int depth) {\n        // Explicitly use integer operations as dot() only works on floats.\n        int index = row * " +
              o +
              " + col * " +
              i +
              " + depth + " +
              Tn(n) +
              ";\n        vec2 uv = uvFromFlat(" +
              h +
              ", " +
              p +
              ", index);\n        return sampleTexture(" +
              n +
              ", uv);\n      }\n  ";
        })(t);
      case 4:
        return (function (t) {
          var e = t.shapeInfo.logicalShape,
            n = t.name,
            r = "get" + n.charAt(0).toUpperCase() + n.slice(1),
            o = e[3],
            i = e[2] * o,
            a = e[1] * i,
            s = I(e),
            u = s.newShape,
            c = s.keptDims;
          if (u.length < e.length)
            return (
              "\n      " +
              _n(Mn(t, u)) +
              "\n      float " +
              r +
              "(int row, int col, int depth, int depth2) {\n        return " +
              r +
              "(" +
              On(["row", "col", "depth", "depth2"], c) +
              ");\n      }\n    "
            );
          if (t.shapeInfo.isUniform)
            return (
              "\n      float " +
              r +
              "(int row, int col, int depth, int depth2) {\n        int index = round(dot(vec4(row, col, depth, depth2),\n                          vec4(" +
              a +
              ", " +
              i +
              ", " +
              o +
              ", 1)));\n        " +
              An(t) +
              "\n      }\n    "
            );
          var l = t.shapeInfo.flatOffset,
            h = t.shapeInfo.texShape,
            p = h[0],
            f = h[1];
          return f === a && null == l
            ? "\n      float " +
                r +
                "(int row, int col, int depth, int depth2) {\n        float texR = float(row);\n        float texC =\n            dot(vec3(col, depth, depth2),\n                vec3(" +
                i +
                ", " +
                o +
                ", 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(" +
                f +
                ".0, " +
                p +
                ".0);\n        return sampleTexture(" +
                n +
                ", uv);\n      }\n    "
            : f === o && null == l
            ? "\n      float " +
              r +
              "(int row, int col, int depth, int depth2) {\n        float texR = dot(vec3(row, col, depth),\n                         vec3(" +
              e[1] * e[2] +
              ", " +
              e[2] +
              ", 1));\n        float texC = float(depth2);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(" +
              f +
              ".0, " +
              p +
              ".0);\n        return sampleTexture(" +
              n +
              ", uv);\n      }\n    "
            : "\n    float " +
              r +
              "(int row, int col, int depth, int depth2) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * " +
              a +
              " + col * " +
              i +
              " +\n          depth * " +
              o +
              " + depth2;\n      vec2 uv = uvFromFlat(" +
              p +
              ", " +
              f +
              ", index + " +
              Tn(n) +
              ");\n      return sampleTexture(" +
              n +
              ", uv);\n    }\n  ";
        })(t);
      case 5:
        return (function (t) {
          var e = t.shapeInfo.logicalShape,
            n = t.name,
            r = "get" + n.charAt(0).toUpperCase() + n.slice(1),
            o = e[4],
            i = e[3] * o,
            a = e[2] * i,
            s = e[1] * a,
            u = I(e),
            c = u.newShape,
            l = u.keptDims;
          if (c.length < e.length)
            return (
              "\n      " +
              _n(Mn(t, c)) +
              "\n      float " +
              r +
              "(int row, int col, int depth, int depth2, int depth3) {\n        return " +
              r +
              "(" +
              On(["row", "col", "depth", "depth2", "depth3"], l) +
              ");\n      }\n    "
            );
          if (t.shapeInfo.isUniform)
            return (
              "\n      float " +
              r +
              "(int row, int col, int depth, int depth2, int depth3) {\n        float index = dot(\n          vec4(row, col, depth, depth2),\n          vec4(" +
              s +
              ", " +
              a +
              ", " +
              i +
              ", " +
              o +
              ")) +\n          depth3;\n        " +
              An(t) +
              "\n      }\n    "
            );
          var h = t.shapeInfo.flatOffset,
            p = t.shapeInfo.texShape,
            f = p[0],
            d = p[1];
          return d === s && null == h
            ? "\n      float " +
                r +
                "(int row, int col, int depth, int depth2, int depth3) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n                         vec4(" +
                a +
                ", " +
                i +
                ", " +
                o +
                ", 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(" +
                d +
                ".0, " +
                f +
                ".0);\n        return sampleTexture(" +
                n +
                ", uv);\n      }\n    "
            : d === o && null == h
            ? "\n      float " +
              r +
              "(int row, int col, int depth, int depth2, int depth3) {\n        float texR = dot(\n          vec4(row, col, depth, depth2),\n          vec4(" +
              e[1] * e[2] * e[3] +
              ",\n               " +
              e[2] * e[3] +
              ", " +
              e[3] +
              ", 1));\n        int texC = depth3;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(" +
              d +
              ".0, " +
              f +
              ".0);\n        return sampleTexture(" +
              n +
              ", uv);\n      }\n    "
            : "\n    float " +
              r +
              "(int row, int col, int depth, int depth2, int depth3) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * " +
              s +
              " + col * " +
              a +
              " + depth * " +
              i +
              " +\n          depth2 * " +
              o +
              " + depth3 + " +
              Tn(n) +
              ";\n      vec2 uv = uvFromFlat(" +
              f +
              ", " +
              d +
              ", index);\n      return sampleTexture(" +
              n +
              ", uv);\n    }\n  ";
        })(t);
      case 6:
        return (function (t) {
          var e = t.shapeInfo.logicalShape,
            n = t.name,
            r = "get" + n.charAt(0).toUpperCase() + n.slice(1),
            o = I(e),
            i = o.newShape,
            a = o.keptDims;
          if (i.length < e.length)
            return (
              "\n      " +
              _n(Mn(t, i)) +
              "\n      float " +
              r +
              "(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        return " +
              r +
              "(" +
              On(["row", "col", "depth", "depth2", "depth3", "depth4"], a) +
              ");\n      }\n    "
            );
          var s = e[5],
            u = e[4] * s,
            c = e[3] * u,
            l = e[2] * c,
            h = e[1] * l;
          if (t.shapeInfo.isUniform)
            return (
              "\n      float " +
              r +
              "(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n        int index = round(dot(\n          vec4(row, col, depth, depth2),\n          vec4(" +
              h +
              ", " +
              l +
              ", " +
              c +
              ", " +
              u +
              ")) +\n          dot(\n            vec2(depth3, depth4),\n            vec2(" +
              s +
              ", 1)));\n        " +
              An(t) +
              "\n      }\n    "
            );
          var p = t.shapeInfo.flatOffset,
            f = t.shapeInfo.texShape,
            d = f[0],
            v = f[1];
          return v === h && null == p
            ? "\n      float " +
                r +
                "(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n          vec4(" +
                l +
                ", " +
                c +
                ", " +
                u +
                ", " +
                s +
                ")) +\n               float(depth4);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(" +
                v +
                ".0, " +
                d +
                ".0);\n        return sampleTexture(" +
                n +
                ", uv);\n      }\n    "
            : v === s && null == p
            ? "\n      float " +
              r +
              "(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        float texR = dot(vec4(row, col, depth, depth2),\n          vec4(" +
              e[1] * e[2] * e[3] * e[4] +
              ",\n               " +
              e[2] * e[3] * e[4] +
              ",\n               " +
              e[3] * e[4] +
              ",\n               " +
              e[4] +
              ")) + float(depth3);\n        int texC = depth4;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(" +
              v +
              ".0, " +
              d +
              ".0);\n        return sampleTexture(" +
              n +
              ", uv);\n      }\n    "
            : "\n    float " +
              r +
              "(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * " +
              h +
              " + col * " +
              l +
              " + depth * " +
              c +
              " +\n          depth2 * " +
              u +
              " + depth3 * " +
              s +
              " + depth4 + " +
              Tn(n) +
              ";\n      vec2 uv = uvFromFlat(" +
              d +
              ", " +
              v +
              ", index);\n      return sampleTexture(" +
              n +
              ", uv);\n    }\n  ";
        })(t);
      default:
        throw new Error(e.length + "-D input sampling is not yet supported");
    }
  }
  function Sn(t) {
    switch (t.shapeInfo.logicalShape.length) {
      case 0:
        return (
          "\n    vec4 get" +
          (s = t.name).charAt(0).toUpperCase() +
          s.slice(1) +
          "() {\n      return " +
          wn().texture2D +
          "(" +
          s +
          ", halfCR);\n    }\n  "
        );
      case 1:
        return (
          (n = (e = t).name),
          (r = "get" + n.charAt(0).toUpperCase() + n.slice(1)),
          (o = e.shapeInfo.texShape),
          (i = [Math.ceil(o[0] / 2), Math.ceil(o[1] / 2)]),
          (a = wn()),
          "\n    vec4 " +
            r +
            "(int index) {\n      vec2 uv = packedUVfrom1D(\n        " +
            i[0] +
            ", " +
            i[1] +
            ", index);\n      return " +
            a.texture2D +
            "(" +
            n +
            ", uv);\n    }\n  "
        );
      case 2:
        return (function (t) {
          var e = t.shapeInfo.logicalShape,
            n = t.name,
            r = "get" + n.charAt(0).toUpperCase() + n.slice(1),
            o = t.shapeInfo.texShape,
            i = o[0],
            a = o[1],
            s = wn();
          if (null != o && E(e, o))
            return (
              "\n      vec4 " +
              r +
              "(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2(" +
              a +
              ".0, " +
              i +
              ".0);\n\n        return " +
              s.texture2D +
              "(" +
              n +
              ", uv);\n      }\n    "
            );
          var u = [Math.ceil(o[0] / 2), Math.ceil(o[1] / 2)];
          return (
            "\n    vec4 " +
            r +
            "(int row, int col) {\n      vec2 uv = packedUVfrom2D(" +
            Math.ceil(e[1] / 2) +
            ", " +
            u[0] +
            ", " +
            u[1] +
            ", row, col);\n      return " +
            s.texture2D +
            "(" +
            n +
            ", uv);\n    }\n  "
          );
        })(t);
      case 3:
        return (function (t) {
          var e = t.shapeInfo.logicalShape,
            n = t.name,
            r = "get" + n.charAt(0).toUpperCase() + n.slice(1),
            o = t.shapeInfo.texShape,
            i = [Math.ceil(o[0] / 2), Math.ceil(o[1] / 2)];
          if (1 === e[0])
            return (
              "\n        " +
              Sn(Mn(t, e.slice(1))) +
              "\n        vec4 " +
              r +
              "(int b, int row, int col) {\n          return " +
              r +
              "(" +
              On(["b", "row", "col"], [1, 2]) +
              ");\n        }\n      "
            );
          var a = i[0],
            s = i[1],
            u = Math.ceil(e[2] / 2);
          return (
            "\n    vec4 " +
            r +
            "(int b, int row, int col) {\n      vec2 uv = packedUVfrom3D(\n        " +
            a +
            ", " +
            s +
            ", " +
            u * Math.ceil(e[1] / 2) +
            ", " +
            u +
            ", b, row, col);\n      return " +
            wn().texture2D +
            "(" +
            n +
            ", uv);\n    }\n  "
          );
        })(t);
      default:
        return (function (t) {
          for (
            var e = t.shapeInfo.logicalShape,
              n = e.length,
              r = t.name,
              o = "get" + r.charAt(0).toUpperCase() + r.slice(1),
              i = t.shapeInfo.texShape,
              a = [Math.ceil(i[0] / 2), Math.ceil(i[1] / 2)],
              s = a[0],
              u = a[1],
              c = Math.ceil(e[n - 1] / 2),
              l = c * Math.ceil(e[n - 2] / 2),
              h = "int b, int row, int col",
              p = "b * " + l + " + (row / 2) * " + c + " + (col / 2)",
              f = 2;
            f < n - 1;
            f++
          )
            (h = "int b" + f + ", " + h),
              (p = "b" + f + " * " + (l *= e[n - f - 1]) + " + " + p);
          return (
            "\n    vec4 " +
            o +
            "(" +
            h +
            ") {\n      int index = " +
            p +
            ";\n      int texR = index / " +
            u +
            ";\n      int texC = index - texR * " +
            u +
            ";\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(" +
            u +
            ", " +
            s +
            ");\n      return " +
            wn().texture2D +
            "(" +
            r +
            ", uv);\n    }\n  "
          );
        })(t);
    }
    var e, n, r, o, i, a, s;
  }
  var Rn =
      "\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n  int texelIndex = index / 2;\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",
    Nn =
      "\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n  int texNumC, int row, int col) {\n  int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",
    kn =
      "\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n    int texelsInBatch, int texelsInLogicalRow, int b,\n    int row, int col) {\n  int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",
    In =
      "\n  float getChannel(vec4 frag, vec2 innerDims) {\n    vec2 modCoord = mod(innerDims, 2.);\n    return modCoord.x == 0. ?\n      (modCoord.y == 0. ? frag.r : frag.g) :\n      (modCoord.y == 0. ? frag.b : frag.a);\n  }\n  float getChannel(vec4 frag, int dim) {\n    float modCoord = mod(float(dim), 2.);\n    return modCoord == 0. ? frag.r : frag.g;\n  }\n";
  function Tn(t) {
    return "offset" + t;
  }
  function An(t) {
    var e = t.name,
      n = B(t.shapeInfo.logicalShape);
    return n < 2
      ? "return " + e + ";"
      : "\n    for (int i = 0; i < " +
          n +
          "; i++) {\n      if (i == index) {\n        return " +
          e +
          "[i];\n      }\n    }\n  ";
  }
  function Dn(t) {
    if (t <= 1) return "int";
    if (2 === t) return "ivec2";
    if (3 === t) return "ivec3";
    if (4 === t) return "ivec4";
    if (5 === t) return "ivec5";
    if (6 === t) return "ivec6";
    throw Error("GPU for rank " + t + " is not yet supported");
  }
  function Mn(t, e) {
    var n = JSON.parse(JSON.stringify(t));
    return (n.shapeInfo.logicalShape = e), n;
  }
  function On(e, t) {
    return t
      .map(function (t) {
        return e[t];
      })
      .join(", ");
  }
  var Pn = function (t, e, n, r) {
      (this.variableNames = ["A"]),
        (this.usesPackedTextures = !0),
        D(2 < t.length, function () {
          return (
            "Packed arg" +
            (n.charAt(0).toUpperCase() + n.slice(1)) +
            " supports only inputs with rank above 2."
          );
        });
      var o = t[t.length - 1],
        i = Math.ceil(o / e);
      (this.outputShape = t.slice(0, -1)),
        1 < i && this.outputShape.push(i),
        r || this.variableNames.push("bestIndicesA");
      var a,
        s,
        u = this.outputShape,
        c = u.length,
        l = Dn(c),
        h = mn("coords", c);
      if (1 === i) {
        var p = Dn((s = c + 1));
        a =
          "\n        " +
          p +
          " sourceLocR = " +
          p +
          "(" +
          h.join() +
          ", 0);\n        ++" +
          h[c - 1] +
          ";\n        " +
          p +
          " sourceLocG = " +
          p +
          "(" +
          h.join() +
          ", 0);\n        ++" +
          h[c - 2] +
          ";\n        " +
          p +
          " sourceLocA = " +
          p +
          "(" +
          h.join() +
          ", 0);\n        --" +
          h[c - 1] +
          ";\n        " +
          p +
          " sourceLocB = " +
          p +
          "(" +
          h.join() +
          ", 0);\n        --" +
          h[c - 2] +
          ";";
      } else
        a =
          "\n        " +
          l +
          " sourceLocR = coords;\n        ++" +
          h[(s = c) - 1] +
          ";\n        " +
          l +
          " sourceLocG = coords;\n        ++" +
          h[c - 2] +
          ";\n        " +
          l +
          " sourceLocA = coords;\n        --" +
          h[c - 1] +
          ";\n        " +
          l +
          " sourceLocB = coords;\n        --" +
          h[c - 2] +
          ";";
      var f = ["x", "y", "z", "w", "u", "v"].slice(0, s),
        d = "." + f[s - 1],
        v = f.map(function (t) {
          return "int " + t;
        }),
        m = mn("sourceLocR", s - 1).concat("inIdx.r"),
        g = mn("sourceLocG", s - 1).concat("inIdx.g"),
        y = mn("sourceLocB", s - 1).concat("inIdx.b"),
        x = mn("sourceLocA", s - 1).concat("inIdx.a"),
        w = "max" === n ? "greaterThan" : "lessThan",
        b = r
          ? ""
          : "\n          inIdx = round(vec4(getBestIndicesAChannel(" +
            m.join() +
            "),\n                             getBestIndicesAChannel(" +
            g.join() +
            "),\n                             getBestIndicesAChannel(" +
            y.join() +
            "),\n                             getBestIndicesAChannel(" +
            x.join() +
            ")));",
        E =
          "vec4(\n            getAChannel(" +
          m.join() +
          "),\n            hasNextCol ? getAChannel(" +
          g.join() +
          ") : 0.,\n            hasNextRow ? getAChannel(" +
          y.join() +
          ") : 0.,\n            hasNextRow && hasNextCol ? getAChannel(" +
          x.join() +
          ") : 0.)",
        C = r
          ? ""
          : "\n      float getBestIndicesAChannel(" +
            v.join() +
            ") {\n        return getChannel(getBestIndicesA(" +
            f.join() +
            "),\n                                          vec2(" +
            f.slice(-2).join() +
            "));\n      }";
      this.userCode =
        "\n      float getAChannel(" +
        v.join() +
        ") {\n        return getChannel(getA(" +
        f.join() +
        "),\n                               vec2(" +
        f.slice(-2).join() +
        "));\n      }\n      " +
        C +
        "\n      void main() {\n        " +
        l +
        " coords = getOutputCoords();\n        bool hasNextCol = " +
        h[c - 1] +
        " < " +
        (u[c - 1] - 1) +
        ";\n        bool hasNextRow = " +
        h[c - 2] +
        " < " +
        (u[c - 2] - 1) +
        ";\n        " +
        a +
        "\n        ivec4 srcIdx = ivec4(sourceLocR" +
        d +
        ", sourceLocG" +
        d +
        ",\n          sourceLocB" +
        d +
        ", sourceLocA" +
        d +
        ") * " +
        e +
        ";\n        ivec4 inIdx = srcIdx;\n        vec4 bestIndex = vec4(inIdx);\n        vec4 bestValue = " +
        E +
        ";\n\n        for (int i = 0; i < " +
        e +
        "; i++) {\n          inIdx = srcIdx;\n          " +
        b +
        "\n          vec4 candidate = " +
        E +
        ";\n          bvec4 nan = isnan(candidate);\n          bvec4 replace = bvec4(\n            vec4(" +
        w +
        "(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n          bestValue = vec4(replace.x  ? candidate.x : bestValue.x,\n                           replace.y  ? candidate.y : bestValue.y,\n                           replace.z  ? candidate.z : bestValue.z,\n                           replace.w  ? candidate.w : bestValue.w);\n          bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n          srcIdx++;\n        }\n        setOutput(bestIndex);\n      }\n    ";
    },
    Fn = function (t) {
      (this.variableNames = ["dy"]), (this.outputShape = t.inShape);
      var e = t.filterHeight,
        n = t.filterWidth,
        r = t.strideHeight,
        o = t.strideWidth,
        i = t.dilationHeight,
        a = t.dilationWidth,
        s = t.effectiveFilterHeight,
        u = t.effectiveFilterWidth,
        c = s - 1 - t.padInfo.top,
        l = u - 1 - t.padInfo.left,
        h = 1 / (e * n);
      this.userCode =
        "\n      const ivec2 pads = ivec2(" +
        c +
        ", " +
        l +
        ");\n      const float avgMultiplier = float(" +
        h +
        ");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < " +
        s +
        ";\n            wR += " +
        i +
        ") {\n          float dyR = float(dyRCorner + wR) / " +
        r +
        ".0;\n\n          if (dyR < 0.0 || dyR >= " +
        t.outHeight +
        ".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < " +
        u +
        ";\n            wC+= " +
        a +
        ") {\n            float dyC = float(dyCCorner + wC) / " +
        o +
        ".0;\n\n            if (dyC < 0.0 || dyC >= " +
        t.outWidth +
        ".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n\n            dotProd += dyValue * avgMultiplier;\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    Ln = function (t, e, n, r, o, i) {
      (this.outputShape = []),
        (this.variableNames = ["x", "mean", "variance"]),
        xn(t, e),
        xn(t, n);
      var a = "0.0";
      null != r &&
        (xn(t, r),
        this.variableNames.push("offset"),
        (a = "getOffsetAtOutCoords()"));
      var s = "1.0";
      null != o &&
        (xn(t, o),
        this.variableNames.push("scale"),
        (s = "getScaleAtOutCoords()")),
        (this.outputShape = t),
        (this.userCode =
          "\n      void main() {\n        float x = getXAtOutCoords();\n        float mean = getMeanAtOutCoords();\n        float variance = getVarianceAtOutCoords();\n        float offset = " +
          a +
          ";\n        float scale = " +
          s +
          ";\n        float inv = scale * inversesqrt(variance + float(" +
          i +
          "));\n        setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n      }\n    ");
    },
    Bn = function (t, e, n, r, o, i) {
      (this.usesPackedTextures = !0),
        (this.variableNames = ["x", "mean", "variance"]),
        xn(t, e),
        xn(t, n);
      var a = "vec4(0.0)";
      null != r &&
        (xn(t, r),
        this.variableNames.push("offset"),
        (a = "getOffsetAtOutCoords()"));
      var s = "vec4(1.0)";
      null != o &&
        (xn(t, o),
        this.variableNames.push("scale"),
        (s = "getScaleAtOutCoords()")),
        (this.outputShape = t),
        (this.userCode =
          "\n      void main() {\n        vec4 offset = " +
          a +
          ";\n        vec4 scale = " +
          s +
          ";\n\n        vec4 x = getXAtOutCoords();\n        vec4 mean = getMeanAtOutCoords();\n        vec4 variance = getVarianceAtOutCoords();\n\n        vec4 inv = scale * inversesqrt(variance + vec4(" +
          i +
          "));\n\n        setOutput((x - mean) * inv + offset);\n      }\n    ");
    },
    Wn = "return areal * breal - aimag * bimag;",
    zn = "return areal * bimag + aimag * breal;",
    Un = function (t, e, n) {
      (this.variableNames = ["AReal", "AImag", "BReal", "BImag"]),
        (this.outputShape = xn(e, n)),
        (this.userCode =
          "\n      float binaryOpComplex(\n          float areal, float aimag, float breal, float bimag) {\n        " +
          t +
          "\n      }\n\n      void main() {\n        float areal = getARealAtOutCoords();\n        float aimag = getAImagAtOutCoords();\n        float breal = getBRealAtOutCoords();\n        float bimag = getBImagAtOutCoords();\n        setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n      }\n    ");
    },
    Gn = "return a + b;",
    Vn = "return a - b;",
    Hn = "return a * b;",
    qn = "return (a - b) * (a - b);",
    jn = function (t, e, n) {
      (this.variableNames = ["A", "B"]),
        (this.outputShape = xn(e, n)),
        (this.userCode =
          "\n      float binaryOperation(float a, float b) {\n        " +
          t +
          "\n      }\n\n      void main() {\n        float a = getAAtOutCoords();\n        float b = getBAtOutCoords();\n        setOutput(binaryOperation(a, b));\n      }\n    ");
    },
    $n = function (t, e, n) {
      (this.variableNames = ["A", "B"]),
        (this.supportsBroadcasting = !0),
        (this.usesPackedTextures = !0),
        (this.outputShape = xn(e, n)),
        (this.userCode =
          "\n      vec4 binaryOperation(vec4 a, vec4 b) {\n        " +
          t +
          "\n      }\n\n      void main() {\n        vec4 a = getAAtOutCoords();\n        vec4 b = getBAtOutCoords();\n        setOutput(binaryOperation(a, b));\n      }\n    ");
    },
    Kn = (function () {
      function t(t) {
        (this.variableNames = ["A"]),
          (this.outputShape = t),
          (this.userCode =
            "\n      uniform float min;\n      uniform float max;\n\n      void main() {\n        float value = getAAtOutCoords();\n        if (isnan(value)) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, min, max));\n      }\n    ");
      }
      return (
        (t.prototype.getCustomSetupFunc = function (n, r) {
          var o = this;
          return function (t, e) {
            null == o.minLoc &&
              ((o.minLoc = t.getUniformLocationNoThrow(e, "min")),
              (o.maxLoc = t.getUniformLocationNoThrow(e, "max"))),
              t.gl.uniform1f(o.minLoc, n),
              t.gl.uniform1f(o.maxLoc, r);
          };
        }),
        t
      );
    })(),
    Xn = (function () {
      function t(t) {
        (this.variableNames = ["A"]),
          (this.usesPackedTextures = !0),
          (this.outputShape = t),
          (this.userCode =
            "\n      uniform float min;\n      uniform float max;\n\n      void main() {\n        vec4 value = getAAtOutCoords();\n\n        if (any(isnan(value))) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, vec4(min), vec4(max)));\n      }\n    ");
      }
      return (
        (t.prototype.getCustomSetupFunc = function (n, r) {
          var o = this;
          return function (t, e) {
            null == o.minLoc &&
              ((o.minLoc = t.getUniformLocationNoThrow(e, "min")),
              (o.maxLoc = t.getUniformLocationNoThrow(e, "max"))),
              t.gl.uniform1f(o.minLoc, n),
              t.gl.uniform1f(o.maxLoc, r);
          };
        }),
        t
      );
    })(),
    Yn = function (t) {
      (this.variableNames = ["real", "imag"]),
        (this.outputShape = t),
        (this.userCode =
          "\n      void main() {\n        float re = abs(getRealAtOutCoords());\n        float im = abs(getImagAtOutCoords());\n        float mx = max(re, im);\n\n        // sadly the length function in glsl is not underflow-safe\n        // (at least not on Intel GPUs). So the safe solution is\n        // to ensure underflow-safety in all cases.\n        setOutput(\n          mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n        );\n      }\n    ");
    },
    Qn = function (t) {
      (this.outputShape = []),
        (this.outputShape = Re(t, 1)),
        (this.variableNames = t.map(function (t, e) {
          return "T" + e;
        }));
      var e = new Array(t.length - 1);
      e[0] = t[0][1];
      for (var n = 1; n < e.length; n++) e[n] = e[n - 1] + t[n][1];
      var r = ["if (yC < " + e[0] + ") setOutput(getT0(yR, yC));"];
      for (n = 1; n < e.length; n++) {
        var o = e[n - 1];
        r.push(
          "else if (yC < " +
            e[n] +
            ") setOutput(getT" +
            n +
            "(yR, yC-" +
            o +
            "));"
        );
      }
      var i = e.length,
        a = e[e.length - 1];
      r.push("else setOutput(getT" + i + "(yR, yC-" + a + "));"),
        (this.userCode =
          "\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int yR = coords.x;\n        int yC = coords.y;\n\n        " +
          r.join("\n        ") +
          "\n      }\n    ");
    },
    Jn = function (t, e) {
      (this.usesPackedTextures = !0),
        (this.outputShape = []),
        (this.outputShape = Re(t, e));
      var n = this.outputShape,
        r = n.length,
        o = Dn(r),
        i = mn("coords", r),
        a = ["x", "y", "z", "w", "u", "v"].slice(0, r);
      this.variableNames = t.map(function (t, e) {
        return "T" + e;
      });
      var s = new Array(t.length - 1);
      s[0] = t[0][e];
      for (var u = 1; u < s.length; u++) s[u] = s[u - 1] + t[u][e];
      var c = a[e],
        l = "vec2(" + a.slice(-2).join() + ")",
        h = a.join(),
        p =
          "if (" +
          c +
          " < " +
          s[0] +
          ")\n          return getChannel(getT0(" +
          h +
          "), " +
          l +
          ");";
      for (u = 1; u < s.length; u++) {
        var f = s[u - 1];
        p +=
          "\n        else if (" +
          c +
          " < " +
          s[u] +
          ") {\n          " +
          c +
          " -= " +
          f +
          ";\n          return getChannel(getT" +
          u +
          "(" +
          h +
          "), " +
          l +
          ");\n        }";
      }
      var d = s.length;
      (p +=
        "\n        else {\n          " +
        c +
        " -= " +
        s[s.length - 1] +
        ";\n          return getChannel(getT" +
        d +
        "(" +
        h +
        "), " +
        l +
        ");\n        }"),
        (this.userCode =
          "\n      float getValue(" +
          a.map(function (t) {
            return "int " + t;
          }) +
          ") {\n        " +
          p +
          "\n      }\n\n      void main() {\n        " +
          o +
          " coords = getOutputCoords();\n        vec4 result = vec4(getValue(" +
          i +
          "), 0., 0., 0.);\n        if (++" +
          i[r - 1] +
          " < " +
          n[r - 1] +
          ") {\n          result.g = getValue(" +
          i +
          ");\n        }\n        if (++" +
          i[r - 2] +
          " < " +
          n[r - 2] +
          ") {\n          result.a = getValue(" +
          i +
          ");\n        }\n        if (" +
          i[r - 2] +
          " < " +
          n[r - 2] +
          " &&\n            --" +
          i[r - 1] +
          " < " +
          n[r - 1] +
          ") {\n          result.b = getValue(" +
          i +
          ");\n        }\n        setOutput(result);\n      }\n    ");
    },
    Zn = function (t) {
      (this.variableNames = ["x", "dy"]), (this.outputShape = t.filterShape);
      var e = t.strideHeight,
        n = t.strideWidth,
        r = t.padInfo.top,
        o = t.padInfo.left;
      this.userCode =
        "\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int d2 = coords.w;\n\n        // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int b = 0; b < " +
        t.batchSize +
        "; b++) {\n          for (int yR = 0; yR < " +
        t.outHeight +
        "; yR++) {\n            int xR = wR + yR * " +
        e +
        " - " +
        r +
        ";\n\n            if (xR < 0 || xR >= " +
        t.inHeight +
        ") {\n              continue;\n            }\n\n            for (int yC = 0; yC < " +
        t.outWidth +
        "; yC++) {\n              int xC = wC + yC * " +
        n +
        " - " +
        o +
        ";\n\n              if (xC < 0 || xC >= " +
        t.inWidth +
        ") {\n                continue;\n              }\n\n              float dyValue = getDy(b, yR, yC, d2);\n              float xValue = getX(b, xR, xC, d1);\n              dotProd += (xValue * dyValue);\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    tr = function (t) {
      (this.variableNames = ["dy", "W"]), (this.outputShape = t.inShape);
      var e = t.filterHeight,
        n = t.filterWidth,
        r = t.strideHeight,
        o = t.strideWidth,
        i = e - 1 - t.padInfo.top,
        a = n - 1 - t.padInfo.left;
      this.userCode =
        "\n      const ivec2 pads = ivec2(" +
        i +
        ", " +
        a +
        ");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[3];\n\n        ivec2 dyCorner = coords.yz - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < " +
        e +
        "; wR++) {\n          float dyR = float(dyRCorner + wR) / " +
        r +
        ".0;\n\n          if (dyR < 0.0 || dyR >= " +
        t.outHeight +
        ".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = " +
        e +
        " - 1 - wR;\n\n          for (int wC = 0; wC < " +
        n +
        "; wC++) {\n            float dyC = float(dyCCorner + wC) / " +
        o +
        ".0;\n\n            if (dyC < 0.0 || dyC >= " +
        t.outWidth +
        ".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = " +
        n +
        " - 1 - wC;\n\n            for (int d2 = 0; d2 < " +
        t.outChannels +
        "; d2++) {\n              float xValue = getDy(batch, idyR, idyC, d2);\n              float wValue = getW(wRPerm, wCPerm, d1, d2);\n              dotProd += xValue * wValue;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    er = function (t) {
      (this.variableNames = ["x", "dy"]), (this.outputShape = t.filterShape);
      var e = t.strideDepth,
        n = t.strideHeight,
        r = t.strideWidth,
        o = t.padInfo.front,
        i = t.padInfo.top,
        a = t.padInfo.left;
      this.userCode =
        "\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int wF = coords.x;\n        int wR = coords.y;\n        int wC = coords.z;\n        int d1 = coords.w;\n        int d2 = coords.u;\n\n        float dotProd = 0.0;\n\n        for (int b = 0; b < " +
        t.batchSize +
        "; b++) {\n          for (int yF = 0; yF < " +
        t.outDepth +
        "; yF++) {\n            int xF = wF + yF * " +
        e +
        " - " +
        o +
        ";\n\n            if (xF < 0 || xF >= " +
        t.inDepth +
        ") {\n              continue;\n            }\n\n            for (int yR = 0; yR < " +
        t.outHeight +
        "; yR++) {\n              int xR = wR + yR * " +
        n +
        " - " +
        i +
        ";\n\n              if (xR < 0 || xR >= " +
        t.inHeight +
        ") {\n                continue;\n              }\n\n              for (int yC = 0; yC < " +
        t.outWidth +
        "; yC++) {\n                int xC = wC + yC * " +
        r +
        " - " +
        a +
        ";\n\n                if (xC < 0 || xC >= " +
        t.inWidth +
        ") {\n                  continue;\n                }\n\n                float dyValue = getDy(b, yF, yR, yC, d2);\n                float xValue = getX(b, xF, xR, xC, d1);\n                dotProd += (xValue * dyValue);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    nr = function (t) {
      (this.variableNames = ["dy", "W"]), (this.outputShape = t.inShape);
      var e = t.filterDepth,
        n = t.filterHeight,
        r = t.filterWidth,
        o = t.strideDepth,
        i = t.strideHeight,
        a = t.strideWidth,
        s = e - 1 - t.padInfo.front,
        u = n - 1 - t.padInfo.top,
        c = r - 1 - t.padInfo.left;
      this.userCode =
        "\n      const ivec3 pads = ivec3(" +
        s +
        ", " +
        u +
        ", " +
        c +
        ");\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d1 = coords.u;\n\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyFCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        float dotProd = 0.0;\n        for (int wF = 0; wF < " +
        e +
        "; wF++) {\n          float dyF = float(dyFCorner + wF) / " +
        o +
        ".0;\n\n          if (dyF < 0.0 || dyF >= " +
        t.outDepth +
        ".0 || fract(dyF) > 0.0) {\n            continue;\n          }\n          int idyF = int(dyF);\n\n          int wFPerm = " +
        e +
        " - 1 - wF;\n\n          for (int wR = 0; wR < " +
        n +
        "; wR++) {\n            float dyR = float(dyRCorner + wR) / " +
        i +
        ".0;\n\n            if (dyR < 0.0 || dyR >= " +
        t.outHeight +
        ".0 ||\n              fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            int wRPerm = " +
        n +
        " - 1 - wR;\n\n            for (int wC = 0; wC < " +
        r +
        "; wC++) {\n              float dyC = float(dyCCorner + wC) / " +
        a +
        ".0;\n\n              if (dyC < 0.0 || dyC >= " +
        t.outWidth +
        ".0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              int wCPerm = " +
        r +
        " - 1 - wC;\n\n              for (int d2 = 0; d2 < " +
        t.outChannels +
        "; d2++) {\n                float xValue = getDy(batch, idyF, idyR, idyC, d2);\n                float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    rr = function (t) {
      (this.variableNames = ["x", "dy"]), (this.outputShape = t.filterShape);
      var e = t.strideHeight,
        n = t.strideWidth,
        r = t.padInfo.top,
        o = t.padInfo.left,
        i = t.outChannels / t.inChannels;
      this.userCode =
        "\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int dm = coords.w;\n        int d2 = d1 * " +
        i +
        " + dm;\n\n        float dotProd = 0.0;\n\n        // TODO: Vec4 over the batch size\n        for (int b = 0; b < " +
        t.batchSize +
        "; b++) {\n          for (int yR = 0; yR < " +
        t.outHeight +
        "; yR++) {\n            int xR = wR + yR * " +
        e +
        " - " +
        r +
        ";\n\n            if (xR < 0 || xR >= " +
        t.inHeight +
        ") {\n              continue;\n            }\n\n            for (int yC = 0; yC < " +
        t.outWidth +
        "; yC++) {\n              int xC = wC + yC * " +
        n +
        " - " +
        o +
        ";\n\n              if (xC < 0 || xC >= " +
        t.inWidth +
        ") {\n                continue;\n              }\n\n              float dyValue = getDy(b, yR, yC, d2);\n              float xValue = getX(b, xR, xC, d1);\n              dotProd += (xValue * dyValue);\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    or = function (t) {
      (this.variableNames = ["dy", "W"]), (this.outputShape = t.inShape);
      var e = t.filterHeight,
        n = t.filterWidth,
        r = t.strideHeight,
        o = t.strideWidth,
        i = e - 1 - t.padInfo.top,
        a = n - 1 - t.padInfo.left,
        s = t.outChannels / t.inChannels;
      this.userCode =
        "\n      const ivec2 pads = ivec2(" +
        i +
        ", " +
        a +
        ");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[3];\n        ivec2 dyCorner = coords.yz - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        float dotProd = 0.0;\n\n        for (int wR = 0; wR < " +
        e +
        "; wR++) {\n          float dyR = float(dyRCorner + wR) / " +
        r +
        ".0;\n\n          if (dyR < 0.0 || dyR >= " +
        t.outHeight +
        ".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = " +
        e +
        " - 1 - wR;\n\n          for (int wC = 0; wC < " +
        n +
        "; wC++) {\n            float dyC = float(dyCCorner + wC) / " +
        o +
        ".0;\n\n            if (dyC < 0.0 || dyC >= " +
        t.outWidth +
        ".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = " +
        n +
        " - 1 - wC;\n\n            // TODO: Vec4 over the channelMul\n            for (int dm = 0; dm < " +
        s +
        "; dm++) {\n              int d2 = d1 * " +
        s +
        " + dm;\n              float xValue = getDy(batch, idyR, idyC, d2);\n              float wValue = getW(wRPerm, wCPerm, d1, dm);\n              dotProd += xValue * wValue;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    ir = function (t) {
      (this.variableNames = ["x", "W"]), (this.outputShape = t.outShape);
      var e = t.padInfo.top,
        n = t.padInfo.left,
        r = t.strideHeight,
        o = t.strideWidth,
        i = t.dilationHeight,
        a = t.dilationWidth,
        s = t.filterHeight,
        u = t.filterWidth,
        c = 4 * Math.floor(t.inChannels / 4),
        l = t.inChannels % 4;
      this.userCode =
        "\n      const ivec2 strides = ivec2(" +
        r +
        ", " +
        o +
        ");\n      const ivec2 pads = ivec2(" +
        e +
        ", " +
        n +
        ");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d2 = coords[3];\n\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < " +
        s +
        "; wR++) {\n          int xR = xRCorner + wR * " +
        i +
        ";\n\n          if (xR < 0 || xR >= " +
        t.inHeight +
        ") {\n            continue;\n          }\n\n          for (int wC = 0; wC < " +
        u +
        "; wC++) {\n            int xC = xCCorner + wC * " +
        a +
        ";\n\n            if (xC < 0 || xC >= " +
        t.inWidth +
        ") {\n              continue;\n            }\n\n            for (int d1 = 0; d1 < " +
        c +
        "; d1 += 4) {\n              vec4 xValues = vec4(\n                getX(batch, xR, xC, d1),\n                getX(batch, xR, xC, d1 + 1),\n                getX(batch, xR, xC, d1 + 2),\n                getX(batch, xR, xC, d1 + 3)\n              );\n              vec4 wValues = vec4(\n                getW(wR, wC, d1, d2),\n                getW(wR, wC, d1 + 1, d2),\n                getW(wR, wC, d1 + 2, d2),\n                getW(wR, wC, d1 + 3, d2)\n              );\n\n              dotProd += dot(xValues, wValues);\n            }\n\n            if (" +
        (1 === l) +
        ") {\n              dotProd +=\n                getX(batch, xR, xC, " +
        c +
        ") *\n                getW(wR, wC, " +
        c +
        ", d2);\n            } else if (" +
        (2 === l) +
        ") {\n              vec2 xValues = vec2(\n                getX(batch, xR, xC, " +
        c +
        "),\n                getX(batch, xR, xC, " +
        c +
        " + 1)\n              );\n              vec2 wValues = vec2(\n                getW(wR, wC, " +
        c +
        ", d2),\n                getW(wR, wC, " +
        c +
        " + 1, d2)\n              );\n              dotProd += dot(xValues, wValues);\n            } else if (" +
        (3 === l) +
        ") {\n              vec3 xValues = vec3(\n                getX(batch, xR, xC, " +
        c +
        "),\n                getX(batch, xR, xC, " +
        c +
        " + 1),\n                getX(batch, xR, xC, " +
        c +
        " + 2)\n              );\n              vec3 wValues = vec3(\n                getW(wR, wC, " +
        c +
        ", d2),\n                getW(wR, wC, " +
        c +
        " + 1, d2),\n                getW(wR, wC, " +
        c +
        " + 2, d2)\n              );\n              dotProd += dot(xValues, wValues);\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    ar = function (t) {
      (this.variableNames = ["x", "W"]), (this.outputShape = t.outShape);
      var e = t.padInfo.front,
        n = t.padInfo.top,
        r = t.padInfo.left,
        o = t.strideDepth,
        i = t.strideHeight,
        a = t.strideWidth,
        s = t.dilationDepth,
        u = t.dilationHeight,
        c = t.dilationWidth,
        l = t.filterDepth,
        h = t.filterHeight,
        p = t.filterWidth,
        f = 4 * Math.floor(t.inChannels / 4),
        d = t.inChannels % 4;
      this.userCode =
        "\n      const ivec3 strides = ivec3(" +
        o +
        ", " +
        i +
        ", " +
        a +
        ");\n      const ivec3 pads = ivec3(" +
        e +
        ", " +
        n +
        ", " +
        r +
        ");\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d2 = coords.u;\n\n        ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n        int xFCorner = xFRCCorner.x;\n        int xRCorner = xFRCCorner.y;\n        int xCCorner = xFRCCorner.z;\n\n        // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n        // y(yF, yR, yC, d2). ? = to be determined. : = across all\n        // values in that axis.\n        float dotProd = 0.0;\n        for (int wF = 0; wF < " +
        l +
        "; wF++) {\n          int xF = xFCorner + wF * " +
        s +
        ";\n\n          if (xF < 0 || xF >= " +
        t.inDepth +
        ") {\n            continue;\n          }\n\n          for (int wR = 0; wR < " +
        h +
        "; wR++) {\n            int xR = xRCorner + wR * " +
        u +
        ";\n\n            if (xR < 0 || xR >= " +
        t.inHeight +
        ") {\n              continue;\n            }\n\n            for (int wC = 0; wC < " +
        p +
        "; wC++) {\n              int xC = xCCorner + wC * " +
        c +
        ";\n\n              if (xC < 0 || xC >= " +
        t.inWidth +
        ") {\n                continue;\n              }\n\n              for (int d1 = 0; d1 < " +
        f +
        "; d1 += 4) {\n                vec4 xValues = vec4(\n                  getX(batch, xF, xR, xC, d1),\n                  getX(batch, xF, xR, xC, d1 + 1),\n                  getX(batch, xF, xR, xC, d1 + 2),\n                  getX(batch, xF, xR, xC, d1 + 3)\n                );\n                vec4 wValues = vec4(\n                  getW(wF, wR, wC, d1, d2),\n                  getW(wF, wR, wC, d1 + 1, d2),\n                  getW(wF, wR, wC, d1 + 2, d2),\n                  getW(wF, wR, wC, d1 + 3, d2)\n                );\n\n                dotProd += dot(xValues, wValues);\n              }\n\n              if (" +
        (1 === d) +
        ") {\n                dotProd +=\n                  getX(batch, xF, xR, xC, " +
        f +
        ") *\n                  getW(wF, wR, wC, " +
        f +
        ", d2);\n              } else if (" +
        (2 === d) +
        ") {\n                vec2 xValues = vec2(\n                  getX(batch, xF, xR, xC, " +
        f +
        "),\n                  getX(batch, xF, xR, xC, " +
        f +
        " + 1)\n                );\n                vec2 wValues = vec2(\n                  getW(wF, wR, wC, " +
        f +
        ", d2),\n                  getW(wF, wR, wC, " +
        f +
        " + 1, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              } else if (" +
        (3 === d) +
        ") {\n                vec3 xValues = vec3(\n                  getX(batch, xF, xR, xC, " +
        f +
        "),\n                  getX(batch, xF, xR, xC, " +
        f +
        " + 1),\n                  getX(batch, xF, xR, xC, " +
        f +
        " + 2)\n                );\n                vec3 wValues = vec3(\n                  getW(wF, wR, wC, " +
        f +
        ", d2),\n                  getW(wF, wR, wC, " +
        f +
        " + 1, d2),\n                  getW(wF, wR, wC, " +
        f +
        " + 2, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    sr = function (t) {
      (this.variableNames = ["x", "W"]), (this.outputShape = t.outShape);
      var e = t.inHeight,
        n = t.inWidth,
        r = t.padInfo.top,
        o = t.padInfo.left,
        i = t.strideHeight,
        a = t.strideWidth,
        s = t.dilationHeight,
        u = t.dilationWidth,
        c = t.filterHeight,
        l = t.filterWidth,
        h = t.outChannels / t.inChannels;
      this.userCode =
        "\n      const ivec2 strides = ivec2(" +
        i +
        ", " +
        a +
        ");\n      const ivec2 pads = ivec2(" +
        r +
        ", " +
        o +
        ");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2 / " +
        h +
        ";\n        int q = d2 - d1 * " +
        h +
        ";\n\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        // TODO(dsmilkov): Flatten the two for loops and vec4 the operations.\n        for (int wR = 0; wR < " +
        c +
        "; wR++) {\n          int xR = xRCorner + wR * " +
        s +
        ";\n\n          if (xR < 0 || xR >= " +
        e +
        ") {\n            continue;\n          }\n\n          for (int wC = 0; wC < " +
        l +
        "; wC++) {\n            int xC = xCCorner + wC * " +
        u +
        ";\n\n            if (xC < 0 || xC >= " +
        n +
        ") {\n              continue;\n            }\n\n            float xVal = getX(batch, xR, xC, d1);\n            float wVal = getW(wR, wC, d1, q);\n            dotProd += xVal * wVal;\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    ur = function (t) {
      (this.variableNames = ["x", "W"]),
        (this.usesPackedTextures = !0),
        (this.outputShape = t.outShape);
      for (
        var e = t.inHeight,
          n = t.inWidth,
          r = t.padInfo.top,
          o = t.padInfo.left,
          i = t.strideHeight,
          a = t.strideWidth,
          s = t.dilationHeight,
          u = t.dilationWidth,
          c = t.filterHeight,
          l = t.filterWidth,
          h = l,
          p = "int xR; int xC; int xCOffset;",
          f = 0;
        f < c;
        f++
      )
        for (var d = 0; d < l; d++)
          p +=
            "\n          vec4 xTexelR" +
            f +
            "C" +
            2 * d +
            " = vec4(0.);\n          vec4 wR" +
            f +
            "C" +
            d +
            " = vec4(0.);\n          vec4 xR" +
            f +
            "C" +
            d +
            " = vec4(0.);";
      for (f = 0; f < c; f++)
        for (var v = 0; v < h; v++) {
          if (
            ((p +=
              "\n          xR = xRCorner + " +
              f * s +
              ";\n          xC = xCCorner + " +
              (d = 2 * v) * u +
              ";\n        "),
            1 === a)
          ) {
            if (
              d < l &&
              ((p +=
                o % 2 == 1
                  ? "\n                xCOffset = xC + 1;\n                if(xR >= 0 && xR < " +
                    e +
                    " && xCOffset >= 0 && xCOffset < " +
                    n +
                    ") {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = getX(batch, xR, xCOffset, d1);\n                } else {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = vec4(0.);\n                }\n\n                xCOffset = xC + 1 - 2;\n                if(xR >= 0 && xR < " +
                    e +
                    " && xCOffset >= 0 && xCOffset < " +
                    n +
                    ") {\n                  vec4 previous = getX(batch, xR, xCOffset, d1);\n                  xR" +
                    f +
                    "C" +
                    d +
                    " = vec4(previous.zw, xTexelR" +
                    f +
                    "C" +
                    d +
                    ".xy);\n                } else {\n                  xR" +
                    f +
                    "C" +
                    d +
                    " = vec4(0, 0, xTexelR" +
                    f +
                    "C" +
                    d +
                    ".xy);\n                }\n              "
                  : "\n                if(xR >= 0 && xR < " +
                    e +
                    " && xC >= 0 && xC < " +
                    n +
                    ") {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = getX(batch, xR, xC, d1);\n                } else {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = vec4(0.);\n                }\n\n                xR" +
                    f +
                    "C" +
                    d +
                    " = xTexelR" +
                    f +
                    "C" +
                    d +
                    ";\n              "),
              d + 1 < l)
            ) {
              var m = o % 2 == 0 ? _(u) : u;
              (u % 2 == 0 && o % 2 == 1) || (u % 2 != 0 && o % 2 != 1)
                ? ((p +=
                    "\n                  xCOffset = xC + " +
                    (o % 2) +
                    " + " +
                    m +
                    ";\n\n                  if(xR >= 0 && xR < " +
                    e +
                    " &&\n                    xCOffset >= 0 && xCOffset < " +
                    n +
                    ") {\n                    xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    " = getX(batch, xR, xCOffset, d1);\n                  }\n                "),
                  1 < u &&
                    (p +=
                      "\n                    xCOffset -= 2;\n                    if(xR >= 0 && xR < " +
                      e +
                      " &&\n                      xCOffset >= 0 && xCOffset < " +
                      n +
                      ") {\n                      xTexelR" +
                      f +
                      "C" +
                      d +
                      " = getX(batch, xR, xCOffset, d1);\n                    } else {\n                      xTexelR" +
                      f +
                      "C" +
                      d +
                      " = vec4(0.);\n                    }\n                  "),
                  (p +=
                    "\n                  xR" +
                    f +
                    "C" +
                    (d + 1) +
                    " = vec4(\n                    xTexelR" +
                    f +
                    "C" +
                    d +
                    ".zw, xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    ".xy);\n                "))
                : (p +=
                    "\n                  xCOffset = xC + " +
                    m +
                    ";\n\n                  if(xR >= 0 && xR < " +
                    e +
                    " &&\n                    xCOffset >= 0 && xCOffset < " +
                    n +
                    ") {\n                    xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    " = getX(batch, xR, xCOffset, d1);\n                  }\n\n                  xR" +
                    f +
                    "C" +
                    (d + 1) +
                    " = xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    ";\n                ");
            }
          } else
            d < l &&
              ((p +=
                "\n              if(xR >= 0 && xR < " +
                e +
                ") {\n            "),
              o % 2 == 1
                ? ((p +=
                    "\n                xCOffset = xC + 1 - " +
                    a +
                    ";\n                if(xCOffset >= 0 && xCOffset < " +
                    n +
                    ") {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = getX(batch, xR, xCOffset, d1);\n                } else {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = vec4(0.);\n                }\n\n                if(xC + 1 >= 0 && xC + 1 < " +
                    n +
                    ") {\n                  xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    " = getX(batch, xR, xC + 1, d1);\n                } else {\n                  xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    " = vec4(0.);\n                }\n\n                xR" +
                    f +
                    "C" +
                    d +
                    " = vec4(\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    ".zw, xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    ".zw);\n              "),
                  d + 1 < l &&
                    (p +=
                      "\n                  vec4 final = vec4(0.);\n                  xCOffset = xC + 1 + " +
                      a +
                      ";\n                  if(xCOffset >= 0 && xCOffset < " +
                      n +
                      ") {\n                    final = getX(batch, xR, xCOffset, d1);\n                  }\n                  xR" +
                      f +
                      "C" +
                      (d + 1) +
                      " = vec4(xTexelR" +
                      f +
                      "C" +
                      (d + 2) +
                      ".xy, final.xy);\n                "))
                : ((p +=
                    "\n                if(xC >= 0 && xC < " +
                    n +
                    ") {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = getX(batch, xR, xC, d1);\n                } else {\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    " = vec4(0.);\n                }\n\n                xCOffset = xC + " +
                    a +
                    ";\n                if(xCOffset >= 0 && xCOffset < " +
                    n +
                    ") {\n                  xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    " = getX(batch, xR, xCOffset, d1);\n                } else {\n                  xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    " = vec4(0.);\n                }\n\n                xR" +
                    f +
                    "C" +
                    d +
                    " = vec4(\n                  xTexelR" +
                    f +
                    "C" +
                    d +
                    ".xy, xTexelR" +
                    f +
                    "C" +
                    (d + 2) +
                    ".xy);\n              "),
                  d + 1 < l &&
                    (p +=
                      "\n                  xR" +
                      f +
                      "C" +
                      (d + 1) +
                      " = vec4(\n                    xTexelR" +
                      f +
                      "C" +
                      d +
                      ".zw, xTexelR" +
                      f +
                      "C" +
                      (d + 2) +
                      ".zw);\n                ")),
              (p += "}"));
          d < l &&
            ((p +=
              "\n            vec4 wTexelR" +
              f +
              "C" +
              d +
              " = getW(" +
              f +
              ", " +
              d +
              ", d1, q);\n            wR" +
              f +
              "C" +
              d +
              " = vec4(wTexelR" +
              f +
              "C" +
              d +
              ".xz, wTexelR" +
              f +
              "C" +
              d +
              ".xz);\n          "),
            d + 1 < l &&
              (p +=
                "\n              vec4 wTexelR" +
                f +
                "C" +
                (d + 1) +
                " = getW(" +
                f +
                ", " +
                (d + 1) +
                ", d1, q);\n              wR" +
                f +
                "C" +
                (d + 1) +
                " =\n                vec4(wTexelR" +
                f +
                "C" +
                (d + 1) +
                ".xz, wTexelR" +
                f +
                "C" +
                (d + 1) +
                ".xz);"));
        }
      for (f = 0; f < c; f++)
        for (d = 0; d < l; d++)
          p += "result += xR" + f + "C" + d + " * wR" + f + "C" + d + ";";
      this.userCode =
        "\n      const ivec2 strides = ivec2(" +
        i +
        ", " +
        a +
        ");\n      const ivec2 pads = ivec2(" +
        r +
        ", " +
        o +
        ");\n\n      void main() {\n\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2;\n        int q = 0;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        vec4 result = vec4(0.);\n\n        " +
        p +
        "\n\n        setOutput(result);\n      }\n    ";
    },
    cr = function (t, e, n, r, o) {
      (this.variableNames = ["Image", "Boxes", "BoxInd"]),
        (this.outputShape = []);
      var i = t[0],
        a = t[1],
        s = t[2],
        u = t[3],
        c = e[0],
        l = n[0],
        h = n[1];
      this.outputShape = [c, l, h, u];
      var p = "bilinear" === r ? 1 : 0,
        f = [a - 1 + ".0", s - 1 + ".0"],
        d = f[0],
        v = f[1],
        m =
          1 < l
            ? [
                "" + (a - 1) / (l - 1),
                "(y2-y1) * height_ratio",
                "y1*" + d + " + float(y)*(height_scale)",
              ]
            : ["0.0", "0.0", "0.5 * (y1+y2) * " + d],
        g = m[0],
        y = m[1],
        x = m[2],
        w =
          1 < h
            ? [
                "" + (s - 1) / (h - 1),
                "(x2-x1) * width_ratio",
                "x1*" + v + " + float(x)*(width_scale)",
              ]
            : ["0.0", "0.0", "0.5 * (x1+x2) * " + v],
        b = w[0],
        E = w[1],
        C = w[2];
      this.userCode =
        "\n      const float height_ratio = float(" +
        g +
        ");\n      const float width_ratio = float(" +
        b +
        ");\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int y = coords[1];\n        int x = coords[2];\n        int d = coords[3];\n\n        // get box vals\n        float y1 = getBoxes(b,0);\n        float x1 = getBoxes(b,1);\n        float y2 = getBoxes(b,2);\n        float x2 = getBoxes(b,3);\n\n        // get image in batch index\n        int bInd = round(getBoxInd(b));\n        if(bInd < 0 || bInd >= " +
        i +
        ") {\n          return;\n        }\n\n        float height_scale = " +
        y +
        ";\n        float width_scale = " +
        E +
        ";\n\n        float in_y = " +
        x +
        ";\n        if( in_y < 0.0 || in_y > " +
        d +
        " ) {\n          setOutput(float(" +
        o +
        "));\n          return;\n        }\n        float in_x = " +
        C +
        ";\n        if( in_x < 0.0 || in_x > " +
        v +
        " ) {\n          setOutput(float(" +
        o +
        "));\n          return;\n        }\n\n        vec2 sourceFracIndexCR = vec2(in_x,in_y);\n        if(" +
        p +
        " == 1) {\n          // Compute the four integer indices.\n          ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n          ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n          float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n          float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n          float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n          float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n          vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n          float top = topLeft + (topRight - topLeft) * fracCR.x;\n          float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n          float newValue = top + (bottom - top) * fracCR.y;\n          setOutput(newValue);\n        } else {\n          // Compute the coordinators of nearest neighbor point.\n          ivec2 sourceNearestCR = ivec2(floor(\n            sourceFracIndexCR + vec2(0.5,0.5)));\n          float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n          setOutput(newValue);\n        }\n      }\n    ";
    },
    lr = function (t, e, n) {
      this.variableNames = ["x"];
      var r = (this.outputShape = t).length,
        o = t[t.length - 1],
        i = n ? "<" : ">";
      this.userCode =
        "\n      int getIndex(int i) {\n        " +
        (n ? "return " + o + " -i - 1;" : "return i;") +
        "\n      }\n\n      void main() {\n        " +
        Dn(r) +
        " coords = getOutputCoords();\n        int end = " +
        hr(r, "coords") +
        ";\n        float val = 0.0;\n        for (int i = " +
        o +
        " - 1; i >= 0; i -= 1) {\n          int idx = getIndex(i);\n          if (idx " +
        i +
        " end) {\n            continue;\n          }\n          if (idx == end && " +
        e +
        ") {\n            continue;\n          }\n          " +
        hr(r, "coords") +
        " = idx;\n          val += getX(" +
        (function (t, e) {
          if (1 === t) return "" + e;
          if (2 === t) return e + ".x, " + e + ".y";
          if (3 === t) return e + ".x, " + e + ".y, " + e + ".z";
          if (4 === t) return e + ".x, " + e + ".y, " + e + ".z, " + e + ".w";
          throw Error("Cumulative sum for rank " + t + " is not yet supported");
        })(r, "coords") +
        ");\n        }\n        setOutput(val);\n      }\n    ";
    };
  function hr(t, e) {
    if (1 === t) return "" + e;
    if (2 === t) return e + ".y";
    if (3 === t) return e + ".z";
    if (4 === t) return e + ".w";
    throw Error("Cumulative sum for rank " + t + " is not yet supported");
  }
  var pr = (function () {
      function t(t, e, n) {
        (this.variableNames = ["x"]),
          (this.outputShape = []),
          (this.outputShape = t),
          (this.blockSize = e),
          (this.dataFormat = n),
          (this.userCode =
            "\n    void main() {\n      ivec4 coords = getOutputCoords();\n      int b = coords[0];\n      int h = " +
            this.getHeightCoordString() +
            ";\n      int w = " +
            this.getWidthCoordString() +
            ";\n      int d = " +
            this.getDepthCoordString() +
            ";\n\n      int in_h = h / " +
            e +
            ";\n      int offset_h = imod(h, " +
            e +
            ");\n      int in_w = w / " +
            e +
            ";\n      int offset_w = imod(w, " +
            e +
            ");\n      int offset_d = (offset_h * " +
            e +
            " + offset_w) *\n        " +
            this.getOutputDepthSize() +
            ";\n      int in_d = d + offset_d;\n\n      float result = " +
            this.getInputSamplingString() +
            ";\n      setOutput(result);\n    }\n  ");
      }
      return (
        (t.prototype.getHeightCoordString = function () {
          return "NHWC" === this.dataFormat ? "coords[1]" : "coords[2]";
        }),
        (t.prototype.getWidthCoordString = function () {
          return "NHWC" === this.dataFormat ? "coords[2]" : "coords[3]";
        }),
        (t.prototype.getDepthCoordString = function () {
          return "NHWC" === this.dataFormat ? "coords[3]" : "coords[1]";
        }),
        (t.prototype.getOutputDepthSize = function () {
          return "NHWC" === this.dataFormat
            ? this.outputShape[3]
            : this.outputShape[1];
        }),
        (t.prototype.getInputSamplingString = function () {
          return "NHWC" === this.dataFormat
            ? "getX(b, in_h, in_w, in_d)"
            : "getX(b, in_d, in_h, in_w)";
        }),
        t
      );
    })(),
    fr = function (t) {
      this.variableNames = ["A"];
      var e = wn();
      (this.outputShape = t),
        (this.userCode =
          "\n      const float FLOAT_MAX = 1.70141184e38;\n      const float FLOAT_MIN = 1.17549435e-38;\n\n      lowp vec4 encode_float(highp float v) {\n        if (isnan(v)) {\n          return vec4(255, 255, 255, 255);\n        }\n\n        highp float av = abs(v);\n\n        if(av < FLOAT_MIN) {\n          return vec4(0.0, 0.0, 0.0, 0.0);\n        } else if(v > FLOAT_MAX) {\n          return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n        } else if(v < -FLOAT_MAX) {\n          return vec4(0.0, 0.0,  128.0, 255.0) / 255.0;\n        }\n\n        highp vec4 c = vec4(0,0,0,0);\n\n        highp float e = floor(log2(av));\n        highp float m = exp2(fract(log2(av))) - 1.0;\n\n        c[2] = floor(128.0 * m);\n        m -= c[2] / 128.0;\n        c[1] = floor(32768.0 * m);\n        m -= c[1] / 32768.0;\n        c[0] = floor(8388608.0 * m);\n\n        highp float ebias = e + 127.0;\n        c[3] = floor(ebias / 2.0);\n        ebias -= c[3] * 2.0;\n        c[2] += floor(ebias) * 128.0;\n\n        c[3] += 128.0 * step(0.0, -v);\n\n        return c / 255.0;\n      }\n\n      void main() {\n        float x = getAAtOutCoords();\n        " +
          e.output +
          " = encode_float(x);\n      }\n    ");
    },
    dr = "return real * expR - imag * expI;",
    vr = "return real * expI + imag * expR;",
    mr = function (t, e, n) {
      this.variableNames = ["real", "imag"];
      var r = e[1];
      this.outputShape = e;
      var o = n ? "2.0 * " + Math.PI : "-2.0 * " + Math.PI,
        i = n ? r + ".0" : "1.0";
      this.userCode =
        "\n      const float exponentMultiplier = " +
        o +
        ";\n\n      float unaryOpComplex(float real, float expR, float imag, float expI) {\n        " +
        t +
        "\n      }\n\n      float mulMatDFT(int batch, int index) {\n        float indexRatio = float(index) / float(" +
        r +
        ");\n        float exponentMultiplierTimesIndexRatio =\n            exponentMultiplier * indexRatio;\n\n        float result = 0.0;\n\n        for (int i = 0; i < " +
        r +
        "; i++) {\n          // x = (-2|2 * PI / N) * index * i;\n          float x = exponentMultiplierTimesIndexRatio * float(i);\n          float expR = cos(x);\n          float expI = sin(x);\n          float real = getReal(batch, i);\n          float imag = getImag(batch, i);\n\n          result +=\n              unaryOpComplex(real, expR, imag, expI) / " +
        i +
        ";\n        }\n\n        return result;\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        setOutput(mulMatDFT(coords[0], coords[1]));\n      }\n    ";
    },
    gr = (function () {
      function t(t, e) {
        (this.outputShape = []),
          (this.variableNames = ["x"]),
          (this.outputShape = t),
          (this.userCode =
            "\n      uniform float value;\n      void main() {\n        // Input can be obtained from uniform value.\n        setOutput(value);\n      }\n    ");
      }
      return (
        (t.prototype.getCustomSetupFunc = function (n) {
          var r = this;
          return function (t, e) {
            null == r.valueLoc &&
              (r.valueLoc = t.getUniformLocationNoThrow(e, "value")),
              t.gl.uniform1f(r.valueLoc, n);
          };
        }),
        t
      );
    })(),
    yr = function (t) {
      this.variableNames = ["A"];
      var e = wn(),
        n = t[0],
        r = t[1];
      (this.outputShape = t),
        (this.userCode =
          "\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int texR = coords[0];\n        int texC = coords[1];\n        int depth = coords[2];\n        vec2 uv = (vec2(texC, texR) + halfCR) / vec2(" +
          r +
          ".0, " +
          n +
          ".0);\n\n        vec4 values = " +
          e.texture2D +
          "(A, uv);\n        float value;\n        if (depth == 0) {\n          value = values.r;\n        } else if (depth == 1) {\n          value = values.g;\n        } else if (depth == 2) {\n          value = values.b;\n        } else if (depth == 3) {\n          value = values.a;\n        }\n\n        setOutput(floor(value * 255.0 + 0.5));\n      }\n    ");
    },
    xr = function (t, e, n) {
      this.variableNames = ["A", "indices"];
      var r = t.slice();
      (r[n] = e), (this.outputShape = r), (this.rank = r.length);
      var o = Dn(this.rank),
        i = (function (t, e) {
          var n = t.length;
          if (4 < n)
            throw Error("Gather for rank " + n + " is not yet supported");
          if (1 === n) return "int(getIndices(resRC))";
          for (
            var r = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = [], i = 0;
            i < t.length;
            i++
          )
            i === e
              ? o.push("int(getIndices(" + r[i] + "))")
              : o.push("" + r[i]);
          return o.join();
        })(t, n);
      this.userCode =
        "\n      void main() {\n        " +
        o +
        " resRC = getOutputCoords();\n        setOutput(getA(" +
        i +
        "));\n      }\n    ";
    };
  var wr,
    br,
    Er,
    Cr,
    _r = function (t, e, n) {
      (this.sliceDim = t),
        (this.strides = e),
        (this.variableNames = ["x", "indices"]),
        (this.outputShape = n);
      var r = Dn(e.length),
        o = Dn(n.length),
        i = 1 < this.sliceDim ? "strides[j]" : "strides";
      this.userCode =
        "\n        " +
        r +
        " strides = " +
        r +
        "(" +
        this.strides +
        ");\n         void main() {\n          " +
        o +
        " coords = getOutputCoords();\n          int flattenIndex = 0;\n          for (int j = 0; j < " +
        this.sliceDim +
        "; j++) {\n            int index = round(getIndices(coords[0], j));\n            flattenIndex += index * " +
        i +
        ";\n          }\n          setOutput(getX(flattenIndex, coords[1]));\n        }\n      ";
    };
  function Sr(t, e) {
    return [e, t];
  }
  function Rr(t, e) {
    return t * e;
  }
  function Nr(t, e, n) {
    var r = (function (t, e) {
      if (t % e != 0)
        throw new Error("unpackedSize (" + t + ") must be a multiple of " + e);
      return t / e;
    })(t.length, n);
    if (e.length < r)
      throw new Error("matrix length (" + e.length + ") must be >= " + r);
    for (var o = 0, i = 0; i < t.length; i += n) e[o++] = t[i];
  }
  function kr(t, e) {
    return [Math.max(1, Math.ceil(e / 2)), Math.max(1, Math.ceil(t / 2))];
  }
  function Ir(t, e) {
    var n = kr(t, e);
    return n[0] * n[1] * 4;
  }
  function Tr(t, e, n, r, o) {
    var i = n * r;
    if (o.length < i)
      throw new Error("matrix length (" + o.length + ") must be >= " + i);
    for (
      var a = r % 2 == 1,
        s = n % 2 == 1,
        u = Math.floor(r / 2),
        c = Math.floor(n / 2),
        l = Math.ceil(r / 2),
        h = l * Math.ceil(n / 2),
        p = _(n) * _(r),
        f = 0;
      f < e;
      f++
    ) {
      for (
        var d = f * n * r,
          v = f * p,
          m = a ? 4 : 0,
          g = r + (a ? 1 : 0),
          y = v,
          x = d,
          w = d + r,
          b = 0;
        b < c;
        ++b
      ) {
        for (var E = 0; E < u; ++E)
          (o[x++] = t[y++]),
            (o[x++] = t[y++]),
            (o[w++] = t[y++]),
            (o[w++] = t[y++]);
        (y += m), (x += g), (w += g);
      }
      if (a) {
        y = v + 4 * (l - 1);
        var C = d + r - 1;
        for (m = 4 * l, g = 2 * r, b = 0; b < c; ++b)
          (o[C] = t[y]), (o[C + r] = t[y + 2]), (y += m), (C += g);
      }
      if (s) {
        for (y = v + 4 * (h - l), C = d + (n - 1) * r, E = 0; E < u; ++E)
          (o[C++] = t[y++]), (o[C++] = t[y++]), (y += 2);
        a && (o[d + n * r - 1] = t[y]);
      }
    }
    return o;
  }
  function Ar(t, e, n) {
    var r = n();
    return (
      e &&
        (function (t) {
          var e = t.getError();
          if (e !== t.NO_ERROR) throw new Error("WebGL Error: " + Mr(t, e));
        })(t),
      r
    );
  }
  ((Cr = wr || (wr = {}))[(Cr.RENDER = 0)] = "RENDER"),
    (Cr[(Cr.UPLOAD = 1)] = "UPLOAD"),
    (Cr[(Cr.PIXELS = 2)] = "PIXELS"),
    (Cr[(Cr.DOWNLOAD = 3)] = "DOWNLOAD"),
    ((Er = br || (br = {}))[(Er.UNPACKED_FLOAT16 = 0)] = "UNPACKED_FLOAT16"),
    (Er[(Er.UNPACKED_FLOAT32 = 1)] = "UNPACKED_FLOAT32"),
    (Er[(Er.PACKED_4X1_UNSIGNED_BYTE = 2)] = "PACKED_4X1_UNSIGNED_BYTE"),
    (Er[(Er.PACKED_2X2_FLOAT32 = 3)] = "PACKED_2X2_FLOAT32"),
    (Er[(Er.PACKED_2X2_FLOAT16 = 4)] = "PACKED_2X2_FLOAT16");
  function Dr(t) {
    return !!(
      Zt.get("WEBGL_RENDER_FLOAT32_ENABLED") ||
      0 === t ||
      (5.96e-8 < Math.abs(t) && Math.abs(t) < 65504)
    );
  }
  function Mr(t, e) {
    switch (e) {
      case t.NO_ERROR:
        return "NO_ERROR";
      case t.INVALID_ENUM:
        return "INVALID_ENUM";
      case t.INVALID_VALUE:
        return "INVALID_VALUE";
      case t.INVALID_OPERATION:
        return "INVALID_OPERATION";
      case t.INVALID_FRAMEBUFFER_OPERATION:
        return "INVALID_FRAMEBUFFER_OPERATION";
      case t.OUT_OF_MEMORY:
        return "OUT_OF_MEMORY";
      case t.CONTEXT_LOST_WEBGL:
        return "CONTEXT_LOST_WEBGL";
      default:
        return "Unknown error code " + e;
    }
  }
  function Or(t, e, n) {
    return no(
      t,
      e,
      function () {
        return t.getExtension(n);
      },
      'Extension "' + n + '" not supported on this browser.'
    );
  }
  function Pr(t, e, n) {
    var r = no(
      t,
      e,
      function () {
        return t.createShader(t.VERTEX_SHADER);
      },
      "Unable to create vertex WebGLShader."
    );
    if (
      (Ar(t, e, function () {
        return t.shaderSource(r, n);
      }),
      Ar(t, e, function () {
        return t.compileShader(r);
      }),
      !1 === t.getShaderParameter(r, t.COMPILE_STATUS))
    )
      throw (
        (console.log(t.getShaderInfoLog(r)),
        new Error("Failed to compile vertex shader."))
      );
    return r;
  }
  function Fr(t, e, n) {
    var r = no(
      t,
      e,
      function () {
        return t.createShader(t.FRAGMENT_SHADER);
      },
      "Unable to create fragment WebGLShader."
    );
    if (
      (Ar(t, e, function () {
        return t.shaderSource(r, n);
      }),
      Ar(t, e, function () {
        return t.compileShader(r);
      }),
      !1 === t.getShaderParameter(r, t.COMPILE_STATUS))
    )
      throw (
        ((function (t, e) {
          var n = Lr.exec(e);
          if (null == n)
            return (
              console.log("Couldn't parse line number in error: " + e),
              console.log(t)
            );
          for (
            var r = +n[1],
              o = t.split("\n"),
              i = o.length.toString().length + 2,
              a = o.map(function (t, e) {
                return C((e + 1).toString(), i) + t;
              }),
              s = 0,
              u = 0;
            u < a.length;
            u++
          )
            s = Math.max(a[u].length, s);
          var c = a.slice(0, r - 1),
            l = a.slice(r - 1, r),
            h = a.slice(r);
          console.log(c.join("\n")),
            console.log(e.split("\n")[0]),
            console.log(
              "%c " + C(l[0], s),
              "border:1px solid red; background-color:#e3d2d2; color:#a61717"
            ),
            console.log(h.join("\n"));
        })(n, t.getShaderInfoLog(r)),
        new Error("Failed to compile fragment shader."))
      );
    return r;
  }
  var Lr = /ERROR: [0-9]+:([0-9]+):/g;
  function Br(t, e) {
    return no(
      t,
      e,
      function () {
        return t.createProgram();
      },
      "Unable to create WebGLProgram."
    );
  }
  function Wr(t, e, n) {
    if (
      (Ar(t, e, function () {
        return t.linkProgram(n);
      }),
      !1 === t.getProgramParameter(n, t.LINK_STATUS))
    )
      throw (
        (console.log(t.getProgramInfoLog(n)),
        new Error("Failed to link vertex and fragment shaders."))
      );
  }
  function zr(t, e, n) {
    if (
      (Ar(t, e, function () {
        return t.validateProgram(n);
      }),
      !1 === t.getProgramParameter(n, t.VALIDATE_STATUS))
    )
      throw (
        (console.log(t.getProgramInfoLog(n)),
        new Error("Shader program validation failed."))
      );
  }
  function Ur(t, e, n) {
    var r = no(
      t,
      e,
      function () {
        return t.createBuffer();
      },
      "Unable to create WebGLBuffer"
    );
    return (
      Ar(t, e, function () {
        return t.bindBuffer(t.ARRAY_BUFFER, r);
      }),
      Ar(t, e, function () {
        return t.bufferData(t.ARRAY_BUFFER, n, t.STATIC_DRAW);
      }),
      r
    );
  }
  function Gr(t, e, n) {
    var r = no(
      t,
      e,
      function () {
        return t.createBuffer();
      },
      "Unable to create WebGLBuffer"
    );
    return (
      Ar(t, e, function () {
        return t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, r);
      }),
      Ar(t, e, function () {
        return t.bufferData(t.ELEMENT_ARRAY_BUFFER, n, t.STATIC_DRAW);
      }),
      r
    );
  }
  function Vr() {
    return 2 === Zt.get("WEBGL_VERSION") ? 1 : 4;
  }
  function Hr(t, e) {
    return no(
      t,
      e,
      function () {
        return t.createTexture();
      },
      "Unable to create WebGLTexture."
    );
  }
  function qr(t, e) {
    var n = Zt.get("WEBGL_MAX_TEXTURE_SIZE");
    if (t <= 0 || e <= 0) {
      var r = "[" + t + "x" + e + "]";
      throw new Error("Requested texture size " + r + " is invalid.");
    }
    if (n < t || n < e)
      throw (
        ((r = "[" + t + "x" + e + "]"),
        new Error(
          "Requested texture size " +
            r +
            " greater than WebGL maximum on this browser / GPU [" +
            n +
            "x" +
            n +
            "]."
        ))
      );
  }
  function jr(t, e) {
    return no(
      t,
      e,
      function () {
        return t.createFramebuffer();
      },
      "Unable to create WebGLFramebuffer."
    );
  }
  function $r(t, e, n, r, o, i, a, s) {
    var u = t.getAttribLocation(n, r);
    return (
      -1 !== u &&
      (Ar(t, e, function () {
        return t.bindBuffer(t.ARRAY_BUFFER, o);
      }),
      Ar(t, e, function () {
        return t.vertexAttribPointer(u, i, t.FLOAT, !1, a, s);
      }),
      Ar(t, e, function () {
        return t.enableVertexAttribArray(u);
      }),
      !0)
    );
  }
  function Kr(t, e, n, r) {
    ro(t, r),
      Ar(t, e, function () {
        return t.activeTexture(t.TEXTURE0 + r);
      }),
      Ar(t, e, function () {
        return t.bindTexture(t.TEXTURE_2D, n);
      });
  }
  function Xr(t, e, n, r) {
    return no(
      t,
      e,
      function () {
        return t.getUniformLocation(n, r);
      },
      'uniform "' + r + '" not present in program.'
    );
  }
  function Yr(t, e, n) {
    return t.getUniformLocation(e, n);
  }
  function Qr(t, e, n, r, o, i) {
    Ar(t, e, function () {
      return Kr(t, e, r, i);
    }),
      Ar(t, e, function () {
        return t.uniform1i(o, i);
      });
  }
  function Jr(t, e, n, r) {
    Ar(t, e, function () {
      return t.bindFramebuffer(t.FRAMEBUFFER, r);
    }),
      Ar(t, e, function () {
        return t.framebufferTexture2D(
          t.FRAMEBUFFER,
          t.COLOR_ATTACHMENT0,
          t.TEXTURE_2D,
          n,
          0
        );
      });
  }
  function Zr(t, e, n) {
    Ar(t, e, function () {
      return t.bindFramebuffer(t.FRAMEBUFFER, n);
    }),
      Ar(t, e, function () {
        return t.framebufferTexture2D(
          t.FRAMEBUFFER,
          t.COLOR_ATTACHMENT0,
          t.TEXTURE_2D,
          null,
          0
        );
      });
  }
  function to(t) {
    var e = t.checkFramebufferStatus(t.FRAMEBUFFER);
    if (e !== t.FRAMEBUFFER_COMPLETE)
      throw new Error("Error binding framebuffer: " + eo(t, e));
  }
  function eo(t, e) {
    switch (e) {
      case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
        return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT";
      case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
        return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";
      case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
        return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS";
      case t.FRAMEBUFFER_UNSUPPORTED:
        return "FRAMEBUFFER_UNSUPPORTED";
      default:
        return "unknown error " + e;
    }
  }
  function no(t, e, n, r) {
    var o = Ar(t, e, function () {
      return n();
    });
    if (null == o) throw new Error(r);
    return o;
  }
  function ro(t, e) {
    var n = t.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1,
      r = e + t.TEXTURE0;
    if (r < t.TEXTURE0 || n < r)
      throw new Error(
        "textureUnit must be in [gl.TEXTURE0, gl.TEXTURE" + n + "]."
      );
  }
  function oo(t, e) {
    return void 0 === e && (e = 2), B(t.slice(0, t.length - e));
  }
  function io(t) {
    if (0 === t.length)
      throw Error("Cannot get rows and columns of an empty shape array.");
    return [1 < t.length ? t[t.length - 2] : 1, t[t.length - 1]];
  }
  function ao(n, t) {
    var e;
    void 0 === t && (t = !1);
    var r = Zt.get("WEBGL_MAX_TEXTURE_SIZE");
    if (
      (t &&
        ((r *= 2),
        1 ===
          (n = n.map(function (t, e) {
            return e >= n.length - 2 ? _(n[e]) : n[e];
          })).length && (n = [2, n[0]])),
      2 !== n.length)
    ) {
      var o = I(n);
      n = o.newShape;
    }
    var i = B(n);
    if (n.length <= 1 && i <= r) return [1, i];
    if (2 === n.length && n[0] <= r && n[1] <= r) return n;
    if (3 === n.length && n[0] * n[1] <= r && n[2] <= r)
      return [n[0] * n[1], n[2]];
    if (3 === n.length && n[0] <= r && n[1] * n[2] <= r)
      return [n[0], n[1] * n[2]];
    if (4 === n.length && n[0] * n[1] * n[2] <= r && n[3] <= r)
      return [n[0] * n[1] * n[2], n[3]];
    if (4 === n.length && n[0] <= r && n[1] * n[2] * n[3] <= r)
      return [n[0], n[1] * n[2] * n[3]];
    if (t) {
      var a = oo(n),
        s = 2,
        u = 2;
      return (
        n.length && ((s = (e = io(n))[0]), (u = e[1])),
        b((i = a * (s / 2) * (u / 2))).map(function (t) {
          return 2 * t;
        })
      );
    }
    return b(i);
  }
  function so(t) {
    return t % 2 == 0;
  }
  function uo(t, e) {
    if (E((t = t.slice(-2)), (e = e.slice(-2)))) return !0;
    if (!t.length || !e.length) return !0;
    if (0 === t[0] || 0 === t[1] || 0 === e[0] || 0 === e[1]) return !0;
    if (t.length !== e.length) {
      var n = t.slice(-1)[0],
        r = e.slice(-1)[0];
      if (n === r) return !0;
      if (so(n) && so(r) && (1 === t[0] || 1 === e[0])) return !0;
    }
    return t[1] === e[1] && so(t[0]) && so(e[0]);
  }
  var co = Object.freeze({
    callAndCheck: Ar,
    canBeRepresented: Dr,
    getWebGLErrorMessage: Mr,
    getExtensionOrThrow: Or,
    createVertexShader: Pr,
    createFragmentShader: Fr,
    createProgram: Br,
    linkProgram: Wr,
    validateProgram: zr,
    createStaticVertexBuffer: Ur,
    createStaticIndexBuffer: Gr,
    getNumChannels: Vr,
    createTexture: Hr,
    validateTextureSize: qr,
    createFramebuffer: jr,
    bindVertexBufferToProgramAttribute: $r,
    bindTextureUnit: Kr,
    unbindTextureUnit: function (t, e, n) {
      ro(t, n),
        Ar(t, e, function () {
          return t.activeTexture(t.TEXTURE0 + n);
        }),
        Ar(t, e, function () {
          return t.bindTexture(t.TEXTURE_2D, null);
        });
    },
    getProgramUniformLocationOrThrow: Xr,
    getProgramUniformLocation: Yr,
    bindTextureToProgramUniformSampler: Qr,
    bindCanvasToFramebuffer: function (t, e) {
      Ar(t, e, function () {
        return t.bindFramebuffer(t.FRAMEBUFFER, null);
      }),
        Ar(t, e, function () {
          return t.viewport(0, 0, t.canvas.width, t.canvas.height);
        }),
        Ar(t, e, function () {
          return t.scissor(0, 0, t.canvas.width, t.canvas.height);
        });
    },
    bindColorTextureToFramebuffer: Jr,
    unbindColorTextureFromFramebuffer: Zr,
    validateFramebuffer: to,
    getFramebufferErrorMessage: eo,
    getBatchDim: oo,
    getRowsCols: io,
    getTextureShapeFromLogicalShape: ao,
    isReshapeFree: uo,
  });
  function lo(t, e) {
    var n = wn();
    return Pr(
      t,
      e,
      n.version +
        "\n    precision highp float;\n    " +
        n.attribute +
        " vec3 clipSpacePos;\n    " +
        n.attribute +
        " vec2 uv;\n    " +
        n.varyingVs +
        " vec2 resultUV;\n\n    void main() {\n      gl_Position = vec4(clipSpacePos, 1);\n      resultUV = uv;\n    }"
    );
  }
  function ho(t, e) {
    return Ur(
      t,
      e,
      new Float32Array([
        -1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0,
      ])
    );
  }
  function po(t, e) {
    return Gr(t, e, new Uint16Array([0, 1, 2, 2, 1, 3]));
  }
  function fo(t, e) {
    var n,
      r,
      o,
      i,
      a,
      s,
      u,
      c,
      l = t;
    return (
      (c =
        2 === Zt.get("WEBGL_VERSION")
          ? ((n = l.R32F),
            (r = l.R16F),
            (o = l.RGBA16F),
            (i = l.RGBA32F),
            (a = l.RED),
            (s = 4),
            (u = 1),
            l.HALF_FLOAT)
          : ((n = t.RGBA),
            (r = t.RGBA),
            (o = t.RGBA),
            (i = l.RGBA),
            (a = t.RGBA),
            (u = s = 4),
            null != e ? e.HALF_FLOAT_OES : null)),
      {
        internalFormatFloat: n,
        internalFormatHalfFloat: r,
        internalFormatPackedHalfFloat: o,
        internalFormatPackedFloat: i,
        textureFormatFloat: a,
        downloadTextureFormat: t.RGBA,
        downloadUnpackNumChannels: s,
        defaultNumChannels: u,
        textureTypeHalfFloat: c,
      }
    );
  }
  function vo(t, e, n, r, o, i, a) {
    qr(n, r);
    var s = Hr(t, e),
      u = t.TEXTURE_2D;
    return (
      Ar(t, e, function () {
        return t.bindTexture(u, s);
      }),
      Ar(t, e, function () {
        return t.texParameteri(u, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE);
      }),
      Ar(t, e, function () {
        return t.texParameteri(u, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE);
      }),
      Ar(t, e, function () {
        return t.texParameteri(u, t.TEXTURE_MIN_FILTER, t.NEAREST);
      }),
      Ar(t, e, function () {
        return t.texParameteri(u, t.TEXTURE_MAG_FILTER, t.NEAREST);
      }),
      Ar(t, e, function () {
        return t.texImage2D(u, 0, o, n, r, 0, i, a, null);
      }),
      Ar(t, e, function () {
        return t.bindTexture(t.TEXTURE_2D, null);
      }),
      s
    );
  }
  function mo(t, e, n, r, o) {
    var i = Sr(n, r);
    return vo(
      t,
      e,
      i[0],
      i[1],
      o.internalFormatFloat,
      o.textureFormatFloat,
      t.FLOAT
    );
  }
  function go(t, e, n, r, o) {
    var i = Sr(n, r);
    return vo(
      t,
      e,
      i[0],
      i[1],
      o.internalFormatHalfFloat,
      o.textureFormatFloat,
      o.textureTypeHalfFloat
    );
  }
  function yo(t, e, n, r, o) {
    var i = Sr(n, r);
    return vo(t, e, i[0], i[1], t.RGBA, t.RGBA, t.UNSIGNED_BYTE);
  }
  function xo(t, e, n, r, o) {
    var i = kr(n, r);
    return vo(t, e, i[0], i[1], o.internalFormatPackedFloat, t.RGBA, t.FLOAT);
  }
  function wo(t, e, n, r, o) {
    var i = kr(n, r);
    return vo(
      t,
      e,
      i[0],
      i[1],
      o.internalFormatPackedHalfFloat,
      t.RGBA,
      o.textureTypeHalfFloat
    );
  }
  function bo(t, e, n, r) {
    return (
      Ar(t, e, function () {
        return t.bindBuffer(t.ARRAY_BUFFER, r);
      }),
      $r(t, e, n, "clipSpacePos", r, 3, 20, 0) &&
        $r(t, e, n, "uv", r, 2, 20, 12)
    );
  }
  function Eo(t, e, n, r) {
    Ar(t, e, function () {
      return t.bindTexture(t.TEXTURE_2D, n);
    }),
      Ar(t, e, function () {
        return t.texImage2D(
          t.TEXTURE_2D,
          0,
          t.RGBA,
          t.RGBA,
          t.UNSIGNED_BYTE,
          r
        );
      }),
      Ar(t, e, function () {
        return t.bindTexture(t.TEXTURE_2D, null);
      });
  }
  function Co(t, e, n, r, o, i, a) {
    qr(r, o),
      Ar(t, e, function () {
        return t.bindTexture(t.TEXTURE_2D, n);
      }),
      Ar(t, e, function () {
        return t.texSubImage2D(t.TEXTURE_2D, 0, 0, 0, r, o, a, t.FLOAT, i);
      }),
      Ar(t, e, function () {
        return t.bindTexture(t.TEXTURE_2D, null);
      });
  }
  function _o(t, e, n, r, o, i, a, s) {
    var u,
      c = Sr(r, o),
      l = c[0],
      h = c[1],
      p = r * o;
    1 === s.defaultNumChannels && p === i.length
      ? (u = i)
      : (function (t, e, n) {
          var r = Rr(t.length, n);
          if (e.length < r)
            throw new Error(
              "unpackedArray length (" + e.length + ") must be >= " + r
            );
          for (var o = 0, i = 0; i < t.length; ++i) (e[o] = t[i]), (o += n);
        })(i, (u = new Float32Array(p * a)), a),
      Co(t, e, n, l, h, u, s.textureFormatFloat);
  }
  function So(t, e, n, r, o, i, a, s, u, c) {
    var l = kr(a, s),
      h = l[0],
      p = l[1],
      f = new Float32Array(Ir(a, s));
    (function (t, e, n, r, o) {
      for (
        var i = r % 2 == 1,
          a = n % 2 == 1,
          s = Math.floor(r / 2),
          u = Math.floor(n / 2),
          c = Math.ceil(r / 2),
          l = c * Math.ceil(n / 2),
          h = _(n) * _(r),
          p = 0;
        p < e;
        p++
      ) {
        for (
          var f = p * n * r, d = p * h, v = i ? 4 : 0, m = r, g = d, y = 0;
          y < u;
          ++y
        ) {
          for (var x = 2 * y * r, w = 0; w < s; ++w) {
            var b = f + x + 2 * w;
            (o[g] = t[b]),
              (o[g + 1] = t[b + 1]),
              (o[g + 2] = t[b + m]),
              (o[g + 3] = t[b + m + 1]),
              (g += 4);
          }
          g += v;
        }
        if (i) {
          (b = f + r - 1), (g = d + 4 * (c - 1));
          var E = 2 * r;
          for (v = 4 * c, y = 0; y < u; ++y)
            (o[g] = t[b]), (o[g + 2] = t[b + r]), (b += E), (g += v);
        }
        if (a) {
          for (b = f + (n - 1) * r, g = d + 4 * (l - c), w = 0; w < s; ++w)
            (o[g++] = t[b++]), (o[g++] = t[b++]), (g += 2);
          i && a && (o[d + h - 4] = t[b]);
        }
      }
    })(u, r, o, i, f),
      Co(t, e, n, h, p, f, t.RGBA);
  }
  function Ro(t, e, n, r, o, i) {
    var a = n;
    if (2 === Zt.get("WEBGL_VERSION")) {
      var s = t,
        u = s.createBuffer();
      Ar(t, e, function () {
        return t.bindBuffer(s.PIXEL_PACK_BUFFER, u);
      });
      var c = 4 * Rr(r * o, i.downloadUnpackNumChannels);
      Ar(t, e, function () {
        return t.bufferData(s.PIXEL_PACK_BUFFER, c, s.STREAM_READ);
      }),
        Ar(t, e, function () {
          return s.readPixels(0, 0, o, r, t.RGBA, t.FLOAT, 0);
        }),
        Ar(t, e, function () {
          return t.bindBuffer(s.PIXEL_PACK_BUFFER, null);
        }),
        (a = u);
    }
    return a;
  }
  function No(t, e, n, r, o) {
    var i = t,
      a = new Float32Array(Rr(n * r, o.downloadUnpackNumChannels));
    i.bindBuffer(i.PIXEL_PACK_BUFFER, e),
      i.getBufferSubData(i.PIXEL_PACK_BUFFER, 0, a),
      i.bindBuffer(i.PIXEL_PACK_BUFFER, null);
    var s = new Float32Array(n * r);
    return Nr(a, s, o.downloadUnpackNumChannels), s;
  }
  function ko(t, e, n, r, o) {
    var i = Sr(n, r),
      a = i[0],
      s = i[1],
      u = new Float32Array(Rr(n * r, o.downloadUnpackNumChannels));
    Ar(t, e, function () {
      return t.readPixels(0, 0, a, s, o.downloadTextureFormat, t.FLOAT, u);
    });
    var c = new Float32Array(n * r);
    return Nr(u, c, o.downloadUnpackNumChannels), c;
  }
  function Io(t, e, n, r, o) {
    var i = Sr(n, r),
      a = i[0],
      s = i[1],
      u = new Uint8Array(Rr(n * r, 4));
    return (
      Ar(t, e, function () {
        return t.readPixels(
          0,
          0,
          a,
          s,
          o.downloadTextureFormat,
          t.UNSIGNED_BYTE,
          u
        );
      }),
      new Float32Array(u.buffer)
    );
  }
  function To(t, e, n, r, o, i, a, s) {
    var u = t,
      c = new Float32Array(Ir(i, a));
    u.bindBuffer(u.PIXEL_PACK_BUFFER, e),
      u.getBufferSubData(u.PIXEL_PACK_BUFFER, 0, c),
      u.bindBuffer(u.PIXEL_PACK_BUFFER, null);
    var l = new Float32Array(B([n, r, o]));
    return Tr(c, n, r, o, l), l;
  }
  function Ao(t, e, n, r, o, i, a, s) {
    var u = kr(i, a),
      c = u[0],
      l = u[1],
      h = new Float32Array(Ir(i, a));
    Ar(t, e, function () {
      return t.readPixels(0, 0, c, l, t.RGBA, t.FLOAT, h);
    });
    var p = new Float32Array(B([n, r, o]));
    return Tr(h, n, r, o, p);
  }
  var Do = Object.freeze({
      createVertexShader: lo,
      createVertexBuffer: ho,
      createIndexBuffer: po,
      getTextureConfig: fo,
      createFloat32MatrixTexture: mo,
      createFloat16MatrixTexture: go,
      createUnsignedBytesMatrixTexture: yo,
      createPackedMatrixTexture: xo,
      createFloat16PackedMatrixTexture: wo,
      bindVertexProgramAttributeStreams: bo,
      uploadPixelDataToTexture: Eo,
      uploadMatrixToTexture: _o,
      uploadMatrixToPackedTexture: So,
      maybeCreateBufferFromOutputTexture: Ro,
      downloadFloat32MatrixFromBuffer: No,
      downloadFloat32MatrixFromOutputTexture: ko,
      downloadByteEncodedFloatMatrixFromOutputTexture: Io,
      downloadPackedMatrixFromBuffer: To,
      downloadMatrixFromPackedOutputTexture: Ao,
    }),
    Mo = (function () {
      function t(t) {
        (this.outputTexture = null),
          (this.program = null),
          (this.disposed = !1),
          (this.vertexAttrsAreBound = !1),
          (this.itemsToPoll = []);
        var e,
          n = Zt.get("WEBGL_VERSION");
        null != t ? ((this.gl = t), (e = t), (i[n] = e)) : (this.gl = l(n)),
          1 === Zt.get("WEBGL_VERSION")
            ? ((this.textureFloatExtension = Or(
                this.gl,
                this.debug,
                "OES_texture_float"
              )),
              (this.colorBufferFloatExtension = this.gl.getExtension(
                "WEBGL_color_buffer_float"
              )),
              Zt.get("WEBGL_RENDER_FLOAT32_ENABLED") ||
                ((this.textureHalfFloatExtension = Or(
                  this.gl,
                  this.debug,
                  "OES_texture_half_float"
                )),
                (this.colorBufferHalfFloatExtension = this.gl.getExtension(
                  "EXT_color_buffer_half_float"
                ))))
            : (this.colorBufferFloatExtension = Or(
                this.gl,
                this.debug,
                "EXT_color_buffer_float"
              )),
          (this.vertexBuffer = ho(this.gl, this.debug)),
          (this.indexBuffer = po(this.gl, this.debug)),
          (this.framebuffer = jr(this.gl, this.debug)),
          (this.textureConfig = fo(this.gl, this.textureHalfFloatExtension));
      }
      return (
        Object.defineProperty(t.prototype, "debug", {
          get: function () {
            return Zt.get("DEBUG");
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.dispose = function () {
          var t = this;
          if (!this.disposed) {
            null != this.program &&
              console.warn(
                "Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."
              ),
              null != this.outputTexture &&
                console.warn(
                  "Disposing a GPGPUContext that still has a bound output matrix texture.  This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing."
                );
            var e = this.gl;
            Ar(e, this.debug, function () {
              return e.finish();
            }),
              Ar(e, this.debug, function () {
                return e.bindFramebuffer(e.FRAMEBUFFER, null);
              }),
              Ar(e, this.debug, function () {
                return e.deleteFramebuffer(t.framebuffer);
              }),
              Ar(e, this.debug, function () {
                return e.bindBuffer(e.ARRAY_BUFFER, null);
              }),
              Ar(e, this.debug, function () {
                return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, null);
              }),
              Ar(e, this.debug, function () {
                return e.deleteBuffer(t.indexBuffer);
              }),
              (this.disposed = !0);
          }
        }),
        (t.prototype.createFloat32MatrixTexture = function (t, e) {
          return (
            this.throwIfDisposed(),
            mo(this.gl, this.debug, t, e, this.textureConfig)
          );
        }),
        (t.prototype.createFloat16MatrixTexture = function (t, e) {
          return (
            this.throwIfDisposed(),
            go(this.gl, this.debug, t, e, this.textureConfig)
          );
        }),
        (t.prototype.createUnsignedBytesMatrixTexture = function (t, e) {
          return (
            this.throwIfDisposed(),
            yo(this.gl, this.debug, t, e, this.textureConfig)
          );
        }),
        (t.prototype.uploadPixelDataToTexture = function (t, e) {
          this.throwIfDisposed(), Eo(this.gl, this.debug, t, e);
        }),
        (t.prototype.createFloat16PackedMatrixTexture = function (t, e) {
          return (
            this.throwIfDisposed(),
            wo(this.gl, this.debug, t, e, this.textureConfig)
          );
        }),
        (t.prototype.createPackedMatrixTexture = function (t, e) {
          return (
            this.throwIfDisposed(),
            xo(this.gl, this.debug, t, e, this.textureConfig)
          );
        }),
        (t.prototype.deleteMatrixTexture = function (t) {
          var e = this;
          this.throwIfDisposed(),
            this.outputTexture === t &&
              (Zr(this.gl, this.debug, this.framebuffer),
              (this.outputTexture = null)),
            Ar(this.gl, this.debug, function () {
              return e.gl.deleteTexture(t);
            });
        }),
        (t.prototype.uploadMatrixToTexture = function (t, e, n, r) {
          this.throwIfDisposed();
          var o = Vr();
          return _o(this.gl, this.debug, t, e, n, r, o, this.textureConfig);
        }),
        (t.prototype.uploadMatrixToPackedTexture = function (
          t,
          e,
          n,
          r,
          o,
          i,
          a
        ) {
          return (
            this.throwIfDisposed(),
            So(this.gl, this.debug, t, e, n, r, o, i, a, this.textureConfig)
          );
        }),
        (t.prototype.downloadFloat32MatrixFromOutputTexture = function (
          t,
          e,
          n
        ) {
          var r = this;
          return this.downloadMatrixDriver(t, function () {
            return ko(r.gl, r.debug, e, n, r.textureConfig);
          });
        }),
        (t.prototype.downloadByteEncodedFloatMatrixFromOutputTexture =
          function (t, e, n) {
            var r = this;
            return this.downloadMatrixDriver(t, function () {
              return Io(r.gl, r.debug, e, n, r.textureConfig);
            });
          }),
        (t.prototype.downloadPackedMatrixFromBuffer = function (
          t,
          e,
          n,
          r,
          o,
          i
        ) {
          return To(this.gl, t, e, n, r, o, i, this.textureConfig);
        }),
        (t.prototype.downloadFloat32MatrixFromBuffer = function (t, e, n) {
          return No(this.gl, t, e, n, this.textureConfig);
        }),
        (t.prototype.maybeCreateBufferFromTexture = function (t, e, n) {
          this.bindTextureToFrameBuffer(t);
          var r = Ro(this.gl, this.debug, t, e, n, this.textureConfig);
          return this.unbindTextureToFrameBuffer(), r;
        }),
        (t.prototype.createAndWaitForFence = function () {
          var t = this.createFence(this.gl);
          return this.pollFence(t);
        }),
        (t.prototype.createFence = function (t) {
          var e,
            n,
            r = this;
          if (Zt.get("WEBGL_FENCE_API_ENABLED")) {
            var o = t,
              i = o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE, 0);
            t.flush(),
              (n = function () {
                var t = o.clientWaitSync(i, 0, 0);
                return t === o.ALREADY_SIGNALED || t === o.CONDITION_SATISFIED;
              }),
              (e = i);
          } else
            n =
              0 < Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
                ? ((e = this.beginQuery()),
                  this.endQuery(),
                  function () {
                    return r.isQueryAvailable(
                      e,
                      Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
                    );
                  })
                : function () {
                    return !0;
                  };
          return { query: e, isFencePassed: n };
        }),
        (t.prototype.downloadMatrixFromPackedTexture = function (
          t,
          e,
          n,
          r,
          o,
          i
        ) {
          var a = this;
          return this.downloadMatrixDriver(t, function () {
            return Ao(a.gl, a.debug, e, n, r, o, i, a.textureConfig);
          });
        }),
        (t.prototype.createProgram = function (t) {
          this.throwIfDisposed();
          var e = this.gl,
            n = Fr(e, this.debug, t),
            r = lo(e, this.debug),
            o = Br(e, this.debug);
          return (
            Ar(e, this.debug, function () {
              return e.attachShader(o, r);
            }),
            Ar(e, this.debug, function () {
              return e.attachShader(o, n);
            }),
            Wr(e, this.debug, o),
            this.debug && zr(e, this.debug, o),
            this.vertexAttrsAreBound ||
              (this.setProgram(o),
              (this.vertexAttrsAreBound = bo(
                e,
                this.debug,
                this.program,
                this.vertexBuffer
              ))),
            o
          );
        }),
        (t.prototype.deleteProgram = function (t) {
          var e = this;
          this.throwIfDisposed(),
            t === this.program && (this.program = null),
            null != t &&
              Ar(this.gl, this.debug, function () {
                return e.gl.deleteProgram(t);
              });
        }),
        (t.prototype.setProgram = function (t) {
          var e = this;
          this.throwIfDisposed(),
            (this.program = t),
            null != this.program &&
              this.debug &&
              zr(this.gl, this.debug, this.program),
            Ar(this.gl, this.debug, function () {
              return e.gl.useProgram(t);
            });
        }),
        (t.prototype.getUniformLocation = function (t, e, n) {
          return (
            void 0 === n && (n = !0),
            this.throwIfDisposed(),
            n ? Xr(this.gl, this.debug, t, e) : Yr(this.gl, t, e)
          );
        }),
        (t.prototype.getAttributeLocation = function (t, e) {
          var n = this;
          return (
            this.throwIfDisposed(),
            Ar(this.gl, this.debug, function () {
              return n.gl.getAttribLocation(t, e);
            })
          );
        }),
        (t.prototype.getUniformLocationNoThrow = function (t, e) {
          return this.throwIfDisposed(), this.gl.getUniformLocation(t, e);
        }),
        (t.prototype.setInputMatrixTexture = function (t, e, n) {
          this.throwIfDisposed(),
            this.throwIfNoProgram(),
            Qr(this.gl, this.debug, this.program, t, e, n);
        }),
        (t.prototype.setOutputMatrixTexture = function (t, e, n) {
          this.setOutputMatrixTextureDriver(t, n, e);
        }),
        (t.prototype.setOutputPackedMatrixTexture = function (t, e, n) {
          this.throwIfDisposed();
          var r = kr(e, n),
            o = r[0],
            i = r[1];
          this.setOutputMatrixTextureDriver(t, o, i);
        }),
        (t.prototype.setOutputMatrixWriteRegion = function (t, e, n, r) {
          this.setOutputMatrixWriteRegionDriver(n, t, r, e);
        }),
        (t.prototype.setOutputPackedMatrixWriteRegion = function (t, e, n, r) {
          throw new Error("setOutputPackedMatrixWriteRegion not implemented.");
        }),
        (t.prototype.debugValidate = function () {
          null != this.program && zr(this.gl, this.debug, this.program),
            to(this.gl);
        }),
        (t.prototype.executeProgram = function () {
          this.throwIfDisposed(), this.throwIfNoProgram();
          var t = this.gl;
          this.debug && this.debugValidate(),
            Ar(t, this.debug, function () {
              return t.drawElements(t.TRIANGLES, 6, t.UNSIGNED_SHORT, 0);
            });
        }),
        (t.prototype.blockUntilAllProgramsCompleted = function () {
          var t = this;
          this.throwIfDisposed(),
            Ar(this.gl, this.debug, function () {
              return t.gl.finish();
            });
        }),
        (t.prototype.getQueryTimerExtension = function () {
          return (
            null == this.disjointQueryTimerExtension &&
              (this.disjointQueryTimerExtension = Or(
                this.gl,
                this.debug,
                2 === Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
                  ? "EXT_disjoint_timer_query_webgl2"
                  : "EXT_disjoint_timer_query"
              )),
            this.disjointQueryTimerExtension
          );
        }),
        (t.prototype.getQueryTimerExtensionWebGL2 = function () {
          return this.getQueryTimerExtension();
        }),
        (t.prototype.getQueryTimerExtensionWebGL1 = function () {
          return this.getQueryTimerExtension();
        }),
        (t.prototype.beginQuery = function () {
          if (2 === Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")) {
            var t = this.gl,
              e = this.getQueryTimerExtensionWebGL2(),
              n = t.createQuery();
            return t.beginQuery(e.TIME_ELAPSED_EXT, n), n;
          }
          var r = this.getQueryTimerExtensionWebGL1(),
            o = r.createQueryEXT();
          return r.beginQueryEXT(r.TIME_ELAPSED_EXT, o), o;
        }),
        (t.prototype.endQuery = function () {
          if (2 !== Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")) {
            var t = this.getQueryTimerExtensionWebGL1();
            t.endQueryEXT(t.TIME_ELAPSED_EXT);
          } else {
            var e = this.gl,
              n = this.getQueryTimerExtensionWebGL2();
            e.endQuery(n.TIME_ELAPSED_EXT);
          }
        }),
        (t.prototype.waitForQueryAndGetTime = function (n) {
          return m(this, void 0, void 0, function () {
            var e = this;
            return R(this, function (t) {
              switch (t.label) {
                case 0:
                  return [
                    4,
                    S(function () {
                      return (
                        e.disposed ||
                        e.isQueryAvailable(
                          n,
                          Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
                        )
                      );
                    }),
                  ];
                case 1:
                  return (
                    t.sent(),
                    [
                      2,
                      this.getQueryTime(
                        n,
                        Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
                      ),
                    ]
                  );
              }
            });
          });
        }),
        (t.prototype.getQueryTime = function (t, e) {
          if (0 === e) return null;
          if (2 === e) {
            var n = this.gl;
            return n.getQueryParameter(t, n.QUERY_RESULT) / 1e6;
          }
          var r = this.getQueryTimerExtensionWebGL1();
          return r.getQueryObjectEXT(t, r.QUERY_RESULT_EXT) / 1e6;
        }),
        (t.prototype.isQueryAvailable = function (t, e) {
          if (0 === e) return !0;
          if (2 !== e)
            return (
              (o = (r = this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(
                t,
                r.QUERY_RESULT_AVAILABLE_EXT
              )),
              null == this.disjoint &&
                (this.disjoint = this.gl.getParameter(r.GPU_DISJOINT_EXT)),
              o && !this.disjoint
            );
          var n = this.gl,
            r = this.getQueryTimerExtensionWebGL2(),
            o = n.getQueryParameter(t, n.QUERY_RESULT_AVAILABLE);
          return (
            null == this.disjoint &&
              (this.disjoint = this.gl.getParameter(r.GPU_DISJOINT_EXT)),
            o && !this.disjoint
          );
        }),
        (t.prototype.pollFence = function (e) {
          var n = this;
          return new Promise(function (t) {
            n.addItemToPoll(
              function () {
                return e.isFencePassed();
              },
              function () {
                return t();
              }
            );
          });
        }),
        (t.prototype.pollItems = function () {
          for (
            var t = (function (t) {
                for (var e = 0; e < t.length && t[e](); ++e);
                return e - 1;
              })(
                this.itemsToPoll.map(function (t) {
                  return t.isDoneFn;
                })
              ),
              e = 0;
            e <= t;
            ++e
          )
            (0, this.itemsToPoll[e].resolveFn)();
          this.itemsToPoll = this.itemsToPoll.slice(t + 1);
        }),
        (t.prototype.addItemToPoll = function (t, e) {
          var n = this;
          this.itemsToPoll.push({ isDoneFn: t, resolveFn: e }),
            1 < this.itemsToPoll.length ||
              S(function () {
                return n.pollItems(), 0 === n.itemsToPoll.length;
              });
        }),
        (t.prototype.bindTextureToFrameBuffer = function (t) {
          this.throwIfDisposed(),
            Jr(this.gl, this.debug, t, this.framebuffer),
            this.debug && to(this.gl);
        }),
        (t.prototype.unbindTextureToFrameBuffer = function () {
          null != this.outputTexture
            ? (Jr(this.gl, this.debug, this.outputTexture, this.framebuffer),
              this.debug && to(this.gl))
            : Zr(this.gl, this.debug, this.framebuffer);
        }),
        (t.prototype.downloadMatrixDriver = function (t, e) {
          this.bindTextureToFrameBuffer(t);
          var n = e();
          return this.unbindTextureToFrameBuffer(), n;
        }),
        (t.prototype.setOutputMatrixTextureDriver = function (t, e, n) {
          this.throwIfDisposed();
          var r = this.gl;
          Jr(r, this.debug, t, this.framebuffer),
            this.debug && to(r),
            (this.outputTexture = t),
            Ar(r, this.debug, function () {
              return r.viewport(0, 0, e, n);
            }),
            Ar(r, this.debug, function () {
              return r.scissor(0, 0, e, n);
            });
        }),
        (t.prototype.setOutputMatrixWriteRegionDriver = function (t, e, n, r) {
          var o = this;
          this.throwIfDisposed(),
            Ar(this.gl, this.debug, function () {
              return o.gl.scissor(t, e, n, r);
            });
        }),
        (t.prototype.throwIfDisposed = function () {
          if (this.disposed)
            throw new Error("Attempted to use disposed GPGPUContext.");
        }),
        (t.prototype.throwIfNoProgram = function () {
          if (null == this.program)
            throw new Error("No GPU program is currently set.");
        }),
        t
      );
    })();
  function Oo(t, s) {
    if (t.length !== s.length)
      throw Error(
        "Binary was compiled with " +
          t.length +
          " inputs, but was executed with " +
          s.length +
          " inputs"
      );
    t.forEach(function (t, e) {
      var n = t.logicalShape,
        r = s[e],
        o = r.shape;
      if (!E(n, o))
        throw Error(
          "Binary was compiled with different shapes than the current args. Shapes " +
            n +
            " and " +
            o +
            " must match"
        );
      if (!t.isUniform || !r.isUniform) {
        var i = t.texShape,
          a = r.isUniform ? null : r.texData.texShape;
        if (!E(i, a))
          throw Error(
            "Binary was compiled with different texture shapes than the current args. Shape " +
              i +
              " and " +
              a +
              " must match"
          );
      }
    });
  }
  var Po = function (t, e, n) {
      (this.variableNames = ["A"]),
        (this.usesPackedTextures = !0),
        (this.outputShape = t);
      var r = n.filterWidth,
        o = n.inChannels,
        i = n.strideWidth,
        a = n.strideHeight,
        s = n.padInfo,
        u = n.outWidth,
        c = n.dilationWidth,
        l = n.dilationHeight,
        h = s.left,
        p = s.top,
        f = o * r,
        d = wn();
      this.userCode =
        "\n      void main() {\n        ivec2 rc = getOutputCoords();\n\n        vec4 result = vec4(0);\n\n        for(int row=0; row<=1; row++) {\n          for(int col=0; col<=1; col++) {\n            int blockIndex = rc.y + col;\n            int pos = rc.x + row;\n\n            if(blockIndex >= " +
        t[1] +
        " || pos >= " +
        t[0] +
        ") continue;\n\n            int offsetY = int(blockIndex / (" +
        u +
        ")) * " +
        a +
        " - " +
        p +
        ";\n            int d0 = offsetY + " +
        l +
        " * (pos / " +
        f +
        ");\n\n            if(d0 >= " +
        e[0] +
        " || d0 < 0) continue;\n\n            int offsetX = int(mod(float(blockIndex), " +
        u +
        ".) * " +
        i +
        ". - " +
        h +
        ".);\n            int d1 = offsetX + " +
        c +
        " * (int(mod(float(pos), " +
        f +
        ".) / " +
        o +
        ".));\n\n            if(d1 >= " +
        e[1] +
        " || d1 < 0) continue;\n\n            vec2 innerDims = vec2(d1, int(mod(float(pos), " +
        o +
        ".)));\n            result[row * 2 + col] = getChannel(getA(d0, int(innerDims.x),\n                                              int(innerDims.y)), innerDims);\n          }\n        }\n\n        " +
        d.output +
        " = result;\n      }\n    ";
    },
    Fo = function (t, e, n, r, o) {
      (this.variableNames = ["x"]), (this.outputShape = []);
      var i,
        a = e,
        s = t[3] - 1;
      this.outputShape = t;
      var u = "float(" + n + ") + float(" + r + ") * sum";
      (i =
        0.5 === o
          ? "inversesqrt(" + u + ")"
          : 1 === o
          ? "1.0/(" + u + ")"
          : "exp(log(" + u + ") * float(-" + o + "));"),
        (this.userCode =
          "\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n        int d = coords[3];\n        float x = getX(b, r, c, d);\n        float sum = 0.0;\n        for (int j = -" +
          a +
          "; j <= " +
          a +
          "; j++) {\n          int idx = d + j;\n          if (idx >= 0 && idx <=  " +
          s +
          ") {\n            float z = getX(b, r, c, idx);\n            sum += z * z;\n          }\n        }\n        float val = x * " +
          i +
          ";\n        setOutput(val);\n      }\n    ");
    },
    Lo = function (t, e, n, r, o) {
      (this.variableNames = ["inputImage", "outputImage", "dy"]),
        (this.outputShape = []),
        (this.outputShape = t),
        (this.depth = t[3]),
        (this.depthRadius = e),
        (this.bias = n),
        (this.alpha = r),
        (this.beta = o),
        (this.userCode =
          "\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n\n        float result = 0.0;\n        for (int d = 0; d < " +
          this.depth +
          "; ++d) {\n          int depthBegin = int(max(0.0, float(d - " +
          e +
          ")));\n          int depthEnd = int(min(float(" +
          this.depth +
          "),\n              float(d + " +
          e +
          " + 1)));\n\n          const int MIN_DEPTH_BEGIN = 0;\n          const int MAX_DEPTH_END = " +
          this.depth +
          ";\n\n          float norm = 0.0;\n          for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd) {\n              norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n            }\n            else {\n              break;\n            }\n          }\n\n          norm = float(" +
          r +
          ") * norm + float(" +
          n +
          ");\n\n          for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd){\n              float dyi = -2.0 * float(" +
          r +
          ")\n                * float(" +
          o +
          ")\n                * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n                / norm;\n              if (k == d) {\n                dyi += pow(norm, -1.0 * " +
          o +
          ");\n              }\n              if (k == coords[3]) {\n                dyi *= getDy(b, r, c, d);\n                result += dyi;\n              }\n            }\n            else {\n              break;\n            }\n          }\n      }\n      setOutput(result);\n      }\n    ");
    },
    Bo = function (t) {
      (this.variableNames = ["dy", "maxPos"]), (this.outputShape = t.inShape);
      var e = t.strideHeight,
        n = t.strideWidth,
        r = t.dilationHeight,
        o = t.effectiveFilterHeight,
        i = t.effectiveFilterWidth,
        a = o - 1 - t.padInfo.top,
        s = i - 1 - t.padInfo.left,
        u = o * i - 1;
      this.userCode =
        "\n      const ivec2 pads = ivec2(" +
        a +
        ", " +
        s +
        ");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < " +
        o +
        ";\n          wR += " +
        r +
        ") {\n          float dyR = float(dyRCorner + wR) / " +
        e +
        ".0;\n\n          if (dyR < 0.0 || dyR >= " +
        t.outHeight +
        ".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < " +
        i +
        "; wC++) {\n            float dyC = float(dyCCorner + wC) / " +
        n +
        ".0;\n\n            if (dyC < 0.0 || dyC >= " +
        t.outWidth +
        ".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n            int maxPosValue = " +
        u +
        " - int(getMaxPos(b, idyR, idyC, d));\n\n            // Get the current value, check it against the value from the\n            // position matrix.\n            int curPosValue = wR * " +
        i +
        " + wC;\n            float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n            dotProd += dyValue * mask;\n          }\n        }\n        setOutput(dotProd);\n      }\n    ";
    },
    Wo = function (t, e, n, r, o, i) {
      void 0 === n && (n = !1),
        void 0 === r && (r = !1),
        void 0 === o && (o = !1),
        void 0 === i && (i = null),
        (this.variableNames = ["matrixA", "matrixB"]),
        (this.usesPackedTextures = !0),
        (this.outputShape = e);
      var a = n ? t[1] : t[2],
        s = Math.ceil(a / 2),
        u = n ? "i * 2, rc.y" : "rc.y, i * 2",
        c = r ? "rc.z, i * 2" : "i * 2, rc.z",
        l = n ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"],
        h = r ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"],
        p = "",
        f = "";
      i &&
        ((p = "vec4 activation(vec4 x) {\n        " + i + "\n      }"),
        (f = "result = activation(result);"));
      var d = o ? "result += getBiasAtOutCoords();" : "";
      o && this.variableNames.push("bias"),
        (this.userCode =
          "\n      " +
          p +
          "\n\n      const float sharedDimension = " +
          s +
          ".0;\n\n      vec4 dot2x2ARowBCol(ivec3 rc) {\n        vec4 result = vec4(0);\n        for (int i = 0; i < " +
          s +
          "; i++) {\n          vec4 a = getMatrixA(rc.x, " +
          u +
          ");\n          vec4 b = getMatrixB(rc.x, " +
          c +
          ");\n\n          result += (" +
          l[0] +
          " * " +
          h[0] +
          ") + (" +
          l[1] +
          " * " +
          h[1] +
          ");\n        }\n        return result;\n      }\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n        vec4 result = dot2x2ARowBCol(rc);\n\n        " +
          d +
          "\n\n        " +
          f +
          "\n\n        setOutput(result);\n      }\n    ");
    },
    zo = (function () {
      function t(t, e, n) {
        (this.variableNames = ["probs"]),
          (this.outputShape = [t, n]),
          (this.userCode =
            "\n      uniform float seed;\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n\n        float r = random(seed);\n        float cdf = 0.0;\n\n        for (int i = 0; i < " +
            (e - 1) +
            "; i++) {\n          cdf += getProbs(batch, i);\n\n          if (r < cdf) {\n            setOutput(float(i));\n            return;\n          }\n        }\n\n        // If no other event happened, last event happened.\n        setOutput(float(" +
            (e - 1) +
            "));\n      }\n    ");
      }
      return (
        (t.prototype.getCustomSetupFunc = function (n) {
          var r = this;
          return function (t, e) {
            null == r.seedLoc && (r.seedLoc = t.getUniformLocation(e, "seed")),
              t.gl.uniform1f(r.seedLoc, n);
          };
        }),
        t
      );
    })(),
    Uo = function (t, e, n, r) {
      (this.variableNames = ["indices"]),
        (this.outputShape = [t, e]),
        (this.userCode =
          "\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int index = round(getIndices(coords.x));\n        setOutput(mix(float(" +
          r +
          "), float(" +
          n +
          "),\n                      float(index == coords.y)));\n      }\n    ");
    },
    Go = function (t) {
      (this.variableNames = ["A"]), (this.isPackShader = !0);
      var e,
        n,
        r,
        o,
        i = (this.outputShape = t).length;
      if (0 === i)
        this.userCode =
          "\n        void main() {\n          setOutput(vec4(getA(), 0., 0., 0.));\n        }\n      ";
      else {
        var a = mn("rc", i),
          s = Dn(i),
          u = (function (t, e, n) {
            if (1 === t) return "rc > " + e[0];
            for (var r = "", o = t - 2; o < t; o++)
              (r += n[o] + " >= " + e[o]), o < t - 1 && (r += "||");
            return r;
          })(i, t, a),
          c = (function (t, e, n, r) {
            if (1 === t) return "";
            var o = r.slice(-2);
            return (
              "\n    int r = " +
              o[0] +
              ";\n    int c = " +
              o[1] +
              ";\n    int rp1 = r + 1;\n    int cp1 = c + 1;\n\n    bool cEdge = cp1 >= " +
              e +
              ";\n    bool rEdge = rp1 >= " +
              n +
              ";\n  "
            );
          })(i, t[t.length - 1], t[t.length - 2], a),
          l =
            ((n = a),
            (r = (e = t).length),
            (o = (function (t, e) {
              for (var n = [], r = 0; r <= 1; r++)
                for (var o = 0; o <= 1; o++) {
                  for (
                    var i =
                        (0 === r ? "r" : "rp1") +
                        ", " +
                        (0 === o ? "c" : "cp1"),
                      a = 2;
                    a < t;
                    a++
                  )
                    i = e[e.length - 1 - a] + "," + i;
                  n.push(i);
                }
              return n;
            })(r, n)),
            1 === r
              ? "getA(rc),\n            rc + 1 >= " +
                e[0] +
                " ? 0. : getA(rc + 1),\n            0, 0"
              : "getA(" +
                o[0] +
                "),\n          cEdge ? 0. : getA(" +
                o[1] +
                "),\n          rEdge ? 0. : getA(" +
                o[2] +
                "),\n          rEdge || cEdge ? 0. : getA(" +
                o[3] +
                ")");
        this.userCode =
          "\n        void main() {\n          " +
          s +
          " rc = getOutputCoords();\n\n          if(" +
          u +
          ") {\n            setOutput(vec4(0));\n          } else {\n            " +
          c +
          "\n\n            setOutput(vec4(" +
          l +
          "));\n          }\n        }\n      ";
      }
    };
  var Vo = function (n, t, e) {
      (this.variableNames = ["x"]),
        (this.outputShape = t.map(function (t, e) {
          return t[0] + n[e] + t[1];
        }));
      var r = n.length,
        o = Dn(r),
        i = t
          .map(function (t) {
            return t[0];
          })
          .join(","),
        a = t
          .map(function (t, e) {
            return t[0] + n[e];
          })
          .join(","),
        s = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, r);
      this.userCode =
        1 !== r
          ? "\n      " +
            o +
            " start = " +
            o +
            "(" +
            i +
            ");\n      " +
            o +
            " end = " +
            o +
            "(" +
            a +
            ");\n\n      void main() {\n        " +
            o +
            " outC = getOutputCoords();\n        if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n          setOutput(float(" +
            e +
            "));\n        } else {\n          " +
            o +
            " coords = outC - start;\n          setOutput(getX(" +
            s +
            "));\n        }\n      }\n    "
          : "\n        int start = " +
            i +
            ";\n        int end = " +
            a +
            ";\n\n        void main() {\n          int outC = getOutputCoords();\n          if (outC < start || outC >= end) {\n            setOutput(float(" +
            e +
            "));\n          } else {\n            setOutput(getX(outC - start));\n          }\n        }\n      ";
    },
    Ho = function (n, t, e) {
      (this.variableNames = ["x"]),
        (this.usesPackedTextures = !0),
        (this.outputShape = t.map(function (t, e) {
          return t[0] + n[e] + t[1];
        }));
      for (
        var r = n.length,
          o = Dn(r),
          i = t
            .map(function (t) {
              return t[0];
            })
            .join(","),
          a = t
            .map(function (t, e) {
              return t[0] + n[e];
            })
            .join(","),
          s = mn("rc", r),
          u = mn("source", r),
          c = s[r - 1] + " < " + this.outputShape[r - 1],
          l = 1 === r ? "source" : "vec2(" + u.slice(-2).join() + ")",
          h = [
            o + " rc = outputLoc;",
            s[r - 1] + " += 1;\n       if(" + c + ") {\n      ",
            1 === r
              ? ""
              : "}\n       rc = outputLoc;\n       " +
                s[r - 2] +
                " += 1;\n       if(" +
                s[r - 2] +
                " < " +
                this.outputShape[r - 2] +
                ") {",
            1 === r ? "" : "  " + s[r - 1] + " += 1;\n         if(" + c + ") {",
          ],
          p =
            1 === r
              ? "rc < start || rc >= end"
              : "any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",
          f = "",
          d = 0,
          v = 1 === r ? 2 : 4;
        d < v;
        d++
      )
        f +=
          "\n        " +
          h[d] +
          "\n        if (" +
          p +
          ") {\n          result[" +
          d +
          "] = float(" +
          e +
          ");\n        } else {\n          " +
          o +
          " source = rc - start;\n          result[" +
          d +
          "] = getChannel(getX(" +
          u.join() +
          "), " +
          l +
          ");\n        }\n      ";
      (f += 1 === r ? "} " : "}}"),
        (this.userCode =
          "\n      const " +
          o +
          " start = " +
          o +
          "(" +
          i +
          ");\n      const " +
          o +
          " end = " +
          o +
          "(" +
          a +
          ");\n\n      void main() {\n        " +
          o +
          " outputLoc = getOutputCoords();\n        vec4 result = vec4(0.);\n        " +
          f +
          "\n        setOutput(result);\n      }\n    ");
    },
    qo = function (t, e, n) {
      if (((this.variableNames = ["x"]), "avg" === e && n))
        throw new Error("Cannot compute positions for average pool.");
      var r = t.filterWidth,
        o = t.strideHeight,
        i = t.strideWidth,
        a = t.dilationHeight,
        s = t.dilationWidth,
        u = t.effectiveFilterHeight,
        c = t.effectiveFilterWidth,
        l = t.padInfo.top,
        h = t.padInfo.left;
      this.outputShape = t.outShape;
      var p = "avg" === e,
        f = "0.0";
      if ((p || (f = "-1.0 / 1e-20"), n))
        this.userCode =
          "\n        const ivec2 strides = ivec2(" +
          o +
          ", " +
          i +
          ");\n        const ivec2 pads = ivec2(" +
          l +
          ", " +
          h +
          ");\n\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int batch = coords[0];\n          int d = coords[3];\n\n          ivec2 xRCCorner = coords.yz * strides - pads;\n          int xRCorner = xRCCorner.x;\n          int xCCorner = xRCCorner.y;\n\n          // max/min x(?, ?, d) to get y(yR, yC, d).\n          // ? = to be determined\n          float minMaxValue = 0.0;\n          float minMaxValueFound = 0.0;\n          int minMaxPosition = 0;\n          float avgValue = 0.0;\n\n          for (int wR = 0; wR < " +
          u +
          ";\n              wR += " +
          a +
          ") {\n            int xR = xRCorner + wR;\n\n            if (xR < 0 || xR >= " +
          t.inHeight +
          ") {\n              continue;\n            }\n\n            for (int wC = 0; wC < " +
          c +
          ";\n                wC += " +
          s +
          ") {\n              int xC = xCCorner + wC;\n\n              if (xC < 0 || xC >= " +
          t.inWidth +
          ") {\n                continue;\n              }\n\n              float value = getX(batch, xR, xC, d);\n\n              // If a min / max value has already been found, use it. If not,\n              // use the current value.\n              float currMinMaxValue = mix(\n                  value, minMaxValue, minMaxValueFound);\n              if (value >= currMinMaxValue) {\n                minMaxValue = value;\n                minMaxValueFound = 1.0;\n                minMaxPosition = wR * " +
          c +
          " + wC;\n              }\n            }\n          }\n          setOutput(float(minMaxPosition));\n        }\n      ";
      else {
        var d =
          e +
          "(" +
          e +
          "(" +
          e +
          "(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";
        "avg" === e && (d = "avgValue / count");
        var v = 4 * Math.floor(r / 4),
          m = r % 4,
          g =
            "\n      if (" +
            p +
            ") {\n        avgValue += dot(values, ones);\n      } else {\n        minMaxValue = max(values, minMaxValue);\n      }\n    ";
        this.userCode =
          "\n      const ivec2 strides = ivec2(" +
          o +
          ", " +
          i +
          ");\n      const ivec2 pads = ivec2(" +
          l +
          ", " +
          h +
          ");\n      const float initializationValue = " +
          f +
          ";\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float count = 0.0;\n\n      float getValue(int batch, int xR, int xC, int d) {\n        if (xC < 0 || xC >= " +
          t.inWidth +
          ") {\n          return initializationValue;\n        }\n        count += 1.0;\n        return getX(batch, xR, xC, d);\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d = coords[3];\n\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // max/min x(?, ?, d) to get y(yR, yC, d).\n        // ? = to be determined\n        vec4 minMaxValue = vec4(" +
          f +
          ");\n        float avgValue = 0.0;\n        count = 0.0;\n\n        for (int wR = 0; wR < " +
          u +
          ";\n            wR += " +
          a +
          ") {\n          int xR = xRCorner + wR;\n\n          if (xR < 0 || xR >= " +
          t.inHeight +
          ") {\n            continue;\n          }\n\n          for (int wC = 0; wC < " +
          v +
          "; wC += 4) {\n            int xC = xCCorner + wC * " +
          s +
          ";\n\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + " +
          s +
          ", d),\n              getValue(batch, xR, xC + 2 * " +
          s +
          ", d),\n              getValue(batch, xR, xC + 3 * " +
          s +
          ", d)\n            );\n\n            " +
          g +
          "\n          }\n\n          int xC = xCCorner + " +
          v +
          ";\n          if (" +
          (1 === m) +
          ") {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              initializationValue,\n              initializationValue,\n              initializationValue\n            );\n\n            " +
          g +
          "\n          } else if (" +
          (2 === m) +
          ") {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + " +
          s +
          ", d),\n              initializationValue,\n              initializationValue\n            );\n\n            " +
          g +
          "\n          } else if (" +
          (3 === m) +
          ") {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + " +
          s +
          ", d),\n              getValue(batch, xR, xC + 2 * " +
          s +
          ", d),\n              initializationValue\n            );\n\n            " +
          g +
          "\n          }\n        }\n        setOutput(" +
          d +
          ");\n      }\n    ";
      }
    },
    jo = function (t, e) {
      this.variableNames = ["x"];
      var n = t.windowSize,
        r = t.batchSize,
        o = t.inSize,
        i = Math.ceil(o / n);
      this.outputShape = [r, i];
      var a = "0.0",
        s = "";
      "prod" === e
        ? (a = "1.0")
        : "min" === e
        ? ((a = "1.0 / 1e-20"), (s = "min"))
        : "max" === e && ((a = "-1.0 / 1e-20"), (s = "max"));
      var u =
        e +
        "(" +
        e +
        "(" +
        e +
        "(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";
      "sum" === e
        ? (u = "sumValue")
        : "prod" === e
        ? (u = "prodValue")
        : "all" === e
        ? (u = "allValue")
        : "any" === e && (u = "anyValue");
      var c = 4 * Math.floor(n / 4),
        l = n % 4,
        h =
          "\n      if (" +
          ("sum" === e) +
          ") {\n        sumValue += dot(values, ones);\n      } else if (" +
          ("prod" === e) +
          ") {\n        vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n        prodValue *= tmp[0] * tmp[1];\n      } else {\n        minMaxValue = " +
          s +
          "(values, minMaxValue);\n      }\n    ",
        p = "vec4";
      "all" === e
        ? ((a = "1.0"),
          (h =
            "\n        bool reducedAllValue = all(values);\n        float floatedReducedAllValue = float(reducedAllValue);\n        allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n      "),
          (p = "bvec4"))
        : "any" === e &&
          ((a = "0.0"),
          (h =
            "\n        bool reducedAnyValue = any(values);\n        float floatedReducedAnyValue = float(reducedAnyValue);\n        anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n      "),
          (p = "bvec4"));
      var f = "";
      0 < o % n &&
        (f =
          "\n        if (inIdx < 0 || inIdx >= " +
          o +
          ") {\n          return initializationValue;\n        }\n      "),
        (this.userCode =
          "\n      const float initializationValue = " +
          a +
          ";\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float getValue(int batch, int inIdx) {\n        " +
          f +
          "\n        return getX(batch, inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * " +
          n +
          ";\n\n        vec4 minMaxValue = vec4(" +
          a +
          ");\n        float prodValue = 1.0;\n        float sumValue = 0.0;\n        float allValue = 1.0;\n        float anyValue = 0.0;\n\n        for (int i = 0; i < " +
          c +
          "; i += 4) {\n          int inIdx = inOffset + i;\n          " +
          p +
          " values = " +
          p +
          "(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          " +
          h +
          "\n        }\n\n        int inIdx = inOffset + " +
          c +
          ";\n        if (" +
          (1 === l) +
          ") {\n          " +
          p +
          " values = " +
          p +
          "(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          " +
          h +
          "\n        } else if (" +
          (2 === l) +
          ") {\n          " +
          p +
          " values = " +
          p +
          "(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          " +
          h +
          "\n        } else if (" +
          (3 === l) +
          ") {\n          " +
          p +
          " values = " +
          p +
          "(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          " +
          h +
          "\n        }\n        setOutput(" +
          u +
          ");\n      }\n    ");
    },
    $o = function (t, e) {
      (this.variableNames = ["A"]),
        (this.usesPackedTextures = !0),
        (this.outputShape = t);
      for (var n = "", r = 0; r < 4; r++) {
        var o = "thisRC = rc;";
        r % 2 == 1 && (o += "thisRC.z += 1;"),
          1 < r && (o += "thisRC.y += 1;"),
          (n +=
            "\n        " +
            o +
            "\n        " +
            (0 < r ? "if(thisRC.y < rows && thisRC.z < cols){" : "") +
            "\n          int flatIndex = getFlatIndex(thisRC);\n\n          ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n          vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n          result[" +
            r +
            "] =\n            getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n        " +
            (0 < r ? "}" : "") +
            "\n      ");
      }
      this.userCode =
        "\n      \n    ivec3 inputCoordsFromReshapedOutCoords(int index) {\n      " +
        bn(["r", "c", "d"], e) +
        "\n      return ivec3(r, c, d);\n    }\n  \n      \n    int getFlatIndex(ivec3 coords) {\n      return round(" +
        (function (t, e) {
          if (t.length !== e.length)
            throw new Error(
              "Vectors to be dotted must be of the same length -got " +
                t.length +
                " and " +
                e.length
            );
          for (
            var n = [], r = Math.floor(t.length / 4), o = t.length % 4, i = 0;
            i < r;
            i++
          ) {
            var a = t.slice(4 * i, 4 * i + 4),
              s = e.slice(4 * i, 4 * i + 4);
            n.push(En(a) + ", " + En(s));
          }
          return (
            0 !== o &&
              ((a = t.slice(4 * r)),
              (s = e.slice(4 * r)),
              1 === a.length &&
                ((a = a.map(function (t) {
                  return "float(" + t + ")";
                })),
                (s = s.map(function (t) {
                  return "float(" + t + ")";
                }))),
              n.push(En(a) + ", " + En(s))),
            n
              .map(function (t, e) {
                return "dot(" + t + ")";
              })
              .join("+")
          );
        })(
          ["coords.x", "coords.y", "coords.z"],
          K(t)
            .map(function (t) {
              return t.toString();
            })
            .concat(["1."])
        ) +
        ");\n    }\n  \n\n      void main() {\n        ivec3 rc = getOutputCoords();\n\n        vec4 result = vec4(0.);\n\n        ivec3 thisRC;\n        int rows = " +
        t[1] +
        ";\n        int cols = " +
        t[2] +
        ";\n\n        " +
        n +
        "\n\n        setOutput(result);\n      }\n    ";
    };
  var Ko = function (t, e, n) {
      (this.variableNames = ["dy"]),
        (this.outputShape = []),
        (this.outputShape = e.shape);
      var r = e.shape,
        o = r[1],
        i = r[2],
        a = t.shape,
        s = a[1],
        u = a[2],
        c = [n && 1 < s ? o - 1 : o, n && 1 < u ? i - 1 : i],
        l = [n && 1 < s ? s - 1 : s, n && 1 < u ? u - 1 : u],
        h = c[0] / l[0],
        p = c[1] / l[1],
        f = 1 / h,
        d = 1 / p,
        v = 2 * Math.ceil(f) + 2,
        m = 2 * Math.ceil(d) + 2;
      this.userCode =
        "\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float(" +
        h +
        ");\n        const float widthScale = float(" +
        p +
        ");\n\n        const float invHeightScale = float(" +
        f +
        ");\n        const float invWidthScale = float(" +
        d +
        ");\n\n        const int winHeight = int(" +
        v +
        ");\n        const int winWidth = int(" +
        m +
        ");\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(startRLerp - float(winHeight / 2));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(startCLerp - float(winWidth / 2));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= " +
        s +
        ") {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= " +
        u +
        ") {\n              continue;\n            }\n\n            float dxR = float(dyR) * heightScale;\n            int topDxRIndex = int(floor(dxR));\n            int bottomDxRIndex = int(min(ceil(dxR), " +
        (o - 1) +
        ".0));\n            float dxRLerp = dxR - float(topDxRIndex);\n            float inverseDxRLerp = 1.0 - dxRLerp;\n\n            float dxC = float(dyC) * widthScale;\n            int leftDxCIndex = int(floor(dxC));\n            int rightDxCIndex = int(min(ceil(dxC), " +
        (i - 1) +
        ".0));\n            float dxCLerp = dxC - float(leftDxCIndex);\n            float inverseDxCLerp = 1.0 - dxCLerp;\n\n            if (r == topDxRIndex && c == leftDxCIndex) {\n              // topLeft\n              accumulator +=\n                getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n            }\n\n            if (r == topDxRIndex && c == rightDxCIndex) {\n              // topRight\n              accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == leftDxCIndex) {\n              // bottomLeft\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == rightDxCIndex) {\n              // bottomRight\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    ";
    },
    Xo = function (t, e, n, r) {
      (this.variableNames = ["A"]), (this.outputShape = []);
      var o = t[0],
        i = t[1],
        a = t[2],
        s = t[3];
      this.outputShape = [o, e, n, s];
      var u = [r && 1 < e ? i - 1 : i, r && 1 < n ? a - 1 : a],
        c = [r && 1 < e ? e - 1 : e, r && 1 < n ? n - 1 : n];
      this.userCode =
        "\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          " +
        u[0] / c[0] +
        ",\n          " +
        u[1] / c[1] +
        ");\n      const vec2 inputShapeRC = vec2(" +
        i +
        ".0, " +
        a +
        ".0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n        // Compute the four integer indices.\n        ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n        ivec2 sourceCeilRC = ivec2(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n        float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n        float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n        float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n        float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n        vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n        float top = topLeft + (topRight - topLeft) * fracRC.y;\n        float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n        float newValue = top + (bottom - top) * fracRC.x;\n\n        setOutput(newValue);\n      }\n    ";
    },
    Yo = function (t, e, n, r) {
      (this.variableNames = ["A"]),
        (this.usesPackedTextures = !0),
        (this.outputShape = []);
      var o = t[0],
        i = t[1],
        a = t[2],
        s = t[3];
      this.outputShape = [o, e, n, s];
      var u = [r && 1 < e ? i - 1 : i, r && 1 < n ? a - 1 : a],
        c = [r && 1 < e ? e - 1 : e, r && 1 < n ? n - 1 : n];
      this.userCode =
        "\n      const vec3 effectiveInputOverOutputRatioRC = vec3(\n          " +
        u[0] / c[0] +
        ",\n          " +
        u[1] / c[1] +
        ",\n          " +
        u[1] / c[1] +
        ");\n      const vec3 inputShapeRC = vec3(" +
        i +
        ".0, " +
        a +
        ".0,\n                                     " +
        a +
        ".0);\n\n      float getAValue(int b, int r, int c, int d) {\n        return getChannel(getA(b, r, c, d), vec2(c, d));\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        // Calculate values for next column in yRC.z.\n        ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n        // Fractional source index.\n        vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n        // Compute the four integer indices.\n        ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n        ivec3 sourceCeilRC = ivec3(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n        \n        // Should we calculate next column and row elements in 2x2 packed cell.\n        bool hasNextCol = d < " +
        (s - 1) +
        "; \n        bool hasNextRow = coords.z < " +
        (n - 1) +
        ";\n\n        // In parallel, construct four corners for all four components in\n        // packed 2x2 cell.\n        vec4 topLeft = vec4(\n          getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 bottomLeft = vec4(\n          getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 topRight = vec4(\n          getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec4 bottomRight = vec4(\n          getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n        vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n        vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n        vec4 newValue = mix(top, bottom, fracRC.x);\n\n        setOutput(newValue);\n      }\n    ";
    },
    Qo = function (t, e, n) {
      (this.variableNames = ["dy"]),
        (this.outputShape = []),
        (this.outputShape = e.shape);
      var r = e.shape,
        o = r[1],
        i = r[2],
        a = t.shape,
        s = a[1],
        u = a[2],
        c = [n && 1 < s ? o - 1 : o, n && 1 < u ? i - 1 : i],
        l = [n && 1 < s ? s - 1 : s, n && 1 < u ? u - 1 : u],
        h = c[0] / l[0],
        p = c[1] / l[1],
        f = 1 / h,
        d = 1 / p,
        v = 2 * Math.ceil(f) + 2,
        m = 2 * Math.ceil(d) + 2;
      this.userCode =
        "\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float(" +
        h +
        ");\n        const float widthScale = float(" +
        p +
        ");\n\n        const float invHeightScale = float(" +
        f +
        ");\n        const float invWidthScale = float(" +
        d +
        ");\n\n        const int winHeight = int(" +
        v +
        ");\n        const int winWidth = int(" +
        m +
        ");\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= " +
        s +
        ") {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= " +
        u +
        ") {\n              continue;\n            }\n\n            float sourceFracRow =\n              float(" +
        c[0] +
        ") *\n                (float(dyR) / float(" +
        l[0] +
        "));\n\n            float sourceFracCol =\n                float(" +
        c[1] +
        ") *\n                  (float(dyC) / float(" +
        l[1] +
        "));\n\n            int sourceNearestRow = int(min(\n                float(int(" +
        o +
        ") - 1),\n                " +
        n +
        " ? float(round(sourceFracRow)) :\n                                  float(floor(sourceFracRow))));\n\n            int sourceNearestCol = int(min(\n                float(int(" +
        i +
        ") - 1),\n                " +
        n +
        " ? float(round(sourceFracCol)) :\n                                  float(floor(sourceFracCol))));\n\n            if (r == sourceNearestRow && c == sourceNearestCol) {\n              accumulator += getDy(b, dyR, dyC, d);\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    ";
    },
    Jo = function (t, e, n, r) {
      (this.variableNames = ["A"]), (this.outputShape = []);
      var o = t[0],
        i = t[1],
        a = t[2],
        s = t[3];
      this.outputShape = [o, e, n, s];
      var u = [r && 1 < e ? i - 1 : i, r && 1 < n ? a - 1 : a],
        c = [r && 1 < e ? e - 1 : e, r && 1 < n ? n - 1 : n],
        l = r ? "0.5" : "0.0";
      this.userCode =
        "\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          " +
        u[0] / c[0] +
        ",\n          " +
        u[1] / c[1] +
        ");\n      const vec2 inputShapeRC = vec2(" +
        i +
        ".0, " +
        a +
        ".0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n        // Compute the coordinators of nearest neighbor point.\n        ivec2 sourceNearestRC = ivec2(\n          min(inputShapeRC - 1.0, floor(sourceFracIndexRC + " +
        l +
        ")));\n\n        float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n        setOutput(newValue);\n      }\n    ";
    },
    Zo = function (r, o) {
      this.variableNames = ["x"];
      var t = r.length;
      if (4 < t)
        throw new Error(
          "WebGL backend: Reverse of rank-" + t + " tensor is not yet supported"
        );
      if (((this.outputShape = r), 1 !== t)) {
        var e = r
            .map(function (t, e) {
              return (
                (n = e),
                -1 !== o.indexOf(n) && 1 !== r[n]
                  ? r[n] + " - coords[" + n + "] - 1"
                  : "coords[" + n + "]"
              );
              var n;
            })
            .join(","),
          n = Dn(t);
        this.userCode =
          "\n      void main() {\n        " +
          n +
          " coords = getOutputCoords();\n        setOutput(getX(" +
          e +
          "));\n      }\n    ";
      } else
        this.userCode =
          "\n        void main() {\n          int coord = getOutputCoords();\n          setOutput(getX(" +
          r[0] +
          " - coord - 1));\n        }\n      ";
    },
    ti = function (i, a) {
      (this.variableNames = ["x"]), (this.usesPackedTextures = !0);
      var t = i.length;
      if (4 < t)
        throw new Error(
          "WebGL backend: Reverse of rank-" + t + " tensor is not yet supported"
        );
      this.outputShape = i;
      var e,
        n,
        r,
        o = mn("rc", t),
        s = o[t - 1] + " + 1 < " + this.outputShape[t - 1],
        u = o[t - 2] + " + 1 < " + this.outputShape[t - 2],
        c = Dn(t);
      function l(o) {
        var t = i.map(function (t, e) {
          return (
            (n = e),
            (r = o),
            -1 !== a.indexOf(n) && 1 !== i[n]
              ? i[n] + " - " + r[n] + " - 1"
              : "" + r[n]
          );
          var n, r;
        });
        return (
          "getChannel(getX(" +
          t.join(",") +
          "), vec2(" +
          t.slice(-2).join(",") +
          "))"
        );
      }
      this.userCode =
        1 === t
          ? "\n        void main(){\n          int rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = getChannel(getX(" +
            i[0] +
            " - rc - 1), rc);\n          if(" +
            s +
            "){\n              result.g = getChannel(getX(" +
            i[0] +
            " - (rc  + 1) - 1), rc + 1);\n          }\n          setOutput(result);\n        }\n      "
          : "\n        void main() {\n          " +
            c +
            " rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = " +
            l(o.slice()) +
            ";\n          if(" +
            s +
            "){\n            result.g = " +
            (((r = o.slice())[t - 1] = "(" + r[t - 1] + " + 1)"), l(r)) +
            ";\n          }\n          if(" +
            u +
            ") {\n            result.b = " +
            (((n = o.slice())[t - 2] = "(" + n[t - 2] + " + 1)"), l(n)) +
            ";\n            if(" +
            s +
            ") {\n              result.a = " +
            (((e = o.slice())[t - 1] = "(" + e[t - 1] + " + 1)"),
            (e[t - 2] = "(" + e[t - 2] + " + 1)"),
            l(e)) +
            ";\n            }\n          }\n          setOutput(result);\n        }\n    ";
    },
    ei = function (t, e, n, r, o, i, a) {
      void 0 === a && (a = !0),
        (this.variableNames = ["updates", "indices", "defaultValue"]),
        (this.outputShape = i);
      var s = Dn(o.length),
        u = Dn(i.length),
        c = "";
      1 === n ? (c = "i") : 2 === n && (c = "i, j");
      var l = "getIndices(" + c + ")",
        h = "";
      1 === r ? (h = "i") : 2 === r && (h = "i, coords[1]");
      var p = "getUpdates(" + h + ")",
        f = 1 < e ? "strides[j]" : "strides";
      this.userCode =
        "\n        " +
        s +
        " strides = " +
        s +
        "(" +
        o +
        ");\n\n        void main() {\n          " +
        u +
        " coords = getOutputCoords();\n          float sum = 0.0;\n          bool found = false;\n          for (int i = 0; i < " +
        t +
        "; i++) {\n            int flattenedIndex = 0;\n            for (int j = 0; j < " +
        e +
        "; j++) {\n              int index = round(" +
        l +
        ");\n              flattenedIndex += index * " +
        f +
        ";\n            }\n            if (flattenedIndex == coords[0]) {\n              sum += " +
        p +
        ";\n              found = true;\n            }\n          }\n          setOutput(mix(getDefaultValue(), sum, float(found)));\n        }\n      ";
    },
    ni = function (t, e) {
      this.variableNames = ["x", "segmentIds"];
      var n = t.windowSize,
        r = t.batchSize,
        o = t.inSize,
        i = t.numSegments,
        a = i * Math.ceil(o / n);
      this.outputShape = [r, a];
      var s = 4 * Math.floor(n / 4),
        u = n % 4,
        c = "\n        sumValue += dot(values, segFilter);\n    ",
        l = "";
      0 < o % n &&
        (l =
          "\n        if (inIdx < 0 || inIdx >= " +
          o +
          ") {\n          return initializationValue;\n        }\n      ");
      var h = "";
      0 < o % n &&
        (h =
          "\n        if (inIdx < 0 || inIdx >= " +
          o +
          ") {\n          return -1.0;\n        }\n      "),
        (this.userCode =
          "\n      const float initializationValue = 0.0;\n\n      float getValue(int batch, int inIdx) {\n        " +
          l +
          "\n        return getX(batch, inIdx);\n      }\n\n      float getSegmentIdAtIndex(int inIdx) {\n        " +
          h +
          "\n        return getSegmentIds(inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = int(floor(float(outIdx) / float(\n          " +
          i +
          ")) * float(" +
          n +
          "));\n        int currentSeg = int(mod(float(outIdx), float(" +
          i +
          ")));\n\n        float sumValue = 0.0;\n\n        for (int i = 0; i < " +
          s +
          "; i += 4) {\n          int inIdx = inOffset + i;\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n          );\n\n          " +
          c +
          "\n        }\n\n        int inIdx = inOffset + " +
          s +
          ";\n        if (" +
          (1 === u) +
          ") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            0,\n            0,\n            0\n          );\n\n          " +
          c +
          "\n        } else if (" +
          (2 === u) +
          ") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n              0,\n              0\n          );\n\n          " +
          c +
          "\n        } else if (" +
          (3 === u) +
          ") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            0\n          );\n\n          " +
          c +
          "\n        }\n        setOutput(sumValue);\n      }\n    ");
    },
    ri = function (t, e, n) {
      var r, o;
      if (
        ((this.variableNames = ["c", "a", "b"]), (this.outputShape = e), 4 < n)
      )
        throw Error("Where for rank " + n + " is not yet supported");
      if (1 === n) r = o = "resRC";
      else {
        for (
          var i = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"],
            a = [],
            s = [],
            u = 0;
          u < e.length;
          u++
        )
          s.push("" + i[u]), u < t && a.push("" + i[u]);
        (r = a.join()), (o = s.join());
      }
      var c = Dn(n);
      this.userCode =
        "\n      void main() {\n        " +
        c +
        " resRC = getOutputCoords();\n        float cVal = getC(" +
        r +
        ");\n        if (cVal >= 1.0) {\n          setOutput(getA(" +
        o +
        "));\n        } else {\n          setOutput(getB(" +
        o +
        "));\n        }\n      }\n    ";
    },
    oi = (function () {
      function t(t) {
        (this.variableNames = ["source"]),
          (this.outputShape = t),
          (this.rank = t.length);
        var e,
          n = Dn(this.rank),
          r = "uniform int start[" + this.rank + "];",
          o = (function (t) {
            if (1 === t) return "sourceLoc";
            if (t <= 6)
              return ii
                .slice(0, t)
                .map(function (t) {
                  return "sourceLoc." + t;
                })
                .join(",");
            throw Error("Slicing for rank " + t + " is not yet supported");
          })(this.rank);
        (e =
          "\n        " +
          n +
          " sourceLoc;\n        " +
          n +
          " coords = getOutputCoords();\n        " +
          t
            .map(function (t, e) {
              return (
                "sourceLoc." +
                ii[e] +
                " = start[" +
                e +
                "] + coords." +
                ii[e] +
                ";"
              );
            })
            .join("\n") +
          "\n      "),
          (this.userCode =
            "\n      " +
            r +
            "\n      void main() {\n        " +
            e +
            "\n        setOutput(getSource(" +
            o +
            "));\n      }\n    ");
      }
      return (
        (t.prototype.getCustomSetupFunc = function (n) {
          var r = this;
          if (n.length !== this.rank)
            throw Error(
              "The rank (" +
                this.rank +
                ") of the program must match the length of start (" +
                n.length +
                ")"
            );
          return function (t, e) {
            (null == r.startLoc &&
              ((r.startLoc = t.getUniformLocationNoThrow(e, "start")),
              null == r.startLoc)) ||
              t.gl.uniform1iv(r.startLoc, n);
          };
        }),
        t
      );
    })(),
    ii = ["x", "y", "z", "w", "u", "v"];
  var ai = (function () {
      function t(t) {
        (this.variableNames = ["source"]),
          (this.usesPackedTextures = !0),
          (this.outputShape = t),
          (this.rank = t.length);
        var e = Dn(this.rank),
          n = mn("coords", this.rank),
          r = mn("sourceLoc", this.rank),
          o =
            1 === this.rank ? "sourceLoc" : "vec2(" + r.slice(-2).join() + ")",
          i = "getChannel(getSource(" + r.join() + "), " + o + ")",
          a =
            "\n      result.x = " +
            i +
            ";\n      if (++" +
            n[this.rank - 1] +
            " < " +
            t[this.rank - 1] +
            ") {\n        ++" +
            r[this.rank - 1] +
            ";\n        result.y = " +
            i +
            ";\n        --" +
            r[this.rank - 1] +
            ";\n      }\n    ",
          s =
            1 === this.rank
              ? ""
              : "\n      --" +
                n[this.rank - 1] +
                ";\n      if (++" +
                n[this.rank - 2] +
                " < " +
                t[this.rank - 2] +
                ") {\n        ++" +
                r[this.rank - 2] +
                ";\n        result.z = " +
                i +
                ";\n        if (++" +
                n[this.rank - 1] +
                " < " +
                t[this.rank - 1] +
                ") {\n          ++" +
                r[this.rank - 1] +
                ";\n          result.w = " +
                i +
                ";\n        }\n      }\n    ",
          u =
            this.rank <= 4
              ? "sourceLoc = coords +\n            " +
                e +
                "(" +
                t
                  .map(function (t, e) {
                    return "start[" + e + "]";
                  })
                  .join() +
                ");"
              : t
                  .map(function (t, e) {
                    return r[e] + " = " + n[e] + " + start[" + e + "];";
                  })
                  .join("\n");
        this.userCode =
          "\n      uniform int start[" +
          this.rank +
          "];\n      void main() {\n        " +
          e +
          " coords = getOutputCoords();\n        " +
          e +
          " sourceLoc;\n        " +
          u +
          " \n        vec4 result = vec4(0.);\n        " +
          a +
          "\n        " +
          s +
          "\n        setOutput(result);\n      }\n    ";
      }
      return (
        (t.prototype.getCustomSetupFunc = function (n) {
          var r = this;
          if (n.length !== this.rank)
            throw Error(
              "The rank (" +
                this.rank +
                ") of the program must match the length of start (" +
                n.length +
                ")"
            );
          return function (t, e) {
            (null == r.startLoc &&
              ((r.startLoc = t.getUniformLocationNoThrow(e, "start")),
              null == r.startLoc)) ||
              t.gl.uniform1iv(r.startLoc, n);
          };
        }),
        t
      );
    })(),
    si = function (t, e, n, r) {
      this.variableNames = ["x"];
      var o = n.filter(function (t, e) {
        return -1 === r.indexOf(e);
      });
      this.outputShape = o;
      var i = n.length,
        a = Dn(n.length),
        s = Dn(o.length),
        u = "";
      if (1 === i) u = "coords * strides + begin";
      else {
        var c = 0;
        u = n
          .map(function (t, e) {
            return -1 === r.indexOf(e)
              ? (c++,
                1 === o.length
                  ? "coords * strides[" + e + "] + begin[" + e + "]"
                  : "coords[" +
                    (c - 1) +
                    "] * strides[" +
                    e +
                    "] + begin[" +
                    e +
                    "]")
              : "begin[" + e + "]";
          })
          .join(",");
      }
      this.userCode =
        "\n      " +
        a +
        " begin = " +
        a +
        "(" +
        t +
        ");\n      " +
        a +
        " strides = " +
        a +
        "(" +
        e +
        ");\n\n      void main() {\n        " +
        s +
        " coords = getOutputCoords();\n        setOutput(getX(" +
        u +
        "));\n      }\n    ";
    },
    ui = (function () {
      function t(t) {
        (this.gpgpu = t),
          (this.numUsedTextures = 0),
          (this.numFreeTextures = 0),
          (this.freeTextures = {}),
          (this.logEnabled = !1),
          (this.usedTextures = {});
      }
      return (
        (t.prototype.acquireTexture = function (t, e, n) {
          var r,
            o = ci(e, n),
            i = li(t, o, n);
          if (
            (i in this.freeTextures || (this.freeTextures[i] = []),
            i in this.usedTextures || (this.usedTextures[i] = []),
            0 < this.freeTextures[i].length)
          ) {
            this.numFreeTextures--, this.numUsedTextures++, this.log();
            var a = this.freeTextures[i].shift();
            return this.usedTextures[i].push(a), a;
          }
          return (
            this.numUsedTextures++,
            this.log(),
            o === br.PACKED_2X2_FLOAT32
              ? (r = this.gpgpu.createPackedMatrixTexture(t[0], t[1]))
              : o === br.PACKED_2X2_FLOAT16
              ? (r = this.gpgpu.createFloat16PackedMatrixTexture(t[0], t[1]))
              : o === br.UNPACKED_FLOAT32
              ? (r = this.gpgpu.createFloat32MatrixTexture(t[0], t[1]))
              : o === br.UNPACKED_FLOAT16
              ? (r = this.gpgpu.createFloat16MatrixTexture(t[0], t[1]))
              : o === br.PACKED_4X1_UNSIGNED_BYTE &&
                (r = this.gpgpu.createUnsignedBytesMatrixTexture(t[0], t[1])),
            this.usedTextures[i].push(r),
            r
          );
        }),
        (t.prototype.releaseTexture = function (t, e, n, r) {
          if (null != this.freeTextures) {
            var o = li(e, ci(n, r), r);
            o in this.freeTextures || (this.freeTextures[o] = []),
              this.freeTextures[o].push(t),
              this.numFreeTextures++,
              this.numUsedTextures--;
            var i = this.usedTextures[o],
              a = i.indexOf(t);
            if (a < 0)
              throw new Error(
                "Cannot release a texture that was never provided by this texture manager"
              );
            i.splice(a, 1), this.log();
          }
        }),
        (t.prototype.log = function () {
          if (this.logEnabled) {
            var t = this.numFreeTextures + this.numUsedTextures;
            console.log(
              "Free/Used",
              this.numFreeTextures + " / " + this.numUsedTextures,
              "(" + t + ")"
            );
          }
        }),
        (t.prototype.getNumUsedTextures = function () {
          return this.numUsedTextures;
        }),
        (t.prototype.getNumFreeTextures = function () {
          return this.numFreeTextures;
        }),
        (t.prototype.dispose = function () {
          var e = this;
          if (null != this.freeTextures) {
            for (var t in this.freeTextures)
              this.freeTextures[t].forEach(function (t) {
                e.gpgpu.deleteMatrixTexture(t);
              });
            for (var t in this.usedTextures)
              this.usedTextures[t].forEach(function (t) {
                e.gpgpu.deleteMatrixTexture(t);
              });
            (this.freeTextures = null),
              (this.usedTextures = null),
              (this.numUsedTextures = 0),
              (this.numFreeTextures = 0);
          }
        }),
        t
      );
    })();
  function ci(t, e) {
    if (t === wr.UPLOAD) return e ? br.PACKED_2X2_FLOAT32 : br.UNPACKED_FLOAT32;
    if (t === wr.RENDER || null == t)
      return e
        ? Zt.get("WEBGL_RENDER_FLOAT32_ENABLED")
          ? br.PACKED_2X2_FLOAT32
          : br.PACKED_2X2_FLOAT16
        : Zt.get("WEBGL_RENDER_FLOAT32_ENABLED")
        ? br.UNPACKED_FLOAT32
        : br.UNPACKED_FLOAT16;
    if (t === wr.DOWNLOAD || t === wr.PIXELS)
      return br.PACKED_4X1_UNSIGNED_BYTE;
    throw new Error("Unknown logical texture type " + t);
  }
  function li(t, e, n) {
    return t[0] + "_" + t[1] + "_" + e + "_" + n;
  }
  var hi = function (t, e) {
    this.variableNames = ["A"];
    for (var n = new Array(t.length), r = 0; r < n.length; r++)
      n[r] = t[r] * e[r];
    (this.outputShape = n), (this.rank = n.length);
    var o = Dn(this.rank),
      i = (function (t) {
        var e = t.length;
        if (5 < e) throw Error("Tile for rank " + e + " is not yet supported");
        if (1 === e) return "imod(resRC, " + t[0] + ")";
        for (
          var n = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"],
            r = [],
            o = 0;
          o < t.length;
          o++
        )
          r.push("imod(" + n[o] + ", " + t[o] + ")");
        return r.join();
      })(t);
    this.userCode =
      "\n      void main() {\n        " +
      o +
      " resRC = getOutputCoords();\n        setOutput(getA(" +
      i +
      "));\n      }\n    ";
  };
  var pi = function (t, e) {
    this.variableNames = ["A"];
    for (var n = new Array(t.length), r = 0; r < n.length; r++) n[r] = t[e[r]];
    (this.outputShape = n), (this.rank = n.length);
    var o = Dn(this.rank),
      i = (function (t) {
        var e = t.length;
        if (6 < e)
          throw Error("Transpose for rank " + e + " is not yet supported");
        for (
          var n = [
              "resRC.x",
              "resRC.y",
              "resRC.z",
              "resRC.w",
              "resRC.u",
              "resRC.v",
            ],
            r = new Array(e),
            o = 0;
          o < t.length;
          o++
        )
          r[t[o]] = n[o];
        return r.join();
      })(e);
    this.userCode =
      "\n    void main() {\n      " +
      o +
      " resRC = getOutputCoords();\n      setOutput(getA(" +
      i +
      "));\n    }\n    ";
  };
  var fi = function (t, e) {
      (this.variableNames = ["A"]), (this.usesPackedTextures = !0);
      for (var n = new Array(t.length), r = 0; r < n.length; r++)
        n[r] = t[e[r]];
      if (((this.outputShape = n), (this.rank = n.length), 6 < this.rank))
        throw Error(
          "Packed transpose for rank " + this.rank + " is not yet supported."
        );
      var o = Dn(this.rank),
        i = vn("rc", this.rank),
        a = new Array(this.rank);
      for (r = 0; r < e.length; r++) a[e[r]] = i[r];
      var s = "vec2(" + a.slice(-2).join() + ")",
        u = "++" + i[this.rank - 1] + " < " + n[this.rank - 1],
        c = "getChannel(getA(" + a.join() + "), " + s + ")";
      this.userCode =
        "\n    void main() {\n      " +
        o +
        " rc = getOutputCoords();\n      vec4 result = vec4(0.);\n      result[0] = " +
        c +
        ";\n      if(" +
        u +
        ") {\n        result[1] = " +
        c +
        ";\n      }\n      --" +
        i[this.rank - 1] +
        ";\n      if(++" +
        i[this.rank - 2] +
        " < " +
        n[this.rank - 2] +
        ") {\n        result[2] = " +
        c +
        ";\n        if(" +
        u +
        ") {\n          result[3] = " +
        c +
        ";\n        }\n      }  \n      setOutput(result);\n    }\n    ";
    },
    di = 1.7580993408473768,
    vi = 1.0507009873554805,
    mi = function (t, e) {
      (this.variableNames = ["A"]),
        (this.outputShape = t),
        (this.userCode =
          "\n      float unaryOperation(float x) {\n        " +
          e +
          "\n      }\n\n      void main() {\n        float x = getAAtOutCoords();\n        float y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    ");
    },
    gi = "if (isnan(x)) return x;",
    yi = gi + "\n  return (x < 0.0) ? 0.0 : x;\n";
  var xi = "return exp(x);",
    wi = "return x;",
    bi =
      "\n  vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n",
    Ei = function (t, e) {
      (this.variableNames = ["A"]),
        (this.usesPackedTextures = !0),
        (this.outputShape = t),
        (this.userCode =
          "\n      vec4 unaryOperation(vec4 x) {\n        " +
          e +
          "\n      }\n\n      void main() {\n        vec4 x = getAAtOutCoords();\n        vec4 y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    ");
    },
    Ci = function (t) {
      (this.variableNames = ["A"]), (this.usesPackedTextures = !0);
      var e = (this.outputShape = t).length,
        n = mn("rc", e),
        r = Dn(e),
        o = (function (t, e) {
          if (1 === t) return "rc";
          for (var n = "", r = 0; r < t; r++)
            (n += e[r]), r < t - 1 && (n += ",");
          return n;
        })(e, n),
        i = n.slice(-2),
        a = e <= 1 ? "rc" : "vec2(" + i.join(",") + ")";
      this.userCode =
        "\n      void main() {\n        " +
        r +
        " rc = getOutputCoords();\n        vec4 packedInput = getA(" +
        o +
        ");\n\n        setOutput(getChannel(packedInput, " +
        a +
        "));\n      }\n    ";
    };
  var _i = Fe({
      concat_: function (t, n) {
        void 0 === n && (n = 0),
          D(1 <= t.length, function () {
            return "Pass at least one tensor to concat";
          });
        var e = oe(t, "tensors", "concat");
        n = k(n, e[0].shape)[0];
        var r = Re(
          e.map(function (t) {
            return t.shape;
          }),
          n
        );
        if (0 === B(r)) return Ge([], r);
        if (
          1 ===
          (e = e.filter(function (t) {
            return 0 < t.size;
          })).length
        )
          return e[0];
        var o = e.map(function (t) {
          return t.shape;
        });
        !(function (t, r) {
          var o = t[0].length;
          t.forEach(function (t, e) {
            D(t.length === o, function () {
              return (
                "Error in concat" +
                o +
                "D: rank of tensors[" +
                e +
                "] must be the same as the rank of the rest (" +
                o +
                ")"
              );
            });
          }),
            D(0 <= r && r < o, function () {
              return (
                "Error in concat" +
                o +
                "D: axis must be between 0 and " +
                (o - 1) +
                "."
              );
            });
          var i = t[0];
          t.forEach(function (t, e) {
            for (var n = 0; n < o; n++)
              D(n === r || t[n] === i[n], function () {
                return (
                  "Error in concat" +
                  o +
                  "D: Shape of tensors[" +
                  e +
                  "] (" +
                  t +
                  ") does not match the shape of the rest (" +
                  i +
                  ") along the non-concatenated axis " +
                  e +
                  "."
                );
              });
          });
        })(o, n);
        var i = e;
        return Zt.engine.runKernel(
          function (t) {
            return t.concat(e, n);
          },
          i,
          function (t) {
            var e = o.map(function (t) {
              return t[n];
            });
            return Ii(t, e, n).map(function (t) {
              return function () {
                return t;
              };
            });
          }
        );
      },
    }),
    Si = Fe({
      concat1d_: function (t) {
        return _i(t, 0);
      },
    }),
    Ri = Fe({
      concat2d_: function (t, e) {
        return _i(t, e);
      },
    }),
    Ni = Fe({
      concat3d_: function (t, e) {
        return _i(t, e);
      },
    }),
    ki = Fe({
      concat4d_: function (t, e) {
        return _i(t, e);
      },
    }),
    Ii = Fe({
      split_: function (t, e, n) {
        void 0 === n && (n = 0);
        var r,
          o = re(t, "x", "split");
        return (
          (n = k(n, o.shape)[0]),
          (r =
            "number" == typeof e
              ? (D(o.shape[n] % e == 0, function () {
                  return "Number of splits must evenly divide the axis.";
                }),
                new Array(e).fill(o.shape[n] / e))
              : (D(
                  o.shape[n] ===
                    e.reduce(function (t, e) {
                      return t + e;
                    }),
                  function () {
                    return "The sum of sizes must match the size of the axis dimension.";
                  }
                ),
                e)),
          Zt.engine.runKernel(
            function (t) {
              return t.split(o, r, n);
            },
            { $x: o },
            function (t) {
              return {
                $x: function () {
                  return _i(t, n);
                },
              };
            }
          )
        );
      },
    });
  function Ti(t, e) {
    return t((e = { exports: {} }), e.exports), e.exports;
  }
  var Ai = Ti(function (t) {
      !(function (t, e, n) {
        function i(t, e) {
          return (e.c = t.c), (e.s0 = t.s0), (e.s1 = t.s1), (e.s2 = t.s2), e;
        }
        function r(t, e) {
          var n = new (function (t) {
              var r,
                e = this,
                n =
                  ((r = 4022871197),
                  function (t) {
                    t = t.toString();
                    for (var e = 0; e < t.length; e++) {
                      var n = 0.02519603282416938 * (r += t.charCodeAt(e));
                      (n -= r = n >>> 0),
                        (r = (n *= r) >>> 0),
                        (r += 4294967296 * (n -= r));
                    }
                    return 2.3283064365386963e-10 * (r >>> 0);
                  });
              (e.next = function () {
                var t = 2091639 * e.s0 + 2.3283064365386963e-10 * e.c;
                return (e.s0 = e.s1), (e.s1 = e.s2), (e.s2 = t - (e.c = 0 | t));
              }),
                (e.c = 1),
                (e.s0 = n(" ")),
                (e.s1 = n(" ")),
                (e.s2 = n(" ")),
                (e.s0 -= n(t)),
                e.s0 < 0 && (e.s0 += 1),
                (e.s1 -= n(t)),
                e.s1 < 0 && (e.s1 += 1),
                (e.s2 -= n(t)),
                e.s2 < 0 && (e.s2 += 1),
                (n = null);
            })(t),
            r = e && e.state,
            o = n.next;
          return (
            (o.int32 = function () {
              return (4294967296 * n.next()) | 0;
            }),
            (o.double = function () {
              return o() + 11102230246251565e-32 * ((2097152 * o()) | 0);
            }),
            (o.quick = o),
            r &&
              ("object" == typeof r && i(r, n),
              (o.state = function () {
                return i(n, {});
              })),
            o
          );
        }
        e && e.exports ? (e.exports = r) : (this.alea = r);
      })(0, t);
    }),
    Di = Ti(function (t) {
      !(function (t, e, n) {
        function i(t, e) {
          return (e.x = t.x), (e.y = t.y), (e.z = t.z), (e.w = t.w), e;
        }
        function r(t, e) {
          var n = new (function (t) {
              var e = this,
                n = "";
              (e.x = 0),
                (e.y = 0),
                (e.z = 0),
                (e.w = 0),
                (e.next = function () {
                  var t = e.x ^ (e.x << 11);
                  return (
                    (e.x = e.y),
                    (e.y = e.z),
                    (e.z = e.w),
                    (e.w ^= (e.w >>> 19) ^ t ^ (t >>> 8))
                  );
                }),
                t === (0 | t) ? (e.x = t) : (n += t);
              for (var r = 0; r < n.length + 64; r++)
                (e.x ^= 0 | n.charCodeAt(r)), e.next();
            })(t),
            r = e && e.state,
            o = function () {
              return (n.next() >>> 0) / 4294967296;
            };
          return (
            (o.double = function () {
              do {
                var t =
                  ((n.next() >>> 11) + (n.next() >>> 0) / 4294967296) /
                  (1 << 21);
              } while (0 === t);
              return t;
            }),
            (o.int32 = n.next),
            (o.quick = o),
            r &&
              ("object" == typeof r && i(r, n),
              (o.state = function () {
                return i(n, {});
              })),
            o
          );
        }
        e && e.exports ? (e.exports = r) : (this.xor128 = r);
      })(0, t);
    }),
    Mi = Ti(function (t) {
      !(function (t, e, n) {
        function i(t, e) {
          return (
            (e.x = t.x),
            (e.y = t.y),
            (e.z = t.z),
            (e.w = t.w),
            (e.v = t.v),
            (e.d = t.d),
            e
          );
        }
        function r(t, e) {
          var n = new (function (t) {
              var e = this,
                n = "";
              (e.next = function () {
                var t = e.x ^ (e.x >>> 2);
                return (
                  (e.x = e.y),
                  (e.y = e.z),
                  (e.z = e.w),
                  (e.w = e.v),
                  ((e.d = (e.d + 362437) | 0) +
                    (e.v = e.v ^ (e.v << 4) ^ t ^ (t << 1))) |
                    0
                );
              }),
                (e.x = 0),
                (e.y = 0),
                (e.z = 0),
                (e.w = 0),
                t === ((e.v = 0) | t) ? (e.x = t) : (n += t);
              for (var r = 0; r < n.length + 64; r++)
                (e.x ^= 0 | n.charCodeAt(r)),
                  r == n.length && (e.d = (e.x << 10) ^ (e.x >>> 4)),
                  e.next();
            })(t),
            r = e && e.state,
            o = function () {
              return (n.next() >>> 0) / 4294967296;
            };
          return (
            (o.double = function () {
              do {
                var t =
                  ((n.next() >>> 11) + (n.next() >>> 0) / 4294967296) /
                  (1 << 21);
              } while (0 === t);
              return t;
            }),
            (o.int32 = n.next),
            (o.quick = o),
            r &&
              ("object" == typeof r && i(r, n),
              (o.state = function () {
                return i(n, {});
              })),
            o
          );
        }
        e && e.exports ? (e.exports = r) : (this.xorwow = r);
      })(0, t);
    }),
    Oi = Ti(function (t) {
      !(function (t, e, n) {
        function i(t, e) {
          return (e.x = t.x.slice()), (e.i = t.i), e;
        }
        function r(t, e) {
          null == t && (t = +new Date());
          var n = new (function (t) {
              var o = this;
              (o.next = function () {
                var t,
                  e,
                  n = o.x,
                  r = o.i;
                return (
                  (t = n[r]),
                  (e = (t ^= t >>> 7) ^ (t << 24)),
                  (e ^= (t = n[(r + 1) & 7]) ^ (t >>> 10)),
                  (e ^= (t = n[(r + 3) & 7]) ^ (t >>> 3)),
                  (e ^= (t = n[(r + 4) & 7]) ^ (t << 7)),
                  (t = n[(r + 7) & 7]),
                  (e ^= (t ^= t << 13) ^ (t << 9)),
                  (n[r] = e),
                  (o.i = (r + 1) & 7),
                  e
                );
              }),
                (function (t, e) {
                  var n,
                    r = [];
                  if (e === (0 | e)) r[0] = e;
                  else
                    for (e = "" + e, n = 0; n < e.length; ++n)
                      r[7 & n] =
                        (r[7 & n] << 15) ^
                        ((e.charCodeAt(n) + r[(n + 1) & 7]) << 13);
                  for (; r.length < 8; ) r.push(0);
                  for (n = 0; n < 8 && 0 === r[n]; ++n);
                  for (
                    8 == n ? (r[7] = -1) : r[n], t.x = r, t.i = 0, n = 256;
                    0 < n;
                    --n
                  )
                    t.next();
                })(o, t);
            })(t),
            r = e && e.state,
            o = function () {
              return (n.next() >>> 0) / 4294967296;
            };
          return (
            (o.double = function () {
              do {
                var t =
                  ((n.next() >>> 11) + (n.next() >>> 0) / 4294967296) /
                  (1 << 21);
              } while (0 === t);
              return t;
            }),
            (o.int32 = n.next),
            (o.quick = o),
            r &&
              (r.x && i(r, n),
              (o.state = function () {
                return i(n, {});
              })),
            o
          );
        }
        e && e.exports ? (e.exports = r) : (this.xorshift7 = r);
      })(0, t);
    }),
    Pi = Ti(function (t) {
      !(function (t, e, n) {
        function i(t, e) {
          return (e.i = t.i), (e.w = t.w), (e.X = t.X.slice()), e;
        }
        function r(t, e) {
          null == t && (t = +new Date());
          var n = new (function (t) {
              var i = this;
              (i.next = function () {
                var t,
                  e,
                  n = i.w,
                  r = i.X,
                  o = i.i;
                return (
                  (i.w = n = (n + 1640531527) | 0),
                  (e = r[(o + 34) & 127]),
                  (t = r[(o = (o + 1) & 127)]),
                  (e ^= e << 13),
                  (t ^= t << 17),
                  (e ^= e >>> 15),
                  (t ^= t >>> 12),
                  (e = r[o] = e ^ t),
                  (i.i = o),
                  (e + (n ^ (n >>> 16))) | 0
                );
              }),
                (function (t, e) {
                  var n,
                    r,
                    o,
                    i,
                    a,
                    s = [],
                    u = 128;
                  for (
                    e === (0 | e)
                      ? ((r = e), (e = null))
                      : ((e += "\0"), (r = 0), (u = Math.max(u, e.length))),
                      o = 0,
                      i = -32;
                    i < u;
                    ++i
                  )
                    e && (r ^= e.charCodeAt((i + 32) % e.length)),
                      0 === i && (a = r),
                      (r ^= r << 10),
                      (r ^= r >>> 15),
                      (r ^= r << 4),
                      (r ^= r >>> 13),
                      0 <= i &&
                        ((a = (a + 1640531527) | 0),
                        (o = 0 == (n = s[127 & i] ^= r + a) ? o + 1 : 0));
                  for (
                    128 <= o && (s[127 & ((e && e.length) || 0)] = -1),
                      o = 127,
                      i = 512;
                    0 < i;
                    --i
                  )
                    (r = s[(o + 34) & 127]),
                      (n = s[(o = (o + 1) & 127)]),
                      (r ^= r << 13),
                      (n ^= n << 17),
                      (r ^= r >>> 15),
                      (n ^= n >>> 12),
                      (s[o] = r ^ n);
                  (t.w = a), (t.X = s), (t.i = o);
                })(i, t);
            })(t),
            r = e && e.state,
            o = function () {
              return (n.next() >>> 0) / 4294967296;
            };
          return (
            (o.double = function () {
              do {
                var t =
                  ((n.next() >>> 11) + (n.next() >>> 0) / 4294967296) /
                  (1 << 21);
              } while (0 === t);
              return t;
            }),
            (o.int32 = n.next),
            (o.quick = o),
            r &&
              (r.X && i(r, n),
              (o.state = function () {
                return i(n, {});
              })),
            o
          );
        }
        e && e.exports ? (e.exports = r) : (this.xor4096 = r);
      })(0, t);
    }),
    Fi = Ti(function (t) {
      !(function (t, e, n) {
        function i(t, e) {
          return (e.a = t.a), (e.b = t.b), (e.c = t.c), (e.d = t.d), e;
        }
        function r(t, e) {
          var n = new (function (t) {
              var o = this,
                e = "";
              (o.next = function () {
                var t = o.b,
                  e = o.c,
                  n = o.d,
                  r = o.a;
                return (
                  (t = (t << 25) ^ (t >>> 7) ^ e),
                  (e = (e - n) | 0),
                  (n = (n << 24) ^ (n >>> 8) ^ r),
                  (r = (r - t) | 0),
                  (o.b = t = (t << 20) ^ (t >>> 12) ^ e),
                  (o.c = e = (e - n) | 0),
                  (o.d = (n << 16) ^ (e >>> 16) ^ r),
                  (o.a = (r - t) | 0)
                );
              }),
                (o.a = 0),
                (o.b = 0),
                (o.c = -1640531527),
                (o.d = 1367130551),
                t === Math.floor(t)
                  ? ((o.a = (t / 4294967296) | 0), (o.b = 0 | t))
                  : (e += t);
              for (var n = 0; n < e.length + 20; n++)
                (o.b ^= 0 | e.charCodeAt(n)), o.next();
            })(t),
            r = e && e.state,
            o = function () {
              return (n.next() >>> 0) / 4294967296;
            };
          return (
            (o.double = function () {
              do {
                var t =
                  ((n.next() >>> 11) + (n.next() >>> 0) / 4294967296) /
                  (1 << 21);
              } while (0 === t);
              return t;
            }),
            (o.int32 = n.next),
            (o.quick = o),
            r &&
              ("object" == typeof r && i(r, n),
              (o.state = function () {
                return i(n, {});
              })),
            o
          );
        }
        e && e.exports ? (e.exports = r) : (this.tychei = r);
      })(0, t);
    }),
    Li = Ti(function (e) {
      !(function (s, u) {
        var c,
          l = this,
          h = 256,
          p = 6,
          f = "random",
          d = u.pow(h, p),
          v = u.pow(2, 52),
          m = 2 * v,
          g = h - 1;
        function t(t, e, n) {
          var r = [],
            o = x(
              (function t(e, n) {
                var r,
                  o = [],
                  i = typeof e;
                if (n && "object" == i)
                  for (r in e)
                    try {
                      o.push(t(e[r], n - 1));
                    } catch (t) {}
                return o.length ? o : "string" == i ? e : e + "\0";
              })(
                (e = 1 == e ? { entropy: !0 } : e || {}).entropy
                  ? [t, w(s)]
                  : null == t
                  ? (function () {
                      try {
                        var t;
                        return (
                          c && (t = c.randomBytes)
                            ? (t = t(h))
                            : ((t = new Uint8Array(h)),
                              (l.crypto || l.msCrypto).getRandomValues(t)),
                          w(t)
                        );
                      } catch (t) {
                        var e = l.navigator,
                          n = e && e.plugins;
                        return [+new Date(), l, n, l.screen, w(s)];
                      }
                    })()
                  : t,
                3
              ),
              r
            ),
            i = new (function (t) {
              var e,
                n = t.length,
                a = this,
                r = 0,
                o = (a.i = a.j = 0),
                i = (a.S = []);
              for (n || (t = [n++]); r < h; ) i[r] = r++;
              for (r = 0; r < h; r++)
                (i[r] = i[(o = g & (o + t[r % n] + (e = i[r])))]), (i[o] = e);
              (a.g = function (t) {
                for (var e, n = 0, r = a.i, o = a.j, i = a.S; t--; )
                  (e = i[(r = g & (r + 1))]),
                    (n =
                      n * h +
                      i[g & ((i[r] = i[(o = g & (o + e))]) + (i[o] = e))]);
                return (a.i = r), (a.j = o), n;
              })(h);
            })(r),
            a = function () {
              for (var t = i.g(p), e = d, n = 0; t < v; )
                (t = (t + n) * h), (e *= h), (n = i.g(1));
              for (; m <= t; ) (t /= 2), (e /= 2), (n >>>= 1);
              return (t + n) / e;
            };
          return (
            (a.int32 = function () {
              return 0 | i.g(4);
            }),
            (a.quick = function () {
              return i.g(4) / 4294967296;
            }),
            (a.double = a),
            x(w(i.S), s),
            (
              e.pass ||
              n ||
              function (t, e, n, r) {
                return (
                  r &&
                    (r.S && y(r, i),
                    (t.state = function () {
                      return y(i, {});
                    })),
                  n ? ((u[f] = t), e) : t
                );
              }
            )(a, o, "global" in e ? e.global : this == u, e.state)
          );
        }
        function y(t, e) {
          return (e.i = t.i), (e.j = t.j), (e.S = t.S.slice()), e;
        }
        function x(t, e) {
          for (var n, r = t + "", o = 0; o < r.length; )
            e[g & o] = g & ((n ^= 19 * e[g & o]) + r.charCodeAt(o++));
          return w(e);
        }
        function w(t) {
          return String.fromCharCode.apply(0, t);
        }
        if (((u["seed" + f] = t), x(u.random(), s), e.exports)) {
          e.exports = t;
          try {
            c = require("crypto");
          } catch (t) {}
        }
      })([], Math);
    });
  (Li.alea = Ai),
    (Li.xor128 = Di),
    (Li.xorwow = Mi),
    (Li.xorshift7 = Oi),
    (Li.xor4096 = Pi),
    (Li.tychei = Fi);
  var Bi = Li.alea,
    Wi = (function () {
      function t(t, e, n, r, o) {
        (this.mean = t),
          (this.stdDev = e),
          (this.dtype = n),
          (this.nextVal = NaN),
          (this.truncated = r),
          this.truncated &&
            ((this.upper = this.mean + 2 * this.stdDev),
            (this.lower = this.mean - 2 * this.stdDev));
        var i = o || Math.random();
        this.random = Bi(i.toString());
      }
      return (
        (t.prototype.nextValue = function () {
          if (!isNaN(this.nextVal)) {
            var t = this.nextVal;
            return (this.nextVal = NaN), t;
          }
          for (var e, n, r = !1; !r; ) {
            for (
              var o = void 0, i = void 0, a = void 0;
              1 <=
                (a =
                  (o = 2 * this.random() - 1) * o +
                  (i = 2 * this.random() - 1) * i) || 0 === a;

            );
            var s = Math.sqrt((-2 * Math.log(a)) / a);
            (e = this.mean + this.stdDev * o * s),
              (n = this.mean + this.stdDev * i * s),
              (this.truncated && !this.isValidTruncated(e)) || (r = !0);
          }
          return (
            (this.truncated && !this.isValidTruncated(n)) ||
              (this.nextVal = this.convertValue(n)),
            this.convertValue(e)
          );
        }),
        (t.prototype.convertValue = function (t) {
          return null == this.dtype || "float32" === this.dtype
            ? t
            : Math.round(t);
        }),
        (t.prototype.isValidTruncated = function (t) {
          return t <= this.upper && t >= this.lower;
        }),
        t
      );
    })();
  function zi(t, e, n) {
    return (
      void 0 === e && (e = "float32"),
      (e = e || "float32"),
      tt(t),
      new lt(t, e, n)
    );
  }
  function Ui(t, e) {
    void 0 === e && (e = !1), console.log(t.toString(e));
  }
  var Gi = Fe({
      batchToSpaceND_: function (t, e, n) {
        var r = re(t, "x", "batchToSpaceND"),
          o = e.reduce(function (t, e) {
            return t * e;
          });
        return (
          D(r.rank >= 1 + e.length, function () {
            return (
              "input rank is " +
              r.rank +
              " but should be > than blockShape.length " +
              e.length
            );
          }),
          D(n.length === e.length, function () {
            return (
              "crops.length is " +
              n.length +
              " but should be equal to blockShape.length  " +
              e.length
            );
          }),
          D(r.shape[0] % o == 0, function () {
            return (
              "input tensor batch is " +
              r.shape[0] +
              " but is not divisible by the product of the elements of blockShape " +
              e.join(" * ") +
              " === " +
              o
            );
          }),
          Zt.engine.runKernel(
            function (t) {
              return t.batchToSpaceND(r, e, n);
            },
            { $x: r },
            function (t) {
              return {
                $x: function () {
                  return t.spaceToBatchND(e, n);
                },
              };
            }
          )
        );
      },
    }),
    Vi = Fe({
      cast_: function (t, e) {
        var n = re(t, "x", "cast");
        return Zt.engine.runKernel(
          function (t) {
            return t.cast(n, e);
          },
          { $x: n },
          function (t) {
            return {
              $x: function () {
                return t.clone();
              },
            };
          }
        );
      },
    }),
    Hi = Fe({
      clone_: function (t) {
        var e = re(t, "x", "clone", null);
        return Zt.engine.runKernel(
          function (t) {
            return dt.make(e.shape, { dataId: e.dataId }, e.dtype);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return t.toFloat();
              },
            };
          }
        );
      },
    }),
    qi = Fe({
      cumsum_: function (t, e, n, r) {
        void 0 === e && (e = 0),
          void 0 === n && (n = !1),
          void 0 === r && (r = !1);
        var o = re(t, "x", "cumsum"),
          i = Ce([(e |= 0)], o.rank),
          a = o;
        null != i && (a = o.transpose(i));
        var s = Se(1, o.rank)[0],
          u = Zt.engine.runKernel(
            function (t) {
              return t.cumsum(a, s, n, r);
            },
            { permutedX: a },
            function (t) {
              return {
                permutedX: function () {
                  return t.cumsum(e, n, !r);
                },
              };
            }
          );
        return null != i && (u = u.transpose(i)), u;
      },
    }),
    ji = Fe({
      depthToSpace_: function (t, e, n) {
        void 0 === n && (n = "NHWC");
        var r = re(t, "x", "depthToSpace"),
          o = "NHWC" === n ? r.shape[1] : r.shape[2],
          i = "NHWC" === n ? r.shape[2] : r.shape[3],
          a = "NHWC" === n ? r.shape[3] : r.shape[1];
        return (
          D(0 <= o * e, function () {
            return (
              "Negative dimension size caused by overflow when multiplying\n      " +
              o +
              " and " +
              e +
              "  for depthToSpace with input shape\n      " +
              r.shape
            );
          }),
          D(0 <= i * e, function () {
            return (
              "Negative dimension size caused by overflow when multiplying\n      " +
              i +
              " and " +
              e +
              " for depthToSpace with input shape\n          " +
              r.shape
            );
          }),
          D(a % (e * e) == 0, function () {
            return (
              "Dimension size must be evenly divisible by " +
              e * e +
              " but is " +
              a +
              " for depthToSpace with input shape " +
              r.shape
            );
          }),
          Zt.engine.runKernel(
            function (t) {
              return t.depthToSpace(r, e, n);
            },
            { $x: r }
          )
        );
      },
    }),
    $i = Fe({
      expandDims_: function (t, e) {
        void 0 === e && (e = 0);
        var n = re(t, "x", "expandDims");
        D(e <= n.rank, function () {
          return "Axis must be <= rank of the tensor";
        });
        var r = n.shape.slice();
        return (
          e < 0 &&
            (D(-(n.rank + 1) <= e, function () {
              return (
                "Axis must be in the interval [" +
                -(n.rank + 1) +
                ", " +
                n.rank +
                "]"
              );
            }),
            (e = n.rank + e + 1)),
          r.splice(e, 0, 1),
          ia(n, r)
        );
      },
    }),
    Ki = Fe({
      eye_: function (t, e, n, r) {
        void 0 === r && (r = "float32"), null == e && (e = t);
        for (var o = zi([t, e], r), i = t <= e ? t : e, a = 0; a < i; ++a)
          o.set(1, a, a);
        var s = o.toTensor().as2D(t, e);
        if (null == n) return s;
        if (1 === n.length) return ca($i(s, 0), [n[0], 1, 1]);
        if (2 === n.length) return ca($i($i(s, 0), 0), [n[0], n[1], 1, 1]);
        if (3 === n.length)
          return ca($i($i($i(s, 0), 0), 0), [n[0], n[1], n[2], 1, 1]);
        throw new Error(
          "eye() currently supports only 1D and 2D batchShapes, but received " +
            n.length +
            "D."
        );
      },
    }),
    Xi = Fe({
      multinomial_: function (t, e, n, r) {
        void 0 === r && (r = !1);
        var o = re(t, "logits", "multinomial"),
          i = o.size,
          a = o.rank;
        if (i < 2)
          throw new Error(
            "Error in multinomial: you need at least 2 outcomes, but got " +
              i +
              "."
          );
        if (2 < a)
          throw new Error("Rank of probabilities must be 1 or 2, but is " + a);
        n = n || Math.random();
        var s = 1 === a ? o.as2D(1, -1) : o,
          u = Zt.engine.runKernel(
            function (t) {
              return t.multinomial(s, r, e, n);
            },
            { logits2D: s }
          );
        return 1 === a ? u.as1D() : u;
      },
    }),
    Yi = Fe({
      oneHot_: function (t, e, n, r) {
        if ((void 0 === n && (n = 1), void 0 === r && (r = 0), e < 2))
          throw new Error("Error in oneHot: depth must be >=2, but it is " + e);
        var o = re(t, "indices", "oneHot", "int32"),
          i = o.shape.concat([e]);
        return (
          (o = o.flatten()),
          Zt.engine
            .runKernel(
              function (t) {
                return t.oneHot(o, e, n, r);
              },
              { $indices: o },
              function (t) {
                return {
                  $indices: function () {
                    return Qe(o.shape, "float32");
                  },
                };
              }
            )
            .reshape(i)
        );
      },
    }),
    Qi = Fe({
      pad_: function (t, e, n) {
        void 0 === n && (n = 0);
        var r = re(t, "x", "pad");
        if (0 === r.rank)
          throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");
        var o = e.map(function (t) {
          return t[0];
        });
        return Zt.engine.runKernel(
          function (t) {
            return t.pad(r, e, n);
          },
          { $x: r },
          function (t) {
            return {
              $x: function () {
                return t.slice(o, r.shape);
              },
            };
          }
        );
      },
    }),
    Ji = Fe({
      pad1d_: function (t, e, n) {
        return (
          void 0 === n && (n = 0),
          D(2 === e.length, function () {
            return "Invalid number of paddings. Must be length of 2.";
          }),
          Qi(t, [e], n)
        );
      },
    }),
    Zi = Fe({
      pad2d_: function (t, e, n) {
        return (
          void 0 === n && (n = 0),
          D(
            2 === e.length && 2 === e[0].length && 2 === e[1].length,
            function () {
              return "Invalid number of paddings. Must be length of 2 each.";
            }
          ),
          Qi(t, e, n)
        );
      },
    }),
    ta = Fe({
      pad3d_: function (t, e, n) {
        return (
          void 0 === n && (n = 0),
          D(
            3 === e.length &&
              2 === e[0].length &&
              2 === e[1].length &&
              2 === e[2].length,
            function () {
              return "Invalid number of paddings. Must be length of 2 each.";
            }
          ),
          Qi(t, e, n)
        );
      },
    }),
    ea = Fe({
      pad4d_: function (t, e, n) {
        return (
          void 0 === n && (n = 0),
          D(
            4 === e.length &&
              2 === e[0].length &&
              2 === e[1].length &&
              2 === e[2].length &&
              2 === e[3].length,
            function () {
              return "Invalid number of paddings. Must be length of 2 each.";
            }
          ),
          Qi(t, e, n)
        );
      },
    }),
    na = Fe({
      rand_: function (t, e, n) {
        var r = B(t),
          o = null;
        if (null == n || "float32" === n) o = new Float32Array(r);
        else if ("int32" === n) o = new Int32Array(r);
        else {
          if ("bool" !== n) throw new Error("Unknown data type " + n);
          o = new Uint8Array(r);
        }
        for (var i = 0; i < r; i++) o[i] = e();
        return dt.make(t, { values: o }, n);
      },
    }),
    ra = Fe({
      randomNormal_: function (t, e, n, r, o) {
        if (
          (void 0 === e && (e = 0),
          void 0 === n && (n = 1),
          null != r && "bool" === r)
        )
          throw new Error("Unsupported data type " + r);
        for (
          var i = new Wi(e, n, r, !1, o), a = zi(t, r), s = 0;
          s < a.values.length;
          s++
        )
          a.values[s] = i.nextValue();
        return a.toTensor();
      },
    }),
    oa = Fe({
      randomUniform_: function (t, e, n, r) {
        void 0 === e && (e = 0),
          void 0 === n && (n = 1),
          void 0 === r && (r = "float32");
        for (var o = zi(t, r), i = 0; i < o.values.length; i++)
          o.values[i] = v(e, n);
        return o.toTensor();
      },
    }),
    ia = Fe({
      reshape_: function (t, e) {
        var n = re(t, "x", "reshape", null);
        return (
          (e = N(e, n.size)),
          D(n.size === B(e), function () {
            return "new shape and old shape must have the same number of elements.";
          }),
          Zt.engine.runKernel(
            function (t) {
              return t.reshape(n, e);
            },
            { $x: n },
            function (t) {
              return {
                $x: function () {
                  return t.reshape(n.shape);
                },
              };
            }
          )
        );
      },
    }),
    aa = Fe({
      spaceToBatchND_: function (t, r, o) {
        var e = re(t, "x", "spaceToBatchND");
        return (
          D(e.rank >= 1 + r.length, function () {
            return (
              "input rank " +
              e.rank +
              " should be > than [blockShape] " +
              r.length
            );
          }),
          D(o.length === r.length, function () {
            return (
              "paddings.shape[0] " +
              o.length +
              " must be equal to [blockShape] " +
              r.length
            );
          }),
          D(
            e.shape.reduce(function (t, e, n) {
              return 0 < n && n <= r.length
                ? t && (e + o[n - 1][0] + o[n - 1][1]) % r[n - 1] == 0
                : t;
            }, !0),
            function () {
              return (
                "input spatial dimensions " +
                e.shape.slice(1) +
                " with paddings " +
                o.toString() +
                " must be divisible by blockShapes " +
                r.toString()
              );
            }
          ),
          Zt.engine.runKernel(
            function (t) {
              return t.spaceToBatchND(e, r, o);
            },
            { $x: e },
            function (t) {
              return {
                $x: function () {
                  return t.batchToSpaceND(r, o);
                },
              };
            }
          )
        );
      },
    }),
    sa = Fe({
      squeeze_: function (t, e) {
        var n = re(t, "x", "squeeze");
        return ia(n, I(n.shape, e).newShape);
      },
    }),
    ua = Fe({
      stack_: function (t, e) {
        void 0 === e && (e = 0);
        var n = oe(t, "tensors", "stack");
        if (
          (D(1 <= n.length, function () {
            return "Pass at least one tensor to tf.stack";
          }),
          1 === n.length)
        )
          return n[0].expandDims(e);
        var r = n[0].rank,
          o = n[0].shape,
          i = n[0].dtype;
        D(e <= r, function () {
          return "Axis must be <= rank of the tensor";
        }),
          n.forEach(function (t) {
            g(
              o,
              t.shape,
              "All tensors passed to stack must have matching shapes"
            );
          }),
          n.forEach(function (t) {
            D(i === t.dtype, function () {
              return "All tensors passed to stack must have matching dtypes";
            });
          });
        var a = n.map(function (t) {
          return t.expandDims(e);
        });
        return _i(a, e);
      },
    }),
    ca = Fe({
      tile_: function (t, s) {
        var r = re(t, "x", "tile");
        return (
          D(r.rank === s.length, function () {
            return (
              "Error in transpose: rank of input " +
              r.rank +
              " must match length of reps " +
              s +
              "."
            );
          }),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.tile(r, s);
              return e([r]), n;
            },
            { $x: r },
            function (i, t) {
              var a = t[0];
              return {
                $x: function () {
                  var t = nn(a);
                  if (1 === a.rank)
                    for (var e = 0; e < s[0]; ++e)
                      t = t.add(i.slice([e * a.shape[0]], [a.shape[0]]));
                  else if (2 === a.rank)
                    for (e = 0; e < s[0]; ++e)
                      for (var n = 0; n < s[1]; ++n)
                        t = t.add(
                          i.slice(
                            [e * a.shape[0], n * a.shape[1]],
                            [a.shape[0], a.shape[1]]
                          )
                        );
                  else if (3 === a.rank)
                    for (e = 0; e < s[0]; ++e)
                      for (n = 0; n < s[1]; ++n)
                        for (var r = 0; r < s[2]; ++r)
                          t = t.add(
                            i.slice(
                              [e * a.shape[0], n * a.shape[1], r * a.shape[2]],
                              [a.shape[0], a.shape[1], a.shape[2]]
                            )
                          );
                  else {
                    if (4 !== a.rank)
                      throw new Error(
                        "Gradient for tile operation is not implemented for rank-" +
                          a.rank +
                          " tensors yet."
                      );
                    for (e = 0; e < s[0]; ++e)
                      for (n = 0; n < s[1]; ++n)
                        for (r = 0; r < s[2]; ++r)
                          for (var o = 0; o < s[3]; ++o)
                            t = t.add(
                              i.slice(
                                [
                                  e * a.shape[0],
                                  n * a.shape[1],
                                  r * a.shape[2],
                                  o * a.shape[3],
                                ],
                                [a.shape[0], a.shape[1], a.shape[2], a.shape[3]]
                              )
                            );
                  }
                  return t;
                },
              };
            }
          )
        );
      },
    }),
    la = Fe({
      truncatedNormal_: function (t, e, n, r, o) {
        if (
          (void 0 === e && (e = 0),
          void 0 === n && (n = 1),
          null != r && "bool" === r)
        )
          throw new Error("Unsupported data type " + r);
        for (
          var i = new Wi(e, n, r, !0, o), a = zi(t, r), s = 0;
          s < a.values.length;
          s++
        )
          a.values[s] = i.nextValue();
        return a.toTensor();
      },
    }),
    ha = Fe({
      unstack_: function (t, e) {
        void 0 === e && (e = 0), (e = e || 0);
        var n = re(t, "x", "unstack");
        return (
          D(e >= -n.shape.length && e < n.shape.length, function () {
            return (
              "Axis = " +
              e +
              " is not in [-" +
              n.shape.length +
              ", " +
              n.shape.length +
              ")"
            );
          }),
          e < 0 && (e += n.shape.length),
          Zt.engine.runKernel(
            function (t) {
              return t.unstack(n, e);
            },
            { $x: n },
            function (t) {
              return {
                $x: function () {
                  return ua(t, e);
                },
              };
            }
          )
        );
      },
    }),
    pa = function (h, p) {
      return m(this, void 0, void 0, function () {
        var e, n, r, o, i, a, s, u, c, l;
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              return (
                (e = re(h, "x", "setdiff1d")),
                (n = re(p, "y", "setdiff1d")),
                D(e.dtype === n.dtype, function () {
                  return (
                    "x and y should have the same dtype, but got x (" +
                    e.dtype +
                    ") and y (" +
                    n.dtype +
                    ")."
                  );
                }),
                D(1 === e.rank, function () {
                  return "x should be 1D tensor, but got x (" + e.shape + ").";
                }),
                D(1 === n.rank, function () {
                  return "y should be 1D tensor, but got y (" + n.shape + ").";
                }),
                [4, e.data()]
              );
            case 1:
              return (r = t.sent()), [4, n.data()];
            case 2:
              for (o = t.sent(), i = new Set(o), c = a = 0; c < r.length; c++)
                i.has(r[c]) || a++;
              for (
                s = new lt([a], e.dtype), u = new lt([a], "int32"), l = c = 0;
                c < r.length;
                c++
              )
                i.has(r[c]) || ((s.values[l] = r[c]), (u.values[l] = c), l++);
              return [2, [s.toTensor(), u.toTensor()]];
          }
        });
      });
    };
  function fa(t, e) {
    for (var n = [], r = 0; r < e.length; r++) e[r] && n.push(r);
    var o = zi(t, "int32"),
      i = zi([n.length, t.length], "int32");
    for (r = 0; r < n.length; r++) {
      var a = o.indexToLoc(n[r]),
        s = r * t.length;
      i.values.set(a, s);
    }
    return i.toTensor();
  }
  var da = {};
  var va = (function () {
    function t(t) {
      if (
        ((this.gpgpu = t),
        (this.pendingRead = new WeakMap()),
        (this.pendingDisposal = new WeakSet()),
        (this.dataRefCount = new WeakMap()),
        (this.lruDataGPU = []),
        (this.numBytesInGPU = 0),
        (this.uploadWaitMs = 0),
        (this.downloadWaitMs = 0),
        (this.disposed = !1),
        Zt.get("WEBGL_VERSION") < 1)
      )
        throw new Error("WebGL is not supported on this device");
      if (null == t) {
        var e = l(Zt.get("WEBGL_VERSION"));
        (this.binaryCache =
          ((n = Zt.get("WEBGL_VERSION")) in da || (da[n] = {}), da[n])),
          (this.gpgpu = new Mo(e)),
          (this.canvas = e.canvas),
          (this.gpgpuCreatedLocally = !0);
      } else
        (this.binaryCache = {}),
          (this.gpgpuCreatedLocally = !1),
          (this.canvas = t.gl.canvas);
      var n;
      this.textureManager = new ui(this.gpgpu);
    }
    return (
      (t.prototype.register = function (t, e, n) {
        if (this.texData.has(t))
          throw new Error("Data buffer is already registered");
        this.texData.set(t, { shape: e, dtype: n });
      }),
      (t.prototype.setDataMover = function (t) {
        this.texData = new rn(t);
      }),
      (t.prototype.fromPixels = function (t, e) {
        if (null == t)
          throw new Error(
            "pixels passed to tf.browser.fromPixels() can not be null"
          );
        var n = [t.height, t.width],
          r = [t.height, t.width, e];
        if (Zt.get("IS_BROWSER")) {
          if (
            !(
              t instanceof HTMLVideoElement ||
              t instanceof HTMLImageElement ||
              t instanceof HTMLCanvasElement ||
              t instanceof ImageData
            )
          )
            throw new Error(
              "pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement or ImageData, but was " +
                t.constructor.name
            );
          if (t instanceof HTMLVideoElement) {
            if (null == this.fromPixels2DContext) {
              if ("complete" !== document.readyState)
                throw new Error(
                  "The DOM is not ready yet. Please call tf.browser.fromPixels() once the DOM is ready. One way to do that is to add an event listener for `DOMContentLoaded` on the document object"
                );
              this.fromPixels2DContext = document
                .createElement("canvas")
                .getContext("2d");
            }
            (this.fromPixels2DContext.canvas.width = t.width),
              (this.fromPixels2DContext.canvas.height = t.height),
              this.fromPixels2DContext.drawImage(t, 0, 0, t.width, t.height),
              (t = this.fromPixels2DContext.canvas);
          }
        }
        var o = this.makeTensorHandle(n, "int32");
        (this.texData.get(o.dataId).usage = wr.PIXELS),
          this.gpgpu.uploadPixelDataToTexture(this.getTexture(o.dataId), t);
        var i = new yr(r),
          a = this.compileAndRun(i, [o]);
        return this.disposeData(o.dataId), a;
      }),
      (t.prototype.makeTensorHandle = function (t, e) {
        var n = {};
        return this.register(n, t, e), { dataId: n, shape: t, dtype: e };
      }),
      (t.prototype.write = function (t, e) {
        if (null == e)
          throw new Error("MathBackendWebGL.write(): values can not be null");
        if (Zt.get("DEBUG"))
          for (var n = 0; n < e.length; n++) {
            var r = e[n];
            if (!Dr(r))
              throw Error(
                "The value " + r + " cannot be represented on this device."
              );
          }
        var o = this.texData.get(t),
          i = o.texture,
          a = o.texShape,
          s = o.usage,
          u = o.dtype,
          c = o.isPacked;
        if ("complex64" === u)
          throw new Error(
            "Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."
          );
        null != i &&
          (this.releaseTexture(t, i, a, s, u, c),
          (o.texture = null),
          (o.texShape = null)),
          (o.usage = wr.UPLOAD),
          (o.values = e);
      }),
      (t.prototype.readSync = function (t) {
        var e = this.texData.get(t),
          n = e.values,
          r = e.dtype,
          o = e.complexTensors,
          i = e.slice,
          a = e.shape;
        if (null != i) {
          var s = new mi(a, wi),
            u = this.compileAndRun(s, [{ dataId: t, shape: a, dtype: r }]),
            c = this.readSync(u.dataId);
          return u.dispose(), c;
        }
        if (null != n) return this.convertAndCacheOnCPU(t);
        if ("string" === r) return n;
        var l,
          h,
          p = null != this.activeTimers;
        return (
          p && (l = performance.now()),
          (h =
            "complex64" === r
              ? un(o.real.dataSync(), o.imag.dataSync())
              : this.getValuesFromTexture(t)),
          p && (this.downloadWaitMs += performance.now() - l),
          this.convertAndCacheOnCPU(t, h)
        );
      }),
      (t.prototype.read = function (S) {
        return m(this, void 0, void 0, function () {
          var e,
            n,
            r,
            o,
            i,
            a,
            s,
            u,
            c,
            l,
            h,
            p,
            f,
            d,
            v,
            m,
            g,
            y,
            x,
            w,
            b,
            E,
            C,
            _;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                if (this.pendingRead.has(S))
                  return (
                    (r = this.pendingRead.get(S)),
                    [
                      2,
                      new Promise(function (t) {
                        return r.push(t);
                      }),
                    ]
                  );
                if (
                  ((o = this.texData.get(S)),
                  (i = o.texture),
                  (a = o.values),
                  (s = o.texShape),
                  (u = o.isPacked),
                  (c = o.shape),
                  (l = o.slice),
                  (h = o.dtype),
                  null != l)
                )
                  return (
                    (p = new mi(c, wi)),
                    (f = this.compileAndRun(p, [
                      { dataId: S, shape: c, dtype: h },
                    ])),
                    (d = this.read(f.dataId)),
                    f.dispose(),
                    [2, d]
                  );
                if (null != a) return [2, this.convertAndCacheOnCPU(S)];
                if (
                  (this.pendingRead.set(S, []),
                  !Zt.get("WEBGL_DOWNLOAD_FLOAT_ENABLED") &&
                    2 === Zt.get("WEBGL_VERSION"))
                )
                  throw new Error(
                    "tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported."
                  );
                return (
                  (v = s[1]),
                  (m = s[0]),
                  u && ((e = kr(s[0], s[1])), (v = e[0]), (m = e[1])),
                  (g = this.gpgpu.maybeCreateBufferFromTexture(i, m, v)),
                  [4, this.gpgpu.createAndWaitForFence()]
                );
              case 1:
                return (
                  t.sent(),
                  (y =
                    g instanceof WebGLTexture
                      ? this.getValuesFromTexture(S)
                      : ((x = B(c)),
                        u
                          ? ((w = oo(c)),
                            (E = b = 1),
                            c.length && ((n = io(c)), (b = n[0]), (E = n[1])),
                            this.gpgpu
                              .downloadPackedMatrixFromBuffer(
                                g,
                                w,
                                b,
                                E,
                                s[0],
                                s[1]
                              )
                              .subarray(0, x))
                          : this.gpgpu
                              .downloadFloat32MatrixFromBuffer(g, s[0], s[1])
                              .subarray(0, x))),
                  (C = this.convertAndCacheOnCPU(S, y)),
                  (_ = this.pendingRead.get(S)),
                  this.pendingRead.delete(S),
                  _.forEach(function (t) {
                    return t(C);
                  }),
                  this.pendingDisposal.has(S) &&
                    (this.pendingDisposal.delete(S), this.disposeData(S)),
                  [2, C]
                );
            }
          });
        });
      }),
      (t.prototype.getValuesFromTexture = function (e) {
        var t,
          n = this,
          r = this.texData.get(e),
          o = r.shape,
          i = r.dtype,
          a = r.texture,
          s = r.texShape,
          u = B(o);
        if (Zt.get("WEBGL_DOWNLOAD_FLOAT_ENABLED")) {
          if (this.texData.get(e).isPacked) {
            var c = oo(o),
              l = 1,
              h = 1;
            return (
              o.length && ((l = (t = io(o))[0]), (h = t[1])),
              this.gpgpu
                .downloadMatrixFromPackedTexture(a, c, l, h, s[0], s[1])
                .subarray(0, u)
            );
          }
          return this.gpgpu
            .downloadFloat32MatrixFromOutputTexture(a, s[0], s[1])
            .subarray(0, u);
        }
        var p = this.makeTensorHandle(o, "float32");
        (p.size = B(o)), (this.texData.get(p.dataId).usage = wr.DOWNLOAD);
        var f = ue(function () {
            var t = new fr(o);
            return n.compileAndRun(
              t,
              [{ shape: o, dtype: i, dataId: e }],
              p,
              null,
              !1
            );
          }),
          d = this.texData.get(f.dataId),
          v = this.gpgpu
            .downloadByteEncodedFloatMatrixFromOutputTexture(
              d.texture,
              d.texShape[0],
              d.texShape[1]
            )
            .subarray(0, u);
        return this.disposeData(p.dataId), v;
      }),
      (t.prototype.time = function (u) {
        return m(this, void 0, void 0, function () {
          var e, n, r, o, i, a, s;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                return (
                  (e = this.activeTimers),
                  (r = !(n = [])),
                  null == this.programTimersStack
                    ? ((this.programTimersStack = n), (r = !0))
                    : this.activeTimers.push(n),
                  (this.activeTimers = n),
                  u(),
                  (o = x(
                    this.activeTimers.map(function (t) {
                      return t.query;
                    })
                  ).filter(function (t) {
                    return null != t;
                  })),
                  (i = x(
                    this.activeTimers.map(function (t) {
                      return t.name;
                    })
                  ).filter(function (t) {
                    return null != t;
                  })),
                  (this.activeTimers = e),
                  r && (this.programTimersStack = null),
                  [4, Promise.all(o)]
                );
              case 1:
                return (
                  (a = t.sent()),
                  (s = {
                    uploadWaitMs: this.uploadWaitMs,
                    downloadWaitMs: this.downloadWaitMs,
                    kernelMs: d(a),
                    getExtraProfileInfo: function () {
                      return a
                        .map(function (t, e) {
                          return { name: i[e], ms: t };
                        })
                        .map(function (t) {
                          return t.name + ": " + t.ms;
                        })
                        .join(", ");
                    },
                    wallMs: null,
                  }),
                  (this.uploadWaitMs = 0),
                  (this.downloadWaitMs = 0),
                  [2, s]
                );
            }
          });
        });
      }),
      (t.prototype.memory = function () {
        return { unreliable: !1, numBytesInGPU: this.numBytesInGPU };
      }),
      (t.prototype.startTimer = function () {
        return 0 < Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
          ? this.gpgpu.beginQuery()
          : { startMs: performance.now(), endMs: null };
      }),
      (t.prototype.endTimer = function (t) {
        return (
          0 < Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
            ? this.gpgpu.endQuery()
            : (t.endMs = performance.now()),
          t
        );
      }),
      (t.prototype.getQueryTime = function (n) {
        return m(this, void 0, void 0, function () {
          var e;
          return R(this, function (t) {
            return 0 < Zt.get("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")
              ? [2, this.gpgpu.waitForQueryAndGetTime(n)]
              : [2, (e = n).endMs - e.startMs];
          });
        });
      }),
      (t.prototype.disposeData = function (t) {
        if (!this.pendingDisposal.has(t))
          if (this.pendingRead.has(t)) this.pendingDisposal.add(t);
          else if (this.texData.has(t)) {
            var e = this.texData.get(t),
              n = e.texture,
              r = e.dtype,
              o = e.texShape,
              i = e.usage,
              a = e.complexTensors,
              s = e.isPacked,
              u = e.slice;
            if (null != n) {
              var c = (u && u.origDataId) || t,
                l = this.dataRefCount.get(c);
              1 < l
                ? this.dataRefCount.set(c, l - 1)
                : (this.dataRefCount.delete(c),
                  this.releaseTexture(t, n, o, i, r, s),
                  this.texData.delete(t));
            }
            null != a && (a.real.dispose(), a.imag.dispose());
          }
      }),
      (t.prototype.getTexture = function (t) {
        return this.uploadToGPU(t), this.texData.get(t).texture;
      }),
      (t.prototype.getCPUBackend = function () {
        return Zt.get("WEBGL_CPU_FORWARD")
          ? (null == this.cpuBackend &&
              (this.cpuBackend = Zt.findBackend("cpu")),
            this.cpuBackend)
          : null;
      }),
      (t.prototype.shouldExecuteOnCPU = function (t, e) {
        var n = this;
        return (
          void 0 === e && (e = 128),
          null != this.getCPUBackend() &&
            t.every(function (t) {
              return null == n.texData.get(t.dataId).texture && t.size < e;
            })
        );
      }),
      (t.prototype.getGPGPUContext = function () {
        return this.gpgpu;
      }),
      (t.prototype.getCanvas = function () {
        return this.canvas;
      }),
      (t.prototype.complex = function (t, e) {
        var n = this.makeOutputArray(t.shape, "complex64");
        return (
          (this.texData.get(n.dataId).complexTensors = {
            real: Zt.engine.keep(t.clone()),
            imag: Zt.engine.keep(e.clone()),
          }),
          n
        );
      }),
      (t.prototype.real = function (t) {
        return this.texData.get(t.dataId).complexTensors.real.clone();
      }),
      (t.prototype.imag = function (t) {
        return this.texData.get(t.dataId).complexTensors.imag.clone();
      }),
      (t.prototype.slice = function (t, e, n) {
        if (this.shouldExecuteOnCPU([t])) return this.cpuBackend.slice(t, e, n);
        var r = this.texData.get(t.dataId).isPacked,
          o = Oe(t.shape, e, n);
        if (!r && o)
          return this.uploadToGPU(t.dataId), this.shallowSlice(t, e, n);
        var i = Zt.get("WEBGL_PACK_ARRAY_OPERATIONS") ? new ai(n) : new oi(n),
          a = i.getCustomSetupFunc(e);
        return this.compileAndRun(i, [t], null, a);
      }),
      (t.prototype.shallowSlice = function (t, e, n) {
        var r = this.texData.get(t.dataId),
          o = dt.make(n, {}, t.dtype, this),
          i = this.texData.get(o.dataId);
        Object.assign(i, r), (i.shape = n), (i.dtype = t.dtype);
        var a = Pe(e, t.strides);
        r.slice && (a += r.slice.flatOffset),
          (i.slice = {
            flatOffset: a,
            origDataId: (r.slice && r.slice.origDataId) || t.dataId,
          });
        var s = this.dataRefCount.get(i.slice.origDataId) || 1;
        return this.dataRefCount.set(i.slice.origDataId, s + 1), o;
      }),
      (t.prototype.stridedSlice = function (t, e, n, r, o, i, a, s, u) {
        if (this.shouldExecuteOnCPU([t]))
          return this.cpuBackend.stridedSlice(t, e, n, r, o, i, a, s, u);
        var c = Ae(t.shape, e, n, r, o, i, a, s, u),
          l = c[0],
          h = c[1],
          p = c[2],
          f = h.filter(function (t, e) {
            return -1 === p.indexOf(e);
          });
        if (
          f.some(function (t) {
            return 0 === t;
          })
        )
          return Ge([], f);
        var d = new si(l, r, h, p);
        return this.compileAndRun(d, [t]);
      }),
      (t.prototype.reverse = function (t, e) {
        var n = Zt.get("WEBGL_PACK_ARRAY_OPERATIONS")
          ? new ti(t.shape, e)
          : new Zo(t.shape, e);
        return this.compileAndRun(n, [t]);
      }),
      (t.prototype.concat = function (t, e) {
        if (this.shouldExecuteOnCPU(t)) return this.cpuBackend.concat(t, e);
        if (1 === t.length) return t[0];
        if (t.length > Zt.get("WEBGL_MAX_TEXTURES_IN_SHADER")) {
          var n = Math.floor(t.length / 2),
            r = this.concat(t.slice(0, n), e),
            o = this.concat(t.slice(n), e);
          return this.concat([r, o], e);
        }
        if (Zt.get("WEBGL_PACK_ARRAY_OPERATIONS") && 1 < t[0].rank) {
          var i = new Jn(
            t.map(function (t) {
              return t.shape;
            }),
            e
          );
          return this.compileAndRun(i, t);
        }
        var a = Re(
            t.map(function (t) {
              return t.shape;
            }),
            e
          ),
          s = t.map(function (t) {
            return t.as2D(-1, B(t.shape.slice(e)));
          }),
          u = new Qn(
            s.map(function (t) {
              return t.shape;
            })
          );
        return this.compileAndRun(u, s).reshape(a);
      }),
      (t.prototype.neg = function (t) {
        var e = new mi(t.shape, "return -x;");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.batchMatMul = function (t, e, n, r) {
        var o = n ? t.shape[2] : t.shape[1],
          i = r ? e.shape[1] : e.shape[2],
          a = n ? t.shape[1] : t.shape[2],
          s = t.shape[0];
        if ((1 === o || 1 === i) && 1e3 < a) {
          n && (t = t.transpose([0, 2, 1])), r && (e = e.transpose([0, 2, 1]));
          var u = 1 === i ? t : t.as3D(s, a, 1),
            c = 1 === i ? 2 : 1,
            l = 1 === i ? e.as3D(s, 1, a) : e;
          return this.multiply(u, l).sum(c, !0);
        }
        var h = kt(t.dtype, e.dtype),
          p = new Wo(t.shape, [s, o, i], n, r),
          f = this.makePackedTensor(p.outputShape, h);
        return this.compileAndRun(p, [t, e], f);
      }),
      (t.prototype.fusedBatchMatMul = function (t, e, n, r, o, i) {
        var a = n ? t.shape[2] : t.shape[1],
          s = r ? e.shape[1] : e.shape[2],
          u = t.shape[0],
          c = kt(t.dtype, e.dtype),
          l = new Wo(
            t.shape,
            [u, a, s],
            n,
            r,
            !!o,
            i
              ? (function (t, e) {
                  if ((void 0 === e && (e = !1), "linear" === t))
                    return "return x;";
                  if ("relu" === t) return e ? bi : yi;
                  throw new Error(
                    "Activation " +
                      t +
                      " has not been implemented for the WebGL backend."
                  );
                })(i, !0)
              : null
          ),
          h = this.makePackedTensor(l.outputShape, c),
          p = [t, e];
        return o && p.push(o), this.compileAndRun(l, p, h);
      }),
      (t.prototype.multiply = function (t, e) {
        if ("complex64" === t.dtype) {
          var n = this.texData.get(t.dataId),
            r = this.texData.get(e.dataId),
            o = new Un(Wn, t.shape, e.shape),
            i = new Un(zn, t.shape, e.shape),
            a = [
              this.makeComplexComponentTensorHandle(t, n.complexTensors.real),
              this.makeComplexComponentTensorHandle(t, n.complexTensors.imag),
              this.makeComplexComponentTensorHandle(e, r.complexTensors.real),
              this.makeComplexComponentTensorHandle(e, r.complexTensors.imag),
            ],
            s = this.compileAndRun(o, a),
            u = this.compileAndRun(i, a),
            c = this.complex(s, u);
          return s.dispose(), u.dispose(), c;
        }
        if (this.shouldExecuteOnCPU([t, e]))
          return this.cpuBackend.multiply(t, e);
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(t, e, Hn, t.dtype);
        var l = new jn(Hn, t.shape, e.shape),
          h = this.makeOutputArray(l.outputShape, t.dtype);
        return this.compileAndRun(l, [t, e], h);
      }),
      (t.prototype.batchNormalization = function (t, e, n, r, o, i) {
        var a = [t, e, n],
          s = null;
        null != i && ((s = i.shape), a.push(i));
        var u = null;
        if (
          (null != o && ((u = o.shape), a.push(o)),
          Zt.get("WEBGL_PACK_BATCHNORMALIZATION"))
        ) {
          var c = new Bn(t.shape, e.shape, n.shape, s, u, r);
          return this.compileAndRun(c, a);
        }
        var l = new Ln(t.shape, e.shape, n.shape, s, u, r);
        return this.compileAndRun(l, a);
      }),
      (t.prototype.localResponseNormalization4D = function (t, e, n, r, o) {
        var i = new Fo(t.shape, e, n, r, o);
        return this.compileAndRun(i, [t]);
      }),
      (t.prototype.LRNGrad = function (t, e, n, r, o, i, a) {
        var s = new Lo(e.shape, r, o, i, a);
        return this.compileAndRun(s, [e, n, t]);
      }),
      (t.prototype.tile = function (t, e) {
        var n = new hi(t.shape, e);
        return this.compileAndRun(n, [t]);
      }),
      (t.prototype.pad = function (t, e, n) {
        var r = Zt.get("WEBGL_PACK_ARRAY_OPERATIONS")
          ? new Ho(t.shape, e, n)
          : new Vo(t.shape, e, n);
        return this.compileAndRun(r, [t]);
      }),
      (t.prototype.transpose = function (t, e) {
        if (this.shouldExecuteOnCPU([t]))
          return this.cpuBackend.transpose(t, e);
        var n = Zt.get("WEBGL_PACK_ARRAY_OPERATIONS")
          ? new fi(t.shape, e)
          : new pi(t.shape, e);
        return this.compileAndRun(n, [t]);
      }),
      (t.prototype.gather = function (t, e, n) {
        if (this.shouldExecuteOnCPU([t, e]))
          return this.cpuBackend.gather(t, e, n);
        var r = new xr(t.shape, e.size, n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.batchToSpaceND = function (t, e, n) {
        D(t.rank <= 4, function () {
          return "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet";
        });
        var r = e.reduce(function (t, e) {
            return t * e;
          }),
          o = de(t.shape, e, r),
          i = ve(o.length, e.length),
          a = me(t.shape, e, r),
          s = ge(n, e.length),
          u = ye(a, n, e.length);
        return t.reshape(o).transpose(i).reshape(a).slice(s, u);
      }),
      (t.prototype.spaceToBatchND = function (t, e, n) {
        D(t.rank <= 4, function () {
          return "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet";
        });
        var r = e.reduce(function (t, e) {
            return t * e;
          }),
          o = [[0, 0]];
        o.push.apply(o, n);
        for (var i = 1 + e.length; i < t.shape.length; ++i) o.push([0, 0]);
        var a = t.pad(o),
          s = de(a.shape, e, r, !1),
          u = ve(s.length, e.length, !1),
          c = me(a.shape, e, r, !1);
        return a.reshape(s).transpose(u).reshape(c);
      }),
      (t.prototype.reduce = function (t, e, n) {
        var r = t.shape[0],
          o = t.shape[1],
          i = ke(o),
          a = new jo({ windowSize: i, inSize: o, batchSize: r }, e),
          s = a.outputShape,
          u = s[0],
          c = s[1],
          l = this.makeOutputArray([u, c], n);
        return (
          this.compileAndRun(a, [t], l),
          1 === l.shape[1] ? l : this.reduce(l, e, n)
        );
      }),
      (t.prototype.argReduce = function (t, e, n) {
        void 0 === n && (n = null);
        var r = t.shape[0],
          o = t.shape[1];
        null != n && ((r = n.shape[0]), (o = n.shape[1]));
        var i = ke(o),
          a = new dn({ windowSize: i, inSize: o, batchSize: r }, e, null == n),
          s = a.outputShape,
          u = s[0],
          c = s[1],
          l = this.makeOutputArray([u, c], "int32"),
          h = [t];
        return (
          null != n && h.push(n),
          this.compileAndRun(a, h, l),
          1 === l.shape[1] ? l : this.argReduce(t, e, l)
        );
      }),
      (t.prototype.argReducePacked = function (t, e, n) {
        void 0 === n && (n = null);
        var r = null != n ? n.shape : t.shape,
          o = ke(r[r.length - 1]),
          i = new Pn(r, o, e, null == n),
          a = this.makePackedTensor(i.outputShape, "int32"),
          s = null == n ? [t] : [t, n];
        return (
          this.compileAndRun(i, s, a),
          a.rank === t.rank ? this.argReducePacked(t, e, a) : a
        );
      }),
      (t.prototype.sum = function (t, e) {
        Ee("sum", e, t.rank);
        var n = we(t.shape, e),
          r = n[0],
          o = B(n[1]),
          i = t.as2D(-1, o),
          a = It(t.dtype);
        return this.reduce(i, "sum", a).reshape(r);
      }),
      (t.prototype.prod = function (t, e) {
        if (this.shouldExecuteOnCPU([t])) return this.cpuBackend.prod(t, e);
        var n = we(t.shape, e),
          r = n[0],
          o = B(n[1]),
          i = t.as2D(-1, o),
          a = It(t.dtype);
        return this.reduce(i, "prod", a).reshape(r);
      }),
      (t.prototype.unsortedSegmentSum = function (t, e, n) {
        var r = 0,
          o = Ce([r], t.rank),
          i = t;
        null != o && ((i = t.transpose(o)), (r = Se(1, t.rank)[0]));
        var a = (function (t, e, n) {
            for (var r = [], o = t.length, i = 0; i < o; i++)
              i !== e ? r.push(t[i]) : r.push(n);
            return r;
          })(i.shape, r, n),
          s = B([i.shape[r]]),
          u = i.as2D(-1, s),
          c = It(t.dtype),
          l = this.segOpCompute(u, "unsortedSegmentSum", e, c, n).reshape(a);
        return null != o && (l = l.transpose(_e(o))), l;
      }),
      (t.prototype.segOpCompute = function (t, e, n, r, o) {
        var i = t.shape[0],
          a = t.shape[1],
          s = (function (t, e) {
            var n,
              r = !1;
            for (
              t <= 30
                ? ((n = t), (r = !0))
                : (n = $(t, Math.floor(Math.sqrt(t))));
              !r;

            )
              e < n || n === t ? (r = !0) : (n = $(t, n + 1));
            return n;
          })(a, o),
          u = new ni(
            { windowSize: s, inSize: a, batchSize: i, numSegments: o },
            e
          ),
          c = u.outputShape,
          l = c[0],
          h = c[1],
          p = this.makeOutputArray([l, h], r);
        return (
          this.compileAndRun(u, [t, n], p),
          p.shape[1] === o
            ? p
            : ((n = tn(0, o).tile([a / s])), this.segOpCompute(p, e, n, r, o))
        );
      }),
      (t.prototype.argMinMaxReduce = function (t, e, n) {
        var r = [e];
        if (
          (Ee("arg" + n.charAt(0).toUpperCase() + n.slice(1), r, t.rank),
          !Zt.get("WEBGL_PACK_REDUCE") || t.rank <= 2)
        ) {
          var o = we(t.shape, r),
            i = o[0],
            a = B(o[1]),
            s = t.as2D(-1, a);
          return this.argReduce(s, n).reshape(i);
        }
        return this.argReducePacked(t, n);
      }),
      (t.prototype.argMin = function (t, e) {
        return this.argMinMaxReduce(t, e, "min");
      }),
      (t.prototype.argMax = function (t, e) {
        return this.argMinMaxReduce(t, e, "max");
      }),
      (t.prototype.cumsum = function (t, e, n, r) {
        if (e !== t.rank - 1)
          throw new Error(
            "WebGL cumsum shader expects an inner-most axis=" +
              (t.rank - 1) +
              " but got axis=" +
              e
          );
        var o = new lr(t.shape, n, r);
        return this.compileAndRun(o, [t]);
      }),
      (t.prototype.equal = function (t, e) {
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return vec4(equal(a, b));\n",
            "bool"
          );
        var n = new jn("return float(a == b);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.notEqual = function (t, e) {
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return vec4(notEqual(a, b));\n",
            "bool"
          );
        var n = new jn("return float(a != b);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.less = function (t, e) {
        if (this.shouldExecuteOnCPU([t, e])) return this.cpuBackend.less(t, e);
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return vec4(lessThan(a, b));\n",
            "bool"
          );
        var n = new jn("return float(a < b);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.lessEqual = function (t, e) {
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return vec4(lessThanEqual(a, b));\n",
            "bool"
          );
        var n = new jn("return float(a <= b);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.greater = function (t, e) {
        if (this.shouldExecuteOnCPU([t, e]))
          return this.cpuBackend.greater(t, e);
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return vec4(greaterThan(a, b));\n",
            "bool"
          );
        var n = new jn("return float(a > b);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.greaterEqual = function (t, e) {
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return vec4(greaterThanEqual(a, b));\n",
            "bool"
          );
        var n = new jn("return float(a >= b);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.logicalNot = function (t) {
        var e = new mi(t.shape, "return float(!(x >= 1.0));");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.logicalAnd = function (t, e) {
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return vec4(\n    vec4(greaterThanEqual(a, vec4(1.0))) *\n    vec4(greaterThanEqual(b, vec4(1.0))));\n",
            "bool"
          );
        var n = new jn("return float(a >= 1.0 && b >= 1.0);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.logicalOr = function (t, e) {
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  return min(\n    vec4(greaterThanEqual(a, vec4(1.0))) +\n    vec4(greaterThanEqual(b, vec4(1.0))),\n    vec4(1.0));\n",
            "bool"
          );
        var n = new jn("return float(a >= 1.0 || b >= 1.0);", t.shape, e.shape),
          r = this.makeOutputArray(n.outputShape, "bool");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.select = function (t, e, n) {
        var r = new ri(t.rank, e.shape, e.rank),
          o = this.makeOutputArray(r.outputShape, kt(e.dtype, n.dtype));
        return this.compileAndRun(r, [t, e, n], o);
      }),
      (t.prototype.where = function (t) {
        fe(
          "tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead"
        );
        var e = t.dataSync();
        return fa(t.shape, e);
      }),
      (t.prototype.topk = function (t, e, n) {
        return fn(t.dataSync(), t.shape, t.dtype, e);
      }),
      (t.prototype.min = function (t, e) {
        Ee("min", e, t.rank);
        var n = we(t.shape, e),
          r = n[0],
          o = B(n[1]),
          i = t.as2D(-1, o);
        return this.reduce(i, "min", i.dtype).reshape(r);
      }),
      (t.prototype.minimum = function (t, e) {
        if (this.shouldExecuteOnCPU([t, e]))
          return this.cpuBackend.minimum(t, e);
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS")
          ? new $n(
              "\n  vec4 result = vec4(min(a, b));\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  \n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n\n  return result;\n",
              t.shape,
              e.shape
            )
          : new jn(
              "\n  if (isnan(a)) return a;\n  if (isnan(b)) return b;\n\n  return min(a, b);\n",
              t.shape,
              e.shape
            );
        return this.compileAndRun(n, [t, e]);
      }),
      (t.prototype.mod = function (t, e) {
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS")
          ? new $n(
              "\n  vec4 result = mod(a, b);\n  vec4 isNaN = vec4(equal(b, vec4(0.0)));\n  \n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n\n  return result;\n",
              t.shape,
              e.shape
            )
          : new jn(
              "if (b == 0.0) return NAN;\n  return mod(a, b);",
              t.shape,
              e.shape
            );
        return this.compileAndRun(n, [t, e]);
      }),
      (t.prototype.max = function (t, e) {
        if (this.shouldExecuteOnCPU([t])) return this.cpuBackend.max(t, e);
        Ee("max", e, t.rank);
        var n = we(t.shape, e),
          r = n[0],
          o = B(n[1]),
          i = t.as2D(-1, o);
        return this.reduce(i, "max", i.dtype).reshape(r);
      }),
      (t.prototype.maximum = function (t, e) {
        if (this.shouldExecuteOnCPU([t, e]))
          return this.cpuBackend.maximum(t, e);
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS")
          ? new $n(
              "\n  vec4 result = vec4(max(a, b));\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  \n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n\n  return result;\n",
              t.shape,
              e.shape
            )
          : new jn(
              "\n  if (isnan(a)) return a;\n  if (isnan(b)) return b;\n\n  return max(a, b);\n",
              t.shape,
              e.shape
            );
        return this.compileAndRun(n, [t, e]);
      }),
      (t.prototype.all = function (t, e) {
        Ee("all", e, t.rank);
        var n = we(t.shape, e),
          r = n[0],
          o = B(n[1]),
          i = t.as2D(-1, o);
        return this.reduce(i, "all", i.dtype).reshape(r);
      }),
      (t.prototype.any = function (t, e) {
        Ee("any", e, t.rank);
        var n = we(t.shape, e),
          r = n[0],
          o = B(n[1]),
          i = t.as2D(-1, o);
        return this.reduce(i, "any", i.dtype).reshape(r);
      }),
      (t.prototype.squaredDifference = function (t, e) {
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS")
          ? new $n(qn, t.shape, e.shape)
          : new jn(qn, t.shape, e.shape);
        return this.compileAndRun(n, [t, e]);
      }),
      (t.prototype.realDivide = function (t, e) {
        var n = new jn(
            "if (a == b) return 1.0;\n  return a / b;",
            t.shape,
            e.shape
          ),
          r = this.makeOutputArray(n.outputShape, "float32");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.floorDiv = function (t, e) {
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(
            t,
            e,
            "\n  vec4 resultSign = sign(a) * sign(b);\n  ivec4 ia = round(a);\n  ivec4 ib = round(b);\n  ivec4 result = ia / ib;\n  ivec4 amodb = ia - ib * result;\n\n  // Vectorize INT_DIV\n  // if (resultSign < 0.0 && amodb != 0) result -= 1;\n  // return float(result);\n  return vec4(result -\n     ivec4(lessThan(resultSign, vec4(0.0))) * ivec4(notEqual(amodb, ivec4(0))));\n",
            "int32"
          );
        var n = new jn(
            "\n  float resultSign = sign(a) * sign(b);\n  int ia = round(a);\n  int ib = round(b);\n  int result = ia / ib;\n  int amodb = ia - ib * result;\n\n  if (resultSign < 0.0 && amodb != 0) {\n    result -= 1;\n  }\n  return float(result);\n",
            t.shape,
            e.shape
          ),
          r = this.makeOutputArray(n.outputShape, "int32");
        return this.compileAndRun(n, [t, e], r);
      }),
      (t.prototype.add = function (t, e) {
        if ("complex64" === t.dtype && "complex64" === e.dtype)
          return this.complexSeparableBinaryOp(t, e, Gn);
        if (this.shouldExecuteOnCPU([t, e])) return this.cpuBackend.add(t, e);
        var n = kt(t.dtype, e.dtype);
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(t, e, Gn, n);
        var r = new jn(Gn, t.shape, e.shape),
          o = this.makeOutputArray(r.outputShape, n);
        return this.compileAndRun(r, [t, e], o);
      }),
      (t.prototype.packedBinaryOp = function (t, e, n, r) {
        var o = new $n(n, t.shape, e.shape),
          i = this.makePackedTensor(o.outputShape, r);
        return this.compileAndRun(o, [t, e], i);
      }),
      (t.prototype.complexSeparableBinaryOp = function (s, u, c) {
        var l = this,
          t = this.texData.get(s.dataId),
          e = this.texData.get(u.dataId),
          n = [
            [t.complexTensors.real, e.complexTensors.real],
            [t.complexTensors.imag, e.complexTensors.imag],
          ].map(function (t) {
            var e = t[0],
              n = t[1],
              r = l.makeComplexComponentTensorHandle(s, e),
              o = l.makeComplexComponentTensorHandle(u, n),
              i = new jn(c, s.shape, u.shape),
              a = l.makeOutputArray(i.outputShape, kt(e.dtype, n.dtype));
            return l.compileAndRun(i, [r, o], a);
          }),
          r = n[0],
          o = n[1],
          i = this.complex(r, o);
        return r.dispose(), o.dispose(), i;
      }),
      (t.prototype.makeComplexComponentTensorHandle = function (t, e) {
        return { dataId: e.dataId, dtype: e.dtype, shape: t.shape };
      }),
      (t.prototype.addN = function (t) {
        for (var e = t[0], n = 1; n < t.length; n++) e = this.add(e, t[n]);
        return e;
      }),
      (t.prototype.subtract = function (t, e) {
        if ("complex64" === t.dtype && "complex64" === e.dtype)
          return this.complexSeparableBinaryOp(t, e, Vn);
        if (this.shouldExecuteOnCPU([t, e]))
          return this.cpuBackend.subtract(t, e);
        var n = kt(t.dtype, e.dtype);
        if (Zt.get("WEBGL_PACK_BINARY_OPERATIONS"))
          return this.packedBinaryOp(t, e, Vn, t.dtype);
        var r = new jn(Vn, t.shape, e.shape),
          o = this.makeOutputArray(r.outputShape, n);
        return this.compileAndRun(r, [t, e], o);
      }),
      (t.prototype.pow = function (t, e) {
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS"),
          r = n
            ? new $n(
                "\n  // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n  vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n  vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n  vec4 result = multiplier * pow(abs(a), b);\n\n  vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n  \n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n\n  return result;\n",
                t.shape,
                e.shape
              )
            : new jn(
                "\nif(a < 0.0 && floor(b) < b){\n  return NAN;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n    pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",
                t.shape,
                e.shape
              ),
          o = kt(t.dtype, e.dtype),
          i = n
            ? this.makePackedTensor(r.outputShape, o)
            : this.makeOutputArray(r.outputShape, o);
        return this.compileAndRun(r, [t, e], i);
      }),
      (t.prototype.ceil = function (t) {
        var e = new mi(t.shape, "return ceil(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.floor = function (t) {
        var e = new mi(t.shape, "return floor(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.sign = function (t) {
        var e = new mi(
          t.shape,
          "\n  if (isnan(x)) { return 0.0; }\n  return sign(x);\n"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.isNaN = function (t) {
        var e = new mi(t.shape, "return float(isnan(x));"),
          n = this.makeOutputArray(e.outputShape, "bool");
        return this.compileAndRun(e, [t], n);
      }),
      (t.prototype.isInf = function (t) {
        var e = new mi(t.shape, "return float(isinf(x));"),
          n = this.makeOutputArray(e.outputShape, "bool");
        return this.compileAndRun(e, [t], n);
      }),
      (t.prototype.isFinite = function (t) {
        var e = new mi(t.shape, "return float(!isnan(x) && !isinf(x));"),
          n = this.makeOutputArray(e.outputShape, "bool");
        return this.compileAndRun(e, [t], n);
      }),
      (t.prototype.round = function (t) {
        var e = new mi(
          t.shape,
          "\n  // OpenGL ES does not support round function.\n  // The algorithm is based on banker's rounding.\n  float base = floor(x);\n  if ((x - base) < 0.5) {\n    return floor(x);\n  } else if ((x - base) > 0.5) {\n    return ceil(x);\n  } else {\n    if (mod(base, 2.0) == 0.0) {\n      return base;\n    } else {\n      return base + 1.0;\n    }\n  }\n"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.exp = function (t) {
        var e;
        return (
          (e = Zt.get("WEBGL_PACK")
            ? new Ei(t.shape, xi)
            : new mi(t.shape, xi)),
          this.compileAndRun(e, [t])
        );
      }),
      (t.prototype.expm1 = function (t) {
        var e = new mi(t.shape, "return exp(x) - 1.0;");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.log = function (t) {
        var e;
        return (
          (e = Zt.get("WEBGL_PACK")
            ? new Ei(
                t.shape,
                "\n  vec4 result = log(x);\n  vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n  result.r = isNaN.r == 1.0 ? NAN : result.r;\n  result.g = isNaN.g == 1.0 ? NAN : result.g;\n  result.b = isNaN.b == 1.0 ? NAN : result.b;\n  result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n  return result;\n"
              )
            : new mi(t.shape, "if (x < 0.0) return NAN;\n  return log(x);")),
          this.compileAndRun(e, [t])
        );
      }),
      (t.prototype.log1p = function (t) {
        var e = new mi(t.shape, "return log(1.0 + x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.sqrt = function (t) {
        var e = new mi(t.shape, "return sqrt(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.rsqrt = function (t) {
        if (this.shouldExecuteOnCPU([t])) return this.cpuBackend.rsqrt(t);
        var e = new mi(t.shape, "return inversesqrt(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.square = function (t) {
        var e = new mi(t.shape, "return x * x;");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.reciprocal = function (t) {
        var e = new mi(t.shape, "return 1.0 / x;");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.relu = function (t) {
        var e;
        return (
          (e = Zt.get("WEBGL_PACK")
            ? new Ei(t.shape, bi)
            : new mi(t.shape, yi)),
          this.compileAndRun(e, [t])
        );
      }),
      (t.prototype.prelu = function (t, e) {
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS")
          ? new $n(
              "\n  vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n  return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",
              t.shape,
              e.shape
            )
          : new jn("return (a < 0.) ? b * a : a;", t.shape, e.shape);
        return this.compileAndRun(n, [t, e]);
      }),
      (t.prototype.elu = function (t) {
        var e = new mi(t.shape, "return (x >= 0.0) ? x : (exp(x) - 1.0);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.eluDer = function (t, e) {
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS")
          ? new $n(
              "\n  vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n  return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",
              t.shape,
              e.shape
            )
          : new jn("return (b >= 1.0) ? a : a * (b + 1.0);", t.shape, e.shape);
        return this.compileAndRun(n, [t, e]);
      }),
      (t.prototype.selu = function (t) {
        var e = new mi(
          t.shape,
          "\n  // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n  // see: https://arxiv.org/abs/1706.02515\n  float scaleAlpha = 1.7580993408473768;\n  float scale = 1.0507009873554805;\n  return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.int = function (t) {
        var e = new mi(t.shape, "return float(int(x));"),
          n = this.makeOutputArray(e.outputShape, "int32");
        return this.compileAndRun(e, [t], n);
      }),
      (t.prototype.clip = function (t, e, n) {
        var r,
          o = (r = Zt.get("WEBGL_PACK_CLIP")
            ? new Xn(t.shape)
            : new Kn(t.shape)).getCustomSetupFunc(e, n);
        return this.compileAndRun(r, [t], null, o);
      }),
      (t.prototype.abs = function (t) {
        var e = new mi(t.shape, "return abs(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.complexAbs = function (t) {
        var e = this.texData.get(t.dataId),
          n = new Yn(t.shape),
          r = [
            this.makeComplexComponentTensorHandle(t, e.complexTensors.real),
            this.makeComplexComponentTensorHandle(t, e.complexTensors.imag),
          ];
        return this.compileAndRun(n, r);
      }),
      (t.prototype.sigmoid = function (t) {
        var e = new mi(t.shape, "return 1.0 / (1.0 + exp(-1.0 * x));");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.softplus = function (t) {
        var e = new mi(
          t.shape,
          "\n  float epsilon = 1.1920928955078125e-7;\n  float threshold = log(epsilon) + 2.0;\n\n  bool too_large = x > -threshold;\n  bool too_small = x < threshold;\n\n  float result;\n  float exp_x = exp(x);\n\n  if (too_large){\n    result = x;\n  }\n  else if (too_small){\n    result = exp_x;\n  }\n  else{\n    result = log(exp_x + 1.0);\n  }\n  return result;\n"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.sin = function (t) {
        var e = new mi(t.shape, "if (isnan(x)) return x;\n  return sin(x);\n");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.cos = function (t) {
        var e = new mi(t.shape, "if (isnan(x)) return x;\n  return cos(x);\n");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.tan = function (t) {
        var e = new mi(t.shape, "return tan(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.asin = function (t) {
        var e = new mi(t.shape, "return asin(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.acos = function (t) {
        var e = new mi(t.shape, "return acos(x);");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.atan = function (t) {
        var e = new mi(t.shape, "if (isnan(x)) return x;\n  return atan(x);\n");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.atan2 = function (t, e) {
        var n = Zt.get("WEBGL_PACK_BINARY_OPERATIONS")
          ? new $n(
              "\n  vec4 result = atan(a, b);\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  \n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n\n  return result;\n",
              t.shape,
              e.shape
            )
          : new jn(
              "\n  if (isnan(a)) return a;\n  if (isnan(b)) return b;\n\n  return atan(a, b);\n",
              t.shape,
              e.shape
            );
        return this.compileAndRun(n, [t, e]);
      }),
      (t.prototype.sinh = function (t) {
        var e = new mi(
          t.shape,
          "\n  float e2x = exp(x);\n  return (e2x - 1.0 / e2x) / 2.0;\n"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.cosh = function (t) {
        var e = new mi(
          t.shape,
          "\n  float e2x = exp(-x);\n  return (e2x + 1.0 / e2x) / 2.0;\n"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.tanh = function (t) {
        var e = new mi(
          t.shape,
          "\n  float e2x = exp(-2.0 * abs(x));\n  return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.asinh = function (t) {
        var e = new mi(t.shape, "return log(x + sqrt(x * x + 1.0));");
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.acosh = function (t) {
        var e = new mi(
          t.shape,
          "if (isnan(x)) return x;\n  if (x < 1.0) return NAN;\n  return log(x + sqrt(x * x - 1.0));"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.atanh = function (t) {
        var e = new mi(
          t.shape,
          "if (isnan(x)) return x;\n  if ((x < -1.0) || (x > 1.0)) return NAN;\n  return (log(1.0 + x) - log(1.0 - x)) / 2.0;"
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.erf = function (t) {
        var e = new mi(
          t.shape,
          '\n  // Error function is calculated approximately with elementary function.\n  // See "Handbook of Mathematical Functions with Formulas,\n  // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n  float p = 0.3275911;\n  float a1 = 0.254829592;\n  float a2 = -0.284496736;\n  float a3 = 1.421413741;\n  float a4 = -1.453152027;\n  float a5 = 1.061405429;\n\n  float t = 1.0 / (1.0 + p * x);\n  return 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);\n'
        );
        return this.compileAndRun(e, [t]);
      }),
      (t.prototype.step = function (t, e) {
        var n,
          r = new mi(
            t.shape,
            (void 0 === (n = e) && (n = 0),
            gi + "\n    return x > 0.0 ? 1.0 : float(" + n + ");\n  ")
          );
        return this.compileAndRun(r, [t]);
      }),
      (t.prototype.conv2dByMatMul = function (t, e, n) {
        var r = t.shape,
          o = this.texData.get(t.dataId),
          i = n.inChannels,
          a = r[0] * r[1] * r[2],
          s = n.outChannels,
          u = (1 === a || 1 === s) && 1e3 < i,
          c = r[2] % 2 != 0 && !!o.isPacked;
        if (
          u ||
          !Zt.get("WEBGL_LAZILY_UNPACK") ||
          !Zt.get("WEBGL_PACK_BINARY_OPERATIONS") ||
          !c
        ) {
          var l = this.reshape(t, [1, r[0] * r[1] * r[2], n.inChannels]),
            h = this.reshape(e, [1, n.inChannels, n.outChannels]);
          return this.reshape(this.batchMatMul(l, h, !1, !1), n.outShape);
        }
        var p = dt.make(
            [1, r[0] * r[1] * (r[2] + 1), n.inChannels],
            { dataId: t.dataId },
            t.dtype,
            this
          ),
          f = o.shape;
        (o.shape = o.shape.slice()),
          o.shape[o.shape.length - 2]++,
          D(uo(o.shape, p.shape), function () {
            return (
              "packed reshape " + o.shape + " to " + p.shape + " isn't free"
            );
          });
        var d = this.reshape(e, [1, n.inChannels, n.outChannels]),
          v = this.batchMatMul(p, d, !1, !1),
          m = this.texData.get(v.dataId);
        return (
          D(m.isPacked, function () {
            return "batchMatMul result is expected to be packed";
          }),
          (o.shape = f),
          (m.shape = n.outShape),
          dt.make(n.outShape, { dataId: v.dataId }, v.dtype, this)
        );
      }),
      (t.prototype.conv2dWithIm2Row = function (t, e, n) {
        var r = n.filterWidth,
          o = n.filterHeight,
          i = n.inChannels,
          a = n.outWidth,
          s = n.outHeight,
          u = r * o * i,
          c = s * a,
          l = [u, c],
          h = t.squeeze([0]),
          p = e.reshape([1, u, -1]),
          f = new Po(l, h.shape, n),
          d = this.compileAndRun(f, [h]).reshape([1, l[0], l[1]]),
          v = new Wo(d.shape, [1, c, n.outChannels], !0, !1);
        return this.compileAndRun(v, [d, p]).reshape([1, s, a, n.outChannels]);
      }),
      (t.prototype.conv2d = function (t, e, n) {
        if (
          1 === n.filterHeight &&
          1 === n.filterWidth &&
          1 === n.dilationHeight &&
          1 === n.dilationWidth &&
          1 === n.strideHeight &&
          1 === n.strideWidth &&
          ("SAME" === n.padInfo.type || "VALID" === n.padInfo.type)
        )
          return this.conv2dByMatMul(t, e, n);
        if (Zt.get("WEBGL_CONV_IM2COL") && 1 === t.shape[0])
          return this.conv2dWithIm2Row(t, e, n);
        var r = new ir(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.conv2dDerInput = function (t, e, n) {
        var r = new tr(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.conv2dDerFilter = function (t, e, n) {
        var r = new Zn(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.depthwiseConv2D = function (t, e, n) {
        var r;
        return Zt.get("WEBGL_PACK_DEPTHWISECONV") &&
          n.strideWidth <= 2 &&
          n.outChannels / n.inChannels == 1
          ? ((r = new ur(n)),
            this.compileAndRun(
              r,
              [t, e],
              this.makePackedTensor(n.outShape, t.dtype)
            ))
          : ((r = new sr(n)), this.compileAndRun(r, [t, e]));
      }),
      (t.prototype.depthwiseConv2DDerInput = function (t, e, n) {
        var r = new or(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.depthwiseConv2DDerFilter = function (t, e, n) {
        var r = new rr(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.conv3d = function (t, e, n) {
        var r = new ar(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.conv3dDerInput = function (t, e, n) {
        var r = new nr(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.conv3dDerFilter = function (t, e, n) {
        var r = new er(n);
        return this.compileAndRun(r, [t, e]);
      }),
      (t.prototype.maxPool = function (t, e) {
        var n = new qo(e, "max", !1),
          r = this.makeOutputArray(n.outputShape, t.dtype);
        return this.compileAndRun(n, [t], r);
      }),
      (t.prototype.avgPool = function (t, e) {
        var n = new qo(e, "avg", !1),
          r = this.makeOutputArray(n.outputShape, "float32");
        return this.compileAndRun(n, [t], r);
      }),
      (t.prototype.maxPoolBackprop = function (t, e, n, r) {
        var o = new qo(r, "max", !0),
          i = this.compileAndRun(o, [e]),
          a = new Bo(r),
          s = this.makeOutputArray(a.outputShape, e.dtype),
          u = this.compileAndRun(a, [t, i], s);
        return i.dispose(), u;
      }),
      (t.prototype.avgPoolBackprop = function (t, e, n) {
        var r = new Fn(n),
          o = this.makeOutputArray(r.outputShape, e.dtype);
        return this.compileAndRun(r, [t], o);
      }),
      (t.prototype.cast = function (t, e) {
        return an(t, e, this);
      }),
      (t.prototype.unstack = function (t, e) {
        for (
          var n = t.shape[e], r = new Array(t.rank - 1), o = 0, i = 0;
          i < t.rank;
          i++
        )
          i !== e && (r[o++] = t.shape[i]);
        var a = new Array(t.rank).fill(0),
          s = t.shape.slice();
        s[e] = 1;
        var u = new Array(n);
        for (i = 0; i < u.length; i++)
          u[(a[e] = i)] = this.slice(t, a, s).reshape(r);
        return u;
      }),
      (t.prototype.reshape = function (t, e) {
        var n = this.texData.get(t.dataId);
        return !n.isPacked ||
          uo(t.shape, e) ||
          (null !== n.texture && uo(n.shape, e))
          ? sn(t, e)
          : this.packedReshape(t, e);
      }),
      (t.prototype.resizeBilinear = function (t, e, n, r) {
        var o = Zt.get("WEBGL_PACK_IMAGE_OPERATIONS")
          ? new Yo(t.shape, e, n, r)
          : new Xo(t.shape, e, n, r);
        return this.compileAndRun(o, [t]);
      }),
      (t.prototype.resizeBilinearBackprop = function (t, e, n) {
        var r = new Ko(t, e, n);
        return this.compileAndRun(r, [t]);
      }),
      (t.prototype.resizeNearestNeighbor = function (t, e, n, r) {
        var o = new Jo(t.shape, e, n, r);
        return this.compileAndRun(o, [t]);
      }),
      (t.prototype.resizeNearestNeighborBackprop = function (t, e, n) {
        var r = new Qo(t, e, n);
        return this.compileAndRun(r, [t]);
      }),
      (t.prototype.multinomial = function (t, e, n, r) {
        var o = e ? t : Le(t),
          i = o.shape[0],
          a = o.shape[1],
          s = new zo(i, a, n),
          u = this.makeOutputArray(s.outputShape, "int32"),
          c = s.getCustomSetupFunc(r);
        return this.compileAndRun(s, [o], u, c);
      }),
      (t.prototype.oneHot = function (t, e, n, r) {
        var o = new Uo(t.size, e, n, r);
        return this.compileAndRun(o, [t]);
      }),
      (t.prototype.nonMaxSuppression = function (t, e, n, r, o) {
        return (
          fe(
            "tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"
          ),
          ln(t.dataSync(), e.dataSync(), n, r, o)
        );
      }),
      (t.prototype.cropAndResize = function (t, e, n, r, o, i) {
        var a = new cr(t.shape, e.shape, r, o, i);
        return this.compileAndRun(a, [t, e, n]);
      }),
      (t.prototype.depthToSpace = function (t, e, n) {
        D(1 < e, function () {
          return "blockSize should be > 1 for depthToSpace, but was: " + e;
        });
        var r = t.shape[0],
          o = "NHWC" === n ? t.shape[1] : t.shape[2],
          i = "NHWC" === n ? t.shape[2] : t.shape[3],
          a = "NHWC" === n ? t.shape[3] : t.shape[1],
          s = o * e,
          u = i * e,
          c = a / (e * e),
          l = new pr("NHWC" === n ? [r, s, u, c] : [r, c, s, u], e, n);
        return this.compileAndRun(l, [t]);
      }),
      (t.prototype.split = function (t, e, n) {
        return pn(t, e, n);
      }),
      (t.prototype.scatterND = function (t, e, n) {
        var r = Te(0, t, n),
          o = r.sliceRank,
          i = r.numUpdates,
          a = r.sliceSize,
          s = r.strides,
          u = r.outputSize,
          c = [u / a, a],
          l = t.reshape([i, o]),
          h = e.reshape([i, a]);
        if (0 === u) return sn(Ge([]), n);
        var p = Ve(0),
          f = new ei(i, o, l.rank, h.rank, s, c);
        return this.compileAndRun(f, [h, l, p]).reshape(n);
      }),
      (t.prototype.sparseToDense = function (t, e, n, r) {
        var o = Te(0, t, n),
          i = o.sliceRank,
          a = o.numUpdates,
          s = o.strides,
          u = o.outputSize,
          c = new ei(a, i, t.rank, e.rank, s, [u, 1], !1);
        return this.compileAndRun(c, [e, t, r]).reshape(n);
      }),
      (t.prototype.fft = function (t) {
        return this.fftImpl(t, !1);
      }),
      (t.prototype.ifft = function (t) {
        return this.fftImpl(t, !0);
      }),
      (t.prototype.fftImpl = function (t, e) {
        var n = this.texData.get(t.dataId),
          r = new mr(dr, t.shape, e),
          o = new mr(vr, t.shape, e),
          i = [
            this.makeComplexComponentTensorHandle(t, n.complexTensors.real),
            this.makeComplexComponentTensorHandle(t, n.complexTensors.imag),
          ],
          a = this.compileAndRun(r, i),
          s = this.compileAndRun(o, i),
          u = this.complex(a, s).as2D(t.shape[0], t.shape[1]);
        return a.dispose(), s.dispose(), u;
      }),
      (t.prototype.gatherND = function (t, e) {
        var n = e.shape,
          r = n[n.length - 1],
          o = Ne(t, e),
          i = o[0],
          a = o[1],
          s = o[2],
          u = o[3],
          c = e.reshape([a, r]),
          l = t.reshape([t.size / s, s]),
          h = new _r(r, u, [a, s]);
        return this.compileAndRun(h, [l, c]).reshape(i);
      }),
      (t.prototype.fill = function (t, e, n) {
        if ("string" === (n = n || q(e))) {
          var r = M(n, B(t));
          return r.fill(e), dt.make(t, { values: r }, n);
        }
        var o = new gr(t, e),
          i = o.getCustomSetupFunc(e),
          a = this.makeOutputArray(t, n);
        return this.compileAndRun(o, [], a, i);
      }),
      (t.prototype.onesLike = function (t) {
        if ("string" === t.dtype)
          throw new Error("onesLike is not supported under string dtype");
        return this.fill(t.shape, 1, t.dtype);
      }),
      (t.prototype.zerosLike = function (t) {
        return this.fill(t.shape, "string" === t.dtype ? "" : 0, t.dtype);
      }),
      (t.prototype.makeOutputArray = function (t, e) {
        return dt.make(t, {}, e, this);
      }),
      (t.prototype.makePackedTensor = function (t, e) {
        var n = dt.make(t, {}, e, this);
        return (this.texData.get(n.dataId).isPacked = !0), n;
      }),
      (t.prototype.unpackTensor = function (t) {
        var e = new Ci(t.shape);
        return this.compileAndRun(
          e,
          [t],
          dt.make(e.outputShape, {}, t.dtype, this)
        );
      }),
      (t.prototype.packTensor = function (t) {
        var e = new Go(t.shape);
        return this.compileAndRun(
          e,
          [t],
          this.makePackedTensor(t.shape, t.dtype)
        );
      }),
      (t.prototype.packedReshape = function (t, e) {
        var n = t.reshape([oo(t.shape)].concat(io(t.shape))),
          r = [oo(e)].concat(io(e)),
          o = new $o(r, n.shape);
        return this.compileAndRun(o, [n]).reshape(e);
      }),
      (t.prototype.compileAndRun = function (o, t, e, n, r) {
        var i = this;
        if (
          (void 0 === r && (r = !0),
          null == e &&
            (e = o.usesPackedTextures
              ? this.makePackedTensor(o.outputShape, t[0].dtype)
              : this.makeOutputArray(o.outputShape, t[0].dtype)),
          0 === e.size)
        )
          return (this.texData.get(e.dataId).values = A(e.dtype, 0)), e;
        var a = t.map(function (t) {
          if ("complex64" === t.dtype)
            throw new Error(
              "GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts."
            );
          var e = i.texData.get(t.dataId);
          if (null == e.texture) {
            if (
              !o.usesPackedTextures &&
              B(t.shape) <= Zt.get("WEBGL_SIZE_UPLOAD_UNIFORM")
            )
              return {
                shape: t.shape,
                texData: null,
                isUniform: !0,
                uniformValues: i.readSync(t.dataId),
              };
            o.usesPackedTextures && ((e.isPacked = !0), (e.shape = t.shape));
          } else if (!!e.isPacked != !!o.usesPackedTextures)
            (t = e.isPacked ? i.unpackTensor(t) : i.packTensor(t)),
              (e = i.texData.get(t.dataId));
          else if (e.isPacked && !uo(e.shape, t.shape)) {
            var n = t,
              r = t.shape;
            (t.shape = e.shape),
              (t = i.packedReshape(t, r)),
              (e = i.texData.get(t.dataId)),
              (n.shape = r);
          }
          return (
            i.uploadToGPU(t.dataId),
            { shape: t.shape, texData: e, isUniform: !1 }
          );
        });
        this.uploadToGPU(e.dataId);
        var s,
          u = {
            shape: e.shape,
            texData: this.texData.get(e.dataId),
            isUniform: !1,
          },
          c = (function (t, e, n) {
            var r = "";
            e.concat(n).forEach(function (t) {
              var e =
                  null != t.texData &&
                  null != t.texData.slice &&
                  0 < t.texData.slice.flatOffset,
                n = t.isUniform ? "uniform" : t.texData.texShape;
              r += t.shape + "_" + n + "_" + e;
            });
            var o = t.userCode;
            return t.constructor.name + "_" + r + "_" + o;
          })(o, a, u),
          l = this.getAndSaveBinary(c, function () {
            return (function (t, r, e, n) {
              var o = r.userCode,
                i = e.map(function (t, e) {
                  var n = {
                    logicalShape: t.shape,
                    texShape: t.isUniform ? null : t.texData.texShape,
                    isUniform: t.isUniform,
                    isPacked: !t.isUniform && t.texData.isPacked,
                    flatOffset: null,
                  };
                  return (
                    null != t.texData &&
                      null != t.texData.slice &&
                      0 < t.texData.slice.flatOffset &&
                      (n.flatOffset = t.texData.slice.flatOffset),
                    { name: r.variableNames[e], shapeInfo: n }
                  );
                }),
                a = i.map(function (t) {
                  return t.shapeInfo;
                }),
                s = {
                  logicalShape: n.shape,
                  texShape: n.texData.texShape,
                  isUniform: !1,
                  isPacked: n.texData.isPacked,
                  flatOffset: null,
                },
                u = Cn(i, s, o, r.usesPackedTextures),
                c = t.createProgram(u),
                l = null,
                h = null;
              1 === Zt.get("WEBGL_VERSION") &&
                ((l = t.getUniformLocation(c, "INFINITY", !1)),
                (h = t.getUniformLocation(c, "NAN", !1)));
              for (var p = {}, f = 0; f < r.variableNames.length; f++) {
                var d = r.variableNames[f];
                (p[d] = t.getUniformLocation(c, d, !1)),
                  (p["offset" + d] = t.getUniformLocation(c, "offset" + d, !1));
              }
              return {
                program: r,
                source: u,
                webGLProgram: c,
                uniformLocations: p,
                inShapeInfos: a,
                outShapeInfo: s,
                infLoc: l,
                nanLoc: h,
              };
            })(i.gpgpu, o, a, u);
          }),
          h = null != this.activeTimers;
        h && (s = this.startTimer()),
          (function (a, s, t, e, n) {
            Oo(s.inShapeInfos, t), Oo([s.outShapeInfo], [e]);
            var r = e.texData.texture,
              o = e.texData.texShape;
            e.texData.isPacked
              ? a.setOutputPackedMatrixTexture(r, o[0], o[1])
              : a.setOutputMatrixTexture(r, o[0], o[1]),
              a.setProgram(s.webGLProgram),
              1 === Zt.get("WEBGL_VERSION") &&
                (null !== s.infLoc && a.gl.uniform1f(s.infLoc, 1 / 0),
                null !== s.nanLoc && a.gl.uniform1f(s.nanLoc, NaN)),
              t.forEach(function (t, e) {
                var n = s.program.variableNames[e],
                  r = s.uniformLocations[n],
                  o = s.uniformLocations["offset" + n];
                if (null != r)
                  if (t.isUniform)
                    if (B(t.shape) < 2) a.gl.uniform1f(r, t.uniformValues[0]);
                    else {
                      var i = t.uniformValues;
                      i instanceof Float32Array || (i = new Float32Array(i)),
                        a.gl.uniform1fv(r, i);
                    }
                  else
                    null != t.texData.slice &&
                      null != o &&
                      a.gl.uniform1i(o, t.texData.slice.flatOffset),
                      a.setInputMatrixTexture(t.texData.texture, r, e);
              }),
              null != n && n(a, s.webGLProgram),
              a.executeProgram();
          })(this.gpgpu, l, a, u, n);
        var p = 1024 * Zt.get("WEBGL_NUM_MB_BEFORE_PAGING");
        if (r && this.numBytesInGPU > p)
          for (
            var f = this.numBytesInGPU - p;
            0 < f && 0 < this.lruDataGPU.length;

          ) {
            var d = this.lruDataGPU.shift(),
              v = this.texData.get(d),
              m = v.texShape,
              g = v.dtype;
            (f -= this.computeBytes(m, g)), this.read(d);
          }
        return (
          h &&
            ((s = this.endTimer(s)),
            this.activeTimers.push({
              name: o.constructor.name,
              query: this.getQueryTime(s),
            })),
          Zt.get("WEBGL_LAZILY_UNPACK") ||
          !this.texData.get(e.dataId).isPacked ||
          o.isPackShader
            ? e
            : this.unpackTensor(e)
        );
      }),
      (t.prototype.getAndSaveBinary = function (t, e) {
        return (
          t in this.binaryCache || (this.binaryCache[t] = e()),
          this.binaryCache[t]
        );
      }),
      (t.prototype.getTextureManager = function () {
        return this.textureManager;
      }),
      (t.prototype.dispose = function () {
        this.disposed ||
          (this.textureManager.dispose(),
          this.canvas.remove(),
          null != this.fromPixels2DContext &&
            this.fromPixels2DContext.canvas.remove(),
          this.gpgpuCreatedLocally &&
            ((this.gpgpu.program = null), this.gpgpu.dispose()),
          (this.disposed = !0));
      }),
      (t.prototype.floatPrecision = function () {
        var n = this;
        return ue(function () {
          var t = Zt.get("DEBUG");
          Zt.set("DEBUG", !1);
          var e = n.abs(Ve(1e-8)).dataSync()[0];
          return Zt.set("DEBUG", t), 0 < e ? 32 : 16;
        });
      }),
      (t.prototype.uploadToGPU = function (t) {
        var e,
          n = this.texData.get(t),
          r = n.shape,
          o = n.dtype,
          i = n.values,
          a = n.texture,
          s = n.usage,
          u = n.isPacked;
        if (null == a) {
          var c,
            l = null != this.activeTimers;
          l && (c = performance.now());
          var h = ao(r, u);
          n.texShape = h;
          var p = this.acquireTexture(t, h, s, o, u);
          if (((n.texture = p), null != i)) {
            if (u) {
              var f = oo(r),
                d = 1,
                v = 1;
              r.length && ((d = (e = io(r))[0]), (v = e[1])),
                this.gpgpu.uploadMatrixToPackedTexture(
                  p,
                  f,
                  d,
                  v,
                  h[0],
                  h[1],
                  ma(i)
                );
            } else this.gpgpu.uploadMatrixToTexture(p, h[0], h[1], ma(i));
            (n.values = null),
              l && (this.uploadWaitMs += performance.now() - c);
          }
        } else
          Zt.get("WEBGL_NUM_MB_BEFORE_PAGING") < Number.POSITIVE_INFINITY &&
            0 <= this.lruDataGPU.indexOf(t) &&
            (this.lruDataGPU.splice(this.lruDataGPU.indexOf(t), 1),
            this.lruDataGPU.push(t));
      }),
      (t.prototype.convertAndCacheOnCPU = function (t, e) {
        var n = this.texData.get(t),
          r = n.texture,
          o = n.texShape,
          i = n.dtype,
          a = n.usage,
          s = n.isPacked;
        return (
          null != r &&
            (this.releaseTexture(t, r, o, a, i, s),
            (n.texture = null),
            (n.texShape = null),
            (n.isPacked = !1)),
          (n.usage = wr.UPLOAD),
          null != e &&
            (n.values = (function (t, e) {
              if ("float32" === e || "complex64" === e) return t;
              if ("int32" !== e && "bool" !== e)
                throw new Error("Unknown dtype " + e);
              for (
                var n =
                    "int32" === e
                      ? new Int32Array(t.length)
                      : new Uint8Array(t.length),
                  r = 0;
                r < n.length;
                ++r
              )
                n[r] = Math.round(t[r]);
              return n;
            })(e, i)),
          n.values
        );
      }),
      (t.prototype.releaseTexture = function (t, e, n, r, o, i) {
        if (Zt.get("WEBGL_NUM_MB_BEFORE_PAGING") < Number.POSITIVE_INFINITY) {
          var a = this.lruDataGPU.indexOf(t);
          0 <= a && this.lruDataGPU.splice(a, 1);
        }
        (this.numBytesInGPU -= this.computeBytes(n, o)),
          this.textureManager.releaseTexture(e, n, r, i);
      }),
      (t.prototype.acquireTexture = function (t, e, n, r, o) {
        return (
          Zt.get("WEBGL_NUM_MB_BEFORE_PAGING") < Number.POSITIVE_INFINITY &&
            this.lruDataGPU.push(t),
          (this.numBytesInGPU += this.computeBytes(e, r)),
          this.textureManager.acquireTexture(e, n, o)
        );
      }),
      (t.prototype.computeBytes = function (t, e) {
        return t[0] * t[1] * U(e);
      }),
      t
    );
  })();
  function ma(t) {
    return t instanceof Float32Array ? t : new Float32Array(t);
  }
  Zt.get("IS_BROWSER") &&
    Zt.registerBackend(
      "webgl",
      function () {
        return new va();
      },
      2
    );
  var ga = Fe({
      abs_: function (t) {
        var r = re(t, "x", "abs");
        return "complex64" === r.dtype
          ? Zt.engine.runKernel(
              function (t) {
                return t.complexAbs(r);
              },
              { $x: r }
            )
          : Zt.engine.runKernel(
              function (t, e) {
                var n = t.abs(r);
                return e([r]), n;
              },
              { $x: r },
              function (t, e) {
                var n = e[0];
                return {
                  $x: function () {
                    return t.mul(n.toFloat().step(-1));
                  },
                };
              }
            );
      },
    }),
    ya = Fe({
      acos_: function (t) {
        var r = re(t, "x", "acos");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.acos(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t
                  .divStrict(Ve(1).sub(n.toFloat().square()).sqrt())
                  .neg();
              },
            };
          }
        );
      },
    }),
    xa = Fe({
      acosh_: function (t) {
        var r = re(t, "x", "acosh");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.acosh(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.divStrict(n.toFloat().square().sub(1).sqrt());
              },
            };
          }
        );
      },
    }),
    wa = Fe({
      asin_: function (t) {
        var r = re(t, "x", "asin");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.asin(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.divStrict(Ve(1).sub(n.toFloat().square()).sqrt());
              },
            };
          }
        );
      },
    }),
    ba = Fe({
      asinh_: function (t) {
        var r = re(t, "x", "asinh");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.asinh(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.divStrict(Ve(1).add(n.toFloat().square()).sqrt());
              },
            };
          }
        );
      },
    }),
    Ea = Fe({
      atan_: function (t) {
        var r = re(t, "x", "atan");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.atan(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(n.toFloat().square().add(1));
              },
            };
          }
        );
      },
    }),
    Ca = Fe({
      atanh_: function (t) {
        var r = re(t, "x", "atanh");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.atanh(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(Ve(1).sub(n.toFloat().square()));
              },
            };
          }
        );
      },
    }),
    _a = Fe({
      ceil_: function (t) {
        var e = re(t, "x", "ceil");
        return Zt.engine.runKernel(
          function (t) {
            return t.ceil(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Sa = Fe({
      clipByValue_: function (t, r, o) {
        var i = re(t, "x", "clipByValue");
        return (
          D(r <= o, function () {
            return (
              "Error in clip: min (" +
              r +
              ") must be less than or equal to max (" +
              o +
              ")."
            );
          }),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.clip(i, r, o);
              return e([i]), n;
            },
            { $x: i },
            function (t, e) {
              var n = e[0];
              return {
                $x: function () {
                  return t.where(
                    n.greaterEqual(r).logicalAnd(n.lessEqual(o)),
                    nn(t)
                  );
                },
              };
            }
          )
        );
      },
    }),
    Ra = Fe({
      cos_: function (t) {
        var r = re(t, "x", "cos");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.cos(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return n.toFloat().sin().neg().mul(t);
              },
            };
          }
        );
      },
    }),
    Na = Fe({
      cosh_: function (t) {
        var r = re(t, "x", "cosh");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.cosh(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return n.toFloat().sinh().mulStrict(t);
              },
            };
          }
        );
      },
    }),
    ka = Fe({
      erf_: function (t) {
        var r = re(t, "x", "erf");
        return (
          D("int32" === r.dtype || "float32" === r.dtype, function () {
            return "Input dtype must be `int32` or `float32`.";
          }),
          "int32" === r.dtype && (r = r.toFloat()),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.erf(r);
              return e([r]), n;
            },
            { $x: r },
            function (t, e) {
              var n = e[0];
              return {
                $x: function () {
                  return t.mul(
                    n
                      .square()
                      .neg()
                      .exp()
                      .mul(2 / Math.sqrt(Math.PI))
                  );
                },
              };
            }
          )
        );
      },
    }),
    Ia = Fe({
      exp_: function (t) {
        var r = re(t, "x", "exp");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.exp(r);
            return e([n]), n;
          },
          { $x: r },
          function (t, e) {
            return {
              $x: function () {
                return t.mulStrict(e[0]);
              },
            };
          }
        );
      },
    }),
    Ta = Fe({
      expm1_: function (t) {
        var r = re(t, "x", "expm1");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.expm1(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.mul(n.exp());
              },
            };
          }
        );
      },
    }),
    Aa = Fe({
      floor_: function (t) {
        var e = re(t, "x", "floor");
        return Zt.engine.runKernel(
          function (t) {
            return t.floor(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Da = Fe({
      log_: function (t) {
        var r = re(t, "x", "log");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.log(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(n.toFloat());
              },
            };
          }
        );
      },
    }),
    Ma = Fe({
      log1p_: function (t) {
        var r = re(t, "x", "log1p");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.log1p(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(n.add(1));
              },
            };
          }
        );
      },
    }),
    Oa = Fe({
      logSigmoid_: function (t) {
        var r = re(t, "x", "logSigmoid");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.softplus(r.neg()).neg();
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.mul(n.neg().sigmoid());
              },
            };
          }
        );
      },
    }),
    Pa = Fe({
      neg_: function (t) {
        var e = re(t, "x", "neg");
        return Zt.engine.runKernel(
          function (t) {
            return t.neg(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return t.neg();
              },
            };
          }
        );
      },
    }),
    Fa = Fe({
      reciprocal_: function (t) {
        var r = re(t, "x", "reciprocal");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.reciprocal(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(n.square().neg());
              },
            };
          }
        );
      },
    }),
    La = Fe({
      round_: function (t) {
        var e = re(t, "x", "round");
        return Zt.engine.runKernel(
          function (t) {
            return t.round(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Ba = Fe({
      rsqrt_: function (t) {
        var r = re(t, "x", "rsqrt");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.rsqrt(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(n.pow(1.5).mul(2)).neg();
              },
            };
          }
        );
      },
    }),
    Wa = Fe({
      sigmoid_: function (t) {
        var r = re(t, "x", "sigmoid");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.sigmoid(r);
            return e([n]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.mul(n.mul(Ve(1).sub(n)));
              },
            };
          }
        );
      },
    }),
    za = Fe({
      sign_: function (t) {
        var e = re(t, "x", "sign");
        return Zt.engine.runKernel(
          function (t) {
            return t.sign(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Ua = Fe({
      isNaN_: function (t) {
        var e = re(t, "x", "isNaN");
        return Zt.engine.runKernel(
          function (t) {
            return t.isNaN(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Ga = Fe({
      isInf_: function (t) {
        var e = re(t, "x", "isInf");
        return Zt.engine.runKernel(
          function (t) {
            return t.isInf(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Va = Fe({
      isFinite_: function (t) {
        var e = re(t, "x", "isFinite");
        return Zt.engine.runKernel(
          function (t) {
            return t.isFinite(e);
          },
          { $x: e },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Ha = Fe({
      sin_: function (t) {
        var r = re(t, "x", "sin");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.sin(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return n.toFloat().cos().mul(t);
              },
            };
          }
        );
      },
    }),
    qa = Fe({
      sinh_: function (t) {
        var r = re(t, "x", "sinh");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.sinh(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return n.toFloat().cosh().mulStrict(t);
              },
            };
          }
        );
      },
    }),
    ja = Fe({
      softplus_: function (t) {
        var r = re(t, "x", "softplus");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.softplus(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.mul(n.sigmoid());
              },
            };
          }
        );
      },
    }),
    $a = Fe({
      sqrt_: function (t) {
        var r = re(t, "x", "sqrt");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.sqrt(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(n.toFloat().sqrt().mul(2));
              },
            };
          }
        );
      },
    }),
    Ka = Fe({
      square_: function (t) {
        var n = re(t, "x", "square");
        return Zt.engine.runKernel(
          function (t, e) {
            return e([n]), t.square(n);
          },
          { $x: n },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.mul(n.toFloat().mul(2));
              },
            };
          }
        );
      },
    }),
    Xa = Fe({
      step_: function (t, e) {
        void 0 === e && (e = 0);
        var n = re(t, "x", "step");
        return Zt.engine.runKernel(
          function (t) {
            return t.step(n, e);
          },
          { $x: n },
          function (t) {
            return {
              $x: function () {
                return nn(t);
              },
            };
          }
        );
      },
    }),
    Ya = Fe({
      tan_: function (t) {
        var r = re(t, "x", "tan");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.tan(r);
            return e([r]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return t.div(n.cos().square());
              },
            };
          }
        );
      },
    }),
    Qa = Fe({
      tanh_: function (t) {
        var r = re(t, "x", "tanh");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.tanh(r);
            return e([n]), n;
          },
          { $x: r },
          function (t, e) {
            var n = e[0];
            return {
              $x: function () {
                return Ve(1).sub(n.square()).mulStrict(t);
              },
            };
          }
        );
      },
    });
  function Ja(t, e, n, r, o, i) {
    var a,
      s,
      u = re(t, "x", "batchNorm"),
      c = re(e, "mean", "batchNorm"),
      l = re(n, "variance", "batchNorm");
    return (
      null != o && (a = re(o, "scale", "batchNorm")),
      null != r && (s = re(r, "offset", "batchNorm")),
      D(2 === u.rank, function () {
        return (
          "Error in batchNorm3D: x must be rank 3 but got rank " + u.rank + "."
        );
      }),
      D(2 === c.rank || 1 === c.rank, function () {
        return (
          "Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank " +
          c.rank +
          "."
        );
      }),
      D(2 === l.rank || 1 === l.rank, function () {
        return (
          "Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank " +
          l.rank +
          "."
        );
      }),
      null != a &&
        D(2 === a.rank || 1 === a.rank, function () {
          return (
            "Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank " +
            a.rank +
            "."
          );
        }),
      null != s &&
        D(2 === s.rank || 1 === s.rank, function () {
          return (
            "Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank " +
            s.rank +
            "."
          );
        }),
      es(u, c, l, s, a, i)
    );
  }
  function Za(t, e, n, r, o, i) {
    var a,
      s,
      u = re(t, "x", "batchNorm"),
      c = re(e, "mean", "batchNorm"),
      l = re(n, "variance", "batchNorm");
    return (
      null != o && (a = re(o, "scale", "batchNorm")),
      null != r && (s = re(r, "offset", "batchNorm")),
      D(3 === u.rank, function () {
        return (
          "Error in batchNorm3D: x must be rank 3 but got rank " + u.rank + "."
        );
      }),
      D(3 === c.rank || 1 === c.rank, function () {
        return (
          "Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank " +
          c.rank +
          "."
        );
      }),
      D(3 === l.rank || 1 === l.rank, function () {
        return (
          "Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank " +
          l.rank +
          "."
        );
      }),
      null != a &&
        D(3 === a.rank || 1 === a.rank, function () {
          return (
            "Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank " +
            a.rank +
            "."
          );
        }),
      null != s &&
        D(3 === s.rank || 1 === s.rank, function () {
          return (
            "Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank " +
            s.rank +
            "."
          );
        }),
      es(u, c, l, s, a, i)
    );
  }
  function ts(t, e, n, r, o, i) {
    var a,
      s,
      u = re(t, "x", "batchNorm"),
      c = re(e, "mean", "batchNorm"),
      l = re(n, "variance", "batchNorm");
    return (
      null != o && (a = re(o, "scale", "batchNorm")),
      null != r && (s = re(r, "offset", "batchNorm")),
      D(4 === u.rank, function () {
        return (
          "Error in batchNorm4D: x must be rank 4 but got rank " + u.rank + "."
        );
      }),
      D(4 === c.rank || 1 === c.rank, function () {
        return (
          "Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank " +
          c.rank +
          "."
        );
      }),
      D(4 === l.rank || 1 === l.rank, function () {
        return (
          "Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank " +
          l.rank +
          "."
        );
      }),
      null != a &&
        D(4 === a.rank || 1 === a.rank, function () {
          return (
            "Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank " +
            a.rank +
            "."
          );
        }),
      null != s &&
        D(4 === s.rank || 1 === s.rank, function () {
          return (
            "Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank " +
            s.rank +
            "."
          );
        }),
      es(u, c, l, s, a, i)
    );
  }
  function es(t, e, n, r, o, d) {
    null == d && (d = 0.001);
    var i,
      a,
      v,
      s = re(t, "x", "batchNorm"),
      u = re(e, "mean", "batchNorm"),
      c = re(n, "variance", "batchNorm");
    return (
      null != o && (i = re(o, "scale", "batchNorm")),
      null != r && (a = re(r, "offset", "batchNorm")),
      D(u.rank === c.rank, function () {
        return "Batch normalization gradient requires mean and variance to have equal ranks.";
      }),
      D(null == a || u.rank === a.rank, function () {
        return "Batch normalization gradient requires mean and offset to have equal ranks.";
      }),
      D(null == i || u.rank === i.rank, function () {
        return "Batch normalization gradient requires mean and scale to have equal ranks.";
      }),
      (v =
        0 === s.rank || 1 === s.rank
          ? s.as4D(1, 1, 1, s.size)
          : 2 === s.rank
          ? s.as4D(1, 1, s.shape[0], s.shape[1])
          : 3 === s.rank
          ? s.as4D(1, s.shape[0], s.shape[1], s.shape[2])
          : s),
      Zt.engine
        .runKernel(
          function (t, e) {
            var n = t.batchNormalization(v, ns(u), ns(c), d, ns(i), ns(a));
            return e([s, u, c, i]), n;
          },
          { $x: s, $mean: u, $variance: c, $scale: i, $offset: a },
          function (n, t) {
            var e = t[0],
              r = t[1],
              o = t[2],
              i = t[3],
              a = null == i ? Ve(1) : i,
              s = yn(r.shape, v.shape),
              u = [];
            if (1 === r.rank) {
              for (var c = 0; c < v.shape.length - 1; ++c) u.push(v.shape[c]);
              u.push(1);
            }
            var l = e.sub(r),
              h = n.mul(a),
              p = Ba(o.add(Ve(d))),
              f = p.mul(p).mul(p).mul(Ve(-0.5));
            return {
              $x: function () {
                return 1 === r.rank
                  ? n
                      .mul(ca(p.as4D(1, 1, 1, r.shape[0]), u))
                      .mul(a)
                      .reshape(e.shape)
                  : n.mul(p).mul(a).reshape(e.shape);
              },
              $mean: function () {
                var t = p.mul(Ve(-1)).mul(h);
                return 1 === r.rank && (t = t.sum(s)), t.reshape(r.shape);
              },
              $variance: function () {
                var t = f.mul(l).mul(h);
                return 1 === r.rank && (t = t.sum(s)), t.reshape(r.shape);
              },
              $scale: function () {
                var t = l.mul(p),
                  e = n.mul(t);
                return 1 === r.rank && (e = e.sum(s)), e.reshape(r.shape);
              },
              $offset: function () {
                var t = n;
                return 1 === r.rank && (t = t.sum(s)), t.reshape(r.shape);
              },
            };
          }
        )
        .reshape(s.shape)
    );
  }
  function ns(t) {
    return null == t
      ? null
      : 0 === t.rank
      ? t.as1D()
      : 1 === t.rank
      ? t
      : 2 === t.rank
      ? t.as4D(1, 1, t.shape[0], t.shape[1])
      : 3 === t.rank
      ? t.as4D(1, t.shape[0], t.shape[1], t.shape[2])
      : t;
  }
  function rs() {
    Qt(
      "tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon"
    );
  }
  var os = Fe({
      batchNormalization2d_: function (t, e, n, r, o, i) {
        return void 0 === r && (r = 0.001), rs(), Ja(t, e, n, i, o, r);
      },
    }),
    is = Fe({
      batchNormalization3d_: function (t, e, n, r, o, i) {
        return void 0 === r && (r = 0.001), rs(), Za(t, e, n, i, o, r);
      },
    }),
    as = Fe({
      batchNormalization4d_: function (t, e, n, r, o, i) {
        return void 0 === r && (r = 0.001), rs(), ts(t, e, n, i, o, r);
      },
    }),
    ss = Fe({
      batchNormalization_: function (t, e, n, r, o, i) {
        return void 0 === r && (r = 0.001), rs(), es(t, e, n, i, o, r);
      },
    }),
    us = Fe({ batchNorm_: es }),
    cs = Fe({ batchNorm2d_: Ja }),
    ls = Fe({ batchNorm3d_: Za }),
    hs = Fe({ batchNorm4d_: ts });
  function ps(t, e, n, r, o, i, a) {
    void 0 === a && (a = "channelsLast");
    var s,
      u = vs(e),
      c = u[0],
      l = u[1];
    if ("channelsLast" === a) s = [c, l, t[3], t[3]];
    else {
      if ("channelsFirst" !== a) throw new Error("Unknown dataFormat " + a);
      s = [c, l, t[1], t[1]];
    }
    return fs(t, s, n, r, o, i, !1, a);
  }
  function fs(t, e, n, r, o, i, a, s) {
    void 0 === a && (a = !1), void 0 === s && (s = "channelsLast");
    var u = [-1, -1, -1, -1],
      c = u[0],
      l = u[1],
      h = u[2],
      p = u[3];
    if ("channelsLast" === s) (c = t[0]), (l = t[1]), (h = t[2]), (p = t[3]);
    else {
      if ("channelsFirst" !== s) throw new Error("Unknown dataFormat " + s);
      (c = t[0]), (p = t[1]), (l = t[2]), (h = t[3]);
    }
    var f,
      d = e[0],
      v = e[1],
      m = e[3],
      g = vs(n),
      y = g[0],
      x = g[1],
      w = vs(r),
      b = w[0],
      E = w[1],
      C = gs(d, b),
      _ = gs(v, E),
      S = (function (t, e, n, r, o, i, a, s) {
        var u, c, l;
        if ("number" == typeof t) {
          u = {
            top: t,
            bottom: t,
            left: t,
            right: t,
            type: 0 === t ? "VALID" : "NUMBER",
          };
          var h = (function (t, e, n, r, o, i) {
            null == o &&
              (o = (function (t, e, n, r) {
                void 0 === r && (r = 1);
                var o = gs(e, r);
                return Math.floor((t[0] * (n - 1) - n + o) / 2);
              })(t, e, r));
            var a = t[0],
              s = t[1],
              u = ys((a - e + 2 * o) / r + 1, i);
            D(T(u), function () {
              return (
                "The output # of rows (" +
                u +
                ") must be an integer. Change the stride and/or zero pad parameters"
              );
            });
            var c = ys((s - e + 2 * o) / r + 1, i);
            return (
              D(T(c), function () {
                return (
                  "The output # of columns (" +
                  c +
                  ") must be an integer. Change the stride and/or zero pad parameters"
                );
              }),
              [u, c, n]
            );
          })([e, n, 1], i, 1, r, t, s);
          (c = h[0]), (l = h[1]);
        } else if ("same" === t) {
          (c = Math.ceil(e / r)), (l = Math.ceil(n / o));
          var p = Math.max(0, (c - 1) * r + i - e),
            f = Math.max(0, (l - 1) * o + a - n),
            d = Math.floor(p / 2),
            v = p - d,
            m = Math.floor(f / 2);
          u = { top: d, bottom: v, left: m, right: f - m, type: "SAME" };
        } else {
          if ("valid" !== t) throw Error("Unknown padding parameter: " + t);
          (u = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }),
            (c = Math.ceil((e - i + 1) / r)),
            (l = Math.ceil((n - a + 1) / o));
        }
        return { padInfo: u, outHeight: c, outWidth: l };
      })(o, l, h, y, x, C, _, i),
      R = S.padInfo,
      N = S.outHeight,
      k = S.outWidth,
      I = a ? m * p : m;
    return (
      "channelsFirst" === s
        ? (f = [c, I, N, k])
        : "channelsLast" === s && (f = [c, N, k, I]),
      {
        batchSize: c,
        dataFormat: s,
        inHeight: l,
        inWidth: h,
        inChannels: p,
        outHeight: N,
        outWidth: k,
        outChannels: I,
        padInfo: R,
        strideHeight: y,
        strideWidth: x,
        filterHeight: d,
        filterWidth: v,
        effectiveFilterHeight: C,
        effectiveFilterWidth: _,
        dilationHeight: b,
        dilationWidth: E,
        inShape: t,
        outShape: f,
        filterShape: e,
      }
    );
  }
  function ds(t, e, n, r, o, i, a) {
    void 0 === i && (i = !1), void 0 === a && (a = "channelsLast");
    var s = [-1, -1, -1, -1, -1],
      u = s[0],
      c = s[1],
      l = s[2],
      h = s[3],
      p = s[4];
    if ("channelsLast" === a)
      (u = t[0]), (c = t[1]), (l = t[2]), (h = t[3]), (p = t[4]);
    else {
      if ("channelsFirst" !== a) throw new Error("Unknown dataFormat " + a);
      (u = t[0]), (p = t[1]), (c = t[2]), (l = t[3]), (h = t[4]);
    }
    var f,
      d = e[0],
      v = e[1],
      m = e[2],
      g = e[4],
      y = ms(n),
      x = y[0],
      w = y[1],
      b = y[2],
      E = ms(r),
      C = E[0],
      _ = E[1],
      S = E[2],
      R = (function (t, e, n, r, o, i, a, s, u, c) {
        var l, h, p, f;
        if ("same" === t) {
          var d = ((h = Math.ceil(e / o)) - 1) * o + s - e,
            v = ((p = Math.ceil(n / i)) - 1) * i + u - n,
            m = ((f = Math.ceil(r / a)) - 1) * a + c - r,
            g = Math.floor(d / 2),
            y = d - g,
            x = Math.floor(v / 2),
            w = v - x,
            b = Math.floor(m / 2);
          l = {
            top: x,
            bottom: w,
            left: b,
            right: m - b,
            front: g,
            back: y,
            type: "SAME",
          };
        } else {
          if ("valid" !== t) throw Error("Unknown padding parameter: " + t);
          (l = {
            top: 0,
            bottom: 0,
            left: 0,
            right: 0,
            front: 0,
            back: 0,
            type: "VALID",
          }),
            (h = Math.ceil((e - s + 1) / o)),
            (p = Math.ceil((n - u + 1) / i)),
            (f = Math.ceil((r - c + 1) / a));
        }
        return { padInfo: l, outDepth: h, outHeight: p, outWidth: f };
      })(o, c, l, h, x, w, b, gs(d, C), gs(v, _), gs(m, S)),
      N = R.padInfo,
      k = R.outDepth,
      I = R.outHeight,
      T = R.outWidth,
      A = i ? g * p : g;
    return (
      "channelsFirst" === a
        ? (f = [u, A, k, I, T])
        : "channelsLast" === a && (f = [u, k, I, T, A]),
      {
        batchSize: u,
        dataFormat: a,
        inDepth: c,
        inHeight: l,
        inWidth: h,
        inChannels: p,
        outDepth: k,
        outHeight: I,
        outWidth: T,
        outChannels: A,
        padInfo: N,
        strideDepth: x,
        strideHeight: w,
        strideWidth: b,
        filterDepth: d,
        filterHeight: v,
        filterWidth: m,
        dilationDepth: C,
        dilationHeight: _,
        dilationWidth: S,
        inShape: t,
        outShape: f,
        filterShape: e,
      }
    );
  }
  function vs(t) {
    return "number" == typeof t ? [t, t] : t;
  }
  function ms(t) {
    return "number" == typeof t ? [t, t, t] : t;
  }
  function gs(t, e) {
    return e <= 1 ? t : t + (t - 1) * (e - 1);
  }
  function ys(t, e) {
    if (!e) return t;
    switch (e) {
      case "round":
        return Math.round(t);
      case "ceil":
        return Math.ceil(t);
      case "floor":
        return Math.floor(t);
      default:
        throw new Error("Unknown roundingMode " + e);
    }
  }
  function xs(t) {
    var e = vs(t),
      n = e[0],
      r = e[1];
    return 1 === n && 1 === r;
  }
  function ws(t, e) {
    return xs(t) || xs(e);
  }
  function bs(t, e, r, o, i, a) {
    D(t.length === e.rank, function () {
      return (
        "Length of inShape (" +
        t.length +
        ") and rank of dy (" +
        e.rank +
        ") must match"
      );
    });
    var n = t,
      s = e,
      u = !1;
    3 === e.rank &&
      ((u = !0),
      (s = e.as4D(1, e.shape[0], e.shape[1], e.shape[2])),
      (n = [1, t[0], t[1], t[2]]));
    var c = n[3],
      l = s.shape[3];
    D(4 === n.length, function () {
      return (
        "Error in conv2dDerInput: inShape must be length 4, but got length " +
        n.length +
        "."
      );
    }),
      D(4 === s.rank, function () {
        return (
          "Error in conv2dDerInput: dy must be rank 4, but got rank " + s.rank
        );
      }),
      D(4 === r.rank, function () {
        return (
          "Error in conv2dDerInput: filter must be rank 4, but got rank " +
          r.rank
        );
      }),
      D(c === r.shape[2], function () {
        return (
          "Error in conv2dDerInput: depth of input (" +
          c +
          ") must match input depth for filter " +
          r.shape[2] +
          "."
        );
      }),
      D(l === r.shape[3], function () {
        return (
          "Error in conv2dDerInput: depth of output (" +
          l +
          ") must match output depth for filter " +
          r.shape[3] +
          "."
        );
      }),
      null != a &&
        D(T(i), function () {
          return (
            "Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode " +
            a +
            " but got pad " +
            i +
            "."
          );
        });
    var h = fs(n, r.shape, o, 1, i, a),
      p = Zt.engine.runKernel(
        function (t, e) {
          var n = t.conv2dDerInput(s, r, h);
          return e([r, s]), n;
        },
        { dy4D: s, filter: r },
        function (t, e) {
          var n = e[0],
            r = e[1];
          return {
            dy4D: function () {
              return Ss(t, n, o, i, "NHWC", 1, a);
            },
            filter: function () {
              return Ns(t, r, n.shape, o, i, a);
            },
          };
        }
      );
    return u ? p.as3D(p.shape[1], p.shape[2], p.shape[3]) : p;
  }
  function Es(t, e, n, r, o, i) {
    var a = t;
    3 === t.rank && (a = t.as4D(1, t.shape[0], t.shape[1], t.shape[2]));
    var s = e;
    3 === s.rank && (s = e.as4D(1, e.shape[0], e.shape[1], e.shape[2])),
      D(4 === a.rank, function () {
        return (
          "Error in conv2dDerFilter: input must be rank 4, but got shape " +
          a.shape +
          "."
        );
      }),
      D(4 === s.rank, function () {
        return (
          "Error in conv2dDerFilter: dy must be rank 4, but got shape " +
          s.shape +
          "."
        );
      }),
      D(4 === n.length, function () {
        return (
          "Error in conv2dDerFilter: filterShape must be length 4, but got " +
          n +
          "."
        );
      }),
      D(a.shape[3] === n[2], function () {
        return (
          "Error in conv2dDerFilter: depth of input " +
          a.shape[3] +
          ") must match input depth in filter (" +
          n[2] +
          "."
        );
      }),
      D(s.shape[3] === n[3], function () {
        return (
          "Error in conv2dDerFilter: depth of dy (" +
          s.shape[3] +
          ") must match output depth for filter (" +
          n[3] +
          ")."
        );
      }),
      null != i &&
        D(T(o), function () {
          return (
            "Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode " +
            i +
            " but got pad " +
            o +
            "."
          );
        });
    var u = fs(a.shape, n, r, 1, o, i);
    return Zt.engine.runKernel(
      function (t) {
        return t.conv2dDerFilter(a, s, u);
      },
      { x4D: a, dy4D: s }
    );
  }
  function Cs(t) {
    var e,
      n =
        "number" == typeof (e = t)
          ? [e, e, e]
          : 2 === e.length
          ? [e[0], e[1], 1]
          : e,
      r = n[0],
      o = n[1],
      i = n[2];
    return 1 === r && 1 === o && 1 === i;
  }
  var _s = Fe({
      conv1d_: function (t, e, n, r, o, i, a) {
        void 0 === o && (o = "NWC"), void 0 === i && (i = 1);
        var s = re(t, "x", "conv1d"),
          u = re(e, "filter", "conv1d"),
          c = s,
          l = !1;
        2 === s.rank && ((l = !0), (c = s.as3D(1, s.shape[0], s.shape[1]))),
          D(3 === c.rank, function () {
            return (
              "Error in conv1d: input must be rank 3, but got rank " +
              c.rank +
              "."
            );
          }),
          D(3 === u.rank, function () {
            return (
              "Error in conv1d: filter must be rank 3, but got rank " +
              u.rank +
              "."
            );
          }),
          null != a &&
            D(T(r), function () {
              return (
                "Error in conv1d: pad must be an integer when using, dimRoundingMode " +
                a +
                " but got pad " +
                r +
                "."
              );
            }),
          D(c.shape[2] === u.shape[1], function () {
            return (
              "Error in conv1d: depth of input (" +
              c.shape[2] +
              ") must match input depth for filter " +
              u.shape[1] +
              "."
            );
          }),
          D(ws(n, i), function () {
            return (
              "Error in conv1D: Either stride or dilation must be 1. Got stride " +
              n +
              " and dilation '" +
              i +
              "'"
            );
          }),
          D("NWC" === o, function () {
            return (
              "Error in conv1d: got dataFormat of " +
              o +
              " but only NWC is currently supported."
            );
          });
        var h = u.as4D(1, u.shape[0], u.shape[1], u.shape[2]),
          p = c.as4D(c.shape[0], 1, c.shape[1], c.shape[2]),
          f = Ss(p, h, [1, n], r, "NHWC", [1, i], a);
        return l
          ? f.as2D(f.shape[2], f.shape[3])
          : f.as3D(f.shape[0], f.shape[2], f.shape[3]);
      },
    }),
    Ss = Fe({
      conv2d_: function (t, e, i, a, n, s, r) {
        void 0 === n && (n = "NHWC"), void 0 === s && (s = [1, 1]);
        var o = re(t, "x", "conv2d"),
          u = re(e, "filter", "conv2d"),
          c = o,
          l = !1;
        3 === o.rank &&
          ((l = !0), (c = o.as4D(1, o.shape[0], o.shape[1], o.shape[2]))),
          D(4 === c.rank, function () {
            return (
              "Error in conv2d: input must be rank 4, but got rank " +
              c.rank +
              "."
            );
          }),
          D(4 === u.rank, function () {
            return (
              "Error in conv2d: filter must be rank 4, but got rank " +
              u.rank +
              "."
            );
          }),
          null != r &&
            D(T(a), function () {
              return (
                "Error in conv2d: pad must be an integer when using, dimRoundingMode " +
                r +
                " but got pad " +
                a +
                "."
              );
            }),
          D(c.shape[3] === u.shape[2], function () {
            return (
              "Error in conv2d: depth of input (" +
              c.shape[3] +
              ") must match input depth for filter " +
              u.shape[2] +
              "."
            );
          }),
          D(ws(i, s), function () {
            return (
              "Error in conv2D: Either strides or dilations must be 1. Got strides " +
              i +
              " and dilations '" +
              s +
              "'"
            );
          }),
          D("NHWC" === n, function () {
            return (
              "Error in conv2d: got dataFormat of " +
              n +
              " but only NHWC is currently supported."
            );
          });
        var h = fs(c.shape, u.shape, i, s, a, r),
          p = Zt.engine.runKernel(
            function (t, e) {
              var n = t.conv2d(c, u, h);
              return e([u, c]), n;
            },
            { x: c, $filter: u },
            function (t, e) {
              var n = e,
                r = n[0],
                o = n[1];
              return (
                D(xs(s), function () {
                  return (
                    "Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '" +
                    s +
                    "'"
                  );
                }),
                {
                  x: function () {
                    return bs(o.shape, t, r, i, a);
                  },
                  $filter: function () {
                    return Es(o, t, r.shape, i, a);
                  },
                }
              );
            }
          );
        return l ? p.as3D(p.shape[1], p.shape[2], p.shape[3]) : p;
      },
    }),
    Rs = Fe({
      conv3d_: function (t, e, o, i, n, a) {
        void 0 === n && (n = "NHWC"), void 0 === a && (a = [1, 1, 1]);
        var r,
          s = re(t, "x", "conv3d"),
          u = re(e, "filter", "conv3d"),
          c = s,
          l = !1;
        4 === s.rank &&
          ((l = !0),
          (c = s.as5D(1, s.shape[0], s.shape[1], s.shape[2], s.shape[3]))),
          D(5 === c.rank, function () {
            return (
              "Error in conv3d: input must be rank 5, but got rank " +
              c.rank +
              "."
            );
          }),
          D(5 === u.rank, function () {
            return (
              "Error in conv3d: filter must be rank 5, but got rank " +
              u.rank +
              "."
            );
          }),
          D(c.shape[4] === u.shape[3], function () {
            return (
              "Error in conv3d: depth of input (" +
              c.shape[4] +
              ") must match input depth for filter " +
              u.shape[3] +
              "."
            );
          }),
          D(((r = a), Cs(o) || Cs(r)), function () {
            return (
              "Error in conv3D: Either strides or dilations must be 1. Got strides " +
              o +
              " and dilations '" +
              a +
              "'"
            );
          }),
          D("NHWC" === n, function () {
            return (
              "Error in conv3d: got dataFormat of " +
              n +
              " but only NHWC is currently supported."
            );
          });
        var h = ds(c.shape, u.shape, o, a, i),
          p = Zt.engine.runKernel(
            function (t, e) {
              var n = t.conv3d(c, u, h);
              return e([c, u]), n;
            },
            { x: c, $filter: u },
            function (t, e) {
              D(Cs(a), function () {
                return (
                  "Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '" +
                  a +
                  "'"
                );
              });
              var n = e[0],
                r = e[1];
              return {
                x: function () {
                  return (function (t, e, n, r, o) {
                    D(t.length === e.rank, function () {
                      return (
                        "Length of inShape (" +
                        t.length +
                        ") and rank of dy (" +
                        e.rank +
                        ") must match"
                      );
                    });
                    var i = t,
                      a = e,
                      s = !1;
                    4 === e.rank &&
                      ((s = !0),
                      (a = e.as5D(
                        1,
                        e.shape[0],
                        e.shape[1],
                        e.shape[2],
                        e.shape[3]
                      )),
                      (i = [1, t[0], t[1], t[2], t[3]]));
                    var u = i[4],
                      c = a.shape[4];
                    D(5 === i.length, function () {
                      return (
                        "Error in conv3dDerInput: inShape must be length 5, but got length " +
                        i.length +
                        "."
                      );
                    }),
                      D(5 === a.rank, function () {
                        return (
                          "Error in conv3dDerInput: dy must be rank 5, but got rank " +
                          a.rank
                        );
                      }),
                      D(5 === n.rank, function () {
                        return (
                          "Error in conv3dDerInput: filter must be rank 5, but got rank " +
                          n.rank
                        );
                      }),
                      D(u === n.shape[3], function () {
                        return (
                          "Error in conv3dDerInput: depth of input (" +
                          u +
                          ") must match input depth for filter " +
                          n.shape[3] +
                          "."
                        );
                      }),
                      D(c === n.shape[4], function () {
                        return (
                          "Error in conv3dDerInput: depth of output (" +
                          c +
                          ") must match output depth for filter " +
                          n.shape[4] +
                          "."
                        );
                      });
                    var l = ds(i, n.shape, r, 1, o),
                      h = Zt.engine.runKernel(
                        function (t) {
                          return t.conv3dDerInput(a, n, l);
                        },
                        { dy5D: a }
                      );
                    return s
                      ? h.as4D(h.shape[1], h.shape[2], h.shape[3], h.shape[4])
                      : h;
                  })(n.shape, t, r, o, i);
                },
                $filter: function () {
                  return (function (t, e, n, r, o) {
                    var i = t;
                    4 === t.rank &&
                      (i = t.as5D(
                        1,
                        t.shape[0],
                        t.shape[1],
                        t.shape[2],
                        t.shape[3]
                      ));
                    var a = e;
                    4 === a.rank &&
                      (a = e.as5D(
                        1,
                        e.shape[0],
                        e.shape[1],
                        e.shape[2],
                        e.shape[3]
                      )),
                      D(5 === i.rank, function () {
                        return (
                          "Error in conv3dDerFilter: input must be rank 5, but got shape " +
                          i.shape +
                          "."
                        );
                      }),
                      D(5 === a.rank, function () {
                        return (
                          "Error in conv3dDerFilter: dy must be rank 5, but got shape " +
                          a.shape +
                          "."
                        );
                      }),
                      D(5 === n.length, function () {
                        return (
                          "Error in conv3dDerFilter: filterShape must be length 5, but got " +
                          n +
                          "."
                        );
                      }),
                      D(i.shape[4] === n[3], function () {
                        return (
                          "Error in conv3dDerFilter: depth of input " +
                          i.shape[4] +
                          ") must match input depth in filter (" +
                          n[3] +
                          "."
                        );
                      }),
                      D(a.shape[4] === n[4], function () {
                        return (
                          "Error in conv3dDerFilter: depth of dy (" +
                          a.shape[4] +
                          ") must match output depth for filter (" +
                          n[4] +
                          ")."
                        );
                      });
                    var s = ds(i.shape, n, r, 1, o);
                    return Zt.engine.runKernel(
                      function (t) {
                        return t.conv3dDerFilter(i, a, s);
                      },
                      { x5D: i, dy5D: a }
                    );
                  })(n, t, r.shape, o, i);
                },
              };
            }
          );
        return l ? p.as4D(p.shape[1], p.shape[2], p.shape[3], p.shape[4]) : p;
      },
    }),
    Ns = Fe({ conv2dDerFilter_: Es }),
    ks = Fe({
      depthwiseConv2d_: function (t, e, n, r, o, i, a) {
        void 0 === o && (o = "NHWC"), void 0 === i && (i = [1, 1]);
        var s = re(t, "x", "depthwiseConv2d"),
          u = re(e, "filter", "depthwiseConv2d"),
          c = s,
          l = !1;
        3 === s.rank &&
          ((l = !0), (c = s.as4D(1, s.shape[0], s.shape[1], s.shape[2]))),
          D(4 === c.rank, function () {
            return (
              "Error in depthwiseConv2d: input must be rank 4, but got rank " +
              c.rank +
              "."
            );
          }),
          D(4 === u.rank, function () {
            return (
              "Error in depthwiseConv2d: filter must be rank 4, but got rank " +
              u.rank +
              "."
            );
          }),
          D(c.shape[3] === u.shape[2], function () {
            return (
              "Error in depthwiseConv2d: number of input channels (" +
              c.shape[3] +
              ") must match the inChannels dimension in filter " +
              u.shape[2] +
              "."
            );
          }),
          null == i && (i = [1, 1]),
          D(ws(n, i), function () {
            return (
              "Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides " +
              n +
              " and dilations '" +
              i +
              "'"
            );
          }),
          null != a &&
            D(T(r), function () {
              return (
                "Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode " +
                a +
                " but got pad " +
                r +
                "."
              );
            });
        var h = fs(c.shape, u.shape, n, i, r, a, !0),
          p = Zt.engine.runKernel(
            function (t, e) {
              var n = t.depthwiseConv2D(c, u, h);
              return e([c, u]), n;
            },
            { x: c, $filter: u },
            function (t, e) {
              D(xs(i), function () {
                return (
                  "Error in gradient of depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '" +
                  i +
                  "'"
                );
              });
              var n = e[0],
                r = e[1];
              return {
                x: function () {
                  return (function (t, e, n, r) {
                    var o = e,
                      i = !1;
                    3 === e.rank &&
                      ((i = !0),
                      (o = e.as4D(1, e.shape[0], e.shape[1], e.shape[2])));
                    var a = Zt.engine.runKernel(
                      function (t) {
                        return t.depthwiseConv2DDerInput(o, n, r);
                      },
                      { dy4D: o }
                    );
                    return i ? a.as3D(a.shape[1], a.shape[2], a.shape[3]) : a;
                  })(n.shape, t, r, h);
                },
                $filter: function () {
                  return (function (t, e, n, r) {
                    var o = t;
                    3 === t.rank &&
                      (o = t.as4D(1, t.shape[0], t.shape[1], t.shape[2]));
                    var i = e;
                    return (
                      3 === i.rank &&
                        (i = e.as4D(1, e.shape[0], e.shape[1], e.shape[2])),
                      Zt.engine.runKernel(
                        function (t) {
                          return t.depthwiseConv2DDerFilter(o, i, r);
                        },
                        { x4D: o, dy4D: i }
                      )
                    );
                  })(n, t, r.shape, h);
                },
              };
            }
          );
        return l ? p.as3D(p.shape[1], p.shape[2], p.shape[3]) : p;
      },
    }),
    Is = Fe({
      separableConv2d_: function (t, e, n, r, o, i, a) {
        void 0 === i && (i = [1, 1]), void 0 === a && (a = "NHWC");
        var s = re(t, "x", "separableConv2d"),
          u = re(e, "depthwiseFilter", "separableConv2d"),
          c = re(n, "pointwiseFilter", "separableConv2d"),
          l = s,
          h = !1;
        if (
          (3 === s.rank &&
            ((h = !0), (l = s.as4D(1, s.shape[0], s.shape[1], s.shape[2]))),
          "NCHW" === a)
        )
          throw new Error(
            "separableConv2d currently does not support dataFormat NCHW; only NHWC is supported"
          );
        D(4 === l.rank, function () {
          return (
            "Error in separableConv2d: input must be rank 4, but got rank " +
            l.rank +
            "."
          );
        }),
          D(4 === u.rank, function () {
            return (
              "Error in separableConv2d: depthwise filter must be rank 4, but got rank " +
              u.rank +
              "."
            );
          }),
          D(4 === c.rank, function () {
            return (
              "Error in separableConv2d: pointwise filter must be rank 4, but got rank " +
              u.rank +
              "."
            );
          }),
          D(1 === c.shape[0], function () {
            return (
              "Error in separableConv2d: the first dimension of pointwise filter  must be 1, but got " +
              c.shape[0] +
              "."
            );
          }),
          D(1 === c.shape[1], function () {
            return (
              "Error in separableConv2d: the second dimension of pointwise filter must be 1, but got " +
              c.shape[1] +
              "."
            );
          });
        var p = u.shape[2],
          f = u.shape[3];
        D(c.shape[2] === p * f, function () {
          return (
            "Error in separableConv2d: the third dimension of pointwise filter must be " +
            p * f +
            ", but got " +
            c.shape[2] +
            "."
          );
        });
        var d = ks(l, u, r, o, a, i),
          v = Ss(d, c, 1, "valid", a);
        return h ? v.as3D(v.shape[1], v.shape[2], v.shape[3]) : v;
      },
    }),
    Ts = Fe({
      conv2dTranspose_: function (t, e, n, r, o, i) {
        return bs(
          n,
          re(t, "x", "conv2dTranspose"),
          re(e, "filter", "conv2dTranspose"),
          r,
          o,
          i
        );
      },
    });
  var As = Fe({
      matMul_: function (t, e, i, a) {
        var n;
        void 0 === i && (i = !1), void 0 === a && (a = !1);
        var r = re(t, "a", "matMul"),
          o = re(e, "b", "matMul");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var s = i ? r.shape[r.rank - 2] : r.shape[r.rank - 1],
          u = a ? o.shape[o.rank - 1] : o.shape[o.rank - 2],
          c = i ? r.shape[r.rank - 1] : r.shape[r.rank - 2],
          l = a ? o.shape[o.rank - 2] : o.shape[o.rank - 1],
          h = r.shape.slice(0, -2),
          p = o.shape.slice(0, -2),
          f = B(h),
          d = B(p);
        D(2 <= r.rank && 2 <= o.rank && r.rank === o.rank, function () {
          return (
            "Error in matMul: inputs must have the same rank of at least 2, got ranks " +
            r.rank +
            " and " +
            o.rank +
            "."
          );
        }),
          D(E(h, p), function () {
            return (
              "Error in matMul: outer dimensions (" +
              h +
              ") and (" +
              p +
              ") of Tensors with shapes " +
              r.shape +
              " and " +
              o.shape +
              " must match."
            );
          }),
          D(s === u, function () {
            return (
              "Error in matMul: inner shapes (" +
              s +
              ") and (" +
              u +
              ") of Tensors with shapes " +
              r.shape +
              " and " +
              o.shape +
              " and transposeA=" +
              i +
              " and transposeB=" +
              a +
              " must match."
            );
          });
        var v = r.shape.slice(0, -2).concat([c, l]),
          m = i ? r.as3D(f, s, c) : r.as3D(f, c, s),
          g = a ? o.as3D(d, l, u) : o.as3D(d, u, l);
        return Zt.engine
          .runKernel(
            function (t, e) {
              var n = t.batchMatMul(m, g, i, a);
              return e([m, g]), n;
            },
            { $a: m, $b: g },
            function (t, e) {
              var n = e,
                r = n[0],
                o = n[1];
              return i || a
                ? !i && a
                  ? {
                      $a: function () {
                        return t.matMul(o, !1, !1);
                      },
                      $b: function () {
                        return t.matMul(r, !0, !1);
                      },
                    }
                  : i && !a
                  ? {
                      $a: function () {
                        return o.matMul(t, !1, !0);
                      },
                      $b: function () {
                        return r.matMul(t, !1, !1);
                      },
                    }
                  : {
                      $a: function () {
                        return o.matMul(t, !0, !0);
                      },
                      $b: function () {
                        return t.matMul(r, !0, !0);
                      },
                    }
                : {
                    $a: function () {
                      return t.matMul(o, !1, !0);
                    },
                    $b: function () {
                      return r.matMul(t, !0, !1);
                    },
                  };
            }
          )
          .reshape(v);
      },
    }),
    Ds = Fe({
      dot_: function (t, e) {
        var n = re(t, "t1", "dot"),
          r = re(e, "t2", "dot");
        D(
          !((1 !== n.rank && 2 !== n.rank) || (1 !== r.rank && 2 !== r.rank)),
          function () {
            return (
              "Error in dot: inputs must all be rank 1 or 2, but got ranks " +
              n.rank +
              " and " +
              r.rank +
              "."
            );
          }
        );
        var o = 1 === n.rank ? n.size : n.shape[1],
          i = 1 === r.rank ? r.size : r.shape[0];
        return (
          D(o === i, function () {
            return (
              "Error in dot: inner dimensions of inputs must match, but got " +
              o +
              " and " +
              i +
              "."
            );
          }),
          1 === n.rank && 1 === r.rank
            ? n.as2D(1, -1).matMul(r.as2D(-1, 1)).asScalar()
            : 1 === n.rank && 2 === r.rank
            ? n.as2D(1, -1).matMul(r.as2D(r.shape[0], r.shape[1])).as1D()
            : 2 === n.rank && 1 === r.rank
            ? n.matMul(r.as2D(-1, 1)).as1D()
            : n.matMul(r.as2D(r.shape[0], r.shape[1]))
        );
      },
    }),
    Ms = Fe({
      outerProduct_: function (t, e) {
        var n = re(t, "v1", "outerProduct"),
          r = re(e, "v2", "outerProduct");
        return (
          D(1 === n.rank && 1 === r.rank, function () {
            return (
              "Error in outerProduct: inputs must be rank 1, but got ranks " +
              n.rank +
              " and " +
              r.rank +
              "."
            );
          }),
          n.as2D(-1, 1).matMul(r.as2D(1, -1))
        );
      },
    });
  var Os = Fe({
      reverse_: function (t, e) {
        var n = re(t, "x", "reverse");
        if (0 === n.rank) return n.clone();
        var r = k(e, n.shape);
        return Zt.engine
          .runKernel(
            function (t) {
              return t.reverse(n, r);
            },
            { $x: n },
            function (t) {
              return {
                $x: function () {
                  return t.reverse(r);
                },
              };
            }
          )
          .reshapeAs(n);
      },
    }),
    Ps = Fe({
      reverse1d_: function (t) {
        var e = re(t, "x", "reverse");
        return (
          D(1 === e.rank, function () {
            return (
              "Error in reverse1D: x must be rank 1 but got rank " +
              e.rank +
              "."
            );
          }),
          Os(e, 0)
        );
      },
    }),
    Fs = Fe({
      reverse2d_: function (t, e) {
        var n = re(t, "x", "reverse");
        return (
          D(2 === n.rank, function () {
            return (
              "Error in reverse2D: x must be rank 2 but got rank " +
              n.rank +
              "."
            );
          }),
          Os(n, e)
        );
      },
    }),
    Ls = Fe({
      reverse3d_: function (t, e) {
        var n = re(t, "x", "reverse");
        return (
          D(3 === n.rank, function () {
            return (
              "Error in reverse3D: x must be rank 3 but got rank " +
              n.rank +
              "."
            );
          }),
          Os(n, e)
        );
      },
    }),
    Bs = Fe({
      reverse4d_: function (t, e) {
        var n = re(t, "x", "reverse");
        return (
          D(4 === n.rank, function () {
            return (
              "Error in reverse4D: x must be rank 4 but got rank " +
              n.rank +
              "."
            );
          }),
          Os(n, e)
        );
      },
    });
  function Ws(t, o, i, a, s, e) {
    var n = re(t, "x", "maxPool"),
      r = n,
      u = !1;
    3 === n.rank &&
      ((u = !0), (r = n.as4D(1, n.shape[0], n.shape[1], n.shape[2]))),
      null == a && (a = [1, 1]),
      D(4 === r.rank, function () {
        return (
          "Error in maxPool: input must be rank 4 but got rank " + r.rank + "."
        );
      }),
      D(ws(i, a), function () {
        return (
          "Error in maxPool: Either strides or dilations must be 1. Got strides " +
          i +
          " and dilations '" +
          a +
          "'"
        );
      }),
      null != e &&
        D(T(s), function () {
          return (
            "Error in maxPool: pad must be an integer when using, dimRoundingMode " +
            e +
            " but got pad " +
            s +
            "."
          );
        });
    var c = ps(r.shape, o, i, a, s, e),
      l = Zt.engine.runKernel(
        function (t, e) {
          var n = t.maxPool(r, c);
          return e([r, n]), n;
        },
        { x: r },
        function (t, e) {
          var n = e[0],
            r = e[1];
          return {
            x: function () {
              return (function (t, e, n, r, o, i, a, s) {
                var u = re(t, "dy", "maxPoolBackprop"),
                  c = re(e, "input", "maxPoolBackprop"),
                  l = re(n, "output", "maxPoolBackprop");
                D(c.rank === u.rank, function () {
                  return (
                    "Rank of input (" +
                    c.rank +
                    ") does not match rank of dy (" +
                    u.rank +
                    ")"
                  );
                }),
                  null == i && (i = [1, 1]),
                  D(ws(o, i), function () {
                    return (
                      "Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides " +
                      o +
                      " and dilations '" +
                      i +
                      "'"
                    );
                  }),
                  D(4 === u.rank, function () {
                    return (
                      "Error in maxPoolBackprop: dy must be rank 4 but got rank " +
                      u.rank +
                      "."
                    );
                  }),
                  D(4 === c.rank, function () {
                    return (
                      "Error in maxPoolBackprop: input must be rank 4 but got rank " +
                      c.rank +
                      "."
                    );
                  }),
                  null != s &&
                    D(T(a), function () {
                      return (
                        "Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode " +
                        s +
                        " but got pad " +
                        a +
                        "."
                      );
                    });
                var h = ps(c.shape, r, o, i, a, s);
                return Zt.engine.runKernel(
                  function (t) {
                    return t.maxPoolBackprop(u, c, l, h);
                  },
                  { $dy: u, $input: c }
                );
              })(t, n, r, o, i, a, s);
            },
          };
        }
      );
    return u ? l.as3D(l.shape[1], l.shape[2], l.shape[3]) : l;
  }
  function zs(t, e, n, r, o, i) {
    var a = re(t, "x", "avgPool", "float32");
    null == r && (r = [1, 1]),
      D(ws(n, r), function () {
        return (
          "Error in avgPool: Either strides or dilations must be 1. Got strides " +
          n +
          " and dilations '" +
          r +
          "'"
        );
      });
    var s = a,
      u = !1;
    3 === a.rank &&
      ((u = !0), (s = a.as4D(1, a.shape[0], a.shape[1], a.shape[2]))),
      D(4 === s.rank, function () {
        return (
          "Error in avgPool: x must be rank 4 but got rank " + s.rank + "."
        );
      }),
      null != i &&
        D(T(o), function () {
          return (
            "Error in avgPool: pad must be an integer when using, dimRoundingMode " +
            i +
            " but got pad " +
            o +
            "."
          );
        });
    var c = ps(s.shape, e, n, r, o, i),
      l = Zt.engine.runKernel(
        function (t) {
          return t.avgPool(s, c);
        },
        { x: s },
        function (t) {
          return {
            x: function () {
              return (function (t, e, n, r, o, i) {
                var a = re(t, "dy", "avgPoolBackprop"),
                  s = re(e, "input", "avgPoolBackprop");
                D(s.rank === a.rank, function () {
                  return (
                    "Rank of input (" +
                    s.rank +
                    ") does not match rank of dy (" +
                    a.rank +
                    ")"
                  );
                }),
                  null == o && (o = [1, 1]),
                  D(ws(r, o), function () {
                    return (
                      "Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides " +
                      r +
                      " and dilations '" +
                      o +
                      "'"
                    );
                  });
                var u = s,
                  c = a,
                  l = !1;
                3 === s.rank &&
                  ((l = !0),
                  (u = s.as4D(1, s.shape[0], s.shape[1], s.shape[2])),
                  (c = a.as4D(1, a.shape[0], a.shape[1], a.shape[2]))),
                  D(4 === c.rank, function () {
                    return (
                      "Error in avgPoolBackprop: dy must be rank 4 but got rank " +
                      c.rank +
                      "."
                    );
                  }),
                  D(4 === u.rank, function () {
                    return (
                      "Error in avgPoolBackprop: input must be rank 4 but got rank " +
                      u.rank +
                      "."
                    );
                  });
                var h = ps(u.shape, n, r, o, i),
                  p = Zt.engine.runKernel(
                    function (t) {
                      return t.avgPoolBackprop(c, u, h);
                    },
                    { dy4D: c, input4D: u }
                  );
                return l ? p.as3D(p.shape[1], p.shape[2], p.shape[3]) : p;
              })(t, s, e, n, r, o);
            },
          };
        }
      );
    return (
      (l = l.cast(a.dtype)), u ? l.as3D(l.shape[1], l.shape[2], l.shape[3]) : l
    );
  }
  var Us = Fe({
      maxPool_: function (t, e, n, r, o) {
        return Ws(t, e, n, 1, r, o);
      },
    }),
    Gs = Fe({
      avgPool_: function (t, e, n, r, o) {
        return zs(t, e, n, 1, r, o);
      },
    }),
    Vs = Fe({
      pool_: function (t, e, n, r, o, i) {
        null == o && (o = [1, 1]),
          null == i && (i = 1),
          0 === r && (r = "valid");
        var a = re(t, "x", "maxPool"),
          s = a,
          u = !1;
        3 === a.rank &&
          ((u = !0), (s = a.as4D(1, a.shape[0], a.shape[1], a.shape[2]))),
          D(ws(i, o), function () {
            return (
              "Error in pool: Either strides or dilations must be 1. Got strides " +
              i +
              " and dilations '" +
              o +
              "'"
            );
          });
        var c,
          l,
          h,
          p,
          f,
          d,
          v = ps(s.shape, e, i, o, r),
          m = [v.dilationHeight, v.dilationWidth];
        c =
          "same" === r
            ? ((l = [v.filterHeight, v.filterWidth]),
              (h = m),
              (p = l
                .map(function (t, e) {
                  return t + (t - 1) * (h[e] - 1);
                })
                .map(function (t) {
                  return t - 1;
                })),
              (f = p.map(function (t) {
                return Math.floor(t / 2);
              })),
              (d = p.map(function (t, e) {
                return t - f[e];
              })),
              p.map(function (t, e) {
                return [f[e], d[e]];
              }))
            : [
                [0, 0],
                [0, 0],
              ];
        var g,
          y,
          x,
          w,
          b,
          E,
          C,
          _,
          S = 1 === m[0] && 1 === m[1],
          R =
            ((g = [v.inHeight, v.inWidth]),
            (y = m),
            (w = (x = c).map(function (t) {
              return t[0];
            })),
            (b = x.map(function (t) {
              return t[1];
            })),
            (E = g.concat(w, b)),
            (C = y.map(function (t, e) {
              return (t - (E[e] % t)) % t;
            })),
            (_ = b.map(function (t, e) {
              return t + C[e];
            })),
            [
              y.map(function (t, e) {
                return [w[e], _[e]];
              }),
              y.map(function (t, e) {
                return [0, C[e]];
              }),
            ]),
          N = R[1],
          k = S ? r : "valid",
          I = S ? s : aa(s, m, R[0]),
          T = (
            "avg" === n
              ? function () {
                  return zs(I, e, i, 1, k);
                }
              : function () {
                  return Ws(I, e, i, 1, k);
                }
          )(),
          A = S ? T : Gi(T, m, N);
        return u ? A.as3D(A.shape[1], A.shape[2], A.shape[3]) : A;
      },
    });
  var Hs = Fe({
      slice_: function (t, e, n) {
        var r,
          o,
          i = re(t, "x", "slice");
        if (0 === i.rank) throw new Error("Slicing scalar is not possible");
        (r =
          "number" == typeof e
            ? [e].concat(new Array(i.rank - 1).fill(0))
            : e.length < i.rank
            ? e.concat(new Array(i.rank - e.length).fill(0))
            : e.slice()),
          (o = (o =
            null == n
              ? new Array(i.rank).fill(-1)
              : "number" == typeof n
              ? [n].concat(new Array(i.rank - 1).fill(-1))
              : n.length < i.rank
              ? n.concat(new Array(i.rank - n.length).fill(-1))
              : n).map(function (t, e) {
            return 0 <= t
              ? t
              : (D(-1 === t, function () {
                  return "Bad value in size";
                }),
                i.shape[e] - r[e]);
          })),
          (function (e, n, r) {
            D(e.rank === n.length, function () {
              return (
                "Error in slice" +
                e.rank +
                "D: Length of begin " +
                n +
                " must match the rank of the array (" +
                e.rank +
                ")."
              );
            }),
              D(e.rank === r.length, function () {
                return (
                  "Error in slice" +
                  e.rank +
                  "D: Length of size " +
                  r +
                  " must match the rank of the array (" +
                  e.rank +
                  ")."
                );
              });
            for (
              var t = function (t) {
                  D(n[t] + r[t] <= e.shape[t], function () {
                    return (
                      "Error in slice" +
                      e.rank +
                      "D: begin[" +
                      t +
                      "] + size[" +
                      t +
                      "] (" +
                      (n[t] + r[t]) +
                      ") would overflow input.shape[" +
                      t +
                      "] (" +
                      e.shape[t] +
                      ")"
                    );
                  });
                },
                o = 0;
              o < e.rank;
              ++o
            )
              t(o);
          })(i, r, o);
        var a = i.shape;
        return Zt.engine.runKernel(
          function (t) {
            return t.slice(i, r, o);
          },
          { $x: i },
          function (t) {
            for (var e = [], n = 0; n < t.rank; n++)
              e.push([r[n], a[n] - r[n] - o[n]]);
            return {
              $x: function () {
                return t.pad(e);
              },
            };
          }
        );
      },
    }),
    qs = Fe({
      slice1d_: function (t, e, n) {
        var r = re(t, "x", "slice1d");
        return (
          D(1 === r.rank, function () {
            return (
              "slice1d expects a rank-1 tensor, but got a rank-" +
              r.rank +
              " tensor"
            );
          }),
          Hs(r, [e], [n])
        );
      },
    }),
    js = Fe({
      slice2d_: function (t, e, n) {
        var r = re(t, "x", "slice2d");
        return (
          D(2 === r.rank, function () {
            return (
              "slice2d expects a rank-2 tensor, but got a rank-" +
              r.rank +
              " tensor"
            );
          }),
          Hs(r, e, n)
        );
      },
    }),
    $s = Fe({
      slice3d_: function (t, e, n) {
        var r = re(t, "x", "slice3d");
        return (
          D(3 === r.rank, function () {
            return (
              "slice3d expects a rank-3 tensor, but got a rank-" +
              r.rank +
              " tensor"
            );
          }),
          Hs(r, e, n)
        );
      },
    }),
    Ks = Fe({
      slice4d_: function (t, e, n) {
        var r = re(t, "x", "slice4d");
        return (
          D(4 === r.rank, function () {
            return (
              "slice4d expects a rank-4 tensor, but got a rank-" +
              r.rank +
              " tensor"
            );
          }),
          Hs(r, e, n)
        );
      },
    });
  function Xs(e, n, r, t, o) {
    return (
      n.rank < r.rank && (n = n.reshape(be(n.shape, t))),
      e.rank < r.rank && (e = e.reshape(be(e.shape, t))),
      {
        $x: function () {
          var t = e.mul(r.equal(n).cast(e.dtype));
          return null == o ? t : t.transpose(o);
        },
      }
    );
  }
  var Ys = Fe({
      all_: function (t, e, n) {
        void 0 === e && (e = null), void 0 === n && (n = !1);
        var r = re(t, "x", "all", "bool"),
          o = k(e, r.shape),
          i = o,
          a = Ce(i, r.rank);
        null != a && ((r = r.transpose(a)), (i = Se(i.length, r.rank)));
        var s = Zt.engine.runKernel(
          function (t) {
            return t.all(r, i);
          },
          { $x: r }
        );
        if (n) {
          var u = be(s.shape, o);
          return s.reshape(u);
        }
        return s;
      },
    }),
    Qs = Fe({
      any_: function (t, e, n) {
        void 0 === e && (e = null), void 0 === n && (n = !1);
        var r = re(t, "x", "any", "bool"),
          o = k(e, r.shape),
          i = o,
          a = Ce(i, r.rank);
        null != a && ((r = r.transpose(a)), (i = Se(i.length, r.rank)));
        var s = Zt.engine.runKernel(
          function (t) {
            return t.any(r, i);
          },
          { $x: r }
        );
        if (n) {
          var u = be(s.shape, o);
          return s.reshape(u);
        }
        return s;
      },
    }),
    Js = Fe({
      argMax_: function (t, e) {
        void 0 === e && (e = 0);
        var r = re(t, "x", "argMax");
        null == e && (e = 0);
        var o = k(e, r.shape),
          n = Ce(o, r.rank);
        return (
          null != n && ((r = r.transpose(n)), (o = Se(o.length, r.rank))),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.argMax(r, o[0]);
              return e([r]), n;
            },
            { $x: r },
            function (t, e) {
              var n = e[0];
              return {
                $x: function () {
                  return nn(n);
                },
              };
            }
          )
        );
      },
    }),
    Zs = Fe({
      argMin_: function (t, e) {
        void 0 === e && (e = 0);
        var r = re(t, "x", "argMin");
        null == e && (e = 0);
        var o = k(e, r.shape),
          n = Ce(o, r.rank);
        return (
          null != n && ((r = r.transpose(n)), (o = Se(o.length, r.rank))),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.argMin(r, o[0]);
              return e([r]), n;
            },
            { $x: r },
            function (t, e) {
              var n = e[0];
              return {
                $x: function () {
                  return nn(n);
                },
              };
            }
          )
        );
      },
    }),
    tu = Fe({
      logSumExp_: function (t, e, n) {
        void 0 === e && (e = null), void 0 === n && (n = !1);
        var r = re(t, "x", "logSumExp"),
          o = k(e, r.shape),
          i = r.max(o, !0),
          a = r.sub(i).exp().sum(o).log(),
          s = i.reshape(a.shape).add(a);
        if (n) {
          var u = be(s.shape, o);
          return s.reshape(u);
        }
        return s;
      },
    }),
    eu = Fe({
      max_: function (t, e, n) {
        void 0 === e && (e = null), void 0 === n && (n = !1);
        var r = re(t, "x", "max"),
          o = r,
          i = k(e, r.shape),
          a = i,
          s = Ce(a, r.rank);
        null != s && ((r = r.transpose(s)), (a = Se(a.length, r.rank)));
        var u = Zt.engine.runKernel(
          function (t, e) {
            var n = t.max(r, a);
            return e([o, n]), n;
          },
          { $x: r },
          function (t, e) {
            return Xs(t, e[1], e[0], i, s);
          }
        );
        if (n) {
          var c = be(u.shape, i);
          u = u.reshape(c);
        }
        return u;
      },
    }),
    nu = Fe({
      mean_: function (t, e, r) {
        void 0 === e && (e = null), void 0 === r && (r = !1);
        var n = re(t, "x", "mean"),
          o = k(e, n.shape),
          i = B(we(n.shape, o)[1]);
        return ae(function (n) {
          var t = Ve(i);
          return {
            value: (t.dtype === n.dtype ? n : n.cast(t.dtype)).div(t).sum(e, r),
            gradFunc: function (t) {
              var e = n.shape.slice();
              return (
                o.forEach(function (t) {
                  e[t] = 1;
                }),
                t.reshape(e).mul(Ye(n.shape, "float32")).div(i)
              );
            },
          };
        })(n);
      },
    }),
    ru = Fe({
      min_: function (t, e, n) {
        void 0 === e && (e = null), void 0 === n && (n = !1);
        var r = re(t, "x", "min"),
          o = r,
          i = k(e, r.shape),
          a = i,
          s = Ce(a, r.rank);
        null != s && ((r = r.transpose(s)), (a = Se(a.length, r.rank)));
        var u = Zt.engine.runKernel(
          function (t, e) {
            var n = t.min(r, a);
            return e([o, n]), n;
          },
          { $x: r },
          function (t, e) {
            return Xs(t, e[1], e[0], i, s);
          }
        );
        if (n) {
          var c = be(u.shape, i);
          u = u.reshape(c);
        }
        return u;
      },
    }),
    ou = Fe({
      moments_: function (t, e, n) {
        void 0 === e && (e = null), void 0 === n && (n = !1);
        var r = k(e, (t = re(t, "x", "moments")).shape),
          o = t.mean(r, n),
          i = o.shape;
        return (
          n || (i = be(o.shape, r)),
          {
            mean: o,
            variance: t.toFloat().sub(o.reshape(i)).square().mean(r, n),
          }
        );
      },
    }),
    iu = Fe({
      sum_: function (t, e, a) {
        void 0 === e && (e = null), void 0 === a && (a = !1);
        var n = re(t, "x", "sum");
        "bool" === n.dtype && (n = n.toInt());
        var s = k(e, n.shape);
        return ae(function (n) {
          var t = Ce(s, n.rank),
            e = s,
            r = n;
          null != t && ((r = n.transpose(t)), (e = Se(e.length, n.rank)));
          var o = Zt.engine.runKernel(
            function (t) {
              return t.sum(r, e);
            },
            { permutedX: r }
          );
          if (a) {
            var i = be(o.shape, s);
            o = o.reshape(i);
          }
          return {
            value: o,
            gradFunc: function (t) {
              var e = n.shape.slice();
              return (
                s.forEach(function (t) {
                  e[t] = 1;
                }),
                t.reshape(e).mul(Ye(n.shape, "float32"))
              );
            },
          };
        })(n);
      },
    }),
    au = Fe({
      prod_: function (t, e, n) {
        void 0 === e && (e = null), void 0 === n && (n = !1);
        var r = re(t, "x", "prod");
        "bool" === r.dtype && (r = r.toInt());
        var o = k(e, r.shape),
          i = Ce(o, r.rank),
          a = o,
          s = r;
        null != i && ((s = r.transpose(i)), (a = Se(a.length, r.rank)));
        var u = Zt.engine.runKernel(
          function (t) {
            return t.prod(s, a);
          },
          { permutedX: s }
        );
        if (n) {
          var c = be(u.shape, o);
          u = u.reshape(c);
        }
        return u;
      },
    });
  var su = Fe({
      equal_: function (t, e) {
        var n,
          r = re(t, "a", "equal"),
          o = re(e, "b", "equal");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t) {
              return t.equal(r, o);
            },
            { $a: r, $b: o }
          )
        );
      },
    }),
    uu = Fe({
      equalStrict_: function (t, e) {
        var n = re(t, "a", "equalStrict"),
          r = re(e, "b", "equalStrict");
        return g(n.shape, r.shape, "Error in equalStrict: "), n.equal(r);
      },
    }),
    cu = Fe({
      greater_: function (t, e) {
        var n,
          r = re(t, "a", "greater"),
          o = re(e, "b", "greater");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t) {
              return t.greater(r, o);
            },
            { $a: r, $b: o }
          )
        );
      },
    }),
    lu = Fe({
      greaterEqual_: function (t, e) {
        var n,
          r = re(t, "a", "greaterEqual"),
          o = re(e, "b", "greaterEqual");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.greaterEqual(r, o);
              return e([r, o]), n;
            },
            { $a: r, $b: o },
            function (t, e) {
              var n = e[0],
                r = e[1];
              return {
                $a: function () {
                  return nn(n);
                },
                $b: function () {
                  return nn(r);
                },
              };
            }
          )
        );
      },
    }),
    hu = Fe({
      greaterEqualStrict_: function (t, e) {
        var n = re(t, "a", "greaterEqualStrict"),
          r = re(e, "b", "greaterEqualStrict");
        return (
          g(n.shape, r.shape, "Error in greaterEqualStrict: "),
          n.greaterEqual(r)
        );
      },
    }),
    pu = Fe({
      greaterStrict_: function (t, e) {
        var n = re(t, "a", "greaterStrict"),
          r = re(e, "b", "greaterStrict");
        return g(n.shape, r.shape, "Error in greaterStrict: "), n.greater(r);
      },
    }),
    fu = Fe({
      less_: function (t, e) {
        var n,
          r = re(t, "a", "less"),
          o = re(e, "b", "less");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t) {
              return t.less(r, o);
            },
            { $a: r, $b: o }
          )
        );
      },
    }),
    du = Fe({
      lessEqual_: function (t, e) {
        var n,
          r = re(t, "a", "lessEqual"),
          o = re(e, "b", "lessEqual");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t) {
              return t.lessEqual(r, o);
            },
            { $a: r, $b: o }
          )
        );
      },
    }),
    vu = Fe({
      lessEqualStrict_: function (t, e) {
        var n = re(t, "a", "lessEqualStrict"),
          r = re(e, "b", "lessEqualStrict");
        return (
          g(n.shape, r.shape, "Error in lessEqualStrict: "), n.lessEqual(r)
        );
      },
    }),
    mu = Fe({
      lessStrict_: function (t, e) {
        var n = re(t, "a", "lessStrict"),
          r = re(e, "b", "lessStrict");
        return g(n.shape, r.shape, "Error in lessStrict: "), n.less(r);
      },
    }),
    gu = Fe({
      notEqual_: function (t, e) {
        var n,
          r = re(t, "a", "notEqual"),
          o = re(e, "b", "notEqual");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t) {
              return t.notEqual(r, o);
            },
            { $a: r, $b: o }
          )
        );
      },
    }),
    yu = Fe({
      notEqualStrict_: function (t, e) {
        var n = re(t, "a", "notEqualStrict"),
          r = re(e, "b", "notEqualStrict");
        return g(n.shape, r.shape, "Error in notEqualStrict: "), n.notEqual(r);
      },
    });
  var xu = Fe({
      add_: function (t, e) {
        var n,
          r = re(t, "a", "add"),
          o = re(e, "b", "add");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var i = xn(r.shape, o.shape);
        return Zt.engine.runKernel(
          function (t) {
            return t.add(r, o);
          },
          { $a: r, $b: o },
          function (n) {
            return {
              $a: function () {
                var t = n,
                  e = yn(r.shape, i);
                return 0 < e.length && (t = t.sum(e)), t.reshape(r.shape);
              },
              $b: function () {
                var t = n,
                  e = yn(o.shape, i);
                return 0 < e.length && (t = t.sum(e)), t.reshape(o.shape);
              },
            };
          }
        );
      },
    }),
    wu = Fe({
      addN_: function (t) {
        D(Array.isArray(t), function () {
          return "The argument passed to tf.addN() must be a list of tensors";
        }),
          D(1 <= t.length, function () {
            return (
              "Must pass at least one tensor to tf.addN(), but got " + t.length
            );
          });
        var e = t.map(function (t, e) {
            return re(t, "tensors" + e, "addN");
          }),
          n = e[0];
        e.forEach(function (t) {
          if (t.dtype !== n.dtype)
            throw new Error(
              "All tensors passed to tf.addN() must have the same dtype"
            );
        }),
          e.forEach(function (t) {
            if (!E(t.shape, n.shape))
              throw new Error(
                "All tensors passed to tf.addN() must have the same shape"
              );
          });
        var r = e;
        return Zt.engine.runKernel(
          function (t) {
            return t.addN(e);
          },
          r,
          function (n) {
            var r = {};
            return (
              e.forEach(function (t, e) {
                r[e] = function () {
                  return n.clone();
                };
              }),
              r
            );
          }
        );
      },
    }),
    bu = Fe({
      addStrict_: function (t, e) {
        var n = re(t, "a", "addStrict"),
          r = re(e, "b", "addStrict");
        return g(n.shape, r.shape, "Error in addStrict: "), n.add(r);
      },
    }),
    Eu = Fe({
      atan2_: function (t, e) {
        var n,
          r = re(t, "a", "atan2"),
          o = re(e, "b", "atan2");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var a = xn(r.shape, o.shape);
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.atan2(r, o);
            return e([r, o]), n;
          },
          { $a: r, $b: o },
          function (r, t) {
            var o = t[0],
              i = t[1];
            return {
              $a: function () {
                var t = xu(o.square(), i.square()),
                  e = r.mul(i.div(t)),
                  n = yn(o.shape, a);
                return 0 < n.length && (e = e.sum(n)), e.reshape(o.shape);
              },
              $b: function () {
                var t = xu(o.square(), i.square()),
                  e = Pa(r.mul(o.div(t))),
                  n = yn(i.shape, a);
                return 0 < n.length && (e = e.sum(n)), e.reshape(i.shape);
              },
            };
          }
        );
      },
    }),
    Cu = Fe({
      div_: function (t, e) {
        var n,
          r = re(t, "a", "div"),
          o = re(e, "b", "div");
        if (
          ((n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          "int32" === r.dtype && "int32" === o.dtype)
        )
          return Su(r, o);
        var a = xn(r.shape, o.shape);
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.realDivide(r, o);
            return e([r, o]), n;
          },
          { $a: r, $b: o },
          function (r, t) {
            var o = t[0],
              i = t[1];
            return {
              $a: function () {
                var t = r.div(i.toFloat()),
                  e = yn(o.shape, a);
                return 0 < e.length ? t.sum(e).reshape(o.shape) : t;
              },
              $b: function () {
                var t = r.mul(o.toFloat()),
                  e = yn(i.shape, a);
                0 < e.length && (t = t.sum(e).reshape(i.shape));
                var n = i.square();
                return t.div(n.toFloat()).neg();
              },
            };
          }
        );
      },
    }),
    _u = Fe({
      divStrict_: function (t, e) {
        var n = re(t, "a", "div"),
          r = re(e, "b", "div");
        return g(n.shape, r.shape, "Error in divideStrict: "), n.div(r);
      },
    }),
    Su = Fe({
      floorDiv_: function (t, e) {
        var n,
          r = re(t, "a", "floorDiv"),
          o = re(e, "b", "floorDiv");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var a = xn(r.shape, o.shape);
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.floorDiv(r, o);
            return e([r, o]), n;
          },
          { $a: r, $b: o },
          function (r, t) {
            var o = t[0],
              i = t[1];
            return {
              $a: function () {
                var t = r.div(i.toFloat()),
                  e = yn(o.shape, a);
                return 0 < e.length ? t.sum(e).reshape(o.shape) : t;
              },
              $b: function () {
                var t = r.mul(o.toFloat()),
                  e = yn(i.shape, a);
                0 < e.length && (t = t.sum(e).reshape(i.shape));
                var n = i.square();
                return t.div(n.toFloat()).neg();
              },
            };
          }
        );
      },
    }),
    Ru = Fe({
      maximum_: function (t, e) {
        var n,
          r = re(t, "a", "maximum"),
          o = re(e, "b", "maximum");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          "bool" === r.dtype && ((r = r.toInt()), (o = o.toInt())),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.maximum(r, o);
              return e([r, o]), n;
            },
            { $a: r, $b: o },
            function (t, e) {
              var n = e[0],
                r = e[1];
              return {
                $a: function () {
                  return t.mul(n.greaterEqual(r).toFloat());
                },
                $b: function () {
                  return t.mul(n.less(r).toFloat());
                },
              };
            }
          )
        );
      },
    }),
    Nu = Fe({
      maximumStrict_: function (t, e) {
        var n = re(t, "a", "maximumStrict"),
          r = re(e, "b", "maximumStrict");
        return g(n.shape, r.shape, "Error in maximumStrict: "), n.maximum(r);
      },
    }),
    ku = Fe({
      minimum_: function (t, e) {
        var n,
          r = re(t, "a", "minimum"),
          o = re(e, "b", "minimum");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          "bool" === r.dtype && ((r = r.toInt()), (o = o.toInt())),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.minimum(r, o);
              return e([r, o]), n;
            },
            { $a: r, $b: o },
            function (t, e) {
              var n = e[0],
                r = e[1];
              return {
                $a: function () {
                  return t.mul(n.lessEqual(r).toFloat());
                },
                $b: function () {
                  return t.mul(n.greater(r).toFloat());
                },
              };
            }
          )
        );
      },
    }),
    Iu = Fe({
      minimumStrict_: function (t, e) {
        var n = re(t, "a", "minimumStrict"),
          r = re(e, "b", "minimumStrict");
        return g(n.shape, r.shape, "Error in minimumStrict: "), n.minimum(r);
      },
    }),
    Tu = Fe({
      mod_: function (t, e) {
        var n,
          r = re(t, "a", "mod"),
          o = re(e, "b", "mod");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var i = xn(r.shape, o.shape);
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.mod(r, o);
            return e([r, o]), n;
          },
          { $a: r, $b: o },
          function (n, t) {
            var r = t[0],
              o = t[1];
            return {
              $a: function () {
                var t = yn(r.shape, i);
                return 0 < t.length ? n.sum(t).reshape(r.shape) : n;
              },
              $b: function () {
                var t = n.mul(r.div(o).floor().neg()),
                  e = yn(o.shape, i);
                return 0 < e.length ? t.sum(e).reshape(o.shape) : t;
              },
            };
          }
        );
      },
    }),
    Au = Fe({
      modStrict_: function (t, e) {
        var n = re(t, "a", "modStrict"),
          r = re(e, "b", "modStrict");
        return g(n.shape, r.shape, "Error in modStrict: "), n.mod(r);
      },
    }),
    Du = Fe({
      mul_: function (t, e) {
        var n,
          r = re(t, "a", "mul"),
          o = re(e, "b", "mul");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var i = xn(r.shape, o.shape);
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.multiply(r, o);
            return e([r, o]), n;
          },
          { $a: r, $b: o },
          function (n, t) {
            var r = t[0],
              o = t[1];
            return {
              $a: function () {
                var t = n.mul(o.toFloat()),
                  e = yn(r.shape, i);
                return 0 < e.length ? t.sum(e).reshape(r.shape) : t;
              },
              $b: function () {
                var t = n.mul(r.toFloat()),
                  e = yn(o.shape, i);
                return 0 < e.length ? t.sum(e).reshape(o.shape) : t;
              },
            };
          }
        );
      },
    }),
    Mu = Fe({
      mulStrict_: function (t, e) {
        var n = re(t, "a", "mul"),
          r = re(e, "b", "mul");
        return g(n.shape, r.shape, "Error in multiplyStrict: "), n.mul(r);
      },
    }),
    Ou = Fe({
      pow_: function (t, e) {
        var r = re(t, "base", "pow"),
          o = re(e, "exp", "pow"),
          u = xn(r.shape, o.shape);
        return (
          (t = r.cast(kt(r.dtype, o.dtype))),
          (e = o.cast(kt(r.dtype, o.dtype))),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.pow(r, o);
              return e([r, o, n]), n;
            },
            { $base: r, $exp: o },
            function (o, t) {
              var i = t[0],
                a = t[1],
                s = t[2];
              return {
                $base: function () {
                  var t = a.toFloat(),
                    e = o.mul(t.mul(i.pow(t.sub(Ve(1))))),
                    n = yn(i.shape, u);
                  return 0 < n.length && (e = e.sum(n)), e.reshape(i.shape);
                },
                $exp: function () {
                  var t = i.greater(0),
                    e = i.log().where(t, nn(i)),
                    n = o.mul(s.mul(e)),
                    r = yn(a.shape, u);
                  return 0 < r.length && (n = n.sum(r)), n.reshape(a.shape);
                },
              };
            }
          )
        );
      },
    }),
    Pu = Fe({
      powStrict_: function (t, e) {
        return g(t.shape, e.shape, "Error in powStrict: "), t.pow(e);
      },
    }),
    Fu = Fe({
      squaredDifference_: function (t, e) {
        var n,
          r = re(t, "a", "squaredDifference"),
          o = re(e, "b", "squaredDifference");
        return (
          (n = Tt(r, o)),
          (r = n[0]),
          (o = n[1]),
          xn(r.shape, o.shape),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.squaredDifference(r, o);
              return e([r, o]), n;
            },
            { $a: r, $b: o },
            function (t, e) {
              var n = e[0],
                r = e[1],
                o = Ve(2);
              return {
                $a: function () {
                  return t.mul(n.sub(r).mul(o));
                },
                $b: function () {
                  return t.mul(r.sub(n).mul(o));
                },
              };
            }
          )
        );
      },
    }),
    Lu = Fe({
      squaredDifferenceStrict_: function (t, e) {
        var n = re(t, "a", "squaredDifferenceStrict"),
          r = re(e, "b", "squaredDifferenceStrict");
        return (
          g(n.shape, r.shape, "Error in squaredDifferenceStrict: "),
          n.squaredDifference(r)
        );
      },
    }),
    Bu = Fe({
      sub_: function (t, e) {
        var n,
          r = re(t, "a", "sub"),
          o = re(e, "b", "sub");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var i = xn(r.shape, o.shape);
        return Zt.engine.runKernel(
          function (t) {
            return t.subtract(r, o);
          },
          { $a: r, $b: o },
          function (n) {
            return {
              $a: function () {
                var t = n,
                  e = yn(r.shape, i);
                return 0 < e.length && (t = t.sum(e)), t.reshape(r.shape);
              },
              $b: function () {
                var t = n,
                  e = yn(o.shape, i);
                return 0 < e.length && (t = t.sum(e)), t.neg().reshape(o.shape);
              },
            };
          }
        );
      },
    }),
    Wu = Fe({
      subStrict_: function (t, e) {
        var n = re(t, "a", "subStrict"),
          r = re(e, "b", "subStrict");
        return g(n.shape, r.shape, "Error in subStrict: "), n.sub(r);
      },
    });
  var zu = Fe({
      logicalAnd_: function (t, e) {
        var n = re(t, "a", "logicalAnd", "bool"),
          r = re(e, "b", "logicalAnd", "bool");
        return (
          xn(n.shape, r.shape),
          Zt.engine.runKernel(
            function (t) {
              return t.logicalAnd(n, r);
            },
            { $a: n, $b: r }
          )
        );
      },
    }),
    Uu = Fe({
      logicalNot_: function (t) {
        var e = re(t, "x", "logicalNot", "bool");
        return Zt.engine.runKernel(
          function (t) {
            return t.logicalNot(e);
          },
          { $x: e }
        );
      },
    }),
    Gu = Fe({
      logicalOr_: function (t, e) {
        var n = re(t, "a", "logicalOr", "bool"),
          r = re(e, "b", "logicalOr", "bool");
        return (
          xn(n.shape, r.shape),
          Zt.engine.runKernel(
            function (t) {
              return t.logicalOr(n, r);
            },
            { $a: n, $b: r }
          )
        );
      },
    }),
    Vu = Fe({
      logicalXor_: function (t, e) {
        var n = re(t, "a", "logicalXor", "bool"),
          r = re(e, "b", "logicalXor", "bool");
        return xn(n.shape, r.shape), Gu(t, e).logicalAnd(zu(t, e).logicalNot());
      },
    }),
    Hu = Fe({
      where_: function (t, e, n) {
        var r = re(e, "a", "where"),
          o = re(n, "b", "where"),
          i = re(t, "condition", "where", "bool");
        return (
          g(r.shape, o.shape, "Error in where: "),
          1 === i.rank
            ? D(i.shape[0] === r.shape[0], function () {
                return "The first dimension of `a` must match the size of `condition`.";
              })
            : g(i.shape, o.shape, "Error in where: "),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.select(i, r, o);
              return e([i]), n;
            },
            { $condition: i, $a: r, $b: o },
            function (t, e) {
              var n = e[0];
              return {
                $condition: function () {
                  return nn(n).toFloat();
                },
                $a: function () {
                  return t.mul(n.cast(t.dtype));
                },
                $b: function () {
                  return t.mul(n.logicalNot().cast(t.dtype));
                },
              };
            }
          )
        );
      },
    }),
    qu = function (o) {
      return m(this, void 0, void 0, function () {
        var e, n, r;
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              return [4, (e = re(o, "condition", "whereAsync", "bool")).data()];
            case 1:
              return (
                (n = t.sent()),
                (r = fa(e.shape, n)),
                o !== e && e.dispose(),
                [2, r]
              );
          }
        });
      });
    };
  var ju = Fe({
      elu_: function (t) {
        var r = re(t, "x", "elu");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.elu(r);
            return e([n]), n;
          },
          { $x: r },
          function (e, t) {
            var n = t[0];
            return {
              $x: function () {
                return Zt.engine.runKernel(
                  function (t) {
                    return t.eluDer(e, n);
                  },
                  { dy: e, y: n }
                );
              },
            };
          }
        );
      },
    }),
    $u = Fe({
      leakyRelu_: function (t, e) {
        void 0 === e && (e = 0.2);
        var n = re(t, "x", "leakyRelu");
        return Ru(Ve(e).mul(n), n);
      },
    }),
    Ku = Fe({
      prelu_: function (t, e) {
        var r = re(t, "x", "prelu"),
          o = re(e, "alpha", "prelu");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.prelu(r, o);
            return e([r, o]), n;
          },
          { $x: r, $alpha: o },
          function (n, t) {
            var r = t[0],
              o = t[1],
              i = r.greater(0);
            return {
              $x: function () {
                return Hu(i, n, n.mul(o));
              },
              $alpha: function () {
                var t = Hu(i, nn(n), n.mul(r)),
                  e = yn(o.shape, n.shape);
                return 0 < e.length && (t = t.sum(e)), t.reshape(o.shape);
              },
            };
          }
        );
      },
    }),
    Xu = Fe({
      relu_: function (t) {
        var r = re(t, "x", "relu");
        return "bool" === r.dtype
          ? r.toInt()
          : Zt.engine.runKernel(
              function (t, e) {
                var n = t.relu(r);
                return e([r]), n;
              },
              { $x: r },
              function (t, e) {
                var n = e[0];
                return {
                  $x: function () {
                    return t.mulStrict(n.step().toFloat());
                  },
                };
              }
            );
      },
    }),
    Yu = Fe({
      selu_: function (t) {
        var r = re(t, "x", "selu");
        return Zt.engine.runKernel(
          function (t, e) {
            var n = t.selu(r);
            return e([r]), n;
          },
          { $x: r },
          function (i, t) {
            var a = t[0];
            return {
              $x: function () {
                var t = a.greater(Ve(0)),
                  e = Ve(di),
                  n = Ve(vi),
                  r = i.mul(n),
                  o = i.mul(e).mul(a.toFloat().exp());
                return Hu(t, r, o);
              },
            };
          }
        );
      },
    });
  var Qu = Fe({
    transpose_: function (t, n) {
      var e = re(t, "x", "transpose");
      return (
        null == n &&
          (n = e.shape
            .map(function (t, e) {
              return e;
            })
            .reverse()),
        D(e.rank === n.length, function () {
          return (
            "Error in transpose: rank of input " +
            e.rank +
            " must match length of perm " +
            n +
            "."
          );
        }),
        n.forEach(function (t) {
          D(0 <= t && t < e.rank, function () {
            return (
              "All entries in 'perm' must be between 0 and " +
              (e.rank - 1) +
              " but got " +
              n
            );
          });
        }),
        e.rank <= 1
          ? e.clone()
          : Zt.engine.runKernel(
              function (t) {
                return t.transpose(e, n);
              },
              { $x: e },
              function (t) {
                var e = _e(n);
                return {
                  $x: function () {
                    return t.transpose(e);
                  },
                };
              }
            )
      );
    },
  });
  var Ju = Fe({
    localResponseNormalization_: function (t, o, i, a, s) {
      void 0 === o && (o = 5),
        void 0 === i && (i = 1),
        void 0 === a && (a = 1),
        void 0 === s && (s = 0.5);
      var e = re(t, "x", "localResponseNormalization");
      D(4 === e.rank || 3 === e.rank, function () {
        return (
          "Error in localResponseNormalization: x must be rank 3 or 4 but got\n               rank " +
          e.rank +
          "."
        );
      }),
        D(T(o), function () {
          return (
            "Error in localResponseNormalization: depthRadius must be an integer but got depthRadius " +
            o +
            "."
          );
        });
      var r = e,
        n = !1;
      3 === e.rank &&
        ((n = !0), (r = e.as4D(1, e.shape[0], e.shape[1], e.shape[2])));
      var u = Zt.engine.runKernel(
        function (t, e) {
          var n = t.localResponseNormalization4D(r, o, i, a, s);
          return e([r, n]), n;
        },
        { x4D: r },
        function (e, t) {
          var n = t[0],
            r = t[1];
          return {
            x4D: function () {
              return Zt.engine.runKernel(function (t) {
                return t.LRNGrad(e, n, r, o, i, a, s);
              }, {});
            },
          };
        }
      );
      return n ? u.as3D(u.shape[1], u.shape[2], u.shape[3]) : u;
    },
  });
  var Zu = Fe({
    norm_: function (t, e, n, r) {
      void 0 === e && (e = "euclidean"),
        void 0 === n && (n = null),
        void 0 === r && (r = !1);
      var o = (function t(e, n, r) {
          if ((void 0 === r && (r = null), 0 === e.rank)) return e.abs();
          if (1 !== e.rank && null === r) return t(e.reshape([-1]), n, r);
          if (
            1 === e.rank ||
            "number" == typeof r ||
            (Array.isArray(r) && 1 === r.length)
          ) {
            if (1 === n) return e.abs().sum(r);
            if (n === 1 / 0) return e.abs().max(r);
            if (n === -1 / 0) return e.abs().min(r);
            if ("euclidean" === n || 2 === n)
              return e.abs().pow(Ve(2, "int32")).sum(r).sqrt();
            throw new Error("Error in norm: invalid ord value: " + n);
          }
          if (Array.isArray(r) && 2 === r.length) {
            if (1 === n)
              return e
                .abs()
                .sum(r[0])
                .max(r[1] - 1);
            if (n === 1 / 0) return e.abs().sum(r[1]).max(r[0]);
            if (n === -1 / 0) return e.abs().sum(r[1]).min(r[0]);
            if ("fro" === n || "euclidean" === n)
              return e.square().sum(r).sqrt();
            throw new Error("Error in norm: invalid ord value: " + n);
          }
          throw new Error("Error in norm: invalid axis: " + r);
        })((t = re(t, "x", "norm")), e, n),
        i = o.shape;
      if (r) {
        var a = k(n, t.shape);
        i = be(o.shape, a);
      }
      return o.reshape(i);
    },
  });
  function tc(t, e) {
    for (var n = [], r = t; r < e; ++r) n.push(r);
    return n;
  }
  function ec(t) {
    for (var e = [], n = 0; n < t.length; ++n)
      for (var r = 0; r < t[n].length; ++r) e.push(t[n][r]);
    return e;
  }
  var nc = Fe({
      gather_: function (t, e, g) {
        void 0 === g && (g = 0);
        var y = re(t, "x", "gather"),
          r = re(e, "indices", "gather", "int32");
        g = k(g, y.shape)[0];
        var n = (function (t, e, n) {
          for (var r = t.shape[n], o = [], i = 1, a = 1, s = 0; s < n; s++)
            o.push(t.shape[s]), (i *= t.shape[s]);
          for (s = 0; s < e.rank; s++) o.push(e.shape[s]);
          for (s = n + 1; s < t.rank; s++)
            o.push(t.shape[s]), (a *= t.shape[s]);
          return { batchSize: i, sliceSize: a, dimSize: r, outputShape: o };
        })(y, r, g);
        return Zt.engine
          .runKernel(
            function (t, e) {
              var n = t.gather(y, r.flatten(), g);
              return e([r]), n;
            },
            { $x: y },
            function (v, t) {
              var m = t[0];
              return {
                $x: function () {
                  var t = y.shape,
                    e = m.size,
                    n = t.slice(0, g),
                    r = n.length,
                    o = t.slice(g, t.length).slice(1),
                    i = o.length,
                    a = tc(0, r),
                    s = tc(r + 1, r + 1 + i),
                    u = ec([n, [e], o]),
                    c = v.reshape(u),
                    l = m.reshape([e]),
                    h = ec([[r], a, s]),
                    p = c.transpose(h),
                    f = rc(p, l, y.shape[g]),
                    d = _e(h);
                  return f.transpose(d);
                },
              };
            }
          )
          .reshape(n.outputShape);
      },
    }),
    rc = Fe({
      unsortedSegmentSum_: function (t, e, r) {
        var o = re(t, "x", "unsortedSegmentSum"),
          i = re(e, "segmentIds", "unsortedSegmentSum", "int32");
        return (
          D(T(r), function () {
            return "numSegments must be of dtype int";
          }),
          Zt.engine.runKernel(
            function (t, e) {
              var n = t.unsortedSegmentSum(o, i, r);
              return e([i]), n;
            },
            { $x: o },
            function (t, e) {
              var n = e[0];
              return {
                $x: function () {
                  return (function (t, e) {
                    for (
                      var n = Ru(e, nn(e)),
                        r = nc(t, n),
                        o = lu(e, Ve(0, "int32")),
                        i = r.rank - o.rank,
                        a = 0;
                      a < i;
                      ++a
                    )
                      o = $i(o, a + 1);
                    o = zu(o, Ye(r.shape, "bool"));
                    var s = nn(r);
                    return Hu(o, r, s);
                  })(t, n);
                },
              };
            }
          )
        );
      },
    });
  var oc = Fe({
      basicLSTMCell_: function (t, e, n, r, o, i) {
        var a = re(t, "forgetBias", "basicLSTMCell"),
          s = re(e, "lstmKernel", "basicLSTMCell"),
          u = re(n, "lstmBias", "basicLSTMCell"),
          c = re(r, "data", "basicLSTMCell"),
          l = re(o, "c", "basicLSTMCell"),
          h = re(i, "h", "basicLSTMCell"),
          p = c.concat(h, 1).matMul(s).add(u),
          f = p.shape[0],
          d = p.shape[1] / 4,
          v = [f, d],
          m = p.slice([0, 0], v),
          g = p.slice([0, d], v),
          y = p.slice([0, 2 * d], v),
          x = p.slice([0, 3 * d], v),
          w = m
            .sigmoid()
            .mulStrict(g.tanh())
            .addStrict(l.mulStrict(a.add(y).sigmoid()));
        return [w, w.tanh().mulStrict(x.sigmoid())];
      },
    }),
    ic = Fe({
      multiRNNCell_: function (t, e, n, r) {
        for (
          var o = re(e, "data", "multiRNNCell"),
            i = oe(n, "c", "multiRNNCell"),
            a = oe(r, "h", "multiRNNCell"),
            s = o,
            u = [],
            c = 0;
          c < t.length;
          c++
        ) {
          var l = t[c](s, i[c], a[c]);
          u.push(l[0]), u.push(l[1]), (s = l[1]);
        }
        var h = [],
          p = [];
        for (c = 0; c < u.length; c += 2) h.push(u[c]), p.push(u[c + 1]);
        return [h, p];
      },
    });
  var ac = Fe({
    movingAverage_: function (t, e, n, r, o) {
      void 0 === o && (o = !0);
      var i = re(t, "v", "movingAverage"),
        a = re(e, "x", "movingAverage"),
        s = re(n, "decay", "movingAverage");
      At(i, a),
        D(E(i.shape, a.shape), function () {
          return "Shape mismatch in v and x";
        });
      var u = Ve(1),
        c = u.sub(s),
        l = a.sub(i).mul(c);
      if (o) {
        D(null != r, function () {
          return "When using zeroDebias: true, step is required.";
        });
        var h = re(r, "step", "movingAverage");
        l = l.div(u.sub(Ou(s, h)));
      }
      return i.add(l);
    },
  });
  var sc = Fe({
    stridedSlice_: function (t, e, n, r, o, i, a, s, u) {
      if (
        (void 0 === o && (o = 0),
        void 0 === i && (i = 0),
        void 0 === a && (a = 0),
        void 0 === s && (s = 0),
        void 0 === u && (u = 0),
        0 !== a)
      )
        throw new Error("ellipsis mask is not yet supported");
      if (0 !== s) throw new Error("new axis mask is not yet supported");
      var c = re(t, "x", "stridedSlice");
      if (
        r.every(function (t) {
          return 1 === t;
        })
      ) {
        var l = Ae(c.shape, e, n, r, o, i, a, s, u),
          h = l[0],
          p = l[1],
          f = l[2],
          d = p.filter(function (t, e) {
            return -1 === f.indexOf(e);
          });
        return Hs(c, h, p).reshape(d);
      }
      return Zt.engine.runKernel(
        function (t) {
          return t.stridedSlice(c, e, n, r, o, i, a, s, u);
        },
        { $x: c }
      );
    },
  });
  var uc = Fe({
    topk_: function (t, e, n) {
      void 0 === e && (e = 1), void 0 === n && (n = !0);
      var r = re(t, "x", "topk");
      if (0 === r.rank)
        throw new Error("topk() expects the input to be of rank 1 or higher");
      var o = r.shape[r.shape.length - 1];
      if (o < e)
        throw new Error(
          "'k' passed to topk() must be <= the last dimension (" +
            o +
            ") but got " +
            e
        );
      var i = Zt.engine.runKernel(
        function (t) {
          return t.topk(r, e, n);
        },
        { $x: r }
      );
      return { values: i[0], indices: i[1] };
    },
  });
  var cc = Fe({
    scatterND_: function (t, e, n) {
      var r = re(t, "indices", "scatterND", "int32"),
        o = re(e, "updates", "scatterND");
      return (
        Ie(o, r, n),
        Zt.engine.runKernel(
          function (t) {
            return t.scatterND(r, o, n);
          },
          { $indices: r, $updates: o }
        )
      );
    },
  });
  var lc = Fe({
      fft_: function (t) {
        D("complex64" === t.dtype, function () {
          return (
            "The dtype for tf.spectral.fft() must be complex64 but got " +
            t.dtype +
            "."
          );
        });
        var e = t.shape[t.shape.length - 1],
          n = t.size / e,
          r = t.as2D(n, e);
        return Zt.engine
          .runKernel(
            function (t) {
              return t.fft(r);
            },
            { input: t }
          )
          .reshape(t.shape);
      },
    }),
    hc = Fe({
      ifft_: function (t) {
        D("complex64" === t.dtype, function () {
          return (
            "The dtype for tf.spectral.ifft() must be complex64 but got " +
            t.dtype +
            "."
          );
        });
        var e = t.shape[t.shape.length - 1],
          n = t.size / e,
          r = t.as2D(n, e);
        return Zt.engine
          .runKernel(
            function (t) {
              return t.ifft(r);
            },
            { input: t }
          )
          .reshape(t.shape);
      },
    }),
    pc = Fe({
      rfft_: function (t) {
        D("float32" === t.dtype, function () {
          return "The dtype for rfft() must be real value but got " + t.dtype;
        });
        var e = t.shape[t.shape.length - 1],
          n = t.size / e,
          r = t.zerosLike(),
          o = We(t, r).as2D(n, e),
          i = lc(o),
          a = Math.floor(e / 2) + 1,
          s = ze(i),
          u = Ue(i),
          c = s.split([a, e - a], s.shape.length - 1),
          l = u.split([a, e - a], u.shape.length - 1),
          h = t.shape.slice();
        return (h[t.shape.length - 1] = a), We(c[0], l[0]).reshape(h);
      },
    }),
    fc = Fe({
      irfft_: function (t) {
        var e = t.shape[t.shape.length - 1],
          n = t.size / e;
        if (e <= 2) {
          var r = t.as2D(n, e),
            o = hc(r);
          return ze(o);
        }
        var i = [n, 2 * (e - 1)],
          a = ze(t).as2D(n, e),
          s = Ue(t).as2D(n, e),
          u = a.slice([0, 1], [n, e - 2]).reverse(1),
          c = s
            .slice([0, 1], [n, e - 2])
            .reverse(1)
            .mul(Ve(-1)),
          l = a.concat(u, 1),
          h = s.concat(c, 1);
        return (r = We(l, h).as2D(i[0], i[1])), (o = hc(r)), ze(o);
      },
    }),
    dc = Object.freeze({ fft: lc, ifft: hc, rfft: pc, irfft: fc });
  var vc = Fe({
    sparseToDense_: function (t, e, n, r) {
      void 0 === r && (r = 0);
      var o = re(t, "sparseIndices", "sparseToDense", "int32"),
        i = re(e, "sparseValues", "sparseToDense"),
        a = re(r, "defaultValue", "sparseToDense", i.dtype);
      return (
        (function (t, e, n, r) {
          if ("int32" !== t.dtype)
            throw new Error(
              "tf.sparseToDense() expects the indices to be int32 type, but the dtype was " +
                t.dtype +
                "."
            );
          if (2 < t.rank)
            throw new Error(
              "sparseIndices should be a scalar, vector, or matrix, but got shape " +
                t.shape +
                "."
            );
          var o = 0 < t.rank ? t.shape[0] : 1,
            i = 1 < t.rank ? t.shape[1] : 1;
          if (n.length !== i)
            throw new Error(
              "outputShape has incorrect number of elements:, " +
                n.length +
                ", should be: " +
                i +
                "."
            );
          var a = e.size;
          if (0 !== e.rank && (1 !== e.rank || a !== o))
            throw new Error(
              "sparseValues has incorrect shape " +
                e.shape +
                ", should be [] or [" +
                o +
                "]"
            );
          if (e.dtype !== r.dtype)
            throw new Error(
              "sparseValues.dtype must match defaultValues.dtype"
            );
        })(o, i, n, a),
        Zt.engine.runKernel(
          function (t) {
            return t.sparseToDense(o, i, n, a);
          },
          { $sparseIndices: o, $sparseValues: i, $defaultValue: a }
        )
      );
    },
  });
  var mc,
    gc,
    yc = Fe({
      gatherND_: function (t, e) {
        var n = re(e, "indices", "gatherND", "int32"),
          r = re(t, "x", "gatherND");
        return Zt.engine.runKernel(
          function (t) {
            return t.gatherND(r, n);
          },
          { $x: r, $indices: n }
        );
      },
    });
  ((gc = mc || (mc = {}))[(gc.NONE = 0)] = "NONE"),
    (gc[(gc.MEAN = 1)] = "MEAN"),
    (gc[(gc.SUM = 2)] = "SUM"),
    (gc[(gc.SUM_BY_NONZERO_WEIGHTS = 3)] = "SUM_BY_NONZERO_WEIGHTS");
  var xc = Fe({
      absoluteDifference_: function (t, e, n, r) {
        void 0 === r && (r = mc.SUM_BY_NONZERO_WEIGHTS);
        var o = re(t, "labels", "absoluteDifference"),
          i = re(e, "predictions", "absoluteDifference"),
          a = null;
        null != n && (a = re(n, "weights", "absoluteDifference")),
          g(o.shape, i.shape, "Error in absoluteDifference: ");
        var s = o.sub(i).abs();
        return wc(s, a, r);
      },
    }),
    wc = Fe({
      computeWeightedLoss_: function (t, e, n) {
        void 0 === n && (n = mc.SUM_BY_NONZERO_WEIGHTS);
        var r = re(t, "losses", "computeWeightedLoss"),
          o = null;
        null != e && (o = re(e, "weights", "computeWeightedLoss"));
        var i = null == o ? r : r.mul(o);
        if (n === mc.NONE) return i;
        if (n === mc.SUM) return i.sum();
        if (n === mc.MEAN) {
          if (null == o) return i.mean();
          var a = r.size / o.size,
            s = i.sum().div(o.sum());
          return 1 < a ? s.div(Ve(a)) : s;
        }
        if (n !== mc.SUM_BY_NONZERO_WEIGHTS)
          throw Error("Unknown reduction: " + n);
        if (null == o) return i.sum().div(Ve(r.size));
        var u = o.mul(Ye(r.shape)).notEqual(Ve(0)).sum().toFloat();
        return i.sum().div(u);
      },
    }),
    bc = Fe({
      cosineDistance_: function (t, e, n, r, o) {
        void 0 === o && (o = mc.SUM_BY_NONZERO_WEIGHTS);
        var i = re(t, "labels", "cosineDistance"),
          a = re(e, "predictions", "cosineDistance"),
          s = null;
        null != r && (s = re(r, "weights", "cosineDistance")),
          g(i.shape, a.shape, "Error in cosineDistance: ");
        var u = Ve(1).sub(i.mul(a).sum(n, !0));
        return wc(u, s, o);
      },
    }),
    Ec = Fe({
      hingeLoss_: function (t, e, n, r) {
        void 0 === r && (r = mc.SUM_BY_NONZERO_WEIGHTS);
        var o = re(t, "labels", "hingeLoss"),
          i = re(e, "predictions", "hingeLoss"),
          a = null;
        null != n && (a = re(n, "weights", "hingeLoss")),
          g(o.shape, i.shape, "Error in hingeLoss: ");
        var s = Ve(1);
        o = Ve(2).mul(o).sub(s);
        var u = s.sub(o.mul(i)).relu();
        return wc(u, a, r);
      },
    }),
    Cc = Fe({
      huberLoss_: function (t, e, n, r, o) {
        void 0 === r && (r = 1),
          void 0 === o && (o = mc.SUM_BY_NONZERO_WEIGHTS);
        var i = re(t, "labels", "huberLoss"),
          a = re(e, "predictions", "huberLoss"),
          s = null;
        null != n && (s = re(n, "weights", "huberLoss")),
          g(i.shape, a.shape, "Error in huberLoss: ");
        var u = Ve(r),
          c = a.sub(i).abs(),
          l = ku(c, u),
          h = c.sub(l),
          p = Ve(0.5).mul(l.square()).add(u.mul(h));
        return wc(p, s, o);
      },
    }),
    _c = Fe({
      logLoss_: function (t, e, n, r, o) {
        void 0 === r && (r = 1e-7),
          void 0 === o && (o = mc.SUM_BY_NONZERO_WEIGHTS);
        var i = re(t, "labels", "logLoss"),
          a = re(e, "predictions", "logLoss"),
          s = null;
        null != n && (s = re(n, "weights", "logLoss")),
          g(i.shape, a.shape, "Error in logLoss: ");
        var u = Ve(1),
          c = Ve(r),
          l = i
            .mul(a.add(c).log())
            .neg()
            .sub(u.sub(i).mul(u.sub(a).add(c).log()));
        return wc(l, s, o);
      },
    }),
    Sc = Fe({
      meanSquaredError_: function (t, e, n, r) {
        void 0 === r && (r = mc.SUM_BY_NONZERO_WEIGHTS);
        var o = re(t, "labels", "meanSquaredError"),
          i = re(e, "predictions", "meanSquaredError"),
          a = null;
        null != n && (a = re(n, "weights", "meanSquaredError")),
          g(o.shape, i.shape, "Error in meanSquaredError: ");
        var s = o.squaredDifference(i);
        return wc(s, a, r);
      },
    }),
    Rc = Fe({
      sigmoidCrossEntropy_: function (t, e, n, r, o) {
        void 0 === r && (r = 0),
          void 0 === o && (o = mc.SUM_BY_NONZERO_WEIGHTS);
        var i = re(t, "multiClassLabels", "sigmoidCrossEntropy"),
          a = re(e, "logits", "sigmoidCrossEntropy"),
          s = null;
        if (
          (null != n && (s = re(n, "weights", "sigmoidCrossEntropy")),
          g(i.shape, a.shape, "Error in sigmoidCrossEntropy: "),
          0 < r)
        ) {
          var u = Ve(r),
            c = Ve(1),
            l = Ve(0.5);
          i = i.mul(c.sub(u)).add(l.mul(u));
        }
        var h = (function (t, e) {
          var n = re(t, "labels", "sigmoidCrossEntropyWithLogits"),
            r = re(e, "logits", "sigmoidCrossEntropyWithLogits");
          g(n.shape, r.shape, "Error in sigmoidCrossEntropyWithLogits: ");
          var o = r.relu(),
            i = r.mul(n),
            a = r.abs().neg().exp().log1p();
          return o.sub(i).add(a);
        })(i, a);
        return wc(h, s, o);
      },
    }),
    Nc = Fe({
      softmaxCrossEntropy_: function (t, e, n, r, o) {
        void 0 === r && (r = 0),
          void 0 === o && (o = mc.SUM_BY_NONZERO_WEIGHTS);
        var i = re(t, "onehotLabels", "softmaxCrossEntropy"),
          a = re(e, "logits", "softmaxCrossEntropy"),
          s = null;
        if (
          (null != n && (s = re(n, "weights", "softmaxCrossEntropy")),
          g(i.shape, a.shape, "Error in softmaxCrossEntropy: "),
          0 < r)
        ) {
          var u = Ve(r),
            c = Ve(1),
            l = Ve(i.shape[1]);
          i = i.mul(c.sub(u)).add(u.div(l));
        }
        var h = (function (t, e, i) {
          if (
            (void 0 === i && (i = -1),
            -1 === i && (i = e.rank - 1),
            i !== e.rank - 1)
          )
            throw Error(
              "Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank " +
                e.rank +
                " and dim was " +
                i
            );
          return ae(function (t, e, n) {
            var r = e.logSumExp([i], !0),
              o = e.toFloat().sub(r);
            return (
              n([t, o]),
              {
                value: o.mul(t).neg().sum([i]),
                gradFunc: function (t, e) {
                  var n = e[0],
                    r = e[1],
                    o = be(t.shape, [i]);
                  return [
                    t.reshape(o).mul(n.toFloat().sub(r.exp())),
                    t.reshape(o).mul(r.exp().sub(n.toFloat())),
                  ];
                },
              }
            );
          })(t, e);
        })(i, a);
        return wc(h, s, o);
      },
    }),
    kc = Object.freeze({
      get Reduction() {
        return mc;
      },
      absoluteDifference: xc,
      computeWeightedLoss: wc,
      cosineDistance: bc,
      hingeLoss: Ec,
      huberLoss: Cc,
      logLoss: _c,
      meanSquaredError: Sc,
      sigmoidCrossEntropy: Rc,
      softmaxCrossEntropy: Nc,
    });
  function Ic(r, o) {
    return (
      void 0 === o && (o = !1),
      Zt.engine.tidy(function () {
        if (2 !== r.shape.length)
          throw new Error(
            "qr2d() requires a 2D Tensor, but got a " +
              r.shape.length +
              "D Tensor."
          );
        for (
          var h = r.shape[0],
            p = r.shape[1],
            f = Ki(h),
            d = r.clone(),
            v = qe([[1]], [1, 1]),
            m = v.clone(),
            t = p <= h ? p : h,
            e = function (l) {
              var t,
                e = d,
                n = m,
                r = f;
              (m = (t = Zt.engine.tidy(function () {
                var t = d.slice([l, l], [h - l, 1]),
                  e = t.norm(),
                  n = d.slice([l, l], [1, 1]),
                  r = n.sign().neg(),
                  o = n.sub(r.mul(e)),
                  i = t.div(o);
                m =
                  1 === i.shape[0]
                    ? v.clone()
                    : v.concat(
                        i.slice([1, 0], [i.shape[0] - 1, i.shape[1]]),
                        0
                      );
                var a = r.matMul(o).div(e).neg(),
                  s = d.slice([l, 0], [h - l, p]),
                  u = a.mul(m);
                d =
                  0 === l
                    ? s.sub(u.matMul(m.transpose().matMul(s)))
                    : d
                        .slice([0, 0], [l, p])
                        .concat(s.sub(u.matMul(m.transpose().matMul(s))), 0);
                var c = f.slice([0, l], [h, f.shape[1] - l]);
                return (
                  (f =
                    0 === l
                      ? c.sub(c.matMul(m).matMul(u.transpose()))
                      : f
                          .slice([0, 0], [h, l])
                          .concat(c.sub(c.matMul(m).matMul(u.transpose())), 1)),
                  [m, d, f]
                );
              }))[0]),
                (d = t[1]),
                (f = t[2]),
                le([e, n, r]);
            },
            n = 0;
          n < t;
          ++n
        )
          e(n);
        return (
          !o &&
            p < h &&
            ((f = f.slice([0, 0], [h, p])), (d = d.slice([0, 0], [p, p]))),
          [f, d]
        );
      })
    );
  }
  var Tc = Fe({
      gramSchmidt_: function (e) {
        var t;
        if (Array.isArray(e)) {
          (t = !1),
            D(null != e && 0 < e.length, function () {
              return "Gram-Schmidt process: input must not be null, undefined, or empty";
            });
          for (
            var n = e[0].shape[0],
              r = function (t) {
                D(e[t].shape[0] === n, function () {
                  return (
                    "Gram-Schmidt: Non-unique lengths found in the input vectors: (" +
                    e[t].shape[0] +
                    " vs. " +
                    n +
                    ")"
                  );
                });
              },
              o = 1;
            o < e.length;
            ++o
          )
            r(o);
        } else
          (t = !0),
            (e = Ii(e, e.shape[0], 0).map(function (t) {
              return sa(t, [0]);
            }));
        D(e.length <= e[0].shape[0], function () {
          return (
            "Gram-Schmidt: Number of vectors (" +
            e.length +
            ") exceeds number of dimensions (" +
            e[0].shape[0] +
            ")."
          );
        });
        var i = [],
          a = e,
          s = function (r) {
            i.push(
              Zt.engine.tidy(function () {
                var t = a[r];
                if (0 < r)
                  for (var e = 0; e < r; ++e) {
                    var n = iu(i[e].mulStrict(t)).mul(i[e]);
                    t = t.sub(n);
                  }
                return t.div(Zu(t, "euclidean"));
              })
            );
          };
        for (o = 0; o < e.length; ++o) s(o);
        return t ? ua(i, 0) : i;
      },
    }),
    Ac = Fe({
      qr_: function (t, o) {
        if ((void 0 === o && (o = !1), t.rank < 2))
          throw new Error(
            "qr() requires input tensor to have a rank >= 2, but got rank " +
              t.rank
          );
        if (2 === t.rank) return Ic(t, o);
        var e = t.shape.slice(0, t.shape.length - 2).reduce(function (t, e) {
            return t * e;
          }),
          i = [],
          a = [];
        return (
          ha(
            t.reshape([
              e,
              t.shape[t.shape.length - 2],
              t.shape[t.shape.length - 1],
            ]),
            0
          ).forEach(function (t) {
            var e = Ic(t, o),
              n = e[0],
              r = e[1];
            i.push(n), a.push(r);
          }),
          [ua(i, 0).reshape(t.shape), ua(a, 0).reshape(t.shape)]
        );
      },
    }),
    Dc = Object.freeze({ gramSchmidt: Tc, qr: Ac });
  function Mc(t, e, n, r, o) {
    null == r && (r = 0.5), null == o && (o = Number.NEGATIVE_INFINITY);
    var i = t.shape[0];
    return (
      (n = Math.min(n, i)),
      D(0 <= r && r <= 1, function () {
        return "iouThreshold must be in [0, 1], but was '" + r + "'";
      }),
      D(2 === t.rank, function () {
        return "boxes must be a 2D tensor, but was of rank '" + t.rank + "'";
      }),
      D(4 === t.shape[1], function () {
        return "boxes must have 4 columns, but 2nd dimension was " + t.shape[1];
      }),
      D(1 === e.rank, function () {
        return "scores must be a 1D tensor";
      }),
      D(e.shape[0] === i, function () {
        return (
          "scores has incompatible shape with boxes. Expected " +
          i +
          ", but was " +
          e.shape[0]
        );
      }),
      { maxOutputSize: n, iouThreshold: r, scoreThreshold: o }
    );
  }
  var Oc = Fe({
      resizeBilinear_: function (t, e, r) {
        void 0 === r && (r = !1);
        var n = re(t, "images", "resizeBilinear");
        D(3 === n.rank || 4 === n.rank, function () {
          return (
            "Error in resizeBilinear: x must be rank 3 or 4, but got rank " +
            n.rank +
            "."
          );
        }),
          D(2 === e.length, function () {
            return (
              "Error in resizeBilinear: new shape must 2D, but got shape " +
              e +
              "."
            );
          });
        var o = n,
          i = !1;
        3 === n.rank &&
          ((i = !0), (o = n.as4D(1, n.shape[0], n.shape[1], n.shape[2])));
        var a = e[0],
          s = e[1],
          u = Zt.engine.runKernel(
            function (t, e) {
              return e([o]), t.resizeBilinear(o, a, s, r);
            },
            { batchImages: o },
            function (e, n) {
              return {
                batchImages: function () {
                  return Zt.engine.runKernel(function (t) {
                    return t.resizeBilinearBackprop(e, n[0], r);
                  }, {});
                },
              };
            }
          );
        return i ? u.as3D(u.shape[1], u.shape[2], u.shape[3]) : u;
      },
    }),
    Pc = Fe({
      resizeNearestNeighbor_: function (t, e, r) {
        void 0 === r && (r = !1);
        var n = re(t, "images", "resizeNearestNeighbor");
        D(3 === n.rank || 4 === n.rank, function () {
          return (
            "Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank " +
            n.rank +
            "."
          );
        }),
          D(2 === e.length, function () {
            return (
              "Error in resizeNearestNeighbor: new shape must 2D, but got shape " +
              e +
              "."
            );
          }),
          D("float32" === n.dtype || "int32" === n.dtype, function () {
            return "`images` must have `int32` or `float32` as dtype";
          });
        var o = n,
          i = !1;
        3 === n.rank &&
          ((i = !0), (o = n.as4D(1, n.shape[0], n.shape[1], n.shape[2])));
        var a = e[0],
          s = e[1],
          u = Zt.engine.runKernel(
            function (t, e) {
              return e([o]), t.resizeNearestNeighbor(o, a, s, r);
            },
            { batchImages: o },
            function (e, n) {
              return {
                batchImages: function () {
                  return Zt.engine.runKernel(function (t) {
                    return t.resizeNearestNeighborBackprop(e, n[0], r);
                  }, {});
                },
              };
            }
          );
        return i ? u.as3D(u.shape[1], u.shape[2], u.shape[3]) : u;
      },
    }),
    Fc = Fe({
      nonMaxSuppression_: function (t, e, n, r, o) {
        void 0 === r && (r = 0.5),
          void 0 === o && (o = Number.NEGATIVE_INFINITY);
        var i = re(t, "boxes", "nonMaxSuppression"),
          a = re(e, "scores", "nonMaxSuppression"),
          s = Mc(i, a, n, r, o);
        return (
          (n = s.maxOutputSize),
          (r = s.iouThreshold),
          (o = s.scoreThreshold),
          Zt.engine.runKernel(
            function (t) {
              return t.nonMaxSuppression(i, a, n, r, o);
            },
            { $boxes: i }
          )
        );
      },
    }),
    Lc = function (s, u, c, l, h) {
      return (
        void 0 === l && (l = 0.5),
        void 0 === h && (h = Number.NEGATIVE_INFINITY),
        m(this, void 0, void 0, function () {
          var e, n, r, o, i, a;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                return (
                  (e = re(s, "boxes", "nonMaxSuppressionAsync")),
                  (n = re(u, "scores", "nonMaxSuppressionAsync")),
                  (r = Mc(e, n, c, l, h)),
                  (c = r.maxOutputSize),
                  (l = r.iouThreshold),
                  (h = r.scoreThreshold),
                  [4, e.data()]
                );
              case 1:
                return (o = t.sent()), [4, n.data()];
              case 2:
                return (
                  (i = t.sent()),
                  (a = ln(o, i, c, l, h)),
                  e !== s && e.dispose(),
                  n !== u && n.dispose(),
                  [2, a]
                );
            }
          });
        })
      );
    },
    Bc = Fe({
      cropAndResize_: function (t, e, n, r, o, i) {
        var a = re(t, "image", "cropAndResize", "float32"),
          s = re(e, "boxes", "cropAndResize", "float32"),
          u = re(n, "boxInd", "cropAndResize", "int32");
        (o = o || "bilinear"), (i = i || 0);
        var c = s.shape[0];
        return (
          D(4 === a.rank, function () {
            return (
              "Error in cropAndResize: image must be rank 4,but got rank " +
              a.rank +
              "."
            );
          }),
          D(2 === s.rank && 4 === s.shape[1], function () {
            return (
              "Error in cropAndResize: boxes must be have size [" +
              c +
              ",4] but had shape " +
              s.shape +
              "."
            );
          }),
          D(1 === u.rank && u.shape[0] === c, function () {
            return (
              "Error in cropAndResize: boxInd must be have size [" +
              c +
              "] but had shape " +
              s.shape +
              "."
            );
          }),
          D(2 === r.length, function () {
            return (
              "Error in cropAndResize: cropSize must be of length 2, but got length " +
              r.length +
              "."
            );
          }),
          D(1 <= r[0] && 1 <= r[1], function () {
            return "cropSize must be atleast [1,1], but was " + r;
          }),
          D("bilinear" === o || "nearest" === o, function () {
            return "method must be bilinear or nearest, but was " + o;
          }),
          Zt.engine.runKernel(
            function (t, e) {
              return t.cropAndResize(a, s, u, r, o, i);
            },
            { $image: a, $boxes: s }
          )
        );
      },
    }),
    Wc = Object.freeze({
      resizeBilinear: Oc,
      resizeNearestNeighbor: Pc,
      nonMaxSuppression: Fc,
      nonMaxSuppressionAsync: Lc,
      cropAndResize: Bc,
    });
  var zc = Fe({
      matMul_: function (t, e, s, u, c, l) {
        var n;
        void 0 === s && (s = !1),
          void 0 === u && (u = !1),
          void 0 === l && (l = "linear");
        var r = re(t, "a", "fused matMul"),
          o = re(e, "b", "fused matMul");
        (n = Tt(r, o)), (r = n[0]), (o = n[1]);
        var i = s ? r.shape[r.rank - 2] : r.shape[r.rank - 1],
          a = u ? o.shape[o.rank - 1] : o.shape[o.rank - 2],
          h = s ? r.shape[r.rank - 1] : r.shape[r.rank - 2],
          p = u ? o.shape[o.rank - 2] : o.shape[o.rank - 1],
          f = r.shape.slice(0, -2),
          d = o.shape.slice(0, -2),
          v = B(f),
          m = B(d);
        D(2 <= r.rank && 2 <= o.rank && r.rank === o.rank, function () {
          return (
            "Error in fused matMul: inputs must have the same rank of at least 2, got ranks " +
            r.rank +
            " and " +
            o.rank +
            "."
          );
        }),
          D(E(f, d), function () {
            return (
              "Error in fused matMul: outer dimensions (" +
              f +
              ") and (" +
              d +
              ") of Tensors with shapes " +
              r.shape +
              " and " +
              o.shape +
              " must match."
            );
          }),
          D(i === a, function () {
            return (
              "Error in fused matMul: inner shapes (" +
              i +
              ") and (" +
              a +
              ") of Tensors with shapes " +
              r.shape +
              " and " +
              o.shape +
              " and transposeA=" +
              s +
              " and transposeB=" +
              u +
              " must match."
            );
          });
        var g,
          y = r.shape.slice(0, -2).concat([h, p]),
          x = s ? r.as3D(v, i, h) : r.as3D(v, h, i),
          w = u ? o.as3D(m, p, a) : o.as3D(m, a, p);
        null != c &&
          xn(y, (g = Tt((g = re(c, "bias", "fused matMul")), r)[0]).shape);
        var b = { $a: x, $b: w };
        return (
          null != c && (b.$bias = g),
          Zt.engine
            .runKernel(
              function (t, e) {
                var n = t.fusedBatchMatMul(x, w, s, u, g, l);
                return e([x, w, n]), n;
              },
              b,
              function (t, e) {
                var n,
                  r = e[0],
                  o = e[1],
                  i = e[2];
                if (null == l || "linear" === l) n = t;
                else {
                  if ("relu" !== l)
                    throw new Error(
                      "Gradient for activation " +
                        l +
                        " has not been implemented yet."
                    );
                  n = t.mul(i.step());
                }
                var a = {};
                return (
                  null != c &&
                    (a = {
                      $bias: function () {
                        var t = n,
                          e = yn(g.shape, n.shape);
                        return (
                          0 < e.length && (t = t.sum(e)), t.reshape(g.shape)
                        );
                      },
                    }),
                  s || u
                    ? !s && u
                      ? Object.assign(
                          {
                            $a: function () {
                              return n.matMul(o, !1, !1);
                            },
                            $b: function () {
                              return n.matMul(r, !0, !1);
                            },
                          },
                          a
                        )
                      : s && !u
                      ? Object.assign(
                          {
                            $a: function () {
                              return o.matMul(n, !1, !0);
                            },
                            $b: function () {
                              return r.matMul(n, !1, !1);
                            },
                          },
                          a
                        )
                      : Object.assign(
                          {
                            $a: function () {
                              return o.matMul(n, !0, !0);
                            },
                            $b: function () {
                              return n.matMul(r, !0, !0);
                            },
                          },
                          a
                        )
                    : Object.assign(
                        {
                          $a: function () {
                            return n.matMul(o, !1, !0);
                          },
                          $b: function () {
                            return r.matMul(n, !0, !1);
                          },
                        },
                        a
                      )
                );
              }
            )
            .reshape(y)
        );
      },
    }),
    Uc = Object.freeze({ matMul: zc }),
    Gc = Object.freeze({
      image: Wc,
      linalg: Dc,
      losses: kc,
      spectral: dc,
      fused: Uc,
      op: Fe,
      batchNormalization2d: os,
      batchNormalization3d: is,
      batchNormalization4d: as,
      batchNormalization: ss,
      batchNorm: us,
      batchNorm2d: cs,
      batchNorm3d: ls,
      batchNorm4d: hs,
      complex: We,
      real: ze,
      imag: Ue,
      concat: _i,
      concat1d: Si,
      concat2d: Ri,
      concat3d: Ni,
      concat4d: ki,
      split: Ii,
      conv1d: _s,
      conv2d: Ss,
      conv3d: Rs,
      conv2dDerFilter: Ns,
      depthwiseConv2d: ks,
      separableConv2d: Is,
      conv2dTranspose: Ts,
      matMul: As,
      dot: Ds,
      outerProduct: Ms,
      reverse: Os,
      reverse1d: Ps,
      reverse2d: Fs,
      reverse3d: Ls,
      reverse4d: Bs,
      maxPool: Us,
      avgPool: Gs,
      pool: Vs,
      slice: Hs,
      slice1d: qs,
      slice2d: js,
      slice3d: $s,
      slice4d: Ks,
      abs: ga,
      acos: ya,
      acosh: xa,
      asin: wa,
      asinh: ba,
      atan: Ea,
      atanh: Ca,
      ceil: _a,
      clipByValue: Sa,
      cos: Ra,
      cosh: Na,
      erf: ka,
      exp: Ia,
      expm1: Ta,
      floor: Aa,
      log: Da,
      log1p: Ma,
      logSigmoid: Oa,
      neg: Pa,
      reciprocal: Fa,
      round: La,
      rsqrt: Ba,
      sigmoid: Wa,
      sign: za,
      isNaN: Ua,
      isInf: Ga,
      isFinite: Va,
      sin: Ha,
      sinh: qa,
      softplus: ja,
      sqrt: $a,
      square: Ka,
      step: Xa,
      tan: Ya,
      tanh: Qa,
      all: Ys,
      any: Qs,
      argMax: Js,
      argMin: Zs,
      logSumExp: tu,
      max: eu,
      mean: nu,
      min: ru,
      moments: ou,
      sum: iu,
      prod: au,
      equal: su,
      equalStrict: uu,
      greater: cu,
      greaterEqual: lu,
      greaterEqualStrict: hu,
      greaterStrict: pu,
      less: fu,
      lessEqual: du,
      lessEqualStrict: vu,
      lessStrict: mu,
      notEqual: gu,
      notEqualStrict: yu,
      add: xu,
      addN: wu,
      addStrict: bu,
      atan2: Eu,
      div: Cu,
      divStrict: _u,
      floorDiv: Su,
      maximum: Ru,
      maximumStrict: Nu,
      minimum: ku,
      minimumStrict: Iu,
      mod: Tu,
      modStrict: Au,
      mul: Du,
      mulStrict: Mu,
      pow: Ou,
      powStrict: Pu,
      squaredDifference: Fu,
      squaredDifferenceStrict: Lu,
      sub: Bu,
      subStrict: Wu,
      elu: ju,
      leakyRelu: $u,
      prelu: Ku,
      relu: Xu,
      selu: Yu,
      logicalAnd: zu,
      logicalNot: Uu,
      logicalOr: Gu,
      logicalXor: Vu,
      where: Hu,
      whereAsync: qu,
      buffer: zi,
      print: Ui,
      batchToSpaceND: Gi,
      cast: Vi,
      clone: Hi,
      cumsum: qi,
      depthToSpace: ji,
      expandDims: $i,
      eye: Ki,
      multinomial: Xi,
      oneHot: Yi,
      pad: Qi,
      pad1d: Ji,
      pad2d: Zi,
      pad3d: ta,
      pad4d: ea,
      rand: na,
      randomNormal: ra,
      randomUniform: oa,
      reshape: ia,
      spaceToBatchND: aa,
      squeeze: sa,
      stack: ua,
      tile: ca,
      truncatedNormal: la,
      unstack: ha,
      setdiff1dAsync: pa,
      fill: Je,
      linspace: Ze,
      ones: Ye,
      range: tn,
      scalar: Ve,
      tensor: Ge,
      tensor1d: He,
      tensor2d: qe,
      tensor3d: je,
      tensor4d: $e,
      tensor5d: Ke,
      tensor6d: Xe,
      zeros: Qe,
      onesLike: en,
      zerosLike: nn,
      transpose: Qu,
      softmax: Le,
      logSoftmax: Be,
      localResponseNormalization: Ju,
      norm: Zu,
      gather: nc,
      unsortedSegmentSum: rc,
      basicLSTMCell: oc,
      multiRNNCell: ic,
      movingAverage: ac,
      stridedSlice: sc,
      topk: uc,
      scatterND: cc,
      fft: lc,
      ifft: hc,
      rfft: pc,
      irfft: fc,
      sparseToDense: vc,
      gatherND: yc,
    });
  var Vc = (function () {
    function t() {
      (this.blockSize = 48),
        (this.firstUse = !0),
        Zt.get("IS_BROWSER") &&
          (this.fromPixels2DContext = document
            .createElement("canvas")
            .getContext("2d"));
    }
    return (
      (t.prototype.setDataMover = function (t) {
        this.data = new rn(t);
      }),
      (t.prototype.register = function (t, e, n) {
        if (
          (this.firstUse &&
            ((this.firstUse = !1),
            Zt.get("IS_NODE") &&
              fe(
                "\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================\n"
              )),
          this.data.has(t))
        )
          throw new Error("Data buffer is already registered");
        this.data.set(t, { dtype: n });
      }),
      (t.prototype.write = function (t, e) {
        if (null == e)
          throw new Error("MathBackendCPU.write(): values can not be null");
        this.data.get(t).values = e;
      }),
      (t.prototype.fromPixels = function (t, e) {
        if (null == t)
          throw new Error(
            "pixels passed to tf.browser.fromPixels() can not be null"
          );
        var n, r;
        if (Zt.get("IS_NODE") && null == t.getContext)
          throw new Error(
            "When running in node, pixels must be an HTMLCanvasElement like the one returned by the `canvas` npm package"
          );
        if (null != t.getContext)
          n = t.getContext("2d").getImageData(0, 0, t.width, t.height).data;
        else if (t instanceof ImageData) n = t.data;
        else {
          if (!(t instanceof HTMLImageElement || t instanceof HTMLVideoElement))
            throw new Error(
              "pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement or ImageData, but was " +
                t.constructor.name
            );
          if (null == this.fromPixels2DContext)
            throw new Error(
              "Can't read pixels from HTMLImageElement outside the browser."
            );
          (this.fromPixels2DContext.canvas.width = t.width),
            (this.fromPixels2DContext.canvas.height = t.height),
            this.fromPixels2DContext.drawImage(t, 0, 0, t.width, t.height),
            (n = this.fromPixels2DContext.getImageData(
              0,
              0,
              t.width,
              t.height
            ).data);
        }
        if (4 === e) r = new Int32Array(n);
        else {
          var o = t.width * t.height;
          r = new Int32Array(o * e);
          for (var i = 0; i < o; i++)
            for (var a = 0; a < e; ++a) r[i * e + a] = n[4 * i + a];
        }
        return je(r, [t.height, t.width, e], "int32");
      }),
      (t.prototype.read = function (e) {
        return m(this, void 0, void 0, function () {
          return R(this, function (t) {
            return [2, this.readSync(e)];
          });
        });
      }),
      (t.prototype.readSync = function (t) {
        var e = this.data.get(t),
          n = e.dtype,
          r = e.complexTensors;
        return "complex64" === n
          ? un(r.real.dataSync(), r.imag.dataSync())
          : this.data.get(t).values;
      }),
      (t.prototype.disposeData = function (t) {
        if (this.data.has(t)) {
          var e = this.data.get(t).complexTensors;
          null != e && (e.real.dispose(), e.imag.dispose()),
            this.data.delete(t);
        }
      }),
      (t.prototype.time = function (n) {
        return m(this, void 0, void 0, function () {
          var e;
          return R(this, function (t) {
            return (e = Z()), n(), [2, { kernelMs: Z() - e }];
          });
        });
      }),
      (t.prototype.memory = function () {
        return {
          unreliable: !0,
          reasons: [
            "The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less.",
          ],
        };
      }),
      (t.prototype.complex = function (t, e) {
        var n = dt.make(t.shape, {}, "complex64");
        return (
          (this.data.get(n.dataId).complexTensors = {
            real: Zt.engine.keep(t.clone()),
            imag: Zt.engine.keep(e.clone()),
          }),
          n
        );
      }),
      (t.prototype.real = function (t) {
        return this.data.get(t.dataId).complexTensors.real.clone();
      }),
      (t.prototype.imag = function (t) {
        return this.data.get(t.dataId).complexTensors.imag.clone();
      }),
      (t.prototype.assertNotComplex = function (t, e) {
        Array.isArray(t) || (t = [t]),
          t.forEach(function (t) {
            null != t &&
              D("complex64" !== t.dtype, function () {
                return e + " does not support complex64 tensors.";
              });
          });
      }),
      (t.prototype.slice = function (t, n, e) {
        if ((this.assertNotComplex(t, "slice"), Oe(t.shape, n, e))) {
          var r = Pe(n, t.strides),
            o = B(e);
          return Ge(t.dataSync().subarray(r, r + o), e, t.dtype);
        }
        for (
          var i = zi(e, t.dtype), a = t.bufferSync(), s = 0;
          s < i.size;
          ++s
        ) {
          var u = i.indexToLoc(s).map(function (t, e) {
            return t + n[e];
          });
          i.values[s] = a.get.apply(a, u);
        }
        return i.toTensor();
      }),
      (t.prototype.stridedSlice = function (t, e, n, r, o, i, a, s, u) {
        this.assertNotComplex(t, "stridedSlice");
        var c = Ae(t.shape, e, n, r, o, i, a, s, u),
          l = c[0],
          h = c[1],
          p = c[2],
          f = h.filter(function (t, e) {
            return -1 === p.indexOf(e);
          });
        if (
          f.some(function (t) {
            return 0 === t;
          })
        )
          return Ge([], f);
        for (
          var d = zi(h, t.dtype), v = t.bufferSync(), m = 0;
          m < d.size;
          m++
        ) {
          for (
            var g = d.indexToLoc(m), y = new Array(g.length), x = 0;
            x < y.length;
            x++
          )
            y[x] = g[x] * r[x] + l[x];
          d.set.apply(d, [v.get.apply(v, y)].concat(g));
        }
        return d.toTensor().reshape(f);
      }),
      (t.prototype.unstack = function (t, e) {
        for (
          var n = t.shape[e], r = new Array(t.rank - 1), o = 0, i = 0;
          i < t.rank;
          i++
        )
          i !== e && (r[o++] = t.shape[i]);
        var a = new Array(t.rank).fill(0),
          s = t.shape.slice();
        s[e] = 1;
        var u = new Array(n);
        for (i = 0; i < u.length; i++)
          u[(a[e] = i)] = this.slice(t, a, s).reshape(r);
        return u;
      }),
      (t.prototype.reverse = function (r, o) {
        this.assertNotComplex(r, "reverse");
        for (
          var i = zi(r.shape, r.dtype),
            a = r.bufferSync(),
            t = function (t) {
              var e = i.indexToLoc(t),
                n = e.slice();
              o.forEach(function (t) {
                return (n[t] = r.shape[t] - 1 - n[t]);
              }),
                i.set.apply(i, [a.get.apply(a, n)].concat(e));
            },
            e = 0;
          e < i.size;
          e++
        )
          t(e);
        return i.toTensor();
      }),
      (t.prototype.concat = function (t, n) {
        this.assertNotComplex(t, "concat");
        var e = t.map(function (t) {
            var e = B(t.shape.slice(n));
            return t.as2D(-1, e);
          }),
          a = Re(
            e.map(function (t) {
              return t.shape;
            }),
            1
          ),
          s = zi(a, t[0].dtype).values;
        if (1 === e[0].shape[0]) {
          var r = 0;
          e.forEach(function (t) {
            s.set(t.dataSync(), r), (r += t.size);
          });
        } else {
          var u = 0;
          e.forEach(function (t) {
            for (var e = t.dataSync(), n = 0, r = 0; r < t.shape[0]; ++r)
              for (var o = r * a[1] + u, i = 0; i < t.shape[1]; ++i)
                s[o + i] = e[n++];
            u += t.shape[1];
          });
        }
        var o = Re(
          t.map(function (t) {
            return t.shape;
          }),
          n
        );
        return Ge(s, o, t[0].dtype);
      }),
      (t.prototype.neg = function (t) {
        return this.assertNotComplex(t, "neg"), this.multiply(Ve(-1), t);
      }),
      (t.prototype.add = function (t, e) {
        return "complex64" === t.dtype || "complex64" === e.dtype
          ? this.broadcastedBinaryComplexOp(
              t.cast("complex64"),
              e.cast("complex64"),
              function (t, e, n, r) {
                return { real: t + n, imag: e + r };
              }
            )
          : this.broadcastedBinaryOp(
              t,
              e,
              kt(t.dtype, e.dtype),
              function (t, e) {
                return t + e;
              }
            );
      }),
      (t.prototype.addN = function (t) {
        this.assertNotComplex(t, "addN");
        for (
          var e = t.map(function (t) {
              return t.dataSync();
            }),
            n = zi(t[0].shape, t[0].dtype),
            r = n.values,
            o = 0;
          o < t.length;
          o++
        )
          for (var i = e[o], a = 0; a < r.length; a++) r[a] += i[a];
        return n.toTensor();
      }),
      (t.prototype.subtract = function (t, e) {
        return "complex64" === t.dtype || "complex64" === e.dtype
          ? this.broadcastedBinaryComplexOp(
              t.cast("complex64"),
              e.cast("complex64"),
              function (t, e, n, r) {
                return { real: t - n, imag: e - r };
              }
            )
          : this.broadcastedBinaryOp(
              t,
              e,
              kt(t.dtype, e.dtype),
              function (t, e) {
                return t - e;
              }
            );
      }),
      (t.prototype.pow = function (t, e) {
        return (
          this.assertNotComplex([t, e], "pow"),
          this.broadcastedBinaryOp(t, e, t.dtype, function (t, e) {
            return Math.pow(t, e);
          })
        );
      }),
      (t.prototype.batchMatMul = function (t, e, n, r) {
        this.assertNotComplex([t, e], "matMul");
        for (
          var o = n ? t.shape[1] : t.shape[2],
            i = n ? t.shape[2] : t.shape[1],
            a = r ? e.shape[1] : e.shape[2],
            s = t.shape[0],
            u = t.dataSync(),
            c = e.dataSync(),
            l = n
              ? [t.strides[0], 1, t.strides[1]]
              : [t.strides[0], t.strides[1], 1],
            h = l[0],
            p = l[1],
            f = l[2],
            d = r
              ? [1, e.strides[1], e.strides[0]]
              : [e.strides[1], 1, e.strides[0]],
            v = d[0],
            m = d[1],
            g = d[2],
            y = i * a,
            x = zi([s, i, a], t.dtype),
            w = x.values,
            b = this.blockSize,
            E = 0;
          E < s;
          E++
        )
          for (var C = 0; C < i; C += b)
            for (var _ = 0; _ < a; _ += b)
              for (var S = 0; S < o; S += b)
                for (
                  var R = Math.min(C + b, i),
                    N = Math.min(_ + b, a),
                    k = Math.min(S + b, o),
                    I = C;
                  I < R;
                  I++
                )
                  for (var T = _; T < N; T++) {
                    for (var A = 0, D = S; D < k; D++)
                      A += u[E * h + I * p + D * f] * c[D * v + T * m + E * g];
                    w[E * y + (I * a + T)] += A;
                  }
        return x.toTensor();
      }),
      (t.prototype.fusedBatchMatMul = function (t, e, n, r, o, i) {
        var a = this.batchMatMul(t, e, n, r);
        return (
          o && (a = this.add(a, o)),
          i &&
            (a = (function (t, e, n) {
              if ("linear" === e) return t.linear(n);
              if ("relu" === e) return t.relu(n);
              throw new Error(
                "Activation " +
                  e +
                  " has not been implemented for the CPU backend."
              );
            })(this, i, a)),
          a
        );
      }),
      (t.prototype.multiply = function (t, e) {
        return "complex64" === t.dtype || "complex64" === e.dtype
          ? this.broadcastedBinaryComplexOp(
              t.cast("complex64"),
              e.cast("complex64"),
              function (t, e, n, r) {
                return { real: t * n - e * r, imag: t * r + e * n };
              }
            )
          : this.broadcastedBinaryOp(
              t,
              e,
              kt(t.dtype, e.dtype),
              function (t, e) {
                return t * e;
              }
            );
      }),
      (t.prototype.realDivide = function (t, e) {
        return (
          this.assertNotComplex([t, e], "realDivide"),
          this.broadcastedBinaryOp(t, e, "float32", function (t, e) {
            return t / e;
          })
        );
      }),
      (t.prototype.floorDiv = function (t, e) {
        return (
          this.assertNotComplex([t, e], "floorDiv"),
          this.broadcastedBinaryOp(t, e, "int32", function (t, e) {
            return Math.floor(t / e);
          })
        );
      }),
      (t.prototype.sum = function (t, e) {
        this.assertNotComplex(t, "sum"), Ee("sum", e, t.rank);
        for (
          var n = we(t.shape, e),
            r = n[0],
            o = n[1],
            i = Qe(r, kt(t.dtype, "int32")),
            a = B(o),
            s = i.dataSync(),
            u = t.dataSync(),
            c = 0;
          c < s.length;
          ++c
        ) {
          for (var l = c * a, h = 0, p = 0; p < a; ++p) h += u[l + p];
          s[c] = h;
        }
        return i;
      }),
      (t.prototype.prod = function (t, e) {
        this.assertNotComplex(t, "sum");
        for (
          var n = we(t.shape, e),
            r = n[0],
            o = n[1],
            i = Qe(r, kt(t.dtype, "int32")),
            a = B(o),
            s = i.dataSync(),
            u = t.dataSync(),
            c = 0;
          c < s.length;
          ++c
        ) {
          for (var l = c * a, h = 1, p = 0; p < a; ++p) h *= u[l + p];
          s[c] = h;
        }
        return i;
      }),
      (t.prototype.unsortedSegmentSum = function (t, e, n) {
        this.assertNotComplex(t, "unsortedSegmentSum");
        for (var r = [], o = t.rank - e.rank, i = 0; i < o; ++i)
          e = e.expandDims(i + 1);
        for (i = 0; i < n; ++i) {
          var a = Ve(i, "int32"),
            s = su(a, e).asType("float32").mul(t).sum(0);
          r.push(s);
        }
        return ua(r);
      }),
      (t.prototype.argMin = function (t, e) {
        this.assertNotComplex(t, "argMin");
        var n = [e];
        Ee("argMin", n, t.rank);
        for (
          var r = we(t.shape, n),
            o = r[0],
            i = r[1],
            a = Qe(o, "int32"),
            s = B(i),
            u = a.dataSync(),
            c = t.dataSync(),
            l = 0;
          l < u.length;
          ++l
        ) {
          for (var h = l * s, p = c[h], f = 0, d = 0; d < s; ++d) {
            var v = c[h + d];
            v < p && ((p = v), (f = d));
          }
          u[l] = f;
        }
        return a;
      }),
      (t.prototype.argMax = function (t, e) {
        this.assertNotComplex(t, "argMax");
        var n = [e];
        Ee("argMax", n, t.rank);
        for (
          var r = we(t.shape, n),
            o = r[0],
            i = r[1],
            a = Qe(o, "int32"),
            s = B(i),
            u = a.dataSync(),
            c = t.dataSync(),
            l = 0;
          l < u.length;
          ++l
        ) {
          for (var h = l * s, p = c[h], f = 0, d = 0; d < s; ++d) {
            var v = c[h + d];
            p < v && ((p = v), (f = d));
          }
          u[l] = f;
        }
        return a;
      }),
      (t.prototype.cumsum = function (t, e, n, r) {
        if ((this.assertNotComplex(t, "cumsum"), e !== t.rank - 1))
          throw new Error(
            "backend.cumsum in CPU expects an inner-most axis=" +
              (t.rank - 1) +
              " but got axis=" +
              e
          );
        for (
          var o = kt(t.dtype, "int32"),
            i = Qe(t.shape, o),
            a = i.dataSync(),
            s = t.dataSync(),
            u = t.shape[t.rank - 1],
            c = r
              ? function (t, e) {
                  return t + u - e - 1;
                }
              : function (t, e) {
                  return t + e;
                },
            l = 0;
          l < s.length;
          l += u
        )
          for (var h = 0; h < u; h++) {
            var p = c(l, h);
            if (0 === h) a[p] = n ? 0 : s[p];
            else {
              var f = c(l, h - 1);
              a[p] = n ? s[f] + a[f] : s[p] + a[f];
            }
          }
        return i;
      }),
      (t.prototype.equal = function (t, e) {
        return (
          this.assertNotComplex([t, e], "equal"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return t === e ? 1 : 0;
          })
        );
      }),
      (t.prototype.notEqual = function (t, e) {
        return (
          this.assertNotComplex([t, e], "notEqual"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return t !== e ? 1 : 0;
          })
        );
      }),
      (t.prototype.less = function (t, e) {
        return (
          this.assertNotComplex([t, e], "less"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return t < e ? 1 : 0;
          })
        );
      }),
      (t.prototype.lessEqual = function (t, e) {
        return (
          this.assertNotComplex([t, e], "lessEqual"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return t <= e ? 1 : 0;
          })
        );
      }),
      (t.prototype.greater = function (t, e) {
        return (
          this.assertNotComplex([t, e], "greater"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return e < t ? 1 : 0;
          })
        );
      }),
      (t.prototype.greaterEqual = function (t, e) {
        return (
          this.assertNotComplex([t, e], "greaterEqual"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return e <= t ? 1 : 0;
          })
        );
      }),
      (t.prototype.logicalNot = function (t) {
        this.assertNotComplex(t, "logicalNot");
        for (
          var e = t.dataSync(), n = new Uint8Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          n[r] = e[r] ? 0 : 1;
        return dt.make(t.shape, { values: n }, "bool");
      }),
      (t.prototype.logicalAnd = function (t, e) {
        return (
          this.assertNotComplex([t, e], "logicalAnd"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return t && e;
          })
        );
      }),
      (t.prototype.logicalOr = function (t, e) {
        return (
          this.assertNotComplex([t, e], "logicalOr"),
          this.broadcastedBinaryOp(t, e, "bool", function (t, e) {
            return t || e;
          })
        );
      }),
      (t.prototype.select = function (t, e, n) {
        this.assertNotComplex([t, e, n], "select");
        for (
          var r = t.dataSync(),
            o = e.dataSync(),
            i = n.dataSync(),
            a = Qe(e.shape, kt(e.dtype, n.dtype)),
            s = a.dataSync(),
            u = 0,
            c = 0 === t.rank || 1 < t.rank || 1 === e.rank ? 1 : e.shape[1],
            l = 0;
          l < r.length;
          l++
        )
          for (var h = 0; h < c; h++)
            1 === r[l] ? (s[u++] = o[l]) : (s[u++] = i[l]);
        return a;
      }),
      (t.prototype.where = function (t) {
        this.assertNotComplex([t], "where");
        var e = t.dataSync();
        return fa(t.shape, e);
      }),
      (t.prototype.topk = function (t, e, n) {
        return (
          this.assertNotComplex(t, "topk"),
          fn(t.dataSync(), t.shape, t.dtype, e)
        );
      }),
      (t.prototype.min = function (t, e) {
        this.assertNotComplex(t, "min"), Ee("min", e, t.rank);
        for (
          var n = we(t.shape, e),
            r = n[0],
            o = n[1],
            i = Qe(r, t.dtype),
            a = B(o),
            s = i.dataSync(),
            u = t.dataSync(),
            c = 0;
          c < s.length;
          ++c
        ) {
          for (var l = c * a, h = u[l], p = 0; p < a; ++p) {
            var f = u[l + p];
            f < h && (h = f);
          }
          s[c] = h;
        }
        return i;
      }),
      (t.prototype.minimum = function (t, e) {
        return (
          this.assertNotComplex([t, e], "minimum"),
          this.broadcastedBinaryOp(t, e, t.dtype, function (t, e) {
            return Math.min(t, e);
          })
        );
      }),
      (t.prototype.mod = function (t, e) {
        return (
          this.assertNotComplex([t, e], "mod"),
          this.broadcastedBinaryOp(t, e, t.dtype, function (t, e) {
            var n = t % e;
            return (t < 0 && e < 0) || (0 <= t && 0 <= e) ? n : (n + e) % e;
          })
        );
      }),
      (t.prototype.max = function (t, e) {
        this.assertNotComplex(t, "max"), Ee("max", e, t.rank);
        for (
          var n = we(t.shape, e),
            r = n[0],
            o = n[1],
            i = Qe(r, t.dtype),
            a = B(o),
            s = i.dataSync(),
            u = t.dataSync(),
            c = 0;
          c < s.length;
          ++c
        ) {
          for (var l = c * a, h = u[l], p = 0; p < a; ++p) {
            var f = u[l + p];
            h < f && (h = f);
          }
          s[c] = h;
        }
        return i;
      }),
      (t.prototype.maximum = function (t, e) {
        return (
          this.assertNotComplex([t, e], "maximum"),
          this.broadcastedBinaryOp(t, e, t.dtype, function (t, e) {
            return Math.max(t, e);
          })
        );
      }),
      (t.prototype.all = function (t, e) {
        this.assertNotComplex(t, "all"), Ee("all", e, t.rank);
        for (
          var n = we(t.shape, e),
            r = n[0],
            o = n[1],
            i = Qe(r, t.dtype),
            a = B(o),
            s = i.dataSync(),
            u = t.dataSync(),
            c = 0;
          c < s.length;
          ++c
        ) {
          for (var l = c * a, h = u[l], p = 0; p < a; ++p) {
            var f = u[l + p];
            h = h && f;
          }
          s[c] = h;
        }
        return i;
      }),
      (t.prototype.any = function (t, e) {
        this.assertNotComplex(t, "any"), Ee("any", e, t.rank);
        for (
          var n = we(t.shape, e),
            r = n[0],
            o = n[1],
            i = Qe(r, t.dtype),
            a = B(o),
            s = i.dataSync(),
            u = t.dataSync(),
            c = 0;
          c < s.length;
          ++c
        ) {
          for (var l = c * a, h = u[l], p = 0; p < a; ++p) {
            var f = u[l + p];
            h = h || f;
          }
          s[c] = h;
        }
        return i;
      }),
      (t.prototype.squaredDifference = function (t, e) {
        return (
          this.assertNotComplex([t, e], "squaredDifference"),
          this.broadcastedBinaryOp(t, e, t.dtype, function (t, e) {
            var n = t - e;
            return n * n;
          })
        );
      }),
      (t.prototype.ceil = function (t) {
        this.assertNotComplex(t, "ceil");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          n[r] = Math.ceil(e[r]);
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.floor = function (t) {
        this.assertNotComplex(t, "floor");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          n[r] = Math.floor(e[r]);
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.sign = function (t) {
        this.assertNotComplex(t, "x");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          e[r] < 0 ? (n[r] = -1) : 0 < e[r] ? (n[r] = 1) : (n[r] = 0);
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.isNaN = function (t) {
        this.assertNotComplex(t, "x");
        for (
          var e = t.dataSync(), n = new Uint8Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          Number.isNaN(e[r]) && (n[r] = 1);
        return dt.make(t.shape, { values: n }, "bool");
      }),
      (t.prototype.isInf = function (t) {
        this.assertNotComplex(t, "x");
        for (
          var e = t.dataSync(), n = new Uint8Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          Math.abs(e[r]) === 1 / 0 && (n[r] = 1);
        return dt.make(t.shape, { values: n }, "bool");
      }),
      (t.prototype.isFinite = function (t) {
        this.assertNotComplex(t, "x");
        for (
          var e = t.dataSync(), n = new Uint8Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          Number.isFinite(e[r]) && (n[r] = 1);
        return dt.make(t.shape, { values: n }, "bool");
      }),
      (t.prototype.round = function (t) {
        this.assertNotComplex(t, "round");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        ) {
          var o = Math.floor(e[r]);
          e[r] - o < 0.5
            ? (n[r] = Math.floor(e[r]))
            : 0.5 < e[r] - o
            ? (n[r] = Math.ceil(e[r]))
            : (n[r] = o % 2 == 0 ? o : o + 1);
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.exp = function (t) {
        this.assertNotComplex(t, "exp");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          n[r] = Math.exp(e[r]);
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.expm1 = function (t) {
        this.assertNotComplex(t, "expm1");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          n[r] = Math.expm1(e[r]);
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.log = function (t) {
        this.assertNotComplex(t, "log");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        ) {
          var o = e[r];
          n[r] = Math.log(o);
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.log1p = function (t) {
        this.assertNotComplex(t, "log1p");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        ) {
          var o = e[r];
          n[r] = Math.log1p(o);
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.sqrt = function (t) {
        this.assertNotComplex(t, "sqrt");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        ) {
          var o = e[r];
          n[r] = Math.sqrt(o);
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.rsqrt = function (t) {
        this.assertNotComplex(t, "rsqrt");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        ) {
          var o = e[r];
          n[r] = 1 / Math.sqrt(o);
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.square = function (t) {
        this.assertNotComplex(t, "square");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        ) {
          var o = e[r];
          n[r] = o * o;
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.reciprocal = function (t) {
        this.assertNotComplex(t, "reciprocal");
        for (
          var e = t.dataSync(), n = new Float32Array(e.length), r = 0;
          r < e.length;
          ++r
        )
          n[r] = 1 / e[r];
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.linear = function (t) {
        return t;
      }),
      (t.prototype.relu = function (t) {
        this.assertNotComplex(t, "relu");
        for (
          var e = Qe(t.shape, t.dtype),
            n = e.dataSync(),
            r = t.dataSync(),
            o = 0;
          o < r.length;
          ++o
        )
          n[o] = Math.max(0, r[o]);
        return e;
      }),
      (t.prototype.prelu = function (t, e) {
        return (
          this.assertNotComplex([t, e], "prelu"),
          this.broadcastedBinaryOp(t, e, t.dtype, function (t, e) {
            return t < 0 ? e * t : t;
          })
        );
      }),
      (t.prototype.elu = function (t) {
        this.assertNotComplex(t, "elu");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        ) {
          var o = n[r];
          e[r] = 0 <= o ? o : Math.exp(o) - 1;
        }
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.eluDer = function (t, e) {
        this.assertNotComplex([t, e], "eluDer");
        for (
          var n = new Float32Array(e.size),
            r = e.dataSync(),
            o = t.dataSync(),
            i = 0;
          i < r.length;
          ++i
        ) {
          var a = r[i];
          n[i] = 1 <= a ? o[i] : o[i] * (a + 1);
        }
        return dt.make(e.shape, { values: n });
      }),
      (t.prototype.selu = function (t) {
        this.assertNotComplex(t, "selu");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        ) {
          var o = n[r];
          e[r] =
            0 <= o
              ? 1.0507009873554805 * o
              : 1.7580993408473768 * (Math.exp(o) - 1);
        }
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.clip = function (t, e, n) {
        this.assertNotComplex(t, "clip");
        for (
          var r = new Float32Array(t.size), o = t.dataSync(), i = 0;
          i < o.length;
          ++i
        ) {
          var a = o[i];
          r[i] = n < a ? n : a < e ? e : a;
        }
        return dt.make(t.shape, { values: r });
      }),
      (t.prototype.abs = function (t) {
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.abs(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.complexAbs = function (t) {
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < t.size;
          ++r
        ) {
          var o = n[2 * r],
            i = n[2 * r + 1];
          e[r] = Math.hypot(o, i);
        }
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.int = function (t) {
        this.assertNotComplex(t, "int");
        for (
          var e = new Int32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = n[r];
        return dt.make(t.shape, { values: e }, "int32");
      }),
      (t.prototype.sigmoid = function (t) {
        this.assertNotComplex(t, "sigmoid");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = 1 / (1 + Math.exp(-n[r]));
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.softplus = function (t) {
        this.assertNotComplex(t, "softplus");
        for (
          var e = Math.log(1.1920928955078125e-7) + 2,
            n = new Float32Array(t.size),
            r = t.dataSync(),
            o = 0;
          o < r.length;
          ++o
        ) {
          var i,
            a = r[o] > -e,
            s = r[o] < e,
            u = Math.exp(r[o]);
          (i = s ? u : a ? r[o] : Math.log(1 + u)), (n[o] = i);
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.sin = function (t) {
        this.assertNotComplex(t, "sin");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.sin(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.cos = function (t) {
        this.assertNotComplex(t, "cos");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.cos(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.tan = function (t) {
        this.assertNotComplex(t, "tan");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.tan(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.asin = function (t) {
        this.assertNotComplex(t, "asin");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.asin(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.acos = function (t) {
        this.assertNotComplex(t, "acos");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.acos(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.atan = function (t) {
        this.assertNotComplex(t, "atan");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.atan(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.atan2 = function (t, e) {
        return (
          this.assertNotComplex([t, e], "atan2"),
          this.broadcastedBinaryOp(t, e, t.dtype, function (t, e) {
            return Math.atan2(t, e);
          })
        );
      }),
      (t.prototype.sinh = function (t) {
        this.assertNotComplex(t, "sinh");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.sinh(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.cosh = function (t) {
        this.assertNotComplex(t, "cosh");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.cosh(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.tanh = function (t) {
        this.assertNotComplex(t, "tanh");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = w(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.asinh = function (t) {
        this.assertNotComplex(t, "asinh");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.asinh(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.acosh = function (t) {
        this.assertNotComplex(t, "acosh");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.acosh(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.atanh = function (t) {
        this.assertNotComplex(t, "atanh");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        )
          e[r] = Math.atanh(n[r]);
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.erf = function (t) {
        this.assertNotComplex(t, "erf");
        for (
          var e = new Float32Array(t.size), n = t.dataSync(), r = 0;
          r < n.length;
          ++r
        ) {
          var o = n[r],
            i = 1 / (1 + 0.3275911 * o);
          e[r] =
            1 -
            ((((1.061405429 * i - 1.453152027) * i + 1.421413741) * i -
              0.284496736) *
              i +
              0.254829592) *
              i *
              Math.exp(-o * o);
        }
        return dt.make(t.shape, { values: e });
      }),
      (t.prototype.step = function (t, e) {
        void 0 === e && (e = 0), this.assertNotComplex(t, "step");
        for (
          var n = new Float32Array(t.size), r = t.dataSync(), o = 0;
          o < r.length;
          ++o
        ) {
          var i = r[o];
          isNaN(i) ? (n[o] = NaN) : (n[o] = 0 < i ? 1 : e);
        }
        return dt.make(t.shape, { values: n });
      }),
      (t.prototype.conv2d = function (t, e, n) {
        this.assertNotComplex([t, e], "conv2d");
        for (
          var r = n.filterHeight,
            o = n.filterWidth,
            i = n.dilationHeight,
            a = n.dilationWidth,
            s = n.padInfo.left,
            u = n.padInfo.top,
            c = zi(n.outShape, t.dtype),
            l = t.dataSync(),
            h = e.dataSync(),
            p = c.values,
            f = 0;
          f < n.batchSize;
          ++f
        )
          for (
            var d = f * t.strides[0], v = f * c.strides[0], m = 0;
            m < n.outHeight;
            ++m
          )
            for (
              var g = v + m * c.strides[1], y = m * n.strideHeight - s, x = 0;
              x < r;
              x++
            ) {
              var w = y + x * i;
              if (!(w < 0 || w >= n.inHeight))
                for (
                  var b = x * e.strides[0], E = d + w * t.strides[1], C = 0;
                  C < n.outWidth;
                  ++C
                )
                  for (
                    var _ = g + C * n.outChannels,
                      S = C * n.strideWidth - u,
                      R = 0;
                    R < o;
                    R++
                  ) {
                    var N = S + R * a;
                    if (!(N < 0 || N >= n.inWidth))
                      for (
                        var k = b + R * e.strides[1],
                          I = E + N * n.inChannels,
                          T = k,
                          A = 0;
                        A < n.inChannels;
                        ++A
                      ) {
                        for (var D = l[I + A], M = 0; M < n.outChannels; ++M)
                          p[_ + M] += D * h[T + M];
                        T += n.outChannels;
                      }
                  }
            }
        return c.toTensor();
      }),
      (t.prototype.conv3d = function (t, e, n) {
        for (
          var r = n.filterDepth,
            o = n.filterHeight,
            i = n.filterWidth,
            a = n.dilationDepth,
            s = n.dilationHeight,
            u = n.dilationWidth,
            c = n.padInfo.front,
            l = n.padInfo.left,
            h = n.padInfo.top,
            p = zi(n.outShape, t.dtype),
            f = t.dataSync(),
            d = e.dataSync(),
            v = p.values,
            m = 0;
          m < n.batchSize;
          ++m
        )
          for (
            var g = m * t.strides[0], y = m * p.strides[0], x = 0;
            x < n.outDepth;
            ++x
          )
            for (
              var w = y + x * p.strides[1], b = x * n.strideDepth - c, E = 0;
              E < r;
              E++
            ) {
              var C = b + E * a;
              if (!(C < 0 || C >= n.inDepth))
                for (
                  var _ = E * e.strides[0], S = g + C * t.strides[1], R = 0;
                  R < n.outHeight;
                  ++R
                )
                  for (
                    var N = w + R * p.strides[2],
                      k = R * n.strideHeight - h,
                      I = 0;
                    I < o;
                    I++
                  ) {
                    var T = k + I * s;
                    if (!(T < 0 || T >= n.inHeight))
                      for (
                        var A = _ + I * e.strides[1],
                          D = S + T * t.strides[2],
                          M = 0;
                        M < n.outWidth;
                        ++M
                      )
                        for (
                          var O = N + M * n.outChannels,
                            P = M * n.strideWidth - l,
                            F = 0;
                          F < i;
                          F++
                        ) {
                          var L = P + F * u;
                          if (!(L < 0 || L >= n.inWidth))
                            for (
                              var B = A + F * e.strides[2],
                                W = D + L * n.inChannels,
                                z = B,
                                U = 0;
                              U < n.inChannels;
                              ++U
                            ) {
                              for (
                                var G = f[W + U], V = 0;
                                V < n.outChannels;
                                ++V
                              )
                                v[O + V] += G * d[z + V];
                              z += n.outChannels;
                            }
                        }
                  }
            }
        return p.toTensor();
      }),
      (t.prototype.conv2dDerInput = function (t, e, n) {
        this.assertNotComplex([t, e], "conv2dDerInput");
        for (
          var r = zi(n.inShape, "float32"),
            o = r.values,
            i = r.strides,
            a = i[0],
            s = i[1],
            u = i[2],
            c = t.dataSync(),
            l = t.strides,
            h = l[0],
            p = l[1],
            f = l[2],
            d = e.dataSync(),
            v = e.strides,
            m = v[0],
            g = v[1],
            y = v[2],
            x = n.batchSize,
            w = n.filterHeight,
            b = n.filterWidth,
            E = n.inChannels,
            C = n.inHeight,
            _ = n.inWidth,
            S = n.outChannels,
            R = n.outHeight,
            N = n.outWidth,
            k = n.strideHeight,
            I = n.strideWidth,
            T = w - 1 - n.padInfo.top,
            A = b - 1 - n.padInfo.left,
            D = 0;
          D < x;
          ++D
        )
          for (var M = 0; M < E; ++M)
            for (var O = 0; O < C; ++O)
              for (
                var P = O - T,
                  F = Math.max(0, Math.ceil(P / k)),
                  L = Math.min(R, (w + P) / k),
                  B = 0;
                B < _;
                ++B
              ) {
                for (
                  var W = B - A,
                    z = Math.max(0, Math.ceil(W / I)),
                    U = Math.min(N, (b + W) / I),
                    G = 0,
                    V = F;
                  V < L;
                  ++V
                )
                  for (var H = V * k - P, q = z; q < U; ++q)
                    for (
                      var j = h * D + p * V + f * q,
                        $ = m * (w - 1 - H) + g * (b - 1 - (q * I - W)) + y * M,
                        K = 0;
                      K < S;
                      ++K
                    )
                      G += c[j + K] * d[$ + K];
                o[a * D + s * O + u * B + M] = G;
              }
        return r.toTensor();
      }),
      (t.prototype.conv3dDerInput = function (t, e, n) {
        for (
          var r = zi(n.inShape, "float32"),
            o = r.values,
            i = r.strides,
            a = i[0],
            s = i[1],
            u = i[2],
            c = i[3],
            l = t.dataSync(),
            h = t.strides,
            p = h[0],
            f = h[1],
            d = h[2],
            v = h[3],
            m = e.dataSync(),
            g = e.strides,
            y = g[0],
            x = g[1],
            w = g[2],
            b = g[3],
            E = n.batchSize,
            C = n.filterDepth,
            _ = n.filterHeight,
            S = n.filterWidth,
            R = n.inChannels,
            N = n.inDepth,
            k = n.inHeight,
            I = n.inWidth,
            T = n.outChannels,
            A = n.outDepth,
            D = n.outHeight,
            M = n.outWidth,
            O = n.strideDepth,
            P = n.strideHeight,
            F = n.strideWidth,
            L = C - 1 - n.padInfo.front,
            B = _ - 1 - n.padInfo.top,
            W = S - 1 - n.padInfo.left,
            z = 0;
          z < E;
          ++z
        )
          for (var U = 0; U < R; ++U)
            for (var G = 0; G < N; ++G)
              for (
                var V = G - L,
                  H = Math.max(0, Math.ceil(V / O)),
                  q = Math.min(A, (C + V) / O),
                  j = 0;
                j < k;
                ++j
              )
                for (
                  var $ = j - B,
                    K = Math.max(0, Math.ceil($ / P)),
                    X = Math.min(D, (_ + $) / P),
                    Y = 0;
                  Y < I;
                  ++Y
                ) {
                  for (
                    var Q = Y - W,
                      J = Math.max(0, Math.ceil(Q / F)),
                      Z = Math.min(M, (S + Q) / F),
                      tt = 0,
                      et = H;
                    et < q;
                    ++et
                  )
                    for (var nt = et * O - V, rt = K; rt < X; ++rt)
                      for (var ot = rt * P - $, it = J; it < Z; ++it)
                        for (
                          var at = p * z + f * et + d * rt + v * it,
                            st =
                              y * (C - 1 - nt) +
                              x * (_ - 1 - ot) +
                              w * (S - 1 - (it * F - Q)) +
                              b * U,
                            ut = 0;
                          ut < T;
                          ++ut
                        )
                          tt += l[at + ut] * m[st + ut];
                  o[a * z + s * G + u * j + c * Y + U] = tt;
                }
        return r.toTensor();
      }),
      (t.prototype.conv2dDerFilter = function (t, e, n) {
        this.assertNotComplex([t, e], "conv2dDerFilter");
        for (
          var r = n.strideHeight,
            o = n.strideWidth,
            i = n.filterHeight,
            a = n.filterWidth,
            s = zi(n.filterShape, "float32"),
            u = n.padInfo.left,
            c = n.padInfo.top,
            l = t.bufferSync(),
            h = e.bufferSync(),
            p = 0;
          p < i;
          ++p
        )
          for (
            var f = Math.max(0, Math.ceil((c - p) / r)),
              d = Math.min(n.outHeight, (n.inHeight + c - p) / r),
              v = 0;
            v < a;
            ++v
          )
            for (
              var m = Math.max(0, Math.ceil((u - v) / o)),
                g = Math.min(n.outWidth, (n.inWidth + u - v) / o),
                y = 0;
              y < n.inChannels;
              ++y
            )
              for (var x = 0; x < n.outChannels; ++x) {
                for (var w = 0, b = 0; b < n.batchSize; ++b)
                  for (var E = f; E < d; ++E)
                    for (var C = p + E * r - c, _ = m; _ < g; ++_) {
                      var S = v + _ * o - u;
                      w += l.get(b, C, S, y) * h.get(b, E, _, x);
                    }
                s.set(w, p, v, y, x);
              }
        return s.toTensor();
      }),
      (t.prototype.conv3dDerFilter = function (t, e, n) {
        for (
          var r = n.strideDepth,
            o = n.strideHeight,
            i = n.strideWidth,
            a = n.filterDepth,
            s = n.filterHeight,
            u = n.filterWidth,
            c = zi(n.filterShape, "float32"),
            l = c.values,
            h = c.strides,
            p = h[0],
            f = h[1],
            d = h[2],
            v = h[3],
            m = e.dataSync(),
            g = e.strides,
            y = g[0],
            x = g[1],
            w = g[2],
            b = g[3],
            E = t.dataSync(),
            C = t.strides,
            _ = C[0],
            S = C[1],
            R = C[2],
            N = C[3],
            k = n.padInfo.front,
            I = n.padInfo.left,
            T = n.padInfo.top,
            A = 0;
          A < a;
          ++A
        )
          for (
            var D = Math.max(0, Math.ceil((k - A) / r)),
              M = Math.min(n.outDepth, (n.inDepth + k - A) / r),
              O = A * p,
              P = 0;
            P < s;
            ++P
          )
            for (
              var F = Math.max(0, Math.ceil((T - P) / o)),
                L = Math.min(n.outHeight, (n.inHeight + T - P) / o),
                B = P * f + O,
                W = 0;
              W < u;
              ++W
            )
              for (
                var z = Math.max(0, Math.ceil((I - W) / i)),
                  U = Math.min(n.outWidth, (n.inWidth + I - W) / i),
                  G = W * d + B,
                  V = 0;
                V < n.inChannels;
                ++V
              )
                for (var H = V * v + G, q = 0; q < n.outChannels; ++q) {
                  for (var j = 0, $ = 0; $ < n.batchSize; ++$)
                    for (var K = $ * _, X = $ * y, Y = D; Y < M; ++Y)
                      for (
                        var Q = (A + Y * r - k) * S + K, J = Y * x + X, Z = F;
                        Z < L;
                        ++Z
                      )
                        for (
                          var tt = (P + Z * o - T) * R + Q,
                            et = Z * w + J,
                            nt = z;
                          nt < U;
                          ++nt
                        ) {
                          var rt = nt * b + et;
                          j += E[(W + nt * i - I) * N + tt + V] * m[rt + q];
                        }
                  l[H + q] = j;
                }
        return c.toTensor();
      }),
      (t.prototype.depthwiseConv2D = function (t, e, n) {
        this.assertNotComplex([t, e], "depthwiseConv2D");
        for (
          var r = n.filterHeight,
            o = n.filterWidth,
            i = n.dilationHeight,
            a = n.dilationWidth,
            s = n.padInfo.left,
            u = n.padInfo.top,
            c = n.outChannels / n.inChannels,
            l = zi(n.outShape, t.dtype),
            h = t.dataSync(),
            p = e.dataSync(),
            f = l.values,
            d = 0;
          d < n.batchSize;
          ++d
        )
          for (
            var v = d * t.strides[0], m = d * l.strides[0], g = 0;
            g < n.outHeight;
            ++g
          )
            for (
              var y = m + g * l.strides[1], x = g * n.strideHeight - s, w = 0;
              w < r;
              ++w
            ) {
              var b = x + w * i;
              if (!(b < 0 || b >= n.inHeight))
                for (
                  var E = w * e.strides[0], C = v + b * t.strides[1], _ = 0;
                  _ < n.outWidth;
                  ++_
                )
                  for (
                    var S = y + _ * l.strides[2],
                      R = _ * n.strideWidth - u,
                      N = 0;
                    N < o;
                    ++N
                  ) {
                    var k = R + N * a;
                    if (!(k < 0 || k >= n.inWidth))
                      for (
                        var I = E + N * e.strides[1],
                          T = C + k * n.inChannels,
                          A = S,
                          D = I,
                          M = 0;
                        M < n.inChannels;
                        ++M
                      ) {
                        for (var O = h[T + M], P = 0; P < c; ++P)
                          f[A + P] += O * p[D + P];
                        (A += c), (D += c);
                      }
                  }
            }
        return l.toTensor();
      }),
      (t.prototype.depthwiseConv2DDerInput = function (t, e, n) {
        this.assertNotComplex([t, e], "depthwiseConv2DDerInput");
        for (
          var r = zi(n.inShape, "float32"),
            o = r.values,
            i = r.strides,
            a = i[0],
            s = i[1],
            u = i[2],
            c = t.dataSync(),
            l = t.strides,
            h = l[0],
            p = l[1],
            f = l[2],
            d = e.dataSync(),
            v = e.strides,
            m = v[0],
            g = v[1],
            y = v[2],
            x = n.batchSize,
            w = n.filterHeight,
            b = n.filterWidth,
            E = n.inChannels,
            C = n.inHeight,
            _ = n.inWidth,
            S = n.outChannels,
            R = n.outHeight,
            N = n.outWidth,
            k = n.strideHeight,
            I = n.strideWidth,
            T = w - 1 - n.padInfo.top,
            A = b - 1 - n.padInfo.left,
            D = S / E,
            M = 0;
          M < x;
          ++M
        )
          for (var O = 0; O < E; ++O)
            for (var P = 0; P < C; ++P)
              for (
                var F = P - T,
                  L = Math.max(0, Math.ceil(F / k)),
                  B = Math.min(R, (w + F) / k),
                  W = 0;
                W < _;
                ++W
              ) {
                for (
                  var z = W - A,
                    U = Math.max(0, Math.ceil(z / I)),
                    G = Math.min(N, (b + z) / I),
                    V = 0,
                    H = L;
                  H < B;
                  ++H
                )
                  for (var q = H * k - F, j = U; j < G; ++j)
                    for (
                      var $ = h * M + p * H + f * j,
                        K = m * (w - 1 - q) + g * (b - 1 - (j * I - z)) + y * O,
                        X = 0;
                      X < D;
                      ++X
                    )
                      V += c[$ + (O * D + X)] * d[K + X];
                o[a * M + s * P + u * W + O] = V;
              }
        return r.toTensor();
      }),
      (t.prototype.depthwiseConv2DDerFilter = function (t, e, n) {
        this.assertNotComplex([t, e], "depthwiseConv2DDerFilter");
        for (
          var r = n.strideHeight,
            o = n.strideWidth,
            i = n.filterHeight,
            a = n.filterWidth,
            s = zi(n.filterShape, "float32"),
            u = n.padInfo.left,
            c = n.padInfo.top,
            l = n.outChannels / n.inChannels,
            h = t.bufferSync(),
            p = e.bufferSync(),
            f = 0;
          f < i;
          ++f
        )
          for (
            var d = Math.max(0, Math.ceil((c - f) / r)),
              v = Math.min(n.outHeight, (n.inHeight + c - f) / r),
              m = 0;
            m < a;
            ++m
          )
            for (
              var g = Math.max(0, Math.ceil((u - m) / o)),
                y = Math.min(n.outWidth, (n.inWidth + u - m) / o),
                x = 0;
              x < n.outChannels;
              ++x
            ) {
              for (
                var w = Math.trunc(x / l), b = x % l, E = 0, C = 0;
                C < n.batchSize;
                ++C
              )
                for (var _ = d; _ < v; ++_)
                  for (var S = f + _ * r - c, R = g; R < y; ++R) {
                    var N = m + R * o - u;
                    E += h.get(C, S, N, w) * p.get(C, _, R, x);
                  }
              s.set(E, f, m, w, b);
            }
        return s.toTensor();
      }),
      (t.prototype.tile = function (t, e) {
        this.assertNotComplex(t, "tile");
        for (var n = new Array(t.rank), r = 0; r < n.length; r++)
          n[r] = t.shape[r] * e[r];
        var o = zi(n, t.dtype),
          i = t.bufferSync();
        for (r = 0; r < o.values.length; ++r) {
          for (
            var a = o.indexToLoc(r), s = new Array(t.rank), u = 0;
            u < s.length;
            u++
          )
            s[u] = a[u] % t.shape[u];
          var c = i.locToIndex(s);
          o.values[r] = i.values[c];
        }
        return o.toTensor();
      }),
      (t.prototype.pad = function (n, t, e) {
        this.assertNotComplex(n, "pad");
        var r = t.map(function (t, e) {
            return t[0] + n.shape[e] + t[1];
          }),
          o = t.map(function (t) {
            return t[0];
          }),
          i = n.bufferSync(),
          a = zi(r, n.dtype);
        0 !== e && a.values.fill(e);
        for (var s = 0; s < n.size; s++) {
          var u = i.indexToLoc(s),
            c = u.map(function (t, e) {
              return t + o[e];
            });
          a.set.apply(a, [i.get.apply(i, u)].concat(c));
        }
        return a.toTensor();
      }),
      (t.prototype.transpose = function (t, e) {
        this.assertNotComplex(t, "transpose");
        for (var n = new Array(t.rank), r = 0; r < n.length; r++)
          n[r] = t.shape[e[r]];
        var o = t.dataSync(),
          i = zi(n, t.dtype),
          a = t.bufferSync();
        for (r = 0; r < t.size; ++r) {
          for (
            var s = a.indexToLoc(r), u = new Array(s.length), c = 0;
            c < u.length;
            c++
          )
            u[c] = s[e[c]];
          var l = i.locToIndex(u);
          i.values[l] = o[r];
        }
        return i.toTensor();
      }),
      (t.prototype.gather = function (t, e, n) {
        this.assertNotComplex([t, e], "gather");
        var r = t.shape.slice(),
          o = e.dataSync();
        r[n] = o.length;
        for (
          var i = zi(r, t.dtype), a = t.bufferSync(), s = 0;
          s < i.size;
          ++s
        ) {
          var u = i.indexToLoc(s),
            c = u.slice();
          c[n] = o[u[n]];
          var l = a.locToIndex(c);
          i.values[s] = a.values[l];
        }
        return i.toTensor();
      }),
      (t.prototype.batchToSpaceND = function (t, e, n) {
        this.assertNotComplex([t], "batchToSpaceND");
        var r = e.reduce(function (t, e) {
            return t * e;
          }),
          o = de(t.shape, e, r),
          i = ve(o.length, e.length),
          a = me(t.shape, e, r),
          s = ge(n, e.length),
          u = ye(a, n, e.length);
        return t.reshape(o).transpose(i).reshape(a).slice(s, u);
      }),
      (t.prototype.spaceToBatchND = function (t, e, n) {
        this.assertNotComplex([t], "spaceToBatchND");
        var r = e.reduce(function (t, e) {
            return t * e;
          }),
          o = [[0, 0]];
        o.push.apply(o, n);
        for (var i = 1 + e.length; i < t.shape.length; ++i) o.push([0, 0]);
        var a = t.pad(o),
          s = de(a.shape, e, r, !1),
          u = ve(s.length, e.length, !1),
          c = me(a.shape, e, r, !1);
        return a.reshape(s).transpose(u).reshape(c);
      }),
      (t.prototype.pool = function (t, e, n) {
        this.assertNotComplex(t, "pool");
        for (
          var r = e.strideHeight,
            o = e.strideWidth,
            i = e.dilationHeight,
            a = e.dilationWidth,
            s = e.effectiveFilterHeight,
            u = e.effectiveFilterWidth,
            c = e.padInfo.top,
            l = e.padInfo.left,
            h =
              "max" === n ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
            p = t.dataSync(),
            f = zi(e.outShape, t.dtype),
            d = f.values,
            v = e.outShape[1] * e.outShape[2] * e.outShape[3],
            m = e.outShape[2] * e.outShape[3],
            g = e.outShape[3],
            y = 0;
          y < e.batchSize;
          ++y
        )
          for (
            var x = y * v, w = y * t.strides[0], b = 0;
            b < e.inChannels;
            ++b
          )
            for (var E = 0; E < e.outHeight; ++E)
              for (
                var C = E * r - c,
                  _ = Math.max(0, C),
                  S = Math.min(e.inHeight, s + C),
                  R = x + E * m,
                  N = 0;
                N < e.outWidth;
                ++N
              ) {
                for (
                  var k = N * o - l,
                    I = Math.max(0, k),
                    T = Math.min(e.inWidth, u + k),
                    A = h,
                    D = 0,
                    M = 0,
                    O = _;
                  O < S;
                  O += i
                ) {
                  for (var P = w + O * t.strides[1], F = I; F < T; F += a) {
                    var L = p[P + F * t.strides[2] + b];
                    "max" === n && A < L
                      ? (A = L)
                      : "avg" === n && ((D += L), M++);
                  }
                  if (isNaN(A)) break;
                }
                d[R + N * g + b] = "avg" === n ? D / M : A;
              }
        return f.toTensor();
      }),
      (t.prototype.maxPool = function (t, e) {
        return this.pool(t, e, "max");
      }),
      (t.prototype.maxPoolPositions = function (t, e) {
        for (
          var n = zi(e.outShape, "int32"),
            r = e.strideHeight,
            o = e.strideWidth,
            i = e.dilationHeight,
            a = e.dilationWidth,
            s = e.effectiveFilterHeight,
            u = e.effectiveFilterWidth,
            c = e.padInfo.top,
            l = e.padInfo.left,
            h = t.bufferSync(),
            p = 0;
          p < e.batchSize;
          ++p
        )
          for (var f = 0; f < e.inChannels; ++f)
            for (var d = 0; d < e.outHeight; ++d) {
              for (var v = d * r - c, m = v; m < 0; ) m += i;
              for (
                var g = Math.min(e.inHeight, s + v), y = 0;
                y < e.outWidth;
                ++y
              ) {
                for (var x = y * o - l, w = x; w < 0; ) w += a;
                for (
                  var b = Math.min(e.inWidth, u + x),
                    E = Number.NEGATIVE_INFINITY,
                    C = -1,
                    _ = m;
                  _ < g;
                  _ += i
                )
                  for (var S = _ - v, R = w; R < b; R += a) {
                    var N = R - x,
                      k = h.get(p, _, R, f);
                    E < k && ((E = k), (C = S * u + N));
                  }
                n.set(C, p, d, y, f);
              }
            }
        return n.toTensor();
      }),
      (t.prototype.maxPoolBackprop = function (t, e, n, r) {
        this.assertNotComplex([e, n], "maxPoolBackprop");
        for (
          var o = this.maxPoolPositions(e, r),
            i = r.strideHeight,
            a = r.strideWidth,
            s = r.dilationHeight,
            u = r.dilationWidth,
            c = r.effectiveFilterHeight,
            l = r.effectiveFilterWidth,
            h = l - 1 - r.padInfo.left,
            p = c - 1 - r.padInfo.top,
            f = zi(e.shape, "float32"),
            d = o.bufferSync(),
            v = t.bufferSync(),
            m = 0;
          m < r.batchSize;
          ++m
        )
          for (var g = 0; g < r.inChannels; ++g)
            for (var y = 0; y < r.inHeight; ++y)
              for (var x = 0; x < r.inWidth; ++x) {
                for (var w = y - p, b = x - h, E = 0, C = 0; C < c; C += s) {
                  var _ = (w + C) / i;
                  if (!(_ < 0 || _ >= r.outHeight || Math.floor(_) !== _))
                    for (var S = 0; S < l; S += u) {
                      var R = (b + S) / a;
                      if (!(R < 0 || R >= r.outWidth || Math.floor(R) !== R)) {
                        var N =
                          c * l - 1 - d.get(m, _, R, g) === C * l + S ? 1 : 0;
                        0 !== N && (E += v.get(m, _, R, g) * N);
                      }
                    }
                }
                f.set(E, m, y, x, g);
              }
        return f.toTensor();
      }),
      (t.prototype.avgPoolBackprop = function (t, e, n) {
        this.assertNotComplex([t, e], "avgPoolBackprop");
        for (
          var r = n.strideHeight,
            o = n.strideWidth,
            i = n.filterHeight,
            a = n.filterWidth,
            s = n.dilationHeight,
            u = n.dilationWidth,
            c = n.effectiveFilterHeight,
            l = n.effectiveFilterWidth,
            h = l - 1 - n.padInfo.left,
            p = c - 1 - n.padInfo.top,
            f = zi(e.shape, "float32"),
            d = 1 / (i * a),
            v = t.bufferSync(),
            m = 0;
          m < n.batchSize;
          ++m
        )
          for (var g = 0; g < n.inChannels; ++g)
            for (var y = 0; y < n.inHeight; ++y)
              for (var x = 0; x < n.inWidth; ++x) {
                for (var w = y - p, b = x - h, E = 0, C = 0; C < c; C += s) {
                  var _ = (w + C) / r;
                  if (!(_ < 0 || _ >= n.outHeight || Math.floor(_) !== _))
                    for (var S = 0; S < l; S += u) {
                      var R = (b + S) / o;
                      R < 0 ||
                        R >= n.outWidth ||
                        Math.floor(R) !== R ||
                        (E += v.get(m, _, R, g));
                    }
                }
                f.set(E * d, m, y, x, g);
              }
        return f.toTensor();
      }),
      (t.prototype.cast = function (t, e) {
        return an(t, e, this);
      }),
      (t.prototype.reshape = function (t, e) {
        return sn(t, e);
      }),
      (t.prototype.avgPool = function (t, e) {
        return (
          this.assertNotComplex(t, "avgPool"), this.pool(t, e, "avg").toFloat()
        );
      }),
      (t.prototype.resizeBilinear = function (t, e, n, r) {
        this.assertNotComplex(t, "resizeBilinear");
        for (
          var o = t.shape,
            i = o[0],
            a = o[1],
            s = o[2],
            u = o[3],
            c = t.dataSync(),
            l = new Float32Array(B([i, e, n, u])),
            h = [r && 1 < e ? a - 1 : a, r && 1 < n ? s - 1 : s],
            p = [r && 1 < e ? e - 1 : e, r && 1 < n ? n - 1 : n],
            f = 0,
            d = h[0] / p[0],
            v = h[1] / p[1],
            m = 0;
          m < i;
          m++
        )
          for (var g = 0; g < e; g++)
            for (
              var y = d * g,
                x = Math.floor(y),
                w = y - x,
                b = Math.min(a - 1, Math.ceil(y)),
                E = m * t.strides[0] + x * t.strides[1],
                C = m * t.strides[0] + b * t.strides[1],
                _ = 0;
              _ < n;
              _++
            )
              for (
                var S = v * _,
                  R = Math.floor(S),
                  N = S - R,
                  k = Math.min(s - 1, Math.ceil(S)),
                  I = E + R * t.strides[2],
                  T = C + R * t.strides[2],
                  A = E + +k * t.strides[2],
                  D = C + k * t.strides[2],
                  M = 0;
                M < u;
                M++
              ) {
                var O = c[I + M],
                  P = c[T + M],
                  F = O + (c[A + M] - O) * N,
                  L = F + (P + (c[D + M] - P) * N - F) * w;
                l[f++] = L;
              }
        return Ge(l, [i, e, n, u]);
      }),
      (t.prototype.resizeBilinearBackprop = function (t, e, n) {
        this.assertNotComplex([t, e], "resizeBilinearBackprop");
        for (
          var r = e.shape,
            o = r[0],
            i = r[1],
            a = r[2],
            s = r[3],
            u = t.shape,
            c = u[1],
            l = u[2],
            h = new Float32Array(o * i * a * s),
            p = [n && 1 < c ? i - 1 : i, n && 1 < l ? a - 1 : a],
            f = [n && 1 < c ? c - 1 : c, n && 1 < l ? l - 1 : l],
            d = p[0] / f[0],
            v = p[1] / f[1],
            m = t.dataSync(),
            g = 0,
            y = 0;
          y < o;
          y++
        )
          for (var x = y * e.strides[0], w = 0; w < c; w++)
            for (
              var b = w * d,
                E = Math.floor(b),
                C = Math.min(Math.ceil(b), i - 1),
                _ = x + E * e.strides[1],
                S = x + C * e.strides[1],
                R = b - E,
                N = 1 - R,
                k = 0;
              k < l;
              k++
            )
              for (
                var I = k * v,
                  T = Math.floor(I),
                  A = Math.min(Math.ceil(I), a - 1),
                  D = I - T,
                  M = 1 - D,
                  O = _ + T * e.strides[2],
                  P = _ + A * e.strides[2],
                  F = S + T * e.strides[2],
                  L = S + A * e.strides[2],
                  B = N * M,
                  W = N * D,
                  z = R * M,
                  U = R * D,
                  G = 0;
                G < s;
                G++
              ) {
                var V = m[g++];
                (h[O + G] += V * B),
                  (h[P + G] += V * W),
                  (h[F + G] += V * z),
                  (h[L + G] += V * U);
              }
        return $e(h, [o, a, i, s], e.dtype);
      }),
      (t.prototype.resizeNearestNeighbor = function (t, e, n, r) {
        this.assertNotComplex(t, "resizeNearestNeighbor");
        for (
          var o = t.shape,
            i = o[0],
            a = o[1],
            s = o[2],
            u = o[3],
            c = t.dataSync(),
            l = new Float32Array(i * e * n * u),
            h = [r && 1 < e ? a - 1 : a, r && 1 < n ? s - 1 : s],
            p = [r && 1 < e ? e - 1 : e, r && 1 < n ? n - 1 : n],
            f = h[0] / p[0],
            d = h[1] / p[1],
            v = 0,
            m = 0;
          m < i;
          m++
        )
          for (var g = m * t.strides[0], y = 0; y < e; y++)
            for (
              var x = f * y,
                w =
                  g +
                  Math.min(a - 1, r ? Math.round(x) : Math.floor(x)) *
                    t.strides[1],
                b = 0;
              b < n;
              b++
            )
              for (
                var E = d * b,
                  C =
                    w +
                    Math.min(s - 1, r ? Math.round(E) : Math.floor(E)) *
                      t.strides[2],
                  _ = 0;
                _ < u;
                _++
              ) {
                var S = c[C + _];
                l[v++] = S;
              }
        return Ge(l, [i, e, n, u], t.dtype);
      }),
      (t.prototype.resizeNearestNeighborBackprop = function (t, e, n) {
        this.assertNotComplex([t, e], "resizeNearestNeighborBackprop");
        for (
          var r = e.shape,
            o = r[0],
            i = r[1],
            a = r[2],
            s = r[3],
            u = t.shape,
            c = u[1],
            l = u[2],
            h = new Float32Array(o * i * a * s),
            p = t.dataSync(),
            f = [n && 1 < c ? i - 1 : i, n && 1 < l ? a - 1 : a],
            d = [n && 1 < c ? c - 1 : c, n && 1 < l ? l - 1 : l],
            v = f[0] / d[0],
            m = f[1] / d[1],
            g = 1 / v,
            y = 1 / m,
            x = 2 * Math.ceil(g) + 2,
            w = 2 * Math.ceil(y) + 2,
            b = 0;
          b < o;
          b++
        )
          for (var E = b * e.strides[0], C = 0; C < i; C++)
            for (
              var _ = E + C * e.strides[1],
                S = Math.floor(C * g),
                R = Math.floor(S - x / 2),
                N = 0;
              N < a;
              N++
            )
              for (
                var k = _ + N * e.strides[2],
                  I = Math.floor(N * y),
                  T = Math.floor(I - w / 2),
                  A = 0;
                A < s;
                A++
              ) {
                for (var D = 0, M = 0; M < x; M++) {
                  var O = M + R;
                  if (!(O < 0 || c <= O)) {
                    var P = E + O * t.strides[1],
                      F = O * v;
                    if (
                      C === Math.min(i - 1, n ? Math.round(F) : Math.floor(F))
                    )
                      for (var L = 0; L < w; L++) {
                        var B = L + T;
                        if (!(B < 0 || l <= B)) {
                          var W = P + B * t.strides[2],
                            z = B * m;
                          N ===
                            Math.min(
                              a - 1,
                              n ? Math.round(z) : Math.floor(z)
                            ) && (D += p[W + A]);
                        }
                      }
                  }
                }
                h[k + A] = D;
              }
        return $e(h, e.shape, e.dtype);
      }),
      (t.prototype.batchNormalization = function (t, e, n, r, o, i) {
        this.assertNotComplex([t, e, n, o, i], "batchNorm");
        for (
          var a = t.dataSync(),
            s = e.dataSync(),
            u = n.dataSync(),
            c = o ? o.dataSync() : new Float32Array([1]),
            l = i ? i.dataSync() : new Float32Array([0]),
            h = new Float32Array(a.length),
            p = l.length,
            f = c.length,
            d = u.length,
            v = s.length,
            m = 0,
            g = 0,
            y = 0,
            x = 0,
            w = 0;
          w < a.length;
          ++w
        )
          (h[w] = l[m++] + ((a[w] - s[g++]) * c[y++]) / Math.sqrt(u[x++] + r)),
            p <= m && (m = 0),
            v <= g && (g = 0),
            f <= y && (y = 0),
            d <= x && (x = 0);
        return $e(h, t.shape);
      }),
      (t.prototype.localResponseNormalization4D = function (t, a, e, n, r) {
        this.assertNotComplex(t, "localResponseNormalization4D");
        var s = t.shape[3],
          u = s - 1,
          c = t.dataSync(),
          o = t.size,
          i = new Float32Array(o);
        function l(t) {
          for (
            var e = t % s,
              n = t - e + Math.max(0, e - a),
              r = t - e + Math.min(e + a, u),
              o = 0;
            n <= r;
            n++
          ) {
            var i = c[n];
            o += i * i;
          }
          return o;
        }
        for (var h = 0; h < o; h++) {
          var p = l(h),
            f = c[h] * Math.pow(e + n * p, -r);
          i[h] = f;
        }
        return $e(i, t.shape);
      }),
      (t.prototype.LRNGrad = function (t, e, n, r, o, i, a) {
        this.assertNotComplex(t, "LRNGrad");
        for (
          var s = t.shape[3],
            u = t.dataSync(),
            c = e.dataSync(),
            l = n.dataSync(),
            h = new Float32Array(t.size),
            p = t.size,
            f = 0;
          f < p;
          f++
        ) {
          for (
            var d = f % s,
              v = f - d + Math.max(0, d - r),
              m = f - d + Math.min(s, d + r + 1),
              g = 0,
              y = v;
            y < m;
            y++
          )
            g += Math.pow(c[y], 2);
          for (g = i * g + o, y = v; y < m; y++) {
            var x = (-2 * i * a * c[y] * l[f]) / g;
            f === y && (x += Math.pow(g, -a)), (x *= u[f]), (h[y] += x);
          }
        }
        return $e(h, t.shape);
      }),
      (t.prototype.multinomial = function (t, e, n, r) {
        this.assertNotComplex(t, "multinomial");
        for (
          var o = e ? t : Le(t),
            i = o.shape[0],
            a = o.shape[1],
            s = Qe([i, n], "int32"),
            u = s.dataSync(),
            c = o.dataSync(),
            l = 0;
          l < i;
          ++l
        ) {
          var h = l * a,
            p = new Float32Array(a - 1);
          p[0] = c[h];
          for (var f = 1; f < p.length; ++f) p[f] = p[f - 1] + c[h + f];
          for (var d = Bi(r.toString()), v = l * n, m = 0; m < n; ++m) {
            var g = d();
            u[v + m] = p.length;
            for (var y = 0; y < p.length; y++)
              if (g < p[y]) {
                u[v + m] = y;
                break;
              }
          }
        }
        return s;
      }),
      (t.prototype.oneHot = function (t, e, n, r) {
        this.assertNotComplex(t, "oneHot");
        var o = new Float32Array(t.size * e);
        o.fill(r);
        for (var i = t.dataSync(), a = 0; a < t.size; ++a)
          0 <= i[a] && i[a] < e && (o[a * e + i[a]] = n);
        return qe(o, [t.size, e], "int32");
      }),
      (t.prototype.nonMaxSuppression = function (t, e, n, r, o) {
        return (
          this.assertNotComplex(t, "nonMaxSuppression"),
          ln(t.dataSync(), e.dataSync(), n, r, o)
        );
      }),
      (t.prototype.fft = function (t) {
        return this.fftBatch(t, !1);
      }),
      (t.prototype.ifft = function (t) {
        return this.fftBatch(t, !0);
      }),
      (t.prototype.fftBatch = function (t, e) {
        for (
          var n = t.shape[0],
            r = t.shape[1],
            o = zi(t.shape, "float32"),
            i = zi(t.shape, "float32"),
            a = ze(t).as2D(n, r),
            s = Ue(t).as2D(n, r),
            u = 0;
          u < n;
          u++
        )
          for (
            var c = a.slice([u, 0], [1, r]),
              l = s.slice([u, 0], [1, r]),
              h = We(c, l),
              p = this.fftImpl(h, e).dataSync(),
              f = 0;
            f < r;
            f++
          ) {
            var d = cn(p, f);
            (o.values[u * r + f] = d.real), (i.values[u * r + f] = d.imag);
          }
        return We(o.toTensor(), i.toTensor()).as2D(n, r);
      }),
      (t.prototype.fftImpl = function (t, e) {
        var n = t.as1D(),
          r = n.size;
        if (this.isExponentOf2(r)) {
          var o = this.fftRadix2(n, r, e).as2D(t.shape[0], t.shape[1]);
          return e && (o = We(ze(o).div(Ve(r)), Ue(o).div(Ve(r)))), o;
        }
        var i = t.dataSync(),
          a = (function (t) {
            for (
              var e = new Float32Array(t.length / 2),
                n = new Float32Array(t.length / 2),
                r = 0;
              r < t.length;
              r += 2
            )
              (e[r / 2] = t[r]), (n[r / 2] = t[r + 1]);
            return { real: e, imag: n };
          })(this.fourierTransformByMatmul(i, r, e));
        return We(a.real, a.imag).as2D(t.shape[0], t.shape[1]);
      }),
      (t.prototype.isExponentOf2 = function (t) {
        return 0 == (t & (t - 1));
      }),
      (t.prototype.fftRadix2 = function (t, e, n) {
        if (1 === e) return t;
        var r = t.dataSync(),
          o = e / 2,
          i = (function (t) {
            for (
              var e = Math.ceil(t.length / 4),
                n = new Float32Array(e),
                r = new Float32Array(e),
                o = 0;
              o < t.length;
              o += 4
            )
              (n[Math.floor(o / 4)] = t[o]), (r[Math.floor(o / 4)] = t[o + 1]);
            return { real: n, imag: r };
          })(r),
          a = We(i.real, i.imag).as1D(),
          s = (function (t) {
            for (
              var e = Math.floor(t.length / 4),
                n = new Float32Array(e),
                r = new Float32Array(e),
                o = 2;
              o < t.length;
              o += 4
            )
              (n[Math.floor(o / 4)] = t[o]), (r[Math.floor(o / 4)] = t[o + 1]);
            return { real: n, imag: r };
          })(r),
          u = We(s.real, s.imag).as1D();
        (a = this.fftRadix2(a, o, n)), (u = this.fftRadix2(u, o, n));
        var c = (function (t, e) {
            for (
              var n = new Float32Array(t / 2),
                r = new Float32Array(t / 2),
                o = 0;
              o < Math.ceil(t / 2);
              o++
            ) {
              var i = (e ? 2 : -2) * Math.PI * (o / t);
              (n[o] = Math.cos(i)), (r[o] = Math.sin(i));
            }
            return { real: n, imag: r };
          })(e, n),
          l = We(c.real, c.imag).mul(u),
          h = a.add(l),
          p = a.sub(l),
          f = ze(h).concat(ze(p)),
          d = Ue(h).concat(Ue(p));
        return We(f, d).as1D();
      }),
      (t.prototype.fourierTransformByMatmul = function (t, e, n) {
        for (var r = new Float32Array(2 * e), o = 0; o < e; o++) {
          for (var i = 0, a = 0, s = 0; s < e; s++) {
            var u =
                ((d = o * s),
                (v = e),
                void 0,
                (m = (n ? 2 : -2) * Math.PI * (d / v)),
                { real: Math.cos(m), imag: Math.sin(m) }),
              c = cn(t, s);
            (i += c.real * u.real - c.imag * u.imag),
              (a += c.real * u.imag + c.imag * u.real);
          }
          n && ((i /= e), (a /= e)),
            (h = i),
            (p = a),
            ((l = r)[2 * (f = o)] = h),
            (l[2 * f + 1] = p);
        }
        var l, h, p, f, d, v, m;
        return r;
      }),
      (t.prototype.depthToSpace = function (t, e, n) {
        D("NHWC" === n, function () {
          return (
            "Only NHWC dataFormat supported on CPU for depthToSpace. Got " + n
          );
        }),
          D(1 < e, function () {
            return "blockSize should be > 1 for depthToSpace, but was: " + e;
          });
        for (
          var r = t.shape[0],
            o = t.shape[1],
            i = t.shape[2],
            a = t.shape[3],
            s = o * e,
            u = i * e,
            c = a / (e * e),
            l = t.dataSync(),
            h = new Float32Array(r * s * u * c),
            p = 0,
            f = 0;
          f < r;
          ++f
        )
          for (var d = 0; d < s; ++d)
            for (var v = Math.floor(d / e), m = d % e, g = 0; g < u; ++g)
              for (
                var y = Math.floor(g / e), x = (m * e + (g % e)) * c, w = 0;
                w < c;
                ++w
              ) {
                var b = w + x + a * (y + i * (v + o * f));
                h[p++] = l[b];
              }
        return $e(h, [r, s, u, c]);
      }),
      (t.prototype.broadcastedBinaryOp = function (a, s, t, u) {
        var e = xn(a.shape, s.shape),
          c = zi(e, t),
          l = a.dataSync(),
          h = s.dataSync(),
          p = gn(a.shape, e),
          f = gn(s.shape, e),
          d = c.values;
        if (p.length + f.length === 0)
          for (var n = 0; n < d.length; ++n)
            d[n] = u(l[n % l.length], h[n % h.length]);
        else {
          var v = a.bufferSync(),
            m = s.bufferSync(),
            r = function (t) {
              var e = c.indexToLoc(t),
                n = e.slice(-a.rank);
              p.forEach(function (t) {
                return (n[t] = 0);
              });
              var r = v.locToIndex(n),
                o = e.slice(-s.rank);
              f.forEach(function (t) {
                return (o[t] = 0);
              });
              var i = m.locToIndex(o);
              d[t] = u(l[r], h[i]);
            };
          for (n = 0; n < d.length; ++n) r(n);
        }
        return c.toTensor();
      }),
      (t.prototype.broadcastedBinaryComplexOp = function (s, u, c) {
        var t = xn(s.shape, u.shape),
          l = zi(t, "float32"),
          e = zi(t, "float32"),
          h = s.dataSync(),
          p = u.dataSync(),
          f = gn(s.shape, t),
          d = gn(u.shape, t),
          v = l.values,
          m = e.values;
        if (f.length + d.length === 0)
          for (var n = 0; n < v.length; n++) {
            var r = n % h.length,
              o = n % p.length,
              i = c(h[2 * r], h[2 * r + 1], p[2 * o], p[2 * o + 1]);
            (v[n] = i.real), (m[n] = i.imag);
          }
        else {
          var g = this.data.get(s.dataId).complexTensors.real.bufferSync(),
            y = this.data.get(u.dataId).complexTensors.real.bufferSync(),
            a = function (t) {
              var e = l.indexToLoc(t),
                n = e.slice(-s.rank);
              f.forEach(function (t) {
                return (n[t] = 0);
              });
              var r = g.locToIndex(n),
                o = e.slice(-u.rank);
              d.forEach(function (t) {
                return (o[t] = 0);
              });
              var i = y.locToIndex(o),
                a = c(h[2 * r], h[2 * r + 1], p[2 * i], p[2 * i + 1]);
              (v[t] = a.real), (m[t] = a.imag);
            };
          for (n = 0; n < v.length; n++) a(n);
        }
        return this.complex(l.toTensor(), e.toTensor());
      }),
      (t.prototype.split = function (t, e, n) {
        return pn(t, e, n);
      }),
      (t.prototype.dispose = function () {}),
      (t.prototype.floatPrecision = function () {
        return 32;
      }),
      (t.prototype.cropAndResize = function (t, e, n, r, o, i) {
        for (
          var a = t.shape,
            s = a[0],
            u = a[1],
            c = a[2],
            l = a[3],
            h = e.shape[0],
            p = r[0],
            f = r[1],
            d = zi([h, p, f, l], t.dtype),
            v = e.dataSync(),
            m = n.dataSync(),
            g = t.dataSync(),
            y = t.strides,
            x = d.strides,
            w = 0;
          w < h;
          w++
        ) {
          var b = 4 * w,
            E = v[b],
            C = v[b + 1],
            _ = v[b + 2],
            S = v[b + 3],
            R = m[w];
          if (!(s <= R))
            for (
              var N = 1 < p ? ((_ - E) * (u - 1)) / (p - 1) : 0,
                k = 1 < f ? ((S - C) * (c - 1)) / (f - 1) : 0,
                I = 0;
              I < p;
              I++
            ) {
              var T = 1 < p ? E * (u - 1) + I * N : 0.5 * (E + _) * (u - 1);
              if (T < 0 || u - 1 < T)
                for (var A = 0; A < f; A++)
                  for (var D = 0; D < l; D++) {
                    var M = D + A * x[2] + I * x[1] + w * x[0];
                    d.values[M] = i;
                  }
              else if ("bilinear" === o) {
                var O = Math.floor(T),
                  P = Math.ceil(T),
                  F = T - O;
                for (A = 0; A < f; A++)
                  if (
                    (q =
                      1 < f ? C * (c - 1) + A * k : 0.5 * (C + S) * (c - 1)) <
                      0 ||
                    c - 1 < q
                  )
                    for (D = 0; D < l; D++)
                      (M = D + A * x[2] + I * x[1] + w * x[0]),
                        (d.values[M] = i);
                  else {
                    var L = Math.floor(q),
                      B = Math.ceil(q),
                      W = q - L;
                    for (D = 0; D < l; D++) {
                      var z = g[(M = D + L * y[2] + O * y[1] + R * y[0])],
                        U = g[(M = D + B * y[2] + O * y[1] + R * y[0])],
                        G = g[(M = D + L * y[2] + P * y[1] + R * y[0])],
                        V = z + (U - z) * W,
                        H =
                          G +
                          (g[(M = D + B * y[2] + P * y[1] + R * y[0])] - G) * W;
                      (M = D + A * x[2] + I * x[1] + w * x[0]),
                        (d.values[M] = V + (H - V) * F);
                    }
                  }
              } else
                for (A = 0; A < f; ++A) {
                  var q;
                  if (
                    (q =
                      1 < f ? C * (c - 1) + A * k : 0.5 * (C + S) * (c - 1)) <
                      0 ||
                    c - 1 < q
                  )
                    for (D = 0; D < l; D++)
                      (M = D + A * x[2] + I * x[1] + w * x[0]),
                        (d.values[M] = i);
                  else {
                    var j = Math.round(q),
                      $ = Math.round(T);
                    for (D = 0; D < l; D++) {
                      var K = D + j * y[2] + $ * y[1] + R * y[0],
                        X = D + A * x[2] + I * x[1] + w * x[0];
                      d.values[X] = g[K];
                    }
                  }
                }
            }
        }
        return d.toTensor();
      }),
      (t.prototype.sparseToDense = function (t, e, n, r) {
        var o = Te(0, t, n),
          i = o.sliceRank,
          a = o.numUpdates,
          s = o.sliceSize,
          u = o.strides,
          c = o.outputSize;
        return this.scatter(t, e, n, c, s, a, i, u, r, !1);
      }),
      (t.prototype.gatherND = function (t, e) {
        var n = e.shape,
          r = n[n.length - 1],
          o = Ne(t, e),
          i = o[0],
          a = o[1],
          s = o[2],
          u = o[3];
        if (0 === a) return Ge([], i, t.dtype);
        for (
          var c = new lt([a, s], t.dtype),
            l = e.dataSync(),
            h = t.dataSync(),
            p = 0;
          p < a;
          p++
        ) {
          for (var f = [], d = 0, v = 0; v < r; v++) {
            var m = l[p * r + v];
            (d += m * u[v]), f.push(m);
          }
          if (d < 0 || d >= t.size / s)
            throw new Error(
              "Invalid indices: " + f + " does not index into " + t.shape
            );
          for (var g = 0; g < s; g++) c.values[p * s + g] = h[d * s + g];
        }
        return c.toTensor().reshape(i);
      }),
      (t.prototype.scatterND = function (t, e, n) {
        var r = Te(0, t, n),
          o = r.sliceRank,
          i = r.numUpdates,
          a = r.sliceSize,
          s = r.strides,
          u = r.outputSize,
          c = Ve(0);
        return this.scatter(t, e, n, u, a, i, o, s, c, !0);
      }),
      (t.prototype.fill = function (t, e, n) {
        var r = M((n = n || q(e)), B(t));
        return r.fill(e), dt.make(t, { values: r }, n);
      }),
      (t.prototype.onesLike = function (t) {
        if ("string" === t.dtype)
          throw new Error("onesLike is not supported for string tensors");
        return this.fill(t.shape, 1, t.dtype);
      }),
      (t.prototype.zerosLike = function (t) {
        var e = M(t.dtype, B(t.shape));
        return dt.make(t.shape, { values: e }, t.dtype);
      }),
      (t.prototype.scatter = function (t, e, n, r, o, i, a, s, u, c) {
        var l = [r / o, o],
          h = t.dataSync(),
          p = e.dataSync();
        if (0 === r) return Ge([], n, e.dtype);
        var f = new lt(l, e.dtype);
        f.values.fill(u.dataSync()[0]);
        for (var d = 0; d < i; d++) {
          for (var v = [], m = 0, g = 0; g < a; g++) {
            var y = h[d * a + g];
            v.push(y), (m += y * s[g]);
          }
          if (m < 0 || r / o <= m)
            throw new Error(
              "Invalid indices: " + v + " does not index into " + n
            );
          for (var x = 0; x < o; x++)
            c
              ? (f.values[m * o + x] += p[d * o + x])
              : (f.values[m * o + x] = 0 === e.rank ? p[0] : p[d * o + x]);
        }
        return f.toTensor().reshape(n);
      }),
      t
    );
  })();
  Zt.registerBackend(
    "cpu",
    function () {
      return new Vc();
    },
    1
  );
  var Hc =
    "undefined" != typeof requestAnimationFrame
      ? requestAnimationFrame
      : "undefined" != typeof setImmediate
      ? setImmediate
      : function (t) {
          return t();
        };
  var qc = { float32: 4, int32: 4, uint16: 2, uint8: 1, bool: 1 };
  function jc(p, t) {
    for (
      var f = {},
        d = 0,
        e = function (t) {
          var e = t.name,
            n = t.dtype,
            r = t.shape,
            o = B(r),
            i = void 0;
          if (("quantization" in t)) {
            var a = t.quantization;
            if ("uint8" !== a.dtype && "uint16" !== a.dtype)
              throw new Error(
                "Weight " +
                  t.name +
                  " has unknown quantization dtype " +
                  a.dtype +
                  ". Supported quantization dtypes are: 'uint8' and 'uint16'."
              );
            var s = qc[a.dtype],
              u = p.slice(d, d + o * s),
              c = "uint8" === a.dtype ? new Uint8Array(u) : new Uint16Array(u);
            if ("float32" === n)
              i = Float32Array.from(c, function (t) {
                return t * a.scale + a.min;
              });
            else {
              if ("int32" !== n)
                throw new Error(
                  "Unsupported dtype in weight '" + e + "': " + n
                );
              i = Int32Array.from(c, function (t) {
                return Math.round(t * a.scale + a.min);
              });
            }
            d += o * s;
          } else {
            var l = qc[n];
            if (((u = p.slice(d, d + o * l)), "float32" === n))
              i = new Float32Array(u);
            else if ("int32" === n) i = new Int32Array(u);
            else {
              if ("bool" !== n)
                throw new Error(
                  "Unsupported dtype in weight '" + e + "': " + n
                );
              i = new Uint8Array(u);
            }
            d += o * l;
          }
          var h = void 0;
          if ("float32" === n) h = Ge(i, r, "float32");
          else if ("int32" === n) h = Ge(i, r, "int32");
          else {
            if ("bool" !== n)
              throw new Error("Unsupported dtype in weight '" + e + "': " + n);
            h = Ge(i, r, "bool");
          }
          f[e] = h;
        },
        n = 0,
        r = t;
      n < r.length;
      n++
    )
      e(r[n]);
    return f;
  }
  var $c =
    "undefined" != typeof Buffer &&
    ("undefined" == typeof Blob ||
      "undefined" == typeof atob ||
      "undefined" == typeof btoa);
  function Kc(t) {
    return $c ? Buffer.byteLength(t) : new Blob([t]).size;
  }
  function Xc(t) {
    var e = 0;
    t.forEach(function (t) {
      e += t.byteLength;
    });
    var n = new Uint8Array(e),
      r = 0;
    return (
      t.forEach(function (t) {
        n.set(new Uint8Array(t), r), (r += t.byteLength);
      }),
      n.buffer
    );
  }
  function Yc(t) {
    for (t = t.trim(); t.endsWith("/"); ) t = t.slice(0, t.length - 1);
    var e = t.split("/");
    return e[e.length - 1];
  }
  function Qc(t) {
    if (t.modelTopology instanceof ArrayBuffer)
      throw new Error("Expected JSON model topology, received ArrayBuffer.");
    return {
      dateSaved: new Date(),
      modelTopologyType: "JSON",
      modelTopologyBytes:
        null == t.modelTopology ? 0 : Kc(JSON.stringify(t.modelTopology)),
      weightSpecsBytes:
        null == t.weightSpecs ? 0 : Kc(JSON.stringify(t.weightSpecs)),
      weightDataBytes: null == t.weightData ? 0 : t.weightData.byteLength,
    };
  }
  var Jc = (function () {
      function i() {
        (this.saveRouters = []), (this.loadRouters = []);
      }
      return (
        (i.getInstance = function () {
          return null == i.instance && (i.instance = new i()), i.instance;
        }),
        (i.registerSaveRouter = function (t) {
          i.getInstance().saveRouters.push(t);
        }),
        (i.registerLoadRouter = function (t) {
          i.getInstance().loadRouters.push(t);
        }),
        (i.getSaveHandlers = function (t) {
          return i.getHandlers(t, "save");
        }),
        (i.getLoadHandlers = function (t, e) {
          return i.getHandlers(t, "load", e);
        }),
        (i.getHandlers = function (n, t, r) {
          var o = [];
          return (
            ("load" === t
              ? i.getInstance().loadRouters
              : i.getInstance().saveRouters
            ).forEach(function (t) {
              var e = t(n, r);
              null !== e && o.push(e);
            }),
            o
          );
        }),
        i
      );
    })(),
    Zc = "://",
    tl = (function () {
      function r() {
        this.managers = {};
      }
      return (
        (r.getInstance = function () {
          return null == r.instance && (r.instance = new r()), r.instance;
        }),
        (r.registerManager = function (t, e) {
          D(null != t, function () {
            return "scheme must not be undefined or null.";
          }),
            t.endsWith(Zc) && (t = t.slice(0, t.indexOf(Zc))),
            D(0 < t.length, function () {
              return "scheme must not be an empty string.";
            });
          var n = r.getInstance();
          D(null == n.managers[t], function () {
            return (
              "A model store manager is already registered for scheme '" +
              t +
              "'."
            );
          }),
            (n.managers[t] = e);
        }),
        (r.getManager = function (t) {
          var e = this.getInstance().managers[t];
          if (null == e)
            throw new Error("Cannot find model manager for scheme '" + t + "'");
          return e;
        }),
        (r.getSchemes = function () {
          return Object.keys(this.getInstance().managers);
        }),
        r
      );
    })();
  function el(t) {
    if (-1 === t.indexOf(Zc))
      throw new Error(
        "The url string provided does not contain a scheme. Supported schemes are: " +
          tl.getSchemes().join(",")
      );
    return { scheme: t.split(Zc)[0], path: t.split(Zc)[1] };
  }
  function nl(l, h, p) {
    return (
      void 0 === p && (p = !1),
      m(this, void 0, void 0, function () {
        var e, n, r, o, i, a, s, u, c;
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              return (
                D(l !== h, function () {
                  return "Old path and new path are the same: '" + l + "'";
                }),
                D(0 < (e = Jc.getLoadHandlers(l)).length, function () {
                  return (
                    "Copying failed because no load handler is found for source URL " +
                    l +
                    "."
                  );
                }),
                D(e.length < 2, function () {
                  return (
                    "Copying failed because more than one (" +
                    e.length +
                    ") load handlers for source URL " +
                    l +
                    "."
                  );
                }),
                (n = e[0]),
                D(0 < (r = Jc.getSaveHandlers(h)).length, function () {
                  return (
                    "Copying failed because no save handler is found for destination URL " +
                    h +
                    "."
                  );
                }),
                D(r.length < 2, function () {
                  return (
                    "Copying failed because more than one (" +
                    e.length +
                    ") save handlers for destination URL " +
                    h +
                    "."
                  );
                }),
                (o = r[0]),
                (i = el(l).scheme),
                (a = el(l).path),
                (s = i === el(l).scheme),
                [4, n.load()]
              );
            case 1:
              return (
                (u = t.sent()),
                p && s ? [4, tl.getManager(i).removeModel(a)] : [3, 3]
              );
            case 2:
              t.sent(), (t.label = 3);
            case 3:
              return [4, o.save(u)];
            case 4:
              return (
                (c = t.sent()),
                !p || s ? [3, 6] : [4, tl.getManager(i).removeModel(a)]
              );
            case 5:
              t.sent(), (t.label = 6);
            case 6:
              return [2, c.modelArtifactsInfo];
          }
        });
      })
    );
  }
  var rl = "tensorflowjs",
    ol = "models_store",
    il = "model_info_store";
  function al() {
    if (!Zt.get("IS_BROWSER"))
      throw new Error(
        "Failed to obtain IndexedDB factory because the current environmentis not a web browser."
      );
    var t = window,
      e =
        t.indexedDB ||
        t.mozIndexedDB ||
        t.webkitIndexedDB ||
        t.msIndexedDB ||
        t.shimIndexedDB;
    if (null == e)
      throw new Error(
        "The current browser does not appear to support IndexedDB."
      );
    return e;
  }
  function sl(t) {
    var e = t.result;
    e.createObjectStore(ol, { keyPath: "modelPath" }),
      e.createObjectStore(il, { keyPath: "modelPath" });
  }
  var ul = (function () {
      function t(t) {
        if (((this.indexedDB = al()), null == t || !t))
          throw new Error(
            "For IndexedDB, modelPath must not be null, undefined or empty."
          );
        this.modelPath = t;
      }
      return (
        (t.prototype.save = function (e) {
          return m(this, void 0, void 0, function () {
            return R(this, function (t) {
              if (e.modelTopology instanceof ArrayBuffer)
                throw new Error(
                  "BrowserLocalStorage.save() does not support saving model topology in binary formats yet."
                );
              return [2, this.databaseAction(this.modelPath, e)];
            });
          });
        }),
        (t.prototype.load = function () {
          return m(this, void 0, void 0, function () {
            return R(this, function (t) {
              return [2, this.databaseAction(this.modelPath)];
            });
          });
        }),
        (t.prototype.databaseAction = function (t, h) {
          var p = this;
          return new Promise(function (u, c) {
            var l = p.indexedDB.open(rl, 1);
            (l.onupgradeneeded = function () {
              return sl(l);
            }),
              (l.onsuccess = function () {
                var r = l.result;
                if (null == h) {
                  var t = r.transaction(ol, "readonly"),
                    e = t.objectStore(ol).get(p.modelPath);
                  (e.onsuccess = function () {
                    if (null == e.result)
                      return (
                        r.close(),
                        c(
                          new Error(
                            "Cannot find model with path '" +
                              p.modelPath +
                              "' in IndexedDB."
                          )
                        )
                      );
                    u(e.result.modelArtifacts);
                  }),
                    (e.onerror = function (t) {
                      return r.close(), c(e.error);
                    }),
                    (t.oncomplete = function () {
                      return r.close();
                    });
                } else {
                  var o,
                    i = Qc(h),
                    a = r.transaction(il, "readwrite"),
                    s = a.objectStore(il),
                    n = s.put({
                      modelPath: p.modelPath,
                      modelArtifactsInfo: i,
                    });
                  (n.onsuccess = function () {
                    var n = (o = r.transaction(ol, "readwrite"))
                      .objectStore(ol)
                      .put({
                        modelPath: p.modelPath,
                        modelArtifacts: h,
                        modelArtifactsInfo: i,
                      });
                    (n.onsuccess = function () {
                      return u({ modelArtifactsInfo: i });
                    }),
                      (n.onerror = function (t) {
                        var e = (s = a.objectStore(il)).delete(p.modelPath);
                        (e.onsuccess = function () {
                          return r.close(), c(n.error);
                        }),
                          (e.onerror = function (t) {
                            return r.close(), c(n.error);
                          });
                      });
                  }),
                    (n.onerror = function (t) {
                      return r.close(), c(n.error);
                    }),
                    (a.oncomplete = function () {
                      null == o
                        ? r.close()
                        : (o.oncomplete = function () {
                            return r.close();
                          });
                    });
                }
              }),
              (l.onerror = function (t) {
                return c(l.error);
              });
          });
        }),
        (t.URL_SCHEME = "indexeddb://"),
        t
      );
    })(),
    cl = function (t) {
      return Zt.get("IS_BROWSER") &&
        !Array.isArray(t) &&
        t.startsWith(ul.URL_SCHEME)
        ? ((e = t.slice(ul.URL_SCHEME.length)), new ul(e))
        : null;
      var e;
    };
  Jc.registerSaveRouter(cl), Jc.registerLoadRouter(cl);
  var ll = (function () {
    function t() {
      this.indexedDB = al();
    }
    return (
      (t.prototype.listModels = function () {
        return m(this, void 0, void 0, function () {
          var e = this;
          return R(this, function (t) {
            return [
              2,
              new Promise(function (i, n) {
                var r = e.indexedDB.open(rl, 1);
                (r.onupgradeneeded = function () {
                  return sl(r);
                }),
                  (r.onsuccess = function () {
                    var e = r.result,
                      t = e.transaction(il, "readonly"),
                      o = t.objectStore(il).getAll();
                    (o.onsuccess = function () {
                      for (var t = {}, e = 0, n = o.result; e < n.length; e++) {
                        var r = n[e];
                        t[r.modelPath] = r.modelArtifactsInfo;
                      }
                      i(t);
                    }),
                      (o.onerror = function (t) {
                        return e.close(), n(o.error);
                      }),
                      (t.oncomplete = function () {
                        return e.close();
                      });
                  }),
                  (r.onerror = function (t) {
                    return n(r.error);
                  });
              }),
            ];
          });
        });
      }),
      (t.prototype.removeModel = function (u) {
        return m(this, void 0, void 0, function () {
          var n = this;
          return R(this, function (t) {
            return (
              (u = (e = u).startsWith(ul.URL_SCHEME)
                ? e.slice(ul.URL_SCHEME.length)
                : e),
              [
                2,
                new Promise(function (a, s) {
                  var e = n.indexedDB.open(rl, 1);
                  (e.onupgradeneeded = function () {
                    return sl(e);
                  }),
                    (e.onsuccess = function () {
                      var n,
                        r = e.result,
                        t = r.transaction(il, "readwrite"),
                        o = t.objectStore(il),
                        i = o.get(u);
                      (i.onsuccess = function () {
                        if (null == i.result)
                          return (
                            r.close(),
                            s(
                              new Error(
                                "Cannot find model with path '" +
                                  u +
                                  "' in IndexedDB."
                              )
                            )
                          );
                        var t = o.delete(u),
                          e = function () {
                            var t = (n = r.transaction(ol, "readwrite"))
                              .objectStore(ol)
                              .delete(u);
                            (t.onsuccess = function () {
                              return a(i.result.modelArtifactsInfo);
                            }),
                              (t.onerror = function (t) {
                                return s(i.error);
                              });
                          };
                        (t.onsuccess = e),
                          (t.onerror = function (t) {
                            return e(), r.close(), s(i.error);
                          });
                      }),
                        (i.onerror = function (t) {
                          return r.close(), s(i.error);
                        }),
                        (t.oncomplete = function () {
                          null == n
                            ? r.close()
                            : (n.oncomplete = function () {
                                return r.close();
                              });
                        });
                    }),
                    (e.onerror = function (t) {
                      return s(e.error);
                    });
                }),
              ]
            );
            var e;
          });
        });
      }),
      t
    );
  })();
  if (Zt.get("IS_BROWSER"))
    try {
      tl.registerManager(ul.URL_SCHEME, new ll());
    } catch (t) {}
  var hl = "/",
    pl = "tensorflowjs_models",
    fl = "info",
    dl = "model_topology",
    vl = "weight_specs",
    ml = "weight_data",
    gl = "model_metadata";
  function yl(t) {
    return {
      info: [pl, t, fl].join(hl),
      topology: [pl, t, dl].join(hl),
      weightSpecs: [pl, t, vl].join(hl),
      weightData: [pl, t, ml].join(hl),
      modelMetadata: [pl, t, gl].join(hl),
    };
  }
  function xl(t) {
    var e = t.split(hl);
    if (e.length < 3) throw new Error("Invalid key format: " + t);
    return e.slice(1, e.length - 1).join(hl);
  }
  var wl = (function () {
      function t(t) {
        if (!Zt.get("IS_BROWSER") || void 0 === window.localStorage)
          throw new Error(
            "The current environment does not support local storage."
          );
        if (((this.LS = window.localStorage), null == t || !t))
          throw new Error(
            "For local storage, modelPath must not be null, undefined or empty."
          );
        (this.modelPath = t), (this.keys = yl(this.modelPath));
      }
      return (
        (t.prototype.save = function (i) {
          return m(this, void 0, void 0, function () {
            var n, r, o;
            return R(this, function (t) {
              if (i.modelTopology instanceof ArrayBuffer)
                throw new Error(
                  "BrowserLocalStorage.save() does not support saving model topology in binary formats yet."
                );
              (n = JSON.stringify(i.modelTopology)),
                (r = JSON.stringify(i.weightSpecs)),
                (o = Qc(i));
              try {
                return (
                  this.LS.setItem(this.keys.info, JSON.stringify(o)),
                  this.LS.setItem(this.keys.topology, n),
                  this.LS.setItem(this.keys.weightSpecs, r),
                  this.LS.setItem(
                    this.keys.weightData,
                    ((e = i.weightData),
                    $c
                      ? Buffer.from(e).toString("base64")
                      : btoa(
                          String.fromCharCode.apply(null, new Uint8Array(e))
                        ))
                  ),
                  this.LS.setItem(
                    this.keys.modelMetadata,
                    JSON.stringify({
                      format: i.format,
                      generatedBy: i.generatedBy,
                      convertedBy: i.convertedBy,
                    })
                  ),
                  [2, { modelArtifactsInfo: o }]
                );
              } catch (t) {
                throw (
                  (this.LS.removeItem(this.keys.info),
                  this.LS.removeItem(this.keys.topology),
                  this.LS.removeItem(this.keys.weightSpecs),
                  this.LS.removeItem(this.keys.weightData),
                  this.LS.removeItem(this.keys.modelMetadata),
                  new Error(
                    "Failed to save model '" +
                      this.modelPath +
                      "' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=" +
                      o.modelTopologyBytes +
                      ", weightSpecsBytes=" +
                      o.weightSpecsBytes +
                      ", weightDataBytes=" +
                      o.weightDataBytes +
                      "."
                  ))
                );
              }
              var e;
              return [2];
            });
          });
        }),
        (t.prototype.load = function () {
          return m(this, void 0, void 0, function () {
            var e, n, r, o, i, a, s;
            return R(this, function (t) {
              if (null == (e = JSON.parse(this.LS.getItem(this.keys.info))))
                throw new Error(
                  "In local storage, there is no model with name '" +
                    this.modelPath +
                    "'"
                );
              if ("JSON" !== e.modelTopologyType)
                throw new Error(
                  "BrowserLocalStorage does not support loading non-JSON model topology yet."
                );
              if (
                ((n = {}),
                null == (r = JSON.parse(this.LS.getItem(this.keys.topology))))
              )
                throw new Error(
                  "In local storage, the topology of model '" +
                    this.modelPath +
                    "' is missing."
                );
              if (
                ((n.modelTopology = r),
                null ==
                  (o = JSON.parse(this.LS.getItem(this.keys.weightSpecs))))
              )
                throw new Error(
                  "In local storage, the weight specs of model '" +
                    this.modelPath +
                    "' are missing."
                );
              if (
                ((n.weightSpecs = o),
                null != (i = this.LS.getItem(this.keys.modelMetadata)) &&
                  ((a = JSON.parse(i)),
                  (n.format = a.format),
                  (n.generatedBy = a.generatedBy),
                  (n.convertedBy = a.convertedBy)),
                null == (s = this.LS.getItem(this.keys.weightData)))
              )
                throw new Error(
                  "In local storage, the binary weight values of model '" +
                    this.modelPath +
                    "' are missing."
                );
              return (
                (n.weightData = (function (t) {
                  if ($c) {
                    var e = Buffer.from(t, "base64");
                    return e.buffer.slice(
                      e.byteOffset,
                      e.byteOffset + e.byteLength
                    );
                  }
                  for (
                    var n = atob(t), r = new Uint8Array(n.length), o = 0;
                    o < n.length;
                    ++o
                  )
                    r.set([n.charCodeAt(o)], o);
                  return r.buffer;
                })(s)),
                [2, n]
              );
            });
          });
        }),
        (t.URL_SCHEME = "localstorage://"),
        t
      );
    })(),
    bl = function (t) {
      return Zt.get("IS_BROWSER") &&
        !Array.isArray(t) &&
        t.startsWith(wl.URL_SCHEME)
        ? ((e = t.slice(wl.URL_SCHEME.length)), new wl(e))
        : null;
      var e;
    };
  Jc.registerSaveRouter(bl), Jc.registerLoadRouter(bl);
  var El = (function () {
    function t() {
      D(Zt.get("IS_BROWSER"), function () {
        return "Current environment is not a web browser";
      }),
        D(void 0 !== window.localStorage, function () {
          return "Current browser does not appear to support localStorage";
        }),
        (this.LS = window.localStorage);
    }
    return (
      (t.prototype.listModels = function () {
        return m(this, void 0, void 0, function () {
          var e, n, r, o, i, a;
          return R(this, function (t) {
            for (
              e = {}, n = pl + hl, r = hl + fl, o = 0;
              o < this.LS.length;
              ++o
            )
              (i = this.LS.key(o)).startsWith(n) &&
                i.endsWith(r) &&
                ((a = xl(i)), (e[a] = JSON.parse(this.LS.getItem(i))));
            return [2, e];
          });
        });
      }),
      (t.prototype.removeModel = function (o) {
        return m(this, void 0, void 0, function () {
          var n, r;
          return R(this, function (t) {
            if (
              ((o = (e = o).startsWith(wl.URL_SCHEME)
                ? e.slice(wl.URL_SCHEME.length)
                : e),
              (n = yl(o)),
              null == this.LS.getItem(n.info))
            )
              throw new Error("Cannot find model at path '" + o + "'");
            var e;
            return (
              (r = JSON.parse(this.LS.getItem(n.info))),
              this.LS.removeItem(n.info),
              this.LS.removeItem(n.topology),
              this.LS.removeItem(n.weightSpecs),
              this.LS.removeItem(n.weightData),
              [2, r]
            );
          });
        });
      }),
      t
    );
  })();
  if (Zt.get("IS_BROWSER"))
    try {
      tl.registerManager(wl.URL_SCHEME, new El());
    } catch (t) {}
  var Cl = (function () {
      function e(t) {
        if (!Zt.get("IS_BROWSER"))
          throw new Error(
            "browserDownloads() cannot proceed because the current environment is not a browser."
          );
        t.startsWith(e.URL_SCHEME) && (t = t.slice(e.URL_SCHEME.length)),
          (null != t && 0 !== t.length) || (t = "model"),
          (this.modelTopologyFileName = t + ".json"),
          (this.weightDataFileName = t + ".weights.bin");
      }
      return (
        (e.prototype.save = function (s) {
          return m(this, void 0, void 0, function () {
            var e, n, r, o, i, a;
            return R(this, function (t) {
              if (
                ((e = window.URL.createObjectURL(
                  new Blob([s.weightData], { type: "application/octet-stream" })
                )),
                s.modelTopology instanceof ArrayBuffer)
              )
                throw new Error(
                  "BrowserDownloads.save() does not support saving model topology in binary formats yet."
                );
              return (
                (n = [
                  {
                    paths: ["./" + this.weightDataFileName],
                    weights: s.weightSpecs,
                  },
                ]),
                (r = {
                  modelTopology: s.modelTopology,
                  format: s.format,
                  generatedBy: s.generatedBy,
                  convertedBy: s.convertedBy,
                  weightsManifest: n,
                }),
                (o = window.URL.createObjectURL(
                  new Blob([JSON.stringify(r)], { type: "application/json" })
                )),
                ((i =
                  null == this.jsonAnchor
                    ? document.createElement("a")
                    : this.jsonAnchor).download = this.modelTopologyFileName),
                (i.href = o),
                i.click(),
                null != s.weightData &&
                  (((a =
                    null == this.weightDataAnchor
                      ? document.createElement("a")
                      : this.weightDataAnchor).download =
                    this.weightDataFileName),
                  (a.href = e),
                  a.click()),
                [2, { modelArtifactsInfo: Qc(s) }]
              );
            });
          });
        }),
        (e.URL_SCHEME = "downloads://"),
        e
      );
    })(),
    _l = (function () {
      function t(t) {
        if (null == t || t.length < 1)
          throw new Error(
            "When calling browserFiles, at least 1 file is required, but received " +
              t
          );
        this.files = t;
      }
      return (
        (t.prototype.load = function () {
          return m(this, void 0, void 0, function () {
            var r,
              h,
              p = this;
            return R(this, function (t) {
              return (
                (r = this.files[0]),
                (h = this.files.slice(1)),
                [
                  2,
                  new Promise(function (c, l) {
                    var t = new FileReader();
                    (t.onload = function (t) {
                      var e = JSON.parse(t.target.result),
                        o = e.modelTopology;
                      if (null != o) {
                        0 === h.length && c({ modelTopology: o });
                        var n = e.weightsManifest;
                        if (null != n) {
                          var i;
                          try {
                            i = p.checkManifestAndWeightFiles(n, h);
                          } catch (t) {
                            return void l(t);
                          }
                          var a = [],
                            s = [],
                            u = [];
                          n.forEach(function (t) {
                            t.paths.forEach(function (t) {
                              s.push(t), u.push(null);
                            }),
                              a.push.apply(a, t.weights);
                          }),
                            n.forEach(function (t) {
                              t.paths.forEach(function (r) {
                                var t = new FileReader();
                                (t.onload = function (t) {
                                  var e = t.target.result,
                                    n = s.indexOf(r);
                                  (u[n] = e),
                                    -1 === u.indexOf(null) &&
                                      c({
                                        modelTopology: o,
                                        weightSpecs: a,
                                        weightData: Xc(u),
                                      });
                                }),
                                  (t.onerror = function (t) {
                                    return l(
                                      "Failed to weights data from file of path '" +
                                        r +
                                        "'."
                                    );
                                  }),
                                  t.readAsArrayBuffer(i[r]);
                              });
                            });
                        } else
                          l(
                            new Error(
                              "weightManifest field is missing from file " +
                                r.name
                            )
                          );
                      } else
                        l(
                          new Error(
                            "modelTopology field is missing from file " + r.name
                          )
                        );
                    }),
                      (t.onerror = function (t) {
                        return l(
                          "Failed to read model topology and weights manifest JSON from file '" +
                            r.name +
                            "'. BrowserFiles supports loading Keras-style tf.Model artifacts only."
                        );
                      }),
                      t.readAsText(r);
                  }),
                ]
              );
            });
          });
        }),
        (t.prototype.checkManifestAndWeightFiles = function (t, n) {
          for (
            var r = [],
              o = n.map(function (t) {
                return Yc(t.name);
              }),
              i = {},
              e = 0,
              a = t;
            e < a.length;
            e++
          )
            a[e].paths.forEach(function (t) {
              var e = Yc(t);
              if (-1 !== r.indexOf(e))
                throw new Error(
                  "Duplicate file basename found in weights manifest: '" +
                    e +
                    "'"
                );
              if ((r.push(e), -1 === o.indexOf(e)))
                throw new Error(
                  "Weight file with basename '" + e + "' is not provided."
                );
              i[t] = n[o.indexOf(e)];
            });
          if (r.length !== n.length)
            throw new Error(
              "Mismatch in the number of files in weights manifest (" +
                r.length +
                ") and the number of weight files provided (" +
                n.length +
                ")."
            );
          return i;
        }),
        t
      );
    })();
  function Sl(n, r, o, i) {
    var t, e, a;
    D(null != (a = n) && Array.isArray(a) && 0 < a.length, function () {
      return "promises must be a none empty array";
    }),
      (t = o = null == o ? 0 : o),
      (e = i = null == i ? 1 : i),
      D(0 <= t && t <= 1, function () {
        return (
          "Progress fraction must be in range [0, 1], but got startFraction " +
          t
        );
      }),
      D(0 <= e && e <= 1, function () {
        return (
          "Progress fraction must be in range [0, 1], but got endFraction " + e
        );
      }),
      D(t <= e, function () {
        return (
          "startFraction must be no more than endFraction, but got startFraction " +
          t +
          " and endFraction " +
          e
        );
      });
    var s = 0;
    return Promise.all(
      n.map(function (t) {
        return (
          t.then(function (t) {
            var e = o + (++s / n.length) * (i - o);
            return r(e), t;
          }),
          t
        );
      })
    );
  }
  function Rl(l, h) {
    return m(this, void 0, void 0, function () {
      var e, n, r, o, i, a, s, u, c;
      return R(this, function (t) {
        switch (t.label) {
          case 0:
            return (
              null == h && (h = {}),
              (e = null == h.fetchFunc ? fetch : h.fetchFunc),
              (n = l.map(function (t) {
                return e(t, h.requestInit);
              })),
              (r = 0),
              (o = 0.5),
              null != h.onProgress ? [3, 2] : [4, Promise.all(n)]
            );
          case 1:
            return (i = t.sent()), [3, 4];
          case 2:
            return [4, Sl(n, h.onProgress, r, o)];
          case 3:
            (i = t.sent()), (t.label = 4);
          case 4:
            return (
              (a = i.map(function (t) {
                return t.arrayBuffer();
              })),
              (s = 0.5),
              (u = 1),
              null != h.onProgress ? [3, 6] : [4, Promise.all(a)]
            );
          case 5:
            return (c = t.sent()), [3, 8];
          case 6:
            return [4, Sl(a, h.onProgress, s, u)];
          case 7:
            (c = t.sent()), (t.label = 8);
          case 8:
            return [2, c];
        }
      });
    });
  }
  function Nl(i) {
    var t = this;
    return function (f, o, d) {
      return (
        void 0 === o && (o = ""),
        m(t, void 0, void 0, function () {
          var a, c, s, u, e, n, r, l, h, p;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                if (
                  ((a = f.map(function () {
                    return !1;
                  })),
                  (c = {}),
                  (s =
                    null != d
                      ? d.map(function () {
                          return !1;
                        })
                      : []),
                  (u = []),
                  f.forEach(function (t, o) {
                    var i = 0;
                    t.weights.forEach(function (n) {
                      var t =
                          "quantization" in n ? n.quantization.dtype : n.dtype,
                        e = qc[t] * B(n.shape),
                        r = function () {
                          (a[o] = !0),
                            null == c[o] && (c[o] = []),
                            c[o].push({
                              manifestEntry: n,
                              groupOffset: i,
                              sizeBytes: e,
                            });
                        };
                      null != d
                        ? d.forEach(function (t, e) {
                            t === n.name && (r(), (s[e] = !0));
                          })
                        : r(),
                        u.push(n.name),
                        (i += e);
                    });
                  }),
                  !s.every(function (t) {
                    return t;
                  }))
                )
                  throw (
                    ((e = d.filter(function (t, e) {
                      return !s[e];
                    })),
                    new Error(
                      "Could not find weights in manifest with names: " +
                        e.join(", ") +
                        ". \nManifest JSON has weights with names: " +
                        u.join(", ") +
                        "."
                    ))
                  );
                return (
                  (n = a.reduce(function (t, e, n) {
                    return e && t.push(n), t;
                  }, [])),
                  (r = []),
                  n.forEach(function (t) {
                    f[t].paths.forEach(function (t) {
                      var e = o + (o.endsWith("/") ? "" : "/") + t;
                      r.push(e);
                    });
                  }),
                  [4, i(r)]
                );
              case 1:
                return (
                  (l = t.sent()),
                  (h = {}),
                  (p = 0),
                  n.forEach(function (t) {
                    for (var e = f[t].paths.length, n = 0, r = 0; r < e; r++)
                      n += l[p + r].byteLength;
                    for (
                      var o = new ArrayBuffer(n),
                        i = new Uint8Array(o),
                        a = 0,
                        s = 0;
                      s < e;
                      s++
                    ) {
                      var u = new Uint8Array(l[p + s]);
                      i.set(u, a), (a += u.byteLength);
                    }
                    c[t].forEach(function (t) {
                      var e = jc(
                        o.slice(t.groupOffset, t.groupOffset + t.sizeBytes),
                        [t.manifestEntry]
                      );
                      for (var n in e) h[n] = e[n];
                    }),
                      (p += e);
                  }),
                  [2, h]
                );
            }
          });
        })
      );
    };
  }
  Jc.registerSaveRouter(function (t) {
    return Zt.get("IS_BROWSER") &&
      !Array.isArray(t) &&
      t.startsWith(Cl.URL_SCHEME)
      ? (void 0 === (e = t.slice(Cl.URL_SCHEME.length)) && (e = "model"),
        new Cl(e))
      : null;
    var e;
  });
  var kl = (function () {
    function t(t, n) {
      if (
        ((this.DEFAULT_METHOD = "POST"),
        null == n && (n = {}),
        (this.weightPathPrefix = n.weightPathPrefix),
        (this.onProgress = n.onProgress),
        null == n.fetchFunc)
      ) {
        var e = Zt.global.fetch;
        if (void 0 === e)
          throw new Error(
            "browserHTTPRequest is not supported outside the web browser without a fetch polyfill."
          );
        n.fetchFunc = e.bind(Zt.global);
      } else
        D("function" == typeof n.fetchFunc, function () {
          return "Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)";
        });
      if (
        ((this.fetchFunc = function (e, t) {
          return n.fetchFunc(e, t).catch(function (t) {
            throw new Error("Request for " + e + " failed due to error: " + t);
          });
        }),
        D(null != t && 0 < t.length, function () {
          return "URL path for browserHTTPRequest must not be null, undefined or empty.";
        }),
        Array.isArray(t) &&
          D(2 === t.length, function () {
            return (
              "URL paths for browserHTTPRequest must have a length of 2, (actual length is " +
              t.length +
              ")."
            );
          }),
        (this.path = t),
        null != n.requestInit && null != n.requestInit.body)
      )
        throw new Error(
          "requestInit is expected to have no pre-existing body, but has one."
        );
      this.requestInit = n.requestInit || {};
    }
    return (
      (t.prototype.save = function (i) {
        return m(this, void 0, void 0, function () {
          var e, n, r, o;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                if (i.modelTopology instanceof ArrayBuffer)
                  throw new Error(
                    "BrowserHTTPRequest.save() does not support saving model topology in binary formats yet."
                  );
                return (
                  ((e = Object.assign(
                    { method: this.DEFAULT_METHOD },
                    this.requestInit
                  )).body = new FormData()),
                  (n = [
                    { paths: ["./model.weights.bin"], weights: i.weightSpecs },
                  ]),
                  (r = {
                    modelTopology: i.modelTopology,
                    format: i.format,
                    generatedBy: i.generatedBy,
                    convertedBy: i.convertedBy,
                    weightsManifest: n,
                  }),
                  e.body.append(
                    "model.json",
                    new Blob([JSON.stringify(r)], { type: "application/json" }),
                    "model.json"
                  ),
                  null != i.weightData &&
                    e.body.append(
                      "model.weights.bin",
                      new Blob([i.weightData], {
                        type: "application/octet-stream",
                      }),
                      "model.weights.bin"
                    ),
                  [4, this.getFetchFunc()(this.path, e)]
                );
              case 1:
                if ((o = t.sent()).ok)
                  return [2, { modelArtifactsInfo: Qc(i), responses: [o] }];
                throw new Error(
                  "BrowserHTTPRequest.save() failed due to HTTP response status " +
                    o.status +
                    "."
                );
            }
          });
        });
      }),
      (t.prototype.load = function () {
        return m(this, void 0, void 0, function () {
          var e, n, r, o, i, a, s, u;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                return [4, this.getFetchFunc()(this.path, this.requestInit)];
              case 1:
                if (!(e = t.sent()).ok)
                  throw new Error(
                    "Request to " +
                      this.path +
                      " failed with status code " +
                      e.status +
                      ". Please verify this URL points to the model JSON of the model to load."
                  );
                t.label = 2;
              case 2:
                return t.trys.push([2, 4, , 5]), [4, e.json()];
              case 3:
                return (n = t.sent()), [3, 5];
              case 4:
                throw (
                  (t.sent(),
                  (r =
                    "Failed to parse model JSON of response from " +
                    this.path +
                    "."),
                  this.path.endsWith(".pb")
                    ? (r +=
                        " Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.")
                    : (r +=
                        " Please make sure the server is serving valid JSON for this request."),
                  new Error(r))
                );
              case 5:
                if (
                  ((o = n.modelTopology),
                  (i = n.weightsManifest),
                  null == o && null == i)
                )
                  throw new Error(
                    "The JSON from HTTP path " +
                      this.path +
                      " contains neither model topology or manifest for weights."
                  );
                return null == i ? [3, 7] : [4, this.loadWeights(i)];
              case 6:
                (u = t.sent()), (a = u[0]), (s = u[1]), (t.label = 7);
              case 7:
                return [2, { modelTopology: o, weightSpecs: a, weightData: s }];
            }
          });
        });
      }),
      (t.prototype.loadWeights = function (v) {
        return m(this, void 0, void 0, function () {
          var o, i, a, s, u, c, l, h, p, f, d;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                for (
                  o = Array.isArray(this.path) ? this.path[1] : this.path,
                    r = n = void 0,
                    n = (e = o).lastIndexOf("/"),
                    r = e.lastIndexOf("?"),
                    i = [e.substring(0, n) + "/", n < r ? e.substring(r) : ""],
                    a = i[0],
                    s = i[1],
                    u = this.weightPathPrefix || a,
                    c = [],
                    l = 0,
                    h = v;
                  l < h.length;
                  l++
                )
                  (p = h[l]), c.push.apply(c, p.weights);
                return (
                  (f = []),
                  v.forEach(function (t) {
                    t.paths.forEach(function (t) {
                      f.push(u + t + s);
                    });
                  }),
                  [
                    4,
                    Rl(f, {
                      requestInit: this.requestInit,
                      fetchFunc: this.getFetchFunc(),
                      onProgress: this.onProgress,
                    }),
                  ]
                );
              case 1:
                return (d = t.sent()), [2, [c, Xc(d)]];
            }
            var e, n, r;
          });
        });
      }),
      (t.prototype.getFetchFunc = function () {
        return this.fetchFunc;
      }),
      (t.URL_SCHEME_REGEX = /^https?:\/\//),
      t
    );
  })();
  function Il(t) {
    return null != t.match(kl.URL_SCHEME_REGEX);
  }
  var Tl = function (t, e) {
    return "undefined" == typeof fetch
      ? null
      : (
          Array.isArray(t)
            ? t.every(function (t) {
                return Il(t);
              })
            : Il(t)
        )
      ? Al(t, { onProgress: e })
      : null;
  };
  function Al(t, e) {
    return new kl(t, e);
  }
  Jc.registerSaveRouter(Tl), Jc.registerLoadRouter(Tl);
  var Dl = (function () {
      function t(t, e, n) {
        (this.modelTopology = t), (this.weightSpecs = e), (this.weightData = n);
      }
      return (
        (t.prototype.load = function () {
          return m(this, void 0, void 0, function () {
            var e;
            return R(this, function (t) {
              return (
                (e = {}),
                null != this.modelTopology &&
                  (e = n({ modelTopology: this.modelTopology }, e)),
                null != this.weightSpecs &&
                  0 < this.weightSpecs.length &&
                  (e = n({ weightSpecs: this.weightSpecs }, e)),
                null != this.weightData &&
                  0 < this.weightData.byteLength &&
                  (e = n({ weightData: this.weightData }, e)),
                [2, e]
              );
            });
          });
        }),
        t
      );
    })(),
    Ml = (function () {
      function t(t) {
        this.saveHandler = t;
      }
      return (
        (t.prototype.save = function (e) {
          return m(this, void 0, void 0, function () {
            return R(this, function (t) {
              return [2, this.saveHandler(e)];
            });
          });
        }),
        t
      );
    })();
  var Ol = Object.freeze({
    browserFiles: function (t) {
      return new _l(t);
    },
    browserHTTPRequest: Al,
    concatenateArrayBuffers: Xc,
    decodeWeights: jc,
    encodeWeights: function (i) {
      return m(this, void 0, void 0, function () {
        var e, n, r, o;
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              for (r in ((e = []), (n = []), i)) {
                if (
                  "float32" !== (o = i[r]).dtype &&
                  "int32" !== o.dtype &&
                  "bool" !== o.dtype
                )
                  throw new Error(
                    "Unsupported dtype in weight '" + r + "': " + o.dtype
                  );
                e.push({ name: r, shape: o.shape, dtype: o.dtype }),
                  n.push(o.data());
              }
              return [4, Promise.all(n)];
            case 1:
              return [
                2,
                {
                  data: (function (t) {
                    if (null === t)
                      throw new Error(
                        "Invalid input value: " + JSON.stringify(t)
                      );
                    var e = 0,
                      n = [];
                    t.forEach(function (t) {
                      if (
                        ((e += t.byteLength),
                        n.push(
                          t.byteLength === t.buffer.byteLength
                            ? t
                            : new t.constructor(t)
                        ),
                        !(
                          t instanceof Float32Array ||
                          t instanceof Int32Array ||
                          t instanceof Uint8Array
                        ))
                      )
                        throw new Error(
                          "Unsupported TypedArray subtype: " +
                            t.constructor.name
                        );
                    });
                    var r = new Uint8Array(e),
                      o = 0;
                    return (
                      n.forEach(function (t) {
                        r.set(new Uint8Array(t.buffer), o), (o += t.byteLength);
                      }),
                      r.buffer
                    );
                  })(t.sent()),
                  specs: e,
                },
              ];
          }
        });
      });
    },
    fromMemory: function (t, e, n) {
      return new Dl(t, e, n);
    },
    getLoadHandlers: function (t, e) {
      return Jc.getLoadHandlers(t);
    },
    getModelArtifactsInfoForJSON: Qc,
    getSaveHandlers: function (t) {
      return Jc.getSaveHandlers(t);
    },
    isHTTPScheme: Il,
    loadWeights: function (e, n, r, o) {
      return (
        void 0 === n && (n = ""),
        m(this, void 0, void 0, function () {
          return R(this, function (t) {
            return [
              2,
              Nl(function (t) {
                return Rl(t, { requestInit: o });
              })(e, n, r),
            ];
          });
        })
      );
    },
    registerLoadRouter: function (t) {
      return Jc.registerLoadRouter(t);
    },
    registerSaveRouter: function (t) {
      return Jc.registerSaveRouter(t);
    },
    weightsLoaderFactory: Nl,
    withSaveHandler: function (t) {
      return new Ml(t);
    },
    copyModel: function (e, n) {
      return m(this, void 0, void 0, function () {
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              return [4, nl(e, n, !1)];
            case 1:
              return [2, t.sent()];
          }
        });
      });
    },
    listModels: function () {
      return m(this, void 0, void 0, function () {
        var e, n, r, o, i, a, s;
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              (e = tl.getSchemes()), (n = {}), (r = 0), (o = e), (t.label = 1);
            case 1:
              return r < o.length
                ? ((i = o[r]), [4, tl.getManager(i).listModels()])
                : [3, 4];
            case 2:
              for (s in (a = t.sent())) n[i + Zc + s] = a[s];
              t.label = 3;
            case 3:
              return r++, [3, 1];
            case 4:
              return [2, n];
          }
        });
      });
    },
    moveModel: function (e, n) {
      return m(this, void 0, void 0, function () {
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              return [4, nl(e, n, !0)];
            case 1:
              return [2, t.sent()];
          }
        });
      });
    },
    removeModel: function (n) {
      return m(this, void 0, void 0, function () {
        var e;
        return R(this, function (t) {
          switch (t.label) {
            case 0:
              return (
                (e = el(n)), [4, tl.getManager(e.scheme).removeModel(e.path)]
              );
            case 1:
              return [2, t.sent()];
          }
        });
      });
    },
  });
  var Pl = Fe({
      confusionMatrix_: function (t, e, n) {
        var r = re(t, "labels", "confusionMatrix"),
          o = re(e, "predictions", "confusionMatrix");
        D(null == n || (0 < n && Number.isInteger(n)), function () {
          return (
            "If provided, numClasses must be a positive integer, but got " + n
          );
        }),
          D(1 === r.rank, function () {
            return "Expected the rank of labels to be 1, but got " + r.rank;
          }),
          D(1 === o.rank, function () {
            return (
              "Expected the rank of predictions to be 1, but got " + o.rank
            );
          }),
          D(r.shape[0] === o.shape[0], function () {
            return (
              "Mismatch in the number of examples: " +
              r.shape[0] +
              " vs. " +
              o.shape[0] +
              ". Labels and predictions should have the same number of elements."
            );
          }),
          D(0 < n && Number.isInteger(n), function () {
            return (
              "numClasses is required to be a positive integer, but got " + n
            );
          });
        var i = Yi(r.asType("int32"), n),
          a = Yi(o.asType("int32"), n);
        return i.transpose().matMul(a).asType("int32");
      },
    }),
    Fl = Object.freeze({ confusionMatrix: Pl });
  var Ll = Fe({
      fromPixels_: function (t, e) {
        if ((void 0 === e && (e = 3), 4 < e))
          throw new Error(
            "Cannot construct Tensor with more than 4 channels from pixels."
          );
        return Zt.engine.fromPixels(t, e);
      },
    }),
    Bl = Object.freeze({
      toPixels: function (b, E) {
        return m(this, void 0, void 0, function () {
          var e, n, r, o, i, a, s, u, c, l, h, p, f, d, v, m, g, y, x, w;
          return R(this, function (t) {
            switch (t.label) {
              case 0:
                if (
                  ((e = re(b, "img", "toPixels")),
                  b instanceof dt || (e = e.toInt()),
                  2 !== e.rank && 3 !== e.rank)
                )
                  throw new Error(
                    "toPixels only supports rank 2 or 3 tensors, got rank " +
                      e.rank +
                      "."
                  );
                if (
                  ((n = e.shape.slice(0, 2)),
                  (r = n[0]),
                  (o = n[1]),
                  4 < (i = 2 === e.rank ? 1 : e.shape[2]) || 2 === i)
                )
                  throw new Error(
                    "toPixels only supports depth of size 1, 3 or 4 but got " +
                      i
                  );
                return (a = e.min()), (s = e.max()), [4, a.data()];
              case 1:
                return (u = t.sent()[0]), [4, s.data()];
              case 2:
                if (
                  ((c = t.sent()[0]),
                  a.dispose(),
                  s.dispose(),
                  "float32" === e.dtype)
                ) {
                  if (u < 0 || 1 < c)
                    throw new Error(
                      "Tensor values for a float32 Tensor must be in the range [0 - 1] but got range [" +
                        u +
                        " - " +
                        c +
                        "]."
                    );
                } else {
                  if ("int32" !== e.dtype)
                    throw new Error(
                      "Unsupported type for toPixels: " +
                        e.dtype +
                        ". Please use float32 or int32 tensors."
                    );
                  if (u < 0 || 255 < c)
                    throw new Error(
                      "Tensor values for a int32 Tensor must be in the range [0 - 255] but got range [" +
                        u +
                        " - " +
                        c +
                        "]."
                    );
                }
                return [4, e.data()];
              case 3:
                for (
                  l = t.sent(),
                    h = "float32" === e.dtype ? 255 : 1,
                    p = new Uint8ClampedArray(o * r * 4),
                    f = 0;
                  f < r * o;
                  ++f
                )
                  (g = m = v = d = void 0),
                    1 === i
                      ? ((d = l[f] * h),
                        (v = l[f] * h),
                        (m = l[f] * h),
                        (g = 255))
                      : 3 === i
                      ? ((d = l[3 * f] * h),
                        (v = l[3 * f + 1] * h),
                        (m = l[3 * f + 2] * h),
                        (g = 255))
                      : 4 === i &&
                        ((d = l[4 * f] * h),
                        (v = l[4 * f + 1] * h),
                        (m = l[4 * f + 2] * h),
                        (g = l[4 * f + 3] * h)),
                    (p[0 + (y = 4 * f)] = Math.round(d)),
                    (p[y + 1] = Math.round(v)),
                    (p[y + 2] = Math.round(m)),
                    (p[y + 3] = Math.round(g));
                return (
                  null != E &&
                    ((E.width = o),
                    (E.height = r),
                    (x = E.getContext("2d")),
                    (w = new ImageData(p, o, r)),
                    x.putImageData(w, 0, 0)),
                  e !== b && e.dispose(),
                  [2, p]
                );
            }
          });
        });
      },
      fromPixels: Ll,
    }),
    Wl = (function () {
      function t() {}
      return (
        (t.prototype.getClassName = function () {
          return this.constructor.className;
        }),
        (t.fromConfig = function (t, e) {
          return new t(e);
        }),
        t
      );
    })(),
    zl = (function () {
      function e() {
        this.classNameMap = {};
      }
      return (
        (e.getMap = function () {
          return null == e.instance && (e.instance = new e()), e.instance;
        }),
        (e.register = function (t) {
          e.getMap().classNameMap[t.className] = [t, t.fromConfig];
        }),
        e
      );
    })();
  function Ul(t) {
    D(null != t.className, function () {
      return "Class being registered does not have the static className property defined.";
    }),
      D("string" == typeof t.className, function () {
        return (
          "className is required to be a string, but got type " +
          typeof t.className
        );
      }),
      D(0 < t.className.length, function () {
        return "Class being registered has an empty-string as its className, which is disallowed.";
      }),
      zl.register(t);
  }
  var Gl = Object.freeze({
    Serializable: Wl,
    SerializationMap: zl,
    registerClass: Ul,
  });
  function Vl(t, e, n) {
    return (
      null == n && (n = Zt.get("TEST_EPSILON")),
      Hl(
        t,
        "number" == typeof e || "boolean" == typeof e ? [e] : e,
        function (t, e) {
          return ql(t, Number(e), n);
        }
      )
    );
  }
  function Hl(t, e, n) {
    if (t instanceof dt || e instanceof dt) {
      if (t instanceof dt && e instanceof dt) {
        if (t.dtype !== e.dtype)
          throw new Error(
            "Arrays are of different type actual: " +
              t.dtype +
              " vs expected: " +
              e.dtype +
              "."
          );
        if (!E(t.shape, e.shape))
          throw new Error(
            "Arrays are of different shape actual: " +
              t.shape +
              " vs expected: " +
              e.shape +
              "."
          );
      }
    } else {
      var r = t.constructor.name,
        o = e.constructor.name;
      if (r !== o)
        throw new Error(
          "Arrays are of different type actual: " + r + " vs expected: " + o
        );
    }
    var i, a;
    if (
      ((i = t instanceof dt ? t.dataSync() : t),
      (a = e instanceof dt ? e.dataSync() : e),
      i.length !== a.length)
    )
      throw new Error(
        "Arrays have different lengths actual: " +
          i.length +
          " vs expected: " +
          a.length +
          ".\nActual:   " +
          i +
          ".\nExpected: " +
          a +
          "."
      );
    for (var s = 0; s < a.length; ++s) {
      var u = i[s],
        c = a[s];
      if (!n(u, c))
        throw new Error(
          "Arrays differ: actual[" +
            s +
            "] = " +
            u +
            ", expected[" +
            s +
            "] = " +
            c +
            ".\nActual:   " +
            i +
            ".\nExpected: " +
            a +
            "."
        );
    }
  }
  function ql(t, e, n) {
    return (
      !(!isNaN(t) || !isNaN(e)) ||
      !(isNaN(t) || isNaN(e) || Math.abs(t - e) > n)
    );
  }
  var jl = Object.freeze({
      WEBGL_ENVS: { HAS_WEBGL: !0 },
      PACKED_ENVS: { WEBGL_PACK: !0 },
      NODE_ENVS: { IS_NODE: !0 },
      CHROME_ENVS: { IS_CHROME: !0 },
      BROWSER_ENVS: { IS_BROWSER: !0 },
      CPU_ENVS: { HAS_WEBGL: !1 },
      ALL_ENVS: {},
      expectArraysClose: Vl,
      expectPromiseToFail: function (t, e) {
        t().then(
          function () {
            return e.fail();
          },
          function () {
            return e();
          }
        );
      },
      expectArraysEqual: function (t, e) {
        var n =
          "string" == typeof e || "number" == typeof e || "boolean" == typeof e
            ? [e]
            : e;
        return (t instanceof dt && "string" === t.dtype) ||
          (e instanceof dt && "string" === e.dtype) ||
          (Array.isArray(t) && V(t[0])) ||
          (Array.isArray(e) && V(e[0]))
          ? Hl(t, n, function (t, e) {
              return t == e;
            })
          : Vl(t, e, 0);
      },
      expectNumbersClose: function (t, e, n) {
        if ((null == n && (n = Zt.get("TEST_EPSILON")), !ql(t, e, n)))
          throw new Error(
            "Numbers differ: actual === " + t + ", expected === " + e
          );
      },
      expectValuesInRange: function (t, e, n) {
        var r;
        r = t instanceof dt ? t.dataSync() : t;
        for (var o = 0; o < r.length; o++)
          if (r[o] < e || r[o] > n)
            throw new Error(
              "Value out of range:" + r[o] + " low: " + e + ", high: " + n
            );
      },
      expectArrayBuffersEqual: function (t, e) {
        expect(new Float32Array(t)).toEqual(new Float32Array(e));
      },
    }),
    $l = Object.freeze({
      gpgpu_util: Do,
      webgl_util: co,
      MathBackendWebGL: va,
      GPGPUContext: Mo,
    }),
    Kl = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        s(e, t),
        (e.prototype.minimize = function (t, e, n) {
          void 0 === e && (e = !1);
          var r = this.computeGradients(t, n),
            o = r.value,
            i = r.grads;
          return (
            this.applyGradients(i),
            Object.keys(i).forEach(function (t) {
              return i[t].dispose();
            }),
            e ? o : (o.dispose(), null)
          );
        }),
        (e.prototype.computeGradients = function (t, e) {
          return ie(t, e);
        }),
        (e.prototype.dispose = function () {}),
        e
      );
    })(Wl);
  Object.defineProperty(Kl, Symbol.hasInstance, {
    value: function (t) {
      return (
        null != t.minimize &&
        null != t.computeGradients &&
        null != t.applyGradients
      );
    },
  });
  var Xl = (function (o) {
    function t(t, e, n) {
      void 0 === n && (n = null);
      var r = o.call(this) || this;
      return (
        (r.learningRate = t),
        (r.rho = e),
        (r.epsilon = n),
        (r.accumulatedGrads = {}),
        (r.accumulatedUpdates = {}),
        (r.c = ce(Ve(-t))),
        (r.rhoScalar = ce(Ve(e))),
        (r.oneMinusRho = ce(Ve(1 - e))),
        null === n && (n = Zt.get("EPSILON")),
        (r.epsilonScalar = ce(Ve(n))),
        r
      );
    }
    return (
      s(t, o),
      (t.prototype.applyGradients = function (t) {
        var c = this,
          e = function (o) {
            var i = Zt.engine.registeredVariables[o];
            null == n.accumulatedGrads[o] &&
              ue(function () {
                c.accumulatedGrads[o] = nn(i).variable(!1);
              }),
              null == n.accumulatedUpdates[o] &&
                ue(function () {
                  c.accumulatedUpdates[o] = nn(i).variable(!1);
                });
            var a = t[o],
              s = n.accumulatedGrads[o],
              u = n.accumulatedUpdates[o];
            ue(function () {
              var t = c.rhoScalar.mul(s).add(c.oneMinusRho.mul(a.square())),
                e = u
                  .add(c.epsilonScalar)
                  .sqrt()
                  .div(s.add(c.epsilonScalar).sqrt())
                  .mul(a),
                n = c.rhoScalar.mul(u).add(c.oneMinusRho.mul(e.square()));
              c.accumulatedGrads[o].assign(t),
                c.accumulatedUpdates[o].assign(n);
              var r = c.c.mul(e).add(i);
              i.assign(r);
            });
          },
          n = this;
        for (var r in t) e(r);
      }),
      (t.prototype.dispose = function () {
        var e = this;
        this.c.dispose(),
          this.epsilonScalar.dispose(),
          this.rhoScalar.dispose(),
          this.oneMinusRho.dispose(),
          null != this.accumulatedUpdates &&
            (Object.keys(this.accumulatedUpdates).forEach(function (t) {
              return e.accumulatedUpdates[t].dispose();
            }),
            Object.keys(this.accumulatedGrads).forEach(function (t) {
              return e.accumulatedGrads[t].dispose();
            }));
      }),
      (t.prototype.getConfig = function () {
        return {
          learningRate: this.learningRate,
          rho: this.rho,
          epsilon: this.epsilon,
        };
      }),
      (t.fromConfig = function (t, e) {
        return new t(e.learningRate, e.rho, e.epsilon);
      }),
      (t.className = "AdadeltaOptimizer"),
      t
    );
  })(Kl);
  Ul(Xl);
  var Yl = (function (r) {
    function t(t, e) {
      void 0 === e && (e = 0.1);
      var n = r.call(this) || this;
      return (
        (n.learningRate = t),
        (n.initialAccumulatorValue = e),
        (n.accumulatedGrads = {}),
        (n.c = ce(Ve(-t))),
        (n.epsilon = ce(Ve(Zt.get("EPSILON")))),
        n
      );
    }
    return (
      s(t, r),
      (t.prototype.applyGradients = function (t) {
        var a = this,
          e = function (n) {
            var r = Zt.engine.registeredVariables[n];
            null == s.accumulatedGrads[n] &&
              ue(function () {
                a.accumulatedGrads[n] = Je(
                  r.shape,
                  a.initialAccumulatorValue
                ).variable(!1);
              });
            var o = t[n],
              i = s.accumulatedGrads[n];
            ue(function () {
              var t = i.add(o.square());
              a.accumulatedGrads[n].assign(t);
              var e = a.c.mul(o.div(t.add(a.epsilon).sqrt())).add(r);
              r.assign(e);
            });
          },
          s = this;
        for (var n in t) e(n);
      }),
      (t.prototype.dispose = function () {
        var e = this;
        this.epsilon.dispose(),
          this.c.dispose(),
          null != this.accumulatedGrads &&
            Object.keys(this.accumulatedGrads).forEach(function (t) {
              return e.accumulatedGrads[t].dispose();
            });
      }),
      (t.prototype.getConfig = function () {
        return {
          learningRate: this.learningRate,
          initialAccumulatorValue: this.initialAccumulatorValue,
        };
      }),
      (t.fromConfig = function (t, e) {
        return new t(e.learningRate, e.initialAccumulatorValue);
      }),
      (t.className = "AdagradOptimizer"),
      t
    );
  })(Kl);
  Ul(Yl);
  var Ql = (function (i) {
    function t(t, e, n, r) {
      void 0 === r && (r = null);
      var o = i.call(this) || this;
      return (
        (o.learningRate = t),
        (o.beta1 = e),
        (o.beta2 = n),
        (o.epsilon = r),
        (o.accumulatedFirstMoment = {}),
        (o.accumulatedSecondMoment = {}),
        (o.c = ce(Ve(-t))),
        (o.beta1Scalar = ce(Ve(e))),
        (o.beta2Scalar = ce(Ve(n))),
        ue(function () {
          (o.accBeta1 = Ve(e).variable()), (o.accBeta2 = Ve(n).variable());
        }),
        (o.oneMinusBeta1 = ce(Ve(1 - e))),
        (o.oneMinusBeta2 = ce(Ve(1 - n))),
        (o.one = ce(Ve(1))),
        null === r && (r = Zt.get("EPSILON")),
        (o.epsScalar = ce(Ve(r))),
        o
      );
    }
    return (
      s(t, i),
      (t.prototype.applyGradients = function (f) {
        var d = this;
        ue(function () {
          var t = d.one.sub(d.accBeta1),
            e = d.one.sub(d.accBeta2);
          for (var n in f) {
            var r = Zt.engine.registeredVariables[n];
            if (null == d.accumulatedFirstMoment[n]) {
              var o = !1;
              d.accumulatedFirstMoment[n] = nn(r).variable(o);
            }
            null == d.accumulatedSecondMoment[n] &&
              ((o = !1), (d.accumulatedSecondMoment[n] = nn(r).variable(o)));
            var i = f[n],
              a = d.accumulatedFirstMoment[n],
              s = d.accumulatedSecondMoment[n],
              u = d.beta1Scalar.mul(a).add(d.oneMinusBeta1.mul(i)),
              c = d.beta2Scalar.mul(s).add(d.oneMinusBeta2.mul(i.square())),
              l = u.div(t),
              h = c.div(e);
            d.accumulatedFirstMoment[n].assign(u),
              d.accumulatedSecondMoment[n].assign(c);
            var p = d.c.mul(l.div(d.epsScalar.add(h.sqrt()))).add(r);
            r.assign(p);
          }
          d.accBeta1.assign(d.accBeta1.mul(d.beta1Scalar)),
            d.accBeta2.assign(d.accBeta2.mul(d.beta2Scalar));
        });
      }),
      (t.prototype.dispose = function () {
        var e = this;
        this.c.dispose(),
          this.epsScalar.dispose(),
          this.beta1Scalar.dispose(),
          this.beta2Scalar.dispose(),
          this.accBeta1.dispose(),
          this.accBeta2.dispose(),
          this.oneMinusBeta1.dispose(),
          this.oneMinusBeta2.dispose(),
          this.one.dispose(),
          null != this.accumulatedFirstMoment &&
            Object.keys(this.accumulatedFirstMoment).forEach(function (t) {
              return e.accumulatedFirstMoment[t].dispose();
            }),
          null != this.accumulatedSecondMoment &&
            Object.keys(this.accumulatedSecondMoment).forEach(function (t) {
              return e.accumulatedSecondMoment[t].dispose();
            });
      }),
      (t.prototype.getConfig = function () {
        return {
          learningRate: this.learningRate,
          beta1: this.beta1,
          beta2: this.beta2,
          epsilon: this.epsilon,
        };
      }),
      (t.fromConfig = function (t, e) {
        return new t(e.learningRate, e.beta1, e.beta2, e.epsilon);
      }),
      (t.className = "AdamOptimizer"),
      t
    );
  })(Kl);
  Ul(Ql);
  var Jl = (function (a) {
    function t(t, e, n, r, o) {
      void 0 === r && (r = null), void 0 === o && (o = 0);
      var i = a.call(this) || this;
      return (
        (i.learningRate = t),
        (i.beta1 = e),
        (i.beta2 = n),
        (i.epsilon = r),
        (i.decay = o),
        (i.accumulatedFirstMoment = {}),
        (i.accumulatedWeightedInfNorm = {}),
        (i.c = ce(Ve(-t))),
        (i.beta1Scalar = ce(Ve(e))),
        (i.beta2Scalar = ce(Ve(n))),
        (i.decayScalar = ce(Ve(o))),
        ue(function () {
          (i.iteration = Ve(0).variable()), (i.accBeta1 = Ve(e).variable());
        }),
        (i.oneMinusBeta1 = ce(Ve(1 - e))),
        (i.one = ce(Ve(1))),
        null === r && (r = Zt.get("EPSILON")),
        (i.epsScalar = ce(Ve(r))),
        i
      );
    }
    return (
      s(t, a),
      (t.prototype.applyGradients = function (f) {
        var d = this;
        ue(function () {
          var t = d.one.sub(d.accBeta1),
            e = d.c.div(d.one.add(d.decayScalar.mul(d.iteration)));
          for (var n in f) {
            var r = Zt.engine.registeredVariables[n];
            if (null == d.accumulatedFirstMoment[n]) {
              var o = !1;
              d.accumulatedFirstMoment[n] = nn(r).variable(o);
            }
            null == d.accumulatedWeightedInfNorm[n] &&
              ((o = !1), (d.accumulatedWeightedInfNorm[n] = nn(r).variable(o)));
            var i = f[n],
              a = d.accumulatedFirstMoment[n],
              s = d.accumulatedWeightedInfNorm[n],
              u = d.beta1Scalar.mul(a).add(d.oneMinusBeta1.mul(i)),
              c = d.beta2Scalar.mul(s),
              l = i.abs(),
              h = c.maximum(l);
            d.accumulatedFirstMoment[n].assign(u),
              d.accumulatedWeightedInfNorm[n].assign(h);
            var p = e
              .div(t)
              .mul(u.div(d.epsScalar.add(h)))
              .add(r);
            r.assign(p);
          }
          d.iteration.assign(d.iteration.add(d.one)),
            d.accBeta1.assign(d.accBeta1.mul(d.beta1Scalar));
        });
      }),
      (t.prototype.dispose = function () {
        var e = this;
        this.c.dispose(),
          this.epsScalar.dispose(),
          this.accBeta1.dispose(),
          this.beta1Scalar.dispose(),
          this.beta2Scalar.dispose(),
          this.oneMinusBeta1.dispose(),
          this.decayScalar.dispose(),
          this.iteration.dispose(),
          this.one.dispose(),
          null != this.accumulatedFirstMoment &&
            Object.keys(this.accumulatedFirstMoment).forEach(function (t) {
              return e.accumulatedFirstMoment[t].dispose();
            }),
          null != this.accumulatedWeightedInfNorm &&
            Object.keys(this.accumulatedWeightedInfNorm).forEach(function (t) {
              return e.accumulatedWeightedInfNorm[t].dispose();
            });
      }),
      (t.prototype.getConfig = function () {
        return {
          learningRate: this.learningRate,
          beta1: this.beta1,
          beta2: this.beta2,
          epsilon: this.epsilon,
          decay: this.decay,
        };
      }),
      (t.fromConfig = function (t, e) {
        return new t(e.learningRate, e.beta1, e.beta2, e.epsilon, e.decay);
      }),
      (t.className = "AdamaxOptimizer"),
      t
    );
  })(Kl);
  Ul(Jl);
  var Zl = (function (n) {
    function t(t) {
      var e = n.call(this) || this;
      return (e.learningRate = t), e.setLearningRate(t), e;
    }
    return (
      s(t, n),
      (t.prototype.applyGradients = function (r) {
        var o = this;
        Object.keys(r).forEach(function (t) {
          var e = r[t],
            n = Zt.engine.registeredVariables[t];
          ue(function () {
            var t = o.c.mul(e).add(n);
            n.assign(t);
          });
        });
      }),
      (t.prototype.setLearningRate = function (t) {
        (this.learningRate = t),
          null != this.c && this.c.dispose(),
          (this.c = ce(Ve(-t)));
      }),
      (t.prototype.dispose = function () {
        this.c.dispose();
      }),
      (t.prototype.getConfig = function () {
        return { learningRate: this.learningRate };
      }),
      (t.fromConfig = function (t, e) {
        return new t(e.learningRate);
      }),
      (t.className = "SGDOptimizer"),
      t
    );
  })(Kl);
  Ul(Zl);
  var th = (function (o) {
    function t(t, e, n) {
      void 0 === n && (n = !1);
      var r = o.call(this, t) || this;
      return (
        (r.learningRate = t),
        (r.momentum = e),
        (r.useNesterov = n),
        (r.m = Ve(r.momentum)),
        (r.accumulations = {}),
        r
      );
    }
    return (
      s(t, o),
      (t.prototype.applyGradients = function (t) {
        var a = this,
          e = function (n) {
            var r = Zt.engine.registeredVariables[n];
            null == s.accumulations[n] &&
              ue(function () {
                a.accumulations[n] = nn(r).variable(!1);
              });
            var o = s.accumulations[n],
              i = t[n];
            ue(function () {
              var t,
                e = a.m.mul(o).add(i);
              (t = a.useNesterov
                ? a.c.mul(i.add(e.mul(a.m))).add(r)
                : a.c.mul(e).add(r)),
                a.accumulations[n].assign(e),
                r.assign(t);
            });
          },
          s = this;
        for (var n in t) e(n);
      }),
      (t.prototype.dispose = function () {
        if (
          (o.prototype.dispose.call(this),
          this.m.dispose(),
          null != this.accumulations)
        )
          for (var t in this.accumulations) this.accumulations[t].dispose();
      }),
      (t.prototype.setMomentum = function (t) {
        this.momentum = t;
      }),
      (t.prototype.getConfig = function () {
        return {
          learningRate: this.learningRate,
          momentum: this.momentum,
          useNesterov: this.useNesterov,
        };
      }),
      (t.fromConfig = function (t, e) {
        return new t(e.learningRate, e.momentum, e.useNesterov);
      }),
      (t.className = "MomentumOptimizer"),
      t
    );
  })(Zl);
  Ul(th);
  var eh = (function (a) {
    function t(t, e, n, r, o) {
      void 0 === e && (e = 0.9),
        void 0 === n && (n = 0),
        void 0 === r && (r = null),
        void 0 === o && (o = !1);
      var i = a.call(this) || this;
      return (
        (i.learningRate = t),
        (i.decay = e),
        (i.momentum = n),
        (i.epsilon = r),
        (i.accumulatedMeanSquares = {}),
        (i.accumulatedMeanGrads = {}),
        (i.accumulatedMoments = {}),
        (i.c = ce(Ve(t))),
        (i.decayScalar = ce(Ve(e))),
        (i.momentumScalar = ce(Ve(n))),
        (i.oneMinusDecay = ce(Ve(1 - e))),
        (i.centered = o),
        null === r && (r = Zt.get("EPSILON")),
        (i.epsilonScalar = ce(Ve(r))),
        i
      );
    }
    return (
      s(t, a),
      (t.prototype.applyGradients = function (t) {
        var h = this,
          e = function (i) {
            var a = Zt.engine.registeredVariables[i];
            null == n.accumulatedMeanSquares[i] &&
              ue(function () {
                h.accumulatedMeanSquares[i] = nn(a).variable(!1);
              }),
              null == n.accumulatedMeanGrads[i] &&
                n.centered &&
                ue(function () {
                  h.accumulatedMeanGrads[i] = nn(a).variable(!1);
                }),
              null == n.accumulatedMoments[i] &&
                ue(function () {
                  h.accumulatedMoments[i] = nn(a).variable(!1);
                });
            var s = n.accumulatedMeanSquares[i],
              u = n.accumulatedMeanGrads[i],
              c = n.accumulatedMoments[i],
              l = t[i];
            ue(function () {
              var t = h.decayScalar.mul(s).add(h.oneMinusDecay.mul(l.square()));
              if (h.centered) {
                var e = h.decayScalar.mul(u).add(h.oneMinusDecay.mul(l)),
                  n = h.momentumScalar
                    .mul(c)
                    .add(
                      h.c
                        .mul(l)
                        .div(t.sub(e.square().add(h.epsilonScalar)).sqrt())
                    );
                h.accumulatedMeanSquares[i].assign(t),
                  h.accumulatedMeanGrads[i].assign(e),
                  h.accumulatedMoments[i].assign(n);
                var r = a.sub(n);
                a.assign(r);
              } else {
                var o = h.decayScalar
                  .mul(s)
                  .add(h.oneMinusDecay.mul(l.square()));
                (n = h.momentumScalar
                  .mul(c)
                  .add(h.c.mul(l).div(o.add(h.epsilonScalar).sqrt()))),
                  h.accumulatedMeanSquares[i].assign(o),
                  h.accumulatedMoments[i].assign(n),
                  (r = a.sub(n)),
                  a.assign(r);
              }
            });
          },
          n = this;
        for (var r in t) e(r);
      }),
      (t.prototype.dispose = function () {
        var e = this;
        this.c.dispose(),
          this.epsilonScalar.dispose(),
          this.decayScalar.dispose(),
          this.momentumScalar.dispose(),
          this.oneMinusDecay.dispose(),
          null != this.accumulatedMeanSquares &&
            Object.keys(this.accumulatedMeanSquares).forEach(function (t) {
              return e.accumulatedMeanSquares[t].dispose();
            }),
          null != this.accumulatedMeanGrads &&
            this.centered &&
            Object.keys(this.accumulatedMeanGrads).forEach(function (t) {
              return e.accumulatedMeanGrads[t].dispose();
            }),
          null != this.accumulatedMoments &&
            Object.keys(this.accumulatedMoments).forEach(function (t) {
              return e.accumulatedMoments[t].dispose();
            });
      }),
      (t.prototype.getConfig = function () {
        return {
          learningRate: this.learningRate,
          decay: this.decay,
          momentum: this.momentum,
          epsilon: this.epsilon,
          centered: this.centered,
        };
      }),
      (t.fromConfig = function (t, e) {
        return new t(
          e.learningRate,
          e.decay,
          e.momentum,
          e.epsilon,
          e.centered
        );
      }),
      (t.className = "RMSPropOptimizer"),
      t
    );
  })(Kl);
  Ul(eh);
  var nh = (function () {
      function t() {}
      return (
        (t.sgd = function (t) {
          return new Zl(t);
        }),
        (t.momentum = function (t, e, n) {
          return void 0 === n && (n = !1), new th(t, e, n);
        }),
        (t.rmsprop = function (t, e, n, r, o) {
          return (
            void 0 === e && (e = 0.9),
            void 0 === n && (n = 0),
            void 0 === r && (r = null),
            void 0 === o && (o = !1),
            new eh(t, e, n, r, o)
          );
        }),
        (t.adam = function (t, e, n, r) {
          return (
            void 0 === t && (t = 0.001),
            void 0 === e && (e = 0.9),
            void 0 === n && (n = 0.999),
            void 0 === r && (r = null),
            new Ql(t, e, n, r)
          );
        }),
        (t.adadelta = function (t, e, n) {
          return (
            void 0 === t && (t = 0.001),
            void 0 === e && (e = 0.95),
            void 0 === n && (n = null),
            new Xl(t, e, n)
          );
        }),
        (t.adamax = function (t, e, n, r, o) {
          return (
            void 0 === t && (t = 0.002),
            void 0 === e && (e = 0.9),
            void 0 === n && (n = 0.999),
            void 0 === r && (r = null),
            void 0 === o && (o = 0),
            new Jl(t, e, n, r, o)
          );
        }),
        (t.adagrad = function (t, e) {
          return void 0 === e && (e = 0.1), new Yl(t, e);
        }),
        t
      );
    })(),
    rh = {
      sgd: nh.sgd,
      momentum: nh.momentum,
      adadelta: nh.adadelta,
      adagrad: nh.adagrad,
      rmsprop: nh.rmsprop,
      adamax: nh.adamax,
      adam: nh.adam,
    },
    oh = jt.setBackend,
    ih = jt.getBackend,
    ah = jt.disposeVariables,
    sh = jt.memory;
  pt = Gc;
  var uh = Object.freeze({
      setBackend: oh,
      getBackend: ih,
      disposeVariables: ah,
      memory: sh,
      version_core: "1.0.3",
      nextFrame: function () {
        return new Promise(function (t) {
          return Hc(function () {
            return t();
          });
        });
      },
      enableProdMode: Kt,
      enableDebugMode: Xt,
      disableDeprecationWarnings: Yt,
      deprecationWarn: Qt,
      browser: Bl,
      environment: te,
      io: Ol,
      math: Fl,
      serialization: Gl,
      test_util: jl,
      util: t,
      webgl: $l,
      tensor_util: Pt,
      AdadeltaOptimizer: Xl,
      AdagradOptimizer: Yl,
      AdamOptimizer: Ql,
      AdamaxOptimizer: Jl,
      MomentumOptimizer: th,
      Optimizer: Kl,
      RMSPropOptimizer: eh,
      SGDOptimizer: Zl,
      Tensor: dt,
      TensorBuffer: lt,
      variable: Rt,
      Variable: vt,
      get Rank() {
        return mt;
      },
      get Reduction() {
        return mc;
      },
      ENV: Zt,
      Environment: jt,
      KernelBackend: on,
      DataStorage: rn,
      image: Wc,
      linalg: Dc,
      losses: kc,
      spectral: dc,
      fused: Uc,
      op: Fe,
      batchNormalization2d: os,
      batchNormalization3d: is,
      batchNormalization4d: as,
      batchNormalization: ss,
      batchNorm: us,
      batchNorm2d: cs,
      batchNorm3d: ls,
      batchNorm4d: hs,
      complex: We,
      real: ze,
      imag: Ue,
      concat: _i,
      concat1d: Si,
      concat2d: Ri,
      concat3d: Ni,
      concat4d: ki,
      split: Ii,
      conv1d: _s,
      conv2d: Ss,
      conv3d: Rs,
      conv2dDerFilter: Ns,
      depthwiseConv2d: ks,
      separableConv2d: Is,
      conv2dTranspose: Ts,
      matMul: As,
      dot: Ds,
      outerProduct: Ms,
      reverse: Os,
      reverse1d: Ps,
      reverse2d: Fs,
      reverse3d: Ls,
      reverse4d: Bs,
      maxPool: Us,
      avgPool: Gs,
      pool: Vs,
      slice: Hs,
      slice1d: qs,
      slice2d: js,
      slice3d: $s,
      slice4d: Ks,
      abs: ga,
      acos: ya,
      acosh: xa,
      asin: wa,
      asinh: ba,
      atan: Ea,
      atanh: Ca,
      ceil: _a,
      clipByValue: Sa,
      cos: Ra,
      cosh: Na,
      erf: ka,
      exp: Ia,
      expm1: Ta,
      floor: Aa,
      log: Da,
      log1p: Ma,
      logSigmoid: Oa,
      neg: Pa,
      reciprocal: Fa,
      round: La,
      rsqrt: Ba,
      sigmoid: Wa,
      sign: za,
      isNaN: Ua,
      isInf: Ga,
      isFinite: Va,
      sin: Ha,
      sinh: qa,
      softplus: ja,
      sqrt: $a,
      square: Ka,
      step: Xa,
      tan: Ya,
      tanh: Qa,
      all: Ys,
      any: Qs,
      argMax: Js,
      argMin: Zs,
      logSumExp: tu,
      max: eu,
      mean: nu,
      min: ru,
      moments: ou,
      sum: iu,
      prod: au,
      equal: su,
      equalStrict: uu,
      greater: cu,
      greaterEqual: lu,
      greaterEqualStrict: hu,
      greaterStrict: pu,
      less: fu,
      lessEqual: du,
      lessEqualStrict: vu,
      lessStrict: mu,
      notEqual: gu,
      notEqualStrict: yu,
      add: xu,
      addN: wu,
      addStrict: bu,
      atan2: Eu,
      div: Cu,
      divStrict: _u,
      floorDiv: Su,
      maximum: Ru,
      maximumStrict: Nu,
      minimum: ku,
      minimumStrict: Iu,
      mod: Tu,
      modStrict: Au,
      mul: Du,
      mulStrict: Mu,
      pow: Ou,
      powStrict: Pu,
      squaredDifference: Fu,
      squaredDifferenceStrict: Lu,
      sub: Bu,
      subStrict: Wu,
      elu: ju,
      leakyRelu: $u,
      prelu: Ku,
      relu: Xu,
      selu: Yu,
      logicalAnd: zu,
      logicalNot: Uu,
      logicalOr: Gu,
      logicalXor: Vu,
      where: Hu,
      whereAsync: qu,
      buffer: zi,
      print: Ui,
      batchToSpaceND: Gi,
      cast: Vi,
      clone: Hi,
      cumsum: qi,
      depthToSpace: ji,
      expandDims: $i,
      eye: Ki,
      multinomial: Xi,
      oneHot: Yi,
      pad: Qi,
      pad1d: Ji,
      pad2d: Zi,
      pad3d: ta,
      pad4d: ea,
      rand: na,
      randomNormal: ra,
      randomUniform: oa,
      reshape: ia,
      spaceToBatchND: aa,
      squeeze: sa,
      stack: ua,
      tile: ca,
      truncatedNormal: la,
      unstack: ha,
      setdiff1dAsync: pa,
      fill: Je,
      linspace: Ze,
      ones: Ye,
      range: tn,
      scalar: Ve,
      tensor: Ge,
      tensor1d: He,
      tensor2d: qe,
      tensor3d: je,
      tensor4d: $e,
      tensor5d: Ke,
      tensor6d: Xe,
      zeros: Qe,
      onesLike: en,
      zerosLike: nn,
      transpose: Qu,
      softmax: Le,
      logSoftmax: Be,
      localResponseNormalization: Ju,
      norm: Zu,
      gather: nc,
      unsortedSegmentSum: rc,
      basicLSTMCell: oc,
      multiRNNCell: ic,
      movingAverage: ac,
      stridedSlice: sc,
      topk: uc,
      scatterND: cc,
      fft: lc,
      ifft: hc,
      rfft: pc,
      irfft: fc,
      sparseToDense: vc,
      gatherND: yc,
      train: rh,
      tidy: ue,
      keep: ce,
      dispose: le,
      time: he,
      profile: pe,
      customGrad: ae,
      grad: function (i) {
        return (
          D(j(i), function () {
            return "The f passed in grad(f) must be a function";
          }),
          function (t, e) {
            var r = re(t, "x", "tf.grad", null),
              o = null != e ? re(e, "dy", "tf.grad") : null;
            return Zt.engine.tidy(function () {
              var t = Zt.engine.gradients(
                  function () {
                    return i(r);
                  },
                  [r],
                  o
                ),
                e = t.value,
                n = t.grads;
              return (
                null != o &&
                  g(
                    e.shape,
                    o.shape,
                    "The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"
                  ),
                se(n),
                n[0]
              );
            });
          }
        );
      },
      grads: function (i) {
        return (
          D(j(i), function () {
            return "The f passed in grads(f) must be a function";
          }),
          function (t, e) {
            D(Array.isArray(t), function () {
              return "The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s";
            });
            var r = oe(t, "args", "tf.grads", null),
              o = null != e ? re(e, "dy", "tf.grads") : null;
            return Zt.engine.tidy(function () {
              var t = Zt.engine.gradients(
                  function () {
                    return i.apply(void 0, r);
                  },
                  r,
                  o
                ),
                e = t.value,
                n = t.grads;
              return (
                null != o &&
                  g(
                    e.shape,
                    o.shape,
                    "The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"
                  ),
                se(n),
                n
              );
            });
          }
        );
      },
      valueAndGrad: function (i) {
        return (
          D(j(i), function () {
            return "The f passed in valueAndGrad(f) must be a function";
          }),
          function (t, e) {
            D(t instanceof dt, function () {
              return "The x passed in valueAndGrad(f)(x) must be a tensor";
            }),
              D(null == e || e instanceof dt, function () {
                return "The dy passed in valueAndGrad(f)(x, dy) must be a tensor";
              });
            var n = Zt.engine.gradients(
                function () {
                  return i(t);
                },
                [t],
                e
              ),
              r = n.grads,
              o = n.value;
            return se(r), { grad: r[0], value: o };
          }
        );
      },
      valueAndGrads: function (r) {
        return (
          D(j(r), function () {
            return "The f passed in valueAndGrads(f) must be a function";
          }),
          function (t, e) {
            D(
              Array.isArray(t) &&
                t.every(function (t) {
                  return t instanceof dt;
                }),
              function () {
                return "The args passed in valueAndGrads(f)(args) must be array of tensors";
              }
            ),
              D(null == e || e instanceof dt, function () {
                return "The dy passed in valueAndGrads(f)(args, dy) must be a tensor";
              });
            var n = Zt.engine.gradients(
              function () {
                return r.apply(void 0, t);
              },
              t,
              e
            );
            return (
              null != e &&
                g(
                  n.value.shape,
                  e.shape,
                  "The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"
                ),
              se(n.grads),
              n
            );
          }
        );
      },
      variableGrads: ie,
    }),
    ch = (function () {
      function t(t, e) {
        if (!Eh(t) || !Eh(e))
          throw new Error(
            "Dimensions.constructor - expected width and height to be valid numbers, instead have " +
              JSON.stringify({ width: t, height: e })
          );
        (this._width = t), (this._height = e);
      }
      return (
        Object.defineProperty(t.prototype, "width", {
          get: function () {
            return this._width;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "height", {
          get: function () {
            return this._height;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.reverse = function () {
          return new t(1 / this.width, 1 / this.height);
        }),
        t
      );
    })(),
    lh = (function () {
      function e(t, e) {
        (this._x = t), (this._y = e);
      }
      return (
        Object.defineProperty(e.prototype, "x", {
          get: function () {
            return this._x;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(e.prototype, "y", {
          get: function () {
            return this._y;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (e.prototype.add = function (t) {
          return new e(this.x + t.x, this.y + t.y);
        }),
        (e.prototype.sub = function (t) {
          return new e(this.x - t.x, this.y - t.y);
        }),
        (e.prototype.mul = function (t) {
          return new e(this.x * t.x, this.y * t.y);
        }),
        (e.prototype.div = function (t) {
          return new e(this.x / t.x, this.y / t.y);
        }),
        (e.prototype.abs = function () {
          return new e(Math.abs(this.x), Math.abs(this.y));
        }),
        (e.prototype.magnitude = function () {
          return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));
        }),
        (e.prototype.floor = function () {
          return new e(Math.floor(this.x), Math.floor(this.y));
        }),
        e
      );
    })();
  function hh(t, e) {
    return t instanceof dt && t.shape.length === e;
  }
  function ph(t) {
    return hh(t, 2);
  }
  function fh(t) {
    return hh(t, 3);
  }
  function dh(t) {
    return hh(t, 4);
  }
  function vh(t) {
    return t % 1 != 0;
  }
  function mh(t) {
    return t % 2 == 0;
  }
  function gh(t, e) {
    void 0 === e && (e = 2);
    var n = Math.pow(10, e);
    return Math.floor(t * n) / n;
  }
  function yh(t) {
    return t && t.width && t.height;
  }
  function xh(t, e) {
    var n = t.width,
      r = t.height,
      o = e / Math.max(r, n);
    return new ch(Math.round(n * o), Math.round(r * o));
  }
  function wh(t) {
    return t
      .reduce(function (t, e) {
        return t.add(e);
      }, new lh(0, 0))
      .div(new lh(t.length, t.length));
  }
  function bh(t, n, r) {
    return Array(t)
      .fill(0)
      .map(function (t, e) {
        return n + e * r;
      });
  }
  function Eh(t) {
    return (!!t && t !== 1 / 0 && t !== -1 / 0 && !isNaN(t)) || 0 === t;
  }
  function Ch(t) {
    return Eh(t) && 0 <= t && t <= 1;
  }
  var _h,
    Sh = (function () {
      function l(t, e) {
        void 0 === e && (e = !0);
        var n = t || {},
          r = [n.left, n.top, n.right, n.bottom].every(Eh),
          o = [n.x, n.y, n.width, n.height].every(Eh);
        if (!o && !r)
          throw new Error(
            "Box.constructor - expected box to be IBoundingBox | IRect, instead have " +
              JSON.stringify(n)
          );
        var i = o
            ? [n.x, n.y, n.width, n.height]
            : [n.left, n.top, n.right - n.left, n.bottom - n.top],
          a = i[0],
          s = i[1],
          u = i[2],
          c = i[3];
        l.assertIsValidBox(
          { x: a, y: s, width: u, height: c },
          "Box.constructor",
          e
        ),
          (this._x = a),
          (this._y = s),
          (this._width = u),
          (this._height = c);
      }
      return (
        (l.isRect = function (t) {
          return !!t && [t.x, t.y, t.width, t.height].every(Eh);
        }),
        (l.assertIsValidBox = function (t, e, n) {
          if ((void 0 === n && (n = !1), !l.isRect(t)))
            throw new Error(
              e +
                " - invalid box: " +
                JSON.stringify(t) +
                ", expected object with properties x, y, width, height"
            );
          if (!n && (t.width < 0 || t.height < 0))
            throw new Error(
              e +
                " - width (" +
                t.width +
                ") and height (" +
                t.height +
                ") must be positive numbers"
            );
        }),
        Object.defineProperty(l.prototype, "x", {
          get: function () {
            return this._x;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "y", {
          get: function () {
            return this._y;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "width", {
          get: function () {
            return this._width;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "height", {
          get: function () {
            return this._height;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "left", {
          get: function () {
            return this.x;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "top", {
          get: function () {
            return this.y;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "right", {
          get: function () {
            return this.x + this.width;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "bottom", {
          get: function () {
            return this.y + this.height;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "area", {
          get: function () {
            return this.width * this.height;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "topLeft", {
          get: function () {
            return new lh(this.left, this.top);
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "topRight", {
          get: function () {
            return new lh(this.right, this.top);
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "bottomLeft", {
          get: function () {
            return new lh(this.left, this.bottom);
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(l.prototype, "bottomRight", {
          get: function () {
            return new lh(this.right, this.bottom);
          },
          enumerable: !0,
          configurable: !0,
        }),
        (l.prototype.round = function () {
          var t = [this.x, this.y, this.width, this.height].map(function (t) {
            return Math.round(t);
          });
          return new l({ x: t[0], y: t[1], width: t[2], height: t[3] });
        }),
        (l.prototype.floor = function () {
          var t = [this.x, this.y, this.width, this.height].map(function (t) {
            return Math.floor(t);
          });
          return new l({ x: t[0], y: t[1], width: t[2], height: t[3] });
        }),
        (l.prototype.toSquare = function () {
          var t = this.x,
            e = this.y,
            n = this.width,
            r = this.height,
            o = Math.abs(n - r);
          return (
            n < r && ((t -= o / 2), (n += o)),
            r < n && ((e -= o / 2), (r += o)),
            new l({ x: t, y: e, width: n, height: r })
          );
        }),
        (l.prototype.rescale = function (t) {
          var e = yh(t) ? t.width : t,
            n = yh(t) ? t.height : t;
          return new l({
            x: this.x * e,
            y: this.y * n,
            width: this.width * e,
            height: this.height * n,
          });
        }),
        (l.prototype.pad = function (t, e) {
          var n = [
            this.x - t / 2,
            this.y - e / 2,
            this.width + t,
            this.height + e,
          ];
          return new l({ x: n[0], y: n[1], width: n[2], height: n[3] });
        }),
        (l.prototype.clipAtImageBorders = function (t, e) {
          var n = this.x,
            r = this.y,
            o = this.right,
            i = this.bottom,
            a = Math.max(n, 0),
            s = Math.max(r, 0),
            u = o - a,
            c = i - s;
          return new l({
            x: a,
            y: s,
            width: Math.min(u, t - a),
            height: Math.min(c, e - s),
          }).floor();
        }),
        (l.prototype.shift = function (t, e) {
          var n = this.width,
            r = this.height;
          return new l({ x: this.x + t, y: this.y + e, width: n, height: r });
        }),
        (l.prototype.padAtBorders = function (t, e) {
          var n = this.width + 1,
            r = this.height + 1,
            o = n,
            i = r,
            a = this.left,
            s = this.top,
            u = this.right,
            c = this.bottom;
          return (
            e < u && ((o = -u + e + n), (u = e)),
            t < c && ((i = -c + t + r), (c = t)),
            a < 1 && ((i = 2 - a), (a = 1)),
            s < 1 && ((i = 2 - s), (s = 1)),
            {
              dy: 1,
              edy: i,
              dx: 1,
              edx: o,
              y: s,
              ey: c,
              x: a,
              ex: u,
              w: n,
              h: r,
            }
          );
        }),
        (l.prototype.calibrate = function (t) {
          return new l({
            left: this.left + t.left * this.width,
            top: this.top + t.top * this.height,
            right: this.right + t.right * this.width,
            bottom: this.bottom + t.bottom * this.height,
          })
            .toSquare()
            .round();
        }),
        l
      );
    })(),
    Rh = (function (i) {
      function t(t, e, n, r, o) {
        return (
          void 0 === o && (o = !1),
          i.call(this, { left: t, top: e, right: n, bottom: r }, o) || this
        );
      }
      return a(t, i), t;
    })(Sh),
    Nh = (function (r) {
      function t(t, e) {
        var n = r.call(this, t) || this;
        return (n._label = e), n;
      }
      return (
        a(t, r),
        (t.assertIsValidLabeledBox = function (t, e) {
          if ((Sh.assertIsValidBox(t, e), !Eh(t.label)))
            throw new Error(
              e + " - expected property label (" + t.label + ") to be a number"
            );
        }),
        Object.defineProperty(t.prototype, "label", {
          get: function () {
            return this._label;
          },
          enumerable: !0,
          configurable: !0,
        }),
        t
      );
    })(Sh),
    kh = (function () {
      function n(t, e, n, r, o) {
        (this._imageDims = new ch(o.width, o.height)),
          (this._score = t),
          (this._classScore = e),
          (this._className = n),
          (this._box = new Sh(r).rescale(this._imageDims));
      }
      return (
        Object.defineProperty(n.prototype, "score", {
          get: function () {
            return this._score;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(n.prototype, "classScore", {
          get: function () {
            return this._classScore;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(n.prototype, "className", {
          get: function () {
            return this._className;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(n.prototype, "box", {
          get: function () {
            return this._box;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(n.prototype, "imageDims", {
          get: function () {
            return this._imageDims;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(n.prototype, "imageWidth", {
          get: function () {
            return this.imageDims.width;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(n.prototype, "imageHeight", {
          get: function () {
            return this.imageDims.height;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(n.prototype, "relativeBox", {
          get: function () {
            return new Sh(this._box).rescale(this.imageDims.reverse());
          },
          enumerable: !0,
          configurable: !0,
        }),
        (n.prototype.forSize = function (t, e) {
          return new n(
            this.score,
            this.classScore,
            this.className,
            this.relativeBox,
            { width: t, height: e }
          );
        }),
        n
      );
    })(),
    Ih = (function (i) {
      function t(t, e, n, r) {
        var o = i.call(this, t, e) || this;
        return (o._score = n), (o._classScore = r), o;
      }
      return (
        a(t, i),
        (t.assertIsValidPredictedBox = function (t, e) {
          if (
            (Nh.assertIsValidLabeledBox(t, e),
            !Ch(t.score) || !Ch(t.classScore))
          )
            throw new Error(
              e +
                " - expected properties score (" +
                t.score +
                ") and (" +
                t.classScore +
                ") to be a number between [0, 1]"
            );
        }),
        Object.defineProperty(t.prototype, "score", {
          get: function () {
            return this._score;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "classScore", {
          get: function () {
            return this._classScore;
          },
          enumerable: !0,
          configurable: !0,
        }),
        t
      );
    })(Nh),
    Th = (function (i) {
      function t(t, e, n, r, o) {
        return (
          void 0 === o && (o = !1),
          i.call(this, { x: t, y: e, width: n, height: r }, o) || this
        );
      }
      return a(t, i), t;
    })(Sh);
  function Ah() {
    var t =
      window.fetch ||
      function () {
        throw new Error(
          "fetch - missing fetch implementation for browser environment"
        );
      };
    return {
      Canvas: HTMLCanvasElement,
      CanvasRenderingContext2D: CanvasRenderingContext2D,
      Image: HTMLImageElement,
      ImageData: ImageData,
      Video: HTMLVideoElement,
      createCanvasElement: function () {
        return document.createElement("canvas");
      },
      createImageElement: function () {
        return document.createElement("img");
      },
      fetch: t,
      readFile: function () {
        throw new Error(
          "readFile - filesystem not available for browser environment"
        );
      },
    };
  }
  function Dh(e) {
    var n = "";
    if (!e)
      try {
        e = require("fs");
      } catch (t) {
        n = t.toString();
      }
    return {
      readFile: e
        ? function (t) {
            return new Promise(function (n, r) {
              e.readFile(t, function (t, e) {
                return t ? r(t) : n(e);
              });
            });
          }
        : function () {
            throw new Error(
              "readFile - failed to require fs in nodejs environment with error: " +
                n
            );
          },
    };
  }
  function Mh() {
    var t = global.Canvas || global.HTMLCanvasElement,
      e = global.Image || global.HTMLImageElement,
      n =
        global.fetch ||
        function () {
          throw new Error(
            "fetch - missing fetch implementation for nodejs environment"
          );
        },
      r = Dh();
    return O(
      {
        Canvas: t || function () {},
        CanvasRenderingContext2D:
          global.CanvasRenderingContext2D || function () {},
        Image: e || function () {},
        ImageData: global.ImageData || function () {},
        Video: global.HTMLVideoElement || function () {},
        createCanvasElement: function () {
          if (t) return new t();
          throw new Error(
            "createCanvasElement - missing Canvas implementation for nodejs environment"
          );
        },
        createImageElement: function () {
          if (e) return new e();
          throw new Error(
            "createImageElement - missing Image implementation for nodejs environment"
          );
        },
        fetch: n,
      },
      r
    );
  }
  function Oh() {
    return (
      "object" == typeof window &&
      "undefined" != typeof document &&
      "undefined" != typeof HTMLImageElement &&
      "undefined" != typeof HTMLCanvasElement &&
      "undefined" != typeof HTMLVideoElement &&
      "undefined" != typeof ImageData &&
      "undefined" != typeof CanvasRenderingContext2D
    );
  }
  function Ph() {
    return (
      "object" == typeof global &&
      "function" == typeof require &&
      "undefined" != typeof module &&
      "undefined" != typeof process &&
      !!process.version
    );
  }
  function Fh(t) {
    _h = t;
  }
  function Lh() {
    Oh() && Fh(Ah()), Ph() && Fh(Mh());
  }
  var Bh,
    Wh,
    zh = {
      getEnv: function () {
        if (!_h)
          throw new Error(
            "getEnv - environment is not defined, check isNodejs() and isBrowser()"
          );
        return _h;
      },
      setEnv: Fh,
      initialize: Lh,
      createBrowserEnv: Ah,
      createFileSystem: Dh,
      createNodejsEnv: Mh,
      monkeyPatch: function (t) {
        if ((_h || Lh(), !_h))
          throw new Error(
            "monkeyPatch - environment is not defined, check isNodejs() and isBrowser()"
          );
        var e = t.Canvas,
          n = void 0 === e ? _h.Canvas : e,
          r = t.Image,
          o = void 0 === r ? _h.Image : r;
        (_h.Canvas = n),
          (_h.Image = o),
          (_h.createCanvasElement =
            t.createCanvasElement ||
            function () {
              return new n();
            }),
          (_h.createImageElement =
            t.createImageElement ||
            function () {
              return new o();
            }),
          (_h.ImageData = t.ImageData || _h.ImageData),
          (_h.Video = t.Video || _h.Video),
          (_h.fetch = t.fetch || _h.fetch),
          (_h.readFile = t.readFile || _h.readFile);
      },
      isBrowser: Oh,
      isNodejs: Ph,
    };
  function Uh(t) {
    return zh.isNodejs() || "string" != typeof t
      ? t
      : document.getElementById(t);
  }
  function Gh(t) {
    var e = zh.getEnv(),
      n = e.Canvas;
    if (t instanceof e.CanvasRenderingContext2D) return t;
    var r = Uh(t);
    if (!(r instanceof n))
      throw new Error(
        "resolveContext2d - expected canvas to be of instance of Canvas"
      );
    var o = r.getContext("2d");
    if (!o) throw new Error("resolveContext2d - canvas 2d context is null");
    return o;
  }
  Lh(),
    ((Wh = Bh || (Bh = {})).TOP_LEFT = "TOP_LEFT"),
    (Wh.TOP_RIGHT = "TOP_RIGHT"),
    (Wh.BOTTOM_LEFT = "BOTTOM_LEFT"),
    (Wh.BOTTOM_RIGHT = "BOTTOM_RIGHT");
  var Vh = function (t) {
      void 0 === t && (t = {});
      var e = t.anchorPosition,
        n = t.backgroundColor,
        r = t.fontColor,
        o = t.fontSize,
        i = t.fontStyle,
        a = t.padding;
      (this.anchorPosition = e || Bh.TOP_LEFT),
        (this.backgroundColor = n || "rgba(0, 0, 0, 0.5)"),
        (this.fontColor = r || "rgba(255, 255, 255, 1)"),
        (this.fontSize = o || 14),
        (this.fontStyle = i || "Georgia"),
        (this.padding = a || 4);
    },
    Hh = (function () {
      function r(t, e, n) {
        void 0 === n && (n = {}),
          (this.text =
            "string" == typeof t ? [t] : t instanceof r ? t.text : t),
          (this.anchor = e),
          (this.options = new Vh(n));
      }
      return (
        (r.prototype.measureWidth = function (e) {
          var t = this.options.padding;
          return (
            this.text
              .map(function (t) {
                return e.measureText(t).width;
              })
              .reduce(function (t, e) {
                return t < e ? e : t;
              }, 0) +
            2 * t
          );
        }),
        (r.prototype.measureHeight = function () {
          var t = this.options,
            e = t.fontSize,
            n = t.padding;
          return this.text.length * e + 2 * n;
        }),
        (r.prototype.getUpperLeft = function (t, e) {
          var n = this.options.anchorPosition,
            r = n === Bh.BOTTOM_RIGHT || n === Bh.TOP_RIGHT,
            o = n === Bh.BOTTOM_LEFT || n === Bh.BOTTOM_RIGHT,
            i = this.measureWidth(t),
            a = this.measureHeight(),
            s = r ? this.anchor.x - i : this.anchor.x,
            u = o ? this.anchor.y - a : this.anchor.y;
          if (e) {
            var c = e.width,
              l = e.height;
            return {
              x: Math.max(Math.min(s, c - i), 0),
              y: Math.max(Math.min(u, l - a), 0),
            };
          }
          return { x: s, y: u };
        }),
        (r.prototype.draw = function (t) {
          var e = Uh(t),
            o = Gh(e),
            n = this.options,
            r = n.backgroundColor,
            i = n.fontColor,
            a = n.fontSize,
            s = n.fontStyle,
            u = n.padding;
          o.font = a + "px " + s;
          var c = this.measureWidth(o),
            l = this.measureHeight();
          o.fillStyle = r;
          var h = this.getUpperLeft(o, e);
          o.fillRect(h.x, h.y, c, l),
            (o.fillStyle = i),
            this.text.forEach(function (t, e) {
              var n = u + h.x,
                r = u + h.y + (e + 1) * a;
              o.fillText(t, n, r);
            });
        }),
        r
      );
    })(),
    qh = function (t) {
      void 0 === t && (t = {});
      var e = t.boxColor,
        n = t.lineWidth,
        r = t.label,
        o = t.drawLabelOptions;
      (this.boxColor = e || "rgba(0, 0, 255, 1)"),
        (this.lineWidth = n || 2),
        (this.label = r);
      var i = {
        anchorPosition: Bh.BOTTOM_LEFT,
        backgroundColor: this.boxColor,
      };
      this.drawLabelOptions = new Vh(Object.assign({}, i, o));
    },
    jh = (function () {
      function t(t, e) {
        void 0 === e && (e = {}),
          (this.box = new Sh(t)),
          (this.options = new qh(e));
      }
      return (
        (t.prototype.draw = function (t) {
          var e = Gh(t),
            n = this.options,
            r = n.boxColor,
            o = n.lineWidth,
            i = this.box,
            a = i.x,
            s = i.y,
            u = i.width,
            c = i.height;
          (e.strokeStyle = r), (e.lineWidth = o), e.strokeRect(a, s, u, c);
          var l = this.options.label;
          l &&
            new Hh(
              [l],
              { x: a - o / 2, y: s },
              this.options.drawLabelOptions
            ).draw(t);
        }),
        t
      );
    })(),
    $h = Object.freeze({
      DrawBoxOptions: qh,
      DrawBox: jh,
      get AnchorPosition() {
        return Bh;
      },
      DrawTextFieldOptions: Vh,
      DrawTextField: Hh,
    });
  function Kh(e, n, r, o) {
    return (
      void 0 === r && (r = "same"),
      void 0 === o && (o = !1),
      ue(function () {
        var t = xu(Ss(e, n.filters, [1, 1], r), n.bias);
        return o ? Xu(t) : t;
      })
    );
  }
  function Xh(t, n) {
    Object.keys(t).forEach(function (e) {
      n.some(function (t) {
        return t.originalPath === e;
      }) || t[e].dispose();
    });
  }
  function Yh(a, s) {
    return function (t, e, n, r) {
      var o = $e(a(t * e * n * n), [n, n, t, e]),
        i = He(a(e));
      return (
        s.push({ paramPath: r + "/filters" }, { paramPath: r + "/bias" }),
        { filters: o, bias: i }
      );
    };
  }
  function Qh(i, a) {
    return function (t, e, n) {
      var r = qe(i(t * e), [t, e]),
        o = He(i(e));
      return (
        a.push({ paramPath: n + "/weights" }, { paramPath: n + "/bias" }),
        { weights: r, bias: o }
      );
    };
  }
  var Jh = function (t, e, n) {
    (this.depthwise_filter = t), (this.pointwise_filter = e), (this.bias = n);
  };
  function Zh(a, s) {
    return function (t, e, n) {
      var r = $e(a(9 * t), [3, 3, t, 1]),
        o = $e(a(t * e), [1, 1, t, e]),
        i = He(a(e));
      return (
        s.push(
          { paramPath: n + "/depthwise_filter" },
          { paramPath: n + "/pointwise_filter" },
          { paramPath: n + "/bias" }
        ),
        new Jh(r, o, i)
      );
    };
  }
  function tp(o) {
    return function (t) {
      var e = o(t + "/depthwise_filter", 4),
        n = o(t + "/pointwise_filter", 4),
        r = o(t + "/bias", 1);
      return new Jh(e, n, r);
    };
  }
  function ep(o, i) {
    return function (t, e, n) {
      var r = o[t];
      if (!hh(r, e))
        throw new Error(
          "expected weightMap[" +
            t +
            "] to be a Tensor" +
            e +
            "D, instead have " +
            r
        );
      return i.push({ originalPath: t, paramPath: n || t }), r;
    };
  }
  function np(t) {
    var n = t;
    return {
      extractWeights: function (t) {
        var e = n.slice(0, t);
        return (n = n.slice(t)), e;
      },
      getRemainingWeights: function () {
        return n;
      },
    };
  }
  function rp(t, e) {
    var n = e + "-weights_manifest.json";
    if (!t) return { modelBaseUri: "", manifestUri: n };
    if ("/" === t) return { modelBaseUri: "/", manifestUri: "/" + n };
    var r = t.startsWith("http://")
        ? "http://"
        : t.startsWith("https://")
        ? "https://"
        : "",
      o = (t = t.replace(r, "")).split("/").filter(function (t) {
        return t;
      }),
      i = t.endsWith(".json") ? o[o.length - 1] : n,
      a = r + (t.endsWith(".json") ? o.slice(0, o.length - 1) : o).join("/");
    return {
      modelBaseUri: (a = t.startsWith("/") ? "/" + a : a),
      manifestUri: "/" === a ? "/" + i : a + "/" + i,
    };
  }
  function op(t) {
    var e = zh.getEnv(),
      n = e.Image,
      r = e.Video;
    return (
      (t instanceof n && t.complete) || (t instanceof r && 3 <= t.readyState)
    );
  }
  function ip(t) {
    return new Promise(function (e, n) {
      if (t instanceof zh.getEnv().Canvas || op(t)) return e();
      function r(t) {
        t.currentTarget &&
          (t.currentTarget.removeEventListener("load", r),
          t.currentTarget.removeEventListener("error", o),
          e(t));
      }
      function o(t) {
        t.currentTarget &&
          (t.currentTarget.removeEventListener("load", r),
          t.currentTarget.removeEventListener("error", o),
          n(t));
      }
      t.addEventListener("load", r), t.addEventListener("error", o);
    });
  }
  function ap(t) {
    return new Promise(function (e, n) {
      if (!(t instanceof Blob))
        return n("bufferToImage - expected buf to be of type: Blob");
      var r = new FileReader();
      (r.onload = function () {
        if ("string" != typeof r.result)
          return n(
            "bufferToImage - expected reader.result to be a string, in onload"
          );
        var t = zh.getEnv().createImageElement();
        (t.onload = function () {
          return e(t);
        }),
          (t.onerror = n),
          (t.src = r.result);
      }),
        (r.onerror = n),
        r.readAsDataURL(t);
    });
  }
  function sp(t) {
    var e = zh.getEnv(),
      n = e.Image,
      r = e.Video;
    return t instanceof n
      ? new ch(t.naturalWidth, t.naturalHeight)
      : t instanceof r
      ? new ch(t.videoWidth, t.videoHeight)
      : new ch(t.width, t.height);
  }
  function up(t) {
    var e = t.width,
      n = t.height,
      r = (0, zh.getEnv().createCanvasElement)();
    return (r.width = e), (r.height = n), r;
  }
  function cp(t, e) {
    var n = zh.getEnv().ImageData;
    if (!(t instanceof n || op(t)))
      throw new Error(
        "createCanvasFromMedia - media has not finished loading yet"
      );
    var r = e || sp(t),
      o = r.width,
      i = r.height,
      a = up({ width: o, height: i });
    return (
      t instanceof n
        ? Gh(a).putImageData(t, 0, 0)
        : Gh(a).drawImage(t, 0, 0, o, i),
      a
    );
  }
  function lp(n, r) {
    return p(this, void 0, void 0, function () {
      var e;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return [4, (0, zh.getEnv().fetch)(n, r)];
          case 1:
            if (!((e = t.sent()).status < 400))
              throw new Error(
                "failed to fetch: (" +
                  e.status +
                  ") " +
                  e.statusText +
                  ", from url: " +
                  e.url
              );
            return [2, e];
        }
      });
    });
  }
  function hp(e) {
    return p(this, void 0, void 0, function () {
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return [4, lp(e)];
          case 1:
            return [2, t.sent().json()];
        }
      });
    });
  }
  function pp(s, u) {
    return p(this, void 0, void 0, function () {
      var e, n, r, o, i, a;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return (
              (e = u || zh.getEnv().createCanvasElement()),
              (n = s.shape.slice(dh(s) ? 1 : 0)),
              (r = n[0]),
              (o = n[1]),
              (i = n[2]),
              (a = ue(function () {
                return s.as3D(r, o, i).toInt();
              })),
              [4, Bl.toPixels(a, e)]
            );
          case 1:
            return t.sent(), a.dispose(), [2, e];
        }
      });
    });
  }
  function fp(t, e, n) {
    void 0 === n && (n = !1);
    var r = zh.getEnv(),
      o = r.Image,
      i = r.Canvas;
    if (!(t instanceof o || t instanceof i))
      throw new Error(
        "imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement"
      );
    var a = sp(t),
      s = e / Math.max(a.height, a.width),
      u = s * a.width,
      c = s * a.height,
      l = up({ width: e, height: e }),
      h = t instanceof i ? t : cp(t),
      p = Math.abs(u - c) / 2,
      f = n && u < c ? p : 0,
      d = n && c < u ? p : 0;
    return Gh(l).drawImage(h, f, d, u, c), l;
  }
  function dp(t) {
    var e = zh.getEnv(),
      n = e.Image,
      r = e.Canvas,
      o = e.Video;
    return t instanceof n || t instanceof r || t instanceof o;
  }
  function vp(i, a) {
    return p(this, void 0, void 0, function () {
      var e, n, r, o;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return (
              (e = rp(i, a)),
              (n = e.manifestUri),
              (r = e.modelBaseUri),
              [4, hp(n)]
            );
          case 1:
            return (o = t.sent()), [2, Ol.loadWeights(o, r)];
        }
      });
    });
  }
  function mp(l, h) {
    return (
      void 0 === h && (h = !1),
      ue(function () {
        var t = l.shape.slice(1),
          e = t[0],
          n = t[1];
        if (e === n) return l;
        var r = Math.abs(e - n),
          o = Math.round(r * (h ? 0.5 : 1)),
          i = n < e ? 2 : 1,
          a = function (t) {
            var e = l.shape.slice();
            return (e[i] = t), Je(e, 0);
          },
          s = a(o),
          u = r - s.shape[i],
          c = [h && u ? a(u) : null, l, s]
            .filter(function (t) {
              return !!t;
            })
            .map(function (t) {
              return t.toFloat();
            });
        return _i(c, i);
      })
    );
  }
  var gp = (function () {
    function t(t, e) {
      void 0 === e && (e = !1);
      var o = this;
      if (
        ((this._imageTensors = []),
        (this._canvases = []),
        (this._treatAsBatchInput = !1),
        (this._inputDimensions = []),
        !Array.isArray(t))
      )
        throw new Error(
          "NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have " +
            t
        );
      (this._treatAsBatchInput = e),
        (this._batchSize = t.length),
        t.forEach(function (t, e) {
          if (fh(t))
            return (
              (o._imageTensors[e] = t), void (o._inputDimensions[e] = t.shape)
            );
          if (dh(t)) {
            var n = t.shape[0];
            if (1 !== n)
              throw new Error(
                "NetInput - tf.Tensor4D with batchSize " +
                  n +
                  " passed, but not supported in input array"
              );
            return (
              (o._imageTensors[e] = t),
              void (o._inputDimensions[e] = t.shape.slice(1))
            );
          }
          var r = t instanceof zh.getEnv().Canvas ? t : cp(t);
          (o._canvases[e] = r),
            (o._inputDimensions[e] = [r.height, r.width, 3]);
        });
    }
    return (
      Object.defineProperty(t.prototype, "imageTensors", {
        get: function () {
          return this._imageTensors;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "canvases", {
        get: function () {
          return this._canvases;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "isBatchInput", {
        get: function () {
          return 1 < this.batchSize || this._treatAsBatchInput;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "batchSize", {
        get: function () {
          return this._batchSize;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "inputDimensions", {
        get: function () {
          return this._inputDimensions;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "inputSize", {
        get: function () {
          return this._inputSize;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "reshapedInputDimensions", {
        get: function () {
          var n = this;
          return bh(this.batchSize, 0, 1).map(function (t, e) {
            return n.getReshapedInputDimensions(e);
          });
        },
        enumerable: !0,
        configurable: !0,
      }),
      (t.prototype.getInput = function (t) {
        return this.canvases[t] || this.imageTensors[t];
      }),
      (t.prototype.getInputDimensions = function (t) {
        return this._inputDimensions[t];
      }),
      (t.prototype.getInputHeight = function (t) {
        return this._inputDimensions[t][0];
      }),
      (t.prototype.getInputWidth = function (t) {
        return this._inputDimensions[t][1];
      }),
      (t.prototype.getReshapedInputDimensions = function (t) {
        if ("number" != typeof this.inputSize)
          throw new Error(
            "getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet"
          );
        return xh(
          { width: this.getInputWidth(t), height: this.getInputHeight(t) },
          this.inputSize
        );
      }),
      (t.prototype.toBatchTensor = function (r, o) {
        var i = this;
        return (
          void 0 === o && (o = !0),
          (this._inputSize = r),
          ue(function () {
            var t = bh(i.batchSize, 0, 1).map(function (t) {
              var e = i.getInput(t);
              if (e instanceof dt) {
                var n = dh(e) ? e : e.expandDims();
                return (
                  ((n = mp(n, o)).shape[1] === r && n.shape[2] === r) ||
                    (n = Wc.resizeBilinear(n, [r, r])),
                  n.as3D(r, r, 3)
                );
              }
              if (e instanceof zh.getEnv().Canvas)
                return Bl.fromPixels(fp(e, r, o));
              throw new Error(
                "toBatchTensor - at batchIdx " +
                  t +
                  ", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have " +
                  e
              );
            });
            return ua(
              t.map(function (t) {
                return t.toFloat();
              })
            ).as4D(i.batchSize, r, r, 3);
          })
        );
      }),
      t
    );
  })();
  function yp(n) {
    return p(this, void 0, void 0, function () {
      var r, o, e;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            if (n instanceof gp) return [2, n];
            if (!(r = Array.isArray(n) ? n : [n]).length)
              throw new Error("toNetInput - empty array passed as input");
            return (
              (o = function (t) {
                return Array.isArray(n) ? " at input index " + t + ":" : "";
              }),
              (e = r.map(Uh)).forEach(function (t, e) {
                if (!dp(t) && !fh(t) && !dh(t)) {
                  if ("string" == typeof r[e])
                    throw new Error(
                      "toNetInput -" +
                        o(e) +
                        " string passed, but could not resolve HTMLElement for element id " +
                        r[e]
                    );
                  throw new Error(
                    "toNetInput -" +
                      o(e) +
                      " expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id"
                  );
                }
                if (dh(t)) {
                  var n = t.shape[0];
                  if (1 !== n)
                    throw new Error(
                      "toNetInput -" +
                        o(e) +
                        " tf.Tensor4D with batchSize " +
                        n +
                        " passed, but not supported in input array"
                    );
                }
              }),
              [
                4,
                Promise.all(
                  e.map(function (t) {
                    return dp(t) && ip(t);
                  })
                ),
              ]
            );
          case 1:
            return t.sent(), [2, new gp(e, Array.isArray(n))];
        }
      });
    });
  }
  var xp = (function () {
    function t(t) {
      (this._name = t), (this._params = void 0), (this._paramMappings = []);
    }
    return (
      Object.defineProperty(t.prototype, "params", {
        get: function () {
          return this._params;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "paramMappings", {
        get: function () {
          return this._paramMappings;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "isLoaded", {
        get: function () {
          return !!this.params;
        },
        enumerable: !0,
        configurable: !0,
      }),
      (t.prototype.getParamFromPath = function (t) {
        var e = this.traversePropertyPath(t);
        return e.obj[e.objProp];
      }),
      (t.prototype.reassignParamFromPath = function (t, e) {
        var n = this.traversePropertyPath(t),
          r = n.obj,
          o = n.objProp;
        r[o].dispose(), (r[o] = e);
      }),
      (t.prototype.getParamList = function () {
        var n = this;
        return this._paramMappings.map(function (t) {
          var e = t.paramPath;
          return { path: e, tensor: n.getParamFromPath(e) };
        });
      }),
      (t.prototype.getTrainableParams = function () {
        return this.getParamList().filter(function (t) {
          return t.tensor instanceof vt;
        });
      }),
      (t.prototype.getFrozenParams = function () {
        return this.getParamList().filter(function (t) {
          return !(t.tensor instanceof vt);
        });
      }),
      (t.prototype.variable = function () {
        var r = this;
        this.getFrozenParams().forEach(function (t) {
          var e = t.path,
            n = t.tensor;
          r.reassignParamFromPath(e, n.variable());
        });
      }),
      (t.prototype.freeze = function () {
        var o = this;
        this.getTrainableParams().forEach(function (t) {
          var e = t.path,
            n = t.tensor,
            r = Ge(n.dataSync());
          n.dispose(), o.reassignParamFromPath(e, r);
        });
      }),
      (t.prototype.dispose = function (e) {
        void 0 === e && (e = !0),
          this.getParamList().forEach(function (t) {
            if (e && t.tensor.isDisposed)
              throw new Error(
                "param tensor has already been disposed for path " + t.path
              );
            t.tensor.dispose();
          }),
          (this._params = void 0);
      }),
      (t.prototype.serializeParams = function () {
        return new Float32Array(
          this.getParamList()
            .map(function (t) {
              var e = t.tensor;
              return Array.from(e.dataSync());
            })
            .reduce(function (t, e) {
              return t.concat(e);
            })
        );
      }),
      (t.prototype.load = function (e) {
        return p(this, void 0, void 0, function () {
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                return e instanceof Float32Array
                  ? (this.extractWeights(e), [2])
                  : [4, this.loadFromUri(e)];
              case 1:
                return t.sent(), [2];
            }
          });
        });
      }),
      (t.prototype.loadFromUri = function (n) {
        return p(this, void 0, void 0, function () {
          var e;
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                if (n && "string" != typeof n)
                  throw new Error(
                    this._name + ".loadFromUri - expected model uri"
                  );
                return [4, vp(n, this.getDefaultModelName())];
              case 1:
                return (e = t.sent()), this.loadFromWeightMap(e), [2];
            }
          });
        });
      }),
      (t.prototype.loadFromDisk = function (h) {
        return p(this, void 0, void 0, function () {
          var e, n, r, o, i, a, s, u, c, l;
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                if (h && "string" != typeof h)
                  throw new Error(
                    this._name + ".loadFromDisk - expected model file path"
                  );
                return (
                  (e = zh.getEnv().readFile),
                  (n = rp(h, this.getDefaultModelName())),
                  (r = n.manifestUri),
                  (o = n.modelBaseUri),
                  (i = function (t) {
                    return Promise.all(
                      t.map(function (t) {
                        return e(t).then(function (t) {
                          return t.buffer;
                        });
                      })
                    );
                  }),
                  (a = Ol.weightsLoaderFactory(i)),
                  (c = (u = JSON).parse),
                  [4, e(r)]
                );
              case 1:
                return (s = c.apply(u, [t.sent().toString()])), [4, a(s, o)];
              case 2:
                return (l = t.sent()), this.loadFromWeightMap(l), [2];
            }
          });
        });
      }),
      (t.prototype.loadFromWeightMap = function (t) {
        var e = this.extractParamsFromWeigthMap(t),
          n = e.paramMappings,
          r = e.params;
        (this._paramMappings = n), (this._params = r);
      }),
      (t.prototype.extractWeights = function (t) {
        var e = this.extractParams(t),
          n = e.paramMappings,
          r = e.params;
        (this._paramMappings = n), (this._params = r);
      }),
      (t.prototype.traversePropertyPath = function (n) {
        if (!this.params)
          throw new Error("traversePropertyPath - model has no loaded params");
        var t = n.split("/").reduce(
            function (t, e) {
              if (!t.nextObj.hasOwnProperty(e))
                throw new Error(
                  "traversePropertyPath - object does not have property " +
                    e +
                    ", for path " +
                    n
                );
              return { obj: t.nextObj, objProp: e, nextObj: t.nextObj[e] };
            },
            { nextObj: this.params }
          ),
          e = t.obj,
          r = t.objProp;
        if (!(e && r && e[r] instanceof dt))
          throw new Error(
            "traversePropertyPath - parameter is not a tensor, for path " + n
          );
        return { obj: e, objProp: r };
      }),
      t
    );
  })();
  function wp(t, e, n) {
    void 0 === n && (n = !0);
    var r =
      Math.max(0, Math.min(t.right, e.right) - Math.max(t.left, e.left)) *
      Math.max(0, Math.min(t.bottom, e.bottom) - Math.max(t.top, e.top));
    return n ? r / (t.area + e.area - r) : r / Math.min(t.area, e.area);
  }
  function bp(s, t, u, c) {
    void 0 === c && (c = !0);
    for (
      var l = t
          .map(function (t, e) {
            return { score: t, boxIndex: e };
          })
          .sort(function (t, e) {
            return t.score - e.score;
          })
          .map(function (t) {
            return t.boxIndex;
          }),
        h = [],
        e = function () {
          var t = l.pop();
          h.push(t);
          for (var e = l, n = [], r = 0; r < e.length; r++) {
            var o = e[r],
              i = s[t],
              a = s[o];
            n.push(wp(i, a, c));
          }
          l = l.filter(function (t, e) {
            return n[e] <= u;
          });
        };
      0 < l.length;

    )
      e();
    return h;
  }
  function Ep(s, u) {
    return ue(function () {
      var t = u[0],
        e = u[1],
        n = u[2],
        r = Je(s.shape.slice(0, 3).concat([1]), t),
        o = Je(s.shape.slice(0, 3).concat([1]), e),
        i = Je(s.shape.slice(0, 3).concat([1]), n),
        a = _i([r, o, i], 3);
      return Bu(s, a);
    });
  }
  function Cp(t) {
    return 1 / (1 + Math.exp(-t));
  }
  var _p,
    Sp,
    Rp = function (t) {
      return "number" == typeof t;
    };
  function Np(t) {
    if (!t) throw new Error("invalid config: " + t);
    if ("boolean" != typeof t.withSeparableConvs)
      throw new Error(
        "config.withSeparableConvs has to be a boolean, have: " +
          t.withSeparableConvs
      );
    if (!Rp(t.iouThreshold) || t.iouThreshold < 0 || 1 < t.iouThreshold)
      throw new Error(
        "config.iouThreshold has to be a number between [0, 1], have: " +
          t.iouThreshold
      );
    if (
      !Array.isArray(t.classes) ||
      !t.classes.length ||
      !t.classes.every(function (t) {
        return "string" == typeof t;
      })
    )
      throw new Error(
        "config.classes has to be an array class names: string[], have: " +
          JSON.stringify(t.classes)
      );
    if (
      !Array.isArray(t.anchors) ||
      !t.anchors.length ||
      !t.anchors
        .map(function (t) {
          return t || {};
        })
        .every(function (t) {
          return Rp(t.x) && Rp(t.y);
        })
    )
      throw new Error(
        "config.anchors has to be an array of { x: number, y: number }, have: " +
          JSON.stringify(t.anchors)
      );
    if (
      t.meanRgb &&
      (!Array.isArray(t.meanRgb) ||
        3 !== t.meanRgb.length ||
        !t.meanRgb.every(Rp))
    )
      throw new Error(
        "config.meanRgb has to be an array of shape [number, number, number], have: " +
          JSON.stringify(t.meanRgb)
      );
  }
  function kp(e) {
    return ue(function () {
      var t = Du(e, Ve(0.10000000149011612));
      return xu(Xu(Bu(e, t)), t);
    });
  }
  function Ip(e, n) {
    return ue(function () {
      var t = Qi(e, [
        [0, 0],
        [1, 1],
        [1, 1],
        [0, 0],
      ]);
      return (
        (t = Ss(t, n.conv.filters, [1, 1], "valid")),
        (t = Bu(t, n.bn.sub)),
        (t = Du(t, n.bn.truediv)),
        kp((t = xu(t, n.conv.bias)))
      );
    });
  }
  function Tp(e, n) {
    return ue(function () {
      var t = Qi(e, [
        [0, 0],
        [1, 1],
        [1, 1],
        [0, 0],
      ]);
      return (
        (t = Is(t, n.depthwise_filter, n.pointwise_filter, [1, 1], "valid")),
        kp((t = xu(t, n.bias)))
      );
    });
  }
  function Ap(s, u) {
    var c = Yh(s, u);
    var t = Zh(s, u);
    return {
      extractConvParams: c,
      extractConvWithBatchNormParams: function (t, e, n) {
        var r, o, i, a;
        return {
          conv: c(t, e, 3, n + "/conv"),
          bn:
            ((o = n + "/bn"),
            (i = He(s((r = e)))),
            (a = He(s(r))),
            u.push({ paramPath: o + "/sub" }, { paramPath: o + "/truediv" }),
            { sub: i, truediv: a }),
        };
      },
      extractSeparableConvParams: t,
    };
  }
  function Dp(t, e) {
    var n = ep(t, e);
    function r(t) {
      return { filters: n(t + "/filters", 4), bias: n(t + "/bias", 1) };
    }
    return {
      extractConvParams: r,
      extractConvWithBatchNormParams: function (t) {
        var e;
        return {
          conv: r(t + "/conv"),
          bn: {
            sub: n((e = t + "/bn") + "/sub", 1),
            truediv: n(e + "/truediv", 1),
          },
        };
      },
      extractSeparableConvParams: tp(n),
    };
  }
  ((Sp = _p || (_p = {}))[(Sp.XS = 224)] = "XS"),
    (Sp[(Sp.SM = 320)] = "SM"),
    (Sp[(Sp.MD = 416)] = "MD"),
    (Sp[(Sp.LG = 608)] = "LG");
  var Mp = (function () {
      function t(t) {
        var e = void 0 === t ? {} : t,
          n = e.inputSize,
          r = e.scoreThreshold;
        if (
          ((this._name = "TinyYolov2Options"),
          (this._inputSize = n || 416),
          (this._scoreThreshold = r || 0.5),
          "number" != typeof this._inputSize || this._inputSize % 32 != 0)
        )
          throw new Error(
            this._name + " - expected inputSize to be a number divisible by 32"
          );
        if (
          "number" != typeof this._scoreThreshold ||
          this._scoreThreshold <= 0 ||
          1 <= this._scoreThreshold
        )
          throw new Error(
            this._name +
              " - expected scoreThreshold to be a number between 0 and 1"
          );
      }
      return (
        Object.defineProperty(t.prototype, "inputSize", {
          get: function () {
            return this._inputSize;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "scoreThreshold", {
          get: function () {
            return this._scoreThreshold;
          },
          enumerable: !0,
          configurable: !0,
        }),
        t
      );
    })(),
    Op = (function (n) {
      function r(t) {
        var e = n.call(this, "TinyYolov2") || this;
        return Np(t), (e._config = t), e;
      }
      return (
        a(r, n),
        Object.defineProperty(r.prototype, "config", {
          get: function () {
            return this._config;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(r.prototype, "withClassScores", {
          get: function () {
            return (
              this.config.withClassScores || 1 < this.config.classes.length
            );
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(r.prototype, "boxEncodingSize", {
          get: function () {
            return 5 + (this.withClassScores ? this.config.classes.length : 0);
          },
          enumerable: !0,
          configurable: !0,
        }),
        (r.prototype.runTinyYolov2 = function (t, e) {
          var n = Ip(t, e.conv0);
          return (
            (n = Ip((n = Us(n, [2, 2], [2, 2], "same")), e.conv1)),
            (n = Ip((n = Us(n, [2, 2], [2, 2], "same")), e.conv2)),
            (n = Ip((n = Us(n, [2, 2], [2, 2], "same")), e.conv3)),
            (n = Ip((n = Us(n, [2, 2], [2, 2], "same")), e.conv4)),
            (n = Ip((n = Us(n, [2, 2], [2, 2], "same")), e.conv5)),
            Kh(
              (n = Ip(
                (n = Ip((n = Us(n, [2, 2], [1, 1], "same")), e.conv6)),
                e.conv7
              )),
              e.conv8,
              "valid",
              !1
            )
          );
        }),
        (r.prototype.runMobilenet = function (t, e) {
          var n = this.config.isFirstLayerConv2d
            ? kp(Kh(t, e.conv0, "valid", !1))
            : Tp(t, e.conv0);
          return (
            (n = Tp((n = Us(n, [2, 2], [2, 2], "same")), e.conv1)),
            (n = Tp((n = Us(n, [2, 2], [2, 2], "same")), e.conv2)),
            (n = Tp((n = Us(n, [2, 2], [2, 2], "same")), e.conv3)),
            (n = Tp((n = Us(n, [2, 2], [2, 2], "same")), e.conv4)),
            (n = Tp((n = Us(n, [2, 2], [2, 2], "same")), e.conv5)),
            (n = Us(n, [2, 2], [1, 1], "same")),
            (n = e.conv6 ? Tp(n, e.conv6) : n),
            Kh((n = e.conv7 ? Tp(n, e.conv7) : n), e.conv8, "valid", !1)
          );
        }),
        (r.prototype.forwardInput = function (e, n) {
          var r = this,
            o = this.params;
          if (!o) throw new Error("TinyYolov2 - load model before inference");
          return ue(function () {
            var t = e.toBatchTensor(n, !1).toFloat();
            return (
              (t = (t = r.config.meanRgb ? Ep(t, r.config.meanRgb) : t).div(
                Ve(256)
              )),
              r.config.withSeparableConvs
                ? r.runMobilenet(t, o)
                : r.runTinyYolov2(t, o)
            );
          });
        }),
        (r.prototype.forward = function (n, r) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = this.forwardInput), [4, yp(n)];
                case 1:
                  return [4, e.apply(this, [t.sent(), r])];
                case 2:
                  return [2, t.sent()];
              }
            });
          });
        }),
        (r.prototype.detect = function (v, m) {
          return (
            void 0 === m && (m = {}),
            p(this, void 0, void 0, function () {
              var e,
                n,
                r,
                o,
                i,
                a,
                s,
                u,
                c,
                l,
                h,
                p,
                f,
                d = this;
              return P(this, function (t) {
                switch (t.label) {
                  case 0:
                    return (
                      (e = new Mp(m)),
                      (n = e.inputSize),
                      (r = e.scoreThreshold),
                      [4, yp(v)]
                    );
                  case 1:
                    return (o = t.sent()), [4, this.forwardInput(o, n)];
                  case 2:
                    return (
                      (i = t.sent()),
                      (a = ue(function () {
                        return ha(i)[0].expandDims();
                      })),
                      (s = {
                        width: o.getInputWidth(0),
                        height: o.getInputHeight(0),
                      }),
                      [
                        4,
                        this.extractBoxes(
                          a,
                          o.getReshapedInputDimensions(0),
                          r
                        ),
                      ]
                    );
                  case 3:
                    return (
                      (u = t.sent()),
                      i.dispose(),
                      a.dispose(),
                      (c = u.map(function (t) {
                        return t.box;
                      })),
                      (l = u.map(function (t) {
                        return t.score;
                      })),
                      (h = u.map(function (t) {
                        return t.classScore;
                      })),
                      (p = u.map(function (t) {
                        return d.config.classes[t.label];
                      })),
                      (f = bp(
                        c.map(function (t) {
                          return t.rescale(n);
                        }),
                        l,
                        this.config.iouThreshold,
                        !0
                      )),
                      [
                        2,
                        f.map(function (t) {
                          return new kh(l[t], h[t], p[t], c[t], s);
                        }),
                      ]
                    );
                }
              });
            })
          );
        }),
        (r.prototype.getDefaultModelName = function () {
          return "";
        }),
        (r.prototype.extractParamsFromWeigthMap = function (t) {
          return (function (t, e) {
            var n,
              r = [],
              o = Dp(t, r),
              i = o.extractConvParams,
              a = o.extractConvWithBatchNormParams,
              s = o.extractSeparableConvParams;
            if (e.withSeparableConvs) {
              var u = (e.filterSizes && e.filterSizes.length) || 9;
              n = {
                conv0: e.isFirstLayerConv2d ? i("conv0") : s("conv0"),
                conv1: s("conv1"),
                conv2: s("conv2"),
                conv3: s("conv3"),
                conv4: s("conv4"),
                conv5: s("conv5"),
                conv6: 7 < u ? s("conv6") : void 0,
                conv7: 8 < u ? s("conv7") : void 0,
                conv8: i("conv8"),
              };
            } else
              n = {
                conv0: a("conv0"),
                conv1: a("conv1"),
                conv2: a("conv2"),
                conv3: a("conv3"),
                conv4: a("conv4"),
                conv5: a("conv5"),
                conv6: a("conv6"),
                conv7: a("conv7"),
                conv8: i("conv8"),
              };
            return Xh(t, r), { params: n, paramMappings: r };
          })(t, this.config);
        }),
        (r.prototype.extractParams = function (t) {
          var e = this.config.filterSizes || r.DEFAULT_FILTER_SIZES,
            n = e ? e.length : void 0;
          if (7 !== n && 8 !== n && 9 !== n)
            throw new Error(
              "TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found " +
                n +
                " filterSizes in config"
            );
          return (function (t, e, n, r) {
            var o,
              i = np(t),
              a = i.extractWeights,
              s = i.getRemainingWeights,
              u = [],
              c = Ap(a, u),
              l = c.extractConvParams,
              h = c.extractConvWithBatchNormParams,
              p = c.extractSeparableConvParams;
            if (e.withSeparableConvs) {
              var f = r[0],
                d = r[1],
                v = r[2],
                m = r[3],
                g = r[4],
                y = r[5],
                x = r[6],
                w = r[7],
                b = r[8];
              o = {
                conv0: e.isFirstLayerConv2d
                  ? l(f, d, 3, "conv0")
                  : p(f, d, "conv0"),
                conv1: p(d, v, "conv1"),
                conv2: p(v, m, "conv2"),
                conv3: p(m, g, "conv3"),
                conv4: p(g, y, "conv4"),
                conv5: p(y, x, "conv5"),
                conv6: w ? p(x, w, "conv6") : void 0,
                conv7: b ? p(w, b, "conv7") : void 0,
                conv8: l(b || w || x, 5 * n, 1, "conv8"),
              };
            } else
              (f = r[0]),
                (d = r[1]),
                (v = r[2]),
                (m = r[3]),
                (g = r[4]),
                (y = r[5]),
                (x = r[6]),
                (w = r[7]),
                (b = r[8]),
                (o = {
                  conv0: h(f, d, "conv0"),
                  conv1: h(d, v, "conv1"),
                  conv2: h(v, m, "conv2"),
                  conv3: h(m, g, "conv3"),
                  conv4: h(g, y, "conv4"),
                  conv5: h(y, x, "conv5"),
                  conv6: h(x, w, "conv6"),
                  conv7: h(w, b, "conv7"),
                  conv8: l(b, 5 * n, 1, "conv8"),
                });
            if (0 !== s().length)
              throw new Error("weights remaing after extract: " + s().length);
            return { params: o, paramMappings: u };
          })(t, this.config, this.boxEncodingSize, e);
        }),
        (r.prototype.extractBoxes = function (A, D, M) {
          return p(this, void 0, void 0, function () {
            var e,
              n,
              r,
              o,
              i,
              a,
              s,
              u,
              c,
              l,
              h,
              p,
              f,
              d,
              v,
              m,
              g,
              y,
              x,
              w,
              b,
              E,
              C,
              _,
              S,
              R,
              N,
              k,
              I,
              T = this;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (
                    (e = D.width),
                    (n = D.height),
                    (r = Math.max(e, n)),
                    (o = r / e),
                    (i = r / n),
                    (a = A.shape[1]),
                    (s = this.config.anchors.length),
                    (u = ue(function () {
                      var t = A.reshape([a, a, s, T.boxEncodingSize]);
                      return [
                        t.slice([0, 0, 0, 0], [a, a, s, 4]),
                        t.slice([0, 0, 0, 4], [a, a, s, 1]),
                        T.withClassScores
                          ? Le(
                              t.slice(
                                [0, 0, 0, 5],
                                [a, a, s, T.config.classes.length]
                              ),
                              3
                            )
                          : Ve(0),
                      ];
                    })),
                    (c = u[0]),
                    (l = u[1]),
                    (h = u[2]),
                    (p = []),
                    [4, l.array()]
                  );
                case 1:
                  return (f = t.sent()), [4, c.array()];
                case 2:
                  (d = t.sent()), (v = 0), (t.label = 3);
                case 3:
                  if (!(v < a)) return [3, 12];
                  (m = 0), (t.label = 4);
                case 4:
                  if (!(m < a)) return [3, 11];
                  (g = 0), (t.label = 5);
                case 5:
                  return g < s
                    ? ((y = Cp(f[v][m][g][0])),
                      !M || M < y
                        ? ((x = ((m + Cp(d[v][m][g][0])) / a) * o),
                          (w = ((v + Cp(d[v][m][g][1])) / a) * i),
                          (b =
                            ((Math.exp(d[v][m][g][2]) *
                              this.config.anchors[g].x) /
                              a) *
                            o),
                          (E =
                            ((Math.exp(d[v][m][g][3]) *
                              this.config.anchors[g].y) /
                              a) *
                            i),
                          (C = x - b / 2),
                          (_ = w - E / 2),
                          (S = { row: v, col: m, anchor: g }),
                          this.withClassScores
                            ? [4, this.extractPredictedClass(h, S)]
                            : [3, 7])
                        : [3, 9])
                    : [3, 10];
                case 6:
                  return (I = t.sent()), [3, 8];
                case 7:
                  (I = { classScore: 1, label: 0 }), (t.label = 8);
                case 8:
                  (N = (R = I).classScore),
                    (k = R.label),
                    p.push(
                      O(
                        {
                          box: new Rh(C, _, C + b, _ + E),
                          score: y,
                          classScore: y * N,
                          label: k,
                        },
                        S
                      )
                    ),
                    (t.label = 9);
                case 9:
                  return g++, [3, 5];
                case 10:
                  return m++, [3, 4];
                case 11:
                  return v++, [3, 3];
                case 12:
                  return c.dispose(), l.dispose(), h.dispose(), [2, p];
              }
            });
          });
        }),
        (r.prototype.extractPredictedClass = function (e, a) {
          return p(this, void 0, void 0, function () {
            var n, r, o, i;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (
                    (n = a.row), (r = a.col), (o = a.anchor), [4, e.array()]
                  );
                case 1:
                  return (
                    (i = t.sent()),
                    [
                      2,
                      Array(this.config.classes.length)
                        .fill(0)
                        .map(function (t, e) {
                          return i[n][r][o][e];
                        })
                        .map(function (t, e) {
                          return { classScore: t, label: e };
                        })
                        .reduce(function (t, e) {
                          return t.classScore > e.classScore ? t : e;
                        }),
                    ]
                  );
              }
            });
          });
        }),
        (r.DEFAULT_FILTER_SIZES = [3, 16, 32, 64, 128, 256, 512, 1024, 1024]),
        r
      );
    })(xp),
    Pp = Object.freeze({
      convLayer: Kh,
      disposeUnusedWeightTensors: Xh,
      extractConvParamsFactory: Yh,
      extractFCParamsFactory: Qh,
      extractSeparableConvParamsFactory: Zh,
      loadSeparableConvParamsFactory: tp,
      extractWeightEntryFactory: ep,
      extractWeightsFactory: np,
      getModelUris: rp,
      SeparableConvParams: Jh,
      TinyYolov2: Op,
      get TinyYolov2SizeType() {
        return _p;
      },
      TinyYolov2Options: Mp,
      validateConfig: Np,
    });
  function Fp(i, a, t) {
    if (
      (void 0 === t && (t = !1),
      i.beginPath(),
      a.slice(1).forEach(function (t, e) {
        var n = t.x,
          r = t.y,
          o = a[e];
        i.moveTo(o.x, o.y), i.lineTo(n, r);
      }),
      t)
    ) {
      var e = a[a.length - 1],
        n = a[0];
      if (!e || !n) return;
      i.moveTo(e.x, e.y), i.lineTo(n.x, n.y);
    }
    i.stroke();
  }
  var Lp = (function (r) {
    function o(t, e, n) {
      return r.call(this, t, t, "", e, n) || this;
    }
    return (
      a(o, r),
      (o.prototype.forSize = function (t, e) {
        var n = r.prototype.forSize.call(this, t, e);
        return new o(n.score, n.relativeBox, n.imageDims);
      }),
      o
    );
  })(kh);
  function Bp(t) {
    return t.detection instanceof Lp;
  }
  function Wp(t, e) {
    var n = { detection: e };
    return Object.assign({}, t, n);
  }
  function zp(e, n, r) {
    return ue(function () {
      var t = Is(e, n.depthwise_filter, n.pointwise_filter, r, "same");
      return (t = xu(t, n.bias));
    });
  }
  function Up(r, o, i) {
    return (
      void 0 === i && (i = !1),
      ue(function () {
        var t = Xu(
            i
              ? xu(Ss(r, o.conv0.filters, [2, 2], "same"), o.conv0.bias)
              : zp(r, o.conv0, [2, 2])
          ),
          e = zp(t, o.conv1, [1, 1]),
          n = zp(Xu(xu(t, e)), o.conv2, [1, 1]);
        return Xu(xu(t, xu(e, n)));
      })
    );
  }
  function Gp(o, i, a, s) {
    return (
      void 0 === a && (a = !1),
      void 0 === s && (s = !0),
      ue(function () {
        var t = Xu(
            a
              ? xu(
                  Ss(o, i.conv0.filters, s ? [2, 2] : [1, 1], "same"),
                  i.conv0.bias
                )
              : zp(o, i.conv0, s ? [2, 2] : [1, 1])
          ),
          e = zp(t, i.conv1, [1, 1]),
          n = zp(Xu(xu(t, e)), i.conv2, [1, 1]),
          r = zp(Xu(xu(t, xu(e, n))), i.conv3, [1, 1]);
        return Xu(xu(t, xu(e, xu(n, r))));
      })
    );
  }
  function Vp(t, e) {
    var o = Yh(t, e),
      i = Zh(t, e);
    function a(t, e, n, r) {
      return (
        void 0 === r && (r = !1),
        {
          conv0: r ? o(t, e, 3, n + "/conv0") : i(t, e, n + "/conv0"),
          conv1: i(e, e, n + "/conv1"),
          conv2: i(e, e, n + "/conv2"),
        }
      );
    }
    return {
      extractDenseBlock3Params: a,
      extractDenseBlock4Params: function (t, e, n, r) {
        void 0 === r && (r = !1);
        var o = a(t, e, n, r);
        return {
          conv0: o.conv0,
          conv1: o.conv1,
          conv2: o.conv2,
          conv3: i(e, e, n + "/conv3"),
        };
      },
    };
  }
  function Hp(e) {
    return function (t) {
      return { filters: e(t + "/filters", 4), bias: e(t + "/bias", 1) };
    };
  }
  function qp(t, e) {
    var n = ep(t, e),
      r = Hp(n),
      o = tp(n);
    return {
      extractDenseBlock3Params: function (t, e) {
        return (
          void 0 === e && (e = !1),
          {
            conv0: e ? r(t + "/conv0") : o(t + "/conv0"),
            conv1: o(t + "/conv1"),
            conv2: o(t + "/conv2"),
          }
        );
      },
      extractDenseBlock4Params: function (t, e) {
        return (
          void 0 === e && (e = !1),
          {
            conv0: e ? r(t + "/conv0") : o(t + "/conv0"),
            conv1: o(t + "/conv1"),
            conv2: o(t + "/conv2"),
            conv3: o(t + "/conv3"),
          }
        );
      },
    };
  }
  var jp = (function (t) {
    function e() {
      return t.call(this, "FaceFeatureExtractor") || this;
    }
    return (
      a(e, t),
      (e.prototype.forwardInput = function (e) {
        var n = this.params;
        if (!n)
          throw new Error("FaceFeatureExtractor - load model before inference");
        return ue(function () {
          var t = Gp(
            Ep(e.toBatchTensor(112, !0), [122.782, 117.001, 104.298]).div(
              Ve(255)
            ),
            n.dense0,
            !0
          );
          return (
            (t = Gp((t = Gp((t = Gp(t, n.dense1)), n.dense2)), n.dense3)),
            (t = Gs(t, [7, 7], [2, 2], "valid"))
          );
        });
      }),
      (e.prototype.forward = function (n) {
        return p(this, void 0, void 0, function () {
          var e;
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                return (e = this.forwardInput), [4, yp(n)];
              case 1:
                return [2, e.apply(this, [t.sent()])];
            }
          });
        });
      }),
      (e.prototype.getDefaultModelName = function () {
        return "face_feature_extractor_model";
      }),
      (e.prototype.extractParamsFromWeigthMap = function (t) {
        return (
          (r = qp((e = t), (n = [])).extractDenseBlock4Params),
          (o = {
            dense0: r("dense0", !0),
            dense1: r("dense1"),
            dense2: r("dense2"),
            dense3: r("dense3"),
          }),
          Xh(e, n),
          { params: o, paramMappings: n }
        );
        var e, n, r, o;
      }),
      (e.prototype.extractParams = function (t) {
        return (function (t) {
          var e = [],
            n = np(t),
            r = n.extractWeights,
            o = n.getRemainingWeights,
            i = Vp(r, e).extractDenseBlock4Params,
            a = i(3, 32, "dense0", !0),
            s = i(32, 64, "dense1"),
            u = i(64, 128, "dense2"),
            c = i(128, 256, "dense3");
          if (0 !== o().length)
            throw new Error("weights remaing after extract: " + o().length);
          return {
            paramMappings: e,
            params: { dense0: a, dense1: s, dense2: u, dense3: c },
          };
        })(t);
      }),
      e
    );
  })(xp);
  function $p(t, e) {
    return ue(function () {
      return xu(As(t, e.weights), e.bias);
    });
  }
  function Kp(e) {
    var n = {},
      r = {};
    return (
      Object.keys(e).forEach(function (t) {
        (t.startsWith("fc") ? r : n)[t] = e[t];
      }),
      { featureExtractorMap: n, classifierMap: r }
    );
  }
  var Xp = (function (r) {
      function t(t, e) {
        var n = r.call(this, t) || this;
        return (n._faceFeatureExtractor = e), n;
      }
      return (
        a(t, r),
        Object.defineProperty(t.prototype, "faceFeatureExtractor", {
          get: function () {
            return this._faceFeatureExtractor;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.runNet = function (e) {
          var n = this,
            r = this.params;
          if (!r)
            throw new Error(this._name + " - load model before inference");
          return ue(function () {
            var t =
              e instanceof gp ? n.faceFeatureExtractor.forwardInput(e) : e;
            return $p(t.as2D(t.shape[0], -1), r.fc);
          });
        }),
        (t.prototype.dispose = function (t) {
          void 0 === t && (t = !0),
            this.faceFeatureExtractor.dispose(t),
            r.prototype.dispose.call(this, t);
        }),
        (t.prototype.loadClassifierParams = function (t) {
          var e = this.extractClassifierParams(t),
            n = e.params,
            r = e.paramMappings;
          (this._params = n), (this._paramMappings = r);
        }),
        (t.prototype.extractClassifierParams = function (t) {
          return (function (t, e, n) {
            var r = [],
              o = np(t),
              i = o.extractWeights,
              a = o.getRemainingWeights,
              s = Qh(i, r)(e, n, "fc");
            if (0 !== a().length)
              throw new Error("weights remaing after extract: " + a().length);
            return { paramMappings: r, params: { fc: s } };
          })(
            t,
            this.getClassifierChannelsIn(),
            this.getClassifierChannelsOut()
          );
        }),
        (t.prototype.extractParamsFromWeigthMap = function (t) {
          var e,
            n,
            r,
            o,
            i,
            a = Kp(t),
            s = a.featureExtractorMap,
            u = a.classifierMap;
          return (
            this.faceFeatureExtractor.loadFromWeightMap(s),
            (o = ep((e = u), (r = []))),
            (i = {
              fc:
                ((n = "fc"),
                { weights: o(n + "/weights", 2), bias: o(n + "/bias", 1) }),
            }),
            Xh(e, r),
            { params: i, paramMappings: r }
          );
        }),
        (t.prototype.extractParams = function (t) {
          var e = this.getClassifierChannelsIn(),
            n = this.getClassifierChannelsOut(),
            r = n * e + n,
            o = t.slice(0, t.length - r),
            i = t.slice(t.length - r);
          return (
            this.faceFeatureExtractor.extractWeights(o),
            this.extractClassifierParams(i)
          );
        }),
        t
      );
    })(xp),
    Yp = [
      "neutral",
      "happy",
      "sad",
      "angry",
      "fearful",
      "disgusted",
      "surprised",
    ],
    Qp = (function () {
      function t(n) {
        var r = this;
        if (7 !== n.length)
          throw new Error(
            "FaceExpressions.constructor - expected probabilities.length to be 7, have: " +
              n.length
          );
        Yp.forEach(function (t, e) {
          r[t] = n[e];
        });
      }
      return (
        (t.prototype.asSortedArray = function () {
          var e = this;
          return Yp.map(function (t) {
            return { expression: t, probability: e[t] };
          }).sort(function (t, e) {
            return e.probability - t.probability;
          });
        }),
        t
      );
    })(),
    Jp = (function (e) {
      function t(t) {
        return (
          void 0 === t && (t = new jp()),
          e.call(this, "FaceExpressionNet", t) || this
        );
      }
      return (
        a(t, e),
        (t.prototype.forwardInput = function (t) {
          var e = this;
          return ue(function () {
            return Le(e.runNet(t));
          });
        }),
        (t.prototype.forward = function (n) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = this.forwardInput), [4, yp(n)];
                case 1:
                  return [2, e.apply(this, [t.sent()])];
              }
            });
          });
        }),
        (t.prototype.predictExpressions = function (a) {
          return p(this, void 0, void 0, function () {
            var e,
              n,
              r,
              o,
              i = this;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, yp(a)];
                case 1:
                  return (e = t.sent()), [4, this.forwardInput(e)];
                case 2:
                  return (
                    (n = t.sent()),
                    [
                      4,
                      Promise.all(
                        ha(n).map(function (n) {
                          return p(i, void 0, void 0, function () {
                            var e;
                            return P(this, function (t) {
                              switch (t.label) {
                                case 0:
                                  return [4, n.data()];
                                case 1:
                                  return (e = t.sent()), n.dispose(), [2, e];
                              }
                            });
                          });
                        })
                      ),
                    ]
                  );
                case 3:
                  return (
                    (r = t.sent()),
                    n.dispose(),
                    (o = r.map(function (t) {
                      return new Qp(t);
                    })),
                    [2, e.isBatchInput ? o : o[0]]
                  );
              }
            });
          });
        }),
        (t.prototype.getDefaultModelName = function () {
          return "face_expression_model";
        }),
        (t.prototype.getClassifierChannelsIn = function () {
          return 256;
        }),
        (t.prototype.getClassifierChannelsOut = function () {
          return 7;
        }),
        t
      );
    })(Xp);
  function Zp(t) {
    return t.expressions instanceof Qp;
  }
  function tf(t, e) {
    var n = { expressions: e };
    return Object.assign({}, t, n);
  }
  var ef = (function () {
      function t(t, e, n) {
        void 0 === n && (n = new lh(0, 0));
        var r = e.width,
          o = e.height;
        (this._imgDims = new ch(r, o)),
          (this._shift = n),
          (this._positions = t.map(function (t) {
            return t.mul(new lh(r, o)).add(n);
          }));
      }
      return (
        Object.defineProperty(t.prototype, "shift", {
          get: function () {
            return new lh(this._shift.x, this._shift.y);
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "imageWidth", {
          get: function () {
            return this._imgDims.width;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "imageHeight", {
          get: function () {
            return this._imgDims.height;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "positions", {
          get: function () {
            return this._positions;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "relativePositions", {
          get: function () {
            var e = this;
            return this._positions.map(function (t) {
              return t.sub(e._shift).div(new lh(e.imageWidth, e.imageHeight));
            });
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.forSize = function (t, e) {
          return new this.constructor(this.relativePositions, {
            width: t,
            height: e,
          });
        }),
        (t.prototype.shiftBy = function (t, e) {
          return new this.constructor(
            this.relativePositions,
            this._imgDims,
            new lh(t, e)
          );
        }),
        (t.prototype.shiftByPoint = function (t) {
          return this.shiftBy(t.x, t.y);
        }),
        (t.prototype.align = function (t, e) {
          if ((void 0 === e && (e = {}), t)) {
            var n = t instanceof Lp ? t.box.floor() : new Sh(t);
            return this.shiftBy(n.x, n.y).align(null, e);
          }
          var r = Object.assign(
              {},
              { useDlibAlignment: !1, minBoxPadding: 0.2 },
              e
            ),
            o = r.useDlibAlignment,
            i = r.minBoxPadding;
          return o ? this.alignDlib() : this.alignMinBbox(i);
        }),
        (t.prototype.alignDlib = function () {
          var t = this.getRefPointsForAlignment(),
            e = t[0],
            n = t[1],
            r = t[2],
            o = function (t) {
              return r.sub(t).magnitude();
            },
            i = (o(e) + o(n)) / 2,
            a = Math.floor(i / 0.45),
            s = wh(t),
            u = Math.floor(Math.max(0, s.x - 0.5 * a)),
            c = Math.floor(Math.max(0, s.y - 0.43 * a));
          return new Th(
            u,
            c,
            Math.min(a, this.imageWidth + u),
            Math.min(a, this.imageHeight + c)
          );
        }),
        (t.prototype.alignMinBbox = function (t) {
          var e,
            n,
            r,
            o,
            i,
            a,
            s,
            u =
              ((e = this.positions),
              (n = e.map(function (t) {
                return t.x;
              })),
              (r = e.map(function (t) {
                return t.y;
              })),
              (o = n.reduce(function (t, e) {
                return e < t ? e : t;
              }, 1 / 0)),
              (i = r.reduce(function (t, e) {
                return e < t ? e : t;
              }, 1 / 0)),
              (a = n.reduce(function (t, e) {
                return t < e ? e : t;
              }, 0)),
              (s = r.reduce(function (t, e) {
                return t < e ? e : t;
              }, 0)),
              new Rh(o, i, a, s));
          return u.pad(u.width * t, u.height * t);
        }),
        (t.prototype.getRefPointsForAlignment = function () {
          throw new Error(
            "getRefPointsForAlignment not implemented by base class"
          );
        }),
        t
      );
    })(),
    nf = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.getJawOutline = function () {
          return this.positions.slice(0, 17);
        }),
        (e.prototype.getLeftEyeBrow = function () {
          return this.positions.slice(17, 22);
        }),
        (e.prototype.getRightEyeBrow = function () {
          return this.positions.slice(22, 27);
        }),
        (e.prototype.getNose = function () {
          return this.positions.slice(27, 36);
        }),
        (e.prototype.getLeftEye = function () {
          return this.positions.slice(36, 42);
        }),
        (e.prototype.getRightEye = function () {
          return this.positions.slice(42, 48);
        }),
        (e.prototype.getMouth = function () {
          return this.positions.slice(48, 68);
        }),
        (e.prototype.getRefPointsForAlignment = function () {
          return [this.getLeftEye(), this.getRightEye(), this.getMouth()].map(
            wh
          );
        }),
        e
      );
    })(ef);
  function rf(t) {
    return (
      Bp(t) &&
      t.landmarks instanceof ef &&
      t.unshiftedLandmarks instanceof ef &&
      t.alignedRect instanceof Lp
    );
  }
  function of(t, e) {
    var n = t.detection.box,
      r = e.shiftBy(n.x, n.y),
      o = r.align(),
      i = t.detection.imageDims,
      a = {
        landmarks: r,
        unshiftedLandmarks: e,
        alignedRect: new Lp(t.detection.score, o.rescale(i.reverse()), i),
      };
    return Object.assign({}, t, a);
  }
  var af = function (t) {
      void 0 === t && (t = {});
      var e = t.drawLines,
        n = void 0 === e || e,
        r = t.drawPoints,
        o = void 0 === r || r,
        i = t.lineWidth,
        a = t.lineColor,
        s = t.pointSize,
        u = t.pointColor;
      (this.drawLines = n),
        (this.drawPoints = o),
        (this.lineWidth = i || 1),
        (this.pointSize = s || 2),
        (this.lineColor = a || "rgba(0, 255, 255, 1)"),
        (this.pointColor = u || "rgba(255, 0, 255, 1)");
    },
    sf = (function () {
      function t(t, e) {
        void 0 === e && (e = {}),
          (this.faceLandmarks = t),
          (this.options = new af(e));
      }
      return (
        (t.prototype.draw = function (t) {
          var e = Gh(t),
            n = this.options,
            r = n.drawLines,
            o = n.drawPoints,
            i = n.lineWidth,
            a = n.lineColor,
            s = n.pointSize,
            u = n.pointColor;
          if (
            (r &&
              this.faceLandmarks instanceof nf &&
              ((e.strokeStyle = a),
              (e.lineWidth = i),
              Fp(e, this.faceLandmarks.getJawOutline()),
              Fp(e, this.faceLandmarks.getLeftEyeBrow()),
              Fp(e, this.faceLandmarks.getRightEyeBrow()),
              Fp(e, this.faceLandmarks.getNose()),
              Fp(e, this.faceLandmarks.getLeftEye(), !0),
              Fp(e, this.faceLandmarks.getRightEye(), !0),
              Fp(e, this.faceLandmarks.getMouth(), !0)),
            o)
          ) {
            (e.strokeStyle = u), (e.fillStyle = u);
            this.faceLandmarks.positions.forEach(function (t) {
              e.beginPath(), e.arc(t.x, t.y, s, 0, 2 * Math.PI), e.fill();
            });
          }
        }),
        t
      );
    })();
  var uf = Object.freeze({
    drawContour: Fp,
    drawDetections: function (o, t) {
      (Array.isArray(t) ? t : [t]).forEach(function (t) {
        var e = t instanceof Lp ? t.score : Bp(t) ? t.detection.score : void 0,
          n = t instanceof Lp ? t.box : Bp(t) ? t.detection.box : new Sh(t),
          r = e ? "" + gh(e) : void 0;
        new jh(n, { label: r }).draw(o);
      });
    },
    drawFaceExpressions: function (o, t, i, a) {
      void 0 === i && (i = 0.1),
        (Array.isArray(t) ? t : [t]).forEach(function (t) {
          var e = t instanceof Qp ? t : Zp(t) ? t.expressions : void 0;
          if (!e)
            throw new Error(
              "drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof"
            );
          var n = e.asSortedArray().filter(function (t) {
              return t.probability > i;
            }),
            r = Bp(t) ? t.detection.box.bottomLeft : a || new lh(0, 0);
          new Hh(
            n.map(function (t) {
              return t.expression + " (" + gh(t.probability) + ")";
            }),
            r
          ).draw(o);
        });
    },
    DrawFaceLandmarksOptions: af,
    DrawFaceLandmarks: sf,
    drawFaceLandmarks: function (n, t) {
      (Array.isArray(t) ? t : [t]).forEach(function (t) {
        var e = t instanceof ef ? t : rf(t) ? t.landmarks : void 0;
        if (!e)
          throw new Error(
            "drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof"
          );
        new sf(e).draw(n);
      });
    },
  });
  function cf(t, e) {
    var n,
      r,
      o,
      i,
      a = [],
      s = np(t),
      u = s.extractWeights,
      c = s.getRemainingWeights,
      l =
        ((o = Yh((n = u), (r = a))),
        (i = Zh(n, r)),
        {
          extractConvParams: o,
          extractSeparableConvParams: i,
          extractReductionBlockParams: function (t, e, n) {
            return {
              separable_conv0: i(t, e, n + "/separable_conv0"),
              separable_conv1: i(e, e, n + "/separable_conv1"),
              expansion_conv: o(t, e, 1, n + "/expansion_conv"),
            };
          },
          extractMainBlockParams: function (t, e) {
            return {
              separable_conv0: i(t, t, e + "/separable_conv0"),
              separable_conv1: i(t, t, e + "/separable_conv1"),
              separable_conv2: i(t, t, e + "/separable_conv2"),
            };
          },
        }),
      h = l.extractSeparableConvParams,
      p = l.extractReductionBlockParams,
      f = l.extractMainBlockParams,
      d = {
        conv_in: (0, l.extractConvParams)(3, 32, 3, "entry_flow/conv_in"),
        reduction_block_0: p(32, 64, "entry_flow/reduction_block_0"),
        reduction_block_1: p(64, 128, "entry_flow/reduction_block_1"),
      },
      v = {};
    bh(e, 0, 1).forEach(function (t) {
      v["main_block_" + t] = f(128, "middle_flow/main_block_" + t);
    });
    var m = {
      reduction_block: p(128, 256, "exit_flow/reduction_block"),
      separable_conv: h(256, 512, "exit_flow/separable_conv"),
    };
    if (0 !== c().length)
      throw new Error("weights remaing after extract: " + c().length);
    return {
      paramMappings: a,
      params: { entry_flow: d, middle_flow: v, exit_flow: m },
    };
  }
  function lf(t, e) {
    var n,
      r,
      o,
      i = [],
      a =
        ((n = ep(t, i)),
        (r = Hp(n)),
        (o = tp(n)),
        {
          extractConvParams: r,
          extractSeparableConvParams: o,
          extractReductionBlockParams: function (t) {
            return {
              separable_conv0: o(t + "/separable_conv0"),
              separable_conv1: o(t + "/separable_conv1"),
              expansion_conv: r(t + "/expansion_conv"),
            };
          },
          extractMainBlockParams: function (t) {
            return {
              separable_conv0: o(t + "/separable_conv0"),
              separable_conv1: o(t + "/separable_conv1"),
              separable_conv2: o(t + "/separable_conv2"),
            };
          },
        }),
      s = a.extractSeparableConvParams,
      u = a.extractReductionBlockParams,
      c = a.extractMainBlockParams,
      l = {
        conv_in: (0, a.extractConvParams)("entry_flow/conv_in"),
        reduction_block_0: u("entry_flow/reduction_block_0"),
        reduction_block_1: u("entry_flow/reduction_block_1"),
      },
      h = {};
    bh(e, 0, 1).forEach(function (t) {
      h["main_block_" + t] = c("middle_flow/main_block_" + t);
    });
    var p = {
      reduction_block: u("exit_flow/reduction_block"),
      separable_conv: s("exit_flow/separable_conv"),
    };
    return (
      Xh(t, i),
      {
        params: { entry_flow: l, middle_flow: h, exit_flow: p },
        paramMappings: i,
      }
    );
  }
  function hf(t, e, n) {
    return xu(Ss(t, e.filters, n, "same"), e.bias);
  }
  function pf(t, e, n) {
    void 0 === n && (n = !0);
    var r = n ? Xu(t) : t;
    return (
      (r = zp(r, e.separable_conv0, [1, 1])),
      (r = zp(Xu(r), e.separable_conv1, [1, 1])),
      (r = Us(r, [3, 3], [2, 2], "same")),
      (r = xu(r, hf(t, e.expansion_conv, [2, 2])))
    );
  }
  var ff,
    df = (function (n) {
      function t(t) {
        var e = n.call(this, "TinyXception") || this;
        return (e._numMainBlocks = t), e;
      }
      return (
        a(t, n),
        (t.prototype.forwardInput = function (e) {
          var n = this,
            i = this.params;
          if (!i) throw new Error("TinyXception - load model before inference");
          return ue(function () {
            var t = Ep(
                e.toBatchTensor(112, !0),
                [122.782, 117.001, 104.298]
              ).div(Ve(256)),
              o = Xu(hf(t, i.entry_flow.conv_in, [2, 2]));
            return (
              (o = pf(
                (o = pf(o, i.entry_flow.reduction_block_0, !1)),
                i.entry_flow.reduction_block_1
              )),
              bh(n._numMainBlocks, 0, 1).forEach(function (t) {
                var e, n, r;
                (e = o),
                  (n = i.middle_flow["main_block_" + t]),
                  (r = zp(Xu(e), n.separable_conv0, [1, 1])),
                  (r = zp(Xu(r), n.separable_conv1, [1, 1])),
                  (r = zp(Xu(r), n.separable_conv2, [1, 1])),
                  (o = r = xu(r, e));
              }),
              (o = pf(o, i.exit_flow.reduction_block)),
              (o = Xu(zp(o, i.exit_flow.separable_conv, [1, 1])))
            );
          });
        }),
        (t.prototype.forward = function (n) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = this.forwardInput), [4, yp(n)];
                case 1:
                  return [2, e.apply(this, [t.sent()])];
              }
            });
          });
        }),
        (t.prototype.getDefaultModelName = function () {
          return "tiny_xception_model";
        }),
        (t.prototype.extractParamsFromWeigthMap = function (t) {
          return lf(t, this._numMainBlocks);
        }),
        (t.prototype.extractParams = function (t) {
          return cf(t, this._numMainBlocks);
        }),
        t
      );
    })(xp);
  ((ff = c.Gender || (c.Gender = {})).FEMALE = "female"), (ff.MALE = "male");
  var vf = (function (n) {
      function t(t) {
        void 0 === t && (t = new df(2));
        var e = n.call(this, "AgeGenderNet") || this;
        return (e._faceFeatureExtractor = t), e;
      }
      return (
        a(t, n),
        Object.defineProperty(t.prototype, "faceFeatureExtractor", {
          get: function () {
            return this._faceFeatureExtractor;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.runNet = function (n) {
          var r = this,
            o = this.params;
          if (!o)
            throw new Error(this._name + " - load model before inference");
          return ue(function () {
            var t =
                n instanceof gp ? r.faceFeatureExtractor.forwardInput(n) : n,
              e = Gs(t, [7, 7], [2, 2], "valid").as2D(t.shape[0], -1);
            return { age: $p(e, o.fc.age).as1D(), gender: $p(e, o.fc.gender) };
          });
        }),
        (t.prototype.forwardInput = function (r) {
          var o = this;
          return ue(function () {
            var t = o.runNet(r),
              e = t.age,
              n = t.gender;
            return { age: e, gender: Le(n) };
          });
        }),
        (t.prototype.forward = function (n) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = this.forwardInput), [4, yp(n)];
                case 1:
                  return [2, e.apply(this, [t.sent()])];
              }
            });
          });
        }),
        (t.prototype.predictAgeAndGender = function (s) {
          return p(this, void 0, void 0, function () {
            var e,
              n,
              r,
              o,
              i,
              a,
              u = this;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, yp(s)];
                case 1:
                  return (e = t.sent()), [4, this.forwardInput(e)];
                case 2:
                  return (
                    (n = t.sent()),
                    (r = ha(n.age)),
                    (o = ha(n.gender)),
                    (i = r.map(function (t, e) {
                      return { ageTensor: t, genderTensor: o[e] };
                    })),
                    [
                      4,
                      Promise.all(
                        i.map(function (t) {
                          var a = t.ageTensor,
                            s = t.genderTensor;
                          return p(u, void 0, void 0, function () {
                            var e, n, r, o, i;
                            return P(this, function (t) {
                              switch (t.label) {
                                case 0:
                                  return [4, a.data()];
                                case 1:
                                  return (e = t.sent()[0]), [4, s.data()];
                                case 2:
                                  return (
                                    (n = t.sent()[0]),
                                    (o = (r = 0.5 < n)
                                      ? c.Gender.MALE
                                      : c.Gender.FEMALE),
                                    (i = r ? n : 1 - n),
                                    a.dispose(),
                                    s.dispose(),
                                    [
                                      2,
                                      {
                                        age: e,
                                        gender: o,
                                        genderProbability: i,
                                      },
                                    ]
                                  );
                              }
                            });
                          });
                        })
                      ),
                    ]
                  );
                case 3:
                  return (
                    (a = t.sent()),
                    n.age.dispose(),
                    n.gender.dispose(),
                    [2, e.isBatchInput ? a : a[0]]
                  );
              }
            });
          });
        }),
        (t.prototype.getDefaultModelName = function () {
          return "age_gender_model";
        }),
        (t.prototype.dispose = function (t) {
          void 0 === t && (t = !0),
            this.faceFeatureExtractor.dispose(t),
            n.prototype.dispose.call(this, t);
        }),
        (t.prototype.loadClassifierParams = function (t) {
          var e = this.extractClassifierParams(t),
            n = e.params,
            r = e.paramMappings;
          (this._params = n), (this._paramMappings = r);
        }),
        (t.prototype.extractClassifierParams = function (t) {
          return (function (t) {
            var e = [],
              n = np(t),
              r = n.extractWeights,
              o = n.getRemainingWeights,
              i = Qh(r, e),
              a = i(512, 1, "fc/age"),
              s = i(512, 2, "fc/gender");
            if (0 !== o().length)
              throw new Error("weights remaing after extract: " + o().length);
            return { paramMappings: e, params: { fc: { age: a, gender: s } } };
          })(t);
        }),
        (t.prototype.extractParamsFromWeigthMap = function (t) {
          var e = Kp(t),
            n = e.featureExtractorMap,
            r = e.classifierMap;
          return (
            this.faceFeatureExtractor.loadFromWeightMap(n),
            (function (t) {
              var e = [],
                n = ep(t, e);
              function r(t) {
                return {
                  weights: n(t + "/weights", 2),
                  bias: n(t + "/bias", 1),
                };
              }
              var o = { fc: { age: r("fc/age"), gender: r("fc/gender") } };
              return Xh(t, e), { params: o, paramMappings: e };
            })(r)
          );
        }),
        (t.prototype.extractParams = function (t) {
          var e = t.slice(0, t.length - 1539),
            n = t.slice(t.length - 1539);
          return (
            this.faceFeatureExtractor.extractWeights(e),
            this.extractClassifierParams(n)
          );
        }),
        t
      );
    })(xp),
    mf = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.getRefPointsForAlignment = function () {
          var t = this.positions;
          return [t[0], t[1], wh([t[3], t[4]])];
        }),
        e
      );
    })(ef),
    gf = (function () {
      function t(t, e) {
        (this._label = t), (this._distance = e);
      }
      return (
        Object.defineProperty(t.prototype, "label", {
          get: function () {
            return this._label;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "distance", {
          get: function () {
            return this._distance;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.toString = function (t) {
          return (
            void 0 === t && (t = !0),
            this.label + (t ? " (" + gh(this.distance) + ")" : "")
          );
        }),
        t
      );
    })(),
    yf = (function () {
      function t(t, e) {
        if ("string" != typeof t)
          throw new Error(
            "LabeledFaceDescriptors - constructor expected label to be a string"
          );
        if (
          !Array.isArray(e) ||
          e.some(function (t) {
            return !(t instanceof Float32Array);
          })
        )
          throw new Error(
            "LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array"
          );
        (this._label = t), (this._descriptors = e);
      }
      return (
        Object.defineProperty(t.prototype, "label", {
          get: function () {
            return this._label;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "descriptors", {
          get: function () {
            return this._descriptors;
          },
          enumerable: !0,
          configurable: !0,
        }),
        t
      );
    })();
  function xf(s, u) {
    return p(this, void 0, void 0, function () {
      var e, n, r, o, i, a;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return (
              (e = zh.getEnv().Canvas),
              (n = s) instanceof e ? [3, 5] : [4, yp(s)]
            );
          case 1:
            if (1 < (r = t.sent()).batchSize)
              throw new Error("extractFaces - batchSize > 1 not supported");
            return (o = r.getInput(0)) instanceof e
              ? ((i = o), [3, 4])
              : [3, 2];
          case 2:
            return [4, pp(o)];
          case 3:
            (i = t.sent()), (t.label = 4);
          case 4:
            (n = i), (t.label = 5);
          case 5:
            return (
              (a = Gh(n)),
              [
                2,
                u
                  .map(function (t) {
                    return t instanceof Lp
                      ? t.forSize(n.width, n.height).box.floor()
                      : t;
                  })
                  .map(function (t) {
                    return t.clipAtImageBorders(n.width, n.height);
                  })
                  .map(function (t) {
                    var e = t.x,
                      n = t.y,
                      r = t.width,
                      o = t.height,
                      i = up({ width: r, height: o });
                    return (
                      Gh(i).putImageData(a.getImageData(e, n, r, o), 0, 0), i
                    );
                  }),
              ]
            );
        }
      });
    });
  }
  function wf(u, e) {
    return p(this, void 0, void 0, function () {
      return P(this, function (t) {
        if (!fh(u) && !dh(u))
          throw new Error(
            "extractFaceTensors - expected image tensor to be 3D or 4D"
          );
        if (dh(u) && 1 < u.shape[0])
          throw new Error("extractFaceTensors - batchSize > 1 not supported");
        return [
          2,
          ue(function () {
            var t = u.shape.slice(dh(u) ? 1 : 0),
              i = t[0],
              a = t[1],
              s = t[2];
            return e
              .map(function (t) {
                return t instanceof Lp ? t.forSize(a, i).box : t;
              })
              .map(function (t) {
                return t.clipAtImageBorders(a, i);
              })
              .map(function (t) {
                var e = t.x,
                  n = t.y,
                  r = t.width,
                  o = t.height;
                return $s(u.as3D(i, a, s), [n, e, 0], [o, r, s]);
              });
          }),
        ];
      });
    });
  }
  var bf = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.postProcess = function (t, o, e) {
          var i = e.map(function (t) {
              var e = t.width,
                n = t.height,
                r = o / Math.max(n, e);
              return { width: e * r, height: n * r };
            }),
            a = i.length;
          return ue(function () {
            var n = function (t, e) {
                return ua([Je([68], t), Je([68], e)], 1)
                  .as2D(1, 136)
                  .as1D();
              },
              r = function (t, e) {
                var n = i[t],
                  r = n.width,
                  o = n.height;
                return e(r, o) ? Math.abs(r - o) / 2 : 0;
              };
            return t
              .mul(Je([a, 136], o))
              .sub(
                ua(
                  Array.from(Array(a), function (t, e) {
                    return n(
                      r(e, function (t, e) {
                        return t < e;
                      }),
                      r(e, function (t, e) {
                        return e < t;
                      })
                    );
                  })
                )
              )
              .div(
                ua(
                  Array.from(Array(a), function (t, e) {
                    return n(i[e].width, i[e].height);
                  })
                )
              );
          });
        }),
        (e.prototype.forwardInput = function (e) {
          var n = this;
          return ue(function () {
            var t = n.runNet(e);
            return n.postProcess(
              t,
              e.inputSize,
              e.inputDimensions.map(function (t) {
                return { height: t[0], width: t[1] };
              })
            );
          });
        }),
        (e.prototype.forward = function (n) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = this.forwardInput), [4, yp(n)];
                case 1:
                  return [2, e.apply(this, [t.sent()])];
              }
            });
          });
        }),
        (e.prototype.detectLandmarks = function (o) {
          return p(this, void 0, void 0, function () {
            var u,
              e,
              n,
              r = this;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, yp(o)];
                case 1:
                  return (
                    (u = t.sent()),
                    (e = ue(function () {
                      return ha(r.forwardInput(u));
                    })),
                    [
                      4,
                      Promise.all(
                        e.map(function (a, s) {
                          return p(r, void 0, void 0, function () {
                            var e, n, r, o, i;
                            return P(this, function (t) {
                              switch (t.label) {
                                case 0:
                                  return (r = (n = Array).from), [4, a.data()];
                                case 1:
                                  return (
                                    (e = r.apply(n, [t.sent()])),
                                    (o = e.filter(function (t, e) {
                                      return mh(e);
                                    })),
                                    (i = e.filter(function (t, e) {
                                      return !mh(e);
                                    })),
                                    [
                                      2,
                                      new nf(
                                        Array(68)
                                          .fill(0)
                                          .map(function (t, e) {
                                            return new lh(o[e], i[e]);
                                          }),
                                        {
                                          height: u.getInputHeight(s),
                                          width: u.getInputWidth(s),
                                        }
                                      ),
                                    ]
                                  );
                              }
                            });
                          });
                        })
                      ),
                    ]
                  );
                case 2:
                  return (
                    (n = t.sent()),
                    e.forEach(function (t) {
                      return t.dispose();
                    }),
                    [2, u.isBatchInput ? n : n[0]]
                  );
              }
            });
          });
        }),
        (e.prototype.getClassifierChannelsOut = function () {
          return 136;
        }),
        e
      );
    })(Xp),
    Ef = (function (e) {
      function t(t) {
        return (
          void 0 === t && (t = new jp()),
          e.call(this, "FaceLandmark68Net", t) || this
        );
      }
      return (
        a(t, e),
        (t.prototype.getDefaultModelName = function () {
          return "face_landmark_68_model";
        }),
        (t.prototype.getClassifierChannelsIn = function () {
          return 256;
        }),
        t
      );
    })(bf);
  var Cf = (function (t) {
      function e() {
        return t.call(this, "TinyFaceFeatureExtractor") || this;
      }
      return (
        a(e, t),
        (e.prototype.forwardInput = function (e) {
          var n = this.params;
          if (!n)
            throw new Error(
              "TinyFaceFeatureExtractor - load model before inference"
            );
          return ue(function () {
            var t = Up(
              Ep(e.toBatchTensor(112, !0), [122.782, 117.001, 104.298]).div(
                Ve(255)
              ),
              n.dense0,
              !0
            );
            return (
              (t = Up((t = Up(t, n.dense1)), n.dense2)),
              (t = Gs(t, [14, 14], [2, 2], "valid"))
            );
          });
        }),
        (e.prototype.forward = function (n) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = this.forwardInput), [4, yp(n)];
                case 1:
                  return [2, e.apply(this, [t.sent()])];
              }
            });
          });
        }),
        (e.prototype.getDefaultModelName = function () {
          return "face_feature_extractor_tiny_model";
        }),
        (e.prototype.extractParamsFromWeigthMap = function (t) {
          return (
            (r = qp((e = t), (n = [])).extractDenseBlock3Params),
            (o = {
              dense0: r("dense0", !0),
              dense1: r("dense1"),
              dense2: r("dense2"),
            }),
            Xh(e, n),
            { params: o, paramMappings: n }
          );
          var e, n, r, o;
        }),
        (e.prototype.extractParams = function (t) {
          return (function (t) {
            var e = [],
              n = np(t),
              r = n.extractWeights,
              o = n.getRemainingWeights,
              i = Vp(r, e).extractDenseBlock3Params,
              a = i(3, 32, "dense0", !0),
              s = i(32, 64, "dense1"),
              u = i(64, 128, "dense2");
            if (0 !== o().length)
              throw new Error("weights remaing after extract: " + o().length);
            return {
              paramMappings: e,
              params: { dense0: a, dense1: s, dense2: u },
            };
          })(t);
        }),
        e
      );
    })(xp),
    _f = (function (e) {
      function t(t) {
        return (
          void 0 === t && (t = new Cf()),
          e.call(this, "FaceLandmark68TinyNet", t) || this
        );
      }
      return (
        a(t, e),
        (t.prototype.getDefaultModelName = function () {
          return "face_landmark_68_tiny_model";
        }),
        (t.prototype.getClassifierChannelsIn = function () {
          return 128;
        }),
        t
      );
    })(bf),
    Sf = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return a(e, t), e;
    })(Ef);
  function Rf(t, e, n, r, o) {
    void 0 === o && (o = "same");
    var i,
      a,
      s = e.conv,
      u = s.filters,
      c = s.bias,
      l = Ss(t, u, n, o);
    return (
      (l = xu(l, c)),
      (i = l),
      (a = e.scale),
      (l = xu(Du(i, a.weights), a.biases)),
      r ? Xu(l) : l
    );
  }
  function Nf(t, e) {
    return Rf(t, e, [1, 1], !1);
  }
  function kf(t, e) {
    return Rf(t, e, [2, 2], !0, "valid");
  }
  function If(u, c) {
    function l(t, e, n, r) {
      var o = (function (t, e, n) {
          var r = u(t),
            o = r.length / (e * n * n);
          if (vh(o))
            throw new Error(
              "depth has to be an integer: " +
                o +
                ", weights.length: " +
                r.length +
                ", numFilters: " +
                e +
                ", filterSize: " +
                n
            );
          return ue(function () {
            return Qu($e(r, [e, o, n, n]), [2, 3, 1, 0]);
          });
        })(t, e, n),
        i = He(u(e));
      return (
        c.push({ paramPath: r + "/filters" }, { paramPath: r + "/bias" }),
        { filters: o, bias: i }
      );
    }
    function i(t, e, n, r) {
      var o, i, a, s;
      return {
        conv: l(t, e, n, r + "/conv"),
        scale:
          ((i = r + "/scale"),
          (a = He(u((o = e)))),
          (s = He(u(o))),
          c.push({ paramPath: i + "/weights" }, { paramPath: i + "/biases" }),
          { weights: a, biases: s }),
      };
    }
    return {
      extractConvLayerParams: i,
      extractResidualLayerParams: function (t, e, n, r, o) {
        return (
          void 0 === o && (o = !1),
          {
            conv1: i((o ? 0.5 : 1) * t, e, n, r + "/conv1"),
            conv2: i(t, e, n, r + "/conv2"),
          }
        );
      },
    };
  }
  function Tf(t, e) {
    var n = ep(t, e);
    function r(t) {
      var e;
      return {
        conv: {
          filters: n(t + "/conv/filters", 4),
          bias: n(t + "/conv/bias", 1),
        },
        scale: {
          weights: n((e = t) + "/scale/weights", 1),
          biases: n(e + "/scale/biases", 1),
        },
      };
    }
    return {
      extractConvLayerParams: r,
      extractResidualLayerParams: function (t) {
        return { conv1: r(t + "/conv1"), conv2: r(t + "/conv2") };
      },
    };
  }
  function Af(t, e) {
    var n,
      r,
      o = ((n = t), (r = e.conv1), Rf(n, r, [1, 1], !0));
    return (o = Nf(o, e.conv2)), (o = xu(o, t)), (o = Xu(o));
  }
  function Df(t, e) {
    var n = kf(t, e.conv1);
    n = Nf(n, e.conv2);
    var r = Gs(t, 2, 2, "valid"),
      o = Qe(r.shape),
      i = r.shape[3] !== n.shape[3];
    if (r.shape[1] !== n.shape[1] || r.shape[2] !== n.shape[2]) {
      var a = n.shape.slice();
      a[1] = 1;
      var s = Qe(a),
        u = (n = _i([n, s], 1)).shape.slice();
      u[2] = 1;
      var c = Qe(u);
      n = _i([n, c], 2);
    }
    return (r = i ? _i([r, o], 3) : r), (n = xu(r, n)), (n = Xu(n));
  }
  var Mf = (function (t) {
    function e() {
      return t.call(this, "FaceRecognitionNet") || this;
    }
    return (
      a(e, t),
      (e.prototype.forwardInput = function (n) {
        var r = this.params;
        if (!r)
          throw new Error("FaceRecognitionNet - load model before inference");
        return ue(function () {
          var t = kf(
              Ep(
                n.toBatchTensor(150, !0).toFloat(),
                [122.782, 117.001, 104.298]
              ).div(Ve(256)),
              r.conv32_down
            ),
            e = (t = Df(
              (t = Af(
                (t = Af(
                  (t = Df(
                    (t = Af(
                      (t = Af(
                        (t = Df(
                          (t = Af(
                            (t = Af(
                              (t = Af(
                                (t = Df(
                                  (t = Af(
                                    (t = Af(
                                      (t = Af(
                                        (t = Us(t, 3, 2, "valid")),
                                        r.conv32_1
                                      )),
                                      r.conv32_2
                                    )),
                                    r.conv32_3
                                  )),
                                  r.conv64_down
                                )),
                                r.conv64_1
                              )),
                              r.conv64_2
                            )),
                            r.conv64_3
                          )),
                          r.conv128_down
                        )),
                        r.conv128_1
                      )),
                      r.conv128_2
                    )),
                    r.conv256_down
                  )),
                  r.conv256_1
                )),
                r.conv256_2
              )),
              r.conv256_down_out
            )).mean([1, 2]);
          return As(e, r.fc);
        });
      }),
      (e.prototype.forward = function (n) {
        return p(this, void 0, void 0, function () {
          var e;
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                return (e = this.forwardInput), [4, yp(n)];
              case 1:
                return [2, e.apply(this, [t.sent()])];
            }
          });
        });
      }),
      (e.prototype.computeFaceDescriptor = function (i) {
        return p(this, void 0, void 0, function () {
          var e,
            n,
            r,
            o = this;
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                return [4, yp(i)];
              case 1:
                return (
                  (e = t.sent()),
                  (n = ue(function () {
                    return ha(o.forwardInput(e));
                  })),
                  [
                    4,
                    Promise.all(
                      n.map(function (t) {
                        return t.data();
                      })
                    ),
                  ]
                );
              case 2:
                return (
                  (r = t.sent()),
                  n.forEach(function (t) {
                    return t.dispose();
                  }),
                  [2, e.isBatchInput ? r : r[0]]
                );
            }
          });
        });
      }),
      (e.prototype.getDefaultModelName = function () {
        return "face_recognition_model";
      }),
      (e.prototype.extractParamsFromWeigthMap = function (t) {
        return (function (t) {
          var e = [],
            n = Tf(t, e),
            r = n.extractConvLayerParams,
            o = n.extractResidualLayerParams,
            i = r("conv32_down"),
            a = o("conv32_1"),
            s = o("conv32_2"),
            u = o("conv32_3"),
            c = o("conv64_down"),
            l = o("conv64_1"),
            h = o("conv64_2"),
            p = o("conv64_3"),
            f = o("conv128_down"),
            d = o("conv128_1"),
            v = o("conv128_2"),
            m = o("conv256_down"),
            g = o("conv256_1"),
            y = o("conv256_2"),
            x = o("conv256_down_out"),
            w = t.fc;
          if ((e.push({ originalPath: "fc", paramPath: "fc" }), !ph(w)))
            throw new Error(
              "expected weightMap[fc] to be a Tensor2D, instead have " + w
            );
          var b = {
            conv32_down: i,
            conv32_1: a,
            conv32_2: s,
            conv32_3: u,
            conv64_down: c,
            conv64_1: l,
            conv64_2: h,
            conv64_3: p,
            conv128_down: f,
            conv128_1: d,
            conv128_2: v,
            conv256_down: m,
            conv256_1: g,
            conv256_2: y,
            conv256_down_out: x,
            fc: w,
          };
          return Xh(t, e), { params: b, paramMappings: e };
        })(t);
      }),
      (e.prototype.extractParams = function (t) {
        return (function (t) {
          var e = np(t),
            n = e.extractWeights,
            r = e.getRemainingWeights,
            o = [],
            i = If(n, o),
            a = i.extractConvLayerParams,
            s = i.extractResidualLayerParams,
            u = a(4704, 32, 7, "conv32_down"),
            c = s(9216, 32, 3, "conv32_1"),
            l = s(9216, 32, 3, "conv32_2"),
            h = s(9216, 32, 3, "conv32_3"),
            p = s(36864, 64, 3, "conv64_down", !0),
            f = s(36864, 64, 3, "conv64_1"),
            d = s(36864, 64, 3, "conv64_2"),
            v = s(36864, 64, 3, "conv64_3"),
            m = s(147456, 128, 3, "conv128_down", !0),
            g = s(147456, 128, 3, "conv128_1"),
            y = s(147456, 128, 3, "conv128_2"),
            x = s(589824, 256, 3, "conv256_down", !0),
            w = s(589824, 256, 3, "conv256_1"),
            b = s(589824, 256, 3, "conv256_2"),
            E = s(589824, 256, 3, "conv256_down_out"),
            C = ue(function () {
              return Qu(qe(n(32768), [128, 256]), [1, 0]);
            });
          if ((o.push({ paramPath: "fc" }), 0 !== r().length))
            throw new Error("weights remaing after extract: " + r().length);
          return {
            params: {
              conv32_down: u,
              conv32_1: c,
              conv32_2: l,
              conv32_3: h,
              conv64_down: p,
              conv64_1: f,
              conv64_2: d,
              conv64_3: v,
              conv128_down: m,
              conv128_1: g,
              conv128_2: y,
              conv256_down: x,
              conv256_1: w,
              conv256_2: b,
              conv256_down_out: E,
              fc: C,
            },
            paramMappings: o,
          };
        })(t);
      }),
      e
    );
  })(xp);
  function Of(t, e) {
    var n = { descriptor: e };
    return Object.assign({}, t, n);
  }
  var Pf = (function () {
    function t(t) {
      var e = void 0 === t ? {} : t,
        n = e.minFaceSize,
        r = e.scaleFactor,
        o = e.maxNumScales,
        i = e.scoreThresholds,
        a = e.scaleSteps;
      if (
        ((this._name = "MtcnnOptions"),
        (this._minFaceSize = n || 20),
        (this._scaleFactor = r || 0.709),
        (this._maxNumScales = o || 10),
        (this._scoreThresholds = i || [0.6, 0.7, 0.7]),
        (this._scaleSteps = a),
        "number" != typeof this._minFaceSize || this._minFaceSize < 0)
      )
        throw new Error(
          this._name + " - expected minFaceSize to be a number > 0"
        );
      if (
        "number" != typeof this._scaleFactor ||
        this._scaleFactor <= 0 ||
        1 <= this._scaleFactor
      )
        throw new Error(
          this._name + " - expected scaleFactor to be a number between 0 and 1"
        );
      if ("number" != typeof this._maxNumScales || this._maxNumScales < 0)
        throw new Error(
          this._name + " - expected maxNumScales to be a number > 0"
        );
      if (
        !Array.isArray(this._scoreThresholds) ||
        3 !== this._scoreThresholds.length ||
        this._scoreThresholds.some(function (t) {
          return "number" != typeof t;
        })
      )
        throw new Error(
          this._name +
            " - expected scoreThresholds to be an array of numbers of length 3"
        );
      if (
        this._scaleSteps &&
        (!Array.isArray(this._scaleSteps) ||
          this._scaleSteps.some(function (t) {
            return "number" != typeof t;
          }))
      )
        throw new Error(
          this._name + " - expected scaleSteps to be an array of numbers"
        );
    }
    return (
      Object.defineProperty(t.prototype, "minFaceSize", {
        get: function () {
          return this._minFaceSize;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "scaleFactor", {
        get: function () {
          return this._scaleFactor;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "maxNumScales", {
        get: function () {
          return this._maxNumScales;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "scoreThresholds", {
        get: function () {
          return this._scoreThresholds;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "scaleSteps", {
        get: function () {
          return this._scaleSteps;
        },
        enumerable: !0,
        configurable: !0,
      }),
      t
    );
  })();
  function Ff(l, h) {
    function i(t, e, n, r, o) {
      var i = $e(l(t * e * n * n), [n, n, t, e]),
        a = He(l(e));
      return (
        h.push(
          { paramPath: r + "/filters" },
          { paramPath: r + "/" + (o ? "batch_norm_offset" : "bias") }
        ),
        { filters: i, bias: a }
      );
    }
    function p(t, e, n, r) {
      var o = i(t, e, n, r, !0);
      return { filters: o.filters, batch_norm_offset: o.bias };
    }
    function t(t, e, n) {
      var r, o, i, a, s, u, c;
      return {
        depthwise_conv:
          ((o = n + "/depthwise_conv"),
          (i = $e(l(9 * (r = t)), [3, 3, r, 1])),
          (a = He(l(r))),
          (s = He(l(r))),
          (u = He(l(r))),
          (c = He(l(r))),
          h.push(
            { paramPath: o + "/filters" },
            { paramPath: o + "/batch_norm_scale" },
            { paramPath: o + "/batch_norm_offset" },
            { paramPath: o + "/batch_norm_mean" },
            { paramPath: o + "/batch_norm_variance" }
          ),
          {
            filters: i,
            batch_norm_scale: a,
            batch_norm_offset: s,
            batch_norm_mean: u,
            batch_norm_variance: c,
          }),
        pointwise_conv: p(t, e, 1, n + "/pointwise_conv"),
      };
    }
    return {
      extractMobilenetV1Params: function () {
        return {
          conv_0: p(3, 32, 3, "mobilenetv1/conv_0"),
          conv_1: t(32, 64, "mobilenetv1/conv_1"),
          conv_2: t(64, 128, "mobilenetv1/conv_2"),
          conv_3: t(128, 128, "mobilenetv1/conv_3"),
          conv_4: t(128, 256, "mobilenetv1/conv_4"),
          conv_5: t(256, 256, "mobilenetv1/conv_5"),
          conv_6: t(256, 512, "mobilenetv1/conv_6"),
          conv_7: t(512, 512, "mobilenetv1/conv_7"),
          conv_8: t(512, 512, "mobilenetv1/conv_8"),
          conv_9: t(512, 512, "mobilenetv1/conv_9"),
          conv_10: t(512, 512, "mobilenetv1/conv_10"),
          conv_11: t(512, 512, "mobilenetv1/conv_11"),
          conv_12: t(512, 1024, "mobilenetv1/conv_12"),
          conv_13: t(1024, 1024, "mobilenetv1/conv_13"),
        };
      },
      extractPredictionLayerParams: function () {
        return {
          conv_0: p(1024, 256, 1, "prediction_layer/conv_0"),
          conv_1: p(256, 512, 3, "prediction_layer/conv_1"),
          conv_2: p(512, 128, 1, "prediction_layer/conv_2"),
          conv_3: p(128, 256, 3, "prediction_layer/conv_3"),
          conv_4: p(256, 128, 1, "prediction_layer/conv_4"),
          conv_5: p(128, 256, 3, "prediction_layer/conv_5"),
          conv_6: p(256, 64, 1, "prediction_layer/conv_6"),
          conv_7: p(64, 128, 3, "prediction_layer/conv_7"),
          box_predictor_0: {
            box_encoding_predictor: i(
              512,
              12,
              1,
              "prediction_layer/box_predictor_0/box_encoding_predictor"
            ),
            class_predictor: i(
              512,
              9,
              1,
              "prediction_layer/box_predictor_0/class_predictor"
            ),
          },
          box_predictor_1: {
            box_encoding_predictor: i(
              1024,
              24,
              1,
              "prediction_layer/box_predictor_1/box_encoding_predictor"
            ),
            class_predictor: i(
              1024,
              18,
              1,
              "prediction_layer/box_predictor_1/class_predictor"
            ),
          },
          box_predictor_2: {
            box_encoding_predictor: i(
              512,
              24,
              1,
              "prediction_layer/box_predictor_2/box_encoding_predictor"
            ),
            class_predictor: i(
              512,
              18,
              1,
              "prediction_layer/box_predictor_2/class_predictor"
            ),
          },
          box_predictor_3: {
            box_encoding_predictor: i(
              256,
              24,
              1,
              "prediction_layer/box_predictor_3/box_encoding_predictor"
            ),
            class_predictor: i(
              256,
              18,
              1,
              "prediction_layer/box_predictor_3/class_predictor"
            ),
          },
          box_predictor_4: {
            box_encoding_predictor: i(
              256,
              24,
              1,
              "prediction_layer/box_predictor_4/box_encoding_predictor"
            ),
            class_predictor: i(
              256,
              18,
              1,
              "prediction_layer/box_predictor_4/class_predictor"
            ),
          },
          box_predictor_5: {
            box_encoding_predictor: i(
              128,
              24,
              1,
              "prediction_layer/box_predictor_5/box_encoding_predictor"
            ),
            class_predictor: i(
              128,
              18,
              1,
              "prediction_layer/box_predictor_5/class_predictor"
            ),
          },
        };
      },
    };
  }
  function Lf(t) {
    var e = [],
      n = (function (t, e) {
        var i = ep(t, e);
        function a(t, e, n) {
          return {
            filters: i(
              t + "/Conv2d_" + e + "_pointwise/weights",
              4,
              n + "/filters"
            ),
            batch_norm_offset: i(
              t + "/Conv2d_" + e + "_pointwise/convolution_bn_offset",
              1,
              n + "/batch_norm_offset"
            ),
          };
        }
        function n(t) {
          var e = "mobilenetv1/conv_" + t,
            n = "MobilenetV1/Conv2d_" + t + "_depthwise",
            r = e + "/depthwise_conv",
            o = e + "/pointwise_conv";
          return {
            depthwise_conv: {
              filters: i(n + "/depthwise_weights", 4, r + "/filters"),
              batch_norm_scale: i(
                n + "/BatchNorm/gamma",
                1,
                r + "/batch_norm_scale"
              ),
              batch_norm_offset: i(
                n + "/BatchNorm/beta",
                1,
                r + "/batch_norm_offset"
              ),
              batch_norm_mean: i(
                n + "/BatchNorm/moving_mean",
                1,
                r + "/batch_norm_mean"
              ),
              batch_norm_variance: i(
                n + "/BatchNorm/moving_variance",
                1,
                r + "/batch_norm_variance"
              ),
            },
            pointwise_conv: a("MobilenetV1", t, o),
          };
        }
        function r(t, e) {
          return {
            filters: i(t + "/weights", 4, e + "/filters"),
            bias: i(t + "/biases", 1, e + "/bias"),
          };
        }
        function o(t) {
          return {
            box_encoding_predictor: r(
              "Prediction/BoxPredictor_" + t + "/BoxEncodingPredictor",
              "prediction_layer/box_predictor_" + t + "/box_encoding_predictor"
            ),
            class_predictor: r(
              "Prediction/BoxPredictor_" + t + "/ClassPredictor",
              "prediction_layer/box_predictor_" + t + "/class_predictor"
            ),
          };
        }
        return {
          extractMobilenetV1Params: function () {
            return {
              conv_0: a("MobilenetV1", 0, "mobilenetv1/conv_0"),
              conv_1: n(1),
              conv_2: n(2),
              conv_3: n(3),
              conv_4: n(4),
              conv_5: n(5),
              conv_6: n(6),
              conv_7: n(7),
              conv_8: n(8),
              conv_9: n(9),
              conv_10: n(10),
              conv_11: n(11),
              conv_12: n(12),
              conv_13: n(13),
            };
          },
          extractPredictionLayerParams: function () {
            return {
              conv_0: a("Prediction", 0, "prediction_layer/conv_0"),
              conv_1: a("Prediction", 1, "prediction_layer/conv_1"),
              conv_2: a("Prediction", 2, "prediction_layer/conv_2"),
              conv_3: a("Prediction", 3, "prediction_layer/conv_3"),
              conv_4: a("Prediction", 4, "prediction_layer/conv_4"),
              conv_5: a("Prediction", 5, "prediction_layer/conv_5"),
              conv_6: a("Prediction", 6, "prediction_layer/conv_6"),
              conv_7: a("Prediction", 7, "prediction_layer/conv_7"),
              box_predictor_0: o(0),
              box_predictor_1: o(1),
              box_predictor_2: o(2),
              box_predictor_3: o(3),
              box_predictor_4: o(4),
              box_predictor_5: o(5),
            };
          },
        };
      })(t, e),
      r = n.extractMobilenetV1Params,
      o = n.extractPredictionLayerParams,
      i = t["Output/extra_dim"];
    if (
      (e.push({
        originalPath: "Output/extra_dim",
        paramPath: "output_layer/extra_dim",
      }),
      !fh(i))
    )
      throw new Error(
        "expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have " +
          i
      );
    var a = {
      mobilenetv1: r(),
      prediction_layer: o(),
      output_layer: { extra_dim: i },
    };
    return Xh(t, e), { params: a, paramMappings: e };
  }
  function Bf(e, n, r) {
    return ue(function () {
      var t = Ss(e, n.filters, r, "same");
      return (t = xu(t, n.batch_norm_offset)), Sa(t, 0, 6);
    });
  }
  var Wf = 0.0010000000474974513;
  function zf(t, e) {
    return ue(function () {
      var u = null,
        c = Bf(t, e.conv_0, [2, 2]);
      if (
        ([
          e.conv_1,
          e.conv_2,
          e.conv_3,
          e.conv_4,
          e.conv_5,
          e.conv_6,
          e.conv_7,
          e.conv_8,
          e.conv_9,
          e.conv_10,
          e.conv_11,
          e.conv_12,
          e.conv_13,
        ].forEach(function (t, e) {
          var n,
            r,
            o,
            i,
            a = e + 1,
            s =
              ((n = a),
              [2, 4, 6, 12].some(function (t) {
                return t === n;
              })
                ? [2, 2]
                : [1, 1]);
          (r = c),
            (o = t.depthwise_conv),
            (i = s),
            (c = Bf(
              (c = ue(function () {
                var t = ks(r, o.filters, i, "same");
                return (
                  (t = us(
                    t,
                    o.batch_norm_mean,
                    o.batch_norm_variance,
                    o.batch_norm_offset,
                    o.batch_norm_scale,
                    Wf
                  )),
                  Sa(t, 0, 6)
                );
              })),
              t.pointwise_conv,
              [1, 1]
            )),
            11 === a && (u = c);
        }),
        null === u)
      )
        throw new Error("mobileNetV1 - output of conv layer 11 is null");
      return { out: c, conv11: u };
    });
  }
  function Uf(t, e, n) {
    var r = t.arraySync(),
      o = Math.min(r[e][0], r[e][2]),
      i = Math.min(r[e][1], r[e][3]),
      a = Math.max(r[e][0], r[e][2]),
      s = Math.max(r[e][1], r[e][3]),
      u = Math.min(r[n][0], r[n][2]),
      c = Math.min(r[n][1], r[n][3]),
      l = Math.max(r[n][0], r[n][2]),
      h = Math.max(r[n][1], r[n][3]),
      p = (a - o) * (s - i),
      f = (l - u) * (h - c);
    if (p <= 0 || f <= 0) return 0;
    var d = Math.max(o, u),
      v = Math.max(i, c),
      m = Math.min(a, l),
      g = Math.min(s, h),
      y = Math.max(m - d, 0) * Math.max(g - v, 0);
    return y / (p + f - y);
  }
  function Gf(t, e) {
    var n,
      r,
      o =
        ((n = ha(Qu(t, [1, 0]))),
        {
          sizes: (r = [Bu(n[2], n[0]), Bu(n[3], n[1])]),
          centers: [xu(n[0], Cu(r[0], Ve(2))), xu(n[1], Cu(r[1], Ve(2)))],
        }),
      i = o.sizes,
      a = o.centers,
      s = ha(Qu(e, [1, 0])),
      u = Cu(Du(Ia(Cu(s[2], Ve(5))), i[0]), Ve(2)),
      c = xu(Du(Cu(s[0], Ve(10)), i[0]), a[0]),
      l = Cu(Du(Ia(Cu(s[3], Ve(5))), i[1]), Ve(2)),
      h = xu(Du(Cu(s[1], Ve(10)), i[1]), a[1]);
    return Qu(ua([Bu(c, u), Bu(h, l), xu(c, u), xu(h, l)]), [1, 0]);
  }
  function Vf(e, n) {
    return ue(function () {
      var t = e.shape[0];
      return {
        boxPredictionEncoding: ia(Kh(e, n.box_encoding_predictor), [
          t,
          -1,
          1,
          4,
        ]),
        classPrediction: ia(Kh(e, n.class_predictor), [t, -1, 3]),
      };
    });
  }
  var Hf = (function () {
      function t(t) {
        var e = void 0 === t ? {} : t,
          n = e.minConfidence,
          r = e.maxResults;
        if (
          ((this._name = "SsdMobilenetv1Options"),
          (this._minConfidence = n || 0.5),
          (this._maxResults = r || 100),
          "number" != typeof this._minConfidence ||
            this._minConfidence <= 0 ||
            1 <= this._minConfidence)
        )
          throw new Error(
            this._name +
              " - expected minConfidence to be a number between 0 and 1"
          );
        if ("number" != typeof this._maxResults)
          throw new Error(this._name + " - expected maxResults to be a number");
      }
      return (
        Object.defineProperty(t.prototype, "minConfidence", {
          get: function () {
            return this._minConfidence;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "maxResults", {
          get: function () {
            return this._maxResults;
          },
          enumerable: !0,
          configurable: !0,
        }),
        t
      );
    })(),
    qf = (function (t) {
      function e() {
        return t.call(this, "SsdMobilenetv1") || this;
      }
      return (
        a(e, t),
        (e.prototype.forwardInput = function (u) {
          var c = this.params;
          if (!c)
            throw new Error("SsdMobilenetv1 - load model before inference");
          return ue(function () {
            var l,
              h,
              p,
              o,
              i,
              a,
              t = u.toBatchTensor(512, !1).toFloat(),
              e = zf(Bu(Du(t, Ve(0.007843137718737125)), Ve(1)), c.mobilenetv1),
              n =
                ((l = e.out),
                (h = e.conv11),
                (p = c.prediction_layer),
                ue(function () {
                  var t = Bf(Bf(l, p.conv_0, [1, 1]), p.conv_1, [2, 2]),
                    e = Bf(Bf(t, p.conv_2, [1, 1]), p.conv_3, [2, 2]),
                    n = Bf(Bf(e, p.conv_4, [1, 1]), p.conv_5, [2, 2]),
                    r = Bf(Bf(n, p.conv_6, [1, 1]), p.conv_7, [2, 2]),
                    o = Vf(h, p.box_predictor_0),
                    i = Vf(l, p.box_predictor_1),
                    a = Vf(t, p.box_predictor_2),
                    s = Vf(e, p.box_predictor_3),
                    u = Vf(n, p.box_predictor_4),
                    c = Vf(r, p.box_predictor_5);
                  return {
                    boxPredictions: _i(
                      [
                        o.boxPredictionEncoding,
                        i.boxPredictionEncoding,
                        a.boxPredictionEncoding,
                        s.boxPredictionEncoding,
                        u.boxPredictionEncoding,
                        c.boxPredictionEncoding,
                      ],
                      1
                    ),
                    classPredictions: _i(
                      [
                        o.classPrediction,
                        i.classPrediction,
                        a.classPrediction,
                        s.classPrediction,
                        u.classPrediction,
                        c.classPrediction,
                      ],
                      1
                    ),
                  };
                })),
              r = n.boxPredictions,
              s = n.classPredictions;
            return (
              (o = r),
              (i = s),
              (a = c.output_layer),
              ue(function () {
                var t = o.shape[0],
                  e = Gf(
                    ia(ca(a.extra_dim, [t, 1, 1]), [-1, 4]),
                    ia(o, [-1, 4])
                  );
                e = ia(e, [t, e.shape[0] / t, 4]);
                var n = Wa(Hs(i, [0, 0, 1], [-1, -1, -1])),
                  r = Hs(n, [0, 0, 0], [-1, -1, 1]);
                return (
                  (r = ia(r, [t, r.shape[1]])), { boxes: ha(e), scores: ha(r) }
                );
              })
            );
          });
        }),
        (e.prototype.forward = function (n) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = this.forwardInput), [4, yp(n)];
                case 1:
                  return [2, e.apply(this, [t.sent()])];
              }
            });
          });
        }),
        (e.prototype.locateFaces = function (T, A) {
          return (
            void 0 === A && (A = {}),
            p(this, void 0, void 0, function () {
              var l, h, p, f, d, v, m, g, y, x, w, b, E, C, _, S, R, N, k, I;
              return P(this, function (t) {
                switch (t.label) {
                  case 0:
                    return (
                      (l = new Hf(A)),
                      (h = l.maxResults),
                      (p = l.minConfidence),
                      [4, yp(T)]
                    );
                  case 1:
                    for (
                      f = t.sent(),
                        d = this.forwardInput(f),
                        v = d.boxes,
                        m = d.scores,
                        g = v[0],
                        y = m[0],
                        x = 1;
                      x < v.length;
                      x++
                    )
                      v[x].dispose(), m[x].dispose();
                    return (E = (b = Array).from), [4, y.data()];
                  case 2:
                    return (
                      (w = E.apply(b, [t.sent()])),
                      (e = w),
                      (n = h),
                      (i = 0.5),
                      (a = p),
                      (r = (o = g).shape[0]),
                      (s = Math.min(n, r)),
                      (u = e
                        .map(function (t, e) {
                          return { score: t, boxIndex: e };
                        })
                        .filter(function (t) {
                          return t.score > a;
                        })
                        .sort(function (t, e) {
                          return e.score - t.score;
                        })),
                      (c = []),
                      u.forEach(function (t) {
                        if (!(c.length >= s)) {
                          for (var e = t.score, n = c.length - 1; 0 <= n; --n) {
                            var r = Uf(o, t.boxIndex, c[n]);
                            if (
                              0 !== r &&
                              ((t.score *= r <= i ? 1 : 0), t.score <= a)
                            )
                              break;
                          }
                          e === t.score && c.push(t.boxIndex);
                        }
                      }),
                      (C = c),
                      (_ = f.getReshapedInputDimensions(0)),
                      (S = f.inputSize),
                      (R = S / _.width),
                      (N = S / _.height),
                      (k = g.arraySync()),
                      (I = C.map(function (t) {
                        var e = [
                            Math.max(0, k[t][0]),
                            Math.min(1, k[t][2]),
                          ].map(function (t) {
                            return t * N;
                          }),
                          n = e[0],
                          r = e[1],
                          o = [Math.max(0, k[t][1]), Math.min(1, k[t][3])].map(
                            function (t) {
                              return t * R;
                            }
                          ),
                          i = o[0],
                          a = o[1];
                        return new Lp(w[t], new Th(i, n, a - i, r - n), {
                          height: f.getInputHeight(0),
                          width: f.getInputWidth(0),
                        });
                      })),
                      g.dispose(),
                      y.dispose(),
                      [2, I]
                    );
                }
                var o, e, n, i, a, r, s, u, c;
              });
            })
          );
        }),
        (e.prototype.getDefaultModelName = function () {
          return "ssd_mobilenetv1_model";
        }),
        (e.prototype.extractParamsFromWeigthMap = function (t) {
          return Lf(t);
        }),
        (e.prototype.extractParams = function (t) {
          return (function (t) {
            var e = [],
              n = np(t),
              r = n.extractWeights,
              o = n.getRemainingWeights,
              i = Ff(r, e),
              a = i.extractMobilenetV1Params,
              s = i.extractPredictionLayerParams,
              u = a(),
              c = s(),
              l = { extra_dim: je(r(20472), [1, 5118, 4]) };
            if (
              (e.push({ paramPath: "output_layer/extra_dim" }),
              0 !== o().length)
            )
              throw new Error("weights remaing after extract: " + o().length);
            return {
              params: { mobilenetv1: u, prediction_layer: c, output_layer: l },
              paramMappings: e,
            };
          })(t);
        }),
        e
      );
    })(xp);
  function jf(t) {
    var e = new qf();
    return e.extractWeights(t), e;
  }
  var $f = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return a(e, t), e;
    })(qf),
    Kf = (function (e) {
      function t() {
        var t = (null !== e && e.apply(this, arguments)) || this;
        return (t._name = "TinyFaceDetectorOptions"), t;
      }
      return a(t, e), t;
    })(Mp),
    Xf = (function () {
      function t() {}
      return (
        (t.prototype.then = function (n) {
          return p(this, void 0, void 0, function () {
            var e;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (e = n), [4, this.run()];
                case 1:
                  return [2, e.apply(void 0, [t.sent()])];
              }
            });
          });
        }),
        (t.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            return P(this, function (t) {
              throw new Error("ComposableTask - run is not implemented");
            });
          });
        }),
        t
      );
    })();
  function Yf(a, s, u, c, l) {
    return (
      void 0 === l &&
        (l = function (t) {
          return t.alignedRect;
        }),
      p(this, void 0, void 0, function () {
        var e, n, r, o, i;
        return P(this, function (t) {
          switch (t.label) {
            case 0:
              return (
                (e = a.map(function (t) {
                  return rf(t) ? l(t) : t.detection;
                })),
                (r = c) ? [3, 5] : s instanceof dt ? [4, wf(s, e)] : [3, 2]
              );
            case 1:
              return (o = t.sent()), [3, 4];
            case 2:
              return [4, xf(s, e)];
            case 3:
              (o = t.sent()), (t.label = 4);
            case 4:
              (r = o), (t.label = 5);
            case 5:
              return [4, u((n = r))];
            case 6:
              return (
                (i = t.sent()),
                n.forEach(function (t) {
                  return t instanceof dt && t.dispose();
                }),
                [2, i]
              );
          }
        });
      })
    );
  }
  function Qf(e, r, o, i, a) {
    return p(this, void 0, void 0, function () {
      var n = this;
      return P(this, function (t) {
        return [
          2,
          Yf(
            [e],
            r,
            function (e) {
              return p(n, void 0, void 0, function () {
                return P(this, function (t) {
                  return [2, o(e[0])];
                });
              });
            },
            i,
            a
          ),
        ];
      });
    });
  }
  var Jf = 2,
    Zf = 12;
  function td(t) {
    var e = np(t),
      n = e.extractWeights,
      r = e.getRemainingWeights,
      o = [],
      i = (function (r, o) {
        var u = Yh(r, o),
          c = Qh(r, o);
        function l(t, e) {
          var n = He(r(t));
          return o.push({ paramPath: e }), n;
        }
        function h(t, e, n) {
          return (
            void 0 === n && (n = !1),
            {
              conv1: u(t[0], t[1], 3, e + "/conv1"),
              prelu1_alpha: l(t[1], e + "/prelu1_alpha"),
              conv2: u(t[1], t[2], 3, e + "/conv2"),
              prelu2_alpha: l(t[2], e + "/prelu2_alpha"),
              conv3: u(t[2], t[3], n ? 2 : 3, e + "/conv3"),
              prelu3_alpha: l(t[3], e + "/prelu3_alpha"),
            }
          );
        }
        return {
          extractPNetParams: function () {
            var t = h([3, 10, 16, 32], "pnet"),
              e = u(32, 2, 1, "pnet/conv4_1"),
              n = u(32, 4, 1, "pnet/conv4_2");
            return O({}, t, { conv4_1: e, conv4_2: n });
          },
          extractRNetParams: function () {
            var t = h([3, 28, 48, 64], "rnet", !0),
              e = c(576, 128, "rnet/fc1"),
              n = l(128, "rnet/prelu4_alpha"),
              r = c(128, 2, "rnet/fc2_1"),
              o = c(128, 4, "rnet/fc2_2");
            return O({}, t, { fc1: e, prelu4_alpha: n, fc2_1: r, fc2_2: o });
          },
          extractONetParams: function () {
            var t = h([3, 32, 64, 64], "onet"),
              e = u(64, 128, 2, "onet/conv4"),
              n = l(128, "onet/prelu4_alpha"),
              r = c(1152, 256, "onet/fc1"),
              o = l(256, "onet/prelu5_alpha"),
              i = c(256, 2, "onet/fc2_1"),
              a = c(256, 4, "onet/fc2_2"),
              s = c(256, 10, "onet/fc2_3");
            return O({}, t, {
              conv4: e,
              prelu4_alpha: n,
              fc1: r,
              prelu5_alpha: o,
              fc2_1: i,
              fc2_2: a,
              fc2_3: s,
            });
          },
        };
      })(n, o),
      a = i.extractPNetParams,
      s = i.extractRNetParams,
      u = i.extractONetParams,
      c = a(),
      l = s(),
      h = u();
    if (0 !== r().length)
      throw new Error("weights remaing after extract: " + r().length);
    return { params: { pnet: c, rnet: l, onet: h }, paramMappings: o };
  }
  function ed(t) {
    var e = [],
      n = (function (t, e) {
        var n = ep(t, e);
        function u(t) {
          return {
            filters: n(t + "/weights", 4, t + "/filters"),
            bias: n(t + "/bias", 1),
          };
        }
        function c(t) {
          return { weights: n(t + "/weights", 2), bias: n(t + "/bias", 1) };
        }
        function l(t) {
          return n(t, 1);
        }
        function h(t) {
          return {
            conv1: u(t + "/conv1"),
            prelu1_alpha: l(t + "/prelu1_alpha"),
            conv2: u(t + "/conv2"),
            prelu2_alpha: l(t + "/prelu2_alpha"),
            conv3: u(t + "/conv3"),
            prelu3_alpha: l(t + "/prelu3_alpha"),
          };
        }
        return {
          extractPNetParams: function () {
            var t = h("pnet"),
              e = u("pnet/conv4_1"),
              n = u("pnet/conv4_2");
            return O({}, t, { conv4_1: e, conv4_2: n });
          },
          extractRNetParams: function () {
            var t = h("rnet"),
              e = c("rnet/fc1"),
              n = l("rnet/prelu4_alpha"),
              r = c("rnet/fc2_1"),
              o = c("rnet/fc2_2");
            return O({}, t, { fc1: e, prelu4_alpha: n, fc2_1: r, fc2_2: o });
          },
          extractONetParams: function () {
            var t = h("onet"),
              e = u("onet/conv4"),
              n = l("onet/prelu4_alpha"),
              r = c("onet/fc1"),
              o = l("onet/prelu5_alpha"),
              i = c("onet/fc2_1"),
              a = c("onet/fc2_2"),
              s = c("onet/fc2_3");
            return O({}, t, {
              conv4: e,
              prelu4_alpha: n,
              fc1: r,
              prelu5_alpha: o,
              fc2_1: i,
              fc2_2: a,
              fc2_3: s,
            });
          },
        };
      })(t, e),
      r = n.extractPNetParams,
      o = n.extractRNetParams,
      i = n.extractONetParams,
      a = r(),
      s = o(),
      u = i();
    return (
      Xh(t, e), { params: { pnet: a, rnet: s, onet: u }, paramMappings: e }
    );
  }
  function nd(t, e) {
    var n = e[0],
      r = e[1];
    return { height: Math.floor(n * t), width: Math.floor(r * t) };
  }
  var rd = (function (o) {
    function t(t, e, n, r) {
      return o.call(this, { left: t, top: e, right: n, bottom: r }, !0) || this;
    }
    return a(t, o), t;
  })(Sh);
  function od(t) {
    return ue(function () {
      return Du(Bu(t, Ve(127.5)), Ve(0.0078125));
    });
  }
  function id(t, e) {
    return ue(function () {
      return xu(Xu(t), Du(e, Pa(Xu(Pa(t)))));
    });
  }
  function ad(e, n, r) {
    return (
      void 0 === r && (r = !1),
      ue(function () {
        var t = Kh(e, n.conv1, "valid");
        return (
          (t = id(t, n.prelu1_alpha)),
          (t = id(
            (t = Kh(
              (t = Us(t, r ? [2, 2] : [3, 3], [2, 2], "same")),
              n.conv2,
              "valid"
            )),
            n.prelu2_alpha
          )),
          (t = id(
            (t = Kh(
              (t = r ? t : Us(t, [3, 3], [2, 2], "valid")),
              n.conv3,
              "valid"
            )),
            n.prelu3_alpha
          ))
        );
      })
    );
  }
  function sd(h, t, u, p, c) {
    c.stage1 = [];
    var e = t
        .map(function (l) {
          return ue(function () {
            var o,
              i,
              r,
              a,
              t = { scale: l },
              e =
                ((o = h),
                (i = l),
                ue(function () {
                  var t = nd(i, o.shape.slice(1)),
                    e = t.height,
                    n = t.width,
                    r = od(Wc.resizeBilinear(o, [e, n]));
                  return Qu(r, [0, 2, 1, 3]);
                })),
              n = Date.now(),
              s =
                ((r = e),
                (a = p),
                ue(function () {
                  var t = ad(r, a, !0),
                    e = Kh(t, a.conv4_1, "valid"),
                    n = $i(eu(e, 3), 3);
                  return {
                    prob: Le(Bu(e, n), 3),
                    regions: Kh(t, a.conv4_2, "valid"),
                  };
                })),
              u = s.prob,
              c = s.regions;
            return (
              (t.pnet = Date.now() - n),
              {
                scoresTensor: ha(ha(u, 3)[1])[0],
                regionsTensor: ha(c)[0],
                scale: l,
                statsForScale: t,
              }
            );
          });
        })
        .map(function (t) {
          var e = t.scoresTensor,
            n = t.regionsTensor,
            r = t.scale,
            o = t.statsForScale,
            i = (function (t, o, i, e) {
              for (var n = [], a = t.arraySync(), r = 0; r < t.shape[0]; r++)
                for (var s = 0; s < t.shape[1]; s++)
                  a[r][s] >= e && n.push(new lh(s, r));
              return n.map(function (t) {
                var e = new Rh(
                    Math.round((t.y * Jf + 1) / i),
                    Math.round((t.x * Jf + 1) / i),
                    Math.round((t.y * Jf + Zf) / i),
                    Math.round((t.x * Jf + Zf) / i)
                  ),
                  n = a[t.y][t.x],
                  r = o.arraySync();
                return {
                  cell: e,
                  score: n,
                  region: new rd(
                    r[t.y][t.x][0],
                    r[t.y][t.x][1],
                    r[t.y][t.x][2],
                    r[t.y][t.x][3]
                  ),
                };
              });
            })(e, n, r, u);
          if ((e.dispose(), n.dispose(), !i.length))
            return c.stage1.push(o), [];
          var a = Date.now(),
            s = bp(
              i.map(function (t) {
                return t.cell;
              }),
              i.map(function (t) {
                return t.score;
              }),
              0.5
            );
          return (
            (o.nms = Date.now() - a),
            (o.numBoxes = s.length),
            c.stage1.push(o),
            s.map(function (t) {
              return i[t];
            })
          );
        })
        .reduce(function (t, e) {
          return t.concat(e);
        }, []),
      n = [],
      r = [];
    if (0 < e.length) {
      var o = Date.now(),
        i = bp(
          e.map(function (t) {
            return t.cell;
          }),
          e.map(function (t) {
            return t.score;
          }),
          0.7
        );
      (c.stage1_nms = Date.now() - o),
        (r = i.map(function (t) {
          return e[t].score;
        })),
        (n = i
          .map(function (t) {
            return e[t];
          })
          .map(function (t) {
            var e = t.cell,
              n = t.region;
            return new Rh(
              e.left + n.left * e.width,
              e.top + n.top * e.height,
              e.right + n.right * e.width,
              e.bottom + n.bottom * e.height
            )
              .toSquare()
              .round();
          }));
    }
    return { boxes: n, scores: r };
  }
  function ud(h, r, t) {
    var a = t.width,
      s = t.height;
    return p(this, void 0, void 0, function () {
      var l,
        e,
        i,
        n = this;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return (
              (l = Gh(h)),
              [
                4,
                Promise.all(
                  r.map(function (c) {
                    return p(n, void 0, void 0, function () {
                      var e, n, r, o, i, a, s, u;
                      return P(this, function (t) {
                        return (
                          (e = c.padAtBorders(h.height, h.width)),
                          (n = e.y),
                          (r = e.ey),
                          (o = e.x),
                          (i = e.ex),
                          (a = o - 1),
                          (s = n - 1),
                          (u = l.getImageData(a, s, i - a, r - s)),
                          [2, zh.isNodejs() ? cp(u) : createImageBitmap(u)]
                        );
                      });
                    });
                  })
                ),
              ]
            );
          case 1:
            return (
              (e = t.sent()),
              (i = []),
              e.forEach(function (t) {
                var e = Gh(up({ width: a, height: s }));
                e.drawImage(t, 0, 0, a, s);
                for (
                  var n = e.getImageData(0, 0, a, s).data, r = [], o = 0;
                  o < n.length;
                  o += 4
                )
                  r.push(n[o + 2]), r.push(n[o + 1]), r.push(n[o]);
                i.push(r);
              }),
              [
                2,
                i.map(function (t) {
                  return ue(function () {
                    return od(Qu($e(t, [1, a, s, 3]), [0, 2, 1, 3]).toFloat());
                  });
                }),
              ]
            );
        }
      });
    });
  }
  function cd(v, m, g, y, x) {
    return p(this, void 0, void 0, function () {
      var e, n, r, o, i, a, s, u, c, l, h, p, f, d;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return (e = Date.now()), [4, ud(v, m, { width: 24, height: 24 })];
          case 1:
            return (
              (n = t.sent()),
              (x.stage2_extractImagePatches = Date.now() - e),
              (e = Date.now()),
              (r = n.map(function (t) {
                var a,
                  s,
                  e =
                    ((a = t),
                    (s = y),
                    ue(function () {
                      var t = ad(a, s),
                        e = id(
                          $p(
                            ia(t, [t.shape[0], s.fc1.weights.shape[0]]),
                            s.fc1
                          ),
                          s.prelu4_alpha
                        ),
                        n = $p(e, s.fc2_1),
                        r = $i(eu(n, 1), 1),
                        o = Le(Bu(n, r), 1),
                        i = $p(e, s.fc2_2);
                      return { scores: ha(o, 1)[1], regions: i };
                    }));
                return t.dispose(), e;
              })),
              (x.stage2_rnet = Date.now() - e),
              (o =
                1 < r.length
                  ? _i(
                      r.map(function (t) {
                        return t.scores;
                      })
                    )
                  : r[0].scores),
              (s = (a = Array).from),
              [4, o.data()]
            );
          case 2:
            return (
              (i = s.apply(a, [t.sent()])),
              o.dispose(),
              (u = i
                .map(function (t, e) {
                  return { score: t, idx: e };
                })
                .filter(function (t) {
                  return t.score > g;
                })
                .map(function (t) {
                  return t.idx;
                })),
              (c = u.map(function (t) {
                return m[t];
              })),
              (l = u.map(function (t) {
                return i[t];
              })),
              (h = []),
              (p = []),
              0 < c.length &&
                ((e = Date.now()),
                (f = bp(c, l, 0.7)),
                (x.stage2_nms = Date.now() - e),
                (d = f.map(function (t) {
                  var e = r[u[t]].regions.arraySync();
                  return new rd(e[0][0], e[0][1], e[0][2], e[0][3]);
                })),
                (p = f.map(function (t) {
                  return l[t];
                })),
                (h = f.map(function (t, e) {
                  return c[t].calibrate(d[e]);
                }))),
              r.forEach(function (t) {
                t.regions.dispose(), t.scores.dispose();
              }),
              [2, { boxes: h, scores: p }]
            );
        }
      });
    });
  }
  function ld(m, g, y, x, w) {
    return p(this, void 0, void 0, function () {
      var e, n, i, r, o, a, s, u, c, l, h, p, f, d, v;
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return (e = Date.now()), [4, ud(m, g, { width: 48, height: 48 })];
          case 1:
            return (
              (n = t.sent()),
              (w.stage3_extractImagePatches = Date.now() - e),
              (e = Date.now()),
              (i = n.map(function (t) {
                var s,
                  u,
                  e =
                    ((s = t),
                    (u = x),
                    ue(function () {
                      var t = ad(s, u);
                      t = id(
                        (t = Kh(
                          (t = Us(t, [2, 2], [2, 2], "same")),
                          u.conv4,
                          "valid"
                        )),
                        u.prelu4_alpha
                      );
                      var e = id(
                          $p(
                            ia(t, [t.shape[0], u.fc1.weights.shape[0]]),
                            u.fc1
                          ),
                          u.prelu5_alpha
                        ),
                        n = $p(e, u.fc2_1),
                        r = $i(eu(n, 1), 1),
                        o = Le(Bu(n, r), 1),
                        i = $p(e, u.fc2_2),
                        a = $p(e, u.fc2_3);
                      return { scores: ha(o, 1)[1], regions: i, points: a };
                    }));
                return t.dispose(), e;
              })),
              (w.stage3_onet = Date.now() - e),
              (r =
                1 < i.length
                  ? _i(
                      i.map(function (t) {
                        return t.scores;
                      })
                    )
                  : i[0].scores),
              (s = (a = Array).from),
              [4, r.data()]
            );
          case 2:
            return (
              (o = s.apply(a, [t.sent()])),
              r.dispose(),
              (u = o
                .map(function (t, e) {
                  return { score: t, idx: e };
                })
                .filter(function (t) {
                  return t.score > y;
                })
                .map(function (t) {
                  return t.idx;
                })),
              (c = u.map(function (t) {
                var e = i[t].regions.arraySync();
                return new rd(e[0][0], e[0][1], e[0][2], e[0][3]);
              })),
              (l = u.map(function (t, e) {
                return g[t].calibrate(c[e]);
              })),
              (h = u.map(function (t) {
                return o[t];
              })),
              (p = []),
              (f = []),
              (d = []),
              0 < l.length &&
                ((e = Date.now()),
                (v = bp(l, h, 0.7, !1)),
                (w.stage3_nms = Date.now() - e),
                (p = v.map(function (t) {
                  return l[t];
                })),
                (f = v.map(function (t) {
                  return h[t];
                })),
                (d = v.map(function (r, o) {
                  return Array(5)
                    .fill(0)
                    .map(function (t, e) {
                      var n = i[r].points.arraySync();
                      return new lh(
                        n[0][e] * (p[o].width + 1) + p[o].left,
                        n[0][e + 5] * (p[o].height + 1) + p[o].top
                      );
                    });
                }))),
              i.forEach(function (t) {
                t.regions.dispose(), t.scores.dispose(), t.points.dispose();
              }),
              [2, { boxes: p, scores: f, points: d }]
            );
        }
      });
    });
  }
  var hd = (function (t) {
      function e() {
        return t.call(this, "Mtcnn") || this;
      }
      return (
        a(e, t),
        (e.prototype.forwardInput = function (E, C) {
          return (
            void 0 === C && (C = {}),
            p(this, void 0, void 0, function () {
              var e, n, r, o, i, a, s, u, c, l, h, p, f, d, v, m, g, y, x, w, b;
              return P(this, function (t) {
                switch (t.label) {
                  case 0:
                    if (!(e = this.params))
                      throw new Error("Mtcnn - load model before inference");
                    if (!(n = E.canvases[0]))
                      throw new Error(
                        "Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet."
                      );
                    return (
                      (r = {}),
                      (o = Date.now()),
                      (i = ue(function () {
                        return (
                          (t = $i(Bl.fromPixels(n)).toFloat()),
                          ue(function () {
                            return ua(ha(t, 3).reverse(), 3);
                          })
                        );
                        var t;
                      })),
                      (a = function (t) {
                        return i.dispose(), (r.total = Date.now() - o), t;
                      }),
                      (s = i.shape.slice(1)),
                      (u = s[0]),
                      (c = s[1]),
                      (l = new Pf(C)),
                      (h = l.minFaceSize),
                      (p = l.scaleFactor),
                      (f = l.maxNumScales),
                      (d = l.scoreThresholds),
                      (v = l.scaleSteps),
                      (m = (
                        v ||
                        (function (t, e, n) {
                          for (
                            var r = n[0],
                              o = n[1],
                              i = Zf / t,
                              a = [],
                              s = Math.min(r, o) * i,
                              u = 0;
                            12 <= s;

                          )
                            a.push(i * Math.pow(e, u)), (s *= e), (u += 1);
                          return a;
                        })(h, p, [u, c])
                      )
                        .filter(function (t) {
                          var e = nd(t, [u, c]);
                          return Math.min(e.width, e.height) > Zf;
                        })
                        .slice(0, f)),
                      (r.scales = m),
                      (r.pyramid = m.map(function (t) {
                        return nd(t, [u, c]);
                      })),
                      (g = Date.now()),
                      [4, sd(i, m, d[0], e.pnet, r)]
                    );
                  case 1:
                    return (
                      (y = t.sent()),
                      (r.total_stage1 = Date.now() - g),
                      y.boxes.length
                        ? ((r.stage2_numInputBoxes = y.boxes.length),
                          (g = Date.now()),
                          [4, cd(n, y.boxes, d[1], e.rnet, r)])
                        : [2, a({ results: [], stats: r })]
                    );
                  case 2:
                    return (
                      (x = t.sent()),
                      (r.total_stage2 = Date.now() - g),
                      x.boxes.length
                        ? ((r.stage3_numInputBoxes = x.boxes.length),
                          (g = Date.now()),
                          [4, ld(n, x.boxes, d[2], e.onet, r)])
                        : [2, a({ results: [], stats: r })]
                    );
                  case 3:
                    return (
                      (w = t.sent()),
                      (r.total_stage3 = Date.now() - g),
                      (b = w.boxes.map(function (e, t) {
                        return of(
                          Wp(
                            {},
                            new Lp(
                              w.scores[t],
                              new Th(
                                e.left / c,
                                e.top / u,
                                e.width / c,
                                e.height / u
                              ),
                              { height: u, width: c }
                            )
                          ),
                          new mf(
                            w.points[t].map(function (t) {
                              return t
                                .sub(new lh(e.left, e.top))
                                .div(new lh(e.width, e.height));
                            }),
                            { width: e.width, height: e.height }
                          )
                        );
                      })),
                      [2, a({ results: b, stats: r })]
                    );
                }
              });
            })
          );
        }),
        (e.prototype.forward = function (n, r) {
          return (
            void 0 === r && (r = {}),
            p(this, void 0, void 0, function () {
              var e;
              return P(this, function (t) {
                switch (t.label) {
                  case 0:
                    return (e = this.forwardInput), [4, yp(n)];
                  case 1:
                    return [4, e.apply(this, [t.sent(), r])];
                  case 2:
                    return [2, t.sent().results];
                }
              });
            })
          );
        }),
        (e.prototype.forwardWithStats = function (n, r) {
          return (
            void 0 === r && (r = {}),
            p(this, void 0, void 0, function () {
              var e;
              return P(this, function (t) {
                switch (t.label) {
                  case 0:
                    return (e = this.forwardInput), [4, yp(n)];
                  case 1:
                    return [2, e.apply(this, [t.sent(), r])];
                }
              });
            })
          );
        }),
        (e.prototype.getDefaultModelName = function () {
          return "mtcnn_model";
        }),
        (e.prototype.extractParamsFromWeigthMap = function (t) {
          return ed(t);
        }),
        (e.prototype.extractParams = function (t) {
          return td(t);
        }),
        e
      );
    })(xp),
    pd = [
      new lh(1.603231, 2.094468),
      new lh(6.041143, 7.080126),
      new lh(2.882459, 3.518061),
      new lh(4.266906, 5.178857),
      new lh(9.041765, 10.66308),
    ],
    fd = [117.001, 114.697, 97.404],
    dd = (function (e) {
      function t() {
        var t = {
          withSeparableConvs: !0,
          iouThreshold: 0.4,
          classes: ["face"],
          anchors: pd,
          meanRgb: fd,
          isFirstLayerConv2d: !0,
          filterSizes: [3, 16, 32, 64, 128, 256, 512],
        };
        return e.call(this, t) || this;
      }
      return (
        a(t, e),
        Object.defineProperty(t.prototype, "anchors", {
          get: function () {
            return this.config.anchors;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.locateFaces = function (e, n) {
          return p(this, void 0, void 0, function () {
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.detect(e, n)];
                case 1:
                  return [
                    2,
                    t.sent().map(function (t) {
                      return new Lp(t.score, t.relativeBox, {
                        width: t.imageWidth,
                        height: t.imageHeight,
                      });
                    }),
                  ];
              }
            });
          });
        }),
        (t.prototype.getDefaultModelName = function () {
          return "tiny_face_detector_model";
        }),
        (t.prototype.extractParamsFromWeigthMap = function (t) {
          return e.prototype.extractParamsFromWeigthMap.call(this, t);
        }),
        t
      );
    })(Op),
    vd = [
      new lh(0.738768, 0.874946),
      new lh(2.42204, 2.65704),
      new lh(4.30971, 7.04493),
      new lh(10.246, 4.59428),
      new lh(12.6868, 11.8741),
    ],
    md = [
      new lh(1.603231, 2.094468),
      new lh(6.041143, 7.080126),
      new lh(2.882459, 3.518061),
      new lh(4.266906, 5.178857),
      new lh(9.041765, 10.66308),
    ],
    gd = [117.001, 114.697, 97.404],
    yd = (function (n) {
      function t(t) {
        void 0 === t && (t = !0);
        var e = Object.assign(
          {},
          { withSeparableConvs: t, iouThreshold: 0.4, classes: ["face"] },
          t
            ? { anchors: md, meanRgb: gd }
            : { anchors: vd, withClassScores: !0 }
        );
        return n.call(this, e) || this;
      }
      return (
        a(t, n),
        Object.defineProperty(t.prototype, "withSeparableConvs", {
          get: function () {
            return this.config.withSeparableConvs;
          },
          enumerable: !0,
          configurable: !0,
        }),
        Object.defineProperty(t.prototype, "anchors", {
          get: function () {
            return this.config.anchors;
          },
          enumerable: !0,
          configurable: !0,
        }),
        (t.prototype.locateFaces = function (e, n) {
          return p(this, void 0, void 0, function () {
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.detect(e, n)];
                case 1:
                  return [
                    2,
                    t.sent().map(function (t) {
                      return new Lp(t.score, t.relativeBox, {
                        width: t.imageWidth,
                        height: t.imageHeight,
                      });
                    }),
                  ];
              }
            });
          });
        }),
        (t.prototype.getDefaultModelName = function () {
          return this.withSeparableConvs
            ? "tiny_yolov2_separable_conv_model"
            : "tiny_yolov2_model";
        }),
        (t.prototype.extractParamsFromWeigthMap = function (t) {
          return n.prototype.extractParamsFromWeigthMap.call(this, t);
        }),
        t
      );
    })(Op);
  var xd = {
      ssdMobilenetv1: new qf(),
      tinyFaceDetector: new dd(),
      tinyYolov2: new yd(),
      mtcnn: new hd(),
      faceLandmark68Net: new Ef(),
      faceLandmark68TinyNet: new _f(),
      faceRecognitionNet: new Mf(),
      faceExpressionNet: new Jp(),
      ageGenderNet: new vf(),
    },
    wd = function (t, e) {
      return xd.ssdMobilenetv1.locateFaces(t, e);
    },
    bd = function (t) {
      return xd.faceLandmark68Net.detectLandmarks(t);
    },
    Ed = function (t) {
      return xd.ssdMobilenetv1.load(t);
    },
    Cd = Ed,
    _d = wd,
    Sd = bd;
  function Rd(t, e) {
    var n = { age: e };
    return Object.assign({}, t, n);
  }
  function Nd(t, e, n) {
    var r = { gender: e, genderProbability: n };
    return Object.assign({}, t, r);
  }
  var kd = (function (o) {
      function t(t, e, n) {
        var r = o.call(this) || this;
        return (r.parentTask = t), (r.input = e), (r.extractedFaces = n), r;
      }
      return a(t, o), t;
    })(Xf),
    Id = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e,
              n,
              r = this;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return [
                    4,
                    Yf(
                      (e = t.sent()),
                      this.input,
                      function (e) {
                        return p(r, void 0, void 0, function () {
                          return P(this, function (t) {
                            switch (t.label) {
                              case 0:
                                return [
                                  4,
                                  Promise.all(
                                    e.map(function (t) {
                                      return xd.faceExpressionNet.predictExpressions(
                                        t
                                      );
                                    })
                                  ),
                                ];
                              case 1:
                                return [2, t.sent()];
                            }
                          });
                        });
                      },
                      this.extractedFaces
                    ),
                  ];
                case 2:
                  return (
                    (n = t.sent()),
                    [
                      2,
                      e.map(function (t, e) {
                        return tf(t, n[e]);
                      }),
                    ]
                  );
              }
            });
          });
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Od(this, this.input);
        }),
        e
      );
    })(kd),
    Td = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e, n;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return (e = t.sent())
                    ? [
                        4,
                        Qf(
                          e,
                          this.input,
                          function (t) {
                            return xd.faceExpressionNet.predictExpressions(t);
                          },
                          this.extractedFaces
                        ),
                      ]
                    : [2];
                case 2:
                  return (n = t.sent()), [2, tf(e, n)];
              }
            });
          });
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Pd(this, this.input);
        }),
        e
      );
    })(kd),
    Ad = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.withAgeAndGender = function () {
          return new Fd(this, this.input);
        }),
        (e.prototype.withFaceDescriptors = function () {
          return new Wd(this, this.input);
        }),
        e
      );
    })(Id),
    Dd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.withAgeAndGender = function () {
          return new Ld(this, this.input);
        }),
        (e.prototype.withFaceDescriptor = function () {
          return new zd(this, this.input);
        }),
        e
      );
    })(Td),
    Md = (function (o) {
      function t(t, e, n) {
        var r = o.call(this) || this;
        return (r.parentTask = t), (r.input = e), (r.extractedFaces = n), r;
      }
      return a(t, o), t;
    })(Xf),
    Od = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e,
              o,
              n = this;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return [
                    4,
                    Yf(
                      (e = t.sent()),
                      this.input,
                      function (e) {
                        return p(n, void 0, void 0, function () {
                          return P(this, function (t) {
                            switch (t.label) {
                              case 0:
                                return [
                                  4,
                                  Promise.all(
                                    e.map(function (t) {
                                      return xd.ageGenderNet.predictAgeAndGender(
                                        t
                                      );
                                    })
                                  ),
                                ];
                              case 1:
                                return [2, t.sent()];
                            }
                          });
                        });
                      },
                      this.extractedFaces
                    ),
                  ];
                case 2:
                  return (
                    (o = t.sent()),
                    [
                      2,
                      e.map(function (t, e) {
                        var n = o[e],
                          r = n.age;
                        return Rd(Nd(t, n.gender, n.genderProbability), r);
                      }),
                    ]
                  );
              }
            });
          });
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Id(this, this.input);
        }),
        e
      );
    })(Md),
    Pd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e, n, r, o, i;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return (e = t.sent())
                    ? [
                        4,
                        Qf(
                          e,
                          this.input,
                          function (t) {
                            return xd.ageGenderNet.predictAgeAndGender(t);
                          },
                          this.extractedFaces
                        ),
                      ]
                    : [2];
                case 2:
                  return (
                    (n = t.sent()),
                    (r = n.age),
                    (o = n.gender),
                    (i = n.genderProbability),
                    [2, Rd(Nd(e, o, i), r)]
                  );
              }
            });
          });
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Td(this, this.input);
        }),
        e
      );
    })(Md),
    Fd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.withFaceExpressions = function () {
          return new Ad(this, this.input);
        }),
        (e.prototype.withFaceDescriptors = function () {
          return new Wd(this, this.input);
        }),
        e
      );
    })(Od),
    Ld = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.withFaceExpressions = function () {
          return new Dd(this, this.input);
        }),
        (e.prototype.withFaceDescriptor = function () {
          return new zd(this, this.input);
        }),
        e
      );
    })(Pd),
    Bd = (function (r) {
      function t(t, e) {
        var n = r.call(this) || this;
        return (n.parentTask = t), (n.input = e), n;
      }
      return a(t, r), t;
    })(Xf),
    Wd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var n;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return [
                    4,
                    Yf(
                      (n = t.sent()),
                      this.input,
                      function (t) {
                        return Promise.all(
                          t.map(function (t) {
                            return xd.faceRecognitionNet.computeFaceDescriptor(
                              t
                            );
                          })
                        );
                      },
                      null,
                      function (t) {
                        return t.landmarks.align(null, {
                          useDlibAlignment: !0,
                        });
                      }
                    ),
                  ];
                case 2:
                  return [
                    2,
                    t.sent().map(function (t, e) {
                      return Of(n[e], t);
                    }),
                  ];
              }
            });
          });
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Ad(this, this.input);
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Fd(this, this.input);
        }),
        e
      );
    })(Bd),
    zd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e, n;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return (e = t.sent())
                    ? [
                        4,
                        Qf(
                          e,
                          this.input,
                          function (t) {
                            return xd.faceRecognitionNet.computeFaceDescriptor(
                              t
                            );
                          },
                          null,
                          function (t) {
                            return t.landmarks.align(null, {
                              useDlibAlignment: !0,
                            });
                          }
                        ),
                      ]
                    : [2];
                case 2:
                  return (n = t.sent()), [2, Of(e, n)];
              }
            });
          });
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Dd(this, this.input);
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Ld(this, this.input);
        }),
        e
      );
    })(Bd),
    Ud = (function (o) {
      function t(t, e, n) {
        var r = o.call(this) || this;
        return (r.parentTask = t), (r.input = e), (r.useTinyLandmarkNet = n), r;
      }
      return (
        a(t, o),
        Object.defineProperty(t.prototype, "landmarkNet", {
          get: function () {
            return this.useTinyLandmarkNet
              ? xd.faceLandmark68TinyNet
              : xd.faceLandmark68Net;
          },
          enumerable: !0,
          configurable: !0,
        }),
        t
      );
    })(Xf),
    Gd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e,
              n,
              r,
              o,
              i,
              a = this;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return (
                    (e = t.sent()),
                    (n = e.map(function (t) {
                      return t.detection;
                    })),
                    this.input instanceof dt ? [4, wf(this.input, n)] : [3, 3]
                  );
                case 2:
                  return (o = t.sent()), [3, 5];
                case 3:
                  return [4, xf(this.input, n)];
                case 4:
                  (o = t.sent()), (t.label = 5);
                case 5:
                  return (
                    (r = o),
                    [
                      4,
                      Promise.all(
                        r.map(function (t) {
                          return a.landmarkNet.detectLandmarks(t);
                        })
                      ),
                    ]
                  );
                case 6:
                  return (
                    (i = t.sent()),
                    r.forEach(function (t) {
                      return t instanceof dt && t.dispose();
                    }),
                    [
                      2,
                      e.map(function (t, e) {
                        return of(t, i[e]);
                      }),
                    ]
                  );
              }
            });
          });
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Ad(this, this.input);
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Fd(this, this.input);
        }),
        (e.prototype.withFaceDescriptors = function () {
          return new Wd(this, this.input);
        }),
        e
      );
    })(Ud),
    Vd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e, n, r, o, i;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, this.parentTask];
                case 1:
                  return (e = t.sent())
                    ? ((n = e.detection),
                      this.input instanceof dt
                        ? [4, wf(this.input, [n])]
                        : [3, 3])
                    : [2];
                case 2:
                  return (o = t.sent()), [3, 5];
                case 3:
                  return [4, xf(this.input, [n])];
                case 4:
                  (o = t.sent()), (t.label = 5);
                case 5:
                  return (r = o), [4, this.landmarkNet.detectLandmarks(r[0])];
                case 6:
                  return (
                    (i = t.sent()),
                    r.forEach(function (t) {
                      return t instanceof dt && t.dispose();
                    }),
                    [2, of(e, i)]
                  );
              }
            });
          });
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Dd(this, this.input);
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Ld(this, this.input);
        }),
        (e.prototype.withFaceDescriptor = function () {
          return new zd(this, this.input);
        }),
        e
      );
    })(Ud),
    Hd = (function (r) {
      function t(t, e) {
        void 0 === e && (e = new Hf());
        var n = r.call(this) || this;
        return (n.input = t), (n.options = e), n;
      }
      return a(t, r), t;
    })(Xf),
    qd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e, n, r, o;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return (
                    (n = (e = this).input),
                    (r = e.options) instanceof Pf
                      ? [4, xd.mtcnn.forward(n, r)]
                      : [3, 2]
                  );
                case 1:
                  return [
                    2,
                    t.sent().map(function (t) {
                      return t.detection;
                    }),
                  ];
                case 2:
                  if (
                    !(o =
                      r instanceof Kf
                        ? function (t) {
                            return xd.tinyFaceDetector.locateFaces(t, r);
                          }
                        : r instanceof Hf
                        ? function (t) {
                            return xd.ssdMobilenetv1.locateFaces(t, r);
                          }
                        : r instanceof Mp
                        ? function (t) {
                            return xd.tinyYolov2.locateFaces(t, r);
                          }
                        : null)
                  )
                    throw new Error(
                      "detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options"
                    );
                  return [2, o(n)];
              }
            });
          });
        }),
        (e.prototype.runAndExtendWithFaceDetections = function () {
          var t = this;
          return new Promise(function (n) {
            return p(t, void 0, void 0, function () {
              var e;
              return P(this, function (t) {
                switch (t.label) {
                  case 0:
                    return [4, this.run()];
                  case 1:
                    return (
                      (e = t.sent()),
                      [
                        2,
                        n(
                          e.map(function (t) {
                            return Wp({}, t);
                          })
                        ),
                      ]
                    );
                }
              });
            });
          });
        }),
        (e.prototype.withFaceLandmarks = function (t) {
          return (
            void 0 === t && (t = !1),
            new Gd(this.runAndExtendWithFaceDetections(), this.input, t)
          );
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Id(this.runAndExtendWithFaceDetections(), this.input);
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Od(this.runAndExtendWithFaceDetections(), this.input);
        }),
        e
      );
    })(Hd),
    jd = (function (t) {
      function e() {
        return (null !== t && t.apply(this, arguments)) || this;
      }
      return (
        a(e, t),
        (e.prototype.run = function () {
          return p(this, void 0, void 0, function () {
            var e, n;
            return P(this, function (t) {
              switch (t.label) {
                case 0:
                  return [4, new qd(this.input, this.options)];
                case 1:
                  return (
                    (e = t.sent()),
                    (n = e[0]),
                    e.forEach(function (t) {
                      t.score > n.score && (n = t);
                    }),
                    [2, n]
                  );
              }
            });
          });
        }),
        (e.prototype.runAndExtendWithFaceDetection = function () {
          var t = this;
          return new Promise(function (n) {
            return p(t, void 0, void 0, function () {
              var e;
              return P(this, function (t) {
                switch (t.label) {
                  case 0:
                    return [4, this.run()];
                  case 1:
                    return (e = t.sent()), [2, n(e ? Wp({}, e) : void 0)];
                }
              });
            });
          });
        }),
        (e.prototype.withFaceLandmarks = function (t) {
          return (
            void 0 === t && (t = !1),
            new Vd(this.runAndExtendWithFaceDetection(), this.input, t)
          );
        }),
        (e.prototype.withFaceExpressions = function () {
          return new Td(this.runAndExtendWithFaceDetection(), this.input);
        }),
        (e.prototype.withAgeAndGender = function () {
          return new Pd(this.runAndExtendWithFaceDetection(), this.input);
        }),
        e
      );
    })(Hd);
  function $d(t, e) {
    return void 0 === e && (e = new Hf()), new qd(t, e);
  }
  function Kd(e, n) {
    return p(this, void 0, void 0, function () {
      return P(this, function (t) {
        switch (t.label) {
          case 0:
            return [
              4,
              $d(e, new Hf(n ? { minConfidence: n } : {}))
                .withFaceLandmarks()
                .withFaceDescriptors(),
            ];
          case 1:
            return [2, t.sent()];
        }
      });
    });
  }
  var Xd = Kd;
  function Yd(t, e) {
    if (t.length !== e.length)
      throw new Error("euclideanDistance: arr1.length !== arr2.length");
    var n = Array.from(t),
      r = Array.from(e);
    return Math.sqrt(
      n
        .map(function (t, e) {
          return t - r[e];
        })
        .reduce(function (t, e) {
          return t + Math.pow(e, 2);
        }, 0)
    );
  }
  var Qd = (function () {
    function t(t, e) {
      void 0 === e && (e = 0.6), (this._distanceThreshold = e);
      var n = Array.isArray(t) ? t : [t];
      if (!n.length)
        throw new Error(
          "FaceRecognizer.constructor - expected atleast one input"
        );
      var r = 1,
        o = function () {
          return "person " + r++;
        };
      this._labeledDescriptors = n.map(function (t) {
        if (t instanceof yf) return t;
        if (t instanceof Float32Array) return new yf(o(), [t]);
        if (t.descriptor && t.descriptor instanceof Float32Array)
          return new yf(o(), [t.descriptor]);
        throw new Error(
          "FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>"
        );
      });
    }
    return (
      Object.defineProperty(t.prototype, "labeledDescriptors", {
        get: function () {
          return this._labeledDescriptors;
        },
        enumerable: !0,
        configurable: !0,
      }),
      Object.defineProperty(t.prototype, "distanceThreshold", {
        get: function () {
          return this._distanceThreshold;
        },
        enumerable: !0,
        configurable: !0,
      }),
      (t.prototype.computeMeanDistance = function (e, t) {
        return (
          t
            .map(function (t) {
              return Yd(t, e);
            })
            .reduce(function (t, e) {
              return t + e;
            }, 0) / (t.length || 1)
        );
      }),
      (t.prototype.matchDescriptor = function (r) {
        var o = this;
        return this.labeledDescriptors
          .map(function (t) {
            var e = t.descriptors,
              n = t.label;
            return new gf(n, o.computeMeanDistance(r, e));
          })
          .reduce(function (t, e) {
            return t.distance < e.distance ? t : e;
          });
      }),
      (t.prototype.findBestMatch = function (t) {
        var e = this.matchDescriptor(t);
        return e.distance < this.distanceThreshold
          ? e
          : new gf("unknown", e.distance);
      }),
      t
    );
  })();
  var Jd = O({}, $h, uf);
  (c.AgeGenderNet = vf),
    (c.BoundingBox = Rh),
    (c.Box = Sh),
    (c.ComposableTask = Xf),
    (c.ComputeAllFaceDescriptorsTask = Wd),
    (c.ComputeFaceDescriptorsTaskBase = Bd),
    (c.ComputeSingleFaceDescriptorTask = zd),
    (c.DetectAllFaceLandmarksTask = Gd),
    (c.DetectAllFacesTask = qd),
    (c.DetectFaceLandmarksTaskBase = Ud),
    (c.DetectFacesTaskBase = Hd),
    (c.DetectSingleFaceLandmarksTask = Vd),
    (c.DetectSingleFaceTask = jd),
    (c.Dimensions = ch),
    (c.FACE_EXPRESSION_LABELS = Yp),
    (c.FaceDetection = Lp),
    (c.FaceDetectionNet = $f),
    (c.FaceExpressionNet = Jp),
    (c.FaceExpressions = Qp),
    (c.FaceLandmark68Net = Ef),
    (c.FaceLandmark68TinyNet = _f),
    (c.FaceLandmarkNet = Sf),
    (c.FaceLandmarks = ef),
    (c.FaceLandmarks5 = mf),
    (c.FaceLandmarks68 = nf),
    (c.FaceMatch = gf),
    (c.FaceMatcher = Qd),
    (c.FaceRecognitionNet = Mf),
    (c.LabeledBox = Nh),
    (c.LabeledFaceDescriptors = yf),
    (c.Mtcnn = hd),
    (c.MtcnnOptions = Pf),
    (c.NetInput = gp),
    (c.NeuralNetwork = xp),
    (c.ObjectDetection = kh),
    (c.Point = lh),
    (c.PredictedBox = Ih),
    (c.Rect = Th),
    (c.SsdMobilenetv1 = qf),
    (c.SsdMobilenetv1Options = Hf),
    (c.TfjsImageRecognitionBase = Pp),
    (c.TinyFaceDetector = dd),
    (c.TinyFaceDetectorOptions = Kf),
    (c.TinyYolov2 = yd),
    (c.allFaces = Xd),
    (c.allFacesMtcnn = function (e, n) {
      return (
        void 0 === n && (n = {}),
        p(this, void 0, void 0, function () {
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                return [
                  4,
                  $d(e, new Pf(n)).withFaceLandmarks().withFaceDescriptors(),
                ];
              case 1:
                return [2, t.sent()];
            }
          });
        })
      );
    }),
    (c.allFacesSsdMobilenetv1 = Kd),
    (c.allFacesTinyYolov2 = function (e, n) {
      return (
        void 0 === n && (n = {}),
        p(this, void 0, void 0, function () {
          return P(this, function (t) {
            switch (t.label) {
              case 0:
                return [
                  4,
                  $d(e, new Mp(n)).withFaceLandmarks().withFaceDescriptors(),
                ];
              case 1:
                return [2, t.sent()];
            }
          });
        })
      );
    }),
    (c.awaitMediaLoaded = ip),
    (c.bufferToImage = ap),
    (c.computeFaceDescriptor = function (t) {
      return xd.faceRecognitionNet.computeFaceDescriptor(t);
    }),
    (c.computeReshapedDimensions = xh),
    (c.createCanvas = up),
    (c.createCanvasFromMedia = cp),
    (c.createFaceDetectionNet = function (t) {
      return jf(t);
    }),
    (c.createFaceRecognitionNet = function (t) {
      var e = new Mf();
      return e.extractWeights(t), e;
    }),
    (c.createMtcnn = function (t) {
      var e = new hd();
      return e.extractWeights(t), e;
    }),
    (c.createSsdMobilenetv1 = jf),
    (c.createTinyFaceDetector = function (t) {
      var e = new dd();
      return e.extractWeights(t), e;
    }),
    (c.createTinyYolov2 = function (t, e) {
      void 0 === e && (e = !0);
      var n = new yd(e);
      return n.extractWeights(t), n;
    }),
    (c.detectAllFaces = $d),
    (c.detectFaceLandmarks = bd),
    (c.detectFaceLandmarksTiny = function (t) {
      return xd.faceLandmark68TinyNet.detectLandmarks(t);
    }),
    (c.detectLandmarks = Sd),
    (c.detectSingleFace = function (t, e) {
      return void 0 === e && (e = new Hf()), new jd(t, e);
    }),
    (c.draw = Jd),
    (c.env = zh),
    (c.euclideanDistance = Yd),
    (c.extendWithFaceDescriptor = Of),
    (c.extendWithFaceDetection = Wp),
    (c.extendWithFaceExpressions = tf),
    (c.extendWithFaceLandmarks = of),
    (c.extractFaceTensors = wf),
    (c.extractFaces = xf),
    (c.fetchImage = function (r) {
      return p(this, void 0, void 0, function () {
        var e, n;
        return P(this, function (t) {
          switch (t.label) {
            case 0:
              return [4, lp(r)];
            case 1:
              return [4, (e = t.sent()).blob()];
            case 2:
              if (!(n = t.sent()).type.startsWith("image/"))
                throw new Error(
                  "fetchImage - expected blob type to be of type image/*, instead have: " +
                    n.type +
                    ", for url: " +
                    e.url
                );
              return [2, ap(n)];
          }
        });
      });
    }),
    (c.fetchJson = hp),
    (c.fetchNetWeights = function (n) {
      return p(this, void 0, void 0, function () {
        var e;
        return P(this, function (t) {
          switch (t.label) {
            case 0:
              return (e = Float32Array.bind), [4, lp(n)];
            case 1:
              return [4, t.sent().arrayBuffer()];
            case 2:
              return [2, new (e.apply(Float32Array, [void 0, t.sent()]))()];
          }
        });
      });
    }),
    (c.fetchOrThrow = lp),
    (c.getCenterPoint = wh),
    (c.getContext2dOrThrow = Gh),
    (c.getMediaDimensions = sp),
    (c.imageTensorToCanvas = pp),
    (c.imageToSquare = fp),
    (c.inverseSigmoid = function (t) {
      return Math.log(t / (1 - t));
    }),
    (c.iou = wp),
    (c.isDimensions = yh),
    (c.isEven = mh),
    (c.isFloat = vh),
    (c.isMediaElement = dp),
    (c.isMediaLoaded = op),
    (c.isTensor = hh),
    (c.isTensor1D = function (t) {
      return hh(t, 1);
    }),
    (c.isTensor2D = ph),
    (c.isTensor3D = fh),
    (c.isTensor4D = dh),
    (c.isValidNumber = Eh),
    (c.isValidProbablitiy = Ch),
    (c.isWithFaceDetection = Bp),
    (c.isWithFaceExpressions = Zp),
    (c.isWithFaceLandmarks = rf),
    (c.loadAgeGenderModel = function (t) {
      return xd.ageGenderNet.load(t);
    }),
    (c.loadFaceDetectionModel = Cd),
    (c.loadFaceExpressionModel = function (t) {
      return xd.faceExpressionNet.load(t);
    }),
    (c.loadFaceLandmarkModel = function (t) {
      return xd.faceLandmark68Net.load(t);
    }),
    (c.loadFaceLandmarkTinyModel = function (t) {
      return xd.faceLandmark68TinyNet.load(t);
    }),
    (c.loadFaceRecognitionModel = function (t) {
      return xd.faceRecognitionNet.load(t);
    }),
    (c.loadMtcnnModel = function (t) {
      return xd.mtcnn.load(t);
    }),
    (c.loadSsdMobilenetv1Model = Ed),
    (c.loadTinyFaceDetectorModel = function (t) {
      return xd.tinyFaceDetector.load(t);
    }),
    (c.loadTinyYolov2Model = function (t) {
      return xd.tinyYolov2.load(t);
    }),
    (c.loadWeightMap = vp),
    (c.locateFaces = _d),
    (c.matchDimensions = function (t, e, n) {
      void 0 === n && (n = !1);
      var r = n ? sp(e) : e,
        o = r.width,
        i = r.height;
      return { width: (t.width = o), height: (t.height = i) };
    }),
    (c.mtcnn = function (t, e) {
      return xd.mtcnn.forward(t, e);
    }),
    (c.nets = xd),
    (c.nonMaxSuppression = bp),
    (c.normalize = Ep),
    (c.padToSquare = mp),
    (c.predictAgeAndGender = function (t) {
      return xd.ageGenderNet.predictAgeAndGender(t);
    }),
    (c.range = bh),
    (c.recognizeFaceExpressions = function (t) {
      return xd.faceExpressionNet.predictExpressions(t);
    }),
    (c.resizeResults = function e(t, n) {
      var r = new ch(n.width, n.height),
        o = r.width,
        i = r.height;
      if (o <= 0 || i <= 0)
        throw new Error(
          "resizeResults - invalid dimensions: " +
            JSON.stringify({ width: o, height: i })
        );
      if (Array.isArray(t))
        return t.map(function (t) {
          return e(t, { width: o, height: i });
        });
      if (rf(t)) {
        var a = t.detection.forSize(o, i),
          s = t.unshiftedLandmarks.forSize(a.box.width, a.box.height);
        return of(Wp(t, a), s);
      }
      return Bp(t)
        ? Wp(t, t.detection.forSize(o, i))
        : t instanceof ef || t instanceof Lp
        ? t.forSize(o, i)
        : t;
    }),
    (c.resolveInput = Uh),
    (c.round = gh),
    (c.shuffleArray = function (t) {
      for (var e = t.slice(), n = e.length - 1; 0 < n; n--) {
        var r = Math.floor(Math.random() * (n + 1)),
          o = e[n];
        (e[n] = e[r]), (e[r] = o);
      }
      return e;
    }),
    (c.sigmoid = Cp),
    (c.ssdMobilenetv1 = wd),
    (c.tf = uh),
    (c.tinyFaceDetector = function (t, e) {
      return xd.tinyFaceDetector.locateFaces(t, e);
    }),
    (c.tinyYolov2 = function (t, e) {
      return xd.tinyYolov2.locateFaces(t, e);
    }),
    (c.toNetInput = yp),
    Object.defineProperty(c, "__esModule", { value: !0 });
});

MMCT - 2023