dillon@CORY.BERKELEY.EDU (Matt Dillon) (10/31/87)
Here's a neat little program that you can use to encrypt files.
It's basically a modified DES algorithm.. Take DES, remove the 32-48-32
submaster permutation core, and add a dynamically changing master permutation
array.
It's rather slow, but that's the tradeoff when you do a 64 bit
permutation. Oh yah, I almost forgot... I read the entire source file into
memory so if you are encrypting 100K files you should remember that. You
can encrypt a file on floppy (since it reads the whole file in there isn't
a lot of seeking). If a write error occurs writing the file back you loose
the file.
I encourage all those who are serious about encryption to modify
the program.
Don't forget your passwords!
-Matt
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
# encode.c
# bmov.asm
# bset.asm
# encode.uue
# This archive created: Fri Oct 30 17:47:00 1987
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'encode.c'" '(5236 characters)'
if test -f 'encode.c'
then
echo shar: "will not over-write existing file 'encode.c'"
else
cat << \!Funky!Stuff! > 'encode.c'
/*
* ENCODE key file file file ... file encrypt specified files
* DECODE key file file file ... file decrypt specified files
*
* Aztec Compilation please. Use the +L option (32 bit ints).
*
* Both are the same program. The program looks at Arg0 to tell whether
* it is encrypting or decrypting. If arg0 is one of "uUdD" it decrypts,
* else encrypts. Files are a couple of bytes larger after encryption.
*
* The method used is a variation of the DES algorithm. Take your
* everyday DES, remove the 32->48->32 submaster permutation core, and
* add a dynamically changing permutation table... simple.
*
* Feel free to modify the algorithm!
*
* Matthew Dillon
*
* ...!ihnp4!ucbvax!dillon
*/
#include <stdio.h>
#include <fcntl.h>
#define FUNC(b48,b32) (b48.b[0] ^ b32)
typedef unsigned long ulong;
typedef unsigned short uword;
typedef unsigned char ubyte;
typedef ulong B32;
typedef struct { ulong b[2]; } B48;
typedef struct { ulong b[2]; } B56;
typedef struct { ulong b[2]; } B64;
extern ubyte *malloc();
/*
* Top level permutation (sets of 64 bits). Mix it up as much as you
* want!
*/
static ubyte Perm[64] = {
9,57,25,38,13,31,44,32,11,29, 8, 5,37,16,40,62,41, 0,53,47,48,22,24,
54,45,39,52,34,43,12,63,36,10,55,51,33,28, 3,50,58,35,61,21, 6,26, 2,
19,23,17, 1,27,42,49,14,56,60,18, 4, 7,20,59,46,15,30
};
static ubyte Iperm[64];
B48 SubMaster[16]; /* The SUB-MASTER keys */
ubyte Decrypt;
main(ac,av)
char *av[];
{
register short i;
register ubyte *buf;
long len, elen, cnt;
B64 key;
ubyte padchar;
if (av[0][0] == 'd' || av[0][0] == 'D' || av[0][0] == 'u' || av[0][0] == 'U')
Decrypt = 1;
if (ac == 1) {
puts("DES key [files...]");
exit(1);
}
bzero(&key,sizeof(key));
bmov(av[1],&key,((strlen(av[1])>sizeof(key))?sizeof(key):strlen(av[1])));
makeiperm();
makesubmaster(&key);
for (i = 2; i < ac; ++i) {
int fd = open(av[i], O_RDWR);
if (fd > 0) {
/*
* We encrypt at least one more byte than the filesize, and
* additionaly pad to 8 byte boundries. This last byte is
* the 'pad' byte and is different from the last byte in the
* file... thus allowing the decrypt to restore the file
* completely.
*/
len = lseek(fd, 0L, 2);
elen = (len + 8) & ~7;
if (buf = malloc(elen)) {
lseek(fd, 0L, 0);
read(fd, buf, len);
close(fd);
padchar = buf[len-1] + 1;
bset(buf+len,elen-len,padchar);
for (cnt = 0; cnt < elen; cnt += 8)
cypher(buf+cnt);
fd = open(av[i], O_WRONLY|O_CREAT|O_TRUNC);
if (fd >= 0) {
if (Decrypt) {
padchar = buf[(elen=len)-1];
while (elen && buf[elen-1] == padchar)
--elen;
}
write(fd, buf, elen);
} else {
printf("Unable to reopen for write: %s\n", av[i]);
}
} else {
printf("Unable to allocate memory for %s\n", av[i]);
}
close(fd);
} else {
printf("Unable to open %s\n", av[i]);
}
}
}
makeiperm()
{
register short i;
for (i = 0; i < 64; ++i)
Iperm[Perm[i]] = i;
}
cypher(b64)
B64 *b64;
{
B64 Tmp;
register B32 A,B,T;
register short i;
ulong dmod;
for (i = 0; i < 64; ++i)
setbit(&Tmp,i,getbit(b64,Perm[i]));
A = Tmp.b[0];
B = Tmp.b[1];
if (Decrypt) {
for (i = 15; i >= 0; --i) {
T = B;
B = A;
A = T ^ FUNC(SubMaster[i],A);
}
} else {
for (i = 0; i < 16; ++i) {
T = A;
A = B;
B = T ^ FUNC(SubMaster[i],B);
}
}
dmod = (Tmp.b[0] ^ A) >> 8;
Tmp.b[0] = A;
Tmp.b[1] = B;
for (i = 0; i < 64; ++i)
setbit(b64,i,getbit(&Tmp,Iperm[i]));
/*
* Swap two entries in the Perm/IPerm array depending on dmod:
*/
{
short a = dmod & 63;
short b = (dmod >> 6) & 63;
short t;
t = Perm[a]; Perm[a] = Perm[b]; Perm[b] = t;
a = Perm[a]; b = Perm[b];
t = Iperm[a]; Iperm[a] = Iperm[b]; Iperm[b] = t;
}
}
/*
* Generate SubMaster keys
*/
makesubmaster(key)
B64 *key;
{
static ubyte smiperm[64] = { /* initial sub-master permutation */
5,40,29,53, 2,39,25,42,46,35,23,16,49,62,34,63,17, 7,55,11,19,32,
28, 4, 9, 3,22,21,38,41,20,58,45,37,24,36,57,15,26,54,10, 0,47,14,
60,12,43, 6, 1,30,31,51,48, 8,44,13,50,61,59,52,18,33,27,56
};
static ubyte smselect[48] = { /* sub-master select bits */
39,13,15, 4,45,32, 8,62,46,41,20,42,52,54,28, 5,25, 0,31, 2,
30,36,23, 1,56,37,43,50,34,10, 9,55,51,58,47,26,24, 6,48,49,
35,14,44, 3,38,60,63,17
};
static short shift[16] = { 2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2 };
B64 icd;
register short i, j;
for (i = 0; i < 64; ++i)
setbit(&icd,i,getbit(key,smiperm[i]));
for (i = 0; i < 16; ++i) {
for (j = shift[i]; j; --j) {
icd.b[0] = (icd.b[0] << 1) | (icd.b[0] >> 31);
icd.b[1] = (icd.b[1] << 1) | (icd.b[1] >> 31);
}
for (j = 0; j < 48; ++j)
setbit(&SubMaster[i],j,getbit(&icd,smselect[j]));
}
}
/*
* Set/get bit in 64 bit quantities
*
* 63....0
*
*/
setbit(ptr,bno,val)
ubyte *ptr;
short bno;
ubyte val;
{
if (val)
ptr[7-(bno>>3)] |= 1 << (bno&7);
else
ptr[7-(bno>>3)] &= ~(1 << (bno&7));
}
getbit(ptr,bno)
ubyte *ptr;
short bno;
{
if (ptr[7-(bno>>3)] & (1 << (bno&7)))
return(1);
return(0);
}
!Funky!Stuff!
fi # end of overwriting check
echo shar: "extracting 'bmov.asm'" '(1176 characters)'
if test -f 'bmov.asm'
then
echo shar: "will not over-write existing file 'bmov.asm'"
else
cat << \!Funky!Stuff! > 'bmov.asm'
;BMOV.ASM
; 4 8 12
;BMOV(src,dest,bytes)
;
; Matthew Dillon
;
; -Handles ascending/descending moves
; -Optimizes the move if addresses longword boundries and #bytes
; is a multiple of 4.
; -Completely tested
xdef _bmov
_bmov
movem.l 4(A7),A0/A1 ;source, destination
move.l 12(A7),D0 ;bytes
clr.b D1 ;long word boundry flag
andi.b #3,15(A7) ;byte count multiple of 4?
bne notlwb
andi.b #3,7(A7) ;source mulitple of 4?
bne notlwb
andi.b #3,11(A7) ;destination multiple of 4?
seq.b D1 ;set longword boundry flag if true
notlwb cmp.l A0,A1
beq end ;trivial case
ble ascend ;ascending copy
add.l D0,A0 ;descending copy
add.l D0,A1
decend tst.b D1 ;DESCEND
beq decbyte
declong lsr.l #2,D0 ;DESCEND LONGWORD
bra ab00
ab0 move.l -(A0),-(A1)
ab00 dbf.w D0,ab0
sub.l #$10000,D0
bpl ab0
end rts
ab1 move.b -(A0),-(A1) ;DESCEND BYTE
decbyte dbf.w D0,ab1
sub.l #$10000,D0
bpl ab1
rts
ascend tst.b D1 ;ASCEND
beq ascbyte
asclong lsr.l #2,D0 ;ASCEND LONGWORD
bra ab22
ab2 move.l (A0)+,(A1)+
ab22 dbf.w D0,ab2
sub.l #$10000,D0
bpl ab2
rts
ab3 move.b (A0)+,(A1)+ ;ASCEND BYTE
ascbyte dbf.w D0,ab3
sub.l #$10000,D0
bpl ab3
rts
!Funky!Stuff!
fi # end of overwriting check
echo shar: "extracting 'bset.asm'" '(1076 characters)'
if test -f 'bset.asm'
then
echo shar: "will not over-write existing file 'bset.asm'"
else
cat << \!Funky!Stuff! > 'bset.asm'
;BSET.ASM
;BZERO.ASM
;
; Uses longword operations if data is aligned on a longword boundry
; and the size is a mulitple of 4. Otherwise, uses byte operations.
xdef _bset
xdef _bzero
_bzero
clr.l D1
bra begin
_bset
move.b 15(A7),D1 ;12(A7)-> msb . . lsb (D1 = data)
begin
move.l 4(A7),A0 ;A0 = address
move.l 8(A7),D0 ;D0 = byte count
andi.b #3,11(A7) ;byte count on long word boundry?
bne drop
andi.b #3,7(A7) ;address on longword boundry?
bne drop
bra lwb
loop move.b D1,(A0)+ ;BYTE SET LOOP
drop dbf.w D0,loop ;remember, only effects lower word
sub.l #$10000,D0 ;for buffers >65535
bpl loop ;branch to loop because D0.W now is FFFF
rts
lwb lsr.l #2,D0 ;byte count / 4 (longword chunks)
tst.l D1 ;BZERO
beq dropl
move.b D1,14(A7) ;15(A7) already contains the byte
move.w 14(A7),D1 ;D1 0..15 set
swap D1
move.w 14(A7),D1 ;D1 16..31 set
bra dropl
loopl move.l D1,(A0)+ ;BYTE SET LOOP
dropl dbf.w D0,loopl ;remember, only effects lower word
sub.l #$10000,D0 ;for buffers >65535
bpl loopl ;branch to loop because D0.W now is FFFF
rts
!Funky!Stuff!
fi # end of overwriting check
echo shar: "extracting 'encode.uue'" '(10663 characters)'
if test -f 'encode.uue'
then
echo shar: "will not over-write existing file 'encode.uue'"
else
cat << \!Funky!Stuff! > 'encode.uue'
begin 644 encode
M```#\P`````````#``````````(```:L```!#`````$```/I```&K$[Z!LA.
M5?_F2.<(("!M``PB4`P1`&1G)"QM``PB5@P1`$1G&"QM``PB5@P1`'5G#"QM
M``PB5@P1`%5F!AE\``&#J@RM`````0`(9A1(>@(B3KH,R%A/2'@``4ZZ%W98
M3TAX``A(;?_L3KH&"%!/(&T`#"\H``1.NA(^6$^PO`````AC!'`(8`X@;0`,
M+R@`!$ZZ$B183R\`2&W_["!M``PO*``$3KH%3D_O``Q.N@(J2&W_[$ZZ`]Q8
M3W@"8``!GDAX``(P!$C`Y8`@;0`,+S`(`$ZZ"B)03RM`_^9*K?_F;P`!8$AX
M``)"IR\M_^9.N@EN3^\`#"M`__P@+?_\4(#`O/____@K0/_X+RW_^$ZZ%0!8
M3R1`2H!G``$$0J="IR\M_^9.N@DX3^\`#"\M__PO"B\M_^9.N@L:3^\`#"\M
M_^9.NA>46$\@2M'M__P0*/__4@`;0/_K<``0+?_K+P`B+?_XDJW__"\!($K1
M[?_\+PA.N@4"3^\`#$*M__1@$B!*T>W_]"\(3KH!>%A/4*W_]"`M__2PK?_X
M;>1(>`,!,`1(P.6`(&T`#"\P"`!.N@E&4$\K0/_F2JW_YFU&2BR#JF<L(&W_
M_"M(__C1RAMH____ZTJM__AG%B!*T>W_^!`H__^P+?_K9@93K?_X8.0O+?_X
M+PHO+?_F3KH4]D_O``Q@&#`$2,#E@"!M``PO,`@`2'H`;TZZ"_103V`8,`1(
MP.6`(&T`#"\P"`!(>@!U3KH+VE!/+RW_YDZZ%IQ83V`8,`1(P.6`(&T`#"\P
M"`!(>@!S3KH+ME!/4D0P!$C`L*T`"&T`_EI,WP003EU.=41%4R!K97D@6V9I
M;&5S+BXN70!5;F%B;&4@=&\@<F5O<&5N(&9O<B!W<FET93H@)7,*`%5N86)L
M92!T;R!A;&QO8V%T92!M96UO<GD@9F]R("5S"@!5;F%B;&4@=&\@;W!E;B`E
M<PH`3E4``"\$>`!@%$'L@`)P`!`P0`!#[(,B$X0(`%)$N'P`0&WF*!].74YU
M3E7_[DCG#P!^`&`L0>R``G``$#!P`"\`+RT`"$ZZ`IQ03R\`,`=(P"\`2&W_
M^$ZZ`C!/[P`,4D>^?`!`;<XH+?_X*BW__$HL@ZIG(GX/8!@L!2H$,`=(P.>`
M0>R#L"(P"`"]@;.$4T=*1VSD8")^`&`8+`0H!3`'2,#G@$'L@[`B,`@`O8&S
MA5)'OGP`$&WB("W_^+F`X(@K0/_T*T3_^"M%__Q^`&`L0>R#(G``$#!P`"\`
M2&W_^$ZZ`@!03R\`,`=(P"\`+RT`"$ZZ`91/[P`,4D>^?`!`;<X@+?_TP+P`
M```_.T#_\B`M__3LB,"\````/SM`__`P+?_R0>R``G(`$C```#M!_^XP+?_P
M0>R``C(M__)#[(`"$[```!``,"W_\$'L@`(1K?_O```P+?_R0>R``G(`$C``
M`#M!__(P+?_P0>R``G(`$C```#M!__`P+?_R0>R#(G(`$C```#M!_^XP+?_P
M0>R#(C(M__)#[(,B$[```!``,"W_\$'L@R(1K?_O``!,WP#P3EU.=4Y5__A(
MYPP`>`!@+$'L@$)P`!`P0``O`"\M``A.N@$,4$\O`#`$2,`O`$AM__A.N@"@
M3^\`#%)$N'P`0&W.>`!@?C`$2,#C@$'L@+(Z,`@`8"H@+?_XXX`B+?_X=!_D
MJ8"!*T#_^"`M__SC@"(M__QT'^2I@($K0/_\4T5*16;2>@!@-$'L@()P`!`P
M4``O`$AM__A.N@"44$\O`#`%2,`O`#($2,'G@4'L@[#2B"\!81Y/[P`,4D6Z
M?``P;<921+A\`!!M`/]\3-\`,$Y=3G5.50``2BT`$V<F<`<R+0`.2,'F@9"!
M(&T`"-'`-"T`#DC"Q+P````'=@'EHX<08"9P!S(M``Y(P>:!D($@;0`(T<`T
M+0`.2,+$O`````=V`>6C1H/'$$Y=3G5.50``,"T`#DC`P+P````'<@'AH70'
M-BT`#DC#YH.4@R!M``AV`!8P*`#"@V<&<`%.74YU<`!@^$SO`P``!"`O``Q"
M`0(O``,`#V80`B\``P`'9@@"+P`#``M7P;/(9QQO+-'`T\!*`6<6Y(A@`B,@
M4<C__)"\``$``&KR3G43(%'(__R0O``!``!J\DYU2@%G%N2(8`(BV%'(__R0
MO``!``!J\DYU$MA1R/_\D+P``0``:O).=4*!8`02+P`/(&\`!"`O``@"+P`#
M``MF#`(O``,`!V8$8!`0P5'(__R0O``!``!J\DYUY(A*@6<2'T$`#C(O``Y(
M03(O``Y@`B#!4<C__)"\``$``&KR3G5A<$/L@R)%[(,BM<EF#C(\`$-K"'0`
M(L)1R?_\*4^#9BQX``0I3H-J2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].
M<T/Z`"!.KOYH*4"#;F8,+CP``X`'3J[_E&`$3KH`&E!/3G5D;W,N;&EB<F%R
M>0!)^0``?_Y.=4Y5```O"DAY``$``#`L@Q[!_``&+P!.NA*X4$\I0(-R9A1"
MITAY``$``$ZZ$GQ03RYL@V9.=2!L@W)":``$(&R#<C%\``$`$")L@W(S?``!
M``H@;(-F("R#9I"H``10@"E`@W8@;(-V(+Q-04Y80J=.NA)L6$\D0$JJ`*QG
M,"\M``PO+0`(+PI.N@"T3^\`#"E\`````8-Z(&R#<@!H@```!"!L@W(`:(``
M``I@1$AJ`%Q.NA*$6$](:@!<3KH21%A/*4"#?B!L@WY*J``D9Q`@;(-^(F@`
M)"\13KH1/EA/+RR#?B\*3KH%+%!/*6R#?H."3KH1/B!L@W(@@$ZZ$6P@;(-R
M(4``!F<62'@#[4AZ`"Q.NA%(4$\@;(-R(4``#"\L@X(O+(.&3KKWEE!/0J=.
MN@]<6$\D7TY=3G4J`$Y5``!(YPPP)&T`$"!M``@@*`"LY8`H`"!$("@`$.6`
M)D`0$TB`2,#0K0`,5(`I0(.*0J<O+(.*3KH16%!/*4"#CF8(3-\,,$Y=3G40
M$TB`2,`O`"!+4H@O""\L@XY.N@%:3^\`#$AZ`5`0$TB`2,#0K(..+P!.N@00
M4$\O+0`,+PHO+(..3KH#W$_O``Q"K(.&)FR#CB1+$!-(@$C`*@"PO````"!G
M(+J\````"6<8NKP````,9Q"ZO`````UG"+J\````"F8$4HM@S`P3`"!M``",
M#!,`(F8R4HL@2U*+$!!(@$C`*@!G("!*4HH0A;J\````(F80#!,`(F8$4HM@
M!D(J__]@`F#28$0@2U*+$!!(@$C`*@!G,+J\````(&<HNKP````)9R"ZO```
M``QG&+J\````#6<0NKP````*9P@@2E**$(5@PB!*4HI"$$J%9@)3BU*L@X9@
M`/\\0A)"IR`L@X92@.6`+P!.NA`D4$\I0(."9@A"K(.&8`#^QGH`)FR#CF`:
M(`7E@"!L@X(ABP@`+PM.N@B<6$]2@-?`4H6ZK(.&;>`@!>6`(&R#@D*P"`!@
M`/Z.(`!,[P,```0@""(O``Q@`A#95\G__&<&4D%@`D(84<G__$YU3E4``$CG
M#"`H+0`(3KH-"G(&(`1.N@ZZ)$#5[(-R2H1M#C`L@QY(P+B`;`1*DF82*7P`
M```"@Y)P_TS?!#!.74YU("T`$%.`+P`O+0`,+Q).N@\43^\`#"H`L+S_____
M9@Q.N@Z\*4"#DG#_8,Q"IT*G+Q).N@[P3^\`#&"\3E4``"\M``Q(>`,!+RT`
M"&$(3^\`#$Y=3G5.50``2.</,"1M``A.N@QR)FR#<G@`8!!R!B`$3KH.&DJS
M"`!G$E*$,"R#'DC`N(!MYGH&8```T`@M``$`#F<T2'C__R\*3KH.5%!/+`!G
M)"\&3KH.B%A/+PI.N@X86$]*@&803KH.(BH`L+P```#-9@``E$AX`^TO"DZZ
M#BY03RP`2H9F9`@M````#F8$>@%@=$AX`^XO"DZZ#A!03RP`9@A.N@WD*@!@
M7$AX`"%(>@">3KH.J%!/+@!G"B\'3KH.4EA/8")(>``!2'H`CB\&3KH.%D_O
M``Q(>/__0J<O!DZZ#>Q/[P`,8"H@+0`,P+P```4`L+P```4`9A@O!DZZ#5Q8
M3WH$*46#DG#_3-\,\$Y=3G5R!B`$3KH-'B>&"`!R!B`$3KH-$B!`T<LQ;0`.
M``0(+0`#``YG$$AX``%"IR\&3KH-BD_O``P@!&"^9&]S+FQI8G)A<GD```!.
M50``2.<,("@M``A.N@L6<@8@!$ZZ#,8D0-7L@W)*A&T.,"R#'DC`N(!L!$J2
M9A(I?`````*#DG#_3-\$,$Y=3G4P*@`$2,#`O`````.PO`````%F#"E\````
M!8.2</]@V"\M`!`O+0`,+Q).N@SV3^\`#"H`L+S_____9@Q.N@RL*4"#DG#_
M8+`@!6"L,#Q__V`$,"\`#B!O``1*&&;\4T@B;P`(4T`0V5?(__QG`D(0("\`
M!$YU(&\`!"`((F\`"!#99OQ.=4Y5```O"B1M``A*$F<D($I2BA`02(!(P"\`
M3KH%DEA/L+S_____9@AP_R1?3EU.=6#82'@`"DZZ!7983V#L3E4``$CG#C`D
M;0`(0J=(>@".3KH,YE!/*4"#K&8(3-\,<$Y=3G4@;0`,(F@`)"\I``1.N@T6
M6$\H`&=22'H`;2!$+R@`-DZZ#.A03R9`2H!G-$AX`^TO"TZZ"^Y03RP`9R0@
M!N6`*@`@125H``@`I"5&`)Q(>`/M2'H`.$ZZ"\I03R5``*`O!$ZZ#+183R\L
M@ZQ.N@P86$]"K(.L8(!I8V]N+FQI8G)A<GD`5TE.1$]7`"H`3E4``$AM``PO
M+0`(2'H$KDZZ`)!/[P`,3EU.=4Y5``!(YP@@)&T`$`RM````!``49@@@;0`(
M*!!@%$JM``QO""!M``@H$&`&(&T`""@00JT`%$JM``QL$D2M``Q*A&P*1(0K
M?`````$`%"(M``P@!$ZZ`])![(#24XH4L`@`(BT`#"`$3KH#RB@`9MY*K0`4
M9P93BA2\`"T@"DS?!!!.74YU3E7_%$CG"#`D;0`()FT`#$*M__@K;0`0__P@
M2U*+$!!(@$C`*`!G``,PN+P````E9@`#"D(M_R(K?`````'_]"M\````(/_P
M*WP``"<0_^P@2U*+$!!(@$C`*`"PO````"UF$$*M__0@2U*+$!!(@$C`*`"X
MO````#!F%"M\````,/_P($M2BQ`02(!(P"@`N+P````J9AH@;?_\6*W__"M0
M_^@@2U*+$!!(@$C`*`!@-$*M_^A@(G(*("W_Z$ZZ"<#0A)"\````,"M`_^@@
M2U*+$!!(@$C`*`!![(#E"#```D@`9M*XO````"YF8B!+4HL0$$B`2,`H`+"\
M````*F8:(&W__%BM__PK4/_L($M2BQ`02(!(P"@`8#1"K?_L8")R"B`M_^Q.
MN@E6T(20O````#`K0/_L($M2BQ`02(!(P"@`0>R`Y0@P``)(`&;2*WP````$
M_^2XO````&QF%B!+4HL0$$B`2,`H`"M\````!/_D8!2XO````&AF#"!+4HL0
M$$B`2,`H`"`$8'XK?`````C_X&`<*WP````*_^!@$BM\````$/_@8`@K?/__
M__;_X"\M_^1(;?\B+RW_X"\M__Q.NOVT3^\`$"M`_]P@+?_DT:W__&!:(&W_
M_%BM__PK4/_<+RW_W$ZZ`AQ83RM`_^1@2B!M__Q8K?_\*!!![?\A*TC_W!"$
M8"B0O````&-GXE.`9Y20O`````MG`/]N68!GM%6`9P#_;E>`9P#_<F#,0>W_
M(I'M_]PK2/_D("W_Y+"M_^QO!BMM_^S_Y$JM__1G<"!M_]P,$``M9PHB;?_<
M#!$`*V8T#*T````P__!F*E.M_^@@;?_<4JW_W!`02(!(P"\`3I)83["\____
M_V8*</],WPP03EU.=6`8+RW_\$Z26$^PO/____]F!'#_8.)2K?_X("W_Z%.M
M_^BPK?_D;MI"K?_@8"0@;?_<4JW_W!`02(!(P"\`3I)83["\_____V8$</]@
MJE*M_^`@;?_<2A!G"B`M_^"PK?_L;<H@+?_@T:W_^$JM__1F*F`:2'@`($Z2
M6$^PO/____]F!G#_8`#_<%*M__@@+?_H4ZW_Z+"M_^1NV&`8+P1.DEA/L+S_
M____9@9P_V``_TA2K?_X8`#\Q"`M__A@`/\X2.=(`$*$2H!J!$2`4D1*@6H&
M1($*1``!83Y*1&<"1(!,WP`22H!.=4CG2`!"A$J`:@1$@%)$2H%J`D2!81H@
M`6#8+P%A$B`!(A]*@$YU+P%A!B(?2H!.=4CG,`!(04I!9B!(038!-`!"0$A`
M@,,B`$A`,@*"PS`!0D%(04S?``Q.=4A!)@$B`$)!2$%(0$)`=`_0@-.!MH%B
M!)*#4D!1RO_R3-\`#$YU(&\`!"`(2AAF_)'`(`A3@$YU3E4``$AL@7PO+0`(
M3KH`"%!/3EU.=4Y5```O!"@M``@O+0`,+P1.N@`T4$^XO`````IF)B!M``P0
M*``,2(!(P`@```=G%$AX__\O+0`,3KH`_E!/*!].74YU8/A.50``+PHD;0`,
M(%*QZ@`$91H@+0`(P+P```#_+P`O"DZZ`-!03R1?3EU.=2!24I(0+0`+$(!(
M@$C`P+P```#_8.1.50``+PI![(%F)$@@2M7\````%B\(81!83T'L@QZUR&7J
M)%].74YU3E4``$CG""`D;0`(>``@"F8*</],WP003EU.=4HJ``QG5`@J``(`
M#&<,2'C__R\*85903R@`$"H`#4B`2,`O`$ZZ!0A83XB`""H``0`,9PHO*@`(
M3KH"/%A/""H`!0`,9Q0O*@`23KH"V%A/+RH`$DZZ`B!83T*20JH`!$*J``A"
M*@`,(`1@C$Y5__Y(YP@@)&T`"$'Z_T(I2(.6""H`!``,9PIP_TS?!!!.74YU
M""H``@`,9S(H$IBJ``@O!"\J``@0*@`-2(!(P"\`3KH"ED_O``RPA&<0".H`
M!``,0I)"J@`$</]@O@RM_____P`,9A`(J@`"``Q"DD*J``1P`&"D2JH`"&8(
M+PI.N@"D6$\,:@`!`!!F,!MM``___TAX``%(;?__$"H`#4B`2,`O`$ZZ`C)/
M[P`,L+P````!9I@@+0`,8`#_8"2J``@P*@`02,#0J@`()4``!`CJ``(`#"!2
M4I(0+0`/$(!(@$C`P+P```#_8`#_,$Y5```O"D'L@68D2$HJ``QG&-7\````
M%D'L@QZUR&4(<``D7TY=3G5@XD*20JH`!$*J``@@"F#J3E7__"\*)&T`"$AX
M!`!.N@#"6$\K0/_\9A@U?``!`!`@"M"\````#B5```@D7TY=3G4U?`0``!`(
MZ@`!``PE;?_\``@0*@`-2(!(P"\`3KH`WEA/2H!G!@`J`(``#&#,3E4``$CG
M`#`D;(-B8!0F4B`J``10@"\`+PI.N@1\4$\D2R`*9NA"K(-B3-\,`$Y=3G5.
M50``+PI!^O_&*4B#FD*G("T`"%"`+P!.N@0J4$\D0$J`9@AP`"1?3EU.=22L
M@V(E;0`(``0I2H-B(`I0@&#F3E4``"\M``AAMEA/3EU.=4Y5``!(YP`PE\LD
M;(-B8`X@;0`(48BQRF<2)DHD4B`*9NYP_TS?#`!.74YU(`MG!":28`0I4H-B
M("H`!%"`+P`O"DZZ`])03W``8-A.50``+PIR!B`M``A.N@*T)$#5[(-R2JT`
M"&T2,"R#'DC`(BT`"+*`;`1*DF80*7P````"@Y)P_R1?3EU.=7(&("T`"$ZZ
M`GP@;(-R+S`(`$ZZ`LA83TJ`9P1P`6`"<`!@UDY5```O+0`(3KH"DEA/2H!F
M#DZZ`IPI0(.2</].74YU<`!@^$Y5``!(YPP@*"T`"$ZZ`'9R!B`$3KH")B1`
MU>R#<DJ$;0XP+(,>2,"X@&P$2I)F$BE\`````H.2</],WP0P3EU.=3`J``3`
M?``#9@PI?`````6#DG#_8.(O+0`0+RT`#"\23KH"B$_O``PJ`+"\_____V8,
M3KH"%BE`@Y)P_V"Z(`5@MDY5__Q(>!``0J=.N@+L4$\K0/_\"```#&<22JR#
M>F8(("W__$Y=3G5.N@`&<`!@]$Y5``!(>``$2'H`'DZZ`?HO`$ZZ`B1/[P`,
M2'@``4ZZ``Q83TY=3G5>0PH`3E4``$JL@Y9G!B!L@Y9.D"\M``A.N@`(6$].
M74YU3E7__"\$*VT`"/_\2JR#<F<L>`!@"B\$3KH`SEA/4H0P+(,>2,"X@&WL
M,"R#'L'\``8O`"\L@W).N@(,4$]*K(.:9P8@;(.:3I!*K(.>9PHO+(.>3KH!
MPEA/2JR#HF<*+RR#HDZZ`;)83TJL@Z9G"B\L@Z9.N@&B6$\L>``$""X`!`$I
M9Q0O#4OZ``I.KO_B*E]@!D*G\U].<TJL@WYF*DJL@XYG(B\L@XHO+(..3KH!
MEE!/("R#AE*`Y8`O`"\L@X).N@&"4$]@#DZZ`7(O+(-^3KH!GEA/("W__"YL
M@V9.=2@?3EU.=4Y5``!(YPX@*"T`"'(&(`1.N@!$)$#5[(-R2H1M#C`L@QY(
MP+B`;`1*DF82*7P````"@Y)P_TS?!'!.74YU,"H`!,!\@`!F""\23KH`+EA/
M0I)P`&#@2.=P`#0!Q,`F`4A#QL!(0T)#U(-(0,#!2$!"0-""3-\`#DYU(B\`
M!"QL@VY.[O_<(B\`!"QL@VY.[O^"(B\`!"QL@VY.[O^X+&R#;D[N_\HL;(-N
M3N[_?"(O``0L;(-N3N[_*$SO``8`!"QL@VY.[O^L3.\`!@`$+&R#;D[N_^(L
M;(-N3N[_Q$SO``X`!"QL@VY.[O_63.\`#@`$+&R#;D[N_[XB+P`$+&R#;D[N
M_Z9,[P`.``0L;(-N3N[_T$CG`01,[R"```PL;(-J3J[_E$S?((!.=4[Z``(B
M;P`$+&R#:D[N_F),[P`#``0L;(-J3N[_.B)O``0L;(-J3N[^VBQL@VI.[O]\
M(F\`!"`O``@L;(-J3N[_+B!O``0L;(-J3N[^C"QL@VHB;P`$("\`"$[N_=@B
M;P`$+&R#:D[N_H9,[P`#``0L;(-J3N[^SB!O``0L;(-J3N[^@$SO`P``!"QL
M@ZQ.[O^@(&\`!"QL@ZQ.[O^F(&\`!"QL@ZQ.[O^R``````/L`````0````$`
M``<^`````````_(```/J````R`DY&28-'RP@"QT(!240*#XI`#4O,!88-BTG
M-"(K##\D"C<S(1P#,CHC/14&&@(3%Q$!&RHQ#C@\$@0'%#LN#QX%*!TU`B<9
M*BXC%Q`Q/B(_$0<W"Q,@'`0)`Q85)BD4.BTE&"0Y#QHV"@`O#CP,*P8!'A\S
M,`@L#3(].S02(1LX)PT/!"T@"#XN*10J-#8<!1D`'P(>)!<!."4K,B(*"3<S
M.B\:&`8P,2,.+`,F/#\1``(``@`!``$``0`!``$``0`"``$``0`!``$``0`!
M``(P,3(S-#4V-S@Y86)C9&5F````("`@("`@("`@,#`P,#`@("`@("`@("`@
M("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,#`P,#$!`0$!`0$`)"0D)
M"0D!`0$!`0$!`0$!`0$!`0$!`0$!`4!`0$!`0`H*"@H*"@("`@("`@("`@("
M`@("`@("`@("0$!`0"```````````````````0`````!````````````````
M``````$!`````0`````````````````````!`@````$`````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
9````````%``````#\@```^L````!```#\@``
`
end
!Funky!Stuff!
fi # end of overwriting check
exit 0
# End of shell archive