From swillenberger@upsicorp.com  Thu Jun 26 22:49:20 2014
Received: (at 410) by bugs.x2go.org; 26 Jun 2014 20:49:21 +0000
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on
	ymir.das-netzwerkteam.de
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham
	version=3.3.2
X-Greylist: delayed 586 seconds by postgrey-1.34 at ymir.das-netzwerkteam.de; Thu, 26 Jun 2014 22:49:20 CEST
Received: from mx-gw-ral1.upsicorp.com (mx-gw-ral1.upsicorp.com [209.34.248.10])
	by ymir.das-netzwerkteam.de (Postfix) with ESMTP id 587105DB1B
	for <410@bugs.x2go.org>; Thu, 26 Jun 2014 22:49:20 +0200 (CEST)
Received: from dogpound (cpe-098-026-067-234.nc.res.rr.com [98.26.67.234])
	by mx-gw-ral1.upsicorp.com (Postfix) with ESMTPSA id 499D49D773;
	Thu, 26 Jun 2014 16:35:00 -0400 (EDT)
Date: Thu, 26 Jun 2014 16:39:24 -0400
From: Sven Willenberger <swillenberger@upsicorp.com>
To: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
Cc: 410@bugs.x2go.org
Subject: Re: Bug#410: Segfault of _X11TransWritev in libNX_X11.so.6 with
 libQtGui
Message-ID: <20140626163924.4e60b559@dogpound>
In-Reply-To: <20140612220605.Horde.C9kE3LBXZ1cmFL5CtR1WBw9@mail.das-netzwerkteam.de>
References: <20140123213919.0cba2367@dogpound>
	<20140611213358.Horde.
 bMCYnc5b9oRAwyo99c5Txw1@mail.das-netzwerkteam.de>
	<20140612154842.29af0ea1@
 dogpound>
	<20140612220605.Horde.C9kE3LBXZ1cmFL5CtR1WBw9@mail.das-netzwerkteam.de>
Organization: United Pay Systems
X-Mailer: Claws Mail 3.10.1 (GTK+ 2.24.24; x86_64-unknown-linux-gnu)
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=SHA1;
 boundary="Sig_/V6QIQ_GyO_U=Z=OyPY0jJtQ";
 protocol="application/pkcs7-signature"

--Sig_/V6QIQ_GyO_U=Z=OyPY0jJtQ
Content-Type: multipart/mixed; boundary="MP_/r8nI0kV.QaEJ5T6fvQi3FwH"

--MP_/r8nI0kV.QaEJ5T6fvQi3FwH
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

So this goes into tracker:

I have isolated the problem to the following change in the nx-libs
Makefile between 3.5.0.21 and 3.5.0.22, which persists through HEAD:

--- nx-libs-3.5.0.21/Makefile   2014-06-14 12:45:27.000000000 -0400
+++ nx-libs-HEAD/Makefile       2014-06-12 16:31:48.000000000 -0400
@@ -3,6 +3,7 @@
 INSTALL_DIR=3Dinstall -d -m 755
 INSTALL_FILE=3Dinstall -m 644
 INSTALL_PROGRAM=3Dinstall -m 755
+INSTALL_SYMLINK=3Dln -s -f
 COPY_SYMLINK=3Dcp -a
 RM_FILE=3Drm -f
 RM_DIR=3Drmdir -p --ignore-fail-on-non-empty
@@ -114,6 +115,13 @@
                                "$$(string_rep "$$dirname" nx-X11/.build-ex=
ports/include "$(DESTDIR)$(PREFIX)/include/nx")"/ || true; \
            done; \
=20
+       # Provide means for Xinerama support in NX/X2Go sessions. This
+       # This also requires two post-install symlinks:
+       # (DESTDIR)$(NXLIBDIR)/X11/Xinerama/libNX_X11.so.6 -> /usr/<libdir>=
/libX11.so.6
+       # (DESTDIR)$(NXLIBDIR)/X11/Xinerama/libNX_Xext.so.6 -> /usr/<libdir=
>/libXext.so.6
+       $(INSTALL_DIR) $(DESTDIR)$(NXLIBDIR)/X11/Xinerama
+       $(INSTALL_SYMLINK) ../libNX_Xinerama.so.1 $(DESTDIR)$(NXLIBDIR)/X11=
/Xinerama/libXinerama.so.1
+
        $(INSTALL_DIR) $(DESTDIR)$(PREFIX)/include/nx/X11/bitmaps
        $(INSTALL_FILE) nx-X11/.build-exports/include/X11/bitmaps/* \
                        $(DESTDIR)$(PREFIX)/include/nx/X11/bitmaps/
=20

Commenting out the Xinerama lines and rebuilding results in a clean run
of my (and your) python scripts as well as VLC player.

I have attached a diff (excepting whitespace differences (diff -ub) of
my system's Xinerama.c (xorg's libXinerama 1.1.3) and the one provided
in x2go's source (based on XFree86).

--=20
Sven Willenberger
United Pay Systems International
http://www.upsicorp.com


--MP_/r8nI0kV.QaEJ5T6fvQi3FwH
Content-Type: text/x-patch
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename=Xinerama_c.diff

--- /data/Downloads/ABS/libxinerama/libXinerama-1.1.3/src/Xinerama.c	2013-0=
5-30 20:28:02.000000000 -0400
+++ Xinerama.c	2014-06-14 11:29:40.837433407 -0400
@@ -1,3 +1,4 @@
+/* $Xorg: XPanoramiX.c,v 1.4 2000/08/17 19:45:51 cpqbld Exp $ */
 /*****************************************************************
 Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachus=
etts.
 Permission is hereby granted, free of charge, to any person obtaining a co=
py
@@ -22,11 +23,10 @@
 dealings in this Software without prior written authorization from Digital
 Equipment Corporation.
 ******************************************************************/
+/* $XFree86: xc/lib/Xinerama/Xinerama.c,v 1.2 2001/07/23 17:20:28 dawes Ex=
p $ */
=20
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
+#define NEED_EVENTS
+#define NEED_REPLIES
 #include <X11/Xlibint.h>
 #include <X11/Xutil.h>
 #include <X11/extensions/Xext.h>
@@ -35,31 +35,17 @@
 #include <X11/extensions/panoramiXproto.h>
 #include <X11/extensions/Xinerama.h>
=20
-#ifndef HAVE__XEATDATAWORDS
-#include <X11/Xmd.h>  /* for LONG64 on 64-bit platforms */
-#include <limits.h>
-
-static inline void _XEatDataWords(Display *dpy, unsigned long n)
-{
-# ifndef LONG64
-    if (n >=3D (ULONG_MAX >> 2))
-        _XIOError(dpy);
-# endif
-    _XEatData (dpy, n << 2);
-}
-#endif
=20
 static XExtensionInfo _panoramiX_ext_info_data;
 static XExtensionInfo *panoramiX_ext_info =3D &_panoramiX_ext_info_data;
-static const char *panoramiX_extension_name =3D PANORAMIX_PROTOCOL_NAME;
+static /* const */ char *panoramiX_extension_name =3D PANORAMIX_PROTOCOL_N=
AME;
=20
 #define PanoramiXCheckExtension(dpy,i,val) \
   XextCheckExtension (dpy, i, panoramiX_extension_name, val)
 #define PanoramiXSimpleCheckExtension(dpy,i) \
   XextSimpleCheckExtension (dpy, i, panoramiX_extension_name)
=20
-static int close_display(Display *dpy, XExtCodes *codes);
-
+static int close_display();
 static /* const */ XExtensionHooks panoramiX_extension_hooks =3D {
     NULL,				/* create_gc */
     NULL,				/* copy_gc */
@@ -91,15 +77,15 @@
=20
 Bool XPanoramiXQueryExtension (
     Display *dpy,
-    int *event_base_return,
-    int *error_base_return
+    int *event_basep,
+    int *error_basep
 )
 {
     XExtDisplayInfo *info =3D find_display (dpy);
=20
     if (XextHasExtension(info)) {
-	*event_base_return =3D info->codes->first_event;
-	*error_base_return =3D info->codes->first_error;
+	*event_basep =3D info->codes->first_event;
+	*error_basep =3D info->codes->first_error;
 	return True;
     } else {
 	return False;
@@ -109,8 +95,8 @@
=20
 Status XPanoramiXQueryVersion(
     Display *dpy,
-    int     *major_version_return,
-    int     *minor_version_return
+    int	    *major_versionp,=20
+    int *minor_versionp
 )
 {
     XExtDisplayInfo *info =3D find_display (dpy);
@@ -130,8 +116,8 @@
 	SyncHandle ();
 	return 0;
     }
-    *major_version_return =3D rep.majorVersion;
-    *minor_version_return =3D rep.minorVersion;
+    *major_versionp =3D rep.majorVersion;
+    *minor_versionp =3D rep.minorVersion;
     UnlockDisplay (dpy);
     SyncHandle ();
     return 1;
@@ -241,11 +227,11 @@
=20
 Bool XineramaQueryExtension (
    Display *dpy,
-   int     *event_base_return,
-   int     *error_base_return
+   int     *event_base,
+   int     *error_base
 )
 {
-   return XPanoramiXQueryExtension(dpy, event_base_return, error_base_retu=
rn);
+   return XPanoramiXQueryExtension(dpy, event_base, error_base);
 }
=20
 Status XineramaQueryVersion(
@@ -280,6 +266,8 @@
     return rep.state;
 }
=20
+#include <stdio.h>
+
 XineramaScreenInfo *
 XineramaQueryScreens(
    Display *dpy,
@@ -291,7 +279,7 @@
     xXineramaQueryScreensReq	*req;
     XineramaScreenInfo		*scrnInfo =3D NULL;
=20
-    PanoramiXCheckExtension (dpy, info, NULL);
+    PanoramiXCheckExtension (dpy, info, 0);
=20
     LockDisplay (dpy);
     GetReq (XineramaQueryScreens, req);
@@ -303,26 +291,13 @@
 	return NULL;
     }
=20
-    /*
-     * rep.number is a CARD32 so could be as large as 2^32
-     * The X11 protocol limits the total screen size to 64k x 64k,
-     * and no screen can be smaller than a pixel.  While technically
-     * that means we could theoretically reach 2^32 screens, and that's
-     * not even taking overlap into account, Xorg is currently limited
-     * to 16 screens, and few known servers have a much higher limit,
-     * so 1024 seems more than enough to prevent both integer overflow
-     * and insane X server responses causing massive memory allocation.
-     */
-    if ((rep.number > 0) && (rep.number <=3D 1024))
-	scrnInfo =3D Xmalloc(sizeof(XineramaScreenInfo) * rep.number);
-    if (scrnInfo !=3D NULL) {
-	int i;
-
-	for (i =3D 0; i < rep.number; i++) {
+    if(rep.number) {
+	if((scrnInfo =3D Xmalloc(sizeof(XineramaScreenInfo) * rep.number))) {
 	    xXineramaScreenInfo scratch;
+	    int i;
=20
+	    for(i =3D 0; i < rep.number; i++) {
 	    _XRead(dpy, (char*)(&scratch), sz_XineramaScreenInfo);
-
 	    scrnInfo[i].screen_number =3D i;
 	    scrnInfo[i].x_org	=3D scratch.x_org;
 	    scrnInfo[i].y_org	=3D scratch.y_org;
@@ -331,12 +306,14 @@
 	}
=20
 	*number =3D rep.number;
-    } else {
-	_XEatDataWords(dpy, rep.length);
-	*number =3D 0;
+	} else
+	    _XEatData(dpy, rep.length << 2);
     }
=20
     UnlockDisplay (dpy);
     SyncHandle ();
     return scrnInfo;
 }
+
+
+

--MP_/r8nI0kV.QaEJ5T6fvQi3FwH--

--Sig_/V6QIQ_GyO_U=Z=OyPY0jJtQ
Content-Type: application/pkcs7-signature; name=smime.p7s
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7s

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAA
oIIP+zCCBJ0wggOFoAMCAQICEDQ96SusJzT/j8s0lPvMcFQwDQYJKoZIhvcNAQEF
BQAwbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQL
Ex1BZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1
c3QgRXh0ZXJuYWwgQ0EgUm9vdDAeFw0wNTA2MDcwODA5MTBaFw0yMDA1MzAxMDQ4
MzhaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQg
TGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNV
BAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJG
aXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornM
SMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqk
kqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6lL8/K2m2qL+usobNq
qrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHGTPNpsaguG7bU
MSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4H0MIHx
MB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8DveAky1QaMB0GA1UdDgQWBBSJgmd9
xJ0mcABLtFBIfN49rgRufTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
/zARBgNVHSAECjAIMAYGBFUdIAAwRAYDVR0fBD0wOzA5oDegNYYzaHR0cDovL2Ny
bC51c2VydHJ1c3QuY29tL0FkZFRydXN0RXh0ZXJuYWxDQVJvb3QuY3JsMDUGCCsG
AQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNv
bTANBgkqhkiG9w0BAQUFAAOCAQEAAbyc42MosPMxAcLfe91ioAGdIzEPnJJzU1Hq
H0z61p/Eyi9nfngzD3QWuZGHkfWKJvpkcADYHvkLBGJQh5OB1Nr1I9s0u4VWtHA0
bniDNx6FHMURFZJfhxe9rGr98cLRzIlfsXzwPlHyNfN87GCYazor4O/fs32G67Ub
9VvsonyYE9cAULnRLXPeA3h04QWFMV7LmrmdlMa5lDd1ctxE+2fo8PolHlKn2iXp
R+CgxzygTrEKNvt3SJ/vl4r7tP7jlBSog7xcLT/SYHFg7sJxggzpiDbj2iC0o6Bs
qpZLuICOdcpJB/Y7FLrf3AXZn9vgsuZNoHgm5+ctbn9fxh6IFTCCBRowggQCoAMC
AQICEG0Z6qcZT2ozIuYiMnqqcd4wDQYJKoZIhvcNAQEFBQAwga4xCzAJBgNVBAYT
AlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNV
BAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51
c2VydHJ1c3QuY29tMTYwNAYDVQQDEy1VVE4tVVNFUkZpcnN0LUNsaWVudCBBdXRo
ZW50aWNhdGlvbiBhbmQgRW1haWwwHhcNMTEwNDI4MDAwMDAwWhcNMjAwNTMwMTA0
ODM4WjCBkzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3Rl
cjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQx
OTA3BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3Vy
ZSBFbWFpbCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKEhFtL
V5jUXi+LpOFAyKNTWF9mZfEyTvefMn1V0HhMVbdClOD5J3EHxcZppLkyxPFAGpDM
J1Zifxe1cWmu5SAb5MtjXmDKokH2auGj/7jfH0htZUOMKi4rYzh337EXrMLaggLW
1DJq1GdvIBOPXDX65VSAr9hxCh03CgJQU2yVHakQFLSZlVkSMf8JotJM3FLb3uJA
AVtIaN3FSrTg7SQfOq9xXwfjrL8UO7AlcWg99A/WF1hGFYE8aIuLgw9teiFX5jSw
2zJ+40rhpVJyZCaRTqWSD//gsWD9Gm9oUZljjRqLpcxCm5t9ImPTqaD8zp6Q30QZ
9FxbNboW86eb/8ECAwEAAaOCAUswggFHMB8GA1UdIwQYMBaAFImCZ33EnSZwAEu0
UEh83j2uBG59MB0GA1UdDgQWBBR6E04AdFvGeGNkJ8Ev4qBbvHnFezAOBgNVHQ8B
Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADARBgNVHSAECjAIMAYGBFUdIAAw
WAYDVR0fBFEwTzBNoEugSYZHaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1V
U0VSRmlyc3QtQ2xpZW50QXV0aGVudGljYXRpb25hbmRFbWFpbC5jcmwwdAYIKwYB
BQUHAQEEaDBmMD0GCCsGAQUFBzAChjFodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20v
VVROQWRkVHJ1c3RDbGllbnRfQ0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2Nz
cC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCF1r54V1VtM39EUv5C
1QaoAQOAivsNsv1Kv/avQUn1G1rF0q0bc24+6SZ85kyYwTAo38v7QjyhJT4KddbQ
PTmGZtGhm7VNm2+vKGwdr+XqdFqo2rHA8XV6L566k3nK/uKRHlZ0sviN0+BDchvt
j/1gOSBH+4uvOmVIPJg9pSW/ve9g4EnlFsjrP0OD8ODuDcHTzTNfm9C9YGqzO/76
1Mk6PB/tm/+bSTO+Qik5g+4zaS6CnUVNqGnagBsePdIaXXxHmaWbCG0SmYbWXVcH
G6cwvktJRLiQfsrReTjrtDP6oDpdJlieYVUYtCHVmdXgQ0BCML7qpeeU0rD+83X5
f27nMIIGODCCBSCgAwIBAgIQXNR7crEUyh3MQVnhtQuxBjANBgkqhkiG9w0BAQUF
ADCBkzELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQ
MA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxOTA3
BgNVBAMTMENPTU9ETyBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBF
bWFpbCBDQTAeFw0xMzAyMDUwMDAwMDBaFw0xNTAyMDUyMzU5NTlaMIIBQjELMAkG
A1UEBhMCVVMxDjAMBgNVBBETBTIxNzAxMQswCQYDVQQIEwJNRDESMBAGA1UEBxMJ
RnJlZGVyaWNrMRIwEAYDVQQJEwlTdWl0ZSAzMDAxHzAdBgNVBAkTFjE2IEVhc3Qg
UGF0cmljayBTdHJlZXQxIzAhBgNVBAoTGlVuaXRlZCBQYXlyb2xsIFN5c3RlbXMg
TExDMUAwPgYDVQQLEzdJc3N1ZWQgdGhyb3VnaCBVbml0ZWQgUGF5cm9sbCBTeXN0
ZW1zIExMQyBFLVBLSSBNYW5hZ2VyMR8wHQYDVQQLExZDb3Jwb3JhdGUgU2VjdXJl
IEVtYWlsMRowGAYDVQQDExFTdmVuIFdpbGxlbmJlcmdlcjEpMCcGCSqGSIb3DQEJ
ARYac3dpbGxlbmJlcmdlckB1cHNpY29ycC5jb20wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQD5Q+DkiQanYPeJZ7+ii+Y0s0eNi2sVwxBzk4d585oFpPde
bPI5DDUOMc0MLqiSEnUnoTxpksPYiGqYpKXoivmMrW4b/kKC751YOk0i1/b/0eQJ
/KGd92uRFPCEfRsYKi+x6OlqirdIaXhGc9MBuwJU38B/EC/GQoG5Sq7p7nBIoTfc
wXnn0MWEGkuMz1OTgxG9Ic5TcVapwj+H2URVuJaJ+x9thFHQNBe4VkbtZebw7rFc
m9RhSSHrW3VBaj8MWgvsIZURIqH6PWAMt5w286SYDcrnDBaCpUGDI8+CsllzGms7
dCVGewN5vZGxvJq1H7LAYBiGPEd+k5wj3WPR2F0HAgMBAAGjggHUMIIB0DAfBgNV
HSMEGDAWgBR6E04AdFvGeGNkJ8Ev4qBbvHnFezAdBgNVHQ4EFgQUnx0pVSkbQJFn
yoqGILUaSDZhGDwwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0l
BBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMCMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQEC
AQMFMCswKQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1BT
MFcGA1UdHwRQME4wTKBKoEiGRmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9E
T0NsaWVudEF1dGhlbnRpY2F0aW9uYW5kU2VjdXJlRW1haWxDQS5jcmwwgYgGCCsG
AQUFBwEBBHwwejBSBggrBgEFBQcwAoZGaHR0cDovL2NydC5jb21vZG9jYS5jb20v
Q09NT0RPQ2xpZW50QXV0aGVudGljYXRpb25hbmRTZWN1cmVFbWFpbENBLmNydDAk
BggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMCUGA1UdEQQeMByB
GnN3aWxsZW5iZXJnZXJAdXBzaWNvcnAuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCP
JHit3ozIqZQ4RiOzUYzDbrsHlPMLSwdzs60wOTlAnmbx+2NGqNjptbv46VD/C0y9
24rUd8xbYVciUryxYoU5nRho8Mi1FQogkR635zloieTja6X2d9SJyMTLs0EjbhHi
1Lk0TTfHrsz7pht11A4ib589LFYrXzM2Scneh//dOgsfos1N/AEuoXI4ooiHRo48
XSgknhSxhwaMIzmkleNpKpU/jtndFERcA3W/r47LY0MiDvjw0nPM2tN/BtuyFwX4
uZCsMIyBPKmrhk1mw9Df0h262J3OiV71FU3E+3SEiovdaTcUFYCoi7ZrOQRdGVoc
k/iDLxsuLmqqNRozODIfMYICWjCCAlYCAQEwgagwgZMxCzAJBgNVBAYTAkdCMRsw
GQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAY
BgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTkwNwYDVQQDEzBDT01PRE8gQ2xpZW50
IEF1dGhlbnRpY2F0aW9uIGFuZCBTZWN1cmUgRW1haWwgQ0ECEFzUe3KxFModzEFZ
4bULsQYwCQYFKw4DAhoFAKCBhzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwG
CSqGSIb3DQEJBTEPFw0xNDA2MjYyMDM5MjRaMCMGCSqGSIb3DQEJBDEWBBS7KznI
ldg3Qv024W7G6XiAqvg4BDAoBgkqhkiG9w0BCQ8xGzAZMAsGCWCGSAFlAwQBAjAK
BggqhkiG9w0DBzANBgkqhkiG9w0BAQEFAASCAQCcT6p8Nf/L3DOtY+K+sFChr3pE
OAZWbKjeUTSSLntO2vSg1JFjoMpNgJp2VE+QQ+0uEDuCjix46KRiZr0ejpKwoGte
zxc3SpEBRMcVXmaP020WUM4engIOL69ZXbtQ/M7gjqZEbOGoEwVJs0Y5GxBmExC3
vz7CCXWhyb5TJPlTzhPbNwD3cWqLf/c/M/yn5VMR0V7Nm58uKZVO4xn6HQdq8Cp2
pT+CbRlOOXYD2uIqgjbINc0XhB/3t7KPDq81iJCy/x94iDEfgfE3pwReti8t3TKJ
40O5FUC20u9ygFmedVjEYZItNzWupltiWMOBTcb3hFyoUnw2rhL+0lJgAzU+AAAA
AAAA

--Sig_/V6QIQ_GyO_U=Z=OyPY0jJtQ--

