diff --git a/programs/cmm/browser/HTMLv.c b/programs/cmm/browser/HTMLv.c new file mode 100644 index 000000000..cbc539bba --- /dev/null +++ b/programs/cmm/browser/HTMLv.c @@ -0,0 +1,261 @@ +//HTML Viewer in C-- +//Copyright 2007-2012 by Veliant & Leency +//Asper, lev, Lrz, Barsuk, Nable. +//home icon - rachel fu, GPL licence + +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\figures.h" +#include "..\lib\encoding.h" +#include "..\lib\file_system.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +// .obj +#include "..\lib\libio_lib.h" +#include "..\lib\libimg_lib.h" +#include "..\lib\edit_box_lib.h" +#include "..\lib\scroll_lib.h" +#include "..\lib\truetype.h" +// +#include "img\toolbar_icons.c" +#include "img\URLgoto.txt"; + + +#define URL param +int use_truetype = 0; + +char editURL[sizeof(URL)], + page_links[12000], + header[300]; + +struct lines{ + int visible, all, first, column_max; +}; + +int mouse_dd; +edit_box edit1= {250,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0,sizeof(editURL),#editURL,#mouse_dd,2,19,19}; +scroll_bar scroll1 = { 18,200,398, 44,18,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; //details in scroll_lib.h-- + + +proc_info Form; +#define WIN_W 640 +#define WIN_H 480 + + +dword stak[100]; // +mouse m; + +#include "TWB.h" +#include "include\menu_rmb.h" + + +void tre() +{ + char *font_picture; + char text[20]; + int width=600; + int height=20; +// char palette[256*4]; + int x; + + text_out stdcall ("hello world\0",#fontlol, 17, 0x0, 10, 10); + text_out stdcall ("heyeyey!\0",#fontlol, 27, 0x0, 10, 30); + text_out stdcall ("alarm!\0", #fontlol, 47, 0x00FF0000, 10, 70); + /* + strcpy(#text, "hello world\0"); + + debug("get width\n"); + get_width stdcall (#text, #fontinfo, height); + width=EAX; + for (x=0;x<20;x++) { + init_font(#fontinfo); + debug("yaya\n"); + font_picture=mem_Alloc(width*height); + text[1]=30+x; + truetype stdcall (#text, #fontinfo, font_picture, width, height); + + debug("blyad'!\n"); + + + + PutPaletteImage(font_picture,width,height,0,20*x,8,#palette); + mem_Free(font_picture); }*/ +} + +char fontlol[64]; + +void main() +{ + int btn; + byte key; + int half_scroll_size; + int scroll_used=0; + + mem_Init(); + if (load_dll2(libio, #libio_init,1)!=0) debug(" libio"w); + if (load_dll2(libimg, #libimg_init,1)!=0) debug(" libimg"w); + if (load_dll2(boxlib, #edit_box_draw,0)!=0) {RunProgram("@notify", "System Error: library doesn't exists /rd/1/lib/box_lib.obj"); ExitProcess();} + load_dll2(#abox_lib, #boxlib_init,0); + if (load_dll2(libtruetype, #truetype,0)!=0) {debug(" TrueType"w); use_truetype = 2; } + else init_font(#fontlol); + + if (!URL) strcpy(#URL, "/sys/home.htm"); + strcpy(#editURL, #URL); + + Form.width=WIN_W; + Form.height=WIN_H; + + SetElementSizes(); + + WB1.OpenPage(); + + SetEventMask(0x27); + loop() + { + WaitEventTimeout(2); + switch(EAX & 0xFF) + { + CASE evMouse: + /*scrollbar_v_mouse (#scroll1); // , " " + if (lines.first <> scroll1.position) + { + lines.first = scroll1.position; + WB1.ParseHTML(buf, filesize); + //break; + };*/ + + btn=GetProcessSlot(Form.ID); + IF (btn<>GetActiveProcess()) break; // + + edit_box_mouse stdcall (#edit1); + + m.get(); + + if (m.pkm) && (m.y>WB1.top) && (m.y3) lines.first-=2; ELSE lines.first=1; + WB1.Scan(ID1); + break; + } + IF (m.vert==1) + { + IF(lines.visible+lines.first+3>=lines.all) WB1.Scan(181); + ELSE { + lines.first+=2; + WB1.Scan(ID2); + } + break; + } + + if (!m.lkm) scroll_used=0; + if (m.x>=WB1.width-14) && (m.x<=WB1.width+6) && (m.y>WB1.top+16) + && (m.ylines.visible) && (m.lkm) + scroll_used=1; + + if (scroll_used) + { + half_scroll_size = WB1.height - 16 * lines.visible / lines.all - 3 /2; + IF (half_scroll_size+WB1.top>m.y) || (m.y<0) || (m.y>4000) m.y=half_scroll_size+WB1.top; // + btn=lines.first; // + lines.first = m.y -half_scroll_size -WB1.top * lines.all / WB1.height; + if (lines.visible+lines.first>lines.all) lines.first=lines.all-lines.visible; + if (btn<>lines.first) WB1.ParseHTML(buf); // + } + + break; + case evButton: + btn=GetButtonID(); + IF (btn==1) + { + KillProcess(downloader_id); + ExitProcess(); + } + ELSE + { + WB1.Scan(btn); + } + break; + case evKey: + key = GetKey(); + + if (edit1.flags == 66) || (edit1.flags == 98) SWITCH(key) // + { CASE 52: CASE 53: CASE 54: goto _EDIT_MARK; } + + WB1.Scan(key); + + _EDIT_MARK: + IF (key<>0x0d) && (key<>183) && (key<>184) && (key<>173) {EAX=key<<8; edit_box_key stdcall(#edit1);} // + break; + case evReDraw: + Draw_Window(); + break; + default: + if (downloader_id<>0) + { + if (GetProcessSlot(downloader_id)<>0) break; + downloader_id=0; + lines.first = lines.all = 0; + WB1.ReadHtml(_WIN); + Draw_Window(); + } + } + } +} + +void SetElementSizes() +{ + edit1.width=Form.width-266; + WB1.top=44; + WB1.width=Form.width-13; + WB1.height=onTop(43,5); + lines.column_max = WB1.width - 30 / 6; + lines.visible = WB1.height - 3 / 10 - 2; +} + + +void Draw_Window() +{ + int j; + DefineAndDrawWindow(215,100,WIN_W,WIN_H,0x73,0x00E4DFE1,0,0); + + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) // , + { + DrawTitle(#header); + return; + } + if (Form.height<120) MoveSize(OLD,OLD,OLD,120); + if (Form.width<280) MoveSize(OLD,OLD,280,OLD); + + PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); + if (GetProcessSlot(downloader_id)<>0) PutImage(#stop_btn,24,24,88,10); + + DrawBar(200,0,onLeft(200,9),43,0xE4DFE1); // + DrawBar(0,42,onLeft(5,4),1,0xE2DBDC); // + DrawBar(0,43,onLeft(5,4),1,0xD2CED0); // + for (j=0; j<5; j++) DefineButton(j*37+11, 7, 29, 29, 300+j+BT_HIDE, 0xE4DFE1); + PutImage(#URLgoto,40,19,onLeft(57,0),14); + DefineButton(onLeft(37,0),15, 18, 16, GOTOURL+BT_HIDE, 0xE4DFE1); + DefineButton(onLeft(56,0),15, 17, 16, SEARCHWEB+BT_HIDE, 0xE4DFE1); + DrawRectangle(205,14,onLeft(58,205),18,0x94AECE); // + DrawRectangle(206,15,onLeft(59,205),16,0xE4ECF3); + + SetElementSizes(); + WB1.ShowPage(); + //tre(); + DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1); + DefineButton(scroll1.start_x+1, scroll1.start_y+scroll1.size_y-18, 16, 16, ID2+BT_HIDE, 0xE4DFE1); +} + +int onLeft(dword right,left) {return Form.width-right-left;} +int onTop(dword down,up) {return Form.height-GetSkinHeight()-down-up;} + + +stop: diff --git a/programs/cmm/browser/History.txt b/programs/cmm/browser/History.txt new file mode 100644 index 000000000..9ff316714 --- /dev/null +++ b/programs/cmm/browser/History.txt @@ -0,0 +1,418 @@ +20.11.12 - 0.98 +- . + +18.11.12 - 0.97.7 +- , + ; +- ; +- ; +- SoUrcerer - + TryeType. + + + +10.11.12 - 0.97.6 +- lib_img; +- box_lib ; +- + TrueType ; +- . + +05.11.12 - 0.97.5 + TrueType . + +16.07.12 - 0.97 +- ; +- ; +- #abc, ; +- ; +- 100% + ( hidnplayer). + +14.07.12 - 0.96 +- +- +- +- - + +22.06.12 - 0.95 + +22.06.12 - 0.94c +- ; +- ; +- . + +19.06.12 - 0.94 +- . + +14.06.12 -- v0.93 +- ; +- . + +13.06.12 -- v0.92 +- ; +- ; +- 2.0 downloader'; +- : 1. + +04.06.12 -- v0.90 +- box_lib ( lev); +- ; +- downloader', + 99% 50% ; +- ; +- . + + +27.05.12 -- v0.83 +- ""; +- ; +- xml- fb2. + + +13.04.12 -- v0.80 +- "bgcolor=" "text="; +- "../"; +- jpg, gif, png kiv. +- ; +- 2 , BackSpace; +- , #; +- "". + + + +29.02.12 -- v0.76 -- 11.3 +- ""; +- 2 ; +- ; +- - ; +- . + + +27.02.12 -- v0.75 -- 11.? +- HTMLv, downloader ; +- downloader'a; +- + "", "Loading...", ; +- . + + +24.02.12 -- v0.71 -- 11.? +- . + + +26.09.11 -- v0.70 -- 11.4 +- ; +- title; +- iso-8859-1. + +22.09.11 -- v0.70 -- 11.3 +- (&), + ; +- CapsLock ( Mario); +- - ( Mario). + +13.09.11 -- v0.69 -- 11.2 +- ; +- ; +- . + +05.09.11 -- v0.68 -- 11.2 +- color - + ; +- memory.h-- , + mem.h--, Asper'; +- ; +- , . + +20.08.11 -- v0.67 -- 11.1 +- ; +-
 ( Nazarus  Jaeger);
+-        ( 
+     Gluk'      ,   );
+-      ;
+-          ;
+-  " "   Ctrl+N, Ctrl+T    ;
+-     ;
+-   "UTF8"   (  Joaquin).
+
+
+
+20.06.11 -- v0.63 -- 11.32 
+lev
+-  
+-   
+
+08.06.10 -- v0.62a -- 9.68 
+-         4  6 ( Nasarus
+     )
+-  DOS-  (  Nasarus'a)
+
+
+14.02.10 -- v0.62 -- 9.42 
+-      nigma.ru,     ,
+      Ctrl+Enter;
+-     ;
+-      XHTML-  br/;
+-  :    ( f3)   ;
+-    , ,  ,   ;
+-     ' (    kolibrios.org);
+-       ;
+-        .
+
+
+31.01.10 -- v0.60 -- 8.94 
+-  utf-8  Asper'   ,    
+    0.7.7.0.     Asper'  !
+-       /fd  /cd ( Nasarus  IgorA,
+       );
+-    mht-,  ,   
+     7 (   IgorA);
+-   : ,     ;
+-      ;
+-   URL  4096 .
+
+
+08.11.09 -- v0.57 -- 8.69 
+- Asper   ,   HTMLv   ;
+-  .mht,     ( Albom'a),   (
+     .mht  7)   - ,   
+   hex-;
+-    " "   ;
+-     .
+
+
+03.11.09 -- v0.53 -- 7.87 
+-     box_lib.obj;
+-     ,   # ;
+-    ,       ;
+-     ;
+-      ;
+-   ,   = ;
+-   ,       ;
+-    ,  "Loading...";
+-   .
+
+
+05.06.09 -- v0.5 -- 7.91 
+- barsuk       downloader  
+      :)
+-     ,    -
+             <-- -->;
+-    downloader'y:  /  ;
+-    ;
+-  .
+
+
+28.01.08 -- v0.48.5 -- 6.95 
+-      ,  , 
+     "";
+-   ,    , : href=1.htm ;
+-          ;
+-  ;
+-     ;
+-  BackSpace   ;
+-       ;
+-           #.
+
+
+28.01.08 -- v0.48.2 -- 6.95 
+-         - ;
+-  ""    ;
+-       ;
+-   KOI8;
+
+
+22.01.08 -- v0.48.1 -- 6,88 
+21.12.08 -- v0.48.0
+-   ;
+-     ;
+-   ,   ;
+-     
;
+-     ;
+
+
+07.12.08 -- v0.47 -- 7,50 
+-   "",     win1251;
+-    ;
+-     ;
+-    ( Nable  Asper  );
+-  , -     ;
+-     font, -     ;
+-     
 ( diamond);
+-     ;
+-    ,    ;
+
+
+02.12.08 -- v0.45 -- 6,79 
+-   KOI8-R(U) -   Ctrl+R.  Velianty
+     ;
+-  - win ,    ,  А  ..
+   ( ,  Albom');
+-     -     
+       ;
+-  DOS'a (cp866)   Ctrl+D;
+-  ;
+-    "";
+-       ,   
+       .
+
+
+20.10.08 -- v0.40 -- 7,36 
+-        ;
+-          
+-   ;
+-   
  • ; +- , "#"; +- - ; +- ; +- "": (), (r), + ; +- ; +- :) + + +19.10.08 -- v0.38.1 -- 6,85 +- + 7-10% ( ); +- ".txt" ; + +18.10.08 -- v0.38 -- 6,88 +- ; +- , , . ; +- : + . +- , ; +- (hr). + +17.10.08 -- v0.37 -- 6,82 +-   ( 5 ); +- , , , ; +- F3 - ; +- "/". + : +- ; +- , ; +- - ; +- , BackSpace; + diamond'y . + + +16.10.08 -- v0.35.3 -- 6,74 +- , , fixed; +- ; +- Albom'a, ; + ; +- , . + + +15.10.08 -- v0.35 -- 6,75 +- - - + ( Albom', , ); +- 3 ; +- PgUp/PgDn; +- , ; +- ; +- ; +- ; +- :) + + +03.10.08 -- v0.30.2 -- 6,56 +- ; +- ; +- ; +- , . + + +02.08.08 -- v0.30.1 -- 6,48 +- ; +- , ; +- <style>; +- . + + +29.07.08 -- v0.30 -- 6,46 +- BackSpace, , ; +- <script>; +- ; +- PgUp\PgDown, End; +- . + + +28.07.08 -- v0.27 -- 6,21 +- , 10 - Veliant'y; +- <Lrz>, (box_lib); +- (by Veliant); +- win -> dos, ; +- , ; +- , ; +- . + + +23.07.08 -- v0.24 -- 6,05 +- ; +- , ; +- "hr" - ; +- . + + +07.07.08 -- v0.23 alpha -- 5.68 +- ""; +- :) +- PageUp, PageDown. + + +05.07.08 -- v0.22 -- 5.68 +- , - ""; +- - ; +- ( ). + + +04.07.08 -- v0.21 -- 5.58 +- ; +- "". + + +29.06.08 -- v0.2 -- 5.48 +- , , + - , ; +- , ; +- ; +- 1 ; +- - ; +- ; +- , . + + +26.06.08 -- v0.1.3 -- 5.59 +- ; +- ; +- - ; +- ul, blockquote, q, ; +- / . + + +24.06.08 -- v0.1.1 -- 5.37 +- <li>; +- ".htm", + ; +- ; +- "strike", "s"; +- ; +- , - . + + +22.06.08 -- v0.1 -- 5.11 +- : b, strong, i, u, s, br, pre, title, + li, p. ; +- ; +- (: < b >); +- ; +- (EditBox) <Lrz>, ; +- </html>. + + +20.02.08 -- v0.000001 -- 7.32 + . :) + Veliant'a , . diff --git a/programs/cmm/browser/TWB.h b/programs/cmm/browser/TWB.h new file mode 100644 index 000000000..d4623b0ab --- /dev/null +++ b/programs/cmm/browser/TWB.h @@ -0,0 +1,884 @@ + +int downloader_id; + +dword + buf, + filesize, + blink; + +char download_path[]="/rd/1/.download"; +char search_path[]="http://nigma.ru/index.php?s="; +char version[]=" Text-based Browser 0.98"; + + +struct TWebBrowser { + int left, top, width, height; + void Scan(int); + void GetNewUrl(); + void OpenPage(); + void ReadHtml(byte); + void ShowPage(); + void ParseHTML(dword); + void WhatTextStyle(int left1, top1, width1); + void DrawPage(); + void DrawScroller(); +}; + +TWebBrowser WB1; + +byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, + link, ignor_text, li_tab, first_line_drawed, cur_encoding; + + +dword text_colors[300], + text_color_index, + link_color, + bg_color; + +int stroka, + stolbec, + tab_len; + +char anchor[256]; +int anchor_line_num; + +char line[500], + tag[100], + tagparam[10000], + parametr[1200], + options[4096]; + +#include "include\history.h" +#include "include\colors.h" +#include "include\unicode_tags.h" +#include "include\some_code.h" +#include "include\parce_tag.h" + + +void TWebBrowser::Scan(int id) +{ + if (id >= 400) + { + GetURLfromPageLinks(id); + + //#1 + if (URL[0] == '#') + { + strcpy(#anchor, #URL+strrchr(#URL, '#')); + + strcpy(#URL, BrowserHistory.CurrentUrl()); + + lines.first=lines.all-lines.visible; + ShowPage(); + return; + } + //liner.ru#1 + if (strrchr(#URL, '#')<>-1) + { + strcpy(#anchor, #URL+strrchr(#URL, '#')); + URL[strrchr(#URL, '#')-1] = 0x00; // + } + + GetNewUrl(); + + if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg")) + { + //if (strstr(#URL,"http:")) + RunProgram("/sys/media/kiv", #URL); + strcpy(#editURL, BrowserHistory.CurrentUrl()); + strcpy(#URL, BrowserHistory.CurrentUrl()); + return; + } + if (!strcmpn(#URL,"mailto:", 7)) + { + RunProgram("@notify", #URL); + strcpy(#editURL, BrowserHistory.CurrentUrl()); + strcpy(#URL, BrowserHistory.CurrentUrl()); + return; + } + + OpenPage(); + return; + } + + IF(lines.all < lines.visible) SWITCH(id) // + { CASE 183: CASE 184: CASE 180: CASE 181: return; } + + switch (id) + { + case 011: //Ctrk+K + ReadHtml(_KOI); + break; + case 021: //Ctrl+U + ReadHtml(_UTF); + break; + case 004: //Ctrl+D + ReadHtml(_DOS); + break; + case 001: + if (!pre_text) pre_text=2; + else pre_text=0; + break; + case 002: //free img cache + FreeImgCache(); + break; + case 005: //truetype + if (use_truetype == 2) + { + RunProgram("@notify", "Library does not exists /rd/1/lib/truetype.obj"w); + return; + } + if (use_truetype == 1) use_truetype=0; else use_truetype=1; + break; + case BACK: + if (!BrowserHistory.GoBack()) return; + OpenPage(); + return; + case FORWARD: + if (!BrowserHistory.GoForward()) return; + OpenPage(); + return; + case 052: // F3 + if (strcmp(get_URL_part(5),"http:")<>0) RunProgram("/rd/1/tinypad", #URL); else RunProgram("/rd/1/tinypad", #download_path); + return; + case 054: //F5 + IF(edit1.flags == 66) break; + case REFRESH: + if (GetProcessSlot(downloader_id)<>0) + { + KillProcess(downloader_id); + Pause(20); + Draw_Window(); + return; + } + anchor_line_num=lines.first; // : + anchor[0]='|'; + OpenPage(); + return; + case 014: //Ctrl+N + case 020: //Ctrl+T + case NEWTAB: + MoveSize(190,80,OLD,OLD); + RunProgram(#program_path, #URL); + return; + + case HOME: + strcpy(#editURL, "http://kolibri-os.narod.ru"); + case GOTOURL: + case 0x0D: //enter + strcpy(#URL, #editURL); + OpenPage(); + return; + case 173: //ctrl+enter + case SEARCHWEB: + strcpy(#URL, #search_path); + strcat(#URL, #editURL); + OpenPage(); + return; + + case ID1: // + IF(lines.first <= 0) return; + lines.first--; + break; + case ID2: // + IF(lines.visible + lines.first >= lines.all) return; + lines.first++; + break; + case 183: //PgDown + IF(lines.first == lines.all - lines.visible) return; + lines.first += lines.visible + 2; + IF(lines.visible + lines.first > lines.all) lines.first = lines.all - lines.visible; + break; + case 184: //PgUp + IF(lines.first == 0) return; + lines.first -= lines.visible - 2; + IF(lines.first < 0) lines.first = 0; + break; + case 180: //home + IF(lines.first == 0) return; + lines.first = 0; + break; + case 181: //end + IF (lines.first == lines.all - lines.visible) return; + lines.first = lines.all - lines.visible; + break; + default: + return; + } + ParseHTML(buf); +} + + +char *ABSOLUTE_LINKS[]={ "http:", "mailto:", "ftp:", "/sys/", "/rd/", "/fd/", "/bd/", "/hd/", "/cd/", "/tmp/", 0}; + +//dword TWebBrowser::GetNewUrl(dword CUR_URL, NEW_URL){ +void TWebBrowser::GetNewUrl(){ + int i, len; + + for (i=0; ABSOLUTE_LINKS[i]; i++) + { + len=strlen(ABSOLUTE_LINKS[i]); + if (!strcmpn(#URL, ABSOLUTE_LINKS[i], len)) return; + } + + IF (!strcmpn(#URL,"./", 2)) strcpy(#URL, #URL+2); // :) + if (URL[0] == '/') strcpy(#URL, #URL+1); + + strcpy(#editURL, BrowserHistory.CurrentUrl()); // + + _CUT_ST_LEVEL_MARK: + + if (editURL[strrchr(#editURL, '/')-2]<>'/') // http:// + { + editURL[strrchr(#editURL, '/')] = 0x00; // / + } + + IF (!strcmp(get_URL_part(3),"../")) // + { + strcpy(#URL,#URL+3); + editURL[strrchr(#editURL, '/')-1] = 0x00; // / + goto _CUT_ST_LEVEL_MARK; + } + + if (editURL[strlen(#editURL)-1]<>'/') strcat(#editURL, "/"); + + strcat(#editURL, #URL); // + strcpy(#URL, #editURL); +} + + + +void TWebBrowser::ReadHtml(byte encoding) +{ + if (!strcmp(get_URL_part(5),"http:"))) + file_size stdcall (#download_path); + else + file_size stdcall (#URL); + + filesize = EBX; + if (!filesize) return; + + mem_Free(buf); + buf = mem_Alloc(filesize); + if (!strcmp(get_URL_part(5),"http:"))) + ReadFile(0, filesize, buf, #download_path); + else + ReadFile(0, filesize, buf, #URL); + + cur_encoding = encoding; + if (encoding==_WIN) wintodos(buf); + if (encoding==_UTF) utf8rutodos(buf); + if (encoding==_KOI) koitodos(buf); +} + + +void TWebBrowser::OpenPage() +{ + if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); + KillProcess(downloader_id); + strcpy(#editURL, #URL); + BrowserHistory.AddUrl(); + strcpy(#header, #version); + pre_text =0; + if (!strcmp(get_URL_part(5),"http:"))) + { + KillProcess(downloader_id); // + DeleteFile(#download_path); + IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=NULL; + downloader_id = RunProgram("/sys/network/downloader", #URL); + //Browser Hack v2.0 + Pause(60); + if (GetProcessSlot(downloader_id)<>0) + { + debug("Browser Hack v2.0: Killing downloader and trying to run it one more!"); + KillProcess(downloader_id); // + downloader_id = RunProgram("/sys/network/downloader", #URL); + } + // + IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable."); + Draw_Window(); + return; + } + lines.first = lines.all =0; + ReadHtml(_WIN); + WB1.ShowPage(); +} + + +void TWebBrowser::ShowPage() +{ + edit1.size = edit1.pos = strlen(#editURL); + edit1.offset=0; + edit_box_draw stdcall(#edit1); // + + if (!filesize) + { + DrawBar(left, top, width+4, height, 0xFFFFFF); // + if (GetProcessSlot(downloader_id)<>0) WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0); + else + { + WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0); + if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0); + } + //return; + } + else + ParseHTML(buf); + + if (!header) strcpy(#header, #version); + if (!strcmp(#version, #header)) DrawTitle(#header); +} + + + +void TWebBrowser::ParseHTML(dword bword){ + word bukva[2]; + int j, perenos_num; + byte ignor_param; + char temp[768]; + + stroka = -lines.first; + stolbec = 0; + + for (j = 400; j < blink + 1; j++;) DeleteButton(j); + blink = 400; + + b_text = i_text = u_text = s_text = blq_text = first_line_drawed = + li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; // + link_color = 0x0000FF; + bg_color = 0xFFFFFF; + line = NULL; + strcpy(#page_links,"|"); + strcpy(#header, #version); + + if (pre_text<>2) + { + pre_text=0; + if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1; + if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1; + } + + for ( ; buf+filesize > bword; bword++;) + { + bukva = ESBYTE[bword]; + if (ignor_text) && (bukva<>'<') continue; + switch (bukva) + { + case 0x0a: + if (pre_text) + { + bukva = temp = NULL; + goto NEXT_MARK; + } + case '\9': + if (pre_text) // 0x0d + { + tab_len=strlen(#line)/8; + tab_len=tab_len*8; + tab_len=8+tab_len-strlen(#line); + for (j=0; j<tab_len; j++;) strcat(#line," "); + break; + } + case 0x0d: + bukva = ' '; + goto DEFAULT_MARK; + case '=': // , 7 + if (strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK; + + bword++; + bukva=ESBYTE[bword]; + strcpy(#temp,#bukva); + bword++; + bukva=ESBYTE[bword]; + strcat(#temp,#bukva); + + bukva=Hex2Symb(#temp); + if (bukva) goto DEFAULT_MARK; + break; + + case '&': //  and so on + bword++; + tag=0; + for (j=0; (ESBYTE[bword]<>';') && (j<7); j++, bword++;) + { + bukva = ESBYTE[bword]; + strcat(#tag, #bukva); + } + + bukva = GetUnicodeSymbol(); + if (bukva) goto DEFAULT_MARK; + break; + case '<': + bword++; // < + tag = parametr = tagparam = ignor_param = NULL; + if (ESBYTE[bword] == '!') // <!-- -->, + { + bword++; + if (ESBYTE[bword] == '-') + { + HH_: + do + { + bword++; + if (buf + filesize <= bword) break 2; + } + while (ESBYTE[bword] <>'-'); + + bword++; + if (ESBYTE[bword] <>'-') goto HH_; + } + } + while (ESBYTE[bword] !='>') && (bword < buf + filesize) // + { + bukva = ESBYTE[bword]; + if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; + if (!ignor_param) && (bukva <>' ') + { + if (strlen(#tag)<sizeof(tag)) strcat(#tag, #bukva); + } + else + { + ignor_param = true; + if (!ignor_text) && (strlen(#tagparam)+1<sizeof(tagparam)) strcat(#tagparam, #bukva); + } + bword++; + } + strlwr(#tag); + strlwr(#tagparam); + + if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=NULL; //for br/ + if (tagparam) && (strlen(#tagparam) < 4000) GetNextParam(); + + if (stolbec + strlen(#line) > lines.column_max) + { + perenos_num = strrchr(#line, ' '); + if (!perenos_num) && (strlen(#line)>lines.column_max) perenos_num=lines.column_max; + strcpy(#temp, #line + perenos_num); // + line[perenos_num] = 0x00; + if (stroka >= lines.visible) && (lines.first <>0) break 1; //... + DrawPage(); + strcpy(#line, #temp); + + TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); // + } + DrawPage(); + line=NULL; + + if (tag) WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); // + + tag = parametr = tagparam = ignor_param = NULL; + break; + default: + DEFAULT_MARK: + if (!pre_text) && (bukva == ' ') + { + if (line[strlen(#line)-1]==' ') break; // 2 + if (!stolbec) && (!line) break; // + } + if (strlen(#line)<sizeof(line)) strcat(#line, #bukva); + + if (stolbec + strlen(#line) > lines.column_max) + { + NEXT_MARK: + perenos_num = strrchr(#line, ' '); + if (!perenos_num) && (strlen(#line)>lines.column_max) perenos_num=lines.column_max; + strcpy(#temp, #line + perenos_num); // + line[perenos_num] = 0x00; + if (stroka >= lines.visible) && (lines.first <>0) break 1; //... + DrawPage(); + strcpy(#line, #temp); + + TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); // + } + } + } + + DrawPage(); // , , + if (lines.visible * 10 + 25 <= height) + DrawBar(left, lines.visible * 10 + top + 25, width - 15, -lines.visible * 10 + height - 25, bg_color); + if (stroka * 10 + 15 <= height) + DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); // + if (lines.first == 0) lines.all = stroka; + if (anchor) // - + { + anchor=NULL; + lines.first=anchor_line_num; + ParseHTML(buf); + } + DrawScroller(); +} + +void TWebBrowser::DrawPage() // !!1! +{ + int start_x, start_y, line_length; + char temp[sizeof(line)]; + + if (!header) //&& (tag) + { + if (strlen(#version)+strlen(#line)+2>sizeof(header)) + { + strcpy(#temp, #line); + temp[sizeof(header)-strlen(#version)-2]=0; + strcpy(#header, #temp); + strcpy(#line, #line+strlen(#temp)); + } + else + { + strcpy(#header, #line); + line=0; + } + strcat(#header, " -"); + strcat(#header, #version); + return; + } + + if (stroka >= 0) && (stroka - 2 < lines.visible) && (line) && (!anchor) + { + if (!stroka) && (!stolbec) + { + DrawBar(left, top, width-15, 15, bg_color); // + first_line_drawed=1; + } + + start_x=stolbec * 6 + left+5; + start_y=stroka * 10 + top + 5; + line_length=strlen(#line)*6; + + if (use_truetype == 1) + { + //line_length = get_length stdcall (#line,-1,16,line_length); + text_out stdcall (#line, #fontlol, 17, text_colors[text_color_index], start_x, start_y-3); + } + else + { + WriteText(start_x, start_y, 0x80, text_colors[text_color_index], #line, 0); + IF (b_text) { $add ebx, 1<<16 $int 0x40 } + } + IF (i_text) Skew(start_x, start_y, line_length+6, 10); + IF (s_text) DrawBar(start_x, start_y + 4, line_length, 1, text_colors[text_color_index]); + IF (u_text) DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]); + IF (link) { + DefineButton(start_x-2, start_y, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9); + DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]); + } + stolbec += strlen(#line); + } +} + + +char oldtag[100]; +void TWebBrowser::WhatTextStyle(int left1, top1, width1) { + dword hr_color; + + // + if (tag[0] == '/') + { + rez = 0; + strcpy(#tag, #tag+1); + } + else rez = 1; + + if (!chTag("html")) + { + IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0; + return; + } + + if (!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez; + + if(!chTag("title")) + { + if (rez) header=NULL; + else if (!stroka) DrawTitle(#header); // - + return; + } + + if (ignor_text) return; + + + + IF(!chTag("q")) strcat(#line, "\""); + + if (anchor) && (!strcmp(#parametr, "id=")) // !!! , + { + if (!strcmp(#anchor, #options)) anchor_line_num=lines.first+stroka; + } + + if (!chTag("body")) + { + do{ + if (!strcmp(#parametr, "link=")) link_color = GetColor(#options); + if (!strcmp(#parametr, "text=")) text_colors[0]=GetColor(#options); + if (!strcmp(#parametr, "bgcolor=")) bg_color=GetColor(#options); + } while(GetNextParam()); + return; + } + + if (!chTag("a")) + { + if (rez) + { + if (link) IF(text_color_index > 0) text_color_index--; // + + do{ + if (!strcmp(#parametr, "href=")) + { + if (stroka - 1 > lines.visible) || (stroka < -2) return; + + text_color_index++; + text_colors[text_color_index] = text_colors[text_color_index-1]; + + link = 1; + blink++; + text_colors[text_color_index] = link_color; + strcat(#page_links, #options); + strcat(#page_links, "|"); + } + if (anchor) && (!strcmp(#parametr, "name=")) + { + if (!strcmp(#anchor, #options)) + { + anchor_line_num=lines.first+stroka; + } + } + } while(GetNextParam()); + } + else { + link = 0; + IF(text_color_index > 0) text_color_index--; + } + return; + } + + if (!chTag("font")) + { + if (rez) + { + text_color_index++; + text_colors[text_color_index] = text_colors[text_color_index-1]; + + do{ + if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#') + { + text_colors[text_color_index] = GetColor(#options); + } + } while(GetNextParam()); + } + else + if (text_color_index > 0) text_color_index--; + return; + } + if(!chTag("tr")) || (!chTag("br")) { + TextGoDown(left1, top1, width1); + return; + } + if (!chTag("div")) { + IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1); + return; + } + if (!chTag("p")) { + IF(oldtag[0] == 'h') return; + TextGoDown(left1, top1, width1); + IF(rez) TextGoDown(left1, top1 + 10, width1); + return; + } + if (!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { + TextGoDown(left1, top1, width1); + IF(rez) TextGoDown(left1, top1 + 10, width1); + b_text = rez; + strcpy(#oldtag, #tag); + return; + } + else + oldtag=NULL; + + if (!chTag("b")) || (!chTag("strong")) || (!chTag("big")) { + b_text = rez; + return; + } + if(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) { + i_text = rez; + return; + } + if (!chTag("dt")) + { + li_text = rez; + IF(rez == 0) return; + TextGoDown(left1, top1, width1); + return; + } + if(!chTag("li")) || (!chTag("dt")) // + { + li_text = rez; + IF(rez == 0) return; + TextGoDown(left1, top1, width1); + IF(stroka > -1) && (stroka - 2 < lines.visible) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0); + return; + } + if (!chTag("u")) || (!chTag("ins")) u_text = rez; + if (!chTag("s")) || (!chTag("strike")) || (!chTag("del")) s_text = rez; + if (!chTag("ul")) || (!chTag("ol")) IF(!rez) + { + li_text = rez; + li_tab--; + TextGoDown(left1, top1, width1); + } ELSE li_tab++; + if (!chTag("dd")) stolbec += 5; + if (!chTag("blockquote")) blq_text = rez; + if (!chTag("pre")) pre_text = rez; + if (!chTag("hr")) + { + TextGoDown(left1, top1, width1); + TextGoDown(left1, top1 + 10, width1); + IF(strcmp(#parametr, "color=") == 0) hr_color = GetColor(#options); + ELSE hr_color = 0x999999; + IF(stroka > 0) DrawBar(left1, top1 + 14, width1 - 8, 1, hr_color); + } + if (!chTag("img")) + { + Images( left1, top1, width1); + return; + } + if (!chTag("meta")) || (!chTag("?xml")) + { + do{ + if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding=")) + { + strcpy(#options, #options[strrchr(#options, '=')]); // content= + if (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8")) ReadHtml(_UTF); + if (!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u")) ReadHtml(_KOI); + if (!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866")) ReadHtml(_DOS); + } + } while(GetNextParam()); + return; + } +} + + +void TextGoDown(int left1, top1, width1) +{ + if (!stroka) && (!stolbec) && (!first_line_drawed) + { + DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); // + first_line_drawed=1; + } + stroka++; + if (blq_text) stolbec = 8; + ELSE stolbec = 0; + if (li_text) stolbec = li_tab * 5; + IF(stroka >= 0) && (stroka - 2 < lines.visible) && (!anchor) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color); +} + + +struct s_image +{ + dword *image; + char path[4096]; +}; +s_image pics[100]; //pics = mem_Alloc( 100*sizeof(s_image) ); +int num_of_pics; + +int GetOrSetPicNum(dword i_path) +{ + int i; + for (i=0; i<num_of_pics; i++) + { + if (!strcmp(#pics[i].path, i_path)) return i; + } + num_of_pics++; + return num_of_pics; +} + +void FreeImgCache() +{ + int i; + for (i=0; i<=num_of_pics; i++) + { + mem_Free(pics[num_of_pics].image); + pics[num_of_pics].path=NULL; + } + num_of_pics=0; +} + + +void Images(int left1, top1, width1) +{ + dword image; + char img_path[4096], alt[4096]; + int w=0, h=0, img_lines_first=0, cur_pic=0; + + if (GetFileInfo(libimg)<>0) return; // + do{ + if (!strcmp(#parametr,"src=")) // GetNewUrl() + { + if (downloader_id) strcpy(#img_path, #history_list[history_current-1].Item); + else strcpy(#img_path, BrowserHistory.CurrentUrl()); // + + if (strcmpn(#img_path, "http:", 5)!=0) || (strcmpn(#options, "http:", 5)!=0) + { + img_path[strrchr(#img_path, '/')] = 0x00; // / + strcat(#img_path, #options); + + cur_pic=GetOrSetPicNum(#img_path); + if (!pics[cur_pic].path) + { + pics[cur_pic].image=load_image(#img_path); + strcpy(#pics[cur_pic].path, #img_path); + } + } + } + if (!strcmp(#parametr,"alt=")) + { + strcpy(#alt, "["); + strcat(#alt, #options); + strcat(#alt, "]"); + } + + } while(GetNextParam()); + + if (!pics[cur_pic].image) + { + if (alt) && (link) strcat(#line, #alt); + return; + } + + w=DSWORD[pics[cur_pic].image+4]; + h=DSWORD[pics[cur_pic].image+8]; + if (w>width1) w=width1; + + if (stroka==0) DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); // + stroka+=h/10; + if (top1+h<WB1.top) || (top1>WB1.top+WB1.height-10) return; // Ѩ + if (top1<WB1.top) // + { + DrawBar(WB1.left, WB1.top, WB1.width-15, 10, bg_color); // + img_lines_first=WB1.top-top1; + h=h-img_lines_first; + top1=WB1.top; + } + if (top1>WB1.top+WB1.height-h-15) // + { + h=WB1.top+WB1.height-top1-15; + } + if (h<=0) return; + if (anchor) return; + + img_draw stdcall (pics[cur_pic].image,left1-5,top1+10,w, h,0,img_lines_first); + DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color); + IF (link) DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9); +} + + +// +void TWebBrowser::DrawScroller() // , +{ + scroll1.max_area = lines.all; + scroll1.cur_area = lines.visible; + scroll1.position = lines.first; + + scroll1.all_redraw=1; + scroll1.start_x=Form.width-28; //left + width - 15 + scroll1.size_y=WB1.height; + + scrollbar_v_draw(#scroll1); +} diff --git a/programs/cmm/browser/compile.bat b/programs/cmm/browser/compile.bat new file mode 100644 index 000000000..7f8a5a369 --- /dev/null +++ b/programs/cmm/browser/compile.bat @@ -0,0 +1,6 @@ +..\C--\c-- HTMLv.c /lst +del HTMLv +rename HTMLv.com HTMLv +rem ..\C--\kpack HTMLv +del warning.txt +pause \ No newline at end of file diff --git a/programs/cmm/browser/img/URLgoto.png b/programs/cmm/browser/img/URLgoto.png new file mode 100644 index 000000000..8bd51e71a Binary files /dev/null and b/programs/cmm/browser/img/URLgoto.png differ diff --git a/programs/cmm/browser/img/URLgoto.txt b/programs/cmm/browser/img/URLgoto.txt new file mode 100644 index 000000000..0bcea11ab --- /dev/null +++ b/programs/cmm/browser/img/URLgoto.txt @@ -0,0 +1,256 @@ +unsigned char URLgoto[2280] = { + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xD3, + 0xB8, 0xA4, 0xDE, 0xD4, 0xD1, 0xE1, 0xDF, 0xE4, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, + 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, + 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, + 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, + 0xF4, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, + 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, + 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, + 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xE5, 0xDA, 0xD5, 0xD1, 0xB3, 0x9C, 0xDE, 0xD4, 0xD1, + 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xE5, 0xDA, 0xD5, 0xD3, 0xB8, 0xA4, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, + 0xDE, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xA3, 0x9E, 0x98, 0x8C, 0x86, 0x7D, 0x81, 0x7A, 0x71, 0x8C, 0x86, 0x7D, 0xA3, 0x9E, + 0x98, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0x32, 0xAD, + 0x76, 0x32, 0xAD, 0x76, 0x32, 0xAD, 0x76, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xF1, 0xF0, 0xF2, 0xE9, 0xE8, + 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0x94, 0x8E, 0x87, 0xA6, 0x9F, 0x99, 0xD0, 0xCA, 0xBE, + 0xEC, 0xE2, 0xC8, 0xCD, 0xC4, 0xB0, 0xA3, 0x9A, 0x8F, 0x94, 0x8E, 0x86, 0xE9, 0xE8, 0xEC, 0xE9, + 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xD9, 0xD7, + 0xDD, 0xCE, 0xAE, 0x94, 0xF1, 0xF0, 0xF2, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, + 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x6B, 0xD4, 0xA5, 0x32, + 0xAD, 0x76, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, + 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE8, 0xE6, 0xEA, 0xD9, 0xD7, 0xDD, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xA3, 0x9E, 0x98, 0xA4, + 0x9D, 0x95, 0xFE, 0xFD, 0xFB, 0xF3, 0xE8, 0xD6, 0xEC, 0xDB, 0xBF, 0xEE, 0xE1, 0xC4, 0xF1, 0xEA, + 0xCE, 0xA1, 0x9A, 0x8F, 0xA3, 0x9E, 0x98, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, + 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xD9, 0xD6, 0xDD, 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE9, + 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x6B, 0xD4, 0xA5, 0x32, 0xAD, 0x76, 0xE9, 0xE7, 0xEB, + 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE7, + 0xE5, 0xE9, 0xD9, 0xD6, 0xDD, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE8, 0xE6, + 0xEA, 0xE8, 0xE6, 0xEA, 0x8C, 0x86, 0x7D, 0xCF, 0xCA, 0xB9, 0xF1, 0xE5, 0xCF, 0xEE, 0xE0, 0xC5, + 0xF2, 0xEE, 0xD3, 0xF4, 0xF2, 0xD8, 0xF4, 0xF3, 0xD8, 0xCF, 0xC9, 0xB6, 0x8C, 0x86, 0x7D, 0xE8, + 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xD8, 0xD6, + 0xDC, 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, + 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, + 0xCD, 0x96, 0x6B, 0xD4, 0xA5, 0x32, 0xAD, 0x76, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, + 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE6, 0xE4, 0xE8, 0xD8, 0xD6, 0xDC, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xED, 0xED, 0xEF, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0x81, 0x7A, 0x71, 0xEC, + 0xE5, 0xCC, 0xEB, 0xD9, 0xBC, 0xF1, 0xED, 0xD1, 0xF7, 0xF7, 0xE4, 0xF9, 0xF9, 0xEB, 0xF8, 0xF8, + 0xE7, 0xF0, 0xEF, 0xD9, 0x81, 0x7A, 0x71, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, + 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xD7, 0xD5, 0xDB, 0xCE, 0xAE, 0x94, 0xED, 0xED, 0xEF, 0xE7, + 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x6B, 0xD4, 0xA5, + 0x32, 0xAD, 0x76, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE2, + 0xE1, 0xE5, 0xD7, 0xD5, 0xDB, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xEC, 0xEA, 0xED, 0xE6, 0xE4, + 0xE8, 0xE6, 0xE4, 0xE8, 0x8C, 0x86, 0x7D, 0xCB, 0xC3, 0xB2, 0xEE, 0xE3, 0xC6, 0xF3, 0xF1, 0xD6, + 0xF9, 0xF9, 0xEB, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xF8, 0xCF, 0xCB, 0xBE, 0x8C, 0x86, 0x7D, 0xE6, + 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xD6, 0xD3, + 0xDA, 0xCE, 0xAE, 0x94, 0xEC, 0xEA, 0xED, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, + 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, + 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x39, 0xC5, 0x86, 0x32, 0xAD, 0x76, 0xE6, 0xE4, + 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xDF, 0xDD, 0xE2, 0xD6, 0xD3, 0xDA, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xEB, 0xEA, 0xED, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xA3, 0x9E, 0x98, 0xA1, + 0x9A, 0x91, 0xEF, 0xE7, 0xCD, 0xF4, 0xF3, 0xD8, 0xF8, 0xF8, 0xE6, 0xFC, 0xFC, 0xF5, 0xFB, 0xFA, + 0xF9, 0xA2, 0x9C, 0x94, 0xA3, 0x9E, 0x98, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, + 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xD6, 0xD3, 0xDA, 0xCE, 0xAE, 0x94, 0xEB, 0xEA, 0xED, 0xE2, + 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x39, 0xC5, 0x86, + 0x32, 0xAD, 0x76, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xDF, + 0xDC, 0xE2, 0xD6, 0xD3, 0xDA, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xE9, 0xE9, 0xEC, 0xDF, 0xDD, + 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0x94, 0x8F, 0x87, 0xA2, 0x9B, 0x92, 0xCB, 0xC6, 0xB8, + 0xF1, 0xF2, 0xE0, 0xCE, 0xCA, 0xBF, 0xA2, 0x9D, 0x95, 0x83, 0x7F, 0x7A, 0x80, 0xAD, 0xC8, 0xDF, + 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xD4, 0xD2, + 0xD9, 0xCE, 0xAE, 0x94, 0xE9, 0xE9, 0xEC, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, + 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, + 0xCD, 0x96, 0x39, 0xC5, 0x86, 0x32, 0xAD, 0x76, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, + 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDC, 0xDB, 0xE1, 0xD4, 0xD2, 0xD9, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, + 0xDC, 0xE2, 0xA3, 0x9E, 0x98, 0x8C, 0x86, 0x7D, 0x81, 0x7A, 0x71, 0x8C, 0x86, 0x7D, 0xA3, 0x9E, + 0x98, 0x6F, 0x77, 0x93, 0x6C, 0x77, 0x9A, 0x80, 0xB7, 0xD9, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, + 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xD3, 0xD1, 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDE, + 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x39, 0xC5, 0x86, 0x32, 0xAD, 0x76, 0xDE, 0xDC, 0xE2, + 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xD9, + 0xD7, 0xDB, 0xD3, 0xD1, 0xD7, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDC, 0xDB, + 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, + 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0x6C, 0x77, 0x9A, 0x6C, + 0x77, 0x9A, 0x80, 0xB7, 0xD9, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xD3, 0xD1, + 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, + 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x39, 0xC5, 0x86, 0x32, + 0xAD, 0x76, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, + 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xD9, 0xD7, 0xDB, 0xD3, 0xD1, 0xD7, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, + 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, + 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0x6C, 0x77, 0x9A, 0x6C, 0x77, 0x9A, 0x80, 0xB7, 0xD9, + 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xD3, 0xD0, 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDA, + 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0x32, 0xAD, + 0x76, 0x32, 0xAD, 0x76, 0x32, 0xAD, 0x76, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, + 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xD8, + 0xD6, 0xDA, 0xD3, 0xD0, 0xD7, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD9, 0xD8, + 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, + 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, + 0xD8, 0xDD, 0x6C, 0x77, 0x9A, 0x6C, 0x77, 0x9A, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD3, 0xD0, + 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, + 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, + 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, + 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD8, 0xD6, 0xDA, 0xD2, 0xCF, 0xD6, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, + 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, + 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, + 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD3, 0xD0, 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD8, + 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, + 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, + 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD6, + 0xD4, 0xD8, 0xD8, 0xD2, 0xD5, 0xD3, 0xB8, 0xA4, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD3, 0xD0, + 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, + 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, + 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD1, 0xCE, + 0xD5, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, + 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, + 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, + 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD8, 0xD2, 0xD5, 0xD0, 0xB8, 0xA7, 0xDE, 0xD4, 0xD1, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xD2, + 0xBC, 0xAE, 0xDE, 0xD4, 0xD1, 0xE1, 0xDF, 0xE4 +}; + +unsigned char stop_btn[1728] = { + 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, + 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xC2, 0xC5, 0xE5, + 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, + 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC6, 0xE5, 0xE7, 0xE6, 0xED, 0xE8, 0xE7, 0xED, 0xEB, 0xEA, + 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, + 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xB3, 0xB8, 0xE3, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, + 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, + 0x8C, 0x95, 0xDB, 0xE3, 0xE3, 0xEC, 0xE7, 0xE6, 0xED, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xB2, 0xB8, 0xE2, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, + 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, + 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x00, 0x19, 0xC1, 0x87, 0x92, 0xDA, 0xE1, 0xE1, + 0xEB, 0xE8, 0xE7, 0xEC, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xB1, 0xB5, 0xE0, 0x00, + 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x49, 0x5F, 0xDB, 0x49, 0x5F, 0xDB, 0x4C, 0x65, 0xDD, 0x4C, 0x64, + 0xDD, 0x46, 0x5E, 0xDB, 0x3E, 0x55, 0xDA, 0x34, 0x4D, 0xDA, 0x29, 0x45, 0xD7, 0x2D, 0x47, 0xD8, + 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x86, 0x90, 0xD8, 0xDF, 0xDE, 0xE8, 0xE7, 0xE5, 0xE9, 0xE8, + 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, + 0xEA, 0xB1, 0xB5, 0xE0, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x49, 0x5F, 0xDB, 0x4A, 0x61, 0xDC, + 0x50, 0x64, 0xDC, 0x52, 0x67, 0xDD, 0x4D, 0x64, 0xDC, 0x4B, 0x62, 0xDC, 0x46, 0x5E, 0xDB, 0x3C, + 0x53, 0xD9, 0x30, 0x4A, 0xD8, 0x28, 0x44, 0xD6, 0x29, 0x45, 0xD7, 0x48, 0x5F, 0xDB, 0x00, 0x19, + 0xC1, 0x86, 0x90, 0xD8, 0xE3, 0xE2, 0xE9, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, + 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xB0, 0xB5, 0xDF, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x49, + 0x5F, 0xDB, 0x47, 0x5E, 0xDB, 0x51, 0x65, 0xDD, 0x6C, 0x80, 0xE2, 0x4C, 0x62, 0xDC, 0x47, 0x5F, + 0xDC, 0x48, 0x60, 0xDC, 0x44, 0x5C, 0xDC, 0x3B, 0x55, 0xD9, 0x58, 0x6D, 0xDE, 0x2C, 0x45, 0xD7, + 0x27, 0x43, 0xD2, 0x23, 0x3D, 0xCD, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x86, 0x8F, 0xD8, 0xE5, + 0xE3, 0xE8, 0xE6, 0xE4, 0xE8, 0xE7, 0xE5, 0xE9, 0xE5, 0xE3, 0xE7, 0xBA, 0xBD, 0xDF, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x49, 0x5F, 0xDB, 0x45, 0x5D, 0xDB, 0x8D, 0x9D, 0xE7, + 0xA8, 0xB6, 0xEF, 0xBC, 0xC9, 0xEE, 0x41, 0x59, 0xDB, 0x45, 0x5D, 0xDB, 0x44, 0x5C, 0xDC, 0x90, + 0xA0, 0xE9, 0xA8, 0xB6, 0xEF, 0x6B, 0x7E, 0xE2, 0x27, 0x41, 0xCF, 0x1A, 0x35, 0xCA, 0x21, 0x3C, + 0xCD, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x9B, 0xA2, 0xDA, 0xE5, 0xE3, 0xE7, 0xE4, 0xE2, 0xE7, + 0xE2, 0xE1, 0xE5, 0xB8, 0xBC, 0xDD, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x46, + 0x5F, 0xDB, 0x67, 0x7B, 0xE1, 0xA8, 0xB6, 0xEF, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xB6, 0xC6, + 0xE9, 0x43, 0x5B, 0xDC, 0x80, 0x93, 0xE3, 0x91, 0xA1, 0xE8, 0xDE, 0xE7, 0xF5, 0xE1, 0xE8, 0xF9, + 0x5C, 0x70, 0xE0, 0x26, 0x41, 0xD0, 0x17, 0x32, 0xC9, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x71, + 0x7E, 0xD3, 0xDF, 0xDE, 0xE4, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xB8, 0xBC, 0xDD, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x43, 0x5B, 0xDC, 0x3E, 0x57, 0xDD, 0xBC, 0xC9, 0xEE, + 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xB4, 0xC5, 0xE6, 0x86, 0x99, 0xE4, 0xDE, + 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xE7, 0xEE, 0xFB, 0x27, 0x43, 0xD5, 0x27, 0x41, 0xD2, 0x22, 0x3B, + 0xCC, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x71, 0x7E, 0xD3, 0xDA, 0xDA, 0xE3, 0xE2, 0xE1, 0xE5, + 0xE1, 0xE0, 0xE4, 0xB7, 0xBB, 0xDC, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x3F, + 0x56, 0xDD, 0x3E, 0x57, 0xDD, 0x3E, 0x57, 0xDA, 0xB6, 0xC6, 0xE9, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, + 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDD, 0xE7, 0xF5, 0x2D, 0x46, 0xD8, + 0x28, 0x44, 0xD7, 0x28, 0x43, 0xD2, 0x23, 0x3D, 0xCD, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x70, + 0x7D, 0xD2, 0xD4, 0xD5, 0xE2, 0xDC, 0xDC, 0xE3, 0xDF, 0xDE, 0xE3, 0xB5, 0xB9, 0xDC, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x3F, 0x58, 0xDB, 0x40, 0x59, 0xDD, 0x3E, 0x57, 0xDC, + 0x3E, 0x57, 0xDA, 0xB4, 0xC5, 0xE6, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, + 0xE7, 0xF5, 0x34, 0x4D, 0xD7, 0x30, 0x48, 0xD8, 0x29, 0x44, 0xD7, 0x28, 0x43, 0xD4, 0x22, 0x3D, + 0xCC, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6F, 0x7C, 0xD2, 0xD2, 0xD3, 0xE1, 0xDA, 0xDA, 0xE2, + 0xDC, 0xDB, 0xE1, 0xB3, 0xB7, 0xDA, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x55, 0xD9, 0x41, + 0x5B, 0xDB, 0x41, 0x5B, 0xDD, 0x3F, 0x58, 0xDB, 0x80, 0x93, 0xE3, 0xA4, 0xB4, 0xE8, 0xDE, 0xE7, + 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xD7, 0xE2, 0xF3, 0x30, 0x49, 0xD8, + 0x28, 0x43, 0xD8, 0x28, 0x43, 0xD4, 0x22, 0x3B, 0xCC, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6E, + 0x7B, 0xD1, 0xCF, 0xD0, 0xDF, 0xD7, 0xD7, 0xE0, 0xDC, 0xDB, 0xE1, 0xB3, 0xB7, 0xDA, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x34, 0x4F, 0xDA, 0x40, 0x57, 0xDA, 0x3E, 0x57, 0xDD, 0x90, 0xA0, 0xE9, + 0x91, 0xA1, 0xE8, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, + 0xE7, 0xF5, 0xD7, 0xE2, 0xF3, 0xE0, 0xE9, 0xF7, 0x27, 0x43, 0xD8, 0x29, 0x43, 0xD1, 0x21, 0x3B, + 0xCB, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6E, 0x7B, 0xD1, 0xCF, 0xD0, 0xDF, 0xD7, 0xD7, 0xE0, + 0xDB, 0xDA, 0xE0, 0xB2, 0xB6, 0xD9, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x2B, 0x45, 0xD8, 0x3A, + 0x52, 0xD8, 0x5E, 0x74, 0xE1, 0xA8, 0xB6, 0xEF, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDD, 0xE7, + 0xF5, 0x3A, 0x52, 0xD9, 0xD7, 0xE2, 0xF3, 0xD7, 0xE2, 0xF3, 0xDE, 0xE7, 0xF5, 0xE6, 0xED, 0xFB, + 0x5E, 0x71, 0xE1, 0x28, 0x43, 0xD0, 0x1D, 0x38, 0xCB, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6D, + 0x7A, 0xD0, 0xCE, 0xCF, 0xDE, 0xD6, 0xD6, 0xDF, 0xD9, 0xD7, 0xDB, 0xB1, 0xB4, 0xD6, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x2D, 0x47, 0xD8, 0x2F, 0x49, 0xD8, 0x30, 0x49, 0xD8, 0x73, 0x86, 0xE5, + 0xE1, 0xE8, 0xF9, 0xE7, 0xEE, 0xFB, 0x34, 0x4F, 0xDB, 0x34, 0x4D, 0xDA, 0x34, 0x4D, 0xD9, 0xE0, + 0xE9, 0xF7, 0xE6, 0xED, 0xFB, 0x77, 0x88, 0xE5, 0x27, 0x41, 0xD1, 0x25, 0x3F, 0xCF, 0x24, 0x3D, + 0xCF, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x79, 0xCE, 0xCD, 0xCD, 0xD9, 0xD5, 0xD4, 0xDA, + 0xD9, 0xD7, 0xDB, 0xD6, 0xD4, 0xDA, 0x86, 0x8F, 0xD1, 0x00, 0x19, 0xC1, 0x48, 0x5F, 0xDB, 0x2B, + 0x45, 0xD7, 0x28, 0x44, 0xD7, 0x2C, 0x46, 0xD8, 0x63, 0x78, 0xE2, 0x2D, 0x47, 0xD9, 0x31, 0x4B, + 0xD9, 0x31, 0x4B, 0xD8, 0x30, 0x4A, 0xD8, 0x2D, 0x47, 0xD8, 0x62, 0x78, 0xE2, 0x27, 0x41, 0xD1, + 0x25, 0x3F, 0xCF, 0x25, 0x3E, 0xD0, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x79, 0xCE, 0xB1, + 0xB4, 0xD6, 0xCF, 0xCE, 0xD9, 0xD6, 0xD4, 0xDA, 0xD9, 0xD7, 0xDB, 0xD7, 0xD5, 0xDA, 0xD3, 0xD1, + 0xDA, 0x7E, 0x88, 0xD0, 0x00, 0x19, 0xC1, 0x48, 0x5F, 0xDB, 0x26, 0x43, 0xD6, 0x27, 0x43, 0xD2, + 0x2C, 0x46, 0xD7, 0x2D, 0x47, 0xD7, 0x30, 0x49, 0xD8, 0x31, 0x4B, 0xD8, 0x2E, 0x48, 0xD8, 0x2C, + 0x46, 0xD6, 0x28, 0x43, 0xD4, 0x26, 0x43, 0xD0, 0x25, 0x3F, 0xD1, 0x48, 0x5F, 0xDB, 0x00, 0x19, + 0xC1, 0x6C, 0x78, 0xCD, 0xAD, 0xB1, 0xD6, 0xC4, 0xC5, 0xD8, 0xD3, 0xD1, 0xDA, 0xD7, 0xD5, 0xDA, + 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, 0xD0, 0xDA, 0x7D, 0x87, 0xD0, 0x00, + 0x19, 0xC1, 0x48, 0x5F, 0xDB, 0x28, 0x44, 0xD7, 0x21, 0x3A, 0xCD, 0x25, 0x40, 0xCD, 0x27, 0x43, + 0xD2, 0x28, 0x43, 0xD2, 0x27, 0x43, 0xD2, 0x26, 0x41, 0xD0, 0x25, 0x3E, 0xCE, 0x1A, 0x35, 0xCA, + 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x78, 0xCD, 0xAC, 0xB0, 0xD6, 0xC2, 0xC3, 0xD8, 0xD1, + 0xD0, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, + 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, 0xD0, 0xDA, 0x7D, 0x87, 0xD0, 0x00, 0x19, 0xC1, 0x48, 0x5F, 0xDB, + 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, + 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x78, 0xCD, 0xAC, 0xB0, + 0xD6, 0xC2, 0xC3, 0xD8, 0xD1, 0xD0, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, + 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, + 0xD0, 0xDA, 0x7D, 0x87, 0xD0, 0x00, 0x19, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, + 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, + 0x6C, 0x79, 0xCE, 0xAC, 0xB0, 0xD6, 0xC2, 0xC3, 0xD8, 0xD1, 0xD0, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, + 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, + 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, 0xD0, 0xDA, 0x87, 0x8F, 0xD1, + 0x78, 0x83, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, + 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0xAF, 0xB2, 0xD6, 0xC3, 0xC4, 0xD8, 0xD1, 0xD0, + 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, + 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, + 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD2, 0xD1, 0xDA, 0xC6, 0xC6, 0xD8, 0xC3, 0xC4, 0xD8, 0xC2, 0xC3, + 0xD8, 0xC2, 0xC3, 0xD8, 0xC2, 0xC3, 0xD8, 0xC2, 0xC3, 0xD8, 0xC2, 0xC3, 0xD8, 0xC3, 0xC4, 0xD8, + 0xC6, 0xC6, 0xD8, 0xD2, 0xD1, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, + 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, + 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, + 0xD6, 0xD4, 0xDA, 0xD3, 0xD2, 0xDA, 0xD3, 0xD1, 0xDA, 0xD2, 0xD1, 0xDA, 0xCB, 0xCB, 0xD9, 0xD2, + 0xD1, 0xDA, 0xD2, 0xD1, 0xDA, 0xD3, 0xD1, 0xDA, 0xD3, 0xD2, 0xDA, 0xD6, 0xD4, 0xDA, 0xD8, 0xD6, + 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB +}; \ No newline at end of file diff --git a/programs/cmm/browser/img/toolbar_icons.c b/programs/cmm/browser/img/toolbar_icons.c new file mode 100644 index 000000000..3e1fe284b --- /dev/null +++ b/programs/cmm/browser/img/toolbar_icons.c @@ -0,0 +1,529 @@ +dword toolbar_pal[249]= {0x00E4DFE1,0x00EDE9EA,0x00C2BEC0,0x00D6DFEB,0x00E9E6E8,0x00D4B9E8,0x00C29ADA,0x00B688D7,0x005FA8ED,0x0064ABED,0x00D6D8E2,0x008A9DC3,0x00D5D7E1,0x00DCC5EC,0x00B179D7,0x00C5A4DA,0x00C9A9E2,0x00C097E1,0x00A96AD4,0x00CEB1E5,0x005BA5EB,0x007DC1F2,0x00A4DFF8,0x0060A8EB,0x00CAD9EA,0x00C4C8D8,0x005376B5,0x006482BC,0x00BBC2D4,0x00E8E4E6,0x00E5D5F2,0x00ECEBF1,0x00E1CCF0,0x00DFD0E2,0x00DDE1E9,0x006CACE9,0x0092D5F4,0x0099D6F5,0x0089CDF2,0x009ADCF6,0x005EA5E9,0x00549CE2,0x008DA8D4,0x00E1DDE0,0x00A9B2C9,0x00E4E1E2,0x00E0CDEE,0x00D1B8DC,0x0064ABE5,0x008BD3F4,0x00A9EDFC,0x007FC4F0,0x0075BCEC,0x005CA0E3,0x00C6D5E7,0x0080CBF2,0x00B3BCD2,0x005A7BB9,0x009BB2DC,0x00CFE0F2,0x00A1ADC8,0x00BB95D6,0x00D6DBE4,0x0064A4E3,0x0079C4EE,0x00839CBD,0x008D9DB1,0x0091DAF6,0x00A6B1C8,0x00A5BBE1,0x00C4D6ED,0x00D3E2F3,0x0092A2C4,0x00E1D4E3,0x009FE6F9,0x0085A2C2,0x00F0EFF0,0x0099A8BC,0x005298DC,0x004B982C,0x00ACC2E4,0x00CDDEF1,0x00BCD1EB,0x00DCDDE2,0x00909FC0,0x00AC78D4,0x005A9BDC,0x0097E0F7,0x006CB7E9,0x00F7F7F8,0x00F8F8F9,0x0096A6BA,0x004690D7,0x0083D0F3,0x004B93DA,0x00DCD9DC,0x00AEE594,0x00A2ADC6,0x00A2B8DF,0x00B9CEE9,0x00B2C8E7,0x00AEB8CE,0x00D4D4DA,0x00CCB3D5,0x00D9CCDB,0x0073C1ED,0x0065B3E7,0x00F5F4F4,0x00EDECEE,0x009AAAC1,0x007DCCF2,0x004590D8,0x00D1CED1,0x00C2C2C8,0x00BFC0C6,0x007BD34A,0x00607EB9,0x00B6CBE8,0x00B0C5E6,0x00CDD2DC,0x00E3E1DF,0x00909EBF,0x00DDC3F0,0x00D2D7E0,0x005193D5,0x006BBBEA,0x005FB0E5,0x00EAEAEC,0x00408AD3,0x0079C7F0,0x00BBCADD,0x008A94A7,0x00737D90,0x00428F25,0x00A4DD8E,0x0073CC45,0x0067C833,0x00CED1D6,0x00A9BEE3,0x00D8C5DD,0x004C8FD2,0x005BAAE2,0x00DAD6D8,0x00C3C0C3,0x003B84CE,0x003C86D0,0x00BDBCC2,0x00519D31,0x00B4EB9A,0x0083DA51,0x0073D33C,0x00B9BECE,0x00CCCCD4,0x00E1DBDC,0x00E3D2EF,0x00488BCF,0x0056A5E0,0x006582A4,0x00E9E8EA,0x00B9B8B8,0x00D9EDED,0x00D8F6F6,0x00B3B2B2,0x008696AD,0x003782CD,0x006FC0ED,0x00B8C7DB,0x00E5E8EE,0x0080D74F,0x005578B7,0x00A1B6DE,0x008597BF,0x00D5C4D8,0x004688CC,0x0050A2DE,0x007895B6,0x00AEADAE,0x00317BC7,0x00337DC9,0x006B8AC2,0x0099AFDA,0x00738BBB,0x00C6C8D2,0x00D6CBD8,0x009AB5D4,0x002877C7,0x004D9FDC,0x00D2D0D5,0x00798AA0,0x0073A0CF,0x00E3E5EC,0x008096C1,0x006887BE,0x00BEC1CD,0x0096B1D0,0x009D9CA2,0x00ECEAEC,0x00EDAC35,0x00EBA525,0x00B6C3D6,0x007AA3CF,0x00B4B5BB,0x0096ADD9,0x00D2C4D6,0x00D9D3D4,0x00AF85D2,0x00A3A2A7,0x00F8EE27,0x00E89D1A,0x009A989F,0x00CCCFDD,0x008499C3,0x00C8C3C5,0x007890BF,0x00A09FA5,0x00E6E3E4,0x00E39C28,0x00F8EA2F,0x00F5E22C,0x00E3961A,0x0098969C,0x007591C6,0x00DB9326,0x00F7DE38,0x00F5D435,0x00F7E13A,0x00DC8E19,0x00939298,0x007996C9,0x00B4BBCB,0x007A94C3,0x00D58A24,0x00F4D545,0x00F4C741,0x00BD6516,0x00D68517,0x00929097,0x008DA1C6,0x00C4C5D1,0x00CDCBCE,0x00CE8223,0x00F5CA56,0x00F3C943,0x00CF7D17,0x008F8D94,0x00A8ABB5,0x0089888F,0x009BA9C9,0x0084838A}; + +unsigned char toolbar[8400] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x06, 0x07, 0x05, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, + 0x08, 0x09, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0B, + 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x0D, 0x0E, 0x07, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x14, 0x15, 0x16, 0x17, 0x18, 0x01, 0x01, 0x03, 0x03, + 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x19, 0x1A, + 0x1B, 0x0C, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1B, 0x1A, 0x1C, 0x1D, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, 0x0E, 0x10, 0x1E, 0x1F, 0x1F, 0x1F, 0x20, 0x10, + 0x07, 0x21, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x18, 0x01, 0x17, 0x17, 0x17, 0x29, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x1C, 0x1A, 0x2A, 0x1B, 0x1C, 0x2B, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1B, + 0x2A, 0x1A, 0x2C, 0x2D, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, + 0x05, 0x1E, 0x1E, 0x1E, 0x2E, 0x05, 0x10, 0x13, 0x13, 0x07, 0x2F, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x03, 0x30, 0x31, 0x32, 0x33, 0x34, 0x24, 0x27, 0x35, 0x36, 0x17, 0x32, + 0x37, 0x29, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x38, 0x39, 0x3A, 0x3B, + 0x1B, 0x38, 0x0A, 0x1D, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1D, 0x1B, 0x3B, 0x3A, 0x39, 0x3C, 0x2D, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x10, 0x0E, 0x13, 0x2E, 0x1E, 0x2E, 0x0F, 0x3D, 0x3D, 0x3D, 0x0F, + 0x06, 0x07, 0x0E, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3E, 0x3F, 0x26, 0x32, 0x40, + 0x41, 0x42, 0x29, 0x24, 0x43, 0x29, 0x17, 0x32, 0x37, 0x29, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x1D, 0x44, 0x39, 0x45, 0x46, 0x47, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x2B, 0x2D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x47, 0x46, 0x45, 0x39, 0x48, 0x2B, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x21, 0x12, 0x0F, 0x0D, + 0x1E, 0x2E, 0x3D, 0x07, 0x2F, 0x21, 0x49, 0x2B, 0x1D, 0x1D, 0x2B, 0x21, 0x1D, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x3E, 0x35, 0x37, 0x4A, 0x34, 0x4B, 0x1D, 0x4C, 0x4D, 0x4E, 0x31, 0x31, 0x4E, 0x32, + 0x37, 0x29, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x1D, 0x4F, 0x4F, 0x4F, 0x4F, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x3C, 0x39, 0x50, 0x46, 0x46, 0x51, + 0x47, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x52, 0x1B, 0x1C, 0x53, 0x1D, 0x1D, 0x1D, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x52, 0x3B, + 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x47, 0x51, 0x46, 0x46, 0x50, 0x39, 0x54, 0x53, 0x1D, + 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, + 0x1D, 0x2F, 0x21, 0x2B, 0x12, 0x07, 0x20, 0x20, 0x20, 0x3D, 0x55, 0x2F, 0x21, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x1D, 0x07, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x3E, 0x56, 0x40, 0x57, 0x58, 0x4B, 0x2B, + 0x59, 0x5A, 0x4C, 0x5B, 0x5C, 0x5D, 0x5D, 0x5E, 0x37, 0x29, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x5F, 0x5F, 0x5F, 0x5F, + 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x4F, 0x60, 0x60, 0x4F, 0x5F, + 0x2B, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, + 0x2D, 0x61, 0x39, 0x62, 0x46, 0x52, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x64, 0x1B, 0x65, 0x66, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x1B, 0x64, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x52, 0x46, 0x62, 0x39, 0x54, 0x5F, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x0E, 0x07, 0x10, 0x12, 0x05, 0x1E, 0x05, + 0x13, 0x55, 0x67, 0x68, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2F, 0x0E, 0x07, 0x12, 0x2D, 0x2D, 0x2D, + 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, + 0x0C, 0x4E, 0x69, 0x43, 0x6A, 0x4B, 0x2B, 0x6B, 0x5A, 0x5A, 0x5A, 0x6C, 0x6D, 0x5C, 0x6E, 0x37, + 0x6F, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x2D, 0x2D, 0x2D, 0x70, 0x71, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, + 0x72, 0x4F, 0x4F, 0x4F, 0x60, 0x73, 0x4F, 0x4F, 0x4F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x61, 0x74, 0x45, 0x63, 0x75, 0x64, 0x75, 0x75, + 0x75, 0x63, 0x75, 0x75, 0x63, 0x63, 0x63, 0x63, 0x76, 0x75, 0x1B, 0x2C, 0x77, 0x2D, 0x2D, 0x2D, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x78, 0x1B, 0x75, 0x76, + 0x63, 0x63, 0x63, 0x63, 0x75, 0x75, 0x63, 0x75, 0x75, 0x75, 0x75, 0x75, 0x63, 0x45, 0x74, 0x79, + 0x5F, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, + 0x67, 0x12, 0x3D, 0x0E, 0x0F, 0x1E, 0x7A, 0x05, 0x10, 0x0E, 0x68, 0x2D, 0x2D, 0x2D, 0x2D, 0x2F, + 0x0E, 0x07, 0x06, 0x05, 0x0E, 0x10, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x7B, 0x7C, 0x7D, 0x31, 0x7E, 0x4B, 0x5F, 0x6B, 0x59, + 0x5A, 0x59, 0x59, 0x6B, 0x7F, 0x5B, 0x80, 0x81, 0x81, 0x80, 0x82, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x72, 0x83, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x85, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, + 0x4F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x61, + 0x1B, 0x45, 0x63, 0x76, 0x76, 0x76, 0x64, 0x64, 0x64, 0x64, 0x76, 0x64, 0x64, 0x75, 0x75, 0x75, + 0x76, 0x75, 0x1B, 0x2C, 0x89, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x2D, 0x2D, 0x2D, 0x2B, 0x1B, 0x75, 0x76, 0x75, 0x75, 0x75, 0x75, 0x64, 0x76, 0x64, 0x64, + 0x64, 0x64, 0x76, 0x76, 0x76, 0x63, 0x8A, 0x1B, 0x79, 0x5F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2F, 0x07, 0x0D, 0x0D, 0x1E, 0x20, 0x7A, 0x0D, + 0x11, 0x07, 0x8B, 0x2D, 0x2D, 0x8B, 0x0E, 0x07, 0x0F, 0x0D, 0x20, 0x1E, 0x11, 0x55, 0x78, 0x2D, + 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x8C, + 0x58, 0x5D, 0x8D, 0x41, 0x8E, 0x6B, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x4C, 0x04, 0x42, 0x90, + 0x69, 0x69, 0x91, 0x82, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x2D, 0x2D, 0x2D, 0x92, 0x84, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, + 0x59, 0x93, 0x94, 0x95, 0x95, 0x95, 0x96, 0x88, 0x4F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x97, 0x1A, 0x50, 0x63, 0x45, 0x50, 0x50, 0x50, 0x50, 0x50, + 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x76, 0x45, 0x75, 0x1B, 0x2C, 0x98, 0x2B, 0x2B, 0x2B, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x2B, 0x99, 0x1B, 0x75, 0x45, + 0x76, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x45, 0x63, 0x50, + 0x1A, 0x3C, 0x5F, 0x2B, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, + 0x5F, 0x0E, 0x11, 0x0D, 0x9A, 0x0D, 0x05, 0x0D, 0x07, 0x0E, 0x07, 0x2B, 0x67, 0x0E, 0x3D, 0x05, + 0x0D, 0x0D, 0x0D, 0x9A, 0x0D, 0x0E, 0x0F, 0x2B, 0x2B, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x77, 0x9B, 0x6A, 0x5D, 0x9C, 0x9D, 0x8E, 0x9E, 0x6B, 0x9F, 0x6B, + 0x89, 0xA0, 0xA1, 0xA2, 0x7F, 0x9E, 0x2D, 0xA3, 0xA4, 0xA5, 0xA5, 0xA4, 0xA6, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x2B, 0x92, 0x84, 0x59, 0xA7, 0xA7, + 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0x93, 0x93, 0x93, 0xA8, 0x96, 0x93, 0x85, + 0x4F, 0x2B, 0x2B, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x61, 0xA9, + 0x75, 0x76, 0x62, 0x3A, 0x3A, 0x62, 0x8A, 0x8A, 0xAA, 0x45, 0x3A, 0x62, 0x45, 0x45, 0x45, 0x45, + 0x45, 0x63, 0x1B, 0x44, 0x98, 0x99, 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x99, 0x99, 0x99, 0x5F, 0x1B, 0x63, 0x45, 0x45, 0x8A, 0x45, 0x45, 0x62, 0x3A, 0x45, 0xAA, + 0x8A, 0x8A, 0x62, 0x3A, 0x3A, 0x62, 0x76, 0x75, 0xA9, 0xAB, 0x98, 0x5F, 0x99, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x67, 0x55, 0x05, 0x2E, 0x05, 0x05, 0x05, + 0x10, 0x0E, 0x12, 0x06, 0x99, 0x3D, 0x07, 0x11, 0x0D, 0x0D, 0x2E, 0x9A, 0x0D, 0x11, 0x55, 0xAC, + 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0xAD, 0x7E, 0x6E, + 0xAE, 0xAF, 0x8E, 0x04, 0x4C, 0x59, 0x9F, 0xA2, 0xA2, 0xA2, 0xA2, 0xB0, 0x2D, 0x2D, 0x1D, 0x2B, + 0xA3, 0xB1, 0x7D, 0x7D, 0xB2, 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x99, 0x99, 0x99, 0x92, 0x84, 0x59, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, + 0xA7, 0xA7, 0xA7, 0x93, 0x96, 0x96, 0x93, 0x84, 0x92, 0x99, 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0xAB, 0xB3, 0x76, 0x76, 0x45, 0xB4, 0x45, 0x8A, 0x45, + 0x3A, 0xAA, 0x3A, 0x62, 0xAA, 0x3A, 0x3A, 0xAA, 0x62, 0x63, 0x1B, 0x44, 0x98, 0x99, 0x99, 0x99, + 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x5F, 0x1B, 0x63, 0x62, + 0xAA, 0x3A, 0x3A, 0xAA, 0x62, 0x3A, 0xAA, 0x3A, 0x45, 0x8A, 0x45, 0xB4, 0x45, 0x76, 0x76, 0xB3, + 0xB5, 0x65, 0xB6, 0x5F, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, + 0x99, 0x99, 0x0E, 0x07, 0x20, 0x0D, 0x13, 0x07, 0x55, 0x12, 0x0F, 0xB7, 0x99, 0x99, 0x07, 0x10, + 0x2E, 0x7A, 0x20, 0x1E, 0x0D, 0x0D, 0x07, 0x0F, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x99, 0x99, 0xB8, 0xB9, 0xBA, 0x9D, 0xBB, 0x2D, 0x4C, 0x6B, 0x4C, 0x4C, 0x4C, + 0x4C, 0x7F, 0x2D, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2D, 0xBC, 0xB1, 0xAE, 0xBD, 0x99, 0x99, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x92, 0x84, 0x59, 0xBE, 0xBE, + 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0x93, 0x93, 0x93, 0x93, 0x84, + 0x92, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x8E, + 0xBF, 0xC0, 0x8A, 0x76, 0x45, 0x50, 0x76, 0x50, 0xAA, 0x62, 0xAA, 0x45, 0x45, 0xAA, 0x3A, 0xB4, + 0xAA, 0x52, 0x1B, 0x44, 0x98, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x99, 0x99, 0x99, 0x5F, 0x1B, 0x52, 0xAA, 0xB4, 0x3A, 0xAA, 0x45, 0x45, 0xAA, 0x62, 0xAA, + 0x50, 0x76, 0x50, 0x45, 0x76, 0x8A, 0xC0, 0xB5, 0x44, 0xC1, 0x66, 0x99, 0x99, 0x8F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x99, 0x2F, 0x0E, 0x13, 0x07, 0x55, 0x12, + 0x06, 0xAC, 0xAC, 0x99, 0x99, 0x99, 0x07, 0x13, 0x0D, 0x7A, 0x1E, 0x3D, 0x0E, 0x07, 0x12, 0x06, + 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0xC2, 0xC2, + 0xC3, 0xC4, 0x6C, 0x6B, 0x4C, 0x4C, 0xC5, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x5F, 0x5F, 0x5F, 0x5F, + 0x04, 0xC3, 0xC7, 0xC8, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x99, 0x99, 0x99, 0xC9, 0x84, 0x59, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x59, 0x84, 0xC9, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xBF, 0xB3, 0x8A, 0x76, 0x50, 0x64, 0x76, + 0x8A, 0xAA, 0x3A, 0x45, 0x8A, 0x45, 0xAA, 0xCA, 0xCA, 0x52, 0x1B, 0x61, 0xB6, 0x8E, 0x8E, 0x99, + 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x1B, 0x52, 0xCA, + 0xCA, 0xAA, 0x45, 0x8A, 0x45, 0x3A, 0xAA, 0x8A, 0x76, 0x64, 0x50, 0x76, 0x8A, 0xB3, 0xB5, 0x61, + 0x97, 0xBB, 0x8E, 0x8E, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x12, 0x55, 0x12, 0x3D, 0x67, 0xCB, 0xCC, 0x8E, 0x8E, 0x8E, 0xCB, 0x07, 0x05, + 0x0D, 0x9A, 0x13, 0x55, 0x3D, 0xCD, 0x0E, 0x67, 0x5F, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x99, 0x99, 0x99, 0xCC, 0xCE, 0x6B, 0x4C, 0x6C, 0x6C, 0xC4, 0xC6, 0xCF, + 0xCF, 0xCF, 0xCF, 0xD0, 0x66, 0x66, 0x66, 0x66, 0x1D, 0xD1, 0x99, 0x99, 0x99, 0x99, 0x99, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0x59, 0xD2, 0xD2, + 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0x59, 0x84, + 0xC9, 0x8E, 0x8E, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0xBB, 0xD3, 0xB3, 0x45, 0x76, 0x76, 0x63, 0x63, 0x63, 0x75, 0x75, 0x75, 0x64, 0x64, 0x76, + 0x76, 0x50, 0x1B, 0x61, 0xB6, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x1B, 0x50, 0x76, 0x76, 0x64, 0x64, 0x75, 0x75, 0x75, 0x63, 0x63, + 0x63, 0x76, 0x76, 0x45, 0xB3, 0xD5, 0x61, 0x97, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x55, 0x67, 0xCB, 0xCC, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x07, 0x06, 0x9A, 0x20, 0x0D, 0x3D, 0x55, 0x67, 0x67, 0x06, 0xB7, + 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, + 0xD6, 0x4C, 0x2D, 0x2D, 0xD7, 0x1D, 0xD8, 0xD9, 0xDA, 0xDA, 0xD9, 0xDB, 0xBB, 0xBB, 0xBB, 0xBB, + 0x2D, 0xDC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0x1F, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1F, 0x84, 0xC9, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0x0B, 0xDD, 0xAA, 0x76, 0x64, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x44, 0xB6, 0x8E, 0x8E, 0x8E, + 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x64, 0x76, 0xAA, 0xDD, 0xD5, 0x61, 0x97, 0xBB, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xCC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xB7, 0x3D, 0x0F, 0x1E, 0x1E, + 0x0D, 0x0F, 0xCD, 0x0F, 0xCB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xC3, 0xC4, 0x2B, 0x2B, 0x2B, 0x2B, 0xDE, 0xDF, + 0xE0, 0xE0, 0xE1, 0xE2, 0xBB, 0xBB, 0xBB, 0xBB, 0x2B, 0xE3, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0xA7, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0xA7, 0x84, + 0xC9, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0xBB, 0x0B, 0xE4, 0x3A, 0x76, 0x1B, 0x6D, 0x61, 0x44, 0x2C, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x65, 0xBB, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xE5, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x44, 0x1B, + 0x76, 0x3A, 0xE4, 0xE6, 0x61, 0x97, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x07, 0x3D, 0x0F, + 0x67, 0x0F, 0x3D, 0x06, 0x10, 0x1E, 0x1E, 0x0D, 0x10, 0xCD, 0x3D, 0xCB, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, + 0xD1, 0x9E, 0x5F, 0x5F, 0x5F, 0x5F, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEB, 0xBB, 0xBB, 0xBB, 0xBB, + 0x5F, 0xEC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0xA7, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0xA7, 0x84, 0xC9, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xED, 0xE4, 0xB4, + 0x1B, 0x61, 0xEE, 0xB6, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x89, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0x89, + 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x1B, 0xB4, 0xE4, 0xBF, 0x61, 0x97, 0xBB, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x06, 0x07, 0x06, 0x0F, 0x0F, 0x05, 0x0D, 0x9A, 0x1E, 0x2E, 0x13, + 0x07, 0xCD, 0xCB, 0x68, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xEF, 0xDC, 0x1D, 0x66, 0x66, 0x66, 0x66, 0xF0, 0xF1, + 0xF2, 0xF2, 0xF1, 0xF3, 0xBB, 0xBB, 0xBB, 0xBB, 0x5F, 0xF4, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x71, 0xF5, 0x84, 0x19, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x84, + 0xF5, 0x71, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xED, 0xE4, 0x1B, 0x2C, 0x98, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x66, 0x1B, + 0xE4, 0xD3, 0x61, 0x97, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x0F, 0x3D, + 0x0F, 0x05, 0x2E, 0x1E, 0x9A, 0x0D, 0x0F, 0x07, 0x07, 0xCB, 0xB7, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x70, + 0xE3, 0x5F, 0xBB, 0xBB, 0xBB, 0xBB, 0xF0, 0xF2, 0xF2, 0xF2, 0xF2, 0xF0, 0xBB, 0xBB, 0xBB, 0xBB, + 0x5F, 0xF6, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0xF5, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xF5, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xF7, + 0xBF, 0xE5, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xED, 0x48, 0x2C, 0xC1, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xB7, 0x3D, 0x3D, 0x06, 0x0F, 0x0F, 0x3D, 0xCD, 0x0F, + 0xCB, 0xB7, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xCC, 0xE3, 0x8F, 0x5F, 0x5F, 0x5F, 0x5F, 0xF0, 0xF0, + 0xF0, 0xF0, 0xF0, 0xF0, 0x5F, 0x5F, 0x5F, 0x5F, 0x8F, 0xE3, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0x97, 0xEE, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xB6, + 0xEE, 0xB6, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x0F, 0x07, 0x07, 0x3D, 0x3D, 0x67, 0xCB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0xCE, 0xE3, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xE3, 0xDC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x68, 0xB7, 0xB7, 0xCC, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; \ No newline at end of file diff --git a/programs/cmm/browser/img/toolbar_icons.png b/programs/cmm/browser/img/toolbar_icons.png new file mode 100644 index 000000000..bb8cfdf4d Binary files /dev/null and b/programs/cmm/browser/img/toolbar_icons.png differ diff --git a/programs/cmm/browser/include/acid_0.1.htm b/programs/cmm/browser/include/acid_0.1.htm new file mode 100644 index 000000000..70131954c --- /dev/null +++ b/programs/cmm/browser/include/acid_0.1.htm @@ -0,0 +1,131 @@ +<!--doctype html public "-//w3c//dtd html 4.0 transitional//ru"--> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> + <title> Acid 0.1 + + + + +background + + HTML Viewer
    +
    + : cp1251, koi-8, cp866, Unicode.

    + + +C +r +e +a +t +e +d +b +y +L +e +e +n +c +y
    +
    + 2008-2012 + +

    + :

      +
    1. +
    2. +
    3. +
    4. +
    5. +
    +

    +
    + +
    +!
    +    !
    +        !
    +
    +              .
    +
    +
    + + + +Index.htm
    +Index.htm
    + - Index.htm
    +
    Kernel.mnt
    +index.htm#2.1.4
    +http://bash.im
    +Mail to leency
    +#2.1.4
    +
    +
    +
    + + + +
    + , + . . + . - : " & < > •   © ® „ “ — . ' . +
    + + + diff --git a/programs/cmm/browser/include/colors.h b/programs/cmm/browser/include/colors.h new file mode 100644 index 000000000..79ac17875 --- /dev/null +++ b/programs/cmm/browser/include/colors.h @@ -0,0 +1,193 @@ +// " " , - +// , + +struct color_spec { + char *name; + int rgb; +}; + +struct color_spec color_specs[] = { + "aliceblue", 0xF0F8FF, + "antiquewhite", 0xFAEBD7, + "aqua", 0x00FFFF, + "aquamarine", 0x7FFFD4, + "azure", 0xF0FFFF, + "beige", 0xF5F5DC, + "bisque", 0xFFE4C4, + "black", 0x000000, + "blanchedalmond",0xFFEBCD, + "blue", 0x0000FF, + "blueviolet", 0x8A2BE2, + "brown", 0xA52A2A, + "burlywood", 0xDEB887, + "cadetblue", 0x5F9EA0, + "chartreuse", 0x7FFF00, + "chocolate", 0xD2691E, + "coral", 0xFF7F50, + "cornflowerblue",0x6495ED, + "cornsilk", 0xFFF8DC, + "crimson", 0xDC143C, + "cyan", 0x00FFFF, + "darkblue", 0x00008B, + "darkcyan", 0x008B8B, + "darkgoldenrod", 0xB8860B, + "darkgray", 0xA9A9A9, + "darkgreen", 0x006400, + "darkkhaki", 0xBDB76B, + "darkmagenta", 0x8B008B, + "darkolivegreen",0x556B2F, + "darkorange", 0xFF8C00, + "darkorchid", 0x9932CC, + "darkred", 0x8B0000, + "darksalmon", 0xE9967A, + "darkseagreen", 0x8FBC8F, + "darkslateblue", 0x483D8B, + "darkslategray", 0x2F4F4F, + "darkturquoise", 0x00CED1, + "darkviolet", 0x9400D3, + "deeppink", 0xFF1493, + "deepskyblue", 0x00BFFF, + "dimgray", 0x696969, + "dodgerblue", 0x1E90FF, + "firebrick", 0xB22222, + "floralwhite", 0xFFFAF0, + "forestgreen", 0x228B22, + "fuchsia", 0xFF00FF, + "gainsboro", 0xDCDCDC, + "ghostwhite", 0xF8F8FF, + "gold", 0xFFD700, + "goldenrod", 0xDAA520, + "gray", 0x808080, + "green", 0x008000, + "greenyellow", 0xADFF2F, + "honeydew", 0xF0FFF0, + "hotpink", 0xFF69B4, + "indianred", 0xCD5C5C, + "indigo", 0x4B0082, + "ivory", 0xFFFFF0, + "khaki", 0xF0E68C, + "lavender", 0xE6E6FA, + "lavenderblush", 0xFFF0F5, + "lawngreen", 0x7CFC00, + "lemonchiffon", 0xFFFACD, + "lightblue", 0xADD8E6, + "lightcoral", 0xF08080, + "lightcyan", 0xE0FFFF, + "lightgoldenrodyellow", 0xFAFAD2, + "lightgreen", 0x90EE90, + "lightgrey", 0xD3D3D3, + "lightpink", 0xFFB6C1, + "lightsalmon", 0xFFA07A, + "lightseagreen", 0x20B2AA, + "lightskyblue", 0x87CEFA, + "lightslategray",0x778899, + "lightsteelblue",0xB0C4DE, + "lightyellow", 0xFFFFE0, + "lime", 0x00FF00, + "limegreen", 0x32CD32, + "linen", 0xFAF0E6, + "magenta", 0xFF00FF, + "maroon", 0x800000, + "mediumaquamarine",0x66CDAA, + "mediumblue", 0x0000CD, + "mediumorchid", 0xBA55D3, + "mediumpurple", 0x9370DB, + "mediumseagreen",0x3CB371, + "mediumslateblue",0x7B68EE, + "mediumspringgreen",0x00FA9A, + "mediumturquoise",0x48D1CC, + "mediumvioletred",0xC71585, + "midnightblue", 0x191970, + "mintcream", 0xF5FFFA, + "mistyrose", 0xFFE4E1, + "moccasin", 0xFFE4B5, + "navajowhite", 0xFFDEAD, + "navy", 0x000080, + "oldlace", 0xFDF5E6, + "olive", 0x808000, + "olivedrab", 0x6B8E23, + "orange", 0xFFA500, + "orangered", 0xFF4500, + "orchid", 0xDA70D6, + "palegoldenrod", 0xEEE8AA, + "palegreen", 0x98FB98, + "paleturquoise", 0xAFEEEE, + "palevioletred", 0xDB7093, + "papayawhip", 0xFFEFD5, + "peachpuff", 0xFFDAB9, + "peru", 0xCD853F, + "pink", 0xFFC0CB, + "plum", 0xDDA0DD, + "powderblue", 0xB0E0E6, + "purple", 0x800080, + "red", 0xFF0000, + "rosybrown", 0xBC8F8F, + "royalblue", 0x4169E1, + "saddlebrown", 0x8B4513, + "salmon", 0xFA8072, + "sandybrown", 0xF4A460, + "seagreen", 0x2E8B57, + "seashell", 0xFFF5EE, + "sienna", 0xA0522D, + "silver", 0xC0C0C0, + "skyblue", 0x87CEEB, + "slateblue", 0x6A5ACD, + "slategray", 0x708090, + "snow", 0xFFFAFA, + "springgreen", 0x00FF7F, + "steelblue", 0x4682B4, + "tan", 0xD2B48C, + "teal", 0x008080, + "thistle", 0xD8BFD8, + "tomato", 0xFF6347, + "turquoise", 0x40E0D0, + "violet", 0xEE82EE, + "wheat", 0xF5DEB3, + "white", 0xFFFFFF, + "whitesmoke", 0xF5F5F5, + "yellow", 0xFFFF00, + "yellowgreen", 0x9ACD32, +0}; + +dword StrToCol(char* htmlcolor) +{ + dword j=1, + color=0, + textlen=0; + char ch=0x00; + + if (ESBYTE[htmlcolor]<>'#') return text_colors[0]; + + textlen = strlen(htmlcolor); + + if (textlen==7) || (textlen==4) + { + FOR (; j='0') && (ch<='9')) ch -= '0'; + IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; + IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; + color = color*0x10 + ch; + if (textlen==4) color = color*0x10 + ch; //#abc ->> #aabbcc ( !!1) + } + return color; + } + + return text_colors[0]; +} + +dword GetColor(char* color_str) +{ + int ii; + + if (ESBYTE[color_str] == '#') + return StrToCol(color_str); + else + for (ii=0; color_specs[ii].name!=0; ii++) + { + if (!strcmp(color_str, color_specs[ii].name)) return color_specs[ii].rgb; + } + + return text_colors[0]; +} diff --git a/programs/cmm/browser/include/history.h b/programs/cmm/browser/include/history.h new file mode 100644 index 000000000..5f77d41f2 --- /dev/null +++ b/programs/cmm/browser/include/history.h @@ -0,0 +1,59 @@ +struct UrlsHistory { + dword CurrentUrl(); + void AddUrl(); + byte GoBack(); + byte GoForward(); +}; + +UrlsHistory BrowserHistory; + +struct path_string { +char Item[4096]; +}; + +#define MAX_HISTORY_NUM 40 +path_string history_list[MAX_HISTORY_NUM]; +int history_num; +int history_current; + +dword UrlsHistory::CurrentUrl() +{ + return #history_list[history_current].Item; +} + +void UrlsHistory::AddUrl() // - +{ + int i; + if (history_num>0) && (!strcmp(#URL,#history_list[history_current].Item)) return; + + if (history_current>=MAX_HISTORY_NUM-1) + { + history_current/=2; + for (i=0; iGetActiveProcess()) ExitProcess(); + + id1=mm.y/ITEM_HEIGHT; + if (id1<0) || (id1+1>items_num) || (mm.x<0) || (mm.x>ITEM_WIDTH) break; + if (mm.lkm) || (mm.pkm) + { + WB1.Scan(ITEMS_LIST[items_cur*2+1]); + ExitProcess(); + } + if (items_cur<>id1) + { + items_cur=id1; + goto _ITEMS_DRAW; + } + break; + + case evButton: + id1=GetButtonID()-10; + WB1.Scan(ITEMS_LIST[id1*2+1]); + ExitProcess(); + break; + + case evKey: + key = GetKey(); + if (key==27) ExitProcess(); + if (key==178) && (items_cur) + { + items_cur--; + goto _ITEMS_DRAW; + } + if (key==177) && (items_cur+1items_cur) EDX=0xFFFFFF; else EDX=0x94AECE; + DrawBar(1, i*ITEM_HEIGHT+1, ITEM_WIDTH-1, ITEM_HEIGHT, EDX); + WriteText(8,i*ITEM_HEIGHT+6,0x80,0x000000,ITEMS_LIST[i*2],0); + if (ITEMS_LIST[i*2+1]==1) && (pre_text==2) DrawBar(ITEM_WIDTH-18, i*ITEM_HEIGHT+8, 4, 4, 0x444444); + if (ITEMS_LIST[i*2+1]==5) && (use_truetype==1) DrawBar(ITEM_WIDTH-18, i*ITEM_HEIGHT+8, 4, 4, 0x444444); + } + DrawBar(33, cur_encoding+1*ITEM_HEIGHT+8, 4, 4, 0x444444); // + } +} + + + + + diff --git a/programs/cmm/browser/include/parce_tag.h b/programs/cmm/browser/include/parce_tag.h new file mode 100644 index 000000000..15ab1e06f --- /dev/null +++ b/programs/cmm/browser/include/parce_tag.h @@ -0,0 +1,50 @@ +unsigned int GetNextParam() +{ + byte kavichki = false; + int i = strlen(#tagparam) - 1; + + if (!tagparam) return 0; + + WHILE((i > 0) && ((tagparam[i] == '"') || (tagparam[i] == ' ') || (tagparam[i] == '\'') || (tagparam[i] == '/'))) + { + IF (tagparam[i] == '"') || (tagparam[i] == '\'') kavichki=tagparam[i]; + tagparam[i] = 0x00; + i--; + } + + if (kavichki) + { + i=strrchr(#tagparam, kavichki); + if (i>sizeof(options)) + strcpy(#options, #tagparam + sizeof(options)); + else + strcpy(#options, #tagparam + i); + } + else + { + WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=strrchr(#tagparam, '=')+1; + i++; + if (i>sizeof(options)) + strcpy(#options, #tagparam + sizeof(options)); + else + strcpy(#options, #tagparam + i); + + WHILE (options[0] == ' ') strcpy(#options, #options+1); + } + tagparam[i] = 0x00; + + FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--) + { + IF (tagparam[i] == '=') // + tagparam[i + 1] = 0x00; + } + + if (i>sizeof(parametr)) + strcpy(#parametr, #tagparam + sizeof(parametr)); + else + strcpy(#parametr, #tagparam + i + 1); + + tagparam[i] = 0x00; + + return 1; +} \ No newline at end of file diff --git a/programs/cmm/browser/include/some_code.h b/programs/cmm/browser/include/some_code.h new file mode 100644 index 000000000..94112be6e --- /dev/null +++ b/programs/cmm/browser/include/some_code.h @@ -0,0 +1,66 @@ +// +#define BACK 300 +#define FORWARD 301 +#define REFRESH 302 +#define HOME 303 +#define NEWTAB 304 +#define GOTOURL 305 +#define SEARCHWEB 306 +#define ID1 178 +#define ID2 177 + +#define _WIN 0 +#define _DOS 1 +#define _KOI 2 +#define _UTF 3 + + +dword get_URL_part(int len) { + char temp1[sizeof(URL)]; + strcpy(#temp1, #URL); + temp1[len] = 0x00; + return #temp1; +} + +inline byte chTag(dword text) {return strcmp(#tag,text);} + + +void GetURLfromPageLinks(int id) +{ + int i, j = 0; + for (i = 0; i <= id - 401; i++) + { + do + { + j++; + if (j>=strlen(#page_links)) return; // + } + while (page_links[j] <>'|'); + } + page_links[j] = 0x00; + strcpy(#URL, #page_links+strrchr(#page_links, '|')); +} + + +// , +// : +// , +// +// .. :) + +inline void Skew(dword x,y,w,h) +{ + dword italic_buf; + int tile_height=2, // + shift=-2, // + i, skin_height; + + italic_buf = mem_Alloc(w*h*3); + skin_height = GetSkinHeight(); + CopyScreen(italic_buf, x+Form.left+2, y+Form.top+skin_height, w, h); + + FOR (i=0;i*tile_height", +"#62", ">", + +"minus", "-", +"ndash", "-", +"mdash", "-", //-- +"#8722", "-", +"#8211", "-", +"#151", "-", +"#149", "-", + +"rsquo", "'", +"#39", "'", +"#96", "'", +"#8217", "'", + +"quot", "\"", +"#34", "\"", +"ldquo", "\"", +"rdquo", "\"", +"#8222", "\"", +"#8221", "\"", + +"laquo", "<<", +"#171", "<<", +"raquo", ">>", +"#187", ">>", + +"uarr", "\24", +"darr", "\25", +"rarr", "\26", +"larr", "\27", + +"#1028", "\242", +"#1030", "I", +"#1031", "\244", + +"#8470", "N", +"bull", "-", // +"percnt","%", + +0}; + + +byte unicode_chars[] = "h\243i\105\244\0"; + +unsigned char GetUnicodeSymbol() +{ + int j; + + for (j=0; unicode_tags[j]!=0; j+=2;) + { + if (!strcmp(#tag, unicode_tags[j])) + { + strcat(#line, unicode_tags[j+1]); + return NULL; + } + } + + rez = atoi(#tag + 1) - 1040; + if (tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5) + { + return unicode_chars[rez]; + } + + strcat(#line,#tag); // , - + return NULL; +} diff --git a/programs/cmm/dict/compile.bat b/programs/cmm/dict/compile.bat new file mode 100644 index 000000000..3d857c897 --- /dev/null +++ b/programs/cmm/dict/compile.bat @@ -0,0 +1,5 @@ +del dicty +..\C--\C-- dicty +rename dicty.com dicty +del warning.txt +pause \ No newline at end of file diff --git a/programs/cmm/dict/dicty.c b/programs/cmm/dict/dicty.c new file mode 100644 index 000000000..8a2ec4512 --- /dev/null +++ b/programs/cmm/dict/dicty.c @@ -0,0 +1,274 @@ +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\file_system.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +#include "..\lib\edit_box_lib.h" + +char title[]= "Dictionary v1.0"; +char direction[] = "Translate direction:"; +char translate_caption[] = "Translate"; +char dict_not_found[] = "Dictionary not found"; +char dict_opened[] = "Dictionary loaded"; +char empty_word[] = "Type a word to translate"; +//char direction[] = " :"w; + + +int mouse_dd; +edit_box edit1= {200,20,16,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,248,#edword,#mouse_dd,100000000000010b}; + +system_colors sc; +proc_info Form; + +char edword[4096], translate_result[4096], search_word[4096], cur_dict[4096]; +#define DEFAULT_DICT_DIRECROTY "dictionaries/" +#define DEFAULT_DICT "eng - rus.dict"; +dword files_buf; +dword buff, fsize; + + +void main() +{ + int id; + word key; + + mem_Init(); + load_dll2(boxlib, #edit_box_draw,0); + + + program_path[strrchr(#program_path, '/')] = 0; // / + strcpy(#program_path+strlen(#program_path), DEFAULT_DICT_DIRECROTY); + SetCurDir(#program_path); + + strcpy(#cur_dict, DEFAULT_DICT); + OpenDictionary(#cur_dict); + + if (param) + { + strcpy(#edword, #param); + edit1.size=edit1.pos=strlen(#edword); + Translate(); + } + + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + edit_box_mouse stdcall (#edit1); + break; + + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) + { + Translate(); + DrawTranslation(); + } + + if (id==11) + { + ShowDictList(); + break; + } + if (id==12) + { + Draw_Window(); + break; + } + + if (id>=20) + { + strcpy(#cur_dict, id-20*304+files_buf+72); + OpenDictionary(#cur_dict); + } + break; + + case evKey: + key = GetKey(); + IF (key==013) //Enter + { + Translate(); + DrawTranslation(); + } + + EAX=key<<8; + edit_box_key stdcall(#edit1); + break; + + case evReDraw: + Draw_Window(); + break; + } + } +} + + +void Draw_Window() +{ + sc.get(); + DefineAndDrawWindow(215,120,400,250,0x73,sc.work,#title); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) return; // , + if (Form.height<140) MoveSize(OLD,OLD,OLD,140); + if (Form.width<400) MoveSize(OLD,OLD,400,OLD); + + DrawBar(0, 0, Form.width-9, 69, sc.work); + edit1.focus_border_color=sc.work_graph; + edit1.width=Form.width-edit1.left-edit1.left-9; + edit_box_draw stdcall(#edit1); // + DefineButton(edit1.left+edit1.width-80,35, 80,20, 10, sc.work_button); + WriteText(edit1.left+edit1.width-80+14,35+7,0x80,sc.work_button_text,#translate_caption, 0); + DrawBar(0, 69, Form.width-9, 1, sc.work_graph); + + WriteText(edit1.left,35+7,0x80,sc.work_text,#direction, 0); + DefineButton(edit1.left+130,35, 120,20, 11, sc.work_button); + WriteText(edit1.left+130+112,35+7,0x80,sc.work_button_text,"\x19", 0); + DrawBar(edit1.left+130+1,36, 107,19, 0xFFFFFF); + WriteText(edit1.left+130+8,35+7,0x80,0x000000,#cur_dict, 0); + + + DrawTranslation(); +} + + +void OpenDictionary(dword dict_path) +{ + dword j, words_count=0; + + mem_Free(buff); + buff = mem_Alloc(3500576); + ReadFile(0, 3500576, buff, dict_path); + IF (EAX<>6) + { + fsize=0; + strcpy(#translate_result, #dict_not_found); + Draw_Window(); + return; + } + fsize=EBX; + + strcpy(#search_word, dict_path); + strcpy(#translate_result, #dict_opened); + Draw_Window(); +} + +void ShowDictList() +{ + int j, fcount=10; + + mem_Free(files_buf); + files_buf= mem_Alloc(32); + ReadDir(0, files_buf, #program_path); + fcount=ESDWORD[files_buf+8]; + mem_Free(files_buf); + files_buf = mem_Alloc(fcount+1*304+32); + + ReadDir(fcount, files_buf, #program_path); + + fcount-=2; + mem_Move(files_buf,files_buf+608,fcount*304); + + + DefineButton(0,0, Form.width,Form.height, 12+BT_HIDE+BT_NOFRAME, sc.work_button); + for (j=0; jsearch_word) InfType = IGNORE; // + } + if (InfType==TRANSLATION) strcat(#w_translation, #bukva); + } + } + if (!translate_result) strcpy(#translate_result, "Word is'nt found in the dictionary"); +} + + +void DrawTranslation() +{ + int text_break=0; + char tt[4096]=''; + + int y_pos=70, skin_height=GetSkinHeight(); + char draw_buf[4096]; + strcpy(#draw_buf, #translate_result); + + DrawBar(0, y_pos, Form.width-9, Form.height - y_pos-skin_height-4, 0xFFFFFF); + strttl(#draw_buf); + WriteText(10+1, y_pos+8, 0x90, 0x800080, #search_word, 0); + WriteText(10 , y_pos+8, 0x90, 0x800080, #search_word, 0); + while (draw_buf) + { + text_break= Form.width/6-6; + if (text_break>strlen(#draw_buf)) + { + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + return; + } + while (draw_buf[text_break]<>' ') && (text_break>0) text_break--; + strcpy(#tt, #draw_buf+text_break+1); + draw_buf[text_break]=0x0; + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + strcpy(#draw_buf, #tt); + y_pos+=12; + if (y_pos+24+skin_height+12>Form.height) return; // + } +} + + +stop: diff --git a/programs/cmm/dict/dicty_.c b/programs/cmm/dict/dicty_.c new file mode 100644 index 000000000..ff6aecf81 --- /dev/null +++ b/programs/cmm/dict/dicty_.c @@ -0,0 +1,306 @@ +//dict_path > cur_dict + +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\file_system.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +#include "..\lib\edit_box_lib.h" + +unsigned char title[]= "Dictionary v1.0"; +unsigned char direction[] = "Translate direction:"; +unsigned char translate_caption[] = "Translate"; +unsigned char dict_not_found[] = "Dictionary not found"; +unsigned char dict_opened[] = "Dictionary loaded"; +unsigned char empty_word[] = "Type a word to translate"; +//char direction[] = " :"w; + + +int mouse_dd; +edit_box edit1= {200,20,16,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,248,#edword,#mouse_dd,100000000000010b}; + +system_colors sc; +proc_info Form; + +unsigned char edword[4096], translate_result[4096], search_word[4096], cur_dict[4096]; +#define DEFAULT_DICT_DIRECROTY "dictionaries/" +#define DEFAULT_DICT "eng - rus.dict"; +dword files_buf; +dword buff, fsize; + + +void main() +{ + int id; + word key; + + mem_Init(); + load_dll2(boxlib, #edit_box_draw,0); + + + program_path[strrchr(#program_path, '/')] = 0; // / + strcpy(#program_path+strlen(#program_path), DEFAULT_DICT_DIRECROTY); + SetCurDir(#program_path); + + strcpy(#cur_dict, DEFAULT_DICT); + OpenDictionary(#cur_dict); + + if (param) + { + strcpy(#edword, #param); + edit1.size=edit1.pos=strlen(#edword); + Translate(); + } + + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + edit_box_mouse stdcall (#edit1); + break; + + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) + { + Translate(); + DrawTranslation(); + } + + if (id==11) + { + ShowDictList(); + break; + } + if (id==12) + { + Draw_Window(); + break; + } + + if (id>=20) + { + strcpy(#cur_dict, id-20*304+files_buf+72); + OpenDictionary(#cur_dict); + } + break; + + case evKey: + key = GetKey(); + IF (key==013) //Enter + { + Translate(); + DrawTranslation(); + } + + EAX=key<<8; + edit_box_key stdcall(#edit1); + + //LiveSearch(); + break; + + case evReDraw: + Draw_Window(); + break; + } + } +} + +/*void LiveSearch() +{ + dword bj, i; + byte IsNativeWord=1; + unsigned char native[256]; + unsigned char bukovka; + + for (bj=0; bjnative[i]) goto __NE_RAVNO; + debug(#native); + __NE_RAVNO: + native = '\0'; + IsNativeWord = 0; + } + if (IsNativeWord==1) native[strlen(#native)] = bukovka; + } +}*/ + + +void Translate() +{ + dword tj; + char w_native[100], w_translation[100], bukva[1]; + + byte InfType; + #define NATIVE_WORD 0 + #define TRANSLATION 1 + #define IGNORE 2 + + if (!fsize) return; + + translate_result = 0; + strcpy(#search_word, #edword); + strupr(#search_word); + + if (!edword) + { + strcpy(#translate_result, #empty_word); + return; + } + + for (tj=0; tjsearch_word) InfType = IGNORE; // + } + if (InfType==TRANSLATION) strcat(#w_translation, #bukva); + } + } + if (!translate_result) strcpy(#translate_result, "Word is'nt found in the dictionary"); +} + + +void OpenDictionary(dword dict_path) +{ + dword j, words_count=0; + + mem_Free(buff); + buff = mem_Alloc(3500576); + ReadFile(0, 3500576, buff, dict_path); + IF (EAX<>6) + { + fsize=0; + strcpy(#translate_result, #dict_not_found); + Draw_Window(); + return; + } + fsize=EBX; + + strcpy(#search_word, dict_path); + strcpy(#translate_result, #dict_opened); + Draw_Window(); +} + + +void ShowDictList() +{ + int j, fcount=10; + + mem_Free(files_buf); + files_buf= mem_Alloc(32); + ReadDir(0, files_buf, #program_path); + fcount=ESDWORD[files_buf+8]; + mem_Free(files_buf); + files_buf = mem_Alloc(fcount+1*304+32); + + ReadDir(fcount, files_buf, #program_path); + + fcount-=2; + mem_Move(files_buf,files_buf+608,fcount*304); + + + DefineButton(0,0, Form.width,Form.height, 12+BT_HIDE+BT_NOFRAME, sc.work_button); + for (j=0; jstrlen(#draw_buf)) + { + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + return; + } + while (draw_buf[text_break]<>' ') && (text_break>0) text_break--; + strcpy(#tt, #draw_buf+text_break+1); + draw_buf[text_break]=0x0; + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + strcpy(#draw_buf, #tt); + y_pos+=12; + if (y_pos+24+skin_height+12>Form.height) return; // + } +} + + +void Draw_Window() +{ + sc.get(); + DefineAndDrawWindow(215,120,400,250,0x73,sc.work,#title); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) return; // , + if (Form.height<140) MoveSize(OLD,OLD,OLD,140); + if (Form.width<400) MoveSize(OLD,OLD,400,OLD); + + DrawBar(0, 0, Form.width-9, 69, sc.work); + edit1.focus_border_color=sc.work_graph; + edit1.width=Form.width-edit1.left-edit1.left-9; + edit_box_draw stdcall(#edit1); // + DefineButton(edit1.left+edit1.width-80,35, 80,20, 10, sc.work_button); + WriteText(edit1.left+edit1.width-80+14,35+7,0x80,sc.work_button_text,#translate_caption, 0); + DrawBar(0, 69, Form.width-9, 1, sc.work_graph); + + WriteText(edit1.left,35+7,0x80,sc.work_text,#direction, 0); + DefineButton(edit1.left+130,35, 120,20, 11, sc.work_button); + WriteText(edit1.left+130+112,35+7,0x80,sc.work_button_text,"\x19", 0); + DrawBar(edit1.left+130+1,36, 107,19, 0xFFFFFF); + WriteText(edit1.left+130+8,35+7,0x80,0x000000,#cur_dict, 0); + + DrawTranslation(); +} + + +stop: diff --git a/programs/cmm/lib/dll.h b/programs/cmm/lib/dll.h new file mode 100644 index 000000000..c32cdac24 --- /dev/null +++ b/programs/cmm/lib/dll.h @@ -0,0 +1,173 @@ +//Asper +char a_libdir[43] = "/sys/lib/\0"; + + +//proc dll.Load, import_table:dword +int dll_Load(dword import_table) +{ + $mov esi, import_table + @next_lib: $mov edx, DSDWORD[esi] + $or edx,edx + $jz exit_ + $push esi + $mov esi,DSDWORD[esi+4] + $mov edi,#a_libdir + + $push edi + $push esi + EAX=strlen(#a_libdir); + $pop esi + $pop edi + $add edi, eax //9 + + @loc01: $lodsb + $stosb + $or al,al + $jnz loc01 + + //IntToStr(EBX); + //$push edx + //WriteDebug(#a_libdir); + //$pop edx + //mcall 68,19,a_libdir + $mov eax, 68 + $mov ebx, 19 + $mov ecx,#a_libdir + $int 0x40 + + $or eax,eax + $jz fail + //stdcall dll.Link,eax,edx + dll_Link(EAX, EDX); + $push eax + $mov eax, DSDWORD [eax] + $cmp DSDWORD [eax], 'lib_' + $pop eax + //$jnz loc02 + //IntToStr(EBX); + //$push eax + //WriteDebug(DSDWORD[EAX]); + //$pop eax + //stdcall dll.Init,[eax+4] + //dll_Init(DSDWORD[EAX]); //dll_Init(DSDWORD[EAX+4]); + @loc02: + $pop esi + $add esi,8 + $jmp next_lib + @exit_: $xor eax,eax + return 0; + @fail: $add esp,4 + $xor eax,eax + $inc eax + return -1; +} + +//proc dll.Link, exp:dword,imp:dword +void dll_Link(dword exp, imp) +{ + $push eax + $mov esi, imp + $test esi, esi + $jz done + @next: $lodsd + $test eax,eax + $jz done + + //stdcall dll.GetProcAddress,[exp],eax + dll_GetProcAddress(exp,EAX); + $or eax,eax + $jz loc03 + + $mov DSDWORD[esi-4],eax + $jmp next + @loc03: + $mov DSDWORD[esp],0 + @done: $pop eax +} + +//proc dll.Init, dllentry:dword +void dll_Init(dword dllentry) +{ + $pushad + EAX=#mem_Alloc; + EBX=#mem_Free; + ECX=#mem_ReAlloc; + EDX=#dll_Load; + DSDWORD [dllentry+4] stdcall (); + $popad +} + +//proc dll.GetProcAddress, exp:dword,sz_name:dword +dword dll_GetProcAddress(dword exp, sz_name) +{ + $push esi + $mov edx, exp + $xor eax,eax + @next: $or edx,edx + $jz end_ + $cmp edx,0 + $jz end_ + strcmp(DSDWORD[EDX],sz_name); + $test eax,eax + $jz ok + $add edx,8 + $jmp next + @ok: + $mov eax, DSDWORD[edx+4] + @end_: + $pop esi + return EAX; +} + + +int load_dll2(dword dllname, import_table, byte need_init) +{ + //dword dllentry=0; +// load DLL + $mov eax, 68 + $mov ebx, 19 + ECX=dllname; + $int 0x40 + $test eax, eax + $jz exit01 + +// initialize import + $mov edx,eax + ESI=import_table; + +@import_loop01: + $lodsd + $test eax,eax + $jz import_done01 + $push edx +@import_find01: + $mov ebx,DSDWORD[EDX] + $test ebx, ebx + $jz exit01 + $push eax +@nex101: + $mov cl,DSBYTE[EAX]; + $cmp cl,DSBYTE[EBX]; + $jnz import_find_next01 + $test cl,cl + $jz import_found01 + $inc eax + $inc ebx + $jmp nex101 +@import_find_next01: + $pop eax + $add edx, 8 + $jmp import_find01 +@import_found01: + $pop eax + $mov eax,DSDWORD[edx+4] + $mov DSDWORD[esi-4],eax + $pop edx + + $jmp import_loop01 +@import_done01: + IF (need_init) dll_Init(EDX); + return 0; +@exit01: + return -1; +} diff --git a/programs/cmm/lib/edit_box_lib.h b/programs/cmm/lib/edit_box_lib.h new file mode 100644 index 000000000..0822183a8 --- /dev/null +++ b/programs/cmm/lib/edit_box_lib.h @@ -0,0 +1,49 @@ +//BOX_LIB +dword boxlib = #aEdit_box_lib; //Asper +char aEdit_box_lib[22]="/sys/lib/box_lib.obj\0"; //Asper + +dword edit_box_draw = #aEdit_box_draw; +dword edit_box_key = #aEdit_box_key; +dword edit_box_mouse = #aEdit_box_mouse; +dword version_ed = #aVersion_ed; + +dword am__ = 0x0; +dword bm__ = 0x0; + +char aEdit_box_draw[9] = "edit_box\0"; +char aEdit_box_key[13] = "edit_box_key\0"; +char aEdit_box_mouse[15] = "edit_box_mouse\0"; +char aVersion_ed[11] = "version_ed\0"; + +char aCheck_box_draw [15] = "check_box_draw\0"; +char aCheck_box_mouse [16] = "check_box_mouse\0"; +char aVersion_ch [11] = "version_ch\0"; + +char aOption_box_draw [16] = "option_box_draw\0"; +char aOption_box_mouse[17] = "option_box_mouse\0"; +char aVersion_op [11] = "version_op\0" ; + + +struct edit_box{ +dword width, left, top, color, shift_color, focus_border_color, blur_border_color, +text_color, max, text, mouse_variable, flags, size, pos, offset, cl_curs_x, cl_curs_y, shift, shift_old; +}; + +//ed_width equ [edi] ;ਭ +//ed_left equ [edi+4] ; +//ed_top equ [edi+8] ; +//ed_color equ [edi+12] ;梥 䮭 +//shift_color equ [edi+16] ;=0x6a9480 +//ed_focus_border_color equ [edi+20] ;梥 ࠬ +//ed_blur_border_color equ [edi+24] ;梥 ⨢ +//ed_text_color equ [edi+28] ;梥 ⥪ +//ed_max equ [edi+32] ;- ᨬ ᨬ쭮 +//ed_text equ [edi+36] ;㪠⥫ +//ed_flags equ [edi+40] ;䫠 +//ed_size equ [edi+42] ;- ᨬ +//ed_pos equ [edi+46] ; +//ed_offset equ [edi+50] ;ᬥ饭 +//cl_curs_x equ [edi+54] ;। न +//cl_curs_y equ [edi+58] ;। न +//ed_shift_pos equ [edi+62] ; +//ed_shift_pos_old equ [edi+66] ;஥ diff --git a/programs/cmm/lib/encoding.h b/programs/cmm/lib/encoding.h new file mode 100644 index 000000000..630eb622f --- /dev/null +++ b/programs/cmm/lib/encoding.h @@ -0,0 +1,182 @@ + +inline fastcall void wintodos( ESI) +{ + while (BL=ESBYTE[ESI]) + { + IF (BL>=192) + { + IF (BL>=240) ESBYTE[ESI] = BL - 16; + ELSE ESBYTE[ESI] = BL - 64; + } + ELSE + { + IF (BL==178) ESBYTE[ESI] = 73; //I + IF (BL==179) ESBYTE[ESI] = 105; //i + IF (BL==175) ESBYTE[ESI] = 244; //J + IF (BL==191) ESBYTE[ESI] = 245; //j + IF (BL==170) ESBYTE[ESI] = 242; //E + IF (BL==186) ESBYTE[ESI] = 243; //e + IF (BL==168) ESBYTE[ESI] = 240; // + IF (BL==184) ESBYTE[ESI] = 'e'; //e + IF (BL==180) ESBYTE[ESI] = 254; // + IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34; + IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45; + } + ESI++; + } +} + + +byte mas[66] = "椥娩㦢Ꞁ"; +inline fastcall void koitodos( EDI) +{ + WHILE (BL=ESBYTE[EDI]) + { + IF (BL >= 0xC0) + { + BL -= 0xC0; + ESBYTE[EDI] = mas[BL]; + } + //IF (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i'; + EDI++; + } +} + +//Asper, lev +//uncomplete +inline fastcall void utf8rutodos( ESI) +{ + EDI=ESI; + while (BL=ESBYTE[ESI]) + { + IF (BL == 0xD0) || (BL == 0xD1) EDI--; + else IF (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; // + else IF (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; // + //0xE2 0x80 - + else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80) + SWITCH (ESBYTE[ESI+2]) + { + case 0x93: //long defis + CASE 0x94: + { + ESBYTE[EDI] = '-'; + ESI+=2; + BREAK; + } + CASE 0xA2: //central point + { + ESBYTE[EDI] = '*'; + ESI+=2; + BREAK; + } + CASE 0xA6: // + { + ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.'; + EDI+=2; + ESI+=2; + break; + } + } + + else IF (BL == 0xC2) // ? + SWITCH(ESBYTE[ESI+1]) { + case 0xAB: //" + CASE 0xBB: //" + { + ESBYTE[EDI] = '\"'; + ESI++; + BREAK; + } + CASE 0xB7: // _ + { + ESBYTE[EDI] = '_'; + ESI++; + BREAK; + } + CASE 0xA0: // Alt+160 - + { + ESBYTE[EDI] = ' '; + ESI++; + BREAK; + } + CASE 0xB0: // + { + ESBYTE[EDI] = '\29'; + ESI++; + BREAK; + } + CASE 0xA9: // (c) --- _ + { + ESBYTE[EDI] = 'c'; + //ESBYTE[EDI] = '('; + //ESBYTE[EDI+1] = 'c'; + //ESBYTE[EDI+2] = ')'; + //EDI+=2; + ESI++; + BREAK; + } + CASE 0xAE: // (r) + { + ESBYTE[EDI] = 'r'; + //ESBYTE[EDI] = '('; + //ESBYTE[EDI+1] = 'r'; + //ESBYTE[EDI+2] = ')'; + //EDI+=2; + ESI++; + BREAK; + } + } + + ELSE IF (BL >= 0x90) && (BL <= 0xAF) + { + BL -= 0x10; + ESBYTE[EDI] = BL; + } + ELSE IF (BL >= 0x80) && (BL <= 0x8F) + { + BL += 0x60; + ESBYTE[EDI] = BL; + } + ELSE IF (BL >= 0xB0) && (BL <= 0xBF) + { + BL -= 0x10; + ESBYTE[EDI] = BL; + } + ELSE ESBYTE[EDI] = BL; + ESI++; + EDI++; + } + WHILE (EDI='0') && (ch<='9')) ch -= '0'; + IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; + IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; + symbol = symbol*0x10 + ch; + } + wintodos(#symbol); + AL=symbol; +} + +/* +int hex2char(dword c) +{ + if (c <=9) + return (c+48); + + return (c - 10 + 'a'); +}*/ diff --git a/programs/cmm/lib/figures.h b/programs/cmm/lib/figures.h new file mode 100644 index 000000000..3cb8be8e3 --- /dev/null +++ b/programs/cmm/lib/figures.h @@ -0,0 +1,33 @@ +void DrawRectangle(dword x,y,width,height,color1) +{ + DrawBar(x,y,width,1,color1); + DrawBar(x,y+height,width,1,color1); + DrawBar(x,y,1,height,color1); + DrawBar(x+width,y,1,height+1,color1); +} + +void DrawRectangle3D(dword x,y,width,height,color1,color2) +{ + DrawBar(x,y,width+1,1,color1); + DrawBar(x,y+1,1,height-1,color1); + DrawBar(x+width,y+1,1,height,color2); + DrawBar(x,y+height,width,1,color2); +} + +void DrawCaptButton(dword x,y,width,height,id,color,text,text_len) +{ + DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); + WriteText(-text_len*6+width/2+x+1,height/2-3+y,0x80,0,text,0); +} + +void DrawCircle(int x, y, r) +{ + int i; + float px=0, py=r, ii = r * 3.1415926 * 2; + FOR (i = 0; i < ii; i++) + { + PutPixel(px + x, y - py, 0); + px = py / r + px; + py = -px / r + py; + } +} \ No newline at end of file diff --git a/programs/cmm/lib/file_system.h b/programs/cmm/lib/file_system.h new file mode 100644 index 000000000..0408ee3fc --- /dev/null +++ b/programs/cmm/lib/file_system.h @@ -0,0 +1,208 @@ +struct f70{ + dword func; + dword param1; + dword param2; + dword param3; + dword param4; + char rezerv; + dword name; +}; + +struct BDVK{ + dword attr; + byte type_name; + byte rez1, rez2, rez3; + dword timecreate; + dword datecreate; + dword timelastaccess; + dword datelastaccess; + dword timelastedit; + dword datelastedit; + dword sizelo; + dword sizehi; + char name[518]; +}; + + +/////////////////////////// +// // +/////////////////////////// +f70 run_file_70; +:int RunProgram(dword run_path, run_param) +{ + run_file_70.func = 7; + run_file_70.param1 = + run_file_70.param3 = + run_file_70.param4 = + run_file_70.rezerv = 0; + run_file_70.param2 = run_param; + run_file_70.name = run_path; + $mov eax,70 + $mov ebx,#run_file_70.func + $int 0x40 +} + +/////////////////////////// +// // +/////////////////////////// +f70 create_dir_70; +:int CreateDir(dword new_folder_path) +{ + create_dir_70.func = 9; + create_dir_70.param1 = + create_dir_70.param2 = + create_dir_70.param3 = + create_dir_70.param4 = + create_dir_70.rezerv = 0; + create_dir_70.name = new_folder_path; + $mov eax,70 + $mov ebx,#create_dir_70.func + $int 0x40 +} + +//////////////////////////// +// / // +//////////////////////////// +f70 del_file_70; +:int DeleteFile(dword del_file_path) +{ + del_file_70.func = 8; + del_file_70.param1 = + del_file_70.param2 = + del_file_70.param3 = + del_file_70.param4 = + del_file_70.rezerv = 0; + del_file_70.name = del_file_path; + $mov eax,70 + $mov ebx,#del_file_70.func + $int 0x40 +} + +//////////////////////////// +// // +//////////////////////////// +f70 read_file_70; +:int ReadFile(dword read_pos, read_file_size, read_buffer, read_file_path) +{ + read_file_70.func = 0; + read_file_70.param1 = read_pos; + read_file_70.param2 = 0; + read_file_70.param3 = read_file_size; + read_file_70.param4 = read_buffer; + read_file_70.rezerv = 0; + read_file_70.name = read_file_path; + $mov eax,70 + $mov ebx,#read_file_70.func + $int 0x40 +} + +//////////////////////////// +// // +//////////////////////////// +f70 write_file_70; +:int WriteFile(dword write_file_size, write_buffer, write_file_path) +{ + write_file_70.func = 2; + write_file_70.param1 = 0; + write_file_70.param2 = 0; + write_file_70.param3 = write_file_size; + write_file_70.param4 = write_buffer; + write_file_70.rezerv = 0; + write_file_70.name = write_file_path; + $mov eax,70 + $mov ebx,#write_file_70.func + $int 0x40 +} + +/////////////////////////// +// // +/////////////////////////// +f70 read_dir_70; +:int ReadDir(dword file_count, read_buffer, dir_path) +{ + read_dir_70.func = 1; + read_dir_70.param1 = + read_dir_70.param2 = + read_dir_70.rezerv = 0; + read_dir_70.param3 = file_count; + read_dir_70.param4 = read_buffer; + read_dir_70.name = dir_path; + $mov eax,70 + $mov ebx,#read_dir_70.func + $int 0x40 +} + + +/////////////////////////// +// // +/////////////////////////// +f70 getinfo_file_70; +BDVK getinfo_file_info; +:dword GetFileInfo(dword file_path) +{ + getinfo_file_70.func = 5; + getinfo_file_70.param1 = + getinfo_file_70.param2 = + getinfo_file_70.param3 = 0; + getinfo_file_70.param4 = #getinfo_file_info; + getinfo_file_70.rezerv = 0; + getinfo_file_70.name = file_path; + $mov eax,70 + $mov ebx,#getinfo_file_70.func + $int 0x40 +} + + +/////////////////////////// +// // +/////////////////////////// +:int CopyFile(dword copy_from, copy_in) +{ + BDVK CopyFile_atr; + dword cBufer=0; + + if (! GetFileInfo(copy_from)) + { + mem_Init(); + cBufer = mem_Alloc(CopyFile_atr.sizelo); + if (! ReadFile(dword 0, CopyFile_atr.sizelo, cBufer, copy_from)) + if (! WriteFile(CopyFile_atr.sizelo, cBufer, copy_in)) return 1; + } + + return 0; +} + + +//Asper +void ReadAttributes(dword read_buffer, file_path) +{ + read_file_70.func = 5; + read_file_70.param1 = 0; + read_file_70.param2 = 0; + read_file_70.param3 = 0; + read_file_70.param4 = read_buffer; + read_file_70.rezerv = 0; + read_file_70.name = file_path; + $mov eax,70 + $mov ebx,#read_file_70.func + $int 0x40 +} + +inline fastcall void SetCurDir( ECX) +{ + $mov eax,30 + $mov ebx,1 + $int 0x40 +} + +inline fastcall void GetCurDir( ECX, EDX) +{ + $mov eax,30 + $mov ebx,2 + $int 0x40 +} + +void notify(dword notify_param) +{ + RunProgram("@notify", notify_param); +} \ No newline at end of file diff --git a/programs/cmm/lib/kolibri.h b/programs/cmm/lib/kolibri.h new file mode 100644 index 000000000..79edcc8fb --- /dev/null +++ b/programs/cmm/lib/kolibri.h @@ -0,0 +1,463 @@ +//CODED by Veliant, Leency, Nable. GNU GPL licence. + +#startaddress 0 +#code32 TRUE + +char os_name[8] = {'M','E','N','U','E','T','0','1'}; +dword os_version = 0x00000001; +dword start_addr = #main; +dword final_addr = #stop+32; +dword alloc_mem = #0x00100000; +dword x86esp_reg = #0x00100000; +dword I_Param = #param; +dword I_Path = #program_path; +char param[4096]; +char program_path[4096]; + +//Events +#define evMouse 6 +#define evButton 3 +#define evKey 2 +#define evReDraw 1 + +#define OLD -1 +#define true 1 +#define false 0 + +#define NULL 0 + +//Button options +#define BT_DEL 0x80000000 +#define BT_HIDE 0x40000000 +#define BT_NOFRAME 0x20000000 + +//------------------------------------------------------------------------- + +struct mouse +{ + int x,y,lkm,pkm,hor,vert; + void get(); +}; + +void mouse::get() +{ + EAX = 37; + EBX = 1; + $int 0x40 + $mov ebx, eax + $shr eax, 16 + $and ebx,0x0000FFFF + x = EAX; + y = EBX; + EAX = 37; + EBX = 2; + $int 0x40 + $mov ebx, eax + $and eax, 0x00000001 + $shr ebx, 1 + $and ebx, 0x00000001 + lkm = EAX; + pkm = EBX; + EAX = 37; //஫ + EBX = 7; + $int 0x40 + $mov ebx, eax + $shr eax, 16 + $and ebx,0x0000FFFF + //hor = EAX; + vert = EBX; +} + + +struct system_colors +{ + dword frame,grab,grab_button,grab_button_text,grab_text, + work,work_button,work_button_text,work_text,work_graph; + void get(); +}; + +void system_colors::get() +{ + EAX = 48; + EBX = 3; + ECX = #frame; + EDX = 40; + $int 0x40 +} + +//------------------------------------------------------------------------------ + +inline fastcall dword WaitEvent() +{ + $mov eax,10 + $int 0x40 +} + +inline fastcall dword CheckEvent() +{ + $mov eax,11 + $int 0x40 +} + +inline fastcall dword WaitEventTimeout( EBX) +{ + $mov eax,23 + $int 0x40 +} + +inline fastcall SetEventMask( EBX) +{ + $mov eax,40 + $int 0x40 +} + +inline fastcall ScancodesGeting(){ + $mov eax,66 + $mov ebx,1 + $mov ecx,1 //᪠ + $int 0x40 +} + +inline fastcall word GetKey() //+Gluk fix +{ + $push edx +@getkey: + $mov eax,2 + $int 0x40 + $cmp eax,1 + $jne getkeyi + $mov ah,dh + $jmp getkeyii //jz? +@getkeyi: + $mov dh,ah + $jmp getkey +@getkeyii: + $pop edx + $shr eax,8 +} + + +inline fastcall Pause( EBX) +{ + $mov eax, 5 + $int 0x40 +} + +inline fastcall word GetButtonID() +{ + $mov eax,17 + $int 0x40 + $shr eax,8 +} + +//---------------------------------------- + +inline fastcall dword GetFreeRAM() +{ + $mov eax, 18 + $mov ebx, 16 + $int 0x40 + //return eax = +} + +inline fastcall dword LoadDriver( ECX) //ECX - +{ + $mov eax, 68 + $mov ebx, 16 + $int 0x40 + //return 0 - , eax = +} + +inline fastcall dword RuleDriver( ECX) // +{ + $mov eax, 68 + $mov ebx, 17 + $int 0x40 + //return eax = +} + +struct proc_info +{ + #define SelfInfo -1 + dword use_cpu; + word pos_in_stack,num_slot,rezerv1; + char name[11]; + char rezerv2; + dword adress,use_memory,ID,left,top,width,height; + word status_slot,rezerv3; + dword work_left,work_top,work_width,work_height; + char status_window; + void GetInfo( ECX); + byte reserved[1024-71]; +}; + +inline fastcall void GetProcessInfo( EBX, ECX) +{ + $mov eax,9; + $int 0x40 +} + +inline fastcall int GetPointOwner( EBX, ECX) //ebx=m.x, ecx=m.y +{ + $mov eax,34 + $int 0x40 +} + +inline fastcall int GetProcessSlot( ECX) +{ + EAX = 18; + EBX = 21; + $int 0x40 +} + +inline fastcall int GetActiveProcess() +{ + EAX = 18; + EBX = 7; + $int 0x40 +} + +inline fastcall int CreateThread( ECX,EDX) +{ + $mov eax,51 + $mov ebx,1 + $int 0x40 +} + +inline fastcall void SwitchToAnotherThread() +{ + $mov eax,68 + $mov ebx,1 + $int 0x40 +} + +inline fastcall int KillProcess( ECX) +{ + $mov eax,18; + $mov ebx,18; + $int 0x40 +} + +#define TURN_OFF 2 +#define REBOOT 3 +#define KERNEL 4 +inline fastcall int ExitSystem( ECX) +{ + $mov eax, 18 + $mov ebx, 9 + $int 0x40 +} + +inline fastcall ExitProcess() +{ + $mov eax,-1; + $int 0x40 +} + +//------------------------------------------------------------------------------ + +//eax = (1=eng, 2=fi, 3=ger, 4=rus) +inline fastcall int GetSystemLanguage() +{ + EAX = 26; + EBX = 5; + $int 0x40 +} + +inline fastcall GetSkinHeight() +{ + $push ebx + $mov eax,48 + $mov ebx,4 + $int 0x40 + $pop ebx +} + +inline fastcall void SetSystemSkin( ECX) +{ + EAX = 48; + EBX = 8; + $int 0x40 +} + +inline fastcall int GetScreenWidth() +{ + $mov eax, 14 + $int 0x40 + $shr eax, 16 +} + +inline fastcall int GetScreenHeight() +{ + $mov eax, 14 + $int 0x40 + $and eax,0x0000FFFF +} + +inline fastcall dword LoadLibrary( ECX) +{ + $mov eax, 68 + $mov ebx, 19 + $int 0x40 +} + +inline fastcall int TestBit( EAX, CL) +{ + $shr eax,cl + $and eax,1 +} + +inline fastcall int PlaySpeaker( ESI) +{ + $mov eax, 55 + $mov ebx, 55 + $int 0x40 +} + +inline fastcall void debug( EDX) +{ + $push ebx + $push ecx + $mov eax, 63 + $mov ebx, 1 +next_char: + $mov ecx, DSDWORD[edx] + $or cl, cl + $jz done + $int 0x40 + $inc edx + $jmp next_char +done: + $mov cl, 13 + $int 0x40 + $mov cl, 10 + $int 0x40 + $pop ecx + $pop ebx +} +//------------------------------------------------------------------------------ + +void DefineAndDrawWindow(dword x,y, sizeX,sizeY, byte WindowType,dword WindowAreaColor, EDI, ESI) +{ + EAX = 12; // function 12:tell os about windowdraw + EBX = 1; + $int 0x40 + + EAX = 0; + EBX = x << 16 + sizeX; + ECX = y << 16 + sizeY; + EDX = WindowType << 24 | WindowAreaColor; + $int 0x40 + + EAX = 12; // function 12:tell os about windowdraw + EBX = 2; + $int 0x40 +} + +inline fastcall DeleteAllButtons() +{ + EAX = 12; // function 12:tell os about windowdraw + EBX = 1; + $int 0x40 + EBX = 2; + $int 0x40 +} + +inline fastcall MoveSize( EBX,ECX,EDX,ESI) +{ + $mov eax, 67 + $int 0x40 +} + +inline fastcall void DrawTitle( ECX) +{ + EAX = 71; + EBX = 1; + $int 0x40; +} + +void WriteText(dword x,y,byte fontType, dword color, EDX, ESI) +{ + EAX = 4; + EBX = x<<16+y; + ECX = fontType<<24+color; + $int 0x40; +} + +void WriteNumber(dword x,y,byte fontType, dword color, count, ECX) +{ + EAX = 47; + EBX = count<<16; + EDX = x<<16+y; + ESI = fontType<<24+color; + $int 0x40; +} + +void CopyScreen(dword EBX, x, y, sizeX, sizeY) +{ + EAX = 36; + ECX = sizeX << 16 + sizeY; + EDX = x << 16 + y; + $int 0x40; +} + +dword GetPixelColor(dword x, x_size, y) +{ + $mov eax, 35 + EBX= y*x_size+x; + $int 0x40 +} + +void PutImage(dword EBX,w,h,x,y) +{ + EAX = 7; + ECX = w<<16+h; + EDX = x<<16+y; + $int 0x40 +} + +void _PutImage(dword x,y, w,h, EBX) +{ + EAX = 7; + ECX = w<<16+h; + EDX = x<<16+y; + $int 0x40 +} + +void PutPaletteImage(dword EBX,w,h,x,y,ESI,EDI) +{ + EAX = 65; + ECX = w<<16+h; + EDX = x<<16+y; + EBP = 0; + $int 0x40 +} + +inline fastcall void PutPixel( EBX,ECX,EDX) +{ + EAX=1; + $int 0x40 +} + +void DrawBar(dword x,y,w,h,EDX) +{ + EAX = 13; + EBX = x<<16+w; + ECX = y<<16+h; + $int 0x40 +} + +void DefineButton(dword x,y,w,h,EDX,ESI) +{ + EAX = 8; + EBX = x<<16+w; + ECX = y<<16+h; + $int 0x40 +} + +inline fastcall void DeleteButton( EDX) +{ + EAX = 8; + EDX += BT_DEL; + $int 0x40; +} \ No newline at end of file diff --git a/programs/cmm/lib/libimg_lib.h b/programs/cmm/lib/libimg_lib.h new file mode 100644 index 000000000..f9650b3ee --- /dev/null +++ b/programs/cmm/lib/libimg_lib.h @@ -0,0 +1,104 @@ +//Asper + +//library +dword libimg = #alibimg; +char alibimg[21] = "/sys/lib/libimg.obj\0"; + +dword libimg_init = #alibimg_init; +dword img_is_img = #aimg_is_img; +dword img_to_rgb2 = #aimg_to_rgb2; +dword img_decode = #aimg_decode; +dword img_destroy = #aimg_destroy; +dword img_draw = #aimg_draw; +//dword img_flip = #aimg_flip; +//dword img_rotate = #aimg_rotate; + +dword am1__ = 0x0; +dword bm1__ = 0x0; + +//import libimg , \ +char alibimg_init[9] = "lib_init\0"; +char aimg_is_img[11] = "img_is_img\0"; +char aimg_to_rgb2[12] = "img_to_rgb2\0"; +char aimg_decode[11] = "img_decode\0"; +char aimg_destroy[12] = "img_destroy\0"; +char aimg_draw[9] = "img_draw\0"; +//char aimg_flip[9] = "img_flip\0"; +//char aimg_rotate[11] = "img_rotate\0 "; + + + +dword load_image(dword filename) +{ + //align 4 + dword img_data=0; + dword img_data_len=0; + dword fh=0; + dword image=0; + + byte tmp_buf[40]; + $and img_data, 0 + //$mov eax, filename + //$push eax + //invoke file.open, eax, O_READ + file_open stdcall (filename, O_READ); + $or eax, eax + $jnz loc05 + $stc + return 0; + @loc05: + $mov fh, eax + //invoke file.size + file_size stdcall (filename); + $mov img_data_len, ebx + //stdcall mem.Alloc, ebx + mem_Alloc(EBX); + + $test eax, eax + $jz error_close + $mov img_data, eax + //invoke file.read, [fh], eax, [img_data_len] + file_read stdcall (fh, EAX, img_data_len); + $cmp eax, -1 + $jz error_close + $cmp eax, img_data_len + $jnz error_close + //invoke file.close, [fh] + file_close stdcall (fh); + $inc eax + $jz error_ +//; img.decode checks for img.is_img +//; //invoke img.is_img, [img_data], [img_data_len] +//; $or eax, eax +//; $jz exit + //invoke img.decode, [img_data], [img_data_len], 0 + EAX=img_data; + img_decode stdcall (EAX, img_data_len,0); + $or eax, eax + $jz error_ + $cmp image, 0 + $pushf + $mov image, eax + //call init_frame + $popf + //call update_image_sizes + mem_Free(img_data);//free_img_data(img_data); + $clc + return image; + +@error_free: + //invoke img.destroy, [image] + img_destroy stdcall (image); + $jmp error_ + +@error_pop: + $pop eax + $jmp error_ +@error_close: + //invoke file.close, [fh] + file_close stdcall (fh); +@error_: + mem_Free(img_data); + $stc + return 0; +} diff --git a/programs/cmm/lib/libio_lib.h b/programs/cmm/lib/libio_lib.h new file mode 100644 index 000000000..1ef15c7b4 --- /dev/null +++ b/programs/cmm/lib/libio_lib.h @@ -0,0 +1,36 @@ +//Asper + +//library +dword libio = #alibio; +char alibio[21] = "/sys/lib/libio.obj\0"; //"libio.obj\0"; + +dword libio_init = #alibio_init; +dword file_size = #afile_size; +dword file_open = #afile_open; +dword file_read = #afile_read; +dword file_close = #afile_close; + +dword am2__ = 0x0; +dword bm2__ = 0x0; + + +//import libio , \ +char alibio_init[9] = "lib_init\0"; +char afile_size[11] = "file_size\0"; +char afile_open[12] = "file_open\0"; +char afile_read[11] = "file_read\0"; +char afile_close[12] = "file_close\0"; + +//align 4 +//dword fh=0; + +#define O_BINARY 0 +#define O_READ 1 +#define O_WRITE 2 +#define O_CREATE 4 +#define O_SHARE 8 +#define O_TEXT 16 + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 diff --git a/programs/cmm/lib/mem.h b/programs/cmm/lib/mem.h new file mode 100644 index 000000000..06fcc894d --- /dev/null +++ b/programs/cmm/lib/mem.h @@ -0,0 +1,203 @@ +//mem.Init +dword mem_Init() +{ + $push ebx + $mov eax, 68 + $mov ebx, 11 + $int 0x40 + + $pop ebx + return EAX; +} + +//mem.Alloc +dword mem_Alloc(dword size) +{ + $push ebx + $push ecx + $mov eax, 68 + $mov ebx, 12 + $mov ecx, size + $int 0x40 + + $pop ecx + $pop ebx + return EAX; +} + +//mem.ReAlloc +stdcall dword mem_ReAlloc(dword mptr, size) +{ + $push ebx + $push ecx + $push edx + $mov eax, 68 + $mov ebx, 20 + $mov ecx, size + $mov edx, mptr + $int 0x40 + + $pop edx + $pop ecx + $pop ebx + return EAX; +} + +//mem.Free +void mem_Free(dword mptr) +{ + $push eax + $push ebx + $push ecx + $mov eax, 68 + $mov ebx, 13 + $mov ecx, mptr + $test ecx, ecx + $jz end0 + $int 0x40 + @end0: + $pop ecx + $pop ebx + $pop eax +} + +//stdcall dword ?? +inline fastcall mem_Move( EDI, ESI, ECX) +{ + asm { + MOV EAX, ECX + CMP EDI, ESI + JG L1 + JE L2 + SAR ECX, 2 + JS L2 + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + REP MOVSB + JMP SHORT L2 +L1: LEA ESI, DSDWORD[ ESI+ECX-4] + LEA EDI, DSDWORD[ EDI+ECX-4] + SAR ECX, 2 + JS L2 + STD + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + ADD ESI, 3 + ADD EDI, 3 + REP MOVSB + CLD +L2: + } +} + + +/*:void fastcall memsetz( EDI, ECX) +{ + asm { + XOR EAX, EAX + MOV EDX, ECX + SHR ECX, 2 + REP STOSD + MOV ECX, EDX + AND ECX, 3 + REP STOSB + } +} + +:void fastcall memset( EDI, ECX, AL) +{ + asm { + MOV AH, AL + MOVZX EDX, AX + SHL EAX, 16 + OR EAX, EDX + MOV EDX, ECX + SHR ECX, 2 + REP STOSD + MOV ECX, EDX + AND ECX, 3 + REP STOSB + } +} + +:void fastcall memcpy( EDI, ESI, ECX) +{ + asm { + MOV EDX, ECX + SHR ECX, 2 + REP MOVSD + MOV ECX, EDX + AND ECX, 3 + REP MOVSB + } +} + +:void fastcall memsetd( EDI, ECX, EAX) +{ + asm { + REP STOSD + } +} + +:void fastcall memcpyd( EDI, ESI, ECX) +{ + asm { + REP MOVSD + } +} + +:void fastcall memmov( EDI, ESI, ECX) +{ + asm { + MOV EAX, ECX + CMP EDI, ESI + JG L1 + JE L2 + SAR ECX, 2 + JS L2 + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + REP MOVSB + JMP SHORT L2 +L1: LEA ESI, DSDWORD[ ESI+ECX-4] + LEA EDI, DSDWORD[ EDI+ECX-4] + SAR ECX, 2 + JS L2 + STD + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + ADD ESI, 3 + ADD EDI, 3 + REP MOVSB + CLD +L2: + } +} + +:long fastcall memcmp( ESI, EDI, ECX) +{ + asm { + MOV EAX, ECX + SHR ECX, 2 + REPE CMPSD + MOV ECX, EAX + AND ECX, 3 + REPE CMPSB + XOR EAX, EAX + XOR ECX, ECX + MOV AL, DSBYTE[ ESI-1] + MOV CL, DSBYTE[ EDI-1] + SUB EAX, ECX + } +}*/ + + +/*#define memzset memsetz +#define memset0 memsetz +#define mem0set memsetz +#define memset32 memsetd +#define memcpy32 memcpyd*/ diff --git a/programs/cmm/lib/memory.h b/programs/cmm/lib/memory.h new file mode 100644 index 000000000..475017e56 --- /dev/null +++ b/programs/cmm/lib/memory.h @@ -0,0 +1,66 @@ +#code32 TRUE + +inline fastcall dword malloc(dword ECX){ + dword size, heap; + #speed + size = ECX; + EAX = 68; + EBX = 11; + $int 0x40; + heap = EAX; + IF (size<=heap) + { + EAX = 68; + EBX = 12; + ECX = size; + $int 0x40; + } + ELSE EAX=-1; + #codesize +} + +inline fastcall dword free(dword ECX){ + #speed + EAX = 68; + EBX = 13; + $int 0x40; + #codesize +} + +inline fastcall dword realloc(dword ECX, EDX){ + #speed + EAX = 68; + EBX = 20; + $int 0x40; + #codesize +} + +inline fastcall memmov( EDI, ESI, ECX) +{ + asm { + MOV EAX, ECX + CMP EDI, ESI + JG L1 + JE L2 + SAR ECX, 2 + JS L2 + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + REP MOVSB + JMP SHORT L2 +L1: LEA ESI, DSDWORD[ ESI+ECX-4] + LEA EDI, DSDWORD[ EDI+ECX-4] + SAR ECX, 2 + JS L2 + STD + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + ADD ESI, 3 + ADD EDI, 3 + REP MOVSB + CLD +L2: + } +} diff --git a/programs/cmm/lib/random.h b/programs/cmm/lib/random.h new file mode 100644 index 000000000..a6d5282f2 --- /dev/null +++ b/programs/cmm/lib/random.h @@ -0,0 +1,55 @@ +/******************************************************************************* + + MenuetOS MineSweeper + Copyright (C) 2003 Ivan Poddubny + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*******************************************************************************/ + +dword generator; // random number generator - + +inline fastcall int random( ECX) +// get pseudo-random number - +{ + $push ebx + + $rdtsc // eax & edx + $xor eax,edx + $not eax + + EBX = generator; + $ror ebx,3 + $xor ebx,0xdeadbeef + EBX += EAX; + generator = EBX; + + EAX += EBX; + EAX = EAX % ECX; + + $pop ebx +} + +inline fastcall randomize() +// initialize random number generator - +{ + asm + { + mov eax,3 + int 0x40 + ror eax,16 + } + generator = EAX; +} \ No newline at end of file diff --git a/programs/cmm/lib/scroll_lib.h b/programs/cmm/lib/scroll_lib.h new file mode 100644 index 000000000..27e88a36a --- /dev/null +++ b/programs/cmm/lib/scroll_lib.h @@ -0,0 +1,95 @@ +//lev +//:dword boxlib = #abox_lib; +:char abox_lib[]="/sys/lib/box_lib.obj"; + +:char aboxlib_init[] = "lib_init"; +:char aScrollbar_v_draw = "scrollbar_v_draw"; +:char aScrollbar_v_mouse = "scrollbar_v_mouse"; +:char aScrollbar_h_draw = "scrollbar_h_draw"; +:char aScrollbar_h_mouse = "scrollbar_h_mouse"; +:char aVersion_scrollbar = "version_scrollbar"; + +dword boxlib_init = #aboxlib_init; +dword scrollbar_v_draw = #aScrollbar_v_draw; +dword scrollbar_v_mouse = #aScrollbar_v_mouse; +dword scrollbar_h_draw = #aScrollbar_h_draw; +dword scrollbar_h_mouse = #aScrollbar_h_mouse; +:dword version_scrollbar = #aVersion_scrollbar; + +dword sc_am__ = 0x0; +dword sc_bm__ = 0x0; + +struct scroll_bar +{ +//scroll_bar: +word size_x,// equ [edi] +start_x,// equ [edi+2] +size_y,// equ [edi+4] +start_y;// equ [edi+6] +dword btn_height, // equ [edi+8] +type,// equ [edi+12] +max_area,// equ [edi+16] +cur_area,// equ [edi+20] +position,// equ [edi+24] +bckg_col,// equ [edi+28] +frnt_col,// equ [edi+32] +line_col,// equ [edi+36] +redraw;// equ [edi+40] +word delta,// equ [edi+44] +delta2,// equ [edi+46] +r_size_x,// equ [edi+48] +r_start_x,// equ [edi+50] +r_size_y,// equ [edi+52] +r_start_y;// equ [edi+54] +dword m_pos,// equ [edi+56] +m_pos_2,// equ [edi+60] +m_keys,// equ [edi+64] +run_size,// equ [edi+68] +position2,// equ [edi+72] +work_size,// equ [edi+76] +all_redraw,// equ [edi+80] +ar_offset;// equ [edi+84] +}; + +/*scroll_bar scroll1 = { +18,//word size_x, +200, //start_x, +398, //size_y, +44,//start_y; +18,//dword btn_height, +0,//type, +115,//max_area, (100+cur_area) +15,//cur_area, +0,//position, +0xeeeeee,//bckg_col, +0xD2CED0,//frnt_col, +0x555555,//line_col, +0,//redraw; +0,//word delta, +0,//delta2, +0,//r_size_x, +0,//r_start_x, +0,//r_size_y, +0,//r_start_y; +0,//dword m_pos, +0,//m_pos_2, +0,//m_keys, +0,//run_size, +0,//position2, +0,//work_size, +1,//all_redraw, +1//ar_offset; +};*/ + +//btn_height - ( ࠢ ਧ. .) +//type - type - 0-1-2, ⠫ 룫 0. +//max_area - ᨬ쭠, 㠫쭮 ⮡ࠦ , .. 砩 ⨢ ( ᨬ ࠧ 㬥) +//cur_area - ࠧ 㭪// ⮡ࠦ ( 㬥 ࠭) +//position - 㭪 塞 0 祭 (max_area-cur_area) +//bckg_col - 梥 ७, ਬ ⥩ 㭪 +//frnt_col - 梥 㦭, ਬ ⥩ ⫨ ਬ塞 bckg_col +//line_col - 梥 ५ +//redraw - 室 ᮢ ࠢ塞 뢠 position cur_area +//delta2 - 墠 䮪 ஫஬ (㤥ঠ 㭪) +//all_redraw - 䫠 ⠭ 1 ᮢ ᥣ , ᫨ ⠢ 0, ᮢ ந室 ⮫쪮 㭪. ᪮७ ᮢ, ᪮ ॡ ਭ㤨쭮 ᮢ뢠 . 뢠 ᮡ ᥣ ᮢ뢠 ᠬ ⮬ 祭 0. +//ar_offset - 稭 ᬥ饭 ⭮ ⨨ . diff --git a/programs/cmm/lib/strings.h b/programs/cmm/lib/strings.h new file mode 100644 index 000000000..8d71313fd --- /dev/null +++ b/programs/cmm/lib/strings.h @@ -0,0 +1,336 @@ +//------------------------------------------------------------------------------ +// strcmp( ESI, EDI) +// strlen( EDI) +// strcpy( EDI, ESI) +// strcat( EDI, ESI) +// strchr( ESI,BL) +// strrchr( ESI,BL) +// strstr( EBX, EDX) +// itoa( ESI) +// atoi( EAX) +// strupr( ESI) +// strlwr( ESI) ----- +// strttl( EDX) +// strtok( ESI) +//------------------------------------------------------------------------------ + +inline fastcall signed int strcmp( ESI, EDI) +{ + loop() + { + IF (DSBYTE[ESI]DSBYTE[EDI]) RETURN 1; + IF (DSBYTE[ESI]=='\0') RETURN 0; + ESI++; + EDI++; + } +} + + +inline fastcall signed int strncmp( ESI, EDI, ECX) +{ + asm { + MOV EBX, EDI + XOR EAX, EAX + MOV EDX, ECX + OR ECX, ECX + JE L1 + REPNE SCASB + SUB EDX, ECX + MOV ECX, EDX + MOV EDI, EBX + XOR EBX, EBX + REPE CMPSB + MOV AL, DSBYTE[ ESI-1] + MOV BL, DSBYTE[ EDI-1] + SUB EAX, EBX +L1: + } +} + + + +/* + +inline fastcall signed int strcmpi( ESI,EDI) +uses EBX +{ + do{ + $lodsb + IF(AL>='a')&&(AL<='z')AL-=0x20; + BL=DSBYTE[(E)DI]; + IF(BL>='a')&&(BL<='z')BL-=0x20; + AL-=BL; + IF(!ZEROFLAG)BREAK; + (E)DI++; + }while(BL!=0); +} + +inline char STRNCMPI((E)SI,(E)DI,(E)CX) +{ + (E)AX=0; + LOOPNZ((E)CX){ + $lodsb + IF(AL>='a')&&(AL<='z')AL-=0x20; + AH=DSBYTE[EDI]; + IF(AH>='a')&&(AH<='z')AH-=0x20; + EDI++; + IF(AL==0)||(AH==0)||(AL!=AH)BREAK; + } + AL=AL-AH; +}*/ + + + +inline fastcall unsigned int strlen( EDI) +{ + $xor eax, eax + $mov ecx, -1 + $REPNE $SCASB + EAX-=2+ECX; +} + + +inline fastcall strcpy( EDI, ESI) +{ + $cld +l2: + $lodsb + $stosb + $test al,al + $jnz l2 +} + + +inline fastcall strcat( EDI, ESI) +{ + asm { + mov ebx, edi + xor ecx, ecx + xor eax, eax + dec ecx + repne scasb + dec edi + mov edx, edi + mov edi, esi + xor ecx, ecx + xor eax, eax + dec ecx + repne scasb + xor ecx, 0ffffffffh + mov edi, edx + mov edx, ecx + mov eax, edi + shr ecx, 2 + rep movsd + mov ecx, edx + and ecx, 3 + rep movsb + mov eax, ebx + } +} + +dword itoa( ESI) +{ + unsigned char buffer[11]; + EDI = #buffer; + ECX = 10; + if (ESI < 0) + { + $mov al, '-' + $stosb + $neg esi + } + + $mov eax, esi + $push -'0' +f2: + $xor edx, edx + $div ecx + $push edx + $test eax, eax + $jnz f2 +f3: + $pop eax + $add al, '0' + $stosb + $jnz f3 + + $mov al, '\0' + $stosb + + return #buffer; +} + + + +inline fastcall dword atoi( EDI) +{ + ESI=EDI; + IF(DSBYTE[ESI]=='-')ESI++; + EAX=0; + BH=AL; + do{ + BL=DSBYTE[ESI]-'0'; + EAX=EAX*10+EBX; + ESI++; + }while(DSBYTE[ESI]>0); + IF(DSBYTE[EDI]=='-') -EAX; +} + + +inline fastcall signed int strchr( ESI,BL) +{ + int jj=0; + do{ + jj++; + $lodsb + IF(AL==BL) return jj; + } while(AL!=0); + return 0; +} + + +inline fastcall signed int strrchr( ESI,BL) +{ + int jj=0, last=0; + do{ + jj++; + $lodsb + IF(AL==BL) last=jj; + } while(AL!=0); + return last; +} + + +inline fastcall strupr( ESI) +{ + do{ + AL=DSBYTE[ESI]; + IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; + IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //- + IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //- + ESI++; + }while(AL!=0); +} + +inline fastcall strlwr( ESI) +{ + do{ + $LODSB + IF(AL>='A')&&(AL<='Z'){ + AL+=0x20; + DSBYTE[ESI-1]=AL; + CONTINUE; + } + }while(AL!=0); +} + +inline fastcall strttl( EDX) +{ + AL=DSBYTE[EDX]; + IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; + IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //- + IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //- + do{ + EDX++; + AL=DSBYTE[EDX]; + IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} + IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; //- + IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //- + }while(AL!=0); +} + + + +inline fastcall dword strstr( EBX, EDX) +{ + asm { + MOV EDI, EDX + XOR ECX, ECX + XOR EAX, EAX + DEC ECX + REPNE SCASB + NOT ECX + DEC ECX + JE LS2 + MOV ESI, ECX + XOR ECX, ECX + MOV EDI, EBX + DEC ECX + REPNE SCASB + NOT ECX + SUB ECX, ESI + JBE LS2 + MOV EDI, EBX + LEA EBX, DSDWORD[ ESI-1] +LS1: MOV ESI, EDX + LODSB + REPNE SCASB + JNE LS2 + MOV EAX, ECX + PUSH EDI + MOV ECX, EBX + REPE CMPSB + POP EDI + MOV ECX, EAX + JNE LS1 + LEA EAX, DSDWORD[ EDI-1] + JMP SHORT LS3 +LS2: XOR EAX, EAX +LS3: + } +} + + + + +/* strtok( LPSTR dest, src, divs); +src - +dest - , +divs - , - +: 0, + 0, dest ( + src ) */ + +inline fastcall dword strtok( EDX, ESI, EBX) +{ + asm { + XOR ECX, ECX + MOV EDI, EBX + XOR EAX, EAX + DEC ECX + REPNE SCASB + XOR ECX, 0FFFFFFFFH + DEC ECX + PUSH ECX +L1: LODSB + OR AL, AL + JZ L4 + MOV EDI, EBX + MOV ECX, SSDWORD[ ESP] + REPNE SCASB + JZ L1 + DEC ESI +L2: LODSB + MOV EDI, EBX + MOV ECX, SSDWORD[ ESP] + REPNE SCASB + JZ L3 + MOV DSBYTE[ EDX], AL + INC EDX + JMP SHORT L2 +L3: MOV EAX, ESI +L4: POP ECX + } DSBYTE[ EDX] = 0; +} + +#define strncpy strcpyn +#define strnmov strmovn +#define stricmp strcmpi +#define strcmpn strncmp +#define strncmpi strcmpni +#define stricmpn strcmpni +#define strnicmp strcmpni +#define strincmp strcmpni +#define strcmpin strcmpni \ No newline at end of file diff --git a/programs/cmm/lib/truetype.h b/programs/cmm/lib/truetype.h new file mode 100644 index 000000000..5d8c3057f --- /dev/null +++ b/programs/cmm/lib/truetype.h @@ -0,0 +1,29 @@ +// + +char fontinfo[28]; + +dword libtruetype = #att; + +char att[] = "/sys/lib/truetype.obj"; //"truetype.obj\0"; + +dword truetype = #att_truetype; +dword get_length = #att_get_length; +dword get_width = #att_get_width; +dword text_out = #att_text_out; +dword init_font = #att_init_font; + +dword am3__ = 0x0; +dword bm3__ = 0x0; + +//import libimg , \ + +char att_truetype[] = "truetype"; +char att_get_length[] = "get_length"; +char att_get_width[] = "get_width"; +char att_text_out[] = "text_out"; +char att_init_font[] = "init_font"; + +//load_dll2(libtruetype, #truetype,0); + +// - +//text_out stdcall (#text, -1, 40, 0xFF0000, 100, 100); diff --git a/programs/cmm/new_end/compile.bat b/programs/cmm/new_end/compile.bat new file mode 100644 index 000000000..8479ff818 --- /dev/null +++ b/programs/cmm/new_end/compile.bat @@ -0,0 +1,6 @@ +..\C--\C-- end.c +del end +rename end.com end +..\C--\kpack end +pause +del warning.txt diff --git a/programs/cmm/new_end/end.c b/programs/cmm/new_end/end.c new file mode 100644 index 000000000..1b044e4e0 --- /dev/null +++ b/programs/cmm/new_end/end.c @@ -0,0 +1,161 @@ +#include "..\lib\kolibri.h" +#include "..\lib\figures.h" +#include "..\lib\strings.h" +#include "..\lib\random.h" +#include "..\lib\mem.h" +#include "..\lib\file_system.h" + +#ifndef ru + char *BUTTONS_CAPTIONS[]={ + " [Enter]"w, 13, + " [End]"w, 181, + " [Home]"w, 180, + " [Esc]"w, 27, + 0}; +#else + char *BUTTONS_CAPTIONS[]={ + " Reboot [Enter]",13, + " Power off [End]",181, + " Kernel [Home]",180, + " Close [Esc]",27, + 0}; +#endif + +system_colors sc; + +unsigned char moon[6*6] = FROM "moon.raw"; + +int WIN_SIZE_X, WIN_SIZE_Y; +int PANEL_X, PANEL_Y; + +#define NIGHT_PALEL_HEIGHT 45 +#define STARS_COUNT 30 + +#define PANEL_SIZE_X 260 +#define PANEL_SIZE_Y 165 + +dword stars_col[4]={0xD2CF19, 0x716900, 0x002041}; //0x005BFF - , + + + + +void main() +{ + int key; + + Pause(10); + + WIN_SIZE_X=GetScreenWidth()+1; + WIN_SIZE_Y=GetScreenHeight()+1; + + PANEL_X=WIN_SIZE_X-PANEL_SIZE_X/2; + PANEL_Y=WIN_SIZE_Y-PANEL_SIZE_Y/2; + + loop() + { + WaitEventTimeout(130); + switch(EAX & 0xFF) + { + case evButton: + key=GetButtonID(); + if (key==1) ExitProcess(); + GOTO _BUTTON_MARK; + + case evKey: + key = GetKey(); + _BUTTON_MARK: + if (key== 13) ExitSystem(REBOOT); //ENTER + if (key==180) ExitSystem(KERNEL); //HOME + if (key==181) ExitSystem(TURN_OFF); //END + if (key== 27) ExitProcess(); //ESC + if (key== 19) //CTRL+S + { + RunProgram("rdsave",0); + ExitProcess(); + } + break; + + case evReDraw: + draw_window(); + break; + default: + draw_stars(); + } + } +} + + + +void draw_window() +{ + int x, y; + sc.get(); + + DefineAndDrawWindow(0,0,WIN_SIZE_X, WIN_SIZE_Y, 0x01, 0, 0, 0x01fffFFF); + + draw_main_area(PANEL_X, PANEL_Y, PANEL_SIZE_X, PANEL_SIZE_Y); + + //draw grid + for (y=0; yPANEL_Y) && (yWIN_SIZE_X) WIN_SIZE_X=strlen(#param)*6+8; + + TEXT_X=-6*strlen(#param)+WIN_SIZE_X/2; + TEXT_Y=WIN_SIZE_Y/2-3; + + // , :) + while (!GetPixelColor(SCREEN_SIZE_X-1, SCREEN_SIZE_X, WIN_Y)) WIN_Y+=45; + + + loop() + { + WaitEventTimeout(500); + switch(EAX & 0xFF) + { + case evButton: + if (GetButtonID()==1) ExitProcess(); + break; + + case evKey: + break; + + case evReDraw: + DefineAndDrawWindow(SCREEN_SIZE_X-WIN_SIZE_X,WIN_Y,WIN_SIZE_X, WIN_SIZE_Y, 0x01, 0, 0, 0x01fffFFF); + DefineButton(0,0, WIN_SIZE_X, WIN_SIZE_Y, 1+BT_HIDE+BT_NOFRAME, 0); + draw_grid(); + WriteText(TEXT_X-1,TEXT_Y, 0x80, 0,#param,0); // + WriteText(TEXT_X+1,TEXT_Y, 0x80, 0,#param,0); + WriteText(TEXT_X,TEXT_Y-1, 0x80, 0,#param,0); + WriteText(TEXT_X,TEXT_Y+1, 0x80, 0,#param,0); + WriteText(TEXT_X-1,TEXT_Y-1, 0x80, 0,#param,0); + WriteText(TEXT_X+1,TEXT_Y+1, 0x80, 0,#param,0); + WriteText(TEXT_X-1,TEXT_Y+1, 0x80, 0,#param,0); + WriteText(TEXT_X+1,TEXT_Y-1, 0x80, 0,#param,0); + + WriteText(TEXT_X,TEXT_Y, 0x80, 0xFFFfff,#param,0); + break; + default: + ExitProcess(); + } + } +} + + + +void draw_grid() +{ + int x, y; + + for (y=0; y<=WIN_SIZE_Y; y++) + { + for (x=0; x<=WIN_SIZE_X; x++) + { + if (! y&1) && (! x&1) PutPixel(x, y, 0); + if ( y&1) && ( x&1) PutPixel(x, y, 0); + //PutPixel(x, y, GetPixelColor(SCREEN_SIZE_X-WIN_SIZE_X+x, SCREEN_SIZE_X, y)); + } + } +} + + + + + +stop: diff --git a/programs/cmm/rb/@rb b/programs/cmm/rb/@rb new file mode 100644 index 000000000..4e6dd7f37 Binary files /dev/null and b/programs/cmm/rb/@rb differ diff --git a/programs/cmm/rb/compile.bat b/programs/cmm/rb/compile.bat new file mode 100644 index 000000000..22660eb02 --- /dev/null +++ b/programs/cmm/rb/compile.bat @@ -0,0 +1,7 @@ +del @rb +..\C--\C-- rb +..\C--\kpack rb.com +rename rb.com @rb +del warning.txt +del rb.com +pause \ No newline at end of file diff --git a/programs/cmm/rb/rb.c b/programs/cmm/rb/rb.c new file mode 100644 index 000000000..7ee32ac7f --- /dev/null +++ b/programs/cmm/rb/rb.c @@ -0,0 +1,134 @@ +//@RB - v0.5 + +#include "..\lib\kolibri.h" +#include "..\lib\figures.h" +#include "..\lib\file_system.h" + + +#define ITEM_HEIGHT 18 +#define ITEM_WIDTH 138 + +char *ITEMS_LIST[]={ +" "w, "/sys/SKINSEL", 0, +" "w, "/sys/media/palitra", 0, +" "w, "/sys/ICON", 0, +" "w, "/sys/SETUP", 0, +" "w, "/sys/REFRSCRN", 0, +" "w, "/sys/CPU", 0, +0}; + +dword stak[100]; + + +void main() +{ + mouse mm; + byte thread_id; + SetEventMask(100000b); + + loop() switch(WaitEvent()) + { + case evMouse: + mm.get(); + + if (GetPointOwner(mm.x, mm.y)==1) && (mm.pkm) + { + SwitchToAnotherThread(); + CreateThread(#window,#stak); + } + } +} + + +void window() +{ + proc_info MenuForm; + system_colors sc; + mouse m; + int items_num, items_cur; + int id1, key, i; + + sc.get(); + SetEventMask(100111b); + + loop() switch(WaitEvent()) + { + case evMouse: + m.get(); + + GetProcessInfo(#MenuForm, SelfInfo); + id1=GetProcessSlot(MenuForm.ID); + if (id1<>GetActiveProcess()) ExitProcess(); + id1=m.y-1/ITEM_HEIGHT; + if (m.y<0) || (id1+1>items_num) || (m.x<0) || (m.x>ITEM_WIDTH) break; + if (m.lkm) || (m.pkm) + { + //feel clicking + DrawBar(1, items_cur*ITEM_HEIGHT+2, ITEM_WIDTH-1, ITEM_HEIGHT-2, sc.work_graph); + WriteText(8,items_cur*ITEM_HEIGHT+6,0x80,sc.work_button_text,ITEMS_LIST[items_cur*3],0); + Pause(4); + + ItemProcess(items_cur); + } + if (items_cur<>id1) + { + items_cur=id1; + goto _ITEMS_DRAW; + } + + break; + + case evButton: + break; + + case evKey: + key = GetKey(); + if (key==27) ExitProcess(); + if (key==178) && (items_cur) + { + items_cur--; + goto _ITEMS_DRAW; + } + if (key==177) && (items_cur+1lang.h + +..\C--\C-- tmpdisk.c +del tmpdisk +rename tmpdisk.com tmpdisk +rem ..\C--\kpack tmpdisk +pause +del warning.txt diff --git a/programs/cmm/tmpdisk/compile_ru.bat b/programs/cmm/tmpdisk/compile_ru.bat new file mode 100644 index 000000000..607b6a52f --- /dev/null +++ b/programs/cmm/tmpdisk/compile_ru.bat @@ -0,0 +1,9 @@ +del lang.h +echo #define LANG_RUS 1 >lang.h + +..\C--\C-- tmpdisk.c /lst +del tmpdisk +rename tmpdisk.com tmpdisk +rem ..\C--\kpack tmpdisk +pause +del warning.txt diff --git a/programs/cmm/tmpdisk/icons.ico b/programs/cmm/tmpdisk/icons.ico new file mode 100644 index 000000000..20125965b Binary files /dev/null and b/programs/cmm/tmpdisk/icons.ico differ diff --git a/programs/cmm/tmpdisk/icons.raw b/programs/cmm/tmpdisk/icons.raw new file mode 100644 index 000000000..ad860e4c6 Binary files /dev/null and b/programs/cmm/tmpdisk/icons.raw differ diff --git a/programs/cmm/tmpdisk/t_console.c b/programs/cmm/tmpdisk/t_console.c new file mode 100644 index 000000000..5c0e839e9 --- /dev/null +++ b/programs/cmm/tmpdisk/t_console.c @@ -0,0 +1,87 @@ +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +/*#ifdef LANG_RUS + char *rezult_text[]={ + " "w, + " IOCTL, ..."w, + " 0 9"w, + " "w, + " "w, + " "w, + " O_o"w, + 0}; +#else*/ + char *rezult_text[]={ + "operation compleated successfully", + "unknown IOCTL code, wrong input/output size...", + "DiskId must be from 0 to 9", + "DiskSize is too large", + "DiskSize is too small", + "memory allocation failed", + "unknown error O_o", + 0}; +//#endif + +void Console_Work() +{ + unsigned int disk_size, driver_rezult; + char size_t[256]; + + strlwr(#param); + + switch (param[0]) + { + case '?': // + case 'h': + debug("tmpdisk command line parameters:"); + debug("a[number]s[size in MB] - add RAM disk"); + debug("d[number] - delete RAM disk"); + ExitProcess(); + break; + case 'd': // + debug("trying to delete disk"); + del_disk.DiskId = param[1]-'0'; + ioctl.handle = driver_handle; + ioctl.io_code = DEV_DEL_DISK; + ioctl.input = #del_disk; + ioctl.inp_size = sizeof(del_disk); + ioctl.output = 0; + ioctl.out_size = 0; + break; + case 'a': // + debug("trying to add disk"); + disk_size= strchr(#param, 's'); + if (!disk_size) + { + add_disk.DiskSize = GetFreeRAM() / 5; + debug("disk size is not specified"); + strcpy(#size_t, "10% from free RAM will be used, new DiskSize: "); + driver_rezult=itoa(add_disk.DiskSize/2048); + strcat(#size_t, driver_rezult); + //strcat(#size_t, itoa(add_disk.DiskSize/2048)); + strcat(#size_t, " MB"); + debug(#size_t); + } + else + add_disk.DiskSize = atoi(#param+disk_size)*2048; + + add_disk.DiskId = param[1]-'0'; + ioctl.handle = driver_handle; + ioctl.io_code = DEV_ADD_DISK; + ioctl.input = #add_disk; + ioctl.inp_size = sizeof(add_disk); + ioctl.output = 0; + ioctl.out_size = 0; + break; + default: + debug("unknown command line parameters"); + debug("use 'h' or '?' for help"); + ExitProcess(); + } + + driver_rezult = RuleDriver(#ioctl); + if (driver_rezult<7) debug(rezult_text[driver_rezult]); +} + diff --git a/programs/cmm/tmpdisk/t_window.c b/programs/cmm/tmpdisk/t_window.c new file mode 100644 index 000000000..3951415fa --- /dev/null +++ b/programs/cmm/tmpdisk/t_window.c @@ -0,0 +1,266 @@ +#include "..\lib\figures.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +#include "..\lib\edit_box_lib.h" + +#ifdef LANG_RUS + unsigned char *but_text[]={ + " [F2]"w, + " [Del]"w, + " [Ctrl+Enter]"w, + 0}; + + ?define INTRO_TEXT_1 " "w + ?define INTRO_TEXT_2 " ."w + ?define INTRO_TEXT_3 " ..."w + + ?define NOTIFY_TEXT_NO_DISK " "w + ?define NOTIFY_TEXT_DISK_LIMIT " "w + +#else + unsigned char *but_text[]={ + "Add disk [F2]", + "Delete disk [Del]", + "Add [Ctrl+Enter]", + 0}; + + ?define INTRO_TEXT_1 " There will be list of mounted" + ?define INTRO_TEXT_2 " virtual disks." + ?define INTRO_TEXT_3 " Try to add one..." + + ?define NOTIFY_TEXT_NO_DISK "You need to have at least one disk" + ?define NOTIFY_TEXT_DISK_LIMIT "Reached the limit of the number of virtual disks" +#endif + +struct path_string { unsigned char Item[256]; }; +path_string disk_list[40]; + +dword devbuf; +int disk_num; +int selected; + +system_colors sc; +proc_info Form; + +int mouse_dd; +unsigned char dsize[30]; +edit_box edit1= {40,20,200,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,4,#dsize,#mouse_dd,100000000000010b}; + +unsigned char icons[14*56] = FROM "icons.raw"; + + + +void Main_Window() +{ + unsigned int id; + unsigned char key; + + mem_Init(); + if (load_dll2(boxlib, #edit_box_draw,0)!=0) + { + notify("error: library doesn't exists /rd/1/lib/box_lib.obj"); + ExitProcess(); + } + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + //edit_box_mouse stdcall (#edit1); + break; + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) AddDisk(); + if (id==11) //del + { + _DEL_DISK: + if (disk_num==0) + { + notify(NOTIFY_TEXT_NO_DISK); + break; + } + param[0]='d'; + param[1]=disk_list[selected].Item[3]; + Console_Work(); + Pause(15); + GetDisks(); + DrawTmpDisks(); + } + if (id>=20) + { + if (selected==id-20) OpenTmpDisk(); + selected=id-20; + DrawTmpDisks(); + } + break; + case evKey: + key = GetKey(); + if (key==182) if (disk_num<>0) goto _DEL_DISK; + if (key==51) AddDisk(); + if (key==13) OpenTmpDisk(); + if (key==178) + { + if (selected==0) break; + selected--; + DrawTmpDisks(); + } + if (key==177) + { + if (selected+2>disk_num) break; + selected++; + DrawTmpDisks(); + } + if (key==176) + { + if (selected<3) break; + selected-=3; + DrawTmpDisks(); + } + if (key==179) + { + if (selected+4>disk_num) break; + selected+=3; + DrawTmpDisks(); + } + //EAX=key<<8; + //edit_box_key stdcall(#edit1); + break; + case evReDraw: + Draw_Window(); + } + } +} + + +void OpenTmpDisk() +{ + unsigned char eol_param[256]; + if (!disk_num) return; + strcpy(#eol_param, "/tmp#/1/"); + eol_param[4]=disk_list[selected].Item[3]; + RunProgram("/sys/File managers/Eolite", #eol_param); +} + + +void GetDisks() +{ + unsigned int j, fcount=30; + unsigned char disk_name[256]; + + mem_Free(devbuf); + devbuf= mem_Alloc(32); + ReadDir(0, devbuf, "/"); + fcount=ESDWORD[devbuf+8]; + mem_Free(devbuf); + devbuf = mem_Alloc(fcount+1*304+32); + ReadDir(fcount, devbuf, "/"); + + disk_num=0; + for (j=0; j12) disk_num=12; +} + + +unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223}; +unsigned int disk_pos_y[]={40,65,90,40,65,90,40,65,90,40,65,90}; + +void DrawTmpDisks() +{ + int i; + DrawBar(0,31, Form.width-9,Form.height-GetSkinHeight()-5-30, 0xFFFFFF); + if (disk_num==0) + { + WriteText(17,45, 0x90, 0x777777, INTRO_TEXT_1, 0); + WriteText(17,45+15, 0x90, 0x777777, INTRO_TEXT_2, 0); + WriteText(17,45+42, 0x90, 0x777777, INTRO_TEXT_3, 0); + return; + }; + if (selected>=disk_num) selected=disk_num-1; // - + for (i=0; i<10; i++) DeleteButton(20+i); + for (i=0; i=10) + { + notify(NOTIFY_TEXT_DISK_LIMIT); + return; + } + param[0]='a'; + for (i=0; i<9; i++) + { + for (j=0; j<=disk_num; j++) + { + if (i+48==disk_list[j].Item[3]) continue 1; + } + break; + } + param[1]=i+48; + Console_Work(); + Pause(5); + GetDisks(); + DrawTmpDisks(); +} + +void Draw_Window() +{ + int i, x; + + sc.get(); + DefineAndDrawWindow(170,150,314,250,0x74,sc.work,"Virtual Disk Manager 0.4",0); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) return; // , + + // + DrawBar(0,0, Form.width-9,30, sc.work); + DrawBar(0,30, Form.width-9,1, sc.work_graph); + x=6; + for (i=0; i<2; i++) + { + DefineButton(x,5, strlen(but_text[i])*6+28,19, 10+i, sc.work_button); + _PutImage(x+3,8, 14,14, i*14*14*3+#icons); + WriteText(x+22,11, 0x80, sc.work_button_text, but_text[i], 0); + x+=strlen(but_text[i])*6+37; + } + + // + GetDisks(); + // + DrawTmpDisks(); + //AddPanel(); +} + +/*void AddPanel() +{ + DrawBar(0,Form.height-GetSkinHeight()-40, Form.width-9,1, sc.work_graph); + DrawBar(0,Form.height-GetSkinHeight()-39, Form.width-9,35, sc.work); + + strcpy(#dsize, itoa(GetFreeRAM()/10)); + //strcpy(#dsize, "100"); + edit1.size=edit1.pos=strlen(#dsize); + edit_box_draw stdcall(#edit1); // + //DefineButton(-strlen(but_text[2])+Form.width-9,200, strlen(but_text[2])*6+28,19, 12, sc.work_button); + //_PutImage(-strlen(but_text[2])+Form.width-9+3,200+3, 14,14, 2*14*14*3+#icons); +}*/ + + + + + + diff --git a/programs/cmm/tmpdisk/tmpdisk.c b/programs/cmm/tmpdisk/tmpdisk.c new file mode 100644 index 000000000..7bc5c7f26 --- /dev/null +++ b/programs/cmm/tmpdisk/tmpdisk.c @@ -0,0 +1,71 @@ +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\file_system.h" + +#include "lang.h" + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +struct ioctl_struct +{ + dword handle; + dword io_code; + dword input; + dword inp_size; + dword output; + dword out_size; +}; + +#define DEV_ADD_DISK 1 //input = structure add_disk_struc +#define DEV_DEL_DISK 2 //input = structure del_disk_struc + +struct add_disk_struc +{ + dword DiskSize; // in sectors, 1 sector = 512 bytes. Include FAT service data + unsigned char DiskId; // from 0 to 9 +}; + +struct del_disk_struc +{ + unsigned char DiskId; //from 0 to 9 +}; + + +ioctl_struct ioctl; +add_disk_struc add_disk; +del_disk_struc del_disk; + +int driver_handle; + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +#include "t_console.c" +#include "t_window.c" + + +void main() +{ + debug("========= tmpdisk 0.4 ========="); + driver_handle = LoadDriver("tmpdisk"); + if (driver_handle==0) + { + notify("error: /rd1/1/lib/tmpdisk.obj driver loading failed"); + notify("program terminated"); + ExitProcess(); + } + else + debug("tmpdisk.obj driver loaded successfully"); + + if (param) + Console_Work(); + else + Main_Window(); + + + ExitProcess(); +} + +stop: