mathgl-2.4.1/0000775000175000017500000000000013134047003012553 5ustar balakinbalakinmathgl-2.4.1/emblem.mgl0000664000175000017500000000142113134046774014531 0ustar balakinbalakinsetsize 1000 500 text 0.95 0.8 'MathGL' ':RiA' -4 text 0.05 0.15 'library\n for scientific graphics' ':LiA' -2. #rect 0.05 0.9 2 1.5 1.34 2 'w' xtick -3:ytick -3:ztick -3 subplot 1 1 0 '^_' stickplot 3 0 60 20:box new y 50: fill y '-cos(pi*x-pi/4)' new x 50: fill x '-sin(pi*x-pi/4)' new z 50: fill z '2*x^2-1' area x y z 'lG' plot x y z 'B2s' stickplot 3 1 60 20:box new aa 50 40 modify aa '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' mirror aa 'y' light on :alpha on surf aa 'BbcyrR';alpha 0.8 cont aa 'y' stickplot 3 2 60 20:box rotate 0 20 new a 61 51 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' alpha on:light off cloud a 'wyrRk' stop cut 0 -1 -1 1 0 1.1 surf3 a -1 'BbcyrR' contf3 a 'x' -1 contf3 a 'y' -1 contf3 a 'z' 0 contf3 a 'z' 39 mathgl-2.4.1/widgets/0000775000175000017500000000000013134046554014233 5ustar balakinbalakinmathgl-2.4.1/widgets/qt4/0000775000175000017500000000000013134046554014743 5ustar balakinbalakinmathgl-2.4.1/widgets/qt4/CMakeLists.txt0000664000175000017500000000177013134046554017510 0ustar balakinbalakininclude(GenerateExportHeader) if(enable-qt4) include(../../scripts/qt4.cmake) set(MGL_QT4_FILES ../qt.cpp ../../include/mgl2/qt.h ../../include/mgl2/qmathgl.h) mgl_add_lib(qt4 ${MGL_QT4_FILES}) target_link_libraries(mgl-qt4 mgl ${MGL_QT4_LIBS}) target_link_libraries(mgl-qt4-static mgl-static ${MGL_QT4_LIBS}) if(enable-qt4asqt) mgl_add_lib(qt ${MGL_QT4_FILES}) target_link_libraries(mgl-qt mgl ${MGL_QT4_LIBS}) target_link_libraries(mgl-qt-static mgl-static ${MGL_QT4_LIBS}) endif(enable-qt4asqt) if(MGL_HAVE_FLTK AND NOT enable-qt5) mgl_add_lib(wnd ${MGL_QT4_FILES} ../fltk.cpp ../../include/mgl2/fltk.h ../image.cpp ../image.h) target_include_directories(mgl-wnd SYSTEM PUBLIC ${FLTK_INCLUDE_DIR}) target_include_directories(mgl-wnd-static SYSTEM PUBLIC ${FLTK_INCLUDE_DIR}) target_link_libraries(mgl-wnd mgl ${FLTK_LIBRARIES} ${MGL_QT4_LIBS}) target_link_libraries(mgl-wnd-static mgl-static ${FLTK_LIBRARIES} ${MGL_QT4_LIBS}) endif(MGL_HAVE_FLTK AND NOT enable-qt5) endif(enable-qt4) mathgl-2.4.1/widgets/image.h0000664000175000017500000000564013134046554015473 0ustar balakinbalakin/* image.h is part of UDAV * Copyright (C) 2007-2014 Alexey Balakin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation * * 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 */ //----------------------------------------------------------------------------- #ifndef IMAGE_H #define IMAGE_H //----------------------------------------------------------------------------- #include extern MGL_EXPORT Fl_RGB_Image img_load; extern MGL_EXPORT Fl_RGB_Image img_save; extern MGL_EXPORT Fl_RGB_Image img_calc; extern MGL_EXPORT Fl_RGB_Image img_undo; extern MGL_EXPORT Fl_RGB_Image img_redo; extern MGL_EXPORT Fl_RGB_Image img_copy; extern MGL_EXPORT Fl_RGB_Image img_paste; extern MGL_EXPORT Fl_RGB_Image img_find; extern MGL_EXPORT Fl_RGB_Image img_prop; extern MGL_EXPORT Fl_RGB_Image img_alpha; extern MGL_EXPORT Fl_RGB_Image img_light; extern MGL_EXPORT Fl_RGB_Image img_grid; extern MGL_EXPORT Fl_RGB_Image img_move; extern MGL_EXPORT Fl_RGB_Image img_orig; extern MGL_EXPORT Fl_RGB_Image img_update; extern MGL_EXPORT Fl_RGB_Image img_stop; extern MGL_EXPORT Fl_RGB_Image img_insert; extern MGL_EXPORT Fl_RGB_Image img_print; extern MGL_EXPORT Fl_RGB_Image img_goL; extern MGL_EXPORT Fl_RGB_Image img_goU; extern MGL_EXPORT Fl_RGB_Image img_zoomIn; extern MGL_EXPORT Fl_RGB_Image img_zoomOut; extern MGL_EXPORT Fl_RGB_Image img_goD; extern MGL_EXPORT Fl_RGB_Image img_goR; extern MGL_EXPORT Fl_RGB_Image img_next; extern MGL_EXPORT Fl_RGB_Image img_play; extern MGL_EXPORT Fl_RGB_Image img_prev; extern MGL_EXPORT Fl_RGB_Image img_plot; extern MGL_EXPORT Fl_RGB_Image img_system; extern MGL_EXPORT Fl_RGB_Image img_info; extern MGL_EXPORT Fl_RGB_Image img_help; extern MGL_EXPORT Fl_RGB_Image img_delete; extern MGL_EXPORT Fl_RGB_Image img_objectU; extern MGL_EXPORT Fl_RGB_Image img_objectD; extern MGL_EXPORT Fl_RGB_Image img_layer; extern MGL_EXPORT Fl_RGB_Image img_new; extern MGL_EXPORT Fl_RGB_Image img_clear; extern MGL_EXPORT Fl_RGB_Image img_plus; extern MGL_EXPORT Fl_RGB_Image img_minus; extern MGL_EXPORT Fl_RGB_Image img_udav; extern MGL_EXPORT Fl_RGB_Image img_fname; extern MGL_EXPORT Fl_RGB_Image img_curve; extern MGL_EXPORT Fl_RGB_Image img_svn; extern MGL_EXPORT Fl_RGB_Image img_adjust; extern MGL_EXPORT Fl_RGB_Image img_reload; extern MGL_EXPORT Fl_RGB_Image img_zoom12; extern MGL_EXPORT Fl_RGB_Image img_zoom21; extern MGL_EXPORT Fl_RGB_Image img_pause; #endif mathgl-2.4.1/widgets/fltk.cpp0000664000175000017500000011572213134046554015707 0ustar balakinbalakin/*************************************************************************** * fltk.cpp is part of Math Graphic Library * Copyright (C) 2007-2016 Alexey Balakin * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * * published by the Free Software Foundation; either version 3 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 Library 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. * ***************************************************************************/ #include #include #include #include #include //----------------------------------------------------------------------------- #include "mgl2/canvas_wnd.h" #include "mgl2/Fl_MathGL.h" #include //----------------------------------------------------------------------------- #define MGL_MAX_LINES (INT_MAX-1000) //----------------------------------------------------------------------------- /// Class allows the window creation for displaying plot bitmap with the help of FLTK library /** NOTE!!! All frames are saved in memory. So animation with many frames require a lot memory and CPU time (for example, for mouse rotation).*/ class mglCanvasFL : public mglCanvasWnd { public: using mglCanvasWnd::Window; Fl_Window *Wnd; ///< Pointer to window Fl_MGLView *mgl; ///< Pointer to MGL widget with buttons mglCanvasFL(); virtual ~mglCanvasFL(); /// Create a window for plotting. Now implemeted only for GLUT. void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p), const char *title, void *par=NULL, void (*reload)(void *p)=NULL, bool maximize=false); /// Switch on/off transparency (do not overwrite switches in user drawing function) void ToggleAlpha(); /// Switch on/off lighting (do not overwrite switches in user drawing function) void ToggleLight(); void ToggleRotate(); ///< Switch on/off rotation by mouse void ToggleZoom(); ///< Switch on/off zooming by mouse void ToggleNo(); ///< Switch off all zooming and rotation void Update(); ///< Update picture by calling user drawing function void Adjust(); ///< Adjust size of bitmap to window size void GotoFrame(int d); ///< Show arbitrary frame (use relative step) void Animation(); ///< Run animation (I'm too lasy to change it) }; //----------------------------------------------------------------------------- void MGL_EXPORT mgl_ask_fltk(const wchar_t *quest, wchar_t *res) { static char buf[1024]; *res=0; // TODO #if FL_MINOR_VERSION>=3 fl_utf8fromwc(buf, 1024, quest, mgl_wcslen(quest)+1); const char *str = fl_input("%s",buf,""); if(str) fl_utf8towc(str, strlen(str)+1, res, 1024); #else wcstombs(buf,quest,mgl_wcslen(quest)+1); const char *str = fl_input("%s",buf,""); MGL_TO_WCS(str,wcscpy(res,str)); #endif } //----------------------------------------------------------------------------- // // class Fl_MathGL // //----------------------------------------------------------------------------- MGL_EXPORT const char *mgl_file_chooser(const char *mess, const char *filter, bool save) { static Fl_Native_File_Chooser fnfc; fnfc.title(mess); fnfc.type(save ? Fl_Native_File_Chooser::BROWSE_SAVE_FILE : Fl_Native_File_Chooser::BROWSE_FILE); fnfc.filter(filter); // fnfc.directory("/var/tmp"); // default directory to use fnfc.show(); return fnfc.filename(); } MGL_EXPORT const char *mgl_dir_chooser(const char *mess, const char *path) { static Fl_Native_File_Chooser fnfc; fnfc.title(mess); fnfc.type(Fl_Native_File_Chooser::BROWSE_DIRECTORY); fnfc.directory(path); // default directory to use fnfc.show(); return fnfc.filename(); } //----------------------------------------------------------------------------- Fl_MathGL::Fl_MathGL(int xx, int yy, int ww, int hh, const char *lbl) : Fl_Widget(xx,yy,ww,hh,lbl) { gr = new mglCanvas; use_pthr = true; tet=phi=x1=y1=0; x2=y2=1; img = 0; zoom = rotate = handle_keys = grid = false; flag=x0=y0=xe=ye=0; show_warn=true; tet_val = phi_val = 0; draw_par = 0; draw_func = 0; draw_cl = 0; last_id = -1; run = false; popup=0; vpar=0; wpar=0; thr=0; } //----------------------------------------------------------------------------- Fl_MathGL::~Fl_MathGL() { if(mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); } //----------------------------------------------------------------------------- void Fl_MathGL::stop(bool stop) { gr->AskStop(stop); } //----------------------------------------------------------------------------- void mgl_fltk_event_func(void *) { Fl::awake(); } //----------------------------------------------------------------------------- void Fl_MathGL::set_graph(HMGL GR) { mglCanvas *gg = dynamic_cast(GR); if(!gg) return; if(gr && mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); gr=gg; mgl_use_graph(gg,1); gr->SetEventFunc(mgl_fltk_event_func, NULL); } //----------------------------------------------------------------------------- void Fl_MathGL::draw() { if(!img) img = mgl_get_rgb(gr); int ww=mgl_get_width(gr), hh=mgl_get_height(gr); if(img) fl_draw_image(img, x(), y(), ww, hh, 3); if(grid) { char str[5]="0.0"; fl_color(192,192,192); for(int i=1;i<10;i++) { str[2] = '0'+10-i; fl_draw(str, x(), y()+i*hh/10); fl_line(x(), y()+i*hh/10, x()+ww, y()+i*hh/10); str[2] = '0'+i; fl_draw(str, x()+i*ww/10, y()+hh); fl_line(x()+i*ww/10, y(), x()+i*ww/10, y()+hh); } int d = (hh>ww?ww:hh)/100; for(size_t i=0;iAct.size();i++) { const mglActivePos &p=gr->Act[i]; fl_rectf(x()+p.x-d/2, y()+p.y-d/2-1, d,d, fl_rgb_color(127,255,63)); fl_rect(x()+p.x-d/2, y()+p.y-d/2-1, d,d, FL_BLACK); } mgl_set_flag(gr,1,MGL_SHOW_POS); } else mgl_set_flag(gr,0,MGL_SHOW_POS); } //----------------------------------------------------------------------------- inline void Fl_MathGL::draw_plot() // drawing itself { if(draw_func || draw_cl) { mgl_set_def_param(gr); mgl_reset_frames(gr); if(mgl_get_flag(gr,MGL_CLF_ON_UPD)) mgl_set_def_param(gr); mgl_set_alpha(gr,flag&1); mgl_set_light(gr,flag&2); if(tet_val) tet = tet_val->value(); if(phi_val) phi = phi_val->value(); mgl_zoom(gr,x1,y1,x2,y2); mgl_view(gr,-phi,-tet,0); const std::string loc = setlocale(LC_NUMERIC, "C"); // use frames for quickly redrawing while adding/changing primitives if(mgl_is_frames(gr)) mgl_new_frame(gr); if(draw_func) draw_func(gr, draw_par); else if(draw_cl) { mglGraph g(gr); draw_cl->Draw(&g); } if(mgl_is_frames(gr)) mgl_end_frame(gr); setlocale(LC_NUMERIC, loc.c_str()); const char *buf = mgl_get_mess(gr); if(show_warn && *buf) fl_message("%s",buf); if(!prim.empty()) // manual primitives { const std::string loc = setlocale(LC_NUMERIC, "C"); mgl_subplot(gr,1,1,0,"#"); mgl_set_ranges(gr, -1,1, -1,1, -1,1); mglParse pr; pr.StartID(MGL_MAX_LINES); mgl_parse_text(gr,pr.Self(),prim.c_str()); setlocale(LC_NUMERIC, loc.c_str()); } } else if(mgl_get_num_frame(gr)>0) { mgl_set_alpha(gr,flag&1); mgl_set_light(gr,flag&2); if(tet_val) tet = tet_val->value(); if(phi_val) phi = phi_val->value(); mgl_zoom(gr,x1,y1,x2,y2); mgl_view(gr,-phi,-tet,0); mgl_get_frame(gr,0); } mgl_finish(gr); img = mgl_get_rgb(gr); run = false; Fl::awake(); } //----------------------------------------------------------------------------- MGL_NO_EXPORT void *draw_plot_thr(void *v) { ((Fl_MathGL*)v)->draw_plot(); return 0; } //----------------------------------------------------------------------------- void Fl_MathGL::update() { if(run) return; // Fl::lock(); run = true; #if MGL_HAVE_FL_COPY top_window()->cursor(FL_CURSOR_WAIT); #endif #if MGL_HAVE_PTHR_WIDGET if(use_pthr) { pthread_create(&thr,0,draw_plot_thr,this); while(run) Fl::wait(); pthread_join(thr,0); } else #endif draw_plot(); // Fl::unlock(); if(mgl_get_width(gr)!=w() || mgl_get_height(gr)!=h()) size(mgl_get_width(gr), mgl_get_height(gr)); gr->AskStop(false); redraw(); #if MGL_HAVE_FL_COPY top_window()->cursor(FL_CURSOR_DEFAULT); #endif Fl::flush(); } //----------------------------------------------------------------------------- void Fl_MathGL::resize(int xx, int yy, int ww, int hh) { Fl_Widget::resize(xx,yy,ww,hh); } //----------------------------------------------------------------------------- int Fl_MathGL::handle(int code) { static bool busy=false; static int last_pos=-1; if(handle_keys && code==FL_KEYUP && Fl::event_button()!=FL_LEFT_MOUSE) { int key=Fl::event_key(); if(!strchr(" .,wasdrfx",key)) return 0; if(key==' ') { update(); return 1; } if(key=='w') { tet += 10; if(tet_val) tet_val->value(tet); update(); return 1; } if(key=='s') { tet -= 10; if(tet_val) tet_val->value(tet); update(); return 1; } if(key=='a') { phi += 10; if(phi_val) phi_val->value(phi); update(); return 1; } if(key=='d') { phi -= 10; if(phi_val) phi_val->value(phi); update(); return 1; } if(key=='x') { mglCanvasFL *g=dynamic_cast(gr); if(g && g->mgl->FMGL==this) { g->Wnd->hide(); return 1; } else return 0; // exit(0); } if(key==',') { mglCanvasFL *g=dynamic_cast(gr); if(g && g->mgl->FMGL==this) { g->PrevFrame(); return 1; } else return 0; } if(key=='.') { mglCanvasFL *g=dynamic_cast(gr); if(g && g->mgl->FMGL==this) { g->NextFrame(); return 1; } else return 0; } if(key=='r') { flag = (flag&2) + ((~(flag&1))&1); update(); return 1; } if(key=='f') { flag = (flag&1) + ((~(flag&2))&2); update(); return 1; } } else if(code==FL_PUSH) { last_pos=-1; xe=x0=Fl::event_x(); ye=y0=Fl::event_y(); if(popup && Fl::event_button()==FL_RIGHT_MOUSE) { const Fl_Menu_Item *m = popup->popup(Fl::event_x(), Fl::event_y(), 0, 0, 0); if(m) m->do_callback(wpar, vpar); } else if(!zoom && !rotate && Fl::event_button()==FL_LEFT_MOUSE) { int xx = x0-x(), yy = y0-y(); last_id = mgl_get_obj_id(gr,xx, yy); if(last_id>=MGL_MAX_LINES) last_id=-1; mglCanvasWnd *g=dynamic_cast(gr); if(g && g->ClickFunc) g->ClickFunc(draw_par); if(mgl_get_flag(gr,MGL_SHOW_POS)) { mglPoint p = gr->CalcXYZ(xx, yy); if(g) g->LastMousePos = p; char s[128]; snprintf(s,128,"x=%g, y=%g, z=%g",p.x,p.y,p.z); s[127]=0; draw(); fl_color(FL_BLACK); fl_draw(s,40,70); } if(Fl::event_clicks()) { int id = mgl_get_obj_id(gr,x0-x(), y0-y()) - MGL_MAX_LINES-1; if(grid && id>=0) // delete manual primitive { prim = (id>0?mgl_str_arg(prim, '\n', 0,id-1)+'\n':"") + mgl_str_arg(prim, '\n', id+1,INT_MAX); update(); } else if(draw_cl) draw_cl->Click(); else update(); } } return 1; } else if(code==FL_DRAG) { if(busy) return 1; // remove possible conflicts of too often events busy = true; xe=Fl::event_x(); ye=Fl::event_y(); mreal ff = 240./sqrt(mreal(w()*h())); // handle primitives int id = mgl_get_obj_id(gr,x0-x(), y0-y()) - MGL_MAX_LINES-1; int ww=mgl_get_width(gr), hh=mgl_get_height(gr), d=(hh>ww?ww:hh)/100; long pos = mgl_is_active(gr,x0-x(),y0-y(),d); if(grid && pos<0) pos=last_pos; if(grid && pos>=0) { // Fl::lock(); last_pos=pos; const mglActivePos &p = gr->Act[pos]; id = long(p.id)-MGL_MAX_LINES-1; if(id<0) return 0; std::string line = mgl_str_arg(prim, '\n', id), res; if(line.empty()) return 0; // NOTE stupid check (never should be here) std::vector arg = mgl_str_args(line,' '); // try "attract" mouse for(size_t i=0;i<=10;i++) { int tt = i*(w()/10); if(abs(xe-tt)<2*d) xe = tt; tt = i*(h()/10); if(abs(ye-tt)<2*d) ye = tt; } for(size_t i=0;iAct.size();i++) { const mglActivePos &q = gr->Act[i]; if(abs(xe-q.x)<2*d && abs(ye-q.y)<2*d) { xe=q.x; ye=q.y; } } // now move point float dx = 2*(xe-x0)/float(w()), dy = 2*(y0-ye)/float(h()); float xx=atof(arg[1].c_str()), yy=atof(arg[2].c_str()); if(p.n==0) { arg[1]=mgl_str_num(xx+dx); arg[2]=mgl_str_num(yy+dy); } else if(arg[0]=="rect") { float x_=atof(arg[3].c_str()), y_=atof(arg[4].c_str()); if(p.n==1) { xx+=dx; y_+=dy; } if(p.n==2) { x_+=dx; yy+=dy; } if(p.n==3) { x_+=dx; y_+=dy; } arg[1]=mgl_str_num(xx); arg[2]=mgl_str_num(yy); arg[3]=mgl_str_num(x_); arg[4]=mgl_str_num(y_); } else if(p.n==1) { float xx=atof(arg[3].c_str()), yy=atof(arg[4].c_str()); arg[3]=mgl_str_num(xx+dx); arg[4]=mgl_str_num(yy+dy); } else if(arg[0]=="rhomb" || arg[0]=="ellipse") { float x_=atof(arg[3].c_str())-xx, y_=atof(arg[4].c_str())-yy; float r_=atof(arg[5].c_str()), dr=0; if(x_*x_+y_*y_>0) { dr = (dx*x_+dy*y_)/(x_*x_+y_*y_); dr = hypot(dx-dr*x_,dy-dr*y_); } else dr = hypot(dx,dy); arg[5]=mgl_str_num(r_+dr); } else if(arg[0]=="arc") { float x_=atof(arg[3].c_str())-xx, y_=atof(arg[4].c_str())-yy; float a_=atof(arg[5].c_str()); double c=cos(M_PI*a_/180), s=sin(M_PI*a_/180); double a = atan2(x_,y_) - atan2(x_*c-y_*s+dx,x_*s+y_*c+dy); arg[5]=mgl_str_num(a*180/M_PI); } else if(p.n==2) { float xx=atof(arg[5].c_str()), yy=atof(arg[6].c_str()); arg[5]=mgl_str_num(xx+dx); arg[6]=mgl_str_num(yy+dy); } else if(p.n==3) { float xx=atof(arg[7].c_str()), yy=atof(arg[8].c_str()); if(arg[0]=="curve") { dx*=-1; dy*=-1; } arg[7]=mgl_str_num(xx+dx); arg[8]=mgl_str_num(yy+dy); } res = arg[0]; for(size_t i=1;i0?mgl_str_arg(prim, '\n', 0,id-1)+'\n':"") + res+'\n' + mgl_str_arg(prim, '\n', id+1,INT_MAX); // Fl::unlock(); x0 = xe; y0 = ye; update(); } else if(grid && id>=0) { // Fl::lock(); std::string line = mgl_str_arg(prim, '\n', id), res; if(line.empty()) return 0; // NOTE stupid check (never should be here) std::vector arg = mgl_str_args(line,' '); float dx = 2*(xe-x0)/float(w()), dy = 2*(y0-ye)/float(h()); float x1=atof(arg[1].c_str()), y1=atof(arg[2].c_str()); arg[1] = mgl_str_num(x1+dx); arg[2] = mgl_str_num(y1+dy); if(arg[0]=="curve") { float x2=atof(arg[5].c_str()), y2=atof(arg[6].c_str()); arg[5]=mgl_str_num(x2+dx); arg[6]=mgl_str_num(y2+dy); } else if(arg[0]!="ball") { float x2=atof(mgl_str_arg(line,' ',3).c_str()), y2=atof(mgl_str_arg(line,' ',4).c_str()); arg[3]=mgl_str_num(x2+dx); arg[4]=mgl_str_num(y2+dy); } res = arg[0]; for(size_t i=1;i0?mgl_str_arg(prim, '\n', 0,id-1)+'\n':"") + res+'\n' + mgl_str_arg(prim, '\n', id+1,INT_MAX); // Fl::unlock(); x0 = xe; y0 = ye; update(); } else if(rotate) { phi += (x0-xe)*ff; tet += (y0-ye)*ff; if(phi>180) phi-=360; if(phi<-180) phi+=360; if(tet>180) tet-=360; if(tet<-180) tet+=360; if(tet_val) tet_val->value(tet); if(phi_val) phi_val->value(phi); x0 = xe; y0 = ye; update(); } busy = false; redraw(); return 1; } else if(code==FL_RELEASE) { last_pos=-1; if(zoom) { int w1=w(),h1=h(); mreal _x1,_x2,_y1,_y2; _x1 = x1+(x2-x1)*(x0-x())/mreal(w1); _y1 = y2-(y2-y1)*(ye-y())/mreal(h1); _x2 = x1+(x2-x1)*(xe-x())/mreal(w1); _y2 = y2-(y2-y1)*(y0-y())/mreal(h1); x1=_x1; x2=_x2; y1=_y1; y2=_y2; if(x1>x2) { _x1=x1; x1=x2; x2=_x1; } if(y1>y2) { _x1=y1; y1=y2; y2=_x1; } update(); } else if(rotate) { if(tet_val) tet_val->value(tet); if(phi_val) phi_val->value(phi); } redraw(); return 1; } return 0; } //----------------------------------------------------------------------------- // // class Fl_MGLView // //----------------------------------------------------------------------------- void Fl_MGLView::toggle(int &val, Fl_Button *b, const char *txt) { val = 1-val; b->value(val); if(menu && txt && *txt) { Fl_Menu_Item *m = (Fl_Menu_Item *)menu->find_item(_(txt)); if(m && val) m->set(); if(m && !val) m->clear(); } update(); } //----------------------------------------------------------------------------- void Fl_MGLView::setoff(int &val, Fl_Button *b, const char *txt) { val = 0; b->value(val); if(menu && txt && *txt) { Fl_Menu_Item *m = (Fl_Menu_Item *)menu->find_item(_(txt)); if(m && val) m->set(); if(m && !val) m->clear(); } //update(); } //----------------------------------------------------------------------------- void Fl_MGLView::exec_pause() { #if MGL_HAVE_PTHR_WIDGET pthread_mutex_t *mutex=0; mglCanvasWnd *g=dynamic_cast(FMGL->gr); if(g && g->mutex) mutex = g->mutex; else { mglDraw *d=FMGL->get_class(); if(d) mutex = &(d->mutex); } if(mutex) { pthread_mutex_trylock(mutex); if(!pauseC) pthread_mutex_unlock(mutex); } #endif } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_pause_cb(Fl_Widget*, void* v) { if(v) ((Fl_MGLView*)v)->toggle_pause(); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_grid_cb(Fl_Widget*, void* v) { if(v) ((Fl_MGLView*)v)->toggle_grid(); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_alpha_cb(Fl_Widget*, void* v) { if(v) ((Fl_MGLView*)v)->toggle_alpha(); } void mglCanvasFL::ToggleAlpha() { mgl->toggle_alpha(); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_light_cb(Fl_Widget*, void* v) { if(v) ((Fl_MGLView*)v)->toggle_light(); } void mglCanvasFL::ToggleLight() { mgl->toggle_light(); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_norm_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; e->setoff_rotate(); e->setoff_zoom(); e->FMGL->tet_val->value(0); e->FMGL->phi_val->value(0); e->FMGL->set_zoom(0,0,1,1); e->update(); } void mglCanvasFL::ToggleNo() { mgl_norm_cb(0,mgl); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_zoom_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; e->setoff_rotate(); e->toggle_zoom(); } void mglCanvasFL::ToggleZoom() { mgl_zoom_cb(0,mgl); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_rotate_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; e->setoff_zoom(); e->toggle_rotate(); } void mglCanvasFL::ToggleRotate() { mgl_rotate_cb(0,mgl); } //----------------------------------------------------------------------------- void Fl_MGLView::update() { FMGL->set_state(zoom_bt->value(), rotate_bt->value(), grid_bt->value()); FMGL->set_flag(alpha + 2*light); FMGL->update(); } void MGL_NO_EXPORT mgl_draw_cb(Fl_Widget*, void* v) { if(v) ((Fl_MGLView*)v)->update(); } void mglCanvasFL::Update() { mgl->update(); Wnd->show(); } //----------------------------------------------------------------------------- MGL_NO_EXPORT const char *mgl_save_name(const char *ext) { static std::string fname; fname = mgl_file_chooser(_("Save File As?"), ext, true); if(fname.empty()) return NULL; if(fname.find(ext+1)==std::string::npos) fname += ext+1; return fname.c_str(); } #define _FGR_ ((Fl_MGLView*)v)->FMGL->get_graph() //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_png_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.png"); if(fname) mgl_write_png(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_bps_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.eps"); if(fname) mgl_write_bps(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_pngn_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.png"); if(fname) mgl_write_png_solid(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_jpeg_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.jpg"); if(fname) mgl_write_jpg(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_svg_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.svg"); if(fname) mgl_write_svg(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_eps_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.eps"); if(fname) mgl_write_eps(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_gif_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.gif"); if(fname) mgl_write_gif(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_bmp_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.bmp"); if(fname) mgl_write_bmp(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_prc_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.prc"); if(fname) mgl_write_prc(_FGR_,fname,0,1); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_tex_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.tex"); if(fname) mgl_write_tex(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_obj_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.obj"); if(fname) mgl_write_obj(_FGR_,fname,0,1); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_off_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.off"); if(fname) mgl_write_off(_FGR_,fname,0,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_stl_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.stl"); if(fname) mgl_write_stl(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_export_xyz_cb(Fl_Widget*, void* v) { const char *fname = mgl_save_name("*.xyz"); if(fname) mgl_write_xyz(_FGR_,fname,0); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_su_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; mreal x1,x2,y1,y2,d; e->FMGL->get_zoom(&x1,&y1,&x2,&y2); d = (y2-y1)/3; y1 -= d; y2 -= d; e->FMGL->set_zoom(x1,y1,x2,y2); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_sd_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; mreal x1,x2,y1,y2,d; e->FMGL->get_zoom(&x1,&y1,&x2,&y2); d = (y2-y1)/3; y1 += d; y2 += d; e->FMGL->set_zoom(x1,y1,x2,y2); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_sr_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; mreal x1,x2,y1,y2,d; e->FMGL->get_zoom(&x1,&y1,&x2,&y2); d = (x2-x1)/3; x1 -= d; x2 -= d; e->FMGL->set_zoom(x1,y1,x2,y2); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_sl_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; mreal x1,x2,y1,y2,d; e->FMGL->get_zoom(&x1,&y1,&x2,&y2); d = (x2-x1)/3; x1 += d; x2 += d; e->FMGL->set_zoom(x1,y1,x2,y2); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_sz_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; mreal x1,x2,y1,y2,d; e->FMGL->get_zoom(&x1,&y1,&x2,&y2); d = (y2-y1)/4; y1 += d; y2 -= d; d = (x2-x1)/4; x1 += d; x2 -= d; e->FMGL->set_zoom(x1,y1,x2,y2); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_so_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e) return; mreal x1,x2,y1,y2,d; e->FMGL->get_zoom(&x1,&y1,&x2,&y2); d = (y2-y1)/2; y1 -= d; y2 += d; d = (x2-x1)/2; x1 -= d; x2 += d; e->FMGL->set_zoom(x1,y1,x2,y2); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_adjust_cb(Fl_Widget*, void*v) { Fl_MGLView *e = (Fl_MGLView*)v; if(e) e->adjust(); } void mglCanvasFL::Adjust() { mgl_adjust_cb(0,mgl); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_oncemore_cb(Fl_Widget*, void*v) { Fl_MGLView *e = (Fl_MGLView*)v; if(e && e->reload) e->reload(e->par); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_quit_cb(Fl_Widget*, void*) { Fl::first_window()->hide(); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_snext_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(e && e->next) e->next(e->par); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_sprev_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(e && e->prev) e->prev(e->par); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_time_cb(void *v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e || !e->is_sshow() || !e->next || !e->delay) return; e->next(e->par); Fl::repeat_timeout(e->delay(e->par), mgl_time_cb, v); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_sshow_cb(Fl_Widget *, void *v) { Fl_MGLView *e = (Fl_MGLView*)v; if(!e || !e->delay || !e->next) return; e->toggle_sshow(); if(e->is_sshow()) Fl::add_timeout(e->delay(e->par), mgl_time_cb, v); } void mglCanvasFL::Animation() { mgl_sshow_cb(0,mgl); } void MGL_LOCAL_CONST mgl_no_cb(Fl_Widget *, void *) {} //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_stop_cb(Fl_Widget*, void* v) { Fl_MGLView *e = (Fl_MGLView*)v; if(e) e->FMGL->stop(); } //----------------------------------------------------------------------------- void MGL_NO_EXPORT mgl_fl_next(void *v) { ((mglCanvasWnd*)v)->NextFrame(); } ///< Callback function for next frame void MGL_NO_EXPORT mgl_fl_prev(void *v) { ((mglCanvasWnd*)v)->PrevFrame(); } ///< Callback function for prev frame void MGL_NO_EXPORT mgl_fl_reload(void *v) { ((mglCanvasWnd*)v)->ReLoad(); } ///< Callback function for reloading mreal MGL_LOCAL_PURE mgl_fl_delay(void *v) { return ((mglCanvasWnd*)v)->GetDelay(); } ///< Callback function for delay //----------------------------------------------------------------------------- void copy_coor_cb(Fl_Widget *,void *v) { HMGL gr = ((Fl_MGLView*)v)->get_graph(); mreal x,y,z; mgl_get_last_mouse_pos(gr,&x,&y,&z); static char buf[256]; snprintf(buf,255,_("click at %g, %g, %g"),x,y,z); Fl::copy(buf,strlen(buf),1); } //----------------------------------------------------------------------------- #if MGL_HAVE_FL_COPY #include void mgl_copyimg_cb(Fl_Widget *,void *v) { Fl_MathGL *g = ((Fl_MGLView*)v)->FMGL; Fl_Copy_Surface *copy_surf = new Fl_Copy_Surface(g->w(), g->h()); // create an Fl_Copy_Surface object copy_surf->set_current(); // direct graphics requests to the clipboard fl_color(FL_WHITE); fl_rectf(0, 0, g->w(), g->h()); // draw a white background copy_surf->draw(g); // draw the g widget in the clipboard delete copy_surf; // after this, the clipboard is loaded Fl_Display_Device::display_device()->set_current(); // direct graphics requests back to the display } #else void mgl_copyimg_cb(Fl_Widget *,void *v) {} #endif //----------------------------------------------------------------------------- Fl_Menu_Item pop_graph[] = { { _("Export as ..."), 0, mgl_no_cb, 0, FL_SUBMENU}, #if MGL_HAVE_PNG { "PNG", 0, mgl_export_png_cb}, { "PNG (solid)", 0, mgl_export_pngn_cb}, #endif #if MGL_HAVE_JPEG { "JPEG", 0, mgl_export_jpeg_cb}, #endif #if MGL_HAVE_GIF { "GIF", 0, mgl_export_gif_cb}, #endif { "BMP", 0, mgl_export_bmp_cb}, { "SVG", 0, mgl_export_svg_cb}, { "vector EPS", 0, mgl_export_eps_cb}, { "bitmap EPS", 0, mgl_export_bps_cb}, { "TeX", 0, mgl_export_tex_cb,0, FL_MENU_DIVIDER}, { "OBJ", 0, mgl_export_obj_cb}, { "PRC", 0, mgl_export_prc_cb}, { "OFF", 0, mgl_export_off_cb}, { "STL", 0, mgl_export_stl_cb}, { "XYZ", 0, mgl_export_xyz_cb}, {0}, { _("Copy graphics"), 0, mgl_copyimg_cb, 0, FL_MENU_INACTIVE|FL_MENU_DIVIDER}, { _("Normal view"), 0, mgl_norm_cb}, { _("Redraw plot"), 0, mgl_draw_cb}, { _("Adjust size"), 0, mgl_adjust_cb}, { _("Reload data"), 0, mgl_oncemore_cb}, {0} }; //----------------------------------------------------------------------------- #include "image.h" #include "xpm/wire.xpm" Fl_MGLView::Fl_MGLView(int xx, int yy, int ww, int hh, const char *lbl) : Fl_Window(xx,yy,ww,hh,lbl) { Fl_Button *o; grid = alpha = light = sshow = pauseC = rotate = zoom = 0; menu = NULL; next = prev = reload = NULL; delay = NULL; Fl_Group *g = new Fl_Group(0,0,480,30); alpha_bt = new Fl_Button(0, 1, 25, 25); alpha_bt->type(FL_TOGGLE_BUTTON); alpha_bt->image(img_alpha); alpha_bt->callback(mgl_alpha_cb,this); alpha_bt->tooltip(_("Switch on/off transparency in the picture")); light_bt = new Fl_Button(25, 1, 25, 25); light_bt->type(FL_TOGGLE_BUTTON); light_bt->image(img_light); light_bt->callback(mgl_light_cb,this); light_bt->tooltip(_("Switch on/off lightning in the picture")); grid_bt = new Fl_Button(50, 1, 25, 25); grid_bt->type(FL_TOGGLE_BUTTON); grid_bt->image(new Fl_Pixmap(wire_xpm)); grid_bt->callback(mgl_grid_cb,this); grid_bt->tooltip(_("Switch on/off grid drawing")); rotate_bt = new Fl_Button(80, 1, 25, 25);rotate_bt->type(FL_TOGGLE_BUTTON); rotate_bt->image(img_move); rotate_bt->callback(mgl_rotate_cb,this); rotate_bt->tooltip(_("Rotate picture by holding left mouse button")); zoom_bt = new Fl_Button(105, 1, 25, 25); zoom_bt->type(FL_TOGGLE_BUTTON); zoom_bt->image(img_zoomIn); zoom_bt->callback(mgl_zoom_cb,this); zoom_bt->tooltip(_("Zoom in selected region of the picture")); o = new Fl_Button(130, 1, 25, 25); o->tooltip(_("Restore default graphics rotation, zoom and perspective")); o->image(img_orig); o->callback(mgl_norm_cb,this); o = new Fl_Button(160, 1, 25, 25); o->tooltip(_("Refresh the picture")); o->image(img_update); o->callback(mgl_draw_cb,this); o = new Fl_Button(185, 1, 25, 25); o->tooltip(_("Stop drawing")); o->image(img_stop); o->callback(mgl_stop_cb,this); o = new Fl_Button(210, 1, 25, 25); o->tooltip(_("Adjust picture size to fill drawing area")); o->image(img_adjust); o->callback(mgl_adjust_cb,this); o = new Fl_Button(235, 1, 25, 25); o->tooltip(_("Reload data and refresh the picture")); o->image(img_reload); o->callback(mgl_oncemore_cb,this); o = new Fl_Button(265, 1, 25, 25); o->tooltip(_("Copy image to clipboard")); o->image(img_copy); o->callback(mgl_copyimg_cb,this); Fl_Counter *tet, *phi; tet = new Fl_Counter(295, 1, 90, 25, 0); tet->callback(mgl_draw_cb,this); phi = new Fl_Counter(390, 1, 90, 25, 0); phi->callback(mgl_draw_cb,this); tet->lstep(10); tet->step(1); tet->range(-180,180); tet->tooltip(_("Theta angle (tilt z-axis)")); phi->lstep(10); phi->step(1); phi->range(-180,180); phi->tooltip(_("Phi angle (rotate in x*y plane)")); g->end(); g->resizable(0); g = new Fl_Group(0,0,30,285); o = new Fl_Button(1, 30, 25, 25); o->tooltip(_("Shift the picture up")); o->image(img_goU); o->callback(mgl_su_cb,this); o = new Fl_Button(1, 55, 25, 25); o->tooltip(_("Shift the picture left")); o->image(img_goL); o->callback(mgl_sl_cb,this); o = new Fl_Button(1, 80, 25, 25); o->tooltip(_("Zoom in the picture")); o->image(img_plus); o->callback(mgl_sz_cb,this); o = new Fl_Button(1, 105, 25, 25); o->tooltip(_("Zoom out the picture")); o->image(img_minus); o->callback(mgl_so_cb,this); o = new Fl_Button(1, 130, 25, 25); o->tooltip(_("Shift the picture right")); o->image(img_goR); o->callback(mgl_sr_cb,this); o = new Fl_Button(1, 155, 25, 25); o->tooltip(_("Shift the picture down")); o->image(img_goD); o->callback(mgl_sd_cb,this); o = new Fl_Button(1, 185, 25, 25); o->tooltip(_("Show previous frame in slideshow")); o->image(img_prev); o->callback(mgl_sprev_cb,this); anim_bt = new Fl_Button(1, 210, 25, 25); anim_bt->type(FL_TOGGLE_BUTTON); anim_bt->image(img_play); anim_bt->callback(mgl_sshow_cb,this); anim_bt->tooltip(_("Run/Stop slideshow (graphics animation)")); o = new Fl_Button(1, 235, 25, 25); o->tooltip(_("Show next frame in slideshow")); o->image(img_next); o->callback(mgl_snext_cb,this); #if MGL_HAVE_PTHR_WIDGET pause_bt = new Fl_Button(1, 260, 25, 25); pause_bt->type(FL_TOGGLE_BUTTON); pause_bt->image(img_pause); pause_bt->callback(mgl_pause_cb,this); pause_bt->tooltip(_("Pause on/off external calculations")); #endif g->end(); g->resizable(0); scroll = new Fl_Scroll(30, 30, ww-30, hh-30); FMGL = new Fl_MathGL(30, 30, 800, 600); FMGL->tet_val = tet; FMGL->phi_val = phi; FMGL->set_popup(pop_graph,FMGL,this); scroll->end(); resizable(scroll); end(); par=0; } Fl_MGLView::~Fl_MGLView() {} //----------------------------------------------------------------------------- // // class mglCanvasFL // //----------------------------------------------------------------------------- mglCanvasFL::mglCanvasFL() : mglCanvasWnd() { Wnd=0; mgl=0; } mglCanvasFL::~mglCanvasFL() { if(Wnd) { mgl->FMGL->gr=0; delete Wnd; } } //----------------------------------------------------------------------------- void mglCanvasFL::GotoFrame(int d) { int f = GetCurFig()+d; if(f>=GetNumFig()) f = 0; if(f<0) f = GetNumFig()-1; if(GetNumFig()>0 && d) { SetCurFig(f); mgl->FMGL->redraw(); } } //----------------------------------------------------------------------------- void MGL_EXPORT mgl_makemenu_fltk(Fl_Menu_ *m, Fl_MGLView *w) { m->add(_("Graphics/Alpha"), "^t", mgl_alpha_cb, w, FL_MENU_TOGGLE); m->add(_("Graphics/Light"), "^l", mgl_light_cb, w, FL_MENU_TOGGLE); m->add(_("Graphics/Grid"), "^g", mgl_grid_cb, w, FL_MENU_TOGGLE|FL_MENU_DIVIDER); m->add(_("Graphics/Restore"), "^ ", mgl_norm_cb, w); m->add(_("Graphics/Redraw"), FL_F+5, mgl_draw_cb, w); m->add(_("Graphics/Adjust size"), FL_F+6, mgl_adjust_cb, w); m->add(_("Graphics/Reload data"), FL_F+9, mgl_oncemore_cb, w); m->add(_("Graphics/Stop"), FL_F+7, mgl_stop_cb, w); m->add(_("Graphics/Copy graphics"), "+^c", mgl_copyimg_cb, w); m->add(_("Graphics/Copy click coor."), 0, copy_coor_cb, w); m->add(_("Graphics/Pause calc"), "^t", mgl_pause_cb, w, FL_MENU_TOGGLE); #if MGL_HAVE_PNG m->add(_("Graphics/Export/as PNG"), "#p", mgl_export_png_cb, w); m->add(_("Graphics/Export/as solid PNG"), "#f", mgl_export_pngn_cb, w); #endif #if MGL_HAVE_JPEG m->add(_("Graphics/Export/as JPEG"), "#j", mgl_export_jpeg_cb, w); #endif #if MGL_HAVE_GIF m->add(_("Graphics/Export/as GIF"), "#g", mgl_export_gif_cb, w); #endif m->add(_("Graphics/Export/as BMP"), 0, mgl_export_bmp_cb, w); m->add(_("Graphics/Export/as SVG"), "#s", mgl_export_svg_cb, w); m->add(_("Graphics/Export/as vector EPS"), "#e", mgl_export_eps_cb, w); m->add(_("Graphics/Export/as bitmap EPS"), 0, mgl_export_bps_cb, w); m->add(_("Graphics/Export/as TeX"), "#l", mgl_export_tex_cb, w, FL_MENU_DIVIDER); m->add(_("Graphics/Export/as PRC"), "#d", mgl_export_prc_cb, w); m->add(_("Graphics/Export/as OBJ"), "#o", mgl_export_obj_cb, w); m->add(_("Graphics/Export/as OFF"), 0, mgl_export_off_cb, w); m->add(_("Graphics/Export/as STL"), 0, mgl_export_stl_cb, w); m->add(_("Graphics/Export/as XYZ"), 0, mgl_export_xyz_cb, w); m->add(_("Graphics/Animation/Slideshow"), FL_CTRL+FL_F+5, mgl_sshow_cb, w, FL_MENU_TOGGLE); m->add(_("Graphics/Animation/Next frame"), "#<", mgl_snext_cb, w); m->add(_("Graphics/Animation/Prev frame"), "#>", mgl_sprev_cb, w); m->add(_("Graphics/Transform/Move left"), FL_ALT+FL_Left, mgl_sl_cb, w); m->add(_("Graphics/Transform/Move up"), FL_ALT+FL_Up, mgl_su_cb, w); m->add(_("Graphics/Transform/Zoom in"), "#=", mgl_sz_cb, w); m->add(_("Graphics/Transform/Zoom out"), "#-", mgl_so_cb, w); m->add(_("Graphics/Transform/Move down"), FL_ALT+FL_Down, mgl_sd_cb, w); m->add(_("Graphics/Transform/Move right"), FL_ALT+FL_Right, mgl_sr_cb, w); } //----------------------------------------------------------------------------- void mglCanvasFL::Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p), const char *title, void *par, void (*reload)(void *p), bool maximize) { static bool first=true; if(first) { Fl::lock(); first=false; } SetDrawFunc(draw, par, reload); if(Wnd) { Wnd->label(title); Wnd->show(); return; } Wnd = new Fl_Double_Window(830,660,title); mgl = new Fl_MGLView(0,30,830,630); mgl->par = this; mgl->menu = new Fl_Menu_Bar(0, 0, 830, 30); mgl_makemenu_fltk(mgl->menu, mgl); mgl->next = mgl_fl_next; mgl->reload = mgl_fl_reload; mgl->prev = mgl_fl_prev; mgl->delay= mgl_fl_delay; mgl->FMGL->set_graph(this); mgl->FMGL->set_draw(draw, par); Wnd->end(); Wnd->resizable(mgl); if(maximize) { int x,y,w,h; Fl::screen_xywh(x,y,w,h); Wnd->resize(x,y,w,h); Adjust(); } static char ctmp[1]; ctmp[0]=0; static char *tmp[1]; tmp[0]=ctmp; Wnd->show(argv ? argc:0, argv ? argv:tmp); } //----------------------------------------------------------------------------- HMGL MGL_EXPORT mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p)) { mglCanvasFL *g = new mglCanvasFL; g->Window(0,0,draw,title,par,load); g->mgl->FMGL->set_handle_key(true); return g; } void* mgl_fltk_widget(HMGL gr) { mglCanvasFL *g = dynamic_cast(gr); return g?g->mgl:NULL; } int MGL_EXPORT mgl_fltk_run() { return Fl::run(); } //----------------------------------------------------------------------------- uintptr_t MGL_EXPORT mgl_create_graph_fltk_(const char *title, int l) { char *s = new char[l+1]; memcpy(s,title,l); s[l]=0; uintptr_t t = uintptr_t(mgl_create_graph_fltk(0,s,0,0)); delete []s; return t; } int MGL_EXPORT mgl_fltk_run_() { return mgl_fltk_run(); } //----------------------------------------------------------------------------- MGL_NO_EXPORT void *mgl_fltk_tmp(void *) { mgl_fltk_run(); return 0; } //----------------------------------------------------------------------------- int MGL_EXPORT mgl_fltk_thr() // NOTE: Qt couldn't be running in non-primary thread { #if MGL_HAVE_PTHR_WIDGET static pthread_t thr; pthread_create(&thr,0,mgl_fltk_tmp,0); pthread_detach(thr); #endif return 0; // stupid, but I don't want keep result returned by Fl::Run() } //----------------------------------------------------------------------------- mathgl-2.4.1/widgets/glut.cpp0000664000175000017500000002517213134046554015721 0ustar balakinbalakin/*************************************************************************** * glut.cpp is part of Math Graphic Library * Copyright (C) 2007-2016 Alexey Balakin * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * * published by the Free Software Foundation; either version 3 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 Library 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. * ***************************************************************************/ #define GLUT_NO_LIB_PRAGMA #define GLUT_NO_WARNING_DISABLE #ifdef __APPLE__ #include #include #else #if defined(_MSC_VER) || defined(__BORLANDC__) #include #include #include "glut.h" #else #include #include #endif #endif #include "mgl2/opengl.h" #include "mgl2/glut.h" void _mgl_key_up(unsigned char ch,int ,int ); //----------------------------------------------------------------------------- /// Class allows the window creation under OpenGL with the help of GLUT library class mglCanvasGLUT : public mglCanvasGL { friend void _mgl_display(); friend void _mgl_key_up(unsigned char ch,int ,int ); friend void _mgl_timer(int); public: mglCanvasGLUT(); virtual ~mglCanvasGLUT(); /// Create a window for plotting. Now implemeted only for GLUT. void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p), const char *title,void *par=NULL, void (*reload)(void *p)=NULL, bool maximize=false); void Window(int argc, char **argv, int (*draw)(mglGraph *gr), const char *title, bool maximize=false) { Window(argc,argv,draw?mgl_draw_graph:0,title,(void*)draw,0,maximize); } /// Create a window for plotting based on class mglDraw. void Window(int argc, char **argv, const char *title, mglDraw *draw, bool maximize=false) { Window(argc, argv, draw?mgl_draw_class:0, title, draw, mgl_reload_class, maximize); } /// Switch on/off transparency (do not overwrite switches in user drawing function) void ToggleAlpha() { _mgl_key_up('r',0,0); } /// Switch on/off lighting (do not overwrite switches in user drawing function) void ToggleLight() { _mgl_key_up('f',0,0); } void ToggleNo() { _mgl_key_up('n',0,0); } ///< Switch off all zooming and rotation void Update() { _mgl_key_up(' ',0,0); } ///< Update picture by calling user drawing function void ReLoad() { _mgl_key_up('[',0,0); } ///< Reload user data and update picture void NextFrame() { _mgl_key_up('.',0,0); } ///< Show next frame (if one) void PrevFrame() { _mgl_key_up(',',0,0); } ///< Show previous frame (if one) void Animation() { _mgl_key_up('m',0,0); } ///< Run slideshow (animation) of frames private: void (*LoadFunc)(void *par); void *FuncPar; ///< Parameters for drawing function mglCanvas::DrawFunc. /// Drawing function for window procedure. It should return the number of frames. int (*DrawFunc)(mglBase *gr, void *par); int NumFig; ///< Number of figures in the list. If 0 then no list and mglCanvas::DrawFunc will called for each drawing. int curr_fig; ///< Current figure in the list. int tt; ///< Temporal variable } *_mgl_glwnd; //----------------------------------------------------------------------------- void _mgl_timer(int) { if(!_mgl_glwnd) return; if(_mgl_glwnd->tt) { _mgl_glwnd->curr_fig++; if(_mgl_glwnd->curr_fig > _mgl_glwnd->NumFig) _mgl_glwnd->curr_fig = 1; glutPostRedisplay(); } glutTimerFunc(int(_mgl_glwnd->Delay*1000),_mgl_timer,0); } //----------------------------------------------------------------------------- void _mgl_key_up(unsigned char ch,int ,int ) { if(!_mgl_glwnd) return; static bool Alpha=false; static bool Light=false; static mreal rL=3,tL=0,pL=0; if(ch=='h') { printf(_("Use 'a', 'd', 'w', 's', 'q', 'e' for changing view angles\n" "Use 'j', 'l', 'i', 'k' for changing light angles\n" "Use 'u', 'o' for changing distance to light\n" "Use 'r' for switching transparency\nUse 'f' for switching lightning\n" "Use 'E' for exporting to EPS file\nUse 'S' for exporting to SVG file\n" "Use 'J' for exporting to JPEG file\nUse 'P' for exporting to PNG file\n" "Use ',', '.' for show other frames\nUse 'm' for view movie\n" "Use 'h' for view this text\nUse 'x' for exit\n") ); } if(ch=='w') _mgl_glwnd->View(-10,0,0); if(ch=='s') _mgl_glwnd->View(10,0,0); if(ch=='a') _mgl_glwnd->View(0,0,-10); if(ch=='d') _mgl_glwnd->View(0,0,10); if(ch=='q') _mgl_glwnd->View(0,-10,0); if(ch=='e') _mgl_glwnd->View(0,10,0); if(ch=='n') _mgl_glwnd->Restore(); if(ch==',') _mgl_glwnd->curr_fig = _mgl_glwnd->curr_fig == 0 ? _mgl_glwnd->NumFig-1 : _mgl_glwnd->curr_fig-1; if(ch=='.') _mgl_glwnd->curr_fig = _mgl_glwnd->curr_fig == _mgl_glwnd->NumFig-1 ? 0 : _mgl_glwnd->curr_fig+1; if(ch=='r') Alpha = !Alpha; if(ch=='f') Light = !Light; if(ch=='u') rL += 0.1; if(ch=='o') rL -= 0.1; if(ch=='i') tL += M_PI*0.1; if(ch=='k') tL -= M_PI*0.1; if(ch=='l') pL += 2*M_PI*0.1; if(ch=='j') pL -= 2*M_PI*0.1; if(ch=='[' && _mgl_glwnd->LoadFunc) { glDeleteLists(1,_mgl_glwnd->NumFig); _mgl_glwnd->LoadFunc(_mgl_glwnd->FuncPar); if(_mgl_glwnd->DrawFunc) { _mgl_glwnd->ResetFrames(); (_mgl_glwnd->DrawFunc)(_mgl_glwnd,_mgl_glwnd->FuncPar); } _mgl_glwnd->Finish(); } if(ch=='P') { char str[128]; snprintf(str,128,"%s_%d.png",_mgl_glwnd->PlotId.c_str(),_mgl_glwnd->curr_fig); str[127]=0; mgl_write_png(_mgl_glwnd, str, "MathGL"); } if(ch=='J') { char str[128]; snprintf(str,128,"%s_%d.jpg",_mgl_glwnd->PlotId.c_str(),_mgl_glwnd->curr_fig); str[127]=0; mgl_write_jpg(_mgl_glwnd, str, "MathGL"); } if(ch=='E') { char str[128]; snprintf(str,128,"%s_%d.eps",_mgl_glwnd->PlotId.c_str(),_mgl_glwnd->curr_fig); str[127]=0; mgl_write_eps(_mgl_glwnd, str, "MathGL"); } if(ch=='S') { char str[128]; snprintf(str,128,"%s_%d.svg",_mgl_glwnd->PlotId.c_str(),_mgl_glwnd->curr_fig); str[127]=0; mgl_write_svg(_mgl_glwnd, str, "MathGL"); } if(ch==' ') _mgl_glwnd->Clf(); if(ch=='m') _mgl_glwnd->tt = 1-_mgl_glwnd->tt; rL = rL<0 ? 0 : (rL>5 ? 5 : rL); _mgl_glwnd->AddLight(0,mglPoint(rL*cos(pL)*sin(tL), rL*sin(pL)*sin(tL), rL*cos(tL)),false); _mgl_glwnd->Alpha(Alpha); _mgl_glwnd->Light(Light); // glEnable(GL_BLEND); if(strchr("ijkl",ch)) printf("Light: %g, %g, %g\n",rL*cos(pL)*sin(tL), rL*sin(pL)*sin(tL), rL*cos(tL)); if(ch=='x') exit(0); else glutPostRedisplay(); } //----------------------------------------------------------------------------- void _mgl_display() { if(!_mgl_glwnd) return; // glEnable(GL_LINE_SMOOTH); // _mgl_glwnd->CurFrameId = 1; // if(_mgl_glwnd->get(MGL_CLF_ON_UPD)) _mgl_glwnd->Clf(); // _mgl_glwnd->gl_clf(); _mgl_glwnd->InPlot(0,1,0,1,false); if(_mgl_glwnd->NumFig>0) { _mgl_glwnd->GetFrame(_mgl_glwnd->curr_fig); _mgl_glwnd->Finish(); // glCallList(_mgl_glwnd->curr_fig); } else { if(_mgl_glwnd->DrawFunc) { _mgl_glwnd->ResetFrames(); (_mgl_glwnd->DrawFunc)(_mgl_glwnd,_mgl_glwnd->FuncPar); } _mgl_glwnd->Finish(); } glFinish(); } //----------------------------------------------------------------------------- mglCanvasGLUT::~mglCanvasGLUT() { _mgl_glwnd = 0; } //----------------------------------------------------------------------------- void mglCanvasGLUT::Window(int argc, char **argv,int (*draw)(mglBase *gr, void *p),const char *title, void *par, void (*reload)(void *p), bool /*maximize*/) { NumFig=0; curr_fig=1; tt=0; _mgl_glwnd = this; CurFrameId = 1; char *tmp[1]; tmp[0]=new char[1]; tmp[0][0]=0; glutInit(&argc, argv ? argv:tmp); delete []tmp[0]; glutInitDisplayMode(GLUT_RGB); glutInitWindowSize(600, 600); glutCreateWindow("MathGL"); AddLight(0,mglPoint(0,0,3),false); if(draw) { NumFig = draw(this,par)-1; Finish(); DrawFunc = draw; FuncPar = par; } else { NumFig = 0; DrawFunc=0; FuncPar=0; } LoadFunc = reload; glutSetWindowTitle(title); glutDisplayFunc(_mgl_display); glutKeyboardUpFunc(_mgl_key_up); glutTimerFunc(int(1000*Delay),_mgl_timer,0); // TODO Add window maximazing at start up ??? glutMainLoop(); if(NumFig>0) glDeleteLists(1,NumFig); } //----------------------------------------------------------------------------- HMGL MGL_EXPORT mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p)) { mglCanvasGLUT *g = new mglCanvasGLUT; g->Window(0,0,draw,title,par, load); return g; } //----------------------------------------------------------------------------- mglCanvasGLUT::mglCanvasGLUT() : mglCanvasGL() {} //----------------------------------------------------------------------------- void MGL_EXPORT mgl_glut_toggle_alpha(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->ToggleAlpha(); } void MGL_EXPORT mgl_glut_toggle_light(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->ToggleLight(); } void MGL_EXPORT mgl_glut_toggle_no(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->ToggleNo(); } void MGL_EXPORT mgl_glut_update(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->Update(); } void MGL_EXPORT mgl_glut_reload(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->ReLoad(); } void MGL_EXPORT mgl_glut_next_frame(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->NextFrame(); } void MGL_EXPORT mgl_glut_prev_frame(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->PrevFrame(); } void MGL_EXPORT mgl_glut_animation(HMGL gr) { mglCanvasGLUT *g = dynamic_cast(gr); if(g) g->Animation(); } //----------------------------------------------------------------------------- mathgl-2.4.1/widgets/qt5/0000775000175000017500000000000013134046554014744 5ustar balakinbalakinmathgl-2.4.1/widgets/qt5/CMakeLists.txt0000664000175000017500000000172013134046554017504 0ustar balakinbalakininclude(GenerateExportHeader) if(enable-qt5) include(../../scripts/qt5.cmake) set(MGL_QT5_FILES ../qt.cpp ../../include/mgl2/qt.h ../../include/mgl2/qmathgl.h) mgl_add_lib(qt5 ${MGL_QT5_FILES}) target_link_libraries(mgl-qt5 mgl ${MGL_QT5_LIBS}) target_link_libraries(mgl-qt5-static mgl-static ${MGL_QT5_LIBS}) if(enable-qt5asqt) mgl_add_lib(qt ${MGL_QT5_FILES}) target_link_libraries(mgl-qt mgl ${MGL_QT5_LIBS}) target_link_libraries(mgl-qt-static mgl-static ${MGL_QT5_LIBS}) endif(enable-qt5asqt) if(MGL_HAVE_FLTK) mgl_add_lib(wnd ${MGL_QT5_FILES} ../fltk.cpp ../../include/mgl2/fltk.h ../image.cpp ../image.h) target_include_directories(mgl-wnd SYSTEM PUBLIC ${FLTK_INCLUDE_DIR}) target_include_directories(mgl-wnd-static SYSTEM PUBLIC ${FLTK_INCLUDE_DIR}) target_link_libraries(mgl-wnd mgl ${FLTK_LIBRARIES} ${MGL_QT5_LIBS}) target_link_libraries(mgl-wnd-static mgl-static ${FLTK_LIBRARIES} ${MGL_QT5_LIBS}) endif(MGL_HAVE_FLTK) endif(enable-qt5) mathgl-2.4.1/widgets/CMakeLists.txt0000664000175000017500000000246213134046554016777 0ustar balakinbalakininclude(GenerateExportHeader) if(MGL_HAVE_FLTK) mgl_add_lib(fltk fltk.cpp image.cpp image.h ../include/mgl2/fltk.h ../include/mgl2/Fl_MathGL.h) target_include_directories(mgl-fltk SYSTEM PUBLIC ${FLTK_INCLUDE_DIR}) target_include_directories(mgl-fltk-static SYSTEM PUBLIC ${FLTK_INCLUDE_DIR}) target_link_libraries(mgl-fltk mgl ${FLTK_LIBRARIES}) target_link_libraries(mgl-fltk-static mgl-static ${FLTK_LIBRARIES}) endif(MGL_HAVE_FLTK) if(MGL_HAVE_GLUT) mgl_add_lib(glut glut.cpp ../include/mgl2/glut.h) target_include_directories(mgl-glut SYSTEM PUBLIC ${GLUT_INCLUDE_DIR}) target_include_directories(mgl-glut-static SYSTEM PUBLIC ${GLUT_INCLUDE_DIR}) target_link_libraries(mgl-glut mgl ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES}) target_link_libraries(mgl-glut-static mgl-static ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES}) endif(MGL_HAVE_GLUT) if(MGL_HAVE_WX) mgl_add_lib(wx wx.cpp ../include/mgl2/wx.h) include(${wxWidgets_USE_FILE}) target_link_libraries(mgl-wx mgl ${wxWidgets_LIBRARIES}) target_link_libraries(mgl-wx-static mgl-static ${wxWidgets_LIBRARIES}) endif(MGL_HAVE_WX) add_subdirectory( qt4 ) add_subdirectory( qt5 ) mgl_po_src(fltk.cpp ../include/mgl2/fltk.h ../include/mgl2/Fl_MathGL.h glut.cpp ../include/mgl2/glut.h wx.cpp ../include/mgl2/wx.h qt.cpp ../include/mgl2/qt.h ../include/mgl2/qmathgl.h) mathgl-2.4.1/widgets/qt.cpp0000664000175000017500000014653113134046554015375 0ustar balakinbalakin/*************************************************************************** * qt.cpp is part of Math Graphic Library * * Copyright (C) 2007-2016 Alexey Balakin * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * * published by the Free Software Foundation; either version 3 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 Library 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. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mgl2/canvas_wnd.h" #include "mgl2/qmathgl.h" #include "mgl2/qt.h" #undef sprintf // fix libintl bug of defining sprintf //----------------------------------------------------------------------------- #define MGL_MAX_LINES (INT_MAX-1000) //----------------------------------------------------------------------------- /// Base class for windows containing MathGL graphics class mglCanvasQT : public mglCanvasWnd { public: using mglCanvasWnd::Window; int sshow; ///< Current state of animation switch (toggle button) QMathGL *QMGL; ///< Control which draw graphics QMainWindow *Wnd; ///< Pointer to window mglCanvasQT(); virtual ~mglCanvasQT(); /// Create a window for plotting. Now implemeted only for GLUT. void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p),const char *title, void *par=NULL, void (*reload)(void *p)=NULL, bool maximize=false); /// Switch on/off transparency (do not overwrite switches in user drawing function) void ToggleAlpha(); /// Switch on/off lighting (do not overwrite switches in user drawing function) void ToggleLight(); void ToggleRotate();///< Switch on/off rotation by mouse void ToggleZoom(); ///< Switch on/off zooming by mouse void ToggleNo(); ///< Switch off all zooming and rotation void Update(); ///< Update picture by calling user drawing function void Adjust(); ///< Adjust size of bitmap to window size void GotoFrame(int d); ///< Show arbitrary frame (use relative step) void Animation(); ///< Run slideshow (animation) of frames protected: QScrollArea *scroll; ///< Scrolling area QMenu *popup; ///< Popup menu QSpinBox *tet, *phi; ///< Spin box for angles }; //----------------------------------------------------------------------------- void MGL_EXPORT mgl_ask_qt(const wchar_t *quest, wchar_t *res) { QInputDialog::getText(QApplication::activeWindow(), "MathGL", QString::fromWCharArray(quest)).toWCharArray(res); } //----------------------------------------------------------------------------- /*void mglTask::doWork() { setlocale(LC_NUMERIC, "C"); if(mgl_is_frames(gr)) mgl_new_frame(gr); if(draw_func) draw_func(gr, draw_par); else if(draw) { mglGraph g(gr); draw->Draw(&g); } if(mgl_is_frames(gr)) mgl_end_frame(gr); setlocale(LC_NUMERIC, ""); gr->Finish(); emit plotDone(); }*/ //----------------------------------------------------------------------------- QMathGL::QMathGL(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) { autoResize = false; draw_par = 0; draw_func = 0; dotsRefr = true; gr = new mglCanvas; appName = "MathGL"; popup = 0; grBuf = 0; draw = 0; prevQuality=MGL_DRAW_NORM; phi = tet = per = 0; x0=y0=xe=ye=0; x1 = y1 = ax1 = ay1 = 0; x2 = y2 = ax2 = ay2 = 1; alpha = light = zoom = rotate = grid = viewYZ = custZoom = custDraw = pause = false; resize(600, 400); mgl_set_flag(gr, true, MGL_CLF_ON_UPD); timer = new QTimer(this); timerRefr = new QTimer(this); timerRefr->setInterval(100); timerRefr->setSingleShot(true); enableWheel = enableMouse = true; connect(timer, SIGNAL(timeout()), this, SLOT(nextSlide())); connect(timerRefr, SIGNAL(timeout()), this, SLOT(refreshHQ())); sclS = 0.25; sclZ = 0.5; /* thread = new QThread(); task = new mglTask(); task->moveToThread(thread); connect(thread, SIGNAL(started()), task, SLOT(doWork())); connect(task, SIGNAL(plotDone()), thread, SLOT(quit())); connect(thread, SIGNAL(finished()), this, SLOT(afterPlot()));*/ } //----------------------------------------------------------------------------- QMathGL::~QMathGL() { timer->stop(); timerRefr->stop(); if(gr && mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); if(grBuf) delete []grBuf; if(draw) delete draw; } //----------------------------------------------------------------------------- void QMathGL::setDotsPreview(bool d) { dotsRefr = d; } //----------------------------------------------------------------------------- void QMathGL::setDraw(int (*func)(mglBase *gr, void *par), void *par) { if(draw) delete draw; draw = 0; draw_func = func; draw_par = par; emit usePrimChanged(draw_func || draw); } //----------------------------------------------------------------------------- void QMathGL::setDraw(mglDraw *dr) { if(draw) delete draw; draw = dr; draw_func = 0; emit usePrimChanged(draw_func || draw); } //----------------------------------------------------------------------------- double QMathGL::getRatio() { return double(mgl_get_width(gr))/mgl_get_height(gr); } void mgl_qt_event_func(void *) { QApplication::processEvents(); } //----------------------------------------------------------------------------- void QMathGL::setGraph(HMGL GR) ///< Set grapher object { mglCanvas *gg = dynamic_cast(GR); if(!gg) return; if(mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); gr=gg; mgl_use_graph(gg,1); gr->SetEventFunc(mgl_qt_event_func, NULL); } //----------------------------------------------------------------------------- void QMathGL::paintEvent(QPaintEvent *) { QPainter paint; paint.begin(this); paint.drawPixmap(0,0,pic); if(zoom) paint.drawRect(x0,y0,xe-x0,ye-y0); if(mgl_get_flag(gr,MGL_SHOW_POS) && !mousePos.isEmpty()) paint.drawText(0,12,mousePos); if(grid) { long d, h=pic.height(), w=pic.width(); paint.setPen(QColor(192,192,192)); for(long i=1;i<10;i++) { paint.drawText(0,i*h/10,QString::number(1-i*0.1)); paint.drawLine(0,i*h/10,w,i*h/10); paint.drawText(i*w/10,h,QString::number(i*0.1)); paint.drawLine(i*w/10,0,i*w/10,h); } paint.setPen(QColor(0,0,0)); d = (h>w?w:h)/100; if(mgl_is_frames(gr)) for(size_t i=0;iAct.size();i++) { const mglActivePos &p=gr->Act[i]; QRect rf(p.x-d/2,p.y-d/2-1,d,d); paint.drawRect(rf); paint.fillRect(rf,QBrush(QColor(127,255,63))); } } paint.end(); } //----------------------------------------------------------------------------- void QMathGL::resizeEvent(QResizeEvent *ev) { if(autoResize && ev->size().width()>0 && ev->size().height()>0) { mgl_set_size(gr, ev->size().width(), ev->size().height()); update(); } // else resize(graph->GetWidth(), graph->GetHeight()); } //----------------------------------------------------------------------------- void QMathGL::setPer(int p) { if(per!=p && p>=0 && p<100) { per = 100*p; emit perChanged(p); refresh(); } } //----------------------------------------------------------------------------- void QMathGL::setPhi(int p) { if(phi!=p) { phi = p; emit phiChanged(p); refresh(); } } //----------------------------------------------------------------------------- void QMathGL::setTet(int t) { if(tet!=t) { tet = t; emit tetChanged(t); refresh(); } } //----------------------------------------------------------------------------- void QMathGL::setAlpha(bool a) { if(alpha!=a) { alpha = a; emit alphaChanged(a); update(); } } //----------------------------------------------------------------------------- void QMathGL::setLight(bool l) { if(light!=l) { light = l; emit lightChanged(l); update(); } } //----------------------------------------------------------------------------- void QMathGL::setGrid(bool g) { if(grid!=g) { grid = g; emit gridChanged(g); refresh(); } } //----------------------------------------------------------------------------- void QMathGL::setViewYZ(bool a) { if(viewYZ!=a) { viewYZ = a; emit viewYZChanged(a); refresh(); } } //----------------------------------------------------------------------------- void QMathGL::setPause(bool p) { #if MGL_HAVE_PTHR_WIDGET if(pause!=p) { pthread_mutex_t *mutex=0; mglCanvasWnd *g=dynamic_cast(gr); if(g && g->mutex) mutex = g->mutex; else { mglDraw *d=getClass(); if(d) mutex = &(d->mutex); } if(mutex) { if(p) pthread_mutex_lock(mutex); else pthread_mutex_unlock(mutex); } pause=p; emit pauseChanged(p); } #endif } //----------------------------------------------------------------------------- void QMathGL::setRotate(bool r) { if(rotate!=r) { zoom=false; rotate=r; refresh(); emit rotateChanged(r); } } //----------------------------------------------------------------------------- void QMathGL::setZoom(bool z) { if(zoom!=z) { zoom=z; rotate=false; refresh(); emit zoomChanged(z); emit rotateChanged(false); } } //----------------------------------------------------------------------------- void QMathGL::setCustZoom(bool z) { custZoom = z; } //----------------------------------------------------------------------------- void QMathGL::setCustDraw(bool z) { custDraw = z; } //----------------------------------------------------------------------------- void QMathGL::setZoomScl(double s) { if(s>0) sclZ = s; } //----------------------------------------------------------------------------- void QMathGL::setShiftScl(double s) { if(s) sclS = s; } //----------------------------------------------------------------------------- void QMathGL::shiftDown() { mreal d=(y2-y1)*sclS; y1+=d; y2+=d; refresh(); } //----------------------------------------------------------------------------- void QMathGL::shiftUp() { mreal d=(y2-y1)*sclS; y1-=d; y2-=d; refresh(); } //----------------------------------------------------------------------------- void QMathGL::shiftRight() { mreal d=(x2-x1)*sclS; x1-=d; x2-=d; refresh(); } //----------------------------------------------------------------------------- void QMathGL::shiftLeft() { mreal d=(x2-x1)*sclS; x1+=d; x2+=d; refresh(); } //----------------------------------------------------------------------------- void QMathGL::zoomIn() { mreal d,c; d = (y2-y1)*sclZ/2; c = (y2+y1)/2; y1 = c-d; y2 = c+d; d = (x2-x1)*sclZ/2; c = (x2+x1)/2; x1 = c-d; x2 = c+d; refresh(); } //----------------------------------------------------------------------------- void QMathGL::zoomOut() { mreal d,c; d = (y2-y1)/sclZ/2; c = (y2+y1)/2; y1 = c-d; y2 = c+d; d = (x2-x1)/sclZ/2; c = (x2+x1)/2; x1 = c-d; x2 = c+d; refresh(); } //----------------------------------------------------------------------------- void QMathGL::restore() { setPhi(0); setTet(0); setPer(0); x1=y1=0; x2=y2=1; zoom=rotate=false; emit zoomChanged(false); emit rotateChanged(false); if(ax1!=0 || ay1!=0 || ax2!=1 || ay2!=1) { ax1=ay1=0; ax2=ay2=1; mgl_zoom_axis(gr,0,0,0,0,1,1,1,1); update(); } else refresh(); } //----------------------------------------------------------------------------- void QMathGL::stop() { gr->AskStop(true); } //----------------------------------------------------------------------------- void QMathGL::update() { if(draw_func || draw) { mgl_reset_frames(gr); // remove previous frames if(mgl_get_flag(gr,MGL_CLF_ON_UPD)) mgl_set_def_param(gr); mgl_set_alpha(gr,alpha); mgl_set_light(gr,light); // use frames for quickly redrawing while adding/changing primitives if(custDraw) emit customDraw(x1,y1,x2,y2,true); if(!isHidden()) QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); /* task->gr = gr; task->draw = draw; task->draw_func = draw_func; task->draw_par = draw_par; thread->start();*/ const std::string loc = setlocale(LC_NUMERIC, "C"); if(mgl_is_frames(gr)) mgl_new_frame(gr); if(draw_func) draw_func(gr, draw_par); else if(draw) { mglGraph g(gr); draw->Draw(&g); } if(mgl_is_frames(gr)) mgl_end_frame(gr); setlocale(LC_NUMERIC, loc.c_str()); gr->AskStop(false); } else if(mgl_get_num_frame(gr)>0) { mgl_set_alpha(gr,alpha); mgl_set_light(gr,light); // mgl_zoom(gr,x1,y1,x2,y2); mgl_view(gr,-phi,-tet,0); mgl_get_frame(gr,0); } afterPlot(); } //----------------------------------------------------------------------------- void QMathGL::afterPlot() { emit refreshData(); emit showWarn(mgl_get_mess(gr)); mousePos=""; if(!isHidden()) QApplication::restoreOverrideCursor(); refresh(); } //----------------------------------------------------------------------------- void QMathGL::drawPrim() { if(!gr) return; mglCanvasWnd *g = dynamic_cast(gr); mgl_get_frame(gr, g?g->GetCurFig():mgl_get_num_frame(gr)-1); mglParse pr; long i, n=primitives.count('\n'); mglGraph gg(gr); const std::string loc = setlocale(LC_NUMERIC, "C"); gg.Push(); gg.SubPlot(1,1,0,"#"); mglPoint ox1=gr->Min, ox2=gr->Max; gg.SetRanges(mglPoint(-1,-1,-1),mglPoint(1,1,1)); for(i=0;istart(); int q = gr->GetQuality(); prevQuality = q!=MGL_DRAW_DOTS?q:prevQuality; gr->SetQuality(MGL_DRAW_DOTS); } if(mgl_is_frames(gr) && mgl_get_num_frame(gr)>0) { drawPrim(); if(custZoom) emit customZoom(x1,y1,x2,y2,tet,phi,per); else { mgl_zoom(gr,x1,y1,x2,y2); mgl_ask_perspective(gr,per); if(viewYZ) mgl_view(gr,0,-tet,-phi); else mgl_view(gr,-phi,-tet,0); } } mglConvertFromGraph(pic, gr, &grBuf); if(pic.size()!=size()) setSize(pic.width(), pic.height()); repaint(); } //----------------------------------------------------------------------------- void QMathGL::refreshHQ() { gr->SetQuality(prevQuality); if(mgl_is_frames(gr) && mgl_get_num_frame(gr)>0) { drawPrim(); if(custZoom) emit customZoom(x1,y1,x2,y2,tet,phi,per); else { mgl_zoom(gr,x1,y1,x2,y2); mgl_ask_perspective(gr,per); if(viewYZ) mgl_view(gr,0,-tet,-phi); else mgl_view(gr,-phi,-tet,0); } } mglConvertFromGraph(pic, gr, &grBuf, &img); if(pic.size()!=size()) setSize(pic.width(), pic.height()); repaint(); } //----------------------------------------------------------------------------- void QMathGL::mousePressEvent(QMouseEvent *ev) { if(!zoom && !rotate && ev->button()&Qt::LeftButton) { mglPoint p = gr->CalcXYZ(ev->x(), ev->y()); mglCanvasWnd *g=dynamic_cast(gr); if(g) g->LastMousePos = p; if(g && g->ClickFunc) g->ClickFunc(draw_par); emit mouseClick(p.x,p.y,p.z); int id = mgl_get_obj_id(gr,ev->x(),ev->y()); if(idCalcXYZ(ev->x(), ev->y(), true); if(mgl_isnan(p.x)) mousePos = ""; else mousePos.sprintf("x=%g, y=%g, z=%g",p.x,p.y,p.z); emit posChanged(mousePos); repaint(); } xe=x0=ev->x(); ye=y0=ev->y(); ev->accept(); } //----------------------------------------------------------------------------- void QMathGL::mouseReleaseEvent(QMouseEvent *ev) { if(ev->button()&Qt::LeftButton && enableMouse) { if(zoom) { int w1=width(),h1=height(); mreal _x1,_x2,_y1,_y2; _x1 = x1+(x2-x1)*(x0-x())/mreal(w1); _y1 = y2-(y2-y1)*(ye-y())/mreal(h1); _x2 = x1+(x2-x1)*(xe-x())/mreal(w1); _y2 = y2-(y2-y1)*(y0-y())/mreal(h1); x1=_x1; x2=_x2; y1=_y1; y2=_y2; if(x1>x2) { _x1=x1; x1=x2; x2=_x1; } if(y1>y2) { _x1=y1; y1=y2; y2=_x1; } x0 = xe; y0 = ye; if(custDraw) { emit customDraw(x1,y1,x2,y2,false); update(); } else refresh(); } } if(ev->button()&Qt::RightButton && popup && !rotate) // popup menu popup->popup(QCursor::pos()); ev->accept(); } //----------------------------------------------------------------------------- void QMathGL::mouseMoveEvent(QMouseEvent *ev) { if(!enableMouse) { ev->ignore(); return; } xe=ev->x(); ye=ev->y(); if(rotate) { if(ev->buttons()&Qt::LeftButton) // rotate { mreal ff = 240/sqrt(mreal(width()*height())); phi += int((x0-xe)*ff); tet -= int((y0-ye)*ff); if(phi>180) phi-=360; if(phi<-180) phi+=360; if(tet>180) tet-=360; if(tet<-180) tet+=360; emit tetChanged(int(tet)); emit phiChanged(int(phi)); refresh(); } if(ev->buttons()&Qt::RightButton) // zoom and perspective { mreal ff = 2.*(y0-ye)/width(), gg = 0.5*(xe-x0)/height(); mreal cx = (x1+x2)/2, cy = (y1+y2)/2; x1 = cx+(x1-cx)*exp(-ff); x2 = cx+(x2-cx)*exp(-ff); y1 = cy+(y1-cy)*exp(-ff); y2 = cy+(y2-cy)*exp(-ff); per = per + gg; if(per<0) per = 0; if(per>=1) per = 0.9999; if(gg) emit perChanged(int(per)); refresh(); } if(ev->buttons()&Qt::MidButton) // shift { mreal ff = 1./sqrt(mreal(width()*height())); mreal dx = (x0-xe)*ff*(x2-x1), dy = (y0-ye)*ff*(y2-y1); x1 += dx; x2 += dx; y1 -= dy; y2 -= dy; } x0 = xe; y0 = ye; refresh(); } else if(zoom) refresh(); else if(ev->buttons()&Qt::MidButton) // shift axis { mreal ff = 1./sqrt(mreal(width()*height())); mreal dx = (x0-xe)*ff*(ax2-ax1), dy = (y0-ye)*ff*(ay2-ay1); ax1 += dx; ax2 += dx; ay1 -= dy; ay2 -= dy; mgl_zoom_axis(gr,ax1,ay1,0,0,ax2,ay2,0,0); update(); x0 = xe; y0 = ye; } else if(ev->buttons()&Qt::LeftButton) // move primitives { long h=pic.height(), w=pic.width(), d=(h>w?w:h)/100; long pos = mgl_is_active(gr,x0,y0,d); long id = long(mgl_get_obj_id(gr,x0,y0))-MGL_MAX_LINES; if(grid && pos>=0) // this active point { const mglActivePos &p = gr->Act[pos]; id = long(p.id)-MGL_MAX_LINES; if(id>=0) // this is our primitive { // try "attract" mouse for(size_t i=0;i<=10;i++) { int tt = i*(w/10); if(abs(xe-tt)<2*d) xe = tt; tt = i*(h/10); if(abs(ye-tt)<2*d) ye = tt; } for(size_t i=0;iAct.size();i++) { const mglActivePos &q = gr->Act[i]; if(abs(xe-q.x)<2*d && abs(ye-q.y)<2*d) { xe=q.x; ye=q.y; } } // now move point QString tst = primitives.section('\n',id,id), cmd=tst.section(' ',0,0), res; float dx = 2*(xe-x0)/float(w), dy = 2*(y0-ye)/float(h); float xx=tst.section(' ',1,1).toFloat(), yy=tst.section(' ',2,2).toFloat(); if(p.n==0) res = cmd+" "+QString::number(xx+dx)+" "+QString::number(yy+dy)+" "+tst.section(' ',3); else if(cmd=="rect") { float x_=tst.section(' ',3,3).toFloat(), y_=tst.section(' ',4,4).toFloat(); if(p.n==1) { xx+=dx; y_+=dy; } if(p.n==2) { x_+=dx; yy+=dy; } if(p.n==3) { x_+=dx; y_+=dy; } res = "rect "+QString::number(xx)+" "+QString::number(yy)+" "+ QString::number(x_)+" "+QString::number(y_)+" "+tst.section(' ',5); } else if(p.n==1) { xx=tst.section(' ',3,3).toFloat(); yy=tst.section(' ',4,4).toFloat(); res = tst.section(' ',0,2)+" "+QString::number(xx+dx)+" "+QString::number(yy+dy)+" "+tst.section(' ',5); } else if(cmd=="rhomb" || cmd=="ellipse") { float x_=tst.section(' ',3,3).toFloat()-xx, y_=tst.section(' ',4,4).toFloat()-yy, dr=0; if(x_*x_+y_*y_>0) { dr = (dx*x_+dy*y_)/(x_*x_+y_*y_); dr = hypot(dx-dr*x_,dy-dr*y_); } else dr = hypot(dx,dy); res = tst.section(' ',0,4)+" "+QString::number(tst.section(' ',5,5).toFloat()+dr)+" "+tst.section(' ',6); } else if(cmd=="arc") { double x_=tst.section(' ',3,3).toFloat()-xx, y_=tst.section(' ',4,4).toFloat()-yy, a_=tst.section(' ',5,5).toFloat(); double c=cos(M_PI*a_/180), s=sin(M_PI*a_/180); double a = atan2(x_,y_) - atan2(x_*c-y_*s+dx,x_*s+y_*c+dy); res = tst.section(' ',0,4)+" "+QString::number(a*180/M_PI)+" "+tst.section(' ',6); } else if(p.n==2) { xx=tst.section(' ',5,5).toFloat(); yy=tst.section(' ',6,6).toFloat(); res = tst.section(' ',0,4)+" "+QString::number(xx+dx)+" "+QString::number(yy+dy)+" "+tst.section(' ',7); } else if(p.n==3) { xx=tst.section(' ',7,7).toFloat(); yy=tst.section(' ',8,8).toFloat(); if(cmd=="curve") { dx*=-1; dy*=-1; } res = tst.section(' ',0,6)+" "+QString::number(xx+dx)+" "+QString::number(yy+dy)+" "+tst.section(' ',9); } if(id>0) res = primitives.section('\n',0,id-1) + "\n" + res; primitives = res + "\n" + primitives.section('\n',id+1); refresh(); x0 = xe; y0 = ye; } } else if(id>=0) // this is primitive { QString tst = primitives.section('\n',id,id), cmd=tst.section(' ',0,0), res; float dx = 2*(xe-x0)/float(w), dy = 2*(y0-ye)/float(h); float x1=tst.section(' ',1,1).toFloat(), y1=tst.section(' ',2,2).toFloat(),x2,y2; if(cmd=="ball") res = cmd+" "+QString::number(x1+dx)+" "+QString::number(y1+dy)+" "+tst.section(' ',3); else if(cmd=="curve") { x2=tst.section(' ',5,5).toFloat(); y2=tst.section(' ',6,6).toFloat(); res = cmd+" "+QString::number(x1+dx)+" "+QString::number(y1+dy)+" "+tst.section(' ',3,4)+ " "+QString::number(x2+dx)+" "+QString::number(y2+dy)+" "+tst.section(' ',7); } else { x2=tst.section(' ',3,3).toFloat(); y2=tst.section(' ',4,4).toFloat(); res = cmd+" "+QString::number(x1+dx)+" "+QString::number(y1+dy)+" "+ QString::number(x2+dx)+" "+QString::number(y2+dy)+" "+tst.section(' ',5); } if(id>0) res = primitives.section('\n',0,id-1) + "\n" + res; primitives = res + "\n" + primitives.section('\n',id+1); refresh(); x0 = xe; y0 = ye; } } ev->accept(); } //----------------------------------------------------------------------------- void QMathGL::mouseDoubleClickEvent(QMouseEvent *ev) { long h=pic.height(), w=pic.width(), d=(h>w?w:h)/100; long pos = mgl_is_active(gr,x0,y0,d); long id = long(mgl_get_obj_id(gr,x0,y0)); if(grid && pos>=0) // this active point -> delete primitive { const mglActivePos &p = gr->Act[pos]; id = long(p.id)-MGL_MAX_LINES; QString res; if(id>0) res = primitives.section('\n',0,id-1) + "\n"; if(id>=0) primitives = res + primitives.section('\n',id+1); refresh(); x0 = xe; y0 = ye; } else if(id>=MGL_MAX_LINES) // option for primitives emit askStyle(id-MGL_MAX_LINES); else emit doubleClick(id); ev->accept(); } //----------------------------------------------------------------------------- void QMathGL::setStyle(int id, QString stl) { QString tst = primitives.section('\n',id,id), res; res = tst.section(' ',0,-2) + " " + stl; if(id>0) res = primitives.section('\n',0,id-1) + "\n" + res; primitives = res + "\n" + primitives.section('\n',id+1); refresh(); x0 = xe; y0 = ye; } //----------------------------------------------------------------------------- void QMathGL::wheelEvent(QWheelEvent *ev) { if(!enableWheel) { ev->ignore(); return; } if(rotate) // zoom { mreal d,c,f=exp(0.001*ev->delta())/2; d = (y2-y1)*f; c = (y2+y1)/2; y1 = c-d; y2 = c+d; d = (x2-x1)*f; c = (x2+x1)/2; x1 = c-d; x2 = c+d; refresh(); ev->accept(); } else // zoom axis { mreal d,c,f=exp(0.001*ev->delta())/2; d = (ay2-ay1)*f; c = (ay2+ay1)/2; ay1 = c-d; ay2 = c+d; d = (ax2-ax1)*f; c = (ax2+ax1)/2; ax1 = c-d; ax2 = c+d; mgl_zoom_axis(gr,ax1,ay1,0,0,ax2,ay2,0,0); update(); ev->accept(); } } //----------------------------------------------------------------------------- void QMathGL::imgSize(int w, int h) { if(w>0 && h>0) { mgl_set_size(gr,w,h); update(); } } //----------------------------------------------------------------------------- QString setExtension(const QString &fname, const char *ext) { QString oname=fname; if(fname.right(4)!="."+QString(ext)) oname = fname+"."+QString(ext); return oname; } //----------------------------------------------------------------------------- void QMathGL::exportGIF(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else #if MGL_HAVE_GIF mgl_write_gif(gr,setExtension(fname,"png").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); #else img.save(setExtension(fname,"gif")); #endif } //----------------------------------------------------------------------------- void QMathGL::exportPNG(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else #if MGL_HAVE_PNG mgl_write_png(gr,setExtension(fname,"png").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); #else img.save(setExtension(fname,"png")); #endif } //----------------------------------------------------------------------------- void QMathGL::exportPNGs(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else #if MGL_HAVE_PNG mgl_write_png_solid(gr,setExtension(fname,"png").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); #else img.save(setExtension(fname,"png")); #endif } //----------------------------------------------------------------------------- void QMathGL::exportJPG(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else #if MGL_HAVE_JPEG mgl_write_jpg(gr,setExtension(fname,"jpg").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); #else img.save(setExtension(fname,"jpg")); #endif } //----------------------------------------------------------------------------- void QMathGL::exportBPS(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_bps(gr,setExtension(fname,"eps").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- void QMathGL::exportEPS(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_eps(gr,setExtension(fname,"eps").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- void QMathGL::exportSVG(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_svg(gr,setExtension(fname,"svg").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- void QMathGL::exportXYZ(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_xyz(gr,setExtension(fname,"xyz").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- void QMathGL::exportTEX(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_tex(gr,setExtension(fname,"tex").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- void QMathGL::exportOFF(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_off(gr,setExtension(fname,"off").toLocal8Bit().constData(), appName.toLocal8Bit().constData(),0); } //----------------------------------------------------------------------------- void QMathGL::exportOBJ(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_obj(gr,setExtension(fname,"obj").toLocal8Bit().constData(), appName.toLocal8Bit().constData(),1); } //----------------------------------------------------------------------------- void QMathGL::exportSTL(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_stl(gr,setExtension(fname,"stl").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- /*void QMathGL::exportX3D(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_x3d(gr,setExtension(fname,"x3d").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); }*/ //----------------------------------------------------------------------------- void QMathGL::exportTGA(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_tga(gr,setExtension(fname,"tga").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- void QMathGL::exportPRC(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_write_prc(gr,setExtension(fname,"prc").toLocal8Bit().constData(), appName.toLocal8Bit().constData(),1); } //----------------------------------------------------------------------------- void QMathGL::exportMGLD(QString fname) { if(fname.isEmpty()) fname = mgl_get_plotid(gr); if(fname.isEmpty()) QMessageBox::critical(this, appName, _("No filename."),QMessageBox::Ok,0,0); else mgl_export_mgld(gr,setExtension(fname,"mgld").toLocal8Bit().constData(), appName.toLocal8Bit().constData()); } //----------------------------------------------------------------------------- void mglConvertFromGraph(QPixmap &pic, mglCanvas *gr, uchar **buf, QImage *out) { const uchar *bb = mgl_get_rgb(gr); long w=mgl_get_width(gr), h=mgl_get_height(gr); if(*buf) delete [](*buf); *buf = new uchar[4*w*h]; for(long i=0;isetPixmap(pic, QClipboard::Clipboard); } //----------------------------------------------------------------------------- void QMathGL::copyClickCoor() { QApplication::clipboard()->setText(mousePos); } //----------------------------------------------------------------------------- void QMathGL::setMGLFont(QString path) { if(path.isEmpty()) mgl_restore_font(gr); else mgl_load_font(gr,path.toLocal8Bit().constData(),0); } //----------------------------------------------------------------------------- void QMathGL::setSize(int w, int h) { resize(w, h); if(w!=pic.width() || h!=pic.height()) // update only when image size is changed { mgl_set_size(gr,w,h); update(); } } //----------------------------------------------------------------------------- void QMathGL::about() { QString s = _("MathGL v. 2.") + QString::number(MGL_VER2) + _("\n(c) Alexey Balakin, 2007\nhttp://mathgl.sourceforge.net/"); QMessageBox::about(this, _("MathGL - about"), s); } //----------------------------------------------------------------------------- void QMathGL::aboutQt() { QMessageBox::aboutQt(this, _("About Qt")); } //----------------------------------------------------------------------------- void QMathGL::print() { QPrinter *printer = new QPrinter; printer->setOrientation(getRatio()>1 ? QPrinter::Landscape : QPrinter::Portrait); QPrintDialog printDlg(printer, this); if (printDlg.exec() == QDialog::Accepted) { QRectF r = printer->pageRect(QPrinter::Inch); int d1 = int(pic.width()/r.width()), d2 = int(pic.height()/r.height()); int dpi = printer->resolution(); if(dpisetResolution(dpi); QPainter p; if(!p.begin(printer)) return; // paint on printer p.drawPixmap(0,0,pic); } delete printer; } //----------------------------------------------------------------------------- void QMathGL::nextSlide() { mglCanvasWnd *g = dynamic_cast(gr); if(g && g->GetNumFig()>1) g->NextFrame(); emit frameChanged(+1); } void QMathGL::prevSlide() { mglCanvasWnd *g = dynamic_cast(gr); if(g && g->GetNumFig()>1) g->PrevFrame(); emit frameChanged(-1); } //----------------------------------------------------------------------------- void QMathGL::animation(bool st) { if(!st) timer->stop(); else timer->start(int(mgl_wnd_get_delay(gr)*1000)); } //----------------------------------------------------------------------------- void QMathGL::adjust() { mgl_set_size(gr, parentWidget()->width()-3, parentWidget()->height()-3); setSize(parentWidget()->width()-3, parentWidget()->height()-3); update(); // TODO replace to refresh ?!? } //----------------------------------------------------------------------------- void QMathGL::addMark() { primitives += "ball 0 0 'r*'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addLine() { primitives += "line -0.2 0 0.2 0 'r2'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addRect() { primitives += "rect -0.2 -0.2 0.2 0.2 'r'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addCurve() { primitives += "curve -0.2 0 0 0.5 0.2 0 0 0.5 'r2'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addRhomb() { primitives += "rhomb -0.2 0 0.2 0 0.1 'r'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addEllipse() { primitives += "ellipse -0.2 0 0.2 0 0.1 'r'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addArc() { primitives += "arc 0 0 0.2 0 60 'r2'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addPolygon(int n) { if(n<3) n = QInputDialog::getText(QApplication::activeWindow(), "MathGL", _("Enter number of vertexes")).toInt(); if(n>=3) { primitives += "polygon 0 0 0 0.2 "+QString::number(n)+" 'r'\n"; refresh(); } } //{ primitives += "arc -0.2 0 0.2 0 0.1 'r'\n"; refresh(); } //----------------------------------------------------------------------------- void QMathGL::addText(QString txt) { if(txt.isEmpty()) txt = QInputDialog::getText(QApplication::activeWindow(), "MathGL", _("Enter text")); if(!txt.isEmpty()) { primitives += "text 0 0 0.1 0 '"+txt+"' ''\n"; refresh(); } } //----------------------------------------------------------------------------- // // class mglCanvasQT // //----------------------------------------------------------------------------- mglCanvasQT::mglCanvasQT() : mglCanvasWnd() { Wnd = 0; } mglCanvasQT::~mglCanvasQT() { if(Wnd) { QMGL->gr=0; delete Wnd; } } //----------------------------------------------------------------------------- void mglCanvasQT::GotoFrame(int d) { int f = GetCurFig()+d; if(f>=GetNumFig()) f = 0; if(f<0) f = GetNumFig()-1; if(GetNumFig()>0 && d) { SetCurFig(f); QMGL->refresh(); } } //----------------------------------------------------------------------------- void mglCanvasQT::Animation() { static bool start=true; QMGL->animation(start); start = !start; } //----------------------------------------------------------------------------- void mglCanvasQT::ToggleAlpha() { QMGL->setAlpha(!QMGL->getAlpha()); } //----------------------------------------------------------------------------- void mglCanvasQT::ToggleLight() { QMGL->setLight(!QMGL->getLight()); } //----------------------------------------------------------------------------- void mglCanvasQT::ToggleNo() { QMGL->restore(); } //----------------------------------------------------------------------------- void mglCanvasQT::ToggleZoom() { QMGL->setZoom(!QMGL->getZoom()); } //----------------------------------------------------------------------------- void mglCanvasQT::ToggleRotate(){ QMGL->setRotate(!QMGL->getRotate());} //----------------------------------------------------------------------------- void mglCanvasQT::Update() { SetCurFig(0); QMGL->update(); Wnd->show(); } //----------------------------------------------------------------------------- void mglCanvasQT::Adjust() { QMGL->adjust(); } //----------------------------------------------------------------------------- void mglCanvasQT::Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p), const char *title, void *par, void (*reload)(void *p), bool maximize) { static char arg=0, *parg=&arg, **argv_=&parg; static int argc_=0; SetDrawFunc(draw, par, reload); if(Wnd) { Wnd->setWindowTitle(title); if(maximize) { Wnd->showMaximized(); } else Wnd->show(); return; } if(!qApp) { QCoreApplication::setAttribute(Qt::AA_X11InitThreads); if(!argv) { argc_ = 0; argv_=&parg; } else { argc_ = argc; argv_=argv; } QApplication *a = new QApplication(argc_, argv_); a->connect(a, SIGNAL(lastWindowClosed()), a, SLOT(quit())); } Wnd = new QMainWindow; Wnd->resize(850,680); Wnd->setWindowTitle(title); scroll = new QScrollArea(Wnd); QMGL = new QMathGL(Wnd); popup = mglMakeMenu(Wnd, QMGL, tet, phi); QMGL->setPopup(popup); QMGL->setGraph(this); QMGL->setDraw(draw, par); QMGL->appName = title; qApp->processEvents(); scroll->setWidget(QMGL); Wnd->setCentralWidget(scroll); QMGL->refresh(); if(!maximize) Wnd->show(); else Wnd->showMaximized(); } //----------------------------------------------------------------------------- #include "xpm/alpha.xpm" #include "xpm/arc.xpm" #include "xpm/copy.xpm" #include "xpm/curve.xpm" #include "xpm/down_1.xpm" #include "xpm/fileprint.xpm" #include "xpm/left_1.xpm" #include "xpm/light.xpm" #include "xpm/line.xpm" #include "xpm/mark_a.xpm" #include "xpm/mark_d.xpm" #include "xpm/mark_o.xpm" #include "xpm/mark_s.xpm" #include "xpm/right_1.xpm" #include "xpm/next_sl.xpm" #include "xpm/norm_1.xpm" #include "xpm/ok.xpm" #include "xpm/prev_sl.xpm" #include "xpm/rotate.xpm" #include "xpm/show_sl.xpm" #include "xpm/text.xpm" #include "xpm/polygon.xpm" #include "xpm/zoom_1.xpm" #include "xpm/zoom_in.xpm" #include "xpm/zoom_out.xpm" #include "xpm/up_1.xpm" #include "xpm/stop.xpm" #include "xpm/pause.xpm" //----------------------------------------------------------------------------- MGL_EXPORT QMenu *mglMakeMenu(QMainWindow *Wnd, QMathGL *QMGL, QSpinBox *&tet, QSpinBox *&phi) { QAction *a; QMenu *o, *oo, *f; QToolBar *bb; QMenu *popup = new QMenu(Wnd); // file menu { f = o = Wnd->menuBar()->addMenu(_("File")); oo = new QMenu(_("Export as 2D ..."),Wnd); oo->addAction(_("PNG"), QMGL, SLOT(exportPNG()),Qt::ALT+Qt::Key_P); oo->addAction(_("solid PNG"), QMGL, SLOT(exportPNGs()),Qt::ALT+Qt::Key_F); oo->addAction(_("JPEG"), QMGL, SLOT(exportJPG()),Qt::ALT+Qt::Key_J); oo->addAction(_("bitmap EPS"), QMGL, SLOT(exportBPS())); oo->addAction(_("vector EPS"), QMGL, SLOT(exportEPS()),Qt::ALT+Qt::Key_E); oo->addAction(_("SVG"), QMGL, SLOT(exportSVG()),Qt::ALT+Qt::Key_S); oo->addAction(_("LaTeX"), QMGL, SLOT(exportTEX()),Qt::ALT+Qt::Key_L); o->addMenu(oo); popup->addMenu(oo); oo = new QMenu(_("Export as 3D ..."),Wnd); oo->addAction(_("MGLD"), QMGL, SLOT(exportMGLD()),Qt::ALT+Qt::Key_M); oo->addAction(_("PRC"), QMGL, SLOT(exportPRC()),Qt::ALT+Qt::Key_D); oo->addAction(_("OBJ"), QMGL, SLOT(exportOBJ()),Qt::ALT+Qt::Key_O); oo->addAction(_("STL"), QMGL, SLOT(exportSTL())); oo->addAction(_("XYZ"), QMGL, SLOT(exportXYZ())); // oo->addAction(_("X3D"), QMGL, SLOT(exportX3D()),Qt::ALT+Qt::Key_X); o->addMenu(oo); popup->addMenu(oo); o->addSeparator(); a = new QAction(QPixmap(fileprint), _("Print graphics"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(print())); a->setToolTip(_("Open printer dialog and print graphics (Ctrl+P)")); a->setShortcut(Qt::CTRL+Qt::Key_P); o->addAction(a); o->addSeparator(); o->addAction(_("Close"), Wnd, SLOT(close()), Qt::CTRL+Qt::Key_W); } // graphics menu { bb = new QToolBar(_("Graphics"),Wnd); Wnd->addToolBar(Qt::TopToolBarArea, bb); o = Wnd->menuBar()->addMenu(_("Graphics")); a = new QAction(QPixmap(alpha_xpm), _("Alpha"), Wnd); a->setShortcut(Qt::ALT+Qt::Key_T); a->setCheckable(true); Wnd->connect(a, SIGNAL(toggled(bool)), QMGL, SLOT(setAlpha(bool))); Wnd->connect(QMGL, SIGNAL(alphaChanged(bool)), a, SLOT(setChecked(bool))); a->setToolTip(_("Switch on/off transparency for the graphics (Alt+T).")); o->addAction(a); bb->addAction(a); a = new QAction(QPixmap(light_xpm), _("Light"), Wnd); a->setShortcut(Qt::ALT+Qt::Key_L); a->setCheckable(true); Wnd->connect(a, SIGNAL(toggled(bool)), QMGL, SLOT(setLight(bool))); Wnd->connect(QMGL, SIGNAL(lightChanged(bool)), a, SLOT(setChecked(bool))); a->setToolTip(_("Switch on/off lightning for the graphics (Alt+L).")); o->addAction(a); bb->addAction(a); a = new QAction(QPixmap(rotate_xpm), _("Rotate by mouse"), Wnd); a->setCheckable(true); Wnd->connect(a, SIGNAL(toggled(bool)), QMGL, SLOT(setRotate(bool))); Wnd->connect(QMGL, SIGNAL(rotateChanged(bool)), a, SLOT(setChecked(bool))); a->setToolTip(_("Switch on/off mouse handling of the graphics\n(rotation, shifting, zooming and perspective).")); bb->addAction(a); a = new QAction(QPixmap(zoom_in_xpm), _("Zoom by mouse"), Wnd); a->setCheckable(true); Wnd->connect(a, SIGNAL(toggled(bool)), QMGL, SLOT(setZoom(bool))); Wnd->connect(QMGL, SIGNAL(zoomChanged(bool)), a, SLOT(setChecked(bool))); a->setToolTip(_("Switch on/off mouse zoom of selected region.")); bb->addAction(a); o->addSeparator(); a = new QAction(QPixmap(zoom_out_xpm), _("Restore"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(restore())); a->setToolTip(_("Restore default graphics rotation, zoom and perspective (Alt+Space).")); a->setShortcut(Qt::ALT+Qt::Key_Space); o->addAction(a); bb->addAction(a); popup->addAction(a); bb->addSeparator(); o->addAction(a); bb->addAction(a); popup->addAction(a); a = new QAction(QPixmap(ok_xpm), _("Redraw"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(update())); a->setToolTip(_("Execute script and redraw graphics (F5).")); a->setShortcut(Qt::Key_F5); o->addAction(a); bb->addAction(a); popup->addAction(a); a = new QAction(QPixmap(stop_xpm), _("Stop"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(stop())); a->setToolTip(_("Ask to stop plot drawing (F7).")); a->setShortcut(Qt::Key_F7); a = new QAction(_("Adjust size"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(adjust())); a->setToolTip(_("Change canvas size to fill whole region (F6).")); a->setShortcut(Qt::Key_F6); o->addAction(a); a = new QAction(QPixmap(copy_xpm), _("Copy plot"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(copy())); a->setToolTip(_("Copy graphics to clipboard (Ctrl+Shift+G).")); a->setShortcut(Qt::CTRL+Qt::SHIFT+Qt::Key_G); o->addAction(a); bb->addAction(a); popup->addAction(a); bb->addSeparator(); oo = new QMenu(_("Primitives ..."),Wnd); a = new QAction(QPixmap(line_xpm), _("Add line"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addLine())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add line which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(arc_xpm), _("Add arc"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addArc())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add arc which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(curve_xpm), _("Add curve"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addCurve())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add curve which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(mark_s_xpm), _("Add rect"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addRect())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add rectangle which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(mark_d_xpm), _("Add rhombus"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addRhomb())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add rhombus which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(mark_o_xpm), _("Add ellipse"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addEllipse())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add ellipse which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(polygon_xpm), _("Add polygon"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addPolygon())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add polygon which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(mark_a_xpm), _("Add mark"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addMark())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add marker which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(text_xpm), _("Add text"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(addText())); Wnd->connect(QMGL, SIGNAL(usePrimChanged(bool)), a, SLOT(setVisible(bool))); a->setToolTip(_("Add text which properties can be changed later by mouse.")); bb->addAction(a); oo->addAction(a); o->addMenu(oo); bb->addSeparator(); tet = new QSpinBox(Wnd); tet->setWrapping(true); bb->addWidget(tet); tet->setRange(-180, 180); tet->setSingleStep(10); Wnd->connect(tet, SIGNAL(valueChanged(int)), QMGL, SLOT(setTet(int))); Wnd->connect(QMGL, SIGNAL(tetChanged(int)), tet, SLOT(setValue(int))); tet->setToolTip(_("Set value of \\theta angle.")); bb->addSeparator(); phi = new QSpinBox(Wnd); phi->setWrapping(true); bb->addWidget(phi); phi->setRange(-180, 180); phi->setSingleStep(10); Wnd->connect(phi, SIGNAL(valueChanged(int)), QMGL, SLOT(setPhi(int))); Wnd->connect(QMGL, SIGNAL(phiChanged(int)), phi, SLOT(setValue(int))); phi->setToolTip(_("Set value of \\phi angle.")); // bb->addSeparator(); } // zooming menu { oo = o->addMenu(_("Zoom/move")); bb = new QToolBar(_("Zoom graphics"),Wnd); Wnd->addToolBar(Qt::LeftToolBarArea, bb); a = new QAction(QPixmap(left_1_xpm), _("Move left"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(shiftLeft())); a->setToolTip(_("Move graphics left by 1/3 of its width.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(up_1_xpm), _("Move up"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(shiftUp())); a->setToolTip(_("Move graphics up by 1/3 of its height.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(zoom_1_xpm), _("Zoom in"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(zoomIn())); a->setToolTip(_("Zoom in graphics.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(norm_1_xpm), _("Zoom out"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(zoomOut())); a->setToolTip(_("Zoom out graphics.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(down_1_xpm), _("Move down"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(shiftDown())); a->setToolTip(_("Move graphics up down 1/3 of its height.")); bb->addAction(a); oo->addAction(a); a = new QAction(QPixmap(right_1_xpm), _("Move right"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(shiftRight())); a->setToolTip(_("Move graphics right by 1/3 of its width.")); bb->addAction(a); oo->addAction(a); } // animation menu { o = Wnd->menuBar()->addMenu(_("Animation")); bb = new QToolBar(_("Animation"),Wnd); Wnd->addToolBar(Qt::LeftToolBarArea, bb); a = new QAction(QPixmap(next_sl_xpm), _("Next slide"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(nextSlide())); a->setToolTip(_("Show next slide (Ctrl+.).")); a->setShortcut(Qt::CTRL+Qt::Key_Period); o->addAction(a); bb->addAction(a); a = new QAction(QPixmap(show_sl_xpm), _("Slideshow"), Wnd); a->setCheckable(true); Wnd->connect(a, SIGNAL(toggled(bool)), QMGL, SLOT(animation(bool))); a->setToolTip(_("Run slideshow (CTRl+F5).")); a->setShortcut(Qt::CTRL+Qt::Key_F5); o->addAction(a); bb->addAction(a); a = new QAction(QPixmap(prev_sl_xpm), _("Prev slide"), Wnd); Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(prevSlide())); a->setToolTip(_("Show previous slide (Ctrl+,).")); a->setShortcut(Qt::CTRL+Qt::Key_Comma); o->addAction(a); bb->addAction(a); } #if MGL_HAVE_PTHR_WIDGET { bb = new QToolBar(_("Calculations"),Wnd); Wnd->addToolBar(Qt::LeftToolBarArea, bb); a = new QAction(QPixmap(pause_xpm), _("Pause calculation"), Wnd); a->setCheckable(true); Wnd->connect(a, SIGNAL(toggled(bool)), QMGL, SLOT(setPause(bool))); Wnd->connect(QMGL, SIGNAL(pauseChanged(bool)), a, SLOT(setChecked(bool))); // Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(setPause())); a->setToolTip(_("Pause on/off external calculations")); f->addSeparator(); f->addAction(a); bb->addAction(a); } #endif Wnd->menuBar()->addSeparator(); o = Wnd->menuBar()->addMenu(_("Help")); o->addAction(_("About"), QMGL, SLOT(about())); o->addAction(_("About Qt"), QMGL, SLOT(aboutQt())); return popup; } //----------------------------------------------------------------------------- HMGL MGL_EXPORT mgl_create_graph_qt(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p)) { mglCanvasQT *g = new mglCanvasQT; g->Window(0,0,draw,title,par,load); return g; } void* mgl_qt_widget(HMGL gr) { mglCanvasQT *g = dynamic_cast(gr); return g?g->QMGL:NULL; } int MGL_EXPORT mgl_qt_run() { return (qApp)?qApp->exec():-1; } //----------------------------------------------------------------------------- uintptr_t MGL_EXPORT mgl_create_graph_qt_(const char *title, int l) { char *s = new char[l+1]; memcpy(s,title,l); s[l]=0; uintptr_t t = uintptr_t(mgl_create_graph_qt(0,s,0,0)); delete []s; return t; } int MGL_EXPORT mgl_qt_run_() { return mgl_qt_run(); } //----------------------------------------------------------------------------- mathgl-2.4.1/widgets/wx.cpp0000664000175000017500000004075613134046554015411 0ustar balakinbalakin/*************************************************************************** * wx.cpp is part of Math Graphic Library * * Copyright (C) 2007-2016 Alexey Balakin * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * * published by the Free Software Foundation; either version 3 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 Library 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. * ***************************************************************************/ //----------------------------------------------------------------------------- #include #include #include #include #include #include #undef _ #include "mgl2/canvas_wnd.h" #include "mgl2/wx.h" //----------------------------------------------------------------------------- class MGL_EXPORT mglCanvasWX : public mglCanvasWnd { friend class wxMathGL; public: int sshow; ///< Current state of animation switch (toggle button) wxMathGL *WMGL; ///< Control which draw graphics wxWindow *Wnd; ///< Pointer to window mglCanvasWX(); virtual ~mglCanvasWX(); /// Create a window for plotting. Now implemeted only for GLUT. void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p), const char *title, void *par=NULL, void (*reload)(void *p)=NULL, bool maximize=false); /// Switch on/off transparency (do not overwrite switches in user drawing function) void ToggleAlpha(); /// Switch on/off lighting (do not overwrite switches in user drawing function) void ToggleLight(); void ToggleRotate(); ///< Switch on/off rotation by mouse void ToggleZoom(); ///< Switch on/off zooming by mouse void ToggleNo(); ///< Switch off all zooming and rotation void Update(); ///< Update picture by calling user drawing function void Adjust(); ///< Adjust size of bitmap to window size void GotoFrame(int d); ///< Show arbitrary frame (use relative step) void Animation(); ///< Run animation (I'm too lasy to change it) protected: wxScrolledWindow *scroll; ///< Scrolling area wxMenu *popup; ///< Popup menu // wxSpinCtrl *tet, *phi; ///< Spin box for angles // TODO void MakeMenu(); ///< Create menu, toolbar and popup menu }; //----------------------------------------------------------------------------- const wxString ScriptName(L"default"); enum { TIMER_ID=1000, LAST_ID }; BEGIN_EVENT_TABLE(wxMathGL, wxWindow) EVT_TIMER (TIMER_ID, wxMathGL::OnNextSlide) EVT_PAINT (wxMathGL::OnPaint) EVT_SIZE (wxMathGL::OnSize) EVT_LEFT_DOWN (wxMathGL::OnMouseLeftDown) EVT_RIGHT_DOWN (wxMathGL::OnMouseDown) EVT_MIDDLE_DOWN (wxMathGL::OnMouseDown) EVT_LEFT_UP (wxMathGL::OnMouseLeftUp) EVT_RIGHT_UP (wxMathGL::OnMouseRightUp) EVT_MOTION (wxMathGL::OnMouseMove) END_EVENT_TABLE() //----------------------------------------------------------------------------- // // class wxMathGL // //----------------------------------------------------------------------------- wxMathGL::wxMathGL(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxWindow(parent,id,pos,size,style,name) { AutoResize = false; draw_par = 0; draw_func = 0; gr = new mglCanvas; popup = 0; draw_cl = 0; phi = tet = per = 0; x0=y0=xe=ye=0; x1 = y1 = 0; x2 = y2 = 1; alpha = light = zoom = rotate = false; // SetSize(600, 400); timer = new wxTimer(this,TIMER_ID); } //----------------------------------------------------------------------------- wxMathGL::~wxMathGL() { if(mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); } //----------------------------------------------------------------------------- double wxMathGL::GetRatio() { return double(mgl_get_width(gr))/mgl_get_height(gr); } //----------------------------------------------------------------------------- void wxMathGL::SetGraph(HMGL GR) { mglCanvas *gg = dynamic_cast(GR); if(!gg) return; if(mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); gr=gg; mgl_use_graph(gg,1); } //----------------------------------------------------------------------------- void wxMathGL::OnPaint(wxPaintEvent& ) { wxPaintDC dc(this); dc.DrawBitmap(pic,0,0); // if(zoom) dc.DrawRectangle(x0,y0,xe-x0,ye-y0); if(mgl_get_flag(gr,MGL_SHOW_POS) && !MousePos.IsEmpty()) dc.DrawText(MousePos,0,12); // TODO: add grid drawing here (from Qt) // TODO: add active points drawing here (from Qt) } //----------------------------------------------------------------------------- void wxMathGL::OnSize(wxSizeEvent& event) { wxSize ev = event.GetSize(); if(mgl_get_width(gr)==ev.GetWidth() && mgl_get_height(gr)==ev.GetHeight()) return; if(AutoResize && ev.GetWidth()>0 && ev.GetHeight()>0) { mgl_set_size(gr, ev.GetWidth(), ev.GetHeight()); Update(); } else SetSize(mgl_get_width(gr), mgl_get_height(gr)); } //----------------------------------------------------------------------------- void wxMathGL::OnNextSlide(wxTimerEvent& ) { NextSlide(); } //----------------------------------------------------------------------------- void wxMathGL::SetPer(int p) { if(100*per!=p && p>=0 && p<100) { per = 0.01*p; Repaint(); } } //----------------------------------------------------------------------------- void wxMathGL::SetPhi(int p) { if(phi!=p) { phi = p; Repaint(); } } //----------------------------------------------------------------------------- void wxMathGL::SetTet(int t) { if(tet!=t) { tet = t; Repaint(); } } //----------------------------------------------------------------------------- void wxMathGL::SetAlpha(bool a) { if(alpha!=a) { alpha = a; Update(); } } //----------------------------------------------------------------------------- void wxMathGL::SetLight(bool l) { if(light!=l) { light = l; Update(); } } //----------------------------------------------------------------------------- void wxMathGL::SetZoom(bool z) { if(zoom!=z) { zoom=z; rotate=false; Repaint(); } } //----------------------------------------------------------------------------- void wxMathGL::SetRotate(bool r) { if(rotate!=r) { zoom=false; rotate=r; Repaint(); } } //----------------------------------------------------------------------------- void wxMathGL::ShiftDown() { mreal d=(y2-y1)/3; y1+=d; y2+=d; Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::ShiftUp() { mreal d=(y2-y1)/3; y1-=d; y2-=d; Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::ShiftRight() { mreal d=(x2-x1)/3; x1-=d; x2-=d; Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::ShiftLeft() { mreal d=(x2-x1)/3; x1+=d; x2+=d; Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::Restore() { SetPhi(0); SetTet(0); SetPer(0); x1=y1=0; x2=y2=1; zoom=rotate=false; Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::ZoomIn() { mreal d; d = (y2-y1)/4; y1 += d; y2 -= d; d = (x2-x1)/4; x1 += d; x2 -= d; Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::ZoomOut() { mreal d; d = (y2-y1)/2; y1 -= d; y2 += d; d = (x2-x1)/2; x1 -= d; x2 += d; Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::Update() { if(draw_func || draw_cl) { if(mgl_get_flag(gr,MGL_CLF_ON_UPD)) mgl_set_def_param(gr); mgl_set_def_param(gr); mgl_reset_frames(gr); mgl_set_alpha(gr,alpha); mgl_set_light(gr,light); if(draw_func) draw_func(gr, draw_par); // drawing itself else if(draw_cl) { mglGraph g(gr); draw_cl->Draw(&g); } const char *buf = mgl_get_mess(gr); if(*buf) { wxMessageDialog dlg(this, wxString(buf,wxConvLocal), appName, wxOK); dlg.ShowModal(); } } else if(mgl_get_num_frame(gr)>0) { mgl_set_alpha(gr,alpha); mgl_set_light(gr,light); // mgl_zoom(gr,x1,y1,x2,y2); mgl_view(gr,-phi,-tet,0); mgl_get_frame(gr,0); } MousePos.Empty(); Repaint(); } //----------------------------------------------------------------------------- wxBitmap MGL_EXPORT ConvertFromGraph(HMGL gr) { const unsigned char *bb = mgl_get_rgb(gr); int w=mgl_get_width(gr), h=mgl_get_height(gr); unsigned char *tmp = (unsigned char *)malloc(3*w*h); memcpy(tmp,bb,3*w*h); wxImage img(w, h); img.SetData(tmp); return wxBitmap(img); } //----------------------------------------------------------------------------- void wxMathGL::Repaint() { mgl_zoom(gr,x1,y1,x2,y2); mgl_view(gr,-phi,-tet,0); mgl_ask_perspective(gr, per); pic = ConvertFromGraph(gr); wxSize sz=GetSize(); if(pic.GetWidth()!=sz.GetWidth() || pic.GetHeight()!=sz.GetHeight()) SetSize(pic.GetWidth(), pic.GetHeight()); Refresh(); } //----------------------------------------------------------------------------- void wxMathGL::OnMouseLeftDown(wxMouseEvent &ev) { long x=ev.GetX(), y=ev.GetY(); if(!zoom && !rotate) { mglPoint p = gr->CalcXYZ(x, y); MousePos.Printf(wxT("x=%g, y=%g, z=%g"),p.x,p.y,p.z); Refresh(); // emit mouseClick(p.x,p.y,p.z); } xe=x0=x; ye=y0=y; ev.Skip(); } //----------------------------------------------------------------------------- void wxMathGL::OnMouseDown(wxMouseEvent &ev) { xe=x0=ev.GetX(); ye=y0=ev.GetY(); ev.Skip(); } //----------------------------------------------------------------------------- void wxMathGL::OnMouseLeftUp(wxMouseEvent &) { if(zoom) { int w1=GetSize().GetWidth(),h1=GetSize().GetHeight(); mreal _x1,_x2,_y1,_y2; _x1 = x1+(x2-x1)*(x0-GetPosition().x)/mreal(w1); _y1 = y2-(y2-y1)*(ye-GetPosition().y)/mreal(h1); _x2 = x1+(x2-x1)*(xe-GetPosition().x)/mreal(w1); _y2 = y2-(y2-y1)*(y0-GetPosition().y)/mreal(h1); x1=_x1; x2=_x2; y1=_y1; y2=_y2; if(x1>x2) { _x1=x1; x1=x2; x2=_x1; } if(y1>y2) { _x1=y1; y1=y2; y2=_x1; } x0 = xe; y0 = ye; Update(); } } //----------------------------------------------------------------------------- void wxMathGL::OnMouseRightUp(wxMouseEvent &ev) { if(popup && !rotate) PopupMenu(popup, ev.GetPosition()); } //----------------------------------------------------------------------------- void wxMathGL::OnMouseMove(wxMouseEvent &ev) { long w=GetSize().GetWidth(), h=GetSize().GetHeight(); xe=ev.GetX(); ye=ev.GetY(); if(rotate) { if(ev.ButtonDown(wxMOUSE_BTN_LEFT)) // rotate { mreal ff = 240/sqrt(mreal(w*h)); phi += int((x0-xe)*ff); tet += int((y0-ye)*ff); if(phi>180) phi-=360; if(phi<-180) phi+=360; if(tet>180) tet-=360; if(tet<-180) tet+=360; // Update(); } if(ev.ButtonDown(wxMOUSE_BTN_RIGHT)) // zoom and perspective { mreal ff = 2.*(y0-ye)/w, gg = 0.5*(xe-x0)/h; mreal cx = (x1+x2)/2, cy = (y1+y2)/2; x1 = cx+(x1-cx)*exp(-ff); x2 = cx+(x2-cx)*exp(-ff); y1 = cy+(y1-cy)*exp(-ff); y2 = cy+(y2-cy)*exp(-ff); per = per + gg; if(per<0) per = 0; if(per>=1) per = 0.9999; // Update(); } if(ev.ButtonDown(wxMOUSE_BTN_MIDDLE)) // shift { mreal ff = 1./sqrt(mreal(w*h)); mreal dx = (x0-xe)*ff*(x2-x1), dy = (y0-ye)*ff*(y2-y1); x1 += dx; x2 += dx; y1 -= dy; y2 -= dy; } x0 = xe; y0 = ye; Update(); } // if(zoom) Update(); if(zoom) Refresh(0); } //----------------------------------------------------------------------------- wxString mglSetExtension(wxString &fname, const char *ext) { wxString oname; if(fname.Right(4)!=wxChar('.')+wxString(ext,*wxConvCurrent)) oname = fname+wxChar('.')+wxString(ext,*wxConvCurrent); return oname; } //----------------------------------------------------------------------------- // NOTE: this is replacement for wxString::char_str() which is for v.2.8 or later const char *mglw_str(const wxString &str) { static char *buf=0; if(buf) delete []buf; size_t i, n=str.Len(); buf = new char[n+1]; buf[n]=0; for(i=0;iOpen()) { wxTheClipboard->SetData( new wxBitmapDataObject(pic) ); wxTheClipboard->Close(); } } //----------------------------------------------------------------------------- void wxMathGL::SetSize(int w, int h) { mgl_set_size(gr,w,h); wxWindow::SetSize(w, h); Update(); } //----------------------------------------------------------------------------- void wxMathGL::Adjust() { wxSize sz=GetSize(); mgl_set_size(gr,sz.GetWidth(),sz.GetHeight()); Repaint(); } //----------------------------------------------------------------------------- void wxMathGL::NextSlide() { mglCanvasWnd *g = dynamic_cast(gr); if(g && g->GetNumFig()>1) g->NextFrame(); } //----------------------------------------------------------------------------- void wxMathGL::PrevSlide() { mglCanvasWnd *g = dynamic_cast(gr); if(g && g->GetNumFig()>1) g->PrevFrame(); } //----------------------------------------------------------------------------- void wxMathGL::Animation(bool st) { if(st) timer->Start(int(mgl_wnd_get_delay(gr)*1000)); else timer->Stop(); } //----------------------------------------------------------------------------- void wxMathGL::About() { wxString s = wxT("MathGL v. 2.") + wxString::Format(wxT("%g"),MGL_VER2) + wxT("\n(c) Alexey Balakin, 2007\nhttp://mathgl.sourceforge.net/"); wxMessageBox(s, wxT("MathGL - about"), wxOK|wxICON_INFORMATION, this); } //----------------------------------------------------------------------------- mathgl-2.4.1/widgets/image.cpp0000664000175000017500000065600013134046554016030 0ustar balakinbalakin/* image.cpp is part of UDAV * Copyright (C) 2007-2014 Alexey Balakin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation * * 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 */ #include "mgl2/define.h" #include "image.h" static const unsigned char idata_load[] = {0,0,0,0,0,0,0,3,0,0,0,73,0,0,0,75,0,0,0,75,0,0,0,75,0,0,0,75,0,0,0,75,0,0, 0,61,9,9,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,127,181,201, 40,76,118,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,232,231,231,255,42,42,41,150,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,84,127,181,0,74,115,167,255,81,114,155,255,255,255,255, 255,246,246,246,255,248,248,248,255,249,248,248,255,245,244,244,255,235,235,235, 255,196,196,196,254,255,255,254,255,59,81,106,255,81,126,184,255,84,131,188,255, 84,129,187,255,88,135,194,213,0,0,0,0,61,100,146,255,74,106,144,255,255,255, 255,255,248,248,248,255,248,248,248,255,249,249,249,255,246,246,246,255,239,238, 238,255,160,160,160,255,255,255,255,255,228,225,222,255,78,97,119,255,120,162, 215,255,124,169,225,255,73,118,173,255,0,0,0,0,47,82,122,255,62,94,135,255,255, 255,255,255,248,247,247,255,249,249,249,255,249,249,249,255,247,247,247,255,242, 242,242,255,154,154,154,255,255,255,255,255,241,239,239,255,225,221,219,255,55, 79,109,255,104,148,205,255,48,82,123,255,0,0,0,0,43,75,113,255,47,82,122,255, 255,255,255,255,248,247,247,255,249,249,249,255,249,249,249,255,248,248,248,255, 245,245,245,255,161,160,160,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,252,250,255,70,93,121,255,42,75,115,255,0,0,0,0,37,70,106,255,33,67,109,255, 255,255,255,255,247,247,247,255,248,248,248,255,250,249,249,255,251,251,250,255, 250,249,249,255,235,235,235,255,184,184,184,255,180,179,179,255,173,172,172,255, 178,176,176,255,244,242,240,255,14,42,74,255,0,0,0,0,34,65,100,255,17,52,94,255, 255,255,255,255,248,248,248,255,251,250,250,255,250,249,250,255,223,225,229,255, 207,211,216,255,206,210,214,255,204,207,213,255,201,205,209,255,198,200,206,255, 193,196,202,255,224,226,229,255,0,20,49,255,0,0,0,0,24,57,91,255,0,30,69,255, 232,232,234,255,206,209,213,255,208,210,214,255,181,187,195,255,135,162,190,255, 167,205,235,255,168,205,234,255,169,205,235,255,168,205,235,255,168,205,235,255, 168,205,235,255,170,206,235,255,188,224,252,255,147,177,203,186,79,118,159,255, 188,224,251,255,167,204,234,255,166,203,233,255,166,204,234,255,168,206,235,255, 170,206,234,255,133,171,218,255,130,166,215,255,128,166,215,255,127,166,215,255, 130,166,215,255,128,166,215,255,128,166,215,255,135,173,225,255,72,93,120,255, 80,121,169,255,131,169,220,255,124,163,214,255,125,163,214,255,125,163,214,255, 126,163,214,255,126,163,214,255,129,166,216,255,128,167,216,255,128,167,216,255, 128,167,216,255,130,167,216,255,129,167,216,255,129,167,216,255,135,174,225,255, 73,95,123,255,81,122,170,255,138,174,224,255,131,169,219,255,131,169,219,255, 134,169,219,255,131,169,219,255,135,169,219,255,133,169,219,255,132,169,219,255, 131,169,219,255,134,169,219,255,131,169,219,255,134,169,219,255,132,169,218,255, 137,177,228,255,74,95,124,255,57,103,155,255,64,118,180,255,63,116,176,255,63, 116,176,255,63,116,176,255,63,116,176,255,64,116,176,255,63,116,176,255,64,116, 176,255,63,116,176,255,63,116,176,255,63,116,176,255,63,116,176,255,63,116,176, 255,67,122,185,255,39,68,102,255,88,127,173,255,135,173,223,255,132,169,218,255, 133,169,218,255,134,169,218,255,133,169,218,255,132,169,218,255,132,169,218,255, 133,169,218,255,134,169,218,255,133,169,218,255,131,169,218,255,133,169,218,255, 132,169,218,255,138,176,227,255,80,100,129,255,74,117,166,185,129,168,221,255, 125,163,216,255,126,164,216,255,124,163,216,255,120,163,217,255,124,163,217,255, 126,164,217,255,126,164,217,255,126,163,217,255,121,163,217,255,122,163,216,255, 126,164,216,255,126,163,216,255,129,169,224,255,69,95,128,175,0,24,56,65,0,19, 51,122,0,20,51,123,0,19,50,124,0,19,50,125,0,19,49,126,0,19,49,127,0,18,48,129, 0,18,48,129,0,18,49,127,0,19,49,126,0,19,50,125,0,19,50,124,0,20,51,123,0,19, 51,122,0,27,61,66}; MGL_EXPORT Fl_RGB_Image img_load(idata_load, 16, 16, 4, 0); static const unsigned char idata_save[] = {108,133,119,124,77,121,145,126,56,103,139,111,56,103,139,140,56,103,139, 212,56,103,139,255,61,105,138,248,74,113,128,229,88,120,122,133,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,112,146,94,98,150,187,126,129,173, 209,93,177,206,230,205,208,223,239,255,197,219,236,255,155,194,223,255,104,139, 160,253,67,110,136,253,106,127,90,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,107,127,136,150,102,113,115,255,98,112,117,255,74,109,133,255,65,116, 154,255,68,120,159,255,158,191,217,255,193,217,235,255,81,134,175,255,78,106, 125,255,110,112,107,255,110,112,107,255,110,112,107,255,110,112,107,255,110,112, 107,255,110,112,107,128,107,113,110,255,226,230,221,255,255,255,255,255,221,225, 214,255,201,214,221,255,110,153,182,255,56,103,139,255,171,203,226,255,146,183, 211,255,84,125,155,255,213,223,229,255,255,255,255,255,255,255,255,255,255,255, 255,255,244,244,244,255,110,112,107,255,114,117,107,255,253,253,253,255,238,238, 238,255,237,237,237,255,223,226,222,255,119,152,176,255,56,103,139,255,121,167, 202,255,143,179,206,255,61,107,142,255,172,188,195,255,237,237,238,255,237,238, 238,255,237,238,237,255,243,244,243,255,110,112,107,255,110,112,107,255,252,251, 252,255,235,236,236,255,56,103,139,255,56,103,139,255,56,103,139,255,56,103,139, 255,121,167,202,255,88,146,189,255,56,103,139,255,56,103,139,255,56,103,139,255, 56,103,139,255,236,236,236,255,243,243,243,255,110,112,107,255,110,112,107,255, 250,250,250,255,233,233,234,255,202,207,196,255,56,103,139,255,152,191,220,255, 113,159,191,255,113,159,191,255,113,159,191,255,115,159,192,255,150,187,216,255, 56,103,139,255,149,169,175,255,234,233,234,255,242,242,242,255,110,112,107,255, 110,112,107,255,249,249,249,255,250,250,250,255,228,228,228,255,197,203,191,255, 56,103,139,255,152,191,220,255,115,159,192,255,115,159,192,255,171,200,223,255, 56,103,139,255,146,166,172,255,228,228,228,255,244,244,244,255,241,241,241,255, 110,112,107,255,110,112,107,255,249,249,249,255,238,238,238,255,250,250,250,255, 228,228,228,255,197,203,191,255,56,103,139,255,172,203,227,255,152,191,220,255, 59,107,143,255,146,166,172,255,228,228,228,255,250,250,250,255,238,238,238,255, 241,241,241,255,110,112,107,255,110,112,107,255,247,247,247,255,227,227,227,255, 238,238,238,255,250,250,250,255,250,250,250,255,206,212,200,255,63,108,142,255, 56,103,139,255,154,174,180,255,250,250,250,255,252,252,252,255,238,238,238,255, 227,227,227,255,240,240,240,255,110,112,107,255,110,112,107,255,254,254,254,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,244,244,244,255,244,244,244,255,235,235,235,255, 235,235,235,255,227,227,227,255,240,240,240,255,110,112,107,255,110,112,107,255, 206,206,206,255,201,201,201,255,201,201,201,255,201,201,201,255,201,201,201,255, 197,197,197,255,201,201,201,255,201,201,201,255,197,197,197,255,197,197,197,255, 197,197,197,255,197,197,197,255,197,197,197,255,214,214,214,255,110,112,107,255, 110,112,107,255,206,206,206,255,197,197,197,255,159,159,159,255,175,175,175,255, 188,188,188,255,196,196,196,255,200,200,200,255,208,208,208,255,169,169,169,255, 210,210,210,255,169,169,169,255,210,210,210,255,185,185,185,255,202,202,202,255, 110,112,107,255,110,112,107,255,205,205,205,255,195,195,195,255,170,170,169,255, 180,180,180,255,194,194,194,255,196,196,196,255,200,200,200,255,203,203,203,255, 168,167,168,255,209,209,209,255,168,167,167,255,209,209,209,255,183,182,182,255, 202,202,202,255,110,112,107,255,110,112,107,255,221,221,221,255,220,220,220,255, 220,220,220,255,220,220,220,255,213,213,213,255,213,213,213,255,207,207,207,255, 207,207,207,255,207,207,207,255,207,207,207,255,207,207,207,255,207,207,207,255, 207,207,207,255,202,202,202,255,110,112,107,255,110,112,107,128,110,112,107,255, 110,112,107,255,110,112,107,255,110,112,107,255,110,112,107,255,110,112,107,255, 110,112,107,255,110,112,107,255,110,112,107,255,110,112,107,255,110,112,107,255, 110,112,107,255,110,112,107,255,110,112,107,255,110,112,107,128}; MGL_EXPORT Fl_RGB_Image img_save(idata_save, 16, 16, 4, 0); static const unsigned char idata_calc[] = {255,255,255,0,255,255,255,0,0,0,0,7,69,69,69,138,121,121,121,185,124,124, 124,187,122,122,122,188,121,121,121,187,118,118,118,187,118,118,118,187,118,118, 118,186,119,119,119,185,77,77,77,136,0,0,0,3,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,0,0,0,81,206,206,206,255,119,119,119,255,114,115,113, 255,116,118,116,255,117,119,116,255,116,118,116,255,104,106,103,255,73,75,72, 255,77,77,76,255,195,195,195,255,0,0,0,66,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,0,0,0,96,211,211,211,255,105,105,105,255,192,204,183,255, 189,202,181,255,191,203,183,255,179,194,169,255,157,173,146,255,155,171,144,255, 103,105,101,255,195,195,195,255,0,0,0,81,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,0,0,0,96,206,206,206,255,75,75,75,255,77,77,77,255,66,67,66, 255,54,55,54,255,49,50,49,255,49,50,49,255,60,60,60,255,61,61,61,255,190,190, 190,255,0,0,0,81,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0, 96,224,224,224,255,196,196,196,255,200,200,200,255,198,198,198,255,193,193,193, 255,193,193,193,255,193,193,193,255,194,194,194,255,199,199,199,255,228,228,228, 255,0,0,0,82,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,96, 223,223,223,255,62,62,62,255,62,62,62,255,238,238,238,255,62,62,62,255,59,59,59, 255,224,224,224,255,62,62,62,255,62,62,62,255,234,234,234,255,0,0,0,82,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,96,219,219,219,255,237, 237,237,255,242,242,242,255,235,235,235,255,231,231,231,255,231,231,231,255,231, 231,231,255,234,234,234,255,240,240,240,255,232,232,232,255,0,0,0,83,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,96,215,215,215,255,62,62, 62,255,62,62,62,255,230,230,230,255,61,61,61,255,59,59,59,255,219,219,219,255, 62,62,62,255,62,62,62,255,229,229,229,255,0,0,0,83,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,0,0,0,96,212,212,212,255,234,234,234,255,238,238, 238,255,227,227,227,255,226,226,226,255,226,226,226,255,226,226,226,255,232,232, 232,255,236,236,236,255,227,227,227,255,0,0,0,83,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,0,0,0,96,209,209,209,255,62,62,62,255,62,62,62,255, 224,224,224,255,61,61,61,255,59,59,59,255,216,216,216,255,62,62,62,255,62,62,62, 255,225,225,225,255,0,0,0,83,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,0,0,0,96,207,207,207,255,231,231,231,255,225,225,225,255,222,222,222,255, 222,222,222,255,222,222,222,255,223,223,223,255,229,229,229,255,232,232,232,255, 223,223,223,255,0,0,0,83,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,0,0,0,96,204,204,204,255,62,62,62,255,62,62,62,255,219,219,219,255,62,62,62, 255,60,60,60,255,213,213,213,255,65,65,65,255,65,65,65,255,220,220,220,255,0,0, 0,83,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,96,202,202, 202,255,218,218,218,255,213,213,213,255,217,217,217,255,213,213,213,255,211,211, 211,255,220,220,220,255,54,54,54,255,56,56,56,255,218,218,218,255,0,0,0,83,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,96,200,200,200,255,61, 61,61,255,61,61,61,255,215,215,215,255,61,61,61,255,60,60,60,255,212,212,212, 255,49,49,49,255,49,49,49,255,216,216,216,255,0,0,0,83,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,0,0,0,91,184,184,184,255,213,213,213,255,213, 213,213,255,213,213,213,255,213,213,213,255,214,214,214,255,217,217,217,255,223, 223,223,255,223,223,223,255,204,204,204,255,0,0,0,79,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,0,0,0,21,71,71,71,224,101,101,101,243,101,101, 101,243,101,101,101,243,101,101,101,243,102,102,102,243,105,105,105,243,109,109, 109,244,108,108,108,244,71,71,71,226,0,0,0,12,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_calc(idata_calc, 16, 16, 4, 0); static const unsigned char idata_undo[] = {166,127,0,27,166,127,0,33,255,255,255,0,255,255,255,0,166,127,0,34,169,131, 2,129,180,146,16,192,195,169,53,239,200,173,68,243,183,147,25,198,167,129,1, 136,166,127,0,43,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,173, 138,12,220,185,156,29,245,166,127,0,85,168,131,2,108,196,169,36,247,235,211,84, 255,243,222,100,255,249,236,113,255,249,236,114,255,244,223,105,255,238,209,89, 255,200,163,33,245,168,128,1,126,166,127,0,4,255,255,255,0,255,255,255,0,176, 145,13,243,241,217,103,255,197,172,39,249,221,197,72,250,245,223,103,255,247, 229,103,255,247,229,103,255,247,229,103,255,247,229,103,255,247,229,103,255,247, 229,103,255,245,224,105,255,224,185,63,249,170,131,3,205,166,127,0,6,255,255, 255,0,176,145,13,243,243,217,105,255,243,217,105,255,243,220,104,255,243,219, 102,255,243,218,101,255,239,204,95,255,232,183,62,255,232,183,58,255,238,200,84, 255,243,217,102,255,243,217,101,255,243,218,104,255,201,162,53,249,166,127,1, 137,255,255,255,0,176,145,13,244,238,209,100,255,239,211,99,255,239,212,99,255, 235,205,85,255,222,170,33,255,213,156,14,255,200,150,20,254,197,144,25,254,205, 136,6,255,226,162,39,255,238,202,92,255,239,204,95,255,234,198,91,255,158,120, 18,246,166,127,0,55,177,145,13,244,235,203,93,255,235,207,92,255,233,206,86, 255,218,179,22,255,195,157,17,254,149,120,13,246,163,125,2,177,160,123,3,166, 133,103,8,247,153,101,5,249,224,156,31,250,236,193,86,253,236,193,85,255,174, 136,51,254,165,126,0,149,176,144,13,244,227,187,64,255,230,200,80,255,231,207, 78,255,225,201,46,255,215,186,17,255,171,137,14,244,166,127,0,81,255,255,255,0, 166,127,0,21,165,126,6,243,202,132,3,214,227,167,51,227,232,180,72,243,195,147, 54,254,156,118,3,212,169,133,5,239,194,156,22,248,196,159,23,253,202,170,38, 253,208,178,40,254,213,185,32,254,209,178,24,252,169,130,3,232,166,127,0,42,255, 255,255,0,168,129,1,156,197,139,7,202,222,150,26,174,228,168,57,197,214,157,52, 223,140,104,3,250,166,127,0,60,166,127,0,180,166,127,0,252,166,127,0,255,166, 127,1,255,166,127,0,255,166,127,0,255,166,127,0,233,166,127,0,42,255,255,255,0, 168,128,1,159,193,136,6,184,219,139,4,137,220,143,11,159,199,130,8,184,142,105, 2,249,255,255,255,0,255,255,255,0,255,255,255,0,199,129,3,1,201,132,4,5,141, 117,22,3,255,255,255,0,255,255,255,0,255,255,255,0,166,127,0,27,173,133,4,239, 208,142,8,108,218,137,0,111,218,137,0,123,162,107,3,171,159,120,1,204,255,255, 255,0,255,255,255,0,255,255,255,0,218,141,4,1,217,148,9,6,174,132,20,5,145,126, 26,1,166,127,0,17,166,127,0,152,167,128,1,235,185,143,8,146,216,150,11,73,217, 143,5,84,218,137,0,95,151,107,4,168,166,127,0,146,255,255,255,0,255,255,255,0, 255,255,255,0,217,148,9,1,215,156,16,1,255,255,255,0,206,165,29,1,184,152,28,4, 177,143,15,19,202,163,29,22,214,164,23,42,215,158,17,52,216,150,11,60,196,135,7, 73,158,119,2,235,166,127,0,51,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,214,162,22,1,255,255,255,0,255,255,255,0,211,181,37,1,211,181,38,4, 212,178,35,10,213,172,30,26,214,165,23,32,215,155,17,29,165,124,5,115,166,127,0, 106,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,209,192,46,1,210,187,42,4, 211,179,36,12,215,171,32,11,201,149,24,12,163,109,5,2,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,215,188,46,1,213,167,25,2, 220,162,23,1,213,128,0,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_undo(idata_undo, 16, 16, 4, 0); static const unsigned char idata_redo[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,140,0,37,1,141,1, 128,7,145,4,189,8,145,6,238,10,146,9,240,15,149,11,193,3,142,2,123,0,140,0,29, 255,255,255,0,255,255,255,0,0,140,0,27,0,140,0,25,255,255,255,0,255,255,255,0,0, 140,0,2,1,141,1,118,4,144,3,245,50,174,41,255,88,196,72,255,134,219,110,255,133, 219,110,255,93,198,78,255,53,174,43,255,5,144,3,247,5,142,3,102,0,140,0,78,2, 142,2,244,3,142,2,219,255,255,255,0,0,140,0,5,1,141,1,198,23,156,17,248,114,215, 94,255,127,223,103,255,127,223,103,255,127,223,103,255,127,223,103,255,127,223, 103,255,127,223,103,255,105,208,88,255,20,154,15,251,4,143,2,249,92,198,76,255, 2,141,1,244,255,255,255,0,0,140,0,131,20,152,16,248,103,214,88,255,101,212,85, 255,102,212,86,255,85,207,73,255,58,198,49,255,60,200,52,255,94,210,84,255,100, 211,84,255,101,212,85,255,102,212,86,255,102,210,88,255,101,209,87,255,2,141,1, 244,0,140,0,51,2,141,2,245,72,194,63,255,77,203,67,255,76,203,67,255,35,190,32, 255,15,176,10,255,16,159,9,254,24,164,17,254,20,181,13,255,20,185,18,255,64,199, 55,255,77,203,67,255,77,203,67,255,80,202,70,255,2,141,1,244,0,140,0,147,25, 153,22,254,56,196,51,255,56,196,51,255,24,187,23,255,14,151,10,253,2,139,1,246, 2,140,1,173,1,140,1,184,2,140,1,244,25,161,16,253,5,181,5,255,51,193,46,255, 56,196,51,255,62,195,54,255,1,141,1,244,1,140,1,207,32,166,27,253,38,189,36, 248,30,187,29,236,18,173,13,221,1,140,1,244,0,140,0,26,255,255,255,0,0,140,0,78, 3,141,1,244,23,175,15,255,18,184,17,255,35,188,34,255,38,189,36,255,39,189,34, 255,1,141,1,244,0,140,0,249,29,180,25,215,22,185,22,196,11,181,11,178,13,153,8, 203,1,141,0,159,255,255,255,0,0,140,0,42,0,140,0,234,57,189,33,250,50,188,32, 254,54,186,36,254,54,184,37,253,51,182,31,253,50,178,29,249,1,140,0,240,0,140,0, 249,15,175,10,176,3,181,3,156,1,180,1,141,11,151,6,184,1,141,0,159,255,255,255, 0,0,140,0,45,0,140,0,237,0,140,0,255,0,140,0,255,0,138,0,248,0,134,0,234,0, 131,0,220,0,127,0,204,0,124,0,104,0,140,0,204,17,157,9,164,0,180,0,121,0,180,0, 108,23,174,12,107,1,134,1,219,0,129,0,21,255,255,255,0,255,255,255,0,255,255, 255,0,67,170,35,4,41,186,21,5,32,183,16,1,255,255,255,0,255,255,255,0,255,255, 255,0,0,124,0,111,16,138,10,149,0,180,0,90,0,180,0,80,10,182,5,69,28,146,15,101, 3,107,2,104,0,100,0,59,0,96,0,8,67,172,36,1,62,183,33,5,27,187,14,8,18,184,9, 1,255,255,255,0,255,255,255,0,255,255,255,0,0,98,0,18,11,111,6,96,19,173,12, 67,8,182,4,55,21,185,11,47,33,188,17,38,66,200,37,16,56,188,31,9,59,183,31,5, 67,196,36,1,255,255,255,0,41,190,22,2,30,187,16,1,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,0,153,0,0,49,165,28,37,19,186,10,34,30,187,16,28,44, 191,23,22,56,194,30,8,65,196,35,4,70,198,37,2,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,12,140,6,2,58,183,32,15,54,195,29,14,52,193,28,10,67,197,35,3,79, 200,42,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,0,191,0,0,54,196,29,2,39,190,20,2,86,206,46,1,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0}; MGL_EXPORT Fl_RGB_Image img_redo(idata_redo, 16, 16, 4, 0); static const unsigned char idata_copy[] = {0,0,0,18,0,0,0,75,0,0,0,76,0,0,0,76,0,0,0,76,0,0,0,76,0,0,0,76,0,0,0,76,0, 0,0,76,0,0,0,76,0,0,0,75,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,255,255,255,255,234,235,235, 255,236,237,237,255,238,238,238,255,239,240,240,255,240,241,241,255,241,242,242, 255,242,242,242,255,242,242,242,255,255,255,255,255,0,0,0,78,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,77,255,255,255,255,237,238,238,255,239,240,240,255,226, 226,226,255,176,176,176,255,176,176,176,255,176,177,177,255,177,177,177,255,177, 177,177,255,184,184,184,255,0,0,0,128,0,0,0,71,0,0,0,71,0,0,0,70,0,0,0,16,0,0,0, 77,255,255,255,255,240,240,240,255,242,243,243,255,177,177,177,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,72,0, 0,0,77,255,255,255,255,243,243,243,255,245,245,245,255,177,178,178,255,255, 255,255,255,235,236,236,255,238,238,238,255,240,240,240,255,242,242,242,255,243, 244,244,255,244,245,245,255,245,245,245,255,245,245,245,255,255,255,255,255,0,0, 0,74,0,0,0,77,255,255,255,255,245,245,245,255,248,248,248,255,179,179,179,255, 255,255,255,255,238,238,238,255,240,241,241,255,243,243,243,255,245,245,245,255, 246,246,246,255,247,248,248,255,248,248,248,255,248,248,248,255,255,255,255,255, 0,0,0,74,0,0,0,77,255,255,255,255,247,247,247,255,250,250,250,255,180,180,180, 255,255,255,255,255,240,240,240,255,243,243,243,255,245,246,246,255,248,248,248, 255,249,249,249,255,250,250,250,255,250,250,250,255,250,250,250,255,255,255,255, 255,0,0,0,74,0,0,0,77,255,255,255,255,249,249,249,255,251,251,251,255,181,181, 181,255,255,255,255,255,242,242,242,255,245,245,245,255,248,248,248,255,250,250, 250,255,251,251,251,255,251,251,251,255,252,252,252,255,252,252,252,255,255,255, 255,255,0,0,0,74,0,0,0,77,255,255,255,255,250,250,250,255,251,251,251,255,181, 181,181,255,255,255,255,255,244,244,244,255,247,247,247,255,250,250,250,255,251, 251,251,255,252,252,252,255,252,252,252,255,253,253,253,255,253,253,253,255,255, 255,255,255,0,0,0,74,0,0,0,77,255,255,255,255,250,250,250,255,252,252,252,255, 181,181,181,255,255,255,255,255,245,246,246,255,249,249,249,255,251,251,251,255, 252,252,252,255,248,248,248,255,228,228,228,255,234,234,233,255,243,243,243,255, 241,243,244,254,0,0,0,70,0,0,0,75,251,251,251,254,255,255,255,255,255,255,255, 255,183,183,183,255,255,255,255,255,247,247,247,255,250,250,250,255,251,251,251, 255,253,253,253,255,228,228,228,255,254,254,254,255,254,254,254,255,244,244,243, 255,111,111,111,185,0,0,0,20,0,0,0,20,0,0,0,93,0,0,0,98,0,0,0,98,0,0,0,142,255, 255,255,255,248,248,248,255,250,250,250,255,252,252,252,255,253,253,253,255,231, 232,231,255,254,254,254,255,243,243,243,255,108,109,108,203,0,0,0,52,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,255,255,255,255,249,249,249,255,251, 251,251,255,252,252,252,255,254,254,254,255,234,235,234,255,243,243,243,255,115, 115,114,208,0,0,0,78,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70, 251,251,251,254,255,255,255,255,255,255,255,255,255,255,255,255,250,252,253,255, 230,234,235,255,121,122,121,206,0,0,0,71,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,87,0,0,0,91,0,0,0,91,0,0,0,91,0,0,0,91,0,0,0, 90,0,0,0,40,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_copy(idata_copy, 16, 16, 4, 0); static const unsigned char idata_paste[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,227,227,227,255,218,218,218,255,218,218, 218,255,230,230,230,255,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,37,37,37,65,58,58,58,248,12,12,12,255,213,213,213,255,133,133,133, 254,255,255,255,255,255,255,255,255,132,132,132,254,213,213,213,255,7,7,7,255, 59,59,59,244,43,43,43,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,233,75,75,75, 254,20,20,20,255,255,255,255,255,243,243,243,255,236,236,236,255,236,236,236, 255,243,243,243,255,255,255,255,255,31,31,31,255,74,74,74,254,37,37,37,249,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,35,35,255,38,38,38,255,204,204,204,255,175,175, 175,255,176,176,176,255,176,176,176,255,176,176,176,255,176,176,176,255,176,176, 176,255,206,206,206,255,26,26,26,255,34,34,34,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,34,34,34,255,34,34,34,255,255,255,255,255,243,243,243,255,245,245,245,255, 246,246,246,255,228,228,228,255,182,182,182,255,182,182,182,255,205,205,205,255, 7,7,7,255,17,17,17,255,0,0,0,97,0,0,0,106,0,0,0,106,1,1,1,66,31,31,31,255,37, 37,37,255,255,255,255,255,240,240,240,255,242,242,242,255,243,243,243,255,174, 174,174,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,111,30,30,30, 255,37,37,37,255,255,255,255,255,241,241,241,255,243,243,243,255,245,245,245, 255,176,176,176,255,255,255,255,255,221,222,223,255,226,227,227,255,229,230,231, 255,232,233,233,255,234,235,235,255,235,236,236,255,248,249,249,255,0,0,0,111, 27,27,27,255,38,38,38,255,255,255,255,255,241,241,241,255,244,244,244,255,245, 245,245,255,177,177,177,255,255,255,255,255,227,229,229,255,233,234,234,255,236, 237,237,255,238,239,239,255,240,241,241,255,241,242,242,255,255,255,255,255,0,0, 0,111,23,23,23,255,38,38,38,255,255,255,255,255,243,243,243,255,244,244,244, 255,246,246,246,255,179,179,179,255,255,255,255,255,233,234,234,255,237,238,238, 255,240,241,241,255,243,243,243,255,245,245,245,255,246,246,246,255,255,255,255, 255,0,0,0,111,22,22,22,255,37,37,37,255,255,255,255,255,243,243,243,255,245,245, 245,255,248,248,248,255,181,181,181,255,255,255,255,255,237,237,237,255,241,241, 241,255,244,244,244,255,247,247,247,255,249,249,249,255,250,250,250,255,255,255, 255,255,0,0,0,111,24,24,24,255,36,36,36,255,255,255,255,255,244,244,244,255,246, 246,246,255,249,249,249,255,182,182,182,255,255,255,255,255,240,241,241,255,244, 245,245,255,248,248,248,255,251,251,251,255,253,253,253,255,254,254,254,255,255, 255,255,255,0,0,0,111,28,28,28,255,33,33,33,255,255,255,255,255,243,243,243,255, 246,246,246,255,250,250,250,255,183,183,183,255,255,255,255,255,242,243,243,255, 247,247,247,255,225,225,225,255,179,180,179,255,179,179,179,255,184,184,184,255, 218,218,218,255,0,0,0,112,35,35,35,255,30,30,30,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,197,197,197,255,255,255,255,255,244,245,245, 255,250,250,250,255,222,222,222,255,202,202,202,255,255,255,255,254,255,255,255, 255,102,103,102,225,0,0,0,49,39,39,39,255,57,57,57,255,49,49,49,255,62,62,62, 255,69,69,69,255,73,73,73,255,40,40,40,255,255,255,255,255,246,246,246,255,251, 251,251,255,220,220,221,255,200,200,200,255,252,252,251,255,76,77,76,216,0,0,0, 49,0,0,0,0,104,109,109,247,46,46,46,255,50,50,50,255,49,49,49,255,48,48,48,255, 49,49,49,255,22,22,22,255,255,255,255,255,255,255,255,255,255,255,255,255,227, 229,229,255,187,187,187,255,53,53,53,215,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,111,0,0,0,110,0,0,0,110,0,0, 0,110,0,0,0,110,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_paste(idata_paste, 16, 16, 4, 0); static const unsigned char idata_find[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,0,0,0,98,0,0,0,204,0,0,0,129,255,255,255,0, 255,255,255,0,0,0,0,129,0,0,0,204,0,0,0,98,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,25,31,31,31, 252,106,106,106,255,36,36,36,255,0,0,0,41,0,0,0,38,36,36,36,255,106,106,106,255, 31,31,31,252,0,0,0,25,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,0,0,0,71,0,0,0,209,44,44,44,255,45,45,45,255,22,22,22,255,18,18, 18,246,18,18,18,246,22,22,22,255,43,43,43,255,44,44,44,255,0,0,0,209,0,0,0,71, 255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,36,27,27,27,251,115,115,115,255, 43,43,43,255,74,74,74,255,23,23,23,255,105,105,105,255,86,86,86,255,23,23,23, 255,74,74,74,255,43,43,43,255,115,115,115,255,27,27,27,251,0,0,0,36,255,255,255, 0,255,255,255,0,0,0,0,165,54,54,54,255,77,77,77,255,105,105,105,255,50,50,50, 255,78,78,78,255,19,19,19,255,1,1,1,255,77,77,77,255,50,50,50,255,105,105,105, 255,77,77,77,255,54,54,54,255,0,0,0,165,255,255,255,0,0,0,0,71,21,21,21,255,104, 104,104,255,129,126,125,255,120,120,120,255,35,35,35,255,39,39,39,255,24,24,24, 255,24,24,24,255,39,39,39,255,35,35,35,255,120,120,120,255,129,126,125,255,104, 104,104,255,21,21,21,255,0,0,0,71,0,0,0,190,85,83,82,255,54,42,36,255,56,40,31, 255,89,72,61,255,114,112,111,255,28,28,28,255,40,40,40,255,40,40,40,255,27,27, 27,255,114,112,111,255,89,72,61,255,56,40,31,255,54,42,36,255,85,83,82,255,0,0, 0,190,10,10,10,236,60,48,40,255,83,51,28,255,144,97,61,255,135,91,59,255,104, 88,77,255,23,23,23,255,1,1,1,207,1,1,1,207,23,23,23,255,104,88,77,255,132,87, 52,255,145,98,63,255,83,51,28,255,57,44,37,255,4,4,4,235,0,0,0,237,54,40,31, 255,72,33,0,255,134,67,11,255,144,73,11,255,118,98,82,255,14,14,14,246,0,0,0,19, 0,0,0,19,14,14,14,246,118,98,82,255,144,73,11,255,132,64,7,255,78,41,9,255,54, 40,30,255,0,0,0,237,0,0,0,142,38,37,35,255,105,87,70,255,149,114,84,255,171, 145,122,255,69,66,64,255,0,0,0,147,255,255,255,0,255,255,255,0,0,0,0,147,69,66, 64,255,171,145,122,255,149,114,84,255,105,87,70,255,38,37,35,255,0,0,0,142,0,0, 0,8,0,0,0,152,17,17,17,243,52,50,49,255,11,11,11,244,0,0,0,157,0,0,0,10,255, 255,255,0,255,255,255,0,0,0,0,10,0,0,0,157,11,11,11,244,52,50,49,255,16,16,16, 243,0,0,0,152,0,0,0,8,255,255,255,0,255,255,255,0,0,0,0,1,0,0,0,20,0,0,0,1,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 0,0,0,1,0,0,0,20,0,0,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_find(idata_find, 16, 16, 4, 0); static const unsigned char idata_prop[] = {0,0,0,0,153,153,153,172,129,129,129,255,129,129,129,255,129,129,129,255, 129,129,129,255,129,129,129,255,129,129,129,255,129,129,129,255,129,129,129,255, 129,129,129,255,129,129,129,255,129,129,129,255,129,129,129,255,129,129,129,86, 0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,129,129, 255,0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,236,236,236,255,234,234,234, 255,234,234,234,255,235,235,235,255,235,235,235,255,235,235,235,255,236,236,236, 255,236,236,236,255,237,237,237,255,240,240,240,255,255,255,255,255,129,129,129, 255,0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,234,234,234,255,196,196,196, 255,197,197,197,255,197,197,197,255,198,198,198,255,198,198,198,255,198,198,198, 255,198,198,198,255,199,199,199,255,240,240,240,255,255,255,255,255,129,129,129, 255,0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,234,234,234,255,235,235,235, 255,235,235,235,255,105,105,105,255,105,105,105,255,105,105,105,255,210,210,210, 255,237,237,237,255,238,238,238,255,240,240,240,255,255,255,255,255,129,129,129, 255,0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,235,235,235,255,197,197,197, 255,198,198,198,255,176,176,176,255,88,88,88,255,88,88,88,255,88,88,88,255,198, 198,198,255,199,199,199,255,240,240,240,255,255,255,255,255,129,129,129,255,0,0, 0,0,0,0,0,0,129,129,129,255,255,255,255,255,235,235,235,255,105,105,105,255, 210,210,210,255,236,236,236,255,210,210,210,255,105,105,105,255,105,105,102,255, 236,236,236,255,238,238,238,255,240,240,240,255,255,255,255,255,129,129,129,255, 0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,235,235,235,255,88,88,88,255, 88,88,88,255,176,176,176,255,88,88,88,255,106,106,106,255,106,106,106,255,210, 210,204,255,238,238,238,255,240,240,240,255,255,255,255,255,129,129,129,255,0,0, 0,0,0,0,0,0,129,129,129,255,255,255,255,255,236,236,236,255,105,105,105,255, 105,105,105,255,105,105,105,255,106,106,106,255,106,106,106,255,106,106,106,255, 106,106,106,255,214,214,214,255,240,240,240,255,255,255,255,255,129,129,129,255, 0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,236,236,236,255,176,176,176, 255,88,88,88,255,88,88,88,255,88,88,88,255,88,88,88,255,89,89,89,255,98,98,98, 255,108,108,108,255,220,220,220,255,255,255,255,255,129,129,129,255,0,0,0,0,0,0, 0,0,129,129,129,255,255,255,255,255,236,236,236,255,237,237,237,255,238,238, 238,255,238,238,238,255,239,239,239,255,212,212,212,255,119,119,119,255,133,133, 133,255,144,144,144,255,157,157,157,255,255,255,255,255,129,129,129,255,0,0,0,0, 0,0,0,0,129,129,129,255,255,255,255,255,237,237,237,255,198,198,198,255,199, 199,199,255,199,199,199,255,200,200,200,255,200,200,200,255,181,181,181,255,146, 146,146,255,158,158,158,255,171,171,171,255,255,255,255,255,129,129,129,255,0,0, 0,0,0,0,0,0,129,129,129,255,255,255,255,255,237,237,237,255,237,237,237,255, 238,238,238,255,239,239,239,255,239,239,239,255,240,240,240,255,240,240,240,255, 224,224,224,255,173,173,173,255,186,186,186,255,255,255,255,255,129,129,129,255, 0,0,0,0,0,0,0,0,129,129,129,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,129,129,129, 255,0,0,0,0,0,0,0,0,149,149,149,180,129,129,129,255,129,129,129,255,129,129,129, 255,129,129,129,255,129,129,129,255,129,129,129,255,129,129,129,255,129,129,129, 255,129,129,129,255,129,129,129,255,129,129,129,255,129,129,129,255,149,149,149, 168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_prop(idata_prop, 16, 16, 4, 0); static const unsigned char idata_alpha[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,101,107,40,57,81,85,160,58,81, 85,153,58,81,85,153,56,79,84,160,81,111,117,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,76,106,113,219,104,146,156,254,184, 255,255,255,177,249,255,255,177,249,255,255,183,255,255,255,107,147,156,254,17, 63,74,171,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,76,81,75,124,173, 185,255,180,252,255,254,132,186,200,255,81,88,91,255,120,136,140,255,121,137, 141,255,77,77,77,255,23,176,214,254,44,224,255,255,29,153,184,250,9,48,57,62,0, 0,0,4,0,0,0,0,0,0,0,8,31,40,43,141,161,226,243,253,171,240,255,255,172,242, 255,255,101,129,135,255,225,255,255,255,215,248,255,255,215,249,255,255,215,247, 255,255,66,132,148,255,40,214,255,255,42,214,255,255,38,195,234,250,26,136,162, 186,0,0,0,12,0,0,0,10,52,105,116,225,123,184,198,254,159,222,238,255,151,212, 227,255,194,226,233,255,214,248,255,255,215,248,255,255,215,248,255,255,214,248, 255,255,197,230,237,255,45,183,218,255,42,209,251,255,35,191,230,254,11,106,129, 249,0,44,55,38,0,0,0,0,6,20,24,74,66,176,204,255,77,176,200,254,58,87,92,255, 123,135,138,255,125,138,142,255,125,138,142,255,125,138,142,255,125,138,142,255, 125,138,141,255,59,74,78,255,5,134,165,255,0,190,237,255,0,90,112,172,6,0,0,0,0, 0,0,0,0,0,0,0,49,127,147,138,86,223,255,255,71,174,199,255,122,221,246,255, 129,236,255,255,129,236,255,255,129,236,255,255,129,236,255,255,132,240,255,255, 47,126,144,255,0,219,255,255,0,148,185,255,0,0,0,19,0,0,0,0,0,0,0,0,38,99,115, 0,0,0,0,16,63,164,188,232,76,197,228,254,114,209,231,255,127,228,254,255,128, 229,255,255,128,229,255,255,128,229,255,255,120,209,232,255,14,171,209,255,0, 187,234,255,0,86,107,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,38,44,111,81, 212,244,255,58,120,136,254,133,238,255,255,127,228,254,255,128,229,255,255,128, 229,255,255,96,192,216,255,0,183,230,255,0,150,187,215,0,0,0,15,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,81,213,245,0,0,0,0,0,33,87,100,194,63,167,192,255,112,198,220, 255,128,229,255,255,128,229,255,255,131,236,255,255,55,133,153,254,0,177,222, 255,0,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,23,27,23, 74,197,228,243,68,123,137,254,130,232,255,255,128,229,255,255,132,228,253,255, 0,118,150,255,0,85,106,181,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,10,26,30,130,79,197,226,255,117,209,232,255,129,231,255, 255,89,139,152,254,0,177,223,244,0,0,0,27,0,56,71,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,92,105,241,107,196,218,255,130, 230,255,254,20,128,153,255,0,40,48,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,55,64,49,44,91,101,251,116, 214,240,255,7,79,97,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,19,53,63,182,103,184,201,251, 6,0,0,26,0,63,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,25,28,144,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_alpha(idata_alpha, 16, 16, 4, 0); static const unsigned char idata_light[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,36,0,242,236,7,1, 252,199,57,2,204,204,0,0,248,246,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,230,7,2,0,0,0,0,254,201,68,7,253,218,31,9, 253,207,49,17,255,200,59,4,251,234,19,12,255,230,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,255,246,0,0,255,204,38,1,254,218,34,13,253,207,37,19, 254,199,43,40,253,204,30,62,253,203,33,68,254,200,42,51,253,220,20,23,253,199, 68,8,255,200,69,4,252,214,35,1,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,250,203,62, 3,251,213,35,18,254,196,48,44,253,204,26,107,240,182,37,162,240,188,75,212, 240,189,79,211,241,185,49,188,250,198,22,99,254,199,36,38,254,204,57,27,251,215, 38,7,255,247,0,0,0,0,0,0,0,0,0,0,255,248,0,1,254,238,15,10,254,198,50,48,248, 193,26,135,235,176,68,232,244,210,126,255,246,219,125,255,246,220,125,255,245, 215,127,255,237,188,89,239,245,186,25,153,254,203,41,62,251,228,20,15,248,240,0, 2,0,0,0,0,0,0,0,0,255,197,62,3,254,193,54,14,254,207,22,81,230,154,14,226,243, 207,91,255,247,223,99,255,249,230,104,255,249,231,105,255,248,226,101,255,244, 213,93,255,232,166,32,242,250,205,15,97,252,226,9,17,252,220,39,13,249,247,6,1, 255,255,64,0,253,201,67,6,254,195,55,43,243,181,24,155,231,160,3,255,245,214,60, 255,249,231,78,255,251,238,82,255,251,238,83,255,250,234,80,255,247,222,69,255, 236,182,14,255,237,172,14,182,254,195,52,63,254,198,69,18,253,197,51,2,255,255, 0,0,253,225,22,5,253,206,30,39,235,164,11,174,236,178,6,255,245,217,28,255, 250,235,46,255,252,242,54,255,252,243,55,255,251,237,49,255,247,224,33,255,240, 195,13,255,233,164,9,205,254,198,39,54,251,196,58,3,255,0,0,0,252,196,86,1,253, 198,66,13,254,202,43,50,236,168,12,172,236,179,6,255,246,219,28,255,250,236,44, 255,253,246,63,255,253,249,66,255,251,240,49,255,248,225,33,255,240,196,13,255, 234,167,11,206,253,194,46,65,253,187,70,17,251,181,61,3,255,255,0,1,252,233,18, 9,253,210,41,40,247,193,25,144,231,162,3,253,244,210,24,255,250,236,75,255, 253,247,114,255,253,248,117,255,251,240,84,255,246,219,34,255,236,181,7,255,240, 180,20,176,254,211,37,68,253,223,35,20,253,248,0,3,248,248,3,1,253,225,30,13, 254,206,48,21,254,199,36,63,232,161,8,194,237,184,11,255,248,226,80,255,253,246, 150,255,253,247,155,255,249,232,93,255,240,198,21,255,231,164,7,222,253,202,31, 97,253,205,50,39,252,218,41,16,248,235,15,3,0,0,0,0,255,128,0,0,254,201,66,3, 254,194,51,21,252,198,39,114,233,165,8,195,233,173,17,253,242,204,61,255,243, 208,66,255,236,182,24,254,232,167,7,213,250,192,36,123,254,191,58,51,252,212,42, 6,251,229,23,7,255,255,0,0,0,0,0,0,0,0,0,0,255,203,80,2,254,204,61,24,253,208, 39,28,254,205,32,72,247,195,24,131,237,171,19,171,236,170,16,166,245,190,26, 154,254,204,36,103,255,192,53,35,254,195,68,20,253,196,65,7,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,255,204,82,0,255,236,19,2,253,218,40,6,252,221,28,20,254,200,54, 47,254,193,56,45,254,191,46,35,254,206,49,57,253,206,44,36,254,216,46,15,255, 186,57,2,255,219,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,236, 13,3,251,231,17,8,254,198,66,7,254,198,74,9,255,188,53,2,254,223,34,17,250,214, 41,12,252,233,28,6,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,251,243,0,1,255,210,78,1,255,170,85,0,0,0,0,0,247,238,5,2,255, 255,0,0,255,255,0,0,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_light(idata_light, 16, 16, 4, 0); static const unsigned char idata_grid[] = {0,0,0,0,21,21,21,11,0,0,0,51,0,0,0,50,0,0,0,50,0,0,0,50,0,0,0,50,0,0,0,50, 0,0,0,50,0,0,0,50,0,0,0,50,0,0,0,50,0,0,0,50,0,0,0,51,21,21,21,11,0,0,0,0,0,0, 0,0,0,0,0,63,255,255,255,255,255,255,255,255,244,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,244,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,244,255,255,255,255,255,255,255,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0, 62,255,255,255,255,225,224,220,255,170,199,233,255,223,223,224,255,224,225,226, 255,232,229,227,255,174,203,236,255,230,231,231,255,231,232,232,255,238,237,232, 255,176,206,238,255,255,255,255,255,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,62,255,255, 255,255,236,231,226,255,223,232,243,255,237,235,232,255,236,234,230,255,246,241, 235,255,226,237,247,255,245,242,238,255,243,240,237,255,251,245,240,255,228,237, 246,255,255,255,255,255,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,61,244,255,255,255,220, 230,241,255,0,98,255,255,226,235,244,255,178,207,239,255,227,237,246,255,0,98, 255,255,229,238,247,255,183,212,243,255,230,238,248,255,0,97,255,255,250,255, 255,255,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,61,255,255,255,255,235,232,230,255,226, 235,244,255,239,238,236,255,237,237,237,255,246,243,239,255,229,238,248,255,245, 244,242,255,242,242,242,255,251,248,244,255,231,240,250,255,255,255,255,255,0,0, 0,62,0,0,0,0,0,0,0,0,0,0,0,61,255,255,255,255,234,232,228,255,179,208,240,255, 236,236,236,255,238,239,239,255,246,242,239,255,184,213,245,255,244,243,243,255, 244,244,244,255,252,249,245,255,187,215,248,255,255,255,255,255,0,0,0,62,0,0,0, 0,0,0,0,0,0,0,0,61,255,255,255,255,243,240,233,255,227,237,247,255,246,244, 240,255,246,243,240,255,255,248,243,255,231,240,250,255,254,250,246,255,254,251, 246,255,255,255,248,255,233,242,252,255,255,255,255,255,0,0,0,62,0,0,0,0,0,0,0, 0,0,0,0,61,244,255,255,255,225,235,245,255,0,98,255,255,230,238,248,255,184, 213,245,255,231,240,250,255,0,97,255,255,233,242,252,255,189,217,250,255,234, 243,252,255,0,96,255,255,250,255,255,255,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,61,255, 255,255,255,243,240,236,255,229,238,248,255,246,245,243,255,244,244,244,255,255, 250,246,255,233,242,252,255,253,252,250,255,251,250,250,255,255,255,251,255,235, 243,253,255,255,255,255,255,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,61,255,255,255,255, 243,240,236,255,183,212,244,255,244,243,243,255,244,245,245,255,254,252,247,255, 190,218,251,255,251,250,250,255,251,251,251,255,255,255,252,255,193,221,253,255, 255,255,255,255,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,61,255,255,255,255,250,246,239, 255,230,239,249,255,252,249,245,255,253,251,246,255,255,255,249,255,234,243,253, 255,255,255,251,255,255,255,252,255,255,255,253,255,236,244,254,255,255,255,255, 255,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,61,243,255,255,255,228,237,247,255,0,97,255, 255,232,241,251,255,189,218,249,255,234,243,252,255,0,96,255,255,235,244,254, 255,193,221,253,255,236,244,254,255,0,96,255,255,250,255,255,255,0,0,0,62,0,0,0, 0,0,0,0,0,0,0,0,61,255,255,255,255,246,244,240,255,231,239,250,255,250,248, 246,255,249,248,248,255,255,254,250,255,235,243,253,255,255,254,253,255,254,254, 253,255,255,255,254,255,233,241,251,255,255,255,255,255,0,0,0,62,0,0,0,0,0,0,0, 0,0,0,0,62,255,255,255,255,255,255,255,255,211,240,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,210,239,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,209,239,255,255,255,255,255,255,0,0,0,63,0,0,0,0,0,0,0,0,16,16, 16,15,0,0,0,64,0,0,0,62,0,0,0,62,0,0,0,62,0,0,0,62,0,0,0,62,0,0,0,62,0,0,0,62, 0,0,0,62,0,0,0,61,0,0,0,61,0,0,0,62,16,16,16,13,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_grid(idata_grid, 16, 16, 4, 0); static const unsigned char idata_move[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,6,5,0,8,9,8,1,10,11,10,0,7,7,7,67,7,7,7, 89,13,14,13,0,10,10,10,2,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,1,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,4,100,101,100,206,114,114,114, 243,0,0,0,30,0,0,0,0,0,0,0,1,1,1,1,0,2,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,42,43,42,0,45,46,45,2,21,22,22,0,12,12,12,113,190,192,188,255,223,225, 221,255,45,45,45,170,220,221,220,0,251,253,250,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,33,35,33,0,21,22,21,0,0,0,0,3,0,0,0,0,0,0,0,35,126,127,124,239,236, 239,232,254,233,237,230,249,165,166,164,255,0,0,0,95,0,0,0,0,20,21,19,5,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,51,50,2,17,18,17,2,0,0,0,0,0,0,0,64,70,72, 69,235,185,187,183,253,216,218,215,255,102,103,101,241,13,14,13,106,23,24,23,0, 33,35,33,2,87,87,87,1,13,13,13,2,39,40,39,0,16,17,16,1,41,42,41,2,10,10,10,0,4, 4,4,61,7,7,7,93,0,0,0,0,0,0,0,11,51,51,50,145,71,72,71,172,0,0,0,24,0,0,0,0, 11,11,11,69,12,12,12,114,0,0,0,1,0,0,0,0,19,19,19,2,0,0,0,0,0,0,0,8,18,19,18, 133,139,140,138,253,105,107,105,235,0,0,0,26,0,0,0,0,0,0,0,37,0,0,0,73,181,183, 179,3,255,255,255,0,68,69,68,187,165,167,164,255,63,64,63,195,0,0,0,45,0,0,0,0, 0,0,0,57,90,90,90,219,196,198,194,255,246,249,244,250,220,221,219,255,68,69, 68,179,0,0,0,17,101,103,100,228,163,165,162,255,22,23,22,112,18,19,19,112,184, 185,183,255,242,245,239,248,224,227,222,255,138,139,138,252,12,13,12,131,0,0,0, 67,100,101,100,229,202,204,200,255,238,241,235,251,211,213,210,255,62,63,62, 181,0,0,0,20,108,110,108,231,172,174,170,255,24,25,24,119,2,3,2,93,157,159,156, 255,243,246,239,251,206,208,203,255,130,130,129,237,12,13,12,112,0,0,0,0,0,0,0, 11,25,26,25,132,139,141,137,248,95,97,94,242,0,0,0,33,0,0,0,0,0,0,0,47,0,0,0, 88,94,96,93,4,251,255,248,0,52,53,52,183,136,138,135,255,47,48,47,155,0,0,0,23, 0,0,0,0,16,16,16,1,38,38,38,2,10,11,10,0,4,5,4,49,8,8,8,96,0,0,0,0,0,0,0,19, 58,58,58,160,82,82,82,186,0,0,0,34,0,0,0,0,4,5,4,54,2,2,2,65,8,8,8,0,60,61,60, 1,33,34,33,2,0,0,0,0,0,0,0,0,64,65,64,2,20,21,20,2,0,0,0,0,0,0,0,69,79,81,78, 246,195,197,194,254,224,226,222,254,113,114,112,251,13,14,13,116,24,25,24,0,45, 47,45,2,78,79,78,2,0,0,0,1,0,0,0,0,98,104,97,0,29,31,29,0,21,22,21,0,0,0,0,3,0, 0,0,0,0,0,0,28,121,123,120,232,233,236,230,255,232,236,229,249,160,161,159, 255,0,0,0,85,0,0,0,0,8,9,8,4,24,26,24,0,59,63,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,32,33,32,0,33,34,33,2,6,7,7,0,3,3,3,104,186,187,184,255,220,221,218,255, 36,37,37,160,132,133,132,0,160,162,160,1,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,2,1,0,18,23,18,0,0,0,0,0,255,255,255,0,0,0,0,0,92,93,92,199, 104,104,104,237,0,0,0,23,0,0,0,0,0,0,0,1,0,0,0,0,3,4,3,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,4,4,4,1,4,5,4,0,3,3,3,56,3,3,3,75,6,6,6,0,4, 5,4,1,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_move(idata_move, 16, 16, 4, 0); static const unsigned char idata_orig[] = {0,0,0,0,0,0,0,0,0,0,0,0,236,236,236,46,233,233,231,171,179,182,185,231,161, 165,170,246,175,178,181,222,205,205,202,157,197,196,195,24,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,243,240,135,168,173,182,255, 163,174,186,237,226,233,241,240,243,249,255,238,207,217,230,233,151,163,183,231, 150,155,161,255,177,178,173,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 236,236,232,112,154,164,179,245,221,232,245,232,228,237,249,225,228,238,249,219, 227,237,249,215,225,236,250,213,219,232,249,214,198,215,237,219,140,148,157,251, 175,175,172,64,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,205,208,208,5,181,186,192, 252,198,212,234,222,218,231,247,211,236,249,255,195,226,239,251,190,226,240,251, 183,224,240,250,180,231,249,255,176,209,226,246,196,160,183,216,207,185,187,189, 233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,207,207,204,101,149,166,188,229,204,222,245, 204,233,250,255,177,51,73,104,255,250,255,255,147,250,255,255,135,255,255,255, 128,53,74,105,255,245,255,255,181,196,218,246,189,127,143,164,231,124,125,119, 55,0,0,0,0,0,0,0,0,0,0,0,0,197,196,191,156,106,138,187,195,195,218,247,178,137, 160,180,184,106,132,168,245,255,255,255,101,61,82,111,232,126,153,168,129,102, 130,166,239,216,255,255,87,164,203,242,139,103,130,168,201,106,107,99,110,0,0,0, 0,0,0,0,0,0,0,0,0,184,183,178,158,92,132,188,184,114,169,230,125,254,255,255, 176,93,121,157,238,211,255,255,31,255,255,255,141,255,255,255,148,94,122,159, 236,214,255,255,47,161,209,245,111,114,142,178,197,93,92,84,113,0,0,0,0,0,0,0,0, 0,0,0,0,169,169,164,112,111,139,180,203,124,176,232,133,173,243,255,68,97,124, 159,244,255,255,255,19,50,72,102,219,0,0,0,0,100,127,164,243,227,255,255,39,182, 222,249,119,110,128,150,221,81,83,77,61,0,0,0,0,0,0,0,0,0,0,0,0,137,138,137,13, 147,156,168,248,145,185,233,163,179,235,255,87,91,118,154,248,243,255,255,18, 255,255,255,151,0,0,0,0,95,121,159,247,244,255,255,51,176,213,253,146,100,105, 106,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,199,195,136,174,192,214,223, 135,187,239,125,255,255,255,168,179,245,251,38,176,249,255,14,0,136,184,1,255, 255,255,158,214,244,255,119,125,140,156,225,78,78,72,84,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,136,137,134,0,0,0,0,0,146,146,140,170,102,123,146,221,118,174,237,128, 179,231,255,91,215,255,255,75,225,255,255,86,186,221,251,127,117,129,141,231, 126,126,121,235,121,123,120,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,118, 115,0,0,0,0,0,101,102,96,76,91,92,88,207,93,103,112,245,100,112,125,233,99,107, 114,246,93,94,88,193,56,57,51,39,205,205,205,208,191,191,190,255,104,107,102,89, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,89,83,0,0,0,0,0,0,0,0,0,85, 87,83,11,0,0,0,0,0,0,0,0,122,123,122,0,87,87,87,36,216,217,216,255,173,174,171, 255,93,94,91,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,115,115,69,223,224,223,255,158, 159,156,255,72,74,71,23,102,104,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,134,134,110,226,227, 226,255,145,147,144,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,156,156,142,204, 205,204,241,56,59,55,9}; MGL_EXPORT Fl_RGB_Image img_orig(idata_orig, 16, 16, 4, 0); static const unsigned char idata_update[] = {255,255,255,0,255,255,255,0,255,255,255,0,52,101,164,29,58,105,167,159,58, 106,167,222,54,103,165,246,57,105,167,229,58,106,167,188,52,101,164,83,52,101, 164,5,255,255,255,0,255,255,255,0,255,255,255,0,52,101,164,121,52,101,164,16, 255,255,255,0,255,255,255,0,53,101,164,80,56,104,166,246,104,144,192,250,143, 176,211,255,168,194,223,255,168,193,222,255,147,177,212,255,95,135,185,244,55, 103,165,240,52,101,164,88,255,255,255,0,53,102,164,102,52,101,164,255,52,101, 164,15,255,255,255,0,52,101,164,41,57,105,166,245,140,173,211,255,157,189,220, 255,161,190,221,255,180,203,229,255,191,211,233,255,204,221,238,255,213,226,240, 255,191,210,231,255,75,119,175,245,54,103,165,192,67,113,171,247,53,102,164,252, 52,101,164,14,255,255,255,0,57,105,167,155,105,144,192,253,114,152,197,255,60, 107,168,255,53,102,164,255,58,106,167,252,93,133,183,243,161,187,217,254,216, 228,241,255,219,230,242,255,221,232,243,255,136,167,206,253,200,216,234,255,58, 106,167,249,52,101,164,13,255,255,255,0,56,104,166,243,65,112,171,255,60,108, 169,254,58,106,167,245,52,101,164,117,52,101,164,25,52,101,164,69,56,105,166, 205,97,136,185,245,205,219,235,255,226,235,245,255,230,238,246,255,230,238,246, 255,58,106,167,250,52,101,164,11,255,255,255,0,53,101,164,254,58,106,167,251, 104,145,199,157,55,103,165,230,52,101,164,35,255,255,255,0,255,255,255,0,255, 255,255,0,52,101,164,96,53,102,164,255,199,215,233,255,198,216,235,255,227,236, 245,255,58,106,166,250,52,101,164,10,255,255,255,0,52,101,164,252,76,121,179, 126,118,157,207,43,87,131,187,19,52,101,164,2,255,255,255,0,255,255,255,0,52, 101,164,4,56,104,166,196,143,172,208,250,231,238,246,255,219,230,242,255,230, 238,246,255,58,106,166,251,52,101,164,9,255,255,255,0,52,101,164,13,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,52, 101,164,160,52,101,164,255,71,116,173,248,76,119,175,247,76,119,175,247,76,120, 175,247,52,101,164,255,52,101,164,8,255,255,255,0,52,101,164,249,52,101,164,254, 52,101,164,254,52,101,164,253,52,101,164,252,52,101,164,251,52,101,164,185,52, 101,164,29,52,101,164,24,52,101,164,24,52,101,164,24,52,101,164,24,52,101,164, 24,52,101,164,28,255,255,255,0,255,255,255,0,52,101,164,252,229,237,245,255, 229,237,246,255,228,236,245,255,156,183,215,253,55,104,166,224,52,101,164,16, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,126,164,213,26,114,153, 205,57,52,101,164,252,52,101,164,12,255,255,255,0,53,102,164,252,230,238,246, 255,196,215,235,255,201,217,234,255,52,101,164,254,52,101,164,106,255,255,255,0, 255,255,255,0,255,255,255,0,52,101,164,11,53,102,165,233,108,149,201,141,83,127, 183,194,52,101,164,255,52,101,164,5,255,255,255,0,55,103,165,253,230,238,246, 255,227,236,245,255,228,237,245,255,193,210,230,255,77,121,176,245,56,105,166, 202,52,101,164,54,255,255,255,0,52,101,164,106,60,107,169,237,79,124,182,255,58, 106,167,254,55,104,165,250,255,255,255,0,255,255,255,0,56,104,166,253,216,228, 241,255,149,178,212,254,224,233,244,255,221,232,243,255,204,220,237,255,143,173, 210,254,76,120,176,245,53,102,165,251,57,105,166,255,57,105,166,254,61,109,169, 255,76,120,176,255,58,106,167,168,255,255,255,0,255,255,255,0,55,103,165,254,91, 132,183,247,54,103,165,212,78,122,177,244,180,202,227,255,201,218,236,255,188, 209,231,255,176,201,227,255,160,190,222,255,136,171,210,255,130,165,206,255,142, 174,211,255,56,104,166,245,52,101,164,42,255,255,255,0,255,255,255,0,52,101,164, 255,54,103,165,147,255,255,255,0,52,101,164,84,55,103,166,238,85,128,181,243, 132,166,206,255,151,182,216,255,153,185,219,255,138,172,211,255,109,148,194,252, 56,104,166,246,53,102,164,91,255,255,255,0,255,255,255,0,255,255,255,0,52,101, 164,162,52,101,164,1,255,255,255,0,255,255,255,0,52,101,164,5,52,101,164,83,58, 106,167,190,56,105,166,233,53,102,164,250,58,106,167,228,59,107,167,170,52,101, 164,36,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_update(idata_update, 16, 16, 4, 0); static const unsigned char idata_stop[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,222,0,0,46,205,0,0,214,211,36, 36,225,218,72,72,230,223,95,95,233,218,72,72,230,212,32,32,217,222,0,0,46,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,222,0,0,46,201,30,30,243,226,164,163,255,233,182,181,255,234,183, 183,255,234,185,185,255,233,181,180,255,227,167,167,255,201,30,30,243,222,0,0, 46,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,222,0, 0,46,193,28,27,243,224,154,154,255,230,143,142,255,229,140,139,255,229,136, 135,255,227,133,132,255,225,128,127,255,222,126,125,255,221,144,144,255,193,27, 26,243,222,0,0,46,255,255,255,0,255,255,255,0,255,255,255,0,222,0,0,46,189,24, 23,244,224,157,155,255,227,134,133,255,231,140,139,255,232,137,136,255,230,122, 121,255,230,119,118,255,229,126,125,255,226,125,124,255,220,109,108,255,223,147, 145,255,190,24,24,244,222,0,0,46,255,255,255,0,255,255,255,0,189,4,4,215,221, 149,146,255,226,126,125,255,230,132,131,255,251,232,232,255,251,230,229,255,233, 120,118,255,233,116,114,255,250,226,226,255,251,230,230,255,226,110,108,255,218, 96,94,255,222,148,144,255,189,4,4,215,255,255,255,0,255,255,255,0,180,0,0,224, 209,95,90,255,225,111,110,255,231,117,116,255,251,226,226,255,255,255,255,255, 251,227,226,255,250,226,225,255,255,255,255,255,250,223,222,255,229,93,91,255, 222,79,77,255,211,93,88,255,180,0,0,224,255,255,255,0,255,255,255,0,174,0,0,225, 209,85,78,255,227,97,95,255,234,94,92,255,233,103,100,255,250,225,224,255,255, 255,255,255,255,255,255,255,250,226,225,255,235,114,112,255,237,122,120,255,235, 122,120,255,215,96,89,255,174,0,0,225,255,255,255,0,255,255,255,0,170,0,0,226, 191,26,13,255,216,30,26,255,224,41,37,255,227,71,67,255,249,222,221,255,255,255, 255,255,255,255,255,255,249,221,220,255,224,66,62,255,220,18,13,255,217,5,0,255, 199,14,0,255,170,0,0,226,255,255,255,0,255,255,255,0,164,0,0,226,190,16,0,255, 216,5,0,255,219,26,21,255,248,211,210,255,255,255,255,255,247,211,210,255,247, 211,210,255,255,255,255,255,247,211,210,255,218,27,21,255,218,5,0,255,201,17,0, 255,164,0,0,226,255,255,255,0,255,255,255,0,163,0,0,219,181,19,0,255,216,5,0, 255,219,26,21,255,248,211,210,255,248,211,210,255,218,27,21,255,216,25,19,255, 247,208,207,255,249,214,213,255,217,27,21,255,218,5,0,255,187,20,0,255,163,0,0, 219,255,255,255,0,255,255,255,0,206,0,0,47,145,5,0,246,191,18,0,255,218,5,0,255, 220,27,21,255,220,27,21,255,224,7,0,255,225,7,0,255,220,25,18,255,220,28,23,255, 220,6,0,255,192,18,0,255,145,5,0,246,206,0,0,47,255,255,255,0,255,255,255,0,255, 255,255,0,206,0,0,47,140,6,0,246,191,20,0,255,220,6,0,255,221,6,0,255,223,7,0, 255,224,7,0,255,223,7,0,255,221,6,0,255,193,22,1,255,140,6,0,246,206,0,0,47,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,206,0,0,47, 137,6,0,246,176,4,0,255,203,16,11,255,208,24,19,255,211,28,23,255,208,24,19,255, 188,24,20,255,137,6,0,246,206,0,0,47,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,206,0,0,47,149,0,0,222, 154,23,23,231,162,41,41,233,164,47,47,233,162,41,41,233,158,20,20,224,206,0,0, 47,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_stop(idata_stop, 16, 16, 4, 0); static const unsigned char idata_insert[] = {0,0,0,0,78,143,204,170,73,141,199,255,73,141,199,255,73,141,199,255,73,141, 199,255,73,141,199,255,73,141,199,255,73,141,199,255,73,141,199,255,73,141,199, 255,73,141,199,255,73,141,199,255,73,141,199,255,78,143,204,170,0,0,0,0,0,0,0,0, 73,141,199,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,75,144,203,255,0,0,0,0,0,0,0,0, 73,141,199,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,254,254,254,255,75,144,203,255,0,0,0,0,0,0,0,0, 73,141,199,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,75,144,203,255,75,144,203,255,75,144,203,255,75,144,203,255,75, 144,203,255,255,255,255,255,254,254,254,255,75,144,203,255,0,0,0,0,0,0,0,0,73, 141,199,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,250,191,186,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,254,254,254,255,75,144,203,255,0,0,0,0,0,0,0,0,73, 141,199,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,162,35,32,255,249,183,179,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,75,144,203,255,0,0,0,0,0,0,0,0,73, 141,199,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,162,35,32,255,146,27,24,255,249,181,177,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,75,144,203,255,0,0,0,0,0,0,0,0,73,141, 199,255,252,210,210,255,244,154,154,255,230,118,116,255,213,86,83,255,190,57,54, 255,162,35,32,255,146,27,24,255,146,27,24,255,248,179,176,255,255,255,255,255, 255,255,255,255,255,255,255,255,75,144,203,255,0,0,0,0,0,0,0,0,73,141,199,255, 252,210,210,255,244,154,152,255,230,118,116,255,212,85,82,255,190,57,54,255,162, 35,32,255,146,27,24,255,146,27,24,255,146,27,24,255,248,178,174,255,255,255, 255,255,254,254,254,255,75,144,203,255,0,0,0,0,0,0,0,0,73,141,199,255,252,210, 210,255,243,157,153,255,230,117,114,255,212,85,82,255,190,57,54,255,162,35,32, 255,146,27,24,255,146,27,24,255,146,27,24,255,146,27,24,255,248,176,172,255,254, 254,254,255,75,144,203,255,0,0,0,0,0,0,0,0,73,141,199,255,252,210,210,255,243, 155,151,255,230,119,114,255,211,86,83,255,190,57,54,255,162,35,32,255,146,27,24, 255,146,27,24,255,146,27,24,255,248,174,170,255,255,255,255,255,254,254,254,255, 75,144,203,255,0,0,0,0,0,0,0,0,73,141,199,255,252,210,210,255,243,151,149,255, 229,116,113,255,211,84,81,255,190,57,54,255,162,35,32,255,146,27,24,255,146,27, 24,255,248,174,172,255,255,255,255,255,255,255,255,255,255,255,255,255,75,144, 203,255,0,0,0,0,0,0,0,0,73,141,199,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,162,35,32,255,146,27,24,255,248,177,172, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,75,144,203, 255,0,0,0,0,0,0,0,0,73,141,199,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,162,35,32,255,248,177,172,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,75,144,203, 255,0,0,0,0,0,0,0,0,73,141,199,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,251,202,199,255,254,254,254,255,254,254,254, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,75,144,203, 255,0,0,0,0,0,0,0,0,78,143,204,170,75,144,203,255,75,144,203,255,75,144,203,255, 75,144,203,255,75,144,203,255,75,144,203,255,75,144,203,255,75,144,203,255,75, 144,203,255,75,144,203,255,75,144,203,255,75,144,203,255,76,142,204,170,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_insert(idata_insert, 16, 16, 4, 0); static const unsigned char idata_print[] = {255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,10,0,0,0,28,0,0,0,28,0,0,0, 28,0,0,0,28,0,0,0,28,0,0,0,28,0,0,0,28,0,0,0,28,0,0,0,11,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,79,170,170, 170,192,171,171,171,191,171,171,171,191,171,171,171,191,171,171,171,191,171,171, 171,191,171,171,171,191,170,170,170,192,0,0,0,78,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,93,253,253,253, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,0,0,0,93,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,93,245,245,246,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,0,0,0,93,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,136,136,136,232,229,229,232,255, 243,243,244,255,251,251,251,255,255,255,255,255,255,255,255,255,255,255,255,255, 251,251,251,255,243,243,244,255,136,136,136,232,255,255,255,0,255,255,255,0,255, 255,255,0,136,136,136,53,136,136,136,255,147,147,147,255,145,145,145,255,211, 211,215,255,225,225,228,255,235,235,237,255,241,241,242,255,243,243,244,255,241, 241,242,255,235,235,237,255,225,225,228,255,145,145,145,255,164,164,164,255,147, 147,147,255,136,136,136,53,136,136,136,159,145,145,145,255,164,164,164,255,135, 135,135,255,189,189,194,255,203,203,207,255,214,214,217,255,220,220,223,255,222, 222,225,255,220,220,223,255,214,214,217,255,203,203,207,255,136,136,136,255,183, 183,183,255,164,164,164,255,145,145,145,159,180,180,180,227,239,239,239,255,239, 239,239,255,116,116,116,255,91,91,91,255,91,91,91,255,89,89,89,255,87,87,87,255, 87,87,87,255,89,89,89,255,91,91,91,255,91,91,91,255,119,119,119,255,239,239, 239,255,239,239,239,255,180,180,180,227,183,183,183,231,248,248,248,255,248,248, 248,255,116,116,116,255,78,78,78,255,78,78,78,255,96,96,96,255,98,98,98,255,98, 98,98,255,96,96,96,255,78,78,78,255,78,78,78,255,119,119,119,255,248,248,248, 255,248,248,248,255,183,183,183,231,169,169,169,246,202,202,202,255,202,202,202, 255,172,172,172,255,175,175,175,255,175,175,175,255,156,156,156,255,149,149,149, 255,149,149,149,255,156,156,156,255,175,175,175,255,175,175,175,255,172,172,172, 255,202,202,202,255,202,202,202,255,169,169,169,246,174,174,174,231,229,229,229, 255,226,226,226,255,197,197,197,255,193,193,193,255,192,192,192,255,191,191,191, 255,190,190,190,255,190,190,190,255,191,191,191,255,192,192,192,255,193,193,193, 255,197,197,197,255,226,226,226,255,193,193,193,255,174,174,174,231,164,164,164, 231,204,204,204,255,153,153,153,255,9,9,9,255,7,7,7,255,7,7,7,255,7,7,7,255,7,7, 7,255,7,7,7,255,7,7,7,255,7,7,7,255,7,7,7,255,9,9,9,255,153,153,153,255,178, 178,177,255,164,164,164,231,136,136,136,223,136,136,136,255,100,100,100,255,90, 90,90,255,102,102,106,255,173,173,179,255,182,182,188,255,188,188,193,255,190, 190,195,255,188,188,193,255,182,182,188,255,110,110,113,255,90,90,90,255,100, 100,100,255,136,136,136,255,136,136,136,223,255,255,255,0,255,255,255,0,255,255, 255,0,121,121,121,255,158,158,161,255,216,216,219,255,226,226,228,255,231,231, 233,255,233,233,235,255,231,231,233,255,226,226,228,255,169,169,171,255,121,121, 121,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,122,122,122,255,222,222,224,255,245,245,246,255,252,252,253,255, 255,255,255,255,255,255,255,255,255,255,255,255,252,252,253,255,235,235,236,255, 122,122,122,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,0,0,0,32,0,0,0,83,0,0,0,83,0,0,0,83,0,0,0,83,0,0,0,83,0,0,0, 83,0,0,0,83,0,0,0,83,0,0,0,32,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_print(idata_print, 16, 16, 4, 0); static const unsigned char idata_goL[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,90,167,0,37,89,164,90,36,86,161,125,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,37,87,161,14,35,82,153,164,32,77,144,255,31,74,138,255,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 38,89,165,55,34,82,152,221,71,111,161,255,150,183,211,255,24,58,108,255,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,89,166,2, 37,88,164,121,41,89,161,250,111,148,188,255,173,205,227,255,174,205,227,255,18, 43,82,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37, 89,165,27,37,87,163,189,60,106,170,255,140,173,206,255,162,193,218,255,163,194, 219,255,163,195,220,255,12,30,58,255,14,36,68,255,17,44,84,255,21,54,103,255,22, 57,110,255,20,54,105,240,0,0,0,0,0,0,0,0,37,88,163,78,38,88,161,235,86,126,177, 255,143,175,203,255,149,180,208,255,152,183,212,255,154,185,214,255,154,186,215, 255,154,186,215,255,153,184,213,255,150,181,210,255,145,176,204,255,139,169,196, 255,18,49,96,255,0,0,0,0,35,84,157,145,44,90,156,254,102,136,175,255,128,159, 189,255,134,166,197,255,139,171,203,255,143,176,208,255,146,179,212,255,148,181, 213,255,148,181,213,255,146,179,212,255,142,174,207,255,130,162,196,255,90,122, 162,255,15,45,88,255,0,0,0,0,33,79,147,145,40,81,141,254,85,117,157,255,108,139, 175,255,122,154,189,255,130,163,199,255,136,169,206,255,139,173,209,255,138,172, 210,255,133,167,208,255,122,157,202,255,103,140,189,255,76,113,166,255,55,89, 140,255,13,40,80,255,0,0,0,0,0,0,0,0,28,68,127,76,26,63,119,234,39,74,126,255, 68,104,157,255,84,121,175,255,95,133,187,255,104,141,194,255,109,146,199,255, 111,148,201,255,108,145,199,255,100,137,191,255,83,121,175,255,58,93,145,255,10, 35,72,255,0,0,0,0,0,0,0,0,0,0,0,0,23,57,108,24,21,53,101,184,32,64,112,255,78, 114,167,255,100,137,191,255,111,148,201,255,119,155,208,255,6,16,32,255,7,21,41, 255,8,26,53,255,10,32,65,255,10,34,69,255,8,31,64,240,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,18,49,93,1,17,46,88,114,20,46,86,248,71,103,149,255,116,153,205,255,128, 163,215,255,7,20,40,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,38,74,48,11,32,64,214,49,74,110,255,122, 155,204,255,7,23,46,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,31,62,10,9,28,56,152,7,26,52,255,7, 24,50,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,26,54,78,7,27,55,160,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_goL(idata_goL, 16, 16, 4, 0); static const unsigned char idata_goU[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,85,159,133,33, 80,149,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,88,164,72,50,96,162,254,46,88,147,253, 28,68,129,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,38,89,166,23,38,87,161,232,138,172,202,255,136,169,198, 255,27,65,121,230,23,58,111,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,39,91,169,1,37,88,163,183,89,127,174,255,152,183,205, 255,152,183,205,255,86,118,156,255,21,54,103,178,18,48,92,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,89,165,113,54,99,163,255,135, 166,192,255,139,168,194,255,138,168,194,255,135,164,190,255,45,76,118,255,18,46, 89,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,88,164,49,38, 87,158,248,110,142,178,255,128,158,188,255,130,160,189,255,129,160,189,255,126, 156,186,255,110,140,171,255,22,50,90,246,15,40,79,44,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,33,77,143,13,30,72,135,218,74,110,154,255,117,148,182,255,121, 152,187,255,123,154,189,255,123,154,189,255,120,151,186,255,115,146,180,255,75, 104,140,255,14,39,76,210,12,36,72,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,63,116, 164,42,74,119,255,102,135,172,255,111,144,182,255,117,150,189,255,120,153,192, 255,118,152,192,255,104,138,182,255,83,117,164,255,56,89,139,255,21,49,89,255, 11,34,68,144,0,0,0,0,0,0,0,0,0,0,0,0,25,60,111,85,21,48,90,255,56,87,130,255, 80,115,163,255,89,125,176,255,96,132,184,255,98,135,188,255,95,132,187,255,90, 127,182,255,79,116,170,255,64,100,152,255,42,75,123,255,9,32,65,254,7,29,60,68, 0,0,0,0,0,0,0,0,22,53,99,118,16,39,73,255,12,27,50,255,8,18,32,255,7,12,20, 255,103,140,194,255,110,146,200,255,111,148,200,255,105,142,195,255,16,40,74, 255,14,40,77,255,12,37,73,255,8,30,62,255,8,29,59,152,0,0,0,0,0,0,0,0,25,60,111, 0,21,52,97,18,18,44,83,20,15,38,72,21,4,10,20,255,115,151,204,255,125,161,213, 255,127,163,214,255,118,154,207,255,11,33,66,255,12,35,71,13,10,35,69,12,8,29, 62,12,8,29,60,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,24,47,255, 122,158,210,255,138,173,224,255,143,178,228,255,129,165,216,255,11,34,68,255,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 14,37,71,255,122,158,210,255,141,176,226,255,150,184,234,255,130,166,216,255, 11,36,72,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,18,48,93,255,110,146,200,255,124,160,212,255,127,163,215,255, 114,151,204,255,10,34,69,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,54,104,242,21,54,101,255,19,50,94,255,18,45, 86,255,15,40,77,255,8,31,64,242,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,51,99,6,17,47,93,12,15,42,84,12,11,38,76, 12,9,33,68,12,8,30,62,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_goU(idata_goU, 16, 16, 4, 0); static const unsigned char idata_zoomIn[] = {0,0,0,0,0,0,0,0,0,0,0,0,236,236,236,46,233,233,231,171,179,182,185,231,161, 165,170,246,175,178,181,222,205,205,202,157,197,196,195,24,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,235,233,135,169,174,183,255, 167,177,189,237,224,231,240,240,250,255,255,236,205,215,229,233,154,166,185,231, 151,156,162,255,172,173,169,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 228,228,225,112,156,166,180,245,220,230,243,232,227,236,248,225,239,248,255,217, 60,82,112,255,235,246,255,211,218,231,247,214,197,213,235,219,141,149,158,251, 171,171,169,64,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,205,208,208,5,180,185,192, 252,198,212,233,222,217,230,246,211,222,235,249,200,233,246,255,187,124,149,179, 240,232,246,255,177,216,233,249,183,208,225,245,196,162,184,215,207,182,185,187, 233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,207,207,204,101,152,168,190,229,200,218,242, 203,223,242,255,180,234,252,255,162,255,255,255,141,115,142,172,231,255,255,255, 126,237,255,255,136,240,254,255,181,193,215,243,188,127,143,165,231,120,121,116, 55,0,0,0,0,0,0,0,0,0,0,0,0,197,196,191,156,108,141,188,194,217,240,255,196,49, 65,86,233,79,102,131,209,71,94,123,201,148,168,192,255,59,83,115,189,59,85,117, 187,34,52,73,216,209,240,255,164,103,130,167,199,104,105,98,110,0,0,0,0,0,0,0,0, 0,0,0,0,184,183,178,158,93,132,188,183,168,206,239,161,231,255,255,162,238, 255,255,146,253,255,255,131,113,141,172,229,255,255,255,126,241,255,255,135,243, 255,255,142,194,228,247,146,113,140,176,195,91,91,84,113,0,0,0,0,0,0,0,0,0,0,0, 0,169,169,164,112,113,141,181,203,123,174,230,131,160,220,245,79,182,245,251, 48,224,255,255,25,103,132,165,210,255,255,255,11,187,246,252,29,184,246,252,45, 179,219,246,116,110,128,150,221,79,81,76,61,0,0,0,0,0,0,0,0,0,0,0,0,137,138,137, 13,146,156,168,248,146,185,232,163,166,216,245,97,189,247,252,54,239,255,255, 26,92,121,157,205,255,255,255,5,199,248,253,24,209,251,253,63,175,211,248,146, 100,105,107,239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,193,190,136,171,189, 211,223,143,190,238,130,179,236,249,70,160,240,249,29,254,255,255,255,0,0,0,0, 227,253,254,49,214,242,255,125,127,141,157,225,78,79,74,84,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,136,137,134,0,0,0,0,0,143,144,139,170,104,124,147,221,127,177,235, 134,177,228,255,92,198,248,255,59,219,252,255,86,185,219,246,133,120,132,142, 231,127,127,123,235,120,122,119,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117, 118,115,0,0,0,0,0,99,100,95,76,91,93,90,207,93,104,113,245,101,113,126,233,100, 108,115,246,94,95,90,193,60,62,56,39,200,200,200,208,187,187,186,255,104,106, 102,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,89,83,0,0,0,0,0,0,0,0, 0,82,84,80,11,0,0,0,0,0,0,0,0,122,123,122,0,89,89,89,36,210,211,210,255,170, 171,169,255,93,94,91,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,114,114,69,217,218,217, 255,156,157,154,255,73,75,72,23,102,104,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,132,132,110, 220,221,220,255,143,145,142,237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,156,156, 142,204,205,204,241,56,59,55,9}; MGL_EXPORT Fl_RGB_Image img_zoomIn(idata_zoomIn, 16, 16, 4, 0); static const unsigned char idata_zoomOut[] = {0,0,0,0,0,0,0,0,227,228,227,0,0,0,0,0,238,237,235,74,225,226,225,185,172, 176,180,237,161,165,171,245,182,185,186,214,204,203,200,139,194,196,195,7,255, 255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,221,220,0,0,0,0,0,236,235, 233,181,156,164,175,249,172,181,194,237,234,241,249,240,240,245,255,238,195,205, 220,231,147,158,178,233,154,158,162,248,170,171,168,52,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,231,231,227,167,142,154,173,234,233,242,253,232,229, 237,249,224,229,238,249,219,227,237,249,215,224,235,249,214,220,233,249,215,182, 199,223,219,149,154,159,252,150,152,148,24,143,145,142,0,0,0,0,0,0,0,0,0,204, 204,203,0,219,219,217,44,166,174,186,251,215,228,247,222,218,231,246,209,222, 236,250,198,226,239,250,189,226,241,251,183,223,238,250,180,214,231,248,184,207, 225,245,199,141,163,195,211,204,204,200,189,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213, 211,205,152,146,167,197,217,202,220,243,199,229,247,255,177,240,255,255,159,249, 255,255,144,253,255,255,135,250,255,255,132,241,255,255,142,244,255,255,188,173, 201,239,183,132,142,153,249,0,4,0,6,0,0,0,0,0,0,0,0,0,0,0,0,194,195,191,208,105, 143,199,184,224,247,255,193,38,54,77,231,72,95,126,208,68,91,122,204,63,87,118, 199,55,81,113,192,50,77,111,186,26,43,65,219,205,238,255,168,97,116,143,223,105, 106,100,59,0,0,0,0,0,0,0,0,0,0,0,0,182,181,179,209,79,129,198,166,175,213,244, 155,239,255,255,159,245,255,255,144,246,255,255,135,247,255,255,131,248,255,255, 132,247,255,255,136,247,255,255,145,193,228,250,156,102,120,145,220,91,92,86,61, 0,0,0,0,0,0,0,0,0,0,0,0,174,172,165,165,95,136,193,182,127,180,234,122,166, 228,247,71,182,244,252,47,184,246,252,33,185,246,252,23,185,246,252,22,185,246, 252,31,183,246,252,50,171,211,248,132,99,111,123,244,73,75,71,9,0,0,0,0,0,0,0,0, 165,166,164,0,157,156,153,60,138,155,178,231,160,195,239,157,168,223,246,85,191, 247,252,51,196,247,252,34,203,249,254,20,204,250,253,15,198,248,253,28,214,251, 253,77,163,198,240,162,93,93,89,203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,202, 202,199,190,163,186,218,205,142,193,239,117,186,244,252,63,195,248,253,40,202, 249,254,19,225,252,255,9,232,255,255,62,202,233,255,136,112,121,129,242,77,78, 74,38,85,87,83,0,0,0,0,0,0,0,0,0,0,0,0,0,139,140,138,0,0,0,0,0,140,140,138,208, 103,128,161,202,135,190,249,123,186,235,255,86,216,255,255,74,219,253,255,91, 177,208,236,147,109,117,122,244,138,139,135,198,110,112,108,67,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,119,121,118,0,0,0,0,0,101,101,94,106,91,94,92,220,95, 105,116,243,100,113,125,234,99,106,111,244,91,91,85,175,0,0,0,15,215,215,215, 255,169,170,168,255,88,90,84,44,155,157,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,86,81,10,0,0,0,0,0,0,0,0,0,0,0,0,120,120,120, 78,227,227,227,255,153,154,152,252,64,65,61,18,101,103,99,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 138,138,138,121,230,230,228,255,142,143,140,233,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,152,152,152,166,225,226,225,255,132,133,130,190,153,154,151,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93, 93,93,0,0,0,0,0,179,179,179,185,190,191,188,206}; MGL_EXPORT Fl_RGB_Image img_zoomOut(idata_zoomOut, 16, 16, 4, 0); static const unsigned char idata_goD[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,34,82,153,1,34,82,154,226,34,81,152,243,33,80,151,243,33,79,149,243, 32,78,147,243,31,77,144,223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,32,78,146,2,32,78,145,255,133,162,188,255,134,163,189, 255,135,164,190,255,135,164,190,255,29,72,135,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,72,136,2,29,72,135,255,125,154, 180,255,126,155,181,255,126,156,182,255,127,156,182,255,26,66,126,253,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,67,127,2,26, 66,126,255,110,139,167,255,111,140,168,255,112,141,169,255,112,141,169,255,23, 61,116,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,23,60,115,2,23,60,114,255,95,124,155,255,96,125,155,255,97,126,156,255,98, 126,156,255,21,55,107,253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,59, 113,116,22,57,110,243,21,55,105,244,20,53,102,244,20,52,101,255,82,111,145,255, 85,114,147,255,86,115,148,255,85,114,147,255,18,50,97,255,17,49,95,243,17,48, 93,243,16,46,91,243,15,45,89,146,0,0,0,0,0,0,0,0,20,53,103,96,18,50,97,255,52, 81,120,255,65,94,131,255,74,104,141,255,83,114,151,255,88,118,156,255,89,120, 158,255,87,118,155,255,80,110,147,255,68,98,135,255,46,75,114,255,13,41,82,255, 13,41,82,81,0,0,0,0,0,0,0,0,17,48,93,0,15,43,85,175,27,54,94,255,56,87,130,255, 71,104,148,255,81,115,161,255,87,121,168,255,85,120,167,255,76,111,159,255,59, 93,142,255,38,70,119,255,17,45,87,255,11,36,73,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,13,38,75,19,11,34,68,228,37,68,112,255,68,104,156,255,83,120,175,255,92, 129,184,255,93,131,185,255,86,124,178,255,73,110,163,255,44,75,122,255,9,32,65, 217,9,33,67,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,29,59,65,12,32,60,253, 76,112,163,255,102,140,194,255,115,152,204,255,117,154,206,255,108,144,198,255, 84,120,172,255,14,36,68,250,8,30,62,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,5,19,39,136,30,50,78,255,114,151,203,255,136,171,222,255,140, 175,226,255,122,158,210,255,36,57,88,255,6,23,48,122,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,18,39,6,4,14,29,203,68,92,128,255,131, 167,218,255,137,172,223,255,75,99,135,255,4,15,31,194,6,21,44,3,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,13,27,38,7,14,24, 243,84,116,162,255,86,118,164,255,7,14,23,240,4,13,27,32,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,9,19,97, 15,25,39,255,14,23,37,255,2,9,17,91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,11,24,164,3, 11,24,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_goD(idata_goD, 16, 16, 4, 0); static const unsigned char idata_goR[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,255,255,255,3,193,207,228,170,41,92,167,88,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,44,85,146,255,67,107,165,255,35,82,153,164,37,87,162,14,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,24,59,111,255,185,213,231,255,135,167,200,255,49,93,158,220,37,89, 165,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,18,45,84,255,166,196,218,255,160,191,215,255,151,181, 209,255,75,118,176,250,37,88,164,120,38,90,167,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,78,104,142,240,22,57,110,255,21,56,107,255,18,46,89,255,15,38,72,255,13,32, 61,255,150,180,208,255,147,178,207,255,145,176,205,255,144,174,202,255,101,138, 184,255,43,92,165,189,37,88,165,26,0,0,0,0,0,0,0,0,0,0,0,0,19,50,97,255,138,164, 190,255,135,164,193,255,138,168,199,255,139,170,202,255,139,171,203,255,138,170, 204,255,137,169,202,255,134,166,199,255,130,162,194,255,125,156,188,255,110,143, 180,255,56,101,166,235,37,88,163,78,0,0,0,0,0,0,0,0,20,49,92,255,110,140,173, 255,116,148,184,255,124,157,194,255,128,162,200,255,131,165,203,255,131,165,203, 255,129,162,201,255,125,158,196,255,119,152,190,255,113,145,182,255,107,137,173, 255,87,116,154,255,39,79,139,254,35,84,157,143,0,0,0,0,20,48,87,255,81,113,156, 255,99,133,177,255,111,146,191,255,117,152,198,255,119,154,200,255,117,153,199, 255,112,148,195,255,104,140,189,255,92,128,177,255,76,111,160,255,53,88,138,255, 43,76,125,255,31,68,125,254,33,79,147,143,223,255,255,0,23,50,85,255,62,99,147, 255,85,124,176,255,100,141,193,255,110,150,200,255,114,153,203,255,109,146,199, 255,104,141,195,255,95,133,187,255,84,122,176,255,73,110,162,255,58,94,143,255, 31,67,121,234,28,68,128,77,0,0,0,0,204,235,247,12,41,65,94,237,11,35,70,255,11, 34,68,255,10,29,56,255,8,23,43,255,16,33,48,255,120,157,208,255,112,149,202, 255,101,139,192,255,92,133,185,255,54,90,137,255,23,55,104,186,23,58,109,25,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,39,59,255,128, 166,216,255,118,156,208,255,96,139,185,255,35,66,106,249,18,46,89,116,19,49,95, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18, 46,69,255,129,179,225,255,77,117,155,255,17,39,71,216,14,37,73,50,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,245, 255,2,30,63,87,255,24,48,76,255,9,27,55,154,10,32,62,11,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,240,255,3, 36,71,96,158,7,26,54,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_goR(idata_goR, 16, 16, 4, 0); static const unsigned char idata_next[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,0,0,0,1,0,78,0,135,0,68,0,18,255,255,255,0,0,0,0,1,0,78,0,135,0,66,0,18, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,80,0,9,60,115,60,255,44,104, 44,238,0,76,0,52,0,80,0,9,69,129,69,255,51,113,51,237,0,72,0,50,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,0,80,0,9,57,117,57,255,112,166,112,254,61,124,61,249,0,79,0, 104,64,130,64,255,131,193,131,254,69,131,69,249,0,78,0,96,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0, 80,0,9,45,117,45,255,88,150,88,255,93,159,93,255,73,144,73,252,57,133,57,255, 107,178,107,255,112,181,112,255,82,148,82,252,8,84,8,154,0,128,0,1,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,80,0,9,35,119,35, 255,64,136,64,255,68,148,68,255,73,156,73,255,78,163,78,255,82,167,82,255,87, 169,87,255,91,169,91,255,80,153,80,252,15,95,15,203,0,68,0,18,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,0,80,0,9,27,123,27,255,39,127,39,255,43, 141,43,255,48,151,48,255,52,158,52,255,58,162,58,255,62,163,62,255,67,160,67, 255,71,156,71,255,70,146,70,252,22,105,23,235,0,82,0,50,255,255,255,0,255,255, 255,0,255,255,255,0,0,80,0,9,19,125,19,255,17,121,17,255,21,137,21,255,24,150, 24,255,27,157,27,255,31,161,31,255,37,161,37,255,43,156,43,255,48,149,48,255, 52,139,52,255,58,131,58,254,31,110,31,249,0,89,0,82,255,255,255,0,255,255,255, 0,0,80,0,9,9,128,10,255,0,123,0,255,0,140,0,255,0,154,0,255,0,163,0,255,0,163, 0,255,0,157,0,255,0,144,0,255,1,128,1,255,1,111,1,255,3,92,3,254,13,101,14, 248,0,94,3,85,255,255,255,0,255,255,255,0,0,80,0,9,12,135,13,255,0,133,0,255,0, 153,0,255,0,171,0,255,0,183,0,255,0,184,0,255,0,174,0,255,0,157,0,255,0,138,0, 255,9,123,9,251,14,118,16,237,0,97,5,54,255,255,255,0,255,255,255,0,255,255,255, 0,0,80,0,9,15,139,17,255,0,137,0,255,0,160,0,255,0,182,0,255,7,202,7,255,0, 204,0,255,0,187,0,255,0,165,0,255,16,148,17,251,13,127,15,212,0,113,0,20,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,80,0,9,19,141,21,255,0, 135,0,255,0,158,0,255,0,165,2,252,23,182,25,255,0,208,0,255,1,186,1,255,25,162, 27,252,9,130,12,167,0,128,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,0,80,0,9,22,139,24,255,6,130,6,254,0,146,2,250,0,133,2, 119,22,170,24,255,7,184,7,254,30,163,31,251,2,128,4,111,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0, 80,0,9,40,148,43,255,24,150,28,242,0,134,4,61,0,80,0,9,40,164,43,255,26,156,30, 242,0,128,4,58,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,1,3,148,6,147,0,130,0,21, 255,255,255,0,0,0,0,1,3,142,6,147,0,130,0,21,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_next(idata_next, 16, 16, 4, 0); static const unsigned char idata_play[] = {255,0,255,0,255,0,255,0,133,38,131,129,129,181,127,231,127,231,129,181,131, 129,133,38,255,0,255,0,255,0,255,0,255,0,255,0,127,1,125,113,121,246,114,255, 116,255,127,255,127,255,116,255,114,255,121,246,125,113,127,1,255,0,255,0,255,0, 122,1,121,182,111,255,119,255,186,255,208,255,217,255,219,255,212,255,186,255, 118,255,111,255,121,182,122,1,255,0,255,0,115,113,107,255,142,255,211,255,232, 255,239,255,242,255,243,255,241,255,234,255,221,255,141,255,107,255,115,113,255, 0,113,38,108,246,115,255,213,255,237,255,246,255,178,255,242,255,253,255,252, 255,250,255,241,255,226,255,116,255,108,246,113,38,106,129,97,255,190,255,236, 255,246,255,253,255,141,255,134,255,207,255,255,255,255,255,252,255,241,255,208, 255,97,255,106,128,101,181,102,255,206,255,241,255,252,255,255,255,125,255,102, 255,88,255,143,255,242,255,255,255,250,255,233,255,104,255,101,181,96,231,115, 255,208,255,239,255,252,255,255,255,102,255,81,255,64,255,64,255,94,255,204,255, 252,255,239,255,123,255,96,231,93,231,114,255,213,255,241,255,253,255,255,255, 54,255,23,255,7,255,37,255,83,255,203,255,253,255,241,255,124,255,93,231,91, 181,96,255,208,255,239,255,252,255,255,255,59,255,33,255,24,255,114,255,240,255, 255,255,252,255,239,255,100,255,91,181,91,129,84,255,184,255,233,255,250,255, 255,255,74,255,72,255,187,255,255,255,255,255,255,255,250,255,219,255,84,255,91, 128,89,38,85,246,103,255,221,255,241,255,252,255,148,255,241,255,255,255,255, 255,255,255,252,255,241,255,115,255,85,246,89,38,255,0,86,113,80,255,134,255, 226,255,241,255,250,255,252,255,253,255,252,255,250,255,241,255,154,255,80,255, 86,113,255,0,255,0,87,1,86,182,79,255,104,255,208,255,233,255,239,255,241,255, 239,255,219,255,114,255,79,255,86,182,87,1,255,0,255,0,255,0,86,1,84,113,82,246, 79,255,93,255,118,255,120,255,95,255,79,255,82,246,84,113,86,1,255,0,255,0,255, 0,255,0,255,0,255,0,85,38,84,129,82,181,81,231,81,231,82,181,84,129,85,38,255, 0,255,0,255,0,255,0}; MGL_EXPORT Fl_RGB_Image img_play(idata_play, 16, 16, 2, 0); static const unsigned char idata_prev[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,0,66,0,18,0,78,0,135,0,0,0,1,255,255,255,0,0,68,0,18,0, 78,0,135,0,0,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,72,0,50,51,113,51,237,69, 129,69,255,0,80,0,9,0,76,0,52,44,106,44,238,60,116,60,255,0,80,0,9,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,0,78,0,96,69,130,69,249,131,192,131,254,64,130,64,255,0,79,0,104,61, 126,61,249,112,170,112,254,57,121,57,255,0,80,0,9,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,0,128,0,1,8,84,8,154,82,144,82,252, 112,179,112,255,107,177,107,255,57,133,57,255,73,145,73,252,93,163,93,255,88, 155,88,255,45,121,45,255,0,80,0,9,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,0,68,0,18,15,92,15,203,80,147,80,252,91,164,91,255,87,165,87,255,82, 165,82,255,78,164,78,255,73,159,73,255,68,153,68,255,64,144,64,255,35,125,35, 255,0,80,0,9,255,255,255,0,255,255,255,0,255,255,255,0,0,82,0,50,22,101,23,235, 70,135,70,252,71,148,71,255,67,153,67,255,62,157,62,255,58,159,58,255,52,159, 52,255,48,155,48,255,43,148,43,255,39,137,39,255,27,129,27,255,0,80,0,9,255, 255,255,0,255,255,255,0,0,89,0,82,31,103,31,249,58,119,58,254,52,127,52,255,48, 136,48,255,43,146,43,255,37,152,37,255,31,157,31,255,27,158,27,255,24,155,24, 255,21,147,21,255,17,134,17,255,19,133,19,255,0,80,0,9,255,255,255,0,255,255, 255,0,0,94,3,85,13,92,14,248,3,71,3,254,1,91,1,255,1,110,1,255,0,127,0,255,0, 144,0,255,0,157,0,255,0,163,0,255,0,163,0,255,0,154,0,255,0,140,0,255,9,137,10, 255,0,80,0,9,255,255,255,0,255,255,255,0,255,255,255,0,0,97,5,54,14,112,16,237, 9,104,9,251,0,117,0,255,0,138,0,255,0,157,0,255,0,174,0,255,0,184,0,255,0,183, 0,255,0,171,0,255,0,153,0,255,12,146,13,255,0,80,0,9,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,0,113,0,20,13,125,15,212,16,130,17,251,0,143, 0,255,0,165,0,255,0,187,0,255,7,205,7,255,0,201,0,255,0,182,0,255,0,160,0,255, 15,150,17,255,0,80,0,9,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,0,128,0,1,9,130,12,167,25,151,27,252,1,164,1,255,0,186,0,255,23, 184,25,255,0,179,2,252,0,181,0,255,0,158,0,255,19,152,21,255,0,80,0,9,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,2,128,4,111,30,157,31,251,7,173,7,254,22,171,24,255,0,133,2,119,0,154, 2,250,6,151,6,254,22,149,24,255,0,80,0,9,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0, 128,4,58,26,154,30,242,41,165,44,255,0,80,0,9,0,134,4,61,24,155,28,242,41,156, 44,255,0,80,0,9,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,130,0,21,3, 142,6,147,0,0,0,1,255,255,255,0,0,130,0,21,3,148,6,147,0,0,0,1,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_prev(idata_prev, 16, 16, 4, 0); static const unsigned char idata_plot[] = {0,0,0,0,121,121,121,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,121,121,39, 123,123,123,157,125,125,125,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,180,255,69,133,185,255,48,0,0,0,0,121,121, 121,118,123,123,123,157,125,125,125,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,103,165,254,25,110,169,250,168,120,175,251,220,131, 183,255,50,0,0,0,0,0,0,0,0,125,125,125,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,156,251,75,96,160,249,234,107,167,250,133,116, 174,255,9,0,0,0,0,0,0,0,0,0,0,0,0,127,127,127,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,77,150,252,7,83,152,248,224,92,158,251,64,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,126,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,73,145,247,109,79,149,248,178,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,120,120,120,157,125,125,125,217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,184,42,77,62,184,38,78,51,59,140,249,11,68,142,247,230,76,149,252,47,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,126,126,157,0,0,0,0,0,0,0,0,184, 43,74,3,181,42,76,128,180,39,79,233,180,35,84,224,66,125,230,135,63,141,248, 167,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,125,125,157,0,0, 0,0,182,43,73,24,180,41,75,189,180,39,80,189,181,38,83,24,183,33,94,154,131, 70,156,251,58,140,250,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120, 120,120,157,122,124,123,217,181,40,71,52,181,42,76,229,181,40,81,128,184,38,84, 3,0,0,0,0,52,117,233,133,167,38,124,254,185,25,119,69,0,0,0,0,0,0,0,0,0,0,0,0, 188,14,158,56,189,13,162,42,0,0,0,0,0,0,0,0,123,125,124,157,182,39,76,48,184,39, 80,62,0,0,0,0,0,0,0,0,28,119,245,23,35,124,247,236,141,55,157,99,184,23,130, 224,185,21,138,14,0,0,0,0,186,14,158,65,185,13,160,233,189,12,165,53,0,0,0,0,0, 0,0,0,124,124,123,157,0,0,0,0,0,0,0,0,8,107,246,28,13,108,243,121,24,114,242, 218,32,121,245,139,0,0,0,0,184,20,139,153,183,17,144,153,183,13,156,64,185,12, 161,233,187,11,166,62,0,0,0,0,0,0,0,0,120,120,120,157,125,124,122,217,6,105,246, 49,9,105,243,184,9,105,243,236,11,106,243,152,20,114,245,57,29,121,250,0,0,0,0, 0,188,18,150,14,183,14,154,224,184,12,162,235,186,10,166,63,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,124,123,121,157,4,103,244,47,6,103,242,88,6,104,244,9,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,186,8,163,51,186,7,166,56,0,0,0,0,123,125,123, 118,125,125,125,39,0,0,0,0,0,0,0,0,127,126,125,157,125,124,122,157,125,123,120, 157,125,124,122,217,126,125,124,157,126,126,126,157,125,125,125,217,126,126,126, 157,124,126,124,157,122,124,122,217,123,125,123,157,123,125,123,157,123,123,123, 157,123,123,123,157,121,121,121,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,120,120, 157,0,0,0,0,0,0,0,0,120,120,120,157,0,0,0,0,0,0,0,0,120,120,120,157,0,0,0,0,0,0, 0,0,121,121,121,118,121,121,121,39,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_plot(idata_plot, 16, 16, 4, 0); static const unsigned char idata_system[] = {103,98,38,0,103,98,38,93,104,99,38,255,104,99,38,255,104,99,38,255,104,99, 38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255, 104,99,38,255,104,99,38,255,104,99,38,255,103,98,38,93,103,98,38,0,103,98,38,93, 104,99,38,255,233,209,166,255,228,204,158,255,227,204,158,255,227,203,157,255, 227,203,157,255,227,203,157,255,227,203,157,255,227,203,157,255,227,203,157,255, 227,203,157,255,227,203,157,255,228,204,159,255,104,99,38,255,103,98,38,93,104, 99,38,255,221,197,150,255,223,199,150,255,223,199,150,255,223,199,150,255,223, 199,150,255,223,199,150,255,223,199,150,255,227,192,130,255,223,198,150,255,223, 198,150,255,223,198,150,255,223,198,150,255,223,198,150,255,226,191,130,255,104, 99,38,255,104,99,38,255,221,197,150,255,126,105,32,255,104,99,38,255,104,99,38, 255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104, 99,38,255,104,99,38,255,104,99,38,255,126,105,32,255,221,197,150,255,104,99,38, 255,104,99,38,255,221,197,150,255,104,99,38,255,193,125,17,255,193,125,17,255, 193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193, 125,17,255,193,125,17,255,193,125,17,255,104,99,38,255,213,188,136,255,108,103, 43,255,104,99,38,255,221,197,150,255,104,99,38,255,193,125,17,255,193,125,17, 255,193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255, 193,125,17,255,193,125,17,255,193,125,17,255,104,99,38,255,215,191,140,255,108, 103,43,255,104,99,38,255,221,197,150,255,104,99,38,255,193,125,17,255,193,125, 17,255,193,125,17,255,193,125,17,255,104,99,38,255,104,99,38,255,193,125,17, 255,193,125,17,255,193,125,17,255,193,125,17,255,104,99,38,255,215,191,140,255, 108,103,43,255,104,99,38,255,221,197,150,255,126,105,32,255,104,99,38,255,104, 99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38, 255,104,99,38,255,104,99,38,255,104,99,38,255,115,102,34,255,213,188,136,255, 104,99,38,255,104,99,38,255,221,197,150,255,193,125,17,255,193,125,17,255,193, 125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125, 17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,213,188,136, 255,104,99,38,255,104,99,38,255,215,191,140,255,126,105,32,255,104,99,38,255, 104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38, 255,104,99,38,255,104,99,38,255,104,99,38,255,126,105,32,255,213,188,136,255, 104,99,38,255,104,99,38,255,215,191,140,255,104,99,38,255,193,125,17,255,193, 125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125, 17,255,193,125,17,255,193,125,17,255,193,125,17,255,104,99,38,255,210,186,133, 255,104,99,38,255,104,99,38,255,215,191,140,255,104,99,38,255,193,125,17,255, 193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,193, 125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,104,99,38,255,210,186, 133,255,104,99,38,255,104,99,38,255,213,188,136,255,104,99,38,255,193,125,17, 255,193,125,17,255,193,125,17,255,193,125,17,255,104,99,38,255,104,99,38,255, 193,125,17,255,193,125,17,255,193,125,17,255,193,125,17,255,104,99,38,255,210, 186,133,255,104,99,38,255,104,99,38,255,213,188,136,255,126,105,32,255,104,99, 38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255, 104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,210,186, 133,255,104,99,38,255,104,99,38,255,219,182,118,255,210,186,133,255,210,186,133, 255,210,186,133,255,210,186,133,255,208,183,130,255,210,186,133,255,208,183,130, 255,208,183,130,255,208,183,130,255,208,183,130,255,210,186,133,255,208,183,130, 255,210,186,133,255,104,99,38,255,95,91,41,141,104,99,38,255,108,103,43,255,108, 103,43,255,108,103,43,255,108,103,43,255,108,103,43,255,108,103,43,255,104,99, 38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255,104,99,38,255, 104,99,38,255,104,99,38,255}; MGL_EXPORT Fl_RGB_Image img_system(idata_system, 16, 16, 4, 0); static const unsigned char idata_info[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,75,119,134,58,74,119,225,56,73, 120,252,56,74,121,253,58,75,119,227,61,76,118,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,73,119,33,59,76,120,226,164,173,195,255, 237,239,244,255,252,252,253,255,247,249,251,255,226,231,239,255,154,165,190,255, 62,78,121,233,61,77,118,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60, 77,120,230,208,213,224,255,245,248,250,213,232,239,244,170,226,234,243,164,217, 227,238,168,211,223,235,178,216,226,237,217,185,196,214,255,65,81,123,240,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,77,118,142,164,173,195,255,245,248,250, 214,239,243,247,160,244,247,250,159,235,240,246,162,223,232,242,166,212,224,237, 170,194,211,228,167,197,213,229,211,141,156,184,255,67,81,119,162,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,64,80,122,237,237,239,244,255,232,239,245,172,243,247,250, 159,250,252,253,157,236,241,247,161,223,231,242,164,208,221,235,164,193,210,228, 165,120,157,196,138,197,210,225,255,70,85,127,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,57,74,121,253,250,251,253,255,224,233,242,165,238,243,248,178,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,193,204,215,193,89,136,185, 123,206,219,233,255,57,75,122,254,97,100,113,2,0,0,0,0,0,0,0,0,0,0,0,0,58,75, 122,254,244,247,250,255,214,225,237,167,222,231,241,167,255,255,255,255,235,240, 245,201,224,230,236,204,210,218,226,200,145,174,205,145,83,130,182,125,201,214, 231,255,57,75,122,254,97,100,113,11,0,0,0,0,0,0,0,0,0,0,0,0,69,84,126,244,224, 229,237,255,203,217,232,173,200,215,232,158,255,255,255,255,192,208,227,151,181, 202,224,150,157,185,214,144,92,137,186,123,96,142,188,140,181,199,219,255,72,88, 131,249,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,87,122,186,152,164,189,255,212,224, 236,215,166,190,216,147,255,255,255,255,165,190,216,148,135,168,204,135,91,137, 185,122,75,126,178,128,170,193,217,214,126,145,177,255,84,96,131,215,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,97,100,113,10,71,87,128,247,183,194,213,255,195,211,228, 211,119,157,197,138,255,255,255,255,82,129,181,126,94,141,186,141,169,192,217, 214,155,174,200,255,73,89,133,250,97,100,113,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,79,88,115,77,71,87,128,249,140,155,184,255,194,208,224,255,204,217, 232,255,199,214,229,255,181,198,218,255,126,144,178,255,74,90,134,251,89,98,124, 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,100,113,19,88,99, 131,221,75,91,131,252,166,172,152,255,167,173,152,255,171,177,152,255,94,104, 128,243,97,100,113,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,89,89,66,12,94,94,62,255,235,237,193,255,245,248,202,255,221, 223,171,255,94,94,62,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,89,89,66,7,94,94,62,255,128,128,92,255,168,170,132, 255,138,139,102,255,94,94,62,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,94,62,255,227,230,186,254,243, 246,201,255,211,213,176,254,94,94,62,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,94,62,76,57,57,54,165,70, 70,70,236,48,48,48,169,94,94,62,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_info(idata_info, 16, 16, 4, 0); static const unsigned char idata_help[] = {0,0,0,0,141,143,138,137,137,139,134,252,136,138,133,255,136,138,133,255, 136,138,133,255,136,138,133,255,136,138,133,255,136,138,133,255,136,138,133,255, 136,138,133,255,136,138,133,255,136,138,133,255,137,139,134,252,143,145,140,137, 0,0,0,0,0,0,0,0,137,139,134,252,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,138,140,135, 252,0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,222,225,219,255,192,195,188, 255,186,189,182,255,186,189,182,255,186,189,182,255,186,189,182,255,186,189,182, 255,186,189,182,255,194,196,190,255,234,236,232,255,255,255,255,255,136,138,133, 255,0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,223,226,220,255,227,229,224, 255,230,233,228,255,234,236,232,255,237,238,235,255,239,240,237,255,240,241,239, 255,240,241,238,255,238,240,237,255,236,237,234,255,255,255,255,255,136,138,133, 255,0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,224,227,221,255,228,230,225, 255,197,171,168,255,163,122,119,255,141,143,138,255,141,143,138,255,164,126,123, 255,202,177,174,255,240,241,239,255,237,239,236,255,255,255,255,255,136,138,133, 255,0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,225,227,222,255,177,121,119, 255,163,40,39,255,214,147,146,255,238,238,236,255,238,238,237,255,215,156,155, 255,165,41,39,255,181,125,123,255,239,240,237,255,255,255,255,255,136,138,133, 255,0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,198,171,168,255,163,40,39, 255,240,134,134,255,235,87,87,255,186,166,162,255,186,166,162,255,235,92,92,255, 240,159,159,255,166,42,41,255,208,180,178,255,255,255,255,255,136,138,133,255,0, 0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,162,131,127,255,215,143,142,255, 236,87,87,255,171,16,16,255,185,147,144,255,185,147,144,255,171,16,16,255,237, 95,95,255,219,164,162,255,166,130,126,255,255,255,255,255,136,138,133,255,0,0, 0,0,0,0,0,0,136,138,133,255,255,255,255,255,141,143,138,255,240,240,238,255, 186,169,166,255,182,136,133,255,244,245,243,255,248,248,247,255,189,152,150,255, 187,166,163,255,242,242,241,255,141,143,138,255,255,255,255,255,136,138,133,255, 0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,141,143,138,255,242,242,241, 255,186,168,165,255,183,150,147,255,244,245,243,255,248,249,248,255,186,141,139, 255,188,174,171,255,245,245,244,255,141,143,138,255,255,255,255,255,136,138,133, 255,0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,164,127,123,255,224,147,146, 255,236,140,140,255,162,27,27,255,184,148,144,255,186,150,148,255,161,28,27,255, 237,167,167,255,227,158,157,255,166,132,129,255,255,255,255,255,136,138,133,255, 0,0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,198,172,168,255,178,28,28,255, 246,144,144,255,238,152,151,255,191,174,171,255,192,175,172,255,239,178,177,255, 249,177,177,255,179,32,32,255,208,181,179,255,255,255,255,255,136,138,133,255,0, 0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,226,229,224,255,178,119,116,255, 179,34,33,255,230,170,169,255,248,248,248,255,250,250,249,255,234,184,183,255, 181,38,38,255,183,123,121,255,242,243,240,255,255,255,255,255,136,138,133,255,0, 0,0,0,0,0,0,0,136,138,133,255,255,255,255,255,226,228,223,255,230,232,228,255, 197,173,169,255,164,124,121,255,141,143,138,255,141,143,138,255,165,123,120,255, 205,179,177,255,244,245,243,255,241,242,240,255,255,255,255,255,136,138,133,255, 0,0,0,0,0,0,0,0,137,139,134,252,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,138,140,135, 252,0,0,0,0,0,0,0,0,141,143,138,137,137,139,134,252,136,138,133,255,136,138,133, 255,136,138,133,255,136,138,133,255,136,138,133,255,136,138,133,255,136,138,133, 255,136,138,133,255,136,138,133,255,136,138,133,255,137,139,134,252,143,145,140, 137,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_help(idata_help, 16, 16, 4, 0); static const unsigned char idata_delete[] = {0,0,0,0,0,0,0,0,0,0,0,0,46,52,54,17,46,52,54,75,46,52,54,255,46,52,54,255, 46,52,54,255,46,52,54,255,46,52,54,255,46,52,54,255,46,52,54,62,46,52,54,33,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,52,54,58,46,52,54,255,100,105,106, 255,144,152,148,255,233,234,227,255,238,239,236,255,239,240,238,255,210,213,211, 255,191,193,193,255,151,154,155,255,46,52,54,255,46,52,54,75,0,0,0,0,0,0,0,0,0, 0,0,0,46,52,54,62,66,71,73,255,217,219,214,255,199,202,196,255,110,118,114, 255,66,71,69,255,36,39,39,255,49,52,50,255,122,131,126,255,179,184,179,255,203, 206,203,255,203,207,203,255,46,52,54,255,46,52,54,33,0,0,0,0,0,0,0,0,46,52,54, 255,214,217,211,255,210,213,205,255,218,220,214,255,174,179,173,255,92,99,98, 255,53,57,57,255,55,58,56,255,88,94,91,255,141,148,143,255,170,175,167,255,210, 214,210,255,181,186,181,255,46,52,54,255,0,0,0,0,0,0,0,0,46,52,54,255,229,229, 225,255,240,240,237,255,236,237,233,255,227,229,224,255,221,222,217,255,203,206, 199,255,182,187,179,255,162,168,160,255,179,184,176,255,186,191,183,255,171,176, 168,255,203,206,205,255,46,52,54,255,0,0,0,0,0,0,0,0,46,52,54,255,224,226,226, 255,230,230,221,255,244,244,239,255,244,243,241,255,244,244,241,255,243,244,240, 255,240,240,235,255,229,230,224,255,214,217,210,255,145,152,148,255,139,143,141, 255,137,141,141,255,46,52,54,255,0,0,0,0,0,0,0,0,46,52,54,194,154,156,156,255, 194,197,196,255,188,192,191,255,217,219,210,255,223,224,216,255,217,219,212,255, 204,208,207,255,132,140,137,255,150,156,153,255,134,137,138,255,83,88,90,255,46, 52,54,255,46,52,54,130,0,0,0,0,0,0,0,0,46,52,54,68,46,52,54,255,90,95,96,255, 139,143,143,255,173,175,176,255,228,229,229,255,227,229,229,255,227,229,228,255, 161,164,164,255,104,109,110,255,60,64,65,255,76,80,82,255,46,52,54,255,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,46,52,54,255,107,113,113,255,50,56,56,255,46,52,52, 255,43,49,50,255,43,49,51,255,41,46,48,255,40,45,47,255,39,44,46,255,57,61,60, 255,147,149,148,255,46,52,54,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,52,54,255, 175,181,179,255,176,182,180,255,105,112,110,255,151,159,155,255,106,113,109,255, 57,62,59,255,95,103,100,255,51,55,52,255,97,104,102,255,152,155,153,255,46,52, 54,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,52,54,255,183,187,187,255,213,216, 214,255,129,138,136,255,209,212,210,255,126,135,133,255,81,87,86,255,137,146, 144,255,67,72,68,255,110,119,116,255,160,163,161,255,46,52,54,255,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,46,52,54,255,183,187,187,255,214,217,215,255,133,141,138, 255,216,219,216,255,162,168,163,255,85,91,89,255,151,158,156,255,69,75,71,255, 111,120,117,255,160,163,161,255,46,52,54,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46, 52,54,255,183,187,187,255,212,215,213,255,131,140,137,255,216,219,215,255,162, 168,163,255,85,91,89,255,151,158,156,255,69,75,71,255,110,119,116,255,155,157, 155,255,46,52,54,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,52,54,255,175,177,176, 255,204,207,207,255,185,187,187,255,221,223,220,255,162,168,163,255,85,91,89, 255,160,167,164,255,135,139,136,255,146,149,149,255,114,115,115,255,46,52,54, 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,52,54,75,46,52,54,255,87,92,94,255,155, 156,155,255,213,216,215,255,207,210,208,255,191,192,191,255,190,193,191,255,135, 135,135,255,84,89,90,255,46,52,54,255,46,52,54,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,46,52,54,78,46,52,54,187,46,52,54,230,46,52,54,255,46,52,54, 255,46,52,54,230,46,52,54,187,46,52,54,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_delete(idata_delete, 16, 16, 4, 0); static const unsigned char idata_objectU[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,186,186,190,173,179,179,184,191,172,172,178,191,166,166,170,191,159,159, 164,191,151,151,156,191,143,143,147,191,134,134,138,191,125,125,130,191,116,116, 121,173,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,186,186,190,191,229,229,229,254,230,230,230,255,231,231,231,255, 232,232,232,255,233,233,233,255,234,234,234,255,239,239,239,255,243,243,243,254, 117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,186,186,190,191,238,238,238,255,231,231,231,255,229,229,229, 255,231,231,231,255,235,235,235,255,240,240,240,255,243,243,243,255,245,245,245, 255,117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,186,186,190,191,249,249,249,255,243,243,243,255,237,237, 237,255,234,234,234,255,236,236,236,255,239,239,239,255,241,241,241,255,242,242, 242,255,117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,186,186,190,191,255,255,255,255,253,253,253,255,246, 246,246,255,241,241,241,255,237,237,237,255,236,236,236,255,237,237,237,255,232, 232,232,255,124,124,127,239,143,143,147,191,134,134,138,191,125,125,130,191,116, 116,121,173,255,255,255,0,255,255,255,0,186,186,190,191,255,255,255,255,255,255, 255,255,255,255,255,255,250,250,250,255,245,245,245,255,239,239,239,255,230,230, 230,255,229,229,229,255,131,140,153,255,172,206,252,255,158,197,253,255,138,185, 254,255,117,117,120,191,255,255,255,0,255,255,255,0,186,186,190,191,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,255,247,247,247, 255,241,241,241,255,234,234,234,255,126,137,153,255,136,183,255,255,129,179,255, 255,128,179,255,255,117,117,120,191,255,255,255,0,255,255,255,0,186,186,190,191, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,252,252,252,255,245,245,245,255,122,134,154,255,134,182,255,255, 132,181,255,255,133,182,255,255,117,117,120,191,255,255,255,0,255,255,255,0,186, 186,190,191,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,253,253,253,255,123,134,154,255,137, 184,255,255,141,186,254,255,167,203,252,255,117,117,120,191,255,255,255,0,255, 255,255,0,186,186,190,173,179,179,184,191,172,172,178,191,166,166,170,191,167, 167,172,239,145,158,181,255,140,152,174,255,134,146,167,255,129,140,161,255,125, 139,164,255,150,191,254,255,169,203,252,255,172,205,252,255,117,117,120,191,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 200,200,204,191,128,179,255,255,131,180,255,255,134,182,255,255,138,184,255,255, 156,195,253,255,170,204,252,255,171,205,252,255,172,206,252,255,117,117,120,191, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,200,200,204,191,128,179,255,255,129,180,255,255,146,190,254,255,167,203, 252,255,171,205,252,255,171,205,252,255,172,205,252,255,173,206,252,255,117,117, 120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,200,200,204,191,141,187,254,255,165,201,253,255,173,206,252,255, 172,206,252,255,172,206,252,255,172,206,252,255,173,206,252,255,173,205,250,254, 117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,200,200,205,173,190,190,194,191,180,180,186,191,170,170,175, 191,160,160,166,191,151,151,156,191,143,143,147,191,134,134,138,191,125,125,130, 191,116,116,121,173,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_objectU(idata_objectU, 16, 16, 4, 0); static const unsigned char idata_objectD[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,186,186,190,173,179,179,184,191,172,172,178,191,166,166,170,191,159,159, 164,191,151,151,156,191,143,143,147,191,134,134,138,191,125,125,130,191,116,116, 121,173,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,186,186,190,191,229,229,229,254,230,230,230,255,231,231,231,255, 232,232,232,255,233,233,233,255,234,234,234,255,239,239,239,255,243,243,243,254, 117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,186,186,190,191,238,238,238,255,231,231,231,255,229,229,229, 255,231,231,231,255,235,235,235,255,240,240,240,255,243,243,243,255,245,245,245, 255,117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,186,186,190,191,249,249,249,255,243,243,243,255,237,237, 237,255,234,234,234,255,236,236,236,255,239,239,239,255,241,241,241,255,242,242, 242,255,117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,186,186,190,191,255,255,255,255,253,253,253,255,246, 246,246,255,213,213,216,255,201,201,204,255,194,194,198,255,186,186,190,255,178, 178,182,255,144,144,149,239,143,143,147,191,134,134,138,191,125,125,130,191,116, 116,121,173,255,255,255,0,255,255,255,0,186,186,190,191,255,255,255,255,255,255, 255,255,255,255,255,255,213,213,216,255,174,206,251,255,173,206,252,255,173,206, 252,255,173,206,252,255,173,206,252,255,172,206,252,255,158,197,253,255,138,185, 254,255,117,117,120,191,255,255,255,0,255,255,255,0,186,186,190,191,255,255,255, 255,255,255,255,255,255,255,255,255,214,214,217,255,173,206,252,255,173,206,252, 255,172,206,252,255,165,201,253,255,153,194,253,255,136,183,255,255,129,179,255, 255,128,179,255,255,117,117,120,191,255,255,255,0,255,255,255,0,186,186,190,191, 255,255,255,255,255,255,255,255,255,255,255,255,214,214,217,255,149,192,254,255, 139,185,254,255,134,182,255,255,134,182,255,255,135,183,255,255,134,182,255,255, 132,181,255,255,133,182,255,255,117,117,120,191,255,255,255,0,255,255,255,0,186, 186,190,191,254,254,254,254,255,255,255,255,255,255,255,255,214,214,217,255,128, 179,255,255,131,180,255,255,134,182,255,255,137,184,255,255,139,185,255,255,137, 184,255,255,141,186,254,255,167,203,252,255,117,117,120,191,255,255,255,0,255, 255,255,0,186,186,190,173,179,179,184,191,172,172,178,191,166,166,170,191,192, 192,196,239,128,179,255,255,131,181,255,255,135,183,255,255,139,185,255,255,143, 188,255,255,150,191,254,255,169,203,252,255,172,205,252,255,117,117,120,191,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 200,200,204,191,128,179,255,255,131,180,255,255,134,182,255,255,138,184,255,255, 156,195,253,255,170,204,252,255,171,205,252,255,172,206,252,255,117,117,120,191, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,200,200,204,191,128,179,255,255,129,180,255,255,146,190,254,255,167,203, 252,255,171,205,252,255,171,205,252,255,172,205,252,255,173,206,252,255,117,117, 120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,200,200,204,191,141,187,254,255,165,201,253,255,173,206,252,255, 172,206,252,255,172,206,252,255,172,206,252,255,173,206,252,255,173,205,250,254, 117,117,120,191,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,200,200,205,173,190,190,194,191,180,180,186,191,170,170,175, 191,160,160,166,191,151,151,156,191,143,143,147,191,134,134,138,191,125,125,130, 191,116,116,121,173,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_objectD(idata_objectD, 16, 16, 4, 0); static const unsigned char idata_layer[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 255,255,255,0,0,0,0,0,149,149,149,35,153,153,153,100,160,160,160,88,114,114,114, 12,0,0,0,0,226,226,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,61,61,61,8,135,135,135,184,111,111,111,255,87,87,87,255,97,97,97, 255,125,125,125,255,142,142,142,141,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,101,101,101,10,118,118,118,233,57,57,57,153,13,13, 13,67,1,1,1,37,13,13,13,65,52,52,52,143,91,91,91,251,145,145,145,205,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,101,101,175,0,0,0,31,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,68,68,68,172,143,143,143,204,0,0,0, 0,126,126,126,0,0,0,0,0,0,0,0,0,0,0,0,0,66,66,66,80,0,0,0,10,0,0,0,0,0,0,0,0, 0,0,0,0,49,49,49,32,60,60,60,35,0,0,0,0,0,0,0,0,0,0,0,0,61,61,61,120,136,136, 136,145,0,0,0,0,2,2,2,0,0,0,0,0,19,19,19,1,65,65,65,11,0,0,0,0,0,0,0,0,119,119, 119,116,115,114,114,240,106,106,106,255,110,108,108,255,119,119,119,243,126,126, 126,119,0,0,0,0,0,0,0,0,79,79,79,122,104,104,104,56,0,0,0,0,0,0,0,0,0,0,0,0,255, 255,255,0,0,0,0,12,128,128,128,205,87,87,87,255,99,102,108,254,128,139,157,255, 118,127,143,255,86,86,88,254,108,108,108,255,134,133,133,209,18,18,18,16,0,0,0, 0,72,72,72,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,132,132,132,222,100,100,100, 255,195,198,202,255,177,209,247,255,156,209,245,255,156,192,240,255,173,204,238, 255,96,102,116,255,106,106,106,254,139,139,139,232,41,41,41,19,0,0,0,2,70,70,70, 51,0,0,0,0,0,0,0,0,138,138,138,191,110,110,110,255,223,223,222,255,172,189,218, 255,130,182,240,255,172,184,182,255,123,133,134,255,114,175,210,255,119,137,171, 255,208,206,205,255,114,114,114,254,146,146,146,224,0,0,0,8,68,68,68,5,0,0,0,0, 0,0,0,0,120,120,120,213,149,149,149,254,240,238,238,255,160,181,211,255,56, 124,169,255,110,102,99,255,72,58,55,255,50,166,206,255,113,147,182,255,226,224, 224,255,208,208,208,255,126,126,126,255,150,150,150,186,0,0,0,0,0,0,0,0,102,102, 102,0,50,50,50,39,114,114,114,255,210,210,209,254,170,180,199,255,81,181,236, 255,19,73,80,255,14,86,100,255,68,177,226,255,91,120,150,255,244,242,240,255, 234,234,234,255,192,192,192,255,140,140,140,255,139,139,139,112,0,0,0,0,0,0,0,0, 74,74,74,0,52,52,52,49,109,109,108,237,200,199,198,255,88,124,174,254,62,143, 220,255,49,119,189,255,68,128,177,255,142,149,162,255,238,238,236,255,230,230, 230,255,210,210,210,255,155,155,155,254,153,153,153,255,0,0,0,2,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,6,78,78,77,126,132,134,137,237,90,111,144,255,65,92,135,255,136, 146,163,254,244,243,241,255,236,236,236,255,216,216,216,255,167,167,167,255,141, 141,141,239,78,78,78,59,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,80,77,72,58,214,210,206,124,199,199,197,163,170,170,170,178,140,140,140, 175,109,109,109,153,92,92,92,91,0,0,0,4,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_layer(idata_layer, 16, 16, 4, 0); static const unsigned char idata_new[] = {0,0,0,16,0,0,0,58,0,0,0,58,0,0,0,58,0,0,0,58,0,0,0,58,0,0,0,58,0,0,0,58,0, 0,0,58,0,0,0,58,0,117,0,136,41,168,41,231,91,195,91,249,42,170,42,226,0,159,0, 104,255,255,255,0,0,0,0,58,234,234,234,255,232,233,233,255,234,235,235,255,236, 237,237,255,237,238,238,255,238,239,239,255,239,240,240,255,240,241,241,255,143, 207,143,255,54,191,54,255,120,213,120,255,255,255,255,255,122,213,120,255,53, 192,53,253,0,157,0,103,0,0,0,58,232,233,234,255,232,233,233,255,234,235,235,255, 236,237,237,255,237,238,238,255,238,239,239,255,239,240,240,255,240,241,241,255, 33,166,33,255,29,182,29,255,63,180,41,255,255,255,255,255,90,188,41,255,51,188, 29,255,0,155,0,220,0,0,0,58,235,236,236,255,235,236,236,255,236,237,237,255, 238,239,239,255,239,240,240,255,241,241,241,255,242,242,242,255,243,243,243,255, 9,149,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,0,147,0,246,0,0,0,58,237,238,238,255,237,237,237,255,238,239, 239,255,240,241,241,255,242,242,242,255,243,244,244,255,245,245,245,255,246,246, 246,255,33,180,33,255,3,160,0,255,52,160,0,255,255,255,255,255,100,176,0,255,50, 175,0,255,0,168,0,220,0,0,0,58,238,239,239,255,238,239,239,255,240,241,241,255, 242,243,243,255,244,244,244,255,246,246,246,255,247,247,247,255,248,248,248,255, 149,221,149,255,2,173,2,255,26,163,0,255,255,255,255,255,54,176,0,255,3,173,0, 253,0,178,0,102,0,0,0,58,240,241,241,255,240,241,241,255,242,243,243,255,244, 245,245,255,246,246,246,255,248,248,248,255,249,249,249,255,250,250,250,255,250, 250,250,255,149,223,149,255,35,196,35,255,10,175,10,255,0,179,0,227,0,184,0,102, 255,255,255,0,0,0,0,58,242,242,242,255,242,242,242,255,244,244,244,255,246,246, 246,255,248,248,248,255,250,250,250,255,250,250,250,255,251,251,251,255,251,251, 251,255,252,252,252,255,252,252,252,255,252,252,252,255,0,0,0,58,255,255,255,0, 255,255,255,0,0,0,0,58,243,244,244,255,243,244,244,255,246,246,246,255,248,248, 248,255,250,250,250,255,251,251,251,255,251,251,251,255,252,252,252,255,252,252, 252,255,253,253,253,255,253,253,253,255,253,253,253,255,0,0,0,58,255,255,255,0, 255,255,255,0,0,0,0,58,244,244,244,255,245,245,245,255,247,247,247,255,250,250, 250,255,250,250,250,255,251,251,251,255,252,252,252,255,253,253,253,255,253,253, 253,255,254,254,254,255,254,254,254,255,254,254,254,255,0,0,0,58,255,255,255,0, 255,255,255,0,0,0,0,58,244,245,245,255,246,246,246,255,249,249,249,255,250,250, 250,255,251,251,251,255,252,252,252,255,253,253,253,255,254,254,254,255,254,254, 254,255,252,252,252,255,250,250,250,255,239,239,240,254,0,0,0,53,255,255,255,0, 255,255,255,0,0,0,0,58,245,246,246,255,247,247,247,255,250,250,250,255,251,251, 251,255,252,252,252,255,253,253,253,255,254,254,254,255,254,254,254,255,224,224, 224,255,198,198,198,255,206,207,207,255,132,134,136,199,0,0,0,5,255,255,255,0, 255,255,255,0,0,0,0,58,246,246,246,255,248,248,248,255,250,250,250,255,251,251, 251,255,252,252,252,255,253,253,253,255,254,254,254,255,251,251,251,255,196,196, 196,255,253,253,253,255,128,133,133,213,0,0,0,10,255,255,255,0,255,255,255,0, 255,255,255,0,0,0,0,58,246,247,247,255,248,248,248,255,250,250,250,255,251,251, 251,255,252,252,252,255,253,253,253,255,254,254,254,255,244,244,244,255,204,204, 204,255,126,131,131,213,0,0,0,18,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,0,0,0,57,246,247,247,254,249,249,249,255,251,251,251,255,251,251,251, 255,252,252,252,255,253,253,253,255,255,255,255,255,233,233,234,254,126,129,129, 199,0,0,0,10,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,0,0,0,7,0,0,0,57,0,0,0,58,0,0,0,58,0,0,0,58,0,0,0,58,0,0,0,58,0,0,0,58,0, 0,0,53,0,0,0,5,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_new(idata_new, 16, 16, 4, 0); static const unsigned char idata_clear[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 183,165,137,107,182,156,121,213,76,67,57,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,158, 125,207,200,175,140,166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,179,155,54,185,160,124, 255,197,175,145,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,120,95,18,171,155,130,188,185,159,123, 219,99,88,74,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,83,68,52,3,146,127,102,126,172,144,110,255,151,127,99, 177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,141,117,85,19,173,147,110,203,184,157,119,255,159,133,103,255,154, 108,86,184,174,0,0,4,0,0,0,0,0,0,0,0,174,1,1,24,178,58,58,68,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,43,43,0,0,159,132,95,185,192,165,127,255,179,155,119, 255,172,138,98,255,182,130,102,246,185,43,39,152,154,0,0,4,160,0,0,25,199,64,59, 194,223,110,105,224,172,13,10,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,122,98,87, 173,145,107,255,183,155,116,255,179,148,109,255,170,136,94,255,180,121,94,245, 216,104,100,226,138,35,30,160,171,55,49,196,221,103,102,226,222,107,104,226,178, 40,36,158,0,0,0,0,0,0,0,0,0,0,0,0,130,104,71,12,141,113,78,221,163,141,110,255, 165,142,110,255,165,131,91,255,167,134,93,255,175,96,71,239,203,67,65,226,198, 75,70,226,206,79,76,226,206,89,85,226,171,33,26,167,154,0,0,9,0,0,0,0,0,0,0,0, 0,0,0,0,151,119,79,166,161,132,92,255,175,145,105,255,155,127,90,255,145,117, 85,255,141,117,86,255,143,66,50,134,182,44,31,226,189,18,18,226,189,24,23,226, 166,32,19,210,144,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,160,126,82,117,155,124,83,255, 179,145,101,255,163,129,90,255,154,122,82,255,168,131,87,255,160,129,88,255,163, 44,30,217,206,16,10,227,192,22,15,227,203,9,7,226,204,20,13,226,153,23,17,152, 131,0,0,4,0,0,0,0,158,124,80,88,180,143,93,251,157,123,84,255,168,132,89,255, 176,138,93,255,161,125,81,255,178,142,94,255,164,129,87,254,217,46,32,233,208, 47,35,232,108,49,36,187,132,45,36,211,231,10,9,226,224,23,19,226,163,51,49,147, 127,98,65,50,170,135,87,204,143,112,72,255,187,148,99,254,179,136,92,255,167, 132,86,255,186,145,94,255,178,142,92,255,181,137,92,252,206,76,58,235,137,65,49, 191,162,119,81,52,114,53,36,55,159,41,38,206,216,42,39,226,142,23,21,102,169, 135,94,36,170,135,88,202,188,143,98,254,190,145,97,254,187,144,95,252,181,144, 93,255,197,153,97,255,184,145,94,255,189,150,100,209,149,80,54,153,166,123,83, 53,176,141,95,15,183,144,96,2,148,35,35,37,140,15,15,87,0,0,0,0,171,140,94,10, 169,137,91,68,170,136,91,151,176,136,92,185,180,143,93,214,186,148,95,242,184, 142,90,254,184,140,93,247,178,143,96,149,175,140,97,24,170,136,98,4,85,85,85,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,143,94,3,179,141,95,10,176,139,96, 24,175,140,94,53,170,137,92,94,159,125,81,129,183,140,93,120,146,119,84,58,170, 170,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_clear(idata_clear, 16, 16, 4, 0); static const unsigned char idata_plus[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,124, 201,112,164,64,177,40,247,67,180,39,237,161,217,144,149,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,87,184,72,254, 160,217,142,255,154,214,134,255,107,195,82,251,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,36,161,19,255,158,222, 134,255,161,223,138,255,66,179,38,255,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,31,159,16,255,145,215,124,255, 146,217,126,255,60,176,35,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,1,255,255,255,4,255, 255,255,0,255,255,255,0,255,255,255,0,27,156,14,255,131,209,115,255,132,209,116, 255,55,172,32,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,4,255, 255,255,1,255,255,255,0,255,255,255,0,98,182,98,136,65,168,65,251,6,143,4,255, 12,146,8,255,18,150,11,255,23,153,13,255,121,204,107,255,123,205,108,255,48, 169,27,255,55,173,30,255,64,178,35,255,73,184,40,255,124,205,97,251,154,219,128, 136,255,255,255,0,255,255,255,0,4,134,4,236,104,186,99,255,104,189,96,255,103, 192,94,255,104,194,95,255,109,197,97,255,99,195,83,255,101,196,84,255,117,200, 100,255,119,202,104,255,126,202,116,255,107,191,101,255,93,181,83,255,88,192,49, 236,255,255,255,0,255,255,255,0,0,130,0,236,70,167,66,255,74,173,70,255,79,181, 73,255,93,188,85,255,98,190,86,255,87,187,71,255,90,189,71,255,106,195,89,255, 96,189,79,255,57,170,44,255,42,161,35,255,59,167,48,255,79,187,42,236,255,255, 255,0,255,255,255,0,0,128,0,106,0,131,0,250,0,135,0,255,0,139,0,255,5,143,2,255, 11,146,5,255,67,177,46,255,78,183,52,255,32,159,17,255,40,164,21,255,47,168,25, 255,55,173,29,255,64,179,34,250,75,183,38,106,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,7,144,4,255, 69,179,45,255,86,189,53,255,28,156,14,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,4,142,2,255,64,176,40,255, 88,190,53,255,23,154,12,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,1,140,0,255,42,164,25,255,63,177,38,255, 19,151,10,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,128,2,31,152,16,254,14,147,8,255,25,153,20,255,31,147,25,251, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,86,171,29,160,14,147,8,247,51,163,50,239,45,145,39,125,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_plus(idata_plus, 16, 16, 4, 0); static const unsigned char idata_minus[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,1,255,255,255,4,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,4,255,255,255,1,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,199,100,100,132,191,65,65,250,176,0,0,255,183,0,0, 255,190,0,0,255,196,0,0,255,203,0,0,255,210,0,0,255,216,0,0,255,223,0,0,255,236, 65,65,251,246,98,98,136,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,161,4,4,228,204,103,103,255,207,90,90,255,215,90,90,255,220,90,90,255,225, 90,90,255,228,90,90,255,228,90,90,255,226,100,100,255,209,87,87,255,199,69,69, 255,234,4,4,236,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,155,0,0, 228,193,82,82,255,200,77,77,255,210,81,81,255,217,80,80,255,222,77,77,255,225, 73,73,255,223,73,73,255,208,40,40,255,190,28,28,255,190,34,34,255,229,0,0,236, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,150,0,0,100,158,0,0,249, 165,0,0,255,171,0,0,255,178,0,0,255,185,0,0,255,191,0,0,255,198,0,0,255,205,0,0, 255,211,0,0,255,218,0,0,250,226,0,0,106,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_minus(idata_minus, 16, 16, 4, 0); static const unsigned char idata_udav[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,1,255,255,0,1,255,255,0,1,255, 255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,1,255,255,0,2,255, 255,0,3,255,255,0,3,255,255,0,3,255,255,0,3,255,255,0,4,255,255,0,4,255,255,0,4, 255,255,0,3,255,255,0,3,255,255,0,2,255,255,0,2,255,255,0,1,255,255,0,1,255,255, 0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,1,255, 255,0,2,255,255,0,3,255,255,0,4,255,255,0,5,255,255,0,6,255,255,0,7,255,255,0,7, 255,255,0,8,255,255,0,8,255,255,0,8,255,255,0,8,255,255,0,9,255,255,0,8,255,255, 0,7,255,255,0,6,255,255,0,6,255,255,0,5,255,255,0,4,255,255,0,3,255,255,0,2, 255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,4,255,255,0,5,255,255,0,7, 255,255,0,8,255,255,0,9,255,255,0,11,255,255,0,13,255,255,0,13,255,255,0,13,255, 255,0,14,255,255,0,14,255,255,0,15,255,255,0,15,255,255,0,14,255,255,0,13,255, 255,0,12,255,255,0,11,255,255,0,10,255,255,0,9,255,255,0,7,255,255,0,5,255,255, 0,4,255,255,0,3,255,255,0,1,255,255,0,1,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3, 255,255,0,4,255,255,0,7,255,255,0,9,255,255,0,10,255,255,0,12,255,255,0,14,255, 255,0,16,255,255,0,18,255,255,0,20,255,255,0,20,255,255,0,21,255,255,0,21,255, 255,0,22,255,255,0,22,255,255,0,22,255,255,0,21,255,255,0,20,255,255,0,18,255, 255,0,17,255,255,0,16,255,255,0,15,255,255,0,12,255,255,0,10,255,255,0,8,255, 255,0,6,255,255,0,4,255,255,0,3,255,255,0,2,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,4,255,255,0,6,255,255,0,9,255, 255,0,11,255,255,0,14,255,255,0,17,255,255,0,19,255,255,0,21,255,255,0,23,255, 255,0,25,255,255,0,28,255,255,0,29,255,255,0,29,255,255,0,30,255,255,0,30,255, 255,0,31,255,255,0,31,255,255,0,29,255,255,0,28,255,255,0,26,255,255,0,25,255, 255,0,24,255,255,0,22,255,255,0,19,255,255,0,16,255,255,0,14,255,255,0,11,255, 255,0,9,255,255,0,7,255,255,0,4,255,255,0,3,255,255,0,1,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,2, 255,255,0,4,255,255,0,6,255,255,0,8,255,255,0,11,255,255,0,14,255,255,0,17,255, 255,0,21,255,255,0,24,255,255,0,27,255,255,0,29,255,255,0,31,255,255,0,34,255, 255,0,36,255,255,0,38,255,255,0,38,255,255,0,39,255,255,0,40,255,255,0,40,255, 255,0,40,255,255,0,39,255,255,0,37,255,255,0,35,255,255,0,34,255,255,0,32,255, 255,0,30,255,255,0,26,255,255,0,23,255,255,0,20,255,255,0,17,255,255,0,15,255, 255,0,12,255,255,0,8,255,255,0,6,255,255,0,3,255,255,0,2,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,0,1,255,255,0,2,255,255,0,4,255,255,0,8,255,255, 0,11,255,255,0,14,255,255,0,17,255,255,0,21,255,255,0,24,255,255,0,28,255,255, 0,33,255,255,0,35,255,255,0,38,255,255,0,41,255,255,0,43,255,255,0,46,255,255, 0,48,255,255,0,49,255,255,0,49,171,44,44,255,201,73,73,255,193,65,65,255,153, 26,26,255,255,255,0,47,255,255,0,45,255,255,0,44,255,255,0,42,255,255,0,38,255, 255,0,35,255,255,0,31,255,255,0,28,255,255,0,25,255,255,0,22,255,255,0,17,255, 255,0,14,255,255,0,10,255,255,0,7,255,255,0,4,255,255,0,2,255,255,0,1,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,0,1,255,255,0,3,255,255,0,5,255,255,0,8,255,255,0,12,255,255,0,16,255,255,0, 20,255,255,0,24,255,255,0,28,255,255,0,32,255,255,0,36,255,255,0,41,255,255,0, 45,255,255,0,48,255,255,0,51,255,255,0,54,255,255,0,56,255,255,0,59,153,26,26, 255,232,105,105,255,255,179,179,255,255,206,206,255,255,191,191,255,255,134,134, 255,188,60,60,255,255,255,0,56,255,255,0,54,255,255,0,52,255,255,0,48,255,255,0, 44,255,255,0,40,255,255,0,37,255,255,0,33,255,255,0,29,255,255,0,24,255,255,0, 19,255,255,0,15,255,255,0,12,255,255,0,8,255,255,0,6,255,255,0,3,255,255,0,1, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3, 255,255,0,6,255,255,0,9,255,255,0,13,255,255,0,17,255,255,0,22,255,255,0,27,255, 255,0,32,255,255,0,36,255,255,0,41,255,255,0,45,255,255,0,50,255,255,0,55,255, 255,0,58,255,255,0,61,255,255,0,64,255,255,0,67,139,11,11,255,202,74,74,255,255, 149,149,255,255,217,217,255,255,248,248,255,255,232,232,255,255,176,176,255,230, 102,102,255,167,40,40,255,255,255,0,65,255,255,0,62,255,255,0,58,255,255,0,54, 255,255,0,50,255,255,0,46,255,255,0,42,255,255,0,36,255,255,0,31,255,255,0,26, 255,255,0,21,255,255,0,17,255,255,0,13,255,255,0,9,255,255,0,6,255,255,0,3,255, 255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,6,255, 255,0,9,255,255,0,13,255,255,0,18,255,255,0,23,255,255,0,29,255,255,0,34,255, 255,0,40,255,255,0,45,255,255,0,50,255,255,0,55,255,255,0,60,255,255,0,65,255, 255,0,69,255,255,0,72,255,255,0,76,255,255,0,79,155,27,27,255,193,66,66,255,237, 109,109,255,255,146,146,255,255,165,165,255,255,157,157,255,255,127,127,255,212, 85,85,255,172,44,44,255,142,14,14,255,255,255,0,73,255,255,0,69,255,255,0,64, 255,255,0,60,255,255,0,56,255,255,0,51,255,255,0,45,255,255,0,39,255,255,0,33, 255,255,0,28,255,255,0,24,255,255,0,19,255,255,0,14,255,255,0,9,255,255,0,6,255, 255,0,3,255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,6,255,255,0,10,255,255,0, 14,255,255,0,19,255,255,0,24,255,255,0,30,255,255,0,35,255,255,0,42,255,255,0, 49,255,255,0,54,255,255,0,59,255,255,0,65,255,255,0,70,255,255,0,76,255,255,0, 81,255,255,0,84,255,255,0,87,255,255,0,91,147,20,20,255,163,36,36,255,180,53, 53,255,195,67,67,255,203,75,75,255,201,73,73,255,190,63,63,255,175,47,47,255, 157,30,30,255,142,14,14,255,255,255,0,84,255,255,0,80,255,255,0,75,255,255,0,71, 255,255,0,66,255,255,0,60,255,255,0,53,255,255,0,47,255,255,0,42,255,255,0,36, 255,255,0,31,255,255,0,24,255,255,0,19,255,255,0,14,255,255,0,9,255,255,0,5,255, 255,0,3,255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,0,2,255,255,0,5,255,255,0,9,255,255,0,14,255,255,0,20,255,255,0, 25,255,255,0,31,255,255,0,37,255,255,0,43,255,255,0,50,255,255,0,57,255,255,0, 64,255,255,0,70,255,255,0,75,255,255,0,81,255,255,0,86,255,255,0,92,255,255,0, 96,255,255,0,99,255,255,0,102,138,10,10,255,143,15,15,255,147,20,20,255,152,24, 24,255,154,27,27,255,154,27,27,255,152,24,24,255,148,20,20,255,142,15,15,255, 137,10,10,255,255,255,0,95,255,255,0,91,255,255,0,86,255,255,0,82,255,255,0,76, 255,255,0,69,255,255,0,63,255,255,0,56,255,255,0,50,255,255,0,44,255,255,0,37, 255,255,0,31,255,255,0,24,255,255,0,18,255,255,0,13,255,255,0,9,255,255,0,5,255, 255,0,3,255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,2,255,255,0,4, 255,255,0,8,255,255,0,13,255,255,0,18,255,255,0,24,255,255,0,32,255,255,0,38, 255,255,0,44,255,255,0,51,255,255,0,58,255,255,0,66,255,255,0,73,255,255,0,80, 255,255,0,86,255,255,0,92,255,255,0,97,255,255,0,103,255,255,0,108,255,255,0, 111,255,255,0,114,132,5,5,255,133,6,6,255,134,7,7,255,135,8,8,255,136,8,8,255, 136,8,8,255,136,8,8,255,135,8,8,255,134,7,7,255,133,6,6,255,255,255,0,107,255, 255,0,102,255,255,0,98,255,255,0,93,255,255,0,86,255,255,0,79,255,255,0,72,255, 255,0,66,255,255,0,59,255,255,0,52,255,255,0,44,255,255,0,37,255,255,0,30,255, 255,0,24,255,255,0,18,255,255,0,13,255,255,0,9,255,255,0,5,255,255,0,2,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,0,1,255,255,0,4,255,255,0,7,255,255,0,12,255,255,0,17,255, 255,0,23,255,255,0,30,255,255,0,37,255,255,0,45,255,255,0,52,255,255,0,60,255, 255,0,67,255,255,0,75,255,255,0,82,255,255,0,90,255,255,0,97,255,255,0,102,255, 255,0,108,255,255,0,114,255,255,0,120,255,255,0,123,255,255,0,126,130,2,2,255, 129,2,2,255,130,2,2,255,130,2,2,255,130,2,2,255,130,2,2,255,130,3,3,255,130,3,3, 255,131,3,3,255,132,5,5,255,255,255,0,119,255,255,0,114,255,255,0,109,255,255,0, 103,255,255,0,96,255,255,0,89,255,255,0,82,255,255,0,75,255,255,0,68,255,255,0, 60,255,255,0,52,255,255,0,44,255,255,0,37,255,255,0,30,255,255,0,24,255,255,0, 18,255,255,0,12,255,255,0,7,255,255,0,3,255,255,0,1,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255, 255,0,6,255,255,0,10,255,255,0,15,255,255,0,21,255,255,0,28,255,255,0,35,255, 255,0,43,255,255,0,52,255,255,0,61,255,255,0,68,255,255,0,76,255,255,0,84,255, 255,0,92,255,255,0,100,255,255,0,108,255,255,0,113,255,255,0,119,255,255,0,125, 255,255,0,131,255,255,0,135,255,255,0,138,255,255,0,142,128,1,1,255,128,1,1,255, 128,1,1,255,128,1,1,255,128,1,1,255,128,1,1,255,129,1,1,255,130,2,2,255,255,255, 0,135,255,255,0,130,255,255,0,125,255,255,0,120,255,255,0,113,255,255,0,106, 255,255,0,99,255,255,0,92,255,255,0,85,255,255,0,76,255,255,0,67,255,255,0,59, 255,255,0,51,255,255,0,43,255,255,0,36,255,255,0,29,255,255,0,22,255,255,0,16, 255,255,0,10,255,255,0,6,255,255,0,2,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,0,2,255,255,0,4,255,255,0,9,255,255,0, 14,255,255,0,20,255,255,0,26,255,255,0,34,255,255,0,41,255,255,0,50,255,255,0, 58,255,255,0,68,255,255,0,77,255,255,0,85,255,255,0,93,255,255,0,101,255,255,0, 109,255,255,0,117,255,255,0,124,255,255,0,130,255,255,0,136,255,255,0,142,255, 255,0,147,255,255,0,150,255,255,0,153,255,255,0,156,128,0,0,255,128,0,0,255,128, 0,0,255,128,0,0,255,128,0,0,255,129,1,1,255,255,255,0,150,255,255,0,146,255, 255,0,141,255,255,0,137,255,255,0,130,255,255,0,123,255,255,0,116,255,255,0,110, 255,255,0,102,255,255,0,93,255,255,0,84,255,255,0,76,255,255,0,67,255,255,0,59, 255,255,0,51,255,255,0,43,255,255,0,34,255,255,0,26,255,255,0,19,255,255,0,13, 255,255,0,8,255,255,0,4,255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,0,3,255,255,0,7,255,255,0,11,255,255,0,18,255,255,0, 25,255,255,0,32,255,255,0,40,255,255,0,48,255,255,0,56,255,255,0,65,255,255,0, 75,255,255,0,84,255,255,0,94,255,255,0,102,255,255,0,110,255,255,0,119,255,255, 0,127,255,255,0,135,255,255,0,141,255,255,0,147,255,255,0,152,255,255,0,158, 255,255,0,161,255,255,0,164,255,255,0,167,255,255,0,169,121,121,249,255,24,24, 151,255,129,1,1,255,255,255,0,167,255,255,0,165,255,255,0,161,255,255,0,157,255, 255,0,153,255,255,0,147,255,255,0,141,255,255,0,134,255,255,0,127,255,255,0,120, 255,255,0,111,255,255,0,102,255,255,0,93,255,255,0,84,255,255,0,75,255,255,0,67, 255,255,0,57,255,255,0,48,255,255,0,39,255,255,0,31,255,255,0,23,255,255,0,17, 255,255,0,11,255,255,0,7,255,255,0,3,255,255,0,1,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,0,1,255,255,0,4,255,255,0,9,255,255,0,14,255,255,0,21,255,255,0, 28,255,255,0,37,255,255,0,46,255,255,0,54,255,255,0,63,255,255,0,72,255,255,0, 82,255,255,0,92,255,255,0,101,255,255,0,111,255,255,0,120,255,255,0,128,255, 255,0,136,255,255,0,144,255,255,0,152,255,255,0,157,255,255,0,163,255,255,0,168, 255,255,0,172,255,255,0,175,255,255,0,178,93,93,221,255,43,43,170,255,3,3,131, 255,255,255,0,180,255,255,0,178,255,255,0,176,255,255,0,172,255,255,0,168,255, 255,0,164,255,255,0,157,255,255,0,151,255,255,0,144,255,255,0,137,255,255,0,128, 255,255,0,119,255,255,0,110,255,255,0,101,255,255,0,92,255,255,0,83,255,255,0, 73,255,255,0,63,255,255,0,53,255,255,0,44,255,255,0,36,255,255,0,28,255,255,0, 21,255,255,0,14,255,255,0,9,255,255,0,5,255,255,0,2,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,0,3,255,255,0,6,255,255,0,11,255,255,0,17,255,255,0,24,255, 255,0,32,255,255,0,41,255,255,0,50,255,255,0,60,255,255,0,70,255,255,0,80,255, 255,0,89,255,255,0,99,255,255,0,109,255,255,0,119,255,255,0,129,255,255,0,137, 255,255,0,145,255,255,0,153,255,255,0,161,255,255,0,167,255,255,0,173,255,255,0, 178,255,255,0,183,255,255,0,186,104,104,232,255,39,39,166,255,3,3,131,255,255, 255,0,192,255,255,0,190,255,255,0,188,255,255,0,186,255,255,0,182,255,255,0,178, 255,255,0,173,255,255,0,167,255,255,0,160,255,255,0,154,255,255,0,146,255,255,0, 137,255,255,0,128,255,255,0,119,255,255,0,110,255,255,0,100,255,255,0,90,255, 255,0,79,255,255,0,69,255,255,0,59,255,255,0,50,255,255,0,41,255,255,0,33,255, 255,0,25,255,255,0,18,255,255,0,12,255,255,0,7,255,255,0,3,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,0,1,255,255,0,4,255,255,0,8,255,255,0,14,255,255,0,20,255,255,0,28,255, 255,0,36,255,255,0,45,255,255,0,55,255,255,0,65,255,255,0,76,255,255,0,87,255, 255,0,97,255,255,0,107,255,255,0,116,255,255,0,126,255,255,0,136,255,255,0,146, 255,255,0,154,255,255,0,162,255,255,0,169,255,255,0,177,255,255,0,182,255,255,0, 187,10,10,138,255,89,89,217,255,19,19,146,255,2,2,130,255,255,255,0,201,255,255, 0,201,255,255,0,200,255,255,0,198,255,255,0,196,255,255,0,192,255,255,0,188, 255,255,0,182,255,255,0,176,255,255,0,170,255,255,0,162,255,255,0,154,255,255,0, 145,255,255,0,136,255,255,0,127,255,255,0,117,255,255,0,106,255,255,0,96,255, 255,0,85,255,255,0,75,255,255,0,65,255,255,0,55,255,255,0,46,255,255,0,37,255, 255,0,29,255,255,0,21,255,255,0,14,255,255,0,8,255,255,0,4,255,255,0,1,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,0,2,255,255,0,6,255,255,0,11,255,255,0,16,255,255,0,24,255,255,0,32,255,255, 0,40,255,255,0,50,255,255,0,60,255,255,0,70,255,255,0,81,255,255,0,92,255,255, 0,103,255,255,0,114,255,255,0,124,255,255,0,134,255,255,0,144,255,255,0,153, 255,255,0,163,255,255,0,171,255,255,0,178,255,255,0,185,45,45,173,255,71,71,198, 255,28,28,156,255,5,5,132,255,1,1,128,255,255,255,0,210,255,255,0,210,255,255,0, 211,255,255,0,209,255,255,0,208,255,255,0,205,255,255,0,201,255,255,0,197,255, 255,0,191,255,255,0,185,255,255,0,178,255,255,0,170,255,255,0,162,255,255,0,153, 255,255,0,145,255,255,0,134,255,255,0,124,255,255,0,113,255,255,0,102,255,255,0, 92,255,255,0,81,255,255,0,71,255,255,0,61,255,255,0,51,255,255,0,41,255,255,0, 32,255,255,0,23,255,255,0,16,255,255,0,10,255,255,0,5,255,255,0,2,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,0,3,255,255,0,7,255,255,0,13,255,255,0,20,255,255,0,27,255,255,0,35,255,255, 0,45,255,255,0,54,255,255,0,64,255,255,0,75,255,255,0,86,255,255,0,97,255,255, 0,108,255,255,0,120,255,255,0,131,255,255,0,141,255,255,0,151,255,255,0,160, 255,255,0,169,22,22,150,255,32,32,159,255,28,28,155,255,14,14,141,255,4,4,132, 255,1,1,128,255,0,0,128,255,38,38,165,255,255,255,0,218,255,255,0,219,255,255,0, 219,255,255,0,218,255,255,0,216,255,255,0,213,255,255,0,210,255,255,0,205,255, 255,0,199,255,255,0,193,255,255,0,186,255,255,0,178,255,255,0,170,255,255,0,161, 255,255,0,151,255,255,0,140,255,255,0,130,255,255,0,119,255,255,0,109,255,255,0, 98,255,255,0,87,255,255,0,76,255,255,0,65,255,255,0,54,255,255,0,44,255,255,0, 34,255,255,0,26,255,255,0,18,255,255,0,12,255,255,0,7,255,255,0,3,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255, 0,4,255,255,0,8,255,255,0,14,255,255,0,21,255,255,0,30,255,255,0,39,255,255,0, 49,255,255,0,59,255,255,0,69,255,255,0,80,255,255,0,91,255,255,0,102,255,255,0, 114,255,255,0,125,255,255,0,136,255,255,0,147,255,255,0,158,255,255,0,167,7,7, 134,255,6,6,133,255,4,4,131,255,2,2,129,255,0,0,128,255,0,0,128,255,4,4,132,255, 56,56,184,255,76,76,203,255,132,132,255,255,113,113,240,255,42,42,170,255,255, 255,0,225,255,255,0,223,255,255,0,221,255,255,0,217,255,255,0,212,255,255,0,207, 255,255,0,200,255,255,0,193,255,255,0,185,255,255,0,176,255,255,0,167,255,255,0, 157,255,255,0,147,255,255,0,136,255,255,0,126,255,255,0,115,255,255,0,103,255, 255,0,91,255,255,0,80,255,255,0,68,255,255,0,58,255,255,0,47,255,255,0,38,255, 255,0,29,255,255,0,21,255,255,0,14,255,255,0,8,255,255,0,4,255,255,0,1,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,4,255,255, 0,9,255,255,0,15,255,255,0,23,255,255,0,31,255,255,0,41,255,255,0,51,255,255, 0,62,255,255,0,73,255,255,0,85,255,255,0,96,255,255,0,108,255,255,0,119,255, 255,0,130,255,255,0,141,255,255,0,152,255,255,0,163,255,255,0,173,255,255,0,183, 1,1,129,255,1,1,128,255,0,0,128,255,4,4,132,255,4,4,131,255,6,6,133,255,12,12, 140,255,27,27,155,255,61,61,188,255,121,121,248,255,148,148,255,255,152,152,255, 255,57,57,185,255,255,255,0,227,255,255,0,223,255,255,0,219,255,255,0,213,255, 255,0,206,255,255,0,200,255,255,0,191,255,255,0,182,255,255,0,173,255,255,0,163, 255,255,0,153,255,255,0,142,255,255,0,130,255,255,0,119,255,255,0,107,255,255,0, 95,255,255,0,83,255,255,0,72,255,255,0,61,255,255,0,51,255,255,0,41,255,255,0, 32,255,255,0,23,255,255,0,16,255,255,0,10,255,255,0,5,255,255,0,2,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,2,255,255,0,6,255,255,0, 11,255,255,0,17,255,255,0,25,255,255,0,33,255,255,0,43,255,255,0,53,255,255,0, 64,255,255,0,76,255,255,0,88,255,255,0,100,255,255,0,112,255,255,0,124,255,255, 0,135,255,255,0,146,255,255,0,157,255,255,0,168,255,255,0,178,255,255,0,188, 255,255,0,197,4,4,131,255,2,2,129,255,1,1,128,255,1,1,128,255,1,1,128,255,1,1, 129,255,4,4,131,255,11,11,138,255,32,32,159,255,83,83,210,255,165,165,255,255, 197,197,255,255,134,134,255,255,25,25,152,255,255,255,0,224,255,255,0,219,255, 255,0,212,255,255,0,204,255,255,0,196,255,255,0,188,255,255,0,178,255,255,0,168, 255,255,0,157,255,255,0,146,255,255,0,134,255,255,0,123,255,255,0,111,255,255,0, 99,255,255,0,87,255,255,0,76,255,255,0,65,255,255,0,54,255,255,0,44,255,255,0, 35,255,255,0,26,255,255,0,18,255,255,0,11,255,255,0,6,255,255,0,2,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,3,255,255,0,7,255,255,0, 12,255,255,0,19,255,255,0,27,255,255,0,35,255,255,0,45,255,255,0,56,255,255,0, 67,255,255,0,78,255,255,0,90,255,255,0,102,255,255,0,114,255,255,0,127,255,255, 0,139,255,255,0,150,255,255,0,162,255,255,0,172,255,255,0,182,255,255,0,192, 255,255,0,201,255,255,0,209,255,255,0,217,255,255,0,223,255,255,0,229,0,0,128, 255,0,0,128,255,0,0,128,255,1,1,129,255,5,5,133,255,19,19,146,255,62,62,189,255, 149,149,255,255,223,223,255,255,181,181,255,255,54,54,182,255,255,255,0,223,255, 255,0,217,255,255,0,209,255,255,0,201,255,255,0,192,255,255,0,182,255,255,0,172, 255,255,0,161,255,255,0,150,255,255,0,138,255,255,0,127,255,255,0,115,255,255,0, 103,255,255,0,91,255,255,0,80,255,255,0,68,255,255,0,57,255,255,0,46,255,255,0, 36,255,255,0,27,255,255,0,19,255,255,0,12,255,255,0,6,255,255,0,2,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,8,255,255,0, 13,255,255,0,20,255,255,0,28,255,255,0,38,255,255,0,47,255,255,0,58,255,255,0, 69,255,255,0,81,255,255,0,93,255,255,0,105,255,255,0,117,255,255,0,129,255,255, 0,141,255,255,0,153,255,255,0,164,255,255,0,175,255,255,0,186,255,255,0,196, 255,255,0,205,255,255,0,213,255,255,0,220,255,255,0,227,255,255,0,233,255,255,0, 238,255,255,0,242,1,1,128,255,0,0,128,255,1,1,128,255,4,4,131,255,15,15,143,255, 57,57,184,255,152,152,255,255,240,240,255,255,194,194,255,255,62,62,189,255, 255,255,0,221,255,255,0,213,255,255,0,204,255,255,0,195,255,255,0,186,255,255,0, 175,255,255,0,165,255,255,0,154,255,255,0,142,255,255,0,130,255,255,0,118,255, 255,0,105,255,255,0,93,255,255,0,81,255,255,0,69,255,255,0,58,255,255,0,47,255, 255,0,37,255,255,0,28,255,255,0,20,255,255,0,13,255,255,0,7,255,255,0,3,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,8,255,255,0, 14,255,255,0,21,255,255,0,30,255,255,0,39,255,255,0,50,255,255,0,61,255,255,0, 72,255,255,0,84,255,255,0,95,255,255,0,108,255,255,0,120,255,255,0,132,255,255, 0,144,255,255,0,155,255,255,0,167,255,255,0,178,255,255,0,188,255,255,0,198, 255,255,0,207,255,255,0,216,255,255,0,224,255,255,0,230,255,255,0,236,255,255,0, 241,255,255,0,245,255,255,0,248,255,255,0,250,1,1,128,255,1,1,128,255,4,4,131, 255,18,18,145,255,69,69,196,255,174,174,255,255,251,251,255,255,177,177,255,255, 48,48,176,255,255,255,0,216,255,255,0,207,255,255,0,199,255,255,0,189,255,255, 0,178,255,255,0,167,255,255,0,156,255,255,0,144,255,255,0,131,255,255,0,119, 255,255,0,107,255,255,0,94,255,255,0,82,255,255,0,70,255,255,0,59,255,255,0,48, 255,255,0,38,255,255,0,29,255,255,0,20,255,255,0,13,255,255,0,7,255,255,0,3,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,8,255, 255,0,14,255,255,0,21,255,255,0,30,255,255,0,39,255,255,0,50,255,255,0,61,255, 255,0,72,255,255,0,84,255,255,0,96,255,255,0,109,255,255,0,121,255,255,0,134, 255,255,0,146,255,255,0,158,255,255,0,169,255,255,0,180,255,255,0,190,255,255,0, 200,255,255,0,209,255,255,0,218,255,255,0,225,255,255,0,232,255,255,0,238,255, 255,0,243,255,255,0,247,255,255,0,250,255,255,0,252,255,255,0,253,255,255,0,253, 1,1,129,255,6,6,133,255,28,28,155,255,102,102,230,255,218,218,255,255,254,254, 255,255,130,130,255,255,24,24,151,255,255,255,0,209,255,255,0,200,255,255,0,190, 255,255,0,179,255,255,0,168,255,255,0,157,255,255,0,145,255,255,0,133,255,255,0, 121,255,255,0,108,255,255,0,96,255,255,0,84,255,255,0,72,255,255,0,60,255,255,0, 49,255,255,0,39,255,255,0,30,255,255,0,21,255,255,0,14,255,255,0,8,255,255,0,3, 255,255,0,1,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,8,255, 255,0,14,255,255,0,21,255,255,0,30,255,255,0,39,255,255,0,50,255,255,0,61,255, 255,0,72,255,255,0,84,255,255,0,96,255,255,0,109,255,255,0,121,255,255,0,134, 255,255,0,146,255,255,0,158,255,255,0,169,255,255,0,180,255,255,0,191,255,255,0, 201,255,255,0,210,255,255,0,219,255,255,0,226,255,255,0,233,255,255,0,239,255, 255,0,244,255,255,0,248,255,255,0,251,255,255,0,253,255,255,0,255,255,255,0,255, 255,255,0,253,2,2,130,255,12,12,140,255,58,58,186,255,163,163,255,255,253,253, 255,255,195,195,255,255,69,69,196,255,6,6,133,255,255,255,0,201,255,255,0,191, 255,255,0,181,255,255,0,170,255,255,0,158,255,255,0,146,255,255,0,134,255,255,0, 122,255,255,0,109,255,255,0,97,255,255,0,85,255,255,0,73,255,255,0,61,255,255,0, 51,255,255,0,40,255,255,0,31,255,255,0,22,255,255,0,15,255,255,0,9,255,255,0,4, 255,255,0,1,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,8,255, 255,0,14,255,255,0,21,255,255,0,30,255,255,0,39,255,255,0,50,255,255,0,61,255, 255,0,72,255,255,0,84,255,255,0,96,255,255,0,109,255,255,0,121,255,255,0,134, 255,255,0,146,255,255,0,158,255,255,0,169,255,255,0,180,255,255,0,191,255,255,0, 201,255,255,0,210,255,255,0,219,255,255,0,226,255,255,0,233,255,255,0,239,255, 255,0,244,255,255,0,248,255,255,0,251,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,253,255,255,0,251,6,6,134,255,35,35,163,255,123,123,250,255,236,236, 255,255,252,252,255,255,110,110,238,255,23,23,151,255,255,255,0,201,255,255,0, 191,255,255,0,181,255,255,0,170,255,255,0,158,255,255,0,146,255,255,0,134,255, 255,0,122,255,255,0,109,255,255,0,97,255,255,0,85,255,255,0,73,255,255,0,61,255, 255,0,50,255,255,0,40,255,255,0,31,255,255,0,22,255,255,0,15,255,255,0,9,255, 255,0,4,255,255,0,1,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255, 0,8,255,255,0,14,255,255,0,21,255,255,0,30,255,255,0,39,255,255,0,50,255,255, 0,61,255,255,0,72,255,255,0,84,255,255,0,96,255,255,0,109,255,255,0,121,255, 255,0,134,255,255,0,146,255,255,0,158,255,255,0,169,255,255,0,180,255,255,0,190, 255,255,0,200,255,255,0,209,255,255,0,218,255,255,0,225,255,255,0,232,255,255,0, 238,255,255,0,243,255,255,0,247,255,255,0,250,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,252,255,255,0,250,4,4,132,255,24,24,151,255,101,101,228,255, 221,221,255,255,250,250,255,255,134,134,255,255,40,40,167,255,255,255,0,200,255, 255,0,190,255,255,0,179,255,255,0,168,255,255,0,157,255,255,0,145,255,255,0,133, 255,255,0,120,255,255,0,108,255,255,0,96,255,255,0,84,255,255,0,72,255,255,0,60, 255,255,0,49,255,255,0,39,255,255,0,30,255,255,0,21,255,255,0,14,255,255,0,8, 255,255,0,3,255,255,0,1,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255, 255,0,8,255,255,0,14,255,255,0,21,255,255,0,30,255,255,0,39,255,255,0,50,255, 255,0,60,255,255,0,72,255,255,0,83,255,255,0,95,255,255,0,108,255,255,0,120,255, 255,0,132,255,255,0,144,255,255,0,155,255,255,0,167,255,255,0,178,255,255,0,188, 255,255,0,198,255,255,0,207,255,255,0,216,255,255,0,224,5,5,132,255,8,8,135,255, 255,255,0,241,255,255,0,245,255,255,0,248,255,255,0,250,255,255,0,251,255,255,0, 251,255,255,0,250,255,255,0,248,255,255,0,245,20,20,147,255,98,98,225,255,219, 219,255,255,249,249,255,255,142,142,255,255,47,47,174,255,8,8,135,255,255,255,0, 189,255,255,0,178,255,255,0,167,255,255,0,156,255,255,0,144,255,255,0,131,255, 255,0,119,255,255,0,107,255,255,0,94,255,255,0,82,255,255,0,70,255,255,0,59,255, 255,0,48,255,255,0,38,255,255,0,29,255,255,0,20,255,255,0,13,255,255,0,7,255, 255,0,3,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255, 255,0,8,255,255,0,13,255,255,0,20,255,255,0,28,255,255,0,38,255,255,0,47,255, 255,0,58,255,255,0,69,255,255,0,81,255,255,0,93,255,255,0,105,255,255,0,117,255, 255,0,129,255,255,0,141,6,6,134,255,21,21,149,255,35,35,163,255,47,47,174,255, 63,63,190,255,74,74,202,255,85,85,213,255,98,98,226,255,105,105,232,255,110, 110,238,255,113,113,241,255,111,111,239,255,109,109,236,255,100,100,228,255,86, 86,213,255,72,72,200,255,56,56,183,255,35,35,163,255,20,20,148,255,23,23,150, 255,115,115,243,255,231,231,255,255,249,249,255,255,131,131,255,255,45,45,172, 255,10,10,137,255,255,255,0,186,255,255,0,175,255,255,0,165,255,255,0,153,255, 255,0,142,255,255,0,130,255,255,0,118,255,255,0,105,255,255,0,93,255,255,0,81, 255,255,0,69,255,255,0,58,255,255,0,47,255,255,0,37,255,255,0,28,255,255,0,20, 255,255,0,13,255,255,0,7,255,255,0,3,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,0,3,255,255,0,7,255,255,0,12,255,255,0,19,255,255,0,26, 255,255,0,35,255,255,0,45,255,255,0,56,255,255,0,67,255,255,0,78,255,255,0,90, 255,255,0,102,9,9,136,255,26,26,154,255,42,42,170,255,60,60,187,255,76,76,203, 255,92,92,220,255,108,108,236,255,122,122,249,255,136,136,255,255,147,147,255, 255,158,158,255,255,167,167,255,255,177,177,255,255,185,185,255,255,192,192,255, 255,199,199,255,255,203,203,255,255,203,203,255,255,200,200,255,255,190,190,255, 255,174,174,255,255,152,152,255,255,39,39,166,255,158,158,255,255,247,247,255, 255,208,208,255,255,107,107,234,255,37,37,165,255,9,9,137,255,255,255,0,182,255, 255,0,172,255,255,0,161,255,255,0,150,255,255,0,138,255,255,0,126,255,255,0,115, 255,255,0,103,255,255,0,91,255,255,0,80,255,255,0,68,255,255,0,57,255,255,0,46, 255,255,0,36,255,255,0,27,255,255,0,19,255,255,0,12,255,255,0,6,255,255,0,2,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,2,255,255,0,5,255, 255,0,11,255,255,0,17,255,255,0,25,255,255,0,33,255,255,0,43,255,255,0,53,255, 255,0,64,255,255,0,76,10,10,138,255,28,28,156,255,44,44,172,255,57,57,184,255, 69,69,197,255,81,81,209,255,92,92,219,255,101,101,228,255,108,108,236,255,115, 115,242,255,120,120,247,255,124,124,251,255,128,128,255,255,133,133,255,255,140, 140,255,255,146,146,255,255,157,157,255,255,167,167,255,255,179,179,255,255,193, 193,255,255,206,206,255,255,220,220,255,255,231,231,255,255,237,237,255,255,94, 94,222,255,218,218,255,255,251,251,255,255,165,165,255,255,76,76,204,255,26,26, 154,255,8,8,135,255,8,8,136,255,255,255,0,168,255,255,0,157,255,255,0,146,255, 255,0,134,255,255,0,123,255,255,0,111,255,255,0,99,255,255,0,87,255,255,0,76, 255,255,0,65,255,255,0,54,255,255,0,44,255,255,0,35,255,255,0,26,255,255,0,18, 255,255,0,11,255,255,0,6,255,255,0,2,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,0,1,255,255,0,4,255,255,0,9,255,255,0,15,255,255,0,23,255, 255,0,31,255,255,0,41,255,255,0,51,255,255,0,62,20,20,148,255,35,35,162,255,46, 46,174,255,53,53,181,255,58,58,185,255,63,63,190,255,68,68,195,255,71,71,199, 255,73,73,200,255,73,73,201,255,72,72,200,255,72,72,199,255,70,70,198,255,71,71, 198,255,71,71,198,255,74,74,201,255,76,76,203,255,82,82,209,255,88,88,216,255, 98,98,225,255,110,110,238,255,123,123,250,255,142,142,255,255,163,163,255,255, 63,63,191,255,191,191,255,255,253,253,255,255,201,201,255,255,112,112,240,255, 47,47,174,255,16,16,144,255,6,6,134,255,108,108,236,255,58,58,185,255,22,22, 149,255,255,255,0,142,255,255,0,130,255,255,0,119,255,255,0,107,255,255,0,95, 255,255,0,83,255,255,0,72,255,255,0,61,255,255,0,51,255,255,0,41,255,255,0,32, 255,255,0,23,255,255,0,16,255,255,0,10,255,255,0,5,255,255,0,2,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,4,255,255,0,8, 255,255,0,14,255,255,0,21,255,255,0,29,255,255,0,39,255,255,0,49,21,21,148,255, 36,36,164,255,45,45,173,255,46,46,174,255,43,43,171,255,42,42,170,255,43,43, 170,255,44,44,172,255,44,44,172,255,42,42,170,255,40,40,167,255,37,37,164,255, 34,34,162,255,32,32,159,255,31,31,158,255,29,29,157,255,30,30,157,255,30,30, 157,255,32,32,160,255,35,35,162,255,39,39,167,255,45,45,173,255,52,52,180,255, 64,64,192,255,65,65,192,255,190,190,255,255,254,254,255,255,214,214,255,255, 133,133,255,255,63,63,190,255,25,25,153,255,9,9,137,255,251,251,255,255,228,228, 255,255,188,188,255,255,127,127,254,255,68,68,195,255,25,25,152,255,255,255,0, 115,255,255,0,103,255,255,0,91,255,255,0,80,255,255,0,68,255,255,0,57,255,255,0, 47,255,255,0,38,255,255,0,29,255,255,0,21,255,255,0,14,255,255,0,8,255,255,0,4, 255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,0,3,255,255,0,7,255,255,0,13,255,255,0,20,255,255,0,27,255,255,0,35, 15,15,143,255,33,33,161,255,47,47,174,255,50,50,177,255,42,42,169,255,31,31, 159,255,26,26,153,255,26,26,153,255,26,26,154,255,25,25,153,255,23,23,150,255, 19,19,147,255,17,17,144,255,15,15,142,255,13,13,140,255,12,12,139,255,11,11, 138,255,10,10,138,255,10,10,138,255,11,11,138,255,12,12,139,255,13,13,141,255, 15,15,143,255,18,18,146,255,107,107,235,255,214,214,255,255,254,254,255,255, 209,209,255,255,133,133,255,255,68,68,195,255,31,31,158,255,12,12,140,255,6,6, 133,255,223,223,255,255,246,246,255,255,253,253,255,255,232,232,255,255,186,186, 255,255,126,126,253,255,66,66,193,255,22,22,149,255,255,255,0,87,255,255,0,76, 255,255,0,65,255,255,0,54,255,255,0,44,255,255,0,34,255,255,0,26,255,255,0,18, 255,255,0,12,255,255,0,7,255,255,0,3,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,2,255,255,0,6,255,255,0,11, 255,255,0,16,255,255,0,23,255,255,0,31,22,22,150,255,41,41,169,255,56,56,184, 255,60,60,187,255,49,49,177,255,30,30,158,255,16,16,143,255,14,14,142,255,15,15, 143,255,14,14,142,255,12,12,139,255,9,9,137,255,7,7,135,255,6,6,133,255,5,5,132, 255,4,4,132,255,4,4,131,255,3,3,131,255,3,3,131,255,3,3,131,255,3,3,131,255,4,4, 131,255,76,76,204,255,183,183,255,255,246,246,255,255,251,251,255,255,185,185, 255,255,115,115,243,255,62,62,189,255,29,29,157,255,13,13,141,255,6,6,134,255,5, 5,133,255,136,136,255,255,177,177,255,255,219,219,255,255,245,245,255,255,250, 250,255,255,223,223,255,255,169,169,255,255,104,104,231,255,46,46,173,255,9,9, 137,255,255,255,0,61,255,255,0,51,255,255,0,41,255,255,0,32,255,255,0,23,255, 255,0,16,255,255,0,10,255,255,0,5,255,255,0,2,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,4,255, 255,0,8,255,255,0,14,255,255,0,20,11,11,138,255,24,24,152,255,43,43,170,255,61, 61,189,255,75,75,202,255,75,75,203,255,61,61,189,255,37,37,165,255,13,13,140, 255,10,10,137,255,8,8,136,255,6,6,134,255,4,4,132,255,3,3,131,255,2,2,130,255,2, 2,129,255,1,1,129,255,1,1,129,255,1,1,129,255,1,1,128,255,37,37,164,255,114, 114,241,255,194,194,255,255,242,242,255,255,242,242,255,255,246,246,255,255,142, 142,255,255,86,86,214,255,48,48,176,255,24,24,151,255,11,11,139,255,6,6,133,255, 4,4,131,255,44,44,171,255,65,65,192,255,98,98,225,255,138,138,255,255,180,180, 255,255,223,223,255,255,246,246,255,255,239,239,255,255,200,200,255,255,136,136, 255,255,69,69,197,255,23,23,150,255,255,255,0,46,255,255,0,37,255,255,0,29,255, 255,0,21,255,255,0,14,255,255,0,8,255,255,0,4,255,255,0,1,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,0,3,255,255,0,6,255,255,0,11,255,255,0,17,10,10,138,255,28,28,155,255,35,35, 163,255,55,55,183,255,75,75,203,255,92,92,220,255,101,101,229,255,100,100,228, 255,90,90,217,255,73,73,200,255,56,56,184,255,40,40,168,255,30,30,158,255,24,24, 151,255,29,29,156,255,42,42,169,255,64,64,192,255,100,100,228,255,144,144,255, 255,191,191,255,255,225,225,255,255,237,237,255,255,228,228,255,255,234,234,255, 255,139,139,255,255,91,91,219,255,56,56,183,255,31,31,158,255,16,16,144,255,8,8, 136,255,4,4,132,255,3,3,131,255,10,10,138,255,16,16,144,255,27,27,155,255,45,45, 172,255,70,70,197,255,106,106,234,255,153,153,255,255,198,198,255,255,232,232, 255,255,241,241,255,255,211,211,255,255,152,152,255,255,85,85,213,255,33,33,160, 255,255,255,0,32,255,255,0,25,255,255,0,18,255,255,0,12,255,255,0,7,255,255,0,3, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,4,255,255,0,9,255,255,0, 14,8,8,135,255,14,14,142,255,25,25,152,255,45,45,173,255,55,55,183,255,75,75, 202,255,96,96,223,255,114,114,241,255,130,130,255,255,141,141,255,255,150,150, 255,255,157,157,255,255,165,165,255,255,173,173,255,255,184,184,255,255,196,196, 255,255,206,206,255,255,212,212,255,255,210,210,255,255,202,202,255,255,211,211, 255,255,141,141,255,255,109,109,236,255,75,75,202,255,50,50,177,255,30,30,157, 255,17,17,145,255,10,10,137,255,5,5,133,255,3,3,131,255,2,2,130,255,6,6,134,255, 3,3,131,255,6,6,133,255,10,10,138,255,18,18,146,255,31,31,158,255,54,54,181, 255,86,86,213,255,127,127,254,255,178,178,255,255,220,220,255,255,236,236,255, 255,218,218,255,255,163,163,255,255,94,94,221,255,38,38,165,255,7,7,134,255,255, 255,0,14,255,255,0,9,255,255,0,5,255,255,0,2,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,0,3,255,255,0,6,255,255,0,11,6,6,133,255,9,9,136,255,13, 13,141,255,21,21,148,255,30,30,158,255,65,65,192,255,72,72,200,255,81,81,208, 255,90,90,217,255,102,102,230,255,114,114,242,255,127,127,254,255,134,134,255, 255,140,140,255,255,150,150,255,255,161,161,255,255,171,171,255,255,181,181,255, 255,103,103,231,255,84,84,212,255,67,67,195,255,48,48,176,255,34,34,161,255,22, 22,150,255,14,14,141,255,9,9,136,255,5,5,133,255,3,3,131,255,2,2,129,255,2,2, 129,255,6,6,134,255,1,1,128,255,1,1,129,255,2,2,130,255,4,4,131,255,7,7,134,255, 13,13,141,255,24,24,152,255,42,42,169,255,73,73,200,255,115,115,243,255,163, 163,255,255,208,208,255,255,230,230,255,255,212,212,255,255,159,159,255,255,92, 92,219,255,38,38,165,255,5,5,133,255,255,255,0,6,255,255,0,3,255,255,0,1,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,4,255,255,0,9,5, 5,132,255,5,5,132,255,7,7,134,255,10,10,137,255,13,13,141,255,18,18,146,255, 24,24,151,255,30,30,158,255,37,37,164,255,43,43,171,255,48,48,176,255,54,54, 181,255,55,55,183,255,56,56,184,255,54,54,182,255,51,51,178,255,45,45,173,255, 38,38,166,255,32,32,159,255,24,24,152,255,18,18,146,255,13,13,140,255,9,9,136, 255,6,6,133,255,4,4,131,255,2,2,130,255,2,2,129,255,1,1,129,255,1,1,129,255,255, 255,0,146,1,1,128,255,0,0,128,255,0,0,128,255,1,1,128,255,1,1,129,255,3,3,130, 255,5,5,133,255,10,10,138,255,20,20,147,255,38,38,165,255,65,65,193,255,107,107, 235,255,159,159,255,255,204,204,255,255,223,223,255,255,205,205,255,255,150,150, 255,255,84,84,212,255,34,34,161,255,255,255,0,4,255,255,0,1,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,3,255,255,0,6, 255,255,0,10,3,3,131,255,3,3,131,255,4,4,132,255,5,5,133,255,7,7,134,255,9,9, 136,255,10,10,138,255,12,12,140,255,14,14,142,255,15,15,143,255,16,16,144,255, 16,16,144,255,16,16,144,255,15,15,143,255,14,14,141,255,12,12,139,255,10,10, 137,255,8,8,135,255,6,6,133,255,4,4,132,255,3,3,131,255,2,2,130,255,2,2,129,255, 1,1,129,255,1,1,128,255,1,1,128,255,2,2,129,255,255,255,0,139,255,255,0,134, 255,255,0,130,255,255,0,125,4,4,132,255,1,1,128,255,1,1,128,255,1,1,129,255,2,2, 130,255,4,4,132,255,9,9,136,255,18,18,146,255,35,35,162,255,65,65,193,255,108, 108,235,255,157,157,255,255,203,203,255,255,216,216,255,255,189,189,255,255,132, 132,255,255,70,70,198,255,25,25,152,255,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3,255, 255,0,7,255,255,0,11,2,2,130,255,2,2,130,255,2,2,130,255,3,3,130,255,3,3,130, 255,3,3,131,255,4,4,131,255,4,4,132,255,4,4,132,255,4,4,132,255,4,4,132,255,4,4, 132,255,4,4,131,255,3,3,131,255,3,3,130,255,2,2,130,255,2,2,129,255,1,1,129,255, 1,1,128,255,1,1,128,255,1,1,128,255,0,0,128,255,1,1,128,255,1,1,129,255,255, 255,0,131,255,255,0,129,255,255,0,127,255,255,0,123,255,255,0,118,255,255,0,114, 255,255,0,109,255,255,0,103,255,255,0,96,1,1,129,255,1,1,129,255,2,2,129,255,4, 4,132,255,9,9,136,255,19,19,146,255,37,37,165,255,68,68,195,255,116,116,244, 255,168,168,255,255,204,204,255,255,208,208,255,255,185,185,255,255,149,149,255, 255,82,82,209,255,17,17,144,255,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,2,255,255,0,4,255,255,0,8, 255,255,0,13,2,2,129,255,1,1,129,255,1,1,129,255,1,1,129,255,1,1,129,255,1,1, 129,255,1,1,129,255,1,1,129,255,1,1,129,255,1,1,129,255,1,1,128,255,1,1,128,255, 1,1,128,255,1,1,128,255,0,0,128,255,0,0,128,255,0,0,128,255,0,0,128,255,0,0, 128,255,0,0,128,255,1,1,129,255,255,255,0,122,255,255,0,121,255,255,0,119,255, 255,0,117,255,255,0,115,255,255,0,111,255,255,0,107,255,255,0,102,255,255,0,97, 255,255,0,92,255,255,0,85,255,255,0,79,255,255,0,72,1,1,129,255,2,2,130,255,4,4, 132,255,10,10,137,255,20,20,148,255,43,43,171,255,81,81,209,255,129,129,255,255, 190,190,255,255,244,244,255,255,250,250,255,255,208,208,255,255,137,137,255,255, 63,63,191,255,19,19,147,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,0,2,255,255,0,5,255,255,0,9,255, 255,0,14,3,3,130,255,1,1,129,255,1,1,128,255,1,1,128,255,0,0,128,255,0,0,128, 255,0,0,128,255,0,0,128,255,0,0,128,255,0,0,128,255,0,0,128,255,0,0,128,255,0,0, 128,255,0,0,128,255,0,0,128,255,0,0,128,255,1,1,128,255,3,3,130,255,255,255,0, 108,255,255,0,109,255,255,0,109,255,255,0,109,255,255,0,107,255,255,0,105,255, 255,0,103,255,255,0,100,255,255,0,95,255,255,0,91,255,255,0,86,255,255,0,82,255, 255,0,76,255,255,0,69,255,255,0,62,255,255,0,56,2,2,129,255,2,2,130,255,5,5,133, 255,11,11,139,255,27,27,154,255,54,54,181,255,95,95,222,255,142,142,255,255,176, 176,255,255,182,182,255,255,158,158,255,255,114,114,241,255,65,65,193,255,27,27, 154,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,6,255,255,0,10,255,255,0, 14,255,255,0,19,255,255,0,24,3,3,130,255,1,1,129,255,1,1,128,255,1,1,128,255,1, 1,128,255,0,0,128,255,0,0,128,255,0,0,128,255,1,1,128,255,1,1,129,255,2,2,130, 255,255,255,0,87,255,255,0,90,255,255,0,93,255,255,0,95,255,255,0,96,255,255,0, 96,255,255,0,97,255,255,0,96,255,255,0,94,255,255,0,92,255,255,0,90,255,255,0, 88,255,255,0,84,255,255,0,79,255,255,0,75,255,255,0,70,255,255,0,66,255,255,0, 59,255,255,0,53,255,255,0,47,255,255,0,41,255,255,0,36,3,3,130,255,7,7,134,255, 16,16,144,255,31,31,159,255,51,51,179,255,70,70,198,255,84,84,211,255,87,87, 214,255,80,80,207,255,62,62,190,255,42,42,170,255,23,23,150,255,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,0,1,255,255,0,3,255,255,0,6,255,255,0,9,255,255,0,13,255,255, 0,18,255,255,0,23,255,255,0,28,255,255,0,34,255,255,0,40,255,255,0,45,255,255, 0,50,255,255,0,55,255,255,0,60,255,255,0,65,255,255,0,69,255,255,0,72,255,255, 0,75,255,255,0,79,255,255,0,82,255,255,0,83,255,255,0,83,255,255,0,84,255,255, 0,85,255,255,0,84,255,255,0,82,255,255,0,80,255,255,0,78,255,255,0,77,255,255, 0,73,255,255,0,68,255,255,0,64,255,255,0,60,255,255,0,56,255,255,0,50,255,255, 0,44,255,255,0,39,255,255,0,33,255,255,0,28,255,255,0,23,4,4,132,255,10,10, 137,255,15,15,142,255,21,21,148,255,27,27,154,255,31,31,158,255,32,32,160,255, 30,30,158,255,26,26,154,255,20,20,147,255,13,13,141,255,7,7,135,255,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,0,1,255,255,0,3,255,255,0,5,255,255,0,9,255,255,0,13,255, 255,0,17,255,255,0,22,255,255,0,27,255,255,0,31,255,255,0,36,255,255,0,40,255, 255,0,45,255,255,0,50,255,255,0,55,255,255,0,58,255,255,0,61,255,255,0,64,255, 255,0,67,255,255,0,70,255,255,0,71,255,255,0,71,255,255,0,72,255,255,0,73,255, 255,0,72,255,255,0,71,255,255,0,69,255,255,0,67,255,255,0,65,255,255,0,62,255, 255,0,58,255,255,0,54,255,255,0,50,255,255,0,46,255,255,0,42,255,255,0,36,255, 255,0,31,255,255,0,26,255,255,0,21,255,255,0,17,255,255,0,13,6,6,133,255,6,6, 133,255,7,7,135,255,9,9,136,255,10,10,137,255,10,10,138,255,10,10,138,255,9,9, 137,255,8,8,136,255,7,7,134,255,7,7,134,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,0,1,255,255,0,3,255,255,0,5,255,255,0,8,255,255,0,12,255,255,0,16,255, 255,0,20,255,255,0,24,255,255,0,28,255,255,0,32,255,255,0,36,255,255,0,41,255, 255,0,45,255,255,0,47,255,255,0,50,255,255,0,53,255,255,0,56,255,255,0,59,255, 255,0,59,255,255,0,60,255,255,0,61,255,255,0,61,255,255,0,61,255,255,0,59,255, 255,0,57,255,255,0,56,255,255,0,54,255,255,0,52,255,255,0,48,255,255,0,44,255, 255,0,40,255,255,0,36,255,255,0,33,255,255,0,28,255,255,0,24,255,255,0,19,255, 255,0,15,255,255,0,11,255,255,0,8,4,4,132,255,2,2,130,255,2,2,130,255,3,3,130, 255,3,3,130,255,3,3,130,255,3,3,131,255,3,3,131,255,3,3,131,255,4,4,131,255,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255, 255,0,2,255,255,0,4,255,255,0,8,255,255,0,11,255,255,0,14,255,255,0,17,255,255, 0,20,255,255,0,24,255,255,0,28,255,255,0,32,255,255,0,35,255,255,0,38,255,255, 0,40,255,255,0,43,255,255,0,46,255,255,0,48,255,255,0,48,255,255,0,49,255,255, 0,50,255,255,0,50,255,255,0,50,255,255,0,48,255,255,0,47,255,255,0,45,255,255, 0,43,255,255,0,42,255,255,0,38,255,255,0,34,255,255,0,31,255,255,0,28,255,255, 0,24,255,255,0,22,255,255,0,17,255,255,0,13,255,255,0,10,255,255,0,7,255,255, 0,4,255,255,0,2,1,1,129,255,1,1,128,255,1,1,128,255,1,1,128,255,1,1,128,255,1, 1,128,255,1,1,129,255,2,2,129,255,4,4,131,255,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,2,255, 255,0,4,255,255,0,6,255,255,0,8,255,255,0,11,255,255,0,14,255,255,0,17,255,255, 0,21,255,255,0,24,255,255,0,26,255,255,0,29,255,255,0,31,255,255,0,34,255,255, 0,36,255,255,0,38,255,255,0,38,255,255,0,39,255,255,0,39,255,255,0,40,255,255, 0,40,255,255,0,38,255,255,0,37,255,255,0,35,255,255,0,34,255,255,0,32,255,255, 0,29,255,255,0,26,255,255,0,23,255,255,0,20,255,255,0,17,255,255,0,15,255,255, 0,12,255,255,0,8,255,255,0,6,255,255,0,3,255,255,0,2,255,255,255,0,255,255, 255,0,1,1,128,255,0,0,128,255,0,0,128,255,0,0,128,255,0,0,128,255,1,1,128,255,2, 2,130,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,3, 255,255,0,4,255,255,0,6,255,255,0,9,255,255,0,11,255,255,0,14,255,255,0,16,255, 255,0,19,255,255,0,21,255,255,0,23,255,255,0,25,255,255,0,27,255,255,0,28,255, 255,0,29,255,255,0,29,255,255,0,30,255,255,0,30,255,255,0,31,255,255,0,29,255, 255,0,28,255,255,0,26,255,255,0,25,255,255,0,23,255,255,0,22,255,255,0,19,255, 255,0,16,255,255,0,13,255,255,0,11,255,255,0,9,255,255,0,7,255,255,0,4,255,255, 0,2,255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,1,1,128,255,1,1,128,255,1,1,129,255,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1, 255,255,0,3,255,255,0,4,255,255,0,6,255,255,0,9,255,255,0,10,255,255,0,12,255, 255,0,14,255,255,0,15,255,255,0,17,255,255,0,19,255,255,0,20,255,255,0,20,255, 255,0,21,255,255,0,21,255,255,0,22,255,255,0,22,255,255,0,21,255,255,0,20,255, 255,0,18,255,255,0,17,255,255,0,16,255,255,0,15,255,255,0,12,255,255,0,10,255, 255,0,8,255,255,0,6,255,255,0,4,255,255,0,3,255,255,0,2,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,0,1,255,255,0,3,255,255,0,4,255,255,0,5,255,255,0,7,255,255,0,8, 255,255,0,9,255,255,0,11,255,255,0,13,255,255,0,13,255,255,0,13,255,255,0,14, 255,255,0,14,255,255,0,14,255,255,0,15,255,255,0,14,255,255,0,13,255,255,0,12, 255,255,0,11,255,255,0,9,255,255,0,9,255,255,0,7,255,255,0,5,255,255,0,4,255, 255,0,2,255,255,0,1,255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,0,1,255,255,0,2,255,255,0,3,255,255,0,4,255,255, 0,5,255,255,0,6,255,255,0,7,255,255,0,7,255,255,0,7,255,255,0,8,255,255,0,8, 255,255,0,8,255,255,0,9,255,255,0,8,255,255,0,7,255,255,0,6,255,255,0,5,255,255, 0,5,255,255,0,4,255,255,0,3,255,255,0,2,255,255,0,1,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,1,255, 255,0,2,255,255,0,3,255,255,0,3,255,255,0,3,255,255,0,3,255,255,0,3,255,255,0,4, 255,255,0,4,255,255,0,3,255,255,0,3,255,255,0,2,255,255,0,2,255,255,0,1,255,255, 0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,0,1,255,255,0,1,255,255, 0,1,255,255,0,1,255,255,0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0}; MGL_EXPORT Fl_RGB_Image img_udav(idata_udav, 64, 64, 4, 0); static const unsigned char idata_fname[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,127,180,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,137,0,83,64,180,65,216,91,195,91,253,64,180,65,217,0,137,0,83,0,0, 0,0,84,127,181,201,81,128,183,255,81,127,183,255,82,127,183,255,82,126,184, 255,86,132,187,212,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,80,69,198,69,255,135,219,120, 254,255,255,255,255,135,220,120,254,69,198,69,255,0,140,0,83,73,114,166,255,143, 185,239,255,142,182,234,255,144,184,235,255,147,187,239,255,75,121,177,254,81, 127,183,255,81,128,185,255,88,125,200,255,1,154,14,255,45,182,26,254,61,170,0, 255,255,255,255,255,61,170,0,255,45,182,26,254,0,158,0,216,61,99,146,255,134, 175,225,255,86,140,205,255,88,140,207,255,121,163,216,255,138,175,224,255,136, 175,225,255,135,175,225,255,145,174,246,255,0,136,0,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,139,0,253,47,81,122, 255,119,162,214,255,82,131,194,255,85,133,194,255,82,132,194,255,79,127,191,255, 58,106,163,255,46,91,147,255,51,87,160,255,0,160,0,255,0,151,0,255,11,134,0, 255,255,255,255,255,11,134,0,255,0,151,0,255,0,172,0,215,32,61,96,255,73,112, 159,255,39,83,138,255,42,85,139,255,42,85,140,255,34,76,127,255,109,143,177,255, 190,221,244,255,191,219,246,255,124,206,162,255,0,176,0,255,0,151,0,255,255,255, 255,255,0,151,0,255,0,178,0,255,84,180,114,194,84,121,159,255,199,228,248,255, 186,218,241,255,188,220,242,255,188,220,242,255,187,219,243,255,180,212,237,255, 142,177,220,255,137,173,219,255,145,173,229,255,95,185,150,255,5,183,12,255,0, 158,0,255,6,184,12,255,101,193,159,255,80,97,126,255,83,124,169,255,139,176,223, 255,135,170,217,255,135,170,217,255,134,170,217,255,134,170,217,255,136,171,218, 255,135,174,218,255,140,174,218,255,139,174,219,255,140,174,223,255,149,173,236, 255,153,173,242,255,149,173,235,255,147,181,232,255,78,99,125,255,82,123,170, 255,141,177,223,255,135,172,218,255,135,172,218,255,137,172,218,255,134,172,218, 255,135,172,218,255,135,172,218,255,134,172,218,255,138,172,218,255,134,172,218, 255,135,172,218,255,135,172,218,255,135,172,217,255,140,179,228,255,78,98,125, 255,81,122,170,255,137,175,222,255,132,170,217,255,133,170,217,255,131,170,217, 255,133,170,217,255,131,169,217,255,132,170,217,255,133,170,217,255,132,170,217, 255,131,170,217,255,133,170,217,255,132,170,217,255,132,169,217,255,139,177,227, 255,74,97,124,255,80,121,169,255,135,172,221,255,128,167,216,255,129,167,216, 255,129,167,216,255,130,167,216,255,129,167,216,255,130,167,216,255,128,167,216, 255,128,167,216,255,128,167,216,255,130,167,216,255,129,167,216,255,129,167,216, 255,135,174,225,255,73,95,123,255,81,122,170,255,137,174,224,255,131,169,219, 255,131,169,219,255,134,169,219,255,133,169,219,255,135,169,219,255,133,169,219, 255,132,169,219,255,133,169,219,255,134,169,219,255,132,169,219,255,134,169,219, 255,132,169,218,255,137,177,228,255,75,95,124,255,57,103,155,255,64,118,180,255, 63,116,176,255,63,116,176,255,63,116,176,255,62,116,176,255,64,116,176,255,63, 116,176,255,64,116,176,255,63,116,176,255,63,116,176,255,63,116,176,255,63,116, 176,255,63,116,176,255,67,122,185,255,39,68,102,255,88,127,173,255,135,173,223, 255,132,169,218,255,133,169,218,255,134,169,218,255,133,169,218,255,132,169,218, 255,132,169,218,255,133,169,218,255,134,169,218,255,133,169,218,255,131,169,218, 255,133,169,218,255,132,169,218,255,138,176,227,255,80,100,129,255,74,117,167, 185,129,168,221,255,125,163,217,255,126,164,217,255,124,163,217,255,120,163,217, 255,125,163,217,255,126,164,217,255,126,164,217,255,126,163,217,255,121,163,217, 255,122,163,217,255,126,164,217,255,126,163,216,255,129,169,224,255,70,95,128, 174,0,22,53,68,0,18,48,129,0,18,48,130,0,17,47,132,0,18,47,133,0,17,46,134,0,17, 46,136,0,17,46,137,0,16,45,137,0,17,46,136,0,17,46,134,0,17,47,133,0,17,47,132, 0,18,48,130,0,17,48,129,0,25,58,69}; MGL_EXPORT Fl_RGB_Image img_fname(idata_fname, 16, 16, 4, 0); static const unsigned char idata_curve[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,117,171,247,9,117,171,247,113,117,171,247,175,117,171,247,221,117,171, 247,207,117,171,247,173,117,171,247,78,255,255,255,0,255,255,255,0,255,255,255, 0,246,0,0,162,246,0,0,169,255,255,255,0,255,255,255,0,255,255,255,0,102,162, 246,68,102,162,246,223,102,162,246,163,102,162,246,83,102,162,246,32,102,162, 246,44,102,162,246,89,102,162,246,214,102,162,246,185,102,162,246,17,255,255, 255,0,246,0,0,178,215,0,16,213,0,0,116,11,255,255,255,0,87,153,245,37,87,153, 245,234,87,153,245,63,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,87,153,245,5,87,153,245,159,87,153,245,156,255,255,255,0,255,255, 255,0,0,0,121,21,6,0,127,131,255,255,255,0,72,143,244,151,72,143,244,128,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,72,143,244,13,5,7,53,255,5,7,53,255,255,255,255,0,255,255,255,0, 255,255,255,0,7,0,126,71,53,125,234,172,57,134,242,87,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,5,7,53,255,5,7,53,255,255,255,255,0,255,255,255,0,255,255,255,0,11,0, 122,23,16,34,157,198,43,124,240,169,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,19, 76,202,12,235,5,11,253,244,1,2,250,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,244, 1,2,250,246,0,0,255,8,68,193,20,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,8,95,229, 160,9,84,217,164,0,0,128,10,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,9,104,239,14,8,94,228,227,6, 17,145,175,0,0,128,10,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,9,104,239,89,9,92,226,190,11,0, 122,23,0,0,128,10,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,9,104,239,44,9,104,239,216,11,0,122,23,5,0,127,147, 0,0,128,10,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,9,104,239,106,9,104,239,174,255,255,255,0,12,0,128,22,215,0,17,199, 246,0,0,188,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,9,104,239,87,9,104, 239,230,9,104,239,48,255,255,255,0,255,255,255,0,246,0,0,188,246,0,0,203,255,0, 0,1,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,9,5, 53,255,9,5,53,255,9,104,239,223,9,104,239,224,9,104,239,43,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,0,0,1,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,9,5,53,255,9,5,53,255,9,104, 239,36,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0}; MGL_EXPORT Fl_RGB_Image img_curve(idata_curve, 16, 16, 4, 0); static const unsigned char idata_svn[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,248,248,93,250,250,250,167,251,251,251, 212,252,252,252,235,252,252,252,239,252,252,252,224,250,250,250,189,249,249,249, 129,248,248,248,29,0,0,0,0,239,239,239,0,0,0,0,0,0,0,0,0,0,0,0,0,235,235,235,74, 238,238,238,253,242,242,242,255,244,244,244,254,247,247,247,255,249,249,249,255, 249,249,249,255,248,248,248,255,246,246,246,255,243,243,243,255,240,240,240,255, 237,237,237,170,0,0,0,0,225,225,225,0,125,125,125,0,222,222,222,41,226,226,226, 255,226,226,226,254,230,230,230,255,238,238,238,255,240,240,240,255,242,242,242, 255,243,243,243,255,242,242,242,255,239,239,239,255,235,235,235,255,229,229,229, 255,225,225,225,255,225,225,225,165,0,0,0,0,0,0,0,0,196,196,196,112,212,212,212, 255,210,210,210,255,217,217,217,255,223,223,223,255,226,226,226,255,228,228,228, 255,229,229,229,255,227,227,227,255,225,225,225,255,221,221,221,255,213,213,213, 255,212,212,212,255,204,204,204,233,0,0,0,0,0,0,0,0,150,150,150,116,178,178,178, 255,198,198,198,255,196,196,196,255,196,196,196,255,200,200,200,255,202,202,202, 255,202,202,202,255,202,202,202,255,198,198,198,255,197,197,197,255,198,198,198, 255,191,191,191,255,155,155,155,237,0,0,0,0,0,0,0,0,136,136,136,116,135,135,135, 255,180,180,180,255,194,194,194,255,195,195,195,255,196,196,196,255,196,196,196, 255,197,197,197,255,197,197,197,255,197,197,197,255,192,192,192,255,188,188,188, 255,173,173,173,255,113,113,113,236,0,0,0,0,0,0,0,0,147,147,147,118,118,118,118, 255,115,115,115,255,163,163,163,255,225,225,225,255,206,206,206,255,212,211,212, 255,214,214,214,255,204,204,204,255,221,221,221,255,209,209,209,255,105,105,105, 255,125,125,125,255,135,135,135,239,0,0,0,0,0,0,0,0,140,140,140,114,131,131,131, 255,151,151,151,255,130,130,130,255,170,170,170,255,154,158,163,255,94,118,155, 255,99,122,159,255,122,139,165,255,166,166,165,255,144,144,144,255,133,133,133, 255,167,167,167,255,113,113,113,235,0,0,0,0,0,0,0,0,141,141,141,119,125,125,125, 255,111,111,111,255,152,152,152,255,231,231,231,255,100,123,156,255,152,178,196, 255,144,171,192,255,75,110,153,255,229,227,223,255,208,208,208,255,98,98,98,255, 127,127,127,255,134,134,134,239,0,0,0,0,0,0,0,0,94,94,94,47,125,125,125,255,157, 156,155,254,80,101,133,255,114,139,176,255,61,102,165,255,101,128,156,255,98, 127,157,255,66,107,164,255,116,140,177,255,84,108,145,255,123,129,138,255,165, 165,165,255,89,89,89,168,0,0,0,0,0,0,0,0,0,0,0,0,71,71,71,80,113,112,111,249,42, 62,92,255,73,100,133,254,84,112,146,255,85,116,155,255,86,118,158,255,84,114, 152,255,79,107,140,255,69,93,126,255,87,93,102,255,106,106,106,171,0,0,0,0,61, 61,61,0,0,0,0,0,59,59,59,0,0,0,0,0,0,0,0,1,68,68,69,92,28,53,86,243,74,108,157, 254,92,125,175,255,98,132,180,255,91,124,171,255,69,98,141,255,15,30,52,173,55, 53,49,35,0,0,0,0,61,61,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,59,59,59,0,0,0,0,0, 0,13,40,56,65,98,140,255,106,143,196,255,112,149,202,255,102,140,195,254,26, 47,75,216,0,0,0,0,77,77,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,7,23,42,143,123,161,207,255,144,179,230,254,65,93,122, 255,0,0,5,19,7,24,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,6,22,45,0,0,0,0,0,32,53,68,222,112,154,190,255,0,0,0,87,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,2,10,21,0,0,0,0,27,28,53,60,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_svn(idata_svn, 16, 16, 4, 0); static const unsigned char idata_adjust[] = {0,0,0,24,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0, 0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,24,0,0,0, 51,243,243,244,255,243,243,244,255,243,243,244,255,243,243,244,255,243,243,244, 255,243,243,244,255,243,243,244,255,243,243,244,255,243,243,244,255,243,243,244, 255,243,243,244,255,243,243,244,255,243,243,244,255,243,243,244,255,0,0,0,51,0, 0,0,51,222,222,224,255,222,222,224,255,222,222,224,255,222,222,224,255,222, 222,224,255,222,222,224,255,222,222,224,255,222,222,224,255,222,222,224,255,222, 222,224,255,222,222,224,255,222,222,224,255,222,222,224,255,222,222,224,255,0,0, 0,51,0,0,0,51,207,207,209,255,207,207,209,255,207,207,209,255,207,207,209,255, 207,207,209,255,207,207,209,255,207,207,209,255,207,207,209,255,207,207,209,255, 207,207,209,255,207,207,209,255,207,207,209,255,207,207,209,255,207,207,209,255, 0,0,0,51,0,0,0,51,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,0,0,0,51,0,0,0,51,255,255,255,255,185,60,60,255,198,94,94,255,222,161,161, 255,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,254,253,253,255,221,160,160,255,197,94,94,255,186,62,62,255,255,255,255,255, 0,0,0,51,0,0,0,51,255,255,255,255,197,93,93,255,164,0,0,255,221,159,159,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,220,156,156,255,164,0,0,255,198,96,96,255,255,255,255,255,0,0,0, 51,0,0,0,51,255,255,255,255,221,160,160,255,220,158,158,255,193,82,82,255,247, 231,231,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246, 230,230,255,193,82,82,255,220,157,157,255,222,162,162,255,255,255,255,255,0,0,0, 51,0,0,0,51,255,255,255,255,254,253,253,255,255,255,255,255,246,231,231,255, 247,233,233,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 247,232,232,255,247,232,232,255,255,255,255,255,254,253,253,255,255,255,255,255, 0,0,0,51,0,0,0,51,255,255,255,255,254,253,253,255,255,255,255,255,247,233,233, 255,246,229,229,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,245,228,228,255,248,234,234,255,255,255,255,255,254,253,253,255,255,255,255, 255,0,0,0,51,0,0,0,51,255,255,255,255,223,165,165,255,219,153,153,255,193,82,82, 255,246,229,229,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,245,228,228,255,193,82,82,255,218,152,152,255,224,168,168,255,255,255,255, 255,0,0,0,51,0,0,0,51,255,255,255,255,200,100,100,255,164,0,0,255,218,151,151, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,216,147,147,255,164,0,0,255,201,103,103,255,255,255,255,255, 0,0,0,51,0,0,0,51,255,255,255,255,188,67,67,255,198,94,94,255,221,160,160,255, 254,253,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 254,252,252,255,221,159,159,255,197,94,94,255,189,70,70,255,255,255,255,255,0,0, 0,51,0,0,0,51,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,0,0,51,0,0,0,24,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0, 51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,51,0,0,0,24,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_adjust(idata_adjust, 16, 16, 4, 0); static const unsigned char idata_reload[] = {255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,77,0,35,0,79,0, 126,3,91,3,192,36,118,36,241,55,130,55,243,22,104,22,201,0,80,0,133,0,77,0,36, 255,255,255,0,255,255,255,0,0,77,0,28,0,77,0,32,255,255,255,0,255,255,255,0,0, 77,0,2,0,78,0,115,19,112,19,247,94,165,94,255,121,186,121,255,146,206,146,255, 149,208,149,255,134,193,134,255,99,168,99,255,18,110,18,247,0,79,0,122,0,77,0, 69,15,104,14,242,8,89,7,234,255,255,255,0,0,77,0,2,2,84,1,193,59,140,57,250, 124,189,124,255,126,195,126,255,126,195,126,255,126,195,126,255,126,195,126,255, 126,195,126,255,126,195,126,255,123,189,123,255,65,143,63,250,18,114,15,251,115, 182,114,255,4,95,2,255,255,255,255,0,1,79,0,116,50,124,45,250,112,180,112,255, 109,179,109,255,110,179,110,255,91,160,91,255,64,135,64,255,65,134,65,255,100, 163,100,255,109,179,109,255,109,179,109,255,111,180,111,255,111,178,111,255,113, 181,113,255,6,95,3,255,0,77,0,39,21,101,16,247,87,156,87,255,93,164,93,255,90, 160,90,255,40,111,40,255,3,78,2,255,10,75,7,255,19,81,16,255,5,79,3,255,22,106, 22,255,76,157,76,255,93,171,93,255,93,170,93,255,96,169,96,255,8,96,5,255,1,78, 0,132,48,116,44,254,76,148,76,255,76,148,76,255,31,104,31,255,10,82,5,254,14, 86,7,248,4,80,2,180,3,79,2,177,13,81,7,248,6,98,3,254,6,125,6,255,68,167,68, 255,76,166,76,255,77,160,77,255,11,97,6,255,8,88,5,197,47,113,44,255,58,132,58, 255,44,117,44,255,4,76,2,255,14,86,7,245,0,77,0,36,255,255,255,0,0,77,0,49,13, 82,7,246,5,143,4,255,28,174,28,255,55,178,55,255,59,166,59,255,44,143,44,255, 12,95,6,254,13,95,7,245,39,110,39,255,43,117,43,255,21,97,21,255,7,73,4,255,3, 80,2,176,255,255,255,0,255,255,255,0,12,86,8,69,18,100,10,255,18,160,16,255,24, 151,21,255,24,136,21,255,11,113,8,255,10,102,6,255,6,87,3,182,10,91,5,250,8,80, 8,255,8,84,8,255,3,91,3,255,8,86,4,255,2,80,1,185,255,255,255,0,255,255,255,0, 255,255,255,0,0,77,0,8,0,77,0,23,5,77,3,24,5,78,2,21,3,79,1,18,0,78,0,13,255, 255,255,0,4,84,2,196,8,70,4,255,0,89,0,255,0,110,0,255,7,120,4,255,9,88,4,247,0, 77,0,39,255,255,255,0,255,255,255,0,0,77,0,34,2,78,1,185,6,123,4,44,2,126,0,25, 8,108,4,13,13,92,7,5,255,255,255,0,0,78,0,122,12,76,7,254,0,107,0,255,0,130,0, 255,5,143,2,255,26,134,7,254,10,92,6,244,1,78,0,169,1,79,1,170,7,83,4,244,22, 112,12,189,18,151,10,108,11,146,5,76,3,141,1,50,11,100,6,26,0,96,0,0,0,77,0,41, 9,85,5,247,9,118,5,255,3,142,1,255,13,147,7,255,24,154,13,255,43,158,23,255, 38,139,20,254,41,139,21,254,50,163,25,250,40,164,21,220,32,159,17,175,22,153, 11,134,17,140,9,103,8,101,4,32,255,255,255,0,255,255,255,0,0,77,0,116,19,101, 10,250,11,146,6,255,22,153,11,255,35,161,18,255,47,168,24,255,49,177,26,255,44, 185,23,255,44,184,23,255,51,174,27,255,44,166,23,217,37,159,21,174,10,94,6,220, 0,77,0,64,255,255,255,0,255,255,255,0,0,77,0,1,0,77,0,184,27,112,14,248,38, 155,20,255,43,166,23,255,48,179,25,255,35,199,18,255,27,211,14,255,28,209,15, 255,38,195,20,255,58,170,30,252,28,115,15,238,0,78,0,178,0,77,0,1,255,255,255,0, 255,255,255,0,255,255,255,0,0,77,0,1,0,77,0,109,13,95,8,244,22,129,12,253,49, 169,26,255,41,207,22,255,30,226,16,255,33,198,18,255,13,143,7,254,10,89,5,244,0, 77,0,122,0,77,0,6,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,0,77,0,31,0,77,0,127,0,77,0,186,3,79,1,237,2,78,1,238,0, 77,0,192,0,77,0,133,0,77,0,29,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0}; MGL_EXPORT Fl_RGB_Image img_reload(idata_reload, 16, 16, 4, 0); static const unsigned char idata_zoom12[] = {0,0,0,0,230,230,229,0,0,0,0,0,238,238,236,104,214,215,215,199,168,171,176, 241,162,165,170,242,191,193,193,202,202,202,199,115,0,0,0,0,177,178,176,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,224,223,0,232,233,234,9,218,219,219,220, 152,161,173,243,185,193,205,238,239,245,254,240,235,242,252,236,180,192,210,230, 144,155,172,237,164,166,166,230,165,166,165,20,158,159,157,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,215,214,215,218,150,164,184,229,235,244,254,231,229,238, 248,223,228,238,249,218,226,237,249,214,221,233,248,213,220,232,249,216,161,177, 202,221,157,160,160,234,0,0,0,0,131,133,130,0,0,0,0,0,0,0,0,0,0,0,0,0,217,216, 214,104,156,169,187,237,220,232,249,220,234,246,255,202,223,236,250,197,226,240, 250,187,226,241,251,182,237,253,255,174,226,244,255,180,207,224,247,203,139,157, 183,222,210,209,204,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,196,196,198,156,177, 211,210,223,241,255,190,43,64,93,255,243,255,255,156,246,255,255,141,253,255, 255,133,51,70,100,255,58,79,111,255,255,255,255,184,138,173,219,182,142,146,147, 231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,169,177,239,145,180,228,181,135,159,183, 195,108,135,170,246,255,255,255,110,70,90,116,229,249,255,255,86,255,255,255, 165,255,255,255,145,58,79,109,255,152,198,251,142,102,112,123,251,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,154,162,171,240,92,146,215,153,237,255,255,187,96,124,159, 240,210,255,255,41,255,255,255,162,171,255,255,23,187,202,211,173,63,84,116,255, 122,161,179,108,153,198,246,137,99,110,121,248,78,80,75,3,0,0,0,0,0,0,0,0,0,0,0, 0,159,162,162,207,94,143,209,164,137,198,248,101,100,127,161,244,220,255,255, 40,255,255,255,16,255,255,255,15,67,87,114,255,0,0,0,0,240,255,255,52,158,199, 245,148,96,101,103,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,164,159,120,126,153, 189,204,172,212,249,137,94,120,157,247,255,255,255,25,91,109,132,255,255,255, 255,1,92,115,137,67,67,89,120,255,63,85,114,255,152,181,216,176,85,85,78,145,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,199,201,201,235,147,179,222,182,239,255, 255,184,163,239,248,45,255,255,255,155,148,227,237,8,255,255,255,4,255,255,255, 167,249,255,255,197,96,102,104,236,75,78,77,4,85,87,83,0,0,0,0,0,0,0,0,0,0,0,0, 0,165,166,164,0,121,125,121,21,129,133,133,235,100,134,179,177,146,202,254, 114,187,239,255,75,218,255,255,75,213,248,255,98,158,185,211,160,104,108,110, 253,146,148,144,169,90,92,89,41,111,112,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 121,122,119,0,0,0,0,0,98,97,90,136,90,96,96,231,95,107,119,240,100,112,123,236, 99,104,107,237,87,86,80,150,73,74,73,33,229,228,228,255,148,149,146,245,38,41, 35,10,98,100,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83, 84,80,4,80,82,78,6,0,0,0,0,0,0,0,0,0,0,0,0,143,143,143,140,231,232,231,255,136, 137,134,223,0,0,0,0,91,93,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,91,91,0,0,0,0,0,158,158,158,183,223,224, 223,255,126,127,124,192,0,0,0,0,85,85,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,101,101,0,0,0,0,0,174,175,174, 215,209,211,209,255,120,121,118,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,112,111,0,0,0,0,6,197, 198,197,221,175,176,174,159,0,0,0,0}; MGL_EXPORT Fl_RGB_Image img_zoom12(idata_zoom12, 16, 16, 4, 0); static const unsigned char idata_zoom21[] = {0,0,0,0,0,0,0,0,0,0,0,0,233,235,234,13,238,238,236,148,192,194,197,221,162, 166,171,246,168,171,175,233,203,203,200,178,198,198,196,59,0,0,0,0,168,169,167, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,237,236,69,189,192,197, 255,159,168,181,238,210,218,227,239,243,248,255,239,221,229,241,234,161,174,192, 229,143,151,163,250,177,176,171,159,0,0,0,0,148,149,147,0,0,0,0,0,0,0,0,0,0,0,0, 0,214,214,213,0,226,227,226,42,181,187,193,255,196,207,224,231,230,239,250, 227,228,238,250,221,227,237,249,216,226,236,250,213,221,232,247,214,215,228,248, 218,132,146,164,234,174,174,170,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206, 207,207,213,167,184,207,223,228,241,255,211,234,247,255,198,224,238,251,193,227, 240,251,185,225,240,250,181,219,236,250,182,225,243,255,186,196,216,241,208,165, 174,185,250,117,118,115,22,0,0,0,0,0,0,0,0,0,0,0,0,202,201,200,27,158,167,182, 249,215,233,255,205,50,70,97,255,56,79,110,255,255,255,255,141,231,249,252,145, 247,255,255,132,254,255,255,130,44,64,93,255,229,245,255,192,111,139,176,202, 157,156,151,129,0,0,0,0,0,0,0,0,0,0,0,0,196,196,191,85,124,146,178,219,177,204, 240,180,249,255,255,206,255,255,255,179,57,78,110,255,255,255,255,90,69,89,116, 221,115,146,162,123,107,134,168,239,190,227,254,123,107,150,207,170,110,109,101, 185,0,0,0,0,0,0,0,0,0,0,0,0,183,183,178,88,121,144,177,215,113,167,231,135,181, 199,212,194,60,81,112,255,123,155,172,98,184,255,255,30,254,255,255,153,255,255, 255,149,95,123,158,236,180,238,255,81,123,165,221,165,101,100,92,187,0,0,0,0,0, 0,0,0,0,0,0,0,169,170,167,38,132,148,168,236,125,178,242,135,66,84,108,255, 255,255,255,22,255,255,255,27,193,243,249,34,255,255,255,6,255,255,255,14,101, 127,162,243,204,252,255,84,131,160,198,186,84,84,76,135,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,162,165,164,227,123,165,219,171,127,161,191,142,65,85,116,255,67,87, 117,255,0,0,0,0,94,112,135,255,0,0,0,0,93,121,157,245,211,245,255,119,109,121, 135,238,80,81,76,33,85,87,83,0,0,0,0,0,0,0,0,0,169,172,169,0,177,178,174,60,189, 196,207,249,142,188,242,144,251,255,255,166,255,255,255,153,129,225,238,14,255, 255,255,141,200,242,247,19,255,255,255,186,145,171,201,184,88,88,81,162,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,153,148,97,109,121,133,242,107, 157,215,146,159,215,255,93,206,249,255,77,218,255,255,72,198,235,255,117,132, 150,169,200,119,120,116,255,126,128,125,117,0,0,0,0,85,86,82,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,100,101,95,36,93,94,88,183,91,99,106,243,100,111,124, 234,101,110,119,244,98,100,97,215,78,78,73,90,181,182,181,130,222,222,221,255, 119,120,118,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,94,90,0,0,0, 0,0,0,0,0,0,84,86,82,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,187,188,187,232,202, 203,202,255,112,113,109,123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,118,118,0,55,55,55,17,200,201, 200,251,183,184,182,255,102,103,100,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,192,192,0,96,96, 96,43,211,211,211,255,166,167,166,255,94,96,91,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 119,120,119,75,214,215,214,249,143,145,142,61}; MGL_EXPORT Fl_RGB_Image img_zoom21(idata_zoom21, 16, 16, 4, 0); static const unsigned char idata_pause[] = {255,0,255,0,255,0,255,0,133,38,131,129,129,181,127,231,127,231,129,181,131, 129,133,38,255,0,255,0,255,0,255,0,255,0,255,0,127,1,125,113,121,246,114,255, 116,255,127,255,127,255,116,255,114,255,121,246,125,113,127,1,255,0,255,0,255,0, 122,1,121,182,111,255,119,255,186,255,208,255,217,255,219,255,212,255,186,255, 118,255,111,255,121,182,122,1,255,0,255,0,115,113,107,255,142,255,211,255,232, 255,239,255,242,255,243,255,241,255,234,255,221,255,141,255,107,255,115,113,255, 0,113,38,108,246,115,255,213,255,237,255,246,255,251,255,253,255,253,255,252, 255,250,255,241,255,226,255,116,255,108,246,113,38,106,129,97,255,190,255,236, 255,246,255,152,255,133,255,255,255,255,255,119,255,97,255,252,255,241,255,208, 255,97,255,106,128,101,181,102,255,206,255,241,255,252,255,146,255,108,255,255, 255,255,255,111,255,64,255,255,255,250,255,233,255,104,255,101,181,96,231,115, 255,208,255,239,255,252,255,119,255,75,255,255,255,255,255,96,255,34,255,255, 255,252,255,239,255,123,255,96,231,93,231,114,255,213,255,241,255,253,255,77, 255,0,255,255,255,255,255,77,255,0,255,255,255,253,255,241,255,124,255,93,231, 91,181,96,255,208,255,239,255,252,255,82,255,27,255,255,255,255,255,82,255,27, 255,255,255,252,255,239,255,100,255,91,181,91,129,84,255,184,255,233,255,250, 255,94,255,54,255,255,255,255,255,94,255,54,255,255,255,250,255,219,255,84,255, 91,128,89,38,85,246,103,255,221,255,241,255,252,255,255,255,255,255,255,255, 255,255,255,255,252,255,241,255,115,255,85,246,89,38,255,0,86,113,80,255,134, 255,226,255,241,255,250,255,252,255,253,255,252,255,250,255,241,255,154,255,80, 255,86,113,255,0,255,0,87,1,86,182,79,255,104,255,208,255,233,255,239,255,241, 255,239,255,219,255,114,255,79,255,86,182,87,1,255,0,255,0,255,0,86,1,84,113,82, 246,79,255,93,255,118,255,120,255,95,255,79,255,82,246,84,113,86,1,255,0,255,0, 255,0,255,0,255,0,255,0,85,38,84,129,82,181,81,231,81,231,82,181,84,129,85,38, 255,0,255,0,255,0,255,0}; MGL_EXPORT Fl_RGB_Image img_pause(idata_pause, 16, 16, 2, 0); mathgl-2.4.1/mgltex/0000775000175000017500000000000013134047003014053 5ustar balakinbalakinmathgl-2.4.1/mgltex/Recompilation_decision.svg0000664000175000017500000016227413134047003021272 0ustar balakinbalakin Terminal/Interrupt A terminal point in a flowchart: start, stop, halt, etc. Auxiliary Operation Offline operation. Decision A decision or switching type operation. Input/Output General input/output functions. Buffer Small image/svg+xml Start Find\MGL@@@<script> Is itdefined? Comparescript vs. code Rewrite/recompilescript Undefine\MGL@@@<script> Define\MGL@@@<script> End Aretheyequal? Yes Yes No No mathgl-2.4.1/mgltex/Recompilation_decision.eps0000664000175000017500000032601613134047003021256 0ustar balakinbalakin%!PS-Adobe-3.0 EPSF-3.0 %%Creator: cairo 1.13.1 (http://cairographics.org) %%CreationDate: Sat Nov 7 15:28:00 2015 %%Pages: 1 %%DocumentData: Clean7Bit %%LanguageLevel: 3 %%BoundingBox: 0 -1 631 791 %%EndComments %%BeginProlog save 50 dict begin /q { gsave } bind def /Q { grestore } bind def /cm { 6 array astore concat } bind def /w { setlinewidth } bind def /J { setlinecap } bind def /j { setlinejoin } bind def /M { setmiterlimit } bind def /d { setdash } bind def /m { moveto } bind def /l { lineto } bind def /c { curveto } bind def /h { closepath } bind def /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto 0 exch rlineto 0 rlineto closepath } bind def /S { stroke } bind def /f { fill } bind def /f* { eofill } bind def /n { newpath } bind def /W { clip } bind def /W* { eoclip } bind def /BT { } bind def /ET { } bind def /pdfmark where { pop globaldict /?pdfmark /exec load put } { globaldict begin /?pdfmark /pop load def /pdfmark /cleartomark load def end } ifelse /BDC { mark 3 1 roll /BDC pdfmark } bind def /EMC { mark /EMC pdfmark } bind def /cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def /Tj { show currentpoint cairo_store_point } bind def /TJ { { dup type /stringtype eq { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse } forall currentpoint cairo_store_point } bind def /cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def /Tf { pop /cairo_font exch def /cairo_font_matrix where { pop cairo_selectfont } if } bind def /Td { matrix translate cairo_font_matrix matrix concatmatrix dup /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def /Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def /g { setgray } bind def /rg { setrgbcolor } bind def /d1 { setcachedevice } bind def %%EndProlog %%BeginSetup %%BeginResource: font DejaVuSans 11 dict begin /FontType 42 def /FontName /DejaVuSans def /PaintType 0 def /FontMatrix [ 1 0 0 1 0 0 ] def /FontBBox [ 0 0 0 0 ] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for Encoding 32 /space put Encoding 46 /period put Encoding 47 /slash put Encoding 60 /less put Encoding 62 /greater put Encoding 63 /question put Encoding 64 /at put Encoding 65 /A put Encoding 67 /C put Encoding 68 /D put Encoding 69 /E put Encoding 70 /F put Encoding 71 /G put Encoding 73 /I put Encoding 76 /L put Encoding 77 /M put Encoding 78 /N put Encoding 82 /R put Encoding 83 /S put Encoding 85 /U put Encoding 89 /Y put Encoding 92 /backslash put Encoding 97 /a put Encoding 99 /c put Encoding 100 /d put Encoding 101 /e put Encoding 104 /h put Encoding 105 /i put Encoding 108 /l put Encoding 109 /m put Encoding 110 /n put Encoding 111 /o put Encoding 112 /p put Encoding 113 /q put Encoding 114 /r put Encoding 115 /s put Encoding 116 /t put Encoding 117 /u put Encoding 118 /v put Encoding 119 /w put Encoding 121 /y put /CharStrings 42 dict dup begin /.notdef 0 def /S 1 def /t 2 def /a 3 def /r 4 def /F 5 def /i 6 def /n 7 def /d 8 def /backslash 9 def /M 10 def /G 11 def /L 12 def /at 13 def /less 14 def /s 15 def /c 16 def /p 17 def /greater 18 def /I 19 def /space 20 def /e 21 def /question 22 def /C 23 def /o 24 def /m 25 def /v 26 def /period 27 def /R 28 def /w 29 def /slash 30 def /l 31 def /U 32 def /D 33 def /E 34 def /A 35 def /h 36 def /y 37 def /q 38 def /u 39 def /Y 40 def /N 41 def end readonly def /sfnts [ <0001000000090080000300106376742000691d3900001d14000001fe6670676d7134766a0000 1f14000000ab676c796600c0787b0000009c00001c7868656164026638f700001fc000000036 686865610cb8067b00001ff800000024686d7478cb7f16780000201c000000a86c6f63610002 4608000020c4000000ac6d617870049706710000217000000020707265703b07f10000002190 0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec 310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f272062900010087 ffe304a205f00027007e403c0d0c020e0b021e1f1e080902070a021f1f1e420a0b1e1f041501 0015a11494189511049500942591118c281e0a0b1f1b0700221b190e2d071914222810dcc4ec fcece4111239393939310010e4f4e4ec10eef6ee10c6111739304b535807100eed1117390710 0eed1117395922b20f2901015db61f292f294f29035d01152e012322061514161f011e011514 0421222627351e013332363534262f012e01353424333216044873cc5fa5b377a67ae2d7fedd fee76aef807bec72adbc879a7be2ca0117f569da05a4c53736807663651f192bd9b6d9e0302f d04546887e6e7c1f182dc0abc6e4260000010037000002f2059e0013003840190e05080f03a9 001101bc08870a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf43cc4ec32 11393930b2af1501015d01112115211114163b01152322263511233533110177017bfe854b73 bdbdd5a28787059efec28ffda0894e9a9fd202608f013e0000000002007bffe3042d047b000a 002500bc4027191f0b17090e00a91706b90e1120861fba1cb923b8118c170c001703180d0908 0b1f030814452610fcecccd4ec323211393931002fc4e4f4fcf4ec10c6ee10ee113911391239 30406e301d301e301f3020302130223f27401d401e401f402040214022501d501e501f502050 21502250277027851d871e871f8720872185229027a027f0271e301e301f30203021401e401f 40204021501e501f50205021601e601f60206021701e701f70207021801e801f80208021185d 015d0122061514163332363d01371123350e01232226353436332135342623220607353e0133 321602bedfac816f99b9b8b83fbc88accbfdfb0102a79760b65465be5af3f00233667b6273d9 b4294cfd81aa6661c1a2bdc0127f8b2e2eaa2727fc00000100ba0000034a047b001100304014 060b0700110b03870eb809bc070a06080008461210fcc4ec3231002fe4f4ecc4d4cc11123930 b450139f1302015d012e012322061511231133153e0133321617034a1f492c9ca7b9b93aba85 132e1c03b41211cbbefdb20460ae666305050000000100c90000042305d50009002940120695 040295008104ad08050107031c00040a10fcec32d4c431002fecf4ec10ee30b20f0b01015d13 211521112115211123c9035afd700250fdb0ca05d5aafe48aafd3700000200c1000001790614 00030007002b400e06be04b100bc020501080400460810fc3cec3231002fe4fcec30400b1009 400950096009700905015d1333112311331523c1b8b8b8b80460fba00614e900000100ba0000 0464047b001300364019030900030e0106870e11b80cbc0a010208004e0d09080b461410fcec 32f4ec31002f3ce4f4c4ec1112173930b46015cf1502015d0111231134262322061511231133 153e013332160464b87c7c95acb9b942b375c1c602a4fd5c029e9f9ebea4fd870460ae6564ef 00020071ffe3045a06140010001c003840191ab9000e14b905088c0eb8019703170400080247 11120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30b6601e801ea01e03015d01113311 23350e0123220211100033321601141633323635342623220603a2b8b83ab17ccbff00ffcb7c b1fdc7a79292a8a89292a703b6025ef9eca86461014401080108014461fe15cbe7e7cbcbe7e7 00010000ff4202b205d50003002d4014021a010100001a03030242019f008104020001032fc4 3939310010f4ec304b5358071005ed071005ed592213012301aa0208aafdf805d5f96d069300 000100c90000061f05d5000c00bf403403110708070211010208080702110302090a0901110a 0a09420a070203080300af080b050908030201050a061c043e0a1c00040d10fcecfcec111739 31002f3cc4ec32111739304b5358071005ed071008ed071008ed071005ed5922b2700e01015d 405603070f080f09020a15021407130a260226072007260a200a3407350a69027c027b07790a 80028207820a90021604010b0313011b0323012c032708280934013c035608590965086a0976 08790981018d0395019b03145d005d13210901211123110123011123c9012d017d017f012dc5 fe7fcbfe7fc405d5fc0803f8fa2b051ffc000400fae1000000010073ffe3058b05f0001d0039 402000051b0195031b950812a111ae15950e91088c1e02001c1134043318190b101e10fcecfc e4fcc4310010e4f4ecf4ec10fed4ee1139393025112135211106042320001110002132041715 2e0123200011100021323604c3feb6021275fee6a0fea2fe75018b015e9201076f70fc8bfeee feed011301126ba8d50191a6fd7f53550199016d016e01994846d75f60fecefed1fed2fece25 0000000100c90000046a05d500050025400c0295008104011c033a00040610fcecec31002fe4 ec304009300750078003800404015d133311211521c9ca02d7fc5f05d5fad5aa00020087fe9c 077105a2000b004c00954032180c0309a919151b03a94c0f34330fac30a93715ac24a937434d 33341e1a00281206180c281a2b1e2849122b2a28492c3d4d10dcecfcec10fefdfe3cc610ee11 123939310010d4c4fcec10feedd4c610c5ee3210c4ee11393930004bb009544bb00c545b4bb0 10545b4bb013545b4bb014545b58bd004dffc00001004d004d0040381137385940090f4e1f4e 2f4e3f4e04015d011416333236353426232206010e01232226353436333216173533113e0135 3426272624232206070602151412171604333236371706042322242726023534123736243332 04171e011510000502fa8e7c7b8d907a798f02213c9b67acd7d8ab679c3b8f92a53f4068fed5 b07be2609db1736d6901149d81f9685a7dfed998b9feb8808086887e810152bdd4016b7b4b4f fec2fee802198fa3a48e8ca5a4fe484d49f9c8c8fa4b4c83fd2016dfb16bbc50838b414066fe b5c19ffeea6a686d57516f6167837d7d0149bdb6014a7d7f87aea062e67bfef9fed006000001 00d9005e05db04a60006004d402a029c030403019c0001040403019c0201050605009c060542 05040201000503a806a7070102002404230710fcec3239310010f4ec1739304b53580704ed07 1008ed071008ed071004ed592209021501350105dbfbf80408fafe050203f0fe91fe93b601d1 a601d1000001006fffe303c7047b002700e7403c0d0c020e0b531f1e080902070a531f1f1e42 0a0b1e1f041500860189041486158918b91104b925b8118c281e0a0b1f1b0700521b080e0708 1422452810fcc4ecd4ece4111239393939310010e4f4ec10fef5ee10f5ee121739304b535807 100eed111739070eed1117395922b2002701015d406d1c0a1c0b1c0c2e092c0a2c0b2c0c3b09 3b0a3b0b3b0c0b200020012402280a280b2a132f142f152a16281e281f292029212427860a86 0b860c860d12000000010202060a060b030c030d030e030f03100319031a031b031c041d0927 2f293f295f297f2980299029a029f029185d005d7101152e012322061514161f011e01151406 23222627351e013332363534262f012e01353436333216038b4ea85a898962943fc4a5f7d85a c36c66c661828c65ab40ab98e0ce66b4043fae282854544049210e2a99899cb62323be353559 514b50250f2495829eac1e00000000010071ffe303e7047b0019003f401b00860188040e860d 880ab91104b917b8118c1a07120d004814451a10fce432ec310010e4f4ec10fef4ee10f5ee30 400b0f1b101b801b901ba01b05015d01152e0123220615141633323637150e01232200111000 21321603e74e9d50b3c6c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde32b2b aa2424013e010e0112013a230000000200bafe5604a4047b0010001c003e401b1ab9000e14b9 0508b80e8c01bd03bc1d11120b471704000802461d10fcec3232f4ec310010e4e4e4f4c4ec10 c4ee304009601e801ea01ee01e04015d2511231133153e013332001110022322260134262322 061514163332360173b9b93ab17bcc00ffffcc7bb10238a79292a7a79292a7a8fdae060aaa64 61febcfef8fef8febc6101ebcbe7e7cbcbe7e7000000000100d9005e05db04a60006004f402b 069c0006030403059c040403009c010201069c05060202014206050302000504a801a7070602 240400230710fc3cec39310010f4ec1739304b5358071008ed071004ed071004ed071008ed59 2213350115013501d90502fafe040603f0b6fe2fa6fe2fb6016d0000000100c90000019305d5 0003002eb700af02011c00040410fc4bb0105458b9000000403859ec31002fec3001400d3005 4005500560058f059f05065d13331123c9caca05d5fa2b0000020071ffe3047f047b0014001b 00704024001501098608880515a90105b90c01bb18b912b80c8c1c1b1502081508004b02120f 451c10fcecf4ecc4111239310010e4f4ece410ee10ee10f4ee1112393040293f1d701da01dd0 1df01d053f003f013f023f153f1b052c072f082f092c0a6f006f016f026f156f1b095d71015d 0115211e0133323637150e01232000111000333200072e0123220607047ffcb20ccdb76ac762 63d06bfef4fec70129fce20107b802a5889ab90e025e5abec73434ae2a2c0138010a01130143 feddc497b4ae9e0000020093000003b005f0000300240065402b241e0906040a1d1304001486 1388109517910083021d1a0d0905040a1e010d1c1a041c05010300261a132510dc4bb00c5458 b90013ffc03859c4fcecd4ec10ee11393911123911123931002feef6fef4ee10cd1139391739 3001b679097a0a7a20035d2533152313233534363f013e0135342623220607353e0133321615 14060f010e01070e01150187cbcbc5bf385a5a3933836c4fb3615ec167b8df485a582f270806 06fefe01919a65825659355e31596e4643bc3938c29f4c8956562f3519153c34000000010073 ffe3052705f000190036401a0da10eae0a951101a100ae04951791118c1a07190d003014101a 10fcec32ec310010e4f4ecf4ec10eef6ee30b40f1b1f1b02015d01152e012320001110002132 3637150e01232000111000213216052766e782ff00fef00110010082e7666aed84feadfe7a01 86015386ed0562d55f5efec7fed8fed9fec75e5fd34848019f01670168019f47000000020071 ffe30475047b000b0017004a401306b91200b90cb8128c1809120f51031215451810fcecf4ec 310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f 117b12a019f01911015d012206151416333236353426273200111000232200111000027394ac ab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8feecfeedfec70139 0113011401380000000100ba0000071d047b0022005a4026061209180f00061d07150c871d20 03b81bbc19100700110f0808065011080f501c18081a462310fcec32fcfcfcec11123931002f 3c3ce4f43cc4ec32111217393040133024502470249024a024a024bf24df24ff2409015d013e 013332161511231134262322061511231134262322061511231133153e01333216042945c082 afbeb972758fa6b972778da6b9b93fb0797aab03897c76f5e2fd5c029ea19cbea4fd87029ea2 9bbfa3fd870460ae67627c0000000001003d0000047f0460000600fb40270311040504021101 0205050402110302060006011100000642020300bf0506050302010504000710d44bb00a5458 b90000004038594bb014544bb015545b58b90000ffc03859c4173931002fec3239304b535807 1005ed071008ed071008ed071005ed592201408e48026a027b027f02860280029102a4020806 00060109030904150015011a031a0426002601290329042008350035013a033a043008460046 0149034904460548064008560056015903590450086600660169036904670568066008750074 017b037b0475057a068500850189038904890586069600960197029a03980498059706a805a7 06b008c008df08ff083e5d005d133309013301233dc3015e015ec3fe5cfa0460fc5403acfba0 0000000100db000001ae00fe00030011b7008302011900180410fcec31002fec3037331523db d3d3fefe000200c90000055405d50013001c00b14035090807030a0611030403051104040342 06040015030415950914950d810b040506031109001c160e050a191904113f140a1c0c041d10 fcec32fcc4ec1117391139393931002f3cf4ecd4ec123912391239304b5358071005ed071005 ed1117395922b2401e01015d40427a1301050005010502060307041500150114021603170425 002501250226032706260726082609201e360136024601460268057504750577138806880798 0698071f5d005d011e01171323032e012b01112311212016151406011133323635342623038d 417b3ecdd9bf4a8b78dcca01c80100fc83fd89fe9295959202bc16907efe68017f9662fd8905 d5d6d88dba024ffdee878383850000010056000006350460000c01eb404905550605090a0904 550a0903550a0b0a025501020b0b0a061107080705110405080807021103020c000c01110000 0c420a050203060300bf0b080c0b0a09080605040302010b07000d10d44bb00a544bb011545b 4bb012545b4bb013545b4bb00b545b58b9000000403859014bb00c544bb00d545b4bb010545b 58b90000ffc03859cc173931002f3cec32321739304b5358071005ed071008ed071008ed0710 05ed071008ed071005ed0705ed071008ed59220140ff050216021605220a350a49024905460a 400a5b025b05550a500a6e026e05660a79027f0279057f05870299029805940abc02bc05ce02 c703cf051d0502090306040b050a080b09040b050c1502190316041a051b081b09140b150c25 00250123022703210425052206220725082709240a210b230c390336043608390c300e460248 034604400442054006400740084409440a440b400e400e560056015602500451055206520750 085309540a550b6300640165026a0365046a056a066a076e09610b670c6f0e7500750179027d 0378047d057a067f067a077f07780879097f097b0a760b7d0c870288058f0e97009701940293 039c049b05980698079908402f960c9f0ea600a601a402a403ab04ab05a906a907ab08a40caf 0eb502b103bd04bb05b809bf0ec402c303cc04ca05795d005d13331b01331b013301230b0123 56b8e6e5d9e6e5b8fedbd9f1f2d90460fc96036afc96036afba00396fc6a00010000ff4202b2 05d50003002d4014001a010201021a03000342029f008104020001032fc43939310010f4ec30 4b5358071005ed071005ed5922013301230208aafdf8aa05d5f96d000000000100c100000179 061400030022b7009702010800460410fcec31002fec30400d10054005500560057005f00506 015d13331123c1b8b80614f9ec00000100b2ffe3052905d50011004040160802110b0005950e 8c09008112081c0a38011c00411210fc4bb0105458b90000ffc03859ecfcec310010e432f4ec 11393939393001b61f138f139f13035d133311141633323635113311100021200011b2cbaec3 c2aecbfedffee6fee5fedf05d5fc75f0d3d3f0038bfc5cfedcfed6012a012400000200c90000 05b005d500080011002e4015009509810195100802100a0005190d32001c09041210fcecf4ec 113939393931002fecf4ec30b2601301015d0111332000111000212521200011100029010193 f40135011ffee1fecbfe42019f01b20196fe68fe50fe61052ffb770118012e012c0117a6fe97 fe80fe7efe960000000100c90000048b05d5000b002e401506950402950081089504ad0a0501 0907031c00040c10fcec32d4c4c431002fececf4ec10ee30b21f0d01015d1321152111211521 11211521c903b0fd1a02c7fd3902f8fc3e05d5aafe46aafde3aa0000000200100000056805d5 0002000a00c2404100110100040504021105050401110a030a0011020003030a071105040611 0505040911030a08110a030a4200030795010381090509080706040302010009050a0b10d4c4 173931002f3ce4d4ec1239304b5358071005ed0705ed071005ed0705ed071008ed071005ed07 1005ed071008ed5922b2200c01015d40420f010f020f070f080f005800760070008c00090701 0802060309041601190256015802500c67016802780176027c0372047707780887018802800c 980299039604175d005d090121013301230321032302bcfeee0225fe7be50239d288fd5f88d5 050efd1903aefa2b017ffe810000000100ba000004640614001300344019030900030e010687 0e11b80c970a010208004e0d09080b461410fcec32f4ec31002f3cecf4c4ec1112173930b260 1501015d0111231134262322061511231133113e013332160464b87c7c95acb9b942b375c1c6 02a4fd5c029e9f9ebea4fd870614fd9e6564ef000001003dfe56047f0460000f018b40430708 020911000f0a110b0a00000f0e110f000f0d110c0d00000f0d110e0d0a0b0a0c110b0b0a420d 0b0910000b058703bd0e0bbc100e0d0c0a09060300080f040f0b1010d44bb00a544bb008545b 58b9000b004038594bb0145458b9000bffc03859c4c4111739310010e432f4ec113911391239 304b5358071005ed071008ed071008ed071005ed071008ed0705ed173259220140f006000508 0609030d160a170d100d230d350d490a4f0a4e0d5a095a0a6a0a870d800d930d120a000a0906 0b050c0b0e0b0f1701150210041005170a140b140c1a0e1a0f27002401240220042005290828 09250a240b240c270d2a0e2a0f201137003501350230043005380a360b360c380d390e390f30 114100400140024003400440054006400740084209450a470d490e490f401154005101510255 03500450055606550756085709570a550b550c590e590f501166016602680a690e690f60117b 08780e780f89008a09850b850c890d890e890f9909950b950c9a0e9a0fa40ba40cab0eab0fb0 11cf11df11ff11655d005d050e012b01353332363f01013309013302934e947c936c4c543321 fe3bc3015e015ec368c87a9a488654044efc94036c00000000020071fe56045a047b000b001c 003e401b03b90c0f09b91815b80f8c1bbd19bc1d180c06081a47001212451d10fcecf4ec3232 310010e4e4e4f4c4ec10c6ee304009601e801ea01ee01e04015d011416333236353426232206 010e012322021110003332161735331123012fa79292a8a89292a702733ab17ccbff00ffcb7c b13ab8b8022fcbe7e7cbcbe7e7fdae646101440108010801446164aaf9f60000000200aeffe3 0458047b00130014003b401c030900030e0106870e118c0a01bc14b80c0d0908140b4e020800 461510fcecf439ec3231002fe4e432f4c4ec1112173930b46f15c01502015d13113311141633 32363511331123350e0123222601aeb87c7c95adb8b843b175c1c801cf01ba02a6fd619f9fbe a4027bfba0ac6663f003a8000001fffc000004e705d500080094402803110405040211010205 050402110302080008011100000842020300af0602070440051c0040070910d4e4fce4123931 002fec3239304b5358071005ed071008ed071008ed071005ed5922b2000a01015d403c050214 02350230023005300846024002400540085102510551086502840293021016011a031f0a2601 290337013803400a670168037803700a9f0a0d5d005d03330901330111231104d9019e019bd9 fdf0cb05d5fd9a0266fcf2fd3902c7000000000100c90000053305d500090079401e07110102 0102110607064207020300af0805060107021c0436071c00040a10fcecfcec11393931002f3c ec323939304b5358071004ed071004ed5922b21f0b01015d4030360238074802470769026607 8002070601090615011a06460149065701580665016906790685018a0695019a069f0b105d00 5d13210111331121011123c901100296c4fef0fd6ac405d5fb1f04e1fa2b04e1fb1f013500b8 00cb00cb00c100aa009c01a600b800660000007100cb00a002b20085007500b800c301cb0189 022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4 009c01390114013907060400044e04b4045204b804e704cd0037047304cd04600473013303a2 055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd 03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a 009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d500c100cb00f60083 0354027f00000333026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4 009c00000062009c0000001d032d05d505d505d505f0007f007b005400a406b80614072301d3 00b800cb00a601c301ec069300a000d3035c037103db0185042304a80448008f013901140139 0360008f05d5019a0614072306660179046004600460047b009c00000277046001aa00e90460 0762007b00c5007f027b000000b4025205cd006600bc00660077061000cd013b01850389008f 007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2 002d0396008f027b00f600830354063705f6008f009c04e10266008f018d02f600cd03440029 006604ee00730000140000960000b707060504030201002c2010b002254964b040515820c859 212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559 b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d 2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45 442d2cb00225b0022549b00525b005254960b0206368208a108a233a8a10653a2d0000010000 0002570ae39778045f0f3cf5001f080000000000cef5cb7600000000cef5cb76f7d6fcae0d72 095500000008000000010000000000010000076dfe1d00000de2f7d6fa510d72000100000000 00000000000000000000002a04cd0066051400870323003704e7007b034a00ba049a00c90239 00c1051200ba0514007102b2000006e700c906330073047500c90800008706b400d9042b006f 04660071051400ba06b400d9025c00c9028b000004ec0071043f00930596007304e5007107cb 00ba04bc003d028b00db058f00c9068b005602b20000023900c105db00b2062900c9050e00c9 05790010051200ba04bc003d05140071051200ae04e3fffc05fc00c900000000000000440000 013c000001b8000002e400000354000003a8000003f800000470000005080000055400000650 000006f80000073c000008bc0000093400000a9400000b2c00000bcc00000c4400000c8c0000 0c8c00000d6000000e3800000ed000000f74000010380000115c0000118400001298000014bc 0000150800001544000015c800001648000016a8000017a40000181c000019e800001a880000 1b0c00001bd000001c7800010000002a0354002b0068000c0002001000990008000004150216 00080004b8028040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e 03f19603f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03 e63203e5e45305e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de14 03dd9603dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d2 1b05d3fe03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe 03c6851105c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03 bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff 03b64004b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403 abaa1205ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a332 03a20e03a16403a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c64039b9a1005 9b19039a1003990a0398fe0397960d0597fe03960d03958a410595960394930e05942803930e 0392fa039190bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c 8b2e058cfe038b2e038a8625058a410389880b05891403880b03878625058764038685110586 250385110384fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d 037c64037b5415057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa03 71fa0370fe036ffe036efe036c21036bfe036a1142056a530369fe03687d036711420566fe03 65fe0364fe0363fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a0559fa0358 0a035716190557320356fe035554150555420354150353011005531803521403514a130551fe 03500b034ffe034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303491d0d05 491003480d0347fe0346960345960344fe0343022d0543fa0342bb03414b0340fe033ffe033e 3d12053e14033d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa03 3736100537140336350b05361003350b03341e03330d0332310b0532fe03310b03302f0b0530 0d032f0b032e2d09052e10032d09032c32032b2a25052b64032a2912052a2503291203282725 0528410327250326250b05260f03250b0324fe0323fe03220f03210110052112032064031ffa 031e1d0d051e64031d0d031c1142051cfe031bfa031a42031911420519fe0318640317161905 17fe031601100516190315fe0314fe0313fe031211420512fe0311022d05114203107d030f64 030efe030d0c16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe0307140306 64030401100504fe03401503022d0503fe0302011005022d0301100300fe0301b80164858d01 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> ] def /f-0-0 currentdict end definefont pop %%EndResource %%BeginResource: font DejaVuSans 11 dict begin /FontType 42 def /FontName /DejaVuSans def /PaintType 0 def /FontMatrix [ 1 0 0 1 0 0 ] def /FontBBox [ 0 0 0 0 ] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for Encoding 1 /uniFB01 put /CharStrings 2 dict dup begin /.notdef 0 def /uniFB01 1 def end readonly def /sfnts [ <0001000000090080000300106376742000691d3900000184000001fe6670676d7134766a0000 0384000000ab676c7966aa72abf90000009c000000e868656164026638f70000043000000036 686865610cb806530000046800000024686d747809d700950000048c000000086c6f63610000 012c000004940000000c6d617870046f0671000004a000000020707265703b07f100000004c0 0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec 310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206290002002f 0000044a061400150019005240111b46001708160f1404080803160a064c1a10fc3cc432c4fc 3cc410fe3cec310040120803a90010870e18be16b10e970900bc05012f3ce632eefeee10ee10 ee3230400bff1ba01b901b801b101b05015d01112311211123112335333534363b0115232206 1d0101331523044ab9fe07b9b0b0adb3b9b0634d01f9b9b90460fba003d1fc2f03d18f4eb7af 9950686301b2e900013500b800cb00cb00c100aa009c01a600b800660000007100cb00a002b2 0085007500b800c301cb0189022d00cb00a600f000d300aa008700cb03aa0400014a003300cb 000000d9050200f4015400b4009c01390114013907060400044e04b4045204b804e704cd0037 047304cd04600473013303a2055605a60556053903c5021200c9001f00b801df007300ba03e9 033303bc0444040e00df03cd03aa00e503aa0404000000cb008f00a4007b00b80014016f007f 027b0252008f00c705cd009a009a006f00cb00cd019e01d300f000ba018300d5009803040248 009e01d500c100cb00f600830354027f00000333026600d300c700a400cd008f009a00730400 05d5010a00fe022b00a400b4009c00000062009c0000001d032d05d505d505d505f0007f007b 005400a406b80614072301d300b800cb00a601c301ec069300a000d3035c037103db01850423 04a80448008f0139011401390360008f05d5019a0614072306660179046004600460047b009c 00000277046001aa00e904600762007b00c5007f027b000000b4025205cd006600bc00660077 061000cd013b01850389008f007b0000001d00cd074a042f009c009c0000077d006f0000006f 0335006a006f007b00ae00b2002d0396008f027b00f600830354063705f6008f009c04e10266 008f018d02f600cd03440029006604ee00730000140000960000b707060504030201002c2010 b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720b00050b0 0d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ffff505804 1b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb002254560442d2c4b5358b002 25b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b0206368208a108a 233a8a10653a2d00000100000002570a13d8c3465f0f3cf5001f080000000000cef5cb760000 0000cef5cb76f7d6fcae0d72095500000008000000010000000000010000076dfe1d00000de2 f7d6fa510d7200010000000000000000000000000000000204cd0066050a002f000000000000 0044000000e80001000000020354002b0068000c000200100099000800000415021600080004 b8028040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603 f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5 e45305e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603 dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe 03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c68511 05c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba 1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004 b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205 ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03 a16403a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a 1003990a0398fe0397960d0597fe03960d03958a410595960394930e05942803930e0392fa03 9190bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058c fe038b2e038a8625058a410389880b05891403880b0387862505876403868511058625038511 0384fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c6403 7b5415057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370 fe036ffe036efe036c21036bfe036a1142056a530369fe03687d036711420566fe0365fe0364 fe0363fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716 190557320356fe035554150555420354150353011005531803521403514a130551fe03500b03 4ffe034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303491d0d0549100348 0d0347fe0346960345960344fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e 14033d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa0337361005 37140336350b05361003350b03341e03330d0332310b0532fe03310b03302f0b05300d032f0b 032e2d09052e10032d09032c32032b2a25052b64032a2912052a250329120328272505284103 27250326250b05260f03250b0324fe0323fe03220f03210110052112032064031ffa031e1d0d 051e64031d0d031c1142051cfe031bfa031a42031911420519fe031864031716190517fe0316 01100516190315fe0314fe0313fe031211420512fe0311022d05114203107d030f64030efe03 0d0c16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe030714030664030401 100504fe03401503022d0503fe0302011005022d0301100300fe0301b80164858d012b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> ] def /f-0-1 currentdict end definefont pop %%EndResource %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageBoundingBox: 0 -1 631 791 %%EndPageSetup q 0 -1 631 792 rectclip q Q q 268.801 790.4 96 -38.398 re W n q 268 790.4 97 -39 re W n [ 0.793388 0 0 0.8 268.8 752.000008 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 121 def /Height 48 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 48 ] def end image Gb"/kM-!XM[`AE!Q8p)k#T4-r#lt*Y"Mu-$K[C@n60;;Q"=FBgZ&5L6jY]stQIP>-3U`M]%>VDDa6 5BKcfX?r'i\45L@'t#95!>0.nH8&)crODSf[<`TN8u8H6e5kQ"@lM--(8BM?R$m9"?2l2Kn WMq$6Z]^AS!-%j!jK-@GadnS\P*EW5n-cYq[QM9W]?^:l!CXh6>,+_)I$&+ hFcF(OX,jZl3OrYe\NLnWmqoa_T^D<$/QWIlJ(W5$1"=ZlUSm-un$WN;2[kO?).KV50W'iO @gQ8YJTXVd1DB=+"i^cr_j$1<@D;9*^2aI=]sU;-T3#/mG'e#ji8At"_o'6O2T>L@:Hq:qf X#5BS2iA\'4^3*:0G;McBb>^*UB2-k9_dK=kp>t`JJGI#5>P9oka[*M;;h!)V16%25CH%Mc &%na_RVUX!;1U&MCDtd[;"F?;=Do\[E-n$gZ`=(+< 10i8=Y.b?N&8%GQKc!F7OEFeC8;`iTZGd-5eRJgbWbhl]iZ)&j`CTb6)05+-Y89_',BOsS- WMZRuF*(ULdA\9PL$GF36Ma;20-9od5;%8?K"COU]!>>JZ]naLIU2bugEq9S-+Y^i&haY*b Z/`-*/itkG\cO0?*<(Jn7U&^TX_Ic=ub_2qaVPZe[qN'FDHP^Dr$Inh`eE 1J"QrdI7(o$Nc.ajDDAss77QK2f4[hCR8Z7Ds``"AI1'q`b5$W`IqtlH43;`a (VYnH)4*UDbff=1iDH'0b>IDp=2_Wn?>h:fJ8mfW=^[9eNO&Pq9YFK`]E=!%k#Pd_JX8L:k r9s(B>I*-rq1u:rH5Z[2pDR%rYOJY0u2^lEULR\B4!WE!3SN-r3 kQWH3UORJ(tT^@^=0hZGYA7SuanaAr,)3lcdu%KRQh-f\0S@CRH"[Z#O9sq=B62IJ+N[HkG *-*#sZbB?r3/Y1\rjC))KdY1.5ppj<@D+ RJ)rd:'+I>7`tG5[d2PJiJ`+9C.^Oi%h3A^f+K)A1*pQg3=".mc7M`-IR_VplLGJ9,f:-gC %.3UT3Q%fK*T=%R[?iR.)l3$Nj_Z,]I,77FJ:UUY$s*:t1M"f\ HHQOgL-aH,1aXG,!HrUb5Zi*n"&9S[-JA=`mL33@rlH?bL.3&1[cHr,)d3M/$j0OQ$\CLH! \)7hW_:_C&]I6LAN,$E^$jWeX/m1?O6J;EIU`0#$W!c,-H!2&E9#"h@6_>@*4"5VeqFmHop ^=2X.g6O\A/^<^#?]K2Hop"*?H3NrDr5i_VO)$#sZG+#p3Z`V=HihJ 57mIJL<`j2XHh?91-HF2Q_917r^rjbm4h,FfS_LW'@6RR@h: L7W;,Q?4^rCf,D>Ae&1CMOq>5q>reXQosA!Ko$Sph?UerZL`Ie9#RTHQ7Ol4ke37cM=P,Xr HEnu)8T2t[#^6\cc5_4FbBO+F-9%glQfi^hnF.2a^Gq?nkQ`>gfhP@nUjlQp=[W#KU?T2Y! T(GBrJ>Se7l&0KnmHZr>7)"&hc\#h7nQ>B+c!4Y5hoF]CI3qDV1,@j0e6[srci/[r[1A_Nf pVoKh*7P/Ib*9Q@,o5Rg$R+W*BeQ@lTEP[g8JSqMu\NBOFR,Cdj\e4uVgj`;6`.P")O. nU5fI;iq_9% Dns"l*l>c4VeK%l':=fDV5Q4t["TB][Jm3en*jW)G6HLfi)E'+AOFE$g$i;>-Ce86bO 1CTQS6CH#N'Hu#Z3XO9%7oS,GMjPj$5GlKe&+82#pWf>-1^(p1X+,*I_MZ?&05#!H6r7;io W5.H`i5q?*d73kmcDS&_\<%R=6GYsh/=td*uMrl0@+p.2AV2sj-8mh1j5o(B"NJU,OX"OlN 5/(-@g$n-*VLQ=RrRf-k3_4rVBGo71f.4++K5"I!'RcKZ>W891[J,1m[67X(?tlf#f\_GH3 J"rXOuI_NAs21HdmuV>kWCs0[*OZ+#D%!p+XFP(=leF"fQ)S^\2cQ_>Oh"Pq"#/mbcTRdqU tTcP6rmdAq=OI&8cQtOHnli#W$jX%sYg6R$;Fm)54TEacC)IICIOCe04W;u\ *HYJ^raRbpb85=KVOC"V&t*X>+,euZ*A\0ckQk&eM+o6a6U^S?ZKnmH9Ch;tSZc Pg85MFrlkeVo![1WFjH?/o6XaRg)V8Pb6CjKi\^WoW@&L("oZ*"OD+&3NfY#6+4Jc8V-HN5^AklR,Z,e;mVO]3l0)jcp&N\:PNb>:ugDYjcr4sACr1](uuT4XS%3\ fuLWI[!W.:S;[S2)5Skt8$5jt/df3,9uuOQ:3H63)`P3CfFSc;J>fk*=e+2?kKZkEA%i]%4 YbUr3fDq[2!E1,a2+1qW!rqM;61:YC:A]T95mHm:l#KV/,42mbJJg!8(?;Jg;ZS;hV&k_&k LYW7/4p"IA@H-Fqj5U,S@+LIZ=2J6&bqtW8I%09Sa&=>+(*n`=X.$@4o"`NPP!OGFT3[KgS YXCB8\m!E&E$Njcsf$4-WfJ&d%)#Ek[OkLu="]*bnPOk,qS3fe%U:5n+dfm^.eMqn7A7(jY ",@b_#(p*@a=Yn`k>\e7TPmn+g=cQ-'B?O(^\*DD5L]Ff[Gi8J*)V%1<4m\/[E+)b0 />O_91P'_H)TI@:Dmb2k)\['?L_\.>N$XYUAT+@SW5=+9L-j5`Nt%$UqRm0@Q#@\OJtgEbI 5:L%+7AF6ZfXokW/;[^9^r]\/Uj*qm$nNco.\4UicK!4tnMs$rY*eGDL8.-uq@V(Xd@B=Qa (,8c^pT[N'W$FQIm)_a#\h77-Xeu$qk`c3Xj;3UOqmFsT=_lUVbC1K=K)u5oEP8H8T uQAaGDD.t?@o?<;T%$O2S\P7jmc^+U00)Hn'd%OcA%mH6>nGj_&LVNG?P^meo0 18WIU6^<2XIWq^ZF5u2]7euRJNFi4`r,%XNR:^O6.g99"CggcO=cHDJLl\s8C./#j8N>kR< 'jNPoNLA/9`0F_-[rKGgO&6A&EJ[&h\[fQ.9?+:pEote5KhQ=LBIU:?PD*$?2pdV+`),\"M `jRD5PK-6b88JE:,isj8&oR$Q/9[u+c>DiDQs7CRZ8lbC5XQY@W-+\p/?o5Fn7.s(d3Cqq_ mk%3LQj%!=N9#+g=iNkr;o-S5Dc./R!%AJoE\R"Q`O[GD?qUkR<%1kiWqrH+@DNOW/t$4GL 4d>6CP?")=?f1J0Jj(ccU]AKVs'4&]%RBdV-DaH;ssqtR\"a#5g_%Uiij[Ph+s$uZ.u=@>Y DK0)qG3$8/fBQ@L\,Lj4iZO/SoOInK6+6Od"PI"dQ60Nf=OR0KNP7_hJ&8@gWj=na`FlTWU oB8Iqo[9=91DeJa]Re)_"V6d4QmEcL#-E]j>UhGKLpt(*(WTd52VX3OgQ/aCb=+d=,@1):+ u*%V6bOEqH'.o=A+Y!kad I#):/4.i5/S4W;9'mni/=-&V5srKn*Ot/Ulu?/WC;Ui^.=7DHu5lb;-AC@nX*[b)L%$=M3U%BBm=E',r"X`+'-*hJfhZ/%IPC^!GEIaeG]K=KlcqnAJD*u[/,V1` q5$]Tk8&pX%;C?&6U4d=Hg]7%'%2UDS%NVf]:S=BR`t9\_KVqb%B9Ip\;C6c.;T4=di^brp dM#^gQ@hV7BilLDM8bXu+ScdF*pGU[T*\/rT./'q)\*Ahs10<8Nhq_RKjPCU,;e-b_PT/p:XM$(^h e&[ItY])-8+WuYj]6<-QU jbT']DTmC;A+ApX-YK7Bl%,0:lq.2X-B;OOhg3.-n.,1;,plgBM+km#ES#`0ujG)P=5Bk01 fQOQnYE)c8P9uUS.^MYq0F?fdC;Ii?h)]`ko!.KRbJtf8]cOmW\U/-Qm8R>MM0`SiG-N[UD qUoX*7B._4&kD_81O[UU6/>F@P+REKkV?4OF#@QQ6JS[Z;7MQlUdf_X=V:%7Wq=Iso;QbXN g5>e3trs,o^6`^~> Q 0 g BT 22 0 0 22 289.473926 763.771396 Tm /f-0-0 1 Tf [(Start)]TJ ET Q q 177.602 708.002 278.457 -71.371 re W n q 177 708.4 280 -72 re W n [ 0.797873 0 0 0.793023 177.6 636.627923 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 349 def /Height 90 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 90 ] def end image Gb"0TGuU"%T#^@ckDgbuA(X,(+bY@PCBuXGEfl$'$R(2-(',"9X!e_WPtT(*[>Lo]["*M2;l Q^gUM.J!?5G);)6K664I1&Ac^n&_:Ngr+5CE6f;.Y"*"K5@*>8m^=D"`h#S;^SSH)7iZXsfc<^3JMgV5dL?n_gP`=)n)oMhnHgRHY)72aoa^;6>m'_;fB#aVR1R=>*r= ?RMAa&"1[C3.=Jl:$`<@K^#SD.X&+O`c^n"[JgjET+$XX]D_EbNR@9R$^UX'V'kLV$QLEO4 ;-K?NRi%_1)kIujQDY%]Pnh&IHJ5YBl&2F8RE*/G4Y:7@WM@Uf4<6!q9MM4T1fnH6-.rS\% FNYRU'c%*ku!"'PPmA4ZG\G.JgsU]/`F"UpkZobq)JlnFgl;HIe)RAoB4HaQJpr#_C'^)Au ;A7l#k@+De^:Y,HrY]hf;_7cgGaR@4Y:5 _T&Ic9NFs/E/q6pRdrO[?RJk\-ZIWPVXiaV.B18sq=8`0uJoX4T^CR (V3E^<19bUQ`-Dp(RQ<+T;,HN6=hkP':!%@9Y_<$Y[-U3U/[iZ[5HcIIglns'XId(qSe@/% j!iHBfT0k;XDEdl!WUWj\\1GL%:Vf)76L.SFL`i]$+el]Z]SBtQA,XnPkLck *upWfk'H-V,b^4dN+e-'R/^:7@:2AZp-\%2,r],!3?&-P8I]!9Aj =q+/Q!@YJ#/KmaJ(0Bk7>%?Np]=]";nIgpo:G($t&IPVg?dY?#7)q!3=@Hb7)YB!3DsK/2^c$p9Y"e3Fa*T3n9I__$h2X(*boGu7"m,ggmn&rnsn?o"@&5HJ #=#[>V6df+ljS/DNHA!abahS.Z9hC+W%K,Qg^&s&ZRu!=fO-])Q1 nh$+4Z0KLC8.`gi+u<+^k1,Nu'h/`.TS?X/d)#"aF4,#aPWfFOl-?_P9Gl00`O`>H8NGb#= B0+-Oq"jEN"3RRg1ga>khddum?bdf-\h9L4/L8W-'Po,?&W+\dgSE'2eh:6s'"Vb'\K4>s- lGm[lRfPZkqG[CJAm)2d*b;O:AA53nLJn=q!NcBWu%(.Y.caclggCu)Qch/TVjH2*mPN-AQ 8OLd=NP"W.P:Ls"p!*Fi(&c>k*?#YRFiHC+)*UhA]2`C8Ol#:-Nb9`i.:^8Sm9j/<\:;3+;G5]icRCWZ>3ENJbfA7LAJ/C FM4,s`mL+Vl2tQ8l3@qV_5PT[o`6fWoqR>1@h`O+q>cq hA8"HsFfKsN4q"UkGNP*\JM/;t4kNuVW7f7G\SZZ';%Ac[O7L?.e]!OFIX;*SuTiI33]R"Z -/qKYF:p\tI!ZS96m5AuA:L(XX5_MCMV]HN"KH4Vb<,6RT`LR@F&K7I+/FOZ?k@^rm_!bT8 8;*SuTiSHU$Qj$,NrOa;.qi*lYfi^:G(hm-GIbkXR%8.6d$^QD@Gs`!!N'Y610H]uZL)=g\ K7I*41@"$31#G'-!bR"7W#mq9I.&ZnQj'@\Ib55'^$?eK(79aN@7/7OSfhDV(kVU06O[VQ+ CGt`UOM&2_jN^pQj!m"@Ot\K^ark)&2V^N!bMIcJ/Eud&24J/"N2;0;h/#d+<]g>*e=oiKt 'As6aK&VYT`/(5(CcX"p$F`p#0Brba&FtLCGs[ouU\Zba&FtLCIAhl?gQ&Qn8]q%i\tAl:W 41=iaG:;Tf.7_hOP>qSk5tVC\7/rm%i8rNII-UV:WiK%[FprNII-UV:NfK%[FprNII-UV:E c_V`VTrnQJY!qjHcR#h*00ahU:!qjHc/->Jf@i!:P"mRHE=Tn"'`[mK)$e.rjZ3\t#Mch`0 (9!i^A.bcd(:.D?/5SQFag+WA:aSK6^E?#6 88l1aTD.!L+EE!D.4:)P6L5!%9Wi!X/'WtADnq(ktL;> Dt)2u=-S!J0]N+KM:0ZF-es6E,mHJK;V\Z@+?25D[`Hjj/>P<%(:$qX1#BVs2ZZB,XaV%<0 XpZ<5@Gafn2*Uifc\m08b)EFZBT-oeC)Ir:ilU[qF>gXMfJC$sYJV[V760K;)6CW_:-Bc^7 a_hhr.K?YTHHG*M/Qu75R"[f&AjI._o5_*qWH_.Up/D-8cB8gp?KbK/NFeH: *u-)%6:UL4uPYJg(>7qAMSSf--]4.#k4@'-BU.(PCp,NCFE?HpRd/&1O>)kC12[F(Fce^j> ,TL`E)?D;DB^1ET'2m/piJ:>F`H4[)=+\`a'H730NXb=!T"@6cm=s`l]P7/o6ag$d;BNG`XfX'GOKEZj5,IA88%gL$ M8B7]oQrbL]d*-71*p$\DTW8gV7@3I@!0\ba+Ff?DPdM*eB99+G>IRp&`-_q95!a.e's2+Z c\:D?q$m.ecI5"paB-jI4\-UDAJg,HNs4`il&+'ZkR/"CRLQj&9Hq7:8j PTpNDq)jKDJip*YaCl,?pgik@O97tm-+.eNY4aR_&@&OO8#LRF_f)&Nk-k@T_kVK=LhZp?: 2VrSf0\R?\BN5q)BO)qS6EoE$Odj?(reBlh!$cAd-L$-dS5CE71WTgb+r#D[d(Z$CLKatg` Nh"ErHZ1`f\aM%nX2>(jOhui@iA%I58LH]spLr)M&4/_ePC_].Hp1+9<_!PV+WN[bZ[B.@k(`A5:bXC:QVtWmjB?o_Z%O *4B9nh">?Y&cp\ajO?D,QOTSW2*C)[VQMFW:p'ORq+u6?]/ lP:3\gGDZfs6^F73CW&RG%2ft:"7sq;3[B%*_*^PVL^hZ:ciePs)cqA*T(Q3Zj1$M&Wk,4q `jKSXSii_!"S1/_*W,^0>$@Ag<.Y%_Ni]K\j/h$Qa%:Nqg\0a7'RWr;J/'Ohr\!/=%_Q$hK \ctC#Nc[Hie3+iE]skC-+12p4'7Enei_OPSCgjChU7RMRICF.gIq-rKpPqm[hu'mSXuE?%< Y+gEoBTE`u41Gq;R>F40UiX/2-1+r\!6mI!1%@X]!5+#e^E;i)b(WG]DZH,[>+d>:TaOGE+ RkS_.HM,jos2)>1BpVFLg$D\0+>8L0$#IWhN-uNN,Woj<,F0] >80ETB!"7p6);L>^B+2uk`W[#sGHuk3jlIDMn5Vs`h(K^SbC\tc.SXJfBW,.AFAZY=/ki6p Lj=oL-bA$DoBdg+No$q!;SJ]gck.Gn7US20*uGS`#mLR>JoRcT$A0rKjp%T5l.s+(ht6(=9 ZR9\V%!>$rB3;,k?D.0lKU9/<\.I\?rh85IWe1uAm0Xq>#&ff6KkPfLl>9Tc@B'6\6rbNlK Vbp0KPRB%$1e!&$K<:175dgJB*E$hVN&"Y$J\ZTr"U]eB-$@:4D&Ar&@%,2hEIr#M%62j+8 W](`LU-7V@$k?rRe5Qg(ZG=&?#MJH<8\-lBV`g`O0MgqVaugPZVhCCfk5FMY%d>VIlLg<58 )iGHI3!mChlir~> Q 0 g BT 22 0 0 22 295.43584 676.569568 Tm /f-0-0 1 Tf [(F)71(ind)]TJ -3.973633 -1 Td [(\\MGL@@@)]TJ ET Q q 243.199 600.798 147.57 -135.715 re W n q 243 601.4 148 -137 re W n [ 0.797682 0 0 0.798319 243.2 465.085823 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 185 def /Height 170 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 170 ] def end image Gb"0WLK>0kqZlWji0Qio%`6*"0"W[J08kVl.%mdYks\F+'EJSB:de8,9sMWo22N6`,1V8K:b 3HIBVJA>p_l5/<:p1Xm+i[oqhcmT0[H/NPES@SGb*0-kIKJsmgK2,O[U$gAJ+rBeD/6b(lGW3]\[,nF-7)&M\2dYenoAr^@tb-`-:WbdT, Le=ATROlUTG=crqknVpT%Bahn:8B%%fj]rjm0_q*NQE+*XQX,R!pgqi5f=?rCjc$uO2skQV q^6Obib;=4qFgkf>D;,_Z,fQ"(.rdPG#P$3T95pt!M4Se=:mIR4poB4Ad)B%o)a^1>h/L`e 9da,hW`I_T2l=ad;78[^]HtTT@_U`h9Viu7j^X)%blPce(DdC+QC)IM83I1Jnp2@]'SiS_^ .l01D+u4,sZIu4Xk+tl:H3JZJqmiqYm-/"2$omBqY&nMb_bo![eZ:0fY*LoIO2ni[P*8BGh md]\e2"B=3Vh^dXkFF9EmdiaiZdu8VO-H.PUsnG)]LI]H?+3(`&M[*5?mDtQCb^VL)Wis/5 :b6XR9a]b"D,,(G!s+j5";o,of-kOOQ%=$T9BR#ojhg;Nar BU;OSAmk$o'CY9.5I`O4%uZ./E?X*`2_\P^nJNCR+hI-\X)%eSi?>.QaU81d31`1-tu UTHHCD=_d`XWu'?*/D+$c\ghI]*-^Gu0pGq'5o*ZheQFQ^5rZSGF!=!-Mlu;ZU1$\4iG'N= $OLDNP_bO9=m=;TNq-aM=g99ZVB0'UZu0a;J\:4d'?4sOF?#Z'4qd%g2itK(T3CSu[+N98V X*GB95T05Q8`*mQ*+P21t'Z;'5=FJ[?B#p1^Zs7Tp+3ja$lN"b_e!EST)6Ii51es@g0uhUl <($3:s])F*gXr^=X"sGOF,7(e-kPm8,M(HQT$YmKUdnq>oa44q'"Q:#4Z>KY<4sL_eXSOBM j&8TV1_74rW/ZDY?HqsoL11MZKu+8f%+Y4^sR+'sJYm@\W2:T:alu(YW3:TR>[T*YPS7bL;ii)l*^?GSM_]VpZfQ7*q6-6FR03+ Zb]Gr?j.K#[X0sVl9V.iF#7C?T?379P]X>tQ_chWBe^Z;DlUXY0Lf5RlU#>(FG65mPN#mr) 3mXK2D1V#0I*<.f$pR6`AJsP]99j&bi:lHYS;1D`/oKjnE'lK],7&4!C-C2D4[EQ)(`2aag M+\](tG)`fXXIdLpDp1P)7aD6E7k*@Xhn3@u-`-.,:a=lG+P3K'*!*%oQi:27u7m7EmgZ68 Y_C;!J)hm6An*q;6;FPo(iFb=&4n2bSKK;j5] d(lRS\9o>X.*>M!^$Zkp'_[fc.2f2o]3D#W@?'Oj:nnuhG%".mW55YlHT)_Y;^ptl?(_#[2 _!+,2&."hfc3W*hbr qRQ\8+NPE:%a38HJ[N`i"Z6a5kc@nCBs'.!A6ckF!9Hm(L6$Q93cFe$dJp-@t%gX2lGc5l+5,dJ\Mp5=,o/DjD`De2DfiAGnIGH00f';7MN=oCd^!^Y_lAZ&Z3*-k[e@B6UY!Vq3I E4;\\1aU"CjcIj]rM,SF@?G@SYF)74nWnYgFc)W(nK`291^`46[4AgNF>k(2*']oRB\Ef(5 sH5,g4`h7(4CGto(#!aD!%=dDlW>7nP\.H;2`'F4d9 *oRMu5^u'j=2$oc@+=C4ocQ*TF6nL>#=tYYI_4F'!dG7'HF.(`G/0.X3J-tO'h\^+U,id[/0%j![="_1:/H Y)5SDd\a,bhWJ'YOC"^UPNJ"Q&RmE^J7W>8KDBJQ`NhZn/S0SBMV*EuA.f$nV_L#^[I*d#h N.V^+:EJ#7I3?-=(r#1A) .F:UGp8M+;En;n)?+b]R9ab#d\EL7EH#ad[3jKb/E-^V&+5e`F#n@V*;8UI)".&Q)n[V21h D-C=\\^<;$BNhPS<2AX:Oi+rC\!(![>;D_5cbUsId)j-"EG,pq$e[_<7DSfYrQ/@nblT7O^ ;(%P$bWVLZnqnnI>`2!!A&(`L),QIBh-WA=uMV3eQ8@g:DG=``1::E/FI%s!UOnjAM,G8gK?1GLF(3r9W^:#BRBqf8b `Cp8pp"Mh%.*L*qE#Jd6DW91956EGgqQq!Vds4dN(ddmAfh8h3J.:rjE-S6W3H3jUm=k\P. gomK!l])[*1l_J*4i7@bi<;VVL2`.5!fZ5/S9gbQ6uPA$)A(YT ZJ-\l=MNA^SC%6cBfXLD.ba'Fn'72qKfg_,[tmd)K_F^>>4s-f>hI)+bmE9!QSKA $^8_rb@F;8[$QdZK8C^&pjVBL0M`\S5%5oShB8\jNP;&RV.u[K&Q8ZT8oKJu5h6.ajr5kc\]_KgppZiUo9K+SeUobMi;^$]I+;g,m8Q-/J[$`4j:fnBd YZlM`[)mTLn[M(iTMaMaK\o8U6_QPcA<)7\ pq<&#.kX>6@1]L3QcEkdre]O'C9!?T`]e&qb[_:kJf3:"_3ZfL(l6*8k\HM:CcZ2,'$Fh&A m'h),=?<:2UP%-R)a`F!@i2+e1%YQu-t?=:8qNpfaU@TGHs?\+Sio%>.[hs'$t9_q;m@d)h @1B1moK#_fP#:>gBfCFJWikW@PF>'P$>;%*@)3`"TM1o)F:]\BNpjM@bu2CD:m4Fp8YQ'@( aWT\I[oB>P6Y530!:2Z`M,S]#PU/#YZ#`NjW:Qel$#]Xa4,VA4a7=uo37H)@ZhgX<^;*HK^ F[gb;+LI2":9Nqc_/mK\WitXN3[_`MRM6tom/eZEL6ED*\ssR1U4p"2S.kGO4c.PUq8!gFj !!03o!5eDC&,(kegt010=RkolBHpAJ$Z'+q1:67*O^9Vlj*Mt`;@ K0Z-p5UH8VTt+R_f6T8Ps)Ag$G]jF(`ON1F4hcF!AZH2+cg7WC=$joJfDncK/gZAP^cUnaI WE_L#@0Bf9mL#rq@((3n`3$F$],3-f7E?\6fMK;SiKDjZ4QAYG jEl#,%/?$&o'Y1/uQJR_jq!n#gV`2-d&"?\bUiJo\jq[K]'A/qmaUW^d*1@Vp:`(M%#sX@Xi D5>d\J(\Q4J7=1d*@.:08Y9a[,A:scA>BY1>nd[QFI2K#\2mjTJ1Q0$F.sl7nRGJ`Q>?\6I ^UZ'05LF;D?j:k?ubF(4>4QkHb783hrcZ.QMrP*8f(U>`ae`!MkHbAndJ`eli$[1Kb(Hb"j<8-o5I[8fL#EcU@;h]&S rB4oH(6FQ!6,_`Ld(3d\aqjXCF5&%jI-c4=V(B05*E>YA<+$'/gO$C'PW8 ,U`NZKHJ2tPdS"G%1,Tp7#U8%U-uD^n6\]o6a@K[\pRL0.#dP91,Z5/E+)aliMN>pV)e(_T tQ8GH>kB)jEXek h$VK%OB_[irmCYG.W^G<3:H'E8]0?&blcQ1GjCb7U,BS!:DCb;m=79Yojd.'L#Vb\t:4'VB q`n\f1r7Pe"QS5G?-s2]J>`]qG@HVChUh4lbs$VUO'1Kc?;G3XiZuWuO3Ee3-cU0Lqm&?cH BUVaj:0R2mj_99@hS":1r;#s-bnkl`=d;!qC>Q&AMIgif']ps;&I-:>M`XSWD9T%59Yt,Z7 W\^$'8]Hu*)B*QMJKc>(",F)F"o7dHnFT!rhnpB)-V4',OMFuY#_F+do/3-?$#2[Xa_EUHM ci!T=$p3n)(nKlKG`uV02gP]if'uk+j7:j^tSsR_:[@F@AZ0bF\:eXb@"c-J'o/m]8&hKX" FFaIX*0:ASq;o8^Ce%?dO+!GT(_f,NlW=D7Rc[6/,+[K[sn.%2+`qV80rbo8TJ3o:&Z;>Bq Ml07GbP7Ja!4QUF?XZLf;DGJoubbUL3ZRbUQk9U?$.pIE"i9#A6[iNd(_nMrkl==2('=hO& 8``UJS%Ku3f7SCW^t&[(g#%-OjPOM!Q!!1B?s9-,-.Q.JMNuJ3]&jhCF[s?3G",YFm?gQ<( *;-.A)!:"="dpt_;TG?(ARLWh;&S`5!4;hQds9FbXkS^cHBL_5:8ZYG0fHdQ@0_@S_@4R33 @136>'Ra+_9UnBi[4#-_5XY'6Fho>RCU.J`%eLM]g;nQY"\e_q6&!bB5a;E6nuucl,8OF#I (*0cXn=Wp@X/ccJjDgX'p6c5kPU^emFl1lo@^bYeY>jH$:(A6YY m?=N-4Uf60[3dTWSTn,$qBK6^(pOYrX&lF9F8HLC*.bTuZ`(Zjkb!A(Bl.Reg9u"Hb`osJZ c_l\k9bp"B#OXF^%57Yn^k6b5JI"&oK:0aI-LbTC;IY"i-[@pqOGp(FJ:<9\<^n3/S>/Nbp 9N+4P7FMMf&L;[d6[Gs,h(plqPTFeXsq0E&/Bn?o6#*k8Tl(g/o`'ig%\^SN?K2feYIh-qF O@jQkF$s7ba):O@6b$^.:MG-&5QoAf013mdI(JH'jYrXO=g"57@=dug: H(gQ-RbHTAl?kJKrU-p@Q@geeBSI`NE\/b5J>K29Fc61I,d<&uA,^kTSEL+f3#V-q(OdaPY &PV#!9Q`id=jj%^\Fju%GQ7O*`JYOi;h:\NV"NpOI]]]YV:9I`58=+"-nR9R ZDX$=24^3*IFnO:DW0L"tl^';^((@!4WRGY(lH:PKu`c3r))l8.1kP2[=p=J#pWfaW%=g#P 0P)VOO3L6JLp@>VO_OaBZp+7,r]PJbpn[,8U:KM[6/I=[EU.XS(/D.gSn*+hA`E:h5 CbtBJu_O0rA8IK%&7i$&@;XM"3YiXl-o*#n!S//[eAP.hAI=XIk]t\:YU5:PT9`]V#^o;%@2?qZbJ]9rk?XHH5[1)h9;#O$!-Wh? I#oo?5G/F'\/QcER51BF%[+R*;dpc*FXKD1AVM5IIbuT;s9BSBP'8&k_@i+:Q^4,J7UIUA/ X0%(Ti"&1)p[6l9l)1)YZ=\?n3JREWKR'nVgoTX+qkd&k94Ut%GT#oXUn3EO]O'\%[YKIGB qQUbe;&rsBd]I!I4G#5LZi9848@YB/@#12a5V7dZQYjQglmocU).OGj^C3-D6.?OruK9JK4 @KB)A.A`n1Q`TDns?p%On$8_P+=P)Ja9+EV.>gW)0X\"jNXA(HU,bMRuTqVbJ_3Rd?bUl9d QC9P]YEIpMCCWht:)QJk_m&CmaI!R.!U,(hs8_4NMO'CT3A[T]N&`en)YcK'H_&:=-7$ktV_CR]c 6LU8\V)gN1DlY ;U`Z[_j-tY85\u_V1n_k/BF6!VS;3dDmu<#ILISZMKcDT[.'BKTA722YNFon9pMP8amlMBM @3G)hj,$<#1F4F8sQ15FJ'cD&!:J-k`pQE_+B]X-]NG=Xd90;REOs2aLWOecfc%$jR5-i/C>]"+D $j`J$Ca0#pP)N#D%/)EM;@HCA5:>Uesp[YtLLEEh"\6ROhIYJ#>Z!k#=+fj61'9CR09dLt] bP,dVG!bd*f@R6b_/H^G<<<&-D"AOcIPGQh3-Of'H#$Wb'<]a.9KL=:TkbN.!XGfJL?GCq@ U4l=los^dX>%$ZJZs8VMmsnSBMeT^E8H.@8-_F1g(pZ_S&jh4F/93M^9OjSd-_Ie.V9`=Ql QW3[:=K>L(VZ3+@=0X9_HQFuGJJ-MlL,2W].=r>G(6I#*U9QSVAZF$8<'V7Q;YW3S?-b'r![8ISgGX*XPV2h2Pqe?u$[g5(+- 9+4D!"VMT&u6#%!U&jUO?S! 39.E5#fl-cNB^TLlC<3)N'OCgE,<4J4d[e+/$f"[7e.\_+W$;N$X#?u4jdEmboHi_F`VJ0" pB]Ytm*g>cVC$9CI!''Bn8\57>HChODu%&+MdS1?tMeNru83FuJT#Ypfi5eVDUcfbi*OV8D M:;0UCqh6=Hr&<3s[5&?GJt>AKML>V2@R[]3&&7'lRM4X6(-5#slU=Bco!Li3AX,)(Ch"JF [Y21p+>#q=^I0Ym&e27U"V7el&TWID-KS]3N_TSd`LY@+rM[$>=OhVI8pmTd-TOB3e()u:G Hs@V_TbtH$Pq*GCM=3m)I9.M35i?djZ$,FcsBj$*r]e"`Bc'q1WguM<$\8nH8(T'f)f.m^6 UJ"0Pn*eF2AGtjZ=?AcsBk/#B[Hk34;A8Et'q]7^)DBQCt'LTEPkiL85UGUeTdCI^3c;.#d g9kf"S(Q=RM>HpM,PITOiqu\V`Cuc&%5i(Q,d["T_mW3%S@Yi,)a6E'dgb#p_K-g!F&.V-*MRCD#q27rdtUWM!:r< 7DI5kd?4.fe'Y]Sen!VM`VRU:/j?_='!EKs!994ak&9b"1m>CQR3DM+n_H>H_N#S:\]i%JB;A%=icEW0Gb91P6`P[2>Q5E :'*p4$!KgcS$dR3mL_G1;LBWnM#EDD0'k?:8F>:RLt&=89W#-7Bd87#uUG7lGk[/\i-1/tT UmJM1*lMB5]6=#t@**P1'dS^Zn?(dL<6)*J!(O(U!)#ND@9ac_bjC`*lsXpu:8EU;kX:/a0QoE;5p^V!^()FmK gdJ5dWU32-d[USsZ*\Yfr7>RT9/m:rB=J#/ONnGdhWD#52L9@Hs+-_a^V?g5a@" SCZ,-QLQk;G5`hJ"@El@?I5%OM@,$"a#NrBMn2(DRlHh&lW=\a4j;**=GZmS>j*[#OR?VeL YE"5&Jn ']hs!:Od(jE;g%Ws*o$Z')O>!g#uGYjSPW^V(r-SMhST#a`IEJJ@*qQ4;!'/A).\"uTUAas sCMeM'DU-D;/,,)\D-Y+&Ui$J,f8=1n8N@hdjO^[^X,$YLl?"A`jMO_a1K_Eb!);;--8NeH .Lp;uuS;:l9>EY:hToufg%E;__ r;!&"$Ur=&W]Q4L@o^%7BlR]$q-'7S/_HXCTi4C%;([$_HSH'FEg_j!X'C5&Sm:%gF=$=E# Y-<@V^AuO1-#R&"`u>@plB3A0[B0jVTHJpQ2=3rJqpUO(O*qS<]*ODV'7:%U6B"4LD^$^Zl Fr*[8ESD'NFs^RRu.SdN9J"#4%cn>hgJiqnZ;'Q\mcHBNJB3P6"P(lW%8!CG7^b$Vj*AUI! g.+0^4rf]r^`SA7`YO>#8n$LMCd)9N[tke^cFoQU%t4ccHQkb@+8EYcXEOo gNhF0'/?jGcah!t[g`K3W:@KsgPo$%%LcHWrfKiKbQAT(:l\$i@1*YATbG?LE).[\U0-4bF +II=9L2eTsp>^1SO3>RkRV)j@fm]B.okpZ&o2OioM9MTE:"T.Y0Cge>6i3QY1O=G6%5HHF[mcBHK@i=ED(?/_di2E"-UcZWI@$RWeM&3# 4S$KnpP4*9JgN@UsXU`rLbKjGBbsWQ_fttkXIOLKj/JDu7J^2I>>N8:U"p($9&QUs_[^t.. rTX$%M>"MPNr";XXbgYYmNrjT`p+%gd#"'D/No%$m>#RNg\L;3ea[#bqcK?_>#TfNqVDW$D n:[aRJI%BFYB3[3)arqdnqaI;3$l=*_W\1f@J]&":$_0 D7HLSi=n_?!'LaUl(S.3i\"O0frk_K*#PNKKO=NEP\njK0@N81-d=7*^Y=:XulnX_qpMiFo$$B;fEP0[`RCKSAj'(-:?Xo[RbPFiW,i(Z]++D-Y[p=&"FS_kDm+mZ$O Lol\g>[VUa+iVKc!bk3hf[7ATN^,+C2NF!l+!sr4rh22MrsE\](u'%>EAc/ 83.V8Ks\L)q0GA"9V`fljp41Fc!tm +]/Dm[`*.*^B(Aor=pfLNG:F$;I8P^3pCXqqXL*>eSp=k"J.apI3%O$5UmU'f(&$H:gNLbg [NPnXJ.64`oWFRStU%huET"p%\(;5O[BQq!d7 ;7uo\P4F$\mATr>W3R],Z'`nIl5SDEPPQUehfZ_,c#Bht8#>:@RTna"^BZpL/_.TEj40lpO M_)0T,)\"Xa Q 0 g BT 22 0 0 22 297.143848 542.838269 Tm /f-0-0 1 Tf (Is it)Tj -1.246094 -1 Td (de)Tj /f-0-1 1 Tf <01>Tj /f-0-0 1 Tf [(ned?)]TJ ET Q q 36 428.798 206.23 -67.715 re W n q 36 429.4 207 -69 re W n [ 0.799336 0 0 0.796639 36 361.085705 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 258 def /Height 85 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 85 ] def end image Gb"/gqchP4q1/Ks_f]Ob8OK;%Q#Z/PrQ>`& UXn6rX:Y"[uCt1;D>L.^b3ib4p:nB5aI!\QdHWpa"sLYPUhn,a[B^q`M%^dlVL*^7CXY(`a WFp$1)&7uqPq[Pg'%T)61/k0TgU_\Iq;m]3GA>BOoBc^W't2+AN-J,UgNb4eq:m&`9ii+RE 3g#Fqa9atC!SHArr8BC>knMbCC+@W1Wos>AL)]S\JgMcs24_hNR[H:<]Nl%n9CK@Qn;FL]l aF2!",d)Ua:4@)@rZ\6dmTRF;o+TL!?iKqQP^#ui\3'Qo*G$EBRHL;0DfLGXablppX:8t=m jkQE4+4$5o>QV(_o'Aq%:NuYT].$J]8&$=K&#_Rp_Bd/i\mu90$%@s0$GdubW2mZ]4sk0V` XL1m)[.R#R@>_"@JUmDou0&*TH$kkHrUacVp)-;+bEqroW@?a,_G5`^kq?VFmG 2g\g>Yf-Y*DGY-#[QBp[L_*PH59GpKJ"mD-TT058clLT[^j[jGHgG`uJfU;KeJXrVt km=&H'W!W:2L*Cp`Qkm=HdY+5]f(1`P3Q\q[_rI".83QI&=Ylmb))6n`<7FkHGoUeUO]r( ;*Ga/K0sonOTY5Q%>Ia?WZ]@M"/8'I;5hL84^,7saL%]$;?ZXj0KJnWLMg]^0Ljf^is=kIB 1s9M8-p:fmC-@"@_RV?Xm*^A@,(IJoV1,\L=bH-t4!)qW((M]7`D]lg@75st=lmCG74^\X[ >o@^4Ddi0KlY77L,np`S^:%Z?9)b1QP]$-;e^@+F7XQTTE?DXoiiY^!n#`lAdS3QYOO)VT" [@cnrCZ.7F_D%Gui#u.%G&4(Efn)_?FObsbR4[(Aeb7&Jl.pW,r'(oQ*i:E/XroKK4 fp)`f1W2*rTB]p%/E)sX>#BOqPfSB*j2[/h%M"MXN"B71nF2'WpPQCro5\A7q2C-Kp)?uZ< 4O-rA,cHM>Bj=Ae9Bk-bKaIlamT7J_a$6K$$d/%IpU5JP0m=AQj9jS]\')J\qu'9OXe/UVP [s5@"@_RL5(Gs\:&^:DQ_'K/TYAL`1.OP0NLa!kV^+U_1[G\5Q'2-0XMYm18-oGSpUT8onP 1belSGRl6VKM9TM[_i'@Qh,XZ>KS;DtEa`hNFD)&+a3?qg?*Qk-Ld8IoU3h&u54GC1Cmao*X/ots4!q,1Dp;VS[k^@;"q@6b:2&tqSl%OP@Za*AN.,U])n((1jYUXGJ;[%0(^r"4E&/3^6_P1bDfgY?VEoRupTt)k/% T"`"T_FMKjl3AFEiq`4f;b+OjKit<'Rgr2q,^aatQ6M>cHfl(/Iu(&ogrto2iP-WFb^+d;1 4q5uS+qNJAjWAd#J8rc<94i/Rkb0L*o)L7&6i6N9g4Uf$NC+Z.="U^Ya>aEIL!)I>cV/)Qg ;,I$gH1\PG*BEcT7mEdCTFL0]acY/Bu5b8KCY(l94E&AV=-\&A?IjNlK_L7@UHG_Jdi1Aq8 l']1];%%%]T^CsE$qc5Xg$qk;]V[)PTp-T[=b.+.!o8WRU\'Ign/k`)bE-V+Idt __isKlAdZ)[.hU?sZJZ_;M;>LG>ro4?-#L\U[0*q1l=.fq_DNoT9\Gs&?m(XU8-3&+qJk-L :B3kW'7d1^mocI7crRZ%$^jfSip0VI#1&q9eJi[6ZXl/1g4g'QOO?qi<8CraYtJ"k\=k5HY"`O 8[*6@/mM3\,u"]p)d@drQ"ot$F'Q_Ip<$J+8\:G.j/+F]n:E.B6+61h?6nF\k[PVl'C<9#c rPuSb*E?rPTHK@g/tbhl?h,Fj`?B2\T7X?j3@lUj%pg,d)[5$:rc?mi^FU>QI\:ORA8q6Fq r^!hq.eh'IK&F9?Z:T19'\];1LLm[ij>mhLrPP!24DFh3>,<^=5hq?Z?"kpH7/_;0(o-!Mb 1K65Ra)*P!m71$H?i/99o!VRU:J1JG7isK`/fRI-,XoS>`)_5T\`t`"^EW^W&7uY?$B2F'UX0F$S&'%i(f'lnW< bCDr\9\i'ZDMknI!2EbQ&I1;@e+R6+j6eZ&INX`IU]a35,e>US0sSQ\43#$=Rs.qI8$+Xso <15man%CY#2;E]EIpC*@EQJ!7`2+3D\"VT/t@Id@rPTHJTV#N&S)Vh_l9N0A3^/@*n\UGo/ Shkds#@3qFE6%'UJ3_0ncRL#jG>I+d$S>@]$]kKb<@eMKUo$nYVjX1B0#T!V5#3m0s<6iMZlSH>>DtoRs4DB ?j('R!7Vm'M_<[QisGETi_jAUNiYXl>g@R785U`W@Z#KpT$DXGlWUcpnP[Ib iK+\LTmo1#H<9WIPlS\o=X$=bbS?;U/s6@f7a0#?ag+<<,Gh-ujqCDK&D\Po'oq+J$Z.TGB ed'5ViB%*kmV:3.\%?N<5XBGo#OnR`[GBgrSu7NnA?g8ZW><%p'igu$jjZ=hJr=%>agMN=< ^T=n6dSQUQ[Z:ISLVdT5:ErMHEJIF/AnR)_H[\+h7+/=lZ4!iIi/FY&ob U4aR?gaRV2T,_i_e/ne nT[q$34t;-b1Y&]V,R3*@1l=QU6nO[%#;MQ[r*4cH Q8)#1).eU(%#,o&2,Y14OSn_jM06D^HBl9NJJ)A9F.jI(RSU1GS&6p;n8dW-ceHruj#VM.^ 3T=)^^=K?^PU=di'C/">-/;*n6fBq=B#AM\riJAZ+J7coK8I]WCf?37UR8b0LnPW#VD6nek %%oL*20#81LDN&hM$oj*q'L"DoA^$1KJTl)#Q,D5e,@5rCNb:\oCX#^mC\*R+\3A-=JQB\& hri9ng#RMshIc>g4[lY9qrAjc*mTqFoeN+M"p0p-OU_-C_'%tc#<,aFm0K&fF?@4B)".He- IY-ZY`Ha@'59]r&bJX7=*F7t?SbDe0H5:?/%n@&bOa1d$$]!&:R[2'i#]@`NgCM@(_!)\WK::%a)!.j\rhMTa>5bc;a7L_c=&:Y71#b9-_@9=I F@";4?Q=43qSIV]R9O\X/cnfOI3.cBYt],VEnd(C$WV$a( d5_EZ`2&^l9XK/Z@IJ'#g[7@:?.b)(S(DIR"cHcA6'8+[RaK]"SH+OCj9%CPSWlgEPkTPIG !"onr6>-^>Bc$W,+cMGAU)'=bIm3A`QOit>+5ZDQ\o@h)R2NRt3r88fUK8qn%nVTT*uc/g> (k`UJ\M9]9O7G~> Q 0 g BT 22 0 0 22 88.727771 400.323962 Tm /f-0-0 1 Tf [(Compar)19(e)]TJ -1.365234 -1 Td [(script )-3(vs. code)]TJ ET Q q 365.602 426.4 250.668 -62.098 re W n q 365 426.4 252 -63 re W n [ 0.798306 0 0 0.796111 365.6 364.303344 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 314 def /Height 78 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 78 ] def end image Gb"0Tq,>adrkS&RTSjQ+_%f9B8IR/6%r.4S4-Bgkl/.hiMoBL P3T7B,kNWoDF.eT(C?:)A#Oj#C>"]%tuP$#=2Jqq]rVD9XH#jSbLepldN0351u0^#'4us8D QLO$A*nrV,2tpYG&sk`nf-%X3$%2K#^)^UBrVCgN3-0JD`46i&kK^!Vor:S27GWq>Re,X\? DIWKgX')('Y-2qNpWoT\WPWXR>=cdJSjlI6m^/M\GY\N"Z`k!c!g\21b]Qio%]dHUI]Qiu+ ji`u=R9pQ]Y=`qPC?k?La'[Z6FnkI"RLO%*MAIqfb:>FdGI%=`@Ae]JT$@#UP`*@$KfmhDX'E+kk<*=`5Dd^D1pD"P:G:d.+ NtI>0>$TRI]oL^UI`pAOXN!F_t?`3uU$Ghc\FY<84gep2JL3m\]@gB"tcLchX0drCo._nit f6?"#VqbiK1[kjdX&pI^blgt.F8S_:5J%MjI4g?HqU5JQscf-o1DUASJAiPm`*G19L!eo*R Q]5E="Dph*.8%sHAWPYpl@S.-:AHbZ!$WFnM<2%uB!LZdcH&7F& 3-gNF3^tIeU,^7@6?MQVIcSkh5Q'L)e#-51&'ra_cG4)=p9.d!I^E"eZ*Ih?h8YcJeOFCtO Zp)^4be0^0#"mp ZtSeQ$B[SN8J`2J2(DMEYg%Z/31Kg")IhdEKp-Br\.=[5:)m7eTF@g;2'?f8d:'kjS;q:tO 0Sh=nO*%Q@As2QRg5r9p32Z1drC&:MQaZV7jS*rt(Pd1k5LVJIEdI*D`fk1sD$;XU1M&/+6*4:@HZOe$[d5-\EM3>U]@Uj)ghi-2U l&qfrp(2B/##$-Ec7N$1R:NAkB\P$$n7+WU,g36`Fupp%@p#V=R@g?dkUX7Ku'$)913#STg >0ONEr'GFQ(U75G%1mYKt)/qZ'Cl*WuRueH1=<$?`?j_8RGFu`ZO2/[D\5N]89AoXsf8< /al>lI+nh)@s?:H9ZbM_A8(g7.,QU?*Pl^5LIP%'I6!kCtc@e", E8D`IAiZB&R>tjo!OE&eAKB`F92T.Xj:!btaD4_eYkJJoD*L`[B>%d5keO\Bk >NT3n\r+Jt]=2J_fH;X?DinT@#H"$&K-)4Vd\RQ7>ZXLGrhFoo&Jo_hI:4]H[E$HBE:g`MS felF/.+g^8Hl<5oA[#A/X]]ne^fqJsb)s7_bb80SV:\bLV3-_f<6j*-0sm[=]GXIU6a$]K/ 6hdn3fII,kGHQ(TjY("_AB2uYD)ppYY>=;-'*t;T,W$?Qr6>g/_)=[cu?,>^E>W\>UurlqcST-K58H6@_W ')e_jVNXk:rD]GFg'Xqgh:KU6-UaBiXT#-QM%&`/?2^pRW0MsrcD%B^GP6%jGjRrGKs9d.. T>D?q4C^8oZfJkskp%0G5/*RWe!\)@CMWXiD#1n_EJFE\4j@1%m9u45H"<`*e8Rs)`)Qjg] 5/N)I6tSL![:7]Wq!aKg5Bi!#`N4pci?sulT.6uYZOXj-T1&ZqVmodO$4%`&')<'/i``TGM X]RPOe;"Tf8AN^$24fh`O00b;mLM&CW17j,YAg'MW%<%d4)45_juse;d:i-;^G)7\5j#^8s W4lXVgJj/=kd(1#+47;T6%Q\5Q:IMJL1MVe#&ASndZ=_R8AumC?/#.u$,39;f:#%&Z^`:3! BQmZ^,=P-*=-:_BiFGNt!TP-`^ZV#],)4*A&.ENK_/nB!$o_B[%-3[V]kT3MZJ'A)N:#bQK b+ZrG'X(*?$o#ZUT,]TprMt#[Q(W(O;[5oYO-_FWL0@:AHD:[`NEMrNf.B_5#&3fpN6?mng =DPYXf1Pu%P7-@*r?epi,=elT8k*SGk:;`5G3bjJ"FUL<Y]k9Q=*3&`_@KI)K)@5e TFNbBYoN]e%9=D*,LnVC<4tM'>hGm.*Y \/_i4'->=OueLbD*^u!3W/-Y5sVDWM.-L7MDqUEuI$3JkomL`CHL%Fs=:MQVgT.]la%.Z90Gh+1HcK*:H TemVOiaGUaZmS,JCAL!s*>6YnfW>0+p3P(#cYf8Y9K5Z;dl;"HJP%B(/%fTW2etFM8u>ogO 6'28X`M2?8OV1QolrQ)b"2p!V?Q`3"5Q1tAKKBCrcaJ1b%7e#(d8@Z*MLgm%f7HD,MF'iUG 0ol5)GYun=B.7T.d=5_#'ijRfrmsr;'rIOb08Ad\F=:&/JQinBaQQ)B6-t;JTXsnV)8Ar]] rkM-kkQ7lAoA+EfCG@lCC@6eQN%RflP;L6WtX]`^M)K[#(P"UW1&H\5qB3WR_9^fh&G&H8M ^s(*8OJ<$rZQC/QQT#bm\oqb3,./k8eSNBJq4]P[m=?=K.k3!K$ B>jAseU2[OYU[4eh,h-aJUE% %WK_A@p!4.0<<.3=KYW3iTHlD/=%0n^(==MeA!<`LhZK=kh'h46RU\,qO 3P/)c*(i7JkB![A$\#A7FQXi';G8)J,"pmG['f2G<+"$1OY1]P!"&Q>A>6<@a`;2`HQKZXu `_beC`YD4TIapn5$l(IPO$2mE1^fk2la*r"uu3j$hq:^!3B7n `Xlt4e74QAu!tDq,$..+,8H%bE/K57l)glFQV'0T&V_e9lomuU^$\mU/YoC2P;#Tkih6S@^ UZe1Vlg[9T7c:dFks@AU/9u:7WLD#B1MH?T4Yh5?27ItC*24VR2kG8E;icD54R1[r-g(;1$#+4TY2_1A3GY5N3S9hc)< cAt.W5-D**0`*aal8)r-\ZZHBJG.UViSb"P*fQ/@UBC"(Z;po7 Q 0 g BT 22 0 0 22 392.355518 400.130603 Tm /f-0-0 1 Tf [(R)44(ewrite/r)18(ecompile)]TJ 3.138672 -1 Td [(script)]TJ ET Q q 352 154.4 278.457 -71.371 re W n q 352 154.4 279 -72 re W n [ 0.797873 0 0 0.793023 352 83.027923 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 349 def /Height 90 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 90 ] def end image Gb"0WHVi1(^;ob.cYf(B'(-or,_Q.(KFgJ+J:Jnu,_U+KJKc9^+H)RYFg1OF[8[k$+sJL='Y Js@B9`fP?E1.#Lg,r#0Qo"&AJhMXD67q$Nq5D08D!C5FUq[G(Wc>00E6,&'0gE--TD4D>Bl `&HhR*rdmoH?rU@]8[r1$5HM)#S=4b9SQJK1=lftoqhHXAa;-$h&=[RXTgpjJfN'^`-DFE! S/M0Dd='\j->?st#;cQh(=]np,Zald'r^^g?GB`ehCY*I]^4#bDh8bQu%hB27)8;(f^RaP5 '*\[H^]!l\[\H@7r'+KW;;qF;(X/;4SsD2j0fE@9d41Ed)Pon9B\T>fmb4'6.+\ h1dlT9=Y*!sKFq1$]89V7Z8]m*l"W[/ag>Pd=Tjbl(!/1N!t'Wj%faJ9LnoPZl79CY('G0# J?0:nMq@Yb<`(NMNVZ"RmbDV^2H/UR4u\T27pBS_nhZq%-s@*A[t0r,-:ekf7BS3&fR6!hj b`?1DI>.1tPD124mT3%=8o(C<]lU ]^h8kYd7g3=K!l[2&>I8XW1\kPc^l:/ui3lSBQbILeMMq`Hj;?ih]'U_1>9A\jGDCQSWEtN ihC):/+s%7IeSiD.5n@ioHc3&V8Dq5o KO'3Ra]1;UkNaDo\BId:ORU8VLK:S#A_.b=RM9/_PmJ$sgsOg.?!n79lcuFJ)EOTN@B%2bG 6ZHLkG+J+ON_B$\b=C2+m#M2)T`OrHQlAU&Z'fMu:NSt)=9Sjo/F]jZ>X7MQj\=HoA*GXqR dL8qC>>>O^i4l

6L/gS,!otm9WK?.+X810W`d#S6+S4#:aG)-,TN,#l0N6`+,U'gOsLJt 3_oDCpJZNK(`ja4GOOBIQS+Q*q]mT*DqUkq>KT-&<^gU;E1B50VuY$@P2\MPUQ;.@J6f\i1F_$ M:E.=PMNa4\ehM=!jo3nhS%_].oVDd:%P%La%`_=S1m_83rdVqMLdkBaF:`G:@fO.2jP&fn &,5M'*5h<@:&DOgOg^@M5\1UbT!;E6>-.Tor=,-+;!eY5".2)T?iX%AGJkGhIVS#6Eh,Y9o XI94D_/;ir>K?qJ`H?NS$O]ndI/X3S>I%A0#MuYfJK]C-p[,Ee)WCcX)bt\08I2% .C@/@NuA>,]*RoU9g`H?tCoiEYko+E8-!o3?5fUX+\rSQN&GCZ<7bE$0%iRkb,p?msG+3*0 afGbfW"(U\9^ZE5hQZb@&Cp5=&IfdAEP*7P3l@b1<%P?&`cHFb(j(b]W;)U>`h7ijDUIUBD ao],gO?`^+c0KLp>;XK!+id_'jJ>fM-AVIF9:1XT3GnSS!4MuXL7\rAk<_-l)nsCIY$bVn0XqpZc[dDFZl% _'!h;f3p*;VOroo>/oW.ZgoGcKmE5VbRorq@")^D"0TQc,lCP#qg'IQi!N#MMF6-NdD>\IZ &2)XLXPD/3sBn3*S9V>HrW)&qu>F(5U?H"uf1D!_*_NB5u'aM?Nd&MgY%CBp/PR]apZOSQR n'9#l3$&/,U1'B$b!P(IJGZmOp13Vi'e`e:;@=Is\T[u?G+PinAZ2u1U;VGbTFI/YG`KoHO +\'_K7oL;B5LQ(3\%*d2(AMU?O%a Pkq8Fs"4nF@<1NR2YXf--5kkN,=bRV`hW]_,`GSq9t=j'U)t5YVmX:G\Sl%ZMG@8.[Bli%" n7*cJcQ6\lXf`YlthKbb0<^pXMN,DGrfbNZlI%DP0Eed3?abruM,@GV2C1I$OuXlj'9O[/; )(0^?L9F%IcRW(7fXsCg5n`)jo&Yd_*n]!>+`PPJ(ll]Gm_$>Ej1PE.srk+?_P_F]#G)`)C c'3pJ1hbE,gW9&=S.eRj\2GE#`$7[`DrT_R*1Vk>j'&CBJ9OQ+(,"n2ZjsEm5sWNTlGt@0Qj!m"69QPZ0Yo;J&.j./"O$oO!MQ*ORXePV+NEY 'o4(^+BS?53Ue!X8[.TRS$dbQ7tL=d7;:!OI;B5Sdi$6,5$Z&C?+)\j=+_?kCZfp1?V+/79 %9K_0VC0N#-;)!XOU(+=[u&c,5:^Bp82$j)kOhF\>5$Q'"'0tbIJ?ktF%BY8]X6,5$Z&CC2 07R=g@?kC\01olS$f?p@&73N:H A#ToGl]HM$YNq.5@G53JBSSdgUGBX*7nX8O?'%_op>p,!\tj^miA`b=[;,%ntfh30FPsL:q gqn!bMJ$(!6cA=hlR2o0N2Z0aj?PA3MC`2.clqJBS8[F2fb=(6J?bI)qZYbQ9OAPYW.&J6> /"KC\PA(.OpMXbiDK1q"g)/S5$iJBS8[K>fBL(6J?bI&`P;bQ9OAP`HNbJ6>-LL%9q,(,-- ;Hr.OObeb<1_4U%D=[6mIjf>0sAc\Ug.,Uef^apVXK0d:(+S5`X2e[q"$cldS^-8lW=[3aY o%f_EELR-fA/St[]f+"L2_Idg/EDSjX7cCkVC_(,KbcfkeO!=gHl3/ra8]dY )KYZtl=7%GOGiV!rs!Ek8JU__4iFK.Nssr4$.\=?i-73GXhIpZ2fJW(_laBs:eHc-c$I)!D gI8t:lno5Vc6+H&ScHDB)7DPRT:1si+Sr@4`UK9amb.1ffVo<-[6njfu>a]u.`4]s+P[u1m joQ%ZHjH:g!D,Bgb;FRf@!\-%2>n+E1E%i2ja1t9Kn^p,'d"O#BVZsg@&d35M32VF2'f8J!CH#MpN(m=R1'rCRE p@o$HSJ*)u-6ZcA)aMR[=u7\!OC665GPjDoH;9;j641S"'9OqoCH?behi,:[d)Le(/[fDg& !"hj*@u'=.$(h!$RP6fi0W/n$AoZdqNbC=KmC"7K&!^F`T-.`K"U7>MKn,r->n*&=/B#%!: D7h4M=+5@82;seETB/>4dS6>2V)ACd`)A3ONl$c?(W: h3U;>RCtYQYGLA@*>saG,&3``M+YO(3XnGP(0IQ0WE3HW=2#jpg`d;RuMQ58b)=5-Q81Wj5 iW%EMAXPaB4C?*^_N`2[CGGSK_A)S0;BS)6j`>UW+Rs+nJ9f3#d5caWVgjcQMBR;\OD92Jt ER4;W=&;HZq)rn!a5LCYJ)fED!4ViL`Sr>cn+8Z=$?8mH%1Y&nGT4'QVM:#ob8@FF4Q=r<# 1c8U2(;$))b\NgG6(,?jbT1H\E(nW-be&\VDN`M`HefJpK(@;X8%-o%@W3ELVg`ZIiW;L&^ Go"IQL=GHgDf9\q6[ing3Q\MlXdHOt>e<4H3n]BqCjfGC.>JN!7[NZ3K=Q.2Tf3NR\BtE6l "!UWVN$@`22C],(Rg=6j1PGd=8%UF`k#@&;1[F?`/A1Lf,=.Ba9s5(#aGUMfM"3@g7;ZsEN nHV^F+!/,(qKd?R)!mMh)Fc*AfMniQ.&#TX^"?A6`YS?ETr_"##hl/ GtTrG#"mIH=9V^=n`jqrHKq#U";Vc6fpa*7&E?V7:o!.V,GC `OqYsmaQU_;"pP9*s']p<@T##u/rk :RLcl3oDq"5f:,3'j\,=?g,89ha@pg::LqLA~> Q 0 g BT 22 0 0 22 442.893213 123.332434 Tm /f-0-0 1 Tf [(Unde)]TJ /f-0-1 1 Tf [<01>]TJ /f-0-0 1 Tf [(n)-3(e)]TJ -2.75 -1 Td [(\\MGL@@@)]TJ ET Q q 0 154.4 278.457 -71.371 re W n q 0 154.4 279 -72 re W n [ 0.797873 0 0 0.793023 0 83.027923 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 349 def /Height 90 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 90 ] def end image Gb"0VHVfoM^;ob.c^l11+iFAk&OHbb&?[/Z&-NV:84!B6J06BE,(fR#U/gNf=qlm8&J,YA'j S]ce4R-+Gf*1NX]g&ka.phO/E=!XeRQ34O39N?rIqVLmV\qs7A#A)IHL4;NtX`rJ%snI0F# k0B@!/5IJVcDhgP+@2n*\\\pX<9?XLEdB6388rMND]\pF$aIt.L3HhYVRL51Q+%*)i%A+TWNKKFDG >e>0]ld2>[R[WtO/R(&M::f&H?QQY^nnBfY_Ode2_FX==fK^Z`_CPcqK2LQ% $_BjO*6G"S-,/.2'6,oa7-<\A=J]t:JOcWUP=*iZ;o,n&dF8/'(HTq\9/<^H0OU;FC*/?W* g@WTMWm8`Iqel9$,DJ6/%^U:dbGC@H%-A9_RBWZcF%&_Y8I57W>ea(>Y2Qp>[O,N/)S3uDD U;E?b<_WHrbuIRQ;uO7[9YWS $!3mR1_S7gTW(RBmuA1.eBMVk[SM-*rW1gN'phu8_6gQp/L]Yo9^YJ0ku%m+rF:RdYbe<;6/D-3EoP\? X$[VF+3c>?QO>&&D-D`RX6`npEdEsK,d(D&p.AmGk6%iGtId[lnOQ5+#s'mtM"f9+/&k2m1?RC%>/EqjTJbDeo:3K9i"_ m=.<@nBf1\/W6q#k,3-#0YM@AHK2N`:m*`Qe^'Y@lAAMI^Zsh.NO-jpoCZm>[.!'h=(^\4V Ss7=@PZu.g(81VL_IRJ'=oq^fT'-XFDGsXoe4'*#6kOA@/U,ESND%AHB'R`4Pu@K?2hGrfk ,ASR/Gn9Wj;r!DkHB@ErFLq^"!@Rj_ZN(YKKnqV(8"3LG`XuD*pP?R\dB::")JWbLnX6Zlr @FRhf7Cnp`#ap:FGa_?eQ=!&q=;U^.Q2.:rg1](lWaDN8XgqTDpA>2%_Xk5P>V'`LXTr4:t !1,Lh0i5"4IhbG!ZS7cH$@tT0PAktXrGO+p3Hg[Cf!71W`huUVl9&:+$Hu/!aJtk1>=(KgX .d!c7RJn1cKGEe?j=b&dq31T;lt)cYr4K,VcM_tUhPK`-"`"nQoVYn6*UW*j8KM,L_j$5cV =a`JV6eEDZX`*FF`.r[Hc>ok5PA7NugHY.LY>:6F(Rj`g=rpp%nG 3El$-OI15**PXo/%pN\R;]d#`Ci%i*Wn@'Xh>6`.1^o:5q/VWemE:K4(:gtZpc`n)FMUAVJ [MVaR_iZ/,."ok--OW7f1VC0]78"s8dKVP`(c(mW>$`=V1$)BG1nk@Xs>hMr0hcW@rT&&SA5JYT'G2\ch"^dh>^fMq(+#!EXGM) 9m7?MDrVE\mq0Vnda;lnUkl)Vtn5RH&]<=n6I#0NZ)IPH^9F?#!"V<_-=)TSX^8tD'e[[$+-.p/HInSE't5Wol.bR-c_8h"%#sJQ3\QY_Efc \`^<`?X9c@$9D3@o:SgOFYN.!#fO5iH!Ue5G/q_BP]"3JW=jTYfr.Q\EOCrTeO3sRuUuZAb &G>2,To&sr*HigH!?HQh\#eqt$-nss_K^#`#pJU,-<]=nb-54\>Gf4$OPs*j\P/W!SZ#X:c q2pL*g79^Q8b.m8BWPtK#QkCDhHiI8B%X[M_E<`+BK`=RqXn_Hn]S3+@5cJ)>]NT1OArJN" B9"1gA,LD1Ko"fG4j16=?Cd02(#t':5X#H7:q=p/sqCoM1R]'h8PpN8i.k!hauf$O=r'AVA MW:&$7S/uQQd]"4&V&A=I=L54b'0=B WAEbd]?;@oS%cVrbb),;-E9+O*oiOr&i,elB-\eVQ%5sQ)!\^c.::^ark) d):)bf`JL15sXXl++f#G^`Xcl`BOP-Z[b>,'A:.O!4.2A5SM^%"9GiZ5sQ+.F+]!G^`&l&A !B9p/79%97.DU5KYOa`*a>lHK?P^4_=`$JEVXV]jhg3$]$tp?TMd"Z[h7l nr7,p0FN\#-snoF!OI=?KCW;X(,-,P4t'bpAc]5gk_&FX@hpa+Ld!4o0kLHmJEVXVrF-Ok/ dpqe:Wrm7!9MDC/795)I8IX\bQ;AWd0JcK`@PC4&5>tb;To2S!RV/6o>E1f((bmj5"s0%Ac ^9ajccJBbQ:+3P`Lqj0FJ.`5!uot/>.iYnc@/PAcYV"PY[@c0FMQgTmUtSLKQkU#N^"G0/* cI,+sl!W.uBJYf;i[b;5rRj"1X-.UK5`Htd0mC`^^8 4qeo.KPgnaNg/L#MBrbRp@KZ+Yt(7%ed0=hd%Q)(P(aHL+R@462X84,Wc=,Sp^jX)0JC,3C QXdh.7&&>7h/O2BM4+=,OF%!d7!19\OuL_iOmjl#@oX3+'nLgS/Z1Z#sB9U_7g%cLkaG'cU qd314AG0U>h:dK[VddnPKXmJ/RN'1+L8"1:K@LDaT-?Ge+TT7mTin2!^el*]g^u;'Hu9=H3 id&#YL`32oEO&.&Cu-ZnUG,6;t%?rI1Z$iJm+l1&kf8r]cGa\.`"_`XHAKe*OsTr(s.$ulk g=%9!hHbA,s_1t/uR.L27iVjP[r^)*:*X:pS/X7QqWHKj59SC\ZbFJ]oG9?%qld.A,:=pEl eIh-c]`IH9%Ia1\I)*%KGEe?'YnqdFE*sR(3]+^2!JL=Xph-;-d%btlg9l#n%*&8T M[AROa%#<&>Y4OB$5+cDCpEb_Ij+PBDSl*X2#oNbK7kZfJ+kPS LcA;f0Q'DN(eC6.BKZFe jo,dNll^I86S2&ON6\-:XtWPWKFD_rESq/]_N.%EY!IX::O= L/D#\9BZ(1M;'M3,WtCKiO:a(7bTh`aZQeF-$(65^#9PkA_qCX-YZL\Eb/tKk5(/%\9hg@6 <>MZIGkC4Ibo8TFS"!@$As!IR_fYD,0R[5s8/W+(B!dA^+CU\6CiZGp$?hu6i8e&1&43/3+ i>Jp8Ioo#q6A$b+\'[$k6039mn&N`[KGF':?:Q5$p>NpC4/@53-h%%3T5+GZX)0I@/Fd:1;f,u2<$QOAJn$R*D2o8+'c-Ar`K!JATgb-m MD3d<^=o,,7$1@7I-AW%=hO;l-R!0pnBr0RY.M]m5SFn93l>>+Lf4E?VDZ0XH1Frns/mcEF VF*%!60nP,'&AF>p`);Fo@33]"TbeG1n=@XbaIo=K#L?!86KW4A(_0g5)aRBjr1'k>k!nZ6 J_D']:Wl#+1ZXhBMifb_"p`6Q*!+OFSS9aIAEUdT6fL_\Agc\#pfTi^VNH6HfYA3ONlA4gB/A6*5G)O3'6/VVE.N/gSMBP>K`cP>Z*"o(Y,mbbd/oB+ T.Z:l\pMp.';MbIq_9+..,)',+d)'Bs &%mPKDA[$X05`Q9U!s;W->j4CmVRu`ha%&>[54W,`B.$%0=!CSK%''1Q)&G:VOJ.fIOjR># %^]u&os)4GknU2Kj2[5&X-/'sbKeJUF(]0"E*rYho[<.9IK,C3O`?M?OeM_u8/U).r#MrbO M(~> Q 0 g BT 22 0 0 22 104.449866 123.332434 Tm /f-0-0 1 Tf (De)Tj /f-0-1 1 Tf <01>Tj /f-0-0 1 Tf [(ne)]TJ -3.366211 -1 Td [(\\MGL@@@)]TJ ET Q q 268.801 38.4 96 -38.398 re W n q 268 38.4 97 -39 re W n [ 0.793388 0 0 0.799999 268.8 0.0000473848 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 121 def /Height 48 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 48 ] def end image Gb"/kM-!XM[`AE!(7?q5&2KH&O?b/45_(O<&-7nbN5-)pMMN$9d8E5\MJ*a0%`fb]'GOE&W! M,BeQU#I3k[^aT@`7F45F4)gpVFAI<%$sYFIeK:71J3PqX-P;=?*eWID0]SmJ3bL2\[-BEL/u7bEH__ PEXad*UOjHQbn!bC,LiGi5?XMkI"L!]+*Wp8!$*]kj3Wgpln2dA(OtS'&m2EmrJR( ?O)4Q`R9'XY-(4[0,=@ E9V3j^A;@$n^,h1=Cm+o)0_O33hDVZLNs$kolkHDVrlIrX]!sA"nXK7qUSPbW<[:8[C`nH< YF`kl#k9^CKV?Uh9?C?)3A_iKWF[nN_:3LP<[sQT ]4uJIoFP:sLXBs\*^d_.3bfJW9oMaPe].A6N(UosK6Nh_mk&\tZ^`7mrT;AHC>HDie>^4<^ 3pr7s7!o:^R@(&q=Doss6.=Rmd@6XW[2^;)6YWZ]6a;$Q;ofsf!!;T$_9LlCB'SW_qWb7lI g9i^Z2N842*]%HYgUc?0,4KZ_tHu&R(MB>a&nfX%^lAR'kHN^/\*[ITNR,lc3]SESBt4?>* !l2-&-'nE6M_YL7)aEJ.e=LrV%)Wd0eNAZ=W?[/D/EWaE$j6nZpT +2f2_W1c0ICk0;dM)iqj`7aAV-gIk-GZI>^QPq?*Fp\M=@Fh,tq(Kut,>1XhM^>Yj#m<=W[ \UUpZCeN)= d1UB'\-Q()D6pi/rf=j'=*$e5ZrH5]2LS-h<^3mJtZ[M8sCeICKMXlo^p!p0[=6(Ytm;H9_f,$ dQi^D[h*H.P,\E(!a3k0G@i4E?9:++oaDp\CX[F_>D9%Po>8ZKZ&o)i61Bj?f8bW#dHXHu? @KLR7@fNYH]Z6;.O1*ZQ0(l1Xne$/^\s?leV%hHj$?SN&X8\pWJfL)&eRRDg'+6g\[H hmN90O6udS:XdRkHMH_3^d!=`YlDer'(!kg?(cGOBkUmC2,O9hI89FTVaCQRnPC%.M)\7aCU;`9/Me*,\u)IUChgBDPE;'j$ -1o6iVj8nPSl&Y\,#jZGbOQ92uMl9^s]2gP#W`m^h]IIY8m#]Mo5nNBt]:RsIB[JgOIbsXiH$KYhn%fY4jMW)k*Q?"n>.Jb*ntjuW=Q2YET.fVJCWoTG'gP86XpOs9IgWtt`5(E("0G;)/3/6+!V;2aj) ks#gn@D'&dk&A-"?XC)&N)gEo+<`'9RDI4.m#Nj(&QH!2o\g5jT!nGT=oa6`3PO=V,38GOY eZeDL6G"YX`u;kj4JN#Of>1LN5lTRH0>+fEe,J':FjUM$LE0ghr.*H:CPr?]F6gtio0JD4,QX'qnD]#3KtkC`B$Z r+:er%1C:$c'\EP9qFdgFQtUp_6+JA_Q2BQoQa,n#d[lC']tm%6o(!bhA=4rDcIR^H+*ncO po$@!]=ObGbp3]g(*Kn0.^N%h)t\.G\WR2Vtcto:MV\NA_!!+_-f(ZR5C8"t9$&Ei]$W0I;!+oK+.6]&Lm!#=5VkK&BU,Rl),NgA$'5<#$c:D6Um"#R<`Wl8Kj 1)`#1\b,Xbc-*MN=AH-;\o;S-DJ[Bn'l0D5CMTFChTCHMg]2aY@='gc=?URO9q!Z=%pL26# =FI\$5M_Z#Rr6Tj\1fbrS/e>2iKTb02 uXJ,d2DGALb6rdo2#:,fjJG@i,?$XB3rr"\0/EK\'n-" f*fV)U7gNBI=Q9pgW`rWSh.?\>8ld^"7*\sg%u\*7S1Vc)*C1i$7'5KJA1gXF*%I]NBPr85odA@pDqhQD4u, gIE!Z#tKR*/6j@g3Z5dCMB,@7#a-Yb6Zq$F")pI!FngUAQN`pd[8INGYc$?!?Y"0W!C0(pT K@8S.(-b^.R0a)$Lnf\%Mf(o[SK"p>QqKdI":/Ag6W0afB4l&eP-L*^n4_js\$FR*U12Met cHmA=EMP./(nk7H--D"cU<]#JV8"j!=X9J"lq%]Rh.rE5K?nSfMjT&&DO?AoIR-Q23/%APC1!:tR:Q a,21WTLmr![cto785%F@>6aTF!COb:fsKJ`QIZ?U^3k^Jf)]VUf8EpMN[! JH2M&F2Bc-crciKo@oQid)g.;[NufEUKSV&p=;au='*Ng0QGI#^X:9ikOQUr#l*,<@WPnip )CSX6MF*jV>%SbRM&J;X3RaS4aZ/F''3Q2m?pkmYS2QAQFRXCKpgS4Wd``&1O[#N_B@8'pM C0tLJ`a3"H4^komgb!CI]uM&l=!mbNKZ.#H-U.uBtBk&6[d`6WpMDIC'uMM:!5E ?^/U0?(5=qc+0K'3[kG,[F*G_h44qb%h&'@VDDYo3^_%Yb^5.$A*/0lh%pb;Mqj>-=WuMZ] []eajbD= :Psu]sighjP.2QHSJVZ)]EH"IU3*P,S*s(Xal:c*N*<-qf8nU_$Le`!B--[OY&L!3jHW al9M:)`Eju3flAlp*Zl'gkeos,Ogn6C)3`Q4B7GK=8P6sN#%sZ)0`q7s,.CqLJ2.khl%jA= UD!\N@jBZZ]k#H>7?4X8$m@P7^mdNlg`&ilh>#LBfs["OHYHiY,PKRRoTufP)!=@DRpt9gI 2f!e>EJoF6=c>n+$RrqbpbtGbtp24"`^!*GhA*_c'2UM+N3=u'euFl9><1][K]'R't\=W9=?%sHZq ;*'/Cco&pMJXp0'*BIa1J':F0=,W7sIIlq&II2*nqr(3m\?,uH:]CS5!,#Rb5GAin_$B>i0 I7UI?J;N Z"cI,m/3$Eb9RPB2-ad1+AoVQ8n.>0n)4iiU[nDsic l,H+!p=G0%HeE6'8*DDE=7T)lu[o2.'OD3Y[/)Blob)["GOA2T0N3Pl$-/smbG?om+=!A:L ["n-_Di\]Hh.El.d[89iq\*lsc/WjNh+?ih6mpc(^nBadES%Fc5lmNqDeHV;KL_rg5A;=$G b/Sq78e<`d]-De@2-S5"ZeJRCH).2!$u"2ln8#;e,R$m-X+XSIgFAUGgK6;WIGToJZ+J^Lj 0J>22=2fu!qVSYrp9mj%#K=@>6NphK=4#W:7"W[go*(uV9\b-OsXI,Pjd@LIQ$JJmNk\,k7 h)*7D'ZomP$#`jGdG[GaKGs;S&7H[u%L.W\@=T1A#)a]q+L/,i*r?DrB+^-EB9G'rL:;*Y* rgjHO/%[VKbk$;&W/fupaT>m294CjeS,/rS=\k3cdB&gikg"=@H:IYG]-">lD&S5;7nb5hO :ALD^N>$F;Wh'k:m)J"N/'K0JnHA%2],6j64H/VJg[5*MUp'KSTfj+JQK_Q8:W7mJHYHhn" (H0+AVi>YBCI7cr!i8gsD#hOY"CM_1b=2XmCaB.O]pjR`R$4]tA3Pg%X_/QubPQCUC3IKH" h_^qk+kVbJ_+^cE0%L.W\@=VOA,?@&?CGNM#lk';n5TkjdiK0RZircjQ/eP`QYY&AMI9g$>^Kh\,G'4GZ;@T1]/!jD$#^>Z,sB9[0G"WtK>Pu7ed2L'j 4oWFA,$<1;=*T5_E(4O5keJBgLudCJff7%i^IZ%)ckPNVPbA\]MPKpHZ;G?8\p:@WhONR_R c`.@B8XcjUb2`\2id.*4/uJ$#Vf)X6;7r[]>&#`C\6q<1P~> Q 0 g BT 22 0 0 22 295.822559 11.771399 Tm /f-0-0 1 Tf [(End)]TJ ET Q q 243.199 325.599 147.57 -135.715 re W n q 243 326.4 148 -137 re W n [ 0.797682 0 0 0.798319 243.2 189.885823 ] concat /DeviceRGB setcolorspace 8 dict dup begin /ImageType 1 def /Width 185 def /Height 170 def /Interpolate true def /BitsPerComponent 8 def /Decode [ 0 1 0 1 0 1 ] def /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def /ImageMatrix [ 1 0 0 -1 0 170 ] def end image Gb"0WLK>0kqZlWji0Qio?C/+D/laq`779Bi/ijB( $WW;.$q#<:p1Xbj6rdAnG+4G(FqaS/b=bk2jj8Ep(!jHg_@C<)H(!$B4A3d(2B*I,8Doa6;%^C;-- AGm`O-%gg0#ok\2+$I2]q=:MK-[spbC!Z4<4+GqRZXW0bo($X%2K'uoCi)2\e_+s0nmsfCo _.oR>/jr9-ia/>hjlj<45/$2f2f(WZ=m\%gf`U0:0(u@;d@t@`Zb?tQ3dL8nq5ru7:E2N\ZZ=`hLgY]cQ]._cM,>En*"O,];eHJ *>9dtmRNbE'4(F7iQA/T2Fr$dc?Bl6?c#n/1cC_#AN.ljYSj.RFj6G0l]"7!]OqM4JB$]tm >IIqqo#,hQ*^O\p55$=0edN?nD'rg&2FH"mB7bi'JiQPnD+5'*EiUT>3:urr$gm>GQI/uC- WdH-e5W?iO.SWe@VpEhaf;0@/!EjUVD!MP9]+OP*.4jsVO2&,16nCJb*2$]Nd?R@g'VF1h` @,DqFts)Nh'JIf:S:n;-^=c_44I='J,-&9pdfEjG+Jb'P*Ql/6X+>fsN`?An0];V(p(U2RB JBK2#>I9U14SPW]k@DY+7\qMKI-'?ml!FYM57GB`%^H1^"qV.GmV\.; _XdV`*Q>)MOs5BLR<>/Rp[koe%6p_+TC9BBg@=VkfBPAV^BH="qb=]![cgd8APl(cjZ^;^:9I5:NmO8PDkSWXF:j[hblB0ClfH+*D5:Wr D.D='K2'X`QcD`GD,3s!rp)UR1BU=7%tO9ocKY(K8;0Y%Xq!cItNT6jmg:-nQ[NLn%GI=b\ s$gf&Z5DooOa/">/14D6A7^K(a=HbmbWi(.a8O\c!LgP9dgQY/%6L,$iaosGQK [@T#=f6HZ*oE2dQ/l/A)tor("FPFurt#2/i6=Q,4!,H%"i#>8?RCDJp)qtu5L&3FH,a]`be JeoR$J".[AcX<*\8$FrUIC$W+jY8-sS.SMcOb$SXL-0EhGB"3]XbHLV6:Y%;Xtk[r)9I4[I ($kiD[cn@/HTL4Vc4;!eYa:'J8-J3jLFgA9ieM,39%Zq%D)[7k)0GabR+@OY5Z7UcZb_'[. Jac;P^9rlaK@RL/FaZd&CpuI__p*Br#Y$:[oWt'YD!'Yu.G!ZFr5I_lC)ff['^Hfk5ddD -jtjs5H<-V#UC7!'VN#hHU0W[t/n,_=;Kk&dXM<^^1K1aT9FBTOg/DkRI6Y>4RBSD"KHt[( o-IC2mf6>>\Qn8;TDW?^%l<),HR]-V"#6MMrq-l]_?B#nh1Y_!>doFsT+2#946VXb#CE#Ft TUJ']&53map%9M:3EVWI&)'6,Vn8H]u<-\=qdj/=fUOd-nmD-K $Z\75:Hq7M@Z$8>cB27[p`jmMU7.As6>+6CqrV4$J3BSc@D+]!(=msoYT-Vj!1YE=ATA<\a ZuA7[MOI5:&%k^[^KA[LMKOb4-;i;CgB4U14rak,+7LqW&Rk5-#m q&Z`<$M^9Z&,XG=7r,C?a_l3@V*7GnRq_GGAQ 9b>S!g;5:M>]Hf/u<)m2V>M?MGrFeL`UC6trhuA=f-d]uUHLS!AS6pe'-\>+3`tN0o^t+3= Ml2C]e7'X6cr!u$Zg^>/!@Jn;P]NDn2"+;r2Xp7uJ%$ZJC#K;=W "p*nr7?R)Pc6WdR#B`k9mQ0[h8LDHf)<9=kfET\W08%Qk>&dr'6q,RbDDl-fXgPs(T:mu:J :Q&Vf=&XE@t2/K;i=T5L,^X"E]loi@/"ZE3dB*EdAP-#e4N@?[ZheK4`sai26h<"+9MNK9P 9PfG?LZf)iu=peNu)C>%lEY/Q*gKPBBMFPRHL;Hge(iJ.')P8/%C>Z6r8H=mhq#aju9YVrZ !pBGgR&91SQSe[tpK"uAUY*8I0E^Hqj(Ts&7MacZ2ACCTY`L3E179=E,pj!V!ADY#\nol4&8ME5kpD9dE,?P@#FR8ppnmPd86*9(qVakDSDL%Y.YR@RkkPV%"EBuKP5%KAe$d4`cD bX(7kq<$U:9t?ReZ5Ut0InGXk`=HGtcq,spP:LuQgGc%>(=#:;oUP*!-ZHe@-Ps//$9JRlM G=;^F@jh'*p6Eo7:/q\:..EqkbP%_??a#3'CZP>m4Tc*-cOG(#LCND6UIS;lL:EL.N2QK3. ]<\\W_RuQ64h=3'db4T])OfXp%RYRde4E+t_;)&LiV[`f`@8='D4;-ERpa8J&Bg>ZCK+"9U [d/L#PP8[M5/+=V$.-sa<5]D%8RN_rIdqMn`5kg30@Cfs5H_n[> aWs,%QTnW0;"K@4\r&rhT=Pr)(!Ql'r%U,XSj@,>Y%=Z+\q&4T$Q4mISmS7rt6f-ZFZ3MP1 ^"0NOd9OD#5bF&=LoK93?l3[_ctUa#A_e=pA&FAe_K-G^"+(d$`I# \nqB3PiDa?D,4Kd3>gd58S8$s/=F6'&(8!%MkYo3I/\g66=jA>Uh"&[S@IbEff4LLgWLBn" WAt>mj5;cZaDXIp#-N=DLcMJ+!OI:;k'&Om>Cr/P)BNaf5h;,+!ud=t0jeRd(BBk]7pn:'S Sf/a8$H_i@#1I2B\sQT.`26MjWWKmui#[P!@OmS_HQ`TCIC>%$[5eY58!0&]["oLs$g?Bn1ME-ks!c5d(;u2#/[.6\JNDI\qc;*8M0#rkjQ\;&N 2#5H0O)&6@72g3hGiYfG>hn:<(.q,./3=\mW_.U?=oK[#Bt4M-uP,(];WD+cc":DrJpWPZc ?>(:(cuNW^^B_q<@/71(Ug(*b1B7H7XUQ3l,a3-SEKdNjCj 5,P*Tr8O'ZP5/+=M3c-NF0Wdiqr"[%[>9S20p/Du9 Jg9!=PTn!R*eeg%ur#j:8AD1a+=sj/c:,/3@BEm`Ei%-U7`8:3%]`'+tRbsq<+Gk(3c&MLT sjlclRW'LcU+3ad5(,,?jm*7&mM9rX6CblhqAE@7&#Zq#=:MhJ@"PL%i)GYU Y/$\.>hmUY$7Jm.q r\V7HLK`>Yant6/-EpMGe,B\..M=Zjk/MBK&`>r:+2Rp_sZ0?p4b@*W<(:!@97#R%`_LK:` b4;iL8Vmi<7[N7KC_q9CKeDd)K_BZNal&8>*@H4di\--$eq/VU6<]cO>%$[eh*0#[G?'Q:e=lG$/"s(]]<(++_pMpp\iLU];jTfl7E!D<&A]V]D3.Xe?=a iDROrYXUISn&"nsmmMMVr`2j5eBNH\r0@(>-4fG5gN8iPrFNgc5$YCVcOJ2E(Oci+,@B%kH f;k:Hs&:n#qBHi;WTA]H'Np4HHMUo<3dl&q\C[P$WE@&&Wo)6/4I)qmN+Ieq^%*EtET:JT& (9e=J?:0+4;$d=S>3qli5FE4C'$)*P9%q@%9jB>;Nd'Ac5H"a(4[Jg:Z\h_cuZ64&FctS&+ hS":1o&\&9B28H2F8Otl\_3qg-*,KQrfE;,n9s0kd'hh(3d7bl;6m"*:tQ(OBKoJVaV^pBU .$3M7C5I([3ReR5<\J\<3ajjDl'Y]2E+<(9\<6DHLo:Es#khdf@rB#/^VW:p[91eGgOieDV s=.(X8S9St&W=[Bqc7ECO2(IUZDleV;7I`AK/4Ntt9q\FV#1@`euh(r7jnE4,2\M4e$5UBf d`NiB$+94a9[njMkb'5>TaVMo)EOt&D-3dp#_Ms&FFj.jB(Ih5@=I/!]644gZ@BrjD'I-JN 0a`6Xp(RJYc?8ala:Jp9M5:c1]ltjn+7_Y_I^'">"b"sbZ:fIXm"UjOU=,M"DM>T$PUcjV. -4'frs?dVne]ToYB,V)o5<]V3-i.1=ZokQNHI."cOJ,e94DnEWnCC]_2B m!0Snq%siQ^;9[B$QJ4or$$?eW+/e%2W4e@<*4+7CK<]:)I\rT0W.iAnVP5)'Kr$ei4cpTs(AuXm[5W#/ LX-QWlT^:7*/OUmpYU%)cYVLMBk_VclBP#"ZI>,XK]FbA]O&)59ikWXc'FFhcN$4;=8q_5p ob/i/jqol4*7/Zj^\p+3dFn4VLs2%YhL17F97krs"--U(h`bnJAHP-g1%MQ1o?GB_#t^GJt ^mWFA7H\G38,Br_Qs/rSkd(Cg`Bg$N-GX4ZuR^5Q9^;?!/&g(+%0T?^k?t_t%A[6P")c^=i "&cc&B#rrdjrk\onlrDu6g,%q;eN<.r?#FpK4m2%DW;H*k&"UjOS:C#.KbOkn$Y2C[SOCe6 4*pZKZj(E;D71NL0k%]pf$59heZ.-NCe/3+:7ZRfaBPM@nF8P[3=0JEt!_3trldh%7LMIG" [!(!B`JK;LdSjYi:R`B1V^2#iR=h]TC3q"m8&#?9OB2(I:#K,)3#%2HD"&fg%n-#QTgh@GO \uSbNtbJPblNef8;mBB'X5RaX>&s51d:b!I@H;SW_(oq`[Yj1MDhj37dC"dT^mT8[MJJtc. ]^F9D>2OYXaDn+R,ltp%:Isr-2H-`WbleT`I=\\LU_!8&kj/D:hn=ZL,]G3H8[jY'>-'"8s cY#C*Nh*!u_s^7`:Y)>]Gm:Z0T\-^58nWPJO/gB*K:Arl_=6f(@T>@7goc(Ds14(g=Wqbj`^1F7([kTcH%J2_e?[M\$:"ZUreu/XU4h-"1Gfu5TP+R+b>bcoLZ5:L* p7%Qe(UcL[E7n4^2;Z>iX.ruX(4a\.E&%mP7>'kJKZ_^,i/BlUY]Nc=*uR(i&"k]uU_@G4" ]au`Ops/uqGU'p`3ZHG%ElHWQ9/gXZ'8Pe-eRW20NGl!W/YkeaNR4_IUIZUe#,ugH[DSb=0 MqVRl>7h>E;aJ(WAdr#C&t#nt-i_jd[7RQQGNQQ`\$>X"LU$NI5# ?'NjR]A^Q'(th[=_D"J$ZTS1ck["a7]WZ6`Uer]\H64i1l^JDkfu>*Pk`+%s^^8&8)ES;Gs D('`KA*g>%$;U9Q0_FM^\[C))'FS5M'laqB0mb+pnBhG+dMk0lYLB(CkNh]0DYkoDae(OFU CHQ]^qWkUY(qj5B"u]3]23FOq$oEcS3DVXQ/gkMQ:3O4!+0@eg`M]Q02s.?5B/&o3Bh8dQi >*n\L(bR"'J))U1XT6D18DmC"]ZYsJ*GqrfQb29s&gcjQI\6Fo&S5q$ahjA7t_*#S'iZ&Wq s'HK@jcl>tcI/BX.9"KjM."6&);4=Zq%J?o&$eblm^uLmA8F+k@k/HQg]OY*0<LmH.jZTjHcjL]tMX@;9\6Z+PC-`qjW :B$)[SW5OY[jf3hH\R6SYHbAp6ciMIr'\g"QMP@T!PUQEdf/+4kMa;`n2^&Bq&@)Q+:`QGO !"DVdaD+*V;-Rc,[2K6.m5aS4'&!prHgVY=a!t?:>4ChZp-npB;:IT-!QRI\NoQ(rsDM_'S XcQT-8q(5'g@q[DQF2@\P]5Tk$qtY_JL98iXk4AP1tP,=h1W]_V-[bKkV/#ZAJsX2'5+K*V ,h)JV0s(T,-k33[M,Fk&Uu%72$O@;Ngu#9BBO,9\YH;5.7*W9r/Cfa2Ii:a_m$RgM3uG1Vb ];Y;tKnmj/SBaV:*"ZK)#W41O(Pkcn*%6(FrH1pkZ*#>@=Ar3mf9?b`Mh7ME\khqct_Bn_, Ca5C$Y1b]grD9q"388DLK.`RX_u?hHo33G@QXIm(jF55F:b@t3pf\q$\h_#XnoJ)uhukqcW"VXtRneQf7Q@Z:md>j;eVTrbhVMQN/[0B6[ (t6]P*TKDb:us(H2'&a]-BNVDJ5)bZ%s("J)ZE,S\QQfErqi`iH0Yd[[>_!fD":DF)ik:FW &PhmuC)"C8/5sJ$X7U^Wc//4Bs/*4lXC"F&MF9J2r2*$+U^oqhDonOVZT\ODBEL$e"-GPNY 'lQAT4%O6#7DFb3AG&LS;W#$GiTo80$Rk%+7XODAhoU,hM=@TpWo!?J$@:5aEd[#cpUao"' =r/r828"JjV\`kYad-rtkL/+8cn,te'c&'Z8n?p(3>q*2N"$/b#,&sd0Dj/BuBgV])#3H$r :Soi\SI(foPN"7;@u!n(rVQWaj'33KfHcodV+*$659Ii"OXp#b-*L'OF7M4,c?G6+UfcCY> JLP'.@(2ddV'5RF8nS7g_8(UQno<#ER-M'iJT7ok;tsG!St+-XAf;G\=l&MN0QaX=Rh`8Lp \pUj'3QUV`;c.VtPYGX$q&BcQ!5XTbC?k-XS<]rPB2p+qWqCm<)FA9Qe=^E8t2>WMh-VBjI BtB"n?ukJuHK6KCNoN.k"B3,6Z*(Q1_PI-o:0W!ZU!Y_NlM[KP>@n\]ir/]X_5>2%!K_apf SSl+pN57k+<%-uouck`J^[P#F#S/q:PHmTbd3#IR-rsTl!9n&b#Vkml3BGkNXrD8c8(4Me> bgc;D2[H]&)-cb5%&%aM+E9$6V*5/ANYsE:::O`6A1',=m>%_:!M-/)d5Y2Xa[rhU=-$#_C gBN8(($\JW"Y#]rQ'#2("#pAYSN\#Q?1,RDSDDS3*Nn(I:m-M"?%VO:)mr)pA4%qEY-q8e@9bDWSC+<)dYSAV-haL&)0-DE%ol1;rYo6KZJDo7BS!;/kg1MBBTFb55UY OS:,`+2%\)+-XRGkL(2fWm;%";hO_PcEXiolYm`ZAg,.F9E:mH.]5GgkBGiq;H4,Lta2#<2 V/^g015f497im(Mp'0-TjLT7-Us%1OnLhdlb!?G+"s.(4T/=^%Nh0Ws,paEi;FDM$u]uUFE PlWff"4(Hs40Cu(;9C;HK0i`bE=FW#"/Di]WhZ9=?;do#/(6KC3c@>@cMW'?j_kr./M,5$^YOL\h7Z$GAN/.*o<cUrA%alXN6DBgHq*B"Mj=m/0()j(k2!+`bF1@gS[XdM-Qk e_R1Nr[S]Q3>(UW&^F_N!A2j#QF`bR-\<;W&j)M!U.dQbSrtT$\&UWZ_?&1!i(th^Q9h]+O ublU`MaI&SFFEu>UNJfqiscopi"IidDGcI`,oNC2lF;A<[c_NSbWkb lNL(iu8&M"/kUhO,U6@2Z%`?"qe0bq\hgSJ*`HiM[i9O/HP&#@C,N!9bCrB^ \2bYglgI9SK`l>XVcJkW+b*)ohW4%,k,R$iqpl6K.s$l%kG-*,o)]d%4Fr)0$tQpI(YiH^u Fj2YI25mYb=.$&&&$iXVM#H4kjEcHjAm712K?7KtP$?Im4e)CQiq17F9J--tQ:Cd0M'3'7/?en#1 /QcclZLOJnTfoq"=o\AlMQDWZM-t\@K5?N6*>i5Y>V4XsgA=8$B;/OQP,ppZ+4q>;IeEg^- \2U@Yhg.sZ32]&h^"WFM.Q&`U16sn@4W?,:E7cGn6r+OcX%jH8Mf70k;SF[_'"&P#efJLH!3N(#p\:7]HC3WuXW[HGu04eq&F4W#5TG;b#f !s27?$0&u>*5+c!N%>1`lcR2MYrQQ"r5jQ`ZigiAZ"p/c1&'doeG!cDQ4aiXu=I$IBfR04D Tp:f'9NKRf4W`du9Ms%@#LkMDdNBM2IcK,ErQ&7rK",r3t-TFZ$$j1"Dh0Y2d>rpFoM8A12 ^@.8D`uoUm^02H4cWSD^&)_3R!q8o)'c:!(q;*pW,^Ks@DbnAB`O(OHqBc;;cBTeVt3aYm+ Ad";FVJt:233uut;N47:TDkT&69M8fgY);O5UU9*l?T+3H:.BYgS.dnf=1p.62K7A\4&\:8 ?"Hro#nq$12Dc^QD1m\Tju?<4Db\cr1XT1+1fS\(A?AO.\:%;pOiBF3N#`9P)!>3bhpL4Y^ \-cLOhh')N]&F_,t$5OkUPJqeA!k;rl.4b)huKoVRgLP-Mh%DDScGJDb.P5dO8\pjqhfdkeH/m T,Vf1J*l0n)=S;`Ti#BW+Ihql%pX0_1u91s?BO88+nXNFYZ,^B18`;&"7aU.S!AlW^sqeP) \LAKVNp\oI;lkqX73Ka"7"0.*ZplPpeoBOl,41B.a\oI+(8)'Y9^GjYCDm.sgl]/(pO1-/p G4a1W8'delLVF'<_>]\#Is.iH]0;nl!PEdR%d@;k,PC]ndp"bLG'A-pIf/uWrVNd*^OH(R/ N)"N$7cMn_uN@o1JghB:JYnI0-#&i^OK%%YZ-Gnp2Jt,2Wb"ri$7Q[N[h'-U5CG#W1o/!Wi 2YLWaW%0#A*92"o~> Q 0 g BT 22 0 0 22 298.411426 279.754358 Tm /f-0-0 1 Tf [(Ar)21(e)]TJ -0.272461 -1 Td [(they)]TJ -0.536133 -1 Td [(equal?)]TJ ET Q q 0 g 2.15895 w 0 J 0 j [] 0.0 d 4 M q 1 0 0 -1 0 790.399963 cm 316.762 37.789 m 316.762 80.293 l S Q 321.988 721.4 m 316.781 707.248 l 311.578 721.4 l 314.652 719.138 318.855 719.15 321.988 721.4 c h 321.988 721.4 m f* 0.809606 w 1 j q 0 1 1 0 0 790.399963 cm -69 321.988 m -83.152 316.781 l -69 311.578 l -71.262 314.652 -71.25 318.855 -69 321.988 c h -69 321.988 m S Q 2.15579 w 0 j q 1 0 0 -1 0 790.399963 cm 316.762 152.66 m 316.762 194.406 l S Q 321.98 607.271 m 316.781 593.138 l 311.586 607.271 l 314.652 605.013 318.852 605.029 321.98 607.271 c h 321.98 607.271 m f* 0.808421 w 1 j q 0 1 1 0 0 790.399963 cm -183.129 321.98 m -197.262 316.781 l -183.129 311.586 l -185.387 314.652 -185.371 318.852 -183.129 321.98 c h -183.129 321.98 m S Q 2.295753 w 0 j q 1 0 0 -1 0 790.399963 cm 252.547 257.68 m 139.148 257.68 l 139.148 359.32 l S Q 144.703 443.091 m 139.172 428.041 l 133.637 443.091 l 136.902 440.685 141.375 440.701 144.703 443.091 c h 144.703 443.091 m f* 0.860907 w 1 j q 0 1 1 0 0 790.399963 cm -347.309 144.703 m -362.359 139.172 l -347.309 133.637 l -349.715 136.902 -349.699 141.375 -347.309 144.703 c h -347.309 144.703 m S Q 2.324777 w 0 j q 1 0 0 -1 0 790.399963 cm 381.137 257.691 m 495.648 257.691 l 495.648 360.906 l S Q 501.273 441.658 m 495.668 426.416 l 490.066 441.658 l 493.375 439.22 497.902 439.236 501.273 441.658 c h 501.273 441.658 m f* 0.871792 w 1 j q 0 1 1 0 0 790.399963 cm -348.742 501.273 m -363.984 495.668 l -348.742 490.066 l -351.18 493.375 -351.164 497.902 -348.742 501.273 c h -348.742 501.273 m S Q 2.290224 w 0 j q 1 0 0 -1 0 790.399963 cm 228.438 397.988 m 317.062 397.453 l 317.062 469.492 l S Q 322.605 332.888 m 317.086 317.873 l 311.562 332.888 l 314.824 330.49 319.281 330.502 322.605 332.888 c h 322.605 332.888 m f* 0.858834 w 1 j q 0 1 1 0 0 790.399963 cm -457.512 322.605 m -472.527 317.086 l -457.512 311.562 l -459.91 314.824 -459.898 319.281 -457.512 322.605 c h -457.512 322.605 m S Q 2.300242 w 0 j q 1 0 0 -1 0 790.399963 cm 379.918 533.141 m 495.336 533.141 l 495.336 633.395 l S Q 500.902 169.041 m 495.359 153.962 l 489.812 169.041 l 493.086 166.63 497.566 166.646 500.902 169.041 c h 500.902 169.041 m f* 0.862591 w 1 j q 0 1 1 0 0 790.399963 cm -621.359 500.902 m -636.438 495.359 l -621.359 489.812 l -623.77 493.086 -623.754 497.566 -621.359 500.902 c h -621.359 500.902 m S Q 2.29295 w 0 j q 1 0 0 -1 0 790.399963 cm 252.285 532.551 m 138.273 532.551 l 138.273 633.395 l S Q 143.824 168.998 m 138.297 153.966 l 132.77 168.998 l 136.031 166.595 140.496 166.611 143.824 168.998 c h 143.824 168.998 m f* 0.859856 w 1 j q 0 1 1 0 0 790.399963 cm -621.402 143.824 m -636.434 138.297 l -621.402 132.77 l -623.805 136.031 -623.789 140.496 -621.402 143.824 c h -621.402 143.824 m S Q 2.335361 w 0 j q 1 0 0 -1 0 790.399963 cm 258.828 674.629 m 370.828 674.629 l S Q 2.348876 w q 1 0 0 -1 0 790.399963 cm 316.828 674.629 m 316.828 749.066 l S Q 322.512 53.619 m 316.852 38.22 l 311.188 53.619 l 314.531 51.162 319.105 51.173 322.512 53.619 c h 322.512 53.619 m f* 0.880828 w 1 j q 0 1 1 0 0 790.399963 cm -736.781 322.512 m -752.18 316.852 l -736.781 311.187 l -739.238 314.531 -739.227 319.105 -736.781 322.512 c h -736.781 322.512 m S Q 2.4 w 0 j q 1 0 0 -1 0 790.399963 cm 495.113 422.059 m 495.113 451.77 l 332.828 451.199 l 332.828 451.199 317.516 429.449 301.457 451.18 c 138.828 451.484 l 138.543 532.629 l S Q 1 0.890196 0.815686 rg 187.742 549.427 m 212.887 549.427 l 221.75 549.427 228.887 542.291 228.887 533.427 c 228.887 524.564 221.75 517.427 212.887 517.427 c 187.742 517.427 l 178.879 517.427 171.742 524.564 171.742 533.427 c 171.742 542.291 178.879 549.427 187.742 549.427 c h 187.742 549.427 m f 0 g BT 22 0 0 22 182.028894 526.571399 Tm /f-0-0 1 Tf (Y)Tj ET 0.8 w q 1 0 0 -1 0 790.399963 cm 181.98 247.797 m 184.309 247.797 l 188.762 254.391 l 193.184 247.797 l 195.512 247.797 l 189.84 256.188 l 189.84 263.828 l 187.652 263.828 l 187.652 256.188 l h 181.98 247.797 m S Q BT 22 0 0 22 192.556238 526.571399 Tm /f-0-0 1 Tf (e)Tj ET q 1 0 0 -1 0 790.399963 cm 204.914 257.312 m 204.914 258.281 l 195.836 258.281 l 195.918 259.648 196.324 260.691 197.055 261.406 c 197.793 262.117 198.82 262.469 200.133 262.469 c 200.891 262.469 201.625 262.375 202.336 262.188 c 203.043 262.004 203.75 261.719 204.461 261.344 c 204.461 263.219 l 203.75 263.523 203.02 263.754 202.273 263.906 c 201.531 264.059 200.777 264.141 200.008 264.141 c 198.09 264.141 196.566 263.586 195.445 262.469 c 194.328 261.348 193.773 259.836 193.773 257.938 c 193.773 255.961 194.305 254.391 195.367 253.234 c 196.426 252.082 197.859 251.5 199.664 251.5 c 201.285 251.5 202.57 252.023 203.508 253.062 c 204.441 254.105 204.914 255.523 204.914 257.312 c h 202.945 256.734 m 202.922 255.652 202.613 254.793 202.023 254.156 c 201.438 253.512 200.66 253.188 199.695 253.188 c 198.59 253.188 197.703 253.504 197.039 254.125 c 196.371 254.742 195.988 255.617 195.898 256.75 c h 202.945 256.734 m S Q BT 22 0 0 22 206.091394 526.571399 Tm /f-0-0 1 Tf (s)Tj ET q 1 0 0 -1 0 790.399963 cm 215.84 252.156 m 215.84 254.016 l 215.277 253.738 214.691 253.523 214.09 253.375 c 213.484 253.23 212.863 253.156 212.23 253.156 c 211.238 253.156 210.5 253.309 210.012 253.609 c 209.52 253.914 209.277 254.367 209.277 254.969 c 209.277 255.43 209.453 255.789 209.809 256.047 c 210.16 256.309 210.863 256.559 211.918 256.797 c 212.605 256.938 l 214 257.242 214.996 257.668 215.59 258.219 c 216.18 258.762 216.48 259.527 216.48 260.516 c 216.48 261.633 216.035 262.52 215.152 263.172 c 214.266 263.82 213.051 264.141 211.512 264.141 c 210.863 264.141 210.191 264.074 209.496 263.953 c 208.797 263.828 208.055 263.641 207.277 263.391 c 207.277 261.344 l 208.004 261.73 208.723 262.02 209.434 262.203 c 210.148 262.391 210.855 262.484 211.543 262.484 c 212.477 262.484 213.199 262.328 213.699 262.016 c 214.195 261.695 214.449 261.242 214.449 260.656 c 214.449 260.129 214.266 259.719 213.902 259.438 c 213.535 259.148 212.742 258.867 211.527 258.594 c 210.84 258.438 l 209.609 258.18 208.723 257.781 208.184 257.25 c 207.641 256.723 207.371 255.984 207.371 255.047 c 207.371 253.926 207.77 253.055 208.574 252.438 c 209.375 251.816 210.512 251.5 211.98 251.5 c 212.719 251.5 213.406 251.559 214.043 251.672 c 214.688 251.777 215.285 251.941 215.84 252.156 c h 215.84 252.156 m S Q 1 0.890196 0.815686 rg 186.602 274.685 m 211.742 274.685 l 220.605 274.685 227.742 267.548 227.742 258.685 c 227.742 249.822 220.605 242.685 211.742 242.685 c 186.602 242.685 l 177.734 242.685 170.602 249.822 170.602 258.685 c 170.602 267.548 177.734 274.685 186.602 274.685 c h 186.602 274.685 m f 0 g BT 22 0 0 22 180.886035 251.828577 Tm /f-0-0 1 Tf (Y)Tj ET q 1 0 0 -1 0 790.399963 cm 180.84 522.539 m 183.168 522.539 l 187.621 529.133 l 192.043 522.539 l 194.371 522.539 l 188.699 530.93 l 188.699 538.57 l 186.512 538.57 l 186.512 530.93 l h 180.84 522.539 m S Q BT 22 0 0 22 191.413379 251.828577 Tm /f-0-0 1 Tf (e)Tj ET q 1 0 0 -1 0 790.399963 cm 203.773 532.055 m 203.773 533.023 l 194.695 533.023 l 194.777 534.391 195.184 535.434 195.914 536.148 c 196.652 536.859 197.68 537.211 198.992 537.211 c 199.75 537.211 200.484 537.117 201.195 536.93 c 201.902 536.746 202.609 536.461 203.32 536.086 c 203.32 537.961 l 202.609 538.266 201.879 538.496 201.133 538.648 c 200.391 538.801 199.637 538.883 198.867 538.883 c 196.949 538.883 195.426 538.328 194.305 537.211 c 193.188 536.09 192.633 534.578 192.633 532.68 c 192.633 530.703 193.164 529.133 194.227 527.977 c 195.285 526.824 196.719 526.242 198.523 526.242 c 200.145 526.242 201.43 526.766 202.367 527.805 c 203.301 528.848 203.773 530.266 203.773 532.055 c h 201.805 531.477 m 201.781 530.395 201.473 529.535 200.883 528.898 c 200.297 528.254 199.52 527.93 198.555 527.93 c 197.449 527.93 196.562 528.246 195.898 528.867 c 195.23 529.484 194.848 530.359 194.758 531.492 c h 201.805 531.477 m S Q BT 22 0 0 22 204.948535 251.828577 Tm /f-0-0 1 Tf (s)Tj ET q 1 0 0 -1 0 790.399963 cm 214.699 526.898 m 214.699 528.758 l 214.137 528.48 213.551 528.266 212.949 528.117 c 212.344 527.973 211.723 527.898 211.09 527.898 c 210.098 527.898 209.359 528.051 208.871 528.352 c 208.379 528.656 208.137 529.109 208.137 529.711 c 208.137 530.172 208.312 530.531 208.668 530.789 c 209.02 531.051 209.723 531.301 210.777 531.539 c 211.465 531.68 l 212.859 531.984 213.855 532.41 214.449 532.961 c 215.039 533.504 215.34 534.27 215.34 535.258 c 215.34 536.375 214.895 537.262 214.012 537.914 c 213.125 538.562 211.91 538.883 210.371 538.883 c 209.723 538.883 209.051 538.816 208.355 538.695 c 207.656 538.57 206.914 538.383 206.137 538.133 c 206.137 536.086 l 206.863 536.473 207.582 536.762 208.293 536.945 c 209.008 537.133 209.715 537.227 210.402 537.227 c 211.336 537.227 212.059 537.07 212.559 536.758 c 213.055 536.438 213.309 535.984 213.309 535.398 c 213.309 534.871 213.125 534.461 212.762 534.18 c 212.395 533.891 211.602 533.609 210.387 533.336 c 209.699 533.18 l 208.469 532.922 207.582 532.523 207.043 531.992 c 206.5 531.465 206.23 530.727 206.23 529.789 c 206.23 528.668 206.629 527.797 207.434 527.18 c 208.234 526.559 209.371 526.242 210.84 526.242 c 211.578 526.242 212.266 526.301 212.902 526.414 c 213.547 526.52 214.145 526.684 214.699 526.898 c h 214.699 526.898 m S Q 1 0.890196 0.815686 rg 422.027 275.142 m 447.172 275.142 l 456.035 275.142 463.172 268.005 463.172 259.142 c 463.172 250.279 456.035 243.142 447.172 243.142 c 422.027 243.142 l 413.164 243.142 406.027 250.279 406.027 259.142 c 406.027 268.005 413.164 275.142 422.027 275.142 c h 422.027 275.142 m f 0 g BT 22 0 0 22 419.743164 251.142834 Tm /f-0-0 1 Tf (N)Tj ET q 1 0 0 -1 0 790.399963 cm 421.898 523.227 m 424.82 523.227 l 431.93 536.633 l 431.93 523.227 l 434.039 523.227 l 434.039 539.258 l 431.117 539.258 l 424.008 525.836 l 424.008 539.258 l 421.898 539.258 l h 421.898 523.227 m S Q BT 22 0 0 22 436.200195 251.142834 Tm /f-0-0 1 Tf (o)Tj ET q 1 0 0 -1 0 790.399963 cm 442.934 528.617 m 441.871 528.617 441.031 529.031 440.418 529.852 c 439.801 530.676 439.496 531.812 439.496 533.258 c 439.496 534.695 439.801 535.832 440.418 536.664 c 441.031 537.488 441.871 537.898 442.934 537.898 c 443.984 537.898 444.816 537.484 445.434 536.648 c 446.047 535.816 446.355 534.688 446.355 533.258 c 446.355 531.832 446.047 530.703 445.434 529.867 c 444.816 529.035 443.984 528.617 442.934 528.617 c h 442.934 526.93 m 444.648 526.93 446 527.496 446.98 528.617 c 447.957 529.734 448.449 531.281 448.449 533.258 c 448.449 535.227 447.957 536.777 446.98 537.898 c 446 539.016 444.648 539.57 442.934 539.57 c 441.203 539.57 439.848 539.016 438.871 537.898 c 437.902 536.777 437.418 535.227 437.418 533.258 c 437.418 531.281 437.902 529.734 438.871 528.617 c 439.848 527.496 441.203 526.93 442.934 526.93 c h 442.934 526.93 m S Q 1 0.890196 0.815686 rg 420.887 549.427 m 446.027 549.427 l 454.895 549.427 462.027 542.294 462.027 533.427 c 462.027 524.564 454.895 517.427 446.027 517.427 c 420.887 517.427 l 412.023 517.427 404.887 524.564 404.887 533.427 c 404.887 542.294 412.023 549.427 420.887 549.427 c h 420.887 549.427 m f 0 g BT 22 0 0 22 418.600293 525.428577 Tm /f-0-0 1 Tf (N)Tj ET q 1 0 0 -1 0 790.399963 cm 420.758 248.941 m 423.68 248.941 l 430.789 262.348 l 430.789 248.941 l 432.898 248.941 l 432.898 264.973 l 429.977 264.973 l 422.867 251.551 l 422.867 264.973 l 420.758 264.973 l h 420.758 248.941 m S Q BT 22 0 0 22 435.057324 525.428577 Tm /f-0-0 1 Tf (o)Tj ET q 1 0 0 -1 0 790.399963 cm 441.793 254.332 m 440.73 254.332 439.891 254.746 439.277 255.566 c 438.66 256.391 438.355 257.527 438.355 258.973 c 438.355 260.41 438.66 261.547 439.277 262.379 c 439.891 263.203 440.73 263.613 441.793 263.613 c 442.844 263.613 443.676 263.199 444.293 262.363 c 444.906 261.531 445.215 260.402 445.215 258.973 c 445.215 257.547 444.906 256.418 444.293 255.582 c 443.676 254.75 442.844 254.332 441.793 254.332 c h 441.793 252.645 m 443.508 252.645 444.859 253.211 445.84 254.332 c 446.816 255.449 447.309 256.996 447.309 258.973 c 447.309 260.941 446.816 262.492 445.84 263.613 c 444.859 264.73 443.508 265.285 441.793 265.285 c 440.062 265.285 438.707 264.73 437.73 263.613 c 436.762 262.492 436.277 260.941 436.277 258.973 c 436.277 256.996 436.762 255.449 437.73 254.332 c 438.707 253.211 440.062 252.645 441.793 252.645 c h 441.793 252.645 m S Q Q Q showpage %%Trailer end restore %%EOF mathgl-2.4.1/mgltex/mgltex.pdf0000664000175000017500000205241213134047003016054 0ustar balakinbalakin%PDF-1.5 % 139 0 obj << /Length 1752 /Filter /FlateDecode >> stream xXKs6 W(D4_[648gdIUF/@Pk=IzYq! >~`s"eR$:8dD S N}x/aYUi ܜvDʆ8ѽQ&KyB)3* 3xX;ѼɋH2Jd%RB,I$~( ʫN3c!3Zm *ٿժb˼Gz,avO%SPNK9ⷬͧu?u1jaE%$"%xG5"H. jϕ,ˌ!4< bfo8 y1}{CW 춷iZ ,Gz GYw%`lQW]$p"YSpM#iC?>i/?͛(a?P_8Nq~/jM=N97.1()xC#vhT庠+f "SӺָ߮#YXO4DwuW&!>dE^B7y7 6C򶭻 [m#2AXZy3"avTmE.x5 A^u$LmBa7MUk\PĤ94_-hʒER0<+(yَUI+ 9\Gքn;L*ώD$ {K e(2si &t̄('#Qg?Zȋ@Zyx c0ɸ䀥,w{Hhwև%tsK!!_P0,Z41+?N˭ku>uDWpd -NטҴH(m.I(lG$B6r;ڝU8 2korH0-&1"w–(,SX>OHdQg 0<g?#~d>xH|h 4KGL,` řL_a-(˔$f ɀޱ;G\Jg%0)02J#Kߌ[w#j..t (0^Y\=@-R C7e)ޡGI܏m =0$$$qEu.o$j(=T xN 1O?p>t 쎊ԃ𛯛fj¾'HŽ vGQ_QwqXR$;O;ʀwy㏺6/@g?zW`FQZX~]ar4eP/{{Йr:4B|v*efޭTﭺGk5q'K_,^!~S!>ؿڕmT[*qWͪ u Qg|ՇQO e㪩ʕC-JAbbOӣOG<H32E{#Jx2LAkzfT MwthP;R@Z$=L.z`/LWvͺYD%zmQ:^{.tVqwTwP j?k&x ciWnjouji4gB 2j endstream endobj 174 0 obj << /Length 2502 /Filter /FlateDecode >> stream xYI۸Wr UӢ[rr;.LWr2"! c..V~}PSIœ|63og勗a:,r=Ѝ31 h,f?9|7Uoju/4td]`E8UezF?B ?`E໙|1ڕRM=_"찗G;n&lDQl&r}X m{-K/3O;_DT!7] O ?bc3։ucWj Yc:`|붩+`B*q%^{Bx*eU>youHKBqEYL/D7:'O,ηs<]oj7mu߷:(,"',Q Q-JH"q6E3ė0alzy;HuXNh]b2^pQֹ6k1{CLzqv1iĻu/.uYv LA'/<}LK0@OsqcAj`%#wn(ayc^JoNM7}r՜ hJ,bg'#lI^ ȅt%pؑnd;}DQ-Auˀr{nhJ G ;t#BR!F;C)ybTdz ¡·^V6ݴ`f+vWU'6Jl".êm- 붩ei:E\ :pЪxg `w4tj=b ЪX0E'i.츢9U22M$cBNU=fϽțиk@5 4RmU蹴/_[0 0 VnoH^edTa}-~m;3jYMIhqQ@;;D v7T8h 8%{b*›> ,>љ p4]x-rͳei.v+8*2H6V-sa1/>08*P*)b3|F8;hA=gUTxզ o?7SnD“fvޝHBxB_؍K*1Me~&w(umݸ:]0 SfA2X}u 4FC<@A\hECQ%n8;.74Fޜ4r49@V潽C&WGd7䖗Qu^8aJI/qмV菎&JZJn",SI3tJBOuɷ[SeAǩEP GH Ef^H'X{"R1>^$0;5>kpcK3u+btL8OVlGNY' ḡٟuw†v7o>C41QeŖ6KiB@WZ^j_7tЛ!LS7Sw ffziG[z=X[mL(vɟB[SPNi0Cڞo6td?d$?:k軐D }yd]\Y6*SʤlA؛D6$xQp[7mԺm3w3ɀv4O{t8 +#((_ \A"mT^.+JCep\wNX QJ|88q\DBngąh;ޕ56ռ&Y .Du EsR@LNR`*`SqJ%No!&x-/Xvr=%@ljz YhQn净o\8`=ؾ&a o>jK+vVŸGsu A}KdB?@I ӀG}n/ @ endstream endobj 182 0 obj << /Length 2905 /Filter /FlateDecode >> stream xڭZmoF_! D -7@hxDA _4_Lrڝg:YݭWWo޹UgVJXteMKeVՇHW9fam$z{.zZ+DWFyS7UAJDyG -nNd6Z^m\g#dz-cö].<[qZJĭBę1ömT$ /nt痄kS򛶮Nϫ6Ew=yǼ0"ho[hu_[U\?!~ ͕L]䛮h&]  .Gkͮ\hm~<$7 Z[0>L3͵SmB4)8Pe#(6jт3oi{5Ӱ?cH b:AL?3MT9fc3QNfXɜvIlNzƝ`vkSX/)T,_*HȀ\j*|yq!PJ2% Tx(h ~w~\ Uͦgy RD}sN|#8bbBH'7&S16A7Wk@.V7Ŗfq-HMjVٔyerD楰be͍Tp/o"ElFi5i D94t:z} !V[+Rs5FtiDm[)`6~ F;gV3fVԧj:=³n0>Ζ>6uH硉c÷HY9" #^HVNB& @tu) d3"IjT8۷lLd/01N{[z*A9CpH^4sJ>T,>rW1Ai s4-ФNj\C"Gfs}2?lCrh#-B#i:)Ă}46vhF=Rςz~ o~;)FG%/z2KGƅf~j2; }@}cߓeS|>! Ymf@Uʷ=9fR3`Jbxo]u>JADJ.PpRda QɆŒpA@tyo5#$C$ã@|aBk`Q3#ΘO:L 1J3RFj@LRSi'-1t\Ш=ͲDJ: !ma͞LFcyʫ{y8UfvFZ%"ی1$4B5gM o D?~ڝɈTo!Q⽔"U 4\ =kIɏrG6vh3;"4N-F tЭ(}zMkRFHNS';bejR$qm.ML|HJ<*j%T˝4ypRUu *A*rR_ Ux7C/r(̅l );z?Bٿ,rm2w)M'wW|ZW:IY_k|vS!o4Foa搟9\<8rxT< ӑ:t^JL\u_6$> stream xڵY]6}Cd~^@P`tRHౕ64_Td,g:2lPsϽ$eM;1#L&rv Pg D7B``f jeal rO9hי$S9ˈc."`!OxAJ$P"-vB=;xcnJ 9"!r$$48Hv1>d8(mpRsNp^q~ _MGö^#/]߭ޣۍ=uǺ{[Z+j"99vqU ۦw]O5u?ҳ Sv_Ҳ[To. VG كvG˾QfUyn>`/P SŚ˾5gV߲levè^}w4dI?^vqiXݑ*zZ_|lnjs~S~t49K*7rߖpKÓo4|UfÝe.W]nvCWW]YS:aU^Xϐ7ݪy_:Ty^q t )]$~9%2ړ҄y<~yϊه4c#6_n/m_0O? ~ \`G_l>"i)-+/%22_̡,lg=[ك W3r/lWu]R_̟չ"$,w`c$WFaU踴x*++U@m52SDצTyFkģ Qr8F XYc)\yYzRr~28 x>/LrM'b'rg͈ҝ@Ob X8@L''R8xơPB>FbbhSW&blpV>88 (8WJ$PHXIe [Q .]m':`es,q59)V[i"B;:Ʊ 0YxW%PaGAJ16eS<1 J0=נә![*F x'1eh[8 {ݻx@yz ]|: 7Pn PlO%MEKT>x+B)R8V˭m *hxpܺ[|0/g1h::QWZFlpOtצ(]}N0 endstream endobj 197 0 obj << /Length 2209 /Filter /FlateDecode >> stream xڵZK6`7RvI&SSG*L\L 9zvy|%$FI]?<}IEiAD0Hh .C]c?MXFe|l2)M&>ݚƷWDigEyUiv䕛hVJ٢Ekc9"UU4^l;F7)Ƴj(v#VKc@ 4 WɬLweu ;|& >|rm&鹛ˉiQARIrJHf"I\hjoM2`kś42Ǵܚ0?MVWl.0rftYUצ98ʼms-tBeTReD8!IU䶋Ymp ;T>wl!-jNv"V+[]"{R(WGDM< mr4Uڤ:S:x!h@f|a#.c6y۝gm=úSQW~HV-QXH#2[j4|fYB ˺ҝ*E'ln慤:PJ.7HoTX[&$fE糕Ɋ˩܂{`p?wdi|P q! %kׁj4gB $(.hN84r=Rz8ArDP+0 nI IN1"/NbS=0Mkc W8XNl(.u_${l$;l .Fao;> stream xZK8QlL2EE lFGݙU,e!'SE[W7o_iCcx2XmկGG߶yCƏl ^z֗W͛@1÷kYRzވث::XuyhLۮ73Mh2pwer_ScW7eұg݄P6\@]\Txna~>O_~zs$,#ۂ [ÒIKKDփYBp%$MJ8\m&8h~JQI?v;|~I?E`*߿* ~LVmTkhAAbjpwPxZD=nD֍`ı;&EH=!-mwCUK }*mLjh&P~=7HMV(&a;\)A УSh*@1ZGh*gR,TCs#,uܴlQAYNJ4)A<暞@zP uz=)~uF|/^# bpʖLSb j3h>։b17kdڹT_F(`24^!^~\kN=&iܲ!-4l \zaAx<_-D!I=ve^$[[гh0g$|Q8/ * tS;tCkxTN HBDn ήW6&9ޝu,_4c(zg|]p++N FX;$)uxɝi{ .L}l!BnCܻO`C^cZ_-?g9]І܄"|€![|rwV|$~s#u9rw,m^cʿ!bѶ)'Xx>ڍ E I*?3ݦ~eMsm[ p`Cx5w p m.s/Aԥ3BMWUo.Sܻd#er֥UමpW|eTw}1p>ߙ@As*"HPr'.?Gi x" "WClA(s٠a@ö*[7Ľ!U/t r~IqpR~0rDjl6.@ILrp54:Ґƪ޻DU IJm,6-ut6߰EZptu܊kŮIRi 0b:3.;rIG|K)uZ}oL 3,\/ M(o2z"={+hL?kL- oapʙK"Z|ȃ9pα*99/A |?b<))^r%5{ ƾ1ԁ AaHmn MdhF=;Kl]T%0 eyHZ9qhj@KD78 gC38;KU oW W Nkk G 1uZX/](eSr }|=Uq[+@׷{}E*AE8剅t ;6|7,oޱ( >ɝSL;*\4}ےRI9m-*Nj꣍@r=޶&mH&bPG6p3C'"iq@3DHkt̅(pp9/@Nܜ 3nn0}Drs<Jf(9vw2⤒`\h6%|6@o}?mZBv ?I߮>8IҒHґ4!'('N$8>rL0@\L8L D9 p&xJ Z[efzOcay`9JiTP L BG'Zw PrKzSI@~_-5kow!&;h2z/y(HWG>@5wy_@RdRWp_1dáM,HIjIZk/}.W A¹x.=/$0h xF90/Zcm̟)=¢&0`TT^}BW:M+("F*-~_eJ.&uCK$^/Wrn`#Eۂ\q/LOU=$AńɞA1#?s5 uūy@y>*ЯaS~Z T%= ·Jn .LB]HmR&\ :IJ2eʖ*=ag ]e47XA\Yi4r|*_ܣ$34g>V{atTO;A_ȻH+ivaxe73vrYߞ%ϢGW$=Br{5",]xN} u endstream endobj 213 0 obj << /Length 2939 /Filter /FlateDecode >> stream xZK-0jlrHq 2=pXT(j竮&%JY 2ri_U+gQ|2Yeg3ka33q"g-Z}SUBDz^SAWDz{ûv_c|oʈ,̄>έߴ7+y@[aV~gtHO?-*~(E,Muu7s ~av/eb iq?atfO4ysϴv|D`Bp(g2WOŔRVYly̎H2Vf-6Vecٮ淞4 dY ǿ8<2yS_ +HV6Yȹ &BwyWn/ѩH _pFCꐁ4u-@*? n/K]./8"#7y:ז\-d($AuJ%yǛ]izj]k {e ctQB8"ֽ7.P{+ =AyA F,SCQ֐6!Yut*HuÆE"k-W'zhR3fɕv9_.AFBfq\f:E!0Y:oCUpn:nG2Ϲ/D>=0,;0?,e{x4>S ڮ1Ҭ'zWՀ>|#o[l.["@ ׹U~څ>߇@j u:ڴkǻnɬ (ڕq1j˭Q `KbՕM8N |f[a&l;rA:7(¾hb%5F ѹ\t{=|kwyKBiߘ&'X2"K@|"b:$֕~(~iSU~JCLIx_z΄Bs0 uf]z߈AXG^m]y"2H\LDҞ܃01Yj = }{d\GĆhj#gg~  G?u"_#fSNS h1U&`!έT(G6d Teک c3R&waRmes er6Z>BHNd循KA~0 A*ec˧>$֫ܗ^oDByc]%Rap Ҝ/#LX 4ޜ*2iW*)uUڡB4m'HUD2O~HNF@oP*#Dȸ2 Rh{rg#t >{{|g2d4دBQ2MD*W,Cj`mWdu1P\r9WLC W`YzfM㜉}H`<Ës2z쨂]|PD!g x:9[9zBNϋ·Ct>nRtcƕ woSa =q9UXw&ܿ- +hLK4]^]~vt+`1AA Z|WU ͢x[>j]^9};k xcpvهIWxJܰbᡧC2ը4"n݆H/Eyd 6Fۊ(04r,YUVKvATyaN(9妯Ecm=H>Ѕ9`QBԓuh2\ftqvQ{8'W'qv6Tc/ԹNh~;* .Y0o0A6 Itt e(c:{؇3I Zd4R_= 1hJ&H4%9F),$Q*/ vc[+vFv? <_0Tԓ;h~Jhsۄ2=:VJEၷCx%~~a%} *}~K۵H^ k$;Pc_^ endstream endobj 219 0 obj << /Length 2528 /Filter /FlateDecode >> stream xڥYK6ϯPʂ  TlS=lej/XC2Iy2Yw rZ0A‡]Y~/޾T$ב lp\ote_~a_YuZM~_vj}N+\wv] U~WRtXΡ«Wr#H7@S՗CsʽN"R>VSFDѵVeU>yOPԍrs"ϧ*%+Y6$S%0l/$S: vmvܗXo5VAO7ZLK8HκcұA)*ak*+t m1rb)DRьB`uxދV cwx:` 7o0+l$ :WçpU("`IVϪ7e9Kz@I(yve`qy*2*MHU_}̆S 6!? g|mH-,(5"BZaϚl<(6j<@UHGPZQ[8S=tJ`յrA'D5$ڍQ)_)\ '-Aš)#FMc*!҃oawݠ!~@,w̓ଂ-b&RJ&8VK#b4oX| 9%ijSwx? ²xhX<F_ [5pcKu: k=Pv2 L45P3yAOҩF!Xh{QYjUY;xI\|H/ezX$37\tH'"L-eQGZ3#/O;DC2gG)natPڧQ^uJ1q'p(2ude!&j ePjl$*̤`'Q\C-ֆg%DlG?~2) `wL-@|hyF!Chx !' "ȩ۞|Ika|}o2I`@K8?6/kc 3_ҦB@&}6R"!Jd,⁔>,U@]^D xÌk Hu3|"(N u arAS|rXG[|] VQcFO{qTc}Gz?*JQ<)DbQfɈz/\%"J"?/#5ѴKKIat\,+;jAwߌo[n|hug6*On:̝Up8?{lG);|uҿc~OÌi !k-8EM endstream endobj 225 0 obj << /Length 2511 /Filter /FlateDecode >> stream xY]o}ϯ+HJd>l.ڇbt (#K^KN6Xﹼ,ي'3ڗ_&/ǹ2q ld$ (&Hu%RwCXdw?}%&ݶ.@}?]lezX]JLZKijNU}D%?+nUǭvWmaؕ'< T']Ik/ZjCjU|[rQuLU񵕜*5Qs 1TVQ窮P?3o^=*\7 | & bL-IFI*ѮocI"8&#k!/Uh7)R {AO-2وʗSxڄu [*$1s2Rb>_j܂])}dHj HXuM"T<=O*Rw N˾QX*4a+M6K"n$$ |l6G]|)~mh26Jb! >W&K"3vFo9{`)Ӹ}U}sV#ѤKõ:&\eQu(l c;["/>7#!O޷?k{kZАCW(7~rX :(aT^w,HGyY;q fnRqBׯac&7-}YN"u)ͤŎu3*OU,@Pe@|'9@HDq*~kJ"VRD xOLY*޽:IgG1%{*Tɦ'a?-4=q> stream xڽYKo6W{fć(@L`sXX,Anj#i[ŢԒ[LfRWE:vQp $0 K4Z<ϣpoITǟDϞ$a&ÅuͿoqw{%Z6,dSre*5;qe{8͟~೵#AC;}1ܰѡ;i6)gþ;ˡDr^7&4: X{#8{08C&#Kw0f w_ֿlU" ?nA*8;>:WxvkvAv(o.I" !-*Y9;Y mU^%ugMOʒD,'EmgA;֗+ jXcNXL|0{r]BȁR'""`(ht& ߟ *$"H3t!?p-VKk 􀸌UnjpwT_#ØM@.AY&JYP^Rf柇SS'a\٦\?〦jE֑0LsL,quOⶱ9HU@H^t,N8Ўύ@br}l`C(ۮ!mSQJה^GyHEQ <菀P K~FI}x]5 R*$y2ʹxAKzWHaltdi ޻R %>%:,b b$Z|V9X XI}QPTr,mM 1KOCb:3o8<.am7rPfX%{;ƏJ1쀺<2pZ0ޏ'eg|+zoa+.GaCе'4`\{8ТAÌSNCqSIh/0]+KI5=^hà?Mi~>o 4R*հ]wP Þ}.\%,j;@x &<7>B,t-خ]Bv0acos2 >zո:;J4[߽Iп=QF~㪅SXX5e}*:dPq>E׀TSI G|>OB.A^,{++6+\sQOOZ\JE)pguCn ȡL9:ЮI (+[A䋝FIs)gEJAt]&^\H􇇕[>3c`~tPD7U}D?n0=von!dw FT(FepBW<ĦڎĦ}+>=H{HOot9&TAQ, #pF6l7νpd?LWmpx( Ђb(xʣ e;n5c4K|'c9]]ӑ!.z.b*w9rrv;۽yq𯁥OEאIA}ub}aA, j5X5BXl '#O8j ma$};ɶ{xinmv2LԬd?N:9Ҵ/b$g2̘Dn4F~E?m t" 70'UO*- _!\)>%lNJ;,$}ٹH/xwA f"Ό2|y ~wЗTI]O,\EƧkPYf={&բji,0ïk*!|/觡gj53$d)T}Fۆyq5{vo.Zihpm/ Lw#BidZ,x|D9;? endstream endobj 236 0 obj << /Length 2423 /Filter /FlateDecode >> stream xYY~_7SIyXE `g^#P1g& jR9$ E죺ZƿpV.<{7L]pE0kE?WkE^m]tJ8vSw+݄k" Ͱ&&eM9;gLeWU8y}Zk.m鿷t]YUԻ[ h-5g (` +@*5ntoW"Na~՛oڛîhg5g-R&O^Ъ@TZY rdkL`rNL4RG橩;xه̳.Ɲ`g C]ޖp@ٛA_瘟Q7h\Cſ.P<T`D&,I.>~&:SiH$qʮ.F0$5KSX\ 4Ծjd3ӎqS<ZfXp[l7&ip !MU20uUޮAs6}wh 0E/ C.Zƒ Kk`O x2zGkˎVxǽmQ ovp~ȲdoB`*Ei iq\G*1O`iψHo틪h  [f72n!/`sF+cSX} 4+{UWugm}4?0?  \ {~K=Ϲa$bG*\caxSP( eؓ7<@̞F$_'MfѼ[ f]YP("f";7~K HZ(AD8q?LyO>.0c\Skݕ;7&aMKhúsg7tQ$# !nނ'߻G^?fhB}xp[?~b}6~ mu^*u+ odVLq97LR4 1,F?F˶C;$x@{S2Ѕl Mqd/4'Ofr6:oƄyvCKJ1/Y_%](C:E֕L\#1EPSqУ*RRR ?8"=@np(vPeM!=C{pCO_YE]υC $amO cUװɶ+uCAfvHŝ zt[Mdm|EwH p Le3в@Ȃe@eK}7ԉ1(=F xp:nȻiۓB};\(A1f _?D02,0!;f+7x1-YBKS& /f,_ x @yoWA*rFM( %j!@L%;=$ZCI ^/TrtɪT,$H7/o74ujRY}h?2s)*`2co(f 5fD?wxam1Zw/w,;8&`a#طX !3k4 ڂӗ>+A,| )7?`J@pʦ݈< rM kʼpꖯ鬞B\|>@lz BP"h37!١C:93CqJsuxyCKt5̓"w T $Gн* Uu/K /~W+^r˹5W!qO)ƍ91a2IeyPp/@b-@¥Ёl]Ѩ =ƒN0lr_a٧3% o(U%ɲH&r,u\xk |6\Te6/#M|O d~ա}Y+k {&> stream xXKoFWfʭ6ޥhH}@$ZZY%R)J)ThrR73,#|{ٳ\D % h2kIe"̢1G.¢%JqF[[eҌƂtLɦ~nԜ~UZQΒ⾯@[q`LJDY4HaTkQBZtc`]~=3)x\N7ٺB!OөY[+wouy 69)iÃNm$+pO)Ynro1YGZ}LUv;2vmgapv0ڔDW1x^7q[l\j >%RLu% @͑AIխL(4Quq| e9|>b=nwy$8oWGAY-†~̠S+$4AIIA1Fc5WI7N2i6!J",m 3; 0I[g7=3ȻXH#d<.C^fTyk5бoK]1;jw}~ N9dJ${6ѝ[% u逗rp"FАƯuJzww3怦&.Bxcqcv[3ՀLdّk1ƥF_Oj׈7^HX ih;!(  W{|ֱw%Q%%P 9+}RM4d "T$H3NQHj.`S{Yԣ=an d|k qsjqS։ƦFea46zTYV* 5L';@~{mf >u11-A#:uaw4W?.o}O!++$u^5ʹkY]:o@̮۬fhUw ^puhGtѮ2:xexrksۖ'%!YC] Ara4[Oä*.w34| iwZK62B&-`ao~Cّa>|=̛aw]ӿ>a1`k*;x <$VTlজyYܲ|Y7A06T>1s ˵NIGc$DE@kTҧʭ endstream endobj 246 0 obj << /Length 2750 /Filter /FlateDecode >> stream xڭZKsWjTaZ'٪9$LJO7|I;e 44Q ͻR4Ep x,Y 52Px\ !/q;eVЬYm_AD$xB,aҤ{-* pga[`+Z-(#ȿg3b#Xm8B1_*enݬ'gn+kµu"ȋ k#Qމ>Gq4"ʛI ɒOR)ؼơO%M>G\Yb`K'ڋRg~%e a)&AՂEJ~T;9sN1B:WLHw)t::lEAzIo:8#T3˩WUQl{襁Yk/MUۉ=UqT킇lRp &WZj:^] 9[,u_<:>;6dY( 8Ɯ;3OWݸC-8'o!n44ʳ#j6VG䈼 0at%$xW{ceh[m++De|m[`R w3Bl&"xdOqLYP6`CH:yZtKU]k\S|E9>s@P׶83vJkZ&V]UC^d=FQ:CS=4i3 ~2KwУD%2o𘬭'KT`[޺twi3 Rhs݉fJp۩;5@O`&$;T" >Ց|YN@X` !hUq\5V)0%6NDmxje.⬋8nqԛyg5=^/P}ҡNxc'8>FFePxO4 ~k%D$)@v7 lwHo=msS }j0붰\6/?6MEUX{:"Y-|"d"?6;Oh(d6tnduLJQ̣3͝ Kq {iD 5YO5,EoxF(JOF8WW{ƀ5 #/\ KRc|"wuD)Hn+5 sHUTJ.`Q=.=q1fsy$r9FgefcN"ۗ%Yĵ6.KNU>uWG*fBS8UlBmPl"D0ᨔ|I^P$ ;<]RFZ)t XN"(7 @8] eFԹz>KĊ̏P+Dcsנq|妉+|o~\G,oW(BZ`REw߬+v}tdYm퇫Mq4yH2Mǭ>NҠ'`5jܑ{&dwЂ{ 9]v+1JvT`VIftM@P ]fm V(2̼EBhrO5OxӍ{躶X@a:6UQs#=_sο71 w%@-CG/W"BvG%Y +W#ƅ vƇ@톏 wRhq8ui\i*䴩@t#?b\SBP9rͼ:Q ~Ep7JPTɭkux?_f:aɛחYl>ݙ\,y2s/qx,6C9 \^la2ʸcLgyC?|30͢ryj㚜яK7ya0"+uPd(P]#ni DEN13g5я[?|AI @M|kX 9On>I*nIN'8r-LZD }l,5{Z>v?{3J31OWA(ֵԴp (X3pJI^0lwr -UguEb\SRx YOoc 9E/ ơ (=,~+iz]0,;>Uo+HA-2Mvۑs^_I2IuL8w4w> endstream endobj 252 0 obj << /Length 2121 /Filter /FlateDecode >> stream xYK6rcO- `{flȒ#$[ŢdYV.Ţ(VXh%<77_~l"ˍ>F,If,$}*YZ !MnWeSjIPԻn%93!#cj-]Ul-٦v%mz_H=H!oWw&V$M2[P*)s&THƵ$ɾ]6YO04 58o(Ut u74~m*^}JWe7]m/h<,w I UxF  qi[DK0?05`{: ⺇<]_+mv`p1ћ=0x'aejT)5J Uxf>vS]ƙrXJ'TM={~iNO;݅}a۲Vnso@9-x_V5~VkbI4,/ӆ`RgҲ#NSO[NYd>WW{@:] m S`'I)fQX5Unfr |fAA:Wm3XփUEtm0ڇ|) n֌0\7t܊ރʑ07x{dx~{{ OD"g<7,&_xL.yK9U򟛟)5]F*1F\dO##rhtj1܅M)?%tOVx /5GR([96 Q7z GċKGIA,[TP.X25WvmDևWLu_̦_B8f%"hH 5q*J?Y*\?0 ;A}p=Oc{Ž-cE7!Ob$W݀b%lhUs|TMf355;w%z$T{@P I0#dzsU<jɵ aR: 'w׾P/8HC$s.@ >UErnc6U2>!o`:%׾}A> @Wד@ @ԉ3N--ijWl>?Ӕ'd%.)7l8(҆!8;Q]%x+w@ k`(6y EԲD[*w ;/~c_Ma$*Aw@R?0 .)JrSyD-"%Н6m,"F_DZKtjz|y[D[A wsvQPm} D2qt}Se덉c`M[XrŦ *^ق^`/ Mx " @SgBzO+dJ̰&chiuc_o R-5U6j*׀XPZe&=v`@0VRXo)~29#(1gmm`^`Rܰ1J1IR46h i22 Niv23c _0F|ӆόk~zlќZ3L;]A h"\_Ɉ"|Ю׭8o'O!<77[y\8|f8 ^_ҡM6z@$P1 %፺Xo? endstream endobj 259 0 obj << /Length 2457 /Filter /FlateDecode >> stream xڽZKϯځ&C8vʕy}H%ΒԮ\i(J(q͉$vnMWJi_q?&1϶6!LL0<𷧇o,HK*5H2H*yZ%Mb׵,~})|'3AxЃ!B}~(K`WEdMe QС%Si:<)(ϐdDR* 2}x e L}i!DWnAUڹvݼK !|׮wmd$0i7k8B*Po|)c:[< "UxU۸I'tDɍGFҤ_s-Q#!H lފ10Z v&iBS*cDH$VHq6puYL(dXs8cט,n`.+\VKDf:P4N4FfQ$z5:ÂfXnb ͵TX7p7b}.ʒżYՎ."7|wO]_kXV/u$2dFsq2Ecem^{ν:r"s,\sͦh'ED0brM!R1p(=NSB \,3x*\vUa~  ƙ\ZT"H$FIM!Zj(C.oT{XQv弹G#,7:ιw*< [BkUVz1\TAnH%с/={]l,MxQRuZ݂Ʋ4|.ݙievZ^I9A^aR#|78!8gXUr `W#հ<Ⱦ4{ !)uES [(?|^ع>a{eݸ4~W{ 0^?Wŷ׽ fB!6@-񛱬_!leAwgAirvy@sbj3ővٔ6 =W-0w@urLÀ)?0?=p\Hby_nʀPkώ|yjc$b]v&:`|ڡѐUKsmבBc[lͽܛ$ ˸/Q/3; Tz|4Ff2 6?>8TX΄?5w[o{ p5=bӠ<8,ll@F-wl 5Ί$@˨NY_{ Oq2=L4M {>xS2gC+1=3Ma 0mI*2Cy[~p ?Isi]Vo!7}>q0POJ ErʀPcHI~ܾQ,ڮHE{㎛[)(,5O ߛ5En7g'[.+ꚏ==4mw|pma7NpZv}}Y۸Mlvvj*LmB/c[Ėpͮ4>ك7̛]K :4Q l]݇ay-U, ?v1RAXTzQq 9%'GL \oZU$E .> stream xZKoFW40tƜ@&H=,CLDP1G"%Jꪯ*6- Jϕ_PZᲅsN ~^H_"-n׋) ,f/nWߓJ}7_'XɄ ,J,aHB e~Bk+T p -Gg즽P )w̾ Ph_4ڌR-K{f>U:Xe^ipZ 31iب=-foW7*oTRдK- <6eWnS}\U_ߤ>Y7 V&UF#,nU"?H;z5"&u-ڒ6j\6E,"XeVGlBwUch:,%]W4aM' HB$ʸcYU+)?]7}aZ`w1. g-F9v}1NLni R!T&Ȥ];uF6 G3%MەU]:6"n H\OS!<@}skdl&.*jR@A`ى][,#lKH>iͣgÁQQ6UYGy*F*a^.MHj M|GxX պ&2ڸ3t%ty @L3}R`*.Yb&ma*jҞ μl+9|(+O'%q'ĝ5+rRD3=ļ6&=o)8C"Q 5nuB*rTkIy:EDv(E*J<ጼ*O^'9Y˺XHF'<;莨mFjPdH#A3)V=mc(1j'I9~gLvs_InH:+w8ɱJt5 9T*!!G殀תuBCafGCRT`pPz=M~5DB1'8FxPSEÔY EԈFZ*>qi$ǐȊu0KuȊ97`<ƈz"U6k2aXU?YUC=11H_B,BUh H@fgiP:1|-kǕDZU%Mf, '7wyQoBTdK/N!&\ItG|N a߷\ Gȶ/ԈӃh?~[NSZO]hŜq!툔HGK#q(xxthO6Y=TwA> D@~boF45=H{6RY09/AMVo3Pi^9IQ0?4i<2G.;⑾0%uaJ$Ju&֏LHge_q}vQo 6 k2ƛX:tk[wQn|H73gJ6*bbKTl*6y{eL 4O/!/.0X>s]_N`s*%5۸?zo7zG^YUNF(gHZHy{ZazFxb۸i|lwLX{½`+z{z1G /.=yc| #]a@.Q‹@K՝Fj6 O'8[ݹÊ ;j)m%^PNZycR(u >L?\]SlG:[ezm]7eoepѻrK7x_Ox1hG!9/^.k-زtt}Jsx#\|8|sPP"=H69R]Dݙfҧ l[gl&r3 1\:3NL 0 \:ѡZGOïgƁ<~6%} `^r Sj'k> ;[ebg诹5ϤwG7?&ȸ$~or af90^zw )UQ{)o endstream endobj 267 0 obj << /Length 3446 /Filter /FlateDecode >> stream x]~*NHhM) @]'K$޶35)_E 0=͢Wo"Û_J1K4qb&% gOLS*/߼R;HH4;2V8dPIՏ!h)]M>_$6_}6_Xݚ ><ewY6y+|(X划38LU 1M}MӉ"Jm2c|7 1JTly/l/EHErH".6EȄ54<L~]ݼx#tYSY@*i?gTxQ#O'̢tޙi\2aJj3 hq.4EYSmŲ'd9W־ ߒVZ @]r9V#:PeDu+>[iJga $ SaA.uBIǃWţ?{A!OZVnkhU~¼`߲l@-bv-$Ibv[8jNLk5K8! -(n33 ]O"C/G= TlѡA嬙bI˖0F2 _` 80`c]E %t26!ruBt"4l?!~-RV\hLdd(#9a$9b'{ V3bgNHsX6y5FhEV!E5euce,R~ĞufP|@hJ|Wb],h L8 CMnb^Ldt5olS:ߐ2Kw$ҺD6!c48Մ1glCuEm͠B}0WÔ)|4kMlRC9[cٍijw424ldeɛ:/LPJyҗR6DE&ٮ۬Y°01k]tP|YeVyhesĤe2큣0,f]V ^krp7y bFf8JnL[Fݚְ17Y kXSA$sqT2vGZ¿x8qUPmxY ?ܳC~ S=ڳAf\Qy@I5 vH%4\zȳiG_zBffOj|jz8%턴>NIwmzaxL|kbnIWoљyK. wr7!Z7K̒&~0$ W  3Wkufu6" Iq0İ#qfe,cp4zX#v(r5~]}[F{ OS#r^nD1 c壷/΁?:+ӰӧAdY{2 a>8G5zErk6> |T.+׿W]g'rJ0(xn/'@bX,I-,wpԯS\1؍2ϴ{>MQ=q۹؎ԗht9{nQ;2 AB+(mjzӉɻ9)) \gmؘ2Q»06QzNgࠅDN@'>x]G䆁` 'y&s+d\haUh'*LSy݁9{.U5VM3 l#wK͢3hfMe*t-SjJ$a1Z@>m{#3aM#Ml4.mVXmnV= ]՛_4l3íTȭkhPhZ O\ku|iTOM1lKsQܿ &i6vMCP<`ML]B@}H{Q ^V1/}_6 /G(JTU B2ݝSϰԗF7Gl K_Wjt(/rEײb#ӇA#]r^#;M!N6kMմL'oa mjݖxf}k_ r`?ff0O=kOﶈݒ}8Yo4w4d0P׍,g{%m3臁8ESW*vp]I)d{w"h݇˙ZpHu4ѳd4*R endstream endobj 272 0 obj << /Length 2213 /Filter /FlateDecode >> stream xڭYKFϯm)`f8b# b'XqpֈkTH =hJDN.V?& (xs]~{wA&X&I* Pwes^jS ~vuþ/j?4=+w_^= 2Vin[p]Mi7%;Jaە~݀?_@ߛs l#fpoFNTYZH>D $L˒`ǿ#wD-5(p0A scCҙY$^缊}*3.oc^W5pQ wUY+f6C) .ڎqX1`-pgL ?Obc@=E@씁ksq7sX^O)_RR:$Sh2ZPͫbp N8Pt.\?绢xD `$SU?t5r~k 12{ne8(TOvTG; { {/:hBᆟEY_h? 4G*d4=֜V"oiΆ<3+#): ]wJJ]OMbBCu㌏x]׺Hj;`BAڌSoQ^$Ѷ*H/VpEd0{W_@sTyc-A!$c8`Dds%>HW.D-}dl؇qBߔUfs6(pV}Y&%۪y6.ÿ^?jtK0)lpy1vy:evMQҦtj_8=BǪk1 f"e>^֪)C鮜j6[ k%BC3(Rm@U`2ﷄDhc0! " B_4)<]XG?>cLXziܚxǪ0{qp`7h :FJ4A%˶S^<{ymXqN\o^:Aˁy7{p5mg Ep1b'٠.~ OUᇷ~E 7ۉSG ңo'5aqApk1}jo"XGKDTTv[P`E`l  *8ż& E+@\p. |QEHt3 Iw n6qh ={leB<8ekHqݭgO~Q^Lp_?v| 5;ZUxJj )ˋkjMmɓ]MQ<PßPæ]Ȯ 2/ɮVBvmUJx!XB$/^z_u$X FǍt Џ~؍_a*ItJ>7B ZyjFnL0^풷i-~xT c,`c>xʛyLJPKc'ad2"ǧ= $kY۶~GFb1i"=[3 Cfs|ģ]8iD3N"+mI\ ᔷ9HL endstream endobj 281 0 obj << /Length 2345 /Filter /FlateDecode >> stream xXK ϯj`Z[=s$:6 ^4ia[DRw}*=58KwbHU;%x{fQ$&xx tb4"c ~ mw{MwXwno$,ۊu{8=_ȃ/ps_ð>AIQ uټ:qVݙ<qP\!88tM$*|z&*ۃʉ%>UU>  ?~f4/'dBVw:IRGGǃld(|Q8B׃dMxrIŸs[F=a7 pG2 .a{(2<ϡk|@`p'{LyG'{|alR%3#m`?q&&Ot~/"lG *?e ư\(ۉRc"זa8 c 6X/986$a0 WT+sYZb˰6fA@^]L.Pgaͱ4lQ&"EtqG,'^$SDFg:15ϧ]\E pļ--Q`A6Qiic\ -9xh1E K^!@a=#3xAgY{v!2oC0"Yy6yE{Ihe;rpG'Xa3`01<E}1 Tb'"p/"eF~֜MBoZ)&ӒP)#[t XJŰ~~>3@66k7, Gw0TL K r'Tlbm M$)߮IB1M&Mn"C 4!o DJɝJf#7ny.ס)[:ԮWn/۫5ήhQlTeyn-Bׅ\[@H+A+j? wPjr_ݑX_Y3RVe:k7Ifid&K<4N[rZpSQ VK+tbU"(D¤`lTh-x;(Er!t-+`jH#. ҨlNKHe1XXFP뭅!31 RmtkHGMX:G$bk% Iөe(1,]JBD 8)? 7s;>g ?DOB'\3/z 1pv񦑭H,aۄO,Q FLi#K'Ź!gI}b(VEYQE:8eid/#[G^~PNl1^JϜ 3xEiJ%>q=m+LW%G~Q5ȳM >s!Kզе`1+3qEsJ&V!t0.M>k6 [^دW~ŤTJNk <<(6+/uqICILR,aUytQUA5; iEƭLMO6`r!KUrEP׆{vO|M(3F)V,دNm݊j&,|HƛD}z*O]_f#HJ^p%׸l]e|)ӛ\M ܂^z ². #^zT4t؋]i3']>s`E1Ƿ1^y* m?o^Vul@sd]N:u9]dR'4 xr0)+M7_:eiⳄLk󳂔&k[*./?DQygi.P ?R+@JTZB;a(W-)v9\^Qpaœo> fo+5Wsj V3$$5kC\w>`x&. LyCPi%8OOHϷI>0JovI 8)f ۽96R=ގ"K-9<@d[9&L2W[`ԫ_8Ƒs$݆tHjIV/7K%|?҃ <Mܹt >V59y>W> stream xYKFϯm5XOvw|.`d@GFRBRjR$EOYeԬ*VWW}hO|{? HL9iʼxO<Ɂ],K=&s&uplb`ҾaFw+Hͬ"y'kLR-s>yȓ7KVz9u<-4^uW5S ޾99r=LΣR͹ʧN(]u΋U w [ych3hQJmvY$%!BlX@2of(ʼ`đkrA AIvf8g3q7 $+0^PoHN2HUcvqk5u ,Ƭn[%@z%[LS &$]<Rf6}"n&Q𩫂L&[FDDA=f=5# $(/5V`&_f}JC_|]*ev>χ 4QbKUA)cP"g[r ȥ3 fU Ly5g cUc3!XwR'ݠؚԂqUs=9Ȃ[R!!3#vEM٫P(t4iI;?Fo, QWpU G@Xkrʠs xʰd5Bˀ8~@>8h(Jo|OD>\|gP"]$A4itpu3:62ЗVrI8q{)#u 󌏽o`fHL(_ZA[_  RVU$m+ba}89Pݵ ZBb81y(Y_z&v[\ ~ѿC͆YȎt#Șpثy+2 $TMTS*MOo0/xy%-`jMS7ng\0&|*.Y mSԄ.w9dƫiJWeMUx S܄:,QcYA: q84c|`q̯J&cMj61䝻b QFaYE\8" C9mEWq\XeJ`rSO84C=v<}A ;Dēj-.-41|Eq@,~6x0q 7nV0#~ S&% )-)s]}1Y ]ĴqB+2+Ɣ9_ֵ'2;@À`\’.hȸb7tX΁9^gG4SE;/*>^$i0UAfUhX]q++,R 6`‰BǖWl<¦-J*+h!tWF Np[t(Vۋf 8v~4~ϼEf9q$bRa+ ƫ返uS}!ΊrukBET_ WLI6! dž @9~*&*X_AP af >b7  ṋ"M|'jӔ9RXUSءڮK*j|IyEy4N=9HU:8 !V7em[~BO,}*Ձmo8 viQ2"@dBbB b> stream xڵnF-`g#LO-)z)CID$RR%(}ːͼe޾2E2N:HEZK"2ijxNIE@>Ke~h2m72z_`S2{V# a@{R,Pdw7rΉA\1#,U~` }N7 WYA5A:0#NA6n@dh,>1WlPЃ*ùv k!_m";so+B]&rQpf\=}$5icv&\ĭá׌̱(毻gXd!>dm)L NxNJ a=ZBi*6my_GŦBz XV~:y?`-OxΚcI5%5t3 ۸ߨ{*/C#EU\d4rfd `cXнRq_JM7 2*|f#f'Tj<=kw1z47L{Pʄ/O E W,r.K-)K]JK_1\Ɔjٵi$GXQW)ҴQCJ.Dw`Bs@m'* FE Fn!]OUMkqs=sa]O{\8`am9F~NzDYxv eoD] 7jF\Ecsmh59.D)ё\r|Xn ̳Blی d'2vvV%Hz`k?jyT]e`ʹToR:|H%p5t9o<_omOY$8pNF[÷2sT>bk@o>o3-)0"S iSbqPoZRT͟Y2Q8?[ZZ]Yz0O+^{x?NRꄩY.P+} _}+$$z+ؤ ϻ}r endstream endobj 286 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./Recompilation_decision.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 298 0 R /BBox [0 0 630.457764 790.399963] /Group 297 0 R /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >>/XObject << /x5 299 0 R /x7 300 0 R /x8 301 0 R /x10 302 0 R /x11 303 0 R /x12 304 0 R /x13 305 0 R /x14 306 0 R /x15 307 0 R >>/Font << /f-0-0 308 0 R/f-0-1 309 0 R>> >> /Length 4589 /Filter /FlateDecode >> stream xZku޿?.lǎ# A Wd>%>[=C.!Qu}ϭ7%5ݖ^ضaOY+V5ӛW|8y>,~  oZKj.߻{˷wݻ/o_e_V\Xk8Զ\XP[ӑ\vXK,[ xzsKke˥Ү9+1^cqW?w_}{?\ΐ{_s[E|1oCN}Ͼ''k*ys-'O[(w~Ë[Rq= !^=&9~|xscYSh;R/=@.n9E2)ruBdnPkcWkOoݻ=}]%v?Ѥ+mӫK 8 mNt_O7>bϥJoڢ1KA "sM芋גEJw?W= & |4R/$a9QυjOBk[upNcZqS5WɇҤav*cO)!ޠph .i%P -i7'QkPC6JGT f %Sv !zo*}{ۑ;{ԺvMuC_#Oq:|"n ͇;?eddz:{ե7 G{ۿ%X߮&="ي$l3"9#OY'O 㸷8B#dެS8BDӆdm!+e=~Rv邌}Vt~&G-y= EQM]$j#-:հ 2i"O2 Ah?M1t&q'Qx@PD\FM[EqbavV!Ǭ"$vGRztt}P. n<*PR !sNNJ,=Iգfܢ'u W:$$e # BJŭW[5==o%BKa+ 2)ϺSn-ϫ y1 -Tԡa^,F\ F[ b ozt}&4>)MóÛ"<&X y @!@Mlh/OcVbmHM2ټ)㮶,}uMa&&4 l2S_NNAK|K ܢiSZJvXSKNjJjR~j1頉ezyә"-jBq FP5bJJ|>>mP*2O?b4*T ,'yj$D% 5KŢ(Q5oh Hhr*Jfz w)k P:1~XF<}k <R~Sy#@Aa}Y Pۤ<zvETm~ N8S1w4a1Ƨ ,S0<=~N p˶Ca{?uw{V;- sL t; Tv3 2xT;x|21" 3BGiz}E _j3F3ZzxRTbKuDͻR [ @ac/~F]:CKC@;8 1STzP mWc,rQ}h8%g82Pmi&Di]t(+ ]-=PR&x嘘cIjZg"sP)]𓺠`AyC2/*uxxz9Ǥ9dFPA;ltM`c%W[:Ԗ][=aP5X?Cӗ];5p1;AaU-ѠkW <0e(/ 5HGb Uֻ݉sngHGY*6q8[y1r4h`eɾe#Q04y/$2W>AhnCB@ \Rmš%wC>-%*ȣ̉sPKbhiR|)p=+*B&KY܆H@*i9(H̗ru(9O | #9`eOO컨==23>\58+hIqlSf|NgKŏƥF2vjL] /"hSGl܈r@4c%jjHP[o3 L}^Ji~Xia#dRx[ DNyIɴbw_,kݦ@QckC@!e;QFߛDaG>&K C%z&MPΙ jB8HC#D$zshEWG:fp1rLODKhL$T Ա xɢ} TǹDRŖjp~Cc6  jc[cDOkNɄ~L=%?V]YE+rF`k$8NmP!s0|Z2,WzZ:(M>l/p ofbX_1hEHzֺ`>4_ b>ڡeDf@RI% /"TM9h򲳮R\9K<0$`m+k[#2 }D=yһ+ qs`KDyqL P< bO}b|f92Rۓ!A1Ûc ̢ǶJfj2lєNg2sHA0R`%ɍ h1o3F,.Qh17vx#R 㖤k0l0RQab?S<P#<Cc3a€!Q;A{q S =̵{7u,OEICM#Az':*N5gJʠ<)VzPl?(>%7$؂?1>H>y"Iqk| 'gIя>Ln Կ}AJF`+:" ? g3srMªjX(8I%-NY.& w0*69%*C_vMWXSR8vzkmֳZD _qtFal"u?* ޝ$ * Rү%)I5ɶH[3C-+:[rFE)maz?l,Cy2zK(v7څLUvVɂ;טwY;MBJa.m9mȇZc 1'z3U Cr,qmŊ Bd?tYpȱSE.L!U fԙ'RФ$,]t⌷F^6aPIVJqYue9>dF-ѣu*L.5LN?d㓬 G;'Vݟ`xI"pj2[LE3U˙2噲/q1Y){8 endstream endobj 299 0 obj << /Length 310 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 121 /Height 48 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 311 0 R >> stream xyTTwRTW=j(b*(( (DD0n }hܢѐؘ9,&md{:3'';ICb5IsxD_K,ɩxK*K}U]Ơݽf6R?57"'e;2i l" ?ypsiE]5ގ=3^ƥ/m_yjz!Y7ptzFooJ͔IJt{I<'~VmikEqBI# d|`Ccsdvd2WT4֔w4 dLc;̮-󾸽hvxۛGwul;w|0x>:8:!<º G#<74')&T8DcLߏƹE[^^P[Y=c{׮?2Aln;#,)gg=YߚktꛒBgww,j[R^s%EeDyZSc Lskͭ(.X{k( uom |yGzjkL?Ԕq5dtw`G`g9gf u= OgC'SG-G/0--IWw:qXyym-JIȷ[cR䳥A,`*Q++=.Wϝb\eTΆ6+:^ZPʦ M?M+˳ᝥ\[?Ld1+#PQIa D(Pcy,)ɾ./lƴdڿ9?|y&p1*t)37IgtT1ZkB# 3`ogAaK=7Y^MN5iaXT%dl.19J$ET*A)to,^މ ms_6N7VgKI?/x=m^F&~>S!\Q̇:8 |Xa"m,(H$"b- GѾ(99D$Kj_ahzgah0i\n"!ӄ۷p˾w'-[|9 gTx*N-.RIAYhVJ8J>+źs?Bth 2_jn;^Z`q^(C>q|M*mQ1iioQ9WpSnULD)&UP X>;'6h XR4+\S.ܙiYar>&_o S>_E  8y} ЛQ7ٓ`&ʼnFyh0Ge9QiiirGϛ^m-ypfuQ'*.g33F/Ƙ{6/xa :#G|SN,N U#b ??*mZ' ~5uwM:Z[Qog'nEͯx+2uR^:AVdäTl1eZ17CI7"nx]ڨ\XW* tbDF 6A8?JX f{]CIeAy-y%3mt{Yɔ>G5oSrzRaMYoW'7UV(Ƒk5\.6 )]sy"y)23 :ovryR6:1|0ꌇ m'j6$!D;d2Ij^)*Hq'GfTX*Oa䛂Pͨ1|p7ZUA$vL(~296r@j'wCdPM+Vs385NRBsՇ5jB5ؖ #hĖAQOVF#lxGA QcS- b%,)kIVLGr7d .p)_! HҹFWub?'Ñzr?^,sac̳ZB=^Y%d0p*Iy̔pMftGNVX͖GɁ5q0;|DP͞J` mnjK5Ya|;s߭1B_**WF`,v7#YڕGz$N^YnTD8oV_؞G d`["Xb|M69g Rf0??)_! a5VTG0K=9p,nzn:  G$u&ƪaq&R@ʈL0orHjB$n $5J:#am <_Pobt ,zmD5?F3z\xL NԊ]za]tUGYi*|[F~o٬@ :{ J3 B!`|놆hYR"I']Tb,3e;͖br~XuqJiVRzw5!r6C̙S+ kt1:"avQcܳE$Xҁ(8 jE 1ԃ^X4I>S%`EqBɱ i&ªQ{9\NxNĹuFD.SfGJGP4B6![7őRX6ibmF( `N –D8' ̓e7_An_*AO8rFFWn,bcSpH1+7ߛ7'6 R6szqNib?3Ѯ)ZE0艂uN؝J>q~d7=ET&#Cd 2慣n|BqHtk%^.KH)699 JFBUllm.56$k h5AWExҟ}d"}r=rn$}!$'6:HK"˂uzucz$Yɏ%aHݒ&R&_+`Ũx$A#@(A>ƞĀoH|b?3 &&Co4]h3b,ƥ_QDVLl2BYVǦū@nc⋭6oUzE-0;yV<6a.cX-8wch8`l_.FX Hl%En~Z'ӢR:>+LhW 5<,Xvt*WdчBJ:m6~l6y|(W/n&C@0 >b8A3[cc 5Gi,mscB;6n%K*dbv_Qy * >p7UtTp0( 01XА3J+b9gG _#PI`J:7ŕX)\X/zSOfWg׸\ o0cAah0 .h PqgR7"R8QJB$4?<@LH0F%!p5?]2o{"eVXi],+m>rF1 04 0!+x*CQ *)%ySpX8{&[h5yPq\|(ea2j o7\=0j?(FʼnTre#DAwbQ pŒp(S{u@*Q C#i6(tCWat;Vɵ)DT3tQ8OB`3P0Bc'\?2D@h$"ޤH9,)D1-Q/`t۩crr0щ6ar1p _ݤd endstream endobj 300 0 obj << /Length 312 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 349 /Height 90 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 313 0 R >> stream x{xU6/_. %IiHԒii͔ZJ\*7ЩEpggPDe 2,"̸<;e/=I]GX[)9'<ǿ[y*M;wn<ommD"p8`ᆆ_uuכ2*+=)+ՕUSiӦ+NksjUVdwNLb1{b59 ̅o55jU,ENL&#/9Mh4mawDzeK6}dxên߸fۼf: '-R7l͠T ,'/[$%]/=n~*tv;0jۦǞݶ{3^ڳоm{y߶WP<ފg{˦UzUrDBwTpnVKKKܴvO {x'P- _:/jOu}QR>6鍐V"{©eIqq{CjެPMyRW-vp67WKiz4Bsss;+Mػ}&V/y8wxW\:z )얍KfUtZ=v٬뷷W+T4. O&ԧ cˉX}bi@X13S%fmɔ<#+F-UVTTpd2 CoyY}oҫ'·|G]̨v8^ezT"f09N;l~2c ӹ %IOݦ#!H0:Xt%`0HJYp::(//Jy+~9RnF8|:ѕuts֧[5iGÍ 2.BA>Y9b{&`)ZiiTurr\. #π Ҳc7UT66_\:D}tmݍNvqt-^nJdzgq:C{ѠGC>!|v#hJZ3+3r(#f UB-z='Oћ :BB]ԻO.A;BgCX@{}qo9OF w-ޮn֖ -_ab$,MO IEA~s_>w[./Foc!t>(Egm"`RIGA|rqRpOekjtl-WP WǜCdWS%?'ÉGCnF$?q3? rNFɡI})Wba/GGY8сFЕdnu۝cp10Q\>F?YGw97ٖH,,az.`93S\G_p_$7J CsЈ,88@|!~-Y_˓/ H`fiC*zL, m_B@I y, m=@-mCfr>Hw3[hyY8=Y~چo,@ , Y 1<I4+WB `L LE}U }A,d Pn,A,d PnA,dWlA,;WP57@oB:"~1L(7!A, PnY(7A,Ќ}OM,PeA,ІeA,ЃeKM ~Rq\Y j dD  @ SY z@eIi_6@?,@=,l~'YHY_6,l~ė>ɲ/% Џ! Y8ge#nBʲ@5d!eY ~/Y83Y ~o,l -2d!5Y ~@Z >aBj@@|dMil! BR7 S,& oH G YHM4./,i -&d!5Y ~@Z J&Ini -#%2% 3L{Y836t=nЭX |ӟKat2AÉ,\rO,{=Mk}dх0IF,ݮEЕ0:Bǂ8 njcm7 2(Z[(=z{*A/7GAt.(ޕEע>9p5ل !t6 АӥK½dh͂&#Rjrq=n~{l̅3E:DgC|8l} @һ.> XiB{jw[<|]7ݬ0|,if4W4:]ܐOx}_ D^mFo.)Nw_t,Nx{mv]c#l q73ASbԚYUY\>Oj4Ju%V_>\6h^r2"wUhwzf&zv&<4TV~Wx9fn-4iTur1ҐRV-3IXm 3F|+ fA>8 -wEhm ~%<<yU)s ^'S  $AWKr;sn3b i_8o-u?]~>^“) vU^S1iTYy&^RB"F)=آ/0n_tr{͵s7¶ch٨0Fx2x8x>? ZkG8* I̗UF i1zbVs9&w-WdPz΄]^7 ˆ߲o̰߂Gǃ³ (ԩ, ju F\$2H$j,_m*<2yMESogNYrs= <`8<GBM SY5O+dy,<@]Nt x .~02A-ʪ|.TZP/q16ۤ³rzMUb\& |=Og2 #U.NUdTWnz- p'dW8*rA#W1?%" G*(# 'UR >0p%\!##3#3(su UA*iEjY+ 6hr^aɭy x>xDxJxPxVKs<7<: welHҨX8_-3&H@gDž'M-8HF.2E pĢ4x!|YS6_ݦ endstream endobj 301 0 obj << /Length 314 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 185 /Height 170 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 315 0 R >> stream xyX[epG[-[ @BB/BK R-Qij-Ъ]ֶZ{h;38*{ߓNNNg|}**** bcPekedd憇s\6ƙ2G]Ly jnndg̘swf;M,XTZaNJ ғ"Roܛ?#:$X <}n"Mrbx]<.B&SJ)-P' ZmiVVArb4;&oº%99~Q`1[!pW$lEbWWS)-N*+ii鑑~a1Vߺj\M69"'V!O xaެ`O*eH841kJ.̉&55-&&JLn^Vٲ|ǚOU?Y4&=*'LH$8ex</EsLԂN`s:I ԤٰtlK[йtAFhmgQ O) 2V#atN`4JD*'3t=ںr׷y[+L4%EK՞c듽yst9/N aQ->t7J(tS dDGlYZݵb;{[vyO i_5MV-ʞY$jg(x2v=,UC.sN܄:?EZJ~kځWGi cb|o%Y0ֳ@TRR'918y ur_߳m;v | RY ևdu}gr|7/T{jT,T4h9SZW 8' {;>۾Oξt`۹M/5Y৿"H6Rd)y*t%2C'wu V<KГj7h2(-\x'Xcݑ]ۛ6/8gգ;Ooʂ6o.lpy(h-sӒײ+\&s̄jCǪ-*Nn~xKXW|" Dr>E3݃jޢغZ2|J}IQ۾yI ڽޭ^M}1J˚A'j!=Zk kA"RZ0'QQfBG]ضŹ_{>-u}irJaY aaa9'Gs5\=M1_k ~ur!8kԠ#S-ț6qPZƼ91ton" <~7l1Ҝ'hE-*$ tQ,,dC;z'}/;is|` 7Z`j:Kw*‡Nٻ 2l~}Q ew;/wN@NZ`E.P[-kCmT\/M҃H@Gi2nv0'n;RC:2<|T9,'Z괠y-r 脔P :ɚ-Kk'p~滛Ꝝ?":=$'i}1E-(x rNkqshYvҵC'VנC@$d~{wIɧp-Hb^K˹b^ ]N*"ugZa{rA'hȆ _WG Bk^K?7RVԨhD45ur핮/9\ͭSZdZtTV6t%O G8ACCo_|j'o v_ ̅#lO:*Q)Ýurɂݝ^EN@'ڛ:f-X@R`1^VC{ڡn@y__yjԊ8 l Q'=wEBϗ؇XbsOV'~% .?! G > iRVC{l=9V'#)|@w\ ,-T/BVɉ' z6U wLh\֍HNB\'$3N4E#9yZbΠ,+2:M(]+Lt'#Ǝ1Fjbs8.Ҳ%ׅHf6'p8Zj-Ϛh:J މ^;>YDsgIbm'غ\6ldDqC0^԰}͡VA';zBkLl$i :&2>~ONZܴpIʝ+f#Û߱6'V"[O(-Qѷ &q^ +H̴sJM:]" |KXO&R-hn.x3ҨHE.'ӂF.vR![lp]# ⦞m z!Оɤ1Ғׂth"-$} ؟X Ofw?YVaɉ>-o',ZГֿ$ jAD=CcckϠa&ތIK'NwcЍIqF$48E/>B =IJ=c-3ċ >$2Vfg>vFTDqV:|bKNLXS',??Z0'3gjSRRQH־,%QN=%r,$//#&&)"(+}wCdN>9$Dῑغ<<-X:I MkucUZО|RK9yP-fb-NϮغn K/>wC߁6r'?U-ր|- lNHظPNlH .E,Tz>E 0 )äKNU:9 G%##Z)++,K/MYP57.[XyQyѮZ׳NO.5r2B2-5qn~ ?CKBJK0, mNBCC j"M6gI}5Kw,[U}cO=i*A~Kdߠa,Ee8g+j =4>VʚcljI*<Sm(5r[sӞ- no/;Va˜;]MОr2L'QTi1Ĺ. RY(kJQK2c$݇v3cC[R3fT./[Se{lxn[KW/lK/jߛ wSkarZ/$MM!/)̓O. e*f7_&b9 .\e(T EqqqiqamU'V/jizmQgx㝟??? N.WKSNF ALp4,NcmeqY N/+҇'.^L'>ۙ Vh5EsjKҲmƊû|՟ow/ԯޟ%b9Ղp6Z6 )*#脰m|;`{ h\e_lX`ڇ4B|!T4Gp*5fՕjKW/]ٺinچ}wgmk푺W|p,'r2L*tWzst%eaY9^/;R _@>l3}>T2= ;u禵͋>ґΓn?8WRp&٬ito'a:/,spU8r;7+s%+<+Cq>p]vd8N,Gh mmYYYvjrD<5.㩅 m k-Z;3b̠[~#S-A|P" 'gԩ`1Koa2 /UDw2ip]DlL.ƇkE fKkt&8TBvhOa<|gFGUcZ,* pS#Xwi^tWOiӆ#YX"#%~~LOO$ #$M\PZYώ^ݒ">V|{~Gy'L8!,dZִ Z.ԁ_Yph8 1 lbQ'2d3NЂe-u1EȞ {"noX|Vd6GNNU\rB[Zcq.Z.N3f6ň}9>Ow1tbN l]P- r~S-(ź0VDڜ CA'hx~خ 茴t F-Nn 4<9%sb?F.XkA ^tD-RZL%p7ŖbrغZNx-MԣARZh0s&*u4X{vX0'TVkǹ?67Rϧ8'Aih Q'N9P?;T & jۓoy18N=*Ȝr;"Rj1 IM4rC;^F2qr*lD7Gj9/NkQ /BQDЂtZ.#.e2ĹYqbH>W63Qb^ l]ZJ@bΉ>ᗵQ}--X@7!NnYvvڏTYI"L j"2\ۜ$ڋ"dSh?Re!%hǴ2QR'&(#U%EdtW܉ ٮ3Nuw'E-rC@W N2~[;8'ڏTY 1-h{b68o{-N^69i ONx GlY20I lN*NO'h\#-x_¨i]iGT8 $?1C*RX=]r Z-X;^'C'~T. 07*´GE7v'h Z87F**ejQl]qeÝZYꀲ{"óCX Q'5" Ce*L=u_he}.dX(87`e0΅}j\hȘ a$P-$DZ`r>r㝘 NF}Io.;hx-ݳZ伥m^=Ȱ"sɴA6uD-wlN&g;"h{ ;{-"Bw;x'覘r2"ĹC@geGEB{(Dz9B>D&qnҺE-}QBQ-WOg Z.={"{C ]xO9y8E8ӂ qZgр-#{jhߠ$ w9I,"dYD wАӹ-)[3bغ< -Vodqŀ] cfjsrk2RDNT\(_mrODe!:'9XR'T< (S tp@ NԀ:-}OFrĉ GLJEʲx=iD-C'bۍ B 7;^`1c}ű^iE->pSaqT$Ip[dQK 87G|#g_J򯎗.iAK8^ X謅pn䞈 *t' ZtbKho O'RBݛ{V.[ndB{ L4rBۊ4{NJ9" D*dZkElCX13HP-BFvԂ2U$'jܫm-= _Z+^/B 1-RsI`a,5eiT-^uZ׀\18 Dwst/Ǝ2;*WVEx-?oM/jjp*f73+i`g4Zȝ=dzs\+G\ x& la`MUՠ|S+C`al.< 5qBx,B hd(S.W6'Z(k [Z*şkOמxU8XvuK~Nowd] 'p 'yYejeZ^-Yf|s%n~ ^9U/vfIB6Ʉ,+TU JoCxώWNi{fˎ>%>JXŸ;:u#cbĠ8H9Q+D[S|vw7[WyU 4n/ T;qTKV F&,( Ԇ =FxE< T,n/'NŽNܔr2 p;ZOVI2B|C*t ]ggd~?V%f{14 &M\X0Q)JUe|. ho3¼!^?&r2 ?zYv sa>(n73T Y*f:K>\*غYS\GIaHnI8REra:t'ԩ,'ɤ+́͞*:{2\=]nBw'/sEr=N|4)1WG7Gy,G.qc> stream x}TSgO]!$|oM1P|"ZAEڵiU:ZZul;SV;3jjcv:;Lٝsv̜9=svo=1gMy~'"ѴghticEwdkQG9*k~ _$k >Gx^iiinzVT*=u!wt tEu? UbGeAa.,dG *\TT8>w7COo>-o7^\VGB̑ z]X7'Vjŋj;*Uy:6*)%9Ȑ Y"QXhwȿ{CߍS)%uتw5]_'&7Buw]o,:pg8M uas.ZUYAe2D$T`X4JЊjmYGSWwā|G~88I߽F'}զ"UUWsZVje(LHWaBAӴΨ)pĂeMU/m[3-Y6.|AFP)Z֓CeSf4G&!VҴNSe m kσ_G_g੖O_wLKJƑ,W%#$|y@B洴<27G*E*a_h;\/ioO7OOXpeNܓ1mfRdcY K:ĩ6u&USvNbt8wAcE}C%!˥D-&B.4pMOтL_2 WJ*ha-יNv$`.dZګ)W+ȟ.- Y8`4+>WԿVnG!vpkʨS!D|Us]ZK̫wj 'si]q/}V;\qA>Ba;2 >Lt`nn4h靪ΑKm7{9Vo,wR\ķ]?E,S,o ~?<^AnnGT .wTXF _`+HMx7JX|X(aW,aL>%, (aqc F o?VjnHXAQ"cF "Ij]~[^F ) )ˌ6/E+/ x7JX̰XR?V<ûXc(??VXc??VXc??VX xIpl`6R OWpe7wfb wNb w6bwbwߎ xwI^ xwIn]! xwI[j" >['i*x; 6 + +@gc+ +@xQx ~S.Frhۿ avAI0w"pD3/s94&c WÙ^Xfw"H/p^Ax77:pzEc)*TW\`C sxs>CB7k THЅ0<|X+ݯw[k-1/S Yhl.!.3>}K]kWLJ'#ciedT`8XGӬ:>?gS3 Dwz/`0R#"؊ D. w3o=0zʥ&CId&333xD"E1 c)*Ү!ͬ,$~J׿r nB6.W?_d w=l''E)6[+5+)LV˥Ri+ C҉F؜MV+Xewa<yt~]q7{[ ND+x'{"j;rm235(3L ^&H$d4 )D Lf팴Ԣͮ2$BfT?Tm5 YB} FI qam߫RSVdiA͍d1MOiHQdﰌȢ,*r<h!j{~ϰ܏ g R`F&gՔIWEIwIDT ]Cց$/;ӓ#/ʭt&naiv1nI$D0&pЦ$ʕ9| e$'^̺ϐ!'-#HkjL]AqZ(Yvy*BUײ $"Q+Y^S[`2l*I:$H)XL%9A#(Xrk2 s2> stream xipSq}lvVkGlٖx7Y^=6qH05fsI[$ew$А)@0!@I t;io%L_is_+{;&܂_Z$NMMMoookkkoK"\PZ[_Y*+r99YD=|ek4g{j͙Nr"̒K$/s`OOπX653:481:fthӊeώ/ٰr W#6~jl?ղcQgCC"ϝHh-ey$Bьc?kK幪mi&U+%bbvb"oVgerAikܻeê%mW>1uWWډOO쾱wUӻ.\HGwV +%ه{}^:>3knܞu#PW6q3 {z}Muˬyv]1ДAOk\\S%a4N7qWXk{ocw/ p~ \6MvvC;l>N=&ck?{&pvyKS5MNBڒsMdTi\wqTz}N)%+i-4Jˊm:2ԳbAUonmbopo>\5"H.Oɍ'p ^[?tX77ZTUyST˰\.r;5Y^s :| ¹:JL9cLn >Ϗ]vGtM.ܦ*0Z0sxզL**UKwdkpfG4818 }p7҈bݴ/ [Spdl̆owb+2]|;oQy +|jWQ.9w^W{a|ϓ;.sCpNPf3i?lN}irqgΣ-yVbʭG@x^oyH7 a20Svx.7F>nE1꣖hv+, ^m^X!}M+  k-hd M~wڪ[.=wZ &x |F%_ ~OjZOB̋#K>iwBz\*ᥙZGj+3vc(֊{8X+֊ ޫZVxkZ⽔H Z_nZDE,4X+@wVQx/"a(rCZ/,ZZɜ_hZxO@@>nVއ_@6ZQ>UX+ ?އ_@S/,*֊ƒ)֊€)֊)އ_@Sab;JX+N*֊SAt"T(bSJX+N)֊St"T@b;DX+Ni4:Ձb)֊St"LU(b;PB5? kNcSaUZӘkYO)x|a=O56>{Xkl}$֘ =bKZ'X+vbчZX+/,wPj}A4Yt>? ¹+ pn3qPJ&jnzyau\'2cWW9UԞ\Hng;0tNT\ כ {;jBA&.7;uz9l¸A[2cEJN9?-7+Ǹ$GA6Uz_gC?UFTCZz%4,0iHu`+mt~jfNYhMm2s4۫r4χUZ!KQ=ċCNR}vDQ'Z4ע-q*\֐zg~٠NqkZ Óy3V;<2]+sqVĤf%&*9벬r$UFkRJܑ[1ٳ"xɌUEF #`/kql<2KV1N"&M,VHdLYIXҴ'E BK֡9Y\W2.g583䭚mUY*EJiR&SST?HĊJT' YlB6> stream xWwq~4~7! !BHBB!B ""ǪʱQ:TTjmNTEcjvzΞΞ=;3ٞnwy'auT~Cޟ~ #궶 bx|ζYEEENgUϢ Rd2ٲVSXZt8yylH$E1 V҈kIAkkxm% "`uﯩ*5s)VskUlo4)8mbaIԋf|̙Blڴ4a޼ydv-^0Eot˓m}j`uu[7f!vȈ6 XVLLIx.]OCCi*EW>9ض]ϼ{ѫ{x#o;o^^phϖp٧'+#'˻0^48^ܹ!{׍n}̇LdVO*hd'|+\cX8\G>3ٺe–*OyUڒHŲ`ñl^GNK[jѝzk&'Z.0#o*/yjmheY,'ҥ\jkksa, Mس}kG(XY ye⏟c_;Ր)۴zUgS0.#c5*QR%elgم cMzLk+x~+?+'ԓIU" :_"a9 $ Y:nԖJG4%)N/wťpy)\INLz'bbxc!;sj{ywi*,rQng&V A~zQ)(4i>[v:9f×g28Qxi18g]›Q8*XSق5n/]sB2Cj&@s""/5`WÛp D΄l΅B*;߀i=`-('lm(`1AԤ(VhTNr)ˬ-i.E]L4_vH PPbSE\KMWjWq e8V{g(K,,/3X>83rOk§\\Y\n p xaM] J[v^,`Jfz.1 n&,` A,`uG0  fֽY 4Y 2 `0(M? &McMK钅<[]=x0 4m< `0hzxA,`P{A,`Pꚤ `0(Mj0 Z  JSqA@J, /UN,kWXY`MG^ Bzf7{aita>N^zz0 a8gN7`zfq{,`wtfq,`>pfq,`w>jfqs,`w>dfq,`w>^\ fM.gY, `}֧Y, `}Y, `}BIY@dfX#G`A, -o0 (m>,48.e`Qbı0]_f‘v8b#|CP:$(\0+as" 7죩>?3qdFzx$𳹉8aM i{a8AOG ntGCBmi*m,A aw p~R瓏WjS(hO6\hT._ Y,lEY |{Z8Y kEN. A p"/]\60UUjRg+rbDz`T r20>_7_o|io6}LĮE:IVĨxjPI~Ϡ 52V0R&'[QiNja{ QKqt[>W},Gu_/wɐ]Lh20>7t8j fvFjZy" @*e; #eP^7kvU-W}ATrz.n#ƉL PԼ/d&p境6g5%q bx JE+ZS$><`bMYUƐ 5-`=`Ȧ̖huCEfE78O)1)D:@%ʒ21vD:>_&j3h8O+WH,Z]E):ݚ./(AMCwi$T[0J L2@̙k#gR RD hE.Z3H+JKX)p22j Uaz R2+JDɫw 0hT'R2iФUK #ukJM }zYq Ns"1E>*AQ"Qc|ZKFD!agĎ#&BJcO ʨq$Ydn,ф, pC d(fdȄ3,1ӊ:yVFlшsT!41*U~AL0̍?;d32L4S)ieB}!dJdPdVd\dbR_ER (C'"/#nIB@1! endstream endobj 305 0 obj << /Length 322 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 349 /Height 90 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 323 0 R >> stream xsqز+YeY,_%l] Y6acs!$@ 0LdiH4 )wc:vLm'Gri4`~%?lӟ|J$`O7⫪w:++b\6NbOܹJVhhJ^iZR҈gL7g0K7芵[ M 憖z׹3^Smqg׽歾-rQqyjKI@2<+MI ,퟿ho֭Y|kDoo/PsފW1eE_='{C22Eơh@2. y쁚`[frO,ti WϧW*0i-Xߗ-:S/LiWB3622"2w?p"W %zRIsD"sinn QA-_`͉aWgx~|;`U}ʾ,wY7vvX۲8a0`[{|Q_pLrƨi9RÒ| EL&)klA8w? Sώ:gL&q>gЗ3jޗpMTm=s^p\\5feejPj[)FHYi LfALGQHh͟Z\ ps)N/pi{wձ qeY<ȻpnN0qUޢCazCB]o9 v@)*dlxGA5*|USPrg{'W/p Nt[p·\B7w ot±ǃ;,O6\& 6PeIH PpBġ[袷M*|o H+LT΄\\H#1t ns1/ǺoZ[-JO<_nֈ dŽZk[vM?j4耝$qxލ(\MWbޥdH`#sy~9aFMYSp"YWcufKOM$?. $w>!Œe8!xflp ~ہyk۔uBg]qC3Zkl3p"o;&|7!v3YF#YUatXa_,18z>{t>cO;b:Z i7C,l c360 ({0>tY@ـlO,aPFb|Yi 2 1_SȔ,&MghG\lbA_ˀ2Ս4w(\h;>ؐہtˆ-*=,Cp6Re֙<;#Mx ΄a*ϒ,8az@\DBE$fZE?<] Tnv&n7 VS 2Rf,|ZRWo*뛌::\k=.Y9M!8J)P{-=yW OZ,!BUKeY*I-q[sKU]ea~epjၝ5i‹2./lw&<^vz5a~p!^n0*6ZTj|; Y94SH_e֔ 3nj2~7j`AѯCXSk+C ro_0mo26kE!䪤G&!_N'PKj)HU|ye|6dboFl~c[X) ,dJG~^CL3SUĮ)F̂Z͗HBJya3P| [ J7ϸt$j2c9B3D&CCbԴ/h"p wBjM-(Vr-Q.^Ӈ90O-3ke6rnoJՋ]Zo2n7Mf l|ȈɠȬȸFYVdUJ BIs>BGI(G+YELV )ɛJ=.LB3%!WJrIe@P"H!TCJE. W'Z(U+kZ 7JBB趐TY2HȬlJE-* i W)*RW 0*)sbA> stream xyTTw'(}yUEQE{kY%KJM(BH\0ɨ[\15Ǝӧc2[O:Nt{=ܹ=$F%Kw{QQ7+++TU5DՆO3}ʒͫ[~ʂ,ޛ %4%Am&,\Q8E.4K :N<%rF$NgV溬YIYiN !)x,!/ZG۽h̙5/hn_{P_wϲ|τtĔ<@ºH -;.ױȶ'?+0_>>mm&BYRoBX4 azmq^n dB17gl`0X_?Ʃ fyt;6n[qzx˃Oڮyo~i/ձU\3T1aLGV{Rmv]y3sUaϔ111P$nl4M{|['gN8s/Wdžsf8xv36͚D}~O],ΐoEJ]UFgw"i|{4,Zdpc~wYmઅ-S}ג|ÔJcxߍsGG3r MR1zղE{V>g ULJ6}~/_ٹC>Ut5oj}~*GϺw}oE ?- ZPrl̲Ig&prwi_ך#">]Ȯql&#QkQT<TGqgH$6Ԅ״/5aMSUѡ~8 WN~ν)`ZU]VmҀMJ\&ib7V!i1Y\\s0*vWw/޷ejk}| zhݽca?yZw=tbK:)QTfWS~.F$*2n MvFP$#Ö~FLjܱ#;.swb3cd go? '//\xoSp(l'~h'Sa")irY2lRҁ0\^1ӼΥ-檲;6x`O\࿟lxNOjppNτpx gÍp f}ܚ{ d-`{G ..(WbS`nG:&tJ^1kj ~g|Y&cv0KB8Hb8XLA'I-%?Cp53ayca@fIE1J2Mr^F(`q9(Y4"imU*+nr |ٱ9o$\";Py)D1>-=0Xwtu¦RIvqQme&1@3eLrƭPd,N- - v?\|i7w~i*7y:&ěwH&LO?CT"(Og;I)JutܡL kUb0h8 .e-=OnZrpgj[A:p!y} "hbR 5X IzQ^b .S̉FffIcb11\\UԜ|ûU^!84ggwQ22mú|bi=1! /[4x\cORZ/̳WOjȼT8M-paj %ƛf+mVpHp'WCMrEKm+vnl,! XQyW\6q]mD}TKL'V p!k%^ / {fžJ@ZJX>Bths|2| CPUvi! K%Qpȵ4(X9rs]2i[qIWkj`x졄$귩],%׈?9~hFˇhhx(|{ Ca0dVɴ2;˯9YkuWî9NGMlD!&>ˊK:B\ګX<yZ`\[NI8ɦ*Q2Ag}Էڣ0>-Qo# %xG}qK3a[},_% ho, lʁX$q><'IJQQQ4akʿ?Gp.`U b "z%`hAi# ,]̿7ڠ3[= eC&2{*Y7ѐ(} a#iFYI>*Fg) ,0\tYafCg2X^aTUc0[$QE^oipjȆ9Y|/\̋q7X̣(k-b A\Fa8QC̴ؐ ;M'MY _P #3ѭXl%Xh2.a2e$ ^IN'VpO?D4谣z>D XK5nJV!ۥk%aK' bc9ɇ)#w1Vcr` X{&&)8zA#[yYC]#N5IUJ5X`Ƌw |#zܰ,&N&DD!玪X/F5DɊs .$e{4T vS0+\䢄׸I7<ҁ(_~7}nck7}K_84%|ZLT<:!6v&mNU IX} w^q8a< fD4PN$fk,VOkTFQS-Hp(#Ħͩ*oDH>l˂#7hM'\4gh0r&&18Jԑ wi:,D?;ѳe:Cdo?%1N:.%: x*V;ԍ_SGNpK'2~;KH)69 XZJFR45$wIf+J4hH.N5h q&g0}rƏoA$& `!;cTayIMr FBf3b}*@H!e$(u[~|Hm8|꠱|+B%,#I  L{SppO2N?Be#D0QYI)6ASWt4-L VyW-@iAcM΂tb_9^2SoI̗fl6Ռ=*UL,,b4p,!~<o 5GӴ_kQpjWAǎf2h㢄kiG.[+h82 ^14b:Wc:A &@Ȁ`9XbX,6 gl?Bs_;6*APPqwx.%?EnGō9\8/V]~EM_߯/'Sń1mLKB, KChHJnܾ$qjRI@8FXR"%Ġ4㱽8>11*UvT#7Ae8J,4,УLďGN.Szݓ.Ch) [T=JY>hWF> stream x TSg?piIHH $@d K! ԊVں!nuZk&.Vm.`Nߙbv鴝V?$d7A@=s<==ss?>|Ã,",",","˪ƎDT*\srzW###E"LJ=jǣdC\rƌEE99Q*k2=f 6ua( 0YɬYœ AQ Sf=Æ~|y" EPǓdrQ~i~fj|BSI9)Ab?R!_ "SiE`|}RJC^ޤe\,%Z<ܪjmF^:92(6D)a~J>5E2)L_1& =2 s2`VǏ+ߺtef2iyhEZ꟨E0#`E dJ~"*E4jeى!++79!1R]8!y]kT1xMΟ?N>1?UIVpY1bF?5XHirMMjs21&f|LTIĭO,{vm.֝O]3%ZX% +-,cIbҟ32Iinƶ[ִ̭X3/n>a˴ICxapJ@(Ypx$P!ex}[ִW=xʛZ.p_V] /)6dJW,H 7Qb?LF% &IAr͏M=ڱW߲O۪oM٭\7MWg˃?%mL ,%7)-Çcw9ٳn)@g^tɩߝm xgs^OSͺO(5(:re$ⅺ0^;1Cj.e6'gڌN`srw6~W {WbE|;=RrG|ɼaQ/H  MZ|I-Ca,lNk޵veO¦vtl1|wf+} ;wk˹ `D4DWo1-! 7FFB._DN߼v%kKܲ:`u}{~?:8Fp ׂ#`6xq"FiaתTZrT0x2 6)Nmm۵aem]zq<ڂ} &p) Bp^ϦMco/nǴ`hL йsYNҶcMÊڲ7R -*Nzۈ߬Us]-x_ >Ђ\!8 Zڬ̓cZ` 8jRP(\'V>'Uю'g7,x} e8gZpI\Wts^ .T"-Zhev-ϝk3mΎw7->N>.@Wu\GvZcZ93^ |F7sݲpC{ɖݭ5پC;^Väݧ8Hn|^j %[#gmpR|}gۮh:Xv=ur}m"D腫hPK-Hb]Rىϯ︺қמ+N~ҹ>hP*c-drչ׶uY97ccv?H9fz8mIݝq'/tn`nC=|'ɝfpc.ҜX:O.dˀ ?prg~u/^'?n.uI rb X l]0-E@ŏsd.h׿ Q'?;=N''Z`b\&-cYf*Jn.A:R("'pcvrq?x`~ɖΚ~nA0'ZߎZKu%Eƴ:>Qh:iZ.Y\;d]ϯ6."NN[P'zF8QEq.iAMVznBHs"ZNSSmbɩ9-ЙB{lkߣN>49K-fr"Ӣ +I Z0jISEV6N'Xktcgo1"3(NpĹZC812V%K',،IvNnڽxS7޷ /MLN'b엊86GDI-Osk]^Q15/C'9t; O0]*KERNC1' ?\ϑɯ_!йw-RaOj{X؜9`7Dr_[Zk'щn'Z\rh E&Nm5 '&RoC'MN"-}ɥ؜8vƚC{'`TiH yN/e:rZfC_ HE 2#bہu,"'褸 ` dͽa"W:r]*M<'l`b~ǚ&'g"͉M&GN\B^ jsK{m.q}p;lNN.wrg<Nl\XUGJw\غZp Iod1c'p^l6'=zS>vZ*ZѲN9#X: Il'[Dq΢nk-uDh1O64fhCg[;q?'dbh-Хg0-!pͥ9-X6`rS25eyYN&еɩÉhb-ŽXĹZ<-طDkcu: y*tP'K4]{~>ɉغ`Zh9'>C( 34MuMۅt<1?mq2Ɠ>k m{NW6)]zzF8s:S,d'NÕJ^XsZ~襤L5CYrk}zp+Ӟ NWˇ&-/rA f-X&eٴ_ݴ`Eh?zg6_ޱܦ3M{dP 3*f0Z-A\:(@M;1&F3 -wN,/?y&O= N,:w/Z=QpNE.<4|0ڣ['9|ND.% CLTB'bj0trZ,ωXk1o oL G˃0'p3$++;%,?~chI?HRy/?r-f'tʼ4dkm)dtBFK+K'c [vҍ.xI'f-/ւVZZ`rwN41y[m\T{^YAa,IFy/799Cf@egnkkNV*۰pOl $Z`brjukǧkqunٛ+_py NC~,Tpt;[Z`i8)3rrVdMZ@'?Fda,ıho<-c%~PK .<-z~ƌS*&e!?mڥ;Xz9eW_>v~~ƓNŁ8Rc2/t%w\ ]-S 2]ʠFVyy F%++P\RSZxf+,Z^W6չ-GطŝLI'D`,ab:'jsj^;>)SZ!`2(p2vXN7EZ^Ze-~iUN+>yō|{ӫjo\ۇ~KewH*Ђt+ŌD.Z }4lpR?="cU\ c{1|G1K>uefuSo㠆{Ղ-C`kˆKUʃ bCȈӤ\J˛g#oHOP]Zi}mwn?[*7MR|'2H*ż;p.xu"S x"!3劽iel%+.16"^|C2(T*KKKKT/3}mͫZ2>W}]'7Оt-]&- |b:ؙVDwQͺW2%9Jv#a}%cyz}ue겹3tW3etx_ ._;E@J`{,rTLե şrƋ )c*tO_w*)))5&M//Tظp5KNjVz`k˭K}oH+.p/F~׊dT%T.j<}e"X746/I{׌r |i^\1\({򂌔肬-jfO|nSW]xg<#T>2!OOH'}^-Bξ"X"Vkbo~Dae$/Q'S,o!݋Kb<{ 9QꒂU kLXYgPW4;b]nյ? D 8G[.鐁| |]"|Й$=?R) \$.PqRe̘G(b'ϋ;@8\1P6d%/*h)(kL ؞'!ߛ2p +'KBx^eY`/G?CU* ڐ.ؚFʣ0(75RȈH|wR[M/I XNv2?kBp 4SvZnNN^HO#>trEk>޿"LdD dl@ɥϠ|EDDT6S5B%F'UIj5MY5_Zn- NV ZNY;_Nv!NZ" o*C6gKESCةrV|4o}4~BAK )E̤H)WQ+K4AU1ŽC-n仁ᶗNS] iy<IWE>5G|E41c")شD Wp|B~QR^A8.xR|J>I*]zrM7 iܓ )#'m \9A\[0D[#aDByAo8y{/ҷ)XLRy1|V hR~F4^aH `bXnr}vejK'Ux:5;SJ0eeCsY^"ѼC1qj>M#C*&Kiy[hqMq'N%WEd C#}J0"a{ Xi 'в=_i5ݨpZw8TbvR9!NOs>k6Np}_&pl1_]6NI1tirĜIӚD s9[L˕ouvZ3%}ָe9) M,$KJ1\R l]k˷ Q-{tZ6.5s} lNP'i+0 غ`Z`LK q>nhBq&sw\+__'Z`ҫ-6g GD`N:؜-uq.HMOm.NI1d{|et؜ >-^ŴT:L bRo˯>ʴ0t' lNIߵ:B-6qo˯% (XNܧ?8ׁlmr.7urW'98 b{'NI[9 W}-ok{:|9 NE4q8^Q17+b- 8GˇZӵyh 5whN"pR{-8[*:Z.Pق^-7FB:N&OFm<0ve4J^˅BD0Shȓlr, nYkƇڅ -g y#@ː 0-87B@ύlF-Hj9G"'0ֹwc^Zl\Q}p{~#-uZN3Y*"rmRwN`sb$ND)rhlԢى "'U9eU؉غ -}f^7`e9Ղt ^w&[;q~aiY'јC^K_Ndyq'dU}\*='be(tBpK'ؤ~qMk%`?!DʼnM ;iD{]k''+&:Z*:iž@̱pVZr#%!1B祢kEn='r蝇# V6qF*Zܖq!e;)xh ӲՁD0-1?zغ''2 ~ao}NdA/mIdMZhF:qPq. 'x2؁=F l].\j?q$;'2ܳ;9f%-C{Mhѻ8qYDZ, juNV˃`! c^6Z h˽ܫh9DTlq9c%@&UwC-;LC{k'kJqlNQD;_)?0-DN(a R%Q*KlDX'\Ӊv WĹPK.*T^ ^n׵*ŝL5 #R@WYvDhy&-Ub9"'0I'd{?vg/w#}N7%vR!Q"]?z\\'0\h(F:5VTh(@98VcDr?CCB r;-i`WxY ^ׂ2Ag&x)lO`=d9l/>6,^aJ* Tk8Q?e!M?ׇVuP91hx2 YCl\t/7r qyįޯR~57NK5IwwE _U_NW.O0.{-d`i,NnI5*S\ ag~7CiʫU!uM9Ҧ4"d# gj$ ^, >3)DiKZ@g "yX䉌Y;#eMP񸀩qӥ3$3%%R$Ejn^('Y2lJ2%+\V(Ej!?%J(A83z6V pR@VLtBU}P6qn fGd!L;+fMb1eX s Rd6bRK0GT N| @qFB#EP>5 e8"NFT["L?s#aGBZ@Uz#axRddl]xQ?[),@EƢ(ٔ 6E¤HR%"R=#P=~^"?cczhB90:JÃMK'0ɡ=ʦ>¥>ʢf=¡?~1c<|\kr}ԃOyzb>|YW?> stream xڽZms6_t  ,^n2yM2iW7utב<|{Rc]Ͼ69eM^yq:<7Eqrc QAqT`,YEƫdYedRP`nF&$$,<$eb`sDSr!< 3CI0)`df$WJ'x\'PQ 6s"+>a~G!a)MSW@'7`e! LS00(SS< ˓ Qԇ턄mH"PH@*w h$E1,z$C>@#)?&QpgET1ℰk"Q j ĂLA@!`2òfO̪g& SAU@Mہ~7=І0b :A郈[PI`:}da>hKD rc?I9 G\83LB©O=Q4ERQ',,H!H>"H]FZWoL3jۮT x3\MZhRBi-Mi!r"OFd68֧ȱS]?,aHw8lQS:>)Yj5^v:eu4R"8\D^V:%%L[ gyy-5KҺH+hlRR#:HF^[\tiDy֦'k e!DlryMJ~t> 'R7KSi Y~z H^_K)4iQCˤDU A'Póg7 /׫⧙<]j]땂sڪ}noQUz~qqѫ \^f'Bo|}[ `oFo˯tn@Uf|ͪݩY\/nd?nfjVϋr0ÅGW>]WZ]5JH'sgk"UF1\> stream xŘkA0,Ca K eC\H 9.$HAdbN"i 'Pb^C%- IMu6ɮie70I)Lk2l-ݺ*pP(:i>zA&' NTJ'la$N.r]bX|z C$k''|,ײNvƼ ŵiuFYf 7Ws-&h*Qc:Ф%>'wFխ")J'hWM=q"7V{FKv&<{%e}ץpʐO> stream xgqz#*QQ9xv(;&PKzؔɘ.NC=mf,:rYؔSYEL[3Fɡ!ݞ-ݒ6|/x{|;440"v&[(_Yypt g'Ǔ#a!7aDSRчi0(y]{4;k\򏶖o+"su=xvj Wvy[nMlcVHKuգuqq ϪGkS/-"4:V'l]a&n?ij!.}kՋ5r&]I}zFz1k gޫ^QJM^@q皪k\d\b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\  wGb{kYU/Hrfrz>:nolTOGw"zk٘ 'C"2Vv}6[z|QAVʭx_Tց\-:Яsf~ufxMW\a\kNKr:=n,=OaFSYwquZmZu}uͦfCwݐK8|@ 'BA5̰۶zaQ+l'T۝ endstream endobj 315 0 obj << /Length 335 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 185 /Height 170 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xouFѹ y$dP HЌ PxRLe&.o!@$2CLGp4.(O ..! &c kb?+'kԤ6mp D,=/Y̜,Wn116G%͛=~)r# ^7m2̌!Wт{R OqG\rϬtp__rNțlݡPX`υo-.b^.g w\r:x>NgZ-\y%헒pYIϮ<Jvl#;*pU{] ʵe[-eM.D=$gp,w[c(Er. Gݚ#?8zrtݠ3 f,DTrӗú#)'Sݠy-9rV17;hqjcגWN#,GV5ed7.Q7;>=g|D/.\Zw?:7Y9<Ԓ(j7)%@oa1:r|ǢS+n1C#<9̃\v%Hco2zrt J43OF#@9½kɑDcr)EX3!-o5{'\+NW(y%lD7J&w ȡ+GGa/6\sr%i>W[5!da[E^\Sfm!̏_NQ]} wTn,ER.=nr9ʎ˿'ѸG{R.gmo@8ILבK5;t+iIo+w1֖2V}x6S73t9\L>oiBw19蝻\/ni6x"SL~c7h&۹oaOsbVN6 ^9X7#$dqҖ7&ᜳds<WDkb)Vw}[ZIzeoҖ̽?'#{I!?mnt4IrruާӚk_WMs&$:p9<|[z'zhst y°['sm>u31|3Y*xgܒm-hU'sSrD~[ cQ.ʋ_s=nٓKˋЏc_hCf |P`OsZE^\qrV>聁&#n¸;XO݁{uϦRr>rDn<9x? vu6l2y,O_v?}W]0ecޭfUo,/}$[1Kx8iƋ_[=wq#-?9$y8p3oep4ֿIMjR_Zv endstream endobj 317 0 obj << /Length 336 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 258 /Height 85 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xk`J0:$H)eC)RR2""/BP" j(Ke؋Dw'A٥E% `t2WP] (ҷ_v3"*팵OgFaލܬ$=T;oڝvoϦQ]qUB@ȲU;ɺodT"|yPHp!L2" ׬LkS zz{$ӾUM]& F9d?:,3;yNPb9DQ@!s-@ #&] @ @ @ @ @ @ @{'2n=qE(6>ȸ>D^xp{"(҅lD* "wI;ճ Ivm􆼗k)P<]}z(w_4tE#=e+Uᴼ4ڊ|cAT#c ET͌òNA (jTӗբEUY~F= endstream endobj 319 0 obj << /Length 337 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 314 /Height 78 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xgaz*^PZLm&ꔙ7vrBH=N=dme)S:Ce^&J[jaO~!_yLr"0/|VZMRt4 Nl@bmHLHW1<(UGϏK:an*)gnUՉmI\W1ZD93tZićNκziS:aޫު&uSU//#Y.z^*9rza9ˡ)\/CP,b9ˡXr(CP,b9ˡXr(CP,b9ˡXr(CP,b9ˡXr(CP,b9ˡXr(CP,b9KG9WVQnW=V+_ݸTXS2󯾫vҖ)gXwZ GE+úK~+jM^K^nFMk%gR]\!S*(ï%sY/K|ۭYsWlSȕיd=7k6NLܖ{N"ERn;mT91{DM7bGN2fs)MɰJ@ endstream endobj 321 0 obj << /Length 338 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 349 /Height 90 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xka """HƐav" b,`c0֥bv.!QbD!@eRrzWWWs_Kx'NOL_+ܾ{s)wcKaչɠ%7<6\|ji~m!gsىaպ*n~??^:? ?2{ . z W8Sb[9[喯+óu6Ew(<ۺG;2qcL>F)>twhiQCWb^^lFv'Ͼҽ L\:*d2{AEa\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ RFb0.1.)}{A> stream xgaz""5Pv&Ly/Y2zZDU(!M1Te6b:9ltIڴ͖lo[<ߞ=?_}OדFnL=:?_8O>z?s}d07 ⶍ&6{{?e;/OL*5L{vs[{3712u:V3C^[nޭڊ3dy̺Ѻ~'%]3tuz6Z%-՛Q͍ ֋C‡NVX#kND5MՋ5H_ 5-Ջ5.ߏŏKʪkgyZ*TEbt*3rqߩ^b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ Vbƽju#q7_=]Փ!wOyZAj> UEsc:.~7FOPZ{|ZQP=T[v1d.Jt_itRot;F":NTީ7VNq4;Y'KAy\׎&RTZJRnIDmݴG8J%G㑠{nO^epzpÄl>g U# endstream endobj 325 0 obj << /Length 340 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 121 /Height 48 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xŘKpˏB($HPʊ"&cTFI2ccFJzI<.0Q("nR. ZAoZo>{E"m&ۇj|}JN .~X_{K³+w !&.yxHg/E:eLϗqr!_lui5#>\'5pP\'VOI)BgH[SĤ]\2AtHu >nE4es+ t:>N(!W\"'e2 =tz7/"Q^r S/ ʲfWLE;)ͪb"nRѫclՋyA3*cx^62<}rޮctE\Y`>>(VU^13Ui` kT,=#0=$ܪ~ږ95‡r0|Z1riԮS+[#E91-vzv](r4 endstream endobj 327 0 obj << /Length 341 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 185 /Height 170 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xoSeuH& L@T؄0$EQ,EcbBi@D ~ Id!9 26*9F^>}nIOzox BD1$x丝pe*)/Y>r-rŬ{U^~L58H݇=VHpڰ ob |IVbވ9vC{gx?HF<Q._*p_&0x(f݂fE%W:nEʯ&Ӿӈ[Y¹}pq72c;o`O Q%%V>{Dw)7 ynYuk/Ѡ~qEnx%w̼GD g7DSb.r5yqݶ}e$y9Z<^*}nB 矶Fut.2Xi m!,i-R[N'$27* y]9Vo!,ˉlٸ#zº{h* A9Sw_Dmn!NfqCboM"d6otm-m!ɕZI-K9屽U7?gmoA~ a]n=4ނ¢ނK.F^|2{ [c/1vpy[Bw3 F{on a~@2LqӷHBwow_ܱ;xc;u~YrzNxzp(Vj0nU{Ë>?~_ڶ..8 )+6|5 f rz;ząW>?}uAV -i> stream x]Sn0+|LR^rCM^R zTvX,Rmwϻ8̲zO,!D<(VJϷrnUN؏idsS [ xe~Dqh[^;x |,c|^'<`ɏS)uHV6} ߙIh:S:8]psyXۂsȜ 8LQrQ߳6@;`]85p5|:im +|xX o)ps0g>jRyy ϖ=;ww)~| ǡ/})Qz܋4fyVy]Gh>rܗǕoc0Gg k{7I)ZYc]C0 cК endstream endobj 331 0 obj << /Length 345 0 R /Filter /FlateDecode >> stream x]j0 ~ Cqslrfhd8d7t0-$}?Yڿ2Ov >c\a)j.{Uo;öd{Q- ^\@C4:> stream xzy|Uԭ^ӝ},$ Y, aQ$ 0BDDD61 ,p2#*RB(,6kN3 {oڃ [ ~B"L:nXk:Vتel+YP_WgODXBH|ǬI Ʒ§F ETwl-$ܰI׉|*I$||ƴ =V걅i -_J %em_H;xI"6氲hEeDhKyφ ] OkDk֘ sty⺸.546,Nzch4zظĤh+gb*A3{&dK瞹Wݵ??+3--n|ڲşGC|绽{Ο25&,⑋IKpPZ}'qHoVDa8aiRYqQ\nGҿ6^_טgezŋSz7VL=>3Cbbc.(+[k[߼#}+Fwi~Rk$XCT"8tʘ5 PXc@ Jt49ߘnN'SpZUU=KrgEEŤbⲓ(#ڈ1|Fˋ͋K*JZU]S+].i{RSRt竝/uˏ-.)ŖFƔJcC';t wPS={e^Z27._:U[S#1XFa'Ѻto;.YݣޤsCQV:I34R 5OWTf)vuLIeJA2^m(Sp3&vӯHpQw~5%v&HՋW쯩yulg}l붭ol-CL-1q;"ք+kt#ΰuuP| jJUw5H~tih0 ]#vTW=/>z򥧟޽_#lύ &сTs$᭿r ʃCg@N&mwPH kvcqqA4e֟g;_lM'tyj*5M,  (V*(Hi[7E3U:9"BTeK->KzZ2l1+,J22m hntQ{0FNUfRTg3 *UqLڝ.%^ - ԜcZD? `n|5(eQx+O)k{JaVWΆ7AjFRƦK!]%#0;2{{Bw)/uΚ\\ĺE ײNOMo/fŅ;8w yn/7Ոҕ[J>v>P<.+ ['׼S sϧN5cy/j󖯾(8M1{ҴK!ǎСKJlUY|({xLJL4- Bd^PdNCd}Ѓdݭdmo$Q+~³v[#ևy Q#2*o2c4GvӗP$b*D_)D&rTh$CK:m)]=^#0.Lrjl >`gZ4jӸx>_˷q9@NN<9tpD"#xRYŽ{(Ckն5^x2"4 .䲮k-M3G}ųI6f͒&l6;;BE#Tbx$kpo,XC<9yʇk$MnZً68o@n&\暐@C dʒ$ʠUrnWES{d) iQAmo^|ӳpm^YmGE>GM&zD<[eg꤉ǧU_<~lj"BЧ6O]6f\ߍ{(ڬ>oo|̘0o7|+ cyBϓ.T0;IMEh1K;쌈`:&O*&dٕ™^,ѕto O''89smtNN:141d%!d$׸Iڽ&Tu;G;(4ZVLKRh%b[Q,qaMaMQ3M%햄ݰ_7Qw-ӧɯSQ|B\xh-Q882HjQ,a.P"3/2T ύ7҂0&u |3rB[3nY?Ao-{博UO쪩ɮZh/&y~IϾBO܂DG[sH]B7`2$8yrX\Ui7lI`Uy`E‹]j<9dŬd))@*m4¥DH!Y)$RKr"!c8')΀4>]WGh1K"yYAˡ\*+JRI7ͰI7ʻKrrYiS8C4wD:q_2 _ѧq}5TsFB.ި;'b'3A#SU,ɺiu49D y+TO}U2* vp-,Lҳ=ZM xdHH ;Gc٧촽;Ǥyg€>EP[i꯾՗Ӌ"jV%4P21; G@_bv@Ⱦ׌/FF{CW &.'UWW˞w/Ly0[ pQRA:t:d%!j:Aۂ3Dx;oWKqyM5%d]Zؐ*axI.4$Rϧf)P~P zk2!ۋzES?JCw!FQ*78#TH/k={u$b7'Z,S32?#y۸|zk͢sI6+U4l!`ThWekVU7oNĴk!-`4ɜf…%IYCT UЄR0 ccXgCFl1<,=RFWR& TJ!tƚ(Xg*/YGZ_u;Z@s -Kɍ\b3un?5vov=[T11}6n(LՉSӭ!N$NnⰣQhsVE 9.ݦh䴺:N`~@ʫC/_9XZMHicdY{bw!]pxu6S+I:e.C4c w;HF>Ǔ._K&ؒ]]>7L&>Z/k/[{#˙J j0 谮9 v"#6<>Fmܣރvmc3O/l61Ù+  quu^(w>VX+l;;mUeMh#)5[?|1*#Vk'"O-6~F/(_ZO 1Gz f*i޷̴t~90rum?E?GٮI۶_߾pJF] FrZ(&PLN,İ - \ʹ90DKJ6P߳$6F3)lo ,"mfǍD.ҭًMBfVZ̓o hnD]9s :/ zY:~hil%MV䥎$ءg #cn`RfA-#זSбT:C^(t d}l ebuufp=F9EzL``zpb#h@ёt]@O/їfIӻi>/h8%nAm;xoލ ́MYqG=#eXF; q% }]V1_O$q$p-$դd/Bw]!VYAa;X4sdCIr3r",ܳ;itX[HgIoitVʗ ]X]F!2Kא@A.YKQ$쿞%;I1Cg kƚ,ٌll?(=;J dHl0J/d9b% V?}7FK:=59لZVLF2RXKK-wᘇݸBRQمkGW@9l"g-CT|{,U22LVLC;TS`roE ׼>~ ga Vtem*0r,sU1*cXߩqݻH^}-oU*+U?YnZ uP@9wXAWL=z<㮩}5`h'_y~gIqh5i;Q^?~ 9-g n8@|\Rlg>|o5zF2G&y%>%c>k-)_&c>c|J4w`YH\E[ o1Uꏥn@\‚N~QЧ)fg,RƳ'!BݰAcִ{>>X>DV߇h7!^}/wc1CvIH_ _߆CqRsK!ѮQ3H^Wm4{g??V^5Jh÷ʿpf[3_sˆJhF/TL_\N+ᒀOK Kp~NGG @V™h~F@}4Xn0 xG xKpL@աf~ w_{^+ϏL0!Z P% e `^7燽n؃ $`ݰS ;t `;> o <Ʒ]0g4$`coPi |6w ]`nֽΟnuXW*}NfuF8.[|{`ʰVVa|Η XRJm-Yd ,.Q^^E XGm0_yip3i"<$Xx@L= 3L_PT,`R_o6 ^q0V{=0FhytH#CnGȳ]; ÖaqA0$·`n[ *aXw~[3C@oqC~vhsB?;%Oo {xoʴ^.ȴBhȰC<]﬐jivHB**tK~R]ݼ%ϻ I~H[yVH/ X7 q eH`fρ0 Z!(Rpxx pn:UpCl-4|L`\6J/`-B.κu@i'h={Dߴ endstream endobj 347 0 obj << /Length 348 0 R /Filter /FlateDecode /Length1 2600 >> stream xTktT~$0 !Gyv ڦ d"4` iJPIBZc-AV@`WZ߮sϽۏo?94"K҃)#GeqpѼ.OoނƊ}7dCesgD`Dl)\&βK6 ^'8fAyl(x/2-7N]T1wh맲5^%ReSCFPo$M-F pH cqИn44ܨ4ڍR.#k$.zPv*0." G]$ov&\NdwX[E }:6FP%7]QAC#`ٚNAWhD.ݖfۚ.Qۣ.Y6RķkF1ow%T/ۢ>BjΪ((Qb#ǣĨt(HGd-Rhk%Ө6ڭF Z&*G6͗] SWx0Jz#Qи,&7QjQta;1O+JլSMkj+R;;5+z Iy6cऩEulI dE"ؼ.]4hXyXN--K3GՙsGeq=:; 9WO EWۖ{;O=օBd?wtd+.'4kE1㡐Pm6ikHԓk45Λ7‡!\s*ś߽OC'uc'!-K50.ǹ !\ s83r! {xqZOWxQSq:xǃ2~x[m[o2^u{x12~x*W?ga2;ѲګZMtX58W*wxًB8xf<ϫ `_KхeSv3Pˁ & !xtTmSLd07 )c 3mj6 ʈULdb{Հs^s^w .Mݕ w2w$ MLs!5>zbG/`/'H@wTwF8%%#ftcpJ\H');#^`cęeĈY %CD,QSLCk ב%(ǭ endstream endobj 351 0 obj << /Length 2164 /Filter /FlateDecode >> stream xڵXo6߿¸EQE}Ww=(娑EW7IoCV,'}5"3|f(6[+]z^ObbvY͸q'TXH5,gsw˹Mkqۘre֦KnyYHQ-3Iz]"[!24ZNˢ%W{Kw 2@Qq03q w`/e:pUƣ@Ȩ7o<_iiMف/?ozIҴ.A 7Iy o!# hTG1|S, Hz ¦{H6{idY5E﷓@6\Hf.J-iOzyi3=^Wb 0(*2 E>68 s>!cضO4jc%0F| ;"^h; swf]d[d 茠D]4_!5gemm7PrPs6 HzP)*ZG*rP|KIȗ-Ң~F 8GS(Œ%گÎEδ٢]pҳ*u$X8 ku19ΡbAR>nmYE 2VdX"\A\ Y0EtMC E\z`lg.LasKu:ao$ OJLEmZL1ؙ“o<ϓ(q1~R#@ޞH)(~=N՞3V7 nk@a Q<&j }jYdz*'Y:FD) VOOW̛q 0~2hēeqߢETWAiHЄv\߰d(@Y2|j="pf9vDpBEP>OoON>$7<֔hJY}q"CsMmj[KήաܷP :(2lղveLҡdRw桪^P:Páj֛kyJ)(}Q8SMv8󴺪:S_efJT7B&4 蹟*&uұV&l%>'j0W)>Zɦ endstream endobj 355 0 obj << /Length 1978 /Filter /FlateDecode >> stream xڭXmF_ard.%ВR\hAg[2.w͑ޙ,tw_˼>3.g,~X>{tꌰfƔH3Lʅ-׳?/zFʙMWrJᔰ/&owZ?o7wd.X:"1$K3ɆLGJ:#Yr>.vk͗۳W\M^~U]:EU{NC4~M㶢2QC]~^) X@9K^X @ޠ_pEħf"8?_vt‹7vK딙4?6d< Q1gIIvi9$cvh(WöX5q(lj2To(;9vyk3B y큼ex& GD_o=^BRB*F6ohslƗqmE&ljOsnO^(wwΙHx]e*0A*!duOWe3I}ަSƂuD꤉|61 3p\u}f"pK-q\j R.ƥq;,"sfsT+Su;ث|@,h*DQ01C€8W* upF ->1;,e_3"TD( tԾ9%;̭H2T5$xJ@0E=)!E9[ 5|t[NA?h dZo2GcK HɏqE-5TjJpt]I'}qgI_P@ZXmZ@Z|G>Hi@ecD)rwX  }45Sj& C$8EA-N!3X4V-wLS<6Յ9F綢\u({.sΚGu!c+Bx(jȵE$C"7C`$J. `h vc;!,&Ka"z ΒE($w 8B&Pd Qh&QhKt'D'Z=ZɞAuAeAŒS4Tv+F-% *m}=kpXO:FOD(U*g?+EuH}BC(|H$-pƵQ$8K6.4]tr5yT9<IZ[bNP6'W2ķD%'e5' ڰqhSA~*1Fg@\۝ y`7XΒЙ,i]A#ljO 4\pS(&ʄ2 jWm@MWޔQꩂFrGTp;8h94W.'>['Nu!^TT_~AC.z@ R7XBӟW{p=Ic˸#Xn7Hħ ULk=el. n\Ka4| ba̸7T>/ʸtA7ayR!qs_NPq/ G&a@ވJRftf 0]tաMCڅ |( Y.U ;q!ƶi"f g+8MXojЌ7@S8 Ԥ{,!Z;;^/ kt endstream endobj 359 0 obj << /Length 1923 /Filter /FlateDecode >> stream xڥYK6W @il"m/>hzʲ--6 %U˒"<>~3F"Zy7zD Xo,JB:"^7?yy#„RW$)v&&>?}VŮ$NX1Kl+̰IƉ„F|ɤc9"rs(<ۧ+6W#8M9~mz^r8h+j!sֳ*OYFa$Y'c{.V 1ǖ]ͻW١j܎D1v wQhv,WRA Y],hi:-Wyohc%b qa2t *U4VEP^ Z4r#X.Aޒ25MNS4 7',T('wcnu"X-DjZ-'#Xc'/.#\H6Dg\I4@Q!gڡ{W>BfA44F <:@;RfXbz.=@?`E,Q&t3&8_:R/,u :lߌ9P(yEXbD(ttmJ_ͩTd { .0AVvM`29նGrGm)B6d9ww`UΎvB:%|8LdkA=m&dKi|S \ܺ.MDcc}Ѵ @ <S|ܘg6H<70M|#5%!;#&!:-{Q $#c cU}LEs~%t1t;qiH}V2ERظ2OsKq;O@xFBUe#Aڷ5ݞ: 4j'm_Q2 $15NB5PܡV>W$}^irOK?TGf[c*>JO[goũMWnr&$AʽQ)9$'h9S}.*\BQ5x\O*BەŠTI* %h^8̲vWSP):>,DaxLVB>駸8㺇pc6p0ݶy9\OLOC|s4v{'eY.'~Jwc/>.dI%Kh endstream endobj 363 0 obj << /Length 1596 /Filter /FlateDecode >> stream xڵXK6WY"%H-PA+ӶPYrE) 3"lՖ+yrfa୽{"p/^ĒIohȉ'CEi58+wMv>&k,vQ?fqGN3SQLÌ)?Xۉ6*$]9ISJ b"8s9C>QWUE}pա-vS(;>g3l[vD3 _[HKF$ z˿'vy9n AV0ɗuQ6;i+$B9Ed n‹@p)pH:>%_kvo3 _~Xxc*/lk*:|s.2pjpq?b4BQDE1T #[ItWp3mpcW;e0^gžN<~yk]wt!8Ų?:Y.zAS]-%ʋܖ!->F+ u7fnpѵUCPH ~i!͛8g$ Eȴn!獄p)i+FsHc4`84VPCDaqԛSQhԦJAo )g=c3R-RP xw72MUmc%c ?2Qv +nU dRB9[7[] @QMmaa/DͥS%كR#+ҼYu6Yj(+`YH0~Hm ww@j7$Ȱ|_a+z0s3P*l&hhF]~KTMD?Qc%MCrzRBy<ĔP XJp5]W3fWA9ZHaW߅_>]ZpWXtQ6c錢/a7oPe neSAN.rIha.싸΄$o'F\E@R}`55guLjOgH'mRsZy{~S@\U<^OQɅ@W9 G&Zps x0rQSHsw[Z|uyv?Ci7ZۇcV]o#ڿb;R̾\\.۹U}X#ׅF_s+ >ߴ9W;uF^R?;Q[-C܈nh$N' aI4Hc&'+ѵԝc5 &/<m$ CPDASh B6;%װ"A an'.ʊTltcҎzSrtǺz|=ljz~p&<+[B3TYnUJGJZqI$>۩'yI楛[Gar _ƸK K%%A&B1g&'.^ endstream endobj 368 0 obj << /Length 2161 /Filter /FlateDecode >> stream xڵYo_!PT d~[06+ C.Vk ٕ6|t-Io$Eޭ/{x~0|U슮Ώ`D&YgAWNu-_U̩c5L㭔 y,{$s^--1,52ZN9Ν-uemJ$=J&1q~xf~Ld/Nc^Wx#xU~pqOy_^^v>m%PM4IYf1ApiRMN I6[TonEQPcqU}y3g_I܀cՕDVS=Nr>9$Q#y[;9A^6ny, x)QejZ7ir]kL_,eeu4%r$ ~ϕ/?qۮw/3U( kfu L~\P2Z.IvS1IU~y߽_]wRd R!PLLN"R/<2 Uq;r(&7@̲]3":]he*Ff)μi:Cq^GO9yJii处[!ӡKOq9KiKnj'',UPoλũˊɁkmzK\g]38ڥl&[FƿB8r7|̅X1fioDC.DCV'.< r6W#b+Ȃ(,U(zdVIC^ߕ?QA{?V *cgq~ ?S)()/iAXLnT`pE]ӶHm48&=;@CWD)N0+A"]rbCX_6R,7ftkA`ZTR9b-I] x!m LUV؉XqƗv8NDsCݙ|D`A Mb71rً~rtȹbH i9V7XvG~H˯[aRo=!SZs6'xs^桧5ݔq$ު뫢_ MWִR+z*qHHܷ 8Bb)똔 މZ4g6 dD"%yۋel۪*v}nEt{Q1 u WɼUҷS\Ыy&/ JVq]0zɨ~>NjབE~ҁq'oh܏~#;*rLd^y*#5j oXXh ϝ0oUݭ7o~²#xA1c5KT~G;x)HJa#L d#E~dvD\Ӭ'7K\d@1WKwZ~oA}x> stream xڽXKo6WXR{)6iݢk6zmo/)RKBɉfo`h| IM8LLX8b4J@9u[) VM珍̴yLf1η9\,*oC+AAXA8iڧ,lʒVQ)>"B˪Ocwb^r C+}3{Jt6tfOr}jE%r*/`ꦶ^6&X|hsod feVV!&Ijk{6^,uqEovNg0LwYݺio\ix]brWTΝHsiVI mB µ w}vTs˖뭴ɴY3pxO5/]Ppznfm `K`^.tsIx|(D$OA(6y+ 9YXJh]CG[a^VΓq]饛j ZzNUsj/'`ұA 6LmHi`CjUS;9(mp0NAaS'Ϳ` endstream endobj 378 0 obj << /Length 950 /Filter /FlateDecode >> stream xŘMo0H$"-CVCRV)U>6Ma5Rc2 b , aDl Q&fN( 8qLPLDD-ӎD.T7_?U&f{v}Ν"D$: wdiYp) !bOkL~ȪȊv̛nO7 ŀSai(m6Y1wZ0*rQ0PA},@zq;]b`$!NyfΙӞx==@҆JQ_ D G,L"粲7͕(MV&aӬsXn,}+ YT2mz։۫lwse>:7kY4 bDTq""Բk{.pDh-[%דH2ON;HTwq`[{H6to@E `r0!0q>`)b,F}E yGYs>8 F#wo>ނxĮ}܅ G:amaas>G؛q6v78 }|=#'X7|89=qvR endstream endobj 382 0 obj << /Length 1538 /Filter /FlateDecode >> stream xXُF_#ɜoiM*U+R#5}0{98bM>|3|q 7>Br"R>L8ӥZ#NB(aloeJ[Qy?5kw6a PhNC2{]TQV qbhz\45t,|p(@qw*()F>} 4#{aZpwo}m )צTfQڼ`ZZꦌ4AULx_YL,-w* ;fFog XYnZ$-CFK',9b #w~Ӥ?tpIDViҟNz:Mg dh(Q2ls\:/}ʀ8.]/ݛ$]//?mW{KjpT{~9Q8b??ej=y3d$+fz"*5jF}3 ;lTTs |KZ9e,K [YUƲ4j' GcD ׀N8:.~n>3}{9Z)2s3LܡAMhDQHÍ=jL7LxmJ-`8Q jh7)C8 jUhn:=T ]T&D-.jS8<.1W21)r ]mc\)nH/Vfu5m^Ü~㻹33=o^*4V?|O'iyLs1w`Zn,}%0"kf;]ꠀ a@ 5781wz/L,B_aNm8s{@ ]t_IMwڈN"8lyh7 WJg O*.Ӣ^I@ QOJ;K)ת4!M FkYZЭM>V cYܧjn}P@|VZPB_ JS_iTJYEͮ_VB"Pӵ&:ePۄF]0-4J=$nIMDx| f6!ncVyӞ"Ԍ!'X5Npq(CQ1Ȓ.KGfյ(XX/[euFFSfQw}q=fћx*}h 3x !%#,Cao2FFA>S %<&$p ;DpDq bQNNb3~BĠ DP(* `*]lՆ3 _Oգi-isn &<~B">A| 9qR endstream endobj 386 0 obj << /Length 1736 /Filter /FlateDecode >> stream xڭXn6}߯[m7DQ -h"@Ad,4 dɖKL:Q}zo߽()Aet0SH%\ BytEQ?o~H"$E\Iƞ)]n-uX6ZƈپK~1:;K? DB! s6եuS|p2RwqFCn7/(m+lڪνff^+VAr˹SKc9_Y=30O &R:-yf^6 HqOTk̥ԫ,"kQ볣O(fID/qb$ZZS89fޚG=g "Ԡgxx=7=vUwf2v|p%yjQN ʴ;m54pأ.;pvUm^q9+b,::OCr!.'UUXwz8a’OƉ/Zk(4(cDLgKw`;r6`jG!}xOƕ]'냣MDIDt=m񩰁qC.#)^6KG1-}#>&A>ʍ)+Ab('b.N*$'y8^v s vE՞[Pjzq45a(ܾ(69Gk$D ]#Gw|82PDEG: ߎSYa۞PC}s#yYoehK6=^5xL{3%!%nļ3gdl ͗GnUG EOH^ÑՑ!=)D7 !x.PZ0n+BzڪmqhRn,/oG`.@-?nr_`ϝͤ8V}k#:DVxNs?pa :<==>Ǽk۽e&S7ƒ*!ZSῺ\)o,`u㾤M km׾6qbKO ^m_$>+̎0!,&X$p`+ _bK$gh7Ygۗg>V]L;b?†R ʐY9@!E0kSFp7W2G@ Skti9])0Jw V7c|>ؑ;3 &[xCJ]|Ov ߞ 8'6}¹\C?3Ҷ34|gzuiL^n'gyw;Tu0ž,VRչ߰4 ].}Gb&.`yMؓFjgP]H.贿j_ yžcYŋE@03ڽuٰ#ie؋[  X$҉tqLIӪ}VoU3J}쏸|֗\7MA톗1qar>nMLm=sAo..i6u_k~UMvl5]FGpKlB h Щ|}q: endstream endobj 391 0 obj << /Length 1956 /Filter /FlateDecode >> stream xXK6WX5˷ҢIТ9udյ-Cw] Iɖ-gHK/"9"9O~3$-Ft7 1|tFFZ 5)F%7K;Cn%UhIu]0~jƕƅq^Ǖ`PD3;:;Pm60I2bT~iEir?e4&0FZoUYaSf߿Pi`綘9vhSqS5Г,qU 0І0|D(NUl4*>u#Mf~Ͳ`5LB&1K٘X$_@/B$;#ML !Lt9 \ꨡe ބ(hz`8u(lMӁM$M a>Ĝ{S6I"y'>ɯv&lwQ&̳<],ܮފ}+{+]_% hHzԓ}P|Mˋl?/_f -rJ8ͫq&I3$L4oy)_Xbu0Gޞ/TtBR@!(Gh$Rg},`]SE Mhػ  LW6mWs vy$xv~C7m\*l\vSgga RTYfH*(bO> s` h(RnxWf}XN w} l3"Q,g)rBp'ދ 2q48 Y.9RqX%Mn|1fR0p$)UZv__HxArʄрpE?]ƥ$ά }o'hg>A[Rʓ?Q)7q~]`}]Iy.1 F0?#{9i@]ճSGwN~!% W;; 1} /k ߧ9|\ֿGe#<<ˈXh X&1n60TQbD)"UAdeoB8_Z+ uvzR|@CSp+P8CF3P(2Z1}6—BʠD um۷-u)<\46 s G'vmM:xGf;2f@!S| šDMMpi1d~MUgP_}DhkDiT%"__q[Bw;(/1e Fq߾@~c:pR(S<C*+pD.R#lCnL[\gQspoV|4ǼEk&/z:* SgU|XZ>b+Y ؾhW4ZF{xW3hgJ0/ 1 hoۛW endstream endobj 395 0 obj << /Length 549 /Filter /FlateDecode >> stream xڭOk0{>` 6X,av˭A[4 }wzO Ay燜 %jBϏߖ٢ *3d!Lȸɲ$ןxA?.R4ˍ~ӯSF3q{s ts;w89;VOwV+q\f˸jn26{!Զu;~t%M&ށh HBXC4ۘ 3xtWuie7DoO$>j(t`خ9"JcЦ+Pd F3It1{(lTad-oxU[1(f},M3'5W~QS(jC.@dIls1(jCxMAд=S!@dK v i }zÝsݷncxpJ2x]B._[`8=1v8,CoH;ġg M,Ye24ZrVF endstream endobj 400 0 obj << /Length 1812 /Filter /FlateDecode >> stream xڵXY6~ϯ5#^:Pp $Em $YTJn 3$%Kc83㛡=gxo<ջ(s{P1Ǘa\:̛|G!D/ Ql4|i]VqR?g2^/fj[ZMoo e7d# 2 ^ ^$/9UYPQ_ߩ~攰Vq"L\o`K,濈P& ^dU&K*/Z"V/35\D@|s, #anj2圻rYLX>eYڔ >!'Fªu(8 5Ga(X#l-Fpa l=G@h깎2IG­ƩgV]c5\VDx-9"t agAox,upDƢ( aI\(?{_wHw5ݟ"+7 e4o/z*`痩 R1.8[Um8N}iރ*b!;S"sAlӪRټ$\qYfʊAr{ /qKu%xhؑq!=v ,Af^ [d Ec.),g ]3zyh D!R31F{U7t=R9NWf\W4!\iL (`38#BiU&eV͖G7BIxVb#v f2OXFn*./}W[ZO1[ 䅬 x$ }s|Åna~*9; MUuO 68+s?}a?FTyR4vUzMqW!8*~ZT}NTU@I訥/fhb)0hE3ܴ!Q_R UIەkqRIh^D 8%<&A7?O UЍ^ބokmȥ I*r45"FS?Z(XÏ/rWG7a`r9j㉪*:ڤk^+}PD)Dmi)&m!Cڌz%-4?TO.1Q#kac/Dj tԁ<6Fj u[}!OY87#1:٣6#Xy:?LtG*>M4 ;zqYгKUk9 OeCUkٯe ww| $|.u3dzD wi̪sJm/l,~c=v~hÝneK,?摚lT$I_3N'q@?ftcvG-}-rFKJێTP%sMKUP/!Hlt|Hn9|3mZi#w7(sH`GՃޫoԆ/q jae 2kٽ9滈FOfVc&XK9a,@t"d(ρ%a+.u7Sm7t݃S;cCW8<϶{^oЊ"BVfAa(gb聸fT J"cC 9ltHoG`cXO BziT'#p_]Ŀ& endstream endobj 404 0 obj << /Length 2052 /Filter /FlateDecode >> stream xڵYm۸_aq]@r(ZL{Ȓ*ɗ r(YMX"E33W:\V7ͻzHyzدfl&n }_}bX)K# Nؙ}ƴ&Ѭ$1xXX4 )!C:ߋ(Q/B˺Ciͱ&?ԍwe'}y(tΉ`#f1X98OdGg#`C%`EVCޚoͪo$wz7fs LXe4ϖ oMv.ge´TIqx!ZŀƔEh piy<&t3Tk [ /Y޳(xU!B Ujnq-p}YQGO-  & 3\D-HUf'IR߇'8Drʮ1n6 ֤pCRNGSchA"&#(c8Ȋ]&=F;tD2G$8F62"c̵v']Fztɤ'8 /tݴ8F5 g)yB#.ǵ=c6dvgq=c Bv 6P!Ӱ]/0 ݟ(FmJl(vʀƤKt pfKO ٧%\f. @̇Vl8P` kfˣb˪lo syyIuMvL䢢COY3PwYomsn˩nv&kyP-][|Ŭ;4~̶ۼ,Y:V` ڴ ;'yp&JSIPP+ zsePNcUC 1l "dɎPz1 )55.$%ؤ4E_Ndzm71ƒ G3Rn`у-r[ r5'vEk]ܶ$4YY8,fRSu]~[V4IgvE$Yt6e; %CnaRG18;%~Ov2qUW$i_Y%r`3aI%~AiM h;+le+\gk15xԂCiYey,kݻzAx`^tYv:tpOT VIڎn5P/.+wH.a٢CA؁\u)8Ec:6 pD}f8p# /Og?i$vx:aP*ORՄ}q7L3,J^ V;ɻ74/5]/{G<@F4kٚ!BBÅ F[{.{B77.5"2~)pq9*/YVt/.^70O,G^i縇U"n~ #nFY.I1hc(]=¦d2l͵SБ╦mM% P<$, fpιfp&)hpN8*;#P3Ù}电S!k2n|OlckaU^vwr&^ZӲ^坙~ѣ?*8d{?j \)?j?ϟ7(TF_ֿx_@ endstream endobj 409 0 obj << /Length 1838 /Filter /FlateDecode >> stream xڭXKo8W0Soڢ--Xt,-y%I Iɒ4J }3.>ELt"v& X% G"IV\z^EJtK<*9I%1&?fem[SϿ>y}UKdwU>K\9kd(Jws CsEH?$D%Lt#cR04o_"Z 0d.FrTm`BA2Dx2Vh>Kt.>fߘjē!Y~a5*FqU2q_?gRAx[af=H^k7տʵbB.>gx43Ctx+5KT Q-fyҠ`Y[}vHk0Tg'yCe([ÝH1"%OYUB# Evڷ^|R'rT/UȄ(۰VkF4:* YkZo+D(MIbIӥ2HYwdݘcs'_4mf9h^,zp6ISyc 9C 4& NhB>ť#ik|Qyfg?m0D;pj[[Hod%5m8hIT_m,[wԿy q IrJ&k6{ޒQv, =ѵ0*ƸIm\)GF}>;8KS @D 1wT!-j/S5Oki 䏚lV oCO Ip(q:1 T!!!@UAumm{.%;n2w;X%]op*YLZ1Tϫan;H`x-{L S/xg:&ƽU|Rt寁#^lj˫zz2NJE?FeӈU& @>RJ U RSeW0E|ctZ&%/8L`@-U\FJGu'wE6f͝#/@0)7ņ8囚lS :,G!vS I A/rݭTƿ co)A߆#WO#uA˪ŒQ) g}$S]r.䚱puj-s@]?eՏסqUv2#_9b1RX s@d";0H=+uΈE10 )r9n"{T#4EC!1zq{H 9q:U W˨6hE5UO؀%'/EVDu`@wQ%^ & )kѺ?fnNJgr4rZ ?CYP`}=us6M*MٚϦj[R_a/++v?I=Hj쒊ŝG2FP3zHF0r '`’+[٬\q )c,< c w95p|4VB%cE~?YV0 endstream endobj 414 0 obj << /Length 2092 /Filter /FlateDecode >> stream xYݏ߿B! )~ }Y E@.6Ζ\Ir{3lڜ 'Q|q7CgOϾo޺d)LɄ̔*3ڲBa8,:_^,5Wyլ?=|[%D8͜5 R}c5C׮|Ɖj.DXk [z&,E>DZgۺyw\*hɖL6[ JðRʼ?,˽_/(g3J+]0o)aY $Cq28 ŸXKqՌ(a)8[&]vFL\?=:S ~>).5[?=8 M/S閭yQjQ T1sAQvmfb~ fʊo>6!XɼsJe\ PPFa[?2iAl@÷V] @&͟j 'uw4qabB-D&nB_/vs;jvux,&n}\8HFPK%5@kcӀ>|"j"$8`z >.h(as^_o73|s&uSgo>7a9p7̖fF*(svzج֋J3Ǜ&i%4Fo 1RB0; icS?I$Kfx 3-AJ}/8;* g&х~h;6kv:>BKZAh#L -Gi{®⨆{4j8 yq4Ӓ" 4fLD|=X :j5_i&cF1.$ .\2CBS$!  ptDֲTSǫ>̮J4-cGҬg)l:{`ۇޅx&ƿ%tL9w?ij5|܂gd݃L.ݿ/Bf 4,i9iE: $ L"rٴvH cX& @ 4~ CO^?K3PyBD "eW5O GѨ@?-1(!*Sy4H[BEY+Ψ \ ͘4muHAՉSլ<>IcZp\H}d endstream endobj 419 0 obj << /Length 1587 /Filter /FlateDecode >> stream xڥXK6WT ĊfH-ЃhzڔMD f3Jki1=p<`]pόrHSږ"8ZIGqWx˜ͦ<Ϳ?F)MR?K#0G߬Yx$tUdna$77Lʮinܻ;-Y)$ @j-E˺A @uEbUG`DZWsp<҇Syii_^T%-wbwzyF'S-+4l(T룜?g+H:a×$9 "1d~R)Ѐ{QN]p>p~:DNQ-hpꁤ5}4v# (.%G )q9R#@o:=Ѝ$xI~[%T$j#5p\:DcK!?-~ M/_1 (V[Pw_mVwUӋšLMK֠ER D ıϢ|n #T5ſY.e?#h 0Wh#{na OOS? xz dܻtafׅ`&4# (e~8 $-8 炎`xKTNb?Ďico24t>D wbξpao}x#=8-`^jMzϨc[)QˮIpyYD4ЛnfO |*bŴRX\8e"y-x-w)MGib];(-`jsj`K!E~΢g8RqNU5cWȠ }TR $?1sKR$ńr'twNey`s(D8qzxr71ǎđ}ch vַb'yKFiw[ ;-Aڻ|x[a&@Š;9IY}Seb2hh' vۋ{T6j'SE5=uo=eVZo_ oNJ6SpkdoI@#P|Vn5ȞD b$M=t,;}Ƃw4Q'Գ B?٩;P=3 !l2⻾dw5 bw[0F˾y6 HAlb:N *, e+ "ɐжcI( 8_6 а@~!\A1tIIXL_kDɭVZE ZC:!33?1O|ھք endstream endobj 423 0 obj << /Length 2367 /Filter /FlateDecode >> stream xڽYo߿(pHQR%-{p@EGBlɕd'apd+n<_#r8"Z&o~yX/7 Pj4e/~굽]XOqi`ji/yi[նnv.`vfyr6zWM[t8 Vfڕt{fyWR0O^sE%V5jkq_ T}[GFynCaIOPb?X*^,GD$L@0/3~4?;B^_՝m~ah$"؀LiT˛HW(75Ex)!Xa - )P v icFB(fe_k]2#̒Ks#*׶(SJXWh7}EJƹ nڮNN8bGîv8JteܩʙNU5J.zcmK8](LdC2_{h5ٗUvp-MG_FmRtp qe  4ߣΉ#ϦiytK[45M@2vY.t…4suGu߀Kg੬_Ea5U3;eW|ꚳغ&)>&YǡRCB6Ǚx'Ãf|VŒ–G_]z,F,Ǫm;K!sN 2pb1Pu%-hZN4)@a~6;ZHݙ-O:y?ö}/q7]V.qWD+]˭#ԖQ1~e& / Q%3HGq.įa)K|9-{Gym2R0]gߒBgax vy)4#QCh ЬF!n#ډD/-WbbZ!¸֫u_/`bYZ]=wxKYvݒO_ɷ΁~,2&]EB QPBf[D{>Z2M =iCt0|lG0dU|b{`NnZ]*WmhCÝY tԶ_zA7}YxBIg=JQ񩇜RР9eT |]'k?#_6NRܴ޴sgȿVNќXJsɼ7[GM=~Q~79fݘ4Qs:I= [gy$gQ 38sS_pUu[{W=~ಋ>s t.~g УHc_(z/DN& &ÞJs$? o{Sm_ޝ}GG:I\^!.loM0Sb!t*@ M,D* ߵN7e:!z?x3f endstream endobj 428 0 obj << /Length 2045 /Filter /FlateDecode >> stream xڽm6@)Elm--a+xmmb.;;z<$Ѽz.~}^?ݾ%Q .4qt̄ԋ|)̥ڭ/W,&"& ;˕&Ȫ.-s\$AI[7mZ [8 x 9ǥdQ;&OxwĖKa[\iyEC|dvks9Q :2(;.#tfj%,^~^ Nj%40*CUA! Ƴ7җb:IܕjĿ|r~W@Fkid2 r9䀐Vi|,xWORZL&&mqxh~>8!I!_q Q2NƮΪKxC[ҶȈb ~[;5mҲhv*b}[G, /LzR֛ˡ!ERt;v"ݾ?1K GI<$ gK)14h}i]|u,?%lQ 5gաlm=sSV)J%9 ixncoL*qv%b|8&KF%`%pC('U˪6r Bu(sk}X]q@^| GQxP3%2@i]h,}dLCm*2P`T $ĥ-mvv]u^jtևb PtQ6mZoǑn.?] rtlj>Э \yZ?p&]\|-e=i\Gp^\˰#|@HLUfNMc~i-ugb6}R݉P5;~Դ^ZcX,*_mR8SCpei=t: v7_1s_>g_AYh\>L(F 9- EXŗhPj\--G\DOx=CgA*Q':s2Mw%r— iKUbK%&K58yrvgBAaGIQ؟OӦ!pyeFI1pc~vn1ʗ‚0,6mR1qTILE7jЁߐf^n -z[i0FpM:J0sֆD-t~"t)ޭ~ɥ`QK34 endstream endobj 432 0 obj << /Length 1850 /Filter /FlateDecode >> stream xڭXo6_ᗢ P(/YXe6`]EbaJr,;-/6E}~wEx,vo.z ъ(Tq(GBg\|xNEJt\*Ic5?hLk:nt4&Zj9,~ RP>Q.~{);kqvMY]_g~͛r}; рBL҅,c1bvK۳%c 70b**]'3pcˬ+7ۦMۮkB)#6n2 /$^#aKp")\Rdb4y7ФugUa_O2|vlmHȑ0($C`~ī!އbƝ0 b 9D6 +O H|(7n0YHt|!gKax0vQ}e_ 0nʦ6w/ϖ"Vi r8*ۭpݫ^ ^6 ®67ugk(/3eCHnΤ̬z]y'<P#$Xyg¡jLǢzc?IiNCM&"fX/L,呃zǶBp<\sv\V.͎zk*TQ6~ᔥ);P]UvYW[HRlZgU<31]Xv U:`'dycdj{>c-f W W e_,%',IETDHذP($$s92E8WpV$_bFFф~uJ' C8e.y\ԡ_A{LcmdLxjٳ"v)\O"cf) Zdsh^_&uƊg:<[ۇ,|mX}LB*RVzW u!P)܀ B2T0v 4hr ʾ*7 e5ta E}>n>I :o۴VFQѸi\Yu9ɔXL4+[J* RX#8nym`n$lwHwC1 \U\zd K:\t^r!c!YYcV) !> L,!_YʸC R 3cR[0<,AH&"OBASfQ7X=6/I>wE?}] e ̗$#\#Ԟ-q/HUDepˮ.=*=uqpdfg $w@UOyPEAיMyQ r+4b ^E`BxdbՑt'1$ez%3\:ڀѤBƋZw|jꅛٺclgyg|%.-ӭq2Iq : e.zI"y*=?kt}t%T!շ"uu5v?uJhs:!j_<_6}T;l!c5` P;{ {+i?L8G0ȶmuљUY3Q L8 m Lr7(i ǃ`Pa⻾kpJSjjž Q2} T֗R}鄑U5>b&M|*4I)}b'4x&a94G+@3ST4Rx<]x*et[,Ml>I?+q ףo/glO endstream endobj 437 0 obj << /Length 1715 /Filter /FlateDecode >> stream xn8ޯPQZzڢ{aFc!dlwCʒ$ ^lr8лBӫycAl=& ܋$"6͏G)4X"*A18ߙO\!BQ,jB[;{J- z+ lj%6FEXJ6nWX$s5"|wJ(`MJu}ibX,!VUݎe@ {Mkq/,~rݨ#Ɩ]`bVUސN#~'Tg nw6'9gqFZȆK:PEQUmg3$k/ǵ)%,Z\h;<7}E 2.6e{cimԨOfi&MYCdܤ`?4)@O_:\@n$> stream xYmOH_[j웄*R^N++C.^98ƄVݝݙycR;N(ßFOkaGp ^d 0ƠYCh#Z+ } y6 [QƤІXG'zVx y$*Y1YuTCa^ D2~%Z~w'xȚJ9*dvҥ|0Rdv8jR>SІxʇPZ{Ġm0-#;VV> x\`Ӫe[VTVK'o?8 >YdoNUacrOqHQ kbZ(R-zp8Nx(JS1Y&ķϖ5YIȬe].Ө֠n::ެ.O"S`E.lEAsYg7q]g7OndW9|vM;\+L3,'C욽Cd҈ۿ*5j<߹I=ϰvXSQjRR֥z[&^.s 5glWsW>>G3YY|y{^lIyٓzhx7MlB;C~$4O?I5E=.P>HdՎD?B0FUiR~%޶I.{[:icI}Tc&OsīGG(AnMvMۇK]vQ#h#qŤ6MNUq M]gexM i܆7]o}M|^: m8zF"(jCKQ`Ôr? endstream endobj 442 0 obj << /Length 1348 /Filter /FlateDecode >> stream xXKo8W)_u3[ַ$XqX+I})-[r"̓Coޗ_|Yx J"yGsy[,;fWRO_>څyijKZeM 4{X|9"Th”x3l H1MI 1i =/5g~f^7RͶ*}$D!À)\6 n~.kEɺƀ~5:XG ,-ZqTjd|ckoTgl-3I&z%'-_6NY ,H'[|N˥:@:2%A ]:2F3"*!uigJ;XVݦv^Rn65 E6nVgE2jbqjvz`{ J6/cRvݨ cQQ5n%8jF~߇}C>kW¢Py WCt˪aVkmqA1: X(I/{aO'3! nMѴw 'Q{s>4 6.sf2QgyleFb[KK(%XRŜ8D<-\ɵwN>ѹ\*ԫ9<=ҒcpOj[U5#OOBj\L/b`z2cNfTյa7bɈ8ZtP8! wc﯐NZ;JeVuN7zԧKݏVp/ •arً/2&[ Sj)pה1]^0jH l4SRz1xApLwe<uR=3vM=6K5,KP{v {mDw^eP3-ov\mbtpҼf90Jrũp A>X8C"ǞV@gZcӳu1h> stream xYKo6WȀŇ$H-zdޕ6awCJ27VX\>3C7QpDg|4Xc\^\ 3hX /_^b<5c" ȅdګ)Lm-lcxXX4m^g8êokJ16v@]&V|ZI"f_UH&e8gr"ؐaw:5$,KDje h$ʔ$):ue®ZXbmiO~{녵~]&}xx38b䠥-ɶv=ٌ}ƞ v\7-5Pqτgg+>d[o;Sf'<]eM{Ŷ7owph$ēwus]䛍[OE7*%1ΌٕMEj'֬x ҹG:Ve}*g1?Zl.Iєf3PRACVv 8M3槪m-{摭"9|\3y<#7P4-C J'Bƈl^US["&6mk.ml"1 -Nt{](ͣp۴cYAM`\nw$´xIػL^36}M_~^0(3q :C^y]\,N孹A}M|bW,Xz<oҀ[f$I}pv3"ޥ,˝E-)0?Xi:&xؼ "as-^k FڒR, ebލ 0H}9YÜ~?`+ui21ACJre+ NJAO.(MO{r]Y=;Mha!tsWϐ0TpngÎ_LӔ $k>)@:s@GY{lV])lO%uA#Ȏ~nGhJ^}ucG6yK6ƒwT5{7׳Og7 S؏. r7C-4#}<'p 2C`2KbJHCiЯQIIPcIt4it8%Dqÿh)n=f,K1Y'y$y2&>秳l:bY~q)py=ۙ:ߚa6ixdSx;-j@=_V֩n 'a=Xq鋑O/̉7bdYWߕpME߉f-$wd4^x=/T} R 6Mg%`|#libL/5JB^VbnaX .-K%& sRn6]}@Ԑ斪w\6nbmtE6{G9#| X%DAyK-c7Ĭʩ@n}5P7hCARg#1F I ?*9,JfmM5~kY+o'F7/97SnZ^2AGB,w=IWs+ D"[DBqҪK*0y|;<Q8O8KaN dқg7 endstream endobj 451 0 obj << /Length 1796 /Filter /FlateDecode >> stream xڵXK6 W PǒeYm 4AԽ%9xl펻3G6({Yo,QIxWo Qn$mB#Ar?ܦOgM[I=&\"f9 ?VYIтJ'ǃ_p`R HJwqE=''W߾]=4}&>fC }D(oc\gDow&qN"?~ەhHL]N)7]S[͙i1mk ]p9a a`A,J,]AJD6i"_J`:TgmnRZ L&j0G\W*C PNz9IUа#Dic{$O-@vBBՂ\,3yjkg/: YZV8#ʏ& 9ig LVcd @[CnvnV=T8g-@b)}cJ#衅)``Zq!nH?K?\8tVV.3߭ocQŪ Ho]p_HO.W@K{6s?Wf5LVKNbjd IZ Y 3@E ׇ6Ac24pC+}BN%n 'ѮPVBw%UGO.5mjU4+FJӠ 'S.)-$'&`j6xH:/@G[u *M|׿g+4)b:M6X4 攕\dwi_h:̰ڵe it'T|H)M-e^|RK7 0G rf$c(yGe[f)N#P͑5'n&aTI/{$_'Y|$J׺)8ɉow6W.U> stream xڭYm4"t]jⷼ!$@ @BR֦II[VwfvmXW&k.U,YNmUZUv|[rR__@XJG1lš^8P^ΐ?&"2qъ0J*%΅%9a/LG"i B@(r ^;\[7۷_Y8X$}u"1f/ 7">LZ[;MӐ,upo'IZ{`/&FY{1ˏS%i ?"?d)8\1 "7;o s9aRwγ[_qEl>` lsCAY4+t|a~;&OqU1VefK͙JDb7fp:mɅ*t zzq5jԦDkx/Mr1B $l hU6ͧ0!/3~ qE]ȁ*z=֎WCEh֎ty';ƖoUbca[lkpID'8 &= %9UY1B (\X.mh$#f`o\K$Svvf4Kn6e^C蒀!, YpJL]<׀{4pػgOGy'z~*qi.)%QT<¼5HM0X͎ʦ s;0mc'vY]kӍY[ķ(fYd{Co:*N0i2vb)dC\w)1lؔKϽwe$ck Ӄ]QhmD`w޴իBWqn=A[YH46s:2D/yq dJ 8na] UQ>Mm djKK-:ðK.H֮G~w,}1OW%@]WHe=FeYiVD8 +i< #*Q*epPJiq )gpuoΞNLrZwM|!MJ$-5*4'Oo3U9tA ҌM4~4g06P+/I=4# `<;~:S"GŔM.\ :y%fW>p_[SO%)TO$D2U|咓_WxeÙ?`GуS݃ g*B鿊8&`D2? @Q1(kp+0AQ. x=-d;AoM=A?9 #n$.iZˎ9дE }Ap endstream endobj 461 0 obj << /Length 1458 /Filter /FlateDecode >> stream xX[6~ϯ(uTD>[H,xgQg7h{1 ̰IoR>쯶+m^y"\mnW\,L*TZm/N it__ث_ҭ"u]UVrw-j.vZËa_7߼V!K F_x+O+ai%<W_ 0 *YݰXz( 9@C u}D,:m]]r '? [a8K)#nꉑhHM[۬j@EY[9u^d*5uR)׹؎g i)cEn! "6Ak/"mrq[w'rɝ;SA.=rdC}`^!ZvC 8y?${f(NsR(Ȝ6kƸ@SZ-6S ԜDRAٍf@ ~0 $)9/tfC1}ԷH.bHش$9IAސ.YA rjv=ZvA^ Gj֭Y4rǹCt"Mڠy1\_3 -=G+9D~x/ ,m&VqjUCqpD'X,>p9qeZf fy9=-iu'pb#KcnM.< uRX赈sM?I5p @]C~,H/X;6n@&Z&_2EXN!y5E9!7l^]p͒eԪQ~.L #_ /Uf/T=T!)RE2!{s#̳ bba*~y^6~(֢iq5+1^uW4W4 ~4> stream xXK8Wzs7 fCc/IjY"K$Ow*d:q`/6IWVyؤ_ߤowo~m2a6w גLmLHm'wVP |L)WM?;FE{8͎&UJ'.y CKO]57/JX1 ׯ=5c| ۢLq 0wgc(<01 `cB1ރfzu_HR95m@HSI@Pu`0䟼:Qm.E6.zȒ<¡N?С0ؤ0$~ͮ7[v5hȏFde0iJ&(>OGʞivDɌ'ڃ)}p  unVE_jJ]51^hC˘lnJ1:bco QыHLK5q@d_O`cqg ~Lki?S&MeفO;)pcJ˫M!RfU!cD+D Rn(D_ u>_FЖ)a״%F8\""\ퟗ/ᬬzY(>'[8: tLzxj &JV5EyT-K58#j#EۈwF%)4+4jiNgSqn( )3 as#LCB'{Ȥm]}?ZU6=RJح"R!!@t_ŧ(_pt?. Xf~99=S܇`&5b t_JM~XE9FxU95wTXS I{Y ޲J.>NB]@rڃyџr3cKi;*X oݺa )懁̽DV08"+٢"?W+hCg,$zj cj0DK*2b@'N"'恙;wԇQHgφ*WmRz)K ׯ8Ew"6H y]+8Z{"'.ʇTHZ=<4"&@5Sc(CO<-f5SF־D!XXՠBuOj$5Ѵ1]L&E-"V= _= 4B< 0,1~Eدӷi{$ю V3PKəz]ګ}@~78ay ^EK{c﷤O`wuƖ,{3MwnY*&#֪h񩌙1Z+1H 3uoUe'~ endstream endobj 469 0 obj << /Length 1830 /Filter /FlateDecode >> stream xڭYK6W(@"Mޒd+KH&5;CR$k2˚kpŷE& ޿y!_Xf4[$eq&"KELY.>Gtc4 GY͒?pֻFX2$/??qWJU?'+R&P,Q>L;a;?=y ? k7+ǿaQ[dq"$`AkcbջXK$Y,Q!s2d_ {q'qBKB^+lE8Y?W=#k ҋl28ᶭhOG㒊H z S*ᾪ~Um"M$~jI5;:~" oE}eM/Mjytz]+m^V[\d(1HyCO?bB 2v*c*bt \ӕ"TfI"Lҋ+40LocJ+a+<ͺz!,!AKy%I %-?U`@$ec$)AiR(no klԃΠ׬Dʖ`\5S! S*u4>70AZ~: 4X7YLS9F+&3p Q\DD(H,z nE1[>0aBmtQ%ESl}U8n SN 9Fn4Bwא`/Qf}]mUQJ(݇FDO Hr1: J*NW$Ȗ Xi'Ѩꀱ 8]|O0 AfLk:תqd'i<)joD9{'`w^?Fl\ԥ '|Vo`C9c>wf-m ),ӌPB@19^HW,#ȇiL\6 :ܗ}(ߡoݗjGfQ{>$& y"[+?hwuK]5KKRWD2L㔒vO9&k@wIR?жLm|'v:ǃfwED m 7)_[]`v Y!p*թ X<tak!6ZoN-qBpz;w oX H{ː*nڇ6p1|\ݵ rTAaYF7oi~. ]sUv@];)UZIc!^W{Wp vkBGnr~SMU(C0Z6svF. WχpCphGW] v'C6n*Oph.qk͇Y1 f;̸U zj_/aH< a"WM'Fy>hH:t; B(TXV[VTp ' O{4uhsѕH> stream xX[F~ϯ@(0`PUɪDڧԇ>0bmT}˜K}ӫ~{#D$)Ea ܻ6b2k]%4zXJfb]7fsSE-~1"Ĕ+K [bj62q-bj'a({`މ޷p߮dۈt{pSyѸ_#دߊBoY~VyzCݱc^} ֳ"N-]ڤ8ʋ, BKK΄AxcLt+̖~WU>,d?MvGz)߰GFIQ㳨;2eQ<ȧbTe(Jo ,^@^o1 U_}wYq#˅vYRkieM,ܔ_F8A8!# 1dQ͔ce.]BRhdnC}Yn5P$> uid(}z݆IRJ'@X0LsgdAoR6mӢ2sL4_ң2bDQ1[LFT==ј}"wc/q0+2I+vRmpbfljՑ(Go'ʅ5fAp(Dg)L?R6Q()AY:say 㡟 YmA`_JbybQfcە/f25 ZMLQ٘]mmV 0Z0eTL *Se^wUoD;ߝ_&HL29BxKN~C7Xfep_e5Ssih:.k(UTdk8 W b<]'LVm[1Rx)#ԃ i,]Tx:DG~!I_q+IT:qHWq@4Y&)_  :W{O}xeӭ.<]{PU0ͯ;F8H(Jmq ~Vo]^o"C#{B]lԶ88T+ S:U4ex"??.$ N\^g p9U"d=z_Af[ֳ:che&e>n;o.sf`is:u~7R3@R^l!H_C"l`;7B{Bע=Gfq{izMf \ص/*Tmc tBN o󗍫eLqLDtLjri8 Ѕk*#Tm Vu ܫBliǛQOQ!< ֯XWؒ/@~H)g6j{-hutvUתlUC>NuMM:$By8:L4R<[Hh &I %!%LjR;CVn[9VhX}^(!E2J_Ȇ4Vٌ6z؁Q endstream endobj 477 0 obj << /Length 1721 /Filter /FlateDecode >> stream xڭXKo6\\W{1.Z4@=%7I%ElO(rf8ofnWӻЍn޽b%4]T+2n ͯ?2JQLo% oLVThxyoۮ⨞cFw|CEY(Y`D)b$3Dgyr˕84?-u,۴gz>|k/za݉F|kXo*ˠ쪮ߠP~ͪ]pv1]q)xJUAԏƮǼ)Jq?K;ވyj|_4<\U`Ltu;b*$ Q0c(M?Z@s%3HωwycWy&i]nYґ$P9kѩ#XstυO89^>a}3 09(ҺCB_ /K^%պ0&e' "EkCjXgktt*j\[ u*yg䷹hЂ`8զ(H' tEN)[tASXFfqv۴O^{k7'N yJ&^PtBtqi`M&Lm5:xmeWXo7w$ P| tKi sBfIWjSOXiwv漉Whh,I0HHuOO_N(D--؃-QٛUUOg6C_X`_gY lrwT3 endstream endobj 482 0 obj << /Length 1939 /Filter /FlateDecode >> stream xڵXϳ4ȅ![220pw`rЋԱSٕdvּ)HWjVJVUYo=WiJ*W,)_Ib>[zC{2i(/|kڼm'>/oeh5ȵA[ɏya꠲L976TG{"`KΆ{ @CQm_{/83e6+T]ol.9^I,E';ћʣ͋oe0[rk?d= J8&fÆp+qnq<,5J]=X/MLs|_yJD24+t: fܤ4'B؅ .9En92k_Ć1zܩf['\Ìs4f 7 ࣼu]mU阋~P+O4 l(&\{9UX4Eyki<J|ٵ G+$XGXY W]U Q\Qm3 n| 󑏻|;ITBh;I]aL) "z^8ڷ3{&-O$!qiMN``pCU"z˃FsA4֡$0C>/!`LȘ^s8ivGyOA3KMDylcץ0pM刜_g۴ajY5B; >70&,#2c&"1S3WsZ -Zܝ(0fu1:N L I 4}nOKZas2._0BHF/Żf#`ñ!#rejf%b'xJNKk P!<ѧޢLR%rtp %VDs$#-9!d45KQibHqay V1o_=@/_Sb1Xh*o=*b&)AP[Spc0`EE("Fzr$c 8zv 1n0>ͯUu܎ΰo4 wS8F'Iw?Eagjɢ?^ AMbGT!~:pn҈gux4TXԜaVM旯hOUy"+xTsW*wuɼ1r }w_u endstream endobj 486 0 obj << /Length 1913 /Filter /FlateDecode >> stream xڭYo6_a(f H4E؃hXMT<}4 㑲(2%:wtv>r/|_z{L81lD䄞0r 7/`m-N7bnn/0vZ,~,޼›gfUDZyѨZPmaѤ2|2b|evK&} Ksܹv[}DJ#EVqVjbsS3 {njTu_R)V?.{ ^[d$J3L&1w~glU5 x[́VR\xA{1'w\k-Ŝ@ٲh =fNw"ᝲY@U_n<@Og]jwziǗ4y8O n"8bؠ#K/=Cq~ٚ%^UuuMNuE"]b&klF3L9Z&9*/9i6R&2  yM)vY4KoQ1*qVw=<"MBʧ XB&U%-V{v.+;CHP)X:d4 $> e*1^l4;wGDlv[!}ۄ/3{X }XvH>%4mߴ ۔6;$"t$&Ij\FtboG.A 둸焮-##z⯧AuTXd5ssQ~]LB@?8;o#ǃx=U-%No r'/ r{oŤ̫FD8v94E/yLxÉsuZo9n]7J~)X?h5*lvF~T3~:wnaf{6ٳ/#?t!O 딢18`R x&Eqzˑs;*q.lS^2뉅Vأ6,p6 n Xp)51M MHH\w0e8AJUU39+kT4&__G~-_~q>t ~غ_/4vxJS+@l:>0> ގW&j endstream endobj 490 0 obj << /Length 1858 /Filter /FlateDecode >> stream xXK6W E(-ZzHr-VW=v0wCʒ{4$gy- og?߽z>Zn`q[0A, ]][~{v7`w|bFO <7}'U<& o4E N V7 ܕmAaI%Exr0k\.7ABQX1 ED˜e"uf ̊yn,c˝Op2܏|[˕Y}MylٵWe6#qͿmPPMr50TYR4߁GSVXUlD%Ykմ'"Q@zmXaoNl[_C_qmYpah̗Lye]4]-#d3.\cf" ̠.SlMʎޔ[bJj|XZ"ϻbmP !={_Ы"5R;]iAS2{r v5wXjwܿXr g`O9uQC\a;B V'=em(厞Р- rŜcRKH:1<ܜqFKJ }W![d&(gIIV( 8 Tzz ?k8!4ңBRkmu 2f;!^4n[_Z'^0tc©)Fa橲5i|LUY wbHՕc;-WMRU'PTը&ؑ YL{=1ҏyƢgucZ`š.P5[~ 2(qj7UMDք+0@^Ti!*W1-Q1ZA_ARpbB?Jsч, z L(y=J2F\<&\z&NL> S:0CɓބIR6&\p7l{^<ں!Ayvoo6kpٛs7y'w]|,n$d,aNփ;LC]^AeNE ,\; -i䵙 @~ƅH0\hJO;/]i4VqS:<̘ ygYH8s=O֞R \0K]v=} 'ǖf)VGS F>?&;&PX6#)j̸'.OK[N(ϰ(D.<$e=醳MZ7r..i>L<$!++$'xq9QCr3KWL܉@gL-^.w> stream xۊF=_! ֊& n!ISRB M%#-fg.%yB^`<9s׉m^W@D"Ip_(4HXa‚";|_$aݨ槮ofo{yWMmvYgvi>ԁzf40 }ښ~gUׯ[J&G, "w6Ǭu|*cH7ƧѺP`1F(j0AHmu#8 FB&p )78"ap`! b>wS6w/O?PEsZ5e Х@NZl'cwg>˪EmZ_Na (li -S(OZKQ(8S˷^}tb03y# NBsL<(Z< M7Ή̂,q2 oNnj"c!N *ivG,J,47%2cm ]< s\kʽv3:D<c>SvG}u Go,=f3WVB e^^yabE8 o\:ގANnG?0 /k(No -0%P{a!uU%'ȄҥzrLk,Sm0k Au'7O0kkU,) HpՅL!DPf +:xcF帰qu:ð5w$aSݴm h<"0R:]~\D$QoE#*<&zM]BUYYV`1Qh/zY9ʏ`D"O/ vv3ص~f~G_g 6ZhcxF|ڈS/}沆+ʕC`V޽ ?P+;N[y /U}>k38W?;8ΰԮN]w%Ƿ6oI}7}7WQ]XLIŬXc+\FtR cC<]JŒNRTƥ΢$ѰM9gӗZ'\l$S;Kܮ6$*kr6?VWveE }YsMwIjݢ:fmvlŻ̳l; %9]a5~fڭ0շYmcQ%n~1T .q֢]n5+fudcRõ`bZp`H7ML#jufܧd/;V]?OhV%EĽC)/R)a0UF¾F *Ejkl>ka߾W@+N 6IIlbKYm3I3@X1<#wR9J}ap3Vw]Cll^ecepkwث^zy̡/}ԍdWBvOdƛWq endstream endobj 498 0 obj << /Length 1764 /Filter /FlateDecode >> stream xXY8~Bj- t<50ܘ%No;iȎ K"KG:w9x1oz/<HD6,ҿQ$. ݴޚaL591X@<}"s#((R RuU #ÆjKn|ѥpH QK]6=j 뉙~H G;[#sxȜ.6+,d_hۿ)f) bX \vZEPN5L^5|X]NI%ԌxNGR|{jJ!bHehdEf\i=rti)͜;=#w  "@ԁvi|YB.̨eppq+eVKk]j|[6\쿂6d- ,9`\uk\ؗ"\GTIs\ 9|lz.RHVm2:n:%iq*?@eՄԸVe1) @A@VR Q+Qg>uX8mee|?\K9?c ۋK7){l RC!ҟ+xk+ٞgݾU*qߏQD{a-N>Ğ v(>=T$:M 2O? %$*š0$E1x21(J䳯|̑9:1ZfSDGw~p<,t^(:au J>fC!!h˻j/O:mi+DU*d2\Q2IFu%&:r!YY=ʙrQ&1|zs1 V|9F$eUIJ@W5~aQɁ.Qhh0YNeGn]y⦓os((;C!Z>0[%6~=d1T^rM hC@p\wћ4Sr8_c`jD.;Te_ GOr}C_}cE*l3̥zc* J?{O [wQܤ퓄Z#``0)z'P'(.8"ԂzBTY`qjc:2, CK!qitO&3(`w:iUͶp/}zOj2WK6g+50w0J? T_`Up6lLTŬP0 u$P/DyO_e!MAurnv(}8z/`O־LJ3)';L/nz{bk[}r Fx/=fpJW endstream endobj 502 0 obj << /Length 1899 /Filter /FlateDecode >> stream xڽX͏4D3mA!"CaۤJR>U38iҺ4 833E]_?^bS͂JN %3¸\<%?uOX"xtba-yrhA-RX\eUޕ˛n[V mdYW;")6&5ZGeɀB`u=6_%g )6(dG57uae)'[UhU=iepUoumyGN-(+PӝdΎY484m7-t@` BGJ5K4΃:\$}p˙ lɸv Sh4.Q‹.x{,ݶpsIS4i&D0ϙ;fq/{|fҡóKG?CWoxy$nBΊM9?&T"D -0ҙTˀjF m)Wuٕ5,~Xv~H _gR/!WЕss2ǶlzowS!HJ_h/{I(^9 RꫝHYь#.D+:KPnWE-:%."4mv \.Gܫ]6bOց:nvOP-xe 2 tB6=8Qxo|tie=šIVII|瓒'U-)Yބ!\3詙' ܕ.rhYoW(j;&"hLjY$Z H ) )m_sU`ha]{ƭ2&v+&N(ւ)zÛk͢"6MN$\}7þ\ yZ _EPKa]?V | [1NX-X*>K|w(:hN!:+:5Q@=qc` rՍa36&#}=vz\!C%ve5lٗ7obG{([Ac^*(YvSW{[mZ8wo> stream xX[F}_EU̍Ke(URRcljn4o`l]Q΀g.gXz[PZ%!)񨢙6-Brɪi4?gO~GLx!o^<  T.~~,i6ijs;0B*Rx6R^/+k+<(+~ TIF~U8+UX&]!27Yu4VFsb+D.O&Ĉq%ys\jt?dF>s8$l6)HOa6l.V-KC:/3_mq̂oa`ⴀQn NmEnYff:!v s$gӸkMZɜS4}̛5wxd|3{Kdz^J )%;v;hsrmwطse?jTif^<`y"WzDxB-Hp8smb+4!ԋkw6˺7=ڟxHo1 yLVdJ1{9:.a<þV x1Ϗ2D--HsQVMH KU?h~*M|Rp0-Ni/ endstream endobj 514 0 obj << /Length 1830 /Filter /FlateDecode >> stream xXIoFW P@43D/NЦ S @M%ä7 Wm9'{ j«|s[&WL^PU*$L._*wzHR7"i1ekWQym׿]80Y>_|P2܈ɔ6D!2ai?ϨzV\br_ZA($1]S93\RR'` 2S!B T#dR@k?"M]X̋n` {Ku]LvI^8޵ & OߠbzкqV\vkťX J^릟{wt3LÅb͘AB|9*Ed,c:CTs4G"SS[}=EE!,DT-oϻ@g1=cV, `&9/r?{I=V倌YѨ+>zE,|)b8l[Wpku^rXK>1PQ־Qd%Ȇq1X#ch"D-K/Ypɾ.=ـK0[/ E83j?4 A*C`^U[݄ЗS J aCU;` B!T{)U D`2[Ag$'Z~Us5㿢1(,̛2)t-*a2vcSEp}>v><蚱.X+Z>v E[H$`fb$9Wy~'ˣ`6i>R@T*jx 6;q9O5ˤn X=30\$;7oLy]7['\mhNw=2 [[4Ѽt1SX6\؈X$CGwu*Lh!ҹn@prZOKc4hQ&=50s]]-ۘ[mOWv,JzٯvZpN?2vיE[.}l,U 0&)]۶'y.vT>6dTuXLmշ {y?}LȬxzHMD++m]؁Px8m0qL.H^B7U7,!`@^z٥g,OT7"o5]0|LW:o9;3PHOR2Zd47m!9m}mX9 bޓF{>'6Igאт[7&m{̋G^7Pկ]CTu?0a@'ZmT WNHlgMW4#j q>?^^پ̐ MugAqv=>51:UmyOj OHP ^/4X(3}l|sJ%X V[#߯v".UktMk]:7Ì$AO;oЇL3$`uqr S#Jmpg|5Y%KF]C@c(f(J{:)P8ܝ,G-C17S[i9ܙemUN[Gb,?r;5x$&[ฐ<)ח| >-Oy}3ۖ(_?~V;K_.V =-VuX vAgqͲ̡L^>ո endstream endobj 518 0 obj << /Length 1786 /Filter /FlateDecode >> stream xX[6~_(L[} '$f;ΦӐޣq.ðЗD>sw' |z/w?I"Id4!!!LL`y;bA$u;nfU2nVnvΨ t&pyZ,r߳=Fr_u/~fHxw̘9ICD@ݪ/ϟ~W;T^=8B48 vYa \ƙ{^n reWkk% ƹ u50 gZC,ke#~:G4 Z'nmּ]xuf҂f>BJ#z8( K62q,ýoD!NU7:Oo ,=|Gߏw ]=`_&G}~»2[z]xsy\o5rHq:<.I>hh;ڬ1-F7!F#ą8@L3p(74M˼Jb>2BU扁x B1a7,pn1"P(dwU;*pwbu`0H+'@-.iws#R0a4m 6c#sDԆ߻+J$5 Rd8 L?'_B뱴-&GLQ6`YbHF3Nǜ{ 7XXq{hrAnWAެhWFTMm+=Xu*Dg;4 #mT\jH 9䚫_ p>ƹK"^f[S*ڏϽM,3bj|ݿ*_үh.cprCŁ&>IcEy7qv2I$N29|Gl27\2S8rpp Lx5Z[+ƿDX;ai6J0aVv93> lvyٮyWC Mdb}UzUfjِ+#{y`;]]g"{GX%uJDEX %(&NU2H*EsH̳^-^@mط,R!¨5bO  SZİMsm;t=m1t[ܐQSsܭ}Nr}Y֊QS9ު4wߨ%ݤwM⭈ڧr2i_FL*뼮Z%l j.x@4wܾa? { endstream endobj 522 0 obj << /Length 2105 /Filter /FlateDecode >> stream xڥY[oF~ϯPh:WEؤ"blG%); ibyp.|s]o~0ɘh҄ NYZ\G[ q{0!S {ugOUm_m<>p6Ǘ_kFI▽N$ YL!N ;&y;Z -7~f+n3ݒj75[[Z Pr<91eGvⴷEU7EEcd';MPD%$?N݆sb8!ɪ mY"T>9H8Dpb-E2/4sl?%hϿE>T6٣nor망BɄ r`O:sMp`j96Wy / ^xp FFAHﵭ֩B,/BdS^^z04D=T١)䲀cF !G׶7!γ).#2 .${[$M|XM`Qc~hL$kGiR]3ʋ6lsWغWMSˊ$>8:fC ;5D&b\gW6Ep , 9`);5Ǫ9I(#$(_cBYÂz3 +h1_NDJr`GɇR 0z)oHI_x[e]^܎Jmr̛ vqQAKK)wa: RηT¨%tYxTS̘"RQSASܕrVO?.n.\&O> stream xY]6}ϯ0 1#~SiE ,l>h,--9{Idz<Τ[XqxyRl5g_/^/,%bjv{? a\nٿ)Z{=5iӚ!f3_.6,"3m&8oWUkvޯ ɮIqm&IX:c$oO µ-nL ;v*ml4/Pt( ~[Tsx)EBRXzA9|k;1=a X0;Z [0ߢXmVVF)wm-[m0SѿGnؾ-(9⋂p:ZnE^f]?̼x'hiMK88hPd9Szl>8P`fgeδ9vugNuc2`yXÓLSJlW3)tK&#j HMtgiD1ɡ91Fr&Y yo|d8"^ZciZ4nvWn5qF߾ ,h |L20=OOd2Z|٦gːjkd.!pn)8ue)h>)@e@]~lmmnU-4}%e\ճq=Ȯ^d$>@lT>-K,#E8[0c<-61r ւD a0%Jte[xaE M +Itfޭ幅1Z*l]dKe,=@LilI,GYd*ll`f}ݯ+& /7ARt:ٸྃ &"8^,\G>y WWtCv&3F%&@<T^~s O #n:\Pb~S/ܒ{xe] DcLg7(3$pWnіLEc'Fp8pri) ^n0xKQĩ&b:;bs/ZWZ+IJK4O76$Oy %0ﯰ0mkoJn<678:VVR8gK?yY$ҋm]uH IJcde޽M9<}`pXk1 4l]d~N)dמTC>ViJ2/\ۃЍ4aE`s}sdb &of`J(A_ڷ#lv:MۑS{Ye96'xo#^OĈX)}FMg)S>/r6Z@Mtbch¦H7h@9lCPD=MN1t'6t4yi\ =T]\zg_zVD_FşvT_iB'_7;W(`*#(L|~ңǞJzWxfN|,/䦨n} g1V^J,M31f24TMvZ_M nB nN$+y4toΪl~qdޤgkQfuN S&2_A]ij4_ZE,E(t*/C:3{*nC,Eţn_.; endstream endobj 532 0 obj << /Length 2370 /Filter /FlateDecode >> stream xZo6_ ĬHItAQAh[%L% e[M\~`_+RJn "a/V(6u YMUeu?=G(edJTmղ(r cͮ-O}\S!K͆Q-uso&6465cO2 ȧeRɎLyeeV+ZG&aQ~D^o[ I, kd0j$t@]A2w,_~G$AIWLRM䯳PգS u۞h$Z]Ԯ36zx+4A]5okڎ|Ppf"s4Z)^: daQyK}9B/F(t=NC_&^'0$ pG_/b11䕉˶!Ф/6Jbq㞖Ǿ \0[UߢdX/]Pr i+YSI֦x_c`7 kY:a+|$ v-ڳsT\=ÔKg7qR50YmywɷZe% %[DMn^ k?4!1~\eB}(*Mb9޾N2ﮆc1x!ƀu= S6禼'R̒dZ@Va/5>fҐ<]<W KKBNJuzhV2<` >@ G/sWƓ=8@`$`oFiNA=e?&RFm)WQj!T;"("PNGnm u(.xDu^ 8T'f=#6Ypkϟ2igy}UFKܔթ fwvnG,Uqw(51]͹ӝf9gS~)t2ԼRy(>ݹRyw.g(Et 1eОBcz2c(uPDe7a/iY|3+[<?!ؕ:ϭ`(B$-ɧpi+GsDž €cF,ިhpljA$T9̫EVyZ[РKH\3ޫv\}B~z3'WgbFM)yM^?W))]S %`RYkh@ (&h Whf2  '0fatc窰HEh|KP5y,ǣ}fϩjObvDt0 1hI,U/ %!qgmkR5*4з]÷\mpG#dj-/ۣq*49k1R^ bIfN! ;h?g(r7}5oH? 6ci~$rK#^8Mur0Y^k_\Dn*E;cb>J{Π&c0g-lkٕ Ø8CMj3^^tޣ4VN;]*1 yƁI/g{.%<13mo0r~ݍ}s@SW h78]2W3L[ p@Q> stream x[KsϯP%RCkO&SImrH|تLˬH IT~|/@IW6s^ Џ1l3Kf?$~L"y:aIdƙ@zC^?o Yo0IQdGnDF'2 nUm"1D7\}d"LH#-B lrk+nKy:ud?+OK-zRHDur!X 9[d$lrN(" @meSDQ "" </YUk,(4HK_c|zSUX9_[e-)Tój7EU_W Yk? !∜S~gE>GDeRD=!N;T)BAl d6Y:m|\01ϊv]V i*yj )$= ׬ΉՒVF'/3 8Jdԑ;&oG#-D3:u,#ju4Oyz)C18 dJV'bDxFgxJ&;H{gqҝ@UFP(ŬްAG}g#nnFo&0]8UI:^|LRXѴNSi#Qt!_]jU(eE-Ę[IA')Aə8wcUg٭=fumAD p_"Ieԡv.yʙ=y{4q@8]lK 04m9O&M~".;0 2#w 6ݬ|E$Y$X{S#m(E" Fv~Ȁ3om!^|#IHJz ]Q)0:$y`q.(eG{192}r*VZΧG )2rɇ؟$<#ZS:>PF!{"jaB:Nυywa#(;_k]qY[1&@ : U gzP*JT AefʍۻR:YH0>q(x9@:Kmr.X9Q`w.'DXrȌ+Ok\?)!yQ_0M"Tll.Ye/i%(o2ğu"s_1Wש|*R 喝Z?`I 6eӌ9[n~0\j r9M! JG)gt[yzluء2_SL9)|[`#{]E|D[,z^v\ono%;aZ2H"J^6'yh ƥLmu qP:y⥝'1>M+2*6&Vhc m IC33 *)ʫ7hPr g'h8e{l\w7&|pa)ˮT^ruJH<`ڛ#<̆zu}>˘P6]s>0iH~- rP2~캲 Fq8F1gcL X[($ 4aJJr2L$Q.&/\Ls0#0<47(k BO1並L&oyNbGG- w'VOSA&Ӗʔ:Ϧ&b:#̛VC%˞ "+cza1#y=uj4R+ ͝wnrI諴GѰl26$]E;pjo-u޵[7fb^!er_~ewuhlV{\KW]q­S0=#*}dď ;+ endstream endobj 541 0 obj << /Length 3023 /Filter /FlateDecode >> stream x[K6WIyxe/<*[Iv[H%q"iupD Fa,J_ ^<  ˜X/L-2L*͋w{K )>a77PR}7ҖznDE5-8[Sf9'.I6s/E`Z v6]V;aZN~kt<k #ڠ#ؑD`< jIǙ.n̨Wm‘4R'ł.U<ҿfK3Yv"HUzSWrWW^惧CXmezOyzX?4GS|̫`}$ W"<-mxΣ1i 4Y.ܿ$%A<wǷ[͊>~1~0swC: I(m+ZQ('=[/ӶYL((^՜E9"F_?n w{e)~k ?4+"vRg\’=*xq/2eExܕVݛ?x(@c(l1[w^?ik8[| KW/R(ZW;$*ܑ# #qxR_뿜P1K**˜T=Pwu=(JfAPR@g+A VF3b2uw j͜1y s%v:Qj o@o``d.ijn Yr%~");rym6e֥iu.UEӭhЊ|zƍ/%E\0@31怐!Q =m5[N7տīJ ;AG]teI&Uy*\ ׉A(&髝bJ!| Z2<p8z 8!SN¹[ֳgJr1Wk*0RܑqN21s||vLgdz?>7@zhɉEl~PF0iaPvIcP!2@ShAr.!ȳ¹y?ItA,@׳˓B>@ `B GRrgMSv`ӤafM$!j4bH:(p8 pz7狖l7d#ŎS:cu6wbOCE^40MrhV1u7nZ.t[dHsd!Jc>* h`q]9~W-9q&N-hQh( g_ qpg2Kq 㐖YaA6%tq|gK<1`U@͞71Zd`I*F+cɭ/(HJIBwº> tHO~|]4(wV n7I.Xʄ8@|b{@z2Kqh>÷a wWϪAO{P+JWj@.^D:)Ǘ U;#THExJL:>Jzoz@CR9%BLb45c1ۓgɘJ5%8eP*7Fs:Qis=d&Wm,xDgœC'upHp02 #F%f}kg6W&T8[q@turi[ٍ㥵*mrykxL=08i@W·환R m \ZgԆ P羏H\R5mΔF}jȷHډfbpg6 Ex4S=8To4-Α Feb^eqS̍Q8 [~xUcT=ӽqަ)@#H]Y%Q-P%vRvMcэdS@ZYT =ԉdy"Bf{HNJ}HN.)BI !Fi|g' ɚИҋ#kj8y,sitc*"2639#ޝлMW'xigg̠Oj{>RF T]dH8ҫա#t 㠯]wm}TFjׂv'5 ]Ԛz]wP_5Y,y̧ɶz<_i 8J# x@hR)Uz3Y0ѩz(:^$2)Q1l.*:o(BiSsC6'~zsL; =$/~I<)VMx_!)[J}G l4/}Ү v=uim 6W6F&E ++co+RpvZך!E霉WK{2r@= 1NU YK%CQhR=MRY{8L$yAwRjw6Aclʘ,w12Vs(j4_S,#OLRz"1QH)(RPJM9wǜa3}z|>o yg)6$HCԙCJ)'hϮ܁0'!l \ ߸qHgM_o.> stream x[Ko$,Y*udldivW^f8)̴ZFN"FTOJwvF<㐻ݏ÷ߡF,Hʻ~|;mְD}*H]ݽg]/A]'/eΊ0zopVlC9y&Fy`=zVA\>JKN8F} P3>5ドv~rm]q#X+bCٸ"J+% j^%3h2+sMDudz؞AN:ͧۇp#{ I=p(Ëc|r+j`0 >iބV^Hj<1;-  Gq&QukGL  Y8ZkūF[%jv7rHε/Y$ p?wCH7|$?O Ig7ϛ]J`DQؕkLcMËtG{K{$#GڇK#}"E=|+B2+fd4.*3%0ߔW_ךk\=7 Z|V59M ŀؒ)83˚`uIѨw_> ME7 @t3ʔOW<87V ȢC60Uc6ȷgs5~zy{cRYXc[)IT0jP6[gl IDh&eHH*.xnR)AqrZ緦q |pYt⋭,!%ds4_9L Ghk75;=_]޶P 몊T$Ey."M`GcbwmDP wֻLwj}##GJV!MW銢@&5<5]"qT("SjIm,ml) < fn\I}3f.Lݰ9:rhAnDzYo}Zŀ!N=B%u#KD7-k!RI#}<*ӵ96&T LSDzy dL(*S/ӟ>Hp~IJ}&MRIR}d~{fF&OjXԶF(qwԟ|Y.Hjguþļ hy A@NЁqڹvU{tΏ jaqG2sTPR3);To_.77wWד ǓvԦN1a< w(yM;T9G[齡Pj.f|FyFշ"%H'BxS(<,7[/lLLD3E5[Hsqkw ~շI?Kgl^\6Nj˥$wq_[I1_ #6 vlnU^'M%-9pҿ˲[PcBZX6ٓф 'NXQ(=c,{`(hhKS+GM/Ye'ƫ)5N31Þ&1a͐9^wa_ӇaJQЩy(8Pp%iesZ9`(o64qy'y!-[i_Lk/wyX }  x$&ъ> *l tð17|߼5N;܊J&BmY:-2>I`O2<4 GփfXnu$:#,30@\J$4jc٬ YҸ+R0>+FDϋ򓆱Lk^Vy)*86`Nuq8[<ĐÁpC޼9`>&fFMRh}WRYmmNs.>iAy-NKZY4cNhدJ R4E-1G29^e]N|MV= N'2I U']?=f)tZKg afSϷF};5v6oK|OC>R&\8=Q_rϣ endstream endobj 550 0 obj << /Length 2317 /Filter /FlateDecode >> stream x[Ko#7WQ9|T  H5Ic cK$gv[ݴZ"iɢgcvw}_zds ~ws@Y F6L_Gt9$(~X{7r4kZ. ͕Bi=r{lw+$+cTGR0BE\y-hTBu3ywLo?6RC}80(4eyc8`N$"`@o0#2 ɞñZA/sVJ6%@;(y ~9=>ͥϓ`H3:x#Fx}y>ܥ ov7.cjv8Pd3 L2LGtF4$Y7? Oɹ\PjAcc37qO-tKucHpv5~ON %#mKBOeAXA֋ ͼ rBҾ_Np!% |J\eg_BbUe}۹ XtYzp;TT/MȬXg p4_L]ߙ4YP@(uaIzW1<odcA u8}EV^j w:$S|qp)`{=-(L"5oXΦN keߵcT%-'%,l\omH=wU"~CpS5ŝym1Wa,O =>زmF+Vc6weUg#_%vh5Bluge `MFdדx5΍+ΊCŒV_D؉E +ȭk+S E6vb3~Rm#޶ͩd7 |R`'X7: °aBeGl֓q8;n(1l{.%J8!:-vDm飴k+!921ѵ`QaNJ֥'k8.PaYH^LT0u4082{9lНVȴE<*R՛VTIy[!Zg>W$%XDdCp"k╋d@Gamf -w*mi8xjZ&tz%zVTD&6;3)RF?°tɀ0@E*7F45{?j$L`P2nɒfrwz} zC{ |{3kNq}EFrr2[*y@EIs6du{xL}fSwL3_g^7ex]['hܐF T9I#% _8Uo |UնXIvz8Uowy? endstream endobj 439 0 obj << /Type /ObjStm /N 100 /First 881 /Length 1713 /Filter /FlateDecode >> stream xZK6W^hÙ!E<@ Mm=A~Cۻj]Ȳ7M$Ԑ!eb\xKdG⩸*e+ᙜ _).CT̮j u @v1% EHrn%Z,⢠ -LV@P[K1+.4"&,.VIj0`2 Y 4p%5: d3FQ"ahJdQ2hZj  H"+k+$S@Llrr)zHqxeε^1g-Y4кZ(hbpu@H (`StrKq"Zf cQX'\Xch5$)#a((:I"'` N21e2w QOd3HpͰd[e04`p0Rdt1%i34ge tU-T,u%[RLEQ\M5vggjy칚Aڤț 욷i0M˱̣Gݫŕgӕ;:z x碛=E%LUf,.W[ϋs8b8\aa,5Y[OG~,՜N(8DrBS6י.wl٫W-Ӈ_5g/f?Ξc˘2bӎ x@q#zrVWnIDJEcVqiLqsC6EY^@Ddyn*'pvCt2Ag005NK5w!LS sܺ?̶Z+=sJ.+vXO>Ȃg8%O^axaLYWfMSaV* 1d5<gc0sw0Q؀wGv+sԚfL}h8 vu.vb~Ɠn}W;ì w{wy?^|N tHv^E'Gbz cˁFkQޭ̮|qje2@ˬ>titϪpTpIgt̓y2{8NzŞpx;.'!Eǎ9 ԩ n&<ݼ'}wôof5GLg}ve_KC-nm\zm JDY\{5fa=ynG +JksqU$K kg)ldxr\2K1 .!8*f2˩LE,M섭m#(9ƍTS6`soۏm~}1d4IlsF߼J!tD/7`{|h j endstream endobj 581 0 obj << /Length1 2216 /Length2 18036 /Length3 0 /Length 19349 /Filter /FlateDecode >> stream xڌP  }p nap]wwB wwrNrY-k<92 (ucg k01YaU,Ò-@D8 lNor [5`fdO ȁ jbaHl" ;w 3ss@eL `; dt06:mN46(-NCAkdJohHr0㧦Z8@ /yCa*8AN@hlktP|,O-Ko_D'l m-l@'qYz'7'Z_֎|CC kCK7 ) ɑ/ ѼYDdcur>Q [\+[_2LTm-읁RƼ`̀N6FFFvNt36gw;No=@v7@o SXOGC , `4f 6~Lƿ~ImL@bi) Q͏JSXcc11YoG:ȕ5)O)wA%z\ 01b<X_V$lmꟀor]VWdm}RNo dkf6Z8[M,--Phף@|oelp|ɿ]#lA&m :8þ]bx2 )0ۂRo ؿn `8 A쿈 ~7NS70q2~#VoƢFoiqqFo>j"71e-0ߔo%oN?_NDZ]~g9;Ab|+wqo-0w3f ?^?[3lMofT۷&dvbϠ?Z~dC:ӛǿ;m,z7Ƿgo~jv2w7N?ބ:z| }07z?[ <~Qo謹o+t.̂y,kZ\GȷS<~:? B%RWf9%t"/oQ] .={6AWl~zҏUn+8!SzRz&Mc̉v-VS4yv[q]t.R5Bǿh<(s4 j+tGXHBOurfv2-lwר{IXs_#8¢fdpH|Jdڳ]ՌDОH3-|I 4M> l?:Qmf!C՚tpBB2ltQrҀcd]vk.[:w!^_ltV8FO bЯ1Ǒ[B7ǝ_X8΃h29SgmU!L4'z3[KOPXJᒑpS_S|G28OA܍Z6z S;Wq3N>Di宲\f ~i9.&OuH+Ib'ϐZ2 g鼷by5i%~jSUв'-~:h,8Cʞ)GI s@RR6rI5 X}pN/Q֦gΓ%_ I zDRhuV,+?(ifb;Ԛ N\AX})X^'F k2\ARyWڮea(v p&J[WM$_)18!LpM #/jG ƒ%05?"A%B1p*P=bY۸2769lyNB%{i>K$5o-y)1 -׹^YWe˗ZDX|d?*#4؉F_=9NƙCUVBdڜXNAYl[cPȽkǖш볍n9!bq&;GU/#r?Q!Ћ>mV*ֹ`,J159y×6rȏTWiV~5آk/ 5VTqQV)vN7z]!ؿfu$}4oJ^0ьۑ|Љa]Sg]w=7s?~uG JP إ *GQQ҄䤵^ǁ׋-Q;ImMk%RoUhhTD-m쥩DŽأ֟mC7$n֜7HfaLbh`hm;;=.NnM%0qVby_MBp}"1P_Jd61E,m+H5BE(ZrC,2[:ܪ";~Ц59fz'>m #6#HN[5z(H6,f4N;om6nU&{kHNk9QP- (?~5LFfK VBIM W .Ҽ =O.%[N|/6<ͶSĞT=ŝù6M@Vn73ޫh[l Ry`YJӒ%Gm8.]'K8h__vh7w-/ O\BgṱA) ב38}H}zJ󡭗 L^ Wѥ£5u `IM yf۷{:Je}=JU`99{Èqn[EʳN_4&\/Df-Brky0`!]Ģ?NF>v\Ez- `^[ y Fu:cG5ڂ3=V1R笗RF5?T$ZPiC57swM+!o!Rpw**+۠(o&Rw|Sr^Si&w:Je~H&Tkћ=I0utqށ 9\Զ|ohmܮ|:U/9] YF~Mr%U?"*P~ZES9l0]uEAVMnf*ۍ{}jQQEo!k Ȕl2G4i]%QhCАUق6Xdםjdy)<8/5Y8,.jc|0k!2K^.#⢷4/SMgk۪hu??akƍD; 34Eד(Wجt~NvS.Я15J(Gsߜ [r*h1&-`_Hd՛6!݀oY}ܳb(LN߀az!< ;k \'"fܶF0?qv-ޕ+J#Vp1/blkȏ6ƪ4{f}އb~'Qw*}χ$3puwDޝ%N1d)"[&;y;҂>/Cv !&bC( .ƀ!Nq8gG= `:ڄ@8_Jq-xϖ$e"ٰ2K->P U"D~w_qy"âg=rX 3Ʌ(Tֵ{tCVsb%Nh${pz7Ʌl6DmPA,i3< %QlܒA@U.J}[bO(.oHῺQE)dg^s\ ֕y8Tɇxm 8YxÈun#J*!􎐈k Wx-:l+YAMcʨuŠ _AoE^a3;T%nC=s^N$Zr5n_y^/b>+wK/ ^V7/Gi4eZ^r nt4[6m3g'sqȏyuv|ෑ풕u;| 00FD-J/02 6ՒYiʪt\z54JJ5Lm x@Af1T>ZKUXGs@ =u O>ܹ; 65Mو.]V.J:##70iq{@͛MG4.߄"\"}N..t0ZwcՍ2 p,j'1=%vpzl /g,u kIv{fϾ?Fڎ HB Yas99jOo0qlyЈ`` (1;BK5ԓEJFF2JL)hugO/yu40*@c']/~9O6g7GTS IJӢ3-Yt![ ԔG.O_:Ĥ|Gl y Bb #G#GLA% V]ޒ*RW~#PoA2(Qr((v6+Kt. }LVvT(V7GNE|'*6mG(0ƸWH([(EikfsXPbwU툁)ÔNcƐp]Q~ @׶O0~Vw)_p%sE,lKL ggXQ"rnqrѪP\&biځ+ cٝ`sU&#Φ,@*M?WseyÛnDfWG|NAwwECAӄ1 ,0  G8>lj Ka5_u%6iډ=CÉ;8+2M[1 Jq뭿m8UxrKyP^fkRbi* /;ra"- 5%d`̢:>H~ VÉLR8c ֎R4&38}hŚ ›t0X{ PVՃ ]!׽ ٣ߴҨ}&pZU>3Ӈ׭a NbPcΣvWt~DҚRFYL ̌nmk2 Uh CբQ~ɯ %tC.5wF|4-戽Ppq-!idEx{[U ԋ舁JHK%嫾)乃A 旈x9Q^H1g`U%<;Wt C6R{Djٳֵ~'_#ۣso܍j1Ÿ:T=% %*E%+Xd[+a[N䥰Ef3 eRQh{+Da9(lL(@L=%;/%(56+@1?TA&ƉU4K;8iA镍6xoYFh{Іq jtukEMDXؿDvmQJypSkU~jVBv73ιse.EԞ6nIEjC,Xiwxݓ$]Qjg|'m>B\U8M1t]*8j9G |%ª>u)"%M"IުðMƏ3*+*}WXK'en>M8vy^?Np^ɴMx3I*U䦩8S%Q? ;wvelme1ht`1)sfFm_h&K ii!4 Z!&#/q6q`1hRTq7gr;&GHxoW}(SDN u{m1}37=tia_ie ι9w@tuI+saS&fSnEigHFt!h+"hքԔGj 0FPPmB, E4F~{C|tzp2ƁQ(Oebz *86U3QK\~${7X3C xlV!?&xř"P.W!,.F# iJK''ctyPG1[j]<\$J:xϨ]>5m 8gpO=unw3nQe-a4)k -%^wWWM(DD@R-#uViy)6?[9?[tᨬ} zlp|X3!S;QI⤞[[15znAPr!{*cŴ*cIuYE5 @ɱ98T)tCb,P>4qN`Ĩ%:IeTQ8E|PR(}|z}~0?9{Y6-〧D´4 v> Nm`޻ nJM1~xIƤC+~ @H嬮n=&ŘӅ JU\>(UЋ{[i]Rϗ=R^B87W9ϙi5z^ݨn:-kĂ5jBEbdx *;5=5ܛQjԳkx!|ݼATg6fw#gIc2W )ʻDoWmE7Ws7@9;ZkqY('= [nUЛCwTtQ=vآCz6 PU0vƢI#nDKF$sQa]-[O4wZ899uwflP]`QN5Fg o<)YN9XPM?^ώA|y7J7Q,4@. r6K$zOl\ /S7O r->E2L|^Kȕn YcW5&ixе+zPx 6e}Hf2+Se+m+B( rRB}" L՚p:ᴆN({&'?Eu- u)Z'Pud!+'r\hvVR?u:o,JAT$~'L$5;ds-'BO侄>y M+@)&C|W2 L^_AeyAV XW7ݣyв@'*^TVѧ:h@/qyi1sx2۲r9V5m-ze0 -Deg)gj*!Jv v,:"ΌEKY N(1OiS=zd1ϵT:/Gy9cQj-.7)$9F<٢=E|4 lh?A'_\N( -Q^L17p@`w"lKZkLϝuݸLϖMe'Fjmȑ/@m,/T`imQ fYtan&|&(CV# CcK>=f͇S 7dž°DL'r(~ p1Xb^٭ @Ii0ݸ&/4 ?.+GB:z1os{լN4Ш9v\l0A:nQy2S`^IJ-'mcXbvp ΪG!t0lo gYVT? CN"JWNQJ"@3*Fz_j)c*n m:hB&,デ]O֩/ sS]}„w {4cM7|O&v/:?F zSYwlP8Ex k)4P6a ?H|\L}EH<@L|+Yp%cDG"Q:^K WWs쨾/nJ3w`ғ-s ]LL,|^nvWrk5ؠFV,yvzBFamH({HD g%gu\}K/$S#s^] ⽘$c4bOAWeP<W{ϷߏĶ/)_vPX8C#G1\aپcMrÎeո}R==ݘq./ PBvu& #=m8vpdM tc'?yu-> aQ4=?/t%hw^&봝U> ^pKBtk18^ .4r&4YN<_~uX,>G1Pvp5fUS~`RA;^&pgD=p\ $_(s-=C4;dBj#nhI5 '4#Rj콥n,fέ$h; )_!GrXTn!CPe2x;?S0,.^VKn _8 ȿLoX&8s F8i\4̙KL $I,}cJ@DZLy# Ue'#(rW:9e54 Wn(/dLʞNt<=C+:()P6xZ RR9߸2Z}W$gmר܌֡s&)|C j)v1dC6Lpı2"@`) -ۛ * Q2Af-+>=R#m|𼳀1*K"`RʒdVs_"z|M}q^LiL cF}O<ȫFWA[̪$zku$Ur+YQE2Z)i>.1W.Zި'jwդcZ's|Bnȵ4җĦn-)κP%)WU}!*\C6KhU iY>;nk;nm.Lqe ؎RbVA>*70>K fТXܒi?;rP=مcfPٵ ^ SfY9B[!mqz@Gup>=.o&EED S7J|5v<8lKЪreBS_m:Uɮ_a12C/'l3y%tt2^ؕ5:sPW$Za Vʺyę u ~C2&ʺ#^<`:5.BoKܼ&UUBf֕ J8k_ !މCJ ywѯc^5UA6ޓj3_:] H{}d\R^)7{N`D8ZXcE;͍T,l1MR˃/RPZ%g@Г'"?#^j?ǝ8[Rs6T@~m6NZEDԋs܊JU۠ Yc~r]Eqvx~( ¤[*VvN|".=inHzNc &ܠ>fn.d&`eZ݈F rn uՉѝ-z09!KW D ^/?@nc]7O,;!Gﻘr9a]`/td/ ?0p[-ۅ'h:M Nb(~ؾu0^f4j1S*k;gnCI*@>xRw *)H203zm}`}[YՅ C9d%:ӊؔ02PڗєJNw>@yu,sځU)a_ gֶ͛N Tۄ 2dSO1qcS|,Z-u&/|mn3a~)SbHmC‚uFSpmfsޯp x, ?oArJ\i|!qtK*]VlViuW]^_r8~-+9jkE3Vna25!1lX#ۯVf ,1ª-r>S, QEɻ! p4l~/3e"Tg$ ulդrSy4E;Ik(6RmL:$Bl* c??+f"FZol &GAn.ĉyl6:wGi2H'3V%3BCʏM-8tictݲD-|`K0 u!/g_/?Q#:SZqG w"1;A 'Y(|uYɰy (A7MO*AD‚z9BH^Zd!R&hȩ*|xGoxsN$)M_qR[k`dMy^~؇3_q=ߣ|Qw Tr(+ՉPVf xͧ.E>JBӈX=6,5qu' Ee_)4$vռ>H4D"""!g 'o0A18,vr]E_ mRs;]J9YI%KT*cBAzz5Acŀz~ߵC-ĴBؽVlWTKɶ? L7H3_VXYG쇏az3:zjh*XF|/1)|JVM~| [/@݉ bKcɺHKxB04];Xd7tܟƘeո_CϖE^H%A*<FO.QsG+l)b &}_bt2H?J#PX>(aػT;Ua[x9>yQ4m#g%$"WN[|cPl:}]¨ג[ 4t񁨆j=1p2`ij CSSn}YKkA"Io_ɀ1IڗkuꟉu&;Ř54hx_$L  -]Xt;NQ -;o[*!Sgӎc(~c+%}O;D.sXz $uFTs>UM3n90v% ,y=n@諢,fhgҔ=/iktԌhΕʦaNkҮ_U1cvM_ܱbXmS0rYLN=.*-Ot6@P=>[hBCyְ9t";Bh.x6/ u ~:k8C6n-;sĸj}쥰ʯ^ 27)lgu^W ͩCs[<+^/ޚtZ{JT(6~U4.w-~sqe'K.L\7CaRP(a?f>FՔ3Uy;0v $,&vR}zgN9sN-H];CB1V2:W&:Ac|U#RAN[2Ӎ$K cGCWX)d_ohO,/q rKbkQ|qBDW/*sQjP>^,-2)TXRExsnj+a'lcw4>X,}ɗUqb{;WB^2Z:Tt5@:q'CB{H2C4"XynG LpPN<+?^5rto#P9'ZGW2D;_VГŒqq=:#(K=G_-}{sR>K Bx0-LүJGb@VմC]9r~q\sHt溋|"i4S4 1PZD0;*3gXq-}t>5Iq.WTw=XCc@H'GU(e{S&3Rs!#w I+2PC埔0{I]i?[=XTz( . +}kyQ-~n3 5kRp/II2 ([Ft[L4K[6}U2lXK\Y50WEm:ҳb[H9n GAghgYޠfL'I~C_paa sﮥGqI{f >O_dc^'q^l13G]^:fz=!j2K 4uQQw7 woeqfC"IΣWvgh^Kd'T+XWqS/<9+CҊ6KW OA?kȴaµ#ۺfb© Wui_EʍT/?Kћvc&3/jbuBD 4 1ƅORòWy#lT5RLt*b>q/f zbEnYcEbL<o\ԝF\Zܶ&cU+D0Qުg(P*HջQYTnLv;,|p-R|4ҭ' m5tT3HUN`>YbĚ[/r(N>1nI.br?g HS= mI|e";ZQ/ch~d/+ϐ.SyO ֏Cnm%ɇ7c?w :HWe8GUB BP2Fؔ̒{M7㳂xŋ:a GT&gYff/朣R[7)Ҷ˾+:X zoOR=2$K1]f4`d*q(cFGWX*`yGӏF;u!j=[;N8LLl]]HX컉oItZE.m:ڥ)ant-gIX۠H^P.,u' H2l|8@멶Rj_C+9O1rs%՜!'GéLu>q#պ\` Yj)͋e8&o@@c=}D3*&Mw S#L)3Mts787l~y=i~&N%=Ā&ckа9biP>ckbfO%b>Rmi4N$Q  -'C~ռmJ&%7E%ӃV¶ $QBvZ"lf[&连.4bi/»28EXuhhPR yϒZsak_\`ȍ;LirN?haJJ-jI~.S UUq!ђjCv{iq`Vڍ?_.CFqUnf[{@'لr RCk͊wT\b.?h3<ދWs3g 4z]=`YfR<΄ XDT1PY\=7܁hczpv1 ȃ)̷*n^c҄Cpz)|{fib+)BxsjL?[׻ڢ^?5w xrWEoMG ~L'wH i"`g͟y Os$Q|,6!Ruɤ^#n$.l(؈/E5'>Xiχ#enT}%j Kd J#Txa-efJ9Eޟ3D+'Ag`c~{Kq>oh0\u/ъg$Kƒ2MUн;?;-Q{r4X"bp$#A$0:f Ë.USHdb{O^0'v5gń;<$~R̢m+ @ewQRǥWLJ(kYJF:ͨwt3GYZVb\g+f 9i3W=iAv"XȃٓpB15>fՓ6s!uޞ)I+cjP]UdKǸ P+ ɓyr"cꃲӡ%$8DYp{2nV䄛!r]W c,u\q\Y723 nm.$V{gb;aUh,Q+{tD~&CeL: JDWKSv4YPUN%Q;<˰ '49ʾC8'q{` pht@nm˶N˛pCyicr_QP٨Ri<CRv9Rf}=aBߤ<%P}w" ß,vᓨYvA[ta'슬ev?5I=jc1t~Nv:Uf&+leI*-G 10lqV嶚wf!]Q> t1&|L̤9$t᤹ͱ~&&4 ,HCb;r |C#}yaQlf:"5iЬ:% Xi,gkC$]Wӆ׊$]GT}&ݜELe;|<:t[G/.hOG Տ/c z&}.$ 痲0 endstream endobj 583 0 obj << /Length1 2211 /Length2 16083 /Length3 0 /Length 17401 /Filter /FlateDecode >> stream xڌP[ - 7иw-xpww ̙Y~XAN$ncHD `b02322Ó9Z#'W;XsBt| lN&;77##?6Q@ mc r'u731u|G!_!+! t4Yg4Zm @nіŅh@ocoOE p1s4(@ #_@+пÓTLV(;Aw!dxP|Ym,-037ܿ df/g-`lf |wtu2Z:ؼf@w ) с/ yoDA}wcZX۸X{YEɖA $%ow @ %PqK-t@^T/gb: @&fA7sh1t'W1a SRXAcfc01p8^Gh:JY.O)3@o,y( 6#q)+ߊĝ,-G2t:9o.X_Su߫+lciuR]6o\AF frտ``cbd?2x>g_*oJ1kC33}@b eg0% `/`0AL?  {"w??שGQޣA"wzA >?;'{s>?)/?½7/d}ofk~xWhN?;uNOdwW͟bޝmGNͶG3+{sYXl@`Z=ӟy\MAh;-G83s|o?{.8w$c~H Sς:ۿuoމ +~qƐ'g`}G1i*:EVGdD B]+[b7KD/GM!a gxg)Rm?d?i}/{6G0v Qtq5>.a ]Z  )pɔ8F@_?Ioߏ tyw!TvJ@QiҝP2OaʹUZ G#er6?9*\ ;BoFFqR%A.P*JAgL,y#W3)*xr$uxeXߓ7H4;oMshRT_]*.kb'67E (զww [YАg.-P:Jڢ܌݊6 Fmn6bdLfDs~u*̄z64AwtoR.b)ݒ,p pQ䆘m&BO2tU猛\OΫƾ&M&њNc,>{s0[8CJmzn'[)]I.ZS3&0:o_J*X,:5p6QX1ja*Kϛ7ITzy 8$x ._rqu3CzrhJ ^'xУR6JQ1\ũg2sx •+%WqJ͑;(W V+u>U]פֿud jtI3K2Iu9*Nws_jbˈ9X#V{ai~ T sZ"AX6c Y7w#ʹsjfqObͥ<1o돰WF_qne2W'_k Grn*h[ZD'ӊÙTCO-&X> pLjm7wM 8QC$JmTi[ŒF&Oϋԍ3#r&6z_/]oypSlʔ?0!o]AV9bQ%*FZITo"qAl^ MI&A|u3g]$T@b2bIk-JtĪ bj#b&_R`u~uOF8 %cĠpLٯ'[oe_2hiӲKo(Ϝat"Pͽ#ާz^Dx. T kOd|KH8˴M#@5_nr}{\^{f;S} & `YM!Ke4Н)Ӽ>_ХT;bX [|@&-W%p2io|-QH茥u k[f[@ۺ)\_㉖sψ5y5AבAomݧQQƃjo,H]ňtnoHBT}3,%&aoD%Rn#K3pGvA 3j:R~V5jq鄨Tbab4פ?]CS5| e6kA{CH<47tsnz}/*yhSY+cB<Ա=(q Ҧ΍v+N:tZC=kcQ,X"JҧVCax|J` ʘl<^qC,; p=h]~9lF(56/*1)Ê>vx~xkUYkkfPËw=tF.dqLF0Oqşes D"9^< h,eF-R堐?k&O,7dRZٸV7'7*Rg:mv7`V]il7%Ya`yMe,S" ]N"'cb<2TRCrN;(Ƈ{ڴ&Zͼc( q1y8Z7}e#niRH ʽ&Wz)XD*;-5#8CvR!q`NRtD0Bz-G:›q2%ܗo$/r bǙ$Ƹ4BC,[I߀Wa|߶H0^ p rK׬$ 6fnڨFb~qE`-rTgo o)IRk $j[ ]јLv R,#L--Zgi@_΂Syf.{Sn/Fio]gCӵ!A:QgK;@_++A;[YsrX=:w9$~M7_K䬴H7F ]aHx)}z"m [8QT&v2l^wH7š̽Xm T?v`@@"c#hdu6f*;RfG=ʽZCnX0O6z1sA {ӫsHާ'sXf^}19bD^{)΂lZU9Wkah%KbT?R;ɈϝYGP,xqTC{"kGyY*Ըm2$I3ҽ͊zmqcuBv_SxrWh-ԓ svt8] Kgn(V ^&ȭg30aʡ by_iڵ/IVIv (y*K&2wdLORѱ S][qBefIN!ڗe\1@d ΔS.u>H͆Mu)\6e]aƞ,q6I%A#E R[-JH旬ɘc<vi] Sv=euӅAɴewI9sEk5vB`JSdTҲn{c>QMLxOhB a=*0BGH+`{S{sm~.Xs}# nj `g )?G]YL9 ôb,^'y}DzU'is`m')1GrfǕft\]#RCu?:Iy<Ҽ1ב p#(ÞvW|!!8<#F" reCzAH^#E<P9$71Bn1ڗQ)=Rv  νLN>AX?onw@0X gOzcBf#Cgca6GO`Dtk(s$PQ ǔ=ir*ZKʊp ,6i .@5ʢCLAN]Ag3BF~z!:, _k,UoJQ^i;"~u3ݲCc6c ? ONJ;S$oRos}ήǵ^ Ap[fhuPޤmd|!gt<*+A5>HNs@Dji<_se&mha_˙g|* *Hs.4Js-@$ؐnO AH2̭_ !AҦD*-&fVKaw76NJǣR'?~ʇUeՓ_M]j|6mq}F}Zw >]`&=5VfܪFDo/.2p$yH4&IC :$(hެeiXcfS'[2 )O2Y<;ׂz"@Aʳ >{v)Xµ}iU@fy\:Wʣ+iزo>rHZ ]z,)+y%2t{kIbX, iqCe|})lN7 ѾjgL9YoB@6-tFD =0BW`o*zf8C !"F򅒓AjkDWYWoP0U]rnzIS3,]:eѽK8n)pB NS}YOrMy=z)xNCGy o>X+0q> rh͞Ĵq|`p3ϺuAƛwe5e (Ozh9a@ÿ׫KpVɑb[qm(D *0g}_< 7ϛr]SnOFM7??ɬٮҦmYvbVt2R`kP -#Qcre5iL(Ij#L7x, <׫#.uĮb-Lgؘ"8:,r4w w{ۈk}eU?2әaT@}1pi` 팺&+Ԗ#,;J/ETG:OHIl)P(T~irZXqAm6("/e A- /hʄzeg^]5!}yřNe|Y} :Il痲IC<,ULP ?SJ$ANƿpM|E{|'gWGô:Lwjج{ ??v F9 E _ׂŖroxTndd2yAgNZkjUkW38]z@IXM]eCpQF3p1l '-+\eMQQ`KW# SJVTH0 oЗ[iWGwq(nރ:r Y?~zHW@MngJ7@vtͯwtÁ_nJ[뉾w`O  *wf) ŷJ$,bj>}YaR& к. il$ G8_% yT|%Q4 IqL |2.OH] kRdDW r=͚!ЗkƱ8ur-gPH|rΊ6A޶nւ95_C< 4Y] m{䌘cdiП:@ǥ%3}+ę7U ѽmm?3+?$wZ|DޛEͥHLcC/:uM#{1Yf Nj48>CZ(c+ymzdgAMp),  o5V V,? V#Eȴ5=+[Ϗwm;]#>&4d~7o93FcM-x1٥WW~?E惘Y̋k;-dyrXC)I T&;##URGCJbKZT 2?53i:[ -`i7-eY@)`>ڛT=!n`E*MRiu_lǏ(ntk?L.}A$=XSx(k&W)۩$Lu[pk~tCVOSsqScTs_=ec"Xg#!غ|GU_(H5{>1>coqJԕ<^qWۮ8TrR֥L;9Y72| HK:E!mAЧmӜ6'eޏz̜d^[jSkeZ^jF{׼=K.D2RC?4$l;ջj`  &$ꘁh\'5Bez2hF~4 eG+*[T<7uɎ) [P Is$LXsnVjC(~^\;GKy33 S\P% V㞒+Isw}b#ؼzOCP{:}a/eB2E⫑-CG/QWM;񛃼]5,Bx4hGـ3ߡj`WFe`_8(Pgb ".^z%MCn j](,XPo#$I;.K Kl?w"rxK0w N-= Af!y/%9θז8i(r&s[ E3Dxfe*U fC뉯3/RتNfF\\_>\5'8)0)6Fu$V_X1Tt$B }+!ö~{E v 3\`.3C~H5;Jɫ ]Еt>ݩ[< qqc2bpG^%= I^vu`ԲJ^WDycQ {XVL3+?7FZázT xV:D:>JWzæ+!J֑/(uqQ[v5B4V{ :q{|fW#ڡd:|ғsd[(s4! &w/ 9{LM~OD!qO֧Ժ ܠܴ x> Ǫa Qz K(Ɲ'SxE82D$K0a\V z7v) 0.EͺG:7@7(a=}ͅ]͘q oU2Ha,"6[#0,ŃU_E~-&DU"nA^@MjW.Jf,=n _ҫA*dMSFA#Ұ%p&-ߙ? s4j RWN|L5K#iUѦ 6)jlX8^P53ux˓TaHx ӟx"&mRlX.ZʸQS`k a;gCF`R*oy5&_E0]/ C[%fv:n(NGID (Cqiڿ#( ɘHe P4~Nl,0ohNJ ̶1TMbP)bX`W ꛱H ]U-rxhiLn_BP;B8b@h^%mI#Ql(ϸg  8ʒQtO";*ҘuzM䃠L1! #e\,AjO>4?6zT>bp?0vp4Kk]fiwq#;4F8ڜM?.Ih^ޱhѕ8oڙWW֑B4*7UyCD{~uBm;_>&I ̄mv.,at)/-lRz@Lޓ#:ynjD%z4M ^GMM[Í&UͭI0 kAroz $,a@ 6'72q=9 j_!zvm>ӇПxy}Bn@y':)mLfx$hܼ3)j680CoLg#[ǫ>"r_s4?!}KLk*]2 n,AORS$HT ՚EzeMh՗evA r[=R: &V9lGDZB(Z 9INv"Gɻĩd$xA.>SH۝`IjwͥmgT[ ,= kb;6.2 "PKMO8ޗh#cEpڽeH"ñq 鑿x$#w~gAhBҵb[ qƺq?{y渐p4/*"zU9O5 ^rQcm󛰼+ԧu*%'`dZ 9W4`kAst^ϡau478KiH<hE,%1vh?<׃H/]QFS0E)Oj#V5:_:e x #L<}=>ćF O$,pވ)#w\>V])|Wy'`SmcP^;4؛  |Oz{Fž6([*ӫdԬRKPH$|V0 Nj(+0VU(-Ǥ4q촛=}} c*;V+y݉hzJ~NQ36od4j'--ey-p4z瓷IqDb/l1HO M"b(9Or[^H1fACXM\w-X0猆 {;ǤaT 2 RMA0 j'X `OU5A^)7'fSwX0/ђ`OEid .EO$t#),JpV~/L=ҍrv;)oD[bCe6"%u]5E# : ҫ6B=rVuqK32ZkOޜz{}>S)kSz$SKT:$FÓ\姻* )oRڈjRs)Zccކ|q*_fu 9' 5'.?_!4+df}?FZx}ja'CWIno\ {dXﴯ@t[Lio͗ hvt{fWF[7=LPSͿhxqYȺhaՂ}BfΜSoj,b;+ctO ZݍY ^8I1_WiƙHDFimWګkf% |$\yx4SVRL g9`˿ts*0~\d#9/4UqvBGJQg8OQ7w_Vx]za)?n𬱹Dgcc}vtˍo* $] |-ȃt 1س_ P Y.v<52r;6#EWoYLۼ[NwR\B~Mc/bs$ yY [zIoacKμgzn1Tu~z-<&V=I QS.flgv 8aC1Mrȋbɿ,5+ y<>aNn&0'ˏNiK8o*o/Ý6wIfJoԁ;nvX"^#&gבJ"ˎqJ軎_hV;&^Xo Zsc>RMv{ fFėNMUL&OM>ku,V} S]3 M&@SGnzplMٗD..‚-xMW1c_!t6@lܻj|y[vt%Xհ،Y=*h"ʣ~-LPo^Np)e~&x21H*m{SD&oW RJq)͚W[.x4ͼh}?FTLXJd%do IXdv)o+r]ϘѪ\X{ΪGb N T_N^es\H7mb>;nW1Q{t=C/C3̫Y&uEl<_VdnbDu1Z72]/1U*_ 4;:T=OTa]Ж W e2(Vݶ#0c  9(סD;#X7xlنK e~ e& ,d "T]oiO--\5ͣ<ZX]nXa1P&rZ4jƄWdtXGl;5-z5dE4QuL{ Ua JRg 굒 4o̙tSh\~uӜwri8nN@*NYiq'p󫑼DÇ%.9062c4x"J0 8nG$ FU siLu\?A3޺qZU>"Ȉt!!7f3pr Ux*ڬk\1I^ h52[zXRp֚{7Էbq'xNC%hݴނ7CQPt>Kn`Oơ8I J6mIY t P.ICOy/sܓ 0:H&|2ZϦZtA{]g YGJ/HI&Աb&7B?RDi~KWFb|y[1bǼUegt)9&(e.Zεb=A]hJwE BNaf辆hvQ{cv7RAJ{/׎Js[y[q jŬeӈ*U-F"ԍ^}g.N/D,44q:Z^LA\%GHh5B(2_,TrT|6]0n)ƈr*V-qɻ r*L`o.R(>SG$ISuu*;eiӼjNn5Ĥ{h }1\tkq6I`$'gGJ*J|ΒŅ7xɛ>b?+)?MAU1zE7:]q/Pfxk1l-4z!؈b*`Fǂk5mh_-W^ %x߫+3[9[Z,NA(#|km](kۮ <ёV4S -B{]6Bel\5 lꕨ_?zJMұܻD"<߲j)qw|t|uU+Jwxm*d"z,y15N2f²dن%@^ׄB8JhY,dV%d6R׆@HRXT Jk,DpFlkEaDKN[v? SqByO'*.oSCkQBۚS~;&lㆉn)[<@GOT5BV :v=d.v0Aϧ[+;wHָT h䑊 kmc1OpΙ4cAQPϵaC3 `4bؔ;Z,cU3Q>]WT s%Ue8 QpCPoho|ٻD~χ,L5Uwi]陣88p(D=+lā_$9W l׭DuT;0qi`j{h]._$Ӟu ؓ(1;Dr`vK#BB톷۠eDQTC?X} i*CAg*-Prd|3`wû* v2ߦyUħ׋$:o<|JK@jySɌ$eg <>e{_4Fy> stream xڍP.SܝBp'-ZX$Hp/R[q(V@q(l9w2|gNCKjVB`\ `Mr#A/g?H)98fSQm6x$qԠk_S=_K+u_ kUla +u1[XjǥbY?^S~ܛN)Z`|B qďH`?) rCGcs~+ D9 a~P7U#aP$h :ѣ߫7zn=f=;Z\m VP7F<C8[oX#xL𼏇/]ct wǙa9<=~Tz]2[<^r#Q`O,BcT:͔o=CNzob0wV9 p/z{Rϵ)9N2Wx&͒x g:y򡱵!] rx u&/ڹy¥wwѥGUQIӿilNj( kfrDpm#Kja &SNYR q6xL #5[^\Ke"@J.WQO'yaVBb̀!Cjg{_p^HvЎpf]iM' Dl`^˲b+feԦⲹ'7vɕŧ>DِY&ӊ֚#<,Jrҕ=؁6G(ϗJ ʺAĂKqKvN2>`yWV44Tm'OMA\lN!J\ij׾}+Sxhמi,dLwA\:6/',nUE)cK @.Sm K,iW ^$pJS@[o{;˸ M4" ?yO䏥tjdV-JM;-/ldp=ixӶ_% /ۧt$<Uf4A;Ij{B@HJpTEm`ꌫ.g' ,!oS{[Io$x`tF-q,@T-MK X%/42/ KZfTMr$Y՗EWUh9ƮFٟYXea;Wp1Rip(fJ "NL F:uGpn)XZr2jvJ9<0j5f{f=re^2GȆᎧOGrՉ>5~F-鷍/&E%!I/y{m%%rg6 xQg/&0]+mjbH+sk^wbf1Ai*ϸ'u6i HucANTR_2s'u*"h4G +@5"ł\^hG %iL 5+dP"j+?# /;Z.e`@e_a:гk tB~v P<@;rvRڎbNy^+N p|~u-kDMlh?Q]g'[&" G,+pq-zldp l*XʿD,~)Mɦx UZgF@ 2uqEt]e`8f'Li8S;~0d.{z*/}d6Z1(҂H=a@ȚkZ.lRNytgZ1)m?!ӼKyXVw(ySф|iTh~GAiHm%Fr JR'j X6"4Nu 9O=P^6_Z`%xg~]9w צK yxټ{fCqsE,$ ho)kJ-vܒbrY5%6;yCNϬqQ V3nm^,dv,mTc' j~# DSe&1zyH5Mu( FYyjbz)>xYzm>Ϙz@da(Z||M +!o䅡GIm b&h]^AgI+_P7H-UHE0a?LYu̍7.5H&eV,mYow ^s<ziPChA;)ǀ)o q} kmу}]Y4Cx!iTYoaЏ\rY V@n1z\Әѡ͡„^8k3ndf2CR\{$Y}j@WG[)a5nBeݓnćYgs*s kzdǂ13:M Rl?Oq9[8MHw҂,J7ߜ'bDWpo. fE9 _KwUܣ$~IU 䪯aٌvVա#ϗi-8/~ Ύ*23`pޓLEP^H,0HvSA <MKE}ϸӤWO Q}*?JѲRe6N;\W"uJS ѭU>A+aV%X+AC_It,Wa:vgm.Wˆ&%G U]Wqx1ٴ4+k*(/S< a d"U>޴|ë $8^YJѽƺOOx81 3;9㽲Ƀ љM)^zk\,^~ذd}u;Jv k$ q8C3R)9Do7+k\0< +Bi2iM'K3~R|\}01N{ s/ރQl2hT%Ili!m>I5١sC"ޘsr pMgZڳSԻ=x"!A &xюJU*Yd޼*%aaeXAs4 50grK\h&90N66Qt̶y8Uy(r˱g:>mNE%"ȰU lFSV0DOkZ4حکwIs~/-6֝Ax ~2Y7gR+U&I]-zJ~eۢvzDtۡ2c-Ү$z:U8\[OaB$e ]?a &py] f%=}&ӳz!}1eWn]qj~819OnVW̞~p|TV %}n M˯]!_Ԛv8vDfXx9?Le8MY[ pfs&Y#~,wK)lx&Yų#s>]G`Y' V=\tB&Čl?d)VN7=hi$껥|ʣUa컪+X_1<GkNx`Nt23=šM^6|h 7^55qF@R߻'ΊBj”ƊNK.f2c, v͉Qq ٧hC&|b_updj`d~MhU:vQ01FG-m5c&R="1pTmfOHuLͿ23 4 74~1e%ke}zC'kϥ3dܠnY.ܑgYhPHZMfUgrrK\?lQ0ܛv\(J~MC,`:[dʙ:~PnP%t!kT8յwOlot4"^Ux!ϙ^ڇ!B S5.BedJ eϕ2~? 3Con"׋u~ӹW!" {kq\2Z;wl&~~{Pl[;VnխA#/I1 ֌}a(Ge_ɤLW"cm|ޙ ?ϐk=DtxףOW .]  S9WNuQc0?VfnQiW\@$[d8KkD- .LbɈ:M*.5X_v4BFc}+qkiQ萮,#->R oo9m7 r 䋏뱽{vWd 9+0ώ]lNj34p;a}W Т7ybj{񤨊Q8>߂oPm%5F TP`I+`mMd!LI'ᒜNth_h A|^ ʷJGtNRT:)Rҝ>_ckT^ypkM4E2+/{"{I↬#QwQ$]$4)/SRfϛT,5ׄozӁ96̟zkpE>ZaHEfrc:TNQ#1^~ld%L O!lءgXUYrMOD1[æ}No2 '!UĂ0,r\3tFgo}|BHaJ>v4a'mx`*Me\k>>VU@c/gEh}y$sG>3 |wn%=R#ș/ݹd/M`݈"V!:FSu}'g[A:xhlmfc\wjOsJ^e9#wԾ$xf""*01A-q~&PvMUSSKI2$5t@^"NT>4 |LJ7].~#he2:*8)G]ya(#p'\ő̍h@Tڒ!g-V{y5 85 I:])W i(>PaQB쵃5$'+Ο&/E%Q`˹l^ydā%,~6s}3AN`0R-`DqjX;SUyHus0S?A&K)BE|Jf :E&| JxNuc`L6f37-ٽ%Z[Wpc1Mxf[e/dEwcE>|c=1jC\hGn4)޽I~SGpRlW̺YL)EmVgxaCCV"O(xmbo "Q֠IXW2tוHRdp'gfS-uV6,^1N v|G#>71* vx[CkP9Ӊ!6Wz\/DES$k_3<Štyr ă"JÍ=}diպ+(EuWn֨tyoU X_1 ,ZbF6gYW` ̍LeV#BJ]kT}ex(ѐU?llMgw&<i(\Ύ-.Ndj8h^R/><TY'V<ڪ ?ޣvn ًX3Nc|)>\uvwioXY8c˴Y^g~h6[yчO'ǢbRGһ9;And}ς-Ub^x3afy7t D> btYԾ{@#xZ2\=]^2MȦ\"n-0h Ycճ="s ]gC2Df߮mBGvB!t7*ɵbMo)BA]efdhFdVQ(G\{5eo1@pΕ$L 6ςnL,LC, IHsy *!h((o2POz7CcgTBכF9.x˱~#"Wxk966(*iRN'GPXmʔkz8pnmS:',J4YMCDzIFUY9 1t?QdܟyO9D_ĵ.k$k25zxSK跚V# [@w/;Q(e UZ\u4/j4.xm(;g_q/V'sRD10ʪ|jc{J}(:Jhbj (\8rD&/aFd L$)4sg;$4A~+'/V5Ixi"ʣ^Ji; NyL9e:?557X=0ߜS/xnԻ{DFzg杳9'jq_}ܴ(A)Zg1{IdM [o' }_s鋎^мx9l0l Geq̉ꛆg7u3@[٪sv}gn߰Vw֥(0ֻt7ё2LDcU^=ޗgPȭӏEa='_޶ܣeuTo0vx#&\/5+q[>@jo'jKRЙ;@4XҊl/rCD3Â7x鱯IU2?LN[}~jn ̪JT,j^DD~*i[Fy YKS8o,O+`;ĕYp|AzChgqݎbzwd^H{Jyװu{2eC~Cv ]mC@ibG endstream endobj 587 0 obj << /Length1 1468 /Length2 6663 /Length3 0 /Length 7662 /Filter /FlateDecode >> stream xڍwT[.Ҥ7^BHB{.BBKH"J{.;HS(ETJ=w{׻V=3̞^ox8 )#`wX$ P 0$BcǸ֓Ph8]!TP0S`@=;@+, KH%A to % Pxzm; M£@N>/|P~I%7  'vG(`au`@0 -@9 ' CyJC`J&8/ *\P;`wk 0'_!P( q;00#B\?waSԕ lCCQp$-+ Unn0w W~p =w溸#ʰ=´T`*t0 @$%)*%y`P' L|F/5?$ p ;/?4  C1;#ܝX5/`  z2wjJz2'$* 1)$v8w!?y/_-wW_b=τL. ӭ@ (.7dg/a]} }; 55z0{Cja qPrwRZ,& KGýaw_Kok\4ˆ2 Ac Ǝw#0P;5w(K (ć|$c;u`k8 P$-*ة&5I7c"."ME"–Z_07 Jq snxVKjwwUұ1n7l&pЕ8 lNdZ9~!ڞ־sG`dYTŮךQ{ngiPܶxȟ~ܠi5_jmC +5rV9UXc)?uH>m֗|PE;2\gvobN0>Ad˪կ<]ҩWno8 rOXJe:uȗ G-*J Ϭ16^jq+vYݭ;QO8]t |ͪSr[>^rCTv[zO? guVhS_t? Gij"$tb7Ol%{SlQbhW `m17%؅hL_"U;koRW )n|K Dk88Sii yYg\_rEr(-mد67+,>Ӝ#jK^%M}uAXj Ϯv8S߉>% XQt~k;߯ u ujWBm_xYB-yAΩH;tb4n /% A^ Mn9<@flH]|66܍zXmaIip;c CY9 h7 >K;N! Q&\ٺA@3w68~ ޽=1K=uysz,[~f% l@3U-@v&ռԪケdd~AN&\} GKXQI)GqiSOZ.c۾on^WKK/1Zx INux`o%Em9~w9Ovis=\w㶦ʺ"ZF b;4ys6{at»|Y?;Nˆ u'yz{IFY)[:=i^W1dRac=,Mɖk%$`ey@s" 0>{(S2&l4f}".B h^=l.I9ArhO/cӼ%?x`aUS7h* ?':1T˾+ ) p{K= DH2 KC@+mh oZnCB/1!W"rOIG. B,qHYpCp}QiVaY ?LOy ߎ!ˇb{WrQY=}>:=xjE׍f&bQAO;eu&j fv@"SPЎYƀѠ.Q;^ d?kZ {{t^U̱kuQ544Ql:繐3UOd/6]9+ :NFV7} 3$7eSAmV9SU%):?I<)SgG|ٯ N=`@dw h()\[+~@jzE] v_[9ɫM47pMn9~2dQwЋt=5dv釙^ÕrcZufy4Tw`a\ k[o}S˺M?up\;Hx{,4x?6 ~KsI=Axmq.n0ijiwW7xvBx}^hI;7YLAK`ҁQWNtʚ>+ql}$,(fVC ; W#9C"KI:(.fE6twFUj֍wߑʧQP9Z#[!*ޙ˼/OuKj#|VőKY {tm->a tnF7-f?hLo>- >~b,H~JD74=hEZBv]DĽ'Mh$~Rk-57pMyGY\ghqY\NN9偣c&if>:{+g[0K7j|?hv[6t7_,DBM+sܰldenU7VI"k,7>^)ڦ`ϻ7mR0ƐBſVYV}U}ݣt1_ֈ-a{]D/ј{aL'\|囉qh򾏝OQ Duxl{jO.ZPlVv=FPn-Mr*WcH)fk0OJѶ!$i)|tb|ߕ.]:.=aqW\)Q~T/ mZ:78{4)ό )7%ߏ_re8W'+7U4(S%/tHP*-Mڮv;KIqq7>4-8`ע2$;v7\;Շ XהhWN緞OLKF7,:H^b4UeITG,*'[o._ e@"]A Q|tA*Dw^|vS6qU&kƻ//Ta9 o ,;_lƅN(~V|TC3[.9pb)cEco+"m;ε+&so!LFNM%܂.`D ȱEj[v*5{}nlk Ng⣺>| a뙼܁G*|}3]SNe&aәvsCd aQR!;GkUԔTsB'ջοy#Dz_W\-.ї(h8K;S9 MeK:%}LCiwCfh8R mZފXLn $Cҷ#S! s=⫵=]"Ͼx{.Vl&0*[WKRHyj,.cՔmo=0IXyЏfeq_-. 1?EM& _Q 4HV{,u'vJ!M$oSM+{*Ϯ<{b/q2 NFXZŅ+C2"5] =M PZKG0O[Bp p(N6"-e H9/ R) hxVSi/ϳ-S\R2dAO~6]Y l9|/Jj W8~{]&:רR ĜmHHKA~q,ѿc8c;p۹TPrz(wp`.*ri%n~%ZNjrCQ(Iroyǎ֣o9"5\䥑Y[u$/|MB\_$#^Dw޻;]h50ٕЧ( QͪcJ&L/m򔗷Wf1k`dPW~P7wW)K)! [{gAķ*+\?zQkDMZԲxZx(:(2}E#1"N%၊rrF<*q6'mG5|O>9Og#U| N?A >'MjۻWr:W j':99QV"ܖ3HnO!(zWE_LǪe纂#ɣ4έedESmR}M+|fBIOSUY]뒜ߓ>/lj~BӚm½w-E'ck*`$%Hramڝ_#Y)`&#G)(WJhv9X}B\ zNO5?ܷ̖EJэeD6`_xF!N7(-n( %Pf> wBuq;vZR+er6q/<ܻD€(YyvEJ!\!˚*x$˄}ԏ=lb!W^ZK}p23Ar+)(v}<HHۛ>L0zl|csl(D\kN<4]3>)c4);ĶM*/6΢}5_FlfJ7;}1KԸnfSb1 ^O|JI*J[Ymb%:$G]\b5UVWsT,ވ ITVLZ3C%˩A/H3꠺TaM&;ԸW̺Lӥ(/lɵ H> Lʜ\qM{)~aIE!Ksݚ?&Y:5F˚uxT 'S ?Vg !T:!:\:Ѿ J-(l vaPӼлYc[2G0rYRR$к0Y117`.&lG6ªQG) ZP#G b߷<(\zмO Ξ|/O&UN$P[?uSx-b;+%ͺqё:sDYKK=)刿YHd:md3q6k ܐ _ $6H&yt螗k 貿KVȰ[m)mE> H儜0vMȨOT`x밈xSnwfxah8Բw~H,E!AyB#ZZD+k#u wc+ [^E\wKnA0}UI{7mK]6&>[Q#K$㉧j7[w%ϴL^pG_|I_A\y?->QnIeP5Cġ*]KÏ{°r1vT-/ 0p% 7kqTٴwIC^*QӍ odwb=V;_tՓSwoQkTi *_cJ ÷@v?xi5K,N䒌55N%~>M& HM!S?8O|3Bu]kÊ_3ŸFv6c3"wh l7pUfjcֿ GA%Yis9J~Y#QS~XeI*\vf*__ox\uׇ+}k3z "ȝnÛѣ4r}kcֆ.lЀ%P dR 2!Qvjb"ip:\U -5ڱ`:4Cb@9NG endstream endobj 589 0 obj << /Length1 1385 /Length2 6067 /Length3 0 /Length 7022 /Filter /FlateDecode >> stream xڍtT.)H 1t ݩ CCH ݍ4" " )19߹w{׬ͷ~~~|@&]^y5L@@E--5Q$ p쯛h ss# >% B"N ," H7 n#0w" ngBWw@ 9OBH(G ){Eˋ·txQ};f50@ 3`hw7@ڢ n0  >` q!5x_(Av[ ɇF _@; h!y==ܡnp;;׈ʠoYatv!PSkYG װ#ll aozԔB.`(0HLTPLs~ \.[- GPnElPfG: c<~M/$?W76U3c Ho/+ `(%Ut!]E?ݢ_{%_qpYLf- APM)7"7;;!p'4i=Phh!2@7GZ0GPvh2@Bpw7F/90];׷W /#-65ah9eiKw"ćz% jl?B3ln FGP77>_oq`0(4*PvZ-OŻ6&zj*;oS`9Q2 VpVp=}yoG蘗Qu1T =4I3FI}"> ]]em $=^l*m]ř+5#jg_Gh3kHu$xU]X$ex"UW«2^%.JgLA$gbqZFN`xՐz̺GdSLO! "$.Vz#~-1 Qcjܓ{u;@ D_[F 0Z68G%o0 2 U0cl,2ټ|T$.SYATkC*.HK@\-|[1-⺸YMwmjxl.ZP6ꣻ굜zb1kᄼ'V/qǛ6~+i,r-|2؝oxIC${Ž5lW4*VEM(v%ykJZ(IWJ5eϗ`KM! IbO\(?CO 0~D9CߜPyb4w ?φ,o )/5O{ְ % ͽMS۶];#?8oXėxՀh<ۉ^#-'%eӒOMa|=V HQg;7R_E (H_Tx.ffC77‹ev:?|>1M~P聞ۥNJJj~/p3F,t@z] }sIq=L-CK؞~J{d?^꾫껳EA;(pCȓ4.z}2Ͽ3ʹ͝џ4/Q\4YRjI~b{iI&a9R?|S^K鐚3׶sY2ՐkÛU%Q‹q~F\zCTQ@+̹։Le?+% ⺖ ƶGؚEf]L$|_`ܠj,.NamoYL.{(÷f*sh3-x??gE>[mxXg֨8 >#k\?-`ϏaOCK I-__ >NՄ5zou~ȾɹkH.}gٙLAWm!IqQUP@k>=u7)"+%+ޖ8K).}71lE>:6|P12U >B!M"Ie _^lŦn"~GۭMs8 U^8`.܍V4}\t~1:#pD^($!CW<9rZU{TjH3Tՙ?}k&[C7[ oabXʛcI7.D *cŗuZj%P2vF5B4" 񞏴D ?5V $^>e;tSEH~V8F=Gvqq^ Zr@Ѣ婦5/eᨛ;SEeO:ZJcaIE05,6tUPd#r;enm5ΗkкtIm1|h؋ѻ ::YロXp {1s'_ònlT`ѢiИaן>3Ͻ{,E!ZٯG@ tb=錢IS֕*|02%$L)0͈ E*Oy.z)1dQͰ`m帊{ݫS߹˜%JC@FFT|- Q PLaD݋^UȒٻxoЦθFdh6lزi誺d>v*IzיQ{ΠOWgJ"Dy%5ήS]&'rӥ#t3VeJ7R7׎+4>, ,Ee-,Iqn&aV˼K|{\Jz=:-ܥƍN0v} rNdìDgx'L QW*LC;0 do>`|ͫ{悸w+ƟbO; L;9s QpE: H0"1nbrP@M"8.adCBzV*FǍ^q #qR=ڏd8-ǐ޸3[ Ɗ/OklWTJ_{^8:٫y<[e.vIL^,;F],Smqbwktcu,ͅ-*ifίB-l=#+unߕezL?;NzWԭ(c'}*M(TEґ>U |a㭅wR]Itb9fϸ]'vM!<+>A*3ßY]}G]b* 輶t {]Vա5̓)UpM)}ySJ J{5gw(8.g/ t2P~{QnՇW63BE#i:{9!!_yp˯JX4OkIQVt[v]I?y:rOT@<f Տ!} #FU!ec9AK3k.QDI5%僩/buնn) JN~ H{A3fD:0@y壤O~RUWE3h]|֛ .5Na1iN 5+چs|4Y7cKO6l=i}Za] ǰPWsr mH?L.Nm"Q^?[h|~@=0x|Uwt ucMGC9_+|h|Շ?{;#s5hjqbU_|¯X1}o3 (  ܟ"sP1s ys9.--J3JX(t]bZ[<:='j$ppƻN>mSjO֥*쩱|7t޼qR_#Dp5M~id\\mdGT#VsWOF52A^[ixGea"귘 NJA3Rt4җbb|TWoZ-fIޟPYeҬTMx2r6j|AۏųEq|#hnX#4sqړ܍ңe(-rW.֗UVj̆Μ`Ӟ^K.}a~?ƶHl`Ty[#1=LSc+Γ-ۼRȈэb_#"V %xs;1Œb~+5⓴B+jhJ.37:MJrݴ$jJ?{?0HWAv؍$/p}6.3GFmR+C=W @?>WV4$/9f#%*:kfv*Df\,wDח4 IKSHwXor4hiؤY$_*s `wi,ܣnu긞>g +bT Py3t#!!צ@ׇ=@/抶d=[vB%>ήgG%G2[phey<|k HP(d?C\Nůonsy0Sk؟^E}.Гq='-IkN_'`jDZ.,$Pf2K-2ֆd Wҕʁc>+v2eG*&)7Q{WaܙIϙiכ̃B@?-?CR]=-fK),>Um#ވEv&7S˽z3^G&[^{zJ3zȉ=x|p(Bm3椰!<%Ճ֍)IaO*ДZ[k[ĝLIo\'9w w4wBl:{-Ʒ]YhHZiŦ&cP6r=RCxsԘ k z 3X< "w?N1TYo<腌Ah6,gGwm$4 ڡ$omuHڹu]u9BYbG@ÈliQHiȳvZ9:أHp iZoŎzdmz!CbkZ. .wlqsP7 V; ħ?ّ.GLSa=$(ŧ4LdN =y9"g|VxΥe2 }԰4Ϊ~2˖`lb˭ J`hbe8MTAwyW)!ژ."ZBWGOEǟ^M?p+‰ƨlm#FW }~˹opgQɱ38 @<6J'ZyOƍAG4NZKz>w*|LԍR1w4+~'^]OЕvJxٺQȰ˩P C|Jº"*+⹭R2&{1J )S/iĪʤ\q+/ِ;^~{`z+2F+l@Eca` hb:0&!Iyqzps"/%u4ΏGPfewRh[{+<1t :g}7U __twN endstream endobj 591 0 obj << /Length1 2604 /Length2 22963 /Length3 0 /Length 24440 /Filter /FlateDecode >> stream xڌP\ݺ-h%wBpi,и]{p';'@ngdljUԙLv gfv6;Zo1$𗁄#,4v)ځr.6vN;; ƮVfED-aghea >tv~~^lV %| @ _!,XYXmX-nVΖ5h0@Of,H K+vnƎ@X`ce 9=\@f@Gp;=?Lp /gcSS;[{c`ne(K+8;3Af mƮV6&`17H ;='SG+{g''+)LrvBOh .?sy['abϪ rp XGftps%)xI}́/$/'cW ;;`!;Zt`ϓ>x@6_V1w?:qq;w3 {x>F4}2\ar;xj?Cf 0?EsQ\ 0?Es\ 0?ˇ?gL 7Xgjgpq=-fAp?pCm͌,t񷏃 x~Cb` 8:\[z[AYe/.ǿ n._ '27ޱd;58= )2U{.0k{eg_\B۸8,q3\윁f&6u'ow+XnǍ Fp8_I.ϱໞ4Kf8_=׿ _v {CQu_872'@;iyT0غ.9]4zfeN4d ^m)kgDG'xvi#7{Z[!Q9|ƾsq(_]UݫG~*e֌ (7F@Lu>}3;J&ψsYa#zS7!k/9EҢ%V"\T5f +HPs_rN^2 x{'БB0۹#\|F: l+`Uȿa}dt64nytGDd@䍅;nڪ@&I*lT6ӊk2qWB6|}oN/b|ϕ61mܰ^x^MZrJegJ|K*Xl*g=߬c, SHt1DUNowz$B/TJ=@|8y1`X<(MEy[H̖op.5n'tHo}&'ͱo'ܘIR-+ y//I~tQש|GC Mi9ҬuB$Nqsoqvb|lf˦J mOCq.*<廦XʛA88%|'',6B#BblؖNzuqB*u@RmHkD{IΝuW UgDXP/$/ )p@d`.'2y`z-g.6B [S*t"xҡEӆq(iVSy<|laN&8ND !ʏ/pP[$xʍ3*Vrx~wIH ahg(FEy:Y!_ gJO06uwn\E#R3q֙Ag'ђY8|0%ZNv@`6[Mlwî5,V 9[BN=?uי\[v}jgwc.⶧phK)fe<+$Ҩ nK72棹/592w? &Ѝ?w{TzhXQC+~Ņj,Pk6YR)e)u]h6ϩ(i?8D, ^9j ̒x}-85U+B%gjXx-xEC*, 03w01~ՠj^#G_V,Z].₣mn q]qs&Bӗ 5$4>fiQ.EGJ߹LbR|ȼ96tpKQJWŐ[Ef/' UO BNB2RF!Z-7;GqU'T:`QuRprvܪ/v5ڮ"E=v\ѾPJ*:vJj&3B2 ^r*Dޣ>îs[0Pܘ(Sk+ 0/:e> \`8}:jޠE.鄩' ]6Q$MgꂝהnRz~l@3-u>1X@F 7E`t|FdžB4pRI3bѻϤQ Ղnw2ҟh>9QDeX'Y=CuUbX{Hr>oH)anHw҈:!PU6v d)ٮlI(eRƺw*\!y?ᵟWeHp0t)8q/_=mQUݱLr+ sʵ?_5:BF4Y*sUeBs֭7(4 @FůσC`QMoH:rh{]Я&n@&nlȽ0oQ'[[fct,; دպ0ds`9Q$Tp% :,뼹]V8`:"v)?m;)2+R"SE` Z$4 F~>)~oY#oAN:jJTo;)5Z^ŠZ`FZ'{E}̨dTLPG  8bҎK{~Q*CblQN':c>_R:2g\hp \#ipDu^[RM߷8B6jC\ Kׁ_p8uvKr LjZI3ߊ/'WcP^͵aZ몆*X0;xsUtdʾM Dч)ׁ OXߘ#BˊF j辖+2PS?1zŦ_&Rh%%0|fG3ӨyY;SQuYW؎S+; [:޶Vm9qGǶ#N)y9lJɔ§-Vs΍̣m ̪}ZsEyښ>O7-:C]gʲ#1dMau~?Z\(Wi%,EӅ IOƾ\&Vd#fW63㤋FiC6(]9B4P-NtW8m\Ih=m֒6<_ϩ{%}I;{;io|`dy(4sc2e*ԡ×y][]1&Sdse^rH*]!P9DZaO`YF |3('$SuR7)xƏ&η6E:lq8oIeȨ?e^?ٲ`NoJ/x<&}Fѹ^=l4hq6Ʉk\f/~DwfG~ٌq n()cǸg^noIEP:/zxod0*##]W6tL\,pCʥҿw}sxKDF 6zŌ^z(按r\DŽC͸p|+>|a0f|{7& PCA0R^;1Ju6x[vS{J֜sk׉f| 0y?U8oM<ir' E SyL~А1hC|ʚ1hd|U<[3a45.SF{lLJgu`c=eD bg}L >}b@BPy<)ܲwBfϬ0C3\}&o$ 0j(5J|uĩ\u}@C³VyjG; Mϙ+;1q. y3B}<[+:-n^DsqfL|\0vPei\%$L ^˂rJx)$CՄX9~;?~WyAY שGFR%),?Ȼ(VyѺWtHkY.ȡ0VmmGZz{KZNrZ!kt_$bOLKFaq RpӀ̡f2jigd( -+#3@qITؚ^HhG#\uȫpDKRwj[{t LjaAadsg$A9xf4}[Dh"hdtnjI@TYyWՁ4lUaAwʖ2+2qrk̓UgxxV|,G_Z:4dCsuaOK b0)єb[E*5M-!p"$} gVrS{.˼UZ2ve^@v4̄AE wZW-r,ѳw朳cViEg(_0ӽ':Z3;}BPX(;d='-Go |(p85W</F\v̡Ǘ CU6JG4-#p6ͬ)Zkp-:P[Eexc)Uàv.=C} 5cG (<]8WGK[oּ$VGZxn̹˚}f0Sl%{p\εI!d*Y{\\RSjpw!͞o`WVELo7kOչCz!s(-4;w LʴVQnpwQ!8JU}:EBE4bf$X|?W0D2eVl6La`1qB 9ãVp/SCU^HIM$VٮY[lpH|1@̀_zMYym|!vOEU;zqRVd WYJ0t8F)uV׎ݽD,*.Ҹ8. *b@.U- D`+" {gX,AYX7öI0p $x{#~eK21 ,JZ=;DiCF,k$"˖L1(N){~YXG}{ɧQ(dM ?iB=+Q:bq`yݭ)R-d/g#%ݮѠ=G~Qh'NE^[Sor ,G=HsiS2^wحJԩBJ8LcZG[I}7: }nY)1c-HwџvC$ӌ,Yi88GEH)%]` +M)a )eItt1,g /[}T|Jr8*0Q$e c6{Oת:_Y=Emw.͏f- >KDb/Fi;Q7[Tv*\}8ؾ-ƻPM{1lg;AmW[㻅j꧇Z#YIk⺿ t,H~R S&X7)i^F6q)60w%|p /so}k7{Ҭp]Qw R ny2d5,־׾%_6̾Ǐ-u]ɾ~192e!,G|j8"D u ^W`Sk q4RwŲrWݹ%!,U8s1#Vr= PۆV$R݄ &kd_ [6)c~@ں STq*Z{Efx.kuYT gE^ X:UV,O[R F ddN/ Ĕ0&m졡v)Eɺʏ3(` ;v>\B| kYc>+TmgO K8wCE^પ<'tjL.鋢j[g]>G=뢰#(lHe-Z'1|A ^F7q6ÕQ{o"תT:p>8ؘE.EŎcitu6]JƔitHMO#){zJ{d{o7yaY>%9߮.H2xN.J$H^0FSn1uYo_$|Әzz%..Sd"B~&Jiu٘V vjپtѲ'&gz[̵OihvxEX)@2UA~CGƸm_ZHKLոpd~*jw I>; zi?w9p;7 %=?!jp=i7/ UVY.?b$pGdffp[fc;!Q%jEʱr"v KhseR7|?q2?Ƅf+9bU,8| e+0IψIzɝφjߢ4z\RA.4 b`K+|i;BԺfQjtc" b'374 fsEct|=Qx S!ug'z0Îy׺]CČΪOtm:% K쀄hM~{+mS-C!urғqvV,9]3^ p1|B_/AW*߲| ,.t)OwJ6\ Z#P_SIDb.Tq?! ׂHhuX+Js .g2X`W Ǖ\7C6/ECP d:rӄCU]Td/!' u(k2uE)cAH0 ~ZL)Y ,=2RY sR|D^%vEw>7)R.Gӏ>-VyW9JogP)IͿ.q8 ׯv-N7O=† FH$%hizgLQv@٥XyJ'՛cejQ(oCńJZ޷ouwׅ}5ovC_*MT/=2)gv3p\ w7su*aXS-?"c42hWd''zU4x]5,%2{^B]0Lt4+&d*Urn3  &^W{A֏E3e3DKy0w,) rS %Iav!FuHIK Z1],\CDwSՙ@EꤣKEӭ:_BaUqTޣ]]p [>_,11'&L 7tԼ`h 0ͥzwT.@{  ^vS53oR,t@ikekʒ5<•r'j%#H )W _^  Lޏߌ`@2= ~lў%/xDD`Ӹ/=J2' }Afikzmh˶m!<>[lVD&k~~bLh۳D*}7|F 8Mbְ|jvDn4Nu ĨLOt<+Ǻa|\؛ˠ&ǫ=>IAa?FOcd(q&ܻN_2þZ+Xݪ0^*̭twPēF%ۓnl3X_})nY3w# ~ZϽnȷejb߭ lrěQ€KZDVJ<GNlyQv44VBmCj.%W [:fxe'~7ӆN"1lu{CYr~as_^A0Z\(>c(OD(r(8Ҧ/8"[# jt}B~_,nS TrfvpKI}dF9TTJOU6Ƹð0]RG!ɸ!uq^\jA;tKU! 2uņTXR<, gm[)a\Q$YN<լ7Ƹ6ZuktSNP~i2!yWWO B+z1)J#Ь]&(q2Tlumή1IZc-Gg *S=y3mqYu١y~878;>tkCPJYTvMkC. PdV8|3 ij6ب>^nrE؝- wYDp[^: 5IotJI}1 J^-|K} {WX{-? "o7h:7&7W`GyqѨ7L)}XK缑td+'PK>>~ %fN+:2܈Z>,zɓ?fX bjb, YsO`[BU6_#(|C!vNw1_x9y2lt6jATTX܁zKF܋}.maK/ͻR!+F\^Gɜ>tϼE3e+:2Qrva@0u{3f} 7hyQlxH$QQo2dJXDbrd_1]p)w0$)0xGaya(fϫ|+4Ʋ*|*3 s gZS6# QnŰIú\}ap6V;"bpGijcČRk_~Pu35QK%3opʿӪ7tل98z@Jֈ/)c(it)ֿikYr|qxQP oa5B+9.UfR SapoIt#%7 g a\ $d[lg j%.6V6i~O4u4FqtA7RXаX [􍙳€^K4Wojpt]^7k$*GNܒȞ SuMZ$WF Zfy!uJ&,d_DSWnOU#_0h(7=??u|2yDFj'X{" bayw EaQ}u}{ق=t{ \OA)Z(D:̜fOg 4gߩv 9KeY ;!y` PNaWzO/?M¾GMX-h0~#v.f!kM9G,רPOʞl4D_I,# pt-]i>S I}/ iH|݉<ަn&H3NK.GtA!ǐ4~ ̺1"BiY>N) ?:S"!"$H ,x-A!b?1oGv۞e0$v_Ɲ* [{!Amjv,@jBbĀq]:=S2srOp>-f_mg`Y|ySQOP- ]K|掩,HUB_CL EJ|X&CL6Ǽq-`xt9@@|]x&[Ju~Y!*#:H֞,卜֯j v.?+8"̘g\9hNG!3(a<֯uiఋ0(|iHT6hZ$X7R&Ҩ67TA{g!U&$ͧ>|:skuŔWx0qc/ѕҿJ)쏐.t#J!iQ`\,mAN+o~>mR$fZ9#?!ΊAgi ޞw 0s*8 [5r*Bd4\H'A{q+E[ g^12̫-~_slN댱q`Q 1N~UY 8D7^Mdmy1<;#zcb%ޙIoCۏBԎtU`fP~(h@S /gt?=Cg?LJm/g=#A*X%D:VixZlaYmx@@S \ځ؛݊$k|P7 dt)g5j{F<:E )_-ysgꟿ-+SS|Z݆\Iĺ$ +/ڕ<$]Px$pmO+Ryӓ[mwy^j1nN)tXR7)~Д =vT~xĂsk}Ǘӛý>g VwƶDZ76!jNJ%}LP7 c(2# [sK[Qr$/xƱ!?;=[w/0τHukUG>D<'tzɘ>[W 'pS09șRk^f8۔!ZEOFɯXvL+W?M6JH̚g ^c|``<5 *[q ڐ&Dc\<'9 N1vh ".ENIPY;'~z+ե6Of530v0V&@: fV+p-[go ʊr,1pǔ]?M$@QsrCPXmIm@m&ٛ&h~B oNvBЦBLܿ(,K*#:͇R Gba4:RٌAk'"Θ+o#SO-4;tw<_L8P.cD\'u,Z͠Q Ha|:#IqB8s% JUu[;l(|"WduX\Gޔʀ:C_E8T-AOpkԇ{OM]u"ÿ Ծơ[v3Gh76ϡw~+ވ^wϕ]:F=SO9ʰq$yXFD$3")7O5-8G?ILծB8iY^Oax=D>,{\X>qo=Jޠl=T@ s}, ʚ\r% ٨RE>Zp4dYdA; ('FZpHte.'RL+2?-&Quc%/\ـр򂏝_oĜWWzN,TYu&:8fǢ"'9Dcgڤ@C7}s[Otj(#wO븈pK=h$N _Ul d9U:ڠ\S)ZLWG [oJtq !;:vdh'A\/E0|TJD\(1h?YwPf2Ù<⅖&?rNs1HjzN6jkAy,|a%Z%lK!qڥܼx-!%yXvDQ,+퟇ȈpLR ѕ'k(rgH[q~ÓKH{D%Z< ;@$$MἢJZUo~/{r”XġoARx굉cmceD\^cknfDCw%ƳU/1 rww<[it=cn{[;Ly|It2{=4.GTg =t6ZO?VN= *Ղ|I.;; H_Zc#C"ҜS6{Р^OՉr_Ytғ D&,'/j}? ^.e朇:<1k D+pGk{T?-I:N5 k%ejy#DŽCbQX׽!tXq7} 7pe1(4c]X8x?ya UqRؖ+ /E/#2J:I|"6$Tm:fbC6o^> !W|ǐ2/1Mmpj /Ce5F'OĒeFp>CߌۺA{8w;|<,16.%0@m4#euLX!aߵlz*;E rWw2GMkv RTs+ i S^Q@4\5 k8aJ:(!# *ky_X:|-;XS*ɉl^SI{ⶉX[L 5`Ig3R;V ml̖lOؒ`*tU)hjb7}]`qxaŚ󭘟""[K7-Bx2oR9tM<}4H!VLۜjx449O2U nSXqDW:(q>T]4X9ec\Kfd q _q h", ]TNҳIBoVY Ml<85_̌;WܶnMg4ϩ\=K˓vAjq~f8dģLJjYZV=Oh%5iy$=>g+A<"2F6@^z7/辠{ ,*w=[[) oer]*<ڋ7;p1'Vc& "@%$8*FJ$%%]p=ҫ1-ۈsM՝%cPt}! .]O#WIXOzSAա݊BflYŠj+VX p1cyGxRn8YW3L[G48hxwVFG{Wڞ{kϻ۟B? ^̦g\MP" *a_`Ih$)54r4Fp{SfȧT7qqz!AJoK V>XRtտgֺt+0@np#PMM ac3༞/KR̀X{PYos?ryN3pB1ŗ^h6*ەe^C ?D)YzXB0)[.k ەr8;pLBgMWo ⼕cׂKN%vk`.'{ÜqFwC17 TQ{^{C9d% ΊSϴ6S=͆DK#gl+Ļ'@}Lho}YM!@_5zv>)EТ0n38 v$vzԜT{䭢6I5zљtc 8`0n]S΁e";>[Q];Jm:@k A_$播mr|sGh24klus+yt\KcA>Tsb13>1)yúg\IrcEG7(ezԺ I4;YIpۦ5#e[1ݏelE-ryh ,~8 :kɷ%Oas/ G*jT)ڨq? ?1na$UCMB~ Ϫ(ytK[͏ӫ΀gNz=+_`G#?6cp<|C|]\ʯLG9VI^+%~9FHV * u7|0zsӿtt M&F=:fz ᭒ Ҍf[lw)T {тT* L1n=ylZ:쪡xA10paIЙ oT4'H(3O矎_rThwR]/']jS*hAqbqkfXk⑦l}EK_q/NrrH,BH+xLE~67_,jǽ;Եq :E n glqbkh@ݍ/`D0^Ceilm/+3ʂa܏fqw%.H٥o1[1j ߖS.: :7ҭΔnNEp^Z`]WWT0+myҠrQŽ]Xw ƬG=-UŠ|5L,x Jrg2w4 '% G)5>ęY`ڐcxE4H)0(&x/}:xIU$@KvPp'D X煷>Va;Tiy1zsm² PMӭz[VՈfC;.pFQtǖ5T˞ `Gxey޾4#xvŖ߭CӰ7I^cK#'\2P#8/! FLw@f=(JB0 7*bxЍҫN\dRv^2oJ"Ȏn5W{oa5@1:ϒmެ.h1qضpĿ^K%7u֙6lK!^}M^ Xti0Gv7 :>va!-*o`j '@8dHHIͭen{h`[f܂3f(% nO.l2%Rˊ63Ei?zd:܊`x%m *')z㘀U[,ǣ/ݱ!=`3oɊhQYOn&= |ƈfi,wUʾx-+-wQvO_޿DHYXVЎub9ۏrs柤a4Y 9q'(W7;Ieh&틝聗΁Ċd@:_Nk]PT;%L(b{!ucܧܑc,A[Rs;Y  8ݡ=ϘB|c 7% eb2N`)0T[LΙzyhDRǙظZO($I3hЙ}+m'WH KSe\+ x(AR{IdG/Dx p'0|TeKRC%5C&q5tJDxhQ3v`$.H/jgwt#:p KӪd:G_z}C$0EH&Xv@|“"褵o~ :-Y. ~$L0c%$90S V4nw5hsDPiL#[5'@^Xxs2!'6J|ٛyR J_}Q5=g0M(YTώ|94>}}T",V܇M T,k30e "OVaI j_f$~F͔09JɛE=+_Z6i̜Sm2:#(k;5F dT"0-J10Adc'@%¹)Zh hO]v)^Z)hS`W{DZ8kd4 հQ9,G wa7!G_dI")^S#.1odTpt3ޘ|OLtjd$Lvpq:N 7Aͺ[s(I4%}70<-}ԨC"QA-QM[,R7>>H7*eo! \6:\%uS;NoX:~*X&6 .v4p0TbiW%Ma v |ڧoD6ٟhl8$3nla-sQ^"H.lH|ૼ75GSFi SA&U^:)$hЍ@xu޹[\biޥ|ɍ!dU L`A5(T,}BCIPvPiK%U߼|_-n?R$#20]nXJi⎶3plpmqeWk:-)\0!mь5#֔&>iܚ|7G%yc%3%ܵx,L?~j` EaπwaaӾV%_%\ Qsv&t8t'Vb˲>,nZyQХ{Nmꌓ*)IKDOa-X$ݱWӱX '.qSObXjRw41B ǓW_!sxZ\i5sŞ2⌨l,(6g./{Vp3"g-;=d&oݜ㪢E_3lr>18{QD֤!71.HNGvh~p28¢6v5C)eP [ ek۪2Yi@"n5Wڪ"6_qE\ly68gA EyTJo7FWϊd%@[lFc9pOmk_L’8\칣 ;m0TvMCv!ߎ^YxBv{fsj5Fa PpeՕ*#30NHeL, h /҉)|U ^W%!#fUhNѨ宓r0c4dYNXn^ P:R4*7=d +'uת Ț1xؚ5WS6\:g_՗1abUs{2R hc fJv*{_Gma8M$7anѩ*;-E98$'|,I6d^ݾieO]i~ ?$\}U](Fvkm%ЏE4qӞ%_F&Iڑ*RV'Um1KRbAe|" t_^cc%ȯ|_~ro01[@b46h`;ϔWt$j!uJYmjD{gk-tRcʺ;T֜/ lCAel""Cj4yG<k$Z0 &0w:u/'DkVl= K)j4s` I{<{D%J)c~wc5ͣH"enMҖ-i[väp:ܚ^חH69[E51 ԚokMRh=^mv:?hoRq\6:"޼— i4_rS`A_@+wnI!pOb|Jc/M%x My"2P=MK=h+MBcnu;g?A!w-"T2y7"qUKݾ;S6rcQ[#ZB}~2>z[%J[>r* Knygq^sz낆4o pyXg6p+!NR$nCH)e6Kee c|CUȳ@T1mW,C"V:Hk_l֫&%8FS$&=whKw2旫s0NNv;֍g_5]EG.R`D@1܇_VaoT\%S0^˥h&YUHE=AS' `R ӘaH{A š.ryK;SD7 "|f|aoXa lE04`C}ݹ]Gu4LW3$ɲ!{U&r7dq˖&U dGoESb>Ʃ~WO5Q(N69Kch5S6N8h2{nAv},lisUI!z-f)ՌX)p0M(bQ" b)~6>?!ZePf\nl- WeOZF]_۽eDWSuL4ۈ#=4ʮLؕ4"31ɓzW?o,VNrHҨJ+9v (,yEقmxdr^IS R{"$:eߩ|dGe ;D!`QX ,ItB8'bEBR:+a,2e`#W7ǖ0DK gB./'|-/rP81j!^|/銌Ե {db/_ P.]>-ػ"ї> stream xڍP-qwwwhi!CpwA䑙3sUUWѽ}>k*5٥- (%Upqrpq`a̘z g0"YghT=- -(O Y t[T9*P^ =O3[XXtlT0cE =@j(` >͢u R!VP}3̀R>`G㯹,p?+?fijo t{YWأU[P}П; :W|ic( K 0Oid`HعYv/ˣ"pKC,7_tvz`r=  pr@c{>+3p6#!^?H7~#>G 8?pKׇOڏ܏EOGb0ظy=!'O c5o?w,0gA5AWU_ħSٽ\o+3VJ'u?_ڔgZoCmNl}&Nkbsnþtm v;'o=;&'W!l<+^Exm_H̶N˧%Q s3Р)q/~Ne=PıbDxD_\.q$#5"@`MR!**XuIJ6~s[MyԔ~L@]jRC!u<_*\T܅M=n/X˯Tx&sƀ%Tˆ0 J]ˀm=pEzbyxQLo:oYzh ><}9涷bOp|nut 5EL߭jN̖{J6p9*YmbFZNoӁ7&5O+w[1om?;2g(֖Roh*7T^e3 ̀pB_Ɍ<*i/V$b6[.d~Rf=Aޡ^px+kHhHֈD$P=_[ 'f@cJ ̒˦wW+HvMa5[䀤#Š6~oϦx'H[v" tbywAO)ȝf&)2ybo6ntCP-{ݢ^v}BY-V4I L7 w~Օ,-@·k;͜|,A_X`}NY-((4ACe2ܘv}rDf/`@u!ӑǚ ӭ3 a4~=p"k`d *K+giGۘ=؞ 'u c/I++د?';P[p!vo=wA }?%zV6U"kbQߡzE_:?nֽl,ل\ d5'IϜ@t.=BEZ{gQ/:?~XN `1Z=Td? 0i&j3Z?KIe{aߪMϬ7Јp<[I' VFt"&>#wK+ /J.k8Y&9FV ݟ8o0'H~[H"%T;SVqQ*IFDzMVxۨOH\^\9 O1Sٱ, M|'su~2eN Nԉm*Y{SSONR 9  «L[YbvB-蕢%J |Z J$-S~h3ۺl /GY#"Tێ$jX /|^:#I贍U?sv 2RD4~7$8wW䵦m}jYָd? %kJ]?pHyGOgsu9@f; P-aE8NQ1 6=M@8]W$ndJC:ךHY=؊(Z/7oCi-)XAHP2q9}[w0}t˅ ?D*'II& ]Yn֪1&.ٱ`}b(6ךc7b/?VuAH}_B5/wSt/9X :͐eh"OWl4yBR;Bd¡,)?mr)m`1_$yEx `' b?Z8THEӤ 7nj_XU7+rŊ=Ns9V ! kWKdDVz@R`aVDmR9$5ɯ0a=&AUyr'JNJowG+5e;:9w})cyLA,"YW(KŵE.x6]@pPt+:^D`c꿰GNU::uybyD\}ԔV- ^z3ho`s&[`?N%jAkެ,~?=QPl7U۽*rߖ)HS*j{R%rSL['CjIw5;8mҷ+J{LBcj7UNebʧ֢ \Vd^sx)0ݕ >r\7[@~EҼ?9g`#n'Zz6R9OχVCb$泭sN:K Hhf*V/3⬓CŽB rM+J0}so*NSVݬbY&DV`*?^3v} *"cCO 쵥D[g)1ܺm+P;LQ+&t" 4AfGaf^ap#Bִxb?`ji]#J9.=G. ⟾UDVu2Nmra{`gV$+<<왰T)nH?raPXбSbZ,1kt=H.;;JPw$ KO7\dpkK# Ai-g>.WiL>m\[.)ah;ߪ\y@,{ϰNO3ҁEk|TQ,'U!^LO܋tn$85V&10ߘM{Vi;\E5c~cxa3:~,]^쑟&dّ!dN 9y@3opܕ/{dS=t9ϼ'Un"*EvTo{ߞ]\KOhd8 ]3A~ 1rTyYO(yT@϶Y@W`EPn$RjfVǟ(q ]6 m҈!t#o-^k`(2Ѭ`m\]ԇuv$N>G FyJGHX@Zŭ}0iө,BteqԎD+풭q @,Ld4ݻBKOYÒ6ԽD\uDa3ӌd7,kg] {XieBVԫCHܻ]Yz]eJNBU|"K1_OL$E ; ڠ '40Z-õO6Dܑ#4 nm!)d. +%6|E8L=j)q:zp•l o#Kld9qƙ%$l1K\Z?#4bDžO@jC( dԜT3O?(ŏ.TLώ@8BzaM7F᯸R_>`.nQm{^;hVр-2ې]9B ^b3E߇@>gV#cER~[$.Skk`ԉb׆[lc^">6*fyBuZfmob l%gxp4pN5#P.4sf:N0w3EY1*/J(rH~9%`Sxo ˆzG1LudTRAm]xJ "-4p|j#*0``Dw7 LQA#6gc;ր~T+MOl\eAth;d/YSHA_ɻ9* !E7 gHXS$g4מA `& /R8EʨJ6xf7F`A75h?_4}C%ϤGf5eϹ(RvB[lJI۩$s.#06׍K#bsi紪6QdJs2 ,1#A A㧿 |%pryN:mJa> Ҙ_iMvV fS>%7LyfX4-bG V^p !4\'#MhlܗG~%L[!; )A$nXP$/?ꞇi(Jռ薽kJBoK>\Lu oy~ʊmoӻeblO[c+ӧml!-[y{Kۅ4_,k^.c)\Ei {X%h<^q6xJb| Vʥ˝S9;XAk̤xkёnULxǚSf_]VpQqÆ.̚tNSO>p{"kޱxöTmxBrM,6r'K5* hoŋ6}s+3d~ 昋H(<ֱy0E l-m6TVLaڣwpJa '#Sh<1 +yTn}T;(ldEhkd?{K䓡m=O0! =vn_+\XkLFhj\{$᫘MTr2wYpA>sh'edE` ۙW&1CuδIhǀHn~P.a+o9rfJ؝8.P9E=ob4io$?P"Zd&TQV.UV,s)~bk ߆.1߮J')ۑ)s?CyO8]bb_x2Vc%]Ny{aIb "i$hɐ Pl0ze n$9۝<}Lkb H1o +ĀUk#FU wd+ɠŒ֕IZei- 4a]FoH~~Ol2F碲RFSQ fEeyoMfufi G|w]zcZ F'}9pѢF0e%(E *6hc}ЌؘT|#)w}:KK?2dqaê J2%p0A!3 T>h 5B7@ܾ_R^kHc9zRnBlKI⯪xn9K ?ϨFUt|TCmTؾs 68`~r6y’}Süea<3FUi endstream endobj 595 0 obj << /Length1 1523 /Length2 8229 /Length3 0 /Length 9240 /Filter /FlateDecode >> stream xڍP\-C Cpkn݃Cp \w !kx${WWSƚs1W5  ( p $9x\(44 ;fm3 'ˋM%N Ȼ8o8x 8 $M@%V< tF8x:]^'ޜ' ftJ.@Ms(腬]\YMY!NV" w5@ trZ~7 P6+ @]bn@@K+xY!Pq V+8X9Mwo"O9 [,Av@" 3l;of 35{ S)@ZL `9;\YAv[dMR` =>Ie=:Y[07-,7a9$y1cxyy@Gܚ7_o /Bv6u\\òV 0?/f_@q?2zlOeӑVTg!o.. ';oUSU**eUOl0K"Z 󰛿p?+O4Iqܦ ;Ͽ^4%7T*-@s1}1ݿ, Z\̭_vCfU!Π߷ |/enrs8( 28b{8yLL=Q_xE  XK{K}`ml >?/goL6@.Z/L_l9շQ˦ f@9\0Ħ>mkwIY=4eN{ dMk}XkRW+O??u< |[=o5oPgXb Kh̲ )\XHqN=0箮gqrP|c8c+59{ IapƧiS KZY8䳍ߣ,S{L*"J^oEz:Ǿ" zIhD'+nFIjs;z$?]2 @gh}唊B/SꡱTuj/5ީI\[`SumJG,Ut.o"&Q?ub F/Hk*(#ɷpǥM1<]$GUo$y0ܮ|Ƭ0On6d:i=6=:?Cc/7LV+ǔNeIf0+މA!zHH YggWu.koUW)kxCJ#.=7*^ԲMcZLhcB|2U͆wNCZTT_yWyESчH;Laex8Ï8~QXFFěc(ϖAd%WʽWR'Q΄HXS,ޞjxI$2R[h(>=kɹ] }_H#S#i&W;u9 tԤ;T,! # %L]8nUeI b:J1W'8+iWF0)ŕDL9DP|BBoTSw ĐL $vc"Dlc|/ ]N(:0vrr;MHH9U%[2D}\dCgHjZr9*I#aLI<aױO}-"zIgTr<Þ2įn7*a^F3sGr{fPn Źܤ"#?'O9Mu ^f𖫵4M׈֕.~5d_ ]9"8?Rą޲vHǵk@pNx'GFxLWϐJdѥr5}Ҷh7< +>G;ě=`,v10 Ԇ/ck'_moxXjRg՚cm@a+>MGnU'rXG8Qx~խty%^18q8|;aߕSDvj;oMwToz8+.gΨvT=Ztp ",5/"R(U8}2оo4 + LE,ca2A 7>JF*bJ>0vya1%OVhi=_ƲR̜ m1lPA]-EtOVશ{[ q듇=bzRunQ]i.u=$[ʾ[+酏x^,Ɇt [PڄP;\~Ũ}<{V TjȲ@1O寃nuYSZ`˟>bOUU\𯂶6IauŜI jy"j\6f3':rDA{}ݾ.֕qBQ:ePȋP&va)rFe+aFuaOYzvj:sO@@&'#SLQ'a`}ޞ5eO0*=zi<\+Wt V'6 68 H'42fQ\@VͿ6vr vz4a>Kd**RIGyM9&uߙC6Cmէ;L>VPNƓc'Dzh-sz.F W8\>h,5LI*Ľ0誺VPM8@ztPZRII˞kj=>S{`U_Nޚ8⴮YghnoJ'<%tkΛ9G_m,Hp) 7?6"\J/8yj$Vc:Î8+;N%aZj/t,"PYu>lS<זnVv.b(K}r_x ڴ9޸E%FHsSÒoaC+լʤ3O&,fF]V4_>FQ?EMVy)M <8wH! z@?1mUegqM_.WKy M28 jmMpak=b6`F٥ ?"vk&:JBDp>O̖j Bd$.'Fh(A _&Ipfw@͠`Tc!\)׫v L7)ZmVrR#qh5"l`K۷h1v2=y.Mj3E8(3N~|UTdW]Ռp $(20*?8o3.LBC; ><,^*ȴEէ ϒ${۠ޖ T<N*z:;v蓐ss0ސm_HmkKi_\)޽5w `FyH^4,TL@:ft~)"^u!$ OmuL+$|] I)>f3xǍc/^Y~=*cҴX8UTsO{)y97AJgmh9?.t9wm-ߪUH]iG_*gN#HmjRC "jRJ޿ʫ:jiSia[<Yryʚ4:wS.#q߮ Wَ]I;6bS=1:4NO8Ţd m*Z* R0|1V -*'=G[ 3|[qI8MzICfGF;Q.?A_`ڼo |)_9jy2>P"fs/-t r@tg͔v Y}}t89S oFkRGAa6k̖[R7צ_KP@u@ԺGQ~T(Jf!b7Q҄|Ѵoè2 ("ą. ,<- %v~"<*ϩʛaMfTkf6XnQ_tq+R[2YgOdό~' { "f#d(l?5P +odk0}Lt0yePx36e%kwPr$۟($$oqP($HfojH" |1I{<@4Hڞ1i$W}]A:rdzОeNQ w^HFpDy!HxnS%J5K?KO .,woȨ' p|{@]E#U&"Y1D cQ%葳Tu7ywywRsWrdK +~M&Vux/]VgT4@=g|,FZg:r[LWoYh"]X?P[)K{ -bRL,ѓv,l|5#D\ .+Q^$SщRwT2sO/Q?#MIj޾f{td{ϦT'#kTw<צ Ʋ}2)ZQnpIS$VP&6j9suDžVk?-DbHӅ ie3eg S]ʐ` }%ۭ9mBYF4@TȺq*ׄcM뱕8e;[RNArKCƥ4#b_1tf{(TƐYpjVBl7K]_ٝyXgǹhJ@;Cv#ɯ"0LSv섳l[`(ŚqԖSWt'dVa$+T͈唋†nV +bZ~IS8 TAån^auY֬A [iuSlyI9LoF4>RPCwWY{–tP;Rz i*x}$ Kv  3^ eW(&uqu3c&5ك*E<0lQǧ8)[jucnl%Qnzp7%} ^ )wt=_Mlb6^,I/nٳl2?#]Q\(\c h|L sV;R\$'rX.s+w"qUm|\d? {Mb}?U&D꺕7l|pNOfg=p@ jU餛#5&R >D8]|IƨmH`&g{g͝%XabH 88Xr!yDZ+K9G!VnY3?gtЮ?;UہvA&Tk'#3yG y[}Ac^N) ?0h xfLpi`izoɮ?G)`(14 DW5~;xiވTV\þR h Sqp4;hrК[kyxBG[Q_Ƈ {&j6tt/Nh)&5n3CI>X.ܟ&ϱ&”sG-%V6G {HZo@) 08NGI 尷XSDbP(N~KI߄t;/ZslPUn^8S)ב1-UtReӭDȏXLa(N;Qװ ʬ&l0iy٤M7r#=QOSЃD~Ib C7. [X!y>"߽E+%|]:Z#T%*E0(5$Sj6~WcNP8Lҍ xmjI6/:Cam嚠*o 07qnrlũp'b*Qoi]iFc\ǤWsP"=u}o &m|Ɨf?Bf^R WvcvB$ς>piT|=CN}&=,0 6kiG?ߎ@ѰN~t_f$Xn{ai m~Ė{Wz] endstream endobj 597 0 obj << /Length1 1491 /Length2 7377 /Length3 0 /Length 8381 /Filter /FlateDecode >> stream xڍwP.PN  .[qk"!@BpwwxRRn ?9fޛ${}Kot xm68 +(j@ !>H4"!@c I/"bDaJHpD%$A $/C8Bd h40;>Pꃀ; Qs$$x] (вF:@\P7p0H$?;a/"wb ].@0>| lCzY#  C`(-@ 0P q2~ @Pgk0j vPg@G16vv=6(?[T֨"ܡο+de"CO Q]3V'  ]+ QW " HL\q@B(~è\;T n  O _@` #6{( Q0/5y`BOd-o?W40S?*7W$bCFѵ߾0;8@dQ]WžOg,m8ǿ nQ_4c(w>*W$Zp׺jAl.UGZv@fO*Po. v*F ݡ_:VP;T00v k|ԈQO? H U^=OQo菄 W B~;(("C37Du齹LџX??N;V+=C^Gn!Ni<ĉtK/>zT89Q/IpS5ɛ`oR1 ,ɟaFryO"+cHK*3]L]1te5wN6<槰A=l15CvKﺶ%bpLz\jZKS*pђƪX;N*NY fiÆճՍQeY" *N2 /\:r$:Ve5^3N<u]}G{9ۦN *"[q[YmO'vKnq!5UhqU\6j0Dࣚw6=72YN=A=$? 鮧RO}LP7+awӲ>|7St}O0$c؀<6mT9tUbQ(S}d~EØBL3Ƴ t/#lԾLVܴ:Lذ4>&?6}w;2B\ ^-, ) uˈvd7SX{0eӯY~Fwoj@TbPܣoaH2&u94ɸ|l9ڠY`YUa;{&ԡ~9UuG/z|ɐ )")' OZ5?@SfM2f Ni5,5n\H;vv;FwR|!c "u`(*Ȑ=P=כG wv_0L&7Twj`$C2XۦV%i\b[EI^b[#0AKowEO,^Tbji3cQ|y-yJ_*Y;OmaҰCn:M1Ug™*WoUuwo!NKB ZHN\!RP2wP5?Vf'X`]~b<J"!F=#Öi9vN%xe͈ءhի̼^G۠HYIu88(7Y?[:h&Aisq2 ;%`'L:5.Y p?`NkcR&K? RQWZܪܱ kwMk8 ow[;Wo^=*[=2JfnVLN 1Z Y2W"ڬ/ij7>?zi>\댓 H~1UR'te;avg5x:䩍۟#[1NEa2$nxeamFUKL ~qçmrNڎO;A{16w- L!w.guR6t3 r4& 8l{dӈx: /'*c#`[hN\,15')CV/ .ONN_ D8`sWTkCk/fv_ rgL4HϭI=4t5o@I(9gv١ISo®r^O8La[\jq~wl6u$^+yK_%i\H⠓jM?^|HO!;qG9[XG[tCkwAL΂/y'BכmgڇG΅G'^96?aɯJ0ܹ\&4ɱ=Ƙ8,vF{G-356SSilJKu/{Ԟ(R2_Ef@ؗ-"ȒgM` B8[6^țI_<)hR  ,Mr dj~G;T?o}$`RlC~Z{Zf˨|& Pk+ u}tKysE FK"-`f9ǫl'F;-OG_Sԃ=F!<Գ,_E0'aoxa=uӵo+(O4v#/V@֎_w{gm}y}WCwojqW#0*ƍ~^{,qY?`wߗVup?E{r}a'4Z]Wh f*1 ӝ_.Uk{f$x`秊&̇{}2ê[zב04[ǚc¡9yZ;ЏUGRlM0<.<5aY;GOYc6 OzTM߮ iw[ED+%Y_?bμ 399IIYVXm^aШ@7 \{[){QM &$|`*n~2J4&?i;cWyIps'8΢ud/zGDZ=: ɈU{,F s=5{`FΆW|qYuh_-XlW'S9C}n'1\Ʀ%4v*{Օ5|8A9  ۯ۬=m6d,S C TĴ;5^&@IZיoEk;?WJ)SJ95ube/nx`ʛәMpԮ l: CӅ5w/2S)F&Bf81Z'm:.*: xc ´)VB C^T?l}[|ӽݺ c{TDQ#3>Oj[?a<GyBΧS#E{^rjsxȻ@4RoϩʺfhS Młukͭ9ąDɭDɢj pYyXƃεÏS76DUN;ƹVN)+t1_ׯ]vh&J].#a$\%Ubm9ik"37ہ%˖rZvqu@PIeZ+6`#EqY:!ޟ "L\tAWԏ*6Xfx+|B`??J<_9JimP o4\79#ÿ6Ak40qLu!N7鹭86+t9'їf%EmGUaȼLtяÆ/ڣTb-,UM_{ |)O'FڋJ(|+, wΦtE%֮s 'hu)S-~Θ'cʽڐ%aLΓI +U7& aNj2vR:DW[e3~ُ_)#^ϖavGisczS;{4JiuL T=5b)іۮuSrdQ~W2Bi4&F+:[R<+㗑9N)ř8C["E--Z 0˷>0zΛ&nCn8D]$ꀉUg2 OeF{4; 9GQλ^U>LI"%q%j8KXR: -L8&@naIJaK-杬V`O3mǠ3GE\oH88,imJ+.^7 z)%'0O15(Uk1 6xfk~*KO ΐUTgceJ8x9qt 5qYsf_e*$Hu&Vg]_s-@=o~]RsvBgWxA:lSc"T"_eDžͺ|KW? u( }8ʔ)eհFD28g-[l{"  V Qt-[$$JO)qUܡ8P4 1KYyI6Lv *qޖTTO1hkX*qIhXLTذ)*/X&_mN (E PϋȎǞ3ֱ7R]/\r|S^ir4(C΀v ^WY]!+!Qi7:p7< =d25>`6ٟs:|(&e*.ƹU _ĭJ˔|?tJ}_L$;ir̤ {!M !X;op# , _dwɽzfMrp>Q'CMɯ-ǁ ?K~b>-u5 "1fI}kg5Fl3yiwe+C}FK}B;X$nal|]m1B|h}nAՊZkMf˾?,Nv)0J$r\.X3 c5WW;:QH=N*7Vchs%*\;"#ݔަc]v5gbEE1~𽩟,[ml!qƫr9̜t"RBqV0 dtۇ@nwԄ^¬0~ ^G'scͤH4 wl}< 5]pc-qНoh-2\[c^CIm"r>{1oNضg.2c@ʑST} LV@v%=%dGrm*r㒋$` M*SM7 Bh \{ |rYo5Dr#wIVN-%Tv, q{bs0/_0h;92xtCK aY 7ԂF셁Z3DLdcmŮnqVFh@/ s<+͎йk]b\'8H2Ϙ8;_|yATl/"2A]94@qД+hЀO7ca&Ch hb:Nh^W >a➝;+zcn-x4S\OF?ʦc Ey,}b^Zԧ8{?hF~ɫPOĭ>4%Bӹ5Ιw#c8)Ӡv"+n +N Nx֟y$iiUZ 0z6;7`ۣ(;b in)mS['D;f&%U$SMM|dHϓ;jrXH_3}"\)PD+{[Ca9^}mN"(ĉQSe9}YogHBh\I#(&DLˆi qn+tK|/Di1V"jKB%z I_fuG7?gr}̽kg~`Ɩhu ̉PFi {HxEV?;OS]ӿa33Y: m<бijbN {?œ>?e.O}C]yu4_&^F:KhR::KdV |o"9xEA%Y"n2p?r'X endstream endobj 599 0 obj << /Length1 1525 /Length2 7695 /Length3 0 /Length 8716 /Filter /FlateDecode >> stream xڍTl7ntoI;Kj#6(A)IiQRP@$A@ZBB%o>9wvv_++~}}SHXeWC!!"`$ Eo7m G{!PH+Po,ƚ颐@-7 D Hʀ@Q0X?( PpPH[F89{coB%~h BaP7 {+gooO%B; @C w*u.L 4vFxP~P408 tػF:pc?BZ@@og( r"H'# #-"~BݼPX/N TS4BU B+ ɪHe;  a=VW$svD 2A"<}*Y`!?(%@'s ncYcBc{ SCu sRRB1¢@aQq0JbE_M# ('Yl_k12V`q0 o?v![KBn|r_.ZMo(vNn7᥆;#a7`n$\!`[s>^X>VK+U0ïBhh;b$@k` HƺQhyJA6O#b@#KQ,AHAHl L@^p_ 7r ` c??1@8|h&(;5p?@n?pyi"(Y&0f sNN_4|}NeYHaU0!Š"mj#`r-.6bVacK xZ<} hN:f#'V *%I~}7b;8#0?(uV x;^c p68Xԫɒ SR4W8fS#Z=dbXN"Y|5œ>zttK \ܞP][u%Of-IĄiqd=MeG?efW?dJ "c7 S#}r"xėqQږ #*A"eS^ _h:ܦI{`s(]/۸? '5]-Lj@&ٹصf״v֘퓸(9>ji5$h(ۤ|E@9)`@tdist#Ŀ}aq~D8$˧|E4IQz9nIޙU+:.M+υº)C] sfXkI8ZuV'lLBO6тV;)׏`J.GZHY'VAstsJ]ˤ^/[)|6%M Q:fg_?uu50960^f5L3ż3q?];^1Iy5,P{R5@뢧?&m6&|P}?|Ywi+}Ns>.?^ֲ%>zw/f3vh7p䖐pa8B"yav|J'ܳ-Y|9+Qp~^ .Kf<}RbEfŘ #'r~Y%7+w]kѺ?J^'!ƈ˪v½u4fQSy"wACo"˘o+^@N"Ŧ݇Emdyl~*wv;6nx상'9T()O׺V:u6+E40ʴK`zr!Xd2WvIV'T -/j?eS~bXsCP*`j_S͟$Y&è|8{=o#<^@ /NC8>ilsFi4AVfb Vsa=rSr [|RO!WjW䲔@V 3'M1#ɗ72xI'\$KOCdMmHҫh<8\S6*R$[}:6ܹ5g3HTaa_IЅ2Cl>,D@Ock?!F~5O-RPmeP}7-͑4M"!NNvw]I'X2u@ۖrEPX*oݷJ@9'pcvpCN;AW0 ՍGwB-߾<&Ԅ^D(T)ƈZh,P&smiMudܭO*6s B­e4朙u4eŸamqҺsHNsz#8;}'6 x/dt:mӛG !4Y{!DQ?z\a<1?s&jmUvfX3,/cxq1TcGs_W }NYK|i1 e{Kt$kW9fk$~=%rџm-tN+sÁ #4-,rFWmOq$j^L *}VmXd8ΫpQ8-::\57x 65{;vSqӸm-lnkQi1ی,oQ eM8ۨ=rbptֻOx󭢺|-{W7 nsǡ`mPbӵ6]P@Nj ii%_L-~_#^,pv[1)yvĽHXń_&XP;"/GpXt=)=ye}:bs^_b(lT@g=T_N%:08n$ D){Q~u|x} dz𞡟 fp^N,8!ߔN߱3X%9Zb~s8llv+%ic7R^%uKg+lS,ܷug4vqmƉ:CC /mabH` &~ QIYq)^s'6q!.ҸYn0#>ߙ#Topd~L[\]lL&`w{'Az&' [79 >5Q(WhCP,'$%.m ;_iCθE~Rum#8QGTD `WLuu GåZtܷ N؊ո5:ha_]5qst4͓ _+N8=']MX(FZgeu.}6 7;Ӓb}J56Rt6 rxik{.]3̼Nv? WoՊptc^mRx(WQ*_rsJjLd]]`)/EXRE ÇMIB_~TDE[mfY,+dʶ뷮IJ\'\>uhTkpU^-@&O;^ǜ3GxWׇ/̷um)X5q} +nupI:bHr7X}@V'"s sJdkY O>?Yo_%R-TwEn TF`V`GXdIKhln;~Np 3|%N'5~3k UI=D>n2 7AR'z{gæY!oέe{Je%cTâE8j"K^IV& ę⌄;Lh{)l.\qϯ$aq̕yC؇Q;Ff\_s9]w]w$.IGѸ3ߟ%'6rP?)beu7zZͼӌa^jyȽ]ל.! >K SZ?Vlӑ-B"ZV{㓈:{٨S mہ FA!}3E{]7 }CCJsYYS^8#p1}>YdNLT9s\&Vh^ϓb&.`vhKδ*g^ű( >!똔赈sbڠ{pLޮöqƆ]+UujΫ6;`&en!F<=6d rϙ&"2(%#*6 o"5)`x[,Au懑PwgŧA !\|{ {7rSᴿyp[b,v4#aN jV(9ɿF7|;:>tRϩt`~ 8;y=jv^\F xHAy^2GSZʜSV?{0'? 4~3}/z[^'h2lg~B~8Q0lͩM35]S%6R}ܿ)%:c$uqN?sQcL$Mʼnr? 3~ /5-ctnx]N'arɮ7Uem{K{_^&4@4$)f)<U%}'>V(=:TF 4z19v1OG,_6uk,*p9 w:Gny<&nķvo |Nc 6 }QY^a XL>V #U[TtF*݌Yety9gUgLs\U */LT/+Ʀ3>/'$_33j:0YukII /JRN4ʶ2ćV=pJ`]5koPb9#!սl#%ql:{N(>yz)vj0*wZ 4?r8rwP2m>ImnqG2꽫{J),r!)x`]1ݘY`Ig*mmIiL|E2p}Їg^% [sdhQtr[?e#4L!}[ߪB#vp{n!mJ]`z-3d{1.PTIIGK+Q\ 6Ջj`ߋ;E kfteZ7;Go,&?OD58ȴ`<{oxuKVY{wQamm[@EGmױbsy$?ՉYLp0)TDV=MM.-f$c GԦAB  s*躉]Kkă5\^`> stream xڍP۲ ] n Xw.5;-$Hp{sO_^QeQ*1ٛ%\YXb <v&6JJu )&do/]&nn`ouXXXXl,,ch7vv@gJ1{O'-sИXyyv@vcK65{SQX8133:3;Y|e\,@g WEc[߉1!P-A]܍w hjgt P(91ǀXXK￈@v;:y,  @IRÅ`lg1"*řdWѼYLhW| '{=~Vk;{w; ;3R0su`ְ9ec.B#8YXXyY@GԒ/ruOʿz;;Ś݀'W!@.h~y'@X,[fv6~\fq9UYUJT`ddpE(Xؙx J^?A \ ip=Nmo<66kiRhmA6ѿ{+ؿO53 @3ʸπry͔A.?rdTwP,,G>UKV߇_)agjotqr=ޟqY w]]zO.N_/Y⿈, v` Y񿈇[jAE:?]gi_flXUIfL縉r]O_mt|߈,eЭc|d}_Te_߃u~ux_v6@s?RH}%+{{zt~L}_W{yfK'4޻_s|d{||ןޙN\&D.oG ",ٛ[5w׉3L Sh}e^qr}DMt'2 u}OVx 6=I0Auay{hLqQ]G3 G2ѕE}@ʣqbm"t@尖Kb1F#Z/t2${ ƅ/Ji&AxaOrȻm< a ս!ѡ{p[P1eG }XuԦ0m'9i*Dd*[4ذZLJNd,p@Nk\*E UTqr];]0n37_.NajEɇ"FY[!`j¶2 MizOqBi7otSyl߬ߺ7"[%O-h#waB PB [URڷqȐvH5+jԴġu,u/]15 Fg"[sr ;m5*6npkQ\ Iiv,O w6/2|JoIa;Ǫ Of~D,Ҿc26CɎy*xg8A *[,}lTVRE5jR5гyфݽW+7kqur_ESklO6#c9İ#lRL{4f޶ȵE;grއqOvEf6}Ф6n8 =B; )a4u<$I}rsLw4lȐD6@l,K8LY  5B}Qcn $01gK$ِ/4w@S>\8i0![ l$Ac";:Gu%p}ynL*ɤ[ؔJ\9?Qb#dpL  af{ ݂O ҡ݃22VhkpzЄf Dwyvk>7£@?5Xrhv6:E-05KBXt 6.`l0N.Vt9|ԯlĖ*M,rv.40ASGI}f=m3rL22B4zDܪM%0nuuxcZaT@={Ę&Lz: TcPL;f޴;p8pUqt ;|IDΟIwGy3'8ұ :YbC 1`I3֐o<(|7HL?cUHp@bCN+N+_'8gj7t~t2xۂ:b=ޖB#u`u='HSz|;%E1qr ?U)Md12[TPW"ey)gko G'i>PRۯiŒVZYr]WFXPS\b,3lYcQK:LЍҭjgƁ*l~+&cy;RC oAz  f/qÛa TA3NF!(f.1m+ Wn!x⼭[$dBuy".vIG(=" nɈ{! s7N'#&x//U>A"89`Ň?%N&w$Vr:҈sz zr0Qgw1E6q8V&'?uDԳU\dL>|3`Q˄NV%lܸe Ku:^z)wxC  6]voA"޾;jـ͜3O7ӬVi|vR R0m_;7>KʼKoI%eeuR3z˅ET{*>ؑvZ{q֯{!,Psޚ VAZ*koiW5e\CⰝB]M'ߚ@mi#]\G`FY˵g@n}ҩ"mYZ&e$#+Pr`?rG7^Y1u;_MhA!wn̰1C VLa辂6p OUDq[GͬqkFѧ쑎1kǝ޸E U {\S˸CEq7{35y1B㊅ wI6S92][})BdkK3 H $69LK|N}PQ0'=L.ٞ/!:# . ~Cihrx/%d'̙9UJ27Q!$?,dPaп/4v2l55m2w 䪀 @,34j v& X% "85_,n'@i8 #=cAn_AYM'9%gKV~1BT&E_Z$q 1<l_tK$n N#w6$͠-*Xᤦ) &%=_\ bm< t8ϙpdS1cJKq*3bf0 :Pj񅲵\+bbπ1:Y6j܉=Tp e)T5E0h~"Ĭ^wy'f^sK{ 0 ;D5 cJԎ13DYCsI[{FZ+?ηeLo%8R;Xz{+eTQ7-zu|n, ! |_b]JMT<`DlYc Pl?\eZan㑆 ԋ؊8꺛|G~y /XeLZD}Kh?ut(d ZJFMb7k~#4ALW:Hpg˕D(nw1V(awT&Sgݫ6C+n:2*R**R%qBF6]AT>n (9zw9(jjp(WL/91TFsjѼۦԟu#Qi)Ya;HnK2"2H/LE t 49ԏbitbe[2p&.ONaViZݿ]te@$f;/P3ֱX+|K2g蟝۝i%SFXC.(+&T(ū5NWJ`%&7uxi?o?@&2>1wyu#VკHؽF/(GΧװh.J (8oF K*Ĝ$ff,$Kb:(Q >=wÉg}6;OnsIa F9OKzdm⟖"RV4 T`ҳv]nON}ā,R![߼.m ;l g.2b*'iI9ymX}6'-MfᏋKeHhkFЋٌB.N~d\ 5\p8fSO{\gKnor JDO 蜀~M!K{UN`tVWaK^[/|9sXW'pFlp~xT“M.AySuWqg}=+2"%]B[TrlyٿQ5!"UbƼy> PV!5ib=B䡜[': ޓ8t呩9zDL0J}"LA)\F+i_qn=2@'2 q-[R/>1_L.^&=UBRq} nƍqOXRЛR hAS{Yy̆ڊסS'2BF\H-ڍ]Pk_]8,RC ^Lx}OO 1RE~ es(|lKEaw0F`Wc5i&'hGR2AAŕtU31z;-UV[CA%M~1#}Tt)Ӯ@&2ى=k$ʞNhY#V2y1phy gBw.r:  `gn* /\`,iS"[p1Y!` e|w?ˍpIؗFyS3^e+jn/w"Kו~YE:ZWpu!6rri}(E1@ϊcjACgӆ) 󙿭..&u($j't7EվlbVhjĀ@9cm>B%Tz\Yjt|!Mk%WUT|iy:LM<\Mf5qZϼg ۨ(jsP̜Ն$ut!ks;C[3_bMsnǭqȮi?|qڰ%*S^`ff23`hGs11bŲJʫ ] Sf:7#\JM0 O≂zӭpu)̊<\>G1%n3h,!&@i lˊ͓lLx!Fg׺Ee .g vReS_i^ZPQrO4)9م 4TXu6/PK Fqv<&_fխ q%$xyT'$)H2T5aJ4bFJÏ쳠wzEMJ&<Yuc?b^{'S1>`^}b}|Bg*Vd<"~G֜;tqYVz>Q"*f0"'4GC&m D 1'J*H^ v'_P7Nh %I+ؑ\Un$tS fNkG<|2 so*Omg$avDޣ鵊wx76ke2U$=i^guP)[ڷcM.jOάZ Z%1VW?5rړh}0:n`h(Lz勜F|?8#Ǘ#Jˉe2jw[`>U] Gk'V@E?UZl QlFMz|IACxkg񽉢+e80MHLWiђ+6 y]"%̠兛ivC7:n828lGԧ$UgѪJ2˂BQ9EXz@uTKo=ۮJT}I5Xl5NpV8\iGV烙".||s'JP(b.zR'uOSImz|&­s#ht #bqi=`8C_si5Fүg\eOOh8Mrsm6}V~5M&"NC/ÿpTTor-yR߿ |i@*v0,.VF])[ֱcMy!&k-yG~ob/;CwB2//ArKlo>>1}ۯwN{?dK[3>k11RQ)ղ@}@cq}U(fNcpXQ(,|XR'dNr`D264|g" ; aԸr2s+};4 ~.FD"0--TW5,x5s , - |8b@C-D% :1L~ͮ-/fyXȵz/x9E8gq1i< ꥫXORԤ;0ds}Oux̩^dΪAQccm= HC59N iD> lsqy-{#l&a)HYwevJ~LZsB>Uq>P4w=(Wxw72Õ,$${=u#-gT艼uxvE+bt G: ئbv1 =~SR%=_gjjj@=#KDwps7-|FDy`d'Y%&L lw=eS?Vˠ^*1E8F*JJRzܲ!(cӍ׬6ez6ZJǬ7u߻ZlpK&gԞ6Ps]M1h[bn79T|ŘhtzxM/B+uPB6٩ZpD%P誖z=O=vWn*,cn:oJC"£˭tБ;kڹś3-⇝yj_$F6U|1j0͟dl#<"5DF][Ҿ:v@t3 l-|p1Y=/d)@9Ձ6|OeX*PU S7f2pMk C̗@ߗp)c *=#%f_sT`ӤxVE?ۑ3Q  pr&Uθ8eb)?Ԙ/!=4p!1-5l\j_,Qk7>9~@wS(5 Wa¡~xU%BsW-ѕFD9$s+P9@ @`w)'v\%] 0EM\CFc?=Nd/m9νsN&(z$xS$ Tu)q$яNӘ .TWÉWV`A%Ĵ! { @]xjpsPutJ3OE?ud1R/8|UdGw&ilu8fnrv45^#^u#L,R:*V;R3m;g^7ϧL }θAUx0R?m6Ucz3̸{(=:q]Зl4%{sP0J>!?d!mh}-=m{9*$ԅSLqjYȲRBMe6?YguEjQ۝/6Y)qv tG\ї9 P? |xVβ_Ml+ZfFȓhAT~6!% J!PÅ藇қ}t{3'~Ann% .l{26ox2* 78EuYJ禢IJ(dD nUW[p= 5 ~Y|!EfB eII77~O.6̷SN:,7iG̮U5i0vC!=DEÀ?,}<\AOKhH 7$V_T.(G/5u(,h l*,f)i]I?NtD`%KQNa@GLhȢѰH/qY ,׋|bmAeK5rWOtUqpN*lE]lCܰQ5bu*<،>wUbB9 #O +]?'Scf춦mIkֆ,tYavvP8H''`MGSM&+m^k_ l .s? 0+O3mk|A[ĵt=K~徭/1x6 \MGyO .Ss4ה.6+?>?qLSnjGBs3!hv'"o :orf|C\Lɦb'2t3/UWSb]+sCbGm ,dyJHp=vq=Gz֐Ru5jd*4f~Hh,NAK!;&<9ß%x#fM4+;DtyUNT'~WDS  >B5 {ΐٮ#bXkp՘@:'/\_ ʱ6f&uF .XSo(6D0q!]3}"`\X3'5؁l _pok<ΞH5۔hu,ѷ%O.֞6Z4ݹ ßktip'}&B|z,js`48/iI[7dѵ|}lf4'!;=QIIQm^4[\x B\n՞i{ZuWi@di]o.2BAyK7!BHv"27PVdeN𐤣im⋖}"i vb\}>]S,^6w7A7bES(Z=@_|aϰWis) UN$K؊bA(t${ ByJd\gA˴SD #OBRitnjUn֢dȎ}/~Kk2:m~5G|L.d_vDʷ'EGy؄Dy"zG5 6g/oe&:o"guu8 ]s8IO*͛ˣ ʓDRGh{<, Tc|7NE\to2^D~fWc8Hl>bIz/D `s9- &m[r?UN5HfD73naUQ? i40nRѫlÐpL ^V`ʰK=dqMV2Gats=\fH \&,bG}s ʧAdyʆR+>f1X09ؗk`*y\M j"gۤ杺>5'GXul+FNg }Isv X#IJa @i%0l9U ۢ~3دlՉ[H&D9(pci~5[.s<]jU"BHw '\4]ai@Z=lT-;#J'ȵ3T̠R&wKt3sW"B|m_)'3iU03ozm)r#9S$3D`?9*Mc IN^:KxI-ÈEBYGQ}D~~|ف3=vo$i?c`пxp2fT~>8ڮdy΢52WRS!4&P} dnvط$ ,ߑUb󄆰PQ<2󢻂j {XuhmG/Ik,, K;v?a`;VǢ1"} B[#12R(ϡ&v8`mM"_ c-n%#~h洦(s7KApKuT7Zq=(b{w+Flڈ&ҧn}ђi!6LOzw]+Wμi)*sI3~>ʹT&ϳ1:' P ɅFs+U5pbkEMB<,n ,ro8eؘ\Ԃ.B+k8)B˥ޖ:{CgsF"I26ft.^eDɭYkOe+nQA}*1;@< W/;جy_#O!ejIAegbflMI6NMΨOIȵo`gR$![вFN |ܟHDbR~;v/'nVS% &[x3.c21J EڗsU y˯2~^3(JfXe&-Ջs0kZke1>=^TX1?ÆtІssb);_q'o:4Fa kIrmb;oEV #ڭ(ΫUVyFv9*e"7ruchGzPB^76Bmg@Ҫbr4ً>̣( {>&`i Jᚷ$;o3 đ`Jx}\dz=$_zKV7 0VӜ[]]IjZ _xpANou>K͙5TP d-hn5rg ؄LGx>Ϧ~(?IX *T)o?Bt4AaƧ S'ql{$.9{D r$Nct7~d5Cذ9 *q=~ڭܭ[C^g{=},հ%!hOɤ](;h}5y@FDG^k:\/Ҙ4{a,BF5{j?*ԭgg0\ Tڸ xuٷk| -Qµ\Ÿl! d.n(1s>5CA;mB|R'[|4;H? 1b&m+CQ|瀂5d&/I6mi &?ۑ'Ax8Xu1"!qY#T 0d&qIAřV%W(qc»uR.K"0Ml:ԊT<&h6!{jnczlCd'-<)D?Ԯk!HZNہ`f-Ncs,i=V)K8t;_ڲ%q &o>G,rh֊@cW8'vq+H*4os(YWY9<^ՙDdz)T#帷!gEJmvQ`^d CǕ[$kU]UiZQ/C:HIC-هN<`70_sWVg*\CCGUȼBvvCwŽ.WfRqF_\R2NP0X#VhuA#XU|$Us?Ņ=`@՞5WLE8HIoIOs<5uiH\GMXfweS0̦>P/f~MRY I<;(Al->ʎ.:'ߠ?iK/kٗؖ l}In#|`E@ fMe=F` ƊmQr S6HҊo i3pZXV9SM]OͤbqW܏ܾg v7|.Vԧ(E1`&P9`/,2E[e1U az[#(-t=Vd)ғ}6)1½5EOs~)Uy*DA֥DN|MU:V06=\RS!wK6o'=>l5͜$ۖ4LmV%>ek)0K,)y&pecbpDa6j> stream xڌeP.Cpwi K;wMp;w  XCf3~_9Usrݺ? UVc1w0J:ػ202Tyl̬ W[Rx M z1gLL f `app23Xy n2(0d.b^ K+׷(6p:L &V@f&53_VLL&v.Ζ4@tv~ P4U#<@ Xx؂̀.on@g[l<@h_x&lbf`hbXl%IyFWOWzoC[7w_$ET&o:3g wLiޚ,ao.`gwu8hu/jcaw nL '7,Dd@W333+zY1&Wrd-~`Vd|q1q\݀~>TAfS%h7~3x,ߟ>햹ˤ-AWU:x|x f6Nۃ߿YM@ɂdߺ? g94s):m,@g9?_.;I7[ۿԿ?}us}}`MW9ke\M΀ry͕AfVrdTvpP ,Kvl. }K|;4)ao`trpLMF8>,o\\o,ϓ$[70A\&?$$XLRIz87N"nf `R8 vAzE/yәAo:?""7XG[bgߺ_ַ"&hb2-7 @7r[77?߆ohś:f#~xs[ߪs_^K@?=dg_ek]qhnj/F6?]k-f=c.h)ǛM\b%`yKO;onocq|KKF?ɽ1y ޖ_/u h`j]q_+B7)0Kgٹ6&+xHH/ڎ ɳI[#ld'_F{K߰ND2 >;j@wR9q#+`{Ky6 |^[SٯCy!V#F?t"4{ ƕe,z+l"i,[küz:WxDӔ>i8>ekKm$Hk 5 h:.ݼT@( nr]y 3VMQ4k Btfu: L+`4)'cb]+"[~nDYG9l' <_826bcZFuZZ?~ʑy -EN;INpҁ=[I: mm)[H"J瓸Էi-̆&VthMl&*%J#Fc()/u:* -Eƽ}}2?b瘜9n!桡[ug}雬1 P]rc/i{Ks Lzà+A{yROr@e]rF*R>ƽJ O 3` 1#eySB)J6([l-U&@T<$2nXKvW/T;A Y͢Ub"K6xxiH/JW෸tE5XW_fW=<$\?'29ruK2½h;$~ y}D޷CGR̖bXqy> [l{Cү53]24%dg]ř /*0}'E1A22dǷ`b \Eڽ'/(# 9 WN8N!mFݶ;V/kۀi`KqRsehJkAB;GR']||4,5,1 pCDfAs])~!H|0 ^#y e˛gI=m fS/#b jI&%:L#k5hղU[XsC@e!Gr 'q_(@NunB^wz J%22e7A [ęLC; aݎ׼rP s2bEb6^Эk֜'zרʏA.F]dL#;k؟av3rN4{- mVڠʬ<$+ :X )ӓ5qDSJK AXYZ؁uY|.GdGw;Dʨ+f.ZI2~ y>E,N=mn3EO 7-P[h9M/qU022;&#ZI >r ʗ2Up66( ?0*_1ybQ 釖3F7 l2/]`s5dDZm+FOXc+K,*9 l~R I1 ph/э}5lЯ7v-Piۇz)jBRJuĽ،q`~FԘ-rϟSR"S02vkFGqLm?4QcwMX|ӭ/ͤ7 tx@^t*:Gi#An}P4B{<=\6pԸ)0֏x) U1B͙HW A+!|`ER_̨>1RfsRϜMY䃬X63D |Eb`P1dU 6thAy*WA5\e 2` ֑ k:ZTͷl}D3"G]d*<2>'jmmbৌ%eǕA͚O%v3R!X=ت:YGҔ<, >ЁVK>`K/uO֑V*'^/nN<3 4I-xdeQ:@2ֆG ^ˁZW*=Z*cz%n_s>zKvbg)0~@J\;H-:ACKѡ7p9|1/U7l({40ˤR׮KxnGY}h@,LiY::,")VG/~7;έ͐ 6tQ`; u<&p 4E}y]FT##+~1FIv@4@T[owJ 213e]{4L5dP tBOT^ރqMa[ӓgყnW,j 1K!0.$MzǕI%:XHO},Y'5d6RZ’j>=z3bJ1^\ATx7ɚh˗q1&`hi(!~%T{فS͸(c doUv}]a+sF KŋTMN7z&i! ׸on>'nݖ,Ma:6}ݬi[|ӯ\=[QLzfl!)5*%G1W؂4< 79(w #Z&@z1 6do.Pój;ZɱTi . !$])١OmBMm. ݅"d%7,6׻%',։5~IG T>7BM_i(rFr|7-[1yn;UtHJ,uG^ f}f@tדd!\M8e 5kb<Y#nujNH/Gɨ[Tb43) JdO7x"ԁK~#[oE2|: 2wz]Riԓ9 K5ZPFGC0_@+'dO65A異W+e$&?h#1U1{ },k~9*h Ɓ/Hx`…7DZ|F& G# #3ps3jgiw@ʨr4k+]#"McYJ#lNKrA*~)=~ujjU638C^q%/C-N[xMiȧ_)ky[̕(J9 4 Rn$*cT00Y5!|wE cc9Lm6ZQ۳eܮUʶ) wD~0R O-p%DpI"^)9@A%!,>єYBG^d)`l"#́>ryi&]sL5.`UD@>9 9 V>&W@T[E3)S^n/t(֕ ԰yI8јndI+D({ܦt$(yam"mopfQOexS/\m*! qyknZ~~wu5Kmx]q>: wTksxARONnK1ZybCLR۴〒$?`H9sHF$XU]7i:,Y4YqbtBרJtQpLٯߧ%@)-E&t GlSX(.!=mή+x 780iJ7|yN]N?G"*ťꀪfyXcl*%kNPgf3 Bĺ<_щK۰BejW1S*,߹Ӹ[dt6S iJXL rw&7t%<{%L lSE˦i2rWغSa] ZIkV ˫"5jd`_ilW1ǝx,##Bbjuo/E"Z.EgL\WʳM&yvʣAP@=$} ÚC4`IKnL!(1\,` g5UF"!0J24Adn?luh،q0lj  p,PԌsB9 e~(Q,6Q/W9dlT,\T }`(=V:s.^_?$'>ߎۼy,QL:9Fb7v&1Xe;uG1@אHS`>K&d:%JňjdҽD%wsO/ݬ“ifyINz;r"$ =*-ԻQ4^p-TnI,Hp6\"2:Ðw@_>LNts2tTg0U0^ !+.0?}06goe;et'6ӈ_z(fo}nm"!bEDޜ,bEN]Bhdm IDQq ;%NhVJ2:+[.rYבXaqD+O@AV#ta. ]9/-G/lFXeB)|^q  t9Z"C@O b -hh&$Ëb!Pd ~\p1f@v,4Wk _yS#Ԑ'4zȬs2ˆM ;S|vRK~7I d~WS߉P:~EWlDРph1' JNZ5K|QrZf>t] _{>L`N nKիii7Go,PŰM%)S+|lGAŗm6(?za.ggy]Äg/A~ DHtOI2$h=[o;)p#:٥u&-nA t8W%*wl:o6@D ȧ34 Og!eD [ӡƆ>x\y@7!1BTn07CQvl}uG*"0}n IO0<?JfCŮ!}S^EK%}SqbU%?-Ynʚ )I\ņ6 :J賄=h'0 \ [P2`H!| ƜT ҂՝qx^~^t0剧Ŧ0;4[^ݲ.|56,҄ͽ6,hJ/5_Qto,IOGZ?Š#U"85L-Hg_R?t檚-߬4w_ݖ (?H]i\y=k?X@j +Ikal4K0^|78 Lp$*J,&7tc&LKf:Hp |_uomD|F L(\_+Z}Ar,Ywr!` ws\|a 2D "ȣP'j~&ÆV%ӴFjuZ9=6_=C$ \5fOXN qQI`Qa_o$!)h%+g0WE6qyFCGp΅C G,Fy16 yO[,|{cX5DKlЎWmT5;9u+ :K-޿ȁ['BSXZw^~˪S/kdJ@{oouQl4V"yci^<)F[TzE) ET~m3MY ϷI1'ԯHTw=_1ދp63IJeiz(B1-A3Xat%8\!H +ĿMb|4; "bG&n|VNY}GE@Bnᅆm2<0-əy"\J$mwbiS m[W>gUh%˧4fz?a3‰%r OuCo23":ݧ^Ƥ5_?2 qRэWB y7f.'N1 /gAbDk#** }pQe- ?1%DP򅁘0h3MA υ{ :PyCe(~}7uCxMbxQ`+){`Wg$g`; Ee~Kfszߺc'wnxU?XQӎ.@Ÿ7 kXgƮS"ZV}+ 6Ibo󇰺, LP|i?( *Gσ jv ёYs_װ!Hbe5ly֛胄evJ6p~dNcz$rb\X2ڿlGf_aZڵ7Կt= W/@It_ᄩ;9gˬjm/ۨ̊.4@JZt<^)dl_9/\N Ï͞g 0 rEqpߒ`)$x:h,!4'sx$y#2cٴ߆sjko~O A`.TW9ZHjVg6FaCI߱ݽ1U,WB|yA,3u`)ŧΟc˷_?94 z|JVՆ$8R|im֜%UκʅLЬuw[d񗚾GAH!I Q*e"w% \N uiϝy4G=_5yVM{+xULޢ+TƂ*R; V H8ux1~cf4z^MH¯3Z~/(R)+OT$ 4:-D Ɇ@cӸ5ނΰ[4T>~8QIe"Lr|wvui^');Wu[+7d䜠De99Ż/0m;͂G,UO%JSB ECiWɡܰpl*L#Wbh*i7:]ozRgƒ׋Ul+j憙믓V"R{8VA5D<[5|sDo*Sf"v򥥃LTq&4^pțVCYՊT5}؂ZR H_Y Pቕ?q<&Gk6 ^һVeAIaJ'm()"&]}on c|MzW iCM'e:w>PRcwaoAzh-U" YQ%PڍDQߚ%}e59Ro6=BΑˊ]ԓǩg #VЏq+Ԃ!CECbR#Jm<攨PO2:L C\c{J7&:t>R>ΗBT\f %DgH#9Brmq`b;VGv44I< fs!8'"GPRW( 1}RxN٬Z<;<+'5_ɡwäzmm79۷Bn ^ ~@#Ϭ) o0NI"Cy_,$qVkZ=~aI^w wЙNfW.{gza?AaRPZ2D%|7r':<)ьCaq?>[l}I9 sVd\}KjH3ZcZ^='4>ϭ0360P VS?436"Z9[YfeSZ 69{S,35bdtMr $mD[nX ǿ.gk$d~0uY&;T(L䫵`1-1biBZ NaȶvTZ)3n-)nec\Y`;&g^yk<|0zc5?ej Qe{g#rk}{dFx0u% \䔒'FXrf}^?K$ug 8,rZXL:ʶI:d_Y,ݭ,jW!m&er>³*XA˭ \~sp/e O/yQtѯ/yͳ89 bEew.f?٧\"rtU~#(@X*JSjw'x*,zRʼnH FNJw *{tӜ*]:¦H1 JԹc{eJ=ʅ^XDЄ,_-zb\x_*l_t֒"?@%zP00%]Q4n|lI4ȚhT[vm+ U!>`2!/AW}#ky?l i!-i+:u66T])h,,8zG$ap剷EYNuN&째r?&@C?Äz$t EB qn OW*;/ic虨ML9%@NIN Ξ]ZWnZλ%WDk䵛=ŚgQeV82m:rRn{}=f =eԱ8) m4Kjr~p&lSb6pqاno(si[+8jv28St2^:G,z< hJ)r:whC.O)tUE烦c8y}-!;y,ؕP2Ee%969gXGU}aБdlYgdL31 /4~;ɳ˩ޠ q>>J߃SV /`'e_w]+A9Coo xExF/[3s0Y,!v1/"ܩG i*1 J'xCotDAl{z`KjA# ,pD | 5҅VˤsKx q,7Q1n^X^oO2E2ί6 ,5aZ_aXE KߴH,9<6Uti q;O1 ήʨuC::05h@ aQKIM& ʮGU>-4%edFⲎ.:vC6VR&?jOP7FaOZ*\q=L) "4,?3lE.E(0͒b$K]*E]膉SZ@<l}S_FGS}#N;/^SazыZ@^`vZ0G=cC!*Sa|ZQX݈'LjXTvSc`"]H.G1p|ß:<):JvC|XLzxjiV )fݒ Z<mfA[+`. S9[۬ȱׇ[dp1M^^ grG}굷]j&YlLx“_! ƾ9}OEG1E[IRp-[%R dNU w#ǜ#൛'~HP,&Df7<& V#G\u0o/9^7 #ayT>O+S핢8s Cة݁q4eKoRI]2귽h&wog%M Lhc[+.NV* j-.5l(ف+~7*buNcI)J+)D`8%a1̯ 72Q>T!16 PJ ?ga*.z@9ѯ4,p64*c:H3= Y0 4W|>XEAz`%` ћ.#C+d\N1%N2v+Е/r 6ߞA{KҼò بAhnsw2-ԍºqe|9 1{S-hf^tdzGӳ3DKuƖ_ʂ4WtAw:۞ᗚ,j!>&d&5(@/6BS!22~Kk5{"ynjWgv4 Qdl:>G.sc vyP疡tǹ@`GxY 6.Uq:KyŶ& [KUs#vOpj=|[K"AWAUS>>M1c:}rwpg{z-'7$Q݃ʓb *3 iu.0aGg ={pa _PukIP'8aԏ|;aԎ2`D]~@"R Exn]I#a}J*['F)iaFAⶸف^-ITM,~]Y`J*[<)S7'M>XN`ҀKK׉׆>2_qA쫇蛝1Ƽխ6AGlu^,Rܹ4(ƛD)+7l"V,&‘ CVSxg y-dp$y W2ȟZ>~Wj.?Zqm_\}e-ބm 򋛶fއ3NJ5T *I%kUWofjESerh^0]SW`NOjeܘہkP2; _JZL@D_|g֣ 9P@,  endstream endobj 605 0 obj << /Length1 1710 /Length2 8542 /Length3 0 /Length 9623 /Filter /FlateDecode >> stream xڍTk Ht3t Jw 1CwHH RJ*"]ݍYkvYk4%-a`9ԕ( V@ ^ jGNvvXH;A2룡2 Ppp@7(!Y rX9 0(^ q}#ɂ%$$ vXe 1 ]+0'l-4.`gw%W8Z60+W3(X..nPK31;@S^ epqp'޿AA0G XAU9%WOW6jd{ Gߥrcb qtupWcZJPW_@AaP Ն#6Q @ @[K؃#`b~Aqn`??M\\K+l Q  0>' A5}Ŝ:Zjʬ`|B]P+@j韊߱T` 0;F@>v_Qsɹ3eу ^[<(W6Wl qs_+q$9Hlqk^k4{szع=q()e0_k9;ЁzGK1pr@a.V0g_w/%MNIpG?N? V |,pB"*25e2Ǽc^?>uy~]:=?{-g`"!B$<7W["\s}lP_9IY͔N^yg.%q^:f9kSZHR"֞%S`"2&Nݿ٪|e@h(ġN&snCҧ[uol%=! {%MrfmqkfOw ibg%y( uv^Lz8)KDNoc~Y)O"|{BStHJ*( c3x7"~l@sE]9odUB.ja+!egO:a%o)wuGo*)dAJ^i+-em!^و`iN]|<߽: F$Lw_/⽲B! -OH|Up$Sh"@6/0ח%kH Dۗ}#= j =OF~M4ktd`5_hҨXI4n iX[ۘw>_|yU Jcͤ.ՎU2=}X̷͋@ߜhX7YۢW/{Z輚Gsil{zf@ҾYXQXIy)(VXeH;+M>0= `%6]4Ѳvl1!PSs;ֱz_/}XS۵ ?zIphZ2=~SR0=Zuam #KXǁ]ӴDI&+RO2i%B<\`RHeb깐O Tq!W닏ܞiO%֠ܢ|L;h u.h)m7 uDQS$$xϼw:5J2l<&$85۲rCT]4ۏw<+Ѓ[달8M/*d}x͟Wœ)A3 q`bŧ"_n0{ {8Uw,a-Gʥjs"Ni/x$~3n#3"?wߵ(ڪk双be/7փ{Q RR+aQelC;=4*8tPӁ(]쎫XI0^9~ֶC-Jd@Ӈ\1(m<RQ~< . (rm\{ ` VXkՔg*^Ny3u ;(P ǻq./~&~PH+3t0s/$xu&#@a>@.յ{`0E~`!W9WꦌpJ0p2b@Fg6ԽpnX+ d;uZ`\pvzՉޞ!g^r9cl7>ОT,_R-j&wZT /J2'cUMSe7WluҠQY Ҍ+x&y͵MTX ʹ*9fTMu 91fOɠB@1Vmxt3<~9LVďYYj3Qc/m(5&C<.iczW0u^-[Uf; eOTIswg>0,|t45'BOʓOƿz?+zZr]+sy\t}Ng.ű6a9V09Y ݬ֮NߒfW|`.Č>Ng:qAM;q2"IjC^"'MXu=?KhDU糢O6ܿ1L|={pW;]n:/EӰ?F %>8fwUzn kz{ %C*gdiXZ?,H aD*sr2V»V (|񒔖iXü(O?Sqʫɑ՘:K%ѩo4HNǾEc1Ȇ#u’0$$eT_-e5= 3'!#,Ɵu&}݌F с OŰNm"¤H}5psRN!/A۴4 P (A(+5n?IrpB9Ⱦu!AE#tf_9h^ DDbrP'Jg)&K5 ̜9us D+MqPqqvEÃ\˔ oܷXBII}UgViW Y͑'7|Gێ6Cc^Q|2yӋBD *\dx[;Sjm5X_2xfC*N+q]f_~C4F֓O"86F4H"*5$T3_~dw<Fƀq&q{P1"ap =qG^|զs\0?*?Ö,|6`qa^t}ԈڽX;>r>M6N;A~jcwj_&RgyG8*"P= ML?$E{vV%/=%)ߵlӃҴ ZO /h)D'sTTa$T\o9ľ>#C=!00{- ^St$]0GG!HĈqG䩵o[RZid6fM r鰎f(8R6N ۮBpOeg -F G\\k@0rn~_|2)vˈ o##xz6~ h)K@aڨ.&R&$#oW7Ԗ D3m3Oͯ,ϔp~q.JuPS=~ ff!RUk^nM|ɨ OΝE3ld9*Տe> .GczY^&c]Ys٧G-b@,j`y1-KU[E\X%.y[w֨'f#!) [=B[TRZ6cܻh:3͈1ѥu[f:ݽl"4{RU>COe;GArHp.|JǜILٮ>;m=u@1rOլ0 -uA,_n~?ltYk{ONO%YC0.wed8Y2ZwJSwNPvz ĥ9}w^Pgy/cJ;ŊOgI9N:|䚘raiU{8IW̔x;Fu.ф^D-\"zBśUj+3z6O\Z'HT:c]ʹo^k*k>Ac)wp~,C^Z*5Z-`AH'H1H_K\ >H:=}P75B>򦙦> 1៷1_cs5ܯͿc۔|QRܠ}bf֤_ż`g'ή,rΜҵ GiC{KUF$6zDG)aX:κE(^@p E5C t+%0g([nR'.-xd2/!AO_\E$ihO!^(V.fIqt4?Aix߷< Ƽ02}EPey~BL]ђߢ%`Џ#%OX ;!ު93[.y7-[opڮn~d eىtn[9PQ،O.CoްOݽģb5[d/L49n<'RK_NjOqi[jLsŝ ڹpmfyڐo&>MvjNle_DtWRQS1?QC09uQp ԙBִ1t_{̝RGRrSӁ6[F"F\ߣ_B#G+W{l ˊǢfHÓOI†iʦn[&ض` dDDytW5f}y $fuNZ uZ7smc/G|>aMxYior^T0u)ҚUlH Űg"aJ\_|/zCHF%ˎ̛ Z8 : kz^^;䱞~JF!aj;>54LW|FQ51Gf#@BVc&݃'l4,@}+#x`->7o,"" 6qŠiB8h9J{ͻi|079Z". Ç C" '=-ݎWG X|Pt$* ^ӎJ}\`PԊ*V&vBoL-]Q]|~MδtNQ)|ɄA\V8径9ҢX:z\S+~KK H:Q-?x)qr6Z4@mF{ {xeӾdLɺ\:/~z/1M4$ ovyo-)G %m"rgL1wk5#Ɲ RwMA[lj]M1Ae+s9{V6ڣDjf6#e"ol$Y%6PA9+)Mg+Df$8dY(f-Ycm̐O#vј2.CX7"5"-Ӌ  bgY2Hũw8Aف;J7"6% LPvG1^]|DiW>|o6!`2/R˙zB.K5{ڹܡ$5f f\𛖢IoEoۦuIE]Uܪ`ԋ7";/Fޖ&#[q6i|c|><7SX:+5]^ZUo0CQ!-VK@=\?sy WGD[^I+v#WF%X [f踮>ϋ=|u(N$|mT%ߛ0J go[y"ثqF9=L)nRjҦl#4nrM%RW%ޓ=дY5Z1تQvX4׆堐Ьmy, (ǵbw/ %syAH;اFi<:Qߪr>*i9=7͔+?x^tu-0䝏 E).Jꘚ&}pEdT=pT1^'0߬fR5RIF12yYJ1B{kwD*E{WٞTZ% %Vu[\$ X9ŨXdfgq|MbؐL5[_(s~ [ r0 +(s_`7I}Dg@H6K>2_2j 9Q2q7SAx' IboMyW~ |r"/=AɸSxY|WI}LM] W1S>==[ "Sg~6wd|pZhO9,,q {rT mp.胖e^4 kuA)5<1.AR#WbRPZ&Py|qJrY:iXc? endstream endobj 607 0 obj << /Length1 1443 /Length2 6603 /Length3 0 /Length 7582 /Filter /FlateDecode >> stream xڍTS[6,("E)"M M: wPBH A:RDH#U ҤH{)z}k}:ksf3{?fi)Xc44 b, #q(~bvC8AKB .|PPI ,7ր?p;+aݱH[:0."!!;Ppc0(Ѐl+ (@Cq*)m9J C1XY.^tpc5kd@3?1;ot+A\X8p@!apE .V-G8/_^~U 0P;m (8ΏsP/ 匹ȇ>"QP ֡|0,DQWmVA[+ah3X8b=B ֈ_cX8 N.p5? ?>8``wwB~/ft81HC } pXmC 56H4?/p_cn)~ߣ Yc(࿏X@u?#'qA0 !$]. EiO$b pZ xn.^gN#*WoG.(8_ODA\w! ̅ 5\ 5j86l$YF`//h6n `.?/H;PϿTA0ֿd&(" @X;1K""'Bp4E p17` X `_E_E!`2͡ pF<6I=+}Z{Xpەo\} H:a~'EKBڮxѼg}^{_MK]RiYPK8hg/PlG0Y^1c4|($n9y:d ƅ+ԯ㇚p&fX}5SPdābmݑiīΩ׭-B{D ݤJn~%EJ&lf6S/I]nK_P\''9x\S\L|-.Ig(m~ڳմsԒ'v$aDg~ݠM̦-^~ߚzMDkb>WG{ͤkƯC1TD|I!DZ1<ݻtxza6`6UL~C }" >+Z o)t"? Z8S1w':[YC٧2AE!UD!w,'}- E+Jx흍8Z)cۗoY[Rvuv}|< hpA{S znt.淥ze0Po:.jѮu=﷌#'KyK$9e5t8{̗%0YI.ݗH7TǖtxQrW%cFTFlerU}ܛ%;KrC'L9+2TSQO] p*%Xϭ+> iy$r6>/ u3O7- \ޠ?kܵpQ%V:|ivxad"8wS?lNtkތ~ANxx\Jm{y=4CzwI[thmY4)x},h>BW bmкԇ_ͻ'Ǚq1z+!9W_t;k/c }z=RS^PΩ*3ڤлrvwj;=8=%LFj%ʈ,#hdv0`GU/IΥ H.a/yCp9 zḻ 5мɴ" K߮S.`44 &Qg.Vq=<ʯ/bضdac'PJ0?+ {mVEINĕ~OHa~F>F:E.;Ϲޭ ӜEf3#F=@$&-Z[4*, uB7>Mz$蠽lY`rɞ|wQkYd0΀dR{?/n7CY4aO@d:tʼ`iY˦L=a`yEuzϸO Oޫx5~/hRU]3 nHQ6~ĝc-e\P W XrQ*~;CDAwuxey- ,q}f$ PbI@g`i!s^Iz̯" x6{{vAXUѦ萦Ws}o͇EHz3q+Ȑi[/ؿ)lȝ}'^9zFFsݸasOτa5}\ScM_O|zk4Ք$e,BV!Jck&NѦAYNs$9:A^TVdՓ~>/֥Ցo /#/޺:>]DRL"aH &pD>1EIwEuX$iv{ϢGiX`̰[$(ʼ1CFbjTSqʕvBoyM|ru9υ5Dh[<[m8CL .^ugθmM|j[OlԎFfϔ%W Or%oוKYYIv&ME>{| FXF?[˜\xcOO,Wh%;5Dך} E|h:ĎrgA )fX ЫԒBQY}S=%oOKa*s?ںlc^J8&P' v  ROj*F)_X˼nMbQj k|zzftL6dVPw~{W,*+yI a2S2і`|BT 5zp/w 7Ixwɇ*|4h*=2/>CU*Gxyi@%VVgpb1Pi2_UU%t;Gęͯ#HKZ}Z<E֟|x9%"7ٲcղl+l9N̟MF1Z<5E$m '/Fxdq~q_/++Y}uSu$O͠iI-.陌Zit'>ucُب!,_+—7#ixk41Ӽ3^{*dny3~:? vSI;[wx@9|nE/aTT3?j0DzNLu1[T3n1F|YNo`Pzd͑MwA$PdU\ hGbN6Or0o I CETr՗M}=DNg[1N^]4 Ǜp'e`W2|8( A"!!Ӣa ]+F˗캔Y_ t"얰If:޺WzR7:&uSljoskdyV#KexN*;U;2#f2w׆b'y2 :ǁ' 6o(/RҹykwYYԅ$";X^Û_.z¢H[G`y^$hx[[:?y2]Y;BSd+(,,Jgķ>>$=3}/8d.Jőqf=d0ir8q/ua.tC}g_}sYybMFޥ,4*^S~'6_QUr›ʋ;(㺙#7g" s?g?S g#)7O0 j@w|%`ՇU5"\,cXf-Tۓʏ(q$ߴ{%t*)"}ѿF' ,ΐ*x|c=)ޓbp$aʵ6cx#,-ߞ+PMw]ds:ÅMi?:!-xK{wQxsRi6 A׳ )*LyL;nmMct-rJw&b˼^Dgj1ۛ$*KKr{crSO;"\mGmt: *X9LV.9  T߂\БI~YCf7lPUM^<[{q7%m}Zaɂ\YбpI7{0%'b|\aCgOfjr<>L{܈E4d=LO|"vZWkxQo.Q (ȽyGG],3TxWxHKƻ( gᏂ؃Κ'wQsMoĞY&xI5B0d9'O sYQm7I#I2UD/=ħ626l}: >WoeW֋Ru"H(FVYa]z04cKcLбKymMK՛:HU{ 8Cګ纴~#>ᬻczj4lLwiۼn!,7JV%c qԍwdPOケ\tLOwk*G:km\k7>kT2@ @Ze&t'9 NN`C5L\LDTeR\'BO̯[?A+kg6uw3JuR\'VIn,zI*՛aQǼ_^I>9T%J)R'ʥrt#jz1vgwۍ(=;kAiSR݌{ [gABڛ`+|BA%>LPح;!c"<+{v;=8PY'ұ.:+k̻IcGwnX2^($ۢGܷӖTBst");t24!sEjQv7):=A|@ ʎv&2tgOWC-dLKuf? 4d w lvnE:e=P1im=UEў}xX6,V$$ٲ+v>PreU ]\V9{Gqx5r21GOZϚMcIS?h>bh֢֓k\CA3h|?-zH\vӨ ~^vƯn#X ̯au yqۑy++' sEd}wHd#nxӕrVP6 ~U*}@&n6[E10x~QLTJ)ͱiz<9h%Jp(@a'-V%@36wХH HBgp+ʲܰXd2eD.yJŐ'vjolPý]VsE;t+oH*A/iI{H2Hs4BgNR1SS ~әxt[Q"H/Uf?wQ#ҧdWhĞjӆe-z-#tUNys@@/:}B=Jk>`τrgbT䮻sSw"UӤح%_q۫E3eWJ,Q#"κ.9*FULّZpvNfk;)䑯%jMw7Tە"R ܴFZgƲ/Ը_0LM欦Hb}M Eڥ'C垬OkVUɫf8_҆WZ$ח A@ L[jWc2P;V}h(zxc%}l㪦޼ba3A8/D Rrtpb^˅XKV76^:xQ,e(U8zI&$Ki(f$_F` }jA}.->@ĭ>`z0fLH٨66qudAqaF5R?|WI4V'\ūki" vl|$QAɜ曀t^U2gm@pN򃋥'Ti:9VXi> b[rdFd% \:$A{lW3UpjUX#x2LNjơZQzcg"cHT۬HޫwfkW!4Q 37sf$M&X5ANt[ʙ,j[ 3 AX.[Ѷ)OƾYE4}Lז:2Jˡ堈_ endstream endobj 609 0 obj << /Length1 1436 /Length2 6617 /Length3 0 /Length 7588 /Filter /FlateDecode >> stream xڍwT]6%H47 04tt 0303t JJ7"tH "ҩ()>k}ߺך{_{Ϲְ1!l8O_@PBll0 /7!P@B!k"}Bu@ J I B""fh8EpA%$xrP$ hG@a }QSv!(~A=( !?0>ABk  G]gxHzq@_Mq5xw'Clmn \&? @v: @l;rE(~׈_ewY npu(_)Pm9Yg8 a d{@\9@р u޶_ |ܠ!!0{h?;-:WvCׇy~=zxM/;o)jj1yy7'* B 2_mGަu8ZڈkBοIn! "`{#UH ){s?a+/5i=B\PcjA`UCC wp6P0o. m-TCu(دkصl5%Jp[/ $Cp}ז+xE;o ~8}\#NTT)rąߖ82%(@a^G]ü.GHD3ٿ(jK0= sk:[]Xjyo)f|먉2.omWN5;Uӄ-!o)h =P;G'+w='61H48oThAmI|\WGL)/XQLK~S X2y (X|S4ϊylz|oT|Jw3 $PS1*Q8+H#^M|['9Cûìd3ZD38 T=SU?9Td59io %s2p5[t:xaϢgB8aK7z=a^AM ?``Դ*qDLA>F 尒l!ny9~dAB5څ…)b ;:џ(Ue0DS~lj& dV%tB-V% 1@[PoZ|ܵ}Y˩f|›?Ppa\8 wl2^ !NTb%*떟?&(?w7xQk T2;erބQ$Tg~ @is+[O! ۣ*d:'MUX(׬},J% w 򑎀KJ}aZMoMDZdŁO f`bƱ9ϪM.٘rg3&RRVsf1"l=Pbg#sNˬ4U L4d36_oDѿQݲW}jPlt^cL?Xa&Ka1DV^|Gzwc*᳼}jEYѶMvOo1%b1b?݋L02`=@=5t=]YE2;Si/=n뫝vMFDoe %I6/OPn.le2\2htwʒ,&O~]'Na%z\q6DKr=:caKJ'7?=c܈f8Z <w3Re )]3`[ Gt^ b:(FtQtr!-\EE42PXg[}KMwU a (bP}LUp|M$i:]`眇4+[Y'9-{WC|Rf+owS[:X 9#JY0lj;1 [x517-(vs9_\c`[fmi>BHZ[z^'GTGMеY;Y{$5]z #r9\M*8E!">)I}p'|΃h [g  Y! xF_֗ɤ}h+\:P`.vFw~k 9*Me]>m9~)N}= hFIc EFJeX):OZI܇|Z2`zC1^_<ɑ/+LJGՠ_?t;b!=ǃM"*ql [ǔw <7exY#N2FIɈJRϫ<|ʞ(ƟHɤY=MВG$3=b՝!**|qc%fװ̟3F҃ќC+0 f7F1?x?w@ p*-86ɺxlk]fl E_4P0wiň-a7Tw$95h R9 `nҫOON?w|#&nNI߉̦HqMݬ +QXsF= jb(1kT&YvHZ pV^,jB$%DG)i?K.66zMgb,ڃe l[lz0X3s}ʱ0f3w+_K=t|NVz=(9"+-^!H8]DGUVOٌTo/}p0'G fld4Pib_ `j%U:&۽LYz#,P(l;,ȭu著KȜAS6wB2o-D$ FO7Ov)ЙGV֔m#spWҋ9ŸO~/hBX2;+^D0Jt}asHG0E.y&HgP3T*{j(%YD3yI;"8)FN+1M5&#GjBZ,)6{#v*FǚN.?072U{RT9ux7[TbgRBšWH^Pvk6v>Q?Hɞ\ͺQv{Ka$? >PgWn5ULJ  8}bRÕOztA=kt˗F "0%m0|QmR%S}ftHZ KnxܩRC :hU7ACΐZcdu?tEXHm!&Mke?kMʟ%̚ {bG ] >#JKӤ>Sa<EUa{@!`8q5!=VmaF%X$3f3UXB {|f"P.Zf9{Lthf=Jx/ht""CpOVi(8T\=D /ں1:uP`,~)wnl_cY砲%~]^auP[I~کH5ty;0F7zYe~WO@jz$ĩ(ntp-#~ Ꜣ1:oQ|o,aiWsgg /)jA<K]҅HǠgͭ[ 蛜WՠgM2ߎ$"Gq(;K|p9oLo`u~JbRTrFjXXKO]"b)rZz%RsHU{bxᬗ~is삕^~k6l^N% + iKQJ2ya"|b޸w;*IxԾn5OP!ĝC9ym\3iKvKG[ULNU-=">NazRw @ )ia^={kQ udZ d7Stg?NEN<# %h#ɵj#~ج(^;> !#e^tV-iEm28~ʹ6;Ʊ H9}]b±{y*kLs!orYQٛ:di۝6u?~L5vo-d(Hk4edžX 3ҭD%_NKUU3(H537Inꤐ }7sT@3?/!!W7x4O6RO}}Zҧt3USwժ\M~8$2#Zޑ 1X 6Z6Y?ПnlUÄ2Ah[T 3 o;>!!vLPJ|jQx֕\Ċ؃NypWeA딀z-Mhd]n q~}]GDW}Ʉrku2=7zߗ*a0>Ɣct=ڮ љSP^fTFg00gm{3nky$.}U,~YAަU[NFd Mj6Mp|EyOoUOψ[*:V8ølXxT?Yq0F2鶞UTxF_ӗg>4d>< "[ɴ7;VY/VsBȖ"pTU-9IcAV8ą`t =>q ; WOpa\1u%=K5ޏCtibXD)R\C0)N$2X݇2ekH|u'R=A~_ѦLTˀ%GgVt"&W`)H UDVrҀAD\MլH)'jZͣ7'];17B cBNONaУ>\=)V:\#+#3ju5J<&͉ːBIԧv!O5ǰ˷%>GO!1S3%P5,uT~Lѳ)+1N`0Nmhm#E}W+XH^^&g(i+GjPoxǭse3tWﴩ' >.%}seUMϗ p˞ԂtH:&e7[NjoI-S";#$5"][/ stIvT|Az¹]3=8[fex\>ou8}Ad ƭl$t ]MRڥو7nN>O1M gsdK,z]$zKՑ`KAh`~{Ԡ 1k4jvos jUC&l}_Kw$C/e)^ +'prp&͝ymblyA{S3XfrCCIΥv('g럡AXx`a^[e:O8;JވUQm(3)-wa81[lGiv;9 /I -*ulY e 8~51ar:)aCoRe&\)\8d1> stream xڍtTm>t7]RDSBew [E@CBST;C>y';{^3=357 cWŠ݄ @IPĄA Qb..#eAPrCܮl+6 sG`1,)QH?D @ma w%R8y ݮ_ (  A7{8D( bRڻ9Ɉxzz CP;|'0]<0WÀ3ab.c qW$ G^EappPC u kA _(rh;Zn^n E ]1W "*lprsvE (+ՔU0% GO^[䏛uDc<Ѿ[f 1Pre"fw$@ -(w^P{_鍼࿝_}0NUp-\t ulv4ٯp? ЕWaHWDA}?:˧|$!Q JR i ?T{5Tx\>߹t0WH;_Y7wAHo7oㆠH? WuwZmzjaw{5 WC5F* CAPv_[DzWįg@Z-z%.H4bM|uWH_" [Ā0v\b\ݨ4 DFӿ ]lB+i@ @x*7_( ^z%-ԫ~vp/8z;uhir?|sdYWdSgEkXcOEa~,;^2gԳݰTw^t`fA'TSX[Y$ߟX]l|fUsMSr*d5oDqܜw1{@Gbna<'wth3=1}\͎ ɲ0&Z{YI3qV8V*J6ցC0Eo}TUCa䭳cM_QLSl/x߸p+ /l}5jhrT|+#2.K.%drs-M7٪C"Kx {6ꖌCU&ZAm5; 5C!iM;Otث3D X͔!ZTsUh;/)r΀)E}< lAY$9dm|vVqaC2ЮOjd񳇦ilz@V挓ySS+TO^NĹD6G$lOAxj cUW".OD<ڸesG~ w57x<"#DeeRe(2O RRVwf[*&A&'F7]WG(8=r6D)Ί_gGdiJN l΢1kY=FDC)gu>sN _.?G W\L84 \O*joT[_:G]d4 ' ;}$ܣO%Z+7Ќ2꾺J׈ҶZ#gai;d!$7a, U|boV=iFxkTA%㇓:oc}4/oI/em+=Ht[=?ѿnp+bnlneqO[.Bޖr *8")qZ"iTM+E\dZ>i=5MOA&4òԆ,o~.;}b4G{H0*_L|Sm%d *Q+3JPs1'Xl7,xYjOp XI[8mgL[+~$`23;pStt'*&Mv8sD16#p̎=r 5}O !X^`튨%=pN&Tnu}!/$jƚ9 9'O͖ b}C!y,Iz +ϢCXm*ʃOT7KV.s{S7TR*)=7?rVӾ\}t>F<1MTL5jOܸ{_.{| XT[7*Cj!]cDtohE)nNMe}J]\kzh}븹S nҩn-,(ɷ@/VJ8\N@&]1!%-w|Ų vڥiS0tỗSwr p4syg;sDPLڔz"O$GL#=]j!CÊ59H kSdkT8 9WlȌIn!(1si lej_ةVkROXX<LXZ0?ƻ&/֕ӧ]wA!lnNoGZ9Ӌ[ӷtфI.Y=usH }(_cƘmQߘ#!EHT+[[21bZ?0UtԪgRXɸy|uOu nAEz%Cǐ;QIͅVeVNԊ^Zje~p@5?GFm]>P 0$*8-(i֓|YӓYb"b )?7F(bЍc[ ]u\ նmi [B8鶷!M֭m&3⿂@_7,lsBF$ެe{ V\A%6'Âb_4fgzɓ*wXq1:Ă0DZϑ&ygk= Ir,[J׵ e)1}廏?@ =~+MUL:ӏ\ ('n,[obcO3.;7th gn iJxr"V4!_.ǵZl4%}H9痝YCH}omA& Ei>+ڥG,vL9\&9F᜖2!e1$gԻ^w$uGHқ|IԵ?c͋Ns'SˈMWPɷo˓0yO^ }I =XW0 P iLT^}bRS`zf郘#Kbgl3]֬1$-`Yqʋ<&%T ;T PTa˄ >8Eλ(z0c#@hPj|{G$4E݃St7 PK45F5 Sw588볰&r+Ub19j|@V,FA};\R?.oHצsxAMWbOsai(%_;s7w[e/'\))k /XcbGsƨ{5")kVa.N \+Ӑ3uYA:mm${c יdx.vzl?KT7mCVd(̷Χ 8q4iO[[:c8W07Xgl\1M?Ҝ;Y9=G-==2W1rncIyH`@nGVt1R *GVr\?ƀǦ1t#G-vвC?$굑bpˣo+"WӒqrL4G֎eI˪dL]C^x\ϼ x&a_XB07xKC(>0ry=}W6zg6O:_L>'jYX=$30NQQ^l( w CllPT%Bq֍$_"d;]J,gw~upH GN4nK˒_s0 _"CRoЍ +* % in{~ŪfRru3Ji#Qz0ݱAN.(ԓ7$,Mm&e05w7۠'&Dc -VH|Şk7:) 5GeJwOZ&f.>4'|oxo-XLJuJxߟʁUk67"_ܨg\Du!œg8xYF< gsȧ4i^ e5tIEQ]<-!f[ /wy+{68QEWǗvz.hPX[vnPr{0X 2> ::o?\3\3Gͮ7m 3攪4^|sc#U.y,wygF^Э68 'ג)ႈUY"aS۠V@~-SMaphATJ^'NE8d'Ejۢ!&`f]ڵ]j߫};/' ^%Ua)5zaiۺ e:o!v_~c܆:"rWRej;D"8mlE)bM\;`-ى&n;&Ju z:5ZzMHB'8ٴV;hV.i8xD%6G9P 1$n /掘 upR>#OoT7ܬ\_gcMT4$NƓRsEyS^h]xg}LN_!Oz&o'K3MC9jt'Mr3s$)g.Peg ˯2P{ >.0uVzB,&A?G Fܾ"ZI3:?F>p]DFEH٧4(hC/ssd#K1&pJ/9'fݬapk;uxy%xa\CS֭uwzW#*Q^!هj ?XxRz2u=mR\5-'e/Dx٫  fO;]iؽbM=%=£ċ8)$x]J%x G?.6X it;5ֱ}-޼86ݰǶzqѲZgWxεk|ۢ_I-c=r-65$/v:O_¸GXlM߅0:Ex>ިղ}˰<<G im#zn@qvㄕcY֢(v`ISϓ]k'a"aB ~|U0]Is"3׏g2 SJ>aԆD tO͋tAC.xv+q:O:pdO.̢ml9wX@,f*/ kf+cH!h3n-mV}"lR;D!-ЇZU-(B&F! P$*ć= /PF:-%{u9`QE][F` (mm(e7 W1,˄5O[U߲eUp5q-/K}N]|2_J3o1c'_ySSR}CvynCOfLJ{D8KzGZFF a|gyKҧ+[Tzԕh)@iD$efiXSĆ2| >z?VsKX. {p{{ۜ\IO…)6ApI CMh lM`oDzSWj ;e*mVqⅺ[t7Я_%g-{ x 8I\_צ,A]5)9|r?;(\]v_pQk訢XCGsj 7MYS5^0NM#wv$Zk}@'qlsev]nL?Xjo1' O܌xIYGve@.)"ESOZOl݆;< ~V^B`3eGE/GLhyw#oF!L#UtQ]^k''?;/:ݶLGa%*)Z5i9lν&p^,uĨ5v 6T-Ӌ {7ȍc~ (3M jٞ1w4‰;Zr7cIO::b.̽cIw?k;M`2l"*1 ߠq㘷 BsuͬdPDWΎ9~*=D hirIEsOAθ I?sBh%^0矨g s$VtQ z1UA!θTr.lQrXwԑ]nFpPU2-DՖ\vz0IrbA ɜ, gb$zRp4AǞ wk Y5J H'MIV8[e౷z+岶S#BGIb X]". :Y%`hTHrc5s AmvT`> stream xڍTuXTݷDa`E%DnC.}sZZ{w3?ᒲBYQHW.7X(#m`^n0'`փ](`dpOzUC!n@/" <`_@Z( uGXո($,rB#ll]oVcB9h A]m7+ @ wW 61[WW'ÍBHs=@m u=7GHeEÁ7 tIrCZ:J@ '8NpC.gBd( rt"H5ԐWvtBVPM>pZ~7Ki739 pruvA8F!dPp W4v^@c[#VֿFrs"np%?Q7.?>+  pg f /' f_'f/~@@W? sZmH?op?@c !@?Y^4HH[UEKK<>\ ? @W҄"?r( _M?w-u @on^7_lUAI7/B@^bn8z5ԍ* Շ!ciǔ\7B8y'J 4uIk\  ؍`7W 372rHxP497 n$&x3/:Ua H%= `^ ?̛7F7n}9p`|  n8}+E/vk'Ԁkܰ|NfƄJx;D̮I]4kہR5C1 e1xZ1:\$iz MDw%l:t V}`!{#/ҠM*悶ˮ'Y#L“UqDs=]St-/wB]DhenWM\fvH#T }aQ21C4S?]X.6yT[^{[tq`0WV*Y έ>K'^a!' Ai >C6(dCTn&u+QQZ .s Vn~g/!tr8fZ>=+<Ė*K9 |Vro{i)N L9Z27Fy|\c.rlISU)e|x@?K+"2V%3^+M3];ـE ޒŜR ~5o E͑d-U%yx1=g})I}Z*?j8 Pcg~`_wQ黡G3y~P.+1l\Ե^YslΘ۳I2\z C3>W\?=~rD9Uu, %ʝ;"2qr7k$ehS&nS'oPYJ.\|U&'̽6̴jN kZm1ܧ}ݱ]kzn$r U#5G}}왹=Գ)L}NԛaPУC,I ]2:,s$I-lv,GuޮzA=Q0 xQmDԴݛȌD ::~=ϭ,ESZ+zdm(8+1YY[DQBX ?`Yk׏Eƨ"5 L 5|C*_>Q,".54!Rt:!Aa=5˩悏is tRl{2[|vm۝g9A6ݼL~;+GQp:@jå9넯}' Ny5mFAB7D^eA;^=[ 1qFV"т $V kq;0@-豌WǾ,RSd&V!t(<7)y^f5mRNɏq8s4-wg\S9Xubgh{gM֜h%5+ y_pװy=a;':_j:LRbqt.7‡.p%rFeߎ'wbC׆k~`ȍM[h47Ch,Jty:G!Ο_z/_S:>LŻ́Q[ȄG|CWQ J&ɉV/i Y~TO{_OAqJy ea3M::kPwau\_(֙D\iZ:f#a`uVFh:1T̺ Yr5BQ`}hb0G$6C/ /A{F)̏X%˼7DIG{dpʣAw 5刣V"|ދ0|_ N0:IIk&eu!rT=#9gJ]i1e 7a]5[>cNY6g`#Wbncղ lꫫr2|EDl1̣?Zo uOsg$#bK$ SK;N/{t]Gw|4Lۺ j68^k'86hȒe^Bà]Dk*%3|=dfs8vvd_tgӜqbD[6\e+EOTizi;]$sYOl-Z<;DCy0V Пp++O̹s*dG00 ?Uh걾c<7GKJw#hmjz&QʳR4- >X[ kXNi'DK9-k~z\.)Fuߥd z^.rq@lܼ|SEfdS/^z\uQxHʨIyk㋎}o1trg{~(%gb{ncMYEtg-d%p|YRqxNn)[bϩ|q}+/oih!sGT?49 lMe%T))iT]9y]B<u`J3k߬)a~(,-1]lu:1o8ᄫʫm}~>*VėwtCxKWGz9g z Z->>/"&:PFDŽ S+z ,:'$M5bS"` SJtKӌ}+}NHlj u劵dUo=ҼF~7]ZֽF؎~X^ 5uDH OKS.]v5kƜdd#!£Ntw" wUƒ6ZCC][{ѣ]Wul='l:N, on0q4\_+]l x!qLWO@O7,ޒJ;k&Ȣ./FV˧y-n&%4JužyKj^uü5[u9oi L\3b/BГJ]_rZvYnQ{rtSwMԶG`&"gA?zM=ϸǺ/eǻI1qdwcS-EXQ0M}EqJߘhM[z<f:'ݍ ڝ'Q'{bU4x>O=EuV7-v+By D/#7GW+VqK qb׍ˊ/sfI{F}rzCCHsK2+w}Tg؝Jd_[ gRK&xxM*T(Ăou;>QKj_ٜ;U"lV1dҌx@^nvѫo gaq}r-wr0&V$uC -N<-2groUDt?Ce_ӤT0mtJU(b; ]bHO`Ln>Շ]}̨#N5*IāiX@=W[|P)C $cC}CŸ6,{A犑g77ji'5<Ű,=&B{,p#r}R_5MNdOpq;&ǵ˺ə^`n{ 6UԢ@jQ@77|LoXy4ڶo+^;=A*"%Ld!&F?95}*&lרô՝9#l7reQG28D[x`X :L`#5m%FʽcJm]^bb:k>R~_[N>xJ #,h4˓RSԹ1uZep!P {gU-L"Kgi5i6ZEJ^+CRuZ1 ojS'OJ?0Ҹs9L==V'پjut_Bc3$[TJyuͪX~En_sRy `Y&Nm7]h|32GIL'uKLZ]2/pIr )2&V,2T>ZՕd.FvwKA. ae,טUc<.- [O޷u9w[ 6vhز*6u.-C]ݕ.v>$b]vRNO~ӧjH6Xƞ|ۦ%%[hzaAaWPhJ90%3b:v#c->1i,o1:Nk[{P 񎳻Ι|ӑ+\ai0JiQ+)h77khhhk:fa/I╭i%âވ׸3|S#ٕؓxR5BFY]~)x6tc.^^+t|^~Tczb0GN[ .i=HmGdKVmֶ?zK|R;#;;⥄-ǬQGT~g+L"dsM -'E(L#XMuDl bX?bϔ- HƔl nǙ/m{K=S+2$=N6ꞩO B{CۋJ3MHپ@ۙdtSx݋sےæ1ef=cY g =Ϝ; vy5|Bl D˾๩@{Zv endstream endobj 615 0 obj << /Length1 1496 /Length2 6660 /Length3 0 /Length 7671 /Filter /FlateDecode >> stream xڍxT[5{"{RB AzwAztKUA 3g̞p (8 !8J((,P1 EE98(/;!) EPPh2& M/( K%"’Re7#D!HB%'G7PpxB 8@rw`# A+=g]JHGDx:|(g! 8~ A&H0v"FG@`P0Dx # m;s8 ?x r7w w8Ba ~A0$Aa {4W O}H'DBa?k}*p%BO OOs]x_+G(g^B&pDCm"AĄ%ŀ v;ˌ!(pD :BH78@(= ';: qF Fϓ5Za8o )+)?" " @q qA?yWHN}NGXr!~_XL~QWwF^0/7AnPZ^( гo@^nj@iP;-#(|TB(o7G ?oa!o$Z z p9l"b'ȏkJ DOBp @pDxl,d Bз#'&OwCE}XP+pك<6أW {!U=ۿt f`ZO+]1b(ιxjSvմ#Q c{rCQ*kC_Nz zq5$&2;+l+H^Eߺ;7@99k:B^C V԰}7=25Lƿa>>P숧f8kÇ׹DžZ}5QtTy#ɃtI/bJiltnQKXvK_ ړEtBij@.3ڮ"mIu`Wq8<a0pЙF]Xhc.6=٘{NLQ\>hx}/ @IA5r_Y?Ҝ%~upo!}z*4Ѽ3{v *:9D-OB^ta~~{[(Y1Ŝ&F.TB49)~9*7OeZd?x7qxC`7nȠ M硐V~].&N"y'TRw`[ʲ}}|ytoc M ^}r1cˉݾNM_sCJa5AbXesX҇Xvi g/@ ;6tܿVx(*nqGJUpJ`ǘ+ݽIh  b8;6i wQ4\1~lc_`/k?DwMk30V;˥'Q- 3o UيU#|訆;$Wf,L*%{Y Ә_9S2a,?hkS`:3TEH.%z#g|㴹:;{, A09F0R ~MaՆu[:[hiVcV gmQfYo2oWxߔRN< \;;3~R-auŮb+B%)VJ7..M|'Qj 7E4dnMmHeNͭy/1VZuKsZI=oCb\egB:iy[A\Nכ4a 6 Y> ٔ%C p߯qCF& ZcHHQ=]q֯-z;YQ)7-s=|6.;i٤TGaGn%ŝw6B›t;} 2hM,EH7YP4-S]Ƕ(AItxOD#Ii$AqU3ʓǭ  e VFg^,!ENVkmO?3MKxpmЊ'sk{ =>Bҭ W̷YXVW/?OG̱trlMq#jÓjUsjaa&ӈ@:sڵ Q,q ŻBo,5ꬄɋrJk!QࠀɁ!tP1wл3$a/[yֹ"OUcݠlr3Ę{XJ3x^R\í7 F,=V DVO̒~iԓܥ镇).t{ C9jJrla>Gfx*-Pc>u36bp=^fm$U6 #'M̪mmZOOx2<ށ-GۋsnR꼉f' ߀'|ixy9ʨlAC956%wEx W]&{>+5o6[6^ Tю?F t GL-Cg𩍺: e`J¢7E̯RU/`% U3#!Q J[޺ljA%$xyM[/S7k[Mgʪ`aZ fTK{2_*DJi74/OiYF*`#@eEXeϽ9Dap% ? |zjkO' U7 89S)O(q,q]eTH%@M 3m3v߼yw?Xᇋqо&S:7NJtI'I/۲oH2QZ zzЖԟS`ːxXp1:u)h$i ,DC/ӎN{˸]%i|Dh< "k YXN1m8.qotV#&k8}x $ y2ֻSGmK7*hĚjW. (c0xxdL1?A,Ʃ~h[Ma{0,Zj@խlzPR&E[21ыb};O>*U\?!cY~4y /9(qb\ߑ-A QZSϢR=v;>u{#!x{\0uMꋲ[ǻTGRuIa2=ntV mྊ5-0۟)ߧ˩ᖑᙬ9k4Ѱ۔'wߺޚI¹wEJ..,8D6ԓ*hXGҹ$ n6*ao{0Yki0,AJ{b(XQE$^ |`{vLB%Ym0K :ֹJtsVp2eI1F_X7ބj-(^F贇0= eo-˶pîQ2?Kj%{@IZ/IjuQq'C"d⾇> t+YԦ+sWvWWv;;5؇`ǖv%lt㑓O3Y`5OS 6bWʨOn4BM.:i1>2x~^/CE1l.WnA^Cn-ZAN=8GU'l%gӽH-_;dBq]*Oos9k˒MQS7zSDFA1\3|ITYcDh{'𤺼aFɥ>[XT_eǔEDRN;('sBC 1fl_nzsCa_] u&{`Jj`@Od6)?Svղ Ǧrx~TK2aѸ jZ tZ5mcBi 6 M_ްVVjru|[ndHK|,bUWձtҔ}Lx콲}, WgzITn.Qα)3:i* oHLUiEdRsA i|V $.ֹdIDߒ_ƅxddjxB핰ؐt< `\͗%i'7^1jbpJPd^jZNwO&1Kajzo9rx}A[3](YMDVXvvt0tNrki/i2WZ\`üHaHy_ELq &Ȱ~_+]y:"{ÞX Zݼm\O.PkB^u3H$7Rg nMd"tXM9OR:0N,<$N<2j2VS4vyM2J\T 蜍c@+@+cc/ܔXҠΐoJ ~-mߴVtp$O[e'NRrD\#1UJ= PW+N}\2{&sj#\!HEɣen3O%T$uq[ǻ>#8"k{L]@M3 ";t+5K U9+}2jŸ'c Om SDt*6{۱_,k nȷÅ|{KȒr.,H@@U'HH|Tm f]u,no[ە"&/GwQVu1t8t4–HP%M޸Q3[&uLU~j|1uL* ||*nVRUVڸq8K?8dE=眏&uOܨ*enyRI$7ӇcW SjR'uѨfi;l~b,5V{Y\0fZ ˣJCA-U[J3{(yXG.q5qz%ne-f=,]/|}s*o&+w&.klA(1ӽr \Sտ˜X SWAc+Ii/)|f+ iT8٪]"o<-䔠~Y>KHpW#nfPX 8|GȪϠGkMaԒAȧyEOW3+RZ%beLh{u03TfN'Xtч֝XC5d$G=8Xޱ0hqRo {;3,Ϩ(LO¢E'}ItE+6xL4DSn̬L1ahfYaaEžaX,+tf6yD ֆvV婕cƐb-{5%9["ҿCp݉ROR+6&lAc|[$15 dTRtęNJJĐ'+VԴ`1odINJpk}kK|sYd:/Lޡ,Wn]]&,2@U6k6Ffb%6zl &}/C3&"=3,]%`s}hՅKf\^zw\|b|=c?.5|xl:7؃ԉ*vYN D_M|c&cSu6xx;/%gm=֫CejKQıL㴉ާr?[&϶/WNhv{.L}8.6MB #a1[M )uL[5b_ Yگ<:Κ}Nm:j(Er*fxy\W F<N>.>=mf3~/aɼ\Sږ} (7ܲ7DT5#2> stream xڍvT6)%2@FJw`&lmAENETix{=;g~s_TTriXQ0$P7@@H u5SZ8 )hAx> r%`iy<Djo8蠐0 *bepdD~04 C0`rðPtb=|||BA@?)xfp)Ax; #P/0zz"wN7W"8w0 qp jX cPx7q~wh( qB= kD_i𷬎՟ s_;Nfݐ(߃3 u5C iM) :Jov{<!`pgh/XvDp',GR'; ss/ ؀@>~t{b憖f&OE I*.3 B(ܟf_6e“mAR 'ConH[pCpw_^X ]0zYW鄂4FCp <ĥ`0D(,>1BSZ@ ǸIN^h4^gyoQ`0'iB轺жZe6DH),߻W=, Ohա Oǧ؄vrQY]C}ej-q+8F c t^MfH9_"v,>T?0dHaQMBj4~hq2I̗D|kzJv΋DŽ<L* VǚK]B>uZLcK@<xnxrٞZ֡yؔ i-k)i6u' kwi#ڟHh/)huVg0lhlWR [ ]/~-%iū ,ۂ"RϾ|DXL7D!j"$Y&Rֹ㾱F l:K2)&*R\t4 z1zRïS!g tk+>+ 0};EH09%&/(ӡ5;&Hh^f.7ZdNj˦%p*]awUy\e';, 5SG6 l]. 49gڡ2aV["[B= t`S%vN 骧+v[2{=ߖCms&[j~ơyO:#G~)q3p/R!%3iVcET-7?|6;ZP.Рvf#K*'#VEKH+|8'qBKEpQp+d*WQx&";>a֗ot3yz5t[s\-bVhxBri=tfEtmDxoGDJ'+1YuҊLE1Bַ 8ˇ(*p[ mjE|kYVxa6%:OK]'#DCb GQ36OU#C鯡m썾7חWe?\f_߯-_ʧ[hQ ?5QO ,JBY{1C~lNB@tA3SW[Ꝉ ezn%LXQ(!}dBTN͠ށTMƏzKjnjh &5M%}Yjl۴liW-kcfx7?̧K {Px"G'E =Vӥn,~`LvWy@kT}Zp7Wo<@(AwVe@p̤*8Xyc~RH{βdLNpi`IA7YʴiW o8|iGZ |QD>5&áܽ 嫇P\}my3} sglbhpNH-V3]*Ejkۥ, 0k3Q}L$5pu|x1 :fYA@1>$&=RhgO7FM. *\]қl:8뵸fq&WQ)Nശn?={̲}铿5 =4(&uîє[!M%#O9u+ 䎵|\)_ dJ`/K~+ܝ8<%^oBV3o }(뼾H|8ГeUPtDHk" `.QbE,7_G ,GjF2ϣPQn;Ie@ϊ@-"{DsՎE@̏ku48v=x{(^s w|pަjv`L3~WTsztzNe s.L֋ :"8ԤV]Wy7[N8kJϼfi&4@.(#'d0ȝa[TX-IjA5Uk?`%;ߑC n }x_Ͳ&$ZR24q{2=^Ƭ[jzZpJOn^Uqx{ JHҍ9HYk/ zӭ*u)ޢ&%<3jMjA+DW9ڌ)x׵. R[Oqf|9A7Nq1UDEP'-L['=5Ԩ~\ۈ OHB6O NMkS+΁Aҳ@愱c4AJzs* R&GXo]-,֚/p'r%XAs& ;H,펥-\R^fqԘr?&l*Ȃ!dLgε8/C{B_2ҝW MDJ⼯mk/ujyoTOt{k/.tE aؒR.JNz?[DbS\YH/ ]7aKI(?˞8ⷛI.}dc!z|s[~w'2mv:7v/ͽt!ӾTx1VHt{*ԓi:Yjwb[L}溦IS+K0}Gf3+!?@P󯛸lںo!{;Oi:uۖ) ?Oz .}(-ܓ?ERqVݟqU'Jh_qѝ63뭜zjH۫T` d^=5[ű(sW{}Z},Io`b+xд&evhVFj% #MnhС#\f@SA"/ ڣj  s?LGU(/?„K1 Q mt;ʇKZ[W}i)I )-G &!{eviZYZ\~Lyk;'UQD]{Jo 8:!%voy=Ѯݠ37y(?g37,S[9!I |l1'@m4j4 aţoH Y߈YU20OdNT(Ny62>s^'oe)Bȴkg=<%VȐ7 [ԂMx)Vv2O`$B/HB+yo] -_ w+$Y]T|J<~*lrx\y t/m`ϡ\1ʿkQ#P(귥?bxL& TX~-:!֘:&4y&AvMGtJ82+@itUXzSm;)#L 'USPg&I36Pm >|=;ӝ}0:2eD[7,L1X> WR7Ēg#Ji_hM?i OBijs_%P}vij~bk=vOF>p3{GF61u$idqG;?vպ8)0; 3<&4D1z_dyK$JkvX4ī?X+2zVcH'0{s/-^ #:L1);e_ .wSC7UZCo^c F6`u"?{[̖p4G$J?tt$,OnZ6LD@-ۣpk1͸Pщ%m23?3ζE|Rpyvǫ$c-zKEc#>ĵ9u'/$ ztQ@W%6)"Зr5 : j.&b[ cV(>z<9sJN,[MTKقJsL}@:Ƙ>0L`)Xfj+1۾lt`i曔/䛘@&4ΰhrDaiL+W i=2b[m/:z;|9K{9U,Tb-O%qwAN[:[]V^认#(yj}fFS:.' LL{zU.?.;v8wS!5{1.Ȗ`f+mKˬn<|?V8ʲF4MIU&G˦gtmQ=%t%Ο4ù,_ܐrc[aUM|Ttm}ka!,I/7Ƴm3rsyi-Jԟ9,2];o8we%ϩolĹQܭ 1 6©!zo M{t%l`{cMIIˏ*&Ql4uH}mk3_Ȃަ^h30hgR;uiQs 7nC]NR> TqڧttHjYx>(Ճ Lm >|h QPZ),dp9q-%$ 9q-6ZV d>QfK 1\2VL()ЪK?$ |Rj_mN44G&K ޯ$"UJbD?<n5 endstream endobj 619 0 obj << /Length1 1377 /Length2 5931 /Length3 0 /Length 6879 /Filter /FlateDecode >> stream xڍuT6RiPct4tlFlF@AI)i DAB)?yys}]q +Ѷ;hNX[`q,6An3D@65(C@Qq eDcjP$jQ,[A;eEee~]$ Aq|Eh!8Sp\DD<==AP,Wz"q@#@ޅ LpM?vcAg$ #Qp/4"PBw;_P Ey#Q@;3G (/ C=Hg-s(!xXÂH_#Jeu\@ᰀ_!1ڽEl D=!Qp_C]ELQH7w_Je$d7 ++S?+hᏴCXø#}'(ံ{$ x3| ' O/8iZ>WX HeLcEmX-([5c+~?sEYV`I0 %M!7"7tpC]xҺCeo9hp{pPQx2 JHnPԜ(nG `BϺ(KgbR@(tW/H87" gڡ1_kEl0'3G~;o[DC_6U)x $%*+R3ArƘxTI?ͣ!/g8Em᜾6{+l?,H&1YtJry vR;Xx@Ş‚{0Ƃ3U ne:|N;Tie:^ĥJ騔*efOa]%QsX&K^2~h"`\HgcjO-KED`  SG=J1 ĄL_tT{ط+Df<"| < 0-Ƴ;, $!AKQAfS\l绪՟Ԅ-3$Bqff տӔ@ܷQ9mBY, pt"DD ueH ͭXhG-޻vVLhENCTråAd[*RLCg3A noQE~v x, $i :vNK fBxU<-eɭmLRc&sռRoh)fd'Ieh,^ӌ-@e@䀹%IvV |KO <~2X)#Gl$QXX-I+B]SnJb%\ +A?PYzXbµ;qk<CcߧOД1cWfVyu.De2xĖ #-*͏\qE30CT -73MyPk2 ލ@I8wN"Ϣ"MB! ڇ@Nr]{u+A>#䢐Cy Wպ[n*j@J騣YzG;9/k&w}8Tgll^mMYӏ{rA"#*/M{gVc#v]>>{J|F(+9ҵ\W4k~tc|0d3q<|n_g=mKq3P/DY{>=/y=R;=¼XM`9P^, y(m?1ѕuHt II!g.w pm! !yjeBV؜s$:Æ`ͺ/Gޅt+?a짩TeKP9ȑaN8lކm}K{dப4QTO;I-}w0/>W6->zXu:X}1?Z"D}N/+ۚRsgg&'K 71 _b fo"J'뼱eIKMB.''F&_ I V^c6`'X/5j>OYNcaj%2:00'&OYPČ*I#yMlyC*h,]ZωvsO5u(O>U6hzQӖ/ F6?~n9q];H5Ȉ~fƙ"/tkhrن|#W'7zڹt+ Et  *jx[(r,G-cy3 ?C% 1)='Y/o#D%eVtm"P*[715OiHǥYaj=|?]nqzKjzS _6P {30v\.ujmfȯ7 /|*c0Qq_FҒLjԣ:2'zVMZ2W=^`S|Kil)13J5 Rj$>x/YGu8T1=heIsGѹ0g*Ee;S5 6TjMfᵟ rV~LC+r (#sյzꠄ DaPVj"_ծ$R{ؕs?I굽Еņ=S׮~fjЇ0<brM검=- ͜qNFP4)y069XI1!꧕}œ[ڥt@uvSiy%ln_K]8t$|\b0Lk !zWʣh?8"lo0ZƯLI?ENCxe@iD<)UM-/AAA J /[ug9Ӂ~2fo:vt_߿/ftq8+\8+:G" Zs NC6!䦮 ӥ+;RVf~HCx1{ PJ[ )_͸N jo~Z:B@X} m7S?\ OXuB3"[mSukv5{unz@s%X}-7ctydvR#xY-:N\ h0#Ήnh&$^L ƛj&/|'Xɠ`ӾbKSȜ3l\l%;ʩWpgvAKT([U. lya}R/է<:ЬNH>jPxцb0>F^[(N-j wTx.1f+mI.-bTe-SWuay&֟,GxOւ-~0[Wˆ+C=֫OTRD3,To>:W†r&#qc,xeFí?#/Ú'VRը\ԏ%FCםҗ'pM$]te!=ߋzg}ix徾8XS@1ٗw )JNR,;_yl`fөG\\% x^dc\wB vA,ޏ@ZD&0u-)BnAڢjabPgSMaTZMZ={:YxaȕǮ$oDY:G+!X}`g.FBqI{I9\V' i,I؜CNJH'-S $ǻ<dAo+/i 匩0g7E*B2Ic sF#*E $}T3W+˞׊-z6U `ql+Cd Zd)~K+Oi?7ۙRu^xQ22m9C n#N;GB' &ɥ. [Ar⒉mu EI=ZubCອ:N _=~4HZ_%Jr}xÿJp@V*A4zD7}Vق;ϯ'S+YMN +b+[2mGZx{0J&qܕ#E*$Fw2UbMwYZ`$Yx5_ E~![7ߴt;5A ڮI>uM۷.Ȣ7= .*7_U ́}[|az_̱} w#"*ɣѫe~\a]09\QMo+f^ykXf;G=7bOy#Qg,2jm[!;ƑYUB) yn,_ ҳ$% &X@Kj`u/?0w-SzE_k6'͵?ƹl_k12hH~"GRu;澈i: .N9BظšA8ږk؋knGS0 $e\y)t=ս?tb]f>ޏOȃCj2X)3SN S <ᇗGUk{y}~k   `4.t7VU}gk[6y3gqz(we|疔WT=*rdžG;Z+VH(V!e/n<g_$GqwhI-r*X/mGFEY10tPQNo-e[~d6U]膔XR6:F g YM1Am\o뎡r#{O#7+<4A?5[\M6m] -b_q7"sލ5?L_0Ȏl~I]TI|NV+Sz%i֫rTM.P Q| S-(۠`~T^sTPnE R5A-<oVb۝jTY,2ze|>7IG{nR~$5_-c=)Df%??&X/ endstream endobj 621 0 obj << /Length1 1424 /Length2 6306 /Length3 0 /Length 7279 /Filter /FlateDecode >> stream xڍtTڶ-HނzH*.@z"HU JiRD@ҥX=xod${^k97 e@!"B@Y ELXLg Cc(008 qGD""R@ @=P@aPh#Ϳ!"22R*.04FXG nG0FA0?J;bžB` xK :00 90@=9챞`4 p e#049X[` C&& @DHd,GJC (W0t0 +#?`{s0@C g<  wb0p$T Cb1?Saܱ{ Yg$gaGBuw!n0m?D7$2@ 8 ,o  &uEqC0/`0 sE."!X$:^. Xq~>N^P7 Zj{TUQ^_AQ4@DD\ %%gC0Os(nq=9nYKS- ȭ@K,_)?pG ~0C3 gS`M];㌠tYPD\(c4^0! q-8p$|[pY@p8 NB0}$3Q I{qr yR2@XR(4kg q Eq0 !`'v h4ΖT__o O|BA9Ra6@23k.1K9j -gO1\6ɏɠgAZYX; ;9o`PÐTJvORbKeKu ; D%u ʂwgaMCJu7 ]DcUYNb~}mw^J0zk>:ܙ=, qt0x7T%Ԋbݘ&>u\{ZAzZDd?J9cfbIGhCh=VCWm:P}No·ϛ@BDGY3rOfù92}²]Z R9>.yK8F̺bCZ*mR*u}b**ƧCA3}cc6Qݴ 3 Cʠ\Uh\RNO7C2͙b[JX N5wiILf×-3믒 )t]kBf:zm >fxy7=}e? aJJOV:<8?ݶǎWr}s|x='֘;c8uȶFZgC]}/?]$]ki#w/J}-tm*q;խݨur-WЏqj|!V:wn!k%_+,ˆL]/v ACKxVZ6|¶dt$ea܂Lo W?&{?jk J;OT [̑lBjFa9VL,υTFh>r#ЮVdLRԅ\MI.@.5T]5!~dptf܍qpзuj: չ\6eM!J:!*//Df3!* c'FY9P@NN DB͘;:tg0{gqLH 22U* q޷Oƿ\%flow9`."q?OSt6lT’:I_6x~ YQf(Ö&=2l8- ťn27Z3۪6:6 nVy.k9Om߸KҨFZҸ"|‹d*=W?,cT{ ~TL?i {l>HV3(_3 Ż6EmRuZvTa+|kQC c2"_,J:4v&%snv‡)q(&]Y#@$W8W7:K?.IRי{Iw>[mzjyM5϶Wa1}$=b]73сJvj_4x@HX=^znûݓ~@Uݍz9V9}.WINKT(n Y^yPinPUzz"P -mE}|kk4E}z8M9O=)֐-L>G_NωP^ҧ˭`'UUߴr/ݤ|t+eeASZ; oHfy:Ʃv* 7 D Zpr!U`']Ĥ۝J`{%}qOdh O$+qhqƿ٫!nKO?x́fWP-~nH[r-8pE\rm&sW*:6ef3!X[OmO;ܙZu٠X?:$/`0S8ϵO#}{cw6HёIW\4;ɤb8%P,U;㨀{jhtEEd2$+e%-K#GbBJ0׭u\,Y7hЊoRm 7٠b~x+lo)E;%kg]Uߣ^bGO#zeoQi;KKQӤs]TP7ESxa) FK=#܇=M|V<;,j7NF;id >N>ht'^,=j9n!׽`:`+ CVͻa6^ݻ䖮j+dI[Òflg uTX̴I8sx˦ct8|ybNE /۳Ӧu|}-FmUrʪ2<:hۦ9@jɝ^=HW!YE 7:m AjkWZ\%?R'SD=Hcre]p[\z|7la˞Wԗy!TDFx>MHmYDT:aP0;\3 4b}9zsI@Ҡ,T| X>J>5t51kQHg}_::; 8't+L=L?pYS'?">Ufw$ 72KMҊ@=wɇ+DW /on:ƚet쐕[_;_ZP6cEW}Za YOJ;VZpDSڹ$g\c=cfq7Ыf#|^?QhKlyVLR<50\b]n.JgIjs?ьa3+qG;(7'kkO bij-uo jf|$^tсטq+gv`y3# dO[w5fdK-WoPdF_x=L=/,KR'F뽻g3Ȇ˧p~-ұՓӗ4nK&<Z%k =1ܞ10M>:vr).Ri Xy6z %,!Db_%'57ۘ72{ y t "QDzkǭbHoֻx U1hS4%"(SN׌(<03fژ~ϢwPFr.mOݯ]1^b,|SRtDx %L1f\&aB4?̱?EߔshGF

qgW&aKq./C 2sn0ݤc "DY}JB[#fo:(5ǧ{"ȟx!?15E]*{xm;> 2=ؘոF vYlQlD9ްK%釹Ui|ys hNur;%T*&+ўvZ7ztBN\`9.d|h乜RTVWWB_5}L\}aa(Q҃#~]6&G%+gfWxLDW8#̺]VSOk3r TۍL 3i?45D'meQu1_Dpe8 [ś Uވxn̡ۢT{q:楕ЍLqH=_t~w/7n(!Fxu=|ǟ=BgTJ;39o-1hizէ$5S.!gv"m^+̏P䅹CEx.? ,%F3HY-_&*~U @ +?^KP#R)_F0HDְ7^ Q_*x~g-Ʀ޵)\HB1fTUF{Ft{QfhrmsT, [<-ۈK48 ɶE/&YjpQ-L\rz9k(^kp3j]nbQPlpu5pTn=PL5)G72i Cw|zA[szzMrB%CK~B=rcnDrZErx?sCWi%K9;ݲdpn2Msk񃤰*f^=I&ͥ8k7䭩8Q<ε$si/=2::gJC=EAѻ}[+YãxC&n8oA{j--}D@!+*m}{G]ج|~3JZMe,6 4þF]o'&otCl6ڂS]l2o}X>Dܛ/^|OƊfV?m \krw29ǾU4-oסꥡ|gr$:]h(OݪJح~*֓ͩ鰬(;b{gyg1`Rv`z ]gdw&++:)4{$g 'N buya_~1Y9FꙠhI(S+WҴ1'(b:>i=K3yXdcfmݘ5ir4ݫ41|ib z$ZZtm=7_wG SJKͿ|5WqˈB > stream xڍP[ lC 8l7  wwwwwݷϹ+S\k: Pޅ ! `e`feeGҰrJ rG3&a`sqظxYY쬬|0v2(2 *qGOg+ K> 50+ ft25(X>:L.#? ;Bnb Pn@3_# aiC0ZA)f@gGw@h`0s86fO_llj`hlieo0]<\fۂ>݌lM>E % 0?L]@ +ۿfd1Kڛ;]@r~'._c:h[9e%aBftpN%_ 4<re`1d8} `fe0ZX#] 47g+Xm=J2g:?}rx3qpعXll]G?<+ko7ݏsnk)9|([z\?_)TWW_FR;olge庺|l.PmWWhfj. foh&6NfVۭ@RV@3+SvͿbe?%3xE@ C_ 0vv6DfJ3ǿ `awpH| 0wpFby,,E~qd{~0`7ӏJ^@_5uuvx|9@SESڐj1BwIvN[8}I|C qe_QOM6qXm |ҢqVۡM}1OA 仺t8,p.ՆoEp~K R7W>TX^41#ALDr AtT#67)K D,u60ε;ZnFxr(DQ/74`jW%6=$4.B!)?}-s#f,3 9 )O~ /aBk @%QQES[V&)$ؿ /5sR˜.P32hJΜK+`lTQ^b1 vbA 3zp#hʥF3U 5"H+ȇ{|\*;ue#9af_{,P:7g11s Sq^acuێ7>urɴ]Q,BZ.}|OX{H D8k͙{FmvWb͚qH2ߩSƯucܽ~["r]unwn)jrIVTDN69K]&|1j]jvI*Rj(&a͙M0ېI搚NKsI1VJƲizJuGk!9 `а0Yui)'>kGbNUV+-?i 0|UL:DAM.L !I1@XP,|uE#aQw24>])y w"U=MV,+"X/V$*bίVX?7dPkCr5ՊJE@I˵M& .N `3:PEzyO.q!,갴3@n$}BV$Dq6tƚ9)S| wDxy['ǫۄ9)FgbHi3 ,$RIE+O8dZ[Uws_emLMMru򅄨-ܞ<ת+I&?Q8% vULy6) PO p,Mꐋ"rrl/O0ﻂǢo uӳԤ2O(v:Z P>N?h+9a1H3x=_ΫYkk>v@ʹzӚC4,h1^u%j7gO_͂s%iQqWiwJp}^,F[+m~/})4l._ >~(8dvqʩ:$ݽ^|ϭ~g]q#g,ytPs95Uk6֍ܞX(d?*#A{/$]ĉsEjΌ1E 4zDY<~]mC;ӭ!6l̦\8neuSB-p2F̍a=<+>Pp' D(*r 6V[ yMt5⬕}Z!XMI45I8Իiɇ.HkDϩx;.n#N9-@mD';6_?me*8>Ƽg#~c6*;OahgDBB17in a71h7e#[k\_Z PN{fo0Bv;ϣAcL % IA.vU>6窭wއ;{Z{q9͜߁VȪrZܱ;i.\WW8MSo]*Szݓm,7nBۆ ɢ}J0!RfZF#ݣ~]LR+e]3`gd;mņAC#a).9DҸ"•kc~3-.xC ̰\-/#{I'YE=ryS{[\݅;jlFA ?t:? xEMw@*b#Kn &wtz|5Vsf+s~}E4lBviyW3`- w^BTBUp!aH%XzD%ϯX=Fb6dShArW'zso FؓuBqHU2Çn=qpFɵ۹T04^{%mVt~;?ާH 8> *-W'0/ *c>JupDD0HT쭶-T8Op^!lq05,,jgg+M < Da D;ףL 7ݶZT}Si[">9E9|{-G+t5]xsq/,fL=v~`#gM#QT#{C<~yup\6ԉpr&TkxIh7垳a*jCfE IW".zHXal{^oR];>Yhs]wyN{; }#/MaOgY]bA#B/NYmË /,zm&wh%|uhKЩ ;!o3M8 ?Տmun#设eNbFj*Ni;]V?E<<_OM=5qUEQC5י+k+- 8u.dMvbJ ;{-ttf֔ a2STŴN3|.MݥZ`,!0t)T 8 Vrwbn]=>T X(4lh =MA^ dP, _B;8!v6/P<bǁܙ¾3,^/Iٌ6|H"Kh>"$e0#knc9$Ş1ÇWJ<9RP|HŷMzz׵xHqD񐶟7t h`.&zB,+//ᙁnҨF2:s)ܢ1uf)d[&=wpD0%+Tgt~^kIdΈL9aѱqf~rS!2C#UjƍUSP\ɤ76pH%LѾ@Kx̀GF;4_U\"=%\4&ՆCLUbq&hIb' |^@+1.!ub{m^PjvN7RwB}aW)СC|t6Nc!?ctznҝɮ#;Ԡudn5\7l(#ztFm P?ap }.Rw2kV0զ9K1dMMG 7'˲3AWNMSp 5in=&p.]e\D| & 盬ff_4&꿱ec@~G?vnAyh+wӜx~B^uMk +`V Us; G,w$1d}6Y7uFѤ:?4m7f^W3S,⍋4w"8{Q\TosmT;9]Dq\ =պSBR q|TPK8orϣwp(@2l=eyFYJ L }ے~G@Lx@f(5M6D4A![H6A֮1[hݿk \Q;'%w+{^[ _]44,wԘ[,Zz,Q?C @#l CgnDD aQEex-)V-BObRKn'p,BM7,#r[="mʲ-:oLo[s7Lim;%Qϰ+I\aGq!)`̏*eɈ.11TEt隩|Ga~;,x a;K L2sm_ hF!>گP6wD+Z\4(K"ɭ񘠀*!r|kP{)$DMf pJcUЋ᤿`GhܳtZ W{5x7I 6a; QH(;٥2)ړY$j'Xj p `) Kޭ._0rhslb;|) 8iN4FyGԞ?$;&O*C^m5X*x!X!0 [4+ GD=[_DN0Y TFrqhY K{ Y^4>:ގmp\@5[۲uyx`QL\2'02Hdt?yKRO8ϥG&K8af9S@~_qs$䙰S80͢HU%JAk7{֒ʇݷ;; m}=FW,H  e  6B3W& 8Yz8V G#L ;CñxmuU1[%޿lxbkYǦJX_a4`}tggWZ|Foe5GoA7tɴR̜^׮lz*r$+Q틳gȿGO [4g[|Ϝ VI`Mק˄FX]#mYE3bn3Y:7!J!Tq啝V[oԫ";wRQmF䛳#;Hڄ鉄k8Rv ?M]+.tG/2w>}!K4_:ҠId{v/t ,ֆ]ޗgQ^hk'4=A<*h=XJsIOz䗍C)/Wb$0 "aFۛʸP'Dx892cy 2B8??;}˾=zS|xl_yLeʥgݣ[ȃ0Ml (ea5wW!Rbbi^RԊ~#岋Q \6 ؚ{vI,H[5qo'N:rmw9+GXsj5!v]Dyoo&c`Ե50}s &b4#}lz3]OP.Z g084+j0{Мa)%tWfD+2$QulZ[Tmx9 Kjݵ ̉wf%7u nZADX? yqAmA2= (b4M4 2![gr:S??/dBr*f/\*ᝪU:܄URRdb WN;Z wx2QJ#aێVXcycڲp>/*h-\Wj6σo^Lh6daAl5=85a{Z{`iCtZ@@})n$\0/s05 oΦѧ59PǧLg4uL?j{!xd#~ (2:7l1 9X~l)8z?[@E= o:1ԉZ`לm.~ ?Z)Qet qwJ'Ihlrr$DWⶻ&9@EhE4IIJ -+DPY%tM rqyX9ieG5U 1ݖ"9Y*WXXy\*eِ 3.k_)\펖D--U1J&6NAo+J:!6MWH[qx!.Dyz5&[%aNՐӨ/aw9Rשg` ka"@/榈%Yj#ayd /:$ /.*$]0,be-T~ʭaH@ d]U|{%ڣS.D 0mxFJ@{ t@DJ-)`?χ`tg!|#xZr{:fw=RowliyZ/*s<əYaCf(Gy$  `9;|R6OKQ*ǿR8,{>d*-d=m&#xOB`W}E` T+_AفZ;:<$Ia"Fsb-K a{AG)z+Mk!~[?6ˢ%!j';S~m?^_ݾ謰Odrm#j`E!&2P6NØxʊa%aϼ+5ѰQbY3Ƣjcq#Z|7Ju#m.n#" E)A5SNvfC<1 hhd(nҐZX)-te9N{aɓTNh56oKsCEF(,cV ÙI< T}`nFq0 3 U]ߤG?^7'A s;/ kUC)^K|ٵD{k6:|Q0G>_& _]D{)QnI4p~* MdЁ^ŭ{{Uu54fpϔ!kMdOnڗR]Sz2er`+B ,4%{([8X?\^G;,fyNJ-egu{' 4!&fKOGsL~^ {2F(:V ߏ~}v#3fCUu)=AFõ!ۻ S'T)4pLgă+Δ u/W PSMjF#2y#QxvC EX;;EW"R`坫EXސ_O#FAm.K*YHc|Lm;Ź*5}wPm8FFpb16"X+yKЛ1~RښfIƓ:E8v0Wmkszʎ}adq^\z*1nsQ4.`+=4b~2H+d_e fwoCBՃzS^KQ?}رIuTW_T{h*ikh_ f&p"\:K!HxЪk=(e75~EWLJZ+`WsO6D4l<")%7s(. mPy#) TUӀ,_Φ]@ 5ty apS_)>D&O-4fVL2i!ݟe&B2(G͸ylu=@`2} x椒?HWSoA{|ݩHGTh 5UJU=OR1yb=T4?0;%wD͢o`GEx&BCoJ}=Zu v%Ǘ0a 8x&mыi8;LWy*pQY4t5YjhxA}؎ygYUڔ D߀%Pq3ڎ8/D k#n7+E4+Ao&)k4<;0:u>B-,"mgk@Dd2K:Tl9Mynxc4նDŽ;A%#O_[/ J<ˑ)#>[dV\rO'J Jr+S</}mH#()ݠyߊU*&3 X2r#|LX}pp$U8+TԱ!v#΂.yv9Qx)EM^G@p싨~-T1g)^XX|C4r#^:qָkz[ jg=u#SnTDã*?;:0C_-`6k4EvZKEOAoJ#l$IŒ((w/5 F./kaGΩ_eW"Zw|ԋ"S>VnvGQe=Ϻ%#ux(E"&(u'S7;J67 3[bK¼R8:mJ7`}H\fT nutɐuR~JƼ2FAK,{O"NF1 C&kj(%S$^'^RL%2I/^]lfuZ^PYTN4[D(jXeT3]6`K>U*KM@o,OaaH #RD GYGq<=D,Fkԉ +ӴEvye6҃cA>K$-(A1Ha)) 8,Kן}Kӂ?SZ8B(5#/6]J={@R{sF H gAAt=(b=Y|1 !7ZJvt |K:ieu Ne κ! lHFRD!yo0Sk@v"u={N3 ޟHp A,/^"YK<]\T1 2C9 Dgg* .sQdFE.ԘT#=cT,F# iG$/WLd-(O+@վ,-aAB"w h$⮇GK!{~OFj!k+iv K Б{bMJ[rgEc[bu2-OvUWcq7Cac6uR.3wt>1CJ˔U_p^r")ƎgR"KMz7<{u2f* GDb Ο' S': ۸;#ÃX`'CCNB?e^"ǔNi-"EƧޫꖜy﯆nRgVR1Oj衝(πr+Pz)uA/bGmƆe.e-Y(#`]KPB^c65 lϢ-FB<;YJQcxu'!U/?ܽDS |S"4:(S9YrNf4r#To;FOu_%vl*92ק&:keeP]YHнX&:JJ2.Tf;~ߝ*3/"5sjl7PBO endstream endobj 625 0 obj << /Length1 1368 /Length2 6039 /Length3 0 /Length 6981 /Filter /FlateDecode >> stream xڍwTTo. *%!Ja![D$)Ai$PBA$%$UFAc|}u:ky߽߽pC=e~I _|_>]wkۃ&>`œÚ*,B˃T]ߣ?3y}1 U?+m[9&Z|^rb=#0QLh$0tEd]StEa{OyQugy7M /[d7 bȮJK]$ k>n)Wv<Ʒ>QŮR ȅ U*U:C(v?xCBxM47]&=ŊeԔ/g\M-,iqkJHj jdiE+'& Γ?ĄQy / &bQf48|訟8O1Q,?۱M䰠fڱ20}` D0x'1|[F4I e~ OHKjj}[|6I<;`gkY%2c7fDp) ֎u1#C/U.ά ?^WJh[ٌO(hNgn/k{ ^U<7N$֒o?&ط! Q\ϖ_rS[ySy SkGwGJ\NУQx8P/xS8y:u0x/D(s`$Ა)I ⺁+VTdyMR_0AQð~yX%}\@mC+,uĽUmY[wF3`cU¸SCI8WccʃD<-~[PʯHRKwH ;T><IҫDBޑW6T$PqX/a.qxcr:$Bđ5mqFG).堞,m:WW+RNfi,]k8fEze NZQd:Gp0^"y|%/#=)M8B&Nc>41X c=2/a3s hQD?^,S9(vvRsn͝3'˧:ZD$,|eH>e"=Lcx\xPdOȏI|:U ܱۅ\ T,RHV}Uy'-h/sl Zfz>ff[ׂΪ&/x]RNx]xvP#wAƥo6jYO/ WMޔW`?` ]T. ~0h*J=1*`RE3FwBFwavrɴS<=&Bq] ^߃Sl%ڦ9/0#q$?G}VyQ\b|V,r16dqƴ` u۵_QHӪa]$ q׵2JLvwyJFۖ[,۞CBچ1Ѕ5(tIy|h}SXE`z?rd'@})yW\ G0U@1Nj6sZmj󎚘\KPO3^d5%(F8ȦtfKNջՆ8-0n/FL3eoP 5etZAcI`{BX0A~JPD !Vq _6?x;P7)CKLr90˳Աb{K8fWE ֊?OۚZ P9(ηp'rW'#5~a(ឬڈ}u /3/DTLtW!^)/`vh$gT*EݏC s1%=~ x#WJ&$u"ہV[L&Tt 4-21vwCi^B+Ͱ7,>^rRjp.rw\6t3[wW_f;=:RgY *],*X7ȷ Ƿ֬ADr9艮Ks%k.M VJx^OfZMr,t.0̤1`s0Nh]mًt{[K5i[1uLFn LZ덝_UMޫԖlRB r,k$۰&ҔB~śq4)$'d+-kJHK=Ⱦf]-77/Tx!7+>|SHO>jQyG7XeV?P>KPJ8qnKGУb٬vA7-ߕTMG*(Lwܧ̄$!۔h,o"hPl*^z+W\*OJ 9L>1<^u!+l`M+u@)~3gt.6_,Iͤr%%2as>wDN xCm),[+9{UOPp<r]vyn\ʫXe[Q`OʌXyuy܃;SțyA_|QTxEb0G X;^I:]{{{$W8xy*̶VT7* Å?^%>$%V9Z̭W;N^pی4>4ݙWMg@$Z;H ZDq|InUsrLnPRb Ov]x2k/IkoDG^QbvR ۙ@{ {vLiLKힳAg]#r&c ʃ)Lm 1kv']d=Eo1k*%o07=̴kCL&`ﳙw%s_!!g't5Z5CT{mi eb۟F$؝f>i +RI=Ldènu̵1ش'w T84=#C36_MQfW~407J#<^lEqó K3`05]"{UB * SsN`'v|+1&9Kkk0h.^'t/Lp=$A{>HN5='AC>j5FގŸҩR.^8DC *l;|C g^Q4Q5!u6baQ!YԾ1J]&\L,dc k7ߊd{[$.~Et@H*!MEv7ʁ\udV-zK|]NY%gNhS᾽Jҳ5 nh\^W b䈞VQ ٵ8ax1B4F5yqTth]`fihŷΎ߇E-7D6u+,T2Z`4j '{ݗk>O~0|,Hj4_ajyVq+]#CtL- g{Wjʛ5ؑ6۞UeyK;~L~>[}|ᰧ<[z sxp4U|=2/D66H&,q?c)Lj6vJ3Mkb9넗uqi&kQAi'*;=%.L=A9F[ҡw!7-Ԋo^OMAkKll^2E>%lG^M=NG.lMa/m-%窳3t=hWoo<˗\e*`Nu z=(Q07 +MEcX۲k_L^65J_=qr6t֞6H[I?X׃P&->:^%ac`#O #]c14B~L{Hт߹W5GްS7L&&Eqmk)^E6ѐ:Q ~,n߈- ]M> stream xڍP۶-&hFw\;! n;'<ܳ_^ukLsU5MA&6fV~Jb [L rrCe $.vJ- `geC{'~$ lPbC@TN`K+4sКxtفf@@ b{hh؛A.VŁݝhld)LpXA '79@;_1#S45-\܁N l8zBAN 9E_g`cfO 43sB<KPVdvpa!m_n@-ʁi15s6s;83;mh0SKف .' vݓ寛ػC`M:hA 9ɿM^E,A..VVV^v0b#O%|M|?dog 2l0Y!D,¯r ?2zcȨJhI1to&.;+z0@e+Ub @r;+kAHnja. # iW[?մ?joWҺ.@该U]VbW23q2r%;K=@`3(\UC@?ޖW/V{/3@y f;7D~Wf{]HsǟL0C]^]=,읐Vn>?+AE?ZA:k> W^9,\k$Pv@6V _5 ;_|D u\^?7^ށ@ 3y{3뺐1"wh׈:;Rn{jAWQb]QG/_mtqYm6|ңq,L}&1]w:;M8 斸gCע3tx?dnX!43BD!rBeW׊vQ:_|">OaX.gH':K%gsKtRg.bK#ĂZ8~qLw;86"؜Urp%W\|T%f2wv$XXQIi ݙq߰E'i=EWCq~P^.yHUّi)9^ '{(#fWu B#O',&K /uy49/ņv`j1ڏctC9Zopoɭ NE}`ܒ!lrPVs^6/um?g%Ybɾv+eȿ#Z'O=xCX=|^n_x_j@ٟ6-h.&vyWgȝe%X>t;T%l.3JVn'k8;wsK:mBcꛩ7͢enRաv\ho^iyO ))'3<>;%w`xzSљ>нf0,cS5)x,x~2Ӡ~ $P]/jmyZn1FÏ{ŢúZMjYg,љ/)R3J1GC͢@j7-4|Fvy !`A;ggߚ$INm-X>udݶoVEDzؾZ~NQ\;]DK~ހ3NjES5ȧs ܦ)$Lw$Y˃ԁ5z$p1tEr\1ސӘsŞ*! tؘlF6'AdgoVEK: iQ''s\{QUf@!g);#YM[%ourQVyUak6#}T5um{'׷exZ*QAJ`zWv fsא>? ѾMߍ1 4&DQC,6xhR_hevB[܅ 2/*&yDީxQZ" }U7̯s{Ͼ?*sNE ^޵=Z GanXZe&& jm%]QՆ Yb~™<=%vV *kյSA M/^R;䪽DqCdP^($3[z*҅!R>![gN4E'p3- FMu̧>C@gSDrկ֥>6~5}&/| 8Q&fsᚑKZ5krH:0*wŦeƓ].]3L;NΝr}^bJYI<711Z6<{J8$7/ Wxhgvz 6,}#<|VA 'O= +f,n zÑe!ݣ\LW50Pră{X8بpd=ft{OR.G׏G =.jhc.7P\altEȷ0r5$<90GLppҒ..m'v#gwl_ƙӶ!Ǜ"T,+\7PLth A?%SfR2riWK4aaE}7/ߨlc0Q.O%T?Hb=?Hv-i|l\؃|=A@@-\4L5]a;Zׯ잲oTJSak [c3d DrJJ}´@mԖDϭ s44[u* x53N>|#CV/#;%ިp:\?Q;_L;Y~nLR<$RA,dȼļdΕ͘ XCT9G銜[,%FܺvBn-Di o.F5'&NPZWuɿDB QGD3`G^)¥tRoYfa#hhIc]r` ֦ax+_8*) Rp[sDn d(#E\#fP}JƓ{?>:9ʾ%3Ks;;6xy(axޥ}URet67ɼheln$x<8\̫`}d׳Ձfң{u XzhD$]B{Qv&cֆ%g@urvox™ki1,uYuc;-)(fbzx v7Ayu$O]!r+Q5?3" DZa+:S UJݭK5"f<[vD'4WbIOp[;`PB?5.42{; l`ײ j2d22]θ 8Jރ\W/j9˄g>R̬ 9޽a^Gw rSYN~*c6FI^q,G-pI {[0*`ފ V dְ  }]z&ﺿ[,j8=VnOWYG"cyu(gƁ3 YIjԥb|wƥ;x/7o-c"hHV*u ђaoRM >lF9#:U#dEF˂xmX<7LErLd<[WVmL‹9EF /R!߅0Ƒ/AZǷ򎓨GX&?nj46Q°s"'̲u@afk߹ Sew@J)GS ꕳL_FrVZC:( GP-PkѮt_^SC>J$cʞs[sD7Na!=W;ht%k2s( 3,ovU 3&WGL G#To+/7я @K ]P<9aL CyE3z\TWUi O{|%o-˨x?RyyWȱ%7#$)gճʦo~tRDf%5(KX+@ L33{n'S])p]@PfMTܰ_{>r ykQ"Vo/) )&)ʒy.TFˎO1^VUx7;t4fWr$fv]݅@p`W `29m/01ivrǡcu1ɡ dB$%ɫU0 ֲ"Z2yJIUp?j@>ށHo5f/ɕYbFF2qtqcDb86Ʈ4v`?`!9kܻt$Fcep\n}REKs!^wb)klI&Ƕ4&xEYIrL:,5]\Ƣ-hz{,έ}QR[Ř^ vq;2_ݍ*Iإ巨 /,5E[~;~|v}J9͢\PC`K5V9@;0~t,Y7Mkɔ^ⶆa._y|neMU k4KQk:?Eax摒m: L6Yo,î( NO]B2 vG& ;I,l`c!}mw&w6k[GB2r4"D,љdžG̼ͬ%̖9/ 1/Fwr\dF&k0z [n/<%}ts8|r߿6\jVc|\͛t+pcftZ65vEUww)cIp˕2PJ$OBghUپtU$k $ ]Ow`&1:M?s(j(=.fz0m<=S/ՓË=6gi([ޒG]4c@}7p_(ay.!M Yϩ,s/V w1x{9'5NaqD) mbV 0[p ,SH t`O)>oX`"y|{ʶ̚%J IVE4槎~Bs4&RA"fo#3iXCFroٷnMJ- 2T/AjvoOwl٥t 9^tOK0b2w j&+8P6ףـ7Bm=3k&EPN_c98KȂC"!-cB1=QgW^EXE0yjMFģJ1 $56cs;ܻnJ `Nk!U8nji?'ydُ:Q"tsQ?z)`^HEEs}Nɛoc֮smj˹%_|UDwF#0Bm*JX,ɳ352{IS& K*ŚcS籙U(.봥z2AhpcĆGӔB{QA|3۹ٰlq'"EX%pGޙ$9 siXl[-v95Pu곖Bdk?gp~\4{T"?Kݩ9Qx5&ѷ-M6e@-TUp9 M- C] 頄9k:qfOq =h)꫽)VI)|* bw1YCPEҮ6?+6@YSLl~.NմyWjN!v\eS45DjT,^[wxieH>l2,!mRڲYwԂvZhO,bK>Ju(]X'S93k' Mi>1v^c0i1_9F)sQ=IJc@{~z~uy]0En}c?#MUA&aZ.wUY=F5˦Vro%lap Wm>F} g[=K 1=dܮ& z 8BrED ujn[ۨKaգrb좕e 'a5_aUï"(JqM팷Nڄ?8KVtt>3U`zm,RV#H+W"rRxrmiĖ@7ZF9;vJDeAZV.WsEy_ߓv$pzA K Pb%8TSQS֠?bW t{oЍXD+h.񲍏\p{̈cj՞ʸ&@S8/QhEI866$zeb"Okf5d;eBe!7u˿4)hD~ޫhݾDjNLZ[k ]Sɨ.xJ|3/S#2')ityTX>H@04hIAu (F0&DYs?P!˜)ڱ<2deW1'%}d 38WInoJ)[{a=,;[zF18:姝؃v{ [-},/8|Ԭ .ѸB#>e'[%RL w8%/GcvM+Lt_ vggsH.^? o j,8;@ñhBI4Cn@n5:cqGc}gEyYؓ:PX!rELyXRe/N.<qW>B5~ho¿8@swQ+_ PIc#] Zk棷i6csvqF_wo0oӡCM%L5X^dj"?UFcd&Cܐv-ȫfs^lM=blͶ CEІJ>|m6^fEOM~~^0JBn7q{a;?:~n̓4y7uy,F3Hؕ6׎#%J xGڐ˾i{2ȣt+eFLb6i&ɲ(nV Hcƙo%'i{k(p4げix/Ɋ O[es8uDv ԵjװLh@ZU/Q6ԉgkrTlCĵ&Hc ͒{gܜ{%7*Yj$;s`~b YĦ*\BsMNыv4^ؿ]FT̷AF8 *CE!#3&˖c ܽ/~L`̸*CA"깹pJFUu. {r^U։[ʹf>-U&kKhpGIw_^kiB@ L~Eh@cWV`5qŗ&ggw1_^}+z70:D0 BB~V]_NEŘ(GΠ;`i\ :lcGrZ%t}erIc#hvV{o5ך&6rhb"Cݳʑ5YWWwMpԯQ7K(NmYPgzEwI*QLgHe42\5T#i!EK`qcfLHG֑+|ا&9(zlwRJrp<DM"n> stream xڌt 'il$m۶hbf4llvcNn~w9߷ֽko?OHim b6Nt \aYF3,)谤j@Gs[I; i"N6)g+#3\sc,@K*lk`nj~((4F6Y'3G#+9LP99qӻX;:Q\͝J@G ;e5`I*fa(ۚ88+s#㻊1,)GX?4`cڿ l`ddkmg`nnc 01dܜh6ƿ m \ ̭  &0xͭ~H{Emm6N1wݝZغx21163PRow) nFfb2&igk0yOmn|t4pޞf7ed9 6&w0wh3#_flkcGӋiIiJQ?L!![7'- `dx-?Wv{(^Jے}[ Ϙ02a<V_#sOs`,,N hcjO!݀ NFfȪ`hh\F}$bw=^2&V6;,$1<߷llUyLl` @/ 3d v?@1w+*+^k8mAzFFFY~eh'NtAFVfPF@+ӿȬ3a_GὲF lޛO,)2= @ZY8K= roUT޳7˿lf:ǻ|O8EcSIۙm%N3|o{5ݟ36?YmټʟBq6}LեMi12gfh_ea߽ey/{쬜 ;:X12_e| ²;?'q^k8xNfu=S'W)p3>z%p4uw{/뿶ݨۿWR{ݒ?m3rvx_ h8gkd3RוvgwtG=sѡ*"-`V0~ yeKF`*)VsN3fxޑ`u/> ׋Fv),{gD{q呐 6i)HlYlbH'Z|h*s7i7BjXHZLQ*L8$8ZnPG&<= #x3(@Fz ۉNe$Q9GH5av~!cS7܅9P˺DCɹ{n,hH6لXZy FĻʳH-"?vuSn+=uFʋOFBFKc'Bcсl6YS]}e9J~puūuϗd5D'09(CLB˞77X,]uI@jٸ\`YtT6tsq1'S꟏G|G_gC |ݠ`դ_ٗ +:C{x,+Re!b2 Ҥ>LN,SypBT)YZ7|B@CRtޛMEO>I#ZӝZ Cn?CDc@RPkwf9bڻ' n,>Ef- K֮FFNOSY7bj' 9정~3db(!?0UWdqG~6Ѩ>}עWSFt޹%ndKFesQbk$ D,˹1fkwBJN:SPRnDMuôWE|0?X_H \YEQE^g}EG&X%h"yN3Ɖ]YiW-Ըuy읤Goh(8a* aUW&529Lկ La1tSOMOʷ K#zb4ucfl`n(ԩdX68d; [O>*I4P|w&fkcƴ: 9g͕>~d0SR74K{Om좕ï;O&ǤvO<Eѳ?]K^w"oÓLcwbe~BӑM1'hzZpGoBA='Œ» 6RǹYWgYZH,KOvD-E'|l>*͙&K)< l':kKJuF+=M-@>rwFNNGyjN6`ƘUOkFSP;~-41E™ G-|}~ |F7e*jRcK,7"5@KV>TcsE׫a/Bኯ @-1_bRPD%}ݹtiNԉcqe~D^eT{p($c_>dٟ5UUa2D#q;i3{E:0|j[x}ZZWO³mm\9;`5 .A_/AަE ;ݧ<þY!c N ucrh908Y6Yƛ^aҳSUS8snF|9so]Ǿm> om3!Z9+̈́pCy@DPU)8ٖ뇐t' 3 ՁW Y 6U m8~˧:cvc:z0P91ƈ|_}%Poj+EIrΐԜoKH,(_ő(&^ :y m"w}*5z $\m{X0%#È}>;M ?P7G[T};'Fն[3X^x 7>둽M&,뙋@+wcF\ 8B( Vq(6 QZ䤻&>l 2芓!YO}&1~*&xWJm=GpL2~!= lfd#B& DXM aN<_?h0z2`{?1ZoTA+k{E2;4.c*Ί\5Å[Cã tQ(ጟ0~nSBmhTmޏo@G<e(9>6<ᵲ,>kLI֦o҈)lPc =kc1aA:&?i]ivGJ&p$0fF(r 1:X>9a ^sU}eT2=<DCHh|(ʇ ;$y]e7=\_0OQtPu'$U,S-L 3$b(`;7J"&Iۋ0}K?:;` y5<.t5dL_gKPAl:zp '`Sþ:J\>Jarjnc4M{>W#?Bg8My+<9`HUsL+-oax;ic\42wE?w:I~L~+, W q&oў|miJqv±HvV-+e}RU:Tԅp*Gqc ')FL~4ٚ~4TÂNDFL 8S+ȳV q^ #cX)(ԜdA(Gc=<@DD( JR$khRעx: c7 WbsSRE B@E,3I~0i)'i6Da[pTކcyL97k0#& t+$mȗ@`W8]z@=f2%@j7f;kxWM~S8Qo3Nqv*@`L3q"U '9[g5e̜ho& {fknٕr'}ӪL§%`5%zhڦΔF,yU@wb!9ɇ}WKUaP% Zɒ˂hv*s^QSA$@rաe>vV83nϥ)#bD]oī`XÁ23am/e[BG7M«L9*f~`gj'C`2H 90ﴳZHS9 r S%[ i,, ,d#u43y\#3Sc6ZٖQ|eVLIpQҎ1ផ B!`h:kނx k?>[w~_Uv6́ iD(H:JIQ-??ᐳ\F&1'9gJ+RᵎE^WOMOuG`X8t~zvĥ5o۶a{i*@/L{NsCxtgؑ8-h3XN9'FR~FZ^u$ړ_pSw O??2{ xmhܪC-(I %ImdPjw_rcd*5gxqϖKFiٗ~vfTt(ua jcEs驃P;?3y'zdr0}.VB&P IPqY}wo4!~J+R78Z@Vlo1kg\`냔Gx[.e2lE6x4Œ z>~0Dm<. |5':eR:xeGA!IKE~m6!RW1y+ȤģbXu^jo90l%ZXdx_F^avAE1 ӟ UvGX:'F X-u"æE1s~ Z.faoC.<Ղ3ߧ<eݒy8b`YTYlxXHt[{phs'na sc:n"a`"wsv?qaS]PD\1@W=knj/wuCʍ/Bzu*|-/~0G ~XMcsM;AUcw3}TX ў!_ִzqc(ġ>$mDpo$$ wB@ݡAiAR.;fhژGF3"U'JPOARhs{VdfW4V }.@ҭxE=0.?nG r` j7|V -5SW(nb1g]8K\WA91~_WR3QrPB4q:| ZRu PhѰ ^XOQ2&-ChH)Xaak!=?R;Y+RBp D.ꃲmO na8ꛜ3/y_iy[bPQR"3m]zvdǪk{{f3 ?eUG]bȷ Qy;W.Ği\nƔ)e:81w^%˸U[e>e:ܠRrUlޢ̀m2} 58&9^7ezS$ <6R 1*rO+獛G0rAָ'N_ /*Dsx&hrhuLUKȽЅ}[F;lcKƮ\+E`QOG s+[˒}W?\v f[Yb@50Z2; xSڌ Nmd;`,QSTGR5W˖mQ90U9!#71{OCTM>e5Sw5Y7lj]k:fԫ єo`1ᩍ~2PpMV9IP9 Ω8ry/Q^&:?e[Y娈,_$_*rN֐K9׫d̫9A %%?J2&mlj)Ev5%Abíu5< ho#AJ&·lb[hlP[ 6bxU&l9/BĬ-OSAMukǛ\?pV %W|%YOj6IM琰Cts=r+<{}2<^"*JขԊa3~0Td8 qUvMM @gU":ɇ34eG1m~.[-VsH8z ?IE*;kjis39IQr\:D4W>73[Mx$q6Iq@bZL^fSrm|,FMu'Obh]f5ljviaS*~j_g]%\~0=vtjԑ4CMe]oNkժsBTb, !m%v;zp h?r 6#e-s66S-â 71O=D$(R8h`.D%E(4Gar`k#Px X5 ]5yEiD=x3"O:6voWBfXW!(C[zčY* +8BO b־ H橷y6 A(USڟھ#Oٗ~;+Bd6\n}&jʥVlK;;YC[YZ5CJߞ ovz$4jE:X|%YVW\wڒw0II5ACe Ὣv&NIu`^Ay{i-rIE!~4HzUEgs~iCiKSB1>uZ6 ÓJ[կ@69ET_` k-կ#AuX:'v\K w.3g,u}~1S_ȊHʦaOwoJ1`) @EnCO'~`!RlT GҸG,̧qJƯmq3Ӛi[b1Sv ŵ):GE K.YI7//-pj>)g" $,,YiwJh-__B6iW Nr!>L$ "/dϟڑk1:v~ӊ t;gxSzŻI ~ёt|} q}MA'A.}t}҆:wW͓&YU(]vQqHހk*>H?+Ht$Oon02W/%@F |ܬ&v4K*MG^?u1L8t_hC=ƴ`kK&JЧ )4C зk t)_MP\r/%1UuJz7(tZ/.Xnd|3"/Q^ ,!yCn3 Q쳢a8rve4e&prXW`l/N4+x %w(sx`-A|nrA>upۧYz5ũ5y V+Ǽjpw# }=F6J@s0%@ т-yЕxw6z-z>;艋qL%ϤtEGku w4'M)t2Or12LYu8j$jMW*4:rb ZdӼf| H*~ᅈ>/>ը Xc`PVD]Ņ= 9$y2-TÓVe&ҒOD Y x!=7$B$n!:@W:tN|u+`(&7hӬӼzK'3.fu#K ie$bF8D+c~DThR)S#<81AI[%с{jQ/r/>LVw \G.DY1ہcaXERAeHKX!G|?>^y4SpIU|ė~c042qw5]ʞhozW)('?Hlw> Lsbhwvfc@,唄e]5 Al{l/ ԮYL# rpIw#Z3q|PPaYtS=7֌cD+6KyS|Nbx!P8^| \>*. wZOϤpy|WS^tBվ H'@$C Vn G[_6d`1j*u^t:'L{Y9rC{ALb2^'c& |t7] &% *Eoe#l#h(|tj"ؠ[ ?i_Qpwz~mNkd;bOg^~aѩD$>zg_dS G>Da־R`nVQWS){J`|'3qzK'08#KlATR&YCmFXV%lB+{vb=i_ؼw]ÌcDXv`i xL8iQ$ۄueS͡+k\[&ѳŐNOX5ץڔΙX.0$E>y{к%ӳ|w 2("jE/0qµ 24ϺN({9$C6M2q)L!դ$A :B)Z7@9TUHpG lB0twAYU#(#OkG.sRkPT<7وonjϲhSSWV0$k)͕]A5",'\i,0NtJQ2&K9٬'gHD*Jla:VADJmQpUx>hR5}x"cte0H07FSJB)&JQ_!!۝Gߨ?@] n[$>9aw̟+cx^E׷<^|%~C ~xa&=?W\Dތ6Cߠ$Ib?BFq s(ѼJVܺyK I8ɣ!"Zhe+.lpK*Jee_𱂲|1*\Ђ"gW7^F|< `ݕX _A@[Y<"tt(0*pi@:.Fh4w (z^˕&7= !jM=l~Қhڴ-@kq.E]_agP.n~>},}݈ޏ8-,ڍmpoe,FZdRccWx큂Y9;'(- 87>ޞErx);QV8܏Xիֽ\7rA=Rd4  gqmK=WI㴥םee4>+->pXrqU_BK ogDk]ey>"2lޘДRv!S&x3eylEe*Vf>)K(Ad]kȁWXXJ$mxHζJ~C 4ME=^HI}(e+&_mꤢqy;NJW>K5sY7q!B2#yEe\4p@R/2AZ0&+巘P DCf履e",LDA҃ƱnAakO>R~"?dz  ja^gp[2ʤRG<'$1< kYNFMf8뺡/YK/`:2tRMAMڜGi,AI϶cי+fp|:mtأߢPd.迗LhRO Z[su`IPjeiwJ([K>~琫[DlHV/8~Vc3 3# :.=]8ߖ2|z$Ee/J(z#6DIq>'~IB(>1!pIe!i^}5O H&}4VY cXnPS罥u,eC#onbHN糤=f$`4¾ԍ$i# 8I@ 0h#锕?}rdlPL88Hׇ._m-萳F' iR -pJz|$!(T 22 hӥNJ Iy0Ľ2@&HJLXlr;C(`R:b^l@}.܂`hY #j%2xL1qA MGP:)l>;?X;tq5?"OA {z Ps+¶"D$ɶF=u'6f6ksxS+y=>;ezRʜvrƠp0HeP:İz\Ai /¥iBm6m9pߐeÎ >4yUCOM>%[ +sMJ87s+kYPeqg#@a385j,"`$Nj<J8\:}7#lR\ExlmGIu#ZN!Ѻ*_Ʊ'JM&ɲŰY%ډ@-XJ"'xK5AB_jD=]٭c+s||HKZ heS.tiw vثKVg7&,UWx `ԙg#t3EkuzVדDw yTgҭNbd9PMo^ Ȗ0N?r1 o4շN2?0\&qg18\ȜAFm?up2 e9_}Ŕ,zX|hBP42b `DSdY.9}/!F *>xS y!eUހ%ʶ_z8"&''t^PU?.%X$Ţ575%6/7{@Oa+Y<Fu`//n9McWZR(qZg5dL3y]ogWGSǃϒaE8x4k͐s=Ԥ;/V2R! 25_nӲ+Sz8ꕉƏHnYfgP { K 3p+7a`}pП+;ͻǶi}U.&5%fWCmhQ--ipEz=}c VeJG*ZNfo ѢPs ~"5uٕwR~˙k8Ji\VcﲑG\^hv;aqSiZN:.۰3&8\)g!˙ ޥ482ުIVQP;!kE P]x$٨Yw`$4jOȻ-(p\^;W!Za&۶./Ў+lr|h jh*c [hALYҭN"%tg"HU#E.7\NLP2&5* !Ud0|T ,kGe1a)*UbBm\-jGy/㪑vqM;a뮒tO4*30THvHQ͓^xIGw'9+]-a-k!&~0dt 1 ="*3$)#`SsiΥLK6nf9Džb˜9F{|yLos*[>!1k"=0g-1Z|9-#}hmrsA6D1;$oqx]Wڻ/o')y$eK^E 'ɽg^raH.`_n,^$}ki{BQ82~ :ǍW3.־nQR]PRx,xMtOA |6T[BQ78b{C`POoNUE_r r.M1ETy1. *+*^t(Íx'.!QƮĞ.g[*a#]s$[qr?lD4 `aO l'nRTti.7|riˣH|N TIK(Bl !a"7orB6`ϰAr8-.HIpVt36ZF$AhU0f *sMw֞"xkmZzc&J_ rn̝dFKMFy?!y2yR n/ 0"[,:(+y.2_6n ^$}bme3Vz(`A%$pW@ ic8u?3g{z1KOux& 7`88.xi' 9 Zv.Щ6Gp]a TU[ ߖV)IOW^dm%U#&鐒QW2iRNM)|82w P6"vfP%ҦO ֺTP'RyYd{I?B5ohWŞ-! ۿ|VdKjv͗M(^)TuN(pc`mPɴ t:*EA7x$Gu^R_b}~/碑OA;`=L]"^ 5 ڷ^lDC }uڬbzۭPB(7WB0׉jNEԢ,*,df(;em(##:?&$w]@R y"t0{Pj˽$ g&^-Xװ5PS#mnid99.vO,تlK Q?UOG %û- G1ֱQ8a1#o} uD՜ܜMb?7EY,0e Z"-kbN$-Urpk4F8-]d/2T+̥ʍ(ʮ[l+*<*6$l./(md~]2FlAjP<(ƹLx솎fBVRx+N鐌Cwj!?G ZF?Ӳ%zrYF=T̷۠.MHR ]` n씊Ơ3'JJR(> hW^k۽Oi|G(MAAx=s*J{yAle~fe;2 ˾ D,7*k "SOStǽN˫q2U8[9occe4x 1 PX 4g.1.0u m{g^cU)t n,.& ;Y%yYu2Eu<^;e[ARuvZ(rX! ^ռA}u5Di4E> stream xڍv 4~b$I* _fƾٲfŘ0f%K$Y.*Y Ih!DRe-ߡgΙ>>~~𘚋k NH<$(ZFPI@$AB~Kү=*@z2Su"Sg4+!c~s`2%;`nTk5B"0dzI0.h߃u0^H)wΞa18)ٹYq(uۃH IݝO%`*IRFR1Iڝ?@;TAvLHVHF;A(F0/HM,v `_zH07S(5;/HYؕ3uDz!n<\)QH"6IikK#_]R^]ʊxQv,buȔ'6 ?%E(-C9 uQY"% ;Jcsf/(K]"]Yk p>l?Ȃ_.)Dxfިi@MiH9K=ƙSq _jJ7Y?9 'O.Z*T|v:G 0|3+N.aߺ2pbMK/ThNX^;b @#elWMMCAG58bZjSP e7hKK@GtY^ ;"[%FZ;i]"=\0uYji$ENp!`ר1T. <ߌ(@ј `p?g+>\v#)Źi.QXÃkkQ5'4o.:AΟ(SWVç4e NCE1$qIsZbn-[NrSvl>.m:nϥυ*/mأc7C=>Y$sFBk } f}!5Yd/y“~/ج\@NxٲCstRliDZ{+qA>lRx ? 0;U}+ܱj лÏ@b`$SK#6]͟l+Um"0%[2y'Tʖ\Bu }*S2fTqi~[{ŖoB%FzжR].s+6Gk{\PgQv~LNf_Ò볶\Юz3no>_P0p͑3)Tf~T@#'ᱧ6HNo$"֞ie+9hUO3OK"ݛz.6Kr񦷻ofRTy޳U5K_ ~]Wthۭє8xT[5|kyCǗjj"ojRWyr.4uu 29H+ =#7 Y=O{щouh.AnlY;fj@n]V{ɅgBȶdʗ.]Y|B۰4sޘ> +<ѡ6V)U1.Ƞ3x`I wF^OQ 2PǍטoq T]A{tn GZm :'*EL5HZl+Fip ľRNz"щŠzY vDbh>֏۸)eﱋxѰw.A"[C!1S$pKxI^j=:.{p#CfD8Хcmؖ YoҜf2֚F|xXh9[ t2;OnT8}?(lc8#aMB}fZ¶t\=nگcci[^<g?s4%i;k k>(,ԟ+H\vwaTLJ"͘2=h85.l;=³aD t7ҶVBCc󖤪;::y䬭{#f.TH^x55YOܽwmi8^MVkxo[yZOU-lޓSp[r!Ynpԫ,p[+^vh4gcP[E-ԮCq$ڤ6pQ?'lY@RΤE{Txhw||( ԧ8<" ۏt f)30<za)ð J = UُdhWΧ?}t>y v'ha\Vj7~sZR#b癑V5ܕ}WU >NhwptJC|kΒJi蛇nCa`9+]*Cnzn;.-g >[}5o=%iu,nV= o:ݸOC<1V҄XY7xN\D^Q=j _NNYA"Wk[+$uIsUy픯@)D3Ɍ9ϴ'Bo3irgʪk2VpUQddT{Z2mMw'Tǔ;B =yqfq-j,h4?ma^/LiGMh a. 3%?Q3;0^MQư^҇'OP  XHYDa/`ۢh.k/I6mܹ#XPv+g!{K;hx@)I=|| x\,-r G qsC? G3kG{6n4uT8mL2}+\QGK{ vɦȥY"+}pǖ-7Ϸj =3! }D5tP݅2v8ck4e^ V4ʬ9tyK_LǺSbz|y2L_+(, endstream endobj 633 0 obj << /Length1 1673 /Length2 4218 /Length3 0 /Length 5263 /Filter /FlateDecode >> stream xڍt 8kؾ%b"[e Y-;c 3c'I(Zv$;E q"{%79u]wu98H0qڍh;(' #R"\qHt(OO(l8tappu<18qBWuI$QCND<%8)်! k<"q&ʼni(|Tc(O C@!( y7qxw/!`SB1~P$@.JB @8ӛx:}3e_og3 ŠQ7HW# 1`r@S(OL|P P<b s|**x[ IHJ0) -+ ; H-rHy߹͢ ,ooCNNnc1Nɺ(S_9ꡐWZ$8e qN#@! 0$0~MW C7B Q qn)zFQe^w. )浰/ Wf TK*׾6>/'QrC%>=엶牺:55v8r[/J}ON'~P8WqPق8MWDa%hT ޿ )u->+\;Q_^ ; i=\ּr.>{g_[h^.8WR7N>M#pG5qgiFJZtmn'Im)jt6Smի=M؆]&w,IrCow+ O4,ĥfZ/(I,2/G2}=#nwi}2Dݸ I0!M5'[V;_qN|W?qkM#0Z$gU BvyRP[J7JNlPwmZa4X!n[i:[&7AXQ>2Uz'_恷T0YӞ-Z)#vS=E}*tb1 0=ޫCq>|aM};cmxE)[R_:&ZW="gi#r!#KJG*_(|'NrZ P.:5g*Tp,E*Xzٔd1=LLjeɃdCpy';ʣ VݟK=V gJ`dG}Ѯ]~m~$Т'Xns&#.)ѵ޲ãqd,itvx+7p;UA9#W='^$rM|O^ LrE{uD2nG;^]Ek kpoGW#}D T0c4:HR!ۘ}^Z d4G>*NsFb.x%Rvwd#ꥴI\|_|!zHT.J}Vbq"M\rŒH$S߷ q?H%ӛC4̜_G1^b/]u!ڵX*χpIBH!CjӴ6H[89E)N,<_wJ' m)3(j嫼vBYkoJN&VU1>]?sjҲ*Ay߀}&p̢? N*}uJPbq3TU90u'>[2`ޅS4μUQ?A~ygy5= S`\%=$q >!\FyMu!:Zy(SUecSj6VE7{^b Wo5]ahŰ!##C+tV7[7f^c"D&:R /D|6~-rk3r&`ΟtesÃo$?hCοuBu/ j 5lnoJ>+4nΥ({ι{9}bcVX[٥Tk2X|;112mA:G>J}_H^,٘鏩.x*tdNRŎ14zj>--r|$OʲPL w}9LN"44|{*vAtu@D]ME0K=ATǷI2ۊROVB]˦wn{U n`": 4|OR t 7AR2|qfQt fH?)BcӨRRjZN^_x?<٭ ٜ<,g[U?^q?2yK!]BD+VvbX|m3ct=D4C^O΢q%|?rJK{ X_Md.$>N֞g)jZ8HoɐkX#BCkv ~GaU^{cjY$tTpWc g3i;!?H-x:mh .9zo#C^pC_OvcPМ)=leG[nh8\lT,c h& Oe6B]6en~>^x4쬃~aRH>J$T҇ZZ{)qz僳6o̶]zur4s*R}ta(c2ˠ'G3k:"{Qq +O{G Rw8[)0– _Pz۪uc0QúOG&3o@W6[tGFU4wnU+MQ oO$Ol*heZ+en€}h oỳ@q~2`E殡9AVU<9RTc)52ёIqה*TlNd5~nYP:U?ؠ=o`pr*{THY]%&֠L7$apN1€>s?Aˁ/g>~Olp{ŷ%"@Ս %C,vm/AK=gcp!4e3HbKV=yw2Єrؤ"ޑ32ZM-sɼ{{  u#|[DTǀ ބ5 V 8RigR K~UI0 V3KȸK a:ɨnҍq7*46 YQbhl*|9}5^x}ࡐt*# ߮ k$=a ^wv:$|Ѿʞk &lG%!rt?D̕2߼F`^=zocBS&n"niUU OVkp endstream endobj 635 0 obj << /Length1 2755 /Length2 17791 /Length3 0 /Length 19353 /Filter /FlateDecode >> stream xڌT[.L lCA[:DN=q` yf5Z/* P΅ *`ffcdffEP(4N {;?D.`N'ooqX8yYx=A0Nejia{hHa-ЮF5td E+7R>G`؇o;ʻ5O Qz%y&Ysp. gh739?e|~DylϽ_Tcu#%O*-ZfaX?13a*"ae(6j(QA8C]nRs)>~Q39QO> d~+W}W7J(kߦex|H˶\({jj\ɡO@z2>7,*>ebo80J_Q&@ҿ<}Mq0-QeNٓC7&V=BK"]7cP/ᙸY*"K&AIQa2N)(Į8 !fGy<sө 0r9Ԍ \%« yrlJPXӋX\Ta{p0u:?gJL;˿pG;Il#0e=8\ YOޑ#Mo< jɏI^u79M}\[ӨJ c(75jAIB&'a&G37m.;}U`uUrR`i՚: ptp&߃w҂/ݠ@'Y2"mݖ'A$*Sz57ֱRu 0ܕLZ\`vJfJô [7nuY^[ ;G tz*#xvŬ jL{l!4WfSwZV?ۃ4 qGw+lG+|F1oY)rh\Uu!`[}"GCµ`0*-'v>,NII/L3]<[׆q e-|7q3US'%G'!{.q[qKѯ.>^upBn pݼl?Kӥ"SJYŧI <"; Ώ6p0XC=ZC·|Vj?dG?>,єU]Bڲg@{ci][ZZhٻ@AR۴<8gYat[6b{C,rKɸxGp{|~ ԉj8x!TWNTS9Ħ@^ { \c\K4u1G F@;[Ƒ˴x6|C.~)JW) @ _v;{A)ZClUtEnWFS {&F?x9ޭ!Ȅ8c>X|6Bp;rI;Ol@P|aDHuĬ F 8J j=bq{) .K^Xeh96Rh.Rc m#R(Cu@/ #ZI"^+ߊwUwlc3O$hpB2>a<_ȃٛt]ʗ$JT$p#??cKnDiw23~w֭E?:v::/~6eՆnؾ_z9(|DRVAsͺ&%!R_D ٜ!D v}Bpj8f g ; S zCޘۺ߱nfLߐ;$oF?NM?+FzO M!A4R*R[B̉$nlyxfV݌5Zjފ*4d9bYRW?"nU_'#?{Aʁ\\DZW޴D b߼1/O#{lRjY]2`וO;n G/ 4 ,ykr.y`b1m;vzaD~a:j0UԸ{}7ۦFTHy.9 $``m DÌwc,!L&3/`dEپZdTLHL!\P#)gfh0lv~ 'W]  \s#LƊT!'BfEbŵr +o0LiqBqbtrn&|-Rd. l%<3I'fKupM}3z\gѻ/FAA#sXPv]Y"2#ׂ!pnV9H2 y[@_?d7,en}S})(mfK7TzjoڋxrrqqȆUmR o2e>$ZEe[SۮlDۀ5r}e%Gp\IA]BgK;<)~ x`XQjW <]ޘXz۩_r}5!:>I 큞WU,kڑ+U0cjRdZ(} z '%bo)26cPF7s~LJ|}^E%(@ϻTG50S :񬤬 U,mioѹJ5xx3Nu__; 5α9AL}.!e'IԒE$Fz?lCN1ɨ'#DQW+mkIl+ 5*=@(4/նKα"{6G))q [#b/޵뒢R^=V#詠-ֶ/w01m|,w1 FDdX0rj4_PRMG '` }LK DK-(>iW0F]4 f\Cv'PnN}r=!Bn)ލ=-a"2^BLHuKuٙp{IRG\sWaujl9\ ;ԯ1 Zm8kvԫO˨J (`Oj xY&ݰlnPz/A)$Y"h!p0ݦ|f9޳n,_0 ]4T5_vLJAH(K`O /<(x[jϒ0YRyx#DLB`l:Nt %0 CsCyUO{VTH1/<$o]8]545CW)̾@㰶Le 0xP%=sʈ_W۵u Bnr훖Vj$jĔZ U\̧ 4c'.|Ƥ, 6:ѻc&17Ԣ)+ʊuZiB>_5q淢q7 f/T6N|}_& yHӜdx4aXC$\9NmSuB;8o 7ϘZ%KIM"lݖأlkX_u, Np~uUF6F$, G{tTho0NX$hwi}wTeYn3nwf2{S0h0蚲(&acS"9HBeT;Ro,,ΖUpU/v#:.w Ua#HSG'+&pBq|##3so?Фж ej |WSR >@LSm aSL{_YRftV%5<h)Lx:谔tE1MU9Mژ:X>t xr Ïeƃ IVڊ;t>_"֛̍7mwfO:ĭ7&0|X *ƈ( CC 6ڕ7\5EO""h[kߞL" /0+AaE@=3N9k^Ƥ To1[k^2>}Ya26#~huW?ʳ\01E>b:%eGp2a[RY,oqDyJ=C{h?igqp6q];3Ly+RЎ2T"'.՝%)~FuE릳Wm 2ei/R?6nEHdG熟m[$HSV o[9Nߘ5D?C<{Ϳt`bl3 sJYif` A7 $G=zl՗/mTywĞԩV U-6ƿ@ĨxF#"ZWd]X/F_p'' s+>KNoo"}"UvWLQH*S`ݪudB…}ɵT)[dW3J:f6-N8m^kpUK7/\`bFR]FSgμN8}Ru<^*oyIx뗉Q-S 7FU(P_nNnH眑-}z`Cgң,̽#ycwrˆ*h^ɰC㮰yv"N ='b}*ϯq!<E T9NrEQZ@Kԗ/a/>2{Uhdz9Ӑa]OaJz2Ix貥ܛeVdoX3gHMUqZj_La.ܷ#xLP9{mkHaVP2QǤF!qFބgBmQgX{bfE%Ynos\ ^󽌂D :"*Ͽ5EL+db {20A@|ж?'9HWŚgoYƏ; {IdAn@i^\?ը90M3#>"=a&a]<w87~*T`t1m£yG^'}N!Ym4cE&GI-dUz)Oit?^̐٦f{"&"PT<32s0F,8 ] zDp!$Q0@'9ʄs !)VߘTVl[o7%Sy#_p2 jy2X% IȬk* "~;6"u-v[ݘ2qsݔ ڒ rn#<᰻6)խO?M\@*l\]Yn & ƯN񺇈Փ2mNdCzeaXuu;7vutՔsltXs%1'1d(rIs2>1~q387tNUX$7 iʕ * .iE|oF{]{ھTsF4B^P_t}!F=>:ߩ-ՊAPߟ,pHlh2Bt>qr"7(_Xp¹rrsD9k_9cr6QH貖h_ݧ,W@#!b;s?£R}T muV]ZCt,z6PftlKRV28vC@70Gw=eݎ=>w}T[hޢ\+iSo3/cա 在ř =״L@OAxV{tF2TPQMgMV4fg4Y Y$ABM }EOfoS-?weP 8zZJջN>}570Px֢RK|~>nJz"?DyHObW.4R#16O60 p )`mپxx-r W@!!]ϥ~;'^imVvu~8mEX^Z}S',S':fUd]v8YVӂ;fs\nhD;֊CEƶ"ʟ[Q38~Lyș#RtMarXCA9O.=3L%ќKAUD "JF'繂H#Fʾ 2hH)W9)#m;W0Njk# ţ(W jzqȊ& IǝYTzUe&{,<;O쟑gtɄP DVذ8( u ߀ :j-~PAB/(QF>^.njr b'ad7 41y?Q*(р> yu _7Fez-籺'C=WO2uixҲ6 X+k|<|l؏gV_kv;7CuF-|)Sw&,ڈȶ]]#,gMdo`aL>)xNۮھժO[FY]Ț8gtxҔ}{Ÿ,D0̩)Z rC v$A?],\ڔ6_? ś|im:JOѲkv$*04Ób`{`cH; /b0ϗ:5 R';b*<?-'9Zu|> w=LI}`{eŹOm.NE#RC-󇠩O4I3XWe9~ě~h}rw9A^:2S?FH?F8k;=8/f!O WN/01g⧽]@C\ap + R[!~;^j j(153m BK D O_qS82F/T'C1H]Agb݈iYGRT:ȪTh%a"ySJw;uk.PEl6ا}SVpP7$Cܟ4Pd\oFs86;u Yb0Q/]jM' syhn#R QaZdUڂ eƇTE WpΑl|*1%f|!" GSg35O%>b"P$<mD6<*5k;HuWUWKZ3q>AMxY] xJDR[5YFtNbngޤ,'GWʀ hpjj:畭 DzTO1 aq{VX9_!rz"Ɇ"G F-te0❢t[,g4rvn/1\)7d AN_wV)z Jɑt`+i6 x4> b^f?ˋIT,"u%Gή]Ξ?S=ѴȊ''~f%5,plQ5i+V3s Q=`E3L4`eDE4uCA(zVF?B0@O7iNHUy qՌIo4mθ]y,*~B- b i?%Oʸrga2'8[FWf(9]DJ$v:Kj3׽|'OM%mc~z8g5̕QRSѷ¾oC(Ǔڕ`R}(,FηQK֪_&0aMvc=ލ6V@b0i ^BĨQjEY&䬌áU~c賤֡fϨPAYz)k²Rl=k 0>=lE*Cȕ|·#Yec Py{$:$KXҷ 63Cwq)Aף#M^~ttP\.3o|t?#~2Dm[f]"l|4@v1T%A͘ebO/5ӲŴ?XϽSC!0R~X-UC61Y/Ĉ|^%MWxϰ8"|%tGq[| G[CxRB"gMji9W X1xg\Gݝݠu{'u?2ؠa%8}OkA&c[.au4H$IU_Y_&پsXRX"˙Џ|0h4mA*_)idT0N\ e!%BE(/2l''8+J f(Y:Qe>HaND݁sm EhygOיw1f5|ς2lAY8 *۷fWYV*s  ݑa"a!'/)'2Q|Me X튘ԡ 7 DR [=k"@4,!U'UEH*W#u*MS+Wm{kT-F/Xj7&N8[=j5i-b AG`KGPȤ C⧤@ɤQV.lxnq[_{h|TWxK8<;Bޚu'ԏ0^P>o\~Dm5p-+!jZ>] FˡNR].L\dRNq!oD#ވwQ:r"Q .=ӭMzivba^cA= ,10[g|.V߀!뚓,R|xDr`FE!c!a?Á63<^DpevC瀠p?@o7xhsaLo䉔ᕟGU=ƶ&ƿ "ծF̀PF ͦq+u`t`L-%+ax/MmR, !5a!J5V+Ey-1qz41ǩժ VpU ʬͷv; AEښmuWD(z[J$Ea&=l6 *O !%,j Ug*ŝiOdQP^%sV[fkg`ó7%$BFXLRymC s>@=V~*$~vU4kZUN(S  G,?9=wODH|Zz8!#X\ n"^UN>`7ķ#˚(v| kEGǕϝb>}4zUa$Q\I,wL+ aª4d2+; UN7xCa6: $k.oXʿ?HT^a*kk/Yd72 ˝Z@U%Y强׬V+ N l>nAO 3APAڏËE*̰noP s$ـGlŲ%'5zox]Aqȶwr"4β=_C^c[6^~Z 6G``>o70}.>OK^f§laiǷѬ+|^ϝGq-:H+cuu)qFཛྷ'AHC"p8˧I4RmVvd(f6\'ay IҎ`E)b >!cɩlPiЯAe9GJ X dh B4\Q1h{]b.p1_D^ ҕ%8IsR1`6Pp6F1.)`ujgK܃mB59Ksgƛ*"{EJ8hiȸN(>SF?)IF&Vs,5h ޢ d4xQZgas~ 8mB,xqfjD 9Ef"ޘ8D7ׄUbVra?Jn\Fm,%VSyڅ po1c h3?B+GBk%v5܁1o*r Es(hnS⬂^7TrbӑB8gЊt5@K'nJ-`e:bnh8E섋ǡ:εMlk[gX&Xѹz+Ql Q'ARx@BovٛeD `uHb3ح'H3Fr `;nd6[17ߣBLk `ҭ(yꭻ 0G) Fͫ|'a-ep'V\qݬk5oSV*&"{IӤB!S$*nMM7u"Oq]Za5{?b߷f9΍zZV l+}j#NitV dXm&l召DMZNhbq/Pİ[W Fik{,Ĉ=]o9Ս8WqK6|n{WAaw ~Mq AcIإG8bʩ(>3'p՚J-[Q$i`d 6ZNg84Iup)K_wB+dEMhPwnPbPCdPQFP"=U LU9h~*+PuӖܖ:3:rb2= Rr|.$}$akk KhkMf].ya|HDM#Q39[csdA"5 a{s,ߘ!FbzRJlaEb kc;G'ix]BN-6"\0_^&"q>?g_4L \Fb*}Maª*^HuQ/D9fv9:,UgY\~S1* wuOSȲh^ƿsv[+4s[}e7~OcB 81.": >tWV3W`tyP9T[g1 Y/?4)?fa)3xvVY+(սT(Ԟ9 q/}?6щt5 0\MweF4]Y4AK[*= WbJ-^3~:S?wtdˊJvrH|v"+l!\i"+g6 rl$ΩuhT(B)/m kN|I2Y=Ҥa,S>g\C(^S0K+U+@5$_m 08\n>b̍}ܙ_S{8*&f#O&.j1~"?]SNP)yHdp;O CUR*AOkβ#pq;J]e /<[wnMF+ s.W&ANBM.Pd]CS{'mjt1nq|hSȯ.DEdtc LÊETZhnszٞy|Iu?DBmP- a '=08(A|Dz08;(Wv[4a^m{w̫)9I4dKqR!t~%Kogi{  :)STV7$. %Hv`ocS\a9c uoZC;gfWN+Sl%VVuPFhN&Jga=r #] !3n t(I^ Ocѝ@ \S=~6Ut 3fFx(n#1(C q-<9 0E@zdWS ,CzYx{jNR7sOh/SD䋨 .ys{g%-@٩+¯]AB󰸲X]i ):KUQ`_>ޡ>H${<ͧ_ƟU҅I|IkPՏfd|gΝɧdŅfM߄ok¥ư)^Z .D837Xus9p tgs,gf}T}@?n!4 C *"*+0UFIϹ=R3|% X*v1JooR Ձ)\'<6p"2_-]lI4f5X^Hy$9qL3abUS H~3; ܪ96ʃ]#}RBwU$~d> c3yòYx`4=jwC;* Q7 TEyq'aZ$vϞ7+X؂* gux R(0]9^aN>XHK;?͸'4ɤGTB]^.5&mhS~6lo6}Ӣ^4;QY$4$=^g;y);i`g5^4"] endstream endobj 562 0 obj << /Type /ObjStm /N 100 /First 962 /Length 5367 /Filter /FlateDecode >> stream x}q8N8<(hƷLf~Ҥ(p[žTu](:Y:]hN-WH/i e=LGAQхQ X#RCpq g`ǃ('ӎ `+<"[A!(Z#_11 E!R ~ P-v )l VZ@j4WFPGR)XM$Ѣ@2h `4@G-GhOB.FF+U!Q#$;:"v}F<b!1Bk6iN4+= :7Gaeؑ`MDz£؇+Ȉ "t@ q%Q#` l/j#wpx®.xP0ꢁQk$ wc  kp2ڄ7V,d%0vZ 5\ý!|||68AWp`O_>P:6.C Da4*hDnM3u`h'R #ORa@#H&9 3aH0W$J*`%X["IQR'asY<Y9|ctc|b8Gd[s쀌 1hqϽsb)rD"<'B{na K PXui-)r2GIWp/H 9 teā@{d;xS'E.s$H!,f C,M&rƲ-X߯Z؅ϲn;$ftr#p^|:PQHOx&IM=eqBߐߔ4vL,i#3-:UsI=gHi l`۹Mkx<7踍dj:YJ\o24*2D :̔+%R-P>-Q1pF.nHS=ܳȅ_#-d5l9nUI91ƣn<@˄$]P˞w2˕6Y7 <`Mu ئuV6yL =d̔d,+]Yss1n؂=eJ ,o(^_[ 7_ 7Zȳ2lZMڄ1qSW#VcX d td8 /joAR8T;Op#6AcPFuxL ͋$C-gI@'FΑ5{zOε3boK[aкf.0&-XB }-jb{VG?8!y7^o%@iDҹt1wV7tSet!t,-8XJ5% -\X5ܫ fuS@T9|nQZMRz>y*0H0mˈ2MJ@8*!oc=diVѯShXkؐNOp=<'rÉ'ʦfy>x8嵑WK ZV`փh}\14"k$ *u6Sh35>H>J-6L :ì{Lc8 8yXճtrp5Z(3,Ǎxdf4wn1`Z!-I-9>>x d# %WsR #.K̓P"KAaEKEKN4dr IB#"pȰKk;EY(l>{%PSx [,}1.sdeyhKO-@alEw)h(IN&pטF'SnFdA# citҹ5zC!CȂ#;TVcjS )jHЩ<8Ta=NTS-qX!/iu0fR`8|NZTUzI;wUQ>Wnv;١58zyO_KWo۟ůXWf)&p .L/)Wogx}) "qh6_>vUݬՔ<-GwլG+˃<*_<+ߗrT~./۫hG嗲*_g ??~R~+^ݔ.oʛMUޖޕwd|rZ]嬜}TU9붼/?˿&y6r!ӝk#y~zqwV=(opc[ĕ~ ~2%9ʙ?L"7{HֱGԡ6hɴ Qa߁?$V_F,L]\dx~`bų'@,VI.„5rѫ tW`SMh&hVMx?\!\>;}r~@\LZ^>Axf%aɓsTi%Cxi^Ncg>E'Mǻ̃\z<7{d՟^ȿ u1IusU}14!ɎU_>_Ѭ'}NjzUAa'*MB q4l{5O eV?KĄ%AѳWê5[8~ћ1}sE91_屹ݵq{%sDh77Ex:`\wA92ܣNkz}0;\/1AzыSd=XrN /u,;Yek{:҉A(➴$bGfpx؈M Z^n8[an( 7Ld޽d\bDfM4z$Ro=?<{y|7Hw1v#$}C.< rOOFT3Gv)ףhR~7=+7Ӷy?$9p`ZїA fj9}~v/:HCCig$6O|͇ǟ\v zJ4Ԋ 2jyqtqls0TqӧYn!uU[$A}׺˓rkjlV[qh2yש*^j+}Z[ _Aç/r+o%e)[,còRjxnX~ALI}d}4/ǓI#8k@VDp^]A\k.:uy/i\Mo7K}ooIroϟ~@ן an_q~O/[a~YOt3kmstjxffn)ae?"/ޟ}zgg}t 5lx̠|u TG^a;aXa`^Y]U ڻO3Tvr<R>̾O_# &}/%o6'pW]Kɨo!.%M[ȾC=Eыɇ;^&{ .3mL~8΋.T+|fa o_:pp.niOҥzhmN{I8]Τnz%rsw[([ptqSwfnZsCƻN}݀["_0V.c 7)Lv/F،xvNS=V6G]_ BW[;լ.Eg{݂x%mw AzmI>g~ޭ@tɫ9SR7k2 y[g%}p羽|ӤďWiI&߄$d=ۊo3kɲ*4mMgβ3ísbˉ$+Utc2tz!GĨ$y$=A̬ՀQKj|)-RZ^8]U5m}LL_sbbq}:~0.ARrTjٮҷZJDXJ֨2LuA#!2b#BuQ(K4+rq% Y\qC#B!sX"ٯυ : endstream endobj 669 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.16)/Keywords() /CreationDate (D:20160514185921-04'00') /ModDate (D:20160514185921-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) kpathsea version 6.2.1) >> endobj 641 0 obj << /Type /ObjStm /N 46 /First 376 /Length 1470 /Filter /FlateDecode >> stream xڕXێ6 }c@A<y$bd'؝ ڿ/iZָyxHQD2Do0J!=Y5 ~ހ#rka L&ƃ!o6^locCy`80G 4.eB ? E6md6xBAD81q v*JȜ8CdBb9y3?brV$Z1VRfq +Ns`t<]q<L\vWMpsoφOPWf%|;|7?o+Mw|\{quk#P#mEŴn`7θnϼrrCXUF讜bvTƪ2n?%G-y 1+`PVpXӄ*1VP鲛@MMrp5je7>)7S|_UzšžJ7$ZbߑW݆NK;*K<ꪪn..]47tnc= &R'*syGR4Zu9|_^><|=Y1yӧ|s:߻= 4-$FQNS<~9\wKi[.x*/(?/K/* @KMpErAd3w*p  xg߆nNc-BZR KsTTHHJ}fc^uy>2VMu endstream endobj 670 0 obj << /Type /XRef /Index [0 671] /Size 671 /W [1 3 1] /Root 668 0 R /Info 669 0 R /ID [ ] /Length 1669 /Filter /FlateDecode >> stream x%[l]Gg>lj8;cDZsK'vn$N8c׉c/@$*(2"$TH$j)b) (< Bx(Eey_sfϞ99w;sM:}D.4bxܗOKçQo>ki4}/ysw[ FO +^Qg,qS4q*%(x܃/Μ/q(ڀ~yefzgΙ%)z_J1VXou/Z վ3{V^_+ʘJQǟQ3{PTg~Hߖ68w v {A%x_TP G%A'h6{Yi:uv7%sstrn68JJ  Dł){Q_Z<c$0mi'8&͏+q L'ޗ2y0c~Ĵyptiq䡢KCJ\e,_Pb \?}i| `3^7_vmYn!f' 2{iYsB9țrR`#%pXaK_|K lpS24l@Bh4sҨ OZch3J?4cHHÎA_Ԏ{aǀB|B>. i]%g{(1 z;ͿWZ pLZUafKv,ԬIÄAg*[qe$pNk%}GRBAӽbɑQi<2XdjI ^XdUZa`&ᶘalӢ̀,5&ݹN T` *>Kk*K^RTmɓj,UE:,MQe^˼ѲOE-٦ɲUlOX]EOYw-7DQVuZOuY!EݖߩrUk6YSX~n XE-F--E2Бje|u>T.۵ԃc[)@3Զu[mݮ;nz`Ǡԥ޸x endstream endobj startxref 544133 %%EOF mathgl-2.4.1/mgltex/mgltex.ins0000664000175000017500000000507213134047003016072 0ustar balakinbalakin%% %% Copyright (C) 2014--2016 by Diego Sejas Viscarra %% Copyright (C) 2014--2016 by Alexey Balakin %% %% 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 3 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, see . %% \input docstrip.tex \keepsilent \usedir{tex/latex/mgltex} \preamble This is a generated file. Copyright (C) 2014--2016 by Diego Sejas Viscarra Copyright (C) 2014--2016 by Alexey Balakin 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 3 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, see . \endpreamble \generate{\file{mgltex.sty}{\from{mgltex.dtx}{package}}} \obeyspaces \Msg{**********************************************************} \Msg{* *} \Msg{* To finish the installation you have to move the *} \Msg{* following file into a directory searched by TeX: *} \Msg{* *} \Msg{* mgltex.sty *} \Msg{* *} \Msg{* To produce the documentation run the file mgltex.dtx *} \Msg{* through LaTeX. *} \Msg{* *} \Msg{* Happy TeXing! *} \Msg{* *} \Msg{**********************************************************} \endbatchfile mathgl-2.4.1/mgltex/sample.tex0000664000175000017500000003160013134047003016056 0ustar balakinbalakin\documentclass{article} \usepackage[png,comments]{mgltex} \usepackage{hyperref} \title{\mglTeX*{} usage sample} \author{Diego Sejas Viscarra \and Alexey Balakin} \date{\today} \mglsettings{ dir=MGL/, scriptsdir=scripts/, graphicsdir=graphics/, backupsdir=backups/ } \begin{mglsetupscript} define gravity 9.81 # [m/s^2] \end{mglsetupscript} \begin{document} \maketitle \begin{abstract} \noindent \mglTeX{} is a \LaTeX{} package that allows the creation of graphics directly from MGL scripts of the MathGL library (by Alexey Balakin) inside documents. The MGL code is extracted, executed (if shell escape is activated), and the resulting graphics are automatically included. This document is intended as a sample of the capabilities of \mglTeX{}, as well as a brief introduction to the package, for those who want to start right away to use it, without diving into the a little bit more technical documentation. \end{abstract} \section{Basics on environments} \begin{description} \item[mgl] The easiest way to embed MGL code is the \verb|mgl| environment. It extracts its contents to a main script associated to the document.\footnote{Generally, the main script has the same name as the document being compiled. In order to rename it or create a new one, the \texttt{\textbackslash mglname} command can be used.} If shell escape is activated, \LaTeX{} will take care of calling \verb|mglconv| (the MathGL compiler) with the appropriate settings, and the resulting image will be automatically included. For example, you could write: \begin{verbatim} \begin{figure}[!ht] \centering \begin{mgl}[width=0.85\textwidth,height=6cm] call 'prepare1d' subplot 2 1 0 '<_' : title 'Standard data plot' box : axis : grid 'xy' ';k' plot y ’rGb’ subplot 2 1 1 '<_' : title 'Region plot' ranges -1 1 -1 1 : origin 0 0 new y1 200 'x^3-x' : new y2 200 'x' axis : grid 'xy' 'W' region y1 y2 'ry' plot y1 '2k' : plot y2 '2k' text -0.75 -0.35 '\i{A}_1' 'k' : text 0.75 0.25 '\i{A}_2' 'k' \end{mgl} \caption{A simple plot create by \mglTeX's \texttt{mgl} environment} \end{figure} \end{verbatim} This will produce the following image: \begin{figure}[!ht] \centering \begin{mgl}[width=0.85\textwidth,height=5.5cm] call 'prepare1d' subplot 2 1 0 '<_' : title 'Standard data plot' box : axis : grid 'xy' ';k' plot y '2' subplot 2 1 1 '<_' : title 'Region plot' ranges -1 1 -1 1 : origin 0 0 new y1 200 'x^3-x' : new y2 200 'x' axis 'AKDTVISO' : grid 'xy' ';W' region y1 y2 'ry' plot y1 '2k' : plot y2 '2k' text -0.75 -0.35 '\i{A}_1' 'k' -2 : text 0.75 0.25 '\i{A}_2' 'k' -2 \end{mgl} \caption{A simple plot create by \mglTeX's \texttt{mgl} environment} \end{figure} Two important aspects of \mglTeX{} can be noted from this example: First, the \verb|mgl| environment accepts the same optional argument as the \verb|\includegraphics| command from the \verb|graphicx| package. Actually, it also accepts other optional arguments, called \verb|gray| (to activate/deactivate gray-scale mode), \verb|mglscale| (to set the factor for scaling the image file), \verb|quality| (to set the quality of the image), \verb|variant| (to chose the variant of the arguments of MGL commands in the script), \verb|imgext| (to specify the extension of the resulting graphic file), and \verb|label| (to specify a name to save the image). Most of these options are available to every \mglTeX{} environment or command to create graphics. The second aspect to be noted about the example is that this script calls a MGL function, \verb|prepare1d|, which hasn't been defined yet. \mglTeX{} provides the \verb|mglfunc| environment for this purpose (see below). \item[mglfunc] This environment can be used in any part of the \LaTeX{} document; \mglTeX{} takes care of placing the corresponding code at the end of the main script, as has to be done in the MGL language. For example, the function \verb|prepare1d| that is called in the script above is defined like this \begin{verbatim} \begin{mglfunc}{prepare1d} new y 50 3 modify y '0.7*sin(2*pi*x)+0.5*cos(3*pi*x)+0.2*sin(pi*x)' modify y 'sin(2*pi*x)' 1 modify y 'cos(2*pi*x)' 2 \end{mglfunc} \end{verbatim} \begin{mglfunc}{prepare1d} new y 50 3 modify y '0.7*sin(2*pi*x)+0.5*cos(3*pi*x)+0.2*sin(pi*x)' modify y 'sin(2*pi*x)' 1 modify y 'cos(2*pi*x)' 2 \end{mglfunc} As you can see, only the body of the function has to be written. The number of arguments of the function can be passed to \verb|mglfunc| as optional argument, like in the code \verb|\begin{mglfunc}[3]{func_with_three_args}|. \item[mgladdon] This environment just adds its contents to the main script, without producing any image. It is useful to load dynamic libraries, define constants, etc. \item[mglcode] The \verb|mglcode| environment is similar to \verb|mgl|, but it creates its own script, whose name is passed as mandatory argument. The same optional arguments are accepted, except \verb|label| (for obvious reasons). \begin{verbatim} \begin{figure}[!ht] \begin{mglcode}[scale=0.5]{vectorial_flow} new a 20 30 'sin(pi*x)*sin(pi*y)+cos(2*pi*x*y)' new b 20 30 'cos(pi*x)*cos(pi*y)+cos(2*pi*x*y)' subplot 1 1 0 '' : title 'Flow of vector field' : box flow a b 'v'; value 20 \end{mglcode} \end{figure} \end{verbatim} \begin{figure}[!ht] \centering \begin{mglcode}[scale=0.5]{vectorial_flow} new a 20 30 'sin(pi*x)*sin(pi*y)+cos(2*pi*x*y)' new b 20 30 'cos(pi*x)*cos(pi*y)+cos(2*pi*x*y)' subplot 1 1 0 '' : title 'Flow of a vector field' : box flow a b '2v'; value 10 \end{mglcode} \end{figure} \item[mglscript] This environment just creates a script, whose name is specified as mandatory argument. It is useful, for example, to create MGL scripts which can later be post-processed by another package, like \verb|listings| or \verb|pygments|. For example, the following won't produce any image, just a script: \begin{verbatim} \begin{mglscript}{Gaston_surface} subplot 1 1 0 '' : title 'Gaston\'s surface' ranges -13 13 -40 40 new a 200 200 '-x+(2*0.84*cosh(0.4*x)*sinh(0.4*x))/' \ '(0.4*((sqrt(0.84)*cosh(0.4*x))^2+(0.4*sin(sqrt(0.84)*y))))+' \ '0.5*sin(pi/2*x)' new b 200 200 '(2*sqrt(0.84)*cosh(0.45*x)*(-(sqrt(0.84)*sin(y)*' \ 'cos(sqrt(0.84)*y))+cos(y)*sin(sqrt(0.84)*y)))/' \ '(0.4*((sqrt(0.84)*cosh(0.4*x))^2+2*(0.4*sin(sqrt(0.84)*x))^2))' new c 200 200 '(2*sqrt(0.84)*cosh(0.45*x)*(-(sqrt(0.84)*cos(y)*' \ 'cos(sqrt(0.84)*y))-sin(y)*sin(sqrt(0.84)*y)))/' \ '(0.4*((sqrt(0.84)*cosh(0.4*x))^2+2*(0.4*sin(sqrt(0.84)*x))^2))' rotate 60 60 light on xrange c : yrange b : zrange a : crange c surf c b a '#'; meshnum 100 \end{mglscript} \end{verbatim} \begin{mglscript}{Gaston_surface} subplot 1 1 0 '' ranges -13 13 -40 40 new a 200 200 '-x+(2*0.84*cosh(0.4*x)*sinh(0.4*x))/(0.4*((sqrt(0.84)*cosh(0.4*x))^2+(0.4*sin(sqrt(0.84)*y))))+0.5*sin(pi/2*x)' new b 200 200 '(2*sqrt(0.84)*cosh(0.45*x)*(-(sqrt(0.84)*sin(y)*cos(sqrt(0.84)*y))+cos(y)*sin(sqrt(0.84)*y)))/(0.4*((sqrt(0.84)*cosh(0.4*x))^2+2*(0.4*sin(sqrt(0.84)*x))^2))' new c 200 200 '(2*sqrt(0.84)*cosh(0.45*x)*(-(sqrt(0.84)*cos(y)*cos(sqrt(0.84)*y))-sin(y)*sin(sqrt(0.84)*y)))/(0.4*((sqrt(0.84)*cosh(0.4*x))^2+2*(0.4*sin(sqrt(0.84)*x))^2))' rotate 60 60 light on xrange c : yrange b : zrange a : crange c surf c b a '#'; meshnum 100 title 'Gaston surface' \end{mglscript} \item[mglblock] It writes its contents verbatim to a file, specified as mandatory argument, and to the \LaTeX{} document. For example: \begin{verbatim} \begin{mglblock}{fractal} list A [0,0,0,.16,0,0,.01] [.85,.04,-.04,.85,0,1.6,.85] [.2,-.26,.23,.22,0,1.6,.07] [-.15,.28,.26,.24,0,.44,.07] ifs2d f A 100000 subplot 2 1 0 '<_' : title 'A fractal fern' ranges f(0) f(1) : axis plot f(0) f(1) 'G#o '; size 0.05 subplot 2 1 1 '<_' : title 'Bifurcation plot' ranges 0 4 0 1 : axis bifurcation 0.005 'x*y*(1-y)' 'R' \end{mglblock} \end{verbatim} \begin{mglblock}{fractal} list A [0,0,0,.16,0,0,.01] [.85,.04,-.04,.85,0,1.6,.85] [.2,-.26,.23,.22,0,1.6,.07] [-.15,.28,.26,.24,0,.44,.07] ifs2d f A 100000 subplot 2 1 0 '<_' : title 'A fractal fern' ranges f(0) f(1) : axis plot f(0) f(1) 'G#o '; size 0.05 subplot 2 1 1 '<_' : title 'Bifurcation plot' ranges 0 4 0 1 : axis bifurcation 0.005 'x*y*(1-y)' 'R' \end{mglblock} As you can see, although this is a verbatim-like environment, very long lines of code are split to fit the paragraph. Each line of code is numbered, this can be disabled with the \verb|lineno| option, like \verb|\begin{mglblock}[lineno=false]{fractal}|. \item[mglverbatim] This is like \verb|mglblock| environment, but it doesn't produce any script, just typesets the code to the \LaTeX{} document. It accepts the \verb|lineno| option, plus the \verb|label| option, in case you want to associate a name to the code. \item[mglcomment] This environment is used to embed comments in the document. You can control whether the contents of this environment are displayed or not, using the \verb|comments| and \verb|nocomments| package options, or the \verb|\mglcomments{on}| and \verb|mglcomments{off}| commands. An example of this would be: \begin{verbatim} \begin{mglcomments} This comment will be shown because we used the "comments" package option for mglTeX \end{mglcomments} \end{verbatim} \begin{mglcomment} This comment will be shown because we used the "comments" package option for mglTeX \end{mglcomment} Once again, long lines are broke down to fit the paragraph. \end{description} \section{Basics on commands} \begin{description} \item[\textbackslash mglgraphics] This command takes the name of an external MGL script, compiles it, and includes the resulting image. It accespt the same optional arguments as the \verb|mgl| environment, except for \verb|label|, plus a \verb|path| option, which can be used to specify the location of the script. This is useful when you have a script outside of the \LaTeX{} document (sent by a colleague for example), but you don't want to transcript it to your document. For example, in order to display the image of the script we created with \verb|mglscript| environment, we write: \begin{verbatim} \begin{figure}[!ht] \centering \mglgraphics[height=9cm,width=9cm]{Gaston_surface} \caption{Gaston's surface} \end{figure} \end{verbatim} \begin{figure}[!ht] \centering \mglgraphics[height=9cm,width=9cm]{Gaston_surface} \caption{Gaston's surface: Three-dimensional parametric surface} \end{figure} We could also could compile the script we created with the \verb|mglblock| environment: \begin{verbatim} \begin{figure}[!ht] \centering \mglgraphics[height=7cm,width=10cm]{fractal} \caption{Examples of fractal behavior} \end{figure} \end{verbatim} \begin{figure}[!ht] \centering \mglgraphics[height=7cm,width=10cm]{fractal} \caption{Examples of fractal behavior} \end{figure} \item[\textbackslash mglinclude] This is equivalent to the \verb|mglblock| environment, but works for external scripts. \item[\textbackslash mglplot] This command allows the fast creation of plots. It takes one mandatory argument, which is a block of MGL code to produce the plot. Accepts the same optional arguments as the \verb|mgl| environment, plus an additional one, \verb|setup|, that can be used to specify a block of code to append, defined inside a \verb|mglsetup| environment (see the example below). The \verb|mglsetup| environment can be used if many plots will have the same settings (background color, etc.). Instead of writing the same code over and over again, it can be introduced in that environment, and used with the \verb|\mglplot| command. An example of use of the \verb|mglsetup| environment and the \verb|\mglplot| command would be: \begin{verbatim} \begin{mglsetup}{3d} clf 'W' rotate 50 60 light on box : axis : grid 'xyz' ';k' \end{mglsetup} \begin{figure}[!ht] \centering \mglplot[setup=3d,scale=0.5]{fsurf 'cos(4*pi*hypot(x,y))*exp(-abs(x+y))'} \end{figure} \begin{figure}[!ht] \centering \mglplot[setup=3d,scale=0.5]{fsurf 'sin(pi*(x+y))'} \end{figure} \end{verbatim} \begin{mglsetup}{3d} clf 'W' rotate 50 60 light on : light 0 0 1 0 'w' 0.25 box : axis : grid 'xyz' ';k' \end{mglsetup} \begin{figure}[!ht] \centering \mglplot[setup=3d,scale=0.5]{fsurf 'cos(4*pi*hypot(x,y))*exp(-abs(x+y))'} \end{figure} \begin{figure}[!ht] \centering \mglplot[setup=3d,scale=0.5]{fsurf 'sin(pi*(x+y))'} \end{figure} \end{description} There are more environments and commands defined by \mglTeX{}. The ones presented here are the most basic. More on this topic can be found in the documentation. \end{document}mathgl-2.4.1/mgltex/CMakeLists.txt0000664000175000017500000000542013134047003016614 0ustar balakinbalakinfind_program(findpdflatex pdflatex) if(NOT findpdflatex) message(SEND_ERROR "Couldn't find pdflatex needed for LATEX example building.") endif(NOT findpdflatex) find_program(findkpsewhich kpsewhich) if(NOT findkpsewhich) message(SEND_ERROR "Couldn't find kpsewhich needed for LATEX example install.") endif(NOT findkpsewhich) find_program(findmktexlsr mktexlsr) if(NOT findmktexlsr) message(SEND_ERROR "Couldn't find mktexlsr needed for LATEX example install.") endif(NOT findmktexlsr) execute_process( COMMAND ${findkpsewhich} -var-value=TEXMFLOCAL OUTPUT_VARIABLE TEXMFLOCALDIR RESULT_VARIABLE TEXMFLOCAL_ERR OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT TEXMFLOCALDIR) message(SEND_ERROR "Couldn't find TEXMFLOCAL directory.") endif(NOT TEXMFLOCALDIR) # set(extramgl Axis_projection Vectorial) add_custom_command(OUTPUT mgltex.sty COMMAND ${CMAKE_COMMAND} -E copy ${MathGL2_SOURCE_DIR}/mgltex/mgltex.ins ${MathGL2_BINARY_DIR}/mgltex/ COMMAND ${CMAKE_COMMAND} -E copy ${MathGL2_SOURCE_DIR}/mgltex/mgltex.dtx ${MathGL2_BINARY_DIR}/mgltex/ COMMAND ${CMAKE_COMMAND} -E copy ${MathGL2_SOURCE_DIR}/mgltex/Recompilation_decision.pdf ${MathGL2_BINARY_DIR}/mgltex/ COMMAND ${findpdflatex} mgltex.ins COMMAND ${findpdflatex} mgltex.dtx COMMAND ${findpdflatex} mgltex.dtx COMMAND ${findpdflatex} mgltex.dtx DEPENDS mgltex.dtx Recompilation_decision.pdf ) add_custom_command(OUTPUT sample.pdf COMMAND ${CMAKE_COMMAND} -E make_directory ${MathGL2_BINARY_DIR}/mgltex/MGL COMMAND ${CMAKE_COMMAND} -E make_directory ${MathGL2_BINARY_DIR}/mgltex/MGL/scripts COMMAND ${CMAKE_COMMAND} -E make_directory ${MathGL2_BINARY_DIR}/mgltex/MGL/backups COMMAND ${CMAKE_COMMAND} -E make_directory ${MathGL2_BINARY_DIR}/mgltex/MGL/graphics COMMAND ${CMAKE_COMMAND} -E copy ${MathGL2_SOURCE_DIR}/mgltex/sample.tex ${MathGL2_BINARY_DIR}/mgltex/ # COMMAND ${CMAKE_COMMAND} -E copy ${MathGL2_SOURCE_DIR}/mgltex/mgltex.sty ${MathGL2_BINARY_DIR}/mgltex/ COMMAND PATH=$ ${findpdflatex} --shell-escape -draftmode sample.tex COMMAND PATH=$ ${findpdflatex} --shell-escape -draftmode sample.tex COMMAND PATH=$ ${findpdflatex} --shell-escape sample.tex DEPENDS mgltex.sty sample.tex ) add_custom_target(pdf ALL DEPENDS sample.pdf) get_directory_property(mglconv_clean ADDITIONAL_MAKE_CLEAN_FILES) set(mglconv_clean ${mglconv_clean} scripts mgltex.sty sample.tex sample.aux sample.log) set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${mglconv_clean}") install(FILES ${MathGL2_BINARY_DIR}/mgltex/mgltex.sty DESTINATION ${TEXMFLOCALDIR}/tex/latex/mgltex/) install(FILES sample.tex mgltex.pdf ${MathGL2_BINARY_DIR}/mgltex/sample.pdf DESTINATION ${TEXMFLOCALDIR}/doc/latex/mgltex/) install(CODE "execute_process(COMMAND ${findmktexlsr} ${TEXMFLOCALDIR})") mathgl-2.4.1/mgltex/mgltex.dtx0000664000175000017500000046427413134047003016115 0ustar balakinbalakin% \iffalse meta-comment % % Copyright (C) 2014--2016 by Diego Sejas Viscarra % Copyright (C) 2014--2016 by Alexey Balakin % % 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 3 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, see . % % \fi % % \iffalse % % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{mgltex}[2016/04/26 v4.2 Embed MGL scripts into LaTeX documents] % % %<*driver> \documentclass[10pt]{ltxdoc} \usepackage{color} \usepackage{mgltex} \DeclareRobustCommand\mglTeX{mgl\kern-0.04em\TeX}% Otherwise, incompatibility with \CharacterTable \IfFileExists{hyperref.sty}{% \usepackage[hidelinks]{hyperref}% }{} \EnableCrossrefs \CodelineIndex \RecordChanges \widowpenalty=10000 \clubpenalty=10000 \begin{document} \DocInput{mgltex.dtx} \end{document} % % \fi % % \CheckSum{0} % % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \bgroup% % \makeatletter% % \gdef\MGL@set@pseudo@verb@env{% % \if@minipage\else\vskip\parskip\fi% % \setlength{\labelsep}{1em}% % \@beginparpenalty\predisplaypenalty% % \leftskip\@totalleftmargin\rightskip\z@% % \parindent\z@\parfillskip\@flushglue\parskip\z@% % \itemsep\z@% % \@@par% % \def\par{% % \if@tempswa% % \leavevmode\null\@@par\penalty\interlinepenalty% % \else% % \@tempswatrue% % \ifhmode\@@par\penalty\interlinepenalty\fi% % \fi% % }% % \ttfamily% % \frenchspacing% % }% % \makeatother % \egroup % % \def\doccommand#1{\texttt{\textbackslash#1}} % % \changes{\textbf{v1.0 ------------}}{2014/09/27}{Initial version} % % % \changes{\textbf{v2.0 ------------}}{2014/11/23}{Possible bugfix by adding \doccommand{expandafter} to commands to ignore/write lines of MGL code} % \changes{\textbf{v2.0 ------------}}{2014/11/23}{Add environment \texttt{mglsignature} that adds a comment to every MGL script} % \changes{\textbf{v2.0 ------------}}{2014/11/23}{Eliminate line ignoring commands to create more elegant scripts, due to the a new command that adds comments to the scripts} % \changes{\textbf{v2.0 ------------}}{2014/11/23}{Move the MGL \emph{stop} command from the \texttt{\textbackslash{}AtEndDocument} command to the \doccommand{mgl@func} buffer} % % % \changes{\textbf{v3.0 ------------}}{2015/03/29}{Add detection of changes in MGL scripts to speed up compilation time (only changed scripts are recompiled)} % \changes{\textbf{v3.0 ------------}}{2015/03/29}{Add command \doccommand{mgldir}, \doccommand{mglscriptsdir}, \doccommand{mglgraphicsdir} and \doccommand{mglbackupsdir} to specify a main directory for \textsf{\mglTeX} and directories for the creation of scripts, graphics and backups} % \changes{\textbf{v3.0 ------------}}{2015/03/29}{Add the \doccommand{mglquality} command to specify a default quality} % \changes{\textbf{v3.0 ------------}}{2015/03/29}{Add the \doccommand{mglwidth} and \doccommand{mglheight} commands to specify the default size of the images produced} % \changes{\textbf{v3.0 ------------}}{2015/03/29}{Add the \doccommand{mglsettings} command to configure behavior of the package} % \changes{\textbf{v3.0 ------------}}{2015/03/29}{Improve environment \texttt{mglsignature} by adding the possibility of using \LaTeX{} commands inside it} % % % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Complete rewrite of \textsf{\mglTeX}} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{\textsf{\mglTeX} now depends of the \textsf{verbatim} package} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{All environments write their contents \emph{verbatim}} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add package options \texttt{0q}, \ldots, \texttt{8q} to specify quality} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the \doccommand{mglpaths} command to add directories to the search paths for MGL scripts} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the \doccommand{mglname} command to force clousure of the current main script, its compilation, and the opening of a new main script} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the option \texttt{label} to the \texttt{mgl} environment in order to override the automatic naming of the script and corresponding image} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the option \texttt{label} to the \texttt{mglverbatim} environment to name the verbatim code} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the option \texttt{separator} to the command \doccommand{mglplot} to brake the code into different physical text lines} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the option \texttt{path} to the commands \doccommand{mglgraphics} and \doccommand{mglinclude} to force a path to search MGL scripts} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Verbatim-like environments and \doccommand{mglinclude} command are more visually elegant now} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Numbering in verbatim-like environments is optional now} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the command \doccommand{listofmglscripts} to create a list of all MGL scripts included verbatim in the document} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Add the command \doccommand{mglTeXwVer} that prints the name of the package with its version in a coherent manner, and separated by an unbreakable space} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Verbatim-like environments and the \doccommand{mglinclude} command have starred versions wich prevent the command \doccommand{listofmglscripts} to list them} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Remove \texttt{mglsignature} environment for being considered useless, and to avoid interference with the detection of changes in MGL scripts, to speed up script writing and to make the package less resource-consuming} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Remove the \doccommand{mglwidth} and \doccommand{mglheight} commands for being considered useless} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Many improvements, including, but not limited to, speed up, increased coherence and cleanness of the code, less resource consumption} % \changes{\textbf{v4.0 ------------}}{2015/08/17}{Many bugfixes} % % % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Add the command \doccommand{mglimgext} to specify locally the extension to save the generated graphics} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Add the command \doccommand{mglswitch}, which replaces \doccommand{mgltexon} and \doccommand{mgltexoff}} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Rename the commands \doccommand{mgltexon} as \doccommand{MGL@switch@on} and \doccommand{mgltexoff} as \doccommand{MGL@switch@off} in order to avoid the user from unpurposely overwriting them} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{The command \doccommand{mglcomments} has been reimplemented to accept one mandatory argument: \doccommand{mglcomments\{on\}} replaces the old \doccommand{mglcomments}, while \doccommand{mglcomments\{off\}} replaces the old \doccommand{mglnocomments}} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Remove the command \doccommand{mglnocomments} (rendered useless by the new implementation of \doccommand{mglcomments})} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Remove the command \doccommand{mglTeXwVer} (rendered useless by the implementation of the starred version of \doccommand{mglTeX})} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Restore the command \doccommand{mglsettings}, which was unintentionally deleted in version~4.0} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Expand the key-val list family for the command \doccommand{mglsettings}} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{Reimplement the \doccommand{@MGL@comments@} switch} % \changes{\textbf{v4.1 ------------}}{2016/01/28}{A starred version of the command \doccommand{mglTeX} has been implemented, which prints the version of the package besides its name} % % % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New package options \texttt{gray}, \texttt{color} to activate/deactivate gray-scale mode for graphics} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New package options \texttt{0v}, \texttt{1v}, \texttt{2v} to select variant of arguments in MGL scripts} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New package option \texttt{9q} for setting quality to \texttt{9} (for testing purposes of the author)} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New commands: \doccommand{mglgray} (to activate/deactivate) gray-scale mode locally, and \doccommand{mglvariant} (to set variant of arguments in MGL scripts locally)} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Rename environment \texttt{mglcommon} to \texttt{mglsetupscript} (\texttt{mglcommon} is still available, but deprecated)} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Rename command \doccommand{mglcommonscriptname} to \texttt{mglsetupscriptname}} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Rename command \doccommand{MGL@graph@ext} to \doccommand{MGL@imgext}} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Rename family \texttt{MGL@keys} as \texttt{MGL@gr@keys} for consistency} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Reorganize and update documentation} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{\mglTeX{} now depends on the \texttt{ifpdf} package} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{The MGL code line \texttt{setsize~600~400} is now automatically written to the main script in order for the scaling options and commands to work} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Remove the \doccommand{MGL@setkeys} command, since it isn't needed as first thought} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Some minor bugfixes} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Change definition of \doccommand{mglcommentname} from \emph{MGL comment} to \emph{\mglTeX{} comment}} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Rename \doccommand{MGL@document@scripts} to \doccommand{MGL@doc@scripts}} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Rename \doccommand{MGL@script@name} tp \doccommand{MGL@script}} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Introduce the concept of \emph{global}, \emph{local} and \emph{private} settings in the documentation} % % \GetFileInfo{mgltex.sty} % % \DoNotIndex{\def,\bgroup,\egroup,\newcommand,\newenvironment,\\,\@onlypreamble,\@undefined,\@vobeyspaces,\list} % \DoNotIndex{\if,\else,\fi,\begingroup,\endgroup,\end,\edef,\xdef,\gdef,\scapechar,\active,\arabic,\catcode,\bfseries} % \DoNotIndex{\@flushglue,\@for,\@ifnextchar,\@makeother,\{,\},\ ,\AtBeginDocument,\AtEndDocument,\centering} % \DoNotIndex{\closein,\closeout,\csname,\endcsname,\CurrentOption,\DeclareGraphicsExtensions,\define@key,\DeclareOption} % \DoNotIndex{\detokenize,\do,\dospecials,\endlinechar,\endlist,\escapechar,\ExecuteOptions,\expandafter,\footnotesize} % \DoNotIndex{\framebox,\Huge,\ifeof,\IfFileExists,\ifx,\immediate,\include,\includegraphics,\item,\itemsep} % \DoNotIndex{\itshape,\jobname,\labelsep,\leftskip,\let,\long,\mbox,\newcounter,\newread,\newtoks,\newwrite,\noexpand} % \DoNotIndex{\obeyspaces,\openin,\openout,\PackageError,\PackageWarning,\parfillskip,\parindent,\parskip} % \DoNotIndex{\PassOptionsToPackage,\ProcessOptions,\read,\relax,\RequirePackage,\rightskip,\setcounter,\setkeys,\setlength} % \DoNotIndex{\space,\stepcounter,\string,\TeX,\the,\vbox,\verbatim@font,\write,\z@,\z@skip,\newif,\PackageInfo,\today} % \DoNotIndex{\obeylines,\or,\ifcase,\small,\vskip,\section,\refstepcounter,\protect,\pretolerance,\penalty,\ttfamily} % \DoNotIndex{\@@par,\@@,\@M,\@addtofilelist,\@auxout,\@bsphack,\@dottedtocline,\@empty,\@esphack,\@fornoop,\@fortmp} % \DoNotIndex{\@gobble,\@ifundefined,\@mkboth,\@namedef,\@nil,\@nnil,\@noitemerr,\@plus,\@pnumwidth,\@secpenalty} % \DoNotIndex{\@startsection,\@starttoc,\@tempdima,\@tempswatrue,\@totalleftmargin,\@unknownoptionerror,\@xobeysp} % \DoNotIndex{\^,\addcontentsline,\addpenalty,\addvspace,\advance,\begin,\c@tocdepth,\center,\chapter,\cleaders} % \DoNotIndex{\endcenter,\everypar,\fbox,\fboxrule,\frenchspacing,\g@addto@macro,\global,\hb@xt@,\hbadness,\hfil,\hfill} % \DoNotIndex{\hrule,\hskip,\hss,\if@minipage,\if@tempswa,\ifhmode,\ifnum,\interlinepenalty,\itemindent,\kern,\l@chapter} % \DoNotIndex{\l@section,\large,\leavevmode,\MakeUppercase,\newdimen,\nobreak,\nopagebreak,\normalfont,\null,\numberline} % \DoNotIndex{\p@,\par,\unpenalty,\usecounter,\@ifstar,\^,\iffalse,\iftrue,\ifpdf} % % \title{The \textsf{\mglTeX} package\thanks{This document corresponds to \textsf{\mglTeX}~\fileversion, dated \filedate.}} % \author{Diego Sejas Viscarra\\\texttt{dsejas.mathematics@gmail.com}} % % \maketitle % % \begin{abstract} % \noindent MathGL is a fast and efficient library by Alexey Balakin for the creation of high-quality publication-ready scientific graphics. Although it defines interfaces for many programming languages, it also implements its own scripting language, called \emph{MGL}, which can be used independently. With the package \textsf{\mglTeX}, MGL scripts can be embedded within any \LaTeX{} document, and the corresponding images are automatically created and included. % % This manual documents the usage of the commands and environments of~\textsf{\mglTeX}. % \end{abstract} % % \tableofcontents % % \section{Introduction} % \noindent MathGL is a fast and efficient library by Alexey Balakin for the creation of high-quality publication-ready scientific graphics. It implements more than $50$ different types of graphics for 1d, 2d and 3d large sets of data. It supports exporting images to bitmap formats (PNG, JPEG, BMP, etc.), or vector formats (EPS, \TeX, SVG, etc.), or 3d image formats (STL, OBJ, XYZ, etc.), and even its own native 3d format, MGLD. MathGL also defines its own vector font specification format, and supports UTF-16 encoding with \TeX-like symbol parsing. It supports various kinds of transparency and lighting, textual formula evaluation, arbitrary curvilinear coordinate systems, loading of subroutines from .dll or .so libraries, and many other useful features. % % MathGL has interfaces for a wide variety of programming languages, such as C/C++, Fortran, Python, Octave, Pascal, Forth, and many others, but it also defines its own scripting language, called \emph{MGL}, which can be used to generate graphics independently of any programming language. The \textsf{\mglTeX} package adds support to embed MGL code inside \LaTeX{} documents, which is automatically extracted and executed, and the resulting images are included in the document. % % Besides the obvious advantage of having available all the useful features of MathGL, \textsf{\mglTeX} facilitates the maintenance of your document, since both code for text and code for graphics are contained in a single file. % % \subsection{Conventions and notations} % \noindent For what's left of this manual, the symbols ``$\langle$'' and ``$\rangle$'' will enclose the description of an object that should be placed in that location; this is called a \emph{meta-variable}. For example, $\meta{text}$ is a meta-variable that indicates that in that location should be placed any form of text. % % In order to save space and time, some special conventions should be applied to meta-variables: % \begin{enumerate} % \item Any meta-variable that contain the word \emph{directory} indicates the name of a directory, in the form of an absolute or relative path, ending with the slash (``/'') character. % \item Any meta-variable that contain the word \emph{subdirectory} indicates a relative path ending with the slash (``/'') character. % \item \meta{$x_1\vert x_2\vert\ldots\vert x_n$} indicates that any of the values $x_1$, $x_2$, \ldots, $x_n$ can be placed there. A special case is \meta{$x_1\vert x_2\vert\ldots$}, where no upper limit is set. % \item The possible values of a meta-variable could also be indicated by a property. For example \meta{$x:x>0$} indicates that any positive value can be used in that location. % \item A meta-variable of the form \meta{list of something} or \meta{something list} indicate a comma-separated list of values of type $\meta{something}$; if only one value is used, no comma is needed. % \item A meta-variable with underscores (``|_|'') in its description indicate that spaces should not be used in that location. % \item \meta{key-val list} refers to a list of \meta{key}=\meta{value} pairs of options, where \meta{key} is a keyword name for an option and \meta{value} is a value assigned to it. % \end{enumerate} % % As is conventional for \LaTeX{} packages, the environments and commands defined by \textsf{\mglTeX} accept optional commands inside brackets ("|[|" and "|]|"), and mandatory arguments inside curly braces ("|{|" and "|}|"). % % While reading the following, it must be noted that most of \textsf{\mglTeX} settings have three modes: global, local and private. A setting is \emph{global} if it applies to the whole document, it is \emph{local} if it applies to the document from one point onwards, and it is \emph{private} if it applies only to a particular MGL script. Global settings are set thorugh package options or with the command |\mglsettings| (explained later), local settings have associated commands (subsection \ref{local setts}), and private settings are specified as optional arguments for environments and commands. An example of this would be the package option |4q|, the command |\mglquality{4}|, and the optional argument for environments and commands |quality=4|, to set the quality for graphics to |4| in the three different modes, respectively. % % \section{Usage} % \noindent The simplest way to load \textsf{\mglTeX} to a \LaTeX{} document is to write the command % \begin{center} % |\usepackage{mgltex}| % \end{center} % in the preamble. Alternatively, one can pass a number of options to the package by means of the syntax % \begin{center} % |\usepackage|\oarg{options list}|{mgltex}|, % \end{center} % where \meta{options list} can contain one or more of the following options: % \begin{itemize} % \item \textbf{draft:} The generated images won't be included in the document. This option is useful when fast compilation of the document is needed. % \item \textbf{final:} Overrides the |draft| option. % \item \textbf{on:} To rewrite, recompile and include the changed MGL scripts and/or corresponding graphics. % \item \textbf{off:} To avoid creation, compilation and/or inclusion of the MGL scripts and corresponding images. % \item \textbf{comments:} To allow the contents of the |mglcomment| environments to be shown in the \LaTeX{} document. % \item \textbf{nocomments:} To avoid showing the contents of the |mglcomment| environments in the \LaTeX{} document. % \item \textbf{gray:} To create the MGL graphics in gray-scale mode. % \item \textbf{color:} To create the MGL graphics in color mode. % \item \textbf{1x, \ldots, 9x:} To specify the scale for the creation of graphics (|1x| is normal scaling, |2x| is twice as bigger, etc). % \item \textbf{0q, \ldots, 9q:} To specify the quality for the creation of graphics. An info message indicating the characteristics of the chosen quality is printed in the .log file according to the following table: % \begin{center} % \DeleteShortVerb{\|} % \begin{tabular}{|c|l|} % \hline % Quality & Description\\ % \hline % \hline % $0$ & No face drawing (fastest)\\ % \hline % $1$ & No color interpolation (fast)\\ % \hline % $2$ & High quality (normal)\\ % \hline % $3$ & High quality with 3d primitives (not implemented yet)\\ % \hline % $4$ & No face drawing, direct bitmap drawing (low memory usage)\\ % \hline % $5$ & No color interpolation, direct bitmap drawing (low memory usage)\\ % \hline % $6$ & High quality, direct bitmap drawing (low memory usage)\\ % \hline % $7$ & High quality with 3d primitives, direct bitmap drawing\\ % & (not implemented yet)\\ % \hline % $8$ & Draw dots instead of primitives (extremely fast)\\ % \hline % $9$ & No drawing (for testing purposes)\\ % \hline % \end{tabular} % \MakeShortVerb{\|} % \end{center} % \item \textbf{0v, 1v, 2v:} To set the default variant of arguments for the MGL commands. % \item \textbf{png, jpg, jpeg:} To export images to a bitmap format. % \item \textbf{eps, epsz:} To export to uncompressed/compressed vectorial EPS format. % \item \textbf{bps, bpsz:} To export to uncompressed/compressed bitmap EPS format. % \item \textbf{pdf:} To export to 3D PDF format. % \item \textbf{tex:} To export to \LaTeX{}/\emph{tikz} document. % \end{itemize} % If two or more mutually exclusive options are specified, only the last one will be used by \textsf{\mglTeX}. For example, if one specifies the options |0q|, |3q| and |8q|---in that order---, then the quality will be set to $8$. % % Observe the |off| option is similar to the |draft| option, with the exception that |draft| deactivates inclusion of graphics for the \textsf{\mglTeX} and \textsf{graphicx} packages simultaneously, while the |off| option only deactivates \textsf{\mglTeX} functionalities (creation and/or inclusion of scripts and graphics), not affecting \textsf{graphicx}. This could be useful to recognize which images are created with MGL, and which are only included. Another possible use for this option is to avoid recompilation of scripts when they must be constantly changed until their final version.\footnote{\textsf{\mglTeX} has a convinient recompilation-decision algorithm that enables recompilation for changed scripts only (see subsection \ref{subsection: recompilation decision}).} % % There are two ways to compile a document with \textsf{\mglTeX}: The first way is to run % \begin{center} % |latex --shell-escape |\meta{document}|.tex| % \end{center} % three times, since the first run will detect changes in the scripts; the second run will extract the MGL code, execute it and include some of the resulting graphics, while the third run will include the remaining graphics. The second way is to run % \begin{center} % |latex |\meta{document}|.tex| % \end{center} % twice to detect changes in MGL code and to extract it, then compile the generated scripts with the program |mglconv| (part of MathGL bundle), and execute |latex |\meta{document}|.tex| once more to include the graphics.\footnote{If no changes were made to scripts intended to create graphics, only one \LaTeX{} run is needed.} (More on the recompilation-decision mechanism of \textsf{\mglTeX} can be found in subsection~\ref{subsection: recompilation decision}.) % % \subsection{Warning for the user}\label{subsection: warning} % Before we continue the description of the package, it must be pointed out that \textsf{\mglTeX} assummes that the command |\end{|\meta{MGL environment}|}|, that ends the corresponding \meta{MGL environment}, occupies its own physical line of \LaTeX{} code. So the correct forms of use of environments are the following: % \begin{quote} %|\begin{|\meta{MGL environment}|}|\\ %\meta{contents of the environment}\\ %|\end{|\meta{environment}|}| % \end{quote} % and % \begin{quote} %|\begin{|\meta{MGL environment}|}|\meta{contents of the environment}\\ %|\end{|\meta{environment}|}| % \end{quote} % The following form will cause problems: % \begin{quote} %|\begin{|\meta{MGL environment}|}|\meta{contents of the environment}|\end{|\meta{MGL environment}|}| % \end{quote} % % \textsf{\mglTeX} depends on the \textsf{verbatim} package to define its environments. One of the characteristics of \textsf{verbatim} is that it transcripts everything contained between the begining and the end of an environment, including spaces before an |\end{|\meta{MGL environment}|}| command. This should not be a problem, except for the fact that \textsf{\mglTeX} has a mechanism to detect changes in MGL scripts in order to recompile them (see subsection \ref{subsection: recompilation decision}), and the mentioned spaces in the scripts and their counterparts in the \LaTeX{} document can't be recognized properly as identical when compared, causing the package to recompile the scripts even when they haven't changed, rendering the mechanism useless.\footnote{It is currently unknown for the author why this spaces aren't detected properly. Help would be appreciated.} In order to avoid this glitch, the facilities provided by \textsf{verbatim} have been adapted to ignore everything before |\end{|\meta{MGL environment}|}|, including spaces and, unfortunately, MGL code. % % It should also be pointed out that the default behavior of the |verbatim| package makes the following form to ignore the \meta{text} after the |\end|\meta{MGL environment}, issuing a warning. % \begin{quote} %|\begin{|\meta{MGL environment}|}|\\ %\meta{contents of the environment}\\ %|\end{|\meta{MGL environment}|}|\meta{text} % \end{quote} % % \subsection{Environments for MGL code embedding} % \DescribeEnv{mgl}\noindent The main environment defined by \textsf{\mglTeX} is |mgl|. It extracts its contents to a main script, called \meta{main\_script\_name}.mgl, where \meta{main\_script\_name} stands for a name specified by the user with the |\mglname| command (explained later), or the name of the \LaTeX{} document being executed otherwise; this script is compiled, and the corresponding image is included. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mgl}|\oarg{key-val list}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mgl}|\\[0.25em] % \hline % \end{tabular} % \end{center} % Here, \meta{key-val list} can have the following optional arguments: % \begin{itemize} % \item \textbf{bb, bbllx, bblly, bburx, bbury, natwidth, natheight, hiresbb, viewport, trim, angle, origin, width, height, totalheight, keepaspectratio, scale, clip, draft, type, ext, read, command:} These are the same options of the |\includegraphics| command from the \textsf{graphicx} package. % \item \textbf{gray:} Can be used to activate (|gray=on| or |gray=1|) or deactivate (|gray=off| or |gray=0|) gray-scale mode privately (only for the current graphic). % \item \textbf{mglscale:} Any positive value for this option is used to physically scale the resulting image file, i.g., |mglscale=2| will create an image file twice as bigger. % \item \textbf{quality:} Sets the quality of the current graphic. Valid values are integers between |0| and |9|. % \item \textbf{variant:} Sets the variant of argument for the commands in the current script. % \item \textbf{imgext:} Can be used to set the extension for the current image. % \item \textbf{label:} Can be used to indicate a name for the corresponding graphic (otherwise, an automatic naming will be applied) % \end{itemize} % % \DescribeEnv{mgladdon} This environment adds its contents to the document's main script, but it doesn't produce any image. It doesn't require any kind of arguments. It is useful to add ``complementary code'', like instructions to load dynamic libraries, set default size for the graphics, etc. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mgladdon}|\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mgladdon}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeEnv{mglfunc} Is used to define MGL functions within the document's main script. It takes one mandatory argument, which is the name of the function, plus one optional argument, which specifies the number of arguments of the function (the default is $0$). The environment needs to contain only the body of the function, since the lines ``func \meta{function\_name} \meta{number of arguments}'' and ``return'' are appended automatically at the beginning and the end, respectively. The resulting code is written at the end of the document's main script, after the |stop| command, which is also written automatically. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglfunc}|\oarg{number of arguments}\marg{function\_name}\\[0.5em] % \hss\meta{MGL function body}\hss\\[0.5em] % |\end{mglfunc}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeEnv{mglcode} It has the same function as the |mgl| environment, but the corresponding code is written to a separate script, whose name is specified as mandatory argument. It accepts the following optional arguments: % \begin{itemize} % \item \textbf{bb, bbllx, bblly, bburx, bbury, natwidth, natheight, hiresbb, viewport, trim, angle, origin, width, height, totalheight, keepaspectratio, scale, clip, draft, type, ext, read, command:} These are the same options of the |\includegraphics| command from the \textsf{graphicx} package. % \item \textbf{gray:} Can be used to activate (|gray=on| or |gray=1|) or deactivate (|gray=off| or |gray=0|) gray-scale mode privately (only for the current graphic). % \item \textbf{mglscale:} Any positive value for this option is used to physically scale the resulting image file, i.g., |mglscale=2| will create an image file twice as bigger. % \item \textbf{quality:} Sets the quality of the current graphic. Valid values are integers between |0| and |9|. % \item \textbf{variant:} Sets the variant of argument for the commands in the current script. % \item \textbf{imgext:} Can be used to set the extension for the current image. % \end{itemize} % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglcode}|\oarg{key-val list}\marg{script\_name}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglcode}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeEnv{mglscript} The code within |mglscript| is written to a script whose name is specified as mandatory argument, but no image is produced. It is useful for creation of MGL scripts which can be later post-processed by another package, like \textsf{listings} or \textsf{pygments}. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglscript}|\marg{script\_name}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglscript}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeEnv{mglsetupscript} This is used to create a common ``setup'' script to define constants, parameters, etc. that will be available to the others. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglsetupscript}|\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglsetupscript}|\\[0.25em] % \hline % \end{tabular} % \end{center} % If called more than once, it will overwrite the setup code. Also note that it should be used only to define constants, parameters and things like that, but not graphical objects like axis or grids, because the |mgl| environment clears every graphical object before creating the image.\footnote{This problem occurs only with the \texttt{mgl} environment, so you could use \texttt{mglcommon} to create many graphics with the same axis, grid, etc., with environments like \texttt{mglcode}, but in that case the best option is to use the \texttt{mglsetup} environment together with the \texttt{\textbackslash{}mglplot} command.} % % For example, one could write % \begin{quote} % |\begin{mglsetupscript}|\\ % |define gravity 9.81 # [m/s^2]|\\ % |\end{mglsetupscript}| % \end{quote} % to make the constant \emph{gravity} available to every script. % % \DescribeEnv{mglcommon} This is a synomyn for the |mglsetupscript| environment. It is and will always be kept in \textsf{\mglTeX} for backwards compatibility with older versions of the package, but its use is \emph{deprecated}. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglcommon}|\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglcommon}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \subsection{Fast creation of graphics} % \noindent\textsf{\mglTeX} defines a convenient way to work with many graphics that have exactly the same settings (same rotation angles, same type of grid, same lighting, etc.): instead of writing repetitive code every time it's needed, it can be stored inside a |mglsetup| environment, and then can be used when needed with the |\mglplot| command. % % \DescribeEnv{mglsetup} This environment is defined as a special case of the |mglfunc| environment. It accepts one mandatory argument, which is a keyword (name) associated to the corresponding block of code (MGL function body). % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglsetup}|\marg{key\_word}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglsetup}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglplot} This command is used for fast generation of graphics with default settings, and can be used in parallel with the |mglsetup| environment. It accepts one mandatory argument which consists of MGL instructions, separated by the symbol ``:'', and can span through various text lines. It accepts the following optional arguments: % \begin{itemize} % \item \textbf{bb, bbllx, bblly, bburx, bbury, natwidth, natheight, hiresbb, viewport, trim, angle, origin, width, height, totalheight, keepaspectratio, scale, clip, draft, type, ext, read, command:} These are the same options of the |\includegraphics| command from the \textsf{graphicx} package. % \item \textbf{gray:} Can be used to activate (|gray=on| or |gray=1|) or deactivate (|gray=off| or |gray=0|) gray-scale mode privately (only for the current graphic). % \item \textbf{mglscale:} Any positive value for this option is used to physically scale the resulting image file, e.g., |mglscale=2| will create an image file twice as bigger. % \item \textbf{quality:} Sets the quality of the current graphic. Valid values are integers between |0| and |9|. % \item \textbf{variant:} Sets the variant of argument for the commands in the current script. % \item \textbf{imgext:} Can be used to set the extension for the current image. % \item \textbf{label:} Can be used to indicate a name for the corresponding graphic (otherwise, an automatic naming will be applied) % \item \textbf{setup:} Specifies a keyword associated to a |mglsetup| block, which will be executed before the code in the mandatory argument. % \item \textbf{separator:} Specifies a text symbol that will break the code in the mandatory argument into a new physical line in the main script every time is encountered. % \end{itemize} % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglplot|\oarg{key-val list}\marg{MGL code}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \subsection{Verbatim-like environments} % \noindent The main purpose of these environments is to typeset their contents to the \LaTeX{} document, elegantly separated from the rest of the text. They have two versions: an unstarred version which can be listed later with the |\listofmglscripts| command (explained later), and a starred version which won't be listed. % % Although these environments are intended to mimic the behavior of the |verbatim| environment from \LaTeX{}, there is an important difference, namely, long lines will be broken when the page margin is reached. This intended behavior is set because a language like MGL can easily have very long lines of code, like textual formulas, vectors input as lists of values, etc. Of course, no hyphenation will be performed, but the code will be indented in the second, third, etc. continuation lines by an amount specified by |\mglbreakindent| (explained later). % % \DescribeEnv{mglblock}\DescribeEnv{mglblock*} Besides typesetting its contents to the document, |mglblock| creates a script whose name is specified as mandatory argument. It accepts one optional argument: % \begin{itemize} % \item \textbf{lineno:} Used to activate (|lineno=true| or simply |lineno|) or deactivate (|lineno=false|) line numbering inside the environment. % \end{itemize} % By default, each line of code is numbered. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglblock}|\oarg{key-val list}\marg{script\_name}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglblock}|\\[0.25em] % \hline % \end{tabular} % \end{center} % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglblock*}|\oarg{key-val list}\marg{script\_name}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglblock*}|\\[0.25em] % \hline % \end{tabular} % \end{center} % The ouput looks like this: % \begin{quote} % \makeatletter % \MGL@set@script@name{example_script}% % \refstepcounter{MGL@verb@no}% % \addcontentsline{lms}{MGL@script}{\protect\numberline{\theMGL@verb@no.}{\ttfamily\protect\detokenize{\MGL@script.mgl}}}% % \setcounter{MGL@line@no}{0}% % \list{\mgllinenostyle\arabic{MGL@line@no}.}{}% % \MGL@set@pseudo@verb@env % \fboxrule=\mgllinethickness% % \item[\MGL@line@sep]\fbox{\bfseries\ttfamily\expandafter\detokenize\expandafter{\MGL@script.mgl}}\hskip\labelsep\MGL@line@sep\par\par% % \stepcounter{MGL@line@no}% % \item new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)' % \stepcounter{MGL@line@no}% % \item new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)' % \stepcounter{MGL@line@no}% % \item new z 50 40 '0.8*cos(pi*(y+1)/2)' % \stepcounter{MGL@line@no}% % \item title 'Parametric surface' : rotate 50 60 : box % \stepcounter{MGL@line@no}% % \item surf x y z 'BbwrR' % \item[\MGL@line@sep]\hskip-\labelsep\MGL@line@sep% % \endlist% % \end{quote} % % \DescribeEnv{mglverbatim}\DescribeEnv{mglverbatim*} This environment only typesets its contents to the \LaTeX{} document without creating any script. It accepts two optional arguments % \begin{itemize} % \item \textbf{lineno:} Used to activate (|lineno=true| or simply |lineno|) or deactivate (|lineno=false|) line numbering inside the environment. % \item \textbf{label:} Used to specify a name associated to the corresponding code. % \end{itemize} % The default behavior is to number each line of code. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglverbatim}|\oarg{key-val list}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglverbatim}|\\[0.25em] % \hline % \end{tabular} % \end{center} % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglverbatim*}|\oarg{key-val list}\\[0.5em] % \hss\meta{MGL code}\hss\\[0.5em] % |\end{mglverbatim*}|\\[0.25em] % \hline % \end{tabular} % \end{center} % The output looks like this without |label|: % \begin{quote} % \makeatletter % \setcounter{MGL@line@no}{0}% % \list{\mgllinenostyle\arabic{MGL@line@no}.}{}% % \MGL@set@pseudo@verb@env % \fboxrule=\mgllinethickness% % \MGL@set@script@name{\mglverbatimname}% % \item[\MGL@line@sep]\hskip-\labelsep\MGL@line@sep% % \refstepcounter{MGL@verb@no}% % \addcontentsline{lms}{MGL@script}{\protect\numberline{\theMGL@verb@no.}{\ttfamily\protect\detokenize{\MGL@script}}}% % \stepcounter{MGL@line@no}% % \item new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)' % \stepcounter{MGL@line@no}% % \item new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)' % \stepcounter{MGL@line@no}% % \item new z 50 40 '0.8*cos(pi*(y+1)/2)' % \stepcounter{MGL@line@no}% % \item title 'Parametric surface' : rotate 50 60 : box % \stepcounter{MGL@line@no}% % \item surf x y z 'BbwrR' % \item[\MGL@line@sep]\hskip-\labelsep\MGL@line@sep% % \endlist% % \end{quote} % \noindent If a |label| is specified, the output will look exactly as that of the |mglblock| environment. % % \DescribeEnv{mglcomment} This environment is used to embed comments. The comment won't be visible in the case of the user passing the option |nocomments| to the package, but it will be typeset \emph{verbatim} to the document if the user passes the option |comments|. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\begin{mglcomment}|\\[0.5em] % \hss\meta{Comment}\hss\\[0.5em] % |\end{mglcomment}|\\[0.25em] % \hline % \end{tabular} % \end{center} % If the user requests visible comments, this will result in the appearance of something like the following in the \LaTeX{} document: % \begin{quote} % \makeatletter % \list{}{}% % \MGL@set@pseudo@verb@env % \item\hskip-\labelsep<\MGL@dash@sep\mglcommentname\MGL@dash@sep>% % \item This is a mglTeX comment % \item\hskip-\labelsep<\MGL@dash@sep\mglcommentname\MGL@dash@sep>% % \endlist% % \end{quote} % % \subsection{Working with external scripts} % \noindent \textsf{\mglTeX} provides convenient ways to deal with external scripts (scripts that exist in their own files, independently of the \LaTeX{} document, like scripts sent by a colleague or created before the actual writing of the \LaTeX{} document, etc). It must be noted, however, that the package works on the suposition that these scripts are in their final version, so no change detection is performed on them. If a external script is changed, the corresponding graphic must be manually deleted in oreder to force recompilation. % % \DescribeMacro{\mglgraphics} This command takes the name of an external MGL script as mandatory argument, which will be automatically executed, and the resulting image will be included. The same optional arguments accepted by this command are: % \begin{itemize} % \item \textbf{bb, bbllx, bblly, bburx, bbury, natwidth, natheight, hiresbb, viewport, trim, angle, origin, width, height, totalheight, keepaspectratio, clip, draft, type, ext, read, command:} These are the same options of the |\includegraphics| command from the \textsf{graphicx} package. % \item \textbf{gray:} Can be used to activate (|gray=on| or |gray=1|) or deactivate (|gray=off| or |gray=0|) gray-scale mode privately (only for the current graphic). % \item \textbf{mglscale:} Any positive value for this option is used to physically scale the resulting image file, i.g., |mglscale=2| will create an image file twice as bigger. % \item \textbf{quality:} Sets the quality of the current graphic. Valid values are integers between |0| and |9|. % \item \textbf{variant:} Sets the variant of argument for the commands in the current script. % \item \textbf{imgext:} Can be used to set the extension for the current image. % \item \textbf{path:} Can be used to specify the location of the script. % \end{itemize} % % \DescribeMacro{\mglinclude}\DescribeMacro{\mglinclude*} This command is the equivalent of the |mglverbatim| environment for external scripts. It takes one mandatory argument, which is the name of a MGL script, which will be automatically transcript \emph{verbatim} on the \LaTeX{} document. It accepts the following optional arguments: % \begin{itemize} % \item \textbf{lineno:} Used to activate (|lineno=true| or simply |lineno|) or deactivate (|lineno=false|) line numbering inside the environment. % \item \textbf{path:} Can be used to specify the location of the script. % \end{itemize} % The unstarred version of this command will be listed if |\listofmglscripts| is used (explained later), while the starred version won't. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglinclude|\oarg{key-val list}\marg{script\_name}\\[0.25em] % \hline % \end{tabular} % \end{center} % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglinclude*|\marg{script\_name}\oarg{key-val list}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \subsection{Additional commands} % \DescribeMacro{\listofmglscripts}\noindent Opens a new section or chapter---depending on the \LaTeX{} class used---, where all the scripts that have been transcript in the document with the unstarred versions of the |mglblock| and |mglverbatim| environments, and the |\mglinclude| command, are listed. In case a |mglverbatim| is used, but no |label| is specified, the default name to display is specified by the |\mglverbatimname| macro (explained later), otherwise, the corresponding label is typeset. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\listofmglscripts|\\[0.25em] % \hline % \end{tabular} % \end{center} % The output is like this: % \begin{center} % \begin{minipage}{0.9\textwidth} % \listofmglscripts % \end{minipage} % \end{center} % % \DescribeMacro{\mglTeX}\DescribeMacro{\mglTeX*} This command just pretty-prints the name of the package, i.e., the logo: % \begin{center} % \Huge\mglTeX % \end{center} % The starred version will also print the version in a coherent manner. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglTeX|\\[0.25em] % \hline % \end{tabular} % \end{center} % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglTeX*|\\[0.25em] % \hline % \end{tabular} % \end{center} % % In an environment where the typesetting of the logo is impossible (a text editor, for instance), it can (and should) be replaced by ``mglTeX''. % % \subsection{Local settings commands}\label{local setts} % \noindent These commands are intended to be equivalent to the package options, but with a local-only effect, meaning that the new settings are applied from the point these commands are used onward. % % \DescribeMacro{\mglswitch} This command is equivalent to the package options |on| and |off|, depending on the argument passed. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglswitch{|\meta{off\,$\vert$on\,$\vert$0\,$\vert$1}|}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % Observe that |\mglswitch{on}| and |\mglswitch{off}| can be used to save time when writing a document, wrapping a section with them, avoiding recompilation of the corresponding scripts. % % \DescribeMacro{\mglcomments} This command is equivalent to the package options |comments| and |nocomments|, depending on the argument passed. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglcomments{|\meta{off\,$\vert$on\,$\vert$0\,$\vert$1}|}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglgray} It is equivalent to the package options |gray| and |color|, depending on the argument passed. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglgray{|\meta{off\,$\vert$on\,$\vert$0\,$\vert$1}|}|\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglscale} Can be used to specify the default scaling for the creation of MGL graphics (1 is normal scaling, 2 is twice as bigger, etc.). % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglscale|\marg{$x:x>0$}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglquality} The default quality for the creation of MGL graphics can be specified locally with this command. An info message will be printed in the |.log| file indicating the characteristics of the chosen value, according to the following table: % \begin{center} % \DeleteShortVerb{\|} % \begin{tabular}{|c|l|} % \hline % Quality & Description\\ % \hline % \hline % $0$ & No face drawing (fastest)\\ % \hline % $1$ & No color interpolation (fast)\\ % \hline % $2$ & High quality (normal)\\ % \hline % $3$ & High quality with 3d primitives (not implemented yet)\\ % \hline % $4$ & No face drawing, direct bitmap drawing (low memory usage)\\ % \hline % $5$ & No color interpolation, direct bitmap drawing (low memory usage)\\ % \hline % $6$ & High quality, direct bitmap drawing (low memory usage)\\ % \hline % $7$ & High quality with 3d primitives, direct bitmap drawing\\ % & (not implemented yet)\\ % \hline % $8$ & Draw dots instead of primitives (extremely fast)\\ % \hline % $9$ & No drawing (for testing purposes)\\ % \hline % \end{tabular} % \MakeShortVerb{\|} % \end{center} % If a non available quality is chosen, it will be changed to $2$ (the default), and a warning message will be issued for the user. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglquality|\marg{0\,$\vert$1\,$\vert$\ldots\,$\vert$9}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglvariant} It is useful to set the default variant of arguments for MGL commands. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglvariant|\marg{0\,$\vert$1\,$\vert$\ldots}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglimgext} Can be used to specify the extension to save graphics. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglimgext|\marg{image extension}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglname}\noindent If used in the preamble of the document this commands just sets the name of the. If used after the |\begin{document}| command, it will force the closure of the current main script, create the corresponding graphics, and start a new main script with the specified name. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglname|\marg{main\_script\_name}\\[0.25em] % \hline % \end{tabular} % \end{center} % % The use of this command is encouraged when writing large documents, like books or thesis, to create a main script per document block (section, chapter, part, etc.). Since the |mgl| environment and the |\mglplot| command use an internal counter to automatically name scripts, unless the |label| option is used; if a new script is added this way to the document, it will alter the original numbering, causing \textsf{\mglTeX} to recompile the scripts from that point on (for more details, read subsection \ref{subsection: recompilation decision}). If the |\mglname| command is used, only the scripts of the current document block will be recompiled. % % \subsection{Advanced settings commands} % \noindent Although \textsf{\mglTeX} is completely functional without any further set up, there are some parameters of its behavior that could be useful to modify. The following commands must be used in the preamble of the document only, since the first MGL script is created at the moment of the |\begin{document}| command, and otherwise they could create weird errors during compilation; trying to use them somewhere else will produce an error. % % \DescribeMacro{\mgldir} This command can be used to specify the main working directory for \textsf{\mglTeX}. Inside it, the scripts, backup files and graphics will be created, or can be separated inside subdirectories. This is useful, for example, to avoid many scripts and graphics from polluting the directory where the \LaTeX{} document is. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mgldir|\marg{main\_directory}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglscriptsdir} It specifies the subdirectory inside \mglTeX's \meta{main\_directory} where the MGL scripts will be created. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglscriptsdir|\marg{scripts\_subdirectory}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglgraphicsdir} It specifies the subdirectory inside \mglTeX's \meta{main\_directory} where the MGL graphics will be created, including the ones from external scripts (not embedded inside the \LaTeX{} document). % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglgraphicsdir|\marg{graphics\_subdirectory}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \DescribeMacro{\mglbackupsdir} It specifies the subdirectory inside \mglTeX's \meta{main\_directory} where backups for the MGL scripts will be created. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglbackupsdir|\marg{backups\_subdirectory}\\[0.25em] % \hline % \end{tabular} % \end{center} % % The above commands can be used in various combinations. For example, if none of them is used, the scripts, graphics and backups will be created inside the same path where the \LaTeX{} document is being compiled; if only |\mgldir| is used, they will be created inside \meta{main\_directory}; if only |\mgldir| and |\mglscriptsdir| are used, the scripts will be created inside \meta{main\_directory}\meta{scripts\_subdirectory}, while the graphics and backups will be inside \meta{main\_directory} only; if |\mgldir| isn't used, but the other commands are, the \meta{scripts\_subdirectory}, \meta{graphics\_subdirectory} and \meta{backups\_subdirectory} folders will be inside the folder where the \LaTeX{} document is being compiled. % % \DescribeMacro{\mglpaths} In case of having external MGL scripts, it is not recommended to place them inside the same location as where the embedded scripts are extracted, since they could be accidentally overwritten or deleted by the user; they should be separated in a folder which can be specified in the form of an absolute or relative path using this command. % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglpaths|\marg{directory list}\\[0.25em] % \hline % \end{tabular} % \end{center} % This command can be used many times or can be used to specify many paths at once. In the case of using it many times, each call will add the new directory or directories to the list of searching paths. % % \DescribeMacro{\mglsettings} This command has been added for the confort of the user, since it handles all of the basic and advanced settings of \textsf{\mglTeX}, as an alternative to some package options and commands. It takes one mandatory argument which should be a list of \meta{key}=\meta{value} pairs, according to the following table: % \begin{center} % \DeleteShortVerb{\|} % \begin{tabular}{|l|l|l|} % \hline % \textbf{Key} & \textbf{Value} & \textbf{Description}\\ % \hline % \hline % dir & \meta{main\_directory} & The main working directory\\ % \hline % scriptsdir & \meta{scripts\_subdirectory} & The subdirectory for scripts creation\\ % \hline % graphicsdir & \meta{graphics\_subdirectory} & The subdirectory for graphics creation\\ % \hline % backupsdir & \meta{backups\_subdirectory} & The subdirectory for backups creation\\ % \hline % paths & \meta{directory list} & Paths to external scripts\\ % \hline % switch & \meta{off\,$\vert$on\,$\vert$0\,$\vert$1} & Turn off/on \mglTeX\\ % \hline % comments & \meta{off\,$\vert$on\,$\vert$0\,$\vert$1} & Turn off/on comments\\ % \hline % gray & \meta{off\,$\vert$on\,$\vert$0\,$\vert$1} & Turn off/on gray-scale mode\\ % \hline % mglscale & \meta{$x:x>0$} & Scale for creation of graphics\\ % \hline % quality & \meta{0\,$\vert$1\,$\vert$\ldots\,$\vert$9} & Quality for creation of graphics\\ % \hline % variant & \meta{0\,$\vert$1\,$\vert$\ldots} & Variant of arguments for MGL commands\\ % \hline % imgext & \meta{image extension} & Extension for creation of graphics\\ % \hline % \end{tabular} % \MakeShortVerb{\|} % \end{center} % \begin{center} % \begin{tabular}{l} % \hline\\[-0.75em] % |\mglsettings|\marg{key-val list}\\[0.25em] % \hline % \end{tabular} % \end{center} % % \subsection{User-definable macros} % \noindent There are macros that the user is allowed to modify in order to customize some aspects of the behavior of \textsf{\mglTeX}. For example, if writing in spanish, french or russian, the user would like to modify the name of the common script, the words typeset in the separator lines of mglTeX comments, the name of the list of MGL scripts, etc. % % \DescribeMacro{\mglsetupscriptname} It is the name for the common setup script that takes the contents of the |mglseuptscipt| or |mglcommon| environments. The default name is defined by % \begin{quote} % |\def\mglsetupscriptname{MGL_setup_script}| % \end{quote} % % \DescribeMacro{\mglcommentname} This macro expands to the words typeset before and after a \textsf{\mglTeX} comment, in the middle of the separator lines. The default words are set by % \begin{quote} % |\def\mglcommentname{\mglTeX{} comment}| % \end{quote} % % \DescribeMacro{\listofmglscriptsname} This is the name of the section/chapter created by the command |\listofmglscripts|. The default is set by % \begin{quote} % |\def\listofmglscriptsname{List of MGL scripts}| % \end{quote} % % \DescribeMacro{\mglverbatimname} This is the default name to be printed in the list of MGL scripts for scripts created with the unstarred version of |mglverbatim|, for which a |label| hasn't been specified. The default is % \begin{quote} % |\def\mglverbatimname{(Unnamed MGL script)}| % \end{quote} % % \DescribeMacro{\mgllinenostyle} Indicates the style for typeseting the line numbers inside the |mglblock| and |mglverbatim| environments, and the |\mglinclude| command. The default is % \begin{quote} % |\def\mgllinenostyle{\footnotesize}| % \end{quote} % % \DescribeMacro{\mgldashwidth} The dashes of the separator lines for the |mglcomment| environment are contained inside boxes whose width is specified by this macro. For practical purposes, this dimension can be used to increase/decrease the space between the dashes. The default is % \begin{quote} % |\mgldashwidth=0.75em| % \end{quote} % It is recommended to use font-dependent units for this dimension, like |em|, just in case the font is changed later, so it adapts to the new metric.\footnote{A rule of thumb is to use \texttt{em} units for horizontal dimensions, and \texttt{ex} units for vertical dimensions.} % % \DescribeMacro{\mgllinethickness} It is the thickness of the separator lines for the |mglblock| and |mglverbatim| environments, and the |\mglinclude| command. The default is % \begin{quote} % |\mgllinethickness=0.25ex| % \end{quote} % It is also recommended to use font-dependent units for this dimension, like |ex|. % % \DescribeMacro{\mglbreakindent} \textsf{\mglTeX} allows line breaking inside verbatim-like environments and commands. When a line of code is broken, |\mglbreakindent| is the indentation of the second, third, etc. continuation lines. The default is % \begin{quote} % |\mglbreakindent=1em| % \end{quote} % Once more, font-dependent units are encourage. % % \section{Behavior of \textsf{\mglTeX}} % \noindent \textsf{\mglTeX} has many convenient features designed for the comfort of the user, and to reduce the possibility of unintentional malfunction. % \subsection{Creation and inclusion of MGL scripts and graphics} % \noindent All environments and commands for MGL code embedding check for multiple scripts with the same name. This detection is performed in order to avoid unintentionally overwriting scripts, or creating confusion with different verbatim chunks of code with the same name. If such multiple naming is found a warning will be issued. However, external scripts are supposed to be responsibility of the user, so no detection of multiple naming will be performed on them. % % When \textsf{\mglTeX} is unable to find a graphic that is supposed to include, instead of producing an error, it will warn the user about it, and will display a box in the corresponding position of the document like the one shown in figure~\ref{fig: MGL image not found box}. % \begin{figure}[!ht] % \centering % \fbox{% % \centering% % \bfseries\Huge% % \begin{tabular}{c}MGL\\image\\not\\found\end{tabular}% % } % \caption{This box is shown by \textsf{\mglTeX} instead of a graphic that should be included, but can't be found.}\label{fig: MGL image not found box} % \end{figure} % Notice that the first time or even the second time \LaTeX{} is executed, many of these boxes will appear in the document, because the first run detects changes on scripts, while the second run creates the graphics, but not all of them are included, until \LaTeX{} is run for the third time. % % Likewise, when a script isn't found, a warning will be issued for the user, and, if that script was meant to be included in the document by a |\mglinclude| command, the box shown in figure~\ref{fig: MGL script not found box} will be displayed instead. % \begin{figure}[!ht] % \centering % \fbox{% % \centering% % \bfseries\Huge% % \begin{tabular}{c}MGL\\script\\not\\found\end{tabular}% % } % \caption{This box is shown by \textsf{\mglTeX} instead of a script that should be included, but can't be found.}\label{fig: MGL script not found box} % \end{figure} % % When \textsf{\mglTeX} is |off| no MGL graphics will be generated nor will be included, but instead, a box like the one of figure~\ref{fig: mglTeX is off box} will be shown. % \begin{figure}[!ht] % \centering % \fbox{% % \centering% % \bfseries\Huge% % \begin{tabular}{c}\mglTeX\\is off;\\no image\\included\end{tabular}% % } % \caption{This box is shown instead of an image when \textsf{\mglTeX} is \texttt{off}.}\label{fig: mglTeX is off box} % \end{figure} % % \subsection{Recompilation-decision algorithm}\label{subsection: recompilation decision} % \noindent \textsf{\mglTeX} has the builtin capacity of detecting changes in MGL scripts, so that a script is recompiled only when it has changed, not every time \LaTeX{} is executed. This saves a lot of time, since most of the compilation time of a document is spent on the creation (and conversion to another format, if necessary) of the graphics. % % This is how the recompilation-decision is performed: When \textsf{\mglTeX} finds an environment or command meant to create a script/graphic, it checks if the command |\MGL@@@|\meta{script} is defined, where \meta{script} is the name of the script. If the command is undefined, this means the script has changed, so the corresponding code is transcript to the file \meta{script}.mgl, and the command |\MGL@@@|\meta{script} is defined. If the command is already defined, this means the script has been created on a previous \LaTeX{} run, so this time the embedded code is compared against the contents of the script; if they are equal, then |\MGL@@@|\meta{script} is defined again, otherwise, it is undefined, so the next \LaTeX{} run will rewrite/recompile the code. This process is schematically represented in figure~\ref{fig: recompilation decision}. % % \begin{figure}[ht!] % \centering % \includegraphics[scale=0.35]{Recompilation_decision} % \caption{The algorithm used by \textsf{\mglTeX} to decide which scripts recereate/recompile.}\label{fig: recompilation decision} % \end{figure} % % The recompilation-decision mechanism can be fooled, however. The |mgl| environment and |\mglplot| command have the ability to automatically name scripts by means of the use of an internal counter, unless the |label| option is specified. Suppose the user wants to add a new |mgl| environment or |\mglplot| command exactly after the $(n-1)$th script, so the $n$th script will be the newly added, while the old $n$th will be the new $(n+1)$th, and so on, altering the original numbering. This will cause \textsf{\mglTeX} to compare the old $n$th script with the old $(n+1)$th, and so on, deciding they are different, so they will be recompiled. % % There are two ways to avoid this problem: The first one is to use the |label| option on the newly arrived; the second is to wrap a complete block of the document with the |\mglswitch{off}| and |\mglswitch{on}| commands, avoiding recompilation and saving time. This last option will avoid the inclusion of the MGL graphics, so it is only recommended in case of the wrapped scripts being in their final version (not needing further modification), so there is no need of updating the corresponding graphics; then, when the document is compiled in its final version, the |\mglswitch{off}| and |\mglswitch{on}| can be removed. However, the most recommended way of proceeding is to use the |\mglname| command to create a separated main script per document block (section, chapter, part, etc.), so that, if a new script disrupts the original numbering, \textsf{\mglTeX} will recompile only the scripts of the current block. % % There are situations when recompilation of a script has to be forced. For example, if the default quality has changed, but the script hasn't, \textsf{\mglTeX} won't recreate the corresponding graphic by its own initiative, because it won't detect any changes in the code. In order to force recompilation, the image of the corresponding script can be deleted: \textsf{\mglTeX} will detect this abscence in the next \LaTeX{} run and recompile. % % \section{Acknowledgements} % \noindent \textsf{\mglTeX} was born as a small personal project. It has grown and mature under the constant suggestions and requests from Prof. Alexey Balakin. % % \section{Redistributing and modifying} % \noindent The \emph{source code} of \textsf{\mglTeX} (.sty, .dtx, and .ins files) can be redistributed and/or modified under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The \emph{documentation} of \textsf{\mglTeX} (.dvi, .ps, .pdf and other files) is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. % % \StopEventually{\PrintChanges\PrintIndex} % % \section{Implementation} % \noindent This section documents the complete code of \textsf{\mglTeX}. It's main purpose is to facilitate the understanding and maintanance of the package's code. For the following, we use ``|@|'' in the name of macros the user should not modify; the prefix ``|MGL|'' is used to simulate a namespace, so the macros from \textsf{\mglTeX} won't interfere with the ones from other packages. % % \subsection{Initialization}\label{Init} % \noindent We first define some macros that will serve different purposes on different parts of the package. % \begin{macro}{\MGL@off}\begin{macro}{\MGL@on}\begin{macro}{\MGL@zero}\begin{macro}{\MGL@one} % These are used in the command |\MGL@test@switch| (explained later) to determine whether the user has passed one of the options |off|, |on|, |0| or |1| to a command. % \begin{macrocode} \def\MGL@off{off} \def\MGL@on{on} \def\MGL@zero{0} \def\MGL@one{1} % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro} % \begin{macro}{\MGL@test@switch} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New command to verify and validate switching arguments} % It is called by a command to test whether the user has passed the option |off|, |on|, |0| (equivalent to |off|) or |1| (equivalent to |on|); if the option is correct, it is replaced by its equivalent, otherwise, a warning is issued. It takes two arguments: the first one is the option to test, the second one is the name of the command calling this macro. % \begin{macrocode} \def\MGL@test@switch#1#2{% \def\MGL@temp@a{#1}% \ifx\MGL@temp@a\MGL@on% \else\ifx\MGL@temp@a\MGL@off% \else\ifx\MGL@temp@a\MGL@one% \def\MGL@temp@a{on}% \else\ifx\MGL@temp@a\MGL@zero% \def\MGL@temp@a{off}% \else% \PackageWarning{mgltex}{% Unrecognizable option "#1" passed to command \protect#2% }% \fi\fi\fi\fi% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@TeX@ext} % Is used in the command |\MGL@includegraphics| (explained later) to determine whether the user has chosen to save graphics in \LaTeX/Tikz format. % \begin{macrocode} \def\MGL@TeX@ext{.tex} % \end{macrocode} % \end{macro} % % The macros |\MGL@switch@on| and |\MGL@switch@off| are called when the package options |on| and |off| are passed, respectively, or when the commands |\mglswitch{on}| and |\mglswitch{off}| are used, respectively. % \begin{macro}{\MGL@switch@on} % (Re)defines the commands to open, read, write and close scripts, and the command that includes MGL graphics. % \begin{macrocode} \def\MGL@switch@on{% % \end{macrocode} % \begin{macro}{\MGL@openout} % Opens a script for writing. It takes two arguments, the first being an output stream number, allocate by |\newwrite| (\TeX{} command), and the second being the path to the script. % \begin{macrocode} \def\MGL@openout##1##2{% \immediate\openout##1="##2"% }% % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@openin} % Opens a script for reading. It takes two arguments, the first being an input stream number, allocate by |\newread| (\TeX{} command), and the second being the path to the script. % \begin{macrocode} \def\MGL@openin##1##2{% \immediate\openin##1="##2"% }% % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@write} % Writes to a script opened with |\MGL@openout|. Its first argument is the output stream number of the script, and the second is the text to write. % \begin{macrocode} \def\MGL@write##1##2{% \immediate\write##1{##2}% }% % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@read} % Reads one line from a script opened with |\MGL@openin|. Its first argument is the input stream number of the script, and the second is a variable where the read text will be stored. The variable is first initialized as empty; if the end of the script has been reached, then there is nothing to read, so it remains empty; otherwise, one line is read and stored in the variable, locally supressing any end line character (|\endlinechar=-1|). % \begin{macrocode} \def\MGL@read##1##2{% \def##2{}% \ifeof##1\else% \bgroup% \endlinechar=-1% \immediate\global\read##1 to ##2% \egroup% \fi% }% % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@closeout} % Closes a script opened with |\MGL@openout|, whose stream number is passed as argument. % \begin{macrocode} \def\MGL@closeout##1{% \immediate\closeout##1% } % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@closein} % Closes a script opened with |\MGL@openin|, whose stream number is passed as argument. % \begin{macrocode} \def\MGL@closein##1{% \immediate\closein##1% } % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@includegraphics} % This is a quite sophisticated command. It is in charge of including the graphics created by \textsf{\mglTeX}. % \begin{macrocode} \def\MGL@includegraphics{% % \end{macrocode} % First checks if the image exists. Note the |\MGL@dir| and |\MGL@graphics@dir| macros are set by the user with the |\mgldir| and |\mglgraphicsdir| commands, respectively, while |\MGL@script| stores the name of the script ---and thus the image--- executed, and |\MGL@imgext| is the extension chosen by the user to save the graphics. % \begin{macrocode} \IfFileExists{\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext}{% % \end{macrocode} % If the chosen extension is |.tex|, a \LaTeX/Tikz file has been created, which has to be simply included in the document; it will be automatically compiled by \LaTeX{}. (Observe we use the |\MGL@TeX@ext| macro defined above.) % \begin{macrocode} \ifx\MGL@imgext\MGL@TeX@ext% \include{\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext}% % \end{macrocode} % If the chosen extension is not |.tex|, a normal visual image has been created, so the |\includegraphics| command is invoked to deal with it. The options for this command (like |scale|, |angle|, etc.) are stored in the |\MGL@graph@keys| macro, which is defined by every environment or command that creates and compiles MGL scripts, according to the optional arguments the user has passed. % \begin{macrocode} \else% \expandafter\includegraphics\expandafter[\MGL@graph@keys]{% \MGL@dir\MGL@graphics@dir\MGL@script% }% \fi% }{% % \end{macrocode} % If the requested image doesn't exist, the issue a warning message for the user, and print a warning framed box (``\textbf{MGL image not found}'') in the place the image should occupy. % \begin{macrocode} \PackageWarning{mgltex}{MGL image "\MGL@script" not found}% \fbox{% \centering% \bfseries\Huge% \begin{tabular}{c}MGL\\image\\not\\found\end{tabular}% }% }% }% % \end{macrocode} % \end{macro} % And here ends the |\MGL@switch@on| command. % \begin{macrocode} } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@switch@off} % (Re)defines the same commands as |\MGL@switch@on| in such a way they accept the same arguments, but do nothing. The exception is |\MGL@includegraphics| which, instead of doing nothing, prints a warning framed box (``\textbf{\mglTeX{} is off; no image included}''). % \begin{macrocode} \def\MGL@switch@off{% \PackageWarning{mgltex}{mglTeX is off}% \def\MGL@openout##1##2{}% \def\MGL@openin##1##2{}% \def\MGL@write##1##2{}% \def\MGL@read##1##2{}% \def\MGL@closeout##1{} \def\MGL@closein##1{} \def\MGL@includegraphics{% \fbox{% \centering% \bfseries\Huge% \begin{tabular}{c}\mglTeX\\is off;\\no image\\included\end{tabular}% }% }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\@MGL@comments@off}\begin{macro}{\@MGL@comments@on} % We will need a boolean switch to activate/deactivate comments later. % \begin{macrocode} \def\@MGL@comments@off{\let\if@MGL@comments@\iffalse} \def\@MGL@comments@on{\let\if@MGL@comments@\iftrue} % \end{macrocode} % \end{macro}\end{macro} % % \begin{macro}{\MGL@gray}\begin{macro}{\MGL@gray@off}\begin{macro}{\MGL@gray@on} % The commands |\MGL@gray@off| and |\MGL@gray@on| simply set the value of |\MGL@gray| to $0$ and $1$, respectively; this value will be used later through the |-g| command line option from |mglconv|. % \begin{macrocode} \def\MGL@gray@off{\def\MGL@gray{0}} \def\MGL@gray@on{\def\MGL@gray{1}} % \end{macrocode} % \end{macro}\end{macro}\end{macro} % \begin{macro}{\mglgray} % Depending on the option passed by the user, it calls |\@MGL@gray@on| or |\@MGL@gray@off|. % \begin{macrocode} \def\mglgray#1{% \MGL@test@switch{#1}{\mglgray}% \csname @MGL@gray@\MGL@temp@a\endcsname% } % \end{macrocode} % \end{macro} % % \begin{macro}{\mglscale}\begin{macro}{\MGL@scale} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Now accepts any positive value} % |\mglscale| sets the value of the |\MGL@scale| macro, which is used later to specify the default scaling for graphics. It only accepts positive values, otherwise it issues a warning and restarts the scaling to $1$. In order to be able to check the validity of the value passed by the user, we first set the |\MGL@scale| macro to that value and test it with the |\ifdim| conditional.\footnote{We can't use \doccommand{ifnum} here because it only accepts integer values.} Since this conditional tests dimensions only, the value passed by the user is multiplied by |\p@| (value |1pt|), so it can be compared with |\z@| (value |0pt|). % \begin{macrocode} \def\mglscale#1{ \ifdim#1\p@>\z@% \def\MGL@scale{#1}% \else% \PackageWarning{mgltex}{% Scaling value of #1\space not allowed; using default (1)% }% \def\MGL@scale{1}% \fi% } % \end{macrocode} % \end{macro}\end{macro} % % \begin{macro}{\mglquality}\begin{macro}{\MGL@quality} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{\texttt{9} is accepted as quality value now} % |\mglquality| sets the value of the |\MGL@quality| macro, which is used later to specify the default quality for graphics. It only accepts integer values from $0$ to $8$ (the only ones defined by |MathGL|), otherwise it issues a warning and restarts to $2$ (the default for |MathGL|). In order to be able to check the validity of the value passed by the user, we first set the |\MGL@quality| macro to that value and test it with the |\ifcase| conditional; if the value is valid, we print an info message to the |.log| file about the characteristics of the chosen quality, but if it is invalid, we issue a warning and overwrite |\MGL@scale| to $2$. % \begin{macrocode} \def\mglquality#1{% \def\MGL@quality{#1}% \ifcase\MGL@quality% \PackageInfo{mgltex}{% Quality 0: No face drawing (fastest)% }% \or% \PackageInfo{mgltex}{% Quality 1: No color interpolation (fast)% }% \or% \PackageInfo{mgltex}{% Quality 2: High quality (normal)% }% \or% \PackageInfo{mgltex}{% Quality 3: High quality with 3d primitives (not implemented yet)% }% \or% \PackageInfo{mgltex}{% Quality 4: No face drawing, direct bitmap drawing (low memory usage)% }% \or% \PackageInfo{mgltex}{% Quality 5: No color interpolation, direct bitmap drawing (low memory usage)% }% \or% \PackageInfo{mgltex}{% Quality 6: High quality, direct bitmap drawing (low memory usage)% }% \or% \PackageInfo{mgltex}{% Quality 7: High quality with 3d primitives, direct bitmap drawing % (not implemented yet)% }% \or% \PackageInfo{mgltex}{% Quality 8: Draw dots instead of primitives (extremely fast)% }% \or% \PackageInfo{mgltex}{% Quality 9: No drawing (for testing purposes)% }% \else% \PackageWarning{mgltex}{% Quality #1 not available; using default (2)% }% \def\MGL@quality{2}% \fi% } % \end{macrocode} % \end{macro}\end{macro} % % \begin{macro}{\mglvariant}\begin{macro}{\MGL@variant} % |\mglvariant| sets the value of the |\MGL@variant| macro, which is passed later to |mglconv| thorugh its |-v| command line option. It only accepts non-negative integer, otherwise it issues a warning and restarts to $0$ (the default for |MathGL|). In order to be able to check the validity of the value passed by the user, we use the |\ifnum| conditional; if the value is invalid we issue a warning and overwrite |\MGL@variant| to $0$. % \begin{macrocode} \def\mglvariant#1{% \def\MGL@variant{#1}% \ifnum\MGL@variant<0% \PackageWarning{mgltex}{% Variant #1 not allowed; using default (0)% }% \def\MGL@variant{0}% \fi% } % \end{macrocode} % \end{macro}\end{macro} % % Now we declare the options |final| and |draft|, which are simply passed to the \textsf{graphicx} package. % \begin{macrocode} \DeclareOption{draft}{% \PassOptionsToPackage{\CurrentOption}{graphicx}% } \DeclareOption{final}{% \PassOptionsToPackage{\CurrentOption}{graphicx}% } % \end{macrocode} % % The rest of the package options just call an adequate command or set an adequate value for a macro. % \begin{macrocode} \DeclareOption{on}{\MGL@switch@on} \DeclareOption{off}{\MGL@switch@off} \DeclareOption{nocomments}{\@MGL@comments@off} \DeclareOption{comments}{\@MGL@comments@on} \DeclareOption{gray}{\MGL@gray@on} \DeclareOption{color}{\MGL@gray@off} \DeclareOption{1x}{\def\MGL@scale{1}} \DeclareOption{2x}{\def\MGL@scale{2}} \DeclareOption{3x}{\def\MGL@scale{3}} \DeclareOption{4x}{\def\MGL@scale{4}} \DeclareOption{5x}{\def\MGL@scale{5}} \DeclareOption{6x}{\def\MGL@scale{6}} \DeclareOption{7x}{\def\MGL@scale{7}} \DeclareOption{8x}{\def\MGL@scale{8}} \DeclareOption{9x}{\def\MGL@scale{9}} \DeclareOption{0q}{\def\MGL@quality{0}} \DeclareOption{1q}{\def\MGL@quality{1}} \DeclareOption{2q}{\def\MGL@quality{2}} \DeclareOption{3q}{\def\MGL@quality{3}} \DeclareOption{4q}{\def\MGL@quality{4}} \DeclareOption{5q}{\def\MGL@quality{5}} \DeclareOption{6q}{\def\MGL@quality{6}} \DeclareOption{7q}{\def\MGL@quality{7}} \DeclareOption{8q}{\def\MGL@quality{8}} \DeclareOption{9q}{\def\MGL@quality{9}} \DeclareOption{0v}{\def\MGL@variant{0}} \DeclareOption{1v}{\def\MGL@variant{1}} \DeclareOption{2v}{\def\MGL@variant{2}} % \end{macrocode} % % \begin{macro}{\MGL@imgext} % The following options set the default graphics extension, which is stored in the |\MGL@imgext| macro for later use. % \begin{macrocode} \DeclareOption{eps}{\def\MGL@imgext{.eps}} \DeclareOption{epsz}{\def\MGL@imgext{.epsz}} \DeclareOption{epsgz}{\def\MGL@imgext{.eps.gz}} \DeclareOption{bps}{\def\MGL@imgext{.bps}} \DeclareOption{bpsz}{\def\MGL@imgext{.bpsz}} \DeclareOption{bpsgz}{\def\MGL@imgext{.bps.gz}} \DeclareOption{pdf}{\def\MGL@imgext{.pdf}} \DeclareOption{png}{\def\MGL@imgext{.png}} \DeclareOption{jpg}{\def\MGL@imgext{.jpg}} \DeclareOption{jpeg}{\def\MGL@imgext{.jpeg}} \DeclareOption{gif}{\def\MGL@imgext{.gif}} \DeclareOption{tex}{\def\MGL@imgext{.tex}} % \end{macrocode} % \end{macro} % % Any other option passed by the user is invalid, so an error message is issued. % \begin{macrocode} \DeclareOption*{\@unknownoptionerror} % \end{macrocode} % % We now declare the default package options, and, finally, process the options the user specifies in the order they are introduced. % \begin{macrocode} \ExecuteOptions{final,on,nocomments,color,1x,2q,0v,eps} \ProcessOptions* % \end{macrocode} % % \begin{macro}{\MGL@dir} % This is the \textsf{\mglTeX} main working directory. By default, it is defined to empty, so it points to the path of the \LaTeX{} document. % \begin{macrocode} \def\MGL@dir{} % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@scripts@dir} % The subdirectory inside |\MGL@dir| where all MGL scripts will be created. % \begin{macrocode} \def\MGL@scripts@dir{} % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@graphics@dir} % The subdirectory inside |\MGL@dir| where all MGL graphics will be created. % \begin{macrocode} \def\MGL@graphics@dir{} % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@backups@dir} % The subdirectory inside |\MGL@dir| where all backups of scripts will be created. % \begin{macrocode} \def\MGL@backups@dir{} % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@paths} % This is a list of paths where extracted and external scripts will be searched for by the |\mglgraphics| and |\mglinclude| commands. Since extracted scripts are created inside |\MGL@dir\MGL@scripts@dir| and |\MGL@dir\MGL@backups@dir|, this directories are included. % \begin{macrocode} \def\MGL@paths{\MGL@dir\MGL@scripts@dir,\MGL@dir\MGL@backups@dir} % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@main@script@name} % \noindent This macro stores the name of the of the document's main script. It is initialized to the name of the \LaTeX{} document. % \begin{macrocode} \edef\MGL@main@script@name{\jobname} % \end{macrocode} % \end{macro} % % We set some additional staff that will be used later. % \begin{macro}{\MGL@main@stream} % The output stream for the document's main script. % \begin{macrocode} \newwrite\MGL@main@stream % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@out@stream} % The output stream for scripts other than the main one. % \begin{macrocode} \newwrite\MGL@out@stream % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@in@stream} % The input stream for scripts other than the main one. % \begin{macrocode} \newread\MGL@in@stream % \end{macrocode} % \end{macro} % \begin{macro}{MGL@script@no} % The internal counter used by environments like |mgl| and commands like |\mglplot| to automatically name scripts. % \begin{macrocode} \newcounter{MGL@script@no} % \end{macrocode} % \end{macro} % \begin{macro}{MGL@line@no} % The counter used for verbatim-like environments and commands to numerate the lines of code. % \begin{macrocode} \newcounter{MGL@line@no} % \end{macrocode} % \end{macro} % \begin{macro}{MGL@verb@no} % The counter used to numerate verbatim-written scripts with the |\listofmglscripts| command. % \begin{macrocode} \newcounter{MGL@verb@no} % \end{macrocode} % \end{macro} % \begin{macro}{\@MGL@list@script@} % The boolean switch used to determine whether to add a verbatim-written script to the \emph{list of MGL scripts}. % \begin{macrocode} \newif\if@MGL@list@script@ % \end{macrocode} % \end{macro} % \begin{macro}{\l@MGL@script} % The style for the leaders associating script name and page number in the \emph{list of MGL scripts}. % \begin{macrocode} \def\l@MGL@script{\@dottedtocline{1}{0em}{1.5em}} % \end{macrocode} % \end{macro} % % \textsf{\mglTeX} requires the \textsf{keyval} package to define \meta{key}=\meta{value} options for the environments and commands; the \textsf{graphicx} package apports the facilities for inclusion of graphics; the \textsf{ifpdf} package is used to determine whether the user is compiling to |pdf| or not when indicating the default graphics extensionsthe \textsf{verbatim} package is used as engine for the environments. % \begin{macrocode} \RequirePackage{keyval} \RequirePackage{graphicx} \RequirePackage{ifpdf} \RequirePackage{verbatim} % \end{macrocode} % % The supported graphic extensions are declared. These extensions depend on whether we are compiling to |pdf| or not, so the |\ifpdf| conditional from the homonym package is used. % \begin{macrocode} \ifpdf% \DeclareGraphicsExtensions{% .pdf,.png,.jpg,.jpeg,.gif% }% \else% \DeclareGraphicsExtensions{% .eps,.epsz,.eps.gz,.bps,.bpsz,.bps.gz% }% \fi% % \end{macrocode} % Finally, the |\verbatim@finish| command from the \textsf{verbatim} package is disabled to avoid it from writing a blank line at the end of every script (see subsection~\ref{subsection: warning}). % \begin{macrocode} \let\verbatim@finish\relax % \end{macrocode} % % \subsection{Anatomy of environments and commands}\label{subsection: anatomy} % \noindent Many of the environments and commands defined by \textsf{\mglTeX} are based on the same pieces of code. So, in order to avoid repetition of commands, we use the concept of \emph{anatomy of environments and commands}, which is basically the idea of taking repetitive pieces of code and enclose them into macros which can later be used. % % \begin{macro}{\MGL@setkeys} % This command receives two arguments: a family of \meta{key}=\meta{value} pairs, like |MGL@keys|, and a list of such pairs. It first cleans the |\MGL@graph@keys| macro, and the process the list of pairs. % \begin{macrocode} \def\MGL@setkeys#1#2{% \def\MGL@graph@keys{}% \setkeys{#1}{#2}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@graph@keys} % The main family of \meta{key}=\meta{value} pairs is defined. These pairs are common to every environment or command that produces graphics. Most of the \meta{key}'s are redefinitions of the optional arguments for the |\includegraphics| commands, so they are stored inside the |\MGL@graph@keys| macro, which is later passed to that command as optional argument by |\MGL@includegraphics|. % \begin{macrocode} \define@key{MGL@gr@keys}{bb}{% \g@addto@macro\MGL@graph@keys{bb=#1,}% } \define@key{MGL@gr@keys}{bbllx}{% \g@addto@macro\MGL@graph@keys{bbllx=#1,}% } \define@key{MGL@gr@keys}{bblly}{% \g@addto@macro\MGL@graph@keys{bblly=#1,}% } \define@key{MGL@gr@keys}{bburx}{% \g@addto@macro\MGL@graph@keys{bburx=#1,}% } \define@key{MGL@gr@keys}{bbury}{% \g@addto@macro\MGL@graph@keys{bbury=#1,}% } \define@key{MGL@gr@keys}{natwidth}{% \g@addto@macro\MGL@graph@keys{natwidth=#1,}% } \define@key{MGL@gr@keys}{natheight}{% \g@addto@macro\MGL@graph@keys{natheight=#1,}% } \define@key{MGL@gr@keys}{hiresbb}{% \g@addto@macro\MGL@graph@keys{hiresbb=#1,}% } \define@key{MGL@gr@keys}{viewport}{% \g@addto@macro\MGL@graph@keys{viewport=#1,}% } \define@key{MGL@gr@keys}{trim}{% \g@addto@macro\MGL@graph@keys{trim=#1,}% } \define@key{MGL@gr@keys}{angle}{% \g@addto@macro\MGL@graph@keys{angle=#1,}% } \define@key{MGL@gr@keys}{origin}{% \g@addto@macro\MGL@graph@keys{origin=#1,}% } \define@key{MGL@gr@keys}{width}{% \g@addto@macro\MGL@graph@keys{width=#1,}% } \define@key{MGL@gr@keys}{height}{% \g@addto@macro\MGL@graph@keys{height=#1,}% } \define@key{MGL@gr@keys}{totalheight}{% \g@addto@macro\MGL@graph@keys{totalheight=#1,}% } \define@key{MGL@gr@keys}{keepaspectratio}[true]{% \g@addto@macro\MGL@graph@keys{keepaspectratio=#1,}% } \define@key{MGL@gr@keys}{scale}{% \g@addto@macro\MGL@graph@keys{scale=#1,}% } \define@key{MGL@gr@keys}{clip}[true]{% \g@addto@macro\MGL@graph@keys{clip=#1,}% } \define@key{MGL@gr@keys}{draft}[true]{% \g@addto@macro\MGL@graph@keys{draft=#1,}% } \define@key{MGL@gr@keys}{type}{% \g@addto@macro\MGL@graph@keys{type=#1,}% } \define@key{MGL@gr@keys}{ext}{% \g@addto@macro\MGL@graph@keys{ext=#1,}% } \define@key{MGL@gr@keys}{read}{% \g@addto@macro\MGL@graph@keys{read=#1,}% } \define@key{MGL@gr@keys}{command}{% \g@addto@macro\MGL@graph@keys{command=#1,}% } % \end{macrocode} % \end{macro} % The following four \meta{key}=\meta{value} pairs call the adequate \textsf{\mglTeX} command. % \begin{macrocode} \define@key{MGL@gr@keys}{gray}[0]{\mglgray{#1}} \define@key{MGL@gr@keys}{mglscale}{\mglscale{#1}} \define@key{MGL@gr@keys}{quality}{\mglquality{#1}} \define@key{MGL@gr@keys}{variant}{\mglvariant{#1}} % \end{macrocode} % \begin{macro}{\MGL@imgext} % |\MGL@imgext| stores the default extension for the creation of the graphics. % \begin{macrocode} \define@key{MGL@gr@keys}{imgext}{\def\MGL@imgext{.#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@MGL@lineno@} % The only \meta{key}=\meta{value} pair needed for verbatim-like environments and commands is the one for the |lineno| option, which sets the value of the |\@MGL@lineno@| boolean macro. % \begin{macrocode} \newif\if@MGL@lineno@ \define@key{MGL@verb@keys}{lineno}[true]{\csname @MGL@lineno@#1\endcsname} % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@codes} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Bugfix: category code for tabulators is changed too} % This macro changes the category codes of all special characters (like |\|, |$|, etc.) to $12$ (other), so they don't have any special meaning and can be processed as normal text. The exception is the new line character (|^^M|), which is kept active for compatibility with the \textsf{verbatim} package. % \begin{macrocode} \def\MGL@codes{% \let\do\@makeother\dospecials% \catcode`\^^I=12% \catcode`\^^M\active% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@doc@scripts} % A macro to store the names of the scripts created or compiled in the document. % \begin{macrocode} \def\MGL@doc@scripts{} % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@set@script@name}\begin{macro}{\MGL@script} % |\MGL@set@script@name| receives the name of a script without extension as argument, defines |\MGL@script| as that name, and checks if it has already been created or compiled, by comparing it with the names already stored in |\MGL@doc@scripts|; if it's there already, warns the user. Finally, adds the name of the script to |\MGL@doc@scripts|. % \begin{macrocode} \def\MGL@set@script@name#1{% \edef\MGL@script{#1}% \@for\MGL@temp@a:=\MGL@doc@scripts\do{% \ifx\MGL@temp@a\MGL@script% \PackageWarning{mgltex}{Multiple MGL scripts named "\MGL@script.mgl"}% \fi% }% \g@addto@macro\MGL@doc@scripts{\MGL@script,}% } % \end{macrocode} % \end{macro}\end{macro} % % \begin{macro}{\MGL@unchanged} % This command defines the ``switch'' |\MGL@@@|\meta{script}, where \meta{script} is passed as argument, which indicates the script \meta{script}|.mgl| has not changed. This command has to be written to the |.aux| file to be preserved from compilation to compilation. % \begin{macrocode} \def\MGL@unchanged#1{% \global\@namedef{MGL@@@#1}{}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@process@script} % It checks whether the ``switch'' |\MGL@@@\MGL@script| is undefined, in which case executes its first argument. If the switch is defined, it checks if the corresponding image has been created; if so, it executes its second argument; otherwise, the first one. % \begin{macrocode} \def\MGL@process@script#1#2{% \@ifundefined{MGL@@@\MGL@script}{% #1% }{% \IfFileExists{\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext}{% #2% }{% #1% }% }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@def@for@loop}\begin{macro}{\MGL@for} % |\MGL@def@for@loop| defines the command |\MGL@for| which is similar to the |\@for| command from the \LaTeX{} kernel, with the only exception that, instead of iterating over comma-separated lists, it can iterate over lists of items with any kind of separator, which is passed as argument of |\MGL@def@for@loop|. The body of this command is copied from the definition code of |\@for|, extracted from \emph{The \LaTeXe{} Sources} document, replacing the ``|,|'' by ``|#1|''. Note that |\MGL@for| is used only by the |\mglplot| command, but it has been included as part of the \emph{anatomy of environments and commands} to keep cleanness because it is quite long code. % \begin{macrocode} \def\MGL@def@for@loop#1{% \long\def\MGL@for##1:=##2\do##3{% \expandafter\def\expandafter\@fortmp\expandafter{##2}% \ifx\@fortmp\@empty\else% \expandafter\MGL@forloop##2#1\@nil#1\@nil\@@##1{##3}% \fi% }% \long\def\MGL@forloop##1#1##2#1##3\@@##4##5{% \def##4{##1}% \ifx##4\@nnil\else% ##5\def##4{##2}% \ifx##4\@nnil\else% ##5\MGL@iforloop##3\@@##4{##5}% \fi% \fi% }% \long\def\MGL@iforloop##1#1##2\@@##3##4{% \def##3{##1}% \ifx##3\@nnil% \expandafter\@fornoop% \else% ##4\relax\expandafter\MGL@iforloop% \fi% ##2\@@##3{##4}% }% } % \end{macrocode} % The default |\MGL@for| loop iterates over |^^J|-separated lists, i.e, \meta{new line}-character-lists. % \begin{macrocode} \MGL@def@for@loop{^^J} % \end{macrocode} % \end{macro}\end{macro} % % \begin{macro}{\MGL@compare@code} % |\MGL@compare@code| is in charge of comparing the user's MGL code, embedded within \textsf{\mglTeX} environments, with its corresponding extracted script. For that purpose, the |\verbatim@processline| and |\verbatim@finish| commands from the \textsf{verbatim} package are redefined. % \begin{macrocode} \def\MGL@compare@code#1{% % \end{macrocode} % \begin{macro}{\MGL@next} % This macro is called at the end of environments that use the |\MGL@compare@code| macro, and performs the ending actions of the comparision process, which are closing the |\MGL@in@stream| and writing the |\MGL@unchanged{\MGL@script}| to the |.aux| file. If during the comparison process a difference in the code is found, |\MGL@next| is redefined to only close the |\MGL@in@stream|. % \begin{macrocode} \def\MGL@next{% \MGL@closein\MGL@in@stream% \MGL@write\@auxout{\string\MGL@unchanged{\MGL@script}}% }% % \end{macrocode} % \end{macro} % The |\verbatim@processline| command is redefined to read from the input stream to a temporary variable (|\MGL@temp@a|), and compare it with one line of code in the \LaTeX{} document, which is stored in another temporary variable (|\MGL@temp@b|). In case they are not equal, the |\MGL@next| macro is redefined to only close the input stream, and |\verbatim@processline| is redefine again to do nothing (a little speed-up). % \begin{macrocode} \def\verbatim@processline{% \MGL@read\MGL@in@stream{\MGL@temp@a}% \edef\MGL@temp@b{\the\verbatim@line}% \ifx\MGL@temp@a\MGL@temp@b\else% \def\MGL@next{\MGL@closein\MGL@in@stream}% \def\verbatim@processline{}% \fi% }% % \end{macrocode} % The |\verbatim@finish| macro, which is called at the end of the environment, is also redefined to perform one last read of the input stream, and then check if the end of file has been reached; if it hasn't, then, despite the end of the environment has been reached ---thus the end of code---, there is still code inside the script, so there are differences between them, and |\MGL@next| has to be redefined to do nothing but close the input stream. % \begin{macrocode} \def\verbatim@finish{% \MGL@read\MGL@in@stream{\MGL@temp@a}% \ifeof\MGL@in@stream\else% \def\MGL@next{\MGL@closein\MGL@in@stream}% \fi% }% % \end{macrocode} % Finally, the input stream is opened, and the comparison is started by calling |\verbatim@start|. % \begin{macrocode} \MGL@openin\MGL@in@stream{#1}% \verbatim@start% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@write@funcs} % This macro is used only by the |mglfunc| environment. Its only purpose is to store the commands to insert MGL functions in the main script, and is called at the end of the document or when the |\mglname| command is used. For now, we only ask it to write the |stop| command\footnote{Note the |stop| command is unnecesary in newer versions of the MGL language, but it is kept in \textsf{\mglTeX} for compatibility and for elegance.} that separates the section of scripts from the section of functions in the main script. % \begin{macrocode} \def\MGL@write@funcs{\MGL@write\MGL@main@stream{stop^^J}} % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@func} % This is the command that writes the MGL functions. It is intended to be stored inside |\MGL@write@funcs|. It opens the backup file of the MGL function whose name is passed as argument (and has been created by a |mglfunc| environment), and then calls |\MGL@@func| to transcript from that file, line by line, to the main script. % \begin{macrocode} \def\MGL@func#1{% \MGL@openin\MGL@in@stream{\MGL@dir\MGL@backups@dir#1.mgl}% \MGL@@func% } % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@@func} % This command transcripts only one line from backup file of a MGL function to the main script. It calls itself recursively until the end of the backup. % \begin{macrocode} \def\MGL@@func{% % \end{macrocode} % It first reads from the input stream to the |\MGL@temp@a| temporary variable. % \begin{macrocode} \MGL@read\MGL@in@stream{\MGL@temp@a}% % \end{macrocode} % If the end of the file has been reached, the stream is closed. % \begin{macrocode} \ifeof\MGL@in@stream% \MGL@closein\MGL@in@stream% % \end{macrocode} % If the end of file hasn't been reached, |\MGL@temp@a| is written to the main script, and |\MGL@@func| is called recursively. % \begin{macrocode} \else% \MGL@write\MGL@main@stream{\MGL@temp@a}% \expandafter\MGL@@func% \fi% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@set@verbatim@code} % This command sets the parameters for verbatim-like environments and commands. % \begin{macrocode} \def\MGL@set@verbatim@code{% % \end{macrocode} % The following is standard stuff for verbatim-like environments and commands. % \begin{macrocode} \if@minipage\else\vskip\parskip\fi% \leftskip\@totalleftmargin\rightskip\z@skip% \parindent\z@\parfillskip\@flushglue\parskip\z@% \@@par% \def\par{% \if@tempswa% \leavevmode\null\@@par\penalty\interlinepenalty% \else% \@tempswatrue% \ifhmode\@@par\penalty\interlinepenalty\fi% \fi% }% \obeylines% \let\do\@makeother\dospecials% \verbatim@font% \frenchspacing% \everypar\expandafter{\the\everypar\unpenalty}% % \end{macrocode} % If there are no lines of MGL code, instead of issuing an error, we display a package warning. % \begin{macrocode} \def\@noitemerr{\PackageWarning{mglTeX}{Empty MGL script}}% % \end{macrocode} % The space between the end of the label box and the text of the first item (|\labelsep|) is set to |1em|, while the separation between items (|\itemsep|) is set to zero. % \begin{macrocode} \labelsep1em% \itemsep\z@% % \end{macrocode} % Since we want the lines of code to be broken between words, but verbatim spaces are unbreakable, we trick \LaTeX{} by inserting a breakable spaces (|\space|) instead. % \begin{macrocode} \def\@xobeysp{\space}\@vobeyspaces% % \end{macrocode} % However, \LaTeX{} still resists breaking lines as much as possible in order to preserve the shape of paragraphs, so we tell it it's OK not to do so by setting the badness tolerance before hyphenation (|\pretolerance|) and the badness above which bad hboxes will be shown (|\hbadness|) to the maximum value of $10000$ (|\@M|). % \begin{macrocode} \pretolerance\@M% \hbadness\@M% % \end{macrocode} % In order to achieve the desired indentation of broken lines, we use the following trick: We increase the |\leftskip| parameter by the amount specified by |\mglbreakindent|, so that lines will be indented; but then we decrease the |\itemindent| parameter by the same amount so the first line won't be indented. % \begin{macrocode} \advance\leftskip\mglbreakindent% \itemindent-\mglbreakindent% } % \end{macrocode} % \end{macro} % % \begin{macro}{\MGL@line@sep} % This is the separator displayed at the beginning and ending of the |mglblock| and |mglverbatim| environments, to distinguish the MGL code from the normal text. Its definition is similar to the one of the |\dotfill| command, which can be found in \emph{The \LaTeXe{} Sources} document, but |\nopagebreak| commands have been added to avoid unaesthetic page breaking before and after the separators. % \begin{macrocode} \def\MGL@line@sep{% \nopagebreak% \leavevmode\cleaders\hrule height\mgllinethickness\hfill\kern\z@% \nopagebreak% } % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@dash@sep} % This is the separator displayed at the beginning and ending of the |mglcomments| environment, when it is allowed to be displayed. % \begin{macrocode} \def\MGL@dash@sep{% \nopagebreak% \leavevmode\cleaders\hb@xt@\mgldashwidth{\hss-\hss}\hfill\kern\z@% \nopagebreak% } % \end{macrocode} % \end{macro} % % \subsection{Environments for MGL code embedding} % \noindent For the following, we agree that if a macro is required by an environment, and it hasn't been already defined, it will be defined between the commands that start and end such environment; also the command's name will have the environment's name as prefix. % % \begin{environment}{mgl} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New environment options: \texttt{gray}, \texttt{mglscale}, \texttt{quality}, \texttt{variant}} % This environment has to transcript its contents to the document's main script, and create a backup of the code simultaneously; the backup is used to detect changes in following compilations. % \begin{macro}{\mgl} % The command that starts the |mgl| environment. It is called by the |\begin{mgl}| command. % \begin{macrocode} \newcommand\mgl[1][]{% % \end{macrocode} % We define an additional \meta{key}=\meta{value} pair in the main family of pairs, corresponding to the |label| option for this environment. This definition is local because we don't want to be valid outside the environment. % \begin{macrocode} \define@key{MGL@gr@keys}{label}{\def\MGL@script{##1}}% % \end{macrocode} % The list of comma-separated options is processed. % \begin{macrocode} \MGL@setkeys{MGL@gr@keys}{#1}% % \end{macrocode} % If the user hasn't used the |label| option, the automatic naming mechanism is called. Note that |\MGL@main@script@name| is set using the |\mglname| command. % \begin{macrocode} \@ifundefined{MGL@script}{% \stepcounter{MGL@script@no}% \edef\MGL@script{\MGL@main@script@name-MGL-\arabic{MGL@script@no}}% }{}% % \end{macrocode} % We use the |\MGL@set@script@name| to test whether the given name has already been used. % \begin{macrocode} \MGL@set@script@name{\MGL@script}% % \end{macrocode} % |\MGL@codes| is used to change the codes of special characters. % \begin{macrocode} \MGL@codes% % \end{macrocode} % |\MGL@process@script| is used to test whether the code has changed or not the last time \LaTeX{} has been executed. If it has changed, we call the |\MGL@write@script| command to (re)write the code; otherwise, the code is scanned again by asking |\MGL@compare@code| to perform a comparison on the backup file, in order to determine whether the code has changed now. % \begin{macrocode} \MGL@process@script{% \MGL@write@script% }{% \MGL@compare@code{\MGL@dir\MGL@backups@dir\MGL@script.mgl}% }% } % \end{macrocode} % \end{macro} % \begin{macro}{\MGL@write@script} % (Re)writes the contents of the |mgl| environment. % \begin{macrocode} \def\MGL@write@script{% % \end{macrocode} % \begin{macro}{\MGL@next} % It contains the actions to perform immediately after the end of |\MGL@write@script|. They are close the output stream; write in the main script the commands to save the image, and to reset the initial values for all MGL parameters and clear the image; finally, write |\MGL@unchanged{\MGL@script}| in the |.aux| file. % \begin{macrocode} \def\MGL@next{% \MGL@closeout\MGL@out@stream% \MGL@write\MGL@main@stream{% write '\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext'^^J% ^^Jreset^^J% }% \MGL@write\@auxout{\string\MGL@unchanged{\MGL@script}}% }% % \end{macrocode} % \end{macro} % Now we redefine the |\verbatim@processline| macro to write |\the\verbatim@line| to the main script and to the backup file. % \begin{macrocode} \def\verbatim@processline{% \MGL@write\MGL@main@stream{\the\verbatim@line}% \MGL@write\MGL@out@stream{\the\verbatim@line}% }% % \end{macrocode} % Before writing the MGL code of the environment, we set the default gray/color mode, mglscale, quality and variant. % \begin{macrocode} \MGL@write\MGL@main@stream{% gray \MGL@gray^^J% setsizescl \MGL@scale^^J% quality \MGL@quality^^J% variant \MGL@variant% }% % \end{macrocode} % We open the backup file in the output stream. % \begin{macrocode} \MGL@openout\MGL@out@stream{\MGL@dir\MGL@backups@dir\MGL@script.mgl}% % \end{macrocode} % The transcription process starts by calling the |\verbatim@start| command. % \begin{macrocode} \verbatim@start% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmgl} % The command that ends the |mgl| evironment. It is called by the |\end{mgl}| command. It simply calls |\MGL@next| to execute the final actions, and |\MGL@includegraphics| to insert the corresponding image. Note that |\MGL@next| performs different actions depending on whether |\MGL@process@script| calls |\MGL@write@script| or |\MGL@compare@code|, both of which define |\MGL@next| differently. % \begin{macrocode} \def\endmgl{% \MGL@next% \MGL@includegraphics% } % \end{macrocode} % \end{macro} % \end{environment} % % \begin{environment}{mgladdon} % This environment only writes its contents to the document's main script, so no backup is created, nor compilation or inclusion of graphics. % \begin{macro}{\mgladdon} % Since this environment doesn't produce any output in the \LaTeX{} document, we start a \emph{space hack} by calling |\@bsphack|. We set the appropiate category codes with |\MGL@codes|; the |\verbatim@processline| is redefined to transcript |\the\verbatim@line| to the main script; finally, the |\verbatim@start| command starts the transcription process. % \begin{macrocode} \def\mgladdon{% \@bsphack% \MGL@codes% \def\verbatim@processline{% \MGL@write\MGL@main@stream{\the\verbatim@line}% }% \verbatim@start% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmgladdon} % The environment ends by closing the \emph{space hack} with |\@esphack|. % \begin{macrocode} \def\endmgladdon{\@esphack} % \end{macrocode} % \end{macro} % \end{environment} % % \begin{environment}{mglfunc} % This environment is used to define MGL functions inside the document's main script. Instead of writing directly to the main script, which would cause the MGL parser to end the execution of that script, it writes to a backup file which is later transcript before closing the main script. % \begin{macro}{\mglfunc} % It starts the |mglfunc| environment. % \begin{macrocode} \newcommand\mglfunc[2][0]{% % \end{macrocode} % Once again, since this command doesn't produce any output in the \LaTeX{} document, we use a \emph{space hack}. % \begin{macrocode} \@bsphack% % \end{macrocode} % Although MGL functions and normal scripts are diferent in nature, in the sense that the first don't produce graphics by themselves, we have to check whether the function is being named as another script, because otherwise we run the risk of overwriting a backup file or confusing the parser. % \begin{macrocode} \MGL@set@script@name{#2}% % \end{macrocode} % The instruction to transcript from the backup file to the main stream is stored in |\MGL@write@funcs| (see subsection \ref{subsection: anatomy}). % \begin{macrocode} \g@addto@macro\MGL@write@funcs{\MGL@func{#2}}% % \end{macrocode} % The codes for special characters are set. % \begin{macrocode} \MGL@codes% % \end{macrocode} % The |\verbatim@processline| command is redefined to write |\the\verbatim@line| to the backup file. % \begin{macrocode} \def\verbatim@processline{\MGL@write\MGL@out@stream{\the\verbatim@line}}% % \end{macrocode} % The backup file is opened for writing. % \begin{macrocode} \MGL@openout\MGL@out@stream{\MGL@dir\MGL@backups@dir\MGL@script.mgl}% % \end{macrocode} % The head of the function is written. % \begin{macrocode} \MGL@write\MGL@out@stream{func '\MGL@script' #1}% % \end{macrocode} % The writing process is started. % \begin{macrocode} \verbatim@start% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglfunc} % It ends the |mglfunc| environment. % \begin{macrocode} \def\endmglfunc{% % \end{macrocode} % The end of the function is written. % \begin{macrocode} \MGL@write\MGL@out@stream{return^^J}% % \end{macrocode} % The output stream is closed. % \begin{macrocode} \MGL@closeout\MGL@out@stream% % \end{macrocode} % The \emph{space hack} is terminated. % \begin{macrocode} \@esphack% }% % \end{macrocode} % \end{macro} % \end{environment} % % \begin{environment}{mglcode} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New environment options: \texttt{gray}, \texttt{mglscale}, \texttt{quality}, \texttt{variant}} % This environment also checks for changes on the code, but, since it writes to its own script, there is no need to create a backup file (the check is performed using the script itself). % \begin{macro}{\mglcode} % It starts the |mglcode| environment. Its anatomy is similar to that of the |\mgl| command. % \begin{macrocode} \newcommand\mglcode[2][]{% \MGL@setkeys{MGL@gr@keys}{#1}% \MGL@set@script@name{#2}% \MGL@codes% \MGL@process@script{% \mglcode@write@script% }{% \MGL@compare@code{\MGL@dir\MGL@scripts@dir\MGL@script.mgl}% }% } % \end{macrocode} % \end{macro} % \begin{macro}{\mglcode@write@script} % This command takes care of creating the script for the |mglcode| environment. % \begin{macrocode} \def\mglcode@write@script{% % \end{macrocode} % \begin{macro}{\MGL@next} % It performs the actions immediately following the end of |\mglcode@write@script|. % \begin{macrocode} \def\MGL@next{% % \end{macrocode} % The output stream is closed. % \begin{macrocode} \MGL@closeout\MGL@out@stream% % \end{macrocode} % The |\MGL@unchanged{\MGL@script}| command is written to the |.aux| file. % \begin{macrocode} \MGL@write\@auxout{\string\MGL@unchanged{\MGL@script}}% % \end{macrocode} % The script compilation instruction is written to the terminal. % \begin{macrocode} \MGL@write{18}{% mglconv -q \MGL@quality\space -g \MGL@gray\space% -S \MGL@scale\space -v \MGL@variant\space% -s "\MGL@dir\MGL@scripts@dir\mglsetupscriptname.mgl"\space% -o "\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext"\space% "\MGL@dir\MGL@scripts@dir\MGL@script.mgl"% }% }% % \end{macrocode} % \end{macro} % The |\verbatim@processline| command is redefined so it writes |\the\verbatim@line| to the output stream. % \begin{macrocode} \def\verbatim@processline{\MGL@write\MGL@out@stream{\the\verbatim@line}}% % \end{macrocode} % The script is opened for writing in the output stream. % \begin{macrocode} \MGL@openout\MGL@out@stream{\MGL@dir\MGL@scripts@dir\MGL@script.mgl}% % \end{macrocode} % The writing process is started by calling the |\verbatim@start| command. % \begin{macrocode} \verbatim@start% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglcode} % It ends the |mglcode| environment. |\MGL@next| is called to perform the final actions and |\MGL@includegraphics| is called to insert the corresponding image. Once more, |\MGL@next| has different meanings depending on whether |\MGL@process@script| branches to |\MGL@compare@code| or |\mglcode@write@script|. % \begin{macrocode} \def\endmglcode{% \MGL@next% \MGL@includegraphics% } % \end{macrocode} % \end{macro} % \end{environment} % \begin{environment}{mglscript} % The only function of this environment is to write its contents to a script; no image is created. It has been considered that scanning the code looking for changes is as much operation-expensive as simply writing the code, so it has been decided that this environment (over)writes the script everytime it's executed, without performing any check. % \begin{macro}{\mglscript} % Starts the environment. Its anatomy is similar to the previous environments. Since no output is written to the \LaTeX{} document, a \emph{space hack} is used. % \begin{macrocode} \def\mglscript#1{% \@bsphack% \MGL@set@script@name{#1}% \MGL@codes% \def\verbatim@processline{\MGL@write\MGL@out@stream{\the\verbatim@line}}% \MGL@openout\MGL@out@stream{\MGL@dir\MGL@scripts@dir\MGL@script.mgl}% \verbatim@start% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglscript} % It ends the |mglscript| environment. The \emph{space hack} ends here, too. % \begin{macrocode} \def\endmglscript{% \MGL@closeout\MGL@out@stream% \@esphack% } % \end{macrocode} % \end{macro} % \end{environment} % % \begin{environment}{mglsetupscript}\begin{environment}{mglcommon} % This environment doesn't require any backup file nor any scanning for changes. Although the user sets the name of the script by redifining |\mglsetupscriptname|, it is necessary to perform a check of the name, just in case a name has been inadvertedly repeated. % \begin{macro}{\mglsetupscript} % Starts the |mglsetupscript| environment. % \begin{macrocode} \def\mglsetupscript{% \@bsphack% \MGL@set@script@name{\mglsetupscriptname}% \MGL@codes% \def\verbatim@processline{\MGL@write\MGL@out@stream{\the\verbatim@line}}% \MGL@openout\MGL@out@stream{\MGL@dir\MGL@scripts@dir\MGL@script.mgl}% \verbatim@start% } % \end{macrocode} % It is declared to be an only-preamble command, so it can't be used after the |\begin{document}| instruction. % \begin{macrocode} \@onlypreamble\mglsetupscript % \end{macrocode} % \end{macro} % \begin{macro}{\mglcommon} % This macro is defined to be a synonym for |\mglcommon| (to keep backwards compatibility). % \begin{macrocode} \let\mglcommon\mglsetupscript \@onlypreamble\mglcommon % \end{macrocode} % \end{macro} % \begin{macro}{\endmglsetupscript} % It ends the |mglsetupscript| environment. % \begin{macrocode} \def\endmglsetupscript{% \MGL@closeout\MGL@out@stream% \@esphack% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglcommon} % It is defined to be a synonym for |\endmglsetupscript|. % \begin{macrocode} \let\endmglcommon\endmglsetupscript % \end{macrocode} % \end{macro} % \end{environment}\end{environment} % % \subsection{Fast creation of graphics} % \begin{environment}{mglsetup} % This environment is meant to contain code that is executed just before the instruction of a |\mglplot| command, producing always the same ouput. Instead of writing a new chunk of code for that purpose, |mglsetup| is defined as a special case of the |mglfunc| environment, with the exception that the MGL function obtained this way doesn't accept any argument ---thus producing always the same output. % \begin{macro}{\mglsetup} % It is defined as an alias for |\mglfunc|, but only the name of the MGL function is passed to it, forcing the assumption that its number of arguments is zero. % \begin{macrocode} \def\mglsetup#1{\mglfunc{#1}}% % \end{macrocode} % \end{macro} % \begin{macro}{\endmglsetup} % Likewise, it is defined as an alias for |\endmglfunc|. % \begin{macrocode} \let\endmglsetup\endmglfunc % \end{macrocode} % \end{macro} % \end{environment} % % \begin{macro}{\mglplot} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Added \doccommand{bgroup} and \doccommand{egroup} in order to keep changes private} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New command options: \texttt{gray}, \texttt{mglscale}, \texttt{quality}, \texttt{variant}} % Although the function of this command is quite simple and straightforward, it requires many lines of code and some tricks in order to reach the desired functionality. % \begin{macrocode} \newcommand\mglplot[2][]{% % \end{macrocode} % Since this is a command, we need to explicitly create a local group so that all changes keep private to the command.\footnote{In contrast, environments keep changes private by default.} % \begin{macrocode} \bgroup% % \end{macrocode} % We add some \meta{key}=\meta{value} pairs locally. The |label| key works exactly as the one of the |mgl| environment. % \begin{macrocode} \define@key{MGL@gr@keys}{label}{\edef\MGL@script{##1}}% % \end{macrocode} % The |setup| key defines the variable |\MGL@mglplot@setup| which is later used to call a setup function for the corresponding image. % \begin{macrocode} \define@key{MGL@gr@keys}{setup}{\def\MGL@mglplot@setup{##1}}% % \end{macrocode} % The |separator| key uses the |\MGL@def@for@loop| to define |\MGL@for| so that it iterates over lists separated by the indicated separator symbol. % \begin{macrocode} \define@key{MGL@gr@keys}{separator}{\MGL@def@for@loop{##1}}% % \end{macrocode} % Now, we process the keys passed by the user. % \begin{macrocode} \MGL@setkeys{MGL@gr@keys}{#1}% % \end{macrocode} % If the user hasn't specified a name using the |label| option, then a name is autogenerated following the same naming mechanism of the |mgl| environment. % \begin{macrocode} \@ifundefined{MGL@script}{% \stepcounter{MGL@script@no} \edef\MGL@script{\MGL@main@script@name-MGL-\arabic{MGL@script@no}} }{}% % \end{macrocode} % The name of the script is checked. % \begin{macrocode} \MGL@set@script@name{\MGL@script}% % \end{macrocode} % If the user hasn't specified a setup, then the only code that has to be written is the non-optional argument of |\mglplot|; it is stored in the temporary variable |\MGL@temp@a|. % \begin{macrocode} \@ifundefined{MGL@mglplot@setup}{% \edef\MGL@temp@a{#2}% }{% % \end{macrocode} % If the user has specified a setup, we store the code to call the setup and the code passed by the user in the temporary variable |\MGL@temp@a|. % \begin{macrocode} \edef\MGL@temp@a{call '\MGL@mglplot@setup'^^J#2}% } % \end{macrocode} % If the code has changed the last time \LaTeX{} has been run, we call |\mglplot@write@script| to (re)write and (re)compile the script; otherwise, we call |\mglplot@compare@code| to check if it has changed this time. % \begin{macrocode} \MGL@process@script{% \mglplot@write@script% }{% \mglplot@compare@code% }% % \end{macrocode} % The corresponding image is included in the document. % \begin{macrocode} \MGL@includegraphics% % \end{macrocode} % Finally, the local group is closed. % \begin{macrocode} \egroup% } % \end{macrocode} % \begin{macro}{\mglplot@write@script} % This command takes the code stored in the |\MGL@temp@a| variable by the |\mglplot| command and writes it to the document's main script and to a backup file, so changes in the code can be detected. % \begin{macrocode} \def\mglplot@write@script{% % \end{macrocode} % The default quality is written to the main script. % \begin{macrocode} \MGL@write\MGL@main@stream{% gray \MGL@gray^^J% setsizescl \MGL@scale^^J% quality \MGL@quality^^J% variant \MGL@variant% }% % \end{macrocode} % The backup file is opened to write in the output stream. % \begin{macrocode} \MGL@openout\MGL@out@stream{\MGL@dir\MGL@backups@dir\MGL@script.mgl}% % \end{macrocode} % Now we use the |\MGL@for| command to iterate over |\MGL@temp@a|. It takes a piece of code up to the separator symbol indicated by the user, and stores it in the temporary variable |\MGL@temp@b|, which is then written to the main script and backup file. % \begin{macrocode} \MGL@for\MGL@temp@b:=\MGL@temp@a\do{% \MGL@write\MGL@main@stream{\MGL@temp@b}% \MGL@write\MGL@out@stream{\MGL@temp@b}% }% % \end{macrocode} % The output stream is closed. % \begin{macrocode} \MGL@closeout\MGL@out@stream% % \end{macrocode} % The instructions to save the image and reset the MGL parameters are written to the main script. % \begin{macrocode} \MGL@write\MGL@main@stream{% write '\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext'^^J% ^^Jreset^^J% }% % \end{macrocode} % Finally, |\MGL@unchanged{\MGL@script}| is written to the |.aux| file. % \begin{macrocode} \MGL@write\@auxout{\string\MGL@unchanged{\MGL@script}}% } % \end{macrocode} % \end{macro} % \begin{macro}{\mglplot@compare@code} % This macro is in charge of comparing the code from a |\mglplot| command to detect changes. % \begin{macrocode} \def\mglplot@compare@code{% % \end{macrocode} % The action that will finish this command is, for now, to write |\MGL@unchanged{\MGL@script}| in the |.aux| file; it is stored in the |\MGL@next| variable. If no changes in the code are found, this will remain as the last action; otherwise, it will be overwritten to do nothing. % \begin{macrocode} \def\MGL@next{\MGL@write\@auxout{\string\MGL@unchanged{\MGL@script}}}% % \end{macrocode} % The backup file is opened for reading in the input stream. % \begin{macrocode} \MGL@openin\MGL@in@stream{\MGL@dir\MGL@backups@dir\MGL@script.mgl}% % \end{macrocode} % Once again, the |\MGL@for| command is used to iterate over the |\MGL@temp@a| variable defined by |\mglplot|. Pieces of code are taken up to the appearance of the separator symbol indicated by the user. In every iteration, the corresponding piece of code is stored in the |\MGL@temp@b| variable, one line of code is read from the input stream to the variable |\MGL@temp@c|, and these two are compared; if they are different, we redefined |\MGL@next| to do nothing. % \begin{macrocode} \MGL@for\MGL@temp@b:=\MGL@temp@a\do{% \MGL@read\MGL@in@stream{\MGL@temp@c}% \ifx\MGL@temp@b\MGL@temp@c\else% \let\MGL@next\relax% \fi% }% % \end{macrocode} % The input stream is closed. % \begin{macrocode} \MGL@closein\MGL@in@stream% % \end{macrocode} % |\MGL@next| is executed. % \begin{macrocode} \MGL@next% } % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Verbatim-like environments} % \begin{environment}{mglblock} % \begin{environment}{mglblock*} % The main body of these environments is the same; the only difference is that the unstarred version creates an entry in the |\listofmglscripts|, while the starred version doesn't. % \begin{macro}{\mglblock} % This command defines the switch |\@MGL@list@script@| as true, so a |\listofmglscripts| entry for the code is created, then calls the main body of the environment (|\mglblock@|). % \begin{macrocode} \def\mglblock{\@MGL@list@script@true\mglblock@} % \end{macrocode} % \end{macro} % \begin{macro}{\mglblock*} % This command defines the switch |\@MGL@list@script@| as false, so no |\listofmglscripts| entry is created, then calls the main body of the environment (|\mglblock@|). % \begin{macrocode} \@namedef{mglblock*}{\@MGL@list@script@false\mglblock@} % \end{macrocode} % \end{macro} % \begin{macro}{\mglblock@} % This macro contains the real functionality of the |mglblock| and |mglblock*| environments. It is the common code they both have. % \begin{macrocode} \newcommand\mglblock@[2][]{% % \end{macrocode} % First, the switch |\@MGL@lineno@| is set to true, so the lines of code will be numbered by default. % \begin{macrocode} \@MGL@lineno@true% % \end{macrocode} % Now we process the decision of the user of keeping the line numbering or not. % \begin{macrocode} \setkeys{MGL@verb@keys}{#1}% % \end{macrocode} % The name of the script is checked for repetition. % \begin{macrocode} \MGL@set@script@name{#2}% % \end{macrocode} % If the switch |\@MGL@list@script@| is true, we increase the counter for verbatim code (|MGL@verb@no|), and add a contents line to the |.lms| file, using the style set by |\l@MGL@script|. In order to be able to use special characters in the name of the script, we use the |\detokenize| primitive. % \begin{macrocode} \if@MGL@list@script@% \refstepcounter{MGL@verb@no}% \addcontentsline{lms}{MGL@script}{% \protect\numberline{\theMGL@verb@no.}% {\ttfamily\protect\detokenize{\MGL@script.mgl}}% }% \fi% % \end{macrocode} % If the switch |\@MGL@lineno@| is true, we create a list such that each item will be labeled or numbered by the |MGL@lineno| counter. The style for the label is set by |\mgllinenostyle|. % \begin{macrocode} \if@MGL@lineno@% \list{\mgllinenostyle\arabic{MGL@line@no}.}{\usecounter{MGL@line@no}}% % \end{macrocode} % Otherwise, we create a list without labeling for the items. % \begin{macrocode} \else% \list{}{}% \fi% % \end{macrocode} % The parameters for the environment are set. % \begin{macrocode} \MGL@set@verbatim@code% % \end{macrocode} % The thickness of the box that will contain the name of the script has to be the same as the thickness for the separation line at the begining of the verbatim code. % \begin{macrocode} \fboxrule=\mgllinethickness% % \end{macrocode} % The separator to indicate the begining of the verbatim code is positioned; we use the |\MGL@line@sep| command to draw it. % \begin{macrocode} \item[\MGL@line@sep]\fbox{% \bfseries\ttfamily\expandafter\detokenize\expandafter{\MGL@script.mgl}% }\hskip\labelsep\MGL@line@sep\par\par% % \end{macrocode} % The |\verbatim@processline| is redefined to put |\the\verbatim@line| in an item of the list, and to to also write it to the script file. % \begin{macrocode} \def\verbatim@processline{% \item\the\verbatim@line% \MGL@write\MGL@out@stream{\the\verbatim@line}% }% % \end{macrocode} % The script file is opened for writing. % \begin{macrocode} \MGL@openout\MGL@out@stream{\MGL@dir\MGL@scripts@dir\MGL@script.mgl}% % \end{macrocode} % The writing process starts. % \begin{macrocode} \verbatim@start% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglblock} % To finish the environment's work, the script file is closed, the separator indicating the end of the verbatim code is placed, and the list is ended. % \begin{macrocode} \def\endmglblock{% \MGL@closeout\MGL@out@stream% \item[\MGL@line@sep]\hskip-\labelsep\MGL@line@sep% \endlist% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglblock*} % It is defined as an alias for |\endmglblock|. % \begin{macrocode} \expandafter\let\csname endmglblock*\endcsname\endmglblock % \end{macrocode} % \end{macro} % \end{environment} % \end{environment} % % \begin{environment}{mglverbatim} % \begin{environment}{mglverbatim*} % These two environments have the same main body. They difference in that the unstarred version creates an entry for the |\listofmglscripts|, while the starred version doesn't. We will apply a similar approach to the used for the |mglblock| and |mglblock*| environments. % \begin{macro}{\mglverbatim} % Similar in function to |\mglblock|. % \begin{macrocode} \def\mglverbatim{\@MGL@list@script@true\mglverbatim@} % \end{macrocode} % \end{macro} % \begin{macro}{\mglverbatim} % Similar in function to |\mglblock*|. % \begin{macrocode} \@namedef{mglverbatim*}{\@MGL@list@script@false\mglverbatim@} % \end{macrocode} % \end{macro} % \begin{macro}{\mglverbatim@} % The main body of these environments; it's similar to |\mglblock@|. To explain each line of this command would be repetitive, so we explain only the different parts. % \begin{macrocode} \newcommand\mglverbatim@[1][]{% \@MGL@lineno@true% \define@key{MGL@verb@keys}{label}{\edef\MGL@script{##1}}% \setkeys{MGL@verb@keys}{#1}% \if@MGL@lineno@% \list{\mgllinenostyle\arabic{MGL@line@no}.}{\usecounter{MGL@line@no}}% \else% \list{}{}% \fi% \MGL@set@verbatim@code% \fboxrule=\mgllinethickness% % \end{macrocode} % The separator that indicates the begining of the verbatim code is different depending on whether the user has specified a name associated to the code or not. If no name has been indicated, i.e., |\MGL@script| is undefined, the separator is just a line; otherwise, i.e., |\MGL@script| is defined, the separator is similar to the one of the |mglblock| environment. % \begin{macrocode} \@ifundefined{MGL@script}{% \edef\MGL@script{\mglverbatimname}% \item[\MGL@line@sep]\hskip-\labelsep\MGL@line@sep% }{% \item[\MGL@line@sep]\fbox{% \bfseries\ttfamily\expandafter\detokenize\expandafter{\MGL@script.mgl}% }\hskip\labelsep\MGL@line@sep\par\par% }% % \end{macrocode} % Note that, if the user requests an entry in the |\listofmglscripts|, the contents line is added to the same |.lms| file. So here start the similitudes again. % \begin{macrocode} \if@MGL@list@script@% \refstepcounter{MGL@verb@no}% \addcontentsline{lms}{MGL@script}{% \protect\numberline{\theMGL@verb@no.}% {\ttfamily\protect\detokenize{\MGL@script}}% }% \fi% \def\verbatim@processline{% \item\the\verbatim@line% }% \verbatim@start% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglverbatim} % This command could be defined as an alias for |\endmglblock|, for they execute the same instructions. But, for the sake of congruence, we rewrite the code. % \begin{macrocode} \def\endmglverbatim{% \MGL@closeout\MGL@out@stream% \item[\MGL@line@sep]\hskip-\labelsep\MGL@line@sep% \endlist% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglverbatim*} % It is an alias for |\endmglverbatim|. % \begin{macrocode} \expandafter\let\csname endmglverbatim*\endcsname\endmglverbatim % \end{macrocode} % \end{macro} % \end{environment} % \end{environment} % % \begin{environment}{mglcomment} % This environment has two different behaviors: When comments are allowed by the user, it behaves similarly to the |mglverbatim| environment; if comments are not allowed, it behaves as the |comment| environment from the \textsf{verbatim} package. So it is natural that we borrow code from them and adapt it to the corresponding situation. % \begin{macro}{\mglcomment} % The switch |\@MGL@comments@| governs the behavior of this command. % \begin{macrocode} \def\mglcomment{% % \end{macrocode} % If the switch is true, i.e., the user requests displaying of comments, we start a list without labels, and set the parameters for verbatim text. % \begin{macrocode} \if@MGL@comments@% \list{}{}% \MGL@set@verbatim@code% % \end{macrocode} % The separator indicating the begining of the comment is similar to the one used by the |mglblock| and |mglverbatim| environments; the differences are that, instead of using a solid line, we use a dashed line (|\MGL@dash@sep|), and instead of displaying the name of a script, we display |\mglcommentname|. % \begin{macrocode} \item\hskip-\labelsep<\MGL@dash@sep\mglcommentname\MGL@dash@sep>% % \end{macrocode} % The two following lines redefine the |\verbatim@processline| command to display the comment text line by line as items of the list, and start the process of writing the text. % \begin{macrocode} \def\verbatim@processline{\item\the\verbatim@line}% \verbatim@start% % \end{macrocode} % If the switch is false, i.e., the user requests no to display comments, we start a \emph{space hack}, since no text output will be produced. Then, the category codes are changed with |\MGL@codes|, and the macros |\verbatim@startline|, |\verbatim@addtoline|, |\verbatim@processline| and |\verbatim@finish| are disabled, as done in the |comment| environment of the \textsf{verbatim} package. Finally, we call the |\verbatim@| command to start reading the text in the environment. % \begin{macrocode} \else% \@bsphack% \MGL@codes% \let\verbatim@startline\relax% \let\verbatim@addtoline\@gobble% \let\verbatim@processline\relax% \let\verbatim@finish\relax% \verbatim@% \fi% } % \end{macrocode} % \end{macro} % \begin{macro}{\endmglcomment} % The |\@MGL@comments@| switch also governs the behavior of this command. If it's true, then the separator that ends the comment ---which is the same as the one that starts it--- is displayed, and the list is ended; otherwise, simply the \emph{space hack} is ended. % \begin{macrocode} \def\endmglcomment{% \if@MGL@comments@% \item\hskip-\labelsep<\MGL@dash@sep\mglcommentname\MGL@dash@sep>% \endlist% \else% \@esphack% \fi% } % \end{macrocode} % \end{macro} % \end{environment} % % \subsection{Commands for external scripts} % \noindent Since external scripts exist independently of the \LaTeX{} document, there is no need of environments to process them, just commands. Remember these commands work on the suposition that the scripts don't change. % % \begin{macro}{\mglgraphics} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{New command options: \texttt{gray}, \texttt{mglscale}, \texttt{quality}, \texttt{variant}} % This command compiles the external script and includes it in the document. Although that process is simple, the code to execute it is relatively large due to the possibility of the user specifying an optional path, so many parameters have to be checked. % \begin{macrocode} \newcommand\mglgraphics[2][]{% % \end{macrocode} % In order to keep all definitions and changes local, we start a local group inside which all \LaTeX{} code will be contained. % \begin{macrocode} \bgroup% % \end{macrocode} % We add the option |path| for the user to be able to specify the location of the script, which is stored in the variable |\MGL@force@path|. % \begin{macrocode} \define@key{MGL@gr@keys}{path}{\def\MGL@forced@path{##1}}% % \end{macrocode} % The optional arguments are processed. % \begin{macrocode} \MGL@setkeys{MGL@gr@keys}{#1}% % \end{macrocode} % The name of the script is set, though it is not check for multiple naming. This is necessary, since |\MGL@includegraphics| uses this macro. % \begin{macrocode} \edef\MGL@script{#2}% % \end{macrocode} % If the corresponding image exists, then this script has been compiled in a previous \LaTeX{} run, so nothing is done, but the inclusion of the image. % \begin{macrocode} \IfFileExists{\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext}{}{% % \end{macrocode} % If the image doesn't exist, we check if the user has specified a custom location. % \begin{macrocode} \@ifundefined{MGL@forced@path}{% % \end{macrocode} % If no custom location has been used, we iterate over the list of search paths (|\MGL@paths|): If we find the requested script, then we store its location in |\MGL@temp@b|. % \begin{macrocode} \@for\MGL@temp@a:=\MGL@paths\do{% \IfFileExists{\MGL@temp@a\MGL@script.mgl}{% \edef\MGL@temp@b{\MGL@temp@a}% }{}% }% }{% % \end{macrocode} % If the user has specified a path for the script, we check if the script actually exists. If it does, we store its location inside |\MGL@temp@b|. % \begin{macrocode} \IfFileExists{\MGL@forced@path\MGL@script.mgl}{% \edef\MGL@temp@b{\MGL@forced@path}% }{}% }% % \end{macrocode} % If |\MGL@temp@b| is not defined, the script has not been found, so a warning is issued. % \begin{macrocode} \@ifundefined{MGL@temp@b}{% \PackageWarning{mgltex}{% MGL script "\MGL@script.mgl" not found% }% }{% % \end{macrocode} % If |\MGL@temp@b| is defined, the script has been found, so we compile it. % \begin{macrocode} \MGL@write{18}{% mglconv -q \MGL@quality\space -g \MGL@gray\space% -S \MGL@scale\space -v \MGL@variant\space% -s "\MGL@dir\MGL@scripts@dir\mglsetupscriptname.mgl"\space% -o "\MGL@dir\MGL@graphics@dir\MGL@script\MGL@imgext"\space% "\MGL@temp@b\MGL@script.mgl"% }% }% }% % \end{macrocode} % The image is included. % \begin{macrocode} \MGL@includegraphics% % \end{macrocode} % The local group ends here. % \begin{macrocode} \egroup% } % \end{macrocode} % \end{macro} % % \begin{macro}{\mglinclude}\begin{macro}{\mglinclude*} % The purpose of these commands is to transcript the MGL code from a script. Once again, this is a straightforward functionality, but the code is quite large, so it has been separated in various macros. % % The unstarred version defines the |\@MGL@list@script@| switch to be true, so the script is listed with the |\listofmglscripts| command, and then it calls the main body of code (|\mglinclude@|), just like the |mglblock| environment does. The starred version defines the switch as false and calls the main body, too. % \begin{macrocode} \def\mglinclude{\@MGL@list@script@true\mglinclude@} \@namedef{mglinclude*}{\@MGL@list@script@false\mglinclude@} % \end{macrocode} % \begin{macro}{\mglinclude@} % \begin{macrocode} \newcommand\mglinclude@[2][]{% % \end{macrocode} % We start a local group to keep definitions and changes local. % \begin{macrocode} \bgroup% % \end{macrocode} % The default behavior is to number lines of MGL code, so the switch |\@MGL@lineno@| is set to true. % \begin{macrocode} \@MGL@lineno@true% % \end{macrocode} % We add the option |path| for the user to be able to specify the location of the script, which is stored in |\MGL@forced@path|. % \begin{macrocode} \define@key{MGL@verb@keys}{path}{\def\MGL@forced@path{##1}}% % \end{macrocode} % The options are processed. % \begin{macrocode} \setkeys{MGL@verb@keys}{#1}% % \end{macrocode} % We don't need to check if there are multiple scripts with the same name, so we namually set |\MGL@script|, instead of using |\MGL@set@script@name|. % \begin{macrocode} \edef\MGL@script{#2}% % \end{macrocode} % We check if the user has specified a custom location for the script. % \begin{macrocode} \@ifundefined{MGL@forced@path}{% % \end{macrocode} % If no custom location has been used, we iterate over the list |\MGL@paths| to find the script. % \begin{macrocode} \@for\MGL@temp@b:=\MGL@paths\do{% % \end{macrocode} % If the script exists, we store its location in |\MGL@temp@a|% % \begin{macrocode} \IfFileExists{\MGL@temp@b\MGL@script.mgl}{% \edef\MGL@temp@a{\MGL@temp@b}% }{}% }% }{% % \end{macrocode} % If the user specified the location of the script, we check if it exists, in which case we store its location in |\MGL@temp@a|. % \begin{macrocode} \IfFileExists{\MGL@script.mgl}{% \edef\MGL@temp@a{\MGL@forced@path}% }{}% }% % \end{macrocode} % If |\MGL@temp@a| is not defined, the script has not been found, so we issue a warning, and display a box in the document with the words \emph{MGL script not found}. % \begin{macrocode} \@ifundefined{MGL@temp@a}{% \PackageWarning{mgltex}{% MGL script "\MGL@forced@path\MGL@script.mgl" not found% }% \center% \fbox{% \centering% \bfseries\Huge% \begin{tabular}{c}MGL\\script\\not\\found\end{tabular}% }% \endcenter% }{% % \end{macrocode} % If |\MGL@temp@a| is defined, the script has been found, so we call |\mglinclude@@| to set up the inclusion of the script. % \begin{macrocode} \mglinclude@@% }% \egroup% } % \end{macrocode} % \end{macro} % \begin{macro}{\mglinclude@@} % This macro sets the parameters for the inclusion of the script, and calls the command in charge of the transcription. % \begin{macrocode} \def\mglinclude@@{% % \end{macrocode} % We first add the script to the \LaTeX{} list of included files. % \begin{macrocode} \@addtofilelist{\MGL@script.mgl}% % \end{macrocode} % If the user has used the unstarred version of |\mglinclude|, we add a contents line to the |.lms| file. % \begin{macrocode} \if@MGL@list@script@% \refstepcounter{MGL@verb@no}% \addcontentsline{lms}{MGL@script}{% \protect\numberline{\theMGL@verb@no.}% {\ttfamily\protect\detokenize{\MGL@script.mgl}}% }% \fi% % \end{macrocode} % We start a |\list| in which each line of code will be an item. If the lines have to be numbered, we use the |MGL@line@no| counter. % \begin{macrocode} \if@MGL@lineno@% \list{\mgllinenostyle\arabic{MGL@line@no}.}{\usecounter{MGL@line@no}}% \else% \list{}{}% \fi% % \end{macrocode} % We set the parameters for a verbatim code. % \begin{macrocode} \MGL@set@verbatim@code% % \end{macrocode} % The heading of the environment is set. It is similar to that of the |mglblock| environment. % \begin{macrocode} \fboxrule=\mgllinethickness% \item[\MGL@line@sep]\fbox{% \bfseries\ttfamily\expandafter\detokenize\expandafter{\MGL@script.mgl}% }\hskip\labelsep\MGL@line@sep\par\par% % \end{macrocode} % We redefine the |\verbatim@processline| macro from the \textsf{verbatim} package to put |\the\verbatim@line| on an item. % \begin{macrocode} \def\verbatim@processline{% \item\the\verbatim@line% }% % \end{macrocode} % The script is opened for reading. % \begin{macrocode} \immediate\openin\MGL@in@stream="\MGL@temp@a\MGL@script.mgl"% % \end{macrocode} % We call |\mglinclude@@@| to start the transcription. % \begin{macrocode} \mglinclude@@@% } % \end{macrocode} % \end{macro} % \begin{macro}{\mglinclude@@@} % This command transcripts the MGL code of the script and closes the list started in |\mglinclude@@|, adding the corresponding separation line to separate the code from normal text. % \begin{macrocode} \def\mglinclude@@@{% % \end{macrocode} % Since the transcription has to be done even when \textsf{\mglTeX} is off, instead of using the |\MGL@read| command ---which is inactive when the package is off---, we use the usual commands from \LaTeX{} to read from the file. % \begin{macrocode} \immediate\read\MGL@in@stream to \MGL@temp@b% % \end{macrocode} % If the end of file has been reached, we close the input stream, add the separation line, and end the |\list|. % \begin{macrocode} \ifeof\MGL@in@stream% \immediate\closein\MGL@in@stream% \item[\MGL@line@sep]\hskip-\labelsep\MGL@line@sep% \endlist% % \end{macrocode} % Otherwise, we use |\verbatim@startline| to clean the |\verbatim@line| buffer, then we add the just read line to the buffer, and call |\verbatim@processline| to include it as an item of the list. Finally, we recursively call |\mglinclude@@@| to read the next line. % \begin{macrocode} \else% \verbatim@startline% \expandafter\verbatim@addtoline\expandafter{\MGL@temp@b}% \verbatim@processline% \expandafter\mglinclude@@@% \fi% } % \end{macrocode} % \end{macro} % \end{macro}\end{macro} % % \subsection{Additional commands} % \begin{macro}{\listofmglscripts} % \noindent This command creates the \emph{list of MGL scripts} section. It has to be defined differently depending on whether the used document class defines the |\l@chapter| command or it only the |\l@section| command, which set the style for making a table of contents entry for the |\chapter| command and the |\section| command, respectively. If none of them are defined, we define our own style based on the latter. % \begin{macrocode} \ifx\l@chapter\@undefined% % \end{macrocode} % If |\l@chapter| is not defined, we check if |\l@section| is. % \begin{macrocode} \ifx\l@section\@undefined% % \end{macrocode} % If |\l@section| is not defined, we set the |\lisofmglscripts| command to perform exactly as the |\section*{\listofmglscriptsname}| would do in the usual \textsf{book} and \textsf{article} \LaTeX{} classes, except that the type of section is |MGL@list|. % \begin{macrocode} \def\listofmglscripts{% \@startsection{MGL@list}% {1}{0em}{-3.5ex plus -1ex minus -0.2ex}% {2.5ex plus 0.2ex}% {\centering\normalfont\bfseries\large}*% {\listofmglscriptsname}% % \end{macrocode} % We use the |\@mkboth| command to set the page marks according to the current page style. % \begin{macrocode} \@mkboth{% \MakeUppercase\listofmglscriptsname% }{% \MakeUppercase\listofmglscriptsname% }% % \end{macrocode} % The \emph{list of MGL scripts} is created by reading the document's |.lms| file. % \begin{macrocode} \@starttoc{lms}% }% % \end{macrocode} % The |\l@MGL@list| style has the same code as the |\l@section| style. % \begin{macrocode} \newcommand*\l@MGL@list[2]{% \ifnum \c@tocdepth >\z@ \addpenalty\@secpenalty \addvspace{1.0em \@plus\p@}% \setlength\@tempdima{1.5em}% \begingroup \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth \leavevmode \bfseries \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par \endgroup \fi% }% \else% % \end{macrocode} % If the |\l@section| style is defined, the \emph{list of MGL scripts} is just an unumbered section. % \begin{macrocode} \def\listofmglscripts{% \section*{\listofmglscriptsname}% \@mkboth{% \MakeUppercase\listofmglscriptsname% }{% \MakeUppercase\listofmglscriptsname% }% \@starttoc{lms}% }% \fi% \else% % \end{macrocode} % If the |\l@chapter| style is defined, the \emph{list of MGL scripts} is just an unumbered chapter. % \begin{macrocode} \def\listofmglscripts{% \chapter*{\listofmglscriptsname}% \@mkboth{% \MakeUppercase\listofmglscriptsname% }{% \MakeUppercase\listofmglscriptsname% }% \@starttoc{lms}% }% \fi% % \end{macrocode} % \end{macro} % % \begin{macro}{\mglTeX} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Add a small negative space in the logo, between the ``mgl'' and ``\TeX''} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Declared now as robust command} % This macro pretty-prints the name of the package. It has a starred version, which also prints the version. % \begin{macrocode} \DeclareRobustCommand\mglTeX{% mgl\TeX\@ifstar{~v4.2}{}% } % \end{macrocode} % \end{macro} % % \subsection{Local settings commands} % \begin{macro}{\mglswitch} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Now accepts arguments \texttt{0} (equivalent to \texttt{off}) and \texttt{1} (equivalent to \texttt{on}), besides the usual \texttt{off} and \texttt{on}} % \noindent This command turns |on| and |off| the package according to its argument; it is just a call to the commands |\MGL@switch@on| or |\MGL@switch@off|. % \begin{macrocode} \def\mglswitch#1{% \MGL@test@switch{#1}{\mglswitch}% \csname MGL@switch@\MGL@temp@a\endcsname% } % \end{macrocode} % \end{macro} % % \begin{macro}{\mglcomments} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Now accepts arguments \texttt{0} (equivalent to \texttt{off}) and \texttt{1} (equivalent to \texttt{on}), besides the usual \texttt{off} and \texttt{on}} % Depending on the option passed by the user, it calls |\@MGL@comments@on| or |\@MGL@comments@off|. % \begin{macrocode} \def\mglcomments#1{% \MGL@test@switch{#1}{\mglcomments}% \csname @MGL@comments@\MGL@temp@a\endcsname% } % \end{macrocode} % \end{macro} % % \begin{macro}{\mglquality} % See under the title \emph{Initialization}, subsection \ref{Init}. % \end{macro} % % \begin{macro}{\mglscale} % See under the title \emph{Initialization}, subsection \ref{Init}. % \end{macro} % % \begin{macro}{\mglvariant} % See under the title \emph{Initialization}, subsection \ref{Init}. % \end{macro} % % \begin{macro}{\mglimgext} % This command changes the value of |\MGL@imgext|. % \begin{macrocode} \def\mglimgext#1{\def\MGL@imgext{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\mglname} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Now writes the MGL code line \texttt{setsize~600~400} to the main script} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{The MGL code line \texttt{setsize~600~400} is now written to the main script} % \noindent The purpose of this command is to force the closure of the current main script, compile the corresponding figures, and open a new main script. At first, it is defined to only change the value of |\MGL@main@script@name| because the main script is not opened until the call of |\begin{document}|; but at that point, it is redefined to perform the described actions. % \begin{macrocode} \def\mglname#1{\edef\MGL@main@script@name{#1}} % \end{macrocode} % Here is the redefinition of |\mglname| after the |\begin{document}| command. % \begin{macrocode} \AtBeginDocument{% \def\mglname#1{% % \end{macrocode} % We start a space hack, ince this function has no real effect on the document. % \begin{macrocode} \@bsphack% % \end{macrocode} % The MGL functions created throughout the document are written. % \begin{macrocode} \MGL@write@funcs% % \end{macrocode} % We force the closure of the main script. We use |\immediate\closeout| instead of |\MGL@closeout| in case \textsf{\mglTeX} is off. % \begin{macrocode} \immediate\closeout{\MGL@main@stream}% % \end{macrocode} % The closed script is compiled. % \begin{macrocode} \MGL@write{18}{% mglconv -q \MGL@quality\space -g \MGL@gray\space% -S \MGL@scale\space -v \MGL@variant\space% -s "\MGL@dir\MGL@scripts@dir\mglsetupscriptname.mgl"\space% -n "\MGL@dir\MGL@scripts@dir\MGL@main@script@name.mgl"% }% % \end{macrocode} % The name of the new main script is updated, and it is check for overwriting, using |\MGL@set@script@name| inside a local group, since this command defines |\MGL@script|, which we need undefined in some parts of the code of the package. % \begin{macrocode} \edef\MGL@main@script@name{#1}% \bgroup\MGL@set@script@name{\MGL@main@script@name}\egroup% \MGL@openout\MGL@main@stream{% \MGL@dir\MGL@scripts@dir\MGL@main@script@name.mgl% }% % \end{macrocode} % We set the default size for the graphics that the main script will generate; without this line the |setsizescl| commands written automatically by \textsf{\mglTeX} wouldn't work. % \begin{macrocode} \MGL@write\MGL@main@script@name{setsize 600 400} % \end{macrocode} % The space hack is ended. % \begin{macrocode} \@esphack% }% } % \end{macrocode} % \end{macro} % % \subsection{Advanced settings commands} % \begin{macro}{\mgldir} % \noindent This command is the interface for the user to change the value of |\MGL@dir|. It is an only-preamble macro, since using it elsewhere would cause faulty behavior. % \begin{macrocode} \def\mgldir#1{\def\MGL@dir{#1}}\@onlypreamble\mgldir % \end{macrocode} % \end{macro} % \begin{macro}{\mglscriptsdir} % This command modifies the value of |\MGL@scripts@dir|. It is also an only-preamble macro. % \begin{macrocode} \def\mglscriptsdir#1{\def\MGL@scripts@dir{#1}}\@onlypreamble\mglscriptsdir % \end{macrocode} % \end{macro} % \begin{macro}{\mglgraphicsdir} % Modifies the value of |\MGL@graphics@dir|. It is an only-preamble macro. % \begin{macrocode} \def\mglgraphicsdir#1{\def\MGL@graphics@dir{#1}}\@onlypreamble\mglgraphicsdir % \end{macrocode} % \end{macro} % \begin{macro}{\mglbackupsdir} % Modifies the value of |\MGL@backups@dir|. It is an only-preamble macro. % \begin{macrocode} \def\mglbackupsdir#1{\def\MGL@backups@dir{#1}}\@onlypreamble\mglbackupsdir % \end{macrocode} % \end{macro} % \begin{macro}{\mglpaths} % This command adds a list of search paths for scripts to the existing one (|\MGL@paths|). % \begin{macrocode} \def\mglpaths#1{\g@addto@macro\MGL@paths{,#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\mglsettings} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Now calls the \doccommand{mglswitch} and \doccommand{mglcomments} commands for the \texttt{switch} and \texttt{comments} options, respectively} % \changes{\textbf{v4.2 ------------}}{2016/05/14}{Added options \texttt{gray} and \texttt{variant}} % First, we define a \meta{key}=\meta{value} family, |MGL@sett@keys|, for this command. % \begin{macrocode} \define@key{MGL@sett@keys}{dir}{\def\MGL@dir{#1}} \define@key{MGL@sett@keys}{scriptsdir}{\def\MGL@scripts@dir{#1}} \define@key{MGL@sett@keys}{graphicsdir}{\def\MGL@graphics@dir{#1}} \define@key{MGL@sett@keys}{backupsdir}{\def\MGL@backups@dir{#1}} \define@key{MGL@sett@keys}{paths}{\g@addto@macro\MGL@paths{,#1}} \define@key{MGL@sett@keys}{switch}{\mglswitch{#1}} \define@key{MGL@sett@keys}{comments}{\mglcomments{#1}} \define@key{MGL@sett@keys}{gray}{\mglgray{#1}} \define@key{MGL@sett@keys}{mglscale}{\mglscale{#1}} \define@key{MGL@sett@keys}{quality}{\mglquality{#1}} \define@key{MGL@sett@keys}{variant}{\mglvariant{#1}} \define@key{MGL@sett@keys}{imgext}{\def\MGL@imgext{.#1}} % \end{macrocode} % The command receives and executes the \meta{key}=\meta{value} pairs for |MGL@sett@keys|. This is an only-preamble command. % \begin{macrocode} \def\mglsettings#1{\setkeys{MGL@sett@keys}{#1}} \@onlypreamble\mglsettings % \end{macrocode} % \end{macro} % % \subsection{User-definable macros} % \begin{macro}{\mglsetupscriptname}\begin{macro}{\mglcommentname}\begin{macro}{\listofmglscriptsname}\begin{macro}{\mglverbatimname}\begin{macro}{\mgllinenostyle}\begin{macro}{\mgldashwidth}\begin{macro}{\mgllinethickness}\begin{macro}{\mglbreakindent} % The user is allowed to modifu these commands, so no |@| symbol is used on them. % \begin{macrocode} \def\mglsetupscriptname{MGL_setup_script} \def\mglcommentname{\mglTeX{} comment} \def\listofmglscriptsname{List of MGL scripts} \def\mglverbatimname{(Unnamed MGL verbatim script)} \def\mgllinenostyle{\footnotesize} \newdimen\mgldashwidth\mgldashwidth=0.75em \newdimen\mgllinethickness\mgllinethickness=0.25ex \newdimen\mglbreakindent\mglbreakindent=1em % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} % % \subsection{Final adjustments} % To finish the code of \textsf{\mglTeX}, we set the behavior of the package at the call of the |\begin{document}| and |\end{document}| commands. % % We tell \LaTeX{} to check the name of the document's main script for overwriting. We do this by calling |\MGL@set@script@name| inside a local group, because it defines |\MGL@script|, which we need undefined in certain parts of the code. Then the script is opened. We use |\immediate\openout| instead of |\MGL@openout| for this purpose, since, otherwise, we run the risk of the main script not being created when needed, if the user turns off \textsf{\mglTeX} before the |\begin{document}| command, and turns it on immediately after. Finally, we set the default size for the graphics the main script will generate; without this line the |setsizescl| commands written automatically by \textsf{\mglTeX} wouldn't work. % \begin{macrocode} \AtBeginDocument{% \bgroup\MGL@set@script@name{\MGL@main@script@name}\egroup% \immediate\openout\MGL@main@stream=% \MGL@dir\MGL@scripts@dir\MGL@main@script@name.mgl% \MGL@write\MGL@main@stream{setsize 600 400}% } % \end{macrocode} % % We also set the actions for the call of |\end{document}| % \begin{macrocode} \AtEndDocument{% % \end{macrocode} % |\MGL@write@funcs| will simply write the MGL functions throughout the \LaTeX{} document. % \begin{macrocode} \MGL@write@funcs% % \end{macrocode} % The main script is closed. We use the |\immediate\closeout| construction instead of |\MGL@closeout|, since the script must be closed even when \textsf{\mglTeX} is off. % \begin{macrocode} \immediate\closeout\MGL@main@stream% % \end{macrocode} % The main script is compiled. % \begin{macrocode} \MGL@write{18}{% mglconv -q \MGL@quality\space -g \MGL@gray\space% -S \MGL@scale\space -v \MGL@variant\space% -s "\MGL@dir\MGL@scripts@dir\mglsetupscriptname.mgl"\space% -n "\MGL@dir\MGL@scripts@dir\MGL@main@script@name.mgl"% }% } % \end{macrocode} % % \Finalemathgl-2.4.1/mgltex/Recompilation_decision.pdf0000664000175000017500000022764713134047003021252 0ustar balakinbalakin%PDF-1.5 % 3 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xZku޿?.lǎ# A Wd>%>[=C.!Qu}ϭ7%5ݖ^ضaOY+V5ӛW|8y>,~  oZKj.߻{˷wݻ/o_e_V\Xk8Զ\XP[ӑ\vXK,[ xzsKke˥Ү9+1^cqW?w_}{?\ΐ{_s[E|1oCN}Ͼ''k*ys-'O[(w~Ë[Rq= !^=&9~|xscYSh;R/=@.n9E2)ruBdnPkcWkOoݻ=}]%v?Ѥ+mӫK 8 mNt_O7>bϥJoڢ1KA "sM芋גEJw?W= & |4R/$a9QυjOBk[upNcZqS5WɇҤav*cO)!ޠph .i%P -i7'QkPC6JGT f %Sv !zo*}{ۑ;{ԺvMuC_#Oq:|"n ͇;?eddz:{ե7 G{ۿ%X߮&="ي$l3"9#OY'O 㸷8B#dެS8BDӆdm!+e=~Rv邌}Vt~&G-y= EQM]$j#-:հ 2i"O2 Ah?M1t&q'Qx@PD\FM[EqbavV!Ǭ"$vGRztt}P. n<*PR !sNNJ,=Iգfܢ'u W:$$e # BJŭW[5==o%BKa+ 2)ϺSn-ϫ y1 -Tԡa^,F\ F[ b ozt}&4>)MóÛ"<&X y @!@Mlh/OcVbmHM2ټ)㮶,}uMa&&4 l2S_NNAK|K ܢiSZJvXSKNjJjR~j1頉ezyә"-jBq FP5bJJ|>>mP*2O?b4*T ,'yj$D% 5KŢ(Q5oh Hhr*Jfz w)k P:1~XF<}k <R~Sy#@Aa}Y Pۤ<zvETm~ N8S1w4a1Ƨ ,S0<=~N p˶Ca{?uw{V;- sL t; Tv3 2xT;x|21" 3BGiz}E _j3F3ZzxRTbKuDͻR [ @ac/~F]:CKC@;8 1STzP mWc,rQ}h8%g82Pmi&Di]t(+ ]-=PR&x嘘cIjZg"sP)]𓺠`AyC2/*uxxz9Ǥ9dFPA;ltM`c%W[:Ԗ][=aP5X?Cӗ];5p1;AaU-ѠkW <0e(/ 5HGb Uֻ݉sngHGY*6q8[y1r4h`eɾe#Q04y/$2W>AhnCB@ \Rmš%wC>-%*ȣ̉sPKbhiR|)p=+*B&KY܆H@*i9(H̗ru(9O | #9`eOO컨==23>\58+hIqlSf|NgKŏƥF2vjL] /"hSGl܈r@4c%jjHP[o3 L}^Ji~Xia#dRx[ DNyIɴbw_,kݦ@QckC@!e;QFߛDaG>&K C%z&MPΙ jB8HC#D$zshEWG:fp1rLODKhL$T Ա xɢ} TǹDRŖjp~Cc6  jc[cDOkNɄ~L=%?V]YE+rF`k$8NmP!s0|Z2,WzZ:(M>l/p ofbX_1hEHzֺ`>4_ b>ڡeDf@RI% /"TM9h򲳮R\9K<0$`m+k[#2 }D=yһ+ qs`KDyqL P< bO}b|f92Rۓ!A1Ûc ̢ǶJfj2lєNg2sHA0R`%ɍ h1o3F,.Qh17vx#R 㖤k0l0RQab?S<P#<Cc3a€!Q;A{q S =̵{7u,OEICM#Az':*N5gJʠ<)VzPl?(>%7$؂?1>H>y"Iqk| 'gIя>Ln Կ}AJF`+:" ? g3srMªjX(8I%-NY.& w0*69%*C_vMWXSR8vzkmֳZD _qtFal"u?* ޝ$ * Rү%)I5ɶH[3C-+:[rFE)maz?l,Cy2zK(v7څLUvVɂ;טwY;MBJa.m9mȇZc 1'z3U Cr,qmŊ Bd?tYpȱSE.L!U fԙ'RФ$,]t⌷F^6aPIVJqYue9>dF-ѣu*L.5LN?d㓬 G;'Vݟ`xI"pj2[LE3U˙2噲/q1Y){8 endstream endobj 4 0 obj 4589 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x5 5 0 R /x7 7 0 R /x8 8 0 R /x10 10 0 R /x11 11 0 R /x12 12 0 R /x13 13 0 R /x14 14 0 R /x15 15 0 R >> /Font << /f-0-0 6 0 R /f-0-1 9 0 R >> >> endobj 16 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 630.457764 790.399963 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources 2 0 R >> endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 121 /Height 48 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xŘkA0,Ca K eC\H 9.$HAdbN"i 'Pb^C%- IMu6ɮie70I)Lk2l-ݺ*pP(:i>zA&' NTJ'la$N.r]bX|z C$k''|,ײNvƼ ŵiuFYf 7Ws-&h*Qc:Ф%>'wFխ")J'hWM=q"7V{FKv&<{%e}ץpʐO> stream xyTTwRTW=j(b*(( (DD0n }hܢѐؘ9,&md{:3'';ICb5IsxD_K,ɩxK*K}U]Ơݽf6R?57"'e;2i l" ?ypsiE]5ގ=3^ƥ/m_yjz!Y7ptzFooJ͔IJt{I<'~VmikEqBI# d|`Ccsdvd2WT4֔w4 dLc;̮-󾸽hvxۛGwul;w|0x>:8:!<º G#<74')&T8DcLߏƹE[^^P[Y=c{׮?2Aln;#,)gg=YߚktꛒBgww,j[R^s%EeDyZSc Lskͭ(.X{k( uom |yGzjkL?Ԕq5dtw`G`g9gf u= OgC'SG-G/0--IWw:qXyym-JIȷ[cR䳥A,`*Q++=.Wϝb\eTΆ6+:^ZPʦ M?M+˳ᝥ\[?Ld1+#PQIa D(Pcy,)ɾ./lƴdڿ9?|y&p1*t)37IgtT1ZkB# 3`ogAaK=7Y^MN5iaXT%dl.19J$ET*A)to,^މ ms_6N7VgKI?/x=m^F&~>S!\Q̇:8 |Xa"m,(H$"b- GѾ(99D$Kj_ahzgah0i\n"!ӄ۷p˾w'-[|9 gTx*N-.RIAYhVJ8J>+źs?Bth 2_jn;^Z`q^(C>q|M*mQ1iioQ9WpSnULD)&UP X>;'6h XR4+\S.ܙiYar>&_o S>_E  8y} ЛQ7ٓ`&ʼnFyh0Ge9QiiirGϛ^m-ypfuQ'*.g33F/Ƙ{6/xa :#G|SN,N U#b ??*mZ' ~5uwM:Z[Qog'nEͯx+2uR^:AVdäTl1eZ17CI7"nx]ڨ\XW* tbDF 6A8?JX f{]CIeAy-y%3mt{Yɔ>G5oSrzRaMYoW'7UV(Ƒk5\.6 )]sy"y)23 :ovryR6:1|0ꌇ m'j6$!D;d2Ij^)*Hq'GfTX*Oa䛂Pͨ1|p7ZUA$vL(~296r@j'wCdPM+Vs385NRBsՇ5jB5ؖ #hĖAQOVF#lxGA QcS- b%,)kIVLGr7d .p)_! HҹFWub?'Ñzr?^,sac̳ZB=^Y%d0p*Iy̔pMftGNVX͖GɁ5q0;|DP͞J` mnjK5Ya|;s߭1B_**WF`,v7#YڕGz$N^YnTD8oV_؞G d`["Xb|M69g Rf0??)_! a5VTG0K=9p,nzn:  G$u&ƪaq&R@ʈL0orHjB$n $5J:#am <_Pobt ,zmD5?F3z\xL NԊ]za]tUGYi*|[F~o٬@ :{ J3 B!`|놆hYR"I']Tb,3e;͖br~XuqJiVRzw5!r6C̙S+ kt1:"avQcܳE$Xҁ(8 jE 1ԃ^X4I>S%`EqBɱ i&ªQ{9\NxNĹuFD.SfGJGP4B6![7őRX6ibmF( `N –D8' ̓e7_An_*AO8rFFWn,bcSpH1+7ߛ7'6 R6szqNib?3Ѯ)ZE0艂uN؝J>q~d7=ET&#Cd 2慣n|BqHtk%^.KH)699 JFBUllm.56$k h5AWExҟ}d"}r=rn$}!$'6:HK"˂uzucz$Yɏ%aHݒ&R&_+`Ũx$A#@(A>ƞĀoH|b?3 &&Co4]h3b,ƥ_QDVLl2BYVǦū@nc⋭6oUzE-0;yV<6a.cX-8wch8`l_.FX Hl%En~Z'ӢR:>+LhW 5<,Xvt*WdчBJ:m6~l6y|(W/n&C@0 >b8A3[cc 5Gi,mscB;6n%K*dbv_Qy * >p7UtTp0( 01XА3J+b9gG _#PI`J:7ŕX)\X/zSOfWg׸\ o0cAah0 .h PqgR7"R8QJB$4?<@LH0F%!p5?]2o{"eVXi],+m>rF1 04 0!+x*CQ *)%ySpX8{&[h5yPq\|(ea2j o7\=0j?(FʼnTre#DAwbQ pŒp(S{u@*Q C#i6(tCWat;Vɵ)DT3tQ8OB`3P0Bc'\?2D@h$"ޤH9,)D1-Q/`t۩crr0щ6ar1p _ݤd endstream endobj 19 0 obj 4766 endobj 20 0 obj << /Length 21 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 349 /Height 90 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xgqz#*QQ9xv(;&PKzؔɘ.NC=mf,:rYؔSYEL[3Fɡ!ݞ-ݒ6|/x{|;440"v&[(_Yypt g'Ǔ#a!7aDSRчi0(y]{4;k\򏶖o+"su=xvj Wvy[nMlcVHKuգuqq ϪGkS/-"4:V'l]a&n?ij!.}kՋ5r&]I}zFz1k gޫ^QJM^@q皪k\d\b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\  wGb{kYU/Hrfrz>:nolTOGw"zk٘ 'C"2Vv}6[z|QAVʭx_Tց\-:Яsf~ufxMW\a\kNKr:=n,=OaFSYwquZmZu}uͦfCwݐK8|@ 'BA5̰۶zaQ+l'T۝ endstream endobj 21 0 obj 765 endobj 7 0 obj << /Length 22 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 349 /Height 90 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 20 0 R >> stream x{xU6/_. %IiHԒii͔ZJ\*7ЩEpggPDe 2,"̸<;e/=I]GX[)9'<ǿ[y*M;wn<ommD"p8`ᆆ_uuכ2*+=)+ՕUSiӦ+NksjUVdwNLb1{b59 ̅o55jU,ENL&#/9Mh4mawDzeK6}dxên߸fۼf: '-R7l͠T ,'/[$%]/=n~*tv;0jۦǞݶ{3^ڳоm{y߶WP<ފg{˦UzUrDBwTpnVKKKܴvO {x'P- _:/jOu}QR>6鍐V"{©eIqq{CjެPMyRW-vp67WKiz4Bsss;+Mػ}&V/y8wxW\:z )얍KfUtZ=v٬뷷W+T4. O&ԧ cˉX}bi@X13S%fmɔ<#+F-UVTTpd2 CoyY}oҫ'·|G]̨v8^ezT"f09N;l~2c ӹ %IOݦ#!H0:Xt%`0HJYp::(//Jy+~9RnF8|:ѕuts֧[5iGÍ 2.BA>Y9b{&`)ZiiTurr\. #π Ҳc7UT66_\:D}tmݍNvqt-^nJdzgq:C{ѠGC>!|v#hJZ3+3r(#f UB-z='Oћ :BB]ԻO.A;BgCX@{}qo9OF w-ޮn֖ -_ab$,MO IEA~s_>w[./Foc!t>(Egm"`RIGA|rqRpOekjtl-WP WǜCdWS%?'ÉGCnF$?q3? rNFɡI})Wba/GGY8сFЕdnu۝cp10Q\>F?YGw97ٖH,,az.`93S\G_p_$7J CsЈ,88@|!~-Y_˓/ H`fiC*zL, m_B@I y, m=@-mCfr>Hw3[hyY8=Y~چo,@ , Y 1<I4+WB `L LE}U }A,d Pn,A,d PnA,dWlA,;WP57@oB:"~1L(7!A, PnY(7A,Ќ}OM,PeA,ІeA,ЃeKM ~Rq\Y j dD  @ SY z@eIi_6@?,@=,l~'YHY_6,l~ė>ɲ/% Џ! Y8ge#nBʲ@5d!eY ~/Y83Y ~o,l -2d!5Y ~@Z >aBj@@|dMil! BR7 S,& oH G YHM4./,i -&d!5Y ~@Z J&Ini -#%2% 3L{Y836t=nЭX |ӟKat2AÉ,\rO,{=Mk}dх0IF,ݮEЕ0:Bǂ8 njcm7 2(Z[(=z{*A/7GAt.(ޕEע>9p5ل !t6 АӥK½dh͂&#Rjrq=n~{l̅3E:DgC|8l} @һ.> XiB{jw[<|]7ݬ0|,if4W4:]ܐOx}_ D^mFo.)Nw_t,Nx{mv]c#l q73ASbԚYUY\>Oj4Ju%V_>\6h^r2"wUhwzf&zv&<4TV~Wx9fn-4iTur1ҐRV-3IXm 3F|+ fA>8 -wEhm ~%<<yU)s ^'S  $AWKr;sn3b i_8o-u?]~>^“) vU^S1iTYy&^RB"F)=آ/0n_tr{͵s7¶ch٨0Fx2x8x>? ZkG8* I̗UF i1zbVs9&w-WdPz΄]^7 ˆ߲o̰߂Gǃ³ (ԩ, ju F\$2H$j,_m*<2yMESogNYrs= <`8<GBM SY5O+dy,<@]Nt x .~02A-ʪ|.TZP/q16ۤ³rzMUb\& |=Og2 #U.NUdTWnz- p'dW8*rA#W1?%" G*(# 'UR >0p%\!##3#3(su UA*iEjY+ 6hr^aɭy x>xDxJxPxVKs<7<: welHҨX8_-3&H@gDž'M-8HF.2E pĢ4x!|YS6_ݦ endstream endobj 22 0 obj 3832 endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 185 /Height 170 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xouFѹ y$dP HЌ PxRLe&.o!@$2CLGp4.(O ..! &c kb?+'kԤ6mp D,=/Y̜,Wn116G%͛=~)r# ^7m2̌!Wт{R OqG\rϬtp__rNțlݡPX`υo-.b^.g w\r:x>NgZ-\y%헒pYIϮ<Jvl#;*pU{] ʵe[-eM.D=$gp,w[c(Er. Gݚ#?8zrtݠ3 f,DTrӗú#)'Sݠy-9rV17;hqjcגWN#,GV5ed7.Q7;>=g|D/.\Zw?:7Y9<Ԓ(j7)%@oa1:r|ǢS+n1C#<9̃\v%Hco2zrt J43OF#@9½kɑDcr)EX3!-o5{'\+NW(y%lD7J&w ȡ+GGa/6\sr%i>W[5!da[E^\Sfm!̏_NQ]} wTn,ER.=nr9ʎ˿'ѸG{R.gmo@8ILבK5;t+iIo+w1֖2V}x6S73t9\L>oiBw19蝻\/ni6x"SL~c7h&۹oaOsbVN6 ^9X7#$dqҖ7&ᜳds<WDkb)Vw}[ZIzeoҖ̽?'#{I!?mnt4IrruާӚk_WMs&$:p9<|[z'zhst y°['sm>u31|3Y*xgܒm-hU'sSrD~[ cQ.ʋ_s=nٓKˋЏc_hCf |P`OsZE^\qrV>聁&#n¸;XO݁{uϦRr>rDn<9x? vu6l2y,O_v?}W]0ecޭfUo,/}$[1Kx8iƋ_[=wq#-?9$y8p3oep4ֿIMjR_Zv endstream endobj 24 0 obj 1880 endobj 8 0 obj << /Length 25 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 185 /Height 170 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 23 0 R >> stream xyX[epG[-[ @BB/BK R-Qij-Ъ]ֶZ{h;38*{ߓNNNg|}**** bcPekedd憇s\6ƙ2G]Ly jnndg̘swf;M,XTZaNJ ғ"Roܛ?#:$X <}n"Mrbx]<.B&SJ)-P' ZmiVVArb4;&oº%99~Q`1[!pW$lEbWWS)-N*+ii鑑~a1Vߺj\M69"'V!O xaެ`O*eH841kJ.̉&55-&&JLn^Vٲ|ǚOU?Y4&=*'LH$8ex</EsLԂN`s:I ԤٰtlK[йtAFhmgQ O) 2V#atN`4JD*'3t=ںr׷y[+L4%EK՞c듽yst9/N aQ->t7J(tS dDGlYZݵb;{[vyO i_5MV-ʞY$jg(x2v=,UC.sN܄:?EZJ~kځWGi cb|o%Y0ֳ@TRR'918y ur_߳m;v | RY ևdu}gr|7/T{jT,T4h9SZW 8' {;>۾Oξt`۹M/5Y৿"H6Rd)y*t%2C'wu V<KГj7h2(-\x'Xcݑ]ۛ6/8gգ;Ooʂ6o.lpy(h-sӒײ+\&s̄jCǪ-*Nn~xKXW|" Dr>E3݃jޢغZ2|J}IQ۾yI ڽޭ^M}1J˚A'j!=Zk kA"RZ0'QQfBG]ضŹ_{>-u}irJaY aaa9'Gs5\=M1_k ~ur!8kԠ#S-ț6qPZƼ91ton" <~7l1Ҝ'hE-*$ tQ,,dC;z'}/;is|` 7Z`j:Kw*‡Nٻ 2l~}Q ew;/wN@NZ`E.P[-kCmT\/M҃H@Gi2nv0'n;RC:2<|T9,'Z괠y-r 脔P :ɚ-Kk'p~滛Ꝝ?":=$'i}1E-(x rNkqshYvҵC'VנC@$d~{wIɧp-Hb^K˹b^ ]N*"ugZa{rA'hȆ _WG Bk^K?7RVԨhD45ur핮/9\ͭSZdZtTV6t%O G8ACCo_|j'o v_ ̅#lO:*Q)Ýurɂݝ^EN@'ڛ:f-X@R`1^VC{ڡn@y__yjԊ8 l Q'=wEBϗ؇XbsOV'~% .?! G > iRVC{l=9V'#)|@w\ ,-T/BVɉ' z6U wLh\֍HNB\'$3N4E#9yZbΠ,+2:M(]+Lt'#Ǝ1Fjbs8.Ҳ%ׅHf6'p8Zj-Ϛh:J މ^;>YDsgIbm'غ\6ldDqC0^԰}͡VA';zBkLl$i :&2>~ONZܴpIʝ+f#Û߱6'V"[O(-Qѷ &q^ +H̴sJM:]" |KXO&R-hn.x3ҨHE.'ӂF.vR![lp]# ⦞m z!Оɤ1Ғׂth"-$} ؟X Ofw?YVaɉ>-o',ZГֿ$ jAD=CcckϠa&ތIK'NwcЍIqF$48E/>B =IJ=c-3ċ >$2Vfg>vFTDqV:|bKNLXS',??Z0'3gjSRRQH־,%QN=%r,$//#&&)"(+}wCdN>9$Dῑغ<<-X:I MkucUZО|RK9yP-fb-NϮغn K/>wC߁6r'?U-ր|- lNHظPNlH .E,Tz>E 0 )äKNU:9 G%##Z)++,K/MYP57.[XyQyѮZ׳NO.5r2B2-5qn~ ?CKBJK0, mNBCC j"M6gI}5Kw,[U}cO=i*A~Kdߠa,Ee8g+j =4>VʚcljI*<Sm(5r[sӞ- no/;Va˜;]MОr2L'QTi1Ĺ. RY(kJQK2c$݇v3cC[R3fT./[Se{lxn[KW/lK/jߛ wSkarZ/$MM!/)̓O. e*f7_&b9 .\e(T EqqqiqamU'V/jizmQgx㝟??? N.WKSNF ALp4,NcmeqY N/+҇'.^L'>ۙ Vh5EsjKҲmƊû|՟ow/ԯޟ%b9Ղp6Z6 )*#脰m|;`{ h\e_lX`ڇ4B|!T4Gp*5fՕjKW/]ٺinچ}wgmk푺W|p,'r2L*tWzst%eaY9^/;R _@>l3}>T2= ;u禵͋>ґΓn?8WRp&٬ito'a:/,spU8r;7+s%+<+Cq>p]vd8N,Gh mmYYYvjrD<5.㩅 m k-Z;3b̠[~#S-A|P" 'gԩ`1Koa2 /UDw2ip]DlL.ƇkE fKkt&8TBvhOa<|gFGUcZ,* pS#Xwi^tWOiӆ#YX"#%~~LOO$ #$M\PZYώ^ݒ">V|{~Gy'L8!,dZִ Z.ԁ_Yph8 1 lbQ'2d3NЂe-u1EȞ {"noX|Vd6GNNU\rB[Zcq.Z.N3f6ň}9>Ow1tbN l]P- r~S-(ź0VDڜ CA'hx~خ 茴t F-Nn 4<9%sb?F.XkA ^tD-RZL%p7ŖbrغZNx-MԣARZh0s&*u4X{vX0'TVkǹ?67Rϧ8'Aih Q'N9P?;T & jۓoy18N=*Ȝr;"Rj1 IM4rC;^F2qr*lD7Gj9/NkQ /BQDЂtZ.#.e2ĹYqbH>W63Qb^ l]ZJ@bΉ>ᗵQ}--X@7!NnYvvڏTYI"L j"2\ۜ$ڋ"dSh?Re!%hǴ2QR'&(#U%EdtW܉ ٮ3Nuw'E-rC@W N2~[;8'ڏTY 1-h{b68o{-N^69i ONx GlY20I lN*NO'h\#-x_¨i]iGT8 $?1C*RX=]r Z-X;^'C'~T. 07*´GE7v'h Z87F**ejQl]qeÝZYꀲ{"óCX Q'5" Ce*L=u_he}.dX(87`e0΅}j\hȘ a$P-$DZ`r>r㝘 NF}Io.;hx-ݳZ伥m^=Ȱ"sɴA6uD-wlN&g;"h{ ;{-"Bw;x'覘r2"ĹC@geGEB{(Dz9B>D&qnҺE-}QBQ-WOg Z.={"{C ]xO9y8E8ӂ qZgр-#{jhߠ$ w9I,"dYD wАӹ-)[3bغ< -Vodqŀ] cfjsrk2RDNT\(_mrODe!:'9XR'T< (S tp@ NԀ:-}OFrĉ GLJEʲx=iD-C'bۍ B 7;^`1c}ű^iE->pSaqT$Ip[dQK 87G|#g_J򯎗.iAK8^ X謅pn䞈 *t' ZtbKho O'RBݛ{V.[ndB{ L4rBۊ4{NJ9" D*dZkElCX13HP-BFvԂ2U$'jܫm-= _Z+^/B 1-RsI`a,5eiT-^uZ׀\18 Dwst/Ǝ2;*WVEx-?oM/jjp*f73+i`g4Zȝ=dzs\+G\ x& la`MUՠ|S+C`al.< 5qBx,B hd(S.W6'Z(k [Z*şkOמxU8XvuK~Nowd] 'p 'yYejeZ^-Yf|s%n~ ^9U/vfIB6Ʉ,+TU JoCxώWNi{fˎ>%>JXŸ;:u#cbĠ8H9Q+D[S|vw7[WyU 4n/ T;qTKV F&,( Ԇ =FxE< T,n/'NŽNܔr2 p;ZOVI2B|C*t ]ggd~?V%f{14 &M\X0Q)JUe|. ho3¼!^?&r2 ?zYv sa>(n73T Y*f:K>\*غYS\GIaHnI8REra:t'ԩ,'ɤ+́͞*:{2\=]nBw'/sEr=N|4)1WG7Gy,G.qc> stream xk`J0:$H)eC)RR2""/BP" j(Ke؋Dw'A٥E% `t2WP] (ҷ_v3"*팵OgFaލܬ$=T;oڝvoϦQ]qUB@ȲU;ɺodT"|yPHp!L2" ׬LkS zz{$ӾUM]& F9d?:,3;yNPb9DQ@!s-@ #&] @ @ @ @ @ @ @{'2n=qE(6>ȸ>D^xp{"(҅lD* "wI;ճ Ivm􆼗k)P<]}z(w_4tE#=e+Uᴼ4ڊ|cAT#c ET͌òNA (jTӗբEUY~F= endstream endobj 27 0 obj 648 endobj 10 0 obj << /Length 28 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 258 /Height 85 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 26 0 R >> stream x}TSgO]!$|oM1P|"ZAEڵiU:ZZul;SV;3jjcv:;Lٝsv̜9=svo=1gMy~'"ѴghticEwdkQG9*k~ _$k >Gx^iiinzVT*=u!wt tEu? UbGeAa.,dG *\TT8>w7COo>-o7^\VGB̑ z]X7'Vjŋj;*Uy:6*)%9Ȑ Y"QXhwȿ{CߍS)%uتw5]_'&7Buw]o,:pg8M uas.ZUYAe2D$T`X4JЊjmYGSWwā|G~88I߽F'}զ"UUWsZVje(LHWaBAӴΨ)pĂeMU/m[3-Y6.|AFP)Z֓CeSf4G&!VҴNSe m kσ_G_g੖O_wLKJƑ,W%#$|y@B洴<27G*E*a_h;\/ioO7OOXpeNܓ1mfRdcY K:ĩ6u&USvNbt8wAcE}C%!˥D-&B.4pMOтL_2 WJ*ha-יNv$`.dZګ)W+ȟ.- Y8`4+>WԿVnG!vpkʨS!D|Us]ZK̫wj 'si]q/}V;\qA>Ba;2 >Lt`nn4h靪ΑKm7{9Vo,wR\ķ]?E,S,o ~?<^AnnGT .wTXF _`+HMx7JX|X(aW,aL>%, (aqc F o?VjnHXAQ"cF "Ij]~[^F ) )ˌ6/E+/ x7JX̰XR?V<ûXc(??VXc??VXc??VX xIpl`6R OWpe7wfb wNb w6bwbwߎ xwI^ xwIn]! xwI[j" >['i*x; 6 + +@gc+ +@xQx ~S.Frhۿ avAI0w"pD3/s94&c WÙ^Xfw"H/p^Ax77:pzEc)*TW\`C sxs>CB7k THЅ0<|X+ݯw[k-1/S Yhl.!.3>}K]kWLJ'#ciedT`8XGӬ:>?gS3 Dwz/`0R#"؊ D. w3o=0zʥ&CId&333xD"E1 c)*Ү!ͬ,$~J׿r nB6.W?_d w=l''E)6[+5+)LV˥Ri+ C҉F؜MV+Xewa<yt~]q7{[ ND+x'{"j;rm235(3L ^&H$d4 )D Lf팴Ԣͮ2$BfT?Tm5 YB} FI qam߫RSVdiA͍d1MOiHQdﰌȢ,*r<h!j{~ϰ܏ g R`F&gՔIWEIwIDT ]Cց$/;ӓ#/ʭt&naiv1nI$D0&pЦ$ʕ9| e$'^̺ϐ!'-#HkjL]AqZ(Yvy*BUײ $"Q+Y^S[`2l*I:$H)XL%9A#(Xrk2 s2> stream xgaz*^PZLm&ꔙ7vrBH=N=dme)S:Ce^&J[jaO~!_yLr"0/|VZMRt4 Nl@bmHLHW1<(UGϏK:an*)gnUՉmI\W1ZD93tZićNκziS:aޫު&uSU//#Y.z^*9rza9ˡ)\/CP,b9ˡXr(CP,b9ˡXr(CP,b9ˡXr(CP,b9ˡXr(CP,b9ˡXr(CP,b9KG9WVQnW=V+_ݸTXS2󯾫vҖ)gXwZ GE+úK~+jM^K^nFMk%gR]\!S*(ï%sY/K|ۭYsWlSȕיd=7k6NLܖ{N"ERn;mT91{DM7bGN2fs)MɰJ@ endstream endobj 30 0 obj 690 endobj 11 0 obj << /Length 31 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 314 /Height 78 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 29 0 R >> stream xipSq}lvVkGlٖx7Y^=6qH05fsI[$ew$А)@0!@I t;io%L_is_+{;&܂_Z$NMMMoookkkoK"\PZ[_Y*+r99YD=|ek4g{j͙Nr"̒K$/s`OOπX653:481:fthӊeώ/ٰr W#6~jl?ղcQgCC"ϝHh-ey$Bьc?kK幪mi&U+%bbvb"oVgerAikܻeê%mW>1uWWډOO쾱wUӻ.\HGwV +%ه{}^:>3knܞu#PW6q3 {z}Muˬyv]1ДAOk\\S%a4N7qWXk{ocw/ p~ \6MvvC;l>N=&ck?{&pvyKS5MNBڒsMdTi\wqTz}N)%+i-4Jˊm:2ԳbAUonmbopo>\5"H.Oɍ'p ^[?tX77ZTUyST˰\.r;5Y^s :| ¹:JL9cLn >Ϗ]vGtM.ܦ*0Z0sxզL**UKwdkpfG4818 }p7҈bݴ/ [Spdl̆owb+2]|;oQy +|jWQ.9w^W{a|ϓ;.sCpNPf3i?lN}irqgΣ-yVbʭG@x^oyH7 a20Svx.7F>nE1꣖hv+, ^m^X!}M+  k-hd M~wڪ[.=wZ &x |F%_ ~OjZOB̋#K>iwBz\*ᥙZGj+3vc(֊{8X+֊ ޫZVxkZ⽔H Z_nZDE,4X+@wVQx/"a(rCZ/,ZZɜ_hZxO@@>nVއ_@6ZQ>UX+ ?އ_@S/,*֊ƒ)֊€)֊)އ_@Sab;JX+N*֊SAt"T(bSJX+N)֊St"T@b;DX+Ni4:Ձb)֊St"LU(b;PB5? kNcSaUZӘkYO)x|a=O56>{Xkl}$֘ =bKZ'X+vbчZX+/,wPj}A4Yt>? ¹+ pn3qPJ&jnzyau\'2cWW9UԞ\Hng;0tNT\ כ {;jBA&.7;uz9l¸A[2cEJN9?-7+Ǹ$GA6Uz_gC?UFTCZz%4,0iHu`+mt~jfNYhMm2s4۫r4χUZ!KQ=ċCNR}vDQ'Z4ע-q*\֐zg~٠NqkZ Óy3V;<2]+sqVĤf%&*9벬r$UFkRJܑ[1ٳ"xɌUEF #`/kql<2KV1N"&M,VHdLYIXҴ'E BK֡9Y\W2.g583䭚mUY*EJiR&SST?HĊJT' YlB6> stream xka """HƐav" b,`c0֥bv.!QbD!@eRrzWWWs_Kx'NOL_+ܾ{s)wcKaչɠ%7<6\|ji~m!gsىaպ*n~??^:? ?2{ . z W8Sb[9[喯+óu6Ew(<ۺG;2qcL>F)>twhiQCWb^^lFv'Ͼҽ L\:*d2{AEa\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ RFb0.1.)}{A> stream xWwq~4~7! !BHBB!B ""ǪʱQ:TTjmNTEcjvzΞΞ=;3ٞnwy'auT~Cޟ~ #궶 bx|ζYEEENgUϢ Rd2ٲVSXZt8yylH$E1 V҈kIAkkxm% "`uﯩ*5s)VskUlo4)8mbaIԋf|̙Blڴ4a޼ydv-^0Eot˓m}j`uu[7f!vȈ6 XVLLIx.]OCCi*EW>9ض]ϼ{ѫ{x#o;o^^phϖp٧'+#'˻0^48^ܹ!{׍n}̇LdVO*hd'|+\cX8\G>3ٺe–*OyUڒHŲ`ñl^GNK[jѝzk&'Z.0#o*/yjmheY,'ҥ\jkksa, Mس}kG(XY ye⏟c_;Ր)۴zUgS0.#c5*QR%elgم cMzLk+x~+?+'ԓIU" :_"a9 $ Y:nԖJG4%)N/wťpy)\INLz'bbxc!;sj{ywi*,rQng&V A~zQ)(4i>[v:9f×g28Qxi18g]›Q8*XSق5n/]sB2Cj&@s""/5`WÛp D΄l΅B*;߀i=`-('lm(`1AԤ(VhTNr)ˬ-i.E]L4_vH PPbSE\KMWjWq e8V{g(K,,/3X>83rOk§\\Y\n p xaM] J[v^,`Jfz.1 n&,` A,`uG0  fֽY 4Y 2 `0(M? &McMK钅<[]=x0 4m< `0hzxA,`P{A,`Pꚤ `0(Mj0 Z  JSqA@J, /UN,kWXY`MG^ Bzf7{aita>N^zz0 a8gN7`zfq{,`wtfq,`>pfq,`w>jfqs,`w>dfq,`w>^\ fM.gY, `}֧Y, `}Y, `}BIY@dfX#G`A, -o0 (m>,48.e`Qbı0]_f‘v8b#|CP:$(\0+as" 7죩>?3qdFzx$𳹉8aM i{a8AOG ntGCBmi*m,A aw p~R瓏WjS(hO6\hT._ Y,lEY |{Z8Y kEN. A p"/]\60UUjRg+rbDz`T r20>_7_o|io6}LĮE:IVĨxjPI~Ϡ 52V0R&'[QiNja{ QKqt[>W},Gu_/wɐ]Lh20>7t8j fvFjZy" @*e; #eP^7kvU-W}ATrz.n#ƉL PԼ/d&p境6g5%q bx JE+ZS$><`bMYUƐ 5-`=`Ȧ̖huCEfE78O)1)D:@%ʒ21vD:>_&j3h8O+WH,Z]E):ݚ./(AMCwi$T[0J L2@̙k#gR RD hE.Z3H+JKX)p22j Uaz R2+JDɫw 0hT'R2iФUK #ukJM }zYq Ns"1E>*AQ"Qc|ZKFD!agĎ#&BJcO ʨq$Ydn,ф, pC d(fdȄ3,1ӊ:yVFlшsT!41*U~AL0̍?;d32L4S)ieB}!dJdPdVd\dbR_ER (C'"/#nIB@1! endstream endobj 34 0 obj 3738 endobj 35 0 obj << /Length 36 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 349 /Height 90 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 >> stream xgaz""5Pv&Ly/Y2zZDU(!M1Te6b:9ltIڴ͖lo[<ߞ=?_}OדFnL=:?_8O>z?s}d07 ⶍ&6{{?e;/OL*5L{vs[{3712u:V3C^[nޭڊ3dy̺Ѻ~'%]3tuz6Z%-՛Q͍ ֋C‡NVX#kND5MՋ5H_ 5-Ջ5.ߏŏKʪkgyZ*TEbt*3rqߩ^b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ b\ Vbƽju#q7_=]Փ!wOyZAj> UEsc:.~7FOPZ{|ZQP=T[v1d.Jt_itRot;F":NTީ7VNq4;Y'KAy\׎&RTZJRnIDmݴG8J%G㑠{nO^epzpÄl>g U# endstream endobj 36 0 obj 781 endobj 13 0 obj << /Length 37 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 349 /Height 90 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 35 0 R >> stream xsqز+YeY,_%l] Y6acs!$@ 0LdiH4 )wc:vLm'Gri4`~%?lӟ|J$`O7⫪w:++b\6NbOܹJVhhJ^iZR҈gL7g0K7芵[ M 憖z׹3^Smqg׽歾-rQqyjKI@2<+MI ,퟿ho֭Y|kDoo/PsފW1eE_='{C22Eơh@2. y쁚`[frO,ti WϧW*0i-Xߗ-:S/LiWB3622"2w?p"W %zRIsD"sinn QA-_`͉aWgx~|;`U}ʾ,wY7vvX۲8a0`[{|Q_pLrƨi9RÒ| EL&)klA8w? Sώ:gL&q>gЗ3jޗpMTm=s^p\\5feejPj[)FHYi LfALGQHh͟Z\ ps)N/pi{wձ qeY<ȻpnN0qUޢCazCB]o9 v@)*dlxGA5*|USPrg{'W/p Nt[p·\B7w ot±ǃ;,O6\& 6PeIH PpBġ[袷M*|o H+LT΄\\H#1t ns1/ǺoZ[-JO<_nֈ dŽZk[vM?j4耝$qxލ(\MWbޥdH`#sy~9aFMYSp"YWcufKOM$?. $w>!Œe8!xflp ~ہyk۔uBg]qC3Zkl3p"o;&|7!v3YF#YUatXa_,18z>{t>cO;b:Z i7C,l c360 ({0>tY@ـlO,aPFb|Yi 2 1_SȔ,&MghG\lbA_ˀ2Ս4w(\h;>ؐہtˆ-*=,Cp6Re֙<;#Mx ΄a*ϒ,8az@\DBE$fZE?<] Tnv&n7 VS 2Rf,|ZRWo*뛌::\k=.Y9M!8J)P{-=yW OZ,!BUKeY*I-q[sKU]ea~epjၝ5i‹2./lw&<^vz5a~p!^n0*6ZTj|; Y94SH_e֔ 3nj2~7j`AѯCXSk+C ro_0mo26kE!䪤G&!_N'PKj)HU|ye|6dboFl~c[X) ,dJG~^CL3SUĮ)F̂Z͗HBJya3P| [ J7ϸt$j2c9B3D&CCbԴ/h"p wBjM-(Vr-Q.^Ӈ90O-3ke6rnoJՋ]Zo2n7Mf l|ȈɠȬȸFYVdUJ BIs>BGI(G+YELV )ɛJ=.LB3%!WJrIe@P"H!TCJE. W'Z(U+kZ 7JBB趐TY2HȬlJE-* i W)*RW 0*)sbA> stream xŘKpˏB($HPʊ"&cTFI2ccFJzI<.0Q("nR. ZAoZo>{E"m&ۇj|}JN .~X_{K³+w !&.yxHg/E:eLϗqr!_lui5#>\'5pP\'VOI)BgH[SĤ]\2AtHu >nE4es+ t:>N(!W\"'e2 =tz7/"Q^r S/ ʲfWLE;)ͪb"nRѫclՋyA3*cx^62<}rޮctE\Y`>>(VU^13Ui` kT,=#0=$ܪ~ږ95‡r0|Z1riԮS+[#E91-vzv](r4 endstream endobj 39 0 obj 761 endobj 14 0 obj << /Length 40 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 121 /Height 48 /ColorSpace /DeviceRGB /Interpolate true /BitsPerComponent 8 /SMask 38 0 R >> stream xyTTw'(}yUEQE{kY%KJM(BH\0ɨ[\15Ǝӧc2[O:Nt{=ܹ=$F%Kw{QQ7+++TU5DՆO3}ʒͫ[~ʂ,ޛ %4%Am&,\Q8E.4K :N<%rF$NgV溬YIYiN !)x,!/ZG۽h̙5/hn_{P_wϲ|τtĔ<@ºH -;.ױȶ'?+0_>>mm&BYRoBX4 azmq^n dB17gl`0X_?Ʃ fyt;6n[qzx˃Oڮyo~i/ձU\3T1aLGV{Rmv]y3sUaϔ111P$nl4M{|['gN8s/Wdžsf8xv36͚D}~O],ΐoEJ]UFgw"i|{4,Zdpc~wYmઅ-S}ג|ÔJcxߍsGG3r MR1zղE{V>g ULJ6}~/_ٹC>Ut5oj}~*GϺw}oE ?- ZPrl̲Ig&prwi_ך#">]Ȯql&#QkQT<TGqgH$6Ԅ״/5aMSUѡ~8 WN~ν)`ZU]VmҀMJ\&ib7V!i1Y\\s0*vWw/޷ejk}| zhݽca?yZw=tbK:)QTfWS~.F$*2n MvFP$#Ö~FLjܱ#;.swb3cd go? '//\xoSp(l'~h'Sa")irY2lRҁ0\^1ӼΥ-檲;6x`O\࿟lxNOjppNτpx gÍp f}ܚ{ d-`{G ..(WbS`nG:&tJ^1kj ~g|Y&cv0KB8Hb8XLA'I-%?Cp53ayca@fIE1J2Mr^F(`q9(Y4"imU*+nr |ٱ9o$\";Py)D1>-=0Xwtu¦RIvqQme&1@3eLrƭPd,N- - v?\|i7w~i*7y:&ěwH&LO?CT"(Og;I)JutܡL kUb0h8 .e-=OnZrpgj[A:p!y} "hbR 5X IzQ^b .S̉FffIcb11\\UԜ|ûU^!84ggwQ22mú|bi=1! /[4x\cORZ/̳WOjȼT8M-paj %ƛf+mVpHp'WCMrEKm+vnl,! XQyW\6q]mD}TKL'V p!k%^ / {fžJ@ZJX>Bths|2| CPUvi! K%Qpȵ4(X9rs]2i[qIWkj`x졄$귩],%׈?9~hFˇhhx(|{ Ca0dVɴ2;˯9YkuWî9NGMlD!&>ˊK:B\ګX<yZ`\[NI8ɦ*Q2Ag}Էڣ0>-Qo# %xG}qK3a[},_% ho, lʁX$q><'IJQQQ4akʿ?Gp.`U b "z%`hAi# ,]̿7ڠ3[= eC&2{*Y7ѐ(} a#iFYI>*Fg) ,0\tYafCg2X^aTUc0[$QE^oipjȆ9Y|/\̋q7X̣(k-b A\Fa8QC̴ؐ ;M'MY _P #3ѭXl%Xh2.a2e$ ^IN'VpO?D4谣z>D XK5nJV!ۥk%aK' bc9ɇ)#w1Vcr` X{&&)8zA#[yYC]#N5IUJ5X`Ƌw |#zܰ,&N&DD!玪X/F5DɊs .$e{4T vS0+\䢄׸I7<ҁ(_~7}nck7}K_84%|ZLT<:!6v&mNU IX} w^q8a< fD4PN$fk,VOkTFQS-Hp(#Ħͩ*oDH>l˂#7hM'\4gh0r&&18Jԑ wi:,D?;ѳe:Cdo?%1N:.%: x*V;ԍ_SGNpK'2~;KH)69 XZJFR45$wIf+J4hH.N5h q&g0}rƏoA$& `!;cTayIMr FBf3b}*@H!e$(u[~|Hm8|꠱|+B%,#I  L{SppO2N?Be#D0QYI)6ASWt4-L VyW-@iAcM΂tb_9^2SoI̗fl6Ռ=*UL,,b4p,!~<o 5GӴ_kQpjWAǎf2h㢄kiG.[+h82 ^14b:Wc:A &@Ȁ`9XbX,6 gl?Bs_;6*APPqwx.%?EnGō9\8/V]~EM_߯/'Sń1mLKB, KChHJnܾ$qjRI@8FXR"%Ġ4㱽8>11*UvT#7Ae8J,4,УLďGN.Szݓ.Ch) [T=JY>hWF> stream xoSeuH& L@T؄0$EQ,EcbBi@D ~ Id!9 26*9F^>}nIOzox BD1$x丝pe*)/Y>r-rŬ{U^~L58H݇=VHpڰ ob |IVbވ9vC{gx?HF<Q._*p_&0x(f݂fE%W:nEʯ&Ӿӈ[Y¹}pq72c;o`O Q%%V>{Dw)7 ynYuk/Ѡ~qEnx%w̼GD g7DSb.r5yqݶ}e$y9Z<^*}nB 矶Fut.2Xi m!,i-R[N'$27* y]9Vo!,ˉlٸ#zº{h* A9Sw_Dmn!NfqCboM"d6otm-m!ɕZI-K9屽U7?gmoA~ a]n=4ނ¢ނK.F^|2{ [c/1vpy[Bw3 F{on a~@2LqӷHBwow_ܱ;xc;u~YrzNxzp(Vj0nU{Ë>?~_ڶ..8 )+6|5 f rz;ząW>?}uAV -i> stream x TSg?piIHH $@d K! ԊVں!nuZk&.Vm.`Nߙbv鴝V?$d7A@=s<==ss?>|Ã,",",","˪ƎDT*\srzW###E"LJ=jǣdC\rƌEE99Q*k2=f 6ua( 0YɬYœ AQ Sf=Æ~|y" EPǓdrQ~i~fj|BSI9)Ab?R!_ "SiE`|}RJC^ޤe\,%Z<ܪjmF^:92(6D)a~J>5E2)L_1& =2 s2`VǏ+ߺtef2iyhEZ꟨E0#`E dJ~"*E4jeى!++79!1R]8!y]kT1xMΟ?N>1?UIVpY1bF?5XHirMMjs21&f|LTIĭO,{vm.֝O]3%ZX% +-,cIbҟ32Iinƶ[ִ̭X3/n>a˴ICxapJ@(Ypx$P!ex}[ִW=xʛZ.p_V] /)6dJW,H 7Qb?LF% &IAr͏M=ڱW߲O۪oM٭\7MWg˃?%mL ,%7)-Çcw9ٳn)@g^tɩߝm xgs^OSͺO(5(:re$ⅺ0^;1Cj.e6'gڌN`srw6~W {WbE|;=RrG|ɼaQ/H  MZ|I-Ca,lNk޵veO¦vtl1|wf+} ;wk˹ `D4DWo1-! 7FFB._DN߼v%kKܲ:`u}{~?:8Fp ׂ#`6xq"FiaתTZrT0x2 6)Nmm۵aem]zq<ڂ} &p) Bp^ϦMco/nǴ`hL йsYNҶcMÊڲ7R -*Nzۈ߬Us]-x_ >Ђ\!8 Zڬ̓cZ` 8jRP(\'V>'Uю'g7,x} e8gZpI\Wts^ .T"-Zhev-ϝk3mΎw7->N>.@Wu\GvZcZ93^ |F7sݲpC{ɖݭ5پC;^Väݧ8Hn|^j %[#gmpR|}gۮh:Xv=ur}m"D腫hPK-Hb]Rىϯ︺қמ+N~ҹ>hP*c-drչ׶uY97ccv?H9fz8mIݝq'/tn`nC=|'ɝfpc.ҜX:O.dˀ ?prg~u/^'?n.uI rb X l]0-E@ŏsd.h׿ Q'?;=N''Z`b\&-cYf*Jn.A:R("'pcvrq?x`~ɖΚ~nA0'ZߎZKu%Eƴ:>Qh:iZ.Y\;d]ϯ6."NN[P'zF8QEq.iAMVznBHs"ZNSSmbɩ9-ЙB{lkߣN>49K-fr"Ӣ +I Z0jISEV6N'Xktcgo1"3(NpĹZC812V%K',،IvNnڽxS7޷ /MLN'b엊86GDI-Osk]^Q15/C'9t; O0]*KERNC1' ?\ϑɯ_!йw-RaOj{X؜9`7Dr_[Zk'щn'Z\rh E&Nm5 '&RoC'MN"-}ɥ؜8vƚC{'`TiH yN/e:rZfC_ HE 2#bہu,"'褸 ` dͽa"W:r]*M<'l`b~ǚ&'g"͉M&GN\B^ jsK{m.q}p;lNN.wrg<Nl\XUGJw\غZp Iod1c'p^l6'=zS>vZ*ZѲN9#X: Il'[Dq΢nk-uDh1O64fhCg[;q?'dbh-Хg0-!pͥ9-X6`rS25eyYN&еɩÉhb-ŽXĹZ<-طDkcu: y*tP'K4]{~>ɉغ`Zh9'>C( 34MuMۅt<1?mq2Ɠ>k m{NW6)]zzF8s:S,d'NÕJ^XsZ~襤L5CYrk}zp+Ӟ NWˇ&-/rA f-X&eٴ_ݴ`Eh?zg6_ޱܦ3M{dP 3*f0Z-A\:(@M;1&F3 -wN,/?y&O= N,:w/Z=QpNE.<4|0ڣ['9|ND.% CLTB'bj0trZ,ωXk1o oL G˃0'p3$++;%,?~chI?HRy/?r-f'tʼ4dkm)dtBFK+K'c [vҍ.xI'f-/ւVZZ`rwN41y[m\T{^YAa,IFy/799Cf@egnkkNV*۰pOl $Z`brjukǧkqunٛ+_py NC~,Tpt;[Z`i8)3rrVdMZ@'?Fda,ıho<-c%~PK .<-z~ƌS*&e!?mڥ;Xz9eW_>v~~ƓNŁ8Rc2/t%w\ ]-S 2]ʠFVyy F%++P\RSZxf+,Z^W6չ-GطŝLI'D`,ab:'jsj^;>)SZ!`2(p2vXN7EZ^Ze-~iUN+>yō|{ӫjo\ۇ~KewH*Ђt+ŌD.Z }4lpR?="cU\ c{1|G1K>uefuSo㠆{Ղ-C`kˆKUʃ bCȈӤ\J˛g#oHOP]Zi}mwn?[*7MR|'2H*ż;p.xu"S x"!3劽iel%+.16"^|C2(T*KKKKT/3}mͫZ2>W}]'7Оt-]&- |b:ؙVDwQͺW2%9Jv#a}%cyz}ue겹3tW3etx_ ._;E@J`{,rTLե şrƋ )c*tO_w*)))5&M//Tظp5KNjVz`k˭K}oH+.p/F~׊dT%T.j<}e"X746/I{׌r |i^\1\({򂌔肬-jfO|nSW]xg<#T>2!OOH'}^-Bξ"X"Vkbo~Dae$/Q'S,o!݋Kb<{ 9QꒂU kLXYgPW4;b]nյ? D 8G[.鐁| |]"|Й$=?R) \$.PqRe̘G(b'ϋ;@8\1P6d%/*h)(kL ؞'!ߛ2p +'KBx^eY`/G?CU* ڐ.ؚFʣ0(75RȈH|wR[M/I XNv2?kBp 4SvZnNN^HO#>trEk>޿"LdD dl@ɥϠ|EDDT6S5B%F'UIj5MY5_Zn- NV ZNY;_Nv!NZ" o*C6gKESCةrV|4o}4~BAK )E̤H)WQ+K4AU1ŽC-n仁ᶗNS] iy<IWE>5G|E41c")شD Wp|B~QR^A8.xR|J>I*]zrM7 iܓ )#'m \9A\[0D[#aDByAo8y{/ҷ)XLRy1|V hR~F4^aH `bXnr}vejK'Ux:5;SJ0eeCsY^"ѼC1qj>M#C*&Kiy[hqMq'N%WEd C#}J0"a{ Xi 'в=_i5ݨpZw8TbvR9!NOs>k6Np}_&pl1_]6NI1tirĜIӚD s9[L˕ouvZ3%}ָe9) M,$KJ1\R l]k˷ Q-{tZ6.5s} lNP'i+0 غ`Z`LK q>nhBq&sw\+__'Z`ҫ-6g GD`N:؜-uq.HMOm.NI1d{|et؜ >-^ŴT:L bRo˯>ʴ0t' lNIߵ:B-6qo˯% (XNܧ?8ׁlmr.7urW'98 b{'NI[9 W}-ok{:|9 NE4q8^Q17+b- 8GˇZӵyh 5whN"pR{-8[*:Z.Pق^-7FB:N&OFm<0ve4J^˅BD0Shȓlr, nYkƇڅ -g y#@ː 0-87B@ύlF-Hj9G"'0ֹwc^Zl\Q}p{~#-uZN3Y*"rmRwN`sb$ND)rhlԢى "'U9eU؉غ -}f^7`e9Ղt ^w&[;q~aiY'јC^K_Ndyq'dU}\*='be(tBpK'ؤ~qMk%`?!DʼnM ;iD{]k''+&:Z*:iž@̱pVZr#%!1B祢kEn='r蝇# V6qF*Zܖq!e;)xh ӲՁD0-1?zغ''2 ~ao}NdA/mIdMZhF:qPq. 'x2؁=F l].\j?q$;'2ܳ;9f%-C{Mhѻ8qYDZ, juNV˃`! c^6Z h˽ܫh9DTlq9c%@&UwC-;LC{k'kJqlNQD;_)?0-DN(a R%Q*KlDX'\Ӊv WĹPK.*T^ ^n׵*ŝL5 #R@WYvDhy&-Ub9"'0I'd{?vg/w#}N7%vR!Q"]?z\\'0\h(F:5VTh(@98VcDr?CCB r;-i`WxY ^ׂ2Ag&x)lO`=d9l/>6,^aJ* Tk8Q?e!M?ׇVuP91hx2 YCl\t/7r qyįޯR~57NK5IwwE _U_NW.O0.{-d`i,NnI5*S\ ag~7CiʫU!uM9Ҧ4"d# gj$ ^, >3)DiKZ@g "yX䉌Y;#eMP񸀩qӥ3$3%%R$Ejn^('Y2lJ2%+\V(Ej!?%J(A83z6V pR@VLtBU}P6qn fGd!L;+fMb1eX s Rd6bRK0GT N| @qFB#EP>5 e8"NFT["L?s#aGBZ@Uz#axRddl]xQ?[),@EƢ(ٔ 6E¤HR%"R=#P=~^"?cczhB90:JÃMK'0ɡ=ʦ>¥>ʢf=¡?~1c<|\kr}ԃOyzb>|YW?> stream xzy|Uԭ^ӝ},$ Y, aQ$ 0BDDD61 ,p2#*RB(,6kN3 {oڃ [ ~B"L:nXk:Vتel+YP_WgODXBH|ǬI Ʒ§F ETwl-$ܰI׉|*I$||ƴ =V걅i -_J %em_H;xI"6氲hEeDhKyφ ] OkDk֘ sty⺸.546,Nzch4zظĤh+gb*A3{&dK瞹Wݵ??+3--n|ڲşGC|绽{Ο25&,⑋IKpPZ}'qHoVDa8aiRYqQ\nGҿ6^_טgezŋSz7VL=>3Cbbc.(+[k[߼#}+Fwi~Rk$XCT"8tʘ5 PXc@ Jt49ߘnN'SpZUU=KrgEEŤbⲓ(#ڈ1|Fˋ͋K*JZU]S+].i{RSRt竝/uˏ-.)ŖFƔJcC';t wPS={e^Z27._:U[S#1XFa'Ѻto;.YݣޤsCQV:I34R 5OWTf)vuLIeJA2^m(Sp3&vӯHpQw~5%v&HՋW쯩yulg}l붭ol-CL-1q;"ք+kt#ΰuuP| jJUw5H~tih0 ]#vTW=/>z򥧟޽_#lύ &сTs$᭿r ʃCg@N&mwPH kvcqqA4e֟g;_lM'tyj*5M,  (V*(Hi[7E3U:9"BTeK->KzZ2l1+,J22m hntQ{0FNUfRTg3 *UqLڝ.%^ - ԜcZD? `n|5(eQx+O)k{JaVWΆ7AjFRƦK!]%#0;2{{Bw)/uΚ\\ĺE ײNOMo/fŅ;8w yn/7Ոҕ[J>v>P<.+ ['׼S sϧN5cy/j󖯾(8M1{ҴK!ǎСKJlUY|({xLJL4- Bd^PdNCd}Ѓdݭdmo$Q+~³v[#ևy Q#2*o2c4GvӗP$b*D_)D&rTh$CK:m)]=^#0.Lrjl >`gZ4jӸx>_˷q9@NN<9tpD"#xRYŽ{(Ckն5^x2"4 .䲮k-M3G}ųI6f͒&l6;;BE#Tbx$kpo,XC<9yʇk$MnZً68o@n&\暐@C dʒ$ʠUrnWES{d) iQAmo^|ӳpm^YmGE>GM&zD<[eg꤉ǧU_<~lj"BЧ6O]6f\ߍ{(ڬ>oo|̘0o7|+ cyBϓ.T0;IMEh1K;쌈`:&O*&dٕ™^,ѕto O''89smtNN:141d%!d$׸Iڽ&Tu;G;(4ZVLKRh%b[Q,qaMaMQ3M%햄ݰ_7Qw-ӧɯSQ|B\xh-Q882HjQ,a.P"3/2T ύ7҂0&u |3rB[3nY?Ao-{博UO쪩ɮZh/&y~IϾBO܂DG[sH]B7`2$8yrX\Ui7lI`Uy`E‹]j<9dŬd))@*m4¥DH!Y)$RKr"!c8')΀4>]WGh1K"yYAˡ\*+JRI7ͰI7ʻKrrYiS8C4wD:q_2 _ѧq}5TsFB.ި;'b'3A#SU,ɺiu49D y+TO}U2* vp-,Lҳ=ZM xdHH ;Gc٧촽;Ǥyg€>EP[i꯾՗Ӌ"jV%4P21; G@_bv@Ⱦ׌/FF{CW &.'UWW˞w/Ly0[ pQRA:t:d%!j:Aۂ3Dx;oWKqyM5%d]Zؐ*axI.4$Rϧf)P~P zk2!ۋzES?JCw!FQ*78#TH/k={u$b7'Z,S32?#y۸|zk͢sI6+U4l!`ThWekVU7oNĴk!-`4ɜf…%IYCT UЄR0 ccXgCFl1<,=RFWR& TJ!tƚ(Xg*/YGZ_u;Z@s -Kɍ\b3un?5vov=[T11}6n(LՉSӭ!N$NnⰣQhsVE 9.ݦh䴺:N`~@ʫC/_9XZMHicdY{bw!]pxu6S+I:e.C4c w;HF>Ǔ._K&ؒ]]>7L&>Z/k/[{#˙J j0 谮9 v"#6<>Fmܣރvmc3O/l61Ù+  quu^(w>VX+l;;mUeMh#)5[?|1*#Vk'"O-6~F/(_ZO 1Gz f*i޷̴t~90rum?E?GٮI۶_߾pJF] FrZ(&PLN,İ - \ʹ90DKJ6P߳$6F3)lo ,"mfǍD.ҭًMBfVZ̓o hnD]9s :/ zY:~hil%MV䥎$ءg #cn`RfA-#זSбT:C^(t d}l ebuufp=F9EzL``zpb#h@ёt]@O/їfIӻi>/h8%nAm;xoލ ́MYqG=#eXF; q% }]V1_O$q$p-$դd/Bw]!VYAa;X4sdCIr3r",ܳ;itX[HgIoitVʗ ]X]F!2Kא@A.YKQ$쿞%;I1Cg kƚ,ٌll?(=;J dHl0J/d9b% V?}7FK:=59لZVLF2RXKK-wᘇݸBRQمkGW@9l"g-CT|{,U22LVLC;TS`roE ׼>~ ga Vtem*0r,sU1*cXߩqݻH^}-oU*+U?YnZ uP@9wXAWL=z<㮩}5`h'_y~gIqh5i;Q^?~ 9-g n8@|\Rlg>|o5zF2G&y%>%c>k-)_&c>c|J4w`YH\E[ o1Uꏥn@\‚N~QЧ)fg,RƳ'!BݰAcִ{>>X>DV߇h7!^}/wc1CvIH_ _߆CqRsK!ѮQ3H^Wm4{g??V^5Jh÷ʿpf[3_sˆJhF/TL_\N+ᒀOK Kp~NGG @V™h~F@}4Xn0 xG xKpL@աf~ w_{^+ϏL0!Z P% e `^7燽n؃ $`ݰS ;t `;> o <Ʒ]0g4$`coPi |6w ]`nֽΟnuXW*}NfuF8.[|{`ʰVVa|Η XRJm-Yd ,.Q^^E XGm0_yip3i"<$Xx@L= 3L_PT,`R_o6 ^q0V{=0FhytH#CnGȳ]; ÖaqA0$·`n[ *aXw~[3C@oqC~vhsB?;%Oo {xoʴ^.ȴBhȰC<]﬐jivHB**tK~R]ݼ%ϻ I~H[yVH/ X7 q eH`fρ0 Z!(Rpxx pn:UpCl-4|L`\6J/`-B.κu@i'h={Dߴ endstream endobj 45 0 obj 7577 endobj 46 0 obj << /Length 47 0 R /Filter /FlateDecode >> stream x]Sn0+|LR^rCM^R zTvX,Rmwϻ8̲zO,!D<(VJϷrnUN؏idsS [ xe~Dqh[^;x |,c|^'<`ɏS)uHV6} ߙIh:S:8]psyXۂsȜ 8LQrQ߳6@;`]85p5|:im +|xX o)ps0g>jRyy ϖ=;ww)~| ǡ/})Qz܋4fyVy]Gh>rܗǕoc0Gg k{7I)ZYc]C0 cК endstream endobj 47 0 obj 415 endobj 48 0 obj << /Type /FontDescriptor /FontName /EPAJZG+DejaVuSans /FontFamily (DejaVu Sans) /Flags 32 /FontBBox [ -1020 -415 1680 1166 ] /ItalicAngle 0 /Ascent 928 /Descent -235 /CapHeight 1166 /StemV 80 /StemH 80 /FontFile2 44 0 R >> endobj 6 0 obj << /Type /Font /Subtype /TrueType /BaseFont /EPAJZG+DejaVuSans /FirstChar 32 /LastChar 121 /FontDescriptor 48 0 R /Encoding /WinAnsiEncoding /Widths [ 317 0 0 0 0 0 0 0 0 0 0 0 0 0 317 336 0 0 0 0 0 0 0 0 0 0 0 0 837 0 837 530 1000 684 0 698 770 631 575 774 0 294 0 0 557 862 748 0 0 0 694 634 0 731 0 0 0 610 0 0 336 0 0 0 0 612 0 549 634 615 0 0 633 277 0 0 277 974 633 611 634 634 411 520 392 633 591 817 0 591 ] /ToUnicode 46 0 R >> endobj 49 0 obj << /Length 50 0 R /Filter /FlateDecode /Length1 2600 >> stream xTktT~$0 !Gyv ڦ d"4` iJPIBZc-AV@`WZ߮sϽۏo?94"K҃)#GeqpѼ.OoނƊ}7dCesgD`Dl)\&βK6 ^'8fAyl(x/2-7N]T1wh맲5^%ReSCFPo$M-F pH cqИn44ܨ4ڍR.#k$.zPv*0." G]$ov&\NdwX[E }:6FP%7]QAC#`ٚNAWhD.ݖfۚ.Qۣ.Y6RķkF1ow%T/ۢ>BjΪ((Qb#ǣĨt(HGd-Rhk%Ө6ڭF Z&*G6͗] SWx0Jz#Qи,&7QjQta;1O+JլSMkj+R;;5+z Iy6cऩEulI dE"ؼ.]4hXyXN--K3GՙsGeq=:; 9WO EWۖ{;O=օBd?wtd+.'4kE1㡐Pm6ikHԓk45Λ7‡!\s*ś߽OC'uc'!-K50.ǹ !\ s83r! {xqZOWxQSq:xǃ2~x[m[o2^u{x12~x*W?ga2;ѲګZMtX58W*wxًB8xf<ϫ `_KхeSv3Pˁ & !xtTmSLd07 )c 3mj6 ʈULdb{Հs^s^w .Mݕ w2w$ MLs!5>zbG/`/'H@wTwF8%%#ftcpJ\H');#^`cęeĈY %CD,QSLCk ב%(ǭ endstream endobj 50 0 obj 1860 endobj 51 0 obj << /Length 52 0 R /Filter /FlateDecode >> stream x]j0 ~ Cqslrfhd8d7t0-$}?Yڿ2Ov >c\a)j.{Uo;öd{Q- ^\@C4:> endobj 54 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /MMAUPE+DejaVuSans /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> /FontDescriptor 53 0 R /W [0 [ 600 629 ]] >> endobj 9 0 obj << /Type /Font /Subtype /Type0 /BaseFont /MMAUPE+DejaVuSans /Encoding /Identity-H /DescendantFonts [ 54 0 R] /ToUnicode 51 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 16 0 R ] /Count 1 >> endobj 55 0 obj << /Creator (cairo 1.13.1 (http://cairographics.org)) /Producer (cairo 1.13.1 (http://cairographics.org)) >> endobj 56 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 57 0000000000 65535 f 0000076261 00000 n 0000004704 00000 n 0000000015 00000 n 0000004681 00000 n 0000006166 00000 n 0000072813 00000 n 0000012189 00000 n 0000018395 00000 n 0000076101 00000 n 0000028696 00000 n 0000033356 00000 n 0000038040 00000 n 0000043052 00000 n 0000047954 00000 n 0000055054 00000 n 0000004952 00000 n 0000005181 00000 n 0000006143 00000 n 0000011162 00000 n 0000011186 00000 n 0000012166 00000 n 0000016251 00000 n 0000016275 00000 n 0000018371 00000 n 0000027786 00000 n 0000027810 00000 n 0000028673 00000 n 0000032404 00000 n 0000032428 00000 n 0000033333 00000 n 0000037005 00000 n 0000037029 00000 n 0000038017 00000 n 0000042009 00000 n 0000042033 00000 n 0000043029 00000 n 0000046931 00000 n 0000046955 00000 n 0000047931 00000 n 0000052946 00000 n 0000052970 00000 n 0000055030 00000 n 0000064302 00000 n 0000064326 00000 n 0000072000 00000 n 0000072024 00000 n 0000072518 00000 n 0000072541 00000 n 0000073290 00000 n 0000075246 00000 n 0000075270 00000 n 0000075572 00000 n 0000075595 00000 n 0000075866 00000 n 0000076327 00000 n 0000076455 00000 n trailer << /Size 57 /Root 56 0 R /Info 55 0 R >> startxref 76508 %%EOF mathgl-2.4.1/texinfo/0000775000175000017500000000000013134046540014234 5ustar balakinbalakinmathgl-2.4.1/texinfo/qt.png0000664000175000017500000013215213134046540015372 0ustar balakinbalakinPNG  IHDRisRGBbKGD pHYs  tIME  $RtEXtCommentCreated with GIMPW IDATxyս{E\P$QEc"Inh\cpM1K1M1₎F12( F /0{/Uu~T^fcy?WwWW:uӟ)!BǏWtu5]B!tE?}28*ؽS}xGO:6޾:ϛcyLou& !<) (*ES>splEQ:.b籇ұY<6ϝNXa[†,a{( T̀MO)WJӳ;^YI)'މOGI)IŋL/\>g*z0̝lS˷ (*/^A}yv޿^*;do- lŠyP"?(8bao]<ͻ`ddCP5wD%mz ?C񥷱_~Ko_]}yhd;:%/y*,6~qi'jV F/$E"IHLLfw\6sT+@Ilg_ݎ`vALtyT%Ez?lB!MzTz8c=*xu[ӻ `z=K8s&Ƿy7 !:E"IHR$)CW$c93|$d!qƐ`x NSqד#ȑr$ߟ^!;mzY Cy✓r1"4 mgg''`t*tͨJ~(6u9$E"IHR$HR헍Gv@Aii)^w;Ϝ߬~߸ f{3Wϟ?QUQPsOz?lL=N ͟Dnÿw (RHDHc0<^2 Uj<_ Jpahk??8.q[#q f9lխx0-}#+ز}c=nfcޔ<) @WibF<(gT|%8wrF sQD#VrŞ_X}g~p4MCkƟ7_9||4N氅X!Yf3902!>ծHtW,)y]eag#X e4T\qV LØ 4UAǭˆ#x{G[/[E>o|]1s|mzgLWN/r1,7U>n`&AjHR$)Id?_7Z66̟9DY[,<~);}^zC4C7@l`zH8mL&Jr ܸp$*4TiWk8yDÐpژ,6& Yl:t[/U|}Y t\5QK`'O7<{bwi;;gWO*q|G>f9g뚉[m/-xNCVT~Xٿ)ˬ(ǐevboe뚓0&M>M!2'aB2b̛۞eWObwx\ rP젆^=9)_# ̛xť8k|o1A) bŸbf$E"IHLxq ߸ d}|:o5=c2aLd:}["vJAKX՛Ҟ]2C7GK/ߓoWo¿]2_L֓]2՛ҧ",^O@s/O>3Ny04aOScc_]DfMIdz,C|bBndkG//ȋ)B `qݜx}i玐ZMٓ0[W= p#D{jCU5'}Q!$_7-6fO.l×c}Tomp+tL(i "IHR$)}} 7D%g=~8=߲矜ckhѐQAv4Lq]GZKϞx;m~p,<]r&)vcM6ߤ1%عMd(=AWϞx?fG6e2n.{wkqb|kHh/~ꝣزTah) "hGRV ;ֈ5ܾn{=APcLՉ<2Z7sBn1grύŬIyWҗٹ2QQml:c)+7__7 _J3K㟇( /bבVv+3$E"IHH ۔NB&~ə8pF~hmmcpFcʔI1c,BSS j1>_>zhE3Ft*/7.v2 4cͯ"ez.wH^鋖w(G䙍G.o%g=*)+#P 5۽} %ur!"m7CgjmGAnev+3lKa)Aj4en:ς4tv̲vnk$geVb~c2hkS@WX@._mkVm jSyc#]/Wccw05RܹP[[ 0'@UU 4iZLz%:iIqo[rzkk1g}`~<k39O6{h|yKl!/CÒ&͍L\Te@WLCbf vJT#e^2? a.̼\ɧ̪=L:O-h 0{rA|h2:SFfciq9(-ĤYI]ge{5ܑbc8dS\L/M l]N*J¦MZMۊ"H+6)ֲ%PZZ}aرI}#555EKK !D*TUJd(ѾѶLzK{K-J7lP>y:C&~[/6kpe긡| Zm ̚G,ڏٓßcCG=o11Z!kʿǑ0RS5qǓ…K0wj!JK2P8x<k[͋Kc(ߊ+?1&`D^P|\Ԇn2k E?ĕsR),ɭ`0̙Z%Y 2k(xC\2sfO. 7 ~>dT̞y}k-}}\ԡO(jGO~EӇa"d"3+'>Jp<` HC|t~@$E" 7"IL?bs҂555Bعs',aYv܉P(g}z*-EMu  A4.3MSF:^MM TUm'7u.~]-zC_pn)wEwbyꭕmۗ#%I$E"9E!وFǾ}PRR6#}>,&NSbjvZ /AHR$)A%lڦHaˁ0^lQ1chjjˆ#MFQ[[M6z*ƍ#G";;\KE"IE"IH |@DJ$4)Ruuu8vjjjЀh4 0PRR"0 #y!E"IE"IH | D4 CQQa!;;[0C+ol"9/:$E"IHHR$l:`Hrb>+A!A %gYYY,B!DKK|jB!Bҡ!BEB!P$ !BEB!P$ !BHB!´R=m7Uet%sC!dh+7Aaa!B@.ߤ |N(B,_sLtsIL+U:-myU^9T޻lw>}%Kg>BHHfwFVG~#:fg ^wDDӉcglruE!tHߑ/T_n&Usyu{{]NK;ιeۙ1]BEG{F{BzRt{[s ѮBȠɁ&sב|CW2#&֗M@a&BcꩴCz{`O eG L զY6IB˕mzKTj']1`BȐT͒urI۝Iwn z/|Uu2ΑB_4m|w_^AMz;ϥ4\-Tҍ hs,v6ϜGBHo9q!,Bj7]_]k.&=dBtY$|Yv,[B!gQYB!"ه0DY$B$B!"I!B(B!"I!B(B!"I!BHIB!B8}ϓb)B!$ZZZkm{w B!$#I!B] UWWcÆ }r'}m)/B!C^$w4iRZ9o ڟB?ո pqˈN!=%0b$U>9 cKWy!BH‰D!BHDDkVߜX !7x555&Oy !EKfnBs9_sXov+_H|ҭ"IB7H͙3Tk(h$.*^K@BF HM23y" tרmxnU$1>BYv>eɒJ,YR,A, Hƙ0.'+VTޓȮG{b@ΥlHc"O?$ϝBHz7aֲ>fJ^8 )dS t$C7GIO(ĽWU>Uܽص 0HVUUbt*/Ҳ'&%FݴmJTlAad|8":.1yޏF8Rzӝ'8ϝBN ٱclfZo;8)JL0-Idt@&LpY Vݻ!ovń΀'"Yk䩽4ށ9'LK kūqfmwmo> [?-|]4uuu2̉  tu`Zk{(;!$p⣶w\ieP}UN+yu,îU5 KVa 'YUX,YQ]}*+T6UYKJyGGw$Kòe$8*.A&z?)7ISiq^e@۶pyAtw˖rN z/*W;79UPx NrBU%~=1i˥ȎF,MܮuwTKږW{=LuQ}%/ĹuS]w+1ϝB0=ve%6j nA{"n2-ëUXʳ4b~WY'zEʤ+p%}\YسtJj"uuuCjdaۺmWzP>wBH?I/ݱֶ+)J'OQQa2g+*8k~e(n?e)y3zC:*}+@r~͘M֛;I ƵԹBHvZ^>>qT@Ql^.3xiথl<\vg@J1u[o/ҟYg IDAT)#l:=1"9ΝOEN/[ߧJB" !#S֛޼_i_kms'SoOӌ )O!q)Jm0G$¹BHĨmBbX~=N>!S]YozOWy!BvHze/HB!$!B!L#Y]]͒!B!I$&E$XJB!$8eDһCg}6^ڸ[B!65>i>NĕM6J!+$p"J_SB!n$B3WmֽǒDReB!@$B!IB!DrǎرcGo'B!\$`Ĉ(((B!ҡQۓ&MJ)y=B! p&I&vB!?`6sB!NOHfnB!%z !BHHB!$!BHB!~" ʒϛ0v6sQz#ڊQFu9m㣏>?y}ݘ?(ǏW_Ŏ;i&|[ӑ+oڊ\DFFكeVTT0!)Hu444 ''gQUUX'~Ήrb4^ollĸq:\W=z;vK/뮻6l?tI2T)--eYm1='NDSSoۑ#GTw}Xt|9˴ǏGmmo '|r4~?)Əcb޽t͘1cg}6֯_&3ZQQQҵ2eJm\s5xRײg_VQQS(l&"ٷkIC|yv1aW^o۷999oġC؈_~`Pa&ma ?o;FKK v/!i, w,X={ѣ}~z@NNLӄ(UVȑ#>msMw^\z504M0Mz[ȫ D"Xv-E3<Ç>$rU5@UUSu/^W1uiӦ ?яEYڶ'>~1999(//GKKihhi={|ĉaSZZ.dffx&˗~|ۋ}o{(B ++ W]uUk---mO9QbG guVŋn6Z EEE0  .e FR$P$''W|{Kڧk׮ɓ38#ezHp8i^& >6 Y!EQ444$5{fZm!epM74>NKYٻMkuuu];4qI_ZnF>W^n+Zqwx ߾mjjB$I[B!#2!O?]>hs_4nK s=UH\M @_L*֭[EQ Mt]m۠iZR}vu 7nB]nTUE @~~>t]ǹ++cǎE0C ;;[(~;4MC~~> @iiiH8|h~:Bze˖_Su[n7 }i]~4 999Ɂ(x8կ}5MimmiE0DII Z[[555={64Mù+#}WO:餴˯}k?y~(d(s뭷_ibٲem{1w\9o ۶1}t444`ҤI(,,଻C//| ">?O8Ν !ފk \mgy&~npue4tKK {m衇RF%Ʀ"BFQQ{={S4MVŒ3-3<EQ\tEB2e *C=%K@UU\qXt)>OZ#L"}<*h4>S &$vkmUqKGnݜ/(s+ӷ-Hߐ# EQ!> ֭['֬Y#_WBDQ- P($v!viB!Ǝ+Sc{y9튢"??_!l"B4@ !,KSZZ*LB &⥗^ĢEd~Ν+߻}N_mm:C}}mܲ t|P^?<#ŽY% b֭4:|ݺuB!~Bm۶ bܸq馛~?TED"'ϟߥ5 Isssi}W^׿/V90nCEEqꩧ_+SMtR@KKxpF-O׿^{5,X qϣA[l\p sAyI'NLӔ29qD8}OtowޔfYYYPUUuVȞF?!~?H5k0l09h0 DQlڴ +r{o|#iڴT} }]|. |.bYF>_`=_2u;z0pҭm%2͍ \|}YxϞ=TW{n 6 퓑T/G!++KVԝ@`qI;Rӌ;l>K͛m۶9زe V\0!m0gs7 ?ilۖۂ tҔizOSRC~~~NF W^ !:… etV4O+o&?pɶ% JKK}ͻ_%7n2zh|BƄ cJ =|0J-c7*%U'6o,?0ݦu7zywpFΚ5 B7_x"31.Gz9r\sM/+V`ƌQuWHW&ޕ+08 <a6~s/䒤cǎnˊw.8qŜUVw|>~x=zp?OtRo;4( E :tuwo/\qeXƜ1cFRz9r$[F2:[tw޽[{r/~ w^!7ny'GD{"77W-GP_L;:E!E]@s=r\ ž}|/ƌ(Dw%Q\\,}:tH466McB!nVo޼ybҥbѢErۤIeYb.K:p8,b׮]{{L9rDuY{7~ ICMM Ν{p(⩧Y"~a=²,om`P|CejY7?|ҔI{'i-//O_Ŋ+XW⇚4%aÆ֭[$O^w~O?,K.p {Μ9ϙ3GX%x׷;H()RUU!Wc=ť^ofy#S$Hjv%6ئ8cӦMݷ0OHHŶ^KWmS}>@ ԩSdQ$R$'MÉX( E((_QK(B({܁2;2[Ӝ~ ѠścI3t谅 ^Ew\j:,i4 eCUUG,aB!d%ɀǝ'RE|䵢nO,͒05Q-65vLت ؊3-PbvZr!9B5HL\D&`\8MնLcLG2?BWt0p 8QE&rNqۈ(""3mYr^I!xO!P$ F% a gM #`8S):؟;9Oa0-fD8F$A"QSʤm;}'(βBETlI/ 7 t'$hG?#f%,Q+PLDn|4&(vm3jb##=%BEKpd6}TZofh2eVl ԝA5jcLJ63mوF22iF wm˲0zH! !P$ P&)\STgnVtmǚkWmiw ۹~w7,˜3H%B(wdƝ;3[1M@ grՑLw_E[-lXL d(nD [@U(v|!2I$B$X"™;;kjzA=LR;ltX 8FK8Q+ t%"Gb 4۪-%6N7'$'2i¶ ZۨFkkj|"r3)i&,ӒK-{F^}σmPw}7)B( ܹ`n\7ހϯeZrrUU**¹Wkci#]tB -*9ІBEA CQV\2QQPq<H@ħ(l(tdO,/9L $!$!y[Q!| -x-lFDoISr G]˲LH %!$!yݨ.pEzVYo%.ؗ}L^ze6BH2۶O(>VKd3TF'9ȆBEϢ+z$Kىj7mpB*2W$B$qJH!TzQQ$AF!mۙȶm\bwkBwG{F{ѝ8]GsC!"IH/ĝ(t(dRgl_:_c$3M[M?\i]>/¦PBH2Lk({J61ܶm amBw4 j 5UHltr'2/XP<;ѹ|P( !P$ eY2*JozK~~>Ν+mGjAhC7e 类*r);ΒRRMYA4Mز,G(a|E9.Y.!C c}J*le{!$IB]&iZZZ|>^sID8Fqq1OT a @@F٦:t] P 9hPra ϚޱiF`R,,) fyTb譫\?|>BE!`XuHrBlڴ e!;͚&2qNxQ__<6è[Y`ֵ0f D0t^SbPwG-D‘0zV4mF`Jrj*ԈU ,A$d0ˣiPBU V_)X孫@l۞KI[1RIHSX{~s]K: ciuhTʣi튤;*O{x/3OQ< IDAToef ##YpnA#D@ @ [,8M؆e kaJjy{3l<)7`"8_ gAʅ Tr?W3]Ž^Y^N$C$2ថH^4 6 R"u]#Od$A i, -~7( >Df0ZH:T[,@VԂ\XIۙȶm4okFɤgjȶ 4Ϻr dV@uibb4MۦpdQde&Lw`L0Wz6y.>ytoeEcc# ÐxeI7zi"BrTΦ%GX‘U?_~~222 z"Bj$2&φAN(Y\P8u4UYPxM܄ P,/GrT!0`:UtpuI"i"j0QDc}}hD')"IH V 9 "P`Pns+s tfDiI)j*f˲ lw<[~u tMT iZ0&LD$AČ bEB &,ł=(đ[OQQF+BVA"=0rpҨ#tш   ù"F%c"X`DD"##ahh$5eP$ iO" ÈG dddi"33@YIwt$q~ś&وFϓi[6كHmٸ{cf9;f2iQD("VQ+FĎ jF&*X"@FiW}+M%,|pL# /p_1sWI Ȁ `0.i$XsFHDt[e~)_L>ā5݇pH}YDk" 2 )R !EҲ,D"X%#eJ4Mp&OŽ;݅߾_8r^w)>_Mc:iicx)tCH UQォ8"$USz.ߏ=la G=*%Իi*#cj܁4~0#nD2QIEMs3 ض#`3B r;PS[nIO(%1f t<\4`_d$AkUN)4j(ڽiM*~葄 iٖ='Z]vaNDR7F& I+ydM@і>EQv!m#jYPMӔGv1Mp;00sK1 Nh񍀯N}xN~ĺhR =r T}9! u.Z< _?bhAgfB}fgNTHWÇ{H&NKI4}}!9rÇG]]4B!am:p4,Gt{3Z%#y0HFU= 8(^iMSdGmJr'JD.厀p\,zCS4g0T D@ h5Zh "jh6l bW.LoP(oeL Hhi ?CMinc9NS7.t˂iN&mH1t玴lHf$H4e( QSaC؀a8:ZRчF<USdƗVuup~r)lJ%E zyԴXx3oXErGHomieOJz2Q2[NNNRdҕB]eӴwNIUUq)c :MPƛbBdE%}+N~ ݀&}maCBB-l/e%]deL|gm#ZW& P]ѡ*IUS*lF8ahumQ4+P2 g¡0,9HN6`sj @(9M챼;2BdA7u&(Ʉd{,puVY7Vfl"?8K PUc4 Zs/UŲ-X1y>No[nE?Z%1N$B^PVƪ뜮jkyy T4_=EuA g(g۹H⤎GgtJ8~8B y*8lfgF'V YRk44֋HE )do 6a<\@-4m[DY( ۱EQ['5 y D62NJYD&B42Z BJ2MljYGGO 'K4GLYֆ+ "wH?ء3&IOxRFOIWFWFF;GVrg y>{:!Շnčּ[EnBm|jpC±ڮ(EwCCCA@VV@Bp acڵnj3c\fM("+2p +/ZףPEY![i*~ ?x2ݍe,dz} 허*SiDg过XKh@Fڎ:)88NHpJ0f6Jlaq;wpFe߭U2 -(s5 L9Fq( m߄gwjvYdҦ0FKWu7aI3]Lcylce.Ǵ6ѕth 4&dӛwBժBX%R'dC^ (+%>/2.X` -rQc2̷P-,hGVCy d* ( m2N_\}@W\uZ z_RQq ;fƶpƲNjL" ͬ¤qD$nD" R HmD'h('Dڥ,[ o/&SqKϾY;EM1[K;$[PD"?Ʊk֛ƮߚMDZ9IHXNrVy;G"$t;灻-,Ҹ#DF/z ^zAv?q,j?6L5o4]w;ڵkZkF)(tIevc0K!YXD}oD̛c ڭvdBg":!clD}AX3 I?[.?h8l4\C8x2WZH٩ӛ`͡[4R#n$@jaM HӞ#SajhF* :n pUh թ+4N:@%;ɔD$:ֈJ+H펻ƵE+=BlZJ$;۲RXF!ecuk!-\ N~ϋ y˗٠WgƷxߎ/&o?i,BVRnPJ!MSh1i$(022gE.g(Nܡ -tgdڣŌ"fPTkmK$!VՊmt }1-l(wNS?xS`茉 tEqe &ZkXmvlZnqj ZC_/!4}Td6`-ǹb2]#rϘ6sz^XpKd"PVaʴo_h(=PV!1 b#q:༒ m /򣲒OdKFPPZn'ɲЀ%ZVeR:"ELjaMS*RH܍㨩GMyط֛R`s㪫h5#9vMD-񢮿?kǡdOOO09}tw*p_$JhA7 "/ǒ<7K,svkKI}SW0[uG-U\1M'1t Gڢ5ϣUU*Shg0 2Eg;׭@7BR(*4! HSNN{<ɢQ|`m5,0}t<]aLhBSdmetf`{X]c%>_9s vVQJQ8Yk뮻3 fWg}D~9TB6F VMpJDL?4%]@:*=tNLVt;-Ә (0~ZKl̿z,tb0I(ʼuo˅v)yi~1~m10sǿ~ף!V&G0$ tS}qCr9).pwC]EW8޾$MpZpZ$*THveH(4"#̡E'fdd` ~U]Jdg<Ȫp DvBNΡcX!h4y(s;wnx/qcxxַV1:Z|Δ_yZo3B1yB#R We[2?:&!k-xqwoi:VX]VN EXuҔjƛCW * tּQw]K' )EcT]5z.311/F? Yz#(Bě&===n欔H$x8Ox8i?.EHk=}T *R8q,(B'>P7!08clηi38G D"81N{44ns$w(T#$y.y =QhpSw2A*Nغ7y߇q \NYyBPweRa(IXvHE9{SvTz'6jfₚjvB!I\dWAM LPPxoUW_zA kzc0]w\8h4> u1;ܱ(w|[b}]fww7[זэf#uT`"J;2xT"1%! &`⹝v&smI22:9~ޱ#WdzLՎ-008 b#2""K{=B#k>B"F@B L>[BŤ!I!IT{ .6B0Y@)U((bzSԉ|zü0"T{WDQ8p0Vd^=yf7Ƹ\BuzIj[T IŃ!{ v @Hx^ B)o?Tk{ !Aۇ17XeNn^lY$HDc$D#ml@f7MCADy#3hHv܆$4*00@Q 7>w\Z0- 92dhH##Lw׈Jec_D1I {,w.X ez/ʣgRF[TDWaT#k*]͓F{/ڴ$IFFi&E7[({q(Ȑy,p91QSo7b?/!d;W4 Rzd$C0 >>%TRL'tSzD()$6h@ ܘ ҫF3.hԂP{চ#okTzW\D{u5` m[c]qJaZ7~0^J -5"<&2V+IyI~ĮHF}WN_,G=@bd" 'PmF9N-ao۴ u-пW?v}'!Ky MF,3eg{(V$d#lޮWRkFz5wȟAB:u4]6iLՙ#Gf3SmLsR=2U7{y G‡BNC(\8" %"YH(B/No@PEY^V_YmJ$ @Vd(S,w}cmtfIB B-s='\E K\^\I+:yJ+Ĺ|yy+h}Ԋ 3^3#ORx#U'=$B!I,&O^ '"&M\RycH#}lɹҪ*lƻߑ( #uB!B-L<Ĥ*=ufXŮOQ^UgjBG [@r jHB!d }lh`]z22ZZHDPI[zOx M~й,O9rؤ1YD2M!d%ޟ4KNY[=MIS4 <\8ZaY<'9{(kcd ;q%%!U IB -i esGW ͆f%Diy>b%ס?1ay(!Bv!ǒl,9%F Cآ̇ly'*5\;F9.9@\E*.LVƌ!m@H2בlWbr q@Wh֮O@.sFR|ݨY!sאPy1|ZB!ۈ$dgmBJ)Eo1II!B!$E$!B B!/HLB! IB!B($ !B$!B$B!B!BB! IB!B!I!B($ !B$!B$B!BB!PHB! IB!B!I!B($ !B$B!B!BB!PHB! y<ʄB!B!e )& !B9D%X80 B!PHB!/{B0M!B!I1I!B!r I !B($)" !BC^bB!bCBRDB!l[l )" !B($7B!B!B!BB! IB!B!I!B($ !B$!B$B!BB!PHB!1yYb֬Y /}{1sLL:QuX1Xr%-[%K}{0uTB_~9I'|K.gqn&5yI^㩧Bww7`tt˸}x ն_===BԶc̙0`ժUHve6m`;1q1n\~yGq'cҥR⦛nGUrWO𾷽m袋;@ 4 hnRpZ_cxxx@Kq'ׅI( ( zx0=v}wSLYfuӃXs5RE0z{{~~Zk<#'mypC)8qG@)ٳgoJ)-ln֮]v-L6<@$IG 83/y>^G}4."??'? $ 1::ઞ mZNJ+^Rzgֶ{߀]vQ!I5WJ)1gΜp㏯O($vp.COŽk~0l<v{ a gΜ }j?p}ҤI?CWU$Jِ7 I4ꫯ9+Wzꩵ^ ^s5]]]{.b}xO>l6l6)}Q]w݅: Qh4C$xg_?_[oh8\׻4B6W->O$Iɓ'?1Cq5k`h4Aoo/Z[n : qH)qm?)F$x\{֭駟)%&M$Iݍ_A~ɓӃK/iIk׮矏81y䚀={vl|d(+I($ yތ 6 {qDžV3!\xZ.͛WyYBho 7pCI2Q|z>ϟz{{7z !{+{o|;3{>{!k? uC8ðxⰀ;kLJz(w/0N pnV#<?OG>r೟lpaLwa_oL_2eJ- p뭷Z>8G}Zk|C/Dg׽nj*2o@'BR _~y}UW<0m4Xk1::¬?46,1XfM j6R??>O#2>xl6}c47*?`֬Y(bP3<DԩSq%V^ymqI' m6ԩSCȟ'd;kU<@΃+'J_%\?k"}õEQ0G?Ѱ7ftи'CC0o޼ؼMkPBN80{lhq!N>qyi-X \e>m;찰{qjk-17 5?KYg(jk>㎉O/+j*\ve/l8ַkr1O;4|#}!&Ƅe˰lٲ};v(bsL{O_l ?!,?zuQa?뮻{Wbٸǝ7{NđG{&| l+,_<|8F[/76byC^f]U[ŧ ˆ+r N{IG>Z覴9so}v>S'?i]_p!6!=:U˵l]q\[-olU}je?o\p }ѵn&>',Y$Lx衇0{q窇asSrlfuh"̜9Vz+_{gST8?c-oy_}iZow}_wyozj\yxꩧ^v5gʕ+7r-x; c gY($k/̘1eN(p__'ܯjc;s&V\z+._?O=Goo/Ν y9CGYgiӦa!! v=M}݇vi_,s ?+V@ݞpj(ҥn:&㩧G~W~}Y|f8/f]_U6:Wv_q 'lB=osFQicL|xӛބ3<y㬳&ݑHH2v͚5/v1w~O?=nZp3'N;-GwO<>w7|CCCȲ O>d-\/})\j_6կbtt4)~-;44;._Zk_CCCW;>~%[6y(, Ν;^{sαa}s+VZ{mBO{fi/| Zymp,Ul$aۣ>jGFFٳökfYV{?M:^7xcxL$+_'*W.튢(E]#_~3<3l___x~a_WjoOo===}߶Rp{޼y|q7k-]j'~wqsox> qU IDATc4M `ԩ6m֭[ӧE_{-q\>Κ5E/!#󐑭>Є+os zXkyo$ꄇG+,$O6E RDB!// 1e$N1$ۤd%˜R@* *υB (:dȦx$B^f)"鼍$I8iڹ$H S'$@'y E<ϝ,OFSLRHB!dHiT.2Al%^R"15p^Fr#kd y;G;k˼.-$6!es"]:#x{{HMt5hv5h4L F0`z:BX,S8x-zP]Vm09̙8 mqɜJ2LY")7BܰFfBww7ݍfD#j J 4vv;GW<ʱg6I qCiB&1` PHģ.&*+orY]ŖW4u,ahB{oz5ҾQIͦFϤ ]1 Q1$bİ"9V X{LXhQLjWmMv !B7kl."a]x^I ɍ6+ ( v @xaYyZka]zQB&dTDdWz03^nf "BE@+m4Ј^5y/wmthd~S5VX($7 Cۤ* eA?Y).-Hpo1az̥)PBX)#8N &Kً^^^iЄFBX)aFF0F@kt9l7spWj( E( gabPH2! V1b)K $R ЧLk(UW(` `!eK$6AhDOw7&MAo/gt[hh sZkPh"kv.*څhB["3 c; rj( GR?F;g@tDRHn mo"ҍت8FǡZ0=˒BJ I+0ƝE򬔂V Z睴E9?PJ 3z>7&Y 0JPVfF[@hgmZmڭ YA9]օxh(#HcFEmB!I0M)t2I)ĭ48tB2:"Rk@kDyFyY/roBk!!sɜ [Xxʍ[sɄ~8]3JW`݃IzzcIBKe΢@!̸se1: d-ny! EkSrvXG\HNhۺcN($7Jgއl\2g g!yϢ6H l@F ZÿOC,PD2DZFG"G]'k9c+' m媲0 IIH? H $Bٺ'p/*KdW]u/ױBeX;[[UqeVlG1? ,ߙ-T@?Lv,-]7քK]OҎ {J _?e3 E.MH $H $HoQMLqڗ"MR4BuJ }t\LD#F#hf(9 H_䨕)ţ?tG0C o[0WB:*&}!KQh 5T`bt,5REBy(5֝*Fv.ig`샑ĉczX~tD' !iYhlH!?քm4@.@tuRZ?MȔ ?LJ2*/|&aDAPz߯ \oXfj 21c+k7?adad (9tʞkk ug]y9ӆ6:GxWH IB>7RT<70I P̆5!iBZ)eMQǠPE 4."Div*1]1P,]U%"a#aAwW7&r^ _!k1S`ť. 7cIt9q}cDwSڥB jEB,w1skLQ[8?4aޙC,nsۇEADvDc8H8.?n==UHQl6*Q Rh+ 4fY+| !+4.l~^,($44 4FjѪPhZ#kd)$ #}Ng/ƬKu 1im'],“w]?IJQWހ[@T"F$A Q `DkZ4v#"y `ť8Fz* yYDdB+If,M]h7IB2@K?,o` (PQ98 j"2MS$If3ED&h6ń.رپ4Mݝ;DVP!-Rhgr(U@v ,NN^缛.q܉H@[hjDlN5kt)&8E<5p RLք0}BtS4@R@\`F*R@^VC~ U((D.BDE{5!w(n\h4hh4N$I/$@Gi3`XZ1j6ڭQLJNۻ˲ߵ眪tO2 6ep18tdBB=#E$"Y" D"$IHۉ떇>/ccOS::UӧvZc&%;|>z_/Y1$d"c"ȃ]bN[g#cZTx[JdWd\bKBkudTdC_;y/]nƭ,p][2#qTivv*<|xrXU{erYO~H20% 80 z:T?ًg V~ˑ;le52)IR^*hXq0ig57=x$>GMErOL Bi-Zˌ9sHf eoÂĔie2]_;vÛ7ç.UW߽)9ICtKHA=NDÕO߄ʵkkփgK;'/O!68I*הʹms)xl3|/ikFAR ֶ+@n!i*8EV|BiFn-=0|WrIZDN._2&Zq)6ƛg:  7>|=q`46w`RR 0`^fXW+vwJ!qͰOp~ ֹi Mq6IfVĴbRiΠ!ܶ̾.,%"!<8H`H$L.w0$$k06͘Ci%3΀#촣b brMU˱ L14Nəϓ9bW]giVC.qqV:|W|ajV' ] SO9eVޮ1#q'R+ "YBN$v-} sXix5\}#t}2O}$w` &cF cG"g0Tg^=~G^]mS,cҚ0WW-WN8!zAسwsnd^3 {Oa0uߝS`trœoަhǭӹl!b,rc*i"HôH[6$Sd6~ [Zr."׺rn0Xe$>46o-A/97Lˎevvw8X֦sS?}swW71[$&ZraH Cf`=R08*Y=F9xty)%8y?3Zf;9qZqIy<%3UeG Ynv&7/mZx7&o?O*X-IdR3!MJ)|J$Y2D3ɥmў3|㱙΂LZ<Ƒ# {$]vzjG]5cm mj[n臨H.ShuRnӶm(2F EY6Of3 xޘ3-vmkHʁe(+18|#8~lo9maO[1ME5fP>G*Pv*ʙ%eϢ_=_51t]4KDOӹ}ibbszc=}Њey͛cgvC.[9Ikr4?^SoW9ӧ45{zX'H?|+i?%tޒ2OԪ [\pKʉ###n 8%P]4|Ǖ`JepUJ[h7qɫL:0O/r'FOJl躞aZmj [up޳G82C9{l7SaRnّ[:lLauJioV. ק0[:Z9gdL-z/$R UQ79O-RHjS]2\vc 8>xcGgѯ+]Fh7#+kv_VnĀGB(Ŋ+gOm &'?Y^_WN$&ggr[ ,n^r8n!a3z?k)]OxYm?O72tJ6&U@N?dd7=ٔ˽^)M<;jX%wyX ?M~,тd{mn}]k8ҭSsD;s}msˋ7@V!!ڐ J1;=KL׮וB6mc`&ƲWW?ml( d&] wҨ1r #,e 3 )=N4[?uu936Uә#'eRZg2o|+ CHCHa2t/D|i+v4ri@Kq?}_+!sμMΧ?v+±ǰG,yJ{U9Ʈli`׌i.:\(]Sol7mOg%3dxmpa뛱uaRQ.$rx}`̃h5HΪkșutu3U^\3-Unlө݂~Q}bl$aﷵ)x kD> @nWTGDbrD Mi:Ùk)ǔY&LZ}?HzYX \ }>yl_^^s^#vFZl7=:EcݭbH9; g̥=) &THp7bg!]0>5 mn=ZO CXo\gG5{{9rg`"@_XRNlITrsO }9t 9m")$pu aEP(m1#}׳X8ܞ;q4Fn|"{Q1qmm.6],m@AL94CC8?l[нqFm9]b"Xz8wdGsu=pu:B=^ϏfscY!)B&g)/$9n4E7M?5"wf3MDRϖg DHa MeDH xw 7gcmw)ĠYc{Xfdv6uN1uUlǧq䆽+wbɵz$RAn-=gw=U[6 B/oM}TyWZ1qs}>{{Ej%RwY?yB,u\ŭ\pZi+8SN iB$x=H:2C4>n[F7ҍÛܸ꒝v;8z]=^uekkQca2 sXjcOa(]|loXSX+S-zc{^V%3[O_C!lNeς܀d-SnO !|$_lF&8zd |ͫk1]35h0m  a=tUG1,x_#Y{{prձtpcv̕d,Z>00B?<c^v$(h4,T;}MIg&s y$zV*Û,K~>@eE"qh(rƒAә8gL\jg2kUn$޳Fr2, ,vI> nӢd*71FL3yI,vinLXR$QyfȤ*KL)#\g7r7ׄ-4\~qRcCm)z: z Zk]d}~7x==V={+Ұ9q:6#l;WdP'0q\3 #{O׹2 "@9WQyV*_Uw;8Da=͞׽u<[Ob% 'XfLuPfƩG]!IP60tՌ9u|Wv=y$[itY'_|"ˎ$m B".#FFzzoF M݈q6G.]΁),<6䔹ە.̙fzH+a>c;o5uHwd L2\i-,c/]9wSz=lcl1ȸrRh=P^O |V]I꤂ĉի-/\`h?sqVoj>;A7fo4y=KOO[7iڬ\ь`q)WwŐ!oS,jֈi*F*k MV竺%L3歝=Ǒb]mHIF"oW˿GѼ"0ԯ5w}]VW&4601*gڄv6M*} DZg.$[ nr.-w8H9Z`?YHb.19vvlO 1vAuhpD 팔mt#~9G55Sя`됄0 %w= ?^i9{&TZ+J>Omn4~cq3^td-{p|S)H't] ʤThFZ︔p2޹m+;C1|6a3uvu"]G7tX7a#+[ j;'>CNL-nip-/{;7oln jr }larc@ߏ u8\Ο-I %Jۢ4َJ_`q=/;vczk+E>aS˛0S$G4bnfpts{*L*H~!R+)T^7D޺aroU|^;(]r$ewb ^چyrj\cJI/_ $FF|T7:=i=F[ _dl<9՗ x3I\LW0HJq? nomȵbTI^?&K5T~gW[|7~gpߛR7Mw, 7u=!$1x1ŦoLrl"ZOa+cǓ!RR$dϘF<0u^P9]t3!Q|.!,rK)BجiB`qHNۭp "r?{Rm>5&OiK8ees杏kRJ(so"J)&|,zOZ]u=$ mT->b|^fgBچlv@$"yTaQj+93m={a_,躎EkzX§֐|э#nJsrV#kMMYcitYr :)tgrє"" 0&lI0Jb|H ):c$B<7&Ӏ;]"'%I&n"?߳KD[^n^M:&Xo0 Lh{qk2F0 )r6|Vミibƞ!$0ɣPR|VlOiArVfgCRD~O`hDCh_^ƒcLvbdHɔ\]ƀO_X.Ui#([Ԋ&QI`+߬@2ndka?1DDnu';>xGIDMsH"홦u~1S #KL&|0a1yڞ¤*H>0 "_@y>{Is||L &^g 7a\/zVedɒE}|}8,IgoC{ 4i+M_XV+sVm<{[M}(apݭ點,:P[!MܶC(M?rQg/rS,M]9)<߶9J7#}(O), \gsime (⪎), \gsiml (⪐), \gtcc (⪧), \gtcir (⩺), \gtlpar (⦠), \gtquest (⩼), \gtrapprox (⪆), \gtrarr (⥸), \gtrdot (⋗), \gtreqless (⋛), \gtreqqless (⪌), \gtrless (≷), \gtrsim (≳), \guillemotleft («), \guillemotright (»), \guilsinglleft (‹), \guilsinglright (›). \harrowextender (⎯), \hatapprox (⩯), \hbar (ℏ), \heartsuit (♡), \hermitmatrix (⊹), \hexagon (⎔), \hexagonblack (⬣), \hiraganano (の), \hknearrow (⤤), \hknwarrow (⤣), \hksearow (⤥), \hkswarow (⤦), \hookleftarrow (↩), \hookrightarrow (↪), \horizbar (―), \hourglass (⧖), \house (⌂), \hrectangle (▭), \hrectangleblack (▬), \hslash (ℏ), \hyphenbullet (⁃), \hzigzag (〰). \iiiint (⨌), \iiint (∭), \iinfin (⧜), \iint (∬), \imageof (⊷), \in (∈), \incare (℅), \increment (∆), \infty (∞), \int (∫), \intBar (⨎), \intbar (⨍), \intbottom (⌡), \intcap (⨙), \intclockwise (∱), \intcup (⨚), \intercal (⊺), \interleave (⫴), \intextender (⎮), \intlharhk (⨗), \intprod (⨼), \intprodr (⨽), \inttop (⌠), \intx (⨘), \inversebullet (◘), \inversewhitecircle (◙), \invnot (⌐), \invwhitelowerhalfcircle (◛), \invwhiteupperhalfcircle (◚), \iota (ι), \ipasupgamma (ˠ), \ipasupl (ˡ), \ipasuprerglotstpp (ˤ), \ipasups (ˢ), \ipasupx (ˣ), \ipaunaspirated (˭), \ipavoicing (ˬ), \isinE (⋹), \isindot (⋵), \isinobar (⋷), \isins (⋴), \isinvb (⋸), \itBbbD (ⅅ), \itBbbd (ⅆ), \itBbbe (ⅇ), \itBbbi (ⅈ), \itBbbj (ⅉ). \jupiter (♃), \kappa (κ), \kernelcontraction (∻), \koppa (ϟ). \l (ł), \lAngle (⟪), \lBrace (⦃), \lBrack (⟦), \lParen (⦅), \lambda (λ), \lambdabar (ƛ), \langle (⟨), \langledot (⦑), \laplac (⧠), \lasp (ʽ), \lat (⪫), \late (⪭), \lbag (⟅), \lblkbrbrak (⦗), \lbrace (@{), \lbracelend (⎩), \lbracemid (⎨), \lbraceuend (⎧), \lbrack ([), \lbrackextender (⎢), \lbracklend (⎣), \lbracklltick (⦏), \lbrackubar (⦋), \lbrackuend (⎡), \lbrackultick (⦍), \lbrbrak (❲), \lceil (⌈), \lcurvyangle (⧼), \ldasharrhead (⇠), \le (≤), \leadsto (↝), \leftarrow (←), \leftarrowapprox (⭊), \leftarrowbackapprox (⭂), \leftarrowbsimilar (⭋), \leftarrowless (⥷), \leftarrowonoplus (⬲), \leftarrowplus (⥆), \leftarrowshortrightarrow (⥃), \leftarrowsimilar (⥳), \leftarrowsubset (⥺), \leftarrowtail (↢), \leftarrowtriangle (⇽), \leftarrowx (⬾), \leftbkarrow (⤌), \leftcurvedarrow (⬿), \leftdasharrow (⇠), \leftdasharrowhead (⇡), \leftdbkarrow (⤎), \leftdbltail (⤛), \leftdotarrow (⬸), \leftdowncurvedarrow (⤶), \leftfishtail (⥼), \leftharpoondown (↽), \leftharpoondownbar (⥞), \leftharpoonsupdown (⥢), \leftharpoonup (↼), \leftharpoonupbar (⥚), \leftharpoonupdash (⥪), \leftleftarrows (⇇), \leftmoon (☾), \leftouterjoin (⟕), \leftrightarrow (↔), \leftrightarrowcircle (⥈), \leftrightarrows (⇆), \leftrightarrowtriangle (⇿), \leftrightharpoondowndown (⥐), \leftrightharpoondownup (⥋), \leftrightharpoons (⇋), \leftrightharpoonsdown (⥧), \leftrightharpoonsup (⥦), \leftrightharpoonupdown (⥊), \leftrightharpoonupup (⥎), \leftrightsquigarrow (↭), \leftsquigarrow (↜), \leftsquigarrow (⇜), \lefttail (⤙), \leftthreearrows (⬱), \leftthreetimes (⋋), \leftwhitearrow (⇦), \leq (≤), \leqq (≦), \leqqslant (⫹), \leqqslant (⫺), \leqslant (⩽), \lescc (⪨), \lesdot (⩿), \lesdoto (⪁), \lesdotor (⪃), \lesges (⪓), \less (<), \lessapprox (⪅), \lessdot (⋖), \lesseqgtr (⋚), \lesseqqgtr (⪋), \lessgtr (≶), \lesssim (≲), \lfbowtie (⧑), \lfloor (⌊), \lftimes (⧔), \lgE (⪑), \lgblkcircle (⬤), \lgblksquare (⬛), \lgwhtcircle (◯), \lgwhtsquare (⬜), \lhd (⊲), \linefeed (↴), \ll (≪), \llangle (⦉), \llarc (◟), \llblacktriangle (◣), \llcorner (⌞), \lll (⋘), \lllnest (⫷), \llparenthesis (⦇), \lltriangle (◺), \lmoustache (⎰), \lnapprox (⪉), \lneq (⪇), \lneqq (≨), \lnsim (⋦), \longdashv (⟞), \longdivision (⟌), \longleftarrow (⟵), \longleftrightarrow (⟷), \longleftsquigarrow (⬳), \longmapsfrom (⟻), \longmapsto (⟼), \longrightarrow (⟶), \longrightsquigarrow (⟿), \looparrowleft (↫), \looparrowright (↬), \lowint (⨜), \lozenge (◊), \lozengeminus (⟠), \lparenextender (⎜), \lparenlend (⎝), \lparenless (⦓), \lparenuend (⎛), \lq (‘), \lrarc (◞), \lrblacktriangle (◢), \lrcorner (⌟), \lrtriangle (◿), \lrtriangleeq (⧡), \lsime (⪍), \lsimg (⪏), \lsqhook (⫍), \ltcc (⪦), \ltcir (⩹), \ltimes (⋉), \ltlarr (⥶), \ltquest (⩻), \ltrivb (⧏), \lvboxline (⎸), \lvzigzag (⧘). \male (♂), \maltese (✠), \mapsdown (↧), \mapsfrom (↤), \mapsto (↦), \mapsup (↥), \mdblkdiamond (⬥), \mdblklozenge (⬧), \mdblkrcl (⚫), \mdblksquare (◼), \mdlgblkcircle (●), \mdlgblkdiamond (◆), \mdlgblklozenge (⧫), \mdlgblksquare (■), \mdlgwhtcircle (○), \mdlgwhtdiamond (◇), \mdlgwhtsquare (□), \mdsmblkcircle (⦁), \mdsmblksquare (◾), \mdsmwhtcircl (⚬), \mdsmwhtsquare (◽), \mdwhtcircl (⚪), \mdwhtdiamond (⬦), \mdwhtlozenge (⬨), \mdwhtsquare (◻), \measangledltosw (⦯), \measangledrtose (⦮), \measangleldtosw (⦫), \measanglelutonw (⦩), \measanglerdtose (⦪), \measanglerutone (⦨), \measangleultonw (⦭), \measangleurtone (⦬), \measeq (≞), \measuredangle (∡), \measuredangleleft (⦛), \measuredrightangle (⊾), \medblackstar (⭑), \medmathspace ( ), \medwhitestar (⭐), \mercury (☿), \mho (℧), \mid (∣), \midbarvee (⩝), \midbarwedge (⩜), \midcir (⫰), \minus (−), \minusdot (⨪), \minusfdots (⨫), \minusrdots (⨬), \mlcp (⫛), \models (⊧), \mp (∓), \mu (μ), \multimap (⊸), \multimapinv (⟜). \nHdownarrow (⇟), \nHuparrow (⇞), \nLeftarrow (⇍), \nLeftrightarrow (⇎), \nRightarrow (⇏), \nVDash (⊯), \nVdash (⊮), \nVleftarrow (⇺), \nVleftarrowtail (⬺), \nVleftrightarrow (⇼), \nVrightarrow (⇻), \nVrightarrowtail (⤕), \nVtwoheadleftarrow (⬵), \nVtwoheadleftarrowtail (⬽), \nVtwoheadrightarrow (⤁), \nVtwoheadrightarrowtail (⤘), \nabla (∇), \napprox (≉), \nasymp (≭), \natural (♮), \ncong (≇), \ne (≠), \nearrow (↗), \neg (¬), \neovnwarrow (⤱), \neovsearrow (⤮), \neptune (♆), \neq (≠), \nequiv (≢), \neswarrow (⤢), \neuter (⚲), \nexists (∄), \ng (ŋ), \ngeq (≱), \ngtr (≯), \ngtrless (≹), \ngtrsim (≵), \nhVvert (⫵), \nhpar (⫲), \ni (∋), \niobar (⋾), \nis (⋼), \nisd (⋺), \nleftarrow (↚), \nleftrightarrow (↮), \nleq (≰), \nless (≮), \nlessgtr (≸), \nlesssim (≴), \nmid (∤), \nni (∌), \nobreakhyphen (‑), \notin (∉), \nparallel (∦), \npolint (⨔), \nprec (⊀), \npreccurlyeq (⋠), \nrightarrow (↛), \nsim (≁), \nsime (≄), \nsqsubseteq (⋢), \nsqsupseteq (⋣), \nsubset (⊄), \nsubseteq (⊈), \nsucc (⊁), \nsucccurlyeq (⋡), \nsupset (⊅), \nsupseteq (⊉), \ntriangleleft (⋪), \ntrianglelefteq (⋬), \ntriangleright (⋫), \ntrianglerighteq (⋭), \nu (ν), \nvDash (⊭), \nvLeftarrow (⤂), \nvLeftrightarrow (⤄), \nvRightarrow (⤃), \nvdash (⊬), \nvinfty (⧞), \nvleftarrow (⇷), \nvleftarrowtail (⬹), \nvleftrightarrow (⇹), \nvrightarrow (⇸), \nvrightarrowtail (⤔), \nvtwoheadleftarrow (⬴), \nvtwoheadleftarrowtail (⬼), \nvtwoheadrightarrow (⤀), \nvtwoheadrightarrowtail (⤗), \nwarrow (↖), \nwovnearrow (⤲), \nwsearrow (⤡). \o (ø), \obar (⌽), \obot (⦺), \obrbrak (⏠), \obslash (⦸), \odiv (⨸), \odot (⊙), \odotslashdot (⦼), \oe (œ), \ogreaterthan (⧁), \ohorn (ơ), \oiiint (∰), \oiint (∯), \oint (∮), \ointctrclockwise (∳), \olcross (⦻), \oldKoppa (Ϙ), \oldkoppa (ϙ), \olessthan (⧀), \omega (ω), \omicron (ο), \ominus (⊖), \operp (⦹), \oplus (⊕), \opluslhrim (⨭), \oplusrhrim (⨮), \origof (⊶), \oslash (⊘), \otimes (⊗), \otimeshat (⨶), \otimeslhrim (⨴), \otimesrhrim (⨵), \overbrace (⏞), \overbracket (⎴), \overline (‾), \overparen (⏜), \owns (∋). \parallel (∥), \parallelogram (▱), \parallelogramblack (▰), \parsim (⫳), \partial (∂), \partialmeetcontraction (⪣), \pentagon (⬠), \pentagonblack (⬟), \perp (⟂), \perps (⫡), \phi (ϕ), \phone (☎), \pi (π), \pitchfork (⋔), \plusdot (⨥), \pluseqq (⩲), \plushat (⨣), \plussim (⨦), \plussubtwo (⨧), \plustrif (⨨), \pluto (♇), \pm (±), \pointnt (⨕), \postalmark (〒), \prec (≺), \precapprox (⪷), \preccurlyeq (≼), \preceq (⪯), \preceqq (⪳), \precnapprox (⪹), \precneq (⪱), \precneqq (⪵), \precnsim (⋨), \precsim (≾), \prime (′), \prod (∏), \profalar (⌮), \profline (⌒), \profsurf (⌓), \propto (∝), \prurel (⊰), \psi (ψ), \pullback (⟓), \pushout (⟔). \qprime (⁗), \quarternote (♩), \questeq (≟), \quotdblbase („), \quotdblright (‟), \quotsinglbase (‚), \quotsinglright (‛). \rAngle (⟫), \rBrace (⦄), \rBrack (⟧), \rParen (⦆), \rangle (⟩), \rangledot (⦒), \rangledownzigzagarrow (⍼), \rasp (ʼ), \rbag (⟆), \rblkbrbrak (⦘), \rbrace (@}), \rbracelend (⎭), \rbracemid (⎬), \rbraceuend (⎫), \rbrack (]), \rbrackextender (⎥), \rbracklend (⎦), \rbracklrtick (⦎), \rbrackubar (⦌), \rbrackuend (⎤), \rbrackurtick (⦐), \rbrbrak (❳), \rceil (⌉), \rcurvyangle (⧽), \rdiagovfdiag (⤫), \rdiagovsearrow (⤰), \recorder (⌕), \revangle (⦣), \revangleubar (⦥), \revemptyset (⦰), \revnmid (⫮), \rfbowtie (⧒), \rfloor (⌋), \rftimes (⧕), \rhd (⊳), \rho (ρ), \righarrowbsimilar (⭌), \rightangle (∟), \rightanglemdot (⦝), \rightanglesqr (⦜), \rightarrow (→), \rightarrowapprox (⥵), \rightarrowbackapprox (⭈), \rightarrowbar (⇥), \rightarrowdiamond (⤞), \rightarrowgtr (⭃), \rightarrowonoplus (⟴), \rightarrowplus (⥅), \rightarrowshortleftarrow (⥂), \rightarrowsimilar (⥴), \rightarrowsupset (⭄), \rightarrowtail (↣), \rightarrowtriangle (⇾), \rightarrowx (⥇), \rightbkarrow (⤍), \rightcurvedarrow (⤳), \rightdasharrow (⇢), \rightdbltail (⤜), \rightdotarrow (⤑), \rightdowncurvedarrow (⤷), \rightfishtail (⥽), \rightharpoondown (⇁), \rightharpoondownbar (⥗), \rightharpoonsupdown (⥤), \rightharpoonup (⇀), \rightharpoonupbar (⥓), \rightharpoonupdash (⥬), \rightimply (⥰), \rightleftarrows (⇄), \rightleftharpoons (⇌), \rightleftharpoonsdown (⥩), \rightleftharpoonsup (⥨), \rightmoon (☽), \rightouterjoin (⟖), \rightpentagon (⭔), \rightpentagonblack (⭓), \rightrightarrows (⇉), \rightsquigarrow (↝), \rightsquigarrow (⇝), \righttail (⤚), \rightthreearrows (⇶), \rightthreetimes (⋌), \rightwhitearrow (⇨), \ringplus (⨢), \risingdotseq (≓), \rmoustache (⎱), \rparenextender (⎟), \rparengtr (⦔), \rparenlend (⎠), \rparenuend (⎞), \rppolint (⨒), \rq (’), \rrangle (⦊), \rrparenthesis (⦈), \rsolbar (⧷), \rsqhook (⫎), \rsub (⩥), \rtimes (⋊), \rtriltri (⧎), \ruledelayed (⧴), \rvboxline (⎹), \rvzigzag (⧙). \sampi (ϡ), \sansLmirrored (⅃), \sansLturned (⅂), \saturn (♄), \scissors (✂), \scpolint (⨓), \scrB (ℬ), \scrE (ℰ), \scrF (ℱ), \scrH (ℋ), \scrI (ℐ), \scrL (ℒ), \scrM (ℳ), \scrR (ℛ), \scre (ℯ), \scrg (ℊ), \scro (ℴ), \scurel (⊱), \searrow (↘), \seovnearrow (⤭), \setminus (∖), \setminus (⧵), \sharp (♯), \shortdowntack (⫟), \shortleftarrow (←), \shortlefttack (⫞), \shortrightarrow (→), \shortrightarrowleftarrow (⥄), \shortuptack (⫠), \shuffle (⧢), \sigma (σ), \silon (υ), \silon (ϒ), \sim (∼), \simeq (≃), \simgE (⪠), \simgtr (⪞), \similarleftarrow (⭉), \similarrightarrow (⥲), \simlE (⪟), \simless (⪝), \simminussim (⩬), \simneqq (≆), \simplus (⨤), \simrdots (⩫), \sinewave (∿), \slash (∕), \smallblacktriangleleft (◂), \smallblacktriangleright (▸), \smalldiamond (⋄), \smallin (∊), \smallint (∫), \smallni (∍), \smallsetminus (∖), \smalltriangleleft (◃), \smalltriangleright (▹), \smashtimes (⨳), \smblkdiamond (⬩), \smblklozenge (⬪), \smblksquare (▪), \smeparsl (⧤), \smile (⌣), \smiley (☺), \smt (⪪), \smte (⪬), \smwhitestar (⭒), \smwhtcircle (◦), \smwhtlozenge (⬫), \smwhtsquare (▫), \spadesuit (♠), \sphericalangle (∢), \sphericalangleup (⦡), \sqcap (⊓), \sqcup (⊔), \sqint (⨖), \sqlozenge (⌑), \sqrt (√), \sqrt3 (∛), \sqrt4 (∜), \sqrtbottom (⎷), \sqsubset (⊏), \sqsubseteq (⊑), \sqsubsetneq (⋤), \sqsupset (⊐), \sqsupseteq (⊒), \sqsupsetneq (⋥), \squarecrossfill (▩), \squaregrayfill (▩), \squarehfill (▤), \squarehvfill (▦), \squareleftblack (◧), \squareleftblack (◨), \squarellblack (⬕), \squarellquad (◱), \squarelrblack (◪), \squarelrquad (◲), \squareneswfill (▨), \squarenwsefill (▧), \squareulblack (◩), \squareulquad (◰), \squareurblack (⬔), \squareurquad (◳), \squarevfill (▥), \squoval (▢), \ss (ß), \star (⋆), \stareq (≛), \sterling (£), \stigma (ϛ), \strns (⏤), \subedot (⫃), \submult (⫁), \subrarr (⥹), \subset (⊂), \subsetapprox (⫉), \subsetcirc (⟃), \subsetdot (⪽), \subseteq (⊆), \subseteqq (⫅), \subsetneq (⊊), \subsetneqq (⫋), \subsetplus (⪿), \subsim (⫇), \subsub (⫕), \subsup (⫓), \succ (≻), \succapprox (⪸), \succcurlyeq (≽), \succeq (⪰), \succeqq (⪴), \succnapprox (⪺), \succneq (⪲), \succneqq (⪶), \succnsim (⋩), \succsim (≿), \sum (∑), \sumbottom (⎳), \sumint (⨋), \sumtop (⎲), \sun (☼), \supdsub (⫘), \supedot (⫄), \suphsol (⟉), \suphsub (⫗), \suplarr (⥻), \supmult (⫂), \supn (ⁿ), \supset (⊃), \supsetapprox (⫊), \supsetcirc (⟄), \supsetdot (⪾), \supseteq (⊇), \supseteqq (⫆), \supsetneq (⊋), \supsetneqq (⫌), \supsetplus (⫀), \supsim (⫈), \supsub (⫔), \supsup (⫖), \surd (√), \swarrow (↙). \talloblong (⫾), \target (⌖), \tau (τ), \taurus (♉), \testhookx (ᶍ), \textAsterisks (⁑), \textacute (ˊ), \textadvanced (˖), \textain (ʿ), \textasciiacute (´), \textasciicircum (^), \textasciidieresis (¨), \textasciigrave (`), \textasciimacron (¯), \textasciitilde (~), \textasterisklow (⁎), \textbackdprime (‶), \textbackprime (‵), \textbacktrprime (‷), \textbardotlessj (ɟ), \textbardotlessjvar (ʄ), \textbarglotstop (ʡ), \textbari (ɨ), \textbarl (ƚ), \textbaro (ɵ), \textbarrevglotstop (ʢ), \textbaru (ʉ), \textbeltl (ɬ), \textbenttailyogh (ƺ), \textbreve (˘), \textbrokenbar (¦), \textbullet (•), \textbullseye (ʘ), \textcent (¢), \textcircledP (℗), \textcloseepsilon (ʚ), \textcloseomega (ɷ), \textcloserevepsilon (ɞ), \textcopyright (©), \textcrb (ƀ), \textcrh (ħ), \textcrinvglotstop (ƾ), \textcrlambda (ƛ), \textcrtwo (ƻ), \textctc (ɕ), \textctd (ȡ), \textctesh (ʆ), \textctj (ʝ), \textctl (ȴ), \textctn (ȵ), \textctt (ȶ), \textctyogh (ʓ), \textctz (ʑ), \textcurrency (¤), \textdctzlig (ʥ), \textdegree (°), \textdiscount (⁒), \textdollar ($), \textdotaccent (˙), \textdotlessj (ȷ), \textdoubleacute (˝), \textdoublebarpipe (ǂ), \textdoublepipe (ǁ), \textdprime (″), \textdptr (˅), \textdyoghlig (ʤ), \textdzlig (ʣ), \textepsilon (ɛ), \textesh (ʃ), \textestimated (℮), \textexclam (ǃ), \textexclamdown (¡), \textfishhookr (ɾ), \textflorin (ƒ), \textfranc (₣), \textgamma (ɣ), \textglotstop (ʔ), \textgrave (ˋ), \texthalflength (ˑ), \texthamza (ʾ), \texthen (ꜧ), \textheng (ꜧ), \texthooks (ᶊ), \texthookz (ᶎ), \texthtb (ɓ), \texthtc (ƈ), \texthtd (ɗ), \texthtg (ɠ), \texthth (ɦ), \texththeng (ɧ), \texthtk (ƙ), \texthtp (ƥ), \texthtq (ʠ), \texthtscg (ʛ), \texthtt (ƭ), \texthvlig (ƕ), \texthyphen (‐), \textinvglotstop (ʖ), \textinvscr (ʁ), \textiota (ɩ), \textlengthmark (ː), \textlhalfring (˓), \textlhookd (ᶁ), \textlhookk (ᶄ), \textlhookl (ᶅ), \textlhookt (ƫ), \textlhti (ɿ), \textlira (₤), \textlonglegr (ɼ), \textlongy (ʮ), \textlongy (ʯ), \textlooptoprevesh (ƪ), \textlowacute (ˏ), \textlowered (˕), \textlowgrave (ˎ), \textlowmacron (ˍ), \textlptr (˂), \textltailm (ɱ), \textltailn (ɲ), \textltilde (ɫ), \textlyoghlig (ɮ), \textmacron (ˉ), \textmu (µ), \textnumero (№), \textogonek (˛), \textohm (Ω), \textonehalf (½), \textonequarter (¼), \textonesuperior (¹), \textopeno (ɔ), \textordfeminine (ª), \textordmasculine (º), \textovercross (˟), \textoz (℥), \textpertenthousand (‱), \textperthousand (‰), \textpesetas (₧), \textphi (ɸ), \textpipe (ǀ), \textprime (′), \textprimstress (ˈ), \textqprime (⁗), \textquestiondown (¿), \textquotedbl ("), \textquotedblleft (“), \textquotedblright (”), \textraised (˔), \textraiseglotstop (ˀ), \textraiserevglotstop (ˁ), \textramshorns (ɤ), \textrecipe (℞), \textreferencemark (※), \textregistered (®), \textretracted (˗), \textreve (ɘ), \textrevepsilon (ɜ), \textrevglotstop (ʕ), \textrhalfring (˒), \textrhookrevepsilon (ɝ), \textrhookschwa (ɚ), \textrhoticity (˞), \textringaccent (˚), \textrptr (˃), \textrtaild (ɖ), \textrtaill (ɭ), \textrtailn (ɳ), \textrtailr (ɽ), \textrtails (ʂ), \textrtailt (ʈ), \textrtailz (ʐ), \textsca (ᴀ), \textscb (ʙ), \textsce (ᴇ), \textscg (ɢ), \textsch (ʜ), \textschwa (ə), \textsci (ɪ), \textscl (ʟ), \textscn (ɴ), \textscoelig (ɶ), \textscr (ʀ), \textscripta (ɑ), \textscriptg (ɡ), \textscriptv (ʋ), \textscu (ᴜ), \textscy (ʏ), \textsecstress (ˌ), \textsemicolonreversed (⁏), \textsilon (Υ), \textsmalltilde (˜), \textstretchcvar (ʗ), \textsubw (w), \textsuph (ʰ), \textsuphth (ʱ), \textsupinvscr (ʶ), \textsupj (ʲ), \textsupr (ʳ), \textsupturnr (ʴ), \textsupturnrrtail (ʵ), \textsupw (ʷ), \textsupy (ʸ), \texttctctlig (ʧ), \texttctctlig (ʨ), \textthreequarters (¾), \textthreesuperior (³), \texttrademark (™), \texttrprime (‴), \texttslig (ʦ), \textturna (ɐ), \textturncomma (ʻ), \textturnh (ɥ), \textturnk (ʞ), \textturnlonglegr (ɺ), \textturnm (ɯ), \textturnmrleg (ɰ), \textturnr (ɹ), \textturnrrtail (ɻ), \textturnscripta (ɒ), \textturnt (ʇ), \textturnv (ʌ), \textturnw (ʍ), \textturny (ʎ), \texttwosuperior (²), \textupsilon (ʊ), \textuptr (˄), \textvibyi (ʅ), \textvisiblespace (␣), \textyogh (ʒ), \th (þ), \therefore (∴), \thermod (⧧), \theta (θ), \thickapprox (≈), \thicksim (∼), \threedangle (⟀), \threedotcolon (⫶), \tieconcat (⁀), \tieinfty (⧝), \times (×), \timesbar (⨱), \tminus (⧿), \to (→), \toea (⤨), \tona (⤧), \tonebarextrahigh (˥), \tonebarextralow (˩), \tonebarhigh (˦), \tonebarlow (˨), \tonebarmid (˧), \top (⊤), \topbot (⌶), \topcir (⫱), \topfork (⫚), \topsemicircle (◠), \tosa (⤩), \towa (⤪), \tplus (⧾), \trapezium (⏢), \trianglecdot (◬), \triangledown (▿), \triangleexclam (⚠), \triangleleft (◁), \triangleleftblack (◭), \trianglelefteq (⊴), \triangleminus (⨺), \triangleodot (⧊), \triangleplus (⨹), \triangleq (≜), \triangleright (▷), \trianglerightblack (◮), \trianglerighteq (⊵), \triangles (⧌), \triangleserifs (⧍), \triangletimes (⨻), \triangleubar (⧋), \tripleplus (⧻), \trprime (‴), \turnangle (⦢), \turnediota (℩), \turnednot (⌙), \twocaps (⩋), \twocups (⩊), \twoheaddownarrow (↡), \twoheadleftarrow (↞), \twoheadleftarrowtail (⬻), \twoheadleftdbkarrow (⬷), \twoheadmapsfrom (⬶), \twoheadmapsto (⤅), \twoheadrightarrow (↠), \twoheadrightarrowtail (⤖), \twoheaduparrow (↟), \twoheaduparrowcircle (⥉), \twolowline (‗), \twonotes (♫), \typecolon (⦂). \ubrbrak (⏡), \uhorn (ư), \ularc (◜), \ulblacktriangle (◤), \ulcorner (⌜), \ulcrop (⌏), \ultriangle (◸), \uminus (⩁), \underbrace (⏟), \underbracket (⎵), \underparen (⏝), \unlhd (⊴), \unrhd (⊵), \upand (⅋), \uparrow (↑), \uparrowbarred (⤉), \uparrowoncircle (⦽), \updasharrow (⇢), \updownarrow (↕), \updownarrowbar (↨), \updownarrows (⇅), \updownharpoonleftleft (⥑), \updownharpoonleftright (⥍), \updownharpoonrightleft (⥌), \updownharpoonrightright (⥏), \updownharpoonsleftright (⥮), \upfishtail (⥾), \upharpoonleft (↿), \upharpoonleftbar (⥠), \upharpoonright (↾), \upharpoonrightbar (⥜), \upharpoonsleftright (⥣), \upin (⟒), \upint (⨛), \uplus (⊎), \uprightcurvearrow (⤴), \upuparrows (⇈), \upwhitearrow (⇧), \urarc (◝), \urblacktriangle (◥), \urcorner (⌝), \urcrop (⌎), \urtriangle (◹). \v (ˇ), \vBar (⫨), \vBarv (⫩), \vDash (⊨), \vDdash (⫢), \varTheta (ϴ), \varVdash (⫦), \varbarwedge (⌅), \varbeta (ϐ), \varclubsuit (♧), \vardiamondsuit (♦), \vardoublebarwedge (⌆), \varepsilon (ε), \varheartsuit (♥), \varhexagon (⬡), \varhexagonblack (⬢), \varhexagonlrbonds (⌬), \varin (∈), \varisinobar (⋶), \varisins (⋳), \varkappa (ϰ), \varlrtriangle (⊿), \varni (∋), \varniobar (⋽), \varnis (⋻), \varnothing (∅), \varointclockwise (∲), \varphi (φ), \varpi (ϖ), \varpropto (∝), \varrho (ϱ), \varrowextender (⏐), \varsigma (ς), \varspadesuit (♤), \varstar (✶), \vartheta (ϑ), \vartriangle (▵), \vartriangleleft (⊲), \vartriangleright (⊳), \varveebar (⩡), \vbraceextender (⎪), \vbrtri (⧐), \vdash (⊢), \vdots (⋮), \vectimes (⨯), \vee (∨), \veebar (⊻), \veedot (⟇), \veedoublebar (⩣), \veeeq (≚), \veemidvert (⩛), \veeodot (⩒), \veeonvee (⩖), \veeonwedge (⩙), \vert (|), \viewdata (⌗), \vlongdash (⟝), \vrectangle (▯), \vrectangleblack (▮), \vysmlblksquare (⬝), \vysmlwhtsquare (⬞), \vzigzag (⦚). \watchicon (⌚), \wedge (∧), \wedgebar (⩟), \wedgedot (⟑), \wedgedoublebar (⩠), \wedgemidvert (⩚), \wedgeodot (⩑), \wedgeonwedge (⩕), \wedgeq (≙), \whitearrowupfrombar (⇪), \whiteinwhitetriangle (⟁), \whitepointerleft (◅), \whitepointerright (▻), \whitesquaretickleft (⟤), \whitesquaretickright (⟥), \whthorzoval (⬭), \whtvertoval (⬯), \wideangledown (⦦), \wideangleup (⦧), \wp (℘), \wr (≀). \xbsol (⧹), \xi (ξ), \xsol (⧸), \yen (¥), \zeta (ζ), \zpipe (⨠), Я БУДУ КРАЙНЕ ПРИЗНАТЕЛЕН ЕСЛИ КТО-НИБУДЬ ПРОВЕРИТ СООТВЕТСТВИЕ ВСЕХ ИМЕН ПРАВИЛЬНЫМ ТЕХ-ИМ СИМВОЛАМ. mathgl-2.4.1/texinfo/parse_en.texi0000664000175000017500000007616113134046534016741 0ustar balakinbalakin @c ------------------------------------------------------------------ @chapter MGL scripts @nav{} MathGL library supports the simplest scripts for data handling and plotting. These scripts can be used independently (with the help of UDAV, mglconv, mglview programs and others @ifclear UDAV , @pxref{Utilities}) or in the frame of the library using. @end ifclear @menu * MGL definition:: * Program flow commands:: * LaTeX package:: @ifclear UDAV * mglParse class:: @end ifclear @end menu @c ------------------------------------------------------------------ @external{} @node MGL definition, Program flow commands, , MGL scripts @section MGL definition @nav{} MGL script language is rather simple. Each string is a command. First word of string is the name of command. Other words are command arguments. Words are separated from each other by space or tabulation symbol. The upper or lower case of words is important, i.e. variables @var{a} and @var{A} are different variables. Symbol @samp{#} starts the comment (all characters after # will be ignored). The exception is situation when @samp{#} is a part of some string. Also options can be specified after symbol @samp{;} (@pxref{Command options}). Symbol @samp{:} starts new command (like new line character) if it is not placed inside a string or inside brackets. If string contain references to external parameters (substrings @samp{$0}, @samp{$1} ... @samp{$9}) or definitions (substrings @samp{$a}, @samp{$b} ... @samp{$z}) then before execution the values of parameter/definition will be substituted instead of reference. It allows to use the same MGL script for different parameters (filenames, paths, condition and so on). Argument can be a string, a variable (data arrays) or a number (scalars). @itemize @bullet @item The string is any symbols between ordinary marks @samp{'}. Long strings can be concatenated from several lines by @samp{\} symbol. I.e. the string @samp{'a +\
b'} will give string @samp{'a + b'} (here @samp{
} is newline). There are several operations which can be performed with string: @itemize @bullet @item Concatenation of strings and numbers using @samp{,} with out spaces (for example, @samp{'max(u)=',u.max,' a.u.'} or @samp{'u=',!(1+i2)} for complex numbers); @item Getting n-th symbol of the string using @samp{[]} (for example, @samp{'abc'[1]} will give @code{'b'}); @item Adding value to the last character of the string using @samp{+} (for example, @samp{'abc'+3} will give @code{'abf'}). @end itemize @item Usually variable have a name which is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter. Note, you can start an expression with @samp{!} symbol if you want to use complex values. For example, the code @code{new x 100 'x':copy !b !exp(1i*x)} will create real valued data @var{x} and complex data @var{b}, which is equal to @math{exp(I*x)}, where @math{I^2=-1}. A temporary array can be used as variable too: @itemize @bullet @item sub-arrays (like in @ref{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}. @item any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')} if names for data columns was specified (by @ref{idset} command or in the file at string started with @code{##}). @item any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. @item temporary variable of higher dimensions by help of []. For example, @samp{[1,2,3]} will produce a temporary vector of 3 elements @{1, 2, 3@}; @samp{[[11,12],[21,22]]} will produce matrix 2*2 and so on. Here you can join even an arrays of the same dimensions by construction like @samp{[v1,v2,...,vn]}. @item result of code for making new data (@pxref{Make another data}) inside @{@}. For example, @samp{@{sum dat 'x'@}} produce temporary variable which contain result of summation of @var{dat} along direction 'x'. This is the same array @var{tmp} as produced by command @samp{sum tmp dat 'x'}. You can use nested constructions, like @samp{@{sum @{max dat 'z'@} 'x'@}}. @end itemize Temporary variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on). @item Special names @code{nan=#QNAN, inf=INFINITY, rnd=random value, pi=3.1415926..., on=1, off=0, all=-1, :=-1}, variables with suffixes (@pxref{Data information}), names defined by @ref{define} command, time values (in format "hh-mm-ss_DD.MM.YYYY", "hh-mm-ss" or "DD.MM.YYYY") are treated as number. Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}). @end itemize Before the first using all variables must be defined with the help of commands, like, @ref{new}, @ref{var}, @ref{list}, @ref{copy}, @ref{read}, @ref{hist}, @ref{sum} and so on (see sections @ref{Data constructor}, @ref{Data filling} and @ref{Make another data}). Command may have several set of possible arguments (for example, @code{plot ydat} and @code{plot xdat ydat}). All command arguments for a selected set must be specified. However, some arguments can have default values. These argument are printed in [], like @code{text ydat ['stl'='']} or @code{text x y 'txt' ['fnt'='' size=-1]}. At this, the record @code{[arg1 arg2 arg3 ...]} means @code{[arg1 [arg2 [arg3 ...]]]}, i.e. you can omit only tailing arguments if you agree with its default values. For example, @code{text x y 'txt' '' 1} or @code{text x y 'txt' ''} is correct, but @code{text x y 'txt' 1} is incorrect (argument @code{'fnt'} is missed). You can provide several variants of arguments for a command by using @samp{?} symbol for separating them. The actual argument being used is set by @ref{variant}. At this, the last argument is used if the value of @ref{variant} is large than the number of provided variants. By default the first argument is used (i.e. as for @code{variant 0}). For example, the first plot will be drawn by blue (default is the first argument @samp{b}), but the plot after @code{variant 1} will be drawn by red dash (the second is @samp{r|}): @verbatim fplot 'x' 'b'?'r' variant 1 fplot 'x^3' 'b'?'r|' @end verbatim @c ------------------------------------------------------------------ @external{} @node Program flow commands, LaTeX package, MGL definition, MGL scripts @section Program flow commands @nav{} Below I show commands to control program flow, like, conditions, loops, define script arguments and so on. Other commands can be found in chapters @ref{MathGL core} and @ref{Data processing}. Note, that some of program flow commands (like @ref{define}, @ref{ask}, @ref{call}, @ref{for}, @ref{func}) should be placed alone in the string. @cindex chdir @anchor{chdir} @deftypefn {MGL command} {} chdir 'path' Changes the current directory to @var{path}. @end deftypefn @cindex ask @anchor{ask} @deftypefn {MGL command} {} ask $N 'question' Sets @var{N}-th script argument to answer which give the user on the @var{question}. Usually this show dialog with question where user can enter some text as answer. Here @var{N} is digit (0...9) or alpha (a...z). @end deftypefn @cindex define @anchor{define} @deftypefn {MGL command} {} define $N smth Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present). Here @var{N} is digit (0...9) or alpha (a...z). @end deftypefn @deftypefn {MGL command} {} define name smth Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number. @end deftypefn @cindex defchr @anchor{defchr} @deftypefn {MGL command} {} defchr $N smth Sets @var{N}-th script argument to character with value evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z). @end deftypefn @cindex defnum @anchor{defnum} @deftypefn {MGL command} {} defnum $N smth Sets @var{N}-th script argument to number with value evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z). @end deftypefn @comment @cindex defpal @comment @anchor{defpal} @comment @deftypefn {MGL command} {} defpal $N smth @comment Sets @var{N}-th script argument to palette character at position evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z). @comment @end deftypefn @cindex call @anchor{call} @deftypefn {MGL command} {} call 'funcname' [ARG1 ARG2 ... ARG9] Executes function @var{fname} (or script if function is not found). Optional arguments will be passed to functions. See also @ref{func}. @end deftypefn @cindex func @anchor{func} @deftypefn {MGL command} {} func 'funcname' [narg=0] Define the function @var{fname} and number of required arguments. The arguments will be placed in script parameters $1, $2, ... $9. Note, script execution is stopped at @code{func} keyword, similarly to @ref{stop} command. See also @ref{return}. @end deftypefn @cindex return @anchor{return} @deftypefn {MGL command} {} return Return from the function. See also @ref{func}. @end deftypefn @cindex load @anchor{load} @deftypefn {MGL command} {} load 'filename' Load additional MGL command from external module (DLL or .so), located in file @var{filename}. This module have to contain array with name @code{mgl_cmd_extra} of type @code{mglCommand}, which describe provided commands. @end deftypefn @cindex if @anchor{if} @deftypefn {MGL command} {} if dat 'cond' Starts block which will be executed if @var{dat} satisfy to @var{cond}. @end deftypefn @deftypefn {MGL command} {} if @code{val} Starts block which will be executed if @code{val} is nonzero. @end deftypefn @cindex elseif @anchor{elseif} @deftypefn {MGL command} {} elseif dat 'cond' Starts block which will be executed if previous @code{if} or @code{elseif} is false and @var{dat} satisfy to @var{cond}. @end deftypefn @deftypefn {MGL command} {} elseif @code{val} Starts block which will be executed if previous @code{if} or @code{elseif} is false and @code{val} is nonzero. @end deftypefn @cindex else @anchor{else} @deftypefn {MGL command} {} else Starts block which will be executed if previous @code{if} or @code{elseif} is false. @end deftypefn @cindex endif @anchor{endif} @deftypefn {MGL command} {} endif Finishes @code{if/elseif/else} block. @end deftypefn @cindex for @anchor{for} @deftypefn {MGL command} {} for $N @code{v1 v2 [dv=1]} Starts cycle with $@var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}. Here @var{N} is digit (0...9) or alpha (a...z). @end deftypefn @deftypefn {MGL command} {} for $N dat Starts cycle with $@var{N}-th argument changing for @var{dat} values. Here @var{N} is digit (0...9) or alpha (a...z). @end deftypefn @cindex next @anchor{next} @deftypefn {MGL command} {} next Finishes @code{for} cycle. @end deftypefn @cindex once @anchor{once} @deftypefn {MGL command} {} once @code{val} The code between @code{once on} and @code{once off} will be executed only once. Useful for large data manipulation in programs like UDAV. @end deftypefn @cindex stop @anchor{stop} @deftypefn {MGL command} {} stop Terminate execution. @end deftypefn @cindex variant @anchor{variant} @deftypefn {MGL command} {} variant @code{val} Set variant of argument(s) separated by @samp{?} symbol to be used in further commands. @end deftypefn @cindex rkstep @anchor{rkstep} @deftypefn {MGL command} {} rkstep eq1;... var1;... [@code{dt=1}] Make one step for ordinary differential equation(s) @{var1' = eq1, ... @} with time-step @var{dt}. Here variable(s) @samp{var1}, ... are the ones, defined in MGL script previously. The Runge-Kutta 4-th order method is used for solution. @end deftypefn @c ------------------------------------------------------------------ @external{} @ifclear UDAV @node LaTeX package, mglParse class, Program flow commands, MGL scripts @end ifclear @ifset UDAV @node LaTeX package, , Program flow commands, MGL scripts @end ifset @section LaTeX package @nav{} There is LaTeX package @code{mgltex} (was made by Diego Sejas Viscarra) which allow one to make figures directly from MGL script located in LaTeX file. For using this package you need to specify @code{--shell-escape} option for @emph{latex/pdflatex} or manually run @emph{mglconv} tool with produced MGL scripts for generation of images. Don't forgot to run @emph{latex/pdflatex} second time to insert generated images into the output document. Also you need to run @emph{pdflatex} third time to update converted from EPS images if you are using vector EPS output (default). The package may have following options: @code{draft}, @code{final} --- the same as in the @emph{graphicx} package; @code{on}, @code{off} --- to activate/deactivate the creation of scripts and graphics; @code{comments}, @code{nocomments} --- to make visible/invisible commentaries contained inside @code{mglcomment} environments; @code{jpg}, @code{jpeg}, @code{png} --- to export graphics as JPEG/PNG images; @code{eps}, @code{epsz} --- to export to uncompressed/compressed EPS format as primitives; @code{bps}, @code{bpsz} --- to export to uncompressed/compressed EPS format as bitmap (doesn't work with @emph{pdflatex}); @code{pdf} --- to export to 3D PDF; @code{tex} --- to export to @emph{LaTeX/tikz} document. The package defines the following environments: @table @samp @item mgl It writes its contents to a general script which has the same name as the LaTeX document, but its extension is @emph{.mgl}. The code in this environment is compiled and the image produced is included. It takes exactly the same optional arguments as the @code{\includegraphics} command, plus an additional argument @var{imgext}, which specifies the extension to save the image. An example of usage of @samp{mgl} environment would be: @verbatim \begin{mglfunc}{prepare2d} new a 50 40 '0.6*sin(pi*(x+1))*sin(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' new b 50 40 '0.6*cos(pi*(x+1))*cos(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' \end{mglfunc} \begin{figure}[!ht] \centering \begin{mgl}[width=0.85\textwidth,height=7.5cm] fog 0.5 call 'prepare2d' subplot 2 2 0 : title 'Surf plot (default)' : rotate 50 60 : light on : box : surf a subplot 2 2 1 : title '"\#" style; meshnum 10' : rotate 50 60 : box surf a '#'; meshnum 10 subplot 2 2 2 : title 'Mesh plot' : rotate 50 60 : box mesh a new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)' new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)' new z 50 40 '0.8*cos(pi*(y+1)/2)' subplot 2 2 3 : title 'parametric form' : rotate 50 60 : box surf x y z 'BbwrR' \end{mgl} \end{figure} @end verbatim @item mgladdon It adds its contents to the general script, without producing any image. @item mglcode Is exactly the same as @samp{mgl}, but it writes its contents verbatim to its own file, whose name is specified as a mandatory argument. @item mglscript Is exactly the same as @samp{mglcode}, but it doesn't produce any image, nor accepts optional arguments. It is useful, for example, to create a MGL script, which can later be post processed by another package like "listings". @item mglblock It writes its contents verbatim to a file, specified as a mandatory argument, and to the LaTeX document, and numerates each line of code. @c This last three environments will test if the user is overwriting some file, and will issue a warning in that case. @item mglverbatim Exactly the same as @samp{mglblock}, but it doesn't write to a file. This environment doesn't have arguments. @item mglfunc Is used to define MGL functions. It takes one mandatory argument, which is the name of the function, plus one additional argument, which specifies the number of arguments of the function. The environment needs to contain only the body of the function, since the first and last lines are appended automatically, and the resulting code is written at the end of the general script, after the @ref{stop} command, which is also written automatically. The warning is produced if 2 or more function with the same name is defined. @item mglcomment Is used to contain multiline commentaries. This commentaries will be visible/invisible in the output document, depending on the use of the package options @code{comments} and @code{nocomments} (see above), or the @code{\mglcomments} and @code{\mglnocomments} commands (see bellow). @item mglsetup If many scripts with the same code are to be written, the repetitive code can be written inside this environment only once, then this code will be used automatically every time the @samp{\mglplot} command is used (see below). It takes one optional argument, which is a name to be associated to the corresponding contents of the environment; this name can be passed to the @samp{\mglplot} command to use the corresponding block of code automatically (see below). @end table The package also defines the following commands: @table @samp @item \mglplot It takes one mandatory argument, which is MGL instructions separated by the symbol @samp{:} this argument can be more than one line long. It takes the same optional arguments as the @samp{mgl} environment, plus an additional argument @var{setup}, which indicates the name associated to a block of code inside a @samp{mglsetup} environment. The code inside the mandatory argument will be appended to the block of code specified, and the resulting code will be written to the general script. An example of usage of @samp{\mglplot} command would be: @verbatim \begin{mglsetup} box '@{W9}' : axis \end{mglsetup} \begin{mglsetup}[2d] box : axis grid 'xy' ';k' \end{mglsetup} \begin{mglsetup}[3d] rotate 50 60 box : axis : grid 'xyz' ';k' \end{mglsetup} \begin{figure}[!ht] \centering \mglplot[scale=0.5]{new a 200 'sin(pi*x)' : plot a '2B'} \end{figure} \begin{figure}[!ht] \centering \mglplot[scale=0.5,setup=2d]{ fplot 'sin(pi*x)' '2B' : fplot 'cos(pi*x^2)' '2R' } \end{figure} \begin{figure}[!ht] \centering \mglplot[setup=3d]{fsurf 'sin(pi*x)+cos(pi*y)'} \end{figure} @end verbatim @item \mglgraphics This command takes the same optional arguments as the @samp{mgl} environment, and one mandatory argument, which is the name of a MGL script. This command will compile the corresponding script and include the resulting image. It is useful when you have a script outside the LaTeX document, and you want to include the image, but you don't want to type the script again. @item \mglinclude This is like @samp{\mglgraphics} but, instead of creating/including the corresponding image, it writes the contents of the MGL script to the LaTeX document, and numerates the lines. @item \mgldir This command can be used in the preamble of the document to specify a directory where LaTeX will save the MGL scripts and generate the corresponding images. This directory is also where @samp{\mglgraphics} and @samp{\mglinclude} will look for scripts. @item \mglquality Adjust the quality of the MGL graphics produced similarly to @ref{quality}. @item \mgltexon, \mgltexoff Activate/deactivate the creation of MGL scripts and images. Notice these commands have local behavior in the sense that their effect is from the point they are called on. @item \mglcomment, \mglnocomment Make visible/invisible the contents of the @code{mglcomment} environments. These commands have local effect too. @item \mglTeX It just pretty prints the name of the package. @end table As an additional feature, when an image is not found or cannot be included, instead of issuing an error, @code{mgltex} prints a box with the word @samp{MGL image not found} in the LaTeX document. @ifclear UDAV @c ------------------------------------------------------------------ @external{} @node mglParse class, , LaTeX package, MGL scripts @section mglParse class @nav{} @cindex mglParse Class for parsing and executing MGL script. This class is defined in @code{#include }. The main function of mglParse class is @code{Execute()}. Exactly this function parses and executes the script string-by-string. Also there are subservient functions for the finding and creation of a variable (object derived from @code{mglDataA}). These functions can be useful for displaying values of variables (arrays) in some external object (like, window) or for providing access to internal data. Function @code{AllowSetSize()} allows one to prevent changing the size of the picture inside the script (forbids the MGL command @code{setsize}). @c Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}). @deftypefn {Constructor on @code{mglParse}} @code{} mglParse (@code{bool} setsize=@code{false}) @deftypefnx {Constructor on @code{mglParse}} @code{} mglParse (@code{HMPR} pr) @deftypefnx {Constructor on @code{mglParse}} @code{} mglParse (@code{mglParse &}pr) @deftypefnx {C function} @code{HMPR} mgl_create_parser () Constructor initializes all values with zero and set @var{AllowSetSize} value. @end deftypefn @deftypefn {Destructor on @code{mglParse}} @code{} ~mglParse () @deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p) Destructor delete parser @end deftypefn @deftypefn {Method on @code{mglParse}} @code{HMPR} Self () Returns the pointer to internal object of type @code{HMPR}. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text) @deftypefnx{Method on @code{mglParse}} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text) @deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text) @deftypefnx {C function} @code{void} mgl_parse_textw (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text) Main function in the class. Function parse and execute line-by-line MGL script in array @var{text}. Lines are separated by newline symbol @samp{\n} as usual. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false}) @deftypefnx {C function} @code{void} mgl_parse_file (@code{HMGL} gr, @code{HMPR} p, @code{FILE *}fp, @code{int} print) The same as previous but read script from the file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0}) @deftypefnx {Method on @code{mglParse}} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0}) @deftypefnx {C function} @code{int} mgl_parse_line (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos) @deftypefnx {C function} @code{int} mgl_parse_linew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos) Function parses the string @var{str} and executes it by using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long, 4 -- strings is not closed. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{mglData} Calc (@code{const char *}formula) @deftypefnx {Method on @code{mglParse}} @code{mglData} Calc (@code{const wchar_t *}formula) @deftypefnx {C function} @code{HMDT} mgl_parser_calc (@code{HMPR} p, @code{const char *}formula) @deftypefnx {C function} @code{HMDT} mgl_parser_calcw (@code{HMPR} p, @code{const wchar_t *}formula) Function parses the string @var{formula} and return resulting data array. In difference to @code{AddVar()} or @code{FindVar()}, it is usual data array which should be deleted after usage. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{mglDataC} CalcComplex (@code{const char *}formula) @deftypefnx {Method on @code{mglParse}} @code{mglDataC} CalcComplex (@code{const wchar_t *}formula) @deftypefnx {C function} @code{HADT} mgl_parser_calc_complex (@code{HMPR} p, @code{const char *}formula) @deftypefnx {C function} @code{HADT} mgl_parser_calc_complexw (@code{HMPR} p, @code{const wchar_t *}formula) Function parses the string @var{formula} and return resulting data array with complex values. In difference to @code{AddVar()} or @code{FindVar()}, it is usual data array which should be deleted after usage. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} AddParam (@code{int} n, @code{const char *}str) @deftypefnx {Method on @code{mglParse}} @code{void} AddParam (@code{int} n, @code{const wchar_t *}str) @deftypefnx {C function} @code{void} mgl_parser_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val) @deftypefnx {C function} @code{void} mgl_parser_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val) Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 'z'-'a'+10). String @var{str} shouldn't contain @samp{$} symbol. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{mglVar *} FindVar (@code{const char *}name) @deftypefnx {Method on @code{mglParse}} @code{mglVar *} FindVar (@code{const wchar_t *}name) @deftypefnx {C function} @code{HMDT} mgl_parser_find_var (@code{HMPR} p, @code{const char *}name) @deftypefnx {C function} @code{HMDT} mgl_parser_find_varw (@code{HMPR} p, @code{const wchar_t *}name) Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script. You must @strong{not delete} obtained data arrays! @end deftypefn @deftypefn {Method on @code{mglParse}} @code{mglVar *} AddVar (@code{const char *}name) @deftypefnx {Method on @code{mglParse}} @code{mglVar *} AddVar (@code{const wchar_t *}name) @deftypefnx {C function} @code{HMDT} mgl_parser_add_var (@code{HMPR} p, @code{const char *}name) @deftypefnx {C function} @code{HMDT} mgl_parser_add_varw (@code{HMPR} p, @code{const wchar_t *}name) Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script. You must @strong{not delete} obtained data arrays! @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} OpenHDF (@code{const char *}fname) @deftypefnx {C function} @code{void} mgl_parser_openhdf (@code{HMPR} pr, @code{const char *}fname) Reads all data array from HDF5 file @var{fname} and create MGL variables with names of data names in HDF file. Complex variables will be created if data name starts with @samp{!}. @end deftypefn @deftypefn{Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name) @deftypefnx{Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name) @deftypefnx {C function} @code{void} mgl_parser_del_var (@code{HMPR} p, @code{const char *}name) @deftypefnx {C function} @code{void} mgl_parser_del_varw (@code{HMPR} p, @code{const wchar_t *}name) Function delete the variable with given @var{name}. @end deftypefn @deftypefn{Method on @code{mglParse} (C++)} @code{void} DeleteAll () @deftypefnx {C function} @code{void} mgl_parser_del_all (@code{HMPR} p) Function delete all variables and reset list of commands to default one in this parser. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} RestoreOnce () @deftypefnx {C function} @code{void} mgl_parser_restore_once (@code{HMPR} p) Restore Once flag. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} AllowSetSize (@code{bool} a) @deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a) Allow to parse @ref{setsize} command or not. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} AllowFileIO (@code{bool} a) @deftypefnx {C function} @code{void} mgl_parser_allow_file_io (@code{HMPR} p, @code{int} a) Allow reading/saving files or not. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} AllowDllCall (@code{bool} a) @deftypefnx {C function} @code{void} mgl_parser_allow_dll_call (@code{HMPR} p, @code{int} a) Allow to parse @ref{load} command or not. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} Stop () @deftypefnx {C function} @code{void} mgl_parser_stop (@code{HMPR} p) Sends stop signal which terminate execution at next command. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} SetVariant (@code{int} var=@code{0}) @deftypefnx {C function} @code{void} mgl_parser_variant (@code{HMPR} p, @code{int} var) Sets variant of argument(s) separated by @samp{?} symbol to be used in further commands. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} StartID (@code{int} id=@code{0}) @deftypefnx {C function} @code{void} mgl_parser_start_id (@code{HMPR} p, @code{int} id) Sets id (like, line number) of first line in further script parsing. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{long} GetCmdNum () @deftypefnx {C function} @code{long} mgl_parser_cmd_num (@code{HMPR} p) Return the number of registered MGL commands. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{const char *} GetCmdName (@code{long} id) @deftypefnx {C function} @code{const char *} mgl_parser_cmd_name (@code{HMPR} p, @code{long} id) Return the name of command with given @var{id}. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{int} CmdType (@code{const char *}name) @deftypefnx {C function} @code{int} mgl_parser_cmd_type (@code{HMPR} p, @code{const char *}name) Return the type of MGL command @var{name}. Type of commands are: 0 -- not the command, 1 - data plot, 2 - other plot, 3 - setup, 4 - data handle, 5 - data create, 6 - subplot, 7 - program, 8 - 1d plot, 9 - 2d plot, 10 - 3d plot, 11 - dd plot, 12 - vector plot, 13 - axis, 14 - primitives, 15 - axis setup, 16 - text/legend, 17 - data transform. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{const char *} CmdFormat (@code{const char *}name) @deftypefnx {C function} @code{const char *} mgl_parser_cmd_frmt (@code{HMPR} p, @code{const char *}name) Return the format of arguments for MGL command @var{name}. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{const char *} CmdDesc (@code{const char *}name) @deftypefnx {C function} @code{const char *} mgl_parser_cmd_desc (@code{HMPR} p, @code{const char *}name) Return the description of MGL command @var{name}. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} RK_Step (@code{const char *}eqs, @code{const char *}vars, @code{mreal} dt=@code{1}) @deftypefnx {Method on @code{mglParse}} @code{void} RK_Step (@code{const wchar_t *}eqs, @code{const wchar_t *}vars, @code{mreal} dt=@code{1}) @deftypefnx {C function} @code{void} mgl_rk_step (@code{HMPR} p, @code{const char *}eqs, @code{const char *}vars, @code{mreal} dt) @deftypefnx {C function} @code{void} mgl_rk_step_w (@code{HMPR} p, @code{const wchar_t *}eqs, @code{const wchar_t *}vars, @code{mreal} dt) Make one step for ordinary differential equation(s) @{var1' = eq1, ... @} with time-step @var{dt}. Here strings @var{eqs} and @var{vars} contain the equations and variable names separated by symbol @samp{;}. The variable(s) @samp{var1}, ... are the ones, defined in MGL script previously. The Runge-Kutta 4-th order method is used. @end deftypefn @end ifclear @external{} mathgl-2.4.1/texinfo/web_ru.texi0000664000175000017500000005216013134046534016421 0ustar balakinbalakin@c ------------------------------------------------------------------ @chapter Website @nav{} @menu * Main:: * News:: * Features:: * Pictures:: @c * MGL scripts:: * Download:: * Other projects:: @end menu @external{} @node Main, News, , Website @section MathGL is ... @nav{} @ifhtml @html
Surface in fog @end html @end ifhtml @itemize @bullet @item a library for making high-quality scientific graphics under Linux and Windows; @item a library for the fast data plotting and data processing of large data arrays; @item a library for working in window and console modes and for easy embedding into other programs; @item a library with large and growing set of graphics. @end itemize Now MathGL has more than 35000 lines of code, more than 55 general types of graphics for 1d, 2d and 3d data arrays, including special ones for chemical and statistical graphics. It can export graphics to raster and vector (EPS or SVG) formats. It has Qt, FLTK, OpenGL interfaces and can be used even from console programs. It has functions for data processing and script MGL language for simplification of data plotting. Also it has several types of transparency and smoothed lightning, vector fonts and TeX-like symbol parsing, arbitrary curvilinear coordinate system and many over useful things. It can be used from code written on C++/C/Fortran/Python/Octave and many other languages. Finally it is platform independent and free (under GPL v.2.0 license). There is a @uref{http://sourceforge.net/forum/?group_id=152187, forum} where you can ask a question or suggest an improvement. However the @uref{http://groups.google.com/group/mathgl, MathGL group} is preferable for quicker answer. For subscribing to @uref{http://groups.google.com/group/mathgl, MathGL group} you can use form below @ifhtml @html

Email: @end html @end ifhtml @strong{About LGPL and GPL licenses.} Generally, MathGL is GPL library. However, you can use LGPL license for MathGL core and widgets if you don't use SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page. @strong{Latest news} @itemize @item @strong{20 July 2017.} New version (v.2.4.1) with bugfixes of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. @item @emph{17 May 2017.} New version (v.2.4) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @code{mgllab} executable, string manipulation in MGL, new functions, plot types and styles, translation to Russian using @code{gettext} and bugfixes, which denoted @ref{News, here}. @end itemize There is detailed @ref{News, news list}. Sourceforge project page @uref{http://sourceforge.net/projects/mathgl/, here}. @ifhtml @html DATADVANCE @end html @end ifhtml Javascript interface was developed with support of @url{http://www.datadvance.net, DATADVANCE} company. @external{} @node News, Features, Main, Website @section News @nav{} @itemize @item @strong{20 July 2017.} New version (v.2.4.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. @itemize @bullet @item Add @ref{beltc} plot, which is @ref{belt} with manual coloring. @item Add style @samp{~} for @ref{plot} and @ref{tens} to omit some points at output. @item Add style @samp{:} for @ref{axis} to draw lines through point (0,0,0). @item Bugfixes. @end itemize @item @strong{17 May 2017.} New version (v.2.4) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @code{mgllab} executable, string manipulation in MGL, new functions, plot types and styles, translation to Russian using @code{gettext} and bugfixes: @itemize @bullet @item Add @code{mgllab} executable, which is FLTK based version of @code{UDAV}. So, most things @code{mgllab} do faster. @item Add string manipulation in MGL language: @itemize @bullet @item 'str'[n] -- get string of only n-th symbol; @item 'str'+v -- add value v to the last character of the string; @item 'str',val or 'str',!val -- append numeric value to the string (as before). @end itemize @item Add time value to MGL language in format: @samp{hh-mm-ss_DD.MM.YYYY} or @samp{hh-mm-ss} or @samp{DD.MM.YYYY}. @item Add @ref{iris} plot to show cross-dependencies of several data arrays. @item Add @ref{flame2d} to draw flame fractals. @item Add @ref{bbox} to set bounding box for 2D output. @item Add @ref{section} to get part of data between specified values. @item Add @ref{detect} to found curves along data maximums. @item Add @ref{dilate} to extend the region of 1-th value. @item Add @ref{erode} to narrow the region of 1-th value. @item Add @ref{apde} to solve PDE equation in inhomogeneous nonlinear media with spatial dispersion. @item Add @ref{symbol} to draw the glyphs defined by @ref{addsymbol}. @item Add @ref{addsymbol} to declare user-defined symbol (or glyph), which can be used as markers for plot (with style '&') or drawn itself by @ref{symbol} command. @item Add @ref{openhdf} to open all data arrays from HDF file. @item Extend @ref{crop} to cut to optimal size for FFT (i.e. to closest of 2^n*3^m*5^l). @item Add function mgl_data_max_first() and data suffixes .m[xyz][fl] to find first/last maximum along direction (see @ref{Data information}). @item Add function mgl_datac_diff_par() to parametric derivative of complex data (see @ref{diff}). @item Add style @samp{F} for @ref{bars} and @ref{barh} to set fixed bar widths. @item Add style @samp{a} for @ref{plot}, @ref{tens}, @ref{area} and @ref{region} to accurate drawing of data, which partially lie out of axis range. @item Add style @samp{#} for @ref{region} to draw wired plot. @item Add possibility of manual shift in @ref{multiplot}. @item Add parsing arguments of options for MGL commands. @item MGL command @ref{correl} now can perform 2d and 3d correlations. @item Option @ref{meshnum} now change the number of drawn markers for @ref{plot}, @ref{tens}, @ref{step}, @ref{mark} and @ref{textmark}. @item Function @ref{step} handle data with x.nx>y.nx similarly to @ref{bars}. @item Extend @ref{tile} and @ref{tiles} by adding manual coloring and face orientation. @item Add variant of MGL command @ref{copy} to copy data with "incorrect" names. @item Improve tick labels drawing. @item Improve time-ticks (add weeks) and add subticks to its. @item Improve @ref{fplot} to handle several singularities. @item Add LaTeX command \dfrac@{@}@{@}. This is full-sized version of \frac@{@}@{@}. Unfortunately, there is no support of nesting. Contrary, \frac allow nesting. @item Add mglODEc() -- ODE solver for complex variables (see @ref{ode}). @item Add cmplx(a,b)=a+i*b to the list of known functions in formula parsing @item Update CMake find_package to find MathGL. @item Increase line width for wired text. @item Update documentation: add description of new commands, add hint @ref{Mixing bitmap and vector output}. @item Add translation to Russian for most of labels and messages. @item Name @code{all} are reserved in MGL scripts now as synonym of -1. @item INCOMPATIBLE: Replace libmgl-qt by libmgl-qt4 and libmgl-qt5 for resolving conflicts of simultaneously installed both Qt4 and Qt5. @item Minor bugfixes. @end itemize @item @strong{20 June 2016.} Version 2.3.5.1 was released. @item @strong{16 May 2016.} Version 2.3.5 was released. @item @strong{13 February 2016.} Version 2.3.4 was released. @item @strong{1 June 2015.} Version 2.3.3 was released. @item @strong{2 February 2015.} Version 2.3.2 was released. @item @strong{21 October 2014.} Version 2.3.1 was released. @item @strong{7 August 2014.} Version 2.3 was released. @item @strong{19 March 2014.} Version 2.2.2.1 was released. @item @strong{10 March 2014.} Version 2.2.2 was released. @item @strong{22 January 2014.} Version 2.2.1 was released. @item @strong{11 November 2013.} Version 2.2 was released. @item @strong{8 May 2013.} Version 2.1.3.1 was released. @item @strong{2 May 2013.} Version 2.1.3 was released. @item @strong{28 January 2013.} Version 2.1.2 was released. @item @strong{24 December 2012.} Version 2.1.1 was released. @item @strong{13 December 2012.} Version 2.1 was released. @item @strong{23 August 2011.} Version 2.0.beta was released. @item @strong{30 May 2011.} Version 1.11.2 was released. @item @strong{8 November 2010.} Version 1.11 was released. @item @strong{28 December 2009.} Version 1.10 was released. @item @strong{8 July 2009.} Version 1.9 was released. @item @strong{27 November 2008.} Version 1.8 was released. @item @strong{5 June 2008.} Version 1.7 was released. @item @strong{17 March 2008.} Version 1.6 was released. @item @strong{11 January 2008.} Version 1.5 was released. @item @strong{30 October 2007.} Version 1.4 was released. @item @strong{15 October 2007.} Version 1.3 was released. @item @strong{10 September 2007.} Version 1.2 was released. @item @strong{23 May 2007.} Version 1.1 was released. @item @strong{2 April 2007.} Version 1.0 was released. @item @strong{24 January 2007.} First public release (v.0.8). @end itemize @external{} @node Features, Pictures, News, Website @section Features @nav{} MathGL can plot a wide range of graphics. It includes: @itemize @bullet @item one-dimensional: Plot, Area, Bars, Step, Stem, Torus, Chart, Error, Tube, Mark, (@ref{1D plotting}); @item two-dimensional plots: Mesh, Surf, Dens, Cont, ContF, Boxs, Axial, Fall, Belt, Tile, including surfaces transparent (SurfA) or colored (SurfC) by another data (@ref{2D plotting}); @item three-dimensional plots: Surf3, Dens3, Cont3, ContF3, Cloud-like, including isosurfaces transparent (Surf3A) or colored (Surf3C) by another data (@ref{3D plotting}); @item vector fields plots: vector fields Vect, Vect3 and Traj, flow threads Flow, flow pipes Pipe, mapping chart Map, and so on (@ref{Vector fields}); @item and so on. See also @ref{Extra samples}. @end itemize In fact, I created the functions for drawing of all the types of scientific plots that I know. The list of plots is growing; if you need some special type of a plot then please email me @email{mathgl.abalakin@@gmail.com, e-mail} and it will appear in the new version. I tried to make plots as nice looking as possible: e.g., a surface can be transparent and highlighted by several (up to 10) light sources. Most of the drawing functions have 2 variants: simple one for the fast plotting of data, complex one for specifying of the exact position of the plot (including parametric representation). Resulting image can be saved in bitmap PNG, JPEG, TGA, BMP format, or in vector EPS, SVG or TeX format, or in 3D formats OBJ, OFF, STL or in PRC format. All texts are drawn by vector fonts, which allows for high scalability and portability. Texts may contain commands for: some of the TeX-like symbols, changing index (upper or lower indexes) and the style of font inside the text string. Texts of ticks are rotated with axis rotation. It is possible to create a legend of plot and put text in an arbitrary position on the plot. Arbitrary text encoding (by the help of function @code{setlocale()}) and UTF-16 encoding are supported. Special class mglData is used for data encapsulation. In addition to a safe creation and deletion of data arrays it includes functions for data processing (smoothing, differentiating, integrating, interpolating and so on) and reading of data files with automatic size determination. Class mglData can handle arrays with up to three dimensions (arrays which depend on up to 3 independent indexes @math{a_@{ijk@}}). Using an array with higher number of dimensions is not meaningful, because I do not know how it can be plotted. Data filling and modification may be done manually or by textual formulas. There is fast evaluation of a textual mathematical expression. It is based on string precompilation to tree-like code at the creation of class instance. At evaluation stage code performs only fast tree-walk and returns the value of the expression. In addition to changing data values, textual formulas are also used for drawing in @emph{arbitrary} curvilinear coordinates. A set of such curvilinear coordinates is limited only by user's imagination rather than a fixed list like: polar, parabolic, spherical, and so on. @external{} @node Pictures, Download, Features, Website @section Pictures @nav{} There are samples for @ref{1D data plotting, 1D arrays}, @ref{2D data plotting, 2D arrays}, @ref{3D data plotting, 3D arrays}, @ref{Vector fields plotting} and some @ref{Extra samples}. @anchor{1D data plotting} @subheading Examples of graphics for 1d arrays @sfig{plot, Plot sample} @sfig{radar, Radar sample} @sfig{step, Step sample} @sfig{tens, Tens sample} @sfig{area, Area sample} @sfig{region,Region sample} @sfig{stem, Stem sample} @sfig{torus,Torus sample} @sfig{bars, Bars sample} @sfig{barh, Barh sample} @sfig{cones,Cones sample} @sfig{chart,Chart sample} @sfig{boxplot,BoxPlot sample} @sfig{candle, Candle sample} @sfig{tube, Tube sample} @sfig{tape, Tape sample} @sfig{error,Error sample} @sfig{mark, Mark sample} @sfig{textmark, TextMark sample} @sfig{label,Label sample} @anchor{2D data plotting} @subheading Examples of graphics for 2d arrays @sfig{surf, Surf sample} @sfig{surfc,SurfC sample} @sfig{surfa,SurfA sample} @sfig{mesh, Mesh sample} @sfig{fall, Fall sample} @sfig{belt, Belt sample} @sfig{boxs, Boxs sample} @sfig{axial,Axial sample} @sfig{dens, Dens sample} @sfig{tile, Tile sample} @sfig{tiles,TileS sample} @sfig{grad, Grad sample} @sfig{cont, Cont sample} @sfig{contf,ContF sample} @sfig{contd,ContD sample} @sfig{contv,ContV sample} @anchor{3D data plotting} @subheading Examples of graphics for 3d arrays @sfig{surf3, Surf3 sample} @sfig{surf3c,Surf3C sample} @sfig{surf3a,Surf3A sample} @sfig{cloud, Cloud sample} @sfig{densa, Dens3 sample} @sfig{conta, Cont3 sample} @sfig{contfa,ContF3 sample} @sfig{dots, Dots sample} @sfig{dens_xyz, Dens projection sample} @sfig{cont_xyz, Cont projection sample} @sfig{contf_xyz,ContF projection sample} @sfig{triplot, TriPlot and QuadPlot} @anchor{Vector fields plotting} @subheading Examples of graphics for vector fields @sfig{vect, Vect sample} @sfig{vecta,Vect3 sample} @sfig{flow, Flow sample} @sfig{pipe, Pipe sample} @sfig{traj, Traj sample} @sfig{dew, Dew sample} @anchor{Extra samples} @subheading Examples of additional features @sfig{inplot, Subplots} @sfig{axis, Axis and ticks} @sfig{ticks, Axis and ticks} @sfig{loglog, Axis and ticks} @sfig{curvcoor, Curvilinear coordinates} @sfig{colorbar, Colorbars} @sfig{box, Bounding box} @sfig{ternary, Ternary axis} @sfig{text, Text features} @sfig{legend, Legend sample} @sfig{cut, Cutting sample} @sfig{alpha, Transparency and lighting} @sfig{type0, Types of transparency} @sfig{type1, Types of transparency} @sfig{type2, Types of transparency} @sfig{fog, Adding fog} @sfig{combined, ``Compound'' graphics} @sfig{several_light, Lighting sample} @sfig{stereo, Stereo image} @sfig{primitives, Using primitives} @sfig{stfa, STFA sample} @sfig{dat_diff, Change data} @sfig{dat_extra, Change data} @sfig{map, Mapping visualization} @sfig{hist, Making histogram} @sfig{fit, Nonlinear fitting hints} @sfig{pde, PDE solving hints} @sfig{parser, Using MGL parser} @external{} @node Download, Other projects, Pictures, Website @section Download @nav{} @strong{Stable version (v.@value{VERSION})} You may download current version of MathGL for following configurations: @itemize @bullet @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.tar.gz, Source} file with cmake build system. @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}-mingw.win32.7z,GPL} or @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-mingw.win32.7z,LGPL} binaries for MinGW, 32-bit build for Pentium IV. @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}-mingw.win64.7z,GPL} or @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-mingw.win64.7z,LGPL} binaries for MinGW, 64-bit build. @item MathGL utilities with all required DLL files for @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win32.7z,32-bit} and @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win64.7z,64-bit} versions of MS Windows. @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.eng.pdf,PDF} documentation in English. @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-doc-html-@value{VERSION}@value{MINVER}.7z, Archive} with HTML documentation and figures. @c @item @c @uref{http://downloads.sourceforge.net/mathgl/mathgl_slides-1.9.pdf,PDF} slideshow of main features @end itemize @strong{Font files} There are a set of @uref{http://sourceforge.net/project/showfiles.php?group_id=152187&package_id=267177,font files} for MathGL with following typefaces. Note, that the set of glyphs can be less than in default font. As result not all TeX symbols can be displayed. @itemize @bullet @item @uref{http://downloads.sourceforge.net/mathgl/STIX_font.tgz,STIX} font -- default font for MathGL. @item @uref{http://downloads.sourceforge.net/mathgl/adventor_font.tgz,Adventor font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} sansserif font based on the URW Gothic L family (like Avant Garde Gothic). @item @uref{http://downloads.sourceforge.net/mathgl/bonum_font.tgz,Bonum font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif font based on the URW Bookman L family. @item @uref{http://downloads.sourceforge.net/mathgl/chorus_font.tgz,Chorus font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} font based on the URW Chancery L Medium Italic. @item @uref{http://downloads.sourceforge.net/mathgl/cursor_font.tgz,Cursor font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} monospaced serif font based on the URW Nimbus Mono L (like Courier). @item @uref{http://downloads.sourceforge.net/mathgl/heros_font.tgz,Heros font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} sansserif font based on the URW Nimbus Sans L (like Helvetica). @item @uref{http://downloads.sourceforge.net/mathgl/heroscn_font.tgz,HerosCN font} -- the "compressed" version of previous one. @item @uref{http://downloads.sourceforge.net/mathgl/pagella_font.tgz,Pagella font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif font based on the URW Palladio L (like Palatino). @item @uref{http://downloads.sourceforge.net/mathgl/schola_font.tgz,Schola font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif fonts is based on the URW Century Schoolbook L. @item @uref{http://downloads.sourceforge.net/mathgl/termes_font.tgz,Termes font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif fonts is based on the Nimbus Roman No9 L (like Times). @end itemize @external{} @node Other projects, , Download, Website @section Other projects @nav{} Except scientific (non public) projects I also have some general interest projects: @itemize @bullet @item @uref{http://sourceforge.net/projects/pocketmk/, PocketMK} is small program for PocketPC which simulate famous Russian calculators MK-61 and slightly extend it. @item @uref{http://udav.sourceforge.net/,UDAV} is front-end for MGL scripts. It has windows interface for data viewing, changing and plotting. Also it can execute MGL scripts, setup and rotating graphics and so on. @end itemize Also I recommend to look at: @itemize @bullet @item @uref{http://englab.bugfest.net/,EngLab} is a cross-compile mathematical platform with a C like syntax intended to be used both by engineers and users with small programming knowledge. It is extremely scalable and allows users and the community to easily compile their own functions as shared objects. @item @uref{http://threedepict.sourceforge.net/,3Depict} is software for analysis of scientific datasets commonly encountered in atom probe tomography. You can manipulate, interact with and analyse point based datasets. @item @uref{http://www.sourceforge.net/projects/graphplot/,Graphplot} is function plotter based on MathGL. @item @uref{http://www.sourceforge.net/projects/graphplot/,OscillViewer} is oscilloscope monitoring program. Working with L-Card 14-140 AD-Convertor. Based on Qt and MathGL libraries. @end itemize Finally, few links to free software and libraries: @itemize @bullet @item @uref{http://www.thefreecountry.com/,thefreecountry.com} have a lot of Free Programmers', Webmasters' and Security Resources @item @uref{http://gnuwin32.sourceforge.net/,GnuWin} provides ports of tools with a GNU or similar open source license, to modern MS-Windows. @item @uref{http://loll.sourceforge.net/,LLoL} is project collecting, organising, classifying, and maintaining important URLs about Linux and the Open Source movement for all levels of Linux users. The LoLL project now has 4000+ links which are updated usually on a daily basis. @end itemize @external{} mathgl-2.4.1/texinfo/mathgl.js0000664000175000017500000004244013134046534016055 0ustar balakinbalakin/*************************************************************************** * mathgl.js is part of Math Graphic Library * Copyright (C) 2012 Alexey Balakin * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Library General Public License as * * published by the Free Software Foundation; either version 3 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 Library 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. * ***************************************************************************/ var obj; var ctx; var cw,ch; var deg = Math.PI/180; //0.017453293; var main = function() { ctx = document.getElementById("canvas").getContext("2d"); cw = document.getElementById("canvas").width; ch = document.getElementById("canvas").height; ctx.lineCap="round"; // global setting mgl_init("json/alpha.json"); // mgl_init("json/alpha.jsonz"); var t1 = new Date(); mgl_draw_good(obj, ctx); // draw_fast(obj, ctx); var t2 = new Date(); document.getElementById("time").innerHTML = "Drawing time is "+(t2.getTime()-t1.getTime())+" ms. Number of primitives is "+obj.nprim+". Canvas size is "+obj.width+"*"+obj.height+" points."; }; var mglChange = function() { var name = document.getElementById("select").value; mgl_init("json/"+name+".json"); var t1 = new Date(); ctx.clearRect(0,0,cw,ch); mgl_draw_good(obj, ctx); // draw_fast(obj, ctx); var t2 = new Date(); document.getElementById("time").innerHTML = "Drawing time is "+(t2.getTime()-t1.getTime())+" ms. Number of primitives is "+obj.nprim; } // mouse handling functions var mglMouseUp = function() { obj.button = 0; obj.good = 0; ctx.clearRect(0,0,cw,ch); mgl_draw_good(obj, ctx); } var mglMouseDown = function(event) { obj.good = 1; obj.mouseX = event.clientX; obj.mouseY = event.clientY; obj.button = event.button+1; } var mglMouseMove = function(event) { var x = event.clientX-obj.mouseX; var y = event.clientY-obj.mouseY; switch(obj.button) { case 1: // rotate mgl_rotate_down(obj, y*180/ch); mgl_rotate_left(obj, x*180/cw); break; case 2: // shift mgl_shift_down(obj, y/ch); mgl_shift_right(obj, x/cw); break; case 3: // zoom mgl_zoom_in(obj, Math.pow(1.003,x)); break; } if(obj.button) { obj.mouseX += x; obj.mouseY += y; mgl_draw(obj, ctx); } } var mglMouseWheel = function(event) { // var e = window.event; var d = event.wheelDelta? event.wheelDelta:event.detail*(-120); mgl_zoom_in(obj, Math.pow(1.002,d)); mgl_draw(obj, ctx); } var mglRestore = function() { mgl_restore(obj); ctx.clearRect(0,0,cw,ch); mgl_draw_good(obj,ctx); } // The function load data and set up rotation/zoom state var mgl_init = function(name) { // now obtain JSON data var req = new XMLHttpRequest(), txt; req.open( "GET", name, false ); req.overrideMimeType('text\/plain; charset=x-user-defined'); /* req.responseType = "arraybuffer"; req.onload = function (oEvent) { var arrayBuffer = req.response; // Note: not oReq.responseText console.debug("arrayBuffer=",arrayBuffer); if (arrayBuffer) { var compressed = new Uint8Array(arrayBuffer); console.debug("compressed=",compressed); // var gunzip = new Zlib.Gunzip(compressed); // txt = gunzip.decompress(); var inflate = new Zlib.Inflate(arrayBuffer); txt = inflate.decompress(); } };*/ req.send(null); // if(name[name.length-1]!='z') txt = req.responseText; // else // { // console.debug("compressed=",req.responseText); // var inflate = new Zlib.Inflate(req.responseText); // txt = inflate.decompress(); // } obj = JSON.parse(txt); // copy original data for transformation obj.pp = new Array(); for(var i=0;iMath.PI/2) t += Math.PI; } else t=0; var c=Math.cos(t), s=Math.sin(t), d=prim[6]/200; var b=[d*c, d*s, d*s, -d*c, obj.pp[n1][0],obj.pp[n1][1]]; var x=obj.coor[n2][0]*scl/100, y=obj.coor[n2][1]*scl/100, f=prim[8]*scl/1e5; if(n3&8) { if(!(n3&4)) mgl_line_glyph(ctx, x,y, f,1,b); else mgl_line_glyph(ctx, x,y, f,0,b); } else { if(!(n3&4)) mgl_fill_glyph(ctx, x,y, f,obj.glfs[n4],b); else mgl_wire_glyph(ctx, x,y, f,obj.glfs[n4],b); } break; } } // This function change coordinates according current transformations // Usually this Function is called internally by draw() var mgl_prepare = function(obj, skip) { // fill transformation matrix if(!skip) { var dx = 1/Math.abs(obj.z[1]-obj.z[0]); var dy = 1/Math.abs(obj.z[3]-obj.z[2]); var cx=Math.cos(obj.tet*deg), sx=Math.sin(obj.tet*deg); // tetx var cy=Math.cos(obj.phi*deg), sy=Math.sin(obj.phi*deg); // tety var cz=Math.cos(obj.bet*deg), sz=Math.sin(obj.bet*deg); // tetz obj.b = [obj.dx*dx*cx*cy, -obj.dx*dx*cy*sx, obj.dx*dx*sy, obj.dy*dy*(cx*sy*sz+cz*sx), obj.dy*dy*(cx*cz-sx*sy*sz), -obj.dy*dy*cy*sz, sx*sz-cx*cz*sy, cx*sz+cz*sx*sy, cy*cz, cw/2*(1+dx-obj.z[1]-obj.z[0])/dx, ch/2*(1+dy-obj.z[3]-obj.z[2])/dy, obj.depth/2, obj.dx*dx,obj.dy*dy,1]; } // now transform points for found transformation matrix var b = obj.b, i; for(i=0;i=0) // TODO: check later when mglInPlot will be ready obj.pp[i] = [b[9] + b[0]*x + b[1]*y + b[2]*z, b[10] + b[3]*x + b[4]*y + b[5]*z, b[11] + b[6]*x + b[7]*y + b[8]*z]; else obj.pp[i] = [b[9]+b[12]*x,b[10]+b[13]*y,b[11]+b[14]*z]; } if(obj.pf) for(var i=0;i=0) // TODO: check later when mglInPlot will be ready { obj.pp[i][0] = d*obj.pp[i][0] + (1-d)/2*obj.width; obj.pp[i][1] = d*obj.pp[i][1] + (1-d)/2*obj.height; } } // fill z-coordinates for primitives if(!obj.fast) { for(i=0;i' ctx.moveTo(x-s/2,y-s); ctx.lineTo(x-s/2,y+s); ctx.lineTo(x+s,y); ctx.closePath(); ctx.stroke(); break; // case 46: // '.' default: ctx.rect(x,y,1,1); ctx.fill(); break; } } // This function for internal use only!!! var mgl_fill_glyph = function(ctx, x,y, f,g,b) { var xx,yy,j; var np=0; ctx.beginPath(); for(j=0;j @end html @ @ @ref{Main, Main page}@* @ @ @ref{News}@* @ @ @ref{Pictures}@* @ @ @ref{Download}@* @comment @ @ @ref{Download} @html
Google Groups
MathGL

@end html @end macro @macro external {} @html

@comment
SourceForge.net Logo thefreecountry.com: Free Programmers' Resources, Free Webmasters' Resources, Free Security Resources, Free Software Support This Project
@end html @end macro @macro fig {fname,text} @center @image{../\fname\, 11cm, , \text\, png} @end macro @macro pfig {fname,text} @uref{../pdf/\fname\.pdf, @image{../png/\fname\, 11cm, , \text\, png}} @c @center @image{../png/\fname\, 11cm, , \text\ См. также пример @uref{../pdf/\fname\.pdf, 3D PDF}, .png} @end macro @macro ufig {fname,width,text} @center @image{../udav/\fname\, \width\cm, , \text\, png} @end macro @macro sfig {plot,text} @ref{\text\, @image{../small/\plot\-sm,3cm, , , png}} @end macro @macro sref {arg} См. раздел @ref{\arg\}, для примеров кода и графика. @end macro @node Website, Overview, , Top @include web_ru.texi @node Overview, Examples, Website, Top @include overview_ru.texi @node Examples, General concepts, Overview, Top @include example_ru.texi @node General concepts, MathGL core, Examples, Top @include concept_ru.texi @node MathGL core, Widget classes, General concepts, Top @include core_ru.texi @node Widget classes, Data processing, MathGL core, Top @include widget_ru.texi @node Data processing, MGL scripts, Widget classes, Top @include data_ru.texi @node MGL scripts, UDAV, Data processing, Top @include parse_ru.texi @node UDAV, Other classes, MGL scripts, Top @include udav_ru.texi @node Other classes, Symbols and hot-keys, UDAV, Top @include other_ru.texi @node Symbols and hot-keys, File formats, Other classes, Top @appendix Symbols and hot-keys @include symbols_ru.texi @node File formats, TeX-like symbols, Symbols and hot-keys, Top @appendix File formats @include formats_ru.texi @node TeX-like symbols, Plotting time, File formats, Top @appendix Символы TeX @include appendix_ru.texi @node Plotting time, Copying This Manual, TeX-like symbols, Top @appendix Время отрисовки @nav{} В таблице показаны времена создания графика для всех примеров из файла @uref{http://sourceforge.net/p/mathgl/code/HEAD/tree/mathgl-2x/examples/samples.cpp, examples/samples.cpp}. Тест выполнен на моем ноутбуке (i5-2430M) с 64-bit Debian. Несколько слов о скорости. Во-первых, прямое рисование в память (Quality=4,5,6) быстрее буферизованного (Quality=0,1,2), но иногда результат некоректен (см. @ref{cloud}) и пропадает возможность экспорта в векторные и 3d форматы (например, EPS, SVG, PDF, ...). Во-вторых, обычно картинка худшего качества рисуется быстрее, т.е. Quality=1 быстрее Quality=2, и Quality=0 быстрее Quality=1. Однако, если график содержит множество граней (например @ref{cloud}, @ref{surf3}, @ref{pipe}, @ref{dew}), то Quality=0 может быть достаточно медленным, особенно для маленьких картинок. Наконец, картинки меньшего размера рисуются быстрее. Результаты для изображения размером 800*600 (по умолчанию). @include time.texi Результаты для изображения размером 1920*1440 (для печати) @include time_big.texi @node Copying This Manual, Index, Plotting time, Top @appendix GNU Free Documentation License @include fdl.texi @node Index, , Copying This Manual, Top @unnumbered Index @printindex cp @bye mathgl-2.4.1/texinfo/udav/0000775000175000017500000000000013134046534015176 5ustar balakinbalakinmathgl-2.4.1/texinfo/udav/udav_help.png0000664000175000017500000031417613134046534017667 0ustar balakinbalakinPNG  IHDR:sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwxT!-*b;""6ĊQ@D,ABb] t2ɒM#J꒿.E!χG$+3?-u=ŋQ>|ŋpw( ;vbr*?mYjV:g_]BQF3,]1[Q *Æ`@u&LG0qbexrb[5۝1N|6b0k\EddƏg]E{׮]ƛ F;֬Nz w˗//Ѿ;wq +>k-^RXdl>yG{%KZgǎ:uѠ^=ڶmɓ'ٹs'I=Xk+V`޽$ !R[:CJJW>Ɓ*,.oǓʔVƁdff0n8֬^;[I5TŎj`H`Lzԭ 1 ,C!UrHKMl6c˲۽֮YKlV4/9@fj ;tZ0(:cvl޼@y/&??xEQ8x0vC_{͑MVz*C^| Ya$Ɲf0o%5>/t4G6C_{D.@>9]CzZ*`IN{gϞ,p zDBqU),x8n'#=ׇδiJ[.y!cܹvR筅cp0&G}ukݜNqx٨&Mв6_olIJD6(J6Lng۰; X X'0hBxi͖͛('RRR믿 Ƞi&GD_ vkQGaϞ=DGG{=J5SZ232.jBTr˷~_xW0Ïp:LSΥJ[VҥKŗ|5c& ~<wY)vi٪?nBUtΞMlWU(t]%6¼yo0gpb>ONHKKcժ+E&-GO?Ѡzr:ƞ-B4"##,\ c>Y'v_,:@JR'##Ps/O?4i o#΄  f'ٲekGrIT ÏQV-23 ]ZH̛}ʻ#FApp0͚5㕡gZ`3ax>9jժp~;.CFhh%=^zL|}}W>cǍ]6$'%zms{;0L0:_}En .p}^p^[Mt:ի˗-ĉ91ztBq5*.[4-/fZX:v"3-ĝ9kI+q=36I-WBfOKO2zu{]r"+uN˨ /فiĞeϞr}qdq:4jl6c4ٱcDG7$*2DcBZ __?TIFz:g<ɛb!"VN'gtwm}}~͚5TltOjJreY}|T% _?TUrAٳdef^ELpF#v-7GV->8+08P,+rm#%,)4|N,RϒYU>yBtY:i=Hkjx9u9B\}.fnyQC>z@Qj:! `tB@ſTl.wbOsP Ԫ]mXΜ>MRvFEB!H ŞE={﹇5j_LfǎG7B!JbWCyXF\ 4@Q\unk B@=dZ(|9s =rT4 ֩CDD!er=!Buw&}l60:I^=B-s-Q ~%{%,%s233l8NF#V___LFcB+~1Z ]ױee(]ՅB\.fny%Q5ٛrZVIEl2a )S!>WZ9R]j!bW|9IX'B!B H/B!B ~!B!B_!B!_!B!%B!B! Nn_n 7)+X(ɾ(}~ !Boe,WZrP\}^2˺ma4M?O?ɲ٨JӦM>nժb]v;3/ƩSfZ4oFM%.WR+W !B!((J7Ғ'!/\W>fnƤ_^ pN~wQZU32M|R%%u%B!B((E_\K+hҢo)Sq\]b-gړZУ̝7kyn~*oLYӦb4mWӽt;74c yevLv‹$xm3w|zZ֞,yaz~hE.ƛ+'+WrҤE+nރ<7:t [cr'%Kd[èUZf3!!~1ʭ[QSa篨sƅ?rs[\cS{+#B!r]In'Mb믳ajN-[2}ƌKU֮[Ǥ_wٰv5#y/M+tVݽ;{㧅 yr*k /NJKXd1aa|<mL{Çaj{w8M_{ԩ[͛i=:Z3O b̘:M[xʫ4o֌hɒcQ*WL̡Ůs며WszcrjNΨsÙ2:6%U\?B!B+rόzV5@[K2=> ? =띉_XGkΞe˖!/Zܬek֯]b 7aԯWu3Yb6:}3{a&8\wggλXzg}~Gx C˶~}*eWwiժ%͛6믧Q1Gz*BGcҥs':+Vsͅz-~_B!B\y#jef}AcJ@g?<ș_uUNJТY3Zh^aS=^y_k֋=͘>b˖MNJxBm;ý^ 44s;/G{oihצ-UT.r[W7kʪ5kؽ{ ~^HZZ}5b]O:Fcbhެ:͛z~ }罖r|Jr!B!\I*#򊓙?TXS~ v5k5WԼL&o74n rJ8N,sI-Vk_x~0_Z+W3zXzr [zopŽ*!<6%q% !B!.l ~t,_R+Tuټuk6o)bm0 4BbVL+{W] `0kou)sqӦ Sc¸̟=\xؾ= Kr=v*֭S-[yu[VKul S~B!%K})&|?-ذq#yRU'Qǰi233{fF)|9Ho؀VI#}"==A<ߛ6ٳ,Y׬Qy?ƞ{96p@'A^L?ko,3[,233Y_ԨqMq-^BRRNcǏtr~|xI_E{Qa֭deeeVF}}]cSRe{G!Bqik ~iiݚO>Ϥɓyo(tM*,FQswЁAaoOTT$OPh /0⽑>}k=Ĵ/'?0vx>JʴiՊs/vG weT\12_RD {g8DFD̠Ath߾unղo6 ~ʡC RYrTvڍ-Z4gGc/Ӄ`{c&<<̠Ox)Tsڥs'ƛ'}<\cSRe{G!BqigoYZZfW_;;]2G!BS1pDM.]}!M&cblܵw{rWK!Bvɺ oҶM^~5ND;+4Uػg.u )sWBu\,]7hz᲋龒? HGH|r;ΑIU"CtnmMlJזe/&)G8[2 ~8]X&4qIspfv$;uQͿJoDčEuVɓ'QU.EܳgϲqF |҃(nݚ עEh֬9YYYn_~֩q˫q/>ꃉѩne^^и%ݯsŊlܸT; " IDAT;;oɄ(uy)``0,vϋCSR.αtB˽bwo!oFp!- ]Ǔxf ~Sqg0~x^{b,I]Ս-ԨLjNil{53M и~b ϹӨ[kb iYSO/*UJit '0fԉF nr:OQ~93[?dLFe`ǃ;7ײe˱Z ` l6zB+q^vmf˖-lܸo7x#Gr]wDx뭷hݺuĭ(e`"ئTqzNZqK_eƍyKU#F?Ѻuk̙iG5Pi;v jWjjt}YזWE__h !ɽ.to-L4شu' g\)z1')r4Թ\NΥiN2FQGu_!q*${y.OҠ^]PUp:dfesÇ֨4A7O7%W-ǩqeh[ZDMfn2uiMDDMj6jveg`0O@v&zLe_=88ʀ"@6ԊVd$-j5bI7O7/Eټimڸ͛6Ѿ}{,Yr>N~[NBb"* (+gv_&<<JÆ kHJJߟV+O?47m}7L2уaÆǢE 8~«▤S48{(4hp~VۢYp88~8ޝDFf8|PÁVHJz3lNޟ<ѫ/???222.w5W'IBW{@xX%o̰g-W[UQl,.DNMϋ4{A$k%Чg7*V*26efe06\N.8vU""2#'/ﮞ)nۂԳgPr$`0$!|:l Mo~1[ѵz Z.$99`pT>;֘3;ƾCɹBt9qut6Tm&+54݄ն*Q]K@Z?Y'-w[v> 6#ؗvxd&Kn*q<ٲٝoߞnI/m_UQ mwQvݻw}|Me:N͛S~}wEٳܹӳNRRzѹso˖[o˚5kHMMw:Z ___N{=nFBy~ZpC2.7ܫ}h";HJJbժUԨQcǎѣG O?-VZ2{~a@S=zz@[SOEQ<-ݻw~`ԨQ <9_x| ?wy'.oGrL̟??{ĭh:ztb/{&Nms%$1-}x#,څ+r"\8B!l݋󲧞")9Ȉ ztƍMүGm"ܼbO+Y幷z5<#1@5 _©PB-dXdD(~Υ$mpdj1ۃPp(j?1HOQcuY!l2mtUQP qӷv/ph%̓2^p޸~㮹4>Ԗw l "TiIj|3V͕w^Q,*[NP%E嚆^'&Vd1Mhؘu\ߵlq7ـ5L# ޭDF?g?)t N\_xX8Fӊh"<,J7U3`eO?n?s VJBB,w^ۋ0k5i(L͉Q3T\եpF19naڷk+xEҥK?*"ojD>I~n~r9qbl2yzb6[nw\޽{V,sΑd$N "Tt|?#K.[ne˵k H9@#ĝ8Y'8YfРA;dfex`b6ybdF?1FbcRZFaq??}݇i̜9=е\׵OWY۩KlR̴{zɌ6]p\8v6F0@9^jɓL4֭[y=үŔ/'cy w%Kxa&L@p߇ xաL%;{Ʉgn6lѣG7o#NDD[nRh(v,YjժtRƌ>I&l۶AO=]`߽INBKWoa€hFQ (g:u=tj\g>^3wEөqx 믿رLb͚5c֭ ziªУGzy{pq﫺lro0år">9s>ǨXuQ3dܛ(9u.+B ω,~y]G󍐊 Hـr?fڲH'..ظTET\;O;]]+.nIJ-:<͕NXXKILf¬xݩ aaa{>:ƽᖙ2cѵӸD 1TkN0XBqSvbP 9CvSۏSs]z fTz@jTVt')m \͗&Ն|ǴUڸNznKpn+>dh4b׋ 7XYN8.:uRT5{2w`q=}8/=ҩ#&Nk.e<M4_hXn+8ί[ֵ?^x3?lfQ\sMu!+xy/^8'w<+}Y)\.ϟh$##oֳxܹFrjL/iZ ¿ѶQ%ʲtUU<9.ma\N['!ǬEEEx"ϺkV,3-更mγpͷPL4+L>3g…\{]veŊ\w]~wEaɒ?۷/Knݺ.F$**3nx>=mЮ]{F?\LdB!(g1[(MJN~tNv{=`Y^Wޒm){٤$>3ƌC:t> VŽޚaF51jiK`P[V(8S\ )sL!QAKpNרc 9{NE!;K%%8ժZ BFc^;sOedt2( j*ԮsP2. M!bdO2ŜWJr|o4Ϭaaa19^|797$ӧӷo_f͚:(y܊Z\YHNR0 0>*f̀BL;Ii:G™x4CDv#GȑLsN8b$|Ԥ`k.:tPCʕ+Zk׮L>A?y衇Xt)g N:G6mks\:B!D^8Lhe#YCUݽ'6tR'3= [{^7ށh׶׺۵cEW[6DFD-8:uumv4ͅ{gf+=_Ieiߑ#8]:uOa9NBY o*_ ~Rȶ=dwAEM-CE=cz 6䟨bxjݚg۽Z=e#]CGCʡ#?߃9=ŞN6rM2ǽjbm'fCWݿp]븡 f4݅ &Q,m۶6mxYiӆm۶ҢE")mܼ]TKN'&|||P]hy$F F'J_m&2Oy<_3FvGuϛ @N 5ziqN*. bgMl~? o`kC1c&} TtؑN:t)f͚E`` ~~~Zڵk[v?gv;.`0P-=^ -gs1_SPZ0L˥rX>&\[!#kziۮg3>K=j$UTrQ>>>-Ծ][+֯_M]<DZmvMJ;Þ={h׮m뒻{v~tBQ2 FRjF?ŪUG5lvb20M{,TWݱ/ν5oÌ`k:D|J>wN0jHoЌY ҭ7ҥRPMTVrzF6M*"vEt/cy8+df\9r[ W9 }vw+gnKrֹr'n%HkjVרz(8 _슕s 2S7b$pF+>բSF%LpL뗶7:uġCԩc>O?i|S:CIV4M/8iM&57aGZbj+w|PLfP SMPUճl۶m̞5 ???6nkۆ fZzY\m۶oGaĈu睞eь-[RDGGchѢus X~o_+r߁BbQlY #͞Ġa34.|8~t?Q*#x*!%ԭ[u{uԫW\*\{kUw`56ӶmԩjdY &3 :8 cv"A` BaQ{.Ԭ ~fp*ΜhT23 9P7:'!əsawNWrGh<%QjEuV+GA۷ piOX޸yQQQ; ՂbVI8 ׵ʍ7T tY`ƄI73˼\X'N'"&&+3q2}o>ԩ 2}TW^M6ep<ѣG`tO?yӦ8[,C#:Y].alW-7T港Y,\Ma;h6! IDATnaoYg؛oxԨ^3qxc7^r_φFo w:=N KޅSGyׯ_hlUuiӦp84/MӰX,ddd$eh-uR/bWиE{5kՂbr|Eӂp88r#{[oճvZ̚5Gy+xm/3`Zhۦ ?>+ 74fw;#eKΌ9#kحaozBus=С c39붋ҦP(L0b|QPg4f2| 5a cg[mZQH*[*-躷Vy?ϣ>gyϽs.\(/  {qbyC x^ ńᮘdgP믾‚::-еkW=,biwo40c8T]]}~=u$%'ñsg1u鉿cQof-ZLt1eTS֦f"u: >@xvq@eE9xxWNf44J޵dFG%/^jȬS-e`f? f0kd WSE|^4|)޻SSSUmkk>xŋ15(ޯ~a w1;CBMD<[uww̜1ӦMGnc1i`RG ߋ{qD}wo6 dkeeonΝTdeeM@K/zLG}ޮ}pq pAk= 6/-@[f(+磢 EjT>A_JY{o8OZlo/| #|>:vχiւP2zy{c"4rћo$ -u&I8ws5kDc?ͷySGaӦh}vlAp+|<yL ^Ok++W_O_5He^cG=Jk"kc=BCCk.J\TUs_ȯ_^o{^eg |97 ;+s_)OMnG9r\4ũ'D&N("?)/_)өS'=|`em-r^<[___IM' ȽZ`ݢ |ڧ+V_ f2Io ?1[կ*P?VEE#3!v톋cѢE A.3555r[6t(>ÆK\46uk@m(E6 ކd!RP xnrxP޽?޽Zo`± (K/cF{&Fo.:mTTTCh(첶7So~)S::v PQYm*n`iiɅHW_SsgLܽ{߇}͛3u֫,jGu %Հ+7$n%U] zp[OLÏŏ˗ET9U+>Eju=(EG 4ꄓ1q !ġ| :܋ 썏⓾  x ]۶HspIgp!1Nq=C~OAC+^F!t:uSZ\\z{k^ WiGzbȩ4FkruloK]] )ĺJg[4S 5V%U]Q"V#fw#ܨ T1q!AADG{ #ޖ0[2`fggWOW)D 7@]׮]tرFϲo`dJS(,ATTTPQY C#CKzI{r7;ڿY&jS& D{qPZ![kwxQ5+EH!Rٱ3TUv󑒜###KzI{gr7;zA󄒡& C!h@WE8"%) ׯڊȐkQ6KOr4uA115!:K_huCQޡj >AoԀ-)eB`C  Cq3봊XBoamAABA|PAAIm#>'H+  Ϩ=:10>| 1A|bUCM U 瓃OAAAr/TTUKx)x  ߏ !220aڬ+K.~~~wRSSի: Dž $Vp=^*hCjjj& p>=gPM hx6oތ}BOO077ѣ_ȚJԌ]vk׮ž}_g vqeN:Obذa033?nܸQg[׮] ;Vp= 1p@ڵ :::7  Χ|# >h?XxB$#F#GtRdgg׸|2І2gΜ97oz:LII= SSS2=<<-ZDgϐΝ;+E#hii}زeH `mm X[[cӦM"<֭C.]իرclmm 777שν{ CCClFB~~ݻwZZZ011? D썌444`cc 6ԸΟ?#F {ĉqu\/|}}/L"1i$ի2e uӧܹs8bl"Qu,ZH5xxxGسgNsEE1h 8;;cx1(,,DXX|}}"d4(//O?www8;;  Ν;2۶m$xzzgϞRC%5}AA|̜5fͩ|jEQ0` dfr30p P\,?`l \~%aDrr -)) YYYEn۶ W ǎÔ)S|;wN$Xd 6n܈lܸb{QPPOOOxzzb͈F^^ziӦթM6X`̰0XHHH7|#?uBCC ̄6mBxxXȺ'?|Fee%=zm۶ҥK8?** QQQx ''QQQ8t@1c`Æ HJJ…  {.p=10b1C ӧQVVHLL1dDDD_ř3gNlvv6rss1uTDDD ++ AAAmmmaff???x{{]vb.2333Eٳg#""P}`QZZ\\\#77lbʕ ;&N7oވx"v)~#\O*AXP^^r|h "x|cGn岔aV=˕{ھgƍO7_,%ھM؂l5vrȡil̘1t___%R1ƚ5kJJJjj'5w"i`}ї*8/,,W:y377/Rɓ'PpƢELNv322ommΝ;'1͍I/- {XٹsݻK=RRRdAu)T xnV{=/gs|}G3џѣ?g?afdL0dy199D1x!())7rx!"99/1uq̝{"++X,,~]~[LWRR.ށ`d#L9r1cl"hЫWo0wجvZ\AQ a$l1>,Bc%oFzz:ӑ r-x6$&&bRSSSѯ_?4wwwܾ}[$N𿾾ĴϟשNff&`ll -[ B˫ڵȹH͛7ѷo_2@j666x8vcǎCRb޼y4h\]]aeeMMM6LMM-χ*++k."55 Gf`eeŷ~hժ"#XYYaĉXbrrroƵkפ@hvv6444`ll,Vvٲe~Cy))) 6 h\m߁lll߱ >>]8AA1hP H^>#8"">A~~1;ᅬҥ|1inׯ?ajѣ{(1w 1L<=©S Zl)(PQQAaa!zQF!$$FFFX|d >000*GىW֭[(Ն3g}2ۑ\r %=/W"{3Q̹8 -ZhB޽Dʘ@X@X[ys gի=r5Aᅬ̙ 01iS{SV".b+W&9s!!h^00halqꔿv>{HzN04 Xz q xyyI,3n8,]T麻tKԩ؞䱱W-pBijjjo2y8::ŋ"iv2Eyy`"Z pY`Խj>6Ցc֬YHLLѣGEFKKKUرC0~cʕpss-.]$guo޼9fϞ8̘18(..FǎEHsPZZ*z"m۶ܲA(IbziiBCcѱoeݒi„nbu]]q޻Ps1zXcEoWdap;47HJz"8o9sN#'A|@xEII ޼ySJ#-- EEERdYwtt`ѼbܺuKydEEEr@ )K=,--%-GA_$hFGbgqJӧ߂|Jћl}fxDp_֭n-nV ڮ"8 W2፧O_z:u 'wSK1/(<®,K/AN444pi|'3gZn mmmѣqHy軻cժUXp! 1h G /> |w곹ٲe v }}}5 _}UexxxÄ ```ɓ'odŋ駟0{l8q666e-[]]]rvwesp m,A|(2zuuu̜93gάlaFQFI͟2erIզ؋ -𤵻zI0i$/R-Ut999ӧOsss(Ǐkkkhhh9?^x!3޽x`>a p-m۶~qXXA)))055EAAա%v3333g>|(_}Cb9*b!!!3f̨ADի"*7V5.HΫo|%KZZ"#j%k@K{ },gOy8|.LHLMM5tj]M "6 ؾ]޾>\ԔKA4 LMMhae2WШ]ŧ~Ç|Pmԅ{qDA|贀+++CRbR͕}_/sa3N"7yybddHEGp;VuA^kڵ 55Z~ Ŷm(((e8w%(;|矯M 'WwϞaak_ԪY Xz 1Ý;wp  piPjO٭O9Vlm qH/7$%b!|%`!*,-EV7 IDATvf ʄǡCwЭz脣oQYɰg }{~8wh\~xw󦦗   hp g` ;wϵ#~nLqLHڙ3ѱXInww UUeKAAA41x :lF/f7/Ɓ4)3gjl   AQd۔go˖]Bx@߭M# hj#((~~~|1ZhuuuoƍCLLL툎G}---o[l߰akkklڴI$aݺuС455ѥK\z;v쀭-:չwahh-[bԨQ{n8;;CKK &&&GAAlllaÆ1b899wޘ8q"_/}ZL֭[!8/((@@@={]{Arri@xx8 ggg?? /RRRDtc̘1Iɓ']?lٲEUǢEҠ? ___dff 322''';wl۶-鉞={"**JeQӗA|e M=HNN%%%!++ Hm۶aJرc2e BBBsΉDQYYGa۶mtBTT={ATT:$~DEEa̘1ذap|]DEE޽{b6 88(//Zh]"11Ɛ!C_gΜ8qԩS,cvډVWWqUAڵkװfֻ~È#0b 2OFYY4"{yy h"DGGcو5TUUiiipqq*"""\]ZZ+W"008q"޼y#ŋعsCp=tO$zcn=f)l5 ){+ص}7QLFbLG;FbÚ{1kk%..VV2jcij2([Qj[Cƴ0]Zl,cΘc_Vݺ?kWVVC}}*c&1fa:c[36p c|V"\$|vmߦolASav;9QP4ƌ#HeQQQ"ecYfD&}'5w`X>}D %թNu^xEdNjy 344h23Y}C Ҳ3p射cGaN˖-֮];vivƆ =~~Z>>>/d'Of b1z~GA'N0޽{Ʋ:ggIm?c;͟?_pVX`(++cۛUTT4k׮1###ܹsXPPļ/RZZG;w.޽#%%Ef4h[nBe Gݹ}SVJXdv#Ty$@f&w8;53~< i:tY_@t4%mw45kޥ<} :<~ ^ 775fZƶz4 8yn,7uҾkMܾ}HOOGjj*|||1$GmHLLĀ槦_~"i}H}}}iϟ?SLxyy<-[VWѵkWsccc7oo߾"emllp1 ǎC֑ży0h mmmB[[[bEa͸x" 555">>rh֬o1`8::" ZWdDEѣGp~~~Į]`啱ĉb o߾k׮I]3#%%lhhhXepuSRRl?AćNW6z ܱp!УG|ȕ+`̘Q'A99 ++@C8~\ܘ1W^Ν&aҨvBOvq)P:gpЧl!UmWLmmয়;BWf_7qׇ0x0Uʵʐ)kZBEE .Ċ+|r|wu[[[P*9ҬYZF^:Դ΄ `kk"e>^E];b۶mpvvqL2ӧO+2^V95Fee%z ===@||AQ  K._XmXٌ l K_{#v+ce,[my7ڕSBGG;w.JKKw9+C΂6nNc6@M :;:PW77kc9T-[G!( rΛ0ws/*M_\TX[YY5027<<[D'sh`<>;MFQ\~C4Ć^c$ܹۖ~Qkiߵ&7_7nKbqaҥJݥK?^j~N䎍m? M6PSS舋/I@傭Ɗ틳gU酷1$M;w`u3WZZ*bǎȑ#077ʕ+[[[\tI۷:NNN(,,Dxx8|>~JYGD84~y#͛7ٳ3f`߾}kGKLcǎ"z9eee(--zT\׎m ^Aʁs0 ̱g0p>Q7ec^ } >v10j MMdfMٝg%wDtџ hjøxY}Ac?^0\SSOh7sG4-Zd&KZ$DJJ8? 2ltut*vܯ,|\,^C3u,L΅K믹:{Yݴ=^yGkOFkb7|`oυ߿|)7j%sZYNL|9 TXo}p"㫯Pn_O:WSp/5Ew83f/0tP˗@^^_k>}:?" 53gM!&&ӧO|Xe0yd6o޼zOhEn=f>qƻE{~>\?/_'Oaxi/O~}g%Xe U֫08Ygy)~+MC3fx૤i=DA˶-QRX5k0=}:ԛK?#vލXQ[֭n kn_rE 39|{h3':^"E?ahss%VoɍlBNRxnE=+ } ===###" U iiih۶-t~Hװ¾}-lOgϞE@@\SSShiinff&q˗/CMqq13f`ܸq nADCg8vpJ0ƐTE׏j+l!֪z7CɳXm+&SR`iI5&?8 '=I;`c/չ;w`Ϟ=EQZZZFݹ>+(ٜ#od]t(M!0lxgB{=?Yy#åkOOEWq6{EҞ>*""/.Lcu\()7]@/ eu` 7-cRn^e%7ETHiA(SSSdڍV+khhڮ aɒ%۷D>+J}ͅ.>S>|Xd*`dd$Un.lܴ Bpr#iT9GBDw[i9MrBx+&rs:"qk"!~s<vk߾}ؼy3мysR}[:bYܿS<_J3"i8xxs@]]9/ˑ:5Ι|qsWP̹62[5r\=Mh˚͵SQג#n4_ FF۹ ÇBF ϒʔA"!!īW{/w;w$:64K( *Ѷɳo,cnr/rh3.M. 0q=BVRR"Ykv\b0_K>\,C]uPA#Gop..50-\x` "nI4<ιP|wi-9Oj/YMȑ㝘ȥI95ZWB3+D}rEȓ0ҾkA ÍZNAoWox!64Q\Pexpv %(4 ]Wſ ., w<<<0c "//+V@FFzrwr@z:7(*&Op.3n55Ai:j"zdǤI@~>wlW¸;wr\3^~)>.r'ܱz5}MBυy[jxXs%0` F/MN=ĤI_EPv_:;rkj*մ%!FAAOh#w|nE¯byv\Eu -4iT't{/{0mΣ#[6vvv}B# r;skmw7mun팀:4uŽ8}ܜ[t/* _qBCCn8{Cw\cp/*ΝMOHσq#vݩܱc3ދVVmھZSo4|_ϟϽ4..\ϭPULνl<[:gIHAAD=ߣW>U*ѨLqNU-QUbY زql%%܂ii; 4@?*AArlU#Dx#Q/pكx lLAA 4ޠ$A(mHhJo}q ֎DSg  COָf{ k8꣯#  >pT   x9AAA@>AAAA|_rsS>]]WV;s[+SAAAh>(u0~<*WT 8; m-hK`6P   歃OKcJ3F,[ƍԩm   ç^B􃂎wk٘0M뉌HOS{ 'e ;woǏ |ᅬ[|x{̙-AXEdmKI DGF::ܺt*ޥ plWrڜO>._V   ç^|GGc]]MAڲe0v#Zjc²2 IDAT܌8 -ZhB޽ ?ԣG\9˗_[w,LJ Ƴgx!PX([~n. ܼc$-uA8tڶm[okBc4Ͼ{H[e?m۶5PĖ׭ [TUUѦMlٲN5obS Dž یzAxLȑl҇Í,-@hh,:v aB`` /ֽr% ÇۉGRF_*j XLj?՟^ DEQ̞=QQQ`aלi8?>N f֨cVOmm)++æMxF!\vZ4ۏF>di#k7K71i"2?;wglm ѼJK+Ьu^vX tl9@UU|}}nD4@0a}|rtA46$x<^:puum0} gaiJ}cS{!e!GS\ 2z UUU <u~3s΍mJP/-LL#/Xz^k+s߾[ؼy8Zys GWWX*+eֻ>$ɀljBtAO޽҂ QPP R&::NNN҂,Y x<|>TTT#F J*jG}---o^>)K8J 6ƦMlRĎDFF  \m۶bܻw044D˖-1j(`jj*"O?c aȑ066&w(+g&&I6V!3WSm6l 444`ee[QD,۫UeehEtʻ֪H{}N5~[:t&t邫Wbǎ6ܐpWORJNsڴi7oވrs2$:[nEDD༠HP*ɣcƌT'O6-ed*555Z]W}lƍ-?駟ggg"33S@899عs' %%m۶ERR<==ѳgOKpvn#GGG߅sk*ʕT@KK4 22A\Z-q̘C8Fo};0|l#GoG..뢃 }",, +V@~~>PH˗h"o(,,ĩSpEU"&dR-ǎÔ)S|;wJ}A,Y7nDAA6n܈P9rFvTԩS Blڴ b9˗/ }||l<|mڴ m۶RRR<ݻ#addsssѣѷo_ܽ{^ºuw^6״4$鳗F@g SmK.͛QXX-[ 88O^y #~*Sk:+sjvVg?~􄧧'6oތhwޘ6m} {^>a}VE;YTo> >2=KKK&9HOOGyy9ТE ts=ׯիk׮a͚5cgg#F`Ĉ2dN>ѭVU(r?{U;z(.][7oҥKegѢEٳkkk4@UUD?+WD`` 1qDd->q,99mX?eOroc%_G]Y^^+bv%3-(ఆ<***E'7n?{{-_~y{GV'ulagg;%*@K,- c;,aʊ"ٲJJݛm{;"#34d쯿 î-6]n''n Pz||Hړ'OO>aH,fmm>Ykb+۷ozZ]&+Ŏ j5h&b%5kInyLQCZQ&,A#"1 J ؀Ⱥ.K<>3g漧gYe~ԿPIQQQ*"##+ZADt]S k2110""Zt)}G5 W&^jIv(֦?)e^^^^zoR4!V^udH@iii5mT^JhG]}QEXԩ)yyyQRR>~BCCsZӴihԩ4dzI4%eS;CW/Fb)c>|8QIIIҹsg ǏKSSƐcXEGGh\I3fиnڴiԧOE=|PVVּ [Tɯ?SSjrSSh_j'P "#ӨOda,,S>iދ*iDktʾwwgԴ*4iݿH%mΝ||6SF+b9y{DG\ѷk׈F$jHxItee.QfD 9b<ck%SSS255%dLLL$'u(IW}Yf(??_e}~~>5kL8Y[[SAAAѣG*i_NԼys@T4b"'O&___""ׯ8p@vdkkKӦM/Nb饶zԷ+XMS{Y[[땯QJSJ_ӔXyɐ @ek>uuERM޽{ʕ+5me2Γ djjJ:uRiT^JDDԺukzABDTZZJo 6L:۷+T 9w)5kLcɰaèM6_Pf 'r1www U|2rŀߘjbgWTo+9N(.^ӧV>%%Temm͛}7 /Uhz|{Q\GNA ,ce{+2hV^z ؼYDCI` cuج@II JKKbV|DKn+¢RyJL$Q\~ĉprr¹sRiӦ1T>}(nҥKann^#N,޽[cLK,5kvrCWbuP3ڵ رcڵk"11]vhJjj*x;VzɚU~.g1ƌ{>lllpeIIIzǎӺLΝ;W޸8tݻwG|||9s ,XVZ OVYoii=z`ѢEpwwG˖-ѣG,^nnnTI쌹sbǎ8{,.]3]fbekSCX]hj/+ih_+X;ib6bԁ\2,~~~ɓ'___r9&MdB|'ؼy36oެ2YuիrJa5ˬY}U8UtL4JO*:^ߥ֭?ĉ:ٳ>;v Lݍ7P\\N:)ԫM@ bc.]  ""yyy(**BLL F!yC,رc;ŋ#((@aa!._M68rI̙@Ƣ ¼yE8qrrBhh(qYL>BC",, >>>aذa*|||믿8t-Xm&VF65I3gVh/Iդ+ih_+ΐmHϹ&bmehYcذaZ'SfeeW ._ w߅ ;Е]vŒ%KrJ+e˖СC8|04i> EYII *rb+C| "ǫLx.**J1i^qq1O+AɊ8y$a0_ RSS_}?<M)))N|$皖j+}ʢ{ /@bTもر#}eO&\N7nܐTǏW0T7tciܸb^رc,e%%%*s1HF}b+C֭[Gm۶UK5jd2z饗Ғ~mŜ DD .$SSSj޼95hЀV\IDD+W$}uY1wU3ɴ32ԧ ZS.NBYm:wjnڈ Mgbb۷*㏟4cL&gk筼m߾}ؾ};6j}e-ڶmc+_1Ԟ… 퍒4nZUNIQQcxxxh,;r_0}}T::u 4Evv6^~e߻w7oԺ:3;;KN_ZZ "z}_t7Mlә q=c1XBpp0uT̖-[kU-[EiWLxkK@=d2[~=ڷo\GGGT~hݺ*p۫C*Q6>+@χzҔ222/cܸq-Z@ff^+L&CYYLLL^>bMj'O૯€1cƍׯ_ᅬ^z7ou8<W^yEg_ ̱[vdPUFMєR(j?N.]PLL ݿnݺE;Vٙ=J?Ї~HSL!"7xl٢͛7oADDǏ'ggg:~8ѥKhСb 1W_}E#JHH ___""z),,L%?H'OVÃ4oL , ""tСCa/ᆪ͛ӿ/O>,,,ÇZ돏5s쮌vR1>/[Tɯ?SSjr@j'-3X5x*n߾M666Z{.ю;hȐ!*L;wT}u5R|!VK:u22///JJJR'--M.??_㲦M*PrBDI^^^fԿHլYv/h(֖RÐ>A*ˢ* Ο?"eQʟχzTb_MDD_5(`/]>#G3km]MJkuq'͘1CiӦQ>}>|H(++Kcz>v̱j۱[J*lWTVoxhb;<[oT_;Ֆݎ1ƞg[7 Mgbb۷*㏟qd2VI&)Wqf͚xŭ())G`gg$j իnݺ\͛po+88aaa=z41dK{ƢEoի4iqUWӲd2iӦpppPhmm+WYf*i *Sj+`RJ{Hُ:kkk\zBZ[[ѣGicc+W܇zPu!hC>RIS]vA|طo `׮]pssâE#~AAWR)Zk4̜9cǎEV.\@^ںvǤI0e+WХKԴBz>vܱ2j۱[J&QR_*k綟YrR'۫4AL?(3rb6O8NNN8wRIbBBBn߾?+V@||< ///UlC9] 2ڵ رcڵk 6ѵkW{HMME߾}SRRбcGr|?j&B)213g`hժpi&;E IDATL@DD?ݡꊽ{ꝧ3Ν;vٳXtb222pI=>..Ne6Ν;W}길8tŠZl DD~Lmm m1ݺuU8qB}t]c;Tu/2CI,6KKK-;Zl=z`pss^qv0 Ɛ~meeٳg#!!}v@|O`ƍ(..V%JϨn+:T&>Q,ߪ/5NFֿB&L]0$'''gϞUDRӯ_?źKb@^^#Fh+PXXCQ AAA?~< 33Jq̙Caa!bcc`9s 00*i͛gP~F=@D8wzmڴ#GPVVW| "#00P}̟?ڡH NbH ') :aaa[}||aoIXW_σ}uTT3xWzBrrAaa!N< @̗&^.55|>v]o߾*w\HUێ݀x*RR(oUrtJOGzz:J_%.^ŋq1- iiiH+ MNg۶ Q0 6`h֬|}}TH3~x̛7O  4wFDDڶm͛cŊ5kfΜ+V۷Ǒ#G}v4SL۷ɓѬY3{Xx֍5 2e 5k)SO?o\xx8&NXo |z i)^ư7: EZ>SL8֘:u*W*.]ԅLgEZORb6lTeee:tX;yo駟/_FѸqcŀgϞƀТE X[[+tWmcwgUێ݀x*RR(%_ceb7 <<=pnW[? OI}ڠuYN[왚CIxNa${uվ}}vuMǎ-ZSNТE˨N:{iii5 cF#֯sss_~Yc7͛7  QUe^ -)+CKSS{[&6Q1ɞݿ_O>Gǣ<&MbȐ߱omE]+ɢA)fLE˖TXWVF01v{[wEFhM|<|R2{dee!88+WP _)/^ >}:{zJѷ_ڢ[nZ7ֹ>nV}[y:7ٔ Ρp} ׮ FPP{|57cF ݛҥ*-'յ[7ҥ 1X'> vvv5S2x`;͛7ǤI0qD̞=bR_>c1 Ok.nƍ][[[[cVgW_xwZacͷ>&L &tkcwT[ۥUFEK0gΟuQ7jԋÇlY(:u Kzz n2c1c5Oq99ΝaҤ$ݛ )'G*&jʼ1͟-NL?DNNԸ?qc1cU7z:ѯoo>psk+.aʔ4M6?upV+dgΝ||&\U%y1:ԩSqyܹ믿;?OMXCLո~ps(;ΚK,Ann.bbbX ,\}qaQcyqi"%:̘1y&Zj`i_Ji€vp& F݁@.NJv0( Ib9 ̙:CUq0lBzKUJ,R#f*^ŀGQjD^bFxt+wdp`z_/kt4`a!zTV2"PYHʿD015ElQ/L4|cLTxxx,RyVaـD\̘1zӱqFߒ2d[MHIIQY֩|$iR?R$%%a:fff055 ZnW5#Gŋxq%̘1HHH+)iݸqGF- ФI*Ɏݬe}RЯ`f&|q61neU.€yt`F@SzP}ߢ~触 W47X"TϞ ʷ1xvBL$@NTuy0zɄɫ&#G/.1Cx>^8%;w~ ׿TtE *&k׮W^%Ŧﶚѭ[7饔KJΝ;hѢbYRRR;v G+݋ӧkWJ,x0c bFݙ3g^xpIu3WWgb:;?5n.I­ʷ7Xly4ŪQ7V33avx16ƪ;rw m'<"QAaӧ{ÔlF8t(ڡLrǎ W Uq9#@xzH!I:j[_X ' CMci2|"..EPPJ9s 00*i͛HӦM9rDʵ~W v̙ʡm7R?C,رcPIxb(,,˗1~.]  ""yyy(**BLL FW,Y6۷x7|SXQPٳ:̊3K 6"ʢr1}|_ KW͟/L' 7XR]¤}*MȑWušmMSrϙ#cljn{pU矅ΝI~١m#С :+KHs+ ZX(ׁB>/ Wk[NN„ٳO o wߦxLE)C9wE_[6Fc1l!C!?|OT^u8Fڵ [Yv-ۓUڵڷoOmO^^^dnnNKW^rlciÆ Z/\R'77y$˩gϞe˖ ڵzIrڵkW!X&+++ ooo:r^h+g5j5k֌,,,ёHXQH...$˩M6fXm)mZ/-%&"V.D^^DDDDʡjkǏ?,]; ֭?V)G,VhZ"{{"33Ժޱ%r84mO}XVNcoOTmZ5}DQϞʶDD͛B[7mv˅~\%D"amYS1Mm=EԬ_~bzC\ˡ۔{'n}ʤ̛q2n^[2BS?vJÃO_~9]PIVGJm@-p'Fpk>DeO>W`η"|cL+=].^[b8jK+q$Jfџ2% ]4Gjʕ  ڈW i~='A`+~#\>/"q-?֭)HJVlw߈Hc1c:Io3;"(}PP?ܽKbQ??g y"ݸq矇صmXF`(ԩahc1c9쑊*uǑ#Wo8UHqߊoݺ7իNj/q*131ܳgZn-;Em.g}61Xf7N_~e99EoE ZBvvʲ>A6݇8zte1ƌgضmk:O;2XM311D 2"L P%GU2^V}tЬ²͟ [;EhݺJ;w⋪߯XXƧ*f1*pss0X=vܹCHN/ +}֭) A%DGWH\\^R?r*\ǨQ1e Ung1V7\ h4l۶=[66@&/lL] t l :l89'p6!!# O?3* 07/_H+L&CYYLLLTn r9ZaիWu01˗1j(h 6+)U`zz:`cc&MJ(ɰvZt 63N:M6 5 d #r9HFEEW^077=/_ B޽annmbÆ *aoo\GGGT:6)uuV-[D@@MzWE_[d5WS4}cyը ֽW]ѥKr"ŘJOK&Bܾ]oMߟE^4sǧ֭))BNNnME0>}⊽L&úuQP*Bg1VE~ _ol?0c ܼ j矁<`p& ݁@mV69' > 2_U%"ߑX|9֯_<_˖-Cttʶ8qʴ_cڵخT1c233qMj j?1|p!** w܁;*pժU C~~>6l؀ŋ-x ,\}qa:*p>}:,Y\ ..N^J>|˖-Ï?|bʕMJX_~%rssq9a̙zŦ>W!uc'Ё[L!?|Oy9s'[eci,G4y^j3\NÆm i##ӨOda,,S>iދcEVn3fc6۲1B16/7B~.$'q)edHO.ݳQZڳ5mMT~##TӔ<Dݝ"##U޽ﯲuQFG޽{*)UV~~eM*EU`dd$y)UryLg*0##tTءt)1ƦNS&&&}6:}]5-ucϓJ/J~rRLRoxhR;.{-a0*90XuF }mh:SܾWYD=N WG,ܸ̚%\1>=^&Tg׶"LM>[_P88wo\X_&&@x?ݟfָr 5{67MAA푟ѣGZ0="ˁ IDAT2d^R7n`֬YG 455U>]-ؚ/PPPJXPPm7oHJWMLLP--- kkkԟ \R!NkkJ&NKKK+cdeeǎC@@Θ֡1 a1':E)))uz& I&37'%%zD""M5kT'4'2hZ"{{"336lнX"oo"++" #G?~oڵkޞޞ֯_/-U LLL$ԦMZfM ӤĪr۷ jX&+++ ooo:\ڵzIrڵkW!#" vQ ֭[W SM˥ĦwE۷'SSSv@͛7'\N={-[OJJό1d>aGy8[1y< 8 .qw\ iU-wsLkx@&#a1D=zC`1SQxY c9P3ocLcUu&^3c<>c1c1V~31c1cu =}$3c1cc1cz1c1X=|c1c0ybc1cUӟX+1c1X=gc1c1V|c1cx >?c1cE#zc1cn e˖@^^J᰷\.#BBB'b̘1UV _|z ܸqCMYY;x{{G3f RSSU{19z;&M?B9s&\\\0e?ZcݰaƌZpb?3撒\C &L{~~~NJ+0fhAI'O૯€1cƨW^͛lݺ5Ο?ÇW^m۴փ1{1Lgo˗#99###oƎH=cX~= l,[ 'ODFFb刈@>}pL0/"x ~~g8pvvvX|9gggDEE)ʭ6oi&<~~)UN8X~-{aܹ9s&n @U|ٲe駟?&LP/2L3;wDQQ=@bb"@vv6zLVK; ̞=m۶$%%aСXl7nȑ#Ƈ~ |g1cv "^~e7ЦM ڵk*WG_~pB:u sAÆ ope}nݺ(wJJ >|իWǩS0i$9 6T#>>^夁^{ bS*uҤI@MTAǏϏJJJ_~W5#..:tx_o3lmmwpp<==iƌM6(Ç eeeUH'WJJ22d]VRZcÎmR%L9OIz_LINfxU)c?VZ=--MqYi<b0p@奲l+:vYfF67nYj^~\=T޷hBTxxxQ/ .{=4mz‘#GлwoOс۷oɓsss,YDQ8s 2 Gǎѭ[7 :&M|[[[ <+W۷uYVVqơ[l)ҐC)5k dgg㫯ٳgc73 ,_~ "§~qr'''$''W^QY^>5t| S)fĉׯ֬Y-[BfT/gI]lllry++++Çϛ'%%)uQ1\NoϟGzz:vލ$]Ve-[4h@6DS"++ VĚGGG4iDҥKҥ LLLW^yXd lmm_TINNСCuQjjΉvڅuaƺu0yd$&&k׮ֺ߾}*ާcǎNO?R>cc ";;&c1V ${1gbӼXjvvvƱcǴܹsC.]3g`hժpiѽ{w349::N$&&ŋx"=yDlXf ȑ#{֬YHJJ¾}`iiXC4lP%MWۣaggիWNNN8~b=… oeeٳg#!!}v@m'|nܸbtI%mǏÇZ_N(uhڴhZc73U cLi>#|nnn CBB} =.k*r@,Vn,٬~I]ڜ?®>{ is9~$ĊڲIJ'!l r1wf=914}{5 fffuM^ш:S}Ezz:1`ٳذax[nq*TTT ''ח{Eff&֬Y#7H <]tAyy9^]bgg $$$?Dii)222LX[[sW#3hT9s'4!> >!B!Μ9ÇcѢE055>C777l޼AAA066ƈ#ƭ;v,1}tbXt %,, {쁡!<==1gҥK1eaƌo!ZiZɓ'䄋/bشi?'''>}7b…8u?h\ƍqutԉ&M8::).\ , CΝajj=z^GG˖-?ڵkF>DQQ3;v쀙ЩS'o{pss -䝭Wv.deeB/$6f?"Q D$?BZ}w*iiiЁpp t&{ abb"5a]ϯ۷/7ׯ_#''ݺuCvٳǟ.]@WWF{o3ܽ{WV^^G_|&O1Bܡc ij}^t|4>!055]t;خ/zRN(jo1;&+ :v(wrj۷oԉ"##_>k8!4o =!BHCocQ+>>>i0!4qxs݃O!B!o4>!B!Ҝ|B!B!>!҈{2k,իVƣG0e08Wnܸl<]u!߉\5B*}By+8::*\Xc)}v8;;B0aΝ;'7i"""w^p|XzuCMZLߟw:YX~ff&<<<ヶm6DǏq޽ A077o2 !}By -_~m~-/_.짟~BVp1|h۶-Zj L<AAWW Z+++BXYY!44Tj@ -[ЫW/nHLLݻacc}}}Ν;ƍ򂱱1:tOOOIo>CWW;w %B!vM2>>>?uA$aÆ 4hm#O?aС0`|||%1f SN˗k_ZZyӧOǓ'Oƺc_{^\\ .^ <GFF7hڵk1b>(--JJJ dffJ]QQ'"??_j+]@XXSwՏe˖q|@ظq#`oo~_a̙СCg.nݺ!==Fᅬeu Nc@!M0k֬AFFlmm1qD.Ν;m۶:ĉ={6m777`՘6mѣXf v $''>C.]g8y$ͱf5 ͟?_Rfuƿo޽_ҥK(Cpp0~G <Ϟ=W_}ya߾}ėJ^;vqe|g5E (СC(++ùsPXXHMMũSHIIAAA|ڴiرcѽ{wDDDĉ@Ϟ=q]xxxxwq}\x Aʟ3g /)5x{{{L07n -- Xz5lmm7 77cƌ磠9~z̝;Gc 666033~{Rej /_Fbb"?3,XP@޽ѦM/pBXXX@_ZZ;wHi7n˖-Cbb"-Z֭[?6 ''q=ngff˗شifΜDL:cƌA֭ʈ@;ֈM2iO!eRyJy!366枻H4GfڰM6 swwg?fÇg6KLLd Xii)bW?`1m'pII6dVXXȾ@ffb3f`#F`1>wqN:7n'..Ջ{?J˞4i[d Ņ} V~ׯ_QF1///VYY`_xuQz+++#w ;wufb\]^|H_*|dff*C#F-[JK!Mײx?f4?/fffY;<|ByKy{{cݺuܥfI1g%'^4 6LlJ-sssWݻ7eMnn.,Xxyj znbb"u~VVߖ?a``;;;={ | uÇtuurJ> @ 'лwopwwԩSk;gtÇڵkCq.[ vvvFbb"tttTRy@zzz`ƍHIIAaa!?.u938uwܹs|@|{/w^hkk7XXZZbԩ7o&N]]/ѣ 9s&χP(InDfffۇ!fOBFKK AAAҥKmcc R˫Μv䕯*&u2e >l޼;wFeee(^M/A166B.s$KҸu{&]{wsNFzz:nܸ#G -- [lʳsėW̥KPUU'''R`mm:pn޼}BKK %%%x鉕+Wcǎذaԗ*pwwWZ˽ IDAT֮] H@Z V>c 3fqin_5TYYYJ';|0n݊ 00[nŴiӐ~Hagffw50H;Y_~%wۂ"EEE(((hI!yI!˗/#%%ƍfXn]mkk+\ߧO}y,$''#((]v.]v& ꚵ5*~:_lnb gJKKyfٳgkUv\\kٳ{x%Zn-vǏ6m lllgڵk*`١7hGEEA__[P:ߦM,\III/pA \wޑ*Gx‡/֭!Ŵ@bBy $%%!))I/O>'|X<{ x>q+V@@@Nsܺu[_UU 䠴T Q__ʕ+vZ sCzjDGGRgޑܤyz*w222@!B!Μ9ÇcѢE055>C777l޼AAA066ƈ#ƭ;v,1}tbXt %,, {쁡!<==1gҥK1eaƌo!ZiZɓ'䄋/bشi?'''>}7b…8u?hT'O0zh,Z~) ((;vݻwOOO 8p,,,A CΝajj=z^GG˖-?ڵkKa,?{,K.խv333?{ wUѣG_|ɓ'7x R"#棪 1y؞|4>!055]t;ج/zRN(jc;vLW"uQڷoߨEFFr`gghqBHs~B!ʕ+3f  Q׷è4v<|B!(w^cA!48dB!Bi|9 B!B!h͐B!B!- !B!B!BH fOB!B!3B!BHK;B!B!hB!B!-0B!Bi|B!B!Š>!B!{B!BHsT=i>'B!BZBi2/uVo1ch oj4imB6Gs>ɶ`bbR/}ڻlg;wDϞ=ѪU+b~E6춵єbyۈgѧI !#7kEpBDDD5}8! [ iɒ%p ?/_cLv%4rBoA߼/8::6XyЇ)ϦԿhn's]+MCNSnۂ9ڵGYM).'Ҥ۷EΝb4.,--fTVVO @$AKK;%|c4htuuaaa0dR-;$$VVV Bhhh!+<< FHHH|7mڄnݺAKKqƍ򂱱1:tOOOХK<|}}c011A~~> ''cǎ Zn"""Ba[lA^кuk"11w ;wHm/C[괝 W_8$ˑ~'f^g|TBرcG|,vٶRy2Ue񩯪1z~+;'m+>TѵkWzJjyii)LLLPRRx@|L7߱c֯_=/..?xuUTT`ĉ1ڊ+ݠI,:+efd_~fEQ];!ݵ13&h)i ۗİϟ{I&'ri-KHH`eee͛ݝ.OYLMM͛7r$9r3YddZqȊf=z`{57tP-eΝcɓ'?gӧOӇedd0u޽{1.]åg7nd%%%իW,))yzz*svvflH-=z4 *MWɫ.bVcŧl9۩w^g¢kj1B1O|^PU_UIcJ}j_ߣGf۷o_eӦMS+cx]ńB!}6{5suuesQZoEM/ʊ8p{Ȍٓ'O|ȌÇgRi򘕕LT<Ȼ\eNNNѣR9† V\\\s1vKOOWc=}s?c~`ZZZ܇UV/Kۮ];4IXvv6D29*MW.&m'oRQ]ߩzirLS7y!WWWUL>ye,1^QY_TEX;0Hĭsuueiii }5 T75k1c1bSgP=i$d %1Z [!4 znbb"usZZ>@[[ZZZ֭n߾( 6L* ׮]S+YYYYpvvZ&[;Rsss1n8n:#G"&&p1L:'O:u \ڹsgƮ]Qw߆r=y{Χ/CU.&m'ojrT;U3M |&5V=FS&׿,UU)@QU+>u6m۷o1V8!I(b̙Xz4˖-@GqUspp@jj* ** wܹs%7BH~jCee% CUUUDjǢW2R,s"P(|ʔ)+WPQQ/^H+C\|GAA222֭CLL ,--qq6mR{0ݗɧ/CU.&m /K8低TߩzirL6Sn]#.U P^e}QվSy-Z 6WyfXBaK. NNN000PC}qpp+W UVAWW!b4'Ҭ 8ǎUxԲ4󱵵QO>?šo߾j"* B׮]K.Iǀ|r899s0`VXGGGKW_}"%%VUd :"W⨫ב~u1AU{ j*vu)S׿Oh*|@ձWUJӺxyy!//'bbb4P(ԩSq _cϞ=سgrssyQPRRkB$߿b!>!feժU Ν;Q\\2O>ᝇ;Kܿeee8<ԎeŊɓ'QZZ8ݻwٳggvϟX"66XxڱHZd ϟ8|UAhh(ˑٳgH۷۷cȑR<<< ̄ u%O_h8ZuկTQW#UNLc67o^P``Z媊]]||4F>m+}i]ttt9mڴ+999Fxx8&O ]wgW^__ʕ+vZү.c!Ó̻4!4dO <&R<66 :iӆ鱡Cg.N:1P{=w^)cBуIٳ'涓~˖-Ғ0KKKm6Z^mGUVʊmݺUeRSS= {l5ҥIMu5ƤQ'N`LWWuؑyzz۷o+W^<| Ф}c]ߺh;M$Uqh:]Ƨ){11OlÞ={(obg]yT啡&ǔz9[l_S|={ڶm jĠ6?~ݛ}ܲK.1P2:&$$ԘlS2GGG4T,MQCNw:.Ob$6})SƏH3ѧ1ɏ. u۽ TNKKC'\4!3@Po7Eo[}ZTT8]v۶my<-o6 ˖-СCQYYۣ\ᶒ)++%=|B!McLmkbj+[C6m`dd1c &&F…@Dw7L|nʟ";:6ki.\&{>i>z:!4eo栽acѠ}aH[[(((P3f ==BII aҤI׿v^D쯿.j栱-Oqq5O6H䍿 t#u@|~:O!`#Xl|/WEGG"HXСCغu+֭[SN?~iիuT%24H {7LH`eeUA mT3>g*ӘXۚ˿VNVCsYTu,Ф jm-JRe(# %x-i&t ZZrTlٲzB֭akkD޽666ׇ H4@ @HH! aii*PAAWW5n~KKKBX[[>MbkL;>߿߿А}׌1H/ou/^oϞ=م IHH`,!!7o2wwwVYܹs=y}lzɺ۳7+<==Ga,&&={0sss|{{6ndWKJbL"K% XnMokعs3 cΘD(_rfs/f1eGMB8y1ww$w+vۗq16ic'FUiRGU35eq7o2#G37ss$^m꧌m3>گ4`J\1֯xd5T?*O>u;c3ֽ;cOKQmT}sr%5Oggg͞?/^ Բ YXXXsvyֽ{wvZ%Ib͛OçY=jY9>vZtLv&3y'1BHt!7E_~FżXee%c}a׼esɺk׎)ɉ=zTjّ#Gؐ!CnӮcJ=@(Nr=}*0**_r~^R"χgLf<$w+vLM^!cQQGGTɉ1ǎaLզ~ۆ>Jc[ߤ>>EDH0\m,Xn|bL]]T6Ⱦo9^`Wd{ɖh $@/=\%P_GGGvPAOȍ)|wx>f LT^p&4&UVط{?268wf}D8q">}HBK})[,1a'+..Ɖ' .ɓ'ؿ?}@NwgfAKK UUUł B/k`` oߎq #F)nݺCÿpx1,--QRR"@`v`8 1$ WK]Uml\` >x,XU};%U٩fB_w+vo|Q}} ?02u zxX|)su׫M }'U:TC$_2xر+\< X|k-#괍*[|^?Q=F$y˪x1 $ǰBLIG~~>t1nݺU#N##ZŦȡok;}UUcHOKW󢓳 =<{Ϟ t IDATyyEUIçBvYuTEOOm%iR?Mg|!-u ذXT~_h~.IU|ueOA>1溩˟ӤAϗym5Z@?BiZ, ,@ZZߠe߸qSN 1߿=8p ;t>id%''#((]v.]4-+?šo߾* 8xHI$1t4~udkW@GP,j@nU֎u-p}2]qqW&yg|~mc$//eq)*:hGmD6m ÇQQQ7obܹO4VBPPv܉b!&&|Zid 44HIIٳ2"::EaEii)bccŋ+wL|*:Z~m$CQUYc250P~ZIc&kyT/y!..N*@ I]bpI"''>d̟?FIObg${Y۷oH=&J%$$ԘdHYzIL[[[:E0XLL ;v,344dzzzښ2tlСM6LOO :={V4RSS= {lRJ} tuuYǎ'}T~[laLGGYZZm۶),[xb)]]:v^-eQxN {=U=ɝ2*}jxvmP<͊˔Zr.R@6ܭڑx]caqyB!c=z0&~,-/azdL[b cxTWqyl3aacsYTXw _{ٟmǞA:^+[T/w{dP6u/c>|{L(=z(Y=XVۺuk&ONwIf8TDBH}t7s0O&aÆaٲe:t(*++Ѿ}{ܶ gΜٳ[OMIזPNKӔۭ)F'M&sTm&}5${ztB\sD_U Ν;>}ڶUVҥ k$s%4vkʱR)iPo:!> uE[[666 ^$o*qTC}DO]P4MݚsljuFM/ T_k.?QӜ5 GSosӔۭ)֘]H},?!I=!BQ͘BH3@B!UgA7BHSvf6vMVm㼮#B!!Uj8!@7e!B7MҔ%&"BHތ >!q xyy:t'탽=tuuѹsgX*pXZZB(ZO BرcG4"##1h aaaR|6mڄnݺAKK+Ě5kPYY>B!=> R1w\ݻڵ+GQQ\HyqO>իW_EII BCCvZe[۷oGII °b 9sFn'N`Xr%8gqu?~.\H$… l2O())ӧN< !BtBHHOOСC: 88RiكaÆm۶033æMk׮͛ꊶm T?Fؼy3Fm v]ݻV\0 2BXX,B!} =!q:t 0@깉%YYYpvvJꪲlydffMaÆST9|ttt ---t o߮ !Ғ=BД)S`cc+W/^@UUT{i$HTcP(.--E^^*++QUUHX6!BBDrr2еkWҥKjѿK-?^yۼr ѩ1766ƣG)i8v4B!E_B!(//GJJ fϞvK,R" @vͫVXpy)iժU Ν;Q\\2O>Jh~B!j՟ >!={3gyxxx`ҥ2e 0c |7*[d MCCCĊ+M͛7#((1bܸ6l9s  7x`dd  ((HiL}9;w:uBpp0,XA!B$4!ggge?zӦMôiӤ͚5KiٳgVzŀlV:ccc3O4Iaxs)! BH%IB!B!-|B!Bi{ !wB!- !B!!B!b4!B!0pcz:O!B!Z  B!BHsFg !B!B!BH fFB!B!7B!B!-I; B!B!h~&B!Bi1hO!B!4'B@>sἶ5k|}}qUkѣG2e { ___ܸqxy]v-4-Cr;ɿ:dggk4!ƒxO7B[C QzGGNH۷ 077DŽ p9Iڻw//HMM]DD݋}^[W\ŋy> ǏW(,,ѣaff???:_~ZZqhZv㣏>޽{Ѯ];̓&ByKg !-XOJ-Ę1cpq[(++Å 駟b 6+㏍Xff&;}TTt2Om۶ cܻwn䧊 7HB^4'XbR~'j ǎÇ~mۢUVɓq4htuuaaa0!!!P(BCC lٲzB֭akkD޽666ׇ ܹSmnܸ///CDQQT탽=tuuѹsgX*pXZZB(!!!jʕ+HJJΜ9| agg???ddd0H=-[ƭx"<<<0x`߿ܠk׮ň#`oo>R^^^())App0|||)7e_TTT`ƍpss=|||˭믿0sLaСسggnݐQFGDDDJu B4E|By M0RtaRiw܉%Ky 'NٳrJ!&&FꪂGb͚5ضmm6^eɓ'Q\\QFaԨQؾ};"###899asE~~>޽]"00P*`|(**•+W 0on8-[H,\ׯ999ppp6֯_???_|M6a̙pssԩSիecϞ= _Hn'wu4'Il`3tz?5~I~ "!v#Uơ j}`!""ǎþ}'Nرc1~x. 룤*˔N''',X^^^r2_}ƌ-;z(6n܈l;ė_X֫W/<~Xmd={ C^^gjj*4=B߾}A+-Z\;vT)kÒ|gœ9s|ro׮]àAlի ̙3x)~w >sE***0f~6鉯  ܸq5?0uTܺu i&? MJJѣQXX(w}Æ O?TcٳDhkkիWajj*vرץٳU%r؏WUU1t>/:~茇Zؖ::BHuqgggs}I1N3͚̜&wpV-;;R0m4e{644ɓ'&77 ,@||<7>[\mRMLL.ʂT[ bxxx֭[xŇH$/w^hkk#;;BOOlܸ)))(,,ϥsF[UKKKL:ĉѵkWkpE=zTa3g_~~>B!LLLjw&233kB!ԩ7t9 B!DKK AAAҥK^ncc R˫Μv䕯*&u2e >l޼;wFeee^.>NիW1zhTVVbܸqѣ9;wR|c1c߿ӧOC(RSSamm:pio޼}BKK %%%x鉕+Wcǎذa"pwwWZ~VVҳ֭[qb֭6mRSSѯ_?)wLݻ6 }ZZKXXX(GQQ lR?B!o7-v˗qM3yd[˶ӧO*C߾}<U]BGG.]R;#>>^j_2Pׅ PYY [[[:t}ttj (s_|]EPmǏ6m lllgڵk>ߦM,\III/pA[ }YrVr _~/_*|D"uο[n000PB-:O!o1@$i :u | +sXձb BOO...(((իk.E0|t ˗ fccP̚5 Kdо}{ 8,u1]˗իܽZz5/utcٳga@yy9 hii! nUUU@NN,,,/LYFn|K.aϞ=044'̙vXt)L###̘1|Mc=z4>STTT_*++Nƍqutԉۇ&Mn.\w|„ `s055E=[ٻsc3ApAA*YJMRfץ{K{SQ 5$b9.ȖtB "1 3sa|<>:a9c ",, :uիW f}ٳ'z tYC 1rH8::Vuo }o rp <:={޽{ojy&BBB0{lf1X2]} YgD);1cUpqq1srԝѿ&@];w^xyyy:N;wlp}S /ROd1ƚ_ceʔ)2eJs('Nĉ; c :|c1cc1cD1c1k >c1֌!{̙31eDEEg2e ~͛:u*5h駤Gp䠴]|9;siɓ<4c1Q~W1dѻǧ1bv \'''8zƱYھ};vZ --M~ؾ};|XΝ?, 曈3Im5Ç֭[?~`UUUXr%F oooL8yyyW^{///5 ۶mSwqO#::Zg"1ƌIsATjUo>,]6l@qq16l؀/i;wQ\\qaܸqDll,n޼ ___̚5Q`̙v~7 8e_ΝCmm->Ç/~lܸ˗/oP.N>rjѸp6l؀SNPPPm۶7nQ >/ƕ+WPUU &;_~%⧟~RM]B/3gٳ'L`8;;kݮ];9s'OT-7ǧ'x ^y;?#>|fI WᑎR IDAT\}„ ٳ'`…/nnnbᰴė_~Pl?xW{g#G⭷Beee4m6r>M3ƘDOYyAk[tfc-cL[cnQo|f4""C&MR-8q"EGGklCDԡC'LJbbb}i,ۻw/=^\ֵkFݻq̴4mnܸAvvv~~~;}2,.._BN>Ç4`@]t!O?|KHHM>MFcƌ*""zgjCp$%%Q߾}UWZE/t&OLS󣯿l{!7ldoow)Jh̙:M>˃]~~) :T#++`3֭['j[kKb~=-KVegKEG($*@&g11!!!XbTرvD4Z/$==?999X6rH;˞x nݺ\vΝF퓗>ɸu-7x`׎gggcĈh0\h߾=Fu wqq1q%ܻwOK  ɓ'aeeNʫCP(B\gϞŭ[PZZqotC^ʕ+9sn.9e`4[B( [0i$ pyطo{{5r8::6Ve}`޽r uSNڵ+ -- C.]T]xJJJO#((9W_iC$33>|8/_Z̟?K,'"L6 ׯ_Ç!͚l7۳g֯_]vaX~=ya{ܧzJ:++ O8plllT͕7;vT̞=111nUyyyO>ÇZy?~޽U b1ִxc0LT̞=wŋ/Dܻwոy&ctڋ/Fxx8<2&q0g̚5 (++Cbb"1w\4;6n܈ ={3f̐|ya֬YHJJȏ6gDԟE!$$.]\ ** oU7߿?222Twӏ‘#GTъ ܺu Gee%}\tIUUUEYYI  ?˗/W}l ԛ3&ޱUTT_~QaLY߉'Tׯl֯_s?| c|,1Xr?#F9sGq={Vc{Lȑ#f,Xvvv3f FZꫯbxwѭ[7K/5evuڴimۆnݺ!((_$#00}N [[[L6 Ə_~UUU_j=ݹsǏǜ9s/,X͛7~0tPǏj믃н{w}z+++,\aaaԩ^7OOOF GGGڪOCH0l3Ƙ~,$*f wp"%Cc1mE c]0g5'q锗ZQߪ˗5nÇE޽ѩS'_^^B7'4GB2#G ,, 'N?kk_޳gO߻wM7oDHHfϞ7x10Xs<=Eo_SS"BFzϋE'?}&{|}cuٙW:\nKbĈ:'MXM~aa!:w^xz{Ν;7bccl1Ƙy]c1b;w YL2SLi0eĉ8qbsc+U1k1kEw3c1cmOc1c6'1c1X|c1c "<c1c571c1X|c1c >c1c1XLa0c1c' >c1c1E|}c1c53c1cm|1c1k|c1c /g1dM.=zdǗ9ch GjoghۙKKjbxvڵ MƸ2eζlWWWkNR 1hooc< XZZW^شiIl~71ƚGSt񚫎̭峵kNC|||7bѢE ų:cI W&CիWc ɀn樣P--mJ~m-,,رcaii٨ʣbD@@ MV3kQvoooX[[{ Eqq6򂵵5 .]jǓd}X kkkNSOK,#""\777lܸALbB\~!""qW^޽{¢  ;;;tAAA(**8Ɣ)STωv 77*Ѿ}{ ::cUGb1k566]Wڄ1^ ejL"""Я_?r( l޼qĤk(v<ILB}U Փ_Ϻuзo_o8y$;~~~r204NjǧlՕ_E^PYY ())_!tM7oތ/RaaayKUUUI&z/F||YcM6aĉ XP[[+)V)$*d]LX ݢ[7 ۷n!clߺE[\t"~C35mewyITRii)ɓiҤImRRRӓRRR.^Hl2J_J,=zP\\ŋ)44`:KNNNT*޽{T*ɉbcc%š->>CTZZJ F<2OOO:z(UTTН;wߧw}WÃ233ҥK$ɨN:EmiʕTRRBJAAAzc.+X"RWL[kl>Ŷ&6z_1ysqqi>,)]YISL_ՕP~1rrrΝK]v%???eǏTP[+cƏSddF~-;߿OVVV:egg\.˗/Çߟ̷>RFvR>y$ѝ;wKrr2ܹvI~-u֍>S-u{+++X+?;٢dePvfϋYʣT >cOli,q٩^=N>M~~>NOdG(2___ڷo{ҳ>+)m~~~D"}5_FFcݽ{TiժUDDj*P} ^d ͞=[mN(?? }8Ԏ|SSl+8Ķyt֋P0ɛ/)]YISL_ՕP~?R?Q.))ѹk׮b@_9jBu%&/'Z:JOO{܇ƍ5-$$ONӦM1cPUUUt%fIɓi޼y~~~_7K,>|Hƍ`6K,qFzxa U J%>E1X2x`׎Mg,--aaa޽{?osrrﯱlȑ88eggcĈ˴'|Ru^^&L3x.]O~رP*㭷B@@jۙ3g 3f֭[5#P,`|muqMG^1WLt,I6?kؾM(bOΝCmm-ϟ%KںYb!"L6 ׯ_޽{:ϱf͚[h菾3kU7vvvyƲtDBBVVV?Tzxxرc˒пɱ4hWӧ` VVV8uz <-/wc񁍍Ogbɒ% 9mkɧ)ۀ8LEOXW{8ptbJLUω)qR26/lj'T*dp{\z .\й>)) ~)mۆm۶!//OTM %%%X|9jkkl|GHOOǁo4 .୷j-g'c1uK, eJ/c?Q^^JeQVV\M8r޻Ι3fBbb"ʐp̝;Wr,͛Yf!))IBݱqFTTTٳ1cFm@@`` "##1vXO?eeeG~DAL,MML[kl>M0U>aLS|A>|I .4B54ESB.Buel^0;V;v+ ATTx bH[mll0`|X|SM_|x>|]ttLccQW]];-sTRMc,&{u _'&&ҨQcǎԡC5j9rDtzEEEJ$iȐ!}vQ7n^g2drӧmڴIc+YZZݺuP(ʊ mذ`zBEFFR>}]vFׯ_ZZy{{\.'gggZfM5nuyFT?5SPP]|Yo" mg| alZ/D+7e M];bKLB}UWB)@8kjq=zǨA XZZnGDtmz'oj٩SH.~@())) n)e{]LB>>>Աtܙ~^bXUWWubYc&{t4&{T1qt)~5 &caLmS;c5V0Vp; K޵ #{VcyrqcLL&kk[G-vڵ [n 6l؀ѣGf\c]c…5jѹsgTTTW}{]ˡP(&SR?#f̘aK%vG OOԀ!#p˲ ֝.DƑ1c1Zׯc8t萤-[ӧUUU'ѣGUO> oXt)F`roX0u,ڵk˖-3:ւ'1cGL&Cǎ '''IN2SLi,--?w^y 6 QQQ)IE=Z'|c1k}KK-MP.i,4Powg1?d4w,LWǧ0)nבּPsnB&cEٱcammݻ#44Ūū GGGoCEttcd2DDD_~P(ؼyx"""\777lܸA,bDŰa`mm lڴI… t邠 i#T.bkll,`mm BKZ1QjI7** r3sH2 ЈPzj?kKy6lWWWr36S_n݂=߿}EEq-MC}NL;֎:f^옩L7u1㙘4Ŵ3C}P; ?b+eWϺ91[}E鉓'Oテ;lll+W-S^l>4TRfQvf&Enѭ[c1io"j-.Ek2NлT* h4i$z{{ʕ+*++)55 BTZZJ Ly{)Jw)JrrrX;pу⨴.^HtQ;wOr1&)))I)))T^^N/^Zl -1S>}o׉QFQ^^㚣-4-11\\\ [c륗^۷ks۶mK/ڿ>o _#ĴcLOcRL}뙣o3ISl;җq@踦u/1rrrΝK]v%???eǏ)3|żOlя_2(;3]ŬL:uBRnu'1fy|___ڷo{g}V0/|||(&&Ftw%'''4E=N>M~~>w}ބAWGωd|J:f M7Ĥ)IˍY8 t\SӺrrrTKJJt.ڵX֘1+f|Ǽ+JT1;=OIFkF,Cc1mE c]0g5'o㴾z}s IDATke2jjj#22&L/ƌ=zLڵj۷:eOtu릱B@IIk`kks}^^>#$''NT"(\ɫn߾ jjt1Cu'^ĤkggK.5`׉JrǬFhv`kk˗/K*Wee%^zڵkBAArUb< 91X;&SS%1SzƌgbΤeؤ,v:)i]Kl| .еL_91c)W>wbkjj@DHϐy%ugn]wd1RHmŊP*P(Àz&8:t0~ԩpwwǹsPUU7!??ըAmm-HF}jkk5^ ՋtibJ|hk.M[_۷Gpp0n غu+BBBT*i׃~PEkd|Jlo6a)5f1ij<ӧ:e8_h76v|jziw `1D'|={K,1}rr뤤$ 8P8vXzmee%A zן>} ,@^`eeSN馥7rrvv5k֘d/W"D5juؑ:t@F#G=nQQr2dm߾]rI722Cڵ#777Z~ >pZfL;X~=r3U}-]ڵkGK.mflgωiߘ|Jo_}ӘLlbڙP_Rb6v/cL|R'z3fL5U ,$*߰p8&nc-dy!cZ{9y$~m4w(5ޗYc֛Ytƺ7|c$44٨@jj*f̘~b1fVc13ѣGcҤI|2\\\0m47wX1 | cOdhm7ěoa0ⴶ̘1}c1c dc1c1ƌ * >c1c11c1k >c1c1M1c1X$C}|c1c /c1c֧~>3c1cmg1G޽!h8vɏknMQ6֜1ʪ)Rq,_Ǐ7kƤ{B7nKh)P_} >c1P#::D@lڵhYooѣӟ$iCq?ZGocXzus")`ժUXj߿$ie}b1Hz*|||L~۷o4ͭ?3,]TJ?|l.Mj{kP5!O>$ Qi7mOcL&Cmm-,,,~TUU+WbȑĉZU{¨Qm6@VVz 7O?4 aÆ...شiA. 7nl;v޽;BCCQ\\Z_.\@pp0ХKHbɓ>L~Xhu@T\򂵵5 .]FOW|R%Snn.^}U8::}:t$>W^޽{0A(( r B;C8Ɣ)STωv횤R6mذek̹><** Ç7P]7vo7i2& SRD\\BBB,@~ ˡP(yf^zRc28::Dg:B,=)t-74Fky,CnMc8)!Qt4*eefPoݺY(ؾu 1f-[:h4u;w.Qll,>|,X@DDtE3fP||>CTZZJ 鈉Ã233ҥK$ɨN:Eטg>QVw#''':v8q*]ևs)}}eMl߮'ԧ ... DD4~xowyGgbYjYIz… P(t:^kK\b~=-KVegKA \T >cO>͍Ju~~~4sLONÇj""zׯLJbbbKXw^zg5򒖖͍7Nc!w%'''ICuMK.(z}FMO&??$P7b&66`_eLСk,^(11|IUtige~N:t7>187|رcٙ+vj/BruK7nT%\kСcu֍JJJ4hLPMMM}{U "BגrU &///|M"ⲷ'KKK$ d,,,$:e%&y摽=M>l٢Dgee۷54ȿz:bb;x DT7ywT߰=3tAK+)mT}[ne˺uH&Ѯ] nG$>ԟk׍v 4N MMUzB}ʘ>amms^lmmUJ'V!~?3o c8KsL|c-Ξ={0k,ĠO>M0`/;;O=uVVx XZZܾC&טO:8wp}Ԙ4 u...oPڵ :ʐjԠD SĴb (J( a->r`#&6ƍ8s -[d"33ǓZWRۺMK7oބ%.\\և:L5N ZR۰P2Oׯ_7̙3_}`˖-9smԳ1/jkkcvuC~@KH1XӱcG|HMMٳ{n< <䓪eYYY鉄=<] ʃK, eJ/,O?eee7S\RӘr7of͚$(DLlD``*;vM~=SO?fBrr2ˑYf˘:u*v ///޽o\wcCv 4N MS1S^z wn>hP/WBxx80vXXYYMCL=P~ׯ  {<}`x饗-a,#g1k>ꫯL&=z t} %988PvhDD|r 8:K}CC !\N}M6i_n) "BA6lЛ/}CdiiZF$ٙ֬Y#JCΎ:wzݹsgrpp<+11FE;v:ШQȑ#0ƖPL?5SPP{HO1I}vڑ_^0؈  @SWR}h*$W^^N ۲e 25ԇŴC㔘i2b>Q^^NW#M6׉ݻG=#p=K- "~QTTD@r B۷oۦt_BoX*&bkD_uʼnjkO10& nc;ۊ]0g5'$颢"gϞ:w~7cLɓ'o#''Ca&b ~߁k.lݺ"k~/"Fy5w(;1S555 "dgHs(u37|c^Ν;<1BCC1w\YYY1c~b]~ǡC C?=X`2Twc1c=z4&M˗/ӦM|cDGG?:]Mc1Ss|(j4Mb۷/ݻş'k^=&<*ѦvU4wfǧ33(( re2V^޽{¢-… t邠 kcʔ)DGGG\vMu;v޽;BCCQ\\7fC777raƍ (& 6Ut}믿W^X^VVGGGUL}?׮Xxyy K.Euu1bcc1l0X[[6m8L&S=4ey{n_h߾=k!11A^WhuRWnn.^}U8::}:t(%.@~\( km.te~(}ɓw \"-\WGǺ hvѽ; m>+L&k*&ڏѐ p.] ۑ^B'1e.kԉwtdV'$*PvV&Enѭ[c1io"j-.Ek}(11JKK)!! j4j(S-GREEݹs}zwU=<<(33.]D2 ԩSqRR*((ɓ'ӤI-z{%'''R*t=R*Db(DrqqHK)22Rcٷ~K|uBBtE e˖9pу⨴.^H:ߔ)Օ?np16)ۛV\I%%%TYYI$D..DDD DDӳoy9ŋDDRJ= h8%ڕOs&Z(5H ߟHKhd" Gg~ŖPB񋉭m1yҜcIt(QEѝ;DO6\B'&e.fQYL;#=EsHcgz>[㗬 Ly1+3PHT*!$*xc(OL4`a8w%'''pZjZ,,,T%Kٳ5q7n|h/۷Oc{ҳ>+)#FP\\6z'ORmmj?͇P^7GӧOk쟟Onnn>>>7 SȾ}ޞBBB'8q5_11Ծ:uDzS^"}D=H+[O-SLsrx]R{Y׮ԩntݸA$̯2J[(~1r?G!9&ԝݻDjÅ~(]JGjkchLj}O"Y'Yu|YHT*{xr2_{ 5CLrc=*v|/wˆXrՎvvvtvZvmڪd\.Wm>ɸuRuC79r$pmٳ>>>XhUǯipڝL&{PҥK֭F Ty11J۰aðh"˸|2z-$%%_oPw)D55u׮]t{Spi?~wΝ;OίmIi_Gdd$&L___3=zPKLyiɀ۷f۷7?Nvp[V?@}d?V.L6HN~.`iibPIGjkC!bS?4)z23$}^}9:3780kjb'[oSN;Ν;*ܿ_パ?RSSq 9s˖-Crr2 IN(}c4u}sW_}زe fΜZ~{R&리 FMM jkkADeӡCc#)aaa׿4,[ jFb (J( a]w IDATXzu. ϯp_SS!Hlt]om~1qX(uEي-3/%1e_[p<\c!S]~PUܿo\??14E3׸&VJc4h5ӧ` VVV8uz <-/wc񁍍MJ_;,))  F~~>N8R :o'GCbDBBVVV?蚪< /b+fmRPW| bbbpY,YDjHJСlYYCظ<=O>bbg"3 ]Zf4uZJu7yySsYz\c!O zյ; Cgt 5Lه5{91c5ya֬YHJJBYY.;6n܈ ={3fhM@@"##U"22c f͙3fBbbFΝ+)O?fBrr2ˑYf  رcaeepzK, eJ/jŋ#<<DYYrsse#8rju}%ӕ'F]vƍŋ1sL˒+fmRW`` ~' ׯjuʀD <?Ua˖Siӗ-ggȑߴc+0駺uee@||]2J-3}ߚUH@ui%$iZ`;q#PQQ7)70\$TJGXNlMCR)! egMc=7#">}Pv͍֯_nۛr99;;Ӛ5klN(;?4ɜZ.&}}׭[G HPІ a*$IDt=zǨvԇiԨQԱcGСyXT, 悂bYejMsK3\2%2s7R~ebbenl30#ϰ~=3{gx9s*87 B bڵ:j֬)d26*Ocݻ WWW$j׮-DZZşל4yYk."EʕE=ĵkt3U^X\??!r!j"ϯ("4TeprR?ir?kk."^BT^)Q/o߾v|||0tPs% ʖ-xyyrTyAz +k؋slř{4ي(~|""bh0`Yik:dS\Fq8FwFc򈈈JuH'"皽!mO9وJ*uX"""*eq{%{qa@"""|""*W^E2eʠI&믿гgOB ѣ% /____)S8u{~1+WDڵP(h۷oG`` 3f ''1M6#|||vZ+WDZP(PV-^:_֭ j׮+W9ei&߿?--/s^yCeI~D罡s}xbx{{C*jc`>޽{]v?,_[lիFܼyիWGXXN7oݻΝ;sXf oߎDncƌ9fXf RRRvZ|gx L:K.EJJ ۇǏc޼y?׮]0|pL6 III8x =ݿuV̘1VBrr2VZӧcǎ4"%%WƬYl͜29s&,X$\p* G(6},)wceBh,c8q*ʪ2$""*I$֝#VAR)M}_w !D"ckL'[]6:ۏG(2+ǏQ~}PšnݺRJcoߎ7xCﯿ/GѦ4;vٳgiӦ  7֭[cٳmڴĉѭ[7[b…࣏>gmY4** 4Wߜ؞ei*üim{vD"ALL ا 0dR !bc,/iIr\"{p9>|86l؀;wqz-C"B ԩSGUﶇӮ];!!!ctt4Zl \LT ooo\v犎F CHHζ.]S5y3Dߜ܍-4_hci$ODDb8x cԯ_/8p qdgg###JH}zjj*㑓R J!D8rrr ;&6sT37ݖle2JoBо J5{`ĉ駟py|}ΝCxx8W\gǏyQ4h@o&M`۶mÇ/رcbW}Æ ikl(Ssbǒr7Ur<_# :ۢdM$lQԩߏ4b޽]v?V^t?ÇyGG"55G~o9?X~=K.bHMMիW}Ga̘18rN &MҦ2Q8C+`ܸq}6pahL斡=G&)ѣGc̙\2j֬謢vZpuuE=弓'OƐ!C>k7K/_~ׯT3gbo߾=,Ypcǎh߾v{x0e:u)S`TO>QĦ%n ϟ> B[g!иqcTT ǏGxxј)C""@ӤZwFl W'"*`*EJTXDDD~jV-dz'""""""*8J-/,w""%6={JgDODDDDDDTjODDDDDDTi㳁ODDDDDDT 䙃ODDDDDDD%yl`DDDDDDDѓ'oP7 4 p,4nʕsAhB@TP B@hP>'DDDDDDDDRi |FB@*t.)H KDDDDDDDTȸQ;DD!̿HKKCXXׯoy핏)㏱n:#|l+V>S(Jxyy\r6;k,mYu}})|7p6NDD۷ùs{fqfMo߾ .|"D"AV oժUJš5kЮ];TX ^^^ݻ7o!{5Ȱlܸwܱk>CE vZ{u>}쿍`ǎF۷믿OOOϟ9e˖A*_5y /6nhDDT 4^{yynQgC=z4#GѣG:rrrЭ[7رgFBBp tӧO/]~߿o|cccѰaCܹUV5gNЧO"u4h`LGÆ QbExyQ3y$/W^|=DDϡO?sͷ}ܹOu-]ضmڶm 8889bu۷oGӦM|+WDZP(PV-^ZgD"2e N8;;#88ׯ_阿 ={*T=z ))I'M6!((@uBڵkcʕVݣG0|p4nFJJvJҥKFO>t&Nݿyf3gԛvڵӧԩSO>N:yؼy3.^m4`֬Yر#0`T)))9s&X1 ;; .D>}ƍ/ @~퍘t-Z@DD2K "oppp3'Esݻ7nܸ/j >>oNcva׮]>|8M$>#GCϞ=QF|OMMuzz-xzzN۷c„ 3gjժY#^f͚A&aΜ9߿?޽ @ŋ1l0o ӧO 'qy_k>gXh]6{;#^.ƈ˾IĻ&6nX/277t_\|1ZiB!~Gѷo_>}4B$222|y3UV⧟~2ub֭:~ѦMiߧVbEy֣GNQQQ:iݻ'ܴulݺ5_* *^O>;wP+bbbĥK!˵iԨQxw~$ڵk'pqb4,ѹsgѳgO#e˖b޼y4{_7G ___E7xyO>-*WlpZ #GԻ͚5~L@ܾ};_ڏ?X4iOllϠѱcG|rQӏDG0%I$Ļ"q-qvpS$7n[\_#\&z;#ԫK$\H9ӫW/̞=[۫M6K';+oODGGC!$$Dg[1dmuѾvuuջÇ6s ?ǏQ k4jH罻K.]v:i|e9h ( tވGLL 2336m6~8w޼ܠP(...&T*J7nL&C\\w^m:WWW899p],\ϟsӣm* ѣGo߾^:8}4nj0aÆi P(pwwϗVkCDDd ML^qQJǂ )SŋѢE 횆 :99YuܳTL3p@lK,rrrohu k1YZKzzv|vv6iԩc:t(n߾}iBڵQBmڿՃT*EJJ Zh=z`ڴi\2ϟEŋ+=K.?cŊزe °b 2QQQ_>*Ud0͛kƢN:Nl5n8III{n-GDD.GDٳ'~w?o4fϞms /";ѣWc1ܹsG!qYhذ!?Mߓ u5kvԍ(\rW\A\\E4 uCƏhܹSKL)SF'm߱cxbB\|eb„ 8s Ǝ~ C_ܸq[y 5iGR QbEidJy~d 29d2%֝U NDFoCRkYZ_lݶ-R$ ԥ>t;rZ"2bhU P# ٶ0^XG"kY[۳k[1Bthȁ>!FUh]N>[naI*DDD`lR2}؃/}2<ݯO@{\YAϵL@f|<&OgsH~x&""blTB}@n_U1B轖~ƎŋS^XG"۔zD ч0!t)GDW)50>! _ DDDHdP4[{gX`L $s&aHkY|t4HdPӴcHHHȷOś k光M{+DDD#mJJqظiSśr{%!ts- Ļi"""֑Fżޗw=={5P۷!ͷ#"Iߪ軖k[Q~x&""blSR}o-]eYՙ R,PJ?+ea}s:MDD HdP=M=R̢ŠQ)  $EY!w=r J&M=DDDDDDDz>P.|yM2  ;m!Hr5|!TV!7t(QڵmS!Q)+v6 L.()BT\JIu@DDTȁi^K4E(HJEy@TZJI)oʅ SXf37^%)f, >wD_Je|R#(IGFDDTk[:XtE'#:v|٢cJk**U u۶zNr%f]inPHO##N=x@|-ԯg-nHqKw #RmŘ8x,/E|?~Xl1} ܽ{]9?C,;D_ -:ǂEs$@DDAa Mry>|8'&Ij*J%JOB.BŊR oVr~^k!GVMyW9$TBJDZqԯtѼ}ӧX[ڽ 7oCP !.B۷'(m,YiYchQC}ܹr"}La_y7o@VVteQn=Tq(CI/z$1c #=UTzT eN ͼs<}e˗!b͛(S ZjaCHm-\nUӯf1| ײI N.ÃȑAY3Qig0G%UB eeeaAY&|||j ##ᇍl?#1KO6߮̌ǐr[n!qceuq |kA&C.C&A*B"P Usg[s?/vQa?_Y~t)v'O'''dffB&CTBx1j6zǍCvV66_< "$$ĚxdA q( RusJZČjS|DTzL(*NYf5`wߡ[%̞5SEp|[\ʕ+m 0T*ֹ 9 GGGmiwFq&Λ x kCΝQlF*3oycWbEUڨb=5k۷age[4_?k. Kkߤ ۇBMbGʓR{eر:u 00uE`` иQ# h+g۶XhQ+{nعcN={"KZ ~sT˖/GVE-u߭GQ AMif5?m7_!OO"EZQA;ǏÇ@DTE8۞u<R^}`v;v3Μ+0q)l T*1*UBP` 8~ DJL?v84kAty|>3޳Y6߮ͷ؜ku%NzX|fLΜƌce8tͱXC  צ~&ժcЀ4`xOÉ sxϞi< ,DNMuR"÷vҥKѥKATBR LWWWO&S­ݺ-xreVǬq: Oү9]e196+ocoŧSe˖-[bjx8V^fSk:}7M x(|<Í-PԾg`X`ΝhǐJ0~޼,{""*8upXdggC*B&A!J%$ rrrPre899g֌/w]۶hٲ$(2LfE;w6^{oMXL'9f45iжm̝= -cO˾5oڵ Hs1- T*EFk4[oc9yNYQ7Y 2|56GwL?cn::zlw<< /Lz%9Ⱦ}(߶Ν 'a8;u1tE3F͙3K|@5z7uyQ^b<ܴK,AϞ=!ʖ- *!<~5}}s.wA֭oMģGvj4m~X'qF:%+WFNN6*xfaĈ4pbtL`*-X*+w)jgU @C qAvy x Ynb/]˯IB߬98 ]WW)V0:u BR#|PգsU}zou5~GS'NNN&,gϾחZƗ-[f͚ƍo߾4iX7pX\(>VyҶMk<}Qml?86 x)+c4s':|Kg^˖.5zn{\wIae믘7wEשSu?KBBޣPk?[p9KmΞ_Z6k}JeNDeZUu~Zj*.Fc`60H|_ݻyׯ_GŋXz5v7uC=@FK/ݻ6{)'Nދ='ZQ1b2225j ;;[+WhBF{pj|[~BFf&.>6P'bDe|=ؠ&ʰ|92^5B_n܇]l(5ݠq}OWANN?~cǏakլiqFB`wpIddd ==ǎ1&Cƌ3qYٳ1s& 5hbAx)#(ϜukqlY% %"{97nݻw[tQefgѣGZjF5իArJR`~]^nC$dk0aܩ6MI49 ?t\~0Bwy`Ǔy$y&Mip1Uĺy-[ eʔ [J]aJ ~zir>3}v4mF)."*Y"OD{KT_+F~$ЇTrz8I>6\YL|~=VQcƠQ`BBCnwiӽۛ`w{SgWyV}e_ĦDʃHcЫw U/ ""2C5k[HLLDٲeRp_b 7 4i"VZif&и;r/d}}`qAewz=6zL3ODD ۅo-(q#wT*U.\0vb\\o[y{ݰABz@q`QQh,a9PTfJhԤHŵ@DD$esWpٲeѺu+*LO=(cCqPZ>QiOS,{]VGѢis;cZ_ ""qW䖡J% ˑ%@.Cpq16<Rq])I4@GGG}rXw0CDD| O^駞7_oB@~uv.h{NN%R*,{<` /*AHHBUD*ŕHMM-ꨬgggxxu(DϽU=p޽])I45}Xyhʅu3ouz˹éSѺu+Hd2N5D!pis)jE2}~YY;l 4𽽽p3>wBrgʒqnnPΥ:""źiQa7wQADDD%DDDŃ """""""I@"+Qɤ^GK"""""""*i4mz'""""""*C: """""""$U|""""""R |""""""R |""""""R |""""""R |""""""R@"q(_U^ /AyDDDDDDD%Af{#@" |9H `;X{oTӃb㞈;,?k v/lODDDDDDT,2I!DDDDDDDT3D_HE!lї@nz$|""""""а%s e=QbhX~B;(|!DDDDDDDE˜ay_{L^b􉈈97M WsN N 2gX*P7=%.\r+󉈈J[i*|ջD R )ꘈ%($WON_wTYrEp+MN *8$۹@o:+r>Qq,W]V 4*IENDB`mathgl-2.4.1/texinfo/udav/udav_opt.png0000664000175000017500000005133213134046534017531 0ustar balakinbalakinPNG  IHDR#^2sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwXSo,j-EۺuV[VDԢWnUkն(nqT8D"ad@|?ϓs=Y/'#[FrVP*EDDDDT*؊wcQmKJ9bo!QdX ]ׯ!KbǍD@Ft9lE_*B:LZ"""""" hc" (U ޷M2դ  @$A$}QW9m!PJ!s_ V@Ey{ )!)2T?)R4Bla R#99 R Xdo̵nH6(ײGT&+rK^D2) $' kXUAi`]t$$&Fps+ HRD, x nߺG{XZZT7u}F)WR[o̹n A k! S B"y$ORzx\yApB^Je)|=L4%d2@PMeʠ#.; gҰ""-y{_cH+++.]իWGv㭵W^A!aaa[BPtip,YvŴiQ:vO6m*ΘoX7` 9JAmo*@,NsXY=Xyx+뻰s)z" O㟢{!@jJ diidoniiHMIH'O@D(۰..3w.~ֲ \.r9k=To֦杻y箩AT,io?z}dTuK_T՟T|<_ug0"kXXD"l8z  {{{8vlllТE eiFi{^mHX~Wǣbѣ:[N/m۷!j֨}K]&gu  =+6m4d[;u=o@t޽w܁5֭Ç\rϟǟ~¥KѐJGt^_ H[~M`ɒe eto 2wʭWo=7(b3g΂D" Xr%߻~UO%Xg|#a >.)&Sae}V| xH$!r}"J/^>ꕽ~z[ w?$e_:U97IGh_~J*U'?6m2t WcocG(~iQm[7o Ap }\WwFkW\)!C$JX OX"#"1qn\k@$NH()r ].@ Y,-,, I22~ ]n"*|iE7G*"""ʗg'ʕ/H_ԨV{wի+W޽{Z*jx'swU㖛 U`:vDzz:\![-͛ͱ.N?l3ɳ޽{:a-T(J$%P]^0qơ{=f,-[ unQQW~v: &Ns~Yg fΚ Y ,5ڵkCk~۾;v0n%RӸ1=|  xNu9e 5v?;pxn厄;1 B^VU`}B"ئ#-- 4k#"Ū_ř3&&&Pv-\.ǓǏѶܥ+ڶm'.:rϺkfvII<= m@*1Xm&j+'ȢU-'\h * -- w}c񒥺7-ޣZjǏoޮT 7C Ez [چؼe Swo_!eiiXt);{qM|=k2h.ۈ  ͭ&XacWǡ#g uZZX =~Rm+QHMMئT(#ؔEםQP"ɓ'?~ XRudݳgOJ "GÏd޼sGÏC$Сd6m Hpq=xǏC"m6y;kݹԵMܻO]&޽7}GrԩUC#G#aaaM?Ncx,[իO85zLu=o^ƍ'"0zXt˖-C0o|"*Jo JA+ɭWҗ8~ϟnC2muh 0.2 O?'Ц:-rFи+BW{%$`\Y+ EiyK' `sRGq5vtD#=My bVVV¥Kޫ*kG''89bJii|R\WJ @*V GGh^rۣ[YؔyS33=~8˸ ru p-W?e;}ږWqڶɥ lm HˑgO"S(ur]X@X$q2DbUBi Iĸ `C>5T?)>xwnׯQF /_iiGp89:zT.KdZߘ{YX u  Ei(P!) %mZơ?hg pTvvx1>ŽwP*aooZ5k|pvrRU߰nD=C}e=9U넯%cdB.666E%"2w9OD s[.,~:{OԀ0F rU@Q ߘsݙS(""""*VT з0d0QQ@4DDDDD&W""""*2r֌1y`3z`KDDDDEF,Q1&DDDDT,Ȳkqq-""""*ffDDDDDESV,H.>)MU\Kg\!)) R˨+)%G%_~G,|ƈIa)]| -.drGgO߫r1qq(ekߦ@*tnJ{ς04z`|3-$p1usHLŘΘOeоDž*2~~(=2y}Y0zTŷę).ƼL`Z¹@&W:L?qyg~8 AJf3Q8F,/B"""""Oc%.4꼏$0i ,^u_0iJ!dɚ=vft{:vޣ]q ̜1݀&/p|K8x0feDD%j=FX[[ce5uz6=kw>&L-[q7q^J?'Oh3!Rv:tGCot;vFGѭWoxz7FNnF( _" eʔ)1;h:rӦL29˘HDO,T"a䩈)Ӱ x.*T(G/?nK'OE>asʕ-oV8fƍ6eNŮ!(pq:ñqf,' 7ky1 V̀>Bd$6Rk(W,6ll!*UDykɘHDc`!R_ե͚On=Уgh7_M6U#}`cm {{+8fm(Ӧ"I![0>ލ`kk F ڵ^A*<'e4{~?53_1&-sX  V&A, ===T>epB$^| 5;ԮR+㛷nQC/24_~}A MD(_3~ٳPeƘHD̜Њǡݻx-5S{յ(ffLk25F@MNIຈٽgn1&.c-=xyXb*T(+av\<|H]Zt-'\ňaCQlYH$lWG5q!ƶȋ|^] ӹn"-2&/3{ZZ&L'V͚ڵjaⸯ0~dd2V*v zܦ/‚Eq!2)))k;zV~{T>s#nj|DD1HQz' QÆԡ.?F`N͛-1n$K6nCF |D1p@?b7+w>|о#0:0&L5ͬ6oNPf}nm?}]nUc[~}s=F^={WQQ]w#lژk eL$"Y n!55ї/cN穸MUu\m-rqqHLJ³g2*lnps{ES7Oߘ*17l=1 鬿W{UM2=u꘶!DG1MDDDDTdf95cS(o3g8!k,QqQ!|hnGeJggQǘJS9bP>MM*`fZ`>,=2I*@}ś-_IIIhcS7 Ak?? ݑ~~G^G12SE"z-0/,yaLLߪi%""""=DDDDTX%"""L0E\<re⛕4Yq#MGkvJ%/\plܴ paڹj ظn-.DFbsH^"2Ws#nj5 "YAspr$$$DDF=0&ig;3vPiڧu!ys09X[/m^ZӧO?#Oƣb 8X.Y5!xJ%4aCu:QV&l!'MFl\} _0`CVvlwE_57󽽽WճqԥhTvw(!6n"X[c̨3jN1&_X-dP[˗1'x}EDdDTr=Ҕ1M`ʴ鈍CŊг{w ""2 D"*)Dh0vOv1u3D"*9L%1͕}o~ ռ0R&CoUX#QS7 089丟g`LLT!cQϐ3`wTV>$]Ub␘gL* nps%3P@cLLT9ĈAȹyWaPϡX'%t<@d8~(? cUC%"""MB X""""*D"zXBDDDD1.""""JȺQqq,&.IDsus=*W2uSJ<Ԓ1 &8bP>MM*`fZ"2:TJbp!Y]%%%}ǏM *+tAT1T24ZnE1ß oyM9+/""""b%VfT,QThh,DD1QR]㶟lFG<?LkBՆ͛'<'׬ASeo܈iS&dQڹR O<}F߇C(W,YЧBDdᣇm7nǏCve#/Fa5'±qZ\7 ШaC}/Ο>g3m8p֬ƩЪe =vʼncalt(7+qC@;\.n[[[4 lشI̒ ۸1lmmQ ӧMEĩCwl`o_}z> ""=b6m~nFXk<' ѽgo|чlfMUb6;ժ;::jݖDd\@1b6 ![BQÇ*9%G:-!jqԱ"NBp,\F hO6JTfۦyiFDd B ^|s۩'&&vK8;g;|d$ڴn~|ԪYSs_rk[[[[Ũ(=QhчaVeޫWGлW\S4t[#-NN ]EDDI5 u ?uV+ۡuV__@rr2Ξ;c!:Zժ.k DDM$a/۰m9H= +[=~T*EJJ N9cƪ 5'OFJJ q""UV)7o ,xsX%"]y`{^|'Z}'9 ;l:[b1fHh\sϛ-1n$KZ__fۇwDV~Xq}>P]f@Xq#G:3Xli-0bzBx26KD!g!+]!&ck'"0|hS7 ɆkвndQ1Tҗb<`oV2p1.""""EusOQZȠ<) ȴC1C8.\stJD1%4ZՅ=5u3 AT1T27+q1ͷ];,Cvpwhh1!󺭌٫*ԩcچD?c`8y`KDDDDE]Xg! """".3g%"""N[H+qMc}CRR|)\\aogL1cL%HY-r/Eš=||)T.GG#6.?Ddt1!)) ;~lfP!h];L 1|0A"7e^~,~ o2U+TZDDDDTi2y%"""McآQUoǰ?B6hl׶gxm?:Ddz[C_|ء#ƎBc+5q-:*mDD1 ٷgmhWЉ(ʌMx9.E_Ɩž=zJXYYicԫ[7mDDMc7`[}"ׯ_۱:~|i}G] A܃7w{e7GѭWoxz7FNnF( ӻ1Z@HR˗Gva(%zS R#cʺ=&&_M۠A#xIDTte]Jր{o^}-?ĺ5q1j#FAoqX<`lؼAA8}"szD< j ظn-.DFbsHF7bڔI8~vnTbBy3{CEGoDD H0vhkih԰!O׳qaK"̠1rϜA?trrs[[[ 2 =ScۅȋLw#ڢ7fcæMZڵ^A*<'(d6n [[[usiSq!/Q[6bbb hF]jnKHHШۻaC>ލ0 ~~& @Śyڵ5@*}$"2 QOYدOot}!<YpssUo$"*D"^9{q$hєV%hkۦFֆL7Pj׫T*5O?:v@S;bԈb*io$"*2灵xI ˗8w<Ξz{bb>h/^ <6[;jZzuq$, {|jB.BuqǎT/^z7SнgoukxIDT=VnJ#y{{;n 8`P#/\s/ 99gϝǂŋ1|eǎ߭ƞ}C*"%%Ϝ1cu:g pl=DDx)7]N3ؼi3,ZO㑒3gFFHIIArr2NDDh+^ c`w݋i'k'`aC`Ax!*/1#GEZ6ŪoV`ͺuR <0bP9eD GATr&"YVpqqƻuE>ѩCNce֣QFu6 Ӧ 7nD+-U ލbR~cK"pVz!gaQAx OD`Ѧn kנe <S c*+#(+Ǫ! g s!BڅH_m>jJ.7hX""""KS 919l={ J%_0s,'W'*@1!ĭ(\x0|d0 &:J[s`KT(Sc*,RH=OS7|JT~}Y ĺ˜j>7"cP !0/4e+<8XYY1nzyxZtTۊ ]{ e/N>[nE__o`zK4 ;f+T3JҘ@O2 C Gjհr2TRt ~N l~`-@Y]ޏAco_>^Ob#QE%vUf1ĠOҖ ϝ5h٢֯Y.Oa۳D^}-F Ryv:tGCot;vrmxߣ\ʸ6o45oWxߣ/^,JP*p,q_DQj5T~#>ro߲nlciciM۱n&#y;'.rcySXT cRy_lp#2{&EGiަ1m$ ?];CP*1b±qf,' 7fAPfXx1_ݽU߮IJ5ʟ:} ҥKp-'OoWB||%> %vW\F 4'H]gNɺ=goDƖ߸[|o,.SFd핸p?&ߩfi[[[L6?LsLw#w#LǘtެgZb-\M5k b .ªU-Vvv튉&jԟxx5ѴY32oE/BBBpy|}}kc~ƥ[I˜Z0)ԮR+㛷nQC/24C}&Mhloִ<\rڵӨCbޏYp)<{ Hr,v;o. O 66Vc{ʕ1p@9NTo% cjØJM2/4h l*Up=UJP4µ4"Sbb"/EGx1>xĘcQFuG . "򂠄B!؞}sO GdGGO1Dbf ƘJ"2WNcsHH圜Jŋۮ߸X"@VRmjլ 5E^4|R@uS5EDTxܠA8gܳW*\xO@r!Kp2x4^e޷@zMu7o,$X`޼yggc%cȢ1S0e&AYAspr$$$DDF.׼i3,ZO㑒3gFF]+TӧgV6]}9x,Z HIIH,X8ʯ3f dq3U3̴S0os$%%"<_5jTO?$D]”S5aYx!qq3FL*U±cǠPM׻n˗/,P0V\2F,2S1 Kf*|kkklaʗ+&oSm[~ V X"AФE+,^ # Өkʤ< zѶMW~[a-8k z՗IP*a7n<.&M(ߢyslބ۷a#oԭY#F Wy˗cgh(jծ`kY0/m?뼋ٳƄ4d?{LL{*(Wۛ.ޞP[2V\2F,*SFdU*rF])$fru`ԥh̜5ݭODnݠP(2*j$ څ-)T3TJP@'"G?X5 C` :d0*㿛71'x}Au/I pC* 3TJlqѴIL6qqXzvTR-Rq8cL5d,XS}ڵ >Ũu 31Kcy`L%C`Z+Q{LT8Sc2ؒk\NNND%cJ,C.WM!*Sc*N@klׇDb>+Rїhh1I5uRjܻwgϜ˗RS7 QJeS7DcL5d 9+{`TZ5S7`L%"]""""*V@BDDDDDE(#i1]DDDDTiBmzUF,6b␔gL* nGeJn QǘZ11q-=š=||)T.GG#6.M1|0˥du?6u3înQƘj>S  gˡ:O\7Qw̼&dQX""""*Vb l=B?'1O皱z8y =ӷmDDŒL&ÆMnhظ h'3nQ'MΪ4ZztG]h,'ލ=[5Q4{\^ II8{֮߀&kQ&n%Q7+qNqYJ5KR>sÄISдek4n&NV6SN?=QtލѾSg۰ BÇBЬ^XYYڷ6dk<<޲b#"*,zG|={il߷C̜}z#!+[߬\ws#/Fa5'±qZ\$"2&WWWܺ}'EGiV,]͛3iqH^={ݻ5K5|`w651p<"B~v-'lllPJe ®={ȘNq1qTlD]Bױ/\[b%m{DD  իkD^BC/OD_ +++W>|˖…Hx oo A 6N""cm4jcǏʕؽwl"x~ݹss-uk`ooθGD]Rգ;B <ۛf̚1e@.7*HNIՀ,'''|ҥ >ǟb k ǏsWbİ(W,$ ._cNN mox^8w;Lexu_RRƌ'fϸGDK١_kL<~[PjUmRSSq5˱Maђx9{35ʌ= +[=~T*EJJ N9cv""cbȗ8x0?\11mZk-?qT|hݪ{DDoɺz쁋Q4~77[bI۫WC,[^hҢ/[ÆiiU߬}Ah7n )l8p >34n#GEJ1{f'ND9NŸGD6U+rF]eW0?FTH6]-]˜j^SI_ L5矼YJ+ejy`*A}'$"""b%c(/" D1 bi̍=5u3 AT1T2 @G+!6.BwY3S7 +^M!*Sc*EFjd,$V'Uw1mCJT"ʏ˶TCQ11DDDDTdL%@$\ZDDDDTq!""""*TKr ,uYg!`8$%%qz""""+|lfjm iC)[{65uSJш{3^~Pȵ !)) ;~lf+tǫrqcD"uʅ X2r֌y`M""""|\{`yx DDDD#1zfLrV%"""b$XQLCv( Ohߩ3mBQfGoC'x4F]cgh^ݼD^}-F RF=EN5EDDDDŇ(<U`V ԫ.>GE>t(plܴ zuqڿ9Sz`ƍ0ׯĤ$,[. 'NĚurZsQ&dB`׮E 4򄍍 T9Aصg- Fw#L׹Xp|7-ʺa8uR͘>Wco7s&"""%T9kJ\{ ?M͂A en޺F 4k8?@ڵ5@*}q. 5x7{=3h  hnd |?L^ݺ"h! =̰E2g> ]J+|0g?gd43 ZGksok?e+ |k'<==lr{{ UjDDDD.{pgΝԡw"8(9F9nuغ4$& {g(++CEE9gL7˖xn.***p<7˖}SL0 q,8qX/D""""rwUT'*axYFXX7Ltr,DIxcXXj)EEaIXh1.S&NkK,DDDDdS҈GOx?'ǢWϷnk`0ʺH&s~#S[97o"/c 982Zٻ72EƈgQv0(%I]rؘaC3loLDDDD`T""""r|U[Fu&Vn@DDDD$U!S:w7w۳a9wC妲L9AP3?6(*.FV&^)w8DDDDTn*rդ72h|}/BBQuׁ8$ ΁%""""'F`9JDDDDpŽqM_FȑIUeU9 P, i"m'wy`^-Gޅ6~Ѷ<\۽y' QCrM^ٿw/ԼGz^ ƮX?/+z Ih2bceeu\ñDDD7xh!;z%?lRcr?qȲ_hHޘr'."""VZZ Y?(RZfF'C|QH@ޅkڙu.gՎJWs kj35Bh˄DK2d>W3Y7}#DDD ,DJ`ܠV)i,g%"""g'd꣢ G˖-Ѻuk 2۷oQW6, ˲]2,T]eM[EEEHN| 1CvD&M cܻg7f8IkעmdaVDDD EheGrr <=<&%!pqi|Il޼Y_0jm6+WJf##cFg+&>b;V9l>} ]a7p};>, F ǚ$x{`BX:^^\ī MYو7n[Cr,B؜/ͬs?I'' ^M+V@ܒ߷FsjfϚlۚз:|qqqx7p\!"qu}̦kg[̗mLlޢZ;iktdmv]?$*]#_gϞEj}7~ .Dd>F祥[nM]t)"##}VXe˖!)!)) =w׷'N°a0{llF` uΟ+Dj ڒWpqqK:WѪ*DDD *\/CPz*@Tj#ڵk UN0OFϞ7} DD#!~)<==hޒT+{M6}`7n@'U5}m Sr$][kӧN!cOh`WnaH$cGŢ1ßeFd `uߏE\`,[pH2XTӑY/͂Wk(J޿Uw aaaؾZ YǠCRc :g 32FR|qbd.ɰ,5V.f:e2._YgO[(++7|g}V߯}@\ߟseqs -Įwƍ?PXxgL׷2wӌOqU7o^".&ү1ol;WwnܹB̟2.Mk`>ڔ)IX:oϰ/&DDD 7jƸ#-- Ǝ[r%6gf"(8ƍ3Mٻ7,AB|B:vˆDH}{T߾X޻9o%&bʔɶ@gCM =#nn=cF;36qq6~hS&6n؀նʩ҈Gċ=AKY 9Ch4^Q*BնǼ/GN%9(1hNda92$\ܑSZU@XYˀ#t0a,]vda$:DDDdMtlyjya-U'#´Q.y \>/Y)u 9.+6H&s TqĻa,CQ%"r#]0@W*)~-Uek&PEA B;@iM!n1 4`iX RtG ( S3P(H abjt$%%BT( HXΕfTQLPt wAHD A 15c_fu (&E#JOODԭ_U  RQ3ܽs,-`hhXsi-*r0tr.P@"I@%x>k VP(LH 4^Fcoo"5- @`S2<,+҅󰱶QNVE_} 022Ѿ];x˗/ѷ_ddd7 Oq72s̆;b1ŋ04|r]\ `h1J_A͈B@||V$%qPWE))x~G#x6kw4@ӦB: -- ǎi4o y]P۶-SMǹ0`@?,)8#s[?@)ƾ1s\~˖-G!\/~56F˦NXX;)8p:|Fi%/#G0y ¯\Ş]0W\J }8~25@)8zhU9u6ȱppp qG^eC5p࣎q"M}d2.!5nݼQUˎ;0x7Xnm=v,nݺ)'#))'0iBŭDHD/=F3'׮ J_C"MD 3jN.022BJr 4!HM\c~]oڪ 22Rc?i9^Bϻev)rtp0[ťܩsg(L+Kθ1vǝ=e0wBl7mJLMǟ[pCBǖ.Rn7!JtB*$xz>O`pܾ+b t@+RyD@Zj s cc͛UR(DVRS]b𦠐d8uVOw$%&UUéSameuPV-ܿw׮]^VZW˖@y# &Fgd@!YB.#91("==]5{6]L1sϟxTu%1ln8ytuså?իWGÆn[7jۧEWAp}'ʦ+V?>hϞDq`nn__چ6 ">>HKQccl [Ъe ~ǏD DQBe-.TNTj^Ay~\+χ7^wQdddӧxйKWx&fKrR>PN>yOQ6MY3TXY\HIIX+ 1#ٳg>} p^8T]ݻwyS?N(t8 Ap!uA6J8y$=ɓ'!Jm Vq% 9.IOKD*˰d Tg]}׬EGHKKCGXz5_zz:FFbp[qMԤDB'5)M6ãG~2@V[#-- ӧ@ZZZiCiZ^&]sqQL&C 9W7A@" p 666@"A1cb ^8{wjHfa044y222#Gb13sd޿FJJ ߿_3M (ʦʶVHK-VٔWܯ^y&֮ߠx FZ=|׮8nOOOl Bzj2ݽYslٺ ͛7+\ܙN%Ba"""e"D7ob쿰i]Hw0rf\$M+8_J$!.^ Xl.^ccXCZMN0wr/yw/!`ܹS}t=3fk֯?tuc}s<y[Uu5.*jt-`4j-ƈ#9 1vvv9ueR.n1 !֮KzZI?!a7o>ӦOWQ[ LAϻQq53|M:oߎcʕ~ذv19ր)222am`W 2%;*W) %%q1517f氶 33sHR32O5.LLMQپ L!H g )1x$'%/C##TS3sRSS".N55©*'O¦ؘxyATJlb@:'/+J$ H $A(6E 3(8|4?KK#ay "W\.UԔT' J\;:pQ9W)Ͳǭ| @E [A0\H E!DmZY6dT`(o@֨ss3<}1ϟ{D(@zPZ5X[JSiM e'#e(JAKX$'411 J 0݄ReSE;GG6v*A`dh#++UheQ)Ͳƭ|r5α!""S>di+!V>DDsIB5-[>DDs|H甕󍈈Jj>=U>U]29V=DDT4Z>DDD|!""]Ȭo2DDT4!""hQNBz:r4mڶ/4M(kDzEN]`b$''k+}冾 9c9:|?}OqQC < ts-߉%N\Y8=~ Owy 3-[qFWhܨ r&Oӧaa?Uw&"*Dhyn7CCCԯWӦNƑcۂg=z*[G;c5avڍ;ý7:tۂ4{bhӶ=<<𑿠iVm?2ӧh8F[EjϞWwOl7w쌝=ݿ Oo_|оة.kK1s7|U9BF[}umw/cg5f?,-,cAҩ.^<[lK lo~5΢1M9QwWsKTe>dnYB±drL7gCN`u0!OcU6e2ΆIj;~.F< ÇpATR -TV VVpm@Tt4޷cb׮]5Ug>V[8rS'`+쎟80!8}׬Ki!]W/E=߅9Ye?>>r+VIqqL4WB;`ooC?捁aZl_-v9MA'ﵰ疨bx\G;0q7k^:9ލaff_o3&1Ǝj;Laia~'ORoo޴Μ=8| 5koǍ͑yn֬1hݪ%PfMV3W.9-Hƍ0n,M|}?v ֭׬;;Ow_я&66V]9!66.})HA*%M=|wkT\oSq&z}(BEH$ozn߹*>ލs˹NϏ?ypR(_H׼)+ Ƨ|!!٧8r orKӄIq&_qewaiAFq}}s/7g6\~ |٧/ڴnzIӓ67)wTT=D 8HMMw0aRl w{Rr2s(ǕF 'ǎ]ȀOvoo?qqqz:̝?y|<JPX=߅9ڒX[WwO6nڌQc#tBbbbQzXU3^mn~ i aHLL۠~}\ Xwy5 v VT+Wjl711 ^\2\\`(<4կW/װ. ܅ y%J!VY[[!>>^cݍ7MPsZupRի\x7jSu8vFc'N#a;Onki[D9n9ը__o?`aeصg/d2q9 :LϷnjq%$%%1{vǪ]m߁\~Ssciެ)vD ??@ ?? 3gHӠr !9kN ARR>X 8sUw0k\<#Xz5ލD{{|7x:?`x GC&ay 9 [waiAՖsttѽg[:6l \A||<ۣy9'T[?`_NNahĬMaqACnka-QE.H@bMdV>>QKQʧ<+LK9++ "M.<|SDDDQɱADn ҷ;2L:_&GDD: |霖g&""*Y ""*V5p@DD:n7""9Cl.|ȔtJh7_MDD|HO @hKd[[JDT\T9A1럔\ GpquEUϟ=ŋ/pY4jccc8>~reA٣cPHRRRpm|޽ml4q:jqơ.066*C"z \LfCD|.GrE!44$*VPD[Xg} Ty {[Vg#/<7ÇQaj>g/?pգjQ}޸i3ڴm7/ڷz|Oo_~cC&i{kvѡslO~i#"ʅ>}Yfh֬^_PlT)))hֲ_0|/hڢ|5Ǐ#FE*Y=>1|֣'< IDAT}Ѿcg\r\evdj"ye*k~v#GFFon\<{&C޴fGcǏ6ܯVYѿǰc ϜeXvfL!'05 ׭+tڈH){ЧOAhР.\W.XQxyx#~^_DC8r V;aXl9&!'f \ ź@uQ얏LB}0VZ`Cth*U!m/0GZ̜&033C{{= ΜVo_ǻ1j%mDIr!66gϞEڵk׮'O 跂ʅvƮݻ5ܽEwV41,-,?SN+V`4򄉉 jtرMXhG怃b4}JA/z[hCxyz{MaooW~uݥA϶^?߾syiii#kݪ&Ogϟj*xnܸ6Z?~ҥPgVhRIoe߸q @f(E,q,(no݊ϟ=-tgϞ:0#~׮FM'';.~6a%%14mDIr͛7ݻ֭[&krڵ={{EvOڵja-v aAP:laqCᡸv9 #q5'~]bmW^K`ff {akk^wM0nhp0zoX\>[͚Nt E0tA 3g$:Zj;:8ٳ9VJ0cl\ Err2.bƬa J^._ϟ5*– EQݺpwWo]m߁\~SO0k\m\С9޽jD\ 3SSx{7Ƃys9SNǓ'O W(̝=Rp riǣǏ^p@FD B7/u'6nڌ6mCۂоS7FN]moV<n~9{:wE#&D?z;˗ZժXz ?. ץf̚K:'9 2v(88Tn܈ Ƣ/c`@}&O:u`ffuB*p@D:\ﻑXc7܍XWvmߕ*UuׯX҉ʇ"*=EGeSnNuB5]x :)EKBp7lg .bf@}'JY݈֚H>}abd<~2hH7*XVefL={tG GQQ٦nDDCY钲H7""҉n"Gv#""=Q>dn7""ҡ,덈Jh|"""*E~6!""˜M"Ҏaq7.a*%^5mQ=coe}|Ph1eDT!m{&}21rGÞKE_55v#"@ [ }'JI|B #؛=GZO9gka yV|·CP^M=_MDD:n7""ҹY ""DZqVk""5FnDD3bn7'"&zzvα!""SɔnDD"'%""}aCDD:ǡDD$tnDDsʇL "*7TW"˵\Dn7""mi c#';)Tb_%^5mCD\};Sz0C{Aj cC,9 ;bc@9׎ pHo*=FAx}'JWM[ؙ O"zȔ-"Ҫ/fUK頲-sVk6yerDD739DDT1d73!"'f>n7""9V>DDs^tG29!""]bi@on7vQDuVzQٺ-;u{#o۶W2 nD5#9`h憫׮aDUFVZ'"*-7b¸h sss41X>PI#nD#w#ǻ:_oܹeV>lQSE-"*T Bs\KWYI2D=5>D 8s,Y*}bY8"pE̘= ǔPOpmB䗑#0etr#"ҧÖ+""97 ""vcCDDnDD'ʇL!""bˇt|HgD!""}kHkҡ~OECT(h|FD%canǎ;ǃainY}/]eJ,@-"*9A[P)%jp,~mڶ}zʇH;jP߄P">q2FDD:MY!"R֦m{T]FDD ęh_<˔|·tM^GDD&fNCDDz|FDzYʬn8Ԛ]U4,ap}'$aӧOѢF[EjϞx բ׾ xz¯32,4<|_6h{ q ;mP`yahܨݍgOcD8t(ㄆcɲ0nΆ+p)45^nl Le˗3%9eȗQh޴Μ=8| 5kV̜&033C{{= Μ3ѡ};TT xaC,^0?cbN@#/OfM'Lvk7>ލaff_o3׮-R~H̀6~H 7s'~1N(+!мY"Ҡg[[[d/ ֽ'N{SW;ܸq z6BCFpm#:F8F4>x7ƭw65i7"" ..W]ҥP[.R|I:hF#֯]NN>v]> 7mwdjx(]p\ -ұ0D=&&&pqq_+WK,[011u?T Bi+ܸ4hn1E?zn{_y7wp48={t7ދhӪ󅋗P^"6H{7k;A;v¯y{pY({wCqY$''#)) !NVgaeصg/d2q9 :L#3gKHJJ 1cl 8D魨 vv5k _s@K??̙7͛}痑#0et%D|P7CDD:'dJDDerDDDddp͞7"*Y.U-rSŕss>DTXPn;DDT!p@DDYH2FDDMF݈Hkҡ|߬|Hk,-pXWǃainY $"pQQ1N;{;X[F "﫪oiS?\\*FDD:29}'*͗I""=veV>w#"ҧvSvŬh$&&ru9jm5}̻<_CD%0:&]}'Jfh}9"ҚĄD|жDQP)k{v,|HkbccP-Yf8DMDT(XT% C!|NF_dXTXVOJJ -^ ܻwFFF:Qz(vˇnDT Dev[jj*:ucod;VB깄P r2.W)Dv"etYteh?۶mSu6kԬUkw/nY [lEs0A8_C`g_︺arlovUfϞtvz?gy-bG5fۍ݈H[DQQfmAA קo_|;{]LPoya){'OB.ǨQa<Çc1{{v©3g`ڴi;wߋĎA8}4-^q}pviK֫ݻW^;yo##cif\SS3L>M6U7o>f͚vm]ykgΜ%KS}%ڵ+F >NY=ũ9,{iXG&}QQQ0q"Ξ9ظ8T*M]ʈWr <իWѮ];4DOY=%M+"Ҫtɔθu|| 7t0x{7aoo\54%P355\$$$ r8Vg.KSd ')v,DDPe&'~%K.,, UA"Kʼ0 zwɓ!y7yL,Ů68{H[!ٳg>bn޼Td29rzR[6mBRR"/QY+` @3' !5"#b谡G3f[8$&&ĉݻ[1lY_MD-BQf#CCG 8EƍrJOn \пG#oy3giSb挙p;ޣ'5m׼9׭Ŗ-[Ш7quE0xSV*KH0z!,2zݧD'~GN'}\TIRڱ-z9$x.XbYCWTż]m""-QE|Jg>d i(dz[mENCD Ȑ}rK" #Cb}>DDZPW""݆J$GyP(p% *YV*vʇ]nDjqYx!wrXҲjt*B֗ei$j׮$Pk.&""|Qi3[CDD:ʇtNYߍtAs>DT 6=Gd\wRxմA};3R9iۦP!pU)wQYg+k i$ c~Yqp"ҚE8u'jmǬnV@DBZ*ߊ2ۍJ!*2 d7FDZE(V)|D{JBP("0axv6t&/_jȱoXh(+.żȬjFDZpP~^$;uغs7aC011QϚǂ1aXbZj]΋P-+"*e˧td `2u1R˗.QoS}׎X`9k9!"=Ru˔{w̹rw?1㈑u VCc߰.WC7jfCDڢWs^$կk7h"5-]gN?ru.*0/c DD ѢR@-qUs^8{>DUnE:up x6ɱV:}܂~_FRR>.3fCDZUt˗- 9u:u骑_BDwyKd|K]&Y'%,uHloǧ]12TQj2<{_ߵA $''BPcrA!"*oMLiK-Zz~T;aӖm022oֿp[зHLLĐ?# B!:DT ,,,1v1vsl˚#{հȱavb1"fj v(D\uQb&wSMn7"Ҫ)室1݈HDX.z{;Μ?"- A,woFDZ 9$R)222*%HWбRn7"Ҋf5kR JK*DX~co^2U鷢DDVoGlSDNpbW+QS]I2L5Ơo&""*: ""$d QDDTFDDzʇtFfhFG#111I5jpPY?UTvv0S˧7uMg8x Ss|خCq<~QщuʰIDATpQCIlFG>M;)Dzq%"XSgNLHmAƯe ٵSɠ\$&&G "iպ5vm-Ş^'66\\\ ʆ]mDE/D@69:%IY>EDf[1_P)M|u\.ffZO\=K-ka?X5aXnAThzQXՋ-19 I9浘k%KIRWwOȧ >4(Sdlm3Ǝk̨MHIM-~ d}vع3瀒„!z)g.f!%B1TܸqƏxX0~-:EN[5LGWMصk-Y##"4s<==QfM:U:u憣ءh̙32d6n܈͛ԩS۷/ѤIB!zMTPdY644»ヒիVc=P(DXVZT-+Y,+Yfݺpme;{x"0pCS-wE^Qǹ.*ïEKmТe+W;nذ7,]+\*YYȣe%+[^lw=iʋB!醆Vڷk&0ǎ=;c5w  hf㈑x!!=-4'%%U|2G\ǏCv{}ѭ_1f?d2YuunE:>#g_sW4i @G}>GUx4={avh;˗h;9 /O̘&FqFطw7.=Iq!8yy"|jժٳ'5[vgΜAΝ5uO.R;:ˬE%u]JJ*""`Ȑйs/0yW-K.ٳffkYfays]|ǨT  oZKǬYЮm;v:X|F:fLGyeYhڴLMЬYs̜9ޝEU *)W D\HYQJnjvI "n R[)Ջ .X򖩱(%*?qa_/^2|<9ys"#_ckۆW?"t^\]W-Z\xݵ`Ŧ7jHzzz=p xzzҴiSd^|s=^snݴ>{tD2Ӹ駟ygb5--%9;w0-֙s8>W<==% ڶm{_(j66nܘwԪeK:ݻuÆ>xynݱ֣t%۵q^^={=4iB``  2:}!jx|Pn RS8u$AAWnnyyZuӽWv%4;e˖۷=XF~̬NS88<?;CcI>ąsIY~< tn?+8|m gp 4Fx|qbv3lOe&#F-,e% 2O73w;>VLƍ^Ã_~E֖ttlmm F+8=|·R4ȸdԩãG%+cZҦMj߮=&L`Æ ؿ:9r$?eGLڵoS*^ˀ~^plϡ8HcGi&\>H//]ss zVlZ/Hҹ1m6el߲5QZΞcFsZh޽;{ъٳgQi\ |GO0bgn޽Kvv6O`Dtp`;$$tzSSS{]fŖ핞=ݿߠcsq> ZWӠt#++?|}}>}:fʔ)w^OKXXSN5(F5 dIF.\ʜ!Z/Oڶi)?Qݜ >>T򸖖D:bCFFҼy3NWb4r-_ARRO=ݻuchu|nXʢElmm 5M8RRRg?yų^ AuҸڶc[׮(5ф-DTѣt`~s|OKbgow>^wz2Œ._BK" 6s>֙Ȉp._&9-0(3|N8A ptt$**c<<<" K.ϲvZw6P2QMHB"Fψo֜Ԕ2oojj;xXu8;Ʋ8lA6|BٳD^U %+qܩGw$!1'TRE1S n+͂YiSS?^T7hJF+~̨\"UQN'ƨn7*&1~ոj\_>K.0 *ç+zQ2u[eBh~6E%B2 5jDnn@)}ʝ yXY5aV!j:c΃Ƨ ; |<:vԨgUJX6<ՀeOϪ.U">.O54l#.nwЂ˗/sq)~{Q6VVhВ-iތSRر}+7oܬQmiTC77x[fSY-5&pi۶j "D R./B!"n,BZCcbQ!2ɕBJm!ɴK!/ɿABT»<&I#PvdffM hݪAQS9!DiT( ^TVE333;`Av QC9Qc\~]1U&ӿoU\]WKe'F_J;wsnӍo<<'>|}94q܉ÆҭkrsҷOoƎMu)J/ji2"×\'*Q xkC yyyL S'Ӯm[ȸAٳ^[(W̙7Gb27oFfV'O"j*k|*<>|ȯ.$:|gwZ]3t9m;Nn?ovDJ5^l~Bhݺ4oZ+W8/ݣs.N^u6ã;7m"h %|WwwfϘ'n䕞=l}tzK~cqx^^ZWHcy]%QysiݪFӍ Zo:^r*}2m;t`ErϚF 8(oܩƌGֻu[g憨?z7uTȽV >o~T*yWO. ;.7bwKԱ#ii,̙$uWZaٳ'BøA&Mv:?O?wǝJJD [[[b1Z1=KB4^YX]v=g}n|/^8ѭ;66zGU]}ܺ}._RayUXڥiŋ\ 6MN5b7v^ ɉY3c%09{{+f7cF$fn>ggshQ OyEߒꨐBҧL$=FX$cpoգۭ4Gرs'[7毶p :}{|9lV>ds϶.1_SSSJcʒYA^у7ԟ/ѣhڤ $_ ov` 9s(.r ^>Kзڶi,_-Ymt5^A^#̠9D,YBvXsF-Z̩g>'Of%F__/Z1#FǎGYB+,cdff2"'O&33nn7*DnX211` {נ̶|N;ZF BEu;'۝w~ *=X(xo_厏%[mj9Cڲ4*lo)C-R-pc, ꢈZ>c rO:]EL&G!D3PT݄Bn&\! ye&BMBA,0W>mrB!j<`(\!(?&Oj-oB!* nJizBT(GWT!`_( BT(En BT0 F㓑 B!enbg =+J $ZV. LV+RM!DKR]a`f@ZnUI!D-G:xwz"=UBF&[Ь'HR~_I}% wSi }yRut !( Vk7(g$PIENDB`mathgl-2.4.1/texinfo/udav/udav_pen.png0000664000175000017500000007775713134046534017534 0ustar balakinbalakinPNG  IHDRh\)sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwXGwG MEc(`b{714K|1 $֘{/Qb *EA;8g؝wޝyoޝ220Rd Z1H PRƢO_ӜyN*a_2e *k(A1" *H˷ߐAs\%#寶@ e$-S!|vc@ ;'V J$Id2d2@ w.-$Jp/)qпJT"Q(04,!T!R$&&%IJN&..IF. G-llLFMYʷ1"2Y zIdIHq$?5W$ j dEvtrr21ԨUr圑d I ݻ-ed ;+ NEllj,,BVc-ӷK\"% E4a3Z>OBSֻJ*ju @nԍ$%%caiIbRH)s2NNxؖ¹8aee} ^ưsLvvvT^.;ӤIc_|I~Q*XXXf*3f,3g6˔L8իp<ׂ7o/̞ e-dC ZmȓJ XXcek@mns|CT%ce pxnDR,n $H')1WGb" dNhX(*XA^X}//pptgҟt=tJRJT*9|&Ӟ=8xδ\W/߁ /$/ұSVE t!!Oww˓y);ŋd'&$"<<[-Z-)Q(1VVOxFpHA%Q*#KJBHj+$ I?SY$鍛5vD`ڣln\E&a[>3fϞ{S;tē$}!ɘ7>ÿ}޻"hժ=zStiMژ; -[DhHY~dmN`` ԫW/ |ڵ\|HJ.;o&nnnyׯ_uu62*U^㓏?qƙ4i";v̓HH^iLאNi227~DGB\,*V "" I ?_~@+Wx ^ԫ]//o?~̕+WPtڕ$=ȑ#$%%ѥKW*e˦Mgg_`A={^9y~:t}ϥ{n:wsU2‚w؉Y6ӿÇgs|3._N}ׄe<ׅ!׷_N =z/;w%J,IZ.;w0˯}~ p/eP}e..]¶3o>V̞;7s٥hWvb_29\=f,/L&Ν9_Ȫ펍l\>>t%m.Ǎed&'}s-;9)w%K77?Lw6nwޥ_~_ڰGlɶ_jdddD<=Ch"ӧeʔKܹCi<,,dEY '+H@RbIə{G[}'%dR.$&42٫HNtͮLiM9tLJ=zrrN:E.]{.Ϟ=ۻV(33""^pm>3E3z TL\Z$&8(S~+!.6Wv RZ]DR$I$+/ jySMC΄?\7%1q$-sC9y+dϿrj7pN:S{w+II*U&Mu&ڵ\&nTYՒ$Sk6mj]atC֕رV 9$IcN#g299SyҟPȵ$&&h9Ea3vGPv-͵CT* }t{;۷'4$$eaX_|\ݣNqaT^Il3gQB aWϜFN;n޾# .$Iݐd?~.7u:f0.^LogtM`xᩡn]H!7‚=hպ BsvgɯAĚk$%+Vj*ܿ{G;k2dܹs9q޽;|7ace[@Vo'ː$KvbRw찴@.Сvv6ܸY}>vͻ IYJ !O-2Y~Rqx+K+B)aξTX'JŊ5CBBjPM裏ԅ` 8r8*i>yvmZo~=d2ڵc…8q>'P(o$2օ8=je2_ORJ#G7f0~CwwΞ9۶ռyduɎNY+U҆mp1B8} 6664kD3c憍ct䴿?W^iaLQȮ€[TA ض[줤D'5b8~~ ~DlLte޷/I=Li> ٥C #έ\ްa#ΞcMXY |q-AG. Ie+WFPDӦ<{Ʉ u+ܸ{9 I6sr2\t eII ._]{ E* >}oy III<~_~޽L̽@fϙ˹sgOڶiKx,1.V3y+*qxyy.] 6mےČ?DvTl &Mfw A25qF%+W֭(J={ơC8qQsv ((PnNtJ^rR~!$q&ݻGz1J%ϟeVl#Gښ_~Wē'O ﷛.S~~`vrC;+Q/# s+W4ȈpȾ{:jCn\͵lOOO6lLrb<&2< 7Ѣwd톪VQ\re(Uʆ[U3:u0~3 x7h&K {?pwoH,㗱 XX`ˆ!Ti8::k˯KYi[s}j΋Zi.888P͍VÃЧ)sQiݻw'9UrrΩS'9p <=Q*tޝÇi;ݻk51c}/YJll,cN\t\+af.YwOll,L4٨|Ǝ߼y >?nN5pkJ۷ eUե_@@qqq4m$ۺ/Xx1s#::J :Ԩˮ!FsiNJJqn٪5qQLRIxjlGHT: cy n|Lre5-|q2ʎ={m37ʕ=jO ]24h؀$I*rVVVXXYqebbbqsO 2;8bmm\@R@"_z%JEb|s?2ol޿Ƕ-9Eop O2ח۷Eodl۾슃ZG'Gf85k`iiI2nݚw t܅ ұs6f׌_n=V^CSN=bȑ4n[CwCvޣ|a{ж]{6mޢΝ4pEK&LDddd&> =Щ3?3t;ծ[֭}N5t[wxwM.]qlD?ْ[P0cZvzCSې%#..-xe&Gί-tߖ3rpk<`14i֜7aĨQxBn"uC#'o(?c~t2-ZuӐrH@C_2hպ%KŅ#G4qfΚ͒ŋh֬6%JPz5,^eago:k_~F`%%Isu2dp9ǘ.A ;p ? ܙ|K~G*#GX/neIرhFcå.oٽc5Yf5ΝՒeL8ٱm+jф,XosgϰrrΟo˵םv_8w4m۴f!lڼe?S'yQ#~muzzS ?Z2KӺ^7'ܺuKs͛]3^zrQ9LyӊcȆ|]7vz<1c7}.ꤵVz5Juu(OY}=T}aND?C.gFښ'ʹP$IB.Lg}]KЬiSڶkK-t׶]{&Mțov 1ݻ1>/:u24n$ =}9Fݻ^:/hҴYk:vٳF=}͛g 9јbCQs߷ٳk'.0m֭ 7ؽ{wN;֛o-Ǐig7 g-_۰,^Wiްȅ L}y980^?]zWݻGM5m֔)S*~;+>Փw.;zFhMr47nīys2vNNNZC7nO>2?(Zjf2^ζ\si[W gF6iB%8|ڷ'(( uf[k.,WP{)ޓO9s/\ "umBЊc7&}d g-,^'Oa_*U*w[rY*vXPOOvޓm껹1jHV^#5{&J{wx gΞtͤzXJ*0uzVGXz&`縸8=kܼ׹}7hœiH׵-,O] 0+Vmvz3^A+o\ΰ_bJXaCu_SZUvlʍk\|)(1#o(?cliӦ<|/gqCkι0I3uA\\ǎ'm]=J\\:t5^*UrcZ? aоrO^Q2>=w5j4I|}ԩSAhm’K5au3ٖ777:+kjLUW ¨^_}ѵkBENK:ڥ Wp- K#Q IDAT\ʰC)_< +Wf;{{{õnܼi|1fM/˘2mvS} ;)9ݴX6ӑ5dަu+֮YͺuiIcaYAQF-<<q1VX |W8J/I}Tx~<{Ӧq=J%QQ?qAC8`>>38s,qqq9{32XbϊAp)SzF'NPJMȑ##ǎ'..1qҤl1f(/`DFFi Ԙ*V)J է. >}0qdZlPlA,oLؼqCjժa&Ov>-[Ǚ #>>g0aD ghРkVbμ߰!Ou.6f݄$QRj..{fǎm:ct1ݺu[n{~riέ>󒵵5k׬+9z4AA)xzxзOMN:<9S}Ó'OpuueaoNϊޟ?/+,Y&h|MxMfT{8;;G=Xh|qȏ>3:m|})W,Zl f?ΜI'::5k0lPjI3d Y **:GH7B5uXWk٧Z] iz*Vh|r9֭jmA!GeϞ=̙=ly.JXYOp9;udɒX*T0roco*ACMܽJU *EuQD Ο 9^@ 0bp&Y&׼b=uPIWQAwѠԝ.ਔJJe~!^ulDy mRιR WG~c ʻh ;gB d2\ޙG:W*U/jM)TW ZU^1}c۶b?qA@qS&߰ysne*(P< YXGӞ$%%]6Nc$@ʇMH]FROd\vM+ ˖g#Wtƚ5Ӥis*VI]&ɓwk%w%In=7> ֩{?`ԥzZ7~i]ܿ}S*ӡc'oߡW|*ct)XYYZv 2M2Wilٲ:Z5o#xB9ky&TtLf^Y{,).m޽h׾#^qfGTjݫ1uӸI3ߓ 9n@^=u>Yۿ];w|͟C:tvmfg?(B ֽПv;ՄlظPi7cYE[PSnnnZe˖47oޤYZq5kf 4ũz]| ws xx6ÇZ=5oxs9_ jelݺ봇} ;sc…x.]fꔯ?}0_+˴FF9|৏yʸс4MʶZ*e,[4䛓(L\vիk 1,gij_ H8q\!O yj yI5$<{l'(6Ã={үo_)+իgOʕ̢Bc,o7!ټy ;w2Z[[[:w[5b0LɓSL:ѣFjkۮ-':CǟkN5jvs0A+ՕǏVg=?ɧ=9zqqqraWW|ua.dٹs'MqC 7T&9/5r$_Oӧ|=ej)(6nҤ LoHċq >3z4_OʩSZZI3޺Ot}'zb̘ь70vxƏо][j5:tCjڵmW~lڼjӯ>}j$*V52jשo4X^Յ1D҆U[owcM П JP*缠sN5GRVFC)~[׺U+VZņ h ԭ 6ls{?FSv]ƍcdKFQ%uvt@PT9wrJs j BNzWlAQO>O>o5AF k @P0a@ C@ (`|Jt@ $3nB"xsaW"a!?((|8nv (lv;$h9\ wgĉcǸ@ pMC؁"l[,Ky0ŋtI*_OG֭Y ;Vm Y>af9V%}Czao@2&$xgH#3rva†moA23V -aa0WՒ[T)bcc͞`ٚ z]R~EbۂŜpLdd-KØҶZ1yG~-EA+SWH`"NE&csN|HzW2ږt-Q/MCt\+1 3!;0L_A"l;:ꥦKsԦlyv`*̖Pgqriؖ2cݴj݆圩Wߍk~',Nz7Ȕw-LCwfϞCRRrt-jdjU}v`#c]XwOɪU3߆ iѲe9SFM ZV\[8:ó+V4hZiwz}ޛתTk%zųg5wzRz ʖel޼E^]Ƕ_FFfjm KvMW;g75ki;p`*jk|h&5 9gI呛鏽2nX&ODཻc;'W+ٳ""<[iOܹsxp?[6s .0Zעz.sC7se5{6{֊?o<|~{w9qj &hٻ_??~i)xB|={6K,@-\<__4}eܸ@TPMׄ///Ο;Gu۶l.gۑ/"2^o:C]xnob 8p IRs~ 6m"8)ё \N  -K} :GkϛˬYܩ3UV㧟~7?ΘAŊRΜ9ESwEtޝqc V:Ú5kF>}t_]vu^ gK={6-[eV̚5 ҹsMe˖@%1/// 1{,fY+Kc̙4-9s&{֤9q&5SN[~=}]ʤ.5jԈ5WkiHw6iƐsC횮sc~ڵȑԭ[]v#ؿ9}޾Ls1,eիlRo>j֬9Nk׮ѹsg͵C. #$4 +Ww:Ә{e7YpmҴfZܴ:9v 5kYfzq͛7 JĴoᴿ?ScB 4p mڶnhڴ)m۶|Z]M~vzʖy=-< hk΍Mk׎+V0tPvMϞ=zLBo_ye"eX^y9J(a0[ZZ(mLL W._"4$Ya!>bc %@2iRSent/L9^vd>$iFI9r0!Oy8J 6m*[njժݻ-矲82mۺga<7!{خeҶ3_'N7]g7w 8|||PX`G|#فuUV-N ?ykt][.h>s6˴jDz8:S\xcR r/dYn=9xs˖(X]s6vΐdw]v`oچnn̜9&MT777f͚Mƍ+v`*6А`ʻTt=;O*_}%G Ϗ%R#g' _1hmܩ\pe~?0Z‚ɔ&;x5o?0Ǚܺ}Ə%'eZy~~L5j7xc !$c7j0Cf.1nx?~BJ;N;fi tЁO2bHBCCZ>Ym߶-Ǝa1SɵcFbɚ4~+~ٙÆ2u70B?J*W˲l.=m\Nǐ蒛D6mڷkVӾ][>6[[2rMjV4yg(0O{Z2w-T / [Au5;pcG[ASl[Cv\iղy(ǚR{xL=&AQzy1c>|U^{7o2qd>B{?)-0S?|1"3vL!-[0|H=z+={~ ۶8Sa_HfLoHr#-vAz?)-0c טZ+G_aˆmg&, RP9"\.GTT6  #¶`8g'''^B P(-P\rYlIa0LYsC\|G N)5heaˆmg$uAXOr7<amIH]/_@ (`_@iX@ (`,A#9-@ wdwo0*Q8n[A1B8g29t/UʼncǸ@}7lݺyQ B9gx-Z@J݃X(,G֭x¬% ,0aW{1#0'`H H ZJ^bBB 6R`&,MfER39gS\8]$9iIqbQr.< jI2sVWK*Elll~!!lܛbe HmDϹȒ%Kٶ};?ښ5bȐt)wϹ)A1\ (=W~*䖤$5k`TV8Οo˗猄$IZ^^QX@V|_l'""wJe0~Vؾ} (Q -ҾY|-(W,.NXYYbggGY/kNͩZ&Mvze_مe~ó+%%ܒQm;/YJ(cg)Cvݢ%e9݃ٳ琔Gxx6bŊ:G9$u:+y Ze<9z&ev"֭k0ޮݻ?%Ө'/^bQ8;;ӥK߷?vR%W7jJt۳gRJ/;wwjdr_C={6?OOO.^aóSP80-~>|𨢵@o'$qEd2IIIJ.m C;[=q.HbιhH [gfVZЪUK~q/霍?^M.y?ΘAŊ+3gh"yzPj5-\D7v~~̚9//o[0sLzmUVqya͚5O>:B Oo`ݠn%EjmR PAV깹aogꙕWҡ|%s1Νx:4Zx`lsiF<@;&_C^͚5MOz9׮]sΚ<\s 7oWz O~ %((Hzʕݻz2"b+t-(-AjڨE2yl%VyYyiĂ"BչsM7Η,gamKK -=4Yxp%ʗ/)[_a¤2e*QQ-ä#cBiu*L'@4H*j#<-*Zlysc⥬YJoZjڟ7v\;ڵ$!ԒaܠK>>Ljn,:/La@;N9g)uLܙEjFfO8"°aCy;n<Æzjq~mfØ2e*elK:uf)7 bH/gℯ4x6t kkk.\e)+GɤI)]A IDAT\|)ST'Q7aty)*PDDDp*Q  ݺc+X5پ}+/<|++kC {xcǍTT\ ʮLcVv-Xb9K|>@a# r%7\ P(ؾuks9?v* z#ɑX.!#9)][7(; 6oH-NB#,shа!W\СÄ?e<Δ/R)Y`VԒ?TQ>|!(ȄݝEAl)0+b#\C&?ru3g^9MWT25,0/yZ[ s L&$F& G''J 3 Q*U8uoUŁTw,z+Whа Qj5W\lٲf7'+sܜ C^f{C^FT '5hAW B ,0+ =<[@ (E@  ,^ I{kO@ (`:go yY*s!Vk J^D ,$4U٥<wߪ);!C&mAp-dr^~"dǎq= nkKEE9 Ƌ/ֽ[[Phٺ;;#,$ePjak‰5[Gs߳ɕ\ ! ̋p"Y~7>..[J,))9 DڃpsvYX%Dɒ%TRRT)Y8D F8BH9g{os…ߩf͚}ժU+{y\.[ z@\!Z0oǴ3r)1$B6'x9_]/DݻߨI Iڳ'6L$&gӆ|HHOZjg:WkUTdI}}פֿ:EA*Tȱf6{ʟ{OuՍݺe˖?֭[׶ML.fh3h :}x\Z?wڵ/-o2ڹsbbbe$ٳGm۴֮m[ 8л-1NիW/:|X{'OO `L9z.K=iӦk2xP% 0P5kЊJ<|{<-vmjڸqS}#G' ZjZKŴJ3gc6MʅhM:r~;r-\U%Kmv>cz2fiig|z_W|Cos"EB?:uJ;u!%9IGt\WXXXݱqeܞדO SRD_Rr|``ыBi钤^em{sTD I7dݥwvܫQyA7`E] j==TSx| >}9|Xup):_thE׋֭Sz!nZab%k{s)SFG$)<<[fǎ>emۦ}_7mڜ>ݸqc}bw}Y3n5k֪[nٞck׮7t[^u){џN6zh >\֭3 q99/ k„9-g"0)U_@jQ޽#Un}E6}&O*Iz>81NuFiZjzeݙ^WXIe9֡BJY~MzռEK^Z6ӻSl=|LuC>3zB\.u|ԭg}N?6Ч̫&h]z_guiNzSsUf]&U}iZG1cU^zvu?"=$k -gif 1_wM/Lӈ,.>.Or惇 QF|f4V>匠)[ΜIddp*˥3gT.UE䌠)Wvء*$P8nܱgBY0$2(`h۷k˖oѬq\x9+ ]\ ϐ0ZF]p<p VH8K p Z8'93CNT+~C'$ yՏTwmwmpLBbs-pQ'#vn 76-Y.=aHB][zVIi9#hv:W{_"!!*[IR2.<_TO-$4SJ񱃽\,rY1N}G F/$ #L}NW6xض!m FHs76#0Y2E*}JfLWy s(_*>9q56M!Cti>}Z ɴ?-m π0s\*XֲzgC}5J'Oi2MS'OԨQ|ʘ$g#쮂'Cmhien=m%$*WB¯z7`1+zbD9cMQKVX~qʖ)=fɒzWgUTI=CPhh_oT];O3Od7˗)2O}$?҄W'R}ԧ/M0ȍq@^Lt߽?^3Z``N{~A+^&O߼yƎ{I/?>ƍ4u,WrʔL?$_/ԡCV߮r*2RcWXWOIqinM|u&MOOIGy_^d-ܼf q3OS1*Q*Vѣ+VzxM-[*,,LիWW\D}Gٞ366VV$-^Dah%I˗/WǎZN8Yn[`/4nX,1aaajؠƽZh5l@/Z4o,ƍ|߰P"=g3+T: X0uE.D[V3fԇqc5zz$I;w/G<32c8PÞxRJRW(>~F-_re^Z:t Fzy׮tp֏V%1Z~ QbW^\վfϚs+n81N>y1Vn[;w$uYn[c;d{LΝ4d 0PӠCcyg5tؓUl;I!E\~},Yꜧ%K^t=Fk6sMq_v޶m}\աA>Svv]=u]=}w߽wu#g P2ΕݬY3_N$hѢj֬OZ6Z.:ΛݺM[. K۴ʹ` ࢓*S1bhm9#x pܮ2eg<73y uX-n};f}**e B9G. #//h͕p S"6STԐ^G"IZ;̕{4x2mٟķBؤgE iղjYF.jTֱ x֒v< Ðp3؍Up(3CraH85 `EfxgraLy1-g%}F!90$g xV3Y G83CraH8 I*a8RLB#pkHzp Z8 !90!nm>*pڴpbaŵ_ғ3 gei Ц ø`;*8 -g 0 0J ~tL!90̭ Sx1-gƓg 0 `zW ÐpRѳ x gb@0%1 N$$8qI ns1-gf0$ b@$$8HgGks{1 Dra<93 [cZ8 0p=gkCh90$g3 jH8 !90VrfDcH Ðps)Xg"90.#pZ8 pCҧ Ðp3$0ĘmeDraIHv阖3I4RH$gӑMraH8g0җ Ðp3Craav`0ZZ/Z83wQ`p3CraH8(T-=raH8 &!algLB#pϪTPDu7d5C6LBrϓZ~C֭ן̪\P jr:d&Oi)S5tm?zԭ5kWu1 թsURUo:vOdܞS|Gjޢ"+Ge6zwsu}V\%JO?]s\?$5m§\3xf ΂7/%&&n۵k>e[;+~۷TF~ѧĸ8sZ2M~zxOXBɓӞݚM?Cjݺ6nX镗_֢EuT/Rܤɚ:e~ڳ[q_դIf@IFYGWPyBr׬]v4G#駋x6s$顇 _LV/ŴJyԨQ#oG]|bfWdWnR}u5]۾XXWQK֮Qdd,:)ci@ڵҥ_{ тy>Ǥɥ$fl9UwQ?G JHHО=?{3;޽^tE5k#>e4hsxxxۜ';wV֭|m6WsouYC=Ù:s*{njҧLV6;'Xr\@cIqjUz޽zcǎQ+D;vz4sN2xui!zru裉Tn6kի7F׮]4p@_jTѢE 4.?FYG[TP`GkپٲE=֯[kwUhmCGCJk#m9`_?ޭT}u}B={Z4 UzG˯**n=ЃvW .nlEofw5Y[!90A[i90$gZ*R,?J]:~d4b^PAe˖UE,bX*Xdۼ͂sw$åRj\.~uE,bX T5mK<~ڶk'WuqbX" $V[2MwoE,bXlVr6L2$x6M pք&E,b+P:L;odv͉E,bX T` zrvfX"U)-gӔ=WڈE,bX T` $#sk[weSbX"+(Zt2݁r3糉E,bX T` =gsd"E,bX*wHtX"Xچ)w zA,bX"Vb2-'"E,b*V3e$$?1"E,b(V0s;;E,bXLhX"Xta<,*"E,b*V0Y3 ڀ0̀bd,5E,bXU σE,bX T sZeLZdGrt&-MX"U %},ZPʖ;d q2n߮pbX" $V=fm2(p_rok֮ӿoMnwZܾ]ǎGm]T.ʕ WF E,bX*Xrhyjcr騫}s8 ]~խmqaxq-3㒬U=ݬ|La@Na$$ g[ D=gU*#O] t}h{U&M. P)oJ,pq3y grI{VicZ8 $gSLݬ\IHًncvnqtk}$g&=g`3CraHqvI"\gQ*23-Gh3&3gdR཮}0_Wz͜\q]'`fZ**sPR"'OK))--*u\.ŋ(R$MgY$i3-M:}}\R"iJߕL˹M,U&+ժ#-M:yR\TꪀuϹM&[nԫq^Nz0$%tnc5k$k[Hٗ$%%Yw-.s9c.O\\gαvU?&G$ ӧ˯Wg H0D S]B?9 /Tw ѭVd/s^bE+IɨUKСRDUv̲eå+wޑ9#^--Z$K5j6|ǠH"]FzAWٷbJrVnJK.)!<>H1:qwjٵ8ڞ-cܲh}Xv4oNzr8q\|.^+6׵nԼ =u^yO\ Z] \.+;*J޽2jՒ?n%{(\VSKB1S'iG[!m,͚%͙#]vYXyw2vkoSkOkzc }uޚ5[f'ԬiS}"mٸ^=3BK2O[o艡~J-?WۭǾݿrj[3z6]Q?z뼱wUhmA+BɭtaݓXQ2;eDEѽ4e5lX #=v+WN>yu]wKm2MS ]=]]]\+4Vm n:>?-[V'N޽jJ2ͮ\yիů?K"ycn¥7ߴY]ْ͛}=컷 &.[&M&wo76,|ӻh}I>x_ʖ SRSW_jgV}Uo;]VoA oQQZrn3usw:$~D]24ARnlCp-ںUZʞ=[~)9 l~]r%jذL{ޥ{K%JPz ~[_No 1tku=V.ձcTlYo?BBBv+$IvZv6vʻm붜GQ:Q@5JJ:;Lk_2AbNxJʹ|-}EXeKG:q(|~xdQUeŒ}UܔĉJMMMHczoبThuڴո_ё$jo!R%mظ1_>{i̸֭JMMշ[j̸{LNzlwNe4R?1C?o[sC?ޚ݂Nq옌Cv>FhϚ%g5ɓҾ}@fq-8inonJ'3gjԋcdj =wSvNԼy3:O?q-M:5kO=e?^4;O vJGѓGȑ$EFV=wW=&DUW6IMk"?Vq+am;7QEDlޚ! j5!4Ժ}Gm\c݋.]:`Ì6[W9rރ.~|9o'vW%G,Qcs5d֖skK=G^9sksIcFiMr%##޽?عS/[nje0!!V̙ 9#X1'fIV-Yj=I\f/Y94^7BBd+歳|MŊY9_ziĜnmZYiӺ>$&*2zzRa+pϘ̭/^x{]'nsE6عڸ[nI 5.90$g c \dȰV1L+KnYR|33 3pk@cUƁٴp|JdM:*PxGdR9{qJHLTXjѪM^Oi:*Ut|srrCl.s۱MW6KLƀ0JL2BrfQĻ*U~e@LN</WѢEukȐ!?]t´{nIRLL|@[f̘ٳglOIIQt -[LNҲet *555 7mڤ.LSJJkU*S%KW^2 C}ǏW*Uov*Zj׮zK0aBLMMUӦM3~g͚-ZdJVR$IׯWUV-2ahĉU(z(ӓ ,͞=[}$ǧ<|=SYOj޼ ӧ~^xAk֬$mذAG֢Ex!0jܹ2 C]tQbbw_F}֭['+ MlZ|nVI]wݥ Ӓ{~YAڻwoqV>@wy֭[[Sdd$I&2MS'NP"E믿4M5mTLdZj@ȪTwﮢEJʔ)}95rHo^ƍSf2YtիUСCڹs,W^ y|fϞEi̘1>SRRtM7VZ]ve/#G($$D{~nuƟ˖-+Iڹs6lݞ%'=礤$\R'Ov!'OjʕJJJR=4nܸ,饗tm7ŋok͚>}.]ݗ/W_}%4uw˘p'_ݺuSҥ}.]Zݺu￯!CӧݫӧOk޽ztA 2$۷Oz҇~+R ,P޽~o_~ET۶m%~yիWzٳgDZjJ.;xԩJ.+W*,,,SRRt7멧R6RmڴѸqt-(%%ErJ5kLŋuan:p @c&s`qK?Jf:=h߂0A (T^1]c]-%5eKR[5Cݵ|\(Zti.&I~-}|v[ <'%Jjʕy jՊ*UTQU*@b.IG\.$*UT95vT*?i@Va)ðrqx Q*kh90$g&Tb< CBbyO#?%UJ󖛳m ǃTʪeT;z6)dG)U,zU)T֬Zg=ǜmG.Z\w!4,ô mutP~ɧչKWC'h+M IZ}/3 ѣGv>hl'?p\om i[1IxOr]pa`1M7kn~Y1jUGWtλmjtEcun)ӏ^~c5mdUW'MU5ZDժЄISTBEM2%bzvӚSŴ`[ a|/X ̱ܽݧߥ]TJ {K5zZzii6l̒K4SOj{Ejڵ6nѣ+/Za&5KEDz老履xN3gh?W5l{za.mϪUVXzE^#FM۶>͜9SW\q$),Fڴi-3~7N]X]ժUӽǎɓ'&M'Oݻk|9h9O6y}Uvkש_7%UmX^|BCCms<>IErp00Z۟s8p@#yF7l?$נA˕ӱcǼvܩlc}wڵOLӔ9&G!FgHߖq_W7^WKoZZR\N5gh͛i4U0-,,=uvlW fxL~CGkիkj޲U}?.Vݧ^h9Uz*%%E7rk0Ý禳 3 ज़nY3 2m6=P\m?Z׏֚5kѸqc}{9oQӧf1mn{Nh7w^>x=^"9ps`#?ÇA㏻?ĉZ|No5khΜ9JIIVx 6 @ۇ#Ge_ԩo׿wÆ1c܏tJN>իWgϞ&y ӓCi}?ڿ6XRXj5y 4cdzu.G\;G"Ep|EVQ5մY3͜9S{{u_@U}Ϯ.iZG1cU^zvڶiӮfΝ͚+~M?IHL{F;_R]%Juj{D3w--+*\%J[yGӧL ~c&s@p5OEPHYN7rJO.TvYmbpW>EBCt_ 3Jhʖ?< z<q?'MӖ 3ƬJ6I4Tb$$aMGLW}ͭ_$g|>|Q2i9Z~o\.29& r̙4)sYeV*4BBt̙ ֮ iwF9XMRs5lP!!Lۭ;vtH⚶bPG!.18'h=Q"g$gw\sW/͛6vWP(S2*UZUFe[摚oX«aR[nV1G2<4JR)1 ®ZjvWԫEepq0$anmCn:*i sIːLZ4@{FMYI=\Fs`+exƀs6< ϔLele xϙ+hmCiL@LSFn)nt6!JTСFk`C)gYܐk-ߒn%5K -;R`4Z7<^RdqJ~\~K6{[)n1 )9`ts MO>LD,I&IENDB`mathgl-2.4.1/texinfo/udav/udav_prop.png0000664000175000017500000015526313134046534017717 0ustar balakinbalakinPNG  IHDRoyesBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwXTGۇ] A4%hݨ%{ƚKhlXbFT@6,, RgsΜ9sddcRl R=J 7 2D5Le2Z[c,sC@ ˗u׆2xidB2qIiȑ[@ 41rc[2)tm$3(c@=8E$IHL&C&i \)6Mm,RF+;l>/W /1B}L LLx2R$%%d& 5-$\.:P@ БlST2掔kcql \#!"'! %Ƒ*(H)<҈OͽNNd2J # I }bbb/h{oo{Pml[9Ħ0V(ZD.O8#9k!-[']a" DRSS}GF061!%5{i2vxYYsylm055jXe~dbcc+:vqFx>_%==ccc~YFEPp0șN9޺}qꊟߢ;LLMMqqq[׮tԱΨαxPm ed(Jm=\3LM13 'ix f05 ryN'P(G]$ HMI!55#%$d2$"2B`|?ޞKiL{qӱ$==cǏ> #Gh{pFx>+P ~ʗ/ϒKs-8yGSS~oOO>?zWZy,SyYlXV&K%ƑajqN.%,HO,5I#)M$S$)s\|<gڴTLLͰ'.>WݛבdXYa$%&qAjU۫I_L&c… <:DLFV033׷/e˖U协' sss|||HOM)PLLL?awѭkW࿑]|-[$IpsgO_LcFbx NNًm}ul{d2V'LFrSV8]}׵gϞ \zXʖ-'}.yGS͚1g<֭[iӘ;o^l}M Ӕ)ȍ|w!I-aH-'i)I4&&O8v\ALɘ=&&O06%2Yj'T*yFIN'55E둜@ 'O̗<:M%rY*r^bdʕCqw޽̙cl c% @p q/055%9)TS$$cnfN81E+ȁ5j_Mу|CvU*t u߻v놲5 @Ŋr4uv6V{W5:ݶ}$q&%ϘoA$ؙ QQc`-[P((Rxˆ#ر7>e]˺>&=_LJM[jM&65!>oixS|lo޼1G"6VUYzRS^.Y پ}'6l,-ʘy6/3Nyvle8P"! 'ƍ/3eA&M¿.Y5KD&KA&K"cm.SiH@jJ2i9GǏGo$JZ)S2ccc9}4ʗ˓Ą{{S|yN>͵:UV%n޼7n$$$URí: }qO~DEEjjz#ƺ,)٦@7C&--M޽{9ldMggc@HH*>3χ￟#ǏuIWt-#F`ffFŊ[׃~^ef˗`ivG"uiS53z4Ə)?0w<ϋl9rWvzVZ|SC eY7i®;hۮrDL3IfI/ή))tM4^V4kz#Irdvd$HOKC/]{IKr)))}%A@.T*Q(3WcgkŽ;Fzz:OҮ]y;ORb"!,#xxxF|#S_2;Z3SSTimË1j93ئ$~Xf_hZ})]œ'O&88`fϚw{U6D=}jWӦf26Wa 7W7W~ݰȧd;=55SZUܿ36o}l[$-[.s5#G um =])CLs)K=о66ܾ_{S}lm̑$\-c^Ɯ'OceU4[7O651'1Xk?/(ATpq!<,\\\T\*Vj#s>^-:tLTgxXm۴毿~d2ڷm'O䣏zpIh׮-HyC~/y$2cI|3bu瑝:\xԪU oQnҽU-U|=OOΟ;ݿѼY3kI&i ώe)Ә8i"eINI=rDwAtC1.ڦjBڃTV eEj[3k{o37 \.gDEEͺ 4(G6l8&&&]wNTTGcܸ: GLkYO`o;t1\Ay֦:ېW/b .׮G<+a}5_Crum{{{mNRxtgl۾-[˶uWU x|48::`iiFRR>%ije56. #e:vʵ@x[YkQtA3gټq#11 j֪EzӢy3?77011Ύ:o//"gܯ=g.'Odԭsӂn3axZn͸p?^-JXx15W+suY-KHhq $N:5U+fc]09z4'1!#] ^%t?Ο'!![[[4h@z`էk7o`ȧpO4SmlR WEN269c$OD&ϸ,)MQ(-P*8r,.bee_;iBZ'˗Q| f<}Z[V.ĪY@Gvo٦鶳v:$c J 4d2 !IH dL66V֦Z;L RE,--x)QrHX,+F@PL3 C@ $Rti^zs^x- {ӼYӂ(rq͜EDD])bAID)Izu$$$G}_Z 2ާi;cҷѵK}7ΞB  6нOO|3o> ֵ+a'@PGRb"3gΤaÆS|yuUir[R&/Wv---sӫ~^1hZ[7cgk d"XiAx{y#!MIIkwqwwgïJRRΟg劕t%xP4nT(Ѧ̰=} ʽaf~G!4-eMrJ gǷ*.L.s{}w&t܅vQBdϫй ^ ӥ{lڲ5u׮1Y/u#YO?i27n,TADjǎ;1rDy6'sDJcǪ_> П۷nru*TƁ`˗-%A0`g6ms!A0~ə3,[1>!y d߾̙;E yߢ̚=ov:Hʗ/gN.]([RV3?U\u0n,kׯWKéR2eʔqL8_6l,PW]LjN찷n]jPV][$> MQXPP5jhe=VXO+ʔٹӦO4'OeKLM([֊ɓ's|[Yh޼eXмy fϚ̙Xx1M7̜jժo16n/aV̚5實k5N_2:MPwh._ᗯ\][_F p={/G^o/OB>\u6m۴חnOx#Z=+eYE=L@LL{hh(ק5kժ/oߦiӦji6m7ر#N8:9Hzy0O~w-7W k٢w͗y]?}|RŠ@<}A*԰ƴ?}.rv>r@K4ּ|RWuٳs;8H|śSnܻwƍi+i^6lp5jqrrBPPReW7tBiD;M7t`Ni#Xs_[xYKKQwn\.{'ZX88#<&&GG"I otbgNӳ/_̨(W/8iO">>ӧO1id>,_VXt4H5Я/ü|^_Lf\td=zB>7}9e+Wg>bccIJJs 6<߶*WĉP,@/ ?@<t+A&&&ڹ ۯ?]hа!+V_h kٱs'5kѷo?jо=Ç eԬUQF1p@LLLTi|Zdݚl۶ Q -bAyn4{ΝW3b15;tȗ-ƏR*+_ 2i>ZwNݤ*Wvz._‹/Uc5oM[qf?ёA@(EOoUɝ;wY؟K/HO˓+ָSO3}lP(ZcYz5@ |9h m}}u:'C|%NP(EJx"|͉122bϮ]ist!FNl8`:M@ S_ž1rC~I*UscO!C5122={43VMD)el^iӒÆJŊի'+~gEG'^ &I2|¦sw" 54b@ 0Mz^c٫@ 1+ _\.'=]旌4kԭW##IaT*~:VzxG Aij*pY?׼YploWH ժU+j: @ i @#@ ҫ@GD)z5H 'HS yi CO^civ")[ A OcjjJ ݫ˧3o> ΡWQ"o,uiii͟OJOH ,_s:Mv?˳7Wӳ-:t0SWꘚbogGNet>FMN7VJ:ު#kxvft. n}V7} FMhߩ3ڭ}N:u}emW0# IDAT/6Nxx 4_Ox5lLOzr_RëS@ nҠ#2t ,ɓS-"#:crApg^ӦQ67nbD58q)SӤq#lJ>}=W1kTzxpM&LGGڶiÞ`PByƌG0)S weut)G傘}1h!0|HF36s5tr8177JLq nL8ƍbaaAƍ4~L5Qٿ__>A_LYHLLTZ%<Q. @PȘsCCiVLFjJ ʕSǷ2h*MMYpV`HJ%^^ 8@1it7i܈IƳߟ`r U|xMǏA4'}&{dU\~2ehԨ! 3OA+|"RFG)h9W2c g:NIÈrG6\͘; @2@ E~ˉk=M1@GD)dt@ ҆L, dtR\$A, _4CHHH :8:9beYJ*NH %AA`aaC QX+U/t$%AAMGлLO_Ӻ{5^H+BK@BhJHhUKsБ - t GH|A'&'Cxü0t/f/%Y0(nZ27iP ]uƠ'RYL$)6 #}+$JN};M)#A#M$K*Oo*ȳH_ C$$$ݒDiқNGAfqU\rr2عs'<ԔF1tPt.ZYWnс.d/%%%Kغu+Ӳ%C _=#RԤ˗/'0o4hPQW`;HHrZO)))t.l\]]IJJ\Ν:K3%\NjZ*7JjՈĉ̚=6mZHq/_kLKY 6+Vжo9(v렣HȎ@RBYd_#K,fZ`eeMرcZk֬{G_~-[6s4iڄq'l ӦMc9<fo;9xE~Λ7iS"8>'OT(;v,$y cT$)o_7o?(kBG]볰/*9+;s-'z8p:g0]_8x |RB؏ )*=-N2?/_ 7p~\Uy 5b۶mj޽.]:S[r $IɃر'O#IJ.]=*Gto ȑ#̞=K ybE̛?Md>ZwNU&Ea$)t6pi> e!W/v0(̈gTpq[晾s.|Wt}UҥK9O;{wwwbccqusVA>￧ʗǏ{?}84Q4oޜJyVZ|- E.mfZ_:;us~F͚5A4h###UZMd'ИNڭ#N:_Ewtl` :v$((cҨqc< F9SoߦiӦji6mfPZTP:hӺ57n9&h <$I< AR*Ui۶-HիF$9,]}6͚5S kѼy՛^U 4Y_nܻwO򴅿Ϝa䉏+D<}BdS"#$2Zz,ٵ7UiѲ%˖/+zԵ>bzuO1k ;Inh:l(H[Я?U\͹x"\rɓ&HDSn޼IMJ 4)MO~}9s&Pmj3ԬYS4b'OsƤM~6ߪ @hh(ڷgye:*/:җ׷-OZO*k[oEst|mUss}z0RY7>#wo@6knTΝ;O=Ze̜:̜9ƍfͦQF֮]3gԱZi |P3c!;$_/!ѣ{)rQzJ7/8iO">>ӧO1id>,_`3n7L1۶󌄄xNW^5XbEP(Ua>NBB/N:?7-5(AE%n_'(/2:gLPNJG O{ikkKz-\Nz;ܷ1:В EGлӴkԭW##6RJ%ׯ]:4BG]ZH:VZΟ;z; (beeM*sM#t$%AAr 67V!@HPp- 9 J yO@ tDt@ ao9MU7)F@ AgCHHH :*",KJL't$ІВ UGywyK:t=d@¨\I분"$(Hzw Q'>[w\ㅎ"$(H2=ޕR/ЁhUKsБ - t+^f= ;E+ҙ埘\@4ԑPɠj̠)@ }ZHR*4BFt &J~^3zv2h'η[ZZ+"ϒΝ;;v,*lݺoϟ$MV-6(/-+PWi%W]v{%3fӧ/_ݻ3iDeqqyFPJGYɬӔ,a֭bjjO˖ 2__|ox{{ۻW-,kR+keEÆ 9~r#'KFϑf洮A#M įT?1)N;;Sre=z ܥ3L2z$L%]G>ԴT6njժlj'5{6mڴΗͰp<ծ7JSTKYƺuׯo^/t喔"> %ӎ"?\\*tWw؄]YOX_چ5k]{Gyza&x+kՑ5k卽#^ެ[^-چm۶ҧNθ`ADG?S?={Q G'|Zfߊ^2I:*j qw)tޝ?CN55B¬mHHLO+֭E6Һ/ I~Zəz^̞=Դ⬥ԩSYp!QQ9ȯVZMz88:ѬYsΞ=[grtԙBȫ]7;y+Yf|׼ӵ+kVIq;vT!ʜ8q"Ϝ&>>ӧO1idF|*MŊ @Hm_2q$N>fӞIH'>>G@:*j HCݻwg{ 550N;wc9u$C Qך>|5b+W,n]֬^ň#y0qcalݶg$$sDz*1:*Z*(d_{{;Ɣ颡'vM-i*8K'i?=Ta3/cn]1Cpvvn]ٵs'fj=p\\\1mJw2nxQ(<}V^Νd1SREF:zfxXȏK.aiiIfybS///:}Ѭ]cǑK t-cU43MЮ}^|I55rC q 4]Ma |E_>  )4lЀɓ&ѷo?ukV3o&LRa9JY/6o٢tO~5-jIS9I_DѺsR&UOt Aʊ-aR&bddĞ]hRc|qQQhH\*Bc@H 3rdGb%_ut{Ij[1tȉ4RlX_BWtdKUK%ߒ' iJoId(CB ʯ!!E~%IuEx=BCS\РHtQ^ޛV A- H֖t C)大+5Б@.:҆ޝׯ]nADTrusM#t$%AAwYjBBB8,ϟ퀠bgg5UT5Б@.: IDAT҈DlnPZ5C БZ60?@ 4!T{֊@ tDt@ 4@ i @#;Im FBBQꔠt䈕eY*U-BGm- ]uWݤޏa^ƒ;kBp2 GaaT[BG]Zt ;̈́ڿQ(֭ػgwBG]Zt ;hZ4  В KG0hG xOQ0|A'&O, Oy!:E#i)y$hASR'UG4T@ A-5@K@h!$(4 %JI*oK="ϒ#]K$$$7ְq{JJeXﯗ?ŋԨQ+V5~]uUKKKGr IZJ9s& 6ޞӭ[7Z}=FR]M7h.[С_M};~aÆr ڶ-WL%YG^q/__YuoRRR]/ĹYb%;u,E9AGy!!樤Pa(Ym]z K KzȸzZF2ímQi֬Y7xzynyL?N6mT-}ptrg!55;wRf-lSՍgb~2I*JJS9Y祍Gpᮖ n:zӴ'GG.YB͚066ʚ;cU:mmSg%KVmmls|צ춶mNKV8:9VL-OnZ+j #M^MJCjkMIRٸiSrA> y$%eܹ-Zȃ -d8?˗a؏*>l ӦMc9<fo;9xE~pw۶mSk]t[["#]몸%k6mT֖7o IJ<fǎ'OT(;vNZ+)z2, RRR [n(=>}HIIU++7J gǧb֬Y,\䧖ou0۷m:/Ǚ3gxb4n9ժUgb6m܄R)1l0P(Uy6o,> RKv9MEm۶Q*%s?2CTJ:|vڽQ:zD :-`鸸T=/;lXV)cs9MαuZq8 AAzR(Cɴs!:w $accCM9tZYW{Ѣys-Zp]|mZƍ8p 7nбcGqtrё!$ѢE ,,,8x $ $IãH'?uUg9MEm۶% Iؿ?zHđ#G}tiIԨQ#n+&YkwdlB( 2޼e3d…jIt9GLJepM"5:ݑ;wO>%))=zv ʕ?:ud-߯ԋ.,:;.@@EE X0 D7T (H@ST[1*IMQD74~'W ޡnwvٹݝ21fh[eeOpGFa xܼycƌ~gnA?%mmRQ 3|cښmk׮(+{S~aa76:ի:4C AFF&ϲ :թG ) oMLLpBbLGHNNF}}wٺk4TUU"== ^ظa=~44h qADFÆmܽ?Q]]d,Z\V 0Jr^Z}OL+y(T8mwaIpؘPxxxf[6onB݋%)wa:,.AߥLۆ-0i8l6&Ml'LhU܎w- >$ΟPSS9V\M䷩y>@^zSUzA۴|رښ0iG°ds[997LMKLJs栾6tOTۯ~JF(_/_ƹspAyCYY1~XݎwtmiKڎіz#K{("vOPk#ͷœ'Ogۯw蠽SvP["!fCbANŜ`wK /ѳW// 8sMԖl0iG -'$'WH▵q8J ﭓc+-)z;G[z@G&Lڑ0 hy1-Y}p|I.]PWW6'|())]va&H@Mbljki# een$o'6"hki LC0Amv$Gp}\‹@^]v6a&H_ @%֚=FmB!4tBaӤLB!DyHBa:MB!NB!5tI!0iJ`hl*6W&bD:/0v"O^B-,rZUUzzaTvYu55F*,&ސݷf&R票BDdD Gw(Β*,4 /{TZ S7ZV, „ibK?x-0z-njŦxQ0'dQ)1wBZZc${y\Ʀ`02188̜csK8̜[m1LwbKbR_SKk8pDDd{d966 g ,iz6ZYKb*.~[bDXXN/B w] 4>wlp/_•Kg!T56Wd$!qpl [V|._d&c" 19gۤd|M,nv]ྈ%zOOd *"ygdt4~8LՕL&1nw9.;ܬ xK$i8,QDz>2w6VPWS&6o܈tyݳ6@]]xmGzfXbbc6ԩlx;2%U,_L~VЀ%y(IL1a*F7{ZBOW^6kWJK#8$yy($vС[YZMLbZp[{)035Q#!miJ~ӄ^>>016;twG]]̬lD)Ñ%iDRS[^RIL[7oŒӐĤ އ]l7)!/m;ݸիVgPVVFэ<땕Qf˼A 7/gYNn( GjbX淎moSB !gkgWWUcTp84g8Mގi4t!gOÆ_l^UiB/MN#iNB)Mlbh㑶7$CLj_ަ:!á(&ig%ܳ׮]SPxgm]=}a%K~Hɓ裏dbBFzbm~pѳbI7g:uD_߽͗{gF= ?~'}}}()ۼ9CUUFTTT4gϞ%a``h?}wΝ;cΜ9xL/annuuuK.nΞ= 333cРA@]]X && * #GȼNbBMM ķ~CBCC&Lͨ^⾘7DFFb< UX;$-q%֋#c%ټBaddݷ0ٯ|qP-׍=KKK6%%%8q"Ob۶m5k7ӧ1{l)/^@nZ-8p ^x^Z;&=aёܹsx 07Դt,pZs0ADSRRXC%JUNISNd$֯_333Y| ?~*Mӏ'Ӳ~w,í[ 0i$q=xsE=bйsg ~|ѣB&145 :t2{ ƍ?~^_ҐٯݻwGYYϲ挍}v(S4‚g_|eee[npuu7O7"00:::0`._j)={6<==rJt+WĎ;xСCFaoo;;;h;v ]vŜ9svZwaCɓ'#>>000.*4ӧcǎX|9uUVˋ'u{U۷k׮X8::K.E׮]͛7< !DR$|wb͋8[/99Oi5=g˗nmh o,&-ak{233gy{Ҿ=9]x)++t|gG>͑f\\;M&bBFzZt)nܸdggc͚5pvvny!ivdYL(Z<3ROSLݻZ]y9 XRV[BdaٲeXl Gi5%:MBidp;G,G hutu*Bp~gt邺z,J!%%%գk.bo4_#MNHIJ„fiBDhu^[K EH(+Uo%6"hkiKGC))^}q'GfBaNGWZзooi /*#uZZO_Ii7=ڄBތ;wN4i!"qr1:N!0D&!uBCiB! )'B!9~HBaahl*6W&bDےY/r l'/=!%Ց)eji7d?Bŭ䧈 Mc띖|,V}JSl6qXllƌ%&N nȾvM2;dC聃{!DzR?G_!x_쇏1&o?pop_MDEm+2R88l6-e>pUGFa2SaG̳mRr2&7.nw9.;ܬ xK ppvxz"+-QGt o$(}\;]v0mTmUϞ* IDATgg jJ0iCa Oa K 0NE BH$NիWsxz~d@B X[A]M Zؼq#REwnX[CCC=tucOX[SN;[ym^/vŘ0PQQ{#G`~/fPWWG~gĎEII V֭Y %%ޯ1d`Hw(m[TT OR_l:^zaT{](-} ~zСQ?`{<˛5M|!im_7zJ(qg2[tB0h,AʧK(//YvΝV  p`>auF#p51QrEj?7n[`?e 4mU3g }%-TX Omi70Sx%n޺?MZ+-C`P䢦rr;88+ h>=}Zd_ˁ7O둑Z -=7[_PQQZdegc emW/Y*YrrQUUzSKۢ1NE BH$5Mavw'BNw8/[#1n.@<~l2y?(--E޽mmAB0 Az*yxr,Y#QQ(,aiiА}llpPED?p78l6LLzJ mU***8z$#_:em?wIYۢ1NE BHĚqPT)!ҞC #:">K!(rB!:MB!NC'h !~&1ixOGBC O9p!B^#MB!!5MB![N!H5^qI 3YC!<.aCMGՁV'MG<;M@CCV6%.B&^-X(R}]_\R0e4UX,qGp>S !đ&ǹӧd2+]1nx= #t!fndӧO1|P={&Ӳ%Ϟ> h6}4!k8tdLUy i%xiRB8z9wM$4Y^$[VG ˢNS<'5MB!ёlC=ӑ&!ȐFD=FϊA C&!ȐF*18ashԫ0iB ȏYWMGblvviB ;򋉉Ann.666Φ#M H*Bd˗'OCXt)m YI^_BS-_nۡ_]`z&]mK/U:=K!2$ti@@\]]Zepg#i Rި١!io$t0]V@={?&GS?IG"C܀trYM -cYԫ0D!"ipdVJ"과08Ќ@"{f{ #MB!!#M&eɮwza =/!f(1OFϊIE#ٓhV&(vC&iJpx#U6}JJJ4]tA]]=t]zڵK;V'M$'%N,!䭣,Dkl6EE)0 12)]TZYizrtx<,)Auu >}*qBxuuUuƋo(k.҆A?}g) GsIwMSo_aCɆB/9tLO!0iҐeB!/?tI!04Ln@O:!B#MB!!TWWgՁV'MG< FH(.)zN2uC!&'aI Ix F3Iۨd4?&!D!0gO']Ӹ:=KԳgd2'!ʳπa$ږ:MFp 0$mfSIQ i*+W'O<y#7lGfNP]]8BҎi=+;7d?B텙LVr[n>lfLNS|s;|~nބ,| [7o1[/#MM--*+' N rx8i !G4=*-\ch@_zϟ"|ͷ8},:UUUng1n9iJH抌ѳ6i۔g+K[%ݜ>m6#uFش/*^?/&υ;w fg8#k\T,LĤ$̙pለ( ,fČ''0s-0sNo]0F&f|󖄊 z86;訁۷fΘkZWEE8cȲ9l-^Z-kO`큁c*<{'W_h{]&f Zڝ|ݻi :7~NlǤ|zы^aKw͞rpZ/ʥ_гG|~O#QQp抌$ğ<=I):JK"e r0DVZ "‘e6*,྿|*#냰#HLN6)9]{_PVVƆupe gi|ٳp,z't&gS@CCCdyKiBBB Ԕd}vn//P_bFܜk(yX VK2<^B {u55l޸fIwndr xmㇳc,-Ve r N?42~XJ\(X􀍵5*mm<ܶCOX(ÆPWWlls5s>h>:ty+}T|vbTV_x-uڍoϹ#""`lpcG b< =0zavgb' !\lllY#ݿj|xPV=ޯa#agg={"|B,_Y٘jo]}նޏ>#cXq +Rިfgx|7o݂y|b9v#/?`4cGA}({Ⱦw/obaRΆukq8}***P[[lYX AA\`|Bzq^JTVV"=#{|Ó2\|V8>^[ <&hjvAlmh L.֋Za:xyy!33ŪOA:-DRR"PUU+W`bO/zK1^`,GnUX]~݉˖!EG$eeOѻ.Y4ޞ9GeU իVÓFT,LecC","aabbի )'ۉRk\\x11a*q8,߿SW&MߏuÆi̘6 , gO3wl.Xrl7?x'L<Xa<}Ū` 8|t GBF!ФO)c͋欴Co * 3_?#]]jZ:>3Gm!//[]?EJr+>(++t|<Əxz(T X 8;iI[, r0{dsVY]%KjZ:uuBܡΟ=#ڗ0g[i!țE/c:M:EdK.j5!IJJJG׮]ڮY:$mJ[K EH(+m"FQantniJ,kB30Zv^!]@KK鋵]نyH #El=OByLw@ܳB@(@&!XCIgg !X,0`4 !:5墸xC!8]hv҄~>m?uk $r"'%%訡 +@Qa!@o_Km(i۹?mU]] 3!\vv;!|E"m;krB"jvIm(i$uBC4#!"RC?IG|;B! dI\dӧXz5}}}ӧ8rUUUXXX… 4։i'ezӅ;dL?׭G\| ҒafjA[? x\={q'% h4v#+-~~)3zOOd *"yv7X¹3ʀ7.^7W辽7vTx!l-MMl޸1_VЀ==x2<;`nf uuu~?}F`1a*F"/7/_"t^ȑ#v Gdz" =^ ރmnȿ^wO/E]]?q=cǎ2d+njDQ5N'@}wYee%sic ///^^޽ s32,x?߾}Nh8zp8p8PR 0wO ƌ ]]va$Ul۶ ݺu͛71p@_زe mq"OX K@辽024;z:u 'OĠAm!!!m5!c5ܳ,>p-kccxyC{wF2kjkqK";nބӧ!=#I)kW`%|?} [>݆=ճ?͛ӧa"a###|022vzǏ1x`v?F^!DˡHVmҒiR['JݸիVgPVVFэ< s:h؜\MLaCy2ؿq@XxtXi>ݺ#o^[RsM@]]y8 L70Sx%n޺?XAGmm-yukq8}***P[[lY/xBmm-jjj~|nt;f!l'^3gq-|nŠ+0gn͛7#00?3_ Ė-[JC$sg ƈq t?}>֭[Ҫ7:QTr}4X.?D聃eجS2{y)z%zH(<a  c^R`K9HT n@cGXZZ 4dߴiHȀnMrJR>?Ν;R̓/7͘1c[޽{4h9"M[\gLMe36mu ׯܹ===,^>>>4։b͋欲 = (G 3_?ӾgHMKua?nbN肨NJ?#7{/_DaQv`!wPY}QKJл͝;,B!~R4YYBi8=+ !SӜ Mm#dh։MR)'4$0JNLV'-Km(iy@Òǝy@-󼩭E!i;oG*@~߾ o o 1jm0HȤBȻD!:MB!!>Bi= B 4!"4 !:M]$BOґ&!Pqr16}UUUbmW! $F f:şKZ[ d,%ɣޯ\MD NOQI?-[1v"L,'|b&;ĬUƦ8q2 G$9wZKs͆Yv%nQD;bfN G[b,8dze3_SKkw/oTD)O'y Y8-;{6M*,._d&c" 19g.\DDad&cqXn=3S v8-\˗p/٣>?pHh,%?׮AFJb(~C8w'\'=Ea'R|{>x_A^~>BDDFPWSmtL }EP=2)%n07Džsg_o\tIX7ueDFGYi)aaH/-IҮ$QGlZF" `Nd`/=*#QQp抌$ğ<=&% h4v7Ի"E!Q[NꐕSf͜_\A]]yblѩS'X[_+PYY v,w6VPWS&6o܈tq;l'@CC#(0@W,[oivgɉo/fPWWG~g !{ А衫+r[()&eB[[***xoH /VnۡK`ޞ,HBKҶ+yڟ;{dT4<[Ց0{속5444CWnۑ]5O[YZӃ>".yurJ*&AEE 33$bR׽aei;|x ߟ^[[J A^^>_(+1;;^,-бcG$%'c *0K4ݿÁRc9X K@辽024d-}[Zp[{)035Q#V ܜ糕Ev& `^?9&Dݻ|HaCynnPQRßwœ̈́Ka:̈́3gp51_/kvl6[f1{t{^uuu0a\bLjD;;9{.WyJJJۊG~|LniM1}32=v -]8֦?ڒ `^?Qs$}LBi _@NN.e\\_]tFyy9϶RVVF}A 7/gYNn(UE7nb٣QtX6tsr$_{{\/ Yٰ2Y`Z#(p}jZOƉ?GZFm(wʤl e8Ʊ2ߺ Emm-˛gzz9ZYlp-'555yTq70Sx%n޺?_binݚ5)iAqCxx` Xx1{EVv6֬߀%%B1bpoϸ#mt%NݒBmm-jjj~ce"pOrrxڙJgҒ߻G&Džؽ'UI˱;(yE^~>π=Bdd͋欶/ : n`by`VgϛO?QOAefecH8ytTVUaРp^nQ^}CcԳOWߠ{J7w~Z݉?ޅNw8/[`WXsf(aTWWv=~w.{CXD nf+}~?x{Μ;oobwիVbR>J2)4DĠ4:vꊾ}0UT{046on; k\Vq/͉KS?LfiFԿ#QDDFIYzփe`Ԯud"QV{aBoyҝ9 ꠄ'J]X1:M"{I)xLFfh7Q[!v|gD'&D杦q{kJVӧ! RޡF{yc ?;x ;ͮahl;"t^SF5 <{aܹXx"oӳVzɮ,!.:#2ŸBiz !HBaytI! MSё&!uBCiB! QI!04=3B!4=[4 !&7LB!Dn4 !$Bj|4g}UUUbm]!"_ Ӭ´bmsY C^ޞBewйsgYCcS{UUUiSedVgʤl ! uMVanZFBCzAwX2G!O; ^1|8v+|[\ax[XM[]񢢂'MbR-\SKkLvS ϙpለ( 6 a#-1qNYtTM&'Na,[a,<*oaLĮ#aeSN443p欀Z%O*ԑ&?7nt;.@Kr8] ?_)IBN^w}:JKATD8#0&ۤed ,vDVZ vѣ|k:l:n|UGFa2SaG̳}Rr2&7.v *[EFGYi)aaHX|>2o45yFs;l'@CC#(0p􃹙)ѯ>w!q1&2*^,.blѩS'X[_vnۡK`>HRLhU @@tOEEz´Xڅo A^^>_(+;Xwx JJ`͟wܜg;+K ;_n%v,8`|DՑǯZ!D:Mqx^uuu0WSW}Mm-z :dmAEEEzQuD!D< nU+ѳG(++ ÆAvN GjbXe2f!Y' 5z6g٠::W,WCk!D9QkL70Sx%n޺?֬HIMCMM {wukq8}***P[[lYA`LY Y1|*++*h all _x+խΚA(..!U6BH{P`! UP9\;#l7G; BuPEJ*cG{B!MX \ ۤғ!B/}c/"%h$BABaMB!!By4I!0D&! BC4hB! ?M|6!XtG B!D.?9&B BSàI'5 !Ii*<;wZe`f[* !ת~>.jx+We.|[aGXfKZ'F.QxOttt IPBȫCB4)%!uv|'Ns8s9fN|Jdp+\ODʜ> cacρq8~:hT\Hh|<l=yV6lkWƾֻxr8sHKNU+qe8ÂHơĈ#z:< $"xM"!1 =,_s03qED`HƩ ~&,+0gdCCCCh[/QV^Gn]ah`Т,$w&ۀ~km7_4>prѹsg8qX9}8P ]_ .!A8A#:r'EEmmmav6}XC^z"d:˗Pb+Wi &}&BSSzz_ I{&vlW^Sg"e\] x@l|<\\$ߚeed`oɑ&{Cnnp]8rDq9Gj{ʆ +*?^$FyOOFP:D; pr035:_\N7o!u&8"w4 dcֶv6),A% ~0J\|\]%ߚeed`oɑ櫿a~sU?8tdo<}%;zDTt,}88"I]]f 555}TTp@nVg"?; Y2sPYYܼ||Bg7o‘Ñ5]m@9BP7}L!2-5-} _a90ׇ*rrsE[#-e Y,-,0ktܶ'а&̑Hd޷𵪪/2LLVq5*JjuuuXZZbPرmѣGXZZ`OhضPe5d`om#!kӱ>$RPSSkiذifϚ),'~>Z#(X3a&Đg$&%㡦 01%/6lFl\ךea 0ʑ5ܠ}-[f§>zNJ̘Qg9{G(4hw4mkxm߯fäW/5ָ^^ΓiWWBSC, "%}lƿFOqs8T;~[G|0cd]saOg?.s}|x)/-Ɠ*4oCTt4> 6^iFŹs.GdzMM ==_/l䩸xW9<~.CQHZ q'O0i2.k'4 I6Ƽl118a]T81  ߇uk 9>kWƾdƖBGG7ov CK#16N/XD8 UP<(o:0c8l11Xly/`oFvnܱ G|SR0j1ە+xEc:|+spr[zLM9fٳg&PdZzFuzN袥q ~>ի'B֯kUӧ!hr3gbԩb/*(hkkCMM  ۷1acq&2R$H?7, k`odž:z5A8uFtV#:rME2/aoi¯EeŖ: )9p5*, qqxHlBSSzz_ IȺr8` }SQQ==ӛi~cPܶӑ1t.Xhzz(/+Z?!ժ )&6CBMM ;;a0Vž}.9"Ӹfڻb={L6m݊ HUC JH|G444CCS&cǓ1rرm2zzr5QZV}}MdGP}65]We 1ƹb-+mGw ?QQ񈍏 ".>Hl6ӽ{wTU<#f4q IDAT?`o'RNusiI;gwN;uǍEݱiVx *>B~d^C5OGFjTjyRM>AڍV ۣ^x;G'uRW:_3g|cPD=)%]՗`<Lt:vQF"9̙s(W,2+C[ ̽544ǖ8r8Dee%r}f***Px&9ur=]]Wcgk" ovqx'HMMõs&ݵ?~,lA UUU5H"-=CdZjZ:1kU9y7w fSҔ9RRS/ȑ()-Afu$`R[ZX`֌عm N asq<{p&ƿVq5*QMe\W}*"ۀ+\le~aii{CaǶE=`ii=a`B]7i9]ԟ YJ7/aƺ؄H.~hiuCp/τlނrx<\K_Je,:st 4Zj6lڄٳf*&&8)"/?AD˥}}1d3bQSS_8$O2..PUUXg$&%㡦 01ysY9@ G-|>vރ3gϡ <))]Pj7 5-]d]yuE* ("qΞ 7h,LWg3!d32񐞑!r8or_"Z*x<UW#*:+1ٺo:]vL;zH|8~y \UULh [1o\K//&1||fƪ5prUAk#(4!C1k4S}r8l۱'2}v؎ȳg1=}0O4w,`~ |}ڪlHnnU6߬YysȌdc[}qsχ\hn̙5~+:+YOy8Ԩ#pz6ݿϸ)&!l>ƌ}V e޻\>Um"DLJR  9Nlfb|78vG 'BtL,.],r5.!m-z6Y% 223w]t=6ꠂrV5{V 8vG!m;݅}a{_w*-sfDw[&x&|e|Vz V>夷I/م+geÆo,G(AX>>8~"t~;!A%e6j#Ņ@Bț@h_O9!BsC{BC4hB! ѠI!0D&!PIWB!ѽg !7 BC4hB!PB!o4 !h$BRywCuu\hii̴B!S845f\\p^D?u&HЭ2c?!z6x`Aw%$AOYZH,Ӟ'^y4-Cۖ:{{:::R?:tXO_UU:uB7zɵ#Y9p:BGם[ŋ:ܼ"W$füo~ڎ"U< xͷ-imk<RxOg"??̓+sT>~n"9H7EMM }լ?ѣGwhii ҥ w?==Oxwil[MffII ⠭{ë@SC#w[!߆\TT>ƿ mm0GwWj壬>zۡSǎn߽[PSÃYI/?*An 444`j --bat㿓&|(G%ȻQuNMʡE/(ǃ,[ʶ[H˵W1RR |y"F  v r-<`h;ؤܽ7朞%CQ z6yc+Ҷc2Y'z44l7oǃYìwoR\l- nW.ZZسQ]7ݺΝ51[R}L߷LS\mu)mL63#&?<,. VԸkˣ26ږHSNc-6yX, ꇴ,TҵT|蠪OQPxK%\N|@Nn8v7 o‰cn]*\KO: [WQY|سmѭkWxȸ~7oOJVNJJ=})oPRZ6kgsŏahjjUSC;vӿ6o6OSǎS~a!mmн[7"z69rs))›œTU!%-ClF`VmJ\kfEse! zem@CLM&q%lyE% og\}FZ&KX@]۷ol6fΜGI=\ }(1zC}=7ЬAVv.++shnzH[_US\4<픕Sӧӕ"9Fn uW^^mmm K(;v(Ck۔>VI֥C2˄CĵM\/^@|R2lX[ז?=ds;n }urrĈ&LJ@s|><^-Yx-?6! eex/^@Ii)4袥;O"FlWTŋ(+@fvċ CN ܻ_/^ԡqI'+'~G%xFJˋvɡ2Ŵ>޻#C޻C}30oȹ/^ԡץlldK-#M)MMM|fxg\XKYga.{VbR>2sŋu(+~}\ŭKYۇe䭗4YZ&.Ĕkmb# ?%dmKW |(--@tDW53i 7tPU./s푖wלtagkae|Er020U?K\K|AP\<5\chh\H cCCxHIKGmC}zne}Y9xV]-񐾬6ڦlZ#=+ 55<Lųgx \kc#>EZF6YSV,xŤn{[df(VHNMx1Uܺ}[Fzey_ֵtYZ9blXS@XdicoZ{8vG!D)igaΝQ/gfLʍ'H_{& {g1םFɣ=(voiw!DY |- Κ03 >f;-Bڔ#)R{ɣ=h'޳Vo^nrB!A ?K!񚌏I!0D&! BC4hB! @?BycX,8I{BC&܄B/I!0T?h9MB!D"VIM$BABa)' \t=TWW˵L{_!(hjx+2.W:a#?;erڥxixb9ё:;vDǎeƲaKG6=qMBK.̙3Y>hțJֶK6!o67(% m0DUU̽p+\O'Nk8s9z,NGZoTt4&L 6 c?uuu󾞝 #ǥƻs.Gd{[1\d {Tc:fN|Jdy+6p#=amk'~L$uZd>\w8F7`Ⱥ㽱 Θ)2w+tiim ,Y:sJ/"˗.Fbl4N87 /Z SLFq0ǎDb?xAAHE EBb22kO(W@r|,"Ð1(|d6o܈)&Igfj +8wH_/076n޺x!.re|t߯\E] Iq1XzB!*&F$~tL ~y3 ߇uk 9>kWƾDYl9˹H%'bt~CP:,h@jzp>\/r {!08y41QcbC&e󳳄Mɚ/O[em널WAuu5q5ŋqEp\x{{3yo6o'.ӃeHHJ?}8P ]_ .!A$p8@SS\G٠hoXގ uuukpL1;'#x3OǡC xYL:삤ըhX,b"\\'.;w~8| GD }"xy60p|}ľ~>ի'B֯;5W3k&={oEgd,7SL*k[':äRia8q"~',^sN0ߙerBuQUT6m݊ <~,kGWS?~\ @ lްp$&%OdO[Vj{dLx2F;-\9COOWb‰˕8i{ -vڳgDy[L*k['zJ4===ѷo_9s(((7^U`kc?/^Ijx<\AG?;L &W3>C1t("Ϟ"qQYYܼ|l߲'| ޼ GG6n+ɢXlܴ`Ė冷.w^;*#%M)ۂ2jBrHEE .D]]n (!=a90ׇ*rrs[Iy}ƳꏫQQru | /.sH 3:SR0rˋaii{CaǶE=`ii=a`Bi-ڷ-Qs5c:vnۂ~BhXĘHIM8_\PVUUEl+!m44Si_eg̘!ҥKѳgOeKojkku-ʬԴtZj6l9[|ܽgΞCUUx<SR`\X[uNէL⩪O>@@UUU$3N:n{pi9}:ևZjH[gϚ)5ﹳgbM-) '$ĤĘbcfţEE2չ2mldd% e[ !mpx:::r g)C ۺAXz =0ktov5Y:024__7 vlGhx8oχ ͝(>}}>׳g3k&xMbG[tsq;1ح>!nnؼu\1|*++*h all _xKy|}" pJ`llys|="" M p8ؾuĘ\Gsnܾ}zz?WEseB{EX=Bb5-Ji,Ai LJR  *|H\LDJ6ȵUtL,.],r)ݝZ|{H[[ǎ(2Drv}ݩBia@㳽"aCCC۷lޤB =KGLC0B!Dc4hB! 5 mB!r=MB!!4 !h$Bdh|0 BC&]D!%rB!h$BRX;B! !!Y|ɝP]]-2ZZZ03hBkY]] 1cZ҅V'deÖqOL7-d򮟶df]G؞݌|!8;{VgFi//b)v!?UUUhhh_KceVhޛM_7Mrx8/_8߲%8}\B1f@@ |l=kl^:+`0Ջ2fը6̌4mv7(-n'HѰk8IDAT?qE\ISp6tVo,keIxb~>uZb^[ٰq# k[3ad9\x6?qcƞ1pSbxm(3z,NGF&KKIGkHEE׋[G|4y*.^U(DEHl?!f%KPWWtܹMꈎEāذ. [K#16N^Iƽ,81q ^}CHMO;r#zYص'+V 9>aHCަ߯\E] Iq1XzB!*Ft xM"!1IlL&KKImk#Re`o_E"-9Wĥ˗E۱+6WBۧ~Tfjڵk/ŋrf&{1V#p8` 6o'.ӃeHHJO[oj_DVahjjWYN| %5AcC]]zD :6:|+spr1ב???p@lL&+җv^ 555 0n&RF_Oeet ! xW6cĉ駟xbΝ;|gVNd]r"w2iM‰˕kqLM.((Ou@ @ hѦw‘ 2A i{{׎e_wV{dLx2F;-\9COOWKàٺ <==ѷo_9s(((7b3p^緘&u ]}(&+җz(++G^=}%F煄$DEb-??&,SV^b6RSNTTTpBa֭@HH2BKe޷/32Eed*JKeWUUE)K sJߵ?~,2P\+jO&mcf iiLdZZF2}$Y}).wkk+dd\5c:vnۂ~BhX, 0@j>v'f̘!ҥKѳgOɅd xHFFHJNgs__l ٌظxԠW : d!Z*Vʝc=8s񐜒 ަӧc}HRӰa&̞5S!HMK)3G //˿&RHLJCMM `b"˿Cew!x+WPXX>>eee Xriغ}gt" ^G{Avލ۷@_O\ᇐ-[1IxV]>}0o\,_!W.kv#x|`9JoӈPYYUAkP\\ ccc]t;kWFX 7WW՗r5r6mي{wOyOždBSCo"s=bǶr! p,C)= AEs9\u;#lf5G]'8)m^{]t=Bvu`JI-WYmmm;(_J̙5=}7ošuoL|"]NndT9*tp% Z&o7֖ x!ĉ }dmboe&WB>t ,! !:6zBۆMB!G@BL;B!*@rB!XMI$BABaaФ !I$BI!x1iB! I!d=MB!! v=TWW˵L{+Z%!Zu%Puu5ƌkK]deF~vN(vfyFys5UguttBCCCZ+Bړ'6o݆[6`C!R?D6(  @~~l[םROQ6A[ƍ EMM LLLz=`&OKƄIp9z,GNjg"9z,l9;OlQ36x?kܛa ۔ O؆zFȳRsW$u|Xډ̗q?HOX)qq$Oe;j?Q[[ !xI6JJJJ0cH+ps@IiB[i=%K!!!ܹ.^cnjkBddfaמPZPVV ‚Ϝ9bc'&"4|6 UcE`H߯\Ekk*;ĞK8uDrӃsՔ26ȰUiG:e+W1v{"ٲѽ[7e2446n޺ sssfs5Jl.LGDn^>oٌ>BEE oބ#B J TQQ… QWW[BCC!!!r03퍜ӯwoi5c:vnۂ~BhXpU\n ssedLKMKyi-c&|:>E|i#.}ŖmM^0˔<ȳg"a3$:,--{o(ضѣ,--'4 l[[K]ߡfk̘1CKgϞr-?k ߀$<{ Ϟ=CBbo>IxA|BLLz /|>vރ3gϡ <))]PbsgĆ\KMÆMD̜>CBp-5MY3e ~JV"9ĖU4/YeJ֡ pDZX⌓Nc`N: 7W:Ip otp>{y/QPUUŞ0ܽw@%1|4\hjhq[99a׎ G ⯜? }}" pJ`llys (ẍPYYUAkP\\ cccG[xǣGP#?;Kf̝5 P\\ #CC,ز% L:8l۱ : ؉ny qs*)Bۏzί db'rUv菰8@S޶[m!J+cG{B!M[y9B!mjz u{|Coj^BM!0D&! BCf[<By+b))'B BC ?9yYB!o$BRSN!W!Y=B$)z7*+^w*o]=]t鬅w}Gj2pEO^Qfo6^` o1h$#={ݩQbbC|],&-1%W :#fgPzv#FyB `A ӧ$ο]Q ϧk9bf ($iBTEE\!yY@ O]+YB7 널E|X _%PWVsNhO|}ˋg;_UN;K&! AS]C<^i 68haÆ N׮701cp__j,||>UUU!p` l~XOjlfFXא_2B Bȫ"[s7z4,-pcf=/O%fZ9MpU21^hk#ѳgOi7r<#_/kWXBst13CaMpRGG6m}==xF"uX,RjаK9hsfbjpZ+q&MEhc~:xL*WxW~}9MBHk '`,KHOO_R.M[[[#66Nbl[6.rAjh3A3{vwƌ{_>_ 8r$6o\G 6W>|>JKJ_ww1ma~i\my+]bVdKL6 +1сsl0.@1?.T˜0\f-mhb j yOϓCr8oiяmho@OOB8h}h|ۧ?@)=RJ]Ůޔ| _h,ˑ" {N{h6ZqdXK*4-M4$w9!tf!Ritk1Ypq"ze:sP&;7)-MibIDOg 4A|Дİԁ9-i2!f1e61q70")1zk;vl&O Ji52bývn#l(bQ/lW;M!2^hJqy33rN^p:KpܰMs ]?> ~|ԁڱVt[3H8 R]UZ `-@J&DDD))$1$""JE)xLžL3R)1Ӝ/s$""ZJ+&W'""2TӔh2%]IDDDK-0%1$""JAwV3M"""#S(\V0G 5}B@ǭeS"^ՀOKGDDSdD݈I؞:X='57_QasY~p0sNIENDB`mathgl-2.4.1/texinfo/udav/udav_arg.png0000664000175000017500000004412213134046534017477 0ustar balakinbalakinPNG  IHDRX=CsBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwXTҤ( `%F j57SliFW Fcƚhz3vc;B47l`(Q?VV) <<{ξ̙3GrT GypBQGizZ:6Jp %BT iؐݻwQK}[֭7OT6 %ڲ-RؠVěV&O8EQjhZ   KcUFZ_G-\Pц^xsōhQ(4(9d/h$=#-QgeVATJ#ƒXUV(uv$g)UAb- 22m=bנ.ZZV>B|hu*#Kc[ h4Z ll>{s6̜k_.$t~i2QgfVdfB>܊EN寜S,_ 7wwM'|Z`={ݷOAؽ{w^~Tʽi6m#Fp"48ŒpK%ʬxy&C ח! &5ђnͼ/̌ $%we((#PdR&[XⰱI3tn#ٗPhJ;Z;ڢmRRp֖"fS՝{)) ,3( \13Err2δ駟Gʕ+|u'˛{ҹ'pe222,*(Sݥmv̛u>s&,09-Ehqܗ4ST) JBղxb\%K;oBpl}9 z NԢ `kw [&REPh4nNv:dVgo'„DVKfF7b1dv Q'yhIbcc9Zf۷ZMPP49٥RL]ovZ~wo=TDGG3qR(* |JӦ1ut d .bϞL6?ݧ6o8Ν?Ϣŋ9'˖sTC}LQ G/:>nn<Ӝ?x,(/l))8JwΝ;y]ڬ¹s>mii,\Ci&]DAPTREeso7ogζ& ۨTPRQ*3]999ܻ{;;;23R ~~=+gff`ҭϵFubbb %ϓr.ܮ&'~U)gsvɌ3+̛?ѧ0), MV&n0jhGt<6x] .JsMSǎls} 7)ShX>qW.aogop! Ԕb^f>s&Lǂ޲e cnjdq&Od%;K曯ᓏ?fٶ-7J9󭜿p!Cۯe6\MEa4(Y((ݤMSL&Er'$%Evi((Y 2+;-@pkh߾}4iVKVvUXefZ 999ÇSNZJ+??jשÇyqQ&ѰaC._ę3g?pe6lH&HKM-6PtUK_z'N#"=!558w{<_nɧ'gԨQSn]ZcH '-5uf&7b=_dfXgNXqlrBBѫ7n7& {)3 |0[@vVK-%{,_>y 5k/JxgK:Y3mn{Th};ɤsR%%Vlނۦrhtǽ{8phV ZEM] &쬬Z8K?ཛྷ,233Qg6֡T~kܼyۋrU}Q{{%;;[7oҽ{ݻsMqn$=-|ZF|+1_כ~xm`ԧ˛/q }w)Λus0xyyILL |-so73 9٥4VQ8Թ 7o}79^'+KHKW⼳٬3iԐKV[>Gy33?> ˯x<Lwn:h|^e.,^Ҏ+33)_kϿnhh65jܸyMC5g$##=M7nP[bOV/oonݺe͛7[gZ\pA!|#ǎpE2uݡV[ӌ9{{{VX(j5qqq|sJx^luYXXwI&߬^T*y_,Wb.5>]AVf:.#9)۶ӡÓ&m<hPGMDv.G;6a߅vwOBR*qss?q_'Orp;ʈnP~}^-6#-- GGGk֌ dvIJ4ا3777jZZu]=k3ϐ@?+K3~~;/즕<3ݳGg.nC y.6oBFGzxX^xa tb>x)ӦO'55WWWZn}~â xwǏF͆Y'_w!]ԮM/xR_{W.#zTσA_gV>kSⱨj5k.HIة3in +;n{ؼuG/>B[pu^J:˖_BM:< /d8Sr`,wg3k+.΅74 o\̙Ԩ^O +SMvMJ ;;;l8}4))4ۨqꊫ;(U*499dff|6w@|r4srLO'mRSyoK܈>5\W{w5Ku6hOw )nccc"}NL08TFMZTstBTMZj*ɷoWG:6ja9:9^GG'*9٤Ӡbwpg-},xy :փۊ{m Kƣ Ycs+6 E6Je JU *e j8qaF;~g-qoswޥq&ԩŠLybbp^MRKcxy?TsQyO6y EEA(Vrz.튭ldggs'97oOJJ (gZԩS7WW7bxyg+l`+T8Re)^OKK###C#j,U5N S ( lmQ,|űd 豬{Tv  jV^CCvؙ#GiI`!lϳ#G+sRZ$ }}ڴ{>̙7XSMsXp!z~O?Ͳ+M|-| StܕQcrIt._ѣJĂ1ن cM$&&>gn<ʭpR S'Ѹq#pwsOPo֯]Fk{~& §e+y‹ұkw'lXm;i|[Ч_m([ lAP o~ABqqvf維|#}ᒥ֯]C`Oj%cL,^N;舧C'gOr}c-yxxpb ZlT$} [6˫NX!<Ѣ),Xs?wvYz f9 -kAeٽg/VbN Z3Nã&riLY#OGd"W٣T6 :;wRD7hlf 'x8F͘qٴy lL_0o,H-OOB&鷯YCh#m Rh~Y~=aChm fu&կ/ /&6.ΤW& :ǟ.?=kRy+Kգ{7+v̕W>'*6nԨ{ൻ;_pֆZV7s s1m l1&u0d`V]nU cj,lشw&BѢk Žm_0zH¦L-vg#}-~`f|DkܐX0-֭/tT*PX :t >!AZRݴ6ţMr)N2Fƍ8~Jұ'hڤqߺ53Ǒ%ʧX(<[v,DǨHJ4g.mJϦ{l^^hJ9І¬9s9q$8yY&^Z:x0spq8z8e۷GǑs)trZ>aR>Ă1GVV.'''rTTf4~7L1uf&k&w/>͸c>#7nє]:OPW`b٣;IIIL:ׯ[#F\0ư!ClNW |%:<ٞ =x3$t{))`#RIV͠6 yD ܵQMPإ_a] G*$6*ܝU rc̺=IMM%詾V,(+]veg6⟉ SWoΑʦswv@SdYQUKI>|%A-slULBXMQB12GayҥBXT8BR ‚JAxBQ:&*T9BQXɛBQ]J. !,(jd geI]y.[8Ba ҥBXMZ8y;kOVI3XHgV ܱvJFL;wpUBxxzXDy+ DQԣɻA~\I+PVBJޖ~:I3B9;9sp~:wjq`>\\ g_-6Řu{TX4pE?BԯWk& Wb8Py(NQC *s5+ۂIVBX‘!?!ՙ}Y\!s"n1 yTb[O+-!]d GaqnM~?ƞ+ȢDzQI,T^f4P|a#~=qqױ#5 zvm~6*T [R,dykic=v-c̤NՓÆl6\rŋ1XFAcsק2m:;ǒ ׃{iXir^8qׯҷMLL$$4NzСsWFˉ'i,]J׮]jv+V,㟻wR/OYX1&j&LČSKO.K S'Ѹq#pwsOPo֯]oR6^qzӲAڼÏ xEص;BINN684ӯ?۶GڌmFe+4۶GԷ?۟;v>߃e}PP\ٹm+_툠߾|d> yԮU z{3v(N>]$t<."W/T|NnJ0k*.,=Yh3zlٰ/:b*&D`"geٹd5̚9s_L +e,[93hßg:tFbɢE8;;A=ճG5 ]Ν;ZDbAXسwW2)$rVF%4?F3fx6mB(r4 0 `Y ёZLo_3B'&GGG:1Ĥ[! ɉf:җW1¯5{~gڔ0*cb͛,S̚Y囇czGn|Wtҙ+W2#|OOTtt6nԨ{ൻ;_pֆZV7s s1m l1&u0d`V]GFË$qA:=oIe.$tIM դ2Vd<[\]]wN aǶ/=j$aSmەrsžز~`f|hӦ̞9={zyˊĂqp ^:'oLN:RnZѦM9q{'OvuIF?ax4mҸDeoݚ"өږhfB&Pp,|'f9 租wDvvvnSz6ݻd?@Sʁ6|f͙ˉ;l IDAT'IOOɓ̚3פ<L9=v4;άs>lI===Fzz: |l9-}Чy18y ҈<ń 0cW :BUw/U^yM6SgDIڵ ݋FO3nƍh4Vwҙx'2GIJJbi\~ooo1઄1 g7p:wb/̝O3p~)QQ;8Р~}^x~yYU^I, Ub#!ioZS(¦|w_Yfe(Oi2#%qʚ=͛ӏ? ⟇.,=Yh3zlٰ/:b*&D`"geٹd5̚9s_L +e,[93hßg:tFbɢE8;;A=ճANzp]jתE>>r{$cL,Wh*#Ep2?F3fx6mB(r4 0 `Y ёZLo_3B'&GGG:1Ĥ[! ɉf:җWhn]x|+o@Νyݑ$:H, W^Zl,}Vmҧ_\EvvIe8gߕ^ݻ7_ѵKg\ʌY<շ?Q۸Q"7{1$'}[6k[-ŘK 7x/M.ƘTbccÐkYv4|֭f͚<ӿ3gLcђL*sy%cL,,^?~=Ksq>$P gYՕOvlѣF6ej],?s++!Gƾ?hƇL,rV-[rR+gYX0.<==9}M4ޞM0k LYjyN:RnZѦM9q{'OvuIF?qcOдIͿukgL#GLw_E6+:c_+|?*Q3xp~yIIIdgg6gӽA6o//~4hÇa֜8ytN<ɬ9sMcϙcIKK̚;Æ#cȧ˖ }wOs/%}31,M6cB'OS}L:VETy8&?3f̤v[#Ч7v gs r4RcѵKg J||^ ,Zlt={t'))Squyk6d/D'3wV>͋/+ё&MAX;u4XĂ1Т^?pe<=໯,2ٴUBJ7V^  *:i3f-b2 P1kMv7!kx{{1p^}yPIʆByKz`]+AJQҍUK%Xt6T(ŅTf?!DeMoV ]*!ՔhM㫱XZ匇NԯWt P梁K5GgڴmoEŵX׫WvX(6S uNjj*AO5m'Q!uڕ .Pu Q<|YܴGUKQBb}#.F|jncBQpHdº #M^Bܹ}j.^BTf'ᒮ}.8B+u̹,.ƸsITBa!Ǐ⒑K%!TM G !Dq8TBk0|ԯpPB+Ac!isH#1m#V{jCYBQ\R/3=<=J<(XZX637y?Qط'BK,TB=Zl,;#"ڕ.N.ԫ]hX( =fMӬĂ( Z6BX}cBJ& !FBX6TңBXK%2YXaymſ~?ƞ+ȢDzQI,T^%zZ yeKkНQRؒ`!ϣ_KsuoX4ObxᣥsЯܹs777:wQfX1sߔib…ԫWT=Ʋ+Af,kb-|Yb;:w߿5_}֭MA^ cL,Bٴ~<=OH`ՌU+JLB^ߵNqFFެ_OzMtOVi?2 cO %99"vЫOlQhK lAP o~ABqqvf維|#}ᒥk׮qüҋH$tQQ֖wDEG+p<<{. Va43gbbXXe-,eU A !AZRݴ6ţMr)N2Fƍ8~{ǎi%*քϘG>?oB`kgP:V]%j>()sO?"))ܦlw?m!̚3'OΉ'5gIy <9s8z8iii=vYs2|Py{{9zttrZ>aTi._³~Ƥ+cbWMcB'OW/2T|%\bd_0uLԙԮ]޽xk4ƎapnܸAFSjs,vL||\\ .Pu =J0y~\eg6YDɅz M#P5 ʭ_J 9OSN Y4g"~쬬,>t_@ =>lrXĂivMg=-rXnħLNVVK.^r1XImM|-|Yb;:w߿5_}֭Xx ,]Bz,f͚<zMbAǘX<Ŵ3>V8u*aԪOzʅh S'Ѹq#pwsOPo֯]Fk{~& §e+y‹ұkw'lpm;i|[Ч_m([ lAP o~ABqqvf維|#}ᒥ4#ghӦhӦLo(DW :†Mxstgg:wț#`ş r961kYQ4+klٰ/:b*&D`"geٹd5̚9s_L +e,[93hßg:tFbɢE8;;A=ճAWVT( nb%& cL*ysax^ }M+??5:1jX\(,cbJ*ƮB'c5)SֶrX\Y\] fO?0DEG3>d>#yG# -ZvkX0.<<<j&$$Q \Δ'٩CU*MkS<ڴ)'N>I'ū bFѳGwSLsp_(;}'{()5E"l|eV. X(?r x|B9DEG3mLܳe],Q$*-^ڷkǸ !\ۋ˃ʴLV6$*uGﶩw%J>9/ !,Okp'?[\!L%]*!>Jj!%_D]!%念APU\%55JxNԯWt Po̾jl,iӶ{$:*kԯW UGqPagT_swH] UGqPf'M窥[bj1Vh hc!ȣ~Vל Ga5TBa i!,Mi!,D )te} !%BkAc!t̘i,ҭr 4B+]D]TBy`uR !,)ߠ !,*%c8B+)VA!,`?sKQ%ZQBb`uvr(*RvX(HޓOm_.bcMѮ<<=pqr^=BH,T Bqr+MӬĂ(҃6T!ȊBWȊB3|p$S!r;)ƒ*|LzuLT<1IizJ%Z5pQG2co]c<aWccqD}ʺ(ʡ{r6GcȺQZ,B2FƦSxUmN9J^j5e] cN|՗nwh$?̽S%&&ȟ9 yZ9Q*@C]* McZWSi\U",Z8r5F#2Cՠj"*KUh*U899ZZ]Z"IDATK @~txzxcͰť:={dtΝW^AG[A^&!!Qݥz nFE&My$&&S.xx>|~C۟Z<ےsVg%}5-Z#Kz s>#Yci-4j%K].]ZIٶ+:vRf/ W֣jJ="QGyu gˋӦ,X3s@i~'Ƽ>!!\7__oߙ9s&vc)lL S~]භ7_}WU˗{iԸʞW&37+~\xMǡ'44O>iZ5GfӾ}{} 2gzuy~~s裏hђxg߹dhhKd˗bhmK/~c/)21qWN-Tq5&O'1) Jek5}h:vXOzmP&VR4ا4~_#տ>oЩ3kV䗟}V|hQav ӤqcΝ;G6E{wH=+OOOrrr[tޫVZMII!t$k?|/N}J:hlEU*kkب?># oK6~!/"--g351,OQh%|(@da?NSvJǏ7qclْ~An]X?e|L\7aڲcƭ899=Oǚ ə[cggO W֫mlZO.~KU \wD^kRQXNs?6*%2P-99|t2mWB?fj)6l˗9zI.TnnTAy-ώ1(qϊZxЬ31y_& G*rG)"TJC:ھ`.\x0x` `t>S<6-P i /?,3sXYۀ!7bHAP}֧Z6EQȲrECer)@Qc`@ fjVi+0m8x<s8]*(hlajM(>) f%I,lWHYy {SKi #hKrʆo037G 0B ( ..hbGj}Y}kEUz-,ׯ3|>fffؿ/g}l,֬Y K}aΜ]6mڨs}'R6` >4#u˷ X03O'XZ n]>AAȊHy:X<D  %55yyE @#7oh t2l۶]fo|>7~1puy]:~9 ccFS|FIuՐeg~",_||IOWlQLM)6; ff)0H'm8܅r0,0 lAW͑0-˅%* ;'Nop}3P{[k-_<\|G]+W@Q'L+Wb߂(oy3Ǝ8oNNaeevځ-s,̙%6lɓ&RJt8xO 33vvvh>}zQF^|#G7( իWðGKs98w<>||[=SNvZn5k!44˃v:>몢=o}ږl,,Zl6 `ƍ6nڤr%{b 4ƍ0Fb+|XX~EOצ ֫?6HHH@LL9| \.a7oJ EϞ@ z}'NbYrD=|q&شy7d2D?{\D^pqgϞa`p}uÒpƍ<{-1x^O^}pǴi3\۷oծO~233gNN6޼~u٢ӘAB({Ϟj'Ye9r3gkf>Ǟ={.ضu+nǏჇt"=a̘1sGGg'.)̀IIhPU+>>Ih , 6֭sAQ(@ N9sx|>܂|py%0x5򂥥mfa :bR/.PTQۚTrwOor8hJĉڵjzx5j_Ç^:Ԯ\GE&ML N(ί:Dx5jGbڴiDʕѸq# <*Ty0JX✣FY}ڱ# -D=*IVً3gbܹcXf<6قZ}u؉}jǏX*ɅZl'Osn`Q 22UN   vʄaXHLĉ?q{;;TAvv6 Jnc!BhAJX[m%uN硠,G^}]WD\\ns޸>$t@.]$t~yn!L >O7#C+W!C၂ Xf8h>#Ox歌{귛UEi!hߡ#R>kT]Mu|.{C߻7Gu܂]q9,^,敕HZ0l󆣣#bеkm8:ZjʵW0fP4bnf+k+|NJ>iħ$''S|>)) Y28:t(Bgk( aPJqO ܱ\EQڹ3lڄ۷oc!}6l6t 01 Ih>̇ p3, 3O}QQ8Z}VeXYEuR$l.޵N 6sb<89Z=<zOψ}Z;'`eaG 8x'&LBB1Ď`UVM@Ŋ ZL̞^Dnnd\ f Ϣm^Prb4)b]] 'p\$|vF-3X^<#FSǎh$:; r9x(ϯ >}Oflt \.˗EΝaVnH/_ܹpI<~ރW J4mLf_`nnP~|>3g^Reɥ#ꓼf"k هωHI^wR~/i]< ^A{)8vڶmVb4m; 111puu^NիPBOѿq׷#._}ݬސb cx{쯙r;8:G*t#D*ȡ57Ư5I?[^awH|4Ar+Z 0b}f@dd]>>0`n/ 1|6}:ߏ-[B 2{L:Y*=pIlۺK-Á5ksU~eiߋ 6'Ees\Dޒ!Uٲжv; 7; )ɟIѹKW$+,[DhQPCC-k lKڳs#߫/(>VѶ C[A pĥVXv@LL"V:ND4?'ŋptp@oWDžbfx)rr8h *h''89WXl6h"ooP/bs'#KQ*"1^w@ji>}DNQWY"?Kgck .͆''i)IR5\*, 232QxOUSWOlO?+X9`rA5C[@@ۀLr?#;deeVpwwGA~,,3jAeO }֧^vcTIo00CSy-[0Nn~E׉>OlPzDP)\|hjg"N  Q @Gv@Yļ  )l# }dؒ@ ȇv A  @P #zM # $A!RSÉA d&XAe[ p8)OL0I\\aok*Uo~- ( .!Vֶ֣E!hp'$nJa ~'{Q`ϞQ?cHj\ '-- 4MHY!-5 __LYKBPeAs() T& FY@c@ @3 i0%DoWo+KKTpO^ݳZ揗^Dk&A ]2pD xCYYxy0Ӽ%uꂹ "S"2}ѻ/C4/YV5f>}w͛04o}!xny1m]x-~9 ժ׀g*1GHG9-Gf)Spe񹙳fcv*z*Vğ7(R^Deysn-nc`hWVI\[qv8:oS3ضeOXUT'ؼu;͟{wnawڴd^wvҲ%ϩas7;D WYϝA5YYYhݮCs{ETmI1st4n%.7)9cO/(|;6|hZqeΆ_6xL Çe^kժF]<±Gо][ qhYXn=z/_@azMԯWOs U2k֨!A좈^G͢(iޔadcŸw.K5 cƌARr2WZFMuHRɞ{իW^x1x{cpuqGIe?RUʔ5h'7/7]{fdS͛bpss@ @*UsԀ̝3 ,DVvs̖MrQ< McGN[|ؾe3lllOl6z+ˣ (WC ðj]B3(1=ɓ'8t lmmQQi4r m󑜒ׯ8?ר^'NF~~>^|%AR==AիWÇp?|qvvUq. Q Q4ӓ@ !AT@|A1 012 *C1p8ar+mPJecSJ5 EQҋ(81E\BllТEј?Vx8' )Ѡz!U A}-֨]p1p`` ~*Wt;;;ah.=za՚Czl3O-˖-ʕ+-F DpBBCEf{vK%A3a8vұ|j|$smF7j՟p#&voVScl=K/ri;wpY?zG:;T }Sˮ՟s.޶VVVz40YEgz'$`߱uF4l7>U*ë́7ًϑ$3'v+ESVދ‘ǰga֋|$fzj2J2mF&&&1f ??#%7A>U4Voc#zCyyyξh?`gg HgϟUl}?N0uyfzj<%}ۿ?_eLŗ[L{"9Cr JQFY k(ZA #kb_HZ/d*A%dAh׶k EZ1KLO }3K J/Zb> W7WcYb Z60]=L/( Ao!DVOcSգ"ŌmQUt'$EjjE1..p/saJ5 ,|b"~|ZGQJ@, Aʫ%ך. @P`i"ӏ i€5x-PN`F r <I\B85n+sJu‰[F;hglQ4䱿0qOjĤ$xI*bz4^D$3={5Zv:z C}(kqTHIJ6:Th(HJ$A Le/ҲRx$|d)۷@ `(v$3= *Q|_ȀY0kHZ/zu>M 7gr&d800_~+KNDN-ZK^Xf-t4Pz4^$w׻`{N̜>MOM-[+W[bZ .#P,F\G޳[["8qcF#"< BZZ:Z'1 ңR4CM:u펫\nn.zΟ#JM(?cWLeg`y,^8 @%Z<0uyH%/?R\Ν;Qb &1<֟/_BzQF~@9{ 2RB Q8JB, -o'('.!dW7Wڕ[]Ex*A5`cc-Ɯ<&NI<ÑOww=IeXLQЋ03 [ QwUdpY=IcxLUӋ6!()S#%)b Sգ"r_PB9@7=l  }~2cHa %!D}!fCY:;ҋEݿ#G*r I/ ׯ_{~}em&iVңVY<<1 Jت=x'fN۔-[+W[bZ .#P,F\G޳[[w ƍ0;|iiXjCz~A ^DrM(?c'eg`9,^8 @%m4 G}8?%@M|U>{NTy[2|)S}8яKE:%yBGȮ]*`B[ԟw`wՔlo@=Vuaew36?, Z]agGE&S8tYYY0nZru aa|V_kbaƬ߰zrJ {M5}T?FM.0 aaD?fzRFVi0k 4l@1@G7DUϹ puٹVVVj`G}8[:9=gΚD5O(=d/^&ocń2d^^^p-u 6SMj+ݠDE܆JKqG]M]I8Br/"##rJèRV7"h(1GIj/ވfz4dQ|=Bk6X,P,Z!kI!bec)9HvZЮm;D0KQ䳢. bhE^B`z)F, =jlt:Y,|>\\ƳGEry aokp]P,6[fD?)S>LUҋhLl:lJ= %OHTcb\\]`g_ v=j>B2]>K$荪UԯgdIPH] H082|(I L!` n# 0@(;ZF@ 4NHaLQ#95WpL6>qus]Q C%$z2(vx8sJ;eEE }mdѮC{p8uFYѣz)l# WHKK`ֲAZjP eI!> b;i鋲:T_^  C&h 6eBh0c`҅Ѵh. #U( zD/x$99ؾ#W_Gjj\ѳ{wL'fW&LB, D0_D~~>F {<=<3v 8|p?,-P_ay/7==˄5 %LF3d~W˖zj077Gjt *Vtþi}pI͚g~8s|2nĠyKvC H!t4|3~_h٦- LqzC'NgBljS{y0Ӽ%uꂹ ">`htǎGvVj.nx7AWx7Ah>hӶ\*&Xz \^ tu0*((қ,t'O{>n'Kezmݷ_hE,~58h +bIjլ)913V[G#0$z_}hW\ͥdPP23*-]oԨyWdddϽymҴmӦM:ϟGRWUxcƌARr2WZFY*媣7]wmT*oS֭[c֬Yӷ/ك&`mڴ ._^zǏ`h޼yfƉaggSU_zIT+TU>6VwߣZjj׮Yc<~OeL4G?Jgnn.yŨQ:N8gOɃ(~]U7\",K4Ah$'}FJrRS$عsf6- b`osf+̣ }MSLMMƻ2u lѣ7~;n,vlwЋ" 3гGw"ڞPC?n:ύFXr<{'N@fsl6[aE]&>*)[ڵԖE4'֭ȻR#""Q^=iҤ .^,((fl38 /2ezDW:[=~"uFdڵ8|\P }!'DEG[ӻZVV6~9 -FFMJ/JcG#))Xx|cHII>#Xz5&M(r2glܲg_@ff&p/* ?ME5WljS/_bI`uOܽwD9|*PJjC  q99و _UΜٿa_H[1bhׯ딦 o2ezDW:?v VZG#//?ƊUJÇi7=1mt| Cfaĉ/ܩl8 Эnԋ"> m kkk݋m;?~憞ݻas0&E,Abb"<1ЮmuVlF`hMxc ZX 7\0t V]K"11i$)604-;ΥLtwHIÌ$$|B*1sttM:"rڵmн{n̛74M׷fLV,uP%J2I+u)))`!RRRQ#G`݆ʟIByyy3f,~6k۬.Xcsƈ?`5:,&nb޼RHJ&%RCCZx"EQu0lKcqN$5wFnMxu\p7mVL^`!$~#(h&3 s,ĄqcQJyK0軁Jd\0kQAQ?vi2k͙xzz`cjacc۷_[lFy쎈`ͧV>1p@Ǹ5 %Cv/:.u- zPb]ov Pru, |NEg=jĞE#'`og11hMceoɷ,hƳgpw0(:,Q+vBNOP JիWÇp?|Q,{{TVآ茲G]腌5j[(z L"ALHW@ (F(]"earH@ qzAjPaP"@GA}$D*#@Jг{7-KKK4n[6P=az0n?6_ǎb`5''GdddHܲF$AAʇٞUTA-KT 8穈{yyyŝT^ȹ_Z)C`\F$!5Sף$C? @ ($*$( @PUb@ yAM3=baC} Uoևagk[7o@ 0kSF)I%U*#>!O'W7WڣJO%Ѕ!mPRv )!rdOObU`H+p 6=O[RAjΨj>KH!*"VC*+2 10')-lKP*+bqHzM+L+k[t˰rn#>!hJ*HXfYޮOާ"dj'4Me>5o$7 '{ah Vhס=Ο=v>J kGt0 |j'q˼|dKF҇AQ =dE0*ݑU=4Z Tl5Q^& h9Xfre>:!kv0f`ͅvf@ӴVG^n.֮^-ó jVoZCږV24mkf&Ν  4yT:[[y?z:u`gpQd6 UIONOͽ܂ vj׭fZãg.tCm(ZQFIrгWO4i ϡjժ W^v*䔐FXNܹ4[>&L3 04?vlWWlشuԥu\۷? jDU1vHWp©'ЭcTsbIHOKѣs'Ts_8|@];G5Jh֮_3fahMM7ӳ2m݊5k5k-[͛.?yssرQdgKlG }y~I˯JM;c$XT|6mXK뷸r&4\rsfD9x-:Ȉ;QbZ/޾'u76o6`(Ǚg1stfLgΈ?ܱc;:K.vZF]3EIBЌj?yjVZƕ7[XX`ڡTM[w7@tmVflJtPzue5ύn#ύ6h N^ZBxu6-g|!>3m+^/?÷}zI0 X,TG/Tȯw/[tNZK._~Q_y(ԨY o߼A3 LM}}G`\] РV%蜕By9">FŊ%xH U0147VxZjUګWC5i'O`ذ!CR\)4K ^Qo޶UiјtT'K_,7B;rW/]V(.Yftsu`Ӧ2mڼwѰAC>u AQiF%   ]81v$$cy \_3q3_8]p!pr9Ƣys/O?ƿבŬ鿊O ֬ǐ'wxGC)Frd| 3f@l{p}3g")3~ir 'Ш]Μ9M6a׮qxjjI2">9=5=qq{`꤉_Z@1j85kq)6n'`Q+<ߢU+,Z ֬BsF1 -[_o[w%Z|7aJ֡B6֤-k++9} vvvn`ԨY -N< ,qIDATK IRyUsgN#4t6nXj&n&bPCC_[tMt'<آ**Ύk*;8hӧѾ][Рid!F뙏 Q[YNQu< a tE} *`5톃[Pb -BC, Qay /Ѱ*0Lc{hXl6|)G An'''iUbI2 "S>@=7l {;փb)@oVn*{{?gAc{ԯhrT^ >|{%Ӏҕ^`ojժe5ƴP?p A95j00$*@ 6,ĸ  ^x l(P ĝ@ C`1$v;@ Q!0uA d#\j&t[ KB dA1 XĎ[Ð @ 0`3FrL$r)l0)@lg H@(xP4T=l;IENDB`mathgl-2.4.1/texinfo/udav/udav_sch.png0000664000175000017500000014322213134046534017504 0ustar balakinbalakinPNG  IHDRh\)sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxw|SONV'mY2* Z@@T_?dv=d 2EDEPٲwKe#j t7MrMgҦIJu_C!IʼnLDI ~~d7γ~9xդ{J&jf+BT*'j'"+x;w@CJIT55AEQPJJ* B!,!]%^hҰn j3+TT*}.2 ddd7Jh33IMMA1PP !)}wERHt?dL*PyJENC@IM"v".B1a0(.XHgffB`{^JޠQPh.^@Upvv(l=d/~y3#t7*}wE€2U8 \UEe@NC㔀Fs&iո)ףƷCKtz/: w@mj$$&qLV JֱL /BVCxyzbQ/k9WTA ޭ[?P`;wʀt:xxx0|.^̙3hڤI}4cǎ#AϟWX;?{~޹̙3|R-J,U:Cq-Zs,..qu9vo7aa$^=?\9:ͬ뉹Cf( @7edJADDŹ8rK?/oo>#/^R`mw\2:;v_{o_YKV,)yG흊@AQ  -_Z}wY ?Wtcc-P*&']r'[T4Z%tPi((E$%'ٙ"fj8MRr2=*FFRZٝ)SHKM-[h|_cXNQn݊Jb'0[SOR Օ;w1h@Tb|orr2v͍N:fXs,'LϏ?nҥKҤI 66oVpR !} ϒw *UD ^~ϟgw8wТE4*-jM M"x ϰi 3g 89FZZEIJLŅt2Z=n:?##7W7dhKL=\ݧOyϳ=\my'ؚaO<׋¦QWTԙ3g_p!;_/#51Nn*cUנ23}aÇn8 /\:0).oOO|:=afdddSN_W'f̚z=$`}Y]=;qiz_caG+!T*ΟPAad{W1%,Gwx]PQ#Gr'!XτqXlYcgjli-bOXv=߭*yWrwUk8 `_x{yZ۩ÀJJZNQn}ɓ0q Ο_L7i.**T *PmF:;v4)5NNLN.2ҳv*ػw/ &5%-Z޽{y A}֭!22 Nԭ[{듚Rhݹod'?y{z= diPGaذaRV-5 ϳ sxſqFyժ, sr*HzZ*×˖w>zt΅ u:t]ff9w/?fԭSԜ #׮/n,.\]t%fF W'K?/W|EfA4nܘ"wޥMRrZiÆx#U qqf-5SE͍[׌_kN<ع6III P(jPT69zƙ23.^Fm2O$##m)YI_y9y(/ 54۶};:(tOK.DGEe=Ϛsz<ۧȆZv6}:y5jKشgfWs}#G9әs tCTEQx'PT޽#G㱞6`;~} nhߝ7vbB///^Z^-IXWԫ_.˃_ Uck325k{vb?qy>x=㈰U(3nva`<<lꅢQThIĉ4~}=ޜբh8y$̋}Ѓp ndbg.wx{fh]X; \:e_~WIJ gʥ &^ g##JEY̌4x֬]Gǎ,]d7`pAI$<<__*Wv{މ ̪5=?ȖߏBcjj Q8puRr.=3T:1бD1{7fʤS ԏ=Zv`0p "#ƣZ55oFf]AZ'N8PN]VkWI,`CIuHJÍYǫTF{\ ;nk?T2>TTF^#%91Q&? {ʨjz))$ő}RauxxzSpXQ#T\?wdܹx{{vZSF<|+;vfc.?W77|ejފ1C~_.̝gN,2pYǷ.g7m@]` Y7#QQkѨSQ~)JUs{2FjUn~<߸ɥHLLA` dgJ͛\t jhx/j֐ .ZΝ;6|j¼5x:JY [+}wEmqEɾ*J((}7RZͥ؆9N#>!(nĐ j5 TR~~ie/({}'O<ˠAIu)HIo؈Tn^f,徻".a㜗Bii}Wjj*ƇQR%䑑BXzT z; ܊*uY]r]QcnKNRpqvB85eб͹B!lO ],B;n,B85!B؟"ǜB$B`qB!Fָ4B!j> !¾,B8MHB!T*T*9,B8$iB#Ivp^Jrr2qNEX7UTNNEဤqv`^+= *JnzP~z{ԱwJB*N?**Դ4SWJ*L:c흖&vͲ@6/˻=ޝTd]sTT4E&MQUIkQ ˗.c6읕6ZMll^\?/&˻<=ތ@g)q㜚f\u:5s𜜜 .ɽab9m d;*c9ԩp'˻Ϝީ7ɲNSW( l;em*==]w9=VCJʎ,ۊCkYβ˷ 9Vsw!%rFJR*G(j$&8ՎS !D!akb,9g0c,ڴkOuԪSz?͖-[흚ErmW_}ŵW<ΐ!Cbrb1~K5IY##nSjt_B_)ϝ9mSΰKE q#\VGkLʮr-ZޏouZ4^+KhҴ^>w%^zemDu:?~`RfxAP`fIN֭#Cކx7S E+f͚.3$˗Ғ~tЉCzZ5q\lQ\:wtIĤ$>oCHg jUP֑g/ghB3v &ٶ};O=4͂Ch7|)"uWd6lh|}3r(&?OٻwIٳ2yޅ``t//ȑ|,cĈnǎ[ʓ jڔ6l-[a<<K~jR/%s(*W& S}cighڶm;g|w&q RreF Ɲ;wd\y(-ӥ}! Yd w0)W6VPMc={ruΞ=kwn޼IϞ=Lʾ=|/ԗ=vkv=wIo0,39gsr 3왳h׮*UϏWԂE6%VZF{a0~aC1/_BϞ=V gggYpA_}u˿& ?~/lI򱧳ѱcy:uLOI7lذz_5B;?QYz Q&GDйsh15kf} S8/`ȐզџHmqssjժ9={2)ceoN=E #4h@JxILL?4wQ3w]`~5ڶ3W${)}56ɰgx.$h)oCн[7ZlIǎ^z۴nM%wwA.]z* w_%,lȹshӺsg;.E٧ٶ}&2vh~fuc <@Jr2 (޻ާ gi\sa.^H6m8iɼ1smz?7^x{+w MΑG?5Ik,{s)J{TV$3g]Xh{cͪ\QJX2T;8y3Grߜ;s3GѣFW+:l߱_}]d=IJ_ƍԷ1ä>4,,\Fػoɼqk[ZiPo=;1},kAAM_E7?E 6odKeFsXœZڶi-e믛4.qOd?nHBBiii }k}HKKUgu5^fMo UпƎOhN$Xxi ?oHZ5ԥY/_d,1jp N >wFGn%,_Ɯ9siؐ-ٹs+/7ީcfLaa4lJ![I,B8Y} !KY!p0ٍ&BؓXzB!cB!B`qB!L aB=?Q>z%DaӞsFFs̥Shgjվ y~[!* V˼ ڙ{֧a?{Ö4BTlY`Zý|2ׯOZZ*GeѲOBTX#GF˩W.III^̙KP{g[1QNAQO"YyɧK˂hܸ..xxxеkVޤ_C6Y۴co]\~,]!-Z_êqVZRVڴm_/-[y#Ԫ}nܹ,Oܦf4j|||x^Gc/2pk4j| 2` zSy_kY_a]>JФi3J\||f` 6lo)ܯ73O;g6Ξf̞3[/UίBLMٱcfay?wOa&:Ĵ31}*Οe8pE[(???Ν;WdAΫ~'F>ke,-m]殯̛LJ?' -]aCOT=үu=q`>?okש˩p<==,O2t`8͛Yd) -kv6mZzsTo L݌o@c~}<ϻNEc7ng8tpo9N:Үm[ZlA-h jRRB;sqtQм~-u?h޼۷1gOj ׮%SGߓ+TvdQ~t4?[n5=~<=w7 doIKKp3$FZؽ{I'**Tk/cIZ±c'[UƍXp ʕ+=cܺu#Gq5j׮ͨ#MN)I]0zH=(j׮͈ygXcΡ|bffܸ x~FaQ~t=˿1cHOϠf͚z FoX{9cL8Θq\~^ϭ(M{Cw%))F3r|kpܬ !Sug)ӳBgkCʃ/BG !⮓)B`qB!!L!,B8RIY!?%09 !Fg!"O'&*VU /o/oɳB 6i#OEJ͓zۢ:Qٵ##iذld%(au0T'ax:vꈢdSΡǗ[6)={/98NTT1 rJ(;rDq7qPlt%5[nnJ/=}B/e9#3b0kS<Ǖ$Ǩ_rp]`٠(Vo r\09Wȕž {X9[Tj777jнG&MUB"OEVkt];wJ!J"gwfamźKJc;==l'/J#̓F\\,O~^_lP6n4mYlWS tO&61K>(΁QThZ~3UTAQUAHH0~~6v'Y7f^^լY[K {%¦L}Ƹ{v6uqqeҤIA^૯g;w3h@5z4}5^L:]b 9Rkm۶R2Z4ͺ䮖ǗW`ڤxDoЛ84 ã.""ؤ.vAbo6j 2% :}}|3λz*vl,EQֽ;y7nPF nܸS֭...TT-[УG._b0䫯"0`Q\zd~:uׯ_ÜeB *HY-WQ2A K1U#.θuzIS|!+jvǰ5OҾCBn:LqVLT2t(c<Įݻ9rd-,,QF.rYq%հGXG'Z)CQSxzysݚ<$ǜ+8O//BZY}6kC933>+uܲ6`ʕߏsΘ1&jE1tR@1@Q3dP^xy4u93g6Pr7Ro {@k%ʱ8vn߁Ao0qF:4D'>e%q.qmcB뎉6αrˋ[_ 0)Ϳ++0Fe{ +z1GXG'Z)CQSxzy} Cr̹"$0-جqF= &PJeB9y$'MbYۜ9?C{|{TVǏ3~D2cǼk+}WWW=ҥwߖ*׻Ŝ93F[*ir,..w`jQ@D'.EŦ`X&{{PFɵkשY&=X͉԰yt4nԈÇ1xPcN;b2fϝ0 +F .73 /?www}T@jke7eΠ(niݸ~ ~^.̉{5=<=?^8{6yOvXvmr^Nw;,/a&www|}|9zZU?;v5jJ,lBRu=gQHYXYDmvbo.4m&gʸ,*&B̓il,(nߩdf1+ƓNaV\%Z89ػ~Gɡ\-^ !2Y7!1RA*._LjNSBҳ a>>>DӬy34y@Dx _ʛg\={/98NQؤqnܜ'9r0cmQ ||}%Y_vBa`cCBlUBQB`\**BWΕsB!Lv,f!¾{,Bc#OEOLT_?^4 jjTj*QUe4y*Tjջl*ڞ];2A?=hF!~A}0 kӱSGk$5NCŪ\&&KwNJ '#K]VvO"뱑*^zFF/*U>E!lfb0kSJ8;fKw9 5EzlrIYXʜGJaOs k DD{Gv,BgźrJ%IKK#..z?A/|hh(7@ZZ6P!L1(L7˯ h4rL~ĔOH8,}z ;;FRjeTR GU!!qM>!J1s={ӧOۣW>K,)UE2dFo߾3_iSb0(ٽŕI&ѾC|.]Jpp02WWX#G |m۶߿W_VKƵYW L zg&AAxzxuzEDԕ8g /""N:YbvЁJ*ez+WP PW{q`~nhLbC\\՗Uy1`z:uЯ_9*.1UZe: Y'YG\]quu)􄃻p+ޟ0 k[Tou۷b).!Yp!ݻwcU zu쐡Cy6u իWGSvX*U'UƍiO IDATĉHLJZj;eb_Ϫ뜩jߢAi^Y8"sEi|ac%0tc״I'x¬D^XP~|'9xvfȑ8Ǐە+\2WOaˤk cԨQƿ\f\I5 l+VPG`^sk1 ˋ-lVni;f!Ҿ];bbb3w..,qhԼ :Fm+0+W~;wƌɗws1gle:woHVHKcqqqܾ`V㌒u(^O] ͆RM֎پ];>iS&< th߾̉͝/r-^~snz6jJZ.ɹ"NBo_otz= JP)(%8 TF5(oYP={ҳgbY{g bL7p@cׯ[aET#jTjTTdgpqj֨)ѶrzLL:oW~TDܾSXYDmvbo.4m&})UWdP {.SJ*dbOE.,<8Br;df1+Ƴ˜o>NE!&4k F'`0S)g\={/98NQT26nNɓ9r۱eWp||}%Y_vB_PTCBlUBQB0NY!p08 !F 2>B! 9 !fw<I|B<1Qe^8iPS{"VcK"OEJ͓zۢ:Qٵ##idӃ6AuBpBְvrc(זI&kN:_+qr;{/98NrksLt4sMc4lx/!!!Y~^6ٳmNƜ9 ͛3f *ѣF1߿ 3gbKhժǎͷW=zPf <==|P RjgTb Z̓`lRdqqZ1s 2QGӷo_V3m[\iӦ`Zh@zY0zb䈑1c:ЩS(ӧOy֭;?0;v믛QTt宼v|Ŋ9rڶmK xdi\u%]m MAٍ3@ <=<:=""HWT128[;w:PR%lB=| @PPP-.ީS֭1IVWΝC&uЁaÆ=,_7;afRId7s%5SK$.fKn-*.+ [*f B3zù8s~!1aW8~8USLA~Arsse0qDYPZ^ wθFm0 Mʟ 5q>⬭vqZެA1|x v܉OaB+SEM4WǏ~ kyAPP p5l  i GDD$+ff?/\UoaSˆ)DG=W+Qs}X ahHsGgaх8= 2|.\3g"44Ta7+\}b1ydcݫW/$'`ĈmIIptt12'ggDG'!bJxxxȨS<]/** auJI<N!i$Օ+Qsf뮁\p9wp],, `䬧i0s,7oU7/|.NNF6 FFF|26l؈.7A3f`aDLM;C,#==X\A/aٲX`YC'~E"J܂ƶ;PGX +--铧H:gFKKKHH>S040i o"UMCMؽ{7@'gLy^1g#4, /FhXBC`С2m z%0 /[/0xi@Q1,Hm*,aaiA8ԟtNu/)9P-5W7~سGa\} '#sӧOܿ'֣gOI- $cccB\NKC~}<9Yw߸r*lRL8j4ˣ}Vfpq懴.'QR\Zkk8ҝ{N١s/Ʀm>9<MQ97qןU֥]쿟{iuۧt'm+1pjj$BFRpqu=ޏ0ȄP(v(Lۧt!mO1N n_Wp2rvusEfz:.&I! jWOsqy鋀Ҙ.|/p6!U,)B!MJ-ML!b1]&Bt u΄BΙB1uלyL!TY({X$prvv(6tY1cq`Ν9߲Ӄta ]BnхN9lڔ(3 @iYeؿwCz nbНݾd\XPD4.B}X/F6dԩSUG !Dwsf&:$5whŠS וU{pV211AeehhLT#t'ъnFh+qYtZ ;+|љӧNBZyΚ`]8,-tGSUU:n<}1kp2,FgjfϿX{y&ەM9x(~Z&ʕ?2mݶnbX ʍzKw%UUUFt*.,FUUC' wIUw>|ǎ}kXOJj 0N>\-9p&:y%t#TW"WQn ӧOqܹ3]ejf "k'q9kܸƖ/[[[VհXnw֮رc Êh|}'=*HHH@ZZm^^^4i--/O^89Itӊ2@rFt }\!C9iÑgk˫gϞjia=YYY Y|-Ӷ8|SLA~Arsse0qDR[Z^ wθFm0 DMʟ 5q>⬭EH8hͶ#=%Q\T(\z?~kVCm-FU1^8"""Q^Q035y 2vFJ'S~5P %:g~݇9wt]4SViV)(,QQb1yd)^7db"MEEE!z~TTTP.:c݉WY"$mc|0uw\p9wp],, Ʌ[8Y]m4g^\L6F8lpelذ0{,̟;@tDDF5&66Ǐmwޯ롎HVZZ'O0Ju`===;:.B8է6燄͛ a!sH 4!s<`og91oZDXZ(BKH$lQU] K Ǚpڬڗl\{yjiC^=^aϞfcx7olw2m/Q1!._s,xo\r]ms&W#gș8q$JY`mm'Zpی aDx1 *rus D1dkYlrUq}:hjiS㧜bhS ו89C p9[ )w!J@ h;BQyPng$W0 ̌LBmƿs{ nbНݾN dt]BIq MB @ /BHc5gW!61B!:sE !m-@#gB!DPL!ΙۄB6ffkggea jt"kXZXIۡB>9;+1f85B:sgl89{=ݡ \s.++غ)QRgҲ2.> k;mO1N n_WԞ‚0 ]&CK!BEgJF6ݩS[X]ݪIZ.D!mH]/7atꨓsu%A7ڧt'mx<3òj >I4n&Rhg3#ΦFFFǍ `sjm:MT >_|'!,&l[]*î; k}F1% &ZB( %#P\R*mN:ΖdLZo޽qPb&S3s|&A RS/`ǎp"5;ws o3v0mb>03aypR  52fؽ{ =1ut8bbN*AHNŅ9{Z[o-7}eXR[VZÇq_jjlKW\3 YaĈXbbbjJXx ñi7>F%.W'R%D,O/йsg"$bD"|BFˍTSܾ},_VKk֠g_5qq2y}uY龆FL,˗-źϿʕ++&~-Re`Æ pss?e'$$ --M6///L4IΖӗ'e| \(9@ggt17txDeff`PNڪ9欁d~sv=Gm#ϹXx1RSRP\RӓgϞҟsrr#*gggJKK;P)S 28qyOp7k+i{j10J݊^324#:G"$\..*0gNK܏>RXJ4E}rZ4ͫkY`eeD;{ e~n|_ZS?/((ap+)j `gaTy>=W+Qs}X ahHsGgaх8YiVimCزe i^3*,QQ͵'/իؾmLLL.\lO׽zBrr̵㤤d8::J)SF&}lJI<N!i$Օ+Qs҅t͹ba;gq|&u??۷&Mx{ zx۶mäIs憇7٧30"!H^.-LEq5bcc(3r<_ Ca6O#a^=v ,--5 !\?ϙUu*ly4&6'"죹,* "A3>D24|=rp"4, yy`ooА96t2e\~["$DIưZF"f;h>jXXZؘ( pBòj_nq}mc8p`ڗWwKy8zw}W]'ߑS(D4BЯ__O W\mW[ șt<4r&pquEfFN8bD"X[Ʌ$vB=h>DEnnpuv(<.6]f?l]md1,쟃{iuۧt'm6=[}!>`jj$xݾ@|>jj$-&Jd,Wq ,0 ̌LBm̴} ObvĠuE5g vuusEfz:.DmE @ /BHcZ^Tb1WMB!mc&BtLmL B!WșB19B!::gB!DpTl=,Ca~"prvv(:, Vlǘht0ΜoprVA/!D]D(++غ)QRgҲ2}~5m}A1h}AwbvsaAz \BiO{*jPNZU_uuu'탦%=JZatw,'gs6rfevyojfG2uȫSu.xz8r;Z:D9UUU(--ƃHZ,~ڇ*s!!8VcL@G̼I9S3s #FP  Gaarm>|ǎxI\_}z*>$sLZaY7id^7nӧO K?Yup5 IDATk6{,Ӥm-ex_rn"D,#Lc<O>_sDHt9b7E݄#{oذnnncl|||e}V\ VX5k8\zW`ݺuy[cǎEhHxm{eSc":>>__?DGGcĉ*װsgJ_!22>2e](S^I&r_#!p6sZ-QO+Hҝ3qvFssMGt\ffX夭[8bn?Hsmsvv (--G/eZ'++ 2eY|1+vϞ=}ׯ_L_cl| _bHMIAqI @OOOaQ )S 28q3}qqJ0 $Hʟ 5qʟ^\OS6D(.*Bke7>*oRüy12үZTi@:Q6gΚ^ VVVH$whv4 GDD$+ff?/S-)bYq(MO@J$nsuCCRYXt-ΞJŰOq6Y[,YXPMGT4y^z!99EoRR2U:}+x'O[Nֶ]O>HNIq}=_ö^۶pE2(,,P(٤5_bcc:`[zi_JKKq)0FlcRR !=ׁ߃MW߿d_y)9b8 {Ch :TfߖCM 0 9sڶ 4!s<`og91ok:.6agQQD!"-Y| Eyy9^ttDȜ`͜%%aw$NXZ(BKH$lQU] K Ǚpzv-lهC7;w> }݇qC[;{ܿ'Wϲi:&/}Yx|\c?Oʕ073 FTa=Sz x7klkg{w^>^]K$FD.'QR\ZkkꘉVp (|PCgG"W77i; BnNvņ*5RM#m}jS m}AwbvgRAlmBZ>WvV*K5555mB!jI,W0 ̌LQ]e>Š;1h}mzp/)Ιi̶+2ӑv %%kt8..ϴG" ȧk/OP+fk\5E!9/= ;gBіRV*B!(v%V^i%B!D^6v{TBQCtZB k{i2!M OkșBCNaΙ΄Bvx[;AF΄B} \tO._CB!çR=|XVi#}+ V_{cBǚBZ=BUJxƍ7e<+ srnaFQ+C 92N8){{;$%%=wCL#9B!mJ뜇 SeRRR2gN2dJd 6B"#GCag ^[fcٲe+<xmvj\&c0q)- {~^޾pcƾwRwwg;`a駟eطo?;n䂠Y(-S<7Jd-[bl]v?1XlBH\W^EUUѣG&Lx <@ii)a\r~~M8z<‚/"zJ\ߺBj|zqJLDܚ5A눋ALl,=l[#v܁70lؾ{l߶7gc'FDJ+iԔd^ ?Lkҏs:N<epa8`u_[976~ VZSO?1?QT/Mұmnlll~}"99z  Drr9++_|MX?Zk0`G|عKaGΝ˗a_4ۖM !k/舿7pnt݇cˣV8|J1刔d8:R=Bx0kfݼ '1n;5)ݻܲ#}}}H$VE!I][{XbxzJGzzz0 (]X<vAiY"!// ﴩc͚x\|&&&Mߴ91'$yyyEܹ /(s.]q=H$M!x'\`yڡ+S =(?z9w> S'~=53 g1dP!EKsBr|=ݳ~J#!__R;WyB!#5{ѹoBiXS"lmtJBA3!c NE!+u}1 !JE!_4!BI|@ B!hQChL! !h:!m 6T*Be(/v(-XNN{lǘ !D;segYcmhș0zXR%_p/Si 0/_Ρ3!-`Y !^iLH,PLẸk풕F.RV>ϲkq&ò9Bp;YGm5>Zŋ"ӵVhoF΄)Ok|tή{z6lZΙL'm`i6!OËjǴ|ʂ |xTWWcaؾ{;w°ᨮFmT8/)SCiiqܹ ^s/lٲUf{öD6ذa#}! 8r(^<v酸5ȑ:,vз_|D6ԸMزe+<xm&1۷ }7qrAP,)u X(c=JziQ\\"Sno&v@7;{zJ?V"r*<}O(Q2 dkJE蔝vw~{v ԩncb ظ5ضu :u$S{Okkv2vgQ˔ԩSXukq+"~f9z<‚x"Wa.^_>Ñs:ۋ 󥩱C[q1ȹyq1ѣdʭ'K?F8u8…Je$Agۿ3`$K8 V^kpX+VÉ*Փ(^ $#~m(Q ]a<o$`x 2 Ǐ CC<|^~.^ 55?MlDؼnN[QQHvŲc_AA> 'ڥ^{ ,Z wwt`xԨј1C3Zn k715+Fn?/܀C?yWJ/7o^n{oMp)I󊊋o9g+FIw|=ݳ~JT> ]҃kJK41|pv] ?.턼c^Ŧov̍a⏑Rqܸq^2y>ӳg/̬,Y1u3Yϗ)T<ܺ$&?_?97ZjO(*Z[lmggg|@Ri^NN|}|d"88X&z(Kqj<)S 28q_\ofk];w#=\JfX\T ===ܾ}[a]gã,_+++H$;G8CXTVV"X[[+,olI6uj 7a^}_7kǏ##)6Bڣr W˿iB)))ARr2}KZo!)9Y:=q$v؉cGۄp)]z !ڵ+qUcӧRS/%$+X,#G-䄤 C"Q|٤W/G4El âɤi^^z!99Ef{RR2UG,#1'P^STTs9= tj[ݻ`jj*ojjaػwFYuwpuuŷn»マCЭ[7zm۶cIɹJ2'8b]KGd"??SNCN NFFH|_};w6;3fS'cx11qXsΞ=^zIwWDG+ge]4cFDԴ3b1厦3/|.NNF6 FFF|26l؈.w_Bjbcc(q6b4svڍO>X7/;vœxzx`HLgm|BBYTD"faaDR 2b`!s`n<:&/0i??_,_eˣs6QtҥK07|>ݻDdr+F!a˃=BCe&0`9#G Gaa!Bwv aCR=~~Hؼ 1qqX`!A2g} !rxg ]aM >?S널COO?߯x@g Qe !8mhLH3Ιn,GV"?sϺo[і# !R֦R=K[ljX4[Rݺ]B9r/ ;nB\Ԡ ˔߹sȭD6ҤȖ-[9vm۶l`߾Ñs:ۋ=*[2;C`BjJ2VZV^Ee$Agۿ3`$K8 V^kpX+VÉ*Փ(^ wrcDfWx'\`{}==;x #`xmCگ-XxKMMf`74s66ob[̚Q#GJ%&/7_<+\]]e7˯wh̘!ƌvGewl[lpI89/Ds*})> `N:777i^Qq1|||[#Gbxe(ia8t=?K,A_wwicرHKKSB&M$cX?{ O$C W S̬,YeY|')c^Ŧovʺu+>2y~~ snĜP(lvfV9oWѳg/]>2e|},R=YYY DyvSLA~Arsse0qD8?W7&Yee%ү]i˿zzz}bi2;ih<CC-Sq1,Z?h~EjWm0TǏ~MSlG#""3S3̟5g58|HeN8;v6;:uJM__I zrDJjL^rJ2_|899!)ە2ej f͛pX~ &By{IIpttTXZCR{MQQQӇ>/Os5~8/Ʈ{PZV'Osxk fco݄!{.gϞa3g ""IIɨDRR2"#!xV>w.""ĝ;w0sl+=*Sa%Ǔ'Op|fl9Ϝ'OPYY'OW.XBM4cFD )<?@RyDDFb*3/|.-_]wqL0Ac(Qj/)661-*:f]BV]a IDAT``*L.φGbx.]q=H$^5 EEE C^^[//²ɹ kk(L{-/"4$jiSǚ5| LLL͛Q*VaCI^^#aa˻{{;Cem??$lބ8,X à~3Gᾄ`9\[zCOMHCø[@]7ņK4r&9F΄ˑsS8kak~A!< hLH3X%!:s]P " I!.`Q QR @M[!GMs&D@̌ @O #c G3! "3=iiPR\p!Z$ I{9 WBf|'mB!Y1]H#Bt u΄BΙB1|B.!!EY({XmB"5,-,I{9@vV6cqΝ9߲JERXYYFKkkBp/mV*9@aAz"!.qu4#ETYƍXIX1ViB!J`Fq\U?8rޛD.@cR y_ԘOߕ !jM36|d`%AQa…J#Ucm^<^ *kn]W!bG Ǐq3xdRa NȺFV"xÇ>r+H|YkԒ%K雯驕u-hnlPqPiBs=sgb@'LMb4)>(> bYפ|̑G叐__dWsJJł3[?'¨<7V|s_߾7n^{5K bTq%..t#&>s?H&xp|7^ SR;w`wѻ30d0 N|.b$|]mV"0 uWXl[lo9s7md 6B" ޲e+x^صkwz[N;;{ |e\JKÞ~/uǘݻJ?+MqsQ ;nۯ?~G1wlT= GV"۷ }7qrAP,Գu6 [; -[eQeX0ҍo5}2nH$?y;vwuxsL7 >HM;v½o?D>|SON-DtOwc„QTT,S{/艩ӦDLXuPpwkk*oI󲳳q=X? .2үE-n:m:;իVx0*6|%ޝ2XQaDĭYܼc2=v Da{u_[976~ VZSOG?bȹyÆ[oۿm[qz6xzbaDOq yȹyErrtL-5dȹyN2X0Bر_v|n@8]Nle&<[##CmXء >" _W=܍mk6Hn}޽=m ^[nΝ;0k͛'gɘ6}\-Yڵ+~TΘD});Ν=F"AxxLEҎ:(Qj+.xXÆ-7||^{ 0DRg>r7|xe(fVTT?` ү] ''˹Yl}V (K<|7~I򎁕IѫWOÇ&yrh|QFcƌ1fhە̔y)Iߺ%-SZR"7yQT]4ۼ0iҤ&|>w|=ݳ~J$<3lH+Vc ~:)؜[ظaLryyXc?tk1A/kkk:Vgx:wRnW&!!2y={j.oo/}}|Ӓ={H_wb.7ѣGҟ[:~WfVnWZch)=P(sZƍ SK+ʙwBMQDy?1C}ܽ{'mÝ_.⥷ ZlGv=zHsnn.-^Ԕ76Yg@R-9t`cLL)ܐi2V3gͪ:q//D,4u{Ih4#%JϚ )j_bafj›݇+1cFZz:31z+r\z !ڵ+q&e0kfݼ '12|s Ï?Rz9"%5E&/9%/T&$$wr뷺;~襤 zyӻwo\pQ&ŋ JbX'/33P#qa=z`۶Bzz憇lߛp{E5 Fawa]903}w;wXYam7Z[$BR֖$Kl<>#o ={<.7-gޕдIlg߿moiZ|*#-Z`HP{&<ѻW/6x\(~LCbx$%!" Ws1Uܺ?۔}*rSNGDOL;lˆ,j&I(cpquEzz)ϷQ&ɐW7Wg ~QQ[VViMTrDGEͭ@Q]f˙H:pg>܁8sus|j6IygFDDdnc^H#""0,d,r洂DDDs1q=sBDfT\^wA-Z&)O1 JEE@}N,#Gp)&|| ՓrcvЬEs}IRTB*"A'I%x͙(&K&ʙ(B.gLD L^ ܿk4Rr5$?_\VD4uT.cϞp(TTn*T4H-gQ=z'ND&?~<6SVZ7D nRb7}g_`eY/]A_|ڵk?`UUѯ$%%߸q}G>(w[;}6"}:._=֮]o6B^hf#_A+^U[1*ٕmx(Y5kg GRro4֭G Q|1֮]%M{CwZg4h.\t\@iq.6mڌ͚ͽ4+WHHHԊ[󇋫#,\gWn4i n[sCZ,yq¥`!7]CU;~x\tI-&&ݾ>;`` Q"y>e˖Y_F©'pu̟7;vn=8pBCV~z۷?w{w{7.Z.@X,[۷wՋP*/Ɨ3#e:?ȅ&M Ɯs?xR,_WcE dRe9ss?W`8u4/_MBȳ,`̚_ǎ<#ƍSN̛?K/װd"|3w.ٝmڴV۷zQZv)S硫;ة3Μ>m~۶\ ÇN:mиqcs*Lj#Av]Xbmy:uiӦFC8{l~aaazz-'vLM]`nUTUj,4ni=zL0!Ɩi ;77l9o֛Z1o2/^{+*Hy-Lf\3ZGk+bccѤqcM`ȑZ ŋhӦ9P(뇻!..Nkz˔sŮ[P3vhX˗c輹|Ĉ\wG|Mdd)2%mۊ+b߾hּBC:G&Mp :uڨlmm;[$ӐT\yRRRu!{w=$<{ ¾L?%!S3&1O@}y.D]~3H3e˖5Ν;%VZgaj[M6/?c߶(ǪU)'OZukk,ursØӐ5j3ZΜ9'Þ{s\\ ˠ ۫V'Nj?~Ua=fÅKQ]f͚k+kX[Yc֬YǛJ9 $a=T\o@߾}{AiqO 6o6l!<oJY_nA?Ǐѷok|0L% oQǔ/_GE@@i(o]01F IQ3ԩ(L7~„q4h0ЦMklDBBB?.PVml0L<NÅ 098̙uAago6[ ?AD3~G5Q9K(Ԓ 1zX̜5 K}U 4-FD98::IXzsU^ ܁.]9b?h<1cOOO3m۶Q̘1 A&w 똜2F6q|pܽw8_~͛ǰ0_&L\.G1fhr9\Gckcر O3zZju4kakVc…8qr9ׯѣF= 0$$ l8FoK/#(hn0}Dd5r&ʎm$"g¿pquEzz $E&!==n&)3Bmڰ*\h#*^ [5?auر7TXQonƞ/'Oaʕuy`ETT /BN V+^]w 4&$8 yѕ3A^+»LR5HSlu,ŭ[W]h,qq6u:N:DzwѾhذ9_Ç`wV1,6*ƏM6Y=E~;BdDǩ _2@.C%ghg( IDATk;;ۂNG|!-bN&aXb%;F#FA={ݑO7L FΝpa۷SLcb!꘦M ,G:uZm^ƜOӽ{0p \ʕڗ VrFr ʿn#rGi@dd@nD,S~(6eLK,V΄?Ċ+ss|$~ڰ:%VZk׷nBwZiWMB}0/ѩSl2t>ӦMo~~~سw/myl僥~d^TdTd%b֭Ri"r&""0Yӄ.$$DD_M_vZ]حMDDd!T}ج IIgD\2$)p\w@`Dtp\kn0I46| 8bD%dI=#N%If滘49Iz=qM3WLϼ8ٙ{+%W@%q+W 7pRz=2m'vg* M>حMDd!$i!I4鉋$X; X'p@:~[w/'뽰Ago^ޖ+-p=Ց0@c_ q/% -8=C}6ꉛe.o,S Ij-ֳ$RƵ$WY(ZRweKp,E(+_9l^)n(+P8!Ek@kJ*)^Ku?n(TץʸʸBѭ T@<O!` MYz k4@kilR},鈛RgՌl9YE˙,BkBkzf49goXfkvEלQ^shkd\"6 I:0JDGqV"Dge!qʸ[[m[YW4q8fVu[TvW†,]ڪ/[[m]_Y1ktikvkʸzfx~]Y\>Tm& /)BWPtn?TlGlZ )hhņڥ_#- R+㎾ܭm$$iP .e&VlllPJ̚%:ܽ>DVFf-W!{GIvնZuKZukt1fo Csm+Zu5{-[budвu[5YDDdhgϞ?w>KĔIpϣXs&,L3vxԯW߁N``ݿ?WeZ"Ջ.߭ZAcqal۲ B.s>rVY3qϣ9c_&۲{un-b.7YDd8CXq!|٭ݴɫ9SW`3PۧB/r A7o{m۠dɒڵdNF5%JaW7ǯ &a #xD|>bsuL?e˖1iDd8CgTל%)=ۙN]]]-O>U\B@&{it֭[4j ww%dժiGjԯYn_w%?+YI$mī؊B)%FcC1Z[,ՑOxۊH2Er4B/lם7/|Uם5V^CV t_w)uYJ$|(SFIyy$YhmUw/p?2}6mيaCO=?g[I5OġG1g| *zC(g r%"8C Pfk`ْEXOHMU<̧VM<{XMիUÀ~}غ yRkHJJҊYYY!#w*UqNGQg:#̕,:IH<=f7{w Ø񰳷-]8su Ǐ7*ٴq|3o> g''DE_Ĭ9sPlYETcء0JaʕSJ%h:nrΉHTRDER{"խTbr}HTR=wR+ΉHTR-@1]n!LD$[*MtOD W$nl$n7OL25j6g+3)oDDB1 Lm玐8H=ZR;z #u"qRK9Hf K-W43H T9̏}HOcF=qL06,g a*RpOx+Q>ɭTTV*nm"""K# TDDDd6PżLDTrҭIx*5>5g""" ʙ(q,Yif˙T㑚 Q'G'xy8׷R݊C '4|qnOADDT$EGE!.>^:>וsjj*ھAn'""*~۶nk9fW6~'U8 (*gNFDDd^uY[΅ak׮EJ`cccTHC^~~ Ϟʗ/5k֘;"21SJ$IZ*W#G")))ef^R &NTL4 +Vs]斣$I8v?~cǎkꫯ0gΜۘ͑Kpp0ڷo(<|Crr2:ws_)>o+++iw WUDdGQQRTw+WMt~)11Q(QB+.44TTREooo;v ;;;QBzjqeQ\9s'Owww(  OOO!In߾-<<|}o}᫯?$Z g.הYn?̬u^Rپ};]q)O"@rŘ,uVΝ;D@@zqb˖-:9|Qm"22R} .dMŋ"::ZmVt9ĪUD͚5u, bbbD ijgϴjJ_ZD*UO< 4z/4h RRRt#[L=:GgϞwu։rʉ;v{.}W-5jZ hBgf^άf͚bժU"--M֭[7=Dd:yn9ĸqŋ?L׼ysDGG###;,# ׯ_~~~5jd9N5PDHHH8[[[⫯YubСXnܹM'^k{dd$5jkkkXYYA& ׯ_W111x.^RJ!((Hoyܼy]tAҥ!I^{5w؁͛ݻ7~u~I4DGG Goŋ:c4kҔ;/Uoݻ7/_fDd|naňp)!_Moٲ%5jÇpppŋU;wzx܆~~\\\p,1...5Æ Ӫ]nDd:߇DfMC$&>g!DϪ*GAڵuCk׮É'p海GÆ }v,YO}[[[cԨQӧڶmwVvѲeKY9::"==]q>"%%{EժUbN8XW9KcڵHLLDjj*85s0`.]ϟҥK߿o+VVZO"""C߾}{:txv܉}b„ ϵSN8v>}Q^=Dzzz" @ 777ѹsgqu-[u<ÇE˖-ppp-[SSSEJT?~|[t2_sDzPXtVLxxxpww"<<\7|S^Zk??W+V{+U~5 ++lϧY #uy]s6]vaXn]7VZx"1tPܼyQ}9[&Mž={ C ۷+H ʔ)ܩYT$6mgӫW/իOsQDž,82 Yj\JΙK= GuDDDEՑCs}˳խ?r$BFJPT3ЫGΣx*[DTȥm Z4-)~mrvI0s# \GcHHHH\#7$L*2.B6gdpV7rurNDE%3dZ0}ER>-g"*2\J$DB9yVDTdȅ(V#RSStcdSQYp""#Ŝ9sP~}L2{|9~. rYbʤ nߧNGiŹΡvX}r?3j7Q!& 4ZŋZ*֯[ ooo<{ Ϝwὶm16b@G?{ }|B\\-^:^3#äXo<)u+-g"*2\([y[-[w77XժU Kջeu\lU|ګ7*Q{gOAzsװif4mn]  DBBVywyFZ>q,4m7ㇹs!-z?<^\@k]V,]eaXV6X.Y2Xlb֭6y6oێf̖^r&"Cy-[b䨑\Fٲe1`̚_ǎ<#ƍSݷcFĉp?عc;zS'1k,̟?޸mnʼn'xbriyKQ: 1;^W*4lXm;QrW[FDEF^[,׮]CU ѣmmMh:uJ`_q 7|6]+Vʕ+K.E]KC3zk#Z"{!MIDATMn{:Tժ׵-['Oڟ7,9N*5VDTd|m90eT:y +++|||\]f͚-ŋhӦVNBd2cdQ>6}MU}{^LNy|dDTMOeooƢa}>|849;222PKlI=XK!|SRRu!Yf<&ŒCTMJh[Y]|oTo?e}O>E]LyΊלȐ ^ةj 2ҷ?GGdV8{6BQZkլc[vcpQ.]9~iA{\Y彨V&6lڊys6-wUNʙ<:$1cpHK{Oq+{cx4"4nx4}) % _χ?~\=7mDRR"RSSp3_a[L ;Ƅ1q:^ƍ8n,ݽձyV6oE[ [hd66ضu ʕ-weԫ_߯:nb֭Z:~}h/5¬31gTQݺ@ƍ5m5i&ԫ5k`2$vM[^=vݣ~ڪcQ=ذv-V.[bsY9c[i1\D d:qtNPmмYS;pǶt9acmv cF#$&*XzDDclK^1Ir!2CXa&j̧RQ#ӓrȘi&cR↓) at~kNbLDEGs.x[9+H(U3HH$ɐ_/7vYgg@fetfWxY[[<˕91"")( ++N` \ht_Ts/ưjC Hñ(+gj|Jȴx_9} ͝N\*xӠ~6f;OL]U3vBerxIyK5X SQaWbEsP$kX) skKȜ'Gs&zV"""2r}DDDf%$05g s( yY!xYYi^sDDD'-!4=CEg"""$n{Y>hm"""s4JH-t;]DDDv;U%=ޔd`#(0"""sk%fgE^Jr%dp1[~DDDT;O*G + 5DDDP%=ԪYb7IENDB`mathgl-2.4.1/texinfo/udav/udav_light.png0000664000175000017500000014013013134046534020031 0ustar balakinbalakinPNG  IHDRu3AsBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwx] 7Rk ` zUIM/EP @Ԁ@iv?;sry1;3qٹٙPʇߞ ҫtc'`T_;+rrdrGHDDDDDOlPP(Gzz:30PX2`#@Ѳ@!_"ÕL;?LW 2vȵh(BEAg """"2ʼ' e|Ԓ磅=#6[HqA^_;P(\HdVedggAT( H!"""JU5lAnno,΁"!II P(l!0QPP,4hrD(HJLĭC`eeeTDDD?o/,2Ikridr6A H$9 >Tq ֹ5 ΐ:B@bЎ#-=m۵ yX4ήhYϞ#:XDD릴:wA`mm GGGԯ_}zF4c 1d8::&O­۷lR7mZ&1cL4_VWx_ 8r( 憕aFWo4yOʲZB! Eq AqI.dV`m۰~!!Hk;#H$9\.GRr4(99C~~<@-3jQ}6] _..Ony aooB>rDn!?Cc/Zc-oƌy/|p!\\\LR>QU4!>#G G-0ላ-=ieԢKG-Bΐڨ B*ML+L #w mG١|h Q} W7H3mA~>m䂌L8HDTU݈AP۾B.DNv</<*(8x A+1p! |UnݺG{#G⩧Rıc`kk]0?qGDD:oؘېˍsG-kwƍhuovzt=%.#T@[)Axww7 !x:"y/\vĭ[ "6hhݺ}#'{̌tt IJe+ef, +']]e_LV @"`޼JEU .[P$aVV8|D!Cm̅]XY*2dH|;P(^^D~~OnvxAJ#(B"z\ߏň#ҥˈCΝѴqct˗ y!qQGA~~>y yIb+j;7mɓXq̞3R "NaXɧ8|0ܼ}G;5lj+)ET'}7Э{$'ė랴tiiQBAA>nێ̌ ]_M_}zŝo ˗#1ϸu&>?_dNZ E+CM=*_|Ꮠ} [ڸO}}(!Et5cd2ֲE|eo\z9jra[V2c߉L7 11QmyBBGoy|MApxMRݘ?sJ8DDD@*Wnt@Q}accJӼEQ/?V=^\+8) sG{l1%Ɣ({)m})O^5S-cɧP1{RMemزe+"--e>O"A\,˜c+\qY|s'$R).]G'HR!m8~\KajWPP[oc8{,=z.^nЩSgK+=zD~~>.\||9XIn,]Xt)}k1kLt3O{k@hL=kX*ܾu >Dnn.z)8# ֮3g'''iC wWgk[崲Rk,_ Ξ\.Gzu1NyL=DDDDDT$  dA p 9DDDDDT """"JU43WIP4n=DDDDDTdj{ģG)* ??_KBDDDOR +kJ$(8ui??KDDDDUX|WDd 33$AQSOV-dffݡaQEH$[:"""zё(٦HAD ۷QJQBa騨  #"""ёjp2&&d2o[oj璈Uco%233 !U1QU瑈 |bS*҇u㔹d6}z`3U4eBdhr\f@fcWU:f>^EDDDR5٦@Չ\4mJDDDdn2rP({'DGG#''hۦ KU٦eO iK8-de4m죹Tո1@r#r?)8v/^E^aN4BWёEW[Bmb-i|ֽ'<ŝ[7q ϘxH_GgN:ٿ{+CC租TOB.ŠKq-BO? 1#G`wk;Cq(9 OO 3(`o;' >ݴI{uOe;Gņ/%q_X0_|QhGWWeKХKۣK.XlZ ֽE#mOu6 G''XY[M6VKbر#lk35otnG2C78CDDDdFޥpN 7nlPkbilmQ駱havޣnŲ <<<0g,4sfûN?akkڵkcJp""N{ݻ%8:8 -Z5<m܈CaggcyF_\~J4.YfjݐbPGB=Q!wq7n -JYѪUK̟7nnn(,,Dt4u{D8G`E7nFnTLaˣ_IcQ0a">` 73-履,ԩY|0zBCPA#lGÖMT{tm[w@Рaca:q%c6 ~C9e.U-C3$`+W!0F(,,Ķ`޽u @ 6gΞڵpeV-[bS^Wzyyʹv:Λ7,T{L Rǎ6nĥ˗agga58C%K!>>r\׸d;w/DbR|1t;X|\68~CɬxWdgbIl HֵI%""PƘAUυ1{\WmFLJca򤉨W])x71qJ^UeFP"FpǶw;{U gѣx*uf.3ݻc1 ???;l(>`Lm2qiǕ*NAUCΝ0eTo&;aoc-8QctP0h@ 8aQ Q( UQ4JuHDDD+qPO& '>GDDDDō 77|Q$fF{:?~G$ ޤR)DQ@<<=q"w x㭷ʕjA@DT{]ʝ³W)|DDD5DRG% sL>K@DDDDD[QOK)PeOU* """""/fOUF:8̡!=DDDDDdZt9c:+w IDATw/K@5+jg̵9w/$'%V5kAbWU0?޽XXS`'>wVf剳2O Xj:~F7 uxa2fΜزy"#K9OTuaupN lllЦuk3{h+}-^|̘>Nf׿' ̐e/@rr2Ο?7;}VX[[<ؼiի 80U*[d1^~ ?oQQQu^ FGlbto:ڴiZ~9/8q̂ёiGuÆ/[f,)??^{ 63 ''Ν6nd*]Q^^݋ 0z.QVa1Vƀw |~|݋˗qF+^}u~G=TuF7 < aĈ3A<>v;",l% ˽666زy,]+W._e˗cZ]^غkt >~h׾#vY&֭_}@x}@l۶]m;w0|H<4>~xO?{ R) JQ{Nqu7ѹSg4]:wAt z=ig`]HLL)x{30䝡=kA7օ+99& mp(>Loذi'Nɞ8q͚5K+:v젶cǎe}wss+&rbU=W^E J쌷z /?949Xg'A8r?w!¥#!> $&<0x?/Dq{9R2 1o\ԫWBnݱaf6i7lPaÆm UOvv6>p,-] ???n_>n{b۷ض걶B&2,]\MyfΜEc]HIMEvv6GDSǂ?F⛂Mb99=xj98yysCIǏŜ9syR-ͤTi<GCvv6è_rYB3sl=w7:/C2vHLLDPܸ<~Jgy-D@+n܈Ɣ+/o =g.N>l>}5z a=QEqlr ݋^{#1h@~6u*6mڌiӧ#77пL >´3\ CP|7Nkӽ[7|e X3gAP]*Ϙ9 4h7xϝnj2LcI'brP0߿oooL6 zR嗑)>|}}1%8XmQcp?7ѹS'lrYBuغky"]c>T/666=Xf-F޽ kkkcƌV3伖dlzJ&7:SN1޽_D||<ƍD1ɧ3Crbo(}]! 2v*2 X$"zR=w'd KBF(Uܓx`ٻųWUtQ2n\cڴ2dT-(2 ADDDDXs.|1lPGf(aT~||X$" QնUDDDDDTADDDDDi*6:RADDDDD"""""TE*aAQWĄDKBήh3BǺ@JԅԴT$. yxy:ZTz-2F:-jzY1o\Ǒ@!*0{KDD՟(*|4-OKM껣RS +V@gqr9OJw/X|9Vĝ۷*|%,]UΩӧ˗!mN:U՘m8pԔG?tR[1wncp U;&KKMÇcqZ^A:u:yʿKCdn2<W%%%Sm'̰u֭[ŋ[nݺbѢXf-Juh޼9_!}.]Y$f""J^zyi)Ew|hZahPB.DNTiWYKkעv%K`e*r/^իWuVzU1`km/Z>Z;4, K/FN;wŋ1l0+U[[`ܹԹZC΅!ٲe Ν;q]ǎjXÞ2emrW%'%}7oFsHK.*u PǫRZf6!5 P[ꊔղhtI-MΝ1i$eʹz*zo(B"hm7lP~_~ji:wvL ߱7>N:R%iK6b$$&"66Vm V:DTH^xgTQ6<=i&=9ېyy͚;\L\tS2fVV2=ez140ڵE \_?@(EϜ1sEzF:fΘ,9Ȝ/4]tvpj۷7WZ5jNR[vI4nBQM.ss@Rb{Rb"= ʫiY5ɓGFDƍ*e˖ؿQ+풟Me16ۺp& ΝWK쌤d޽z"4tyxG+/dO)jȉIT(4N ⴾ.A< A\ӶK})Sp~|}}4/Z^}t[6mĊ0̚5 m۶AZVtJzDpdL4 I1c,+wXh(LBBqc?yUi|>^^Ͽt4iA'a h<̘9qqqjΔD,h*3U~:Xb 9>#׺^[\7(B{(k\_҃k*aÆbذe0~.My]1x`eC5* 9r*V /S5ٷo_W~AdFVF..7F!""zRhE\=+ރL"t%^e(ԺmkK@DDT_}.gO?T)V2DtUw(B,5нi(a= EskQ=DzEf$wB<ʾ|/]ufa] %]rerD HPX(,:EW윝]qQtҡP%;vΉ XjRW\]]qe4k R^E5BW5 E5k)aYMq-* ? *'\\\Կ4 5)Rh+.ܹxnhLk^jCE1``] %Rj޲C"25Qb*DDDDDdz"T/4Aǎ*̵QHKKtt՘']{::օu iHb] 򄋳 u㵨3Zd*ltXH()xҡP%r2E]zg]9XHɐA92 "õ(ZTsR{:DR-A=󏻵g]9XHI_]HMME 3FE5Eݰo/ZZTsDq3=ʚEf]YXHINJLBI^zlע\盍""*J*/77Bz>BD6:Ο=T899mi EFRNvQeղSI6:T'7--/ϨI i)+V Oqֿ8~ ӧOWٻ,[W[XK.Ł*S s6'ODpj̶8CCj#Xt)֭];zU8V}񥥦RST1z~- QWN:XǼrߥtM!2x9{[/Bn]ݺuŢE zZ[nмysEB>]tHDDT%R=omд|Æ hѢV-;,\N:Ү^K.E׮Eu K,Uݻ,^WFV=իVc ^p!}whX,^Nܹ /^aÆ_mD?sEΝr. I͖-[p9:vw}WtUFGE͛I. E0 @""J!jJ4״. @m+RRRTˢѹS'4]:wƤIԖ+իݻھD5fCݰaC}uܩ114b8}>zJZӗ-[ڈ#X~~~6lXQeEH?<=i&'\TW4//=Y`˗.ӠٶLOr 'L@vmxBC.OkzP(_с3gLǜ9sp퀙3k-m2Uw5jSO-;y$7nbSe~e{ )1Q=)1nմFSj##OqFӲeKvOӦMq2_m]pADsΫqvvFRRZ˗)L < IDAT&CAAa@&A&!$$Dwz6:\Ǐ9s"2$ysä HL/.1!::yر=g"#O 33'0g\L0ިrfLaHIyL?~ C :ع".8q̙ȓj_m5hP۶mCvv.^iӧٳ'͟ĉ7~Zرc Oh ЛHNfʬc:J6([b Gi2<߇/ "'""2'Q:2/o$<qqej*O/ARRLqApd jyӵKlٴ+0kl( mA'k[m+A1id$$'MČa2u> ƍsWY>xz=ѤqcMq'h,0cLA.;SȌTaHRÇcZk*4Q"W"}| %=/o<[z2J/6l( Z&cwҸOڔwۥ <V[6tP+Zڑ#G8:9aժ2 8Pc}E߾}5) AfUTߪUpqqo1:ѓB[O/bu_).}|Ue,!OԔͭ۶tDDDJ!jrcOF`5 *9!""*EES29m%dFxQ=DzE b׬<ʾ|/]ufa] %]rerD HPX(,:ggW?z{t(TɎ9s"օuWWW\|͚7TZ^EO0B+Mk^j}"S0/܍ĄDKC..hTkօu [4ǕKpY|k}3gÜٳ`W닱M!wQT𿹠B̵;Br3 0̙9pF=\@n (J=dgq=xF$a-(KT@HC.$i4(z'] gZk]k]!7! z{zޞuޞ g:,9sNVZ;w"iKc]v 9mYw>ُ6/p@"D >t_ýy۽f,[;']ɓq[ ];7ݍ h4(-):];wIIkےس=<F߇رhbtv9 B0H#0("_`P06.Rҡ/W;$o R#!q!a*5OoZ[gA!s5~r?ј3Y_f- 6m`6OF#txώY"x,ۇ͛QQ^gPQ^r8$J4=~(`|%"_] 1}WCe _ùoC5|rS{?MPU}()-h= iF\8PYU)޿?>= :;sAb-p*QV^.9'wu];o|pt#Oȑ#uvg.?ozHQq#:Ķmi4m@>})؆x ׿tLDDC_uvt $4Yx $$$ l[e+JKK]ZZ:JJJ ӦMwTWWcU՘9s&r豋6l@TV{WT)T#33Cwu7 "ȵp$;vرcVM2ͳ3#=2?%K[kokQO,$cTDD4 ς("J˺fkFduͦa9s-p)IIZNrnfϞٳgKΝT|NJÁO{LyCBPUUiQ߬Y9c ̘1t%. Vr2DDDw (m4t.uHw"Ѧ:8ApG:&LJ֎/nDQh. N>l~#9 Ac"C4/f[.l ddzTqerD7R˯ue_]txHh >?t(f5}fAl ރmJ ?~~R 8pjZ6"a/rA)nl\,N76ᐛh"5 S!vll@FxnDj8ۏc[șХBPDaa7f>EC}|X)T#||/< Ɇn<--x2r-9KF/"Wo08!z}~x: R=k ]]]xfL`T-~~(}Jbz-x2uZ[!m{싼Rכ""۔(JsϠU,׿Gs8.ʄb⤉nȵDAtu>bN"pA 2rș O>Se>#7ECDDz(Zt  1z`0Af㭌Q{Ųeˠ*\CA}PmmMQQQ3Ocɒ r`7DIDDt{==@oO: DoOi39'WΝ;4eKϥ.r;tnvcpCQ1O?÷4<[B ""c!d`} Z1nղn|w"&Ozm1(v{iH^ȑ#1l05 k/؎ع-L((L]ޖĞ=ǟ6>ĎE˹%DDD@5AqMY֘owux|h4E\!ɷ}HH0 cǟn>އ4#ҍ-r[n?EPpl=oz S8~o؊<  1󦦯LƜ9Ϣ$6k L7G`Piu^|2)H9L@ @ҍS%#"}Py3*t *PV^>\YW׽gB^xDD49˼!!CBt,pk878|B_/_nʳwظi*7oQU%ؿSGaa!6mڈ =C]}**ewǧ>AWgz})؆x ׿tLDDC_uvt $4Yx $$$ l[e+JKK]ZZ:JJJ ӦMwTWWcU՘9s&r豋6l@TV{WT)T#33Cwu7 "ȵp$;v1wL2ͳ3j&>p$ij ,ɓg:UϩS0m4GD@Zqw1;zѣG!"Μ9$IZJr89x"͟T.m5 " ٢GBffBt(|aÆ!?֭HJNU#w Z:<W*ّ>>2 GEÉh˙con=7sx䑉(.ڀpA=J6?:o֧+#?= \\.9HQ7G?a<`̘!&aEDDDN-~inkm:<¡njz:8UObb"Ԃ{8KB;.vI<?oBsApU7s8z(`0c_̹|XH`@mm {bc!""8jkG_P%g򗰡~0zqP ̙c`=p[d1Q[W+̏Cb׮]~݀N|/kqe 8r0eeI jQSSv ev [H9%qc{`^f&wBSOyK܌h,˓,"'""R(V_@gLҢN%u-uDDeEYkɥxr:ڐt)u"/7OL*)kTGUT`ժ' 99e{l22\A69Kb*KGv"Ac"EǙDZ|.[כm-Rƍ>>/nJ-֕}wQzs!*s<#ӡ|-x2T*N64`\8y=4 'Ve/"WCtc#>xZ[Z=&R0ba[l dH[O'pڡ`t4ԩ*Tjč'}wp/rqqnl dĶ@F񉉞"rK-UC\y@.g:ȭ|qř"""""rWqAG4j^ aH BCUgqtl C9]hc[  ,4 cǾhs/:i<_?? OBnvOvl ރmi /gR82kjpQ싼ȕn:Ciz}~x: R=k ]]]xfL`T-~~(} ps8g:<ӕf[.l ddzBx3y7HNDDtEsϠU><᎜8q]N Ik`10N5|SDࠃ<wd^߅'~Ʃ2|!""r=A: P=0  3Vs㨽{bٲetNse !)Ǔk:[_ΞmB{[-⨈nr3 Yǽ1ppÒ3dUعs'Lq4e^nǙtX( 7W੧ """DO2t_ýf|`P0zIӰ,9sNx'=5ỡII [+/KLzmΝoa$DiGa$dxD$y=!v8,Z]έ-!""r(6 kzͲ|wԴt#C /IDBxHH;tK|>ADn?h޲ui,CdykۈOHDJ}V|Y@Pp75}gf⾟܏(m4> IDATyW%Ye`1;8M2Mtۿ/\Ey#"bfTT|*ɷ{Mg೿ X:_xhEbDpH:* eee(\} ׇ˗!6nڄ8[TUnFIi)T=GQXXM6sxoPW_ʪJՙc߿]V9x JKKm\8U(+/{:N7>^xw8sNbȑX:<ټ~kЕbnq[ӡ]FIF{nGm:HOOCQToيӧmпpkHMMHDD4 %<\gGBBLa-7@BB`(ܰɦ[iiޥ+0mt)..Auu5&P]U3g"/7jhDEiewyEJHIIEqq1233o1:d|]w))<\ Gٱc;fuߔ)S0o<+{8ASlMǢ,#,,f[]X>_݄QjJ*r:8jW[2O{#틋U*tvvҚ,ɓlIzN:iӦI(c=>s $yR%~t֬]?\{܂ ڊK.IG[jCD騫_ͲH@Vr)C6ki\mojgGXO7_lm4{Wh4̱ ShG9kbc=Ѓصk_7_%y222fZ\rC/9EYY<?kZԠdm+//Cyy|BrRqp9O=v-Ess34/OHI X}1-2J:ٗԵ\A9-ue'>hkkCҥhn!:Z<1uzRScQVQUVCL3Ȗ챍@^nsrhd/or,]"""k֚˯cOEww7AnN6e-Zk`ʕt\;WoP&BTzM5nV ǂeu;FDDC |/"Ѹk˺fDFiqYl*kZ陙s9"g뙒$Vmn٘={$mܹNg~8d$s=gJf͚e3f`ƌV+pQy?/v ѝBn#J ݥv7](mN"t|^u0qC ""r+A[;[pf@?`'DDDt[Ec.^0:" ~#99A=DvEAh"-_>DCͶ]SpF\7nA_ʾȻ(u9P}9~Pj> k * '0.~{/yAp$jlE^_J7Oicbq-DAX cce-x2r-'8v t\P0:TjT*5ƍþ;8 ӓ 8Ac<&Ȉm=y1Ej@{:('"""""r%(JDDDDDn "t38ADDDDDnAͧWq'4j^ aH BCUgqtl C9]hc[  ,4 cǾhs/,ê\i<_?? OBnvOvl ރmi /gR82kjpQ싼ȕ8 o<)ь |l ރm쵅.<3s&DQP0*i?OG{?Ͼ{\twu ٺm>Ym{싼RDkDDD{gP}*OC5ǿ8˩2!!8i""""r-Q,F~ݩattYSz}||GnQ:0 >b C`0 om0Gݻ˖-Ns+cp9HY?(GDZMookmMnC ==670==tXr本^ ;wDҔ).=ƺ8AU: ""6"DO2t_ýf|`P0zIӰ,9sNx'=5ỡIylu7&MNBv&MN®]oKGDbϞO@}bǎâE"""Gl ^`|A,k̷{HMK:<>4Ͽ"^۾M$$GJرOTGCJjOHDiFÏq9{-["(8DvDH?۷iqNlySxvn&FcΜg~UXc 꿃#0(ش:/D><@AظxhGa# /ԩSynrCͨ(/C3(/CYy9Tose%^] Ξg?Azu'f-]Չ!!wu:TP5>T˗/7ٻClܴ Uqܷ܌R߿ϩz֣6mąޞUV3޿?>= :;sAb-p*QV^.9'wu];o|pt#Oȑ#u6Ϲyy֮+7")'#kBL0sbRHHH >6 99ٔzV"-߻t`seMp=%Ƅ1sLYcm؀(.@Iq1S))(..Fff j(dffR"rWxd;i$?^"__.!""ec-MmZmHY招-vf^4 ơ9avh|?g-^G G__ѣd X?؅+W,G~~{AAXbl]sR!jxx! j=`̘!&aEDDDN-~inkm:<¡njz:8UObb"Ԃ{8KB;.vI<?oBsA *đ#~:'xd/Y,牅YY _: ֡`ElDDDq`!yF֖+Z[ BYх΋.|Aoojk Kg9Uϊ/aCQ:;;`0С̙3Gv`=p[d1Q[W+̏Cb׮]~݀N|/kqe 8r0eeI jQSSv ev I!xb: Yas Ǐ71شq#N}ܭuO=v-Ess34/OHI X}1-2J:ٗԵ\A9-ue'>hkkCҥhn!:Z<1uzRScQVQUVCL3Ȗ챍@^nsrhd/or,]"""k֚˯cOEww7AnN6e-Zk`ʕt\;Wr@RHWg':Vl!ԩ;4 ̟/<$""wDQD6uVtY׌(-.Me[<=3s.23Zl=Swߵ͞=gϖ͝;ש̏}LyCBPUUiQ߬Y9c ̘1t%. |u "wֈ7,Ler3Qh.]뾑ED\?h8AJ~hr34aO@DDV(Kv}X'&̀{/$"""lj1C/\\|l}HVn"""ۊ{:by{DZ|.[כm-Rƍ>>/nJ-֕}wqgDZ{pcBCU8yFC!732`[l dd-T*lhq{|i'NBVa_=E":76.{pM4;6V6ۂw`[ #GB|BnDj8ۏc[șХBPDaa7f>EC}x>~HdCN79_Μpd tccqy{}KgpC.׿tG32{d-x2̙EA[<Pv?"a/r.$W+Ͷ]nkm 6r[/.r6%ҁ=3A/&O9踳~M9q]N Ik`10N5|SD|U)GxsqGt]xg*)"""D`0`0 2oe<7ڻw/-[NT9W r'ӫD l\C\r> -[Y~t]n 7! z{zޞuޞ g:,9sNVZ;w"iKc]v %)ABB]3gΠDDDCӫi=po` zY-k:4,KΜ.^I<*~|nhRV_##Gl~஻!11߿؎ع-L((L]ޖĞ=ǟ6>ĎE˹%DDD@5AqMY֘owux|h4E\!ɷ}HH0 cǟn>އ4#ҍ-r[n?EPpl=oz S8~o؊<  1󦦯LƜ9Ϣ$6k L7G`Piu^|2))6}| D#}ؼeh:{e(+/ǁJmī^A3!VW<^""DQج:b;8$N@YY ׿s~Çj a<{~6r3ΟUQRZ9UOzbӦp7סwuǧ>AWgz})؆x ׿tLDDC_uvt $4Yx $$$ l[e+JKK]ZZ:JJJ ӦMwTWWcU՘9s&r豋6l@TV{WT)T#33Cwu7 "ȵp$;vرcVM2ͳ3!>clGj(dffR"r_@FO~[ToS˅WDD GoE*Wp *@^{Whmj{Z[lȱ s;hG3'kb<Ѓ쳿e/f}}7dϯ\A0>4(0+W,YH /z0X.1cbP^VW_=y;A\ X#jZK3O3f %kkT=طoS s[ll,Zl|/ &~8v$Ohh(%eNJ qK ?/?Z?t2=ۄ8{ 9$'ge-D~~jk`0P[[5^XXѠE֖+h7hBGm dqSX6C/9sḏnK,F~~>jj%8zAڵ ׯՉ<Xv-\ GƢ,IZ-jjjwfONG[[.EsZS%eՓ Z `ğ!7'G`mXFrs+F#'{ V\t|?Wc鲗X(X֔p=^~e{|*pL rs(k:_^+VNC__ڹȗt(3SSmBrX0>̟/_..OKDDC ܇,"Ѹk˺fDFiqYl*kZ陙s9"g뙒$Vmn٘={$mܹNg~8d$s=gJf͚e3f`ƌV+.ootRX g)f:]h}#ݥF$Ly?psq 'x:"""D_: 7>l$ADDDEc.^0:" 僈)]RDM!l]o¶@FwJ7@: r!___ܸZ~+"n Uܬl>Ȁm{-RpO'NBVa_=EęӍ=hmiw!] IDATt8&H T+m;-#m!>!'Oc_jPRR7nlEȕnPXdfl\C-Q|bC /ƾ\ŸtsDDDDDVDDDDDD.?"""""r+:ȭ8 """""zuxDF]| 4TqGǶ0-3mK߅6rH B06n|싆>GA9{:bN">@<0'Ρwɧq'h\OE#F`08TO@@   q޽{l2t:ʹ2Wʘ} A&Oò9ELϣȇ&e4Vw~$v| &'!J; &'a׮%#"g{x'caѢrnm #DA`}MG`PE`\m5۽]C_xWvHm&#LFBx[磏!%5 '$t#~G=Oc"[[F|B"Tj$ߴ8'?CL缩k<;7~Di1gγho*Z,Ӎ1lll"FAƍeZÇ݆Nۇ͛QQ^gPQ^r8$J4=~(`|%"OZ!!CBt,pk878|B_/_nʳwظi*7oQU%ؿSGaa!6mڈ =C]}**~Wg~|ztuvX(--Ŷ[p9TWU\rNŧ:MwxF4:#Gbݫlstg]CWnDJӫΞmBzl\[ضu!== ޲ӧO3{WאhhKyΎ>˽Zo#PaMylEii)KKKGII 6WVaڴS\\jL?p3gD^nx=vц ~ #99bdff:c>tFAASR$y䗳c;v)S`޼yVp|^O()݈%-Y[n_݄QjJ*r:8jW[2O{#틋U*tvvҚ,ɓlIzN:iӦI(c=>s $yR%~t֬]?\{܂ ڊK.IG[jCDd|/3 'q +}A+""Rm0Pզώqcx[Wh4̱ ShG9kbc}ɅF __?;v\'44mm2 '%y~Ǐ?޸ᅅ󇿟? m砃dlnt_o_exb!yVBu((X%B-W,\AFc -\=A~A,r_†"tvv`šC53gb{db磶VR롇Į]p_ /-_.ɓ5kʕ0zqa,ʒYբ}}7~'k[yyܼJ!oQq ^zi)=~]O=v-Ess34/OHI X}1-2J:ٗԵ\A9-ue'>hkkCҥhn!:Z<1uzRScQVQUVCL3Ȗ챍@^nsrhd/or,]"""k֚˯cOEww7AnN6e-Zk`ʕt\;Wr@RT8Cy<̟S&"+? (m4.뚭貮QZ\5ʚVyzf\dfεz$%k;ɹc={6fϞ-I;wS+..>/sϙҢYfYsƌ1cJ>\Ap{M98(,Ler3Qh.]뾑EDiMuqus{G:&LJ֎/|O""ۈ(3t…їtsb펜 ""dA4hlWtx&C4tٺl ޅml]0 7n1L|}}qFTj싼Rכ Uܬl>Ȁm{-RpOWj'N6Zþ{\M"tc#>xZ[Z=&R0ba[l dH[O'pڡ`t4ԩ*Tjč'}wp/rOy:M-'&z:b|>܇7[WuK0LDDDDDV|z5j^ aH BCUgqtl C9]hc[  ,4 cǾhs/rE>JiGPN64tim{-#m>Y GFpM N76>}q_a϶=^[33gB"ot|C싼ȕ8NWz[כm- A]>nc_]tݦo{U?44U <Z_^TPL4M(k.qSu 1T'8 wL^߅'~Ʃ2|!""r=A: P=0 Hύ݋e˖A9UΕ1 OR`E%8x ^Z?PTN(nr3 Yǽ1ppÒ3dUعs'Lq4e^nǙRS/{ࣽoMOMx+CQ$k70"q70=׬vk介1y#nAkt'SOCAGǎ55jkF׮o;wIIkےس=<F߇;k$ ZHY(˪tӺ^{bn]+.ZQDAqkb^j݊UDjE땶jJ"HBN|?ɜ9s~gr ̙.]1ut6RKKجy|͚U۹sCB!wuCkH'ߖ-Ͽ;\drw֭UΡS#!a^L=h`9o"ÿ{la:)>U=+ѬγcѪuxzyc̘qVNlbNWLucGMRȊc:1xX"99w`:dN>W IYk}"$%"1) G|omr2.YKq웣P J̟cx3Ғb4wrҼnҒbD-{ i'R@tt&jjK^+źXÇSL*'T&z*\r{FFf%Ec>|_%Ez9z(i\r%#1)INjPZRWƍkNş.,xxx`%\hW-_{h"kR $U"vx$%FG3Hu>Fڴǯ@hh 44+V, 1h@MwބnݺP [Cm3oڿWMN.Зyf7nɻ~F$$$ $D.$$+Wu8pǯѣ{w@6m~z1QQz5+/NZ+ F||e~noo{{;{#..lt X1lPDDDҥl_t)3gF`С:l1|ڴ)Ezz 33gLz,DDD##?f|y7^t:e =$ =$bbc1c4ʙ=W;P\\ 'Nb̘1z뱵3fLGLL 3u15j߾oߎw8Y̎ P(pdNGRSSQQQ^9{$%%"))|@r*U+j+^1/E^^Zh C֭[x{{cVT r"""kJ ЩZxz!FEn½nVW_y?;5 99BTdyi}k+'$8[|5k0o|(J՞ CTdfΌ@^Mx{y#b ̙;IJ¬7gcY\0ud.Xɳ"n-^'zoF'DFih̙;y,Id :7ƢE hb 97Ǎ3P\7 @{ 7rsnv#7-caj9]zs]Ջ/_|Q'mر&WX8a&Liu뒫7rHe<{$HU tX ;/!""zXFk{<5ellt!J)۫e+3/Hx T6:x=HAPekW֭LN[D)&+$'"""Xx]  ;;̽EŇаZ o $,A*2ᱮ,jX 'G0[B"K=vƉ x-4HkA&!9tvvV[RRsYȒ8FvO.`g{opH$-"C. 0Z 5cn~ݐ8}{Y1:drd29|v5E 1E5tPu]|}m= x-RogYz4o""""""p"""""DDDDDdqaltTS a _@ii [Y.5OGk@j\ %%(@..ۥ|,,;)s.u($sӅ ~Zh8x-1$R 1ʑQC.\08-.?>,IND)xlY0l^ V۵PRRa#F@V8t,j8j,r`{:lݕ KM7~C䯁$ngQb""Pe壏>Z:OD{J!"+H?Ĥ}ѫO/"""",AP]jܤL"A$<KKKa&D򔂠ѡP(иI( iڴ) 6m %gԡcY5o=8 tJ%AӦMQvNe<舲;w4=Δ:?omۆ~,ZAV$@eqqp>ck\KnݺY+ ""AU;csw;6k;)aUgJvmz{$d}R@&={b xGǑv ~g6ƶmOxzDؾn-g^<3n]b(.1ml 1e׿±Yj5便5ηs.Bv;^GaaN-[>w[?2C (8rW7tGB*jqz 7Ѭr> E&زjuRS|zVYs'MggdžU6Ƙ1/֭BŢf5.3 X[7O"=N[ +FyJ ֬]5IȾtk#Gɷ69K,F8Q(%ϏzDDT C_ziI1;9i^7wrBiIQ@bb"▽˿PVT ::ZXz5%ŕ˿b]ZLH)&y*qqqXz^{v##3)>|0<JsQ$$$` z2֯KFbRN_iI1XS^?]YKjUZAdm۫8sύČX<mڴիaE/\Л6 `ŊXa# ۛ45mqBppMb&"MUE7o ???@M|95yo؈ޅbʕX2X~=zthӦ-֯[#F *2Jo{2xIk`e|<AAGxxi# sG <Ƽ7d֭8}m+g {:Ȋ*/7Xh!&Wp jfE!)| ?g#H-8(U>}}}u^r^EDD ^eh]c뫓.P\\IFP`N ̜9S'rΟ?ꜛ Jc6:t/^Ӧy 8IDATOG޽b9\]]QQQ/RY=$;'11}6c3̝m,9ȺTMEo#[2u223FQC]Py]QKޱcGdddlOOπI#%IrlGΝyZ9WXgΜAdD$[@*?qvvFA-}Νɣ58<..vG\\\ P5:pyy,p=\v sS&@iӦ &&P(HO@l̜1H݄{;y)(+ŌL*gNl,_;v@qq281c\ck?f̘gcj|Uվ};l߾w*pdz',, .͛7P4L6M's///sHJJDRRbdEh!@vGci| <<<`pppȵ:dnݺȨYɁ7fEE "'""&AԻ:n\.F.[x Fn}g(}PPPY oo/DEFٷrBuH\͇RD^=apߺ[ɰ0DEF`݄7"fLO$zs6 SLF삅<+a%xqmtAdLL6]o.s Β.HVncXmLȑ0V*[ $aqVQ(|xzyFnn栅nh]_U"<|l8L-_@>ݵK9bz/ꤍ;֤G8w„ <͝n]rFczӒ$A6`[{E=, txzy#ZW˽~ ^ޚ2A#hZO%!J)۫e+3/Hx <""NUvjE@: cAd`:uE6F_5߼^ V"D%HRW@&7<֕E oUCA9;pq u($cjȀBkjd2ΝCn]aggu|Q*:\n0?>,r{:logtyD..2t`^ R3Z Y?ӧGQaN&A&÷kWyY0YdIltP__[@^ kԺ:jYDSy7lHTlt """""Q,c: : """""o t8DŞ"""""! """""&{:HTlt """""QUDDDDDdi\A p"""""% """"zJ5{` VDDDDDD┹DDDDD$*6:HTltTOKDDDDDTDƨ𺖓B[D"w㱦C!zSL#wñcjcu\.3JíG+gt7nfjtMC~Du䠥C!zZNmO|֡Rݍ$hT&}2hM۰*:uuDTOB sz5_Mzz A Vi̵bMܓc:Ȃ.6lĸzX1^%T׫!$'""J~3Q_Y&3^J֫ktTzY[Au$H͇l}:""C:kӦMP(TZ_n]7  3WT#f^ů{y/l01~c'"/E†c\v  ɓ&1J='׭ݻq888wޘ:u*?͌%(8pޘqsnVkF%&cE͹1mMqU <Q%@mӧ{M6sNHʄ _cZ/qu׿ C Gǎmh׮|wxwxv@K#cUPBiqKu^pqfL9b+.59sbܯnM;~{Š!ðQQQů;vڅ¿W898x@>>~"rrsun<;l8zƠ!co57(3fTSꇱWů;="'17&/ʚb1>̉U+Dy8p=z>#..:;h׮y!33۷o4iʕ+:ر#о}{|G?Od24oFBaaacW {h۶-бcGF$"/P5kѱ5r #GidgdžU6Ƙ1/֭BB6mN ]nT 8y C wuC7?$$휔JԵ^7lW6nO'7c3Oވ̴T Saϰi:L=be>mقeKXt 6632f4^z;%ܰ6y==5?;y{U>̞DZӝJ,{M[ZVoT:== .ƍQ\\#G -- V?RRRPTT!C`Ȑ!p ((3g'>>|e,^_~FiӦ!''׮]ϟoث2\:x|G(..|xch7ww\2n^{u.tgK.L悾}:<}B&sALaUz2ٍ $KE{7fF̬5ӎ311q_AډT(+*ő/y}H?yRݘzԵTRiC{ߔCȺ bU8r8oLp"[d_ g_sތ¬9Ⱥ3vه:a;t ֮Ed둘c| R"@NAaK2zŒ>2(a@U^QE=/?'/?3kpm6=MϦ Ār>lpK8*+S`sp#s߳k:?&F>Fbj}Zt>e浾q< ѻwoMZNNx Ϛ.^+Ͻ...ڵk>5۷8~xn߾ ___\~NWeιsa4[^=<=qd~.2;???M[ /W=,M#F-ӘzvP\TdRUV#?׻muZ:<<z_F@riW&L৞ѫO7ww \cl;]u~t^ Y^EF?7_} WWyn{c.bͅ\&Cyy9zW>^Um_f07Vc1hܸq{Ub Q}em-rvvϏϏݻ3#fdݻW,+***C#{ > ;v@ddv܁#Q#{eee8Yk}>/ݸnھ];dggO5櫩$Nkܸq[uscU5FOVj܃Უ`?FX03fako}Zc]7e1s:~eLo11W@:o*`ggu١J{mÒWޫW/߿"WVGB-55]v՛Gll,`ooNgcֵkWsI@"XS yF;p?po1y:<~%?޽? xՉziً?~ Kl@Sn{mÒj GթK"66۶mCQQ k :αϘ1(++^}ܽ{?&Olڋ1g̜9iiiP(HKK6hAqȑ#o>¯a<۷qg<Ѫ*ׂ͛ĜXbv܁"(e8q"cƌA ~1בȨ(\?_(--_^z~^uo"vA,:_1m4q,]Mh;7tdf23x}4OǡPR}6mjψ/7_EY\roF{|}ita,Neƴ<^8rtƊ(=a54`+u.` łE1md(<9bf,:gϊ[˖ÿgo͔b^[,dWƔ)S"SOa޽ضmZn WWW,_fͪsäI쌉'bxE[l'|ggg5 SLiچ s"<<\s.pppqtR)cVT}!/<-2~&Ϛ$|{7:t„ 1~+X 9Z'=$8[|;wgkz^,W5ݟ&NBvѳW/l޼Ə7 Ţe"Ͽ@RRmBgzz >ub漉ݺ fΛ2}&ž|cǍסW =7ާ_?,X֬Z~7 {|}iԩi(LBHk#oM.E2zBDo?e.Y)(UhPH$rW9:֡Q=wU)())u(gg'8:6CV-kz5yJ=ܺz8c¤wIc$.Q^.IN zmڴuUx:C=Tg3 mI*[RوB$!4 wՕ JT8^EDDDDDd! `WuLDDDDDdA ,H5Wqh5:l+n# """""yD FDDDDDDNM$$W{ȲrJ{D Qn똈2Uc84#9??-+NNRx6±#""""PBͻJUCzKF'ۭtM$XB_v0wIENDB`mathgl-2.4.1/texinfo/udav/udav_cmd.png0000664000175000017500000022013313134046534017467 0ustar balakinbalakinPNG  IHDR&HsBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwtn6 B*z/ T((R&% A^h (`wHBKyHfMi9,3w{g6;3w; ]`2/B!B),R;?S]|@L} B!4tdM$%%aHNnȩXaW8YhPomiB!,EApJ92[sEYq7g((ů B!nu[p5)U5DZ{BEQ()_np|f3gd9ZCViif3F*B!nu[Q\|g.!KIMk(&ELV\Q..V0HNIz( &V*1׮q '+bjPCb6~=2S022R }BԻFqoX_hÇqh:6n;FZL<~͒˃p,ܹs$$&ȹ糗;n0OfĻ#9u4scoZ҄3I899elWL`b<72k\.\ȤSǭ[ ;… d=i6;λFuVfSB?d?yi`o/Xo1g\+;/w®;x뭷c?ӧK|i+ٳgHHHMII;_W-wzVǩS2y2ii̞=';"B(4T$TI͚'ظQόa=.:Zm2m*M&1d"9)^OFzY?̰ IJqzKg5kΚ5kr4^db2vuZҵhȮDD,|/dĉW¥qxLK5kAUU5Cz*i)9UUYͺ1G.We[Fl ( O)^<ri:o ?S tJEz2ĉ޿.ɘ ^Nqg+35% z5GJ|i+U;$&$Xy,_Ա 6~[sv:Ze V3OVYKo. 3ddиUf2ӧgsguM&db*rp,0df`2~wRҬe̪JXtIq'b6Yx4NwϞ<ȣ /_S&b20}RYx1GUz~ԱnF-r2 BQT_/Q슅RUU|M6o~5k'qpDrr2;vtUhPU Ž;E" cVVOo:jɘEff&̢ !-VՙWFxx8ܱ[M'N3j՚=Çiۮm۵pDG#55VZc2}%7̌m8{̵5~9玕I<~(zs?w179rsx 2({uٻO:t|ثW;)!e~7_LV/V~IZJrc F>[STUQPJې̙3ٹc6|ٳ`K/"{cbNlQOCX̛ߚKcľ;OTcs7ꂪ(IՅ+W/c2 q÷=]\Grhd Ɛ`IS͍~d"##RSV{9ٙJAb4`bc6˛~t: 7ds}!f^wJlB?_}>b\f]i4)h)h5i(Q6Tf;[o]*bťW8w IIIT^232qvq+9w/UAJ89=!B!םz,>;+ԜgP:T)m //Rh4r#!WCJJ h4`6憯x{yB!nuE~*E(9ᦥhDBrplu(B!DI{5vv] @=l.EA<=$B!N]웷B!x~t7B!B((J,B!BQjRB!BZvW(VC!BqQQru !B!DIB!BQj~B!BʨPB!B2" !B!DeW,QB!B}϶X!B!J-mU+B!%[Е&Hdt4ƕA3_˻TtѤW6n|B/#qq-C?pB;;JP7p+&lXdX8*5%>KԾc6~)tya=.ЁM~ !y/GN]"b[(8fy2C{M\lԮm{Y\Mp;+Vl6ξ]ǧ7W/SKq3$&%@ɩU#J%hɑ=l鞱ߴ')v܄PU ?EԵd^}Kɜ#-?jOB!m? ZrlڔN~?}]'I;RE9ef?Xч;uę =OO/-R2f r-WRLq@Wq! #; D$gͥ{+RBQ矌t6w|y=w_ˋ6nD]XSYy/}zvd4a2A@PJV|t,7m_:dS ؠ[DHM=+#˗'55VC[ΞÍB^`̢?pu622uiNj YfOˁ „~R+ޖ*{Ah1FG}PQ;SAN>Gltg4fCttNZtUP*, \ϵ+TzCT [5dQ|-g *c&Ol#峫+4lH>}ݻwtgw{rcBjUm^̪[ctiH6QC_-*߼ IL`'ôU<ظ2ֶّB{[ORR"qiZ9QN⦘0Mkh=I3˶pV%ʁ^bB>Y/^s)JI Ѳ]I@gƜ?F?'*.=FZj( Tn rQΔwr,kh͟+|{O&Li1elH%!! Yl6ӹEX&lqž|Bnû/0zԭ߀wB?Eh9~x?yZl72Sׅ^"IKTTr _ . /Gq_u=5/T)[,#Cyze? R܈Q^$&$bOC~|.,n|ΉJ*SOѭ[7',dĈËysOrʌ= ,, MPP6pOLHܹsL0%))uի mBcԪYE{#+ùR9zw4Cœ埡͘L& 236}U Ձ|c?cF NтfDU3#19asw2g:(_!矴tLbYЩ*.G+~f V.KL{i)id܈Ώ/G(o&E^|^`,wi{9/s ܙOq/ Eޱ& /I Vw.49sXx7&<={(N7k6-j^]giӰ"HO7`4 Z1DJJ'Nd(yP,@RWVT&ф`ĐidKws7t-ޕЙIL2{C]bV@d05$EQu ESP &)Sg>P25$FxjYj'f-yyd~z9w\}<}:mڴmvL6sЩS|?;о}OyyG -ٳgyꩧihҤ _X!LXXeZ^Ď;(yn8M܈Wk\\5Z:e&5@d.]FYV7 ѡfu|th4zde0B\CZJ2 fS%-8y? ?j]F**fEF%-Sz!jxqG{~?'%Ij [Ro}::@ގʢ+QX*X媐3@A%>.6KQE)r֭[[-oۦ oռϧNm6Vڵm[h\_~:uiٲ%:u!n_|׮e5J* 0oƞS0_fHыTwʻ⌓Ɍɤ SVFJwj'+hPutL#YYi&àbR58霘ƣ<~}x5@˳$#GPZ"fߎVHzѳWO~wlqx6thf3zcǎ#)9{wƌUuФ*|ssaB ggg\;+ht:Y8FWEJؿ}fԬ̆d\91t 22 &Ly$5|8?n%W!Ľ-y׏`_)ҍIOlʦoWˌ3sr?qCN*FER5ahX*i[J8`J=wA@k s^_g BL&fΜE=r{_<Öڵ:uXf͚޽G}*}Z<@#+˘ӟ_uԥnDFFyWd!nPEwϳx P?x/6`iގM[⌢sbįX=/a狂HSS_\\]0v}`yW'4@B!c׮M{|*gڙ|Ûx(s(" y/Wy!:U=:YLfÇp;PTX`? {ȬW,ipUT5{_n@1WPK,gYLEVVqq߿˖R|y^yeH->nni¡C;nfδkرѨQ#K>\2;v:f|<ۿ?C_}-Z*+_ٳgv B6|V 1|'D䱞/V_l+{`o.Ź+w'ƿJZaOB!mjժCZu02٢ IDAT<.>N8NTTAAAb:/@iѢuNU;mӖɝJoQGr+\TW/_"ReJr_;\|Dz@V\]?|ggg|||hP>^|O=Ey;DG_RJ|w;=`N}1KU杷,i&N1ct&/򠗘;o>|iݚeK{Bjw2R_jY|2 EWA)._7 ,0G6b su.riBQ{?:U \IFٹsnnnxxxXy/;o}9zݺd'-Mb.f[|RNZȎm3R)5` |==ղ]:9vs%߸ڶL5Z7aŦWO=ؖfիPuJB{==[V'ԩ [mnO {E_9@nOeV,0K-T]\,Mq&BǮ o.LMҾi=TvZ;gOB!m%9Wv-N:EVm̰tY*^Q5 ܹs)yO,eV qR2*eUw@u# R'ޭW!ĽZ5jX>[GK- `"/\_neBiTMѿ/o/&(GXrFh2u+&=ke>*.V͝Ç"hаZMt#28GinUB!mraO{yya4) !n_;Up7$_oo/=ZmB{) ሜVpng)mB{3lɻB݌%wBa[P v) !B!y҇I!BQj9 nU!B8iB!BZBQEB!D)5iܨd+em!ȯnuB{޺5y[7TUE51*YEUŲ`gƬVœTFrTdt4ƕ&{y7*!Nf9Oœ]lhR=,JJ%*2:<*αst"JAQT+(9jTFJMI]vY&dG;ZЦMBi&Ff˗ӡCѯ_?~f q3L&233ou1v8w qʭK8<*T\\f*L2c]رcG۷o'11jhGlڴiӦr׮]3K.FzjԨ~j\Q/^Ljpvv&$$={rJjժErرߑuN:E>}X"Ջ8ViӦπ*oXXիWGSfM.]Z}/3ϰgJƍ9{,3f̠[n4mڔ&M0`""" ]7ߤiӦ <K7nꫯҼys^}Uv3< /;lf…tܙF3p~wzA&Mh۶- )wuBBB //R޽#GvZZfs)߹s'wFUUFmzݾQF͉'6l#G,i U={6mڠ˪.Έw1rJ߰ -V5`矻8R_l!Ethl ( & zjBBB8t=hZI&,[-ZU&{C7ofȐ!,[N:qUL?6l[o_|A-طodѢE<:te "44KҥK-=ʦM^QF̛7֭[c0?~<(ԫWO>-[ĨQPUUVuVʊ+h֬$22jHLL$88/Z^zHPP.]"66OOON<պ\zsmy駟tpU`РAXrQjUN8DFFRV-  4 ))H̙omGq~7nj쨆 sNHMM%88تYngffk8vdN>͠A?HMM'&&ơ2WcoƏ Ǐ/rCP&{%))pwgʔo%nֈH/_, ̪*L2c4 'NdyӧOgĉh4և'OҰaC*̇~Ȃ ޽;nnnԨQR5k| ]tݝ.]`*˖-N:1fXtռ G9t;wOOO>Clb/K.QR%Ν˶m,?#,X<:ub?UUٶmw&((Xùt'11իW'66cX%""Rذa4kjݣGb t:0i$'"" .ɣ=ȴiPrA^gѢEn޼Ν;hÖ;-bذavȰtRd&M/Mڷo5Y[EQX? ٿ޽{[*FDe/|ퟲ*ԩS-=ӧLRrIII̜5L(UBJ&dw۷/ǎ?Ǐӷo߂v׫'_G>>j֬(l޼ڵkӻwo6oLjՊܦ{~1dN:E8x z۶m+?coדɓ₪ԩSӧOܹsY`.I;ROڷoos믿m}׮]+Х3o[9{14hPSOY/--GҲe[[J ̏+,|J U-݅^q1k,TUe6+ j"""VZYϽvbzʿ2t_|֭[`1ʟ'ZzuGҽ{wF#{c?ܻNNN@3%m;Zvk :u_0o<:ĩSX~=dŅn(L>z֭[F ;{,^^^6Ş_}/_vՕtN8mؼysߞ-?dW,|MbcctfkW+/eԫWϪ%m*|ퟲ*ݻi֬<_!4 |Mœ=e! JD1b',?jשfʩSyT J9bcYf-w׏jk0x+[07hH>4j܄>wO4?lGÐF| ,3gZu*ҾCG֭#Lw¤Kӧjcڴi+~B׭[?jގ;N}1n8*WN.qy^̱*Ǟ̙3p]=7%͋ѦM7Q̙=6dTZw^[~DuIJJh4÷~p|Ç$%%3gX<4rHz-oNJJ ۷og3<UV->SؿCɼ{[رj{s(Ǚ8q"}ٳ%Ӷm[4imۖڵk[>RfMx1c#FA|ݻz1rH-Zdynr dӵkWy6o\d7:GϘ1UU9ҝՕ>~fG_T*#GZ*-]_o[=סCHHH`ٴhтZjٽ~Q+cOb!n VB5}j,Zh.=s>*VdP~BMNNM۶9|زG6m8s4ݺw7Gٲe {9}{ĉiҸ%˗y'-qמ=TTmnVPZΥhXzCB-',.\W_}"00.]X-]ϖ[~=SNرcTT &K/Y/YYfqE3f C )r[: <#G`>P.]Dpp0#GdСVi<#a6ٳ'7n'$##m۶1n8uuO:tVt:}44k֌~1|p<<<,89s LB!BRӀïB!Brb!B!(5 8B!BX!B!bJ*Bq(\\f;TrӼS\7(i_ov;ܩvڇEӎk`XBOff&ӦM~/_ *УG~)tbYUF#-.xߑ(7-B"!n!Cp!֭[9y$gԩh]p6mb8vhp>Jz}|s݉ǵRU, ˖={ѴekZ毽{KG.7úuXd u___~ionnƍ4iWNhh(F.( ̙3???i֬k֬YbZM₿? >>ܹsR MaԩSӇ+I^ZǞ,[^O͚5Yti;ŕ$.ҥKQz5j駟Zl6h[qF7o |gvao[>,,ի[\PwY^lPŋSZ5 aϞ=\ZjQ\9:vOӗ4~3E)[q;e_ +kzz:M6eԢE o>LJtiiiun7٣Bx)4}z^iVQ̜3$PF ^"=Ͳ i̘Q#YpPxe3c4V|spss]6?z^9i֮OƵ*U 䥁45jwl7SC­.w}ǐ!Cܹ3۷Elڵ+ӦMyytܙӧOw=<<8'ת IDATvAAAvV EQ8pM4̋^zkV^"$$$%%Q~}.Kǎ=z4ݻwٴiO>e)oI]v5j=z۰ag?o۶m1b}q8{ˑw?9'x²w}GϞ=-[v{l}^˿E}pqԩ7PByժUƍ6/i~ٳ ͞دŕuΝ<쳬Y^xkҬY֭cٲel۶2k׮ :޽{(nay׊njqd2*IFHmEVUÏuiL#&KueGѢy3^<Ⱦ/Ugyo(5 !++,$3Ir*_ȬѬiS`cYE~V{Wpuuɓ,U˖+W?__=]{v[qޙ՜u+m} ȌL 1d_"R">%CXJ!cl$& cgPXu??ҝ]~>:ϧك碻C7C7Uv >',,,0qD[W\AXXL"rAII JKK0̏rÑ +++$&&cǎXfX~ pww G^B"]F_MN-ۨ(mGz`SbH[7Zre۫bge*_ʊ(g^^qJ[FFF1boؾ};F)xԩ;%k7Wu|ӯ/uGjZn ݻwX;n߾'e ٳ9"WPר/$[׮ nz tAqcFc0?#4/76[+ |ac#򻹹9^~#^$N7{N?~֭:oooi PZZ* lmmK^o_)`222333 SN8RtA*cܹs~ =/+gJ]&6Uܹ3DPEu)UDTwyf4UDۑ"];-[pqq4Z;M4 F\\Tkaa<4lPw*]}"jcQn]|w {~p {9uׯ^WWvn^W(ϼ zV&2.I̎BOO?)[bѲE M9"rQҺhb䏍T)A|.8;;cϞ=x%>~{C Yd BBBx<$''c8-[ӧEFSNh۶L]``cc͛7*uT̙___!--Mbs-}]`` |}}.!((-= .cC=Ν ___QEu)i^43"ڎ>|ؽ{7o>Lann///̛7PTZEKuGgF[Eet-..ưa0w\] X|9\]]Q\\\ayeĉ $PVu렯.] 5]X(ȭ[}31cGFwnS>{_oDXZv.?pf¹Oo!5l6\`<8!s1 F"h^>7]ENn.N_Y.v} ~ع=͛5ټ4Ot};0 II8p{vtF?%-a?CyC SA6S<Qmbx"<<_GyXh V[c$-|gkؕkbg~q"r&͛q VGTܲtQ //AB M6ۄqXV4Q !((mڴ mEAHo~e{t| l. | )gCh(=cAh0"$JP t!"">%科}eA8r-;FV0PB>R(5cQ=7O;Py!͛{XS(\ U BKL4 &MҶAB -أENn.6mÇm8mEAAJP :Zd0tHOAA”-Υ&s9_Kl"D$աl.CEۤ:\)oYBk tCR1T5V5}+]CT k׮ ֮]8rRYj׌yAD#)>g2..7nĶm*=M۟S ςrvڅ]5 D>|066BCCQRR"7ÇưDllHxTTahhkkkl޼YB8k֬A-GnݺVVV044D۶m%?+*ݻw1bXXXN:puuE~~B*k3y*Tv;>  ݺuC||Re޸q#ڴi###ŋ`ccSSSzVMشh֬>| aÆ(,,Х2ڤpˉF֭Eae[@cpUWJYVMYng7eug;Y[/ȣAՇ)£Uaaa@~~>1c Axzz:,X_8qҰb 9rXx1󑜜TAxBBBCCDGGcҥHLLT*$&&"==|>'NҥKebXl\(*ȑ#\V"jkq8?W\///:tL0pppE߾}q=y999! #F޳gO̞=CwWMBBVZϳp [[[_@|'}0g1d[UltgQǏѵkWdffEEEÃPF (zؔU"YGw:Ty9z-#Gm;OrsJ CQ7o&3NUXJ-A6&===JRGA<@z~EEE,`Ç044XXX[Hsss E1W^E#\VUv >NNN0`4iT|2i~Y6a#2qpp… 1d<|'OMFm>T +*6y(@XXoܸq5js \ElBl|$z^}l)BePOrsalRi "'7-*a",ENNR/{ubG*=z@dd$5jSfl.Ȣ"Axx8Ǝ'N 113gĂ ]RmHNe+WbȐ!̸nДMg&6=o۶ XBU\\,2P2P e<g`>9r>׫Oopy<*#֭:T[[[={Vfxq9TtA8tiiii!##!!!h֬ pepivUf*Tf;ٳw^dffbɒ%0U\zVMψ# . 992VVSNwӕc^zy#o޼AJJ`fHyϑ*em{Gܪ)!ϐ#G3sUic˖-qiod˒%K8!99fѢEѣGrq}L߲@"%%\.)))CPPRqę;w.|}}*Flllyf#33"쪊# Uv0p@:u <\.ǏG۶m*sEY6aCEc``???L8*M 3g"-- <iii"٢l1fv Ԯ][ĿvpqqΝ;%(zT)0lڛ"NZ>VU8.ȭ#=c_ܼvڰ?#G3q>|`6^ع=%ϴnݚg0 G?%%۷/SfMĄ۷/siu҅144dZjƊoܸb +++&::ZB8􏉉aZjԨQf6m$Oϲ^rڵ+chhȴlْ fWQf򑥫Tf;8r_3LWWWÇj.ل҇a۷ :0LIq96mb,--ڵkCCC`w<SNI ;ucgg'^sĦy FE"A u!0),xz`^>g^><<}avnSOp5؍ȭN*͇>؏OǤ`4 A-ݫp]ۼMgl߾]۪ŋ[ QO,%#l6Q킼r%B5kUIWmAWiQxq1m"777M6~:mBi:b?{r,:;f͚j:y  |3g\nށf{Զ; Á /_^)J1vX4h'O;f͚mBi>u,Tu`hm˱x2{)kݺuG?3x~I]SyVK⻂ B0 .fҤI~:x<n޼ /KɧSTKH91V:Xz|Ѯ=jש >ݻ0~ZZBf1nxz/&>~z 5<~@~~-[c0.݂ZI:rN={~lk^(Ǝm`Qz}KW={mq"ہ>_;W|>#IIٳltKHH@o 6B$%%Iw|mPPP~l)_ou:8lf+S9:O  Da> R(ǎQTXcI[7_7I&XdHGڹTKK1{lAcǏaظa="իEEbxCؿ.^_ O GGGq9Oz*HH(!v܁˗…t0 ._ʕ+{N*5ʭ<իWSTymZ" 0pPnSV"PmݲuziNtg  QvGxYM ҄.1144BHHDnڴ SQ_"ptt8::1nxA刌}.VZ#H 23n4|{Ԯ]`oomۤif )iӧc˖-hذԑ,<'f¸qG;—-SI?e)ҏM.\@u8 3"TyVEn݊?SjW_}%rTA$oa%CP"999`x}}}8;v ~nW_}%端7n~+02_;;;|pvvFFdG5k ؘJ-`+oӦMx5|g̐) 8~8`| [OylSݻw8{6333쪌L6˗oѢTjCAA|~p*r)T"~>?+68{ ^<9eg p$ !/\.e_ϑ^D<|!3~؏VZp6nի~߽S<ҏPWyNǡÉصs'<OҥH=wRK?EOZo߾ nX0:vtziLͳP@ӄAAT)~ׇ3 PG2F0~ĉn{gϖ'k$G7ojֶ3]yę3;^?###dffbӦ(ܹ0v8xOݻa$''MR1f"nVt11IѲeKVV޹se 5k^^G5J0 /ϖSE?iN1cFoX`GLeuFW*^IAD咗G0*pt,gKGh/>LO(--oܴ^<{*w  ۷Ѱj IDATaCL捐 񤥑W|͛5d,)9 \xW#+*|>u늙~~ݫ 9 ~ݰW\A͚5أ-\ Qx=|ѣGc^={!::6[ZYȳ۷$޹} ujז/ξ+ Hؐ~lٴk~VNz)".=e{ߏ޽zJ Ϻqn6}AQߍΟFbC6WaŎ}:>r9ؒ^bDǢ2̄,KMњӧ_~9yMw鳧j˫HB__AA8Xw*_yKF|fbiloƜ3zTk|±=y"Y*-/p8V1c =4QGU˖-Å TyCm5 >}`ܹ˦<гy ? ٫''OYf7n,xxTD055ņ ѨqciyDSŚѐͬY'''mRexXf .\mU,jRWjWF>}9,;]T-wgE%3u8F3=ɣG5aM#£Gm5*(9pжm ϋ >}:5*ݘ0a|>jԨx 6Lޮ];888СC3fByϧ:Luuhɑ#WD|D\9vB׮]allF .,ð1Y-Z^٫ݻ1b,,,PN"??_$ ]Ѻukm۶SF_>===9QQQ!yfeÇcccXZZ"66V$\Q>⨢p4iga1rH?MԹ"ڇmYǰaаaC[nN3ly= \vM}||aѣGK5j>=/?uQu뢤G#GAII)իٷPQ>0#++ |>3fc_QXX'N -- +Vgbb"GgȑAnn` gppHE$%%!<<۶mCaa!bbb."CY}m  Ett4 K"11Qn9rxb#99p(_^8Ĭ&꜍ eæl֋,F޽{Ν;x6n܈={H+Ք.HqqqȵAЮ] _XX5jHٳ'._=/(4ʻh[/1ݛB=~|:w;rEDa-[HkBI^p8r ~yyyС`Tx Nnn.{+;;rNx-:v순ֺś Nbb" "( ۦgϞ={6*KHHUpyetrrB@@F!5m>庩 MYSSST=Ts62)[/׮]7oD%ICL6? ((;e˖ݻ|d۷1cN<\899a޼y۷HHYT\\ ???۷[ݻ իW4hO4l#GĊ+iu֕322pML4IğA*u-Eϋڟiv*g-w,5\EEJGDգ^U6,et*ӱ(--۠AMӓy6`hh({1W^(;|]C?EEE077W[_aۘWH>VVV(,,YFqLMM sssl.*zw,4agqLLLPPP q:g#C)"K``prr€ФI%.f͚󃙙= ///%3pwwǰaPF EEEW>~4|xHs"88=z4_eSSS,]%%%̙3eswwɓ>ԩS8}4֯_/6lO?a,\M5%b޽` ٳgRUiVA_0Qm100PnݺСCj矑4k *?ԩt5oq9TtA)98{є^`cgq$hΕ>lFD\zUB'[[[̞={Eff&,Y"SiϨ*u^RR"=NPW^u^~zeDݺuMdF–lXx1 0|Ӫ+ҥymzz: KiLKA --[ӧenŒ%K8!99VJ 6oތbdff[0g"-- <iiiոEJJ \.RRR燠 ]hpQp\ܿ'\.111"DLL rss~pBa޼y)6mKo>|w"~Qʶ?M%3r%ƣ{ 4g (?GQ8pQ6ā%KѣBBB7HKܬ,xzzƍhܸI`ygϞ?#̙>hTM6!""?%%748~ 7oDӦM`xxx*zZ-l,Lqq1,--see(۲)SPP?~o޼A0{l?^ѣGb \t fffӧ"""кuk6-0<gơCG 4Ⴅ9>pmWFK|ѲeKڵ ;vQZZ+V ::EEEꫯзo_7U~Zdω2(*:MMM{ܹ޽{"ؾ3>V*Py{,>xJ 4u,+/^nݺmU5lȑ#PX\.j׮DUcݻ7Q9hcAK t777ܸqŸtEf͠DPrn:_۪TGNN0'e]uAT ԧ;v,>|KKKxyyOjU;stQFa޽Y&ƎmDFR<uߠQ|pژc={Viyu&\vB >ÀᗝV3G3#QƤI$."4Ousu.@4DyB{T|q$t~)X:"O3 d3HAģAϪ,Tّ>>SAA|:L◽Z:9:!*eV?x Zh3+|wmkTD]RYآHgeT˯p8tMB>t*Af͚ ʣo`bb-[<OyhhoȤ{:s ժCE2hj6mVKK;.ߡqfZswgΜň`٪ v i]/u.0 VCx*.W^@z .]‹/9}+CB>K.Exxe:gf,`5m5QQј퍿n\#Ix /ԶZUyG|, =n +++m۶saVVV EII T>===ݻw1bXXXN:puuE~~@7i~l> "QQQ!yfQ`͚5hѢ}vڅ]5 DdGGGu"u'nyu'MWԔN< M4qAxlڣxQQQh۶- aeem۶M#<1l04lFFF֭#OgE+4}GQ{R.OeFw*(KJJ .neѱgYv]swD߾055EÆ lY(?uud[o߾ʈUZH}N8Kb˖-(,,͛l28X`~WĉHKKÊ+7r*\G#Grss4k *:˗9ooo,^HNNFjj }`Μ9pqqILLĐ!C;i ZSvg̘1ܹ3BBB~lڣ4}>,fڵHII(ڵk͛h޼92)ܞկ/`rTt.&6FYsc_ntVUZZ a}5[pKzxJ U1mڷk__:cQ:xqQQ4h"zzz(tϋǏ# iiixgJx;ͅpsssNNN0`4iª2ԯ2 U0]nڝ3X&XǢgEKK/=4ࢣ5u]ufaG"''%%%(---0adwww ++ ?~z ,LLLJ*l>㰱 ʠJݩ NŪUp$$$t*ސdXYY!11;vĚ5kT-GM]nڝ3"N"A*M;~7n&Dܹ3D%@np!fdd $$͚5._,naa<Wʔg``-Ξ=+3}8w_jj*:t蠑ʠ>lԩ`N9"Rwh۷oǾ}pJiҐSNR)fkkٳgc޽Ē%K M'MdTꮉgWJ(ۼT­퍮rաuǰmK FE 92}g}}tsrHIIH%K $$qqq(((Crr2,S 6oތbdff[$o?={gM-[rg5-Z???=z\.ĉ-; /RRRD$UA}0g"-- <iiiǷRwhOq1ԪUKj6Q3f̐H#k2HkoĩSrqqmVDvET+jhO讉gD]*̉QVj})h;H'eԷ8;[V֬&q̙_ӆm)d U-O>%͛'odG"nʼn'Νƍ >YnѥKy:t@HHƏ/Uʕ+1m4k}={%ZpFnx|gدκ*P5ݣUQGΝjmUT]W{NLԮ][ ibnGp׷lDQlټiLڼMT/.^ܺuK۪TaP]ڧm_~X`UMQ-[>cZE}nNDUAUv̰Z&m: * 777M6~:m@mx?S>+ԙp8eTֱPyUvՅrAG1vX<|b' *jQuigJU 3i$L4Ijh]}$k*Wu)_/OuHAAhR(U#]UUa|XBuHAA#BEΥ(؇mr<Ѷ {?  BWԱP풑F*at"4O m5O$L@wS? p8#rAjk҉   *B_   =OG   BIoHS   B!jPAAS'   T\m&  BmZ UYΝ;(..):tm   yUPn]tݻwǸq㴭RgССC$$$h[%  BG)Kǂav<\\Ia.z1,--ѭ[7uT%XrEx{{#""yyy?K.i[5  B4j͚7uCa̘15k/<<cƌAll'kp L0ACZXv-BBB0h ԩS BHH֮]mWSNń _Uh B[0`DBGF|Fb=pCjo.]իsN={É'0p@JqE… Z҈p88:: wttx|Ġwި[. Ѽys=gΜM.عs'?^i - 䙙!66 6mM>[^x&M5i/^ВFDuHMMOII7oDJJJ0tP$&&"<<xHOOǐ!CtRPhoԩSQQFر#o?o<899W4#Grss4k "2|deecƌ'N`ҥزe yf,[L.wЯ_?$'' ߿;v, '/?~<-[`ሏǞ={$d)+ٳg[CFFQ^=L4 iiijɬ>|7>Ĥ˧)RRRm5Zy ,,,uV8qBj}8::"))I/)) NNNZ҈.a…X|oXp!D_EwAΝ5CXX"##333X[[c[CZЯ_?DFFJ̴DGG]v033CPP^~(ϫ&;;} ԩ0?~\D;Я_?iӦXf N<)_l"##_ _ٝ;w .ǃK9g'Oą мysk׮رc:q<Oe+++z  {([ihh 6(Et/))a?#Xp;j&##vvvRGup8"@oԨDFqXnlllPV-E6mZjSSSxyy):Q}\P # 'Oƿŋ N۷oׯG.]rJet3!???رcx-;0̜9S۪Հ#G֭͛[9rDիWѯ_?n_-쌛7o}ի'O|i?~ÇaÆp8Sl 6Y u [$x=?0hР ===xxx(|(:"a>h CCCL2EfL6 _|)7ܹs1zhxyyݻݻ7^ӧΜ9^z ߼yccc0 v޽{U֬YHdee-_ϋ~`OA_|)qJM|bǎHKKի%tظq#=z/^СC(--eKBQwƂd?#33vvv 0p@}93e ٸqzRqrrƍ# QQQꫯQ CHH"""rJ̟?_j'FdT9܉&&&*FΊ:;ʦqww G"qgzQVx<܎xH|+++G˅GޕYW_>^F e'Ƀ`zjlݺ:t_~]ϣo߾l{ܾ}'Oď?Q;z O>СC1n8S/oeT×_~ڵk fcѣG;v,7n,vEppt֍WD5Apܬ*oHXekk,o"$$ ի000=z 6LJ=N)8F۷oŭ[mjĈ#"33Sd0ǏGxx󶵵ٳgeoΝKMM8,222f͚/_VZFΝ%K;K666O ޻>Nk׮-_34cBBR(˾}гgO<"a"cJ711w 6ӄ|a<9==CEDDz)&/yddd{ߓ ~2d,--i&MN2(n| O3B=zx_App%\tI̙3 <)))x-JJJE燣G")))rHIITSUlllyf#33J˘;w.|}}*Rq͜())A߾})Fq6899 _|vڥ\ 44@ْ_$wغu+^~UV{[LLLh"5 ZҸ7ne˖8ӧcرČgddk׮;Xp! q,TbcccԫW6m2l|f>ѭ[7ܾ}<==U:)>>())A%\=>]ںxbƊHEDD`Æ /p8:uD&_k׮yyyɿ|+WЦMyNB=e6mҤ kddd簱WWDl ˠ^ADZ85jԀ(*quu[쀴^%$ĉ#A烃N>fffի,X ^W$NsssTiO E[T  Qk\9őH:XAAAAh:GT*={2t:Y$`ՇA<  2:  a4y#  t,ѶAAAT1?c]AAA( 'HByQAAQ};Ь Z EAAr   BEBule󑝝:uBAAA|hΧ+ФIM0۷oӬ*3g $$4AA2)**BR(FŞ23gbh E^ 5 WưaeDر;wTIK"<<\jAA:?/?Bhx{Oō8r$yyy`4˜1c0k,_xwq9_r"j %7)6wMh#scj nn kX(BWf!"I7"*UWG:Kaq|:9 ox""###** ]t*uRH$ssAy߿VVV2]~6]1^cyA^mjN.o:uս{W\\ѪU+oqH+#F@rr2֬Y8q/F||}xZy[B֭kt,u0l7=+¸m[u}vpy?_;vlP͚5Ά)ML&ɣ6]v0777 nk zzsڲe lll `cc#O8HR)ƍ)1~xC(U...,++K6DGG3KKKJJJXbb"dJ_;~8{ +**bc,fiiN<c̙3[n,''Al]Wg[UiꫳꖩU]cFW9~ڮ[{EDDȔܹ{1u۩n:ۨq٘]ׯg3fP1|}}ٮ]cWXxkY.t+,rM ._0ϰd oή_Ko0OމEZZL(2SSS9r~z'N4xщN,to߾}]vӓ_9sI$:#Gdϟ)f666^ mڴaj2x`gŋ2uݻLMMnlXt 'S͆t3KKK'ON:SNnݺ .ȍl4QU}u:۩L}8TE ]NinE~m#G(4=Pg5=.]V"0vYq+++Y߾}YEEc2+++VYYq,e-³'zu^h|уNQ{!v ̯O"`ڴiĒ%K:3gDII @M'q&&&裏K1n8pss_9sGHNN뤦bРA000>`ee[n)=g888`رcOMMaoo/󷙙ի8׮]eʜqUՕwww8˴˗crWg[UiꫳNe͝6.]ݻw{׃FM˺]V__6l9sAxꊋرc! 8cKWKSkO??VL8uv;~ގ֭[gb ɓ1j(dgg A UUU(..槲2-s&ԿFT /2SSSL2?.^ ̘1_ZZlH$TWWC*1Vpp0ѽ{w8p}ڵk J㩛]OY:u*lmmq%TUUAǍ7uo4QU}u:۩ Ϛ}7F˖-;vvOOOXSLFM˺!C`ooM65?モ {nRj?+65^!U,F?{GXwW,Cjj* j~!0QpuƤNބ,}]0111J100 ,={K*agg'N(Nꐗbk8yLYRR̰જ?~~~ԩ p9O?saƍWK_۪*MrTU_j;˵tuMW9i:ź?#5^u@~guQRWˮXkَ֬C$XsGqq1D"߿v,yT}FgB]_[ *%gݻ*vcu.] ???eeeHLLĘ1c:;wƱcd5j=2ȑ#ѣ\СC(--EFF uP\u{;w.D"JKK!닅 v'O %%gݺu SNݻ(L6 VU9hGU)tեݺIׁ.=h 0o Szw\ĉx5=.j̲о}{|X`_77۶m 777DDDKUǼ"zw``2B]fŚw޾}/&EBԝry[^y& Y=W_}dD"Zn̈́B!sqqaǎݻuڕÙ!k׮?~>ܥT1 LB|>'-Cm͝yG\l ]]P]] &B{Hk!J<rc^JCoB!iDEF?;;WWW1qXyqzȃ ^{v#B!ԜK4*u%B!imLB! f!B!DSu#u+>TB!0kZ"i28=#/[>yV_*ayqO;VS{CMxs,/tl!)) Ç)D(..n$ Əe˖ũSl2Ă^/Bުr|?JZ]D!M- +VhPb Ȕݸq0551ƏQ֮]CCC 6Ea`dd-Z&MH$xq֮] +++SNYfffxZ1`˖-@ nݪ4 033C˖-1`DFFԉ ѽ{wB[ub0445o߮rSa˖-ѣwYfu]'qشiu놖-[gϞ/[[[j o233e(ZضmL0(//[I[R[:8NRGQŞ>W݉Bĉ4L,#;;&L9sݻs:uꄯ ?x{O ի\t R~)??<<-v)8}4R)sNeكcW_U+}PbXY IDAT"44˖-Á7qD899x16mڄ~i|ذa>|xXrxԏٳd|۷oABBFڽ{7:B=Gƶm 2s+;>UQP(tRg"00111 2qTWymzi{u5!Dϰdp9]NKcWR՞"v{M[6N`~V=dEY{AA>+尼ܻ,v7;e߹rrYĎp 1~W^^^,22R<ҲAxLٽ{)P(dm]L,D"֫W/&JÇTc2۷O,:: :Tanmڴa 9?^,;;Ef{QNuVmbcce۷ >\`׮]~2s|ɓ'YNةSXn؅ U_SisU߶櫻U yujӕb&iiiXjP"իWL\v eeefff8S^o333[&oNչ-Gz>|8Zn{-0̵kQqvvիW.3g888`رcGvLMMŠA```}}} nݒO:99=|p\|YuٓW^[VTTβNNN/_ȍjʣism֫XPͭPZޥ EyWƪU/ԩSakkK. VJmmmenŪǪUܖ5g`$&&{8p郵kKKK DjHR0:߶w *;Twقƍ گJsWe!+xxx… HII:ϟ:u;wNf4i[u@vv6Μ9D?^N^<)) {V^;;;,X{AJJ .]0`bbbTI};;;8qB|uKmPN߾}5ZTY駟p9lܸ c)ۯj+u\j{mgBjOonabAyQpd$''+V[nœ'Oٳgܹ3;TѺ?3c̘1D())D"AAAݫ6|}}1e 4./1w\D"B$ .TgԨQ8z(PZZ#GGK(,,DYY1fԩ7Bii)2220eKmO$SnGjmeT.{-L:w0m4jگj+u\j{mgEVrBj=̎Ѫv^]&m;oK$vvyvb:oZŋ#s,$$Df޽{Y׮]>_h+++ٚ5k؀XVX-XΝԩSYJJr&y4ɧ|!/&cmڴuޝݻPqÙ!k׮?~=HYk`R)=owAO_p/T1>"wi^o;v4w*/QN`A*V^ p3FOR^73g",g>}Сƌ9s>A6mԌdamm CCChٳ={61tP>}}:v7|#h!77_}>ܩByyu-_o=?bgL%,ϗ?^^^C֮]tLeJ__1) ={AAA2ennnM2 !D6ݣ6U!.OcT*Enn.V#F(~XZn3gO>K9C2e:t@~~~3eD!BkO%uBNml#f>u۴iOOOعs'ƏLXYYaذaNB!Z?xՒӝ7q+:Fu7|%%%8|0g5wjB!9ÁC}Fbσa?5ΟCy=)ŋ1WzM25=_˃X,Fnn.X,FzzzR'r 26mva޼yزe =ÂB!(eԌsUxyMk!5U CCCX[[0Ceh XYY!33|̼@jў<<<; B!Q\r6lC [W)B!BИX4lj'0`lݺ!B!MOn|" 5F=!B!M鉅n : B!E'o3]\ B!B!BHǩF!B!r<=h IuF!ѷIYfaɸrJsB!/FXTK$M'0x`îT*ŶmXZZbĉ8~LlB5:QQQd#Rm->tReߧȳ@4"$%%a2"2eǏqFѲeKԩSXl\]]2} Eee%u]l۶ aaahٲb_駟0rH&U8] >S{q7fDG9`Ŋ N,VX||ن ТE ݻW51i$󈍍Ųeːsss`ƌ-[`ժUs:w b̙|qFZ 999ٳ'lق |{.ptUenܸŋĉH$1bBCCѮ];>fDDV^W֭[SSS>߰0";;֘?F%ܠ_~Cuu5~GDGGѣG޽;|}}e:uN}v\rXp!{DFFk׮Xz5+WDRRC߾}`bbb{nt = 88bo6f̘x'~zdeeA(gϞ3gQC١011iT~G9sɓ'okMB4qD"--' &ȜX#44T9a 3l2b߾} Dxx8^u?},,,{qvލC=z4˗͝;zOOO[ *++ [nc~o,X~)vDze?cp>q٠Ü9seP(DZZbbb#FZuPVVǏ/))) Eqq1,--T8pׯ_9F> o߆#:vŋk֬ݻA۶m1j( Fnn.7W_Çqq7*V}7oB4>!fT(-obi4B˗e˗/G@@@e^~yAAA `cc;vW^~hӦ \]]+V E^`dd [l);uTpqqP(1p;w+бcG] !!!>|8kfC^^:@ׯ'111(--ŤI J_ZurppG[yΜ9g"66p)~Wܿ.]BNNb}vpy?PsPǎ[,GFZZn߾;wwUF8:@ `ƍ EEk7bΜ9'aXAϱ 4OOO\zĵkJE_FpOHMMU7ڵk nrvvիWez+-deefff8 :mffBt899ԩ} XXX 3f@ee% .1cر|HRN]ӧO ĠAd:߻wPXXQFVVV?|]WWW̚5 ȀL"w[{={qqq֭Eaĉ9s&nܸ'''O>iP7!!>QE(--ҥK5O!Ҩ> ===a`_I-oʔ~B(j\}֯*'M:u* C"4ȿtuGF^^OŋUV|Q^^V-Zj%JqA"]tAtt4233!7 aݫ۷WzBxx8֭[X7n ::شi8 BXXZnݠ͛7abb"w2ď@nn.TB?)\p)))pww[gҤIr; 7N8pk'eGKJJB޽u*ϟ:u;wN#JJJ(D"1bl޼gkk A~~>~`nnm۪UGOD"rJ4 P()q7RRRPZZcTC"//rΝ HRD"b…ZS[غu+{rvvFHHpUt_5?ǽ{レ,X[[_fD}v`ѢEOz41j(cԩɁ5/^Iʓ'O/^n``}}}DFFbHII }}}ߞSGnnn;v,bccbر9rL+V %%7o k.>|_|[`bbb~hZERB,Yrxxx୷Bee*jO***۽QŨ۟Bfn3i5xR#Gh1IRbܺu ۷oܖ2X<_z`R)I`d z%C{1/喝GZTVVR)]abbKKKz;!ﮎj0 N+?/w9@?;t耂ɓ'cǎf?~~~~?!D-VVVjtM>,O,,,[!󶖏SI͛-y&L5k5ܹZ#-[t%B!/gyt._Je˗ Ο?///^/"229ХKhp5HggNB!@XK}1GѱALMMU9 ٹs'"##Q]] 2)rsssr&B!Nm ƠP2G,8֭[̙38pWߚ5k SSSL6 B!BynŪcjwnӦ <==\r 233aeeaÆݺu+ϟP{ B!B#6#,UKO}o`ܶ _V<3fDDD 660a|6mڄYf5ΕBH QfɓqʕNB^x:bGr2<'|]"Æ CϞ=qu_mP!!!Oкuk:tR&40x`îT*ŶmXZZbĉ8~LlB5:QQQ't0*cLY7L@MymEOwlll0p@~/7&&&011G}Ԙ !MIII E"e$ ƍ 88wEYYN>cbٲeM6yɅ_~A߾}޽%K[n(//_ܹ3;M4rTeS:M25iP\\OeeeZLT84F@@VXѠ|Ŋ)۰aZh 6 FFFhѢ1i$D"󈍍ahhkkkl߾]f-[`cc@lݺUf>qشiu놖-[gϞ/[[[j o? ܸq0551Əܵkahhsssx{{P&߰0t=z-[4j/X //SPPoCBB {{{? :uN ///$%%aʔ)0`!Jj* 8Yr%ƌGGG888iiixyy/˂xfggc„ 2p<8̞=pvvF~~>-[ڷo_ϟG} {|ݻwСCD`` F ;;;esGfOOO[ *++JD'((?x `Ok.5-[ ^8N>// @CCCQ\\ KKK 55ann#F>۷舎;b0115k{Eqq1|||жm[5 ۷/rss^J6^}U<|ǏG|||b5u͛7 B!^W[*lذGFff&\\\d[Ayy! ˗/˖oU IDAT/_ɾ]~yAAA `cc;vW^~hӦ \]]JKhh(z###,\EEEزeL٩SX, B!#Gܹs'\]]add;bڵHHHw addggg/\]]<:tׯ_OcbbPZZI&A*/Gaȑ3gٳNX미>.]ňa8 涛;6XX,FEEF4ܾ}wᆱq:t@ ƍԍV_98?wppht|u|2dƍ3gNoL|B濹ַJޭQߏx 0-'^Ldffڵku)zf(HMM׮]k0ꜳ3^*SֳgOW^yEnYo]5]&++ 033q066n^o333[$SGިzʮR XXX 3f@ee% .1cر̉bTUUUӧĄ9p@ 4H{5jlmmaee/rss5k 777L2E!..={;Э[7-ĉ1sLܸqNNNHMM'|ҠnBBB}!cի/ik׮EHH.]R,]M|BnR۵XB^>zzzիܓ[[[7ߔ)퉅P(j_UN.3uT 4!!!077D"iM]XRRѣG#//ӧOŋrЪU+nm(//WN-yjNh]v Jr H.] ::H$2^h߾իñn:bܸqHMMŦM.q/_?4hкun޼ T (//ǟ,:GDD 77Wol|BHsk[ԡG'xxx… HII:&MBppmgg'N(kɓ2eIIIrN:Ν8F~̥D"1bl޼gkk A~~>~`nnm۪UGOD"rJ~._@B",,La*x{{#%% F)СCCCCu4jTԝ!8$''#99Y7}1fD"@"{z| |}}q!"##C涘cܹD(--H$/.\:ekk[ɓ'HIIjEaܹHJJٞ]9駟pQGo_|`ggDm駟Zuaaaxzz͛2u$ MJ,Y̜֭9%%% b&''wޘ?>6n܈Ç:u4@5֋Sz+2B| &L.]4W\ ƘLo:寫=Bif ذaϟk׮ :t+w-y}쌐իر#k~ᅬ{YYŸPMeE`aahbԨQԩSkkk,^X'O_xɓ?}V60vXoرc1rH+V@JJ 1o<`׮]8|0LLLP\\/ѣ?1ܲ#X[[X:ʂT*E׮]uq}ҲٟSQQ'''ݻVVV͚6^ yQEEFû1S #azx.k Iuuc'򒰲RQ:i<6[~~~={ Eϟ\^ubQ]o B!4`0ooog/zԜXhٱdIՕ9V"By>EOTxQ׿Rfo{xI!B^Dy@vǂB![4dA9 !BcuݼBiJ=|d֬Y!䥣LۨJUTT"2eƍÁw OرclٲJBCC/o߾|]wŒ%KЭ[7S:֯_ tǎi!>!/ bAiXbE+V @lÆ hѢbbb0l0EƤI #66!}v[l llluVaӦM֭Zl ;;;={ lmmѪU+[l27n܀LMMall21wGGG(,,7,, ݻw@ @=eK,˫됐8;;ǏopNS III2e  `HRZ 'eV\1cFZZ??&&^^^/`xyy=>>ĉ7n0dL6 .\Шy!3334:ę3g~ gY!>!/ϰdv<6KOijO;Y^]-dq`_ts@hq0f?+}\Q!{T=|p=xP䳂{y^^a9wYNN6}Aݛb<55ӇUWW3|yٹsڎ˩Y؁Ǐ_żҒ%&&,--YllصkǏ… {뭷d;~8{ +**bL޽{Dc>Cu9ºtD"{1;qܹs6SֆCf1bcYfeB`zzzرc| unݚ`۷YÆ ޽;k׮߿?1g1c֥Kܹ?~`&&&,''1Ƙ1=ʲX˖-q_~ښq֮]}4ȾK{ۗ=z1Xii)355_w?=],fOkrNp9-|y%3bAȿTAA:Çc HFFFpvv5j3WWW!//@ q @ii)&MT/ԪS=z#GΜ9g"66p)~Wܿ.]BNNb}vpy?PsJǎ[,GFZZn߾;wwUF8:@ `ƍ EEqcwFǯUwBn=mj˗/W@6n܈9s[iLZG yywq; !k}S{ݧzݨuzzzիDff&]Oφd eǮT*5 >\W^)ٳ'+"Qdeefff8 :mff&s+Tzz:d>@Œ3PYY@xyy… `};v,0}t5ҫԪSabb(8p  $޽{B5 BFF 77YfpssÔ)Snk=qгgO#..ݺuS>h"L83gč7T|' &$$4'>W^믿ЦM]!!!tRj׮c'`۶mri_Fii).]vlMGi'e9-\QNVrdke˖!88Xoa!===a`_I-oʔ׾h{b! Z>yWL: BHH!H_JO}N4QRRѣG#//ӧOŋrЪU+nm(//WN-yjNhtIR\rnnnH$pwwG.]LH$uNo^v Xnb1nܸhbӦM 8˗/ 4aaahݺuz7oބyB?DBBtɁ1tPW}"""rUڧ yq3ܬvk(7'2z})쬃 !.\@JJ ֙4iun;;;8qB^{ 'O)KJJjm?~~~ԩ p9c׻}M\H$xxx ==#F͛yRRRh۶ZuqiH$!** +WAz/_F`` B!LMMx1퍔"$$'** CE^^ 9x_ B<~sƍ垔6&ӧ1n8^ZIEc+k͛7;󸚳n{De/kIh%%k(KDecM%L"T4E[#3|<>=}ޟy9Yrr/n@_B#5TYJȱlUhY) Abb">5k޿A!>>>|@YYrrrp!ϽtRĉrx??? >>\.>XYYa۶m(**BRR\+.]OU$9ٹs'Ξ= x'''̝;FYY///W3gV2㞖%KϞ=)++QRRe˖aݺuI&ÇB:Ѿ}{aӦM8y$ym P:P1{lrqqqIBSSK.ѲeKꏌq!tFFF /?k֬!D ᅲ() ;vA~{4mj ̜:.e5)o5559s6lPZZMٙyGԍNNNG`` @YY=z4C(++ˋyzFF\]]Ǐ~'0y}HJJ ̙۷'OܹsʤYZZbڵbԄ3fٲe# GGG@]]wҊ^lDqq1L"x033ʫ~iYp!EGqQ~IQ gH $W'L)Sй >|(˗re0VĀi/>$SND á)σk gj=b5krB6"e$`艱MFF޽{333-#+x077W>Fnn.`bbR 2?hr.6Re_ 0DŽpuΞ;s0mHZllEP( BP {c1zH @rr 4hKK Z>NNXy@JP( BP(uju,* }&v BP(7IP(_ B6t8L2Gk Bz͛ѪU+ׯ_Ǟ={`ee /^VǏcذahܸ1tuu1dyF@}ХKhhhxQQQhݺ5`iiH_~EXbprr "ԁd#3n8/tƌ;;;=ݑHk֬AХKwe;_~se҂/0~i_o/^ѣƏ[n3QAAA044^uRظq#]T8pSNUnBypx% @PP޽ kkk7>|8F޽U qqq:u*n '''dggc8q"ȑ# ݻw͛;v,O?1zߏ'NAAA8p qq&rqwwǺug`ѢEX`@GgŊ>3gľ}T4/_v킝nݺc }kDGG yf:+{.;3gΠo߾J&&&prssoɓ'HJJBvv6}֭x=LLLdѣG022B߾}1k,?ҥ 5k BOOk׮:t߿tttₒt^ K,#//.\ӧꗍ-[ !!zzzD~~>_)BѡP FPRR’%Kj*&mժUXd =z:uR +V@xx8\]] L~HH""" mmm8;;#<<\M֭[Ѷm[hiiaGdd@ڕ+WU&%%}􁦦&tuub :uJ@ ggghiiYf Ù3g+W"<<{~z|ׯ_8qpG1cǎbԨQx7o-޽{~]ׯ+Wŝ;w:8v@KK ;v9s0yd>5k&tc{.|?D`ѢEMBMM 6mC>}x?>}$SAAֶTKX? 4l .K{7 6mj%W IDAT7kl_|$_%_)>XtP(owww}ӧc"%]D^^\]]0lap\믬uyayuPGPeeBsBh"+++ܽ{]vH۱Ԕ\UD_M7nupLozm>|kL0 .A Y#+UUU&q*:4@ WUx<߿WWWaСhٲ%>/^oSbٶm[޽֭CJJ ?~Ç#997o[`ժUnݺ!** 6{DICSS?~Çq)Tnn.EgϞ ӿ`رڵу*B?ݻ^Y_k?Ÿ] ._,s)) 6lBBBTLŨQG*ָx"*2]v|21i.]Bjn޼Xhii$+:uBBBQ+sI Æ Cjj*-[0yVVV,dggIII###谒W ֈcKU޽{ &4h(xxx~---'<=='l۶ >>>VɉAϞ= 2\Èۂ,^ޥHW^ŬYk.tA}u-[ǏK7 //BȿuC$qA|8Zl)RF^شibccѢE | ~KKK$%%K.x N:'O`ʕ /k֬6fϞqLEEEBTΛP(_5559s6lPZZMٙyG[Q7NNNG`` |eeexyy1O?ȃ+pqopssC~&^III9s}ɓ;wRzzzx=BCC4KKKf)QhjjBMMl2|Æ #JJJ;ip/6hjjSLHW~~< )B͛1uTD2J.x'9dGi4x Eݢ#&z?:}^ %9mDINHOc) {fffՕ[FV`nn}\Ĥww/..:SSZ[%~E#Q[9{cAP( Jb##+Vccc˭:u*%)ЎBP(uO> )AOGr5[QKR('OT|!_V9B(?ž*>W͡>x«ؘ0iyU$>9s...BӦMqF=zR(0~LMMMLL0jZBP(CE_ZC l ccc^-LN:bi:!Ə?(P)b m滎֢E BP >+)J߱c1~ܸj|2BBB-Vfҥ0aBCPD2PUQEok BP(_7T{/%q˗hڴ)tHʑӧԩS)n:{ϯ E,akCef) BP!Aqa 03kX7cQz^~ wwwٳ&& 44ǎéSXuT( BP(Jyv124Daee uuuXYYbm8rrpssիakk+R?@LL РAXKP( BP!j <>A;ƏA?w6n܈ӧOC[[[v#) BP(C*o'79&N “'O7ss$'ӧ-vaÆƍhԨ@~~~~LP(%%Jrš eCt"BP(pܣwh%^[INfQ(mgwS0sL [CP( *1ښ|yy9!HIN;/ 𖣅 r埼- ) BP(JjBaXP( BP(o E EP( BP-G7 BP( En /юBP( B6 :BP( BM*6GxElضh& 0D(,,ě75d"&MP &k BP(uC^nvϝ j38|}o-?ѶF"^ffBڽf PXp]ddfĤMP( Rܱ},Գ7EGGR`ɐnXB2挢Pdm38HVYF<}F_ߒ=3g"33su~}5}|nO'o'g!DQ\\,rahh~.]`BBNY?8IǏ) CCCbpSSS())IEVlݺ>o]V%%%=lbjR:lIoD0k\Qm'Om޼Z:quٳVVVhР md1>ZnA*\>)$sH*:/Xy%9>|AɎť{/{T"Da@Eߠ>,8r EdVT5-;/և;; EqqqpssQFիT>wpp(ӻwoldd!--M֭TTT %%%猌-ZZ vvvm`Mii>c[ooobԩ?ڶm+-;K@wۘZǪTβƯvRoġ'ڴi|nԨȴ|滴6asGQzݻ|Ϝ9ۣYf7orss|Ϟ=C߾}WBQ $$H_|9=z|,XnnnL_׫WDGGÃɟ?>:uJ4;rαhڴ֮߀歠>FFawNtS#t{ s+swNtb S#tb=w -S&훷g0n(t!;CBvڅ+W ݿ?3WGe| čS3n8XYYΝ;(--ǏQ^^.U~wڽr\ddd ˋ"t(++RV.l|Ʀ.8l]>TX[[DRR~W엷*ӱcG\rE իڎvbQ1,ggҐ&l3ycLގ;2emk>7oRRRl6"''G4~ & ==I>|8zꅴ4{ڡsեoy",ϋ7Wnݡݻco+V@Fԍ;X"{D нgO# v,6lF= CC,7\xy9A[G**;dXСPJw^BGGG ]GGػw/K.">>ld*ӢE ;wNC??? >>^@emۆ"$%%aԩʩcƌ?+{n}8< 7n[[[`̪3|!M'[dm@Ϥե2...8{, rq)XZZdWy (,,DBB|||dڎډoDŰk lNq& im:7fΜ)wL,m///Ġpttd]\\}vdffm7UUU9r8yPر{{{Xxxx ,, <\.Wh:6>;CQ$^Urސ92$%ȼGDCC{D@DOLU=tu݇t ȿʖgLOFy%k7d{Nަ||-mllٳgE={Bپ};iٲ%QUU%d˖-BT|!bnnN6oLZnMTTTH֭֭[ʋJ}6ҥ QSS#-Z 'hiilL||<ӧiذ!$}!Ν#ښ]V@~ݤsΤP/$锥kʈTGzM444H&MȐ!CŞWM$][l!fff֭[Gd엨3eN|#*]j;Eę4imBLSdǎBrľLTUUIÆ ɐ!CǏ|6oLt?|0133#Ņ W-_;vF /G%{T"ao&(G?#(u}"x5*w3o,^_77FJ#22߿Ss!#"+[@OѻH~HQr|<Ƶ+ 9{&N"SUw_8:Vd~•s$.ǣ ..^@Kss6Bjp8ªU`bbRP@~0b`7nΝ[f}[~Km'+0|pp8]@uIDAT8rHm$ p8kYmYPlXÐ CC0pDIӧc\deeiӦ;{32b~ xOFm 9X8BG1m G\=ǎæHI b2ן$~7 BZZ:;v,Ǝ[f-~lu%DUOgsh6-A%ByUy # Q /Ki:ʋJwHWP( BC>w, EО6tW) BP(箄Jҩ zQCP( BP/9gnP}BP( ;rxcQ _ BP(BaOrTr()+LAoTTTP+Gf:be4A(١1JP( E<2hbZo+(+Aem jptr9(\x k BP(uN7,<ƾvo"u"mtl6Zmg,VԤ9223q8侩A(41h01iVۦP( BCʫBɻA޸+$ S.mԮ! BP(T*:tS B(GT`7ڢ.5Q_/u޺iV\˗/9deeն))TkY BP2w\DGGG5z^"^JQmV[qYWٳgj VZ hޜ.Ln BoDFFjjjm9`jj %%ѣCSSS ---l{Lv4k&~;a&MnݒI]AII!nGa7C.]###xzz۷e?{{{hhh ;vUٗ&S <PWW6l7n ]]] 2o.!^l(njjjDddPY[nNi_[[[hhhu o7oFVkkk\~{쁕4hGGGxB/2lb2ǬYpY={ĕ+WoooaܹLge߽{sK0p@tUbLWÇw+Yy?>O׵ +WDѥK;_fڵ Vb}cƌAJJSM\Q^q\(Cyyue%=( .ra֭x-n݊˗#66V@.66W^СCtR{߇ 䊊R*@B޼y???L:M$R.>^bBBBܹs<3gd0uT,[ o޼q%un 888ѣG(((͛qrww7233K4o ,`U/6ӧ|rܹyyyضmV\Y믿]v!//۷oGppX}Lڹ^ŋcÆ ӧ5kְ:~~8qo߾1p@l߾ǏGNNz˗w^lٲ>>>h޼9/SNƍqYFB0yd899a(..|=$uqUNuDvv6f̘ f}wXt)^xR :ZZZvݿ%W/=*<. ۮ/33QXXHET,1i,SVIgϞ?̤9rr ')))M6;Ԭ28p nݺCCCc͚5hР@__޽*WFXs. ###23gę3g=z`…ӧSñzj ::PaELL ͱ~mۖAGJKKѼys5 qqqHMM鯪ōppm2999h߾=sѣG̙3Æ cuުilA:::xL+ȇСCddd|ywO?Ĕ9z(,&#͛WWWF&66nnnb;Lڹ`32ӧcʥKiii5; jՊ^T5f2}t$%%PRRBbb"usΡo߾xzzbɘ>}:ؔ)SpmPVVFqq1444+4mT9\rfu8vBǎE͝;Ϟ=ѣGkU._ٳgLá'N?[ &z?\ ByyyPPã>%Jʈ?wxP[6QVV۷3?f())3gxO $''YnlAްСCѣG_Wzz:̙YKZ :hҤ 'Sݪ"jؙBMMj-ƈ#pib֬YXx1fϞ-R~ܸq֭add2H]9噘-M{uv.. OFȺ\Jjj*;{{>}N:1τk׮۴i#3rJ̛7@E'޽{|+++],ٳgLd^zz.Y뚗]bȐ!Xl4i]^7n@yy9z===Ϙנ:| L?xY字 F kě7oz|#!N4k֮];u/]˭ggg'Ԕzo*/;a3ÇG^|EQM4'ĀXqBt!kkk\xQl +2")) Xٛ7o"00͛7 nܸ!KRSN:!!!ALuر#3-im&;;;;vLr!5 -f*.v1immm ==|zz:ʋ-[DΝѹsgXXX@SS޹sgf%PӧObqr|A୉u +++\rTm>o>?Lz兘#66L oߎL?8rJKKqIN9s?YYYgdrPl7007SSSmV`4 ٳgիW(,,ŋ)S`ҥʼn'rSߜ-Zܹsb@Q₳gϢ\.NXy+++l۶ EEEHJJ/^W@@|||p%2a޼yABB u6ǯ@޽o߾Eaa!Ο?A֡x`׀̽{`ii)0)55Uf :0ydlٲEann.2tuuZע"Ǐ(..ƌ33&ӧpwwGTTF| *TUTri%p*-46Ƃ F -G&Mw^s/*#yxxQFؾ}@ǡҨ;vdGFFbĉG@@sS)VBvv64i^z LVec9aeeKQ@DDѹsgcΜ9 d]ƍprrbwL6 jjj"(*fΜ+VI&077ǹs$EڱcO4jC id|yEaܸqǤIpBPWWW̟?hԨ&L___C 8Çc033VX9s֡x`׀̽{7ە@T}Q(ڢsx%]ֺzxx###4m-[Pv-??󃛛 00v8g}$lm(֮ "+V7>) =+W9nW.ҰaC${vEWO4B][". S(ruL0AaQ-BCCq]9`PRRO SsBqNI 7To~r*XT`A__puuʼn'j6QOkۆ?G۶mm" ޿kذPII@-^J݆"""BP, E^<=="$&&bԩ0aBmEJ3f >}Z jjjh߾7שy*.Wk^Pqq1KKKc7Zj?" Dnď?xXSU_#}]y(?ll:#1"##kˏ8{ ~Ex{{#rT&(uÇhذ!FQo&#RÈ#saҤI՞Av100nQs,jqGD4i6ʪ TTT~}O0j'ZD&9rrs[H[GгUk xM7o ﯸpp&h׾vC(G^hb`N6Xz JJJ|3qI ׭Gfͱq*[aCD"<sgºЫ_Y;2;rr'9E7Ǣmƾ ,Z_7JVVV(סCM7F^^v=KRSSͤ* $P]u=A\iz;:b˖-8y$\]]kƚm,2ю?LBr ‡wm1Bq\֭Z;{r3f+Whnb*P/G0%~D_p\MIXU?%šPZᣇֵPÇihen.PΝms" 6&ͭ1XłգvF„?+NQ(y_(*#~&>0[Py`GD`]ܹ?a&2&& X/qu䧷o W>'1vXU_ru9᧟ܰ~}8Opb]v8|QXGפ5X 聬Z7u@r "R߉B@k隨Vu))!5{6Msss}DRRoߎ}Zn={`O<~~ؽItook{nAڵIC]]IIIز%{)<aq7YcAMA?a֬Y dff"|#Dt9 BaaԃBZI@2# 2HDڹ&7Ǣ]PSUᘃذqOtîKLb^9s[P 1}T.Z,xbOޭ~ +ccYL~=c;B֮E@xеǬs6TLmy"->tAM]sƜ9vwO?~<*+SdE9kn8xX;ĝ.aaW]yƲeKlRuvFHH,$*  .a( =~#Z)5G=u}{JMͷƂ"6*/B}^AB& kEo玄~[.%*Xȩ'DopX41ov a_{H(23pm RMؼMPVDF&&&+򷳦 lGG+QDCXcAc*ļy3{}EPTwMq=4a'jn^*)}Rճ7}x_@) дz(Qp#Bv&mIYڤI[l&jgL,mU(\" ㋢W;;;"cz(H4XTݧΙz&J/,8`J2N]b9 xjj(2S0P?4wWWboU(,Znk*ɲLvG6 ca5 R^U*7/6~GsKgXd=yٿܼ'r888П$Q*k^E5ݽsvWd,|}=WAᶙLm]o{y,Vy4Ͱ  ^D`yt8Ir1(.#Hdê.@Q&i ((ala+8sJӴmr 4:acc1 ~ ' aާP?A&݋UhmnpMu~~jIN{?(5)IENDB`mathgl-2.4.1/texinfo/udav/udav_mask.png0000664000175000017500000006462113134046534017667 0ustar balakinbalakinPNG  IHDRh\)sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxy|T B&3,TIH(ZZn._նVVKZֶ.@.uEDT@$D!`21@&s1I I&px9̽9|͐iY;`Cuq۳ AO(5 (&ŚS?oHgء{kܠf 䓝ٵ G|UmOǧa$iа n֞֌m۲m[a0?ȸt^s 3$|{io5ɯޞ32 KaWJTw},Rkkl*_ O VM--e[|><&\-0 5 h ` #&o _f}ڤȶʲʶknkkS*CmkC]jkj4t=קiO$=g2&xqQ:ݹ\!Ky>P, 0zje"Q~g7ohCj90͐0Y I6$Y?IvYw$B +?L`O; 邷{`0aÆ)'>L_pG4l0IWP+V[g]}5*<@}]iV/pz2wy>C=]]k7eKL-*W`p X=GoIM+8#kȫϷ% 1MS6nPIql[ںebbj-2 Tud /ծлPAnFw]f)kȐ!zm֬oH^yn?ˉ׿o:H'۶h"}ᤓ2*׭ׅR]pZz.]ә,1M]٭[*Z_ߧqa7)ؠklk/Pm}?ɶ}l;(v@M*G--=.)/8@ ԼikTU2 C{nY[ZO/xbrm_a;uw_|Igq ɓ5`l]tc=:?i&͞=[ԤI:5˟֊+4`zη/ȑ#%IzWEE{T_T\\Y￯\K.a=z}u4q;ż暫<+Wj֮5SNeXޕW]kkѤI;Y=}Nnc}lrEQy}VONג%Kܤ[_Wu1t)[oxz,3U__}GjWs=͛7P?~y_']757M[o]]w/e۶.ZRw}we=֜ _k"9}uzmo;N WЄ *8`򂫕Nd7IJ,54kQںeb^mm٬K ߰m[[jݚպ $I/re***vZu:uQGk͚5$Yf\|b]>;k,b1renˌ3uM7k޻ u%hCF-Zg{^'?\J?z5{Λ3`]Ízvэ7ݬ**|GZv;SοBIҜ7Rޓ$=uj}/uA/_~c-[\wu.}_-i]z;^}=+*fMouAgGTx 7,UշijnjV0-[u7պ뭭[5p@575sk6TbŊ.~zԩܤ-Izve:$I/;>d{qM7+4lO[JgLIԦ>pi555ʚejijI\'iujkէutWHf1}BԊKJK:N;j ׼y,)Cߖ1;Rwe,X&nG*ѿC/>Ҁ`@vkKzz,яYç[tHk_CE7nPyY 5\~ڽy&x?n&t)}vwWc=R56v5?Ӄ>ebz?{mwܩg#=x@=Z^S .@o{r B}*;dm2V|[U^^/O?b-_~?&Lha0$L4Nr--)ֺUkٳf0r ˶rjݚƶ߃;wFRlެ5r(͝;W^z ShZGVqq,ʕ+5zh)<@-7'[i?Sk-7IJ40X }W_~ }G%%Śz*(($-[LtYgT'|kÆsWNٺEgO|PszK_<hƍ:Smϥ} Q-[L_e7Ie]?ISK1hmպ5wڒnlz,ʌev4MmټImm}ޮkuI'nSvwW/~K]u啺kn]6}=a~WtƖC75'y晻Uv1!C#S3g a>} im'4cF{zrY~=f_577kɒm$H;$jmTs?*uy͌UV)w>_k㯼;,I::_{U~N8Dvp [>0ߖuvuG+gO11;Ōo_:{9kڪ+VgݺVѿq޻ ;o#wpnbޭT֩;mSOaz9w.$}_61KoߢE^ާu(uk O{;^}=wfnCv=]Ϟ:U9Vׯۥke756ꁿY0ec4glT[\/:Zv@J;ِm烺R 6Lyy|R(tNWQ@%)/An's=ozzZn@/}8n5kTWW޻Kg^˘>c$sΑ쥗ef~Cok׬_|Igy Љ{[s9L՜9su Kvv|6twޞo~3 Ytw?T30abe7d@szclmؠwޙy+zGnilqIe]ojL-CoȉcSvMZB~߶ʎZQL?/wܥuMͻ]矯VJ\>YZ#Fo{Z|nӵ`=1cOkӦK.ײ;(cȶOo[jkkЈ_+4lh|~UFZw֬]X,5k< Iַsmmm]B6-X@_7tܱJ/^Ol|湴J-uQGkڵZ\Q!I uq)oQ,q<ޕĜkL`VT-?s?K)kƍztפgիw+딬XLg}l3T[[NI<==e-)gL[o/5eꫝ)S\3+У>m޼Yz4]$Iw䌙{tÍ7j\Ӕ+u{}_RSY+)}W/$%Zк4VKK?:jH|ߺ{tmY領#gBoo{>T~_=][;UvwvIQKs6ԭ$խ_x\ǟp6nKlG+M+M[?FeqG5mZlkLs^@z[q*+?-מ{$eu} :T%JS-&2 UQQM6xkoyC*ЀeZ[1ڠm_CumYZlQcv$h9t֭YnN׾3}:z=jGw.U~vJw԰w;r Q~AXkMt.? 4x|>L3͛Р- Ŕa!EFRvXOwRY{e;TPP3kk˶>ݭgo_Yf'87`@\-S ߡTT_K&nʖJc|tYmr|o"×ed[A`YzM AzLROiEmt`aF֭0p֯[+?t,}ދVڀZ[[uϽ_WPtbϻe?.BnK;srNۻU0LIl; ko'hϡ^sxIgo"91$g<#q_ $Ύ 910~5c gxad9իi&7dzUGpcO߾^#9^}ceC#/ǫWk*U@]__-[i&')RcwuM6K_>F$fW }iQgzMĖD]9__'˶UtX|N:ŶeYVG+Wjl1vv!QcLver.'-[:/(xuy@@;PK*uHс,1vW]\9~7m%Mn>Rcwuo)as#nRq .}:-8{q~F?r6H\lqWTrmĭѡjjN)'.:4ӫgq‹usx|ēNN'.r5烋ղ?p3dx}RڪzX=>xJKnJ:q>xڕr?3͙;W&Norkxm35gU,\5kwݭE 믽.@|LvuNk޻λu?Rn} ~uRv?,@3fcӈ{iA,ݺlzoqzaz衇TZv'?BF/}TZ2x+jW/|ƖN>Eӧޖ?P=׿!AW_{M_9{JJt'huy߉E _8IJuڔ3hb=gt)_Tiaƹj͚5}*+R9V=·9%I_9,^Z՝-YDk׮Yge.P߾}R{n];toG5ٲ,K?}ZTḑ4sƓZF'|U=㏩fGk~r .HGu.W^O=t}ywz/.vgN>H&צ~5?%˲to|]wA/`<=Ѓz݅˃&-?R?^ ZBp IGcHر3R Ngӥ\r/uӍ7hwtӍ7?Q͚[Ϛ5KO<~~t $g뗿^?wW-X0KN}7}9=`;:ct鷿3g?Q5Wv~}}.7R=V=·s?I2|>]}Otǝww~ǝw"R7Фɓ4p@9t~+v)c&k!5jnf6kVeK_Mw}: 2D?r}g;;v:L W^0?vZ|H7=34yRr:3wti„ j*x.] &hȐ!0a~qz/_R]ڟL{WҸ?~qݵ:4x`u)éM7ިmolWCܺuW&iۈ?mK{o~Cgr:4q>|x?^ kfNիeVQQNdRmm9kG#kݭ{a1uԄ =wcðC}庡g̩c*9+-m[>Џt^ٶ'=O˾G[ >\qԨӗbu%Y!NOit~wWNS>K6K/?g??.:4qza:/$]3ĬT:-Uvgx!яJz^5K7r.2]xI?sE։'?o8>0zhXBg$~^^^v  k F7#FuZ_/Qϩ]5ڱ)St=In.t{-?!CHZ"/ IDAT_8ڰS |jcqk[\Œw9x}o=}8ڶh6˕C[ٌǝZl%8{q3^r,Oȓ |}?ًc._Ԁrr;*8qea%9Bs$-]vxC"YV$g<=9{dD> Ǵ'gIԙ91PAn<rC{rNٶ-Y7f1v r l˶ ،lyגeYr م֚m9GFqpAeٲDŽ5G@nhąaO'# e`1r _pni<<_?r w?g_-G@npm0K#bA# 7Vse9?&01 p9!1+U+)c|>⦩p$tPHi*(;74M B%q3up $Ⴐ**U2D~f,KUUD"ê՘1 5MS555Dy}9̳5~}ڨR5>͹:m,Li 5D~W׵p$p8q%=.Wxm:7TR$ѸR:5yĔ?_|U=sWVV.JˉKܬlu4Ц&$CaF8aԜd3gɵ]Ot=UVs%ՊFPWH#G@cy]SFi^bb557H~ߑ2MTmM*+*T{Ij3t$f9gj-.&.q]{:fr[A2 CX̑apLFuĉ9ojB\#n#svc4*߯X,Xx\`6vxβ'I\#n#.jެTbے '.q@nlY_DśMC\!듳epK yXYǶm'Oa>7q䆬9۶%;~ 7drlٖWT;%.q@nhO{_)q qd'_s-MG\a[,eY,o?ÈKtrfpRB\#.d`J#Hi 3gH<7q䆬OhUJ MG\!sZKܜ 7d}rd;>4%n: ²e9?r* =q 4MqG 2MSPe "aMS2 Ǟ|>MSHu5n# HEUSS1c  )4M(5(RysN&2SZrb74(݅Y H8qe=.WUQhT;7 +d\ qzLGkv;vAx<`0HId;/o/we0˖m9{ճl7dj{஬9[xT/9YmrOej{Nhq[BIercڇT ^՞`vN/^ezw{a}*l٠Grw?9aGrPL @rNGZ/p2஬Oijxe?;PݒHN;b\+ dYΏ'2gGɥ 4MqG 2MSPe "aMS2 Ǟ|>MSH82>Ws8VMMƌ)T0tL4USSHdxaUUTd\cY*D͵e?6/o/<2Ͼ`(RysN&2SZrb74(u"TR$ѸPC4OGT2rm{ϻ o|>fNɓ&S~}Wo9hiyy#to\YYFݑh Ǵ'gWYۦ ǐ$2 3ڇsmE. QgB *+ljEQms$#UPPcK\f<஀8>*-VSs)4MԪBIT/ N?LGbv3{ޯb׵:cL30 b1G1O>D4'vNԿ' q:ϕڍѨ~bceqGJPW'ᙃ:^v&q:WJeےm;{>s%n: ٟ-Rxi 7d}rlq]⺒ٶmٖS&MG\! #k׶mKÍw|)+7qd\ifٲ-gz '.q@nH$gxHGR7rv4%n: 9[c RqB2MS@@xܑ2LT tHXqӔ ñ>OqT8&.q]\IpX553P`Б2MTMM"UUQq%;4eYR$!.qݍsg_p~T~^ \M6Me|ŪohP!E H8qe=.WUQhT;7 +d\ qzLGk7oqםN mY' J\H )#se뙸N$4m[ u'.f\dۖ,+R םN⦩p$L ͵32v8VMMƌ)T0tL4USSHdUUQq%;4ÑeYR$!nKm<2ϾpϪ_>9WSMe)-_xm*$TR$ѸROƭPC4OGT2kg}5stM41Ϙk@/Xޕ*mMiy Qw\Yq8n}fx Ib2n۴;Ԝ3a]@tUVsk%ՊFPWH#G@c\͵w$ɐ>UYEEEijkjUYQ$iTKOq#1;̙=[WWklqqgj{N\^pR74Ha(9Rf PB-]aeѨN=}S Ns"lےp_/hdٲe[^l5N9gE,|$kζxT{ >9[-ۏY){ >9۲%Nٟl @:J4 Pw^H Y2)jtjJ=TN_sHNf1NYeYΏ{ YW~($4)34M BI)7M0{>7M#dj{N\^pOG6vUSS1c  )4M(v9WSMeŋUРhCtW׵PAHpDJ{\B Ѩ?w$n8V8Qɸם7>_3OIS) Ђ=s.-/w+T27SK\w h )c @f%QscHx io]@tUVs%ՊFPWH#G@cyTYEEEijkjUYQ$ZTKOq#1;̙=[WWklq1qZLGm0 b1G1O>D4'vNԿ' q:/Qs{c1W,sx<`0HId;PHi*(;Rf i .S +na8|)n G%q3up+ jjj5fL#eE"Ó-R%Jwh˲TUYH$B\7C7%q#ﭽJ0͹:m,LiŋUРhCtVwG"ƕ\UEQZHp$p8q%%q3uϯӧk)4׃ >qsiy[WVF\fMLG$aȸ|L <'e`LI0 b1Gb)ҥyEnN3t>hT~߱ $qGh".q7Sٶ%: ِk8^r,/*⢂yWf$˶hiqY̖d$ookONt}@y䆀x/lےpc"pgζl٫ͨ1G@np-9[xL p! ٶ-hys8lr0˲e9|;.k8Оߙ–/~: p٭q8k8n?gn9>RqG@n׭ŏ\y?r ]\87-َlda[8lr0Yc3r \ V4%pyS4. 4MqGPAu5n#nrqpAXU*W"C3X*E"qaj̘BAG⚦E"ÉK\wf<>C2 IDATG[XLsޜӦɲRLUEQZE8V8Qɸ\X 6D*)h\Y)qzLGkYiȴ hԜO:E|n.w( L64~PbAjx ggQ:15g#jx C: ǐ3$0Dm2` $!6ב91ə3ǬTxhMrcHxLa^ 1-5g< ǐ3h2! oJJ91Ϝy @fhF!91$g< $Rt :15g< ǐ $A@I$g<}V*Ritړ3-4Ql3֞91$g<39 'PscHxI$g<&1e$#Y6#Yə<I$xϜ$3C0<axFljx I4 lmԜ3`$g<&m:y B'%!aV*26 O3ϝ(gxi dA0} Ԝ3HΌ@?e ǐ FZb< ǴƝm2#Ssc O; ǐ3CrcgZ`lm< W03DrcHx 9i, s Y$3Ӟm1LŻ= C4}PUK6q a<+x12ͽ/7M2.J!BXr'e{]euT.4)&fH_}a.Ip/920naܵߏ&Yn cvvܠÓdܲO&YM[;>@uwu~;_vtꬑۍIⓆv~vx$9ۻ3>`*""^qC.UjZ^ͥ*FYu]2 ԴTDdZ0cf }߯y9=3s6~wBi=QM\68 !|5\z.'ˊ`;`|qtx0(PմVs !qR7[M7㐠TvTM܆f3!m`[,.w',Pgδ0 Qu뙛(;o[DWk8{iAL KalX3A1*8@Z F4Q̖U0RgIa\QRWN*QLڭ]"7R7QwI@Rud 9 k-'c8 [;L!0Җ3#=gqB{j6(s63Ne:59#u-КթyϹ)1`mlp;-U5J=g# czldq W[[m}Fv۔q\n˲`ե-_Dc;0GQnmybWV֖/eqC8Er6+vG,y7eqGkʮm@ʹG//ş`ccÇaάj6yʭE!e1 O'|aWty8>}rq_`ko/^{s4Ʃͥ+ `HxlBid h%%%?_ȝb2DGw"K3_?^Y-ouNKU,|>pBNH1b<)bæ ~ٷsuu啔ĭ_n4[f+VMg”3uWT֯]=NNXv y=aV^9ڵx>UjDl{333-Y7V?, }}}}}}, s_^GؒŰجBZ&!f9N]:t/bvo-0@PmL$ÇWo kk+j nT---3{G%ƧzM^3)s%<3EhlhmxkU1qCP=,'q҉HjDl4T0}#bE\:<),WvY.#/vGUwo TeBUZV]]]q=7E]u"/]J!eW:Co01hk.  ccc:];!s❩Sǫ7cEt8@pG`an6;[[\G _V7=q_uSu"/]Jih053)k‚푘47D~ ~&0{¬)'bb~f)×-ŇmExQT.]\0kL, [{ax$?'.ǟ>-OmݧE^ʕ a4Ct t<&ٮS/iXj5>SWkʕݳwc[,}RYR[+ E Gr5@8p?Map7c:q.֮߀qc֔+!& +&#ǯ. CvNl4~<=YijMBQ)3cnjw Қr%'Cbl>D$GX yOD"-㟈D(UڊPb|@:CD$Gޕ-'"=J;ҲJSw"TE㝈D({-,C !!L6nA!-t@JsGp\68 !|5\z.'ˊ`d#5A0DKj;JsXǫz>P*Wq+͉f~DCRQ5qa~m&f丠W\_kX(!Xc"mOcOyԭM!4ILE!ᘴ.{΄҄ӭITtB;y}L !*gB!`B^)̦3!hVb=aJBHeems9:Q4=!&!;'q,1QN!YCDqWsnl6ueB!iROр0B!V4A!_Ju^[έe3 Q5B!o>}BifRiK/;TSSStGAA҆r^&&&puuEXXb}-[]vTs)/VVV:Γ'O0k,8:: 'OT{i\W$%%a„ СD"ܰ|r<{LEWפ[111XjUqWk!D&k93Kaa!QZZI&5)qI>Pc9BP(/3gĒ%Kuz !%%ϟ?GJJbu!""QnH%<<GFZZ>}"00Pck-' 1b<~XmLYYw^Ai\aifZݻ2VT⢣+344d...;uaɉݻΎľxY[[|m۶9880斛lllxsz޽ƎˬfGU{{1&k]366f...lBQ.Xaa>ܼQ޹s?YZZvڱqƱ'OԻ2]ZBfjjr~\\\!suue*yi}7|c7okh]Wo ,,KKKp 0@,""{EAAۇիWٳx̞=k֬A^^Ο?dt8rbcc1fXZZ+\xukqI&as^x(?5k 44fffm/^ʕ+sN !!)))زe"Ñ <|˗/Ǹq꼦0w\ ++ XlJLǎall L4 *EG" ;;WƨQIHHu~ &&6mjkI&[*'Oxb$@j9+tYeeeĝ>}Ze/+Xll,yXݙD"Qlg/r+++clȑ,00YLL sww=V)usrrb%%%*ۇ ~'mU Y"s-gϞ11c؅ XII {1;tcNy.u}5/ݻwg*e~ WS||5V^^ؖ<==Ai>ZbSVVV[n +VP={6:G4UV!,, &&&*SSSѿ@(B PXZZ֭[())͛7Ѿ}{=bxWq^z%O:6662e ߯ҺU.u}c(//Gzz:pB~?7oQkR]ڵk###Ŷ)S`Ν6#Tq>\Ё+}_kX"Pwׯ."dοx85rwwGaa"۷W:ݻnꚎ=]v!%%W&N6mHOOǻヒ \R%{ATTnݺ{4$$$ի8@1o<ؠr/^tK}+G ϟ?Wߏ%233kXZZ*5i}9sTuĮ+7BH lpp"9ysf,+={*{Dǜ0aq%?QyMLLзo_zh$&&B,ٳg8}4MKJk :!f@t /KtwϹ}8~8:$ԩكaÆ5z"B4UUUgbx!4fͱ'Ϲe˖oislܸfBnn.***<(344DǎqF}Bif@})qD8v<n§s!m>n-gF#S !A9S%G!|!u'5E渐 !*91" =srp"8i!ҖXY[Bd;Հ0Gi77mC!%nmC}Bi 8NZ7/!R?٣Tz΂B! r&BZ !`!+'bl #?pp3?_Y͔Yet2dW4[Z깵 !D.+'&" SiURShl o {I5qpcqoV3!#ͫ1 'T[~?D" ww7UZ΄6!// U{v2B0&}#Y:irO6.+IDATЫdf\5sKE-gBH$DI ϵ9O3!͐0E"bVhH"an4*3v'I$Z/%ň,--ѱcG8sNEW\A"ey)V,[ /z^ݱry={gy}o\n]wOr3Җ|7!b Leeeht JJJpU|^9B֣ӹha? <{/O'۳011Q+瘜ECdTm9MTYW !m0Y+Oeǎ®;ѭ aa> x;x :u&O~O)-ڽcǎc~.]\嫜3<V֯}Px͛BQ@HXZxڞCeWd$lmmNtvv];v~'j2?q-mPLi3haM6 3{޾[7akk5k(`֭ذ~2CʅdHxbE̷ b… [pI\E/cÆ -A&N|K/ퟪGknH[_]_:_[68}Kź<Ϙ(a8.z]h@!жr}vq).(lddp _tt4z055Æ秈ٺc|1\U޹3vޭ((1c`E*׬&~ ׮]yݵ[7 Slǧp%( OR)PLi3Fk7Xr%~|yPʺU(((PlKOOǠAԞ͛1bJN1}tq (xu߇|rC/f%|l9&K% U 222зoqs̓"6m5`rn%fjjZgEEEH%66fVGa C䣵['ggd|Vٝ_E*yy=wޞb ߜ骐ht~!tϙfHvƎHAF7n`ႅ@&==pwGJjѻwo9Mʹ7FGԮ5zLϢ;Ö.IST9B-F͞? -; O>[o)tqÇQ\,F/]Xzzj)o ?ǹΡ23c%Cq&=vpB2&OahȀ0٣Tͽ̘GEx x a?cEr]q-mzę6h;!Ng g.Att4"n#6.]axgTEy_ذ~="6E;&N??Eq`^;v >pO>f4$$L?MLpXD"sOݺ`ʤ D8|,FFFX@uT#s<Gۛ? +gy}%+iBH+E DUUSiUB!N8g>J\@7} 8v/dBHihKTkۓ$eL4kLo"9z{R#5dI]LWCB c Tc?/&ϵr&Z>ԀϋQ˹ѴB3!Mh߾=*+pT4@ @ee^~ژTA k P!BOvCB޴@zZzzPHS84D"AzZ:YDYaWo Bhq}*;)ݭEEV9Ks(9Bi^:9+?i^~=,,QmT_;\?^4cvWO[ b`ܓ'{ H!]ΝBN_{}46 uTB!8=8Q˙B`YI!N, !l 3h^hB!h "BJ|ϙ'BOn'4IENDB`mathgl-2.4.1/texinfo/udav/udav_txt.png0000664000175000017500000007674713134046534017567 0ustar balakinbalakinPNG  IHDRh\)sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwX"%ػ(5JL4آFX; &QK{{C9~N<(*xu 4W !"V}WEe?+]ɒ)/BQDaF:ϟ"ݚ* r#@kX^`G6oK+B 3f\!LaP̶_PBjhZ  " B乜gn9/ ˻[<3ǨTQ(}#'O(DLtqqb")WOQ VKlL ӷ__S/ E˖ԮQ-Z.\&AM.]ms.h9^6o79y  ԩS,X_3o>gp%N]f:]/2iT*3Pz } O֭{:[~nQҊקo?9УgOΞ;55^}wuƌǵיǙsXRΞ=,/SŹ}v|r]} ?={9{/t swrN1 {{^ڕׯ|6/x5˱_ +g1{s5k"7o⫯6)v:"*9*TxW_̙`fT(U(Ψ^<11齎>Bl,xtmPv%u?{IċI՚<==RŞw7OO49{:%7'^ ԭqFRyܹqnՊҬ߰&O&>3bH6o5uzco[[ |u^ېʔVnnqI^x$:~8J6/R3poՊcϿ!66/+t6f̞;7KqL=cƎٓSnوx8F P(~Fi##"xp6g7;w6m(u3z4uL8˗g9v|\۷mg̝˦M[X˚l)u1+֭7۷/ǎaM8ۙ,áAGEQ\\2mn&O>Kw0nnQ((HHFWyZ!.>u+ߟ:u`i\efF%^PlLIX`xx8G6 *2ƍQɉG2plmV +W\|ureܹCʕ^ Qi杲27Ζؤ qH:uriF%ԫW=zk۩?|02ےuyf1e2$&:={rr;FΝq?eKw,-QǧS]|6iЌ1er +V$*~RFe거 AFզXfNBBёhZSS~)SN}N< -7m(_~ɘѣ0q"_Ms|Pdz`"?RU?Q^]j֬G~Jx뭷;.<⸸ۖʹRɓ0I',áZ-ټ;w~MӸq}$mTŋ<J@V"͊9Yb8u||%aR-KPK\l_SS*?&/K;y}zݻ5^-۷?jG!!xxxxx($$q`XR_tTooQ'3݊9$;j?3g͢Gw)Wܺu9os.]_7X1MT1ԋ~xȈYq>qna}1hn]R7p* 7ceaཞ,]0v%4yh|TKŊQ4?Q#3~ÉJgcVkEzR¶]LeכPT?wےv(U,rD>}qrǃ ~G>y% z⵶m8wFEy^HlT$-Z$((s`nk3v0WejO;31&Nnܿ}.M : sssV\E`5j5?f߾L0Ѩ|8:p~̔)xqqV˦My&H_fS՜>}V[*fc:l0,--8qqqgq,2~^]u\li~,[Y''IXľwo+kн^؍5b-Fs5Bٸi3-Mn3T@z΅ (]66V޽qpxP1cӿ4mږ{ҩU1UJ%v< ~3ӠA}^< O3}I[;N>%vB˳[7Jn/;đ5k2w|ZpiؿzۼMͱNݺ,[F a⵨ݻ8ٝcǎѸQ#j5ݻwg}Nyiȑz5/!22z^Cz ظy K/o!22;;;4iϨѣ@ύ)Szխs ٳ qT|:Ky/_&** WT,[~ŋ1w/^36jߙZ֬y!sw{sIM9w;..cGgWlCU6DxN`VΣ=C[ڏ\PUQ/"~\}BbE -ռ^5_ѠNH 6:OtQ+VDɒ?s_vPϟ~%J\.MнD$Kr[/V:kJammR"A&2"CC~@X+F2AT&*2'ONVv.YRwXz=Ɣ)xo|شy1Q#jU?ߟ7];6vYZYQ.]|\aCu!cWVˌ_[bC<*YsNR U!q22*2 2VcAMB Qg(Q‚=tHr.ϠܺyϟSZ5ʒ`nܺ]ɒTVd(66EpFE퍾ޝ!^Ciڴ>M-'E=ɕs"mmU(  %wӳB!PR,-g!"Q8!"i嚳B?I,B3R9 !FbTB!D>X9k,B%-g!"MB"W !yGPP5g!"_Y!g!B{AXؓ.JU%b y]!"y[Xҵ[[ L?v{Sbż.2Pdh"""LE^ű.V ' c]۠HHb^J%n-*R '- ggVKuP*բhs&Jqa=Il1k4y]MAT;;{ND)7Qlaer}juv333㕪ոt5kU}\%㛷n?$y?RESU(9.ӕsDD|sŽDžT1Z؜| MQ$[K($[Džۼ!`+" dZm!|s^8.Mn"i=TJ9<<}, |3CXZ&+e6E~|LWNboߕV.W+~p{˒ᄃ'4I3y]4a'^1&܎yfT5j?Hs{Ph"7-kWu 8ǃX跀gNs`~uxnmc_Flj*5nJ2eiԸ)Z΁͛7Ӻk8-GWk0h`9^u}1ժנmھofZ#2"jkɓT?vѪu[˖a&̝:>}K_T@@'OE9,r_b嬀)y֨U[C iފ&;yנ!;v'!Y޻װatnNc^5jֽZiK\\^(ZٳTM-ONXO8r`T^ sssJ,A6mXzi7lHNS>:ufӦ(}ZYjڼ֎1Ho~ѓz Z;6oUo}v|6jԪͺБMΞ;mԹ 5۱9>X˝[7Xˬ9sٵ{^:Ln߼Ch49ϞM~ҷZhݿyuk16lƗ>7oF׻`ooɓxOܽ}±YpQw eS-_l9üݹs#F܍&\:|8O>խ7VKgw;s޺ K!JHQ1K|N8ζCͷ޺7~ _p$+W,3,[ lԨѸ4mƞݻ8J$ܯ]{խSmcݴh̔''oNa?_7_p|ca:Ә$ cpAjÇԉ^bdgcΝ,N൶m8hlfqQ4n̷MktڗJJ^hbΙM6)^mZ3g,ǥnk1c:Mbyovv[XФi~yu1ʢEheo`РϜ5ŋҼysJ*,^5kj6@_ uˮ^Jpp0E/^>x)Xd61FeN鯿1b(ׇ̥ i~Ϝamm#'}ΑGu.^4i҄bVVTTӽҌy]^ %KbnnN Xha??+Vԛ ߷J䄻wRj ӭX/N bSO<ʥoFKbڽTT9gȮφ7PjU8p ϟۯ[v3& OR^{KZs5EP^=˔)͓'8`ۼ1cٰa#!kkv$ƴZm\x;Q#`P:us]ʘJ%üÏt~XCP*O۶ͱD=Ç3l cI3v:.dϫqkܤ\[jժwR}\ʻI4gXj()}Q/|:wDƍqwoI2eLubGZjJ䥛7oꢷ̵+LR~dt \J 7tcdgJ*ۖ,ip/Lk\(1S^NL|\S3/ҳϮ]|d&א!i>l ..Y~7gdD/]ʙ~[tu޼y>]R z3gqݏJ&ϰ1'=~3Ϙŋ9zׯƄw[(},Uš\|\&?\z\NscOT"͓U?N7Ogu+m +W֭[gJXZZfGv}6f2ԸLlzkԨc9z5kf#r333 Nݺ >~Z}̚=7ݻAPP'OCxzz̿aFǮ<LT2dgX+V5dOJWo\|ϥtbL>1Q~Ɯ_]]]{OAw͹ [.gv5kdp+,ѭST>]t&$8Ϟt)[˓Edd$Z033cA E{v9_6|=78xP5.;se.]ŋ ~u+DGGs ~Y 8ǎ :|ʕ+֗/_cǏHT*{fiݪUF)ON׷/?fԩܸqZ/8t0WO{:'O"**N=}:Lfjdt Cϲx+U2BMٲic*U^aDpe6|Z3c,BCCɓ0!1EFeNV^=VZlظ1G\ %}Ls[2ssn,Yŋ0oj4jؐ!'/ X[[Ҭ |u'NWӾ&88]{' .KKK~YeW0l߿6O޺t;v߰2 pvvk<ڵ3i4wu勩Sˍ7qttL< EN5I ח'){zzipd:vCgcxvF2e-WKl{M[mә2u*>Qti>ިgc|Tf̜IŋT^!3vlw;իn/L_(]uRKehB1_x W7  9صkWQ9ܜS'N}\=v6!!!7m|򹖯Rd tYSXA# :Be~9u7\D̛7~뢈B(=ϹTiGYbʕ]T(IO˷R5jզXb,)#Doh^A!r_|B!rUv +Jq-y>.; .ߩ,U j5j:"RHMCqބ"w`+*ߛUM{"OaLZq4aE};UM+gϞql,0DqR"ݬ9MP:w8|Ĵ֭3]Z=K{R!z~Z mھץEȖMLF4",˷Ri4=$dmJeֺߓJU4. ![b}\`J%BVR9 !LR,bBXKY!g*g&B%-ci9 !\sB!i9 !TB!D>8C BCeB,ϭ-ȟd:vfBd,r`B:/WR i=N9 QD޽vpPf.͙?ZMLL ;fZocκyG'+<:tsJ4nҔk_g\\(\W7~eMe(}G'.X)C| r|& OMΞ.MsDBmNb̝3ĉP*5WD7OOWO3o/; '''ZO`<[|>;,^ƍq9 #;wJ{eT;Mܐ\.J͛7MΣX1*I,,$_!S\w}GTT+W6y{KKK^}:_Lʩu8Y~\S޹"[z馿}6}V8WHٺu34"..N/Fdd$jT#DV4lؐ]wf߾[{vrO֙u#i?q\oٱǨQf Ky; رcIHH`֬Yؘ}ll,7odƌ' ?χkW?yسg8~\v[ ݼ [sN?[;g۶m%e+Al޼E/KΩ̞5ټi'Nd%&#!R8q<3fdṀ>ݻ >~\JYr9G޽{8;;s!4My7S௿۷:tnСCu~m {U6,]C bذqo0vB.KJaÆŊc֬Y[բJq+Hj׮͉'SH:u6ԋ+?3O7aP:tnݺk̠!Cʪ8OFkWqQb,ŋ'0cƎk$#G`);v\/}z$**HOժUt 133cРx G033|?A;B! 3fϡwOҌޠ!U']+Q9q 3Vz {d۶z !(23 LIrPfm a.B|(T9x._Nݺ9ECrx`"<}jERVmZs42 LB-#4-DvʭKDRIYBXYYf)^LLlRƒ(rYOdikHŧDI,D!IzxvLƆlظ9`0! j9TkژҒ&ZYHYBL6GkS#+EQ޼]2CVE+ [b% 5ơTi7h/k֦Jg˘)S8//߱ZtG7hsryU_ZM.t1'e!-g! 1V+-yhԨgϞe/ʖã]2&n^8yoooa3nxJcnj1r!Q)I,D!?clYh-ݙ9s&^R^MYk3gpB7j+TaႅtޝѣFg`YjO6yܫrhmClт#Fd9ocCet:u-K~)lO"۷/!q}+VO>1yHb\BB$_'i]>M3׭觏s-[`^h8a<'O,QƧsy$ʖ+-3gj6vv4uiC%hhtL?A)ѣǨUVy>ҟ1tM=)]n݅ 4lؐ?E>}}fLxoo/xsTOӤmvܑC2N< I" \j9O4mhؠϟg)̝弍^{_|W_~Aɒ%9{,Ofq 8K+K:u숥%gΜaXvM* y|#zO>CXkڦ>"" ,,,2_+ח粉Ad$ 6ѣGA˗g1{m6&ngx˗_Mã}?N55r^CҴrwgՊ̟OBдiF) isc6 ɓٽ{7[nN|>8t2&àmX/UzKonnl޴)UOQg$q O=sJ4sij#Sr"UT^9.>3;f͚%z^?ȧq9Ν=CrN|==xO`\ onرi0pnn9qob9l۶=Ͳ5hP͛ؾt{{;Nb̞5ټi'Nd%F!4ZՊ~9Ut^4R?"""5kФI\]]ٵkvՕ^zeKʊɓ'Ѫu ct*Udɢ4ߺu7|;M4fժiŸCsA7lȌީΙ?_5j+/oFItFwnbʥYQDiPQ5Ç3dzuCP*!+8AXX**.^DVhў7ťmkd-[ښ={ҥKg޽Vnݺ@0ZRWΝ;wzlݺɓ'sUzE--GЬiSfL2$$$Pbײ2)S;o{e/;f 6CX;t̆"##9t+{!PjuM!RZ@ҥr%\J%Æ cԨQPX1f͚xfff$$$赌Ϟ=5_?eu#xzOv:utݻG;PxÓo& C3v|6lȮݻ+%L*U/\^zT"DVh4.^7MNʓ[˨Q7n+Vt,ggg:D۶mu]ժU_ЧOo]θ㍊5~8x ʪ-Z4;A/ WZ-j*̌A5t8ffĉ0` VVԩ#V>s_ukMEߠ>ϟ Q*]RJS^\/i@XKekk˾} Lƛ6KƍHPP < a|F÷8::2ˋIdݽ%3fx3}L] lY'ƍM1r|g -[`e ?b9I۴nOV1LJ?GЬYSFeE] BShcŻNjVRcT]|=4 /I۸n-;v0ib?ٶm{#B\J-6ѺۨQrOY[9nvp(Fbr{n {:6!g\ܸi&+脵5˗H8B!|3vQ x !0F2BגgB|F*g!"Y!grB!%6B!Nrm,-g!"I*K!B]},-g!"Q%g!"%?%RZBTxl/DHBR/WBͯ"HE{h hҜ}QѾ#k?} tY"/{rM@ZUϓ'O }9?B.wk^sn_ qPu5'OfeoȀ0!SN1slfϚl޴'NxyOĉ>ͼj]+qheHOi~\8sgPzOϰl{߂,^׮; JӾZFaҤY+Bҭ}& K*Eۜ9>,QTR??_zFI {}6~kpV,_د'OU6nhbf͜A˖-hٲ3gOz%ԯ_wFO,W*ti6wȶdx]^ Vսt1f(L{v"% 6dٷo?֭g]\ufffVgϞcQ+W333QeU'O[vԩ4R Qx( ݓ/ O@o'5rd#o>(ϥKa8-[մܾ}>}Qv]+T}lݺMGɯ #22ZixGSL83fa&<}JTT^p] ?.~\#Fq=9t& WyUCpqwo*ƞ{ٹcGeA5cܾusmvY4[bl?t錽̔GSiݚVbƍ4nܔǐ!w~1fpi֌/Bfڴ/7~"+y g|6oBWkз_?kT:uȈFWk2bh>4 zB{wWqHQ>rgF5}IȍqZw`pݻѾ{5kXcz}\pofz8:q~ԩ׳{L:E7r`zN30 8}#Gq葼.FQ*Ulٴ֭܍&)~!ã}{?A+7ޒG#iի1#W_i~hoxҌڶlٲioٲٳ.]:s]Zm-0++ϕ+7^zu5h ,$ߟ88ck·pr#WS:u W^y={Ҫu.!rbذqo0]f#DaҦm>40bH>} b 05kÕWwᆴY~=#=FW3ȘԩV IDATSaCXb9>t f} OC֭kGСܻ{G3xgs$i`9辴* WW|=/MbF8p QQQDFFo~V[oh4 kp<ڽ )B£V{?RvwoɪU?X\MGiԅCb2F~G<~޽?!(< 0npr^^ [2]Zlق;thO\٭ݺZ~quJ2e,cf#U99GC)6[q—)lBBBΆ (", *ʨy%$$I962Εs㦍s#|,_cF /%JJRwxZFCLL,FJ9W9'K -򂹙9Ŋan.k U B7;eTv@"c*JZBdBkrY쑛ߥPX!c)¤,B3J B!TʚXZB!D>#BO$Y!grB!B|CfB!Y& B!>Yʓ0JcjԪ%Kl9ke!D(vI%i̅z}hڬ)Kd׎DGdr&kn7ifvBI:QQ͚^\i9?K7OٽsG8exm1#9)j M4MbNPq-5j0:={2w׮_\r| 6333]WvtSvoK+Z%֭mkkmҫ"sBCCX}ѕfϙìY3_!!4i2J#Gו-ڢ(KT*X˖-KXw<\]\(VU<6lhza(kB= IG'~7vdd0 חM*KXXZV*V-K11:z:uqÆ <… };u-o#p"}l ˔)wT-7<vmnǯ^ Khqqq:r8RLiI/.O dmjCGXRL6oި6md-kw4m l6k)>|Ν;Dfn㦒'shhE:֭ZTU2TWյw>uulneԩ֯x"Ag7 .RX7ї?SuUxq//^T+:zڴmB_ڴiS}jGt.w 'gEy9 ߯ɓ'~zCzq 5p {i-:uj#5j[ÇOUPau^nEVoPa/o… S)EEz\* _AA1+=-_Myc~GIRhPuڵՋC th:%W-Z%K4u4 >B6M kA=Bê*4>y29KR.]ԵK4ˤyy۱'xuDDS} +ԾO orqBg+6(wˍ/X%bX+r O`2W ؓ3Cxa'dZ 'gvf9̑i9`2$gL„0ɾ6csIEGGK$@Pja^ ȿ #ww$kmWʖ+`IR Wk֪u۶*\#/_M%kUxqs+U$PQ6WMTp,ݯd2p\.f7'"sp[cNn9&&F111jߡo$snWDD"""Իwoqծ[WNJΟNV>ϨZ ZMO>G/_do:t~fÆбʕGp;;\j$B3gֵk\K*ի?SU|Eպ+W'u/zmի@Jyʕ1o|+X oC^ttʖ+z+22RUV$8p@O>/^,I*V~Rհhر7o_M~ M8IӧMՅ\ӦNUDDSEG3fW%IShIV-]pQ#G,Ţ5{&NzScǍˣFSӺ7nܨ5Beʤ cc.]3tkr(+TRG_{ /|kWLLJ̒TBܹSW\QK.Y-]*TH#G WVm2׬ٳ5axo$bE?͝;u~ڴ9cԩ8_A3gN<@ϟ;jՒ$i믩EiӺǍKbFvI~{hZf.^VppuaC_TѢE^2ٳ3uݷOddO͛7K|.$Cq~Yv5kp{jݡU<~?@Z ;t=իtJuZZW{_kjF~լY3ϮQQQjݺ;Ƥ/^40p*U͛7_ϧ J{Fx\\"=sgoogu9v['<@HKL/Pҥ4g,UTI PJ4{L, ԥKVDׯߠ6mTrjаf̘6٣DPI-\HuSPpb)TO?]ګLH9UQK}~;O7pkI.YD5ɓ'uIEDDvUPpPu>|DP%CM7YרQ]ڕ:kk iቔbɮʓ/^H܀/T@@6jk׹_v6j߿_&7&Oԏ?h}7o56n5k}|͜5K6FN~m[7f4rˮmaaa:zk6$-^X=rXUZXJÏGjK#Η)SF_)͖jC_|Q~U[lU\\~ / t6l&M+Vʕ+ΝGO)Ȩ:kgڕ*VԩS'ոqΝIӓޤO xK…ԩkgp򔢢~r=.௠`uU{j}w7͞37ssӽzZ޵ѳ\:u9uqO 3Bêy{tϽyi.8 1}׹siҿ( |&NOedwo\H}g*Z~+_Q-/>_}XX5vxx-ޒ%Z| WX9s--#E&~?nƏniA)hV)-2XjߧUGz܌ W>Ε aZчQ$zr6 yr*IY\ؙ .OJ@~FrdH Oյ,ٴ0{r 9q@;y⤢u%I@Jj0/GRC[^*[%I/(66V_Ym۪p™d2p\2ñ-g. ڷA+^\J%I+TԦոq.\(jr  lݺM;v!1':jIH$si&f'ծ[WNJ\Re護U~*:e԰Q-W^M#郥Ko(zgj߾ʕZwQtJ*:3IRttn/VŊWttmܸQkvs6m֜94gL;͘>Ms̻ܬs4f̫ڼilM/-)%~99vp|k'utˍ;Veʤܚ7&NMOM6 o(7\5oL~~~*Y2Xc_M۷8V 0seBطUl ]SXq7 ϡ*;q5nvu%fn]@~x*g^]]fkP4W"~0ܘ1&.@E_/* ?r jhZ%۳ IȜr*zX>66VAAYgjմ~o2\㓥xQ0=tH/?|)&FGVժY[-5ݷOڻoF~%)SF_)͖xpL˟S¢UzM )vwVf jN ) kƌvZ_Aw2!T~>#6jeʪa&ZtYWDPI-\HuSPp,״jۮʄSԷo]n\/ϫDPI-y=7h2!eղU8xP+VT&*[}~ ՋѺm[m޸^/_J̥m޼QmڶڷSUV:?ޥsg߷GʣT,ݗ3j2e_]zGl_efH[чjl*9Oǜ+V]T)6|Fu븎y{ڿoOtU?uKy[.Կ_uuluZ`֮=-cVոnjr.TR[lw:fZ%yy*ݻqЍЪa7kа~"s.^V25S}T@U5jؿW˗ߟao>@V%&&ʕX{0jѪ+Ԣy3UzSOVԭ[W5l@[Rp8?:u$JkfռyT)E4p;, UzOɳVܒTfMׁnڞ~^U$-V]z5"wUUh6'┴lB=OBBB裏>O}3˓On6W^UIcUGߧ۶kÆ=8d{YIR\\tKbBWJ{ĝ^2XnÐұ֋GѣL*9;FVQC7T ԨQCwі͛4ut׹:u3t5jh׮o҈uݽgwZ3Z>R{|^ެ{C&OOÇԶuU]zU۶oKGϹ|ءxi֭T))ÇiId ]rEzN=CWy)**J:߯zQڵkkn5Z^b}-kzq{"37*Ovksє7ǟ~$V 믏qXt4s,}mѴ}m-Z%K4u4 >B6M kA޻YM8^&NҩS'\RC_:ߥsg4xΞ= 5L,\ܕ^xܸ B@~fOF^z ǐd81-gLƾ+U7Eq9ȟ @vȕK{rD3M Pb[+g9gƜڵkJH˵'K3 C6M cX,h\[gte%$$'JLLT\NJ)"Ex; sfL `B&i<UI0Ɯ0 !H `?g̉ a0%3&c$ [Fu|LJL LcƜ:vH=9L X[s"9`2$gL]0Zk6h9`2$gLƱ+>&`Jd0993&CrdH ?JœT0%v4XS"9`2-#4h9`2$gL (&a(DrΟ;+-QQ*ūp;%I06;L*$ߤL [\KH )wk3 7ҭ ޭ+nmLޭ#0ڴ0BT$93 gb mZUJxR`Jl|rdH `Lə ax#rdH kk`|Lq$g&m;i9`2,B)]"i9`2$gL&Q*z.i0! SJ,A &Erd乘3&cfaJf0%!4XSJͰ3"$q̄0ʐ+rdX 8ƜpM ;; =IDATɐ0DŽ0oX["9`2$gL ؓ33>H a?ĝ0'3&c13 0! "`03&CrddXĜm/BB6^LǴ0Gr +Dr,$gL 8Vv--gL ɐ03&c(,9wv3&sf2F!9`2$gL 2x oscZ !9`2EHXXXS"9`2]x oQ*Lʑ1! 'gx#rdH+9[X& S ɐ0 !H}HV Və>&`J$caB0LEH0 #3&Crd6CI3&Cr/Ird`cLɾ Ru]0dcΌ;UcqJ„0ɱ0 Z 'gV̴03 acmm/Gd`J$gLƱB=x3rdؕ S0\krdH !9`2], )0 sH a?ĝ1g̉ wbΙi9`2Ldh9`2$gLƱ+! .G* ɐ03&c_G>HUb0i9`2Iə3ޓ,rdH !9`2ؐ X,|L'g ə1gt 0 rdHc?g>{> 0! `7X>p+dk{Պ7-Tn9׭['bJV[9nnR`NV)i =]0%3&HΆX& o,/BH];xf#nmLهMrd9IŴ03&Cr$+v(Cl0Xl-g@2dMRb# Ν]r>1-:3iǒ[ I2ٮT5jy3K0ӭ Nڵ>2 ibܓwXЦ6wvx$jz衼K\v]WԱK7͘5[ _2# x@WIwo$}qug-|ԤgIq^yŐ䓭8׬js},tk|w;zXҼ3uI1uZ];z!x,/ ן~-iZL%9aM]wz=xڵwo_DY,fH*߮MMrR0zt->߷_?ə sf4N5d5#د/WBCq%cIe۵ <!)PBTqk˶nm߮{;w·VbbRwʯ y6P|X_:Z3c[חQ֬JxHu4Rm5QukŪOΪ]M+VJH+.SUN\@y^?ʦ޽ڱýujHGKM״a%6bakUZʢ2e Y,Rd$^|~lںբ䝳&Q[ sڴk,{~% uן9Lch/ٽE?f(ޕcɻ#֜y 4zHkM}w,q2%ׯuB֘WFiƍlѧ ]zizV\.fӄIoo~]M?N{Z^{MonN};ʵXo6HI]GkbGR0tum˖ *C>Imrkr&S9sm0\9'U|okf:fۻnuVjd}s2 &Lnm51ju|oj믩~*Tʕ+q՟*˯ꮎtm@V-͞1=BKєIոQ#)RDA%JhKôknwQ#Gap)RD ki֙1a*Ud 6-6MΤt{'f{[~wΝTaAE,OS"ȰkM69W{̒G'u_Ϧ֭3J3ٳ}}i@@t'#Jrm2 CVkTw^:hT%Jf. U_W]GׯV&e}TX1c%%ܧ];PӦz'[%.|ѣΉ쳾ǎ5\z&ɪ}'٤Ӳn]R<ؖ:~ܦ!C쉶Gy챤_{pLq۪t0,]ӊ>T\:6H?;rH=#]eErejeifڀ~_KfއdOKN r~ڵ'(3y\gZJDq~oرYdСcc$u_Νκ MY˯K-pfh`{]SX|yEn{B_qݟyUf[nQZ55wL-CIj֨۶{}Xժz?OhZc-xs\bnO>>JbREFGJuZ#;XO=z8<ΜsدG=ԬzSZdIN,=~aIu fɞKjm?Uoe+$^5 âǓX kU˖zoz9vpd{lH5l뾒$f͝Ͽbcc~]<|?޳W 7v|r͚Fh򔩊w%$$hTc(]ݛSзJHHз84I}dG\+Cٲ<_Yn{"13j!ܙ|OzkD dh,&Ye9ғqg5Y,}u7mCt>+)ΦEN9G9{ztPM7֜3`B0Qͦ:uj٧?a-zm=v\E V1m5y4`?Ur%=zi?t`7AϟW͖[jh yWҥأ4mƬTI}dG\+)"GM~~>ئN-v=dɢsmzI3a[5#lUg7lHs:vQRRO}vکfeF%0|4c1ڪM%jhc @6=Lԋ/JCd&9}> 5GjcϼJR@~V:vMw ȞxbvCmH3jOw.)nVG٤]ӱM7:}wo/gm磝8Q㚾yG?v㲉6;ͮTi(yʆ?qu}z;X={RjZv&SݯKJIIw|;7.W]:Oi"-r1}]cycMm'G䴘SҴI }iΜ=ҥKGzy;XcGv G6dֆd[(U<}gu L ɐ02dU,w^cq<"$2( d:1g̉ '1 J>13&]~={Vqqq=&C ,[nUِ2ؑ3(կgϪp[հqV@tQ9{VeCB2u}s\\:vȷZnիVdzטsF; uɓIaLdəd8GZΙDÓؠ߹v*o%ͿKƍS͚5UP!~j߾֬YgscΆծ];EEEiʕ?/hȐ!Z` RqE)44T Tʕ{eu[3fPPP/^5j`*V:uue Y]$=&M￯p}Zr4if 9(ss=Q\w5 ֘1c4f̘̄ aG¼pcZc?gxLKfS(?YɓNηݪoȯvlۦ~E3}}*RFgΞU+{L ? ,~ER:ud9!!o²R HޭK 0d]ȏRy9 B!9`29e$_ϞU\\wzϭ )fuRz%"+"U7(Wۓql ׳gUHs9{6,=-["Zҿ, K`1UE=Z/8SJ, 3NwaؼJҼe }g)&^fCIDO-*:1-gBLLl6GfbR\aG1Vt˒gzGrS?tfŒ~?as(Ã5%ǾTF(ͰAY'97lqS%g???eOR02Ȩ>ldr0fWB|&Mpdɒڵ֭[-gWvll6Wbcc5zpխYMnjzz[oCwZسˌ y!#KouMZTo~-ZHwu쐍f,NFOY ]N -[VgΜY3uoN*T|wlߦ/ל7TVs=~Kfs+3|ðV^Ν?oV o-zlwV\*wzT|.^Ǹv-_B͚P` U\E}~F11f:hJ%TFM7h\%tG:z)]%el ZxYGfϙRJkyP|| BJ>{Kjܹ)~Wҫ/Ԋ՟yV^?+H ðekU0p@ =)}SR믹KҴi4~XGzl6l 5x 1\Q_~v}{4~xM:E?GOWiݚ5{}=iy{K_|x?sv7ZZUXk;c,&7b駟Trt׮ EFRӈ.\ڵkK .&iӦ2ӦMɓաBZ`I5gի[u~95x`5'9괪xЪUsissgОݻG+1;eI*3|Ȇڞq~ݳG1.I|||ܮY]|uرcj޼y:~:taZndf<\-oiӆs\1EY_X*|nTTINRÆ ,ׯ5hI'DJLLTnXRI6(CiA .)G~k:Qv&{ԩSG},O\89W.ݴ`^oΟ.᳨V]˖ҔIѲe^SfYܳŋ4xN<[ڲe~aWʕ+iҥ#5t0әС/jQڴy:}'uaC5aD}]|IqqwW^:!LLsvNÇVTi?:Æ 3P>\JoΛ%*3!q,P@WTRɧTRe… ?q1}VZЪaIZ,ɏ7mDǍӤV詈M]7k%ᆪ˗~xUQS3gҳ>ޙ|KBZ|nգ=TXUKT]e%YeB`܏?ٙ-ݗ3^h(OYIҽ߯Doիբy߻ fD_uQ?YklOs^rL˱ xDOvOWVlFFٕ @c3I2ٱ͆EH0<[I kasͨ~^$gGs)yy3,+$gBbtZ$ CVU׮%xbU%k׮bty%V2_G6^s[Ѣ:vjQK>>, ͦcG鶢'%hzUUXJLOZ LH6Zs}{uJ/EoSreS-xz9򨎟_.Fw*UTaA"f_I1$"UP!KiX!,HE6:*&Ð1A*IVdr{ õcքZxՒsxjqs9[L ΐ %s6l2x I>x5lmYo2 Ywk_ 3^cH[KB< TE9=Yѥ ivF$Z7[6MTa_kyڃ5V̪E*ZkpS8g|Mgm*cѠ ,R s>~tsJhvFnFWyIENDB`mathgl-2.4.1/texinfo/udav/udav_calc.png0000664000175000017500000041071613134046534017636 0ustar balakinbalakinPNG  IHDR:sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwx̶@h(Txb bCEbE`+],4Ql;H ly쒄Mnݙ33w%JV-.PՒAAAAH|pggs~ߦU',$ ~8.}AAAA(Sz슃lY 5FH$I¡jd MHINX|Bڵ-7'X`!QFu=޽{Ï?r$In:ytL}Xz5Ԍɐ!3W%C$y}fZ&Mp}߾4McҥH;>ҥ˸e`$I{L&V^è'((Ƚl^^k֬ϏnݺجcUAUenYVUmIu2/:MӘ>}:'O`e}?.卷|G,|7X{ݻ~۷N?dͺ4lؘIʕ+˵u}{DE|7,Y\.MӰZ,;s`ٲͳg^Ξ=˵]Gƍ8s {@u(ƪի-j*l6GugaAJ)[X[Xh Ş!CCn`YXZ8z|C)dgea㹉{[.u1{yws[=?h|<#Gd0wajuQMYжm:bҤ%}2` CrRs[z{33>D$ WeNVfAxx8cFnws(:,ٶbS믩W.?TmV+ӦMcݚ5,X+ǎ啗^r_~ )ʺD_B a[=> }֜ק)O?XpΝ G4=e z=~~KJġ*opn,sTJҹsa_A?GUzq"+Uj{{' 6kZZ`> tr_ϩS'+q{y,J%fM=@Z.u{СC$I^X_V]$I,]̽=Ncݺu9{u֡ӧw+. \<99Y<Yб_} OUn#FPv,Ofx4!A} =gmsU:8'N0sg^}ħ35j׮Nbgѹs$Y?qp},YLJeА0އ^g ~6NǞ{ CJ 4qp;mc Hk=O&$++_JZZcƔ:#<`/#(Bjj*+Vg&Vzx`la_!--k*Y(}#F0k9{ƙgl,>v%$ضmw F=ؽ{7Y Zϵ^ٳgٽgza٘2e*6^{c]ASZnE|>#Sr2!XzIW۶m [?vΛO׮yvUՈa޽T^@?Ncٲ}DD<~) R5j :dɲ]x_md0%}NZnEnvV󇄆}L~&Е>Ae7GODDCÏC^}5 }ob |W.>{#66{GW^AWE7LDD5~O=4иI]ۅb 4@xx8[`_ҶM/4h6 ƍkEQ4h+WӅ1(b|AQYfcHMnYyuAAn)HN:]Qݧ/)n[s$0}nOg?2$ڵU^pv4#4;`DN#8ځ$KвUKV݆Cu :F#z={OͩS\ -ET# Yá(呖Nތ&5cGQ2Rq^6:ܤEbu^:FEQHKM!'+̶V#@dYP('+#sA~Us!aTBcر}#qq|8czUTHXaL~:Áj!+3MO@q8defVv]CB8w49BBÈMnN6PN]t&{aoҺE=AAJUWCErXizPT5dG4wPNp=` VMHJJ"5%Ǐ,D &<, \OA*ŭ O?%!8F-Zh٢y+AjPUv:_z e^9[), # ^!AAUU)8$50i4q pUJnێr$stK` Ҧ  \JWKbMnN  T- z1b    _AAAdMAAA^AAA   Uy _$   /L5\ 5odWc}Qu7i AA+ ^iAY9wm'/˯qQ ""h׮-w5;WZfo?DF#;gr5nWٯVVuAAb$yLTFj㟘Ą'ӴIF#))ܵOf~vE$Wkaۙ"/?[gJJXgAAA_H$U=eI_z5q'm;vM9k6PEJк}Gȼ Mw迮ǟ|tڷkG@@z5cpM|ws}C?Zi'yb\۽'''Uly@ZH?;mtՇϿ@VvZz5CFێۯ? ^vi{IMrdie3h$"*ׯW^?8<0jT_f ?| ɧwɪXl)Q?b &Ok$>6lTlf晧'qj~?MU[f:&M~GƵjl>С}{Wo+/eʽ^:ʜbׯŶ5kL}}s[OĬ/j۔/?   \_mцwG#?^{ދxwС}pp~MC4d."X2~4>{S,PAUq/1o;v$#3X x\_T칒E=Сe 0;}pkۆ\KKMXn`ѯ坷ߤuVUtmt4>C⏫j@y}ɗSGAA+sJͬ{Y%9дKW.Gq'.EϠe0=~hӺ5?;ժ( :y?7 ϯO>>?6nb굼4zp,#uJ c 8?_E ݟ*HPۦ<   sKv~Xjե QFؾsgmQܠpjpMK?!*2NǾ/Ӻ5jM7b˶m1F`X0G>tҽkWRRSݏ˳?yz*5m԰!;v*]UT_o  pi]чbl6y=oŶ;(((`L}s5cbشy3j%$ <=([m'//AFF˖/eŸX,8xI_`)oySJzx8xm֮[OAAN^tO#lܴLAA7ln:>s1j4K.#==EQ8yA^/t#[ع̎;fMy~GAAKB{5̙L2MUiӦ5>0bv2ݺ1n0j/2Dbyd8us;wNdrX5jЃcӇffӱc{g\ &j%**~7)״W0HIIf>wޛMy~GAAK9~zĩލ/\Y*s{ŗ__]D?  puR$ǥv]/&X,ǫ_[oAA?]/&v<3gY3ν AA?L\/   W /ї.o   Ir+AAA=9ߧ^   P^ wA4ݻu-x '  •ht!wq{$ \`yӂ  ?^t݃gTU/p9ɲsZAdOAAA '')hZn=бc.vqo^C5 =)lϥ` ׸K -NM\Kn"zg)܁$[[B[P݄( Mܒ\6'md_~F⺨bbHODd+%nbb"QVbϟ9sYYfm{7##-[]$Ik!""Rdڷl ((70p2Tѡ+4 IDATmf4bhT j{[򶟫Vf˖-^[ӴirD]l6XApp$j*hs,DQF#sƧ94ï~-!=׌- cq;}I.^S6L=vIÚ4wRO[<|{Z1h [.+VϏAa0lڴ=q9Mvm]`…|͕w֭ر-[0enVBBB֭/\sMĭ,]{4?'t*΀yBP^, $i2Rد)xZ߂:T\46mJ@@@+X4 IXf ))) :UUϷ.̗7neq7jPIJL*u.rTh=MU_pYFfdYFU`6&Mmj:TѡL^rzkVh2I0̦;3.h>7p}|pqݵ9p QC7cZChqmOҎnbݜt{q쪝~cJ?VCǸVer }̇E9vmřn߶]lٲwd/IMKCedIBe$Ir.\>DEEGͩS<?0۷m%}̚5ߟ_|_,aر*[%_q~M\$ NGhhhFn^="K2yRR6cVhO>P=Zxj4´ +o=H޽4۸vt:,Ν; ;L&vލh,$ѱcGwrm܌ Yd 7ڢE0`~~~E%%%1m4ϼ}t:odڴip DGG_lE_ߢ~s?ޱX;▧SUU9R,/ֶ$w~zns)} n$IWO;w2%[^~+iҶ$j~enBԃ+ţ!K6dMA'pjAp hhHJ]?u[)ڌ$%6&%֎$I AӼ.Ur=k=zv~xCNRR'>U D=1HبA]I1_pǠ/̲qO$2 ՜0D@?= c.,3 NGR 9_$ h[N.GF_oٲ{ Ͼ ?bwKNf_ ~{Gq)S':vl>fO??_cZ!ߟ@hڤ[(8pIIIKVhWv]0k܀@Ǝ/uzeUvׯ}V`09e-x=0~Ʌ Rۥᜌ$`$_$tzRp>|q wLv7\N4^rŒqMzꑙIXP挵3> =s,E ca"^а[H(rmǜN̈́fϲ5Դ^\}'b ,Oqw=ѭ}GSрr ~?!t6nIA͎k׮Xq] ,#tڵ{\_~/Zާ( :tI&+R$ '==[weqӷ-| ^z%Xn999{Ea͚5p-0yd۷x|}Z&CJ^"q~٤@%=jպ /ފCףjde_vmvn0r9-X,>3OVAX ULqV'Ȼظ]od|F*-~G׷# ׯ YǠf$A=*HzZ>栖ȭP @! z,h2ҩ~!: MS 0HyfϠc]{o B:c nUԹ#͙=܃nxϗ{iݮ3&VIv&ҁzV=8=.\@(SsevQO:toWkE[=if꣌؎"a_?O}j*JR( ÁjPU|=ws.H³˻}) ,.uJFz9yȒFcT lΣi1nkWP\pcۉ^zdddpi̤sΥ_9S(EAA>-7wϞq4>ſF^hۺUUuaޗl„ OvU8J.t: X+9AmO&<NbTvWMSLLy\ɚ B cww+ج6wr9NJŵj8T/|u[gbW33 Sw68lVk5$*ŝsx!Ady`3X壘5־G7jAg ?||[ߒ:uʕ+=z ֭g^|ݻ弍[@UJKOw&'mp(>pgnʭ^b\[oE} O߯_?~'N=sh~n=2`T}4hKA>?|&Qw3nQ5c+,߲Ķuhӧ$0WcH;E`"f%h8Jr,MGig} BiBޒ}N:&ϏD65 >m%u庅DSUN:Ů]ٹc7ue4nMU% s=^&9W!nQ2 !X,[ؘ3xT߇]4,8Tz76O˿aSܖa{c6(~q}0$@Ap LHX<cw'WI!!x^bCB Bq(tj߁6-ZAjzi鄇a28| 8oMV{2zuҾ];߱Ytd\ө#1EBS6۵?/BUU:kSPyoJStb0l8$Ir^9*ลYp!/ǎADES}>;fɼ @Kl1W| .JE9@Ӑ% Y|ofҥ(v;V^Ofa6^Ȼh\p]y׭>q%`Z]: 6oƽ}:5jXN C2"n:M,:&ZNc嗝2edF[I 1g7##^NJTTGGlٲky摑8{,=zȑ#DEE1uTfϞ} %}6ƛylS ONĉY+6f̨P?̙C=DƍO?4n˼)(,Zjeܹi ,h4bX*2-ե [{?wȺ_!װ۝ػgPHbkzU0+I$M$A;m >l2$(ah35%f›"tɂir>еwdŒv¹e P5Bg,lڴ3gN3tPڵoǗ_~uyLjb!Ǝ}IP{6nNN&,[n=·[g6̊@%%-> ,vLF=#ojU*`#hߨKaܴ| hL8߉*&yzSFTBGzν9ˎyqM͛|^Ux.0UhB!QPEHH~F? 22F|ss{Zlf+ bK=p ={|zz:Qzu㎡,_;wCճG{g܀~W#4m T}aޛt_j \^Nn( }E]FF&ؽCO*#jaXX,Hq=ٴiƍok׮lذ#FPfRx\~ל:uNd3zt3>v)[WU FVxI2gSETGơ*8BZV>9))q nǻc<"Fu+GOK஝ p%ݢrLuױz*5 I/իWZh\׿rDhJ‹.⺪.%6\ht&>]r%׬o'&fl1 _QBCCQs),\˗ӧO8òy39G cgj Oƍ+B|Ah41Ne퇙L:~p@8='ʠ(BO?qw*_5 ?JUJHA]hٛ`UCk}htza: .cm}+@b21@N b"Mz@B9)Bq$ƿFf9 ~ɂʞ ƂA}t#!ϏTC)V+kX #)9s爎$?N5TUWӡc{}9~/͛7@XP`Ʈ9f;f[6;?} X0d bNX<@(IftoQ~z`ҹ;TN3+EgQγ_T PG̈́UG2fC_6|j4i҄}jjΜ9K?盦i4n}ߡGػw/9ePZjI o_֭@Dx^)KaqYfi?h\YGc۱l]04 Y"+O"J p NXbVy馛馛x>}us}#q߈'Xۥl_uW$ ,f2SRHNN%19Y8svhܽ ο4X}+O6뒗|w <"siyV z]$//Nn˗mn;fvr%zu!bjUɾ4Dh &X͐REUph< #s}/zBqKg$I*(so>I+֕H\]|(y4Y|c*s`Ɲ>cztgȪ0x-XHX477; ?q U6ЫGwϘA޽|[%7z*bU''9h4ԩԩS}b$ƒK}/yGY~zp`z=|iC[Sذm Z ec0{Mxp"/V  MPr Ё>I<@B%J2*~x{ Yu@&Lmj0) i]K on۶?w }$9Yر0ڶm|x \׭ ]] y}+9Hhɷ_FddUŨJ=E̵ }~]KnE\!E{ߝ= $g[Xsf{\AAl@p15ŸCOծ&edUxj("QU gekۆ\ӹzhԎŦ-[ٿoaa^>z\:ĉ''<<ANN#=#͚ѳG֬YCXVl۱͛7Ilh+٤Ҧu+wʺ|J0M܌_ryx7)Fv pz/ZVOaUG|{+IR@VD2 dӦML)e_ʀ?1.eH>ރpMy:UIBV4awBὀL2^N(|kT4J~'"##yr|v5ceRCvݙ75g"$sdW$(hC3VU1NnuxvDbcc ~X{IO>'phUZ?p82d~-{/_0|p;ۯl $!!H;ĆG 4>ENP %w GVB IDATCNU$I:YyF]#KT} j8ϰQwH=M-1OH!J2Quؾ*^,+x3 o0c٬(`Jhpg"I΃eMU @Cj 7gL~~V Sity<@8d 󱄳+mTZ0]ІáUhVa DWZzN(w%Zz}/W,ժ =-EBlm;EχvyZo6@ݺueW\2nܗ╯*X=zfQ,_р{(pbB_L]h.`IqT4T *d]?gxj[ɳ!Zf*J5s :wdCs}j(xxóZC ''T- V:t]uڕCұcG5n.Mf] INNW(l0/-XxIFS!߬oMKK#3ÑI;B '{'ջ5q;Մl h̴YU;[|p } nތMeٲ/(BBZ{zwހs/777mF&MgYw}ghg+Wh4`-+H1]к'INR~pl6h՟jl|( *N}:gWCPA3Q3}9#c6J*|Ӊcs=*9e0߀o A਑@C]o={}|<'b`;9qy+ )))WԮ]:с~ZŋektY׮a4>~?9l}5+恣o9o?[20]WHsÌ:U=n&]ԫdծM9)1QpiU F|ٚ~~$%&*b︣/ h&Ñ:p-[NMiXgiF 6/?'OᅣҴiS5jΝ;T]R_+pYO?ȥvs@8GBߤ o̗_+mZY\ⶬkʱ*R>^oMz\hlШ祒|b&]U0*z, Z *|[?s;39Z"5 F# Y:e ^dlSKry'nw j*WwF.S!+XLŅIi+h:Ml.8jp%^ > }pt/ cLUECd%dddnzy|F?Awߍ Ǐ3I5^iBOɦii|t)a}vpp0]W~^> DM*ָqc]e{e&:t@5lκջ>ԭ[^zeӣ{rW'%'WZ\ˈeIN(ҧ>=w77Z.s/K܂_*o1zf-}Nmk4ٱ}7YYYdeeNG2yL 5pqW1r>SCp0|q-Sqqq4mԴ/..Φ PY-r_/n.~oTnW|y#Gspr|lb_:%_PӠO8AZMpqq̙3lْGҲeKL-nwв3skhc a6ǭRaFfp28##r'_N fY7&&Gzz:[lfyL~Y=ѣGiڴ)ϖ.!00ڵc᧟[Is1XPgt |C:kTin:S7RNN~t Ā;9/O#-=_6oagcqG~2}WOgWo|嗧l =, w oMG8n1k/)[l) f|k,+UUYt)YYYʧ~8;;`˸;{)n̯;]̱jB~j 5z)V+{L6w#=JF74NڔLTe N;c]Q @nà7FKETNN-Z $$-[3ydXGx?DyR on]{uu߿/iF<pZָyS5]E9hcq0X4)qv2^Kz`jxdP?)8ǯpK󭪊ԭG|ܿe}Sy; 8;;4Gtwx ]|[hhRRR0 tЁp:4l/_ՕzѾ}{c~-֪UaÆ۲u)RFT>#թKhhh~~~oqpp=z wR'# s;oiU3s_1x"k)pfOkpiYUU\Pz7֦beWĪ[f!+3b[֩S,t ?]cǒ@X˄>+*qrT5%KX?=z+6#nfMy\(\xL W^e䈑LS{9N:E&MXh ;T3bΟ7{?0 QR-x|vU4܌tq0jnZùbț@wk߶)1 ޵|`Swas2Rsmϸpok֭Ø3 ޘ5MWӦMxz$z郪9^oXX+/ZDvN Bm  _ָ/=;\Ǐ׊:u*-w\{%n@woHmC=?\M܉Ν;x^t9[.,^>>>fF#̤6ŰT4_FΤƜ` cR1cPq%(P5J 4MspEW}ruP9 J^k īZjIM(>Y_7.W1Ϻ;~;k力Fh2|z~ǧV _{by>Ī:n=>I6mRdG[?[.ƭVArVI\+7N\&q+"͢pKtI 6O^T}cs ~X0GD>.$_53>>ja+q%n[R7J>-iӶ ?~)v텯/a^ij$7kĕR{ŕo)AYz> rgs/6ej;5Ȟ;qjNg !0VWfwUӇ#"b Va+H"ùp+Hڴ.^+qcܒҿQyŕoqDACm%fUX'=xpRUx*1r_,ߗ9/+:'|!٫/BߑhRR._Y|%$,Rl/B!BBKW})[cB!B!&[5f0B!B!nV҂/B!Bʸ4~yB[€wVuB!DG;'FK^V͗+: B!&%]B!B@ZBآIII!1!.MHhcdB!DmHFRBTtT4(>c6DG6 B!ĭVrנAhjh}*~[7m9(vvHC!=0!jt{ź5M!B ^7+iFb(dOÆiB4Miۧ˿B!(2L'71MUʴ]r_BNj}[VB!O tÇ7ӳ-m> 11N:LЀZڢ(E\!Dv +v蟃<;B4 !B[ϵkmNi={gӾ}5'-亓ѣf׮"Qsxf[K^_=;,%cB!m=δo8uaR_y&󣣣U\!D7kkǠHNe_'T%BaЀWfʬY5}?)sx(7(kޏ`ҤxxJP&^z99o7:7G.+" m=䓑m:wށ:5>;gիټ5LYWڵO"fMMƌPd1XVVUWQhZv3d%kw%kq\uZ_O!f;r+W' 3qawiףN:tE\\lٳyW tŁ,Y҆sOw9q"ru8uѷѪEu5Fs5&1NVuk~Gݸ|y OA,XPRU7 IDAThWڴI/utq)*+~4U9pt#4Sˈ#>3ttЬ+B!Jo/9_dYWvS!]>,XƬY'xzq{1'627iR.eś=oMkjOε;7n`dbcoo3xיb;~l.^UWQj7s#)-l-M%LtB!l3ѣև@iٿP!-Cֱ?#Ce֬h5֣(kg[}4ȹݺyq5MMzȼba 1O>DDw q(rr.]_qAO?I$+]B!nLzsϾ=ԯoiG9v*+Wysw܌dd3;Q#"zy9ezIݺEԭl:&&79`_9o;0eJ4MnQt}aȐ:W/:e-RUqOz0ϸ :]7cv!B!Bs;:Z矽/:Z丂ok|} (f==c2 OPP ~ׯ;v?La>BCӉpevd+!! ! j{6lxb=4sHvLB!Di yDPдvEA44EArW?*gCJnMVb^_,Ʀeժ:+c^~/W' KL@6iuib _f  b  T)+~rź 7Oa=j1h1Jq]B!iilٜۛ\-kM gdzJx( `+sLMiZ0{Ӂq=zq/y..FMNn]z 6_q&99 NӻOy7.6mZ[ux$>ď{XMUUWQh[K\ҨY^Ũ[B!nu>>>v4|${-[7b^Z2ɞ5 -9reڔVn[W~1F6Ѳ""0wn+/+4ԃwڵg쿙2YZm 굋+6o>}n4lFÆa_MNV$TYz}BT?yyKFd{B!(}!l&'Og'׽/ۑ*Zh.xNq~m[O6njo$Zp/r]{m>%ʪQL~MjΫʸBꥬwݞzcdpxH B! %R[cE\&99c{qUgM!n*ir63Ь+ !Bܐ w¤j6ztӦ+hj[o:kBqcPU4{w.B!7dކk`O!9o_sr@Q6n`0mÚB!Dűs_&iBEWZ$oGD*F}Fd%=!Ba?պ_!ua8|.iKhVvIO!BOj8_!Dڴ,!Bej=~eP[aoÇCLLCfvQ8dVUa h Kbb{,P6Ԭ ]?WL-O>_e[{{? prz;ε5粰]B!ZN_4Vеkз/og[Я-#YE߳Wr'4aDF/+|(^{ 7?ק$%8bLXʲYf|_sҽ~h~MEEK/oy}ׄB!"%zoӧCe+CΝ \ mzM-:=^_geGY0k עFR|~#k i Vwޱ ^i֨/|%\hy &N` ?7߅n4g[X !BQA^DQv5o"Ǟv%˛k4 >" v! 撓S HJX&MAAAKdddJYc?f ^]4@P{(wBäI%X` Aު۬^Yk(ZQ 'GonysV7]6-:,|+'஻ ЬcԩEK/Ko_WkWXr"" ז%% ]B!|[Zn:ҳ^=Ka=D}e:&x2Fs]y1EFɎ;8 uÙ3Θ{äsb gO ZYS=Сqqqlٲgz)֩օQ1`{=y2̛g 'ʁ}٬Yzq ?O@ΩSJo-bɓB̙zJJG/OP_ >Wս.\_G7^%^ ?}*|maVɢIII!1!.MHh]Ba[&22!bRoh"pD:1c=1 {7dD}Z6MGV˚7$U9s<z.8:O譲/OV~b[78Q7GRC*NB 4|ޅQW/J=?-̚wya@b(75 0{6j &xɒc._?s5 {Ϯض#ф,BQ^yN> `fB[LWQ"\\IOI7s0Si~qWpBe޷ww {(C BFh5?ӦMcݬ\$4M#==cKc0ع3 Jn{yqİ[B>>[~G\V/ 6m>^QPF[IK+6VoI6Mu`z,KJ-<Cј?_o/Uu]^W$'srW,Y־k(%%=z]zqіσBr駟?~<(ٳw 7777|SYBT}Cmb(9=gOgyfj3Ͷr릯fD"!;Caj\z=K.]vpq%(\6 *,2Ro@-ɓzyCyc-Y*HO?Kz[7u?uQ~~/_~B–|ci_ڶ ]狶6~UkK:v"^YW[Hz[sZϖ,nLkߵJ%ۧ˿B?aÆ 6e˖ѡC,Yi35wG}-[2j(V倅WenFdgyfjƣ>g}OxuVܝ0Vt\\\-[漯Zg`CWpR١1̔'C.:!IƏ'+8-ڵ&PPb^no'5=Cp}%6YVuٽZ([ד'çK-X`>$ [sA־kL@U5nvU!D!|gtԉ`vqobƍJe}TT=z`ܸq̵g@!D;~ZFp.ɩMzצcEc.SolyY3(p[зoӯ{}zxbՇ[  hJhx5=|\Y%־kLS لB׾}xw {8q>s?+@ddgg;Ν;4hSLar k72}1j(f~|ޯ>;f۔nfǵ}-NNf iV,Jpp0G)U zaVpzK ᡯo4lo덀#n1ʓ^a6z@,^ns 5Kum[=?zKZw$>WTld! E^ݮ[ƍ7nǸb}&M˴M`~Á_ *^OW_N{˗uɓʆq >[bVTM+ӁY !(nʳ>(1'''V^˗ywիK9In:uh_uڵ 8?;vTe!n0PVx oi:-M_Oq(:K8yCzɢ>&ڗm_Ӵ[9Č_%ېѸ{f!E:u(+{z_Xxu2j׮ݺ7l۶޽{oqw+ƥ(<̙x:'5q":e|U%x]37}.'MSQ.\%Gܙy۱]+M.BQZ֭cܹу&M_3zhN<Ν;3fL ӧ'8BطS*%W,[o7vE6p܈4UCS-4 "95|K=ݻE!e>cΟ?={6M6% Bb^|$+KvܙӧO^#͢Eҥ 4'88={p9NZi{BBB=EDEEcfDфd B,c~*_!yJ6YY8Rx}mlB܊;7|C߾}iܸ1?}_;Ъf4i?ݻyg:;B;B44.2Y՛,5,6doM%>5μ_ !n!,X-Zжm[v9{,7nߦiypd 4`Æ \pz##)A|<4kfyHùs0|8xzStU,P}VCqkrm nlߵCQ$]L"Z:kAT/|2kSKƹ#E,Bnݼ+ .]?_~4hРi&222_Svm:vȞ={*(gB n܀)L4mf[MGYpEkз/qwq&L}bÇa xBܚ4MC+0!/q=zpvp6KCE',BܼΞ=˱cXj+V 44zիWs=TuJ%((VZӷo_q֮]K&M* wBʒ[̝ E K@׮0}zQ0^-[ 6֬ס_oB[YNeJp%"3 !nIIIDEEoq]wc1m45kV+3ݼy3~!}~e˖v̙)Bv(3IO>2ޚ5u)nnqsM׮KYٹym^aҤxxEP<^zi#٥:w۶3t7ih}v?k1EW0iRy(O !ĭKS ل:d…nݚSGp֯_ȑ#eyf͚E׮]!lT!c'N\O3.{Ggp̳>,&ufط/t4m9:%.lyg/[K*1T y\w }BׇP"me0. !=?DFF|r~wNYt)Ş;f<<<ر#;wK.k EvIk,]?ԯ_. !*PnBfѯ_h_T܊w#>ZiNǎ%rp7͉l\],ܘ4o~矇Mh,>}//| [ xiBܚ|}8IV 鰥*#kVQQQݻEqAFOnv^رc:KBTHߒf &Ld_Ӿ}]k23spr2$HO<˖2{mobL>}nXXvbРA^KÆhpeٲ9K՜9x饍8;iz74cpH˖gڹ~_?ヒ&(h>k;2]6o}aC}ۿ__R//ذ7Xn>1B!ndGaу>}xbFɓ'ٱccƌ} KZ7&::DkmBpr[~_xW6ĉv嫯ڹma1k~ɶօ*B!Yj̝;>}HF)))WJ/F1j(Μ9S)1cPPP◌B!,N>ͺux 7ߤAٳs1uT:v,$²d._\i̙CvhժͫB|͢/EGEBbB]ۛPYSaٱc8pK.e֭w}33gҴiӪMYfWxpv'|©SP^{"k7 Q夀/7hP s}%\;mHt4!vMWQ}}vMFvv6ƍW^a4hР'i|'8::2a tBΝ+U !J`i^Z&Y.ܫJzz:F|_/7 ߯%o.Bcٲe8qD/_NVxꩧضm[.JСCDFFҧO{mQqC aÆ tޝM6ѷo_CQ:RBVhmy/Ftnߞ<8w<Zޝz/{$ q8q|(œ9s8z(͚5-W~k.z|s=WV|& !MLSU-=-~Kn=֥ <7b مNˆ$''9&yEFF駟ҺukBCCٸq#SLa 23fpڵΦ(௿"**7VzO?Ν;^wޝӧrJϏ:) !ML4Ӗ9MA19*wh(Fn4iՋc2;&ݻK\\-"++%K0`|}} ocǎٳ}ˊa<Ӹٳپ}{CE :}sϱhѢJ͏.L Bq4~%ӌ8:9T779d9xP3~;ޙIQ9ga6AAD7@PPpW% J~ݮ&ޫFшFJF4^ hDET)QنٺqN-3, StUuUC}|n |/rP\\YgE˖-3gWfɛlv'2wܨڱxg;v,{'O栃weŊtܙ믿;^xСҷo_͛ǝwmVpS/p4=V(hoÆ|[UfLp>{Z)7!=>|_9tuZה Qd~afΜGge]O?y76lO?4Gn!O>$'N;{9ϯ]wߝzaÆ裏r)(Z^{?OS/_C=TxwM F+++Uߔ3cTRZS5q.sr} %TWG\Ӎ;K`j֭[9뮻֭{Aiii=tP~m֭[WQ;G={dbРA,\#FP^^ĉc֭?8f̘1<h-IB٦xKRߐ۵E%LVuU5| %Wb!{F:… y:u*\pL:C=Ν7=CƖ6lX}h  9޽;#F(h<]t᫯bҤItIL:.]4&ɡ] p4yVѲk]i  ZQSAR *kk>_^{s~rq8;VGK/Yf7fΜ[7n6{Gwެ\>ɴig}̧~Zp&фQJG9T}7\64AV7YF}xι(,| 3gSOe=ꫯdѢE|\~pӱYh/.t[dʔ)|{챬X8MpMI9{WycF>=;wkE|A3jVzM:6qq8ۗe˖pBM9Ә0av=z(tx*' VqUWѺukf̘ 'P&kp8M9d0ڷgg$ZbҜt },~)bѢE|,^oI&q-гgOWüS5th-ZBʃL6Sn{:cҤI|ǜr)xh ,|hjh뜷Wko2V;ubYjU-QG_駟2k,>w}y'8p`sM֭)+kC2ZjEiE^#P**w)t[ůk;0 ļy8C h 9p80?T*sL6m??g}c޼ТE Zj=|~OYl?8= c۷9 oNlEQ:MIq TWVdkXf-R A@ϒffd3<~QoM/a5j/Æ cܹy䑅hi p8tso=vߝ/gĈÙ=N5:pi8Yh?/9䓙0a7p{gs[*B PZQYTgٸTKDHlF@+9/i9r$gذa/O.tHG#_p8MFizG+V0䠡TTSTTp8?{W_}Ss9[n#FpQ42P @hahOR@4*Шt{H/m**W4)M oɓk (߹1$Q +$Fن9;]wJ)b."y:B( {PBċHO G4 D$&J |~ŝgq٣ rۏ_| &ЦM.Bp4"wp4Qڶo )%~Ю}z裏1cZs5:;~R\{2k,&NȚ5ko[ap8MżB[]\]vkמʒ%K[yY|9gy&W\q?]vW_C+ >ٳgsG8rGCp>CF.=SqÓBs=dӠAE^cOb |7҉Ovӹ+8裙3qLpF-yf9\_|o(l@ñ} dX`g{%MСC7{aƂ 6lO<cƌN;j+ %H!B"e,hm6;Ҧ[qE,q#W?H,?e|1K}ӹsgf̘8Ø>}kHpl&P啳1T>xBp8石b z)|AzɅ^Ȝ9s{tAz衔3a„P["Lʼ%Li'<<)f?3^nU?6.ŻұXO"저Ao,Y믿c2c zQi9#}C: p8M?ŋsײ|r8>l.2zUVVS{`@K"jl6.Qf>t*E*&JJyHVZTh=PtO|\} > >" X?i}}]ƏUW]E>}~9 rӇ>}lkȎƽ%"#ڤQo|QJJJ(-)"j>UTUWP̀9n}OP/T:PG"qy9\~nݚC)M`~M=Cnevۭ%xcf$]GՃ_Z*k}f 9C/ɭի΍7Ȕ)SwLp87O=+V`ԩlܸ?;3ݻӹsBܸDd"+{$DT*E:]DIQ1hѼ[u[QZZFWTl\HzP*@) _k{r{MH1I&1`nBpPԻ?w'|啑o۶N=@0nܶ}gz-8ppZ?gyiӦp-0k,G(7ia{'$7o֌V-[ѦMڷkOhު4oŠTWo`͚5R)4?>R)͢m(^GNǺ> 4zǛKsن Ƈ~… kƩJ-2e wÇ/tC }~ܹ6_o̘mOc׿5=9UUf.Ppp4n>Xk׮囯ұ#m۶eO>aҥO/ Çswi;1KҗH%$o&]W\u8k2( γYt8E/3uT[8.rcbA2V+>x <~;+WrUWm#j㹍wNo'ƎC׮wFWv̟+|-jp8; |5ZoZ ,|g tm;vBp V\ɬYiӦ ]tO>$,tx1y ֩B"x2el}Q14oւ-ZвEKZnMmښ֭U+h(U6ӤitTKIDX.@&m|N,/DcIqHa̟?zjnBplwCbҤ1:`JM=kt?y|܍x5k;;8.2<#9M5:qk+_]7yHyf9w-[kb~~\z>{&ee2rÔQs}w,[9c@+Uk(籙op ]&U&]"]&]&]d]yOP] + Ҥgkπ>J>“&^RDf~$!W\>%`/Z}$}HϞ=y駙?>\rIr8 h#1bD-wŃ'[z>m۶OIp8~J:2wb:H*2)@(jvԖv=^οw4$7t[fԩsG c`&]AJL:a٦uK/0іN i\|/0~*ekJaSL d: Eiظ*6BU%5(Oyxi<$2%NQ{j/۩'-}:!ERG5q]&k=9h7̞=3n8:w\F;hs뾣kCug%5ERR$ؕ܋n>4߈tڤWUBF3H/2%|Ddk8/еD>ivB 6B ?.c9x!C:$A Up8I|jV7mNY IG,?VѭkĿ:}}3fG<補uYA֧m6~`DcL)bNt"Oh#ȗCJizӀOȸBfPISU:)iQ^ʤKi\LW>Z(/z|3 ȩ72?l>yYx'5ZH%:55N=X:,f͚EϞ= 8p8M XIuЂU_W_u&:"?$kv8+V0uT}]͛ĉkk/3βe(**b… 6ӧsꩧ8rGC_%7n|#zbcUTWUSS]C& (R@϶3NYW>ϟ3/<6e]EiET1)“@@ 2B_+1iOfZ<#g ')an:} E7Towp s=9ٳgӧOBp4()p492_C)P֗gvYJa&yҘ/TI}9]s}Xd :{/}x \pӧOk׮y*A\k֢׬a횵[ 7P]UE&!ɒW?@'}!P[k\G(JZ Wl 4Cg4 o~X>J&?vD2=v>^CEEEߦ_i!P6\r [fȐ!ナWsp8M:a]i駤EW@CJ"M(籡§MQs=$ ,`L:]tӦMcС:7`ԨQ_+"vl>ZbQߕr=\ m4H!)J*r ٌ{/Q~ TAkȇ\G?lJ#v(aKl/ ()賂:TS!du`R=;e^_*?@ S0.~H!y;C/lFh &вeKkAT |h(Q6m2bjV_LQ|hX'97)|GΊ+wzͅ^ܹsKVRR޽{3g{мw't;Bh`Th(6u쥥֭he D+e-ap׶|&>/?֏0ґFP"& 7U MB(a\i$!uȰ4Yׯ:F?7MCr83̍7`ƌq# 3{稣z5̙ ?̞=A:s」o7? w?K\;G}a0jԉ0g6ejp~SO>dѢE̞=Çsrwb~FgݓH)#Az$v3Tgkj!anyd 7t8?:n[WͭSOvq」8ܙ,X`f=w1tplF(okw\;؉6-[[oŴiX`pg}6{/=z(txq;"@HB qH]O 'gIL5ƒb(3T<t$kLLɘ&!'Ds{-L:z+u'X;Şu=C$}P:eWB#)Tv<%NҤ?6{Qij;xNvBF]+Ϛܓd;Xtޝe˖qr;h|H4ןy_}q=7wF}≽;\ЩS Ə}}pԁRHݻvsE/3uT[;\ CMCԘ9況OOMV },LLwf1+a:P mbVm}u뭸PǟoqIٗhHYo+UvW@ aﵴ"ߦkI vwߝYf1qDƎ]w>E/n-_W.kױcs9nH8֯wU:ж}; 0i$ʥA@zos^cҥtԉ.'|:V  b?dztܬTxfF@0)<I6 `?ee}i(E_یdw|ԙOb]u+l=^5fz!*8 ~a7K W_G}:Ăc|M:oS_j74ի+瞷tÑKx'ǙQJi߾}\Q̘1̜9 ~/O,txq6QJ7QWk9Vԋ8=ߦ e;ۋHiY Si1YAA?Vgf}|?Kψd}25O[6 gͫ z{ Du L}y#u.@()*ObAdʈ|M뺻(F9+Z}+2?%ld~L2O0bĈBpl5)?{k=־#8`WfZ9n̏8]_\'Cka_\s-pԦx1oVW/l׾ڵo~r=Ƕs#W^!JJJ83f Ǐ/tx?'0~IsO.^FXf Rqgyi;uϕ(Y7lC\>`=aO lpʼ'W0U/6K@Q~XKm;'73Q=D66ږ>;s7kO7n/OCr86C40~=i'>`ԅY1W]u'ee%us_k81{Bp}'p h$ڴ)m} 7n/2EEEs9=a9 \ ЩO:9o 'Á %4BZ䧇f7ZY^rR< 0 d;gA@>^NzsM͗uV^Kx܈Ze,%$ؓZ"]4P&=_K}]^hg]йŃHDKJ|EM9)P+]| \ um nj|h_ܘ0.~~{F iFk+3BQƯVhK!ʤk%:L=baZF B{ȏ:D#O?-Z0p@^{5ZR_x]߹XjBƎG^ԩS Q'^8p81rgҼysƍGYY֭+tHmRòAq<ƊwQq2y+I|BoHP9_u[Z`D8QfƊ{kWiD|}OBܫ\ו If#uUqgB lM}oz=?"^T B4$D焋 Bx-ReE}8}^np?'|’%K>}:O?4#Fs硇CO/tGD8)p8G#>Syg}>@Q9~(SONk=3N:3ɹ9K9_\_j'p<+Oo>U%9}K~2!F{a2/\3伞ı}¬R;]m,h^"H^]eJ S汎EB HOF|ƱW:l}GG4/A^{SO=gʕ+y93(..fƌ\yw}ᨅKw8&K?`ڵ|r]:vm۶Mr 'qF&MI'~;v}B娃ik=vuu4d=6D.|-vsSuzMTNFM$HI4\dDR'I7NN{ 9~^#wN>w[DY:qWDc|#G_Y`G(_x\8AD ϼ~i2N{"x6)D;cS|a}R;EgߡCnvzA.]QppC(]?ϙ/hk"?9qS>`HG"_Z!/ʻ/V^Zxg9tnh Q#DD}iy8B|a&{YׯV^{s1a{=?7pda˃6mp8kr!FV2|8k֮-slSLa̘1{챮^q><:i/>{N8UPDy4d~2:y9)u[+?>#^)g=oDztd^Ld$RЉrH׶A3@i/E"S^ !op"J7ash\?Yݬ={y&á[n Ggv۪~_J4hZ|m? )//@ko ٨VI IDATK # Pyoc #sS4j{*BҔtsEN6Kn  {ZBψ`uTN.q+&H+iE|nSu{nC1Р7I.>"?E`z+e\D^`0 YKu^n~f{JUr<aHkJ S&&o3AZ$;KM Kw[-17zU;!) p8 :[Q.q흼o5^zaÆ1g:B_ ~Ka=7RQUIuڈ|?K6Ȓ rSӥrMϯ˹uzrB?rE~;S_;hƬ7"/^H|%2ׯPГo~uDHl+Ꮽ3=ߌh ye!Hۋ8fQB BGM cw_h4ړ¸9|Ž*xC~h_{ }㪫׿c=!9vL/;G#''&Ȋ,TPSUPk /]h]S!mw _cfȑ̟?aÆqs:Fj`c9] kX~=Xʪ kO6XT}G9~~nG2خS'k;] O{mEicdM~xz0M F'PG3D#M?a܇1soo-?) dH[]"N,ʈ| |!ZVϋ%¾PW~bHЗ[ѻcE~tl|d{|3ƕE9;N;G#kJ4ڻcͿ*ſ[-_믡^C { ;h5_s 钾=C a֬Yp oߞi"3)*k ͚A*e`6 UP^Ny7SYUEuuՙj25d2~?3}NwI~S¾.1OЯўa~Ig [v ~uB?7EkrhSD>,XhPʾ[c":q--΍d(.rRs2،Ȓu#RHvh9z9˛'~x~R܇ T}^Ik/"#jS lD8L?dV AjLP<"r?| {6k7u }uvmA$Fx B/uO>$7`5"zqڂHp\$<^3b,X!½ˤI ?[ٖ}k  }.߭]C*BVKRSdj2i֖rɁyn}7w=ܓYf1qD֬YoBUD^X()gˍ,bH!l'sIJyx)/KIƁMthSt識ݶp"T\~ө8=_ƫJu|5q ~ APg8[}7nh r*-{_ 2 N}:W\qcҥrdQr&}TLH1" kQvAk= 4j '%%DJ*9s]:D|['y][!/b xM8?7}8!B}^!*iL'tQ9BH3Lb~RWB);GjrI-B6$e,D}^*#㢛¸B6RGuugyo\|;'|e1Ϳ RKNG"_!]Niҹ~Dze8)--/.tH&&p8;2?u7C< }vZ,[AT}amZ;wfƌs1wqvyR.lLX.qǙ)#R -_VZ 1Ĥ ,2%}?rRO\[9Jqz{:x-EI_$N(ң6vbVoƱim =*[*1::  H7و|)tv‘p5:'zٚ>O'(U_Q~⇃S2%JH{B?K܌43?rM=3 YQoEL w/1۱Ӈ_~cDzvZBh8p8?8E$K[-Q}=Gٳgs3vXf̘A=ϿBJ*1E 9Fn4&ԧi~&^ٚŏ*]SvCIZM Ƕ{2sL:,֬Y:$G/kñ#{/pxw4~&OL6m8#yݻw˥y\c\1*yCRR)EEPZZJfH!Jd2(+QFe@kVkHiH D :Ni[n#VKM'vRF'|1:6z-ICŏdЛ;|ѡ։(>a,"g$0H`Du̴z晰!_.G%c% `&lbx[ S㭸WB"Æ{ Oif)k#Qh}VGo։wˈ|)4R^q}JP(B}ѵkWyJ kVM_sP]~Eo \~唕1tP^y 0?GJ#Qp(R!Wma'=I|XVZoժU@g\;0?7-[grr^O~OSoߎ\X`PUe?5tit 8xu F*;}sߙ 2}|]{" _Ԝc>uG:MǾJ0½e'`?OE4({iWP_1"w.w4X1 Sɷ~]|_#BBX7^LgBAlHїRBYb(ƾ&c  \TN|I=%@M?l{/YzVZoժU@>J{"[ 't_8P|MUF!'|KIIffgټy3[ne~~(عs'[lazzN)]YY=ؼ|w^3!'.:4׆c{8{AO{s}D<0/bh~n~\3$zUHgL nl?|8je@t?paF"\j{BoHcE8?>['}#A.D(a'(.yGVdEsD?adRHzR1#&GQ9? HڴBQ#j{K.9'sUW?|O~,[E_[N[jժ>{TLk}V^rGpsW=m]wg9c8s@ LJS8m0{&3RR9̰efmlڴNQBtc aWư|kЍ5^!T1;D(8$DߌXqh[… _χgG]q i#y7-.dLW-b=kaf{d.\H)lT1Xtɻ]YߪUVITJYGi\JIl^tկ~SO=+__G?w?{^=P?|?2IiǞzen|d? 4!a/NiظtxXU譬PhM_ks83>Alpα=!٤I,4Dߐ2?p}_5#ޕ!u 176޻ZbsLeЯC@߀FX7ny9W;2l{ Iא6!!n^|_)Fv]al/yNy^31Aw:'0oQQڄ2@~N% ' ? ?VX/~񋙙N8|3ZjUVPm7oy\z5߼lٲeM[o_?ﱏ},_83xζm۸+y_r~c9ՠL=~Ti$l`I^Y ,-LOq1q ,// 5~1%эG3X׹…D0}<:bk\ p4ѧԱ{OA>t:y󎪒?~d8ՂsoG[4o43.Bt"Sn;͝Fdҏ^XNBv0(I R"(v(eIgr%ȼ@d92+YE.5Zioo)LINEAɀ 6|m}__~7s^{-~zRL-jժGHy |kq;䘛lf-{qkrVN۶m?K.Uz/}KZQK]%ob7wu$KmĈua}c엇Ag~ {=URĄ=<۶n۹kNzD+rӴ}J7atYi\~`w#b1pEjx/}Egޘ:נ>k ~ʽO%5nim 4\t!~{wQ`X\:׽3yd cBz TF Hm w:ENeL2a4I&&fbjE,---#{YBY|XƦH) g@*@2muɹsQHȳ|lz^x{,gqW]uOZKI)7]04EEmժUVw_<>V:,.z>p%pɬ , k%صR>Y?.[4iz,/-{7 LMYrfgg<;w`qqAscwXW`6|2TzHKzh]Xա~ցϗ1LɹgDwyta>|-<zWO"'\;>?CWO8>?O5 sӄ @>^ -ʐ)Me>'dESP99LAbgqiݻٵn:E2ׇ~ ʾq B&ce\[_;ȁFC{S՟KΕR m`YQSl?y7n|jOyjw՟^o|DRjժUV|Goz= iJUm!ʲdiq]vsڱ-9LLazYfggu],-ٜ|0^ \ۢg P6u'Ȱ/ ҋ>L.oDAfG9{]dwר_/\B7Ct3='HWmҸm[*#[4vd'};ɔ6drK:Hىݵw]L"/v!w/" Җ]Th|QB`eIl}e _\P @*IGHQts:Eɉ 6qv6n|۶ΏܳF>-O|"W^y%W\qzR GՏnǟ~VZju>ַЇ>ĉ'ȫ^5=;Pt FGÕ^M8foP6S:R].| |c׮]NvgYMvd4,NN\j a|dPI IDAT'2!H%.^Z.skDuqy 5?GA?FИek:c}as`[x&1..4_ NQ*.~ȕP!(p?L!r̎LoIwrΝdKˈ>}QBdKPRp}QRA][-Z t$34ss62ga!mLm6}w]}+_ꫯCN||VuY7{;ܪUVZڧoo|\ve|xɣ5K.[0Q %ךbx103^MIsinh7&t]wŝwО[gEQZobbN nCB>duQopVmȱjA0ν6rU _wasCOs]HԛN}qM'ا l#zみn: [ Ϻv^#Ʀ_Hc?D9~@cEJEQYjPHO)l5 Xdwqaw[og䮻vJ,+d \?:o) :zt)! o_Lwa'=a 39H2!:9EtbvfMm㠃b֭pC{꧰ws5]r-|9y+^??q'o|/K.w#ZBvu[jժU\s xK^E]_΃59%':%kɳggOhï.|pcΫ1{F)v/,svl>ϡ,Ȳ4y7U_}lEK;'}J8$Qg rP( M7|$'}po28hb'=xC~p뭷;knW}2RWdZE.*:fpK~8`@ >q_2 Pii!B&LMN3;3˦-[زu+<0800``!CKľ]v/{xSyk^:ꨰ^^F^Wwk϶վ|+zJVZj}(ַx<^"XpI32aFGLr21<#Cúdڰ*&}CR6̾\i2:yN ) eu?ݦ]+' r\.<$p,LGOuH C>>x{*?}i70{lؽ4 ;Ko\ob]2&5ᝃ K-bN HRc%2/ɊSRtJnńwBco.`ۦa-lܸtoùKz=AEҔJiCf4JYf,quY\z<Gxi6zotU q&po>F 4%0 ` νUY[YaLOMqHC(܁D@szs&u}7_0zw:~޻?T71þ1Hއi[s¿'FXQ~Ј>Y% ŀ<:힝 `>G9~fяk%>RQVJ* f8OٙC^5zҞz$BZRH2bv~ɮ1;M7y~3|0C![a!,w0#uEݻaav/0Xc:ݼ~W՜vi?#~}xf7VZju` g7#=vM[oK/嵯}-{.W\q~~1${)oVS7x)6m G݅} .D_W ]w1YFY` RJۿo<2R6/k.Ѐ|,ӓ@o=72@ Fz:7+{ވkG?`_V OrW ɝ+νa޻вn} c} i>-"0D DZE'Ty 9dd`l$m*"sҒPV(bLߘޣIB"CS.d铹Qy˳ ]$`tSSl 6mbfl9>:cWXA-{7,-f"9[袋xCg<|##+hu lVZ:@sN~gvgtiO~bMi۶mao|#sssy|S裏Mgv\A*iC6Me#>lrywhO6<':LC&l(? ϯʒ,)v/,091Nà,QJYZJ2!XDJK WQXLp}k,L{_!?!_'o!_7"O`Ta߶I}<{}3<x u'?qqkyb~/ b>޻.m?> Kdwjf0.\YXН%tjL f6L43`ǸV!Rh*Q*ִhh^{q߄ У\`dFEnerb433lڴy6m 7ܼ-pk@}h]`n,..*lN|ߏxg uZ|w]&9;$ = `\,KL2)! !Ǧ @+|a Bk{=k_caı@ ygҧt\H-~ƍmMi""b/*hs[k],,SUJUz+_ƍ9=$"ߪUV9$ pWO}:XV뮗%yG0Tl-*B0{1މMp<}jӅਆ;Uخb_%s񗗖U`Ѻ/ v!u}zD'\+ Hpen! 6mx ޵(>D_5r='y O 쇰p|:铉8NQp?ڽ_kN(?}$ a\{ӘW1`FMoe>JJ++V&t+t;rX7@,Ev®]^{T _x<31ɇ"+ q2}'tL05 3βqv)W= ZCUA9^ai޽%eXU\7/`ff<1|_O^Sjr?_VZڿe W| :(^Wjm3sNv];wrC{e!10k|i,ccHXy2`9a , ۄRf5JYqoԪ?EP`ܗeQQ,PeK7uF.L2L pɗF9CTnwm| ޹!sk]捘j.t3Ṭ[bל|:aeek ( J2ePX+{}"=Ֆ3iG*-_Y>U9*j`!_W֥7Y97$za!^H2bzR~'p?91SSSLMO195IgKgT c{* ze6\,/mN9`P J۸7(Kʁv`JH+ys30ysZZoժUX?* -]xc9o;wpƒOX >zt9Y#efT c[Dw=;W9vD"m7,$o _֚Sݻ4yZ"@x(w! _{OhjZU&'o>罓Şx`0:m}eoaZ?3LjJ)_V.w=#ˤuZsAk|$zUTUJ>ƅGOHo|޵Rqs? [Te;SLLMНPtsd.{Jhi eYY鱲J*z7׺0s=< +zւJSEHwUo|] eUUJtUUi78v?"]8>FsNQttt'vt "Gfҵ+i6TU`0A ]1^RWfp[E'x"]wOzғXXXe/{zRAFRߪUV|Q҅a{uZkrr_o:?gT^ig5CΕ gHt~-hB1!_8@w*WT, !Zټ[{ uP5އstp?~ >ׁ<];Y(2P&u >ɏ0]BGB~#4_T9NC*M%/wc߄zh~j9㖻e&B`nzڴb> q;)ɝږ[o@jEes/};Gc{os+kk.Fh^z{p^IH>Rνo<ȋӡtt;tE q{RɚoӥZZk&%3َUwN.s|@f[X c̏7n†# .@mxP|2Yŧ? Ws?>/¾mpaS?4A\cmh2poFм|Mp#0&,WU`KoBkjc hi_2Ȅ@Jwo\x0McYڇbz.$_&_fat n: Sҹ.4_p;t: "#˥ ˷}eZid08XWޣS?}TȽWJO"{o=r(/O_HGuh,ZjUV`1cBunYL+XK )fY~n_8pJ(=uS>on&Y!%КߐM#ƺz ˼S_~k p㫝{jDF=B]2i_ N~t6qw7(zBL2]_xL:ZXku4=6^sG:*i@NOwƂ{J~.!?4fX'ނ>7_m- ұB0|;n kO-,߻K$ ~@Ѓ`nF?|~~^SjuVZ:A 'ȃ$]v)ZQ`<)oL2DƏ}{w(&n~ ɴI`ޤ@ݽM{8tSO2rRk%{5"8\|Rp 9{)l!PE]v`oor~9Dt|cEYdB=hD{u'_'Ɇ\|#G e\;:7֗4[Øl?ڵ[>T`/a~F!~q8aW_awVFL} RcR '6ӀwП'k·Zw޽0N/}nˋB:2, (\M _tȻ]Mƒߺ>|Yz|;9Z+ۖBnժUX֙#) )lr8mF{yi IDAT˯i1[od23-Fd]`a3<R[dUV`rFFj z_rGMP[oݫGglJ{cx ~\(~:&oJ}3 !q|r(C??!%cB)elb/ȿgu U:JXy@jx}JIn}=%p^K۳u׭מ;R" ed o?ۼ{HF- i6RTʹKs]Xq09P{s??ӟ4OxZ6DUV`߇u䭒C;?oڸ_H=r*, K7~'F~O`npw!q]`{Ot {?]Ͻ[}FP 1ʥmw64?2C2Ј"pB󥴅2y ]X~wt6Rc\Y(Te -L> _EI o̫N$!v{.g9cZr_VZjui*PGO}+s:^ݼMC?ʭ;NP\AEtJzp|RkWS(lk>C|>/7%KdHsk8iy)ǯZ:7f@VI[p"7KS:iy"|a~{%]_Qw=޷=l-Ie V4>Fp?=۸L n>޽wozMhfA㶱秀/B.{ G>ςF  I>h…YnskorȄl <WJ.JUY^UTںU 7}ʙfi=&z;I'I'EG)L:Zjuh8J>YϚ=SvMO 7z{=nqaiw{s x!8S3r0|ѽ 6Pfb4D߷gIq|M &-DwMQdGN{Y}=c%IHWI?g~ icRhq:~+ B"dp!%Y|[OtB e**(UIݠ TiCE08dHiiFmoo>tgs5p)p鴺NJ]~VZJZcO6QFmZ:$ɮ5dAC sU<jtVaB2KK ٮ]oBo/͙ .f#A(,/߁GPur,VO|BMfD~wh#ǫ觹&bK1;KjI!}ɪG4n71&]ttܧ!vq!Oܛzw&a\"$<&{(l}t-c>{o\(p󥫜/˽r~s:޺(ut+m_e|eZh- 5{'G1CD:?3r _'?ާ^Zjui~f*@]nHJIl^Z_?ySvc=O!<߇c}|/ 0/\YU`6 _t88Bhp C9ɴN}O>Fk.kxHjdJU%:MmIe{& ! T)׮NJx7qEqgr5׬)r~VZozjg47BOkBB Gae\ 3;7obo܏| n9N>K 8&:S@;aEb~Sv7SXP7s=<m7RbcmO݂Uf^mÐG)ps *c".|4[ 9{|Y{" ' :߫ykH~OidR}w;Zg}5 Rƿ2BJoȹpٰ~ ƺQTl8~pψ`J*!YQw ;/\5}oih2+*P?cx^A7Z 9?'N4w{wާn~RUVZ8z ')u뭷se{Cka7ǣ>/zsR}YrvQu7$߇mSBvit{_PϺ";'~Tt޵7|Hn7Dj,WnO~xE-飬npt[!\=.4?@>uwzwI(j37-Eb 6Xu0t&ÄcC]kM:xF.r篑&zi5X!>-໮m|\*{2 εo"k1!4?{؃}8½_frH~ni \4VK61ZjժU]۶m[cJ #&omjcitٞ-q-%.Kvj]OIx iwyÐv dHk yDZŽ^@c-v ]7P!q,r}{|z٨7*7_YQ\(~Z m!&hwlGha4i=豽Ǟ|#)^?8P Yo첡&MfAwmqBcJqDzwog!CYᾈC"[(˻`_ASO`?8|{<2PU}o;lozϳ6}lOP ZjժU^!Ԑl?Gs9I{}4ȸ7z`߄涌0u~59s^GX.!/C[`M9‡AA?fyn"֗k7y݀n7ݴv;hWq~]cPC}#]τipEmZ|W{#3[it7FctsuOmblH@Rq B}t;qvgt]&Wc2:-Л¤1$2{2qH8T&ۻ?~׼; !]t+++ IZ_js[jժUVCzJ3a߁*DEE I8?y}^L 91E1ΛП@ވƀ.ŇFǡQwnc>+ VEkPsCBoC'fln7F_#nP-P{<{w ~§PK7 \wRy o.|Q?!b|$['vEj86!x3<}޽f8SH$:yvV3eXh/>E W9?w}y!6^.ƅ:@n~>ކK=ݻ||XNB']t_=BN>d.B^W鵺rr3ZjժU^Aj }2#7#C^Ƅn~O* 沌x ?yZ`)o۬x:X+,8?/k, >nB~*nt Xa߸||r="yp=s]ꑿ4S}ϋq vx"?+#8AsF=K>W ?\1{w⻭Dn}-M(/h2³1`|οϱP.+)K[TO߱pZ/ W5]1\ @4*c(SpoNn ;m"rS~ z~ͣosk:o3Xkuo[hVZjժ*ېk{$ 9NL^ tN26)\܍Y?~å](0!V@0,gSHAƇvV/(yKj.gKGc<k ..|6@ݹsƻ)'G$`#:p[utꝫ?|ѡO½SѮK a:>>wpߝ v) y2S{FP 7&q}!> 썈ν+>)Gm?w/ꪫ{^z)7|3/~ xЃٱc}xZ9UVZnعs'w~Ca~~G59^V?8#qߛ ɾ('&P}Bx~]z7o=G me\r-|\y\~uQ^{-z^uPzVZ:sN~gyv'nF/woE\xᅼ_Q?K`!$ &zV˼l;1E9/.1N۰!Np$ i~pmOA'9x5"@"]~/,<ѱC=zژ/UmMO܆$Vj߉LA.;W8'ޏm4VrZ.<_c(a}pѸ ҲBABz&{ oWZk.:!ڴn  %"K/yARt'LXNLPt:EN3ԶCeTJeC`kJ h8z|)'!¤O)mIC¾{Gwo}O}Sy晜wy\puQznSmVZ:@ucx߹s'7z?Ce۶m{#&ս?y8 ~w;Y\ҦM{,g?,e ~Z7- 7}xM¯vpU;~ƮYV2"t"k?Ԉ`غ~CN|NW!U k4Ƶ7#xnw IDAT{"J{cF .??<bÆ7Do>tۯU{}"F_=ߞp6)ԇM }hȗ^` B {{i,/(F48" #6 ]u,u ctU{T j L~Z!{&MS:TN5m}aSX^) m={bz6Dߍep/rz_q~>AڰavǹyS6N*upRJ:5]ս?&H)i6yq|͜uYr)YnUu3<Y.N9'98,, K/kZ8\(fh/LM .ϙťG^}0}] ۥ.P>?y4a&s;i.V}?>kC-Gn(H|~_OB]NȇgiOAIK ks"p{@}νйNxM݉£ٳ`>,ޭk\LJ7QD\q j>zZJ%6i"҄'vuM^~l>UWMq==9wW&ë4魷o|(sss o#~ԓ[sRJzK+|5ϳa:w/h jenF:6ny/WUN=Tp?!\,_/!lr *oLlUd {rC֓]+:a~Xi ,A8.uC~N;36A+ 7!I>T_Y- `8ېt:t"ؠ;:w>vW8k!]c~ydùt.0/[X$*`x*^3!̩9܋`{7b"ɷoPG٤נ^QT}a=jRzm|S9 <_iz:^>#9^0 se`NvrJ/=lܸ[n;.x≏yJr)K_TR\mYf s-Va/f͚5|+_az衹ciCK %wC>&@iV臘Gǖ*ep^1{ek:WABϝuN~]l;h lT/|WP]pϕ;\/kP.>~ߝ7"6,_g!z3' ýHJ5>>}M&}&}} :)Љ{/>tR)H-Csaݹ_(To ly)pWs饗.>6mĆ g:w<[7Ww)UTROVRܱuQ9sY|9l6Odxxq."֭c8ŐR8 q/} =o%Ed {M,z4-M{1^H-[Su>C W &}}4fhd1Q Sg d\0m۩saͷE'u ػ-.zq\2ȷ-=K~;WŊ+x=W_<>9.V^c/BtI!J*uK+Vf͛T* STVzLMMqgg>O1==h4XlZ7o)V=uqDZqrJEh.n=ɓvP}ҁ&8|Jw{/9e|,y򞫋AVOeq.9 #ؚ@Hm+c;{E?f:[D :x<̉>b "] 1M`|ݰR˷k~E6w=t6͢*5~`_K&s3!n,D=V%E.ߕ067=@|uJ5B mZZ3}٤QFGGO*U3,!Y|_5'Aq{aUs0b}{{S>nzl_f _Wyk_˛f>Ci&O|q.2qI'dwJ*TRb)P8ؼ~~3n:<|R𒗼jؼT}iM/z.':|QXvm\X ֢1Ѽ?A@{˱ugm[^`_ps0`\wn4-[0 MZԈUTFhv MsھoYWh8:/Y!^WS{o:*PK;gER)=K>Raal^{+0Z0`fb*WMF_́AFh"F(C  ۟y %DNY&kiJn{l3or텇lZw}6 Z{!Zo|E/NkxGA.Uq?pƔ*U(ԧi֚J!?뮻 O~V\Rʸ6v?Ye?Q'XL&Pk}Oт`B ^ h@ej {3ISbաU6^Huͼb[yYwu!٠"WXM{ 2(l\@GWs0؁`=;MDL"z6|_7R2D!#("_թ7 0h1,a ch%w4Eh%)$([`5,8d59w(:vO|!;ƍYf J=q2On*UA,LH#+ظq#Ne5 s饗O~p)J)mիqAGr^d4Gaȸtϑ;i22(}6c܀oHu[? %B_9s?6ϞVjMڑ*3˲%jiJE'e%HOZIo^{.*@6?ݛ\C֦9FB8*5އP4\}{]po:'7G 鿚/ H䋮=^Au6>"+D jF_#c,Z%KX 5Z8OvJm`(BS|w96tAw@.@{s.u9N|Ѽ]SNu{] b 7+UTR4;+9׳m6-[R??/9CCC]u{`wV.B+tE3\? !uCߺ4wI#|ywY#ƥB*3y8 s^p{_ .OڊdpeiO Jhjf\Ϲ ^w]zw `"!s v@tq݇wx,p_Gd>:-y.5Fw3 {slsOn=[=T3@FͽT5e|b,[  `ǙÅ(-R-s턹v|'Ii9?]BC_ ]A6ws#Tyg2jÔ*utK*U rO8/sGPyK^?C:MS?NZ]_*ޔpY{Gh!Ra=uaGsA_v לr"o.\2W2v\2\:*P;@~nvӟB1-LsQ d C]bW[: 8({g @V@>dGj>pm<.Zgҝ\wRd0AsW|'"/sڂny{.|~aHFT*5~G_ĒX!X ,8N5`0Ci晙k1;ff0jo'$5p+e?{t=3 @: n,3Lv/f,9)}.?Eܿo_OaRE%*UA,~8^p~ \{\r%4 /asss\{lڴ߽beRUki!h^P|GoǜIjrα҂} ?aiKLa:EMBAؗ0܇!?b0 R#ҟL4Ɣ 1U$b{.l+sW->\OwQq&oU_g`]u>b_۝|.tva1L}/vʽg ɉ|m"#:Bxw.M5I;0iV#&Bkb]UWBp_k?0-ai&ˁ@40O2 SӳL3;fajtsha T.,_rs)}R7=bgae,9y5+:WBrK*U VXE{w}{<1˖-Z;wkaӦMp~oQ:~yȇ<*T>/G36^ c VN^<ߝz

Gm,4M^8_Pm1' Lr"tϳy!I > ֭W]D0^H *E*IJњpzd$+jF~n0`b'I&ef|;Ɋ%½ͽY,4 Yn_ȵ/BԖLlCw#fXGRe賟lY1~UYETRbiNrwÿpW288ȲeːRuV&&&\3ΰ?cpK_Q9ȇn b.~%zaDƶE7",r+2n"UHIx`í|>5Cls,Bk6wedw-̹}ow"z < Ê~6@ }\蛖_~:d}εlQ<zv<[-NswBrR1JZJVQ09u5 lg;;#;w355,mIMqTI5ImQ=O.<_@?|! 㺯0|l&@9d`բ\>^}=O?ǵyrfժUE.٧tK*U >=gQG<>+yI'ĢE"}yΥJZ̈́.{Y |K"/ qU$2R/nָ{#.aOOy ;;)qXW0G voߊ2ԎW{Y,a2HTQɺsuU\|cU; 0q/n0~,ǿp LH_]yju ߇ .WH ˱wNedMGknv$a| 05K&>[qLQhPNv`4ӳ3?fա6:O6k {Do>̲ٺ1>?:a 7);rjŊ ~ *dRJ*uH)|Q}9 ~tϱRޘ,Pa@= yD3 ¸YbII^0vT Sa흛{?F D.ב$M{\W7[n=Lp/ ~XMIX+Vs-Wi"oDd ^f _~p'϶9eXEth$(P`?;y"p#v"j̰2w렾o+\=\{9UO?qdo ${iЙCߵrCp/4=;80o>&p IDATCG QQqCCC^QݱF5i0t3%j_{M Kf&LO}p>bY!ՊVYg瘙efv9fg癛$t$ 8j{ڃϩ{I>̶,:Pv$dj#3Xg|yo)U֝g-J/UTVcclnvӈdդb\WӖ-[w~m)=||M"9HJDd]|)#*@hKu0/-^6O *z}}@LaOㄎAEHLGNBG\|:it8s':gn ovpzW޾@?|~{zCw/Yu=!PI ϗHJ ZFNVodT<ӚM$aբnZkǯ :\@k~Iv^oPՈ INǻv. D*E*5֛&ݣVp-@ wMa<^t2|,'y&ʹ0?RX=sYtpOC TRJ=tqDzᮻc1661O{rR/_"`OLWea6tv~:,/+Qմ862H-A]|s3P4=Aץ7ȹC 5y&RIRA%`ele/C쬎SMk˹.!~v nP¢?Vu p\OV ]y=U/G_g,g}/^PpDMtK]- ӏZJѠQp1R};l$vVvJZ#N 5?R!T Q#d8 $U$JowYE5Jf{s/ cv ;yǭ)/;Υ+BA_֞ݻ~RJ:wJzLrptst;߄ݸ҆[w, J"!t#x>R?%qHG/(½ /ߡҸZWd"tԚh4KVv5F-H-ЖBjP=?k_{{|]r|m{ u .BkUޓ>yj5a5|^_#/m .J "l(8Jb=,[PvL'.s{B;vك k^С;a߄jO}c ܯ\qD]ئrp,![[{0t@`M߳P8`v<\}?,_Ί+x;1Ak~4I2wV؜x wg;1P/c|-$ p+f>ǩ뿸ۿx7Ǿxv I>n93[&Xt*U<@=WO-E7硞`K䛇C>+_ 7pgwWJZ DTRJ*Ujovxٕ<܇`s͏js>N'bp/+ƽq5RPTl T25W չY+$?Y'Oy :ȣ9R4 rp$EVH"̳Xlgo4DmV()3w & Fo/Y.tExB!?Z{̥^^]/`}0opt1w \!MMKHSt`nh06:(۷ogffӡnf54٭O`[ -R"B ZF-+DTgwzѱTZ0{6[7̶Y5 5}| ,t7t~(Xr6ϴZ(I/| o+W]*eB'bRJ*U~7v "_[s! zjJ^5_}辴"hkmP[3?=,daYX]C+-BI U3Òh;`XE9WR t5R[7ͽ'}9HtZ DjTfi)eq/m,#X7ۃT{K玣n[v+qTɖ { >I_jicp`fzF%Rcsk$3?NڨCI$HL (DQDiODF>t3VuWѿ|W=g\rV4W/%'ՒĶ4l:")~2n\]%B `ԓC8餓x^}]vy 9J*UTP}gWZԜ?aþ@z֨RՈ)JOHRLb>9uSD a?Z 2޼~giJu*FFF8s/UTRJ`;[ ̑No= GR=5j/5JIϊX@NLβˎɥT3s Y=@Zq $%&N*L%sty>Y%OBgau?A~7GRkV.rKRln6w v7*$ wQZ鬈^uegu?kY½΍!}(ۭY&';1ĄJPIBEԪUj*Jv"83⃛y-ڱ7ZY0&o_hSB#S}x~iXrJVs4?ݬ8-}C_0L_.G>k-|m0ʕT@?=ywYpk|.Z…*W8] inezjk5e~n~B%TJSQdk]|7 |~0a!X+;fi޽X~!v֑7IB/.p_Vȹ{,ZܻTKFY $jaw3lȟ5?OB+E$%Q&Mrچ.n׭FidbϦG*ˎ[‘ҧ "2NkH+ʗvg@o_2|! !7=!=0ⳟ,G}4oxͱ W\{X<_TR /|JGгO?c4{!Mx}T1pb**zzFNYV#BHAd'*=9ɽ{UÅGE 5ģ;';ߴ.JYఔ)&<#3~+f-],#\X&Of?Ҹ~ m]:K4 D)e<"w:{]67]|뇐NY{`mza-}>;eo=( t?3${vlu:0?Oo$"("e]|S r?gt)68|!{s|$'OMMqy#8bwJTR.=};Z/ {{~֭[|r-[1*9>a{G8ֹ*Tm5,כ}h@APNZf:( ͷ.y:~`;eŬiN/-?^/}Ep3C0[BeodfAB?_p@rʊ i]y7y_+-Z!-yiܩEkk_/^/ [@)m].tm昞bbbfP2o^ŗ)%=O{ϫaַ6kkpg֐<ssC߂a%| T_;ށ n]\n0}yr)2f<?V8$x"e/UTXJvm_5kp9h"jؘ/f͚5|+_az衜viϕlmذ[nk\z饼կiAUS9Z7!ASM\)%tZD Q%3n|Lm{1)|+ug,[{A|A`'z|HXwa\J6BiENl0523P(ޙo{WxgyJ!ۓ#"} R)N >v % ~*FS7ɽpz0@"pma`ԯ]m>ߙ⠁ Kp` s~\ sE\[Z1;3C^G)INӜ?$ltjqwCx\,tJB d< }̒D]w n.{%, }~Xp+T?:/C2rEYh~J>4 j]tYnG~8cccOAIꪫG?J ox\s zֳwٿO򡗌x(Dz~V1p?tAOnpA5'©&6m ҐPcf ]|W- :{Mºڋ|)U%40J60%~Rfw stuvO;Kw hB>|_ϝ2X/* ՟a^IӔ4M2=ݻws֭xv5 1F [Q>D t}}+V UH<~{{=`#(>]K7X`di\{k0vʷh ,>loYTߨOjgtK*U )Le;`bbWU,Yăƍя~ ^N8" p%}︃> .u]wprs '˻wNWVk10f_XmP T#mT(R*yڌ :Q$'rg=k_o\^G O|8>;0RhVĤhӌfHF#glU6i 4v.t&UiSlڐ;,Npg3 :":&':C}>ﮊbD.}xD|_#{ۖ^y }`WDHKhRЩ׷s/K:*TRbi6/͛T* S,S IDATTVH)`x}khl2jofіڿ:wM7 ovp顈HRv:>64l+7 9 ]*Mgi-8uf忭 {dz~=X&T_O7WEkYGϿ}2UԸ̵ /#( $Zr@:_nMmBpf,s|!X#ܰe ֜z59\={`zzv" jMYL5:*v`j R.>؊nʼY Ze^n=񅴇gmk+Щi&Iu"hkwZRGjJ*uPJ): oΎ;سg_WY~=ozӛ8V͛s)u`Moo|Wٳj?j5/*zfT0#8P đw5Yx~jY=eC:ޜX<. 8H\ 3sA:N*ɏt6u^kFki-ýsQ~3Fo "PEgEBڗK[",rF&"D݁+\}nDRJ:N5J`1Szvm<̘[[Ja?8/u@E>)OK_~;o|s.=ĕFMƀaa-5aiD%&<_O}B,\_K:~V/Mg!m[X/Dũ"sJHR$JG("l $"{̇-7kGieR\)Z~/J%ZPHjj+ı` 0S/ u9{:.iД69u#lw!~]Elm0 .GH)t84{⧝ۻj5֮^˖Ѡnv:ȞdP< d hH{`/޻:DH]p+_I߃}@VŒ Sa^?oשyIm%ݟѩ0}Ee),װ^@&Bk*tLJY?@J*U*o+V`t:T0}^R.B>Os'"WJm6VX;VO+WdݺupWuw4y &T]<{ZsКG[6I!)]aheA>D:ޢqk_ ܮA žH["/\~!g$i!JJC} ݮ}qmA'ւK`u")/ء5w)jy~$AHӯF"c$dy9bu@)}wt|BP+!PH;/}A^Lb qS*UA,Cal۶e˖""o}+g}R;w211+q@Pg>>nws]h)AIbvn\\kY$R!eue~jekL 7u&촇|0Q}P4"3p`+Kp gKwfMr[[VasN$g1QpEQA KJ;wNR{`>ZhSEV&_&؞6'Re{K1޵0},rVsP ,~Gy×D]e"%)ϕp~Ɣ*U(p \ |_#^#Uzsi277?q*ǟp?!.uꕯ|_I_wC:Iffi$m4Ap}]1Y|{ B>¸Â ωfuק cBJ"7]\`'!<!_yo0HV?%#qy_gN8 P`!(+[U߽+ q#1K6~2qu0QŇz?l+RYX~Q{^^8J;&;:<\TYfG ?ιMGw >uFyƅ^zz F;4Kγ '"GJ*.l#:L`C_hojE?w/'@/4"F 13%|~/UTX~iY4>΅\۹kٻw/333ult:pײi&.;8)ݽ~+pAP *6bXkԨ?#%XbK%Qb#`BT҅qmwgSvvoqkٙg)7;} 4rk2} J7i&+ʩ&%f%''K{}ݻS^z3Cѵ9 ๗l*8tzo}Yfq6mIΧpy#I D:>1"fpQ z BΤ}ئwm7x\|Glr]|/> !9+-w<fR>vH CE~< sC= 7b"ٞ _G}S{ ǯ=Ϫxry:ZpG:[vQtdŽU9Hdї5A]`}ѣd…|g,_.)uw/~j44!Ǐe ĉׄܬ$D~\9hu֝Po`Yq,oP/a8JҶm(v:a;9Ý>N:E&^m*iſ3;JĈ:- ɡ5'L\FhX,|V 6 YnDDX?q{`eaE]{M}Z'6jޫ6ȭe?P؎T:|U^^m~#L}}Is#}"NC⠧sӜ@a9iF1#;&p^9 ^BWaǽ .:nj?)S[ϧ0Xf 7o&33O:ƌI8\^iQa'%築PU]EUU%Uj(-7ȑ#y{8vyvkv+A!?r* .DOHņ ,: :^/ygVat$e Ik 8q#F4?5*מ@p[ ӷ,5bȷM(dI^^&;eEa"v/;4-W>ޤk'#R㮝B1ȠC; 츉r3ϣ?ĝGoєn?—(F)\Q\ %7|~"d"!|:dޥl8ǵoCn=ypȮ^Oh7 ~bD߱wcO# t>i^DW.WwQ$'&V?lWQQ \ߢv|D t,, nYTR`qˢEG׮]ۺ -λa/_ŋy饗xիW^y% YO-㡓 ι|{pk9ϔ=n'UrZ) >*>@IÉyw*74mcX! p*$f:=uќ7\%G]|ÀX W.eY~e?Lvڐ$O3}ltpwSlж[2@}}ifFmo )9FrҶzPWVI3BDLxqo o0@' Hs_ +.l*Eh ?; ^tC-p臔R]I4Z&޶m_@aaa'Ak:,֮]ۨ,Yyg2e z(wr cǎmp^$ƛ`Wb55TUUQUUEuuX7 Fo`YyD5TWW{O'u &=uȦq*\*9CGͷif {á{{< [f/Tb]-/(+}'k1^l;(wFL7 E9C֝Q H $ԁstr6TЮ` [u@`ʹv mchS>>a_GC>вLxw̴hp| ;y:N|bhC>5La% 7R ;'҄& ƬYxyGؼy3ƍ`won MŽDXj8oE'ߧ&K!'3&+r2K}QLE!^@na{ n,yKӵNz|3T6!eA; }] G'\_i7s~4ZCUU%[Jee%x.ky_]ݎ *++u!^B`%j'{y q~c3P_>8:24^wqy!V@4M7lqޱ-ah`w* J; b6齑=?%m [ٝHG*U\}1!pwϹ?E0&tŠLT~A~BkoͤWksFM,{j]AabŊ|L<'|nݺq饗2e]yû1n;4<zS a'?5lUbO{ZAǒ0 G|-板(әR>J/_'}wv< TPX]9@N|vԗd1Ln͠l ee[غhyy A<8TW֭as)//'3s+H[\{/^l"B !, eꎵyʥ|I e[4(F |1s_Sϻ'@xS$g[#z/PĽb)B"d* u5RGH1QExKvPNQ,'kPe<#M6uwR 0pδW@R5Ap-"7D~,l6T{mXz5[)l?>  K.'`ݺun3?/޻Upqn;Sd jL:`*ϨT~z/?x@l 0WQ]Ɩ)o&{edO'vo2y^\_Pe IDAT娲*DžM|vĽeʼnŜp}4غ͛3ͥ}Q\rWW;~v6dff! SZ:kgQXx:Z;#x!"_ksB('Bl +*Xy9~P};H1W;:io{"ϩb4(WwW_MDV^Dd>U*`ƊCU@i9"R!Bl'L?}߽o%KJ ů=J1C0B%y:n^yNIۉp#VEbj ;lI -ʍFteT(/ʒ%KnS6, &|̚5>SN9vۍ믷Inzb!]:ljpC%E>8V9{Ob;j tSNLFN^E[xT:\tb{NnNцLlp]. 'Z"8qgWoٲ ϣ]L!3 ?1~r.]Ʋ~Xrmbۆ-&*"0Ŗel\J-Mr3>vS&i[Xq{,T  Zv[:q58%}>~dI`TĨsN|\Mr쒒jeշ@@C&'#NC-iz>Vsů/95~Z><[s5 @"j$ }F|MWBƅ"=Nb=+dA F?1w0r{~K[k\6ysɺm6]  gΜ9L6GyR.B.zEn+7nO=Tă]Q%jS8A<9*;}UP`ru aƜӇЫ)=J3 y$,DȾ᎟8Mqg QhUgM/WB!"&2ǡ}{rFXV˲mF~v;W;I ]O>-ٺq#YYjBƞэN%/5DdVg9 :!Mg]tQ"+繁)M0}qo L:׹@^>WmV৶\Xj´L7{"*lB8aW!W:mH8򞘷Tůu0ާJ~N6*'5HgYh7U0N"@96eabC 4812CvLlwJOk>5,u%  줬^ +Wdٲew}tܙ+_~C]`ĉ{챼Kիk 7Os x#pQ}Q l^^vʛ gOg}]>&}`z]| &0FCkrß]y|TjWn=gxu7Bj? -X`UdUtՎ8aBV3S ?tP$OJ+CsSIҫ^äC}?PD GMtZG1Q6q LBD[Wz/Uж$ ;=_+6mĺl;ucǎ߯Eǎ/㫯^`\xᅼz衍*oC;wyתTG!pe:RĕS*Sv[q$d0}HQ_{~Omp-G_g*;2z}(2`2\@?u<˲bTUUQVVƺu%a@ee5[ 6RVVFEEBgdO,fuؼ5݀(ҝ^I^bDdʃDMBk61M˔;AG|:I]Ao{]N$3~>{'Y{>ӟ*4eWFB1Zc&UP68&21о՞3|G'[$BSV~1 WW BTϏ(j_ *}ݽQ 3BfG]w~̙3>|xZ7D|A](=E|W߿Evn}]͛o͌3883۶فh׮cǎeڵ-\s۞w]IK9ȾdTO\qY>JfQ^ @|o|O; Qv_РMaTp Uh /GnT_ǩb+7n`dggc&x*ٲe zl=55K̆k: !J(A>չ(,yvsp{4'ԒDBkP7D}.̨Ғem^|*h6m{򹎾ζ.Q&V"+TE&6X*D8#fA9''ť{O\Yj I>O5@' @=>A04Ž5phǽC<yi.'x"o?3f`̘1.SH32{\Jra Nk8_Av66mq͛S&c1o<>Cy~F7L޽޽{l㬳bر-RVsm[2dhGHRhGi7 %uOQudOTFs'KJ.4ۭNr#$D-[Vp|Mx'֖s:+mh lܸ "Qn]GejPY93Q?†,"B]J(lmnfcoΐ~pu탯Ľ%OuSOp=f7t"9`n9k9*?]'~ `* :do YoQ"cZFԄ{)5l^=C9k5%S ~tZ޼چA4#Bei*m~|ᇌ3~sfڵ,_ܕ[nӱ H 좬G[oڴ5k}tBII CueB>7|G},.RlpΖj,h.|?9 s;_KOO\:~|T柟ƒVP粍$'Rw| w.14P(S>Tkt90 ,&ċ.~UU p4M 6QS& 5vQ܎&Ft DFtuNV+Q﫸xz҉T? ~=?٦E6Ap hR)߻'I{k !3N12FK1'DŽrҺ^H~ڄ{)ӺΝMıR[ȣ"o 3ҜzpGBiF{޼4l;Gf֬Yx-Z&\˄ SVv5w5͘d_aO4O3{l>n݊a_0w\f̘!°aÜ߈]3gr]wpBE]ć~Ȁںz-o:H fzn:~5Oa"? /-w9/Y]:3}A V UO/bS>wV*7c!FLNFGK+Ƕ5ea6b_b+a~{Ծbw YUrrXX8Q% mSO)ж1r)+*`4N;?_8$IYuBuU7Ulܑ"jy'?(~Io4ӰF#щYgQP:ϊL|GN4秎 zxνJ)tbx'DWWo_'> =AMwqcQV8Vr٢q*$~/^̿o}Y%\4h|p!$s}4"Ava1U=>͛G^7nEEEddd`&J)lۦ^zꫯ2oI=ںz;LhO`B"s=G$,N71~VNya,t=@r^kTUwZ3'mO92ΫrrTWLَmlvm.ۈB/fBFƠQ#NFtu6oXQ&$nS#\܁vs!i Q(eqEжrS89{n}J/uT)}-q=9`)Jcznw6\K4-0}ۍ PJcbɪuZ(ƌZw$Kw0{pžI &<=I>4X/:HRTUW]Ÿq8?rMƵA ::az-2339ܹ3YYYa>8dee'̃>[oE=Mc0(|L:;3l |ɤnnyc _+ Fvm{[Dt.֑`O7:?[1=/J5t:{>Kw $6'E K~MI=^\Eg-ֲٳe m爃/ >͙;͛7sgҩS'_Ǽ[=p;;83x3w.zN-yYh/< }/^#Nܵu[5\ l0Vq⼥\@)c?`ߴ_넋wνvՎrRP&a2Cp^áPe(<ʾ~(Ըc:lj[qlmaiˆ 7#PυVж-^uPN7oӽYǙK'ӑn~PZ${^H~o?QO~'mxa'VL6hH%ŬgS30k4{I.~`9#Q )Wjsty_ܻ]O7ў-?׉{ rGi a&C\|A]톽aڷoO8&0gx 6l8駟#$++222r`0tرef̘y2e ƍs媫o߾P][^xR!! 9!ثlμDwCMt)w:_x<_|xUCGh5 aae`b`&2DdfdIVfkM7+~p}v&˖-QQY55 ̀JAd]7܈;e}L;g:^JKMJF}s_{>I{U_,b=kh(FV4,!B\Qz,# ~?0wFD=jG}T)' wub&9:I'U{rB;ΐa{Zyבns^^|TVV%<Ahq֭[G^^n[Wc|NqmvC{0 ۶>}:Xj[laڴigŀcD(((i :DL)ʛVr؝{E>ߟ|hOΙUh<#zq#Rt@ k(;>S^{_cZe{ISonzJ7yLۜ PSz}~CW6K,aM*k Zh7D߲,քa à 2|VX\5kXh8uֵ2ޮ> #Ӕgm}{7߯_כŗM^ǣY_k$Gp35u=A!Zm&k׮,YX,mی?-ZD8)//gҥ@b֮]Ә>]  Žʶ< } mXvc=̳{˃Avgt+^׿_ufݫFjmS{nݘ7ok׮۶9䓩ODz, /--eֽ{g> grmjuݬXUnU^駟j*&LZ@}waݛL &##3IJ,xLjD" w_jD> goZNuHYy}w#z 48B ^,_ wޞf??~^s^׿x93mgUUU,]S~ rt#~AA&?$}}zW^u5X,Zˣk'B WG{l *u} .>c\tED<,]} bh/  4Ycgy}_ktAh)5u |uDG9ᇼ1e r `k֬adffrI'qИ1Nup?U!  4YcgxOoTJ{#7t3eeC0Q{I$ۅmL)le4??o8?FcƌffΜ9,_+V[0jCohDVX}AaGd;s[O7q{Yre$Q튒V#ݽLݺu:=MO=#6Uڍ  ŽJSv>\k8Js( $-~7 IDAT^6d`::o}~:,PƖ7 eQPXPr  ŽJv>f:8viiAv5Zh!8Zt,`g>F#m,AAvPL3 g)0Uq|ŗm]r/}AaG)2˷Yv-YAaA~AA@)ŶAAAPnI,   Bb6'AAA$8    |AAAa   .|AAAAؙqE   .@(4MPmE)JZR}  ; !Hp2xpiMRcOP4L @)Zc7♡"]A)O8˩b; G"~k}Nnnۨ2IX|99 .8ƌiQСM ۓܧ>w{a UCɫkjx衇y|wD" 2.?yh}}]4i]{"bUV1x}[݇3Y6o i }ƢAAxO+|'=s s}9Z^N4%++jP˲hOYYzwW\y%hzIyy9_tϽtAMSMKҶK ۓ&ާ2]>f)>7w_55Q=zޓ>4;UUU̞=ǟ qxЊul\p]{SO?ͷ.%//8g/z߽. /_zիWӥK.8|~񋓷4B1IM~^J_(~|N'Ĩjm~0m>K.SNx\xYk>{[SO=ͪի)))K.o: BKaTAWt҅}2x`k/w zAо}w=ӇqLy~{*c>%]0p_uXȤG>XP ~̳e~(T!Cy瓾^IaWeڒ%yV@ϤI(**o߾D"ڵkǡʿܷK_z[9_a y饗9gc\҅>}‹.fƍnמ}NvUUCi_;8,zK]؃yefE<oegr[yx$?ͮ˶YM~E3?o7)>_ᇙΝ˟x[nٳ>ɿu v>wq;>3?j: BKRKm~aVZŢŋ` .oa|p!?[ŋN:hѢzyꪫp,v :?8>SûSbӆgz_-? nͮۿyc?m1A4^rZ~ʅ?+^2̉._/kp>_||I&N=>yqĉ,v 1m\{ >|ST)o2|0 ,c|>3V.W_}m~s_/D}A*Sql+N<kTO1l ϧ~o#FÈ#xɺۅ߰߅KzFL2kt]_QekS~?q;C !+3Ɲw/Rg7t#Ç #;;no~ I7N>D{s=Q/];n!C_m~nneWߤlޜ>k?8C&>,is 7l5J9Y]:3x {!3GsǰƉy|BN>T9Ekaи>>x BC8mj|w|N:R\ʶla=p5w}s/e˓~ 0f̘zٻO>52o."y/ŽH6"q nyIS蛜Mo5+VnO>ԉ2M3i}7Rq\u5YV^͂#8j_>1Ç?sNMnh%kRSP~}tg0LP (mPYYɇCQQG Ž[,D/sN 0 Xj| 6nD)EN-cGN;ǻpM7pegee5XHּtAh܋~{*+We?fǀ&c><=}GW˒֩%[,W^,Ym_|ɥkOt6׬vH'Mè^ /^xE;XP&xm2S2b(&Mz^LA^={vҼٳfk=6-l_r ︋<ŇO55q6"%U-4`$w=k6}4" mA5?C]˗w<s1{qp 4f /E ؤ=֬]߿fO>Ix;vdQG3j"޿B<=ƌn9G~ɓ_報QP鮽x/ʫK׮w15ngEtܙkwMRCpUWrVXA׮]nµ;o++WbYe76Xa{Ҕo͚YZq;_48v] $}̣z)o??g@$aذ䢋=+o+. \;{uN=[n=]ʿ {|rQ٧ݜE?MDru%khN=N=Inh~Wcڼ/qt.^ܨhEIuAkFL_43f>9_Klٔ;s&G?ɢx ,Y }w\z H mowl`o*a‚ M3?j}o}Q,^8&+k-S1 :ڞfϦw=رCKV}ƻ;p awߟ*.imY"\yi2ſr5XpY~#}\^*\=Iۺ羻9vMb64X O' v<6{EmϢo#l2cX<4)**?eHFFEsٞa/i3SF9ޭ(+Vҽ{7ll}n.᳍ٳW/znk;p_dBp;H}ӽw50 ӷA'E?˦< wN}۶kr/#NpӖag)#;?孷9?ʝ駟ѧOo:v?T_Cǝ͡njݷ{hrApݜFBiʷlj* ??ߏiB;r\F rdo6J O>}ݶ5Px<}vPdffqiXuUA]GkE_ژ/  Ç k  윸Id%AA;*Q({b{[kT@E#`]h( 6c/hl`Q,u9ܑ̝{̾~B/? !=B!B!D7{B!B$ !B!4B!B S_Ub3%U_e !"!ךB%jgJX*vTR7.{ \p^Ѓ}uNK(AӦz[OU^[c!bJ2Yv{3U֍ '{"יBzK&ޛ7o8},5k?u o$}(\Po/_Ⱦ}~Ze*kÇ0ŋ3ˋE;/~(B!H~biP)$=@Zg5 <(|Ch۱v5iڼ%V$22R<8>#FnFT^owc8k@M:3/_jes;7J5[M [LiؒU]9ԤnïXٷmA-'kּ .j5u4'3[FR1ט֝;T˗.dRtE*U*Χcݹ}%˖j-[l)wnߌw=}]_ %eJanڌsVT@-ٶcgMiSشek^f a|뵼͛ӧQTIɑ#eŚrJf:wΡ&4ufme Oh~bN:įubB!6CQM!{͚6ᣇ\~]3ڵ<~&M;KB#\AA&PZ5xc@Ν?Qښyj:|V3;ŒSYzsƖT.+W2aX9MQTY~q,[Ώӧx=v,{ oHJꅒ2J=~V^͌S鴩,^'-{?,]8z,YÇϣ\8 u0>Z޳׏~}$YN9?2l`9ʕ>{6wBYRg+B0CQ755eAZr&~^ӦRގ,YPhfL;4eܴ 9s<~>ފo'j 9ggԈ ,_7IpNl٨P7Iz[R~E5ɖ-3i8Ybj\]&j׬ĉ 'O!LLL8z49vNN:e4ll *[R啜]}b?-4)1t1?=9?b{zzs@F{EN[dIԪYKKKjլۤgPLk^p0%KOw-_Iiؠ>ٲeh"̞c3hJ+B߿$hM4f1џE[lp D0ߵX㻎!`b|o#"\<ĥA\W. M1Ff )#jӖu7(^Nbزi#ϝDTJ_rƦ$WTlj_YX .3.]9{6P]N 296]Gc(-t=}SR/QRA?05v'-bEr$7"Ks B!ʤw M˥W| 62*V$UlYqj IDAT|l;K.S П֘q%u˔. {i+gLIRl2 nl>Yd\r,y vUɗ/ʕeUJo1*ޗ$iYZ4 %eoeJl%8s6nҥJj~733!B7krepΝϟkͻzZuB!D6Nt&&&lmo=Ch1w˗DDDx$ ה8dO۷o9@bE//^lݻw\r3Oק7flP bl#glIRb@>3gy-Na֜nPɑ[Qn]խۨ[I>2OLuX1JJ&T IIPRFIO{`ӫ3g3Z2[NjN^ޮ^=ziܺu?0hkJw8ro߾%8>&kqtbOsyBDD'Of[Kj]gJO!B(c/ w)TV-aɲe̘9 JEժU4L]Xr%.^"[֬88Tk?N4|/*}{bfby)]x4[[zt|-\Jԫ[:ٝ'Obkkàlur{|խ@u˛:zϘRJΏ>>J (,ժUO>˗.R*}1:X:ŠoԤ^()'׀}1bS n:ySClmm

?Ge"zѶ}GބQTI I.n/}w)>B8CQ7{R=FAU0E?G)ޱ-Rw\*QMޗb(>ȵ,Bcc/4'N?}u]߷E L#m|ֱ':?}.oH_ZB!1OS5yƱvmOCv5cO!B!~t=PWf^|!B!"#ĔӜ,=D !B!"}iCfoW5rM a\B!A&u]{L0Br0I]B! B!B!2IB!B!D|/=B!B!D)"gS?FzZB!B_!B!$J !B!"]2!z҃/B!Bd _:Bp)Ep.yZGľh^XeuZG"?x@xx8!VN…$1<(C1E|$R-g4y&~=u_=}E ~,Y-Awa?x@…*OUv|<$U 4Z_!uY8aɌٳuJcX<=Q8a|Ӹ j [;o3<6ij<;mM4Oz;>_ra|CԘ|jKB炟c$6-:HEyg^OaK8_PT*Î r&#|yI%DB!DʛTabbbKb<-Cec\%O$Om"}QZbB!0 jp "o_$]$/80>)j B!جY8~8wVNͩ_>&MJdKSW.OzRuzˣ6`%fiiIxxx[(s$.=B!RM|CÙ7o*>>>DDDzN:EJo!k֬-Z1cϊU4CMhirc2fjJdiiTHP~<}ʈ)[,ylٲ 6OS1L1*+wnjԨ]^>'v͗/+Ubܸq<L }G&Ox@7ɣ뻆Eq9y<]9eϑCu}2%3UocM{A^=W;2Z4BTpMڴi5T^7jTRdΜ2eʰ|r ͣH"jߵk:tHVΎ;sdʨ,˗/L2dΜRJv8eb۲e~5kFٱfΔޘSti~1:DێzdيDFFjg1mЈkоS,OG>b.06jU2[n 0P:jSTԩLJEȔɜ…0m4N>< {7n+SB,,,PK~^ oCY H9ʑ3WSj3gt2LJ`IoЭ{+mtڍP7oѥKWJ,E>ԭW͛hƘoU~k*Tu$<ȤIIҮPQH_!H:u^z\v7oްtRO}1}t֬YYr%f͊]vJҼ̙38::Y`XXXPdI:uqîSNJkdժU<իW,Y2gW_}rΝLU!Aγp&x+-lP}}5e0ժg DmbÏY`''ӓ#%N+O͙>}:{1m4Zl<k;q 9_)9s^xO8::r)ۛ۶Ż}~=I&rMvNc>2oJyB nܸAǎɓ'5kd˖-fb…4h `ڴiShDclll}w?5j+O-Xt)}->Lk]hQ1k,4ioA߾}S)={Ct)3Mr-ZӦһ_`6!gΜ|U2 | "҉J]vǙ?&]Vi;*UE3Ύ]vI˵o׎AӜ9/^w2i ?Q>yWbsӝ.k;O8lmm)Ͳ̙-pssI֭[nݚ9s`ooϺk7gϦI/%KyD||}}9sLjժEϞ=Y/ |!" 6 {{{ڵk7j_tziH|I+71ϒ% =zښcj5co8}yׯ_زe 6mwy'NLp}c{||رz]uE~`ٵs'uDboWڎoeQr?ӓQF9sfU4]awwwr/Ν;wpus//eeP]aiӦCNy!Ee9_ =|Vqs|~h_ȓ6 Ub>pMƏ3g> y:l… {<˗-y.CГu6\kʕeԩ[sce ̙32 _y!J*zWրM<*uyʆ'YDn&?Oy([ TGl88TsLOdd$ ,<ٍ6m?~~~1nX g?YfMѐp ?7ș#''qOS!HTB*QCrܹW_qQZj)$)S&"##133spp ٳg f͚_S|{+WlB6oɖ-[7T\E ѩk7zv%*V:uLʖ\ٲt-f]|OduDDD[Pi8:1< !""N3- 66 4^~NuInݺEp+% բEsFŵkWy.k׮2r(Zh|xݻw3v,=b!#=L_lٲq~p牽sUƎGKR%Y~=o߆su;w̡CRDx3~8& {۷6|X΃LIO^x{{ݤ|!"13grIgN߬Y3&OL޽(V 1|2>seȐ!Z]v;ׯSSO!C>}f+Vdҥ4o\k׮qԩWjҤI׏{QH<<l޼kt"cInp =), fJϗGK_!qʕ J *P5.?dOWj%ΎϗG%u(>6IcB7i(ƖW7ZmjSc{B㣤iԜ|!BOҿ!4 ؗ2)Ze/R5O޼yȑ#'ENLz;>_ra|ԡ8>_!Гn>T,MsQ/^<#hIwy{< ` ʾR!B!Ot^nB!B!2 |B!B!K !B!4B!B @/Bua`vU\ᄆ0oEv)\(r:Va’Gd<(C`b܃/BP=:0Ț-;5j90x}$[~FIҥٻwVF*hׯ_LJAaooɓ')UwdɒM'O J&_hH(+PT*9<'#':-!"x1666xzz2i$VX-[?>jJk|?~///͛ٳ+V ++$+;FvPմmۖ6m`mmMHH֜? 40o\?\KII㣴EJ҃/BJ//^$W\hт5kr1/5kƥK(X o4jԈ={|aFիiժ___̟??ڵcxyyaff3n8ƏO˖-5󂃃hذ!XXX0b (@)Z(ΝXbT\ Yp!Fb޽'Z2\Hkɓ8ɓ8G~\3yŅ\r?~e˗ym۶ҥK=Zk̙3m2c jժԩSpfx}Bn߾ TT nݺEpqqtҔ+W???)]f^J6\2'q'qciiIxxxB0w\ٲe mڴnݺ7.k>TQB3)[,Æ cΜ9lڴٳGYW^ܸq}0tPy5666@T_~SD f͚ڵk޽{{gggp8;;h"?f͚aÆ8тpssM64k,+;t۷'_|XZZR\9\]]yU넄0h )B,Y(R$$$Dܖ-[X"TXm>),, J*+Wfƍ:+Zyq:իWRu2)U*޼a;+U"O<888yӦ4ˣ)5DRJfyq\Xhsf̛… yn&SP|{/BՀ޽;Vqƴk׎/_Q uKKKrȡS2775kVVZŐ!CXbN*cnn7o^W3*U~YknܸOoɉ= FVp/_d߾} ҥ &&&=zׯ_k>ҥ̉' QR_B!w9UF\gĈtEsWOϞ=;={d4k KKK6lȡCOӧOe˖ >z0_r(Y>|VZ,7o+BCC4h}aΝ8:_.JE kݺ5nnn{J6m4eN8-[rqnd_Jc~޽;o3rd|+@eomMUݧ7.fy6o€Rè)yXd_70{l@VqIΝJ̨*<Ȅ jyzŀ+|"666L6Uk>>,ZwnxBf͚5ez郣#gN`|ٺmfsQ!ξkլٳg ~dJ~UB!RE~ڵ+!!!XYYiwQBCCp4lؐZ=ytܙgϞQvmp-[u~5Ξ=KtޞKV.^H"E|+BLǏ'o޼\|.]Dܹ?~Nd˖-lڴ/^}v>NRCPzxR3gye}§+Ά ]63gʊ:hBO&yT*;wwܾ H++BC*ܗħF ܹx}})P ׌)W,-o3mTfZwJyBBbff[7Βvg88TsLOdd$ *{蟣<ٍ6m?~~~1nX  @x!%JG)P@H ?7Qߌ3GN&N!k>4г/_u!ZΓ'mG'k4Hߓ9s[XXęVA_޽[k$ݻN:qzbd_Jc*aO<3Ϻ@>y|/V'>KBJz?O5Tijd}t:zsA~7ѭ{wVJFgCsαaz,--8y2Rb;~"Mh~8NT(_ +|àjgG`I+T!dر= P|LA0!D}!2iӆG[8qݺucZbk۶-}ʕ+{+WЧO[53gw^^~޽{9sV̘1 80vb~})َAaU:Wҋp[ݺwرK2|pF &y ȸqv*EpUFE6ߧI<,y޽È#Yl)+Wb5{4OR%Y~=o߆sᇨ1걋  {C@1\9bL.9tȟ0pAJxM7f]qk.4ilsN^x{{'Dz3/D ײЗ0eN֖:)ҥK3f oߦTR,_ZjiԨQaÆѥK] ݺu]})َ!U*Ԫe]0yz쉗7AA簴lٲ4{6|LSJ͠Ay ]63&MCJDDDлwF NjPTTV 7WWˮ;}FIjfG:d0nݵʍ>1c2~X5l)ӯO__@PP8֮͊4[4on޼IO߸r-Νc;g"qJP|2>>,_۷oRP n'p7o|UO>/|8p>}S&MW_}ŦM6m...Y |r~wUiIXzSIb_G'Ç aC5eZM&>D+DƠk_zF޿S|uSϩSȕ+ƍ ^l?Py!J{Ojr(؍II!㣤i/=B 1Znpɓ={Yb 6mʫWȕ+ 44k먯&$$wrz聭- .9$T^cVQ jSc.y.#y/c<(C4NOt m!2}]jo߲xbzgy=y+={ʊOwӧ|Ѽys={Ƽyׯ_IFɀOhO<_vo)=B/DƠkyѸ={vLMMy}2^>G޸qc|||2e >>>4n@]>Pyz[uر˝;7?F&R>aSSS>~$OܒG}a|ԡH_=!Bd T_J*lܸjlG?1}Ŋ={QX1V\ ٳ޽; VZlذOOOzMN(Z(n'"dΑC߰aZG1*a#9s T2ffAJ⅋̑SH#:[x|'jXczͿӵGI)D_=擷ϝW)!DbײrYbח?x@Xx8!Le[2 &ZݻT͓'OnrIE$1<(CTjτDB "ckYD…~(W.md0ŋOZ$O$O[a>ez&CZB!>3y\B!0q!2+D ײB!M}_aBd r- !>}; !B!L׮])\0jժxL«/|V cѢE̙=;UDeïר/~UNZX.#X}!B=SV7_iM@yzwbu)$o_ Uz\jg3utgѢE9wnAge;ZbǎԪU%KJ}NLvcێ"!Q |GD!Bo*5dLWJU;波JU;|}&͛ҥ+%J"U~֫[k7*5*Vb_4rŢ?S|rʭskjgO|V|U*7 G\IkW+x¹.ݻSNcymƷ|Kٰ֬.\/vޝfyG](X3L.\):y*M,]333ڵ@dKYQٳ[Np5eFabbիsf[J56oɶ;g1mЈkоS틳->mE+6mٚ`z7zm;vΡ&MdيDFF/p߀wkN ޻q׀Nu9f,/^LVf];JB!%XkN~;q-̟9sػwO"=}pttS<7[m,ǘѣ4i"od;{/? LJE pm/ZȬY8x j/sͤqMHB\Eȏ{ ɓ'X[HGOɷЪEs>x?jssD d˖5p8Vi ƹir̉9_Uoru2Z5kbiiI5q4k۰yRfLJ5{;dBѢE1m*[AZ=m vuVQ?oZ5k‚ٳ3j,}yȞB!S_v891rݿ_?4lH-Y& 6@/^nݺf+]t1]Nq2%+Y'5=Yl/_d:y7o2WW.YbUkB!L!vb9ni͍q2d`f͚d6sLq)9]I*5Yd {ύnjL(_?/^DڎOL2?~Bky@qʖ-6*СCYjs4*Vѣ?yOT|y2eW~495הyc#;v_"K={sst'=vvL<_3:u/>}Fc p&(HkgRtiyʖo^捿d2ͲR%Kplm.U2lsZ^~Е*V_x,׊;w}.ZR П֘qҥ$srO(B!ҏ<+CJ@1p W77F t! {)YW|?n}op-^7ŅZG)T&2n]Ij iZ9|׬~2[ջ'Npp)B|%wJٳ[jϞݒ =y3=gsY޾}˩g5g,8dO۷o9@bE5ٳ9u6o:Ni.OCBLtu*ckcÉ@b:}.^|IDD'O2xC*UPլ[A{ŊiV޽{+W:$sr#/Bgj ! ̹)O>eر;pK~w ~o-]ho7߭Y:YT}'$$hunWG.]|YtH;uTB#qbC+ٮ!ORgZǕΟ81!55EIIjveٮ!O3`HGK֮ <@UOa t>=yFdȈtqPeee*9S(1!qߦ-,v%y)bkS3<;(,ԿԭtkN}_X[~ە<䉧<=]C8$4}6(+-Sߜ2M'KKί,jڕ<䉧<,Tw UeVQIINFNjLԾ"Ю!O\0=*\JXAz ]纖t=X>̆]y<=Aw]i^~}qf4Q6Jn<ÇWNN&MybŦM4i$EP,-t9lM\._ܹs I&2dlRY&Bٮ?@ݻwWjjw 6D4O4O.>}"~Ւ%Kt,׳ynذ:wf \#OUVҥsvs FlfʔiY W\!m۶ZzZn~Iށ32wڮ;nVxC{}SOi egg=-ls⏾axB>[a ni۶w͛7w7YB~}7z~:m}T'ԳGvDUcokTtr`YteԮ]{%&RRR֮][YNv?ܢ>}s8]:wѼy՟+/(~Hlf[hĈ̙hw)AJHʹDqՀtmIrssmSt 4tQgp˖j.Vԩ\6l({k;N%7H.~ݯ}=駴j}g=(f[WVZtuwjulU~Q.]հQ:w骕+߾!X\C\zE^;nl<3ݷWfҫ-^TY>'x\_#մiS|inݪ?ڦΆj|;p׺{#'Ǯhڵk~y~ٳ⋨i=_3^9I҅*e_kcGծOvY^ɓ'W6M?^SrڵhڴiݧW=sfVfCr\.֎JJO* ۗIImsg#45hhSNEMի*((5d@*㯼ܹ$nz5{z]Yfה\"efޡ˗Wͽne7orrIrr)//O -Z>5>>e9zmkGe^gо{URKHHM6!;&ϼՕjY`3Ͳ;ْrss=N_KT-ce:t9Q#;wrÇ~_O^e飱c#\jZ_bvfdzwnQЗ̘gUvvΙƍ\[u j%䘮gRZS;*ם>}J閏\K. aZ]tі-[?pƏ&r8_xu fkvv}׺m}mc A_A<@q:M۷_ݻu<7TwSSSU\|kݡCKLL?_ +swݥ]vW6۶mO?=]vAR1x:v ~j~0A|^ .hǎzᇽFܯ49WџΝ;R}N1̝w֚5ktr~yP'{u&eet⾞|q-\Pwlŋ?jZpFz2"y.#‘j;g(g2dp1M6mڤU笚~=h:uJ{.3k͛kΝ*/f+s}n$M>M^ұcG51yn?gԩڳgJK/iϞݚ:mcVr|Y||NL9kתuղח?>NuQVz'tW+o_@S#}095t)pgfu6Ij9͛hႚψA^vvѐg6N3bHՇ]yt<7+ X|afiʬ#oQ]SM] \WAr (ng&O^EAȐ!b|bYŤ|:W|b|FtUWfu$rq)ֵKrq)$4"Ԉ/@qyq5E?)@zFttttp `V)?2%Ut_@,٣ C'Ja:%Ӕ.^8Ӕwҹ JyN|mH;+ zD%iMT1E?b>>/ÔD'hoZ}C7Mq>ߴ|׆$G=`oZkӨ/b>eeZ&r&aVW\شSeN5/+򽞢/WY=C%4ʘ@,**sjC= $r~Z3 |\X+o5>šfJ|2S.;Ux٩z ߟmHzOo”}Uz?ӫO`/lIENDB`mathgl-2.4.1/texinfo/udav/udav_main.png0000664000175000017500000041606313134046534017661 0ustar balakinbalakinPNG  IHDR:sBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxwx̶@HM^X("bCEbE`+bWE@I ,im3,I؄dݙ3wfJZTpkZIB!B!8)scWs]F$", ~B!BQ|8]nqXyN &]GFצM`݉~n{+B!B29#ȶ ՝#@`x 꺎((_@!B!(LKFAA u]Gc] Qgx_4 ťpi:9ɽB!Bƙ-poFSZB:@Um(=?lkhZn%t:ͣEMU+EQpk:UAuRSٗHXh&Rm !盁/qONBBq&sm VѭiXn6 F+ ^YFf-9v GB+p8fЩsg&vth'YBذn-Jm,!B+VXQf34jԈW^I.} y. ȗ_|Nxx8?xh٢)xb5b)U_Y!gՙ-/nM;]6MGXay|dތٲFSjЊnhݪ56qnfCQU۶v˝B=Xi3ӦLdT/yZEpp0.Kxt-,Zy[o5Bqlm_m{AYjy010`6hL3wi_EA\Qt]E]/XBNn.Q5jb0(;dENn.x!HFF_}5[ljBmUV~y A׮]ygzf0 pKJ~'//ƍPnˍ}fϞCcԪU[n};w̙޽EQ_7p;>S]߾,]otjfymϙiHP@^8[?ϧYf\~et]g(o˂ fEgϞX,.M`]w]677ѣ.\B?ܲmA'1KǣT}9 3e8So[Ǜӗ{_Qt6lH]-1c2hJ`FQ守idffK-~ڿcB ,˯>[2y8p/G}^yuv{wr \ħ_|_K͛o֭mxg0wI%/^\ul_noELL.^ʧ_| +\u{Aǎλ`?K̳eV=%^JMK9r[n@s?`%KXvɒ%8 B/|%bZK䓹9ٽReyy?Ƚ#O?+oO>ɞ={x7de⋕j_CU< l ,=Eb<39;vvhh`A5䡪vnf3GW`/(^@%/';l+={3Kwȑҳǥ_>'2Ӳy3sc~4ڷk(ݛxr| iǖ#c`?}gEs9z1? Th+ע A^n.O{O>ReYy뼟{15k6|=yvML;d|,"#*vѠ|cL+9<;Z@)t鲉ӛٻ}2[|Ŏ8Aq{n_ư˅88_d -[b)yш8].BZjņ3f :uкu+^=QQQkcNV+zMlNi/brzLnly躎YX]&PLx+VXڷkK~^ڷ'&6{IDx85~ؿ;vЪU+o_>M7$?/_!D[>}Q7ƿt2w9a*[j{ѢEL#> ZnEf͸@kJm;Cҵ+?.GUt233Umq;]WIN~x>L^䐐tPut侈 ywA-nuqB!NʫraaIJJb޼_xy~{ +V=vϞ>ՋM+%WrfGQH_ (=_qy}h^mڶ`9ޱ|rZԟCzWj{E.J'vmRSSK<@:uNaÆ7['t}Yl9`Bo_ ˗/ѣ,_@~}+B! rl+'2mt܉?cɇZ3+[jéW7pI>zFw_۞1c֮'VM=`ڴ*i| Nө[.әItN׮Ѥ[cn+g_IKUmކ`: ~[@5Bq9ٸn YxFCǎy5$;VϿ_ǽ=rd?L&>svރ"==ZOsϨ¾~IKKϿE1|8?#Gp88r(Ms9ɾ$^{}2֭[nOl޼›JŞ%\ѣGټe &}p88q>}b2~BOYe +I{wg_x̌J疾NܽI%rգ{Ƕ*ݾ}{=}{fJ]pM3ٺu+5k 88ݻp6yxL.3 ctFDNpW^PfU%22cɬ߰mېsZa_K 'e՗_{GTTCO~N6'K/gʔDFF0rԽlذZqͷ29rZy7iҨy>珯?ŗ^"//:vƝ5jX7~)oŨ{GÇ /`8EW_MTT 5=8ѴY3&^ҍ%4x&HZjǟ}FvHM> j?x`t:#KN { Ny:HnaH!ąLJN 0D3c'BUsQ |S%53n-ʢŹydf~y >xM>FҾDiԸ1 X,;FbRaa4j܄:B!KE |u+0l'5-?Ɩ-[ꫴm\wO!3[^mO+t:]7viA'tt݈u#}{HB̧ML&ujDJJ iiؿT4.j҄X"#"0BjquCIJڏleV|0#ZjYbāBq!8vu+t R;~r0hBq>:ϤаpjldeB!.hg2dƍ|g X}/xO|[tVw޿i<1/MHۯdǖM<Yh!-\@Lt4oOy2? dzz2&8>W*1Ge岥W^هe?eo4+-?f݆ c:v_~fꕼ3_X5k/yN?z*n-MXǟ|ʤ'xLdLmVG!BqR}Fk0P5wG~֭ZzKIMλG2_~s]wsםwзwo﴿/G꼦cYbl۞gѬi2cеױew)Ռ3-۶gάhѼwL^s-+%x)Z[n;︝+g\ҝ_~ؘӮSex Ϗ]ЩCZnM61'Qٟ*z ~t;Gp]wҧw/GjZkqȑ>e>K&r1ܚVL&>hož$\.jդ[׮~f˿x{Eޚ25k0bp&J*1g_Orr2q<0z4=w]t'1wٷ/ZQr3}1[m'(0Ν;W?ev;111 F;OE'__u}z"--qO?CZZ:kqm[SmSQߪ{B!B]wi@#rw㿨[/suW"B!&b`R!B{&&RPPmxq\w5[B!B6D_Ku'#Ԯǰ[o9B!B}!B!u}FB!B!(|!B!_i;B!B!Xx7۽{9Bѽ+>G=B!Kc7(pBS̞59-B!b5>&OnBq.9-BxQn'B!B x|CCܹo M鸋V'eAHZVk9cU"u֊UlL܂dn ȳoڀ1qX[Q̈́* S%ZnNYɶnå1=ćVKdt]N:%?rRvۮDL֬Y~_zP/j[ر6 VAۧƭ}ka=^.u}ƭzUK,e͚55 yU `o1L(+( ogr{6+Tk IDATPIQQ-1F#4f]e_+I\[Rkk֘V_fѫseR:/3_|Λ[oœO>UnK1@"s@߮sy,k\ֹ=w,{{~'}EZаP@cÑ}au=M/yE-YSl"1e^*Mj4>c߈J?/)u^ujF3Ų喭U[䯿1L8NVZMAAz*W;2sꫯk׮gÆ Y~'rN=x⋫%nu'}lJ8u=h>Vd5kx+ϗ^z'hV1/ˁj0(ysss8x FO#!a})HHj3~}lw8a(X*YY &z huW˅l&+!7??]vUxN *v u( 1l04MCU˿׭q5MfnVҏgRF$M%&:ck}&elwt` bCtizpr}^kz4"4\Uu+b n/8%*aDS;.ZVՅ []$nŦ]Ht? #))eNRYc*dO4Gh"l69(˷Hܷn3Np&VlJEŵfYb\J;[_Mbʜ ̙sy++vKc+6A(=k߻3zP 'f*9:0k Fqq4s6y~̏Źnwu͓_ݻp²wJ-j'qTUEUUEQ_2)?NLL lْzꑑ?LHHp~ݺj[ڗ_}xgxc|F;8#q+kT:nگB?322[ΤĵZL&5 UQɵeJ'zx|(r L5c셹 k1^ O"BQ4݉F bGr]n=W\[?={zBdU tzuvkewXs`ŝ  aTmIu%.A\l٣b[2/ҳs#B@I3g^Guಎ[i3{#4MR"m8tjF \#1iS-{ fg uvv̈wpuC0QGq<[yW~%1Whiu&55BLL ĭ|Exݹs76[NӁppر8TUo(9AeTvۥ0Cu D:=3ɘ` 11ݻǹG4{'FK6GO_*aa5"?ϳLnv{Ge4yyy<8ܯҦUO0h. ͩv`O0G߄ԭ\>_{}&C ޗܼ95bT2TE;?qub g&'ӧo_t]/sGlܢv ƍ ;[,6mތl.йsgorWٸ8qO?|͝;Pm[\JJ 'Of:~+d\qƞlU_N]s>ܹD;VS4S"/Ѷv~V&8N:ě/~@^~8NQӉ}p.|*Vo\y6/^G7FP+ר9=~_-ں%FczpxtTŁ09hz5t:*: lSַcͱPPT@;Q 43C$zxtzAÆ L8eOr9*dDQ 'A(NF_NTdg{ 5I߬gPDFbTBiAYm;kV&q8-Aj)}i0oܠ`FŔ.szuu94lX{؟dh4W3?[z7 ~>SRۥ7EQ3SPBB&&`0C5C"yّ0:\q'7kWl4Kǵԉi@VV!1 uO)DI}IĆ/ Ad\gEA=}egv(XO iE5РQC; $"_q7[ޣG$祣xvj&Z]D1n(Ne-lXIwNbb"!eU6nQ6mbȐ!>߿s/+\.:uDf<#RLn'## +oeiӦۿ-诿x bdgg{w\$$$5\Ä J6Z׷0%(BW ԊٿS) YT\]'**z шi~׭[cɧ._խxw>&ЮMpp̜A㘱<$7mA`+N_W.*h$޳'mv^_-n]v-^{wSy٫_qxG:t(ϧ^z1d222HHH~0fFoًvCN֬'}= P(ZΥ"A[@OTwb6%/r45nk+OXp<¡6uҡz 5E&SϺY*D4:ĦMٸa3g4)* ZLk+7;9  7q⧩>ҟeM!.P}?QT[lTʖ\))9|?rQCS+"ۯl^%GK׵};o>!5 lFuѲ1ݨ ؗH|ʹ曒IRxа0r}/{ !arұZ&ӚIzqgdba4ij:w'mڴna קc˯ѣG_СCW6K.!//?kʸ;yPlYyʝg`L&ۍ(>Ft-˜9sxطo7 |T|fu:Xc@hXci9L-J7d mgg]2l 9q%wuj:mudoA.nHlP,5p 5`ubp(h޶D`4g1MDǔ\NERp/:*J!ѫ2**&$?d`0b0ChhhyIİgzŚ5k⋙5k 8GҫW/CLL &N?>f_>yNU}+Gr2۬;SV3fiӦ4jԈ?pӴiSn^Vϓsd2asgϞl0I,5ˡx" ˆnx֭{8>=oj(U4=nmF(v f)X##}7 GQ-&PtX7m05iڨMP"tŒj^3j({=@oDtfV1a:8Sق^XRUUVsa FX|%=111,MX?bԨ{Pw+7;;<n.^K@sskw?rl.ٗS/pb1vYmb 5Z`#w]Q[3;BCn=>! f35o47Lȑ{u6Pﱇyݴ^=W  k gt+[ " DGpI^~'rs26;IU/ر޽{}>##]שY&Ap0-ZĆС}5kJMIIAu c,[=WKܲ[L\_Yn?qu3h4b0p:\.nwD]ff6ĵÆL#nwPPP@AAbr\_VZѣ/޽;7Çve\*A_|CO~A>cF}w3>djk ( UEHr:t]fL]ܚ Ӎ5c)qƋl#<\Z8@yһ!Cw!(8m˟GAqclQ0Y"hΥ#01!Qͨ| =j4b"u+wuL9%di8h}k.ŭnw\__z)K,#P>>}TE-W-=.%yqEJ_m1U7Ixb&$p] ɉ'd2yExx8jr,-9sh"W"m(X=dOiQt,Ҏ/G^ f;`b6g mì,&MM7w}WxC8#otJ;+VU;nF4M/3gz+ZBezbZ%T۵^H#p,duU@r* %{rj1 ),wRk5¦~D_0STEcQăjPAmϏ4b)Qk/AJj*ǒˀHڿZ5kk:K.Sg~ׂjпC/,t`anІ10_T KDDD1X.Q~-YҦͨ5,=9 D伍5ͷGǖslIWn(  ,(qi>vYfFog͚hh^KiWV {]:M(=P⽓{4mt>k@DDD5+ttUǕJp P(PchPKJoLk!h2Ю P*m}Qٸ֭gMCة#GOw([ڷo_~i\y\ڣ{\~+j0btgs$Qn"_8jf5q4u-p9bŮsV$ezx+` u:碪& n7_"g1ի~'}u18(ӉQb.Rg;[xɧiݪ%ڷDVC. ta՚l߶]VBh$'']vqA򈌌vM ̤eՋ|bl\DNN ˖M|NfwZV+IIIߟ~:u0_,TɧW^<U[KwEEݎ .QyP*Rx#XO S!Yyjj*&ސykAdy J=/ocɑ,t&( jZ4w_n ,J!b'ysl3_q=5&:: i?`wѿwUU&//3S]iuсIQQTw~[v2YRqvHɳRQs㶈hA-zBh֨1SOzq7gύpnt4 o\_\.K_,gɻmrq>K'%dR7X)=Dh0`4< ~Y؞3ݟǩX@϶ 94$ "?%V6]ڀe[qd6W7(Pga|bKh?*sC &xq㈏/\jak(B`` |:) .籂Z1.: [hZۥd1wp0z GN'y7ڼ wNwQǿJ P$@ AA(M_E bCQqD*(z ҋҒФLRHyd6mipk.ٙ~fӹ.󭬊xxrB| +Ms_^ڴݍUՍZr4 w7Wۛ%VX{&TĉtTz:n5kaHIImtލmiܟLx&Nz+NģBb:?κų?rt7̙)nT̗&j)/}\s(j`=SܘoCQ|i%9111ͽPn]bb,Y#Un0ϲ#hekJ1`_繕fzh4e (c?%X"×=>&Sh؉m1III;*C5G\NEGg ZoJ& k+>DΝM:wÇСC6n.My+gdd-5PQϝ`YZ0(F66B~~.nrr2i$ݺHDj؁k{4X @pas1nfl SMzZu>Ϫ LPfgd-Q" wУGz ?K._ꊓ۷oI&E4qv/_nj*FcV J/ G cܹشNj'=߽qDSQ(a!n@EM;DƵ4l3P =Vz5U٦piZtodA<5TzF|[ *Kvvރvŗ_Rͅ'NFrI8F7ޜF||<أRvm+Ft ԕ+d[&7ob4> ql}-)⁣`ƚz\`cLy(gǼ+$RIL9;qZo+K7 Вo@ kצaטԈ#8=SAqQ?,?ʪx.Lm//JYqӛ}Mj̑p߲eK>"/m>Eĉ{ӧqvv6ԱV\MS䡇/`̘1ʢExꩧXdٹJڊ P޸V c먙컖=G̷XTQd{0nM-[51 f]2 MM`? z4 A!2F/dw8=)0''""[G4ʕlc3u5bС$''ӭk׬"9YRA}4o`QQ'!jS’&akXAjCN~jZ&O}'~6Uհ1X^! ّo1[GUUi\7[Ixy!.6TY`@ W;G  stAO q&&ҬY3j֬I\\;vdϮ]'$P^=j{xPn]z֭[18@]\?n5kq3NB&NFDן^5pw㧟~b_ѳGwT<V/Mܯߘ&3zy^Zh4sIOO#)9KmIOEZ-0^Yh\\gW EgPƲ5N:DGGӴiSӾh}NZrJwcs1\}Y]sdL#/S> z!ɓԪU 4 Ν;G˖-9v-[$::T`,k\W1`q- 0أ^35j2,hRЌv{V@d?I!,FEE1鱤p)nys09vǎiӦX&)mܶm۲gU?~(m@RRmf}7U9;;qugO7;vɯ{,L!9%_~o/Gm>}xcT1oLԩo0%4jÿ1ӛgJ?`qGTB8nn6_\>7R gij^QtRQU?UU')) ͞_UEuwsw9>)noP>I,WT(cHq`' /rcCᤪMI3z;ellnà=FJPff&-Z [O?0i$4a'Vˍ*+l]:w8~x_q+*^ly`qe η&qkT'%,qǕ?]``$$^ΨzzC,aApI~|<.!4m1sNr[Yթ[ }0Y}рMr,"Wgg'WږTۢ?G""ILL`0о}{BCCiߨ...\v GGGիGv8tnnh_{ͷ+Wqb5dv÷"''O5ݻ7Ý-Z)*K7oMg }ϩ%q5;!bLe"L-pwRquTMC4+\\E\U\25K.__|Ѵotբ[[徘?l B6`iII(qu@23ҳ0y`gȞ}nNN5jφiUk|^Ya8MӨ$b(\\oj)Q1 E?Dѣ;#a̙cf͜Ihh(uX[f~͚eqZj1l0{[m3Ah4~)%00L///ڵk pY;fzӻqdff̳XC4qss+ޞٳ?*|sV3ܒ_|T/5kҨQ4qdϖxb}Y4Mc…J!UUN ~1-/>;{'RۛMI NN =Ҋ 㪡3 롤Gw {QZpCmERCpRlM\OӸ \KqU;bU ky*VcQ(UUQf͚Һuk7E4IKM#{^g֊ۼ?͛녖<[G*0͒p=9-/x7v]bړp3i8ǹkВ!?CTg#+\p8՞?&eVVsnu'K}+"6MMHOK3ǒu!==CѺukׯ1\aÆddd;...:ufM nz>l(_5Ç aFy8| If͚<͛5+S\n|ij[oMCӴ"?eoXϔ tШbU']>/L4rp3gdW޲[/_bHQd}!OZs-#ӑttL + (hd3ĿiÜFJpAU5k&[u?GUU[@UUԭkz/K)dF53,H TT7L$nXX8O@lL,QQQ|8;qw` yjbcbiצ-?,2!e z<8*’%iP߇nݺ+6!ncǖ-y_(\rL7n`䈑L4MXzj̔k~^ cNhqo]oIҷ$̘13 jݪU~.6F#W^e…pBS%O?. $eyy;8vZ9WT(ㄢ$+I *6nFg2U{YJ/3`EF3ЀJ|O;/[l TΔ"*7vF[Ӹqc?LևT killlh׮[nٙY,j*}<P#Mkդtb.$--gG[ndxV-Z~q?T;;aƆ̌ PMbzȭTV&hORI6:*33*Rf C٠i6jYXN59} 23Snm/@T^1łE uy)SʧYװA8=c 0Lq325>ָ^@WJI#51[nq>_7 \ QU=naFaZrUjL{M_+y)lވb.9+S >jL-ҶI.$5vLN+ᐂLX$ hcȪ48Yf-=APpU+&Ӄv&&N() ͛qqB:v"VjI^^<US;q8gMw1h QC޵s 9T<7l˅\!\۵aV|#>q Mr [WtWW\__njѼygkĵv|I^8ss[-gjv{ok}& }_,.{z &*+@Ff&WJjWbӯ jqE)*H&OXcrON[':ըA琐R'c͊ISf*d[ kkTx0[*?\սB4x>u+bCڷ#}BO-4~5Z\kZnn-Sj+ =N,q"VJܪv%8z^*dɱ?U0G8p`?.[Lxxxhf+q%n[\U%U)UZNi&y%Eff&Nӳvq !+qW*b%ĭ:qx[%Ve+M@fF .2eiul];jfg !(7WGnyܵTq%1AEWTr$Z%g<]ʺ^+qcү*v{4( *1+pߠAEUUÏL@Pc侘/e?/vޓ FOV}A BQY/Bhd$WT^xyXqr_fo B!Ba%+i侔L1uB!Bq*3 !B!+iB!B!n6\Mn!_{+; B!v#mʒ#J^N!Bq.B!B!mL-B!ȈHJz^޸P12K!lJ7S#{|) !m*2"ܾEM+CB!Jؑ0qdlE){8h4BXCbb"AUUۭG6Ūi !B)dOÂiBTiqhu c_!B]v^&Bۘj._o 3S5%K !B'2pÛW6 ބ({P ƏoHZmP"zTTSx9}[Ʌ'B!`w7 ݜv9]diNrru'=懗WwqՏi%Vl{!]I/X!BQude2X6;'1ujiԩ;ҥB\GFFVBGӴb[54^Y*  lݒk1$TxkA: !BTEVJSudx{oBQyҥT&N<˯m׏9?3Sw7м|®ӯ>6;>Nrrf۷_&$d'/72x4k'5jlf_w=Ժu5=rG_fZ+KUV\!Di*j jԮAhoFsFVk}sk>!Ba 3avuzi׭.ڷEtt_n)vޮ!%%?•+Y5s5sdpL"#"(ȅcxMF8K/5&.^V̙m[N]v?gäI~̟_R!HGZN)Uu(*ʊ+~4U+t =ʀqru"dbbN&&- ?W!BT= IDATE?8ؕos1ن [ѡ{i=3f^̘qoॗ3a鸉z5#O3aʔbΜ@>w \WWv4țAD#{xdpJ~BGUUT3ׅdhN*ia-[+B!ri:*3fEԨEYo?5'8K7NizeK#Xس'!CgO®^8꫑\Z !D5euϿe\yC9‘G8ri.ztB!^ S}k_|7)Sq VjG89IMUqtܐ8__纹ْnzFݺԭkuTT ͛Y8!gk/GҴ|}kйc|kaw Bϵ !Ba5҂okk>~KжmM9T0S#:`{t<]]m߾h<[f 1~~5\:kO.n̜O??<S +XH@@BGC+Ok6=f͚Y6 m oB!DUr~!RR2qp[_,ʢd _RwڵEφ@֮׈__*AbG+Vx0dŴDeBT?Z8¶Z~_o|h h`ccS9-'B!*XVy.f<`/AL-n1{iΝK(gΜ3|9,8DZc7ל3N|y/ɖ- 阞=w7x1 [|z,Xmqb֬:$&IL42sf]s,BGӴb74wSYB<&œ.B!UK${6>.Ç׭l!DAFf&( 223lXB!(?V.$mBQ p03"KUU* !B-B! *#aa8 Y%=!Ba=Yc|! nݺ B!ʛ,AQo]Ç QQ͚Y9FʒYU!0 (K|2gߎCP6Ԭ ;Ú5s˒Oubǚz>xi;;W?/\K,}. s5!B!ʉJ nݼ {Cvpk}@rr<8̘Q=k(sBCx8 \˗[U[и1|Yξ^ >^/GGӧҥR[@/4ve${ ж-Y_wՏy !BaeETi%KFSMߦNҕ!ooxQnK44[h۷z/=]~j $oYFW_-[[7}ǎb?JF o{0aww~>ĺΟwkY}Da5!B!ʉ ӕ騙*;\߹cO.pXwe\}q/p|d4Cfzf'."|]t'₟:e kז,P<11ʜ0qb1/8P=p ߸6kjք}a4rwV[}}7 o\WTwGݴia [Q^<@dYs*.͇ɓ _#0@o_W.-%ϷuΰaddgsPwM!Br-i+†HOIg|e2 fD|a:&DGKy-5FΙ;9uZŞsI#$pr< @z~4o8sXE`^X w^(5W#%Ok9s <\ ֽד&ܹϙ?}Vf>Va5!B!Lz-e򜽝{ݦ׾|o}lvI) ~8!wνh7wvL[-9o/_S:_2ZzZ\rsٙ ҡC{"2Dݱ#$$={6mcyx/ȑz#ca* -}[)_޽oh6ݴ7l }7]]]a }+w z f3fG <:'O.*]\Z &M ӧ+.M?v>AkίO㒧_Y:Ao_4`{kz;00˗ OțVl¾k,2"Dbc7X%=!ѪU++;BJV.6O)ϧO'z9QFl~8?Iʕ=ztk˵klP+)r!KT>CV\Ʌ HIIp!rZ_{-O#VVkee*IUal}lO=;mު 9lz쫯ꓮկ_عcfN ÆW\A‘ߨQУx%Is`'Y.#>j>=5^#qq 3g›o,`{=~~,9fR{>WS|VMw$ weB orJΞ= ``͚5 RsV.U`#))ע1|+Mp#hv_3¾֏] ::)SgVZE||*;52kIk3\@t[w~t %*|[g+$,wv:ծmy_;-Ex`ksQWƽ6C[+^{zs׮{K<}6VfQg]@qhZ.[\u !(کSKF6l˖-},YM erքO<-[dԨQ,N !,^ilj'<._SsڟK=}:7qgm9lfr.)))888ٷl2zZA ^B_seȣ, ZpI]I,Ѷm0|˜_RlR CC}l٢_giUԽ.̞=ТEbǽ4 >\_BoCr>Vwif !'22/;Ν;;v,}l޼ [n;9(fѯ ]JdҒ8 t(}-?mꞟcb[ /HLL qqq̞=;Ϥ{GK.&F/= f ;V/̚bNLI+44 1fb9!J쭷(=./3YE|Y>, 6>}JLgp^#^Qƍ3%w_{8Ks>`̘M5@P^[z>hgs U0MUeBa]ߧAtڕ'Os֬YoCٓݚAlքvbL=aU|@/FmEG?b̝tyK<;g< iV?G-Q ԩzaP*\yvAv9ǹ+jہz#`ֈ2Z$xlڤ.fgoFOx/[^qw]/ŋn-[BL7c-1~>q\&9eƏ{%_ *^OW_{˗uIʆc>SwVkX !((mƋ/(1;;;֮]˵kѣK8In:uhuߟO>;we!e䲿C(3=v2Q'< Ȣ0f ^rtnڊR8򔜬;w/SWo F~\ݻٿs1jŶ:w'?{ CYD]<^1vrn} 9s~uƸq}JiРAk+۷s]woqBTcGrn:V.{pɲ*_r1}>}„ΉuMg]KU{}*|m~xHT"7.3v8ky}_n ף}]v1z2ҫW// O?TnqU T^VנB{YLߪvE6pT\FkhQ7#!)-ZM6޽Sry6o{GӲ.Z6lȦM|2 K,>} 4T(Cf&>1#0md@C3{bLMwr.\FJJ:Fcu{D1mZ͚5kXx1c^C)׭[2YBCC9rzj޽rif͚ee*1ȯ֍AVRtႧ IDAT}6`3V~QqMq? <⋿1{v? +8wj[km496w?ˆ |mc3Ϛ=[E>wGC!رc'N`tޝcrAYM6%88\gӦMiӆr#\vt̢oN׮ ;wͥQ̝e $$Kxۿg-o`gx-{ O bQ|}$~~]#f/wʵШ8/#l͛,^ wmB!UѣGY|9ݺuW^,^{ӧOsNF-b8;?,7nLdd$qqq<$rZ~x#C(DBq45kOխG?K@vhJ ^zw ȱ#YwR~zpa"( ,.(J\qArݮ&ޫF1&%x4^ h@ M\gQU=sr`Pf{k{a}߷hŇ]mJdzUpB>f̘駟΅^O?蠃x1b?8cƌL8z-}Q&NM7N;Tʕ+ax71b<'pBzke]xя~Ē%K{Kycr}=ih(Z/>}*)ך,3lu=VG=E1w\.2VZ9쳹[ٳ7jkw">|8o&Vj^{cX{f]vaȐ!̛7#GRUUĉ`/ҳgOz!رcyKcxl=̛7{SRUUO~N@n!cC1=sSL 89spGN;1rȒ{|L4c=Sҽ{ivhx<U|h a ZQ_CR j+]v٥x;|'<\plْqQ^^Ό3Xz5_=ƍ$q۷/˖-+Os]wn>x%^{<O3F)/Aa~P5_:T\w(A*˳da[x<2c NҧϮr[tڕ%KO>i "k4 ~)}3g;A#0xRwS":/ڵ=++i۶-H)멩z-k:}:](~_q2d^~eoRwjqμx<Ո_L&-8CdР=xѺukڶm?|i裏Xx1=> C ᬳbΜ9De(:ְ\]=+VDJ֚0ȇy|˸6ѣG3b}Y9Rw٪䕸,h~Cd #GĬp1Il*K,a?>c„ \}ΥD\whRHdҊʣCM.5d2A& $Bbp5JGDZHE}zwbԨQ̙3#F?;]x:|i(4[Nk׷o_a 2V祗^bԩ3cȑV8irA(Z 0]jtPABPiT6" dCHSڊ|+)M ƛo^{ɓ+J%g |x<OD)BG y<W^y%J)-Zpr>k2y1^d(Б&BT( =DUiXcѯJ.|`U/wc=x0a۷s-u<齃x<͔:FӧOZk.r1`RwS"9@"VZX].]@h@RHI% yN}xt/"Yrw=oŒz<бCGYȦ WJwԩS4.]oͽˬY8ꨣ8S9C͔)S8ꨣJM@(A $Pp>=`=d[}v> qs-|6wޙ3g2qDVXo~Rw#lw=2`Y7ߜ˿n6;vHǎؽ&iZYp!_=K,SO/;GKtܙ_|ߟYfqa5IDDhN=Ɖw'9sdӠAŢ^S`Ob ]s҉OziӸ9Ø={)5[%S|x< *uDwRwx<O3'K.{wޜs9̞=Apl}7 &l^{6Z2h@"0Sډ@Jd ُ4ƌW(mkOE<xW:iF([/ .䪫gի]xdL˱5ǫ>{x<` ,Y駟΅^H߾}Q[ bܹ;Mmf>Qoq%f4g32,LL&@"("R!aR}'xV軼tz\@(Z$rb}on3ܥ-ɓi߾=rO?7l+4_UUϵ׾㏿gUJ O?'7],<._~Y]Ϙ2e w:uOdɔo%{<يYhs;f\zoc 8`_~ׯߦvٳfW DdE6aF1_-E9TӢee: Cjꨭ%>! |H$tS8E:."ڵk:񏟠gJ{no߆ z, ڋ_`ڶm~믿˗ӟk)S|>y<ٺyXt)SNeڵ}|Nt֭laM"I=@J2"C&!--iݪ5ڶ]%URQQFFWWJHzP*B) /š?{ {H9I&1p@.rRwN~g]*8>J mnݚ;{x<6'||O<]wu]̙3s=K;O)fDM rU%[ߪeKڶiKԱ;uU۶ЪhJA]aVXA&A |"e,uT}S.~o̩OM~YY3nfc޼ywW^OuL2#<߿]x34m??nnr{cnz[]]կx?Im 4 x<[7.z+W_4I{uBmݚ=gsh"??ߟ3<>ۇoL !P"0^J}&KyrZV$¾sܹ3-;v}%j ,!YCfWt(Zjj4zLQLI %Ebv77K.'dԩ|L4k޽{;лwonV8y?RwN`~< \|,vVzdذwܮ׌T~tf%KCѧOZjE]]ܶ|Wywѻ ${\wewov=`7a̝;N: &p 700^(`& ȖQQ^AViצ-wCtn;dе+tw-͋ŠA+Dm P^QNY2eY\B S:ub^Oy.Xu8?M~˗SWWC=Đ!C=f_gĈ믿NIe˖mr]fʕ>f J&mwɿh6=Ma L:ڋ.Çٶ*0lr쭰 ٠<6mi׶t٥ t,u@BvBв(oAY22,A& aEPu/(߈Ks񢋶E_[/:t(o&x ˖-K/xXME ueР|?z9}tdΜO8] ι瞷 {{<—_|QzMZHUU5ݷߎ;lO.]rwӄ{<߆O?e˖1sLNڷoϹˣ>K=O< Duꅐ -%dk_ւ ZlM֭iӺ ڵ}ȎLH~ж-i T֌*˚PlY,lL6C&d$AF"" Ӷ{P')W@0 J7a̙3|rnRwXMˤI{3rdOvm5vp@.sO{=Ww+V6uw8# 馛Rrx<֠ĭ~;d,K>g_] 0h׮67nl>#/^ɓy7:t(gusaw.2yT`s(D(#B؊V 3} iD~6ȐUвel݊LVкL` Eyȸuh(P 2v -gCuN:g}{mEeW0/;ۻ+K,ᤓNꫯꫯ.]<cx''wЦu=D桇?\0OAeuYn}tSwn wߝ}xb{O4^p/ƕwܑYf1~xƍM7DnJ-gr=SzU_S.]rʳ2k)a@Yzޅ??(Neeen ?hvB 6B? /?ロaÆKfEo||wZQ_-ge]+:t.=陴}\{,_~ ={7g 3}t~ g7rt IDATB(@4Rq7sGpi1sLz].y</=/G|E-OnZ~_ ` )+ sa@jfgYt)SN_樣bĉ\~첋UgŔ1oo\"+#rӇP(ķָ)QFQ(@hIzd)0~E"9(/ |?F!JG&>VT2=q>ވCE󅫢oïI͛?v1l0^z% T.yAihw dkCڗՒC=u2w\f͚ԩSQJqr]w1|o΀x=z4W/L=l`Q5f5Y- 5H!)f6v\HQ(Qa  TAkȇBGÈuBGD ċ0)HET舌 2ד:22//G@ zGkN'4?aڴiyWg}J%g4cҨT}gVBf+d~P ̣q''K.W_۷/s>7v?~|ݷo_fϞSO=ln~3t ]@3haThha+*N- W;VɰaRwir\ qFO_x<͋F7plו7 t"7r$=;A2M(}c73ώT78״8>X`w3gCa̘1\r%~ߺ^zqM75wymj=[:mҺTVbU%zV#%ldLe{D Dqץs1vO6\Hؤ&*pI{mWm>v9gAA a4J)LT=1B au7Xl^@waƴiӘ0a;w樣*u<&%vx<]}QԪVTnMn vҖEa/l|G%6bZkk›} uBAA|~]޼qɄY3͞H!ךPDDI\aȞ/&%MaŕS%5w-'m d l Ǐg]weĈtIdzɸ">Dx1.1 Ɛ!f^\.W0>b3Oq6jպM϶yxg[/O-N;DnJ=O{-+,KYYZ;BBD7 1N~k`mTU5구\>G##[/~X^ص"VO"Sm)#u!Pd2Y A&c3 (py. ~sxE=.'D13!G83Hm7y{~{[3]`曌55kpgKOY~MM.z{<Ѓn:w߮น3痿|wp0zt~Gٳn8.{eV?6YUE&)8g,z]='c;o|'|<w[ns9<瞥D7q'LL6 ͒f̜Ҹˮ\BQ\>G\=0*)崆04Sj"ZSEUU55ԇ9Q|'*",G->级#ޛD8+'ׁ W U"uDPd tD8ʹD[!._(ƅsE$)qOo=q]xq}gŸl{<O7bcxf,8Vkć~=5k?gy&g}/zwt3U2nck}._OP sAm54F꡶kZKڵSϑJ+tjѹں^Z;_@xʽȟ"@n@^dt.[l/@@K"-|a]|E,bysoߗj{WBoҧOfϞ;(u.]Zx<ШF m, dٲeq;b!\Xx1owuseOoW^D.H)҄.q@JܧB? Ʌy2a WV9D& LW:uRWWG.gRϑ S"_ֹw ^ e:u9)?Ng]@k 6 6t_(/mv@ Zh"#Nd\I_"PBz7Vx/ӗ!MAmz2YsՇ[bvbŜs9}^{>\:?唁oֿ#7fL_nxc7<k֌߰}4R_;yJy:u*_}guSLwt޽ߞɈGi }.>\;|> ($f"tXZ+EFF!|\.O.gCUQt#νB>+knz+ - 7!M퍉RIT.<DF@F))m]0=|Bm5~0Q&^K+mDba9s&'N[nߍSE~6x/nV ҥڂ}_|?W׿*=gcЩ#a&RJ(cMҞgg}W^yEѵkW=\}Q\yJ-c!/R$R09ہ0޹z*q:>4ry'flnŲR0 (RaH"?ˑ0oɻl9?ЉsD>V wwXPNѶب2f#C@d*b{n 6`r3&^:'߆K!Fp}R'=+lv>g[3{/^z)r w%ijձY?s:wN}.jvء]q_~YM׮\{(/hx<O!;t ??lgF); ߡSNMҞi>}:1cH)9蠃ӟ1SyJc!UӮo 'SֽGynּ!vK7$WWI&2AĎ|\޺"@f…k3U Hƫ(F9+DZL}+8y_N2nFLСCyG9rdl4H|+8CI{̜sRp܌^ߋ{n~[o=5{nYA[iȀxg|s_/Iة#;vb=ϦsA!_$"9ꨣ;v,Ǐ/u<%ӣa*٧^ C#B[N+@DHe$vj+Q*" #0" C#Qh قzν`=.\{q2/%)ʅ7#F h3@ \h|RI?_L5؞yI ~d( 6ul{'jq2n8yvmRwYPq{+nuN:iwy]N+sqRYYΡ˸xidZ>/̚eq}̟?+6G=0`РRw7n/eeequQ392|ΩO;sSn %TxnQB#L|3:*4殃N++4QFQ>$Dvz9 64_vV^KRވ謹Mv:)V&-HW M=@f ג._G=_TlxCi3{+QXI߇rw2tP^~e?]g`: .xEC߿>#v޹C|̾=u׽g:$2޽vۭ3'$}c^ht`]|ܻ|i}xh5ZIT)8'e2K~wXِ(DGO< klA,i()2}Ia:9.tҜQ4hV3(@jH"RH2aZISlDػ@KH2B q>˽oD{ 9iݺ5W^adz^\k}5w=^ەuϯK}y<ܸ[oQx6#7[AuUS7}/.~tBQ8Q/ERފKec@\@OkP{ Rq{W |T)bauiA_-tQ~;/RUp5f͞1c0{lw_y:kw{<riӆ'ҧO.]Z.y[ƶwӸ{HD|%oSP"8\K RrV;_*eNgZYqo6^$}\ {4ʮtro6 %/{PX7XܻˊTTF/*FcE-'c?_*WJ\)KD0:H |aS߀O>!<|0sSN-u0^x?d…L6#GrgOs~q'O x<g+e.>y'ÐO?D|[ԙߞԉNhWW/gsջK9]_ՋCӋ* .۹uHCBpImoŽLGс{"LsKjfIwzY7p@[X\"Jl}ȌDfyld>20.2жqv/"^5y />.cq駳l2^xN9ZhӹK;J]>Dx1.z+W_4I{uBmw?]w>k2i$=X~߲;[Ftm'Nn}džXإ%}ah~n_ZOBn4JSFmOE2=q /EI7w!VƝODt\ n9mg+w8mQ7/u 9W.`piݓ`U0λHu(1 ŷC_ܫ"?i=jz̅4m]!<%ξ rν;׆0 ) F AjN (%:(I1 ]|m TS\/Zw~"m_+޽;| gucƌaԩ>-SR4KymJlu~32 C W^iPϳ|SYf5UUU)Sp--qc!WDu#$\R;F$"?/uƅ~ܦm; T^5)?k]/TO# uD:Aۍ8I޽s IDNKo7)LΉ}59pޅ0. IDAT m݁T"V6^;ޣW| Eb8N|WV$?_Խ'!AKa 楢,ŗRHi 20By"~\XkJ 3OB[F(HW/ۗC]s7뮻o?/ӧ]ldWx*XmZSFmg \{/^F?ψ#={6zh>_hj֮\a|'NHKs o̹덉z B?vߋE~wjm;Viz/" l@E{(5_NSo~uEHm+e 7#ڮB^oXa}%%"0Yq40.~A>F>(WQ_2/v{e?q {'=ߌK/J g8Rwɳ"x<8ÿ,b"O5TUTTgB| mVvz;W_}mF53j(̙È#袋JݥWA*XV|M_zjVz-5ב s䣐|'_š* я ݎdz=ݨO7tiAڊRɣse:'ߵQn8D{<@H#a)Ī.pվ ȏ/ tH[]"N-ʈ| |!Z H%:a@kh,T?5SDg+~wȏM,p=ߜ3kgذa̜9>N:]NߔU-!1B0Z구j Uk\=zr0G UR뾠;O|k7'گK7&)cfHrqEr^AE̶:"_D~O-ʳx1frTd~{NVfɈ Y7ENP%BѠcgĽNIܹeEA~ADqؾY:ǂ)S_&"_ hFG TnQV_5!Twi{W[РwѣG׿էEy(^{<O3]f@0sښl%ZBA-t 献q@i>׏_|\+]LXz_YR 2dYVgWSVVFYYٲ2 A&0 PhoJ0L(~>#C]h~,IajXCG=^]{wsy\wŽ+*J]{xg <6T>-9@AeѧM76kvYصO |{k7 }$yvImmXk@8/)tӹO>?z05"$lAˍHy=#Gdܹ~~L4]4s2gx<Z7'C|rLY'ɬΐѾe{M]SZvygfΜĉYboJݥ" E''.7tσ[ D a+K@"L&  AF"4lF4Co| wSvJC u7\|W.".'TUعTjH'=9=UZ$Pm;FZw缛AB$wHхt7u]"ھߧC6>0,v݇+'CU$1Q P})0~+E,ͤx 6AAƅ 3u^~۱>o{zj.Rw_fxO8T_&qsDDF|3VI"~n)gGȊz+ej%{ 5oϦү_?^x?xV\ɕW^Y.y!xv{p ]\ϳt֍~}هQFq}<-<x1Z9웤Mm+L8 o!CKRŎ=z 'j.g\痕QQQA6mо=;uCTTTPWWY|9rj( ہ.mނ?{o/Y2g$3!e!! !aMb D4(Ap WqxCѫ\P@2\d!H$EĈE5 $33gzg3$gfTj|tu *F*;}sߙ 2}|]{"6 _5S>u':mǾJ0od'`?OE4({i PߘW1*w`w4I,r})ڇiG4УR֍7aP[R 5P F,I#d(gR;%$K-_/g?|Ӣ:ySN`F#[%\gug9~сP|MUF!'|kMY6ofǎڵ۷S{eΝ9ֹΫr7p˵-E%:S^sS^n>̫s_io''ɟ8C Iݍ-P<]㐯ZG p.#qOfTڌ¥8O'4F9[^3M=TRO"BP}ာ(Ȋa:CtT5"#!r.~N}4j{+m۶ԧ>O}S|}Jc*rکSN@e={K/| 98syӟ>u뮻??SN / /K};b8;x^LŌ!ԛgsfgfؼ;۽5uVzE@].ED@~ ~`E8=V@lk:(!TS1;D(8<.. >]!4`?1ߓfӪ.,Էo9,4?Qg~/~|8rʗи+{C>6x$靈ŕ)u֑Q _LП}lìw@FU`!'V tQ e0Ȩ¨ 1{}u}JdR;2@蒒Z²N믟g˖-AWA>`wC'}Mo k@hSI}| [P o^)w#qUanFvܹ.tt-ܧwg/|s=7޽}Ct:yN?}d85soG[4o3BtxPW) s}cvs'aECBba; eJ]$Ihs sV ˒ EO+yrtV2aT) 6C87߆T*=rPJ6|.^Տȏ /ks9gOa;uO87~| qw1w;9xv}駟W\+^ ~'kM殉dM).o0(_Lap`u af`vvΝ{p0.KL]4-EoQ y#[`V շ/v'>*c W/OQ^P4qE߀q {Jr=*n1O|mN Z.F}f(p=WuL}. -,9}%k26Z@!Q(<ЙfF 3Yff瘙gfn%--W(]BY|Xh1TFTd2GAň:@26`"4ZeYΫ?O3?3z꩜{|SxFRH/jN:uz#ѧϫ^*zqWpf, %V ԡOyO Vu ,/?Yv6ofؾ{h8 scwXasd* }m|TByC88(v&::鷝9L.o-17}1 B|%C>h3t=&/|(4=O @>(^ PՆJ>'dEWP99Abu0diyٷ~z3K% j0a ~$ Ab$c૊X_{ATobg}ꊋ4T6U,(~oy6-pͯ>-[p֫?ѧ|@MKi|DRwԩSNR|#9:~ SniJ 5m!ʲdyi}wڳo`_03æy6o͛w睬./ۜF\͍7FX(@eXEĹ*bO1"xm =;H7L$.ZaX>|qo9Iwyc#]'_I,ܸgU(#[e\L 2꓾QmjCalȾ(rO zh3l[b}swGovy Wa8BJ[w*ԡV#M,Y%ym+Y*]olӨTе (9 sزy3 lٲ;sQG {?۞p0iQOzғЇ>UW]ѧ0P:uԩ+_ 83x+^S)὏<)>*|ŦV8Wέ=TMN@ ´G 7? طo{.۶mMv<37;˦yYe8PP~X'v\cp}cn~Bƍho}#޹ Gc:qރi~YjS{{ɣ mihʲi}ӵO)\8'`wL{wK ʹ 3i W5ym(j' Q s2f^2m?ž=oKv⎽d+!CUBUۻa(0%"^< F"7z3Y7m6mƶm62gQGîc`nl?W_ >z{6:검/>שSN:u:dկ~/}K//x3OOG>r>㊓5jXq F*ųc. S5;4I{[` IDAT_&H&rey;3;mn yQufff=,X :Ϊ 9B-{Թ7_aM'{<<4߅ԱxOY׆yq}:6گ-w!^yֽ~q]|s^gTeMVm)p?۝XeKlھ;[n۾wo; !ЕAׂrL8R̈)/{/L5jlڂQdE)M)~ضu;۶n㨣b]pc wk77N:83җ_W: h!;9:uԩaSN9%/.+x3AͳdC \دj;kjk޸5ٻg{nv< 2<~ q^z>[|?[n︃;geel8$sMEf 䪢'#47)F#E5{K5h[$V~GuN1ӟanv ٺe+۶m㨝;ٹk8888h`!CK`̡~yK_Ӟ4.b^Ws'J)w׿mot(+ ѧҩSN:u;zWu;Ө!֡/=\LYQ;8?\W $s\z`bh~XL kbb'qچW???OWwYF/)z=zEA5a⧒\۴o'TRKJR8b|"$FoBA[./y>PIK{@݄{טo;S ֲq~J8~0.7_b] oMxzŷڨذ88- 2,yIVdWR+flf~m7{=w Oɖ-[۾ebXڐ!CyVeSJ ů~kǟAuh(-S)\P !d쳌^sXشmwQGcXc%#7 !Hx#ln_zO: '0uc=-"0T DNToP QM9ɒ~oi} M@ۈUEeM12**P!?>sGBFç\zf2$s=%@-g@#4M>+=f4 lݺwsQpp0=!}eU` EXZ`_Zbii.27|[|&yC+t N:u:Bw^~gbvg擟ݻ_zmy'?IN:餱p^υ 6lGM/N?l>0ÏiB$<*Kؿ Z)zkYkMkƒkZ.TB}4*/あrHfaڻ 14 &I׆| ^TCi¾m9wpƝqoؽַ'n;n#/_`_C OCKtpk#2/mQ p gcAw31'Ć{W;gVͰiF![UBR*eX1(1(j^sorހ62f#͆Cl<ػ<{22Qd9Eѣ_up?fnmٺc۶ۢ(w%S.gii)%UIU|pd;{h赯}زümoO~29StwԩSCD߹6Dño]NWUlݺ'< ~ɮA|pBgX 򱛰2k!NHcڍc&9ƅ-F#ɳ1zm3nmttIB8}AP‚*S܃!0?Sg?B~C O!m7S\~RxؼH'~'n=qg{$!YG0 -o%D T@e||Q2ǐ3؜XW{߅^JT.Q% C֐iPZȱij05Ac{",K+J+g }}jLυBzl¶[ٲu;lbm  Vay9[dqq++e*+G/g˖-<1᳟Jv~N:x,_"ys1Z}wp%/Ꭻ+_x^ޣjbK`!=wbcB0~qZ'|ةoդv-5s,)LԕQ_F1\||RiwyRwGt>I'_2#XȷܠlËm 𮽢vC Y+C~w4k~ Ƿ۩>D7iJIpjHq5aOr#GO\ |f 0R;R6P buvDJDN  ²,>c,..p8*GoF!6D T+PWWhq:}/07M l޼-7`s^zu1PUP`0X^b?gyyhDY&`_WT~\W\[wnz ^~>c>N(uԩS[bT꯯ć+JߡU<]2[}2˞={s^Nn/34F2Bʑ#`{T`AXWrw+ Nպqި5<;/G#ʢ`yi k,.KTݴ7oZyӺ K3F+0w'_熚u{n+[} ٟ2o´GPqN|,P2nI~4UO~z8N8нdo7y>b6|?C?ЍJc^ 0* Q}it^, BUVWWXY^fei?K./12lQɺu'w[Z ރ} /._)R\=eO"93?M4,_V FVWaueX]]e41*Gv<9ꊺꚺM==uO}>\uUa7|`߀|rm1d@j#>QKܙc]W6Me8`8Xe0XaJ9RCrDU|SY^r/$zwmEȶWL箘-2;7ssқ;؞?½Y] ++ CS%6ʒr`o5NWPy?A粰n)uuߩSNG|U. }8's.w-<⁏X-!=9YufT+c[Ew=J{k{;"QPP?s.MCxk+ }3!2@:"um]|9 wCy>?Ik V =*WSdшv*Ylv>5'14CI\|& aͶFi֜w@uo{'M'@0&m}eoaZ?!mp9BYZ]2m{n19"SSW>B}]TՈau]"u>}t*{6J*{~^Lff?ӣ\2.adg hՕV%eUoW Իqޅik]tEVSN:V1). rr}> ~q?ɏݿN꛿qqrzXrֹ׭޲o^Ӛ3cxLՆ{R)vJ/~Y2G&9}~߮U/z` ^MMnhD*p}<'N> ԋƨ͞ ө#O :8qş33Ǩi9ma& nkO[<"[o9-'_Fk B&wm- EY]ԉv^ "KWn ïSTb=4gBW2 v{+ ~z>^AVLv%Cm*tYC UU1  6`zWL/},W)׶f{~x.o8 :'K_ҍ>N|.SN`jd ;c)c?+x%_67- Osm1$[Om\ ASz5k|-JCY\oUoeVm cWZeIe(0ͻ5.6p'o=zu1F5%u >ɏ0_k5OVh>^{B}wǚUK%.I;ɱoC34?vi2nX^\Va:{' ?زx5Dl6EeU^=w"ֽ9s b*Ʈ@oPvާއ'Ts!2(z=z~A/{9:йL!Jl8غ2ueCGphߪ_UιԋzzpEwvi|soFR{]B;uY#픪 2'[(_˜xW5/|翏rJ J&kIКkjcx,g;U;eɯ=:4b/nʆ7#V @݃P2JOO.~_'x~П[O~кvqqx% .Ly0F%C UUse*仦; `{e)շ ޸|;TaֲԵ\HNJL n: Sڹ.4_p=;z "#˵ ˷}%56@]הh`vu]O"{o_=Noi~՚kg ?5['4(Mu@fBy vx׮1Ív!_e^'.~p0[/dZ}HC~k>߈N~t6Lqw74${B$n.oDN?m|Ʋi%{͟WʅN~~8`jK։ o@jh7a[%eA!!+H 7ڻ4{odYF^>{E/`-Yb]t%jv S <P5P߆{?u$| 7p\r ?S?l)u~N:2F0SB( Cl]Ph;y3ld菌= z{wHkhqiI`^mk=d'e1|"j$5@ Up -R*s۹ZBh<>DsL|KEYd=V4{ЈpcENIސG荹u\ ;&з6[Øl?ٵ[>V`/a~F1W~q8qW_8;\AAlCR x!Z7fN{?6w!6Bv{ ; +-;ϋ )Daޔ P׆ETN{ڴ<ػT?r?q.bgַ;nOz˽])N:u:e 3q0Ym+0T}^\& E=~|/eWW1۬/qo:OV}n.J5(UuwHtZ! n;BCPR?GRoDg3'_~fAM=d^{o3,Wk5$K˚뒡rC-ӷY{ݾU<?w~Wuk-o~^?^r$=tNOm[WyW2>Ee U e-a,ܸ 0d\j2a!%)I䈸Tq"!|Up )TQZ2vCgdENV8/cd=+`0ba}XCzĨ1FaXjȨҔRaTQZ|e(A¼^{A=|M" IDAT!Ic^(WU8=B_$kBG~ύ'7}[H-+ud쮴5)T_u{՚Ozmn];e؜یwsukns];{Tӑ w%kUOr./ \ܞne,#l} 14ݣCM]BF$TuMU;E\{/>35|\~~OOOyѧidt!:utK|Ɠiзh]8?d쎩ۧthh+?~'sBamd]U\yʸ]u2s]m0W\|d; 'ο);7Zv.=-r2YV@סkjo|SE®.M w)Tv~#"ͻpo~OFҫ@0,/y'&~O`_5,\~\4zII!ipk0*\bw¼oh};b\Klɕ ɸyC#n}lx~g waI=ϋmnᾪ*WɏUueS5FI> MǢzG~~[o.??SOS괎~!;uԩӑ NwFjMޫs_6iX$@`;qCq=~)p֜|R(l>C|>/%KdHs8iy)ǯF;7v ꟡wbܣR4N~}^_޻eIx+}GB564gtFa>\~ǻ%7f`: -)$#/}cr [ކ)x :tqW֕uX?}sBO9`.߄#Uoy[8묳8묳kGm)uL9:utK ol~.gnN~OϘKA['.L78quoO!_'kSv}&akum핲 $Xz ʃ~R\/=JFAV{ }!dGN{Y}=c%IDVI?gk@>7ɝ7 ֽ. }q"~{wcIY*E& x*RDw, y'_reC]ؼxïS>ں5k?w@}TcH|83m)uZiGSN:2HWSn(K޿WG^$)}a߾}.k 9nƔ W4r=t=u"r^ /WoF4F27|̮K 鼱v]4p=~;_}mFEd{aM Q5 FPd[dL(j _mpN([QbnHBK]R3YɊ,TͷE,ۂ| nR_SSKEejʺ4nG҆E08dH-ƶ Jao} kx_ѧn+v59:ut$+k=/ـxzOZ6i,6ұ&I>Jvm$ Z:Z)|g9b 0/5xd>E3$~B/Yf]|B{i=ەYMHҜk  5}*U/'bUX!T_ ޽7OK2Ŗi1;K*ʁR\_>Pd5ۣDТ~3mEW?nMi}roνVξ N cEr#Hy(Mo:6Qذ[}P9x^\(x󵫜˽׮r~s:޺T&:_Km|eFh- 뵝{'G1CD:<ۿ<_'>ѧw:utiTu rFZkfrN_!oxZ<]d}?k >GBJ#y·0xdýGgY Na~,?HܷACo4H)⻆̃SzIЊbdDݸ-8T/'i~Ƚ BH!qvW/ߚ,0Z5.{7.;kfO]s;uՎ;7pO#;1xÍܹs]iu٧iPߞ>>q xV8/˸9Z)?'@̇P}MH˹)s|/VW8&:";jEFEWP&&o".>CF v鶉r6ħn*I3p/6ajwbwo %>܂-bBEy$}K}޾rs׍'~Ҁ`RO`}ƝLԢÕ*3ݹ74:ko+Q[1>o}f+`WRSIi{Sp? `J*g|բ/Ε7"np|8oABh~؃}8½_frHgy碵^4NK>1:uԩS\w^cgJ #&ocZcitف-q眤5,KOMx iwyÐv 4dHk yTZŽ^`=v SP!q,s}{|zݪ*߷_Y_D!;WA j;-bܱ~[{c?Zf̄6s7{ $fU@dec%%nлUw@[1Zu8Aޝ$&!i~P:}{/9m~l/5˻`_PO`?8B|{<W2XU}o:` N?t焴~}Z:ԩSN:5lei? ?X< ?69Mk9rI}ۑo mood]\3u*"|S|8kw-is ɐΛtS㦍A{W)!55xƇv~}Wp i.]M2O\)n5TƔП˻y*p\"r[ y*ֹO.\wRy o.|Q?b|$['vEj8apHmH`[/R0O 8Pt5\|O'ݛtEڣ%e-[B~gŮ]0`b+.Nn#'+G1'ۅK3|Ǻh'K* پ)lo{T}3~mkC;DLsV*Xh%0 ڦsL8s=ԧg< !1W={m<{{} E+Ar(j@iLD?2,+;-6*7oI_CZ_Wy{5\ _B7snut~N:ui e?5 c/{6H,33wu(C{=>i=ıM ׇf/w@Opm*d2W*l!3BQ)8,><ݯYigI; itp/ V K7Jޒ`qn6z4qJlGu +v ωwS`OH ?jGtp[K &:w b_'/>6p/TCm@i8J,Ͻg}~Tq`^@%Pz_$q}!> EEރ~ `٣1vNicO}o/~1^z)~ypٳgϽx[9SN:nػw/߹u9yة[uwo|N8'@=˃ܧ:V=++<<7 :~읆>Y/ɲ_xtQ՜E \|,lٷmYU!T?& x2c- DνdEa ڒ Tx^v] yZlX-?6XwQ)sR\w؞W3D|;DdpWA~X.~h~v*w "g6V]xֵ/3}~߅dYkBolXQֹ7P% qp/c/=>o&:*f\}ռoeyy.w<< ;N:u:Bu?Js.\7N=u]i}t7s\s5Mo╯|=>k>Skw7\_M6 8%,Gggjumy ۥqu)O[)| &rѮyp/¶&=8߭]!O n^|_ޔ ,pE$'JsoQνҙ׷p?3C13Cߣ(zy;"`e{Z_[`o4wp} >TqKô~ZgH7@7Ї>ĕW^ɉ'rrouwԩS#I{/x_擟= 7oE\z饼]_I?:Ka!$ &zV˼n;P)E9W.-3޴)Np$ތi~pmOA'9x5"@"]~;#6ȊWES h/Um%'~zncRc+&C& qזoН?PwCc cE7JYk݅xZY܇l]aAZBS+'x7Z7Dpw )7ueȽwQY} ^?Ko~fף(r̝-UJĹچ.7QFcĸq|>?8SOC^i47w]2et^yO\qTx>?N.ڹa'I?i{R4K IDATxK^YjOg醶EAF"1hh⽉TL?EMLj8$(N`MC3@UkXCOȥgQk׮Zg}]~CEviK>T?/@}zeǘɼ/Nq- Յ"=@ߏO9ڐ}9- 18}ׁ/(YSiPҸ!ZlPs>tï^Swh9!?˹w eW\}ZzAA^VRM=@;hH4ib]}*[O|U`/|S\Ouzݕ su:|._G>JWo ICn}N[j >p!uEAwt#/|Z}q'X׾C:n!?7 s5h\pa _dxIpU0$_wU_ggC"SsnD?TMA=oߠGzIA^VzJ) :դ:1R3%^:r>{/|>Ax҄stv}FrνaȻ fm_JC >&ć{,}~^l¦M'nwE/z-+*UTCUnawbÆ u.V\ 4Ml6f||WU4 6l]q!s9|;K.zH/6,{zmYhH[cڽ.\g|Gxsp&+Ћdq{"^n[B+/G68hx{~&] w]2ە 'WZkmFM(V֌Su5 ɲRfAwLdTv<\{ڡ{@_K-X'?2[ږjI$)~}u-eDsn")媫0?n&<9s1|s7ɟɟp_IKJ*U:;I^򒗰l2?)%7|36lRl6.crr;gJXy|o~n!?`B^v½!X2хEmNuv׏^9p,zg-08@cla7PE  Qz9]HYb,T[x ruYKz9EV®a 0=>߲} I,Vi5sMg6"W>COX973#X #kn86p_77p1Gi2L*4q´ oαLJ7߶':XzgP׉6`Kȷ<ۻ>eJDs 7{?q_VE/zsy衇g>_ڵk{%W.?2DTRciʌ>u+Ja* jni=\&&&'> I`Ŋj5ܺZI'͛ȹ#sBz݆&OfEкBKFq*Uyϣ,W{.NYq?ǹ@V8.bk!Ď lhYV 0/u4vm+B>4y@VwJ.B`y_\clp[s OZ4B֘}m,`τ}X P|WN؄ ܜ#:k]*[7Hjj͸fFFa:L?MT̰XTg}wRßR?r}TU=!fM}}ݺu|K_ oxoy[?#<–-[?qǹ+iơ+W.T~RJRJqغ~OSnV:<|R򗿜jl?SU^N|(,C.,^Rx_X1м'?A@{˱ugm[^`_ps0h\wn4-[2,MZԈUTFhv MsھoYWh8:/Y!^WS{o:*PK;gER)=K>Raal^{+0Z0`fb*WMF_́AFǗdF(C  ۟ %DNY&kiJn{l3or텇lZw}6 Z{!Y}k/娣⬳~6ozӛwA.U)?pƔ*U(ԧi֚J!⋹իQJg>17*u(C.MxrR $/_'ȉCW|-9 2I5Zl[ C_:SmLRmcB0+:%VZQiC텍A[w+fHINuW2 '.Z (vE<[ʿ|A$!2""b ZzKt2>F&P_r.M}GC;Q:VJRډ\>sOV9_}~q׾X@C^ͷ>gyַBkkl޼uQ'~RJRʄ4Z͛7tPX^}{_~9o}[KI;v`ڵ89/2?柳0d}D HR4?ct"+D jF_#c,YeVX 5Z8O 턅vJm`(BS|w96tQw@.@ԣݶ<^qmE^ tv ] CGG>d/ܓ[{7L'Qdsc**}~FF_e+V# qq!/ E@}ˀ|;aIhuRZO{{A))}C{.@}g[`a<~k3{~F#{4'9 CoJ,*RJ:SN=x#_8c/)|cZr)'㈮KZ\oN{Gh1Ra=uaGsA_v םq*onZ6ƛ֮1v\2\:*P;H~nvӟB1-̰Q d C]"bW[: 8({g @V@>dGj>pm<.Zgҝ\wRd0AsW- OD87^d Wt?:Tj4 0>eW#Xqja3,0;bn\B+aա6NIjUW~,{Dg0>t{AͰGqCfU,;.?EoퟋOaRD%*Ua,~8\|1s\\ve4 e/a\lٲ߸ReROTn!h^P|GoǜIjrα҂}꓎M?fyELa:EMBAؗ0܇!?b0틄R#џ̰< 1U$b{.l+sW->\OwQq&oU_g`]u>b?˟۝|.tva1L}/vʽg ɉ|m"%:Bxw.M5I;0iVc:Bkb]UWBp_k?0K,cy&+U@4@Y1,3s-07fajtsha T.,_rs)}R{=bd=nN_@}|+!HH9] R J*u+pٿ½wz!~~+VPV}uݻwsuױeN9d>Wr(ROF!_Ŧ ˑ &<؂}ӗy2t/S6\1!3ގb$.~2tm}h~mqK҈ѬͲD?.J?BH'$"L0$5rCvo]~Dv^@> Gm,6M^8_Pm1' Lr"tϳy!I >C[ La(6 U4MI;T5 <'HW*j5>  1aet= 0n5)&gcvB;Ɋ%½ͽY,4 Yn_̵/B}Ln#w3 {fYgDZgReӟtY1UYETRciN7p˷ſp5088Ȋ+R}v&''ꕯcgeROR9ȇn b.~%zaDƶE7"'Ç~|?|p;1n"UHIxhmS ܷu{"?~]\R*43<>Fvtd% fΓwS7;p}~ K]n]k s~p۝Ȼx^0O( +~;a_.MWcs[ρy^$VA)(EǦE#kTK59h#Ldf[βyu Cq ?pt`op|H(Kzu!1*DIJ%9^yY%7Vc Y}cWr Ɋ a?̽Md.v_>\p o@YvZG.#Vl24<0>N={g@[OYǷ2 c:F U_fK.vwvg$fcv~6 )ױ~y^Ӭ^V`O#| @??1λav>voz:\+.>^o@aUV.d璕J*Ua#ЪFE/>bKzZSH(o,{ W"d%"%Q$BzS=_(c܃|__/Kgp }}?>dCW~8iӟ{hHzE64߹\˗fl}Ծ}fV\w0h[os̀f2MS3I}h3,L3ǾigcaEݡ$$(YX/;ޅb8~=}w;&+:U/ށXynM>?{܀+EZ_144ڵk]k4Z& SiJG);S7ߌϾi4;w#RXhcfn9f昝gnnZNB'IIo A̽w=.wlbC{-ǒSdYrN62?:%zA~7'?kJzuycKK*U:YDh=9)M?%+i۶m ?ߜޞN>yw^&oۂzW$Q%".qBB D TЗL7[YZ>tpsN\M qBGŠ"VDa&Yru IDATcxq'l.Goyd:@g蓃|{\377;]8sk=AVPo>G?^=~=N!;ލ,:~݁w|]$]YXXυKI$%JzF^V72|&Y&IjnIme}W uv.0}wS7jDQF$v]VmNH"I ϚsMQ+C `{v(HQ/=\>}~mz?^~{RO~ XrpOB׋TRJr:t|c=O1g=)9^O+W<]xJtUC'Xw0:v?aq ˗jZpfh.9+Fp +қO/}&r.~P}C.l^DkTP;4gT:wuZir.K;7=>H#pnuU=03@Bh~W~{=9v?A\kPS;aum 8Vh4hal c;w235EݦRHxC'T+UB#4&IRn=?mV@uIkxƯIG q0/upkb^4&/UTZ'|BROHWݜy)!7ay7az%6KiBRhHD*a+,oOqQ}2Rp/ȅ4ĕ#*3r=QdK!m 審oмTڄ/>a׻\E_{] }D$Y{#_Uv zh9%$='!$jv:fVfźuqڵ9SQ}6W8iCna{NEȂ}Ȍ BwW՟gqۧ627a+vәsϣ >c XDz~!?-!"߹7w羷^ȝ:|׼5z藣MJ*UTV !>{||3ͯD՘Wb@-RID*M(N񪤏Ood@`M$+WtH,l‚H# jaz;INiDwy@sn<{w0!| tK:y?웰\m>t)"xl`+ t_3Dwko(LP{{J N˳+Yj?&'i-,&I $s0l e @Dna߬G8Ncn'>ٻAS{xGnm,9e KXǚ@=_O-E7硞`K䛇CX/~oO}S+~F-_TRJ*u`u;JC9G9oDXՈSUT*6NӅB~k$?Y'gx1 99R4 rp$EVH",Td_4dmV()3w &Fo/Y.tExB!?Z{̥^^]/h}հ`pt1w \!MMKHSt`~h06:(;wdvvӡnf54٭OaZhE [Wn@ki#58 fg>`I&۶̵Yu䗩 Pj<4XnڻSdKmiX!}so梋.8W>]*eB'bRJ:Hu9(UiU7u "_[s! zjJ^5_}辴"hkmP[SsD>6YXE׾bѐ}@JKD~DB6̲,I2#+*;VQ9,fTMsIp0uR;-Z Yi eaY\Kmd99` #zҹhֵ]j}oB^O׷Z`fA)٤^Qcܶ,O m6*&mc S-c$$t"QfZ$D.=Qo\%~F!8׾5/ek jIJDb[6[n?~lMzxtd0vY?CCG9_u~(z;n/UTCBgqƁBROßW1k3Ss n{aZJV#c(e>!%J%2~=R@ X=Y\-ޏx- ]H|&@!;cRjGGxd˺;|1?|6 K[Ά5 w QZZ?8]6Q= Ggcs ?/{gչaep~r8BG5ZkT:_X`nv}|V !%F>qL"%/$su%L2pKkcYvl|?xFN<ˆjEμXyP{O$? 6HCTCkCKTRjMMN.*Oogatœ|M,?%Z֨Q{TL"d|VwufpVG\yr4Ϗ'$Pb_\_+giZZFP]#,G 0UVЗ.wdq?,> ;XY)\HZss-Km >+ܨ BGi"zEşۻd :7)"(ns昞b$㓓+G% qQVUT*Qd<~ªlѷiheX}Me~ SM#Ln`ɳVլ9xXu/Q[:!+h]\}Z;Hwp"`+rϵ 8urwpswf͚ݥRQOw_TR|ߓr=LLLΝOI?.[(ǟpSrRO| _y A3}|?AQ<z7IB/.p_Vȹ{%"Edz!3אjW/n'??_`= \e/CJgCnl 4 {>!B{`~ȧ?i?x or'pWz2h*U!'?11K.y)Jg>ǗczrEʋ| z`~\g&>k1zjFQWѬSQJ! k޽^I~*vO"' ҝoZpP,pXJsPgxz?}|GkB.~l.,_|{iN?\csɅж.s%Z||2;ή].Cw,=>1d@Ν7܋֞cBv:şejj{i6D,,n")8HDY_>FCfO'={ h4 IIh'-3^[<ZGڇakc?W'lIgp)1E _Z~^wl_m‡g"/aJ1p$a!_.~^gZvӿҺn*; Z+WZ"BZ(󀯱Sex/׾8%^Hݽ _Lիa޹nq= 3Rx_],33=$f4E)eH!/%RJ{ޟWnllCmXo{y8ᜣ ҡB )z[7m{@:=Ch®˷p8*7ʄƨr/`!BK3 /?c>tE.zU:J*uVw!m}{|_gff)%f;3[nqSuRO~<q=JJ33LGIEH)IĺxȗR ALý+r @BB* JzSC+UT_@=*Zk~M6Q׹ Yt)F)%Vm۶qM7q 7yf~կC} 6o]wE<,??sKua\Ƃ(ĕSUm:fA!́@%T+z]VA/b{3mh,~I1zg,$8` wP|M/Bh"SkL JY7زA`{k %Ә!fxoػ{[d5B99>Rw[4>X: }v߅ ?Znh ]/;03=mj$|ԇi.=/ "6cG~A:=q}[>L_D^<|;7bޭ /b=O.E V/Z GvQHD+ {~ftK*UГƍYn>K,f !PJtR֭[E6nȑGYgqp\֦M[я~_^ݭg_/y_5u Qa4ĕXBETU":AWyyȴ Ѷ_=>ft0o$ܘc@~/"̜dPo/ 0Kr`cF("ةYG`e;s{ \,_I?|{rDdoRJ;e0)θ1@hp&]x^n- k-'c;S4d)n5aΏ |uȞ wVyfgi4%iis'Z-~) R!Au0Bs$:&o]7Â^ :z л>s{F.ϹҜ=Xylzו(i@߲+L޶mi!?GJ*U]O>D_)={a:\p˗/hpM7>4 jzիЇ>Ć 83=D "k#N+뮻>[OߧGmaJRGoJ",p_kBw!'7G @yCL P6iHvOm.+Ɩk&Ra]ci EUVتtJ?]q 醹:'읥_u{W4o1ݿHdp@/N}{ކ2W֤iJl{rhnu '1gF [Q>D tV|e;T UH<~{{=`#(>]K7X`di\{k0v隷h ,>lsP]igtK*UГ eSN&''yk_˲e޸.7p*}w< aAHIѦ͒Fڪm0)!(i\MҦ ٴ!=yȗڮ6m%4ĭ6ɚaamwA\C]u0M7U|]B@c^Spwd!:":&':C}>ﮊbD".}xD|_#{ۖ_s;}pWDHKhRЩ_m^yT~RJz!ZiK}pV* T**RJ&''ٹs'{xh4XZƃ[YN>dos7>/?I*NGr؆揍Bup>"+ReCԹ#G:n֭W4CpQr<|{_5Us3r ЄKthԂ||<OBZJ=wU\`DeEaCUk]]muϜcIP W}5Occ9YP΍w{/6 IDAT`4{m#њ ׮'K291$333!DVVVOn2dѱTtT3dHW"pVwSϪDn*[ w9/=t?mY^;| t/ߌw^ӀNL3IjA[<:02_V+UTZO6D_):~`VRm;wd׮]LLL/}7r)TUx`gJr~k_կ~5\{WN|'PUk5jЀ)WƁ:ƖN cT{ )A؝rlq'#eIʞ.Ϸ xeМA~sݔ_hWq2PqN~Z5Zkm"Sir`0o{!٧Bbrl6wAVuGyMD`Teg훿}X)߻zŜ^'Ç&VhW75_(^R1澇Ϳ,u6Z)~45ӌW\jמ~:'\I$I%&u=K~]iw=SƵGa { Z,5J5&&j6\s[&R*U!ɉ'N5J`1Svm~<Κ[[Ja?8/uPE>8g)HE'erUG%[n֖ʤT!SJ6mU6D_EJLZV3FjծWc[gDpaP_rtn]`&Ҡ)ms :GخB-2ذDq)a0!mLs15Pt:|vvMNa>Xv-?.Z5vAEf&b6H `@C`Y "Eꂋo_J&H$f\( :5ySN} Mzl+~.N+G-Na{*4ZScjlpXA2TTRz18<3N)۪Uػw/NLWTcddK.O~~ȕRرUVUիٰa\z;T/[fJ  @C. yh--I$ꔮ0}zO2X \}"w[Hoɸ /&ŷP٠@Є|aQ|-\fi.D?PL_M֡|Fځs- R@Jm7CRBT jU*k}1 edLE~ 6d k`on>ȶ Uk|%]dQ ҚӔo?J~RMR1Z)tt:$|7maBO}i_P$Eh7:bHs=kR"^/Š>W? C5w^c@JMQ0]%NrM_TRt}wWq7ndǎXQ144o{8gR޽I֬^SR>O|@w+  O$iXh-N:&4b|a]|lls:X/.]Qe/W~EV>Aoχ6۩d&}6_D EM>~{J|-]?|rfpD@|h!jL&lwt:Ҥ,h3HŵE-RZVWǮVˤpSjN{ Q' Gǯ{/b!Ǯy { {p$l%`;0Hr^3E GQű($|׊.O4,uA,!E6\d`2aiȊiSx,U ,پC][4?ӧ^"`=Ejq?}JNAS$\WY/ݘRJ:9z _F/p1PבRrE׾A4McjO9Ǎ:x׼@wPE]I_. `jf9Z:I4MP6\4?{Ww'80#nEqWS~%1!%jQTnnρ󃇐<7X`f k󼋯3'W`g(J u𕭪sJ8lJ)⸃{ƥYW?Ku8:(CPYBFR,,[XH/{^/w)ٛO͝Mj^^UYaG ?ιMGw >uFyƅ^zzF;{4YKγ '"GJ*.l#:L`C_lojE?w/A|4"F S%~~/UTX~iY2>%_Ν;ٷoolt:r׳e.bU!㯀av;p?t޳ gnI|,TmG>`ʈ~M8|>ab:p4$%Nɭ<`Ą92.Oȧ&+ӡ,I\~f0M{Z2E?`\|R FFF__fFZg9˽77f@A 7YbDq/3qߑA_2.3n (60"a dk:YTuM >:}<ϩP*EJR\|¾H 90iƇJ)MH(C֥oEn摦Wo+nl(v#=CʂT$3#H!,'v7.C׵=ܓ 4*OUrx`H@Nɛi;' OTu!- Pޮkl 5u)&eS}| j(wlw x}0qOo6J;e$_d!wK \AB۸U*Tv,W:GN?n+ŋ̙3Rb ֯_OWW'=`ApcG-Tٟ|fSשըF18qb}=[I?䇐:Iv ?B΁/#1]Ǽ {! '7[]9DQEI%Ti0~D}bz}k7k֌CMxsc]UC?i3m}W_HYEԊeF_FEPqLuM~B7lZOMĉ]TP.c5e*~8]"(`/|P4Z?KR U`%UHm 8Bf0<ܷ w;X=,\( s+j_X߯Ӑm=yct9[ aeN^SeZŐ]| H |aDk?|{wCǾ]Z; r$R'_d]|wxw(_~Y^}}"L{af=Gm_*Tv)Ӧ' ɡI)Ӧn4[ ]^{-G}~Yl^z)]t;goZ^·35pmp>?ip{^}/|tks-i! ܵu:1[79\ A_b}}JQVMRD2)0p, 9׀roߠl Ň  K &'z?I?8$(r0ֲ!$~`-SXkp7)*Z*TA}2pzDb-ܽ^7N9dh8ʵ8Efg&Dߍ1m^;paC%,qg k\1z5+g`; zH-L&؛[r]vpUF3HԆSst:JC ͏)&Kv*TPBlM2ٛHnzӦM,+T(C=)?QGUW]QG駟I'ͥkڢ |a I `BNXP/s[@Cv:ҵ `몼Ó8zmO ZzOp8U ɏU"$RF@YK$1No Hl6u1 h*5PEC{{J^vl}֮^R 3!J&Ako W3!, iC5+Vß#p.pp>Ԯ lÚoK*aeǒ|B"ȅ_PB۩w>֬^Y9uTNƼ,+T+/{O36syߎU!N]x o߇{^mQ=囹0-Bc[dtMXx -'/} /Mc09eՠQ$`o l='эwdIbDZٔcj5jcc5PZ>RBa? I&h {iӵ\X=H} B+_<接(xL8$-&[5?z7Kss>ýVk¼w݈v 촍D6 E)¸u3  Ђ&(8݀ kF:0fC sHZtd\K_ 9x`a o#+a̫]i87\WÅ8M$ -&zbY蕫lxPB 2OB^i۹ X~= .cv,i ?]6 ,l>_D/)t1s[²DD0c4~.]ixzUyPۧ[A_gS'p!g EI$k~&\_h dacFZmaFF%{)߄a`attZF>fzNkNAR1Su4wyCCkbadx^:75޸\x@ssL6S[BjE8]!AD Xlf[W@CЫٍ'XFE7R)%!suB ?y@hv}D/.wSܛIYz.+p]|BwR*TPB)=d~Gzjȉlt9eKbSW.ݹZd2;S oy}?sǛut<#QM^N> )-I%2?~޿8'r J2}.)" 088  'Bql81.34]]T*jZVk=` 3uTS"AĆkڄg[ hv `Zv DŸg` ߐz(boBH n`*| l?@"?cDz=jG!(4`4HLCk 3I kE|tLGPƸ]|50w@&>yЉ[T/׌BJHG֮眯;cٛL~kB *TPM?8wYr%gf|#{҆/^)ԁuʻE "l 8R<#wauC!4B$"`69- Ռ BB)Ilp( ~}^&MĴiә1wwC1@WWjJշ3m̎B5֬ΚGx!ּ3o2~)Ǻ=6/ŽfWvx-l6 |P{)`7q]SS=DD؅F(ɹ}X~>)KKvk>v!>יcixft?lO/AVATYڢ CobN;mcrU PB *UCqsEqmqI'1{lw_~l6}s$]:Ds,䭥 IDATH y7t;-Z2aJ?+YjW?Ǿoߵ;3mp6\_gA!"I)BWknT ``8DBz*==M>2qEz;t8V=3\ȤI'T/J%(¾F)ePBH$ <3Qf'`DfiRIհ}!wnp[vpbzw%tV7t \|{7wLII :t1&c>b.i{@oc.yֽ|S:HFO G|/K7)Ҧ^RR Ŝo0PB *Thu]wq7rzj8 կ3k,>OpBmгoH8 P =5z?G}\;*iH-4d_ӌ*BE]!5)2V M-gKױ/)JT*eϥT1LdZ,:4 $&IJ%y_jw"J[7EU1Xڵ<˼NHpn3>rxHYuD[Ϗ\D$4e&M\,4tFJ)(Y5#`> {G|I/~;ɇJ_H#Pל ?*@M$D$@Ew7.c}i^2U*TPBP=s[ 3<_~o|wܑ|3\vetAmsyq9ps饗̭o46(ps0#Hen |x?}\iB}cGv.>.anILH RkTIg GjxF½N̛8KnJ;fX3?6k1C0ccc4 &#֭==bGs<{ 9LfA3i=in 4q]aM"{wdvol-@5 ^KRnt: O{<,~7 A? nP $cݪ ~bʔzT%*upйw'o?|Nνo$U=?]X: ȷch{eD("K%*&%O);w.]v&UZE?+TPBx-}p)֭c /laL^,+iV"x .]OS.7rgprQGm1>l&O-(9VCte99)$4_A;)20?>޿ᮟ}Nڛ) 󐟶ێ^Xsw@*z.\ O>KfIVcpp+g2c &NEJcլ\5k288H h6#KiXU3ǼKThRM A#Vj Rwn- }ćQ~Myw],}hb)Vgy#x^Ȕ]gl+Lb#JDDHZy3a i~Ϲ-a> rHνf!Fz/mwHPeI\-gW_zn7n ̲%_PB۩>zn.ey6q ur=nw]||_~?[:w+6Y7 8Oaik ]˾D@ݢ~;lrAGt 8Zk:I2P;댌 vyf===DQD7144CCfz1^PW$y; L/QAB}{ QRl3(ƹG#e^]!['~pee;._|sHv@Gϑ{{!ߜˤ8HJ+]1ub2(Q423xKB~4T?pdi"83~vŁ}P}g31{8qK|8>~!6U~+yӛM7Ă 6^~PB n:NU[ZmKs7|3\pO=rg}6se]v,8S87˱6EgN@$?pHkOBs׏PV13f}mc9ok>/l:B ([NB`rN(PoubzP'O,+IQgddkQVT*J'l'4 W2:CC0:zO,B~֬wt*44|tA^y֍U1iz7śMWmpCAixp}Ͻ?3u4}O8R Ϟ\O{_ykj zsRө)1QH⇃F{p}:M7TyG与}0Vp@љ|/S008mFe S4cofwl- ~B mZ h׭[ҥb ˽N;1sLۋɓ'w>'+Oo['?I~op5XZ||;M nmpJ]48nn4I eB)h}( f/7b3&"$L.wDB=3WgOܠm2;H;[;c? L{¿o:YvC6v99! |I7A$F TөUv j&ְUz|N::t qνȂ~._O9ʽ#Bk=fe\bk +'-!cMI2VXhщdZ ~49OF`61QP2J"AR8o%DW$+@€:Q[^Xohƕ0.wjh;mX)  ;:``ICUG0)`JS)5bCnAMnN_Bkc;^N͌û~Ol{ԌH%e@q5E驧bٲe?!{gy&o8#6^>_PB۱[{}Yp!ӧOZEBR̘1wߝ+{]wݕ>S?r ^x!˖-0u]v9-J8 , j;G 8fazE|=g^{<׳;oA_sZSwlkBf-lZRDסג<0[ڍNDٜXHL62Elܷ^+F!B/Z [ ps[*g#,ظi ι" 'rnwz̘D0@hO+0}e#D$4e&t0N:x7i8f\0u,kHr>Mx x?g>V3}Fo: rww|B[OVnEB "Zm5kpW1Î;Hww7r[o-hZr'o}}-S">]`W?q5pç?i.̀NZ|b;k$"em{mַN sP`Oo8\?:ks>'z`܋ܔy䖋%!RH "uRHk$4VƖE};Swuw4*JG(>R)8B˺c3h4V5,kvSY9;-*n\­"ö&봴 wKhL1Bi*4GXdM2DFD$hu\vkw cadD ˟?}sKkVhp p ̙3gUh9_PB۱V( f|?rW3|LwvG};:۟˯뮻E~<#\z?`=9cP+o-bB>O(,)10Sđp Vv̓nf-|S5:Ҏ.GxdD)*4rDTf# =x}^ϤA,<?f'1J'$Z,#7a 򏅐Hl7;[{.&0iŸ knP@s!qD:>xArF(3Xźx2Ӊ؇2.~:02!Z9~-Ƕ_0*uy6DB{ҽ&h<u~LzYr dQ *J۰W|r̤I(T*.J֬Y`ϱKww73gΤZԓOmFSLkn&n*.\iYg^ۿZi@$$%2Y^}Bw٩ A#|tݕ8U?w9l-,2{B!2"rL\EwW]4⑫~O1M8{`hp!؅; *G,2tЗ6ArǔΜ5npAd[" j#;~rg@ 䛪Oo,YXoƽ BSM+Th0ǒMs5|xob{NG3\ߠ\>&D?S'O|oڠu ϶U7 1yxOƻB^2\*Tv,ʆ?L8)%J)?< p7e˖ R0uTxIB۾;<.n6|+_vl!-\Ng _Htd@PAx.~Ru7wLfκWDqGf|.;Ԉh RH"QQT(*tw]?WT >?{3R@yaJ*+vAM"q` }+21pԵ-Ƥ c:]No:5/rodkwI^ovavS@hdaFcLg>VW!,{p-OOV;A^J]{8ƄvV:hNA~xA40b_hQ *Kk!I\.#ddd~￟~}cXGy0΄&ּWcnSh}_K.`w欳3 ;VnݫC/S,91/#S̈́ Aߘ%,; | d_}BGBd-$B[Cլ4Vwē9gc=06 +z 1FGG#&;wGLԻ-)yoe#LjmI0‚B{Mny>t  :[dݟ25Sa;x'^&L_ B[?%B*PPL`1fsϺv` =kg@^W_\tpA(3h! 2~3):Ӧ#!&~/B:B ڎlj0裏l6QJh":<'OchhTVvWP-7>ù?ܢWRdDNKdyeLf͚.=30jR.W L'D&=x ;o-I춃{E@oos;9y`osC>܆?3oRݶ=ofT7T_K !5QZ%ƘW3:Y h$x^@Iøˆ~@z<ԻkMz>$ËF K#8j }e* 'Ŝƅ *]JˬYs=<̜9'x"###| I^3{]R|˨N8aK.OM*,NIW%TQ5Fj;qw%:Uor7&\l}t^+> r"|@~[{Q؈b0skq i5R*; I$r && I% =^P;jW7- Vfmh{_݆F0 >V<^nXٳg-"ep *Th;r?`˙;w.]]]H)9SV='|2IPw* ?());w.'t###z[IſW,ygQ2tss)vyς}'#> ~c_kT=7zg [ q=0wDלKUv7zzO$%5Y~" IDATG1?<8DGZÛ-n9βL!{^R>,V^O揓 3,-G=ᓟnR!`Պ%$zbdE{VvZZs|߃A<3?NIߒԛ yh)ɣfR]C$&G _)Ut^&tCPTƽ_ zfI$IJTp¦~N%]0ϺwN}+C~o}oƇS6H۱b⻷:G^j{_lOz.^i3]mp quNE$h),ԛ!5ZJ{j?!!((&= s./_4Le=jEpm2 .Ds|e ߇\dh `rf#z#5 ڐ /TPXa}nc|g̙T*_]|;gcC3(mSwy' .SE6ſU,9N2OQ5At%T:yh.~>>S粧 ]~%?C]w-ի!AHĜPsbA^"H ETѯ wWTSa׃z`h:FLLL|phn×~ogg\ k"iY8oh-s3e\Npž Pkj%me]j1%+}hMK.~Ża~ˏ _@/lW m+B'߁|.?j/G >'*1*PBci#M7̕W]ŋc̙H)Ybׯ[I6QmF]wx;[V>ݤB+K)ݿDŽyǜ󷑐S?`tHkPy7#cOJbl}]$"B ?,K2ɷ0p?l QFGQ7hM1P)\ÐjKV7EM.#0Ƿ9:{|av Yw msE [v!f0ApE"B,p7Y{UIzOi{--HV- A _Me 5Uǹij w}=d0~. F\s>޷%Xg\|'0&4U_ ^B~nYPBۥ:-X0=ܓ˗.C8蠃>})7B [WhUvCn#M*,b_K""m!?b!?g|lso *~. #n~)2i x 0֯!FG#n4JJ jq _>u Z }䷅wS]!~J(7Ž]VcxY'KBmlw1_`+0}moL468w.d%Z F`$8 gSa5C4,} 7xM)3("m1B;уn|d黑{@bf 6GW/TPYʺm4m9zaǷvzfdq衇rWpqm&_Xr8QGȷKBؠ# %dχ1g;Z/M 7X3 dtdfJ½Ntl wE`!|viovNy? J3\Cs~x Ox_H?\S.Ko E&J@jև uI]0 K%T:@eS _'"ͳm)D]}˿ڿ.{1w=H-c^.$ƒxE U[PB m2m*qM8I:w[w>TX|bɻ$+j "zڸyw> 8\q,৤ ՗9>XЬX5e1`] 02%*ԙdue:JwvLپp"_౿)\_ٛyL \?ui!=wҸܴ} rNDž!1B)'{Lh֛kUϜ:$2:R>:FVh7bT\4ϰt ;w C>hSu<zlG"1B}ߙA iMGC| t뜯?ty$!|"ߤ\i()B?W6n|0ሉy͕6|! ;k޻Ú3Sf,zEÚK^boo^͜9sk7ЋP_PB 4g~ӟcqim_LjgE{h)tMnA \?i(χc@'hDӰ >x>1G+!]qp!֌Ԩ 26Zc6FcA\o4cT ѐhj0f|Ⱦx~sn,l̶ idƆ φs.?m*ܓ i ϾVw w!|s m1ܚ-xu"\ѿŏij5 M/93)h9>L]GaqEc]-qѬ0,&GzB/MŝSPB J4k,~_Q.y;vzB[O_Foɐ|By Slρv6O}v#z5~ \V4ccM:c (Qjc&<֠QolĹ{:SM<s`)p`A]MMuK50$P/W*SQaB *T.ٳgOl1z';7Y{C0),xji Pm3}ף5Ȱwέ"h{.k7 FXXLPq0=^b> (h+m腇KIw 終}zy.~YoT=dTc=oM׾4h>`hH8_S01"\{<_~~Xdڋ"I$"¿? wi>~ d6i4+n@KX%zM(r$_PB uc9e˖mo$̀z]"q><lUT[|;8rt_\{7߽8pp+*q#9ְ.~ucuz׋w}h8)-P K<߾b~*-| a~@U*k[@n8[}sLE}Dhk .huma?l5o\{IQ*Ewc ׷mT5ɘFͱ2 nrwqǭ݄B/BAB *Tգ /}s-oy+cxNB?m?M^z3`<& _>+_h1֤Q3SX/O+tۖp@G~@]4ރsCwQV:S` \ _ڭ*>d?p3ʖW .L? 5X @+,x%yOMHRɹBć;>Q 4?נѬ"4pٶ^9rwz*TPBb} oxwunΫ^kS3L7?܂0}[tì{6 =|^1} [w?R \O/Ydx^8a=A}O}߾lE滗.u0}ex/~vN!N(C$ .^6);wKJRJ#Z5޿OH"*&QtOz5+_PB :餓Ky/~ݜWu*W&'a~\OV'Syv ԚQkk`+\|ubin54ƚ½susϐ7B* L?ؒB}['?[t @8N}ܻ :|CN׮<:FU$(kHld )w_ CZ5_KfIM |mᾂU0½/)2L_8 *TP!-ZOSN:$ݜW5 TQSMu4kׂn|Q=,,quyٿ#wjs@_{_mI#&n&ͺ>n$͘y3t:i}4xÜg`\754_e ?[/NȸfȄ7-w/ nI 1}PfIN ߍ_h/uMA0~$ty|~ṺD(F%=_~*콲T~B *T}Oc+ m1}+kL1?ąc]vU|{1g\pj" RZ  }~S7F>I3ximR lׄe-d2`Aͻۅﻜlc}xKݚ[\}O_{VJ*F%Jv0_ UA!xO_Zd!ۄg*"%@ uw;b)Bdo *TPB^ozӛ;9Sя~ʮ 'E0>zwps0w>o9A{m>^%LC [of*p[su '3 y3.~Psoi!-;rʳoç[@:IwDi_ SQ\|Hth"]~ϹqK%*2R:k5*e=|nַ}ok7g*3 ZE@?D@E,ZVEĊKiQT@Vj,UQ"XpaSY ;Zgs~YL& ɐu^3"ļuב㤀/"""QZjŲex衇x]Noؓr2jPP# Nusهo;P/ ⣺~A ءpY.wm^@{{í@N1>'~0i $2p/t pOC#K#K?ha{~RSSHNN3dzï 5psA`L~9}Wo<䓌3&ѥq a@ӦM?>?۷o}/ zKtST{۵PuNWlps P)k7z;ŷP>cL#<O`URbϳ[5jի2dH,xVV:2I'qПN^Z*vﻧq_wt;NcS6zbrx;.>BsB ׋(=&괁&c}nwB<\E;GKt#{?Hpa  \>dqL ).~(]%@~TjH'##jb^{8 >{_w`ʕr-e, 0eK?p'*9 """Rgӯ_=g֭ر+ZbR &n}aK#`E$?nP{)cчo7=e!| Z#{x]BA:!6ezNޏcE?@: p7n'{cobX9|Fp߀m,d@ŷ<{+Gw~`P>--5ҩY35IMMc zNeӱײeK>s~a7֭ˬYؾ}{Kc/"""UN~m222իw.owy={ҠA>TZy1}9O?i; _={R$;qzH!L ѳKmOw;E{M"! f06.׏]*p-n IDAT/E<~hϩ񪀵 |Bg|8'`;p:`|ً5l/^?r1gY[38|DZm;A0ُ}jڴ) ,W^n+wKۙ;w.wy')))dee{Js' 9⋴o>lsڵ7s=͛3w\>nʀ\m3sr~tNa:ѨzqS΅ s}?` qv1<!?Wx볝C{1{ҋ/D?{% {dž/7'bH]|u|$z!{ސp2$''^53Y3T,}L PH Pmp@8?s9h &4" 2c fΜY$tMe:u*o_>O<;wfڵlذONhB:"""Rb#GΣ] &τ ޽;+#`w(IOO:w=ZtKa]kLB~^ P|ʂH& yC¾u8۱?pׯի9t7tS|͜9ӧ3h ;w.iҤIGx~1}ұcDTLVT_j䦦}/f}|c%c~P6}q_䏥yw~="4y[~ib{ǾoUw^Tv!O${χB~+o $''sIiԮk!//‚pϙĽ~.8--f͚իL{シ\ve4hРGʏ:"""r&O?OڴiÊ+]N#:CW#'9iN^8ӌ?Lω ?jEC>mO>j~p~=%gOs_%vLxD{_._t~*_? @qW Ї!.~t3߶5jSy&|rII~yy9czvCpށ};t|mQW_}}J .|9:}ߧ]v|駉.JY2b6pNI OAR}'Ng;>|w'P~p7=1+`FNry<1uwN@~Fb'@yp{{Ԋdz?zI~lt򝢵yu/1a?4^;=b.w#?FO1X`HҀNmۋQ|TFZZ*)ddI'AZ|VpI?v%so+Ά x7ܹ3 6d߾}\xᅌ1k7|rBDDDK.]6mwy'׿]Nو'C~*y)cG.}8vGZS">n(0ńd~ Sۅ;|/B~qA?͏,?ڥ!{"{d[T2#(Hlq~*c('2Xq=~III&9~?8ضͮsan{w^!yyhԨ[fʕ6e0g3<2ҳqy~'4I #spCn mFxw v)>XƉ^]Zj,z*hnC] D-?bGȦRyʬG epC~F~Ќm\:ڻ{^˂Bχ={fiw9! 9k[m?uĺ7mDnn.'Om۶qӷo_fΜIvXp!]t)oT" """R*Zh%KKٷo]R͈h6wn vs׎%uH`˘&7bl =h6]2:,eh{wXߑ·É7I }pEck;qG|`JtM:~F17[@qRݐ~ B )((/ͅ.}nqy@p2I4&By0{ sz=|w\sp7]6ع{)[Dެ%,w6eB{= +x$9Oԏ~^ddww|]?3] c8ƀ$)ҁ  J1*MAA>999:tlʂs0~]<s܀_X)q?Z;wfr-7LC*PW_DDDJUff&SNoߞe˖%*a9gN~omQcA0jcnN;_;l|Z;翐#= [z&ɵ:Q3Itym.~.7`lwJ~ԩ /h\◤u}&Ӆw{/Ewx+MWCj7?6 emBsp9Qฝw/ `+?W۶mۢҴ-JEDDիWs1cPNDU)NR"`|~_Tbv{aX1˞r7o_; c2ZT5ɿ?6Y>w={-b: ل;hW@0&?6܇{C>߉ eIļmnD/E>8vzP Jqo0n8;N o >aoݽ@!nu_;`8ԢE .]ʥ^޽{2dHEDD,Z!Cp73qDׯ*ݣSAY>^ ;ϐ*ᵇ-0I02cL2p7OGxIL`7.~pw~o_Vps_/x'>?זbo 8{ypC}`v!3gϞ=ܥ,v_/89.؁{ŽNW0D~^调bX{آ#pp FAAAN/ /›8γ !c|\ڵ^{ݥZR)jߋH뮻{h֬_~e˩dp Ԉ oy+ؽ%e@mH@/.|$:>1XE^?Arb]1yg=z4W\qSNն*&DDDDN Сϧ[n.3Լ8Ir'b}!~ S@Id/%J"8Ц$;igst 'O!>S l$;z߅w0ozO v.ZoB&CP" G7nIF~<`,nȇ{Br##Rr+`ѢEt!%IY 2R_DDDuL6>}pg2pDTi̫s؀'lHJ'd!o >_?己RlP&,2P1>|/zJu҉ENG ; :U[B̩oiS bqo0E ah3d7oNǎ7o]tQK2uh̑>)}zbڵ<<Ӊ. }$rSJna*9vMu\գn϶cU#חF?S)HM}Ee᳂].?3=R8(TyžЉ!xf6=S۬`n;"e%-/42oIƍ2m4zDSi8j槑[@9v9C!FFF'祤PD;ݢufGZv>ˇϸg?T?6P6")@ԋc}'CMxATw9A?b"p힯,BۢyD#eD_DDDN 4w᫯bРA.*|q$9~a 9TrT4 8`uv!ߗF?TS(HM®#Pݢ"gCo}{;8+&&;C:G@|ϥ7};ܩ"a+|xy+uW֭Yb<O=T{2JJ0֭Ϟ={[.;w ߷i&ڶm*#O%/s4욧˨A6ǡo<Tr|~2I&Qn3m}`~e<KC]{HbCz/ Q!|H>[}XK=4__ٰa'N,Ѷ38o9\xp lݺ@ ͛[Xe!7/r S vd{us}RPn~u-O8#ގCu)0GT'?Nȷ+/[$Zƍ3gӦMcС.GJ}&Oe]e]ƦM؝;w駟W_SȕL^A*y)o'c;9Nh_H#4rb~Th)CK} {Z8{=K W\HC?'쳷—.u']ǕߵHছn^zO b -H!0R'wOVL'?苆G7|#>  Pd,>>xKCA?:xBT{.'u2c ̚5+%q f)ɉBEDDDw1c7䢋."33W^y}i&-[;_9hK&pJZH!N%4r"]ac5Xij~ |Oѥ%ޡ{4(ۛ ѧ ϕ߬Hɽ+~Ô)S/T nn#;;S2l0oԩSꪫhذaKng?ع B~Nzh e|&:½{B>D8K>c1N5> ]^D?z8[{'wB݂'vlX&PRBKKco'r4iӦM7|>uF `ɉ.OJDCDDDk֬'O'Lt9.cs}n7?OA$ ξ>rTg~qV$SG̐b'{إE&QIX͜9ݻׯ~!W]uo6|'̟??eQCN[n,_/ӚN^Z#9H'?Ž }7n'28mYؖ26e/C|Q]CG˰,m{ vCxn m ~h:p½V\ɼy;v,?͛7箻{\~.OC脂# IDATסZ1$"""YgśoIVVzk˩KVXaf"cs,|> Bd͏ɏ'N>/3oB{ #kS^ntcg%qv… Lzz:^{-e1uT/x+8. - 3#%%+;v$ UVm6N`/CN.QwC~g~0)00_4g{׿k{ a{C{1Gq=DYVVǏuԫWCr|rl}G֭]|4^z%ԩCfزeK˩4mNCc,<@<]{'ܘθguNM>vܩ%xa:Qսax tBÆ yի6mbɒ%r-4k,eJ9'K/Qzuz|@ƍ]R`U;':S$(48I_~9B/:ڵE1tP,ˢW^[o?E]p_ŹOAEDDD*pI'ѦM-ZD6m] VZ|G/<3@x {Y#!p' )x$'>7u}` s;O}]|ǝ_q;&79_}FyL\xU^J֭[ٰao6&MUVq̚5., ŤTZ]wSN]vL4)pׯϛoɶm۸[·qqsN,X;pp:O |9&%CI!\RFA&6./rvP|7xC^߇~ /@iРǏ+dƍ| 8P^e;DDDD2xWׯ}Q9ԩS)S_Ώ?uVV3g믧nݺ<ٳgW0#z¾7{þ'C8B~ CGAAOyv I>DMݑOG$^t}p@-_$+++m%fƎ9C޽5k<۶mߧo߾4jԨJJ fzuEDD߿?9{fڴi.4~xZj駟xܹ3 67od,^-Z8$ĄC " |#09g?5$?~oGs_ܲ|k,p_ӣG6nmҤIK.eĈԪUݻ?+PXXG}%\Bzʪ|<{_DDD*۳rJt] g,XŋӱcGFEÆ K45S{'?=}8>wO fp|@!n;^|>c `sC9c{qB`/iu({S?\ 8sm۶pBƏ_|A&M;7o^ԇf"$O*e˖|ٓ}qw'?O?~LPC||‡1 r!e C3, 8-ָz8x6ԋyXԲY kIOOm۶Wo>㥗^bݺu|s=;:+J%e_DDD 2qDvDS)9{Gb` ȴ}q#0GN`Z8e G$>K=-"a?סB8Ip/N9n6~nFo΋/Haa!'NgϞ R.EDDJС~!馛] cܹ֭T^_m8A?4qz^MIw:x݉]{P$=o8½;v`޼yu]ү_?Zhc=ơCxԩS˔*]$"""RթSɓ'swӳgOVՖeޘ&~>=YDR.ُw{~Zo'Ջ<8E ՙ }UpBk>cMFn0`wug}v4dODDD<\uU4l0;vh|eP^=~_:q|I ހ/,?RǂgpD}~8؟(Tׯgٲe`ŊmۖÇ3f4hDp1T>(999}٬[.ܑ[v-W]u7oNpm?no %= .ƳZbև>dR[r%cرٳAOəgD yuEDDDz)jժEǎYpa=7unnnc _/> %8}^q19ԡvҥKΪU]6fԩn:|￟LڴiâEHMM-+VO>k׮\pXe/Yn]od 8> ,=]8#z 8_+ dee~z|M}]:t9K/Df]1p?Tѷo_fΜI8qb;vyfO΄ 83᭷b{:upꩧ& rssСk֬ {k֬_YfhтO?|m۶ap/U%EDDD233yX`QwEo^{6mڰlٲ=gҥtޝZjѣG2qD?~<\r +E*|P^=>SN?tzvڕJ]NNNKJꪫ>C,\۶m㣏>b$%%qSvm͛FAPHŠ/"""r >CԩC~ضm[)5k֬a.C*=zgѭ[7~'vɔ)Sݻ7gu>,\r ׯgݺu[Z1#RBn&|+.唊-[ҦMD!\FFCeժUtM̞={-[0gz7n2E*W_DDD8<# 4nݺ1o޼D#rZlGOk׮cxGm'ҳgO:D)R4y""""iٳݻ_ЪUD$p۷og,__~3x`fϞGDʈH)xGh޼9mڴaѢEvw}֭[]TP}֭_gԩSz>;T^ }-)-}aΜ9tؑ'cRZ5W2Y~='N}4nܘ{Ν;Eʉ:""""K.aѢEtܙ3gһwDtT8 j׮2rJFɚ5kػw/wq< ԩS'TY """"SNXN:q=׿5%;wyff̘ 8Siٲ%ӦMu։.OD܀$ Ju_w5oOtI%y7ywر#~;˗/Yf.OD^|2r嗳j* ߟ蒎h͚5lذ!eHlذ+V0tPv5\C~xiذa#""""eq̙3n_~'|2%V˖-亊Yj .dر޽Oӹsg֭DLRSEDDDX xwO , 337&)Gvblܸ_~мy*_D@_DDDM8/K/M6%f̘Avرc5koaҤIt֍L^}UZ?W\5\y|G\p̛7DYf _=͚5E|{n[aO_r!:umɒ%ٳ޽{kڵ-[0k,ƎKnn.Fbɴm۶K) """"mF5h۶--M6.鄰~vʇ~H=ؼy36m*Q߲e 6l7gРA,]͛u""݃""""u]ԩSi۶-J9!t҅?޽{3mڴ=gƍ}tԉLЧO6nȊ+0`½`W_DDD˘0a nݺoظqc)T۷gʕt҅`BS=֬Yg}رcʢ]vqLDT6mė_~ɫٳիw}7z*)sTM6e޼yݛӧ3o޼czreeg̙޽dz~znf^ƏO]HEDDD* ꫯ~ޣ~W_}Ŗ-[ʠҳl2FEڵoˎ;7n+S^D7[ BDDDDJYǎYr%?7xQ=y'۷3w\Ljj*f͚|ضѣ ]H¹_ |J筷SNGl߾=Cҽ{wׯ?NN/oiժU913:"""" /\@>}ؼys9+Ю];4ikb޼yp }ى.SD䄥!{""""ܣ>ʞ={h޼9W>lH˭+W2w\Ǝ޽{;3f ԩS -Ğy?|:t… iٲeծ]LΝ;x9s&ueL>?WD23ƽT_DDD߿?5jԠM6,^vyLڵ(bL4w} .kn޽{{Te~P^DDD꫙5k۷gtڵLgΜ9L0ŋsrM7OY&)"RU9THӳgO>StB^={v%KzczUV`^xmƽѣiذ!u-EDHѹsg^̙_}%z]vgo[2e nݺ)܋1㸙^|*oO^x!-N/6mbŊ̚5?;%Kp9c""+A;EDDD!CPF H͹袋<_waR^=nƌCFPD| @jׯ۶m੧bɬYO>[oK/*劈H1EDDDnt~ҠA~aFDDpBEDDD+qhٲes/""^hED*HX| (T n| pPH%/""""""R X:DDDDDDDXhȞH '""""""R!iȞH7ڃ/""""""R/""""""R X="""""""Q(ҫ/""""""R _{EDDDDDD*\=uwKIDATEDDDDDD*|J^ې3)rL'"G?RFz˨8ﳈ L?w~ymE04?DQmڴ~~ތiˠ`?ֳ9m%~eY<)cR>wH ?c8v⫯?x9Dgur,.ߠJy%""""Uq|qرc'?9D8rw/c׮]<Se CLe{DDDDd3Kԃ/A(uduDdgJ.3yAS"""""h|?ZyU" =Ur#'u=DDDDDDDj>S.|.L cT c"Ddvӥy B֊ܓ$ dPb.}DDDT^Bzmk@DDfԡcGZ;2gNF`=uykBDDvDDD \/x"""$9djz[{%#"Kb.}uE]X?DDdY3rkY?BoˌkhETF].B4l- Q ?F|RK<^,33y/''ޚ ///kQ7?3٪?z UB7/$\ĤaF]x6(7vUnӖܹQה'GDdL{..իW7蚫m`o#a_> LQ-ä㐙yǩȳQ`'a߷o?f͛WEs%\/rrr =]%5 EרL1T ,P.ZÇǝ۷#( HJ%lrd=~ LժյHksvqEzڝR/5%$\$&&eŞ𱈨p/[^M2K#g7-[έiwM.򸱍y eK`5Ix5h\L(($Aig v""z" k41c +3Y(B[[ͷDĖ~իWagg֡:tڷkgDdEj.k'"K2&O žq6rO,~+uv\rvhÆK (I^c=ٔmJp'_R%G\>|Igⶫ }h;@"=Qpjyf#Pʕѫ=|T\ِP(ۻ{?9osC9z/AMy_dP{'"K22O X ߟÐV]C=,?A^}nX#++ 111XZtʍR̰q|aEX~=.]JD*UжMLd*U?|uF@Ӌy])))!C[!@H<ؾ-FD ֶm86wCz`ED憾}zcСdkYĺuq=%9#۬1hƎE@@4o Ճf^Z˯Xt1|||`gg5\лW/:_B-w4oAss DZ&UO7EA掀ظqq?DDՁ9ܫ(ŋk X___ڢjժԩfy7>Wo.4ǫ;?oE;||0lGHOOGjj ;;[YYYj4'%]Ơ߁/jym֖ylJqŦjjMmP*5;8޽j5g}'>sāK)ƃ;;1 vơ?}ro݆3Μ9/g3f &$֯[SNkf͚0gN8NE9X"G/&"""sR5~`ʕ~:.\󱱈qqE\|lXW.a7<{驚SꄈEwu"'Os642޺ cnj{{ ƇC>@߱;<1kVN\d)gBҥ$S s.2w܅ p[>@>WtbIJkhO7 ˃R\^pBBB`oo5kⓩa6>׭_OOGHHӦ᫯nZҥ86 yCJKC;wBq>Μ2,Fh[r% G`` *W9غu[Θ1AAG`L6 W)&""2/ jϗ1yjcǍCnn.DQL&$I$  //5j@ʕ-gnlxm[B``Z [d),<4ի"uʙ?w<==ϢѦMk@۶m`\,Y ;t0 ʜnt5%~ECe0y|[ݰ@Rb"|wJ*aihF眯֬SΙV.| da6#p. \e@ ׮]'ӦHMUd:=y׮5]v '͛pwwGJJ b?t8d^h=zVxËf~&ԪF߈k($ j @kK"33kɧGE>:lq̘1憦M ׇbccr:␖AP˭V8;cXpqΘѣhW\Yo6&M`n78|/Xht #<|NFG#33'>g~8*4h,\WgLGmغBH8Y8 l;z4.w{OaÊfpDװCyۧviѣGunݺAڵwxj Q=T!1) 'MFW^ќ35l MŞ˗1CF.[{Ip?ǎaJTL0^s'qJI2N؇ODdl>zp Í"V r8C6^24HEˆ^ jE7rHܼu njEo{漆 bw#+;;&_{I 8xdfe!#3i9ļTdsoΝ;aذ6}ZcGV[34xkXlggv{ \[[4 Av|2۷@*5V^_5C~OMG`LdFv//&"""s*ȞC#""зo_ܾ}P*q^z:؎\|)S&᫯b x ڵѫgL&ڶ…1{v8/\@Z0e$ {&Qڵk]6MAN/i'LDrr2 K7.ؼ'"K2&Om7nLAl98,gS%T"jaap^ykZ©seVd];/XyW [[[Ĉ5}rF3?G͚51v(L7W?쳙2YgŋSpppD݆֭&u*1\Q;g8`QIBp98[JMߒEѠtEEaǂ]1->}~/"""=׿9)n g!=Ք=n_*ܼ\ -dL ٹ9C/ys.5vKľ%_P@ɠ|'d-&Ll['N 8$z;w`0xKǯQ_C]WM7KyDDDjJHq*9QU=IIIhРx2 ?o.F [;;0z'"K26OH>{Ht xzkגQ'P===$dz zy:9&u潱dv67Y-oU(WDDDϸno1c7ÞP*vqcFƦ7&8g䰮/nt˝58q>>pv.~>SЩ{Lj|[; {ODDdiBÂ=Frpp@֡%4=!Yū^ѻҪTc*Wi`:""RPp=_b돈,yR)A.#/%rJJ*^PוC!"*{BWw%ÏDdIӥOׯ\ND^,Rˉ۰^UW֎*8U_ pqq$I(FLZD$ŅsW@+ #kGeuGƭ[bͭC!"*u*Up n A&t1#  IyUX;"Ky!I""A_'^vBZ_8cԩiPb.}DDDT^_NkADDb&"""ˆJNA⊷DDDDDDDja&&76=U!֎L"كODDDDDDTODDDDDDTODDDDDDTODDDDDDTODDDDDDTa!.Zuk(AyDDDDDDDApPГAR5 HJ@󉈈ʴ>y!I|%DDDDDDDe|mL;$aے$A&h ї'""""""G{X}%!$lE /@nj$ʎko 9r{ODDDDDDT5,_{[C݃%8DȺ ]1yODDDDDDde z @n/FedȰ|Uj{ Wgpx>Qyt=ClDRaOIwo5"X->"""""""* 72HT^&`\k -=}""""""^:m!zIENDB`mathgl-2.4.1/texinfo/udav/udav_gen_set.png0000664000175000017500000011141613134046534020353 0ustar balakinbalakinPNG  IHDRu3AsBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxyXTU%E@VͽrR+}I+W\\s_TRqEW@}10: w`yyd=s^X[[^^^hٲE'''cJ% ֭];;;ر}:>>\yL o//,YT{U*رs'BB!>> ժUE Mί3G4?wvV=|h8ovB_\"Vַam} E>}q4V Je  h Q}j[Y!+3CoܜXYW]Uj7DDeՕ m+bܹľQA}t( /ƨ?ā>} :t *С^xA{mZZ> oʜb;44кeKܺq2A@C__z5n݈IM7ʕ(5kТG''ɟztƏÎ;q=89UwKz8מ={lEtt4DQDoo;h֬{#"R3iZj Ziy`͚1w_gR)w}b5+5 2 }9r9DQDPPn޸%K[X(AitX==0pP#wm`]&oV S 9zoDV#1!\\]lt!1!ܴ,(½۷믿uҜ?;wmvWm۶۷P!''!\t?Usv2rH8v8ip\pӦ \áNzŗ\ct0iRみOkpssE~AkϞ=3g sV0c,={֨{#"P3+ƌ{{x5\zg҂򎎾$gܴTD]\_v‡ÆVY| _ ## .D#&孧ѡLȁL<r#xzƢnػADdK(P$B.OL,г JBjJ*ܜ׿";Kxvvl* 5%CT~Mi)x[MU*pK{~/r6pMܵ aHJN֦ۼe+T*ԹxwcƎl߱'ߕ :@&3nLdԹLK ۶oڭ۶CEL<9HÄI "maԽe(4=- co`ۖ͘;gun3iAyoڴ ƏGrRiSa;7'{Ŋ1bl۶lX"T6okcM[Qy0[_ Aȅ dC&BӦpA0Μiip{{F͚5q#&#p ԬYuk-g:/}5i#ź ѻEnn. Ųe˴颢onhݽ{ה(U 77\UܸqCk^s]nn.jMD僡g[?aϤj_SNE7;??YW6a֭ض}[NJz l EM D$&>4)o[Q ؾ!]l6 ׮EHMMQ@Qgb'CG鞎e+VB!S)sY&"2E7O{ޘocccu; Rѵ٫7v트5)efd[= =$oŹ=)ɸy<pEmQ'N^uըDQRFߙ^?ꫠgQ~Сc'$ܿWgҧNIJ?{{{ 2 9Xa#2R2G֮E5s- vefwNv6ϟÇcDG_?׎L2wN=-5:!hI|/񰱩KpAwhQT@_3JMEܻ*!++SZ{`SV s߉J; ..Nի#8OM oCGBu 8p/]@.#44Ahh(r9vb4ܻ} ׯ^6:*TMӨgfEW䳍YYYAV#'v9% |\Wu~ jBd =**ܼq&?wJJn\ê~Dͱf:ܻ{ II{[7cwn 1rd޸q#NN:wDNΝݼ :h۶ܹsrt999;+s.eyQ o#66999ĮSޏf}hXYYʕ((J$$$`L2Up-r ++ 7nZ5k"!!KdTtS&O\qy hRԩ]DuQ\ƃ}Ā PR%$ce8u$QjU 89#"hz5t7BCCaX P*xGzkϞ}8:9Ʀ" ++ u 7",R>2of@, 2y 28\Qm Ԫ'8 cʕqW6:Ѓ;wz5F ]U˻JDDT~g=nGDƒy;rܐ9cw$' TvP+A%BTDhQTK';Xlpak[ GB|>ykW`z: V2 A`mek;;ĉ(Oq ll|&eyK\ $FIDFI"""""!"烈D$%A7#""""#ɉ """""IADDDDDUDDDDDTDgOIJQcoBZZ>L,P9/TGiWJ(ھnʺ^{A!ZADQc{jxzvļFB{:㵎PJUBբrE&Cm?q~223VڵbxPbEvUȂaC.PyVCa"VG_d,(Bqz4ͅ """2NtpD#j{A&T*K>T< qRdiW,!EiBET`|P*P(&GDDDF%s<8%Xë"xJDDDD%s"6DZU: %')+(sDDDDaUjo@>~G:eVF{k#iLDDDTBѾM|*xw ۷3gKw6k?zoor*7%'%ga̽*r ""d&2?BaMѶukV+п}N?܇: M@=oW۷oG:uaĈX> QE\z 0j{ó& z<ΐBzu xש'gWtv2Nvy=vUt^OӦ5Xf-5njN.hbsyN>ߤW |,k{$""燦Qυڴy &gTڰ'0gWX0[܌;pq,YL'݂0w#V1y'&o~}`>ap)""/ _|9ۨmS'pM,^~:%?z b.w+fL4-]Li{g`m+m^-[>oK1yT$%%WU5z4ڴ{ ~o?9>}a&x۫XwPTSXO֡^7s0DDDD%*!_sBԲ&j㡀񻋇{7jv$wu1acS`73fYcwE^q8r87֦IHxmzU9ZTn$Y'O{ 3ZOuM~{| 2 لnݻkzrTO?y.!|9{k4ňL ܽMSƌ>Cƍo͇(Xp}- o&*UK.Wc3g`_⋙3x|ŗhժ%>B1t̘9VV8ƍt=_7dNpffZT,xU{G.\+^ͻLԾd2a >89UCb՜ͧnݺ:oݺ~C.uÇ Cѻw/n tu* CǥKжM4mzoeɏWc矡U˖V-[?G#G[0o>|}5WT ӧ}47oGJ@ƍuؗ._ԬQ_͝?mt9?QI6P0:upg'%>k?xx0I ^gL C`b>VV:y1x{#p{w4d1sg.ԮU G6rJ #?)));ߣHMMRDB7>sb-HLLDFF>ocREͧNo[8w~ODDD$®ѹS'| o +8ԦԱ6[͛QS .ǣF4T,[۶nGx:$@7p0,\^uѤi3:tk~ɤ:},L8 .nwV1v1𣑨UGGUÇ 9sqa&cǏm >GCffW#45kԞE_L?O(c6ĘPRի~b=(Qp)aJC_̹͝S?A|yu)ԌCj T*o| W@ bf1b8^}[iWs S:r}xg/lڴ=/?~A7ۯѡcg{-b3SO={o/q(zժq-:ڬeRoC:ijԮ]8}?z$ds:ȢUPk~ |;.\_amm]u2 7w]Abb"nظ7oAW#++K[ʘ >~቗__# Y899/gaP*\L?s| ''c\QQ ;o4/gwT. B`mm;;;rWlټWd.ܧ,'-q 6K.GB2t8 @s8w?buk1|pblX666: >mڴFc~Þ={%_2 W,[5<ѿ_Ba\QQOD&hcw)ݭdoʄwnb ;I׌+2ڵh;7I2I5qB8V+V>+*L&ǎmСKF_7հdfN ;'r99޺}3>aax!|ئML0={}!e-[@NR27D L  1e\)0f8|jQ IqEO#݋C`] ћ>0p ݽ۷nB{rz&v~٧ؽkjժBj%rOT6 d0-㊌?y~ OOOa|>^^^z1\d.YXL<[lGuy5~m/<=< seN:s`lڴ؇oMK. ___m]t}}a !&Wd J#?رcаaCc|>o}˗ukLqE?w=dѲ0d(f͜  >>>BZy{{cÆ4y͛71:p a5j^1L>o3FFFq08^^Y*WdLC^=ѩcGc|>#G~8?WD!77;,: &}GTVL ڴi}9޿_?hS~RuKaS0vL Zhh٢>S L|ŋP^lG?E`\1֭[>k0H *_w; A^hڬ9{ 2W$5!oU-khJT\Pիd9cݩtQ 9A3973ADDDDDb7u"""""DDDDD$)6:HRFp"""""+@T\#qJ*d\\]`o_?Wd*IqER16JJ^]d".F@ѡSҮ Y ሌoWTT-㊤b(JD> }U өsgٽ+**IqER1[%" nd**}ø`lW$t9@Ү7y͌2*izSI?QyeF+zx=z{""""rȬ=)8v3Ǐ=c MDDDDDdys:̳|դtٲg/]&N9d+v܅/wCumQF#ѣBӯY[BuOtNƶѺM;x֨^ 66V{Mtt4 C ]CXODDDD|5 tFܾ}c{AAbLD]՘6mzwڍ-7!et{e{ظlܰ/EU˖6Sm!Cc?sg+fϙ[&""""zm!0iD,Yce4i"d2V@akk WWW̙%*4 Qn"00X`α'Nj>_ Tӧ!88LDDDDog}޽{ʕ("66QQWѻw/鼯VթjU%''kߺ}CNή򮋸x ke2 ƏÊ+! 'PO S_9cТys|899ARóIecߥOG^=qy?= _FלΞ= gΜ-* Ánذa#233q|8&M\U"""""*$h؁:u? ]%""""rAzټ4\5j[aC ց `OIJ0UDDDDDkg$%2#`OY4WҮY(}ø`lW$sŏ 0D%G*j9B3[$IPlvBR$ȈٽqJ:d\\]_B0([$IŘ*I s:Ȳvb\T[$uADDDDDb$F<Oo嫈gOIKŋG\&{{G_"qEblW$ccA-b:u)ȈHxqEE")0H*b$iQYGҮYN;cg\QQ1H +*A㊊ER`\T?lt """""Iii'gWΟ<u7+zx=z·y""""rȬ;'$ر?zRRSJ%vYtL8K-{e1iDc2 7w]Abb"nظ7oAW#++Kk֮EP;uӧmvn5jW>5X6N{uFܾ}c{魓v:$s׭ 8u4.Z rwڍ-7!et{e{ظlܰ/EU˖6Se񄼍:!0iD,Yce4i"d2ݪ>_ Tӧ!88Q߯#>'ObȏZE n:E`` pc'N4l"""""2ٗݻ\Bll,bccu{z&ݭ۷0 | /ﺈמoӦ &L`矡IƅYU $Fy*Ysf7]A=}l0xNF͚5 L_F@Hz;zԨѸt2233ߙ34i X"""""$u7nބ4#F /jS aNGI{x] """""*3^EDDDDD'6:ȢvBc!KFY4{{G9tApH =ϸbl %L$7ÎDRAdDމq]..pppOiWT-1qETf@q](_iW!IED#9DDDDD$)X.DDDDDTv{:HRltzYHJz'(..w'Wd*Iظ"* @,eD\ C.]  _?3[$CqETy tEKJz>}*jԹ3Yyc`(,tE**}ø`l;d """""Ii8J hv갈'g2O0CG3y """""%[Z0do/D4֭Gm^-ZƖ-[gT-[cѢP* """""zQ6z: C~Νnn=gN%K"h"\%Ay9tH{ɓo7_+ؾm N`f"""""zRht>_ Tӧ!88X'_v/sAPy`Ibj +VDڵ6o1ĎnƌgxX>|:iڴi]v7nDQԾd2Ѯ"""""zn)@(JAWsJϚ&呞EZID2 p9?nnnP(8s3iN?v4h}ߤIۿ_iV*]ذa#233q|8&MLiӦرHOOѣ駟a1SNW_}-[!#dddHh(9ob֞'gg^$h؁:u? \;fl Ǝ:ucqȗzcEʕ*Y}LO%@oW"I(F!eH+HzLjJIJ`x_T c`D\]v٢8::C^ !HLLM7U'gW[Z{uOh[l}&ݺuѲUWDVmaF111<8 |P/ G}z~srvΝnQ> 1jh$>zdG"OAFZpCB"*WTb}=}}~\ñڴiشi36{.s͓?oݺ /jNaG/NyO׽8hA+cUV^QYgFǐ1tHϟù !U%K"h"\%Ay9tH{?ĢŋhD]E `…8p/maGM;~ 1ׯcyس1 |1k&\BH?PjL6 %g^ ÆRd".^f}1 F#Mc7QUP}l߾ 1ףn׿?֭_͛7ڵhպLs͓?/Xsfz0*&O\ht݋b\1[-KzY6 qhpW'B:ߣ7`jUOMMEqY͝prv ѽcۇ{~ x^=z^C?ʕEm:8o( -'.cƔQF4{#Nnݺ$xy{?sً/"guptġ4nXgƒh۶-]Z`t݋%Yf N>]֭[>xL&͛f qŸ[cK R9drض ڿd5*A=V!}ݭ۷0 | /ﺈ796mZo׶.]z~jڵmv/!*!eL<[mC\\71<y_Z5*!bJ0ObccWQV-ivݓ/־+Xrrr'B^|-OO_㊱*/qETvyNG`x{{!$ܻ{o݄JU^O{ԪU :bժ%-S&$0 њx {wq1 IDAT-T*ƢKWG>Sz[IG-&ٝ={7<'NjS(U5Xa?5cO@jմ/;_K4gL0A{1bI*c%+N6lDff&ΟǤɓuW^G18uڴ8v8q1|g7vc:i֦y8t0222]`yeLy$† si-|qaTJ*zбΝ;?ǽ{w Ũ?.vZp.\`0֐qŸbl1,)ʨv i%%A}ԩ[9?k L<= ]2ƌ qQn};'MB׮]_5;O@1nL?^wdX8-qp(~Zc1呴Dע }ԭWC?3> SNg GAy:VEMoWsfC.˯^1c^|qblYҋ2ZzUQpwpzڮ;ƛo Lrڥw!c`(̡hWV!,HD#~1([$c⊨ʋ_M$'Z\NL .+* I"*4 ǡUTQ!Z &d~ȽWd"I"*—=dXɄ(&0DdIBdT[&4u**8Vs,4 ㊊ER0&,dq!< ޝՔj _cf*m[(햐ʌY2A(>vɾ0veR*C̠{TW.ux9;hCCNʉb\tYfrW  A"+HE|"Μ:uMajZ͛+,ü"M0HQ%I I!Pļ"0:2 ("R"""""H8*\A;=DDDDD$(6:HPO r_))AFzC!=`aiccS886+"!WDUê\k))§}G]BzKrr3HS-"lt^A>ugw耘m 3HS-"Az's!}W\>1*\t 03,JA;D9H """"̇2?[ZFDDDDDUSQ7d6uF۞9{[8a5۷oc4mk;v>)Pi:t~ďAAH~۷E!!!Qnٽa!Xd1 -ݐ۷naNh(bbvjQ۫t?τ_@ hoʭ\k׮C̎hԯ__֭ӧ}@XzVb'""""+.L0;v{[o%n t^zڷ! tZj*-۷o#)Tu'OB(ԯ_O;,]LPHA"c:2^^شAtu> VÇ0'lPQ :fq0q>|yyy}6Y\VN+֮]']8v8={<9z 6[ """":v Ȍ<ɽ<<3Cz7vܲMc|i_<9C FxxΞ=ڵk+WwADDDDT}dgQ:H.obz聞=z-NzHΝ;sN)i?ej@z{UHNDDDDDMUDDDDDD\Ҟ3_zW4:Az’3͓fs!}T{:HıcX*\ϼ"M1HH]JJ b!#=C)94SXyE`nT+ʭWsptuT1H(-" @$<DDDDD$ """""Aq"""""HA;۫63x{ O">~TbaiccS88IEBP5*FtJIN>;:#/]•+pptyEbnQV`O]Az}ަp=4"!(+"}P8I?TYü`n;@r""""" """""H C[jQuU:ŋXd)p=f x{`hSaa#ӫXr%O<ɓ;w^6:2lfnYjitܵ asBaoo5j}F̎hiE%]m9as5*2^k%>~˗/ n'|еL0yTٳg8y2Æ/Uׄ <'`Ҥ=JƍISp>|drZ9a[VXvtyxpQ4l@X;:#/]•+pptyEbn>`Znn| =ӾCDoSyEbn>k=4UV0<[$黂FSQp"""""h@"""""/^ bx{7}|@13}UT=DDDDDT~O˜xV\Ǔ'Opd<Νv>>GfZO]6'vQLMMѧOowR7o7i0p dggK53ҥV !"""""Z g>L[Ab \xΟ%Ϙ)큃gn>e٣z!E8r̲!CK/!"""""UDDDDDTPF p]ADDDDDUNa;=DDDDD$(6:HYXZ:SeʃEB`c)N;0H+s, ՊH886ÕDoCFz!=`aiS4sh 4"!WDHt Q!Pļ"0:219UWADDDDD*:BIP4z=DDDDD$(6:HP|z齔 K O2H]-󊄢jnU#H*O))§}G]BzKrr3HS-󊄢,*BQ;=rssOt: &z+s"(˭1؍L*+wWT-󊄢aU0O """" &q[:""""*UU\g>L4231U&Z}zUɋu^UWvPѷ3mރ ǫW-zqi k9-[G}p]m֮]ngm W7DFnV͛7?h4EFv8pu[R5v""""Ҍ8}4BfYulSXpLۣi#R_CΝ_bÆ?a:\0q6/@D@@l'Lƍw.{6n2?{zx" Pn0uHLJ£G;Qu&mto<\peəLD2M9 .m 8x̐F؉3%} RwR)дiSeϟXYYΝYodd|eBNDDDDTU1~|Cy sr3,w&LDBB"I&#`(e5j7xɬƉ' ;+J獎v>>Xz56o g6h]#1: `___eG֨(4@(~ڴ4m2v""""DZĀ޾M.8`R-ZÇd2X=zgP;Q$Dd""""" """""A6:t43~EDDDDDTIQVI’3fs"?HNU)N;0H+s"(˭dTOAՃc3\IIAL6dg:011E3f 0H-󊄢JnUvN H  EB`^Qe%*UDDDDD$(7WQŒu;=DDDDD$(6:"""""TACQDDDDDT  """""AHT9036ݷN+elU>C~TUD2~:9i>1'Ia;C=˖-Xlw-e^}nohpԩӰ|.@Tʖ[Ir(~n03pquÄ8\ۺ2v 3sK޽[fyj uP{923Dn=֭N>3sKubX:[XQTuiy bSfmŻ|];駟`xZuݻw...EJeEnqY ش:[ɷ#9*,>!66ֈOY~".|;2/#!!DTQFX~O7T⹩z+6\hrr2j׮?Hde-v:u@=k[!R/жm۩ mC36lsro޼ AC`ߤ)6-w5jkzݻv튁D,%Ke};=a޼pzJX,2eefnk֠K[Xآ]lٺn}>zwl,K~eGQrQoή1L)]sm amcN`ǎʛN:!6L$]q2$:uT*o6mY֮ۢ]']WV);ƍVjbر+;g|L ~[$ףrMϹT>6!S~ӦHtWSک8eQ%sdepj s u$:H)r3|e "|n^p Ec2e#"˴z*bX"Ƅ  q\8VV>cX l-]vi̚ٳ׍غ%IIp"[E-~UrkhDnڈХs'|ŗذlX׮+&L$*9XDY~)+gKpMts̐ I }愆"&ft¹sǏq @z! q9xyy9as`~n^C?_Sv~%}aʕ+e)))ӧLYU- P477}_({Koa͚5n CRR3g0w^8֯[5kԣSqJ:p ލԪէ$\,`&y 5z;NӾ}!T˗ԩ >5@nct>7x@A%6_]uݷ˖-G̎hiGE2YYYWx KϟþI3ܻO?ɓ'U+'iÏ>SJ#a[ 'agvMJ-sqmn\nJ}ު懲eUͭW {쁵u=Kc4lqWO7ygN|qA߰֯C/B/>GϞ=qeL>[nɡ}>aJ2ے9TStwl}ݻOj[:|tҦ̺9GIIIe6|$VNN-k'uJnwQ888T1 a"jx{M> i6C]QFA;pssáÇn&󳧇'^c(sݺue便06s% } IDAT6CFC.d[wXZY²-wQ>xVƍw.{6`UCYRQd 4o!!ecGGN#6oق }7qh$x{LGFr*UsKމ"j~(YjxM#|\?p@\9fIiKI׫78z4 u#$|}K7:檰 0&0-…1vLs*9,ϊ*WWW8::b*+Ϲ$KտYY044͛7UkJ^GT@A+Q=zܺyC[7o >!=]R)дiS} FFF8wJcN<|GeNNNطZ'ai[R'+*?" K"ś*> VÇ0'lt*yӤ=_\v wޓ~cݢEs}ְۗYfr8.^Kѳzn)+4)Xd)dZR}Qȑظq؇U 66Vn}^;': ~~]PNuԁ_DEm݄ <'`Ҥ=J}=x),K$ј!88 ;'Ϟ=É8|KbinJƉ'~sHK\1cǡ{1>cǏٳgÑGѰazUgkCCCmE[[q5 &N*1tG$}8^UrDYi#GǴi,б&Ot<{ 'Oc* ܹ#GahѢVZ>ALk]GQ5UᮕM~ b5jHDc&5:Aɽ},#akTc?,UAޣ'6oي9r#jԨ!-kV͛M: <<?Z1Q4TNVT~L6ƣ-coSߠ!k4k3_?G9f}fh'aߥU͛N|gROkQ{cbQo1c0zL\J(3M}H*,$$б`ԟP}-c&|3Gk\b..2e $}:^US:7gOI~pXاWO!""""4~zyɉz)\QQ#BxGVvo"""""oEm ^EDDDDD2NCDDDDDK"=DDDDD$(6:HPlt """""A(I.3sSS awDUMجr-R"!W99xȼ"[ZHT0v/RS 20OU!/]•+ ![  EBP% 2@j92wqǏJJ ߗV9'U1;t@L6[  EBPW999ٻ7$v)N J]Tes4ż"0HeÌ 'OUnJ%A7E8DDDDzN"Az9JDDD 6499Þ҈{:DZ!O"'YɉD,ī`-A]3s4lC~G2V\N`bZ-Za5ճ{^xzy9Zt١xe[}J2f'0X NӾ}!T#{n{KgNGB-eׯJ˰Q*ۇZ9Bkgg&/'iu|i_L< Z9Iݿ~1NJTUCDmo/YoaџcLǍY酀@e2?׭[Wz Uoȭݺ…)r3?~˗M KM͛# uH$RtHi(ӡSu⋄in_߾׷/`hD\q3220x,^Yɬ `aaQ,DDDDHR0R\#1I7Q###vU-___guy)L:EV"NNNطZqF>L8 C||&MQ#GU5N8X)T [}>11;/_֭[OkWu <_|t,wAA-gp"._RX*6Vt(ң{wdff" p `cc1OzMqA#??I7v,V\qAAP^=cʭ#66?'EykVƜ0b1\\ 00@7ODDDTI>[}J2u@u^EDDDDDIW¢3cLU]tUm t """""ADh""""" ADDDDDH{:HP HqQU1DDDDD F?#%99H|_T5XXZ,"uWDDDT tic_))§}Gm쎪˗.J88:]"M(+"""XF@sA>nTe1gn&U,m/Tes4!""H8QUfVt铳EnnZۼ1ڸ("*[$郂Fc:Inn>Sm]}["a`rfn1]HuwKT8O{:xw*e˖c2y CE斶/fSeVy 텁AuɁ!!sR;Xa&Hh lN(6Enu(T ‡ʣQFX~èXDDZڵkA$!99YaY3sK]m}?0+WKK=m̜166]jI"":|]?5;pssáÇn&󳧇'^*QutKK`4m3sK4ld yF*<=lX=wGff& -- 666]/iDŽ|j_>Xz5愅a Æocpuq`ʔI0p٥RNʣJVv^UOu(jg>[}J2 fx DVbx|ڷ/b]Zۣi,Uo˗,ǟ~"ws4UV^9tV}7N]:WDhѶ un3=: '+nҮʔWTu"jx{M>Dg z:D"pRr"B&&ؼKlC.skذ9j>\q~D+n-*>fHqUJmuUQ̭voݹ[[|Wۡ:*Y  ",xk ~}yf^EDDDDDJB*an;DDD#mty)N;&:[`7iBY^Q(Lp%%1ې]R`aiS4sh sԥJ^Q*htha;jEDDDT I>5ɉHP HY9""""""hNADDDDDLy:H nUDDDDDT :ADDDDDbF c:H  Vc``XP*CÍlP*)jghѪSBDDDDDUƍ:oUqQU*7XW*>2F """""TAC$%"""""*IQIMKC^^2t Y]U-X:"7E=uN`Uq3{ư?oeqvrT;wPoCס._{iiu(DTEMKCZ]W/euVD$I Ӣ|rШtTSyyyڭ -hߡGmuDT=C.~HĺEx jFq wX,*;/ާqFtTG즭^2&MtUQYYYy!<+^D ZwADDDHɆ"v_zT91$*"F'$'""żSJ_sDDUmBDFFݻQߣCS+"b|DEEۨQ\\\0l0t=K".yUz:U؏JB"C`gg֢aÆx9N>eKხ~-r*U"Xgline#\c$fmd)Cco?ri{bߑ/]в"l_pj? .^]ѭgovu!eٲ5 셖]е{ODTݹ1m=0*p rrsu[R5ZIʥ-;bI}eŢ$Vy\D"Ν;쌚5kQF1c^z%%KаaChٲ%~zڵk۷oll2١FhԨ֬Y0T|055;#?YYY]wXIDATqPѠAԨQvvvXlʃ XRqſv؁yᰳoԀ)>Cٽ[Z&5k~}ԳA_"33 f Lyy~x0b셧7ꚙEK'̞/^ b $*So aV.-\{&02zu꼍Ν:c֭J_:o͛uѰQc -oiuk֮+ \Wi%]z[; ~2u&~%]:ǎmd߻~;=K i{} -MEVeׯ] mZ nέ?d_S4:Ν c H:y/]a2ݏ"18xa=~c fl|JL6 I'O`/Ӱpb'$ʍ#plbđ`an^\tAR';~7 'a͐Ř:bxhkIEݶF~ǔ)SpBdggChh6m޽{#tݻwNJ+sN<|5j6!!!XbrJ8x>3 >iii{.1a„ $uݻ5k ;;+V@HHʐHĂ-,p2|3`WR|VVV4m۶صkLvm۶055AbR"f̘9sBoa($$& b~Ko[֨(=Ji9Eǯxaaa1WܺN8?AAA2G`@~i%j q 1UGt}zFwIF ܽەZ֥[nؾ#Gcn]T%=}^}CU%vy}ۖH4kT,;;=? 'CXĝǷ? ,o\D.]鲴4t7nܐnwU4-|999011)aÆɑnsNKZ;cǎ)?GGGܻw\{i׮~GSZϮ]лwoiLa%;~_/E"{E@@hݺ5 nxxz"eܹk֮mۤ?c G^cԩpnw8s yF8V+xwڮSSE˖-e2ၿ v 6 {[*ُkIʎ뇫#vRo\߳4LGa#е[w{`ؾs7xXYՓ1нg/߳4ÁAfYQLYaպ UX|Dǔ*CCt;9"‚3Yqu|W n*@cAr=yDf֭e~vui?O0;, gϞCvEAٝ;^R{{MLLXX=ƪ .ݽb= %oRlcccˊj>>>2?oǝ;w0f!3?4^%992u:ݺ ¹iF<|9ڴiw&ODd^B"kW7߇߿dA"H_}K#UꮈJe"2?55Evvt˗p_x*x?Ezn2{z"(0@aBNѭG/quO0OI /2ckԸQvusãTLr~.4:=̬n^O2N-[bOQ^[ۨ{I.fUEiz)ݻ++2 98X`,,,+ԪUmT$ QUm-26~}~}?l߾Fɸ#Fť Bg D"F7ЫWODFF" `4"7Gw^x #H$b<}.^EK(]6jpuu)\YǯH$x-UVz{U9c4$)&Wq1:Lc0xw5k*ШzJc佋y=$ȘGf8+D8s9 ƍ喽9 q99Yf!KtbW&*2V##R۴i ?E?͛-bҤIN>-^۱׼ysoatg=5y< ۶ΝCzfmn߁ى/7c; mM+㫯dk>>hljeoOe0?{b(,,Dyy9a0PSSŋիQWW^ZhZj58N\pQ?3Ǧ<;i d !uU&6Cӱ!o2 1fr >طf":*3gEDh%$/K>{r*j)ldi1w+}6bLAw:LLի'ޮUC7 tիp$Fh4\|١zIwK|NTիW ?\ɜxltrdi{>es;Xong!9h|hGD䪬'Y1ŗy5y%w\%JMr!  11ʕ+jѐ%9`Br&Vb:ۮQ#Z\mjUrr2SI6>̫Mʫytleo#ADDDÔE! իVKr;͏QjL7቟7Fc_䬤P(`4v˳}WYP]P(0CbB} C#ȸp󣣝 ɬiƪ*Z.]BˡP*erDQD˥W%y5yU{{_#5ܔ pu@$tuA?1{[>:'iO0Kcu mgB2=*:;"rq׮]`ݻeDJ5jk7{CB!i 6'B簧U&;7""Kb^2kC5TSHU""""""{ lDDDDD ztDDDDDD$ UDDDDDD"DDDDD@H I """"" H Y2NS!""""""t"""""rN.FDDDDDD._} έ""""""Ǻa7a1 1:;&"""""rw97J~,E S_Tc@7 nv)C)``x"O_H9݊l!`ol;,IENDB`mathgl-2.4.1/texinfo/udav/udav_inplot.png0000664000175000017500000014276713134046534020251 0ustar balakinbalakinPNG  IHDRMsBIT|d pHYs~tEXtDescription????? ????: udavFw9 IDATxy\T?̰"%X&Zj Kr -q%K--ͬ[V/hMTT@YeE``d`v1|Ȼ9|uLxBWJPRErC%dIma#P%$"""""I lĝ;wP^Â%@ui[o<ҦR▖HJ ʥ6wr2 qmG * @H$H$;KSmr,.n٤'7@C1 HTH* T VR* eee[Z -8\DII1 R ("""""=,yOZH$GαWJ`+z~ C* BI!9w`>*T;xR*(,*C}H$T I%Yz ں8֤"bvYeDzX5- R _)MJ{> ޅ&2YdBd-8qၨtCe+T6FHyy9"8$6(+/g ];<Ovvv&c5n~]"AЫW XTTTL+`wp59/Gz^0mt`e >׊ l۾YYYH$prrccâ>Qmny @I*U*C-Ri)llo&a?WNj". 6!5D*++{> AJEyY}Pz.$?22QYuHSgr㣹s_hM?PQQ'''TTT`|_oZת/Ro6믿&t9>vqqpwwok|Mb:#=c_B?^{5 7SSͺzS束WJKwIyR"Lv66YKMd}kp+;7QQq r`A?|VXTvڢn޴rU¢"ȫ{OZKD"S̋ݒ?ï>TM:A/@" ?['_#GB"=ۏqcٹfߢ"߿۷/*\zɐJ$xXkz]rElܴ .%A"1cR5Qs-EOy۶mǭto_x{.t՚̙3cN$''=z ѱcٳf\z A__?h߄ZmEwǰxq<#n<,7ڒ xឍ9s I1kld2e˖X|kKO"IeU&ڦcxGp:[ ;Km:ll!݁DRDT*rso'J৴^^ͽ _KD (+-EzZ*^`Ϟ_5Ҝ;w7oDXx8zt놰pUe? Ǿ}(//@UY(e.+jxXn=9z ?3ߏLf]?aGsw^6cʃ}//o|t)ΟӬsܺu΋S17p ,ٳ9{~Ş~=>pΞ= < C˗M֖իWq^TTK78o7^ukj h{ڌHJJ܏>BII1>cÒ-}(vl」6+xp!lܼnr6pQA"QB")TZ |gEQR\B"-DRD H*.z?%%ʪ[*AqzCIYiDrÇitߏ׮… ׯǃ];b>_c Jħ~Z.)) ܳbg0d0<=j[L1-J%*J_nf^(+-J"U7/_OT]^XV{^b%^{- SM֖>Miӧ#vfr,\yߟb O7͛e睟 E[xQH%rsowW"L Rܺe[Ə?[D'bA @ A?F.$uG> Ȥ*+(++CyY55H,ƌPͶEEE232O!b<ȨZzݒ<zjs().ni(SW>o|8Cp660|O]QQדQXX`=ǍkWr#!ao"??y.;!5TuuƄ7lp_5N87c{|i3]+WF=Vйsgd*(A@hhdgťK()y4?Rphdpm+ǟFf[U\y&ey92%k[92"5CF5kv&ˑv&V^ xWT*q59/ɓ'_D~UDYIFaay&ϝЯ#.n> rm3%:?)))(//Gݻn[Uo{S'ҥ$TTT ;;ӦMI׾C@jjqWa(--+t+/$|%70x a1'LTZo?T&ԤoBD{v(/3ZWw |֮{Qr"n$_(͔t۶AYv׮&!v6oي>}˻LﰍJeΟ?vprrK9سO䷋۶Ƹq?9At)J&ǭ[8u AaAm]8u4&̄a?L.JJJn~~XR=9 1pssgOY>[7ܛf7b((1r9_ #knwJ9:wكo6nDii)SNxgJ4ƌܜmyamOܹ(..\.GPPޛ>&wLxֿ[^{nl,,^۷c˖-xֿwZb!-- wJIS/%|O/äIoBP(v}EU7!=/]8yS]^^#joih}%wH| YF-p\xZ -Ŋ΃DRΝU^1cTtv%JΟr8nT*J .µm[z~ٍ7RAHIMӛnϞ_1g,tAذ~]M]uoٺ D Pw<ztu۲uspl];w.,X v1Z4APATX))7P5y'%֬]SNh=˳D=ѣ4i㑕xL0-0á5k) ^/5gN q9) ]:wҙW�QSu`׮՚VTҥ$̌>5M† 5sz CC3c:֭O0|b[f #ử!T[l2|bN9HZuE 8s6gѡ}{KMR &/FE!aW#;w/`saXM_5:̕///m^^^0;O)bȒ7}z\ t5*}ff 1rp>Yu2s4Y_n#? L06K,FObu1GG X`iǀAiˊ KJmWh)b @M3&+N i7郬{Ǖ"77W#ߗ.T2N4j>]qt<]&=Iss!Jqƍ&(R=blkb]~|B⦱Dzzƶtxzz6qZ;43.]:#z mn YtYoq_ۨOWOX8.^lܽ{Oc`!N:8y -„7ƙ|jcp!N<֤cjN:vĖM`ӷq[,ӟ5hO? M}:Oԓ}6fn݂7&M5ލqHOOGJeR0sl2˖~ t}bG…9OOo)4͌L&+/1!%_by\:E ɓ1rHO>8|05aC5D3MfM;mǣApssG233sg.CC;4To\qm:guc1ucLnnj֛RN4ƿ>G;hljSBTBT"zzߛڳC-%bHֵ[S3X!c5KUnMrl"2 r77i1!8sQy8y EҀF'D8rKlb"%ݻaaa~s}cccQPPA  NpsX+um߾ P(رcEjqZJ찞< czVӍ`Rswo@L X>֤thۮV{4I_vvvѽ;ΏÞ~Y-[a añuwIƛ;w.,X v1Z4APATX))7p>kj tby;=z&MB||< &㢖a=Cb,V۽U4G)FrRt7ݐr\JJ_nKg »f^XT]}I?oŊk0.쉿.\h5蘖 \MN3aЦ ^z% /s "Ggif|e}5ٱZ+*^BԫQIMcyy٧ Ïv`XbE]G\^ώc5HȀE.!˖-CLL  :t(bbbl2lڴ|I%b eekxMRzw3EѱcGL'JĉXhӚu֤JntRK03f64 6` ''' ĚXeYf #ử!T[l2|bN9H#? L06K,FObu1)bWH0ڴi}c@HMK ~~ݴeË́b6Cu+Wn5?cb2#FdT䮮3:}~n.r8==] /A\m_3OLF\eק+N>xbl,Lu T7n4AH,1cc_{6^ >37з'5ӳQY"v^ˬXkijLϤKH<}^E99HGLr_7zTOk1ELW^z 3bf#C&5Jd9bJm_==ׅhu"##id%b <1bE$bXKmu <'' G6&"J4>C"B"Ɒz߫B,%?jIe2?*A@h"JY+ⲦX#.kƊ+d&vdtq!* ̆ Vj9RP\\lBzh.Iw0VCs;֡9c:0VXJHy D*MDDDDDDun4IER'RyDDDDDDq.5DDDDDDGu+AI$ڈ["""%%- (G{8;9s3z\l4Q uh'gQ_$X!VbXc'%- mѫw('y>prr"(8PVVnT* ۾/GE 4?q¬rbH,35(O"kOԩP*P*:SaXi:uo֔ cu;I H ?}6 49s`~}=8sj_\wsF.O8q/D,|2݋0NհƢ @ 66޳cZJԵ}v( CP`ǎbiCD-z<q#!zLj4-llm'GGG Æbu5i_cӃm=P-[<ztu۲u 6[Q&jsbbEA 둒rzU>))7f횚tB3ibX%bEGŤI,c„ 8~jiZJ=CD fL+S?r7w\NJBκ_>s.ܷ?6~^^p|rϋEOEu"fΚeT*~ߋ`a\,]1V ?.@—p59ރC6x(15f;Ǧ͛՗ phdjTxz5 QFL'7JWa?ήf 2 ? WWWσbyu/nry>;v~ =#^,,[ 111:t(`Сe˰i&%Mqc5#My5>cǎכxsƴ6`uxt #B{uT*qRfҚ&a̚9CCޡ1']b՚5n4؇nR!n"8U8} y\}IL41 EG7DMRRQSw͛:~Ukך}NGEDDƶ9r<>KNc6i=MҤkO׮:| B4 ֙wcx;z*yߝ5ϫ+W&,Gsx| #:oU7 ^^_N3g1}Xڷd *`bllT6|1s. 9Gj `z!兌 ,; DD\ t5*}ff m~$%%G4מQμܧY_n#? L06K,FObu1u4G X`iǀAiˊ KJm&c;ĨyD0iZ=rWW>?7ri7ÆbuzCT2N7(O_8u~.PiHss!Jqƍ&(Rblkb]~|B#M⦱DzzƶtxzjMDp"jJUW'3ҥ3OFnnsrx,t7ݫ/"L׿q)o&oc1"s͇sʨ  |y1V,OXQkpXSLArr2|}}j*ݻK޺Y"v,9JD P}a潅z#%5 Wj] O޾cۖzߍ>#hM ȑ(//P`4y ŘS1'ѮjS0V,ұbl3Udd$"#ߟ D DDzmn8tŵD<46 j~'YOj獒YXB֏CDJ]5hzY?Aˢ%} ihӦ .Y O^M#Ve`^BRh"m H!qbZY+d&VN$bU˫T*EeEy7c˚b.Ǝ)v+և3ܖ89c}bՒdFTsE2VeMRcG\;N8X.NͣM2:Zhgt́ BV^ii(..AvvE!=yC[gt$+֡9J]b'5- E dG{8S'oB-T)l4Uhj'8=H)H,v"""""#MDDDDDDzT786U&#""""" HJGDDDDD @<""""HIKC1y3:7Q TNDxU/tnV/,%2 v=6;Li<iiܩEJR==&]JZyŶbI&s`~ȀJEXψb 2ɏK׿?۶EbP+y$:^ĥ2O<vPi,H.PBuUr[ #%.A2)vLzF\gI$HnHEr7]]ѥK:Y=d!"S!"kFSii)NMDpp t<=z AAopaMMzLsYSYTz|-/ofDg5=Mt2"GA`p0 NNN㋠#r4NJBYYQyaŪ("4^0hHQEbH,35(OƢOԩP*P*:X)Y[S>g Mgwww zfΜ9k0r?i7obY|He6 6A!>'l@fV>|0)))Xj5233ѳgO,E{I}>O2JUQF!(RP[`rgd tǭ!˖-CLL  :t(bbbl2lڴa'G5,U4f,S5dFN~~^͢ر))6l3;4NNNӱn}gçkW8::qcQXX9v4 wh(ѡ}{̘=5RK03f6T[]֬wq>|u3 q y~^FF4yyy!##<>K3 DD==O.wCVf>33Scz6wk𨿹2JC0Tj0kcLc44y1u䈏%._ 4u;D=X $ ;BꊼaXx q]?qߏ1턛1兣ǎim4kjhRØoTH<zX2WXXvޭm7;OLc>fO@' zfiMs;'{@kn}&GOEjZ#x套j |Iܾ}|[n&Lйr^X$"Ǡ>8~<͘iމ[1n̍Czz:*U*LS74ߝ gg/-G…9OOo^-S"a3;o>S]_lf9r$ЧO>|qqqR0g; $Db;mǣApssG233sg;;;tǿޜ9IonjcFvCB.caܼzi"њm+ƤwCtXKCT?h\g  JQX ^N8x߾4a<ޟ5YY7u1ñb L2ŪUлwF.yfzcHm4v 더4\IJYV\.C.wE/<͎1=K54M yȑ(//PB`4YFdjG<7Y<7YmcFG]HDF?fzcH7ԺtŵD<4L j~ Y"2"vU$eA}N~ RgZi&"Nu{x Lz]UuȣEhմ"JQYQvua=#.kg+և3vgH<.Nؿoh2 yuqD&a=#.kgqb5\xM"Q/)p\>t *-Zii(..AvvE!=yC[gttE!2Դ4#';G2a=N. P"MO&j:wZy_7KBD-2:Vٻ[ IdI֛$%N4,AvIo_fF%"ېl%Id+KF5R4cmt>~֊@!*ChB!B)p ӓB!BQ8!B!6ϣzB!RD!B!Th"B!rPB!BQ (V@A칕q3 L8>ZplGC2&,Uy$ڄQЫ&%s+5ud|@R$F`_p4kTyam+8:B'#+ ںptrf;*'~L8I}.0nHAQBdDX#֎Ꚛצ$L{_fQóaTY| [vǏ*(B\a&zOs3 >P%>_^M |Ǎ^6!&y$r_6!)('ܥ d/6={m@OօG&jOhp x2 0/ RHp84$!}|AG>}Bҭd;%4ly<$$\-d=U,mp?%Y* _b)SڞB#i>*4BT O>!# <hڬtttag~#C|_y6?vh ?M66R*.Kkeww|Yc |_|%KĘ+|VQ>C 4I7%JFO^ЫWY+z>z͛*<=|uWK8uarwdOIƵ+f JNUzR 4ׇZj#??J>χ@ @ @~~>BCCE Q3.\35 S &'},"ѣG...3f \_>llU1ς͚5E5_zz@m?I,ZTtŘ 66\tG"<t,FhmaeK#2qPR9m3ëWpU4i҄YߤI!/`4 ۷sά闩>sɷSM*M[ `ummmbE%c> o-=ļ@wV6;ñ`\8qсsmVM[`L\#@cSQ;bѩ+&N?DrEڴÒe8>LW/kE?ET7]ra7aQH0^ lںň8(!Tv*51N]`ogظ8ܽ{ǎŪ`ݶXHMM[67lĕݵ:::% U^5B<ѯc=I G{e\G,/[V,]mmm̝= JU$8(͚6;[oe2N(YE("I{fxxBUQ޴y6̟7w?g~6xx$7(!& '=zya``:LmӧOz}rrrDW}\=}{y4,xaҪYmA$ݼN]KWtҪ>޾|EjԩSWAa_1m4ڵKc$}+@M?6\#q>C !DEpDINn]ر\.iiiHKK l¬ J|: K潦fMZl=&@$(fMq#Ȳ7ܼ1ACC_56ڔ"F^:GU/%&@Mԧr4mBO)fq5\vM+$߾3Sr;vD+ed tRtulcldWK)&aw>|@FF&,(UKl߼֬C^>c//[koÇv,_qcXQ̪HOw ii,EϟQF P+5ž-Z͒j|RyG2iEt) }4z`ok[L} £;&M`?!o|~t\G̟;k Oa͛a7/)舫{x5yx91]:/U*e+Vb EʝX!yۃΝ;9s&&LPDl'HJ*='0n B-.X{dŒ4p(!HB,ZшhggzѰpD}ɷoV'.Aܻw+1]BHi۔ƈ:yc:dD1ysl* 4{sf8afϝ&L "11jB燱c*-@`QAf|j&&9rjE&`@Ǐ/(*ڤX7=/hZ8w$ 9Øjf(#3 o߾eӃ^ o- &$ڏЍ6oC}E.\)N Y=؊k Qq7y aTI3Ñzp_BQjM!GX0J9S'pC4! 4Ѡ;BJ0S4ϣ;V";S}Ԭ7B_[Oj&&=-Kgj1WᶄCC$g444W78<oҤJx7/?"Dj"6&J{[>;S#"pHwF72G,7p3 UUƤ, 1̦"̬,/_d;RQG6LL~`;BH}l740Ҷa_YLM FxhՒH!T64< !B!D!B!!`C5MB!R `qMB!B!%h`&m"B!"D!B!BCS<®,^b;RC”S(TVS9BڡR9BZ!O؅i"B-m]8:9 Ýdfe1s(ʅʹRʅ".UgzBaً0:HAVMira3Gir|K q CwFiQLU |3Xhr[B!B)UA9In=D?x6WzuT^ B!*>}[ɰw@+KK4hyyyHH ;;[hii%`IYZ~J2+&B!T~2'=zAM5tttд9o`>|ϟx6چy8p~>$A%^>Y,> KKKhiiBr|<ƌe+VǏR… pvvCS'#EGϨ/g!&S)V2zz^zen==q-YNU)ɸkW.cͪV+\UEM>ΟI&aժUŪUDb"snq4c/=x5/[.BBBtR9FHT#g3yz g2aoPnIH_>ll%-mpi 2 6\uŜxmרQ-,lbD;_qGްsG8t9!qȲȣ0d.|6pvZ uօvZb"(mݴ]] CC >_LL d;O‡ڹ (.?|r(P>CAa9Iꚦ*0 /SM[`L\#@cҊ C ذy B@m܄}^c_׭ t& v 6nނ],;+.!!"˼q""4Cڵ&Qq"DE.n[BML&iڡ|"+ R}6A 6дb8qFCC̝= =ļ@wV6;ñ`\8qсsm̌a9{.nJƜyf 404d;4Ƌ/`dd$/^`)"" Ia0?%GIT__%>\|r4P>CFYDjToV-[۷"˄ڻnk93gz'O`/O$ O6lDԌilמ0~%GHT=jժ̬,@V-+ؓTug!JNڟ &Oz&=zy>''zzzCCփ؄N^y ۡШQ#dggy̲l4jԈŨ*Jc;wlMMM%GGTŘGcێptqsñ'0bPOC !D]=`PX$y|7dr+ReoldWWӂSfV-XU˗֮YoCcL:/ӧ?Xx1MvhD clް:::,GKئQ#GbntpqQZm3_yiB<077ǦM䤴*Jcgwԡ~q-VE]D5 ÐAKST~Dz(+P>Cý{i&)ZZZh G#-Grrr$߾{[[ԨQ٦`:dpۻw領!l8XbY޽ѷwo* ABEi,en\*7н[Wԯ_"#g*3y'mV 8;;!#3 >dӃ^]8S;B!e}[+6mXv(CQ`G+f&:!5gimZjah$P!(Cw6m/lpTq&B!jLʉ!Djjaοd=B!BBU3[GU3U".Έb M'%D^tutq)&0b/^DmɇJ+ i8J; 3D\5UXL ޑ(5ѷBCCKP(t jՂOߋl#n'2iRRPP~:x<x<RSSYBJQx!sMdOIxHMMdO޳} ZZZֵ ={›0i$Z Xj(JH C cxG%_ϰefI֬Y3g˗HLLċ//خOʐ(`033#Sh'OAAAHOOg9jB)PЧIT^-7Ǣ` 2 ̺"mg8addc`9=u!u|흜.෰ HO 0n,455ˌYl)v Ǔtꢃ3͞== ?+W"p|e;uB%1}ZKcڵ Xv-ۧs}GwoihT'iصc6lڌ{У{wC%1::[WWׯG-m6Eԟ"4QaA(Psssf;T߿ LQBw0$ @ mwlؼ!AHEHP 6nX ;+3fax.Ϡa_d{̛/a Hyv(3֊ڴe fǕK18r|>/].瑙fM,kn Yb_FAKK ͚5СC,>!!"˼qI*OUdmh٢9 |=|ؼU>/_POEiE LҰ`333ܾ}< .ĝ;w,!y}?Ƃ tpqfǂysBGGN\.ed 2 ںψ/w6 4;[ԬYff ce#n|+. mmm404ٳ ^ǏpYS$a/>}СCg GzǙm^x### I*7>_ ".`6/??OKAAA;v2q>V`GSvaܸqСڶmgϞ1Mx<d>!U@d_>>ļ"p Wq?UtowJMM>i4OZl)^__oPZ{5j`pu";XfM5 4?#1z)849055Y֪e D*ڵk9s,Odffb֭.N^[LMMFFHz.35:M7ơG0t #G`hh\GG$^?:^޽._"66?3X8uTZBŋɓ,Rʇ#))m\.|| r8?9+WڂX|9Hyq9_gΜAڵKFOEi"t9sr4ڵ+v7nĉ믿sNf#вX}BHSPhy!{x5yx91]:wf?!o|>$cQAXv c//[^>흜 lF.^v1q2c'>Y5l/âKI:chؠTǛ|{2UyzzRcB*j^ 0J{^ | (]yP4]՜?077g;WZ!e˖%氺{.:~FY!BD5M*.bcb͍PH%)|>))wPaeEȃ*$)) ͚5CӦM>`ee+++7pp @V0|p#44ȈCx%Js7:aBbtMAtU)S ,`oo駟&RC wwwV#aE5M*δpRV4Q \rN>Moܹs000@vvvZŋc8*;DB @ԇj!"ar_/** /_Õ+WJ@ `^طo88f̘BԄa8J!R J򜴕gѢEHHH` 4kÇ3իWʕ+ظq#S:~&D}iԥB!r>`޼yH&#FI&1>}ߟ)Dq8?^^v$i"BWbXlVWv~aLA[n8vSڴiS &B!@n}݋GoN:XַofΜիWTQ i"BǾsvhǎe UڨÇ"-[Qg 4 204.LM~`;RQ'i_U(Ixm*}ݻ,Ā[lڷoVȦpOiR߿g/ jDd;(ESմ p.UV5jTfff*)*ӧIJ Ǐ?8p *4jDW@Vl!?QULlx6lZnv(U6o ;; x߿?бcG%D'e_t ;wfb#4BĢ0NB"5KT`R>sssl۶MPPKStSN:1Lxyy!**JdX$=BlWVUӢE ]vbS$''zRߦ={dܹ3"""BԎ;p5#$U@c@B!U}8۾aaa"͉K___a͓РAecƌ@ ۙTDDђylخ={a]{%(Ek@^0B^w]?9Gy/I]pU\gb ]g,OHv*ԩ= wwwQ#0vX 5h Ĉ4닊b;L6vd@GصgF!Y`\ȣпHaON£0\1wӿ8,]]tx_B0} B^^hke,O38yXd{JTAAAf;*<۶mC->Ƌ/zqss+/^  k.xzzQ2iJMMv-mi"322p1hp:ìCvF%s1& ^ظy }VbFƁn=qH$s+zꭥkVax ~߰֬)s޽E=70m777#DZ3~`̝= ٞ?!SPu k|}}T` )! C18s "jlO}"acǎc,f!URҰuxޞwmXhX{1o404D.oJƯ!0`>,[[ 7%B,~b/Ł W^#l& SaimS~06Fhf֍a>s6ȨvGѲd;pM sT}z{TT u1z{v>OH堊M>>h޼9kPPp7nĩS2ׯU?QQQL8SSS̲t35ݺusc{)]ܘXN"Ru-0bP <ak.ahh rb8:cAy#}tv(:55 N\,S MM|aU%~ aŲӓkL(C M~oa ,?!hIÇ㏂!cǎEƍ*z)رcaffM~Gݍ=ژ;w.b߬YMYҰo>1c!p8jcpb 6o*㧏Li_Wp1._;G|F(lUPKq8}'"`DX[ ^wBtv?by??5&Bib%Q'jٲeݻwlx<Əԑ vZfYvv6>}N:I}VZ7n;w/Ѽ[r:J]&/ׯ+a{zxM^jZd7*Rhq&t̼~# -4hc.^!ˌUH~=\HSS|Vd7xyz550~ƞ;`ll@t0o|>fϛJLRٔY?!}`UdLĉCux *$ʮԤݻC Y^Z5iF.xx1m۶h۶-.##8y$`ذayj(BjBΝD LΝ;䟧0g$&~= 6 p9>x22A,Y ?M3gCfMu---NI]q)&aμUv@~MFFHz.ۋ4+Ϙ?fLg n-[_~Tػk'jԨaŲ%".^wR?N(R9H;R=,==w;v Fypu!ݓ0p@p8DFF_~Tt3g$dhh(Q󼊔' fffppp`=yYfr(AD;3f߾Xz5Fψشe R܅vZppǚU+E0v,s5j4 :0;9Aƍ]>Yc6\G̟;k O!&Oc7>̑B,zYۻn tR9_|AKKmC=O?v¿D<|?!UfhM@ aGNJ}PNV;wƼy]L_25ϓyT߿ T!$C\މYߩ+:ut-XC .P08Ď[ƽ{7w/vyZ+s݂+u0Io +B#a[iiQ(z;*~(QԩSp5@NеkW6O2ݻwO)6l؀)S`ȑ΁ejjʌ ,,,0fܾ}s8k#ڧI (B19s,. e; BXA韐ʃHJJb̺H3GHHRI牊-v(R+:Dс$={;v0V0k =4xUuh$!JIzɓ'عs'3$z=RdZU',ihh >>t)P=;ooo?Sfddٳg4ϓVƍK9hѾBף(y*0CgWuW\X`ڴi077T5Mڵ+g033۶mC~pQ zfjB|3q/!iMc"ꧪ)4 ox<|>ƍWTTv$>R%<999WUp86177ǃp=,4%a Ν;#FPja_T: IDAT]]\A'77C!j,E֩v%P'i_:u{mOi=z% 5wÇ)$WZ_Ǐ3<}T}=^(Vw5jԈsMH&MX#ݻyO!8EGc/ej2p$ ^|v8D NmJ "rW L111000ɓKk۶H ĉp86l,,,}6 scPDyyyr[h߾=SVDEU ?D֭5B!j[nݻw%救Fsww;h{ݻw/w~777aԩAHHf̘5kOaÆJ*Ç}a OWz"""hҤ /KF#BԔ q_>lmmzT4 :rp@ӧOիWc:u*~W̙3rJ^GeCȻD*qƉܲݼWUp aB!D]l۶ *=|qx<6m0$yuA @ `ʕa^E YBExFffL:E-%%EU'<Ǐ/O ),4Q!Bd#`oo Ǐx ݻw͍)D ̘1N)HQmGU`p8Ȑi u'|x N$D!1s$UVśijj,'T|⼼)SpA :ѣG: 333gp@ϤbE+D!1ETV+Th{=iv ''';wжm[AAAHMM!U)¦lRi8"e{zh?OS> h2H_Yؾu PU($M/H_}:O L`mm-s111쉉8}4~ȑhѢEܹسgۇ#F0G)S#L> eff"++&hS 零Hfu̘1$/// >Yv`Go߾ ɤB7⦦SRϩ$ y Y 2Mm{?%Sq=!RSӰ|*yX͟?VVV܏i!8y=U~^c]YvF"ѱCeG /0eee!%%K.pqyjٲ%s&MݻXp!x|@ƍ%޿kGvr,\CvFnѫp^qf]iVw,>D^hg~#v 8 O>st¨"KA#Iz|"i([.+`a􂵝zzC%9y4.\ݺbUYV]]ȲII8~<+4%^S4QfQgaCq\4GA 𿵿[X&3f۷oXlttt$ڷk+<.4׳y6xzBy=, W_[X"l&\eIW}ET6Xt芉SG"u{6dr?Hz}l]Pzue6,YZ?۶nӖ-=W.ȡXSB\N\Gܹs>}x"Ër\Gf?M;*sqI aAU={ĸqT⦱I&1bx<,Yg2ŋ"IEJS {ndffbAAAr=** m۶eslԨkfMiy(4}?Ƃ tpv  5kք)By8rͳ :uzhkeukVKt ;{ ~}x1ǎoSdp:jb?#.>;lܸ׮]>}Oe:yJBk'y]Opt6?g6oʬ‰˅\̝m%^cYӦcpȲ%o%%4!$uVKK^U^ܶ;EwtG%[t \hkk!Ξ+}5kD۶V~V͛Aj`gk,OMKCY&oE)HQygTs(*?&% oL)ԬY3[cƌ)s.]&'O)H]|~hhhLJ?88/__8ϔ$;OOO ϟ?Wj3KUQ*[@2 9^Jq!}jjPp RC{ymİ8x(ݻ֦\;@c@M:wFpbax4tYcy6ZL?rW\\&Ob߾}P0,gyEk'y]{G{,1?6\Gm%+XZ|ٿ+w:+%*[/ǰYfok[bV-[۷bǠl: . :FMp_ݻ#1QiPuJ;RTY;ʏՍ7Uu+++i޼9гgO.!$${nT^@Ź?:: .K._88&҂a(F8""B.MiUS C |=Ƃ [F>xyD\WbD? (ͯGw;~~уFc5?01ԯ_ѩ+͛ѣ?>RSS1br$!͵ɓGVUku u]ERCyء~6\q \z:̜!SQygTs(*?V7OU$ i:ѣrfn9΀FD,(MRTlʵ`ޅKD1F cCsUTcc!KD PD#&"_1̑6T=<23Y^͛7`ƌET&zϞ=߿?shѢN8V'NX!J+?ܲ{Ry=l 6mقl;8Q0fH,];ca:u񦾽{ᇽq?CޯL)1\ƏC]kkͽfff-ŀCTɓ'#77-,Xq4]]]Oŋ*/$WSC$Rpg'yaV2ueHx Β^{0..H^$].섿 no& 7ƣGVޟ ˗/q988؋9Fa|!6n,>明~n]ٜ* >!TZF%<}ti| %MM7.$/_ I+L7F\?zH[?_HRf} –s,C5:KzzaƎ_ᗋ_.^,Uq}|.ծm[ĬX __L*Eذq#6ռʟ}},94=fEVRJ^I ~vaʕpww7E–|Ԍ3?Iիq|Py.0{lxyy޽{*- 7o4 k LG799g\4?,AѺU+D/ի1g^$>>xo8qwCaͺuHrU-,Q^1ҧw/,^ޟ4ǜ;[tj~cFļ|7cӧayx!rr'=vnܸ#F_a46m..g1"B~ 6aĉ7LN`l~7ԯ_'Lǭum-SXkuJء=?~O>Y_ G m SǪ]hZ!fJ,JV;MYshz̊J.C*}C/ׯ`d2vڅݻw TW>} t۲e }W1b֭N9X=u-lٲE|ޭ[7nZwAW0/!QWs8-U hح[431Sy =}u u%_N_FDLI}M3vEԹJKKCƍyӧQF 'Miiiؾ};*yͱ/CϞ=غp׮]Î; HЧOԩSZ/ۇc{'Uzk.R\V{\H%UI+Z8Wح[J}LUyc(11nh[5g.15U^TPnoL]ƍo>\ZB&[$ z#G ((H\~1tرcxzzgffE*d2 OOOc7z%D}WWׯcǎ:?n$@t*Cy} q]mZ?ŃLԯoA`xh*g1b|RRR&LݻwA1.][moڵhҤIߏ` !!\wFCC/-4 S{o^ L&7Ыd2;VpL^~}F y4im֭ $Y7o֭[(ZF |'fffJWc H$7q(e͈#T\qRG=ͭիعs'L&S)b)D4{Aq4ԪUK/ KF*e{ŋub%-,,s/{>55UcGD" 0i"""*޼yUoootcZЂUG?#D*003f)S 11 5jywwwܽ{We۷oq]deeaر=>4(8߽޽{HJJM˗/ jժ@y,ۿ?.\ ܹ.## -:333g !2yu)胩H$/0 &`gg'VT?3>|x-j7.|20`@{WZΝ;;]/V 7 $@l֯_T \f͚ė8urC1 yELXTJ\IIL>#3U,,9#+Μ:UJ8|0Ο?@1Pt]F=;w>駟0>&75*ʕ+صk_~&={xlgԫWR)sͯ\$MڝU;w>E6:u @Moq{F ;#$_о}{tX&X.AI9&úy& 0I&*222QCEƍ߇įԨQ#c`rL1vQ!I} :ܯ^OҹeSAiiiؾ};gϞ.t۷lTSYYYرׯ_gT} O K9a*3d2.]ի  ֥&T{U*Ta ։'r5cLa)\[8ܸqCA߾}ѷo_jԬ [xzpe[lx P͛7accwCCss$2q˗/cE I&ؼy3tv8ԩSQF }0L1a*FӦMş |;3g///CW.(JKjĩ|%fx8 s"#!J0a8GDT\o-7u"5-Z,tfⲡC!66Ç+.۳g7w5k1@Bb"Νŋ>3 JѴiz&vh2FN$ ДJ'^zla2 H}}:uBNdž !!!pssk eD"{w+3U0g ^{{;̙%è4#cKܹsn͚6Ef ?I0"vغm;GF)?Wѱ!EwkR0Ho $4gΜc#FhÇヘ&LFSUV>a7,Pgb-|!l*co#&&]am3v6ʟ_xɅmk]7(@rr2mڴA׮]k.z #F(VʼnkKݤÊkBك`̐+ì#Ow?qC&"{^a?T<9J5{Ʃӧg8p#G4X8Q U}Eqxw_s6>St iРN:W233)&I'_03)xt̋?OBHHޮI䀱KSѽ{wd2DFFBСCy'O;r)--B&LB&1a*PoӧayiWĸ[B(w/:u펶f5bc#"*K\oiaawagk#m>٣n=qyȰ»!*s@۶ذkƢYs?{xbҥx z.OKeZnTbΝb7 11aiG1njdfV +'YΝХs"@ :!"*oEP|߽{ǣ{nxvm~5Sy֭E_$Fg*7?36l؀1c{ 8Wƾ16U?VT.y%{[4Q<=|=41lG[SN :tȈş5I._\&cbyd,v9r$_&٣͛w^#E[z۷oǦM (&&LS̓SjsB\"*GVfMz @\C WU~Dhݺ5ƍ'&RCTTD >UT1v:t(;>}… HKK3vHiN"(rQe5 DT:qVVEne+))H|9R._FuMִiTʞa*G={asСƍ;$KOOǕ+WܭQ[L !Q w{xءJ:aei[nw=ӧ YVVMXYU]۸71`DDm6>#,ZȠH$v E=jxʊ3gbΜ9z;>[^KrYmI5,O*? lm?4jd@!6l &>?<\'ЧOq}ll,lllZ/$$}vLof¤W{{OקO;vL7tPC &#a¤;yISGDDDDԩ(ݻWLV^k}AI&?.QI .yDDDDT:{.pG!** uVn%i۶-fΜnݺ4J333n:̚5KgǬȔ&MDDDDTŋxbٳg l`ܹ/6l؀Ν;$NRd (w# @[_xx89RÄIC׽{wH$v!~7 Aٞ֘223RDD&vڨfY v  QӥK7۶mCDD$ zAgmݽ{L󴗑 ТUcBDDŸ ")lSrrXo2tX֝;wp=tءkyIFvv6v6vDDTؽs |}}+>OLL!!!pssS'55,un޼`ޏMyT:GDTv>'NĢEc,Z&L@bbbnjӑDVZ%k͚5puuEʕ\]5k+W ֭['+*7;w#GD PR%8::b/'OD```hjҥG=PF Xti>|ݻwGj`cc+VsIQ{Q;vă'.;zC,L&5ڴἠƑ丮0=dD/_ý1?œHHL70mfςnl@n]5>d+C Ahh(XZZ"99_} AJO~L8k׮E`` =zٳgcر|-[_|ظq#7o$9GPPPcٳsƍѢE \p#GDz5%믿bѢEz)Y^=<} 4@-gOǼyTٳ',Y9PfMMDDDeзo_qݻwߊ_w ڵ{,Ekd2;vvvzfBݿu&b*̙%sf0j81in]Pzu@//,ZJߺu FZ-[Į]޼yFϞ=(*|w[b֬Y'OYe]LL :t IJeYhҴh"Ġcǎ;"::_}zvJ[7nsi|ӧOG-s>|Xjz xlllTG>ODDƌ񹉈lkذ!f͚ƍضm|pppO?$4Qhr7;axJXpC0`tM}}ߺ ԩmhj'MMbG.] '99YL`"p;wVVVֿmH mUX R```ۗD?qMS(TRÇ5Meҥx)>LOF $/W\A||<ѯ_?72.)HPJ`B.$b-xNq˜?rW/jE\| Sq5Mؔkaog'OWظis奊09aϟcǎ탧F,,,J&00oƙ3g4*U///lܸ qmyzCm>|zxŋcسgK>sQФI%HJJit,4HEyo<l bĻ;8!#774ʛ+_1`hYOi7ny,3330_kb6m09rss'N<~`` ߏ޽{#** CUYuNWrwwӧѧO=<<%\ +Wh_`oo/>oӦ ~GL:U\?߿|wعs'>UDDDT1~~~tǍ 1bDaJ v3]RtP=O-[>,G}xrrr&Lx' ''/_sfm,B/266OHP5{8r :tHer5{{{=zȸ"""0e8p/^۷1bĈѣ㏱fu|N:/^ɓ2e >B7}t|8y3gΜ˗/ #44Ǐ/T^p dggػw/F)S0o<` 8;;E$0{<<|ryJ:>̛7Vڷo;v.\-P)%00Q~}̜9syxxҥ ={&޼;v,߿;;;DDD[n_~1n8ܿ/TZJƏ/ &LP›w U\\g__Z =zǪUt8;;c͚5hժU8p ?.PzXEOsq7&r:hC0E^@"nPEp9LxCiyp"dhжuMt;LSjo+H,<&%"""""*W$ω_^L"i6kr$4ivĿDDTZR@RvTjpIcADD%8u, (ʪ0cg23{޸=seV¶͛{~86t2Zʘ4%eyDDDD|w܁K8sso!<<mU[z5U1wkۮ=֯[#?BP}v˛V`="""")u 7oD~n7id5ySrssNIE,,,ŋHuy7. u ͡aCLK+ש)IDAT_VHMcCx`ӶX ˗/ѷCB^ڦݴXNDDDDT8]т!:_q.])SQn=HfHJEq 4_3gy8pBZ,P;i2Gp/\^cՊջkcw?aF]Si1i"""""в &԰0ܸ Ϟ=ñc0l0q;gg'lڴ /_f#r2Ϙ8} />##Gŋ!=&M$xt̋?OBHHN A@By% 3~+>w?t|:c~OSClٱGcF_LH/rJؽ{Է1c͚7ի1z(qŋΝpukѣ`*/*۴ns`~|4jAMq}@۶ذkƢYs?{xbҥx V0NT؝w 3Kj=*W,n Vk`k-;vbƍXk4ImH>Z H9tsۿ?rssJbffݻ.m~s W|]5Q =#nLSCKD'(TtMݖzMP`\n9hB:)$s@, ADDDD3rAqOꓨU84eܖL ZVҒ_/AUSھ^LH?BRҤ1m2i"""""Y&^ R)^EZ5 s!53ëW ]enn_4)IQhDDDDTU•x5gQ\.Ǖ+nUͽ[Xq" wpNPM4cўAfʃ1a"""""]qpǽ{sb>}fpʄZjʪ:f_}|{Wٛg./+4wh?A \41Q%""""qtt4vҨ B u5C)H%'""""""$ KI885 $y ^wKDDDDDTIHr$E"DDDDDD*T&D@)(J>'LDDDDDD"YycZB 󈈈fKv&""""""%ki*l9[HR]*к,[ϿL3rM\M޾EQ )S(.*iۮ-C?߷,XEQxyt? ѣQbXXl9|3u Y|9Vv:DSBTՕuv:v8ǨmOOjPy'0 Ό3AfjerjGMMYL,Y;!9>71[d>ɔє8mid06{q!N?"qqdˤ{B!N+Xx z[1pp>r/ uN,X?6oI<'zÇ`dO?|*Zj䧞fɒ%5juMJ˯La8~]> (֙:#XrlْDJJ }}6ۏ#Gq3lpN'K-+ҥKq: 6S B-*-G^^^|=w[V~w+~~@ykee?ٳz" +W`SOUv5 8Q 6 | \49Dֻ;̋/b9 x(/l6c/r:Z JA~\/}{(c|喻u8 Ο2p@?֯_By?rHh!73.;( {;a~堸0{zx<&O_rꋯs,/YnYYً-bᬏHH۶mA_*ۙ$$$zof͛r`"/QPj]ॗ^bˤ']~K]&~̵w1>NN{Zع ~(t݊hd%5(};mn/.HKMddf{tg֬I=zrʾ~XiҘtp40~.>cu|W4lPϿ2s;~}3u4irӫW yc"33,_WwoL&~8ݻvd%IIIԯ_+wgpVxw!_/[Fѽ /ąCUiPU"9z6ҩSG U|xD$ob !g{D>c^Ml6ьJN <=i23fJTT$nφ W_s<;#GРA / ZVX7yy駱lDFFҭ[7ЩE2}:3Mhܸ17S&a8'G^|1O(**"886m+׷YuhL&QQQ$$&އҥsgҏ/KpUrrKXf5]vKXx1.q n̞/EN5+?ƟT歕=`䓑 @zZ*.C'3#e+WCW3Zx1V2}Aa1o](&M4ss.t͊/KFKRQ{&Ъhԣl߾p:tr<ٌlf˖-HLL >.F !g  !2!!YilkPnLy//}nر5}+WU>fMVfyՖe ^CPUMF^NEZի#"шduFhΨr $2*Ŋj0y<8vrs;i* brsދoҔpR&NWxD$qP蜦eRIaI !=2AC =x@Qܨj!Zzϒ cђBgaaf<ܥM%y>iѲ%8,V iKN&2<-[(>NfBqV*MO,u+iӦgd3ٲe ϽtBPvF3'M ƣPFt݄<(?En>ir`2h(`iҺU+bcc( !uo|LBb"o| 8B! Nen)d~W]Buثa)%+**nv1XV1 !gSq9AtXVt]^\Lnv\./Tgs. Tcl]~`[Q&2B鯒ؗ*?FA3] !N/$B!BIB!B@t5B!BҜ^FB!BIB!B4$B!B!߀7)Mk-SJ}6+95i߹U'B!g[rP]}v$m@׭i||ÏݻbztڅC^,_O>ǟ~"%(fݻqЧwS}zUWzۄB!cPP϶d.sx@Qi׶-fL6n[39+a>Ӹ\.^}7nDڵxwJklhB!BBQ݃_He˸ʫңFdx 6b$`Q|rֿKj/dfЭkW11|1a$v ?Aןoܼr|lEn=6b$0z.jŀУW.[W_K8p|C{etޓ1W]/j;,\+x-c6b mҺUuqTSm筦ǏB!u&۸i3?Z{3fƍ|0k֬᭙O<=i~˖H[n˖/O>fM{Xh!.aL gVnw?g&OU+xɼ[^[ey=|>֬XƷ|iLy~juXb%y˘{۰}}ݺ?5Lz1/\X6V~۟\2';*5ݧ'F˖?gnɓy'Nն@>o59~B!g/YjF Oj>^{|wD:$&KKO[1ޏV߿x|Ӎ 4%K=VZ纼[j&twm6U.SXhcԥu|gF:ua}verrrKYbo6_{Ít \x֡g6lx6c<9)zI]С;v?U㩦W'F7t | :׷˹?}圪ms+IUlɎ!B!ǭ9糵>T~rU Ȯ]끒Iu]Qպd}ѭ[z^gSՃ noѼyMe/aFrrs%@m{|rUoB!BAG;ii?1=K.=]*զukoXu7T4 ou}!B!N/,=Bo}qv6oI''1tU"ǏB!Mn]/C>}$mS<>r8rn3]-!B!?\/B!BExp/B!B(rB!B7`u}FfB!B!j*:&w=~Ivs#*/UPMB!٨oLFE9~+<5Bq_]wZ!Bb=>&Od6}!8TPwZ!⟭L'B!B x|yBB!BTB!B7MKB!B!_7|!B!o| _!B!K{B!BIB!B㙮BSg撑^'4lHtt4 W!gpZFJS7/Wې訳|e}vPTFWrrvlNBbB!=܄pOH\{⪪s Ӹgm'Ίٹs'۷Prssx%hV8͕иB!8{Ni+qOIܼ\uuL|"ǀsy?T?xk6s箓7/{~e=e/ַ/+N*ƭK/`m߇*}7_'a qqu[̬_vyyDXhƨ~1<.ſ ,\B!?eo_MQPë@QWAEU) GX֓Gfu`$#;q 5`J\Έ>9fvvM۶mkTv]?@?I"( {&::N5|uNqq1YQFU[ƭ2߬Mp*:;v$11MQUUUQϬY`HOxv )SK `<ݻN+똝)4 !~)9^OO(;_We_J3gS醟700!za $n]5KMC;.zmk#vHx?ঐ;sk[ d[ꡇO:ս;q@M[S͗×nCpٓ=A7_@܃zќ7?9y*:{S/*BڵM&qײf_-z4(;Yasl*NVH"S|-^IütR򇍣W9+iߢ!G3~v.7vD1k3zq^`f/-[KAB!yQ\uKDٰAk9oPL0{;Zr?AIi4طopwh;&`6lXC<߉4kAd,|r7o.][8L Y ƣ?Đ!CۧO~zUJ:5.dqKc TU ?7vRr~I$?i,ƏFb5?^Z=c-1ujƍ '$$Mn؁2&*2=;hvN1ƼIi\7+.{[,+>˻;:1(ZK&2.]p{o<=fM&0{c/;YB`n]Ig; !~GEc r7bnέo[?ng礡%28N£xq\ykt&RmDtX5lFnn. QcXj$= *i$mDZ6 +,o_UQ 6mѣ+]oذa~`Ѐ꺎{m7򗓓CRRolO|ͶiӆAޓ8VвYAArspkA/Ku>~>q۷- 3])cEs+£hlݗ^ɱ]ii)W3&p ݺ&i"#T^fun%9ig"q5ª& R}쿌{U6n]!и:v`…kMl2t)h!ё؎af+Wq0lܱ=s\·yk[;M 8v`m[ hysi!AovVn=1[ =΂u~xG5 ƠTB!8ygO 1رkfra.Liz8I{mQ둞Bi=t9(ގہq,X˅d4Zuk&q՗avqa*eX>#7 i){O{`vhݨV V͙\t[RoUUI~I_:_+-\Ġ%@i| &paaa%~i; @99"o|DnA6ё- &  .Ub")g?D`.9fJQwbekˉax̌3x1{#xǘ1c_~e@epwБ:t9oh<0("7nh# 5}%w]ځs;5<^é$ouqk\.B ,ްͻ1X}{kvgd6оQ8umTuM4ߓMtMPK/9.f|o2EJ~d`ٸ*^~_٭>Oq^w-?(ڥ3rӻWO&iۈX˶[q ׮_t˽A" pHaLlվ͘w8!hԪMJ̹2ֿu[I?fg(vx0G![wJؽ{ p847A͊g&\On܍?:S/ I^xEQ0*Gf_korʳZ뎣DEEr5q.;nR<@MyelԜ{@;RÇ 25~ u2Tc|6 4p׺T6n>I~i^^x\y.bl2,(lF3{MGfvD WcV fDb0`TG}$OߎoJq&0R塰ή]x:yvoƔ)Sʽ6rHO^O%-W*~ő\A F*!<:nӍti?rŰ{e' Ji cdges*KVnǯIl8߶pn+.uI5~>g]kM[ٸDxۭ~(+n7(h%W#NtT8.{>u{]*z0p8+c` 4 1.`c9֘=x{<BҲ^-> Gh,B;. ~APh'rP *\l[X& q{%mP܌ 39(gYbGt֯c] IlXU! qp*t0vPs.;111$uh*J~wcSn'Oߞo>io@B_Q7Ta/]7neGJm60*\EP,иi9`23w^T6lHC U5a21M:vYyj'cf+  f` .Ivn))deyд4> #-gƟ jV\ F+~uSro$T`6kˍ\3(*,P<[|7F妨NAA+EUAA/Weֲ$/@F࿘:k17's@"뛉fBQ4ܘ̦wUWz7&i49)Qфd`2PUGQX0Mx\ VGԌTb!:UE7. vGW1M&^puk`00- 5]h`6[0*h÷#<4.eI`0r%]v ʟӼO(YF 6[.T?X\9M%>~={Al\#;pσEcZ;^qCr:ЂucmX?)cp>h,lVp{s(*$0:3#b=NL[u @&cTuB!*w$oZD6&/NpvMyLeʣ *V;3ݾ.<]q%5{)k5[r'|~+~:ѣG~F.p TWT藔hܲe *Vam ʮm{=I VESS!-:gj~mE("`PTμҴA0/{}[R}xk4g+{ ـW\!B=wٻ B‚hn ' -frَ}DXɮzn@:͢_A`1)OIґ{uoNJu6oތ*Xr奢)&X[zO,='eЈësd&F4ωhzBOg\=&RKߌFG F7oADU%==IdEeMbx[0U؝A8N mE&]w:ntD0oO[ΫHحAV ʟIO([}2o<kͣ_~w?~I',+Yt+eݲy7]vze>}+3?sh0. GM>6fWTVt+{K+x8r}卙35|F^n$nm_˸L8w*ykmkpCTOOМa`U\_ 1x TBmMUW^EQ/rxa.݌1a<2?+0=*,MTX+BwW{8ARw-gρ4:jNA\0 3E1lאgctX_!F6(-? ]+L+% 8QfϞ=DFFjEuV+}ܹۓKhb3ؖ [8tww_Wv_clkQc׮][JNZڵÇpI轗fѽkWnbD =~Axx8p|VCØz zEc]#pV(f#Vwc/D-dEI :qDFM۶m}ɛ2e ӥtmdW>_@ll<P9K0JX;7ȦUx4_YUVAJOc>q4&L$Ngѧ koɅcX*=qQb@؋lNzux^ +CLHp;w*:UHfzx} 1BP=(R ta&5a٢>*<%`o۫6[16`]hDV h8k7_WPewj[6-O1ՏyeP'g~osL˖-ywݻw@.# l{?,4vە'nШh~.̴ 8ĴT ǃj4SMp〖Ƿ\Mr<^uQ׭c zMNTxCk@IYxGso׎ qtLH <̊Uٳw/> 5iy%~ɺZ;lhۣӼq%fg>05oH`ԒǫfX[ .jEzuM !Fsh\p.fCQ<`StoDH|:.{VH5ӥvi(FHQ1d. 8ctؔMҼY㖥߾I [WxwiҨ1>l F`F GQrrr d+\ĉiղegviބ{v$lƠ>]Y쏓._1c3fL zd{Y94t޽2z ޓ}~?lЁ=|T[fC׎mXvSnBDxH@H4t*Y0=ZFF\xFѷNe*߫,n] 4nn]7kXg_&77ޮմIwqQ_\45@dEP`f1 ix̣dZ41QG#̟J#{HjJPjZ^Rt/3?e.>g>y;\iuuy4ߝwP@Lx67G/akzq{-x㹾PuDDDstC{5ըV?Qu<:kexxw>$9P`X~V7 edNJP Et@C74/}\xtr81_ЩcGOHBwun6(JoX1s1sQ#G`kF/2vU-}0e|g==jFYhRq?*unWH.%.?pgXŦs\ K6w]VwJkA︲q{38'P v?MY ""jL|+h ߶h6I ~;T?@w؝dm~DwY!<n+b=mBBv GV ('RDV &=.p]ߎq7 6q[-( cQ|0"DC)OAP|wACؿ[\,y?\ ?ޛ9۷E%"""Wa톆q妎PL?7ޝlϗs`o :Rm1@DDDDO!D$uD@DDDDDnJ:s=Ë>\[ZOImߺE """";< ֍wh}""rmqvNJGA^]ϞuvdCv >Q+&h.9@ a<9T/R.]ub);\9@,%!2 ""%a|+%? %RR PZRbrںkaCt@O'Of͇Ahhb|d]յVD58wi\>}hQ1 襯WãBkWipm5=\ }B}>Rf6mڌ{+0畗1d.]ZW_ii+/wL|~#..6fw"4%[cw[df ^k ?PT(++CII o߁9i]={… bK}8|X\KOƧ]q; iPwvƑ#Gq=-k(ogNnݧ~ik1"##pyMy /N\xd(>|۷mwEo˗mv Xם|<|j7|k׮ѣxzzb(%&LxW^e˚]\09L2o8p'ロwt.[KaaaX֭T_~Сر#ڴi w%"RY3gbk|;5k&J6)/- ={@v CUU^7X7ҿns!bbѾ}{D\cL2fe| O'B]O R%_P dL?8gs@D3t(%%VŒ㡇zh0f8+{prl-Y;䓏t}}}-Bt@wz.WWUUH~iDZƩǷICO.0erCVJ4t1Z\cǎSpTU]sg/;PX}샋54MQ˫-vp!'\K1|;s8t0֭[X }]tM?cΜ0x鶗` Q*4$c?!O<{1 l36e⡭'ÿrp1Lwl[%uѽo亪*c~ƽq߀{6Xw[Xw{lۺ>N: A^N&")ߪ;VDEoU'Lߖ]^;t7fc||$p׊Fs^~yuy䑇Uny\[\Z[;uiӶ߭FiA@u @MM-JKmvgHNxx xoj2}yy9mzsT mW^CѾ,V_yy6B 4F(//wR\WexѲ9D$& 3/twbq.=mڴMƙEQķV;'d `ǎu4suD|P!",;7G̙ZZpAWիW1$yP0*>ض}ƍcwowog0$n(8A3A ţ!!C@U.|䵖z-MҺ={ox}_W&`O`={1}4%"j/wE-~6Ӱ:eW/cZnM*?}\\I|p{'3bرXλ[]> 3?c =z 'O2Hcd}ibq[X~W{ ]X~wߍח4[.W$:u3goG60o0jTlf ^7z!xyycժxu]vx߯?DUPœz-Z*+>Re}Kzy}xm?pk&'~.N rSE|}Dr"~A<x##&&_t|"<==Rп?36'O4dR^j0d>o0݅ؽc(de@ƼT ^XOQx9Gl5ߧG²eocFK<""c-hlEhRoW_z -^AϿskR شy >0޲REP4vW(E qNabG 9cfΘa^Pbeֻ "BBӰoIaui^?(v?f{hw|xѹR'wum e1זދ4zzb-%v-M)e_:yZ*_ N%"Wk hToZ?uΞ= o?<{)Є bҤ-`[Unjjd>~d;k;wֽ"+uۜM'AppWc``-iL4 a<9io#Uu""jah7hoVř3gヒO<OOO4i-k׿Xh!.ZSN{P_p]w=ktKuDXx/=4vOu?˗/λ?|:t`wxu&ԫ?QL؂닝Mr/Zò~-tDD$΢ clϐ']Sk2E]qwfqN ̘on}Qh+6Ԭn~E """7cwŇ#O$<ֻK!# b:v99ka< ;B%d s>(>t _0@Ddtv9"$M} ҵ06m"o_KMdOS""OMp ITҡY}Ic޻ƀl &hus|""Oೋ>۱LDtSj8z(:GO(\8@P\ͅZj5֯_/9[=zN)Ν;eso&Rѕ+W0g^^^ĺu H\iPPFe)T`.:Bm1[ݬXt^ P|6g}aʔ)FLL كǣk׮ҏ3<555ž={'=Nuu5ƍUV!::˰pB,Yx=nf֮1x`;v@nP\\yaR4DDdJC?)gyPXPҒ#"d͗fwt ///>\,yn쀮-P*peUxU|d;@JJ bccHIIAFFrvv6}SO!;;q(a׮]G֯Ѳe,ݺcͺRb)W""2Oi11A%f@\hv~9Fira[>|WRď㙏k70`4\cqLPPѣGۇxuػwdD,_vO2>>v-Mz\‹/NCxxUMZDZ1ZD~(m`Aq[UaP4MrhϺAAA8wAs!((j^R/((Af"@PTXz5"""퍈|裏tiR4DDdBǢc{Jm#{GN }ĤtI$0hŚt/~W߯@+=,8P(7^Lׯ7wH111F_4}/%r!""<lQZܛC@qt>(mΡQ^^nS>ri.d?õ0-w D3 ~@h'o80R% :/^֢ӧOǼytif̘Çw޺Ǒ-^بr՜\ dݬYtĉ1cƌK#%r!""c ^U IDATE}caKر*+/m3Rbc7^7Mgnb={ԭMKbS x]4^5k׮ŋ'Ng2 NbƟc€`hgcjtH7uT,\EEEh߾=j5233usfu]3331k,8q=z@VVV>k%ʠ[51d 0/ƌ#G@Raر_I\ib'8A/v~vq@j71VPZZ$dm_z}~?7N?i&N'MFp=,_W7G&Zx Vnt(/G@TMr΁M~3ڴѢb?ԩS޽;Eo_Yt:K0p}_^ƅ86D|QP~z}i Za{w!O v6GDD&p|oqۤ=w=DDRC{$z7o>&O4y4w3i&SQ%"jn(~w#0lMשT]ۇS(h`}Mߟ9u BCq)mRZٲDD$EVk> >&%(D~MDDDql}܀t 5zy(:ô6ѡ UrBq? . *z]Or®lfwnYKSUW[r>ƃ\'(D[i~*W*jo1=]NnFy;mQqt ?FdHx(V/# b:{fvWŇaoqwy?T vs-ka< )dbH.98(4O=_O~zÅ06m"Ui*%c4>رYD󙉈 "ehs(""""""VP@P8,>Q/R.]uZnvWK~(J AaAJKJ0-DDDDDDD 1ɞFAtL Au85Oѯ=^EY2y!77j^^^PX~}=5WHHH@TTe5g)))8ujjjpI̝;#F0^>}3///c8xZZ"ڵ6m䲚GJ\ͥ!""""ruuZZE XNcb}} 2T*u* eeef9}4ϟ;wr̜, <ݻw׭{LOAKaÐ۷oG\\2331l0掇?vN8Z_~ݺu/M6Wsimm]lsΡgϞuΝCPP} 0h |d3vZ 88>4JߦMDFF";;{wtt4~glɧD<̝Jիq= ==]r>Rj.-^""""VׂogSnn ,tV4B}m ,4+B~~|DGG~Vxxyy~h۶40|ZZKƣ#%MWsi\Fk|v+p .^a}öT~MX+6k)3fŋeTUUa˖-XxQWioΌȑ#1qD(--ń  6bڵkr ۇcbҤI4Cŗ_~W7nԍ%W\rfBRRQ<o'%)q58E,XrUs` BRZ,e-::5kN8=z ++ wl 3ІK.ł gϢk׮5j -4iϟ"gϞHJJĉuiN ۷ZFffQsRq)?` 3f 9Jcb޼y6#%OBcGXh^~`uMii{Xxս1ͶJHH@BBXx+抇}|}}4ibcc *͙U4G<\\GJGJ\ͥٴq2$'ٳ>fvKӽZ<fY,KiM/4DDDDDDD_C 1[U]Mg|x'""""""2TW, 78s`흈HfrZ!BX;[($<YaVۓ'IUW/Z-PX/RDV Y#""""""YU :?FdHx(wB.F@@tZ,#""""""rwQvd)?i1VMקo_a%͒/هp-!L=|gz/d3?9B|>yx۴q@DDDDdZ:"p >lE;GDDDDDDJ"eȝq(""""""V.%?@ѠyY إ P[L.DDDDDDD*v̱WC Pb'e-PaAJKJ5_""""""HTUhAd]bErEQȝյQ-?(]ODDDDDDdOA.^^Z\1=77j^^^PX~}=(v #vBBBѮ];sEee.B04u̙3=z􀗗"##n:[BCC1k,\z )i\EsܵRbVQQɓ'#$$ ARR***tinܸT}֭[%'QKq/kWZMcjz\;w~QF#Ͻ^*K}aʔ)HOOGyy9ӑ"eƸqj*+\HIIСCqa\t ۶mFȑ# Y~:/bǎ|2Kl2$''EEE(++Ë/h4a:O4 ?l>3 Baan}W^y_}6n܈K.ᣏ>BFFM׊9)(Z\|۵b+1edP|6xu|GNK'##)))EǎI7HHH@TT,eǞ={0~xM6 Ò%Ko>ʷl2#++ h۶-͛7l߾C ARb #%+hǏc˖-6m,__GXXڶm0|Q#;;Fdd$#""""TW_([/WUނ/,q|~Z[n?>>`]|||8RRRp)ɓ;w.Fa0"""""WPup AoC~]p;tp(eeePTT*si̟?k֬a%@fBbm6lrrrPYY\aƍ4ǎÉ'V^zaѢE1{TL8bq(--ݻ1yd-%fYYYoн{w] KOgEii)_RcEFc.i4.H_ O?=ڡ<˗MFaK݋Gbv[JF'LQSS_~SNٳgm>'""""P_΁|gcR*555];_mFff&f͚'NG}'1HǤI0|={DRRDjSN… QTTCV#334 /1cȑ#PT;v,͛KJzeh4qꫯbf&H9-] ,@||<Ξ=]bԨQHMMեILLĸqp1t G_|]_|yD;[E+cΙnel O}i|2gA`M鉈Z#*Rgۙ6^-DDDDDDDkBCq)y*MGDDDDDDD*v֘l|ݩZGDDDDDDD7hP >]i '#""""""2T7;V ᛣT*Q?_nvGJ,(8|!%(W5 cb K~DDDDDDD~N=[ϟ( &yyyzynHW^f?[ U/qeA4xoNC 7͟͢/ t}>>>"77j^^^PX~}=~i!戇B0z슊 L<!!!FHHPQQa9ܹQQQ.ck\l߾=.WUJҠ.׿G/vয়JR%n#@JJ bccѱcG"%%VMNNFBB.qf<믿믿0maaaHKK3tJ=]v-őx84˖-Cpp0mۢؼy\kw|B-:~VV^-:kH-Q ҥ <=<Э[0y?>>`]||OfוYscذaAee7t쬬,|7޽t\="׵رc8qj5|||ЫW/,Z555v/1ytϮopx#w սٳ6I|MNX|9r|2$%6lнFbb"K/aذa ??? <<Ǐ̙3lPɿujENNz衋ǥK.qJe,&A"P@! (8b|'DDDDDRx̢.M]qVqyH5n;qXh1OE2n⃂p9Sܹs 2OAA d^P<jxDGGk׮EII sJsZKIRzjxs=T˱x~K*DDDDD͠nP}Alr (/7^Q^n^v l߶ݑSDEE!??`]~~>cn|?+kx8pB񽽽:W%׹s1}H^PղJ IDAT)Ov* Z|΁M/3]П=zu iFRoKf̘Çwވ={xb[[FscСx饗p>}:͛gӱG'7Dxx8N83f`ȑ6;'r]k)if͚$CDDDDDCc&cΝ5xon<~Q&k%M矟>DG~:EZ1O? L̚5 'N@=ϡ|>Sb…(**BVXtR,X8{,vQF!55s;hxj_"4 /1cȑ#PT;v km*Mڏm\DDDDDͮ~ }>bN5h{S8w7ݶ1>n맟2p!x{{{똧Q @BB\bΚ#L{담492*[Ek-5M\\$ϖ4~DDDDD-F/,BۙӺmBΜ6|[-71(=Q`}73N9uJa}|tRZ.ݣu8ւB${Nn3a:+Q@h0S'Bn{͢}fA׽/'@/' { >h4m|۵ӭ3<\Enn.j5V~z=zz%4+W`Μ9ѣuڵ Gvлwo̝;6OJkqCP\mݺ?0|||Yfիft$7n@jj*퍾}b֭yHICDDDD X׊-t?۷oUUF |s?~ UnLo>L2(//Gzz:PTTd7nVZ%rׯcx"v؁˗/#;;ٺ4))):t(>K.a۶mh49rM哒FJy\l2$''EEE(++Ë/h2/G+૯ƍq%|Go5 ip.& [:t[:t0Jt17q57n/bivoJFFRRR;"66)))n(skx,[ Bxx8ڶmcͺ4{6m ,, K,}l*4R %۷oǐ!Cо}{T*Xyyy&:׏?و7"##j*,]j"""""WЛo|`ر.i44a]}L-Vkp".63ƞxuػw={+IR4W<֮]iӦI. 8}4RSSgSӭ-Mjm8IL:ő1RVVJeNR>OfVd\8vN8Z  -BMMQZBbʲ|RRg'Æ CNN*++u_aƍfIMMĉ ק~>,JKKqubĉ8w4DDDDD1 \BgϞK[oD:11˗/G@@BV\@ //3gQZQq #$$3gΔ̶lذ7tD^edd@_6X/W\aÆSN9r$?{ՕSj,4fbGAixOAs:'4xk4$C.D1al:朓fF $*2m;n!h"XPE**~=~]k[XkJMUϞ=]MgԀ:|Ū˗.ٽ~ҥe\id;~y/k_HhhL$*44il?~|W SQQh]V6lpX=ܣ[p#)nӧ;_z~ߩXz{[y5ZbN>F} ? 0چ]nҥ/t:=CNg;}>֔*"rd+bccUVVfwLqqqNq|O@|cvȏ|ݸqC{v+>#e|XMMM:wΝ/꥗^rY^.Ju^Ez{alk2SAA222tY >\3fL|{L=N'N(,,LӦMӲeleҔjG#FPzzfkF3RH<|̝;W+WTuu'Ţ$''A쮭w3F155UӧOשS4tP>lvYƀ?$>xAhW3RU<|+Wx'yMIIqHn6so=4"B<^R@^}}=M] v]zI/foU-mkw4mk"EΟ3Cu nj8mK mշYY[ZlV`|v`jnL&g転Gܬx>z.>?:y$F={YVZKK=vZM|D<?W0p wEGFf,]mCm'%(ͷn;JPVIe%>!|m\)^s[d ϔB>:ںyCZ1}P >vzIdI&/>q_x% < KrVwn OKēތG9~\h ݬ$Y=x^qcǪūqe}oSZ[]u/g>ɞ^|׵ =T[[Z ׿v^|Z4K3-VGNaVuaw]gelv~۶mX,2ͲX,*..6|ɓ'c^|L&ڵKN鬞;رC?էOEDD(##Cׯ_w;@n>ѝ:W0RϞ={{ըQd544\|YgVxxBBBtmݭu}VkZ}f|ήiڸڶrj*lPǝeTUUiΜ9ӥKtUWWƍ>}֬Yc3ᒯ ؕ[rVZi;[233ueUWWN/1Oaɇz4qD=zTW\ѻᆱz%%%L:U&Iz*++] t//,ѷXemqׁe:Ɠ n_cD~~/IWVVqNTrrbcc}wQw̙3*//׉'ٳo۹s~7ȑ#K1CWa7ٿZjl;j֭߿Lnn>عݣKK;<^׾#gܝwg?11\bb8i|%%%:sϟ^`\w_Vffp;2͊RJJ9i˗/]<͇>SOKK.\˗+!!v'PVVΟ?&}ZdI|m}kےzGGrF3D~WlX͙/:~G^]]΅5.\Pvv֯_MGMMݫٳgߤIe544 *--uz5k֬./Hyݩd2gϞΝ;UXXh{P} ޽{+22R8.Z]:=ڗ3z] +F۷oo<;ʭy,55Uz #;;[-RHHmm߾]ƍSHH Ti竾^ .RHyݩj͛:v/^<Ǐo'|po$&{ CپwzƮV5w&?1Q|~Y~]ՙPjĈs uzMEEƏd O6C魷Zqqq:}tW۵ceF<ɇ#[n=sbbbn:5v~ӦM:~ "IڵkUoXе3}H=O<ϻ\OllΕ)..5ΞYu>-[Kw^СC;~zmݺU>,!OH>{Zύ7fa@_ClG_~|j;ǎ~!,wȼy󔓓r]zUɱ[+)2ɓ'5c 8qvޭׯA1c_ou}yV $F;M&ٮflp|ֳJY=zoꏔ|]9Oũ@:{B3K3ҥKa|o?H͝;W+WTuu'ŢIRrr}Ϯ{ۓ|#\È4eggZ}ш#nիb %&&ŋrUGgܭH<}Unnrssoݼ_6/Z6;ϼX6O LxqMxq7#Һ$6k_k9 @we0,LD=tY\V[9;!I]EtGemiQ=rX[Zt4p@,w 9B {#:??؀4`@EtZ.P7;O.n^ }#=%VsCZ_d3ͷn;V:~1s['^x|_ Ȅ=9B:~m\SS^綷(^)+)&|tunmnm!:5IA:3cXWzI5Ȧ=k# >|װD$8iE; g>>fd,sc~#V2>@@c>j ~wڶm,f, _{IEGG"&1p@ete͞=[ Qxxueꑤk׮i>|fbbbyf]͇Yn޼˗+**J!!!=zvaWH>٣d 0@{F%Ke=zSA9oڵkUal"}_Oo/*͙3Gyyyt򔞞j1޸qCӧOך5k}YʇCZZ,XܝN*ɤJ]zUب &/{ァJ֭Ӻu Sw4F:٢Eo>ʕ+ڰaua[#ĉuQ]rE땔䲞}Һ^?~ %OyJ<6mܨϧūjҤ];??_YYY$+++Kڸqcfff*99Y]|9sF:q[}ںu/ITnn"""ܪ^Ӑ!CTXXh;裏wq_J>,go?^O7֭[~'55Umw󑝝E)$$5n8hРAJMMUQQ/^l+x@Ǐ7|O>DWff[477k۶mڲeURR 2Ynn4i$_IIIJMMUϞ=me6ժ7oرc ׋/貞}6o5}{47eW듣׿ҁ*}9#v3T[[PUTThvg6|?Xҳ>k(8>}MTTT$ŢEGGkڵ.Go_OXXmWφ  ]<ɇ#HfVXӧOQ~BCCʸ{G111ZnJJJ\XǬ~C)\=Hf=HKwXٝ+++S\\k=9|,[LK.U޽ s! fۯpUرc;OHg7TJJ{Oq z@:*&oGb_' IDATk ̛7O999*//իWU^^ŗ8pN<3f8|}ĉڽ{_jƌZpLRRf͚e\̙3>rH=JOOPO7OaHLLÇԤsiܹx^z%[#.]lGbܹZrկ_?Y,>"NV^+V(11Q/^5e-_ܭz{1=s:uN80M6M˖-}z'0rFj:uꔆ}vF򑖖lUWWO>1b5k,4߫i+:RO=fjkwnūuY=CzIz^j-IxWsCe%J|ǙnިG/ onnjA|=5wzwh1_qx[{[/ƍZݯ;X3~4a~4aotD zIRmuLh q><3zH߮Զ^P?]6gڛow1}PzJ}R/ ۷c?yj%>93e%#nV ~g:ϕYU1}F$LA> (g>X]m=?G&fhu{ >wMFڶm,f, _{IEGG"&1p@eܭH<{Qrr {WFҒ%K`^0ҏwrG7o=Z;v+c/_ٳg+<<\!!! Wzz._V[YV6x]9W#UUU3gt%)==].cqㆦO5kx|G4-Xe9OqOVV&NGʕ+zwU__$ٝ<͇џhѢEڷoJKKumذA:|~:uL&*++uUUVVλj 4A.Bs,##\w~~/IWVVqNTrrbccZuW>Μ9r8qKvVOg߿HZJR<֕|Y[:x*Iњ5kh"d?CmݺUUDD˶>_{)g}vڭgDs:p@񕔔̙3?ݗ_~Y۷PfEEE)%%EGwiiiх |r%$$x#h="o>eO<,?^MMMϵdM-[Kwކ9tflFq quOH~|MtZ}?eVkMP֎ǫ_ ?^qÑy)''Gz˕a4×8pN<3f8|}ĉڽ{_jƌZp[1ydUVV믿ֵkTUUiӦ)--:}|GWua555ܹs;w.^^zVH?&%%i֬YvϜ9֏ exXΞO~ᵮSAA222tY >\3fڀqҥK^rܹsrJUWW_~X,*((}DzHKKSvvէO1B'0ڏj:uꔆ}v3FqZbuE d&t{[E %lZ=f $$6 tf@@%߮ͷn;!}PzJ}R/ [?׹-J|rgJG!mݼ!mZA93 56 Wچ=zIɤg%1 >w6. >wm>ضm,f, _{IEGGd0Lڕ۵kbcc;ͧ2/_ٳ+==]/_v;@n>ݛ3 iU7oj劊RHHF;vtH1m3Vv GӰ(ǔ9?ەsu8RUU9s(//O.]R^^U]]27nhZfo;Wp~HKKӂ ʭ\RVWeN*ɤJ]zUo_g93Ҷ2-Ҿ}TZZ+WhÆ Ç3{zHA~sydRIt*)|W+++K,综633SɊrh]8s={ZWe>C?WddzHv:(vu%Ft3#m)[oiݺuQHHbbbf^ڮ=#-g?c-YHCQ^4te-YÇ{e?11\bb8i|%%%:sϟ{F_Vffq<Ԥ?\K,ɓOWxPfEEE)%%EGPUΌm4>Gl۷{Q3\?繿П'ݺuK㟴.]WW0saaaszͅ 󼮗uG>jjjw^͞=:RXX>HÆ Q^lz˭_=C'Se-Y?f>K4!%k ? $%''+99E<7|@ \Ǯ]\m$Wxw{0߾wvU&%%r|Goqr>}hZpCotό8w%I&j̊wZ'*?&E?Ŧuv{ >wR ~?(wѿ(|5vou!A9bO-+)I ,l5'OMzޢ''{^x|`'(g[x;A9Uu>w^dRl'DIU2h3]mgxF\wm۶bl6b'OTttL*׮]ŋ5|pfhͶwءӧ"""ׯ{Ԗ0L;koH<{Qrr {WFҒ%KtM|j;n޼W_ӘjXd~Ӯ]9Ҝ9sK.)//O骮v74}tY۷|466j„ /{髯Һun:[^{M|UWW^x]Ɵ<͇?#}|'++K'NѣGuw=@*'gjjj]~ΝL+3=@t|eee)>>^,kƍ^dv)|Wx4d=zwlܹu~ohȑo~V[.O]Ggљ}UVw=ڴΙb翦QV޽5j{կ~Ds:p@񕔔̙3?ǦMϻ˗տf42͊RJJ9iyg}m~t']pA˗/4{E9z),,\XX^seggktU>N:gbO>9r^y5559w5kmyL $&MҖ-[`ABBJKK^㨯1ҏc2ԳgOEDDح EI2)p<1i^xI'Oҍ7t)f/.%T8p_ڇ=#hnnֶm۴e׫DZx… n[e5n8hРAJMMUQQ}m~t'{~;vL=SۢR-Зo5َE 7=3s4M~ ӮÑPڝUhh***4~;rLlU>TTTh(::Zk׮Ն :ԷzjwSqqzH[*<ɇ#qqq:}t2x${QLL?Y>[/eʊ:}hЃ*rݱ*++;WVV88{s0W;vl8uVW߾}=j[e'pСC;窯ލ7:}[oܝ#SNNuU+''G/]@Y[*JOOWMMUSS3gjԩ2x ;O1qD޽[ׯ_WCCJKK5c F[0ɓUYYZ׮]SUUMq};"l2_ШQN*.}y]9Oũ@:{B3c={NSNՉ'iӦiٲe2jhh=k]~$sʕ+U]]~bQ{V>ēlUWWO>1b ҝA9s='5/%;B әyw$''+99E<7hK򑐐\rXn2n>ώkoH3?yj%>93e%#n;|)>%O-<@|P[AAu>w%A%2$| `gVGp!m>ٶm,f, _{IEGGd0LO6Rf׮]5/qM-_\QQQ ѣc2r6p@ڒk׮i>|fbbbyf/_ٳ+==}e_srj)1q+b7;۽HUU̙<]tIyyyJOOWuuoܸӧk͚5޾,_{ݶƷrJZ1h"۷Or6lؠ|>|VQҴ`jllԄ _W_}uiݺu2SNdRee^J]t_kEN_?t.Ze:v^ ; +++K,绌)33SɊu~?amٳG?c5_㭷Һuh͚5ZzΜ9r=nkiȐ!*,,TTTzG}Ṫ~犌T޽\tෟۺm_Z /T?0AM^ָOLL;t_IIΜ9{!ɷ lVTTRRRt4>Oc7_csZ_VffV[6mrG;=Ԥ?\K,Zx:olw:xP),,\XX^seggktU>&M-[6hMHHPii[m{1_駟3<566FfRmm555ڻwfϞv[NٳgeXԧO9R򊚚le Giذa:GۙZ'r].]C=dwҥKVjj^u}{5n8hРAJMMUQQ/^܍~n~\iҤI߿\ IDAT={:,E)$$m6mٲE*))QEE]333o'n9{A9op󎄆v5Uhh***4~Ll|nI|ތ*fY+VӧبO?Tz;СCzg=j+,,LEEEVHHvZmذVfӦM***b+ԥK]tY=`ƪ\YY^l7vgøǡCV۞͘[w7TJJJ˖-ҥKջwo;vlo6 _Oro:>@ң͛ի*//WNN^|Er6zU>&NݻwjhhPiif̘ նGbb>&;wNsŋK/ٕ;pN<3fx|JOO{̙:uLRRf͚ա hz;t6{Y3gfkxW<_CEEk:+..Nٳg5|pj̘1]W;wV\jOEwm9u0*>}N:C*%%E|AK*;;[zyc={NSNՉ'iӦiٲe2W֊+/j2emcȨ}~~ϴg9: W_Gv:{[rr]y%8x TG||`+m{#>o]|۵k ĒW͵;uF|uc;Onn6^KL&՘9@W+n{A ~n80]>w%&L߭f@`h5ߺ(A9['^x|)^s[d ϔB>:ںyC$S}\ ЪmL3VkE! k+]D,@cySp`=p!I&\۶mblbQqqkO٣d 0@{F%Kz$ڵkZx.٬m޼ٮ̮]H@૟#誌drx͛7|rEEE)$$DG֎; 'K~3VܷO6xh׌qJsQ^^.]!|u<3?yj%>93e%#n;A9o|$}?(VkvڥX2LU7 Ǟ={{ըQd544ؕ3׮ruVKKGsܬf㖚oc=$ɤZVr>%&NR^ZڵkLIQѿke/Yׯ_+HUU̙<]tIyyyJOOWuuoܸӧk͚5޾,_cʕZjҴ`f[|deeiĉ:z\w}WJJJ+g]%9ED]D% k͙3[>7v^~y.k:7??_YYY$+++Kڸqcfff*99Y:e>V,gΜQyyN8v=j|}UViv7~m -o;}M6u߾}9h{vwaQ\ ߙ]R ( vm{%5vĞb57F)ػb  lc癇)-9gN"ۺwK=o͸r /_825}3f `0!.S!Ih"t4WZڵk#44&MB-Loر \/4$}59DDDDDF${gϜEzz:RSR,&O//"iE+ɽ{Pqo߆wm޸}v$$$`鈉{ ܹsػw/Kg-q4iRecٳ'&LPdddGnݰf۷ofBBuoO """r &?Ϟ9 "zˢ ڷgΝ=M-na/oQ&a+W >}:aggg0!`!2pDEEaܸqذaEߴvvv߿?<==eR'":z2235 C$!""""2ٳ觧#mۧf.Ҷ}{[ӹW|~Æ)vjժ"ےQVӶgtر،l/=k>bccq foq<bؼyI3˗Mys`cc ̞eVDDDDD IMI,Ke޶L}Zl߱_~JزeKm[lADDD4#91e Ǵi0uTښue>rrrL̍ĉ[Iqtb,YO"""""K*(j ,_Qz![ լYƴꋲ}n܄vo^oƎW_}h۶-8s |9x" `+2.sѻwoDEE!88$!..&L!C,УGDEE!,, * {Add$Mf񸈈ʚo|%ɨ{7./55pvr6-c6ia÷v7ptt0pXf ƏWQFѺuk'*SNӡT|_̘p,WE+cȐ!>}:9{{{<3:t(\8c>GCFYfȑ#prrB@@֬Y}~{"""""*+eRB^IIIAfpbׯ8m+QzW>b4ӧ غo9e}<Ƙp,5(k׮*[qL,!:77/_>!1͚5ylTD@^nE+\%I$"2({_0A,CÙdsJ)o^S%Hb~><ڶmа0(6uߜ\m8I9viʆ[k׮HMME'c uǃݾuSCDDDDdMEt- Yy\BBBNjX_o״pm͆Wu39bbЩKg3ǎmT.qQ\t t1[i@C 蟕^g*/Ce@݆ h&{[{ݑO ,t|S3h"X)DDDDDV!TϮݵ+qq|<~<\X)Ny* Mt-^gq3yY.9O!""""&Y,El~už@ p 2~_]گ^b,pITKE 1utdff@^_J/ɱ ADHWސ_wqqٳt)DDDDDVN_|I֎E;yp$<CF>_7lW M[4Ȃ6kL|h1d, KTduיgo2֪i A-C@(`_x6r8C#+1U/Oo/[l#\t Z;_E^j/ܭUig t!!ECt۷Vϳ#: ѕ7޼DDDDd+V]ݠRAЎ/-QR8Sgg+ٯ PeYyg'""""_<5 qN#0( pzcHqpww{ Batrgm\U NLJDDDDT|SA͂w?{wY$1nnpssG@+Ƭ=>UnqQ阛7椱2/""""z`~5onĘŗ_*8*#DDDD,[ODDDDDDDJSpR""""""ʧP}-DDDDDDDUN!=UJ#ۉ*:=[|'""""""4MJ]DQQI Yc Aо>R:0U$O^O "Qe7 Cd,~ "k|TE*իWG`UTz 슉dX\vm+: Dḩ+FU-s.M`cc',(BDDULᦇb- 2/5R"Rc>]ߤa QyPOi͸:*P3DU-U̧_U-o0~>DDT4%Pq*Q+ <ӨK+fBVt2_8 .B@E4Gg8eDDDSAΞ=om9k;v(mURVVΞ=ZeJ~pqq)Qe$Ԩ^|"9 5j>.U}/?61 -ZTF).]Gt΢%ODDd@+jIr…>|8ÇPՐ% 6J%srT(PF xxxh)O~MOCnM~ /ekCAq <ή4 );TTy4| L3fdgeAV`ck;:9 '77߬[?$%&߯۔:ƪ |͏ŋ!];^Ƽ] MLoU6wp)BU>AMq4 y1ۮ#MR]گm[qflmmѬY:wdwPyl|0xܯ̹ {ü̶Hm8qnݺ{wJ F BRBT@E@$ːfNDD-6몕+ѳW/<|ǏP*VQhԸpNܼlcq">Jqk* @:ir`=QeU% |HE}lbAhР EvcIlwUoN~͆H͵5XO\ 6t@ iӦ㛯",,sLQkCAk{ɓHpxg/8~:C6pXq.vG!K9[[;{⢙]_y]_yq`ժոx0j(4w'EGu됒 Y̚9_}5n݂7Fz/( _Z]B}J3aBMGKw  s/dPWw3#3>Qu0FUujؠC*ׯ_%KqjYPfMx?2iWL X+W ü2IDATB(v-ʕ+ /t\qy||CCmFHYZY?ZǍܱǞaFϊ"*^ة3jyϿ 4~I恚O|n=ZC~÷e>t(27mFwc߱ wl=a42~݈X,X|l9>6 ǎ_'ڵ%@DDdm4|A@iW> "00@F`oo71rƎ ~]l>ôSйS'888^ݺXE2y|Kgڴ Za)J VPO@3`[]zc{8;oo̚5tQҮmjyyi_˒~GpkΏg{3]nܸ <~ی6[Έ?/r̢M6ppp'&OVzz7n*rMлw/¿~^yeTwq 5k+>uT-pK0g,\| ,I81iwBuV,Z˖.ŵ+lR,\ viu׆2lTNaΝA[@{7B'O¹FYKaWsЪU+١^ݺ7w~ucWy|2Mr]/_>}ݻeQ*!2޽ '''dfdB?`޽q&df>ŋѼy3x?P3$8аPL2ňwZ>zkb4\@ժ:t%K y8ovӦNAet"2RD{@V޲qH߰b܎eoҭ[?8mU~t&E^}ͤt]:wG3f"%%^^^}6ΟGΝ oޯ_D-Ѷm<>]/\Aqԧ[6CBP‍-b]Ѻ{O$e\eZ${Οǿx ˲vŒ;4Z{yYKИ1c o5% p!Ȓ$ 5V5Ы׫U[1yljժLM)ߑ:^3իVᣰk Aqhs sE͛7G\\\~380yT:twjZs &9R RE囸`=? A!"&uUгgn߾=fΜ}K/hvz8mcG jԅ sg9j݇l R;8t0 ܹmA1rBCBJ*Y'ڵÇQ q`X_cQ1'2pgZ_bݻuŗkbʕz>?[@lI߻w/LaCbX$&&ޯojV7i7 UR (JA"^Z~s^g mzŶK_RCH^)i?GMhMϿB74C"""k"i7nݺCڵ%KGz[l۶o{Rp ̜9 ]t3z(̙;{EVVnܼ'N4)gcǐ#Gbܹ6tv:IL$,cհÍ7p Ȳ?=z/sNCt=&DJ'bO " .R* g<@ݎ Ž4IW9MK nsL˗@R!3ۇנA}/~gΞ3LNz!2Y^2Dvvv>ԫW4V,,PKn.??8xȶ7tRà x!Jt6|jֻz^ '=k6ZX|c##dشy3߿l:tC +C"""`1+V믿T8::B$$''?okE|G3Z^^x饗0r10m,t)._OOO*C)Sooo= ڷhL$''CVc9r$݋MBeܹsGtIIm[1hz>gy6|… t> ޻X~gSlRlDw ۨ$E֟WqcصrfjrW=f `kk͛c;h7g.LE;n{O-BQE ~X3:} OXqn1cFÉѨ^-[ɓ'11z-ZX!]넷ݷ_˗!xwQp?& }ѰC{)< V\+WaYe-7LjK yǨmڴA/_xA>]}M]o sg^z55a$I>~Z6mބCރgjr3fc#GM}DTkBd|6 K߃+^*Ղq9ԭS.cuCQ*݅}:+`ر:vPbaj.U:L޸ m7ݻN&/}J}meka97RnjMCşKbOEMbuFo@DDdM b=Qtz*6lZ AP(S`3]%1rHٳgΜ(pqq[͚Ɔo7`P* ߟiެUd۰aZHO" ]ދSRP $ͺp 8:ujoE'3e}C2\7w» ]ڿڿc :}[6 }Ip"1x *U9EQSv:v"GO(v'ڴn]࠶Ѧuv="{ܙWWo ?ymnRdVCT( =2]l[ewLc?|x܈&~3OQe_6 !!JN0{ޯGe+ߤa;99Ad(JT'"ÔJ%$Is!s2$T@T0.U1Ok?l;+ߠf< 1eHk׮t K ̧Y-ߤ~C""4|AdV-/$ 9<|Vy999nneEȉ(BeVtJO*[Jk MQQU|o/NJC#""BQ)  2< g'NtE y<}mo:_W|}fBm݊{t?2pss3|}TtR*LU-""" ~[I "" aNDDDLQ Ȝ񖈈rL$>Y%""""""ʦN.DDDDDDDU~E"قODDDDDDTODDDDDDTODDDDDDTODDDDDDTODDDDDDTh*T """""""c_ 5+UaO^YSW K,YO^2DH =*-h݋RneYB(E__OnE (AJ>([~. ׌ep>([~u?_ "[JI B~|CU,c^/l5;U0c?E#5@ {E٧JdL"CSq .#LHzDDDDDDDQ# DyKUi""""""""R3^;~JkqlSa#""""""$=%!1KB!s |/]eo?7M}f[IENDB`mathgl-2.4.1/texinfo/core_en.texi0000664000175000017500000112344413134046534016555 0ustar balakinbalakin@c ------------------------------------------------------------------ @chapter MathGL core @nav{} @cindex mglGraph @ifset UDAV This chapter contains a lot of plotting commands for 1D, 2D and 3D data. It also encapsulates parameters for axes drawing. Moreover an arbitrary coordinate transformation can be used for each axis. Additional information about colors, fonts, formula parsing can be found in @ref{General concepts}. The full list of symbols used by MathGL for setting up plots can be found in @ref{Symbols for styles}. @end ifset @ifclear UDAV The core of MathGL is @strong{mglGraph} class defined in @code{#include }. It contains a lot of plotting functions for 1D, 2D and 3D data. It also encapsulates parameters for axes drawing. Moreover an arbitrary coordinate transformation can be used for each axis. All plotting functions use data encapsulated in mglData class (see @ref{Data processing}) that allows to check sizes of used arrays easily. Also it have many functions for data handling: modify it by formulas, find momentums and distribution (histogram), apply operator (differentiate, integrate, transpose, Fourier and so on), change data sizes (interpolate, squeeze, crop and so on). Additional information about colors, fonts, formula parsing can be found in @ref{General concepts} and @ref{Other classes}. @end ifclear Some of MathGL features will appear only in novel versions. To test used MathGL version you can use following function. @anchor{version} @deftypefn {MGL command} {} version 'ver' @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{bool} CheckVersion (@code{const char *}ver) static @deftypefnx {C function} @code{int} mgl_check_version (@code{const char *}ver) @end ifclear Return zero if MathGL version is appropriate for required by @var{ver}, i.e. if major version is the same and minor version is greater or equal to one in @var{ver}. @end deftypefn @menu * Constructor:: * Graphics setup:: * Axis settings:: * Subplots and rotation:: * Export picture:: * Background:: * Primitives:: * Text printing:: * Axis and Colorbar:: * Legend:: * 1D plotting:: * 2D plotting:: * 3D plotting:: * Dual plotting:: * Vector fields:: * Other plotting:: * Nonlinear fitting:: * Data manipulation:: @c * IDTF functions:: @end menu @c ################################################################## @external{} @node Constructor, Graphics setup, , MathGL core @section Create and delete objects @nav{} @ifclear UDAV @deftypefn {Constructor on @code{mglGraph}} {} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400}) @deftypefnx {Constructor on @code{mglGraph}} {} mglGraph (@code{const mglGraph &}gr) @deftypefnx {Constructor on @code{mglGraph}} {} mglGraph (@code{HMGL} gr) @deftypefnx {C function} @code{HMGL} mgl_create_graph (@code{int} width, @code{int} height) @deftypefnx {C function} @code{HMGL} mgl_create_graph_gl () Creates the instance of class mglGraph with specified sizes @var{width} and @var{height}. Parameter @var{kind} may have following values: @samp{0} -- use default plotter, @samp{1} -- use OpenGL plotter. @end deftypefn @deftypefn {Destructor on @code{mglGraph}} {} ~mglGraph () @deftypefnx {C function} @code{HMGL} mgl_delete_graph (@code{HMGL} gr) Deletes the instance of class mglGraph. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{HMGL} Self () Returns the pointer to internal object of type @code{HMGL}. @end deftypefn @end ifclear @ifset UDAV You don't need to create canvas object in MGL. @end ifset @c ################################################################## @external{} @node Graphics setup, Axis settings, Constructor, MathGL core @section Graphics setup @nav{} @cindex MathGL setup Functions and variables in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting function calls. @anchor{reset} @deftypefn {MGL command} {} reset @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} DefaultPlotParam () @deftypefnx {C function} @code{void} mgl_set_def_param (@code{HMGL} gr) @end ifclear Restore initial values for all of parameters and clear the image. @end deftypefn @menu * Transparency:: * Lighting:: * Fog:: * Default sizes:: * Cutting:: * Font settings:: * Palette and colors:: * Masks:: * Error handling:: * Stop drawing:: @end menu @c ================================================================== @external{} @node Transparency, Lighting, , Graphics setup @subsection Transparency @nav{} @cindex Alpha @ifclear UDAV @cindex SetAlphaDef @cindex SetTranspType @end ifclear @cindex AlphaDef @cindex TranspType There are several functions and variables for setup transparency. The general function is @ref{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @ref{alpha} call (with one exception, OpenGL). Function @ref{alphadef} specify the default value of alpha-channel. Finally, function @ref{transptype} set the kind of transparency. @sref{Transparency and lighting} @anchor{alpha} @deftypefn {MGL command} {} alpha @code{[val=on]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Alpha (@code{bool} enable) @deftypefnx {C function} @code{void} mgl_set_alpha (@code{HMGL} gr, @code{int} enable) @end ifclear Sets the transparency on/off and returns previous value of transparency. It is recommended to call this function before any plotting command. Default value is transparency off. @end deftypefn @anchor{alphadef} @deftypefn {MGL command} {} alphadef @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetAlphaDef (@code{mreal} val) @deftypefnx {C function} @code{void} mgl_set_alpha_default (@code{HMGL} gr, @code{mreal} alpha) @end ifclear Sets default value of alpha channel (transparency) for all plotting functions. Initial value is 0.5. @end deftypefn @anchor{transptype} @deftypefn {MGL command} {} transptype @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetTranspType (@code{int} type) @deftypefnx {C function} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} type) @end ifclear Set the type of transparency. Possible values are: @itemize @bullet @item Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. @item Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. @item Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{SetAlphaDef(0.3)} or less for lamp-like transparency. @end itemize @sref{Types of transparency}. @end deftypefn @c ================================================================== @external{} @node Lighting, Fog, Transparency, Graphics setup @subsection Lighting @nav{} @ifclear UDAV @cindex SetAmbient @cindex AddLight @end ifclear @cindex Light @cindex Ambient There are several functions for setup lighting. The general function is @ref{light} which switch on/off the lighting for overall plot. It influence only for graphics which created after @ref{light} call (with one exception, OpenGL). Generally MathGL support up to 10 independent light sources. But in OpenGL mode only 8 of light sources is used due to OpenGL limitations. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot. @sref{Lighting sample} @anchor{light} @deftypefn {MGL command} {} light @code{[val=on]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{bool} Light (@code{bool} enable) @deftypefnx {C function} @code{void} mgl_set_light (@code{HMGL} gr, @code{int} enable) @end ifclear Sets the using of light on/off for overall plot. Function returns previous value of lighting. Default value is lightning off. @end deftypefn @deftypefn {MGL command} {} light @code{num} @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Light (@code{int} n, @code{bool} enable) @deftypefnx {C function} @code{void} mgl_set_light_n (@code{HMGL} gr, @code{int} n, @code{int} enable) @end ifclear Switch on/off @var{n}-th light source separately. @end deftypefn @deftypefn {MGL command} {} light @code{num xdir ydir zdir} ['col'='w' @code{br=0.5}] @deftypefnx {MGL command} {} light @code{num xdir ydir zdir xpos ypos zpos} ['col'='w' @code{br=0.5 ap=0}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{mreal} bright=@code{0.5}, @code{mreal} ap=@code{0}) @deftypefnx {Method on @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} r, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{mreal} bright=@code{0.5}, @code{mreal} ap=@code{0}) @deftypefnx {C function} @code{void} mgl_add_light (@code{HMGL} gr, @code{int} n, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz) @deftypefnx {C function} @code{void} mgl_add_light_ext (@code{HMGL} gr, @code{int} n, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{char} c, @code{mreal} bright, @code{mreal} ap) @deftypefnx {C function} @code{void} mgl_add_light_loc (@code{HMGL} gr, @code{int} n, @code{mreal} rx, @code{mreal} ry, @code{mreal} rz, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{char} c, @code{mreal} bright, @code{mreal} ap) @end ifclear The function adds a light source with identification @var{n} in direction @var{d} with color @var{c} and with brightness @var{bright} (which must be in range [0,1]). If position @var{r} is specified and isn't NAN then light source is supposed to be local otherwise light source is supposed to be placed at infinity. @end deftypefn @anchor{diffuse} @deftypefn {MGL command} {} diffuse @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetDiffuse (@code{mreal} bright) @deftypefnx {C function} @code{void} mgl_set_difbr (@code{HMGL} gr, @code{mreal} bright) @end ifclear Set brightness of diffusive light (only for local light sources). @end deftypefn @anchor{ambient} @deftypefn {MGL command} {} ambient @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetAmbient (@code{mreal} bright=@code{0.5}) @deftypefnx {C function} @code{void} mgl_set_ambbr (@code{HMGL} gr, @code{mreal} bright) @end ifclear Sets the brightness of ambient light. The value should be in range [0,1]. @end deftypefn @anchor{attachlight} @deftypefn {MGL command} {} attachlight @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} AttachLight (@code{bool} val) @deftypefnx {C function} @code{void} mgl_set_attach_light (@code{HMGL} gr, @code{int} val) @end ifclear Set to attach light settings to @ref{inplot}/@ref{subplot}. Note, OpenGL and some output formats don't support this feature. @end deftypefn @c ================================================================== @external{} @node Fog, Default sizes, Lighting, Graphics setup @subsection Fog @nav{} @cindex Fog @anchor{fog} @deftypefn {MGL command} {} fog @code{val [dz=0.25]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Fog (@code{mreal} d, @code{mreal} dz=@code{0.25}) @deftypefnx {C function} @code{void} mgl_set_fog (@code{HMGL} gr, @code{mreal} d, @code{mreal} dz) @end ifclear Function imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~ 1-exp(-@emph{d*z}). Here @emph{z} is normalized to 1 depth of the plot. If value @var{d}=@code{0} then the fog is absent. Note, that fog was applied at stage of image creation, not at stage of drawing. @sref{Adding fog} @end deftypefn @c ================================================================== @external{} @node Default sizes, Cutting, Fog, Graphics setup @subsection Default sizes @nav{} @ifclear UDAV @cindex SetBarWidth @cindex SetMarkSize @cindex SetArrowSize @cindex SetMeshNum @cindex SetPlotId @end ifclear @cindex BarWidth @cindex MarkSize @cindex ArrowSize @cindex MeshNum These variables control the default (initial) values for most graphics parameters including sizes of markers, arrows, line width and so on. As any other settings these ones will influence only on plots created after the settings change. @anchor{barwidth} @deftypefn {MGL command} {} barwidth @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetBarWidth ( @code{mreal} val) @deftypefnx {C function} @code{void} mgl_set_bar_width (@code{HMGL} gr, @code{mreal} val) @end ifclear Sets relative width of rectangles in @ref{bars}, @ref{barh}, @ref{boxplot}, @ref{candle}, @ref{ohlc}. Default value is @code{0.7}. @end deftypefn @anchor{marksize} @deftypefn {MGL command} {} marksize @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetMarkSize (@code{mreal} val) @deftypefnx {C function} @code{void} mgl_set_mark_size (@code{HMGL} gr, @code{mreal} val) @end ifclear Sets size of marks for @ref{1D plotting}. Default value is @code{1}. @end deftypefn @anchor{arrowsize} @deftypefn {MGL command} {} arrowsize @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetArrowSize (@code{mreal} val) @deftypefnx {C function} @code{void} mgl_set_arrow_size (@code{HMGL} gr, @code{mreal} val) @end ifclear Sets size of arrows for @ref{1D plotting}, lines and curves (see @ref{Primitives}). Default value is @code{1}. @end deftypefn @anchor{meshnum} @anchor{MeshNum} @deftypefn {MGL command} {} meshnum @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetMeshNum (@code{int} val) @deftypefnx {C function} @code{void} mgl_set_meshnum (@code{HMGL} gr, @code{int} num) @end ifclear Sets approximate number of lines in @ref{mesh}, @ref{fall}, @ref{grid2}, and also the number of hachures in @ref{vect}, @ref{dew}, and the number of cells in @ref{cloud}, and the number of markers in @ref{plot}, @ref{tens}, @ref{step}, @ref{mark}, @ref{textmark}. By default (=0) it draws all lines/hachures/cells/markers. @end deftypefn @anchor{facenum} @deftypefn {MGL command} {} facenum @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetFaceNum (@code{int} val) @deftypefnx {C function} @code{void} mgl_set_facenum (@code{HMGL} gr, @code{int} num) @end ifclear Sets approximate number of visible faces. Can be used for speeding up drawing by cost of lower quality. By default (=0) it draws all of them. @end deftypefn @anchor{plotid} @deftypefn {MGL command} {} plotid 'id' @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetPlotId (@code{const char *}id) @deftypefnx {C function} @code{void} mgl_set_plotid (@code{HMGL} gr, @code{const char *}id) @end ifclear Sets default name @var{id} as filename for saving (in FLTK window for example). @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{const char *} GetPlotId () @deftypefnx {C function only} @code{const char *} mgl_get_plotid (@code{HMGL} gr) @deftypefnx {Fortran subroutine} @code{} mgl_get_plotid (@code{long} gr, @code{char *}out, @code{int} len) Gets default name @var{id} as filename for saving (in FLTK window for example). @end deftypefn @end ifclear @anchor{pendelta} @deftypefn {MGL command} {} pendelta @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetPenDelta (@code{double} val) @deftypefnx {C function} @code{void} mgl_pen_delta (@code{HMGL} gr, @code{double} val) @end ifclear Changes the blur around lines and text (default is 1). For @var{val}>1 the text and lines are more sharped. For @var{val}<1 the text and lines are more blurred. @end deftypefn @c ================================================================== @external{} @node Cutting, Font settings, Default sizes, Graphics setup @subsection Cutting @nav{} @ifclear UDAV @cindex SetCut @cindex SetCutBox @cindex CutOff @end ifclear @cindex Cut These variables and functions set the condition when the points are excluded (cutted) from the drawing. Note, that a point with NAN value(s) of coordinate or amplitude will be automatically excluded from the drawing. @sref{Cutting sample} @anchor{cut} @deftypefn {MGL command} {} cut @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetCut (@code{bool} val) @deftypefnx {C function} @code{void} mgl_set_cut (@code{HMGL} gr, @code{int} val) @end ifclear Flag which determines how points outside bounding box are drawn. If it is @code{true} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box. @end deftypefn @deftypefn {MGL command} {} cut @code{x1 y1 z1 x2 y2 z2} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetCutBox (@code{mglPoint} p1, @code{mglPoint} p1) @deftypefnx {C function} @code{void} mgl_set_cut_box (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2) @end ifclear Lower and upper edge of the box in which never points are drawn. If both edges are the same (the variables are equal) then the cutting box is empty. @end deftypefn @deftypefn {MGL command} {} cut 'cond' @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} CutOff (@code{const char *}cond) @deftypefnx {C function} @code{void} mgl_set_cutoff (@code{HMGL} gr, @code{const char *}cond) @end ifclear Sets the cutting off condition by formula @var{cond}. This condition determine will point be plotted or not. If value of formula is nonzero then point is omitted, otherwise it plotted. Set argument as @code{""} to disable cutting off condition. @end deftypefn @c ================================================================== @external{} @node Font settings, Palette and colors, Cutting, Graphics setup @subsection Font settings @nav{} @ifclear UDAV @cindex SetFontSize @cindex SetFontDef @cindex SetRotatedText @cindex SetFontSizePT @cindex SetFontSizeCM @cindex SetFontSizeIN @cindex LoadFont @cindex CopyFont @cindex RestoreFont @end ifclear @cindex Font @cindex RotateText @anchor{font} @deftypefn {MGL command} {} font 'fnt' [@code{val=6}] Font style for text and labels (see text). Initial style is 'fnt'=':rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, see @ref{Font styles}. @end deftypefn @anchor{rotatetext} @deftypefn {MGL command} {} rotatetext @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetRotatedText (@code{bool} val) @deftypefnx {C function} @code{void} mgl_set_rotated_text (@code{HMGL} gr, @code{int} val) @end ifclear Sets to use or not text rotation. @end deftypefn @anchor{loadfont} @deftypefn {MGL command} {} loadfont ['name'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} LoadFont (@code{const char *}name, @code{const char *}path=@code{""}) @deftypefnx {C function} @code{void} mgl_load_font (@code{HMGL} gr, @code{const char *}name, @code{const char *}path) @end ifclear Load font typeface from @var{path}/@var{name}. Empty name will load default font. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{void} SetFontDef (@code{const char *}fnt) @deftypefnx {C function} @code{void} mgl_set_font_def (@code{HMGL} gr, @code{const char *} val) Sets the font specification (see @ref{Text printing}). Default is @samp{rC} -- Roman font centering. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetFontSize (@code{mreal} val) @deftypefnx {C function} @code{void} mgl_set_font_size (@code{HMGL} gr, @code{mreal} val) Sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetFontSizePT (@code{mreal} cm, @code{int} dpi=@code{72}) Set FontSize by size in pt and picture DPI (default is 16 pt for dpi=72). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{inline void} SetFontSizeCM (@code{mreal} cm, @code{int} dpi=@code{72}) Set FontSize by size in centimeters and picture DPI (default is 0.56 cm = 16 pt). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{inline void} SetFontSizeIN (@code{mreal} cm, @code{int} dpi=@code{72}) Set FontSize by size in inch and picture DPI (default is 0.22 in = 16 pt). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} CopyFont (@code{mglGraph *} from) @deftypefnx {C function} @code{void} mgl_copy_font (@code{HMGL} gr, @code{HMGL} gr_from) Copy font data from another @code{mglGraph} object. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} RestoreFont () @deftypefnx {C function} @code{void} mgl_restore_font (@code{HMGL} gr) Restore font data to default typeface. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetDefFont (@code{const char *}name, @code{const char *}path=@code{""}) static @deftypefnx {C function} @code{void} mgl_def_font (@code{const char *}name, @code{const char *}path) Load default font typeface (for all newly created HMGL/mglGraph objects) from @var{path}/@var{name}. @end deftypefn @end ifclear @c ================================================================== @external{} @node Palette and colors, Masks, Font settings, Graphics setup @subsection Palette and colors @nav{} @ifclear UDAV @cindex SetPalette @end ifclear @cindex Palette @anchor{palette} @deftypefn {MGL command} {} palette 'colors' @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetPalette (@code{const char *}colors) @deftypefnx {C function} @code{void} mgl_set_palette (@code{HMGL} gr, @code{const char *}colors) @end ifclear Sets the palette as selected colors. Default value is @code{"Hbgrcmyhlnqeup"} that corresponds to colors: dark gray @samp{H}, blue @samp{b}, green @samp{g}, red @samp{r}, cyan @samp{c}, magenta @samp{m}, yellow @samp{y}, gray @samp{h}, blue-green @samp{l}, sky-blue @samp{n}, orange @samp{q}, yellow-green @samp{e}, blue-violet @samp{u}, purple @samp{p}. The palette is used mostly in 1D plots (see @ref{1D plotting}) for curves which styles are not specified. Internal color counter will be nullified by any change of palette. This includes even hidden change (for example, by @ref{box} or @ref{axis} functions). @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{void} SetDefScheme (@code{const char *}sch) @deftypefnx {C function} @code{void} mgl_set_def_sch (@code{HMGL} gr, @code{const char *}sch) Sets the @var{sch} as default color scheme. Default value is @code{"BbcyrR"}. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetColor (@code{char} id, @code{mreal} r, @code{mreal} g, @code{mreal} b) static @deftypefnx {C function} @code{void} mgl_set_color (@code{char} id, @code{mreal} r, @code{mreal} g, @code{mreal} b) Sets RGB values for color with given @var{id}. This is global setting which influence on any later usage of symbol @var{id}. @end deftypefn @end ifclear @anchor{gray} @deftypefn {MGL command} {} gray [@code{val=on}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Gray (@code{bool} enable) @deftypefnx {C function} @code{void} mgl_set_gray (@code{HMGL} gr, @code{int} enable) @end ifclear Sets the gray-scale mode on/off. @end deftypefn @c ================================================================== @external{} @node Masks, Error handling, Palette and colors, Graphics setup @subsection Masks @nav{} @cindex SetMask @cindex SetMaskAngle @anchor{mask} @deftypefn {MGL command} {} mask 'id' 'hex' @deftypefnx {Команда MGL} {} mask 'id' hex @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetMask (@code{char} id, @code{const char *}hex) @deftypefnx {Method on @code{mglGraph}} @code{void} SetMask (@code{char} id, @code{uint64_t} hex) @deftypefnx {C function} @code{void} mgl_set_mask (@code{HMGL} gr, @code{const char *}hex) @deftypefnx {C function} @code{void} mgl_set_mask_val (@code{HMGL} gr, @code{uint64_t} hex) @end ifclear Sets new bit matrix @var{hex} of size 8*8 for mask with given @var{id}. This is global setting which influence on any later usage of symbol @var{id}. The predefined masks are (see @ref{Color scheme}): @samp{-} is 000000FF00000000, @samp{+} is 080808FF08080808, @samp{=} is 0000FF00FF000000, @samp{;} is 0000007700000000, @samp{o} is 0000182424180000, @samp{O} is 0000183C3C180000, @samp{s} is 00003C24243C0000, @samp{S} is 00003C3C3C3C0000, @samp{~} is 0000060990600000, @samp{<} is 0060584658600000, @samp{>} is 00061A621A060000, @samp{j} is 0000005F00000000, @samp{d} is 0008142214080000, @samp{D} is 00081C3E1C080000, @samp{*} is 8142241818244281, @samp{^} is 0000001824420000. @end deftypefn @deftypefn {MGL command} {} mask angle @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetMaskAngle (@code{int} angle) @deftypefnx {C function} @code{void} mgl_set_mask_angle (@code{HMGL} gr, @code{int} angle) @end ifclear Sets the default rotation angle (in degrees) for masks. Note, you can use symbols @samp{\}, @samp{/}, @samp{I} in color scheme for setting rotation angles as 45, -45 and 90 degrees correspondingly. @end deftypefn @c ================================================================== @external{} @node Error handling, Stop drawing, Masks, Graphics setup @subsection Error handling @nav{} @ifset UDAV All warnings will be displayed automatically in special tool-window or in console. @end ifset @ifclear UDAV @cindex Message @cindex SetWarn @cindex GetWarn Normally user should set it to zero by @code{SetWarn(0);} before plotting and check if @code{GetWarn()} or @code{Message()} return non zero after plotting. Only last warning will be saved. All warnings/errors produced by MathGL is not critical -- the plot just will not be drawn. By default, all warnings are printed in stderr. You can disable it by using @code{mgl_suppress_warn(true);}. @deftypefn {Method on @code{mglGraph}} @code{void} SetWarn (@code{int} code, @code{const char *}info=@code{""}) @deftypefnx {C function} @code{void} mgl_set_warn (@code{HMGL} gr, @code{int} code, @code{const char *}info) Set warning code. Normally you should call this function only for clearing the warning state, i.e. call @code{SetWarn(0);}. Text @var{info} will be printed as is if @var{code}<0. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{const char *}Message () @deftypefnx {C function only} @code{const char *}mgl_get_mess (@code{HMGL} gr) @deftypefnx {Fortran subroutine} @code{} mgl_get_mess (@code{long} gr, @code{char *}out, @code{int} len) Return messages about matters why some plot are not drawn. If returned string is empty then there are no messages. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} GetWarn () @deftypefnx {C function} @code{int} mgl_get_warn (@code{HMGL} gr) Return the numerical ID of warning about the not drawn plot. Possible values are: @table @code @item mglWarnNone=0 Everything OK @item mglWarnDim Data dimension(s) is incompatible @item mglWarnLow Data dimension(s) is too small @item mglWarnNeg Minimal data value is negative @item mglWarnFile No file or wrong data dimensions @item mglWarnMem Not enough memory @item mglWarnZero Data values are zero @item mglWarnLeg No legend entries @item mglWarnSlc Slice value is out of range @item mglWarnCnt Number of contours is zero or negative @item mglWarnOpen Couldn't open file @item mglWarnLId Light: ID is out of range @item mglWarnSize Setsize: size(s) is zero or negative @item mglWarnFmt Format is not supported for that build @item mglWarnTern Axis ranges are incompatible @item mglWarnNull Pointer is NULL @item mglWarnSpc Not enough space for plot @item mglScrArg Wrong argument(s) of a command in MGL script @item mglScrCmd Wrong command in MGL script @item mglScrLong Too long line in MGL script @item mglScrStr Unbalanced ' in MGL script @item mglScrTemp Change temporary data in MGL script @end table @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SuppressWarn (@code{bool} state) static @deftypefnx {C function} @code{void} mgl_suppress_warn (@code{int} state) Disable printing warnings to @code{stderr} if @var{state} is nonzero. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetGlobalWarn (@code{const char *}info) static @deftypefnx {C function} @code{void} mgl_set_global_warn (@code{const char *}info) Set warning message @var{info} for global scope. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{const char *} GlobalWarn () static @deftypefnx {C function} @code{const char *} mgl_get_global_warn () Get warning message(s) for global scope. @end deftypefn @end ifclear @c ================================================================== @external{} @node Stop drawing, , Error handling, Graphics setup @subsection Stop drawing @nav{} @ifset UDAV You can use @ref{stop} command or press corresponding toolbutton to stop drawing and script execution. @end ifset @ifclear UDAV @cindex Stop @cindex NeedStop @cindex SetEventFunc @deftypefn {Method on @code{mglGraph}} @code{void} Stop (@code{bool} stop=@code{true}) @deftypefnx {C function only} @code{void} mgl_ask_stop (@code{HMGL} gr, @code{int} stop) Ask to stop drawing if @var{stop} is non-zero, otherwise reset stop flag. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{bool} NeedStop () @deftypefnx {C function only} @code{void} mgl_need_stop (@code{HMGL} gr) Return @code{true} if drawing should be terminated. Also it process all events in GUI. User should call this function from time to time inside a long calculation to allow processing events for GUI. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{bool} SetEventFunc (@code{void (*}func@code{)(void *)}, @code{void *}par=@code{NULL}) @deftypefnx {C function only} @code{void} mgl_set_event_func (@code{HMGL} gr, @code{void (*}func@code{)(void *)}, @code{void *}par) Set callback function which will be called to process events of GUI library. @end deftypefn @end ifclear @c ================================================================== @external{} @node Axis settings, Subplots and rotation, Graphics setup, MathGL core @section Axis settings @nav{} These large set of variables and functions control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected if @code{Cut=true} (see @ref{Cutting}), after it transformation formulas are applied, and finally the data was normalized in bounding box. Note, that MathGL will produce warning if axis range and transformation formulas are not compatible. @menu * Ranges (bounding box):: * Curved coordinates:: * Ticks:: @end menu @c ------------------------------------------------------------------ @external{} @node Ranges (bounding box), Curved coordinates, , Axis settings @subsection Ranges (bounding box) @nav{} @cindex CRange @cindex XRange @cindex YRange @cindex ZRange @cindex Ranges @cindex Origin @ifclear UDAV @cindex SetRange @cindex SetRanges @cindex SetOrigin @end ifclear @anchor{xrange} @anchor{yrange} @anchor{zrange} @anchor{crange} @deftypefn {MGL command} {} xrange @code{v1 v2} [@code{add=off}] @deftypefnx {MGL command} {} yrange @code{v1 v2} [@code{add=off}] @deftypefnx {MGL command} {} zrange @code{v1 v2} [@code{add=off}] @deftypefnx {MGL command} {} crange @code{v1 v2} [@code{add=off}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{mreal} v1, @code{mreal} v2) @deftypefnx {Method on @code{mglGraph}} @code{void} AddRange (@code{char} dir, @code{mreal} v1, @code{mreal} v2) @deftypefnx {C function} @code{void} mgl_set_range_val (@code{HMGL} gr, @code{char} dir, @code{mreal} v1, @code{mreal} v2) @deftypefnx {C function} @code{void} mgl_add_range_val (@code{HMGL} gr, @code{char} dir, @code{mreal} v1, @code{mreal} v2) @end ifclear Sets or adds the range for @samp{x}-,@samp{y}-,@samp{z}- coordinate or coloring (@samp{c}). If one of values is @code{NAN} then it is ignored. See also @ref{ranges}. @end deftypefn @deftypefn {MGL command} {} xrange dat [@code{add=off}] @deftypefnx {MGL command} {} yrange dat [@code{add=off}] @deftypefnx {MGL command} {} zrange dat [@code{add=off}] @deftypefnx {MGL command} {} crange dat [@code{add=off}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{const mglDataA &}dat, @code{bool} add=@code{false}) @deftypefnx {C function} @code{void} mgl_set_range_dat (@code{HMGL} gr, @code{char} dir, @code{const HCDT} a, @code{int} add) @end ifclear Sets the range for @samp{x}-,@samp{y}-,@samp{z}- coordinate or coloring (@samp{c}) as minimal and maximal values of data @var{dat}. Parameter @code{add=on} shows that the new range will be joined to existed one (not replace it). @end deftypefn @anchor{ranges} @deftypefn {MGL command} {} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{double} x1, @code{double} x2, @code{double} y1, @code{double} y2, @code{double} z1=@code{0}, @code{double} z2=@code{0}) @deftypefnx {C function} @code{void} mgl_set_ranges (@code{HMGL} gr, @code{double} x1, @code{double} x2, @code{double} y1, @code{double} y2, @code{double} z1, @code{double} z2) @end ifclear Sets the ranges of coordinates. If minimal and maximal values of the coordinate are the same then they are ignored. Also it sets the range for coloring (analogous to @code{crange z1 z2}). This is default color range for 2d plots. Initial ranges are [-1, 1]. @end deftypefn @deftypefn {MGL command} {} ranges @code{xx yy [zz cc=zz]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglDataA &}xx, @code{const mglDataA &}yy) @deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglDataA &}xx, @code{const mglDataA &}yy, @code{const mglDataA &}zz) @deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglDataA &}xx, @code{const mglDataA &}yy, @code{const mglDataA &}zz, @code{const mglDataA &}cc) @end ifclear Sets the ranges of @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-coordinates and coloring as minimal and maximal values of data @var{xx}, @var{yy}, @var{zz}, @var{cc} correspondingly. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{void} SetAutoRanges (@code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {Method on @code{mglGraph}} @code{void} SetAutoRanges (@code{double} x1, @code{double} x2, @code{double} y1, @code{double} y2, @code{double} z1=@code{0}, @code{double} z2=@code{0}, @code{double} c1=@code{0}, @code{double} c2=@code{0}) @deftypefnx {C function} @code{void} mgl_set_auto_ranges (@code{HMGL} gr, @code{double} x1, @code{double} x2, @code{double} y1, @code{double} y2, @code{double} z1, @code{double} z2, @code{double} z1, @code{double} z2) Sets the ranges for automatic coordinates. If minimal and maximal values of the coordinate are the same then they are ignored. @end deftypefn @end ifclear @anchor{origin} @deftypefn {MGL command} {} origin @code{x0 y0 [z0=nan]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetOrigin (@code{mglPoint} p0) @deftypefnx {Method on @code{mglGraph}} @code{void} SetOrigin (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0=@code{NAN}) @deftypefnx {C function} @code{void} mgl_set_origin (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0) @end ifclear Sets center of axis cross section. If one of values is NAN then MathGL try to select optimal axis position. @end deftypefn @anchor{zoomaxis} @deftypefn {MGL command} {} zoomaxis @code{x1 x2} @deftypefnx {MGL command} {} zoomaxis @code{x1 y1 x2 y2} @deftypefnx {MGL command} {} zoomaxis @code{x1 y1 z1 x2 y2 z2} @deftypefnx {MGL command} {} zoomaxis @code{x1 y1 z1 c1 x2 y2 z2 c2} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ZoomAxis (@code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {C function} @code{void} mgl_zoom_axis (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} c1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} c2) @end ifclear Additionally extend axis range for any settings made by @code{SetRange} or @code{SetRanges} functions according the formula @math{min += (max-min)*p1} and @math{max += (max-min)*p1} (or @math{min *= (max/min)^p1} and @math{max *= (max/min)^p1} for log-axis range when @math{inf>max/min>100} or @math{00 set relative length of subticks which is in @code{sqrt(1+stt)} times smaller. @end deftypefn @deftypefn {MGL command} {} axisstl 'stl' ['tck'='' 'sub'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetAxisStl (@code{const char *}stl=@code{"k"}, @code{const char *}tck=@code{0}, @code{const char *}sub=@code{0}) @deftypefnx {C function} @code{void} mgl_set_axis_stl (@code{HMGL} gr, @code{const char *}stl, @code{const char *}tck, @code{const char *}sub) @end ifclear The line style of axis (@var{stl}), ticks (@var{tck}) and subticks (@var{sub}). If @var{stl} is empty then default style is used (@samp{k} or @samp{w} depending on transparency type). If @var{tck} or @var{sub} is empty then axis style is used (i.e. @var{stl}). @end deftypefn @c ################################################################## @external{} @node Subplots and rotation, Export picture, Axis settings, MathGL core @section Subplots and rotation @nav{} @cindex Aspect @cindex Rotate @cindex RotateN @cindex SubPlot @cindex MultiPlot @cindex StickPlot @cindex ColumnPlot @cindex InPlot @cindex Title @cindex Perspective @cindex View @cindex Push @cindex Pop These functions control how and where further plotting will be placed. There is a certain calling order of these functions for the better plot appearance. First one should be @ref{subplot}, @ref{multiplot} or @ref{inplot} for specifying the place. Second one can be @ref{title} for adding title for the subplot. After it a @ref{rotate}, @ref{shear} and @ref{aspect}. And finally any other plotting functions may be called. Alternatively you can use @ref{columnplot}, @ref{gridplot}, @ref{stickplot}, @ref{shearplot} or relative @ref{inplot} for positioning plots in the column (or grid, or stick) one by another without gap between plot axis (bounding boxes). @sref{Subplots} @anchor{subplot} @deftypefn {MGL command} {} subplot @code{nx ny m} ['stl'='<>_^' @code{dx=0 dy=0}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl=@code{"<>_^"}, @code{mreal} dx=@code{0}, @code{mreal} dy=@code{0}) @deftypefnx {C function} @code{void} mgl_subplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl) @deftypefnx {C function} @code{void} mgl_subplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl, @code{mreal} dx, @code{mreal} dy) @end ifclear Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}. This function set off any aspects or rotations. So it should be used first for creating the subplot. Extra space will be reserved for axis/colorbar if @var{stl} contain: @itemize @bullet @item @samp{L} or @samp{<} -- at left side, @item @samp{R} or @samp{>} -- at right side, @item @samp{A} or @samp{^} -- at top side, @item @samp{U} or @samp{_} -- at bottom side, @item @samp{#} -- reserve none space (use whole region for axis range) -- axis and tick labels will be invisible by default. @end itemize From the aesthetical point of view it is not recommended to use this function with different matrices in the same frame. Note, colorbar can be invisible (be out of image borders) if you set empty style @samp{}. @end deftypefn @anchor{multiplot} @deftypefn {MGL command} {} multiplot @code{nx ny m dx dy} ['style'='<>_^' sx sy] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} MultiPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl=@code{"<>_^"}) @deftypefnx {C function} @code{void} mgl_multiplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl) @end ifclear Puts further plotting in a rectangle of @var{dx}*@var{dy} cells starting from @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. The position of the rectangular area can be shifted from its default position by relative size @var{sx}, @var{sy}. This function set off any aspects or rotations. So it should be used first for creating subplot. Extra space will be reserved for axis/colorbar if @var{stl} contain: @itemize @bullet @item @samp{L} or @samp{<} -- at left side, @item @samp{R} or @samp{>} -- at right side, @item @samp{A} or @samp{^} -- at top side, @item @samp{U} or @samp{_} -- at bottom side. @samp{#} -- reserve none space (use whole region for axis range) -- axis and tick labels will be invisible by default. @end itemize @end deftypefn @anchor{inplot} @deftypefn {MGL command} {} inplot @code{x1 x2 y1 y2 [rel=on]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} InPlot (@code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2, @code{bool} rel=@code{true}) @deftypefnx {C function} @code{void} mgl_inplot (@code{HMGL} gr, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2) @deftypefnx {C function} @code{void} mgl_relplot (@code{HMGL} gr, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2) @end ifclear Puts further plotting in some region of the whole frame surface. This function allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{true} then the relative position to current @ref{subplot} (or @ref{inplot} with @var{rel}=@code{false}) is used. This function set off any aspects or rotations. So it should be used first for creating subplot. @end deftypefn @anchor{columnplot} @deftypefn {MGL command} {} columnplot @code{num ind [d=0]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{mreal} d=@code{0}) @deftypefnx {C function} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind) @deftypefnx {C function} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{mreal} d) @end ifclear Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @ref{subplot} (or @ref{inplot} with @var{rel}=@code{false}). Parameter @var{d} set extra gap between cells. @end deftypefn @anchor{gridplot} @deftypefn {MGL command} {} gridplot @code{nx ny ind [d=0]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} GridPlot (@code{int} nx, @code{int} ny, @code{int} ind, @code{mreal} d=@code{0}) @deftypefnx {C function} @code{void} mgl_gridplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind) @deftypefnx {C function} @code{void} mgl_gridplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind, @code{mreal} d) @end ifclear Puts further plotting in @var{ind}-th cell of @var{nx}*@var{ny} grid. The position is relative to previous @ref{subplot} (or @ref{inplot} with @var{rel}=@code{false}). Parameter @var{d} set extra gap between cells. @end deftypefn @anchor{stickplot} @deftypefn {MGL command} {} stickplot @code{num ind tet phi} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{mreal} tet, @code{mreal} phi) @deftypefnx {C function} @code{void} mgl_stickplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{mreal} tet, @code{mreal} phi) @end ifclear Puts further plotting in @var{ind}-th cell of stick with @var{num} cells. At this, stick is rotated on angles @var{tet}, @var{phi}. The position is relative to previous @ref{subplot} (or @ref{inplot} with @var{rel}=@code{false}). @end deftypefn @anchor{shearplot} @deftypefn {MGL command} {} shearplot @code{num ind sx sy [xd yd]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ShearPlot (@code{int} num, @code{int} ind, @code{mreal} sx, @code{mreal} sy, @code{mreal} xd=@code{1}, @code{mreal} yd=@code{0}) @deftypefnx {C function} @code{void} mgl_shearplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{mreal} sx, @code{mreal} sy, @code{mreal} xd, @code{mreal} yd) @end ifclear Puts further plotting in @var{ind}-th cell of stick with @var{num} cells. At this, cell is sheared on values @var{sx}, @var{sy}. Stick direction is specified be @var{xd} and @var{yd}. The position is relative to previous @ref{subplot} (or @ref{inplot} with @var{rel}=@code{false}). @end deftypefn @anchor{title} @deftypefn {MGL command} {} title 'title' ['stl'='' @code{size=-2}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Title (@code{const char *}txt, @code{const char *}stl=@code{""}, @code{mreal} size=@code{-2}) @deftypefnx {Method on @code{mglGraph}} @code{void} Title (@code{const wchar_t *}txt, @code{const char *}stl=@code{""}, @code{mreal} size=@code{-2}) @deftypefnx {C function} @code{void} mgl_title (@code{HMGL} gr, @code{const char *}txt, @code{const char *}stl, @code{mreal} size) @deftypefnx {C function} @code{void} mgl_titlew (@code{HMGL} gr, @code{const wchar_t *}txt, @code{const char *}stl, @code{mreal} size) @end ifclear Add text @var{title} for current subplot/inplot. Parameter @var{stl} can contain: @itemize @bullet @item font style (see, @ref{Font styles}); @item @samp{#} for box around the title. @end itemize Parameter @var{size} set font size. This function set off any aspects or rotations. So it should be used just after creating subplot. @end deftypefn @anchor{rotate} @deftypefn {MGL command} {} rotate @code{tetx tetz [tety=0]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Rotate (@code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY=@code{0}) @deftypefnx {C function} @code{void} mgl_rotate (@code{HMGL} gr, @code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY) @end ifclear Rotates a further plotting relative to each axis @{x, z, y@} consecutively on angles @var{TetX}, @var{TetZ}, @var{TetY}. @end deftypefn @deftypefn {MGL command} {} rotate @code{tet x y z} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} RotateN (@code{mreal} Tet, @code{mreal} x, @code{mreal} y, @code{mreal} z) @deftypefnx {C function} @code{void} mgl_rotate_vector (@code{HMGL} gr, @code{mreal Tet}, @code{mreal x}, @code{mreal y}, @code{mreal z}) @end ifclear Rotates a further plotting around vector @{@var{x}, @var{y}, @var{z}@} on angle @var{Tet}. @end deftypefn @anchor{shear} @deftypefn {MGL command} {} shear @code{sx sy} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Shear (@code{mreal} sx, @code{mreal} sy) @deftypefnx {C function} @code{void} mgl_shear (@code{HMGL} gr, @code{mreal} sx, @code{mreal} sy) @end ifclear Shears a further plotting on values @var{sx}, @var{sy}. @end deftypefn @anchor{aspect} @deftypefn {MGL command} {} aspect @code{ax ay [az=1]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Aspect (@code{mreal} Ax, @code{mreal} Ay, @code{mreal} Az=@code{1}) @deftypefnx {C function} @code{void} mgl_aspect (@code{HMGL} gr, @code{mreal} Ax, @code{mreal} Ay, @code{mreal} Az) @end ifclear Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{Ax:Ay:Az}. For the best effect it should be used after @ref{rotate} function. If @var{Ax} is @code{NAN} then function try to select optimal aspect ratio to keep equal ranges for x-y axis. At this, @var{Ay} will specify proportionality factor, or set to use automatic one if @var{Ay}=@code{NAN}. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{void} Push () @deftypefnx {C function} @code{void} mgl_mat_push (@code{HMGL} gr) Push transformation matrix into stack. Later you can restore its current state by Pop() function. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} Pop () @deftypefnx {C function} @code{void} mgl_mat_pop (@code{HMGL} gr) Pop (restore last 'pushed') transformation matrix into stack. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetPlotFactor (@code{mreal} val) @deftypefnx {C function} @code{void} mgl_set_plotfactor (@code{HMGL} gr, @code{mreal} val) Sets the factor of plot size. It is not recommended to set it lower then 1.5. This is some analogue of function Zoom() but applied not to overall image but for each InPlot. Use negative value or zero to enable automatic selection. @end deftypefn @end ifclear There are 3 functions @code{View()}, @code{Zoom()} and @code{Perspective()} which transform whole image. I.e. they act as secondary transformation matrix. They were introduced for rotating/zooming the whole plot by mouse. It is not recommended to call them for picture drawing. @anchor{perspective} @deftypefn {MGL command} {} perspective @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Perspective (@code{mreal} a) @deftypefnx {C function} @code{void} mgl_perspective (@code{HMGL} gr, @code{mreal} a) @end ifclear Add (switch on) the perspective to plot. The parameter @math{a = Depth/(Depth+dz) \in [0,1)}. By default (@code{a=0}) the perspective is off. @end deftypefn @anchor{view} @deftypefn {MGL command} {} view @code{tetx tetz [tety=0]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} View (@code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY=@code{0}) @deftypefnx {C function} @code{void} mgl_view (@code{HMGL} gr, @code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY) @end ifclear Rotates a further plotting relative to each axis @{x, z, y@} consecutively on angles @var{TetX}, @var{TetZ}, @var{TetY}. Rotation is done independently on @ref{rotate}. Attention! this settings can not be overwritten by @code{DefaultPlotParam()}. Use @code{Zoom(0,0,1,1)} to return default view. @end deftypefn @anchor{zoom} @deftypefn {MGL command} {} zoom @code{x1 y1 x2 y2} @ifclear UDAV @deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} Zoom (@code{mreal} x1, @code{mreal} y1, @code{mreal} x2, @code{mreal} y2) @deftypefnx {C function} @code{void} mgl_set_zoom (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} x2, @code{mreal} y2) @end ifclear The function changes the scale of graphics that correspond to zoom in/out of the picture. After function call the current plot will be cleared and further the picture will contain plotting from its part [x1,x2]*[y1,y2]. Here picture coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} changes from 0 to 1. Attention! this settings can not be overwritten by any other functions, including @code{DefaultPlotParam()}. Use @code{Zoom(0,0,1,1)} to return default view. @end deftypefn @c ################################################################## @external{} @node Export picture, Background, Subplots and rotation, MathGL core @section Export picture @nav{} @cindex SetSize Functions in this group save or give access to produced picture. So, usually they should be called after plotting is done. @anchor{setsize} @deftypefn {MGL command} {} setsize @code{w h} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetSize (@code{int} width, @code{int} height, @code{bool} clear=@code{true}) @deftypefnx {C function} @code{void} mgl_set_size (@code{HMGL} gr, @code{int} width, @code{int} height) @deftypefnx {C function} @code{void} mgl_scale_size (@code{HMGL} gr, @code{int} width, @code{int} height) @end ifclear Sets size of picture in pixels. This function @strong{should be} called before any other plotting because it completely remove picture contents if @var{clear}=@code{true}. Function just clear pixels and scale all primitives if @var{clear}=@code{false}. @end deftypefn @anchor{setsizescl} @deftypefn {MGL command} {} setsizescl @code{factor} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetSizeScl (@code{double} factor) @deftypefnx {C function} @code{void} mgl_set_size_scl (@code{HMGL} gr, @code{double} factor) @end ifclear Set factor for width and height in all further calls of @ref{setsize}. @end deftypefn @anchor{quality} @deftypefn {MGL command} {} quality [@code{val}=2] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetQuality (@code{int} val=@code{MGL_DRAW_NORM}) @deftypefnx {C function} @code{void} mgl_set_quality (@code{HMGL} gr, @code{int} val) @end ifclear Sets quality of the plot depending on value @var{val}: @code{MGL_DRAW_WIRE=0} -- no face drawing (fastest), @code{MGL_DRAW_FAST=1} -- no color interpolation (fast), @code{MGL_DRAW_NORM=2} -- high quality (normal), @code{MGL_DRAW_HIGH=3} -- high quality with 3d primitives (arrows and marks); @code{MGL_DRAW_LMEM=0x4} -- direct bitmap drawing (low memory usage); @code{MGL_DRAW_DOTS=0x8} -- for dots drawing instead of primitives (extremely fast). @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{int} GetQuality () @deftypefnx {C function} @code{int} mgl_get_quality (@code{HMGL} gr) Gets quality of the plot: @code{MGL_DRAW_WIRE=0} -- no face drawing (fastest), @code{MGL_DRAW_FAST=1} -- no color interpolation (fast), @code{MGL_DRAW_NORM=2} -- high quality (normal), @code{MGL_DRAW_HIGH=3} -- high quality with 3d primitives (arrows and marks); @code{MGL_DRAW_LMEM=0x4} -- direct bitmap drawing (low memory usage); @code{MGL_DRAW_DOTS=0x8} -- for dots drawing instead of primitives (extremely fast). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} StartGroup (const char *name) @deftypefnx {C function} @code{void} mgl_start_group (@code{HMGL} gr, @code{const char *}name) Starts group definition. Groups contain objects and other groups, they are used to select a part of a model to zoom to or to make invisible or to make semitransparent and so on. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} EndGroup () @deftypefnx {C function} @code{void} mgl_end_group (@code{HMGL} gr) Ends group definition. @end deftypefn @end ifclear @menu * Export to file:: * Frames/Animation:: * Bitmap in memory:: * Parallelization:: @end menu @c ================================================================== @external{} @node Export to file, Frames/Animation, , Export picture @subsection Export to file @nav{} @cindex Write @ifclear UDAV @cindex WriteFrame @cindex WritePNG @cindex WriteGIF @c @cindex WriteIDTF @cindex WriteSVG @cindex WriteBMP @cindex WriteEPS @cindex WriteBPS @cindex WriteTGA @cindex WriteTEX @cindex WritePRC @cindex WriteOBJ @cindex WriteWGL @cindex WriteJPEG @cindex ShowImage @end ifclear These functions export current view to a graphic file. The filename @var{fname} should have appropriate extension. Parameter @var{descr} gives the short description of the picture. Just now the transparency is supported in PNG, SVG, OBJ and PRC files. @anchor{write} @deftypefn {MGL command} {} write ['fname'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @end ifclear Exports current frame to a file @var{fname} which type is determined by the extension. Parameter @var{descr} adds description to file (can be @code{""}). If @var{fname}=@code{""} then the file @samp{frame####.jpg} is used, where @samp{####} is current frame id and name @samp{frame} is defined by @ref{plotid} class property. @end deftypefn @anchor{bbox} @deftypefn {MGL command} {} bbox x1 y1 [x2=@code{-1} y2=@code{-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetBBox (@code{int} x1=@code{0}, @code{int} y1=@code{0}, @code{int} x2=@code{-1}, @code{int} y2=@code{-1}) @deftypefnx {C function} @code{void} mgl_set_bbox (@code{HMGL} gr, @code{int} x1, @code{int} y1, @code{int} x2, @code{int} y2) @end ifclear Set boundary box for export graphics into 2D file formats. If @var{x2}<0 (@var{y2}<0) then original image width (height) will be used. If @var{x1}<0 or @var{y1}<0 or @var{x1}>=@var{x2}|Width or @var{y1}>=@var{y2}|Height then cropping will be disabled. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{void} WritePNG (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{int} compr=@code{""}, @code{bool} alpha=@code{true}) @deftypefnx {C function} @code{void} mgl_write_png (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @deftypefnx {C function} @code{void} mgl_write_png_solid (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to PNG file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file, @var{alpha} gives the transparency type. By default there are no description added and semitransparent image used. This function does nothing if HAVE_PNG isn't defined during compilation of MathGL library. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteJPEG (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_jpg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to JPEG file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added. This function does nothing if HAVE_JPEG isn't defined during compilation of MathGL library. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteGIF (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_gif (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to GIF file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added. This function does nothing if HAVE_GIF isn't defined during compilation of MathGL library. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteBMP (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_bmp (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to BMP file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. There is no compression used. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteTGA (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_tga (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to TGA file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. There is no compression used. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteEPS (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to EPS file using vector representation. So it is not recommended for the export of large data plot. It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added. If file name is terminated by @samp{z} (for example, @samp{fname.eps.gz}) then file will be compressed in gzip format. Note, that EPS format don't support color interpolation, and the resulting plot will look as you use @ref{quality}=1 for plotting. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteBPS (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to EPS file using bitmap representation. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added. If file name is terminated by @samp{z} (for example, @samp{fname.eps.gz}) then file will be compressed in gzip format. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteSVG (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_svg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to SVG (Scalable Vector Graphics) file using vector representation. In difference of EPS format, SVG format support transparency that allows to correctly draw semitransparent plot (like @ref{surfa}, @ref{surf3a} or @ref{cloud}). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). If file name is terminated by @samp{z} (for example, @samp{fname.svgz}) then file will be compressed in gzip format. Note, that SVG format don't support color interpolation, and the resulting plot will look as you use @ref{quality}=1 for plotting. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteTEX (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_tex (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to LaTeX (package Tikz/PGF) file using vector representation. Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). Note, there is no text scaling now (for example, in subplots), what may produce miss-aligned labels. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WritePRC (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} make_pdf=@code{true}) @deftypefnx {C function} @code{void} mgl_write_prc (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr, @code{int} make_pdf) Exports current frame to PRC file using vector representation (see @url{http://en.wikipedia.org/wiki/PRC_%28file_format%29}). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). If parameter @var{make_pdf}=@code{true} and PDF was enabled at MathGL configure then corresponding PDF file with 3D image will be created. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteOBJ (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_obj (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to OBJ/MTL file using vector representation (see @url{http://en.wikipedia.org/wiki/Wavefront_.obj_file, OBJ format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteXYZ (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_xyz (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to XYZ/XYZL/XYZF files using vector representation (see @url{http://people.sc.fsu.edu/~jburkardt/data/xyz/xyz.html, XYZ format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteSTL (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_stl (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to STL file using vector representation (see @url{http://en.wikipedia.org/wiki/STL_(file_format), STL format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} colored=@code{false}) @deftypefnx {C function} @code{void} mgl_write_off (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr, @code{bool} colored) Exports current frame to OFF file using vector representation (see @url{http://people.sc.fsu.edu/~jburkardt/data/off/off.html, OFF format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @end deftypefn @c @deftypefn {Method on @code{mglGraph}} @code{void} WriteX3D (@code{const char *}fname, @code{const char *}descr=@code{""}) @c @deftypefnx {C function} @code{void} mgl_write_x3d (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @c Exports current frame to X3D file using vector representation (see @url{http://en.wikipedia.org/wiki/X3d, X3D format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @c @end deftypefn @c @deftypefn {Method on @code{mglGraph}} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""}) @c @deftypefnx {C function} @code{void} mgl_write_idtf (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @c Exports current frame to IDTF file. Later this file can be converted to U3D format. The vector representation is used. So, the output file may be too large for graphic of large data array (especially for surfaces). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @c @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} ShowImage (@code{const char *}viewer, @code{bool} nowait=@code{false}) @deftypefnx {C function} @code{void} mgl_show_image (@code{const char *}viewer, @code{int} nowait) Displays the current picture using external program @var{viewer} for viewing. The function save the picture to temporary file and call @var{viewer} to display it. If @var{nowait}=@code{true} then the function return immediately (it will not wait while window will be closed). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteJSON (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_json (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports current frame to textual file using @ref{JSON format}. Later this file can be used for faster loading and viewing by JavaScript script. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} ExportMGLD (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_export_mgld (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Exports points and primitives in file using @ref{MGLD format}. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{bool} add=@code{false}) @deftypefnx {C function} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{int} add) Imports points and primitives in file using @ref{MGLD format}. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{add} sets to append or replace primitives to existed ones. @end deftypefn @end ifclear @c ################################################################## @external{} @node Frames/Animation, Bitmap in memory, Export to file, Export picture @subsection Frames/Animation @nav{} @ifset UDAV There are no commands for making animation in MGL. However you can use features of @code{mglconv} and @code{mglview} utilities. For example, by busing special comments @samp{##a } or @samp{##c }. @end ifset @ifclear UDAV @cindex NewFrame @cindex EndFrame @cindex GetNumFrame @cindex ResetFrames @cindex StartGIF @cindex CloseGIF These functions provide ability to create several pictures simultaneously. For most of cases it is useless but for widget classes (see @ref{Widget classes}) they can provide a way to show animation. Also you can write several frames into animated GIF file. @deftypefn {Method on @code{mglGraph}} @code{void} NewFrame () @deftypefnx {C function} @code{void} mgl_new_frame (@code{HMGL} gr) Creates new frame. Function returns current frame id. This is not thread safe function in OpenGL mode! Use direct list creation in multi-threading drawing. The function @code{EndFrame()} @strong{must} be call after the finishing of the frame drawing for each call of this function. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} EndFrame () @deftypefnx {C function} @code{void} mgl_end_frame (@code{HMGL} gr) Finishes the frame drawing. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} GetNumFrame () @deftypefnx {C function} @code{int} mgl_get_num_frame (@code{HMGL} gr) Gets the number of created frames. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetFrame (@code{int} i) @deftypefnx {C function} @code{void} mgl_set_frame (@code{HMGL} gr, @code{int} i) Finishes the frame drawing and sets drawing data to frame @var{i}, which should be in range [0, @code{GetNumFrame()}-1]. This function is similar to @code{EndFrame()} but don't add frame to the GIF image. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} GetFrame (@code{int} i) @deftypefnx {C function} @code{void} mgl_get_frame (@code{HMGL} gr, @code{int} i) Replaces drawing data by one from frame @var{i}. Function work if @code{MGL_VECT_FRAME} is set on (by default). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} ShowFrame (@code{int} i) @deftypefnx {C function} @code{void} mgl_show_frame (@code{HMGL} gr, @code{int} i) Appends drawing data from frame @var{i} to current one. Function work if @code{MGL_VECT_FRAME} is set on (by default). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} DelFrame (@code{int} i) @deftypefnx {C function} @code{void} mgl_del_frame (@code{HMGL} gr, @code{int} i) Deletes drawing data for frame @var{i} and shift all later frame indexes. Function work if @code{MGL_VECT_FRAME} is set on (by default). Do nothing in OpenGL mode. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} ResetFrames () @deftypefnx {C function} @code{void} mgl_reset_frames (@code{HMGL} gr) Reset frames counter (start it from zero). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} ClearFrame (@code{int} i) @deftypefnx {C function} @code{void} mgl_clear_frame (@code{HMGL} gr, @code{int} i) Clear list of primitives for current drawing. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} StartGIF (@code{const char *}fname, @code{int} ms=@code{100}) @deftypefnx {C function} @code{void} mgl_start_gif (@code{HMGL} gr, @code{const char *}fname, @code{int} ms) Start writing frames into animated GIF file @var{fname}. Parameter @var{ms} set the delay between frames in milliseconds. You @strong{should not} change the picture size during writing the cinema. Use @code{CloseGIF()} to finalize writing. Note, that this function is disabled in OpenGL mode. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} CloseGIF () @deftypefnx {C function} @code{void} mgl_close_gif (@code{HMGL} gr) Finish writing animated GIF and close connected pointers. @end deftypefn @end ifclear @c ------------------------------------------------------------------ @external{} @node Bitmap in memory, Parallelization, Frames/Animation, Export picture @subsection Bitmap in memory @nav{} @ifclear UDAV These functions return the created picture (bitmap), its width and height. You may display it by yourself in any graphical library (see also, @ref{Widget classes}) or save in file (see also, @ref{Export to file}). @deftypefn {Method on @code{mglGraph}} @code{const unsigned char *} GetRGB () @deftypefnx {Method on @code{mglGraph}} @code{void} GetRGB (@code{char *}buf, @code{int} size) @deftypefnx {Method on @code{mglGraph}} @code{void} GetBGRN (@code{char *}buf, @code{int} size) @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgb (@code{HMGL} gr) Gets RGB bitmap of the current state of the image. Format of each element of bits is: @{red, green, blue@}. Number of elements is Width*Height. Position of element @{i,j@} is [3*i + 3*Width*j] (or is [4*i + 4*Width*j] for @code{GetBGRN()}). You have to provide the proper @var{size} of the buffer, @var{buf}, i.e. the code for Python should look like @verbatim from mathgl import * gr = mglGraph(); bits='\t'; bits=bits.expandtabs(4*gr.GetWidth()*gr.GetHeight()); gr.GetBGRN(bits, len(bits)); @end verbatim @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{const unsigned char *} GetRGBA () @deftypefnx {Method on @code{mglGraph}} @code{void} GetRGBA (@code{char *}buf, @code{int} size) @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgba (@code{HMGL} gr) Gets RGBA bitmap of the current state of the image. Format of each element of bits is: @{red, green, blue, alpha@}. Number of elements is Width*Height. Position of element @{i,j@} is [4*i + 4*Width*j]. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} GetWidth () @deftypefnx {Method on @code{mglGraph}} @code{int} GetHeight () @deftypefnx {C function} @code{int} mgl_get_width (@code{HMGL} gr) @deftypefnx {C function} @code{int} mgl_get_height (@code{HMGL} gr) Gets width and height of the image. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys) @deftypefnx {C function} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{mreal *}x, @code{mreal *}y, @code{mreal *}z) Calculate 3D coordinate @{x,y,z@} for screen point @{xs,ys@}. At this moment it ignore perspective and transformation formulas (curvilinear coordinates). The calculation are done for the last used InPlot (see @ref{Subplots and rotation}). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{mglPoint} CalcScr (@code{mglPoint} p) @deftypefnx {C function} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{int *}xs, @code{int *}ys) Calculate screen point @{xs,ys@} for 3D coordinate @{x,y,z@}. The calculation are done for the last used InPlot (see @ref{Subplots and rotation}). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} SetObjId (@code{int} id) @deftypefnx {C function} @code{void} mgl_set_obj_id (@code{HMGL} gr, @code{int} id) Set the numeric id for object or subplot/inplot. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} GetObjId (@code{int} xs, @code{int} ys) @deftypefnx {C function} @code{int} mgl_get_obj_id (@code{HMGL} gr, @code{int} xs, @code{int} ys) Get the numeric id for most upper object at pixel @{xs, ys@} of the picture. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} GetSplId (@code{int} xs, @code{int} ys) @deftypefnx {C function} @code{int} mgl_get_spl_id (@code{HMGL} gr, @code{int} xs, @code{int} ys) Get the numeric id for most subplot/inplot at pixel @{xs, ys@} of the picture. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} Highlight (@code{int} id) @deftypefnx {C function} @code{void} mgl_highlight (@code{HMGL} gr, @code{int} id) Highlight the object with given @var{id}. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{long} IsActive (@code{int} xs, @code{int} ys, @code{int} d=@code{1}) @deftypefnx {C function} @code{long} mgl_is_active (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{int} d) Checks if point @{@var{xs}, @var{ys}@} is close to one of active point (i.e. mglBase::Act) with accuracy @var{d} and return its index or @code{-1} if not found. Active points are special points which characterize primitives (like edges and so on). This function for advanced users only. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{long} SetDrawReg (@code{int} nx=@code{1}, @code{int} ny=@code{1}, @code{int} m=@code{0}) @deftypefnx {C function} @code{long} mgl_set_draw_reg (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m) Limits drawing region by rectangular area of @var{m}-th cell of matrix with sizes @var{nx}*@var{ny} (like in @ref{subplot}). This function can be used to update only small region of the image for purposes of higher speed. This function for advanced users only. @end deftypefn @end ifclear @c ------------------------------------------------------------------ @external{} @node Parallelization, , Bitmap in memory, Export picture @subsection Parallelization @nav{} @ifclear UDAV @cindex Combine @cindex MPI_Send @cindex MPI_Recv Many of things MathGL do in parallel by default (if MathGL was built with pthread). However, there is function which set the number of threads to be used. @deftypefn {C function} @code{int} mgl_set_num_thr (@code{int} n) Set the number of threads to be used by MathGL. If @var{n}<1 then the number of threads is set as maximal number of processors (cores). If @var{n}=1 then single thread will be used (this is default if pthread was disabled). @end deftypefn Another option is combining bitmap image (taking into account Z-ordering) from different instances of @code{mglGraph}. This method is most appropriate for computer clusters when the data size is so large that it exceed the memory of single computer node. @deftypefn {Method on @code{mglGraph}} @code{int} Combine (@code{const mglGraph *}g) @deftypefnx {C function} @code{int} mgl_combine_gr (@code{HMGL} gr, @code{HMGL} g) Combine drawing from instance @var{g} with @var{gr} (or with this) taking into account Z-ordering of pixels. The width and height of both instances must be the same. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} MPI_Send (@code{int} id) @deftypefnx {C function} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) Send graphical information from node @var{id} using MPI. The width and height in both nodes must be the same. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} MPI_Recv (@code{int} id) @deftypefnx {C function} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) Receive graphical information from node @var{id} using MPI. The width and height in both nodes must be the same. @end deftypefn @end ifclear @c ################################################################## @external{} @node Background, Primitives, Export picture, MathGL core @section Background @nav{} @cindex LoadBackground @cindex Clf @cindex Rasterize These functions change background image. @anchor{clf} @deftypefn {MGL command} {} clf ['col'] @deftypefnx {MGL command} {} clf r g b @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Clf () @deftypefnx {Method on @code{mglGraph}} @code{void} Clf (@code{const char *} col) @deftypefnx {Method on @code{mglGraph}} @code{void} Clf (@code{char} col) @deftypefnx {Method on @code{mglGraph}} @code{void} Clf (@code{mreal} r, @code{mreal} g, @code{mreal} b) @deftypefnx {C function} @code{void} mgl_clf (@code{HMGL} gr) @deftypefnx {C function} @code{void} mgl_clf_str (@code{HMGL} gr, @code{const char *} col) @deftypefnx {C function} @code{void} mgl_clf_chr (@code{HMGL} gr, @code{char} col) @deftypefnx {C function} @code{void} mgl_clf_rgb (@code{HMGL} gr, @code{mreal} r, @code{mreal} g, @code{mreal} b) @end ifclear Clear the picture and fill background by specified color. @end deftypefn @anchor{rasterize} @deftypefn {MGL command} {} rasterize @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Rasterize () @deftypefnx {C function} @code{void} mgl_rasterize (@code{HMGL} gr) @end ifclear Force drawing the plot and use it as background. After it, function clear the list of primitives, like @ref{clf}. This function is useful if you want save part of plot as bitmap one (for example, large surfaces, isosurfaces or vector fields) and keep some parts as vector one (like annotation, curves, axis and so on). @end deftypefn @anchor{background} @deftypefn {MGL command} {} background 'fname' [@code{alpha=1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} LoadBackground (@code{const char *} fname, @code{double} alpha=@code{1}) @deftypefnx {C function} @code{void} mgl_load_background (@code{HMGL} gr, @code{const char *} fname, @code{double} alpha) @end ifclear Load PNG or JPEG file @var{fname} as background for the plot. Parameter @var{alpha} manually set transparency of the background. @end deftypefn @c ################################################################## @external{} @node Primitives, Text printing, Background, MathGL core @section Primitives @nav{} @cindex Ball @cindex Line @cindex Curve @cindex Glyph @cindex Face @cindex FaceX @cindex FaceY @cindex FaceZ @cindex Cone @cindex Drop @cindex Sphere @ifclear UDAV @cindex Mark @cindex Error @end ifclear These functions draw some simple objects like line, point, sphere, drop, cone and so on. @sref{Using primitives} @anchor{ball} @deftypefn {MGL command} {} ball @code{x y} ['col'='r.'] @deftypefnx {MGL command} {} ball @code{x y z} ['col'='r.'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Ball (@code{mglPoint} p, @code{char} col=@code{'r'}) @deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{mglPoint} p, @code{const char *}mark) @deftypefnx {C function} @code{void} mgl_mark (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const char *}mark) @end ifclear Draws a mark (point @samp{.} by default) at position @var{p}=@{@var{x}, @var{y}, @var{z}@} with color @var{col}. @end deftypefn @anchor{errbox} @deftypefn {MGL command} {} errbox @code{x y ex ey} ['stl'=''] @deftypefnx {MGL command} {} errbox @code{x y z ex ey ez} ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Error (@code{mglPoint} p, @code{mglPoint} e, @code{char} *stl=@code{""}) @deftypefnx {C function} @code{void} mgl_error_box (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{mreal} ex, @code{mreal} ey, @code{mreal} ez, @code{char *}stl) @end ifclear Draws a 3d error box at position @var{p}=@{@var{x}, @var{y}, @var{z}@} with sizes @var{e}=@{@var{ex}, @var{ey}, @var{ez}@} and style @var{stl}. Use NAN for component of @var{e} to reduce number of drawn elements. @end deftypefn @anchor{line} @deftypefn {MGL command} {} line @code{x1 y1 x2 y2} ['stl'=''] @deftypefnx {MGL command} {} line @code{x1 y1 z1 x2 y2 z2} ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Line (@code{mglPoint} p1, @code{mglPoint} p2, @code{char *}stl=@code{"B"}, @code{int} num=@code{2}) @deftypefnx {C function} @code{void} mgl_line (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{char *}stl, @code{int} num) @end ifclear Draws a geodesic line (straight line in Cartesian coordinates) from point @var{p1} to @var{p2} using line style @var{stl}. Parameter @var{num} define the ``quality'' of the line. If @var{num}=@code{2} then the straight line will be drawn in all coordinate system (independently on transformation formulas (see @ref{Curved coordinates}). Contrary, for large values (for example, =@code{100}) the geodesic line will be drawn in corresponding coordinate system (straight line in Cartesian coordinates, circle in polar coordinates and so on). Line will be drawn even if it lies out of bounding box. @end deftypefn @anchor{curve} @deftypefn {MGL command} {} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'=''] @deftypefnx {MGL command} {} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Curve (@code{mglPoint} p1, @code{mglPoint} d1, @code{mglPoint} p2, @code{mglPoint} d2, @code{const char *}stl=@code{"B"}, @code{int} num=@code{100}) @deftypefnx {C function} @code{void} mgl_curve (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} dx1, @code{mreal} dy1, @code{mreal} dz1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} dx2, @code{mreal} dy2, @code{mreal} dz2, @code{const char *}stl, @code{int} num) @end ifclear Draws Bezier-like curve from point @var{p1} to @var{p2} using line style @var{stl}. At this tangent is codirected with @var{d1}, @var{d2} and proportional to its amplitude. Parameter @var{num} define the ``quality'' of the curve. If @var{num}=@code{2} then the straight line will be drawn in all coordinate system (independently on transformation formulas, see @ref{Curved coordinates}). Contrary, for large values (for example, =@code{100}) the spline like Bezier curve will be drawn in corresponding coordinate system. Curve will be drawn even if it lies out of bounding box. @end deftypefn @anchor{face} @deftypefn {MGL command} {} face @code{x1 y1 x2 y2 x3 y3 x4 y4} ['stl'=''] @deftypefnx {MGL command} {} face @code{x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4} ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Face (@code{mglPoint} p1, @code{mglPoint} p2, @code{mglPoint} p3, @code{mglPoint} p4, @code{const char *}stl=@code{"w"}) @deftypefnx {C function} @code{void} mgl_face (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} x3, @code{mreal} y3, @code{mreal} z3, @code{mreal} x4, @code{mreal} y4, @code{mreal} z4, @code{const char *}stl) @end ifclear Draws the solid quadrangle (face) with vertexes @var{p1}, @var{p2}, @var{p3}, @var{p4} and with color(s) @var{stl}. At this colors can be the same for all vertexes or different if all 4 colors are specified for each vertex. Face will be drawn even if it lies out of bounding box. @end deftypefn @anchor{rect} @deftypefn {MGL command} {} rect @code{x1 y1 x2 y2} ['stl'=''] @deftypefnx {MGL command} {} rect @code{x1 y1 z1 x2 y2 z2} ['stl'=''] Draws the solid rectangle (face) with vertexes @{@var{x1}, @var{y1}, @var{z1}@} and @{@var{x2}, @var{y2}, @var{z2}@} with color @var{stl}. At this colors can be the same for all vertexes or separately if all 4 colors are specified for each vertex. Face will be drawn even if it lies out of bounding box. @end deftypefn @anchor{facex} @anchor{facey} @anchor{facez} @deftypefn {MGL command} {} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}] @deftypefnx {MGL command} {} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}] @deftypefnx {MGL command} {} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} FaceX (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wy, @code{mreal} wz, @code{const char *}stl=@code{"w"}, @code{mreal} d1=@code{0}, @code{mreal} d2=@code{0}) @deftypefnx {Method on @code{mglGraph}} @code{void} FaceY (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wz, @code{const char *}stl=@code{"w"}, @code{mreal} d1=@code{0}, @code{mreal} d2=@code{0}) @deftypefnx {Method on @code{mglGraph}} @code{void} FaceZ (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wy, @code{const char *}stl=@code{"w"}, @code{mreal} d1=@code{0}, @code{mreal} d2=@code{0}) @deftypefnx {C function} @code{void} mgl_facex (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wy, @code{mreal} wz, @code{const char *}stl, @code{mreal} d1, @code{mreal} d2) @deftypefnx {C function} @code{void} mgl_facey (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wz, @code{const char *}stl, @code{mreal} d1, @code{mreal} d2) @deftypefnx {C function} @code{void} mgl_facez (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wy, @code{const char *}stl, @code{mreal} d1, @code{mreal} d2) @end ifclear Draws the solid rectangle (face) perpendicular to [x,y,z]-axis correspondingly at position @{@var{x0}, @var{y0}, @var{z0}@} with color @var{stl} and with widths @var{wx}, @var{wy}, @var{wz} along corresponding directions. At this colors can be the same for all vertexes or separately if all 4 colors are specified for each vertex. Parameters @var{d1}!=0, @var{d2}!=0 set additional shift of the last vertex (i.e. to draw quadrangle). Face will be drawn even if it lies out of bounding box. @end deftypefn @anchor{sphere} @deftypefn {MGL command} {} sphere @code{x0 y0 r} ['col'='r'] @deftypefnx {MGL command} {} sphere @code{x0 y0 z0 r} ['col'='r'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Sphere (@code{mglPoint} p, @code{mreal} r, @code{const char *}stl=@code{"r"}) @deftypefnx {C function} @code{void} mgl_sphere (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} r, @code{const char *}stl) @end ifclear Draw the sphere with radius @var{r} and center at point @var{p}=@{@var{x0}, @var{y0}, @var{z0}@} and color @var{stl}. @end deftypefn @anchor{drop} @deftypefn {MGL command} {} drop @code{x0 y0 dx dy r} ['col'='r' @code{sh=1 asp=1}] @deftypefnx {MGL command} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='r' @code{sh=1 asp=1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{mreal} r, @code{const char *}col=@code{"r"}, @code{mreal} shift=@code{1}, @code{mreal} ap=@code{1}) @deftypefnx {C function} @code{void} mgl_drop (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{mreal} r, @code{const char *}col, @code{mreal} shift, @code{mreal} ap) @end ifclear Draw the drop with radius @var{r} at point @var{p} elongated in direction @var{d} and with color @var{col}. Parameter @var{shift} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{ap} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @end deftypefn @anchor{cone} @deftypefn {MGL command} {} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Cone (@code{mglPoint} p1, @code{mglPoint} p2, @code{mreal} r1, @code{mreal} r2=@code{-1}, @code{const char *}stl=@code{"B"}) @deftypefnx {C function} @code{void} mgl_cone (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} r1, @code{mreal} r2, @code{const char *}stl) @end ifclear Draw tube (or truncated cone if @var{edge}=@code{false}) between points @var{p1}, @var{p2} with radius at the edges @var{r1}, @var{r2}. If @var{r2}<0 then it is supposed that @var{r2}=@var{r1}. The cone color is defined by string @var{stl}. Parameter @var{stl} can contain: @itemize @bullet @item @samp{@@} for drawing edges; @item @samp{#} for wired cones; @item @samp{t} for drawing tubes/cylinder instead of cones/prisms; @item @samp{4}, @samp{6}, @samp{8} for drawing square, hex- or octo-prism instead of cones. @end itemize @end deftypefn @anchor{circle} @deftypefn {MGL command} {} circle @code{x0 y0 r} ['col'='r'] @deftypefnx {MGL command} {} circle @code{x0 y0 z0 r} ['col'='r'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Circle (@code{mglPoint} p, @code{mreal} r, @code{const char *}stl=@code{"r"}) @end ifclear Draw the circle with radius @var{r} and center at point @var{p}=@{@var{x0}, @var{y0}, @var{z0}@}. Parameter @var{col} may contain @itemize @bullet @item colors for filling and boundary (second one if style @samp{@@} is used, black color is used by default); @item @samp{#} for wire figure (boundary only); @item @samp{@@} for filling and boundary. @end itemize @end deftypefn @anchor{ellipse} @deftypefn {MGL command} {} ellipse @code{x1 y1 x2 y2 r} ['col'='r'] @deftypefnx {MGL command} {} ellipse @code{x1 y1 z1 x2 y2 z2 r} ['col'='r'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Ellipse (@code{mglPoint} p1, @code{mglPoint} p2, @code{mreal} r, @code{const char *}col=@code{"r"}) @deftypefnx {C function} @code{void} mgl_ellipse (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} r, @code{const char *}col) @end ifclear Draw the ellipse with radius @var{r} and focal points @var{p1}, @var{p2}. Parameter @var{col} may contain @itemize @bullet @item colors for filling and boundary (second one if style @samp{@@} is used, black color is used by default); @item @samp{#} for wire figure (boundary only); @item @samp{@@} for filling and boundary. @end itemize @end deftypefn @anchor{rhomb} @deftypefn {MGL command} {} rhomb @code{x1 y1 x2 y2 r} ['col'='r'] @deftypefnx {MGL command} {} rhomb @code{x1 y1 z1 x2 y2 z2 r} ['col'='r'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Rhomb (@code{mglPoint} p1, @code{mglPoint} p2, @code{mreal} r, @code{const char *}col=@code{"r"}) @deftypefnx {C function} @code{void} mgl_rhomb (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} r, @code{const char *}col) @end ifclear Draw the rhombus with width @var{r} and edge points @var{p1}, @var{p2}. Parameter @var{col} may contain @itemize @bullet @item colors for filling and boundary (second one if style @samp{@@} is used, black color is used by default); @item @samp{#} for wire figure (boundary only); @item @samp{@@} for filling and boundary. @end itemize @end deftypefn @anchor{arc} @deftypefn {MGL command} {} arc @code{x0 y0 x1 y1 a} ['col'='r'] @deftypefnx {MGL command} {} arc @code{x0 y0 z0 x1 y1 a} ['col'='r'] @deftypefnx {MGL command} {} arc @code{x0 y0 z0 xa ya za x1 y1 z1 a} ['col'='r'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Arc (@code{mglPoint} p0, @code{mglPoint} p1, @code{mreal} a, @code{const char *}col=@code{"r"}) @deftypefnx {Method on @code{mglGraph}} @code{void} Arc (@code{mglPoint} p0, @code{mglPoint} pa, @code{mglPoint} p1, @code{mreal} a, @code{const char *}col=@code{"r"}) @deftypefnx {C function} @code{void} mgl_arc (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} x1, @code{mreal} y1, @code{mreal} a, @code{const char *}col) @deftypefnx {C function} @code{void} mgl_arc_ext (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} xa, @code{mreal} ya, @code{mreal} za, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} a, @code{const char *}col) @end ifclear Draw the arc around axis @var{pa} (default is z-axis @var{pa}=@{0,0,1@}) with center at @var{p0} and starting from point @var{p1}. Parameter @var{a} set the angle of arc in degree. Parameter @var{col} may contain color of the arc and arrow style for arc edges. @end deftypefn @anchor{polygon} @deftypefn {MGL command} {} polygon @code{x0 y0 x1 y1 num} ['col'='r'] @deftypefnx {MGL command} {} polygon @code{x0 y0 z0 x1 y1 z1 num} ['col'='r'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Polygon (@code{mglPoint} p0, @code{mglPoint} p1, @code{int} num, @code{const char *}col=@code{"r"}) @deftypefnx {C function} @code{void} mgl_polygon (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{int} num, @code{const char *}col) @end ifclear Draw the polygon with @var{num} edges starting from @var{p1}. The center of polygon is located in @var{p0}. Parameter @var{col} may contain @itemize @bullet @item colors for filling and boundary (second one if style @samp{@@} is used, black color is used by default); @item @samp{#} for wire figure (boundary only); @item @samp{@@} for filling and boundary. @end itemize @end deftypefn @anchor{logo} @deftypefn {MGL command} {} logo 'fname' [smooth=off] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Logo (@code{const char *}fname, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Logo (@code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) @deftypefnx {C function only} @code{void} mgl_logo (@code{HMGL} gr, @code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_logo_file (@code{HMGL} gr, @code{const char *}fname, @code{bool} smooth, @code{const char *}opt) @end ifclear Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command options}. Bitmap can be loaded from file or specified as RGBA values for pixels. Parameter @var{smooth} set to draw bitmap without or with color interpolation. @end deftypefn @anchor{symbol} @deftypefn {MGL command} {} symbol @code{x y} 'id' ['fnt'='' @code{size=-1}] @deftypefnx {MGL command} {} symbol @code{x y z} 'id' ['fnt'='' @code{size=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Symbol (@code{mglPoint} p, @code{char} id, @code{const char *}fnt=@code{""}, @code{mreal} size=@code{-1}) @deftypefnx {C function} @code{void} mgl_symbol (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{char} id, @code{const char *}fnt, @code{mreal} size) @end ifclear Draws user-defined symbol with name @var{id} at position @var{p} with style specifying by @var{fnt}. The size of font is set by @var{size} parameter (default is @code{-1}). The string @var{fnt} may contain color specification ended by @samp{:} symbol; styles @samp{a}, @samp{A} to draw at absolute position @{@var{x}, @var{y}@} (supposed to be in range [0,1]) of picture (for @samp{A}) or subplot/inplot (for @samp{a}); and style @samp{w} to draw wired symbol. @end deftypefn @deftypefn {MGL command} {} symbol @code{x y dx dy} 'id' ['fnt'=':L' @code{size=-1}] @deftypefnx {MGL command} {} symbol @code{x y z dx dy dz} 'id' ['fnt'=':L' @code{size=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Symbol (@code{mglPoint} p, @code{mglPoint} d, @code{char} id, @code{const char *}fnt=@code{""}, @code{mreal} size=@code{-1}) @deftypefnx {C function} @code{void} mgl_symbol_dir (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{const char *}text, @code{const char *}fnt, @code{mreal} size) @end ifclear The same as previous but symbol will be drawn rotated along direction @var{d}. @end deftypefn @anchor{addsymbol} @deftypefn {MGL command} {} addsymbol 'id' xdat ydat @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} DefineSymbol (@code{char} id, @code{const mglDataA &}xdat, @code{const mglDataA &}ydat) @deftypefnx {C function} @code{void} mgl_define_symbol (@code{HMGL} gr, @code{HCDT} xdat, @code{HCDT} ydat) @end ifclear Add user-defined symbol with name @var{id} and contour @{@var{xdat}, @var{ydat}@}. You can use @code{NAN} values to set break (jump) of contour curve. @end deftypefn @c ################################################################## @external{} @node Text printing, Axis and Colorbar, Primitives, MathGL core @section Text printing @nav{} @ifclear UDAV @cindex Puts @cindex Putsw @end ifclear @cindex Text @cindex Label @cindex fgets These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. MathGL can use arbitrary font-faces and parse many TeX commands (for more details see @ref{Font styles}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion into the current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The @var{size} argument control the size of text: if positive it give the value, if negative it give the value relative to @code{SetFontSize()}. The font type (STIX, arial, courier, times and so on) can be selected by function LoadFont(). @xref{Font settings}. The font parameters are described by string. This string may set the text color @samp{wkrgbcymhRGBCYMHW} (see @ref{Color styles}). Starting from MathGL v.2.3, you can set color gradient for text (see @ref{Color scheme}). Also, after delimiter symbol @samp{:}, it can contain characters of font type (@samp{rbiwou}) and/or align (@samp{LRCTV}) specification. The font types are: @samp{r} -- roman (or regular) font, @samp{i} -- italic style, @samp{b} -- bold style, @samp{w} -- wired style, @samp{o} -- over-lined text, @samp{u} -- underlined text. By default roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right, @samp{T} -- align under, @samp{V} -- align center vertical. For example, string @samp{b:iC} correspond to italic font style for centered text which printed by blue color. If string contains symbols @samp{aA} then text is printed at absolute position @{@var{x}, @var{y}@} (supposed to be in range [0,1]) of picture (for @samp{A}) or subplot/inplot (for @samp{a}). If string contains symbol @samp{@@} then box around text is drawn. @sref{Text features} @anchor{text} @deftypefn {MGL command} {} text @code{x y} 'text' ['fnt'='' @code{size=-1}] @deftypefnx {MGL command} {} text @code{x y z} 'text' ['fnt'='' @code{size=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{const char *}text, @code{const char *}fnt=@code{":C"}, @code{mreal} size=@code{-1}) @deftypefnx {Method on @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{const wchar_t *}text, @code{const char *}fnt=@code{":C"}, @code{mreal} size=@code{-1}) @deftypefnx {Method on @code{mglGraph}} @code{void} Puts (@code{mreal} x, @code{mreal} y, @code{const char *}text, @code{const char *}fnt=@code{":AC"}, @code{mreal} size=@code{-1}) @deftypefnx {Method on @code{mglGraph}} @code{void} Putsw (@code{mreal} x, @code{mreal} y, @code{const wchar_t *}text, @code{const char *}fnt=@code{":AC"}, @code{mreal} size=@code{-1}) @deftypefnx {C function} @code{void} mgl_puts (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const char *}text, @code{const char *}fnt, @code{mreal} size) @deftypefnx {C function} @code{void} mgl_putsw (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{mreal} size) @end ifclear Draws the string @var{text} at position @var{p} with fonts specifying by the criteria @var{fnt}. The size of font is set by @var{size} parameter (default is @code{-1}). @end deftypefn @deftypefn {MGL command} {} text @code{x y dx dy} 'text' ['fnt'=':L' @code{size=-1}] @deftypefnx {MGL command} {} text @code{x y z dx dy dz} 'text' ['fnt'=':L' @code{size=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{mglPoint} d, @code{const char *}text, @code{const char *}fnt=@code{":L"}, @code{mreal} size=@code{-1}) @deftypefnx {Method on @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{mglPoint} d, @code{const wchar_t *}text, @code{const char *}fnt=@code{":L"}, @code{mreal} size=@code{-1}) @deftypefnx {C function} @code{void} mgl_puts_dir (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{const char *}text, @code{const char *}fnt, @code{mreal} size) @deftypefnx {C function} @code{void} mgl_putsw_dir (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{const wchar_t *}text, @code{const char *}fnt, @code{mreal} size) @end ifclear Draws the string @var{text} at position @var{p} along direction @var{d} with specified @var{size}. Parameter @var{fnt} set text style and text position: under (@samp{T}) or above (@samp{t}) the line. @end deftypefn @anchor{fgets} @deftypefn {MGL command} {} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] @deftypefnx {MGL command} {} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x},@var{y},@var{z}@} with specified @var{size}. By default parameters from @ref{font} command are used. @end deftypefn @deftypefn {MGL command} {} text ydat 'text' ['fnt'=''] @deftypefnx {MGL command} {} text xdat ydat 'text' ['fnt'=''] @deftypefnx {MGL command} {} text xdat ydat zdat 'text' ['fnt'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglDataA &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglDataA &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_text_y (@code{HMGL} gr, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textw_y (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_text_xy (@code{HCDT} x, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textw_xy (@code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_text_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textw_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) @end ifclear The function draws @var{text} along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} by font style @var{fnt}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text under the curve. The sizes of 1st dimension must be equal for all arrays @code{x.nx=y.nx=z.nx}. If array @var{x} is not specified then its an automatic array is used with values equidistantly distributed in x-axis range (see @ref{Ranges (bounding box)}). If array @var{z} is not specified then @var{z}[i] equal to minimal z-axis value is used. String @var{opt} contain command options (see @ref{Command options}). @end deftypefn @c ################################################################## @external{} @node Axis and Colorbar, Legend, Text printing, MathGL core @section Axis and Colorbar @nav{} @cindex Axis @cindex Box @cindex Grid @cindex Colorbar @cindex Label These functions draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information see @ref{Axis settings}. @anchor{axis} @deftypefn {MGL command} {} axis ['dir'='xyz' 'stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir, @code{const char *}stl, @code{const char *}opt) @end ifclear Draws axes with ticks (see @ref{Axis settings}). Parameter @var{dir} may contain: @itemize @bullet @item @samp{xyz} for drawing axis in corresponding direction; @item @samp{XYZ} for drawing axis in corresponding direction but with inverted positions of labels; @item @samp{~} or @samp{_} for disabling tick labels; @item @samp{U} for disabling rotation of tick labels; @item @samp{^} for inverting default axis origin; @item @samp{!} for disabling ticks tuning (see @ref{tuneticks}); @item @samp{AKDTVISO} for drawing arrow at the end of axis; @item @samp{a} for forced adjusting of axis ticks; @item @samp{:} for drawing lines through point (0,0,0); @item @samp{f} for printing ticks labels in fixed format; @item @samp{E} for using @samp{E} instead of @samp{e} in ticks labels; @item @samp{F} for printing ticks labels in LaTeX format; @item @samp{+} for printing @samp{+} for positive ticks; @item @samp{-} for printing usual @samp{-} in ticks labels; @item @samp{0123456789} for precision at printing ticks labels. @end itemize Styles of ticks and axis can be overrided by using @var{stl} string. Option @code{value} set the manual rotation angle for the ticks. @sref{Axis and ticks} @end deftypefn @anchor{colorbar} @deftypefn {MGL command} {} colorbar ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch=@code{""}) @deftypefnx {C function} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch) @end ifclear Draws colorbar. Parameter @var{sch} may contain: @itemize @bullet @item color scheme (see @ref{Color scheme}); @item @samp{<>^_} for positioning at left, at right, at top or at bottom correspondingly; @item @samp{I} for positioning near bounding (by default, is positioned at edges of subplot); @item @samp{A} for using absolute coordinates; @item @samp{~} for disabling tick labels. @item @samp{!} for disabling ticks tuning (see @ref{tuneticks}); @item @samp{f} for printing ticks labels in fixed format; @item @samp{E} for using @samp{E} instead of @samp{e} in ticks labels; @item @samp{F} for printing ticks labels in LaTeX format; @item @samp{+} for printing @samp{+} for positive ticks; @item @samp{-} for printing usual @samp{-} in ticks labels; @item @samp{0123456789} for precision at printing ticks labels. @end itemize @sref{Colorbars} @end deftypefn @deftypefn {MGL command} {} colorbar vdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglDataA &}v, @code{const char *}sch=@code{""}) @deftypefnx {C function} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch) @end ifclear The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample} @end deftypefn @deftypefn {MGL command} {} colorbar 'sch' @code{x y [w=1 h=1]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w=@code{1}, @code{mreal} h=@code{1}) @deftypefnx {C function} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w, @code{mreal} h) @end ifclear The same as first one but at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameters @var{w}, @var{h} set the relative width and height of the colorbar. @end deftypefn @deftypefn {MGL command} {} colorbar vdat 'sch' @code{x y [w=1 h=1]} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglDataA &}v, @code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w=@code{1}, @code{mreal} h=@code{1}) @deftypefnx {C function} @code{void} mgl_colorbar_val_ext (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w, @code{mreal} h) @end ifclear The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample} @end deftypefn @anchor{grid} @deftypefn {MGL command} {} grid ['dir'='xyz' 'pen'='B'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B"}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_axis_grid (@code{HMGL} gr, @code{const char *}dir, @code{const char *}pen, @code{const char *}opt) @end ifclear Draws grid lines perpendicular to direction determined by string parameter @var{dir}. If @var{dir} contain @samp{!} then grid lines will be drawn at coordinates of subticks also. The step of grid lines is the same as tick step for @ref{axis}. The style of lines is determined by @var{pen} parameter (default value is dark blue solid line @samp{B-}). @end deftypefn @anchor{box} @deftypefn {MGL command} {} box ['stl'='k' @code{ticks=on}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Box (@code{const char *}col=@code{""}, @code{bool} ticks=@code{true}) @deftypefnx {C function} @code{void} mgl_box (@code{HMGL} gr) @deftypefnx {C function} @code{void} mgl_box_str (@code{HMGL} gr, @code{const char *}col, @code{int} ticks) @end ifclear Draws bounding box outside the plotting volume with color @var{col}. If @var{col} contain @samp{@@} then filled faces are drawn. At this first color is used for faces (default is light yellow), last one for edges. @sref{Bounding box} @end deftypefn @anchor{xlabel} @anchor{ylabel} @anchor{zlabel} @anchor{tlabel} @deftypefn {MGL command} {} xlabel 'text' [@code{pos=1}] @deftypefnx {MGL command} {} ylabel 'text' [@code{pos=1}] @deftypefnx {MGL command} {} zlabel 'text' [@code{pos=1}] @deftypefnx {MGL command} {} tlabel 'text' [@code{pos=1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{char} dir, @code{const char *}text, @code{mreal} pos=@code{1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{mreal} pos=@code{1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_label (@code{HMGL} gr, @code{char} dir, @code{const char *}text, @code{mreal} pos, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_labelw (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}text, @code{mreal} pos, @code{const char *}opt) @end ifclear Prints the label @var{text} for axis @var{dir}=@samp{x},@samp{y},@samp{z},@samp{t} (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis. If @var{pos}<0 then label is printed at the minimum of axis. Option @code{value} set additional shifting of the label. @xref{Text printing}. @end deftypefn @c ################################################################## @external{} @node Legend, 1D plotting, Axis and Colorbar, MathGL core @section Legend @nav{} @cindex Legend @cindex AddLegend @cindex ClearLegend @cindex SetLegendBox @cindex SetLegendMarks These functions draw legend to the graph (useful for @ref{1D plotting}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included TeX parsing). The arrays of strings may be used directly or by accumulating first to the internal arrays (by function @ref{addlegend}) and further plotting it. The position of the legend can be selected automatic or manually (even out of bounding box). Parameters @var{fnt} and @var{size} specify the font style and size (see @ref{Font settings}). Option @code{value} set the relative width of the line sample and the text indent. If line style string for entry is empty then the corresponding text is printed without indent. Parameter @var{fnt} may contain: @itemize @bullet @item font style for legend text; @item @samp{A} for positioning in absolute coordinates; @item @samp{^} for positioning outside of specified point; @item @samp{#} for drawing box around legend; @item @samp{-} for arranging legend entries horizontally; @item colors for face (1st one), for border (2nd one) and for text (last one). If less than 3 colors are specified then the color for border is black (for 2 and less colors), and the color for face is white (for 1 or none colors). @end itemize @sref{Legend sample} @anchor{legend} @deftypefn {MGL command} {} legend [@code{pos=3} 'fnt'='#'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{int} pos=@code{0x3}, @code{const char *}fnt=@code{"#"}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_legend (@code{HMGL} gr, @code{int} pos, @code{const char *}fnt, @code{const char *}opt) @end ifclear Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). Option @code{value} set the space between line samples and text (default is 0.1). @end deftypefn @deftypefn {MGL command} {} legend @code{x y} ['fnt'='#'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{mreal} x, @code{mreal} y, @code{const char *}fnt=@code{"#"}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_legend_pos (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{const char *}fnt, @code{const char *}opt) @end ifclear Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1]. Option @code{value} set the space between line samples and text (default is 0.1). @end deftypefn @anchor{addlegend} @deftypefn {MGL command} {} addlegend 'text' 'stl' @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} AddLegend (@code{const char *}text, @code{const char *}style) @deftypefnx {Method on @code{mglGraph}} @code{void} AddLegend (@code{const wchar_t *}text, @code{const char *}style) @deftypefnx {C function} @code{void} mgl_add_legend (@code{HMGL} gr, @code{const char *}text, @code{const char *}style) @deftypefnx {C function} @code{void} mgl_add_legendw (@code{HMGL} gr, @code{const wchar_t *}text, @code{const char *}style) @end ifclear Adds string @var{text} to internal legend accumulator. The style of described line and mark is specified in string @var{style} (see @ref{Line styles}). @end deftypefn @anchor{clearlegend} @deftypefn {MGL command} {} clearlegend @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ClearLegend () @deftypefnx {C function} @code{void} mgl_clear_legend (@code{HMGL} gr) @end ifclear Clears saved legend strings. @end deftypefn @anchor{legendmarks} @deftypefn {MGL command} {} legendmarks @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetLegendMarks (@code{int} num) @deftypefnx {C function} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num) @end ifclear Set the number of marks in the legend. By default 1 mark is used. @end deftypefn @c ################################################################## @external{} @node 1D plotting, 2D plotting, Legend, MathGL core @section 1D plotting @nav{} @cindex Plot @cindex Radar @cindex Tens @cindex Area @cindex Region @cindex Stem @cindex Bars @cindex Barh @cindex Chart @cindex Step @cindex Torus @cindex Tube @cindex Mark @cindex TextMark @cindex Error @cindex BoxPlot @cindex Candle @cindex Tape @cindex Label @cindex Cones These functions perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x[i],y[i],z[i]@}, i=1...n. By default (if absent) values of @var{x}[i] are equidistantly distributed in axis range, and @var{z}[i] equal to minimal z-axis value. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (see @ref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (see @ref{Palette and colors}). Symbol @samp{!} set to use new color from palette for each point (not for each curve, as default). String @var{opt} contain command options (see @ref{Command options}). @sref{1D samples} @anchor{plot} @deftypefn {MGL command} {} plot ydat ['stl'=''] @deftypefnx {MGL command} {} plot xdat ydat ['stl'=''] @deftypefnx {MGL command} {} plot xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Plot (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Plot (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Plot (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_plot (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_plot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. If @var{pen} contain @samp{~} then number of segments is reduce for quasi-straight curves. See also @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}, @ref{tape}, @ref{meshnum}. @sref{Plot sample} @end deftypefn @anchor{radar} @deftypefn {MGL command} {} radar adat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Radar (@code{const mglDataA &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_radar (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt) @end ifclear This functions draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). Option @code{value} set the additional shift of data (i.e. the data @var{a}+@code{value} is used instead of @var{a}). If @code{value<0} then @code{r=max(0, -min(value)}. If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn. If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. See also @ref{plot}, @ref{meshnum}. @sref{Radar sample} @end deftypefn @anchor{step} @deftypefn {MGL command} {} step ydat ['stl'=''] @deftypefnx {MGL command} {} step xdat ydat ['stl'=''] @deftypefnx {MGL command} {} step xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Step (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Step (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Step (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_step (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_step_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_step_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw continuous stairs for points to axis plane. If @var{x}.nx>@var{y}.nx then @var{x} set the edges of bars, rather than its central positions. See also @ref{plot}, @ref{stem}, @ref{tile}, @ref{boxs}, @ref{meshnum}. @sref{Step sample} @end deftypefn @anchor{tens} @deftypefn {MGL command} {} tens ydat cdat ['stl'=''] @deftypefnx {MGL command} {} tens xdat ydat cdat ['stl'=''] @deftypefnx {MGL command} {} tens xdat ydat zdat cdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Tens (@code{const mglDataA &}y, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tens (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tens (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_tens (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} with color defined by the special array @var{c}[i] (look like tension plot). String @var{pen} specifies the color scheme (see @ref{Color scheme}) and style and/or width of line (see @ref{Line styles}). If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. If @var{pen} contain @samp{~} then number of segments is reduce for quasi-straight curves. See also @ref{plot}, @ref{mesh}, @ref{fall}, @ref{meshnum}. @sref{Tens sample} @end deftypefn @anchor{tape} @deftypefn {MGL command} {} tape ydat ['stl'=''] @deftypefnx {MGL command} {} tape xdat ydat ['stl'=''] @deftypefnx {MGL command} {} tape xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Tape (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tape (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tape (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_tape (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tape_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tape_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw tapes of normals for curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Initial tape(s) was selected in x-y plane (for @samp{x} in @var{pen}) and/or y-z plane (for @samp{x} in @var{pen}). The width of tape is proportional to @ref{barwidth} and can be changed by option @code{value}. See also @ref{plot}, @ref{flow}, @ref{barwidth}. @sref{Tape sample} @end deftypefn @anchor{area} @deftypefn {MGL command} {} area ydat ['stl'=''] @deftypefnx {MGL command} {} area xdat ydat ['stl'=''] @deftypefnx {MGL command} {} area xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Area (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Area (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Area (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_area (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_area_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw continuous lines between points and fills it to axis plane. Also you can use gradient filling if number of specified colors is equal to 2*number of curves. If @var{pen} contain @samp{#} then wired plot is drawn. If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. See also @ref{plot}, @ref{bars}, @ref{stem}, @ref{region}. @sref{Area sample} @end deftypefn @anchor{region} @deftypefn {MGL command} {} region ydat1 ydat2 ['stl'=''] @deftypefnx {MGL command} {} region xdat ydat1 ydat2 ['stl'=''] @deftypefnx {MGL command} {} region xdat1 ydat1 xdat2 ydat2 ['stl'=''] @deftypefnx {MGL command} {} region xdat1 ydat1 zdat1 xdat2 ydat2 zdat2 ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Region (@code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Region (@code{const mglDataA &}x, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Region (@code{const mglDataA &}x1, @code{const mglDataA &}y1, @code{const mglDataA &}x2, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Region (@code{const mglDataA &}x1, @code{const mglDataA &}y1, @code{const mglDataA &}z1, @code{const mglDataA &}x2, @code{const mglDataA &}y2, @code{const mglDataA &}z2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_region (@code{HMGL} gr, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_region_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_region_3d (@code{HMGL} gr, @code{HCDT} x1, @code{HCDT} y1, @code{HCDT} z1, @code{HCDT} x2, @code{HCDT} y2, @code{HCDT} z2, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions fill area between 2 curves. Dimensions of arrays @var{y1} and @var{y2} must be equal. Also you can use gradient filling if number of specified colors is equal to 2*number of curves. If for 2D version @var{pen} contain symbol @samp{i} then only area with y1} for aligning boxes left, right or centering them at its x-coordinates. @end itemize You can give different colors for positive and negative values if number of specified colors is equal to 2*number of curves. If @var{x}.nx>@var{y}.nx then @var{x} set the edges of bars, rather than its central positions. See also @ref{barh}, @ref{cones}, @ref{area}, @ref{stem}, @ref{chart}, @ref{barwidth}. @sref{Bars sample} @end deftypefn @anchor{barh} @deftypefn {MGL command} {} barh vdat ['stl'=''] @deftypefnx {MGL command} {} barh ydat vdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Barh (@code{const mglDataA &}v, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Barh (@code{const mglDataA &}y, @code{const mglDataA &}v, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_barh (@code{HMGL} gr, @code{HCDT} v, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_barh_xy (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} v, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw horizontal bars from points to axis plane. Parameter @var{pen} can contain: @itemize @bullet @item @samp{a} for drawing lines one above another (like summation); @item @samp{f} for drawing waterfall chart, which show the cumulative effect of sequential positive or negative values; @item @samp{F} for using fixed (minimal) width for all bars; @item @samp{<}, @samp{^} or @samp{>} for aligning boxes left, right or centering them at its x-coordinates. @end itemize You can give different colors for positive and negative values if number of specified colors is equal to 2*number of curves. If @var{x}.nx>@var{y}.nx then @var{x} set the edges of bars, rather than its central positions. See also @ref{bars}, @ref{barwidth}. @sref{Barh sample} @end deftypefn @anchor{cones} @deftypefn {MGL command} {} cones ydat ['stl'=''] @deftypefnx {MGL command} {} cones xdat ydat ['stl'=''] @deftypefnx {MGL command} {} cones xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Cones (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Cones (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Cones (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cones (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cones_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cones_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw cones from points to axis plane. If string contain symbol @samp{a} then cones are drawn one above another (like summation). You can give different colors for positive and negative values if number of specified colors is equal to 2*number of curves. Parameter @var{pen} can contain: @itemize @bullet @item @samp{@@} for drawing edges; @item @samp{#} for wired cones; @item @samp{t} for drawing tubes/cylinders instead of cones/prisms; @item @samp{4}, @samp{6}, @samp{8} for drawing square, hex- or octo-prism instead of cones; @item @samp{<}, @samp{^} or @samp{>} for aligning boxes left, right or centering them at its x-coordinates. @end itemize See also @ref{bars}, @ref{cone}, @ref{barwidth}. @sref{Cones sample} @end deftypefn @anchor{chart} @deftypefn {MGL command} {} chart adat ['col'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Chart (@code{const mglDataA &}a, @code{const char *}col=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_chart (@code{HMGL} gr, @code{HCDT} a, @code{const char *}col, @code{const char *}opt) @end ifclear The function draws colored stripes (boxes) for data in array @var{a}. The number of stripes is equal to the number of rows in @var{a} (equal to @var{a.ny}). The color of each next stripe is cyclically changed from colors specified in string @var{col} or in palette Pal (see @ref{Palette and colors}). Spaces in colors denote transparent ``color'' (i.e. corresponding stripe(s) are not drawn). The stripe width is proportional to value of element in @var{a}. Chart is plotted only for data with non-negative elements. If string @var{col} have symbol @samp{#} then black border lines are drawn. The most nice form the chart have in 3d (after rotation of coordinates) or in cylindrical coordinates (becomes so called Pie chart). @sref{Chart sample} @end deftypefn @anchor{boxplot} @deftypefn {MGL command} {} boxplot adat ['stl'=''] @deftypefnx {MGL command} {} boxplot xdat adat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} BoxPlot (@code{const mglDataA &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} BoxPlot (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_boxplot (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_boxplot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw boxplot (also known as a box-and-whisker diagram) at points @var{x}[i]. This is five-number summaries of data @var{a}[i,j] (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction. If @var{pen} contain @samp{<}, @samp{^} or @samp{>} then boxes will be aligned left, right or centered at its x-coordinates. See also @ref{plot}, @ref{error}, @ref{bars}, @ref{barwidth}. @sref{BoxPlot sample} @end deftypefn @anchor{candle} @deftypefn {MGL command} {} candle vdat1 ['stl'=''] @deftypefnx {MGL command} {} candle vdat1 vdat2 ['stl'=''] @deftypefnx {MGL command} {} candle vdat1 ydat1 ydat2 ['stl'=''] @deftypefnx {MGL command} {} candle vdat1 vdat2 ydat1 ydat2 ['stl'=''] @deftypefnx {MGL command} {} candle xdat vdat1 vdat2 ydat1 ydat2 ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const mglDataA &}v2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const mglDataA &}v2, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}x, @code{const mglDataA &}v1, @code{const mglDataA &}v2, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_candle (@code{HMGL} gr, @code{HCDT} v1, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_candle_yv (@code{HMGL} gr, @code{HCDT} v1, @code{HCDT} v2, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_candle_xyv (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} v1, @code{HCDT} v2, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw candlestick chart at points @var{x}[i]. This is a combination of a line-chart and a bar-chart, in that each bar represents the range of price movement over a given time interval. Wire (or white) candle correspond to price growth @var{v1}[i]<@var{v2}[i], opposite case -- solid (or dark) candle. You can give different colors for growth and decrease values if number of specified colors is equal to 2. If @var{pen} contain @samp{#} then the wire candle will be used even for 2-color scheme. "Shadows" show the minimal @var{y1} and maximal @var{y2} prices. If @var{v2} is absent then it is determined as @var{v2}[i]=@var{v1}[i+1]. See also @ref{plot}, @ref{bars}, @ref{ohlc}, @ref{barwidth}. @sref{Candle sample} @end deftypefn @anchor{ohlc} @deftypefn {MGL command} {} ohlc odat hdat ldat cdat ['stl'=''] @deftypefnx {MGL command} {} ohlc xdat odat hdat ldat cdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} OHLC (@code{const mglDataA &}o, @code{const mglDataA &}h, @code{const mglDataA &}l, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} OHLC (@code{const mglDataA &}x, @code{const mglDataA &}o, @code{const mglDataA &}h, @code{const mglDataA &}l, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_ohlc (@code{HMGL} gr, @code{HCDT} o, @code{HCDT} h, @code{HCDT} l, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_ohlc_x (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} o, @code{HCDT} h, @code{HCDT} l, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw Open-High-Low-Close diagram. This diagram show vertical line for between maximal(high @var{h}) and minimal(low @var{l}) values, as well as horizontal lines before/after vertical line for initial(open @var{o})/final(close @var{c}) values of some process (usually price). You can give different colors for up and down values (when closing values higher or not as in previous point) if number of specified colors is equal to 2*number of curves. See also @ref{candle}, @ref{plot}, @ref{barwidth}. @sref{OHLC sample} @end deftypefn @anchor{error} @deftypefn {MGL command} {} error ydat yerr ['stl'=''] @deftypefnx {MGL command} {} error xdat ydat yerr ['stl'=''] @deftypefnx {MGL command} {} error xdat ydat xerr yerr ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Error (@code{const mglDataA &}y, @code{const mglDataA &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Error (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Error (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ex, @code{const mglDataA &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_error (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_error_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_error_exy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ex, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw error boxes @{@var{ex}[i], @var{ey}[i]@} at points @{@var{x}[i], @var{y}[i]@}. This can be useful, for example, in experimental points, or to show numeric error or some estimations and so on. If string @var{pen} contain symbol @samp{@@} than large semitransparent mark is used instead of error box. See also @ref{plot}, @ref{mark}. @sref{Error sample} @end deftypefn @anchor{mark} @deftypefn {MGL command} {} mark ydat rdat ['stl'=''] @deftypefnx {MGL command} {} mark xdat ydat rdat ['stl'=''] @deftypefnx {MGL command} {} mark xdat ydat zdat rdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_mark_y (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_mark_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_mark_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw marks with size @var{r}[i]*@ref{marksize} at points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. If you need to draw markers of the same size then you can use @ref{plot} function with empty line style @samp{ }. For markers with size in axis range use @ref{error} with style @samp{@@}. See also @ref{plot}, @ref{textmark}, @ref{error}, @ref{stem}, @ref{meshnum}. @sref{Mark sample} @end deftypefn @anchor{textmark} @deftypefn {MGL command} {} textmark ydat 'txt' ['stl'=''] @deftypefnx {MGL command} {} textmark ydat rdat 'txt' ['stl'=''] @deftypefnx {MGL command} {} textmark xdat ydat rdat 'txt' ['stl'=''] @deftypefnx {MGL command} {} textmark xdat ydat zdat rdat 'txt' ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_textmark (@code{HMGL} gr, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textmarkw (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textmark_yr (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textmarkw_yr (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textmark_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textmarkw_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textmark_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_textmarkw_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @end ifclear These functions draw string @var{txt} as marks with size proportional to @var{r}[i]*@var{marksize} at points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. By default (if omitted) @var{r}[i]=1. See also @ref{plot}, @ref{mark}, @ref{stem}, @ref{meshnum}. @sref{TextMark sample} @end deftypefn @anchor{label} @deftypefn {MGL command} {} label ydat 'txt' ['stl'=''] @deftypefnx {MGL command} {} label xdat ydat 'txt' ['stl'=''] @deftypefnx {MGL command} {} label xdat ydat zdat 'txt' ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglDataA &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglDataA &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_label (@code{HMGL} gr, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_labelw (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_label_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_labelw_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_label_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_labelw_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @end ifclear These functions draw string @var{txt} at points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. If string @var{txt} contain @samp{%x}, @samp{%y}, @samp{%z} or @samp{%n} then it will be replaced by the value of x-,y-,z-coordinate of the point or its index. String @var{fnt} may contain: @itemize @item font style @ref{Font styles}; @item @samp{f} for fixed format of printed numbers; @item @samp{E} for using @samp{E} instead of @samp{e}; @item @samp{F} for printing in LaTeX format; @item @samp{+} for printing @samp{+} for positive numbers; @item @samp{-} for printing usual @samp{-}; @item @samp{0123456789} for precision at printing numbers. @end itemize See also @ref{plot}, @ref{mark}, @ref{textmark}, @ref{table}. @sref{Label sample} @end deftypefn @anchor{table} @deftypefn {MGL command} {} table vdat 'txt' ['stl'='#'] @deftypefnx {MGL command} {} table x y vdat 'txt' ['stl'='#'] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Table (@code{const mglDataA &}val, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Table (@code{const mglDataA &}val, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Table (@code{mreal} x, @code{mreal} y, @code{const mglDataA &}val, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Table (@code{mreal} x, @code{mreal} y, @code{const mglDataA &}val, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_table (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{HCDT} val, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tablew (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{HCDT} val, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @end ifclear These functions draw table with values of @var{val} and captions from string @var{txt} (separated by newline symbol @samp{\n}) at points @{@var{x}, @var{y}@} (default at @{0,0@}) related to current subplot. String @var{fnt} may contain: @itemize @item font style @ref{Font styles}; @item @samp{#} for drawing cell borders; @item @samp{|} for limiting table widh by subplot one (equal to option @samp{value 1}); @item @samp{=} for equal width of all cells; @item @samp{f} for fixed format of printed numbers; @item @samp{E} for using @samp{E} instead of @samp{e}; @item @samp{F} for printing in LaTeX format; @item @samp{+} for printing @samp{+} for positive numbers; @item @samp{-} for printing usual @samp{-}; @item @samp{0123456789} for precision at printing numbers. @end itemize Option @code{value} set the width of the table (default is 1). See also @ref{plot}, @ref{label}. @sref{Table sample} @end deftypefn @anchor{iris} @deftypefn {MGL command} {} iris dats 'ids' ['stl'=''] @deftypefnx {MGL command} {} iris dats rngs 'ids' ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const char *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const wchar_t *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const mglDataA &}rngs, @code{const char *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const mglDataA &}rngs, @code{const wchar_t *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_iris_1 (@code{HMGL} gr, @code{HCDT} dats, @code{const char *}ids, @code{const char *}stl, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_irisw_1 (@code{HMGL} gr, @code{HCDT} dats, @code{const wchar_t *}ids, @code{const char *}stl, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_iris (@code{HMGL} gr, @code{HCDT} dats, @code{HCDT} rngs, @code{const char *}ids, @code{const char *}stl, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_irisw (@code{HMGL} gr, @code{HCDT} dats, @code{HCDT} rngs, @code{const wchar_t *}ids, @code{const char *}stl, @code{const char *}opt) @end ifclear Draws Iris plots for determining cross-dependences of data arrays @var{dats} (see @uref{http://en.wikipedia.org/wiki/Iris_flower_data_set}). Data @var{rngs} of size 2*@var{dats}.nx provide manual axis ranges for each column. String @var{ids} contain column names, separated by @samp{;} symbol. Option @code{value} set the text size for column names. You can add another data set to existing Iris plot by providing the same ranges @var{rngs} and empty column names @var{ids}. See also @ref{plot}. @sref{Iris sample} @end deftypefn @anchor{tube} @deftypefn {MGL command} {} tube ydat rdat ['stl'=''] @deftypefnx {MGL command} {} tube ydat @code{rval} ['stl'=''] @deftypefnx {MGL command} {} tube xdat ydat rdat ['stl'=''] @deftypefnx {MGL command} {} tube xdat ydat @code{rval} ['stl'=''] @deftypefnx {MGL command} {} tube xdat ydat zdat rdat ['stl'=''] @deftypefnx {MGL command} {} tube xdat ydat zdat @code{rval} ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}y, @code{mreal} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{mreal} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{mreal} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_tube_r (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tube (@code{HMGL} gr, @code{HCDT} y, @code{mreal} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tube_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tube_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{mreal} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tube_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tube_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{mreal} r, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw the tube with variable radius @var{r}[i] along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. See also @ref{plot}. @sref{Tube sample} @end deftypefn @anchor{torus} @deftypefn {MGL command} {} torus rdat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Torus (@code{const mglDataA &}r, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_torus (@code{HMGL} gr, @code{HCDT} r, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear These functions draw surface which is result of curve @{@var{r}, @var{z}@} rotation around axis. If string @var{pen} contain symbols @samp{x} or @samp{z} then rotation axis will be set to specified direction (default is @samp{y}). If string @var{pen} have symbol @samp{#} then wire plot is produced. If string @var{pen} have symbol @samp{.} then plot by dots is produced. See also @ref{plot}, @ref{axial}. @sref{Torus sample} @end deftypefn @anchor{lamerey} @deftypefn {MGL command} {} lamerey @code{x0} ydat ['stl'=''] @deftypefnx {MGL command} {} lamerey @code{x0} 'y(x)' ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Lamerey (@code{double} x0, @code{const mglDataA &}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Lamerey (@code{double} x0, @code{const char *}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_lamerey_dat (@code{HMGL} gr, @code{double} x0, @code{HCDT} y, @code{const char *}stl, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_lamerey_str (@code{HMGL} gr, @code{double} x0, @code{const char *}y, @code{const char *}stl, @code{const char *}opt) @end ifclear These functions draw Lamerey diagram for mapping x_new = y(x_old) starting from point @var{x0}. String @var{stl} may contain line style, symbol @samp{v} for drawing arrows, symbol @samp{~} for disabling first segment. Option @code{value} set the number of segments to be drawn (default is 20). See also @ref{plot}, @ref{fplot}, @ref{bifurcation}, @ref{pmap}. @sref{Lamerey sample} @end deftypefn @anchor{bifurcation} @deftypefn {MGL command} {} bifurcation @code{dx} ydat ['stl'=''] @deftypefnx {MGL command} {} bifurcation @code{dx} 'y(x)' ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Bifurcation (@code{double} dx, @code{const mglDataA &}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Bifurcation (@code{double} dx, @code{const char *}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_bifurcation_dat (@code{HMGL} gr, @code{double} dx, @code{HCDT} y, @code{const char *}stl, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_bifurcation_str (@code{HMGL} gr, @code{double} dx, @code{const char *}y, @code{const char *}stl, @code{const char *}opt) @end ifclear These functions draw bifurcation diagram for mapping x_new = y(x_old). Parameter @var{dx} set the accuracy along x-direction. String @var{stl} set color. Option @code{value} set the number of stationary points (default is 1024). See also @ref{plot}, @ref{fplot}, @ref{lamerey}. @sref{Bifurcation sample} @end deftypefn @anchor{pmap} @deftypefn {MGL command} {} pmap ydat sdat ['stl'=''] @deftypefnx {MGL command} {} pmap xdat ydat sdat ['stl'=''] @deftypefnx {MGL command} {} pmap xdat ydat zdat sdat ['stl'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Pmap (@code{const mglDataA &}y, @code{const mglDataA &}s, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Pmap (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}s, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Pmap (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}s, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_pmap (@code{HMGL} gr, @code{HMDT} y, @code{HCDT} s, @code{const char *}stl, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_pmap_xy (@code{HMGL} gr, @code{HCDT} x, @code{HMDT} y, @code{HCDT} s, @code{const char *}stl, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_pmap_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HMDT} y, @code{HCDT} z, @code{HCDT} s, @code{const char *}stl, @code{const char *}opt) @end ifclear These functions draw Poincare map for curve @{@var{x}, @var{y}, @var{z}@} at surface @var{s}=0. Basically, it show intersections of the curve and the surface. String @var{stl} set the style of marks. See also @ref{plot}, @ref{mark}, @ref{lamerey}. @sref{Pmap sample} @end deftypefn @c ################################################################## @external{} @node 2D plotting, 3D plotting, 1D plotting, MathGL core @section 2D plotting @nav{} @cindex Mesh @cindex Fall @cindex Belt @cindex Surf @cindex Boxs @cindex Tile @cindex Dens @cindex Cont @cindex ContF @cindex ContD @cindex Axial @cindex Grad @cindex Grid These functions perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. By default (if absent) values of @var{x}, @var{y} are equidistantly distributed in axis range. The plots are drawn for each z slice of the data. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). String @var{sch} sets the color scheme (see @ref{Color scheme}) for plot. String @var{opt} contain command options (see @ref{Command options}). @sref{2D samples} @anchor{surf} @deftypefn {MGL command} {} surf zdat ['sch'=''] @deftypefnx {MGL command} {} surf xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{.} then plot by dots is produced. See also @ref{mesh}, @ref{dens}, @ref{belt}, @ref{tile}, @ref{boxs}, @ref{surfc}, @ref{surfa}. @sref{Surf sample} @end deftypefn @anchor{mesh} @deftypefn {MGL command} {} mesh zdat ['sch'=''] @deftypefnx {MGL command} {} mesh xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Mesh (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Mesh (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_mesh (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_mesh_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws mesh lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. See also @ref{surf}, @ref{fall}, @ref{meshnum}, @ref{cont}, @ref{tens}. @sref{Mesh sample} @end deftypefn @anchor{fall} @deftypefn {MGL command} {} fall zdat ['sch'=''] @deftypefnx {MGL command} {} fall xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Fall (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Fall (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_fall (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_fall_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws fall lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. This plot can be used for plotting several curves shifted in depth one from another. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @ref{belt}, @ref{mesh}, @ref{tens}, @ref{meshnum}. @sref{Fall sample} @end deftypefn @anchor{belt} @deftypefn {MGL command} {} belt zdat ['sch'=''] @deftypefnx {MGL command} {} belt xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Belt (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Belt (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_belt (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws belts for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. This plot can be used as 3d generalization of @ref{plot}). If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) belts are drawn along y-direction. See also @ref{fall}, @ref{surf}, @ref{beltc}, @ref{plot}, @ref{meshnum}. @sref{Belt sample} @end deftypefn @anchor{boxs} @deftypefn {MGL command} {} boxs zdat ['sch'=''] @deftypefnx {MGL command} {} boxs xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Boxs (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Boxs (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_boxs (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_boxs_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws vertical boxes for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Symbol @samp{@@} in @var{sch} set to draw filled boxes. See also @ref{surf}, @ref{dens}, @ref{tile}, @ref{step}. @sref{Boxs sample} @end deftypefn @anchor{tile} @deftypefn {MGL command} {} tile zdat ['sch'=''] @deftypefnx {MGL command} {} tile xdat ydat zdat ['sch'=''] @deftypefnx {MGL command} {} tile xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Tile (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tile (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Tile (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_tile (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tile_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tile_xyc (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j] (@var{c}=@var{z} if @var{c} is not provided). If string @var{sch} contain style @samp{x} or @samp{y} then tiles will be oriented perpendicular to x- or y-axis. Such plot can be used as 3d generalization of @ref{step}. See also @ref{surf}, @ref{boxs}, @ref{step}, @ref{tiles}. @sref{Tile sample} @end deftypefn @anchor{dens} @deftypefn {MGL command} {} dens zdat ['sch'=''] @deftypefnx {MGL command} {} dens xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Dens (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{mreal} zVal=@code{NAN}) @deftypefnx {Method on @code{mglGraph}} @code{void} Dens (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{mreal} zVal=@code{NAN}) @deftypefnx {C function} @code{void} mgl_dens (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_dens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws density plot for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} equal to minimal z-axis value. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{.} then plot by dots is produced. See also @ref{surf}, @ref{cont}, @ref{contf}, @ref{boxs}, @ref{tile}, @code{dens[xyz]}. @sref{Dens sample} @end deftypefn @anchor{cont} @deftypefn {MGL command} {} cont vdat zdat ['sch'=''] @deftypefnx {MGL command} {} cont vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cont_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k], or at @var{z} equal to minimal z-axis value if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. See also @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample} @end deftypefn @deftypefn {MGL command} {} cont zdat ['sch'=''] @deftypefnx {MGL command} {} cont xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cont (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 7). @end deftypefn @anchor{contf} @deftypefn {MGL command} {} contf vdat zdat ['sch'=''] @deftypefnx {MGL command} {} contf vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contf_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k], or at @var{z} equal to minimal z-axis value if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). See also @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample} @end deftypefn @deftypefn {MGL command} {} contf zdat ['sch'=''] @deftypefnx {MGL command} {} contf xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contf (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 7). @end deftypefn @anchor{contd} @deftypefn {MGL command} {} contd vdat zdat ['sch'=''] @deftypefnx {MGL command} {} contd vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contd_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] (or at @var{z} equal to minimal z-axis value if @var{sch} contain symbol @samp{_}) with manual colors. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the contour colors: the color of k-th contour is determined by character @code{sch[k%strlen(sch)]}. See also @ref{dens}, @ref{cont}, @ref{contf}. @sref{ContD sample} @end deftypefn @deftypefn {MGL command} {} contd zdat ['sch'=''] @deftypefnx {MGL command} {} contd xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contd (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contd_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 7). @end deftypefn @anchor{contp} @deftypefn {MGL command} {} contp vdat xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContP (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contp_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws contour lines on surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Contours are plotted for @var{a}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. If string @var{sch} have symbol @samp{f} then solid contours will be drawn. See also @ref{cont}, @ref{contf}, @ref{surfc}, @code{cont[xyz]}. @c TODO @sref{Cont sample} @end deftypefn @deftypefn {MGL command} {} contp xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContP (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contp (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 7). @end deftypefn @anchor{contv} @deftypefn {MGL command} {} contv vdat zdat ['sch'=''] @deftypefnx {MGL command} {} contv vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contv_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contv_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws vertical cylinder (tube) at contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k], or at @var{z} equal to minimal z-axis value if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. See also @ref{cont}, @ref{contf}. @sref{ContV sample} @end deftypefn @deftypefn {MGL command} {} contv zdat ['sch'=''] @deftypefnx {MGL command} {} contv xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contv (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contv_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 7). @end deftypefn @anchor{axial} @deftypefn {MGL command} {} axial vdat zdat ['sch'=''] @deftypefnx {MGL command} {} axial vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_axial_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws surface which is result of contour plot rotation for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} have symbol @samp{.} then plot by dots is produced. If string contain symbols @samp{x} or @samp{z} then rotation axis will be set to specified direction (default is @samp{y}). See also @ref{cont}, @ref{contf}, @ref{torus}, @ref{surf3}. @sref{Axial sample} @end deftypefn @deftypefn {MGL command} {} axial zdat ['sch'=''] @deftypefnx {MGL command} {} axial xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3}) @deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3}) @deftypefnx {C function} @code{void} mgl_axial (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_axial_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 3). @end deftypefn @anchor{grid2} @deftypefn {MGL command} {} grid2 zdat ['sch'=''] @deftypefnx {MGL command} {} grid2 xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_grid (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} equal to minimal z-axis value. See also @ref{dens}, @ref{cont}, @ref{contf}, @ref{grid3}, @ref{meshnum}. @end deftypefn @c ################################################################## @external{} @node 3D plotting, Dual plotting, 2D plotting, MathGL core @section 3D plotting @nav{} @cindex Surf3 @cindex Dens3 @cindex Cont3 @cindex ContF3 @cindex Grid3 @cindex Cloud @cindex Beam These functions perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. By default (if absent) values of @var{x}, @var{y}, @var{z} are equidistantly distributed in axis range. The minor dimensions of arrays @var{x}, @var{y}, @var{z}, @var{a} should be equal @code{x.nx=a.nx && y.nx=a.ny && z.nz=a.nz} or @code{x.nx=y.nx=z.nx=a.nx && x.ny=y.ny=z.ny=a.ny && x.nz=y.nz=z.nz=a.nz}. Arrays @var{x}, @var{y} and @var{z} can be vectors (not matrices as @var{a}). String @var{sch} sets the color scheme (see @ref{Color scheme}) for plot. String @var{opt} contain command options (see @ref{Command options}). @sref{3D samples} @anchor{surf3} @deftypefn {MGL command} {} surf3 adat @code{val} ['sch'=''] @deftypefnx {MGL command} {} surf3 xdat ydat zdat adat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3 (@code{mreal} val, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3 (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws isosurface plot for 3d array specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. If string @var{sch} have symbol @samp{.} then plot by dots is produced. Note, that there is possibility of incorrect plotting due to uncertainty of cross-section defining if there are two or more isosurface intersections inside one cell. See also @ref{cloud}, @ref{dens3}, @ref{surf3c}, @ref{surf3a}, @ref{axial}. @sref{Surf3 sample} @end deftypefn @deftypefn {MGL command} {} surf3 adat ['sch'=''] @deftypefnx {MGL command} {} surf3 xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Draws @var{num}-th uniformly distributed in color range isosurfaces for 3d data. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 3). @end deftypefn @anchor{cloud} @deftypefn {MGL command} {} cloud adat ['sch'=''] @deftypefnx {MGL command} {} cloud xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Cloud (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Cloud (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cloud (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cloud_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws cloud plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{a}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @ref{meshnum}. If string @var{sch} contain symbol @samp{.} then lower quality plot will produced with much low memory usage. If string @var{sch} contain symbol @samp{i} then transparency will be inversed, i.e. higher become transparent and lower become not transparent. See also @ref{surf3}, @ref{meshnum}. @sref{Cloud sample} @end deftypefn @anchor{dens3} @deftypefn {MGL command} {} dens3 adat ['sch'='' @code{sval=-1}] @deftypefnx {MGL command} {} dens3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Dens3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Dens3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_dens3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_dens3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear The function draws density plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Density is plotted at slice @var{sVal} in direction @{@samp{x}, @samp{y}, @samp{z}@} if @var{sch} contain corresponding symbol (by default, @samp{y} direction is used). If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @ref{cont3}, @ref{contf3}, @ref{dens}, @ref{grid3}. @sref{Dens3 sample} @end deftypefn @anchor{cont3} @deftypefn {MGL command} {} cont3 vdat adat ['sch'='' @code{sval=-1}] @deftypefnx {MGL command} {} cont3 vdat xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cont3_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont3_xyz_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear The function draws contour plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Contours are plotted for values specified in array @var{v} at slice @var{sVal} in direction @{@samp{x}, @samp{y}, @samp{z}@} if @var{sch} contain corresponding symbol (by default, @samp{y} direction is used). If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels will be drawn below (or above) the contours. See also @ref{dens3}, @ref{contf3}, @ref{cont}, @ref{grid3}. @sref{Cont3 sample} @end deftypefn @deftypefn {MGL command} {} cont3 adat ['sch'='' @code{sval=-1}] @deftypefnx {MGL command} {} cont3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cont3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 7). @end deftypefn @anchor{contf3} @deftypefn {MGL command} {} contf3 vdat adat ['sch'='' @code{sval=-1}] @deftypefnx {MGL command} {} contf3 vdat xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contf3_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf3_xyz_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear The function draws solid (or filled) contour plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Contours are plotted for values specified in array @var{v} at slice @var{sVal} in direction @{@samp{x}, @samp{y}, @samp{z}@} if @var{sch} contain corresponding symbol (by default, @samp{y} direction is used). If string @var{sch} have symbol @samp{#} then grid lines are drawn. See also @ref{dens3}, @ref{cont3}, @ref{contf}, @ref{grid3}. @sref{ContF3 sample} @end deftypefn @deftypefn {MGL command} {} contf3 adat ['sch'='' @code{sval=-1}] @deftypefnx {MGL command} {} contf3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contf3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear The same as previous with vector @var{v} of @var{num}-th elements equidistantly distributed in color range. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 7). @end deftypefn @anchor{grid3} @deftypefn {MGL command} {} grid3 adat ['sch'='' @code{sval=-1}] @deftypefnx {MGL command} {} grid3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Grid3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Grid3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_grid3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_grid3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear The function draws grid for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Grid is plotted at slice @var{sVal} in direction @{@samp{x}, @samp{y}, @samp{z}@} if @var{sch} contain corresponding symbol (by default, @samp{y} direction is used). See also @ref{cont3}, @ref{contf3}, @ref{dens3}, @ref{grid2}, @ref{meshnum}. @end deftypefn @anchor{beam} @deftypefn {MGL command} {} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Beam (@code{const mglDataA &}tr, @code{const mglDataA &}g1, @code{const mglDataA &}g2, @code{const mglDataA &}a, @code{mreal} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0}, @code{int} num=@code{3}) @deftypefnx {Method on @code{mglGraph}} @code{void} Beam (@code{mreal} val, @code{const mglDataA &}tr, @code{const mglDataA &}g1, @code{const mglDataA &}g2, @code{const mglDataA &}a, @code{mreal} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0}) @deftypefnx {C function} @code{void} mgl_beam (@code{HMGL} gr, @code{HCDT} tr, @code{HCDT} g1, @code{HCDT} g2, @code{HCDT} a, @code{mreal} r, @code{const char *}stl, @code{int} flag, @code{int} num) @deftypefnx {C function} @code{void} mgl_beam_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} tr, @code{HCDT} g1, @code{HCDT} g2, @code{HCDT} a, @code{mreal} r, @code{const char *}stl, @code{int} flag) @end ifclear Draws the isosurface for 3d array @var{a} at constant values of @var{a}=@var{val}. This is special kind of plot for @var{a} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{r}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. See also @ref{surf3}. @end deftypefn @c ################################################################## @external{} @node Dual plotting, Vector fields, 3D plotting, MathGL core @section Dual plotting @nav{} @cindex SurfC @cindex SurfA @cindex Surf3C @cindex Surf3A @cindex TileS @cindex Map @cindex STFA These plotting functions draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (SurfC, Surf3C), surface or isosurface transpared by other data (SurfA, Surf3A), tiles with variable size (TileS), mapping diagram (Map), STFA diagram (STFA). By default (if absent) values of @var{x}, @var{y}, @var{z} are equidistantly distributed in axis range. The minor dimensions of arrays @var{x}, @var{y}, @var{z}, @var{c} should be equal. Arrays @var{x}, @var{y} (and @var{z} for @code{Surf3C, Surf3A}) can be vectors (not matrices as @var{c}). String @var{sch} sets the color scheme (see @ref{Color scheme}) for plot. String @var{opt} contain command options (see @ref{Command options}). @anchor{surfc} @deftypefn {MGL command} {} surfc zdat cdat ['sch'=''] @deftypefnx {MGL command} {} surfc xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SurfC (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} SurfC (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surfc (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{.} then plot by dots is produced. All dimensions of arrays @var{z} and @var{c} must be equal. Surface is plotted for each z slice of the data. See also @ref{surf}, @ref{surfa}, @ref{surfca}, @ref{beltc}, @ref{surf3c}. @sref{SurfC sample} @end deftypefn @anchor{beltc} @deftypefn {MGL command} {} beltc zdat cdat ['sch'=''] @deftypefnx {MGL command} {} beltc xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_beltc (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_beltc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws belts for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. This plot can be used as 3d generalization of @ref{plot}). If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) belts are drawn along y-direction. See also @ref{belt}, @ref{surfc}, @ref{meshnum}. @c TODO @sref{BeltC sample} @end deftypefn @anchor{surf3c} @deftypefn {MGL command} {} surf3c adat cdat @code{val} ['sch'=''] @deftypefnx {MGL command} {} surf3c xdat ydat zdat adat cdat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3C (@code{mreal} val, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3C (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3c_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3c_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws isosurface plot for 3d array specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @ref{surf3} function but the color of isosurface depends on values of array @var{c}. If string @var{sch} contain @samp{#} then wire plot is produced. If string @var{sch} have symbol @samp{.} then plot by dots is produced. See also @ref{surf3}, @ref{surfc}, @ref{surf3a}, @ref{surf3ca}. @sref{Surf3C sample} @end deftypefn @deftypefn {MGL command} {} surf3c adat cdat ['sch'=''] @deftypefnx {MGL command} {} surf3c xdat ydat zdat adat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3C (@code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3C (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3c (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3c_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Draws @var{num}-th uniformly distributed in color range isosurfaces for 3d data. Here @var{num} is equal to parameter @code{value} in options @var{opt} (default is 3). @end deftypefn @anchor{surfa} @deftypefn {MGL command} {} surfa zdat cdat ['sch'=''] @deftypefnx {MGL command} {} surfa xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SurfA (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} SurfA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surfa (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surfa_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and transparent it by matrix @var{c}[i,j]. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{.} then plot by dots is produced. All dimensions of arrays @var{z} and @var{c} must be equal. Surface is plotted for each z slice of the data. See also @ref{surf}, @ref{surfc}, @ref{surfca}, @ref{surf3a}. @sref{SurfA sample} @end deftypefn @anchor{surf3a} @deftypefn {MGL command} {} surf3a adat cdat @code{val} ['sch'=''] @deftypefnx {MGL command} {} surf3a xdat ydat zdat adat cdat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3A (@code{mreal} val, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3A (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3a_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3a_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws isosurface plot for 3d array specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @ref{surf3} function but the transparency of isosurface depends on values of array @var{c}. If string @var{sch} contain @samp{#} then wire plot is produced. If string @var{sch} have symbol @samp{.} then plot by dots is produced. See also @ref{surf3}, @ref{surfc}, @ref{surf3a}, @ref{surf3ca}. @sref{Surf3A sample} @end deftypefn @deftypefn {MGL command} {} surf3a adat cdat ['sch'=''] @deftypefnx {MGL command} {} surf3a xdat ydat zdat adat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3A (@code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3A (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3a (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3a_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Draws @var{num}-th uniformly distributed in color range isosurfaces for 3d data. At this array @var{c} can be vector with values of transparency and @var{num}=@var{c}.nx. In opposite case @var{num} is equal to parameter @code{value} in options @var{opt} (default is 3). @end deftypefn @anchor{surfca} @deftypefn {MGL command} {} surfca zdat cdat adat ['sch'=''] @deftypefnx {MGL command} {} surfca xdat ydat zdat cdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SurfCA (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} SurfCA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surfca (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surfca_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}, color it by matrix @var{c}[i,j] and transparent it by matrix @var{a}[i,j]. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{.} then plot by dots is produced. All dimensions of arrays @var{z} and @var{c} must be equal. Surface is plotted for each z slice of the data. Note, you can use @ref{map}-like coloring if use @samp{%} in color scheme. See also @ref{surf}, @ref{surfc}, @ref{surfa}, @ref{surf3ca}. @sref{SurfCA sample} @end deftypefn @anchor{surf3ca} @deftypefn {MGL command} {} surf3ca adat cdat bdat @code{val} ['sch'=''] @deftypefnx {MGL command} {} surf3ca xdat ydat zdat adat cdat bdat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3CA (@code{mreal} val, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3CA (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3ca_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3ca_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b,@code{const char *}sch, @code{const char *}opt) @end ifclear The function draws isosurface plot for 3d array specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @ref{surf3} function but the color and the transparency of isosurface depends on values of array @var{c} and @var{b} correspondingly. If string @var{sch} contain @samp{#} then wire plot is produced. If string @var{sch} have symbol @samp{.} then plot by dots is produced. Note, you can use @ref{map}-like coloring if use @samp{%} in color scheme. See also @ref{surf3}, @ref{surfca}, @ref{surf3c}, @ref{surf3a}. @sref{Surf3CA sample} @end deftypefn @deftypefn {MGL command} {} surf3ca adat cdat bdat ['sch'=''] @deftypefnx {MGL command} {} surf3ca xdat ydat zdat adat cdat bdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3CA (@code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Surf3CA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_surf3ca (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_surf3ca_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b, @code{const char *}sch, @code{const char *}opt) @end ifclear Draws @var{num}-th uniformly distributed in color range isosurfaces for 3d data. Here parameter @var{num} is equal to parameter @code{value} in options @var{opt} (default is 3). @end deftypefn @anchor{tiles} @deftypefn {MGL command} {} tiles zdat rdat ['sch'=''] @deftypefnx {MGL command} {} tiles xdat ydat zdat rdat ['sch'=''] @deftypefnx {MGL command} {} tiles xdat ydat zdat rdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} TileS (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TileS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TileS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_tiles (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tiles_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tiles_xyc (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. It is mostly the same as @ref{tile} but the size of tiles is determined by @var{r} array. If string @var{sch} contain style @samp{x} or @samp{y} then tiles will be oriented perpendicular to x- or y-axis. This is some kind of ``transparency'' useful for exporting to EPS files. Tiles is plotted for each z slice of the data. See also @ref{surfa}, @ref{tile}. @sref{TileS sample} @end deftypefn @anchor{map} @deftypefn {MGL command} {} map udat vdat ['sch'=''] @deftypefnx {MGL command} {} map xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Map (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Map (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_map (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_map_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws mapping plot for matrices @{@var{ax}, @var{ay} @} which parametrically depend on coordinates @var{x}, @var{y}. The initial position of the cell (point) is marked by color. Height is proportional to Jacobian(ax,ay). This plot is like Arnold diagram ??? If string @var{sch} contain symbol @samp{.} then the color ball at matrix knots are drawn otherwise face is drawn. @sref{Mapping visualization} @end deftypefn @anchor{stfa} @deftypefn {MGL command} {} stfa re im @code{dn} ['sch'=''] @deftypefnx {MGL command} {} stfa xdat ydat re im @code{dn} ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} STFA (@code{const mglDataA &}re, @code{const mglDataA &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} STFA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}re, @code{const mglDataA &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_stfa (@code{HMGL} gr, @code{HCDT} re, @code{HCDT} im, @code{int} dn, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_stfa_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} re, @code{HCDT} im, @code{int} dn, @code{const char *}sch, @code{const char *}opt) @end ifclear Draws spectrogram of complex array @var{re}+i*@var{im} for Fourier size of @var{dn} points at plane @var{z} equal to minimal z-axis value. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. At this array @var{re}, @var{im} parametrically depend on coordinates @var{x}, @var{y}. The size of @var{re} and @var{im} must be the same. The minor dimensions of arrays @var{x}, @var{y}, @var{re} should be equal. Arrays @var{x}, @var{y} can be vectors (not matrix as @var{re}). @sref{STFA sample} @end deftypefn @c ################################################################## @external{} @node Vector fields, Other plotting, Dual plotting, MathGL core @section Vector fields @nav{} @cindex Traj @cindex Vect @cindex Dew @cindex Flow @cindex FlowP @cindex Pipe These functions perform plotting of 2D and 3D vector fields. There are 5 generally different types of vector fields representations: simple vector field (Vect), vectors along the curve (Traj), vector field by dew-drops (Dew), flow threads (Flow, FlowP), flow pipes (Pipe). By default (if absent) values of @var{x}, @var{y}, @var{z} are equidistantly distributed in axis range. The minor dimensions of arrays @var{x}, @var{y}, @var{z}, @var{ax} should be equal. The size of @var{ax}, @var{ay} and @var{az} must be equal. Arrays @var{x}, @var{y}, @var{z} can be vectors (not matrices as @var{ax}). String @var{sch} sets the color scheme (see @ref{Color scheme}) for plot. String @var{opt} contain command options (see @ref{Command options}). @anchor{traj} @deftypefn {MGL command} {} traj xdat ydat udat vdat ['sch'=''] @deftypefnx {MGL command} {} traj xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Traj (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Traj (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_traj_xyz (@code{HMGL} gr, @code{HCDT}x, @code{HCDT}y, @code{HCDT}z, @code{HCDT}ax, @code{HCDT}ay, @code{HCDT}az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_traj_xy (@code{HMGL} gr, @code{HCDT}x, @code{HCDT}y, @code{HCDT}ax, @code{HCDT}ay, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws vectors @{@var{ax}, @var{ay}, @var{az}@} along a curve @{@var{x}, @var{y}, @var{z}@}. The length of arrows are proportional to @math{\sqrt@{ax^2+ay^2+az^2@}}. String @var{pen} specifies the color (see @ref{Line styles}). By default (@code{pen=""}) color from palette is used (see @ref{Palette and colors}). Option @code{value} set the vector length factor (if non-zero) or vector length to be proportional the distance between curve points (if @code{value=0}). The minor sizes of all arrays must be equal and large 2. The plots are drawn for each row if one of the data is the matrix. See also @ref{vect}. @sref{Traj sample} @end deftypefn @anchor{vect} @deftypefn {MGL command} {} vect udat vdat ['sch'=''] @deftypefnx {MGL command} {} vect xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_vect_2d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_vect_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws plane vector field plot for the field @{@var{ax}, @var{ay}@} depending parametrically on coordinates @var{x}, @var{y} at level @var{z} equal to minimal z-axis value. The length and color of arrows are proportional to @math{\sqrt@{ax^2+ay^2@}}. The number of arrows depend on @ref{meshnum}. The appearance of the hachures (arrows) can be changed by symbols: @itemize @bullet @item @samp{f} for drawing arrows with fixed lengths, @item @samp{>}, @samp{<} for drawing arrows to or from the cell point (default is centering), @item @samp{.} for drawing hachures with dots instead of arrows, @item @samp{=} for enabling color gradient along arrows. @end itemize See also @ref{flow}, @ref{dew}. @sref{Vect sample} @end deftypefn @deftypefn {MGL command} {} vect udat vdat wdat ['sch'=''] @deftypefnx {MGL command} {} vect xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_vect_3d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_vect_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @end ifclear This is 3D version of the first functions. Here arrays @var{ax}, @var{ay}, @var{az} must be 3-ranged tensors with equal sizes and the length and color of arrows is proportional to @math{\sqrt@{ax^2+ay^2+az^2@}}. @end deftypefn @anchor{vect3} @deftypefn {MGL command} {} vect3 udat vdat wdat ['sch'='' sval] @deftypefnx {MGL command} {} vect3 xdat ydat zdat udat vdat wdat ['sch'='' sval] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Vect3 (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Vect3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_vect3 (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_vect3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear The function draws 3D vector field plot for the field @{@var{ax}, @var{ay}, @var{az}@} depending parametrically on coordinates @var{x}, @var{y}, @var{z}. Vector field is drawn at slice @var{sVal} in direction @{@samp{x}, @samp{y}, @samp{z}@} if @var{sch} contain corresponding symbol (by default, @samp{y} direction is used). The length and color of arrows are proportional to @math{\sqrt@{ax^2+ay^2+az^2@}}. The number of arrows depend on @ref{meshnum}. The appearance of the hachures (arrows) can be changed by symbols: @itemize @bullet @item @samp{f} for drawing arrows with fixed lengths, @item @samp{>}, @samp{<} for drawing arrows to or from the cell point (default is centering), @item @samp{.} for drawing hachures with dots instead of arrows, @item @samp{=} for enabling color gradient along arrows. @end itemize See also @ref{vect}, @ref{flow}, @ref{dew}. @sref{Vect3 sample} @end deftypefn @anchor{dew} @deftypefn {MGL command} {} dew udat vdat ['sch'=''] @deftypefnx {MGL command} {} dew xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Dew (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Dew (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_dew (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_dew_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws dew-drops for plane vector field @{@var{ax}, @var{ay}@} depending parametrically on coordinates @var{x}, @var{y} at level @var{z} equal to minimal z-axis value. Note that this is very expensive plot in memory usage and creation time! The color of drops is proportional to @math{\sqrt@{ax^2+ay^2@}}. The number of drops depend on @ref{meshnum}. See also @ref{vect}. @sref{Dew sample} @end deftypefn @anchor{flow} @deftypefn {MGL command} {} flow udat vdat ['sch'=''] @deftypefnx {MGL command} {} flow xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_flow_2d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_flow_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws flow threads for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level @var{z} equal to minimal z-axis value. Number of threads is proportional to @code{value} option (default is 5). String @var{sch} may contain: @itemize @bullet @item color scheme -- up-half (warm) corresponds to normal flow (like attractor), bottom-half (cold) corresponds to inverse flow (like source); @item @samp{#} for starting threads from edges only; @item @samp{*} for starting threads from a 2D array of points inside the data; @item @samp{v} for drawing arrows on the threads; @item @samp{x}, @samp{z} for drawing tapes of normals in x-y and y-z planes correspondingly. @end itemize See also @ref{pipe}, @ref{vect}, @ref{tape}, @ref{barwidth}. @sref{Flow sample} @end deftypefn @deftypefn {MGL command} {} flow udat vdat wdat ['sch'=''] @deftypefnx {MGL command} {} flow xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_flow_3d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_flow_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @end ifclear This is 3D version of the first functions. Here arrays @var{ax}, @var{ay}, @var{az} must be 3-ranged tensors with equal sizes and the color of line is proportional to @math{\sqrt@{ax^2+ay^2+az^2@}}. @end deftypefn @deftypefn {MGL command} {} flow @code{x0 y0} udat vdat ['sch'=''] @deftypefnx {MGL command} {} flow @code{x0 y0} xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_flowp_2d (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_flowp_xy (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear The same as first one (@ref{flow}) but draws single flow thread starting from point @var{p0}=@{@var{x0},@var{y0},@var{z0}@}. @end deftypefn @deftypefn {MGL command} {} flow @code{x0 y0 z0} udat vdat wdat ['sch'=''] @deftypefnx {MGL command} {} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_flowp_3d (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_flowp_xyz (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @end ifclear This is 3D version of the previous functions. @end deftypefn @anchor{grad} @deftypefn {MGL command} {} grad pdat ['sch'=''] @deftypefnx {MGL command} {} grad xdat ydat pdat ['sch'=''] @deftypefnx {MGL command} {} grad xdat ydat zdat pdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Grad (@code{const mglDataA &}phi, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Grad (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}phi, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Grad (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}phi, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_grad (@code{HMGL} gr, @code{HCDT} phi, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} phi, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} phi, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws gradient lines for scalar field @var{phi}[i,j] (or @var{phi}[i,j,k] in 3d case) specified parametrically @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Number of lines is proportional to @code{value} option (default is 5). See also @ref{dens}, @ref{cont}, @ref{flow}. @end deftypefn @anchor{pipe} @deftypefn {MGL command} {} pipe udat vdat ['sch'='' @code{r0=0.05}] @deftypefnx {MGL command} {} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_pipe_2d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_pipe_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @end ifclear The function draws flow pipes for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level @var{z} equal to minimal z-axis value. Number of pipes is proportional to @code{value} option (default is 5). If @samp{#} symbol is specified then pipes start only from edges of axis range. The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 or symbol @samp{i} is specified then pipe radius is inverse proportional to amplitude. The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{flow}, @ref{vect}. @sref{Pipe sample} @end deftypefn @deftypefn {MGL command} {} pipe udat vdat wdat ['sch'='' @code{r0=0.05}] @deftypefnx {MGL command} {} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_pipe_3d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_pipe_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @end ifclear This is 3D version of the first functions. Here arrays @var{ax}, @var{ay}, @var{az} must be 3-ranged tensors with equal sizes and the color of line is proportional to @math{\sqrt@{ax^2+ay^2+az^2@}}. @end deftypefn @c ################################################################## @external{} @node Other plotting, Nonlinear fitting, Vector fields, MathGL core @section Other plotting @nav{} @cindex DensXYZ @cindex ContXYZ @cindex ContFXYZ @cindex Dots @cindex Crust @cindex TriPlot @cindex TriCont @cindex QuadPlot @cindex FPlot @cindex FSurf These functions perform miscellaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular or quadrangular mesh (TriPlot, TriCont, QuadPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. @anchor{densz} @anchor{densy} @anchor{densx} @anchor{DensXYZ} @deftypefn {MGL command} {} densx dat ['sch'='' @code{sval=nan}] @deftypefnx {MGL command} {} densy dat ['sch'='' @code{sval=nan}] @deftypefnx {MGL command} {} densz dat ['sch'='' @code{sval=nan}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} DensX (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} DensY (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} DensZ (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_dens_x (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_dens_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_dens_z (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @end ifclear These plotting functions draw density plot in x, y, or z plain. If @var{a} is a tensor (3-dimensional data) then interpolation to a given @var{sVal} is performed. These functions are useful for creating projections of the 3D data array to the bounding box. See also @ref{ContXYZ}, @ref{ContFXYZ}, @ref{dens}, @ref{Data manipulation}. @sref{Dens projection sample} @end deftypefn @anchor{contz} @anchor{conty} @anchor{contx} @anchor{ContXYZ} @deftypefn {MGL command} {} contx dat ['sch'='' @code{sval=nan}] @deftypefnx {MGL command} {} conty dat ['sch'='' @code{sval=nan}] @deftypefnx {MGL command} {} contz dat ['sch'='' @code{sval=nan}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContX (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContY (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContZ (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cont_x (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont_z (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @end ifclear These plotting functions draw contour lines in x, y, or z plain. If @var{a} is a tensor (3-dimensional data) then interpolation to a given @var{sVal} is performed. These functions are useful for creating projections of the 3D data array to the bounding box. Option @code{value} set the number of contours. See also @ref{ContFXYZ}, @ref{DensXYZ}, @ref{cont}, @ref{Data manipulation}. @sref{Cont projection sample} @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{void} ContX (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContY (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContZ (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_cont_x_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont_y_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont_z_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) The same as previous with manual contour levels. @end deftypefn @end ifclear @anchor{contfz} @anchor{contfy} @anchor{contfx} @anchor{ContFXYZ} @deftypefn {MGL command} {} contfx dat ['sch'='' @code{sval=nan}] @deftypefnx {MGL command} {} contfy dat ['sch'='' @code{sval=nan}] @deftypefnx {MGL command} {} contfz dat ['sch'='' @code{sval=nan}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} ContFX (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContFY (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContFZ (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contf_x (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf_z (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @end ifclear These plotting functions draw solid contours in x, y, or z plain. If @var{a} is a tensor (3-dimensional data) then interpolation to a given @var{sVal} is performed. These functions are useful for creating projections of the 3D data array to the bounding box. Option @code{value} set the number of contours. See also @ref{ContFXYZ}, @ref{DensXYZ}, @ref{cont}, @ref{Data manipulation}. @sref{ContF projection sample} @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{void} ContFX (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContFY (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} ContFZ (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_contf_x_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf_y_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf_z_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) The same as previous with manual contour levels. @end deftypefn @end ifclear @anchor{fplot} @deftypefn {MGL command} {} fplot 'y(x)' ['pen'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} FPlot (@code{const char *}eqY, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_fplot (@code{HMGL} gr, @code{const char *}eqY, @code{const char *}pen, @code{const char *}opt) @end ifclear Draws command function @samp{y(x)} at plane @var{z} equal to minimal z-axis value, where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. Option @code{value} set initial number of points. See also @ref{plot}. @end deftypefn @deftypefn {MGL command} {} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} FPlot (@code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}pen, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_fplot_xyz (@code{HMGL} gr, @code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}pen, @code{const char *}opt) @end ifclear Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. Option @code{value} set number of points. See also @ref{plot}. @end deftypefn @anchor{fsurf} @deftypefn {MGL command} {} fsurf 'z(x,y)' ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} FSurf (@code{const char *}eqZ, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}); @deftypefnx {C function} @code{void} mgl_fsurf (@code{HMGL} gr, @code{const char *}eqZ, @code{const char *}sch, @code{const char *}opt); @end ifclear Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. Option @code{value} set number of points. See also @ref{surf}. @end deftypefn @deftypefn {MGL command} {} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} FSurf (@code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_fsurf_xyz (@code{HMGL} gr, @code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}sch, @code{const char *}opt) @end ifclear Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. Option @code{value} set number of points. See also @ref{surf}. @end deftypefn @anchor{triplot} @deftypefn {MGL command} {} triplot idat xdat ydat ['sch'=''] @deftypefnx {MGL command} {} triplot idat xdat ydat zdat ['sch'=''] @deftypefnx {MGL command} {} triplot idat xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} TriPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TriPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TriPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_triplot_xy (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_triplot_xyz (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_triplot_xyzc (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws the surface of triangles. Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{dots}, @ref{crust}, @ref{quadplot}, @ref{triangulation}. @sref{TriPlot and QuadPlot} @end deftypefn @anchor{tricont} @deftypefn {MGL command} {} tricont vdat idat xdat ydat zdat cdat ['sch'=''] @deftypefnx {MGL command} {} tricont vdat idat xdat ydat zdat ['sch'=''] @deftypefnx {MGL command} {} tricont idat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} TriCont (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TriCont (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TriContV (@code{const mglDataA &}v, @code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} TriContV (@code{const mglDataA &}v, @code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws contour lines for surface of triangles at @var{z}=@var{v}[k] (or at @var{z} equal to minimal z-axis value if @var{sch} contain symbol @samp{_}). Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If @var{v} is absent then arrays of option @code{value} elements equidistantly distributed in color range is used. String @var{sch} sets the color scheme. Array @var{c} (if specified) is used for contour coloring. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{triplot}, @ref{cont}, @ref{triangulation}. @end deftypefn @anchor{quadplot} @deftypefn {MGL command} {} quadplot idat xdat ydat ['sch'=''] @deftypefnx {MGL command} {} quadplot idat xdat ydat zdat ['sch'=''] @deftypefnx {MGL command} {} quadplot idat xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws the surface of quadrangles. Quadrangles vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 4 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of quadrangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{triplot}. @sref{TriPlot and QuadPlot} @end deftypefn @anchor{dots} @deftypefn {MGL command} {} dots xdat ydat zdat ['sch'=''] @deftypefnx {MGL command} {} dots xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Dots (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Dots (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Dots (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_dots (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_dots_a (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_dots_ca (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear The function draws the arbitrary placed points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme and kind of marks. If arrays @var{c}, @var{a} are specified then they define colors and transparencies of dots. You can use @ref{tens} plot with style @samp{ .} to draw non-transparent dots with specified colors. Arrays @var{x}, @var{y}, @var{z}, @var{a} must have equal sizes. See also @ref{crust}, @ref{tens}, @ref{mark}, @ref{plot}. @sref{Dots sample} @end deftypefn @anchor{crust} @deftypefn {MGL command} {} crust xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Crust (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_crust (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear The function reconstruct and draws the surface for arbitrary placed points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. If string contain @samp{#} then wire plot is produced. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. See also @ref{dots}, @ref{triplot}. @c @sref{Crust sample} @end deftypefn @c ################################################################## @external{} @node Nonlinear fitting, Data manipulation, Other plotting, MathGL core @section Nonlinear fitting @nav{} @cindex Fit @cindex FitS @cindex PutsFit @cindex mglFitPnts @cindex Fit2 @cindex Fit3 These functions fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation function @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The function @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used. Parameter @var{print}=@code{true} switch on printing the found coefficients to @var{Message} (see @ref{Error handling}). Functions Fit() and FitS() do not draw the obtained data themselves. They fill the data @var{fit} by formula @samp{f} with found coefficients and return it. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the axis range. Number of points in @var{fit} is defined by option @code{value} (default is @var{mglFitPnts}=100). Note, that this functions use GSL library and do something only if MathGL was compiled with GSL support. @sref{Nonlinear fitting hints} @anchor{fits} @deftypefn {MGL command} {} fits res adat sdat 'func' 'var' [ini=0] @deftypefnx {MGL command} {} fits res xdat adat sdat 'func' 'var' [ini=0] @deftypefnx {MGL command} {} fits res xdat ydat adat sdat 'func' 'var' [ini=0] @deftypefnx {MGL command} {} fits res xdat ydat zdat adat sdat 'func' 'var' [ini=0] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{HMDT} mgl_fit_ys (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_fit_xys (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_fit_xyzs (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_fit_xyzas (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @end ifclear Fit data along x-, y- and z-directions for array specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) with weight factor @var{s}[i,j,k]. @end deftypefn @anchor{fit} @deftypefn {MGL command} {} fit res adat 'func' 'var' [ini=0] @deftypefnx {MGL command} {} fit res xdat adat 'func' 'var' [ini=0] @deftypefnx {MGL command} {} fit res xdat ydat adat 'func' 'var' [ini=0] @deftypefnx {MGL command} {} fit res xdat ydat zdat adat 'func' 'var' [ini=0] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{HMDT} mgl_fit_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_fit_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_fit_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_fit_xyza (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @end ifclear Fit data along x-, y- and z-directions for array specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) with weight factor 1. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{mglData} Fit2 (@code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit2 (@code{mglData &}fit, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit3 (@code{mglData &}fit, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Fit3 (@code{mglData &}fit, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{HMDT} mgl_fit_2 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_fit_3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) Fit data along all directions for 2d or 3d arrays @var{a} with @var{s}=1 and @var{x}, @var{y}, @var{z} equidistantly distributed in axis range. @end deftypefn @end ifclear @anchor{putsfit} @deftypefn {MGL command} {} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} PutsFit (@code{mglPoint} p, @code{const char *}prefix=@code{""}, @code{const char *}font=@code{""}, @code{mreal} size=@code{-1}) @deftypefnx {C function} @code{void} mgl_puts_fit (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const char *}prefix, @code{const char *}font, @code{mreal} size) @end ifclear Print last fitted formula with found coefficients (as numbers) at position @var{p0}. The string @var{prefix} will be printed before formula. All other parameters are the same as in @ref{Text printing}. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglGraph}} @code{const char *}GetFit () @deftypefnx {C function only} @code{const char *} mgl_get_fit (@code{HMGL} gr) @deftypefnx {Fortran subroutine} @code{} mgl_get_fit (@code{long} gr, @code{char *}out, @code{int} len) Get last fitted formula with found coefficients (as numbers). @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{mreal} GetFitChi () @deftypefnx {C function} @code{mreal} mgl_get_fit_chi () Get \chi for last fitted formula. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{mreal} GetFitCovar () @deftypefnx {C function} @code{mreal} mgl_get_fit_covar () Get covariance matrix for last fitted formula. @end deftypefn @end ifclear @c ################################################################## @external{} @node Data manipulation, , Nonlinear fitting, MathGL core @section Data manipulation @nav{} @cindex Hist @cindex Fill @cindex DataGrid @deftypefn {MGL command} {} hist @sc{res} xdat adat @deftypefnx {MGL command} {} hist @sc{res} xdat ydat adat @deftypefnx {MGL command} {} hist @sc{res} xdat ydat zdat adat @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{mglData} Hist (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Hist (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{mglData} Hist (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{HMDT} mgl_hist_x (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_hist_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} a, @code{const char *}opt) @deftypefnx {C function} @code{HMDT} mgl_hist_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}opt) @end ifclear These functions make distribution (histogram) of data. They do not draw the obtained data themselves. These functions can be useful if user have data defined for random points (for example, after PIC simulation) and he want to produce a plot which require regular data (defined on grid(s)). The range for grids is always selected as axis range. Arrays @var{x}, @var{y}, @var{z} define the positions (coordinates) of random points. Array @var{a} define the data value. Number of points in output array @var{res} is defined by option @code{value} (default is @var{mglFitPnts}=100). @end deftypefn @deftypefn {MGL command} {} fill dat 'eq' @deftypefnx {MGL command} {} fill dat 'eq' vdat @deftypefnx {MGL command} {} fill dat 'eq' vdat wdat @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Fill (@code{mglData &}u, @code{const char *}eq, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Fill (@code{mglData &}u, @code{const char *}eq, @code{const mglDataA &}v, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglGraph}} @code{void} Fill (@code{mglData &}u, @code{const char *}eq, @code{const mglDataA &}v, @code{const mglDataA &}w, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_data_fill_eq (@code{HMGL} gr, @code{HMDT} u, @code{const char *}eq, @code{HCDT}v, @code{HCDT}w, @code{const char *}opt) @end ifclear Fills the value of array @samp{u} according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in axis range. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of arrays @var{v}, @var{w} which can be @code{NULL} (i.e. can be omitted). @end deftypefn @deftypefn {MGL command} {} datagrid dat xdat ydat zdat @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} DataGrid (@code{mglData &}u, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_data_grid (@code{HMGL} gr, @code{HMDT} u, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}opt) @end ifclear Fills the value of array @samp{u} according to the linear interpolation of triangulated surface, found for arbitrary placed points @samp{x}, @samp{y}, @samp{z}. Interpolation is done at points equidistantly distributed in axis range. NAN value is used for grid points placed outside of triangulated surface. @sref{Making regular data} @end deftypefn @deftypefn {MGL command} {} refill dat xdat vdat [sl=-1] @deftypefnx {MGL command} {} refill dat xdat ydat vdat [sl=-1] @deftypefnx {MGL command} {} refill dat xdat ydat zdat vdat @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{mglDataA &}dat, @code{const mglDataA &}x, @code{const mglDataA &}v, @code{long} sl=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{mglDataA &}dat, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}v, @code{long} sl=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{mglDataA &}dat, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}v, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_data_refill_gr (@code{HMGL} gr, @code{HMDT} a, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} v, @code{long} sl, @code{const char *}opt) @end ifclear Fills by interpolated values of array @var{v} at the point @{@var{x}, @var{y}, @var{z}@}=@{@code{X[i], Y[j], Z[k]}@} (or @{@var{x}, @var{y}, @var{z}@}=@{@code{X[i,j,k], Y[i,j,k], Z[i,j,k]}@} if @var{x}, @var{y}, @var{z} are not 1d arrays), where @code{X,Y,Z} are equidistantly distributed in axis range and have the same sizes as array @var{dat}. If parameter @var{sl} is 0 or positive then changes will be applied only for slice @var{sl}. @end deftypefn @deftypefn {MGL command} {} pde @sc{res} 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{mglData} PDE (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{mreal} dz=@code{0.1}, @code{mreal} k0=@code{100}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{mreal} dz, @code{mreal} k0, @code{const char *}opt) @end ifclear Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in axis range. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE solving hints} @end deftypefn @c ################################################################## @c @external{} @c @node IDTF functions, , Data manipulation, MathGL core @c @section IDTF functions @c @nav{} @c These functions provide IDTF specific features. In all other cases they do nothing. @c @ifclear UDAV @c @deftypefn {Method on @code{mglGraph}} @code{void} VertexColor (@code{bool} enable) @c Enables smooth color change. @c @end deftypefn @c @deftypefn {Method on @code{mglGraph}} @code{void} Compression (@code{bool} enable) @c Gives smaller files, but quality degrades. @c @end deftypefn @c inline void DoubleSided(bool){} // NOTE: Add later -- IDTF @c inline void TextureColor(bool){} // NOTE: Add later -- IDTF @c @end ifclear @external{} mathgl-2.4.1/texinfo/datadvance.png0000664000175000017500000001564513134046540017047 0ustar balakinbalakinPNG  IHDR+{>dbKGD pHYs.#.#x?vtIME 7#, 2IDATxy\TfAD4W@AT7]Ps-i-2ͺee]/6Vnnn` " *1Ƞص{zŜsYwA3@`=P;QE0Dvza# wTg ov<$E;: v; v; va{l6ޯLGbfRUV{9*Loٌ>~ }d|S|R< uuqŹg ˻ YAW0?qEe1GG=upd2y 0$86163o6ƍއ ߒI(b3_7Cרvի|6W.-[m7Ne*Cw7WLE>ӯOWv%VsS }pgpp>.FeՊH4֟>у+ Tkh0IPUQ#PP`$4a^pϜ>NL(v`@}-N;qo|ŋޡfbϝ$~.In'G㱣 Mo.fMׯ*$=bCI8;X]݅:座WRL}ɂ6&h[5rSSNq}{K|7 &{hFZӾ} LI~~Av(sgB#I!TE$N8Ʉ 5kVbqp0Sff&>m`'Kh4(tiL.|{ZUUjш`(t899Ppo͞Xv\tdÑ$~}uR~zUBBkl؆(HĎm8^UiMdYƐ%h\|~<_t[Rhh.g=G5BHOO'66 0jժg6~&v]<,a4X` ##6Xس7Pd%QQ]طooT§~JHFQݙL:nhȷرS 6_w ]Joe`;1$ DZn @1M{*n0Eٓ̚PY4 &eS}ѦM{>3`}]4h Ӏ~˻I8PS2$ YK=rQGnZŋi('w d4qzO=ݻwwwb˶Dn#.ncƌ"$$6o`J?E`ƌ"ISe.wVFl&..h$IّK(sgNg֌W'$$жm[:k/Ӧ]7$YF*r`?Y]qZXWR8puV"##QUCVV^VݏO?mVCd j5w8>;}/ Ѿ] \`.7ѩS'>,VX@UQK憕lq?k3.L6MSV5ͦddd7g!7NB릪*cF $a(oG.)cӓż$ʕºvhr%u&~Uœ gرbCOub=xCgŪ͸]Xu9:g[eK2/)6+0dd<<2vXn߾-&ٶTB;򢸷; ?X=};RǪ(.eȐ!Uk6rQ=*ӫGd-E8ԩH0͌=Z-qv>Aa|GwUV!0m(df0dP1uhĮ7b<+VZ\,}zGa4l܆s/dʕo9Ayh1﾿L$IH1ӈ7c0xN*&<<c z%ݻ-GH||ਪJt{vh+!q?9\BX3fw isPų7ǎ<=16iŹs8x𠰖}9UU50z0=ǐGڼi^^^Iݓ^{Ms6e{-UC13n8A#R˳51j|?/3mIR/~99EGhEpr}\2x/+t!$cƌ)(bve"^ݛFA *Ff OϪ AtzKDuv^-̝;W ^gQJ63|qd$Y;9¡CD _ͺ7`ҥ"ܺ}7\ͭCJ_wBIhuMTFM=1O",ˤ;ƓO~UhBM-9>;w.SNd0Ε̫J|"""xܩh(}Iۘ;w.fBUUztȦ]%I7}ݸ6,J)!k=g'cAo HK`o~g^ѽز-&+e47o\@pp0[,V&tpܳ<J 1b̳VI3e,알4.v<Y9(Ǐ+Q䢏$I<1f^Vd&V?0%~umO@p\ƍݥRɲeUusV{V'Kl(BMjNk6!I:=#MoYWw2ƪүO2Y.cHII駟r(n;v׊+wc3H $I;/kɇ( ׮f2oKa]7kKrr2Ǐ\,˜;s &;GNP^.nV[Z@[%b4QU= [Mfc^$YL`pz8h4ƎNVV: &@ޘκư1bR}zEK&عs'̠*II{IKjZa;Zh%I"7  ۸iUa$ITgo+4<WはkmFet:=ս(VvU՛IOAKXSK-/!Æ%?hLvpu`РA梪*Z… K$MF# 4Z 'ik5{:_-OMi}db|̟mUղ98u*zR0Q? 5ZN n^lQݫgg6Q8,W t!#&[DIBӋxQpSvȜ9sXx|j_?kjֱɵ23};BXM&k68 c2Yxo#55ڵ-瓣{GbOus,*OeȌhS^MBCyWy$I̙I#%$Ye{,h|Q-I߯Eՠtӊcz?^ѩbo07oOzz:[nr+= .]axRrG,XĢ ~ycRh4Rχe_-MsW͇6+-όx{"K2ZEQDֲx쐒z F!''ҥK;v%֑hJk2\C6cfI>tNgs~F̜9Ij5xz?0M/\He@ޓTUYD=I{dE%_,j[mڍ6[K!E[vlǏd)ځb[[6JϞ=祋Ka1ݲyf:w,Í޽:Mql22˜kj^TUujӪcCZBٶJރ9rE,Fnn6dNI6k,Ipsf]&O.R 6%nܸ!ƛ~ޤ4lXt\0H%,5f%h"8VZEHCt BdV.r)HQۙD͊e\#+85*((0ri1rJ ? Z7ؾ3ALj1prv%**P]V&]'󪡄<ȿMu_~;ؿ}, A@0k譞5ds)ȨQcز=fZMDdʥ믓q;nL89s` !r <䓤Z}Vp$Q2sLl#+:Yׯ#)zHpX )CU5Ӳug.Cdd$G&/N^[*Wvi٪=?oxdYlذhƍȞǩ˷~/!}>hj՗m񱄄s93Gdh4dϝbuxyyQV-޽;^^^(BBB6lӇ8x:݄W i(*_Ҙq/TSv5n*O+t8::wtKF#32[v4$I\ ׯMOF"7I޿*U, ?2ӹ=KEі#).ƬBP&.Qx`N&-Zw;I8vd?W2hWwL&@Ҵy $I=sԔԮ@6>+*i\G JU4mVPUUd\]R.tLZelhՎ,˥fϮhyX(GYo,t ĝ+m V~oż ժ*;jW RY\5G s.m*AYW^Oֱavav;s;"i'v @comment @comment @comment
@html
SourceForge.net Logo thefreecountry.com: Free Programmers' Resources, Free Webmasters' Resources, Free Security Resources, Free Software Support This Project @end html @end macro @macro fig {plot,text} @uref{../\text\, @image{../small/\plot\-sm,3cm, , , .png}} @end macro @end ifhtml @ifnothtml @macro external {} @end macro @macro fig {plot,text} @uref{http://mathgl.sourceforge.net/\text\, @image{small/\plot\-sm,3cm, , , .png}} @end macro @end ifnothtml @node Main, News, , Top @section MathGL is ... @ifhtml @html Surface in fog @end html @end ifhtml @itemize @bullet @item a library for making high-quality scientific graphics under Linux and Windows; @item a library for the fast data plotting and data processing of large data arrays; @item a library for working in window and console modes and for easy embedding into other programs; @item a library with large and growing set of graphics. @end itemize Now MathGL has more than 35000 lines of code, more than 55 general types of graphics for 1d, 2d and 3d data arrays, including special ones for chemical and statistical graphics. It can export graphics to raster and vector (EPS or SVG) formats. It has Qt, FLTK, OpenGL interfaces and can be used even from console programs. It has functions for data processing and script MGL language for simplification of data plotting. Also it has several types of transparency and smoothed lightning, vector fonts and TeX-like symbol parsing, arbitrary curvilinear coordinate system and many over useful things. It can be used from code written on C++/C/Fortran/Python/Octave and many other languages. Finally it is platform independent and free (under GPL v.2.0 license). There is a @uref{http://sourceforge.net/forum/?group_id=152187, forum} where you can ask a question or suggest an improvement. However the @uref{http://groups.google.com/group/mathgl, MathGL group} is preferable for quicker answer. For subscribing to @uref{http://groups.google.com/group/mathgl, MathGL group} you can use form below @ifhtml @html

Email: @end html @end ifhtml @strong{About LGPL and GPL licenses.} Generally, MathGL is GPL library. However, you can use LGPL license for MathGL core and widgets if you don't use SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page. @strong{Latest news} @itemize @item @emph{13 December 2012.} New version (v.@value{VERSION}) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are new plots, advanced color schemes, @uref{../json.html, JavaScript drawing}, and many other improvements in both MathGL core and UDAV, which partially denoted @ref{News, here}. Note, there are @strong{incompatible with v.2.0.* changes} in the arguments of some functions. @item @emph{I'm sorry for making incompatible changes in v.2.1. It was done for introducing unified interface for all functions. I promise that I will not break API for v.2.* later, i.e. I'll only add new features or bug fixes.} @end itemize There is detailed @ref{News, news list}. Sourceforge project page @uref{http://sourceforge.net/projects/mathgl/, here}. @ifhtml @html DATADVANCE @end html @end ifhtml Javascript interface was developed with support of @url{http://www.datadvance.net, DATADVANCE} company. @external{} @node News, Features, Main, Top @section News @itemize @item @strong{13 December 2012.} New version (v.2.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are speeding up and many improvements and bugfixes: @itemize @bullet @item Add class mglDataC for complex data arrays. @item Add Vect3() plot for drawing vectors on slice of 3d vector field. See @url{../doc_en/doc_en_17.html#Vect3-sample, sample}. @item Add Table() function for drawing table with data values. See @url{../doc_en/doc_en_14.html#Table-sample, sample}. @item Add ZoomAxis() for zooming/shifting axis range as whole. @item Add WriteJSON() function for exporting in JSON format suitable for later drawing by JavaScript @item Add JavaScript code for visualizing JSON data. See @uref{../json.html, samples}. @item Add mgl.cgi tool which return PNG image for CGI request in form of MGL script. @item Add mglData::Solve() for finding x-value where dat(x)=val. See @url{../doc_en/doc_en_12.html#Solve-sample, sample}. @item Add mglData::Clean() for removing rows with duplicate values for given column. @item Add MGL commands 'errbox', 'face' @item Color can be specified as its RGB[A] values, i.e. like @samp{@{xFFFFFF@}} or @samp{@{xFFFFFFFF@}}. See @url{../doc_en/doc_en_23.html#Line-styles, sample}. @item Color in color scheme may have position in range [0,1]. Format is @samp{@{CN,pos@}} or @samp{@{xFFFFFF,pos@}}. See @url{../doc_en/doc_en_24.html#Color-scheme, sample}. @item Now pen width for marks is proportional to pen width of line multiplied by size of marks. @item Now you can use different font-faces in the plot simultaneously. See @url{../doc_en/doc_en_11.html#Text-features, sample}. @item Now Legend() automatically use several columns if it contain too many legend entries. @item Add style '-' for legend for drawing them horizontally. See @url{../doc_en/doc_en_11.html#Legend-sample, sample}. @item Vectors is drawn now even if only starting or ending points are placed in bounding box. @item Strongly rewrite the algorithm of vector field plotting. @item Grid lines for NAN origin values are always located at far-away edges. @item Try correctly place axis and tick labels even for axis with inverse range (i.e. for v2' b'} will give string @samp{'a + b'} (here @samp{
} is newline). @item Usually variable have a name which is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter and with length less than 64. A temporary array can be used as variable: @itemize @bullet @item sub-arrays (like in @code{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}. @item any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')} if names for data columns was specified (by @code{idset} command or in the file at string started with @code{##}). @item any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. @item temporary variable of higher dimensions by help of []. For example, @samp{[1,2,3]} will produce a temporary vector of 3 elements @{1, 2, 3@}; @samp{[[11,12],[21,22]]} will produce matrix 2*2 and so on. Here you can join even an arrays of the same dimensions by construction like @samp{[v1,v2,...,vn]}. @item result of code for making new data inside @{@}. For example, @samp{@{sum dat 'x'@}} produce temporary variable which contain result of summation of @var{dat} along direction 'x'. This is the same array @var{tmp} as produced by command @samp{sum tmp dat 'x'}. You can use nested constructions, like @samp{@{sum @{max dat 'z'@} 'x'@}}. @end itemize Temporary variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on). @item Special names @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1} are treated as number if they were not redefined by user. Variables with suffixes are treated as numbers. Names defined by @code{define} command are treated as number. Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}). @end itemize Before the first using all variables must be defined with the help of commands, like, @code{new}, @code{var}, @code{list}, @code{copy}, @code{read}, @code{hist}, @code{sum} and so on. Command may have several set of possible arguments (for example, @code{plot ydat} and @code{plot xdat ydat}). All command arguments for a selected set must be specified. However, some arguments can have default values. These argument are printed in [], like @code{text ydat ['stl'='']} or @code{text x y 'txt' ['fnt'='' size=-1]}. At this, the record @code{[arg1 arg2 arg3 ...]} means @code{[arg1 [arg2 [arg3 ...]]]}, i.e. you can omit only tailing arguments if you agree with its default values. For example, @code{text x y 'txt' '' 1} or @code{text x y 'txt' ''} is correct, but @code{text x y 'txt' 1} is incorrect (argument @code{'fnt'} is missed). For more details see @uref{../doc_en/doc_en_64.html#MGL-scripts, MathGL documentation} @external{} @node Download, Other projects, MGL scripts, Top @section Download @strong{Stable version (v.@value{VERSION})} You may download current version of MathGL for following configurations: @itemize @bullet @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.tar.gz,source} file with cmake build system. @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}-mingw.i686.7z,Win32 GPL} binaries for MinGW (build for i686) @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.LGPL-mingw.i686.7z,Win32 LGPL} binaries for MinGW (build for i686, no GSL and HDF5 support) @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.LGPL-win64.7z,Win64 LGPL} binaries for MSVS 2010 (no GSL and HDF5 support) @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}-1.DevPack,DevPak} package for Dev-C++ or Code::Blocks (GPL version) @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.eng.pdf,PDF} documentation in English @item @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.7z,utilities} with all required DLL files (build for i686) @c HTML documentation in English @c HTML documentation in Russian @c @item @c @uref{http://downloads.sourceforge.net/mathgl/mathgl_slides-1.9.pdf,PDF} slideshow of main features @end itemize @strong{Previous version (v.1.11.2)} You may download current version of MathGL for following configurations: @itemize @bullet @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-1.11.2.tar.gz,source} file with autoconf/automake script. @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-1.11.2-mingw.i686.zip,Win32 GPL} binaries for MinGW (build for i686) @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-1.11.1.1.LGPL-mingw.i686.zip,Win32 LGPL} binaries for MinGW (build for i686, no GSL and HDF5 support) @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-1.11.2-1.DevPack,DevPak} package for Dev-C++ or Code::Blocks (GPL version) @item @uref{http://downloads.sourceforge.net/mathgl/mathgl-1.11.2.eng.pdf,PDF} documentation in English @c HTML documentation in English @c HTML documentation in Russian @item @uref{http://downloads.sourceforge.net/mathgl/mathgl_slides-1.9.pdf,PDF} slideshow of main features @end itemize @strong{Font files} There are a set of @uref{http://sourceforge.net/project/showfiles.php?group_id=152187&package_id=267177,font files} for MathGL with following typefaces. Note, that the set of glyphs can be less than in default font. As result not all TeX symbols can be displayed. @itemize @bullet @item @uref{http://downloads.sourceforge.net/mathgl/STIX_font.tgz,STIX} font -- default font for MathGL. @item @uref{http://downloads.sourceforge.net/mathgl/adventor_font.tgz,Adventor font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} sansserif font based on the URW Gothic L family (like Avant Garde Gothic). @item @uref{http://downloads.sourceforge.net/mathgl/bonum_font.tgz,Bonum font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif font based on the URW Bookman L family. @item @uref{http://downloads.sourceforge.net/mathgl/chorus_font.tgz,Chorus font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} font based on the URW Chancery L Medium Italic. @item @uref{http://downloads.sourceforge.net/mathgl/cursor_font.tgz,Cursor font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} monospaced serif font based on the URW Nimbus Mono L (like Courier). @item @uref{http://downloads.sourceforge.net/mathgl/heros_font.tgz,Heros font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} sansserif font based on the URW Nimbus Sans L (like Helvetica). @item @uref{http://downloads.sourceforge.net/mathgl/heroscn_font.tgz,HerosCN font} -- the "compressed" version of previous one. @item @uref{http://downloads.sourceforge.net/mathgl/pagella_font.tgz,Pagella font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif font based on the URW Palladio L (like Palatino). @item @uref{http://downloads.sourceforge.net/mathgl/schola_font.tgz,Schola font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif fonts is based on the URW Century Schoolbook L. @item @uref{http://downloads.sourceforge.net/mathgl/termes_font.tgz,Termes font} -- the @uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html,TeX Gyre} serif fonts is based on the Nimbus Roman No9 L (like Times). @end itemize @external{} @node Other projects, , Download, Top @section Other projects Except scientific (non public) projects I also have some general interest projects: @itemize @bullet @item @uref{http://sourceforge.net/projects/pocketmk/, PocketMK} is small program for PocketPC which simulate famous Russian calculators MK-61 and slightly extend it. @item @uref{http://udav.sourceforge.net/,UDAV} is front-end for MGL scripts. It has windows interface for data viewing, changing and plotting. Also it can execute MGL scripts, setup and rotating graphics and so on. @end itemize Also I recommend to look at: @itemize @bullet @item @uref{http://englab.bugfest.net/,EngLab} is a cross-compile mathematical platform with a C like syntax intended to be used both by engineers and users with small programming knowledge. It is extremely scalable and allows users and the community to easily compile their own functions as shared objects. @item @uref{http://threedepict.sourceforge.net/,3Depict} is software for analysis of scientific datasets commonly encountered in atom probe tomography. You can manipulate, interact with and analyse point based datasets. @item @uref{http://www.sourceforge.net/projects/graphplot/,Graphplot} is function plotter based on MathGL. @item @uref{http://www.sourceforge.net/projects/graphplot/,OscillViewer} is oscilloscope monitoring program. Working with L-Card 14-140 AD-Convertor. Based on Qt and MathGL libraries. @end itemize Finally, few links to free software and libraries: @itemize @bullet @item @uref{http://www.thefreecountry.com/,thefreecountry.com} have a lot of Free Programmers', Webmasters' and Security Resources @item @uref{http://gnuwin32.sourceforge.net/,GnuWin} provides ports of tools with a GNU or similar open source license, to modern MS-Windows. @item @uref{http://loll.sourceforge.net/,LLoL} is project collecting, organising, classifying, and maintaining important URLs about Linux and the Open Source movement for all levels of Linux users. The LoLL project now has 4000+ links which are updated usually on a daily basis. @end itemize @external{} @bye mathgl-2.4.1/texinfo/time.texi0000664000175000017500000002757313134046534016106 0ustar balakinbalakin@multitable @columnfractions .16 .12 .12 .12 .12 .12 .12 .12 @headitem Name @tab q=0 @tab q=1 @tab q=2 @tab q=4 @tab q=5 @tab q=6 @tab q=8 @item 3wave @tab 0.0447 @tab 0.0932 @tab 0.0975 @tab 0.038 @tab 0.0758 @tab 0.0879 @tab 0.0241 @item alpha @tab 0.0833 @tab 0.142 @tab 0.131 @tab 0.0256 @tab 0.0494 @tab 0.0562 @tab 0.0294 @item apde @tab 85.7 @tab 86.1 @tab 86 @tab 85.7 @tab 85.4 @tab 85.9 @tab 85.8 @item area @tab 0.0419 @tab 0.0876 @tab 0.104 @tab 0.0239 @tab 0.0631 @tab 0.081 @tab 0.0163 @item aspect @tab 0.0382 @tab 0.0748 @tab 0.0797 @tab 0.0197 @tab 0.0461 @tab 0.0482 @tab 0.0155 @item axial @tab 0.756 @tab 1.2 @tab 1.13 @tab 0.2 @tab 0.573 @tab 0.597 @tab 0.131 @item axis @tab 0.0691 @tab 0.163 @tab 0.153 @tab 0.0204 @tab 0.0717 @tab 0.0665 @tab 0.0201 @item barh @tab 0.0363 @tab 0.0668 @tab 0.0659 @tab 0.019 @tab 0.0432 @tab 0.0412 @tab 0.00942 @item bars @tab 0.0436 @tab 0.0855 @tab 0.0982 @tab 0.0378 @tab 0.0574 @tab 0.0709 @tab 0.0172 @item belt @tab 0.0398 @tab 0.052 @tab 0.0577 @tab 0.0251 @tab 0.0285 @tab 0.0359 @tab 0.0232 @item bifurcation @tab 0.58 @tab 0.657 @tab 0.662 @tab 0.619 @tab 0.668 @tab 0.659 @tab 0.566 @item box @tab 0.0572 @tab 0.103 @tab 0.105 @tab 0.024 @tab 0.0446 @tab 0.0537 @tab 0.0419 @item boxplot @tab 0.0437 @tab 0.158 @tab 0.149 @tab 0.083 @tab 0.091 @tab 0.0985 @tab 0.103 @item boxs @tab 0.267 @tab 0.516 @tab 0.494 @tab 0.0499 @tab 0.17 @tab 0.188 @tab 0.0469 @item candle @tab 0.0275 @tab 0.0531 @tab 0.0622 @tab 0.0282 @tab 0.0399 @tab 0.0489 @tab 0.0131 @item chart @tab 0.421 @tab 0.797 @tab 0.812 @tab 0.124 @tab 0.301 @tab 0.458 @tab 0.0935 @item cloud @tab 0.0415 @tab 5.25 @tab 4.1 @tab 0.0366 @tab 0.618 @tab 0.838 @tab 0.0216 @item colorbar @tab 0.123 @tab 0.23 @tab 0.244 @tab 0.0901 @tab 0.231 @tab 0.231 @tab 0.0461 @item combined @tab 0.416 @tab 0.413 @tab 0.387 @tab 0.202 @tab 0.276 @tab 0.299 @tab 0.176 @item cones @tab 0.185 @tab 0.21 @tab 0.19 @tab 0.0694 @tab 0.11 @tab 0.134 @tab 0.0577 @item cont @tab 0.0727 @tab 0.146 @tab 0.15 @tab 0.0482 @tab 0.188 @tab 0.16 @tab 0.0438 @item cont_xyz @tab 0.0408 @tab 0.0712 @tab 0.0748 @tab 0.0306 @tab 0.0619 @tab 0.0785 @tab 0.0302 @item conta @tab 0.0419 @tab 0.0775 @tab 0.0761 @tab 0.0321 @tab 0.0651 @tab 0.0584 @tab 0.0289 @item contd @tab 0.206 @tab 0.258 @tab 0.251 @tab 0.114 @tab 0.145 @tab 0.158 @tab 0.0892 @item contf @tab 0.159 @tab 0.245 @tab 0.207 @tab 0.0796 @tab 0.133 @tab 0.144 @tab 0.0759 @item contf_xyz @tab 0.1 @tab 0.109 @tab 0.108 @tab 0.0589 @tab 0.078 @tab 0.0812 @tab 0.0495 @item contfa @tab 0.152 @tab 0.195 @tab 0.17 @tab 0.083 @tab 0.105 @tab 0.143 @tab 0.0596 @item contv @tab 0.119 @tab 0.162 @tab 0.161 @tab 0.0706 @tab 0.117 @tab 0.143 @tab 0.0475 @item correl @tab 0.0319 @tab 0.0791 @tab 0.0791 @tab 0.0293 @tab 0.0519 @tab 0.0546 @tab 0.0144 @item curvcoor @tab 0.0734 @tab 0.151 @tab 0.153 @tab 0.0374 @tab 0.0922 @tab 0.091 @tab 0.0326 @item cut @tab 0.826 @tab 0.718 @tab 0.544 @tab 0.356 @tab 0.338 @tab 0.383 @tab 0.318 @item dat_diff @tab 0.0712 @tab 0.109 @tab 0.106 @tab 0.0457 @tab 0.0664 @tab 0.0825 @tab 0.0285 @item dat_extra @tab 0.216 @tab 0.32 @tab 0.241 @tab 0.0643 @tab 0.131 @tab 0.22 @tab 0.0508 @item data1 @tab 2.7 @tab 1.99 @tab 1.78 @tab 1.4 @tab 1.4 @tab 1.49 @tab 1.28 @item data2 @tab 1.56 @tab 1.34 @tab 1.26 @tab 1.17 @tab 1.3 @tab 1.24 @tab 1.09 @item dens @tab 0.0815 @tab 0.145 @tab 0.147 @tab 0.0282 @tab 0.0668 @tab 0.0834 @tab 0.0259 @item dens_xyz @tab 0.0693 @tab 0.105 @tab 0.116 @tab 0.0566 @tab 0.0659 @tab 0.0751 @tab 0.0311 @item densa @tab 0.0709 @tab 0.0963 @tab 0.111 @tab 0.0562 @tab 0.0598 @tab 0.0835 @tab 0.0438 @item detect @tab 0.138 @tab 0.175 @tab 0.17 @tab 0.082 @tab 0.1 @tab 0.116 @tab 0.0695 @item dew @tab 1.82 @tab 1.8 @tab 0.838 @tab 0.14 @tab 0.142 @tab 0.123 @tab 0.0846 @item diffract @tab 0.0745 @tab 0.157 @tab 0.171 @tab 0.0584 @tab 0.125 @tab 0.146 @tab 0.0351 @item dilate @tab 0.078 @tab 0.179 @tab 0.199 @tab 0.0343 @tab 0.103 @tab 0.112 @tab 0.031 @item dots @tab 0.0694 @tab 0.104 @tab 0.11 @tab 0.0285 @tab 0.0503 @tab 0.0571 @tab 0.0166 @item earth @tab 31.5 @tab 34.8 @tab 22.7 @tab 12.4 @tab 13 @tab 12.4 @tab 12.1 @item error @tab 0.0383 @tab 0.0944 @tab 0.0927 @tab 0.0301 @tab 0.0791 @tab 0.0704 @tab 0.016 @item error2 @tab 0.0371 @tab 0.0927 @tab 0.0951 @tab 0.019 @tab 0.0571 @tab 0.0583 @tab 0.0297 @item export @tab 0.128 @tab 0.201 @tab 0.179 @tab 0.0842 @tab 0.0948 @tab 0.115 @tab 0.079 @item fall @tab 0.041 @tab 0.0523 @tab 0.0598 @tab 0.0162 @tab 0.0384 @tab 0.0412 @tab 0.0129 @item fit @tab 0.0348 @tab 0.091 @tab 0.0833 @tab 0.0237 @tab 0.0465 @tab 0.048 @tab 0.0159 @item flame2d @tab 5.63 @tab 5.88 @tab 5.75 @tab 3.1 @tab 3.27 @tab 3.13 @tab 0.984 @item flow @tab 0.341 @tab 0.416 @tab 0.42 @tab 0.315 @tab 0.41 @tab 0.402 @tab 0.322 @item fog @tab 0.0453 @tab 0.0778 @tab 0.0943 @tab 0.0156 @tab 0.0546 @tab 0.0768 @tab 0.0153 @item fonts @tab 0.0589 @tab 0.1 @tab 0.099 @tab 0.035 @tab 0.0651 @tab 0.0678 @tab 0.0391 @item grad @tab 0.072 @tab 0.11 @tab 0.135 @tab 0.0729 @tab 0.0929 @tab 0.11 @tab 0.0593 @item hist @tab 0.15 @tab 0.154 @tab 0.154 @tab 0.0614 @tab 0.0863 @tab 0.0862 @tab 0.0386 @item ifs2d @tab 0.635 @tab 0.645 @tab 0.637 @tab 0.305 @tab 0.336 @tab 0.321 @tab 0.106 @item ifs3d @tab 0.794 @tab 0.794 @tab 0.793 @tab 0.325 @tab 0.312 @tab 0.344 @tab 0.0855 @item indirect @tab 0.034 @tab 0.0656 @tab 0.0643 @tab 0.024 @tab 0.0675 @tab 0.0626 @tab 0.00264 @item inplot @tab 0.0533 @tab 0.131 @tab 0.121 @tab 0.0251 @tab 0.0678 @tab 0.0697 @tab 0.0269 @item iris @tab 0.0653 @tab 0.161 @tab 0.175 @tab 0.0368 @tab 0.0872 @tab 0.105 @tab 0.0187 @item label @tab 0.0273 @tab 0.054 @tab 0.0605 @tab 0.0259 @tab 0.045 @tab 0.0455 @tab 0.0024 @item lamerey @tab 0.0299 @tab 0.0548 @tab 0.0575 @tab 0.0159 @tab 0.0336 @tab 0.0277 @tab 0.0132 @item legend @tab 0.102 @tab 0.262 @tab 0.27 @tab 0.0259 @tab 0.131 @tab 0.133 @tab 0.0167 @item light @tab 0.127 @tab 0.163 @tab 0.13 @tab 0.0295 @tab 0.0487 @tab 0.0743 @tab 0.0237 @item loglog @tab 0.066 @tab 0.192 @tab 0.191 @tab 0.0352 @tab 0.0903 @tab 0.1 @tab 0.0292 @item map @tab 0.0413 @tab 0.0949 @tab 0.0855 @tab 0.0314 @tab 0.0655 @tab 0.0766 @tab 0.0162 @item mark @tab 0.0164 @tab 0.0338 @tab 0.0469 @tab 0.022 @tab 0.0235 @tab 0.0318 @tab 0.0123 @item mask @tab 0.0639 @tab 0.125 @tab 0.125 @tab 0.0227 @tab 0.0711 @tab 0.0694 @tab 0.00337 @item mesh @tab 0.0311 @tab 0.0894 @tab 0.0981 @tab 0.0252 @tab 0.0506 @tab 0.0637 @tab 0.016 @item mirror @tab 0.0988 @tab 0.179 @tab 0.177 @tab 0.0369 @tab 0.0799 @tab 0.0871 @tab 0.0251 @item molecule @tab 0.1 @tab 0.129 @tab 0.112 @tab 0.0198 @tab 0.0416 @tab 0.0599 @tab 0.0173 @item ode @tab 0.217 @tab 0.323 @tab 0.303 @tab 0.191 @tab 0.309 @tab 0.321 @tab 0.175 @item ohlc @tab 0.0154 @tab 0.0286 @tab 0.0411 @tab 0.0175 @tab 0.0286 @tab 0.0368 @tab 0.0104 @item param1 @tab 0.177 @tab 0.381 @tab 0.323 @tab 0.0653 @tab 0.17 @tab 0.196 @tab 0.0374 @item param2 @tab 0.569 @tab 0.711 @tab 0.547 @tab 0.169 @tab 0.221 @tab 0.25 @tab 0.135 @item param3 @tab 2.2 @tab 3.25 @tab 2.54 @tab 0.802 @tab 0.936 @tab 0.937 @tab 0.689 @item paramv @tab 1.2 @tab 1.45 @tab 1.32 @tab 0.635 @tab 0.789 @tab 0.787 @tab 0.629 @item parser @tab 0.0412 @tab 0.0635 @tab 0.0632 @tab 0.0284 @tab 0.0566 @tab 0.0707 @tab 0.0165 @item pde @tab 0.327 @tab 0.406 @tab 0.395 @tab 0.333 @tab 0.282 @tab 0.293 @tab 0.26 @item pendelta @tab 0.0435 @tab 0.0435 @tab 0.0483 @tab 0.0468 @tab 0.0449 @tab 0.0453 @tab 0.0442 @item pipe @tab 0.8 @tab 1.19 @tab 0.797 @tab 0.378 @tab 0.474 @tab 0.487 @tab 0.344 @item plot @tab 0.0541 @tab 0.0884 @tab 0.0983 @tab 0.0217 @tab 0.0555 @tab 0.0517 @tab 0.0199 @item pmap @tab 0.103 @tab 0.139 @tab 0.136 @tab 0.0491 @tab 0.0767 @tab 0.0922 @tab 0.0473 @item primitives @tab 0.0747 @tab 0.145 @tab 0.153 @tab 0.02 @tab 0.065 @tab 0.0892 @tab 0.0178 @item projection @tab 0.116 @tab 0.301 @tab 0.315 @tab 0.0267 @tab 0.17 @tab 0.183 @tab 0.0282 @item projection5 @tab 0.12 @tab 0.255 @tab 0.256 @tab 0.0356 @tab 0.143 @tab 0.159 @tab 0.021 @item pulse @tab 0.0254 @tab 0.0448 @tab 0.0563 @tab 0.0174 @tab 0.049 @tab 0.0557 @tab 0.0144 @item qo2d @tab 0.294 @tab 0.275 @tab 0.286 @tab 0.188 @tab 0.218 @tab 0.233 @tab 0.196 @item radar @tab 0.0195 @tab 0.0323 @tab 0.0427 @tab 0.00979 @tab 0.0518 @tab 0.0431 @tab 0.0118 @item refill @tab 0.193 @tab 0.286 @tab 0.215 @tab 0.074 @tab 0.133 @tab 0.13 @tab 0.0559 @item region @tab 0.0539 @tab 0.0867 @tab 0.0868 @tab 0.0232 @tab 0.0709 @tab 0.0724 @tab 0.0164 @item scanfile @tab 0.0302 @tab 0.0559 @tab 0.0555 @tab 0.0152 @tab 0.046 @tab 0.0569 @tab 0.0121 @item schemes @tab 0.0686 @tab 0.132 @tab 0.133 @tab 0.0317 @tab 0.0632 @tab 0.0779 @tab 0.0179 @item section @tab 0.0291 @tab 0.0632 @tab 0.0614 @tab 0.0265 @tab 0.0478 @tab 0.056 @tab 0.00308 @item several_light @tab 0.0623 @tab 0.0793 @tab 0.108 @tab 0.0262 @tab 0.0423 @tab 0.0676 @tab 0.015 @item solve @tab 0.0616 @tab 0.186 @tab 0.15 @tab 0.038 @tab 0.0907 @tab 0.101 @tab 0.017 @item stem @tab 0.0409 @tab 0.0826 @tab 0.0797 @tab 0.0153 @tab 0.0553 @tab 0.0546 @tab 0.0155 @item step @tab 0.0417 @tab 0.0657 @tab 0.0722 @tab 0.018 @tab 0.0448 @tab 0.0467 @tab 0.0158 @item stereo @tab 0.0714 @tab 0.0817 @tab 0.0735 @tab 0.0187 @tab 0.0316 @tab 0.06 @tab 0.0161 @item stfa @tab 0.0534 @tab 0.124 @tab 0.14 @tab 0.0295 @tab 0.0843 @tab 0.0965 @tab 0.0168 @item style @tab 0.105 @tab 0.256 @tab 0.256 @tab 0.0333 @tab 0.134 @tab 0.138 @tab 0.017 @item surf @tab 0.119 @tab 0.19 @tab 0.169 @tab 0.0383 @tab 0.0857 @tab 0.102 @tab 0.0258 @item surf3 @tab 2.28 @tab 3.29 @tab 3.25 @tab 0.975 @tab 2.8 @tab 2.94 @tab 0.508 @item surf3a @tab 0.531 @tab 0.391 @tab 0.362 @tab 0.247 @tab 0.246 @tab 0.301 @tab 0.254 @item surf3c @tab 0.546 @tab 0.389 @tab 0.345 @tab 0.217 @tab 0.214 @tab 0.298 @tab 0.176 @item surf3ca @tab 0.554 @tab 0.395 @tab 0.343 @tab 0.219 @tab 0.219 @tab 0.317 @tab 0.178 @item surfa @tab 0.0426 @tab 0.0691 @tab 0.082 @tab 0.016 @tab 0.0355 @tab 0.0564 @tab 0.0161 @item surfc @tab 0.0441 @tab 0.0606 @tab 0.0713 @tab 0.0259 @tab 0.0383 @tab 0.0459 @tab 0.0199 @item surfca @tab 0.0429 @tab 0.0601 @tab 0.0702 @tab 0.0233 @tab 0.0256 @tab 0.0524 @tab 0.016 @item table @tab 0.124 @tab 0.301 @tab 0.29 @tab 0.0257 @tab 0.145 @tab 0.154 @tab 0.0165 @item tape @tab 0.0428 @tab 0.089 @tab 0.0966 @tab 0.0214 @tab 0.0583 @tab 0.0539 @tab 0.0184 @item tens @tab 0.0337 @tab 0.06 @tab 0.0624 @tab 0.0289 @tab 0.0533 @tab 0.0551 @tab 0.0131 @item ternary @tab 0.113 @tab 0.275 @tab 0.269 @tab 0.0507 @tab 0.155 @tab 0.171 @tab 0.0316 @item text @tab 0.0832 @tab 0.226 @tab 0.218 @tab 0.035 @tab 0.116 @tab 0.127 @tab 0.00324 @item text2 @tab 0.073 @tab 0.161 @tab 0.163 @tab 0.0435 @tab 0.0997 @tab 0.111 @tab 0.0184 @item textmark @tab 0.044 @tab 0.112 @tab 0.112 @tab 0.0288 @tab 0.0632 @tab 0.0652 @tab 0.0136 @item ticks @tab 0.0983 @tab 0.265 @tab 0.261 @tab 0.0263 @tab 0.126 @tab 0.139 @tab 0.0275 @item tile @tab 0.0371 @tab 0.0569 @tab 0.064 @tab 0.0256 @tab 0.0321 @tab 0.0397 @tab 0.0227 @item tiles @tab 0.0377 @tab 0.0619 @tab 0.0687 @tab 0.0298 @tab 0.0194 @tab 0.0459 @tab 0.019 @item torus @tab 0.108 @tab 0.225 @tab 0.226 @tab 0.0269 @tab 0.102 @tab 0.124 @tab 0.0242 @item traj @tab 0.0145 @tab 0.0485 @tab 0.0451 @tab 0.0272 @tab 0.0286 @tab 0.0314 @tab 0.0131 @item triangulation @tab 0.0402 @tab 0.0847 @tab 0.111 @tab 0.0276 @tab 0.0648 @tab 0.0761 @tab 0.0156 @item triplot @tab 0.0294 @tab 0.0799 @tab 0.125 @tab 0.0157 @tab 0.0715 @tab 0.0863 @tab 0.0126 @item tube @tab 0.0844 @tab 0.214 @tab 0.203 @tab 0.0311 @tab 0.0878 @tab 0.105 @tab 0.0259 @item type0 @tab 0.228 @tab 0.274 @tab 0.229 @tab 0.0692 @tab 0.111 @tab 0.141 @tab 0.0619 @item type1 @tab 0.217 @tab 0.292 @tab 0.261 @tab 0.0715 @tab 0.106 @tab 0.152 @tab 0.0564 @item type2 @tab 0.221 @tab 0.276 @tab 0.231 @tab 0.0676 @tab 0.111 @tab 0.142 @tab 0.0649 @item vect @tab 0.0907 @tab 0.226 @tab 0.216 @tab 0.0601 @tab 0.139 @tab 0.166 @tab 0.045 @item vecta @tab 0.0318 @tab 0.0941 @tab 0.104 @tab 0.0334 @tab 0.117 @tab 0.118 @tab 0.0292 @item venn @tab 0.0156 @tab 0.0632 @tab 0.0922 @tab 0.0156 @tab 0.0367 @tab 0.0644 @tab 0.00185 @end multitable mathgl-2.4.1/texinfo/version.texi.in0000664000175000017500000000016413134046534017225 0ustar balakinbalakin@set VERSION ${MathGL_VERSION_MAJOR}.${MathGL_VERSION_MINOR} @set MINVER @c @set MINVER .1 @set NIGHT ${MGL_NIGHT} mathgl-2.4.1/texinfo/data_en.texi0000664000175000017500000043222413134046534016534 0ustar balakinbalakin@c ------------------------------------------------------------------ @chapter Data processing @nav{} @ifset UDAV This chapter describe commands for allocation, resizing, loading and saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Class supports data with dimensions up to 3 (like function of 3 variables -- x,y,z). Data arrays are denoted by Small Caps (like @sc{dat}) if it can be (re-)created by MGL commands. @end ifset @ifclear UDAV This chapter describe classes @code{mglData} and @code{mglDataC} for working with data arrays of real and complex numbers. Both classes are derived from abstract class @code{mglDataA}, and can be used as arguments of any plotting functions (see @ref{MathGL core}). These classes are defined in @code{#include } and @code{#include } correspondingly. The classes have mostly the same set of functions for easy and safe allocation, resizing, loading, saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Classes support data with dimensions up to 3 (like function of 3 variables -- x,y,z). The internal representation of numbers is mreal (or dual=std::complex for @code{mglDataC}), which can be configured as float or double by selecting option @code{--enable-double} at the MathGL configuring (see @ref{Installation}). Float type have smaller size in memory and usually it has enough precision in plotting purposes. However, double type provide high accuracy what can be important for time-axis, for example. Data arrays are denoted by Small Caps (like @sc{dat}) if it can be (re-)created by MGL commands. @end ifclear @menu * Public variables:: * Data constructor:: * Data resizing:: * Data filling:: * File I/O:: * Make another data:: * Data changing:: * Interpolation:: * Data information:: * Operators:: * Global functions:: * Evaluate expression:: * Special data classes:: @end menu @c ------------------------------------------------------------------ @external{} @node Public variables, Data constructor, , Data processing @section Public variables @nav{} @ifset UDAV MGL don't support direct access to data arrays. See section @ref{Data filling} @end ifset @ifclear UDAV @deftypecv {Variable} mglData @code{mreal *} a @deftypecvx {Variable} mglDataC @code{dual *} a Data array itself. The flat data representation is used. For example, matrix [nx x ny] is presented as flat (1d-) array with length nx*ny. The element with indexes @{i, j, k@} is a[i+nx*j+nx*ny*k] (indexes are zero based). @end deftypecv @deftypecv {Variable} mglData @code{long} nx @deftypecvx {Variable} mglDataC @code{long} nx Number of points in 1st dimensions ('x' dimension). @end deftypecv @deftypecv {Variable} mglData @code{long} ny @deftypecvx {Variable} mglDataC @code{long} ny Number of points in 2nd dimensions ('y' dimension). @end deftypecv @deftypecv {Variable} mglData @code{long} nz @deftypecvx {Variable} mglDataC @code{long} nz Number of points in 3d dimensions ('z' dimension). @end deftypecv @deftypecv {Variable} mglData @code{std::string} id @deftypecvx {Variable} mglDataC @code{std::string} id Names of column (or slice if nz>1) -- one character per column. @end deftypecv @deftypecv {Variable} mglData @code{bool} link @deftypecvx {Variable} mglDataC @code{bool} link Flag to use external data, i.e. don't delete it. @end deftypecv @deftypecv {Variable} mglDataA @code{std::wstring} s Name of data. It is used in parsing of MGL scripts. @end deftypecv @deftypecv {Variable} mglDataA @code{bool} temp Flag of temporary variable, which should be deleted. @end deftypecv @deftypecv {Variable} mglDataA @code{void (*)(void *)} func Pointer to callback function which will be called at destroying. @end deftypecv @deftypecv {Variable} mglDataA @code{void *} o Pointer to object for callback function. @end deftypecv @deftypefn {Method on @code{mglData}} @code{mreal} GetVal (@code{long} i) @deftypefnx {Method on @code{mglDataC}} @code{mreal} GetVal (@code{long} i) @deftypefnx {Method on @code{mglData}} @code{void} SetVal (@code{mreal} val, @code{long} i) @deftypefnx {Method on @code{mglDataC}} @code{void} SetVal (@code{mreal} val, @code{long} i) Gets or sets the value in by "flat" index @var{i} without border checking. Index @var{i} should be in range [0, nx*ny*nz-1]. @end deftypefn @deftypefn {Method on @code{mglDataA}} @code{long} GetNx () @deftypefnx {Method on @code{mglDataA}} @code{long} GetNy () @deftypefnx {Method on @code{mglDataA}} @code{long} GetNz () @deftypefnx {C function} @code{long} mgl_data_get_nx (@code{HCDT} dat) @deftypefnx {C function} @code{long} mgl_data_get_ny (@code{HCDT} dat) @deftypefnx {C function} @code{long} mgl_data_get_nz (@code{HCDT} dat) Gets the x-, y-, z-size of the data. @end deftypefn @deftypefn {C function} @code{mreal} mgl_data_get_value (@code{HCDT} dat, @code{int} i, @code{int} j, @code{int} k) @deftypefnx {C function} @code{dual} mgl_datac_get_value (@code{HCDT} dat, @code{int} i, @code{int} j, @code{int} k) @deftypefnx {C function} @code{mreal *} mgl_data_value (@code{HMDT} dat, @code{int} i, @code{int} j, @code{int} k) @deftypefnx {C function} @code{dual *} mgl_datac_value (@code{HADT} dat, @code{int} i, @code{int} j, @code{int} k) @deftypefnx {C function} @code{void} mgl_data_set_value (@code{HMDT} dat, @code{mreal} v, @code{int} i, @code{int} j, @code{int} k) @deftypefnx {C function} @code{void} mgl_datac_set_value (@code{HADT} dat, @code{dual} v, @code{int} i, @code{int} j, @code{int} k) Gets or sets the value in specified cell of the data with border checking. @end deftypefn @deftypefn {C function} @code{const mreal *} mgl_data_data (@code{HCDT} dat) @deftypefnx {C function} @code{const dual *} mgl_datac_data (@code{HCDT} dat) Returns pointer to internal data array. @end deftypefn @deftypefn {C function only} @code{void} mgl_data_set_func (@code{mglDataA *}dat, @code{void (*}func@code{)(void *)}, @code{void *}par) Set pointer to callback function which will be called at destroying. @end deftypefn @deftypefn {C function} @code{void} mgl_data_set_name (@code{mglDataA *}dat, @code{const char *}name) @deftypefnx {C function} @code{void} mgl_data_set_name_w (@code{mglDataA *}dat, @code{const wchar_t *}name) Set name of data, which used in parsing of MGL scripts. @end deftypefn @end ifclear @c ------------------------------------------------------------------ @external{} @node Data constructor, Data resizing, Public variables, Data processing @section Data constructor @nav{} @cindex mglData @ifset UDAV There are many functions, which can create data for output (see @ref{Data filling}, @ref{File I/O}, @ref{Make another data}, @ref{Global functions}). Here I put most useful of them. @end ifset @anchor{new} @deftypefn {MGL command} {} new @sc{dat} [@code{nx=1} 'eq'] @deftypefnx {MGL command} {} new @sc{dat} @code{nx ny} ['eq'] @deftypefnx {MGL command} {} new @sc{dat} @code{nx ny nz} ['eq'] @ifclear UDAV @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{int} mx=@code{1}, @code{int} my=@code{1}, @code{int} mz=@code{1}) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{int} mx=@code{1}, @code{int} my=@code{1}, @code{int} mz=@code{1}) @deftypefnx {C function} @code{HMDT} mgl_create_data () @deftypefnx {C function} @code{HMDT} mgl_create_data_size (@code{int} mx, @code{int} my, @code{int} mz) @deftypefnx {C function} @code{HADT} mgl_create_datac () @deftypefnx {C function} @code{HADT} mgl_create_datac_size (@code{int} mx, @code{int} my, @code{int} mz) @end ifclear Default constructor. Allocates the memory for data array and initializes it by zero. If string @var{eq} is specified then data will be filled by corresponding formula as in @ref{fill}. @end deftypefn @anchor{copy} @deftypefn {MGL command} {} copy @sc{dat} dat2 ['eq'=''] @deftypefnx {MGL command} {} copy @sc{dat} @code{val} @ifclear UDAV @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{const mglDataA &}dat2) @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{const mglDataA *}dat2) @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{int} size, @code{const float *}dat2) @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{int} size, @code{int} cols, @code{const float *}dat2) @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{int} size, @code{const double *}dat2) @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{int} size, @code{int} cols, @code{const double *}dat2) @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{const double *}dat2, @code{int} size) @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{const double *}dat2, @code{int} size, @code{int} cols) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{const mglDataA &}dat2) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{const mglDataA *}dat2) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{int} size, @code{const float *}dat2) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{int} size, @code{int} cols, @code{const float *}dat2) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{int} size, @code{const double *}dat2) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{int} size, @code{int} cols, @code{const double *}dat2) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{int} size, @code{const dual *}dat2) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{int} size, @code{int} cols, @code{const dual *}dat2) @end ifclear Copy constructor. Allocates the memory for data array and copy values from other array. At this, if parameter @var{eq} or @var{val} is specified then the data will be modified by corresponding formula similarly to @ref{fill}. @end deftypefn @deftypefn {MGL command} {} copy @sc{redat} @sc{imdat} dat2 ['eq'=''] Allocates the memory for data array and copy real and imaginary values from complex array @var{dat2}. @end deftypefn @deftypefn {MGL command} {} copy 'name' Allocates the memory for data array and copy values from other array specified by its name, which can be "invalid" for MGL names (like one read from HDF5 files). @end deftypefn @deftypefn {MGL command} {} read @sc{dat} 'fname' @ifclear UDAV @deftypefnx {Constructor on @code{mglData}} {} mglData (@code{const char *}fname) @deftypefnx {Constructor on @code{mglDataC}} {} mglDataC (@code{const char *}fname) @deftypefnx {C function} @code{HMDT} mgl_create_data_file (@code{const char *}fname) @deftypefnx {C function} @code{HADT} mgl_create_datac_file (@code{const char *}fname) @end ifclear Reads data from tab-separated text file with auto determining sizes of the data. @end deftypefn @deftypefn {MGL command} {} delete dat @deftypefnx {MGL command} {} delete 'name' @ifclear UDAV @deftypefnx {Destructor on @code{mglData}} {} ~mglData () @deftypefnx {C function} @code{void} mgl_delete_data (@code{HMDT} dat) @deftypefnx {Destructor on @code{mglDataC}} {} ~mglDataC () @deftypefnx {C function} @code{void} mgl_delete_datac (@code{HADT} dat) @end ifclear Deletes the data array from memory. @end deftypefn @c ------------------------------------------------------------------ @external{} @node Data resizing, Data filling, Data constructor, Data processing @section Data resizing @nav{} @cindex Create @cindex Rearrange @cindex Extend @cindex Transpose @cindex Squeeze @cindex Crop @cindex Insert @cindex Delete @cindex Sort @cindex Clean @cindex Join @deftypefn {MGL command} {} new @sc{dat} [@code{nx=1 ny=1 nz=1}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Create (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) @deftypefnx {Method on @code{mglDataC}} @code{void} Create (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) @deftypefnx {C function} @code{void} mgl_data_create (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) @deftypefnx {C function} @code{void} mgl_datac_create (@code{HADT} dat, @code{int} mx, @code{int} my, @code{int} mz) @end ifclear Creates or recreates the array with specified size and fills it by zero. This function does nothing if one of parameters @var{mx}, @var{my}, @var{mz} is zero or negative. @end deftypefn @anchor{rearrange} @deftypefn {MGL command} {} rearrange dat @code{mx [my=0 mz=0]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Rearrange (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0}) @deftypefnx {Method on @code{mglDataC}} @code{void} Rearrange (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0}) @deftypefnx {C function} @code{void} mgl_data_rearrange (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) @deftypefnx {C function} @code{void} mgl_datac_rearrange (@code{HADT} dat, @code{int} mx, @code{int} my, @code{int} mz) @end ifclear Rearrange dimensions without changing data array so that resulting sizes should be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz}=1. @end deftypefn @anchor{transpose} @deftypefn {MGL command} {} transpose dat ['dim'='yxz'] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Transpose (@code{const char *}dim=@code{"yx"}) @deftypefnx {Method on @code{mglDataC}} @code{void} Transpose (@code{const char *}dim=@code{"yx"}) @deftypefnx {C function} @code{void} mgl_data_transpose (@code{HMDT} dat, @code{const char *}dim) @deftypefnx {C function} @code{void} mgl_datac_transpose (@code{HADT} dat, @code{const char *}dim) @end ifclear Transposes (shift order of) dimensions of the data. New order of dimensions is specified in string @var{dim}. This function can be useful also after reading of one-dimensional data. @end deftypefn @anchor{extend} @deftypefn {MGL command} {} extend dat @code{n1 [n2=0]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Extend (@code{int} n1, @code{int} n2=@code{0}) @deftypefnx {Method on @code{mglDataC}} @code{void} Extend (@code{int} n1, @code{int} n2=@code{0}) @deftypefnx {C function} @code{void} mgl_data_extend (@code{HMDT} dat, @code{int} n1, @code{int} n2) @deftypefnx {C function} @code{void} mgl_datac_extend (@code{HADT} dat, @code{int} n1, @code{int} n2) @end ifclear Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be @iftex @math{a_{ij}^{new} = a_i^{old}} where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|. @end iftex @ifnottex a_ij^new = a_i^old where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|. @end ifnottex @end deftypefn @anchor{squeeze} @deftypefn {MGL command} {} squeeze dat @code{rx [ry=1 rz=1 sm=off]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false}) @deftypefnx {Method on @code{mglDataC}} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false}) @deftypefnx {C function} @code{void} mgl_data_squeeze (@code{HMDT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth) @deftypefnx {C function} @code{void} mgl_datac_squeeze (@code{HADT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth) @end ifclear Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{smooth} set to use smoothing @iftex (i.e. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}). @end iftex @ifnottex (i.e. out[i]=\sum_@{j=i,i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]). @end ifnottex @end deftypefn @anchor{crop} @deftypefn {MGL command} {} crop dat @code{n1 n2} 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Crop (@code{int} n1, @code{int} n2, @code{char} dir=@code{'x'}) @deftypefnx {Method on @code{mglDataC}} @code{void} Crop (@code{int} n1, @code{int} n2, @code{char} dir=@code{'x'}) @deftypefnx {C function} @code{void} mgl_data_crop (@code{HMDT} dat, @code{int} n1, @code{int} n2, @code{char} dir) @deftypefnx {C function} @code{void} mgl_datac_crop (@code{HADT} dat, @code{int} n1, @code{int} n2, @code{char} dir) @end ifclear Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}-@var{n2} if @var{n2}<=0 along direction @var{dir}. @end deftypefn @deftypefn {MGL command} {} crop dat 'how' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Crop (@code{const char *}how=@code{"235x"}) @deftypefnx {Method on @code{mglDataC}} @code{void} Crop (@code{const char *}how=@code{"235x"}) @deftypefnx {C function} @code{void} mgl_data_crop_opt (@code{HMDT} dat, @code{const char *}how) @deftypefnx {C function} @code{void} mgl_datac_crop_opt (@code{HADT} dat, @code{const char *}how) @end ifclear Cuts off far edge of the data to be more optimal for fast Fourier transform. The resulting size will be the closest value of 2^n*3^m*5^l to the original one. The string @var{how} may contain: @samp{x}, @samp{y}, @samp{z} for directions, and @samp{2}, @samp{3}, @samp{5} for using corresponding bases. @end deftypefn @anchor{insert} @deftypefn {MGL command} {} insert dat 'dir' @code{[pos=off num=0]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Insert (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) @deftypefnx {Method on @code{mglDataC}} @code{void} Insert (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) @deftypefnx {C function} @code{void} mgl_data_insert (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num) @deftypefnx {C function} @code{void} mgl_datac_insert (@code{HADT} dat, @code{char} dir, @code{int} pos, @code{char} num) @end ifclear Insert @var{num} slices along @var{dir}-direction at position @var{pos} and fill it by zeros. @end deftypefn @anchor{delete} @deftypefn {MGL command} {} delete dat 'dir' @code{[pos=off num=0]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Delete (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) @deftypefnx {Method on @code{mglDataC}} @code{void} Delete (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) @deftypefnx {C function} @code{void} mgl_data_delete (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num) @deftypefnx {C function} @code{void} mgl_datac_delete (@code{HADT} dat, @code{char} dir, @code{int} pos, @code{char} num) @end ifclear Delete @var{num} slices along @var{dir}-direction at position @var{pos}. @end deftypefn @deftypefn {MGL command} {} delete dat @deftypefnx {MGL command} {} delete 'name' Deletes the whole data array. @end deftypefn @anchor{sort} @deftypefn {MGL command} {} sort dat @code{idx [idy=-1]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Sort (@code{lond} idx, @code{long} idy=@code{-1}) @deftypefnx {C function} @code{void} mgl_data_sort (@code{HMDT} dat, @code{lond} idx, @code{long} idy) @end ifclear Sort data rows (or slices in 3D case) by values of specified column @var{idx} (or cell @{@var{idx},@var{idy}@} for 3D case). Note, this function is not thread safe! @end deftypefn @anchor{clean} @deftypefn {MGL command} {} clean dat @code{idx} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Clean (@code{lond} idx) @deftypefnx {C function} @code{void} mgl_data_clean (@code{HMDT} dat, @code{lond} idx) @end ifclear Delete rows which values are equal to next row for given column @var{idx}. @end deftypefn @anchor{join} @deftypefn {MGL command} {} join dat vdat [v2dat ...] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Join (@code{const mglDataA &}vdat) @deftypefnx {Method on @code{mglDataC}} @code{void} Join (@code{const mglDataA &}vdat) @deftypefnx {C function} @code{void} mgl_data_join (@code{HMDT} dat, @code{HCDT} vdat) @deftypefnx {C function} @code{void} mgl_datac_join (@code{HADT} dat, @code{HCDT} vdat) @end ifclear Join data cells from @var{vdat} to @var{dat}. At this, function increase @var{dat} sizes according following: z-size for data arrays arrays with equal x-,y-sizes; or y-size for data arrays with equal x-sizes; or x-size otherwise. @end deftypefn @c ------------------------------------------------------------------ @external{} @node Data filling, File I/O, Data resizing, Data processing @section Data filling @nav{} @cindex Fill @cindex Modify @cindex Set @cindex List @cindex Var @cindex Refill @anchor{list} @deftypefn {MGL command} {} list @sc{dat} @code{v1 ...} Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter @samp{|} which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. @end deftypefn @deftypefn {MGL command} {} list @sc{dat} d1 ... Creates new variable with name @var{dat} and fills it by data values of arrays of command arguments @var{d1 ...}. Command can create two-dimensional or three-dimensional (if arrays in arguments are 2d arrays) arrays with arbitrary values. Minor dimensions of all arrays in arguments should be equal to dimensions of first array d1. In the opposite case the argument will be ignored. Note, that the maximal number of arguments is 1000. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglData}} @code{void} Set (@code{const float *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {Method on @code{mglData}} @code{void} Set (@code{const double *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {C function} @code{void} mgl_data_set_float (@code{HMDT} dat, @code{const mreal *}A, @code{int} NX, @code{int} NY, @code{int} NZ) @deftypefnx {C function} @code{void} mgl_data_set_double (@code{HMDT} dat, @code{const double *}A, @code{int} NX, @code{int} NY, @code{int} NZ) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const float *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const double *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const dual *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {C function} @code{void} mgl_datac_set_float (@code{HADT} dat, @code{const mreal *}A, @code{int} NX, @code{int} NY, @code{int} NZ) @deftypefnx {C function} @code{void} mgl_datac_set_double (@code{HADT} dat, @code{const double *}A, @code{int} NX, @code{int} NY, @code{int} NZ) @deftypefnx {C function} @code{void} mgl_datac_set_complex (@code{HADT} dat, @code{const dual *}A, @code{int} NX, @code{int} NY, @code{int} NZ) Allocates memory and copies the data from the @strong{flat} @code{float*} or @code{double*} array. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Set (@code{const float **}A, @code{int} N1, @code{int} N2) @deftypefnx {Method on @code{mglData}} @code{void} Set (@code{const double **}A, @code{int} N1, @code{int} N2) @deftypefnx {C function} @code{void} mgl_data_set_mreal2 (@code{HMDT} dat, @code{const mreal **}A, @code{int} N1, @code{int} N2) @deftypefnx {C function} @code{void} mgl_data_set_double2 (@code{HMDT} dat, @code{const double **}A, @code{int} N1, @code{int} N2) Allocates memory and copies the data from the @code{float**} or @code{double**} array with dimensions @var{N1}, @var{N2}, i.e. from array defined as @code{mreal a[N1][N2];}. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Set (@code{const float ***}A, @code{int} N1, @code{int} N2) @deftypefnx {Method on @code{mglData}} @code{void} Set (@code{const double ***}A, @code{int} N1, @code{int} N2) @deftypefnx {C function} @code{void} mgl_data_set_mreal3 (@code{HMDT} dat, @code{const mreal ***}A, @code{int} N1, @code{int} N2) @deftypefnx {C function} @code{void} mgl_data_set_double3 (@code{HMDT} dat, @code{const double ***}A, @code{int} N1, @code{int} N2) Allocates memory and copies the data from the @code{float***} or @code{double***} array with dimensions @var{N1}, @var{N2}, @var{N3}, i.e. from array defined as @code{mreal a[N1][N2][N3];}. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Set (@code{gsl_vector *}v) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{gsl_vector *}v) @deftypefnx {C function} @code{void} mgl_data_set_vector (@code{HMDT} dat, @code{gsl_vector *}v) @deftypefnx {C function} @code{void} mgl_datac_set_vector (@code{HADT} dat, @code{gsl_vector *}v) Allocates memory and copies the data from the @code{gsl_vector *} structure. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Set (@code{gsl_matrix *}m) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{gsl_matrix *}m) @deftypefnx {C function} @code{void} mgl_data_set_matrix (@code{HMDT} dat, @code{gsl_matrix *}m) @deftypefnx {C function} @code{void} mgl_datac_set_matrix (@code{HADT} dat, @code{gsl_matrix *}m) Allocates memory and copies the data from the @code{gsl_matrix *} structure. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Set (@code{const mglDataA &}from) @deftypefnx {Method on @code{mglData}} @code{void} Set (@code{HCDT} from) @deftypefnx {C function} @code{void} mgl_data_set (@code{HMDT} dat, @code{HCDT} from) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const mglDataA &}from) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{HCDT} from) @deftypefnx {C function} @code{void} mgl_datac_set (@code{HADT} dat, @code{HCDT} from) Copies the data from @code{mglData} (or @code{mglDataA}) instance @var{from}. @end deftypefn @deftypefn {Method on @code{mglDataC}} @code{void} Set (@code{const mglDataA &}re, @code{const mglDataA &}im) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{HCDT} re, @code{HCDT} im) @deftypefnx {Method on @code{mglDataC}} @code{void} SetAmpl (@code{HCDT} ampl, @code{const mglDataA &}phase) @deftypefnx {C function} @code{void} mgl_datac_set_ri (@code{HADT} dat, @code{HCDT} re, @code{HCDT} im) @deftypefnx {C function} @code{void} mgl_datac_set_ap (@code{HADT} dat, @code{HCDT} ampl, @code{HCDT} phase) Copies the data from @code{mglData} instances for real and imaginary parts of complex data arrays. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Set (@code{const std::vector &}d) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const std::vector &}d) @deftypefnx {Method on @code{mglData}} @code{void} Set (@code{const std::vector &}d) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const std::vector &}d) @deftypefnx {Method on @code{mglData}} @code{void} Set (@code{const std::vector &}d) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const std::vector &}d) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const std::vector &}d) Allocates memory and copies the data from the @code{std::vector} array. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Set (@code{const char *}str, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {C function} @code{void} mgl_data_set_values (@code{const char *}str, @code{int} NX, @code{int} NY, @code{int} NZ) @deftypefnx {Method on @code{mglDataC}} @code{void} Set (@code{const char *}str, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {C function} @code{void} mgl_datac_set_values (@code{const char *}str, @code{int} NX, @code{int} NY, @code{int} NZ) Allocates memory and scanf the data from the string. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} SetList (@code{long} n, ...) Allocate memory and set data from variable argument list of @emph{double} values. Note, you need to specify decimal point @samp{.} for integer values! For example, the code @code{SetList(2,0.,1.);} is correct, but the code @code{SetList(2,0,1);} is incorrect. @end deftypefn @deftypefn {Method on @code{mglData}} @code{void} Link (@code{mglData &}from) @deftypefnx {Method on @code{mglData}} @code{void} Link (@code{mreal *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {C function} @code{void} mgl_data_link (@code{HMDT} dat, @code{mreal *}A, @code{int} NX, @code{int} NY, @code{int} NZ) @deftypefnx {Method on @code{mglDataC}} @code{void} Link (@code{mglDataC &}from) @deftypefnx {Method on @code{mglDataC}} @code{void} Link (@code{dual *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) @deftypefnx {C function} @code{void} mgl_datac_link (@code{HADT} dat, @code{dual *}A, @code{int} NX, @code{int} NY, @code{int} NZ) Links external data array, i.e. don't delete this array at exit. @end deftypefn @end ifclear @anchor{var} @deftypefn {MGL command} {} var @sc{dat} @code{num v1 [v2=nan]} Creates new variable with name @var{dat} for one-dimensional array of size @var{num}. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. @end deftypefn @anchor{fill} @deftypefn {MGL command} {} fill dat v1 v2 ['dir'='x'] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Fill (@code{mreal} v1, @code{mreal} v2, @code{char} dir=@code{'x'}) @deftypefnx {Method on @code{mglDataC}} @code{void} Fill (@code{dual} v1, @code{dual} v2, @code{char} dir=@code{'x'}) @deftypefnx {C function} @code{void} mgl_data_fill (@code{HMDT} dat, @code{mreal} v1, @code{mreal} v2, @code{char} dir) @deftypefnx {C function} @code{void} mgl_datac_fill (@code{HADT} dat, @code{dual} v1, @code{dual} v2, @code{char} dir) @end ifclear Equidistantly fills the data values to range [@var{v1}, @var{v2}] in direction @var{dir}=@{@samp{x},@samp{y},@samp{z}@}. @end deftypefn @deftypefn {MGL command} {} fill dat 'eq' [vdat wdat] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Fill (@code{HMGL} gr, @code{const char *}eq, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglData}} @code{void} Fill (@code{HMGL} gr, @code{const char *}eq, @code{const mglDataA &}vdat, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglData}} @code{void} Fill (@code{HMGL} gr, @code{const char *}eq, @code{const mglDataA &}vdat, @code{const mglDataA &}wdat, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglDataC}} @code{void} Fill (@code{HMGL} gr, @code{const char *}eq, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglDataC}} @code{void} Fill (@code{HMGL} gr, @code{const char *}eq, @code{const mglDataA &}vdat, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglDataC}} @code{void} Fill (@code{HMGL} gr, @code{const char *}eq, @code{const mglDataA &}vdat, @code{const mglDataA &}wdat, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_data_fill_eq (@code{HMGL} gr, @code{HMDT} dat, @code{const char *}eq, @code{HCDT} vdat, @code{HCDT} wdat, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_datac_fill_eq (@code{HMGL} gr, @code{HADT} dat, @code{const char *}eq, @code{HCDT} vdat, @code{HCDT} wdat, @code{const char *}opt) @end ifclear Fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in axis range of canvas @var{gr} (in difference from @code{Modify} functions). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat} which can be @code{NULL} (i.e. can be omitted). @end deftypefn @anchor{modify} @deftypefn {MGL command} {} modify dat 'eq' [@code{dim=0}] @deftypefnx {MGL command} {} modify dat 'eq' vdat [wdat] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0}) @deftypefnx {Method on @code{mglData}} @code{void} Modify (@code{const char *}eq, @code{const mglDataA &}v) @deftypefnx {Method on @code{mglData}} @code{void} Modify (@code{const char *}eq, @code{const mglDataA &}v, @code{const mglDataA &}w) @deftypefnx {Method on @code{mglDataC}} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0}) @deftypefnx {Method on @code{mglDataC}} @code{void} Modify (@code{const char *}eq, @code{const mglDataA &}v) @deftypefnx {Method on @code{mglDataC}} @code{void} Modify (@code{const char *}eq, @code{const mglDataA &}v, @code{const mglDataA &}w) @deftypefnx {C function} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim) @deftypefnx {C function} @code{void} mgl_data_modify_vw (@code{HMDT} dat, @code{const char *}eq, @code{HCDT} v, @code{HCDT} w) @deftypefnx {C function} @code{void} mgl_datac_modify (@code{HADT} dat, @code{const char *}eq, @code{int} dim) @deftypefnx {C function} @code{void} mgl_datac_modify_vw (@code{HADT} dat, @code{const char *}eq, @code{HCDT} v, @code{HCDT} w) @end ifclear The same as previous ones but coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in range [0,1]. If @var{dim}>0 is specified then modification will be fulfilled only for slices >=@var{dim}. @end deftypefn @anchor{fillsample} @deftypefn {MGL command} {} fillsample dat 'how' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} FillSample (@code{const char *}how) @deftypefnx {C function} @code{void} mgl_data_fill_sample (@code{HMDT} a, @code{const char *}how) @end ifclear Fills data by 'x' or 'k' samples for Hankel ('h') or Fourier ('f') transform. @end deftypefn @anchor{datagrid} @deftypefn {MGL command} {} datagrid dat xdat ydat zdat @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Grid (@code{HMGL} gr, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglData}} @code{mglData} Grid (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {C function} @code{void} mgl_data_grid (@code{HMGL} gr, @code{HMDT} u, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_data_grid_xy (@code{HMDT} u, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2) @end ifclear Fills the value of array according to the linear interpolation of triangulated surface assuming x-,y-coordinates equidistantly distributed in axis range (or in range [x1,x2]*[y1,y2]). Triangulated surface is found for arbitrary placed points @samp{x}, @samp{y}, @samp{z}. NAN value is used for grid points placed outside of triangulated surface. @sref{Making regular data} @end deftypefn @anchor{put} @deftypefn {MGL command} {} put dat @code{val [i=all j=all k=all]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Put (@code{mreal} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) @deftypefnx {Method on @code{mglDataC}} @code{void} Put (@code{dual} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) @deftypefnx {C function} @code{void} mgl_data_put_val (@code{HMDT} a, @code{mreal} val, @code{int} i, @code{int} j, @code{int} k) @deftypefnx {C function} @code{void} mgl_datac_put_val (@code{HADT} a, @code{dual} val, @code{int} i, @code{int} j, @code{int} k) @end ifclear Sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=-1 set the value @var{val} to whole range in corresponding direction(s). For example, @code{Put(val,-1,0,-1);} sets a[i,0,j]=@var{val} for i=0...(nx-1), j=0...(nz-1). @end deftypefn @deftypefn {MGL command} {} put dat vdat [@code{i=all j=all k=all}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Put (@code{const mglDataA &}v, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) @deftypefnx {Method on @code{mglDataC}} @code{void} Put (@code{const mglDataA &}v, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) @deftypefnx {C function} @code{void} mgl_data_put_dat (@code{HMDT} a, @code{HCDT} v, @code{int} i, @code{int} j, @code{int} k) @deftypefnx {C function} @code{void} mgl_datac_put_dat (@code{HADT} a, @code{HCDT} v, @code{int} i, @code{int} j, @code{int} k) @end ifclear Copies value(s) from array @var{v} to the range of original array. Negative indexes @var{i}, @var{j}, @var{k}=-1 set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of this array. For example, @code{Put(v,-1,0,-1);} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(nx-1), j=0...(nz-1) and condition v.nx>=nx is true. @end deftypefn @anchor{refill} @deftypefn {MGL command} {} refill dat xdat vdat [sl=-1] @deftypefnx {MGL command} {} refill dat xdat ydat vdat [sl=-1] @deftypefnx {MGL command} {} refill dat xdat ydat zdat vdat @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{const mglDataA &}x, @code{const mglDataA &}v, @code{mreal} x1, @code{mreal} x2, @code{long} sl=@code{-1}) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{const mglDataA &}x, @code{const mglDataA &}v, @code{mglPoint} p1, @code{mglPoint} p2, @code{long} sl=@code{-1}) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}v, @code{mglPoint} p1, @code{mglPoint} p2, @code{long} sl=@code{-1}) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}v, @code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{HMGL} gr, @code{const mglDataA &}x, @code{const mglDataA &}v, @code{long} sl=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{HMGL} gr, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}v, @code{long} sl=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Method on @code{mglData}} @code{void} Refill (@code{HMGL} gr, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}v, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_data_refill_x (@code{HMDT} a, @code{HCDT} x, @code{HCDT} v, @code{mreal} x1, @code{mreal} x2, @code{long} sl) @deftypefnx {C function} @code{void} mgl_data_refill_xy (@code{HMDT} a, @code{HCDT} x, @code{HCDT} y, @code{HCDT} v, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2, @code{long} sl) @deftypefnx {C function} @code{void} mgl_data_refill_xyz (@code{HMDT} a, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} v, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2, @code{mreal} z1, @code{mreal} z2) @deftypefnx {C function} @code{void} mgl_data_refill_gr (@code{HMGL} gr, @code{HMDT} a, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} v, @code{long} sl, @code{const char *}opt) @end ifclear Fills by interpolated values of array @var{v} at the point @{@var{x}, @var{y}, @var{z}@}=@{@code{X[i], Y[j], Z[k]}@} (or @{@var{x}, @var{y}, @var{z}@}=@{@code{X[i,j,k], Y[i,j,k], Z[i,j,k]}@} if @var{x}, @var{y}, @var{z} are not 1d arrays), where @code{X,Y,Z} are equidistantly distributed in range [@var{x1},@var{x2}]*[@var{y1},@var{y2}]*[@var{z1},@var{z2}] and have the same sizes as this array. If parameter @var{sl} is 0 or positive then changes will be applied only for slice @var{sl}. @end deftypefn @anchor{gspline} @deftypefn {MGL command} {} gspline dat xdat vdat [sl=-1] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} RefillGS (@code{const mglDataA &}x, @code{const mglDataA &}v, @code{mreal} x1, @code{mreal} x2, @code{long} sl=@code{-1}) @deftypefnx {C function} @code{void} mgl_data_refill_gs (@code{HMDT} a, @code{HCDT} x, @code{HCDT} v, @code{mreal} x1, @code{mreal} x2, @code{long} sl) @end ifclear Fills by global cubic spline values of array @var{v} at the point @var{x}=@code{X[i]}, where @code{X} are equidistantly distributed in range [@var{x1},@var{x2}] and have the same sizes as this array. If parameter @var{sl} is 0 or positive then changes will be applied only for slice @var{sl}. @end deftypefn @anchor{idset} @deftypefn {MGL command} {} idset dat 'ids' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} SetColumnId (@code{const char *}ids) @deftypefnx {Method on @code{mglDataC}} @code{void} SetColumnId (@code{const char *}ids) @deftypefnx {C function} @code{void} mgl_data_set_id (@code{HMDT} a, @code{const char *}ids) @deftypefnx {C function} @code{void} mgl_datac_set_id (@code{HADT} a, @code{const char *}ids) @end ifclear Sets the symbol @var{ids} for data columns. The string should contain one symbol 'a'...'z' per column. These ids are used in @ref{column}. @end deftypefn @c ------------------------------------------------------------------ @external{} @node File I/O, Make another data, Data filling, Data processing @section File I/O @nav{} @cindex Read @cindex ReadMat @cindex ReadRange @cindex ReadAll @cindex Save @cindex ReadHDF @cindex SaveHDF @cindex Import @cindex Export @anchor{read} @deftypefn {MGL command} {} read @sc{dat} 'fname' @deftypefnx {MGL command} {} read @sc{redat} @sc{imdat} 'fname' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{bool} Read (@code{const char *}fname) @deftypefnx {Method on @code{mglDataC}} @code{bool} Read (@code{const char *}fname) @deftypefnx {C function} @code{int} mgl_data_read (@code{HMDT} dat, @code{const char *}fname) @deftypefnx {C function} @code{int} mgl_datac_read (@code{HADT} dat, @code{const char *}fname) @end ifclear Reads data from tab-separated text file with auto determining sizes of the data. Double newline means the beginning of new z-slice. @end deftypefn @deftypefn {MGL command} {} read @sc{dat} 'fname' @code{mx [my=1 mz=1]} @deftypefnx {MGL command} {} read @sc{redat} @sc{imdat} 'fname' @code{mx [my=1 mz=1]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{bool} Read (@code{const char *}fname, @code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) @deftypefnx {Method on @code{mglDataC}} @code{bool} Read (@code{const char *}fname, @code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) @deftypefnx {C function} @code{int} mgl_data_read_dim (@code{HMDT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz) @deftypefnx {C function} @code{int} mgl_datac_read_dim (@code{HADT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz) @end ifclear Reads data from text file with specified data sizes. This function does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative. @end deftypefn @anchor{readmat} @deftypefn {MGL command} {} readmat @sc{dat} 'fname' [@code{dim=2}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{bool} ReadMat (@code{const char *}fname, @code{int} dim=@code{2}) @deftypefnx {Method on @code{mglDataC}} @code{bool} ReadMat (@code{const char *}fname, @code{int} dim=@code{2}) @deftypefnx {C function} @code{int} mgl_data_read_mat (@code{HMDT} dat, @code{const char *}fname, @code{int} dim) @deftypefnx {C function} @code{int} mgl_datac_read_mat (@code{HADT} dat, @code{const char *}fname, @code{int} dim) @end ifclear Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions. @end deftypefn @anchor{readall} @deftypefn {MGL command} {} readall @sc{dat} 'templ' @code{v1 v2 [dv=1 slice=off]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} ReadRange (@code{const char *}templ, @code{mreal} from, @code{mreal} to, @code{mreal} step=@code{1}, @code{bool} as_slice=@code{false}) @deftypefnx {Method on @code{mglDataC}} @code{void} ReadRange (@code{const char *}templ, @code{mreal} from, @code{mreal} to, @code{mreal} step=@code{1}, @code{bool} as_slice=@code{false}) @deftypefnx {C function} @code{int} mgl_data_read_range (@code{HMDT} dat, @code{const char *}templ, @code{mreal} from, @code{mreal} to, @code{mreal} step, @code{int} as_slice) @deftypefnx {C function} @code{int} mgl_datac_read_range (@code{HADT} dat, @code{const char *}templ, @code{mreal} from, @code{mreal} to, @code{mreal} step, @code{int} as_slice) @end ifclear Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{from} to @var{to} with step @var{step}. The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}. @end deftypefn @deftypefn {MGL command} {} readall @sc{dat} 'templ' @code{[slice=off]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false}) @deftypefnx {Method on @code{mglDataC}} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false}) @deftypefnx {C function} @code{int} mgl_data_read_all (@code{HMDT} dat, @code{const char *}templ, @code{int} as_slice) @deftypefnx {C function} @code{int} mgl_datac_read_all (@code{HADT} dat, @code{const char *}templ, @code{int} as_slice) @end ifclear Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}. @end deftypefn @anchor{scanfile} @deftypefn {MGL command} {} scanfile @sc{dat} 'fname' 'templ' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{bool} ScanFile (@code{const char *}fname, @code{const char *}templ) @deftypefnx {C function} @code{int} mgl_data_scan_file (@code{HMDT} dat, @code{const char *}fname, @code{const char *}templ) @end ifclear Read file @var{fname} line-by-line and scan each line for numbers according the template @var{templ}. The numbers denoted as @samp{%g} in the template. @sref{Saving and scanning file} @end deftypefn @anchor{save} @deftypefn {MGL command} {} save dat 'fname' @ifclear UDAV @deftypefnx {Method on @code{mglDataA}} @code{void} Save (@code{const char *}fname, @code{int} ns=@code{-1}) @code{const} @deftypefnx {C function} @code{void} mgl_data_save (@code{HCDT} dat, @code{const char *}fname, @code{int} ns) @deftypefnx {C function} @code{void} mgl_datac_save (@code{HCDT} dat, @code{const char *}fname, @code{int} ns) @end ifclear Saves the whole data array (for @var{ns}=@code{-1}) or only @var{ns}-th slice to the text file @var{fname}. @end deftypefn @deftypefn {MGL command} {} save 'str' 'fname' ['mode'='a'] Saves the string @var{str} to the text file @var{fname}. For parameter @var{mode}=@samp{a} will append string to the file (default); for @var{mode}=@samp{w} will overwrite the file. @sref{Saving and scanning file} @end deftypefn @anchor{readhdf} @deftypefn {MGL command} {} readhdf @sc{dat} 'fname' 'dname' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname) @deftypefnx {Method on @code{mglDataC}} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname) @deftypefnx {C function} @code{void} mgl_data_read_hdf (@code{HMDT} dat, @code{const char *}fname, @code{const char *}dname) @deftypefnx {C function} @code{void} mgl_datac_read_hdf (@code{HADT} dat, @code{const char *}fname, @code{const char *}dname) @end ifclear Reads data array named @var{dname} from HDF5 or HDF4 file. This function does nothing if HDF5|HDF4 was disabled during library compilation. @end deftypefn @anchor{savehdf} @deftypefn {MGL command} {} savehdf dat 'fname' 'dname' [@code{rewrite}=@code{off}] @ifclear UDAV @deftypefnx {Method on @code{mglDataA}} @code{void} SaveHDF (@code{const char *}fname, @code{const char *}dname, @code{bool} rewrite=@code{false}) @code{const} @deftypefnx {C function} @code{void} mgl_data_save_hdf (@code{HCDT} dat, @code{const char *}fname, @code{const char *}dname, @code{int} rewrite) @deftypefnx {C function} @code{void} mgl_datac_save_hdf (@code{HCDT} dat, @code{const char *}fname, @code{const char *}dname, @code{int} rewrite) @end ifclear Saves data array named @var{dname} to HDF5 file. This function does nothing if HDF5 was disabled during library compilation. @end deftypefn @anchor{datas} @deftypefn {MGL command} {} datas 'fname' @ifclear UDAV @deftypefnx {Method on @code{mglDataA}} @code{int} DatasHDF (@code{const char *}fname, @code{char *}buf, @code{long} size) @code{static} @deftypefnx {C function} @code{int} mgl_datas_hdf (@code{const char *}fname, @code{char *}buf, @code{long} size) @end ifclear Put data names from HDF5 file @var{fname} into @var{buf} as '\t' separated fields. In MGL version the list of data names will be printed as message. This function does nothing if HDF5 was disabled during library compilation. @end deftypefn @anchor{openhdf} @deftypefn {MGL command} {} openhdf 'fname' @ifclear UDAV @deftypefnx {Method on @code{mglParse}} @code{void} OpenHDF (@code{const char *}fname) @deftypefnx {C function} @code{void} mgl_parser_openhdf (@code{HMPR} pr, @code{const char *}fname) @end ifclear Reads all data array from HDF5 file @var{fname} and create MGL variables with names of data names in HDF file. Complex variables will be created if data name starts with @samp{!}. @end deftypefn @ifclear UDAV @deftypefn {C function} @code{const char * const *} mgl_datas_hdf_str (@code{HMPR} pr, @code{const char *}fname) Put HDF data names as list of strings (last one is ""). The result is valid untill next call of the function. @end deftypefn @end ifclear @anchor{import} @deftypefn {MGL command} {} import @sc{dat} 'fname' 'sch' [@code{v1=0 v2=1}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Import (@code{const char *}fname, @code{const char *}scheme, @code{mreal} v1=@code{0}, mreal v2=@code{1}) @deftypefnx {C function} @code{void} mgl_data_import (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{mreal} v1, mreal v2) @end ifclear Reads data from bitmap file (now support only PNG format). The RGB values of bitmap pixels are transformed to mreal values in range [@var{v1}, @var{v2}] using color scheme @var{scheme} (@pxref{Color scheme}). @end deftypefn @anchor{export} @deftypefn {MGL command} {} export dat 'fname' 'sch' [@code{v1=0 v2=0}] @ifclear UDAV @deftypefnx {Method on @code{mglDataA}} @code{void} Export (@code{const char *}fname, @code{const char *}scheme, @code{mreal} v1=@code{0}, mreal v2=@code{0}, @code{int} ns=@code{-1}) const @deftypefnx {C function} @code{void} mgl_data_export (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{mreal} v1, mreal v2, @code{int} ns) const @end ifclear Saves data matrix (or @code{ns}-th slice for 3d data) to bitmap file (now support only PNG format). The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{scheme} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array. @end deftypefn @c ------------------------------------------------------------------ @external{} @node Make another data, Data changing, File I/O, Data processing @section Make another data @nav{} @cindex SubData @cindex Column @cindex Trace @cindex Hist @cindex Resize @cindex Evaluate @cindex Combine @cindex Momentum @cindex Sum @cindex Min @cindex Max @cindex Roots @cindex Correl @cindex AutoCorrel @anchor{subdata} @deftypefn {MGL command} {} subdata @sc{res} dat @code{xx [yy=all zz=all]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} SubData (@code{mreal} xx, @code{mreal} yy=@code{-1}, @code{mreal} zz=@code{-1}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} SubData (@code{mreal} xx, @code{mreal} yy=@code{-1}, @code{mreal} zz=@code{-1}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_subdata (@code{HCDT} dat, @code{mreal} xx, @code{mreal} yy, @code{mreal} zz) @end ifclear Extracts sub-array data from the original data array keeping fixed positive index. For example @code{SubData(-1,2)} extracts 3d row (indexes are zero based), @code{SubData(4,-1)} extracts 5th column, @code{SubData(-1,-1,3)} extracts 4th slice and so on. If argument(s) are non-integer then linear interpolation between slices is used. In MGL version this command usually is used as inline one @code{dat(xx,yy,zz)}. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @deftypefn {MGL command} {} subdata @sc{res} dat xdat [ydat zdat] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} SubData (@code{const mglDataA &}xx, @code{const mglDataA &}yy, @code{const mglDataA &}zz) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} SubData (@code{const mglDataA &}xx, @code{const mglDataA &}yy, @code{const mglDataA &}zz) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} SubData (@code{const mglDataA &}xx, @code{const mglDataA &}yy) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} SubData (@code{const mglDataA &}xx, @code{const mglDataA &}yy) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} SubData (@code{const mglDataA &}xx) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} SubData (@code{const mglDataA &}xx) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_subdata_ext (@code{HCDT} dat, @code{HCDT} xx, @code{HCDT} yy, @code{HCDT} zz) @deftypefnx {C function} @code{HADT} mgl_datac_subdata_ext (@code{HCDT} dat, @code{HCDT} xx, @code{HCDT} yy, @code{HCDT} zz) @end ifclear Extracts sub-array data from the original data array for indexes specified by arrays @var{xx}, @var{yy}, @var{zz} (indirect access). This function work like previous one for 1D arguments or numbers, and resulting array dimensions are equal dimensions of 1D arrays for corresponding direction. For 2D and 3D arrays in arguments, the resulting array have the same dimensions as input arrays. The dimensions of all argument must be the same (or to be scalar 1*1*1) if they are 2D or 3D arrays. In MGL version this command usually is used as inline one @code{dat(xx,yy,zz)}. Function return NULL or create empty data if data cannot be created for given arguments. In C function some of @var{xx}, @var{yy}, @var{zz} can be NULL. @end deftypefn @anchor{column} @deftypefn {MGL command} {} column @sc{res} dat 'eq' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Column (@code{const char *}eq) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Column (@code{const char *}eq) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_column (@code{HCDT} dat, @code{const char *}eq) @end ifclear Get column (or slice) of the data filled by formula @var{eq} on column ids. For example, @code{Column("n*w^2/exp(t)");}. The column ids must be defined first by @ref{idset} function or read from files. In MGL version this command usually is used as inline one @code{dat('eq')}. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{resize} @deftypefn {MGL command} {} resize @sc{res} dat @code{mx [my=1 mz=1]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0}, @code{mreal} x1=@code{0}, @code{mreal} x2=@code{1}, @code{mreal} y1=@code{0}, @code{mreal} y2=@code{1}, @code{mreal} z1=@code{0}, @code{mreal} z2=@code{1}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0}, @code{mreal} x1=@code{0}, @code{mreal} x2=@code{1}, @code{mreal} y1=@code{0}, @code{mreal} y2=@code{1}, @code{mreal} z1=@code{0}, @code{mreal} z2=@code{1}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_resize (@code{HCDT} dat, @code{int} mx, @code{int} my, @code{int} mz) @deftypefnx {C function} @code{HMDT} mgl_data_resize_box (@code{HCDT} dat, @code{int} mx, @code{int} my, @code{int} mz, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2, @code{mreal} z1, @code{mreal} z2) @end ifclear Resizes the data to new size @var{mx}, @var{my}, @var{mz} from box (part) [@var{x1},@var{x2}] x [@var{y1},@var{y2}] x [@var{z1},@var{z2}] of original array. Initially x,y,z coordinates are supposed to be in [0,1]. If one of sizes @var{mx}, @var{my} or @var{mz} is 0 then initial size is used. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{evaluate} @deftypefn {MGL command} {} evaluate @sc{res} dat idat [@code{norm=on}] @deftypefnx {MGL command} {} evaluate @sc{res} dat idat jdat [@code{norm=on}] @deftypefnx {MGL command} {} evaluate @sc{res} dat idat jdat kdat [@code{norm=on}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Evaluate (@code{const mglDataA &}idat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} Evaluate (@code{const mglDataA &}idat, @code{const mglDataA &}jdat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} Evaluate (@code{const mglDataA &}idat, @code{const mglDataA &}jdat, @code{const mglDataA &}kdat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Evaluate (@code{const mglDataA &}idat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Evaluate (@code{const mglDataA &}idat, @code{const mglDataA &}jdat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Evaluate (@code{const mglDataA &}idat, @code{const mglDataA &}jdat, @code{const mglDataA &}kdat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_evaluate (@code{HCDT} dat, @code{HCDT} idat, @code{HCDT} jdat, @code{HCDT} kdat, @code{int} norm) @end ifclear Gets array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in ranges [0,nx], [0,ny], [0,nz] correspondingly. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{section} @deftypefn {MGL command} {} section @sc{res} dat ids ['dir'='y' @code{val=nan}] @deftypefnx {MGL command} {} section @sc{res} dat @code{id} ['dir'='y' @code{val=nan}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Section (@code{const mglDataA &}ids, @code{const char *}dir=@code{'y'}, @code{mreal} val=@code{NAN}) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} Section (@code{long} id, @code{const char *}dir=@code{'y'}, @code{mreal} val=@code{NAN}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Section (@code{const mglDataA &}ids, @code{const char *}dir=@code{'y'}, @code{mreal} val=@code{NAN}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Section (@code{long} id, @code{const char *}dir=@code{'y'}, @code{mreal} val=@code{NAN}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_section (@code{HCDT} dat, @code{HCDT} ids, @code{const char *}dir, @code{mreal} val) @deftypefnx {C function} @code{HMDT} mgl_data_section_val (@code{HCDT} dat, @code{long} id, @code{const char *}dir, @code{mreal} val) @deftypefnx {C function} @code{HADT} mgl_datac_section (@code{HCDT} dat, @code{HCDT} ids, @code{const char *}dir, @code{mreal} val) @deftypefnx {C function} @code{HADT} mgl_datac_section_val (@code{HCDT} dat, @code{long} id, @code{const char *}dir, @code{mreal} val) @end ifclear Gets array which is @var{id}-th section (range of slices separated by value @var{val}) of original array @var{dat}. For @var{id}<0 the reverse order is used (i.e. -1 give last section). If several @var{ids} are provided then output array will be result of sequential joining of sections. @end deftypefn @anchor{solve} @deftypefn {MGL command} {} solve @sc{res} dat @code{val} 'dir' [@code{norm=on}] @deftypefnx {MGL command} {} solve @sc{res} dat @code{val} 'dir' idat [@code{norm=on}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Solve (@code{mreal} val, @code{char} dir, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} Solve (@code{mreal} val, @code{char} dir, @code{const mglDataA &}idat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_solve (@code{HCDT} dat, @code{mreal} val, @code{char} dir, @code{HCDT} idat, @code{int} norm) @end ifclear Gets array which values is indexes (roots) along given direction @var{dir}, where interpolated values of data @var{dat} are equal to @var{val}. Output data will have the sizes of @var{dat} in directions transverse to @var{dir}. If data @var{idat} is provided then its values are used as starting points. This allows to find several branches by consequentive calls. Indexes are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in ranges [0,nx], [0,ny], [0,nz] correspondingly. Function return NULL or create empty data if data cannot be created for given arguments. @sref{Solve sample} @end deftypefn @anchor{roots} @deftypefn {MGL command} {} roots @sc{res} 'func' ini ['var'='x'] @deftypefnx {MGL command} {} roots @sc{res} 'func' @code{ini} ['var'='x'] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Roots (@code{const char *}func, @code{char} var) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_roots (@code{const char *}func, @code{HCDT} ini, @code{char} var) @deftypefnx {C function} @code{mreal} mgl_find_root_txt (@code{const char *}func, @code{mreal} ini, @code{char} var) @end ifclear Find roots of equation 'func'=0 for variable @var{var} with initial guess @var{ini}. Secant method is used for root finding. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{detect} @deftypefn {MGL command} {} detect @sc{res} dat @code{lvl dj [di=0 minlen=0]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Detect (@code{mreal} lvl, @code{mreal} dj, @code{mreal} di=@code{0}, @code{mreal} minlen=@code{0}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_detect (@code{HCDT} dat, @code{mreal} lvl, @code{mreal} dj, @code{mreal} di, @code{mreal} minlen) @end ifclear Get curves @{x,y@}, separated by NAN values, for local maximal values of array @var{dat} as function of x-coordinate. Noises below @var{lvl} amplitude are ignored. Parameter @var{dj} (in range [0,ny]) set the "attraction" y-distance of points to the curve. Similarly, @var{di} continue curve in x-direction through gaps smaller than @var{di} points. Curves with minimal length smaller than @var{minlen} will be ignored. @end deftypefn @anchor{hist} @deftypefn {MGL command} {} hist @sc{res} dat @code{num v1 v2 [nsub=0]} @deftypefnx {MGL command} {} hist @sc{res} dat wdat @code{num v1 v2 [nsub=0]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Hist (@code{int} n, @code{mreal} v1=@code{0}, @code{mreal} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} Hist (@code{const mglDataA &}w, @code{int} n, @code{mreal} v1=@code{0}, @code{mreal} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Hist (@code{int} n, @code{mreal} v1=@code{0}, @code{mreal} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Hist (@code{const mglDataA &}w, @code{int} n, @code{mreal} v1=@code{0}, @code{mreal} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_hist (@code{HCDT} dat, @code{int} n, @code{mreal} v1, @code{mreal} v2, @code{int} nsub) @deftypefnx {C function} @code{HMDT} mgl_data_hist_w (@code{HCDT} dat, @code{HCDT} w, @code{int} n, @code{mreal} v1, @code{mreal} v2, @code{int} nsub) @end ifclear Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Array @var{w} specifies weights of the data elements (by default is 1). Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). Function return NULL or create empty data if data cannot be created for given arguments. See also @ref{Data manipulation} @end deftypefn @anchor{momentum} @deftypefn {MGL command} {} momentum @sc{res} dat 'how' ['dir'='z'] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_momentum (@code{HCDT} dat, @code{char} dir, @code{const char *}how) @end ifclear Gets momentum (1d-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as @iftex @math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}} @end iftex @ifnottex res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij @end ifnottex if @var{dir}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{sum} @deftypefn {MGL command} {} sum @sc{res} dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Sum (@code{const char *}dir) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Sum (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_sum (@code{HCDT} dat, @code{const char *}dir) @end ifclear Gets array which is the result of summation in given direction or direction(s). Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{max} @deftypefn {MGL command} {} max @sc{res} dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Max (@code{const char *}dir) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Max (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_max_dir (@code{HCDT} dat, @code{const char *}dir) @end ifclear Gets array which is the maximal data values in given direction or direction(s). Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{min} @deftypefn {MGL command} {} min @sc{res} dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Min (@code{const char *}dir) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Min (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_min_dir (@code{HCDT} dat, @code{const char *}dir) @end ifclear Gets array which is the maximal data values in given direction or direction(s). Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{combine} @deftypefn {MGL command} {} combine @sc{res} adat bdat @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Combine (@code{const mglDataA &}a) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Combine (@code{const mglDataA &}a) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_combine (@code{HCDT} dat, @code{HCDT} a) @end ifclear Returns direct multiplication of arrays (like, res[i,j] = this[i]*a[j] and so on). Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{trace} @deftypefn {MGL command} {} trace @sc{res} dat @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Trace () @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglData} Trace () @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_trace (@code{HCDT} dat) @end ifclear Gets array of diagonal elements a[i,i] (for 2D case) or a[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @anchor{correl} @deftypefn {MGL command} {} correl @sc{res} adat bdat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Correl (@code{const mglDataA &}b, @code{const char *}dir) @code{const} @deftypefnx {Method on @code{mglData}} @code{mglData} AutoCorrel (@code{const char *}dir) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglDataC} Correl (@code{const mglDataA &}b, @code{const char *}dir) @code{const} @deftypefnx {Method on @code{mglDataC}} @code{mglDataC} AutoCorrel (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_correl (@code{HCDT} a, @code{HCDT} b, @code{const char *}dir) @deftypefnx {C function} @code{HADT} mgl_datac_correl (@code{HCDT} a, @code{HCDT} b, @code{const char *}dir) @end ifclear Find correlation between data @var{a} (or this in C++) and @var{b} along directions @var{dir}. Fourier transform is used to find the correlation. So, you may want to use functions @ref{swap} or @ref{norm} before plotting it. Function return NULL or create empty data if data cannot be created for given arguments. @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglDataC}} @code{mglData} Real () @code{const} @deftypefnx {C function} @code{HMDT} mgl_datac_real (@code{HCDT} dat) Gets array of real parts of the data. @end deftypefn @deftypefn {Method on @code{mglDataC}} @code{mglData} Imag () @code{const} @deftypefnx {C function} @code{HMDT} mgl_datac_imag (@code{HCDT} dat) Gets array of imaginary parts of the data. @end deftypefn @deftypefn {Method on @code{mglDataC}} @code{mglData} Abs () @code{const} @deftypefnx {C function} @code{HMDT} mgl_datac_abs (@code{HCDT} dat) Gets array of absolute values of the data. @end deftypefn @deftypefn {Method on @code{mglDataC}} @code{mglData} Arg () @code{const} @deftypefnx {C function} @code{HMDT} mgl_datac_arg (@code{HCDT} dat) Gets array of arguments of the data. @end deftypefn @end ifclear @anchor{pulse} @deftypefn {MGL command} {} pulse @sc{res} dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{mglData} Pulse (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_pulse (@code{HCDT} dat, @code{const char *}dir) @end ifclear Find pulse properties along direction @var{dir}: pulse maximum (in column 0) and its position (in column 1), pulse width near maximum (in column 3) and by half height (in column 2), energy in first pulse (in column 4). NAN values are used for widths if maximum is located near the edges. Note, that there is uncertainty for complex data. Usually one should use square of absolute value (i.e. |dat[i]|^2) for them. So, MathGL don't provide this function for complex data arrays. However, C function will work even in this case but use absolute value (i.e. |dat[i]|). Function return NULL or create empty data if data cannot be created for given arguments. See also @ref{max}, @ref{min}, @ref{momentum}, @ref{sum}. @sref{Pulse properties} @end deftypefn @c ------------------------------------------------------------------ @external{} @node Data changing, Interpolation, Make another data, Data processing @section Data changing @nav{} @cindex CumSum @cindex Integral @cindex Diff @cindex Diff2 @cindex SinFFT @cindex CosFFT @cindex Hankel @cindex Swap @cindex Roll @cindex Mirror @cindex Sew @cindex Smooth @cindex Envelop @cindex Norm @cindex NormSl These functions change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondingly. @anchor{cumsum} @deftypefn {MGL command} {} cumsum dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} CumSum (@code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} CumSum (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_cumsum (@code{HMDT} dat, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_cumsum (@code{HADT} dat, @code{const char *}dir) @end ifclear Cumulative summation of the data in given direction or directions. @end deftypefn @anchor{integrate} @deftypefn {MGL command} {} integrate dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Integral (@code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} Integral (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_integral (@code{HMDT} dat, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_integral (@code{HADT} dat, @code{const char *}dir) @end ifclear Integrates (like cumulative summation) the data in given direction or directions. @end deftypefn @anchor{diff} @deftypefn {MGL command} {} diff dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Diff (@code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} Diff (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_diff (@code{HADT} dat, @code{const char *}dir) @end ifclear Differentiates the data in given direction or directions. @end deftypefn @deftypefn {MGL command} {} diff dat xdat ydat [zdat] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Diff (@code{const mglDataA &}x) @deftypefnx {Method on @code{mglData}} @code{void} Diff (@code{const mglDataA &}x, @code{const mglDataA &}y) @deftypefnx {Method on @code{mglData}} @code{void} Diff (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z) @deftypefnx {Method on @code{mglDataC}} @code{void} Diff (@code{const mglDataA &}x) @deftypefnx {Method on @code{mglDataC}} @code{void} Diff (@code{const mglDataA &}x, @code{const mglDataA &}y) @deftypefnx {Method on @code{mglDataC}} @code{void} Diff (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z) @deftypefnx {C function} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{HCDT} x, @code{HCDT}y, @code{HCDT}z) @deftypefnx {C function} @code{void} mgl_datac_diff_par (@code{HADT} dat, @code{HCDT} x, @code{HCDT}y, @code{HCDT}z) @end ifclear Differentiates the data specified parametrically in direction @var{x} with @var{y}, @var{z}=constant. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{Diff(x,y);} and usual derivative along @samp{y} will be @code{Diff(y,x);}. @end deftypefn @anchor{diff2} @deftypefn {MGL command} {} diff2 dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Diff2 (@code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} Diff2 (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_diff2 (@code{HMDT} dat, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_diff2 (@code{HADT} dat, @code{const char *}dir) @end ifclear Double-differentiates (like Laplace operator) the data in given direction. @end deftypefn @anchor{sinfft} @deftypefn {MGL command} {} sinfft dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} SinFFT (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_sinfft (@code{HMDT} dat, @code{const char *}dir) @end ifclear Do Sine transform of the data in given direction or directions. The Sine transform is @math{\sum a_j \sin(k j)} (see @uref{http://en.wikipedia.org/wiki/Discrete_sine_transform#DST-I}). @end deftypefn @anchor{cosfft} @deftypefn {MGL command} {} cosfft dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} CosFFT (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_cosfft (@code{HMDT} dat, @code{const char *}dir) @end ifclear Do Cosine transform of the data in given direction or directions. The Cosine transform is @math{\sum a_j \cos(k j)} (see @uref{http://en.wikipedia.org/wiki/Discrete_cosine_transform#DCT-I}). @end deftypefn @ifclear UDAV @deftypefn {Method on @code{mglDataC}} @code{void} FFT (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_fft (@code{HADT} dat, @code{const char *}dir) Do Fourier transform of the data in given direction or directions. If @var{dir} contain @samp{i} then inverse Fourier is used. The Fourier transform is @math{\sum a_j \exp(i k j)} (see @uref{http://en.wikipedia.org/wiki/Discrete_Fourier_transform}). @end deftypefn @end ifclear @anchor{hankel} @deftypefn {MGL command} {} hankel dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Hankel (@code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} Hankel (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_hankel (@code{HMDT} dat, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_hankel (@code{HADT} dat, @code{const char *}dir) @end ifclear Do Hankel transform of the data in given direction or directions. The Hankel transform is @math{\sum a_j J_0(k j)} (see @uref{http://en.wikipedia.org/wiki/Hankel_transform}). @end deftypefn @anchor{wavelet} @deftypefn {MGL command} {} wavelet dat 'dir' @code{k} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Wavelet (@code{const char *}dir, @code{int} k) @deftypefnx {C function} @code{void} mgl_data_wavelet (@code{HMDT} dat, @code{const char *}dir, @code{int} k) @end ifclear Apply wavelet transform of the data in given direction or directions. Parameter @var{dir} set the kind of wavelet transform: @samp{d} for daubechies, @samp{D} for centered daubechies, @samp{h} for haar, @samp{H} for centered haar, @samp{b} for bspline, @samp{B} for centered bspline. If string @var{dir} contain symbol @samp{i} then inverse wavelet transform is applied. Parameter @var{k} set the size of wavelet transform. @end deftypefn @anchor{swap} @deftypefn {MGL command} {} swap dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Swap (@code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} Swap (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_swap (@code{HADT} dat, @code{const char *}dir) @end ifclear Swaps the left and right part of the data in given direction (useful for Fourier spectrum). @end deftypefn @anchor{roll} @deftypefn {MGL command} {} roll dat 'dir' num @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Roll (@code{char} dir, @code{num}) @deftypefnx {Method on @code{mglDataC}} @code{void} Roll (@code{char} dir, @code{num}) @deftypefnx {C function} @code{void} mgl_data_roll (@code{HMDT} dat, @code{char} dir, @code{num}) @deftypefnx {C function} @code{void} mgl_datac_roll (@code{HADT} dat, @code{char} dir, @code{num}) @end ifclear Rolls the data along direction @var{dir}. Resulting array will be out[i] = ini[(i+@var{num})%nx] if @code{dir='x'}. @end deftypefn @anchor{mirror} @deftypefn {MGL command} {} mirror dat 'dir' @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Mirror (@code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} Mirror (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_mirror (@code{HADT} dat, @code{const char *}dir) @end ifclear Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}. Note, that the similar effect in graphics you can reach by using options (@pxref{Command options}), for example, @code{surf dat; xrange 1 -1}. @end deftypefn @anchor{sew} @deftypefn {MGL command} {} sew dat ['dir'='xyz' @code{da=2*pi}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Sew (@code{const char *}dir, @code{mreal} da=@code{2*M_PI}) @deftypefnx {C function} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{mreal} da) @end ifclear Remove value steps (like phase jumps after inverse trigonometric functions) with period @var{da} in given direction. @end deftypefn @anchor{smooth} @deftypefn {MGL command} {} smooth data ['dir'='xyz'] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Smooth (@code{const char *}dir=@code{"xyz"}, @code{mreal} delta=@code{0}) @deftypefnx {Method on @code{mglDataC}} @code{void} Smooth (@code{const char *}dir=@code{"xyz"}, @code{mreal} delta=@code{0}) @deftypefnx {C function} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{const char *}dir, @code{mreal} delta) @deftypefnx {C function} @code{void} mgl_datac_smooth (@code{HADT} dat, @code{const char *}dir, @code{mreal} delta) @end ifclear Smooths the data on specified direction or directions. String @var{dirs} specifies the dimensions which will be smoothed. It may contain characters: @itemize @bullet @item @samp{xyz} for smoothing along x-,y-,z-directions correspondingly, @item @samp{0} does nothing, @item @samp{3} for linear averaging over 3 points, @item @samp{5} for linear averaging over 5 points, @item @samp{d1}...@samp{d9} for linear averaging over (2*N+1)-th points. @end itemize By default quadratic averaging over 5 points is used. @end deftypefn @anchor{envelop} @deftypefn {MGL command} {} envelop dat ['dir'='x'] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Envelop (@code{char} dir=@code{'x'}) @deftypefnx {C function} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir) @end ifclear Find envelop for data values along direction @var{dir}. @end deftypefn @anchor{diffract} @deftypefn {MGL command} {} diffract dat 'how' @code{q} @ifclear UDAV @deftypefnx {Method on @code{mglDataC}} @code{void} Diffraction (@code{const char *}how, @code{mreal} q) @deftypefnx {C function} @code{void} mgl_datac_diffr (@code{HADT} dat, @code{const char *}how, @code{mreal} q) @end ifclear Calculates one step of diffraction by finite-difference method with parameter @var{q}=@math{\delta t/\delta x^2} using method with 3-d order of accuracy. Parameter @var{how} may contain: @itemize @bullet @item @samp{xyz} for calculations along x-,y-,z-directions correspondingly; @item @samp{r} for using axial symmetric Laplace operator for x-direction; @item @samp{0} for zero boundary conditions; @item @samp{1} for constant boundary conditions; @item @samp{2} for linear boundary conditions; @item @samp{3} for parabolic boundary conditions; @item @samp{4} for exponential boundary conditions; @item @samp{5} for gaussian boundary conditions. @end itemize @end deftypefn @anchor{norm} @deftypefn {MGL command} {} norm dat @code{v1 v2 [sym=off dim=0]} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Norm (@code{mreal} v1=@code{0}, @code{mreal} v2=@code{1}, @code{bool} sym=@code{false}, @code{long} dim=@code{0}) @deftypefnx {C function} @code{void} mgl_data_norm (@code{HMDT} dat, @code{mreal} v1, @code{mreal} v2, @code{int} sym, @code{long} dim) @end ifclear Normalizes the data to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}. @end deftypefn @anchor{normsl} @deftypefn {MGL command} {} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} NormSl (@code{mreal} v1=@code{0}, @code{mreal} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep=@code{true}, @code{bool} sym=@code{false}) @deftypefnx {C function} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{mreal} v1, @code{mreal} v2, @code{char} dir, @code{int} keep, @code{int} sym) @end ifclear Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep} is set then maximal value of k-th slice will be limited by @iftex @math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}. @end iftex @ifnottex @math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}. @end ifnottex @end deftypefn @anchor{limit} @deftypefn {MGL command} {} limit dat @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} Limit (@code{mreal} val) @deftypefnx {Method on @code{mglDataC}} @code{void} Limit (@code{mreal} val) @deftypefnx {C function} @code{void} mgl_data_limit (@code{HMDT} dat, @code{mreal} val) @deftypefnx {C function} @code{void} mgl_datac_limit (@code{HADT} dat, @code{mreal} val) @end ifclear Limits the data values to be inside the range [-@var{val},@var{val}], keeping the original sign of the value (phase for complex numbers). This is equivalent to operation @code{a[i] *= abs(a[i])a[0]}). @end deftypefn @c ------------------------------------------------------------------ @external{} @node Operators, Global functions, Data information, Data processing @section Operators @nav{} @deftypefn {MGL command} {} copy @sc{dat} dat2 ['eq'=''] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} operator= (@code{const mglDataA &}d) @end ifclear Copies data from other variable. @end deftypefn @deftypefn {MGL command} {} copy dat @code{val} @ifclear UDAV @deftypefnx {Method on @code{mreal}} @code{void} operator= (@code{mreal} val) @end ifclear Set all data values equal to @var{val}. @end deftypefn @anchor{multo} @deftypefn {MGL command} {} multo dat dat2 @deftypefnx {MGL command} {} multo dat @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} operator*= (@code{const mglDataA &}d) @deftypefnx {Method on @code{mglData}} @code{void} operator*= (@code{mreal} d) @deftypefnx {C function} @code{void} mgl_data_mul_dat (@code{HMDT} dat, @code{HCDT} d) @deftypefnx {C function} @code{void} mgl_data_mul_num (@code{HMDT} dat, @code{mreal} d) @end ifclear Multiplies data element by the other one or by value. @end deftypefn @anchor{divto} @deftypefn {MGL command} {} divto dat dat2 @deftypefnx {MGL command} {} divto dat @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} operator/= (@code{const mglDataA &}d) @deftypefnx {Method on @code{mglData}} @code{void} operator/= (@code{mreal} d) @deftypefnx {C function} @code{void} mgl_data_div_dat (@code{HMDT} dat, @code{HCDT} d) @deftypefnx {C function} @code{void} mgl_data_div_num (@code{HMDT} dat, @code{mreal} d) @end ifclear Divides each data element by the other one or by value. @end deftypefn @anchor{addto} @deftypefn {MGL command} {} addto dat dat2 @deftypefnx {MGL command} {} addto dat @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} operator+= (@code{const mglDataA &}d) @deftypefnx {Method on @code{mglData}} @code{void} operator+= (@code{mreal} d) @deftypefnx {C function} @code{void} mgl_data_add_dat (@code{HMDT} dat, @code{HCDT} d) @deftypefnx {C function} @code{void} mgl_data_add_num (@code{HMDT} dat, @code{mreal} d) @end ifclear Adds to each data element the other one or the value. @end deftypefn @anchor{subto} @deftypefn {MGL command} {} subto dat dat2 @deftypefnx {MGL command} {} subto dat @code{val} @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} operator-= (@code{const mglDataA &}d) @deftypefnx {Method on @code{mglData}} @code{void} operator-= (@code{mreal} d) @deftypefnx {C function} @code{void} mgl_data_sub_dat (@code{HMDT} dat, @code{HCDT} d) @deftypefnx {C function} @code{void} mgl_data_sub_num (@code{HMDT} dat, @code{mreal} d) @end ifclear Subtracts from each data element the other one or the value. @end deftypefn @ifclear UDAV @deftypefn {Library Function} mglData operator+ (@code{const mglDataA &}a, @code{const mglDataA &}b) @deftypefnx {Library Function} mglData operator+ (@code{mreal} a, @code{const mglDataA &}b) @deftypefnx {Library Function} mglData operator+ (@code{const mglDataA &}a, @code{mreal} b) Adds the other data or the number. @end deftypefn @deftypefn {Library Function} mglData operator- (@code{const mglDataA &}a, @code{const mglDataA &}b) @deftypefnx {Library Function} mglData operator- (@code{mreal} a, @code{const mglDataA &}b) @deftypefnx {Library Function} mglData operator- (@code{const mglDataA &}a, @code{mreal} b) Subtracts the other data or the number. @end deftypefn @deftypefn {Library Function} mglData operator* (@code{const mglDataA &}a, @code{const mglDataA &}b) @deftypefnx {Library Function} mglData operator* (@code{mreal} a, @code{const mglDataA &}b) @deftypefnx {Library Function} mglData operator* (@code{const mglDataA &}a, @code{mreal} b) Multiplies by the other data or the number. @end deftypefn @deftypefn {Library Function} mglData operator/ (@code{const mglDataA &}a, @code{const mglDataA &}b) @deftypefnx {Library Function} mglData operator/ (@code{const mglDataA &}a, @code{mreal} b) Divides by the other data or the number. @end deftypefn @end ifclear @c ------------------------------------------------------------------ @external{} @node Global functions, Evaluate expression, Operators, Data processing @section Global functions @nav{} @ifclear UDAV These functions are not methods of @code{mglData} class. However it provide additional functionality to handle data. So I put it in this chapter. @end ifclear @anchor{transform} @deftypefn {MGL command} {} transform @sc{dat} 'type' real imag @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglTransform (@code{const mglDataA &}real, @code{const mglDataA &}imag, @code{const char *}type) @deftypefnx {C function} @code{HMDT} mgl_transform (@code{HCDT} real, @code{HCDT} imag, @code{const char *}type) @end ifclear Does integral transformation of complex data @var{real}, @var{imag} on specified direction. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{s} is Sine transform, @samp{c} is Cosine transform, @samp{h} is Hankel transform, @samp{n} or @samp{ } is no transformation. @end deftypefn @anchor{transforma} @deftypefn {MGL command} {} transforma @sc{dat} 'type' ampl phase @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglTransformA @code{const mglDataA &}ampl, @code{const mglDataA &}phase, @code{const char *}type) @deftypefnx {C function} @code{HMDT} mgl_transform_a @code{HCDT} ampl, @code{HCDT} phase, @code{const char *}type) @end ifclear The same as previous but with specified amplitude @var{ampl} and phase @var{phase} of complex numbers. @end deftypefn @anchor{fourier} @deftypefn {MGL command} {} fourier reDat imDat 'dir' @deftypefnx {MGL command} {} fourier complexDat 'dir' @ifclear UDAV @deftypefnx {Global function} @code{void} mglFourier @code{const mglDataA &}re, @code{const mglDataA &}im, @code{const char *}dir) @deftypefnx {Method on @code{mglDataC}} @code{void} FFT (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_fourier @code{HCDT} re, @code{HCDT} im, @code{const char *}dir) @deftypefnx {C function} @code{void} mgl_datac_fft (@code{HADT} dat, @code{const char *}dir) @end ifclear Does Fourier transform of complex data @var{re}+i*@var{im} in directions @var{dir}. Result is placed back into @var{re} and @var{im} data arrays. If @var{dir} contain @samp{i} then inverse Fourier is used. @end deftypefn @anchor{stfad} @deftypefn {MGL command} {} stfad @sc{res} real imag @code{dn} ['dir'='x'] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglSTFA (@code{const mglDataA &}real, @code{const mglDataA &}imag, @code{int} dn, @code{char} dir=@code{'x'}) @deftypefnx {C function} @code{HMDT} mgl_data_stfa (@code{HCDT} real, @code{HCDT} imag, @code{int} dn, @code{char} dir) @end ifclear Short time Fourier transformation for real and imaginary parts. Output is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. @end deftypefn @anchor{tridmat} @deftypefn {MGL command} {} tridmat @sc{res adat bdat cdat ddat} 'how' @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglTridMat (@code{const mglDataA &}A, @code{const mglDataA &}B, @code{const mglDataA &}C, @code{const mglDataA &}D, @code{const char *}how) @deftypefnx {Global function} @code{mglDataC} mglTridMatC (@code{const mglDataA &}A, @code{const mglDataA &}B, @code{const mglDataA &}C, @code{const mglDataA &}D, @code{const char *}how) @deftypefnx {C function} @code{HMDT} mgl_data_tridmat (@code{HCDT} A, @code{HCDT} B, @code{HCDT} C, @code{HCDT} D, @code{const char*}how) @deftypefnx {C function} @code{HADT} mgl_datac_tridmat (@code{HCDT} A, @code{HCDT} B, @code{HCDT} C, @code{HCDT} D, @code{const char*}how) @end ifclear Get array as solution of tridiagonal system of equations @var{A}[i]*x[i-1]+@var{B}[i]*x[i]+@var{C}[i]*x[i+1]=@var{D}[i]. String @var{how} may contain: @itemize @bullet @item @samp{xyz} for solving along x-,y-,z-directions correspondingly; @item @samp{h} for solving along hexagonal direction at x-y plain (require square matrix); @item @samp{c} for using periodical boundary conditions; @item @samp{d} for for diffraction/diffuse calculation (i.e. for using -@var{A}[i]*@var{D}[i-1]+(2-@var{B}[i])*@var{D}[i]-@var{C}[i]*@var{D}[i+1] at right part instead of @var{D}[i]). @end itemize Data dimensions of arrays @var{A}, @var{B}, @var{C} should be equal. Also their dimensions need to be equal to all or to minor dimension(s) of array @var{D}. @sref{PDE solving hints} @end deftypefn @anchor{pde} @deftypefn {MGL command} {} pde @sc{res} 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglPDE (@code{HMGL} gr, @code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{mreal} dz=@code{0.1}, @code{mreal} k0=@code{100}, @code{const char *}opt=@code{""}) @deftypefnx {Global function} @code{mglDataC} mglPDEc (@code{HMGL} gr, @code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{mreal} dz=@code{0.1}, @code{mreal} k0=@code{100}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{mreal} dz, @code{mreal} k0, @code{const char *}opt) @deftypefnx {C function} @code{HADT} mgl_pde_solve_c (@code{HMGL} gr, @code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{mreal} dz, @code{mreal} k0, @code{const char *}opt) @end ifclear Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}. See also @ref{apde}, @ref{qo2d}, @ref{qo3d}. @sref{PDE solving hints} @end deftypefn @anchor{apde} @deftypefn {MGL command} {} apde @sc{res} 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglAPDE (@code{HMGL} gr, @code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{mreal} dz=@code{0.1}, @code{mreal} k0=@code{100}, @code{const char *}opt=@code{""}) @deftypefnx {Global function} @code{mglDataC} mglAPDEc (@code{HMGL} gr, @code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{mreal} dz=@code{0.1}, @code{mreal} k0=@code{100}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{HMDT} mgl_pde_solve_adv (@code{HMGL} gr, @code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{mreal} dz, @code{mreal} k0, @code{const char *}opt) @deftypefnx {C function} @code{HADT} mgl_pde_solve_adv_c (@code{HMGL} gr, @code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{mreal} dz, @code{mreal} k0, @code{const char *}opt) @end ifclear Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. The advanced and rather slow algorithm is used for taking into account both spatial dispersion and inhomogeneities of media [see A.A. Balakin, E.D. Gospodchikov, A.G. Shalashov, JETP letters v.104, p.690-695 (2016)]. Variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}. See also @ref{pde}. @sref{PDE solving hints} @end deftypefn @anchor{ray} @deftypefn {MGL command} {} ray @sc{res} 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]} @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglRay (@code{const char *}ham, @code{mglPoint} r0, @code{mglPoint} p0, @code{mreal} dt=@code{0.1}, @code{mreal} tmax=@code{10}) @deftypefnx {C function} @code{HMDT} mgl_ray_trace (@code{const char *}ham, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} px, @code{mreal} py, @code{mreal} pz, @code{mreal} dt, @code{mreal} tmax) @end ifclear Solves GO ray equation like dr/dt = d @var{ham}/dp, dp/dt = -d @var{ham}/dr. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @var{r0}, @var{p0}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. @end deftypefn @anchor{ode} @deftypefn {MGL command} {} ode @sc{res} 'df' 'var' ini [@code{dt=0.1 tmax=10}] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglODE (@code{const char *}df, @code{const char *}var, @code{const mglDataA &}ini, @code{mreal} dt=@code{0.1}, @code{mreal} tmax=@code{10}) @deftypefnx {Global function} @code{mglDataC} mglODEc (@code{const char *}df, @code{const char *}var, @code{const mglDataA &}ini, @code{mreal} dt=@code{0.1}, @code{mreal} tmax=@code{10}) @deftypefnx {C function} @code{HMDT} mgl_ode_solve_str (@code{const char *}df, @code{const char *}var, @code{HCDT} ini, @code{mreal} dt, @code{mreal} tmax) @deftypefnx {C function} @code{HADT} mgl_ode_solve_str_c (@code{const char *}df, @code{const char *}var, @code{HCDT} ini, @code{mreal} dt, @code{mreal} tmax) @deftypefnx {C function} @code{HMDT} mgl_ode_solve (@code{void (*}df@code{)(const mreal *x, mreal *dx, void *par)}, @code{int} n, @code{const mreal *}ini, @code{mreal} dt, @code{mreal} tmax) @deftypefnx {C function} @code{HMDT} mgl_ode_solve_ex (@code{void (*}df@code{)(const mreal *x, mreal *dx, void *par)}, @code{int} n, @code{const mreal *}ini, @code{mreal} dt, @code{mreal} tmax, @code{void (*}bord@code{)(mreal *x, const mreal *xprev, void *par)}) @end ifclear Solves ODE equations dx/dt = df(x). The functions @var{df} can be specified as string of ';'-separated textual formulas (argument @var{var} set the character ids of variables x[i]) or as callback function, which fill @code{dx} array for give @code{x}'s. Parameters @var{ini}, @var{dt}, @var{tmax} set initial values, time step and maximal time of the calculation. Result is data array with dimensions @{@var{n} * int(@var{tmax}/@var{dt}+1)@}. @end deftypefn @anchor{qo2d} @deftypefn {MGL command} {} qo2d @sc{res} 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx yy] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {Global function} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mglData &}xx, @code{mglData &}yy, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {Global function} @code{mglDataC} mglQO2dc (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {Global function} @code{mglDataC} mglQO2dc (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mglData &}xx, @code{mglData &}yy, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {C function} @code{HMDT} mgl_qo2d_solve (@code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy) @deftypefnx {C function} @code{HADT} mgl_qo2d_solve_c (@code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy) @deftypefnx {C function} @code{HMDT} mgl_qo2d_func (@code{dual (*}ham@code{)(mreal u, mreal x, mreal y, mreal px, mreal py, void *par)}, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy) @deftypefnx {C function} @code{HADT} mgl_qo2d_func_c (@code{dual (*}ham@code{)(mreal u, mreal x, mreal y, mreal px, mreal py, void *par)}, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy) @end ifclear Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @ref{ray} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. See also @ref{pde}, @ref{qo3d}. @sref{PDE solving hints} @end deftypefn @anchor{qo3d} @deftypefn {MGL command} {} qo3d @sc{res} 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx yy zz] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglQO3d (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {Global function} @code{mglData} mglQO3d (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mglData &}xx, @code{mglData &}yy, @code{mglData &}zz, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {Global function} @code{mglDataC} mglQO3dc (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {Global function} @code{mglDataC} mglQO3dc (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{const mglDataA &}ray, @code{mglData &}xx, @code{mglData &}yy, @code{mglData &}zz, @code{mreal} r=@code{1}, @code{mreal} k0=@code{100}) @deftypefnx {C function} @code{HMDT} mgl_qo3d_solve (@code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy, @code{HMDT} zz) @deftypefnx {C function} @code{HADT} mgl_qo3d_solve_c (@code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy, @code{HMDT} zz) @deftypefnx {C function} @code{HMDT} mgl_qo3d_func (@code{dual (*}ham@code{)(mreal u, mreal x, mreal y, mreal z, mreal px, mreal py, mreal pz, void *par)}, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy, @code{HMDT} zz) @deftypefnx {C function} @code{HADT} mgl_qo3d_func_c (@code{dual (*}ham@code{)(mreal u, mreal x, mreal y, mreal z, mreal px, mreal py, mreal pz, void *par)}, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{HCDT} ray, @code{mreal} r, @code{mreal} k0, @code{HMDT} xx, @code{HMDT} yy, @code{HMDT} zz) @end ifclear Solves equation du/dt = i*k0*@var{ham}(p,q,v,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy, v=-i/k0*d/dz are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @ref{ray} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} and @var{zz} are non-zero then Cartesian coordinates for each point will be written into them. See also @ref{pde}, @ref{qo2d}. @sref{PDE solving hints} @end deftypefn @anchor{jacobian} @deftypefn {MGL command} {} jacobian @sc{res} xdat ydat [zdat] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglJacobian (@code{const mglDataA &}x, @code{const mglDataA &}y) @deftypefnx {Global function} @code{mglData} mglJacobian (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z) @deftypefnx {C function} @code{HMDT} mgl_jacobian_2d (@code{HCDT} x, @code{HCDT} y) @deftypefnx {C function} @code{HMDT} mgl_jacobian_3d (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z) @end ifclear Computes the Jacobian for transformation @{i,j,k@} to @{@var{x},@var{y},@var{z}@} where initial coordinates @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{x},@var{y},@var{z}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{x},@var{y},@var{z}@} are specified or 2D if only 2 arrays @{@var{x},@var{y}@} are specified. @end deftypefn @anchor{triangulation} @deftypefn {MGL command} {} triangulation @sc{res} xdat ydat @c @deftypefn {MGL command} {} triangulation @sc{res} xdat ydat [zdat] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglTriangulation (@code{const mglDataA &}x, @code{const mglDataA &}y) @c @deftypefnx {Global function} @code{mglData} mglTriangulation (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z) @deftypefnx {C function} @code{HMDT} mgl_triangulation_2d (@code{HCDT} x, @code{HCDT} y) @c @deftypefnx {C function} @code{HMDT} mgl_triangulation_3d (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z) @end ifclear Computes triangulation for arbitrary placed points with coordinates @{@var{x},@var{y}@} (i.e. finds triangles which connect points). MathGL use @uref{http://www.s-hull.org/,s-hull} code for triangulation. The sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx}. Resulting array can be used in @ref{triplot} or @ref{tricont} functions for visualization of reconstructed surface. @sref{Making regular data} @end deftypefn @ifclear UDAV @deftypefn {Global function} @code{mglData} mglGSplineInit (@code{const mglDataA &}x, @code{const mglDataA &}y) @deftypefnx {Global function} @code{mglDataC} mglGSplineCInit (@code{const mglDataA &}x, @code{const mglDataA &}y) @deftypefnx {C function} @code{HMDT} mgl_gspline_init (@code{HCDT} x, @code{HCDT} y) @deftypefnx {C function} @code{HADT} mgl_gsplinec_init (@code{HCDT} x, @code{HCDT} y) Prepare coefficients for global cubic spline interpolation. @end deftypefn @deftypefn {Global function} @code{mreal} mglGSpline (@code{const mglDataA &}coef, @code{mreal} dx, @code{mreal *}d1=@code{0}, @code{mreal *}d2=@code{0}) @deftypefnx {Global function} @code{dual} mglGSplineC (@code{const mglDataA &}coef, @code{mreal} dx, @code{dual *}d1=@code{0}, @code{dual *}d2=@code{0}) @deftypefnx {C function} @code{mreal} mgl_gspline (@code{HCDT} coef, @code{mreal} dx, @code{mreal *}d1, @code{mreal *}d2) @deftypefnx {C function} @code{dual} mgl_gsplinec (@code{HCDT} coef, @code{mreal} dx, @code{dual *}d1, @code{dual *}d2) Evaluate global cubic spline (and its 1st and 2nd derivatives @var{d1}, @var{d2} if they are not @code{NULL}) using prepared coefficients @var{coef} at point @var{dx}+@var{x0} (where @var{x0} is 1st element of data @var{x} provided to @code{mglGSpline*Init()} function). @end deftypefn @end ifclear @anchor{ifs2d} @deftypefn {MGL command} {} ifs2d @sc{res} dat @code{num} [@code{skip=20}] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglIFS2d (@code{const mglDataA &}dat, @code{long} num, @code{long} skip=@code{20}) @deftypefnx {C function} @code{HMDT} mgl_data_ifs_2d (@code{HCDT} dat, @code{long} num, @code{long} skip) @end ifclear Computes @var{num} points @{x[i]=res[0,i], y[i]=res[1,i]@} for fractal using iterated function system. Matrix @var{dat} is used for generation according the formulas @verbatim x[i+1] = dat[0,i]*x[i] + dat[1,i]*y[i] + dat[4,i]; y[i+1] = dat[2,i]*x[i] + dat[3,i]*y[i] + dat[5,i]; @end verbatim Value @code{dat[6,i]} is used as weight factor for i-th row of matrix @var{dat}. At this first @var{skip} iterations will be omitted. Data array @var{dat} must have x-size greater or equal to 7. @sref{Fractal sample} @end deftypefn @anchor{ifs3d} @deftypefn {MGL command} {} ifs3d @sc{res} dat @code{num} [@code{skip=20}] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglIFS3d (@code{const mglDataA &}dat, @code{long} num, @code{long} skip=@code{20}) @deftypefnx {C function} @code{HMDT} mgl_data_ifs_3d (@code{HCDT} dat, @code{long} num, @code{long} skip) @end ifclear Computes @var{num} points @{x[i]=res[0,i], y[i]=res[1,i], z[i]=res[2,i]@} for fractal using iterated function system. Matrix @var{dat} is used for generation according the formulas @verbatim x[i+1] = dat[0,i]*x[i] + dat[1,i]*y[i] + dat[2,i]*z[i] + dat[9,i]; y[i+1] = dat[3,i]*x[i] + dat[4,i]*y[i] + dat[5,i]*z[i] + dat[10,i]; z[i+1] = dat[6,i]*x[i] + dat[7,i]*y[i] + dat[8,i]*z[i] + dat[11,i]; @end verbatim Value @code{dat[12,i]} is used as weight factor for i-th row of matrix @var{dat}. At this first @var{skip} iterations will be omitted. Data array @var{dat} must have x-size greater or equal to 13. @sref{Fractal sample} @end deftypefn @anchor{ifsfile} @deftypefn {MGL command} {} ifsfile @sc{res} 'fname' 'name' @code{num} [@code{skip=20}] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglIFSfile (@code{const char *}fname, @code{const char *}name, @code{long} num, @code{long} skip=@code{20}) @deftypefnx {C function} @code{HMDT} mgl_data_ifs_file (@code{const char *}fname, @code{const char *}name, @code{long} num, @code{long} skip) @end ifclear Reads parameters of IFS fractal named @var{name} from file @var{fname} and computes @var{num} points for this fractal. At this first @var{skip} iterations will be omitted. See also @ref{ifs2d}, @ref{ifs3d}. IFS file may contain several records. Each record contain the name of fractal (@samp{binary} in the example below) and the body of fractal, which is enclosed in curly braces @{@}. Symbol @samp{;} start the comment. If the name of fractal contain @samp{(3D)} or @samp{(3d)} then the 3d IFS fractal is specified. The sample below contain two fractals: @samp{binary} -- usual 2d fractal, and @samp{3dfern (3D)} -- 3d fractal. @verbatim binary { ; comment allowed here ; and here .5 .0 .0 .5 -2.563477 -0.000003 .333333 ; also comment allowed here .5 .0 .0 .5 2.436544 -0.000003 .333333 .0 -.5 .5 .0 4.873085 7.563492 .333333 } 3dfern (3D) { .00 .00 0 .0 .18 .0 0 0.0 0.00 0 0.0 0 .01 .85 .00 0 .0 .85 .1 0 -0.1 0.85 0 1.6 0 .85 .20 -.20 0 .2 .20 .0 0 0.0 0.30 0 0.8 0 .07 -.20 .20 0 .2 .20 .0 0 0.0 0.30 0 0.8 0 .07 } @end verbatim @end deftypefn @anchor{flame2d} @deftypefn {MGL command} {} flame2d @sc{res} dat func @code{num} [@code{skip=20}] @ifclear UDAV @deftypefnx {Global function} @code{mglData} mglFlame2d (@code{const mglDataA &}dat, @code{const mglDataA &}func, @code{long} num, @code{long} skip=@code{20}) @deftypefnx {C function} @code{HMDT} mgl_data_flame_2d (@code{HCDT} dat, @code{HCDT} func, @code{long} num, @code{long} skip) @end ifclear Computes @var{num} points @{x[i]=res[0,i], y[i]=res[1,i]@} for "flame" fractal using iterated function system. Array @var{func} define "flame" function identificator (@var{func}[0,i,j]), its weight (@var{func}[0,i,j]) and arguments (@var{func}[2 ... 5,i,j]). Matrix @var{dat} set linear transformation of coordinates before applying the function. The resulting coordinates are @verbatim xx = dat[0,i]*x[j] + dat[1,j]*y[i] + dat[4,j]; yy = dat[2,i]*x[j] + dat[3,j]*y[i] + dat[5,j]; x[j+1] = sum_i @var{func}[1,i,j]*@var{func}[0,i,j]_x(xx, yy; @var{func}[2,i,j],...,@var{func}[5,i,j]); y[j+1] = sum_i @var{func}[1,i,j]*@var{func}[0,i,j]_y(xx, yy; @var{func}[2,i,j],...,@var{func}[5,i,j]); @end verbatim The possible function ids are: @code{mglFlame2d_linear=0, mglFlame2d_sinusoidal, mglFlame2d_spherical, mglFlame2d_swirl, mglFlame2d_horseshoe, mglFlame2d_polar, mglFlame2d_handkerchief,mglFlame2d_heart, mglFlame2d_disc, mglFlame2d_spiral, mglFlame2d_hyperbolic, mglFlame2d_diamond, mglFlame2d_ex, mglFlame2d_julia, mglFlame2d_bent, mglFlame2d_waves, mglFlame2d_fisheye, mglFlame2d_popcorn, mglFlame2d_exponential, mglFlame2d_power, mglFlame2d_cosine, mglFlame2d_rings, mglFlame2d_fan, mglFlame2d_blob, mglFlame2d_pdj, mglFlame2d_fan2, mglFlame2d_rings2, mglFlame2d_eyefish, mglFlame2d_bubble, mglFlame2d_cylinder, mglFlame2d_perspective, mglFlame2d_noise, mglFlame2d_juliaN, mglFlame2d_juliaScope, mglFlame2d_blur, mglFlame2d_gaussian, mglFlame2d_radialBlur, mglFlame2d_pie, mglFlame2d_ngon, mglFlame2d_curl, mglFlame2d_rectangles, mglFlame2d_arch, mglFlame2d_tangent, mglFlame2d_square, mglFlame2d_blade, mglFlame2d_secant, mglFlame2d_rays, mglFlame2d_twintrian, mglFlame2d_cross, mglFlame2d_disc2, mglFlame2d_supershape, mglFlame2d_flower, mglFlame2d_conic, mglFlame2d_parabola, mglFlame2d_bent2, mglFlame2d_bipolar, mglFlame2d_boarders, mglFlame2d_butterfly, mglFlame2d_cell, mglFlame2d_cpow, mglFlame2d_curve, mglFlame2d_edisc, mglFlame2d_elliptic, mglFlame2d_escher, mglFlame2d_foci, mglFlame2d_lazySusan, mglFlame2d_loonie, mglFlame2d_preBlur, mglFlame2d_modulus, mglFlame2d_oscope, mglFlame2d_polar2, mglFlame2d_popcorn2, mglFlame2d_scry, mglFlame2d_separation, mglFlame2d_split, mglFlame2d_splits, mglFlame2d_stripes, mglFlame2d_wedge, mglFlame2d_wedgeJulia, mglFlame2d_wedgeSph, mglFlame2d_whorl, mglFlame2d_waves2, mglFlame2d_exp, mglFlame2d_log, mglFlame2d_sin, mglFlame2d_cos, mglFlame2d_tan, mglFlame2d_sec, mglFlame2d_csc, mglFlame2d_cot, mglFlame2d_sinh, mglFlame2d_cosh, mglFlame2d_tanh, mglFlame2d_sech, mglFlame2d_csch, mglFlame2d_coth, mglFlame2d_auger, mglFlame2d_flux.} Value @code{dat[6,i]} is used as weight factor for i-th row of matrix @var{dat}. At this first @var{skip} iterations will be omitted. Sizes of data arrays must be: @var{dat}.nx>=7, @var{func}.nx>=2 and @var{func}.nz=@var{dat}.ny. @sref{Fractal sample} @end deftypefn @c ------------------------------------------------------------------ @external{} @node Evaluate expression, Special data classes, Global functions, Data processing @section Evaluate expression @nav{} @ifset UDAV You can use arbitrary formulas of existed data arrays or constants as any argument of data processing or data plotting commands. There are only 2 limitations: formula shouldn't contain spaces (to be recognized as single argument), and formula cannot be used as argument which will be (re)created by MGL command. @end ifset @ifclear UDAV @cindex mglExpr @cindex mglExprC MathGL have a special classes @code{mglExpr} and @code{mglExprC} for evaluating of formula specified by the string for real and complex numbers correspondingly. These classes are defined in @code{#include } and @code{#include } correspondingly. It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. @xref{Textual formulas}. @deftypefn {Constructor on @code{mglExpr}} @code{} mglExpr (@code{const char *}expr) @deftypefnx {Constructor on @code{mglExprC}} @code{} mglExprC (@code{const char *}expr) @deftypefnx {C function} @code{HMEX} mgl_create_expr (@code{const char *}expr) @deftypefnx {C function} @code{HAEX} mgl_create_cexpr (@code{const char *}expr) Parses the formula @var{expr} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions. @end deftypefn @deftypefn {Destructor on @code{mglExpr}} @code{} ~mglExpr () @deftypefnx {Destructor on @code{mglExprC}} @code{} ~mglExprC () @deftypefnx {C function} @code{void} mgl_delete_expr (@code{HMEX} ex) @deftypefnx {C function} @code{void} mgl_delete_cexpr (@code{HAEX} ex) Deletes the instance of class mglExpr. @end deftypefn @deftypefn {Method on @code{mglExpr}} @code{mreal} Eval (@code{mreal} x, @code{mreal} y, @code{mreal} z) @deftypefnx {Method on @code{mglExprC}} @code{dual} Eval (@code{dual} x, @code{dual} y, @code{dual} z) @deftypefnx {C function} @code{mreal} mgl_expr_eval (@code{HMEX} ex, @code{mreal} x, @code{mreal} y, @code{mreal} z) @deftypefnx {C function} @code{dual} mgl_cexpr_eval (@code{HAEX} ex, @code{dual} x, @code{dual} y, @code{dual} z) Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. @end deftypefn @deftypefn {Method on @code{mglExpr}} @code{mreal} Eval (@code{mreal} var[26]) @deftypefnx {Method on @code{mglExprC}} @code{dual} Eval (@code{dual} var[26]) @deftypefnx {C function} @code{mreal} mgl_expr_eval_v (@code{HMEX} ex, @code{mreal *}var) @deftypefnx {C function} @code{dual} mgl_expr_eval_v (@code{HAEX} ex, @code{dual *}var) Evaluates the formula for variables in array @var{var}[0,...,'z'-'a']. @end deftypefn @deftypefn {Method on @code{mglExpr}} @code{mreal} Diff (@code{char} dir, @code{mreal} x, @code{mreal} y, @code{mreal} z) @deftypefnx {C function} @code{mreal} mgl_expr_diff (@code{HMEX} ex, @code{char} dir, @code{mreal} x, @code{mreal} y, @code{mreal} z) Evaluates the formula derivation respect to @var{dir} for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. @end deftypefn @deftypefn {Method on @code{mglExpr}} @code{mreal} Diff (@code{char} dir, @code{mreal} var[26]) @deftypefnx {C function} @code{mreal} mgl_expr_diff_v (@code{HMEX} ex, @code{char} dir, @code{mreal *}var) Evaluates the formula derivation respect to @var{dir} for variables in array @var{var}[0,...,'z'-'a']. @end deftypefn @end ifclear @c ------------------------------------------------------------------ @external{} @node Special data classes, , Evaluate expression, Data processing @section Special data classes @nav{} @ifset UDAV MGL use these special classes automatically. @end ifset @ifclear UDAV This section describe special data classes @code{mglDataV}, @code{mglDataF}, @code{mglDataT} and @code{mglDataR} which sometime can noticeable speed up drawing or data handling. These classes are defined in @code{#include }. Note, that all plotting and data handling routines can be done using usual @code{mglData} or @code{mglDataC} classes. Also these special classes are usable in C++ code only. @heading Class @code{mglDataV} represent variable with values equidistantly distributed in given range. @deftypefn {Constructor on @code{mglDataV}} @code{} mglDataV (@code{const mglDataV &} d) Copy constructor. @end deftypefn @deftypefn {Constructor on @code{mglDataV}} @code{} mglDataV (@code{long} nx=@code{1}, @code{long} ny=@code{1}, @code{long} nz=@code{1}, @code{mreal} v1=@code{0}, @code{mreal} v2=@code{NaN}, @code{char} dir=@code{'x'}) Create variable with "sizes" @var{nx}x@var{ny}x@var{nz} which changes from @var{v1} to @var{v2} (or is constant if @var{v2}=@code{NaN}) along @var{dir} direction. @end deftypefn @deftypefn {Method on @code{mglDataV}} @code{void} Create (@code{long} nx=@code{1}, @code{long} ny=@code{1}, @code{long} nz=@code{1}) Set "sizes" @var{nx}x@var{ny}x@var{nz}. @end deftypefn @deftypefn {Method on @code{mglDataV}} @code{void} Fill (@code{mreal} x1, @code{mreal} x2=@code{NaN}, @code{char} dir=@code{'x'}) Set ranges of the variable. @end deftypefn @deftypefn {Method on @code{mglDataV}} @code{void} Freq (@code{mreal} dp, @code{char} dir=@code{'x'}) Set as frequency variable with increment @var{dp}. @end deftypefn @heading Class @code{mglDataF} represent function which values are evaluated (instead of access to data array as in @code{mglData}). @deftypefn {Constructor on @code{mglDataF}} @code{} mglDataF (@code{const mglDataF &} d) Copy constructor. @end deftypefn @deftypefn {Constructor on @code{mglDataF}} @code{} mglDataF (@code{long} nx=@code{1}, @code{long} ny=@code{1}, @code{long} nz=@code{1}) Create variable with "sizes" @var{nx}x@var{ny}x@var{nz} with zero function. @end deftypefn @deftypefn {Method on @code{mglDataF}} @code{void} Create (@code{long} nx=@code{1}, @code{long} ny=@code{1}, @code{long} nz=@code{1}) Set "sizes" @var{nx}x@var{ny}x@var{nz}. @end deftypefn @deftypefn {Method on @code{mglDataF}} @code{void} SetRanges (@code{mglPoint} p1, @code{mglPoint} p2) Set ranges for internal x,y,z variables. @end deftypefn @deftypefn {Method on @code{mglDataF}} @code{void} SetFormula (@code{const char *}func) Set string which will be evaluated at function calls. Note this variant is about 10 times slower than @code{SetFunc}() one. @end deftypefn @deftypefn {Method on @code{mglDataF}} @code{void} SetFunc (@code{mreal (*}f@code{)(mreal x,mreal y,mreal z,void *p)}, @code{void *}p=@code{NULL}) Set pointer to function which will be used for data. @end deftypefn @heading Class @code{mglDataT} represent named reference to column of another data array. @deftypefn {Constructor on @code{mglDataT}} @code{} mglDataT (@code{const mglDataT &} d) Copy constructor. @end deftypefn @deftypefn {Constructor on @code{mglDataT}} @code{} mglDataT (@code{const mglDataA &} d, @code{long} col=@code{0}) Create variable which reference @var{col}-th column of data @var{d}. @end deftypefn @deftypefn {Method on @code{mglDataT}} @code{void} SetInd (@code{long} col, @code{wchar_t} name) @deftypefnx {Method on @code{mglDataT}} @code{void} SetInd (@code{long} col, @code{const wchar_t *} name) Set reference to another column of the same data and its name. @end deftypefn @heading Class @code{mglDataR} represent named reference to row of another data array. @deftypefn {Constructor on @code{mglDataR}} @code{} mglDataR (@code{const mglDataR &} d) Copy constructor. @end deftypefn @deftypefn {Constructor on @code{mglDataR}} @code{} mglDataR (@code{const mglDataA &} d, @code{long} row=@code{0}) Create variable which reference @var{row}-th row of data @var{d}. @end deftypefn @deftypefn {Method on @code{mglDataR}} @code{void} SetInd (@code{long} row, @code{wchar_t} name) @deftypefnx {Method on @code{mglDataR}} @code{void} SetInd (@code{long} row, @code{const wchar_t *} name) Set reference to another row of the same data and its name. @end deftypefn @heading Class @code{mglDataW} represent FFT frequency as data array. @deftypefn {Constructor on @code{mglDataW}} @code{} mglDataW (@code{const mglDataW &} d) Copy constructor. @end deftypefn @deftypefn {Constructor on @code{mglDataW}} @code{} mglDataW (@code{long} xx=@code{1}, @code{long} yy=@code{1}, @code{long} zz=@code{1}, @code{double} dp=@code{0}, @code{char} dir=@code{'x'}) Set frequency sizes, direction @var{dir} and increment @var{dp}. @end deftypefn @deftypefn {Method on @code{mglDataR}} @code{void} Freq (@code{double} dp, @code{char} dir=@code{'x'}) Equidistantly fill the data with step @var{dp} in direction @var{dir}. @end deftypefn @heading Class @code{mglDataS} incapsulate std::vector and present it as data array. @deftypecv {Variable} mglDataS @code{std::vector} dat Data array itself. @end deftypecv @deftypefn {Constructor on @code{mglDataS}} @code{} mglDataS (@code{const mglDataS &} d) Copy constructor. @end deftypefn @deftypefn {Constructor on @code{mglDataS}} @code{} mglDataS (@code{const std::vector &} d) Create copy data from @var{d}. @end deftypefn @deftypefn {Constructor on @code{mglDataS}} @code{} mglDataS (@code{size_t} s) Allocate memory for @var{s} . @end deftypefn @deftypefn {Method on @code{mglDataS}} @code{void} reserve (@code{size_t} num) Reserve space for @var{num} elements. @end deftypefn @deftypefn {Method on @code{mglDataS}} @code{void} push_back (@code{double} v) Appends value @var{v} to the end of data. @end deftypefn @end ifclear @external{} mathgl-2.4.1/texinfo/core_ru.texi0000664000175000017500000134426413134046534016606 0ustar balakinbalakin@c ------------------------------------------------------------------ @chapter Ядро MathGL @nav{} @cindex mglGraph @ifset UDAV Эта глава посвящена описанию множества команд построения графиков для 1D, 2D и 3D массивов данных. Сюда включены также команды настройки графика, вывода текста и примитивов, рисования осей координат и др. Дополнительную информацию о цвете, шрифтах, стилях линий и формулах можно найти в @ref{General concepts}. @end ifset @ifclear UDAV Основным классом MathGL является класс @strong{mglGraph}, определённый в @code{#include }. Он включает в себя множество функций для построения графиков от 1D, 2D и 3D массивов. Он также содержит функции вывода текста и построения осей координат. Есть возможность построения в произвольной системе координат, которая задается строковыми формулами. Все графические функции используют класс mglData (см. @ref{Data processing}) для хранения массивов данных. Это позволяет легко контролировать размеры, работу с памятью и производить обработку данных. Дополнительная информация о цветах, шрифтах, вычисления формул может быть найдена в @ref{General concepts} и @ref{Other classes}. @end ifclear Некоторые возможности MathGL доступны только в новых версиях библиотеки. Для проверки текущей версии MathGL можно использовать следующую функцию. @anchor{version} @deftypefn {Команда MGL} {} version 'ver' @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{bool} CheckVersion (@code{const char *}ver) static @deftypefnx {Функция С} @code{int} mgl_check_version (@code{const char *}ver) @end ifclear Возвращает нулевое значение если версия MathGL подходит для требуемой в @var{ver}, т.е. если номер основной версии совпадает и "подверсия" больше или равна указанной в @var{ver}. @end deftypefn @menu * Constructor:: * Graphics setup:: * Axis settings:: * Subplots and rotation:: * Export picture:: * Background:: * Primitives:: * Text printing:: * Axis and Colorbar:: * Legend:: * 1D plotting:: * 2D plotting:: * 3D plotting:: * Dual plotting:: * Vector fields:: * Other plotting:: * Nonlinear fitting:: * Data manipulation:: @c * IDTF functions:: @end menu @c ################################################################## @external{} @node Constructor, Graphics setup, , MathGL core @section Создание и удаление графического объекта @nav{} @ifclear UDAV @deftypefn {Конструктор класса @code{mglGraph}} {} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400}) @deftypefnx {Конструктор класса @code{mglGraph}} {} mglGraph (@code{const mglGraph &}gr) @deftypefnx {Конструктор класса @code{mglGraph}} {} mglGraph (@code{HMGL} gr) @deftypefnx {Функция С} @code{HMGL} mgl_create_graph (@code{int} width, @code{int} height) @deftypefnx {Функция С} @code{HMGL} mgl_create_graph_gl () Создает (или использует созданный) экземпляр класса, производного от @code{mglGraph} (тип @code{HMGL}) с указанными размерами @var{width} и @var{height}. Параметр @var{kind} может иметь следующие значения: @samp{0} -- использовать рисование по умолчанию, @samp{1} -- использовать рисование в OpenGL. @end deftypefn @deftypefn {Destructor on @code{mglGraph}} {} ~mglGraph () @deftypefnx {Функция С} @code{HMGL} mgl_delete_graph (@code{HMGL} gr) Удаляет экземпляр класса mglGraph. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{HMGL} Self () Возвращает указатель на используемый объект типа @code{HMGL}. @end deftypefn @end ifclear @ifset UDAV MGL не требует создания данного типа объектов. @end ifset @c ################################################################## @external{} @node Graphics setup, Axis settings, Constructor, MathGL core @section Настройка графика @nav{} @cindex Настройка MathGL Функции и переменные в этой группе влияют на вид всего рисунка. Соответственно они должны располагаться @emph{перед} вызовом функций непосредственно рисующих графики. @anchor{reset} @deftypefn {Команда MGL} {} reset @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} DefaultPlotParam () @deftypefnx {Функция С} @code{void} mgl_set_def_param (@code{HMGL} gr) @end ifclear Устанавливает все настройки по умолчанию и очищает рисунок. @end deftypefn @menu * Transparency:: * Lighting:: * Fog:: * Default sizes:: * Cutting:: * Font settings:: * Palette and colors:: * Masks:: * Error handling:: * Stop drawing:: @end menu @c ================================================================== @external{} @node Transparency, Lighting, , Graphics setup @subsection Прозрачность @nav{} @cindex Alpha @ifclear UDAV @cindex SetAlphaDef @cindex SetTranspType @end ifclear @cindex AlphaDef @cindex TranspType Эти функции и переменные настраивают тип и степень прозрачности поверхностей. Главной является функция @ref{alpha}, которая включает/выключает прозрачность для всего графика. Функция @ref{alphadef} устанавливает величину alpha-канала по умолчанию. Наконец, функция @ref{transptype} задает тип прозрачности. @sref{Transparency and lighting} @anchor{alpha} @deftypefn {Команда MGL} {} alpha @code{[val=on]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Alpha (@code{bool} enable) @deftypefnx {Функция С} @code{void} mgl_set_alpha (@code{HMGL} gr, @code{int} enable) @end ifclear Включает/выключает прозрачность и возвращает свое предыдущее состояние. По умолчанию прозрачность выключена. Функция включает прозрачность для @emph{всего} рисунка. @end deftypefn @anchor{alphadef} @deftypefn {Команда MGL} {} alphadef @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetAlphaDef (@code{mreal} val) @deftypefnx {Функция С} @code{void} mgl_set_alpha_default (@code{HMGL} gr, @code{mreal} alpha) @end ifclear Задает значение прозрачности по умолчанию для всех графиков. Значение по умолчанию 0.5. @end deftypefn @anchor{transptype} @deftypefn {Команда MGL} {} transptype @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTranspType (@code{int} type) @deftypefnx {Функция С} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} type) @end ifclear Задает тип прозрачности. Допустимые значения: @itemize @bullet @item Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. Этот режим некорректно отображается в OpenGL (mglGraphGL) для нескольких перекрывающихся поверхностей. @item "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). @item "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{SetAlphaDef(0.3)} или меньше в этом случае). @end itemize @sref{Types of transparency} @end deftypefn @c ================================================================== @external{} @node Lighting, Fog, Transparency, Graphics setup @subsection Освещение @nav{} @ifclear UDAV @cindex SetAmbient @cindex AddLight @end ifclear @cindex Light @cindex Ambient Эти функции настраивают освещение графика. Главная функция @ref{light} включает/выключает освещение графиков построенных после ее вызова (в OpenGL работает сразу для всего рисунка). MathGL поддерживает до 10 независимых источников света. Но в режиме OpenGL можно использовать только первые 8 из них. Положение, цвет, яркость каждого источника света можно задавать по отдельности. По умолчанию включен только первый (с порядковым номером @code{0}) источник света белого цвета, расположенный сверху. @sref{Lighting sample} @anchor{light} @deftypefn {Команда MGL} {} light @code{[val=on]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{bool} Light (@code{bool} enable) @deftypefnx {Функция С} @code{void} mgl_set_light (@code{HMGL} gr, @code{int} enable) @end ifclear Включает/выключает освещение графика и возвращает предыдущее состояние. По умолчанию освещение выключено. @end deftypefn @deftypefn {Команда MGL} {} light @code{num} @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Light (@code{int} n, @code{bool} enable) @deftypefnx {Функция С} @code{void} mgl_set_light_n (@code{HMGL} gr, @code{int} n, @code{int} enable) @end ifclear Включает/выключает @var{n}-ый источник света. @end deftypefn @deftypefn {Команда MGL} {} light @code{num xdir ydir zdir} ['col'='w' @code{br=0.5 ap=0}] @deftypefnx {Команда MGL} {} light @code{num xdir ydir zdir xpos ypos zpos} ['col'='w' @code{br=0.5}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{mreal} bright=@code{0.5}, @code{mreal} ap=@code{0}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} r, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{mreal} bright=@code{0.5}, @code{mreal} ap=@code{0}) @deftypefnx {Функция С} @code{void} mgl_add_light (@code{HMGL} gr, @code{int} n, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz) @deftypefnx {Функция С} @code{void} mgl_add_light_ext (@code{HMGL} gr, @code{int} n, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{char} c, @code{mreal} bright, @code{mreal} ap) @deftypefnx {Функция С} @code{void} mgl_add_light_loc (@code{HMGL} gr, @code{int} n, @code{mreal} rx, @code{mreal} ry, @code{mreal} rz, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{char} c, @code{mreal} bright, @code{mreal} ap) @end ifclear Добавляет источник света с номером @var{n} в положение @var{p} с цветом @var{c} и яркостью @var{bright}, которая должна быть в диапазоне [0,1]. Если указано положение источника @var{r} и оно не NAN, то источник считается локальным, иначе источник полагается бесконечно удалённым (для более быстрого рисования). @end deftypefn @anchor{diffuse} @deftypefn {Команда MGL} {} diffuse @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetDifLight (@code{mreal} bright) @deftypefnx {Функция С} @code{void} mgl_set_difbr (@code{HMGL} gr, @code{mreal} bright) @end ifclear Задает яркость диффузного освещения (только для локальных источников света). @end deftypefn @anchor{ambient} @deftypefn {Команда MGL} {} ambient @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetAmbient (@code{mreal} bright=@code{0.5}) @deftypefnx {Функция С} @code{void} mgl_set_ambbr (@code{HMGL} gr, @code{mreal} bright) @end ifclear Задает яркость рассеянного освещения. Значение должно быть в диапазоне [0,1]. @end deftypefn @anchor{attachlight} @deftypefn {Команда MGL} {} attachlight @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} AttachLight (@code{bool} val) @deftypefnx {Функция С} @code{void} mgl_set_attach_light (@code{HMGL} gr, @code{int} val) @end ifclear Задает привязку настроек освещения к @ref{inplot}/@ref{subplot}. Отмечу, что OpenGL и некоторые выходные форматы не поддерживают эту возможность. @end deftypefn @c ================================================================== @external{} @node Fog, Default sizes, Lighting, Graphics setup @subsection Туман @nav{} @cindex Fog @anchor{fog} @deftypefn {Команда MGL} {} fog @code{val [dz=0.25]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Fog (@code{mreal} d, @code{mreal} dz=@code{0.25}) @deftypefnx {Функция С} @code{void} mgl_set_fog (@code{HMGL} gr, @code{mreal} d, @code{mreal} dz) @end ifclear Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~ 1-exp(-@emph{d*z}). Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Adding fog} @end deftypefn @c ================================================================== @external{} @node Default sizes, Cutting, Fog, Graphics setup @subsection Базовые размеры @nav{} @ifclear UDAV @cindex SetBarWidth @cindex SetMarkSize @cindex SetArrowSize @cindex SetMeshNum @cindex SetPlotId @end ifclear @cindex BarWidth @cindex MarkSize @cindex ArrowSize @cindex MeshNum Эти функции задают величины большинства параметров графика, включая размеры маркеров, стрелок, толщину линий и т.д. Как и любые другие настройки, они подействуют только на графики созданные после изменения настроек. @anchor{barwidth} @deftypefn {Команда MGL} {} barwidth @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetBarWidth ( @code{mreal} val) @deftypefnx {Функция С} @code{void} mgl_set_bar_width (@code{HMGL} gr, @code{mreal} val) @end ifclear Задает относительный размер прямоугольников в @ref{bars}, @ref{barh}, @ref{boxplot}, @ref{candle}. Значение по умолчанию @code{0.7}. @end deftypefn @anchor{marksize} @deftypefn {Команда MGL} {} marksize @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetMarkSize (@code{mreal} val) @deftypefnx {Функция С} @code{void} mgl_set_mark_size (@code{HMGL} gr, @code{mreal} val) @end ifclear Задает размер маркеров для @ref{1D plotting}. Значение по умолчанию @code{1}. @end deftypefn @anchor{arrowsize} @deftypefn {Команда MGL} {} arrowsize @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetArrowSize (@code{mreal} val) @deftypefnx {Функция С} @code{void} mgl_set_arrow_size (@code{HMGL} gr, @code{mreal} val) @end ifclear Задает размер стрелок для @ref{1D plotting}, линий и кривых (см. @ref{Primitives}). Значение по умолчанию @code{1}. @end deftypefn @anchor{meshnum} @anchor{MeshNum} @deftypefn {Команда MGL} {} meshnum @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetMeshNum (@code{int} val) @deftypefnx {Функция С} @code{void} mgl_set_meshnum (@code{HMGL} gr, @code{int} num) @end ifclear Задает ориентировочное число линий в @ref{mesh}, @ref{fall}, и число стрелок (штрихов) в @ref{vect}, @ref{dew}, и число ячеек в @ref{cloud}, и число маркеров в @ref{plot}, @ref{tens}, @ref{step}, @ref{mark}, @ref{textmark}. По умолчанию (=0) рисуются все линии, стрелки, ячейки и т.д. @end deftypefn @anchor{facenum} @deftypefn {Команда MGL} {} facenum @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetFaceNum (@code{int} val) @deftypefnx {Функция С} @code{void} mgl_set_facenum (@code{HMGL} gr, @code{int} num) @end ifclear Задает ориентировочное число видимых граней. Может быть использована для ускорения рисования за счет более грубого рисунка. По умолчанию (=0) рисуются все грани. @end deftypefn @anchor{plotid} @deftypefn {Команда MGL} {} plotid 'id' @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetPlotId (@code{const char *}id) @deftypefnx {Функция С} @code{void} mgl_set_plotid (@code{HMGL} gr, @code{const char *}id) @end ifclear Задает имя графика для сохранения в файл (например, в окне FLTK). @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{const char *} GetPlotId () @deftypefnx {Функция С} @code{const char *} mgl_get_plotid (@code{HMGL} gr) @deftypefnx {Fortran процедура} @code{} mgl_get_plotid (@code{long} gr, @code{char *}out, @code{int} len) Возвращает имя графика для сохранения в файл (например, в окне FLTK). @end deftypefn @end ifclear @anchor{pendelta} @deftypefn {Команда MGL} {} pendelta @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetPenDelta (@code{double} val) @deftypefnx {Функция С} @code{void} mgl_pen_delta (@code{HMGL} gr, @code{double} val) @end ifclear Изменяет размытие около линий и текста (по умолчанию 1). Для @var{val}>1 текст и линии более резкие. Для @var{val}<1 текст и линии более размытые. @end deftypefn @c ================================================================== @external{} @node Cutting, Font settings, Default sizes, Graphics setup @subsection Обрезание @nav{} @ifclear UDAV @cindex SetCut @cindex SetCutBox @cindex CutOff @end ifclear @cindex Cut Эти функции задают условия когда точка будет исключена (вырезана) из рисования. Замечу, что все точки со значением(-ями) NAN по одной из координат или амплитуде автоматически исключаются из рисования. @sref{Cutting sample} @anchor{cut} @deftypefn {Команда MGL} {} cut @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetCut (@code{bool} val) @deftypefnx {Функция С} @code{void} mgl_set_cut (@code{HMGL} gr, @code{int} val) @end ifclear Задает обрезание точек за пределами осей координат. Если @code{true} то такие точки исключаются из рисования (это по умолчанию) иначе они проецируются на ограничивающий прямоугольник. @end deftypefn @deftypefn {Команда MGL} {} cut @code{x1 y1 z1 x2 y2 z2} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetCutBox (@code{mglPoint} p1, @code{mglPoint} p1) @deftypefnx {Функция С} @code{void} mgl_set_cut_box (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2) @end ifclear Задает границы параллелепипеда внутри которого точки не рисуются. Если границы одинаковы (переменные равны), то параллелепипеда считается пустым. @end deftypefn @deftypefn {Команда MGL} {} cut 'cond' @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} CutOff (@code{const char *}cond) @deftypefnx {Функция С} @code{void} mgl_set_cutoff (@code{HMGL} gr, @code{const char *}cond) @end ifclear Задает условие обрезания по формуле @var{cond}. Это условие исключает точки из рисования если результат вычисления формулы не равен нулю. Установите аргумент @code{""} для выключения условия обрезания. @end deftypefn @c ================================================================== @external{} @node Font settings, Palette and colors, Cutting, Graphics setup @subsection Шрифты @nav{} @ifclear UDAV @cindex SetFontSize @cindex SetFontDef @cindex SetRotatedText @cindex SetFontSizePT @cindex SetFontSizeCM @cindex SetFontSizeIN @cindex LoadFont @cindex CopyFont @cindex RestoreFont @end ifclear @cindex Font @cindex RotateText @anchor{font} @deftypefn {Команда MGL} {} font 'fnt' [@code{val=6}] Задает стиль и размер шрифта. Вначале используется @samp{:rC} -- прямой шрифт с выравниванием по центру. По умолчанию размер подписей оси координат в 1.4 раза больше. См. также см. @ref{Font styles}. @end deftypefn @anchor{rotatetext} @deftypefn {Команда MGL} {} rotatetext @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRotatedText (@code{bool} val) @deftypefnx {Функция С} @code{void} mgl_set_rotated_text (@code{HMGL} gr, @code{int} val) @end ifclear Включает/выключает вращение меток и подписей осей координат вдоль оси. @end deftypefn @anchor{loadfont} @deftypefn {Команда MGL} {} loadfont ['name'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} LoadFont (@code{const char *}name, @code{const char *}path=@code{""}) @deftypefnx {Функция С} @code{void} mgl_load_font (@code{HMGL} gr, @code{const char *}name, @code{const char *}path) @end ifclear Загружает начертание шрифта из файла @var{path}/@var{name}. Пустая строка загрузит шрифт по умолчанию. @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{void} SetFontDef (@code{const char *}fnt) @deftypefnx {Функция С} @code{void} mgl_set_font_def (@code{HMGL} gr, @code{const char *} val) Задает стиль шрифта (см. @ref{Text printing}). По умолчанию используется @samp{rC} -- прямой шрифт с выравниванием по центру. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetFontSize (@code{mreal} val) @deftypefnx {Функция С} @code{void} mgl_set_font_size (@code{HMGL} gr, @code{mreal} val) Задает базовый размер шрифта. По умолчанию размер подписей оси координат в 1.4 раза больше. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetFontSizePT (@code{mreal} cm, @code{int} dpi=@code{72}) Задает размер шрифта в пунктах для заданного DPI (по умолчанию 16 pt для dpi=72). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{inline void} SetFontSizeCM (@code{mreal} cm, @code{int} dpi=@code{72}) Задает размер шрифта в сантиметрах для заданного DPI (по умолчанию 0.56 см = 16 pt). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{inline void} SetFontSizeIN (@code{mreal} cm, @code{int} dpi=@code{72}) Задает размер шрифта в дюймах для заданного DPI (по умолчанию 0.22 in = 16 pt). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} CopyFont (@code{mglGraph *} from) @deftypefnx {Функция С} @code{void} mgl_copy_font (@code{HMGL} gr, @code{HMGL} gr_from) Копирует начертание шрифта из другого объекта @code{mglGraph}. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} RestoreFont () @deftypefnx {Функция С} @code{void} mgl_restore_font (@code{HMGL} gr) Восстанавливает начертание шрифта по умолчанию. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetDefFont (@code{const char *}name, @code{const char *}path=@code{""}) static @deftypefnx {Функция С} @code{void} mgl_def_font (@code{const char *}name, @code{const char *}path) Загружает начертание шрифта по умолчанию (для всех вновь создаваемых HMGL/mglGraph объектов) из файла @var{path}/@var{name}. @end deftypefn @end ifclear @c ================================================================== @external{} @node Palette and colors, Masks, Font settings, Graphics setup @subsection Палитра и цвета @nav{} @ifclear UDAV @cindex SetPalette @end ifclear @cindex Palette @anchor{palette} @deftypefn {Команда MGL} {} palette 'colors' @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetPalette (@code{const char *}colors) @deftypefnx {Функция С} @code{void} mgl_set_palette (@code{HMGL} gr, @code{const char *}colors) @end ifclear Задает палитру как последовательность цветов. Значение по умолчанию @code{"Hbgrcmyhlnqeup"}, что соответствует цветам: темно серый @samp{H}, синий @samp{b}, зелёный @samp{g}, красный @samp{r}, голубой @samp{c}, малиновый @samp{m}, жёлтый @samp{y}, серый @samp{h}, сине-зелёный @samp{l}, небесно-голубой @samp{n}, оранжевый @samp{q}, желто-зелёный @samp{e}, сине-фиолетовый @samp{u}, фиолетовый @samp{p}. Палитра в основном используется в 1D графиках (см. @ref{1D plotting}) для кривых с неопределённым стилем линии. Внутренний счетчик цвета будет сброшен при любом изменении палитры, включая скрытые (например, функциями @ref{box} или @ref{axis}). @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{void} SetDefScheme (@code{const char *}sch) @deftypefnx {Функция С} @code{void} mgl_set_def_sch (@code{HMGL} gr, @code{const char *}sch) Устанавливает @var{sch} в качестве цветовой схемы по умолчанию. Начальное значение @code{"BbcyrR"}. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetColor (@code{char} id, @code{mreal} r, @code{mreal} g, @code{mreal} b) static @deftypefnx {Функция С} @code{void} mgl_set_color (@code{char} id, @code{mreal} r, @code{mreal} g, @code{mreal} b) Задает RGB значения для цвета с заданным @var{id}. Изменения действуют глобально для всех последующих использований данного @var{id}. @end deftypefn @end ifclear @anchor{gray} @deftypefn {Команда MGL} {} gray [@code{val=on}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Gray (@code{bool} enable) @deftypefnx {Функция С} @code{void} mgl_set_gray (@code{HMGL} gr, @code{int} enable) @end ifclear Включает/выключает вывод графика в оттенках серого. @end deftypefn @c ================================================================== @external{} @node Masks, Error handling, Palette and colors, Graphics setup @subsection Маски @nav{} @cindex SetMask @cindex SetMaskAngle @anchor{mask} @deftypefn {Команда MGL} {} mask 'id' 'hex' @deftypefnx {Команда MGL} {} mask 'id' hex @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetMask (@code{char} id, @code{const char *}hex) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetMask (@code{char} id, @code{uint64_t} hex) @deftypefnx {Функция С} @code{void} mgl_set_mask (@code{HMGL} gr, @code{const char *}hex) @deftypefnx {Функция С} @code{void} mgl_set_mask_val (@code{HMGL} gr, @code{uint64_t} hex) @end ifclear Задает новую матрицу @var{hex} размером 8*8 для маски с заданным @var{id}. Изменения действуют глобально для всех последующих использований данного @var{id}. Значения по умолчанию (см. @ref{Color scheme}): @samp{-} -- 000000FF00000000, @samp{+} -- 080808FF08080808, @samp{=} -- 0000FF00FF000000, @samp{;} -- 0000007700000000, @samp{o} -- 0000182424180000, @samp{O} -- 0000183C3C180000, @samp{s} -- 00003C24243C0000, @samp{S} -- 00003C3C3C3C0000, @samp{~} -- 0000060990600000, @samp{<} -- 0060584658600000, @samp{>} -- 00061A621A060000, @samp{j} -- 0000005F00000000, @samp{d} -- 0008142214080000, @samp{D} -- 00081C3E1C080000, @samp{*} -- 8142241818244281, @samp{^} -- 0000001824420000. @end deftypefn @deftypefn {Команда MGL} {} mask angle @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetMaskAngle (@code{int} angle) @deftypefnx {Функция С} @code{void} mgl_set_mask_angle (@code{HMGL} gr, @code{int} angle) @end ifclear Задает угол поворота маски в градусах. Отмечу, что символы @samp{\}, @samp{/}, @samp{I} в цветовой схеме задают угол поворота в 45, -45 и 90 градусов соответственно. @end deftypefn @c ================================================================== @external{} @node Error handling, Stop drawing , Masks, Graphics setup @subsection Обработка ошибок @nav{} @ifset UDAV Все сообщения будут выведены автоматически в специальном окне или в консоли. @end ifset @ifclear UDAV @cindex Message @cindex SetWarn @cindex GetWarn Обычно вы должны сбросить признак ошибки с помощью @code{SetWarn(0);} перед построением и проверить @code{GetWarnCode()} или @code{Message()} на наличие ошибок после построения. Только последнее предупреждение сохраняется. Замечу, что все предупреждения/ошибки в MathGL не являются критичными -- в худшем из вариантов соответствующий график просто не будет построен. По умолчанию, все предупреждения выводятся в @code{stderr}. Этот вывод можно выключить вызовом @code{mgl_suppress_warn(true);}. @deftypefn {Метод класса @code{mglGraph}} @code{void} SetWarn (@code{int} code, @code{const char *}info=@code{""}) @deftypefnx {Функция С} @code{void} mgl_set_warn (@code{HMGL} gr, @code{int} code, @code{const char *}info) Задает код предупреждения. Обычно вызывается только для очистки предупреждений (@code{SetWarn(0);}) или внутри библиотеки. Текст @var{info} будет добавлен к предупреждениям как есть при @var{code}<0. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{const char *}Message () @deftypefnx {Функция С} @code{const char *}mgl_get_mess (@code{HMGL} gr) @deftypefnx {Fortran процедура} @code{} mgl_get_mess (@code{long} gr, @code{char *}out, @code{int} len) Возвращает текст предупреждений о причине отсутствия графика. Если возвращаемая строка пустая, то сообщений нет. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} GetWarn () @deftypefnx {Функция С} @code{int} mgl_get_warn (@code{HMGL} gr) Возвращает код сообщения о причине отсутствия графика. Возможные значения: @table @code @item mglWarnNone=0 Предупреждений нет @item mglWarnDim Неправильные или несовместимые размеры данных @item mglWarnLow Размеры данных слишком малы @item mglWarnNeg Минимальное значение отрицательно @item mglWarnFile Файл не найден или указаны неправильные размерности @item mglWarnMem Не достаточно памяти @item mglWarnZero Значение данных равно нулю @item mglWarnLeg Нет записей в легенде @item mglWarnSlc Индекс среза вне данных @item mglWarnCnt Число линий уровня меньше или равно нулю @item mglWarnOpen Не могу открыть файл @item mglWarnLId Light: ID вне допустимых значений @item mglWarnSize Setsize: размер(ы) равны нулю или отрицательны @item mglWarnFmt Формат не поддерживается @item mglWarnTern Диапазоны осей несовместимые @item mglWarnNull Указатель равен NULL @item mglWarnSpc Не хватает места для графика @item mglScrArg Неправильные аргументы команды скрипта MGL @item mglScrCmd Неправильная команда в скрипте MGL @item mglScrLong Слишком длинная строка в скрипте MGL @item mglScrStr Одиночная ' в скрипте MGL @item mglScrTemp Изменяется временная переменная в MGL скрипте @end table @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SuppressWarn (@code{bool} state) static @deftypefnx {Функция С} @code{void} mgl_suppress_warn (@code{int} state) Выключает вывод предупреждений в @code{stderr} если @var{state} не ноль. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetGlobalWarn (@code{const char *}info) static @deftypefnx {Функция С} @code{void} mgl_set_global_warn (@code{const char *}info) Задает предупреждение @var{info}, не привязанное к конкретному объекту рисования. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{const char *} GlobalWarn () static @deftypefnx {Функция С} @code{const char *} mgl_get_global_warn () Возвращает предупреждения, не привязанные к конкретному объекту рисования. @end deftypefn @end ifclear @c ================================================================== @external{} @node Stop drawing, , Error handling, Graphics setup @subsection Остановка рисования @nav{} @ifset UDAV Вы можете использовать команду @ref{stop} или соответствующую кнопку панели инструментов для остановки рисования и выполнения скрипта. @end ifset @ifclear UDAV @cindex Stop @cindex NeedStop @cindex SetEventFunc @deftypefn {Метод класса @code{mglGraph}} @code{void} Stop (@code{bool} stop=@code{true}) @deftypefnx {Функция С only} @code{void} mgl_ask_stop (@code{HMGL} gr, @code{int} stop) Просит остановить рисование если @var{stop} не ноль, иначе сбрасывает флаг остановки. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{bool} NeedStop () @deftypefnx {Функция С only} @code{void} mgl_need_stop (@code{HMGL} gr) Возвращает @code{true} если рисование должно быть остановлено. Также запускает обработку всех отложенных событий в GUI. Пользователь должен вызывать эту функцию время от времени внутри долгих вычислений для плавности отклика GUI. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{bool} SetEventFunc (@code{void (*}func@code{)(void *)}, @code{void *}par=@code{NULL}) @deftypefnx {Функция С only} @code{void} mgl_set_event_func (@code{HMGL} gr, @code{void (*}func@code{)(void *)}, @code{void *}par) Задает функцию, которая будет вызвана для обработки событий в GUI библиотеке. @end deftypefn @end ifclear @c ================================================================== @external{} @node Axis settings, Subplots and rotation, Graphics setup, MathGL core @section Настройки осей координат @nav{} Эти функции управляет видом и масштабом осей координат. Перед построением для каждой точки выполняются 3 преобразования: сначала определяется возможность рисования точки (см. @ref{Cutting}), далее применяются формулы перехода к криволинейным координатам и наконец точка отображается. Отмечу, что MathGL выдает предупреждение если масштабы осей координат лежат вне области определения формул преобразования координат. @menu * Ranges (bounding box):: * Curved coordinates:: * Ticks:: @end menu @c ------------------------------------------------------------------ @external{} @node Ranges (bounding box), Curved coordinates, , Axis settings @subsection Масштаб осей координат @nav{} @cindex CRange @cindex XRange @cindex YRange @cindex ZRange @cindex Ranges @cindex Origin @ifclear UDAV @cindex SetRange @cindex SetRanges @cindex SetOrigin @end ifclear @anchor{xrange} @anchor{yrange} @anchor{zrange} @anchor{crange} @deftypefn {Команда MGL} {} xrange @code{v1 v2} [@code{add=off}] @deftypefnx {Команда MGL} {} yrange @code{v1 v2} [@code{add=off}] @deftypefnx {Команда MGL} {} zrange @code{v1 v2} [@code{add=off}] @deftypefnx {Команда MGL} {} crange @code{v1 v2} [@code{add=off}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{mreal} v1, @code{mreal} v2) @deftypefnx {Метод класса @code{mglGraph}} @code{void} AddRange (@code{char} dir, @code{mreal} v1, @code{mreal} v2) @deftypefnx {Функция С} @code{void} mgl_set_range_val (@code{HMGL} gr, @code{char} dir, @code{mreal} v1, @code{mreal} v2) @deftypefnx {Функция С} @code{void} mgl_add_range_val (@code{HMGL} gr, @code{char} dir, @code{mreal} v1, @code{mreal} v2) @end ifclear Задает диапазон изменения @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-координат. Если одно из значений равно @code{NAN}, то оно игнорируется. Параметр @code{add=on} указывает добавлять новый диапазон к существующему (не заменять его). См. также @ref{ranges}. @end deftypefn @deftypefn {Команда MGL} {} xrange dat [@code{add=off}] @deftypefnx {Команда MGL} {} yrange dat [@code{add=off}] @deftypefnx {Команда MGL} {} zrange dat [@code{add=off}] @deftypefnx {Команда MGL} {} crange dat [@code{add=off}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{const mglDataA &}dat, @code{bool} add=@code{false}) @deftypefnx {Функция С} @code{void} mgl_set_range_dat (@code{HMGL} gr, @code{char} dir, @code{const HCDT} a, @code{int} add) @end ifclear Задает диапазон изменения @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-координат как минимальное и максимальное значение массива @var{dat}. Параметр @code{add=on} указывает добавлять новый диапазон к существующему (не заменять его). @end deftypefn @anchor{ranges} @deftypefn {Команда MGL} {} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2, @code{mreal} z1=@code{0}, @code{mreal} z2=@code{0}) @deftypefnx {Функция С} @code{void} mgl_set_ranges (@code{HMGL} gr, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2, @code{mreal} z1, @code{mreal} z2) @end ifclear Задает диапазон изменения координат. Если минимальное и максимальное значение координаты равны, то они игнорируются по данному направлению. Также устанавливает размер цветовой шкалы, аналогично команде @code{crange z1 z2}. Начальные диапазоны равны [-1, 1]. @end deftypefn @deftypefn {Команда MGL} {} ranges @code{xx yy [zz cc=zz]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{const mglDataA &}xx, @code{const mglDataA &}yy) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{const mglDataA &}xx, @code{const mglDataA &}yy, @code{const mglDataA &}zz) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{const mglDataA &}xx, @code{const mglDataA &}yy, @code{const mglDataA &}zz, @code{const mglDataA &}cc) @end ifclear Задает диапазон изменения @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-координат как минимальное и максимальное значение массивов @var{xx}, @var{yy}, @var{zz}, @var{cc} соответственно. @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{void} SetAutoRanges (@code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetAutoRanges (@code{double} x1, @code{double} x2, @code{double} y1, @code{double} y2, @code{double} z1=@code{0}, @code{double} z2=@code{0}, @code{double} c1=@code{0}, @code{double} c2=@code{0}) @deftypefnx {Функция С} @code{void} mgl_set_auto_ranges (@code{HMGL} gr, @code{double} x1, @code{double} x2, @code{double} y1, @code{double} y2, @code{double} z1, @code{double} z2, @code{double} z1, @code{double} z2) Задает диапазон изменения координат для автоматических переменных. Если минимальное и максимальное значение координаты равны, то они игнорируются по данному направлению. @end deftypefn @end ifclear @anchor{origin} @deftypefn {Команда MGL} {} origin @code{x0 y0 [z0=nan]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetOrigin (@code{mglPoint} p0) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetOrigin (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0=@code{NAN}) @deftypefnx {Функция С} @code{void} mgl_set_origin (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0) @end ifclear Задает центр пересечения осей координат. Если одно из значений равно NAN, то MathGL попытается выбрать оптимальное положение осей координат по этому направлению. @end deftypefn @anchor{zoomaxis} @deftypefn {Команда MGL} {} zoomaxis @code{x1 x2} @deftypefnx {Команда MGL} {} zoomaxis @code{x1 y1 x2 y2} @deftypefnx {Команда MGL} {} zoomaxis @code{x1 y1 z1 x2 y2 z2} @deftypefnx {Команда MGL} {} zoomaxis @code{x1 y1 z1 c1 x2 y2 z2 c2} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ZoomAxis (@code{mglPoint} p1, @code{mglPoint} p2) @deftypefnx {Функция С} @code{void} mgl_zoom_axis (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} c1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} c2) @end ifclear Дополнительно расширяет диапазон осей координат, задаваемый функциями @code{SetRange} или @code{SetRanges}, в соответствии с формулами @math{min += (max-min)*p1} и @math{max += (max-min)*p1} (или @math{min *= (max/min)^p1} и @math{max *= (max/min)^p1} для "логарифмических" диапазонов, когда @math{inf>max/min>100} или @math{00 задает относительную длину подметок, которые в @code{sqrt(1+stt)} раз меньше. @end deftypefn @deftypefn {Команда MGL} {} axisstl 'stl' ['tck'='' 'sub'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetAxisStl (@code{const char *}stl=@code{"k"}, @code{const char *}tck=@code{0}, @code{const char *}sub=@code{0}) @deftypefnx {Функция С} @code{void} mgl_set_axis_stl (@code{HMGL} gr, @code{const char *}stl, @code{const char *}tck, @code{const char *}sub) @end ifclear Задает стиль осей (@var{stl}), меток (@var{tck}) и подметок (@var{sub}) осей координат. Если @var{stl} пустая или ноль, то используется стиль по умолчанию (@samp{k} или @samp{w} в зависимости от типа прозрачности). Если @var{tck}, @var{sub} пустая или ноль, то используется стиль осей (т.е. @var{stl}). @end deftypefn @c ################################################################## @external{} @node Subplots and rotation, Export picture, Axis settings, MathGL core @section Матрица преобразования @nav{} @cindex Aspect @cindex Rotate @cindex RotateN @cindex SubPlot @cindex MultiPlot @cindex StickPlot @cindex ColumnPlot @cindex InPlot @cindex Title @cindex Perspective @cindex View @cindex Push @cindex Pop Эти функции контролируют где и как график будет расположен. Существует определенный порядок вызова этих функций для лучшего вида графика. Вначале должны вызываться функции @ref{subplot}, @ref{multiplot} или @ref{inplot} для указания местоположения вывода. После них -- функции вращения @ref{rotate}, @ref{shear} и @ref{aspect}. И наконец любые другие функции для рисования графика. Вместо вращения графика можно вызвать функцию @ref{columnplot}, @ref{gridplot}, @ref{stickplot}, @ref{shearplot} или относительную @ref{inplot} для расположения графиков в столбец одного над другим без зазора между осями. @sref{Subplots} @anchor{subplot} @deftypefn {Команда MGL} {} subplot @code{nx ny m} ['stl'='<>_^' @code{dx=0 dy=0}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl=@code{"<>_^"}, @code{mreal} dx=@code{0}, @code{mreal} dy=@code{0}) @deftypefnx {Функция С} @code{void} mgl_subplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl) @deftypefnx {Функция С} @code{void} mgl_subplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl, @code{mreal} dx, @code{mreal} dy) @end ifclear Помещает последующий вывод в @var{m}-ую ячейку сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Дополнительное место для осей/colorbar резервируется только если строка @var{stl} содержит: @itemize @bullet @item @samp{L} или @samp{<} -- с левого края, @item @samp{R} или @samp{>} -- с правого края, @item @samp{A} или @samp{^} -- с верхнего края, @item @samp{U} или @samp{_} -- с нижнего края, @item @samp{#} -- место резервироваться не будет -- оси координат будут занимать все доступное пространство. @end itemize Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{dx}, @var{dy}. Отмечу, что colorbar может находиться за пределами рисунка если выбран пустой стиль @samp{}. @end deftypefn @anchor{multiplot} @deftypefn {Команда MGL} {} multiplot @code{nx ny m dx dy} ['style'='<>_^' sx sy] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} MultiPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl=@code{"<>_^"}) @deftypefnx {Функция С} @code{void} mgl_multiplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl) @end ifclear Помещает последующий вывод в прямоугольник из @var{dx}*@var{dy} ячеек, начиная с @var{m}-ой ячейки, сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". Дополнительное место для осей/colorbar резервируется если строка @var{stl} содержит: @itemize @bullet @item @samp{L} или @samp{<} -- с левого края, @item @samp{R} или @samp{>} -- с правого края, @item @samp{A} или @samp{^} -- с верхнего края, @item @samp{U} или @samp{_} -- с нижнего края, @item @samp{#} -- место резервироваться не будет -- оси координат будут занимать все доступное пространство. @end itemize Область вывода может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{sx}, @var{sy}. @end deftypefn @anchor{inplot} @deftypefn {Команда MGL} {} inplot @code{x1 x2 y1 y2 [rel=on]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} InPlot (@code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2, @code{bool} rel=@code{true}) @deftypefnx {Функция С} @code{void} mgl_inplot (@code{HMGL} gr, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2) @deftypefnx {Функция С} @code{void} mgl_relplot (@code{HMGL} gr, @code{mreal} x1, @code{mreal} x2, @code{mreal} y1, @code{mreal} y2) @end ifclear Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр @var{rel}=@code{true}, то используется позиция относительно текущего @ref{subplot} (или @ref{inplot} с @var{rel}=@code{false}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". @end deftypefn @anchor{columnplot} @deftypefn {Команда MGL} {} columnplot @code{num ind [d=0]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{mreal} d=@code{0}) @deftypefnx {Функция С} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind) @deftypefnx {Функция С} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{mreal} d) @end ifclear Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{false}). Параметр @var{d} задает дополнительный зазор между строк. @end deftypefn @anchor{gridplot} @deftypefn {Команда MGL} {} gridplot @code{nx ny ind [d=0]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} GridPlot (@code{int} nx, @code{int} ny, @code{int} ind, @code{mreal} d=@code{0}) @deftypefnx {Функция С} @code{void} mgl_gridplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind) @deftypefnx {Функция С} @code{void} mgl_gridplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind, @code{mreal} d) @end ifclear Помещает последующий вывод в @var{ind}-ую ячейку таблицы @var{nx}*@var{ny}. Положение ячейки выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{false}). Параметр @var{d} задает дополнительный зазор между ячеек. @end deftypefn @anchor{stickplot} @deftypefn {Команда MGL} {} stickplot @code{num ind tet phi} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{mreal} tet, @code{mreal} phi) @deftypefnx {Функция С} @code{void} mgl_stickplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{mreal} tet, @code{mreal} phi) @end ifclear Помещает последующий вывод в @var{ind}-ую ячейку "бруска" из @var{num} ячеек. При этом сам брусок повернут на углы @var{tet}, @var{phi}. Положение выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{false}). @end deftypefn @anchor{shearplot} @deftypefn {Команда MGL} {} shearplot @code{num ind sx sy [xd yd]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ShearPlot (@code{int} num, @code{int} ind, @code{mreal} sx, @code{mreal} sy, @code{mreal} xd=@code{1}, @code{mreal} yd=@code{0}) @deftypefnx {Функция С} @code{void} mgl_shearplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{mreal} sx, @code{mreal} sy, @code{mreal} xd, @code{mreal} yd) @end ifclear Помещает последующий вывод в @var{ind}-ую ячейку "бруска" из @var{num} ячеек. При этом сама ячейка скошена на @var{sx}, @var{sy}. Направление бруска задается переменными @var{xd} и @var{yd}. Положение выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{false}). @end deftypefn @anchor{title} @deftypefn {Команда MGL} {} title 'title' ['stl'='' @code{size=-2}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Title (@code{const char *}txt, @code{const char *}stl=@code{""}, @code{mreal} size=@code{-2}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Title (@code{const wchar_t *}txt, @code{const char *}stl=@code{""}, @code{mreal} size=@code{-2}) @deftypefnx {Функция С} @code{void} mgl_title (@code{HMGL} gr, @code{const char *}txt, @code{const char *}stl, @code{mreal} size) @deftypefnx {Функция С} @code{void} mgl_titlew (@code{HMGL} gr, @code{const wchar_t *}txt, @code{const char *}stl, @code{mreal} size) @end ifclear Выводит заголовок @var{title} для текущего "подграфика" шрифтом @var{stl} с размером @var{size}. Если строка @var{stl} содержит @samp{#}, то рисуется обрамляющий прямоугольник. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться сразу после создания "подграфика". @end deftypefn @anchor{rotate} @deftypefn {Команда MGL} {} rotate @code{tetx tetz [tety=0]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Rotate (@code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY=@code{0}) @deftypefnx {Функция С} @code{void} mgl_rotate (@code{HMGL} gr, @code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY) @end ifclear Вращает систему координат относительно осей @{x, z, y@} последовательно на углы @var{TetX}, @var{TetZ}, @var{TetY}. @end deftypefn @deftypefn {Команда MGL} {} rotate @code{tet x y z} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} RotateN (@code{mreal} Tet, @code{mreal} x, @code{mreal} y, @code{mreal} z) @deftypefnx {Функция С} @code{void} mgl_rotate_vector (@code{HMGL} gr, @code{mreal Tet}, @code{mreal x}, @code{mreal y}, @code{mreal z}) @end ifclear Вращает систему координат относительно вектора @{@var{x}, @var{y}, @var{z}@} на угол @var{Tet}. @end deftypefn @anchor{shear} @deftypefn {Команда MGL} {} shear @code{sx sy} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Shear (@code{mreal} sx, @code{mreal} sy) @deftypefnx {Функция С} @code{void} mgl_shear (@code{HMGL} gr, @code{mreal} sx, @code{mreal} sy) @end ifclear Сдвигает (скашивает) систему координат на значения @var{sx}, @var{sy}. @end deftypefn @anchor{aspect} @deftypefn {Команда MGL} {} aspect @code{ax ay [az=1]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Aspect (@code{mreal} Ax, @code{mreal} Ay, @code{mreal} Az=@code{1}) @deftypefnx {Функция С} @code{void} mgl_aspect (@code{HMGL} gr, @code{mreal} Ax, @code{mreal} Ay, @code{mreal} Az) @end ifclear Устанавливает соотношение размеров осей в отношении @var{Ax:Ay:Az}. Для лучшего вида следует вызывать после функции @ref{rotate}. Если @var{Ax}=@code{NAN}, то функция выберет оптимальное соотношение размеров, чтобы шаг по осям x-y был одинаков. При этом, @var{Ay} задает фактор пропорциональности шага (обычно 1), или указывает на его автоматический выбор при @var{Ay}=@code{NAN}. @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{void} Push () @deftypefnx {Функция С} @code{void} mgl_mat_push (@code{HMGL} gr) Помещает матрицу преобразования в стек. Позднее вы можете восстановить текущее состояние с помощью функции Pop(). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} Pop () @deftypefnx {Функция С} @code{void} mgl_mat_pop (@code{HMGL} gr) Заменяет (восстанавливает) матрицу преобразования на последнюю помещенную в стек матрицу. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetPlotFactor (@code{mreal} val) @deftypefnx {Функция С} @code{void} mgl_set_plotfactor (@code{HMGL} gr, @code{mreal} val) Задает масштаб картинки. Не рекомендуется устанавливать значения меньше 1.5. Это аналог функции Zoom(), но применяется только к конкретному подграфику. Используйте ноль для включения автоматического масштабирования. @end deftypefn @end ifclear Также есть 3 функции, которые управляют перспективой @code{Perspective()}, масштабированием @code{Zoom()} и вращением @code{View()} всего рисунка. Т.е. они действуют как ещё одна матрица трансформации. Они были введены для вращения/приближения графика с помощью мыши. Не рекомендуется вызывать их при рисовании графика. @anchor{perspective} @deftypefn {Команда MGL} {} perspective @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Perspective (@code{mreal} a) @deftypefnx {Функция С} @code{void} mgl_perspective (@code{HMGL} gr, @code{mreal} a) @end ifclear Добавляет (включает) перспективу для графика. Параметр @math{a = Depth/(Depth+dz) \in [0,1)}. По умолчанию (@code{a=0}) перспектива отключена. @end deftypefn @anchor{view} @deftypefn {Команда MGL} {} view @code{tetx tetz [tety=0]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} View (@code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY=@code{0}) @deftypefnx {Функция С} @code{void} mgl_view (@code{HMGL} gr, @code{mreal} TetX, @code{mreal} TetZ, @code{mreal} TetY) @end ifclear Вращает систему координат относительно осей @{x, z, y@} последовательно на углы @var{TetX}, @var{TetZ}, @var{TetY}. Вращение происходит независимо от @ref{rotate}. Внимание! эти настройки не могут быть переписаны функцией @code{DefaultPlotParam()}. Используйте @code{Zoom(0,0,1,1)} для возвращения к виду по умолчанию. @end deftypefn @anchor{zoom} @deftypefn {Команда MGL} {} zoom @code{x1 y1 x2 y2} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Zoom (@code{mreal} x1, @code{mreal} y1, @code{mreal} x2, @code{mreal} y2) @deftypefnx {Функция С} @code{void} mgl_set_zoom (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} x2, @code{mreal} y2) @end ifclear Масштабирует весь рисунок. После вызова функции текущий график будет очищен и в дальнейшем рисунок будет содержать только область [x1,x2]*[y1,y2] от исходного рисунка. Координаты @var{x1}, @var{x2}, @var{y1}, @var{y2} меняются в диапазоне от 0 до 1. Внимание! эти настройки не могут быть переписаны никакими другими функциями, включая @code{DefaultPlotParam()}. Используйте @code{Zoom(0,0,1,1)} для возвращения к виду по умолчанию. @end deftypefn @c ################################################################## @external{} @node Export picture, Background, Subplots and rotation, MathGL core @section Экспорт рисунка @nav{} @cindex SetSize Функции в этой группе сохраняют или дают доступ к полученному рисунку. Поэтом обычно они должны вызываться в конце рисования. @anchor{setsize} @deftypefn {Команда MGL} {} setsize @code{w h} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetSize (@code{int} width, @code{int} height, @code{bool} clear=@code{true}) @deftypefnx {Функция С} @code{void} mgl_set_size (@code{HMGL} gr, @code{int} width, @code{int} height) @deftypefnx {Функция С} @code{void} mgl_scale_size (@code{HMGL} gr, @code{int} width, @code{int} height) @end ifclear Изменяет размер картинки в пикселях. Функция должна вызываться @strong{перед} любыми функциями построения потому что полностью очищает содержимое рисунка при @var{clear}=@code{true}. Функция только очищает растровый рисунок и масштабирует примитивы при @var{clear}=@code{false}. @end deftypefn @anchor{setsizescl} @deftypefn {Команда MGL} {} setsizescl @code{factor} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetSizeScl (@code{double} factor) @deftypefnx {Функция С} @code{void} mgl_set_size_scl (@code{HMGL} gr, @code{double} factor) @end ifclear Задает множитель для высоты и ширины во всех последующих вызовах @ref{setsize}. @end deftypefn @anchor{quality} @deftypefn {Команда MGL} {} quality [@code{val}=2] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetQuality (@code{int} val=@code{MGL_DRAW_NORM}) @deftypefnx {Функция С} @code{void} mgl_set_quality (@code{HMGL} gr, @code{int} val) @end ifclear Задает качество графика в зависимости от значения @var{val}: @code{MGL_DRAW_WIRE=0} -- нет рисования граней (наиболее быстрый), @code{MGL_DRAW_FAST=1} -- нет интерполяции цвета (быстрый), @code{MGL_DRAW_NORM=2} -- высокое качество (нормальный), @code{MGL_DRAW_HIGH=3} -- высокое качество с рисованием 3d примитивов (стрелок и маркеров). Если установлен бит @code{MGL_DRAW_LMEM=0x4}, то происходит прямое рисование в растровое изображение (меньше затраты памяти). Если установлен бит @code{MGL_DRAW_DOTS=0x8}, то рисуются точки вместо примитивов (очень быстро). @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{int} GetQuality () @deftypefnx {Функция С} @code{void} mgl_get_quality (@code{HMGL} gr) Возвращает качество графика: @code{MGL_DRAW_WIRE=0} -- нет рисования граней (наиболее быстрый), @code{MGL_DRAW_FAST=1} -- нет интерполяции цвета (быстрый), @code{MGL_DRAW_NORM=2} -- высокое качество (нормальный), @code{MGL_DRAW_HIGH=3} -- высокое качество с рисованием 3d примитивов (стрелок и маркеров). Если установлен бит @code{MGL_DRAW_LMEM=0x4}, то происходит прямое рисование в растровое изображение (меньше затраты памяти). Если установлен бит @code{MGL_DRAW_DOTS=0x8}, то рисуются точки вместо примитивов (очень быстро). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} StartGroup (const char *name) @deftypefnx {Функция С} @code{void} mgl_start_group (@code{HMGL} gr, @code{const char *}name) Начинает определение группы. Группа может содержать объекты и другие группы. Они используются для выбора части модели при приближении, изменении прозрачности и т.д. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} EndGroup () @deftypefnx {Функция С} @code{void} mgl_end_group (@code{HMGL} gr) Завершает определение группы. @end deftypefn @end ifclear @menu * Export to file:: * Frames/Animation:: * Bitmap in memory:: * Parallelization:: @end menu @c ================================================================== @external{} @node Export to file, Frames/Animation, , Export picture @subsection Экспорт в файл @nav{} @cindex Write @ifclear UDAV @cindex WriteFrame @cindex WritePNG @cindex WriteGIF @c @cindex WriteIDTF @cindex WriteSVG @cindex WriteBMP @cindex WriteEPS @cindex WriteBPS @cindex WriteTGA @cindex WriteTEX @cindex WritePRC @cindex WriteOBJ @cindex WriteWGL @cindex WriteJPEG @cindex ShowImage @end ifclear Эти функции экспортируют текущую картинку (кадр) в файл. Имя файла @var{fname} должно иметь соответствующее расширение. Параметр @var{descr} дает краткое описание картинки. Пока прозрачность поддерживается только для форматов PNG, SVG, OBJ и PRC. @anchor{write} @deftypefn {Команда MGL} {} write ['fname'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @end ifclear Экспортирует текущий кадр в файл @var{fname} с типом, определяемым по расширению. Параметр @var{descr} добавляет описание (может быть пустым). Если @var{fname} пустой, то используется имя @samp{frame####.jpg}, где @samp{####} -- текущий номер кадра и имя @samp{frame} определяется переменной @ref{plotid}. @end deftypefn @anchor{bbox} @deftypefn {Команда MGL} {} bbox x1 y1 [x2=@code{-1} y2=@code{-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetBBox (@code{int} x1=@code{0}, @code{int} y1=@code{0}, @code{int} x2=@code{-1}, @code{int} y2=@code{-1}) @deftypefnx {Функция С} @code{void} mgl_set_bbox (@code{HMGL} gr, @code{int} x1, @code{int} y1, @code{int} x2, @code{int} y2) @end ifclear Задает область изображения, которая будет сохранена в файл 2D формата. Если @var{x2}<0 (@var{y2}<0), то исходная ширина (высота) рисунка будет использована. Если @var{x1}<0 или @var{y1}<0 или @var{x1}>=@var{x2}|Width или @var{y1}>=@var{y2}|Height, то обрезания рисунка не будет. @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{void} WritePNG (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{int} compr=@code{""}, @code{bool} alpha=@code{true}) @deftypefnx {Функция С} @code{void} mgl_write_png (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @deftypefnx {Функция С} @code{void} mgl_write_png_solid (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в PNG файл. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла, @var{alpha} -- прозрачность фона. Если при компиляции MathGL не был определен флаг HAVE_PNG, то экспорт в файл не производится. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteJPEG (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_jpg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в JPEG файл. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если при компиляции MathGL не был определен флаг HAVE_JPEG, то экспорт в файл не производится. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteGIF (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_gif (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в GIF файл. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если при компиляции MathGL не был определен флаг HAVE_GIF, то экспорт в файл не производится. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteBMP (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_bmp (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в BMP файл. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteTGA (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_tga (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в TGA файл. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteEPS (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в EPS файл, используя векторное представление графика. Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если имя файла оканчивается на @samp{z} (например, @samp{fname.eps.gz}), то файл автоматически архивируется в формате gzip. Отмечу, что формат EPS не поддерживает интерполяцию цвета, и картинка будет выглядеть как при использовании @ref{quality}=1. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteBPS (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в EPS файл, используя растровое представление графика. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если имя файла оканчивается на @samp{z} (например, @samp{fname.eps.gz}), то файл автоматически архивируется в формате gzip. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteSVG (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_svg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в SVG файл, используя векторное представление графика. Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если имя файла оканчивается на @samp{z} (например, @samp{fname.svgz}), то файл автоматически архивируется в формате gzip. Отмечу, что формат SVG не поддерживает интерполяцию цвета, и картинка будет выглядеть как при использовании @ref{quality}=1. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteTEX (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_tex (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в LaTeX файл (пакет Tikz/PGF), используя векторное представление графика. Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Отмечу, что сейчас отсутствует изменение размера текста (например, в subplot), что может приводить к неправильному положению надписей. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WritePRC (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} make_pdf=@code{true}) @deftypefnx {Функция С} @code{void} mgl_write_prc (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr, @code{int} make_pdf) Экспортирует текущий кадр в PRC файл, используя векторное представление графика (см. @url{http://en.wikipedia.org/wiki/PRC_%28file_format%29}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если параметр @var{make_pdf}=@code{true} и PDF был выбран при конфигурировании MathGL, то также создается соответствующий PDF файл с 3D изображением. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteOBJ (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_obj (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в OBJ/MTL файл, используя векторное представление графика (см. @url{http://en.wikipedia.org/wiki/Wavefront_.obj_file, OBJ формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteXYZ (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_xyz (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в XYZ/XYZL/XYZF файлы, используя векторное представление графика (см. @url{http://people.sc.fsu.edu/~jburkardt/data/xyz/xyz.html, XYZ формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteSTL (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_stl (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в STL файл, используя векторное представление графика (см. @url{http://en.wikipedia.org/wiki/STL_(file_format), STL формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} colored=@code{false}) @deftypefnx {Функция С} @code{void} mgl_write_off (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr, @code{bool} colored) Экспортирует текущий кадр в OFF файл, используя векторное представление графика (см. @url{http://people.sc.fsu.edu/~jburkardt/data/off/off.html, OFF формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @c @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteX3D (@code{const char *}fname, @code{const char *}descr=@code{""}) @c @deftypefnx {Функция С} @code{void} mgl_write_x3d (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @c Экспортирует текущий кадр в X3D файл, используя векторное представление графика (см. @url{http://en.wikipedia.org/wiki/X3d, X3D формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @c @end deftypefn @c @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""}) @c @deftypefnx {Функция С} @code{void} mgl_write_idtf (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @c Экспортирует текущий кадр в IDTF файл, используя векторное представление графика (класс mglGraphIDTF). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @c @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} ShowImage (@code{const char *}viewer, @code{bool} nowait=@code{false}) @deftypefnx {Функция С} @code{void} mgl_show_image (@code{const char *}viewer, @code{int} nowait) Отображает текущий кадр используя внешнюю программу просмотра @var{viewer}. Функция сохраняет картинку во временный файл и вызывает @var{viewer} для его отображения. Если @var{nowait}=@code{true}, то функция возвращает управление немедленно -- не ждет пока окно просмотра будет закрыто. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteJSON (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_json (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует точки и примитивы в текстовый файл используя @ref{JSON format}. В дальнейшем этот файл можно загрузить и просмотреть в JavaScript скрипте. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} ExportMGLD (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_export_mgld (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует точки и примитивы в файл @ref{MGLD format}. В дальнейшем этот файл можно загрузить и просмотреть с помощью @code{mglview}. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{bool} add=@code{false}) @deftypefnx {Функция С} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{int} add) Импортирует точки и примитивы из файла в @ref{MGLD format}. Параметры функции следующие: @var{fname} -- имя файла, @var{add} -- флаг добавления или замены существующих точек и примитивов. @end deftypefn @end ifclear @c ################################################################## @external{} @node Frames/Animation, Bitmap in memory, Export to file, Export picture @subsection Кадры/Анимация @nav{} @ifset UDAV В MGL нет специальных команд для создания анимации. Однако можно воспользоваться возможностями утилит @code{mglconv} и @code{mglview}. Например, используя комментарии спеиального вида @samp{##a } или @samp{##c }. @end ifset @ifclear UDAV @cindex NewFrame @cindex EndFrame @cindex GetNumFrame @cindex ResetFrames @cindex StartGIF @cindex CloseGIF Эти функции позволяют создавать несколько картинок одновременно. В большинстве случаев это бесполезно, но для органов управления (см. @ref{Widget classes}) это позволяет показывать анимацию. Также можно записать несколько кадров в анимированный GIF файл. @deftypefn {Метод класса @code{mglGraph}} @code{void} NewFrame () @deftypefnx {Функция С} @code{void} mgl_new_frame (@code{HMGL} gr) Создает новый кадр. Функция возвращает номер текущего кадра. В режиме OpenGL функция не должны вызываться в параллельных потоках! -- используйте прямое создание списка. Функция @code{EndFrame()} @strong{должна} быть вызвана после рисования кадра для каждого вызова этой функции. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} EndFrame () @deftypefnx {Функция С} @code{void} mgl_end_frame (@code{HMGL} gr) Завершает рисование кадра. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} GetNumFrame () @deftypefnx {Функция С} @code{int} mgl_get_num_frame (@code{HMGL} gr) Возвращает число созданных кадров. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} GetFrame (@code{int} i) @deftypefnx {Функция С} @code{void} mgl_get_frame (@code{HMGL} gr, @code{int} i) Завершает рисование кадра и сохраняет объекты рисования в кадр с номером @var{i}, который должен быть в диапазоне [0, @code{GetNumFrame()}-1]. Функция аналогична @code{EndFrame()}, но не добавляет кадр в GIF изображение. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} GetFrame (@code{int} i) @deftypefnx {Функция С} @code{void} mgl_get_frame (@code{HMGL} gr, @code{int} i) Заменяет объекты рисования на объекты из кадра с номером @var{i}. Функция работает если установлен флаг @code{MGL_VECT_FRAME} (по умолчанию). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} ShowFrame (@code{int} i) @deftypefnx {Функция С} @code{void} mgl_show_frame (@code{HMGL} gr, @code{int} i) Добавляет объекты рисования из кадра с номером @var{i} к уже существующим. Функция работает если установлен флаг @code{MGL_VECT_FRAME} (по умолчанию). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} DelFrame (@code{int} i) @deftypefnx {Функция С} @code{void} mgl_del_frame (@code{HMGL} gr, @code{int} i) Удаляет объекты рисования для кадра с номером @var{i} и сдвигает нумерацию всех последующих кадров. Функция работает если установлен флаг @code{MGL_VECT_FRAME} (по умолчанию). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} ResetFrames () @deftypefnx {Функция С} @code{void} mgl_reset_frames (@code{HMGL} gr) Сбрасывает счетчик кадров в 0. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} ClearFrame (@code{int} i) @deftypefnx {Функция С} @code{void} mgl_clear_frame (@code{HMGL} gr, @code{int} i) Очищает текущий список объектов. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} StartGIF (@code{const char *}fname, @code{int} ms=@code{100}) @deftypefnx {Функция С} @code{void} mgl_start_gif (@code{HMGL} gr, @code{const char *}fname, @code{int} ms) Начинает запись кадров в анимированный GIF файл @var{fname}. Параметр @var{ms} задает задержку между кадрами в миллисекундах. Вы @strong{не должны} менять размер рисунка во время создания кино. Используйте CloseGIF() для завершения записи. Эта функция не работает в режиме OpenGL. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} CloseGIF () @deftypefnx {Функция С} @code{void} mgl_close_gif (@code{HMGL} gr) Завершает запись анимированного GIF файла. @end deftypefn @end ifclear @c ------------------------------------------------------------------ @external{} @node Bitmap in memory, Parallelization, Frames/Animation, Export picture @subsection Рисование в памяти @nav{} @ifclear UDAV Эти функции возвращают созданный растровый рисунок, его ширину и высоту. В дальнейшем его можно использовать в любой графической библиотеке (см. также, @ref{Widget classes}) или сохранить в файл (см. также, @ref{Export to file}). @deftypefn {Метод класса @code{mglGraph}} @code{const unsigned char *} GetRGB () @deftypefnx {Метод класса @code{mglGraph}} @code{void} GetRGB (@code{char *}buf, @code{int} size) @deftypefnx {Метод класса @code{mglGraph}} @code{void} GetBGRN (@code{char *}buf, @code{int} size) @deftypefnx {Функция С} @code{const unsigned char *} mgl_get_rgb (@code{HMGL} gr) Возвращает растровое изображение в формате RGB для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [3*i + 3*Width*j] (или [4*i + 4*Width*j] для @code{GetBGRN()}). В Python вы должны предоставить буфер @var{buf} достаточного размера @var{size}, т.е. код должен выглядеть следующим образом (для Python) @verbatim from mathgl import * gr = mglGraph(); bits='\t'; bits=bits.expandtabs(4*gr.GetWidth()*gr.GetHeight()); gr.GetBGRN(bits, len(bits)); @end verbatim @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{const unsigned char *} GetRGBA () @deftypefnx {Метод класса @code{mglGraph}} @code{void} GetRGBA (@code{char *}buf, @code{int} size) @deftypefnx {Функция С} @code{const unsigned char *} mgl_get_rgba (@code{HMGL} gr) Возвращает растровое изображение в формате RGBA для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue, alpha@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [4*i + 4*Width*j]. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} GetWidth () @deftypefnx {Метод класса @code{mglGraph}} @code{int} GetHeight () @deftypefnx {Функция С} @code{int} mgl_get_width (@code{HMGL} gr) @deftypefnx {Функция С} @code{int} mgl_get_height (@code{HMGL} gr) Возвращает ширину и высоту изображения. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys) @deftypefnx {Функция С} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{mreal *}x, @code{mreal *}y, @code{mreal *}z) Вычисляет 3D координаты @{x,y,z@} для экранной точки @{xs,ys@}. В данный момент игнорируется перспектива графика и формулы перехода в криволинейные координаты. Вычисления производятся для последнего использованного InPlot (см. @ref{Subplots and rotation}). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{mglPoint} CalcScr (@code{mglPoint} p) @deftypefnx {Функция С} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{int *}xs, @code{int *}ys) Вычисляет экранные координаты @{xs,ys@} для 3D координат @{x,y,z@}. Вычисления производятся для последнего использованного InPlot (см. @ref{Subplots and rotation}). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetObjId (@code{int} id) @deftypefnx {Функция С} @code{void} mgl_set_obj_id (@code{HMGL} gr, @code{int} id) Задает числовой идентификатор для объектов или subplot/inplot. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} GetObjId (@code{int} xs, @code{int} ys) @deftypefnx {Функция С} @code{int} mgl_get_obj_id (@code{HMGL} gr, @code{int} xs, @code{int} ys) Возвращает числовой идентификатор верхнего объекта в точке @{xs, ys@} рисунка. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} GetSplId (@code{int} xs, @code{int} ys) @deftypefnx {Функция С} @code{int} mgl_get_spl_id (@code{HMGL} gr, @code{int} xs, @code{int} ys) Возвращает числовой идентификатор верхнего "подграфика" в точке @{xs, ys@} рисунка. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} Highlight (@code{int} id) @deftypefnx {Функция С} @code{void} mgl_highlight (@code{HMGL} gr, @code{int} id) Выделяет объект с заданным @var{id}. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{long} IsActive (@code{int} xs, @code{int} ys, @code{int} d=@code{1}) @deftypefnx {Функция С} @code{long} mgl_is_active (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{int} d) Проверяет близка ли точка @{@var{xs}, @var{ys}@} к активной точке (т.е. mglBase::Act) с точностью @var{d} и возвращает индекс активной точки или @code{-1} если не найдено. Активные точки -- специальные точки, которые характеризуют примитивы (например, вершины). Это функция только для опытных пользователей. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{long} SetDrawReg (@code{int} nx=@code{1}, @code{int} ny=@code{1}, @code{int} m=@code{0}) @deftypefnx {Функция С} @code{long} mgl_set_draw_reg (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m) Ограничивает рисование прямоугольной областью @var{m}-ой клетки матрицы размером @var{nx}*@var{ny} (аналогично @ref{subplot}). Функция может бытб использована для ускорения вывода путем уменьшения выводимых примитивов. Это функция только для опытных пользователей. @end deftypefn @end ifclear @c ------------------------------------------------------------------ @external{} @node Parallelization, , Bitmap in memory, Export picture @subsection Распараллеливание @nav{} @ifclear UDAV @cindex Combine @cindex MPI_Send @cindex MPI_Recv Многие функции MathGL используют несколько потоков для ускорения работы (если MathGL была собрана с поддержкой pthread). При этом можно настраивать число используемых потоков. @deftypefn {Функция С} @code{int} mgl_set_num_thr (@code{int} n) Задает число потоков, которое будет использовано в MathGL. При @var{n}<1 число потоков задается как максимальное число процессоров (ядер) в системе. При @var{n}=1 не используется распараллеливание. @end deftypefn Другая возможность -- комбинирование изображений из разных объектов @code{mglGraph}. Эти методы наиболее подходят для компьютерных кластеров, когда данные настолько велики, что не могут поместиться в памяти отдельного компьютера. @deftypefn {Метод класса @code{mglGraph}} @code{int} Combine (@code{const mglGraph *}g) @deftypefnx {Функция С} @code{int} mgl_combine_gr (@code{HMGL} gr, @code{HMGL} g) Комбинирует (добавляет) рисунок из @var{g} с @var{gr}, принимая во внимание ``высоту'' пикселей. Ширина и высота обоих рисунков должна быть одинаковы. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} MPI_Send (@code{int} id) @deftypefnx {Функция С} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) Посылает рисунок из компьютера (ноды) @var{id}, используя MPI. Ширина и высота обоих рисунков должна быть одинаковы. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} MPI_Recv (@code{int} id) @deftypefnx {Функция С} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) Принимает рисунок из компьютера (ноды) @var{id}, используя MPI. Ширина и высота обоих рисунков должна быть одинаковы. @end deftypefn @end ifclear @c ################################################################## @external{} @node Background, Primitives, Export picture, MathGL core @section Фоновое изображение @nav{} @cindex LoadBackground @cindex Clf @cindex Rasterize These functions change background image. @anchor{clf} @deftypefn {Команда MGL} {} clf ['col'] @deftypefnx {Команда MGL} {} clf r g b @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Clf () @deftypefnx {Метод класса @code{mglGraph}} @code{void} Clf (@code{const char *} col) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Clf (@code{char} col) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Clf (@code{mreal} r, @code{mreal} g, @code{mreal} b) @deftypefnx {Функция С} @code{void} mgl_clf (@code{HMGL} gr) @deftypefnx {Функция С} @code{void} mgl_clf_str (@code{HMGL} gr, @code{const char *} col) @deftypefnx {Функция С} @code{void} mgl_clf_chr (@code{HMGL} gr, @code{char} col) @deftypefnx {Функция С} @code{void} mgl_clf_rgb (@code{HMGL} gr, @code{mreal} r, @code{mreal} g, @code{mreal} b) @end ifclear Очищает рисунок и заполняет фон заданным цветом. @end deftypefn @anchor{rasterize} @deftypefn {Команда MGL} {} rasterize @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Rasterize () @deftypefnx {Функция С} @code{void} mgl_rasterize (@code{HMGL} gr) @end ifclear Завершает рисование графика и помещает результат в качестве фона. После этого, очищает список примитивов (как @ref{clf}). Функция полезна для сохранения части графика (например, поверхностей или векторных полей) в растровом виде, а другой части (кривых, осей и пр.) в векторном. @end deftypefn @anchor{background} @deftypefn {Команда MGL} {} background 'fname' [@code{alpha=1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} LoadBackground (@code{const char *} fname, @code{double} alpha=@code{1}) @deftypefnx {Функция С} @code{void} mgl_load_background (@code{HMGL} gr, @code{const char *} fname, @code{double} alpha) @end ifclear Загружает PNG или JPEG файл @var{fname} в качестве фона для графика. Параметр @var{alpha} задает прозрачность фона вручную. @end deftypefn @c ################################################################## @external{} @node Primitives, Text printing, Export picture, MathGL core @section Рисование примитивов @nav{} @cindex Ball @cindex Line @cindex Curve @cindex Glyph @cindex Face @cindex FaceX @cindex FaceY @cindex FaceZ @cindex Cone @cindex Drop @cindex Sphere @ifclear UDAV @cindex Mark @cindex Error @end ifclear Эти функции рисуют рисуют простые объекты типа линий, точек, сфер, капель, конусов, и т.д. @anchor{ball} @deftypefn {Команда MGL} {} ball @code{x y} ['col'='r.'] @deftypefnx {Команда MGL} {} ball @code{x y z} ['col'='r.'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Ball (@code{mglPoint} p, @code{char} col=@code{'r'}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Mark (@code{mglPoint} p, @code{const char *}mark) @deftypefnx {Функция С} @code{void} mgl_mark (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const char *}mark) @end ifclear Рисует маркер (точку по умолчанию) с координатами @var{p}=@{@var{x}, @var{y}, @var{z}@} и цветом @var{col}. @end deftypefn @anchor{errbox} @deftypefn {Команда MGL} {} errbox @code{x y ex ey} ['stl'=''] @deftypefnx {Команда MGL} {} errbox @code{x y z ex ey ez} ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Error (@code{mglPoint} p, @code{mglPoint} e, @code{char} *stl=@code{""}) @deftypefnx {Функция С} @code{void} mgl_error_box (@code{HMGL} gr, @code{mreal} px, @code{mreal} py, @code{mreal} pz, @code{mreal} ex, @code{mreal} ey, @code{mreal} ez, @code{char *}stl) @end ifclear Рисует 3d error box в точке @var{p}=@{@var{x}, @var{y}, @var{z}@} размером @var{e}=@{@var{ex}, @var{ey}, @var{ez}@} и стилем @var{stl}. Используйте NAN в компонентах @var{e} для уменьшения рисуемых элементов. @end deftypefn @anchor{line} @deftypefn {Команда MGL} {} line @code{x1 y1 x2 y2} ['stl'=''] @deftypefnx {Команда MGL} {} line @code{x1 y1 z1 x2 y2 z2} ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Line (@code{mglPoint} p1, @code{mglPoint} p2, @code{char *}stl=@code{"B"}, @code{int}num=@code{2}) @deftypefnx {Функция С} @code{void} mgl_line (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{char *}stl, @code{int}num) @end ifclear Рисует геодезическую линию (декартовых координатах -- прямую) из точки @var{p1} в @var{p2} использую стиль линии @var{stl}. Параметр @var{num} определяет гладкость линии (число точек на линии). Если @var{num}=@code{2}, то рисуется прямая даже в криволинейных координатах (см. @ref{Curved coordinates}). Наоборот, для больших значений (например, =@code{100}) рисуется геодезическая линия (окружность в полярных координатах, парабола в параболических и т.д.). Линия рисуется даже если часть ее лежит вне диапазона осей координат. @end deftypefn @anchor{curve} @deftypefn {Команда MGL} {} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'=''] @deftypefnx {Команда MGL} {} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Curve (@code{mglPoint} p1, @code{mglPoint} d1, @code{mglPoint} p2, @code{mglPoint} d2, @code{const char *}stl=@code{"B"}, @code{int} num=@code{100}) @deftypefnx {Функция С} @code{void} mgl_curve (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} dx1, @code{mreal} dy1, @code{mreal} dz1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} dx2, @code{mreal} dy2, @code{mreal} dz2, @code{const char *}stl, @code{int} num) @end ifclear Рисует кривую Безье из точки @var{p1} в @var{p2} используя стиль линии @var{stl}. Касательные в точках пропорциональны @var{d1}, @var{d2}. Параметр @var{num} определяет гладкость линии (число точек на линии). Если @var{num}=@code{2}, то рисуется прямая даже в криволинейных координатах (см. @ref{Curved coordinates}). Наоборот, для больших значений (например, =@code{100}) рисуется геодезическая линия (окружность в полярных координатах, парабола в параболических и т.д.). Кривая рисуется даже если часть ее лежит вне диапазона осей координат. @end deftypefn @anchor{face} @deftypefn {Команда MGL} {} face @code{x1 y1 x2 y2 x3 y3 x4 y4} ['stl'=''] @deftypefnx {Команда MGL} {} face @code{x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4} ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Face (@code{mglPoint} p1, @code{mglPoint} p2, @code{mglPoint} p3, @code{mglPoint} p4, @code{const char *}stl=@code{"w"}) @deftypefnx {Функция С} @code{void} mgl_face (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} x3, @code{mreal} y3, @code{mreal} z3, @code{mreal} x4, @code{mreal} y4, @code{mreal} z4, @code{const char *}stl) @end ifclear Рисует заполненный четырехугольник (грань) с углами в точках @var{p1}, @var{p2}, @var{p3}, @var{p4} и цветом(-ами) @var{stl}. При этом цвет может быть один для всей грани, или различным если указаны все 4 цвета. Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. @end deftypefn @anchor{rect} @deftypefn {Команда MGL} {} rect @code{x1 y1 x2 y2} ['stl'=''] @deftypefnx {Команда MGL} {} rect @code{x1 y1 z1 x2 y2 z2} ['stl'=''] Рисует закрашенный прямоугольник (грань) с вершинами @{@var{x1}, @var{y1}, @var{z1}@} и @{@var{x2}, @var{y2}, @var{z2}@} цветом @var{stl}. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета. Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. @end deftypefn @anchor{facex} @anchor{facey} @anchor{facez} @deftypefn {Команда MGL} {} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}] @deftypefnx {Команда MGL} {} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}] @deftypefnx {Команда MGL} {} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} FaceX (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wy, @code{mreal} wz, @code{const char *}stl=@code{"w"}, @code{mreal} d1=@code{0}, @code{mreal} d2=@code{0}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} FaceY (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wz, @code{const char *}stl=@code{"w"}, @code{mreal} d1=@code{0}, @code{mreal} d2=@code{0}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} FaceZ (@code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wy, @code{const char *}stl=@code{"w"}, @code{mreal} d1=@code{0}, @code{mreal} d2=@code{0}) @deftypefnx {Функция С} @code{void} mgl_facex (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wy, @code{mreal} wz, @code{const char *}stl, @code{mreal} d1, @code{mreal} d2) @deftypefnx {Функция С} @code{void} mgl_facey (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wz, @code{const char *}stl, @code{mreal} d1, @code{mreal} d2) @deftypefnx {Функция С} @code{void} mgl_facez (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} wx, @code{mreal} wy, @code{const char *}stl, @code{mreal} d1, @code{mreal} d2) @end ifclear Рисует закрашенный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета. Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник). Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. @end deftypefn @anchor{sphere} @deftypefn {Команда MGL} {} sphere @code{x0 y0 r} ['col'='r'] @deftypefnx {Команда MGL} {} sphere @code{x0 y0 z0 r} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Sphere (@code{mglPoint} p, @code{mreal} r, @code{const char *}stl=@code{"r"}) @deftypefnx {Функция С} @code{void} mgl_sphere (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} r, @code{const char *}stl) @end ifclear Рисует сферу радиуса @var{r} с центром в точке @var{p}=@{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl}. @end deftypefn @anchor{drop} @deftypefn {Команда MGL} {} drop @code{x0 y0 dx dy r} ['col'='r' @code{sh=1 asp=1}] @deftypefnx {Команда MGL} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='r' @code{sh=1 asp=1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{mreal} r, @code{const char *}col=@code{"r"}, @code{mreal} shift=@code{1}, @code{mreal} ap=@code{1}) @deftypefnx {Функция С} @code{void} mgl_drop (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{mreal} r, @code{const char *}col, @code{mreal} shift, @code{mreal} ap) @end ifclear Рисует каплю радиуса @var{r} в точке @var{p} вытянутую вдоль направления @var{d} цветом @var{col}. Параметр @var{shift} определяет степень вытянутости: @samp{0} -- сфера, @samp{1} -- классическая капля. Параметр @var{ap} определяет относительную ширину капли (аналог "эллиптичности" для сферы). @end deftypefn @anchor{cone} @deftypefn {Команда MGL} {} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'='' @code{edge=off}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cone (@code{mglPoint} p1, @code{mglPoint} p2, @code{mreal} r1, @code{mreal} r2=@code{-1}, @code{const char *}stl=@code{"B"}, @code{bool} edge=@code{false}) @deftypefnx {Функция С} @code{void} mgl_cone (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} r1, @code{mreal} r2, @code{const char *}stl, @code{int} draw_edge) @end ifclear Рисует трубу (или усеченный конус если @var{edge}=@code{false}) между точками @var{p1}, @var{p2} с радиусами на концах @var{r1}, @var{r2}. Если @var{r2}<0, то полагается @var{r2}=@var{r1}. Цвет конуса задается строкой @var{stl}. Параметр @var{stl} может содержать: @itemize @bullet @item @samp{@@} для рисования торцов; @item @samp{#} для сетчатой фигуры; @item @samp{t} для рисования цилиндра вместо конуса/призмы; @item @samp{4}, @samp{6}, @samp{8} для рисования квадратной, шестиугольной или восьмиугольной призмы вместо конуса. @end itemize @end deftypefn @anchor{circle} @deftypefn {Команда MGL} {} circle @code{x0 y0 r} ['col'='r'] @deftypefnx {Команда MGL} {} circle @code{x0 y0 z0 r} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Circle (@code{mglPoint} p, @code{mreal} r, @code{const char *}stl=@code{"r"}) @end ifclear Рисует круг радиуса @var{r} с центром в точке @var{p}=@{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). @end deftypefn @anchor{ellipse} @deftypefn {Команда MGL} {} ellipse @code{x1 y1 x2 y2 r} ['col'='r'] @deftypefnx {Команда MGL} {} ellipse @code{x1 y1 z1 x2 y2 z2 r} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Ellipse (@code{mglPoint} p1, @code{mglPoint} p2, @code{mreal} r, @code{const char *}col=@code{"r"}) @deftypefnx {Функция С} @code{void} mgl_ellipse (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} r, @code{const char *}col) @end ifclear Рисует эллипс радиуса @var{r} с фокусами в точках @var{p1}, @var{p2} цветом @var{stl}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). @end deftypefn @anchor{rhomb} @deftypefn {Команда MGL} {} rhomb @code{x1 y1 x2 y2 r} ['col'='r'] @deftypefnx {Команда MGL} {} rhomb @code{x1 y1 z1 x2 y2 z2 r} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Rhomb (@code{mglPoint} p1, @code{mglPoint} p2, @code{mreal} r, @code{const char *}col=@code{"r"}) @deftypefnx {Функция С} @code{void} mgl_rhomb (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{mreal} r, @code{const char *}col) @end ifclear Рисует ромб ширины @var{r} с вершинами в точках @var{p1}, @var{p2} цветом @var{stl}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). Если @var{col} содержит 3 цвета, то используется градиентная заливка. @end deftypefn @anchor{arc} @deftypefn {Команда MGL} {} arc @code{x0 y0 x1 y1 a} ['col'='r'] @deftypefnx {Команда MGL} {} arc @code{x0 y0 z0 x1 y1 a} ['col'='r'] @deftypefnx {Команда MGL} {} arc @code{x0 y0 z0 xa ya za x1 y1 z1 a} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Arc (@code{mglPoint} p0, @code{mglPoint} p1, @code{mreal} a, @code{const char *}col=@code{"r"}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Arc (@code{mglPoint} p0, @code{mglPoint} pa, @code{mglPoint} p1, @code{mreal} a, @code{const char *}col=@code{"r"}) @deftypefnx {Функция С} @code{void} mgl_arc (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} x1, @code{mreal} y1, @code{mreal} a, @code{const char *}col) @deftypefnx {Функция С} @code{void} mgl_arc_ext (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} xa, @code{mreal} ya, @code{mreal} za, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} a, @code{const char *}col) @end ifclear Рисует дугу вокруг оси @var{pa} (по умолчанию вокруг оси z @var{pa}=@{0,0,1@}) с центром в @var{p0}, начиная с точки @var{p1}. Параметр @var{a} задает угол дуги в градусах. Строка @var{col} задает цвет дуги и тип стрелок на краях. @end deftypefn @anchor{polygon} @deftypefn {Команда MGL} {} polygon @code{x0 y0 x1 y1 num} ['col'='r'] @deftypefnx {Команда MGL} {} polygon @code{x0 y0 z0 x1 y1 z1 num} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Polygon (@code{mglPoint} p0, @code{mglPoint} p1, @code{int} num, @code{const char *}col=@code{"r"}) @deftypefnx {Функция С} @code{void} mgl_polygon (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{int} num, @code{const char *}col) @end ifclear Рисует правильный @var{num}-угольник с центром в @var{p0} с первой вершиной в @var{p1} цветом @var{col}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). @c Если @var{col} содержит 3 цвета, то используется градиентная заливка. @end deftypefn @anchor{logo} @deftypefn {Команда MGL} {} logo 'fname' [smooth=off] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Logo (@code{const char *}fname, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Logo (@code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_logo (@code{HMGL} gr, @code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_logo_file (@code{HMGL} gr, @code{const char *}fname, @code{bool} smooth, @code{const char *}opt) @end ifclear Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command options}. Bitmap can be loaded from file or specified as RGBA values for pixels. Parameter @var{smooth} set to draw bitmap without or with color interpolation. @end deftypefn @anchor{symbol} @deftypefn {Команда MGL} {} symbol @code{x y} 'id' ['fnt'='' @code{size=-1}] @deftypefnx {Команда MGL} {} symbol @code{x y z} 'id' ['fnt'='' @code{size=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Symbol (@code{mglPoint} p, @code{char} id, @code{const char *}fnt=@code{""}, @code{mreal} size=@code{-1}) @deftypefnx {Функция С} @code{void} mgl_symbol (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{char} id, @code{const char *}fnt, @code{mreal} size) @end ifclear Рисует определенный пользователем символ с именем @var{id} в точке @var{p} стилем @var{fnt}. Размер задается параметром @var{size} (по умолчанию @code{-1}). Строка @var{fnt} может содержать цвет (до разделителя @samp{:}); стили @samp{a} или @samp{A} для вывода в абсолютной позиции (@{@var{x}, @var{y}@} полагаются в диапазоне [0,1]) относительно рисунка (для @samp{A}) или subplot/inplot (для @samp{a}); и стиль @samp{w} для рисования только контура символа. @end deftypefn @deftypefn {Команда MGL} {} symbol @code{x y dx dy} 'id' ['fnt'=':L' @code{size=-1}] @deftypefnx {Команда MGL} {} symbol @code{x y z dx dy dz} 'id' ['fnt'=':L' @code{size=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Symbol (@code{mglPoint} p, @code{mglPoint} d, @code{char} id, @code{const char *}fnt=@code{""}, @code{mreal} size=@code{-1}) @deftypefnx {Функция С} @code{void} mgl_symbol_dir (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{const char *}text, @code{const char *}fnt, @code{mreal} size) @end ifclear Аналогично предыдущему, но символ рисуется в повернутым в направлении @var{d}. @end deftypefn @anchor{addsymbol} @deftypefn {Команда MGL} {} addsymbol 'id' xdat ydat @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} DefineSymbol (@code{char} id, @code{const mglDataA &}xdat, @code{const mglDataA &}ydat) @deftypefnx {Функция С} @code{void} mgl_define_symbol (@code{HMGL} gr, @code{HCDT} xdat, @code{HCDT} ydat) @end ifclear Добавляет определенный пользователем символ с именем @var{id} и границей @{@var{xdat}, @var{ydat}@}. Значения @code{NAN} задают разрыв (скачок) граничной кривой. @end deftypefn @c ################################################################## @external{} @node Text printing, Axis and Colorbar, Primitives, MathGL core @section Вывод текста @nav{} @ifclear UDAV @cindex Puts @cindex Putsw @end ifclear @cindex Text @cindex fgets Функции для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. MathGL позволяет использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее см. @ref{Font styles}). Все функции вывода текста имеют варианты для 8-bit строк (@code{char *}) и для Unicode строк (@code{wchar_t *}). В первом случае используется конверсия из текущей локали, т.е. иногда вам требуется явно указать локаль с помощью функции @code{setlocale()}. Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=-@var{size}*@code{SetFontSize()}) если отрицателен. Начертание шрифта (STIX, arial, courier, times и др.) можно изменить с помощью функции LoadFont(). @xref{Font settings}. Параметры шрифта задаются строкой, которая может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (см. @ref{Color styles}). Также после символа @samp{:} можно указать символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRCTV}). Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю, @samp{T} -- под текстом, @samp{V} -- по центру вертикально. Например, строка @samp{b:iC} соответствует курсиву синего цвета с выравниванием по центру. Начиная с MathGL версии 2.3, вы можете задать цветовой градиент для выводимой строки (см. @ref{Color scheme}). Если строка содержит символы @samp{aA}, то текст выводится в абсолютных координатах (полагаются в диапазоне [0,1]). При этом используются координаты относительно рисунка (если указано @samp{A}) или относительно последнего subplot/inplot (если указано @samp{a}). Если строка содержит символ @samp{@@}, то вокруг текста рисуется прямоугольник. @sref{Text features} @anchor{text} @deftypefn {Команда MGL} {} text @code{x y} 'text' ['fnt'='' @code{size=-1}] @deftypefnx {Команда MGL} {} text @code{x y z} 'text' ['fnt'='' @code{size=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{const char *}text, @code{const char *}fnt=@code{":C"}, @code{mreal} size=@code{-1}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{const wchar_t *}text, @code{const char *}fnt=@code{":C"}, @code{mreal} size=@code{-1}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Puts (@code{mreal} x, @code{mreal} y, @code{const char *}text, @code{const char *}fnt=@code{":AC"}, @code{mreal} size=@code{-1}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Putsw (@code{mreal} x, @code{mreal} y, @code{const wchar_t *}text, @code{const char *}fnt=@code{":AC"}, @code{mreal} size=@code{-1}) @deftypefnx {Функция С} @code{void} mgl_puts (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const char *}text, @code{const char *}fnt, @code{mreal} size) @deftypefnx {Функция С} @code{void} mgl_putsw (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{mreal} size) @end ifclear Выводит строку @var{text} от точки @var{p} шрифтом определяемым строкой @var{fnt}. Размер шрифта задается параметром @var{size} (по умолчанию @code{-1}). @end deftypefn @deftypefn {Команда MGL} {} text @code{x y dx dy} 'text' ['fnt'=':L' @code{size=-1}] @deftypefnx {Команда MGL} {} text @code{x y z dx dy dz} 'text' ['fnt'=':L' @code{size=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{mglPoint} d, @code{const char *}text, @code{const char *}fnt=@code{':L'}, @code{mreal} size=@code{-1}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{mglPoint} d, @code{const wchar_t *}text, @code{const char *}fnt=@code{':L'}, @code{mreal} size=@code{-1}) @deftypefnx {Функция С} @code{void} mgl_puts_dir (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{const char *}text, @code{const char *}fnt, @code{mreal} size) @deftypefnx {Функция С} @code{void} mgl_putsw_dir (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{mreal} dx, @code{mreal} dy, @code{mreal} dz, @code{const wchar_t *}text, @code{const char *}fnt, @code{mreal} size) @end ifclear Выводит строку @var{text} от точки @var{p} вдоль направления @var{d}. Параметр @var{fnt} задает стиль текста и указывает выводить текст под линией (@samp{T}) или над ней (@samp{t}). @end deftypefn @anchor{fgets} @deftypefn {Команда MGL} {} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] @deftypefnx {Команда MGL} {} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] Выводит @var{n}-ую строку файла @var{fname} от точки @{@var{x},@var{y},@var{z}@} шрифтом @var{fnt} и размером @var{size}. По умолчанию используются параметры заданные командой @ref{font}. @end deftypefn @deftypefn {Команда MGL} {} text ydat 'text' ['fnt'=''] @deftypefnx {Команда MGL} {} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] @deftypefnx {Команда MGL} {} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglDataA &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglDataA &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_text_y (@code{HMGL} gr, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textw_y (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_text_xy (@code{HCDT} x, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textw_xy (@code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_text_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textw_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) @end ifclear Выводит строку @var{text} вдоль кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} шрифтом @var{fnt}. Строка @var{fnt} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста под кривой. Размеры по 1-ой размерности должны быть одинаковы для всех массивов @code{x.nx=y.nx=z.nx}. Если массив @var{x} не указан, то используется "автоматический" массив со значениями в диапазоне осей координат (см. @ref{Ranges (bounding box)}). Если массив @var{z} не указан, то используется минимальное значение оси z. Строка @var{opt} содержит опции команды (см. @ref{Command options}). @end deftypefn @c ################################################################## @external{} @node Axis and Colorbar, Legend, Text printing, MathGL core @section Оси и Colorbar @nav{} @cindex Axis @cindex Box @cindex Grid @cindex Colorbar @cindex Label Эти функции рисуют объекты для "измерения" типа осей координат, цветовой таблицы (colorbar), сетку по осям, обрамляющий параллелепипед и подписи по осям координат. См. также см. @ref{Axis settings}. @anchor{axis} @deftypefn {Команда MGL} {} axis ['dir'='xyz' 'stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir, @code{const char *}stl, @code{const char *}opt) @end ifclear Рисует оси координат и метки на них (см. @ref{Axis settings}) в направлениях @samp{xyz}, указанных строкой @var{dir}. Строка @var{dir} может содержать: @itemize @item @samp{xyz} для рисования соответствующих осей; @item @samp{XYZ} для рисования соответствующих осей с метками с другой стороны; @item @samp{~} или @samp{_} для осей без подписей; @item @samp{U} для невращаемых подписей; @item @samp{^} для инвертирования положения по умолчанию; @item @samp{!} для отключения улучшения вида меток (см. @ref{tuneticks}); @item @samp{AKDTVISO} для вывода стрелки на конце оси; @item @samp{a} для принудительной автоматической расстановки меток; @item @samp{:} для рисования линий через точку (0,0,0); @item @samp{f} для вывода чисел в фиксированном формате; @item @samp{E} для вывода @samp{E} вместо @samp{e}; @item @samp{F} для вывода в формате LaTeX; @item @samp{+} для вывода @samp{+} для положительных чисел; @item @samp{-} для вывода обычного @samp{-}; @item @samp{0123456789} для задания точности при выводе чисел. @end itemize Стиль меток и оси(ей) задается строкой @var{stl}. Опция @code{value} задает угол вращения меток оси. @sref{Axis and ticks} @end deftypefn @anchor{colorbar} @deftypefn {Команда MGL} {} colorbar ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch=@code{""}) @deftypefnx {Функция С} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch) @end ifclear Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) с краю от графика. Строка @var{sch} также может содержать: @itemize @item @samp{<>^_} для расположения слева, справа, сверху или снизу соответственно; @item @samp{I} для расположения около осей (по умолчанию, на краях subplot); @item @samp{A} для использования абсолютных координат (относительно рисунка); @item @samp{~} для colorbar без подписей; @item @samp{!} для отключения улучшения вида меток (см. @ref{tuneticks}); @item @samp{a} для принудительной автоматической расстановки меток; @item @samp{f} для вывода чисел в фиксированном формате; @item @samp{E} для вывода @samp{E} вместо @samp{e}; @item @samp{F} для вывода в формате LaTeX; @item @samp{+} для вывода @samp{+} для положительных чисел; @item @samp{-} для вывода обычного @samp{-}; @item @samp{0123456789} для задания точности при выводе чисел. @end itemize @sref{Colorbars} @end deftypefn @deftypefn {Команда MGL} {} colorbar vdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Colorbar (@code{const mglDataA &}v, @code{const char *}sch=@code{""}) @deftypefnx {Функция С} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch) @end ifclear Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{v}. @sref{ContD sample} @end deftypefn @deftypefn {Команда MGL} {} colorbar 'sch' @code{x y [w=1 h=1]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w=@code{1}, @code{mreal} h=@code{1}) @deftypefnx {Функция С} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w, @code{mreal} h) @end ifclear Аналогично первому, но в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar. @end deftypefn @deftypefn {Команда MGL} {} colorbar vdat 'sch' @code{x y [w=1 h=1]} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Colorbar (@code{const mglDataA &}v, @code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w=@code{1}, @code{mreal} h=@code{1}) @deftypefnx {Функция С} @code{void} mgl_colorbar_val_ext (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{mreal} x, @code{mreal} y, @code{mreal} w, @code{mreal} h) @end ifclear Аналогично предыдущему, но для цветовой схемы @var{sch} без сглаживания с заданными значениями @var{v}. @sref{ContD sample} @end deftypefn @anchor{grid} @deftypefn {Команда MGL} {} grid ['dir'='xyz' 'pen'='B'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B"}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_axis_grid (@code{HMGL} gr, @code{const char *}dir, @code{const char *}pen, @code{const char *}opt) @end ifclear Рисует линии сетки в направлениях перпендикулярным @var{dir}. Если @var{dir} содержит @samp{!}, то линии рисуются также и для координат под-меток. Шаг сетки такой же как у меток осей координат. Стиль линий задается параметром @var{pen} (по умолчанию -- сплошная темно синяя линия @samp{B-}). @end deftypefn @anchor{box} @deftypefn {Команда MGL} {} box ['stl'='k' @code{ticks=on}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Box (@code{const char *}col=@code{""}, @code{bool} ticks=@code{true}) @deftypefnx {Функция С} @code{void} mgl_box (@code{HMGL} gr) @deftypefnx {Функция С} @code{void} mgl_box_str (@code{HMGL} gr, @code{const char *}col, @code{int} ticks) @end ifclear Рисует ограничивающий параллелепипед цветом @var{col}. Если @var{col} содержит @samp{@@}, то рисуются закрашенные задние грани. При этом первый цвет используется для граней (по умолчанию светло жёлтый), а последний для рёбер и меток. @end deftypefn @anchor{xlabel} @anchor{ylabel} @anchor{zlabel} @anchor{tlabel} @deftypefn {Команда MGL} {} xlabel 'text' [@code{pos=1}] @deftypefnx {Команда MGL} {} ylabel 'text' [@code{pos=1}] @deftypefnx {Команда MGL} {} zlabel 'text' [@code{pos=1}] @deftypefnx {Команда MGL} {} tlabel 'text' [@code{pos=1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{char} dir, @code{const char *}text, @code{mreal} pos=@code{1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{mreal} pos=@code{1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_label (@code{HMGL} gr, @code{char} dir, @code{const char *}text, @code{mreal} pos, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_labelw (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}text, @code{mreal} pos, @code{const char *}opt) @end ifclear Выводит подпись @var{text} для оси @var{dir}=@samp{x},@samp{y},@samp{z},@samp{t} (где @samp{t} -- ``тернарная'' ось @math{t=1-x-y}). Параметр @var{pos} задает положение подписи: при @var{pos}=0 -- по центру оси, при @var{pos}>0 -- около максимальных значений, при @var{pos}<0 -- около минимальных значений. Опция @code{value} задает дополнительный сдвиг текста. @xref{Text printing}. @end deftypefn @c ################################################################## @external{} @node Legend, 1D plotting, Axis and Colorbar, MathGL core @section Легенда @nav{} @cindex Legend @cindex AddLegend @cindex ClearLegend @cindex SetLegendBox @cindex SetLegendMarks Эти функции обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд). Можно использовать непосредственно массивы строк, или накопление во внутренние массивы с помощью функции AddLegend() с последующим отображением. Положение легенды можно задать автоматически или вручную. Параметры @var{fnt} и @var{size} задают стиль и размер шрифта (см. @ref{Font settings}). Опция @code{value} задает зазор между примером линии и текстом (по умолчанию 0.1). Опция @code{size} задает размер текста. Если стиль линии пустой, то соответствующий текст печатается без отступа. Строка @var{fnt} может содержать: @itemize @bullet @item стиль текста для записей; @item @samp{A} для расположения относительно всего рисунка, а не текущего subplot; @item @samp{^} для размещения снаружи от указанных координат; @item @samp{#} для вывода прямоугольника вокруг легенды; @item @samp{-} для горизонтального расположения записей; @item цвета для заливки (1-ый), для границы (2-ой) и для текста записей (3-ий). Если указано меньше трех цветов, то цвет границы черный (для 2 и менее цветов), и цвет заливки белый (для 1 и менее цвета). @end itemize @sref{Legend sample} @anchor{legend} @deftypefn {Команда MGL} {} legend [@code{pos=3} 'fnt'='#'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Legend (@code{int} pos=@code{0x3}, @code{const char *}fnt=@code{"#"}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_legend (@code{HMGL} gr, @code{int} pos, @code{const char *}fnt, @code{const char *}opt) @end ifclear Рисует легенду из накопленных записей шрифтом @var{fnt}. Параметр @var{pos} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию). Опция @code{value} задает зазор между примером линии и текстом (по умолчанию 0.1). @end deftypefn @deftypefn {Команда MGL} {} legend @code{x y} ['fnt'='#'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Legend (@code{mreal} x, @code{mreal} y, @code{const char *}fnt=@code{"#"}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_legend_pos (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{const char *}fnt, @code{const char *}opt) @end ifclear Рисует легенду из накопленных записей шрифтом @var{fnt}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1]. Опция @code{value} задает зазор между примером линии и текстом (по умолчанию 0.1). @end deftypefn @anchor{addlegend} @deftypefn {Команда MGL} {} addlegend 'text' 'stl' @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} AddLegend (@code{const char *}text, @code{const char *}style) @deftypefnx {Метод класса @code{mglGraph}} @code{void} AddLegend (@code{const wchar_t *}text, @code{const char *}style) @deftypefnx {Функция С} @code{void} mgl_add_legend (@code{HMGL} gr, @code{const char *}text, @code{const char *}style) @deftypefnx {Функция С} @code{void} mgl_add_legendw (@code{HMGL} gr, @code{const wchar_t *}text, @code{const char *}style) @end ifclear Добавляет описание @var{text} кривой со стилем @var{style} (см. @ref{Line styles}) во внутренний массив записей легенды. @end deftypefn @anchor{clearlegend} @deftypefn {Команда MGL} {} clearlegend @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ClearLegend () @deftypefnx {Функция С} @code{void} mgl_clear_legend (@code{HMGL} gr) @end ifclear Очищает внутренний массив записей легенды. @end deftypefn @anchor{legendmarks} @deftypefn {Команда MGL} {} legendmarks @code{val} @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SetLegendMarks (@code{int} num) @deftypefnx {Функция С} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num) @end ifclear Задает число маркеров в легенде. По умолчанию используется 1 маркер. @end deftypefn @c ################################################################## @external{} @node 1D plotting, 2D plotting, Legend, MathGL core @section 1D графики @nav{} @cindex Plot @cindex Radar @cindex Tens @cindex Area @cindex Region @cindex Stem @cindex Bars @cindex Barh @cindex Chart @cindex Step @cindex Torus @cindex Tube @cindex Mark @cindex TextMark @cindex Error @cindex BoxPlot @cindex Candle @cindex Tape @cindex Label @cindex Cones Эти функции строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. По умолчанию (если отсутствуют) значения @var{x}[i] равно распределены в диапазоне оси х, и @var{z}[i] равно минимальному значению оси z. Графики рисуются для каждой строки массива данных если он двумерный. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (см. @ref{Line styles}). По умолчанию (@code{pen=""}) рисуется сплошная линия с текущим цветом из палитры (см. @ref{Palette and colors}). Символ @samp{!} в строке задает использование нового цвета из палитры для каждой точки данных (не для всей кривой, как по умолчанию). Строка @var{opt} задает опции графика (см. @ref{Command options}). @sref{1D samples} @anchor{plot} @deftypefn {Команда MGL} {} plot ydat ['stl'=''] @deftypefnx {Команда MGL} {} plot xdat ydat ['stl'=''] @deftypefnx {Команда MGL} {} plot xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Plot (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Plot (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Plot (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_plot (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_plot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют ломанную линию по точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. Если @var{pen} содержит @samp{~}, то число сегментов уменьшается для квази-линейных участков. См. также @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}, @ref{tape}, @ref{meshnum}. @sref{Plot sample} @end deftypefn @anchor{radar} @deftypefn {Команда MGL} {} radar adat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Radar (@code{const mglDataA &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_radar (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют radar chart, представляющий собой ломанную с вершинами на радиальных линиях (типа ломанной в полярных координатах). Параметр @code{value} в опциях @var{opt} задает дополнительный сдвиг данных (т.е. использование @var{a}+@code{value} вместо @var{a}). Если @var{pen} содержит @samp{#}, то рисуется "сетка" (радиальные линии). Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. См. также @ref{plot}, @ref{meshnum}. @sref{Radar sample} @end deftypefn @anchor{step} @deftypefn {Команда MGL} {} step ydat ['stl'=''] @deftypefnx {Команда MGL} {} step xdat ydat ['stl'=''] @deftypefnx {Команда MGL} {} step xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Step (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Step (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Step (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_step (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_step_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_step_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют ступеньки для точек массива. Если @var{x}.nx>@var{y}.nx, то массив @var{x} задает границы ступенек, а не их конец. См. также @ref{plot}, @ref{stem}, @ref{tile}, @ref{boxs}, @ref{meshnum}. @sref{Step sample} @end deftypefn @anchor{tens} @deftypefn {Команда MGL} {} tens ydat cdat ['stl'=''] @deftypefnx {Команда MGL} {} tens xdat ydat cdat ['stl'=''] @deftypefnx {Команда MGL} {} tens xdat ydat zdat cdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tens (@code{const mglDataA &}y, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tens (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tens (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tens (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). Строка @var{pen} задает цветовую схему (см. @ref{Color scheme}) и стиль линий и/или маркеров (см. @ref{Line styles}). Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. Если @var{pen} содержит @samp{~}, то число сегментов уменьшается для квази-линейных участков. См. также @ref{plot}, @ref{mesh}, @ref{fall}, @ref{meshnum}. @sref{Tens sample} @end deftypefn @anchor{tape} @deftypefn {Команда MGL} {} tape ydat ['stl'=''] @deftypefnx {Команда MGL} {} tape xdat ydat ['stl'=''] @deftypefnx {Команда MGL} {} tape xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tape (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tape (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tape (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tape (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tape_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tape_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют ленты, которые вращаются вокруг кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} как её нормали. Начальная лента(ы) выбираются в плоскости x-y (для @samp{x} в @var{pen}) и/или y-z (для @samp{x} в @var{pen}). Ширина лент пропорциональна @ref{barwidth}, а также может быть изменена опцией @code{value}. См. также @ref{plot}, @ref{flow}, @ref{barwidth}. @sref{Tape sample} @end deftypefn @anchor{area} @deftypefn {Команда MGL} {} area ydat ['stl'=''] @deftypefnx {Команда MGL} {} area xdat ydat ['stl'=''] @deftypefnx {Команда MGL} {} area xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Area (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Area (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Area (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_area (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_area_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют ломанную линию между точками и закрашивает её вниз до плоскости осей координат. Градиентная заливка используется если число цветов равно удвоенному число кривых. Если @var{pen} содержит @samp{#}, то рисуется только каркас. Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. См. также @ref{plot}, @ref{bars}, @ref{stem}, @ref{region}. @sref{Area sample} @end deftypefn @anchor{region} @deftypefn {Команда MGL} {} region ydat1 ydat2 ['stl'=''] @deftypefnx {Команда MGL} {} region xdat ydat1 ydat2 ['stl'=''] @deftypefnx {Команда MGL} {} region xdat1 ydat1 xdat2 ydat2 ['stl'=''] @deftypefnx {Команда MGL} {} region xdat1 ydat1 zdat1 xdat2 ydat2 zdat2 ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Region (@code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Region (@code{const mglDataA &}x, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Region (@code{const mglDataA &}x1, @code{const mglDataA &}y1, @code{const mglDataA &}x2, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Region (@code{const mglDataA &}x1, @code{const mglDataA &}y1, @code{const mglDataA &}z1, @code{const mglDataA &}x2, @code{const mglDataA &}y2, @code{const mglDataA &}z2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_region (@code{HMGL} gr, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_region_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_region_3d (@code{HMGL} gr, @code{HCDT} x1, @code{HCDT} y1, @code{HCDT} z1, @code{HCDT} x2, @code{HCDT} y2, @code{HCDT} z2, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции закрашивают область между 2 кривыми. Градиентная заливка используется если число цветов равно удвоенному число кривых. Если в 2d версии @var{pen} содержит @samp{i}, то закрашивается только область y1} для выравнивания полосок влево, вправо или центрирования относительно их координат. @end itemize Можно использовать разные цвета для положительных и отрицательных значений если число указанных цветов равно удвоенному числу кривых для построения. Если @var{x}.nx>@var{y}.nx, то массив @var{x} задает границы полос, а не их центр. См. также @ref{barh}, @ref{cones}, @ref{area}, @ref{stem}, @ref{chart}, @ref{barwidth}. @sref{Bars sample} @end deftypefn @anchor{barh} @deftypefn {Команда MGL} {} barh vdat ['stl'=''] @deftypefnx {Команда MGL} {} barh ydat vdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Barh (@code{const mglDataA &}v, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Barh (@code{const mglDataA &}y, @code{const mglDataA &}v, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_barh (@code{HMGL} gr, @code{HCDT} v, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_barh_xy (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} v, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют горизонтальные полосы (прямоугольники) из точек до плоскости осей координат. Строка @var{pen} может содержать: @itemize @bullet @item @samp{a} для вывода линий одной поверх другой (как при суммировании); @item @samp{f} для определения кумулятивного эффекта последовательности положительных и отрицательных значений (график типа waterfall); @item @samp{F} для использования одинаковой (минимальной) ширины полосок; @item @samp{<}, @samp{^} or @samp{>} для выравнивания полосок влево, вправо или центрирования относительно их координат. @end itemize Можно использовать разные цвета для положительных и отрицательных значений если число указанных цветов равно удвоенному числу кривых для построения. Если @var{x}.nx>@var{y}.nx, то массив @var{x} задает границы полос, а не их центр. См. также @ref{bars}, @ref{barwidth}. @sref{Barh sample} @end deftypefn @anchor{cones} @deftypefn {Команда MGL} {} cones ydat ['stl'=''] @deftypefnx {Команда MGL} {} cones xdat ydat ['stl'=''] @deftypefnx {Команда MGL} {} cones xdat ydat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cones (@code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cones (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cones (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cones (@code{HMGL} gr, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cones_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cones_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют конусы из точек до плоскости осей координат. Если строка @var{pen} содержит символ @samp{a}, то линии рисуются одна поверх другой. Можно использовать разные цвета для положительных и отрицательных значений если число указанных цветов равно удвоенному числу кривых для построения. Параметр @var{pen} может содержать: @itemize @bullet @item @samp{@@} для рисования торцов; @item @samp{#} для сетчатой фигуры; @item @samp{t} для рисования цилиндра вместо конуса/призмы; @item @samp{4}, @samp{6}, @samp{8} для рисования квадратной, шестиугольной или восьмиугольной призмы вместо конуса; @item @samp{<}, @samp{^} или @samp{>} для выравнивания конусов влево, вправо или по центру относительно их координат. @end itemize См. также @ref{bars}, @ref{cone}, @ref{barwidth}. @sref{Cones sample} @end deftypefn @anchor{chart} @deftypefn {Команда MGL} {} chart adat ['col'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Chart (@code{const mglDataA &}a, @code{const char *}col=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_chart (@code{HMGL} gr, @code{HCDT} a, @code{const char *}col, @code{const char *}opt) @end ifclear Рисует цветные полосы (пояса) для массива данных @var{a}. Число полос равно числу строк @var{a} (равно @var{a.ny}). Цвет полос поочерёдно меняется из цветов указанных в @var{col} или в палитре (см. @ref{Palette and colors}). Пробел в цветах соответствует прозрачному "цвету", т.е. если @var{col} содержит пробел(ы), то соответствующая полоса не рисуется. Ширина полосы пропорциональна значению элемента в @var{a}. График строится только для массивов не содержащих отрицательных значений. Если строка @var{col} содержит @samp{#}, то рисуется также чёрная граница полос. График выглядит лучше в (после вращения системы координат) и/или в полярной системе координат (становится Pie chart). @sref{Chart sample} @end deftypefn @anchor{boxplot} @deftypefn {Команда MGL} {} boxplot adat ['stl'=''] @deftypefnx {Команда MGL} {} boxplot xdat adat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} BoxPlot (@code{const mglDataA &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} BoxPlot (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_boxplot (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_boxplot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют boxplot (называемый также как box-and-whisker diagram или как "ящик с усами") в точках @var{x}[i] на плоскости @var{z} = @var{zVal} (по умолчанию @var{z} равно минимальному значению оси z). Это график, компактно изображающий распределение вероятностей @var{a}[i,j] (минимум, нижний квартиль (Q1), медиана (Q2), верхний квартиль (Q3) и максимум) вдоль второго (j-го) направления. Если @var{pen} содержит @samp{<}, @samp{^} или @samp{>}, то полоски будут выровнены влево, вправо или центрированы относительно их координат. См. также @ref{plot}, @ref{error}, @ref{bars}, @ref{barwidth}. @sref{BoxPlot sample} @end deftypefn @anchor{candle} @deftypefn {Команда MGL} {} candle vdat1 ['stl'=''] @deftypefnx {Команда MGL} {} candle vdat1 vdat2 ['stl'=''] @deftypefnx {Команда MGL} {} candle vdat1 ydat1 ydat2 ['stl'=''] @deftypefnx {Команда MGL} {} candle vdat1 vdat2 ydat1 ydat2 ['stl'=''] @deftypefnx {Команда MGL} {} candle xdat vdat1 vdat2 ydat1 ydat2 ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const mglDataA &}v2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}v1, @code{const mglDataA &}v2, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Candle (@code{const mglDataA &}x, @code{const mglDataA &}v1, @code{const mglDataA &}v2, @code{const mglDataA &}y1, @code{const mglDataA &}y2, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_candle (@code{HMGL} gr, @code{HCDT} v1, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_candle_yv (@code{HMGL} gr, @code{HCDT} v1, @code{HCDT} v2, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_candle_xyv (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} v1, @code{HCDT} v2, @code{HCDT} y1, @code{HCDT} y2, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют candlestick chart в точках @var{x}[i]. Этот график показывает прямоугольником ("свечой") диапазон изменения величины. Прозрачная (белая) свеча соответствует росту величины @var{v1}[i]<@var{v2}[i], чёрная -- уменьшению. "Тени" показывают минимальное @var{y1} и максимальное @var{y2} значения. Если @var{v2} отсутствует, то он определяется как @var{v2}[i]=@var{v1}[i+1]. Можно использовать разные цвета для растущих и падающих дней если число указанных цветов равно удвоенному числу кривых для построения. Если @var{pen} содержит @samp{#}, то прозрачная свеча будет использована и при 2-цветной схеме. См. также @ref{plot}, @ref{bars}, @ref{ohlc}, @ref{barwidth}. @sref{Candle sample} @end deftypefn @anchor{ohlc} @deftypefn {Команда MGL} {} ohlc odat hdat ldat cdat ['stl'=''] @deftypefnx {Команда MGL} {} ohlc xdat odat hdat ldat cdat ['stl'=''] @ifclear UDAV @deftypefnx {MМетод класса @code{mglGraph}} @code{void} OHLC (@code{const mglDataA &}o, @code{const mglDataA &}h, @code{const mglDataA &}l, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} OHLC (@code{const mglDataA &}x, @code{const mglDataA &}o, @code{const mglDataA &}h, @code{const mglDataA &}l, @code{const mglDataA &}c, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_ohlc (@code{HMGL} gr, @code{HCDT} o, @code{HCDT} h, @code{HCDT} l, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_ohlc_x (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} o, @code{HCDT} h, @code{HCDT} l, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют Open-High-Low-Close диаграмму. Этот график содержит вертикальные линии между максимальным @var{h} и минимальным @var{l} значениями, и горизонтальные линии перед/после вертикальной линии для начального @var{o} и конечного @var{c} значений процесса (обычно цены). Можно использовать разные цвета для растущих и падающих дней если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{candle}, @ref{plot}, @ref{barwidth}. @sref{OHLC sample} @end deftypefn @anchor{error} @deftypefn {Команда MGL} {} error ydat yerr ['stl'=''] @deftypefnx {Команда MGL} {} error xdat ydat yerr ['stl'=''] @deftypefnx {Команда MGL} {} error xdat ydat xerr yerr ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Error (@code{const mglDataA &}y, @code{const mglDataA &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Error (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Error (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ex, @code{const mglDataA &}ey, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_error (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_error_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_error_exy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ex, @code{HCDT} ey, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют размер ошибки @{@var{ex}[i], @var{ey}[i]@} в точках @{@var{x}[i], @var{y}[i]@} на плоскости @var{z} = @var{zVal} (по умолчанию @var{z} равно минимальному значению оси z). Такой график полезен для отображения ошибки эксперимента, вычислений и пр. Если @var{pen} содержит @samp{@@}, то будут использованы большие полупрозрачные маркеры. См. также @ref{plot}, @ref{mark}. @sref{Error sample} @end deftypefn @anchor{mark} @deftypefn {Команда MGL} {} mark ydat rdat ['stl'=''] @deftypefnx {Команда MGL} {} mark xdat ydat rdat ['stl'=''] @deftypefnx {Команда MGL} {} mark xdat ydat zdat rdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Mark (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Mark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Mark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_mark_y (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_mark_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_mark_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют маркеры размером @var{r}[i]*@ref{marksize} (см. @ref{Default sizes}) в точках @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Для рисования маркеров одинакового размера можно использовать функцию @ref{plot} с невидимой линией (со стилем содержащим @samp{ }). Для маркеров с размером как у координат можно использовать @ref{error} со стилем @samp{@@}. См. также @ref{plot}, @ref{textmark}, @ref{error}, @ref{stem}, @ref{meshnum}. @sref{Mark sample} @end deftypefn @anchor{textmark} @deftypefn {Команда MGL} {} textmark ydat 'txt' ['stl'=''] @deftypefnx {Команда MGL} {} textmark ydat rdat 'txt' ['stl'=''] @deftypefnx {Команда MGL} {} textmark xdat ydat rdat 'txt' ['stl'=''] @deftypefnx {Команда MGL} {} textmark xdat ydat zdat rdat 'txt' ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TextMark (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_textmark (@code{HMGL} gr, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textmarkw (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textmark_yr (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textmarkw_yr (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textmark_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textmarkw_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textmark_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_textmarkw_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @end ifclear Функции рисуют текст @var{txt} как маркер с размером пропорциональным @var{r}[i]*@var{marksize} в точках @{@var{x}[i], @var{y}[i], @var{z}[i]@}. См. также @ref{plot}, @ref{mark}, @ref{stem}, @ref{meshnum}. @sref{TextMark sample} @end deftypefn @anchor{label} @deftypefn {Команда MGL} {} label ydat 'txt' ['stl'=''] @deftypefnx {Команда MGL} {} label xdat ydat 'txt' ['stl'=''] @deftypefnx {Команда MGL} {} label xdat ydat zdat 'txt' ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{const mglDataA &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{const mglDataA &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Label (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_label (@code{HMGL} gr, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_labelw (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_label_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_labelw_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_label_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_labelw_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @end ifclear Функции выводят текстовую строку @var{txt} в точках @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Если строка @var{txt} содержит @samp{%x}, @samp{%y}, @samp{%z} или @samp{%n}, то они будут заменены на значения соответствующих координат или на номер точки. Строка @var{fnt} может содержать: @itemize @item стиль текста @ref{Font styles}; @item @samp{f} для вывода чисел в фиксированном формате; @item @samp{E} для вывода @samp{E} вместо @samp{e}; @item @samp{F} для вывода в формате LaTeX; @item @samp{+} для вывода @samp{+} для положительных чисел; @item @samp{-} для вывода обычного @samp{-}; @item @samp{0123456789} для задания точности при выводе чисел. @end itemize См. также @ref{plot}, @ref{mark}, @ref{textmark}, @ref{table}. @sref{Label sample} @end deftypefn @anchor{table} @deftypefn {Команда MGL} {} table vdat 'txt' ['stl'='#'] @deftypefnx {Команда MGL} {} table x y vdat 'txt' ['stl'='#'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Table (@code{const mglDataA &}val, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Table (@code{const mglDataA &}val, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Table (@code{mreal} x, @code{mreal} y, @code{const mglDataA &}val, @code{const char *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Table (@code{mreal} x, @code{mreal} y, @code{const mglDataA &}val, @code{const wchar_t *}txt, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_table (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{HCDT} val, @code{const char *}txt, @code{const char *}fnt, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tablew (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{HCDT} val, @code{const wchar_t *}txt, @code{const char *}fnt, @code{const char *}opt) @end ifclear Рисует таблицу значений массива @var{val} с заголовками @var{txt} (разделенными символом новой строки @samp{\n}) в точке @{@var{x}, @var{y}@} (по умолчанию @{0,0@}) относительно текущего subplot. Строка @var{fnt} может содержать: @itemize @item стиль текста @ref{Font styles}; @item @samp{#} для рисования границ ячеек; @item @samp{=} для одинаковой ширины всех ячеек; @item @samp{|} для ограничения ширины таблицы шириной subplot (эквивалентно опции @samp{value 1}); @item @samp{f} для вывода чисел в фиксированном формате; @item @samp{E} для вывода @samp{E} вместо @samp{e}; @item @samp{F} для вывода в формате LaTeX; @item @samp{+} для вывода @samp{+} для положительных чисел; @item @samp{-} для вывода обычного @samp{-}; @item @samp{0123456789} для задания точности при выводе чисел. @end itemize Опция @code{value} задает ширину таблицы (по умолчанию 1). См. также @ref{plot}, @ref{label}. @sref{Table sample} @end deftypefn @anchor{iris} @deftypefn {Команда MGL} {} iris dats 'ids' ['stl'=''] @deftypefnx {Команда MGL} {} iris dats rngs 'ids' ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const char *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const wchar_t *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const mglDataA &}rngs, @code{const char *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Iris (@code{const mglDataA &}dats, @code{const mglDataA &}rngs, @code{const wchar_t *}ids, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_iris_1 (@code{HMGL} gr, @code{HCDT} dats, @code{const char *}ids, @code{const char *}stl, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_irisw_1 (@code{HMGL} gr, @code{HCDT} dats, @code{const wchar_t *}ids, @code{const char *}stl, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_iris (@code{HMGL} gr, @code{HCDT} dats, @code{HCDT} rngs, @code{const char *}ids, @code{const char *}stl, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_irisw (@code{HMGL} gr, @code{HCDT} dats, @code{HCDT} rngs, @code{const wchar_t *}ids, @code{const char *}stl, @code{const char *}opt) @end ifclear Рисует Ирисы Фишера для определения зависимостей данных @var{dats} друг от друга (см. @uref{http://en.wikipedia.org/wiki/Iris_flower_data_set}). Массив @var{rngs} размером 2*@var{dats}.nx задает диапазон изменения осей для каждой из колонки. Строка @var{ids} содержит имена колонок данных, разделенных символом @samp{;}. Опция @code{value} задает размер текста для имен данных. На график можно добавить новый набор данных если указать тот же размер @var{rngs} и использовать пустую строку имен @var{ids}. См. также @ref{plot}. @sref{Iris sample} @end deftypefn @anchor{tube} @deftypefn {Команда MGL} {} tube ydat rdat ['stl'=''] @deftypefnx {Команда MGL} {} tube ydat @code{rval} ['stl'=''] @deftypefnx {Команда MGL} {} tube xdat ydat rdat ['stl'=''] @deftypefnx {Команда MGL} {} tube xdat ydat @code{rval} ['stl'=''] @deftypefnx {Команда MGL} {} tube xdat ydat zdat rdat ['stl'=''] @deftypefnx {Команда MGL} {} tube xdat ydat zdat @code{rval} ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}y, @code{mreal} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{mreal} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tube (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{mreal} r, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tube_r (@code{HMGL} gr, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tube (@code{HMGL} gr, @code{HCDT} y, @code{mreal} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tube_xyr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tube_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{mreal} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tube_xyzr (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}pen, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tube_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{mreal} r, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют трубу радиуса @var{r}[i] вдоль кривой между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@}. См. также @ref{plot}. @sref{Tube sample} @end deftypefn @anchor{torus} @deftypefn {Команда MGL} {} torus rdat zdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Torus (@code{const mglDataA &}r, @code{const mglDataA &}z, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_torus (@code{HMGL} gr, @code{HCDT} r, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear Функции рисуют поверхность вращения кривой @{@var{r}, @var{z}@} относительно оси. Если строка @var{pen} содержит @samp{x} или @samp{z}, то ось вращения будет выбрана в указанном направлении (по умолчанию вдоль оси y). Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. См. также @ref{plot}, @ref{axial}. @sref{Torus sample} @end deftypefn @anchor{lamerey} @deftypefn {Команда MGL} {} lamerey @code{x0} ydat ['stl'=''] @deftypefnx {Команда MGL} {} lamerey @code{x0} 'y(x)' ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Lamerey (@code{double} x0, @code{const mglDataA &}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Lamerey (@code{double} x0, @code{const char *}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_lamerey_dat (@code{HMGL} gr, @code{double} x0, @code{HCDT} y, @code{const char *}stl, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_lamerey_str (@code{HMGL} gr, @code{double} x0, @code{const char *}y, @code{const char *}stl, @code{const char *}opt) @end ifclear Функции рисуют диаграмму Ламерея для точечного отображения x_new = y(x_old) начиная с точки @var{x0}. Строка @var{stl} может содержать стиль линии, символ @samp{v} для стрелок, символ @samp{~} для исключения первого сегмента. Опция @code{value} задает число сегментов для рисования (по умолчанию 20). См. также @ref{plot}, @ref{fplot}, @ref{bifurcation}, @ref{pmap}. @sref{Lamerey sample} @end deftypefn @anchor{bifurcation} @deftypefn {Команда MGL} {} bifurcation @code{dx} ydat ['stl'=''] @deftypefnx {Команда MGL} {} bifurcation @code{dx} 'y(x)' ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Bifurcation (@code{double} dx, @code{const mglDataA &}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Bifurcation (@code{double} dx, @code{const char *}y, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_bifurcation_dat (@code{HMGL} gr, @code{double} dx, @code{HCDT} y, @code{const char *}stl, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_bifurcation_str (@code{HMGL} gr, @code{double} dx, @code{const char *}y, @code{const char *}stl, @code{const char *}opt) @end ifclear Функции рисуют бифуркационную диаграмму (диаграмму удвоения периода) для точечного отображения x_new = y(x_old). Параметр @var{dx} задает точность по оси x. Строка @var{stl} задает цвет. Опция @code{value} задает число учитываемых стационарных точек (по умолчанию 1024). См. также @ref{plot}, @ref{fplot}, @ref{lamerey}. @sref{Bifurcation sample} @end deftypefn @anchor{pmap} @deftypefn {Команда MGL} {} pmap ydat sdat ['stl'=''] @deftypefnx {Команда MGL} {} pmap xdat ydat sdat ['stl'=''] @deftypefnx {Команда MGL} {} pmap xdat ydat zdat sdat ['stl'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Pmap (@code{const mglDataA &}y, @code{const mglDataA &}s, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Pmap (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}s, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Pmap (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}s, @code{const char *}stl=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_pmap (@code{HMGL} gr, @code{HMDT} y, @code{HCDT} s, @code{const char *}stl, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_pmap_xy (@code{HMGL} gr, @code{HCDT} x, @code{HMDT} y, @code{HCDT} s, @code{const char *}stl, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_pmap_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HMDT} y, @code{HCDT} z, @code{HCDT} s, @code{const char *}stl, @code{const char *}opt) @end ifclear Функции рисуют отображение Пуанкаре для кривой @{@var{x}, @var{y}, @var{z}@} при условии @var{s}=0. Проще говоря, рисуются точки пересечения кривой и поверхности. Строка @var{stl} задает стиль маркеров. См. также @ref{plot}, @ref{mark}, @ref{lamerey}. @sref{Pmap sample} @end deftypefn @c ################################################################## @external{} @node 2D plotting, 3D plotting, 1D plotting, MathGL core @section 2D графики @nav{} @cindex Mesh @cindex Fall @cindex Belt @cindex Surf @cindex Boxs @cindex Tile @cindex Dens @cindex Cont @cindex ContF @cindex ContD @cindex Axial @cindex Grad @cindex Grid Эти функции строят графики для двумерных (2D) массивов. Двумерными считаются массивы, зависящие только от двух параметров (индексов) подобно матрице @math{f(x_i,y_j), i=1...n, j=1...m}. По умолчанию (если отсутствуют) значения @var{x}, @var{y} равно распределены в диапазоне осей координат. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. Строка @var{sch} задает цветовую схему (см. @ref{Color scheme}). Строка @var{opt} задает опции графика (см. @ref{Command options}). @sref{2D samples} @anchor{surf} @deftypefn {Команда MGL} {} surf zdat ['sch'=''] @deftypefnx {Команда MGL} {} surf xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Если @var{sch} содержит @samp{#}, то рисуется сетка на поверхности. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. См. также @ref{mesh}, @ref{dens}, @ref{belt}, @ref{tile}, @ref{boxs}, @ref{surfc}, @ref{surfa}. @sref{Surf sample} @end deftypefn @anchor{mesh} @deftypefn {Команда MGL} {} mesh zdat ['sch'=''] @deftypefnx {Команда MGL} {} mesh xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Mesh (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Mesh (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_mesh (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_mesh_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует сетчатую поверхность, заданную параметрически @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. См. также @ref{surf}, @ref{fall}, @ref{meshnum}, @ref{cont}, @ref{tens}. @sref{Mesh sample} @end deftypefn @anchor{fall} @deftypefn {Команда MGL} {} fall zdat ['sch'=''] @deftypefnx {Команда MGL} {} fall xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Fall (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Fall (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_fall (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_fall_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует водопад для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График удобен для построения нескольких кривых, сдвинутых вглубь друг относительно друга. Если @var{sch} содержит @samp{x}, то линии рисуются вдоль оси x, иначе (по умолчанию) вдоль оси y. См. также @ref{belt}, @ref{mesh}, @ref{tens}, @ref{meshnum}. @sref{Fall sample} @end deftypefn @anchor{belt} @deftypefn {Команда MGL} {} belt zdat ['sch'=''] @deftypefnx {Команда MGL} {} belt xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Belt (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Belt (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_belt (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует ленточки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение графика @ref{plot}. Если @var{sch} содержит @samp{x}, то ленточки рисуются вдоль оси x, иначе (по умолчанию) вдоль оси y. См. также @ref{fall}, @ref{surf}, @ref{beltc}, @ref{plot}, @ref{meshnum}. @sref{Belt sample} @end deftypefn @anchor{boxs} @deftypefn {Команда MGL} {} boxs zdat ['sch'=''] @deftypefnx {Команда MGL} {} boxs xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Boxs (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Boxs (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_boxs (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_boxs_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует вертикальные ящики для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. См. также @ref{surf}, @ref{dens}, @ref{tile}, @ref{step}. @sref{Boxs sample} @end deftypefn @anchor{tile} @deftypefn {Команда MGL} {} tile zdat ['sch'=''] @deftypefnx {Команда MGL} {} tile xdat ydat zdat ['sch'=''] @deftypefnx {Команда MGL} {} tile xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tile (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tile (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Tile (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tile (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tile_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tile_xyc (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Если строка @var{sch} содержит стиль @samp{x} или @samp{y}, то плитки будут ориентированы перпендикулярно x- или y-оси. График может использоваться как 3d обобщение @ref{step}. См. также @ref{surf}, @ref{boxs}, @ref{step}, @ref{tiles}. @sref{Tile sample} @end deftypefn @anchor{dens} @deftypefn {Команда MGL} {} dens zdat ['sch'=''] @deftypefnx {Команда MGL} {} dens xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dens (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{mreal} zVal=@code{NAN}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dens (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{mreal} zVal=@code{NAN}) @deftypefnx {Функция С} @code{void} mgl_dens (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_dens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует график плотности для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} равном минимальному значению оси z. Если @var{sch} содержит @samp{#}, то рисуется сетка. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. См. также @ref{surf}, @ref{cont}, @ref{contf}, @ref{boxs}, @ref{tile}, @code{dens[xyz]}. @sref{Dens sample} @end deftypefn @anchor{cont} @deftypefn {Команда MGL} {} cont vdat zdat ['sch'=''] @deftypefnx {Команда MGL} {} cont vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cont__val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z=v}[k] или при @var{z} равном минимальному значению оси z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{v}[k] будут выведены вдоль контуров над (или под) кривой. См. также @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample} @end deftypefn @deftypefn {Команда MGL} {} cont zdat ['sch'=''] @deftypefnx {Команда MGL} {} cont xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cont (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn @anchor{contf} @deftypefn {Команда MGL} {} contf vdat zdat ['sch'=''] @deftypefnx {Команда MGL} {} contf vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contf_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z=v}[k] или при @var{z} равном минимальному значению оси z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. См. также @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample} @end deftypefn @deftypefn {Команда MGL} {} contf zdat ['sch'=''] @deftypefnx {Команда MGL} {} contf xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContF (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contf (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn @anchor{contd} @deftypefn {Команда MGL} {} contd vdat zdat ['sch'=''] @deftypefnx {Команда MGL} {} contd vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contd_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z=v}[k] или при @var{z} равном минимальному значению оси z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цвета контуров: цвет k-го контура определяется как k-ый цвет строки. См. также @ref{dens}, @ref{cont}, @ref{contf}. @sref{ContD sample} @end deftypefn @deftypefn {Команда MGL} {} contd zdat ['sch'=''] @deftypefnx {Команда MGL} {} contd xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContD (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contd (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contd_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn @anchor{contp} @deftypefn {Команда MGL} {} contp vdat xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContP (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contp_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{a}[i,j]=@var{v}[k]. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{v}[k] будут выведены вдоль контуров над (или под) кривой. Если @var{sch} содержит @samp{f}, то контуры будут закрашены. См. также @ref{cont}, @ref{contf}, @ref{surfc}, @code{cont[xyz]}. @c TODO @sref{Cont sample} @end deftypefn @deftypefn {Команда MGL} {} contp xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContP (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contp (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn @anchor{contv} @deftypefn {Команда MGL} {} contv vdat zdat ['sch'=''] @deftypefnx {Команда MGL} {} contv vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contv_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contv_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует вертикальные цилиндры от линий уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z}=@var{v}[k] или при @var{z} равном минимальному значению оси z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. См. также @ref{cont}, @ref{contf}. @sref{ContV sample} @end deftypefn @deftypefn {Команда MGL} {} contv zdat ['sch'=''] @deftypefnx {Команда MGL} {} contv xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContV (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contv (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contv_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn @anchor{axial} @deftypefn {Команда MGL} {} axial vdat zdat ['sch'=''] @deftypefnx {Команда MGL} {} axial vdat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}v, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_axial_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. Если строка содержит символы @samp{x} или @samp{z}, то ось вращения устанавливается в указанное направление (по умолчанию вдоль @samp{y}). См. также @ref{cont}, @ref{contf}, @ref{torus}, @ref{surf3}. @sref{Axial sample} @end deftypefn @deftypefn {Команда MGL} {} axial zdat ['sch'=''] @deftypefnx {Команда MGL} {} axial xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3}) @deftypefnx {Функция С} @code{void} mgl_axial (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_axial_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @code{value} в опциях @var{opt} (по умолчанию 3). @end deftypefn @anchor{grid2} @deftypefn {Команда MGL} {} grid2 zdat ['sch'=''] @deftypefnx {Команда MGL} {} grid2 xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grid (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grid (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_grid (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует плоскую сету для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} равном минимальному значению оси z. См. также @ref{dens}, @ref{cont}, @ref{contf}, @ref{grid3}, @ref{meshnum}. @end deftypefn @c ################################################################## @external{} @node 3D plotting, Dual plotting, 2D plotting, MathGL core @section 3D графики @nav{} @cindex Surf3 @cindex Dens3 @cindex Cont3 @cindex ContF3 @cindex Grid3 @cindex Cloud @cindex Beam Эти функции строят графики для трехмерных (3D) массивов. Трёхмерными считаются массивы, зависящие от трёх параметров (индексов) подобно матрице @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. По умолчанию (если отсутствуют) значения @var{x}, @var{y}, @var{z} равно распределены в диапазоне осей координат. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=a.nx && y.nx=a.ny && z.nz=a.nz} или @code{x.nx=y.nx=z.nx=a.nx && x.ny=y.ny=z.ny=a.ny && x.nz=y.nz=z.nz=a.nz}. Массивы @var{x}, @var{y} и @var{z} могут быть векторами (не матрицами как @var{a}). Строка @var{sch} задает цветовую схему (см. @ref{Color scheme}). Строка @var{opt} задает опции графика (см. @ref{Command options}). @sref{3D samples} @anchor{surf3} @deftypefn {Команда MGL} {} surf3 adat @code{val} ['sch'=''] @deftypefnx {Команда MGL} {} surf3 xdat ydat zdat adat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3 (@code{mreal} val, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3 (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует поверхность уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. Замечу, что возможно некорректная отрисовка граней вследствие неопределённости построения сечения если поверхность пересекает ячейку данных 2 и более раз. См. также @ref{cloud}, @ref{dens3}, @ref{surf3c}, @ref{surf3a}, @ref{axial}. @sref{Surf3 sample} @end deftypefn @deftypefn {Команда MGL} {} surf3 adat ['sch'=''] @deftypefnx {Команда MGL} {} surf3 xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Аналогично предыдущему для @var{num} поверхностей уровня равномерно распределённых в диапазоне изменения цвета. Величина @var{num} равна значению параметра @code{value} в опциях @var{opt} (по умолчанию 3). @end deftypefn @anchor{cloud} @deftypefn {Команда MGL} {} cloud adat ['sch'=''] @deftypefnx {Команда MGL} {} cloud xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cloud (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cloud (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cloud (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cloud_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует облачный график для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). График состоит из кубиков с цветом и прозрачностью пропорциональной значениям @var{a}. Результат похож на облако -- малые значения прозрачны, а большие нет. Число кубиков зависит от @ref{meshnum}. Если @var{sch} содержит @samp{.}, то будет построен график более низкого качества, но с заметно меньшим использованием памяти. Если @var{sch} содержит @samp{i}, то прозрачность будет инвертирована, т.е. области с более высокими значениями будут более прозрачны, а с более низким -- менее прозрачны. См. также @ref{surf3}, @ref{meshnum}. @sref{Cloud sample} @end deftypefn @anchor{dens3} @deftypefn {Команда MGL} {} dens3 adat ['sch'='' @code{sval=-1}] @deftypefnx {Команда MGL} {} dens3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dens3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dens3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_dens3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_dens3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear Рисует график плотности для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). График рисуется на срезе @var{sVal} в направлении @{@samp{x}, @samp{y}, @samp{z}@}, указанном в строке @var{sch} (по умолчанию, в напралении @samp{y}). Если @var{sch} содержит @samp{#}, то на срезе рисуется сетка. См. также @ref{cont3}, @ref{contf3}, @ref{dens}, @ref{grid3}. @sref{Dens3 sample} @end deftypefn @anchor{cont3} @deftypefn {Команда MGL} {} cont3 vdat adat ['sch'='' @code{sval=-1}] @deftypefnx {Команда MGL} {} cont3 vdat xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cont3_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont3_xyz_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear Рисует линии уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sVal} в направлении @{@samp{x}, @samp{y}, @samp{z}@}, указанном в строке @var{sch} (по умолчанию, в напралении @samp{y}). Если @var{sch} содержит @samp{#}, то на срезе рисуется сетка. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{v}[k] будут выведены вдоль контуров над (или под) кривой. См. также @ref{dens3}, @ref{contf3}, @ref{cont}, @ref{grid3}. @sref{Cont3 sample} @end deftypefn @deftypefn {Команда MGL} {} cont3 adat ['sch'='' @code{sval=-1}] @deftypefnx {Команда MGL} {} cont3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Cont3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cont3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear Аналогично предыдущему для @var{num} линий уровня равномерно распределённых в диапазоне изменения цвета. Величина @var{num} равна значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn @anchor{contf3} @deftypefn {Команда MGL} {} contf3 vdat adat ['sch'='' @code{sval=-1}] @deftypefnx {Команда MGL} {} contf3 vdat xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}v, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contf3_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf3_xyz_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear Рисует закрашенные линии (контуры) уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sVal} в направлении @{@samp{x}, @samp{y}, @samp{z}@}, указанном в строке @var{sch} (по умолчанию, в напралении @samp{y}). Если @var{sch} содержит @samp{#}, то на срезе рисуется сетка. См. также @ref{dens3}, @ref{cont3}, @ref{contf}, @ref{grid3}. @sref{ContF3 sample} @end deftypefn @deftypefn {Команда MGL} {} contf3 adat ['sch'='' @code{sval=-1}] @deftypefnx {Команда MGL} {} contf3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Contf3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contf3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear Аналогично предыдущему для @var{num} закрашенных линий (контуров) уровня равномерно распределённых в диапазоне изменения цвета. Величина @var{num} равна значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn @anchor{grid3} @deftypefn {Команда MGL} {} grid3 adat ['sch'='' @code{sval=-1}] @deftypefnx {Команда MGL} {} grid3 xdat ydat zdat adat ['sch'='' @code{sval=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grid3 (@code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grid3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_grid3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_grid3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear Рисует сетку для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). График рисуется на срезе @var{sVal} в направлении @{@samp{x}, @samp{y}, @samp{z}@}, указанном в строке @var{sch} (по умолчанию, в напралении @samp{y}). См. также @ref{cont3}, @ref{contf3}, @ref{dens3}, @ref{grid2}, @ref{meshnum}. @end deftypefn @anchor{beam} @deftypefn {Команда MGL} {} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Beam (@code{const mglDataA &}tr, @code{const mglDataA &}g1, @code{const mglDataA &}g2, @code{const mglDataA &}a, @code{mreal} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0}, @code{int} num=@code{3}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Beam (@code{mreal} val, @code{const mglDataA &}tr, @code{const mglDataA &}g1, @code{const mglDataA &}g2, @code{const mglDataA &}a, @code{mreal} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0}) @deftypefnx {Функция С} @code{void} mgl_beam (@code{HMGL} gr, @code{HCDT} tr, @code{HCDT} g1, @code{HCDT} g2, @code{HCDT} a, @code{mreal} r, @code{const char *}stl, @code{int} flag, @code{int} num) @deftypefnx {Функция С} @code{void} mgl_beam_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} tr, @code{HCDT} g1, @code{HCDT} g2, @code{HCDT} a, @code{mreal} r, @code{const char *}stl, @code{int} flag) @end ifclear Рисует поверхность уровня для 3d массива @var{a} при постоянном значении @var{a}=@var{val}. Это специальный тип графика для @var{a} заданного в сопровождающей системе координат вдоль кривой @var{tr} с ортами @var{g1}, @var{g2} и с поперечным размером @var{r}. Переменная @var{flag} -- битовый флаг: @samp{0x1} - рисовать в сопровождающих (не лабораторных) координатах; @samp{0x2} - рисовать проекцию на плоскость @math{\rho-z}; @samp{0x4} - рисовать нормированное в каждом сечении поле. Размеры массивов по 1-му индексу @var{tr}, @var{g1}, @var{g2} должны быть nx>2. Размеры массивов по 2-му индексу @var{tr}, @var{g1}, @var{g2} и размер по 3-му индексу массива @var{a} должны быть одинаковы. См. также @ref{surf3}. @end deftypefn @c ################################################################## @external{} @node Dual plotting, Vector fields, 3D plotting, MathGL core @section Парные графики @nav{} @cindex SurfC @cindex SurfA @cindex Surf3C @cindex Surf3A @cindex TileS @cindex Map @cindex STFA Эти функции строят графики для двух связанных массивов. Есть несколько основных типов 3D графиков: поверхность и поверхность уровня с окраской по второму массиву (SurfC, Surf3C), поверхность и поверхность уровня с прозрачностью по второму массиву (SurfA, Surf3A), плитки переменного размера (TileS), диаграмма точечного отображения (Map), STFA диаграмма (STFA). По умолчанию (если отсутствуют) значения @var{x}, @var{y} (и @var{z} для @code{Surf3C, Surf3A}) равно распределены в диапазоне осей координат. Младшие размерности массивов @var{x}, @var{y}, @var{z}, @var{c} должны быть одинаковы @code{x.nx=a.nx && y.nx=a.ny && z.nz=a.nz} или @code{x.nx=y.nx=z.nx=a.nx && x.ny=y.ny=z.ny=a.ny && x.nz=y.nz=z.nz=a.nz}. Массивы @var{x}, @var{y} (и @var{z} для @code{Surf3C, Surf3A}) могут быть векторами (не матрицами как @var{c}). Строка @var{sch} задает цветовую схему (см. @ref{Color scheme}). Строка @var{opt} задает опции графика (см. @ref{Command options}). @anchor{surfc} @deftypefn {Команда MGL} {} surfc zdat cdat ['sch'=''] @deftypefnx {Команда MGL} {} surfc xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SurfC (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SurfC (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surfc (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. Размерность массивов @var{z} и @var{c} должна быть одинакова. График строится для каждого z среза данных. См. также @ref{surf}, @ref{surfa}, @ref{beltc}, @ref{surf3c}. @sref{SurfC sample} @end deftypefn @anchor{beltc} @deftypefn {Команда MGL} {} beltc zdat cdat ['sch'=''] @deftypefnx {Команда MGL} {} beltc xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_beltc (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_beltc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует ленточки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. График может использоваться как 3d обобщение графика @ref{plot}. Если @var{sch} содержит @samp{x}, то ленточки рисуются вдоль оси x, иначе (по умолчанию) вдоль оси y. См. также @ref{belt}, @ref{surfc}, @ref{meshnum}. @c TODO @sref{Belt sample} @end deftypefn @anchor{surf3c} @deftypefn {Команда MGL} {} surf3c adat cdat @code{val} ['sch'=''] @deftypefnx {Команда MGL} {} surf3c xdat ydat zdat adat cdat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3C (@code{mreal} val, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3C (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3c_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3c_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует поверхность уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Аналогично @ref{surf3}, но цвет задается массивом @var{c}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. См. также @ref{surf3}, @ref{surfc}, @ref{surf3a}. @sref{Surf3C sample} @end deftypefn @deftypefn {Команда MGL} {} surf3c adat cdat ['sch'=''] @deftypefnx {Команда MGL} {} surf3c xdat ydat zdat adat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3C (@code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3C (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3c (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3c_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Аналогично предыдущему для @var{num} поверхностей уровня равномерно распределённых в диапазоне изменения цвета. Величина @var{num} равна значению параметра @code{value} в опциях @var{opt} (по умолчанию 3). @end deftypefn @anchor{surfa} @deftypefn {Команда MGL} {} surfa zdat cdat ['sch'=''] @deftypefnx {Команда MGL} {} surfa xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SurfA (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SurfA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surfa (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surfa_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с прозрачностью, заданной массивом @var{c}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. Размерность массивов @var{z} и @var{c} должна быть одинакова. График строится для каждого z среза данных. См. также @ref{surf}, @ref{surfc}, @ref{surf3a}. @sref{SurfA sample} @end deftypefn @anchor{surf3a} @deftypefn {Команда MGL} {} surf3a adat cdat @code{val} ['sch'=''] @deftypefnx {Команда MGL} {} surf3a xdat ydat zdat adat cdat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3A (@code{mreal} val, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3A (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3a_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3a_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует поверхность уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Аналогично @ref{surf3}, но прозрачность задается массивом @var{c}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. См. также @ref{surf3}, @ref{surfc}, @ref{surf3a}. @sref{Surf3A sample} @end deftypefn @deftypefn {Команда MGL} {} surf3a adat cdat ['sch'=''] @deftypefnx {Команда MGL} {} surf3a xdat ydat zdat adat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3A (@code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3A (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3a (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3a_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Аналогично предыдущему для @var{num} поверхностей уровня равномерно распределённых в диапазоне изменения цвета. При этом массив @var{c} может быть вектором со значениями прозрачности и @var{num}=@var{c}.nx. В противном случае величина @var{num} равна значению параметра @code{value} в опциях @var{opt} (по умолчанию 3). @end deftypefn @anchor{surfca} @deftypefn {Команда MGL} {} surfca zdat cdat adat ['sch'=''] @deftypefnx {Команда MGL} {} surfca xdat ydat zdat cdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} SurfCA (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} SurfCA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surfca (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surfca_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом и прозрачностью, заданными массивами @var{c}[i,j] и @var{a}[i,j] соответственно. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. Размерность массивов @var{z} и @var{c} должна быть одинакова. График строится для каждого z среза данных. См. также @ref{surf}, @ref{surfc}, @ref{surfa}, @ref{surf3ca}. @sref{SurfCA sample} @end deftypefn @anchor{surf3ca} @deftypefn {Команда MGL} {} surf3ca adat cdat bdat @code{val} ['sch'=''] @deftypefnx {Команда MGL} {} surf3ca xdat ydat zdat adat cdat bdat @code{val} ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3CA (@code{mreal} val, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3CA (@code{mreal} val, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3ca_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3ca_xyz_val (@code{HMGL} gr, @code{mreal} val, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует поверхность уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Аналогично @ref{surf3}, но цвет и прозрачность задается массивами @var{c} и @var{b} соответственно. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. См. также @ref{surf3}, @ref{surfc}, @ref{surf3a}. @sref{Surf3A sample} @end deftypefn @deftypefn {Команда MGL} {} surf3ca adat cdat ['sch'=''] @deftypefnx {Команда MGL} {} surf3ca xdat ydat zdat adat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3CA (@code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Surf3CA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}c, @code{const mglDataA &}b, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surf3ca (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_surf3ca_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} c, @code{HCDT} b, @code{const char *}sch, @code{const char *}opt) @end ifclear Аналогично предыдущему для @var{num} поверхностей уровня равномерно распределённых в диапазоне изменения цвета. Здесь величина @var{num} равна значению параметра @code{value} в опциях @var{opt} (по умолчанию 3). @end deftypefn @anchor{tiles} @deftypefn {Команда MGL} {} tiles zdat rdat ['sch'=''] @deftypefnx {Команда MGL} {} tiles xdat ydat zdat rdat ['sch'=''] @deftypefnx {Команда MGL} {} tiles xdat ydat zdat rdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} TileS (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TileS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TileS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}r, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tiles (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tiles_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tiles_xyc (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} r, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Аналогично Tile(), но размер плиток задается массивов @var{r}. Если строка @var{sch} содержит стиль @samp{x} или @samp{y}, то плитки будут ориентированы перпендикулярно x- или y-оси. Это создает эффект "прозрачности" при экспорте в файлы EPS. График строится для каждого z среза данных. См. также @ref{surfa}, @ref{tile}. @sref{TileS sample} @end deftypefn @anchor{map} @deftypefn {Команда MGL} {} map udat vdat ['sch'=''] @deftypefnx {Команда MGL} {} map xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Map (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Map (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_map (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_map_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует точечное отображение для матриц @{@var{ax}, @var{ay} @} параметрически зависящих от координат @var{x}, @var{y}. Исходное положение ячейки задает ее цвет. Высота пропорциональна якобиану J(ax,ay). График является аналогом диаграммы Арнольда ??? Если @var{sch} содержит @samp{.}, то цветные точки рисуются в узлах матриц (полезно для "запутанного" отображения), иначе рисуются грани. @sref{Mapping visualization} @end deftypefn @anchor{stfa} @deftypefn {Команда MGL} {} stfa re im @code{dn} ['sch'=''] @deftypefnx {Команда MGL} {} stfa xdat ydat re im @code{dn} ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} STFA (@code{const mglDataA &}re, @code{const mglDataA &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} STFA (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}re, @code{const mglDataA &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_stfa (@code{HMGL} gr, @code{HCDT} re, @code{HCDT} im, @code{int} dn, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_stfa_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} re, @code{HCDT} im, @code{int} dn, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует спектрограмму комплексного массива @var{re}+i*@var{im} для Фурье размером @var{dn} точек в плоскости @var{z} равно минимальному значению оси z. Параметр @var{dn} -- любое чётное число. Например в 1D случае, результатом будет график плотности от массива @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} размером @{int(nx/dn), dn, ny@}. Массивы @var{re}, @var{im} параметрически зависят от координат @var{x}, @var{y}. Все размеры массивов @var{re} и @var{im} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{re} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{re}). @sref{STFA sample} @end deftypefn @c ################################################################## @external{} @node Vector fields, Other plotting, Dual plotting, MathGL core @section Векторные поля @nav{} @cindex Traj @cindex Vect @cindex Dew @cindex Flow @cindex FlowP @cindex Pipe Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько типов графиков: просто векторное поле (Vect), вектора вдоль траектории (Traj), векторное поле каплями (Dew), нити тока (Flow, FlowP), трубки тока (Pipe). По умолчанию (если отсутствуют) значения @var{x}, @var{y} и @var{z} равно распределены в диапазоне осей координат. Младшие размерности массивов @var{x}, @var{y}, @var{z} и @var{ax} должны быть одинаковы. Размеры массивов @var{ax}, @var{ay} и @var{az} должны быть одинаковы. Массивы @var{x}, @var{y} и @var{z} могут быть векторами (не матрицами как @var{ax}). Строка @var{sch} задает цветовую схему (см. @ref{Color scheme}). Строка @var{opt} задает опции графика (см. @ref{Command options}). @anchor{traj} @deftypefn {Команда MGL} {} traj xdat ydat udat vdat ['sch'=''] @deftypefnx {Команда MGL} {} traj xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Traj (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Traj (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_traj_xyz (@code{HMGL} gr, @code{HCDT}x, @code{HCDT}y, @code{HCDT}z, @code{HCDT}ax, @code{HCDT}ay, @code{HCDT}az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_traj_xy (@code{HMGL} gr, @code{HCDT}x, @code{HCDT}y, @code{HCDT}ax, @code{HCDT}ay, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует вектора @{@var{ax}, @var{ay}, @var{az}@} вдоль кривой @{@var{x}, @var{y}, @var{z}@}. Длина векторов пропорциональна @math{\sqrt@{ax^2+ay^2+az^2@}}. Строка @var{pen} задает цвет (см. @ref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (см. @ref{Palette and colors}). Опция @code{value} задает фактор длины векторов (если не нуль) или выбирать длину пропорционально расстоянию между точками кривой (если @code{value=0}). Размер по 1-му индексу должен быть 2 или больше. График рисуется для каждой строки если один из массивов матрица. См. также @ref{vect}. @sref{Traj sample} @end deftypefn @anchor{vect} @deftypefn {Команда MGL} {} vect udat vdat ['sch'=''] @deftypefnx {Команда MGL} {} vect xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_vect_2d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_vect_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует векторное поле @{@var{ax}, @var{ay}@} параметрически зависящее от координат @var{x}, @var{y} на плоскости при @var{z} равном минимальному значению оси z. Длина и цвет векторов пропорциональна @math{\sqrt@{ax^2+ay^2@}}. Число рисуемых векторов зависит от @ref{meshnum}. Вид стрелок/штрихов может быть изменён символами: @itemize @bullet @item @samp{f} для стрелок одинаковой длины, @item @samp{>}, @samp{<} для стрелок начинающихся или заканчивающихся в ячейке сетки (по умолчанию центрированы), @item @samp{.} для рисования штрихов с точкой в начале вместо стрелок, @item @samp{=} для использования градиента цвета вдоль стрелок. @end itemize См. также @ref{flow}, @ref{dew}. @sref{Vect sample} @end deftypefn @deftypefn {Команда MGL} {} vect udat vdat wdat ['sch'=''] @deftypefnx {Команда MGL} {} vect xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Vect (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_vect_3d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_vect_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @end ifclear Это 3d версия графика. Здесь массивы @var{ax}, @var{ay}, @var{az} должны трёхмерными тензорами и длина вектора пропорциональна @math{\sqrt@{ax^2+ay^2+az^2@}}. @end deftypefn @anchor{vect3} @deftypefn {Команда MGL} {} vect3 udat vdat wdat ['sch'='' sval] @deftypefnx {Команда MGL} {} vect3 xdat ydat zdat udat vdat wdat ['sch'='' sval] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Vect3 (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Vect3 (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} sVal=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_vect3 (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_vect3_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} sVal, @code{const char *}opt) @end ifclear Рисует 3D векторное поле @{@var{ax}, @var{ay}, @var{az}@} параметрически зависящее от координат @var{x}, @var{y}, @var{z}. График рисуется на срезе @var{sVal} в направлении @{@samp{x}, @samp{y}, @samp{z}@}, указанном в строке @var{sch} (по умолчанию, в напралении @samp{y}). Длина и цвет векторов пропорциональна @math{\sqrt@{ax^2+ay^2+az^2@}}. Число рисуемых векторов зависит от @ref{meshnum}. Вид стрелок/штрихов может быть изменён символами: @itemize @bullet @item @samp{f} для стрелок одинаковой длины, @item @samp{>}, @samp{<} для стрелок начинающихся или заканчивающихся в ячейке сетки (по умолчанию центрированы), @item @samp{.} для рисования штрихов с точкой в начале вместо стрелок, @item @samp{=} для использования градиента цвета вдоль стрелок. @end itemize См. также @ref{vect}, @ref{flow}, @ref{dew}. @sref{Vect sample} @end deftypefn @anchor{dew} @deftypefn {Команда MGL} {} dew udat vdat ['sch'=''] @deftypefnx {Команда MGL} {} dew xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dew (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dew (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_dew (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_dew_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует капли для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} при @var{z} равном минимальному значению оси z. Замечу, что график требует много памяти и процессорного времени для своего создания! Цвет капель пропорционален @math{\sqrt@{ax^2+ay^2@}}. Число капель определяется @ref{meshnum}. См. также @ref{vect}. @sref{Dew sample} @end deftypefn @anchor{flow} @deftypefn {Команда MGL} {} flow udat vdat ['sch'=''] @deftypefnx {Команда MGL} {} flow xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_flow_2d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_flow_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует нити тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при @var{z} равном минимальному значению оси z. Число нитей пропорционально значению опции @code{value} (по умолчанию 5). Цвет нитей пропорционален @math{\sqrt@{ax^2+ay^2@}}. Строка @var{sch} может содержать @itemize @bullet @item цветовую схему -- тёплые цвета соответствуют нормальному току (типа стока), холодные цвета соответствуют обратному току (типа источника); @item @samp{#} для использования нитей, начинающихся только на границе; @item @samp{*} для использования нитей, начинающихся с двумерной сетки внутри данных; @item @samp{v} для рисования стрелок на нитях; @item @samp{x}, @samp{z} для рисования лент нормалей, начинающихся в плоскостях x-y и y-z соответственно. @end itemize См. также @ref{pipe}, @ref{vect}, @ref{tape}, @ref{barwidth}. @sref{Flow sample} @end deftypefn @deftypefn {Команда MGL} {} flow udat vdat wdat ['sch'=''] @deftypefnx {Команда MGL} {} flow xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Flow (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_flow_3d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_flow_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @end ifclear Это 3d версия графика. Здесь массивы должны трёхмерными тензорами и цвет пропорционален @math{\sqrt@{ax^2+ay^2+az^2@}}. @end deftypefn @deftypefn {Команда MGL} {} flow @code{x0 y0} udat vdat ['sch'=''] @deftypefnx {Команда MGL} {} flow @code{x0 y0} xdat ydat udat vdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_flowp_2d (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_flowp_xy (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{const char *}opt) @end ifclear Аналогично @ref{flow}, но рисует одну нить из точки @var{p0}=@{@var{x0},@var{y0},@var{z0}@}. @end deftypefn @deftypefn {Команда MGL} {} flow @code{x0 y0 z0} udat vdat wdat ['sch'=''] @deftypefnx {Команда MGL} {} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} FlowP (@code{mglPoint} p0, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_flowp_3d (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_flowp_xyz (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{const char *}opt) @end ifclear Это 3d версия графика. @end deftypefn @anchor{grad} @deftypefn {Команда MGL} {} grad pdat ['sch'=''] @deftypefnx {Команда MGL} {} grad xdat ydat pdat ['sch'=''] @deftypefnx {Команда MGL} {} grad xdat ydat zdat pdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grad (@code{const mglDataA &}phi, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grad (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}phi, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Grad (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}phi, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_grad (@code{HMGL} gr, @code{HCDT} phi, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} phi, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} phi, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует линии градиента скалярного поля @var{phi}[i,j] (или @var{phi}[i,j,k] в 3d случае) заданного параметрически @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Число линий пропорционально значению опции @code{value} (по умолчанию 5). См. также @ref{dens}, @ref{cont}, @ref{flow}. @end deftypefn @anchor{pipe} @deftypefn {Команда MGL} {} pipe udat vdat ['sch'='' @code{r0=0.05}] @deftypefnx {Команда MGL} {} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_pipe_2d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_pipe_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} ax, @code{HCDT} ay, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @end ifclear Рисует трубки тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при @var{z} равном минимальному значению оси z. Число трубок пропорционально значению опции @code{value}. Цвет и радиус трубок пропорционален @math{\sqrt@{ax^2+ay^2@}}. Тёплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Параметр @var{r0} задает радиус трубок. При @var{r0}<0 радиус трубок обратно пропорционален их амплитуде. См. также @ref{flow}, @ref{vect}. @sref{Pipe sample} @end deftypefn @deftypefn {Команда MGL} {} pipe udat vdat wdat ['sch'='' @code{r0=0.05}] @deftypefnx {Команда MGL} {} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Pipe (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}ax, @code{const mglDataA &}ay, @code{const mglDataA &}az, @code{const char *}sch=@code{""}, @code{mreal} r0=@code{0.05}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_pipe_3d (@code{HMGL} gr, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_pipe_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} ax, @code{HCDT} ay, @code{HCDT} az, @code{const char *}sch, @code{mreal} r0, @code{const char *}opt) @end ifclear Это 3d версия графика. Здесь массивы @var{ax}, @var{ay}, @var{az} должны трёхмерными тензорами и цвет пропорционален @math{\sqrt@{ax^2+ay^2+az^2@}}. @end deftypefn @c ################################################################## @external{} @node Other plotting, Nonlinear fitting, Vector fields, MathGL core @section Прочие графики @nav{} @cindex DensXYZ @cindex ContXYZ @cindex ContFXYZ @cindex Dots @cindex Crust @cindex TriPlot @cindex TriCont @cindex QuadPlot @cindex FPlot @cindex FSurf Это функции, не относящиеся к какой-то специальной категории. Сюда входят функции построения графиков по текстовым формулам (FPlot и FSurf), рисования поверхностей из треугольников и четырёхугольников (TriPlot, TriCont, QuadPlot), произвольных точек в пространстве (Dots) и реконструкции по ним поверхности (Crust), графики плотности и линии уровня на плоскостях, перпендикулярных осям x, y или z (Dens[XYZ], Cont[XYZ], ContF[XYZ]). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой. @xref{Color scheme}. @anchor{densz} @anchor{densy} @anchor{densx} @anchor{DensXYZ} @deftypefn {Команда MGL} {} densx dat ['sch'='' @code{sval=nan}] @deftypefnx {Команда MGL} {} densy dat ['sch'='' @code{sval=nan}] @deftypefnx {Команда MGL} {} densz dat ['sch'='' @code{sval=nan}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} DensX (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} DensY (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} DensZ (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_dens_x (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_dens_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_dens_z (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @end ifclear Эти функции рисуют график плотности на x, y или z плоскостях. Если @var{a} -- 3d массив, то выполняется интерполяция к заданному срезу @var{sVal}. Функции полезны для создания проекций 3D массивов на оси координат. См. также @ref{ContXYZ}, @ref{ContFXYZ}, @ref{dens}, @ref{Data manipulation}. @sref{Dens projection sample} @end deftypefn @anchor{contz} @anchor{conty} @anchor{contx} @anchor{ContXYZ} @deftypefn {Команда MGL} {} contx dat ['sch'='' @code{sval=nan}] @deftypefnx {Команда MGL} {} conty dat ['sch'='' @code{sval=nan}] @deftypefnx {Команда MGL} {} contz dat ['sch'='' @code{sval=nan}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContX (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContY (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContZ (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cont_x (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont_z (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @end ifclear Эти функции рисуют линии уровня на x, y или z плоскостях. Если @var{a} -- 3d массив, то выполняется интерполяция к заданному срезу @var{sVal}. Опция @code{value} задает число контуров. Функции полезны для создания проекций 3D массивов на оси координат. См. также @ref{ContFXYZ}, @ref{DensXYZ}, @ref{cont}, @ref{Data manipulation}. @sref{Cont projection sample} @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{void} ContX (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContY (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContZ (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cont_x_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont_y_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_cont_z_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) Аналогично предыдущему с ручным заданием значений для линий уровня. @end deftypefn @end ifclear @anchor{contfz} @anchor{contfy} @anchor{contfx} @anchor{ContFXYZ} @deftypefn {Команда MGL} {} contfx dat ['sch'='' @code{sval=nan}] @deftypefnx {Команда MGL} {} contfy dat ['sch'='' @code{sval=nan}] @deftypefnx {Команда MGL} {} contfz dat ['sch'='' @code{sval=nan}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContFX (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContFY (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContFZ (@code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contf_x (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf_z (@code{HMGL} gr, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @end ifclear Эти функции рисуют закрашенные контуры уровня на x, y или z плоскостях. Если @var{a} -- 3d массив, то выполняется интерполяция к заданному срезу @var{sVal}. Опция @code{value} задает число контуров. Функции полезны для создания проекций 3D массивов на оси координат. См. также @ref{ContFXYZ}, @ref{DensXYZ}, @ref{cont}, @ref{Data manipulation}. @sref{ContF projection sample} @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{void} ContFX (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContFY (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} ContFZ (@code{const mglDataA &}v, @code{const mglDataA &}a, @code{const char *}stl=@code{""}, @code{mreal} sVal=@code{NAN}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_contf_x_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf_y_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_contf_z_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} a, @code{const char *}stl, @code{mreal} sVal, @code{const char *}opt) Аналогично предыдущему с ручным заданием значений для линий уровня. @end deftypefn @end ifclear @anchor{fplot} @deftypefn {Команда MGL} {} fplot 'y(x)' ['pen'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} FPlot (@code{const char *}eqY, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_fplot (@code{HMGL} gr, @code{const char *}eqY, @code{const char *}pen, @code{const char *}opt) @end ifclear Рисует функцию @samp{eqY(x)} в плоскости @var{z} равно минимальному значению оси z с координатой @samp{x} в диапазоне осей координат. Опция @code{value} задает начальное число точек. См. также @ref{plot}. @end deftypefn @deftypefn {Команда MGL} {} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} FPlot (@code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}pen, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_fplot_xyz (@code{HMGL} gr, @code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}pen, @code{const char *}opt) @end ifclear Рисует параметрическую кривую @{@samp{eqX(t)}, @samp{eqY(t)}, @samp{eqZ(t)}@}, где координата @samp{t} меняется в диапазоне [0, 1]. Опция @code{value} задает начальное число точек. См. также @ref{plot}. @end deftypefn @anchor{fsurf} @deftypefn {Команда MGL} {} fsurf 'z(x,y)' ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} FSurf (@code{const char *}eqZ, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}); @deftypefnx {Функция С} @code{void} mgl_fsurf (@code{HMGL} gr, @code{const char *}eqZ, @code{const char *}sch, @code{const char *}opt); @end ifclear Рисует поверхность @samp{eqY(x,y)} с координатами @samp{x}, @samp{y} в диапазоне @code{xrange, yrange}. Опция @code{value} задает число точек. См. также @ref{surf}. @end deftypefn @deftypefn {Команда MGL} {} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} FSurf (@code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_fsurf_xyz (@code{HMGL} gr, @code{const char *}eqX, @code{const char *}eqY, @code{const char *}eqZ, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует параметрическую поверхность @{@samp{eqX(u,v)}, @samp{eqY(u,v)}, @samp{eqZ(u,v)}@}, где координаты @samp{u}, @samp{v} меняются в диапазоне [0, 1]. Опция @code{value} задает число точек. См. также @ref{surf}. @end deftypefn @anchor{triplot} @deftypefn {Команда MGL} {} triplot idat xdat ydat ['sch'=''] @deftypefnx {Команда MGL} {} triplot idat xdat ydat zdat ['sch'=''] @deftypefnx {Команда MGL} {} triplot idat xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} TriPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TriPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TriPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_triplot_xy (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_triplot_xyz (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_triplot_xyzc (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует поверхность из треугольников. Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{dots}, @ref{crust}, @ref{quadplot}, @ref{triangulation}. @sref{TriPlot and QuadPlot} @end deftypefn @anchor{tricont} @deftypefn {Команда MGL} {} tricont vdat idat xdat ydat zdat cdat ['sch'=''] @deftypefnx {Команда MGL} {} tricont vdat idat xdat ydat zdat ['sch'=''] @deftypefnx {Команда MGL} {} tricont idat xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} TriCont (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TriCont (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TriContV (@code{const mglDataA &}v, @code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} TriContV (@code{const mglDataA &}v, @code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует линии уровня поверхности из треугольников при @var{z}=@var{v}[k] (или при @var{z} равном минимальному значению оси z если @var{sch} содержит @samp{_}). Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Если аргуент @var{v} не задан, то используется массив из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @code{value} в опциях @var{opt} (по умолчанию 7). Строка @var{sch} задает цветовую схему. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{triplot}, @ref{cont}, @ref{triangulation}. @end deftypefn @anchor{quadplot} @deftypefn {Команда MGL} {} quadplot idat xdat ydat ['sch'=''] @deftypefnx {Команда MGL} {} quadplot idat xdat ydat zdat ['sch'=''] @deftypefnx {Команда MGL} {} quadplot idat xdat ydat zdat cdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} QuadPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} QuadPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} QuadPlot (@code{const mglDataA &}id, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{HCDT} id, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует поверхность из четырёхугольников. Вершины четырёхугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 4 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет четырёхугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{triplot}. @sref{TriPlot and QuadPlot} @end deftypefn @anchor{dots} @deftypefn {Команда MGL} {} dots xdat ydat zdat ['sch'=''] @deftypefnx {Команда MGL} {} dots xdat ydat zdat adat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dots (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dots (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Dots (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const mglDataA &}a, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_dots (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_dots_a (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @deftypefnx {Функция С} @code{void} mgl_dots_ca (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{HCDT} a, @code{const char *}sch, @code{const char *}opt) @end ifclear Рисует произвольно расположенные точки @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему и тип маркеров. Если определёны массивы @var{c}, @var{a} то они задают цвет и прозрачность точек соответственно. Непрозрачные точки с заданным цветом можно нарисовать с помощью @ref{tens}, используя стиль @samp{ .}. Массивы @var{x}, @var{y}, @var{z}, @var{a} должны иметь одинаковые размеры. См. также @ref{crust}, @ref{tens}, @ref{mark}, @ref{plot}. @sref{Dots sample} @end deftypefn @anchor{crust} @deftypefn {Команда MGL} {} crust xdat ydat zdat ['sch'=''] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Crust (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_crust (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear Реконструирует и рисует поверхность по произвольно расположенным точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Опция @var{value} задает радиус ошибки (увеличите для удаления дыр). Строка @var{sch} задает цветовую схему. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. См. также @ref{dots}, @ref{triplot}. @c @sref{Crust sample} @end deftypefn @c ################################################################## @external{} @node Nonlinear fitting, Data manipulation, Other plotting, MathGL core @section Nonlinear fitting @nav{} @cindex Fit @cindex FitS @cindex PutsFit @cindex mglFitPnts @cindex Fit2 @cindex Fit3 Эти функции подбирают параметры функции для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от одного аргумента @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. Параметр @var{print}=@code{true} включает вывод найденной формулы в @var{Message} (см. @ref{Error handling}). Функции Fit() и FitS() не рисуют полученные массивы. Они заполняют массив @var{fit} по формуле @samp{f} с найденными коэффициентами и возвращают @math{\chi^2} ошибку аппроксимации. При этом, координаты @samp{x,y,z} равно распределены в диапазоне осей координат. Число точек в @var{fit} определяется опцией @code{value} (по умолчанию @var{mglFitPnts}=100). Функции используют библиотеку GSL. @sref{Nonlinear fitting hints} @anchor{fits} @deftypefn {Команда MGL} {} fits res adat sdat 'func' 'var' [ini=0] @deftypefnx {Команда MGL} {} fits res xdat adat sdat 'func' 'var' [ini=0] @deftypefnx {Команда MGL} {} fits res xdat ydat adat sdat 'func' 'var' [ini=0] @deftypefnx {Команда MGL} {} fits res xdat ydat zdat adat sdat 'func' 'var' [ini=0] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} FitS (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const mglDataA &}s, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{HMDT} mgl_fit_ys (@code{HMGL} gr, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_fit_xys (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_fit_xyzs (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_fit_xyzas (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{HCDT} s, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @end ifclear "Подгоняют" формулу вдоль x-, y- и z-направлений для 3d массива заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) с весовым множителем @var{s}[i,j,k]. @end deftypefn @anchor{fit} @deftypefn {Команда MGL} {} fit res adat 'func' 'var' [ini=0] @deftypefnx {Команда MGL} {} fit res xdat adat 'func' 'var' [ini=0] @deftypefnx {Команда MGL} {} fit res xdat ydat adat 'func' 'var' [ini=0] @deftypefnx {Команда MGL} {} fit res xdat ydat zdat adat 'func' 'var' [ini=0] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{HMDT} mgl_fit_y (@code{HMGL} gr, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_fit_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_fit_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_fit_xyza (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @end ifclear "Подгоняют" формулу вдоль x-, y- и z-направлений для 3d массива заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) с весовым множителем 1. @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{mglData} Fit2 (@code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit2 (@code{mglData &}fit, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit3 (@code{mglData &}fit, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Fit3 (@code{mglData &}fit, @code{const mglDataA &}a, @code{const char *}func, @code{const char *}var, @code{mglData &}ini, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{HMDT} mgl_fit_2 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_fit_3 (@code{HMGL} gr, @code{HCDT} a, @code{const char *}func, @code{const char *}var, @code{HMDT} ini, @code{const char *}opt) "Подгоняют" формулу вдоль всех направлений для 2d или 3d массива @var{a} с @var{s}=1 и @var{x}, @var{y}, @var{z} равно распределёнными в диапазоне осей координат. @end deftypefn @end ifclear @anchor{putsfit} @deftypefn {Команда MGL} {} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} PutsFit (@code{mglPoint} p, @code{const char *}prefix=@code{""}, @code{const char *}font=@code{""}, @code{mreal} size=@code{-1}) @deftypefnx {Функция С} @code{void} mgl_puts_fit (@code{HMGL} gr, @code{mreal} x, @code{mreal} y, @code{mreal} z, @code{const char *}prefix, @code{const char *}font, @code{mreal} size) @end ifclear Печатает последнюю подобранную формулу с найденными коэффициентами в точке @var{p0}. Строка @var{prefix} будет напечатана перед формулой. Все другие параметры такие же как в @ref{Text printing}. @end deftypefn @ifclear UDAV @deftypefn {Метод класса @code{mglGraph}} @code{const char *}GetFit () @deftypefnx {Функция С} @code{const char *} mgl_get_fit (@code{HMGL} gr) @deftypefnx {Fortran процедура} @code{} mgl_get_fit (@code{long} gr, @code{char *}out, @code{int} len) Возвращает последнюю подобранную формулу с найденными коэффициентами. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{mreal} GetFitChi () @deftypefnx {Функция С} @code{mreal} mgl_get_fit_chi () Возвращает величину \chi для последней подобранной формулы. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{mreal} GetFitCovar () @deftypefnx {Функция С} @code{mreal} mgl_get_fit_covar () Возвращает ковариационную матрицу для последней подобранной формулы. @end deftypefn @end ifclear @c ################################################################## @external{} @node Data manipulation, , Nonlinear fitting, MathGL core @section Распределение данных @nav{} @cindex Hist @cindex Fill @cindex DataGrid @deftypefn {Команда MGL} {} hist @sc{res} xdat adat @deftypefnx {Команда MGL} {} hist @sc{res} xdat ydat adat @deftypefnx {Команда MGL} {} hist @sc{res} xdat ydat zdat adat @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Hist (@code{const mglDataA &}x, @code{const mglDataA &}a, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Hist (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}a, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} Hist (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}a, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{HMDT} mgl_hist_x (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} a, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_hist_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} a, @code{const char *}opt) @deftypefnx {Функция С} @code{HMDT} mgl_hist_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} a, @code{const char *}opt) @end ifclear Создают распределения данных. Они не рисуют данные. Функции могут быть полезны в случае когда данные пользователя определены на случайно расположенных точка (например, после PIC расчетов) и он хочет построить график, требующий регулярных данных (данных на сетках). Диапазон сеток равен диапазону осей координат. Массивы @var{x}, @var{y}, @var{z} определяют положение (координаты) точек. Массив @var{a} задает значения данных. Число точек в результате @var{res} определяется опцией @code{value} (по умолчанию @var{mglFitPnts}=100). @end deftypefn @deftypefn {Команда MGL} {} fill dat 'eq' @deftypefnx {Команда MGL} {} fill dat 'eq' vdat @deftypefnx {Команда MGL} {} fill dat 'eq' vdat wdat @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Fill (@code{mglData &}u, @code{const char *}eq, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Fill (@code{mglData &}u, @code{const char *}eq, @code{const mglDataA &}v, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Fill (@code{mglData &}u, @code{const char *}eq, @code{const mglDataA &}v, @code{const mglDataA &}w, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_data_fill_eq (@code{HMGL} gr, @code{HMDT} u, @code{const char *}eq, @code{HCDT}v, @code{HCDT}w, @code{const char *}opt) @end ifclear Заполняют значения массива @samp{u} в соответствии с формулой в строке @var{eq}. Формула -- произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются в диапазоне изменения осей координат. Переменная @samp{u} -- значение исходного массива. Переменные @samp{v} и @samp{w} -- значения массивов @var{v}, @var{w}, которые могут быть @code{NULL} (т.е. могут быть опущены). @end deftypefn @deftypefn {Команда MGL} {} datagrid dat xdat ydat zdat @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} DataGrid (@code{mglData &}u, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_data_grid (@code{HMGL} gr, @code{HMDT} u, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}opt) @end ifclear Заполняет значения массива @samp{u} результатом линейной интерполяции по триангулированной поверхности, найденной по произвольно расположенным точкам @samp{x}, @samp{y}, @samp{z}. NAN значение используется для точек сетки вне триангулированной поверхности. @sref{Making regular data} @end deftypefn @deftypefn {Команда MGL} {} refill dat xdat vdat [sl=-1] @deftypefnx {Команда MGL} {} refill dat xdat ydat vdat [sl=-1] @deftypefnx {Команда MGL} {} refill dat xdat ydat zdat vdat @ifclear UDAV @deftypefnx {Метод класса @code{mglData}} @code{void} Refill (@code{mglDataA &}dat, @code{const mglDataA &}x, @code{const mglDataA &}v, @code{long} sl=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglData}} @code{void} Refill (@code{mglDataA &}dat, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}v, @code{long} sl=@code{-1}, @code{const char *}opt=@code{""}) @deftypefnx {Метод класса @code{mglData}} @code{void} Refill (@code{mglDataA &}dat, @code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}v, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{void} mgl_data_refill_gr (@code{HMGL} gr, @code{HMDT} a, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} v, @code{long} sl, @code{const char *}opt) @end ifclear Заполняет значениями интерполяции массива @var{v} в точках @{@var{x}, @var{y}, @var{z}@}=@{@code{X[i], Y[j], Z[k]}@} (или @{@var{x}, @var{y}, @var{z}@}=@{@code{X[i,j,k], Y[i,j,k], Z[i,j,k]}@} если @var{x}, @var{y}, @var{z} не 1d массивы), где @code{X,Y,Z} равномерно распределены в диапазоне осей координат и имеют такой же размер как и массив @var{dat}. Если параметр @var{sl} равен 0 или положительный, то изменятся будет только @var{sl}-ый срез. @end deftypefn @deftypefn {Команда MGL} {} pde @sc{res} 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{mglData} PDE (@code{const char *}ham, @code{const mglDataA &}ini_re, @code{const mglDataA &}ini_im, @code{mreal} dz=@code{0.1}, @code{mreal} k0=@code{100}, @code{const char *}opt=@code{""}) @deftypefnx {Функция С} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{HCDT} ini_re, @code{HCDT} ini_im, @code{mreal} dz, @code{mreal} k0, @code{const char *}opt) @end ifclear Решает уравнение в частных производных du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные оперторы. Параметры @var{ini_re}, @var{ini_im} задают действительную и мнимую часть начального распределения поля. Координаты @samp{x}, @samp{y}, @samp{z} полагаются в диапазоне изменения осей координат. Отмечу, ято в действительности этот диапазон увеличен на 3/2 для уменьшения отражения от границ сетки. Параметр @var{dz} задает шаг по эволюционной координате z. Сейчас используется упрощенный вид функции @var{ham} -- исключены все ``смешанные'' члены (типа @samp{x*p}->x*d/dx). Например, в 2D случае это функция вида @math{ham = f(p,z) + g(x,z,u)}. Однако, коммутирующие члены (типа @samp{x*q}->x*d/dy) разрешены. Переменная @samp{u} используется для амплитуды поля |u|, что позволяет решать нелинейные задачи -- например уравнение Шредингера @code{ham="p^2 + q^2 - u^2"}. Вы можете задавать мнимую часть для поглощения волн, например @code{ham = "p^2 + i*x*(x>0)"}, но только для линейной зависимости от переменной @samp{i} (т.е. @math{ham = hre+i*him}). @sref{PDE solving hints} @end deftypefn @c ################################################################## @c @external{} @c @node IDTF functions, , Data distributions, MathGL core @c @section IDTF функции @c @nav{} @c Эти функции обеспечивают поддержку особых возможностей при создании IDTF. Во всех прочих случаях они не делают ничего. @c @deftypefn {Метод класса @code{mglGraph}} @code{void} VertexColor (@code{bool} enable) @c Разрешает плавное изменение цвета. @c @end deftypefn @c @deftypefn {Метод класса @code{mglGraph}} @code{void} Compression (@code{bool} enable) @c Дает меньший объем файла, но с худшим качеством. @c @end deftypefn @c inline void DoubleSided(bool){} // NOTE: Add later -- IDTF @c inline void TextureColor(bool){} // NOTE: Add later -- IDTF @c @end ifclear @external{} mathgl-2.4.1/texinfo/widget_en.texi0000664000175000017500000010436013134046534017103 0ustar balakinbalakin @c ------------------------------------------------------------------ @chapter Widget classes @nav{} @cindex mglWnd @cindex mglGLUT @cindex Fl_MathGL @cindex QMathGL @cindex window @cindex widgets There are set of ``window'' classes for making a window with MathGL graphics: @code{mglWindow}, @code{mglFLTK}, @code{mglQT} and @code{mglGLUT} for whole window, @code{Fl_MathGL} and @code{QMathGL} as widgets. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGLUT}) also have toolbar and menu for simplifying plot manipulation. All window classes have mostly the same set of functions derived from @ref{mglWnd class}. For drawing you can use: @code{NULL} pointer if you'll update plot manually, global callback function of type @code{int draw(@code{HMGL} gr, @code{void *}p)} or @code{int draw(@code{mglGraph *}gr)}, or instance of class derived from @ref{mglDraw class}. Basically, this class have 2 main virtual methods: @verbatim class mglDraw { public: virtual int Draw(mglGraph *) { return 0; }; virtual void Reload() {}; }; @end verbatim You should inherit yours class from @code{mglDraw} and re-implement one or both functions for drawing. The window can be constructed using one of following classes (see @ref{Using MathGL window} for examples). @deftypefn {Constructor on @code{mglFLTK}} {} mglFLTK (@code{const char *}title=@code{"MathGL"}) @deftypefnx {Constructor on @code{mglFLTK}} {} mglFLTK (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title=@code{"MathGL"}, @code{void *}par=@code{NULL}, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p)=0) @deftypefnx {Constructor on @code{mglFLTK}} {} mglFLTK (@code{int} (*draw)(@code{mglGraph *}gr), @code{const char *}title=@code{"MathGL"}) @deftypefnx {Constructor on @code{mglFLTK}} {} mglFLTK (@code{mglDraw *}draw, @code{const char *}title=@code{"MathGL"}) @deftypefnx {C function} @code{HMGL} mgl_create_graph_fltk (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p)) Creates a FLTK-based window for plotting. Parameter @var{draw} sets a pointer to drawing function (this is the name of function) or instance of @ref{mglDraw class}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Note, that @var{draw} can be @code{NULL} for displaying static bitmaps only (no animation or slides). Parameter @var{title} sets the title of the window. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. FLTK-based windows is a bit faster than Qt ones, and provide better support of multi-threading. @end deftypefn @deftypefn {Method on @code{mglFLTK}} @code{int} RunThr () @deftypefnx {C function} @code{int} mgl_fltk_thr () Run main loop for event handling in separate thread. Note, right now it work for FLTK windows only. @end deftypefn @deftypefn {Constructor on @code{mglQT}} {} mglQT (@code{const char *}title=@code{"MathGL"}) @deftypefnx {Constructor on @code{mglQT}} {} mglQT (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title=@code{"MathGL"}, @code{void *}par=@code{NULL}, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p)=0) @deftypefnx {Constructor on @code{mglQT}} {} mglQT (@code{int} (*draw)(@code{mglGraph *}gr), @code{const char *}title=@code{"MathGL"}) @deftypefnx {Constructor on @code{mglQT}} {} mglQT (@code{mglDraw *}draw, @code{const char *}title=@code{"MathGL"}) @deftypefnx {C function} @code{HMGL} mgl_create_graph_qt (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p)) Creates a FLTK-based window for plotting. Parameter @var{draw} sets a pointer to drawing function (this is the name of function) or instance of @ref{mglDraw class}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Note, that @var{draw} can be @code{NULL} for displaying static bitmaps only (no animation or slides). Parameter @var{title} sets the title of the window. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. @end deftypefn @deftypefn {Constructor on @code{mglGLUT}} {} mglGLUT (@code{const char *}title=@code{"MathGL"}) @deftypefnx {Constructor on @code{mglGLUT}} {} mglGLUT (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title=@code{"MathGL"}, @code{void *}par=@code{NULL}, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p)=0) @deftypefnx {Constructor on @code{mglGLUT}} {} mglGLUT (@code{int} (*draw)(@code{mglGraph *}gr), @code{const char *}title=@code{"MathGL"}) @deftypefnx {Constructor on @code{mglGLUT}} {} mglGLUT (@code{mglDraw *}draw, @code{const char *}title=@code{"MathGL"}) @deftypefnx {C function} @code{HMGL} mgl_create_graph_glut (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p)) Creates a GLUT-based window for plotting. Parameter @var{draw} sets a pointer to drawing function (this is the name of function) or instance of @code{mglDraw} class. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Note, that @var{draw} can be @code{NULL} for displaying static bitmaps only (no animation or slides). Parameter @var{title} sets the title of the window. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. GLUT-based windows are fastest one but there is no toolbar, and plot have some issues due to OpenGL limitations. There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for the rotating; ',', '.' for viewing of the previous or next frames in the list; 'r' for the switching of transparency; 'f' for the switching of lightning; 'x' for hiding (closing) the window. @end deftypefn @menu * mglWnd class:: * mglDraw class:: * Fl_MathGL class:: * QMathGL class:: * wxMathGL class:: @end menu @c ------------------------------------------------------------------ @external{} @node mglWnd class, mglDraw class, , Widget classes @section mglWnd class @nav{} @cindex mglWnd @cindex window @c @cindex mglDraw This class is abstract class derived from mglGraph class (see @ref{MathGL core}). It is defined in @code{#include } and provide base methods for handling window with MathGL graphics. Inherited classes are exist for QT and FLTK widget libraries: @code{mglQT} in @code{#include }, @code{mglFLTK} in @code{#include }. @deftypefn {Method on @code{mglWnd}} @code{int} Run () @deftypefnx {C function} @code{int} mgl_qt_run () @deftypefnx {C function} @code{int} mgl_fltk_run () Run main loop for event handling. Usually it should be called in a separate thread or as last function call in @code{main()}. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} SetDrawFunc (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{void *}par=@code{NULL}, @code{void} (*reload)(@code{void *}p)=@code{NULL}) @deftypefnx {Method on @code{mglWnd}} @code{void} SetDrawFunc (@code{int} (*draw)(@code{mglGraph *}gr)) @deftypefnx {Method on @code{mglWnd}} @code{void} SetDrawFunc (@code{mglDraw *}obj) @deftypefnx {C function} @code{void} mgl_wnd_set_func (@code{HMGL} gr, @code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{void *}par, @code{void} (*reload)(@code{void *}p)) Set callback functions for drawing (@var{draw}) and data reloading (@var{reload}), or instance @var{obj} of a class derived from @code{mglDraw}. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} SetClickFunc (@code{void} (*func)(@code{HMGL} gr, @code{void *}p)) @deftypefnx {C function} @code{void} mgl_set_click_func (@code{void} (*func)(@code{HMGL} gr, @code{void *}p)) Set callback function @var{func} which will be called on mouse click. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} SetMutex(@code{pthread_mutex_t *}mutex) @deftypefnx {C function} @code{void} mgl_wnd_set_mutex(@code{HMGL} gr, @code{pthread_mutex_t *}mutex) Set external mutex for lock/unlock external calculations by widget. This functions is called automatically at using @ref{mglDraw class}. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} ToggleAlpha () @deftypefnx {C function} @code{void} mgl_wnd_toggle_alpha (@code{HMGL} gr) Switch on/off transparency but do not overwrite switches in user drawing function. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} ToggleLight () @deftypefnx {C function} @code{void} mgl_wnd_toggle_light (@code{HMGL} gr) Switch on/off lighting but do not overwrite switches in user drawing function. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} ToggleRotate () @deftypefnx {C function} @code{void} mgl_wnd_toggle_rotate (@code{HMGL} gr) Switch on/off rotation by mouse. Usually, left button is used for rotation, middle button for shift, right button for zoom/perspective. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} ToggleZoom () @deftypefnx {C function} @code{void} mgl_wnd_toggle_zoom (@code{HMGL} gr) Switch on/off zooming by mouse. Just select rectangular region by mouse and it will be zoomed in. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} ToggleNo () @deftypefnx {C function} @code{void} mgl_wnd_toggle_no (@code{HMGL} gr) Switch off all zooming and rotation and restore initial state. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} Update () @deftypefnx {C function} @code{void} mgl_wnd_update (@code{HMGL} gr) Update window contents. This is very useful function for manual updating the plot while long calculation was running in parallel thread. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} ReLoad () @deftypefnx {C function} @code{void} mgl_wnd_reload (@code{HMGL} gr) Reload user data and update picture. This function also update number of frames which drawing function can create. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} Adjust () @deftypefnx {C function} @code{void} mgl_wnd_adjust (@code{HMGL} gr) Adjust size of bitmap to window size. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} NextFrame () @deftypefnx {C function} @code{void} mgl_wnd_next_frame (@code{HMGL} gr) Show next frame if one. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} PrevFrame () @deftypefnx {C function} @code{void} mgl_wnd_prev_frame (@code{HMGL} gr) Show previous frame if one. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} Animation () @deftypefnx {C function} @code{void} mgl_wnd_animation (@code{HMGL} gr) Run/stop slideshow (animation) of frames. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} SetDelay (@code{double} dt) @deftypefnx {C function} @code{void} mgl_wnd_set_delay (@code{HMGL} gr, @code{double} dt) Sets delay for animation in seconds. Default value is 1 sec. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{double} GetDelay () @deftypefnx {C function} @code{double} mgl_wnd_get_delay (@code{HMGL} gr) Gets delay for animation in seconds. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void} Setup (@code{bool} clfupd=@code{true}, @code{bool} showpos=@code{false}) @deftypefnx {C function} @code{void} mgl_setup_window (@code{HMGL} gr, @code{bool} clfupd, @code{bool} showpos) Enable/disable flags for: @itemize @bullet @item clearing plot before Update(); @item showing the last mouse click position in the widget. @end itemize @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{mglPoint} LastMousePos () @deftypefnx {C function} @code{void} mgl_get_last_mouse_pos (@code{HMGL} gr, @code{mreal *}x, @code{mreal *}y, @code{mreal *}z) Gets last position of mouse click. @end deftypefn @deftypefn {Method on @code{mglWnd}} @code{void *} Widget () @deftypefnx {C function} @code{void *} mgl_fltk_widget (@code{HMGL} gr) @deftypefnx {C function} @code{void *} mgl_qt_widget (@code{HMGL} gr) Return pointer to widget (@ref{Fl_MathGL class} or @ref{QMathGL class}) used for plotting. @end deftypefn @c ------------------------------------------------------------------ @external{} @node mglDraw class, Fl_MathGL class, mglWnd class, Widget classes @section mglDraw class @nav{} @cindex mglDraw This class provide base functionality for callback drawing and running calculation in separate thread. It is defined in @code{#include }. You should make inherited class and implement virtual functions if you need it. @deftypefn {Virtual method on @code{mglDraw}} @code{int} Draw (@code{mglGraph *}gr) This is callback drawing function, which will be called when any redrawing is required for the window. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. @end deftypefn @deftypefn {Virtual method on @code{mglDraw}} @code{void} Reload () This is callback function, which will be called if user press menu or toolbutton to reload data. @end deftypefn @deftypefn {Virtual method on @code{mglDraw}} @code{void} Click () This is callback function, which will be called if user click mouse. @end deftypefn @deftypefn {Virtual method on @code{mglDraw}} @code{void} Calc () This is callback function, which will be called if user start calculations in separate thread by calling @code{mglDraw::Run()} function. It should periodically call @code{mglDraw::Check()} function to check if calculations should be paused. @end deftypefn @deftypefn {Method on @code{mglDraw}} @code{void} Run () Runs @code{mglDraw::Calc()} function in separate thread. It also initialize @code{mglDraw::thr} variable and unlock @code{mglDraw::mutex}. Function is present only if FLTK support for widgets was enabled. @end deftypefn @deftypefn {Method on @code{mglDraw}} @code{void} Cancel () Cancels thread with calculations. Function is present only if FLTK support for widgets was enabled. @end deftypefn @deftypefn {Method on @code{mglDraw}} @code{void} Pause () Pauses thread with calculations by locking @code{mglDraw::mutex}. You should call @code{mglDraw::Continue()} to continue calculations. Function is present only if FLTK support for widgets was enabled. @end deftypefn @deftypefn {Method on @code{mglDraw}} @code{void} Continue () Continues calculations by unlocking @code{mglDraw::mutex}. Function is present only if FLTK support for widgets was enabled. @end deftypefn @deftypefn {Method on @code{mglDraw}} @code{void} Continue () Checks if calculations should be paused and pause it. Function is present only if FLTK support for widgets was enabled. @end deftypefn @c ------------------------------------------------------------------ @external{} @node Fl_MathGL class, QMathGL class, mglDraw class, Widget classes @section Fl_MathGL class @nav{} @cindex Fl_MathGL @cindex widgets Class is FLTK widget which display MathGL graphics. It is defined in @code{#include }. @fig{fltk, Example of FLTK window with MathGL plot.} @deftypemethod Fl_MathGL @code{void} set_draw (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p)) @deftypemethodx Fl_MathGL @code{void} set_draw (@code{int} (*draw)(@code{mglGraph *}gr)) @deftypemethodx Fl_MathGL @code{void} set_draw (@code{mglDraw *}draw) Sets drawing function as global function or as one from a class @code{mglDraw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. @end deftypemethod @deftypemethod Fl_MathGL @code{mglDraw *}get_class () Get pointer to @code{mglDraw} class or @code{NULL} if absent. @end deftypemethod @deftypemethod Fl_MathGL @code{void} update () Update (redraw) plot. @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_angle (@code{mreal} t, @code{mreal} p) Set angles for additional plot rotation @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_flag (@code{int} f) Set bitwise flags for general state (1-Alpha, 2-Light) @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_state (@code{bool} r, @code{bool} z) Set flags for handling mouse: @var{z}=@code{true} allow zooming, @var{r}=@code{true} allow rotation/shifting/perspective and so on. @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_zoom (@code{mreal} X1, @code{mreal} Y1, @code{mreal} X2, @code{mreal} Y2) Set zoom in/out region @end deftypemethod @deftypemethod Fl_MathGL @code{void} get_zoom (@code{mreal *}X1, @code{mreal *}Y1, @code{mreal *}X2, @code{mreal *}Y2) Get zoom in/out region @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v) Set popup menu pointer @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_graph (@code{HMGL} gr) @deftypemethodx Fl_MathGL @code{void} set_graph (@code{mglGraph *}gr) Set new grapher instead of built-in one. Note that Fl_MathGL will automatically delete this object at destruction or at new @code{set_graph()} call. @end deftypemethod @deftypemethod Fl_MathGL @code{HMGL} get_graph () Get pointer to grapher. @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_show_warn (@code{bool} val) Show window with warnings after script parsing. @end deftypemethod @deftypemethod Fl_MathGL @code{void} stop (@code{bool} stop=@code{true}) Ask to stop of script parsing. @end deftypemethod @deftypemethod Fl_MathGL @code{void} set_handle_key (@code{bool} val) Enable/disable key handling as in mglview (default is false). @end deftypemethod @deftypemethod Fl_MathGL @code{int} get_last_id () Get id of last clicked object. @end deftypemethod @deftypemethod Fl_MathGL @code{bool} running () Check if script is parsing now or not. @end deftypemethod @deftypecv {Fl_MathGL option} Fl_MathGL @code{Fl_Valuator *} tet_val Pointer to external tet-angle validator. @end deftypecv @deftypecv {Fl_MathGL option} Fl_MathGL @code{Fl_Valuator *} phi_val Pointer to external phi-angle validator. @end deftypecv @c ------------------------------------------------------------------ @external{} @node QMathGL class, wxMathGL class, Fl_MathGL class, Widget classes @section QMathGL class @nav{} @cindex QMathGL @cindex widgets Class is Qt widget which display MathGL graphics. It is defined in @code{#include }. @fig{qt, Example of Qt window with MathGL plot.} @deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr) Sets drawing functions from a class inherited from @code{mglDraw}. @end deftypemethod @deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw@code{)(mglBase *}gr, @code{void *}p@code{)}, @code{void *}par=@code{NULL}) @deftypemethodx QMathGL @code{void} setDraw (@code{int (*}draw@code{)(mglGraph *}gr@code{)}) Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. @end deftypemethod @deftypemethod QMathGL @code{void} setGraph (@code{HMGL} gr) @deftypemethodx QMathGL @code{void} setGraph (@code{mglGraph *}gr) Set pointer to external grapher (instead of built-in one). Note that QMathGL will automatically delete this object at destruction or at new @code{setGraph()} call. @end deftypemethod @deftypemethod QMathGL @code{HMGL} getGraph () Get pointer to grapher. @end deftypemethod @deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p) Set popup menu pointer. @end deftypemethod @deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h) Set widget/picture sizes @end deftypemethod @deftypemethod QMathGL @code{double} getRatio () Return aspect ratio of the picture. @end deftypemethod @deftypemethod QMathGL @code{int} getPer () Get perspective value in percents. @end deftypemethod @deftypemethod QMathGL @code{int} getPhi () Get Phi-angle value in degrees. @end deftypemethod @deftypemethod QMathGL @code{int} getTet () Get Theta-angle value in degrees. @end deftypemethod @deftypemethod QMathGL @code{bool} getAlpha () Get transparency state. @end deftypemethod @deftypemethod QMathGL @code{bool} getLight () Get lightning state. @end deftypemethod @deftypemethod QMathGL @code{bool} getZoom () Get mouse zooming state. @end deftypemethod @deftypemethod QMathGL @code{bool} getRotate () Get mouse rotation state. @end deftypemethod @deftypefn {Slot on @code{QMathGL}} @code{void} refresh () Redraw saved bitmap without executing drawing function. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} update () Update picture by executing drawing function. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} copy () Copy graphics to clipboard. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} copyClickCoor () Copy coordinates of click (as text). @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} print () Print current picture. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} stop () Send signal to stop drawing. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} adjust () Adjust image size to fit whole widget. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} nextSlide () Show next slide. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} prevSlide () Show previous slide. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} animation (@code{bool} st=@code{true}) Start/stop animation. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setPer (@code{int} val) Set perspective value. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setPhi (@code{int} val) Set Phi-angle value. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setTet (@code{int} val) Set Theta-angle value. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setAlpha (@code{bool} val) Switch on/off transparency. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setLight (@code{bool} val) Switch on/off lightning. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setGrid (@code{bool} val) Switch on/off drawing of grid for absolute coordinates. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setZoom (@code{bool} val) Switch on/off mouse zooming. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setRotate (@code{bool} val) Switch on/off mouse rotation. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} zoomIn () Zoom in graphics. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} zoomOut () Zoom out graphics. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} shiftLeft () Shift graphics to left direction. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} shiftRight () Shift graphics to right direction. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} shiftUp () Shift graphics to up direction. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} shiftDown () Shift graphics to down direction. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} restore () Restore zoom and rotation to default values. @end deftypefn @c @deftypefn {Slot on @code{QMathGL}} @code{void} reload () @c Reload data and redraw graphics. @c @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportPNG (@code{QString} fname=@code{""}) Export current picture to PNG file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportPNGs (@code{QString} fname=@code{""}) Export current picture to PNG file (no transparency). @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportJPG (@code{QString} fname=@code{""}) Export current picture to JPEG file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportBPS (@code{QString} fname=@code{""}) Export current picture to bitmap EPS file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportEPS (@code{QString} fname=@code{""}) Export current picture to vector EPS file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportSVG (@code{QString} fname=@code{""}) Export current picture to SVG file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportGIF (@code{QString} fname=@code{""}) Export current picture to GIF file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportTEX (@code{QString} fname=@code{""}) Export current picture to LaTeX/Tikz file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportTGA (@code{QString} fname=@code{""}) Export current picture to TGA file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportXYZ (@code{QString} fname=@code{""}) Export current picture to XYZ/XYZL/XYZF file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportOBJ (@code{QString} fname=@code{""}) Export current picture to OBJ/MTL file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportSTL (@code{QString} fname=@code{""}) Export current picture to STL file. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} exportOFF (@code{QString} fname=@code{""}) Export current picture to OFF file. @end deftypefn @c @deftypefn {Slot on @code{QMathGL}} @code{void} exportX3D (@code{QString} fname=@code{""}) @c Export current picture to X3D file. @c @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void}setUsePrimitives (@code{bool} use) Enable using list of primitives for frames. This allows frames transformation/zoom but requires much more memory. Default value is @code{true}. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} setMGLFont (@code{QString} path) Restore (@var{path}=@code{""}) or load font for graphics. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} about () Show about information. @end deftypefn @deftypefn {Slot on @code{QMathGL}} @code{void} aboutQt () Show information about Qt version. @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} phiChanged (@code{int} val) Phi angle changed (by mouse or by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} tetChanged (@code{int} val) Tet angle changed (by mouse or by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} perChanged (@code{int} val) Perspective changed (by mouse or by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} alphaChanged (@code{bool} val) Transparency changed (by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} lightChanged (@code{bool} val) Lighting changed (by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} gridChanged (@code{bool} val) Grid drawing changed (by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} zoomChanged (@code{bool} val) Zooming changed (by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} rotateChanged (@code{bool} val) Rotation changed (by toolbar). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} mouseClick (@code{mreal} x, @code{mreal} y, @code{mreal} z) Mouse click take place at position @{x,y,z@}. @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} frameChanged (@code{int} val) Need another frame to show. @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} showWarn (@code{QString} warn) Need to show warning. @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} posChanged (@code{QString} pos) Position of mouse click is changed. @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} objChanged (@code{int} id) Object id is changed (due to mouse click). @end deftypefn @deftypefn {Signal on @code{QMathGL}} @code{void} refreshData () Data can be changed (drawing is finished). @end deftypefn @deftypecv {QMathGL option} QMathGL @code{QString} appName Application name for message boxes. @end deftypecv @deftypecv {QMathGL option} QMathGL @code{bool} autoResize Allow auto resizing (default is false). @end deftypecv @c ------------------------------------------------------------------ @external{} @node wxMathGL class, , QMathGL class, Widget classes @section wxMathGL class @nav{} @cindex wxMathGL @cindex widgets Class is WX widget which display MathGL graphics. It is defined in @code{#include }. @deftypemethod wxMathGL @code{void} SetDraw (@code{mglDraw *}dr) Sets drawing functions from a class inherited from @code{mglDraw}. @end deftypemethod @deftypemethod wxMathGL @code{void} SetDraw (@code{int (*}draw@code{)(mglBase *}gr, @code{void *}p@code{)}, @code{void *}par=@code{NULL}) @deftypemethodx wxMathGL @code{void} SetDraw (@code{int (*}draw@code{)(mglGraph *}gr@code{)}) Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. @end deftypemethod @deftypemethod wxMathGL @code{void} SetGraph (@code{HMGL} gr) @deftypemethodx wxMathGL @code{void} SetGraph (@code{mglGraph *}gr) Set pointer to external grapher (instead of built-in one). Note that wxMathGL will automatically delete this object at destruction or at new @code{setGraph()} call. @end deftypemethod @deftypemethod wxMathGL @code{HMGL} GetGraph () Get pointer to grapher. @end deftypemethod @deftypemethod wxMathGL @code{void} SetPopup (@code{wxMenu *}p) Set popup menu pointer. @end deftypemethod @deftypemethod wxMathGL @code{void} SetSize (@code{int} w, @code{int} h) Set widget/picture sizes @end deftypemethod @deftypemethod wxMathGL @code{double} GetRatio () Return aspect ratio of the picture. @end deftypemethod @deftypemethod wxMathGL @code{int} GetPer () Get perspective value in percents. @end deftypemethod @deftypemethod wxMathGL @code{int} GetPhi () Get Phi-angle value in degrees. @end deftypemethod @deftypemethod wxMathGL @code{int} GetTet () Get Theta-angle value in degrees. @end deftypemethod @deftypemethod wxMathGL @code{bool} GetAlpha () Get transparency state. @end deftypemethod @deftypemethod wxMathGL @code{bool} GetLight () Get lightning state. @end deftypemethod @deftypemethod wxMathGL @code{bool} GetZoom () Get mouse zooming state. @end deftypemethod @deftypemethod wxMathGL @code{bool} GetRotate () Get mouse rotation state. @end deftypemethod @deftypemethod wxMathGL @code{void} Repaint () Redraw saved bitmap without executing drawing function. @end deftypemethod @deftypemethod wxMathGL @code{void} Update () Update picture by executing drawing function. @end deftypemethod @deftypemethod wxMathGL @code{void} Copy () Copy graphics to clipboard. @end deftypemethod @deftypemethod wxMathGL @code{void} Print () Print current picture. @end deftypemethod @comment @deftypemethod wxMathGL @code{void} Stop () @comment Send signal to stop drawing. @comment @end deftypemethod @deftypemethod wxMathGL @code{void} Adjust () Adjust image size to fit whole widget. @end deftypemethod @deftypemethod wxMathGL @code{void} NextSlide () Show next slide. @end deftypemethod @deftypemethod wxMathGL @code{void} PrevSlide () Show previous slide. @end deftypemethod @deftypemethod wxMathGL @code{void} Animation (@code{bool} st=@code{true}) Start/stop animation. @end deftypemethod @deftypemethod wxMathGL @code{void} SetPer (@code{int} val) Set perspective value. @end deftypemethod @deftypemethod wxMathGL @code{void} SetPhi (@code{int} val) Set Phi-angle value. @end deftypemethod @deftypemethod wxMathGL @code{void} SetTet (@code{int} val) Set Theta-angle value. @end deftypemethod @deftypemethod wxMathGL @code{void} SetAlpha (@code{bool} val) Switch on/off transparency. @end deftypemethod @deftypemethod wxMathGL @code{void} SetLight (@code{bool} val) Switch on/off lightning. @end deftypemethod @comment @deftypemethod wxMathGL @code{void} SetGrid (@code{bool} val) @comment Switch on/off drawing of grid for absolute coordinates. @comment @end deftypemethod @deftypemethod wxMathGL @code{void} SetZoom (@code{bool} val) Switch on/off mouse zooming. @end deftypemethod @deftypemethod wxMathGL @code{void} SetRotate (@code{bool} val) Switch on/off mouse rotation. @end deftypemethod @deftypemethod wxMathGL @code{void} ZoomIn () Zoom in graphics. @end deftypemethod @deftypemethod wxMathGL @code{void} ZoomOut () Zoom out graphics. @end deftypemethod @deftypemethod wxMathGL @code{void} ShiftLeft () Shift graphics to left direction. @end deftypemethod @deftypemethod wxMathGL @code{void} ShiftRight () Shift graphics to right direction. @end deftypemethod @deftypemethod wxMathGL @code{void} ShiftUp () Shift graphics to up direction. @end deftypemethod @deftypemethod wxMathGL @code{void} ShiftDown () Shift graphics to down direction. @end deftypemethod @deftypemethod wxMathGL @code{void} Restore () Restore zoom and rotation to default values. @end deftypemethod @c @deftypemethod wxMathGL @code{void} reload () @c Reload data and redraw graphics. @c @end deftypemethod @deftypemethod wxMathGL @code{void} About () Show about information. @end deftypemethod @deftypemethod wxMathGL @code{void} ExportPNG (@code{QString} fname=@code{""}) Export current picture to PNG file. @end deftypemethod @deftypemethod wxMathGL @code{void} ExportPNGs (@code{QString} fname=@code{""}) Export current picture to PNG file (no transparency). @end deftypemethod @deftypemethod wxMathGL @code{void} ExportJPG (@code{QString} fname=@code{""}) Export current picture to JPEG file. @end deftypemethod @deftypemethod wxMathGL @code{void} ExportBPS (@code{QString} fname=@code{""}) Export current picture to bitmap EPS file. @end deftypemethod @deftypemethod wxMathGL @code{void} ExportEPS (@code{QString} fname=@code{""}) Export current picture to vector EPS file. @end deftypemethod @deftypemethod wxMathGL @code{void} ExportSVG (@code{QString} fname=@code{""}) Export current picture to SVG file. @end deftypemethod @external{} mathgl-2.4.1/texinfo/classes.png0000664000175000017500000041637613134046534016423 0ustar balakinbalakinPNG  IHDRC/bKGD IDATxw|Sw7=E  *S_A@ 8PTDDEΟ" n Ee*2E@E@2l3?I۴Ioz>ȹ{A!l[ld([:[vءt"<<\uԱ4cǎѣhլYc9m߾c&22Rjղ4ÇĉxS\\,jjveooupS (!P*UJIIIVxE\\gi  СC-%ڵӲeU".]JV׌):du *YPtI3fXk Fhgu@|9}%: Py-: X-ާu*V;0% mTz5Sv2'hndNoڂe{ &}J21L- ` $CP@2- ` $CP@2- ` $CP@2- ` $CP@2- ` $CaCZdNM:PX"jB#5gc?>L -L!) :Wt`]5\g%ˑn.MQ;EW#W_Tկ.IrA yv$Wqxn޴^~kѱ*!>^ѱ_QW~"cro pfiir?ӧe ox@*]M~sمJ*HMJ+u</ 8_Y3$$T˖S/U.M DEll,ը!-Y19Y۟/p%9HuQ &۶'k/+5~+{U \G:%~ԲRJtғOJqqҴiVG Tai"{[n1^ZZN?u+~ȁfJK"EPXt\jzf=#YQU{{F*Y gN녻:;Sn[Zj]Ȩ(9uRmf轧UN];uJ iV|yS'^=)&F:q$G͓&L^P4{V&&JI&I#͙#}kۘȁ?l,c[-nAv kDÜKKOJ֗Wʧtz=EYFڽSu6 T^-0PIMڴ׃/߯V;[2|@&ڢy2-WN TN#N#GdԠ4|4b96yru8/UJ5S^ԽO(Iq-  墫m9=5Sw^jFRl-g3IsNf-tϓ/( )];$C }R:՚5=ڸNiQ:C︧DC?ߚ5W_sg~*VO{ӫmi^svm馛*qt(eftOO?o4coVwe>;v<^ܥfjիժr_y%S/'榮{汢~o)LSܦ95蟣Ue-jмUSt雹s%=2*Qޏŗ9]$C.](ўݷ Z0~]T[׮қFKg~9qӮ ݹ߫|~Z8W |Tްoޠ7omBr} COq;᫙qSt >k{-oթ%xA ⺻SيK$Nodni 7$c[$^6n;Yl 3L=[uڵf[3z=Tϸ7E۲l&լYɕ#*7WAL7Qkך`,ژ~YPJrL߫_ȓ=q^{mߚ7w[pi,lt\u /8|~t]znM5k)1;CK1W7CV}A~oɯ9aJINV+҈ 4eش_cFWhZjFI'Rjոu;EDF)"2JMڴװ/yձj)Nu u CTz ;_';o1cj֫(EDz tGKI O>_Smk-80I h3,̹;\cfo6-oX iT颋p8m9?4]T8vI]|I@]{y-YI} Seqy/$;@Jbmϛc=zd]&ڦ#R%;y5?[3sŻ5%Im;ߖy[kck$^)а0UQSvӰ)s\/jj:񿺬5*_JKMѼ +vaڼ;թZrY:5'iɽgoͷs=sr3z.Rޡe&E;Ճp䓢z>؅M.|f-$IG$-WPI~ PXtg|hiI&';7OwVNݛJpMxA /I.܀y?o<ߟ\Fxߎ֥K\)+Y+&A[L9ڒ({u-w[TIv.^ڏ?nFZge[3w5@:W|5oQ}P{K~m U5C)V.0=Wo}CB^swK6x`PKM8ny٨~]ܡ%I&&kdu}MsNiV]Xl:|\X8Ua~%I2-?wtzZ;7Owޔx6^N˖:{r~O?Vb؅?ԯ_11?uRg*&L 9YObOL{n&MƚgΘaڶ}]rkTPZ*$4pϽ۷H^qK럣G܎( $m$I'%QںExlB"PxҒT5n%C""u>s m+#b$5bItYM2Vnx=n-\Q||P;_Z*VS'upn]2BI*UxsZ񽠕9| ݱCrѳ|>կBזDa|Pײ+<ި_ٹ6fapژz>Ru}Zl.["ɴ]oy:7s8Y7&MKuӴ0m^$C!IJMp(5,L[Hx"+;Јd˖qINVn&OD7+))XeYTTΜ֩GUyyΟ<~ɳٳС9-7፺VV"#3޿1ޒ8kc: ~  p8]'9$hпIЯ+ =U**Z~]鯃(-5E֔H߫r]j+my^{WkQ"1VfY #k傯u?}J~]y_U^KK}v[>q\^A=o/x5;_%~}λvm\':MpRu1mG}:U-¹E{D߾fʕGΝf;O?MիK.1SYc JGHK=&I3fd=b+7KIKٳҒ%f֭yk eV]sՅfƌ!!Jf~O['+--UgcZ|$vK3oߵ\RG^S>ס?)5%E))am^fzWOuXc0OVZ! ZRU{G |T+֊s{O};}BBĖs}W7אw&|=?jJM]짟ӡ?齧sۣOj ]^O{uӎuk]y"1}ɇŊ%U<[RWtl^>O^|R.ҬQj֨w^[l9=:b;OSS͖]߾رfujw-+Իצګ:BCrٳNLcǼϩTɔ[LF;Uku{wi&̖ B^|-wl\)SVz~pH=A>6>>+Ϡg(,p8]& j:K5"c:4RWR_T2kL#.Q:^KR:G5r﯏$:6Vç ܯJk($4L1eʪIOϸU^f-4||xJ-PPQF/{zK@*:O-$?׈ t=+)SV!a-_A /o/߯VN]a;-3IҥhˤO>F0e!˪URRFf0lA9Rڷ/0yIj\8[i g17w/o [u]T}V<̩^26;;u4oe)8$DU9վω)SV/:U/+n謊SXDBBTR5>fEb +ȑ{2 J¡tې_PEVxOu9mu2LO*-K*U*s57vS-VdUz-۰ޘpPB{[b;qqqڷo wI5NW7/o3Kڵke˖yg*&GFtc~c 3lE 3aC̒f͚_4~iљ& kcdgϬKꫭz(...sۣO@@3pWh԰7@=ᛩ%I .kiq$@~##9ܦqmLw0Ly޹B 3nT?,C+5%E藞O *8$DW~!~k͓KJNo|,l"=mL3I8m{6z,B;݆k˝k:E%8_Xl jVP|5hcd(,$%H:7xL-:QoCQ*R\H}Pͯr&B~ѣM(K7lut@࠮G}$CaJ>PobT"4^L7Pѡxu (>ژ# K6FYld͝ޗ?d1L15V0<0RR6wbKVz.stI%[  Hld([`5y R!Y- "6WPu&0c<[  Hld([  Bcq~ntcCS3@ b<[g(lđZlar?V[(QIJ^K8shau@ѭ_ou{$'Yd(laUڶvamԋOZ,0v#sr`s ` $Cmr]qT~!FYӦMSZZa„ `s=ڵBtt!{jԨaZjj{18qBWnuHVR%WT)͚5ˣe\rVzHW]ua^cu[RJ-+AÇogyF-[:[R! nݺ:w*T{tV¸qԧOIRϞ=5qD#VZ/\ԤIo 8*'=0y2rH;gVS>~ƍgqD=7ܟ6mcaD믿k.. pF IDATPdGј1cr{7`QD}L2E{~JJ^{5 #~7͛7/DZ!Cs$Cu>>Ȣ{HNN8qvQ2/rڵk5g"|PErA;鹷zKgΜ)4iߟxZZnADիpB 8G2@d+4cǎO?-{=WhnSNeP>Whnׯw(mt}J~kS9wAթSe2T*V={uiѢEOA~PN:ENJRŊw^x02 }zUF^4~xE+YF-[,VM6կ :Bg(}JJ"--MoFˡw(G&ǎӨQO4 6,k2 &;O.~RVZEPP.+488Xݻw3T㣏>RN\o;(iӦZ\9 2D\sMXM8Quuz 6~9O8Q_~2B2Kz;ƍ5m4wy9_tE?VZo1O Whٲe5x`ݻW 3Tzm۶iSN; 2$Op=#ڵk>#8߾}{… .DPPNo]6lЌ3t%-[j_t8GP ӦMӎ;2˔)W^yE{+2eʸ|nhhz۷?\y.%%#d}j׮]=z?| 7hժUZ`Zhs®HS4TCx7PGw֬Yt饗UNV7hӦM֭k^oÖT#G|X|飝;w?VڵU楗^3gjÆ ֭~m%$$x(b pL2E9rvޭ(::[nڲefΜujĈްf-YD=ۧ#FRJ*M6b ]uUzW] DVl۶M˗/Wƍ=^vÆ 5sLOںu7o{,$$D[nU=ZnFRk׮/(sAmٲSHΛ7OWZ<~W G~֭[{?{Z~XXz{t򃂂ԹsgE ` $CP6Wy:|FF!FxPt@# Hld([  XMNM_ߥd׼>L15#G>zhZF[vmٳgk֭Ecիa8w^͛70laϞ=NJJ|`a4qeuVϋnuzǏWr,>ԥKÀ `} Rc?V#G^T)%%%Yqqqڷoa85oܯ(h!jstaVxP@2- P(AAfsu0\֬ 6*VåʕFΜ:BF VnA:Ur8J6^ %)ۥ->֯RRGᅲ|RM:Z*>,-Z$st-H2.)s37E()+/ʗ VNCL_?VG ໲[7D̑>ju։iZ2uCs>9rm-ZHIU<_tuf&0&HZIK^T7$mܘuiRR2Rlԩm[\i eJ11&)1n\{{[^^\b~-! 2fȈ0q7on^Gٲf~U\3s?ؼҥO:*o/[wך5W_zܼ*VOwM<ؑulzkU+KXv]VaCm$)ժ%EDWp^nR4jԶT?F 3ݺb@j><&""!!qr8eYξʱc:?_8/{t9?G_\=^/Gߟ|^qle7*<fk.+޸8;wnvF*j*jvz1??nG|=t߿?З_ڈQQyj0hmモ#""s_r4nP9>υZX;v =CR߾fHi||Ttt;H?uڵB$oӥݥͯq۷Kw)S/:Z5KƏ7C82Ld~f4#zyII[$z]c'}4d %y~-_no/ fkܴĞhz,*%t{Y󺮿ތ":u#M(]yerRR.] ̹{ m" `޳6^au:֢gm1?@ss͹{%s+HOy.=_Q}sz?̜c6EGc~ (E 9rKK3%9^ysE[uݺU9w7zP43ڈُ%$ȱu/ GX9ۅ{ƙo6^FÇ w67ʑW^1igFP (>jϷnm{.W;/MPEkעZ{K˖kwa=k朹~{)8W`3m;x:{`/_V$ԯӧc҅}%ڈ7zMnzHZ5x5jHnF$=3?s?|P2Ĵe}U鐊.ibSyw]RZe:ˉ1%Z7݇·o;Ќ]*s w"¥![xZW/ﱊ w>11﹝;c&xa9o3F_ شɬ8zti,' -pؓ'뗷TU%y~ƚ3g ?]hYkHsE29cmk Z|ys͑#w{1fo ~ mzضmsoooރs'~.⹂W[.rgUkX(Uxs7Vp.hegoڷ7H}cZ5%\7h`O_V$ԯϗN0//8omcڿ_j쒒\s0[f͹ Lاu?YrLq9U_ǎbS E;rg ȝwU:v4 DGK]&}I|&zG5"ڶx"-}̵%m~M2/聜nIޭ_Igާ_˗7W$u ic<gFlZ[n1+J+K:-_eo( $]y);$m,ysΞi-Z$͛gF#լiF4IժoI(cSuߔfu8>loSF|,pxWaXaq܂ʌ 5Ci] ylUX8Y<] 3ŭ[Rԯ-`5;62 WÆf2Ľxn2Pz\zȱ{5ozԺuknݺYv֭w}>c-Xo6l5jd;޽{[vۚ6m!CX,=Cm.Rj\+))0:m߾]ͳ: kzaSSSch͚5:mܸz6`K@C@;w!X@ -f@ p):(9sFJM: ʔ ~,%E: ""(i)-Rœ,=ku*%EFZP<'OJL8HnEbjC: 6njִ: .:u: x@5(iPڼ(\O~@&)zQzcjXv#6WeUjbuHQG֖ 8 }Rٲ?H]&iuڜm7Zj:#+iJ2ujU3429Y>=kO7uhg/ UtҠAIA2(a\0AjJ*]Z*_^&iƬkMZ6sJ:?tYR:`LԢg%=jUi\3ƍ}GUL&N -AE:"M" Ųuus]Yubu]{WQ, H ET B =?If$~=}&;~g|wrt6kV1̯~cc7SMF6eG{ߦjtYJM'm KW^i-[L['/i#utg vͅFPy7L|^"ݾjSu]pTaTtt%ɒd]z, ,o-1Q֏?ʺ))v^kɊ~oqU̹W^_5;.u汅6|xEJsffjShOզjFRSS9>j?l꫕ϛ34ɞ҂믿^nnnxMyͅf7ϵ$kgƊ|_;%Wկ_?/ 6mZ:7(.m-6m!muyvl/Pq}'U^Y);9 d cuic{|vU)RS+3fW>B z6y1kMO\34S'3fN/,ַcH4qUTdn/Tz?2~[l@iix恙= xQ3M2۱MhMB{|ڼѦʆ;ohِO|{켡ڰms}-;~|4<|^"վjSuڵ|; J ewLYnU'S6x,rc]_-+˜Tg.nׯm6_/Go ڭ6Ttmڔ|M_32LY6g_]֭y-3zmmׯiv?oۛEݔm lgk lg}@o ֐zMgٲbbL3)BgίJ_XWN(g(`ӫ4!63jYٯlfUX$5EۥK7@׍Rm*ړT6׼{77=#u:|XZ5p9vRt!c?(-j%uQhsmn0}{iV/6s󦧛0y,Wu?z>XtlD&鷿 Llɒ[<}<9OpB0Gk,*oRܹͫW^m>ޯx}:tܖ a3d03Uflٻv׭kݖ{CQm*ړM=ե~b|٪KHnԿgEGKad_m 'ipBMb+ <9p O!:852W YxiwWV 9g0o}/g6IyyWeȺB=IT_u,Y3.DF}'htJomwR.uK(5>/ bP~jz['u8=CFKʕRvUW 7{n岅 JmV?$nS~׵޽fͤ͛6ϣQ1V!CSng4%EիnaխSo1CN"OPE4fھY&cQDMVy͵9 d;K[ d;k[V;so '|b)33R3P3s۲M .5 ph_@  42g)}T\,m 7KNtvG4' hs@pր}a@#pټng4d' hs@pր}@#Eh$ihwn;:a=E } #hO@p࠭C]Crwx$I:;5X# ]$C,k[9L2Sjs0!dhDW҆@C+YSRq H, , H  4`lKas4d(Ѐu< aHo|~INdhmP0^hX@ @X  , ,h.w$E%:Լ7 dB2hMIR>N`sDdhţRv̞Ƈdh֊ ;IQ" , &RϞvG͖-vGђew@*-Zdw@w)aw@O=%QuoH",:$[gw@OvG4nf8иG" GC;l_<=@vG v` sIox 0@EEEveeei]tQbb4CP6m4` VRII$)11Q]t9𐜜lN'm,H٣m۶Cqqq6FwnwJOOI~~~ߑ1ahX^X9#vjweYAh^z%M2|…=zOZZv%I3f>c#G}TWX}DGGX4qD6G4.uwgff]v6F& , H $CV#IjũAQ" 4`2d8a.-1|f8/ 4>dœ<ƈPa9CoUt$ŵvMh# 4`]&EBA24̵1/ėr 8$C\lsbOeƏPa"lnXDپ g+gGԼSc%Q"r~(Ò]j h|HNhz $Cs Xˡ#YH8@v v` sIoƯhHJ̯hX@ @X  , 3@;0F%;;+Wγ1ٴiS;vo߾6E@rXe륗^Ҕ)SzTNe_=SRRԹsg#۷kj׮!ߘIR.N ?BLzGTffaVVVkdt{dhD_ܐ_?j3/::Z͚5; Q;t<a@G+YrWjb„ 0aaڰaôg jҤ SQrY$Cq/;Qk֬rrr[h]и=ZwyaP(#Gkfw`g(ЀM2q6GH XIQv` sOԙ/ŗ'p 8$C\LCCxc%ad(oQ7pJKKR]tYgiܹA2M7ݤ9s(66V^x:T//4hڴi^ƍz$C\uUTii͛:%E322ԧOuY~,Rnn{z~ťڹTW' @o|,)ڢE WqqqٱcF޽{kժU,tkjYZxE^R`w8!dh٣Տo3=vPg-ZP~/..SO=&MkݶmFmO?-{,Ɩ%Q3"m~ܹSmڴ{ᨔmժ5Z&&&FQtpkǩl(d$D:plRv˓rr4Ν+SR؞={{|ֱt!EFJMc -)}X&RLL/HVҮ]fۻ$6޶lfޓwhMn,-[ R[˖Rޏ]1  ʒv6ΝҞ=Ҏ&c߹SRPO>YV:gϞ]=Ҋ綺6LMs*) P7 JӦI۷KvGcmS륾͚5Nul)$pAA𞧜__N2.Pt9 &đ @~~lDJN6[RMIoTJL53smǛY;B%0lÇMlÇ}LOtVBù`Ru s1,ߏnƯӏNTy 6-Mj NM5βgrr=>L)))u#66νB)K޶n]WNfe͔eΝ܏d('˲,@HÆU$;*iiRVfQ;ӧNC&C,Iڱkw4A1d(j;4..NyyyYn=a&LϾ펤aHNNV| @D'g5H{K={JziϞfXڠg(@v|yŶnYLwo J8PZ9R&1ڣG0yPbE-u11A A;SW9shڴie,KJLrsk~t_1Hة[O?լモN=505F999j֬YΥWhpy0g(@0i|c˗K52s'oX5mT VP ^GΖ22Lt edH%%۹l }Cܹ"1zif +0`^V&a4 s+wڌ G@}pM/MomjVGTTg~&yݻ)"TqqffƚvU8Pj.01(:\ mǩl(d34Yn/-/6yV!uR9T%YZn}ޡ?p#BMEEUHP /KXaڤvAdʤJÆI#FHSH{ ,8gs: rTm\"S7mZ7i1a0;B3hټKJ7V@T8 zV=Cj嗥70σwS$< 2nC+p*z^w9vI%G;V$BhlH7HHaСRbbpC{UѴil,s$KtF3źuƅd(@ !͙SXTsp@wh\\B!Ij.YqX@)fY.OTtƈhJJ\RTTs=r:^n6Xke]+kڵku7|z]~:uײ y?P(fʕ+Mg<3gԪUM2E'OZzj͘1g9c ^kR7 IDATSu|^[nњ5kj|͕+Wj֬Y>땤Ν;{@=cpP^T TZZ?y<e˖O?Zv)3;;l2}g^N=T;pq+l2}^XknذA6l5-ZlРA5fu-]T/Z6x`yM_k~^ˆ Rkٿr@ Аs=*Hs^5I>l*#ܧ=5綮5Mk~fs͇Ox/wM|P;{׌pH;w+п(xA2w MZ7^ĕ'y-$9Lǻfa-V5}n8U皵}~85=Z^!bBN` AyyyJ8j9ic9WPo$CFIK+#yŜ23x{NF6%:@x}J ؈JtE__(d(yTXH/(*Hgi@=\G{bY$5y ǹG5=DgQv8cwHH,zm[鮻rI:x/xonMSYib͌TB24eG ˷_˚5K:̑vͳ;2WK6IWK#r?K?, .l)]u4TTܘE פW_֮~ƍRFԫWpcKLL^{5ЏҚ;չu7ik%s:vN2{Oz]ӓH?oDi8颋f@xb50eA>|s: r۹Szu]-[Jo}vBƾ%¡vGԋfI ˓>$F,~|t9&1:vԤIp;3gh<,Mŋ^BҒ%;Hs皕菕'bb2f͂?B2T~W 6ibzN(c Ԍ) f[fZcJ٢L+4AP h7ޕI/`HL;O:U: z@}r8bK"yJ_KNV\\F&L0=cB_]$C\LC-T ֯^|Qz%i6EF/ؓ&Yf[}miժU7s6=uIDDc>}"H/(-[RGoIC Ť8tmD_;sBZR*wxb$̓G&KwJ3G*^8,}ߺi=UG:҆F*H%uuJ1??_۷<%RAztĺ]WGρbOu;H^"ngykR6`<ˤmՏ~JkFJ=zִhYRCܛ U2Sz{]R^/ `عJut] $'KW\azv!m&PZZ2@?U8ZuHRB SBBB1&e$ߍgI}T<1VZvT-OIVozfo<^>~IJKJ&緤+I]:|~)ޯԦ -}A& }iҷ_-$wP.URV[j3pW~!tuȑfH22>f̰;Soi:ITJV:[y'C%Q&)ڮbt/{̼?6)_Y)iɽR[B̛}ԡ9ηLL KYfΗ9NiPiXw3Bں_zSa,޵~]yf2sfo!8j=&C=RgztxQۑ|K1J饍F@z 駥o}^&):uԤI< @,i|*%ȑR"l柛C}9GtkݿpJ=JRTDYғ?ҹ|!=uTnߧH?"}r]O}bH\Wkk@?"VvONzWvIPj$_'deuԥ& 4P̉zs_H/|%3vq#n(w[E3wGowq#t+JR ]lO?IsҾ}[^z=WfӞ*3G7uE?~d(6,ieąijuR Xn)k[YkxH1TH5ڃw]ؠˇt1+/K_u!gknW ֧N5ʥ&&[3^l&W`KwgQvBl |Dh8Y~;_\Z9EEfޒF2EǏ4PVMfR>Np{/aOe~PR<Tz5~΢Ef_llPCC RDku[Jh{6Kz2^un]X&+/8fՍmtu*0ǴÅf+ nj{׭m7H[w\6Ծ)_A޽gnSX\Jvsm87']sYhiw?,O̖.]{H͛7 tntk ˷_/҉'JSxOvl=' E1j5~gv8sЪ|/ ?^rl轼UU?zIYJ_(;T5Q)IE%UUG]/"?yT>/;ӥ<9:5lp3ͦhk/?dfJ&m+]ylY=C;M/G:|9IfIC76ԝ#R8;V](vϩr.iY6F 1RN.jsxJpN86.|_,uc[rM5k[AR[Kǯ4s햗,K{W}~A&f4M鮻ٳ>}LUs…fuWWI$WPlN顇KͭZpHg-͜)PkAOvjqOM-y.eޓ>\sU_xdw(ۏvP9X>Z-elR~t꣉*_9rDh $BQ=f[ U35~,t]UWI L [͂ ;M\ʕ e9v-)U3E*>;iܳn+ot*k HUd3ơ{b vh3TOHwI%ns; i^ayKR [+Ͽ9F)$M?ɐF#ʦ7x ԿHQA?q9osP>B-yPIъvRR3[oy&;$L;v4?h._8gb{j`<䧟{^zɬ$)99z*4k[CjyS'O֪G|.Nx2.{i$eK|m];JzS)o/?5f?QuITKvt߻8HZ,4Պ˵%`Mq}+%Sg/SIq0һ jשrQNNtEf{37*)^~Yzߩ}$_!|lujdÇFeˤ㥮]矯m|ڶMNv)ʶcQVHKfl1$Y5{ƵP|j?^yz-I&-Cs$FwIJRb=̝pۦHzJ+U4lRJIȶL"{';HjzhGeO=zP\Uh=ByQq~һ 9*ǀGۥN8r~E"e;3モ'OmkʯR áv+<`緊ʭUVDŤxO[)RDͩN2[R9c|'kOwL)!FٷDZefGi])w YRƑ^X6=D}>+ΡBKuN8JCj䫏!芋OzoO?F;*@ d<5_j yI1-9v5Rs]di}>VV? u4JgͩWY6ߨ?-1'N-VZZ~Z$mNj+ VX9ۡ]u7i#!uڵk2oI&A/ѾnsPRج&j(*J0Abibi0#=C?CZ{y.K&Q [:VV[ֺР{}z}!fU㈐N3VݦoZp^8$p^^*~6Fse}Dμ_Lo{3T|^o /Ҫ'OWih6b[LfB&Z[wJTmijj;*Rc]j3ܥ)ojIߵI^~9=A$O98 ZQ\+  ?VQEg]_WMF:t=1t!'>VfJHqQfϒ;:ءթB>"O%y2=jѯ: Zڻr[->dy%e^z]b7]$C²p뫖)/҅Q39 up@[s'|^QQVޯ+I`iO);ocdOGkߩky^{nz?Gzjo~jtH"//_KXD0 K.8ַՐ}H^,VɇվmP\E5RNTpN9 ߹.o;ʥF<ϯɫ$鰗SmP1wKpkڲDYZGe_~ԕ8%{[9'?@D24myD_\_??j3HfؓO .Ȭ> Yr\byMJR\IVu/PHi]2a@}j3d>GVJ۲{ֻu`[mΈ,_.\Qn |:&$)+p$ƽPQgC@P33 m5Dd_Gie.(֏K+n߬h H UX=wnzM_>2 RaKhTgo_ Ԣoڎ92@+ɵidj/kg2itQ˩|`vg48 QMta:]tp[/ gD8N8#<TE$Iq-Y42Ň-XV>K{ӕPbl򽺻6?٩'[PTm*'47WѓҖKj;:Rc gK|VKx3. sEW|K~0+geVdIxڏu^d)5;ѩ'EZG GtR1s0-ɳD(vo~;)& tM'$;z/hy^J,QN޳ϏR&Pw~3=21uBs}$Y1?V/vVO&Xr@˲S*ʶƭ݊mPKw*ͷJC|,~|?_ծ];S*6B IDAT <!][.K͚5;;գ- JeAx:N m`>mRq.鳧?'{/KOnM*)Pf&PB@mZ}d-;u[ >rup[Rf{rOQRE!SBBſ1Ҝ+7i_pP; .0%pڵH"4-i!d(` e]&Pߔ*2ޡN9$d(-ey7R^_ʥsBʕ]wI#yߦ4s2|@X@ (ťZDMW%>M9p"K2.& R ׵փΕV&L"y!M.u"=TXhOcw.GG @=bmTYnzyN{W w{$5Q>=$+ᆞhZ}[(sAvypJ,MTLÙf֮W%TO8Av׿fNQ1xgal2y=VOaF_SQJl'?c=@qh!U|mǩhߊReLJҚ'JTq.uRt>߇=<'=3{n.ҝwDObbw0w'V=ZT{&KQf8݊YM>[Ψ54H$ !S|wJ[?2?ejÚ?>WO)7QzfeU>wtfU_ދzBeI/hlm.^-=|us81 ̬nL#BJ'9rrTr9cHtbbboJ6HЉ?,e/VNRsqV-+í S#\Ä.]L{sRiiEƍҟ$vtՒ` 륛n>ثJԷo_8RTSɜMh)=*9>QgNS_|oİE42[ҷկ_?itZRy-00=E~Zzili޼ʫo"wғOǏ+R 6ğ|R*9fMSZÖָڭڿʭ=]賷fJot8m;pD(7׿^v~o{/}Pzz?]j^.׼uM׼`evNsENH^vk[K]x$e;wwHmzUz{Oli=)5g"{ل}z/ۖ%WRfnyYzgJp.u<ߥK[?.%ڵTm?~H-J?B4'$f+'EW=W:T3ϴ/VO$CpDw!eyr)EF{-+uXeO[R{\sa,95K皇jyMqRvqynv͆8&#C'N҉TmIK-yHs҆\NX}wߕ-3?P~KΒG: [pXGّ|gd( > _jYfz"OquLm]Ed}&C;]R \IV/ٿ~tvo}_N<{GWK?}'jSk.ܹSvi_ڶM5H:y/Ңx/K$][}_slԡI{ٖ->ꔤkzO.l,%X{v4*--Mm۶O;v"]Z6I}7U&i.耲!"T@ATAEdeU,{Lht6ysyOB&=c@PVwl+A@ \uxk118).ſprQ)'}[1bկWHѿ,߶ xZV9B:tt d78y]]]WfC{!>>f?ŊY战ׯ_ԩS6ܨ[fݻw`, E橘:7|kzCRvtww6Ԯ]HLLYͲk׮qii'Ν;IJ= |}5( BCdhjE_{ l\TG8n{ьW=Ϯ/d3 |깱tw WlPyDB=UTiӦ64빸hS(vŵk׸rʃWrIJJBQ,.?~Ǐ?ٙI&#Z5ksuuU{ּVf͚eN%0f4qvvTR(NgJqQ f꺁狜jV*\+&sH4n ׫YKXNoִSBd? /_^\ruGzf+ڍYlYͺ?foVc=f7f2e4Λ7Oܹs5UTnҥKk5͙3G^ʕ,Yf_~E^HHf=1K(Ywf͚Y/ nŋk]pf3gj hѢu-ZYoƌӬo٭+DVVaEQԏoz\]D m~t[Ic֬{xv;ʑkXsȏL&}veҥԩSÇ+3(5jP/t:Ϳ}G~lV4ieFQ)]ҠASNJ~QF)!!!ʊ+G:!lsѤcw8k[Q4 )J׮r℣{)@xx8 .dvd™[wkq'A;G$eS̛ws[Lsc^ϦiO1mLWL%s1L| &ۻe f'>^.q8V :(n{ʺ "(V/oiT  Ǝ޽{5VrO59s LJJ\|٪{Fų\~˅̄II'|2[{ =A}\cb$#,K̲$\ti&F˴0hA.й:m~]VӎBdNQԮ]:Qn4m?Ww'fY)YWqdve4yF;hM(QͲ+rtQi;fB4yˉk{μӣpase$NUoԔe,|457Xۛ>\:sv,,RFO׌IX1_ܞf:'Д\G<IYg/^[Ӏo5Nq ʼy|ڵcY֞ȸhjk(~&3|p AQ0l=ٯe3*1BB/a"h=Btj3tׁB䔆)]H{c!#&΁keYCϞvdN}AI)IN!r¾}߿?;vh/^=zr/rĒ%Kڵ#ٳ'ǏdɒY3(wB:XP9=Ǻd;PUB8^W^nݚhѢ QrelȬI&a7_ŅC&_D:X]QS;K5768,]S@F*v0Bn0uVMH2T!= "8l""D/p񶝬,d` 'D9Xc'Сz?$$k ۔.]D/_DO USv3(_ƕBq'*WdB2q7.mT]4ac;3W=DdFz;sau}Ne/D^IJzxuEor z`%KjէOׯ}Yߧjժ6R_1j(vMF,λ~:{]v?>;+Mw$<pfi"LBQTL.TcEk{dBW%{L xUq>B!Gb!DIVlJdsaD(@|+ӿZrO~F`/g5dI"1c$*D^r[$9r$﷙uhŭd[Eyy嗭k?j+eqqq=cǎlDžg{y}!jJz*?jw=&&PB\:EQPZlYQH6+0JڵyVb|< q-EIOHVIqDa&" 3S|Ygahcz' 0W@w\,#GBN8A~شiUYƍ3giS~}usN 5DveyplL81ͺV\p^7૯pYg!CIƜC&V?g2z*7R`y?Bh@rr2&-C8ꊷ7l'Dlj_mE^[GɦNWt!U.; &X_+`]д19s$BҥK3rH aSСO<9'NdRf̙ʕ+2e ]v͖ aV"J>b/ I 4$t\噥iB~2H!2 .\(>R{g9ֈP?&S݋֖D"}oNz=zU"W^!44bH;C q{=j׮iqwwgܸqٳjWҭ[7:vh5zTGr^g3W_$B1c@VB$CBCbխﲤI ՏpuM)Wz'ua*ݝ+fB!ՋMra *zj͛G%2J/̒ 3 #]fqɉg'Ə/kA3^oT2߳A /0p@~eweذa,ZQB4wx}'|Ƶɜ_Dy;/]ۙwnbG#(%cr.Y=zW_ȷv #կ<ܣKͅN| 5Ƌ<}͹c$D%*JaaatЁ޽{[%B4h={7n#%BAM>)Zh.]Kb ʔ)cQ~4i AhA3@&N4f1J4s+ԵF#36%McL׼X.r^D^lZ51eV"I !5S\ژ l|S꾨^4^þ D0r^*u13WjM9d21~xVի- *DHH۷of͚Y\rL6-KSLɲQ;v$44ZlԩS dٲeYKfN 듬>evQK8BѢs'#^9" 5a:tOKEQذa7&r*VD "X+fytHn|WaAh;vRSΘ5`Azd}!cڵ7|Z L2%Cm[oEhhUY5k(R!rs2\+s+OܨU60k~htuyV7jrThy&>Cu<9,*n;CBtL'ORJ(c"BMDHP}푚IР>.4LFy !r ·~l9lٲ̘1;:wBhKNNfƌ СX IDAT>;wX)RѣG>I*1Fº$}waؾH~s&ʶ1\X.;Bx8|:E>>nz'*/I$C(Z23gH"Ⰹ#&b.!tdh~|:en+6A۲ CvͷZ24]7_#&|䃨"׻x"V*W!!!ԩS="/^̀qqoرc%/bŊ9gB<;W\X?m;mOa CEF„ FJe  |Y 0 [69S"߉h$D(&uNEʓ&_-$ByVll, QFVҥKb ֬Y#P<>0n Oww(R5iӭ' |fa'w8{n^GWAus/TUD6,kVp ܡ/7ަbUYt?3nSg}Ep; ]#\a^a:YCz\Bk׮wܹsz= `xyy9wBӧOӯ_?o3!V]EsɦGcJP.T^OF*7$kf??SjԀ)Se"{(8pڵk?8tׁ{'ۿ:gUY Kְ_YV兼zF|Y z$]ۗzןMݽO_yrUfFv}ű;=IJ=!~/Gmo08xv#5,MBBq9"׬/tw87LV4en͍4$'Ьh!70`/*VgϦYf( g[F>Fm5TD YVyP .js.u| 95!DiYmhb/O3e(Wׯ+~S_yP)V1o[9#_c(f3?˴5Yt8ik6Ӵ]Ь5+@ھUj֡gcfF?ƒ瘶v  yZMx+`0fmX 5%'1W9(Ayo?8˔Uh ٟ̊ LKUPLYOLDj)18K :OMr#lnanU F޽!z@"1L2D+ƍcNW^,?ի=*D~`Jb? G*xYz< N6m]a rHYLFf#%[dQ矿۽5wPL?_L`ɬԮǗ p( _~ŷDI3==ϖ 0!4z=N5*[Q/v6.]ȌPEk>#zE'IܕwMp_:2مPӃ[d03zR9%ml kG%$ȑ0i:2S{B=G孷b˖-Vemڴa֬YTT="ٴiĉu:={믿/ϒB% Jju[ꚹ/:ڟ#\}ePAV:~֮.O?S!D #CZ^oXUny`ܼrɪ.}X$BA@]M7{z^/4-ڶ}K ؍/"9))v^s}L<ܖ~ @%khq_Dy3(]ݷ"TbH7-Gha:D# Uďo˻yR||<Æ VZVТEo~zI B˖-ٿ?#G3o<P3@N4F]i3σ*ݜQN\o X~9kKdL` '3.mYPhqLв靻˪KoSڧ(U1c}UoUvY*UOxz1ύKؾnKCq_*Xw'ucϦ|4w0,TGEXԮk|?3~%KCR^#ԬM`mGѳK}"% iNNe!ZAj׆W ! 6osi:}2n8;!r7777F?[o]~޽{?0{lS! J=D]?271xUSJ]eGAе+̚yXmԯ:in0uV(l]d1c UZ;˷rvuLeV1N&>\K|9#YSJQR^oogryl= O>w' i*l+vA:xU1lt y ë¾} _ YYfl&#s(eseܹ"s"""`?%틸"t:kjӦMZ͞gذa;;SfnOI`3|x DFT8jZ:]K`3f |򉣻!8'Pd2l(݃1DEįdi7-v1iq|ބ/yX++:)nlM֓a8}gBs+aWc@ӓب=T~'ATD8o\mP7kh dugѣՑ)U }9o"2vt"gAqs(PssfꂋwWMd9wWbV+^Z+pyA\Ç cێHT8} ͉]ԣ"#,~>_ 1gђ+R|EoR } ?HVFέ;=o9 ‚|ÓU,ǎA>ZNN0t(|dp B!(@*7RS•ɜ=gǝ%^>PxXXo(dl.WYKN>ͤ^6V/vڏfU/[xb!l)(©3VD޸XNs+ &F+vmfuG# 2AAРC& BsgG"OOu1Q/.V-[BٲEMuuutOxXѽi1(HFfǏq.A]Mu(QwL,bVjq%@L<,ͪDdh.^i.bʇ6`0˔6}xI\n4{ O<59w_ЏC?B`U8(g};liܶ7L*x)Bb\N`IT ~p~]BO|iă1#|4d|,}.j@pqggsӑu %FR9NVm S-\`ݘ<\m_EݖOL~o[Mέ\:};18R\yj5kI}.Zܢg/>v{,䁽DEc6}TZZҠu,yBd՝S j0SLB!B*wuvt IfǯdkyP|B*dݴ⥥b`NiAwd(N^6ki"740P]aCGL!B!($ǭYAue!r'՝mu"\9XƍDB!B(Nܺp'uHvpͲ l..]\ƧdUT h{w^"Er_B!B!xH~ ~#D\נ+oHsV}u+?@fB!B!,I24ިIFE$>^ ~d0-˺wY1}B!BQp\۞L/IO<3B [@^pq?? sLB!B<;FuVW@eQwt"/ILaàU+Dh*P!B!"B=W[sv/!C@/B!B\ bŊ,]w9s:_Blcj[;ޮFܜ ̘1%K:[[&Cԁ I!B!PH{9¢{$Ϟf_k<~x&z a$cB!B S]x yYi3sneddA!P!BLR5Q& 7lqU+{P=̘(5ѹtu͛qzs1^z)(DJ5ń98--(լ|5, Μ5K129Hv8 ]v,B׆9E OI,[8Qv~mz.1hD7(*8qB!HQaqqpڵ?P.lgFDEA&p(о=T ʕ˒ _Uy3%p$}+xwuthJI?nDAəmh, 6P(!<S?onS ˼)3s~u>tܙ\NB!M*O=Cömе@L=77z55Z,^ܲxqhV&K k05qki)ȉM Rz_rD7%syS,B֒)=fЧko!^[:0+ !~ľ \ݚlrᡀQF S> >"EEsQ>ILAL!N0Iаt=<_iSum…Qǎo5y奎n_εJ+X1˗[s >^//0۵}~ch۠bu"45??X9"סO"BMVuFPڃh̪=&6q5]cwss3]T4 >oBpsMGC7+8vY-'8 AOa?qc1(EZ'BS+^BVUu0<@ [>'^} &=ڱS?7B}^} tCs\ ύXM3j_p,*' (1u:=-}A3q31oݼf*6n;fxL@Ng*cjPJͲ9-1[y#k'w|.S1+פl1 l[!rԩЯ }Ч9^~D(WW_s`ji+ fecjVMa]ְ!͛2uݸq0e <<\1=;YgmPwu(u(&LN{:-uQI]ٜ̕ͱk 7}~:r~< 3ס$8u j =Άs7a*ˤ[\5bc~z^:I+I'ǟޟ="845uIn:va"+z4_:mdS'fd$FΊo`LF1i 2MHbF̆dhDv̺5[UjkcN۞hUl+TZm:nOa7UveI1TUUuG ;թ`[{=v:㻡+|>ή~wمuI\dh kPW аI\O#e/8kNi^/L"p h?fZdEV2UsiLoo<N:V._̟ ԩSyFfuS1֭gbf:fnC?;vB[<=!*J]+\9r[kfӄS'?PMԪ#F@:jM L.ٶ7Ցl YA^Y߶#%*q|ޟRcxu g'{x[N,H$m\$cʴr?|q7Gw%GxB] |˯cp肺V24+}@M*nbTu3{06EAy?JcBkgf;TDKu[n2T&M"ޥXO6Vp"8w^z v\rHB^09pv"ӧj=RWPGdvDf=a4ujP" 7 ƹQ{ G$pDLpdNn/;Slzz=hLwΈpsskbb1ܪ$vX4N=k$ ^Ϸ=3?/nt v2r Ҍzb|j߷d{#Ӛ$yE|;u9<#Si\IG"F0ܴ+YcwR^:=^V2SؗEvuBBB,[2@GZ^~"`>9q}B^wi+t* L}]g7F )ۙ(Z{ a2vf6j/hQk0m%%4F s)_38ټ$ ٮ\DJniqdFtzH54]s}_xY6CZ '•l-ۙ(0rim_i [i]:zuM]&^'~IDg|]5opծ:F[vI2;v,w޵8ĉ#!%&[o_R~9/븾 !r~i[OT8yRy֬W#>}|`nS_|Q~玚ٰZv_z,ɘGi 0PZ5=vnusrnhQz!Qk0mE3Mpve2Mp\K2M|2s̱Y6e dsgy!rꗉ-[,[O{BJoUX@ԯ̞ N$>jOU`]6nn&J6.clp0|zGiKk|9|zW}~"yR]84-oMf];T1vRW&@S* Âm-~av~ΆUajbQ;"&BXNxIu7%=|ÝIѠ>.O؟kr挓{|*ddh_1'663fpv-ԮmmD"mݻæMЦ *P.̙&, k/ߔ.:vٲjd0u m'a@Ml]IE''(V ڷW70;V;С0j%mooXL]duKѢ0y2?/E5`^WfxvhAu$NAvF]ɓ?xH"4`ӧЦQ ԭsP(_OX9DMx jO5Z>-`pkhiGAzjL'+jv3^}vpwV5OW^UEOi:}tc%oK(BkNp)n}nϖG^'}#Gwtsk+E!C]T;LJFuĉ)"kTT|m"fMv3r6mjQvi]:Դ*4u%>YJ֤?67;78WVRzH#GA̧~3gqDalho߼sP}4otQyc4pΎ(Bh?JftɈtܰhVh`;OuWwLr퍑Ҽ3764snw:;B5E/U.^rK /uձLUՅ kĈ"xO GKof"#=#F;|_ wh>;ϸ}z|׼bؿ*41R@3x3~A[^ӁEWXcz>b( u!Y :i%gbG̊5nK{[|/3%-ժ%/nl*ED:[|aM#)ttѯʲ$J>r;|?|;9FA*HŽ2>RhC)5c7vkRo⚮ u)&LtUաHk m[ZpԿt޽p?gd~~]Ύp]|O׶ikjJѮ]x%UfoU[--Si j աE.ȑ#/՗PX%'KFI1_7*>vM+&}/$B\5)Z7KEL[=t$@AcMPHO>$UV.\0bb =~\9m+Jq[<++Y#Pu ]ѣGsF6 c%Klw,m-t u9 :KHQQƟ3bƏu-]z=ڴ\܍E܉'4y\O>se,>|pϧNIeyW/7ŋa$Kdh7a]tɴ浇ٳg5q\ GTi{,[GjP;xhm HaGg}fDz7U륗^~ꚆOѭII8. j1ddh6qtkzyy'жm4vX۴hĉڼyyt.\ФI]K/ŋٳ裏(r$vIb)A۶ImJ;wڞҥRjy'@f -=iӦ饗^Ү]4qDUR%GcVVM'NΝ;SOiҤI:{l.E꣏$`[o/YR{% HAԺu4qDUZ5W җ_~UVi߾}:6 ic]7H|֨!ծ-#}YZnspO?_w|2T26I7J\ ; җ_f|ʕҸqŋƍId(t&N.]KޒC$*@AE2 ?ZgåեAc$4! g숏>Ш_ڱ#wc R\P{_O5 ) RL&xׯK}'5h aC U@p4~|ތ,%[ sXgG̅ Ύ'p;u I'}8;E$CH~Q:p 7hL ȽLlTvv\Ó<$C(9Y7.W&?˗ϵrP=;YixS4eg'ؾ}~Ak׮uR4p7}Ӓ*kQ#}l@8p:u0~~ {UV;wfP6y $$$hֵCl$C2p=VZS4d(Bݫ;v}@d( Mk׮y  `"UVTPY :(HؑժP+Cd(٩ ҥK.G 7 Hʕ+٪ ڷoۗ{$CܹsB:vK-$CRrVXq #UV{o w ϕ+WkڵP! aU<<|m&IԛoH Jf8=[6jelm^Sǎr||T7X-wT>a*!$''k>|nj#VZN E4״.9-k֖5IɡcԦ 6#wXo;vbccӵ+VL~`B ]쒯ij~GU^S%J?fEj霙H"ǒ5g >\[l1=dPP` -&٥ڷ4/Sr6I;դ͝k:m'E JԊ+aÆSd#F96Sg|C{vS77 C7XA7K^0W wJ[ңo*꘎:2c޼AIR:}X>Al٨5 _Z|._z/llsut$v],nX>d9m{Lמt9TPWWMWwЁ]1<;h"5GT7XEXS=jΞ<.7ww-uWܢ F%oaÆ9MPPА 51m-nsK=z>uQObӾ~_ڽi>X7UH7xs$'ۻunݤؘȊ$u {Tߔ4g3~R_T]o7m{anRM'ϟe9k$I-ڇf}i4 IDATLwGCZBjrwcG4ϵj.5isLXMܩ>ϾunVrb6^i(~͝:I:8]{ǏF+?u%yʥxE-Snnn6NǏ5m^^*5k˫?kןeMZ=Td}cS^hӘgԡO6.~Hk=6x=67b-W1Pqk霙6)yzyei\Wꫯ͛s4NBB7nKQXBڵsvE1Bcƌqv(dʕ+IujΝe 5T312e3՞pjIj7;qGJ*9]tI~+x^#JJJ9S$Lf굫E{iwU:wdONԖ5K5Wb6=(S5hZu7Uf! nR$G^xgH*^'v:}Xjϖڻu]ؘm~HM=ldZ~F۷g{ 0@$I۶mӟ0zꩧGKot9IRs99"6?;0\|Xl٨ؘmvwd=Ԯ{o-aN~LߔBmV$IGcJ0*[J7oPX,ڳeJR;;IjRP S2b&y:PI SXX,Y~[QQQYWy<EѴiHkС LwW+W$UTI}#Ba? uJu'ubhIYNjzϟ˰⹳ kLϵX, Y)W뎝%IIkUwwA^j9E]hh֭[Hdѣu HNwIN_AGSRuݿO_A;gO^*׬ݛ7.w&hϖ|񂒒u)mZBSGۇhˆ;~3ڹ!Z׮\օ3^Z\yfï7GRnm}䏵=j.9D]ƆA5[+2BCCf͜9S fs:t萦Od瓲*깑Aiߴjo6?/H|4yiݒ?ˤ$Js#?Lykkh=zQs,Kd-oW :v VT j6f7;ct`gi |]}U߾}d;Zn]GyDų@^24޹F|?[ok>*^j5hgï-I*q}4vc 9X%tK6zb:r_JzB4j^*]F/W^ _|^k7wwxntWQ_WܢJ.#wyQzcsd2ըOehfjڵT˖-{!}7@ƨ Mcyܢޛs1k%IUVu5UFM3uU gfsg&̜353Ozh]~ImlVjVm { U}s>G777S={!Ch劍Uxxyg\og]TZuy+&_?5ONzM6ZlVZkѺv횳.|vK6ug6m诿ҼyiӦ wK$C)777uap<@2K  % Hp $C\P.d(@2K  % Hp $C\P.d(@2Kwpelݺ)cdmw p &g'X,JNNܜ=sY,%%%9; l:11QN9됻k}_<=ޠ,9-K1Ţ"> ʜv.K.I~9;.(<<")b gS̜9濉}L8q[n5ϚM?~۶m33Ϙ۷i8sĘ}M9=z;v0SO 3wsܹӴ3 oNKXn,X I_;[nqrT`:+)ڤ\}Ijv"sĜWLNfs3r6<9J9Oeb΋<~9/[liըQK+VH2ō=:7n~'F eBl+sf%=?"{dGl[#;zg=֏?FKz.lÆ 9?wUzIIRQαxt@׮R ǚ77?[z enMjR4ڢy%YyK B^s:ZKi#-hΒ%s6ZqG-.j̘1mEƍhG2EEEiܹϙ1cա(RH#FdxbѨQ!  u1QQQ7o^eP\ǣ>/ŧu9P!J!b2SjeX4r<|}%wF(䒒KKu%%$$xkBRj믿R "d N'ա(*HM6e*jΜ9E2E{X,ꛔCrD@"6oޜPٳgS B >|f̘KQ$22R|m>4pnL@NIKҝg "n͚3gN5k, 2Dϕ@qA-\0[o91 J]HR.t䋸BVjZj&''kĈHaњ={ݶEFFj„ 6ǧLH7sLmڴ)c"lܸqկ__3fК5kj_hh֬Y3gaÆ6mEcǎ͓xD2ڲeZ駟e=rwwwwwW߾}i&͚5&):k,m߾=b"Srr7om۶Maaa&Arww߯-[(22R-[Trr{<&_EGGСCP׮]+ㆆ*44TK,ѐ!Ci&5n8WըQ# 4H_6JgGҴi#i*VXdhT|y]Vy2~hh:tǏ 68; 7ސ I2^z榊+<@naPӸGCzq%xqJpʕ5e;fx2g4%U({OŒ{;dߴ~lf{XodCM' (ڶ5r|#%] %$mF"_sl-)HdfGbt~!gOyJVپoXa;2d(9vLjHT&M`TA?/]f pAڵG%K/Ybש,˗j2D]܋pedfZ$i͚3E2P<iVפF$??X1)0PMki~OgGyx{D )8X3F;86}z5yzܺ ,ISYC2\@޾֨,UJ*[VUڼƹ3fHn'u"8¥Nҥ%__)$HT;3/-*Wf4tBs[,җ_q*%yx؞qQ٪n:w5;_-haҥ׮{^5QW^xA:yҼ#sov[;wl|NRTTN(**UAVquH*I'NIiG0q~R۾]:uʸN֪eYdڲfqJ>3 %reբE ^.m̙I) 8;$.&<<:b gSsY,{X}%c}ɲs,o/WN#Gϲ7(Ǟ~86zto똩3{SOOY~q!CUKg?m?9|cosv3H8zh/Y2krq]v)U^䚩S\7?߼xkH~F_=8ޡ{3f؞7iq<,,-sa|?Ne(O?yƨ*7nUXw[7ѾbTt;rX39Yz5_?iʔǸzܱckj_~)Qa~wVI-[}Q 4qQaefW/svxth).μF٪Uҙ3F?HI{ܭ7*o}mmω3us> 5Nqk{uCķmkv̬kK\cײɓ> $ \P U""ϝkիwn%9ٶ-98.Dʔ1Z7c|1F㇄Ȓdۖdd:Լ۟o ?sd64<(qyeYoe`Y 2[*C(Tk֭F[ʶǛ53/]j^xݨy+cbr2tqu3,y2\/?v뭎ox>p }Z7ӯvcxx5?Ǻ&^ڇ{+z6׭3?g`=߰ݍuH%Uomww7~86}Qz}zs,YR_@ucŗ^Xkd|ʗ7*O5](mdYܪqeKcϭ[c;w*HϑkˢEƳZV RNcgʕmvM؟#5)2Ev팍n$˖59q¼f;|,J˗n޺ۻ9'{zwGD Pkd\[[w_ڸMys$$#ڢqz|vʵzj~k\a… 5rH'VTIg6W^3YeȐ!{-X@FVreb%`s{{͟?_GVJ͚5tΞ={vۆN:m7oƌ9{&}u5FDDƎkjժ9swNl-6l0u4YќAAAa]lƎݻԩSvۆPms&d4gntim#FPo?~ݶի맟~2k׮:sݶ#Gꮻ5jЏ?h:g.]tYmFRMhY{Zݦ+Tnvܑ*UvZ%͚:ցƺ{RvͼbE%vlU:sLkJQaYqoFrүjն(]=3JYXgFײ&z ?vO r8пm3Ke4g5CeyǏYf <|pYV $+YYPsڊ϶mcolЬόeE$m޼Y[VbR鉗']JyqUڤy6Iߍ缔9`Ϋ7|M缐^ܮo,P~s;'9793>!%b$9I'n٘bs&8m@F֕' 6m>hT8N,=|*2#2xVMw'6l0z'dի7^Y5`IzMY,gըT+cvc So7팊2vw?raϝ7"oZVH3%}d]I0_r)erJrP3S yzV·i_RT)~hJYJ? `ΪA*Vՠx6 \g[5HżK%|}M缩rUި:TQèt6LJ=}My^rj@KA#Q,<)EGKg4l-QGamk~zmF"qcccM#nܺh|Iu IDAT8fMc!C_56ڱƦ%Y9闙qr2^NeF7vp,3qZ/Frۋ>wvYRqoH_`TnbK~]cW^s>/\3[2Ymf[AV4uQOƭŊ?$=qg ʕ֮vΝ3ڷ{FK=z5;3nG5H>k$ Ҵi YY MH0nde=~mRn\f4e>9P@'-_n$K||5ھƭ~Wr\9i<#) FfٲF__؁y\inr4;n]gOcNOO#ڥ`=:1k6m*,i|:޽!qa[2JJqH>5S'},i5`p֘m?L|*V+I-[MJsd77r*+S9ٹEQZnEWqxzJ/f|^``sٽHr!q *CyZMԦs5Zji:q)A{ƫJΎ @[0BΒq/y{kԩ -:P}FM7nL`=!/@O>]O΍W8JwJz][<%TRܹ"sΌ@>;+t@ai<1 P:tH-Jy\׸WY%u3&ȱ26 U؁L)4T Wt x\WQ % Hp t }:{\[nmZ 9;6y-cs o1O-[!QFz%%iVuvD@Μ>-KvIRJU=%ѣz7SN|l0@װjv ,ʥBBB"EIcqq(ijr<@2K  % Hp 㣖-[ZR._OR Ύ @;sN;bGtd15iDŋwvX'9y'$~}T)DɒRH$TS=%N:Zv95Hcٜ'R^ڵKuqbDgS^\)mĀQCZN:IQs<@2KtvYz;:~9g\oZm?vۭI U$I1Ondh:gjD/RFM/O/.&m!uswg\Y+9c]k}=I崕dXRCZE(<%ijժ,-={ǜk/.m^쒧nnon$`0Mw,hGxOUjձ;v̿䏵{%%&J:auP|ܳeD.i J px_z/llsut$v],nX>d9m{Lמt9TPWWMWwЁ]1<;h"5GT7XE8%>EۣrswW nRwz@-Z[)Tٓuxn3ud/QR{ t!9*wx.]8{Fe+TTjss]լ?΍tz: 3}A'WO+Ri򖷷C8рJzU*^9#5k&I3%Q~zJRrr^rbRbs"̄ihpc._kd֏}+MQRMxs$'ۻunݤؘيqJ:=ozOH^8sZW.Kե@=p?:^Lɣoa2}Kikۭ|8J1M7[Ԯ{ǹeú`s؁X;sfK@i #=zM2tբu4WbIsmXLۣתMRγboޞ~nk#i+O)9))ޭ4״oy OyxxʻD (A"9rDڹQq钳#pM*Q{*mbJ~ٳ҉ۼ Xb%jՊƜgH'OUJ%KvIKϹod<$%)!!&`z:=_yBo})~yQXY{ng_щ5w$ܙqk$'MAJ58|P?6^g|bhYq3y_i UC'Ӝ?ׂ離YԤ͝v2c5is<ֹYɉڸz5w$=v?˗]vR)777#qN?RԴm{{qԬ-:sGՒ_Jܪ #m?#)ǭonTh iu(h|nNot=KB ܯ?}k:rv`hL6oԵp5o.EG٤t.]M*-(97\߶`Թ|~[˖Z+I5&[P^m_}% lU+i%I"]f?N}Z͋$aCumKwm/wޱvms6h ٫,t}cS^hӘgԡO6.~Hk=6x=6f?/-ʄrss$֨pN;|3M:vqjgΜX`k*[ Y?&Cuﭗ?X^JNJgoe6*+E+mZt}}l\W V8!IzqD+r*tSjƵvGQZf9<)+⟧ ۸^ߟ*hįVڳe\L$Mz$H 4i)iI[IL5̖QgO[I1gYI ײ;IIRv2;?NW.]Ƹr)^g|:o.?$ӧLVO9HRckWoxGYsOltImYJ;6DY-B3E>+ۑؽS-炭/tvp'O})g͚E91"8;#___ͿsN}Nc:tS5ѣPQ2oذafr_uppivڙ^*U2x4 >\ iW^ 4`1u{ywdyk׮iȑ;CvvM;M\i?I1bM [n9rH%%ٯSԾ}{9TpQF3000%C2,Ԯ^6Vd7=]͔t4v6nq4N=!JWɚV͇Rs~j.kV/PG$^𻒓Ԣ}GnNy{kɊ;_#V֨樾=8TG勸wdkWu6Vax_aSׯ_  X~= T*5˵ױAc4 aGb7>r)^0v*@u8rڶW Cccw"$h|ϭwQZy>86X:M\qvYt|\ڬe-Pͱbn^Ǟ+ȦQA4j)/_?V3wOv6v^~BkBADh%8yaok׮BA|}}4*iii*}={6Fsss/z u7V0,}ǡbՏ!/µ"L1ƣ:yYe Kܿcq@'Ckkð`p|5G׮ܿq ;V.ĵz TrK };=^vyslN-Q#ZZ"=%o"p|Cu%C |{_Z u ='g֘Pǽ@oX#p*T1غ8ї/t<}SBqN&eFVVV.ODKfDDD%ڵkk/)) K.ɓJu2Ԧb%|3k>~ N©] жH4m{|w;z;/ Tkneof͗?L ܼ)k(|ǔW[uP\\+H17#u1YZor |[)6CV<]'CW`C[7tL"""""""*2220k,=z4ʖ-[Qqnt̍; e`lZ՝`y'ƛj%&,[>UfV[3XZ{t_W3~ ane д]L^^c wIXO+J4AcQ ̭!H`R,kE!`Qq8U]S}yÝU/cnus}6BdS|R>M~?NYfZJLLŋ0"$J9B"&1h\8)=Q~#cUe/n݂`:u nnn̚,"*|Ʈ玍EJg D߾}={b $&& L۶mǽ{4888">KKK<|kaڵxǯR k(tp;ECs9ոzDe3F萈Judա˖-äI;+X'Odz 1 Cz-1سv%NX"auJ\ZK+YJiii>}zϟ;w.YZHz΄ҙmGG5jqDDDDDDDDDT[qqqy>?))աH7Pi뷣TFF0D6rz %txDDDDDDDDT*4ܹsիBX ~֨ߢaQ)ߪ-< %""""""""ұ ̚5KkFDDDDDDDDDD:vZ<~X_|K0"N/[,\\\Y._Q踈%g`QF01DDDDDDDٳgyaԨQ(["m2gϞELb ǽ:&"*ކ-~߿ut?UVaܸq:N'""""""""ҙ L6Mg͙3o޼YP"""""""""UUh\Rg;&Ct@U9X;L@^B6lHpEY; P""""""""JOOǔ)SԶ7jTjKlR)QcxWLQO0[~=┎7nx"*UzKKK9s/^RRիWXb7b|2LLLP55ǁ넎 YO?l|wDjj*jԨ!tHDD:ŋ^z:""""*R) J"ڵ˗/qIYZZHMM<)*Jq5dffcbFZZҐ,>DX"all $I֪U cƌA.](Q~D"ٳ"HMMaiiuFFFFjj*Kb8p:\p<ذaׯ1c011qJ,899ٳg622¶mېggg$''o}T2]ܾqbMr2ZXuӎO5+Ḱ ܸϞ"#-6Ƴ'LLT^dffbӦM={6n߾6tP Y+uñi&ÇHJJׯ]ErpAl߾OF\\RSSQ|y4mݺuÀ`jjڼ|ϴ=s9؈J D}fff>>`2UoVŚWΆPX~?=dIÂq|ʶ8; ƐکQ|0|<|P SN !11عsRӧOq1;v 3fѿ,Y?~~!44TeǏɓ'cٲe/b2HϽyI[0Bgh3TeUKܿGp@, x4vAD\3 IDATB|UAhT ^$ne;A;10`24?222bٸ{|}}Q\"HLL+]033CBB"##w^_ `24pqqǏQZ5|ر#abbgϞ ¦Mзo_+,ՍT"""P""=|X<} 57¤U`e[^ʶ<nFۡ89YHKE#!>|q~SZZBETfvD1fIII%KpBk< SL)Jڵkpvv޽{QbE+6mǏѩS'l߾]ii;;;١k׮5kS"""B իظ3SlKBED,t]'O&m'_@L&y>17 ݷwwZnZ ģ;~> 3|csm h\tƑ훕΋W"q~YZaJYX`U ]¦1:F_jqCvޏ72fe1}s?$%}pM w^ݻ" 4IW\A`oocccf͚.>)k)Ξ}pq훱gJ 'A Xt 6a@-?v%ܹz _w'pU}ώJǒB1\9AC0x }l[2;V,T8#ؼOG_QЦk/̟S٧c@^nz8+gC1{72Cl=;Pa}{|`j e *t|9&O.ỤGƒ%K۷NBxx8V^_U}8w._r3@ 0l@DD.^O#PR|_7V:S8pѣh"}㏘9s±,_DDDȪ.'N-[kWNl,ۻ;v ]tAZZhDGGcݺu Ss#G۟gDDDDT4NUuGlq!|U /y1Be[!ߠpmχa޷CT)Hc*zC=X,S|<+D_Vk(x~z̈s7ZuO^P?}E} AKT?f6CC~Bss+GcITNWCq'ʶ>#Ơ`mWϝƂ_ӆF 7ߡʶ+gCp7*یMLs*`^1/9E?D7j&p7]]܍eC܃y _Ǡ!(oWw^IcߣؽfRR.!>+4;=KQj5-C[7;kg>tlA]Xb >Fh.zm\&nѨu;}XZCcc-dgf"I=qc; Ƴ6/#k)Wd; H69o2ѸͧrI  !>"_[M甴O1bD }ߒ%K0|p|V.\ܹs]vEtt4 ѣGZj8}:j׮ <~Nš5k8}4cGQPHJ"$Dg*/LMQ8}LP{]cjLHqI1EY5?ΤD)400Qa:bPfn`1;Ol*VʩnzctRc]{!;+K'A#dhUP Ź#ж{9T89Dʊt `Ű}\P*Tv=wzNTzo޼ҥKNB+뺄/___e6mpBt n݂/Vz.\=zСCJZ puuŖ-[?jժ[Ç8sLb|m={VX͚5O?J*ի5&CU9{'CU6m $$v۵kRRRжm[|GUY5 P»z888`РA =~P?oUMPD~?H텎eѥLXkTu1m^ksMԏYSØՏ)e9&ZitOØ"crL;ڏ9KØ4)~LHqƴU?8Z1k7薕$9MØ5)~L-U55^3$H{+'cH2RuE:)Ӳes9S;-=r*=Gaߪ<ްU[@n]{ZY[)oնDZ00TR.9aRsԭt{}qF,_<(P?prrQT7zhc-[ުU+)IN0AφǣGJik޽{aaaS{q///`JМ)^^^:jժs֭[FFd*Vߧn]WNDDD;ɻTelmmѩS'm-ߢE ) cr T*Eǎ!Hm>/W1Cݘ`h;o'Zlv*m4%)вeKXZZl^ʗ/vlZub0ǴQ'h5ikk1+Tr̲ gv+,mԞMCIu5153CrK~ 3 Ws:nDĉ#x|6^'&"++SܪUf˒i) [v53O?|WΆ-;)O&.ރvΏ46vNZacn:MCbsPϩ0a! Uϼ?_S{JJRۭ[5R9XXX !!^R;57^ʕ+7nŋT[o͚5U\2Y% 5 GE|||x?022B>}&QFa̘18q"̙777UVhݺHxNqcH:6V"}C$..Nu~J5jh|_ODT4f~Mj5hZmlذc&$$?qÇ }7FȫFM4z ,꺦Mj=… s?If͚i=fnN?jPYšs ^r퐜OF͆MsO#$$$͛hѢEA۶mUV͇>ۇFΝgoeU۶mCVVv6ѣG۷`R0aƍ'Pjժ>VVDWYYYHOOo۟}.ʆ0rrU`l%&"qmD0׮ BBB_ Q:u*fм&Qa+~`Æw,˕ D"2שZ͋6]{!C8oy24g)c_otؘ{}%w^sqz6ΛDM6kq1S}va;wӧOGdsS\9;tرCqbffDǣZ5p|||tssåKU2~@LL 5j)SI&X"LMM!myyyaϞ=ؼy<i|Ab:t(h#""ǏGdd$ƏHlm˗/cZ=ammgϞ!>>^i/n$o6mN"Ef4AQRwS+m;n%y>:rHiPRݻwsu(QQD(7OnZں]}`UBҙ+6(mVOwLy053G勈{pRD)֬X+;gO@HN,? )OVJ$GѣBCC1uT8q"<{ ՃwۿL֬YሌT tRҥKrJRJYtPP͛7S^u ۷!J xz*/X6mڄbժUd|rX#GԪbW[uEHHBCCѿ煆@]swS2^kj)HXycRJI(>o);z(5.pODTnW"hiG7TkOѼC'=`w^0vlt S\R)-ny046F]p|W Bv"qϻ\0bu>8ZIp?yW|l*]ңhݺ5?PL2'O3f@~t_]swwGxx8͛]*lw͛7G={ntAAAwϟ?ȑ#m6@uߏ駟~wLyebb^zaؼy|y޽U.AP:ɻ%1\]]ѥK߿]vݻagW4Kdxzz"$$ݻʩiii7oãHʯOp1"T&l [Lh/Q90rQ)*4 G_qX#?zƅpz"EhN^>h֮?q2H~oD!a;i)o0,;_"-%o\Î q-.%n]{ɒoˎVyZ{ɹ%VwDYKKAM.P5zHl}дgF-4[}ާgtI޽ӧOsctt4vܩk >-Bhh(O?qi]nnܸ0899aȑD͚5QlY$$$ 22{źuky2Yf E~0o<4lo޼K0sL)P%OLmcmذ!郶mۢN:ƛ7opUL>иqck6n C `mml<}عs tŋ#22mڴԩS\&&&̙3*UOgcZ]c M~0A-o#4Zڴt: "=xd(?"+CCCBsD"~kSNM~YYSp>$Ga@omۣD,ŽTSs+k :=n\ǴPARKՎs9lmOek"TOof>mcms#3K+L[u^c-iRj5 2 MuP8׍4=٦k\c=zSLsr׮]su*ѷo<]9*H{``  l?UVŋ3$M4 ?qs{.r;';;UVEllAI;;;<|P55imllpQ_7[K.Uz{yxzzUrػw/6}|tgϞןjHTGЏ: $|t d(l~i@m۶q=#F,+\Q/o| H$JTJSePGQ~ٱ_prMeR)vڅӧ*qrr˗&WؕB쌰0!Ul7=H~\ 9MƛJDH}&P,Oy)Y!JDDO2?5Nbu(oG=P= `fam0i:J:ܹs8r7oӧk84лwoT^ưFI w33"؈2=b#<]ꒌ ;zUߪ%~֨߂kEо}{߈BÆ дo۷: " eu1M4SֻoqyY>d^3"""_zUi&=uRRRt X>}D(sjSMEbnz"1`D(ћdOIRtI.WjۍmdL,q IDATo{Dbz/#F{#6;TTRK@ODDTRdhVV֮]+/H䕠022p;7nDff&{[ĉHLLyDDDDDTp&39rvmr e P)&00DDD%UM ;;[X y!55UڡDDDDDŗ?B$- /Aඤ ^JJR uPNR~͛7v(Q14Ƞ} dir?812 >YP<+K@zzzADDDDD|Ig& #YpiZ\[)PڣDDDDDT 8E>d) ><{=6=E~R %"""""**, ;CttqOFAN/ "KZKKZ %`k{P"""""I%edr g~G2r<~ it [ܺ$%鲶 `رCh01JDDDDD% ZVgd)BEn) @j.@Zb24) WTW^ۉHRQQ꽌PSC\Z rd Nssv;;W׮Y0qQ`e(['SҼ"H_rzY她9`cxz/;wVU+pCCww 03ի͋'ǁ*U@D*V4y"ҎDDDDDDxp8'yx\ɜJ?z4d}SpY_Ν%Lr߶mۑ#eX"""&CX:m#"CO[ʂE᯿: ".t&aRߟO R,V plyt40l,iZp<{@@hѻ?ۙ L88'`wcG]& >㮀坯bM`B[7َUd=z)j [_lÇ3cmlDDT:1JDDDDDT|mL4dyW #ص `|eKZncb$G'LP^T$Ə%Q+٭sԭAuoؖvA #C "-1JDłD"aDQVLC)!P1j1SpgwrfGGGc=%E[FT&@B,)jmI tD %bo޼: "c9DDEδcL6F|aI.>dmŊפjUY2ME |X$ + HOԟ.5s""DDDDDDlobैϸ#t803xfKmv߿_}2X[Ϟ#Ž;Z*>dPvvvB@Dd(Qq L͚@x8:zI5 /VFԮT[u!!@h(пBCeNNE|||0c "=':"""""""wwySץR }]ϟ]O<μ 4H1JDDDDDD>\6U>4m!N֮ߍeUNN?'NOD=A{~zue_KSȾ JVQ|uka "P""""""*6>\6#F7nC)澾BGHDD%QqK3e;iDDDDDDTlлlmPcc &M::""*XJDDDDDDF/""P""""""""" L^`2DDDDDDDDD %"""""""""d(&CH/0JDDDDDDDDDzP""""""""" L^`2DDDDDDDDD %"""""""""d(&CH/0JDDDDDDDDDzP""""""""" L^`2`] ދBG@DP"""""bhJ# ""*}8MDDDDDDDDD8MH`qqqsnݺ[nJ*\t j={, TI7 ,,Le/F-22C Q;fXXb՟1*ۆ Çlx"t .`Сj H$R6|pDDDl:t~ϟ?aÆS]9^pAe۰a>jX5~~~xʶÇ}}}6fFF նf;vTZ&* P""""!"((ǎC\\B[޽d?^m?RTm[ttk;wK.j{15uk=<<|'O1% :fRR$10t;v+5^SZX[[YfBADDTq<vލ-[(%BYH_ݼy׮]ŋJ*W^ػw/233J8V O?ŶmT 533CӦMn78::ŋ*4MU,/_Ԥf͚HLLTVrB3))Ie[a>d[eh͚5|iaanR]va׮]5j,Yz""""MDRM􄁁8""""*nܸTPAe{tt4j֬5j]vW֭ '''Fzʼn'~ mVȈtK,+,=\d( %"""IJJ´iӰtR3S{GPj"~:v܉M6͛ݻw5V&L PP"""ҍ[ᅲo,cffQgϞi܄+;;;)DDDϿ ͛7ꫯ0`zj##*7o1&M?(¨$b2^xlܸQx2eq 2d.]!C[VDDDDL5իpK.?"#7nĎ;7o WWW}!Q0:""" ++K!ZV-!faag")) pu#"""P""""HKKwtt0"* իW;&&FH2@J $''Z萈/_^D#!""d(Z&L@FFa@дiSàD,*T8 =='N: BG4ssssdϟ͛t:t: * Rk H4nܘP*222pB *4M4)V7o ++ D ڵkA-T`\3R2eJHMM0"""* %"""""4j(S~Dh(0JzgϞXfaQ! QxCKT:j ASvmԮ][0 ͮ]Qi]Y(a2􂑑lll JJ:.IT s#҈P""""/^?,wߡe˖FDDDDDDd(XرC~O>L2MDDDDDDDDD8Mґ#Gp…wQU_d$ @E@EUQ@VAkjVmԟ;TVAVe 슀N62f,s'I&q]g"ɝ9j0"jJHpB\ s&/"""""""""*CEDDDkGy<>>އшHUP2TDDDyw}T! ZAP4L^DDDDDj&MpM7VDDD)*"""""ҤI4iH_}HP 557oޜF$"""""M""""Mرk[jCJd J=2: S.:||FP2vk{шX#`ѝ|ISRTHƧ.Y:n 3 -|i;FVAu,\;47-]IQs&AޞΡK -D,k̼ /i5yRмR޶q?ڮzFN(?Y?BˑlXr]m쟝e 1зHrqqVE&99 &СCׯOpp0 4n7$==2D[D;4k]p, fyp`NoMg,W"ŽD4m pKI3=󾍼ZV) @x'KK9RhXʱO;2ysj `4 AC v;[_ߤ9Em{}Y%"blY Fxp`}yn"bN"TƌüyJ;}4k׮eڵ%))QJUYf  ++A駟밪D~md- vOonvΝ;zymf6]L$h`BpLNÀun.f=9@R7x _ipl4wX< wB ҏ1-b+[hY>Na`6s& s@"R!*ir73oT*۪U4hYYY >? }V ZX`00Am)]uhaY$XP)@0׍ !8O*E~b 6ۃ&<|qB=W}f$FS eNK-[hſQ"R= m _|WOicl>w ;vCbTZD|܌ҥ ҿRRR\~'t֍uE~=^ƍۗh"""ԩ^Nll,-*-~̞=k}'OK.DGGcZiРwu ,0VXWXA~+ Yf$&&rkb"/^b]vΝ;yh֬!!!ѲeKF͆ LϫV\"!!3fU"Ԟ>-0U;C /-=]K7`QX<ZX#`aK7 c.ե *%UрhUpi)YF Ƙ.x"RcY^UPWxNtHO[7[_?(ƍз/DGzvݨ2ǹe1hd$,ZT2ZXFpq%?ThEj &[oymҥlذd{=^}"-[Ɩ-[HII*7w9s0bKl۶m۶}2cqW|:x,_˗3a|M{9LR#G_|mۈv9r$'Of֬Y 05gΜ @BBBc]v-wuW8DUm?VJS]CCCt΄˶s IDAT Pҥa$' b(-3))sPŶmVn(y5+MGg̀_OHGV{뭷7n{!##OZZ ^Gu_nqqq={_~??ngݻ޽{6lNc\~=/ҥ IIIܹ طo/L6+V?eˆ 8wNbƌԫWCYX,-ZDFF"HOOgѢEX, ='։'bٸ;زe l6>̇~H+Vcǎ_$BmkyWjqB\P zlrg=lrk֗&8ᜁu灂ǏQtHJĨ0/4N'E8mLbs)$o=P6v/⯅ҏEO=ٺukz| ނq`c덕`x5#ܿnٳF"tpػl6q0(G7 AeOX\| uȑ#A*AM3fLey78p g̘1L>ݵG C4hz=..8xi_;4h6{2MP`,_%pPP`hD킃Lu,ĸ#2P aO< yeY]por65%gᏔ -p̛uJ2a„unݺIJ$, 'N,2iiiDF6Y 2cDzuVc}YcqF9sfdsȑ#+%ƍs!>|Һ2$''94ܑ̓d,P|o_6g=6nݗuμ[M۹H|R6o`+(_|IdSm~Z6/*ی-ysCGĤͩ٬%^;Zt&`ny-y'nfY9?ɡh PrٕvJ|ey8.F`$Ub>#j~[ӥߚ?4{:XdoVNm©myLtkzW29M}j:ɭyz}A0y_>oݷyӡI[X[60jykw&mN cy~}!Cc39}7M q<95M gr&Ťɡ\Y͠0 #fL&gwo㳡[6XC39xZ>'H{\ছDn(Ҝ IJ jĉF", GryObjiDʪ&kkjVVV}}n3{ݓwzz;у `Z]#p)[lFp>Yz5'Ot~I֬YCpp0{o:~x&OW\x/pndX|k|s,41s"Km a^j/$g.pm~R:໗;څ[RpvasJ/q\ћ!v^Ƙ_J ؂co;qk2c~œ?˟X>Ń*e!zmתmt(ԍM7nfݥrt\Iв$6]:'Eܔ &/D1V|/m%xwWs`m۶-&MbÆ >}/>TXy;$??9s^={6u]TJ&LwߥEd?ӫW/5j+RdA[oeńb  6^5>OqEʙ)RNQ-,<7Y}9,#pظR닱s-xͰ#@[`|1g~NY4.xt;fR?*m: ؊OÒzN?a[uʺsR9Q8g]ظ"Rn vuӟ㈤2o#?PAjj*'Ok)pz;Xd .ǒO?4G}OoaÆaXj9r$ .d̙<!GG$''m6K;&Nb}Vn 0h V^M~Xd ujW _ǎiٜ^ ;߱q` 7DXk02 6O 4D&mC [JW kn"וg}D\՘C@;>cQt99d*b&e 7<B9׹,z;-,x(S+;t 1ay[w Xm|:w6<ޏs/{`lJ6` tmq_0Ҳatks-&mvfrx0W0iyQ >suOm6h@soLڼCfx6|30؋6Om3%% pVy@jHM'M7rtv 9M>ٵd-u뭷ָiL2EšO_ܹ3,\Υ Yh 3,~5nJ.]e\y[q111\p~bEw/SLMÆ IKK8ZlITT'O,Qy[X̘1QFފ+9e9q˗/fѣG.]JD |c͚5>*1Wmy|W0~ۚ=[ls=3gC-5~Z˗rPu3:͙E~Q!Y$1Mrb3XO_vDf煇); ĥvכkv8f3 c ҘM Q[Xsoo{.,o/tWc.:Wm۪Uo]ϟz*Vr㏋,ܹz5v<>֖wΐl$#tXҪ5frqHHIҖ'9rڶ5ʯ_9Z@^|E?.J*X,5j$a 7QEsW^yDp/;wf;wAZ]zYziI?_昼=Ϊ!C*bu?|nupw2o>(1bڵd,U2^@nZjF w:1R50hf_y} nrTUt(YA`ퟠIdnt)$%] <$iYm""sѽ{wիG`` p L8]vP'֭[ݻ7ϟuXVYTաUVKD(ӪR/ᕠV+bT>'] | ܍1?g##if")-@"p[g]C Sd")}37稈aWp\ +Vo Ƶ :ذDT}9JЫݻroذ2_өst٫c:tn߬mob__|mۖmū6̮S½#isCYe Dr9gԨnT\̟!!0mHE^>}Xx1ǎ#''{3g3fC BIѝaY)ӊ.]LZIZ-~'b,d$RAu,]C6L]t]jš4iM7̦ڣOXػ~ؘO40խ_pLL4za"~jժU2{ʔ)i2G$Rs5D^BKo89vCjRA uUz0RPT"ka4OSI4ieVDjU:2`l"RէZf C !>>bbbݻ7-gux"5RAYA$ef^@z_ pa$"0ؘSB3[ 1 -uD>^zѫW/_!◌hq{;Wt(9<Pjƙh9 0QHMҫR2TDDmԟlڴ~ϙ3C_7>ʂTGp zHYP)IEDDDDDDDDVP2TDDDDDDDDDj%CEDDDDDDDDVP2TDDDDDjD,kuH"""RŔ ZAP|Hups9pF#"""""UAPj0DDDDD i JHa"""""R+%&&2x`PF#""""""""R+nݚ֭[: 4L^DDDDDDDDDjU۷oO>I׮]}T6%CEDDD'N0w\{WP?a"""""""""R+(*"""""""""ɋHj*[z ÈDDD)*ƍ4h*t_ RIMwpB\ s[B23}#%CV8~8Ǐu"""C&""͛}HdϤI\[nhDۨz}ZHP[111dgg: 񑐐_ 5LVx饗|b!::aTfa7ìIBmDBHH|%Co8q![:u8[bG9[27AtC())*RCeСCDZ u"""""RDt< `,2};UeӺd#.1U[ѪU+zzTgq8_ku%-- JNN#_yjC%aB\DDĿsqLԧ XsWat,2O("""a""""@jj*t=o޼9111>HĿ*ЫAof?ɡV:<JT3tHSi&:vVZDZLuE oOgSI?JQ);%CEDDDDs7yph~. z+)*"""ed\v-+r3) du֯ +"""^P2TDDDDD.fZ*|l{c$-J9%CEDDDD䲳Br}zmj6JO&&&bX\[fff#"""Փ"""""7Ԍ5BLr32G^^^DDD@)Uj3,4ցD$ߑM#EDDď)*"""~;w<<<܇ш\I͠0 WHL@[@FEDDQ2TDDDZ: Z%:dh5>㨝edLVqGEDDDDgb[˾G4Scd6'e_u*XRbb"v= EDDS2TDDDDD|&dP[ o!?Ҿs9FB*v֭iݺu!"""5ɋĴ.%h@Ml/1_Զ""""(*"""l߾C! u+KUNM*Rԑga;CEDD{J'N`ܹѣIV /uK"BUu|6薗2O9Nա"""=%CEDDDDħbaBVY:X#,5wf8,"""Pn@=B"cZ[qj;DDDl ieT{<4U9ݘUVߺ?SX4gJO*h>sUhe[p!III牉J9+ 2'zU*"""R 4iy֭}H-ckVNE9\!6ʬHIJZ⥗^u"RN96!kr S IDAT*K#:,f4L^DDDDDjG5 "U"""D~~>j&/"""""~ D]D ġ0y 557oޜF$"a p:IgC'!H5di&z>gÈD[rWX#44^DDDR2TVNlCD|dԩa[VV]tu"UcUv}%B6Zd >2O<?ÐNP[;wT2T;CΝ;}HZA?^k'Ou*ZPIDDRe 1114kaHJOO/ߩ4u"=~\Kl||$׾ }Hj"#}Hlgd }9D֬YC޽}H $zH囦|l h|H8-[: 7&/"""""~/?N}z~a>MÈDDD nvΝ;DGZ_u |rs0F%"""""""+[ĸ`_$",U Zb_Uc0EDDj %CEDDDDh5"kZ]CwF$""""""""R{Xamntvf3|\.Z>QDDDDDj:ny}v{DsG,BCCK9SDDDj:%CEDDDD֩>}\F&/"""""""""*CEDDD۷_ZD'k׮>HDDDDD*""""';wޫdH- }T2 )pz{> djT&GGDDD*""""""/X1"̟9EyJDDD*ɋHj*[IBZԶ|M?*DdJHpB\1-#3qGQHe0y qB41K󇊈 UL4u>FD|!ؔdc8?&% ZjK/0DAaqtBc:mD?P2TDDDDDn{?_#"""D_oQ)?ouci?9=a;YKbש6PP?P/cZ6?.˥H_#>4/eJnX%k<807qu yVZѻwoQDDD|LEDDJL8{4o%Z ,"+'\deB& :*)*#CCJ=o?2D("""Յzr"Rf!cL0:P~}iРvo&!Zl2FE||<OBBK.u{WY7_fo$B 0fDNmgeB&w~6|fv^e?c.%ʈx `4 AC ÏKrY/"wި:|1ow]DXӾ6oWkQ׮p~VDDj*.HKMMe̘1̛7ľӧOvZ֮]_W}erI ƺuJ;|0f̙ٓ9sаaCD?N;}3sv+15rA͛K Ƨ.^;UǿԿA^*L%̺Tp`ɾ"YmZuÑe &$K#v?q3)֒쳈XkBp UHJMMof޼ysϱeΝ;GNN _|?89991!W{gΜk׮[X^|ERRR 33]v1uTիǺuڵ+gΜqp8nMLgϿm%X'T6mDǎ]۪U:Kա*3X3:3;zQVZ?M.e*`$B^vKЇ4`o%~\ˢ;3X7bD(@`"T]7g_8b{;'e]"R-9ʸͬ^}):d̝DnJH=z4{SNٳ/tܙV+ 6o߾ 6!W{> ?m۶eΝm۶SNڴi3<Ν;x衇|vO]ni,*SUd 4P2sK#) NlʻQq5H.@; ?$JpOrg:'AUUשa\=:5TDU`@#:|8̞ Vkˉ=%CE7K.DFFKIIIq'Э[7֭KTTx7ҷo_SN{%Frr29,ZԡgE^Y|9&L74=cʔ)E^;rIII|l۶h׾#G2ydf͚ŀ^s̙$$$T8ֵkr]wa+6[8p|A!Ο#lx2K"h(aRذfn˖-F]90bmS#\i =(+2Tx뭷7n{!##OZZ ^Gu_nqqq={_~??ngݻ޽{6lNc\~=/ҥ IIIܹ طo/L6+V?eˆ 8wNbƌԫWCYX,-ZDFF2#HOOgѢEX, ='։'bٸ;زe l6>̇~H݋4h?Á9W.ⳛp,)Ug^Zرy,T0|~*ʼ@cIN ,` Lèt*>'7sNb$n@=Pּv/cJߤqL5e$&&FX,233>34hԖX!~k"[0n~=CZ1k^ڿnٳF"tpػXE}^6 V;o%BE SeH 1f̘" ݻo0p@Ϙ1c>}k=x7ѣl޼L1=zur7e˖<\}Ռ;{}=?!!UM4rHxYx1SNuk޽;ׯgUtlʢgϞ4iҤ±ڵ ? ^#..(ڋwL۴i<رc^.bg[6~q(w*TJg 0V^?NmgLt 4<\ V~hRF"ӛ"xcXy9j|\쵑@ Zhhs9|FQC V X?X3" _W]d̘ 7 u{?x,nt#iz0k֥Z2v{4Wkd$|{ s 0ʽ&LP⵮]z߭[7&^3A:iҤZ,&NcZZMtV>C aرlݺg}}%93sP#GVJ7СC|<czz:QQޏt?jp}3s`ږG!Ȧ,?,26g^Y6O&v}QhŤ͋~XVᗷ͸V꘴5<9hٻ6vo!L{?Τh^A}(|ڡ.0DŇHjv} ߎ #<\Ӭ3[W2wp-`,p`N,pP{n:wP7?̳R{ywI?b'H,f5[Q] r__羚6W}}o4]$c^h3Ľ) xhsU.LlHLo󧕹m5|Cd2f5[Cnt{\ IJ&-8Hn?99ry+R۶m󛜍WrQ2|Ǝ0DJkKV~}geeط~ڷo==ܹsSH;,Y{ry~@6C<'&S޶qf6od=j?lI1is͠08} 5Mzl6Samzo1ܟjl2MBt{(`ֽ)GZXTjrJt,XqZoh̟H Zݫ94[񽴕q#߷o_m۶L4 6pECWn;$??9s^={6u]%u„ hт4,YŸgzEFxW,h޽<6..sIL`#r)MeOѬ/ZD vbg\N:w4j/jc7ڏmIyd"V㝲ގ3>Lff&vAnn9&{ssX|v7D">#8p3sL|Iڷoٳg8q"Xϴ,~.\(:Bmr>;)7mnL!"U(0Z0X{é~vW8Oc$Da W ƪx\?oڿ>7fGIohpz{>Tr3jxZt{0ޔS#vۥիJQ7Dj%Cp7}1*R&5W^\ aÆ1{lGT><~U˻s$''pB-ZȵysͮuVtBll,w+ފ… O%+/SLMÆ IKK8ZlITT'O,Qy[X̘1QFHNNsDFFBf<^YKN_7?d͚5>"a(|WI r8^bQ#vNfh'bpfh2Smi3G;gLڬ@T3mm "Фس̷9Xx^Y#,\7&_6/F/8Ue}[=ϛln,PGc O/\oOy tXm~7Fkiڪ{Uh k r77pဝ]dsxQ.r4f7¸`Vij঒Dh܆HVZU8:Wpâ\w Ϫl`<}>yh3jc{KYwQ3̤ ]PҤQWU \q]VV誫.EHQ:Hu'ɜ'3i3B$kx=y/x9syGYL<}=Vt{b"l 0pٕ۱YZ<剱 Æ* K$k}Hhw_Igkx T2Qc ꫯ`4RYV>3p@l´i2dHI _,9:t(}7|3 .ԩS<ÞDuVV} `厩¸[x={'A8|pCTEYWϺnݺy~7tK.墋.zѣGIMM_~~ -P3):-s˟,,JtXCQ׊~k5|f5w]Dh$##G~z:$=z&rh޼9Ga3~UobccYbEɓ'5 IDATj˗/{UW]Ŝ9shѢ ,oN9a';.`i̎,}G~ϖmvڌngtu?:f=p'Hzc_rLη+)n̙Ks):0K/}9#dqܲj!K*\WRv4'N;1>Hbu7͝ Ffc›oBH$-9ϧ|i]<}v>ɕ+[LR?ϓOz<ўv߉RMTeH-6bVZE&22.][o1uTԩS0|6mĸqСҰaC+=P^zqF F QF <ŋ /T{jgȑ>[h۷og!))cوcǎL8;wH4hЀe˖_"C|\q]Lf _/RȆ\U͛7ӿke>67`tMJlC>Rzas01LUӪ,6『@l~u+{0d"4ooErҨUѐJE}LN|W='z v#FUп=<2tނfh8C͛_?8s&Q\x3T+j|'%%lٲ׮] @\\\閘Hbbbuԩ~]ʲ/\d6w*ki߾=t GٵkyWt`=Ne1#DJ<_5`գ:_=#\33"Hq=D.R 0Eq!N'wf̘1̝;~@(eЫW/ypuR>W;fTFTުB ˣ41H%sW4}KVҬlR8NϩY (Ep8{7c'j="r˗/9)ϔ)Sh۶H*jўf";{8fA#r9%t ˆo$k|wV4!~kU\`ٽy|3搼4hr垡~JOHr%̜ [ա$J=#R(*Rۗ}: j}қ G7ҤnYnYNڍu( ZV*>n13k"b|'""RF9zG''..I&yu`H";HuNܞG^Y_]qqGױOEDDj+""RN6v'>>SyJTgs6Y `4"Rz1ӻHL6oEHͦP 44n:$u,5`ݮ%"" tq壅*A D&Y%""R)*"""""RMfyhHnOk pT"""5 Ziܸq :ԳV @a0굱:"MPOa9D[B0D$@Zh9y$+V,w}BBB[HU::p`~YiBn!4n#6*5Et |ѽC_$(*AkفADD|I >.s+B H"e_fG5ҸCh-+.7'39Y}ߊ~Iw;aTkJe84Ji\r@Hl4jq73Aj_+I<6>I!782MPn iY䤕m #s9>mQh6l,X7z{9a ֠ yҹ?Q=&Me[CL58e. $B+m4N4 ; _%|rf̘Y~kL2 Aid38}[EHdDoĨs3 nFr;h=+8 azwcf6MpQo5DDDRDDDcҤI億F#R;ii5!d РcG؃2ָ{m8ljJ;ԩSHsݎJMFr.M(-0N\:1v8HdEWP2+)ϣ {46 ,VpRhvx"""N)"""""c+uO>^BN%,ZLTs+Qk@DD, jus(Ny(!a=h'Nw_~eVsH͠dTH#vv4umǏgwQԏBDDDDDXZiь*)XڑޏCDDZPe=˭Z"&&&.Yd@(EI!ݘ+[ ac`kYl D_bi/5EDvSe~zvy-_a4}wqaX< ]5Bid3+6G %CEDDDDZi3ʎX!hYF6?aFntuVE5N4dܼ4ضsUDDj'%CEDDDDZljPrt +MKo4BT\9L6)"Ѡg "I-LcHdпN>y :4!j]Џ,]bm^QqNV,xJDDDPBCCv3ZȅѰͤfneʠQZd}Ӟ!E&IPաM2f#2) ,p?+\JHrp(ۈnQfڍu=^dKCM6%""|_\ P%2/.q8,,켮U $'L\i~;4/""KP21@ԑh3ё䤛3K9aܸ  *""IEDDDDV:8Kg4f^|8m )]DDD""""͛߿z@$"U<= ٝǒaiܞ.8AhTA%%9X㇊HpR2TDDD8y$+V;D Õcx3,Ρ/sU`D8x["KPu۹~N$a9+Ǥ,eynf&V#FㆊHQ2TDDDDDjF]Cq$Qjpxu.W Jh3΍hvED$8'"""""҂ ظq#a4s#XK[Xn$@GwDX@!""R Zi̘1T VEDD"""""Rtl%2PDDD )*"""1i$rBBB(' 4VݘKjBHͦ;ǏclP[.aaaCjxN08vXC2:2:m4 ñ֢TYu/C_kZ8jtHCVV)))CDEE0Epm.ȬY;HӤI@!Re:w̷~0$ _=A!:I;h q fѨKu.82O>ᮻ t"U' tR&"""""ǁO&׳|d}.KGv.b QI7jl%""5"""""R+ӯ_?f>yRvL RtfOoL\ '7vo `D"""nR+$$$pM7: B̝;7aTN@@!rN:Ǐghvc7Lfuأ˼>#|xsݾ8iF-?:1Zt"w v`d ;vo[*rJ%C%t+sU2n`1qaUuFƷS *BOn#%>@G!Rq)*OP %%{[jELLL#( G}\?ׇ: N| |1Vw Jׯgsrm0""[~N$!_Zz5.b⽏*""R)*"""""RN!,cD\M^DDDDDm}9_V: )F""""""hχN {W>DDD$*CEDDDDV7nJOO?s&e l{5=SW{Ksw %CEDDDDD*IV.J*oχNޞF#@QULu`Ճljx $}3nY<=iA$@7=IW#MP`РAyvmIDj(k(N±x=; ,g1X56 DEDR2TDDDDD N"G[I"Ѡa1Q '5~T?JTBq$׾AhdU9YbJZ0s(JTض6[ӫi:=Y()`,,]DDDDDDϸq:tg9,,U'e {] k~h>l\~j[ dJ $$$4#.# oGҠCͮXڷ"!PE3`d7ƶײbJp`~MO~ۧg\ `ofWCzFY_t +Osm׿YvG:Gc[rRM^DD \od}`@$V2+ǿe$e,KVK9bY$/͡0l/X7z{9v{G|$FV\j9S \#y nc0 `X9rdKf@ Ic2=А W[J۸rn7m}>]+kb)>Vlg)p/@sf_@f_H;b,>x&!K0rʚbW"T:3jX"X,櫸->IN.8blfn/(?tc<x(*""%%[oD^{5nʩSĉ|<裴hт?8Vk}`͚5^]uz"s>}:,^yy=v̙,_&M0sr_'AJcՃ]ř0NXl`vqqqL4JHH(q'Y>kKYKJe %E+lLyG0pHng%I`BIצoW'1Jgdy- ,Q$Y5~(OGy|<ʓ(OG!:/̜ ˗C&HIJyKIIgϞ̛7Xy6mӧq:=zKt:5jTCz $3s'I[j?ڼysL 8w\gD&66"oqW* VL:СCkEWy(wWRR] }E,u.lRl&C&@J;bޓnm 428>=ے˒ai@:g}^^wu{xfj#~kRY`U*u[;)T[g;}Vj;0;tv"`6p5 QDO.V?}R;{̱B/'8BSvլdKGqۚg0<"j&Gyzw~Q4-(?nt Cx஻ #jcH#R ߧ{DGGˍ7=~ՋuRN̏?֭cԫW(uo]ee>SbccYp!7 3gNu[n{' IDATWP5jĠA|p_|aÆ8Zlɸq8qD:tbaѢE>Ͻh",Kʰ c.Zl <<6mpHfnݚMr'N`DFFrwSn]<Çk.N 3O'of.蹘{s$渟ɘ@ۓ{‡1+Ak.6H8Y]xyl{ZaH"/*hyL,"lؼX`^x15 6l0矛۽4;׬\ RR =*< 7~Up@|Pwy_: ˌad3qfXD|S2T{;v,v"--5kǹs2d/|1cr9r$w&;;ݻw3bx N֝Owݻ3c vAZZٳg}0^}U O2vZN>_>(۱X,,\E… X,~ĉgӦMO?ĿoJ^|Pw}gqC}Zs=G-غu+}tӷo_DFgRjŅFZhBſF]m4uhag V}ޙRMdhd;9ڼrZY99UhfOw̄ L`,YfP-\|}qSZ4f5@}P>g2<{c'Qj,_ +ۗ{!KhrUM0;M{Gz5;֬LK3qqfsx%xWå©SPI0fP9Ҭ6l]ۋNz?m{άݺ鄇 ||W_}qUVG*1"ᔋ;w%-\>"z)0zi\"\.ѳgOyT\llO.[,~Çi^} h׮]m{6c֬Y%6O>c|;wѬY";wlƗ_~iaY:ٯI&`㏥^kѢEe֭2YXHzg5<[׷/fIMqr{{6mL#V4F@%u0-olSh[n`p9-_w``p0 g ,SS?nx)qϽhޮкug*sE  ܹyƪҍؿ9]RtA)ia|1* t4'i{dF4f*rX0jSr…zUte/h۶;/sg5k/_&?,ZTG޽;"**v{éMׇ;vLrTS&L(-^z\dbqҤI%X,L8C;FLѥ nV1Çc>ӟu駟Jl;Xf g;."Nq6oޜ{裏bޅ+A>|Gjj*۶m#44ݻ`ΝPn]ѣGiܸ1 ^QFXV\.[&"W9V crj6wU|r W[*t'Gyب[3`㓙>89+~ qb wyfYsg o99m2}4(<=yD]&b1'8@+ Tض BC1O;wօ={QhJ{oVukxΝ[d,++J(ZLzz:`NS\ ʴ=3h|޽\y^k}iԩӧIMM%&&BHMM7`޽3gΐ[4rqǷiMQr7?+Vp1Oǎcʕvn4s<#< ݛݻӫW/jBCK>[,?gxדGn< KA׮]Y~=6ln(xnu]\μy>|xVW,tכ}ꈷZ'3ȟږ%[>:1g2kZCΏdE[E״,weRHܚʅkymu5|a}Lȓ} +S&˕^(/1.}0',_glX .d$C"5qC });'hGT̮@n5J\^z^IP0 n ^}#r}`㒁ޏ<3Ls9k^abC&dsPH3qʯr95V6G)\mޯYqŒaid1g91||i p˾ydm.'f{_cgHks95tL݆D;_"#SA Pb#GjUyԤ$?+ݺ$-sfqNoB23s7jc|ر;v3T+mܪkl_ ={*t|rr2۷gҤI]'NH0dg{d111p 1w\9s搗ǠA$w' &.sαxb~iKӦM6m'YXqC^vo/x?8{}'L@jjj)GV_um9UutpnCiiPJZ<ٷz~ -.oו@swU@{`X'(})ܞcu}x?.yމPFVB#576\"[i9 b_PJkg_Aly7xne fiO`V Ŭ K伨(RRR8v\rIǎy{ͶmXx1W]uUHNN+䩧s4nܘp, ^+'+w ={6]7￟￟}e+nĉX,,r;鞤xgRRSNLTUVʬYСs믿'^{|uu6(ΛU?1\\]/+C>x 茙H Yz%1g/Y>w3kjvM2Lٽy$gGHϱ (8^V3{X9&4Spl ^3OٯpNn+Rh}tYEw=-{}!CNؿm.sYGvp::uHjJJ v[ڶmK9qϛjjj*۷'99)SSO}vtbӦMtڵ%V\I~<˳f;$]d#'yΊpZ(}W>sY;w.v#J8>֤GQӉ*4CUrf%滘c~6b& ̄ ߘUW?8W*fuf2g`mGY1 wiv ]?%?͘89+~œigi|]qB{`;woŕ [dٜ1ci굶rh_&7òqb׾#z7S],1]FJ |wU0fȊpaj#lOL-[`qvؑ)SfXΝcÆ =N Y.=n~/tɒ%1k֬cN<-[w`G]S'5" r|lw[ faV L_;0T])33ufBm݅ &!: ÜX-fUk (dQ5 -2tEŒ[_¨xob+ _Ë| qŲ;9zgisV}EU*oXu0z9RNshsR~t=nhB,w5F5 O0y2l }gv %5k;#j壏>">>N||<}cǎ+cÆ :SNsϑHz q 8ӧ9vԩ86l@^QFߟ5kZ IǾ}袋ڒ-s<3ӇFJݺuի˖-#66ӧ{=֝t:KɓsrrWܩS3f / %`LsJ租~C|o5;)zh.)]*wQێ`?]bvg׀$[/[%NcݮƜ>sF ֏nQ]kcݱafׂ1w˭> +1ʍ01u`N43y|),)wR/p"/*u~?2ZsoPa!eov{*AFѠC')fw Ώ>xz|<|t??ʗ<ͽ>Qk2)c<OC=ƋTJ3bVZE&22.][o1uTԩ 111̟?M61n8:t@ll,4lؐ}+p"{ƍ6l'$$F1x`/^ /P)Z$#Gbh<8Ф$ׯf#**;2qDv2sE ,- f;zѣݛGyg7p#F --qܯ&{ޯFp˚U&?OաlРAygЌ.|XM2+A,~:!UB̀6Ŷ耙+!qF{>aV>t^  Ì138331?6@U #\Xtb㬋9=gc~`` ; _kVmUzUZ\N6n\El[!{'տa!aMhs2!:"#q7z˜#:w6OJKmۣCѣfuxn|_ii"M(IЪ(ڵkݻ7ݺućG|MTVgzlHG2lEtELb׻mm\9Qh@I2x@\9옑Ma>3"h9t셌73 aYjghS7`(ڵf[7P(p4TM$"&wC=aHmSޯEpjߕoU_*AEk(-k+E7eCJ׵(*RI< >J2 `ѢE:tݻ3f sf.!TTssLћMK)C8oc^aFԌDj7-p..A};r3 NnY=l~63aH0-2t:anslιs < >z:e/_˽n2e m۶TOZ[zi\옙;81 C[&)^ڸ{PT];Ksr)=CK}w IDATdĉs= 2r38>gIz2OC3mkTXX|y3e y$|T*Rˬ\Ç &&~p*]&rW޲׳qH0+J>9s]oqԗ\r ]tMXl|*_bəlSfO"`ӳY\ ÇC\8…HpӺH-ӷo_0DjwRCv W5Jmqř=.|I^z 4wR;au@2#%q߅,,қ,m^r]K3˵\Pp_r/paf;?N30  |ޯysy2#3Η<>݀1T$iQ+JU3qþc¹6jL*5+='N.ODDDUdIJ=8AY۷{\%ALyh5?SAI1cmd nU13Sƈ0JDDTA@k_dvʕr pux"&+S$rۿڭ4w{xyJ^QA(wG=.n5DD&C; pT~8I 6h/ýJj7-0MDD.""""""#j}G~ǩvȄ%ls1JDDDDDҚ5kw^k{֬YebQ'uRV|uc$""d(K[lyzPy!JDDDDDD.;ڀ_Ɵ&wBDDTi %"""3gZm۶uc4DD)g{fja6I S%Zŋ k(e*d(|c f`;: bۨ]RSu<!b弢DDd䉈B)0h ;ʬp:Q$u0 H^$< DDDDDDU3)P# ó?q"7EU"(G\5]sfDDDP"""""bbb0p@&*D `b5:NRXGi^#f/"/Ԩ-LE"""O9C^:u*N0D3RO1|aQQ4ĊTxfqP""be(UQ(_<<磥o=?VBRbŷXJDD %"""ٳv6mƈTִEhW^81JDDD`:trJ9ҍy}V{fAddgPKp#6UDDTyX""""""3Z qz B.%"Ҙ %"""":ɤΙqCÍ?M f$q""䉈k (h 340Csь3|%D0ȇ}}pG5On+&C^q0js:b}bE~4&"/ X#G;$:+x qzTDh9]! ^D=>R*{}󅪚IqR| xQ MftODD?Q_hʡDUnmQ(X` 1 S0/ZǻUͤB6D)0p?p wyO"GHm֭;NڵC:P~iw@DDTer'NtwD5F6?Q}W6`^.gkcD T߆@wUw G>*=yQQQrwDDS """""hQP8)tK)[ 7lY+N'cc-LE;=e# V%Z=MH[,Rc˓0h*+%8xSO!?? NT#2 8Aoh~ o/Q^ٻ?ԡ""$ ܈*p [*QEŷe~4.CP%@$UC6H54(@/DTo>@tt4RSSQ1""""""kEߪ W*2 fĮ:ܳ+0Y(iED(Q=d(AocԨQ /Ꝧqr ^ڵ䔳n ^1WghT Fb"5|JCs53D"ŋq%O=&4abKC%R`#}yJ;Lkx^r [班 w֌&c3"";NDDD}taВ 5ܿw>@;ehy2j=~]C SuO)~ Zuv֧ !ȘNa2oQQQUDTt*9$\,T5h'C+~ֿ~5@sɌaԽՃFzE?SA٤M5ap έ6 k'*y &CoNIIqO Dh_ߔ_Qr.SmƩzl|G?KTCSdqlɿ#1VLm6[)")G'D .V.j ~ͺsYowތ{O՟m='3'iQ˲a"P"""5of Y|5dei* U5"hL:W0hcMh<z ٜ@݊n :kvÁ}^ؗФK*[3v4 DDuDDDD b a ] ًߪurWO~Qjpǰϋl*O-c4-L8DD9KRH`[HA;8ys Z n.#{\o2,@pp0Wn?m?(@HqrA0b?I}Msi+ÀE*C'w#N(Tty)>DT o>@tt4RSSQ1DDDDD5"ATa*rcΝD( VW  @>#&k&&sOs;e?9:Px&B&Cȫ%g'D@z+55&9vXE>nh'/3> :w!T+ \)A{jOX5U]Q]d(y>iVp̜9={D~\PHX#{Ky*BzC*X5a>HY RXw2)MDD㜡DDDDDάT}R@eGeyguPG-ArD<ОrHXlXm >NDރs %"""ȁ0p@\~ݡh=}YERPH__P$/Ī{mLz]ܕ~EDDބP""""'1uTc֭x9jkn09_tS&SZf{E;_}\ &a vX6Q5FҥKa6-Z={9*"&R$t@@ǯ˟kpba1ݯdC\}>+`2=K|DDDDNb֬YֶlƘ1cp 7FED ==ݭ1pt?<p׋ !EΓ׏c|K| @܅K^ֹ)0Zhv3+}bm-`-%Y3 c2믭`ܸq e2ca׮]}HLLtcT3h#" 9O)B$\vlW V2%d~%Sy3%"dL`Ĉ>}:ƌ 6 00!f'Oիd2.]H7F:)1@ .VG}(&$2 >sf4$2 %SB*ZA7n!12t-^8_ ]o}3+>`ܹt<{g xMUD#G>rĿDn6CkП_#;=t#bZ'@وYc|JƝeTSi¿HA` ? ׯ> ={6|M7GU;|('ͺ>aC|'"}&ODDDTMmۆ7n; z-00k׮EXX^}Ud1$B1Aۈ鐹'v " ULU4 >ؾ}!ZhǏ߯WZ4 C?hER@sa6`dqU"P"""TTTQFAŋׯƎwFTgeee{>.r@vO"G<;]CĕC{<1|jIk+ZSag a*rSM׏n;^¨c)`26?~.\AѶm[|'(.jI&!""{qw8K\(0WؙWN7 82)X5_N#zsf%IK5+U^J=$hpag+L""MLݦ8=z60}t[Mϟĉ `0`0"$Fxv# bP_ Ozly?vǁCZW/_-l }>,PQf[g{4}rV""Od(Q5Ν;!!!111x衇w;t (,\zzXtr9N( 8r2$R#m &3 דRt}yg9)1JDDDTMd2^x>}< r9^}UH˥htR?f3? 9P(\waÆ;w.|I7EVwĽĈgl_Z C?P )6H0x{bEK2jJDDn&DDDD5ٳ ׯ_aÆT*ڶm:Eԩƌ㰟Nòe˜wȑvxl׮]8yc0`cZ˗/=w܉SNU=GJ;@+,,Ċ+t;vEEE_~Uѣ.}vV}[hZbѢEN㉍ő#GM61yd;CUw ހwz0Ch5PaeN0>,Bho9B{ʫt }߆i,I@p.\ݻkDsرèطo ::{+U-^z%mСN8@8yӾ'OvoNegg{SN9s97f._\=SSS8q~=~3--ig}i'xiK.{3g8;aƎŋ˽ٳg}駝{'pO* ZiO?TݻhѢrϣjf᳿ᷬۚ!±ϋ tn2 o 9 5vK͍os̩ߟ֭[7pW-""""m۶msz, #!r/ٌg;tx|ڴi6mZ-GErF۴sSMM5EhC5̷sB5?\aDJ(B״DDP""""7IJJ–-[pQ!-- ϟ``2ZlP@H"X[B-֐yG:F" f+!u<X_< IX< %""" .]BPP6lǏ;Fx>/ڵk5hu~z߳cǎP(zO^?ٰaC{=% !Ѻukg3;H_-F냗ѼCP6 I>E @.2[_L˖-YTۍݦ,`ܸ9so-9CfDDDDDDtL@v2R_:4#b}nx6#N(%EhOdhr2d:"p ]f2 m)փ}P8V5b:쒏jpbzGNrt@ i[gXٻkE-<&CVhs̸vdO0Wp`V_*/j/-PG]RժuB! /]c B 5)d( @ WyшaBZjSѺK~PVQ!?(V^?n‘Oj2T""W'"""""Z!WI5Q#}& }q P)|| ̷@@?#y-"8c>zI_ Ѹ xWB0JDDDDDDNXv|n/ .dYGq/|$KA>hqimSK0[5${٨ ]*gР 8*E"lv}"<hyNA7 8ROcvHu3Bh=>_ZJDT %"""`6۷.T\bK}SRRlO@Dt29 8M1H9$@J|4~̄K̆&C}l))).s4ݱcK}ѷo_kXJTy+0|?zQHۏ24hcˑ{^!y-}XT!_ WA#@DJDTS %"""`H&C 4?<%?xTMiqbwP 3vMB0c+:%4K+1WaDDTOD۷P(V !P\\ӧOڵkhܸӾEEEطo_1G%:L4G&M?_n2f.n6'Eh^a>ꃀֵSHwːhw=rOk8"GJ6ψ˙SnVh_ \ofRJUneEFt8E QuDDDDξ2yC pT*EϞ=L&?~yyy *ӷBY9D? `˖-ʂJB6m0rH<3crpBl۶ /_ZF6m0zhL0{zz:V\["-- ׯ_lFFбcG 4ƍCHHk8[93 Xz5֬YG"++ >>>G˖-8 :111.|Duh5T$ w#>y2!#Fy|zSټ +0jUCvcwjH)H΀ODDDpEk{6IIIHLLtٚڵ+<XnZ;laaaHOO/s^U{=FǛ5k5k ..R7xgYI5k֠K./2[ r Ļヒ)S8<^^ә>|cƌAZZZC%Rq ~_(͏"{Ofi~E -[ O> P!ը3g9so/jo#ttt4RSSQ1䉈}uZ2Tȿ+5kD( !!a<&M§~4 /_+}tt _}UPԩS /T>pWD(U`.& fA*®5CafYc-_KbLyĤE u5 ݸq#>#} mې<$''O>ɓ]? 2dRRR޶m\L4kk4 6 'OƗ_~4t:h48p&MTZ//sMAVjZ;,"??ǜ9sp1h4B̙3X~=^uo埗JM@~h/'氄r[,oC50hNSJ*A3pz"0y""""/pyDFFZJn݂uNCpp0z=$ ^Fn޼FA֭[PT־ NpPsAgZ=cX|ykf3Vrx{& tu78eܸqXdK_~=b,_~~~駟0rHBBBaL3lkTDT9f7niD<Dޤ.n 8 *.{^ Ӿ-]e[BR|0[5|ԵQ]d((Zz.PsO8p=dȐ $$$t?æ=hР <إk6mW Kűc\犑#Gڴ}YX|y"r=FVk 8Rsl"h56z =>Rx<(Q1JDDD%rzaU߿ߦ޽{˽WUدޮ] OFFFݶm[]z$\.\.L&nRԺI$2UCo[o]Zۂ `ݺu;v,BCCѮ];L<k׮j%Ӣ7-WIjkUJ{fY=>T"]ɛI$VZXߦ22JI$˿ձcqcݳDu DDDD^"22Zu:wqGaмysq"kW|p-vHHH}\9lqqMd2Y7l^Fq~Ν;1{l4iҤӧOc>|8Zl?04Qm 4?<Uj}#\S-`HFP7˗YfaРAe3v#F`BM$RiW9 DJN}ᏊK{@ F[LeY,omڈ_ % %""""JK2B-%CkbPl%fnnn}\9[*; vݨQ#7l@+L>}୷͛qMY|+,XP#1$2@10J^/nislA !YیX3Dh4-vh_ja?c$ij*FDޅP""""/hPV={XZ{nt/@N|δnڦ} rDDDش?R?wQ*xqF̰|ŋLwxex;c  q+/!ŏGzJcR)p#Gcv/!C`XP&$&>3_ ̜ t(lj:gMZxu qqq6M6U'))ɥk^L+90p@U\*YA/ڴ]M.ZQK‡-zd }O.*Ƶæg`Ps5~į۶IA+W՗7yy@a!p 0q"U7@yC-UݺIxѩ Ą^/.4ox?GVzlg^x<(&>o @'?8|ضOu?DހP""""/c? ~ܹ˫ utN@:l0~\x}ٴ=Vo֥k=2_6mŠn3;@X|¨ ̓W/`2w(p,4D%f۝}ҶĊgf`hjX:jUi?o%٫WyCogٳ*ם;7jˁ sĤei990ubglXш[Rй3pxN鷝|DDDD^>acB-J'C˽4h"K)r &MRL87XJbb"Zjemgee,mԩȲDLL Ǝkm $&&}9;wDrJelڮ\wطo_'|*CDE |Wy.6 ˥^n3 j0J%c$xCZ:f2$"K'wݻ}WPKrܒ u6_+xBLD Ccoٞ?MmV| ڵ~Q.bB}{1K[m.[Hٝjٳg&RSS]nSN}]pau7`ҥ Aٳg#%%C )3WZQFKLLīXÇǦM*u[n{6r=#GDll,5jٌ7oĉسgVZeSLyN:>Cll,zo׹sg3zBTTpMaXxM5^zaD6=VFC 0f㈊Ξd[|W < 3Sw{~ii%׉XxYFj/Zdy?&@&0gy? T*VTTbfP`0UAA@j@lTt'OL{@hx’+>>W 0b{#&QG,~3FLΖNVsXΜJFTBTMkI~~>Fw8::nޘN˖-5A֭Yf.oܸqaaa.WiӦh .\P?3.];88̵e2YNOO:um矂\.5r^z 燈SwƑaI[p밫BSy Ajv8Q|y}x>\l?^Tl~932'=kc٭c=$q=6 VFQ_cυ "r=s4&{]wj+&ODDD weP^T>S6pk֬*xӂ 0m4Քi&4mfPPP 1}tjH$HHHtχBQΪ(vv؁r1L0III˝%"= +u(=?Vy/Z~Ijl!W ^wZB=,Af;̎аy  +VWdh޽/fMyw裏bHNNFVVT*ڴi#Gg09T*ŧ~{ _}mۆl׶3ԕᣏ>믿~)))8z(_j4mwuzGy-Z&L@~tRܹuZzB^p%\)))8vuՐĠgϞxѸL"D>ȇ}_fa%-ov'J' `n~P+W!\zdTZ|A"J|UXnzi[&MsfɹUsXbbb|--+UQDDDDT/lذCqF7FDDT-['|NNF :| b2.'G;SĪk׀%K?qv-0|}e 6=sQLݸ!j'VV:]++,/ΩhիU]{w`^`*q%zG,sQ𵨎&:gaYՉjfp< ֭is=nn 5KڷoIO") _ڐ!׹s&T*.d~q-E:v>8ZJb fjKy,@+{=Ҫ9$LQe˖+]%JDDUgFn۶?~0i8L|.'U O ͮ*Pŋm,._.~|U1i8}35U`=}5JúcNN-{sϕ_!`2C=K.{Ε+WCcYwމ^ǶzҾjt["q`lkqzL؞4I one of marks (see @ref{Line styles}); one of mask for face filling (see @ref{Color scheme}); style of @ref{subplot} and @ref{inplot}; set position of @ref{colorbar}; style of @ref{vect}, @ref{vect3}; align right in @ref{bars}, @ref{barh}, @ref{boxplot}, @ref{cones}, @ref{candle}, @ref{ohlc}; operation in @ref{Textual formulas}. @item = line dashing style (see @ref{Line styles}); one of mask for face filling (see @ref{Color scheme}); set to use equidistant columns for @ref{table}; set to use color gradient for @ref{vect}, @ref{vect3}; operation in @ref{Textual formulas}. @item @@ set to draw box around text for @ref{text} and similar functions; set to draw boundary and fill it for @ref{circle}, @ref{ellipse}, @ref{rhomb}; set to fill faces for @ref{box}; set to draw large semitransparent mark instead of error box for @ref{error}; set to draw edges for @ref{cone}; set to draw filled boxes for @ref{boxs}; reduce text size inside a string (see @ref{Font styles}); operation in @ref{Textual formulas}. @item ^ one of marks (see @ref{Line styles}); one of mask for face filling (see @ref{Color scheme}); style of @ref{subplot} and @ref{inplot}; set position of @ref{colorbar}; set outer position for @ref{legend}; inverse default position for @ref{axis}; switch to upper index inside a string (see @ref{Font styles}); align center in @ref{bars}, @ref{barh}, @ref{boxplot}, @ref{cones}, @ref{candle}, @ref{ohlc}; operation in @ref{Textual formulas}. @item _ empty arrow style (see @ref{Line styles}); disable drawing of tick labels for @ref{axis}; style of @ref{subplot} and @ref{inplot}; set position of @ref{colorbar}; set to draw contours at bottom for @ref{cont}, @ref{contf}, @ref{contd}, @ref{contv}, @ref{tricont}; switch to lower index inside a string (see @ref{Font styles}). @item [] contain symbols excluded from color scheme parsing (see @ref{Color scheme}); operation of getting n-th character from MGL string. @item @{@} contain extended specification of color (see @ref{Color styles}), dashing (see @ref{Line styles}) or mask (see @ref{Color scheme}); denote special operation in @ref{MGL scripts}; denote 'meta-symbol' for LaTeX like string parsing (see @ref{Font styles}). @item | line dashing style (see @ref{Line styles}); set to use sharp color scheme (see @ref{Color scheme}); set to limit width by subplot width for @ref{table}; delimiter in @ref{list} command; operation in @ref{Textual formulas}. @item \ string continuation symbol on next line for @ref{MGL scripts}. @item ~ disable drawing of tick labels for @ref{axis} and @ref{colorbar}; disable first segment in @ref{lamerey}; reduce number of segments in @ref{plot} and @ref{tens}; one of mask for face filling (see @ref{Color scheme}). @item 0,1,2,3,4,5,6,7,8,9 line width (see @ref{Line styles}); brightness of a color (see @ref{Color styles}); precision of numbers in @ref{axis}, @ref{label}, @ref{table}; kind of smoothing (for digits 1,3,5) in @ref{smooth}; digits for a value. @item 4,6,8 set to draw square, hex- or octo-pyramids instead of cones in @ref{cone}, @ref{cones}. @item A,B,C,D,E,F,a,b,c,d,e,f can be hex-digit for color specification if placed inside @{@} (see @ref{Color styles}). @item A arrow style (see @ref{Line styles}); set to use absolute position in whole picture for @ref{text}, @ref{colorbar}, @ref{legend}. @item a set to use absolute position in subplot for @ref{text}; style of @ref{plot}, @ref{radar}, @ref{tens}, @ref{area}, @ref{region} to draw segments between points outside of axis range; style of @ref{bars}, @ref{barh}, @ref{cones}. @item B dark blue color (see @ref{Color styles}). @item b blue color (see @ref{Color styles}); bold font face if placed after @samp{:} (see @ref{Font styles}). @item C dark cyan color (see @ref{Color styles}); align text to center if placed after @samp{:} (see @ref{Font styles}). @item c cyan color (see @ref{Color styles}); name of color axis; cosine transform for @ref{transform}. @item D arrow style (see @ref{Line styles}); one of mask for face filling (see @ref{Color scheme}). @item d one of marks (see @ref{Line styles}) or kind of @ref{error} boxes; one of mask for face filling (see @ref{Color scheme}); start hex-dash description if placed inside @{@} (see @ref{Line styles}). @item E dark green-yellow color (see @ref{Color styles}). @item e green-yellow color (see @ref{Color styles}). @item F set fixed bar widths in @ref{bars}, @ref{barh}; set LaTeX-like format for numbers in @ref{axis}, @ref{label}, @ref{table}. @item f style of @ref{bars}, @ref{barh}; style of @ref{vect}, @ref{vect3}; set fixed format for numbers in @ref{axis}, @ref{label}, @ref{table}; Fourier transform for @ref{transform}. @item G dark green color (see @ref{Color styles}). @item g green color (see @ref{Color styles}). @item H dark gray color (see @ref{Color styles}). @item h gray color (see @ref{Color styles}); Hankel transform for @ref{transform}. @item I arrow style (see @ref{Line styles}); set @ref{colorbar} position near boundary. @item i line dashing style (see @ref{Line styles}); italic font face if placed after @samp{:} (see @ref{Font styles}). set to use inverse values for @ref{cloud}, @ref{pipe}, @ref{dew}; set to fill only area with y1