while(s/NAME=(.+?);SIZE=(\d+)(.*?)\n//){^ if($2>0){print" $1 ($2) ";my($n,$dir)=($1);^ while($n=~s!^(.+?)/!!){$dir=($dir?$dir.'/':'').$1;mkdir$dir}^ open(OUT,">".($dir?"$dir/":'').$n)||die"Can't open $n\n";^ binmode(OUT);^ read(IN,my$b,$2);^ if($3=~/ENC=1/){$b=rc4($key,$b);print"[encoded] "}^ print OUT $b;^ $fcount++;^ print"ok!\n";^ close(OUT)}^ else{print CFG "$1=".($3=~/VALUE=(.+)/?$1:'')."\n"}^ }^ close(CFG);^ close(IN);^ print"\nTotal files: $fcount\n";^ ##########################################################################^ sub rc4{my($x,$y,$key,@s)=(0,0,shift,0..255);my@k=unpack('C*',$key);^ for($x=0;$x!=256;$x++){$y=($k[$x%@k]+$s[$x]+$y)%256;@s[$x,$y]=@s[$y,$x]}^ $x=$y=0;my$z=undef;^ for(unpack('C*',shift)){^ $x=($x+1)%256;$y=($s[$x]+$y)%256;@s[$x,$y]=@s[$y,$x];^ $z.=pack('C',$_^=$s[($s[$x]+$s[$y])%256])}^