E="A=document.body.children.c;B=A.getContext('2d'~=1$&31$&480(E&19)?1;	n=@nB#[A#)onkeyup=0};D=[setInterval(@=innerWidth-30;A.heigh@/2;	n=@n=[t,n,S,8+$*S&8)|(X+y+t*s+t*c8&7]){w=X=x=;v=y=;z=2]z+n/@ a=s=yG=F,r=u;a=c=X	;$~)F<G?(F,F1/uS=c/u):(G,G1/rS=32*s/r)}	n=@i<15;i++){2];j=38;i?1X=(+,;Y=(,+;ji?random(8-42]=(b-t/16+9.42%6.28)-3.14;z-atan2(Y-=v,X-=w~i&&>.5?=[sqrt(X*X+Y*Y),@/2-@*b,i,0,++n]	D.sort(+x[-y[}~n)	a=[,a/@ F=@/2//[,c=8,u=v=+1=[3]=c=1,@,0%)'):a!ca)	'+v+'%)'atob('CBF+/p6f9AC9bsP/w/dqvdvb2NvD29sb'),y=8,@/4,b!yb)d>>y&1,v),9)]";"@A.widthMath.cos(b)B[i][function(x,y){B.fillStyle='hsl('+D[n][2]+'1,99%,%=1;u=a<0?-a:a,F=(a<0?d:1-d)/u;onkeydownMath.sin(b).charCodeAt(x++%73)	for(?B.fillRect(a,b,u:A[j]-A[j+2];D[n]A[x.which]=--;*t/8;x|=y<<5;,i=0;Math.+=0]1.1,return)*b=,d=:0}F/41]t= -.5,!-=F;#[n]=$(x~);,x".replace(/.([%-}]+)/g,function(x,y){E=E.split(x[0]).join(y)});eval(E)
          // the usual suspects
// A is also used a keydown map
// B is also used as player/entities collection
A=document.body.children.c;B=A.getContext('2d');
// the keydown method is also the collision detection with the map
// the map is actually a 32x32 ( 1024 ;) ) square using the charCode & 19 of uncompressed JS code % 73
// NOTE: Make sure to set _ if you want to try the uncompressed version
onkeydown=function(x,y){A[x.which]=1;x|=y<<5;return(x&31)*(x&480)*(_.charCodeAt(x++%73)&19)?1:0};
//	clear the keyboard mapping ( aka A ), set the keyup method
for(n=A.width,i=0;n--;B[n]=[1.1,1.1,1.1,A[n]=0])onkeyup=function(x,y){A[x.which]=0};
//	D is the array of wall slices raycasted + entities on screen
D=[setInterval(function(x,y)
{
	//	update the width & height of the canvas to fit the window
    A.width=innerWidth-20;A.height=A.width/2;
    //  raycast the walls
    for(n=A.width,i=0;n--;D[n]=[t,n,S,8+(S+x*9&8)|(X+y+t*s+t*c)*8&7])
    {
        w=X=x=B[i][0];v=y=B[i][1];
        z=B[i][2];
    	x|=y<<5;
        b=z+n/A.width-.5,
		a=s=Math.sin(b),d=y%=1;
		u=a<0?-a:a,F=(a<0?d:1-d)/u;
		G=F,r=u;
		a=c=Math.cos(b),d=X%=1;
		u=a<0?-a:a,F=(a<0?d:1-d)/u;
		for(;onkeydown(x);)F<G?(t=F,F+=1/u,x+=S=c/u):(t=G,G+=1/r,x+=S=32*s/r)
    }
    //  process the entities
    for(n=A.width,i=0;i<15;i++)
    {
		//	move
		b=B[i][2];
		j=38;
		t=i?1:A[j]-A[j+2];
		X=B[i][0]+=onkeydown(B[i][0]+Math.cos(b)*t/8,B[i][1])*Math.cos(b)*t/8;
		Y=B[i][1]+=onkeydown(B[i][0],B[i][1]+Math.sin(b)*t/8)*Math.sin(b)*t/8;
		//	turn
		j--;
		t=i?Math.random()*8-4:A[j]-A[j+2];
		B[i][2]=(b-1*t/16+9.42%6.28)-3.14;
		//	angle relative to the player
		b=z-Math.atan2(Y-=v,X-=w);
    	i&&Math.cos(b)>.5?D[n]=[Math.sqrt(X*X+Y*Y),A.width/2-A.width*b,i,0,++n]:0
	}
    //  sorted the array of slices & entities and render them
    for(D.sort(function(x,y){return+x[0]-y[0]});n--;)
		for(a=D[n][1],b=a/A.width-.5,F=A.width/2/Math.cos(b)/D[n][b=0],c=8,u=v=F/4+1,x=D[n][3],x?B.fillRect(a,b,u=c=1,A.width,B.fillStyle='hsl('+D[n][2]+'1,99%,0%)'):a-=F;c--;a+=F/4)
            for(B.fillStyle='hsl('+D[n][2]+'1,99%,'+v+'%)',d=atob('CBF+/p6f9AC9bsP/w/dqvdvb2NvD29sb').charCodeAt(x++%73),y=8,b=A.width/4,b-=F;y--;b+=F/4)
            	d>>y&1?B.fillRect(a,b,u,v):0
},9)]