docs: private static void updateWindowed(final CpcSketch sketch, final int rowCol) {
      assert ((sketch.windowOffset >= 0) && (sketch.windowOffset <= 56));
      final int k = 1 << sketch.lgK;
      final long c32pre = sketch.numCoupons << 5;
      assert c32pre >= (3L * k); // C < 3K/32, in other words flavor >= HYBRID
      final long c8pre = sketch.numCoupons << 3;
      final int w8pre = sketch.windowOffset << 3;
      assert c8pre < ((27L + w8pre) * k); // C < (K * 27/8) + (K * windowOffset)
  
      boolean isNovel = false; //novel if new coupon
      final int col = rowCol & 63;
  
      if (col < sketch.windowOffset) { // track the surprising 0's "before" the window
        isNovel = PairTable.maybeDelete(sketch.pairTable, rowCol); // inverted logic
      }
      else if (col < (sketch.windowOffset + 8)) { // track the 8 bits inside the window
        assert (col >= sketch.windowOffset);
        final int row = rowCol >>> 6;
        final byte oldBits = sketch.slidingWindow[row];
        final byte newBits = (byte) (oldBits | (1 << (col - sketch.windowOffset)));
        if (newBits != oldBits) {
          sketch.slidingWindow[row] = newBits;
          isNovel = true;
        }
      }
      else { // track the surprising 1's "after" the window
        assert col >= (sketch.windowOffset + 8);
        isNovel = PairTable.maybeInsert(sketch.pairTable, rowCol); // normal logic
      }
  
      if (isNovel) {
        sketch.numCoupons += 1;
        updateHIP(sketch, rowCol);
        final long c8post = sketch.numCoupons << 3;
        if (c8post >= ((27L + w8pre) * k)) {
          modifyOffset(sketch, sketch.windowOffset + 1);
          assert (sketch.windowOffset >= 1) && (sketch.windowOffset <= 56);
          final int w8post = sketch.windowOffset << 3;
          assert c8post < ((27L + w8post) * k); // C < (K * 27/8) + (K * windowOffset)
        }
      }
    }