;
        var i, f, m = Math.min(a.t, self.t);
        for (i = 0; i < m; ++i) r[i] = op(self[i], a[i]);
        if (a.t < self.t) {
            f = a.s & self.DM;
            for (i = m; i < self.t; ++i) r[i] = op(self[i], f);
            r.t = self.t;
        }
        else {
            f = self.s & self.DM;
            for (i = m; i < a.t; ++i) r[i] = op(f, a[i]);
            r.t = a.t;
        }
        r.s = op(self.s, a.s);
        r.clamp();
    }

// (public) this & a
    function op_and(x, y) {
  