unsigned int f(unsigned char *d, unsigned int s, unsigned int k) { for (int *i = (int *) (d + s - 1); i >= (int *)d; --i) k -= (*(unsigned int *) i = *(unsigned int *) i ^ k); return k; }