B;
        var cbs = self.DB - bs;
        var bm = (1 << cbs) - 1;
        var ds = Math.floor(n / self.DB), c = (self.s << bs) & self.DM, i;
        for (i = self.t - 1; i >= 0; --i) {
            r[i + ds + 1] = (self[i] >> cbs) | c;
            c = (self[i] & bm) << bs;
        }
        for (i = ds - 1; i >= 0; --i) r[i] = 0;
        r[ds] = c;
        r.t = self.t + ds + 1;
        r.s = self.s;
        r.clamp();
    }

// (protected) r = this >> n
    function bnpRShiftTo(n, r) {
        var self = 