else
                self[self.t - 1] |= x << sh;
            sh += k;
            if (sh >= self.DB) sh -= self.DB;
        }
        if (k == 8 && (s[0] & 0x80) != 0) {
            self.s = -1;
            if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh;
        }
        self.clamp();
        if (mi) BigInteger.ZERO.subTo(self, self);
    }

// (protected) clamp off excess high words
    function bnpClamp() {
        var c = this.s & this.DM;
        while (this.t > 0 && this[this.t - 1