-rw-r--r-- | noncore/net/wellenreiter/gui/gui.pro | 4 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/hexwindow.cpp | 35 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/hexwindow.h | 38 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/logwindow.cpp | 38 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/logwindow.h | 38 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 11 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiterbase.cpp | 93 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiterbase.h | 11 |
8 files changed, 176 insertions, 92 deletions
diff --git a/noncore/net/wellenreiter/gui/gui.pro b/noncore/net/wellenreiter/gui/gui.pro index fbe2c11..6b9944d 100644 --- a/noncore/net/wellenreiter/gui/gui.pro +++ b/noncore/net/wellenreiter/gui/gui.pro @@ -1,11 +1,11 @@ DESTDIR = $(OPIEDIR)/bin TEMPLATE = app CONFIG = qt warn_on debug #CONFIG = qt warn_on release -HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h -SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp +HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h logwindow.h hexwindow.h +SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp logwindow.cpp hexwindow.cpp INCLUDEPATH += $(OPIEDIR)/include ../daemon DEPENDPATH += $(OPIEDIR)/include ../daemon LIBS += -lqpe -lopie -L../libwellenreiter/source -lwellenreiter INTERFACES = wellenreitertemplate.ui TARGET = wellenreiter diff --git a/noncore/net/wellenreiter/gui/hexwindow.cpp b/noncore/net/wellenreiter/gui/hexwindow.cpp new file mode 100644 index 0000000..91aa6f7 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/hexwindow.cpp @@ -0,0 +1,35 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include "hexwindow.h" +#include <qmultilineedit.h> + +MHexWindow::MHexWindow( QWidget * parent, const char * name, WFlags f ) + :QVBox( parent, name, f ) +{ + ledit = new QMultiLineEdit( this ); + + // FIXME: Set properties( font, read-only, etc...) + +}; + +void MHexWindow::log( QString text ) +{ + + ledit->append( text ); + +}; + + diff --git a/noncore/net/wellenreiter/gui/hexwindow.h b/noncore/net/wellenreiter/gui/hexwindow.h new file mode 100644 index 0000000..eec1be0 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/hexwindow.h @@ -0,0 +1,38 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef HEXWINDOW_H +#define HEXWINDOW_H + +#include <qvbox.h> + +class QString; +class QMultiLineEdit; + +class MHexWindow: public QVBox +{ + + public: + MHexWindow( QWidget * parent = 0, const char * name = "MHexWindow", WFlags f = 0 ); + + void log( QString text ); + + protected: + QMultiLineEdit* ledit; + +}; + +#endif + diff --git a/noncore/net/wellenreiter/gui/logwindow.cpp b/noncore/net/wellenreiter/gui/logwindow.cpp new file mode 100644 index 0000000..dafb429 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/logwindow.cpp @@ -0,0 +1,38 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#include "logwindow.h" +#include <qmultilineedit.h> +#include <qdatetime.h> + +MLogWindow::MLogWindow( QWidget * parent, const char * name, WFlags f ) + :QVBox( parent, name, f ) +{ + ledit = new QMultiLineEdit( this ); + + // FIXME: Set properties( font, read-only, etc...) + +}; + +void MLogWindow::log( QString text ) +{ + QTime time = QTime::currentTime(); + QString line; + line.sprintf( "[%s] %s", (const char*) time.toString(), (const char*) text ); + ledit->append( line ); + +}; + + diff --git a/noncore/net/wellenreiter/gui/logwindow.h b/noncore/net/wellenreiter/gui/logwindow.h new file mode 100644 index 0000000..325f8d0 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/logwindow.h @@ -0,0 +1,38 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef LOGWINDOW_H +#define LOGWINDOW_H + +#include <qvbox.h> + +class QString; +class QMultiLineEdit; + +class MLogWindow: public QVBox +{ + + public: + MLogWindow( QWidget * parent = 0, const char * name = "MLogWindow", WFlags f = 0 ); + + void log( QString text ); + + protected: + QMultiLineEdit* ledit; + +}; + +#endif + diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 11cdaef..e983b4d 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -1,179 +1,188 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ***********************************************************************/ // Qt #include <qpushbutton.h> // Standard #include <unistd.h> #include <sys/types.h> // Local #include "wellenreiter.h" #include "scanlistitem.h" +#include "logwindow.h" +#include "hexwindow.h" #include "../libwellenreiter/source/sock.hh" // <--- ugly path, FIX THIS! #include "../libwellenreiter/source/proto.hh" // <--- ugly path, FIX THIS! #include "../daemon/source/config.hh" // <--- ugly path, FIX THIS! Wellenreiter::Wellenreiter( QWidget* parent, const char* name, WFlags fl ) : WellenreiterBase( parent, name, fl ) { + logwindow->log( "(i) Wellenreiter has been started." ); + connect( button, SIGNAL( clicked() ), this, SLOT( buttonClicked() ) ); netview->setColumnWidthMode( 1, QListView::Manual ); // // setup socket for daemon communication and start poller // daemon_fd = commsock( GUIADDR, GUIPORT ); if ( daemon_fd == -1 ) + { + logwindow->log( "(E) Couldn't get file descriptor for commsocket." ); qDebug( "D'oh! Could not get file descriptor for daemon-->gui communication socket." ); + } else startTimer( 700 ); } Wellenreiter::~Wellenreiter() { // no need to delete child widgets, Qt does it all for us } void Wellenreiter::handleMessage() { // FIXME: receive message and handle it qDebug( "received message from daemon." ); char buffer[128]; int result = recvcomm( &daemon_fd, (char*) &buffer, sizeof(buffer) ); qDebug( "received %d from recvcomm", result ); /* typedef struct { int net_type; 1 = Accesspoint ; 2 = Ad-Hoc int ssid_len; Length of SSID int channel; Channel int wep; 1 = WEP enabled ; 0 = disabled char mac[64]; MAC address of Accesspoint char bssid[128]; BSSID of Accesspoint } wl_network_t; */ - qDebug( "Sniffer sent: '%s'", buffer ); + qDebug( "Sniffer sent: '%s'", (const char*) &buffer ); + hexwindow->log( (const char*) &buffer ); if ( result == NETFOUND ) /* new network found */ { + logwindow->log( "(i) found new network" ); qDebug( "Sniffer said: new network found." ); wl_network_t n; get_network_found( &n, (char*) &buffer ); qDebug( "Sniffer said: net_type is %d.", n.net_type ); qDebug( "Sniffer said: MAC is %s", (const char*) &n.mac ); //n.bssid[n.ssid_len] = "\0"; QString type; if ( n.net_type == 1 ) type = "managed"; else type = "adhoc"; addNewItem( type, n.bssid, QString( (const char*) &n.mac ), n.wep, n.channel, 0 ); } else { qDebug( "unknown sniffer command." ); } } bool Wellenreiter::hasMessage() { // FIXME: do this in libwellenreiter, not here!!! fd_set rfds; FD_ZERO( &rfds ); FD_SET( daemon_fd, &rfds ); struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 10; int result = select( daemon_fd+1, &rfds, NULL, NULL, &tv ); return FD_ISSET( daemon_fd, &rfds ); } void Wellenreiter::timerEvent( QTimerEvent* e ) { qDebug( "checking for message..." ); if ( hasMessage() ) { handleMessage(); } else { qDebug( "no message :(" ); } } void Wellenreiter::addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) { // FIXME: this code belongs in customized QListView, not into this class // search, if we had an item with this essid once before QListViewItem* item = netview->firstChild(); while ( item && ( item->text( 0 ) != essid ) ) { qDebug( "itemtext: %s", (const char*) item->text( 0 ) ); item = item->itemBelow(); } if ( item ) { qDebug( "found!" ); new MScanListItem( item, type, essid, macaddr, wep, channel, signal ); } else { new MScanListItem( netview, type, essid, macaddr, wep, channel, signal ); } } void Wellenreiter::buttonClicked() { // FIXME: communicate with daemon and set button text according to state button->setText( "Stop Scanning" ); // add some icons, so that we can see if this works addNewItem( "managed", "DummyNet", "04:00:20:EF:A6:43", true, 6, 80 ); addNewItem( "adhoc", "DummyNet", "40:03:A3:E7:56:22", false, 11, 30 ); QString command ("98"); diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp index d938561..7849e12 100644 --- a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp @@ -1,126 +1,129 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ***********************************************************************/ #include "wellenreiterbase.h" #include <qheader.h> #include <qlabel.h> #include <qlistview.h> #include <qmultilineedit.h> #include <qpushbutton.h> #include <opie/otabwidget.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> +#include "logwindow.h" +#include "hexwindow.h" + static const char* const image0_data[] = { "150 105 949 2", "g0 c #000000", "g3 c #000008", "g1 c #000400", "i5 c #000408", "g2 c #080000", "hD c #080008", "hB c #080400", "g4 c #080408", "gA c #080808", "gz c #080c08", "kk c #080c10", "ij c #100000", "kQ c #100408", "hA c #100c10", "gB c #101010", "lD c #101410", "ie c #180000", "iC c #180400", "gC c #181418", "lb c #181810", "gy c #181818", "kM c #181c18", "j2 c #182018", "lB c #200000", "jx c #200408", "jv c #201820", "hY c #201c20", "iz c #202020", "ho c #202420", "lR c #290000", "lS c #290008", "mi c #292429", "gx c #292829", "iB c #292c29", "hC c #312c29", "im c #312c31", "hj c #313031", "mR c #313431", "kP c #390000", "ku c #393439", "hi c #393831", "kt c #393839", "kN c #393c39", "ii c #410000", "mE c #413c41", "gw c #414041", "hX c #414441", "lf c #41444a", "kD c #4a0000", "g5 c #4a444a", "iK c #4a484a", "mS c #4a4c4a", "jw c #520008", "hn c #524c4a", "hp c #524c52", "hT c #525052", "lx c #52505a", "hG c #525552", "jh c #5a555a", "iL c #5a595a", "gv c #5a5d5a", "iJ c #620000", "mq c #625d62", "hU c #626162", "l8 c #626562", "ig c #6a0000", "jk c #6a0400", "ik c #6a246a", "hH c #6a286a", "jM c #6a656a", "hm c #6a696a", "mj c #6a6d6a", "i1 c #730008", "kr c #732c73", "mm c #733073", "le c #736d73", "gY c #737173", "mh c #737573", "lA c #7b0000", "i6 c #7b347b", "hE c #7b387b", "lu c #7b6d10", "kh c #7b797b", "kj c #7b7d7b", "lc c #830000", "kW c #830400", "mA c #833c83", "gZ c #834083", "lF c #836900", "bd c #836d00", "fO c #836d08", "lv c #836d10", "c8 c #837100", "cq c #837108", @@ -1029,253 +1032,179 @@ static const char* const image0_data[] = { "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtaRay.nQtQtQtQtQtcYcZc0QtQtQta#.1aT.cQtQtc1as.GQtQt.a#Hb3#5QtaaaTc2QtQtc3bbb5c4Qtc0c5c6.nQtc7c8c9bFQt.taSbbd.QtQtd#b1daQtQtQtQtQtdbdcddQtQtQtQtQtde#0aBQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtdfam.iQtQtQtQtQtdgdh#UQtQtQt#gdidjQtQtQt.xdkbmQt.mdlaTa2QtaF#HcGb#Qtdmbt#HdnQt.gbbdo#eQtaiaJdpQtQtdqaTdr#gQtb7aJds.DQtQtQtQtdtbTduQtQtQtQtQtdvdwdxQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtdyQtQtQtQtQtQtQtQtQtbydz#mQtQtQtQtQt#8dA.NQtQtQtdBaTdCQtQtagaTdD#oQtbBb1#VQt.bb5#H#uQtdEaT#H#kQtcVaTdFQtb9b5aTdG.nQtdHb1dIQtdJdKbddL#sQtQtQtdMb1dN.nQtQtQtQtdObedPQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbSQtQtQtQtQtQtQtQt.nc2dQ#UQtQtQtQt.Daz#y.DQtQtQtdRbt#QQt.DdSaTaFQt.FaTak#UQt##btdTQtdUdk#HdV.iadbbdW.ib7aTa4dXQt#WbTc..aQtdYbbdZ#CQtQtQtd0#Ad1#eQtQtQtQtdtbUd2QtQtQtQtQtQtQtQtQt#eQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.Sd3.3QtQtQtQtQtQt.id4#4d5QtQtQt.ndnbdd6.3QtQt#EaTaqavQt.Sbbd7Qt#5b3aTbOd8aqaTd9.2bcaTc5e.Qte#aX.9Qtdjc5bg.ac#ccaTea#s.n#H#HebQtQtQtecedcqee.iQtQtQtcVcxefQtQtQtQtQtQtQtegeh.pQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQteiejdYQtQtQtQtQtQt.nekbtcjQtQtQt.aelbdem.nQt.menbdeoQt.nbRbt.pQt.Gbt#xQtepbta5QtdUaJ#HeqaIeraTesb7#A#Het.DcnaTeuevQtewaJex.iQtQtcp#AaTey.dQtQtQtezbUeAQtQtQtQtQtQtQta7.BeBQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQteCaUeDQtQtQtQtQtQt.i#8b1eEQtQtQteF#Mbd.j.nQteGb3#H#wa#eHbbeIeJ#laTb3b6bcaTb5eKeLaTc5eies#Hb5aY#SaT#HeMQtcCaT#8QtbKaTaTeN#bQta1awaTeOePQtQtQtaicxdN.iQtQtQtQtQtQtckeQeRQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#CeS##ay.iQtQtQtQt.iekbTeTQtQtQtaIbnaT.4QtQt.9bTdHQteUa4eV.mcN#AaT.6.JaJeVbOeWaJeXeYeZaJbucOe0#A#Hcz#FaJafe1.W#A#HeS#UQt.AcG#He2e3QtQt#Je4bTe5.mQtQtQtQt.ne6e7e8e9QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQta0Qtf.QtQtQtQtQtQtQtQtQtf#fabdfb.bQtQtQtQt.id4cxbP.nQtQteC#H#HaFQt.nbub1eEQt.Gb1bfQtfced.Gfdfec5.8#n#Hc5fffg#Hfhfib5eXbefjca#HfkflcaaTasfmQtfncvaTafebQtQt#ve7fofp#eQtQtQtQtaCd6bdfqePQtQtQtQtQtQtQtQtQt.tQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.d.FfrQt.nQtQtQtQtQtQtQt.Dfsft#AfuQtQtQtQt.iekbT##aMQtQtfvbtbR.aQtbQaT#AfwesaT#hfx.uaT#hfy#AaTfzdFfAfBfCfDfAcdfEafbTfFeYaTaJfGfH#HbxfIQt.dfJ#Ha4fKQtQt.g#HaJfL#U.nQtQtQtfMfNfOfP#gQtQtQtQtQtQtQtQtQta1.a.iQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.L.mfQeLfRQtQtQtQtQtQtQta##ecbb1aGdq#OQtQt.idFb1#HfS.nQtfTaT##.ifUcuaTaPaYfVaT#re.azd1fWfyfXfY.DfZ#ef0.nf1.i#5a6f2#ef3bLexeN#2edcHd..wdKaT#HeO.a#Of4aTf5d1f6a#QtQt#JcCb1f7f8f9QtQtQtQtQtQtQtg.g##i.dgaQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgbaL.Oay.aQtQtQtQtQtQt.afFbTaTgcgdQtQt.neka4aTge.a.ia5aJgfQteB#A#HcedgbUgg.Dev.d.dQtQtQtQtQt.mQt#U.i.k.n#eQt.mQt.dQt.i.aghgi.kgjaTbx#K#e.mgkaTbxazgl.iQt.aameXbtgm.A.iQtQtQtQtQt.i#vbIe2bl.n.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQteFgnc.cvgoQtQtQtQtQtQtQtghgpc8awaNQtQt.id4edaTgq#5czafaTgr.i#xaTc.d.gsQtQtQtQtQtgtgugvgwgxgygzgAgAgAgAgBgCgxgwgvgD.AgEQtQtQtfvcbftgFgGgHaTgIcHgJgKQtfRgLaTedgM#e.nQtQtQtQtQtgNgLbdgOgPQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.i.ighgQafgRgSQtQtQtQtQtgTdZ#HcQdjaMQt.iekaJaTfJcggU#HaJgVgWgX#U.iQtQt.dgYgZgBg0g0g1g0g0g0g2g0g3g0g4g1g0g0g3g0g3g0gCg5g6bFQt#g.D#Ug7bbbx#HfP.mQtg8a4#Hg9h..iQtQtQtQtdvh###brhahb#eQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.qQtc#QtQtQtQtQtQtQtQtQtQtQtQtQthceacqb1aiay#mQtQtQtf1bL#H#HaThd.w.aekc5#Hhee.hfc8hgbjQtQtQthhhig0g0g0g0g0g0g0g0g0g0g0g0g0g0g0hjhkhlhmhnhog4g0g0g0gAhphq.LQtdxcEazhrhscn##c5eXhthuQtQtQtf.dqgVc5bbhvhw.Da#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.m.actaM.AQtQtQtQtQtQtQtQtQtQtQt.m#ecRbUbbhxbKQt.nQt#gelafbxaThxcj#e#Z#AeXeughhy#gQtcDhzhAg0g0hBhCgCg0hDg0g0g0g0g0g0g0g0g0g3g0hE#UQtQtQt.khFhGgyg0g0g0hHhIQt.a.D.AhJbbbx#HcWhKQtQtQtbKhL#HcQfBhMe3QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.aQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#bQteKhNa3hOdM#J#LQtQtQtQtQtQtQtQtQtbZcEcqaT#Hd6fRQthPhQc.gI#Hc5cAhRhSbieA.nQt.dhTg1g0g0gyhUf1hVg0g0g0g0g0g0g0g0g0g0g0g0g0g0g0gyhcQtQtQtQtQt#6hWhXhBg0g0hYhl.LQtcyhZaTh0h1Qth2h3#HaT#Hash4h5h6QtQtQtQtQtQtQtQtQtQtQtc#Qth7baab.i.tQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.aQth8h9i.cGgVbXdYQtQtQtQtQtQtQt.dhQexg9aTg9dja9#e#eekaJi#aJafiaibQt#gicg0g0g0hYidQtQt#Ug1g1g0g0g0g3ieifigihiiijg0g3g0g2g0ik#eQtQtQtQtQtQtQt#Cilg0g0g0iminQt#giofZc7e#bt#H#A#Hiphw.a.nQtQtQtQtQtQtQt.nQtdYbX#9diekcoe9Qt.nQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbG.acliqd1af##irisit#mQtQtQtQt.nbliuaTc5aTcviviwcdaTd1ix#6QtiygCg0g0iziA#6QtQtQtiBg0g0g0g0iCiDiEiFiEiGiHiIiJg0g3g0g0g0gvQtQtQtQtQtQtQtQtQt.diKg0g0g1iLQtQtQtdgb1#HgIfBgOgPQtQtQtQtQt.nQtiMiNiOiPe7cHiQiRfY.i.2QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.m.acliSf7iTaTiUiVb7iWQtQtQt.AiXfLaJeXaJi#iYeb.D.niZiBg1g0gyidQtQtQtQtQti0g0g0g1g0i1iHi2iFiEiHiEi3iEiHi4g2i5g0g0g1.dQtQtQtQtQtQtQtQtQtQtgPi6g0g3gyi7QtQti8e2i9f6.dQtQtQtj.j#dUjajb#AbbjciQjdf2.a.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtjeQtc#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtd8.Dfmiqhvc8bbfojfdzgN.cb##Udac9aTdsjgQth6hmg1g0g1jhaVQtQtQtQtQt.Lgxg0g0g0g2jiiEjjiHjjiEjjiHjjiHiGjkg0g3g0g0hmQtQtQtQtQtQtQtQtQtQtQt.#jlgzg0g0iKePQtjm.aaCjnjojpe4b5aTfoaTaTf7gOjq.dgEQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#OQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#UaM#F.fjrj#js#O#gQt.iQtQtQtQtQtQtQtQtQtQtQt.D.mjgjtc.g9aTbT#Hhxai.ufKjuaIQthIjvg0g1iz.dQtQtQtQtQtQtQt.dg0g1g0g2jwiEi3iEiEiHjjiEiHiEiFiEiHjxg0g0g0hj.nQtQtQtQtQtQtQtQtQtQtQtQt.ahXg3g0hAgY.nQt.cbgbTaTbxeXg9jyhMjq#e.dQtQtQtQtQtQtQtQtQtQtQt.aQtjzjncPaFam.n.aQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQta#Qtb#.djAjBjCjDjEfVaijFjGiNecitb9Qta0Qt.nQtQtQthP.addiRfLaf#Hc5fOiwhsjHhog0g0g0g0gBgDQtQtQtQtQtQtQtjIg0g0g0g0i3i3iEjJiHjjiEjKiEjjiHjjiHiJg0g0g0gzQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtjLizg0g2gzjMjN#gfFjOdsgOjP.djQQtQtQtQtQt.tQtjR.ia7iNdbjS#taUekjTjUagbjQt#bQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.aQtbF#UjVeyeOjWbdbTaTaJi#iUcCjXcVc7ec#J#gQt#U#ejYjZfIj0.ij1g0i5g0g3g0g3g0g0j2#UQtQtQtQtQtg6g0g0g0ijj3iEj4iEiFiEiHiEjJiEiHiEiHj5g0g0g0g4fxQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.ij6g0i5g0gBbjQtj7.d#eQt.iQte6jncjamj8dQj9bxaTbUfOk.k#kaev.a.dQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgaQteP#gf2kbkckdfBaTbbcxbb#H#Hke##gLgrkfdFkg.LQtkhg0g0g0g0g0g0g0g0g0g4ki.#QtQtQtkjg0g0g0g2iHi3iEjjiEjKiEjjiHjjiHjjiHiDg0g0g0g0#gQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQthhgAg0g0kk.DQtQtklkmgVccjfb5#Hb1bdaTcqkne5kof2#ghsQta#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.iQtkp#efYgifKkqdsg9aTaJ#HaJ#H#Ai#c7.n.ahGhAg0g0g0g3g0g0g0g3g0krfxQtQtj1g0g0g0g2ksiEi3iEiHiEjKiEiHiEjKiEj4j3g0g0g0g4bFQtQtQtQtQtQtQtQtQtQtQtQtQtQt.Dktg0g0gAkug6.ditcCdkaTaJaTbtc8ipkvkwebiZcDQt.aQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQta#Qths.dkxdLkyhgdsazaTedbdkzkAQtkBhXg0g0g0g0g0g0g0g0g0gAkjQtjNg0g0g0g0kCi4iHjjiEjjiHjjiEjjiHiFiHkDg0g0g0gBQtQtQtQtQtQtQtQtQtQtQtQtQtQtkEkkg0g0gxkF.n.wg#aTaTaTkGd1gMeAkHin.igEQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQt#g.mkIkJgXkKfLce.DQt.dkLkMhDg0g3g0g4g0g0g0g0kNkOgzg0g0g1kPiEiHiEjKiEiHiEi3iEiEiEiIkQg0g0g0gZQtQtQtQtQtQtQtQtQtQtQtQt.dkRg0g0gAkSkTQtjzkUfBkqkykVgt.D#gQt.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQt.nQt.nQt.qQt.3Qtbj#edP.a.3Qt.n.diKg0g0g0g0g3g0g0g0g0gAg1g0g0g0g0kWiHjKiEjKiEjKiHiFkXiFiig0g0g0g0kFQtQtQtQtQtQtQtQtQtQtQtgPhYg0g0izhlkYQt#mkZhK#UbjQt#sQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQt.mQt#g.nbX#Jcpk0fR#vk1j#k2gdk3j.k4jzk5dvbKcpk6gSdUbScVk7g8k8j8k9ezjXl.jal#g7aikUcCdQe0ladjfJjb#hcVQtQtQtkFlbg0g1g0g0g0g0g0g0g0g0g0g2g0ijlciEj4iEi3iEiHiEjKldg0g0g0g0gyQtQtQtQtQtQtQtQtQtQtQtlegAg0g1lf#g.nQt#UlgcA#yezlhj8k7eDlicVgSk6cpbKdYfuc7jogdljj#lklllmjnh2itdv.ij.Qt.dQt.mQtQtQtQtQtQt", "QtQtQtQtQtQt#OQt.w.iln.slodne.b8lplqcRlrlsh0jyjyf7ltlulvfOlwbdbdbdcxbdbbbdb1bdaTbbb1aTaTaTc5#Hc5eXgI#HgI#HgIfeaT.O.aQtQteRlxg0g0g0g0g0g0g0g0g0g0g0g0g0g0kPlylziEjjiElAlBg0g2g0g0g0lCQtQtQtQtQtQtQtQtQthWhYg0g0lDkhQt.tk0ezb5aTgIeXc5#Hc5aTb1aTaTbdcxbdlElFcxbdbdlFlwfOlGf7kdh4lHkylqfvkg.C.saO.n#mQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQt.nQt.iQt.aQt.mQt.dQt#g.n.A.abF.Dfx#efZiZlIhQf2kJd2gilJlKlLlMfKlNdNe8eOlOfplPdsiphvgQftfAaflQaT.j.iQt.DkOimg1g0g0g0g0g0g0g0g0g0g0g0g0g0ielRlSijg0g0g3g0hDg0kSQtQtQtQtQtQtQtQtgthEg0g0g0lTlUQtlVdQaTbT#Hg9cHgQhvlWlXlYexlZdNjdfKl0dul1d2eel2l3fZ#gfx.mbj.n#gQt.DQt.aQt.iQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQtQtQta#Qt#oQt#6QtfUQtf#.il4.mkT.deR#Ul5d.l2h5jYl6jAQtQtQt.n.igYgyg0g0g0g0g0g0g0g3g0g0g0g0g0g0g0g0g0g0g0g0g0iL.tQtQtQtQtQt#Nl7iKg0g0g0g1l8#NQtaWl9dam.m#mambf6bZ#gcU.dmc.ifUQtfUQtbGQtQtQt.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgtQtQtQt.il3bjQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.nQtQtQtQtQtQtQte9mdkMg0g0g0g0g0g0g0g0g0g0g0g0g0g0g1g0g0g0gymemfhIj1leilizgAg0g0g0g0gAmg.dQtQtQt.aQt.iQtQtQtQtQtQtQtQtQt.ml3.AQtQtQt.Al3.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtgtg0gYQtQt.Dg0hT.nQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.t.dmhmig0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g1g0g0gAkF.#QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtl3g0hUQtQtQtmjg0mkQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtl3g0mlQtQtf1g0hXQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbji7hTizg0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g4g0g0lDmmlDg0gyi7.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbFmnhIQtQtQthmg0jLQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtgPiLf1Qt#NgvjNQtavhUjLQtQtQtQtl7l8gvhTmoQtQtlUg0l8QtQt.dg0g5.LQtQtQtmpjMiLjhhhQtQt.ahUmqiLmqkhQtQtQtQtQtQtQtmri0ms.a.nQtQtQtQtQtQtQtcDmthmhXizgAg0g0g0g0g0g0g0g0g0g0g0hAgxiLkhiLlDg0gxhq.tQt.tmugvmql8#eQtQtQtQtlUjMiLjhhhQtQt.ahpkEQtQtkFizg0kugv.mQtQt.LmogvgvhG.AQtQtgtiLgvhUhIQtQtQtQtQtQtQt", "QtQtQtQtQtQtj1g0mvQtl3g0kSQt.mg0mw.nQtQtmxg0gAlDgBmqQtQthqg0mlQtQtfxg0hXQtQtQthmg0gAgygBmn.iQtmyg0g4gChAg0hjQtQtQt.nmzgzg0g0g0g0mAe9QtQtQtQtQtQtQtQtQt.d.mgtkOgDmBjMkSgvkSjMmBgDmCj7QtmDgZg0g0mE#eQtQtQtQtmig0gzg4gB.mQtQtmhg0g4gyhAmn.aQtjNg0gvQt.nmFg0g4gzgyjNQt.amGg0hAgCgChhQtQtmgg0gAg4g1khQtQtQtQtQtQt", "QtQtQtQtQtQtkFg0kFQtlUg0iLQtcDg0iKQtQt.Dg0gxmp.dhc.n.nQtlUg0l8QtQt.dg0iK.LQthcg0homkhc.daVQtQtmkg0iKhc#ekNg0lUQtQtmHg0g0g0kMhGkhgvgweRQtQtQtQtQtQtQtQtQtQtQtQtQt.LQt.#Qt.#Qt.tQtQtQtkhhAg0g4iL.mQtQtQtQtarizlDl7iLg0msQtbFg1izmIhc.d#NQtQtl7g0iLQtQtavhTg0mJcDQtQthlg0iKgt.dhcQtQtQtgYg0mhmKg0gw.LQtQtQtQtQt", "QtQtQtQtQtQtg6g0j1Qtl3g0mLQt.mg0mM.iQtkFg0gylTiKgwi0QtQthqg0mlQtQtf1g0hXQtQthFg0kMgwmGgwmNQtQtmpg0gvQtQtmBg0mCQt.ngzg0g0ktl5Qt.nQtf1mx.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.mmvkMg0g0lDkhQtQtQtQtQtQtQthYiz.dl3gxmfQtkOg0gygwmGgwmNQtQtjNg0iLQtQtQthmg0jLQtQtQthGg0mimGg5lTlUQtQtmxg0mC.mgZiLQtQtQtQtQtQt", "QtQtQtQtQtQtkFg0kFQtgtg0gvQtcDg0iKQtQtjlg0gChohogyhm.LQtlUg0l8QtQt.dg0iK.tQtgDg0lDgxizkMgvQtQtmkg0iLQtQtgYg0jLQtlUg0g0gAjNQtQtQtQtQtmr#gQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtjLizg0g0g0gxmOQtQtQtQtQtQtQt#6izkMQt.t.n#6QtkFg0gBmiizgygvQtQtl7g0iLQtQtQtjMg0kEQtQt.niKg0hYhohokMhlQtQtmhg0msQtmPQt.nQtQtQtQtQt", "QtQtQtQtQtQthFg0mgQtl3g0kSQt.mg0mw.iQtmrg4ku.D.A.i.dQtQthqg0mlQtQtfxg0hXQtQtmQg0hEe9.n#NQtQtQtmpg4iLQtQtmBg0kOQtl3g0g0hY.nQtQtQtQtQtQt.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.mi7iBg0g0g0g0ilf1QtQtQtQtQtQtQtQtQthYiz#gQtQtQtQtl7g0kuf1.n.AQtQtQtjNg0iLQtQtQtjMg0hhQtQtQthmg0gv.i.A.n.DQtQtmxg0kOQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtf1hAgAgwiBg0gCg5mRg0iKQtQtQtkNg0iBmSgwlCQtQtjNg0l8QtQt#eg0hX.LQtavktg0hjiKgwmuQtQtmIg0iLQtQtmjg0msQtmThAg0gBbjQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtkhizg0g0g0g0gygucFQtQtQtQtQtQtQtQtQtarhYkMQtQtQtQtQtargwg0imiKhXkjQtQtl7g0iLQtQtQtidg0gCgw.dQt.dkMg1ktiKgwhqQtQtmhg0hIQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtmekuizikimgxizikhomB.nQtQt.mhGhHizgyl8QtQt#eiBg6QtQtbjmmhmQtQtQte9mUgxizgykS.aQtmVgxkhQtQthFhohqQtQtgvg4g0mvQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQte9mBgyg0g0g0g0g4gwl3.aQtQtQtQtQtQtQtQtQtQtQthTmw#eQtQtQtQtQtmTmLmiizgykS.aQteRkrkhQtQtQt#ekShoiklUQtQtl3gwmiizhYhIQtQti7mihqQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtbD.nbj.ibj.ibj.iavQtQtQtQtQtaV.ibjQt.nQt.tQtavQtQtQtcFQt.nQtQtQt.L.n#N.ibDQtQtQtaVQtQtQt.LQt.#QtQt.niBg0lD#gQtQtQtQtQtQtQtQtQtQtQtQtQtQt#NmWktg1g0g0g0g0g0hogD.nQtQtQtQtQtQtQtQtQtQtQtQt.nQtcFQtQtQtQtQtQtQt.LQt#N.ibDQtQtQtcFQtQtQtQtQt.L.n#NQtQtQtQtQt#N.i#NQtQtQt.LQt.#QtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#UkMg0lDmX.aQtQtQtQtQtQtQtQtQtj7g6kNgAg0g1g0g0g0g0gChze9QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQthqgyg0g0hohmhWgt#UlUiAgYgwlDg0g0g0g0g0g0g0g0hAhTl3#6QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt#Uktg0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g0g4gymnmpQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtkjmig0g0g0g0g0g0g0g0g0g0g0g0gzkNmh#g#6QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtcDg6hXmigBg4g1g4gAgCgxlTgYl7.AQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtbFmYmphWmOl7in.mavQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; /* * Constructs a WellenreiterBase which is a child of 'parent', with the * name 'name' and widget flags set to 'f' */ WellenreiterBase::WellenreiterBase( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QPixmap image0( ( const char** ) image0_data ); if ( !name ) setName( "WellenreiterBase" ); resize( 191, 294 ); setCaption( tr( "Wellenreiter" ) ); WellenreiterBaseLayout = new QVBoxLayout( this ); WellenreiterBaseLayout->setSpacing( 2 ); WellenreiterBaseLayout->setMargin( 0 ); TabWidget = new OTabWidget( this, "TabWidget", OTabWidget::Global ); ap = new QWidget( TabWidget, "ap" ); apLayout = new QVBoxLayout( ap ); apLayout->setSpacing( 2 ); apLayout->setMargin( 2 ); netview = new QListView( ap, "netview" ); netview->addColumn( tr( "SSID" ) ); netview->addColumn( tr( "Sig" ) ); netview->addColumn( tr( "AP" ) ); netview->addColumn( tr( "Chn" ) ); netview->addColumn( tr( "W" ) ); netview->addColumn( tr( "T" ) ); netview->setFrameShape( QListView::StyledPanel ); netview->setFrameShadow( QListView::Sunken ); netview->setRootIsDecorated( TRUE ); apLayout->addWidget( netview ); TabWidget->addTab( ap, "wellenreiter/networks", tr( "Networks" ) ); - Log = new QWidget( TabWidget, "Log" ); - LogLayout = new QVBoxLayout( Log ); - LogLayout->setSpacing( 2 ); - LogLayout->setMargin( 2 ); - - Log_2 = new QMultiLineEdit( Log, "Log_2" ); - Log_2->setText( tr( "11/18 18:15 - log started\n" -"11/19 20:13 - new net : \"ELAN\"\n" -"11/19 20:15 - new station : \"pegasus\"" ) ); - LogLayout->addWidget( Log_2 ); - TabWidget->addTab( Log, "wellenreiter/log", tr( "Log" ) ); - - tab = new QWidget( TabWidget, "tab" ); - tabLayout = new QGridLayout( tab ); - tabLayout->setSpacing( 2 ); - tabLayout->setMargin( 2 ); - - Log_2_2 = new QMultiLineEdit( tab, "Log_2_2" ); - QPalette pal; - QColorGroup cg; - cg.setColor( QColorGroup::Foreground, white ); - cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) ); - cg.setColor( QColorGroup::Light, white ); - cg.setColor( QColorGroup::Midlight, QColor( 223, 223, 223) ); - cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) ); - cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) ); - cg.setColor( QColorGroup::Text, white ); - cg.setColor( QColorGroup::BrightText, white ); - cg.setColor( QColorGroup::ButtonText, white ); - cg.setColor( QColorGroup::Base, black ); - cg.setColor( QColorGroup::Background, black ); - cg.setColor( QColorGroup::Shadow, black ); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, white ); - pal.setActive( cg ); - cg.setColor( QColorGroup::Foreground, white ); - cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) ); - cg.setColor( QColorGroup::Light, white ); - cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) ); - cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) ); - cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) ); - cg.setColor( QColorGroup::Text, white ); - cg.setColor( QColorGroup::BrightText, white ); - cg.setColor( QColorGroup::ButtonText, white ); - cg.setColor( QColorGroup::Base, black ); - cg.setColor( QColorGroup::Background, black ); - cg.setColor( QColorGroup::Shadow, black ); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, white ); - pal.setInactive( cg ); - cg.setColor( QColorGroup::Foreground, QColor( 128, 128, 128) ); - cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) ); - cg.setColor( QColorGroup::Light, white ); - cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) ); - cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) ); - cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) ); - cg.setColor( QColorGroup::Text, QColor( 128, 128, 128) ); - cg.setColor( QColorGroup::BrightText, white ); - cg.setColor( QColorGroup::ButtonText, QColor( 128, 128, 128) ); - cg.setColor( QColorGroup::Base, black ); - cg.setColor( QColorGroup::Background, black ); - cg.setColor( QColorGroup::Shadow, black ); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, white ); - pal.setDisabled( cg ); - Log_2_2->setPalette( pal ); - QFont Log_2_2_font( Log_2_2->font() ); - Log_2_2_font.setFamily( "adobe-courier" ); - Log_2_2_font.setPointSize( 8 ); - Log_2_2->setFont( Log_2_2_font ); - Log_2_2->setText( tr( "00 0a 20 00 a8 00 e2 00 ...ESD..\n" -"00 0a 20 00 a8 00 e2 00 .*&23...\n" -"00 0a 20 00 a8 00 e2 00 ........\n" -"00 0a 20 00 a8 00 e2 00 ........\n" -"00 0a 20 00 a8 00 e2 00 ........\n" -"00 0a 20 00 a8 00 e2 00 ...BRA22" ) ); + logwindow = new MLogWindow( TabWidget, "Log" ); + TabWidget->addTab( logwindow, "wellenreiter/log", tr( "Log" ) ); - tabLayout->addWidget( Log_2_2, 0, 0 ); - TabWidget->addTab( tab, "wellenreiter/hex", tr( "Hex" ) ); + hexwindow = new MHexWindow( TabWidget, "tab" ); + TabWidget->addTab( hexwindow, "wellenreiter/hex", tr( "Hex" ) ); about = new QWidget( TabWidget, "about" ); aboutLayout = new QGridLayout( about ); aboutLayout->setSpacing( 6 ); aboutLayout->setMargin( 11 ); PixmapLabel1_3_2 = new QLabel( about, "PixmapLabel1_3_2" ); PixmapLabel1_3_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, PixmapLabel1_3_2->sizePolicy().hasHeightForWidth() ) ); PixmapLabel1_3_2->setFrameShape( QLabel::Panel ); PixmapLabel1_3_2->setFrameShadow( QLabel::Sunken ); PixmapLabel1_3_2->setLineWidth( 2 ); PixmapLabel1_3_2->setMargin( 0 ); PixmapLabel1_3_2->setMidLineWidth( 0 ); PixmapLabel1_3_2->setPixmap( image0 ); PixmapLabel1_3_2->setScaledContents( TRUE ); PixmapLabel1_3_2->setAlignment( int( QLabel::AlignCenter ) ); aboutLayout->addWidget( PixmapLabel1_3_2, 0, 0 ); TextLabel1_4_2 = new QLabel( about, "TextLabel1_4_2" ); QFont TextLabel1_4_2_font( TextLabel1_4_2->font() ); TextLabel1_4_2_font.setFamily( "adobe-helvetica" ); TextLabel1_4_2_font.setPointSize( 10 ); TextLabel1_4_2->setFont( TextLabel1_4_2_font ); TextLabel1_4_2->setText( tr( "<p align=center>\n" "<hr>\n" "Max Moser<br>\n" "Martin J. Muench<br>\n" "Michael Lauer<br><hr>\n" "<b>www.remote-exploit.org</b>\n" "</p>" ) ); TextLabel1_4_2->setAlignment( int( QLabel::AlignCenter ) ); aboutLayout->addWidget( TextLabel1_4_2, 1, 0 ); TabWidget->addTab( about, "wellenreiter/about", tr( "About" ) ); WellenreiterBaseLayout->addWidget( TabWidget ); button = new QPushButton( this, "button" ); button->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, button->sizePolicy().hasHeightForWidth() ) ); button->setText( tr( "Start Scanning" ) ); WellenreiterBaseLayout->addWidget( button ); // tab order setTabOrder( button, netview ); setTabOrder( netview, TabWidget ); TabWidget->setCurrentTab( tr( "Networks" ) ); } /* * Destroys the object and frees any allocated resources */ WellenreiterBase::~WellenreiterBase() { // no need to delete child widgets, Qt does it all for us } /* * Main event handler. Reimplemented to handle application * font changes */ bool WellenreiterBase::event( QEvent* ev ) { bool ret = QWidget::event( ev ); if ( ev->type() == QEvent::ApplicationFontChange ) { - QFont Log_2_font( Log_2->font() ); - Log_2_font.setFamily( "adobe-courier" ); - Log_2_font.setPointSize( 8 ); - Log_2->setFont( Log_2_font ); + //QFont Log_2_font( Log_2->font() ); + //Log_2_font.setFamily( "adobe-courier" ); + //Log_2_font.setPointSize( 8 ); + //Log_2->setFont( Log_2_font ); QFont TextLabel1_4_2_font( TextLabel1_4_2->font() ); TextLabel1_4_2_font.setFamily( "adobe-helvetica" ); TextLabel1_4_2_font.setPointSize( 10 ); TextLabel1_4_2->setFont( TextLabel1_4_2_font ); } return ret; } diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.h b/noncore/net/wellenreiter/gui/wellenreiterbase.h index b133d28..b7bd820 100644 --- a/noncore/net/wellenreiter/gui/wellenreiterbase.h +++ b/noncore/net/wellenreiter/gui/wellenreiterbase.h @@ -1,60 +1,57 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #ifndef WELLENREITERBASE_H #define WELLENREITERBASE_H #include <qvariant.h> #include <qwidget.h> class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QLabel; class QListView; class QListViewItem; -class QMultiLineEdit; class QPushButton; class OTabWidget; +class MLogWindow; +class MHexWindow; class WellenreiterBase : public QWidget { Q_OBJECT public: WellenreiterBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~WellenreiterBase(); OTabWidget* TabWidget; QWidget* ap; QListView* netview; - QWidget* Log; - QMultiLineEdit* Log_2; - QWidget* tab; - QMultiLineEdit* Log_2_2; + MLogWindow* logwindow; + MHexWindow* hexwindow; QWidget* about; QLabel* PixmapLabel1_3_2; QLabel* TextLabel1_4_2; QPushButton* button; protected: QVBoxLayout* WellenreiterBaseLayout; QVBoxLayout* apLayout; - QVBoxLayout* LogLayout; - QGridLayout* tabLayout; QGridLayout* aboutLayout; bool event( QEvent* ); }; #endif // WELLENREITERBASE_H |