From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by sourceware.org (Postfix) with ESMTPS id 97C7C387701E for ; Thu, 19 Mar 2020 13:09:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 97C7C387701E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gmx.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=n54@gmx.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1584623348; bh=WMVYVm5V9PYjL7CfOz8nbyFGTd0ak6chYeUhghrGPqI=; h=X-UI-Sender-Class:Subject:To:References:From:Date:In-Reply-To; b=aUW3G9vXmBUElSE712oXUX8FXsqW1lMXhFUZJWC4a+JayRE84b29ZDW9FiIov1fUZ Tpwt0RtiF/5/uAvPYPlNr80E4kXW/cO+FtQhaM0wN2CrLn9IWabm4ojoSDuTZW4pLd Rl9MbWkhzY5rP2sVXySW8TlHdbboa5eOXMdvFjHE= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.0.241] ([89.79.191.25]) by mail.gmx.com (mrgmx005 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MUXtS-1ioPo33FY0-00QTx5; Thu, 19 Mar 2020 14:09:07 +0100 Subject: Re: [PATCH] Implement "info proc mappings" for NetBSD To: Kamil Rytarowski , gdb-patches References: <20200316173424.25375-1-n54@gmx.com> From: Kamil Rytarowski Autocrypt: addr=n54@gmx.com; prefer-encrypt=mutual; keydata= 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 4XSbcg== Message-ID: <1724454c-7cef-5ae3-be93-b610033a8f70@gmx.com> Date: Thu, 19 Mar 2020 14:07:59 +0100 User-Agent: Mozilla/5.0 (X11; NetBSD amd64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200316173424.25375-1-n54@gmx.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="Tv4ntUjH2SE9HVX7mWwYNFbdcrkZ8yvXw" X-Provags-ID: V03:K1:klFVWoKP9rw6FbbeLORSneoi8WODvROJLAeQ2lHXtpib7LVQuWD VvwC0xeXzq+s0XA1wtKzdrhWy6FNRmIJqtFpho3h+IRR8Wy4MHoHq7esoFcCvROkYhoUgV/ eeIWzOijDyR0XWRVJeGeCeOigimwlyg2RA886VMcTzzsjNC/1hpr9pCMK3fxNdrgEsuIaUU a1c3OuO5Ged0o2kKVoqJQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:gZPEpEfE8Zg=:SYQIlmd9ufN4K+RBAjuPY9 bh/aQBDv7p7KFsUYc6ruHB3bH/kex8o59bH7p+jn9pwJyDf6gGqUI88zePfReLTfYRo3a06FS YDHoJiOD8CL7K5lNMzOu9Z5JLelFnro8ZE0JI3jH5ri8w8v5sDJMLJHjzHGc2yp28S8gbMO0O 7VG7X6hBSEj7GEiNuHPcKSnU5y554T5bBoSVleqnCYo1GVWDfNle2UFPGQvkOAvJgYGhnm/FE Jl420CsZh5xXMFlwmdtppLkbmvLbJse9eNTs9HQcB4TRY2hFP53N13vE1EaY/qCKyMuqyWPd2 nKZI3bV1Zu/bffSFZvqcnG0Hy+eZZ6BzAmzrHbAa8gKtCqyG2iBL8CB7GSfoMq5f9zPtWRAXP ADOS3wwuLmAflMjr2n1kO1fYAEa0OjL45Ryj7o7Oslg1VelV6PK9atMIbw+w0GcudUf9DKdzn 8mYZbgGaa2u0xCqXfXT5BiVKkQtKxwiITNVVnjQlouR8kVfcouU509FWTgzQt2a5OaS8tPeuV K8hhVSW8Wtecj4rYvAFWganlSSgOnVbtgaQEoHeVJayfmO2Mk9DBZ/GfsYOeQv582SkEMGgta 0jpCDQzs5byHCZX6wL4CQgoH+8LtwhVP4xW9B6gUOzmswpA+3AzIziRFnOkC+7GDNXVFkHJS7 H2v9oJ+HH3kMyaMq2lKYBlL3s+kRkJ1jl3srP76AK374Ewx7ed90eE/6CLHDOqJsFDkMd5ANy Cvma4/ZcYxS9nqL6Zd+Bc5fRNmtGLLcLuPM8poOM7APlcWUNdD7FCCDqYItABDoc8fMcGO4We tYu4ElNVbWI1jw/c3BuP4kVHN+EcAlfiPDuif9Lb49gTJTRDNiXzisRsWGWfMgU/gpClE+OEM Q5OjZvScdHfhlQU+y4QSOpzlDkHMvgtaA+xFLR27WL+0x9+uir5TA/CSkVISePb+Q4+cWKMNv 7BDQklTeBpL3u8V7m3SSVpNXTT4wolmgzIkbO+rDgtOX67a10dptnbudhQPGNGq+zDiU8QVXv jhBg/QN6lNitfVhzDIXVB6Q23JonwdyzoSbqIEIDd8psYisqte8mWUYQK7jF9ZI/iSMxg2UiY GR6K0kDcqex59jGJy+NgHuaTAxSbNW+U1o9UVF+WP1hXuRGDLpFdnaMX7UxJfwpGFhNuHLLpW BkfnPZAjIbAjwyiiuh3iDqkQJx3+OMKzBSiB59aTzYDLN4UF4B3ckXhABcfYnjksod6U0= X-Spam-Status: No, score=-25.2 required=5.0 tests=DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, URIBL_CSS, URIBL_CSS_A autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Mar 2020 13:09:11 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --Tv4ntUjH2SE9HVX7mWwYNFbdcrkZ8yvXw Content-Type: multipart/mixed; boundary="QpfW4JOJh6CywtOMnmnxeGmdR3OyEqtkk"; protected-headers="v1" From: Kamil Rytarowski To: Kamil Rytarowski , gdb-patches Message-ID: <1724454c-7cef-5ae3-be93-b610033a8f70@gmx.com> Subject: Re: [PATCH] Implement "info proc mappings" for NetBSD References: <20200316173424.25375-1-n54@gmx.com> In-Reply-To: <20200316173424.25375-1-n54@gmx.com> --QpfW4JOJh6CywtOMnmnxeGmdR3OyEqtkk Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Ping? I depend on this patch with more feature in "info proc" and This one is mostly resuing prior art from the FreeBSD code. On 16.03.2020 18:34, Kamil Rytarowski wrote: > Define nbsd_nat_target::find_memory_regions and > nbsd_nat_target::info_proc. info_proc handles as of now only > the "mappings" command. >=20 > Define a local static function kinfo_get_vmmap() that reads > the process memory layout of a specified process. > kinfo_get_vmmap() wraps the sysctl(3) call. >=20 > nbsd-tdep.c defines now utility functions for printing the > process memory layout: > * nbsd_info_proc_mappings_header() > * nbsd_vm_map_entry_flags() > * nbsd_info_proc_mappings_entry() >=20 > This code is based on the FreeBSD implementation. >=20 > gdb/ChangeLog: >=20 > * nbsd-nat.c; Include "nbsd-tdep.h", "inferior.h" and "gdbarch.h". > * nbsd-nat.c (nbsd_nat_target::find_memory_regions) > (nbsd_nat_target::info_proc): New functions. > * nbsd-nat.c (kinfo_get_vmmap): New function. > * nbsd-nat.c (nbsd_nat_target::info_proc) Use > nbsd_info_proc_mappings_header and nbsd_info_proc_mappings_entry. > * nbsd-tdep.c (nbsd_info_proc_mappings_header) > (nbsd_info_proc_mappings_entry, nbsd_vm_map_entry_flags): New > functions. > * nbsd-tdep.c (KINFO_VME_PROT_READ, KINFO_VME_PROT_WRITE) > (KINFO_VME_PROT_EXEC, KINFO_VME_FLAG_COW) > (KINFO_VME_FLAG_NEEDS_COPY, KINFO_VME_FLAG_NOCOREDUMP) > (KINFO_VME_FLAG_PAGEABLE, KINFO_VME_FLAG_GROWS_UP) > (KINFO_VME_FLAG_GROWS_DOWN): New. > --- > gdb/ChangeLog | 17 ++++++ > gdb/nbsd-nat.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++++= > gdb/nbsd-nat.h | 2 + > gdb/nbsd-tdep.c | 91 +++++++++++++++++++++++++++++ > gdb/nbsd-tdep.h | 18 ++++++ > 5 files changed, 277 insertions(+) >=20 > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index a0d97584189..b690222068a 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,20 @@ > +2020-03-16 Kamil Rytarowski > + > + * nbsd-nat.c; Include "nbsd-tdep.h", "inferior.h" and "gdbarch.h". > + * nbsd-nat.c (nbsd_nat_target::find_memory_regions) > + (nbsd_nat_target::info_proc): New functions. > + * nbsd-nat.c (kinfo_get_vmmap): New function. > + * nbsd-nat.c (nbsd_nat_target::info_proc) Use > + nbsd_info_proc_mappings_header and nbsd_info_proc_mappings_entry. > + * nbsd-tdep.c (nbsd_info_proc_mappings_header) > + (nbsd_info_proc_mappings_entry, nbsd_vm_map_entry_flags): New > + functions. > + * nbsd-tdep.c (KINFO_VME_PROT_READ, KINFO_VME_PROT_WRITE) > + (KINFO_VME_PROT_EXEC, KINFO_VME_FLAG_COW) > + (KINFO_VME_FLAG_NEEDS_COPY, KINFO_VME_FLAG_NOCOREDUMP) > + (KINFO_VME_FLAG_PAGEABLE, KINFO_VME_FLAG_GROWS_UP) > + (KINFO_VME_FLAG_GROWS_DOWN): New. > + > 2020-03-14 Tom Tromey >=20 > * c-typeprint.c (cp_type_print_method_args): Print "__restrict__" > diff --git a/gdb/nbsd-nat.c b/gdb/nbsd-nat.c > index e7f91bebb0d..3cafd24b1dc 100644 > --- a/gdb/nbsd-nat.c > +++ b/gdb/nbsd-nat.c > @@ -20,6 +20,9 @@ > #include "defs.h" >=20 > #include "nbsd-nat.h" > +#include "nbsd-tdep.h" > +#include "inferior.h" > +#include "gdbarch.h" >=20 > /* Return the name of a file that can be opened to get the symbols for= > the child process identified by PID. */ > @@ -41,3 +44,149 @@ nbsd_nat_target::pid_to_exec_file (int pid) >=20 > return NULL; > } > + > +/* Retrieve all the memory regions in the specified process. */ > + > +static struct kinfo_vmentry * > +kinfo_get_vmmap(pid_t pid, size_t *size) > +{ > + int mib[5] =3D {CTL_VM, VM_PROC, VM_PROC_MAP, pid, sizeof(struct kin= fo_vmentry)}; > + > + size_t length =3D 0; > + if (sysctl(mib, ARRAY_SIZE (mib), NULL, &length, NULL, 0)) { > + *size =3D 0; > + return NULL; > + } > + > + /* Prereserve more space. */ > + length =3D length * 5 / 3; > + > + struct kinfo_vmentry *kiv =3D (struct kinfo_vmentry *) calloc(length= , 1); > + if (kiv =3D=3D NULL) { > + *size =3D 0; > + return NULL; > + } > + > + if (sysctl(mib, ARRAY_SIZE (mib), kiv, &length, NULL, 0)) { > + *size =3D 0; > + free(kiv); > + return NULL; > + } > + > + *size =3D length / sizeof(*kiv); > + return kiv; > +} > + > +/* Iterate over all the memory regions in the current inferior, > + calling FUNC for each memory region. OBFD is passed as the last > + argument to FUNC. */ > + > +int > +nbsd_nat_target::find_memory_regions (find_memory_region_ftype func, > + void *obfd) > +{ > + pid_t pid =3D inferior_ptid.pid (); > + struct kinfo_vmentry *kve; > + uint64_t size; > + int i; > + size_t nitems; > + > + gdb::unique_xmalloc_ptr > + vmentl (kinfo_get_vmmap (pid, &nitems)); > + if (vmentl =3D=3D NULL) > + perror_with_name (_("Couldn't fetch VM map entries.")); > + > + for (i =3D 0, kve =3D vmentl.get (); i < nitems; i++, kve++) > + { > + /* Skip unreadable segments and those where MAP_NOCORE has been = set. */ > + if (!(kve->kve_protection & KVME_PROT_READ) > + || kve->kve_flags & KVME_FLAG_NOCOREDUMP) > + continue; > + > + /* Skip segments with an invalid type. */ > + switch (kve->kve_type) { > + case KVME_TYPE_VNODE: > + case KVME_TYPE_ANON: > + case KVME_TYPE_SUBMAP: > + case KVME_TYPE_OBJECT: > + break; > + default: > + continue; > + } > + > + size =3D kve->kve_end - kve->kve_start; > + if (info_verbose) > + { > + fprintf_filtered (gdb_stdout, > + "Save segment, %ld bytes at %s (%c%c%c)\n", > + (long) size, > + paddress (target_gdbarch (), kve->kve_start), > + kve->kve_protection & KVME_PROT_READ ? 'r' : '-', > + kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-', > + kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-'); > + } > + > + /* Invoke the callback function to create the corefile segment. > + Pass MODIFIED as true, we do not know the real modification state. = */ > + func (kve->kve_start, size, kve->kve_protection & KVME_PROT_READ= , > + kve->kve_protection & KVME_PROT_WRITE, > + kve->kve_protection & KVME_PROT_EXEC, 1, obfd); > + } > + return 0; > +} > + > +/* Implement the "info_proc" target_ops method. */ > + > +bool > +nbsd_nat_target::info_proc (const char *args, enum info_proc_what what= ) > +{ > + pid_t pid; > + bool do_mappings =3D false; > + > + switch (what) > + { > + case IP_MAPPINGS: > + do_mappings =3D true; > + break; > + default: > + error (_("Not supported on this target.")); > + } > + > + gdb_argv built_argv (args); > + if (built_argv.count () =3D=3D 0) > + { > + pid =3D inferior_ptid.pid (); > + if (pid =3D=3D 0) > + error (_("No current process: you must name one.")); > + } > + else if (built_argv.count () =3D=3D 1 && isdigit (built_argv[0][0]))= > + pid =3D strtol (built_argv[0], NULL, 10); > + else > + error (_("Invalid arguments.")); > + > + printf_filtered (_("process %d\n"), pid); > + > + if (do_mappings) > + { > + size_t nvment; > + gdb::unique_xmalloc_ptr > + vmentl (kinfo_get_vmmap (pid, &nvment)); > + > + if (vmentl !=3D nullptr) > + { > + int addr_bit =3D TARGET_CHAR_BIT * sizeof (void *); > + nbsd_info_proc_mappings_header (addr_bit); > + > + struct kinfo_vmentry *kve =3D vmentl.get (); > + for (int i =3D 0; i < nvment; i++, kve++) > + nbsd_info_proc_mappings_entry (addr_bit, kve->kve_start, > + kve->kve_end, kve->kve_offset, > + kve->kve_flags, kve->kve_protection, > + kve->kve_path); > + } > + else > + warning (_("unable to fetch virtual memory map")); > + } > + > + return true; > +} > diff --git a/gdb/nbsd-nat.h b/gdb/nbsd-nat.h > index a752fbe572d..98af21d0bda 100644 > --- a/gdb/nbsd-nat.h > +++ b/gdb/nbsd-nat.h > @@ -27,6 +27,8 @@ > struct nbsd_nat_target : public inf_ptrace_target > { > char *pid_to_exec_file (int pid) override; > + int find_memory_regions (find_memory_region_ftype func, void *data) = override; > + bool info_proc (const char *, enum info_proc_what) override; > }; >=20 > #endif /* nbsd-nat.h */ > diff --git a/gdb/nbsd-tdep.c b/gdb/nbsd-tdep.c > index 49bb2b706bd..23732854172 100644 > --- a/gdb/nbsd-tdep.c > +++ b/gdb/nbsd-tdep.c > @@ -23,6 +23,23 @@ > #include "solib-svr4.h" > #include "nbsd-tdep.h" >=20 > +/* Flags in the 'kve_protection' field in struct kinfo_vmentry. These= > + match the KVME_PROT_* constants in . */ > + > +#define KINFO_VME_PROT_READ 0x00000001 > +#define KINFO_VME_PROT_WRITE 0x00000002 > +#define KINFO_VME_PROT_EXEC 0x00000004 > + > +/* Flags in the 'kve_flags' field in struct kinfo_vmentry. These > + match the KVME_FLAG_* constants in . */ > + > +#define KINFO_VME_FLAG_COW 0x00000001 > +#define KINFO_VME_FLAG_NEEDS_COPY 0x00000002 > +#define KINFO_VME_FLAG_NOCOREDUMP 0x00000004 > +#define KINFO_VME_FLAG_PAGEABLE 0x00000008 > +#define KINFO_VME_FLAG_GROWS_UP 0x00000010 > +#define KINFO_VME_FLAG_GROWS_DOWN 0x00000020 > + > /* FIXME: kettenis/20060115: We should really eliminate the next two > functions completely. */ >=20 > @@ -47,3 +64,77 @@ nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *func_= name) > return (func_name !=3D NULL > && startswith (func_name, "__sigtramp")); > } > + > +/* See fbsd-tdep.h. */ > + > +void > +nbsd_info_proc_mappings_header (int addr_bit) > +{ > + printf_filtered (_("Mapped address spaces:\n\n")); > + if (addr_bit =3D=3D 64) > + { > + printf_filtered (" %18s %18s %10s %10s %9s %s\n", > + "Start Addr", > + " End Addr", > + " Size", " Offset", "Flags ", "File"); > + } > + else > + { > + printf_filtered ("\t%10s %10s %10s %10s %9s %s\n", > + "Start Addr", > + " End Addr", > + " Size", " Offset", "Flags ", "File"); > + } > +} > + > +/* Helper function to generate mappings flags for a single VM map > + entry in 'info proc mappings'. */ > + > +static const char * > +nbsd_vm_map_entry_flags (int kve_flags, int kve_protection) > +{ > + static char vm_flags[9]; > + > + vm_flags[0] =3D (kve_protection & KINFO_VME_PROT_READ) ? 'r' : '-'; > + vm_flags[1] =3D (kve_protection & KINFO_VME_PROT_WRITE) ? 'w' : '-';= > + vm_flags[2] =3D (kve_protection & KINFO_VME_PROT_EXEC) ? 'x' : '-'; > + vm_flags[3] =3D ' '; > + vm_flags[4] =3D (kve_flags & KINFO_VME_FLAG_COW) ? 'C' : '-'; > + vm_flags[5] =3D (kve_flags & KINFO_VME_FLAG_NEEDS_COPY) ? 'N' : '-';= > + vm_flags[6] =3D (kve_flags & KINFO_VME_FLAG_PAGEABLE) ? 'P' : '-'; > + vm_flags[7] =3D (kve_flags & KINFO_VME_FLAG_GROWS_UP) ? 'U' > + : (kve_flags & KINFO_VME_FLAG_GROWS_DOWN) ? 'D' : '-'; > + vm_flags[8] =3D '\0'; > + > + return vm_flags; > +} > + > +/* See nbsd-tdep.h. */ > + > +void > +nbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start, > + ULONGEST kve_end, ULONGEST kve_offset, > + int kve_flags, int kve_protection, > + const void *kve_path) > +{ > + if (addr_bit =3D=3D 64) > + { > + printf_filtered (" %18s %18s %10s %10s %9s %s\n", > + hex_string (kve_start), > + hex_string (kve_end), > + hex_string (kve_end - kve_start), > + hex_string (kve_offset), > + nbsd_vm_map_entry_flags (kve_flags, kve_protection), > + reinterpret_cast (kve_path)); > + } > + else > + { > + printf_filtered ("\t%10s %10s %10s %10s %9s %s\n", > + hex_string (kve_start), > + hex_string (kve_end), > + hex_string (kve_end - kve_start), > + hex_string (kve_offset), > + nbsd_vm_map_entry_flags (kve_flags, kve_protection), > + reinterpret_cast (kve_path)); > + } > +} > diff --git a/gdb/nbsd-tdep.h b/gdb/nbsd-tdep.h > index c99a8b537b6..81bdb2510f5 100644 > --- a/gdb/nbsd-tdep.h > +++ b/gdb/nbsd-tdep.h > @@ -25,4 +25,22 @@ struct link_map_offsets *nbsd_lp64_solib_svr4_fetch_= link_map_offsets (void); >=20 > int nbsd_pc_in_sigtramp (CORE_ADDR, const char *); >=20 > +/* Output the header for "info proc mappings". ADDR_BIT is the size > + of a virtual address in bits. */ > + > +extern void nbsd_info_proc_mappings_header (int addr_bit); > + > +/* Output description of a single memory range for "info proc > + mappings". ADDR_BIT is the size of a virtual address in bits. The= > + KVE_START, KVE_END, KVE_OFFSET, KVE_FLAGS, and KVE_PROTECTION > + parameters should contain the value of the corresponding fields in > + a 'struct kinfo_vmentry'. The KVE_PATH parameter should contain a > + pointer to the 'kve_path' field in a 'struct kinfo_vmentry'. */ > + > +extern void nbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_= start, > + ULONGEST kve_end, > + ULONGEST kve_offset, > + int kve_flags, int kve_protection, > + const void *kve_path); > + > #endif /* NBSD_TDEP_H */ > -- > 2.25.0 >=20 --QpfW4JOJh6CywtOMnmnxeGmdR3OyEqtkk-- --Tv4ntUjH2SE9HVX7mWwYNFbdcrkZ8yvXw Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEELaxVpweEzw+lMDwuS7MI6bAudmwFAl5zbq8ACgkQS7MI6bAu dmxYLA//ZwXeFKUWzdB6gFevDhTchRdd4jX7PtAbyAclJU+oRHKRObdmlsVZycga CDzYy/6PqMya5pVGWs/Uj4bFhV6NMeySOHMCQYxXcRWbxIQYVB7QKjlUGtrCpljn xKCU5og4HuPDpJMAsM4ZVLJm0O8oxXVrOFBxSAUgDhT7nZbSIXbGxM+d2Bjpvbea ngiYd5Z20IVv1eWvn05oBdADb6UIdT29QVSkyUDNs0bJB+11ztaxfTehKsRS+G2X xtIXZ8ZtX31HkATANQCD9jo5SI/KXkM3/vtcYs5N5jaDcWMDOc3xasY6sjd/rq1e CY6mA12h4B/7WOCv4SY7S333PZrJLiJMJBqg6y3Qsfi0PpppS9Aqo6MT6qzqlGHc RkwuvLZ4fU9Tor3RLjZowCF0gTxykUpAK5lVsv6sIiCNjnqgPuovVVrIeEvpnuHi g7rAUMXqy8kndMNA6AaPouHjYOgD9zTvZx4zqEaTEMjMnKkCUo4IoRUbWLkpTB3c 2xFmHS+Bah3R7ZNxNoCcP5iORPd/hX5JPeocObyo+Cj7DrQu46g8y/RBnkoc91eB oA1FtpFlFmxhFa19I/bZkeupMD261lKr1w1fDNZUHTbEKVqym53BRdo7nhoP+XYE hlcrM6w5GClKZidN/RtzMwkGjSlSKAIdCQqA3OoHoextocSkzU0= =JuWi -----END PGP SIGNATURE----- --Tv4ntUjH2SE9HVX7mWwYNFbdcrkZ8yvXw--