RE: QuadDraw revisited - drawing program work in progress - Dav - 06-03-2022
Yeah, always starting with the same color is boring. Well I just now edited the code to fix the fill color picker, so now you can do that in a round-about way. I'm not using B key for anything, so doing a B for background color will be an easy add.
- Dav
RE: QuadDraw revisited - drawing program work in progress - James D Jarvis - 06-03-2022
Neato.
I noticed something curious by holding down anti-alias a whole lot... does it accidentally grab the colors from the grey in the menu or is it just because of the order the pixels are worked on because eventually the left and right sides don't match (I drew this with all 4 quads on the whole time).
(oh yeah i love this stuff by the way, I fell asleep last night to someone coding image filters on youtube)
RE: QuadDraw revisited - drawing program work in progress - Dav - 06-03-2022
Well that's pretty looking, James. I know this is a very simple paint thing, but surprisingly it can make a nice looking mosaic image in seconds.
You are right - the smooth sub is grabbing the gray from the menu. Good catch. I'm not doing it right obviously, I'll have to study up on the correct way.
I have made a quick fix in the smooth sub - now it doesn't grab the gray at least. Looks better to me. Also the next random fill color is correctly shown on the menu (before it showed the last one used).
v1.7 below....
- Dav
Code: (Select All) '============
'QuadDraw.bas v1.7
'============
'An odd little drawing program.
'Draws/paints in several areas of the screen at same time.
'Coded by Dav for QB64 JUN/2022
'NEW FOR v1.7:
' - Fixed the Smooth Sub Antialiasing.
' (Doesn't grab the menu grey color now.)
' (_TITLE changes to show Antialiasing working...)
' - Change the fill color display to show...
' ...what the next random color action will be
'
'CREDITS: SPAINT SUB was made by Petr. Thanks Petr!
' text SUB was made by bplus. thanks bplus!
' (bplus helped me out how to draw lines without gaps too)
' Thanks to James Jarvis for draw color and eraser idea/code!
' And to PhilOfPerth and euklides for code suggestions.
'----------
'HOW TO USE:
'----------
'Left click on mouse and hold to draw on the screen.
'Press 1,2,3 or 4 to set how many areas to draw in, default is 4.
'Use the +/- keys to change brush size (1 to 50 allowed)
'Right click to fill/paint the areas with color.
'Default fill color is picked randomly, but you can select one.
'Press D to select a new draw color for brush.
'Press F to select a fill color (doing so turns random fill color off)
'Press R to toggle random fill color on/off (default is a random color)
'Press E to toggle Erase on/off. Hold it while drawing for dotted lines.
'Press A to smooth the screen using AntiAliasing.
'Press S to save current image as QUADDRAW.BMP in current dir.
'Press L to Load a previously saved image on the screen.
'Press U to undo last change made to image.
'Space = clears screen and starts over.
'ESC = Ends program
'================================================================
DIM SHARED quads, brushsize, randfill, eraser, menu&, blk&, fill&
menu& = BASIMAGE1&
SCREEN _NEWIMAGE(1000, 600, 32) '_DESKTOPWIDTH * .75, _DESKTOPHEIGHT * .85, 32)
centerx = (_WIDTH - 200) / 2
centery = _HEIGHT / 2
wht& = _RGB(255, 255, 255) 'used often, so variable it
blk& = _RGB(0, 0, 0)
fill& = _RGB(RND * 255, RND * 255, RND * 255)
brushsize = 3 'size of drawing circle (brush)
quads = 4 'start with 4 drawing sections
randfill = 1 'default is use random fill color turned on
CLS , wht& 'start with white screen
_DELAY .25
undo& = _COPYIMAGE(_DISPLAY)
'====
main:
'====
_TITLE "QuadDraw - Quads:" + STR$(quads) + " BrushSize:" + STR$(brushsize)
DrawMenu
DO
WHILE _MOUSEINPUT: WEND
mx = _MOUSEX: my = _MOUSEY
IF mx <= (_WIDTH - 200 - brushsize / 2) THEN
IF _MOUSEBUTTON(1) THEN
IF stilldown = 0 THEN
_FREEIMAGE undo&
undo& = _COPYIMAGE(_DISPLAY)
END IF
IF stilldown = 1 THEN
stepx = lastmx - mx
stepy = lastmy - my
length = INT((stepx ^ 2 + stepy ^ 2) ^ .5)
dx = stepx / length
dy = stepy / length
FOR i = 0 TO length
FOR d = 1 TO brushsize
newx = mx + dx * i: newy = my + dy * i
CIRCLE (newx, newy), d, blk&
IF brushsize > 1 THEN PAINT (newx, newy), blk&, blk&
IF quads > 1 THEN
CIRCLE (centerx - newx + centerx, centery - newy + centery), d, blk&
IF brushsize > 1 THEN PAINT (centerx - newx + centerx, centery - newy + centery), blk&, blk&
END IF
IF quads > 2 THEN
CIRCLE (newx, centery - newy + centery), d, blk&
IF brushsize > 1 THEN PAINT (newx, centery - newy + centery), blk&, blk&
END IF
IF quads > 3 THEN
CIRCLE (centerx - newx + centerx, newy), d, blk&
IF brushsize > 1 THEN PAINT (centerx - newx + centerx, newy), blk&, blk&
END IF
NEXT
NEXT
ELSE
FOR d = 0 TO brushsize STEP .2
CIRCLE (mx, my), d, blk&
IF quads > 1 THEN
CIRCLE (centerx - mx + centerx, centery - my + centery), d, blk&
END IF
IF quads > 2 THEN
CIRCLE (mx, centery - my + centery), d, blk&
END IF
IF quads > 3 THEN
CIRCLE (centerx - mx + centerx, my), d, blk&
END IF
NEXT
END IF
lastmx = mx: lastmy = my
stilldown = 1
DrawMenu: _DISPLAY
ELSE
stilldown = 0
END IF
'if right click, fill sections with random color
IF _MOUSEBUTTON(2) THEN
_FREEIMAGE undo&
undo& = _COPYIMAGE(_DISPLAY)
_DISPLAY
SPAINT mx, my, fill& ', blk&
IF quads > 1 THEN
SPAINT centerx - mx + centerx, centery - my + centery, fill& ', blk&
END IF
IF quads > 2 THEN
SPAINT mx, centery - my + centery, fill& ', blk&
END IF
IF quads > 3 THEN
SPAINT centerx - mx + centerx, my, fill& ', blk&
END IF
'Get next random fill color
IF randfill = 1 THEN
r = RND * 255: g = RND * 255: b = RND * 255
fill& = _RGB(r, g, b)
END IF
DrawMenu
_AUTODISPLAY
WHILE _MOUSEBUTTON(2) <> 0: N = _MOUSEINPUT: WEND
END IF
END IF
'get keyboard input
key$ = UCASE$(INKEY$)
IF key$ <> "" THEN
SELECT CASE key$
CASE CHR$(32): CLS , wht&: DrawMenu 'scpace clears screen again
CASE "1": quads = 1
CASE "2": quads = 2
CASE "3": quads = 3
CASE "4": quads = 4
CASE "+"
brushsize = brushsize + 1: IF brushsize > 50 THEN brushsize = 50
CASE "-"
brushsize = brushsize - 1: IF brushsize < 1 THEN brushsize = 1
CASE "U": _PUTIMAGE (0, 0), undo&
CASE "A": Smooth
CASE "S"
saveimg$ = IBOX$("NAME OF BMP TO SAVE-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
IF saveimg$ <> "" THEN
IF LCASE$(RIGHT$(saveimg$, 4)) <> ".bmp" THEN saveimg$ = saveimg$ + ".bmp"
SaveAsBMP saveimg$
a$ = IBOX$(UCASE$(saveimg$) + " SAVED!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
END IF
CASE "F"
new& = ColorPicker&(200, 150)
IF new& <> 0 THEN
randfill = 0
fill& = new&
END IF
CASE "D"
new& = ColorPicker&(200, 150)
IF new& <> 0 THEN
blk& = new&
ELSE
blk& = _RGB(0, 0, 0)
END IF
CASE "E"
SELECT CASE eraser
CASE IS = 1: eraser = 0
CASE IS = 0: eraser = 1
END SELECT
IF blk& = _RGB(0, 0, 0) THEN
blk& = wht&
ELSE
blk& = _RGB(0, 0, 0)
END IF
CASE "R"
DO UNTIL INKEY$ = "": LOOP
SELECT CASE randfill
CASE IS = 1: randfill = 0
CASE IS = 0: randfill = 1
END SELECT
CASE "L"
openimg$ = IBOX$("IMAGE TO LOAD-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
'if filename given
IF openimg$ <> "" THEN
'if file exists..
IF _FILEEXISTS(openimg$) THEN
'test loading image
o& = _LOADIMAGE(openimg$)
IF o& = -1 THEN
a$ = IBOX$(UCASE$(openimg$) + " NOT VALID!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
ELSE
_PUTIMAGE (0, 0)-(_WIDTH - 200, _HEIGHT), o&
_FREEIMAGE o&
END IF
ELSE
a$ = IBOX$(UCASE$(openimg$) + " NOT FOUND!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
END IF
END IF
CASE CHR$(27): END
END SELECT
DO UNTIL INKEY$ = "": LOOP
_DISPLAY
GOTO main
END IF
_AUTODISPLAY
LOOP
END
SUB SPAINT (x AS INTEGER, y AS INTEGER, clr~&) 'Color everything in the X, Y position regardless of the border color.
'SUB by Petr
DIM m AS _MEM, m2 AS _MEM
m = _MEMIMAGE(_DEST)
W = _WIDTH(_DEST)
H = _HEIGHT(_DEST)
P = _PIXELSIZE(_DEST)
SELECT CASE P
CASE 4 ' image is 32 bit image
Virtual = _NEWIMAGE(W, H, 32)
m2 = _MEMIMAGE(Virtual)
Back~& = POINT(x, y)
Back2~& = _RGB32(1, 1, 1)
Empty~& = _RGBA32(0, 0, 0, 0)
DO UNTIL a& = m.SIZE - 4
a& = a& + 4
IF _MEMGET(m, m.OFFSET + a&, _UNSIGNED LONG) = Back~& THEN _MEMPUT m2, m2.OFFSET + a&, Back~& ELSE _MEMPUT m2, m2.OFFSET + a&, Back2~&
LOOP
d = _DEST
_DEST Virtual
PAINT (x, y), clr~&, Back2~&
_DEST d
a& = 0
DO UNTIL a& = m.SIZE - 4
a& = a& + 4
IF _MEMGET(m2, m2.OFFSET + a&, _UNSIGNED LONG) <> clr~& THEN _MEMPUT m2, m2.OFFSET + a&, Empty~&
LOOP
_CLEARCOLOR Back2~&, Virtual
_PUTIMAGE (0, 0), Virtual
_MEMFREE m
_MEMFREE m2
_FREEIMAGE Virtual
CASE 1 ' image is 8 bit image (256 colors)
Virtual = _NEWIMAGE(W, H, 32)
m2 = _MEMIMAGE(Virtual)
Back~& = POINT(x, y)
Back2~& = _RGB(1, 1, 1)
Empty~& = _RGBA(0, 0, 0, 0)
DO UNTIL a& = m.SIZE - 1
a& = a& + 1
IF _MEMGET(m, m.OFFSET + a&, _UNSIGNED _BYTE) = Back~& THEN _MEMPUT m2, m2.OFFSET + a&, Back~& ELSE _MEMPUT m2, m2.OFFSET + a&, Back2~&
LOOP
d = _DEST
_DEST Virtual
PAINT (x, y), clr~&, Back2~&
_DEST d
a& = 0
DO UNTIL a& = m.SIZE - 1
a& = a& + 1
IF _MEMGET(m2, m2.OFFSET + a&, _UNSIGNED _BYTE) <> clr~& THEN _MEMPUT m2, m2.OFFSET + a&, Empty~&
LOOP
_CLEARCOLOR Back2~&, Virtual
_PUTIMAGE (0, 0), Virtual
_MEMFREE m
_MEMFREE m2
_FREEIMAGE Virtual
END SELECT
END SUB
SUB Text (x, y, textHeight, K AS _UNSIGNED LONG, txt$)
'Text SUB by bplus.
DIM fg AS _UNSIGNED LONG, cur&, I&, multi, xlen
fg = _DEFAULTCOLOR
cur& = _DEST
I& = _NEWIMAGE(8 * LEN(txt$), 16, 32)
_DEST I&
COLOR K, _RGBA32(0, 0, 0, 0)
_PRINTSTRING (0, 0), txt$
multi = textHeight / 16
xlen = LEN(txt$) * 8 * multi
_PUTIMAGE (x, y)-STEP(xlen, textHeight), I&, cur&
COLOR fg
_FREEIMAGE I&
END SUB
FUNCTION ColorPicker& (xpos, ypos)
'ColorPicker& Function by Dav, SEP/2020. FREE TO USE FOR ALL
'Function Returns color picked by user if one selected.
'If no color selected before Closing, function returns 0
'Click CLOSE to close the ColorPicker image.
'ESC key cancels selection and closes picker too.
'The xpos/ypos is x/y point on the screen to place colorpicker
'=== Save users display status
DisplayStatus% = _AUTODISPLAY
'=== copy background screen using _mem (thanks Steve!)
'=== Used this method because_COPYIMAGE(_DISPLAY) didnt always work
DIM scr1 AS _MEM, scr2 AS _MEM
scr1 = _MEMIMAGE(0): scr2 = _MEMNEW(scr1.SIZE)
_MEMCOPY scr1, scr1.OFFSET, scr1.SIZE TO scr2, scr2.OFFSET
'Create Colorpicker image
v& = _NEWIMAGE(463, 239, 32)
DIM m AS _MEM: m = _MEMIMAGE(v&)
A$ = "" '...COLORPICKER.PNG encoded by BASIMAGE...
A$ = A$ + "haIkMo7KDGOh77_oaBfFFfOhBL9c5gGWaX9BRK62K46AkHnS9I=`09EP<4V="
A$ = A$ + "e25F]0eB;]jK;#YFXUEJQJGM573`644fjGM:62H66L42I^89^HF<co`T]oHo"
A$ = A$ + "anW]TUUk;O2BnLONnmjek3L7m>li;cS4;]LohSGjC_[gM=C6WciL>WciL>Wc"
A$ = A$ + "iL>WciL>WciL>WciLOFMgBE9=CX6XN80S0C0W7n48C2O2LNH2H480e3e0c4^"
A$ = A$ + "5XZHUa7hn4hl`4`8#0Z7Z1V9L;#boQOFngVWjlLWGjhUNN]SGkiAW:SK^U[]"
A$ = A$ + "lUDW:cUmbnoNZbCf>]MJkdfYVnIk\bR]CKWf>o\CkdEn=KWEVBc:SC0I:[oV"
A$ = A$ + "IUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7"
A$ = A$ + "h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc^e?go9QI1;0NB80_0"
A$ = A$ + "LLhL`73oW4nHhL`aQG02`C2;0V5L[`W;f]2c2F0lT#0N1hh`iP?6n?anHhL`"
A$ = A$ + "aQG02`C2;0V5L[`W;QK5V5\0h9Q0l2`aQc1O<lORma`iPS3_04PW4F0<;hFQ"
A$ = A$ + "?G\2mk?k:?V]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>[<UVIkdfY]C"
A$ = A$ + "KW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW"
A$ = A$ + "]c:CYIf>]MJkdfY[h>KWEVBc^]_ho:QI3;4J02```aPc2O4l_BhSPc273662"
A$ = A$ + "#3`2QI3g6l5SMK`\Q52=01HHhH`IQ?2nGan8h\`aPQQ0d0\#Hf`]1Oa4^=Hf"
A$ = A$ + "`2Q6P0<<L<h\`71o[HO4LFhH``#0J0F8<KhfP_H\2mk?k:?V]c:CYIf>]MJk"
A$ = A$ + "dfY[h>KWEVBc\MJkdfY]CGaM5[fiMOgIbl\?KV<o_o_IbLZC5[gNcTiaOl<I"
A$ = A$ + "^iK>oom_okObmoloDhG>R>OR>oR>O_J^LT[C[X[GIOJ59j?Knc?oWNAG^cge"
A$ = A$ + "[LY#_lUVIkdfY]CKW^Rk^FKWcJFIbl7n35fie#3=i]Ql]X>EQdifgn:\;7AO"
A$ = A$ + "Mi[A5miR>?oKo]Ynd:j[Ib>mR>=BkRjWf>]MJkdfId\MFn^[UfiBFBj?onX?"
A$ = A$ + "jbg7eRIk<jngmn_Oj^L4meW[NGdOFJ?]V\[Gf>]MJkdfY]cK<gEKk<ja[lZM"
A$ = A$ + "AM6f]bgVZfiEC[;JAomhYEQNOGceR^ogf>]MJkdfY]cKlgEKk<ZoM]<f3CcG"
A$ = A$ + "KfRniAN]\XonIOO>_FGfo\I]MJkdfY]CKWgH^[VfiDMO>GcJ^L38jiDcT=NO"
A$ = A$ + "nbgbGk<OgWcX?GdUSXWoB5bUSX_f9KAoL=Sj\AGgcgoO3AOnb]fiMlUoW9<7"
A$ = A$ + "HA#3#066>:l>`72oc4n#hMPS2331X1HA`LPk0nba^3H>`RP6P0<<LDhMP?4n"
A$ = A$ + "Wan#hMPS2331X1HA`LPk0nb9L7`LP51=01HHhX`k0O8l?SmQ`k075662#3`R"
A$ = A$ + "Pi0g1lUSU[Ik\lMG=]cle4Rj:5JS]Hd>cg^B7[#_L\a=>iO=A??M;T[oIOIM"
A$ = A$ + "ZJWAONZ#O>5WVIkdfY]CKW^Rk^JJWikna5MO=;Tk7Gdb^CT_=I]cYjaHm:g7"
A$ = A$ + "^2mbAaX9VVfIQd8]MJkdfY]CGig^JJWikaR==]c\Ol9cgV\fIQNjGXOMi[e5"
A$ = A$ + "mL8bfY]CKWf>]MjRV]c2[M6][lJ#9j[?G?N[AbnjT]CKWf>]MJkl6cIk<n[["
A$ = A$ + "#NMg4mlPZ#kKf>]MJkdfY]cK<W]ch_^XO^W5bRNMLV[gO7\MJkdfY]CKWOfH"
A$ = A$ + "f>CNiX#Oo5<JCem1MZJWlm8g\?fE<KWge=m?BhnP53[62`NQS0_=l1`o8Q?0"
A$ = A$ + "NKh8`NQ0\JHa`m1g5LCa^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnP"
A$ = A$ + "k2^Y4^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnPk2^YHiJf>;OGY\M"
A$ = A$ + "6mlP]#OO??OkjIk<jnNF8_?fNU5eJW\gKL_JNmMJkdfY]CKWGIf>;OGY\MF\"
A$ = A$ + "N<8_Nf>S4mhaVVniTmNd[]CKWf>]MJkl6cIk<g_GnTfgOiSJ]5Sg;h]MJkdf"
A$ = A$ + "Y]c[<KWU_cfInOO`;jgKJ5jRjWIohgJkdfY]CKWf>_aLf>Wjg3ISnMDJQnNO"
A$ = A$ + "OJN_A`W[#f>]MJkdfIUiliIKQmn_NdmWl`7>oW>A;kgKi;GN=ZHkdfY]CKW^"
A$ = A$ + "Rk\MVlegiTmn5dEnMEFd___WZW7Af>]MJkdfY]cK\W]c2k[;k[GA?6^iKGii"
A$ = A$ + "<DiBkL6glO?QZQU0[12`NP33W2^8lgChR`YP33k12`JPU0E3c0^iHc0Z6F2\"
A$ = A$ + "680k1><L:hR`O?f5QC176f34Pe0;1Z6V1Lc9<3XJH9`JP0\7h``YP;2omHG4"
A$ = A$ + ">5LHH?#0F3\4XJH6`=7;GcfIik\MVnfITlMO?;dgOL]MJkdfY]CKWEVKjlg1"
A$ = A$ + "IIoJj8O[L\MV_oo7\MJkdfY]CKWgH_Rm_k[CCk\#K1UjOoMF8GN]MJkdfY]C"
A$ = A$ + "KW^[\[Vfi6ghTOj5mHIVf_^YZ54mj3Q_F>^bmI=Ok:?oNbgUSXE8G>R^<TMc"
A$ = A$ + ">O?V]5j?_cLmJD9jeCZ]CKWf>]M6=KWU_kZYM6e6bgRN<MSj6i[_4meLef2R"
A$ = A$ + "fE^_Mika?>je;BJ_LT_G7WGijeDmn=DQLocW\EX_6?Cc\MJkdfY]CGaMG=]c"
A$ = A$ + "YZaD8;jiZJaXM>E?WGCkUS[VNGf;kF\]CKWf>]MJkl6cMef>_FJFijaU<];k"
A$ = A$ + "WS^5bkI1iJAombe?3edln0?Gf]HKWf>]MJkdfi=VkZ]M6Y#NO2PKbNNoTfag"
A$ = A$ + ";PBKo<GMc\O<YCck3lA;jh`lWoenmQ]Dd>_WKiCBHN#]#S#06267>9lN`WT`"
A$ = A$ + "k1W467622#S#]`lPk1^UHg3<?XFXA8031S3W4N?hCRmN`9QaQQP0d8D;<?hN"
A$ = A$ + "PK9Qk1V7D;d84PQPaQC2_7l9aN?hT`h`##0J4Z5V7L?`]4;GcfIik^FJWARN"
A$ = A$ + "_hIOkKZKXAoN^T?nX5cfITXWK#CEc;jcOUW3ACUXWSACeS=MdekNk=go>ldf"
A$ = A$ + "Y]CKWf>]MNSi^FKWI;ZW5eKbnmb^Xk;fTmk6jBUXNNdi;_L4mWG\>mRj_ijg"
A$ = A$ + "IWG_TVIkdfY]CKW^Rk:V]CIkdfY]CKWf>o\`\MFI:=cfY]CKWf>M5gIk\bDJ"
A$ = A$ + "V]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW]c:CYIgkgh_V`32?6\F8032_<L2h2"
A$ = A$ + "`O=Q;0W0NIH#80[5N<h1Qk5n6a^Gh1Q73F;4P1QG6>1L1h_6k2`9PG6642`J"
A$ = A$ + "Q73N#hNQ_A2g;lP`S1[52`P`;3W0^0lGSM1h4`;3321H]`S1?8L_`g8FQnmW"
A$ = A$ + "MU7cfIUYd<KWf>]MJkdELW]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>"
A$ = A$ + "[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<K"
A$ = A$ + "Wf>]MJkdELW]c:CYIcjfo;9l``bPe21H#hP`K0W3n;9L>h=P32321H]`bP76"
A$ = A$ + "V5LkaV5l``bPe21H#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^m4V5l``bPe21H"
A$ = A$ + "#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^mH5jgOfEN<KWEVBc\MJkdfY]CGaMf"
A$ = A$ + ">[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>[\KWZlU]c:;f"
A$ = A$ + ">]MJkdfYVnIk\bR]CKWf>_a_MjL^Y_IkdfY]CKW>W;MKfgiO>Qi3;7F74PM3"
A$ = A$ + "70N=h\`O>Qc2_6L0Hg#0F7\LHn`\Qk<f\Qi3;7F74PM370N=h\`O>fIQG3>0"
A$ = A$ + "\K80[3F><OHf`MV`\Qi3;7F74PM370N=h\`O>fIQG3>0\K80[3F><OHf`M6c"
A$ = A$ + "iLUGcfY]CKWf>M>GjV]CKWf>]MjL^d=KWf>]MFif>o_ogoKVgomOo9eOj?mW"
A$ = A$ + "bLQ;LQ<WolWOBm^_kkVigokomCZCNbCVi]N[gJBMRCLR<ofOk_MBmKn=oV<_"
A$ = A$ + "j[nZI>lQ?L>=nhSWiGo[oeInEoZOeTJ\a6;c_hGl;b<b8S<Y6L`1clcoiolL"
A$ = A$ + "JGkJGIjYWNb[]^e]ViIOfW=_J_mfcdJ[]VC]dB;IJZYVblcnIo\LJM[KMIFc"
A$ = A$ + "JFCVj[_n9EMeEGVE^bEViWlCn9idBGjBc\TU\TlJ1;H1InAoXODNm0?`3TCo"
A$ = A$ + "PO`?8cgokomclmnNO_9eLVcLblMn>OW<cLVcLBm]ofOk<cH6c8cMOggM>MWG"
A$ = A$ + "jkQNkgn]?YnVOc_IV_nGo[Wi[menJCZ_jGm[Vi[lEn:I^YKjVbY_dGj;Ui;l"
A$ = A$ + "5n2CZ?oWocWYZZZ:QomonOKkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]"
A$ = A$ + "MJkdfY]c:`fiLWa5CX6H5#C#060f?<1L6hR9L6H2Ho`0#0J2F1D3<GH6aV;D"
A$ = A$ + "3\2X98030k7V0>3LaHW1V0f?<04PVPE0e0c5VA2c5Z1F1d44P1Pm3C0W1^H\"
A$ = A$ + "c0C0k7602#C`:PJPi2c8V]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]M"
A$ = A$ + "JkdfY]CKWf>]MJkl6[fimo]nS9\0HU`C11HG`nPS3W6nS9LJhh`nPM11hYPE"
A$ = A$ + "2;0^OhK5knQ50[4N:80k2f7LLhd`O<fYQS3k3f54PW2F9\0hnQ_E2g?\0HU`"
A$ = A$ + "C11HG`nPS3W6nSa>=LLHO`^P0lD`:Q50g?l]RIkdfY]CKWf>]MJkdfY]CKWf"
A$ = A$ + ">]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>_aZM>_INn4F4\:XI80m3S175>9Ln"
A$ = A$ + "4>9LDH<XO80=3[2F4<?HVaV7\8HE#c#0j763>:LBhla>9LDH<XO80=3[2F4<"
A$ = A$ + "?HV9<?HA`ZPVQ0d?<6LDhT`iSMBhX`H#o#0J6F5\8HN`<SIkdfY]CKWf>]MJ"
A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKW"
A$ = A$ + "f>]MJkdfY]CKWf>]MJkdfY]CKWUk]c7jkn^9lX`C0=31XOh5QG1NChMCh=QG"
A$ = A$ + "1NAXO80=3?1lX`31OgH?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQ"
A$ = A$ + "P_K2?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQP_K<KWf>]MJkdfY"
A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MFng>M>gdc\MJkdfY]CWcU^Ikdf"
A$ = A$ + "Y]CKW>W;McfY]CKWf>M>GjV]CKWf>[#KWQB\\fY3UF9_NEEYedd1a#VZ:YBN"
A$ = A$ + "NEJoWYYK6V94:]BcNTiNV4Z5Z3F?4PnPAQaQG7>C2_><><:d74Pe3e1e2?2<"
A$ = A$ + "gH?2D;D7\N80m1S2S3_>LVH_><><:d74Pe3e1e2?2<g4N4XFX>Hm#0j36567"
A$ = A$ + "NMh<aNMHLHDX?80[7Z3Z5N4H^abi^>n=]\MN]O#dfY]CKWf>]MJkdfIj>8Jk"
A$ = A$ + "dfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]MJkdfY]CKWf>Cg1AKWf>]"
A$ = A$ + "MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKWf>]MJkdfIj>8Jkl6[fI=E"
A$ = A$ + "OZ4F:D?\180k461>4<1LZ4V0>4<2\C80K0Z7F:D3DM\JPU2e3K02`>QAP31C"
A$ = A$ + "0W:f4`QPAPM21H3#m`BQJPZCX6HY#m`6P0\CH4h#`4`YR=1L8H4HW#0f0D?\"
A$ = A$ + "DX6XjHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]"
A$ = A$ + "MJkdfY]CKWf>Cg1AKWf>]MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKW"
A$ = A$ + "f>]MJkdfIj>8Jkl6[fi2OPg:QU3=0K42`>PQQ3073N[4>6L0HHH7#0f8d0\L"
A$ = A$ + "HQ`34KQ`bQ6P=21H7```1PS1_E\S17066f14P=2=0;7F8l09\#Hi#3`6Q0\3"
A$ = A$ + "HHh0`aPg:faP3033k02`6Q6PU3;4NPHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<"
A$ = A$ + "M74]MJkdfY]CKWU1]CWc=]=KWf>]MJkdiLYKf>]MJkdfYciBg\MJkdfI5Jk\"
A$ = A$ + "ZB\\fY3QBZTWGEEB=MM#\j;maUB9_FEJoY[>=Mc`<EEEYEJV]CKWf>]MJkdf"
A$ = A$ + "Y]c<YJf>]MJkdfY]CKWf>cTZ]hOh_;Q77F=d24PNQm2_4L4hgU`APG2f;d;4"
A$ = A$ + "PFPE3?>\Hh76Ka`S3[6J12#_`NQG2>2lkRM4hUPm2m21X5He`S3;6nQ9\Hha"
A$ = A$ + "QE3]01XGH_`;171nMa>2lB`NQNQ0d2\JhaQ53o`HiLf>]MJkdfY]CKWf>]MV"
A$ = A$ + "afY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]CKWf>_>Oc#KWf>]MJkdfY]CKWYkV"
A$ = A$ + "Qf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>]MV^K6JkdfY]CKWf>]MJk<Mg<\\"
A$ = A$ + "ZMFK=CT`ZP6QFP0d;<4<6<><A2S3S131m21X5XAHE#]#=aZ5F5d8d24PNQQP"
A$ = A$ + "aPaQ9R=><6<4d;4PFP6QE1e2eT#]`ZP6QFP0d;<4<6<><A\aQaPQPNQ0d2d8"
A$ = A$ + "\:XFXVHiLf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]C"
A$ = A$ + "KWf>_>Oc#KWf>]MJkdfY]CKWYkVQf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>"
A$ = A$ + "]MV^K6FFe>Gf?nECX>H]`C31hiQ1QAQ32_J2746564NN80?=\FX>HI`?>fbP"
A$ = A$ + "jPe2?=4PW76465>8lZa>8<:<8ll#0NJH]#M`bPOL2;3Z3F;ld#0NNH#HDhP`"
A$ = A$ + "[6kP`X`P`c31hYQe2e1;3naaL>Gie\MJkdfY]CWcU^IkdfY]CKW>W;McfY]C"
A$ = A$ + "KWEV]cXOdMUBI_Z[:DBUl:FXd:kcZZ[ZT:iE[Z:YbNEERoW4gf8DJUhljBo1"
A$ = A$ + "UBYIf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkdfY]CKWf>]"
A$ = A$ + "MnYA6KWf>;kKW[H97>QjQVPFQ0d3<0<2\Oh`9\OH4H0X780]2=1e3[0FB\E0"
A$ = A$ + "e3=1]21X7H0H4Ho`QS]OH4H0X780]2=1e3[0FB2[0Z7J2J52#?`0`8`nQ37K"
A$ = A$ + "o`8`0#?#0J5J2Z7F1\THiJf>]MJkdfY]CKWf>]MnYA6KWf>]MJkdfY]CKWf>"
A$ = A$ + "]MJkdfY]CKWf>]MJklbgf`fY]CKWf>]MJkdfY]c2Hf>]MJkdfY]CKWf>]MJk"
A$ = A$ + "dfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^ZUNX4J0J6f44P]3m333S17:QaPQQ"
A$ = A$ + "nQ]31HC#c#3`ZPU6KE#3#c`VP0\MXOHHH<h#a6366j7f>4P=1=3=0[2FJ2[2"
A$ = A$ + "J0J6f44P]3m333S17:fH``#o`fQ0\9XIX1HE`BSU[IkdfY]CKWf>]MJkdfiW"
A$ = A$ + "6I\MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]c;OK3KWf>]MJkdfY]CKWf>;P"
A$ = A$ + "IkdfY]c:cfYciVnV]CKWf>]MjL^d]jFanCXAHm#K#0j6j36265fO2S231m1M"
A$ = A$ + "31X=Hm#S#M`:RE7d8\NX=80M3m131S2k?fX`##O#g#0J3F?d8D7\R4Z3J4F?"
A$ = A$ + "d64P^QnPQPAQm7KDH8X?XK80]1[7J4Z3FA<WcEN=KWf>]MFQf>Sni4F:Ue2G"
A$ = A$ + "jS;UbN_DEEEBUlHHEUFI]Z3EEBUlV6EEB==Mc`;M8=DBUVIkdfY]CKWf>]MJ"
A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MnoKf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkd"
A$ = A$ + "fY]c;?KWf>]MJkdfY]CKWf>_>Oc`bZfI3odOI2[3f8d64P^QM0k666nU9<<\"
A$ = A$ + "KH7#g#0J3f8\>X1hW6[1HM`6QfP0d=\3Hg```_<f``^QM0M31X=HS`jP6POJ"
A$ = A$ + "2=0[3f8d64P^QM0k666nUa66f=\3XK80]1K4F7d0lCSUcIkdfY]CKWf>]MJk"
A$ = A$ + "dfI6KWf>]MJkdfY]CKWf>_l\MJkdfY]CKWf>]MJkljl=3]MJkdfY]CKWf>]M"
A$ = A$ + "JkdfY]CKWf>]MJkdfY]CKWf>]MnYcfY]CKW9W]CKWf>]MJkdfY]cde>K\nAB"
A$ = A$ + "XIX5XM80K3j5j76269QQPnQNQ]11XMX5XIXAXnH=2=3]0]31HK#_#o`#`8a6"
A$ = A$ + "2j7j5f64PfQFPVQ6QjCXAXIX5XM80K3j5j76269f##o#_`fP0d>d2d<d8DO\"
A$ = A$ + "L>KWf>]MJkdfY]CKWf>cHkdfY]CKWf>]MJkdfiUW]CKWf>]MJk\<XMjL^Y]I"
A$ = A$ + "kdfY]CKW>W;McfY]CKWf>M>GjV]CKWf>[<KWQZZ^T:kEmUnhBYTWGEEBUlHH"
A$ = A$ + "EUD9^NEMEUDI_Z^d7G:Ull:DBUhljBgFYD:=[Ye\W4f0d:\I80K5j1f9<0\W"
A$ = A$ + "460f9d3\E80K6J5f0d4\VH=1K0J5f<4P]2m0k460fC\1PM2m0K52`VQFQ=0="
A$ = A$ + "1[9QVP=0]2K62`FQNPM230k9f0`>QNP]21Hc#[`6PVPe4;GcfY]CKWf>]MJk"
A$ = A$ + "dfY]c;ONIkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWGilbfY]CKWf>]MJkd"
A$ = A$ + "fY]cYNf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^nV6"
A$ = A$ + "8QFPfP>P0\5XKXGX?HP4j3j5j6f24P>PfPFPe3=5Km#;#K#7#0f2d=d;d7<#"
A$ = A$ + "\nPNQ^Q]01X3X=X5Hm#C9\NX5X=X380K1j6j5j368FO#_#g`FP0d1d6d2\NX"
A$ = A$ + "YHiJf>]MJkdfY]CKWf>]MNic;KWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkl"
A$ = A$ + ":WGf>]MJkdfY]CKWf>]M>ecfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJ"
A$ = A$ + "kTcfY]CKWCO]cFf`>CHC#k#W#0j2f6\MXGHW9d;\MHK#G#0j4J7f4d2\QH]0"
A$ = A$ + "K2J7j42#G`fP]3m2k<F_`fQ]1M11XCXMHC#;`6BX5HC#k#W#0j2f6\MXGHWa"
A$ = A$ + "j5f>\=X;80M2]3K2J1f#\L=KWf>]MJkdfY]CKWY[MjL^Y_IkdfY]CKW>W;Mc"
A$ = A$ + "fY]CKWf>M>GjV]CKWf>[<KWEEEEUDI_[Wol>?mY?M9Ef;4Z^T:iiEXT:aomj"
A$ = A$ + "BOLYDRK7NY?^DJjjflCe\MJkdfIUKk\D=KWf>]MVoIkdfY]CKWCeY]]CKWf>"
A$ = A$ + "C^fJ]W4J7j0j42#G`FP]1M3mT#g`fP]0M11XCX3XMX=XeH]1]3M0M21X;H;`"
A$ = A$ + "fP^QNRe=\=H;#G#0j4j0J7J3J=QfPfQ>P>Q0d5\5HK#g#?aj6f6\5X;80M2M"
A$ = A$ + "0]3]1]6;GcfY]CKWf>]MJkdfY]cXIkdfY]CKWf>]MJkdfiU?_\MJkdfY]CKW"
A$ = A$ + "f>]MJkdfY]CKWf>]M>IWff>]MJk<i\MJkdfY]cYjdffY]CKW9W]cdf>cjOgf"
A$ = A$ + "Y]CKWf>]MJkdfY]CKWf>caY]]CKWf>C^>flFCXcY`c01hiP^V2K1fJ2K1jJ:"
A$ = A$ + "lL#0N6XcY#7`Vc\e>nDMVeonEnhliIP0lL#GCQ]0K=fFP^V2?74PW1jL:d1\"
A$ = A$ + "i4j0jL:l<#0N>X[Y`FP]6K;#GCQW32`c0M>5j0fL\L=KWf>]MJkdfY]CKWf>"
A$ = A$ + "SV]CKWf>]MJkdfY]CKWGnlbfY]c?3g>_R>f\]CKWf>]MJkdfY]CKWf>]MVcC"
A$ = A$ + "KKWf>]MVLf>]MJkdfiDMJKkdfY]cTcf9KUiX?>E]c9kcIkdfI9^MNmjkSHkd"
A$ = A$ + "fY]cTcfY]CKWEV]CWciL>WciL>WciL>WciL>WciL>W;OkoC[%%L2"
btemp$ = "" 'decode string data to image data
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
'Put colorpicker image on screen at xpos/ypos
_PUTIMAGE (xpos, ypos), v&: _DISPLAY: _FREEIMAGE v&
'====================================
'=== Now get users color selection...
'=== no selection made yet
selected = 0
'=== main loop
DO
'=== Get mouse input
WHILE _MOUSEINPUT
'=== Get mouse x/y
mx = _MOUSEX: my = _MOUSEY
'=== Only poll this area
IF mx < (xpos + 473) AND my < (ypos + 243) THEN
'=== if click button in area
IF _MOUSEBUTTON(1) THEN
'=== if clicked in CLOSE box area
IF mx > (xpos + 352) AND mx < (xpos + 457) AND my > (ypos + 5) AND my < (ypos + 72) THEN
GOTO donepicking
END IF
'=== made a color selection
selected = 1
'=== Get color where mouse pointer is
clr& = POINT(mx, my)
'=== Make Red Green Blue color values
red = _RED32(clr&): grn = _GREEN32(clr&): blu = _BLUE32(clr&)
'=== show color selected in box
LINE ((xpos + 246), (ypos + 7))-((xpos + 347), (ypos + 70)), _RGB(red, grn, blu), BF
'=== Update gradient strip with color...
'=== ...only if mouse not in gradient strip area
IF mx <= (xpos + 246) OR mx >= (xpos + 457) OR my <= (ypos + 77) OR my >= (ypos + 107) THEN
c = 0
FOR x = (xpos + 453) TO (xpos + 242) STEP -4
LINE (x, (ypos + 77))-(x + 4, (ypos + 107)), _RGB(red + c, grn + c, blu + c), BF
c = c + 4
NEXT
END IF
END IF
'=== update screen
_DISPLAY
END IF
WEND
'=== ESC key cancels picking and closes
IF INKEY$ = CHR$(27) THEN
selected = 0: GOTO donepicking
END IF
'=== don't be a cpu pig
_LIMIT 60
LOOP 'UNTIL INKEY$ <> ""
donepicking:
'=== wait for mouse button UP to continue
DO: mi = _MOUSEINPUT: LOOP UNTIL _MOUSEBUTTON(1) = 0
'=== if user selected color, say so
IF selected = 1 THEN
ColorPicker& = clr&
ELSE
ColorPicker& = 0
END IF
'====================================
'Restore background as it was
_MEMCOPY scr2, scr2.OFFSET, scr2.SIZE TO scr1, scr1.OFFSET
_MEMFREE scr1: _MEMFREE scr2
'Restore display status as it was
IF DisplayStatus% = -1 THEN _AUTODISPLAY
END FUNCTION
FUNCTION BASIMAGE1& 'quadmenu3.png
v& = _NEWIMAGE(185, 593, 32)
DIM m AS _MEM: m = _MEMIMAGE(v&)
A$ = ""
A$ = A$ + "haIkM5L\TL[SD7eAI2b5T98G#7eeoAI0b1T1Ye^D4[;<KPO\i^hWC2#`ZZ^["
A$ = A$ + "^kGb8bHV7KFTPPIaR4T4lOm_nGo`ob````````````````hFaOnWoigbh^U7"
A$ = A$ + "3ScRoh?nS_mGoeOm]o[okokFlgomOo]8]g]ln\#XCFQMBK6XoS_Bjck\ML5g"
A$ = A$ + "Fae_KinIP9jRMBK7b__HLMh8lKEkkW:VX3nUOiGngh\LL0g_neQ#GN5mmlko"
A$ = A$ + "n_oafV<A7l3o`?l_aEaa3l9[COV86_aEdN4mQmYfVLGLl#WnKof_mAZCOeJo"
A$ = A$ + "VPX]hWnYOjYgN4cG[J^LklmN<Ok<`cOGLlX>lSoh?^MO7ijb>eg\^k^iUG9o"
A$ = A$ + "Hbh#2^kTfSX=>hjC6O?hVCBWZmIW_o\Z]n:hSk`aWFVQL7iIdOn4MU:=LmMW"
A$ = A$ + "iNYdKCCoTd]B?L5coNBm=d_CKkfYmhXLl9_GZPb6#G5oNG>NdWaTn=#n6YmX"
A$ = A$ + "fm2c5n<ee757OEKi[:7OJkAT^9fQ8B7nn`IiTlk;GeLA#MO7>nS#WZZ_XOWc"
A$ = A$ + "Dg2m46_dTb;J[VT^E]W#?5bo[47?6ohSRSO5La\nj:b_LMoAaa3L6>nEDGQ="
A$ = A$ + "5jjG8n]9]EH<H_[LlY]7g977j\[8ohjnTdn\ihGag[2meT_W4UGl^`TjeTl2"
A$ = A$ + "]mO5hh[hTAkhTahRjcTgI#oBCh8_ZLlhkZCTW9ieTfQXlVXKWXGoZaaG=o4d"
A$ = A$ + "6<]n<Y\AN>IN^_ZLl9lgMd_[dKAi=AO]B^#iQg[<7O>7OWiQQd>YnlYcaAjF"
A$ = A$ + "YgROOBN]:O<7G[CVlMIcaeUadjhZlKZ=LFeN2NgIGGa?=>nTa12Nk>S1mMRS"
A$ = A$ + "3KR3K`?M>:k8;WQk2\ZnlETS3i=\g4\=2f?7CT]_2LlPO7O;3?3\UKHWSX^T"
A$ = A$ + "eK1feN;CZSGeJ>L5f=lMSSSiFc_O_[^kCVS3M3hfX?0PLl7Q;NVa=I>nL>nZ"
A$ = A$ + "eQ`LlO#^?^#OiWQgm<ihhkAWMOGn^aa_2MkW<7_Z__[NOWMfgEfY\nZaa_2M"
A$ = A$ + "gGA>nEckNdLL\Fo1>kIBhMRS?Y]J7k1n9cainnV`YfIM^^bgKjdkWefh_KLl"
A$ = A$ + "Y]1CeOOEhhCGcaG9>>VOlELVKnThhk^>WVSoOF6?B>n^f8hZ\=ndj_ih?6>n"
A$ = A$ + "TeTmCQS_khgckYXW57OWe8gLlILlMGKaG=>n>fhJGKRMEf6OWiS\cLifaF^C"
A$ = A$ + "\EbD>>FS_[TSSigOek]fM`cPS?mL]LD>ndmYEFNNVLlMZ7PkLdcGKGkfdcGm"
A$ = A$ + "Zd\37?`DK;o8hh7iKS7QS?]]8cagQc^kN^hZ\=n>ckLR>2bediX?5XMkZF7S"
A$ = A$ + "Mihkf^LUiIdn4ii>WO#VKl8>GfkbagI\IhLYLULl0WI]aSW?_?P>kI0_[Mk:"
A$ = A$ + "b_<7o^>cbkFggiLPO4kS_KMLglMWnD^BKSOfnc3m8_7gbfjiZgoI?2>nMik9"
A$ = A$ + "VP#fbmKL6>nE]oBNVLlPKMeLl0k<g0<GdlI0VGge9ia^]K[BoZg]bLl9]oa_"
A$ = A$ + "o<Wc9f3\in>VJGR:>nTnLfM>WCihinUWTn[dfhMllLI\CkS:oPn>k[nQm83T"
A$ = A$ + "g;o:XfoIhM:EN^:obOo?;Shmklm9#FG<9?al6Pl<iihj93DGAn2O^gDM5gf6"
A$ = A$ + "oF^NR_7?AgaLlYeEd_<l?OCd3?B>>JcgIN2ig1Ikm4m]We?<P^]jgEcoHBNF"
A$ = A$ + "aIDS[2]oM?C7?<3TOCZC[T?U]chnhGY[fmiW8gLN>iIbjk9eo[b^Q[`^SG]B"
A$ = A$ + "70M;on>_7nkPJoWEUWAJWTWLn5?W:oPnNWlLJmJRLamoL4M5W7WY]h8bdAd="
A$ = A$ + "?3>NPYnU`ELL3SGIPm1fDLgb[QaA0nfVih66666666666666666666666666"
A$ = A$ + "6666666666666666666666666666m8lU0`_oT1^K?_KiSQBF1PONahNAd>l?"
A$ = A$ + "ocol=>l\USPo6lREQG5^C87:m67Rd4Ym^KSW4RgG_KmjESX>Ee>m\UU9lU<_"
A$ = A$ + "i>iiCNGT3g9?OZln9aaWdWicl<jO4>C`c_;Mg>_?V3?CoZC6CUGh3^^;il:0"
A$ = A$ + "6khTjlcRSO6>3lWF?KMhA3`g2n<UgYSC92_kLlMiA?;>N7W1n]a:I7g_:WmN"
A$ = A$ + ">M7dm=Whg2i]kgOfLXMn6Yih?of0h3>kBccdoA^BNQo8KUNmI:_kd^K>ncWc"
A$ = A$ + "0IXCfEn`fGM>ncBNgIL:AhMWS3Kf>e6M_:LlX_lG1il:ih_ZcUoMWS3T_[2N"
A$ = A$ + "5J;FaakTclm[dcBoQi]7o;k;RQ?#_:4O?jI:_kn]k?5>>l7g_:LLhkX179SP"
A$ = A$ + "_de>5?oMi7BEnjNLo]E5bgON?3m:7FaioDhh0[\1fcVkXh<[N?DM_Yl\#nMb"
A$ = A$ + "9S98hGikMT7]lYTYES?gLl7?WQ_;5jjg9?>UW]=WI<I<1igQO6_CZTY#6<7o"
A$ = A$ + "nhh<FegHfGZOg]9Cgg:h>9jA;_EmG_JnkVSoj8Kin`_SaY`HjLk2inIl=7Eo"
A$ = A$ + "3#We5<7oePc4oFnnIkEXm0cKNU\7QWAohEkSDcaO=hh[6SBn^=j>j37lI5`L"
A$ = A$ + "#k2hNHkA:OMlGca_G>nZmWEN<:?Sn3EHenEIU]P0?jI;OCNo;KGikVOnYbaG"
A$ = A$ + "mMnll<_;KYLELl75?j8kCI>H>nm8?gmHDV`QV\Fn_3Ll?UnbOehhC7SbM?Na"
A$ = A$ + "_2Llkf^aORLlM\5nM_N?VSonPG5>nZeG6WiGPh_1^Sc8IWN;Z;MWAR\NmAba"
A$ = A$ + "IMF6M1T6ca_nfTS6^3>nTg9kTgWeh]DkoWYOSaLlG7>NH[aXOcWmhG>cIFnI"
A$ = A$ + "YGaM7?S^0hh?JKhK>nnLVGic1<2h\WNgf5ZC6mJ0I>N6EnN9E8deimO`M>_i"
A$ = A$ + ">ilCSS3O^Fl_lIC8?^\W1GYj<B\2PgLGL68caoZlMMAlI^=j3oIj71H`kk0U"
A$ = A$ + "nlCQSWKWDc=iEh<B<5gIoR:NL5^KnM6MbiW677nQW:l<i:W1g]N4m5ZVWg[h"
A$ = A$ + "j6fY;OEN?d```````````````````````````````````````````````hC7"
A$ = A$ + "aIT<Of2AllI><R3gCIicQ8olEYMEnSOCUOib[CfEY]kgScWj:mCn>E7nKWXL"
A$ = A$ + "cYYZ<DY50g;TilUm1<Ejf:MJWnH7M63fW<eUfGA`WiNUoO?noX^V3X^V3EY="
A$ = A$ + "oKAk[:XT7EN0^IGJAkjZlZR3bj0>TKSWV^<?[jIjZO#oa?CEK9oLCe_IMb:o"
A$ = A$ + "LdMcO?277gA7ij6RCmn0kOQ[B;2h<3GmK[lGaIMkZkn_En#KTGZcTh4^`4N#"
A$ = A$ + "nlh?9m#fkJKh`Tk<>TVEe;D>hMaEQgQccYZ_RhlFWeG`_TamoRf?FoXB;2hl"
A$ = A$ + "V[2hLcci777^CXhfPlgl[^;4hgOamY2O>QInRjMC`KH>KnkoikaGeg`Po2JB"
A$ = A$ + "m3jF>Pc8OFVII2W9jY_g4bd>jPkV7_377bmSRSge?N57_ZMEm=TEn\?V;PhH"
A$ = A$ + "oA5cADOS1nB2EJ[lA3:>f^e?EJ3`OkE9CkDnlkH:M0bgGincELL<_4F?L6>>"
A$ = A$ + "do`7jTS;[GgQSGUfPgEicnZhhlMmjD>^:oHO1HPS`agAG`LL^LP\^cg6D_S5"
A$ = A$ + "eUX]=OOXoZkWEDLLl=OF?L6>>b_Xl#KQR[=I\:X<ZBK0<_=^^Y6[Rb78MF>N"
A$ = A$ + "F6jdgG97WU]LM8hfE];EiYZ?2<WDnKE_KLLDGHm`IhhXoS<OP;KEkZBoRahf"
A$ = A$ + "UF<_]b4loVOEnb^c`acQW57WiSi_GVOfc<n7niNGlU#CWWmIih:kU`cmL5_="
A$ = A$ + "2ikBn^dR_WfU?IoWiE>F5>=inhNDLL>]lLZ`g[fUS7bLEmkMefQZgK_2>^bf"
A$ = A$ + "8\nNWaZ4aeIG5lN07Df5=hg\]1>37?KG5nK4?:>^J^PLIQjidl<;g:k75QkV"
A$ = A$ + "oN4>^bVX?2>>nF7[GWf64]GEcOJGkZ4U9o]f[H>WIlXihANcbPb^8kTWQ>V_"
A$ = A$ + "gLElUg=K7ZnnoE`aIK07jVc`a_JkZLDK7>e^:?J>NghUbbeInf#8klh;ccoo"
A$ = A$ + "^ibk`aEOkm\LLelnODLl<WBmL:>nEKGU:K=\S]k^J>NGkU:?ij[J>>_[LlZj"
A$ = A$ + "QjmJ>^:KDa]3ZbAe^Ri6ZJ3FI3Vc`aid4bZBG];7WU9ULVoN4WFUnAaASbFm"
A$ = A$ + "ndId_ZgAH>`[hl#E]KMfSNjMhmEaaEQ:kSW3WUS?i>I3?g^Ll^nLcf=ZcfM8"
A$ = A$ + "PeJEE?W<oME8o>fZbWK7OGhh\^=?6P^m<GN^F<7QWG4fS8LJVHk#D>MYMW_["
A$ = A$ + "[hh#gXZ[<?LG>N5?7fh1i;FCa:mM8OEjQZhgaf\1Zd1A8T=nkkgim^D5hkj7"
A$ = A$ + "XSa_5aQj<6WK<_3ln;_V^0AJbgM?iiYWoklj2WCSj^7:[kQl\:]`F08nlcUS"
A$ = A$ + "Caa1hjJF6PmMbigdegVoVIffWln4;;31bj2TFHSS>M9\OhDmKDfim>YZm6[]"
A$ = A$ + "0nVb[6770_o10m;g_B>mEg]=ij7c9hh`k;LJHiQAfVfMY5b<7O47gVfa5EeE"
A$ = A$ + "V7bigTegF=7o8`fb<nK>oIm]B?D5o4m;o>fZfkLkh[87W_[OP>NeMY3N_6PC"
A$ = A$ + "SjiknK4g>gm#CBkdhjd?LoN:MaAFOKnml\]?gAO[d3EaOdkf9F7TCk>jCS_N"
A$ = A$ + "XZOjkF^<<<<<<<<<<<<>;jli6Io#`>nVS:o[2WW8^En^3UO>YK=eZl=9LlH?"
A$ = A$ + "eeE_DeCEnTS7b9Te9nb5>OGUV>OnbIeOI<YmnE7[>W4En21eJTUe;[b_Yn^S"
A$ = A$ + "^b=GVMeY:on2JkkTEN=OEiO`aFigDFa3cbadj5;[kn<EU3#eI?oEL=k?37?2"
A$ = A$ + "ZmTDWN^SgXfcQZ0\_lZm<adc=9_OK`n2X[N5bI^^PlQiSE[UC>PmVJF>cm9W"
A$ = A$ + "38?Ik`cb?og:M1o>:GFk^W3#MA]N8_Z#a7H>h?oco\Loam[oj_nMem`>_\^Q"
A$ = A$ + "?S>LnSfB^<id5YA]Ohhe;AEWDkQMNoFXTENmfimX2bWEUWJ=jk>_TlJ;[f3#"
A$ = A$ + "\\7oMdVTe5iOGYCSo6]_M_O`?c[jjI>US7eIFg`aYfgC8^:OO#N]TGYkEU9J"
A$ = A$ + "?DiM^]EEWhfK\fRlnnWUEV[bk7?T?Ce=INANn8ZdfMn:ZhhlkAiO_RSG]g3#"
A$ = A$ + "JDmmoEWScmi0M2FWJU?#8kk>Rb:B;GVQ^6]CAJAjHm]Z>Eic9F9[1H>M>PlQ"
A$ = A$ + "3H\6Q\4b9_gfbHbim#aaEkcmZgSbloE?3GNEmImEPScSEYj<B4a3^IDVZmWM"
A$ = A$ + "U_k#mmB\W6[f;H[>;f#>EOcQUE`Cbeklo7iCenU5k1EeNKCeWI>O[fc:hgh#"
A$ = A$ + "NoFb?7ZC:OQWjI#mAMnbOgihlLIRPRScQlN?^JnhA0UkDOgAW?PYJO0]Jnai"
A$ = A$ + "mOJgL5AnEMV9hm<Oen=7LcZm[Deil\SS[l;1Mkk_:onGecTmeCOJLLEKDDOj"
A$ = A$ + "hhP_EmmOFoPfi:n5KKZ^c[`4kZ`Q8=X>=a6#E_CRn01G\SWgIk`MhhE_cUi["
A$ = A$ + "ZgSDSk7?GD?bfl9;?:kPm9aaahTELLeHE`Hnj\[2_WjZ>3MZn_DlAU=iFaaQ"
A$ = A$ + "L4boDIUCGngc]eQ\D=F\:K]];7GI[alLTil60W9VL#io8beEUM`Ngihif>Nl"
A$ = A$ + "^ZdaaY\E\bF5IM_J<9#gcYCI[?hcWkZC<_0WcREb:hhLN6aUkgTiBZgMcngc"
A$ = A$ + "SbagM<7idYlANiggigQ`LligIQ?ikCRS?eOH_bfQEfEYbgMXnfQZoLlMV^jT"
A$ = A$ + "BVDfbGIG5ENVWk7cK2^1>_Oi0\3dIhhEfIDe7>;GQN_b_NVeOOK#0mWMglgc"
A$ = A$ + "`aW\^:ELLU_H9g73c[ZlM7ELL^MVKOW\^Fh<o>anKMLLejGQaU`iMDODSGnX"
A$ = A$ + "]1A8Of:DL>^l[\1LWOYA5#kck`JMn<hhLJDl:eJVb[o2F3iEnGi9[cI4`HVj"
A$ = A$ + "TeYLLFVDcWU_G9FYKaH\PLdI3DdNQW1fc9o<Q<aSi<B3GFIKZ[NG5mQg=WQG"
A$ = A$ + "9L7Ll^m_42#7^JOPTKWG9[:oOEW=PfQS_B>c_;>USWOf9g??\mWHiBIGHfoW"
A$ = A$ + "VgWFIiEEg=7G7Pn96_j:Og1h#MfBGiOU[TEeLWjfOHINl:>NW_#QmK9kbaAo"
A$ = A$ + "V[2<7?:cX_k9jiLIQiCVG[FEMoMINWIO\BgJ>GU>ejESh`jbWANMeRO_cgMT"
A$ = A$ + "i#H\O0lIl=?WYEbJl_8n\o1YCFil\Jm1IOQ263Ngl2[TG`]P=IagMHi<;_hM"
A$ = A$ + "1ffWIiBM6YAomlLY30O8CNOFl>Ik#0fVIEO3Z:MZhheUGaMSaQ?aG]XheibC"
A$ = A$ + "i[7ZTEF^`hDG9[ZlTKWkl5:Zk#^>iUiZ`fSEbINLeig]F9GZg;ZfG=MemGMD"
A$ = A$ + "iO>VV^9aeUo1G_cG]Ti1CBg>bj4\[NJ7i\:_I^El_[l=:XOj#OZhZEb5F7fL"
A$ = A$ + "IYZCCZk66kRSdW9\]o^gE?_Sm?KlnSSdOiA_7ZLOc6666666666666666666"
A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
A$ = A$ + "666666666666666666666666666666666666666666666666666666666666"
A$ = A$ + "66_kh?ocolKomOogBlGoeOm]SVfh_iOGml8moaOl7okonOnWoio3aO7?CGi7"
A$ = A$ + "aGUWEeE^<Rb^C^EUA6MjU>iahiPX=\;4l0`1VTFT_AKK>0nR:mAn7ooZl4l\"
A$ = A$ + "ZWWOV:nMGIPgUDb]Z<bQ#^Zbk:iaheQSWKWWTfLoNLlof_mKOGnn;ob_lMLO"
A$ = A$ + ">4lWhIidQWW3AL1bec>>8T_Oogom_YTKEIT3Q\a?g:iahnhh:NC`?nYOjWng"
A$ = A$ + "me]:]An5YUKc3N0Wf8=o`?l3OGJoaOl7Ua5mg[NN>4a58G?iW;b?EL:i6b86"
A$ = A$ + "K37RjUZoO0UlHL_Ll:NSZOH>]8>>OgQSG5Gec[TeELl:iVO?6LLd?<[3RPjM"
A$ = A$ + "S8m#><7omQS?QSeaEVbaag2Rl0OWo:ihP360UADNac`O[Pih:IEE7P<7i;#F"
A$ = A$ + "Nbck]2iiKKL]Ll:^T:N>^XMYR[DU_:>8\G1hNZb_J\3:>^Jlh`V:inJkhhlk"
A$ = A$ + "]A0LI57_K<hOG692\]Z<^6>>cQbl\Ecm2SKOG>N4_R32KZ4?K0>?[2:>NUME"
A$ = A$ + "P]I#ID=NLeH^S#<>557WcO6IKGF1lmU#6^KNbk<VHCS9LLHk3`_fI\:An3kS"
A$ = A$ + "[2Ef>\:D=ng>NNU]3cLLnIahDjhhAlhm7UnW7c^2VSO]LlZaZXnF]:]AkAUm"
A$ = A$ + "9jhhQ\4f^;BWR7Z\M8N_R3Mca;:3eH>#Neaai#NNU\<SnRaHQhaSoMIV8hna"
A$ = A$ + "OLLLelh2N[RS[VcYjkj[6[B87H]#E??6Kk4IEaaAn78hMZnU[\iYJ\G#W0n;"
A$ = A$ + "WG\ME>27gS7oibage^:WafQ:N#gc[Te>kZ4laXoLF6E_7U]?N>T7WRjm5f^:"
A$ = A$ + "ll?AolHL<:PgQLoh_VLlMVcYZ_cMNNU\^RS[6GBTolHO0GS3inYSgGZhh[hW"
A$ = A$ + "Nlh?O>>\UQRg\37Wi:Zeb7fIDeOj>O7#9[Mf><noZa3Qan^ZLi`Zm[BgH>P="
A$ = A$ + "6kPihG;7G5j\?N57_bNPi`DKB6QX_dc`akf?9A8TEekVHL3MQc`a=^O>>jcK"
A$ = A$ + "G>>FWbZfnlgj[\mlA:o8Xhh[fKShm]S`akToLMem7O?8JkcfJ8SlJ<2NK>]i"
A$ = A$ + "nQanc3aU]78nN;n^?V;5?NClkEY5ffY[lc_kXZ_il7UQZ>V;o0idc8nMHSoZ"
A$ = A$ + "OgLlk7ie_A1<F1EJ1O^bFIIK4`P]gPJ_<MTb_cnhlk^ib0l#F>hgOZVKHENK"
A$ = A$ + ">nm3\n;EHEJ1g[jI`_?I^DX_o<Rh>Ki_S\dY;Z`:MH^>HHHHHHHHHHHHHHHL"
A$ = A$ + "Oh8nJ44GNoic[1GgNfo:Uo\L<MM0kT=Pli33n:U:oeB5Zle;WAogi3FZBCEm"
A$ = A$ + "F97M]Y\?SYBOmZQMme8M[eLF_EUVZccbAAFNVZWG]g0R0JO?jJ[_b?\Di[IF"
A$ = A$ + "Yo[F?i\NUCSZ^dUnZl]K=HOUgW1kh[AF]FdA0f^]jgAngM65WRlN:4[SnTc2"
A$ = A$ + "`4>nTeN_kmeEU1j?HGOmbZejG]?d#NVU94gTfdZcfD>TGKikVC?QSG]g=HmQ"
A$ = A$ + "JOBocol?;KSFMNFbHjhJbb>fkQCF7#l=I^=;O^8En16Em=RkGoeOmkn^?GgE"
A$ = A$ + "nQ5\NoCeoln7FMf<Di9fWHiW]JOM6b?gn5a5][[dG_Z[1kIhhAmF5GGKTJ=j"
A$ = A$ + "[j3LehJbjLNo]<1Ek=;5OZZnRmG#N]7_JO=CFoam5[dmZaN`O3XKoi7iSBVD"
A$ = A$ + "kCigQmI`IK?`N82j6\OBZJSZ>?;:>nZaeTOGXJO[dQ:n5fKDCihLiNeWGT\n"
A$ = A$ + ";ca[hLZcI:VC9G>G177j[Gec<j>]7AMP3h\Xckc8>4j]0CVGHVSGegL^M<ON"
A$ = A$ + "afA7GEgAiaS5hA`aInd:Om2GflL^ElFEnfaaaN:;n]#nZl38Ai1MbMcS_:>>"
A$ = A$ + "g?2oLim=DE#=6kYn2RlLgc]GahQAo9GAMoAaaal1akk:>NE#e73O>kZ6S=2l"
A$ = A$ + "hLjj7O27?7^KNlEbaIn5o\8O[d5ig5>37?gNQa7Qi5aXb^F?K>^J_k^37WC;"
A$ = A$ + "??`ZcPT:daai#eiFUO^Genc?27?#eI#[RS3nFn\hPdVGcRlgOQ^58O61bjol"
A$ = A$ + "HaEQ:kcLGmS7l:<76VSei[GDc_W;;eIi[boeMF>Nf^:<ohE2k`a3mGfoR4eK"
A$ = A$ + "niaHdD??OF1HI1l5X;IkL0T;c`N68nho[2h\m`mcLgS7OGm?gg1VO377caEc"
A$ = A$ + "1m8ci\b7>VaMcW?;7WKOQoTOjc_b^:HM4H>>jK28cmHK6Rgo`HNcfjQ;ckVS"
A$ = A$ + "[j7_Coe=F142iPiXE[GaEaacfEi^icG=77O_Mjc?mmlEfEIR=3EmooZaaESa"
A$ = A$ + "n\LL57E]n=G97o:Fcj79h_SQc_>7WJl^AM<\YA>0khe5V:KZee9cOj\IHei4"
A$ = A$ + "K7>>c;DS=C=oR0[dYX\fQScQ#ND[YZRSGeGTZm[jK;MfEIeJBOgHeN[8o=YE"
A$ = A$ + "Y5]iMQc`acl>DFkJc`YLLehHcQ^_S<E?=US[laFE?_RSGE>AlCfK=_kLl>O6"
A$ = A$ + "B^_B<WcZdVmclMQc<oT:K6n8hh8=EnQilIWWgc:MjdlLeV^>WEcSG5_RS7YE"
A$ = A$ + "IOl:oGCFg<QSo^<^5fWQ`noP\?KHU_>1lSlLob[maAihlNkBa_fiMKl]ilJM"
A$ = A$ + "XVk4GOcee^_S`jDU?QA93lj55?7\SBF?RnM`cSd6??R3U9ZcEee#?V[Oa_YT"
A$ = A$ + "9<Vm9c[oE3Mn<4^_b#O<aGWXnm[`>CIil\nR1f6H:>NEm=k;EfEWVeCEb0o<"
A$ = A$ + "Ef[[JoAaoMTfLmHUo[9on<BKWoQiEWSW[[ClO9X]oXnGTc8Sibl\eg:o\R:M"
A$ = A$ + "ibMW_O\BW>eG_DU>ElLLX_P^jJ^>Rjg:Ij:KG=<<<<<<<<<<<<<<<<<<<<<<"
A$ = A$ + "<<<<<<<<<<<<<<<<<<<<<<<<<<<<nJQ^k>Y7eMkb>gIBkNo:]:]k6?GnMjTh"
A$ = A$ + "gike:LOoLTdbbDGkgWhMDeEbgj2`_ROUUi:olddkG9h?4biMW_c#UOEgYE8O"
A$ = A$ + "EnE:^ndiO9Hmg>YUomMJk>S>lC3Cl7bG]>HR_<[RSY2inoZB3lWW:>^bgkF5"
A$ = A$ + "OfOK\ck\hL2_CJiO;Of\kNG11XGfE7nY1UocQm;HAHU_Eh<LlX_;ULX^WBDY"
A$ = A$ + "5l>Uo=61h3TZ^W?h0^;6hbGio#H^FT6ni`m7b>YU3IO<1o<AL:oD[b77fY3_"
A$ = A$ + "KnhcRSGiWm^:oAZbo1^cM?3WF`CEnl?>oVjkAAl<WTmA91Dj:^>2o[cddZ^?"
A$ = A$ + "JjhhMj`9Y5j`?AO6aAm]n#?WWgT2Zai\Ckc4oYJ57W[KEnL=5gCY7bne`S`a"
A$ = A$ + "[d[kTfS`aImBW>lC\_lc`aWL7^NeLLegIQoJBeWO>0oSM>4e1U_2<RGMGJZd"
A$ = A$ + "3lcnZaagA7J>^^Ol:kB50n;a\^k<]?L0m3GaEhoF=nSLjbo6olH<m\O=DY[`"
A$ = A$ + "M0;lemMgUS?K>>7bj#caenV`:ohGUo_kZJOPol6U1?nkZ_7cLllhGbiAeccc"
A$ = A$ + ";YCGaj6EJ_C>>[3=7OoaZ4jg[\OLegIamc1olLLAI[hDio>?n6Vo^377mS7b"
A$ = A$ + ";^W=Z\Eb[`HEP>l\n5eGAl^=NLEJSlTi?ZkL[:KeDegM5g[k^R82:N;F[Y9Y"
A$ = A$ + "mAca[dQ7egFoZSc>NL\6dEn^D5_hAHGU9g_U`^8Zk56EMGIgjSbaEgIBEYm>"
A$ = A$ + "hhffQ_>S7_ZmYj>iDE?j^o>ESGWe1<?#U^GIkZlEgfQAk[JmmkhhIoYM5jFk"
A$ = A$ + "KlmPcdnXFK7ej:Z^CL#8T=5WSe1<7G=7fZe>JBJ[\1C^^a]AhNM#EO<7OfnE"
A$ = A$ + "YSS_;V\o9P>OJkSJM>Dle^kR[:k\_B7\ZnPm5#ENGUfZ0VScZi3QgE<7Omn>"
A$ = A$ + "<?FTW17?K_fY]?Z_M[hhEk?U8Pa8\;7_[>U[;EScX:]EQlHW[^7^bf3LWm3a"
A$ = A$ + "W87W__WbP7WmE]OEP][P^FMW914ce?Wfhgan3;OG>QmaD>MP7XF;V`6IlMaE"
A$ = A$ + "N\8\lQW[C7Pk::0FoU_;UhiV[B[j^RFM_B]jN73]a[dQOZLl\>_K>SGin>4X"
A$ = A$ + "k>C2l9H_F>]XMUS[j>X[:NEiRjYBnFmNNEMBIkiYY]BoT_OmZ^7^bf3LZ>l^"
A$ = A$ + "iR?:X^[TNdgOAMU7GVZOOU<WcWMS_CnVD_VNGQ=9]CeAlm>6o>eDMhMc5=<<"
A$ = A$ + "<<<<<<<<<<<<<<NM#WO4B]gH?:jlU=Hm>hhRWSCKf7TXTmEbA\^7h<<eM^CW"
A$ = A$ + "VfYb0ZOilQmM=MjW_2nkW75Vj;J>;jF3oZmUElL:OOBU\_BN3NBW?l9kWAVV"
A$ = A$ + "f9b#gN;9GOF]7DNDn^\?Mdaa3NFfgelXhhXOL>^Ena7eN3^CNGaQbm1?U_]B"
A$ = A$ + "6V\WPVFVa_keYilLlli#>j[jZf[:<7?G>PcV3Ek[:\gBZhhEb[bo[X>kmacb"
A$ = A$ + "k5<EJanEKU<XfkSAlLLajDbLl8>eIehCm<kl\hhimHgE^O\Zf3Pim9Rjg_:>"
A$ = A$ + "n>W74enAOgd2I#]7fEeehMX9Y5kQZkVgl>QZfN\OnDWih[bg1U;7enXm^hh:"
A$ = A$ + "O=d^YMG>NEMEaackM<SSaa3mHdfYV;oEMFUai:6kacYk1lW17_jLS]CJ_2>^"
A$ = A$ + "J\:im=lMcMNG`ZiLZhZGQ_3:7PMeVd^OeLl#6ckCkG9>>7`lS<7oJihEkibc"
A$ = A$ + "NFUif^kRSSdVUkGA>>V?\ihWWScfkPiZGU_3:G>:oAlc^Ol#VQ?R#IGUGQaZ"
A$ = A$ + "0o`hWlIIhI`aEfEIG>n>cilEc^:kTf7=7GUFLVj^KNck4>RMEP]c[>O:CmM#"
A$ = A$ + "_RfEiEZOl>K7n9jgfNfLlEf4o:lM#idHkZHK7nZaa?[_3jXLL4ZlgA8XfK7l"
A$ = A$ + "cGIKKeJJFUf>o#GUmRZlogVSoJaag5_2LlEcUXbG?gUfELLN?4XZ7EUYihO]"
A$ = A$ + "ihH]ZZ2:^#gmQFN>`Hn1EY=KWj>O]8TQZm`8kSV<7oa0f?21MnEcaIO74kgJ"
A$ = A$ + "ZnMl]Mh7Pbnh8H7=U?#ZKm0cnM7\GAZV7aZd2iKR<`nkWLn4Y5jP\??:0VOo"
A$ = A$ + "ZjUA?HKiMeLl<WYR?emkEca5fF_JN_:^#HCRZlSUWYYMR<4fm[bOoTUC^lD_"
A$ = A$ + "CH>nnhIi?IDfJLb_GIWb0MnCX>K\1^cEh_OV:3ao?W?Zm9kTjW]MXQQQQQQQ"
A$ = A$ + "QQQQQQQQQaS4Mn?X7U_lX[lDW]^ZdGU6T7\?9jXegSj7QbYAmKZjj[ROFjC2"
A$ = A$ + "khk?^:\SObYkN`>k_ObaSf#NMaWFOInaAlS#\<Zb3ekD[>7#l_SjjEjWUnd`"
A$ = A$ + "Tke][^olMlC>Mb7FC6VSSm88c7Dn`5E8g?gAmS#\<fmKMk=C^\N6nIY?=DEo"
A$ = A$ + "ImhE^^nZkXB^]5W;3EO#ifaH=]SekS3acckg?enWBEOS0lO9LJ[lS#Ek]`#6"
A$ = A$ + "SOG5`Jcgaa?ZOF:Wg?[mLg[:VL^1#LGekm:>>gfQkW<egVifGEOcX\baEaa["
A$ = A$ + ">k3kTfZ_?4b#EohChhlNPaLl7;7We9[lS#lHKgUSc]MX?=F^DL8<NWLhAbai"
A$ = A$ + "dRjHl<#>DekYLlM??PVSgcaif;LgobjT_[aF4VL>5DSE1k=_LJQM4#0W]PZn"
A$ = A$ + "9W>FU7177eWlihXS7FaaSj0j3H7oca>Ll\>nCd_h^cm\LEohEfj2__PmnJ57"
A$ = A$ + "W3icO0caEm=G=NGeMFocRSWOo2l_S`acQMlcBVS?SSS_gG]_Z1ZfcdEkei>>"
A$ = A$ + "NXockMJ^mTihhLB<9l<ihZaWcOGIG>ncXOLU<m^S9SE1Wm5^NGfH#jjEmScS"
A$ = A$ + "E1n97el[Z6gN>Dm>dcTS[6oDU\?e^:khWUfQSW?kAORWaXYciDe7nge8:2C7"
A$ = A$ + "?^ZmGe_Wjm?FN[\SgMcaEYiEb^:OZnI^cHk#doBgicAe_`D>^b^gL0c7VKgE"
A$ = A$ + "OcoIcaceCU_[hEc^:OZWaXcHk#Pc>Nl:>nT_EXTGDFLJOfLLf>WWQS_[_;`f"
A$ = A$ + ">lJihicVH5>27GI7=eLiDLLeH5Z\S]JNgX_C>]ElN5o=oN6dCLJNDLlEe?4R"
A$ = A$ + "Ok[VME>27OG<USG]V9LPiRZaX7Q>KY[Z_ML7FVDlgLMBmNWihVScQ:>Nel#i"
A$ = A$ + "fm9LLfWnLDo84?oHelUO6LlZmSCF6b?kWX]3cn?8HW?XCQmT^JO:DfFE`NEI"
A$ = A$ + "oT3R;nG8GIkJ1I>7?\3C>Mij0JkRO;GOcPmY9ij;N?TW;MVSWcG^>Qo6[GIU"
A$ = A$ + "MjbnA9^^\jgceeLMBY;cj><Gf?EK72`fXBMg:LecAIZObYJn[ZhINWZLDeG6"
A$ = A$ + "lj1LDo84GW`k:Ec7?o>EEIdmkWa?;mYJk`LK8Kg?dVaaMU_Gaf[JJLCOnZj#"
A$ = A$ + "WonY[N2>[J^dZl=nkLLlOGIW^EbDe_gEWFiSSnD]MXQQQQQQQQQQQQQQQQaa"
A$ = A$ + "acb?2=YLjnm\oDIEnaU=R?OfUhjFgiIJU\Y>gZ6_>HeM9nc\L:C`gnNokCEn"
A$ = A$ + "an8WEWk8T^^bMEn4Q?amjaW2F]WMD[eaSZLF52>9FOR^m;5FSVEgYJA0iGGI"
A$ = A$ + "Zf7TL8kkS<N]Pb?mT?caZeBnAE>:^:OF3`j\cW?^L0g?dZmE=cWSkA:ekG#f"
A$ = A$ + "`N_Rc;n^\7U[j^?aheRSWgKYEkGR7Ei`QZm?H`Uhc\?cKE?KgM1XZ\cHJN1O"
A$ = A$ + "\Ua[3ZhNH?Y1ob6BON^KE#=>n9UcD>Nl<lnN>7ZfcYh\oZ^;0[hhEOC`gMV_"
A$ = A$ + "?#am`g_IKI0>nZPbgX>YLhlA=F5EOn1W:W>L>?Ei9Vk:_gmh0^S=alLia3Y6"
A$ = A$ + "[RjmUk^meHmL1ELlEn>8h7#cmo?YL:C`gno?[IX_eLP7ONn<XEI?4nlFG5`g"
A$ = A$ + "Tfag7U3gMk[A?g3OCG]G;in1[fgbkD>E1LV]bW9PL8j_UW3JT^8NlNY:<afQ"
A$ = A$ + "hMQSjkSbkKMSG3>>kgJhaG>I\:hIkj7GE>LPk7>B;>;?i#`Uih`hlc_CZhYE"
A$ = A$ + "LLfV?[\[2\i3>C>1`hc=7oeRS[\ga^LlYS7o8fEQkc6aaf2?R;hhP_Qc86;7"
A$ = A$ + "ac5YEEfkJGUPgWeEli?bheRSW]gA^M3nFB`ID8?^iM:W9LLELZPj\#7b0kKR"
A$ = A$ + "DWCKD>7a^:AmAMFU^kfi_bhXnHVc>NLEiXhI7US[V;YJLo[hh#fhaiHK7nnP"
A$ = A$ + "En^fZWS?KSEHWbAacDLL>4b2?F5UOG8BG<NRL8T;ENV3kbaiWehmTSo8:7>N"
A$ = A$ + "57Gi;VQ=Db1<odEfl[JO4T3VSoNSEk7`9SKiZ:7>D=G?EjZR?jgNRO0Z;LVm"
A$ = A$ + "5PWcimS\O42[]7`EjoPVD>`^K8NDfHO9Rid1kXTCGfo0a??6GEN>a\O02_7b"
A$ = A$ + "bFWLTmC#im50Z[ffQ_FXc7cLUn?X9U37O4WbW3YBGElAoi<_68?_Q^i#G97:"
A$ = A$ + "OO4WGgMk[aam[>?RbIBLEn<XZh12^NWO0JGIKZO>j^KO=<<<<<<<<<<<<<<<"
A$ = A$ + "<<<<<n?a>nKZ[0H_iFi[\DY1acY_:_FU^LIEmLIoEDg_YdOkDG3Pk9LnLO?Y"
A$ = A$ + "LVZ[D]1EUeW6Vj_Y^:<iLWaYAMVVAkgZP:MibZJ_\Ti5LJhg7[dKCZ[Mg[Fh"
A$ = A$ + "<neE>CeE[Z_LmjC2Ml4NoaN5Xk<4SeMDe^akCFdolZP:MIooEgcQd`bLNo_X"
A$ = A$ + "fGl#_MTj:7PogZZLhh[dEZdZ:[kV?nXihEnKZ757GiG9DnM=eNl6l\ZnccW7"
A$ = A$ + "CV;Smd2c5HOf2BCeM5J5g3kmV9eE>_SmDSJo4cgShXLhh[dEZm>Yb_Qm8jGk"
A$ = A$ + "^AWoV2]UGIia]Ci0h6:>KeM=;JCh0_7YD?[j<1UooWUS?Y^biMei2Q[SELl8"
A$ = A$ + "DY[D]_:M3O_fm^S9nK:^nbc?JZ_bR?[>LiQmlZRS[>C?Chh`_HYNFEOPLNXh"
A$ = A$ + "QChhZa;XZ[Zaj7U9lcAIO>YZLDLl:MeD>>_G<Og1GoDnK:VS_j\ePf0^\D]c"
A$ = A$ + "lOGMN=ig?hf2>mimd:WOhIE_CW3hlDO5LlMZ[`>7imak>Ll:MURS[^oOoThh"
A$ = A$ + ":MAeg[EmSgIc^8_Dn:a^fmZfR8XVggIih[T7`3?27WUYZjZJ>]XnVmm1C7?>"
A$ = A$ + "NfYeGh;nnDihZnEiiPfEO[^GO[>o1ZaIV3HnBC\GbEcaalCEYk8LLVkEEG17"
A$ = A$ + "[bn:Ef>\SScQ:>^b^BXoY?UaS[N_NUoV:`TaZ4jN^OLel[hilZhhZbk:hhi#"
A$ = A$ + "T6NNRacND>^jmIEM5b?>[5EeeYLl>MUihOCNg;P_O];7G=NL^=FIW`X]PU1e"
A$ = A$ + "m1aIih\]7`Llhj#eghgQSgEGcn>>83C\aG57_CGmEL>WChZXm<kG?aH^ahhD"
A$ = A$ + "8K?0lL;;\_m]o_gWHIXZMkXLLENb1<F]S`aW4Df#BY[DbK57_CGI>^>DIo`0"
A$ = A$ + "k<Nl9SK\B_[lY:?3>>bWMih:iE5DmI[VOi>Ll>MeGA>^BGXlgDEeIUOaR1Ng"
A$ = A$ + "#=6KeJIS_3T3ESUl<LLejoX6?\R7V[3E[andjZJ\Q:KJ>USgY[Dik:mjk>hf"
A$ = A$ + "\>k`Nfj\JOAQn2cQ8]:>nZnKDeU>>n>f#n\Ll^jjT_W0On\:?ELlY[[[:lET"
A$ = A$ + "SSh?knFYRScb1j?EEnM]5:I^SS?eViMkKZ:n\jK4Eee>KUV_k<fQSgY[DUE>"
A$ = A$ + "^?=>>V?ON=ScnKZLlWUS7mK2Km6i9kK\`gSShanU8?gE`5ZF[2EM1l:DfiW5"
A$ = A$ + "n?;EnUc7Tf\n00b:\a=7gTj:R7aYT9d^4eSLiXbc9jZ\?Q9W?OR[140??a8>"
A$ = A$ + "ln<7oIA^M8o^S:N>>ULa]5Mb<WOI^2WOZh[VS=NOIUlgEGEaWig#^DUSjIGY"
A$ = A$ + "[DUE>^?=>>Kg_8^EnKZ[Z\#nFI3BEig9GklKMUcdd2\boO]:_Q<6i3omR\MK"
A$ = A$ + "[JG>Z^R]=`EgNKHHHHHHHHHHHHHHHHHHHlZ2\?IcWeHfGbDMNfDnFYZdFEfl"
A$ = A$ + "iL6n0WEiGENN5jSMUYl_eik^PnJR_9[;=:Omc4O]EGkOGKKg_eiW`N5#gN[="
A$ = A$ + ";[U9jKoWnMV^m?KVW\bg#UeQC:g[0WAVH>CEXjL[YZCkh_OVj[]fQ3L5n9\k"
A$ = A$ + "6Zc;27`j[]:MXm_[M1[Yf:N0dC[:K\OX^ZeLn<bDF>jb7X3jB3b[Yn0\YbNe"
A$ = A$ + "jFfUgHm??ZO2k^ihC>?EaM_WJO8ba5ee8]MW3C\g92Nb4O35f38L8O6T^Rm:"
A$ = A$ + "FEOEk8CMkaa\o;0kgULJZl=I:^Sj>RFiK<ZleFacW[cMW5DLVZEg_Yik<mSN"
A$ = A$ + "GdO7LlYgYZAPS[JOYVok^m`\jIamMY:]ZmTdIaE8C:mZJ_]eiKbP>ObIX3aa"
A$ = A$ + "iAEL\^BE6LN7mWmY`aAo<ZkDE><QSSn_Dj<EnEeF[B;dQlin?6cd:ogEeh5_"
A$ = A$ + "2IZSSSmX;g_KU_9[jlHYRS;CdoNn>cE]?<E?7G_DOWhMQS[6?>VK5__;i`4>"
A$ = A$ + ">VoO>__2>>^kSEf;HbHHS`cTSSk3jlhQco>?NGhKbDn<8N\:8]:i7foPg?`M"
A$ = A$ + "LLnK\En9\g5>NP>O7LN?FZnMFgXn6<o\X^c14?OGM[hCilGmNKf^IE#i?N?S"
A$ = A$ + "<eaac1EO;Q>Bmm>UN?7Rj8h_Q\=aGKackDaMioVKGcao>`akJCVJk`80MM>X"
A$ = A$ + "No0WA6>Ti8Lo>EQlkQLMB=6H5FaaW:CCihQLam?7l5N<N[hh`>9XLSlHR_fZ"
A$ = A$ + "[?^hII>^Z_;8c_CLl0ZiE4QELLHW8XWIm3g>QdbQLOVhlLem=TLiV7?ndaZ\"
A$ = A$ + "Koh[TYYfEAaMEfSZj<:cSE9b[\ODNU_fRKgilOZO2kMQSSch8PBNaH9iPZ?A"
A$ = A$ + "^=9J?D]9ELLelOjjO=G^kbaEjS[#VDLLnK:lcSiF`aEM6UihRda]U:K`7aU]"
A$ = A$ + "MXboJa]eEcYmMQS[JoRn1FYGS0ccDfcE5`LTDi7;?XOcZb^b^:X?c^cKfdaZ"
A$ = A$ + "\[<eaaalgF]N=A0So?7fa^:ZjDff]Ck?Xb?Qm^baE]O[hhMiW:dUO7a66EhZ"
A$ = A$ + "6?nEJk#l^hDOCfIhhZamcbad_im9aa3iE]>JCiILKGdWjdekA=OPEci<2MLl"
A$ = A$ + ":ofE6MboAT9l=T^OW3Q\Z\5n>LLU?f^b^kEki0l]?eH_[ZC:OXD>LggCL`>K"
A$ = A$ + "MQ^i8^RSGeWWbWMb1<VVSba_Rgi?R<M4>^JnjkbainVD1f_YDmm6Eo?_[Ll0"
A$ = A$ + "Q<Dacan1I:7WCCgJhXdU84aWmM>MQ9SKi:hiCUY:k^Tc7EM#=_nMhhMSc?k["
A$ = A$ + "]j6cD57W]O?Gn:I?G7bc1h^#N?TQoO^m4LXhm1\6S:^EN>mie;9NG9o\8nHn"
A$ = A$ + "]Ao?ii2bfQ6fE;olILeLl0WAVRjFf7OaoNTGH=?ceQ\_9;WG`oKQW5LDDf8>"
A$ = A$ + "<fg9]UP_UmMHif5<6kLkHf?Qae7F>Ima[077][\^PO_?#gLfZB3ZOEaGiKX2"
A$ = A$ + "mGfgi<M^SG1>[<anS>EnXZ3Zi:ca1n\:^>IG]_33lXlCHZfjG14jPlLbDnEY"
A$ = A$ + "EnA9>=PCD5O^oWZbEml[TScRc:CkR8oDn0[Mm;F8ObbNd^Veg[Z37Y^eiW`Z"
A$ = A$ + ":K33333333333333333333333333333333333333333333333333330h_4j^"
A$ = A$ + "c[^Sb[bWcFmkik=4>n9g3EC;O>m`gL]jNbZ2kLgFEUf>I6bk^eo?5<m>_jIG"
A$ = A$ + "NC^k\Dn07EI\bWW<aW^FUn>OD3O?IEQ9g]EX>GUFlk:IYb7=bUaMc5O4HWkl"
A$ = A$ + "ZWMi=i^cBaaEn_OUo:CUOlin]:mMg5DZd^B7>aW\QgO[B;Z3knKi`WHoi:oQ"
A$ = A$ + "4gfn8_gdj:_9gMFC^;AR0lg9LnQngQoD8caWLG#Yl[\\_E7aeik0Z^Gdhb?T"
A$ = A$ + "cZn9POPA5ZleIZk]\GQkR]7=7Wi2#oL5mW_CiYjS>gF0oA2W6EK9h_LkIW?0"
A$ = A$ + "IjM1eZb?WfMhhC[784iCEOeMnc_L0jTG9OQbEci#OJ`oeVmaBij=?o:5DSUO"
A$ = A$ + "Wb;WfYgMFX_>^<jhhikQ:^>V3Eg5DL0O72gYB\O\j\LLEM6?3ZS:OCj>Ll?Y"
A$ = A$ + "nbgi>_Z[mG5DcQIWbS_3?Z^k\D]Wi#577UIEOF:OnG>DMG#Qb<k[8?27_ZNX"
A$ = A$ + "R7j4T?Z_GnEUS7HjMNEN\:XOl:KA1>9kokgYlVNgI]RS7UYJL=LJFYGhl5lV"
A$ = A$ + ":kZPgaWh;_jVc9j38k[3cQLo6PK?US[N?nCTS[jc:[3jN^>oiGGoGC:?FgcL"
A$ = A$ + "Lh;9GeO;Jgj\5YR3b_SYVO6nn#7?oZ\MH57G=nLnkUELL>T;SkVCn8`ZklZ9"
A$ = A$ + "LdL0Se^BOeEN:O3oAVKJ>MLk>O?Dan5DEMQUclHhR_cE=F\EcQKjHE`hlij7"
A$ = A$ + "7ZdEE1Tg\?mlC0Zk99eMN5GW?chaWDNZfXZnAEf?DenFMW:`n=f0Zk2ZZa77"
A$ = A$ + "LKDOP_;VOgUW?k4>NU=#W`a[6G57N7la\W5:K7DMWGUiiHMaikfd<PN=?FUY"
A$ = A$ + "UGUmab1LW>`YU;3d^E=fc\MEZhLZ0Vg;77hli0\GdIihZaZ`_C1oY?WV9Ll^"
A$ = A$ + "_kn^2^M_k>_BEggMlhC;_8]OG325Z\c#Ekh>c_JWk2ZL0S;YjK9Em?NF>>KG"
A$ = A$ + "eMihg=?lIbaE[i;FC?eL7AjGQM;?>MMgMFES[7]gELL>MMj5l]UEg9FX?Dni"
A$ = A$ + "ieAUiTZedEmNF57?gW0jkQCcGE>n>giEGam#gdbKjJHdISj8Pg??;77mi[jO"
A$ = A$ + "^cN=A0SYI7>NU<Faac_o[jgh[<7?`dklZ[j^FLBiaQ^mKA7o5LcEgk[lhFfi"
A$ = A$ + "^PBIoB4bfl[RS?IoBU_cZDlgLLZiWoEWS78__kheDoAH?YEU7:;dNagMF[RW"
A$ = A$ + "oM\GV`LT[B7:G>]iOGEnh_Eci68?WcLnW_S\PMIbP_oM`mI=B;NN<g6EnEYW"
A$ = A$ + "n:aa1OJbMNec\lZ\YEElEc1>;oMcCV[WkLG#5fCYjnPZJO7bfTFI?C>OP<`Y"
A$ = A$ + "UO_BUOEj_kVkM7Lm<Ndf:][lZ^gTV6_JMdkB3GG[nmEioDmWZN<Efhd6oM>>"
A$ = A$ + "n_kdCg=Wc`````````````hM6:OfaSXLVD6\_:1[38W^:oUB>]7aWZd9_:iF"
A$ = A$ + "UWLi>9_kl1:Ei;GOgY^Rl:[WideM6H^K>k^#]O9N4U3_>K[TS>IJbi\HeN0^"
A$ = A$ + "[N>ao^`e9DfLiZbON]Dkl1:IOSDGmMRoPY;MLJkBgMcI?;77kM][N]OHmD^<"
A$ = A$ + "2NcZmbBVKe]?\PMYWNF>VXCb1H3L^>E]W\DjBen5XJ=maJCFiOPhm\BGJVlN"
A$ = A$ + "OWo8Z[>m:SZmfiE]7EZhhieICeg7gV7O;mWoiOnkdolo7[cWJo;ZZ[Zji4ok"
A$ = A$ + "2_ggS0F[mZjI57?ZGZmDB4`N;CaibkeV:i5?o_n[oZlm?^]9R;BKUo6;_O>_"
A$ = A$ + "K^kk<7?JkRfMUL=iLAXf7FMi9gWTJoeVc7UL41EMm\LlX\IOCd:IQgKSX>Z:"
A$ = A$ + "GnIanNYB6O7g70k`aanSM5NTLLeN>WK;Z>?cEi9GGc?kDok2B;cI>:7?W68g"
A$ = A$ + "Ek9BNn3En3VYLlO#\?;Q<Rc=eEg7h[27OjITiIbaS_[V3EkifMhhCm_;Z0OV"
A$ = A$ + ";?:7?;o8?[hhZc[J>D]GkAo1HO;RoFYo2m<6[hk6>JohMfFBmN>c5>:7Wc;>"
A$ = A$ + "MMkgkSbaEm=GiO1INdAihClM:MmiZbOei?9n]9LlLmk^i\?B>>`Zm1ZZMUeE"
A$ = A$ + "7UScOGVi6H>FZnfVbaiWSih`o^<9LD>^Jlnlg8DLlhoGmN_jk0L0_C?aO?Mg"
A$ = A$ + "Lg717OjHENTmS[VS9g_kIhhkhOGbQ:>aIhh[hTPkbeY:o1cIhhhKdhlJiaSo"
A$ = A$ + "mU3WV[PSSn\DlNEON7QS7S3U7c_RKEigT?37OeH#P=#HiHJo37I>W0OZLllj"
A$ = A$ + "ng]OnOTSEIB0W]\YiIW?b#5PoMQcOecN6>>oN3cWEe9E0cCn:hhhKdOj[1dM"
A$ = A$ + "=NlYS1^Z]kZhhZgg`hCidN6>^J^^LJFMVWc?kE`aOW67N57?7Z^[Lhcde:O["
A$ = A$ + "RZ]71ffLXLIMOT7<7]b_mXh7hk?LL<7WiOMng5^<EmYN6>NVoFmNUZNZ6?=\"
A$ = A$ + "O2olC]EC>l8_CdNEhh71EU1fc8[f_:h<kb?;jK97`kQ[2Xm\SSG]6TZa=XBg"
A$ = A$ + "IhhigIZhhC\eB4`ilOEh[67o:ond:MJUmZbnG4EOF:KV[\Y=7`HOH>NU>#5_"
A$ = A$ + "ZNXVokAihigSRWKbL0jFO0eLaS#V3<QSo^=^5hg=Ro=Tm<DgE:WiMY0EUAf_"
A$ = A$ + "ZP_1cnX2hkFSd5?KfWISagPhQ?O0aY:CPlhZbnEgLJQN:W7aoRh#j2K`TCWR"
A$ = A$ + "SSm7FGITemAl\ON1Y1n5GN=LRoFE6QlU?cn#7ZJcc?oSRGl<Agl8_bjBEITm"
A$ = A$ + "M8:O_B4GdnPg3DfaB5OW?E1YAMWNEY3Da[Z7\oFAY;hdX:3hoFhlWCc>n3V8"
A$ = A$ + "n#GZJ3Fml?:Nac0MngS[lNj\cVSid5]1ii_VUQZW];_WDVMbIWoMIR\LVbPS"
A$ = A$ + "KJM]CGQOSm5<kD>G9_``````````````````````````````````````````"
A$ = A$ + "````8So7XoSA%%%0"
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
BASIMAGE1& = _COPYIMAGE(v&): _FREEIMAGE v&
END FUNCTION
SUB SaveAsBMP (filename AS STRING)
'This SUB adapted from SAVEIMAGE SUB from the QB64 wiki
image& = _NEWIMAGE(_WIDTH - 200, _HEIGHT, 32)
_PUTIMAGE (0, 0), _DISPLAY, image&
bytesperpixel& = _PIXELSIZE(image&)
'IF bytesperpixel& = 0 THEN PRINT "Text modes unsupported!": END
IF bytesperpixel& = 1 THEN bpp& = 8 ELSE bpp& = 24
x& = _WIDTH(image&)
y& = _HEIGHT(image&)
b$ = "BM????QB64????" + MKL$(40) + MKL$(x&) + MKL$(y&) + MKI$(1) + MKI$(bpp&) + MKL$(0) + "????" + STRING$(16, 0) 'partial BMP header info(???? to be filled later)
IF bytesperpixel& = 1 THEN
FOR c& = 0 TO 255 ' read BGR color settings from JPG image + 1 byte spacer(CHR$(0))
cv& = _PALETTECOLOR(c&, image&) ' color attribute to read.
b$ = b$ + CHR$(_BLUE32(cv&)) + CHR$(_GREEN32(cv&)) + CHR$(_RED32(cv&)) + CHR$(0) 'spacer byte
NEXT
END IF
MID$(b$, 11, 4) = MKL$(LEN(b$)) ' image pixel data offset(BMP header)
lastsource& = _SOURCE
_SOURCE image&
IF ((x& * 3) MOD 4) THEN padder$ = STRING$(4 - ((x& * 3) MOD 4), 0)
FOR py& = y& - 1 TO 0 STEP -1 ' read JPG image pixel color data
r$ = ""
FOR px& = 0 TO x& - 1
c& = POINT(px&, py&) 'POINT 32 bit values are large LONG values
IF bytesperpixel& = 1 THEN r$ = r$ + CHR$(c&) ELSE r$ = r$ + LEFT$(MKL$(c&), 3)
NEXT px&
d$ = d$ + r$ + padder$
NEXT py&
_SOURCE lastsource&
MID$(b$, 35, 4) = MKL$(LEN(d$)) ' image size(BMP header)
b$ = b$ + d$ ' total file data bytes to create file
MID$(b$, 3, 4) = MKL$(LEN(b$)) ' size of data file(BMP header)
IF LCASE$(RIGHT$(filename$, 4)) <> ".bmp" THEN ext$ = ".bmp"
f& = FREEFILE
OPEN filename$ + ext$ FOR OUTPUT AS #f&: CLOSE #f& ' erases an existing file
OPEN filename$ + ext$ FOR BINARY AS #f&
PUT #f&, , b$
CLOSE #f&
_FREEIMAGE image&
END SUB
SUB Smooth
_TITLE "Antialiasing..."
_DISPLAY
LINE (_WIDTH - 200, 0)-(_WIDTH - 200, _HEIGHT), _RGB(255, 255, 255), B
FOR x = 0 TO _WIDTH - 201
FOR y = 0 TO _HEIGHT - 1
p1~& = POINT(x, y)
p2~& = POINT(x + 1, y)
p3~& = POINT(x, y + 1)
p4~& = POINT(x + 1, y + 1)
p5~& = POINT(x - 1, y)
p6~& = POINT(x, y - 1)
p7~& = POINT(x - 1, y - 1)
p8~& = POINT(x - 1, y + 1)
p9~& = POINT(x + 1, y - 1)
r = _RED32(p1~&) + _RED32(p2~&) + _RED32(p3~&) + _RED32(p4~&) + _RED32(p5~&) + _RED32(p6~&) + _RED32(p7~&) + _RED32(p8~&) + _RED32(p9~&)
g = _GREEN32(p1~&) + _GREEN32(p2~&) + _GREEN32(p3~&) + _GREEN32(p4~&) + _GREEN32(p5~&) + _GREEN32(p6~&) + _GREEN32(p7~&) + _GREEN32(p8~&) + _GREEN32(p9~&)
b = _BLUE32(p1~&) + _BLUE32(p2~&) + _BLUE32(p3~&) + _BLUE32(p4~&) + _BLUE32(p5~&) + _BLUE32(p6~&) + _BLUE32(p7~&) + _BLUE32(p8~&) + _BLUE32(p9~&)
PSET (x, y), _RGB(r / 9, g / 9, b / 9)
NEXT
NEXT
END SUB
SUB DrawMenu
LINE (_WIDTH - 200, 0)-(_WIDTH, _HEIGHT), _RGB(96, 96, 96), BF
LINE (_WIDTH - 200, 0)-(_WIDTH - 195, _HEIGHT), _RGB(164, 164, 164), BF
_PUTIMAGE (_WIDTH - 190, 10), menu&
IF quads = 1 THEN
LINE (_WIDTH - 178, 64)-(_WIDTH - 143, 110), _RGBA(255, 255, 0, 100), BF
LINE (_WIDTH - 178, 64)-(_WIDTH - 143, 110), _RGB(255, 255, 0), B
END IF
IF quads = 2 THEN
LINE (_WIDTH - 142, 64)-(_WIDTH - 102, 110), _RGBA(255, 255, 0, 100), BF
LINE (_WIDTH - 142, 64)-(_WIDTH - 102, 110), _RGB(255, 255, 0), B
END IF
IF quads = 3 THEN
LINE (_WIDTH - 97, 64)-(_WIDTH - 58, 110), _RGBA(255, 255, 0, 100), BF
LINE (_WIDTH - 97, 64)-(_WIDTH - 58, 110), _RGB(255, 255, 0), B
END IF
IF quads = 4 THEN
LINE (_WIDTH - 56, 64)-(_WIDTH - 18, 110), _RGBA(255, 255, 0, 100), BF
LINE (_WIDTH - 56, 64)-(_WIDTH - 18, 110), _RGB(255, 255, 0), B
END IF
Text _WIDTH - 55, 319, 22, _RGB(0, 0, 0), STR$(brushsize)
Text _WIDTH - 57, 317, 22, _RGB(255, 255, 0), STR$(brushsize)
LINE (_WIDTH - 160, 180)-(_WIDTH - 40, 300), _RGB(164, 164, 164), BF
LINE (_WIDTH - 160, 180)-(_WIDTH - 40, 300), _RGB(255, 255, 255), B
CIRCLE (_WIDTH - 100, 240), brushsize, _RGB(0, 0, 0)
IF brushsize > 1 THEN PAINT (_WIDTH - 100, 240), _RGB(0, 0, 0)
LINE (_WIDTH - 35, 380)-(_WIDTH - 10, 397), blk&, BF
LINE (_WIDTH - 35, 405)-(_WIDTH - 10, 421), fill&, BF
IF randfill = 1 THEN ran$ = "ON" ELSE ran$ = "OFF"
Text _WIDTH - 36, 431, 22, _RGB(0, 0, 0), ran$
Text _WIDTH - 38, 429, 22, _RGB(255, 255, 0), ran$
IF eraser = 1 THEN er$ = "ON" ELSE er$ = "OFF"
Text _WIDTH - 76, 456, 22, _RGB(0, 0, 0), er$
Text _WIDTH - 78, 454, 22, _RGB(255, 255, 0), er$
END SUB
FUNCTION IBOX$ (txt$, limitnum, fg&, bg&, delay)
'This function either gets user input or shows info.
'If limitnum is 0, it just shows info (message box)
'text$: Your text to show
'limitnum: how many letters of input to get
'fg&: The Text color
'bg&: Background color of box
'delay: optional delay period for message box only
' (and If set at -1 then wait for a keypress)
'=== save original place of cursor
origy = CSRLIN: origx = POS(1)
'=== Save whole screen
DIM scr1 AS _MEM, scr2 AS _MEM
scr1 = _MEMIMAGE(0): scr2 = _MEMNEW(scr1.SIZE)
_MEMCOPY scr1, scr1.OFFSET, scr1.SIZE TO scr2, scr2.OFFSET
'=== find center x/y of screen
y = INT(_HEIGHT / _FONTHEIGHT / 2)
x = INT((_WIDTH - 200) / _FONTWIDTH / 2)
tl = LEN(txt$) + limitnum 'total length of letter spacing used
x = x - INT(tl / 2) 'recompute x based on text length
LINE (x * 8 - 24, y * 16 - 32)-((x * 8) + (tl * 8) + 8, y * 16 + 16), bg&, BF
LINE (x * 8 - 24, y * 16 - 32)-((x * 8) + (tl * 8) + 8, y * 16 + 16), fg&, B
COLOR fg&, bg&
LOCATE y, x: PRINT txt$;
y = CSRLIN: x = POS(1)
IF limitnum = 0 THEN
IF delay = -1 THEN
a$ = INPUT$(1)
ELSE
_DELAY delay
END IF
IBOX$ = ""
ELSE
entry$ = ""
DO
a$ = INPUT$(1)
'=== Return exits with data
IF a$ = CHR$(13) THEN IBOX$ = entry$: EXIT DO
'=== Handle the backspace
IF a$ = CHR$(27) THEN IBOX$ = "": EXIT DO
'=== ESC cancels
IF a$ = CHR$(8) THEN 'Backspace goes back a space
IF LEN(entry$) > 0 THEN
entry$ = MID$(entry$, 1, LEN(entry$) - 1)
END IF
ELSE
'add letter entered, if not over limitnum
IF LEN(entry$) < limitnum THEN
entry$ = entry$ + a$
END IF
END IF
LOCATE y, x: PRINT SPACE$(limitnum);
LOCATE y, x: PRINT entry$;
LOOP
END IF
'=== Restore the whole screen
_MEMCOPY scr2, scr2.OFFSET, scr2.SIZE TO scr1, scr1.OFFSET
_MEMFREE scr1: _MEMFREE scr2
'=== restore original y,x
LOCATE origy, origx
END FUNCTION
RE: QuadDraw revisited - drawing program work in progress - James D Jarvis - 06-04-2022
I fiddled with this for quite a while lastnight. It's amazing how a simple idea like mirrored quadrant drawing can be entertaining!
RE: QuadDraw revisited - drawing program work in progress - triggered - 06-04-2022
My only criticism of this is that the anti-aliasing button is in fact a blur button. Literally speaking, this is the algorithm for blur, not anti-alias:
p1~& = POINT(x, y)
p2~& = POINT(x + 1, y)
p3~& = POINT(x, y + 1)
p4~& = POINT(x + 1, y + 1)
p5~& = POINT(x - 1, y)
p6~& = POINT(x, y - 1)
p7~& = POINT(x - 1, y - 1)
p8~& = POINT(x - 1, y + 1)
p9~& = POINT(x + 1, y - 1)
r = _RED32(p1~&) + _RED32(p2~&) + _RED32(p3~&) + _RED32(p4~&) + _RED32(p5~&) + _RED32(p6~&) + _RED32(p7~&) + _RED32(p8~&) + _RED32(p9~&)
g = _GREEN32(p1~&) + _GREEN32(p2~&) + _GREEN32(p3~&) + _GREEN32(p4~&) + _GREEN32(p5~&) + _GREEN32(p6~&) + _GREEN32(p7~&) + _GREEN32(p8~&) + _GREEN32(p9~&)
b = _BLUE32(p1~&) + _BLUE32(p2~&) + _BLUE32(p3~&) + _BLUE32(p4~&) + _BLUE32(p5~&) + _BLUE32(p6~&) + _BLUE32(p7~&) + _BLUE32(p8~&) + _BLUE32(p9~&)
PSET (x, y), _RGB(r / 9, g / 9, b / 9)
RE: QuadDraw revisited - drawing program work in progress - Dav - 06-04-2022
I guess it is a blur, @triggered. I'm new at this filter stuff so I'm just learning what is what. The first website I was learning filter code from called that antialias so it stuck in my mind, but blur is what it is called. I was reading up on gaussian blur this morninng, gonna try to do that, and a 'median' filter too.
This program is the perfect chance for me to learn about filters. Here's the beginning of a filter list, if anything looks wrong I'd appreciate you pointing it out...
Code: (Select All) SUB Negative
_TITLE "Negative..."
_DISPLAY
FOR x = 0 TO _WIDTH - 200
FOR y = 0 TO _HEIGHT
p~& = POINT(x, y)
PSET (x, y), _RGB(255 - _RED32(p~&), 255 - _GREEN32(p~&), 255 - _BLUE32(p~&))
NEXT
NEXT
END SUB
SUB Darken
_TITLE "Darken..."
_DISPLAY
FOR x = 0 TO _WIDTH - 200
FOR y = 0 TO _HEIGHT
p~& = POINT(x, y)
PSET (x, y), _RGB(_RED32(p~&) - 2, _GREEN32(p~&) - 2, _BLUE32(p~&) - 2)
NEXT
NEXT
END SUB
SUB Greyscale
_TITLE "Greyscale..."
_DISPLAY
FOR x = 0 TO _WIDTH - 200
FOR y = 0 TO _HEIGHT
p~& = POINT(x, y)
g = (_RED32(p~&) + _BLUE32(p~&) + _GREEN(p~&)) / 3
PSET (x, y), _RGB(g, g, g)
NEXT
NEXT
END SUB
SUB Smooth
_TITLE "Antialiasing...*cough* ... I mean blur...."
_DISPLAY
LINE (_WIDTH - 200, 0)-(_WIDTH - 200, _HEIGHT), _RGB(255, 255, 255), B
FOR x = 0 TO _WIDTH - 201
FOR y = 0 TO _HEIGHT - 1
p1~& = POINT(x, y)
p2~& = POINT(x + 1, y)
p3~& = POINT(x, y + 1)
p4~& = POINT(x + 1, y + 1)
p5~& = POINT(x - 1, y)
p6~& = POINT(x, y - 1)
p7~& = POINT(x - 1, y - 1)
p8~& = POINT(x - 1, y + 1)
p9~& = POINT(x + 1, y - 1)
r = _RED32(p1~&) + _RED32(p2~&) + _RED32(p3~&) + _RED32(p4~&) + _RED32(p5~&) + _RED32(p6~&) + _RED32(p7~&) + _RED32(p8~&) + _RED32(p9~&)
g = _GREEN32(p1~&) + _GREEN32(p2~&) + _GREEN32(p3~&) + _GREEN32(p4~&) + _GREEN32(p5~&) + _GREEN32(p6~&) + _GREEN32(p7~&) + _GREEN32(p8~&) + _GREEN32(p9~&)
b = _BLUE32(p1~&) + _BLUE32(p2~&) + _BLUE32(p3~&) + _BLUE32(p4~&) + _BLUE32(p5~&) + _BLUE32(p6~&) + _BLUE32(p7~&) + _BLUE32(p8~&) + _BLUE32(p9~&)
PSET (x, y), _RGB(r / 9, g / 9, b / 9)
NEXT
NEXT
END SUB
SUB Noise
_TITLE "Noise..."
_DISPLAY
FOR s = 0 TO _WIDTH * 10
x = RND * (_WIDTH - 199)
y = RND * _HEIGHT
PSET (x, y), _RGB(RND * 255, RND * 255, RND * 255)
NEXT
END SUB
RE: QuadDraw revisited - drawing program work in progress - triggered - 06-05-2022
I THINK a quick-and-dirty antialiasing routine can be made like this:
1) Whatever the resolution of your screen is, imagine a finer-grain screen that has (at minimum) 4 times as many pixels as your original.
2) Write your graphics to that finer-grain layer like everything is normal.
3) Blur *that* layer like everything is normal.
4) When that layer is flattened back to your original resolution, the result might be AA'd, not just blurred.
God knows I cant find them now but the guys doing ray tracing on the previous sites were doing antialiasing, not sure if that'll help.
|