public int unpackUnsafe(int valCount, Object inBase, long inAddr, Object outBase, long outAddr) {
        int step = valCount >>> 3;
        for (int s = 0; s < step; s++) {
            //int valIndex = s << 3;
            unpack8Values(inBase, inAddr + (s * bitWidth), outBase, outAddr + ((s << 3) << 3));
        }

        int tail = valCount & 0x07;
        if (tail != 0) {
            int tailStart = (valCount >>> 3) << 3;
            long[] tailData = new long[8];
            unpack8Values(inBase, inAddr + (valCount >>> 3) * bitWidth, tailData, UnsafeUtil.LONG_ARRAY_OFFSET);
            for (int i = 0; i < valCount - tailStart; i++) {
                UnsafeUtil.setLong(outBase, outAddr + ((tailStart + i) << 3), tailData[i]);
            }
        }
        return PackingUtil.packingOutputBytes(valCount, bitWidth);
    }
unpack bitWidth bytes from input into 8 values in output.
nextPosition: input = (inAddr + bitWidth), output = (outAddr + 8 * 4)
indexr-vlt-segment/src/main/java/io/indexr/vlt/codec/pack/LongPacker.java