dillon@CORY.BERKELEY.EDU (Matt Dillon) (05/11/87)
Oh what the hell.. Here's Bezier again, but this time I've added an automation option... you can watch the Bezier curve bounce all over its window by specifying a random seed: bezier [seed [delay]] example: bezier 24 If you don't want it to run continuously, you can specify a delay (passed directly to Delay()): bezier 24 10 Otherwise, if you give it no arguments, it allows you to play with the bezier curve like in my first posting. P.S. running it on automatic 'bezier #', and setting the granularity to about 40 looks very impressive.... I've found it somewhat appeasing to have running on my workbench screen. I also optimized the source quite a bit. -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: # bezier.c # bezier.uue # This archive created: Sun May 10 23:18:04 1987 export PATH; PATH=/bin:/usr/bin:$PATH echo shar: "extracting 'bezier.c'" '(7410 characters)' if test -f 'bezier.c' then echo shar: "will not over-write existing file 'bezier.c'" else cat << \!Funky!Stuff! > 'bezier.c' /* * BEZIER.C * * Matthew Dillon. * Public Domain (no Copyrights whatsoever) * * -Assumes AZTEC compilation, +L (32 bit ints), with all AMIGA symbols * precompiled. Additionally expects certain typedefs and routines * found in MY.LIB, as well as some MY.LIB #include files. * * An experienced programmer can remove the MY.LIB dependancies * (openlibs() call), and figure out what typedefs have been assumed if * he wishes to compile the program. You can also simply extract the * Bezier functions for your own use. * * BEZIER EQUATIONS: * * c(t) = T(t)BP * * T(t) = (t^3 t^2 t 1) P= ( P1 ) * B = ( -1 3 -3 1 ) ( P2 ) * ( 3 -6 3 0 ) ( P3 ) * ( -3 3 0 0 ) ( P4 ) * ( 1 0 0 0 ) * * t: range 0 to 1 * C: coordinate matrix 1xD matrix (D = dimensions) * B: Bezier matrix 4x4 * P: Ctrl. Point matrix 4xD matrix (D = dimensions) * * using D = 2 */ #include <typedefs.h> #include <xmisc.h> #define SHIFTS 9 #define ONE (1<<SHIFTS) typedef struct PropInfo XPI; typedef struct Image IM; extern IMESS *GetMsg(); #define MYGADGETS (WINDOWSIZING|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE) NW Nw = { 64, 64, 320, 100, 0, 1, NEWSIZE|MOUSEBUTTONS|MOUSEMOVE|CLOSEWINDOW|GADGETDOWN|GADGETUP, MYGADGETS|REPORTMOUSE|ACTIVATE|NOCAREREFRESH, 0, 0, (UBYTE *)"Bezier, By Matthew Dillon", NULL, NULL, 32, 64, -1, -1, WBENCHSCREEN }; WIN *Win; RP *Rp; short Ux, Uy, Lx, Ly; short Step = 128; main(ac, av) char *av[]; { register IMESS *mess; short notdone = 1; short pt = -1; short ptarray[4][2]; short auarray[4][2]; /* auto move */ short au = 0; long delay = 0; short gy, gg = 0; XPI *po; if (ac >= 2) { if (ac >= 3) delay = atoi(av[2]); au = 1; loadauto(auarray, atoi(av[1])); } init_gadgets(&Nw, &po); exiterr(!openlibs(INTUITION_LIB|GRAPHICS_LIB), "unable to open libs"); exiterr(!(Win = OpenWindow(&Nw)), "unable to open window"); Rp = Win->RPort; SetAPen(Rp, 1); setpoint(ptarray, 0, 32, 32); setpoint(ptarray, 1, 40, 40); setpoint(ptarray, 2, 50, 50); setpoint(ptarray, 3, 60, 60); setbounds(ptarray); while (notdone) { short mx, my, mm = 0; if (au == 0) { WaitPort(Win->UserPort); } else { if (delay) Delay(delay); moveauto(auarray, ptarray); } while (mess = GetMsg(Win->UserPort)) { switch(mess->Class) { case CLOSEWINDOW: notdone = 0; break; case NEWSIZE: setbounds(ptarray); break; case GADGETUP: case GADGETDOWN: { gg = mess->Class; gy = po->VertPot / 256; } break; case MOUSEBUTTONS: switch(mess->Code) { case SELECTDOWN: pt = getpoint(ptarray, mess->MouseX, mess->MouseY); movepoint(ptarray, pt, mess->MouseX, mess->MouseY); drawcurve(ptarray); break; case SELECTUP: pt = -1; break; } break; case MOUSEMOVE: if (gg == GADGETDOWN) { gy = po->VertPot / 256; break; } mm = 1; mx = mess->MouseX; my = mess->MouseY; break; default: break; } ReplyMsg(mess); } if (mm && pt >= 0) { movepoint(ptarray, pt, mx, my); drawcurve(ptarray); } if (gg) { char buf[32]; if (gg == GADGETUP) gg = 0; if (gy + 1 >= 0 && gy + 1 != Step) { Step = gy + 1; sprintf(buf, "gran: %4ld/%ld", Step, ONE); drawcurve(ptarray); Move(Rp, Ux + 1, Uy + 16); Text(Rp, buf, strlen(buf)); } } } exiterr(1, NULL); } exiterr(n, str) char *str; { if (n) { if (str) puts(str); if (Win) CloseWindow(Win); closelibs(-1); exit(1); } } setbounds(a) register long *a; { Ux = Win->BorderLeft; Uy = Win->BorderTop; Lx = Win->Width - Win->BorderRight; Ly = Win->Height- Win->BorderBottom + 1; drawcurve(a); } setpoint(a, pt, x, y) register short a[4][2]; { a[pt][0] = x; a[pt][1] = y; drawpoints(a, pt, pt + 1); } getpoint(a, x, y) register short a[4][2]; { register short i, bi; register long r, br; for (i = bi = 0, br = 0x7FFFFFFF; i < 4; ++i) { r = (x-a[i][0])*(x-a[i][0]) + (y-a[i][1])*(y-a[i][1]); if (r < br) { bi = i; br = r; } } return(bi); } movepoint(a, pt, x, y) register short a[4][2]; { SetAPen(Rp, 0); drawpoints(a, pt, pt + 1); SetAPen(Rp, 1); setpoint(a, pt, x, y); } #define S10(x) ((x) >> SHIFTS) #define S20(x) ((x) >> (2*SHIFTS)) #define MUL3(x) ((x)+((x)<<1)) /* * So I can use integer arithmatic, I am defining 512 as 1 (as far * as the mathematics go), which means that I must divide any power * multiplication by 512^(n-1). E.G. .5^2 = .25 ... to make 256^2 * equal 128, I must divide by 512^1 */ drawcurve(a) register short a[4][2]; { long mr[4]; /* Holds T(t)B partial result */ char lastpt; short array[ONE][2]; /* hold points to plot */ register long ttt3, t3, tt3; register short t, i, n; register long tt, ttt; lastpt = 0; for (t = n = 0; t <= ONE; t += Step) { /* t = 0 to 1 */ oncemore: tt = t * t; ttt= tt * t; ttt3 = S20(MUL3(ttt)); tt3 = S10(MUL3(tt)); t3 = MUL3(t); ttt = S20(ttt); mr[0] = -ttt + tt3 - t3 + ONE; mr[1] = ttt3 - (tt3<<1) + t3; mr[2] = -ttt3 + tt3; /* MR[3] is ttt */ for (i = 0; i < 2; ++i) { array[n][i] = (mr[0] * a[0][i] + mr[1] * a[1][i] + mr[2] * a[2][i] + ttt * a[3][i]) >> SHIFTS; } ++n; } if (lastpt == 0 && t - Step < ONE) { lastpt = 1; t = ONE; goto oncemore; } SetAPen(Rp, 0); RectFill(Rp, Ux, Uy, Lx - 1, Ly - 1); SetAPen(Rp, 1); Move(Rp, a[0][0], a[0][1]); PolyDraw(Rp, n, array); drawpoints(a, 0, 4); } drawpoints(a, is, ie) register short a[4][2]; { register short i; for (i = is; i < ie; ++i) { Move(Rp, a[i][0] - 2, a[i][1]); Draw(Rp, a[i][0] + 2, a[i][1]); Move(Rp, a[i][0], a[i][1] - 2); Draw(Rp, a[i][0], a[i][1] + 2); } } /* * AUTO ROUTINES ------------------------------------------------------ */ loadauto(a, seed) register short a[4][2]; { register short i, j; register long n; n = random(seed); for (i = 0; i < 4; ++i) { for (j = 0; j < 2; ++j) { n = random(n); if ((a[i][j] = (((n>>1) & 15) - 7)) == 0) a[i][j] = 1; } } } moveauto(au, ar) register short au[4][2]; register short ar[4][2]; { register short i, j; short lb[2], mb[2]; lb[0] = Ux; lb[1] = Uy; mb[0] = Lx; mb[1] = Ly; for (i = 0; i < 4; ++i) { for (j = 0; j < 2; ++j) { if (au[i][j] < 0 && ar[i][j] <= lb[j]+8) au[i][j] = -au[i][j]; if (au[i][j] > 0 && ar[i][j] >= mb[j]-8) au[i][j] = -au[i][j]; ar[i][j] += au[i][j]; } } drawcurve(ar); } random(n) { return((n ^ (n >> 8)) * 13 + 1); } /* * GADGET ROUTINES! ------------------------------------------------ */ #define NG(nn) &Gadgets[nn+1] #define G_YGLOB 1 #define G_XGLOB 2 XPI Props[] = { { AUTOKNOB|FREEVERT , 0, 0, 0x1FFF, 0x1FFF } }; IM Images[] = { { 0,0,2,1,1, NULL, 1, 0, NULL }, }; GADGET Gadgets[] = { { NULL, -15, 11, 15, -19, GADGIMAGE|GADGHCOMP|GRELRIGHT|GRELHEIGHT, GADGIMMEDIATE|RIGHTBORDER|RELVERIFY,PROPGADGET, (APTR)&Images[0],NULL,NULL,0,(APTR)&Props[0], G_YGLOB, 0 }, }; GADGET *Gc; long GUx, GUy; init_gadgets(nw, ppo) NW *nw; XPI **ppo; { nw->FirstGadget = &Gadgets[0]; *ppo = &Props[0]; } !Funky!Stuff! fi # end of overwriting check echo shar: "extracting 'bezier.uue'" '(12325 characters)' if test -f 'bezier.uue' then echo shar: "will not over-write existing file 'bezier.uue'" else cat << \!Funky!Stuff! > 'bezier.uue' begin 644 bezier M```#\P`````````#``````````(```>8````_P````$```/I```'F$[Z#%A" M97II97(L($)Y($UA='1H97<@1&EL;&]N`$Y5_Z@O"CM\``'__CM\_____$)M M_]I"K?_60FW_T@RM`````@`(;3P,K0````,`"&T2(&T`#"\H``A.N@HV6$\K M0/_6.WP``?_:(&T`#"\H``1.N@H>6$\O`$AM_]Q.N@@D4$](;?_.2&R``DZZ M">903TAZ`R)(>``#3KH+,%A/2H!F!'`!8`)P`$C`+P!.N@-`4$](>@,42&R` M`DZZ'9A83RE`@ZIF!'`!8`)P`$C`+P!.N@,<4$\@;(.J*6@`,H.N2'@``2\L M@ZY.NAT.4$](>``@2'@`($*G2&W_[$ZZ`Z!/[P`02'@`*$AX`"A(>``!2&W_ M[$ZZ`XA/[P`02'@`,DAX`#)(>``"2&W_[$ZZ`W!/[P`02'@`/$AX`#Q(>``# M2&W_[$ZZ`UA/[P`02&W_[$ZZ`MY83TIM__YG``)(0FW_R$IM_]IF$"!L@ZHO M*`!63KH<+EA/8!Y*K?_69PHO+?_63KH;*%A/2&W_[$AM_]Q.N@>&4$\@;(.J M+R@`5DZZ&[Y83R1`2H!G``$8("H`%&```-1";?_^8```_$AM_^Q.N@)N6$]@ M``#N.VH`%O_2(&W_SG``,"@`!."(.T#_U&```-1P`#`J`!A@6#`J`")(P"\` M,BH`($C!+P%(;?_L3KH"WD_O``P[0/_\,"H`(DC`+P`R*@`@2,$O`30M__Q( MPB\"2&W_[$ZZ`TI/[P`02&W_[$ZZ`Y183V`8.WS____\8!"0O````&AGH)"\ M````@&?H8&`,;0`@_])F$B!M_\YP`#`H``3@B#M`_]1@1CM\``'_R#MJ`"#_ MS#MJ`"+_RF`R8#!5@&<`_S)=@&<`_U11@&?`D+P````09P#_+)"\````(&<` M_R*0O````<!G`/\"8,XO"DZZ&LA83V``_M9*;?_(9S1*;?_\;2XP+?_*2,`O M`#(M_\Q(P2\!-"W__$C"+P)(;?_L3KH"B$_O`!!(;?_L3KH"TEA/2FW_TF<` M`)X,;0!`_])F!$)M_](P+?_42,!2@$J`;0``A#(M_]1(P5*!-"R`,DC"LH)G M<#`M_]1(P%*`.4"`,DAX`@`P+(`R2,`O`$AZ`)1(;?^H3KH-R$_O`!!(;?_L M3KH";%A/,"R#I$C`($!(:``0,BR#HDC!4H$O`2\L@ZY.NAI$3^\`#$AM_ZA. MNA)N6$\O`$AM_Z@O+(.N3KH:;D_O``Q@`/VT0J=(>``!84)03R1?3EU.=75N M86)L92!T;R!O<&5N(&QI8G,`=6YA8FQE('1O(&]P96X@=VEN9&]W`&=R86XZ M("4T;&0O)6QD``!.50``2JT`"&<T2JT`#&<*+RT`#$ZZ#"183TJL@ZIG"B\L M@ZI.NAHT6$](>/__3KH&UEA/2'@``4ZZ%NQ83TY=3G5.50``+PHD;0`((&R# MJA`H`#9(@#E`@Z(@;(.J$"@`-TB`.4"#I"!L@ZHP*``(2,`B;(.J$BD`.$B! M2,&0@3E`@Z8@;(.J,"@`"DC`(FR#JA(I`#E(@4C!D(%2@#E`@Z@O"DZZ`398 M3R1?3EU.=4Y5```O"B1M``@@+0`,Y8`UK0`2"``@+0`,Y8`@0-'*,6T`%@`" M("T`#%*`+P`O+0`,+PI.N@+L3^\`#"1?3EU.=4Y5``!(YP\@)&T`"'H`.`4N M/'____]@:B`M``PR!$C!Y8$T,A@`2,*0@B(M``PV!$C#Y8,T,C@`2,*2@DZZ M%U(O`"`M`!`V!$C#Y8,@0]'*-B@``DC#D(,B+0`0-@1(P^6#(D/3RC8I``)( MPY*#3KH7("Q?+`[<@+R';`0Z!"X&4D2X?``$;9`P!4C`3-\$\$Y=3G5.50`` M+PHD;0`(0J<O+(.N3KH8<E!/("T`#%*`+P`O+0`,+PI.N@(F3^\`#$AX``$O M+(.N3KH83E!/+RT`%"\M`!`O+0`,+PI.NO[@3^\`$"1?3EU.=4Y5]^1(YP\P M)&T`"$(M_^]";??L?@!@``$<,`?!QRM`]^@P!TC`(BWWZ$ZZ%GHK0/?D("WW MY..`T*WWY"@`<A+BI"`M]^CC@-"M]^@L`'()XJ8P!TC`XX`R!TC!*@#:@2`M M]^1R$N*@*T#WY"`M]^1$@-"&D(70O````@`K0/_P(`;C@"($DH#2A2M!__0@ M!$2`T(8K0/_XE\M@``"(,`M(P..`(@`P,A@`2,`B+?_P3KH5]#0+2,+C@B!" MT<HO`#`H``1(P"(M__1.NA7:)!_4@#8+2,/C@R)#T\HP*0`(2,`B+?_X3KH5 MOM2`-@M(P^.#+$/=RC`N``Q(P"(M]^1.NA6DU(!V">:B-BWW[$C#Y8,R"TC! MXX'6@4WM]^X]@C@`4DNV_``";0#_=%)M]^S>;(`ROGP"`&\`_N!*+?_O9B(P M!TC`,BR`,DC!D(&PO````@!L#AM\``'_[SX\`@!@`/ZX0J<O+(.N3KH6PE!/ M,"R#J$C`4X`O`#(L@Z9(P5.!+P$T+(.D2,(O`C8L@Z)(PR\#+RR#KDZZ%H)/ M[P`42'@``2\L@ZY.NA:$4$\P*@`"2,`O`#(22,$O`2\L@ZY.NA8V3^\`#$AM M]^XP+??L2,`O`"\L@ZY.NA8P3^\`#$AX``1"IR\*80Q/[P`,3-\,\$Y=3G5. M50``2.<(("1M``@X+0`.8```O#`$2,#E@"!`T<HP*``"2,`O`#($2,'E@30R M&`!(PE6"+P(O+(.N3KH5QD_O``PP!$C`Y8`@0-'*,"@``DC`+P`R!$C!Y8$T M,A@`2,)4@B\"+RR#KDZZ%89/[P`,,`1(P.6`($#1RC`H``)(P%6`+P`R!$C! MY8$T,A@`2,(O`B\L@ZY.NA5J3^\`##`$2,#E@"!`T<HP*``"2,!4@"\`,@1( MP>6!-#(8`$C"+P(O+(.N3KH5*D_O``Q21#`$2,"PK0`0;0#_/$S?!!!.74YU M3E4``$CG#B`D;0`(+RT`#$ZZ`9Q83RP`>`!@3'H`8$`O!DZZ`8I83RP`(`;B M@,"\````#U^`,@1(P>6!-`5(PN."TH(U@!@`9A0P!$C`Y8`R!4C!XX'0@36\ M``$(`%)%NGP``FVZ4D2X?``$;:Y,WP1P3EU.=4Y5__A(YPPP)&T`""9M``P[ M;(.B__P[;(.D__X[;(.F__@[;(.H__IX`&```/1Z`&```.0P!$C`Y8`R!4C! MXX'0@4IR"`!L2C0$2,+E@C8%2,/C@]2#-C,H`$C#-`5(PN."0>W__#(P*`!( MP5"!MH%N(#`$2,#E@#(%2,'C@="!-`1(PN6"-@5(P^.#U(-$<@@`,`1(P.6` M,@5(P>.!T(%*<@@`;THT!$C"Y8(V!4C#XX/4@S8S*`!(PS0%2,+C@D'M__@R M,"@`2,%1@;:!;2`P!$C`Y8`R!4C!XX'0@30$2,+E@C8%2,/C@]2#1'((`#`$ M2,#E@#(%2,'C@="!-`1(PN6"-@5(P^.#U(,V,B@`UW,(`%)%NGP``FT`_QA2 M1+A\``1M`/\(+PM.NON&6$],WPPP3EU.=4Y5```@+0`(X(`O`"`M``@B`"`? MLX!R#4ZZ$@92@$Y=3G5.50``0>R`7B)M``@C2``20>R`-")M``PBB$Y=3G5. M50``2.<,("1M``AX`'H`#!(`(&8$4HI@]@P2`"UF!%**>@$,$@`P;28,$@`Y M;B`@2E**$!!(@$C`(@3C@="!)`3G@M""*`"8O````#!@U$J%9P8@!$2`8`(@ M!$S?!#!.74YU3E4``$CG""`X+0`*0?D```"()$A@)@@$``!G'"!J``1*D&<4 M(&H`!"\03KD``!T<6$\@:@`$0I#B3%"*2D1G!$J29M),WP003EU.=6=R87!H M:6-S`&EN='5I=&EO;@!E>'!A;G-I;VX`9&ES:V9O;G0`=')A;G-L871O<@!I M8V]N`&UA=&AF9G``;6%T:'1R86YS`&UA=&AI965E9&]U8F)A<P!M871H:65E M97-I;F=B87,`;&%Y97)S`&-L:7-T`'!O=&=O`'1I;65R`'@Q-0!X,38``$Y5 M_[PO"G``,"T`"BM`_[Q!^0```(@D2&!*""T````+9SPO$DAM_\!.N0``$!A0 M3TAZ`%1(;?_`3KD```_N4$\@:@`$2I!F%D*G2&W_P$ZY```=;E!/(&H`!""` M9QCB[0`*4(I*;0`*9P1*DF:L<`$D7TY=3G4O+?^\3KD```KT6$]P`&#J+FQI M8G)A<GD``&%P0^R#8D7L@V*UR68.,CP`)FL(=``BPE')__PI3X-J+'@`!"E. M@VY(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H`($ZN_F@I0(-R9@PN M/``#@`=.KO^48`1.N@`:4$].=61O<RYL:6)R87)Y`$GY``!__DYU3E4``"\* M2'D``0``,"R#7L'\``8O`$ZZ$$!03RE`@W9F%$*G2'D``0``3KH0!%!/+FR# M:DYU(&R#=D)H``0@;(-V,7P``0`0(FR#=C-\``$`"B!L@VH@+(-JD*@`!%"` M*4"#>B!L@WH@O$U!3EA"ITZZ#_183R1`2JH`K&<P+RT`#"\M``@O"DZZ`+1/ M[P`,*7P````!@WX@;(-V`&B````$(&R#=@!H@```"F!$2&H`7$ZZ$!Q83TAJ M`%Q.N@_06$\I0(."(&R#@DJH`"1G$"!L@X(B:``D+Q%.N@[P6$\O+(."+PI. MN@*J4$\I;(."@X9.N@[\(&R#=B"`3KH/'"!L@W8A0``&9Q9(>`/M2'H`+$ZZ M#OA03R!L@W8A0``,+RR#AB\L@XI.NO(@4$]"ITZZ#0Y83R1?3EU.=2H`3E4` M`$CG##`D;0`0(&T`""`H`*SE@"@`($0@*``0Y8`F0!`32(!(P-"M``Q4@"E` M@XY"IR\L@XY.N@[@4$\I0(.29@A,WPPP3EU.=1`32(!(P"\`($M2B"\(+RR# MDDZZ`5I/[P`,2'H!4!`32(!(P-"L@Y(O`$ZZ`8Y03R\M``PO"B\L@Y).N@%: M3^\`#$*L@XHF;(.2)$L0$TB`2,`J`+"\````(&<@NKP````)9QBZO`````QG M$+J\````#6<(NKP````*9@12BV#,#!,`(&T``(P,$P`B9C)2BR!+4HL0$$B` M2,`J`&<@($I2BA"%NKP````B9A`,$P`B9@12BV`&0BK__V`"8-)@1"!+4HL0 M$$B`2,`J`&<PNKP````@9RBZO`````EG(+J\````#&<8NKP````-9Q"ZO``` M``IG""!*4HH0A6#"($I2BD(02H5F`E.+4JR#BF``_SQ"$D*G("R#BE*`Y8`O M`$ZZ#:Q03RE`@X9F"$*L@XI@`/[&>@`F;(.28!H@!>6`(&R#AB&+"``O"TZZ M!DY83U*`U\!2A;JL@XIMX"`%Y8`@;(.&0K`(`&``_HX@`$SO`P``!"`((B\` M#&`"$-E7R?_\9P9206`"0AA1R?_\3G4P/'__8`0P+P`.(&\`!$H89OQ32")O M``A30!#95\C__&<"0A`@+P`$3G4@;P`$(`@B;P`($-EF_$YU3E4``"\*)&T` M"$H29R0@2E**$!!(@$C`+P!.N@7&6$^PO/____]F"'#_)%].74YU8-A(>``* M3KH%JEA/8.Q.50``2.<.,"1M``A"ITAZ`(Y.N@SX4$\I0(/29@A,WPQP3EU. M=2!M``PB:``D+RD`!$ZZ#:)83R@`9U)(>@!M($0O*``V3KH-=%!/)D!*@&<T M2'@#[2\+3KH,(%!/+`!G)"`&Y8`J`"!%)6@`"`"D)48`G$AX`^U(>@`X3KH+ M_%!/)4``H"\$3KH-0%A/+RR#TDZZ#")83T*L@])@@&EC;VXN;&EB<F%R>0!7 M24Y$3U<`*@!.50``+P0I;0`(@V)(;0`0+RT`#$AZ`!I.N@"\3^\`#"@`(&R# M8D(0(`0H'TY=3G5.50``(&R#8E*L@V(0+0`+$(!(@$C`P+P```#_3EU.=4Y5 M``!(YP@@)&T`$`RM````!``49@@@;0`(*!!@%$JM``QO""!M``@H$&`&(&T` M""@00JT`%$JM``QL$D2M``Q*A&P*1(0K?`````$`%"(M``P@!$ZZ`])![($2 M4XH4L`@`(BT`#"`$3KH#RB@`9MY*K0`49P93BA2\`"T@"DS?!!!.74YU3E7_ M%$CG"#`D;0`()FT`#$*M__@K;0`0__P@2U*+$!!(@$C`*`!G``,PN+P````E M9@`#"D(M_R(K?`````'_]"M\````(/_P*WP``"<0_^P@2U*+$!!(@$C`*`"P MO````"UF$$*M__0@2U*+$!!(@$C`*`"XO````#!F%"M\````,/_P($M2BQ`0 M2(!(P"@`N+P````J9AH@;?_\6*W__"M0_^@@2U*+$!!(@$C`*`!@-$*M_^A@ M(G(*("W_Z$ZZ"<#0A)"\````,"M`_^@@2U*+$!!(@$C`*`!![($E"#```D@` M9M*XO````"YF8B!+4HL0$$B`2,`H`+"\````*F8:(&W__%BM__PK4/_L($M2 MBQ`02(!(P"@`8#1"K?_L8")R"B`M_^Q.N@E6T(20O````#`K0/_L($M2BQ`0 M2(!(P"@`0>R!)0@P``)(`&;2*WP````$_^2XO````&QF%B!+4HL0$$B`2,`H M`"M\````!/_D8!2XO````&AF#"!+4HL0$$B`2,`H`"`$8'XK?`````C_X&`< M*WP````*_^!@$BM\````$/_@8`@K?/____;_X"\M_^1(;?\B+RW_X"\M__Q. MNOVT3^\`$"M`_]P@+?_DT:W__&!:(&W__%BM__PK4/_<+RW_W$ZZ`AQ83RM` M_^1@2B!M__Q8K?_\*!!![?\A*TC_W!"$8"B0O````&-GXE.`9Y20O`````MG M`/]N68!GM%6`9P#_;E>`9P#_<F#,0>W_(I'M_]PK2/_D("W_Y+"M_^QO!BMM M_^S_Y$JM__1G<"!M_]P,$``M9PHB;?_<#!$`*V8T#*T````P__!F*E.M_^@@ M;?_<4JW_W!`02(!(P"\`3I)83["\_____V8*</],WPP03EU.=6`8+RW_\$Z2 M6$^PO/____]F!'#_8.)2K?_X("W_Z%.M_^BPK?_D;MI"K?_@8"0@;?_<4JW_ MW!`02(!(P"\`3I)83["\_____V8$</]@JE*M_^`@;?_<2A!G"B`M_^"PK?_L M;<H@+?_@T:W_^$JM__1F*F`:2'@`($Z26$^PO/____]F!G#_8`#_<%*M__@@ M+?_H4ZW_Z+"M_^1NV&`8+P1.DEA/L+S_____9@9P_V``_TA2K?_X8`#\Q"`M M__A@`/\X2.=(`$*$2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!. M=4CG2`!"A$J`:@1$@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(? M2H!.=4CG,`!(04I!9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q. M=4A!)@$B`$)!2$%(0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU(&\`!"`( M2AAF_)'`(`A3@$YU3E4``$AL@;PO+0`(3KH`"%!/3EU.=4Y5```O!"@M``@O M+0`,+P1.N@`T4$^XO`````IF)B!M``P0*``,2(!(P`@```=G%$AX__\O+0`, M3KH`_E!/*!].74YU8/A.50``+PHD;0`,(%*QZ@`$91H@+0`(P+P```#_+P`O M"DZZ`-!03R1?3EU.=2!24I(0+0`+$(!(@$C`P+P```#_8.1.50``+PI![(&F M)$@@2M7\````%B\(81!83T'L@UZUR&7J)%].74YU3E4``$CG""`D;0`(>``@ M"F8*</],WP003EU.=4HJ``QG5`@J``(`#&<,2'C__R\*85903R@`$"H`#4B` M2,`O`$ZZ!0A83XB`""H``0`,9PHO*@`(3KH"/%A/""H`!0`,9Q0O*@`23KH" MV%A/+RH`$DZZ`B!83T*20JH`!$*J``A"*@`,(`1@C$Y5__Y(YP@@)&T`"$'Z M_T(I2(.6""H`!``,9PIP_TS?!!!.74YU""H``@`,9S(H$IBJ``@O!"\J``@0 M*@`-2(!(P"\`3KH"ED_O``RPA&<0".H`!``,0I)"J@`$</]@O@RM_____P`, M9A`(J@`"``Q"DD*J``1P`&"D2JH`"&8(+PI.N@"D6$\,:@`!`!!F,!MM``__ M_TAX``%(;?__$"H`#4B`2,`O`$ZZ`C)/[P`,L+P````!9I@@+0`,8`#_8"2J M``@P*@`02,#0J@`()4``!`CJ``(`#"!24I(0+0`/$(!(@$C`P+P```#_8`#_ M,$Y5```O"D'L@:8D2$HJ``QG&-7\````%D'L@UZUR&4(<``D7TY=3G5@XD*2 M0JH`!$*J``@@"F#J3E7__"\*)&T`"$AX!`!.N@#"6$\K0/_\9A@U?``!`!`@ M"M"\````#B5```@D7TY=3G4U?`0``!`(Z@`!``PE;?_\``@0*@`-2(!(P"\` M3KH`WEA/2H!G!@`J`(``#&#,3E4``$CG`#`D;(-F8!0F4B`J``10@"\`+PI. MN@124$\D2R`*9NA"K(-F3-\,`$Y=3G5.50``+PI!^O_&*4B#FD*G("T`"%"` M+P!.N@0`4$\D0$J`9@AP`"1?3EU.=22L@V8E;0`(``0I2H-F(`I0@&#F3E4` M`"\M``AAMEA/3EU.=4Y5``!(YP`PE\LD;(-F8`X@;0`(48BQRF<2)DHD4B`* M9NYP_TS?#`!.74YU(`MG!":28`0I4H-F("H`!%"`+P`O"DZZ`ZA03W``8-A. M50``+PIR!B`M``A.N@*T)$#5[(-V2JT`"&T2,"R#7DC`(BT`"+*`;`1*DF80 M*7P````"@YYP_R1?3EU.=7(&("T`"$ZZ`GP@;(-V+S`(`$ZZ`M183TJ`9P1P M`6`"<`!@UDY5```O+0`(3KH"GEA/2H!F#DZZ`J@I0(.></].74YU<`!@^$Y5 M``!(YPP@*"T`"$ZZ`'9R!B`$3KH")B1`U>R#=DJ$;0XP+(->2,"X@&P$2I)F M$BE\`````H.></],WP0P3EU.=3`J``3`?``#9@PI?`````6#GG#_8.(O+0`0 M+RT`#"\23KH"7D_O``PJ`+"\_____V8,3KH"(BE`@YYP_V"Z(`5@MDY5__Q( M>!``0J=.N@+.4$\K0/_\"```#&<22JR#?F8(("W__$Y=3G5.N@`&<`!@]$Y5 M``!(>``$2'H`'DZZ`?@O`$ZZ`?I/[P`,2'@``4ZZ``Q83TY=3G5>0PH`3E4` M`$JL@Y9G!B!L@Y9.D"\M``A.N@`(6$].74YU3E7__"\$*VT`"/_\2JR#=F<L M>`!@"B\$3KH`SEA/4H0P+(->2,"X@&WL,"R#7L'\``8O`"\L@W9.N@'B4$]* MK(.:9P8@;(.:3I!*K(/:9PHO+(/:3KH!F%A/2JR#UF<*+RR#UDZZ`8A83TJL M@]YG"B\L@]Y.N@%X6$\L>``$""X`!`$I9Q0O#4OZ``I.KO_B*E]@!D*G\U]. M<TJL@X)F*DJL@Y)G(B\L@XXO+(.23KH!;%!/("R#BE*`Y8`O`"\L@X9.N@%8 M4$]@#DZZ`4@O+(."3KH!@%A/("W__"YL@VI.=2@?3EU.=4Y5``!(YPX@*"T` M"'(&(`1.N@!$)$#5[(-V2H1M#C`L@UY(P+B`;`1*DF82*7P````"@YYP_TS? M!'!.74YU,"H`!,!\@`!F""\23KH`+EA/0I)P`&#@2.=P`#0!Q,`F`4A#QL!( M0T)#U(-(0,#!2$!"0-""3-\`#DYU(B\`!"QL@W).[O_<(B\`!"QL@W).[O^" M(B\`!"QL@W).[O\Z(B\`!"QL@W).[O^X+&R#<D[N_\HL;(-R3N[_?"(O``0L M;(-R3N[_*$SO``8`!"QL@W).[O_B+&R#<D[N_\1,[P`.``0L;(-R3N[_T$CG M`01,[R"```PL;(-N3J[_E$S?((!.=4[Z``(B;P`$+&R#;D[N_F),[P`#``0L M;(-N3N[_.B)O``0L;(-N3N[^VBQL@VY.[O]\(F\`!"`O``@L;(-N3N[_+D[Z M``(@;P`$+&R#;D[N_HQ.^@`"+&R#;B)O``0@+P`(3N[]V$[Z``(B;P`$+&R# M;D[N_H9,[P`#``0L;(-N3N[^SD[Z``(@;P`$+&R#;D[N_H`B;P`$3.\``P`( M+&R#OD[N_PHB;P`$3.\``P`(+&R#OD[N_Q`B;P`$3.\!`0`(+&R#OD[N_K`B M;P`$3.\`#P`(+&R#OD[N_LXB;P`$("\`""QL@[Y.[OZJ(F\`!"!O``@@+P`, M+&R#OB\'3J[_Q"X?3G5,[P,```0L;(/23N[_H"!O``0L;(/23N[_IB!O``0L M;(/23N[_LB!O``0L;(/"3N[_N"!O``0L;(/"3N[_-````^P````%```````` M"R````OT```,!```#!H```Q&`````P````$```L"```+W```#,X````````# M\@```^H```#8`$``0`%``&0``0```GH``A(/```````````````$```````` M````(`!`_____P`!`(``!0`````?_Q__```````````````````````"``$` M`0`````!````````````__$`"P`/_^T`5``3``,```!(```````````````` M````,@`!````````"T````.\```+20```\````M3```#Q```"UT```/(```+ M9@```\P```MQ```#T```"W8```/4```+?@```]@```N(```#W```"Y@```/@ M```+J````^0```NO```#Z```"[4```/L```+NP```_````O!```#]```"\4` M``/X```````````P,3(S-#4V-S@Y86)C9&5F````("`@("`@("`@,#`P,#`@ M("`@("`@("`@("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,#`P,#$!` M0$!`0$`)"0D)"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```````````````````````````````````````````````````````````` M````````````````````%``````#[````!(````!````;@```'X```",```` ME````)P```"D````K````+0```"\````Q````,P```#4````W````.0```#L M````]````/P```$$````$0`````````:````B````)````"8````H````*@` M``"P````N````,````#(````T````-@```#@````Z````/````#X```!```` 2``````/R```#ZP````$```/R ` end !Funky!Stuff! fi # end of overwriting check exit 0 # End of shell archive