Update of /cvsroot/qgis/plugins/openmodeller In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18471 Modified Files: omguimain.cpp omguimain.h omguimainbase.ui omguimainbase.ui.h openmodellergui.cpp openmodellergui.h Log Message: Implement VCR style controls for browsing model results in multispecies model runs Index: omguimain.cpp =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** omguimain.cpp 19 Aug 2005 09:19:20 -0000 1.10 --- omguimain.cpp 7 Dec 2005 15:19:37 -0000 1.11 *************** *** 2,6 **** // C++ Implementation: %{MODULE} // ! // Description: // // --- 2,6 ---- // C++ Implementation: %{MODULE} // ! // Description: // // *************** *** 22,34 **** #include <qlayout.h> #include <qframe.h> //om includes #include <openmodeller/om.hh> OmGuiMain::OmGuiMain() ! : OmGuiMainBase() { //set up a scrollviewdesigner QGridLayout *myLayout = new QGridLayout(frameImage,1,1); QScrollView *myScrollView = new QScrollView(frameImage); ! myLayout->addWidget(myScrollView,0,0,0); QVBox * myVBox = new QVBox (myScrollView->viewport()); --- 22,38 ---- #include <qlayout.h> #include <qframe.h> + #include <qpushbutton.h> + #include <qfile.h> + #include <qtextstream.h> + //om includes #include <openmodeller/om.hh> OmGuiMain::OmGuiMain() ! : OmGuiMainBase() { //set up a scrollviewdesigner QGridLayout *myLayout = new QGridLayout(frameImage,1,1); QScrollView *myScrollView = new QScrollView(frameImage); ! myLayout->addWidget(myScrollView,0,0,0); QVBox * myVBox = new QVBox (myScrollView->viewport()); *************** *** 36,43 **** mPictureWidget = new QLabel(myVBox); myScrollView->setResizePolicy(QScrollView::AutoOneFit); //show(); // ! // Note this function searches for om plugins - and should only ! // ever be run once in the life of the qgis session (the om // plugin registry is a singleton), so we do it here // rather than in the ctor of the plugin. --- 40,49 ---- mPictureWidget = new QLabel(myVBox); myScrollView->setResizePolicy(QScrollView::AutoOneFit); + + mCurrentModel = 0; //show(); // ! // Note this function searches for om plugins - and should only ! // ever be run once in the life of the qgis session (the om // plugin registry is a singleton), so we do it here // rather than in the ctor of the plugin. *************** *** 49,54 **** OmGuiMain::~OmGuiMain() ! { ! } void OmGuiMain::fileExit() --- 55,59 ---- OmGuiMain::~OmGuiMain() ! {} void OmGuiMain::fileExit() *************** *** 59,65 **** { OpenModellerGui * myOpenModellerGui = new OpenModellerGui(this,"openModeller Wizard",true,0); ! connect(myOpenModellerGui, SIGNAL(drawModelImage(QString)), this, SLOT(drawModelImage(QString))); ! connect(myOpenModellerGui, SIGNAL(modelDone(QString)), this, SLOT(modelDone(QString))); ! myOpenModellerGui->exec(); show(); --- 64,70 ---- { OpenModellerGui * myOpenModellerGui = new OpenModellerGui(this,"openModeller Wizard",true,0); ! connect(myOpenModellerGui, SIGNAL(modelDone(QString, QString, QString)), this, SLOT(modelDone(QString, QString, QString))); ! connect(myOpenModellerGui, SIGNAL(jobComplete()), this, SLOT(btnFirst_clicked())); ! myOpenModellerGui->exec(); show(); *************** *** 67,82 **** /** ! Convenience function for readily creating file filters. ! Given a long name for a file filter and a regular expression, return a file filter string suitable for use in a QFileDialog::OpenFiles() call. The regular express, glob, will have both all lower and upper case versions added. ! */ static QString createFileFilter_(QString const &longName, QString const &glob) { ! return longName + " (" + glob.lower() + " " + glob.upper() + ");;"; } // createFileFilter_ --- 72,87 ---- /** ! Convenience function for readily creating file filters. ! Given a long name for a file filter and a regular expression, return a file filter string suitable for use in a QFileDialog::OpenFiles() call. The regular express, glob, will have both all lower and upper case versions added. ! */ static QString createFileFilter_(QString const &longName, QString const &glob) { ! return longName + " (" + glob.lower() + " " + glob.upper() + ");;"; } // createFileFilter_ *************** *** 85,93 **** void OmGuiMain::drawModelImage(QString theFileName) { ! //set the image label on the calculating variables screen to show the last //variable calculated std::cout << "drawModelImage Called" << std::endl; QPixmap myPixmap(theFileName); ! mPictureWidget->setPixmap(myPixmap); mPictureWidget->show(); //make sure the main gui windows shows (its off when app starts!) --- 90,98 ---- void OmGuiMain::drawModelImage(QString theFileName) { ! //set the image label on the calculating variables screen to show the last //variable calculated std::cout << "drawModelImage Called" << std::endl; QPixmap myPixmap(theFileName); ! mPictureWidget->setPixmap(myPixmap); mPictureWidget->show(); //make sure the main gui windows shows (its off when app starts!) *************** *** 98,178 **** void OmGuiMain::saveMapAsImage() { ! //create a map to hold the QImageIO names and the filter names ! //the QImageIO name must be passed to the pixmap saveas image function ! typedef QMap<QString, QString> FilterMap; ! FilterMap myFilterMap; ! //find out the last used filter ! QSettings myQSettings; // where we keep last used filter in persistant state ! QString myLastUsedFilter = myQSettings.readEntry("/openmodeller/saveAsImageFilter"); ! QString myLastUsedDir = myQSettings.readEntry("/openmodeller/lastSaveAsImageDir","."); ! // get a list of supported output image types ! int myCounterInt=0; ! QString myFilters; ! for ( ; myCounterInt < QImageIO::outputFormats().count(); myCounterInt++ ) ! { ! QString myFormat=QString(QImageIO::outputFormats().at( myCounterInt )); ! QString myFilter = createFileFilter_(myFormat + " format", "*."+myFormat); ! myFilters += myFilter; ! myFilterMap[myFilter] = myFormat; ! } ! ! std::cout << "Available Filters Map: " << std::endl; ! FilterMap::Iterator myIterator; ! for ( myIterator = myFilterMap.begin(); myIterator != myFilterMap.end(); ++myIterator ) ! { ! std::cout << myIterator.key() << " : " << myIterator.data() << std::endl; ! } ! //create a file dialog using the filter list generated above ! std::auto_ptr < QFileDialog > myQFileDialog( ! new QFileDialog( ! myLastUsedDir, ! myFilters, ! 0, ! QFileDialog::tr("Save file dialog"), ! tr("Choose a filename to save the map image as") ! ) ! ); - // allow for selection of more than one file - myQFileDialog->setMode(QFileDialog::AnyFile); ! if (myLastUsedFilter!=QString::null) // set the filter to the last one used ! { ! myQFileDialog->setSelectedFilter(myLastUsedFilter); ! } - //prompt the user for a filename - QString myOutputFileNameQString; // = myQFileDialog->getSaveFileName(); //delete this - if (myQFileDialog->exec() == QDialog::Accepted) - { - myOutputFileNameQString = myQFileDialog->selectedFile(); - } ! QString myFilterString = myQFileDialog->selectedFilter()+";;"; ! std::cout << "Selected filter: " << myFilterString << std::endl; ! std::cout << "Image type to be passed to pixmap saver: " << myFilterMap[myFilterString] << std::endl; ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageFilter" , myFilterString); ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageDir", myQFileDialog->dirPath()); ! if (!myOutputFileNameQString.isEmpty()) ! { ! mPictureWidget->pixmap()->save( myOutputFileNameQString, myFilterMap[myFilterString], -1); ! } ! } ! void OmGuiMain::modelDone(QString theText) { // clean up the loggin stuff g_log.setCallback( 0 ); // remove the GUI ! txtbLog->setText(theText); } --- 103,309 ---- void OmGuiMain::saveMapAsImage() { ! //create a map to hold the QImageIO names and the filter names ! //the QImageIO name must be passed to the pixmap saveas image function ! typedef QMap<QString, QString> FilterMap; ! FilterMap myFilterMap; ! //find out the last used filter ! QSettings myQSettings; // where we keep last used filter in persistant state ! QString myLastUsedFilter = myQSettings.readEntry("/openmodeller/saveAsImageFilter"); ! QString myLastUsedDir = myQSettings.readEntry("/openmodeller/lastSaveAsImageDir","."); ! // get a list of supported output image types ! int myCounterInt=0; ! QString myFilters; ! for ( ; myCounterInt < QImageIO::outputFormats().count(); myCounterInt++ ) ! { ! QString myFormat=QString(QImageIO::outputFormats().at( myCounterInt )); ! QString myFilter = createFileFilter_(myFormat + " format", "*."+myFormat); ! myFilters += myFilter; ! myFilterMap[myFilter] = myFormat; ! } ! std::cout << "Available Filters Map: " << std::endl; ! FilterMap::Iterator myIterator; ! for ( myIterator = myFilterMap.begin(); myIterator != myFilterMap.end(); ++myIterator ) ! { ! std::cout << myIterator.key() << " : " << myIterator.data() << std::endl; ! } + //create a file dialog using the filter list generated above + std::auto_ptr < QFileDialog > myQFileDialog( + new QFileDialog( + myLastUsedDir, + myFilters, + 0, + QFileDialog::tr("Save file dialog"), + tr("Choose a filename to save the map image as") + ) + ); ! // allow for selection of more than one file ! myQFileDialog->setMode(QFileDialog::AnyFile); + if (myLastUsedFilter!=QString::null) // set the filter to the last one used + { + myQFileDialog->setSelectedFilter(myLastUsedFilter); + } ! //prompt the user for a filename ! QString myOutputFileNameQString; // = myQFileDialog->getSaveFileName(); //delete this ! if (myQFileDialog->exec() == QDialog::Accepted) ! { ! myOutputFileNameQString = myQFileDialog->selectedFile(); ! } ! QString myFilterString = myQFileDialog->selectedFilter()+";;"; ! std::cout << "Selected filter: " << myFilterString << std::endl; ! std::cout << "Image type to be passed to pixmap saver: " << myFilterMap[myFilterString] << std::endl; ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageFilter" , myFilterString); ! myQSettings.writeEntry("/openmodeller/lastSaveAsImageDir", myQFileDialog->dirPath()); ! if (!myOutputFileNameQString.isEmpty()) ! { ! mPictureWidget->pixmap()->save( myOutputFileNameQString, myFilterMap[myFilterString], -1); ! } ! } ! ! void OmGuiMain::modelDone(QString theImageFileName, QString theLogFileName, QString theTaxonName) { // clean up the loggin stuff g_log.setCallback( 0 ); // remove the GUI ! ! ModelResult myModelResult; ! ! myModelResult.imageFileName=theImageFileName; ! myModelResult.logFileName=theLogFileName; ! myModelResult.taxonName=theTaxonName; ! ! mModelVector.push_back(myModelResult); ! qDebug("Model done " + theTaxonName + " : " + QString::number(mModelVector.count())); ! } ! ! void OmGuiMain::btnFirst_clicked () ! { ! mCurrentModel = 1; ! ! if (mModelVector.count()==1) ! { ! btnFirst->setEnabled(false); ! btnPrevious->setEnabled(false); ! btnLast->setEnabled(false); ! btnNext->setEnabled(false); ! } ! else if (mModelVector.count()>1) ! { ! btnFirst->setEnabled(false); ! btnPrevious->setEnabled(false); ! btnLast->setEnabled(true); ! btnNext->setEnabled(true); ! } ! ! showModel(); ! } ! ! ! void OmGuiMain::btnLast_clicked () ! { ! mCurrentModel = mModelVector.count(); ! btnLast->setEnabled(false); ! btnNext->setEnabled(false); ! ! if (mModelVector.count()>1) ! { ! btnFirst->setEnabled(true); ! btnPrevious->setEnabled(true); ! } ! showModel(); ! } ! ! ! ! void OmGuiMain::btnNext_clicked () ! { ! qDebug ("The current value is " + QString::number(mCurrentModel)); ! ! mCurrentModel++; ! if (mCurrentModel==mModelVector.count()) ! { ! btnLast->setEnabled(false); ! btnNext->setEnabled(false); ! } ! ! if (mCurrentModel>0) ! { ! btnFirst->setEnabled(true); ! btnPrevious->setEnabled(true); ! } ! showModel(); ! } ! ! ! ! void OmGuiMain::btnPrevious_clicked () ! { ! mCurrentModel--; ! if (mCurrentModel==mModelVector.count()) ! { ! btnFirst->setEnabled(false); ! btnPrevious->setEnabled(false); ! } ! if (mCurrentModel<mModelVector.count()) ! { ! btnLast->setEnabled(true); ! btnNext->setEnabled(true); ! } ! showModel(); ! } ! ! ! void OmGuiMain::setTaxonName() ! { ! } ! ! ! void OmGuiMain::showModel() ! { ! ! //Set log file text ! txtbLog->clear(); ! QString myText; ! assert(mCurrentModel<=mModelVector.count()); ! QString myLogFileName = mModelVector.at(mCurrentModel-1).logFileName; ! qDebug ("Loading log file: " + myLogFileName); ! QFile myFile( mModelVector.at(mCurrentModel-1).logFileName ); ! if ( myFile.open( IO_ReadOnly ) ) ! { ! QTextStream myStream( &myFile ); ! while ( !myStream.atEnd() ) ! { ! myText += myStream.readLine(); // line of text excluding '\n' ! } ! myFile.close(); ! } ! txtbLog->setText(myText); ! ! //Set taxon name ! QString myTaxonName = mModelVector.at(mCurrentModel-1).taxonName; ! qDebug("Fetching taxon name : "+ myTaxonName); ! lblCurrentTaxon->setText(mModelVector.at(mCurrentModel-1).taxonName); ! ! //Set image ! QString myImageFileName = mModelVector.at(mCurrentModel-1).imageFileName; ! qDebug("Fetching image file name : " + myImageFileName); ! drawModelImage(mModelVector.at(mCurrentModel-1).imageFileName); ! ! //Set gui label ! lblPosition->setText(QString::number(mCurrentModel) + " of " + QString::number(mModelVector.count())); } + Index: omguimain.h =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimain.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** omguimain.h 19 Aug 2005 09:19:20 -0000 1.5 --- omguimain.h 7 Dec 2005 15:19:37 -0000 1.6 *************** *** 15,18 **** --- 15,19 ---- #include <qlabel.h> #include <qstring.h> + #include <qvaluevector.h> #ifdef WIN32 *************** *** 25,28 **** --- 26,32 ---- @author Tim Sutton */ + + struct ModelResult {QString imageFileName; QString logFileName; QString taxonName;}; + class OmGuiMain :public OmGuiMainBase { *************** *** 37,45 **** public slots: void drawModelImage (QString theFileName); ! //! Log emitted from wizard when modek is done ! void modelDone(QString); private: QLabel * mPictureWidget; }; --- 41,60 ---- public slots: void drawModelImage (QString theFileName); ! void btnFirst_clicked (); ! void btnLast_clicked (); ! void btnNext_clicked (); ! void btnPrevious_clicked (); ! void setTaxonName(); ! ! ! //! Log emitted from wizard when model is done ! void modelDone(QString theImageFileName, QString theLogFileName, QString theTaxonName); ! void showModel(); ! private: QLabel * mPictureWidget; + QValueVector <ModelResult> mModelVector; + uint mCurrentModel; }; Index: omguimainbase.ui =================================================================== RCS file: /cvsroot/qgis/plugins/openmodeller/omguimainbase.ui,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** omguimainbase.ui 25 Aug 2005 10:19:25 -0000 1.9 --- omguimainbase.ui 7 Dec 2005 15:19:37 -0000 1.10 *************** *** 9,14 **** <x>0</x> <y>0</y> ! <width>476</width> ! <height>385</height> </rect> </property> --- 9,14 ---- <x>0</x> <y>0</y> ! <width>469</width> ! <height>367</height> </rect> </property> *************** *** 23,26 **** --- 23,78 ---- <cstring>unnamed</cstring> </property> + <widget class="QLayoutWidget" row="1" column="0"> + <property name="name"> + <cstring>layout18</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>lblCurrentTaxon</cstring> + </property> + <property name="font"> + <font> + <family>FreeSans</family> + <bold>1</bold> + <italic>1</italic> + </font> + </property> + <property name="text"> + <string>Taxon name</string> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>spacer19</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>111</width> + <height>21</height> + </size> + </property> + </spacer> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>layout15</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + </hbox> + </widget> + </hbox> + </widget> <widget class="QTabWidget" row="0" column="0"> <property name="name"> *************** *** 79,134 **** </widget> </widget> - <widget class="QLayoutWidget" row="1" column="0"> - <property name="name"> - <cstring>layout18</cstring> - </property> - <hbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <widget class="QLabel"> - <property name="name"> - <cstring>lblCurrenTaxon</cstring> - </property> - <property name="font"> - <font> - <family>FreeSans</family> - <bold>1</bold> - <italic>1</italic> - </font> - </property> - <property name="text"> - <string>Taxon name</string> - </property> - </widget> - <spacer> - <property name="name"> - <cstring>spacer19</cstring> - </property> - <property name="orientation"> - <enum>Horizontal</enum> - </property> - <property name="sizeType"> - <enum>Expanding</enum> - </property> - <property name="sizeHint"> - <size> - <width>111</width> - <height>21</height> - </size> - </property> - </spacer> - <widget class="QLayoutWidget"> - <property name="name"> - <cstring>layout15</cstring> - </property> - <hbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - </hbox> - </widget> - </hbox> - </widget> </grid> </widget> --- 131,134 ---- *************** *** 160,167 **** <action name="fileSave_asAction"/> <separator/> ! <action name="firstTaxon"/> ! <action name="previousTaxon"/> ! <action name="nextTaxon"/> ! <action name="lastTaxon"/> </toolbar> </toolbars> --- 160,204 ---- <action name="fileSave_asAction"/> <separator/> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnFirst</cstring> ! </property> ! <property name="text"> ! <string><<</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnPrevious</cstring> ! </property> ! <property name="text"> ! <string><</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnNext</cstring> ! </property> ! <property name="text"> ! <string>></string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnLast</cstring> ! </property> ! <property name="text"> ! <string>>></string> ! </property> ! </widget> ! <separator/> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>lblPosition</cstring> ! </property> ! <property name="text"> ! <string>0 of 0</string> ! </property> ! </widget> </toolbar> </toolbars> *************** *** 220,292 **** </property> </action> - <action> - <property name="name"> - <cstring>firstTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image3</iconset> - </property> - <property name="text"> - <string>View first taxon</string> - </property> - <property name="menuText"> - <string>First taxon</string> - </property> - </action> - <action> - <property name="name"> - <cstring>lastTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image4</iconset> - </property> - <property name="text"> - <string>View last taxon</string> - </property> - </action> - <action> - <property name="name"> - <cstring>nextTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image5</iconset> - </property> - <property name="text"> - <string>View next taxon</string> - </property> - </action> - <action> - <property name="name"> - <cstring>previousTaxon</cstring> - </property> - <property name="iconSet"> - <iconset>image6</iconset> - </property> - <property name="text"> - <string>View previous taxon</string> - </property> - </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="9404">89504e470d0a1a0a0000000d4948445200000080000000800806000000c33e61cb0000200049444154789ced7d7f8c5dc775de9772289c0b30f0bd420868e1c6e90214246eca82a4acb4226cc8da42817ec06e65464d4156822a1602644949ead4868d1212ec323521cb82515b2a62986e1081ac1399546bfd32a0761941c2d23023ae00168f3242740d27c65d948666023d600eb823b87f9c99b973efbb6fdf7dcbfdc51ff3cfc5ec7b6fdf7d77cef79d6fce9c39f36bbffad5af70ad5dbded1facf70d5c6bebdbae19c055deae19c055deae19c055ded47adfc05ab49953fa26cd660b29023bbe85148199418a601c235704c31aa48abe61fdd35c1530ac170edc37f58bf5bef7d56ebf7625cd025e3da56f2a146ed78eb7158ab669e6c94cd14eeb1899226866140ad00e200530cbd5f82b3b6f14ac2146c096147ac6d9b3b9cae60de33c29bc79e0bec92bc6302e6b03989dd3939acd9d05e5776a36b7172adfaa9d41a6725896ab66838264f023f28960b8867c306b1015be9f81d9825456bdeee4aaad0640e7e1782603bda11dbf79f0e1dd17d6fb592cb75d760670664eef60877d5078801d3e4a0a00035080768cc2233d538414f911f12488cf1592c10f461191efdf6791abac6208ab419b0be8458b6c73066db5ff3ebc430ac70c9b63871ed9b3b0decf689c765918c099b37aab617e80143dc08e770a920d883cc23dd233aa23bf8ef830b87544d7fe4e4b23bf4001ed34321034180412b701827106841cecccab043a661cbff4cc1fecb1ebfdec46b50d6d00b3a7f52d44f8bc61eccb49100c05b0f7e111f9cc91e62b5f5f21dfb880f8e0f33572f248579041a72c61068f7cff3dda6a149b0b686b916519acd5fe7b8296a8dc4a344e95f70df37748e1f0a1cf6d5c17b1210de0cc597d9b617e3227ba2b3e542fd022e26bbe7eb48f5f12e9e43540407a56473c14018e05f92eb91f10d81940900f52b9ef57af6b676c86fc05ebcce1e7be383dbfdecfb6d9369401cc9cd69fc8890e31f3edd157a7c8f788d30ec81460b9c5c7a7aa3e0abb04e9dea7e79468006b41595621ddfb78417a01eb2cb21ad30c225f8c4d8c40fa888ca019c8081f5a362f642aff93673ebffbfc7a3febd03684019c39ab3f6698bf9913dd679891a7749a20bfa9ee6bf3f936a4ab4ce89c2a9f1e910d0d204176e2d30b254807084082749503ded71b449f3f80fcdc6b022087f55720be6e017a969d3e7cf4c97bfbebf7d4a5adab01cc9ed69b88f005e3f064ae28e3a8bec517b31f83d4a7a7886faa7913ff5e57ef351f5e9b2d0045faff637c40046664146790ab3c091a19e4942746da407e7013e1fba3d1fa38847cee1786f1c4d1afee7969dd0600eb680033a7cb1d39d151c3bca31df16190ea3ebecdb71304e9a4b241b5def0d9895af7836aa28f27e4608fd4807c933043ee2387e1ffc53e08dc600aeb0c0a88564935017b6661a7011460a77f40c83e77f43f4faf8b505c1703983dad1f25c2370c23cb29d038a2ea4ed57d13f104f1bd68f87482203d530534db0ac91e994454eb07a48a31497c80e3fb56a09f205fb40aa2319a7e883c4623fe05a9ec5f1ffdeaf4db6b3d166b6a00b3737a0b3bfe6f39d1ef5583d2aeee75bfc5c7274837ac418b29d2bd1a0f83ec4c6d9eae9d4136e093c5a743055f5e3150fd9abc3fbd7a4d10ee3bf41b3e3f32449d092203002e033bfb21a9eca9e34f4fffc99a0d08d6d000ce9cd5b730e3fb44d83654dd732366cff2d99a8f87473a2aa41bf6c22caafdca8d64a971798d511955980d04e159ef877803bb06d21dfb410fb30283823cd28944a8521df94173904a2390891b53d1b8df60d6fb5ffd2f7bd7c425ac8901cccee9cfb0e3ef93a2ac89b056758fc4c7f7fdc3f94010a359d43b87f7799f6ab99a8f0f431a05c4a90c701640066089ab7f1fa90c0c0b5205e034a00a00f54821c0514bb45d9bf703a70164607f1fe16a85d17e6e1dfff399e7f7aefa7471d5f301cecce9037038912bcad801b922c021117a01293974df0b2f66001916faf2904a6d011074bf94d7fb32e865df008ea0fb0c3882e997feaa01077fcd926b09b80cdaf735ebf63efbc1f1df6fd88afbf17de6f0f7ca08c42875a2fe2b2387ffdd221cbdf150214645050099aac26914aa8075fc3150313bfdb9e3bfb3dae3b3aa0c303ba7ff233b3e345cdd57f379f1f1a9aad7b08b5e033851efec12a47340ba065c18843038056c1894e883139fefd53eb55c53df0e9503f08ce5553ec0121c82084e4018223206ac300d023378c42345bebc0e544c147e47e3befbecf8b3b3dfdbfbc66a8dd1aa31c0ec9cfe16188752448091cce7f36a6ad7870c7e9f41c8507ea0814502f70138c2020bd26d8a74502bb22d089a4518b20f24c4a91f1b7008de447751ef732224a39171252811ff7f01eb8d353286678ae01652b713dc87205f8255d1bd381b8da5207127051118bc0544afec79f8e8bed51aa7556180d9d3fa5bdaf1e3512079951c57edc2d4cefb7a2083e9cbc3283fd08093870e279f87f3bede51a4df36a4c3cfc3e3e046552ec88dc86afae6b63eb8f639618216a640f5fe3a333435826dd51e754d30f4f77cc8ceec3ff3e7fbff62a5c76ac51960f6b4fe1a1c1e2fbc6a96c14754e1827c54420f8567800ca5d642f71ee9c1c71b0e7f97c1d7dc8e746609eed4c2b67e90c260e5e4fb34a21f07b7ea87e01137a78edcc60c2258c5083cd2b9721701f9b9d70044de78a890a094374aff7d9ba0f23fdffde0d1cfacf478ad2803cc9cd68f5a679e1f44fc60ec7ea1ef7dbd477ce991ceccb09e01b88178eb63f770c92a1c523a5f06d2c7ed8351c5017c04b1c60c896668638664161191af2ae40ffcbe7456a3c8b2339fea1d3bf093951ab3156380d9d3fa33d6e15b717e5c43bcf49901201d7c51f7a59fc76b8657efc1f7568887cfdca91e461389cb44fab87d1f1422957be34898c11b455850626f3c36aafb440b040d40457c3d1a1b1834f0fd0438ce48e5af4ced3bb26da5c66d451860e694bec93af3d719e55baa204853e57b9f1f68dc23df70a5ee03e2d9095dc265954f0c83df50f321e2b6e248efd8af6985c4ed2ca515627e41407ef87f89ef471b03044da0a8c78e3fdefbcb03979c7174c90c30734a67d6f18b32f89cc4be13951f7cbe0fea688f7ce35576a5ee7d58d4ab69eb24f34662ff32f8796d8a96207fa591deb15f639e44234423884c21839825c6639d57fd8e8144fd87ff1f992d442221ab90ec788a147df352c70e580106387e72fe4f0bca1f119f9fccf3e3c287d05da0fd80fc053600272a9fc3e08baf0f886f2261d57dfc1a6884c01cc3d61e82fa077cbc5c85d940c2048b06d84c0ff6fef2c00b97327e97c400c74f96fb0aca1fa9227aa8d6d51156bd7c381715f217fa06e4c458a2ca0f42cffbfa223edccac7ae898f5f698d408dfb175f1e350291d70c5437aa3c7e3e9d0d244c90e5c0223fbf7bdf919b2e650c97cd00c74fce6f2b14cd69c75b6a16dcc8d0a9219f05f9d611b85ff7f9d6e901f5bba6ea7e5598a0431c214e59833648192f4f906f928826018b8121f5bb50c53fedbd74e0e272c671d90c408abeab1db6142a07fbd87e88f849264e0bf243442dcedb75f4f5a9ba8fb4b996ea7e559860481c21197ca23ad283fa97ab89ff8f2807c333c3228332820f36ed84d35f5aee382e8b015e7dab3cc0ccdf8debf9d4d86183020bdcf0f961e1860d9813e487d53d670017327282cabf0c91bfccd9c2c0b54dfd07df0f19fc6455f1a285de35fff2c1deb863393603bc7ab2bcde309eae325ffc3a7ad8611312335157fb84cae7d790af12e407c45ccec8ef3a5ba0fa6c214f7e3fd7904f084cc06050e6ff7fb2a40cd8eb0a147f3aee5802cb6080a3aff79ecfa978b4b1ab36263734916f3ce2a3daef377c7eba8e9fc6ee3708725795091a5a200d6e213240927d9c32801f7c0b09875bc7c8409fedbdfe1fc64a321d8b018ebedebb29a7e211417c3af81c3756e62af3d9b714d3b2acab167e4865fee6830a4e7c9e5bff79fd9a324140bad702ecaa7e93f9a206c8c2e7650da180c41132102cf8e9dd773f73ddaa1900a9e22b86f526aaa5626b904295bcf18146e6200b392c0b3accfe7597a1eceb18eb8f0c81c00457cf3520dca4f90daaea57af73ed73c6a60c00d9b90482750619b04d3bf3d0aa18c0f137ca1dccfc7bf55c36f69b30240f9fad95044d66106415300321ae8fb39598fe523e7f832075cd9920891ba411ce540320d100b2c40cbfd0e4e330c2044f4ede79b0330b743600c3fa4ba4689361c9a98bc8e70af97080ee1b30fc828e6394dee74b124748b3ba7a913f940962e4cfbfeed2f7e55148b30daf7b0de03432c0673d13ac331f05f0d08a1ac09197e73f96abe2f78d934c1699f74bcc5e900fd97913e6ef0c7ff31c914f08ab5e5578f46a44fed24c30d85f5a03f8554440d6603c13c0f11f4edd7968d38a1900018f8beff7c80760fa92d122d9ba88993c12e6954d11dc48e2e0b0ee9f22c135fa57e93555fd359fbfa406a09a06001076224d5967ee5d110338faf2fc75ecec43b2a55a906f9c64b1b28354cc70bab6a0a163f8d2cff759c755b0cb3ec2b7464c508f0324fda606f0835f20071c80b0e0047aa48b018c8c033cf7e299dfcfa9f87e73972d5b89f895c97c9e3cc2d911d8fb7e49b5a62afc7b8545f8d6a4ef9f5b6b1cc06b001b564f214c00673f048adf9a7febd09205ad4632404ec543b26326ec5c29c0b642bef87440b663491e8030852444165ef583a89ae75e43fe187dbf9034a00132001a05aa5a4855720c00149b00fdc0a8f15d92018ebc347f3d5bfdff282b36b556ce68a854cbd2e76493866e22df5d43fed8fda10c00197c47b06e4106cd0188ee1767e74f3df74f966d00cf1deb3d4a59f63c5b0dca7c250d5f1d2bd6c80144f82982360ca00afae87eb28d4b899140e520c5d8ffa9edc87f3dc3ae9b6f00143035998d32d681d63b67116a06cdbdb780737fab31f36ed91a566df61fbb6f0f6ebbf9064c6dcb80cd637ff5584d5f004a6371f2dd051c7fab076346df5fd597a41052a102894c05e3363307af01286e458f6b04926afedbf3a79e19ba48b434031c9b7f4543df1b901b4aafc541458e05678034a7afe1fbc3c6cdc000073e3d89c7fee5ee557be8e5058b232fcfe3c4ff9a1b8aac3fbe7f0f0edc37b93a3730a2590bfcbbafcde2dcf9f9b198206e4e696a002ee51f47a690599a6807801dbe5c9e3e7278d8fd0cd500cfbd389f69a7a78bcd05e0802c2ba2af610710e5b172069ccc43e566250f3e44fc428e5c9ee778f52bf7e0b1fb576ff00160626b86830f4fe1bb5fb8074468f5b1b7dd7cc3eaddc0889665c0b79fd8339e2670433480d332ef873c7f804190f1921d4900295a723a38d400f4077a1aa04cb6624356f7e0c3bc49eab6e91b581f01ace5f62511bf7c4b8e6ffffb3d985806cd2fb7edde55e0bb5fb8a77ddebdce15928badc0f4ce62f0be865d95d7002a8d03584049ee65980a4a136dc02e5ccd6d93b71eb87ed8bd0c358082e87600e2eb5dc85983dc04828f82a72be3afb2da27d9ae5586cb814f4f626ab2588147375e9bba31c363f7ef411359ecd6fc5606da3db76e47b7d9803cc7c804691c20b8e518010464e369152720e49bd8f1d05dc6c31980f936f8881e4052b123203ffa761ff183209fe3166a793f4028b630f6df3db5428f6dfcb6efae49e45b1a1b3d37408df4eddb08dd1880ab554295440ae38e2241be76e1759d04e1e0df8f4f0cbb8f560338f49dde75a4e8160e11aae0f3e3fab5e403683fef973840b5d325cd86ddf7c9dd2bfbe4c66c59064c7f7cb2e153d7f596008856d9fe8f687c0d102386454d03c8ecc1e75bc00b47c404d5f10c808029c3264b911e7cfe425ffa612f9f3004e22e5fdd978a7bc1776dbf9956ea992dbbedb9b1d8501a20b4e95d53dd3500878a28c92c40515c0594b584506924223f5c770ebb87560330ceec90ec558ea5d428209f64ab76916c77e2b84a681176b884f5eddddb2756ee892db3edba7962c3690000d8fe0ff3b12384551e45d0007e151039aa5dc700a56b030e1f99d8b5ff636df7304403d08eb0fe1cb66f99a80164be29397e01f9456400ee57f3ffc91bd67ff00151dd1b4d0300c09e5b8b6e0c105705f3e11a0006b11692aa18008109d8ec68bb87f647e1b02de4a85575f57c514422e8becc3bb533b5b2accca2fe755f2cf786dfe8f8242c70e88533288d2f1815834e4bf7f31c38f870478d4112611b4703ec7ef02848e5d87ff7141ebb7f74e0e8b1a76730f79e0529c6cc77f676fa8e7d9fda85136fcfd5ee8f9d19e8873a87b9ca61168d68002eab1275f0fb04a211501249342095b7fe8056032060d2243ea76282dcfbfc3cce0e62858fe69e3e168becd27a7f6771ecafcef9a964d988882dddbfe7d609ecde319a69388451c7d200e3320681b9042bc299b365a7fb9a9848bfa7e1f36b7d49b3336e019506a8666911e9a8228100fc1a02c0ceb41ac0100dc01fcd15c9826d78d894c30228bc651689fa67677dcd1b8e9647419d7668ecda23769d7c2275fb9ee56980f07eddf9b784fb9b3bcf9ddebeef5353e8fe7b4d9545ad8a1881ad52ce7d0430a87faf050492d4cd001e7b766613405b0d57993d715e1fb27d31a8fe4d52bf2f9daf767a660a9d7d61fb75745b9e0608efef1ac4aaee6b66aedb269decd78189df98e8f83b1bd5d182065088ab834904305e8501f4d6b6ef1f308042e55b2d005239348ccf3605326f8105e50933c8c91b88f5ee427e7f58efef363870181bf918930196170760ef83bbbebfca7738f777b20ad8a5ddf68f6fe81611449a4f91ac05b810174044be64068571b220a09b016836d7c708a0cb23d275b2b70f48d47f92f31762ffa9a5766a6bcc00abab01aaef997bafecf4a9e95d5d184066016156063fdf8f359223f2bdeb890c105605b9753d60c00032956f8257db4088f43591cf827ce78f5f7136d6b8098595f3aec8c495a90172caf1da5c3703d87373317e1c00b2b09649984e560121e96300108b532068b9a275af401b037c8493797e88f54b6cdfef088aeadf6ff64818a099d5dae9995d811a80d9e04c470640066cdf960d7cbef51a9e2f64e3ad8d88affbfe8a01a236685d8a6dd100147d093baefab1524558670ee550a5ee5d41453d564d57b70600e5307d83b2a30d84d5c1a53440ba8b583686faf1018010018caf07f59ff9641174638052767544551ffb717d5f27af4ba2e8a006188f01ae540d00104ebc7da6d32747af0e863880f4d31d4171568056f52f5fe0f8c3b6ef1d30805c91e504e979e2f303f2e1aa5ab7b1ca753a0b8896dbad5da91a00609c39d72d1e30355920a7c1cf0fc401548eb023c8c63880f61a00108108f1fdcefad540002a6f3da06ac0000ceb8b83486f437e7aadd7f1bfa601aaeba9f7e681c56e9fbee79f6d5f622dc0ab7d2bbf379c94621bbe7ed0f7c7886037062055bc5f55b2ac5fe3aa1fe4a44d868df5efe32a60cd72af6e0d103e7ffced6e42607272f86c80c2be8a2cf711c002167e4710902492e67e3656c44451990de0fdb6ef1c6480be7e1f3eb3a7caf049ae1c4ab4fb4314e26ce09a0618767ff3f3dd5cc8de4f2c1d0fa872024361ada00186abff241ed0cd008e3f7daf6567ad64f6d838cf4ffbe1848bf0771b77a95ed3006df77be2c7e7ba7d7633b0ebe6c981cf574cc4be3a9845e17d7db57d2ca87f992286388108448054de1a971c62dbd9bce9eb295259acf419cfeee957954152dfdfae01bae503ecde9661cfce029627fc42522822b1747f329fc0d48ddd328debab6c9d3e820a795d731adb57f5a008bd79dd293176f776c2dcf9c155c1aa3e80b8934afd974872ffe4eaea1ac0bfdeba47b0f551b0b33fcf5536657c3dfb6a6368d50f95420ae5ebe2fb927139f97025e5f8d942c749f066e0993fd8d3edbdcb6d948f9d0fb05c0dd0b69e7fea5dd3c900eed8b91d475e3e57ff3c872cec05e428605ce9f3221620279470b583280689505f9d055a0fa01a9211949d2fb9e1fb1b573da0fe857ec299b97006e52fbb4d8156bb59bdbe1a0020cc9eeb7670f8d48dd94016736d3610ea0170e5eb090092be5c9bf900f879dbf7b51a8075ba97d6b7b7feac1b24d722f8fe4695ebb0161022525d2361abd94e9dd7ebaa0100c6b9f316e858dc7d776d6d20a90fb028ab803102e8fc0155a9fa07aa359940ff0048e567dbbe6b584ee0d9b0b72ffaf8be477c3898a91f0e6fac760c218d55fb6bd748d86ab6d9b3e5bac501d2ebec7bdd0ce99e5d9343e20024c53690aaffd25f17fcd5233f320240c04576e6a76ddfd56e008ecf42d18700fb634ec4c734ebdb4b3dffa0febda5362a5dccce758c05ac565b04667e7c6e5de300a13f33d7cd0d48b670b223087ee7558c0006b021aa7fd9802b8c200c10910f06ceda0bbd6e81200098797eefdf339b1e0706482a7c9461cb77bf5dfd9b46a5cb733f2b71fc8df5f303cffd8f3330bcfe1a80d9e0d4ffe9068689c90cb51d41208900baaa2ea0f87e4e547f60027fe5a8fe41c0a961df35746b18a9fc54ba4579687dfbd04faa7c37ab7f7de3c5d975d102e5bcc591d74b3491b860468b53fb0130ae06f8d9825e326e51feb2ecf41c7af3b6da11e4775de79904d5c2261051ff4015e9ab227fa10ea33000c0c0d053c9871a8061f3666ac1f154af9013e8f70784d743ee6048454ef3029881bd4f1d5f5323e8cd6becfffa4c2b12674e8fa6e2effde84c7cff6ba70cec080177e66c89f2973c3272d945139d7a776120a22ad5d8b246ec9fabf93f07063029f28306581603fc889df9300f858ad3ea5eaedab59a9e8c51ab78d9a801c48eb0f7a9e338f2d27c6735bcacb6083cf7e23cfecd7f9a85e9b7fbe4d77e7c0e33a786a3ba77aece1ce52f4b7cefa5e1499efa02f08dff7e0ec3909ff65f7bab44393ffc01cc9cd278eec5d9e48c2002fc3e00ebb48f005a10eaab7e1513d4900f52f9595df65aa780c0880a21bb1f3cfed7707ccbc049184bd5bb6f6880b6ca17799e63fae305f6dc38893c0776df3cb1eca211e5050b6d8053efcd63fe6f19afbd7dae73e58d3b764e62ef1d9398de29dfdffb1b8b136f9dc389bf9a6f7dffe40d1378f8d393b867e724b202284be0c4db6770fc64890563467e5ffafb1fbb7f0a7b3f31197f776f5ee3c4c932a96c529d14824582e5129963a906e6ac670616ade0fbe47ce4cf97cdf1d7c3f642efcbcb33807d479f04d157e00f8560ae239f5d52e53aec215469e4ca60740d9c6bfd9135813e282167149722f8fa3efcdb974d22cc52908bdd4235ef8fa0c42775d91baa014618c0f14986f9bf03275ad43623f825c7841990dcc686aab67559f45bce077056227fcefb7ac70033e05856615dc3e7570cf00b76f8ad61534060449dc033c7f6cee72a7f33a5fbe66956cd9330ae55005d6ebf31ef2719fcdcbb5151ff3ef32796824b7d7f6dde1f34c00f961afc9106000086cd0b713eecc2bc1471366038d0d0d2eaf7da75d4b531ef6fc6fec37cdf3300c7ea600622b2d1a6fe479e2938d20088e8070cb6795271427204a942bcf36ad5352db911cbde1048db68fdf0bc526d15ea2ba4533ff2615eef3690891b402bf2412a7f4797bd77468d6fa73383a6fed591a358e47dd84cb220b1d9d314f29a51a4c7a5c6fa76ebee532f8ffec039898b25e07c1dc0e8ebd933b1f5ea5f66010dd51fae9fb3177aff75d4d8763b3062919fa54c063fcf645e4acafba85a84b0d208d4b0ec4126b8da9921fcfefaac2a577edeefd3beeaf37e06c5b03cda227ea1bf400a7fd665683b9f1a3675df33af00c5bde1bcfb786e1d18b4399d250c6384faec61a3206fbdfb42e7c9bcdf5702b535b56fc1bce03540c20468453e48e18bbaec7dbdcbb8763e32264771380e7ecc43f70b138bd589989546f06ec20f7a886d5fd308493f30a78ff8c5636123f203d28330d4d1285a227ea1ff3e0323a93fb4b1ce0d9cfaf473ffdbc24e5759789220da6404d1082d4cd01247d82848dc28c8879341b661ed85a5f8753de2c7c3900f7678ca5ee87db5eb988e7972a83d5cc46c53a9574f55556a005ae6ad8b291324b3855867f02a678201e4b364fb8613565c50fb12f10333c859c04fc587201f0cf449e5df1e6744c73e3974f2ee43af64a07b2d38e05f3629387f2c0c5031c2e6420e3ade9c6803708d09aeb6d9420df95efd63d1231f1888f8311b10fbd87f7bac3fbd7e5997bdc3e38ce7d8670767a03fb2605b886dfaed493ad6070875ea09453ce55a2288757730385bb80a98a086fccaf80393c6635f9c0639f2c84fe6ffe061c807a9fc5d063a09bfb42debf4f0a9bb0f7dc93afe9aa4269b788e40285a1899a0a61192d94244feb0d9c3fa23754d900f929465a0f2f9ae14e5cfa631ff5f12f960874fda0bc3177d86b5b1190000ace36733959f0fa755c5c1772651af4d8d90cc165224848a1723e3061b08c99dfa8d797eeaf383912c563e5f62fd25c80188615f9f8ee796443e1838b69cc10796c900003079c7c1bba0f0ba587a2e37ad825bc861e19901f089a3151360b33c9c0af9572e1374f2f97e4997bccf078f85fcf749e1465df65af7fe8d6acb620000983f79e84770f87aac21e47d7a758e5d3cd25cf615244c8045aee2066904d1f72f6f26a8dfbf08df80fc903452f9fc0c047009723e11d411c22a5f07e48314feed72071fb804060080c93b0e5d0798b700fc4ed8a82808f06ff0c65131414323a8117183cb3882d8baae8f06f2bdcf5f26f2410a5fd765ef8bcb1e405c020300c0fcc9831701ba1f0eefc35bb65ce17f6cd008a831433a5b688d1b748a20ae37d24721bf8aeda7832fc897c10f3ebf9ae28d85fc9f3070f052c60fb84406086df293073fc3d0ff930019fc70b3e10d01e94123b432c1e51e3748101f557eee17767c4e1fc2099ff0f37c2c47ed8314de67875df6c2f064cfaeed921820b4f9b70efd90501c96c1cf20d9aa996782c4f77b1f67d9a070e4131c214840012ca6b385844e5be306eba51192ef4b9929d13051d32c1a79405c8a264a065fe6f963ab7d90c24506f6afc4e0032bc400a14ddef6d8f30c7e9490582c203e30221a90d27240481bbb1c670b51dd2364ef728baf6f9ceb97aee33b036280dd58c8073becb7177ac7566acc5684014263f01384e287e134318e79eb9c5c33c059f1810913640eb05e0d07a184458d7c511e6aa0d55c89b60883b276994843d47d6a148bc6afdbfb133d3df225b053f97ac4f06e48e8ec847c30f0c72b39f8c00a3300004cdc7ae03a52789d1d4f8b0ae0c8004115543fae311b18aa11c2aac3da47145b55bdaac2b31871962fb3955f9fd23dd06555af795d32bf7fb96d45190000cad3472eb2c36709f94fe2e03ba171a44c10325b5c167d20bc26b0bc80c2550b23609d30431a514c99c1fb60cf10dd99a1a5df44ba6b7c9f35c815246d0b886adeb2f14cb62083ddd732c8bed0765ccfef8f5cd56bf6bfb31a830fac020ac9770d0000047749444154038436b16b7f068513707c576082fa1555bc203243f55080cc33c20866702d6b0dc332939afb1bdaae09c2838f4fd57c744f9e01e2899d2e0471fca68d28f80c08c1f70343f2f797ba7ed55ee83db52a8384556080d0cab9a3160eff82901f9341f7aa395e3dc21c25cc200f475ec790d943c50c969308a303d89620af19b0088f5402db05ffff1790a74918b1ef5fb70bfefdfef38bf2ff60c394ad423a12a483b5f7f1a2eeb91fe8decff3fb89f01b9ec9d3d67f6235071f58450648dbc4aefddf64c77f48c9dfd8bb0700c204219218fa4884648d1930a8199a6b0f8239610ac7802a60613190c994f42db45f90f1eff7b578259c2dff1f40345e76bada8b07a0daa5ebfbd1d7b36880ee8897a99ec383f642ef2f2ef9e18f68abc600692be78efe11297a02c0c588fc9409b862040088ebe05c670676a21910358357db6ec1cf26bc0f7626f64310469823688c80e4aa1fdf1ffb0da4332aa4f74b99c24561e77d7c5ffb94ed5054c354f27769a4a7fd05067e772d061f582306086d62c7de5bd8f18b044c568a408a1ad614428c00064648b440c214f53843da4ff2101c371886933ba2faeb2054a76e85fbe1caf87c781b08ef0ff37844e35d26e2c3f50d8ffc85157ff843da9a304068e5d9e3ef90ca7701f841a8672755ae2c6275eb74961019c254b3843008ce3f6ce71922f6c3a06449b835d0b11f2cb6d147c7d71dfcc24cf27fc296eb64fe1ecbe5f8291db1dfa1e342aaf658ea3ef43f2485a774d9fbddb51c7c608d19206dc58dd38f03f81a802d2db8acf7952f4babb28a21c2bc1d684178f3ef23ae40f539cf08f5e01510cee4ad04aa477c7c7d5988073bfc9c141ed465efcd4b7faae3b7356580b4e9bf99f93680df26e0a548dbb5879a79ade091e60f460e3e360c4e60821a53b88058aeae685c6baf078669300b573e9d5cd6f87c621c18cbc787fe45060e93c2cdeb35f8c03a3240da8a1ba7ef85e36f02d816ff18119afafec60793c81d308239daae9092f7b5e6b8d6ad109e30c2f2909e5e67d8e1097ba1d7ed70c1556c1bc20000a0b8713a83e32f00f47938fe4835f8396a4527d2f4b3f07a6dd8fdd2b20a913c39e760a01f5b6236214ee1a77c2182e92b6d78277149fd79427e5097b32b1acfbf94b6610c20b4e237777f04a0c719fc7902aeaf9053ad29d456170762f60dc401437c747355ef927df952d79fb2c361527841974b176c58ebb6e10c20b4e237a7b7c09947a0f02576bc758591b856fd77087856972bbb82b7926dc31a4068d9c45446c0bdecf01029dcc50e9b5601a12b79fd7b5278891dfecc5e583f71d7b56d7803485b3631b595903fc030fb08b86503211d04bccac00b84fc87ba9c5dcd4a882bda2e2b03485bb6756a1b294cb3c39da4703b3b6c5d63a4cffbc8dd1ba4f0a62e7b1d8f8ade58edb23580662b26f6ec60983b09d8c1c00e427e13c36c5921a42f10f2f30cd323e04d06deb64b54dfbc9cda1563006dad9898ba811d26496187d70e3b13046f21859bd8e143527837f9bb25851e3b5c2485b3ecd0b3177a970da58fdbae6803b8d646b7750b055f6b1ba35d3380abbc5d3380abbcfd7f2b16e87ff4d2e7e90000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="8193">89504e470d0a1a0a0000000d4948445200000080000000800806000000c33e61cb00001fc849444154789ced9d7fa85dd775e73f1d1d997d40603d13811f21c60f641cbdea8125db9d48d878fc06831b27196cc59d624d826b959454763a4d9de232c221aedd98c4359e69e4a1216e4a8d445b47161357761897a71a1bc944f653409eab84113c93d65c818cef0d23d80bbd6d327f9cfdfb9e7befb9efb77e2c105bfbbef373af5fdfb5d6defbfcc6af7ffd6baed0e54bff6eb51fe00aad2e5d1180cb9cae08c0654e5704e032a762b51f6025e8c89bed1bc5c806dbbd19005375045080180d94e7c5e85f284ac4e8b37bee9dfc60151e7745e9372ea528e0c8f1f68d25dca191cd256ab3363201ea26c766315231db9de084c0b81f3454ccc70a81065a02a714cc89e10cf0c6defb2f1dc1b8a80560e6447b421bb9ab2cd45ddac81d256a93763a6d22a61711930d60fb91e683d15094b64f241cde46000a3d2f006730cc00af8be18d7d0f6d3fb7726fbdb474d109c0b113ed298107802f019f043cb334428942674cab984823e65bcdcf8eb3379fb742905b14c3bbc0413172f0c9afec3cbb2203b144745108c0b193ed4d62f81215d36f022a0d2f2a667ba617a9e657c76199193197921a735f21a2019a1f842bc60ee17855ddf70870500c879ff9da4ebdfca3b3385ad3023073a27db32af8ba181e48ccb823a7f946288ba0f91133803a6669546eee338d8fb142c27c2f64756e25713fe7c5c8f781a79ff9dace35eb22d6a4001c3bd9de2186c755c1dd39d3bdc627be7eb88f1fa8e991e5d0f342b93ed3f8e478324c11599c1ae1d04674897a511b797aff9f4ecf2dfd682d8ed69400cc9c68dfa60af5a418b9c30d720f80a332de55bfc6dc131fdf0fd8b9eb5a219a1788999e0149670b6a9fa720b3380936a89eb73aee638cbc08eaa9fd7fbaf3cc920dda22694d08c0b193edebc4f09c2ab8b767902de9d4bcd630bd46d3e96576cae4e87c22f35feb6e328c41c4f44cf3abebd8fbf50a91069e15a39f3ef0f83de79762fc1643ab2a003327daeb54c137041e57a8320ed9bc0615a4402ff6ed35663efdbdbacf200097dccf3d98672af678cbec88e9aa081a3f2ccfa0eb2dc3076278e4c013d38797785847a25513809913ed295570400c53f51a6fb17ae6536b996e06303bd3e8d85c7b267a1f9fb0af3a9e1a61c95b7a852715da5ea18c9eff470afef0c05fdcb32a4071550460e644fbabaae02fc5503a260cd31cb0836700630d78ecf3e77b8faf0768e9fd624bc352b6e46e2bbc9ff817f542f001f0bb87fee29eb71638a40ba61515809913ed0dc00f55c117a566b06200266e94628d31a926331f6b58745e5107c4ea93444e6313f7d3d326e2125a2b543e048d842c018e44ccef6fc13e5605df3cf49d7b9e5aea711f442b2600c74eb66f16c3dfab82cd7dd17d8dafacfea583a5e7054c6c19d27efdf572733fc4ace765b258c321608222b893042816a9e6d7997f6ab00bf03a46761ff91fbb56c425ac8800cc9c687f01f87b2ab79e502dba8f992e7670b4a023cbe05bc76c190e10ebf20003c91ea70acbc422a48d212493545126c7d7b5b5e96762a108e351c22fb5e13fce3cbf6bd9c3c56517806327da7b04fe5ac1bad438d6a07bcf54edb51f035ac74c5774ed7109d3734b0135798190cb2fe3d699f1f8f75893a9b10cce121421ad1c8422129a682c823b889f3312068942c7429dc3c8e7669edff5d345b260202dab00cc9c68ff37e0c9f8b714ddc71aabc1c43e51d0f31630d9be9888e952731ed920120f7a6669f2d0ceb6b16f4f984f60a61796e8ef40e41e4a04dd231c89d92717d2ca8d65cf7d5e0cf71dfb9b5daf2f8a110368d90460e644fbaf303c3c081d7be65b93e0cc7d475b8d168701aabe164931810c617a1ec7e70070409bf87622617047d9dffb0b83b508b130d4551da3e7f4162a0d7d2f60e4f78efdcdee830be7467f5a16019839defe2b0d0f97458aeef3b8d8996d31410802f3238d37d075c70f607ad5d667e81c79331efbe6ba7e0da9a2c652108e4f852117226ab1475640eaf73e1f8b91ddb37fb7fb1f9af2a0292db900cc1c6f7f1b782cd1786accbed36453d2150df3d071ccb6adeb27c7b9eb98bae44a7d866e29db98a92e0a4881627fcb900b571e0d79402cbd4200ea02c8fdb37fb7fbc78b6652444b2a00478eb7bf0af27cafc6f786685db1be5e0b3a62ba4885139c0588355ebbf38d1f94ccbc076aace9a3f6819007c0323fb60cb130544727c2e0b1459a87d0f1f8c4ef976634b518f90fad837b960c182e9900cc1c6f7f41c3cb25acab63be6392f7e13dcc5795c68bd08d308118922821d7f8dee4cbeab48d8520019ad4d43a624c6023a65479ce09b2b37570cf9284884b220047de6cdf08f20e85dad05335cb7dbe63aa761a1e7cbd447f77e8df0f8a138a3ea5da25d7f486fd84ec7b0fc30ace72840c227d43d6debc86a00a5a62b8a5f58f7b163de368d1eb028ebcd92e415ef2cccf933aa4cc871ae69f1744a07b5e638d405fe6ab1ee63b80e5067965fb2138b4cc8f2d9e1756c238409afef69620179208cb788ce13008930a9eebc3929168d10220469e033595a66509ccb7bebe6b35bbf3ff2aa677a5627ae7bceb6b8ffeb5113a1284a4f6ba49c167edf41dd3f3e7f4cf2fe0935c58a04bfc9e84e30b7b7d3fe9246ae7e52b93bfb3ff4b8378d38416e5020e1d9d7b4015ea40920bc7f9ade86532b3df3d1f507e352011f3fbf8fa44a32ea636720b404d7a39b895baa8063b967e1ce21948f3725eade796d97fdcfb8b0531904508c0a1a3739b159c14d890fcc13f6c15fc39cdd6da9a79a9809f9c4f7d7e08ed7a81634c2bede317172da4548b0d3c6622683c2a1b8748f31de69977e3ad7f4651fefbd6e1bd1746e360458b71013f10d8e0506ff53055534970e9cdbfd77c1fea45219e49e37aeff388e3797cbbd23e7ec17d7adb5e6c90333fbf4eb01c95f054e3c23ca8f5001a8af2268c7e8c05d2822cc0a1a3737b30fc20ad7645b96e53d23519f373b3ef343ff1f1d9e044b466347b99a285ba6967febd497cbfbd485248baa0916d73afec6b8dcacb912dc0a1d7e7ae11c3777aeaea597d5b9914ede7cc4f50bed37cc8507ef4fb5ad1eca58a168ad422a8e8fd25d17c70964000b5de1d17aa88c05525eaaf59008d2c0062f4930aae49263778735e06b41f877a12a575dddf4d7007de2db076d0fc72f52d444e7c7c6fd450df8f2d802b24b9d9cddac86d93bffde4bd8c4823b98003afb56e5445f97fc4b04ee566bf08d53957d0e98a8004cd4f43bd80769392e86aa3f6156e93da42d486e3d2f149dc809ff7608500ce94f09badd7f6350684235a80f25b62f4baea61d2c917b1e60f627ec7333fa0fecb41f31b5982225782a024de2264cc776ed4ce24daac8d3cc808d458000ebc363785d15fcce7b255756debe1e69d39078ca2632099a923d89785be3e7f8df8ec15c5043ec3e9fe1ec623c600103000761a5a55630869e5121e9fb86bdf5534a4c60220463f06e53ab153b2bde69ba0f9be8a8758df2ede328874aaeb44a8ff72d4fcbe96803ebff7c100b10528d3f693c08334a44602f0c22badeb14e57f163bc3c593d77c2823cd0e255df09a6fa73b297fdee5a9f9832d416fdb9307482c40986f105b028cfcd1e45dfbd6d1809a5900c3c389ef8f73dabaaad3e793397ce9379ac42106bab926b03a9ab7d6fa1ef065e3311803a8040344eda436720f0d68a800bc70b87515f06012f7e37c13f4862c7166cfc6fbd1228f8b3ec3b7429620cd0344fd1c0310e61360e2ebf0151ad050011023f7029b7c49d631574b358dcbf5ade6c7757d5cbc8f730757347ff43efef75a0c4034afa03ad2fdfdee89db1ffd244368a800a8423d98ce5d53b61091fa74320c50450912b081ab6215f592be563471edf5f1bfa71800200280b60f587e94eb400f2d170f1480fd2fb5ae112d77818defc1ed92154dd60868de4501005de9f8b81ffbf710e7ae05cdba58faf87e6a01002cf0239b538877bf0f3084066602f71f9cfd2aebd5f36e070dbf4b566c9e1cf0c3ceec31362924614a779ef6540aeebb6d82f131c596cde32805931363c39eb587664f77fcff8fbfd766aedd65e69d360cc8bcb976cfe7b7b163eb385bae1fa3ec59b0b6b4d43ea7697f281c7fafcda1a3a7abc258e38c2103844083912414f4bf838bb27e73eef8febe45a22102d0fa278d459371c912a7e9aa42f5b1ef3f6ff30251541057b7f67c7e0b0f7d6efbb20d7afb9ce685574ef3f23f9fee5ba5db7bef36f6de3fb93c0f3084b486dffff60ca7cfb447aa2afa4932390690aeed3ba5d469f5d0f067ed132f3cddef79faba80670eb64a6d64daa3cb42459258f5ab9b04f4e9e701447dc7fc8d1b1487bef559f6debf7ccc0718df54b2efa1ed7cef8fa7514ad5fad81d5bc797ef01865059c2338fec180d13983e18c0a47900c05609ddb8832a18180ef61500119906cad8d74330fbf12a5deffba3d02fcef86ddca0f8de37a6995880995f28edbc759ceffdf1f480b87bf5687c53c9f42d56089b60023f2134c30085ead949c56da11561ad1d13b7eeb9a6dfb3f41500557087fb7fbe82254c7c2479e8383de9cc982a147b3ebf65413e7eb1b47dcb187beedd06d4c5ddab4b776e9ba8fe33d412e0c71193e5012cfa0f1940a8169e46b503d43a31f25bfd9ea3bf0530ec1013495254b78f67e76ae3a2005b23c866b98e6d84ddbfbd3afe16e0a1cf4db27183ead5ac55a6ed9fde0834cc03b8e8a970ca47a56c4596092c1c0648e71202b7f57b8e5a0178f2fbb357e1b6558f3040b2160ebbff1d41f212ac6031c27d3bb68c3c384b496509d3b74cf46ad62ad3f8a6922dd76f1c1d03905b80e878a3a3ea61701b20a309003029464a720b4008f97c0630429f60a30182c46edbbaf2a63fa76d13636b0a0338da3935d11c03388daeb100a53fafa4a77650b537f57b865a011023533d1314bd245666a98ce2d4785e00c1f78081ed5b560f713bdabef5da35870100b65c3f367286b0ce02b86450b543093efa2258e8abc7b7edbaaeee19fa5980a93479136380ea80a4e043b64387b50c13d76e5cc0b02c3d8d6f2ad71c060098be75bc7146d087d6fd3000ce0284c523c97544a6ea9ea17e098361b35fb410030a7b469515761622de9327fa3843a1b8f613cd027eade1a91f1ea33352864c31fe09c5be87b637ba879b69330a06d8fee5034015c534491cedfdce0cc7dfebb051c1ccf77735bac77db76de1d5b74f67cf273dfd644510525900e96485a0080046c0111154a126eaeedf670d0b13b9cf7116a1766f1ffb774d081547f1b5a7dfeff0f25b738d326279ffb3b78eb37d6ab89b718332320658c0f15d81d953ed46cf35f129056f67cf57d4f56d720797f9d35619b3743175cbea408cd40a401f0cc027a34c74483ae0679c443ea624f63921f418cdd72ebe9e3edaf51b53918c44c3e3e1f8cf3b430eace8bedb2acbd2ec7de3358655d4155617573f877505848c20a0a09900ec7d76661db0c9d5fdbd8f89b76da117fd27a8d397264718ec0556cd1a6be80231c068c21c2ce3b153cd3e0d303606e39fd8d8f07de39d56220c5000757c20b6007a53ddfd7b04a0faf052f53261a70f129fe48630dd24318e47abf317a239236b7e538d5e601e60b4e383869e7e5f689f6bb67fc38eade3cd3282890520e4018c788be0dda49f6fe10b44cd04401bb9262cd85449ddbf37ee2f93397fd5ef99a436a4c5d6cf47bd7e635ae0f16284d9f7ce363a65e754936800520b50350193d56d39e7b0038891da7a400d0650ebc26c5ddb9a5cf321ec7b17e5051c1618116dc3a5870154a1387aaadde8941d5bc747cf0358aaec6f158d610160751e16ab592e16aa76ad408f008891ab7d26cfcdee25caf1fb7ab35b16569d173ec690faacc6748961008c30fbf366025096b0edd363e9f3f57bff4c18b5d7785d7f7cf8bd3626ef11000549dddff73daa74e9c668bb532a345a0d552cb9972f06a05074cf0b73ffda0c074cdbeae0200c10af2206570524fcdd550d5db516c73f01686601baf19cb2b8eff6eb33796b1fa6067d8e4297220600aa244f03da66ab83833040d85c829e6960fdd1bfbfcec775f7adb3005a224d774905b70bb65b1be8679e643353d46235ed12c20000c74e751b9d363931c646a586e7016ccebfca00ba3c804eb181e79b8eaf53fb81aa1a0ca02fd896666d65687249bc8201aaf6e49936bae16e7ed39f9918500bb0667d7eb005a8f1fdae6d6601a0fc080ff0b22dce5dd50fac4f0aa8bf5e722f6f0ce0ce7ff5ed6649a12d1363fdd1bf4b0faf573e0318761e0d96d8d5705451264aa2e0a3ba7bf65a00d11fd9d6a27f57e58b34df5605838fe9b32fde0874a962008c707aae595af8b39f193c3f209e1398af09ec6701a2f39b09c0a1efdca3c5a05d66c9a1cbb80f615e005612c31eb95730407ebfa616a02c61cbe6f19ef35d5f0c7677301bff47d3c5bc2506aa55dc8edcec6055fb0da27ed5c039113de9e7a3170a113bd9c0f5fbf8fe8560802dd78f317dcb385a224977d3a006f4c7372ab66f6938e3c848985b37022d0403e4553d045a739d461363774e6de4f4fbed9eaaa047f5f379e655479638cddfb8befdfb0775f7ab150031fc52c16418743226542f8b09bb5ce74ca250bc7fb699e92b4b78e66b3b1b1dbb6072287a45308064f7138ebed36e24003bb64ef0c22bd9fc00e3e601746d74e6e6017443e9b7a86e9bd8ab5478ced4ddafdf8ca03361556f7dab7b2c801b02a73142fbc36621d07253e7dcea620080d9ff7bb6d1e9dbb78cb171436f3491575fe3fd151580a47fefb500fcb2ee7eb502a08db4e2fdfe938f22dab6dfb772822faa7e6f9a095b4e3af97e7b553100c0c99f771a8783db3f1dd70608d79baffa3e03184d01f7e81f7ced26ab059caabb573f0b70cacdf94be603a0d0f6cb1d5aea3f721072d5a365c296938e9d6aaf5a1e20ee1f7faf596de0cea9f13e790037ee3106e8666d66b1aba4d0053152bba174bd00184e011fbb978a0b3ef1fef63a1a9cd402e07f9f39d1eca5978d34ccbc3db7aa7900d73fd6b03a3879fdc6507bf119400819c098b92143e8168578df6fef2f704a9f6b354d04c1ccf3bb7e25465a7e6590091adebbbf7dd646000860eedfba1c78ad5918b41cb4ff9f66ab6f13ac320690112cc0c4c49807767e5ce7538b5c315b22fed85dd89c25f05bee0b0a8ef7bbd7800d22d4f1bc2a984603591bcf0788cd66a1d87f787655b0c0dc5c87175ea9842fafd20da38e0b6046c000ef9fd503f316ed0fbb8dc6a135d721acc0aa8bffd3899f55bff4e32e26da5bb8b2046ff5bbd780b581f2866d01fc3e00211af0c7a52d12cd09ac7e171176fff9ab2b2a04adb90e7bbe3b53ab893327865ba483ff3ceb8f7ff5f8f07cfeeca936ed0fbb4333964d30d1d177dabde3aaeb665e05cbe6f761f4a161109205590085fa8918f95899fce30d0e0340b4f224c4ad1e33a49a2002bbfffc55f6bfd46a8c8617441af6bfd4e2bf7c7386eef9feb9f9236ff637c7b3a753cbd1feb0cbfe9766fb1edf3ea779eac5597f7c7ebfb87fe8e81c730352c347de6cf3c2e193246bfbe6058a325a06a6fd3c8d8ac9d59671215f408c014e75daadda101086ec10b2fdcb07dec17073cf97307cc1a1cf3ef72e64b40f99cfebdfb851317dcb38db26c619ff44b54dcc42378d70dbaf9c3cd366ee5fbbbcfad65ccffdfaf5efbc699c5d776e61c7d6eafeb3a73bbc7a7c8e97ffe574edf113d76ee4a1cf4f32bd7582b14d5588fbeadba73974748eb35d197abff8fdf7debf9dcf7e66c2bf776baec3cb47e7a29d4da27afe3c68e9501ab1b3b335225dc0edc85af595c933a92086a7f5b9d69f2d4c001e38f03805df4a34dee70e43a6aafe6307713ee04adbbc259a916585405716434b178c20e73bd5689f7780af63816037ba9ae307b777daadd13180a517fb56f96a73cff16ce001c75fe90fed87dc7fd5f7cc970e5ef3a9617eb43847c10762fafb7f182200b30777cf29d41bc1b7c4bb5a93f87ae783923ec37de295beeb93c6fdb6f45bf9fad8f7abc842446b32f13e3fc6003fea17ff3b6ab253e88bb6f53e2691c02c03b5da9a73f1f649e37edf46e8df50f97e6f09dcf9926bbeebbfc8106ab053283f12d089a78ae602c699a764f6705d2e1bd680a6adb53ec42b7a7cdc8f22ff2844ee1e7c01881ecd4715eadd4ebbf52e4368a800cc1edcf32b90c3952f92e89b3559db7747507ba135a3696bad4fbde6cf67c0cff97ed345a1134b5ca3f98891176840cdb68b9fe759b59ef0bdbaf90050628be0f205894467d1c315cb90bf3f91e65bcdce267e86b8dfbae1b814dcabf9089c55057f4b036a2400adc37bdf95797d04f0192937332508413c0f5dfa5a8444f293fe6a6be22a687ed2e6a85fc048d86e57ba841d59aa7e1fcd47c1b39d76ab51baadf1276314e5d3eeeb607eb630b110f8b89378854ab008ea0a46c8fbce723ad4eff3003adaf84907a02d9dea37b7fd2e3d9a8f2af848e07fd2901a0bc0ece1bd6f0133da871ed5ec60bf266dbe03f3f4c708711bedd471b95a82183b2983fffe82df00da69bcb50469f555fa693e62f8efbaddaa5d045247a37e38f2e934631b24d65904e7c36aa3053fc78dcbdb12f468bec5563da8bfcaf82182321a5cba975acd47e0bc2ad4f71881461280d62b8fbeae8d1cc108bd33865c462ab2084825d9f4b704975bb49068beebcf4ba8f6c5a8df085de9e273ff2ed74fade6a3e0a94e7bb676fe7f3f1af9d3b125fc570dba0cfd68a65066116cd49060832ca3a82e274b9068bef24c74582a6cf8547d7b19e71e9cd0c416a317fdff4ce0bb8c48230b40ebb57d674a7822fb62a5dfb73ef96881d19564cfc7d14240afd4b6f6466b4c73975ef36d354fbb0f6b05cdafbeb79c5a82705eade623461ed1edc169df3a1a590000b49167cb429d715fab721620ddb614528c10450bb126f89a0143f2066b48931bf5ddf3438fcf779a1f2df2a8c6ad8332022666be65767fcd47e0a03ed7bfe2378846fa78744c1377eebb9b82d7304232651cfb0d1b24fd9821e03e75869dde144299b8a44c18a486f5f5b5dc4f34d6611e87f6099653a462be481724d3fc7ed3f0aaf623557043a7dd1ac9f73b5a900500983bfae44f307cd7f97edf52fb39d3ea241742ce475820ce20ba193017b525489fbf7aab74795760bed57ce9840c5f0ca4876b3eaae0f716ca7c58840058daa78dfcd4bd4c68258a0eba76264bd7c6b71d8b0d6cde208f12866610d77a9f9edc7e1ce7e768bfe335fd2c481739dfb66d6d7d3fef7fb7d36efdb81f739ad0825d80a3893b1fbd0ec3490aae099942bce656ee80f4cb1610694e69e3e020e115a51a15da4aa79c6ead9d367b4e22a6d57de8c900c631dff97cedfbe1ea518635edff54e076dd6e5d68caab3a5ab400004cdcfee81704fdbf2af30661f3084bd96692f5d840c37a173a66e6cebb8b7ca16a74bf55ef87e97061b76e150a3bd2b1d15265211dc0a30eed0ff6f955bad7b04d9feb3fd9b3292d8900004cdcfee8b731fab15e8db50778cb900b813da618c3da08a05e08aaebf4b9fe4a6ababb9f75534ee3dddfbd30cc4bf54e997b14eff373b4df48f32f08fc27dd6efda4296f06d1920900c0c48ebdcf0bf255efabea3498caec03432c026b3a5af0be98cc370ffaae9fd121b76fba28013123693e62d8adcfb50e2e15cf160b021312e41185fa716d0814b5be902442692c1a3612f9460d6898d7a8248914ad7e85de686159338ae9fd8632dfbe4f85f205447b8d47ba28d1c1ec3743fb08fcc952321f96d802008cdfbae72a55f09a189976c314f6b773831a5e0e688011dcd563f7106382e5b30cf96497e0e3ed23e51a6fac50fb12ae5dc3e7ab7b76058f74abb87fb8c6bb76e0fcfe85d2920b00c0f8ad7bae56f0bf05f9ade00ee2356b9299f5d82d544daf10a4c2e28520ba4ee2ab6deebd377a7034a09fa37922e6632dd27afca498cabcc769f1caf757e9db7c0ab7784cd0c7c7d7f5bfafdbad3f58002b86d2b20800c0f8b6dd25052f63e4ee7a404506e0527307650420075806c300a1a0c6420c69230d77663e46f3e98799e32497e056e92a88986ee7f0f9244f14df37d3fc27f4b9d63797842935b46c020030be6df7550a7e28c8030135476d8f25e85dcbd71b3d847c42220c8e9c25b1a4d62babb19970402ff3dd718ed92e2aa9617a4f86d34458c7a5774d94e143821b69aef98fe8766ba4fafea8b4ac02e0687cdbeee7c4c81fc5ac4a363e4ecc3409800b1aec2c03bd9881acf640fc39d54ad84280594f7ed345777c92ce56f6ab5c44193f1dd6e251693610aa76ded75b37d05ce3510517c4f0657daef50f230ff688b422020030be6dd7c318fe12b8aac7124485a418cde79621cd0758365b61e81582a8efab95d682f4ed4b101e620d776f91697a9e06964ef8bd795c9ff7cf0afcae6eb7de58164664b4620200303eb5eb6631f29282896086c3f6b37e30229f0d0400e7815d164dc43e1f5044c2519b348aa807f0b97df7f250cf3ea1e986f370713c91102c48e35dfbbad5fcb34b33e2c369450500607c6ad7d518f901f045cf7cfbed21df920a436a215220591b02126b54109e7ee95b77464f5c9fa475e9cdf1476e60813edef53f56f044a7dd7a6239c7be8e565c001c8ddd30fd30f06d60c3d0002d178e28a404fa148a48357f500be1bca80a997e853b058271357044549fb7bf54055feeac90c9cf69d5040060ec86e9eb143c2770af37b356e393bc81893180b30c832c4524048e6a996e29c622d1d9f136ac61f30b1612c7d7f52f08f2acd5fc55db4c715505c0d1d80dd3f760e43960b3ffd1332b4beac494b9878196a3aecd3e7b53dd57926e9ac6cef2040b6f67c4f0883ed76a2dc9002e82d68400008cdd305d62e41bc0d7315c9d323fcff0d5440f9ed2e39c05e9e9d7517c1f22a62f4ed3e3fe9c42edebb46797349fbf185a3302e068ec53dbaf06f5b0205f57704d4f2e3e4eded4b9895ce370e6bc26b7efcecb01e0e2353c6f7f2186a755c18b9d05ccdc5d4e5a7302e068ec533b3760e42b143c2646362db126ae54ff5d552dd45c331a9fd39a150047e5f864a9e01e313ca80aee16c3ba65d0d0a56c7fa50a0e8be16ff5b9d541f6a3d09a178098caf1c94d0af525411e5070f31ad274141c117851a17edc69cfaefe16e90de9a2128098ca4d939b55c1b418ee5205778861d30a6bfa9ccddcbdae0adee8b45bb59f6459eb74d10a404e63e3dba704b94bc194c09442dd28c88625d2f4b30a75469096823704ded20376dfbc98e89211803a1a1b9fbc560c13aa60ca62879b220ddea00a6e14c3c7aae067d1ef5a15b4c47041159c12434b9f5bbd44cd72d3252d005768382de9a4d02b74f1d11501b8cce98a005ce6f4ff010d8c41baf5d21c7f0000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="544">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000001e749444154388dbd93316b544110c77f175798072fb22b27bcc3a01c58e495823657c98185a9349d1fc0c28055be8048f00b885dd228f90ab1b5bbca60f75208f740914342de060fde10f7ee59ecbbdc15e904ffb0cc32ccccfeff33b3f08fe8b4d602c3f63e6f6d00662bbed0da0ef01bf802cc4d1bf030dfcc5fdbae45904683c60281190634e89c4020d0009df18ff1b9f7fe05f073c1e4edfefbfda6699aa6b968aec6453c67bfce9a9d973b0df014203230dcaaa615555521482c2991746212ea5003a04121405114001b006b31563255458cd0d28f8a6199ac315983529c140077561964ad4544c0c49717a8438d4b1d9556919c08c0ddcb0262e4a6889024cba45524d7a3dfe1a8a5a67faf4f5996b797055271a3d188bd377b91aa0141505664b592c408fed463adcdbcf7710ff2cdfc4f35ad0c0ac3c743fa1b7d3428920a84988481e25bc1783c46a74ae5abf3b22cad01b05d6bb26e86f79eed67db1c7d3aa... [truncated message content] |