<T> long hashLen0To16(Access<T> access, T in, long off, long len) {
if (len >= 8L) {
long a = fetch64(access, in, off);
long b = fetch64(access, in, off + len - 8L);
return hash8To16Bytes(len, a, b);
} else if (len >= 4L) {
long a = Primitives.unsignedInt(fetch32(access, in, off));
long b = Primitives.unsignedInt(fetch32(access, in, off + len - 4L));
return hash4To7Bytes(len, a, b);
} else if (len > 0L) {
int a = access.getUnsignedByte(in, off);
int b = access.getUnsignedByte(in, off + (len >> 1));
int c = access.getUnsignedByte(in, off + len - 1L);
return hash1To3Bytes((int) len, a, b, c);
}
return K2;
}