diff --git a/Makefile.am b/Makefile.am
index b911f57b..c99f5680 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,10 +1,8 @@
-####### kdevelop will overwrite this part!!! (begin)##########
-SUBDIRS = krfb po doc lib include
+SUBDIRS = krfb po doc include
-EXTRA_DIST = krfb.kdevprj admin AUTHORS COPYING ChangeLog INSTALL README TODO krfb.lsm
+EXTRA_DIST = admin AUTHORS COPYING ChangeLog INSTALL README TODO krfb.lsm
-####### kdevelop will overwrite this part!!! (end)############
# not a GNU package. You can remove this line, if
# have all needed files, that a GNU package needs
AUTOMAKE_OPTIONS = foreign
diff --git a/configure.in.in b/configure.in.in
index 257cf7be..9a598b18 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -2,3 +2,6 @@
AM_INIT_AUTOMAKE(krfb,0.1)
+AC_CHECK_HEADER(X11/extensions/XTest.h,
+ [],
+ AC_MSG_ERROR([XTest extension header not found]))
diff --git a/krfb.kdevprj b/krfb.kdevprj
deleted file mode 100644
index 5043766b..00000000
--- a/krfb.kdevprj
+++ /dev/null
@@ -1,321 +0,0 @@
-[AUTHORS]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[COPYING]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[ChangeLog]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[Config for BinMakefileAm]
-bin_program=krfb
-cxxflags=-O0 -g3 -Wall
-ldadd=\s$(LIB_QT) $(LIB_KDECORE) $(LIB_KDEUI)\s
-ldflags=\s
-
-[General]
-AMChanged=true
-author=Tim Jansen
-configure_args=
-email=tim@tjansen.de
-kdevprj_version=1.3
-lfv_open_groups=
-makefiles=Makefile.am,krfb/Makefile.am,doc/Makefile.am,doc/en/Makefile.am,po/Makefile.am,lib/Makefile.am,include/Makefile.am
-project_name=Krfb
-project_type=mini_kde2
-sgml_file=/home/tim/work/krfb/doc/en/index.docbook
-sub_dir=krfb/
-version=0.1
-version_control=CVS
-workspace=1
-
-[INSTALL]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[LFV Groups]
-GNU=AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,NEWS
-Headers=*.h,*.hh,*.hxx,*.hpp,*.H
-Others=*
-Sources=*.cpp,*.c,*.cc,*.C,*.cxx,*.ec,*.ecpp,*.lxx,*.l++,*.ll,*.l
-Translations=*.po
-User Interface=*.kdevdlg,*.ui,*.rc
-groups=Headers,Sources,User Interface,Translations,GNU,Others
-
-[Makefile.am]
-files=krfb.kdevprj,admin,AUTHORS,COPYING,ChangeLog,INSTALL,README,TODO,krfb.lsm
-sub_dirs=krfb,po,doc,lib,include
-type=normal
-
-[README]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[TODO]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[admin]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[doc/Makefile.am]
-sub_dirs=en
-type=normal
-
-[doc/en/Makefile.am]
-files=doc/en/index.docbook
-sub_dirs=
-type=normal
-
-[doc/en/index.docbook]
-dist=true
-install=false
-install_location=$$(kde_icondir)/locolor/16x16/apps/krfb.png
-type=DATA
-
-[include/Connection.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/Framebuffer.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/Makefile.am]
-files=include/Connection.h,include/d3des.h,include/Framebuffer.h,include/PixelFormatFramebuffer.h,include/rfb.h,include/rfbClient.h,include/rfbServer.h,include/ScaleFramebuffer.h,include/version.h,include/ZlibConnection.h
-
-[include/PixelFormatFramebuffer.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/ScaleFramebuffer.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/ZlibConnection.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/d3des.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/rfb.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/rfbClient.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/rfbServer.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[include/version.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[krfb.kdevprj]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[krfb.lsm]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[krfb/Makefile.am]
-files=krfb/main.cpp,krfb/krfb.desktop,krfb/lo32-app-krfb.png,krfb/lo16-app-krfb.png,krfb/rfbserver.cpp,krfb/rfbserver.h,krfb/eyes-closed24.png,krfb/eyes-open24.png,krfb/XUpdateScanner.cc,krfb/XUpdateScanner.h
-sub_dirs=
-type=prog_main
-
-[krfb/XUpdateScanner.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[krfb/XUpdateScanner.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[krfb/eyes-closed24.png]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[krfb/eyes-open24.png]
-dist=true
-install=false
-install_location=
-type=DATA
-
-[krfb/krfb.desktop]
-dist=true
-install=true
-install_location=$$(kde_appsdir)/Applications/krfb.desktop
-type=DATA
-
-[krfb/lo16-app-krfb.png]
-dist=true
-install=true
-install_location=$$(kde_icondir)/locolor/16x16/apps/krfb.png
-type=DATA
-
-[krfb/lo32-app-krfb.png]
-dist=true
-install=true
-install_location=$$(kde_icondir)/locolor/32x32/apps/krfb.png
-type=DATA
-
-[krfb/main.cpp]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[krfb/rfbserver.cpp]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[krfb/rfbserver.h]
-dist=true
-install=false
-install_location=
-type=HEADER
-
-[lib/Connection.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/Framebuffer.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/Makefile.am]
-files=lib/computeSubrectDimensions.cc,lib/Connection.cc,lib/d3des.cc,lib/encodeRectangleCoRRE.cc,lib/encodeRectangleHextile.cc,lib/encodeRectangleRRE.cc,lib/Framebuffer.cc,lib/PixelFormatFramebuffer.cc,lib/rfb.cc,lib/rfbClient.cc,lib/rfbServer.cc,lib/ScaleFramebuffer.cc,lib/ZlibConnection.cc
-sharedlib_LDFLAGS=-version-info 0:0:1
-sharedlib_rootname=lib
-sub_dirs=
-type=static_library
-
-[lib/PixelFormatFramebuffer.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/ScaleFramebuffer.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/ZlibConnection.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/computeSubrectDimensions.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/d3des.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/encodeRectangleCoRRE.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/encodeRectangleHextile.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/encodeRectangleRRE.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/rfb.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/rfbClient.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[lib/rfbServer.cc]
-dist=true
-install=false
-install_location=
-type=SOURCE
-
-[po/Makefile.am]
-sub_dirs=
-type=po
diff --git a/krfb/Makefile.am b/krfb/Makefile.am
index c0b26862..8bff36b5 100644
--- a/krfb/Makefile.am
+++ b/krfb/Makefile.am
@@ -1,32 +1,30 @@
-####### kdevelop will overwrite this part!!! (begin)##########
bin_PROGRAMS = krfb
-krfb_SOURCES = XUpdateScanner.cc rfbserver.cpp main.cpp
+krfb_SOURCES = trayicon.cpp XUpdateScanner.cc rfbserver.cpp main.cpp configurationdialog.ui newconnectiondialog.ui configuration.cpp
krfb_LDADD = ./lib/liblib.a $(LIB_QT) $(LIB_KDECORE) $(LIB_KDEUI) $(LIBSOCKET)
SUBDIRS = lib
-EXTRA_DIST = main.cpp krfb.desktop lo32-app-krfb.png lo16-app-krfb.png rfbserver.cpp rfbserver.h eyes-closed24.png eyes-open24.png XUpdateScanner.cc XUpdateScanner.h
+EXTRA_DIST = main.cpp krfb.desktop lo32-app-krfb.png lo16-app-krfb.png rfbserver.cpp rfbserver.h eyes-closed24.png eyes-open24.png XUpdateScanner.cc XUpdateScanner.h trayicon.cpp trayicon.h
install-data-local:
- $(mkinstalldirs) $$(kde_appsdir)/Applications/
- $(INSTALL_DATA) $(srcdir)/krfb.desktop $$(kde_appsdir)/Applications/krfb.desktop
- $(mkinstalldirs) $$(kde_icondir)/locolor/32x32/apps/
- $(INSTALL_DATA) $(srcdir)/lo32-app-krfb.png $$(kde_icondir)/locolor/32x32/apps/krfb.png
- $(mkinstalldirs) $$(kde_icondir)/locolor/16x16/apps/
- $(INSTALL_DATA) $(srcdir)/lo16-app-krfb.png $$(kde_icondir)/locolor/16x16/apps/krfb.png
- $(mkinstalldirs) $$(kde_icondir)/hicolor/22x22/apps/
- $(INSTALL_DATA) $(srcdir)/eyes-closed24.png $$(kde_icondir)/hicolor/22x22/apps/krfb.png
- $(mkinstalldirs) $$(kde_icondir)/hicolor/22x22/apps/
- $(INSTALL_DATA) $(srcdir)/eyes-open24.png $$(kde_icondir)/hicolor/22x22/apps/krfb.png
+ $(mkinstalldirs) $(kde_appsdir)/Applications/
+ $(INSTALL_DATA) $(srcdir)/krfb.desktop $(kde_appsdir)/Applications/krfb.desktop
+ $(mkinstalldirs) $(kde_icondir)/locolor/32x32/apps/
+ $(INSTALL_DATA) $(srcdir)/lo32-app-krfb.png $(kde_icondir)/locolor/32x32/apps/krfb.png
+ $(mkinstalldirs) $(kde_icondir)/locolor/16x16/apps/
+ $(INSTALL_DATA) $(srcdir)/lo16-app-krfb.png $(kde_icondir)/locolor/16x16/apps/krfb.png
+ $(mkinstalldirs) $(kde_datadir)/krfb/pics
+ $(INSTALL_DATA) $(srcdir)/eyes-closed24.png $(kde_datadir)/krfb/pics/eyes-closed24.png
+ $(mkinstalldirs) $(kde_datadir)/krfb/pics
+ $(INSTALL_DATA) $(srcdir)/eyes-open24.png $(kde_datadir)/krfb/pics/eyes-open24.png
uninstall-local:
- -rm -f $$(kde_appsdir)/Applications/krfb.desktop
- -rm -f $$(kde_icondir)/locolor/32x32/apps/krfb.png
- -rm -f $$(kde_icondir)/locolor/16x16/apps/krfb.png
- -rm -f $$(kde_icondir)/hicolor/22x22/apps/krfb.png
- -rm -f $$(kde_icondir)/hicolor/22x22/apps/krfb.png
+ -rm -f $(kde_appsdir)/Applications/krfb.desktop
+ -rm -f $(kde_icondir)/locolor/32x32/apps/krfb.png
+ -rm -f $(kde_icondir)/locolor/16x16/apps/krfb.png
+ -rm -f $(kde_datadir)/krfb/pics
+ -rm -f $(kde_datadir)/krfb/pics
-####### kdevelop will overwrite this part!!! (end)############
# this 10 paths are KDE specific. Use them:
# kde_htmldir Where your docs should go to. (contains lang subdirs)
# kde_appsdir Where your application file (.kdelnk) should go to.
diff --git a/krfb/configuration.cpp b/krfb/configuration.cpp
new file mode 100644
index 00000000..0cdeb6bf
--- /dev/null
+++ b/krfb/configuration.cpp
@@ -0,0 +1,60 @@
+/***************************************************************************
+ configuration.cpp
+ -------------------
+ begin : Tue Dec 11 2001
+ copyright : (C) 2001 by Tim Jansen
+ email : tim@tjansen.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "configuration.h"
+
+Configuration::Configuration(KConfig *config) :
+ config(config)
+{
+ askOnConnect = config->readBoolEntry("askOnConnect", true);
+ allowDesktopControl = config->readBoolEntry("allowDesktopControl",
+ false);
+ showMousePointer = config->readBoolEntry("showMousePointer",
+ true);
+ passwordString = config->readEntry("password", "");
+ portNumber = config->readNumEntry("port", 0);
+}
+
+Configuration::~Configuration() {
+}
+
+bool Configuration::askOnConnect() {
+ return askOnConnectFlag;
+}
+
+bool Configuration::allowDesktopControl() {
+ return allowDesktopControlFlag;
+}
+
+bool Configuration::showMousePointer() {
+ return showMousePointerFlag;
+}
+
+QString Configuration::password() {
+ return passwordString;
+}
+
+int Configuration::port() {
+ return portNumber;
+}
+
+void Configuration::showDialog() {
+ confDlg.show();
+}
+
+
+#endif
diff --git a/krfb/configurationdialog.ui b/krfb/configurationdialog.ui
new file mode 100644
index 00000000..4442b908
--- /dev/null
+++ b/krfb/configurationdialog.ui
@@ -0,0 +1,379 @@
+
+ConfigurationDialog
+
+ QDialog
+
+ name
+ ConfigurationDialog
+
+
+ geometry
+
+ 0
+ 0
+ 390
+ 278
+
+
+
+ sizePolicy
+
+ 5
+ 5
+
+
+
+ caption
+ KRfb configuration
+
+
+
+ margin
+ 11
+
+
+ spacing
+ 6
+
+
+ QFrame
+
+ name
+ Frame7
+
+
+ sizePolicy
+
+ 5
+ 0
+
+
+
+ frameShape
+ NoFrame
+
+
+ frameShadow
+ Plain
+
+
+ layoutMargin
+
+
+
+ margin
+ 6
+
+
+ spacing
+ 6
+
+
+ QCheckBox
+
+ name
+ askOnConnectCB
+
+
+ text
+ ask &before remote client connects
+
+
+ whatsThis
+ If this option is enabled you will be asked whenever a remote user wants to connect to your display. This allows to close windows that the remote user should not see or to deny the request completely. It is highly recommended when you work on this computer. If you do not enable this option your only hint that somebody is connected is the small icon in your panel showing an open eye.
+
+
+
+ QCheckBox
+
+ name
+ allowDesktopControlCB
+
+
+ text
+ allow &remote client to control the desktop
+
+
+ whatsThis
+ If you allow this option the remote user can enter keystrokes and use your mouse pointer. This gives him full control over your computer, so be careful. When the option is disabled the remote user can only see what you are doing.
+
+
+
+ QCheckBox
+
+ name
+ showMousePointerCB
+
+
+ text
+ &show mouse pointer on remote client
+
+
+ whatsThis
+ If you enable this option the remote client can see the mouse pointer of this display additionally to his own. Especially if you have a slow network connection (modem, ISDN) this will make the remote display appear more sloppy. On the other hand the cursor will let the remote user orienting on the screen because the cursor moves slower on a remote connection.
+
+
+
+
+
+ QFrame
+
+ name
+ Frame5
+
+
+ sizePolicy
+
+ 5
+ 0
+
+
+
+ frameShape
+ NoFrame
+
+
+ frameShadow
+ Plain
+
+
+ layoutMargin
+
+
+
+ margin
+ 6
+
+
+ spacing
+ 6
+
+
+ QLabel
+
+ name
+ TextLabel2
+
+
+ sizePolicy
+
+ 1
+ 0
+
+
+
+ text
+ Display number:
+
+
+
+ QLineEdit
+
+ name
+ displayNumberInput
+
+
+ maxLength
+ 5
+
+
+ toolTip
+ Display number
+
+
+ whatsThis
+ Enter the display number/port here. Unless you have more than one server running on the machine just enter 0 here. Regular RFB/VNC port number are between 0 and 99. If you enter a higher number it will be used as TCP port. Note that ports below 1024 require root privileges.
+
+
+
+
+
+ QFrame
+
+ name
+ Frame4
+
+
+ sizePolicy
+
+ 5
+ 0
+
+
+
+ frameShape
+ NoFrame
+
+
+ frameShadow
+ Plain
+
+
+ layoutMargin
+
+
+
+ margin
+ 6
+
+
+ spacing
+ 6
+
+
+ QLabel
+
+ name
+ TextLabel1
+
+
+ sizePolicy
+
+ 1
+ 0
+
+
+
+ text
+ Password:
+
+
+
+ QLineEdit
+
+ name
+ passwordInput
+
+
+ maxLength
+ 9
+
+
+ echoMode
+ Password
+
+
+ whatsThis
+ If you want to protect your system with a password enter one here. It is highly recommended that you either do this or enable "ask before remote client connects".
+
+
+
+
+
+ QFrame
+
+ name
+ Frame6
+
+
+ sizePolicy
+
+ 5
+ 0
+
+
+
+ frameShape
+ NoFrame
+
+
+ frameShadow
+ Plain
+
+
+ layoutMargin
+
+
+ layoutSpacing
+
+
+
+ margin
+ 0
+
+
+ spacing
+ 5
+
+
+ QPushButton
+
+ name
+ helpButton
+
+
+ text
+ &Help
+
+
+
+
+ name
+ Spacer2
+
+
+ orientation
+ Horizontal
+
+
+ sizeType
+ Expanding
+
+
+ sizeHint
+
+ 20
+ 20
+
+
+
+
+ QPushButton
+
+ name
+ applyButton
+
+
+ text
+ &Apply
+
+
+ whatsThis
+ Click this to apply the changes immediately.
+
+
+
+ QPushButton
+
+ name
+ okButton
+
+
+ text
+ &Ok
+
+
+ whatsThis
+ Apply changes and close window.
+
+
+
+ QPushButton
+
+ name
+ cancelButton
+
+
+ text
+ &Cancel
+
+
+ whatsThis
+ Discard all changes and close window.
+
+
+
+
+
+
+
diff --git a/krfb/connection-side-image.png b/krfb/connection-side-image.png
new file mode 100644
index 00000000..8c556230
Binary files /dev/null and b/krfb/connection-side-image.png differ
diff --git a/krfb/main.cpp b/krfb/main.cpp
index 7363539e..11bea913 100644
--- a/krfb/main.cpp
+++ b/krfb/main.cpp
@@ -15,7 +15,10 @@
* *
***************************************************************************/
+#include "trayicon.h"
+
#include
+#include
#include
#include
#include
@@ -33,18 +36,6 @@ static KCmdLineOptions options[] =
// INSERT YOUR COMMANDLINE OPTIONS HERE
};
-static KPixmap *trayIconOpen;
-static KPixmap *trayIconClosed;
-static KSystemTray *tray;
-
-void setOpenIcon() {
- tray->setPixmap(*trayIconOpen);
-}
-
-void setClosedIcon() {
- tray->setPixmap(*trayIconClosed);
-}
-
int main(int argc, char *argv[])
{
KAboutData aboutData( "krfb", I18N_NOOP("Krfb"),
@@ -55,14 +46,7 @@ int main(int argc, char *argv[])
KCmdLineArgs::addCmdLineOptions( options );
KApplication app;
-
- tray = new KSystemTray();
- trayIconOpen = new KPixmap();
- trayIconClosed = new KPixmap();
- trayIconOpen->load("eyes-open24.png");
- trayIconClosed->load("eyes-closed24.png");
- setClosedIcon();
- tray->show();
-
+ TrayIcon tray;
+
return app.exec();
}
diff --git a/krfb/newconnectiondialog.ui b/krfb/newconnectiondialog.ui
new file mode 100644
index 00000000..5b4b3a99
--- /dev/null
+++ b/krfb/newconnectiondialog.ui
@@ -0,0 +1,324 @@
+
+KRFBConnectionDialog
+
+ QDialog
+
+ name
+ KRFBConnectionDialog
+
+
+ geometry
+
+ 0
+ 0
+ 541
+ 471
+
+
+
+ caption
+ New RFB Connection
+
+
+
+ margin
+ 11
+
+
+ spacing
+ 6
+
+
+ QLabel
+
+ name
+ PixmapLabel1
+
+
+ minimumSize
+
+ 150
+ 400
+
+
+
+ pixmap
+ image0
+
+
+ scaledContents
+ true
+
+
+
+ QFrame
+
+ name
+ someframe
+
+
+ frameShape
+ NoFrame
+
+
+ frameShadow
+ Plain
+
+
+ layoutSpacing
+
+
+
+ margin
+ 11
+
+
+ spacing
+ 6
+
+
+ QFrame
+
+ name
+ Frame11
+
+
+ sizePolicy
+
+ 5
+ 0
+
+
+
+ frameShape
+ NoFrame
+
+
+ frameShadow
+ Plain
+
+
+ layoutMargin
+
+
+ layoutSpacing
+
+
+
+ margin
+ 0
+
+
+ spacing
+ 0
+
+
+ QLabel
+
+ name
+ TextLabel5
+
+
+ sizePolicy
+
+ 1
+ 0
+
+
+
+ font
+
+ 13
+ 1
+
+
+
+ text
+ Attention
+
+
+ indent
+ 0
+
+
+
+ QLabel
+
+ name
+ TextLabel3
+
+
+ sizePolicy
+
+ 0
+ 0
+
+
+
+ lineWidth
+ -1
+
+
+ margin
+ 0
+
+
+ midLineWidth
+ 5
+
+
+ text
+ A user on the computer x.x.x.x requests a RFB connection to your computer.
+This means that he can see everything on your screen and, if the box below is enabled, he can also control it. Refuse the connection unless you trust the person.
+
+
+ textFormat
+ PlainText
+
+
+ alignment
+ WordBreak|AlignVCenter|AlignLeft
+
+
+ indent
+ 0
+
+
+ wordwrap
+
+
+
+
+
+ QCheckBox
+
+ name
+ allowRemoteControlCB
+
+
+ sizePolicy
+
+ 1
+ 0
+
+
+
+ text
+ Allow remote user to control keyboard and mouse
+
+
+ whatsThis
+ If you allow this option the remote user can enter keystrokes and use your mouse pointer. This gives him full control over your computer, so be careful. When the option is disabled the remote user can only see what you are doing.
+
+
+
+
+
+ QFrame
+
+ name
+ Frame12
+
+
+ sizePolicy
+
+ 7
+ 0
+
+
+
+ frameShape
+ NoFrame
+
+
+ frameShadow
+ Plain
+
+
+ layoutMargin
+
+
+ layoutSpacing
+
+
+
+ margin
+ 4
+
+
+ spacing
+ 6
+
+
+ QPushButton
+
+ name
+ PushButton8
+
+
+ text
+ Help
+
+
+
+
+ name
+ Spacer2
+
+
+ orientation
+ Horizontal
+
+
+ sizeType
+ Expanding
+
+
+ sizeHint
+
+ 20
+ 20
+
+
+
+
+ QPushButton
+
+ name
+ acceptConnectionButton
+
+
+ text
+ Accept connection
+
+
+ whatsThis
+ This button grant the request. The remote user can now see everything on your desktop and, if you enabled it, control your computer.
+
+
+
+ QPushButton
+
+ name
+ refuseConnectionButton
+
+
+ text
+ Refuse connection
+
+
+ whatsThis
+ This button will refuse the connection. You should chose this unless you trust the requesting user.
+
+
+
+
+
+
+
+
+ image0
+ 789cecbdd976e3b8b62df87ebf628fcbb7336af05a56ff500fb6255992fbbea9510f24009220d8abb35d3f5f0bc4042d47d88e7064e6ce38676772d8e9195443cc3557031004fecf7ffdebfefce45ffff57ffed762e92d25fb178bbcea5fffc55769fafcfffcbffff7fff7bffe77abbbf3afcececebf5aed76e75fbbfffbfffa5ffffb62f92ff62f67a7fe4f637706dc32980d817771dea971cbbe9e9d01e3f5c10b305ecf97c06dbcbf03dc3158b481bb386f710fef5f01f70dceecf981c18b19f010eff76abc6bafcf57c0b8be3c00b6d7b700c6f5891c18d79797c0b8befc0018d7574c80717de90c18d757ec01e3fa9cb2c1adfafa4360cf9c8f9e1a5c9fcf77817d733edc34d8bcdfbe9e99f3eab8c1f5f9c25e0fc7f5751b6cce2f8185c1ae5fe3b6e54fec02833f770a0cbe58010cbeca1760f055cc81c15772080cbec43d30f8f02e80d17e7e058cf6e63bc0686f211a5c9f2f5bc0681fbf0646fb44061ce0fba4c1d4bc1a47cfc02d839d53e05d839347e036f85b03778017c05dd82706ee815f56e38ee5d7390306bfe123b0f5b74360abcf0760cbf70130f8e617c0e03b780606df72066cfd65b7c186bf25b0e5ff1218fc7317187c3a0530f8ccf17acb673002069ff91c187c56ad06d7f128af80c16f300606bf8b9706d7af970360f05ddd35d89cc7f559fe8bfd069bf339701ffab0af1fe0fb6e81c1d7c201063f2eaf71d7da939f03c39e550a0cfb7931b0b5df0a18f6f32e81613f3f01867d820360f01de0fd96efac030c7ee30130f82c17c0e053e0fa6cfb179b06d7fc78688fe5a390c0b89e62dae0faf5c50b30f891c306d7e72b07187a0ad70d36efaf80e1cfe15383cdf94360f877b669b0390fbe5ac2e07217187c558306d7e75d133f7ad67ee10330ec97dd02c31f450b18f60c6360d8b3b80186fdd25d60f0150f8111efe5b4c1464ff6f3c14fb00f0c3e7cfb7d68bf7f040c7ff47bc0d61f8dbff7ac3ed41818fe18ef01432fd909b08d6f16432f7cb7c1357f4e0e0cfd843e30f492a33dd6fed91a18ede1a3061b7dec00c39e25f8b4f68c36c0b05f8cf693798c5e23e096c1e10a18f1259e03b7f17db0f72ee2816bea837ea307050c3d44d7c0b0771503c37fe37d601b7ff780117ff35b60d407210386fd230f18f68d6e8061dfa80f0cfb4a7c9eb55fb9030cfbb11218f62b2b60d82b2e80612f3500c6f5880418fe299e816dbe150d36fcdaefb3fec781612fc7e8a96fed95f48061af60096cedd50286bd38f8d885fec40b30e2fd62d2e076cd770e0cfb86f6f311df72177860b0b2d78778b630f549bf6deb57a38741532f77816d7d3401c6ebcb08187ac94a60e8a57c06b6f5640fd8e6e32760d8a37804b6f1c19eb7f6d807867e72135f068d7f57c0d043b506467e0c2530f4e164c0f05f760e6cf5003eacfd7dfb7ed83b32f17e60edcdc7c0b05f8ef658fb24e0d3da23bf00b6f6d86b706ddf14dfbf8beb0b170daecfc73bc0b8de68dde0fa7c083e7699c1897d3d3738f381a1e74436d87c3ff8d80d80c13799bfc6aea9ef87562fc511b0adf73830f4e254c0d08bbc03b67af180a117e71c18f125dc01867efc3930e28530d73fb4f1bfec01430f510c8c7a4a580c3da82130f427f1f94dfc5e01237ee72fc0e02fb3df0f7d5446ffc3461f2d60c483b20486bf46b85eab8fd09e87bdf30c18f6cdbac0b0af1a01c3be31aecfda53806f6b4f65fc6b68ed59e0fdd461a8316f03efe2fb05701bdf7f0cdc3178a180119f5cc3afd7f4b74260e8c3390446fd11f9c0b63fb0036cfbd31130f4526d80a107d7be1ef6ab4a60c40f4f0123dfe426de7a4dfde002239ea43d60e847e27aad5e920530ec2d0c9f9e8def9104b6f1dd01467ca8ae8161ffb000463cc89f81616f89eb6decdd0786bd9d6360d83bde0586bd3dd31ff3ac3d430f18f64c3ac0b0677a010c7b6657c03d9c4f1bdca9cf5f02f7cdf968053c803ed206d7aff7a08736e2dd226b707d7e2180d17ed7d8df6ffa973130f4e30c80a19f4801db7ac603867ed27d60c49be80a18f928bb03b67a390446bc290cdf7e539f84c0a84f3c7c5e137f6e81a19fb4058c7812a27d369ea80930f4159a7cefdbf8c10f80a197d89e47be104360e825ed03432f49050cbd940530f412187ff0ad5e78000cfb2f16c0b05f82eb6f235e893d60d8af120d36f69d035b3db71b6cce83ef36ae37ad1a5c9f9719b030b8001fed00d8c407bf83f8b680fda9036f3eff0618e347aef157d6d43f73605bff8c81a1afa0036cf5e503dbf8f4028c7894e2f3ac5e8a7b60dbbfc88051af3a2930ece95b8c7cef9bfe0fb3f5453e02861eaa4360f05f9e0283eff20c18fc96d7c0d00337f504b3f62f7360d8bb8880f1f96a030cfb940c18f6a9bac0565f4e83cdebc1a7b557de6fb0892f4360d82f46fb3bbbc0c7c06d83a32570077a7802eec2feb07707f1cb35fd016eed1f590cfb8b00d88e5ff580617fbf0b6cc77b1f81919faa0b60e423a70f8c7a36d80023de943e30e28d6ff8e1cdf89202b6e3733bc0763ce21cd8eac5f0c36d7e4a96c0563f2930f453e27a9af871040cbde4b83eab97c405b6f505aecfd61751040c3dc51530f28d83cfb7f923df0386dec42d30e20b0f81a11f1f9f6ff5c227c0d04b9901432f027c367ac1f55bbd24f6fdd04bd206865e24ecd7e91b9cdf37b85bdbe31918f96e71d16073fe1418f9ae005f1d0ffeb2dbe0faf5d10b30e267390446bc748d7f8a263f0e81ad7e39b0ada704b01d9f1b03a3deae12603bde7f060c3d4bfb7ee4cb6a0a6cc7b75ac0d0b7370286be13bcdeead9b90046feac22605b7fe1fa9bf1ce3eb0cda73130f4ae70fd367fe6462fc2d65b3ede6feb6dc9806dfd65313e2fbd69b0d1bb7dbff58f0cd8c6d34760eb1fa63e12d61f2af069ebedbc0b6ceb6bf06beb2f6e31ec5f3d0123de5646afc2ea5d810fabe7ec05187acdc0b7d567e601438f2a00861e53fbf9f87eb5db60a367e8c7ea315a0073735e9d020b8333e8b51318ec9af81334f977046cf5cb80ed78c51130f4ec4860e8599c03a3becb62603b3e950043cfe20c187a0ed6c0d0afb800867eab0218f139c4f5dbfe443e01b6f757f0fd4d3d78090c3d3bb89e66bcde9eb7f78f0e806dbd68f41cd8fe457e0d8cfe85df06869e95038cf899cc80ad5efbc0d02bab8011cf25f86efa8b4360e833bd05b6f1fa06187ac82260c46b8ed75b7d06c7c088afd515b0d5eb33b0d55fa7c1b57e923130fc21ea36b83e5f810fabbf2a03b6f5c7bcc1e6f3a00792538d39beafdb423c063fdd5dbcfe05b80dbd437fdd8ec1e902b80b7c08dc337861e245d043fc75ebeb6bbddebfbe03b6fef0086ceb9105b0f58f7b60f807af806d7df2000cff5017c076bcc5be1ffee2f6816d7ffb0918f1de7d06b6fe720a6cc7674e0cb6fe51ee0163bcc67781e12f2a05463e08bbc0f01fa7076cef3f1c00a3fef11260c4ffe2d6e0663c7d088cfe5486f6dafaa85a0263fc35c7e7d97a495c01239f946b60e487f4da601bdf155e6feb1fb10146bc17f6f5b61e9a03a31e62b08fed4fc7d087ad4ffc2930e27905fe6d3cce0e81e10f4568b0d5b7170043df19f8b5faf6f07956df12d76bf51d95c0d077300186be430718f591d807463d54c906f76afec0777708ff3868707dbe60c0a88ff26583ebf339f8ed223ee4f09f2edaefd6f1bbd5ccf7702b60dbdf5b025b7f5a01dbfac907b6f5930b0c7f72d7c0d69f6f81ad3f6d80edfdeafd061bfd67c0c847de04d88e8f7781adffed01c3ffdc17607b3f5b01db7c65ecdbb2fee83bc0f04777006cc7370260eb8f1d60eb8f0b608cafaa4b60e433f7cc60eb7fee39b0bddfbd030cff8a6f80e15f053ecfe633ef1a18fe9eca069b7c86f6d8fa2c7a00b6e3653360e4bb0cdf67fd33c5f5d8fe6d8cefb3f98cdbf3c837ea1018fd5d097dd87a2cca81d1ff88a03feb8f71db60eb8fe931b0cd2f2530fcaf047fd6ff02f06ffd4fd8d7c3ffd40130fc2f7e0686fff10818fe96431fd6bf8aa2c1b57f6547c0f0af6abfc1c6ff4e8119be1ffe60fd2f3f69b0793df4d6457ece8f1a5c9fe7e0b71be0f5e087dcadc6155edf6b19ec9af637f3a5c431b0f5cf03603b5fe70818fe98dc35d8e4975b605b1fb681adffd9cfb7fe77036ce7e3183dee5a7fab38b09d8f330586bf85bbc0d6dff07dd6dfdc93069bfebcfd7cf85f2880515fc61360f8a377088cf1a6386cb0a91773609bef4f81e16f41066cef8fed01a33e758dbfee5a7f8f5260e45bff05d88e975f00a33daec5c8bfd10e30fc3f7a04b6fe7d0f0cff2e1e80e1df11aed7fab73700b6e3d94f0d36fe093e6cbd9a98f8bf6bfd977bc0c8bf01f463eb57be0f8cfe53067b5b7f2f613f5b6f66b0b7f5ff127cd97c9c5f01231e30e8d3fa7f82f658ffcf70bdd6bf32d8c7fa4f01ffe8e1fbb25983ebf38b33607cbf4c1b5c9f57f6fcaec1b207dcc6fb9f81717d45d660733db8de5e17fe3b07ee191cdaf7f70d2eebfe60ab99bf1799fcdfcc6763a7c0f01f7e066ce70b0c80e13fc12eb09dbf760d0cff28ce81ed786c046ce72b4960eb0f3d608c1704f6f36c7cb86ab0e9bf05c0b63f77078cf17f77088cfa551a7db79bf9051b603bbf2006b6e37bb7c0e81f3a13609b6f9f80e15fce25b01d0f54c0c8bf410a8cf810b580e18f4e1718fe58b9c0f0c708ed6bee2f1bfbb61b7fdc07b6e31f07c0e85f2637c0f0573f03467d9cae81d1ff8cf17dcdfd02b4df8e0ffab0bff5bfd2d49b6deb6ff10218fe16c37e4dfe055f4dff0ef6b4f936017f36df720e8c7c9b817feb8f09f46dfd290981e12fc10930fc259e02c35f0af06ffd2585fe7ba8a70bd8af87fa39f5816d3e477b7bc8df15f8ee217e2c4c3c6d0fe07fa5c91fcd7c4f65dad769e6b35d0043bfbe89979da6ff6531f4eb84c0d0677a006cf5b904861e650b187af4f781a1c74001a31ef41f8051cf050930f4ca4e80a1575e02dbfb6346cf1ddb9f8b47c0d06bd106861e1da7c166fc0cdf6fef7ffacfc0b6bf1801dbfad1d4131dab57077cd9fce3e37aedf8497a056cf357008cef777c608cef65e0cfe6a7c2c4ab8ed57b09fe1abdc7c056ef1b60e41b6eb1ad37ede7a17ef44c3dd2b1f9a5e80043efec1e18f943819f46ef8fc0d0bb0fbd587d67e0dbea7bb10286be950486bed51130c3fb970deed7fc431f8dfe4f1b5c9f8fc17f0ff569b16a707d7e3105867fab5683cd79935fc83ca867f71b5c9fcff179fd96c181f1c7aed5bfe30243dfe12930f24fc51a6ce271000cbd0b0fd8eaddbe1f7a0f5ac018ff0b4d3ee9daf13f079f67fdc19b02239e47bbc0f08fc89e47fc0eece7c15f3c1f18f1dbbf0746fbbc1418ed6161838dfe57c0a8d7529cb7fe93ee01e37e8fc381e12f0a7c587f70c09f1d5f94cfc0c827fe0018fd95e20a18f98499fab96bfda93a00b6fef4000c7f2adbc0767c10edb7f943e2fa6cfe500530f4e5a13dd6bf62f065fd29a880e14f05ec67fd271c01c37fe24b60f88fe802dbfc60cfc37fc22130fc25053f8d3fc0be56ef59d660737e1f18f525ef36d8e81fedefefc23fd0fe7edbe0027cf73b060bf0ddef1aaca0877ecfe0cae23e3ecfc4b79ed57b69e245cfeab9ca81a167670c6ce7c728603bff65000c3d4727c0d0b3b36ab0e93fec005b7d47c0f0574734d8f4479e80912f220e6cef871abe7b56ff3200c678443602463e713ac0f08fec01d8f66fd07e9b4f225c8f1d6f4cae81d1bf1168bff507cff853cfd657ec1818fe11cd80e11f5e1f18fe21d6c0f00fb60046bef1c187f58f18edb5fe101e00c31fe27b60f8431602a37e62b7c0f0077e070c7f48c147a3771718f9203d6970adaf04d763f5ee1f0243cf09aecfead9c3fbad9eb37360e83984feac9e9302187ae6d06f7f807c067df687d03bf8eb7b78bf07ecc31f8f80910fab0a18f9af34dfff3a9fdc5c6fdfea3b32f6ed5bbd3957c0d05778036cefffdc01436fce08187af30f80a1b7d49e473d131d02c39fa25360e48770d660a3af3d60e8357d04863f396b60f89377d360f37a532ff4ad9ee519b01d2fc7f7593db300187a96b83eab671fedb7fa0de7c0a89f820218e36912fcdbf13476098c7c1098fabb6ffbf76a0a8cf82ad15e5b7f052530f24102fbd9f89e7780adde8b061bfd64c0d07f1c35b83ecf9e8051ff2813dffb56ffd90418fa2f8f80a1df08df6ff51a803fabd700f6b77ae568afd5ebe2a4c183bafd3130aeafea35b83e9ff58171bd59d1e0fa7c85f303f8b3120d36e76f815b062f609f219e77cc8d7f0e9a78bb036cef7706c0d0afdc0746fd11f41b6cf4710f8c7a449af60eec7892ff080cbd060fc0d06b60cf5bbde2f3ad5e79010cbd86d7c088bfce0130ea95f01818e3c9ec10187a764c7f6160f5c8f1fd4dbdbf04861ea57d3de2b174806d7d7f070cbda64e834dfc0b81ad7e4d3e1a34f53607861ee30e30f4c89e81117ffd1630f419bac088af3202865e19f8b67a2d7681717dc91c187a95d047a3cf3d60e8515e35d8e8cdc49b81d5639234d8e8bd04463d95cd1b5c9f4f86c068bf5a35d89cc7f50ec0473e6cb0f97ee86f807c953b0d36e761df01f88b0f1b5c9f2f61bf410fd8c483e6f90269f2dfb0a91786c0d06b1001db7a610e6ceb05090cbd0657c0d0abd306863e63058c781b9e01433fd111b09d4fb068b0e99fe6c088c78ef197a1ad4718becfea3f7906463ce62930c67fd21760f8073f06467fd8d90746fd22c09ff51f0ebeacff04e0c7fa0ff78151df2779838d9e4e80a14fe70918facca6c0d027377a1ddafa45e2fa6dbd52e2fa9bf88eeb69fc2503c6f7b34d836b7d880ad8e69f0b607b3de0c3fa4762e2f3b089d7bd06d7e7155e6ffd41dd005bfdc3de56fff15383cdeb4b60e83df780a16fd90586be03f04d01c8e41bd89b1cb6c6850b3cc4f7dbebf3f0f96b60f051758019f2cd718387354e8091ff4a63afe6f90ccff0ed7551df70d35ecfea333807b6e3fdbbc0d06778056cf53900b6e3f9f83eab4f9f01439fd11930f4194d80a1cfc07e9e1dbfb96fb0d1877d3de2bf7f0a0c7f553e30f4e919fb7b36fe576360c4477f048c78e8ec01dbfa7c0e0c7dfb1b60c43769df0fbd3bcfc0a8cffd5b60e8df790146fe503bc0f007fe048cf69617c0c81f0cf6b2fec0c1aff587e0b2c1c6fee0cffa476ae2af67fd210881e10f2907863fc83530f49fa4c0e083bd34d8bc1ff6b0fe900e81e10fde3130f49fd8ef83fea30360e83fb49f0ffdc702d8ea7fdde05aff7e000cfd0bd867003e14ec39001ff95383ebf773532f7a43f0933c34b83e5fe1fa87b6de1b37b83e1fa3fd43f0b780bff8f6797993bffd1ddccff24cfbfcc61fdac0f0876a040c7df30418fa768c7ffa56dfe12530f45ddc01db7a670d0c7d87fbc0367ebbc0d0b7770b6cfb9ff7c0d0b773030c7dfb4360e85bac806dbc8f81ad3ff780adbea7c0d037eb0043dfdcc42fdfea571c02db78be00b6f50daedfc673e136d8c463f0d9e8b704867e8b16b0d5ef1130f4ab603fabdf1cf6b37a15689fd56375020c3dc6a65ef1addeb2b306d77a628fc0d0d702d767f555f006d7e7cb2e30da178d1a6cf40bfb0cd15e7fd2e0fa7c760ddc3538b4e77b06273e70df6015010f0c2e4cfc66564f41006cebc104d88e5fcc81a19f780c0cfd8417c0d04f780e0cfd881930f4231c603b7ebf02b6f1f10c18fec3960daef960c69f98ad1f9c56838dbd1f81a1b7681f18f66057c0e03f3c0406dfec0618fa726e81a1a7f412187a927bc08887c91a18fa4ac0878d873e0786de822130f496b6816d7bd70d36f686fdac9e12066cfdc56db089b73bc0d04f2a80ad7e8e80a11f9602433f81fd7ce847768087f83ce861e8e13cae9ffad746efe06f88f89fc05e438e786efab7dcda5b197b736b4fef1918f6f472609bff2e80d1fe7c0c0c7bca0360d8d32f806dfd370346fd975c01c3ded11e30eccd1f80616faf0b0c7bf37b60d89bd9eb81bdfd35b01ddfb0e7adbd4dbdca6d7c896360b4dfbf69b0b1970f0c3d30010cfb3b77c0b03f437b1a7b2b60d89ba13dd6de620a0c7b0716c3de6c0e0c7bab0a18f69697c0d6def6fb04da073e87d0f762d460af3e6ffc857be0233f6b707dbe84bd3cf091761a5c9f5f404f9e8dbf0360f0939bf828acbdc33eb0f5e75360d833ee01c39ece0e30ece99f01c39e313ecfe60ff5d06013cf1f8171fd8100c6f57a4fc0b8de78030c7bf26760f8b3633f0ff695f6fb605fb100b6febc02867d99036ced3b03867d9d7b60d8979f00c3be620c0cfbca0a18f665e0cbda3363c068bf2f1a5cdb2fdc03061f016f707dbe8881c10f9f35d8e807f6f0c0973f6eb0d147000cfed4acc1e6fdf6fa7a0627f67afa06e7e0970a76f379c6df041358afc5f85360ed2396c0b08f77070cfb44e7c0b08f5700c33ebc076cedb302b6f67900867dbc0d30ece3dbd7c33e7e090cfbf8a6be08ac7d7c5c4f639f8b06d7ed65fbc0b007e3c0e0dfc3e75bbe59020c7e790e0c7e590b18fc32060c7ed90878087c00ec199c9d02fb0647636006bd38c0dce0b48eb7242eb45f31836dfb451f18ed577b0d36d7ff028cf67b6b60b49fb9c0567f970d36afef00830f760d0c3ebc1530f8f0dac0e0c3ab80c187bf04061ffe1530f8f0ec79f0e1dbf7838fd85eaf005f3eb08dc7e70df66bff5e18ec231e2faa06d7e70bf0eb83affcbcc1f5f94504bc6bb057c797dd96bd7e6f1718d7ef2f8071fd9ec5b87eaf058cebf71e8171fdde4383cdf7ed186caf5f2e8171bdf14583cdf516c0b077ec34b83e1f7bc06d601fb883f7bbc05d600edc0366c07de0da3f7677a94365b0d1c7aec0f30b17cb7f8e9f3dfee1eb6bc73f7c7dedf887afaf1dfff0f5b5e31fbebe76fcc3d7d78e7ff8fadaf10f5f5f3bfee1eb6bc73f7c7dedf887afaf1ddff2e53a6f8fbffbfa7eb7e32d5fc490e7fa5b8747c73bbcfde732bacd57cd1673b92bdc800e417f71c2ace66d8b999a270f7cfe8731f6ca17d8126ee846aea49fc88de96f05e66a6e9ad7f935afdc72f977b7e26fe2cb27064237715337a39f9c8e849893c49b22ce187c53b325e85fc29a4df19fc5d8377c05a4aad42d7064f5a199d39c053563fae0c453445c26f45b11fa4fe58b51eb253154b8251ddbaca5c48d61ccafd5151387fadf73fa4b2bec3f8e2f442f45bc7ccb97e1cc3026eab8a55568f98a6a16ffe3f822c63c44af0c1c55eea23e96f497614cd27951c72ed9f02509b1ff1c8f7cc397d557e5aedcb5bb719fdc67f7c5dd73f7dd03fa17a3269d2f436229adf91ab96377e21eba5377f677b7e4dfcb57e38f73f788b83a764fdc53f7cc3d772fdc4bf7cabd766fdc5b3a23eb9c6872e89d7bef3eb88fee8edb7277ddb6dbf94fe0ec1bbeba6ecfedbb0377488583e3788eef30873bc2099cd089dc17473aba268b89af11b1b5ef28277152277372a770caff04c6defaa353b98fcec2593a2b67ed6c9c27e7d97971f69c7de7c019396367e22ce8fc615d4b1c115b53f7d2993973e7c839764e9c53cdd8dfdd9e7f175f5a5fce9973ee5c3897ce9573eddc38b7ce9d73ef3c388fce8ed372769db6d371ba4ecfe93b0367486598e3799eef318f7bc20bbcd08b3c495e39b3bd80eddfff73b2c1365f5eec292ff1522ff372aff04aaff216ded25b796b6fe33d79cfde8bb7e7ed7b07dec81b7b13efd09b7a336fee1d79c7de8977ea9d79e7de05457eef83e37f44ef7cdb1fbd4befcabbf66ebc5befcebbf71ebc476fc76b79bb74b4bd8ef3e075bd9ed7f706de908a56c7f77cdf673ef7051d811ffa912ffd987225fbf0f81fd03f7fe5cb577ee2a77ee6e77ee197c4d1a35ff90bcd96bff0979a337fe5affd8dffe43ffb2ffe9ebfef1ff823e7ce2bfdb13ff10ffda93ff3e71401d50787e9b7ff37afd5b6fc71ea1ff9c7fe897fea9ff9e7a4a8caebf8e7fe857fa9fff6af88b3b67feddff8b7fe9d7fef3f7853ff91a2dc5dadaf1dbfe5effa6dbfe377eb1efafb4744b93578bfbff9df65446dcb1fa77ecfeffb037f48b1abed2fc9811ce6f99cf9ce3dc5b2b6668c31c699709e59c0421631c962a6584247ca32963b5daa448ea832fbe8c8eb3ed5773df4ba9631e369cc8e51feddbcfc982f56b092556cc1966c552bea9cadd9863db167f6c2f6d83e7175e05fb1917fc1c66ce2dd382376c8a66cc6f47f7376c48ed9093ba5aa2c7bf7289ab18e08231d4deec4689a19a50c7ec667ffbe3173cb173b7377d939bb6097ecca7960d7ecdab96737ec96ddd171cf1ed823db61ad9ab11671b4cbdafea39fb30eeb92f64ad6653dd627be069efb215f76ac2321af84c29a11dd00a394c667c5678c610cce6b46ccffad8c357c0db9cb1dee71dfeb52b46f7b2b36e38c732e78c0431e71c963ae6a8d2d19f7d73c71da3ce51995ff39cfc973a7bce0251bf0ea0d4bd6135f39d3ffa615665aaad9325c25a43cf3dad791238f9df1055feac3f61cb64677457df0f7c72bff2a160d5fee8caf9c9caff9863ff167fee2b5495f8f7c8feff3033ee2633ee1877cea4ff88cfc71599f9bf3237eccaef8091b79156971c9fafc949fd5fdf20cd1eaf5b09c69c6d2664cc3b0156344d77aad190709f8b917f30b3fe197fc8a7a0e75ffb419335775af2cc2c8afffdddd05e7afaaf8c057875ff31b7ecbeff8bd5fb26bca8c2bfec01ff90e6ff15d62accd3bbceb07a4b016e5cd36eff13e1ff02139cecce84b38bc101e1b089f5a7c27181d5c08ea8dd221829ab16d3e54ad9fb76cbd8eb5e5ae14a188dc1d21452c9448442a32a714b9afa04759eb31c788c9db6868f4f75af1fda9d943f3a5d5250aef4c94a2120b62abf22fc552acc45a6cc49378162f624fec8b033112639eeb3ce93c68bec4441c8aa98e5f62216662ce4f89af2371eceebb7b8ea28ad61527749c8a33714e79f3aef15159e748568fb79991a16fc6269d21b17c212ec595b81637e256dc7991732aeec5437d3f060c8b47f79eacb2235a62b751958fcc616b3e4ee7a67ce176042974dbb3ff005f1d91f11bd1115dd1f3af756e147dd2d9a918d0d50e296539623ff0023f6001e7395516978108023fe76910526664e4bd7a0823e2a77adc879d0632889d65a082847e52671264d48757ee9a72e7dd1bbeec38edf6dd027ddc11bb4f81e465900745500655b0107bc1325879976e170cebd1a4b53709d6c126780a9e5911bc34be1ad98acf89c54eb017ec0707c1c839f524b5f3dafaf6aff3c557c158dc0593e0309832e6eb1ee3269805738f0547c1b1170427c1a918b13937b503771e83b3e0dc9b0517c125eb6a7f247d39c11555b05e701ddc04b7c15d701f3cb07ef018dc3ba36027680571b01bb4497b7788f79c9fbb93a0e31e792ef9f03daf28b31eb947942feedda3a01bf49c20e8070376c5bc6018baa1137aa11fb2906344f3c07d094518f82f611846a1f47bee6e18878afc5b225e8e040b93300db3300f8bb00cab70112ec355b80ec6147d56bfc659fdbccd267c127be173f812eef957d4c7aebc0d7f08f7f96378108ec231750e27016786ac9ccdc2c3701ace823c9cb32c3c2216b9e62b3c0e4fc2536f1adc85673c09cf852366e17978115e8657e1757813de86779e13de53348bc387f0915ab713b61c15ee866dfae9845d5320843daa7aaf88e13e7d4a5fd7365e190ec261e4464ee4453eb171e71e44cc1d86b7118f441444611445328add9d484509fcfbce5db8fb613b4aa32ccaa3c23b8dcaa88a16d1325a45eb68138ca3a75f61ac7ebee4395c462fe2203c622dbfa25ef6d25b3b8fd15eb4cf5ea28368c49556563426b6666ce6dc4693e8309a7a69348be65479b5ea8aec2a3a8a8ea393e8343a6357de135bb15574ce7b54fb3e795de144136f46efb8882ea3abe8da8b83e7e826baf512e752fb2d2fa3bbe83e7a881ea39da815a86897bea11df6fd958ea6e4eff3a81375a35ed4173b14dbd611f3bc68100d7d265d6f2e1de9495f32c9a5208dd6b98362db6db0ebefcbc0bf93a18ca494319f4a251399f28eccc285ccc3cdd7c7ebeae72b0a7127f665292bbf920bb9f476a8877de93cc8153f91955516792af513e55a6e2252917ce2a57c962f4c91e29818cb3d3e94fb413fbc9207dec6eb50146c7b3ad3b6a95abba62aed5e8ee4584ea85587722a67c14acee5913c8e0ee50955ba7d79eaf5d9b13cf36ebc3d6f4f9e875379419f43fd32cd97bc9457f25adec85b79e7f61c25ef831daaffe6ce8e57c8077fcda6f2d1f1e48eef9057eb1879e7b9615bb6c21bb94b958ec7e6f2927edab2c363d925d67ab21fade5c029d9f017f81a462bd98b0ec2bdd88d9dd88b7db9f41754b1269aa558ff6ac55c766241454fe0705e867771e85ef82771144bb6438cedc471b8efb4631527ce23c5bf4ab793febd457cb53477b20a07ec284ee32ccee3420ee232aee245bca4528b3c972de315eb914f9ff3b9771beec76ba7156bd6f5e8c89557c92a7e8a9fe397782fde8faee28378145ec763ef49578ade8abf44e76c191ec7a37842b979497cddbb2feed011fc485ed0398e4842eda08ca5581a1fc6d37816cf45f65585d5cfdb1cc5c7f1497c1a9f45e3f83cbe881d6fc7d36338ab9a2ffa06d9112319c797f1557c1ddfc493f8d6ddf3f7e2bbf83e3a881ff475882955f8a9dc8d57bc578f6d90ba24b593fa9dc4ba57e92b658a5afd283af14edc8a77e376dc6163b1a0f6507ed1de4bffbf8bbb62196fe25e4cbe48bcd77c5185bc03be06f190ca044779caf7cf146566efbef6d76bffcc67c18ee2de84e256e6aec336f536fae1857757d7474b36a2a8515b5effc8b612629fb7654e71ff4b31ac7ebeed45052a5411d5ee15c5aefad05665fb624cf5c2235512a74ac6cf2a564a252a55da7eb72af706aa5065dd4b62aa520b4ef1442dbd3b6f4dfdcf7dea23f9c1900ad799b62f7dda8825c154add45a6dd4931fa967f5e25fe8b6ea16518bf5b85147ede96a59473f6f5d8fbaedea71243156fbea408de4408dd5441daa29c5c80decd2d6158eb3a31f9f367c51ec2275459c0fa86f67d8626a46ca9af11979cb888df84ccdd5513c8b36ea987f595fea449d924f772842516fda1754959e1053b370e01d4bc9bbea4c9dc7c7a1c71d79186cd4451d21d6ea525da96b75c3e66aa666f4fb56dda97b3d92ad19f04bf5a01ed50ecff83d3196181bf33c1aa996da556dd5515de252577ba423ddc7327cf197fadd2b525787d8b837fa71ee552f58a8be1aa821752f17ce337c5133cc9c8778439e5c84b754ffedebba2c71d8893cf16ef9b3fe549da7541530962a1d8d5bc4180b189711d5175ff5c8ba9e584455e225be4fd57bcc139670b94e047b4882240c26b29f4489a47a36f57be18e3bc77c94fb249647894a1255197d25699225796df78ad829bdae77eb9f8697d1bef7a4ab607fa9ed2cdb491155f18ca277c4f688c79a23dde63a97de89a55cc9157390192b1309495fbda44caa64912c9355bc4cd69443e8e02fbce7ecc88b78cd0e1d916cdc1baae61ebd4978973c25cff2c0d723536d96c84b7f22466a1e4eb8aa15c6e4259ff20eb5fcf917f8aa9297c40b48b3c91eb57b3f394846ea20192713ea07dd518df7a42bbce4d08b9bea3a738f926932637709651d5d51d0fb8e92e3e484ea4bdd52d24772aa6b2f3ef70be7915cb6ee37f03c3c0abce42c3e16fbc99ccd6b85acbd82a24fa196ba62735ac24dced99ee967186fa316cf920bfaaecb64196562cde2e85ce7145260915cc56b3f4fae939be436dc4dee74ed1bb683c4bb49ee49bffb5a5dbe0858344a1ea25140d1987c8172986cf369f2422d7f74db5fe52bd9892aaa4dda5a27492bd95567493be924dda41752ce8d9ea9b26ba3afab2c5fbc722e927e32084e59aae342c0922115d58e7029de77d875ea794fc18c6a8baef3586ba5ae0c02ee07a99fb403471d0487141b2977faa57f169e4767b10aafd9a17c4ce90353c1b8e14bbfb3eecf576920ae9d591afa0c234e6db517f7292b1fa4512ad3384cdd3ef5271f837618043bc9b373ebaf74df43fba2eca88ab2d665cce326e2078751952aea95fe025fea9cfa42cc1ffb63d991719aa4697c943caae3edbe563ddfe97566ce91df493376a7df176b7b7588af3c2dd2d2c461ffd2a78c47caa16cafe393f146aa81f4a757622f5d68a6899592b473c526e9325da56b39a11ae3327ea2e832d3714d33af9971ee938b74933ea5cfd161bc16cbbaaebbd6bdb6f425dd1357de95bb93eebb3d7744b1f5263d4847f19a3f531c5c527039a1efa1181beb6abb8e5dec808dd27152a413f1f22bf18b4ade059fa663ddee744c7f1da65399a7b3b77df97adc5860fc25757be93c3d4a8ff5fbb42e292eed2a999ea4a7ce7ded435a53eb3a86b79bfae232e1e9593249cfd38be42538255674df739c5ec6cbf42abd4e6fd2db64e09d8891c9b95489eceb0847f1fa24bd4befd38768377d0c2feaf1f27b6fe53c8487ec32dd495be9ae68d57dc7c47d481caa0faf9d16e97ca5ab65b697b6d91ef940ae470b586dddb4433a3f0b9c6893767f852f752e63a533fe485e2a11958924bffee6739ad150dda395e97eda4bfbf2fa5597c9501da5837448f6ac2b5453b1ead652852f5495b9f153e6641ef5ec9799af4e83d33a028c3296b6e328e39988a2e0d8a72e34d90c3d7bcad294cfa895f3e4c27fd27c65817475f43277abe45e16665126dd5db16bd49fc581cc5470ce1f4c2d4b3de17b9e650955cb7ba9d07ea9635996665996275257f85faf27c24a9d53fcea187d6545e8883b39f8deaf31c3b51e5bcacaac327cd9f725c36c912d039f6ad491ae31355fa4901d36cfdcf0254978375b259364275b671bb2d029975467335d63044ccaec297bce5eb23d3e0dea1e454c519acd8329fdaeb36fb6cf37d9013bc946d1241b93b75f51ed93506098648761198c444e8ce979a28f41963c451345fd74dd47910f6c190c7c964de38edf0a4e292b4ad5ca66e984b7c3f557d565f9d2f584d6899a115ff3ec283bd695ef3b7cd9f9e6228cb31379f39a27c81f87e959ea534fe3811d64a7142328df523bcf4855e7e959fc9c5d6497ea24da844f712bbba28c5c64d731cb4eb353f213ea6e05277e4855cd43dad19f1770e24dfa13d37b207dcde3abec26bec90ec2397dbd8e0123ad3bfaf4595ad575e7c2f5b3dbec2ebbcf1e78923d52de6df317ca2597629eed44226b65bb143f3a7a8c22bb522772a847757ea5ffa8ebd5c4337188abc05767622f7ccaded397618c0ef19075b26ed63375889ac94ed6cf06b2a7fd93b5340bba27959d05a714b15eb2a1178a3b75122e73579dd0d506ea2cebeb0a39767dd22357541dad72873dd6f5519deffd20f7fc408fbaf1195521a74999fbfe71cef87ece3357df49d07568762d5554e64214e23e0fbc58c83c549e37e7cfc457c7dbe4517895cb3cce559ee4a9bcc933ba8a951cea6ce6b6bfca96e12bcf559017e144e790f8c10f544bf63fca1cf65e425ee695d665be08276927ed5025389569becc576a5eb7e540739faf793798903d8fd513f1f514ad62f2847ca38ef8347f4a3bd1582ee482186bc50f01f9749def89073a335222f1b254b6b5b7072c38f582fc3994f94bbe973da11776a06d2246f93ef17f128cf303560407f9c8df553bb2ae54fd553ef6f3e82488f3497e984ff3593e774ef975f4c4575f8b5bdb7c459b78a6a41fe8abf5c72c254d2c2882bde391af075f3aa79a2f1bbf648718384acef2e3cc54b007bad53c0ec7f949b4c886d9906abab39cd41692c78b114bf33376909fc75eecc985195bd39524bd4f7b7225bbbc9b17596a322545381575f38bec243b897a2ae05dead572c318d5555dd9333e991ce697f9737ec5323deeabefa186d4d78ceff2ebfc26bfd5a3d622773b5f57d55bbee430bbe287816fae2d7ec852aa582339a4eaebc3bebbdbd163d8a1931575fca2fa4fc6f95d7ecf3b59c61efdb1f6489d05023f2fe2a93a0b4e6442116b1e8b7042b5f52ca72817bbb14f07f115bbe4bfa4ab3aee91d6c4481cc4d37c9ff475a966daebc401f9c0633ecf77f2567a21f64d5ed0efd2ea4bbc88d44e0adbcde76129afd903eb32ae6b95bc9d77329e7793453e737729c6fdc119909aaf60ac2b0acaef1d5dfbf259f22013dd774fbb1f6b96af487fedbca7d5a4e397aedb7894f7e3e37c900fadb7e8a8ed07811ff885ab7b6ff038fa96c2f1afa2717c5150495bf89a2f932348a997b11007fcb060aa455552475f51a14b8249b8e2d76e3b7ae63754c3f9f93a360a1be95e433c157b72580852fd8277eabe83ce0814f954af088ab088a25ede129968fff1fb43fc3a9e271399a8b9beba98512cea464b7d759ff155c8f4223fc91da34aea5f9c525cbfcc0565ea6ec1298669cf6af9c490ee8b7095d67e6be293e64ccd8a58cda88f3fd3fd56333a1570525f5726c1a45051a5951a33629551d6f4f37e91841bd11659b44922b556a2ae3c742e6e917717b2ef5112247d2d75f6aaf9d25aa5be55962674b1e924bb142f321799bed7a1efaee9e357f263d62e64769c267cca52ad7e312a525dfb7e3c36e4ce9c327c52ed2243846999f191cccf7362b167ab28c4643342ab996ad563500fe9986c12e7eb2ccdbdf830d92f384bf568b11891ca293e259117468bc08b46ba724d3bf4ca81d82b124fa65d4a804bea7fae291b5cebcca23331f51cbc68c16fa2674f8654e5e5fb5489d4235dba17c41565518a866a2dfbd9b178d1778892477d778d5af8c5fb44aff71fb3a13a93b118f901b5bce46d517c5cfbf2a53a8e36d930f5c9131eb486c44826d132cfc375dccafbea4c519c8a1ff435d739a4ee8350fc57e14450752de3224f7dd9cb8f8a225f16a59279c1a53848cfa232a548142e1359288af7d7f4d914fdf321d9a05d54c5a290e1227082893aca87e1849b0c41ea964a05e2a5581682a2f1253f8c0fd1a7aaff2315a868940f8b95d8a7dcbf47b56a95bbf13c7c4a1eb5667f9eb17a3d2f8aec72a04ee299d88fa7d9806ac9285c99d9bb9ff115cf64c21e751522dbd4a2a3ec325c8bac58eb4fa25c49d94dc776f254a6f5943ce46b8a6c925a7a4cac4cf27eb4ca05c540915d169be2a9784edad413bf8b3632978578899614bf26263b7299e5c4e253f11291468a8ccbf8b0d023f1baff3cf2c7d14847dcf828dc147b14c196f4491431a916d1a337bab6199931c3e44109d55267054b5eeabaf5325c92618e7fbecab7f327c28d2cf29ceabe3db1a79ebc2879fc6c76385f869b6c9356d92016698732fb23f9ce2255c1386bebbbbfe152ec2567451678f982fad5144fa8ae205b142ccbf51d407147beb391435904e362df3ba79aff88acbdca367aa42d7a4abbd4678af2e3f8b0e6dbcf068143daa59e417140557157dba1562f33de980fd53abd28a4f62ed24b21eed2497ac6a7946b583da28a1e07a7bca4e6d47b9c279e389009e5ab2179375df5cfc6313b3fc7ed444fd133c586a7f049c7c4cf9f3ea0eaab24171a51bd5a146eb2cf654a94441b7e2dda7ca97358b609175493f429aa74a8d7d429ead147ca064af3a45949bbf577748a095f3925e5e2eb7083f1a38e5312e70b8a368384fc94785661551c16d3a4ab8270ac2b189b397444d7b140f6f39c3ca2a36d9f76c96bab78163aea282bd06718d51978a4e302556ced70925dd39969a6bde2e9e715d6cc5f25c6dc3645f18dbd6a76f6f10c3e7a35e5292f8a56c9593623b25ed28ab2fca3bedb521f6d7e4d2d7ee237ea24a5b6d24f7d275ee6ce29789abdfd3c33cbcb8e209936a7aaa0aa4b058193ec143279a48aefc5f2a533aba93ea8df542467d47f28ccdd44dd12f29601e5f73645fed3807a09b5ca4c2d7c60c60bf5dd0fcad05cdff5888fb49dbfc6d7b757fde619edf7e6a391069c53caec325a69ff0ac90b5f3d585fb36853afe3da93ce69f248754f667a213f978dd890fa2bd7328f36d42f7bd1118d5f17334f461bed8ff1613809273a2a528ffdb0209b912f26afd5a2fe76f37ef1925d51d61e0487a4c176ed99adba17f1a7f0b5c5c6ebcca00fe680eb6b724a91516c1ed2f1ae0713ef9dbad2a97dec6b3389d8d0adf98e9ea93ebdae47c409138314ef65cabb5ce60ba9b22c3f2e9e29732654c9bef9f686b321bd2353e7a9cfa7b1201f24adc9b6ce3f3e65a05ff7c777d8d23383e2fa99f777e7937eefc17ff6d3563a12529b57f4db7c2379b9ae27a892a7b8989c4514e1bc305c92e776dfaf09749cd55ea09ea85a3a2fb27c9ff2ce22380c4e39a5b75f8ff7eff0c5f154688ea744df7de6f8dbb8f3d71eda4ba95e1d682f5527eaa4aea0d6543f6c3eb3958e85b2888f122a10e363155086a6fc93e5c5f8d7eb89eff8da7e46dbce6ffb0d66c5939776742e25efafa3a2c91df4af9f5acb9d89b63aa6ca741daea8ba5faa9370a133d0afd6abeff265560ac8feaaa7da8d32ed2c49d39bb391ae413ae6d5714f1ff69dbf1215eb4f20a6a9ff5347c4e8d9cc36fcb5fed0277c15cd0cdd5f7aaaddfaeb1b3e286e879bb4abaf5a674f7d50757caaeb05ddafd37f99dffa7cf4ac5ba58e33b0f3472ca40fc3f61feb6fbfcb97d85a89423f6350cf42fed2d5d5d9405b547b8fe1430ee8a08c4ad5ec8a2ab245d67d3d921d3a64fd9b8eb0aa8f45b8e437f191a97175eda6e3ffe7fafb6b8f0ff9326b058cea1502eefdae53797131cfcbf7bc4633a3ffdff808b5a9ee2d0c289b536cce5daaead79a0df5548cd28b689556d1329d2467f25a94c1223df682ac1755ea5c9d53e5bb4817fa7730a17e2ce5c0e2399ea5557a51cf4c58e9da450eacfea86696fc5aebcff415fe88fefe105f941f8b23b7e73ea84ccf0d4fa6c5b1bc2d4eb4bf58afd1878e03fa30ff667f536fb92812ea43de6597f171714a1563ae7b45ea3c2a43273f95697aa65a991ea1a4ff44c51ed883bed34579feb0fe4d7febd9937caa7b79bc4b7de9697e124cd2493ccb2e795b3d59fd99a86df42707efe9efe3c8f8fd999fc9f31fd4ab1e3f77aae22cec15e7c58573595c26fdb4affae42fd27a4d5845eb70413f153c0967a82fdd4e2fd2aa50e982ba344745aefb8089a7dbcfa74ae4c3c017a3828747c1545562ca6672c5f65897cd6547d7ecd477a1dfbaa6d4231bd97534628ff93a77f8541c14293f14fbc4dc42731f55599e4e8ae7681938d9657dffe98dfe3e8e8cdf9f714e75b6d575f1e7f1ff237de9d9cbc9344abda9ef47a2b82aaed363791d95fa3ab5bf242fba8ad1aad17f51fdbc3067d47930d11a8aa754834f63ea87841396eaba5a8f07eada9a8e4bdd17c13deca49e1d78c11233b6a7fb84f53c07ea21eade0bf58ee9b57a8c56b6b36b3d2254cfdb8d0dfb521539efaa564abdd8d089166ff56755f87d64fcf68c566aae7b5f0565a04f471adee7cb57c54d7e58dc7a7ef0e8b3e2cebf655932d7de9215da63e8e734f1cc488df1a4d733fac887859b3ca463aef4787d6c6611357c504f7954df6dd5f3293baf7ce9b9346ff8627a3c568f2de8313646efe34a555a815a7bb2a3ff8a48a90517a3c057421c50afa7d19ffead6d1a556f23e37b67b4528be7bccfdbfa3992cf46b23ef0c769ba5bdc170fe932dc8f7bf126de30c5e6fa3aedf5062c9cc88eece87eaf19117c3da3ff45336555a2c7505ef9d26ad1a3d2b2126331d6332f79cf79140b3617d36ffd51ffae47fec1b7199378d59fb6444016d1b37855b5ad3fa3406d4f1d09be8f8c6fcfd0df455ee83bcbe4584722fb78a4f4037f9c168fc58e9f39d7c995daf32f6bfb333d36fcf6aa63dc35fcfeccebbc6a33da547ba2f64762983df2588c125eb4d895d3624b31a3663f89aad87d6d55566485123adac587f95adf5bd2774dd28e1e5fd8e64bb3a5c70cf548ebb7fad33fafdffc6a89efcfe888e14ffc80bcbb9348997f3c12ff195f45fbd7f98a31af9a3dead14ccd41fd538fb4f26eeafb61d15145380f8fc3eb8074cc8ee305bb93d7dbf544e888fdec881f1614a1b854fa3ecf034bf5615bad3990970169ec23fd6d2bfbe3336aa651daa16ba5082887e1e6cb7cf58a7e74e73f1603ed8fcedd3bfe7854fbe3d1f7fea82dc752350f7cd24b976a815e54ea1851ffd4a30a795f6df2bd621865a51bb482c4e9964e9aa57de7d846651d87f50c82ec58576bfade789a90e456e4370b8a998759a17d4ec6a4402716ec51f3f69efefe3d7c3967a557faee6534d0f1de1fe978affd2599cbab64aeffaf6b2653377d1bef134f8f4ce9d171994665e6954cd79af10b72d22277f94dc94bc1cea3dbe832ec3853675a06c9b40c59599ce495cdfa3ad3532d47bd8122e137d19ab7c55e3229c6c47865a2b63ed2841fa66754a329b5fa5e7fff267ff45c5646eea33b4836a534f504cb8beb324e37fa877eab52114eca343d4ecaac27af6d3d612a8d68a182322bf3b228cb4c96151d8b78a02b1d3dd22ab24294cb74573fdb523f8fb6a0df3da72a57c55ccf6fd8ee39e8b17d3d2e993cca3cdbf09b7069fa0a540ba0d6233d64b29f9ce5bd6dfdfd5be37db35293e714e7eed0b98c76a2c7e8217a7066ce4cffd67f5333d6ca496fca8dae64493fd2d632d13abfe0e3c871b22816b27c2a9f83bd30160fe54b7e60c714b07a96441fb57946f9fdabacfb89ab70a3b9f6a4ad3a8dfe0aa9f51756b950edb7fafb77d51366b4304adc7b711cdfbac78e72a6eec01d849db05306e6b7c6eea0dc4ba6e99c1a5a968bbcd2d79f57f93cebf83dffa8dc0f77d2fda0e3ce9be7acb79f1bf6b6675b6f3dd3fdc918881efdfab657c357595beb4f33f7567fffae7a15a3ab219ecb5cd2b112bebb72efe99f2b3cd979afff8fdf3db113ef9707acc84b3d038b74b48aaedd49e41353f6a97fb3c266bdf6e8aff3f5f1f1befefe3dfd21f015e349e1b259fbf1bd15385e9fe7e77882ddcc6f8deb1512d2ad57a7dbeb4e34abff7dc7d7afb0f599fefefafe76335af83d5fdb6bbb6caf2861d62c11f573e666dd8d042b0214cd6becabfcbf8eaf7fc7f10e5f6f23f12b5b79bd42adacd948be5b21c1ac6bf8adaa8aadff5b4e9caff9e3df7fd7e033bede44af57be3244a0b05ea520fcc6dfd27aa5dfa85965f4edfac0af1eb9c5c98ff5d5dc5dffadd65a7b872f33169dbb6f57d088ea0cc7b16e8459b5206f5a6bb4f7fd4a125fe6ebcdba1bdfaebcf11b70f6cefaf7afed785dd9d7ac13ed376beb9975cc6513a36c4c2b3ee06bbbc6fa813f6ead51f2baf246f0f91a447f2b5fdbdef8ba723437abd46cb5f6f5d9abb76b307da4b0747bede477f9b216b179d6f8bd59b5a9b986df8cafed3bb5dbeb6c7fbfc29959cd25ff4659dfb3b6fd49e2d3fcc8ebf92d5655af2b6fa4d0f877d7f11bf0c5beb953fbee8aedcd0c8bd78cf87dbcda66d0a8eb357abdef8f0291317e933dec91fcf9778dff305f6fa3d727d7b8b5b2d4b657beae6295ba6f7d31d99e85f12e5f762def083b156c5726dbf5c8df5aa37dc2d76be5feae0f348c6dafdf95d77e63f49180b7fccd7e03ce77df647341082fccb7984fdff09e7c7c357f075fdf59fd07abb56fddd77dadf44dbb83a657147ddfdbfe505fc1965ad35a61affd04f3e97fbb47bea3af606b75fb4f7703f8aed5af7188bd59c1b19973f743bec2e6bbd3a62ff1eaedbf1f5f6ff3e30fafef9bbee6b7fb56f8e0add947666bd5bcf7f8525b2beb67d86de575f53963bfdf8daf2fed66f2865fdbab96989168197b775dc60ff94ab666056de78ddfd31f1d30b0bd5bce27bd90ad9988e996d748ace3fb3abaf3cd677de08f96af6fab93775622fd3df87ab35ee74fedc6f45d7ff3b536352b089aaaf33bad7ec257f6a6d67dad799b956eff3eb63e18fffac26e5fdf286c9b3189aac2e6da37bef403becaad1d6a5e55abfefe1ed107f71fbfb0d6f09b7529b6c7bcdec69f37b1baf1c7e41bbee237e348e556b51bfd383afc5d7c7dedd85a97627b25d5ec9be37b7dbd566eb6b7f31aef89ab7254d7b1264bdadef6df3e42f167ec97f966258fd76aa978f3ff6f6235fdf53ae3537bde365faf6cd935e04dbefdedc6bffe2063dbfdefb751fbfbf140e3c329a295d19fadbf8a377da4df6a17c03f6b3fd6e6099ad77198576d7d3396b39525acf719fd056fead5ad75b77f0765fdb97c6dad642f50efdab1abfcbd31b4ad9123a3a56f77ceb27dfdbf7d84f0afe20b2c7858632734eb127db4a23d3c32c46a4f8651f10d5f7ffbe8cd5fcdd7d69a311c6314c1f77da186d966b527b025febc3bdeff5df86ab878bdb7f341fc69724480fcc7def4acfe43f4b5c5c60faade376bd5fb18b9ff8fe5eb678e6feec77ec0d7ff7c7ffccab1a5c23f75c6ce5f75fcdd7cbd1e5f9b41f7771dbf0b5f1f8c88fda3af0f8e77f84a7e97a77ab78fdf85afad8adfce3bd37df0e07f767dff478ead71b4ac1c95e37252ea9d4c7fb3bdaa7f2bbe9a592cc4d7b49cfdc3d7e7876bd777d51ad3231b7a4ce39ffcf8e1b1d5f7fc6467b4bff7f89df8da9a57e8fd4e635edbc7efc5973e7efe4ecbdf71fc7e7cfddec78ff9faf7ae91f3bb1f9ff3f5d7afc1f4dfedf88caf9f59e3eb3fedf894af7a0d39bd125476995d26323efafc59b7dfefd0dea1fd236b7fb62ecb57d645f9982fbd0aa127bdc80b79279b6533def142429fac32fa7b1dfa893575ac9fd325ffd047a157e0d95e95453f9d669e4b33ab62fd31bef8327a12056f272f459ea5595ae4c98b5ec5367afaeb57a9f933d872cae8397c5227c5283bce8e79bb1889bb6f5765d1cf3dd6eb230ef44a323fc3d8677ca5dd6893f7d333bdeab5d92124ef7fbe0af7ef73f055f41c6db2cb622cf6f313b52e985ec7c33c736fd765d107efd4eb6fca70add7f2fe237ce95592f3bc780e3c7fa27734f177fcc3ec22cfbfbea7ddd78e3fa37e713bea580ed38bd0c98b7c28bbf1613e54423fbbbdb52e0b9ee80ec7e95996f3b61cfecc5e6a1ff325dacea93a29e7e5113175e15f3877e57179c20ff2f9d77638fa1a577f4efda257878de7b2cfbbd975c0f54a187ad510bd2ec0db7559f49a32923c27cbd2893ad1ebc7fe3a5f14014ef50e1dec8129afe375e4038b8bebf234de1379f31ae7cf7cd6eecfab5ff40ac3e13239e3538a2315f668aa575e55668f3eb32e4fbdae3c1b61dd892b398c9efe185f6a94f592399bd57b98add894f83acb3a96afadbef19fd23bfe7c0ddcaff1e5c93c8f1649918e592bd963a3686c56a879cb57bdd6ef41ccf4ae8166c5ff1fc5fc4ff86a0763352acf8b5dd6357b6c9717e565da2f4ef203b065e76dfaafeb00ff3a6f9fadb1fc75e645162ca365b6285cbda7838ebfe595bca4a363fc517ba359ab88d5fba9e8d5fbd58973fa23eb7c16bfc8bac7c94054cca9f70eecb169ba29af89af127cd9b92541b30ef0166f5f6de3c76b787f5d61eeac98953769a5ceb2b95faf5454de86133f28ef94306bf964457cc863bd93885e5b8b5e31a59cb9fe437ce5f120a9cacbf2de79d0fb303a0f6c593e948fe58ef6c7e60935d53cf31236b34b7e69ced6eb1af1f9faed1af15fdb71d07c56d92a77cdfe0f7a75b6b453de163c9bab96ec897dbd4a4776949e51868ce3877a55b67170a87737342b9cff0a5fae53beb0323d2adb6c4acaaaf5251cb14e3356962ff0c5d7272073cc3335bcbd3e01f385f1d18ff720f86c9f9a8fb98f8fca8e926597b5fc2bf2b933d951aba25b8cbd503da927f2f58e4c0a575eea1d44f4fe4651152e7ebcbbe187eb6d3bfca2ec957db116b3e8dcbff42fa3733113ebb25ff6f805e6df88ad2725cd3dc3d7f9b9eaab3329bfdbe3e2418cd4d18ff65df9982fbd077beac7a73adaeb1d16ca811f2859ef234db997aa87497a56b8d8ada59378c9993af9716df9215f7e189761f4e0cd8453ef78dcd6fa8a66d143198671cd8279322bdd9aa75a6cb16667eafef428fc477ba8e83d66bfce978e85e985d2ebcdb5cd3e50314b7c71500ef30b59e473bd278f4cc4a8de9347ef605414635d8bffe89b3e5c4f949591dfa9dce0313c8fceb53f46e7e1b937ab5cbfe354350b6f9f8bfff679ed144f757cb0baf9bbad5c1532bbca8fb6f6e839d45ef2e3a8f23df7ba02a3bee3a94cf2b5bcb47bd66673b1af9e2a47e6e14251654f3960acd7c24f1e6c3df18b7c91af555e3e0992e0213c174b6fedadc5323c0f1e82c4772bbf9e8dcab766876cb3f5ed53195bebe6fc882fbd0754c1d4ea750fa874a1f798fd7a8f42efaf218a5ca45483e9dd90f4fe1d7a5f9ee024ade23965ddfa7b5e77f4923d2ffc7c47af1ff01544ca1df80f3ee9cb2beabd518bf0dc7fa4e262eaf6ea990d1ff1b53df7fe75dd9c9fb8afaff718534fa1a384d97359ef31169561f5e32cffaec23afcda8b28dfce72c77c1e9f4523cab92fea295a074e3cd5d1cbec66473dc989b893c5aff5872c5fbe1328c357bda778cd97e3569cf80a1bbedeae66b2fd0cf1bbebe67cce9773aaf7d2adf7946ce93dd9f41ec6c9ceaff055f7dba97f90aa689117d89dae552b36a9447655a82c2bea7a35e66a4e7f9f86cb9fd95bfa63be2a9f8acf87b7fe28cfb5be1ce363dff3659ec7785d6de8bb75733e3f443b790c2bb313b05e71d4ec14f86bfe680e9d419248a6b20bcfe374418368a9da544da8c06cfaaab437a65591fc4cddf261bc1791aae3571def757f5bc7fb685805ce54f00ff8caf114dfdb75877e7aa6a0d597dd7399aaa24375feabfa321608c6a1aeb49489ec6483c77c55cef5fedf7abfe17a27c67636cf4fdfdf51f50b7c71a7ca27ec449e0b87995dd257c221e47dc357bac5975933e1fbd575bec497dee3d5ec75aabd27aafe085f6ca88ec315e9a9deddd2d428551895c56976141ceafdc474adcaa714339f64f1ebe385753df15c45544f44dbf52a212f6c8b73c4afb7f597dd55c0aee4f13af3edd3a7e6b7be95d4b0bd17b8d5d7aff4885e3f5314d1aade29ebb25edf964955c974929fc8d846c9ac787f47e82ff04511ac8a2b15ddf142d7ab4d7f681eb4e2499584bc4a9db36625141bbd10d7df3cdff7ddb3431f1fa2e1cbee596af9faf5114a53a3840e6908fbc6e68b7c5965f9b15ad92c9c15c1e467b3f0c7fb0fe9fade99b13e5bdafeb65a3259e5ee55555465baeb5d46d722fc6eb503af9965b3fdecc64f55ac6e47c7fbed3d97b53fea78ffeb23e0ba46d1fbb16bcdea9a8efcb1ca8fa24af64ce5ffd52aef93fef641da8b1ee4e9abbe9c56b5489e78592dfde36a55ada37eb58992862f3ce108beed9357eae7eb7b1dbfecded6a66d669fd55f8f5fc606c94ef252db40efc7decefad92ca0bea3ddf1f06bbd888ff92ae659b5dddfe63d79115ef98fd1a9f2b8573d9545f59cf6aa178afedfcdff7eefa9f91fefeb62ea89ed3d97f385d1d7affbe3f73e5eed1559b51f9fe46bb3b7f7d77aa99f8d7f6527e95175a0c773747e741e92ab70bf1a55637f13778a401d5493eab0d8a9a6eed1b759f0cd1344c456f0f233fb067dbfe7723dca42fafaf53b78750e912687d4abc877aa5935af8ec271755cafcdcf79ac5ac9249effdc28c8a77c75d27e7cc59fc4a2aeef37feda2ff80313accbbad54932f7c3eab43aabceab8b28699e71dc7ec21163fb22377731e223b35752ee7a51213d99b5dfaaecfb3d974d64f973fcd1d4287a1ffaa29b0dec8eb15ce90a56efcffe73a36c9f8d47e77379931eebfb438cb3448cd99e7cf0575e6976e64dc7e14b966587e9913c2c9fc287f7476e743f4e512da877178c677ab562bd427932492fe2b9be9bb16dd3f7f65c36fdc75ff74753d399786f342bcb6c51a44ad4bb41b7ea5149aa56c54ff41d3fe74b7f539e71f2897aaf61523331b6af7769367b8aebde851f5497d555751def8987f746a00d5b662747aa092597fa5e69be50adec28efeb9ddecc9e8d96af426eef3dabf75ce69d54e9486cf7c3ca0fbeb6db928e89355fa7d61f6559dd64cbead66053ad16a39fe96bff88afe8796b2febfa4e14cfd9817f65eee7e93b547a27de6c26f6ca9b42f0c5bb9ceb31c027bde7ac1e2dd77747f58aea7ab77b75561cd4f3573a96dbe8498f47172976d66e22b1278b89de154b64d1737557acf3eae777377ee38fb59eaa7b75a45ab923db765f7abd9bfdcffafce7f7b7a3b5f9a6b8de0f1a3b449b1d4bea7d89d52c9c84e463e22e186fdbc7aa41effe4cd50f656fe2b5defdb9de575a7f52aaedaae7afd8fb65da3eea245a888368a4c70dd28e19c58be7f9bc10c494533d243bc548ef102ceee21dbd7b8e89829f31666a14755e57f3f45f795b3de6fb816747a24d9f2b5affccd8c48ff4b5f54dad5a53f56eea31d3bb64d4fbb413d2bdfbe02470f41e9dc63b5eefe93ba7d926ac0aa564966277cf03bb27b7de455eefede94576d682db967a40f8281f62b48a3e599d2551b553b58ab578f1c26a3774f2a36c961fe91d1baa76b4ccaef88dcc3f9b01636a946042f55747c744d9965db2705175f4d897ee734995e53f73e7f167f84a6430c98754a7607fe17af7f18782c7248bfa4e14b5db9f48a515a67725b0fbe0e96c5824a49655b4487d6a77657640d1bbcec6ccee994dd5d542df63d0add53de398f84bfd58983175d34fa9478f07e1aaeaaa75388e0fc317314af6033f9bf369be9f9f246dcaa84fdfee2efa4d2b7682499d73c91f9316d94e553d3df665f6b21707e984dffcec2c9acfef6f8bbbbc171feaebaff93a30fce89d7eb28218e36634b770e3697c1caef4779a7bfa5ea4b321b1b126edfbb8e3a0774579c03e3b9aaf4b25929770613c41b4e580e2cc1997f5c84b3d169a172a20af5b172fb92858d54fc70afbb993bfd227f9138a4289debdd6ec45fffe0ea3ba15c144c6267ea92aa26b0f7cdda33733018a9551f9cfddb3fbfcfe366ff343f2f499d98db9deeb9af26f7a56b0a2ab445dc11cf8e3ec9a7a30134efea477dfa6a8bc8956f58eb152adc4a8d656cd75da31fb0999990baaa24f98e87bca7abfca70136dc45e36b3b931e6c97e3c4dab6a50dd651b99a9a36a48edbb88bd851b7bb1eb2db3d3648f2b31a2785766577a0fdaf7bc52d728d971c1f4d592ad29d7e8bd9d9287da6aad98e7eb22a3efddfcec3dcecffc5116e9853aa316cfb2d368acf98a59c1b34cefbba54e29fa081dc5f45ef37e50a45a61d173d9d2119e77c4819ad73beb529563de5defeda5e4a5fe1773b746c651a5ab05412ccb41aad249e0f138aefd44c7619d0f168e8e820b6f418a88c6f1c5c25db005cfcf0bdfafeafdb4a93e27c62a130fbeaf2fb2b61c7aa11e61d5778972e2291a250fbaffa0d5851123298b9f9d07f499bec83297e919d982a1c57475b29b1f2551b82026cfa5d299acaec43ba6675c2c28720d495d67f9badebba6a53dd96a53c757cc8b39a833932cc6e1925f1793b41b1fa5153f54ab3a17ebbd6ee6f97ed2cef3625db60ab910f1548c1641e1c7fe82c7be5c44e3685c33565781e4951483beef31b361b8f1f4aeb552cd796d751df1591a3f247bec802a4adc11a648f29377d03f8b5fa494887c8f377c51bda52bc870218a789ee97e85b9b34ab92cf0f9617a41ba3e0dd79a2f3fa86b8e917ea7d1669d614766069166448cd2339d57d5f1229485b8238d1cb047529fde5b4de50e3f8c56e193deb35b16ea4947203dc220178ba8f0759636fb8fd731e29272ea3a177a44f99b7dd03b220b976495314b93bdecd4bfa2aae8213fd3f30d74ad9a156942b151464f7f025f1d99ab76eafb13d6f0c5d2bc8896d1c693bae7124c4c2f434767355732704864e417d4f692aadc34e0e69d5b7c995df7b4875f53567da14a365f847a1693615fcf66602d7f4c513837f38bea7d38337eb390f1098f8bd8af6257df49d4711055e088feff2813ca2f9b6f6398ce8ea9e254935214d573c00e78ee8f35733a4fc542eb52bcfc6cedf523be0a624026d9f56b04caae8b95ccf40c10918997e29977f5bd503d774fe7e5e239cf83b127c3553654674ad499eee0d51b7556abf7336c53363fa55a20a2189f2d427d4f22aaa4223fa97ba62165e09c6a9170ad777a7667593b5c8b3dea0fb8e19eb7f42bedffb11023d9c12ef7fa4e2545bf3cff768c01236a259f96b7c4eb15eabf91c95c322ef45e528553fe2c5b9fc72f51e4fd2c0b273606b116d93dcd2e83b1be7bace71e99b9d30cf77274b5e49d97ad60ac677398114ccd755d8b502ea20c15cb6e364f3c99506fb2ad67c311179b37f7bc5af2324bc94ddaaff7034d8e536baa6cea4a50f72a023f1fea3deeebbd11eb313f3d5fe4db08a67d99fa10fbe477639e9b2bd1718f8dca2b7a37a94b8f7b7d65f4e3b3f8153ec5c781a7efd2197dc58cbea3971deb5a382336b34b75a62398ee29e971119dffe3a3b2e594b288d67aee8218e9286b6a5d5de72ac1bbea2c2a93492ebc2879249dd6334d653fdfd79951f782a211977aa67f216dbed39560e8d57c718a41ba3e99ebaa80e27c27a833b49e8fc43bc67fdff22528c7f3c3dca1ac7015bb7ee55772a1e35f3ace8abca7c7253eef4ffd3c5f7c956da26591eb7e978941d4f6343b4a767445aec7aaa8277714f894fff50c3db27952440bca68a4cc7023873abe61245e47e5ffbfbd2beb6a1c66b2eff33326ef39cd041a38f3c416084ba0934080b724de17d9c4ece7cc7f9fba92e53d8b68e8ed53d7e990d8b22c5d974a55a5529990b3c956205bf72ac49e816793e12df434abecc487588fe0fa24b782c24bb62bb45f39aa122ff1a373fb9d9e0c6960f1d4ef3ddcb091dde5f28e737794d4f90b113f0ee96ee16512d87b02299a61db84f9917f4adcd5518f8e5f8c57eb2126192af98bf7d867315a45d6470f7ab3ffcacedc2d92210742d7b0a6fe737c88d51c58da0e8d57eb42cca092c366f75112cf0247ecab817f15315fc495273286093e42731f735dbe868699270963e6b9a433419f207d15f8879b620e463c12494fdf7c2ff7bebd49b2f4d1b7e2283449736cc5a48708ee22b44fe319dd658d089375f182a6e7777cd739f4045e646b89d91151d7c623b58524a9b42e21dd823bb6c306265ff7e4dea0c7f82d7e122ba5400ca3d633b14b64e2889e89187f4438c446b8297c128cc56fe5580648d284c55bd36edc4a8c2422c45a6ec244241c3c1e06f69ec407981fcb78095b68beeddd4d1e09a909c84d48de8f68a6ea4711dd45317271b9fe1599feb31c71d4977dbc1d3176e1b9016718d7be65b8f0f38ad993e67bc606823366bb885833c7d82262789813843e41232776b7116905498399cf798a844f6243e871ee77d2875f8b1a11691431f1d7161b79d0ee53bc803fb7e2efa0e19345c1e36b720d1ff126905ed1390bed3dafedb59238ba7293e9dc32106f2feea286d6727d02dc1cf7fd0d92da3e2c3592d564ffca270f4fa0b917b3d4bb477da5196b1f9e30319266bbe116cda13facae7d44a6b90fcd1efe00638be63e8e17ee104590f5699cdf0656689d87bc8ee2789c9f260fac4ff610e9f7341e67d16578141e91d4dc8f23b2439fe2a01c490dffa3fd1c386c876abf9cce9379e278342669b48cc8824a42ff23eb028bf10287102f7558144ef1ae44fabc2cce5af02cf917b14f1a5a6877e9d91f8797d24b216a30c8d621ddd60e93681fb33fdea5cd4e8d63ea038d1c9a195fb1c7270c30db43e3f60c31c757bd2bc653d2221bf0bb6752a9abe86a3ae76b93fbf39b6012c56cc7efb3c1c471decada3df0727789dfbfd3938e88bf88e229692373ff29ea233a4e9dbb56ed170db7681e1bb35d277112b66b8eede7702bef09f00cbeb9db64f7b9e134ea3b8fa15ff6832366cd7e353aee363b0ba78cb9016905e751db3aa259bc03bd9d6660e17f3e846f98f4d4efe18f6a4434a3a79424310bf69347b2b9db46144c7d3379a299e3d2dd36f7ec39cde46f355ba8078900ed6bde33fc60cf9b258fde1dc98316cd42bbe67babbf9ec75e01af9ed9c1dacec489e8dfc421fbe8dcec14e50a5ff9798c4c73cfdc333af07556246e0f9893de4b92303e08f8fbeca3362f059f04c937ffcac08cc2352f7017e2d6cae304fd8e0397254fe661ecb1fee411515ce1a5f31efef0be19d7ecc5dd21bdbeb60b04f2cb7933dfbd73ef64be9d3c9336723cff4e4d3973dafe851bad6f33ae8b97e82f23cca83d23ff9cd5f68b35ed8faad720fdadf693774612e5de7ea1198febf5ce13ebc1d3024f8f7368f549131fc20a2afa6530aae9496c5b130796222cd090af7b4f9c9768beec9d8d331a7188ec65bb5697f5486bfd1e900d4733f83bf7056f36f5f8e7f01277c5fa15a473f3ea15f7a8725ad402d480bdc1c688c6f78b58d3016f227a1c7e1af8a8ddcd689734acf3baf56b906e11b5699e4ddc4dbe62319c6fb22499709da4b36c9f24a2a43102bc53739cf86c6874bc6fd663fcfe33fbf67f55be0e68b8c535c3f6266c00b2a84484fc3c7a8e9f9c44ae02549e075f4748577836e0bd892e100fb83c2a4cdc31de7bd898b8eecee48a749217ecd65efd0ed13f01af2a614701a271e37e78c9df5a1c3873f8cfeaf609e9cd1169517de00a7f23691013ee13dd593ca2f2352ae2e297e4f561c379a559a3bb28d2e5cfc74bc47b63f6f5ceb197dadd26e97d6632b366fd9216457a1edb09f6b12285d502684fcbe269aafb4e27aef36a76aad12d7f175e906a581b21bbfc1a6f2a8e2258e0f53dfaed5eb8e59d065d9fac2db1a2c346d624e842e35d28b7e4bed36f6cc886c137e7e5f3f266fc3ebcb87c2179ecbce11dc5ce1bd7316a63857bfc12b1ce865539cbf04f49d7dbe6b662f38a23df77eabcb021d6f3fc67d21c87f04b7e4ede8cdf9adf97afeee20dda5887e3b366ad47b062d33d3203b97705562cf1e5827db7908c64375ed18cbaef1d472d7f8345a4552f79c7fddf825786594a4d6721bde0efc976def1556f6e616e2ea8711356d8c32c798bdb6c4614266f888859275bc29f8fd70a348557c837b6b072841580d8b026f0c42c8a366df7e26ef29eec85dd641ffb4efd5e70e75dc4fd642f798fbbebe57cf98bf1eab83bd88195c6bc70ef6bccfccee26840d2b84cf888928328898de490e82888c3c0dc4bbad1e9cfe7975a0f2f199f54ce6a2424ced7651fc26864052f2dbcafae67b748abdd69d655e5be47ff7ffc0dfbfde1c6deb3f7c2231acb5b5637398e2277c77ef939c4d6c92f07849c5711ad0bb28e827be78d6c59166ec17e13e841bff95cf4301aa376d8cdbdafb37b63abea7d2d92d8579b246ec8421e3f74000dc41df8a7aecff6822efc27a4df375efb397809dd6fe29a3159b7917f21f21a914ef31cfaf623765eda64d3421f806d88f51ee3f173344339379afbbe998f46119bbbc8b7803de07190ae6a1d62e56c3a778e668796619f45adf0d279e4de8f9fd02c56e295c52745db64db47ce1cd90890e58845f1113c34f0e4d8731eed17b8bbd611b88e6b07e998fde8ac04ef02d669b19f9b47caf31556ab8b58d3459623f0f2ce48bbb509e1031163814fc165512b3a739ee027fcf84cb9d29f83cc3d67133b78273b6f62b8c86b24321b458979606c8553ff929d8509629ee3033630c751e4bc0037918bcc79a3d99d6cb7ba9db38aa0172082ce3f333c199f89558aaa7fac8c177258d0351b6ce4f15540198d20d66b8cada03b717e2623d772bc843c407c521c4dad6977da9d21b27286985d8b2c9369d73c6461b46bf5cd03c6e2303a771e7c8bed3a4fe0393166278efd1abbc13d3c687c7e2a65c4333b662d4b9ef88cf75a7d6f23e82627d32ecf7c33278b3b44ac16c9ec851e1cbe163e64bdb84dd2ee406225d6f34444a3ea8ab61a5ec2eb421a7588d5be7013368988a944840bfe23a6cb429c9e611e7ac479511c4e598fa4ce5570c922df0aba2e6383e09b714db2eed98ddd1d91172fb8179fc5bfc533d4ef17e7d9dd4e9e1067f630f45cf32078f7de499e2f9955d2559a23f3c0ee7ab30cab031153164c44aceac7e3f93f8cd721d6e1b14626b0c359a307e4880b2def98c55823c1988df6c34be3d87988fdf860621b1d641711b9f024213b9e9c47f233debb3d494e9dc4ba48cea2e7e43cb9603b6c42679f9d37787ac95a6fc8d5c8d7f17645e609c40da778619d92f08a1216213efdebf8ab793cba1dc4481b3e7645193dc16b225ac94ba354dd8e4d65b1de35bb47ac03e7bb4bc2fdccdcb75bce0372e139f3e012f387b119bc630e0913ab5b3ce35f85817f99f40d777ec3b6cd03f77b703937435fc84737c64e2411852fb1c367dcb58e908d8394d47d3e4f1c480ec3da67dcf74ebf6e3c36c97be30479edd829f2dc45cf86677745e636efce32046a92e3447e32701e62739cc3a94557ecb253df446e3c91192f4a5c5fe4c7334e584cf5c6f99928314e7c93ae08a36716fa4f861b876110fb568b0d0cc445cfa33646397c5cee8e1ccf84626c3f394fcedc9a50fb7cb95340c4a7c33628afc97c265ecdfa04f8c06eb1b3e8dc3b71833822a91047bba4451348e0399ea540e075886f989b3086e9c81c84d902fc477cba6977918f8bb4a51047ab67b01f8468e00ec2236b161b71dbf5684ebe8ccec380e6e4b993b8dbd136d013635c5264bacc4992cb20b6df1159f770e31c46bbe134f69d676414fbb81df9117dd51c9b63ffd5e8b081df711ec3ae33b75bd18577c25830f18ea7566ccc42e409b410d33bf00c11750fd4784ceb8c47976f5806fef2bc097cafcd9233e948078f804f837d91bdd1ea136f4e08bd33e4be0c13399ef1cddc67bdf96972457a7dec3e58c7c995ff1c7402d78d60117d14ad8fda4398e3e0edb55feda7280a7dff95246cc7dd2659744cd27dcb3e727dd70f26349a5ad1f3ec9e341f7f7a64193c367a43192fbed701121bb8f319b9c3a5e86678447c8315138fcb886c3c5bc764a17bf36d77e86c32665dd8ade4071bd0bce9965750bf022f815983bdddc11a5ab8357127ae7514bbf62b495937fc11ceddedf8c8ef0797c1bbb91f9d5917fe86eb47bb9ee99f3a873cc65c613ce20c1d1b609c1b29af89186ba1d5d0acec63840b9d505c0fee0e8f66343158b3f966149bfb2166e197561fb6e3aff04f2c26ac2d02c7d603f68fb93bc0cd7ec2be506809f1211b86f3a04b9ad819dbf15d6be2fa982f40abe5bd3863f5211dbde3e839b8039f223ba8d80122b41a113157e44f81277627607f95b3495cdf21f5c6fd19b9f5597855b023dcb02e8b799e8fdb98b4b717b2407ca313385e2f7ef3fb24a51fc2641d7d429cc15142bb47da08a33993e695a9c546e0494872f01d46f822bcdc0e327b055bf1f347a225be162f41323f6faa4d3ef9e7e116b475b2735fcc77cc18423b5da5afca33985f8c0ed9c90cf2919dc5cc3f8b62d8b1d035e27670370b41f5f128a286d80e22e9d6cb76fc3bf06ac4907003e76197e7c49516d0727ba878067c1a075879039f3a8f64655dfa57c80ced9df81ba4d224c0af28ef8d131ae1aeb1e5863c035ff45959c27fa53fba3c6bacb2b7cb67b0566d8cc4acec9d41b309109b36741969f24718bdf9780e13ff8afb9dfa3cda2989ddcfe2ae3fdd7f5fa6d92e766611a770f928b0a391766d3f86d0430be3f963b9daff35bc0465912b1dd88df60bb0c318af8e67f57701fc9b789549e8334de359fd5d13ebd0df8ed7af268d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a55f142044d7349ec4e6f3aae925df2ef23ec40282252c6cb78e47bcf1baf34e94cd371ff7cbd3bff7a5c173ffbf56b4036c8222265bc18cf47d38c18de84d354a7fdb2debdd7c5f5f3e8e777af0a1e29667928e3257840ecfac4f8933c91e613aae02522a4e535f23cb248481e1625e4b7768ab8c14bd79f49d33deaed907791f7aab728bf8b91d5217b871252b2e4ed301ef39e94f12a649de47537e325327f611797319247abfc85f83ffc057fc912f88b5d7b02f3accf2359aefa549a9e68b9d54ded10f537d5512cc15bdc93c7890346b2047ee577c12fd917512627ec18b65f8c426fcb78213b8ffd22f0321eab68acc6abcd73384acc053fd82f2c2b57bd4bb97540baca61e576e02a5142f4b25a47b9a5c59d093987f277f6f1123c0759da5bb3d2c62a7f35e395f775111aabf12af268b115795b9ae78dd577295e07bc90796e5dbc64ad45bc16b5747dbc9a6b68737e6d577a62a4c7650b50c22cb542949072816575305eba3aab885ed4f9abb91d3cff61a79acb9815e417df5bc7cf8b194e8c5db4c5ec98593b90bf1a71b1ceabd3905d34c74bf6b68c9794a2229239e70596a151ef613b2b6176ca758812395fe4f21edfea7397989d2b19a06bed300b7554e78c628ff3bb94e5bd386776d2123dfc376b7d9375e4c7456fff2dfd3edcfad8758bf0aad3bf85d7d793c64b8d345e6af43378a9581b55dba4983346cc614df5e55755b384b57b225f4ff1bbfc552c59bdaaf8bddc8fc5392dd6c56b95afa27e87c536753dfb6e133acbf06aea5bf59740bd9c45bafebd8acf32bcaaed5cf27e8505be0ad420ecd0fa73844d5d7d9ed5bf20e40b2a5e5be4af45edce6bacf36af15b335ed843b3e8e92cbe6ffdd8b2f705acf25514ef233e65a696559fc8d5d8341e9bfa5a447ab60b44eaefbd2de28532d5e728c66cfdb9579f5abdc4fa78557d155217149a70713cf27ba6be0a69358af3c8d124761eca12bc7c83afa28a97c3dfd454ee0db424ff3cb817c7265778fb236f631f9f78136491bfa0b9a30e711799f58befd5eaa17ee4da41ae006123f0fccc3c7300320f839a396c355e187de116f43993493b1afbea8a78e5560b6c3ac1812899fb2a240fc10380b7cbe59e03fc16b64a55e64b2f823c0e1f03b4f1561f595905266893404de628cf111775c8bf92bf90df0d57a115bcc51de199c375c8692a9fa4a8757df9b5c857215a9ef24f2f7ff212078100b7947a42ca89f7424a5f05bee778c9bb08cec89fa87feebce696608617ff8bab9d57700fb277e337eeefbccaf775169f776e7bcb518c6bf3bfc824c39f3da186b6c096145748ffe6ba782df2550879df2ef103b7607be289151195e3b362bff7eabe8aba9f41de251ff3655f45fee4c19dc8332439488ce2265f45fa84d3a750f455080c81f9225f85ca78fc7a5f4579f6fa7dbe0af416d72d7a57c5b2f7c388cfbfd55751d4053fc357b10aafbf9d3eba1ef59f8ad7d790c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd468395ec920192ebb3a19d58e5c2783dfdda7c67e5c7f4e4dcbf04a6e9231d1cd92768c6a4714f0fabc5eacbcd3edb25ea8d052bca8efb24f84dd2d3f729bb5e09a8e8d2ae5af255ee2bc6c2b91fc75c3cbdcf06fc3e44ed487d2b57b67f76ababffc2e8ee78894eba1a3d9d9c2f7dbacb69be2bd799baf4b6da8a1bc14af51724f3448af05af0de8ff3de78c11c66a8e57ca8b383f10e3987fbfe6dfc7fcd788e336268ceef9f75b7efc9e1f13a5b3d6f1dfd7e25e59db8bf7bf4eef3fc0d5fc3cd54b9ff7b9fca01263514670329e2e6fc1903f3351db8873c41057e15af4967fcfef76bd2e5ebc4d7816a3f4d730e3b9dbb48db705bceed05efeb7787eccdbca7b9db6f936c5e35a8ec7ecca7bf137e712f9acaaf7e7e8c87a6ef9ff5bf48dffceeb18a565c6fcec758ac820c57b98b649b46d2439548c19e095f7604dbc24fa237eafeb8ccf06b98c2ae025c76ded7c7646e075c7eb1c17f0127c9272427add7ded48e1fe1c8b81ac876ac4d8e59c25312ab64db4276dc338c541d6268f0bbc449da3a214ae4ae825788dc0057812bc859f83d75df65cafcb9fa53bdf62e494e78e2a5ea57130483119948ed7f0e2f58e52c955c76b5ce03565bcf2b1c6c7f26d092fd99ffbd2781ca62364202485942625bc44bb6f4afc855172c37fdd55b0192cc48b8f3b5ecf2d97489049f7c5d1c89fb72803a925ee3494f2b811af515aff48caa2b23c5c81d75da1ad23cef3c5f6def1273528c9fb617a6c90623cca70c8f1bae525c6a9b4412df7fcef58f42eab0d33c0989f97f371f9fe375c4ea4d23895d7e9532ab57a944a9381182969e9eb46bceeb279e78e8faa21bf436586fc77f5fbba6ea870ed422d52e3d578ed7f205e5f431a2f35d278a9d1527d755cb4e0165149e759614117f5b1f5affa936899bebaeada546329945be507c8ed8ed2d17f002fae2965f67bc1d390f556964831b82ee2955f53a82f2f9b7a12a4b721d3820a57719bf8f6f3fc305f8ed73dd72c6f6b9e866c8c66252a7e00a1eb0b7f44565bc19f91e9da9907a264478e536b75c435c69a7fe077d3f2f158f334dc554b703dfa262b2f7a3e4ef932e7c4823f232d53f040a49a7ff14ee3ccb7f077e1d5683957f1aa96e07622ac0a8957432d450f446aad14cbc83aff38c9f61578a5bf8755fb392f53f640fc4378357a1a56e1955d23f12af9338ae8a4d679e6fdccee34e472ed56fade7e374aebe2f5a3d1d39095e0d2bf01af7bee171816e47dc19f91c9b8cc03918de2fc4ec2db314cfdb0a3df8dd23a78fd4ecac6e6701d8df957d29f8a17f7eddd2d5ffdfc1df467e2f5e792c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a5461a2f35d278a991c64b8d345e6aa4f152238d971a69bcd448e3a546fffd7ffffb5fff0f78651045
+
+
+
diff --git a/krfb/trayicon.cpp b/krfb/trayicon.cpp
new file mode 100644
index 00000000..0cfd430a
--- /dev/null
+++ b/krfb/trayicon.cpp
@@ -0,0 +1,47 @@
+/***************************************************************************
+ trayicon.cpp - description
+ -------------------
+ begin : Tue Dec 11 2001
+ copyright : (C) 2001 by Tim Jansen
+ email : tim@tjansen.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "trayicon.h"
+#include
+#include
+#include
+#include
+
+TrayIcon::TrayIcon() : KSystemTray() {
+ KIconLoader *loader = KGlobal::iconLoader();
+ trayIconOpen = loader->loadIcon("eyes-open24", KIcon::User);
+ trayIconClosed = loader->loadIcon("eyes-closed24", KIcon::User);
+ setPixmap(trayIconClosed);
+
+ configureAction = new KAction(i18n("&Configure KRfb"));
+ configureAction->plug(contextMenu());
+ closeConnectionAction = new KAction(i18n("Close connection"));
+ show();
+}
+
+TrayIcon::~TrayIcon(){
+}
+
+void TrayIcon::openConnection(){
+ setPixmap(trayIconOpen);
+ closeConnectionAction->plug(contextMenu());
+}
+
+void TrayIcon::closeConnection(){
+ setPixmap(trayIconClosed);
+ closeConnectionAction->unplug(contextMenu());
+}
diff --git a/krfb/trayicon.h b/krfb/trayicon.h
new file mode 100644
index 00000000..dabcf582
--- /dev/null
+++ b/krfb/trayicon.h
@@ -0,0 +1,48 @@
+/***************************************************************************
+ trayicon.h - description
+ -------------------
+ begin : Tue Dec 11 2001
+ copyright : (C) 2001 by Tim Jansen
+ email : tim@tjansen.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef TRAYICON_H
+#define TRAYICON_H
+
+#include
+#include
+#include
+#include
+
+/**
+ *@author Tim Jansen
+ */
+
+class TrayIcon : public KSystemTray {
+ Q_OBJECT
+public:
+ TrayIcon();
+ ~TrayIcon();
+
+ void closeConnection();
+ void openConnection();
+private:
+ KPixmap trayIconOpen;
+ KPixmap trayIconClosed;
+ KAction* closeConnectionAction;
+ KAction* configureAction;
+signals:
+ void connectionClosed();
+ void showConfigure();
+};
+
+#endif