#include<stdio.h>

//Xorshift - George Marsaglia
//http://www.jstatsoft.org/v08/i14/paper
//Period: 2^128 ? 1
unsigned int xorshift160() {
	//Any 5 integers
	static uint32_t key[] = {123456789,362436069,521288629,88675123,5783321};
	uint32_t t;
	t=(key[0]^(key[0]>>7));
	key[0]=key[1];
	key[1]=key[2];
	key[2]=key[3];
	key[3]=key[4];
	key[4]=(key[4]^(key[4]<<6))^(t^(t<<13));
	return (key[1]+key[1]+1)*key[4];
}


int main(){
	FILE * f = fopen("InputFile", "rb");
	FILE * fPrime = fopen("Output", "wb");
	fseek(f,0,SEEK_END);
	long len = ftell(f);
	fseek(f,0,SEEK_SET);

	uint32_t seed;
	uint8_t keybit;
	for(long i=0;i<len;i++){
		if(i%4==0){
			seed=xorshift160();
		}
		keybit = (uint8_t)(seed>>i%4)&0xFF;
		fputc(fgetc(f)^keybit,fPrime);
	}
	fclose(f);
	fclose(fPrime);
	return 0;
}