From nobody Sat Nov 15 07:45:37 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=protonmail.com ARC-Seal: i=1; a=rsa-sha256; t=1753993526; cv=none; d=zohomail.com; s=zohoarc; b=U2c7M7VTStyXyMoovEomXUf+jyjXCgKCufdXTv3kurgHr+D5Nq4FOYDDiR1N2tjg+iJYV16ooJX6BzHp8tmAxxjJ/c7bEneFbpHTYsQLsjE6QZ59rHJziXdrn8na4ISQoFwnStRicDPtgd3Cld70uNQUoO9zpxSgeFYL5RY+v18= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753993526; h=Content-Type:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aOJxzlO5lRnRLPRbGDKSZxn14JR37of3LEb43uL3u3w=; b=m23XcRFHH0mdQEQ4UBvOZGlvD6wHWGBn0jy1dcAmT/xy86tnnqzJuUjT9ToznpxdbWoTexUO2cpijzAgBQsC/18gyxxbVoNa1Ym+qpN8uuM6NdtUhsEOF5QvFWI3I9P4cGphQLgs8m0BIz8RdX56vco0hfrosGiOiSdx9BZD9rw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1753993526087705.5877374127529; Thu, 31 Jul 2025 13:25:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uhZps-0003aw-P8; Thu, 31 Jul 2025 16:25:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uhYJ2-0001zK-5O for qemu-devel@nongnu.org; Thu, 31 Jul 2025 14:47:14 -0400 Received: from mail-24424.protonmail.ch ([109.224.244.24]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uhYIy-0006kz-1T for qemu-devel@nongnu.org; Thu, 31 Jul 2025 14:47:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1753987618; x=1754246818; bh=aOJxzlO5lRnRLPRbGDKSZxn14JR37of3LEb43uL3u3w=; h=Date:To:From:Cc:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=KQOXKnYSGEYQy1E8jN/GQXNx58fM5hd8hKE+7HGvxJvWvq0N0a1sEs1p75idH+Uu1 ifjVWuTBYXDkK+6osWC23McpetFBDc/7+5oMt/VHM4lGNN3zCIU39d/r49nDrMTl8r dBqUmtX5I7sDs3f0GOjjwNVSLgS62eS6Z3e6ReGIbj2UzVPzdbh/7w590VYPhxryX+ 1I/IOkIGifuYs722691SYglgt/XjHFTob+FdwTPx/AzInSxp9LEPbWJ61WOz7pW/8G AqOwLdoNQCp0o/EUTjhcWheCpwmY2UNw+pUgCULpYZsNvu0w8NHrH/X+o2cu9w7KqP OnJEy4t1stZfQ== Date: Thu, 31 Jul 2025 18:46:52 +0000 To: "qemu-devel@nongnu.org" From: startergo Cc: "pbonzini@redhat.com" , =?utf-8?Q?Marc-Andr=C3=A9_Lureau?= Subject: Subject: [PATCH] ui/sdl2: Add SDL clipboard support Message-ID: Feedback-ID: 25315608:user:proton X-Pm-Message-ID: 8afc2dc1e5f8b6edbecb47d92b0d8b5da639e521 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1=_v2zO5OaSMaXVRZ3Z1X3cS4mjtgBcsIOzxIXD3FjIc" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=109.224.244.24; envelope-from=startergo@protonmail.com; helo=mail-24424.protonmail.ch X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_MIME_MALF=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @protonmail.com) X-ZM-MESSAGEID: 1753993528772116600 --b1=_v2zO5OaSMaXVRZ3Z1X3cS4mjtgBcsIOzxIXD3FjIc Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From 89affd7e5b1ac9fcf9f10e483d9e4e63328a42fa Mon Sep 17 00:00:00 2001 From: startergo Date: Thu, 31 Jul 2025 19:36:07 +0300 Subject: [PATCH 1/1] ui/sdl2: Add SDL clipboard support MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, marcandre.lureau@redhat.com Implement bidirectional clipboard integration between QEMU and host system when using the SDL display backend. This allows seamless copy-paste operations between the guest and host environments. Features: - Bidirectional clipboard sync (guest =E2=86=94 host) - Async clipboard request handling to prevent blocking - Self-update detection to avoid clipboard manager conflicts - Configurable via --enable-sdl-clipboard build option - Text-only clipboard support (following existing QEMU patterns) The implementation follows the same patterns used by the existing GTK and VNC clipboard implementations, integrating with QEMU's clipboard subsystem through QemuClipboardPeer. Tested on macOS with successful build and runtime clipboard functionality verification. Co-authored-by: Kamay Xutax Signed-off-by: startergo --- include/ui/sdl2.h | 12 ++++ meson.build | 3 + meson_options.txt | 2 + ui/meson.build | 3 + ui/sdl2-clipboard.c | 154 ++++++++++++++++++++++++++++++++++++++++++++ ui/sdl2.c | 9 +++ 6 files changed, 183 insertions(+) create mode 100644 ui/sdl2-clipboard.c diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h index dbe6e3d973..0cadbe8c1c 100644 --- a/include/ui/sdl2.h +++ b/include/ui/sdl2.h @@ -21,6 +21,10 @@ # include #endif +#ifdef CONFIG_SDL_CLIPBOARD +#include "ui/clipboard.h" +#endif + #include "ui/kbd-state.h" #ifdef CONFIG_OPENGL # include "ui/egl-helpers.h" @@ -45,6 +49,9 @@ struct sdl2_console { bool gui_keysym; SDL_GLContext winctx; QKbdState *kbd; +#ifdef CONFIG_SDL_CLIPBOARD + QemuClipboardPeer cbpeer; +#endif #ifdef CONFIG_OPENGL QemuGLShader *gls; egl_fb guest_fb; @@ -97,4 +104,9 @@ void sdl2_gl_scanout_texture(DisplayChangeListener *dcl, void sdl2_gl_scanout_flush(DisplayChangeListener *dcl, uint32_t x, uint32_t y, uint32_t w, uint32_t h); +#ifdef CONFIG_SDL_CLIPBOARD +void sdl2_clipboard_init(struct sdl2_console *scon); +void sdl2_clipboard_handle_request(struct sdl2_console *scon); +#endif + #endif /* SDL2_H */ diff --git a/meson.build b/meson.build index 41f68d3806..4a37df9669 100644 --- a/meson.build +++ b/meson.build @@ -1596,6 +1596,8 @@ else sdl_image =3D not_found endif +have_sdl_clipboard =3D sdl.found() and get_option('sdl_clipboard') + rbd =3D not_found if not get_option('rbd').auto() or have_block librados =3D cc.find_library('rados', required: get_option('rbd')) @@ -2511,6 +2513,7 @@ config_host_data.set('CONFIG_RELOCATABLE', get_option= ('relocatable')) config_host_data.set('CONFIG_SAFESTACK', get_option('safe_stack')) config_host_data.set('CONFIG_SDL', sdl.found()) config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) +config_host_data.set('CONFIG_SDL_CLIPBOARD', have_sdl_clipboard) config_host_data.set('CONFIG_SECCOMP', seccomp.found()) if seccomp.found() config_host_data.set('CONFIG_SECCOMP_SYSRAWRC', seccomp_has_sysrawrc) diff --git a/meson_options.txt b/meson_options.txt index 59d973bca0..be2cba3a30 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -212,6 +212,8 @@ option('sdl', type : 'feature', value : 'auto', description: 'SDL user interface') option('sdl_image', type : 'feature', value : 'auto', description: 'SDL Image support for icons') +option('sdl_clipboard', type : 'boolean', value : true, + description: 'SDL clipboard support') option('seccomp', type : 'feature', value : 'auto', description: 'seccomp support') option('smartcard', type : 'feature', value : 'auto', diff --git a/ui/meson.build b/ui/meson.build index 35fb04cadf..6d1bf3477e 100644 --- a/ui/meson.build +++ b/ui/meson.build @@ -126,6 +126,9 @@ if sdl.found() 'sdl2-input.c', 'sdl2.c', )) + if have_sdl_clipboard + sdl_ss.add(files('sdl2-clipboard.c')) + endif sdl_ss.add(when: opengl, if_true: files('sdl2-gl.c')) sdl_ss.add(when: x11, if_true: files('x_keymap.c')) ui_modules +=3D {'sdl' : sdl_ss} diff --git a/ui/sdl2-clipboard.c b/ui/sdl2-clipboard.c new file mode 100644 index 0000000000..e50ff11d5a --- /dev/null +++ b/ui/sdl2-clipboard.c @@ -0,0 +1,154 @@ +/* + * SDL UI -- clipboard support (improved async version) + * + * Copyright (C) 2023 Kamay Xutax + * Copyright (C) 2025 startergo + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "ui/console.h" +#include "ui/clipboard.h" +#include "ui/sdl2.h" +#include "qemu/log.h" + +#ifdef CONFIG_SDL_CLIPBOARD + +/* Track pending clipboard requests to handle async data */ +typedef struct { + struct sdl2_console *scon; + QemuClipboardInfo *info; + QemuClipboardType type; +} SDLClipboardRequest; + +static SDLClipboardRequest *pending_request =3D NULL; + +static void sdl2_clipboard_clear_pending(void) +{ + if (pending_request) { + if (pending_request->info) { + qemu_clipboard_info_unref(pending_request->info); + } + g_free(pending_request); + pending_request =3D NULL; + } +} + +static void sdl2_clipboard_notify(Notifier *notifier, void *data) +{ + QemuClipboardNotify *notify =3D data; + struct sdl2_console *scon =3D + container_of(notifier, struct sdl2_console, cbpeer.notifier); + bool self_update =3D notify->info->owner =3D=3D &scon->cbpeer; + const char *text_data; + size_t text_size; + + switch (notify->type) { + case QEMU_CLIPBOARD_UPDATE_INFO: + { + /* Skip self-updates to avoid clipboard manager conflicts */ + if (self_update) { + return; + } + + if (!notify->info->types[QEMU_CLIPBOARD_TYPE_TEXT].available) { + return; + } + + /* Check if this is completion of our pending request */ + if (pending_request && pending_request->info =3D=3D notify->info && + pending_request->type =3D=3D QEMU_CLIPBOARD_TYPE_TEXT) { + sdl2_clipboard_clear_pending(); + } + + /* Check if data is available, request asynchronously if not */ + if (!notify->info->types[QEMU_CLIPBOARD_TYPE_TEXT].data) { + if (!pending_request) { + pending_request =3D g_new0(SDLClipboardRequest, 1); + pending_request->scon =3D scon; + pending_request->info =3D qemu_clipboard_info_ref(notify->info); + pending_request->type =3D QEMU_CLIPBOARD_TYPE_TEXT; + qemu_clipboard_request(notify->info, QEMU_CLIPBOARD_TYPE_TEXT); + } + return; + } + + /* Process available data */ + text_size =3D notify->info->types[QEMU_CLIPBOARD_TYPE_TEXT].size; + if (text_size =3D=3D 0) { + return; + } + + text_data =3D (const char *)notify->info->types[QEMU_CLIPBOARD_TYPE_TEXT]= .data; + + /* Ensure null termination for SDL clipboard */ + g_autofree char *text =3D g_strndup(text_data, text_size); + if (text && text[0] !=3D '\0') { + SDL_SetClipboardText(text); + } else if (!text) { + qemu_log_mask(LOG_GUEST_ERROR, + "SDL clipboard: Failed to allocate memory for clipboard text\n"); + } + break; + } + case QEMU_CLIPBOARD_RESET_SERIAL: + sdl2_clipboard_clear_pending(); + break; + } +} + +static void sdl2_clipboard_request(QemuClipboardInfo *info, + QemuClipboardType type) +{ + g_autofree char *text =3D NULL; + + if (type !=3D QEMU_CLIPBOARD_TYPE_TEXT) { + return; + } + + text =3D SDL_GetClipboardText(); + if (!text) { + qemu_log_mask(LOG_GUEST_ERROR, + "SDL clipboard: Failed to get clipboard text: %s\n", + SDL_GetError()); + return; + } + + qemu_clipboard_set_data(info->owner, info, type, + strlen(text), text, true); +} + +void sdl2_clipboard_init(struct sdl2_console *scon) +{ + scon->cbpeer.name =3D "sdl2-clipboard"; + scon->cbpeer.notifier.notify =3D sdl2_clipboard_notify; + scon->cbpeer.request =3D sdl2_clipboard_request; + + qemu_clipboard_peer_register(&scon->cbpeer); +} + +void sdl2_clipboard_handle_request(struct sdl2_console *scon) +{ + g_autofree char *text =3D NULL; + QemuClipboardInfo *info; + + text =3D SDL_GetClipboardText(); + if (!text) { + qemu_log_mask(LOG_GUEST_ERROR, + "SDL clipboard: Failed to get clipboard text: %s\n", + SDL_GetError()); + return; + } + + if (text[0] =3D=3D '\0') { + return; /* Ignore empty clipboard */ + } + + info =3D qemu_clipboard_info_new(&scon->cbpeer, QEMU_CLIPBOARD_SELECTION_= CLIPBOARD); + qemu_clipboard_set_data(&scon->cbpeer, info, QEMU_CLIPBOARD_TYPE_TEXT, + strlen(text), text, true); + qemu_clipboard_info_unref(info); +} + +#endif /* CONFIG_SDL_CLIPBOARD */ diff --git a/ui/sdl2.c b/ui/sdl2.c index cda4293a53..00a17b68a7 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -691,6 +691,11 @@ void sdl2_poll_events(struct sdl2_console *scon) case SDL_WINDOWEVENT: handle_windowevent(ev); break; +#ifdef CONFIG_SDL_CLIPBOARD + case SDL_CLIPBOARDUPDATE: + sdl2_clipboard_handle_request(scon); + break; +#endif default: break; } @@ -901,6 +906,10 @@ static void sdl2_display_init(DisplayState *ds, Displa= yOptions *o) } register_displaychangelistener(&sdl2_console[i].dcl); +#ifdef CONFIG_SDL_CLIPBOARD + sdl2_clipboard_init(&sdl2_console[i]); +#endif + #if defined(SDL_VIDEO_DRIVER_WINDOWS) || defined(SDL_VIDEO_DRIVER_X11) if (SDL_GetWindowWMInfo(sdl2_console[i].real_window, &info)) { #if defined(SDL_VIDEO_DRIVER_WINDOWS) -- 2.50.1 Sent with [Proton Mail](https://proton.me/mail/home) secure email. --b1=_v2zO5OaSMaXVRZ3Z1X3cS4mjtgBcsIOzxIXD3FjIc Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0 cHg7Ij48ZGl2IHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyB0ZXh0LWRlY29yYXRpb246IG5v bmU7IGZvbnQtZmFtaWx5OiBNZW5sbywgTW9uYWNvLCAmcXVvdDtDb3VyaWVyIE5ldyZxdW90Oywg bW9ub3NwYWNlOyBmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxOHB4OyB3aGl0ZS1zcGFj ZTogcHJlOyBjb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Io MzEsIDMxLCAzMSk7Ij48c3Bhbj48c3Bhbj5Gcm9tIDg5YWZmZDdlNWIxYWM5ZmNmOWYxMGU0ODNk OWU0ZTYzMzI4YTQyZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxPC9zcGFuPjwvc3Bhbj48ZGl2 PjxzcGFuPkZyb206IHN0YXJ0ZXJnbyAmbHQ7c3RhcnRlcmdvQHByb3Rvbm1haWwuY29tJmd0Ozwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuPkRhdGU6IFRodSwgMzEgSnVsIDIwMjUgMTk6MzY6MDcgKzAz MDA8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5TdWJqZWN0OiBbUEFUQ0ggMS8xXSB1aS9zZGwyOiBB ZGQgU0RMIGNsaXBib2FyZCBzdXBwb3J0PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+TUlNRS1WZXJz aW9uOiAxLjA8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47 IGNoYXJzZXQ9VVRGLTg8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5Db250ZW50LVRyYW5zZmVyLUVu Y29kaW5nOiA4Yml0PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+VG86IHFlbXUtZGV2ZWxAbm9uZ251 Lm9yZzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPkNjOiBwYm9uemluaUByZWRoYXQuY29tLDwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyAmbmJzcDsgbWFyY2FuZHJlLmx1cmVhdUByZWRoYXQu Y29tPC9zcGFuPjwvZGl2Pjxicj48ZGl2PjxzcGFuPkltcGxlbWVudCBiaWRpcmVjdGlvbmFsIGNs aXBib2FyZCBpbnRlZ3JhdGlvbiBiZXR3ZWVuIFFFTVUgYW5kIGhvc3Q8L3NwYW4+PC9kaXY+PGRp dj48c3Bhbj5zeXN0ZW0gd2hlbiB1c2luZyB0aGUgU0RMIGRpc3BsYXkgYmFja2VuZC4gVGhpcyBh bGxvd3Mgc2VhbWxlc3M8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5jb3B5LXBhc3RlIG9wZXJhdGlv bnMgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QgZW52aXJvbm1lbnRzLjwvc3Bhbj48L2Rpdj48 YnI+PGRpdj48c3Bhbj5GZWF0dXJlczo8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29s b3I6IHJnYigyMDYsIDE0NSwgMTIwKTsiPi0gQmlkaXJlY3Rpb25hbCBjbGlwYm9hcmQgc3luYyAo Z3Vlc3Qg4oaUIGhvc3QpPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2Io MjA2LCAxNDUsIDEyMCk7Ij4tIEFzeW5jIGNsaXBib2FyZCByZXF1ZXN0IGhhbmRsaW5nIHRvIHBy ZXZlbnQgYmxvY2tpbmc8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigy MDYsIDE0NSwgMTIwKTsiPi0gU2VsZi11cGRhdGUgZGV0ZWN0aW9uIHRvIGF2b2lkIGNsaXBib2Fy ZCBtYW5hZ2VyIGNvbmZsaWN0czwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjog cmdiKDIwNiwgMTQ1LCAxMjApOyI+LSBDb25maWd1cmFibGUgdmlhIC0tZW5hYmxlLXNkbC1jbGlw Ym9hcmQgYnVpbGQgb3B0aW9uPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiBy Z2IoMjA2LCAxNDUsIDEyMCk7Ij4tIFRleHQtb25seSBjbGlwYm9hcmQgc3VwcG9ydCAoZm9sbG93 aW5nIGV4aXN0aW5nIFFFTVUgcGF0dGVybnMpPC9zcGFuPjwvZGl2Pjxicj48ZGl2PjxzcGFuPlRo ZSBpbXBsZW1lbnRhdGlvbiBmb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm5zIHVzZWQgYnkgdGhlIGV4 aXN0aW5nPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+R1RLIGFuZCBWTkMgY2xpcGJvYXJkIGltcGxl bWVudGF0aW9ucywgaW50ZWdyYXRpbmcgd2l0aCBRRU1VJ3M8L3NwYW4+PC9kaXY+PGRpdj48c3Bh bj5jbGlwYm9hcmQgc3Vic3lzdGVtIHRocm91Z2ggUWVtdUNsaXBib2FyZFBlZXIuPC9zcGFuPjwv ZGl2Pjxicj48ZGl2PjxzcGFuPlRlc3RlZCBvbiBtYWNPUyB3aXRoIHN1Y2Nlc3NmdWwgYnVpbGQg YW5kIHJ1bnRpbWUgY2xpcGJvYXJkPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+ZnVuY3Rpb25hbGl0 eSB2ZXJpZmljYXRpb24uPC9zcGFuPjwvZGl2Pjxicj48ZGl2PjxzcGFuPkNvLWF1dGhvcmVkLWJ5 OiBLYW1heSBYdXRheCAmbHQ7YWRtaW5AeHV0YXhrYW1heS5jb20mZ3Q7PC9zcGFuPjwvZGl2Pjxk aXY+PHNwYW4+U2lnbmVkLW9mZi1ieTogc3RhcnRlcmdvICZsdDtzdGFydGVyZ29AcHJvdG9ubWFp bC5jb20mZ3Q7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+LS0tPC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4+Jm5ic3A7aW5jbHVkZS91aS9zZGwyLmggJm5ic3A7IHwgJm5ic3A7MTIgKysrKzwvc3Bhbj48 L2Rpdj48ZGl2PjxzcGFuPiZuYnNwO21lc29uLmJ1aWxkICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyB8ICZuYnNwOyAzICs8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDttZXNvbl9vcHRp b25zLnR4dCAmbmJzcDsgfCAmbmJzcDsgMiArPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7 dWkvbWVzb24uYnVpbGQgJm5ic3A7ICZuYnNwOyAmbmJzcDt8ICZuYnNwOyAzICs8L3NwYW4+PC9k aXY+PGRpdj48c3Bhbj4mbmJzcDt1aS9zZGwyLWNsaXBib2FyZC5jIHwgMTU0ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+ Jm5ic3A7dWkvc2RsMi5jICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfCAmbmJz cDsgOSArKys8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDs2IGZpbGVzIGNoYW5nZWQsIDE4 MyBpbnNlcnRpb25zKCspPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7Y3JlYXRlIG1vZGUg MTAwNjQ0IHVpL3NkbDItY2xpcGJvYXJkLmM8L3NwYW4+PC9kaXY+PGJyPjxkaXY+PHNwYW4gc3R5 bGU9ImNvbG9yOiByZ2IoODYsIDE1NiwgMjE0KTsiPmRpZmYgLS1naXQgYS9pbmNsdWRlL3VpL3Nk bDIuaCBiL2luY2x1ZGUvdWkvc2RsMi5oPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+aW5kZXggZGJl NmUzZDk3My4uMGNhZGJlOGMxYyAxMDA2NDQ8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0i Y29sb3I6IHJnYig4NiwgMTU2LCAyMTQpOyI+LS0tIGEvaW5jbHVkZS91aS9zZGwyLmg8L3NwYW4+ PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYig4NiwgMTU2LCAyMTQpOyI+KysrIGIv aW5jbHVkZS91aS9zZGwyLmg8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5AQCAtMjEsNiArMjEsMTAg QEA8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsjIGluY2x1ZGUgJmx0O1NETF9pbWFnZS5o Jmd0Ozwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyNlbmRpZjwvc3Bhbj48L2Rpdj48ZGl2 PjxzcGFuPiZuYnNwOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4 MSwgMjA2LCAxNjgpOyI+KyNpZmRlZiBDT05GSUdfU0RMX0NMSVBCT0FSRDwvc3Bhbj48L2Rpdj48 ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNpbmNsdWRlICJ1 aS9jbGlwYm9hcmQuaCI8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigx ODEsIDIwNiwgMTY4KTsiPisjZW5kaWY8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29s b3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsj aW5jbHVkZSAidWkva2JkLXN0YXRlLmgiPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7I2lm ZGVmIENPTkZJR19PUEVOR0w8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsjIGluY2x1ZGUg InVpL2VnbC1oZWxwZXJzLmgiPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+QEAgLTQ1LDYgKzQ5LDkg QEAgc3RydWN0IHNkbDJfY29uc29sZSB7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7ICZu YnNwOyAmbmJzcDtib29sIGd1aV9rZXlzeW07PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7 ICZuYnNwOyAmbmJzcDtTRExfR0xDb250ZXh0IHdpbmN0eDs8L3NwYW4+PC9kaXY+PGRpdj48c3Bh bj4mbmJzcDsgJm5ic3A7ICZuYnNwO1FLYmRTdGF0ZSAqa2JkOzwvc3Bhbj48L2Rpdj48ZGl2Pjxz cGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNpZmRlZiBDT05GSUdfU0RM X0NMSVBCT0FSRDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwg MjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7UWVtdUNsaXBib2FyZFBlZXIgY2JwZWVyOzwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNl bmRpZjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyNpZmRlZiBDT05GSUdfT1BFTkdMPC9z cGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7ICZuYnNwOyAmbmJzcDtRZW11R0xTaGFkZXIgKmds czs8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7ICZuYnNwO2VnbF9mYiBndWVz dF9mYjs8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5AQCAtOTcsNCArMTA0LDkgQEAgdm9pZCBzZGwy X2dsX3NjYW5vdXRfdGV4dHVyZShEaXNwbGF5Q2hhbmdlTGlzdGVuZXIgKmRjbCw8L3NwYW4+PC9k aXY+PGRpdj48c3Bhbj4mbmJzcDt2b2lkIHNkbDJfZ2xfc2Nhbm91dF9mbHVzaChEaXNwbGF5Q2hh bmdlTGlzdGVuZXIgKmRjbCw8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHVpbnQzMl90IHgsIHVpbnQzMl90IHksIHVpbnQzMl90 IHcsIHVpbnQzMl90IGgpOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOzwvc3Bhbj48L2Rp dj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNpZmRlZiBD T05GSUdfU0RMX0NMSVBCT0FSRDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjog cmdiKDE4MSwgMjA2LCAxNjgpOyI+K3ZvaWQgc2RsMl9jbGlwYm9hcmRfaW5pdChzdHJ1Y3Qgc2Rs Ml9jb25zb2xlICpzY29uKTs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPit2b2lkIHNkbDJfY2xpcGJvYXJkX2hhbmRsZV9yZXF1ZXN0KHN0 cnVjdCBzZGwyX2NvbnNvbGUgKnNjb24pOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJj b2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNlbmRpZjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFu IHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+Kzwvc3Bhbj48L2Rpdj48ZGl2Pjxz cGFuPiZuYnNwOyNlbmRpZiAvKiBTREwyX0ggKi88L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHls ZT0iY29sb3I6IHJnYig4NiwgMTU2LCAyMTQpOyI+ZGlmZiAtLWdpdCBhL21lc29uLmJ1aWxkIGIv bWVzb24uYnVpbGQ8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5pbmRleCA0MWY2OGQzODA2Li40YTM3 ZGY5NjY5IDEwMDY0NDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDg2 LCAxNTYsIDIxNCk7Ij4tLS0gYS9tZXNvbi5idWlsZDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDg2LCAxNTYsIDIxNCk7Ij4rKysgYi9tZXNvbi5idWlsZDwvc3Bhbj48 L2Rpdj48ZGl2PjxzcGFuPkBAIC0xNTk2LDYgKzE1OTYsOCBAQCBlbHNlPC9zcGFuPjwvZGl2Pjxk aXY+PHNwYW4+Jm5ic3A7ICZuYnNwO3NkbF9pbWFnZSA9IG5vdF9mb3VuZDwvc3Bhbj48L2Rpdj48 ZGl2PjxzcGFuPiZuYnNwO2VuZGlmPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7PC9zcGFu PjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4raGF2 ZV9zZGxfY2xpcGJvYXJkID0gc2RsLmZvdW5kKCkgYW5kIGdldF9vcHRpb24oJ3NkbF9jbGlwYm9h cmQnKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAx NjgpOyI+Kzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwO3JiZCA9IG5vdF9mb3VuZDwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwO2lmIG5vdCBnZXRfb3B0aW9uKCdyYmQnKS5hdXRvKCkg b3IgaGF2ZV9ibG9jazwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyAmbmJzcDtsaWJyYWRv cyA9IGNjLmZpbmRfbGlicmFyeSgncmFkb3MnLCByZXF1aXJlZDogZ2V0X29wdGlvbigncmJkJykp PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+QEAgLTI1MTEsNiArMjUxMyw3IEBAIGNvbmZpZ19ob3N0 X2RhdGEuc2V0KCdDT05GSUdfUkVMT0NBVEFCTEUnLCBnZXRfb3B0aW9uKCdyZWxvY2F0YWJsZScp KTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwO2NvbmZpZ19ob3N0X2RhdGEuc2V0KCdDT05G SUdfU0FGRVNUQUNLJywgZ2V0X29wdGlvbignc2FmZV9zdGFjaycpKTwvc3Bhbj48L2Rpdj48ZGl2 PjxzcGFuPiZuYnNwO2NvbmZpZ19ob3N0X2RhdGEuc2V0KCdDT05GSUdfU0RMJywgc2RsLmZvdW5k KCkpPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7Y29uZmlnX2hvc3RfZGF0YS5zZXQoJ0NP TkZJR19TRExfSU1BR0UnLCBzZGxfaW1hZ2UuZm91bmQoKSk8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPitjb25maWdfaG9zdF9kYXRhLnNl dCgnQ09ORklHX1NETF9DTElQQk9BUkQnLCBoYXZlX3NkbF9jbGlwYm9hcmQpPC9zcGFuPjwvZGl2 PjxkaXY+PHNwYW4+Jm5ic3A7Y29uZmlnX2hvc3RfZGF0YS5zZXQoJ0NPTkZJR19TRUNDT01QJywg c2VjY29tcC5mb3VuZCgpKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwO2lmIHNlY2NvbXAu Zm91bmQoKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyAmbmJzcDtjb25maWdfaG9zdF9k YXRhLnNldCgnQ09ORklHX1NFQ0NPTVBfU1lTUkFXUkMnLCBzZWNjb21wX2hhc19zeXNyYXdyYyk8 L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYig4NiwgMTU2LCAyMTQpOyI+ ZGlmZiAtLWdpdCBhL21lc29uX29wdGlvbnMudHh0IGIvbWVzb25fb3B0aW9ucy50eHQ8L3NwYW4+ PC9kaXY+PGRpdj48c3Bhbj5pbmRleCA1OWQ5NzNiY2EwLi5iZTJjYmEzYTMwIDEwMDY0NDwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDg2LCAxNTYsIDIxNCk7Ij4tLS0g YS9tZXNvbl9vcHRpb25zLnR4dDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjog cmdiKDg2LCAxNTYsIDIxNCk7Ij4rKysgYi9tZXNvbl9vcHRpb25zLnR4dDwvc3Bhbj48L2Rpdj48 ZGl2PjxzcGFuPkBAIC0yMTIsNiArMjEyLDggQEAgb3B0aW9uKCdzZGwnLCB0eXBlIDogJ2ZlYXR1 cmUnLCB2YWx1ZSA6ICdhdXRvJyw8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgZGVzY3JpcHRpb246ICdTREwgdXNlciBpbnRlcmZhY2UnKTwvc3Bhbj48 L2Rpdj48ZGl2PjxzcGFuPiZuYnNwO29wdGlvbignc2RsX2ltYWdlJywgdHlwZSA6ICdmZWF0dXJl JywgdmFsdWUgOiAnYXV0bycsPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7IGRlc2NyaXB0aW9uOiAnU0RMIEltYWdlIHN1cHBvcnQgZm9yIGljb25zJyk8 L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsi PitvcHRpb24oJ3NkbF9jbGlwYm9hcmQnLCB0eXBlIDogJ2Jvb2xlYW4nLCB2YWx1ZSA6IHRydWUs PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7 Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRlc2NyaXB0aW9uOiAnU0RMIGNsaXBib2FyZCBzdXBw b3J0Jyk8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDtvcHRpb24oJ3NlY2NvbXAnLCB0eXBl IDogJ2ZlYXR1cmUnLCB2YWx1ZSA6ICdhdXRvJyw8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZGVzY3JpcHRpb246ICdzZWNjb21wIHN1cHBvcnQnKTwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwO29wdGlvbignc21hcnRjYXJkJywgdHlwZSA6ICdm ZWF0dXJlJywgdmFsdWUgOiAnYXV0bycsPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNv bG9yOiByZ2IoODYsIDE1NiwgMjE0KTsiPmRpZmYgLS1naXQgYS91aS9tZXNvbi5idWlsZCBiL3Vp L21lc29uLmJ1aWxkPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+aW5kZXggMzVmYjA0Y2FkZi4uNmQx YmYzNDc3ZSAxMDA2NDQ8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYig4 NiwgMTU2LCAyMTQpOyI+LS0tIGEvdWkvbWVzb24uYnVpbGQ8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYig4NiwgMTU2LCAyMTQpOyI+KysrIGIvdWkvbWVzb24uYnVpbGQ8 L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5AQCAtMTI2LDYgKzEyNiw5IEBAIGlmIHNkbC5mb3VuZCgp PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7ICZuYnNwOyAmbmJzcDsnc2RsMi1pbnB1dC5j Jyw8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7ICZuYnNwOydzZGwyLmMnLDwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyAmbmJzcDspKTwvc3Bhbj48L2Rpdj48ZGl2Pjxz cGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDtpZiBoYXZlX3Nk bF9jbGlwYm9hcmQ8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEs IDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO3NkbF9zcy5hZGQoZmlsZXMoJ3NkbDItY2xpcGJv YXJkLmMnKSk8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIw NiwgMTY4KTsiPisgJm5ic3A7ZW5kaWY8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5i c3A7c2RsX3NzLmFkZCh3aGVuOiBvcGVuZ2wsIGlmX3RydWU6IGZpbGVzKCdzZGwyLWdsLmMnKSk8 L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7c2RsX3NzLmFkZCh3aGVuOiB4MTEs IGlmX3RydWU6IGZpbGVzKCd4X2tleW1hcC5jJykpPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5i c3A7ICZuYnNwO3VpX21vZHVsZXMgKz0geydzZGwnIDogc2RsX3NzfTwvc3Bhbj48L2Rpdj48ZGl2 PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDg2LCAxNTYsIDIxNCk7Ij5kaWZmIC0tZ2l0IGEvdWkv c2RsMi1jbGlwYm9hcmQuYyBiL3VpL3NkbDItY2xpcGJvYXJkLmM8L3NwYW4+PC9kaXY+PGRpdj48 c3Bhbj5uZXcgZmlsZSBtb2RlIDEwMDY0NDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPmluZGV4IDAw MDAwMDAwMDAuLmU1MGZmMTFkNWE8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6 IHJnYig4NiwgMTU2LCAyMTQpOyI+LS0tIC9kZXYvbnVsbDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFu IHN0eWxlPSJjb2xvcjogcmdiKDg2LCAxNTYsIDIxNCk7Ij4rKysgYi91aS9zZGwyLWNsaXBib2Fy ZC5jPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+QEAgLTAsMCArMSwxNTQgQEA8L3NwYW4+PC9kaXY+ PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisvKjwvc3Bhbj48 L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAqIFNE TCBVSSAtLSBjbGlwYm9hcmQgc3VwcG9ydCAoaW1wcm92ZWQgYXN5bmMgdmVyc2lvbik8L3NwYW4+ PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgKjwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+ KyAqIENvcHlyaWdodCAoQykgMjAyMyBLYW1heSBYdXRheCAmbHQ7YWRtaW5AeHV0YXhrYW1heS5j b20mZ3Q7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYs IDE2OCk7Ij4rICogQ29weXJpZ2h0IChDKSAyMDI1IHN0YXJ0ZXJnbyAmbHQ7c3RhcnRlcmdvQHBy b3Rvbm1haWwuY29tJmd0Ozwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdi KDE4MSwgMjA2LCAxNjgpOyI+KyAqPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9y OiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb3ItbGF0ZXI8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEs IDIwNiwgMTY4KTsiPisgKi88L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6 IHJnYigxODEsIDIwNiwgMTY4KTsiPisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIjwvc3Bhbj48L2Rp dj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNpbmNsdWRl ICJ1aS9jb25zb2xlLmgiPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2Io MTgxLCAyMDYsIDE2OCk7Ij4rI2luY2x1ZGUgInVpL2NsaXBib2FyZC5oIjwvc3Bhbj48L2Rpdj48 ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNpbmNsdWRlICJ1 aS9zZGwyLmgiPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAy MDYsIDE2OCk7Ij4rI2luY2x1ZGUgInFlbXUvbG9nLmgiPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4g c3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rPC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rI2lmZGVmIENPTkZJR19TRExf Q0xJUEJPQVJEPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAy MDYsIDE2OCk7Ij4rPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgx LCAyMDYsIDE2OCk7Ij4rLyogVHJhY2sgcGVuZGluZyBjbGlwYm9hcmQgcmVxdWVzdHMgdG8gaGFu ZGxlIGFzeW5jIGRhdGEgKi88L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPit0eXBlZGVmIHN0cnVjdCB7PC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDtzdHJ1 Y3Qgc2RsMl9jb25zb2xlICpzY29uOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xv cjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7UWVtdUNsaXBib2FyZEluZm8g KmluZm87PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYs IDE2OCk7Ij4rICZuYnNwOyAmbmJzcDtRZW11Q2xpcGJvYXJkVHlwZSB0eXBlOzwvc3Bhbj48L2Rp dj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K30gU0RMQ2xp cGJvYXJkUmVxdWVzdDs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigx ODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPitzdGF0aWMgU0RMQ2xpcGJvYXJkUmVxdWVzdCAqcGVuZGluZ19y ZXF1ZXN0ID0gTlVMTDs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigx ODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPitzdGF0aWMgdm9pZCBzZGwyX2NsaXBib2FyZF9jbGVhcl9wZW5k aW5nKHZvaWQpPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAy MDYsIDE2OCk7Ij4rezwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4 MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7aWYgKHBlbmRpbmdfcmVxdWVzdCkgezwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtpZiAocGVuZGluZ19yZXF1ZXN0LSZndDtpbmZvKSB7 PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7 Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7cWVtdV9jbGlwYm9h cmRfaW5mb191bnJlZihwZW5kaW5nX3JlcXVlc3QtJmd0O2luZm8pOzwvc3Bhbj48L2Rpdj48ZGl2 PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDt9PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2Io MTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2dfZnJlZShwZW5k aW5nX3JlcXVlc3QpOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4 MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtwZW5kaW5nX3JlcXVl c3QgPSBOVUxMOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwg MjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7fTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxl PSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K308L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBz dHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPitzdGF0aWMgdm9pZCBzZGwyX2Ns aXBib2FyZF9ub3RpZnkoTm90aWZpZXIgKm5vdGlmaWVyLCB2b2lkICpkYXRhKTwvc3Bhbj48L2Rp dj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K3s8L3NwYW4+ PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5i c3A7ICZuYnNwO1FlbXVDbGlwYm9hcmROb3RpZnkgKm5vdGlmeSA9IGRhdGE7PC9zcGFuPjwvZGl2 PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAm bmJzcDtzdHJ1Y3Qgc2RsMl9jb25zb2xlICpzY29uID08L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBz dHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7Y29udGFpbmVyX29mKG5vdGlmaWVyLCBzdHJ1Y3Qgc2RsMl9jb25zb2xlLCBjYnBlZXIu bm90aWZpZXIpOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwg MjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7Ym9vbCBzZWxmX3VwZGF0ZSA9IG5vdGlmeS0mZ3Q7 aW5mby0mZ3Q7b3duZXIgPT0gJmFtcDtzY29uLSZndDtjYnBlZXI7PC9zcGFuPjwvZGl2PjxkaXY+ PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDtj b25zdCBjaGFyICp0ZXh0X2RhdGE7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9y OiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDtzaXplX3QgdGV4dF9zaXplOzwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+ Kzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgp OyI+KyAmbmJzcDsgJm5ic3A7c3dpdGNoIChub3RpZnktJmd0O3R5cGUpIHs8L3NwYW4+PC9kaXY+ PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZu YnNwO2Nhc2UgUUVNVV9DTElQQk9BUkRfVVBEQVRFX0lORk86PC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO3s8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEs IDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsv KiBTa2lwIHNlbGYtdXBkYXRlcyB0byBhdm9pZCBjbGlwYm9hcmQgbWFuYWdlciBjb25mbGljdHMg Ki88L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4 KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtpZiAoc2VsZl91 cGRhdGUpIHs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIw NiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO3JldHVybjs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDt9PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYs IDE2OCk7Ij4rPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAy MDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7aWYg KCFub3RpZnktJmd0O2luZm8tJmd0O3R5cGVzW1FFTVVfQ0xJUEJPQVJEX1RZUEVfVEVYVF0uYXZh aWxhYmxlKSB7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAy MDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDtyZXR1cm47PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiBy Z2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7fTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2 LCAxNjgpOyI+Kzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwg MjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy8q IENoZWNrIGlmIHRoaXMgaXMgY29tcGxldGlvbiBvZiBvdXIgcGVuZGluZyByZXF1ZXN0ICovPC9z cGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4r ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7aWYgKHBlbmRpbmdfcmVx dWVzdCAmYW1wOyZhbXA7IHBlbmRpbmdfcmVxdWVzdC0mZ3Q7aW5mbyA9PSBub3RpZnktJmd0O2lu Zm8gJmFtcDsmYW1wOyA8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigx ODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwO3BlbmRpbmdfcmVxdWVzdC0mZ3Q7dHlwZSA9PSBRRU1VX0NMSVBCT0FS RF9UWVBFX1RFWFQpIHs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigx ODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwO3NkbDJfY2xpcGJvYXJkX2NsZWFyX3BlbmRpbmcoKTs8L3NwYW4+PC9k aXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt9PC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rPC9zcGFuPjwvZGl2PjxkaXY+ PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LyogQ2hlY2sgaWYgZGF0YSBpcyBhdmFpbGFibGUs IHJlcXVlc3QgYXN5bmNocm9ub3VzbHkgaWYgbm90ICovPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4g c3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7aWYgKCFub3RpZnktJmd0O2luZm8tJmd0O3R5cGVzW1FFTVVf Q0xJUEJPQVJEX1RZUEVfVEVYVF0uZGF0YSkgezwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxl PSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7aWYgKCFwZW5kaW5nX3JlcXVlc3QpIHs8L3Nw YW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7cGVuZGluZ19yZXF1ZXN0ID0gZ19uZXcwKFNETENsaXBib2FyZFJlcXVlc3Qs IDEpOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAx NjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDtwZW5kaW5nX3JlcXVlc3QtJmd0O3Njb24gPSBzY29uOzwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDtwZW5kaW5nX3JlcXVlc3QtJmd0O2luZm8gPSBxZW11X2NsaXBib2FyZF9pbmZv X3JlZihub3RpZnktJmd0O2luZm8pOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xv cjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtwZW5kaW5nX3JlcXVlc3QtJmd0 O3R5cGUgPSBRRU1VX0NMSVBCT0FSRF9UWVBFX1RFWFQ7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4g c3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3FlbXVfY2xp cGJvYXJkX3JlcXVlc3Qobm90aWZ5LSZndDtpbmZvLCBRRU1VX0NMSVBCT0FSRF9UWVBFX1RFWFQp Ozwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgp OyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7fTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAx NjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7cmV0dXJuOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4 MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw O308L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4 KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwg MTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsvKiBQcm9j ZXNzIGF2YWlsYWJsZSBkYXRhICovPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9y OiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7dGV4dF9zaXplID0gbm90aWZ5LSZndDtpbmZvLSZndDt0eXBlc1tRRU1VX0NMSVBC T0FSRF9UWVBFX1RFWFRdLnNpemU7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9y OiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7aWYgKHRleHRfc2l6ZSA9PSAwKSB7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5 bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtyZXR1cm47PC9zcGFuPjwvZGl2PjxkaXY+ PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7fTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxl PSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+Kzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwO3RleHRfZGF0YSA9IChjb25zdCBjaGFyICopbm90aWZ5LSZndDtp bmZvLSZndDt0eXBlc1tRRU1VX0NMSVBCT0FSRF9UWVBFX1RFWFRdLmRhdGE7PC9zcGFuPjwvZGl2 PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4g c3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7LyogRW5zdXJlIG51bGwgdGVybWluYXRpb24gZm9yIFNETCBj bGlwYm9hcmQgKi88L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEs IDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtn X2F1dG9mcmVlIGNoYXIgKnRleHQgPSBnX3N0cm5kdXAodGV4dF9kYXRhLCB0ZXh0X3NpemUpOzwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+ KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2lmICh0ZXh0ICZhbXA7 JmFtcDsgdGV4dFswXSAhPSAnXDAnKSB7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNv bG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtTRExfU2V0Q2xpcGJvYXJkVGV4dCh0ZXh0KTs8L3Nw YW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt9IGVsc2UgaWYgKCF0ZXh0 KSB7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2 OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDtxZW11X2xvZ19tYXNrKExPR19HVUVTVF9FUlJPUiwgPC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IlNETCBjbGlwYm9hcmQ6IEZhaWxlZCB0byBh bGxvY2F0ZSBtZW1vcnkgZm9yIGNsaXBib2FyZCB0ZXh0XG4iKTs8L3NwYW4+PC9kaXY+PGRpdj48 c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt9PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9 ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7YnJlYWs7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9y OiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO308L3Nw YW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisg Jm5ic3A7ICZuYnNwO2Nhc2UgUUVNVV9DTElQQk9BUkRfUkVTRVRfU0VSSUFMOjwvc3Bhbj48L2Rp dj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDtzZGwyX2NsaXBib2FyZF9jbGVhcl9wZW5kaW5nKCk7PC9zcGFu PjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2JyZWFrOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7fTwvc3Bhbj48 L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K308L3Nw YW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPis8 L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsi PitzdGF0aWMgdm9pZCBzZGwyX2NsaXBib2FyZF9yZXF1ZXN0KFFlbXVDbGlwYm9hcmRJbmZvICpp bmZvLDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAx NjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7IFFlbXVDbGlwYm9hcmRUeXBlIHR5cGUpPC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rezwvc3Bhbj48L2Rpdj48ZGl2 PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7 Z19hdXRvZnJlZSBjaGFyICp0ZXh0ID0gTlVMTDs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHls ZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBz dHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO2lmICh0eXBl ICE9IFFFTVVfQ0xJUEJPQVJEX1RZUEVfVEVYVCkgezwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDtyZXR1cm47PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgx LCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDt9PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5 bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4g c3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDt0ZXh0ID0g U0RMX0dldENsaXBib2FyZFRleHQoKTs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29s b3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO2lmICghdGV4dCkgezwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtxZW11X2xvZ19tYXNrKExPR19HVUVTVF9FUlJPUiwg PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7 Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsiU0RMIGNsaXBib2FyZDogRmFpbGVkIHRvIGdldCBjbGlw Ym9hcmQgdGV4dDogJXNcbiIsIDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjog cmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7U0RMX0dldEVycm9yKCkp Ozwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgp OyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtyZXR1cm47PC9zcGFuPjwvZGl2PjxkaXY+ PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDt9 PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7 Ij4rPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2 OCk7Ij4rICZuYnNwOyAmbmJzcDtxZW11X2NsaXBib2FyZF9zZXRfZGF0YShpbmZvLSZndDtvd25l ciwgaW5mbywgdHlwZSw8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigx ODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw O3N0cmxlbih0ZXh0KSwgdGV4dCwgdHJ1ZSk7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9 ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rfTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+Kzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFu IHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K3ZvaWQgc2RsMl9jbGlwYm9hcmRf aW5pdChzdHJ1Y3Qgc2RsMl9jb25zb2xlICpzY29uKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K3s8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO3Njb24t Jmd0O2NicGVlci5uYW1lID0gInNkbDItY2xpcGJvYXJkIjs8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO3Njb24t Jmd0O2NicGVlci5ub3RpZmllci5ub3RpZnkgPSBzZGwyX2NsaXBib2FyZF9ub3RpZnk7PC9zcGFu PjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZu YnNwOyAmbmJzcDtzY29uLSZndDtjYnBlZXIucmVxdWVzdCA9IHNkbDJfY2xpcGJvYXJkX3JlcXVl c3Q7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2 OCk7Ij4rPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYs IDE2OCk7Ij4rICZuYnNwOyAmbmJzcDtxZW11X2NsaXBib2FyZF9wZWVyX3JlZ2lzdGVyKCZhbXA7 c2Nvbi0mZ3Q7Y2JwZWVyKTs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPit9PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9y OiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNv bG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rdm9pZCBzZGwyX2NsaXBib2FyZF9oYW5kbGVfcmVx dWVzdChzdHJ1Y3Qgc2RsMl9jb25zb2xlICpzY29uKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K3s8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO2dfYXV0 b2ZyZWUgY2hhciAqdGV4dCA9IE5VTEw7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNv bG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDtRZW11Q2xpcGJvYXJkSW5m byAqaW5mbzs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIw NiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEs IDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO3RleHQgPSBTRExfR2V0Q2xpcGJvYXJkVGV4dCgp Ozwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgp OyI+KyAmbmJzcDsgJm5ic3A7aWYgKCF0ZXh0KSB7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5 bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwO3FlbXVfbG9nX21hc2soTE9HX0dVRVNUX0VSUk9SLCA8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyJTREwgY2xpcGJvYXJkOiBGYWlsZWQgdG8gZ2V0IGNsaXBib2FyZCB0ZXh0OiAlc1xuIiwgPC9z cGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4r ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDtTRExfR2V0RXJyb3IoKSk7PC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO3JldHVybjs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJn YigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO308L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48 c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwO2lm ICh0ZXh0WzBdID09ICdcMCcpIHs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6 IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7cmV0dXJu OyAvKiBJZ25vcmUgZW1wdHkgY2xpcGJvYXJkICovPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5 bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDt9PC9zcGFuPjwv ZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rPC9zcGFu PjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZu YnNwOyAmbmJzcDtpbmZvID0gcWVtdV9jbGlwYm9hcmRfaW5mb19uZXcoJmFtcDtzY29uLSZndDtj YnBlZXIsIFFFTVVfQ0xJUEJPQVJEX1NFTEVDVElPTl9DTElQQk9BUkQpOzwvc3Bhbj48L2Rpdj48 ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5i c3A7cWVtdV9jbGlwYm9hcmRfc2V0X2RhdGEoJmFtcDtzY29uLSZndDtjYnBlZXIsIGluZm8sIFFF TVVfQ0xJUEJPQVJEX1RZUEVfVEVYVCw8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29s b3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO3N0cmxlbih0ZXh0KSwgdGV4dCwgdHJ1ZSk7PC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rICZuYnNwOyAmbmJzcDtxZW11 X2NsaXBib2FyZF9pbmZvX3VucmVmKGluZm8pOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxl PSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+K308L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBz dHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPis8L3NwYW4+PC9kaXY+PGRpdj48c3Bh biBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisjZW5kaWYgLyogQ09ORklHX1NE TF9DTElQQk9BUkQgKi88L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYig4 NiwgMTU2LCAyMTQpOyI+ZGlmZiAtLWdpdCBhL3VpL3NkbDIuYyBiL3VpL3NkbDIuYzwvc3Bhbj48 L2Rpdj48ZGl2PjxzcGFuPmluZGV4IGNkYTQyOTNhNTMuLjAwYTE3YjY4YTcgMTAwNjQ0PC9zcGFu PjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoODYsIDE1NiwgMjE0KTsiPi0tLSBh L3VpL3NkbDIuYzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDg2LCAx NTYsIDIxNCk7Ij4rKysgYi91aS9zZGwyLmM8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj5AQCAtNjkx LDYgKzY5MSwxMSBAQCB2b2lkIHNkbDJfcG9sbF9ldmVudHMoc3RydWN0IHNkbDJfY29uc29sZSAq c2Nvbik8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7Y2FzZSBTRExfV0lORE9XRVZFTlQ6PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7aGFuZGxlX3dpbmRvd2V2 ZW50KGV2KTs8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDticmVhazs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHls ZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4KTsiPisjaWZkZWYgQ09ORklHX1NETF9DTElQQk9B UkQ8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IHJnYigxODEsIDIwNiwgMTY4 KTsiPisgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Y2FzZSBTRExfQ0xJUEJPQVJEVVBEQVRF Ojwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgp OyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3NkbDJfY2xpcGJv YXJkX2hhbmRsZV9yZXF1ZXN0KHNjb24pOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJj b2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwO2JyZWFrOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjog cmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNlbmRpZjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtkZWZhdWx0Ojwvc3Bhbj48L2Rpdj48ZGl2Pjxz cGFuPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2JyZWFr Ozwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDt9PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+QEAgLTkwMSw2ICs5MDYsMTAgQEAgc3RhdGljIHZv aWQgc2RsMl9kaXNwbGF5X2luaXQoRGlzcGxheVN0YXRlICpkcywgRGlzcGxheU9wdGlvbnMgKm8p PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw O308L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7cmVnaXN0ZXJfZGlzcGxheWNoYW5nZWxpc3RlbmVyKCZhbXA7c2RsMl9jb25zb2xlW2ldLmRj bCk7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4g c3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYsIDE2OCk7Ij4rI2lmZGVmIENPTkZJR19TRExfQ0xJ UEJPQVJEPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMTgxLCAyMDYs IDE2OCk7Ij4rICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3NkbDJfY2xpcGJvYXJkX2luaXQo JmFtcDtzZGwyX2NvbnNvbGVbaV0pOzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xv cjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+KyNlbmRpZjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogcmdiKDE4MSwgMjA2LCAxNjgpOyI+Kzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFu PiZuYnNwOyNpZiBkZWZpbmVkKFNETF9WSURFT19EUklWRVJfV0lORE9XUykgfHwgZGVmaW5lZChT RExfVklERU9fRFJJVkVSX1gxMSk8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7aWYgKFNETF9HZXRXaW5kb3dXTUluZm8oc2RsMl9jb25zb2xl W2ldLnJlYWxfd2luZG93LCAmYW1wO2luZm8pKSB7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5i c3A7I2lmIGRlZmluZWQoU0RMX1ZJREVPX0RSSVZFUl9XSU5ET1dTKTwvc3Bhbj48L2Rpdj48ZGl2 PjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDIwNiwgMTQ1LCAxMjApOyI+LS0gPC9zcGFuPjwvZGl2 PjxkaXY+PHNwYW4+Mi41MC4xPC9zcGFuPjwvZGl2Pjxicj48L2Rpdj48YnI+PC9kaXY+PGRpdiBz dHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7Ij48 YnI+PC9kaXY+DQo8ZGl2IHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMTRweDsiIGNsYXNzPSJwcm90b25tYWlsX3NpZ25hdHVyZV9ibG9jayI+DQogICAg PGRpdiBjbGFzcz0icHJvdG9ubWFpbF9zaWduYXR1cmVfYmxvY2stdXNlciBwcm90b25tYWlsX3Np Z25hdHVyZV9ibG9jay1lbXB0eSI+DQogICAgICAgIA0KICAgICAgICAgICAgPC9kaXY+DQogICAg DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm90b25tYWlsX3NpZ25hdHVyZV9ibG9jay1wcm90 b24iPg0KICAgICAgICBTZW50IHdpdGggPGEgaHJlZj0iaHR0cHM6Ly9wcm90b24ubWUvbWFpbC9o b21lIiB0YXJnZXQ9Il9ibGFuayI+UHJvdG9uIE1haWw8L2E+IHNlY3VyZSBlbWFpbC4NCiAgICA8 L2Rpdj4NCjwvZGl2Pg0K --b1=_v2zO5OaSMaXVRZ3Z1X3cS4mjtgBcsIOzxIXD3FjIc--