diff --git a/index.html b/index.html index 17bc43b..e688587 100644 --- a/index.html +++ b/index.html @@ -109,6 +109,8 @@ By Joshua Bell + + diff --git a/samples/sample.functiongraphing.txt b/samples/sample.functiongraphing.txt new file mode 100644 index 0000000..575bfec --- /dev/null +++ b/samples/sample.functiongraphing.txt @@ -0,0 +1,52 @@ +10 rem Function Graphing +20 rem by Golden Child +25 rem +30 rem Use Basic as your graphing calculator +31 rem +35 rem To graph a function, have a loop that iterates over every x on screen +36 rem calculate the x coordinate from the x screen coordinate +37 rem calculate y (your function value), set color and gosub 500 +38 rem +40 rem for sx=0 to wx-1 : rem for screenx = 0 to 279 +50 rem x=(sx-cx)/(wx/2)*rx : rem calculate x for screenx +60 rem y = x^2 : rem calculate y (here we calc x^2) +70 rem hcolor=1:gosub 500 : rem set color and draw +80 rem next sx + +90 hgr +100 wx=280:wy=140 : rem windowx windowy (screen size) +120 cx=wx/2:cy=wy/2 : rem centerx centery (screen center point) +130 hcolor=6:hplot cx,cy : rem draw centerpoint + +140 rx=4:ry=rx/2 : rem rangex and rangey +141 gx=1:gy=gx : rem gridx and gridy spacing + +142 for x=int(-rx) to int(rx) step gx : rem draw grid +143 for y=int(-ry) to int(ry) step gy +144 sx=cx+x*(wx/2)/rx:hcolor=6:gosub 500 : ? x,y +145 next:next + +150 for sx=0 to wx-1 : rem for screenx = 0 to 279 +160 x=(sx-cx)/(wx/2)*rx : rem calculate x for screenx +200 y = x^2 : rem calculate y +201 hcolor=1:gosub 500 : rem set hcolor, gosub 500 (calculate screeny and plot) +205 y = sin(x*2) : rem can draw as many functions as you like +260 hcolor=3:gosub 500 : rem just calc y, set hcolor, gosub 500 +265 y=sin(x*3) +270 hcolor=2:gosub 500 +271 y=0:hcolor=5:gosub 500 : rem draw x axis, set y=0, gosub 500 + +272 if (4-x^2)>=0 then y=sqr(4-x^2):gosub 500: y=-sqr(4-x^2):gosub 500:rem circle + +273 rem tangent line to x^2 at x=1 : derivative=2x so slope = m = 2x +274 rem manually calculated formula for tangent line at x=1 +275 y=1+(x-1)*(2) : gosub 500 +276 rem calculating tangent line from x1 coordinate +277 x1=-1 : y1=x1^2 : m=2*x1 : y=y1 + (x-x1)*m : hcolor=1:gosub 500 +400 next sx + +499 print "end" : END +500 sy=cy-y*(wy/2)/ry : rem calculate screeny +505 print sx,sy +510 if sy>=0 and sy<=159 and sx>=0 and sx<=279 then hplot sx,sy +520 return diff --git a/samples/sample.stellar7.txt b/samples/sample.stellar7.txt new file mode 100644 index 0000000..48e845a --- /dev/null +++ b/samples/sample.stellar7.txt @@ -0,0 +1,275 @@ +1 rem STELLAR 7 Rotate 3d Objects (3d objects extracted from Stellar 7) +2 rem Double Buffering demo +3 rem by Golden Child +4 rem press any key to advance to next object +5 rem you may need to click on the window to set the keyboard focus + +10 GOSUB 9000 +20 gosub 8000 +25 gosub 6000 +26 goto 25 +30 end + + + + +5000 rem init display list : rem SC = screen to draw +5001 IF NOT (dk) then dim dl(2,100,5) : dk=1 +5002 hgr2:hgr +5003 SC=0 : DL(0,0,0)=0 : DL(1,0,0)=0 :gosub 5500: rem DL(X,0,0) = NUM OF POINTS +5004 return + +5100 rem draw line on other screen +5110 poke 230,(SC+1) * 32 +5111 if not(x1>=0 and x1 <=279 and x2 >=0 and x2<=279 and y1>=0 and y1 <=159 and y2>=0 and y2<=159) then return +5120 SP = DL(SC,0,0) + 1 : DL(SC,0,0)=SP : rem ? sp +5130 DL(SC,SP,0)=CO +5131 DL(SC,SP,1)=X1 +5132 DL(SC,SP,2)=Y1 +5133 DL(SC,SP,3)=X2 +5134 DL(SC,SP,4)=Y2 +5140 HCOLOR=CO : HPLOT X1,Y1 TO X2,Y2 +5190 RETURN + +5400 rem erase lines +5410 for SP = 1 TO DL(SC,0,0) : HCOLOR=0 +5411 HPLOT DL(SC,SP,1),DL(SC,SP,2) TO DL(SC,SP,3),DL(SC,SP,4) : NEXT +5412 DL(SC,0,0)=0 : rem clear the list after erasing +5420 RETURN + +5500 rem swap screens +5510 SC = NOT SC +5511 POKE 49236+(NOT SC),0 : rem select visible page that we're not drawing to +5515 poke 230,32*(sc+1):gosub 5400 : rem switch drawing page and erase lines +5520 RETURN + + + + + +6000 GOSUB 5000: hgr:o=7:pi=3.14 : rem didn't initialize the value of pi DIDN"T work!!! +6001 FOR O=1 to p(0,0,0,0) : if p(o,1,0,0)=0 then next +6004 ss=15 +6005 FOR A=0 TO 360 -ss STEP ss : ? "object="o" rot="A +6010 for nl=1 to p(o,2,0,0) +6020 p1=p(o,2,nl,1)+1 +6022 p2=p(o,2,nl,2)+1 : rem add 1 since starts at 1 +6025 REM ? p1,p2 +6031 r1=p(o,1,p1,1) +6032 t1=p(o,1,p1,2) +6033 z1=p(o,1,p1,3) +6035 REM ? "r1= "r1" t1=" t1" z1= "z1 +6041 r2=p(o,1,p2,1) +6042 t2=p(o,1,p2,2) +6043 z2=p(o,1,p2,3) +6045 REM ? "r2= "r2" t2=" t2" z2= "z2 + +6046 r0=180/180*pi : R0=A/180*PI +6050 x1=cos(t1/128*pi+r0)*r1:REM ?"t1="t1" t1rad="t1/128*pi" +6051 y1=sin(t1/128*pi+r0)*r1 + +6052 if z1>127 then z1=z1-256 : rem handle negative Z number +6053 z1=z1*1 +6055 REM ?"x1="x1" y1="y1" z1="z1 +6060 x2=cos(t2/128*pi+r0)*r2 +6061 y2=sin(t2/128*pi+r0)*r2 + +6062 if z2>127 then z2=z2-256 : rem handle negative Z number +6063 z2=z2*1 +6065 REM ?"x2="x2" y2="y2" z2="z2 + +6099 t5=(90)/180*pi + +6100 z5=z1*cos(t5)+y1*sin(t5) +6110 y5=y1*cos(t5)-z1*sin(t5) +6120 z1=z5:y1=y5 + +6130 z5=z2*cos(t5)+y2*sin(t5) +6140 y5=y2*cos(t5)-z2*sin(t5) +6150 z2=z5:y2=y5 + +6299 t6=(90+90+90)/180*pi + +6300 z5=z1*cos(t6)+x1*sin(t6) +6310 x5=x1*cos(t6)-z1*sin(t6) +6320 z1=z5:x1=x5 + +6330 z5=z2*cos(t6)+x2*sin(t6) +6340 x5=x2*cos(t6)-z2*sin(t6) +6350 z2=z5:x2=x5 + + + +7000 d=250 : rem d=50 :zo=150 too much distortion d=100,zo=200 better +7010 zo=400:x9=139:y9=79:xo=139:yo=79: +7020 xs=x1 * (d/(zo+z1)) + x9 +7030 ys=y1 * (d/(zo+z1)) + y9 + +7040 xt=x2 * (d/(zo+z2)) + x9 +7050 yt=y2 * (d/(zo+z2)) + y9 + +7060 if xs>0 and xs<279 and ys>0 and ys<191 and xt>0 and xt<279 and yt>0 and yt<191 then hcolor=3:hplot xs,ys to xt,yt : +7060 x1=xs:y1=ys:x2=xt:y2=yt:co=3:GOSUB 5100 +7061 REM ? "xs="xs" ys="ys" xt=" xt" yt=" yt +7070 next : GOSUB 5500: if peek(49152)>128 and o<64 then o=o+1 : poke 49168,0 +7071 NEXT : next +7072 if peek(49152)>128 then return +7075 goto 6001 +7080 return + + + + + + +8000 rem print list of points +8010 no=p(0,0,0,0) : rem numobjects +8015 for o = 1 to no : ? "OBJECT "o +8020 for np = 1 to p(o,1,0,0) +8025 print "POINT "np" R="p(o,1,np,1)" THETA="p(o,1,np,2)" Z="p(o,1,np,3) +8030 next +8035 for nl = 1 to p(o,2,0,0) +8040 print "LINE "nl" "P(o,2,nl,1)" to "P(o,2,nl,2) +8045 next nl +8046 next o +8050 ? "END OBJECT" : ? +8060 return + + + +8990 rem P(objects,points/lines,index,data) 64=num of objects ,item 0=num in list +8991 rem 1,2 1=points 2=lines, +8992 rem index of data item 0=num in list +8993 rem 1,2,3=point,line data +8994 rem p(0,0,0,0)=num of objects +8999 rem -999 = end of points -998 = end of object -997 = end of all objects + +9000 if not pd then dim P(64,2,70,3) : pd=1 : rem pd=P defined already +9002 rem trace +9005 read n : ? n +9010 if n=-997 then return +9015 o=n : ? n,o:if o>p(0,0,0,0) then p(0,0,0,0)=o + +9016 read n : ? n : rem read point list +9020 if n=-998 then goto 9005 +9040 if n=-999 then goto 9060 +9045 rem add point + +9046 ? o:P(o,1,0,0)=P(o,1,0,0)+1: cp=P(o,1,0,0) +9047 P(o,1,cp,1)=n : read n +9048 P(o,1,cp,2)=n : read n +9049 P(o,1,cp,3)=n +9050 goto 9016 : rem loop and get next point + +9060 read n : rem read line list +9062 if n = -998 then goto 9005 +9066 P(o,2,0,0)=P(o,2,0,0)+1: cp=P(o,2,0,0) +9067 P(o,2,cp,1)=n : read n : ? cp +9068 P(o,2,cp,2)=n +9070 goto 9060 : rem get next line + + +10000 rem stellar 7 data is Radius, Theta and Z, followed by a list of vertices to +10001 rem to draw lines between + +10050 DATA 7, 85, 44, 216, 85, 84, 216, 111, 167, 216, 111, 217, 216, 125, 47, 231, 125, 81, 231, 125, 166, 231, 125, 218, 231, 103, 171, 251, 103, 213, 251, 76, 42, 237, 76, 86, 237, 94, 174, 251, 94, 210, 251, 67, 173, 30, 67, 211, 30, 13, 192, 11, 29, 64, 252, 21, 22, 4, 21, 106, 4, 124, 64, 11, 124, 64, 252, 125, 58, 4, 125, 70, 4, 90, 192, 251, 90, 192, 40, 90, 192, 60, 125, 192, 60, 125, 192, 40, -999 +10051 DATA 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 5, 8, 8, 9, 9, 4, 0, 4, 1, 5, 2, 6, 3, 7, 6, 8, 7, 9, 10, 11, 11, 12, 13, 10, 11, 14, 14, 15, 15, 10, 12, 14, 13, 15, 16, 19, 19, 17, 17, 18, 18, 16, 20, 23, 23, 21, 21, 22, 22, 20, 16, 20, 17, 21, 18, 22, 19, 23, 24, 26, 26, 27, 27, 28, 28, 25, 25, 27, 26, 28, -998 +10052 DATA 6, 85, 44, 216, 85, 84, 216, 111, 167, 216, 111, 217, 216, 125, 47, 231, 125, 81, 231, 125, 166, 231, 125, 218, 231, 103, 171, 251, 103, 213, 251, 76, 42, 237, 76, 86, 237, 94, 174, 251, 94, 210, 251, 66, 174, 30, 66, 210, 30, 25, 192, 18, 26, 33, 0, 26, 95, 0, 125, 64, 6, -999 +10053 DATA 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 5, 8, 8, 9, 9, 4, 0, 4, 1, 5, 2, 6, 3, 7, 6, 8, 7, 9, 10, 11, 11, 12, 13, 10, 11, 14, 14, 15, 15, 10, 12, 14, 13, 15, 16, 18, 17, 16, 16, 19, 17, 19, 18, 19, 17, 18, -998 + + + +10070 DATA 1, 126, 49, 196, 121, 55, 196, 126, 79, 196, 121, 73, 196, 123, 207, 196, 118, 201, 196, 123, 177, 196, 118, 183, 196, 106, 206, 206, 106, 178, 206, 43, 103, 206, 43, 25, 206, 75, 192, 5, 35, 192, 238, 65, 64, 234, 19, 215, 228, 19, 169, 228, -999 +10071 DATA 0, 1, 2, 3, 4, 5, 6, 7, 0, 4, 1, 5, 2, 6, 3, 7, 8, 9, 9, 10, 10, 11, 11, 8, 8, 12, 9, 12, 10, 12, 11, 12, 13, 14, 13, 15, 13, 16, 15, 16, 14, 15, 14, 16, -998 + + +10093 DATA 11, 80, 60, 244, 80, 60, 239, 80, 68, 244, 80, 68, 239, 47, 215, 239, 47, 169, 239, 25, 192, 254, 66, 6, 11, 76, 234, 11, 127, 243, 251, 66, 122, 11, 76, 150, 11, 127, 141, 251, -999 +10094 DATA 0, 1, 2, 3, 0, 2, 1, 3, 1, 4, 3, 5, 0, 6, 4, 5, 4, 6, 1, 7, 4, 8, 7, 8, 7, 9, 8, 9, 3, 10, 5, 11, 10, 11, 10, 12, 11, 12, 2, 6, 6, 5, -998 + + +10997 DATA 8, 120, 64, 251, 90, 192, 2, 90, 192, 234, 91, 197, 252, 91, 197, 240, 91, 187, 252, 91, 187, 240, 120, 192, 246, 60, 192, 50, 60, 192, 186, 85, 224, 20, 85, 224, 216, 85, 160, 20, 85, 160, 216, -999 +10998 DATA 1, 3, 3, 4, 4, 2, 2, 6, 6, 5, 5, 1, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 7, 1, 7, 2, 7, 3, 7, 4, 7, 5, 7, 6, 8, 10, 10, 11, 11, 9, 9, 13, 13, 12, 12, 8, 1, 8, 2, 9, 3, 10, 4, 11, 5, 12, 6, 13, -998 + +11010 DATA 2, 100, 38, 196, 100, 90, 196, 100, 166, 196, 100, 218, 196, 125, 38, 226, 125, 90, 226, 125, 166, 226, 125, 218, 226, 64, 27, 241, 64, 101, 241, 78, 164, 241, 78, 220, 241, 29, 22, 20, 29, 106, 20, 51, 171, 20, 51, 213, 20, 125, 64, 3, 22, 64, 10, 34, 44, 252, 34, 84, 252, -999 +11011 DATA 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 8, 9, 9, 10, 10, 11, 11, 8, 12, 13, 13, 14, 14, 15, 15, 12, 0, 4, 1, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 7, 11, 8, 12, 9, 13, 10, 14, 11, 15, 16, 17, 16, 18, 16, 19, 17, 18, 18, 19, 19, 17, -998 +11012 DATA 3, 70, 64, 226, 60, 128, 226, 80, 192, 226, 60, 0, 226, 50, 64, 211, 40, 128, 241, 40, 128, 211, 60, 192, 241, 60, 192, 211, 40, 0, 241, 40, 0, 211, 27, 80, 15, 27, 48, 15, 45, 60, 251, 49, 61, 246, 45, 68, 251, 49, 67, 246, 100, 62, 251, 100, 62, 246, 100, 66, 251, 100, 66, 246, -999 +11013 DATA 0, 1, 1, 2, 2, 3, 3, 0, 4, 6, 6, 8, 8, 10, 10, 4, 5, 7, 7, 9, 9, 5, 11, 12, 0, 4, 1, 6, 2, 8, 3, 10, 1, 5, 2, 7, 3, 9, 5, 11, 9, 12, 0, 11, 0, 12, 13, 17, 15, 19, 14, 18, 16, 20, 17, 19, 18, 20, 17, 18, 19, 20, 13, 15, 14, 16, 13, 14, 15, 16, -998 + +11014 DATA 4, 55, 97, 196, 55, 31, 196, 99, 209, 196, 99, 175, 196, 90, 91, 231, 90, 37, 231, 125, 211, 231, 125, 173, 231, 88, 175, 20, 88, 209, 20, 121, 68, 3, 121, 68, 247, 121, 60, 3, 121, 60, 247, 28, 177, 3, 19, 87, 247, 28, 207, 3, 19, 41, 247, 91, 199, 6, 91, 199, 80, -999 +11015 DATA 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 8, 9, 0, 4, 1, 5, 2, 6, 3, 7, 4, 8, 7, 8, 5, 9, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 10, 12, 11, 13, 14, 16, 15, 17, 10, 14, 12, 16, 11, 15, 13, 17, 18, 19, -998 + +11016 DATA 5, 92, 43, 196, 92, 85, 196, 101, 173, 196, 101, 211, 196, 125, 44, 226, 125, 84, 226, 125, 172, 226, 125, 212, 226, 47, 116, 244, 47, 12, 244, 47, 233, 25, 47, 151, 25, 89, 173, 25, 89, 211, 25, 17, 224, 12, 12, 7, 252, 17, 160, 12, 12, 121, 252, 125, 68, 12, 125, 68, 252, 125, 60, 12, 125, 60, 252, -999 +11017 DATA 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7, 5, 8, 8, 6, 8, 9, 9, 7, 9, 4, 9, 10, 8, 11, 6, 12, 7, 13, 10, 11, 11, 12, 12, 13, 13, 10, 14, 15, 16, 17, 18, 19, 20, 21, 14, 16, 16, 18, 18, 20, 20, 14, 15, 17, 17, 19, 19, 21, 21, 15, -998 + + +11022 DATA 9, 125, 64, 13, 125, 64, 253, 126, 58, 5, 126, 70, 5, 24, 192, 13, 24, 192, 253, 30, 218, 5, 30, 166, 5, 92, 221, 5, 125, 192, 5, 92, 163, 5, 70, 192, 67, 70, 192, 45, 70, 192, 221, 70, 192, 199, 122, 231, 5, 122, 153, 5, -999 +11023 DATA 0, 2, 2, 1, 1, 3, 3, 0, 4, 6, 6, 5, 5, 7, 7, 4, 0, 4, 2, 6, 3, 7, 1, 5, 6, 8, 8, 9, 9, 10, 10, 7, 12, 4, 12, 8, 12, 9, 12, 10, 13, 5, 13, 8, 13, 9, 13, 10, 11, 12, 13, 14, 15, 8, 16, 10, -998 + + +11030 DATA 10, 90, 0, 236, 90, 64, 236, 90, 128, 236, 90, 192, 236, 125, 0, 236, 125, 64, 236, 125, 128, 236, 125, 192, 236, 0, 0, 50, 0, 0, 30, 0, 0, 196, 0, 0, 176, -999 +11031 DATA 0, 1, 1, 2, 2, 3, 3, 0, 0, 4, 1, 5, 2, 6, 3, 7, 9, 0, 9, 1, 9, 2, 9, 3, 10, 0, 10, 1, 10, 2, 10, 3, 8, 9, 10, 11, -998 +11032 DATA 12, 125, 64, 241, 90, 192, 231, 106, 178, 10, 106, 206, 10, 127, 165, 10, 127, 219, 10, 20, 128, 0, 20, 0, 0, 80, 192, 35, -999 +11033 DATA 0, 1, 0, 2, 0, 3, 1, 3, 4, 5, 6, 7, 2, 8, 3, 8, 6, 8, 7, 8, 1, 2, 4, 6, 5, 7, -998 +11040 DATA 13, 106, 32, 60, 106, 32, 196, 106, 96, 60, 106, 96, 196, 106, 224, 60, 106, 224, 196, 106, 160, 60, 106, 160, 196, -999 +11041 DATA 0, 1, 2, 3, 4, 5, 6, 7, 0, 2, 4, 6, 1, 3, 5, 7, 0, 4, 2, 6, 1, 5, 3, 7, -998 +11038 DATA 14, 36, 32, 14, 36, 32, 242, 36, 96, 14, 36, 96, 242, 36, 160, 14, 36, 160, 242, 36, 224, 14, 36, 224, 242, 72, 32, 40, 72, 32, 216, 72, 96, 40, 72, 96, 216, 72, 160, 40, 72, 160, 216, 72, 224, 40, 72, 224, 216, 0, 0, 38, 0, 0, 218, -999 + 11039 DATA 0, 1, 2, 3, 4, 5, 6, 7, 0, 2, 2, 4, 4, 6, 6, 0, 1, 3, 3, 5, 5, 7, 7, 1, 0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15, 0, 16, 2, 16, 4, 16, 6, 16, 1, 17, 3, 17, 5, 17, 7, 17, -998 +11040 DATA 15, 125, 64, 4, 125, 64, 252, 65, 64, 4, 65, 64, 252, 30, 64, 4, 30, 64, 252, 30, 192, 4, 30, 192, 252, 65, 192, 4, 65, 192, 252, 125, 192, 4, 125, 192, 252, -999 + 11041 DATA 0, 2, 1, 3, 4, 6, 5, 7, 8, 10, 9, 11, -998 +11042 DATA 16, 125, 64, 4, 125, 64, 252, 65, 64, 4, 65, 64, 252, 30, 64, 4, 30, 64, 252, 30, 192, 4, 30, 192, 252, 65, 192, 4, 65, 192, 252, 125, 192, 4, 125, 192, 252, -999 + 11043 DATA 0, 2, 1, 3, 4, 6, 5, 7, 8, 10, 9, 11, -998 +11044 DATA 17, 125, 64, 4, 125, 64, 252, 65, 64, 4, 65, 64, 252, 30, 64, 4, 30, 64, 252, 30, 192, 4, 30, 192, 252, 65, 192, 4, 65, 192, 252, 125, 192, 4, 125, 192, 252, -999 + 11045 DATA 0, 2, 1, 3, 4, 6, 5, 7, 8, 10, 9, 11, -998 +11046 DATA 18, 36, 216, 15, 36, 216, 241, 36, 168, 15, 36, 168, 241, 60, 64, 0, -999 + 11047 DATA 0, 1, 2, 3, 0, 2, 1, 3, 0, 4, 1, 4, 2, 4, 3, 4, -998 +11048 DATA 19, 36, 216, 15, 36, 216, 241, 36, 168, 15, 36, 168, 241, 60, 64, 0, -999 + 11049 DATA 0, 1, 2, 3, 0, 2, 1, 3, 0, 4, 1, 4, 2, 4, 3, 4, -998 + +15020 DATA 23, 125, 32, 40, 125, 32, 196, 125, 96, 40, 125, 96, 196, 125, 160, 40, 125, 160, 196, 125, 224, 40, 125, 224, 196, 60, 32, 226, 60, 96, 226, 60, 160, 226, 60, 224, 226, 0, 0, 125, -999 + 15021 DATA 0, 2, 2, 4, 4, 6, 6, 0, 1, 3, 3, 5, 5, 7, 7, 1, 0, 8, 1, 8, 2, 9, 3, 9, 4, 10, 5, 10, 6, 11, 7, 11, 8, 9, 9, 10, 10, 11, 11, 8, 0, 12, 2, 12, 4, 12, 6, 12, -998 + + +20014 DATA 20, 45, 192, 30, 45, 192, 226, 64, 224, 0, 64, 160, 0, 60, 64, 0, -999 + 20015 DATA 0, 2, 2, 1, 1, 3, 3, 0, 4, 0, 4, 1, 4, 2, 4, 3, -998 +20016 DATA 21, 36, 216, 15, 36, 216, 241, 36, 168, 15, 36, 168, 241, 60, 64, 0, -999 + 20017 DATA 0, 1, 2, 3, 0, 2, 1, 3, 0, 4, 1, 4, 2, 4, 3, 4, -998 +20018 DATA 22, 106, 32, 90, 106, 32, 196, 106, 96, 90, 106, 96, 196, 106, 224, 90, 106, 224, 196, 106, 160, 90, 106, 160, 196, -999 + 20019 DATA 0, 1, 2, 3, 4, 5, 6, 7, 0, 2, 4, 6, 1, 3, 5, 7, 0, 4, 2, 6, 1, 5, 3, 7, -998 +20020 DATA 24, 0, 0, 120, 0, 0, 156, 25, 32, 30, 25, 32, 246, 25, 96, 30, 25, 96, 246, 25, 160, 30, 25, 160, 246, 25, 224, 30, 25, 224, 246, 113, 32, 10, 113, 96, 10, 113, 160, 10, 113, 224, 10, -999 + 20021 DATA 0, 2, 0, 4, 0, 6, 0, 8, 1, 3, 1, 5, 1, 7, 1, 9, 2, 4, 4, 6, 6, 8, 2, 8, 3, 5, 5, 7, 7, 9, 9, 3, 10, 11, 11, 12, 12, 13, 13, 10, 2, 10, 4, 11, 6, 12, 8, 13, 3, 10, 5, 11, 7, 12, 9, 13, -998 +20022 DATA 31, 8, 21, 247, 8, 21, 235, 8, 85, 247, 8, 85, 235, 8, 149, 247, 8, 149, 235, 8, 213, 247, 8, 213, 235, 12, 53, 241, 12, 117, 241, 12, 181, 241, 12, 245, 241, 0, 21, 251, 0, 21, 231, -999 + 20023 DATA 0, 5, 1, 4, 2, 7, 3, 6, 8, 10, 9, 11, 12, 13, -998 +20024 DATA 32, 20, 21, 1, 20, 21, 225, 20, 85, 1, 20, 85, 225, 20, 149, 1, 20, 149, 225, 20, 213, 1, 20, 213, 225, 28, 53, 241, 28, 117, 241, 28, 181, 241, 28, 245, 241, 0, 21, 7, 0, 21, 219, 8, 21, 247, 8, 21, 235, 8, 85, 247, 8, 85, 235, 8, 149, 247, 8, 149, 235, 8, 213, 247, 8, 213, 235, 12, 53, 241, 12, 117, 241, 12, 181, 241, 12, 245, 241, 0, 21, 251, 0, 21, 231, -999 + 20025 DATA 0, 14, 1, 15, 2, 16, 3, 17, 4, 18, 5, 19, 6, 20, 7, 21, 8, 22, 9, 23, 10, 24, 11, 25, 12, 26, 13, 27, -998 +20026 DATA 33, 31, 21, 10, 31, 21, 216, 31, 85, 10, 31, 85, 216, 31, 149, 10, 31, 149, 216, 31, 213, 10, 31, 213, 216, 44, 53, 241, 44, 117, 241, 44, 181, 241, 44, 245, 241, 0, 21, 20, 0, 21, 206, 20, 21, 1, 20, 21, 225, 20, 85, 1, 20, 85, 225, 20, 149, 1, 20, 149, 225, 20, 213, 1, 20, 213, 225, 28, 53, 241, 28, 117, 241, 28, 181, 241, 28, 245, 241, 0, 21, 7, 0, 21, 219, -999 + 20027 DATA 0, 14, 1, 15, 2, 16, 3, 17, 4, 18, 5, 19, 6, 20, 7, 21, 8, 22, 9, 23, 10, 24, 11, 25, 12, 26, 13, 27, -998 +20028 DATA 34, 42, 21, 19, 42, 21, 207, 42, 85, 19, 42, 85, 207, 42, 149, 19, 42, 149, 207, 42, 213, 19, 42, 213, 207, 60, 53, 241, 60, 117, 241, 60, 181, 241, 60, 245, 241, 0, 21, 33, 0, 21, 193, 31, 21, 10, 31, 21, 216, 31, 85, 10, 31, 85, 216, 31, 149, 10, 31, 149, 216, 31, 213, 10, 31, 213, 216, 44, 53, 241, 44, 117, 241, 44, 181, 241, 44, 245, 241, 0, 21, 20, 0, 21, 206, -999 + 20029 DATA 0, 14, 1, 15, 2, 16, 3, 17, 4, 18, 5, 19, 6, 20, 7, 21, 8, 22, 9, 23, 10, 24, 11, 25, 12, 26, 13, 27, -998 +20030 DATA 35, 54, 21, 28, 54, 21, 198, 54, 85, 28, 54, 85, 198, 54, 149, 28, 54, 149, 198, 54, 213, 28, 54, 213, 198, 76, 53, 241, 76, 117, 241, 76, 181, 241, 76, 245, 241, 0, 21, 46, 0, 21, 180, 42, 21, 19, 42, 21, 207, 42, 85, 19, 42, 85, 207, 42, 149, 19, 42, 149, 207, 42, 213, 19, 42, 213, 207, 60, 53, 241, 60, 117, 241, 60, 181, 241, 60, 245, 241, 0, 21, 33, 0, 21, 193, -999 + 20031 DATA 0, 14, 1, 15, 2, 16, 3, 17, 4, 18, 5, 19, 6, 20, 7, 21, 8, 22, 9, 23, 10, 24, 11, 25, 12, 26, 13, 27, -998 +20032 DATA 36, 65, 21, 37, 65, 21, 189, 65, 85, 37, 65, 85, 189, 65, 149, 37, 65, 149, 189, 65, 213, 37, 65, 213, 189, 92, 53, 241, 92, 117, 241, 92, 181, 241, 92, 245, 241, 0, 21, 59, 0, 21, 167, 54, 21, 28, 54, 21, 198, 54, 85, 28, 54, 85, 198, 54, 149, 28, 54, 149, 198, 54, 213, 28, 54, 213, 198, 76, 53, 241, 76, 117, 241, 76, 181, 241, 76, 245, 241, 0, 21, 46, 0, 21, 180, -999 + 20033 DATA 0, 14, 1, 15, 2, 16, 3, 17, 4, 18, 5, 19, 6, 20, 7, 21, 8, 22, 9, 23, 10, 24, 11, 25, 12, 26, 13, 27, -998 +20034 DATA 37, 76, 21, 46, 76, 21, 180, 76, 85, 46, 76, 85, 180, 76, 149, 46, 76, 149, 180, 76, 213, 46, 76, 213, 180, 108, 53, 241, 108, 117, 241, 108, 181, 241, 108, 245, 241, 0, 21, 71, 0, 21, 155, 65, 21, 37, 65, 21, 189, 65, 85, 37, 65, 85, 189, 65, 149, 37, 65, 149, 189, 65, 213, 37, 65, 213, 189, 92, 53, 241, 92, 117, 241, 92, 181, 241, 92, 245, 241, 0, 21, 59, 0, 21, 167, -999 + 20035 DATA 0, 14, 1, 15, 2, 16, 3, 17, 4, 18, 5, 19, 6, 20, 7, 21, 8, 22, 9, 23, 10, 24, 11, 25, 12, 26, 13, 27, -998 +20036 DATA 38, 88, 21, 55, 88, 21, 171, 88, 85, 55, 88, 85, 171, 88, 149, 55, 88, 149, 171, 88, 213, 55, 88, 213, 171, 124, 53, 241, 124, 117, 241, 124, 181, 241, 124, 245, 241, 0, 21, 84, 0, 21, 142, 76, 21, 46, 76, 21, 180, 76, 85, 46, 76, 85, 180, 76, 149, 46, 76, 149, 180, 76, 213, 46, 76, 213, 180, 108, 53, 241, 108, 117, 241, 108, 181, 241, 108, 245, 241, 0, 21, 71, 0, 21, 155, -999 + 20037 DATA 0, 14, 1, 15, 2, 16, 3, 17, 4, 18, 5, 19, 6, 20, 7, 21, 8, 22, 9, 23, 10, 24, 11, 25, 12, 26, 13, 27, -998 +20038 DATA 41, 48, 170, 12, 48, 170, 244, 48, 214, 12, 48, 214, 244, 48, 192, 24, 48, 192, 232, 0, 128, 0, -999 + 20039 DATA 0, 6, 1, 6, 2, 6, 3, 6, 4, 6, 5, 6, -998 +20040 DATA 42, 59, 170, 15, 59, 170, 241, 59, 214, 15, 59, 214, 241, 59, 192, 30, 59, 192, 226, 11, 170, 2, 11, 170, 254, 11, 214, 2, 11, 214, 254, 11, 192, 5, 11, 192, 251, -999 + 20041 DATA 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, -998 +20042 DATA 43, 70, 170, 17, 70, 170, 239, 70, 214, 17, 70, 214, 239, 70, 192, 35, 70, 192, 221, 22, 170, 5, 22, 170, 251, 22, 214, 5, 22, 214, 251, 22, 192, 11, 22, 192, 245, -999 + 20043 DATA 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, -998 +20044 DATA 44, 81, 170, 20, 81, 170, 236, 81, 214, 20, 81, 214, 236, 81, 192, 40, 81, 192, 216, 33, 170, 8, 33, 170, 248, 33, 214, 8, 33, 214, 248, 33, 192, 16, 33, 192, 240, -999 + 20045 DATA 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, -998 +20046 DATA 45, 92, 170, 23, 92, 170, 233, 92, 214, 23, 92, 214, 233, 92, 192, 46, 92, 192, 210, 44, 170, 11, 44, 170, 245, 44, 214, 11, 44, 214, 245, 44, 192, 22, 44, 192, 234, -999 + 20047 DATA 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, -998 +20048 DATA 46, 103, 170, 25, 103, 170, 231, 103, 214, 25, 103, 214, 231, 103, 192, 51, 103, 192, 205, 55, 170, 13, 55, 170, 243, 55, 214, 13, 55, 214, 243, 55, 192, 27, 55, 192, 229, -999 + 20049 DATA 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, -998 +20050 DATA 47, 114, 170, 28, 114, 170, 228, 114, 214, 28, 114, 214, 228, 114, 192, 57, 114, 192, 199, 66, 170, 16, 66, 170, 240, 66, 214, 16, 66, 214, 240, 66, 192, 33, 66, 192, 223, -999 + 20051 DATA 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, -998 +20052 DATA 48, 125, 170, 31, 125, 170, 225, 125, 214, 31, 125, 214, 225, 125, 192, 62, 125, 192, 194, 77, 170, 19, 77, 170, 237, 77, 214, 19, 77, 214, 237, 77, 192, 38, 77, 192, 218, -999 + 20053 DATA 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, -998 + + + +30090 data -997