From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#12316: Simplify redefinition of 'abort'. Date: Fri, 31 Aug 2012 10:55:56 -0700 Organization: UCLA Computer Science Department Message-ID: <5040FAAC.3000405@cs.ucla.edu> References: <50402C2B.5020800@cs.ucla.edu> <833933qohs.fsf@gnu.org> <5040B3BA.6070108@cs.ucla.edu> <831uinqgnl.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080101000404000603030903" X-Trace: ger.gmane.org 1346435842 12918 80.91.229.3 (31 Aug 2012 17:57:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 31 Aug 2012 17:57:22 +0000 (UTC) Cc: lekktu@gmail.com, 12316@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Aug 31 19:57:17 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1T7VSz-0005aF-AZ for geb-bug-gnu-emacs@m.gmane.org; Fri, 31 Aug 2012 19:57:14 +0200 Original-Received: from localhost ([::1]:39979 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T7VSx-0004E9-1f for geb-bug-gnu-emacs@m.gmane.org; Fri, 31 Aug 2012 13:57:11 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:38390) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T7VSi-0003te-E7 for bug-gnu-emacs@gnu.org; Fri, 31 Aug 2012 13:57:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T7VSY-000417-Aj for bug-gnu-emacs@gnu.org; Fri, 31 Aug 2012 13:56:56 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:50257) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T7VSY-00040z-4y for bug-gnu-emacs@gnu.org; Fri, 31 Aug 2012 13:56:46 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1T7VTl-0008KU-Rk for bug-gnu-emacs@gnu.org; Fri, 31 Aug 2012 13:58:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 31 Aug 2012 17:58:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12316 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 12316-submit@debbugs.gnu.org id=B12316.134643586031983 (code B ref 12316); Fri, 31 Aug 2012 17:58:01 +0000 Original-Received: (at 12316) by debbugs.gnu.org; 31 Aug 2012 17:57:40 +0000 Original-Received: from localhost ([127.0.0.1]:59803 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1T7VTJ-0008Jh-Io for submit@debbugs.gnu.org; Fri, 31 Aug 2012 13:57:40 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:40984) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1T7VT7-0008JP-I6 for 12316@debbugs.gnu.org; Fri, 31 Aug 2012 13:57:31 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 50A1F39E800E; Fri, 31 Aug 2012 10:56:04 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Q4Za5FXfDo33; Fri, 31 Aug 2012 10:55:56 -0700 (PDT) Original-Received: from [192.168.1.3] (pool-108-23-119-2.lsanca.fios.verizon.net [108.23.119.2]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 4D51839E8008; Fri, 31 Aug 2012 10:55:56 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20120827 Thunderbird/15.0 In-Reply-To: <831uinqgnl.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:63638 Archived-At: This is a multi-part message in MIME format. --------------080101000404000603030903 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 08/31/2012 07:29 AM, Eli Zaretskii wrote: > why not simply replace all the calls > to 'abort' with calls to 'emacs_abort'? Isn't that cleaner? Yes, I prefer that, too. I avoided that only because it bloated the patch. But it's easy enough to add, and the attached patch does that. >> To keep in sync with that, the MS-Windows part of the patch >> renames w32_abort to emacs_abort. > > I don't see this part in your patches. Where is it? Sorry, I missed one place. Fixed in attached patch. This also should fix the HAVE_NTGUI issue you reported in a separate email. > with your changes, only those calls to 'abort' that > originate within Emacs sources will wind up at 'emacs_abort'. Yes, that's part of the idea. Intercepting other libraries' call to 'abort' tends to break things. We've caught some of the breakages and have disabled them with NO_ABORT but it's safer to avoid the problem in the first place. Doing this will also make it a bit easier for me to add a new feature, namely backtraces on production aborts. > A standard header should not include another > standard header That guideline is needed for glibc for conformance reasons, and it used to be important long ago when multiple inclusion of standard headers was a problem, but these days it's not necessary and is even somewhat counterproductive in portability emulations. We violate that guideline all the time in gnulib (and therefore in Emacs) and it's not a problem. However, if you prefer using the glibc style for the Microsoft port that's easy to do I've revised the patch to do that. The attached patch is fairly long because of the abort -> emacs_abort thing, so here's a precis that skips the boring parts. === modified file 'ChangeLog' --- ChangeLog 2012-08-28 16:01:59 +0000 +++ ChangeLog 2012-08-31 03:18:42 +0000 @@ -1,3 +1,8 @@ +2012-08-31 Paul Eggert + + Simplify redefinition of 'abort' (Bug#12316). + * configure.ac (NO_ABRT): Remove. + 2012-08-26 Paul Eggert * configure.ac (CFLAGS): Prefer -g3 to -g if -g3 works === modified file 'configure.ac' --- configure.ac 2012-08-28 16:01:59 +0000 +++ configure.ac 2012-08-30 18:23:15 +0000 @@ -3321,12 +3321,6 @@ AC_DEFINE(BROKEN_PTY_READ_AFTER_EAGAIN, 1, [Define on FreeBSD to work around an issue when reading from a PTY.]) ;; - - dnl Define the following so emacs symbols will not conflict with those - dnl in the System framework. Otherwise -prebind will not work. - darwin) - AC_DEFINE(NO_ABORT, 1, [Do not define abort in emacs.c.]) - ;; esac case $opsys in === modified file 'nt/ChangeLog' --- nt/ChangeLog 2012-08-28 16:01:59 +0000 +++ nt/ChangeLog 2012-08-31 16:26:56 +0000 @@ -1,3 +1,8 @@ +2012-08-31 Paul Eggert + + Simplify redefinition of 'abort' (Bug#12316). + * inc/ms-w32.h (w32_abort) [HAVE_NTGUI]: Remove. + 2012-08-22 Juanma Barranquero * config.nt: Sync with autogen/config.in. === modified file 'nt/inc/ms-w32.h' --- nt/inc/ms-w32.h 2012-08-07 11:03:48 +0000 +++ nt/inc/ms-w32.h 2012-08-30 22:25:36 +0000 @@ -334,16 +334,7 @@ #include #endif -/* stdlib.h must be included after redefining malloc & friends, but - before redefining abort. Isn't library redefinition funny? */ #include - -/* Redefine abort. */ -#ifdef HAVE_NTGUI -#define abort w32_abort -extern _Noreturn void w32_abort (void); -#endif - #include /* Define for those source files that do not include enough NT system files. */ === modified file 'nt/inc/unistd.h' --- nt/inc/unistd.h 2011-02-27 19:48:31 +0000 +++ nt/inc/unistd.h 2012-08-31 16:31:23 +0000 @@ -3,8 +3,12 @@ #ifndef _UNISTD_H #define _UNISTD_H +/* On Microsoft platforms, declares 'environ'; on POSIX + platforms, does. Every file in Emacs that includes + also includes , so there's no need to declare + 'environ' here. */ + extern ssize_t readlink (const char *, char *, size_t); extern int symlink (char const *, char const *); #endif /* _UNISTD_H */ - === modified file 'src/.gdbinit' --- src/.gdbinit 2012-08-20 17:32:31 +0000 +++ src/.gdbinit 2012-08-30 19:23:45 +0000 @@ -1222,14 +1222,9 @@ set $tem = (struct Lisp_String *) $ptr set $tem = (char *) $tem->data - # Don't let abort actually run, as it will make stdio stop working and - # therefore the `pr' command above as well. - if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd' - # The windows-nt build replaces abort with its own function. - break w32_abort - else - break abort - end + # Don't let emacs_abort actually run, as it will make stdio stop + # working and therefore the 'pr' command above as well. + break emacs_abort end # x_error_quitter is defined only on X. But window-system is set up === modified file 'src/ChangeLog' --- src/ChangeLog 2012-08-31 10:53:19 +0000 +++ src/ChangeLog 2012-08-31 16:34:18 +0000 @@ -1,3 +1,23 @@ +2012-08-31 Paul Eggert + + Simplify redefinition of 'abort' (Bug#12316). + Do not try to redefine the 'abort' function. Instead, redo + the code so that it calls 'emacs_abort' rather than 'abort'. + This removes the need for the NO_ABORT configure-time macro + and makes it easier to change the abort code to do a backtrace. + * .gdbinit: Just stop at emacs_abort, not at w32_abort or abort. + * emacs.c (abort) [!DOS_NT && !NO_ABORT]: + Remove; sysdep.c's emacs_abort now takes its place. + * lisp.h (emacs_abort): New decl. All calls from Emacs code to + 'abort' changed to use 'emacs_abort'. + * msdos.c (dos_abort) [defined abort]: Remove; not used. + (abort) [!defined abort]: Rename to ... + (emacs_abort): ... new name. + * sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking + the place of the old 'abort' in emacs.c. + * w32.c, w32fns.c (abort): Do not #undef. + * w32.c (emacs_abort): Rename from w32_abort. + 2012-08-31 Dmitry Antipov Remove mark_ttys function and fix tty_display_info initialization. === modified file 'src/conf_post.h' --- src/conf_post.h 2012-08-20 16:48:10 +0000 +++ src/conf_post.h 2012-08-31 14:47:20 +0000 @@ -178,9 +178,6 @@ #endif #include -/* If you think about removing the line below, note that the - MS-Windows build relies on it for declaration of 'environ' needed - by a few source files. */ #include #if __GNUC__ >= 3 /* On GCC 3.0 we might get a warning. */ === modified file 'src/emacs.c' --- src/emacs.c 2012-08-25 06:38:43 +0000 +++ src/emacs.c 2012-08-31 14:58:40 +0000 @@ -345,22 +345,6 @@ } #endif -/* We define abort, rather than using it from the library, - so that GDB can return from a breakpoint here. - MSDOS has its own definition in msdos.c. */ - -#if ! defined (DOS_NT) && ! defined (NO_ABORT) - -void -abort (void) -{ - kill (getpid (), SIGABRT); - /* This shouldn't be executed, but it prevents a warning. */ - exit (1); -} -#endif - - /* Code for dealing with Lisp access to the Unix command line. */ static void === modified file 'src/msdos.c' --- src/msdos.c 2012-08-21 10:21:04 +0000 +++ src/msdos.c 2012-08-31 14:56:42 +0000 @@ -4215,26 +4215,8 @@ } #endif -#ifdef abort -#undef abort void -dos_abort (char *file, int line) -{ - char buffer1[200], buffer2[400]; - int i, j; - - sprintf (buffer1, "", file, line); - for (i = j = 0; buffer1[i]; i++) { - buffer2[j++] = buffer1[i]; - buffer2[j++] = 0x70; - } - dosmemput (buffer2, j, (int)ScreenPrimary); - ScreenSetCursor (2, 0); - abort (); -} -#else -void -abort (void) +emacs_abort (void) { dos_ttcooked (); ScreenSetCursor (10, 0); @@ -4250,7 +4232,6 @@ #endif /* __DJGPP_MINOR__ >= 2 */ exit (2); } -#endif void syms_of_msdos (void) === modified file 'src/sysdep.c' --- src/sysdep.c 2012-08-18 02:49:24 +0000 +++ src/sysdep.c 2012-08-30 22:25:36 +0000 @@ -1838,6 +1838,15 @@ } #endif +#ifndef HAVE_NTGUI +/* Using emacs_abort lets GDB return from a breakpoint here. */ +void +emacs_abort (void) +{ + (abort) (); +} +#endif + int emacs_open (const char *path, int oflag, int mode) { === modified file 'src/w32.c' --- src/w32.c 2012-08-26 10:29:37 +0000 +++ src/w32.c 2012-08-31 15:03:25 +0000 @@ -6640,8 +6640,7 @@ buffer, "Emacs Abort Dialog", MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL); - /* Use the low-level Emacs abort. */ -#undef abort + /* Use the low-level system abort. */ abort (); } else === modified file 'src/w32fns.c' --- src/w32fns.c 2012-08-18 06:06:39 +0000 +++ src/w32fns.c 2012-08-31 15:04:03 +0000 @@ -7194,10 +7194,8 @@ syms_of_w32uniscribe (); } -#undef abort - void -w32_abort (void) +emacs_abort (void) { int button; button = MessageBox (NULL, --------------080101000404000603030903 Content-Type: text/plain; charset=UTF-8; name="no-abort.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="no-abort.txt" IyBCYXphYXIgbWVyZ2UgZGlyZWN0aXZlIGZvcm1hdCAyIChCYXphYXIgMC45MCkKIyByZXZp c2lvbl9pZDogZWdnZXJ0QGNzLnVjbGEuZWR1LTIwMTIwODMxMTYzNDQ1LTBudXMyczc2dzU1 Z2l3ZTEKIyB0YXJnZXRfYnJhbmNoOiBienIrc3NoOi8vZWdnZXJ0QGJ6ci5zYXZhbm5haC5n bnUub3JnL2VtYWNzL3RydW5rCiMgdGVzdGFtZW50X3NoYTE6IDJjMDhjMGQwMDZiNjNmMDc0 MjY3NTM0MjJlMjhjOWQ4ZWRjZTU1ZjkKIyB0aW1lc3RhbXA6IDIwMTItMDgtMzEgMDk6MzQ6 NTMgLTA3MDAKIyBiYXNlX3JldmlzaW9uX2lkOiBtaWNoYWVsLmFsYmludXNAZ214LmRlLTIw MTIwODMxMTExMTA2LVwKIyAgIGtrMGc3bWc1M2Y2bTJhZjQKIyAKIyBCZWdpbiBwYXRjaAo9 PT0gbW9kaWZpZWQgZmlsZSAnQ2hhbmdlTG9nJwotLS0gQ2hhbmdlTG9nCTIwMTItMDgtMjgg MTY6MDE6NTkgKzAwMDAKKysrIENoYW5nZUxvZwkyMDEyLTA4LTMxIDAzOjIwOjIzICswMDAw CkBAIC0xLDMgKzEsOCBAQAorMjAxMi0wOC0zMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3Mu dWNsYS5lZHU+CisKKwlTaW1wbGlmeSByZWRlZmluaXRpb24gb2YgJ2Fib3J0JyAoQnVnIzEy MzE2KS4KKwkqIGNvbmZpZ3VyZS5hYyAoTk9fQUJSVCk6IFJlbW92ZS4KKwogMjAxMi0wOC0y NiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CiAKIAkqIGNvbmZpZ3VyZS5h YyAoQ0ZMQUdTKTogUHJlZmVyIC1nMyB0byAtZyBpZiAtZzMgd29ya3MKCj09PSBtb2RpZmll ZCBmaWxlICdhZG1pbi9DUFAtREVGSU5FUycKLS0tIGFkbWluL0NQUC1ERUZJTkVTCTIwMTIt MDgtMTggMjE6MzY6MTMgKzAwMDAKKysrIGFkbWluL0NQUC1ERUZJTkVTCTIwMTItMDgtMzEg MDM6MDY6MTMgKzAwMDAKQEAgLTQyOCw3ICs0MjgsNiBAQAogTUFJTF9VU0VfU1lTVEVNX0xP Q0sKIE1BWFBBVEhMRU4KIE5MSVNUX1NUUlVDVAotTk9fQUJPUlQKIE5PX0VESVRSRVMKIE5P X01BVEhFUlIKIE5PX1RFUk1JTwoKPT09IG1vZGlmaWVkIGZpbGUgJ2FkbWluL0NoYW5nZUxv ZycKLS0tIGFkbWluL0NoYW5nZUxvZwkyMDEyLTA4LTI4IDE5OjI2OjQxICswMDAwCisrKyBh ZG1pbi9DaGFuZ2VMb2cJMjAxMi0wOC0zMSAwMzoyMDoyMyArMDAwMApAQCAtMSwzICsxLDgg QEAKKzIwMTItMDgtMzEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJ U2ltcGxpZnkgcmVkZWZpbml0aW9uIG9mICdhYm9ydCcgKEJ1ZyMxMjMxNikuCisJKiBDUFAt REVGSU5FUyAoTk9fQUJPUlQpOiBSZW1vdmUuCisKIDIwMTItMDgtMjggIEdsZW5uIE1vcnJp cyAgPHJnbUBnbnUub3JnPgogCiAJKiBienJtZXJnZS5lbCAoYnpybWVyZ2UtbWVyZ2VzKTog QWxsb3cgdW52ZXJzaW9uZWQgZmlsZXMgaW4gdGhlIHRyZWUuCgo9PT0gbW9kaWZpZWQgZmls ZSAnY29uZmlndXJlLmFjJwotLS0gY29uZmlndXJlLmFjCTIwMTItMDgtMjggMTY6MDE6NTkg KzAwMDAKKysrIGNvbmZpZ3VyZS5hYwkyMDEyLTA4LTMxIDAzOjA2OjEzICswMDAwCkBAIC0z MzIxLDEyICszMzIxLDYgQEAKICAgICBBQ19ERUZJTkUoQlJPS0VOX1BUWV9SRUFEX0FGVEVS X0VBR0FJTiwgMSwgW0RlZmluZSBvbiBGcmVlQlNEIHRvCiAgICAgICB3b3JrIGFyb3VuZCBh biBpc3N1ZSB3aGVuIHJlYWRpbmcgZnJvbSBhIFBUWS5dKQogICAgIDs7Ci0KLSAgZG5sIERl ZmluZSB0aGUgZm9sbG93aW5nIHNvIGVtYWNzIHN5bWJvbHMgd2lsbCBub3QgY29uZmxpY3Qg d2l0aCB0aG9zZQotICBkbmwgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsuICBPdGhlcndpc2Ug LXByZWJpbmQgd2lsbCBub3Qgd29yay4KLSAgZGFyd2luKQotICAgIEFDX0RFRklORShOT19B Qk9SVCwgMSwgW0RvIG5vdCBkZWZpbmUgYWJvcnQgaW4gZW1hY3MuYy5dKQotICAgIDs7CiBl c2FjCiAKIGNhc2UgJG9wc3lzIGluCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvQ2hhbmdlTG9n JwotLS0gbnQvQ2hhbmdlTG9nCTIwMTItMDgtMjggMTY6MDE6NTkgKzAwMDAKKysrIG50L0No YW5nZUxvZwkyMDEyLTA4LTMxIDE2OjM0OjQ1ICswMDAwCkBAIC0xLDMgKzEsOCBAQAorMjAx Mi0wOC0zMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlTaW1wbGlm eSByZWRlZmluaXRpb24gb2YgJ2Fib3J0JyAoQnVnIzEyMzE2KS4KKwkqIGluYy9tcy13MzIu aCAodzMyX2Fib3J0KSBbSEFWRV9OVEdVSV06IFJlbW92ZS4KKwogMjAxMi0wOC0yMiAgSnVh bm1hIEJhcnJhbnF1ZXJvICA8bGVra3R1QGdtYWlsLmNvbT4KIAogCSogY29uZmlnLm50OiBT eW5jIHdpdGggYXV0b2dlbi9jb25maWcuaW4uCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvaW5j L21zLXczMi5oJwotLS0gbnQvaW5jL21zLXczMi5oCTIwMTItMDgtMDcgMTE6MDM6NDggKzAw MDAKKysrIG50L2luYy9tcy13MzIuaAkyMDEyLTA4LTMxIDAzOjA2OjEzICswMDAwCkBAIC0z MzQsMTYgKzMzNCw3IEBACiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjZW5kaWYKIAotLyogc3Rk bGliLmggbXVzdCBiZSBpbmNsdWRlZCBhZnRlciByZWRlZmluaW5nIG1hbGxvYyAmIGZyaWVu ZHMsIGJ1dAotICAgYmVmb3JlIHJlZGVmaW5pbmcgYWJvcnQuICBJc24ndCBsaWJyYXJ5IHJl ZGVmaW5pdGlvbiBmdW5ueT8gICovCiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qIFJlZGVm aW5lIGFib3J0LiAgKi8KLSNpZmRlZiBIQVZFX05UR1VJCi0jZGVmaW5lIGFib3J0CXczMl9h Ym9ydAotZXh0ZXJuIF9Ob3JldHVybiB2b2lkIHczMl9hYm9ydCAodm9pZCk7Ci0jZW5kaWYK LQogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKIC8qIERlZmluZSBmb3IgdGhvc2Ugc291cmNl IGZpbGVzIHRoYXQgZG8gbm90IGluY2x1ZGUgZW5vdWdoIE5UIHN5c3RlbSBmaWxlcy4gICov Cgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvaW5jL3VuaXN0ZC5oJwotLS0gbnQvaW5jL3VuaXN0 ZC5oCTIwMTEtMDItMjcgMTk6NDg6MzEgKzAwMDAKKysrIG50L2luYy91bmlzdGQuaAkyMDEy LTA4LTMxIDE2OjM0OjQ1ICswMDAwCkBAIC0zLDggKzMsMTIgQEAKICNpZm5kZWYgX1VOSVNU RF9ICiAjZGVmaW5lIF9VTklTVERfSAogCisvKiBPbiBNaWNyb3NvZnQgcGxhdGZvcm1zLCA8 c3RkbGliLmg+IGRlY2xhcmVzICdlbnZpcm9uJzsgb24gUE9TSVgKKyAgIHBsYXRmb3Jtcywg PHVuaXN0ZC5oPiBkb2VzLiAgRXZlcnkgZmlsZSBpbiBFbWFjcyB0aGF0IGluY2x1ZGVzCisg ICA8dW5pc3RkLmg+IGFsc28gaW5jbHVkZXMgPHN0ZGxpYi5oPiwgc28gdGhlcmUncyBubyBu ZWVkIHRvIGRlY2xhcmUKKyAgICdlbnZpcm9uJyBoZXJlLiAgKi8KKwogZXh0ZXJuIHNzaXpl X3QgcmVhZGxpbmsgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOwogZXh0ZXJuIGlu dCBzeW1saW5rIChjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKik7CiAKICNlbmRpZgkvKiBf VU5JU1REX0ggKi8KLQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy8uZ2RiaW5pdCcKLS0tIHNy Yy8uZ2RiaW5pdAkyMDEyLTA4LTIwIDE3OjMyOjMxICswMDAwCisrKyBzcmMvLmdkYmluaXQJ MjAxMi0wOC0zMSAwMzowNjoxMyArMDAwMApAQCAtMTIyMiwxNCArMTIyMiw5IEBACiAgIHNl dCAkdGVtID0gKHN0cnVjdCBMaXNwX1N0cmluZyAqKSAkcHRyCiAgIHNldCAkdGVtID0gKGNo YXIgKikgJHRlbS0+ZGF0YQogCi0gICMgRG9uJ3QgbGV0IGFib3J0IGFjdHVhbGx5IHJ1biwg YXMgaXQgd2lsbCBtYWtlIHN0ZGlvIHN0b3Agd29ya2luZyBhbmQKLSAgIyB0aGVyZWZvcmUg dGhlIGBwcicgY29tbWFuZCBhYm92ZSBhcyB3ZWxsLgotICBpZiAkdGVtWzBdID09ICd3JyAm JiAkdGVtWzFdID09ICdpJyAmJiAkdGVtWzJdID09ICduJyAmJiAkdGVtWzNdID09ICdkJwot ICAgICMgVGhlIHdpbmRvd3MtbnQgYnVpbGQgcmVwbGFjZXMgYWJvcnQgd2l0aCBpdHMgb3du IGZ1bmN0aW9uLgotICAgIGJyZWFrIHczMl9hYm9ydAotICBlbHNlCi0gICAgYnJlYWsgYWJv cnQKLSAgZW5kCisgICMgRG9uJ3QgbGV0IGVtYWNzX2Fib3J0IGFjdHVhbGx5IHJ1biwgYXMg aXQgd2lsbCBtYWtlIHN0ZGlvIHN0b3AKKyAgIyB3b3JraW5nIGFuZCB0aGVyZWZvcmUgdGhl ICdwcicgY29tbWFuZCBhYm92ZSBhcyB3ZWxsLgorICBicmVhayBlbWFjc19hYm9ydAogZW5k CiAKICMgeF9lcnJvcl9xdWl0dGVyIGlzIGRlZmluZWQgb25seSBvbiBYLiAgQnV0IHdpbmRv dy1zeXN0ZW0gaXMgc2V0IHVwCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL0NoYW5nZUxvZycK LS0tIHNyYy9DaGFuZ2VMb2cJMjAxMi0wOC0zMSAxMDo1MzoxOSArMDAwMAorKysgc3JjL0No YW5nZUxvZwkyMDEyLTA4LTMxIDE2OjM0OjQ1ICswMDAwCkBAIC0xLDMgKzEsMjMgQEAKKzIw MTItMDgtMzEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJU2ltcGxp ZnkgcmVkZWZpbml0aW9uIG9mICdhYm9ydCcgKEJ1ZyMxMjMxNikuCisJRG8gbm90IHRyeSB0 byByZWRlZmluZSB0aGUgJ2Fib3J0JyBmdW5jdGlvbi4gIEluc3RlYWQsIHJlZG8KKwl0aGUg Y29kZSBzbyB0aGF0IGl0IGNhbGxzICdlbWFjc19hYm9ydCcgcmF0aGVyIHRoYW4gJ2Fib3J0 Jy4KKwlUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRoZSBOT19BQk9SVCBjb25maWd1cmUt dGltZSBtYWNybworCWFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gY2hhbmdlIHRoZSBhYm9ydCBj b2RlIHRvIGRvIGEgYmFja3RyYWNlLgorCSogLmdkYmluaXQ6IEp1c3Qgc3RvcCBhdCBlbWFj c19hYm9ydCwgbm90IGF0IHczMl9hYm9ydCBvciBhYm9ydC4KKwkqIGVtYWNzLmMgKGFib3J0 KSBbIURPU19OVCAmJiAhTk9fQUJPUlRdOgorCVJlbW92ZTsgc3lzZGVwLmMncyBlbWFjc19h Ym9ydCBub3cgdGFrZXMgaXRzIHBsYWNlLgorCSogbGlzcC5oIChlbWFjc19hYm9ydCk6IE5l dyBkZWNsLiAgQWxsIGNhbGxzIGZyb20gRW1hY3MgY29kZSB0bworCSdhYm9ydCcgY2hhbmdl ZCB0byB1c2UgJ2VtYWNzX2Fib3J0Jy4KKwkqIG1zZG9zLmMgKGRvc19hYm9ydCkgW2RlZmlu ZWQgYWJvcnRdOiBSZW1vdmU7IG5vdCB1c2VkLgorCShhYm9ydCkgWyFkZWZpbmVkIGFib3J0 XTogUmVuYW1lIHRvIC4uLgorCShlbWFjc19hYm9ydCk6IC4uLiBuZXcgbmFtZS4KKwkqIHN5 c2RlcC5jIChlbWFjc19hYm9ydCkgWyFIQVZFX05UR1VJXTogTmV3IGZ1bmN0aW9uLCB0YWtp bmcKKwl0aGUgcGxhY2Ugb2YgdGhlIG9sZCAnYWJvcnQnIGluIGVtYWNzLmMuCisJKiB3MzIu YywgdzMyZm5zLmMgKGFib3J0KTogRG8gbm90ICN1bmRlZi4KKwkqIHczMi5jIChlbWFjc19h Ym9ydCk6IFJlbmFtZSBmcm9tIHczMl9hYm9ydC4KKwogMjAxMi0wOC0zMSAgRG1pdHJ5IEFu dGlwb3YgIDxkbWFudGlwb3ZAeWFuZGV4LnJ1PgogCiAJUmVtb3ZlIG1hcmtfdHR5cyBmdW5j dGlvbiBhbmQgZml4IHR0eV9kaXNwbGF5X2luZm8gaW5pdGlhbGl6YXRpb24uCgo9PT0gbW9k aWZpZWQgZmlsZSAnc3JjL2FsbG9jLmMnCi0tLSBzcmMvYWxsb2MuYwkyMDEyLTA4LTMxIDEw OjUzOjE5ICswMDAwCisrKyBzcmMvYWxsb2MuYwkyMDEyLTA4LTMxIDE2OjIxOjU2ICswMDAw CkBAIC02MTAsNyArNjEwLDcgQEAKICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqdmFsOwog ICBpbnQgb3ZlcmhlYWQgPSArK2NoZWNrX2RlcHRoID09IDEgPyBYTUFMTE9DX09WRVJSVU5f Q0hFQ0tfT1ZFUkhFQUQgOiAwOwogICBpZiAoU0laRV9NQVggLSBvdmVyaGVhZCA8IHNpemUp Ci0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgdmFsID0gbWFsbG9j IChzaXplICsgb3ZlcmhlYWQpOwogICBpZiAodmFsICYmIGNoZWNrX2RlcHRoID09IDEpCkBA IC02MzUsNyArNjM1LDcgQEAKICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqdmFsID0gKHVu c2lnbmVkIGNoYXIgKikgYmxvY2s7CiAgIGludCBvdmVyaGVhZCA9ICsrY2hlY2tfZGVwdGgg PT0gMSA/IFhNQUxMT0NfT1ZFUlJVTl9DSEVDS19PVkVSSEVBRCA6IDA7CiAgIGlmIChTSVpF X01BWCAtIG92ZXJoZWFkIDwgc2l6ZSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9y dCAoKTsKIAogICBpZiAodmFsCiAgICAgICAmJiBjaGVja19kZXB0aCA9PSAxCkBAIC02NDYs NyArNjQ2LDcgQEAKICAgICAgIHNpemVfdCBvc2l6ZSA9IHhtYWxsb2NfZ2V0X3NpemUgKHZh bCk7CiAgICAgICBpZiAobWVtY21wICh4bWFsbG9jX292ZXJydW5fY2hlY2tfdHJhaWxlciwg dmFsICsgb3NpemUsCiAJCSAgWE1BTExPQ19PVkVSUlVOX0NIRUNLX1NJWkUpKQotCWFib3J0 ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgICAgbWVtc2V0ICh2YWwgKyBvc2l6ZSwgMCwg WE1BTExPQ19PVkVSUlVOX0NIRUNLX1NJWkUpOwogICAgICAgdmFsIC09IFhNQUxMT0NfT1ZF UlJVTl9DSEVDS19TSVpFICsgWE1BTExPQ19PVkVSUlVOX1NJWkVfU0laRTsKICAgICAgIG1l bXNldCAodmFsLCAwLCBYTUFMTE9DX09WRVJSVU5fQ0hFQ0tfU0laRSArIFhNQUxMT0NfT1ZF UlJVTl9TSVpFX1NJWkUpOwpAQCAtNjgzLDcgKzY4Myw3IEBACiAgICAgICBzaXplX3Qgb3Np emUgPSB4bWFsbG9jX2dldF9zaXplICh2YWwpOwogICAgICAgaWYgKG1lbWNtcCAoeG1hbGxv Y19vdmVycnVuX2NoZWNrX3RyYWlsZXIsIHZhbCArIG9zaXplLAogCQkgIFhNQUxMT0NfT1ZF UlJVTl9DSEVDS19TSVpFKSkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICNpZmRl ZiBYTUFMTE9DX0NMRUFSX0ZSRUVfTUVNT1JZCiAgICAgICB2YWwgLT0gWE1BTExPQ19PVkVS UlVOX0NIRUNLX1NJWkUgKyBYTUFMTE9DX09WRVJSVU5fU0laRV9TSVpFOwogICAgICAgbWVt c2V0ICh2YWwsIDB4ZmYsIG9zaXplICsgWE1BTExPQ19PVkVSUlVOX0NIRUNLX09WRVJIRUFE KTsKQEAgLTEyNjksNyArMTI2OSw3IEBACiAJewogCSAgZnByaW50ZiAoc3RkZXJyLAogCQkg ICAiRnJlZWluZyBgJXAnIHdoaWNoIHdhc24ndCBhbGxvY2F0ZWQgd2l0aCBtYWxsb2NcbiIs IHB0cik7Ci0JICBhYm9ydCAoKTsKKwkgIGVtYWNzX2Fib3J0ICgpOwogCX0KICAgICAgIGVs c2UKIAl7CkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCWZwcmludGYgKHN0ZGVyciwgIlJlZ2lv biBpbiB1c2UgaXMgJXAuLi4lcCwgJXRkIGJ5dGVzLCB0eXBlICVkXG4iLAogCQkgbS0+c3Rh cnQsIG0tPmVuZCwgKGNoYXIgKikgbS0+ZW5kIC0gKGNoYXIgKikgbS0+c3RhcnQsCiAJCSBt LT50eXBlKTsKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICAgIH0KIAogICAg IGlmICghZG9udF9yZWdpc3Rlcl9ibG9ja3MpCkBAIC0xMzY2LDcgKzEzNjYsNyBAQAogCSAg ZnByaW50ZiAoc3RkZXJyLAogCQkgICAiUmVhbGxvYyBvZiAlcCB3aGljaCB3YXNuJ3QgYWxs b2NhdGVkIHdpdGggbWFsbG9jXG4iLAogCQkgICBwdHIpOwotCSAgYWJvcnQgKCk7CisJICBl bWFjc19hYm9ydCAoKTsKIAl9CiAKICAgICAgIG1lbV9kZWxldGUgKG0pOwpAQCAtMTM4OCw3 ICsxMzg4LDcgQEAKICAgICBpZiAobSAhPSBNRU1fTklMKQogICAgICAgewogCWZwcmludGYg KHN0ZGVyciwgIlJlYWxsb2MgcmV0dXJucyBtZW1vcnkgdGhhdCBpcyBhbHJlYWR5IGluIHVz ZVxuIik7Ci0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICB9CiAKICAgICAv KiBDYW4ndCBoYW5kbGUgemVybyBzaXplIHJlZ2lvbnMgaW4gdGhlIHJlZC1ibGFjayB0cmVl LiAgKi8KQEAgLTE4MDEsNyArMTgwMSw3IEBACiAgIGlmICghUFVSRV9QT0lOVEVSX1AgKHMp CiAgICAgICAmJiBzLT5kYXRhCiAgICAgICAmJiBuYnl0ZXMgIT0gU0RBVEFfTkJZVEVTIChT REFUQV9PRl9TVFJJTkcgKHMpKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAo KTsKICAgcmV0dXJuIG5ieXRlczsKIH0KIApAQCAtMTg3NSw3ICsxODc1LDcgQEAKICAgd2hp bGUgKHMgIT0gTlVMTCkKICAgICB7CiAgICAgICBpZiAoKHVpbnRwdHJfdCkgcyA8IDEwMjQp Ci0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBzID0gTkVYVF9GUkVFX0xJ U1BfU1RSSU5HIChzKTsKICAgICB9CiB9CkBAIC0yMTA0LDcgKzIxMDQsNyBAQAogCQkgICAg IGJhY2stcG9pbnRlciBzbyB0aGF0IHdlIGtub3cgaXQncyBmcmVlLiAgKi8KICNpZmRlZiBH Q19DSEVDS19TVFJJTkdfQllURVMKIAkJICBpZiAoc3RyaW5nX2J5dGVzIChzKSAhPSBTREFU QV9OQllURVMgKGRhdGEpKQotCQkgICAgYWJvcnQgKCk7CisJCSAgICBlbWFjc19hYm9ydCAo KTsKICNlbHNlCiAJCSAgZGF0YS0+dS5uYnl0ZXMgPSBTVFJJTkdfQllURVMgKHMpOwogI2Vu ZGlmCkBAIC0yMjE1LDcgKzIyMTUsNyBAQAogCSAgLyogQ2hlY2sgdGhhdCB0aGUgc3RyaW5n IHNpemUgcmVjb3JkZWQgaW4gdGhlIHN0cmluZyBpcyB0aGUKIAkgICAgIHNhbWUgYXMgdGhl IG9uZSByZWNvcmRlZCBpbiB0aGUgc2RhdGEgc3RydWN0dXJlLiAqLwogCSAgaWYgKHMgJiYg c3RyaW5nX2J5dGVzIChzKSAhPSBTREFUQV9OQllURVMgKGZyb20pKQotCSAgICBhYm9ydCAo KTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAjZW5kaWYgLyogR0NfQ0hFQ0tfU1RSSU5HX0JZ VEVTICovCiAKIAkgIG5ieXRlcyA9IHMgPyBTVFJJTkdfQllURVMgKHMpIDogU0RBVEFfTkJZ VEVTIChmcm9tKTsKQEAgLTIyMjgsNyArMjIyOCw3IEBACiAJICBpZiAobWVtY21wIChzdHJp bmdfb3ZlcnJ1bl9jb29raWUsCiAJCSAgICAgIChjaGFyICopIGZyb21fZW5kIC0gR0NfU1RS SU5HX09WRVJSVU5fQ09PS0lFX1NJWkUsCiAJCSAgICAgIEdDX1NUUklOR19PVkVSUlVOX0NP T0tJRV9TSVpFKSkKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogI2Vu ZGlmCiAKIAkgIC8qIE5vbi1OVUxMIFMgbWVhbnMgaXQncyBhbGl2ZS4gIENvcHkgaXRzIGRh dGEuICAqLwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAKICAgc3RydWN0IExpc3BfU3RyaW5nICpz OwogCiAgIGlmIChuY2hhcnMgPCAwKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0 ICgpOwogICBpZiAoIW5ieXRlcykKICAgICByZXR1cm4gZW1wdHlfbXVsdGlieXRlX3N0cmlu ZzsKIApAQCAtMjgwNiw3ICsyODA2LDcgQEAKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ09O U1RZUEVfSEVBUCkKIAl2YWwgPSBGY29ucyAob2JqcFtpXSwgdmFsKTsKICAgICAgIGVsc2UK LQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICB9CiAgIHJldHVybiB2YWw7CiB9 CkBAIC0zOTE2LDcgKzM5MTYsNyBAQAogICB3aGlsZSAoYyAhPSBNRU1fTklMKQogICAgIHsK ICAgICAgIGlmIChzdGFydCA+PSBjLT5zdGFydCAmJiBzdGFydCA8IGMtPmVuZCkKLQlhYm9y dCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICAgIHBhcmVudCA9IGM7CiAgICAgICBjID0g c3RhcnQgPCBjLT5zdGFydCA/IGMtPmxlZnQgOiBjLT5yaWdodDsKICAgICB9CkBAIC0zOTM1 LDcgKzM5MzUsNyBAQAogI2lmZGVmIEdDX01BTExPQ19DSEVDSwogICB4ID0gX21hbGxvY19p bnRlcm5hbCAoc2l6ZW9mICp4KTsKICAgaWYgKHggPT0gTlVMTCkKLSAgICBhYm9ydCAoKTsK KyAgICBlbWFjc19hYm9ydCAoKTsKICNlbHNlCiAgIHggPSB4bWFsbG9jIChzaXplb2YgKngp OwogI2VuZGlmCkBAIC00NjEwLDcgKzQ2MTAsNyBAQAogCSAgYnJlYWs7CiAKIAlkZWZhdWx0 OgotCSAgYWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKIAl9CiAKICAgICAgIGlmICgh TklMUCAob2JqKSkKQEAgLTQ4MDcsNyArNDgwNyw3IEBACiAgICAgICBpZiAoIXN1cnZpdmVz X2djX3AgKHAtPnZhcltpXSkpCiAJLyogRklYTUU6IEl0J3Mgbm90IG5lY2Vzc2FyaWx5IGEg YnVnLiAgSXQgbWlnaHQganVzdCBiZSB0aGF0IHRoZQogCSAgIEdDUFJPIGlzIHVubmVjZXNz YXJ5IG9yIHNob3VsZCByZWxlYXNlIHRoZSBvYmplY3Qgc29vbmVyLiAgKi8KLQlhYm9ydCAo KTsKKwllbWFjc19hYm9ydCAoKTsKIH0KIAogI2VsaWYgR0NfTUFSS19TVEFDSyA9PSBHQ19V U0VfR0NQUk9TX0NIRUNLX1pPTUJJRVMKQEAgLTUzNDgsNyArNTM0OCw3IEBACiB7CiAgIHN0 YXRpY3ZlY1tzdGF0aWNpZHgrK10gPSB2YXJhZGRyZXNzOwogICBpZiAoc3RhdGljaWR4ID49 IE5TVEFUSUNTKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogfQogCiAM CkBAIC01NDAzLDcgKzU0MDMsNyBAQAogICBMaXNwX09iamVjdCByZXR2YWwgPSBRbmlsOwog CiAgIGlmIChhYm9ydF9vbl9nYykKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAo KTsKIAogICAvKiBDYW4ndCBHQyBpZiBwdXJlIHN0b3JhZ2Ugb3ZlcmZsb3dlZCBiZWNhdXNl IHdlIGNhbid0IGRldGVybWluZQogICAgICBpZiBzb21ldGhpbmcgaXMgYSBwdXJlIG9iamVj dCBvciBub3QuICAqLwpAQCAtNTg4Nyw3ICs1ODg3LDcgQEAKICAgZG8gewkJCQkJCVwKICAg ICBtID0gbWVtX2ZpbmQgKHBvKTsJCQkJXAogICAgIGlmIChtID09IE1FTV9OSUwpCQkJCVwK LSAgICAgIGFib3J0ICgpOwkJCQkJXAorICAgICAgZW1hY3NfYWJvcnQgKCk7CQkJCVwKICAg fSB3aGlsZSAoMCkKIAogICAvKiBDaGVjayB0aGF0IHRoZSBvYmplY3QgcG9pbnRlZCB0byBi eSBQTyBpcyBsaXZlLCB1c2luZyBwcmVkaWNhdGUKQEAgLTU4OTUsNyArNTg5NSw3IEBACiAj ZGVmaW5lIENIRUNLX0xJVkUoTElWRVApCQkJXAogICBkbyB7CQkJCQkJXAogICAgIGlmICgh TElWRVAgKG0sIHBvKSkJCQkJXAotICAgICAgYWJvcnQgKCk7CQkJCQlcCisgICAgICBlbWFj c19hYm9ydCAoKTsJCQkJXAogICB9IHdoaWxlICgwKQogCiAgIC8qIENoZWNrIGJvdGggb2Yg dGhlIGFib3ZlIGNvbmRpdGlvbnMuICAqLwpAQCAtNTk0Myw3ICs1OTQzLDcgQEAKIAlpZiAo bSA9PSBNRU1fTklMICYmICFTVUJSUCAob2JqKQogCSAgICAmJiBwbyAhPSAmYnVmZmVyX2Rl ZmF1bHRzCiAJICAgICYmIHBvICE9ICZidWZmZXJfbG9jYWxfc3ltYm9scykKLQkgIGFib3J0 ICgpOworCSAgZW1hY3NfYWJvcnQgKCk7CiAjZW5kaWYgLyogR0NfQ0hFQ0tfTUFSS0VEX09C SkVDVFMgKi8KIAogCWlmIChwdHItPmhlYWRlci5zaXplICYgUFNFVURPVkVDVE9SX0ZMQUcp CkBAIC01OTY2LDcgKzU5NjYsNyBAQAogCQkgIGlmIChiID09IHBvKQogCQkgICAgYnJlYWs7 CiAJCWlmIChiID09IE5VTEwpCi0JCSAgYWJvcnQgKCk7CisJCSAgZW1hY3NfYWJvcnQgKCk7 CiAJICAgICAgfQogI2VuZGlmIC8qIEdDX0NIRUNLX01BUktFRF9PQkpFQ1RTICovCiAJICAg IG1hcmtfYnVmZmVyICgoc3RydWN0IGJ1ZmZlciAqKSBwdHIpOwpAQCAtNjA0Miw3ICs2MDQy LDcgQEAKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgUFZFQ19GUkVFOgotCSAgICBhYm9ydCAo KTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAKIAkgIGRlZmF1bHQ6CiAJICAgIG1hcmtfdmVj dG9ybGlrZSAocHRyKTsKQEAgLTYwODksNyArNjA4OSw3IEBACiAJICAgICAgIEFuZCBpZiBp dCdzIGZvcndhcmRlZCB0byBhIEMgdmFyaWFibGUsIGVpdGhlciBpdCdzIG5vdAogCSAgICAg ICBhIExpc3BfT2JqZWN0IHZhciwgb3IgaXQncyBzdGF0aWNwcm8nZCBhbHJlYWR5LiAgKi8K IAkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OiBhYm9ydCAoKTsKKwkgIGRlZmF1bHQ6IGVtYWNz X2Fib3J0ICgpOwogCSAgfQogCWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+ bmFtZSkpKQogCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+bmFtZSkpOwpAQCAtNjE0 Myw3ICs2MTQzLDcgQEAKIAkgIGJyZWFrOwogCiAJZGVmYXVsdDoKLQkgIGFib3J0ICgpOwor CSAgZW1hY3NfYWJvcnQgKCk7CiAJfQogICAgICAgYnJlYWs7CiAKQEAgLTYxNjUsNyArNjE2 NSw3IEBACiAJb2JqID0gcHRyLT51LmNkcjsKIAljZHJfY291bnQrKzsKIAlpZiAoY2RyX2Nv dW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKLQkgIGFib3J0ICgpOworCSAgZW1hY3Nf YWJvcnQgKCk7CiAJZ290byBsb29wOwogICAgICAgfQogCkBAIC02MTc4LDcgKzYxNzgsNyBA QAogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgYWJvcnQgKCk7CisgICAg ICBlbWFjc19hYm9ydCAoKTsKICAgICB9CiAKICN1bmRlZiBDSEVDS19MSVZFCkBAIC02MjQ3 LDcgKzYyNDcsNyBAQAogICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgYWJv cnQgKCk7CisgICAgICBlbWFjc19hYm9ydCAoKTsKICAgICB9CiAKICAgcmV0dXJuIHN1cnZp dmVzX3AgfHwgUFVSRV9QT0lOVEVSX1AgKCh2b2lkICopIFhQTlRSIChvYmopKTsKQEAgLTY2 OTksNyArNjY5OSw3IEBACiAJICAgZmlsZSwgbGluZSwgbXNnKTsKICAgbnBvaW50ZXJzID0g YmFja3RyYWNlIChidWZmZXIsIE5QT0lOVEVSU19NQVgpOwogICBiYWNrdHJhY2Vfc3ltYm9s c19mZCAoYnVmZmVyLCBucG9pbnRlcnMsIFNUREVSUl9GSUxFTk8pOwotICBhYm9ydCAoKTsK KyAgZW1hY3NfYWJvcnQgKCk7CiB9CiAjZW5kaWYKIAwKCj09PSBtb2RpZmllZCBmaWxlICdz cmMvYmlkaS5jJwotLS0gc3JjL2JpZGkuYwkyMDEyLTA4LTIzIDIwOjMxOjUyICswMDAwCisr KyBzcmMvYmlkaS5jCTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTEwNSw3ICsxMDUs NyBAQAogICBpZiAoY2ggPT0gQklESV9FT0IpCiAgICAgcmV0dXJuIE5FVVRSQUxfQjsKICAg aWYgKGNoIDwgMCB8fCBjaCA+IE1BWF9DSEFSKQotICAgIGFib3J0ICgpOworICAgIGVtYWNz X2Fib3J0ICgpOwogCiAgIGRlZmF1bHRfdHlwZSA9IChiaWRpX3R5cGVfdCkgWElOVCAoQ0hB Ul9UQUJMRV9SRUYgKGJpZGlfdHlwZV90YWJsZSwgY2gpKTsKICAgLyogRXZlcnkgdmFsaWQg Y2hhcmFjdGVyIGNvZGUsIGV2ZW4gdGhvc2UgdGhhdCBhcmUgdW5hc3NpZ25lZCBieSB0aGUK QEAgLTExMyw3ICsxMTMsNyBAQAogICAgICBEZXJpdmVkQmlkaUNsYXNzLnR4dCBmaWxlLiAg VGhlcmVmb3JlLCBpZiB3ZSBldmVyIGdldCBVTktOT1dOX0JUCiAgICAgICg9IHplcm8pIGNv ZGUgZnJvbSBDSEFSX1RBQkxFX1JFRiwgdGhhdCdzIGEgYnVnLiAgKi8KICAgaWYgKGRlZmF1 bHRfdHlwZSA9PSBVTktOT1dOX0JUKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0 ICgpOwogCiAgIGlmIChvdmVycmlkZSA9PSBORVVUUkFMX0RJUikKICAgICByZXR1cm4gZGVm YXVsdF90eXBlOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJICAgICAgZWxzZSBpZiAob3ZlcnJp ZGUgPT0gUjJMKQogCQlyZXR1cm4gU1RST05HX1I7CiAJICAgICAgZWxzZQotCQlhYm9ydCAo KTsJLyogY2FuJ3QgaGFwcGVuOiBoYW5kbGVkIGFib3ZlICovCisJCWVtYWNzX2Fib3J0ICgp OwkvKiBjYW4ndCBoYXBwZW46IGhhbmRsZWQgYWJvdmUgKi8KIAkgIH0KICAgICB9CiB9CkBA IC0xODMsNyArMTgzLDcgQEAKICAgICAgIGNhc2UgTkVVVFJBTF9PTjoKIAlyZXR1cm4gTkVV VFJBTDsKICAgICAgIGRlZmF1bHQ6Ci0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAg ICAgfQogfQogCkBAIC0xOTksNyArMTk5LDcgQEAKICAgaWYgKGMgPT0gQklESV9FT0IpCiAg ICAgcmV0dXJuIGM7CiAgIGlmIChjIDwgMCB8fCBjID4gTUFYX0NIQVIpCi0gICAgYWJvcnQg KCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgdmFsID0gQ0hBUl9UQUJMRV9SRUYgKGJp ZGlfbWlycm9yX3RhYmxlLCBjKTsKICAgaWYgKElOVEVHRVJQICh2YWwpKQpAQCAtMjE1LDcg KzIxNSw3IEBACiAgICAgICAvKiBNaW5pbWFsIHRlc3Qgd2UgbXVzdCBkbyBpbiBvcHRpbWl6 ZWQgYnVpbGRzLCB0byBwcmV2ZW50IHdlaXJkCiAJIGNyYXNoZXMgZnVydGhlciBkb3duIHRo ZSByb2FkLiAgKi8KICAgICAgIGlmICh2IDwgMCB8fCB2ID4gTUFYX0NIQVIpCi0JYWJvcnQg KCk7CisJZW1hY3NfYWJvcnQgKCk7CiAKICAgICAgIHJldHVybiB2OwogICAgIH0KQEAgLTM3 Myw3ICszNzMsNyBAQAogICBpbnQgY3VycmVudF9zY2FuX2RpciA9IGJpZGlfaXQtPnNjYW5f ZGlyOwogCiAgIGlmIChpZHggPCBiaWRpX2NhY2hlX3N0YXJ0IHx8IGlkeCA+PSBiaWRpX2Nh Y2hlX2lkeCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBiaWRp X2NvcHlfaXQgKGJpZGlfaXQsICZiaWRpX2NhY2hlW2lkeF0pOwogICBiaWRpX2l0LT5zY2Fu X2RpciA9IGN1cnJlbnRfc2Nhbl9kaXI7CkBAIC01MTgsNyArNTE4LDcgQEAKIAogICAvKiBX ZSBzaG91bGQgbmV2ZXIgY2FjaGUgb24gYmFja3dhcmQgc2NhbnMuICAqLwogICBpZiAoYmlk aV9pdC0+c2Nhbl9kaXIgPT0gLTEpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQg KCk7CiAgIGlkeCA9IGJpZGlfY2FjaGVfc2VhcmNoIChiaWRpX2l0LT5jaGFycG9zLCAtMSwg MSk7CiAKICAgaWYgKGlkeCA8IDApCkBAIC01MzcsNyArNTM3LDcgQEAKIAkgIGlkeCA9IGJp ZGlfY2FjaGVfc3RhcnQ7CiAJfQogICAgICAgaWYgKGJpZGlfaXQtPm5jaGFycyA8PSAwKQot CWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgICAgYmlkaV9jb3B5X2l0ICgmYmlk aV9jYWNoZVtpZHhdLCBiaWRpX2l0KTsKICAgICAgIGlmICghcmVzb2x2ZWQpCiAJYmlkaV9j YWNoZVtpZHhdLnJlc29sdmVkX2xldmVsID0gLTE7CkBAIC01OTIsNyArNTkyLDcgQEAKIGJp ZGlfcGVla19hdF9uZXh0X2xldmVsIChzdHJ1Y3QgYmlkaV9pdCAqYmlkaV9pdCkKIHsKICAg aWYgKGJpZGlfY2FjaGVfaWR4ID09IGJpZGlfY2FjaGVfc3RhcnQgfHwgYmlkaV9jYWNoZV9s YXN0X2lkeCA9PSAtMSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKICAg cmV0dXJuIGJpZGlfY2FjaGVbYmlkaV9jYWNoZV9sYXN0X2lkeCArIGJpZGlfaXQtPnNjYW5f ZGlyXS5yZXNvbHZlZF9sZXZlbDsKIH0KIApAQCAtNjI5LDcgKzYyOSw3IEBACiBiaWRpX3Bv cF9pdCAoc3RydWN0IGJpZGlfaXQgKmJpZGlfaXQpCiB7CiAgIGlmIChiaWRpX2NhY2hlX3N0 YXJ0IDw9IDApCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgLyog UmVzZXQgdGhlIG5leHQgZnJlZSBjYWNoZSBzbG90IGluZGV4IHRvIHdoYXQgaXQgd2FzIGJl Zm9yZSB0aGUKICAgICAgY2FsbCB0byBiaWRpX3B1c2hfaXQuICAqLwpAQCAtNjQwLDcgKzY0 MCw3IEBACiAKICAgLyogUG9wIHRoZSBwcmV2aW91cyBjYWNoZSBzdGFydCBmcm9tIHRoZSBz dGFjay4gICovCiAgIGlmIChiaWRpX2NhY2hlX3NwIDw9IDApCi0gICAgYWJvcnQgKCk7Cisg ICAgZW1hY3NfYWJvcnQgKCk7CiAgIGJpZGlfY2FjaGVfc3RhcnQgPSBiaWRpX2NhY2hlX3N0 YXJ0X3N0YWNrWy0tYmlkaV9jYWNoZV9zcF07CiAKICAgLyogSW52YWxpZGF0ZSB0aGUgbGFz dC11c2VkIGNhY2hlIHNsb3QgZGF0YS4gICovCkBAIC03NjIsMTIgKzc2MiwxMiBAQAogewog ICBiaWRpX3R5cGVfdGFibGUgPSB1bmlwcm9wX3RhYmxlIChpbnRlcm4gKCJiaWRpLWNsYXNz IikpOwogICBpZiAoTklMUCAoYmlkaV90eXBlX3RhYmxlKSkKLSAgICBhYm9ydCAoKTsKKyAg ICBlbWFjc19hYm9ydCAoKTsKICAgc3RhdGljcHJvICgmYmlkaV90eXBlX3RhYmxlKTsKIAog ICBiaWRpX21pcnJvcl90YWJsZSA9IHVuaXByb3BfdGFibGUgKGludGVybiAoIm1pcnJvcmlu ZyIpKTsKICAgaWYgKE5JTFAgKGJpZGlfbWlycm9yX3RhYmxlKSkKLSAgICBhYm9ydCAoKTsK KyAgICBlbWFjc19hYm9ydCAoKTsKICAgc3RhdGljcHJvICgmYmlkaV9taXJyb3JfdGFibGUp OwogCiAgIFFwYXJhZ3JhcGhfc3RhcnQgPSBpbnRlcm4gKCJwYXJhZ3JhcGgtc3RhcnQiKTsK QEAgLTg4NSw3ICs4ODUsNyBAQAogICBlbHNlCiAgICAgewogICAgICAgaWYgKCFDSEFSX0hF QURfUCAoKnApKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogCiAgICAgICB3aGls ZSAocG9zIDwgZW5kKQogCXsKQEAgLTk2NSw3ICs5NjUsNyBAQAogICAgICAgLyogV2UgZG9u J3QgZXhwZWN0IHRvIGZpbmQgb3Vyc2VsdmVzIGluIHRoZSBtaWRkbGUgb2YgYSBkaXNwbGF5 CiAJIHByb3BlcnR5LiAgSG9wZWZ1bGx5LCBpdCB3aWxsIG5ldmVyIGJlIG5lZWRlZC4gICov CiAgICAgICBpZiAoY2hhcnBvcyA+ICpkaXNwX3BvcykKLQlhYm9ydCAoKTsKKwllbWFjc19h Ym9ydCAoKTsKICAgICAgIC8qIFRleHQgY292ZXJlZCBieSBgZGlzcGxheScgcHJvcGVydGll cyBhbmQgb3ZlcmxheXMgd2l0aAogCSBkaXNwbGF5IHByb3BlcnRpZXMgb3IgZGlzcGxheSBz dHJpbmdzIGlzIGhhbmRsZWQgYXMgYSBzaW5nbGUKIAkgY2hhcmFjdGVyIHRoYXQgcmVwcmVz ZW50cyB0aGUgZW50aXJlIHJ1biBvZiBjaGFyYWN0ZXJzCkBAIC05OTUsNyArOTk1LDcgQEAK IAl9CiAgICAgICAqbmNoYXJzID0gZGlzcF9lbmRfcG9zIC0gKmRpc3BfcG9zOwogICAgICAg aWYgKCpuY2hhcnMgPD0gMCkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICAg IGlmIChzdHJpbmctPnMpCiAJKmNoX2xlbiA9IGJpZGlfY291bnRfYnl0ZXMgKHN0cmluZy0+ cywgKmRpc3BfcG9zLCBieXRlcG9zLAogCQkJCSAgICBkaXNwX2VuZF9wb3MsIHN0cmluZy0+ dW5pYnl0ZSk7CkBAIC0xMTYwLDcgKzExNjAsNyBAQAogICAgIGRpciA9IEwyUjsKICAgLyog V2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBhdCBFT0Igb3IgYmVmb3JlIEJFR1YuICAqLwog ICBlbHNlIGlmIChiaWRpX2l0LT5jaGFycG9zID49IGVuZCB8fCBieXRlcG9zIDwgYmVnYnl0 ZSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBpZiAoZGlyID09 IEwyUikKICAgICB7CkBAIC0xMjk4LDcgKzEyOTgsNyBAQAogCSAgICAgICAmJiBub19kZWZh dWx0X3AgJiYgYmlkaV9pdC0+cGFyYWdyYXBoX2RpciA9PSBORVVUUkFMX0RJUik7CiAgICAg fQogICBlbHNlCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgLyog Q29udHJhcnkgdG8gVUFYIzkgY2xhdXNlIFAzLCB3ZSBvbmx5IGRlZmF1bHQgdGhlIHBhcmFn cmFwaAogICAgICBkaXJlY3Rpb24gdG8gTDJSIGlmIHdlIGhhdmUgbm8gcHJldmlvdXMgdXNh YmxlIHBhcmFncmFwaApAQCAtMTMyNSw3ICsxMzI1LDcgQEAKICAgYmlkaV90eXBlX3QgY2hf dHlwZTsKIAogICBpZiAoIWJpZGlfaW5pdGlhbGl6ZWQpCi0gICAgYWJvcnQgKCk7CisgICAg ZW1hY3NfYWJvcnQgKCk7CiAgIGNoX3R5cGUgPSAoYmlkaV90eXBlX3QpIFhJTlQgKENIQVJf VEFCTEVfUkVGIChiaWRpX3R5cGVfdGFibGUsIGNoKSk7CiAgIHJldHVybiAoY2hfdHlwZSA9 PSBMUkUgfHwgY2hfdHlwZSA9PSBMUk8KIAkgIHx8IGNoX3R5cGUgPT0gUkxFIHx8IGNoX3R5 cGUgPT0gUkxPCkBAIC0xMzc4LDEwICsxMzc4LDEwIEBACiAgICAgICAvKiBBZHZhbmNlIHRv IHRoZSBuZXh0IGNoYXJhY3Rlciwgc2tpcHBpbmcgY2hhcmFjdGVycyBjb3ZlcmVkIGJ5CiAJ IGRpc3BsYXkgc3RyaW5ncyAobmNoYXJzID4gMSkuICAqLwogICAgICAgaWYgKGJpZGlfaXQt Pm5jaGFycyA8PSAwKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgICAgYmlk aV9pdC0+Y2hhcnBvcyArPSBiaWRpX2l0LT5uY2hhcnM7CiAgICAgICBpZiAoYmlkaV9pdC0+ Y2hfbGVuID09IDApCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBiaWRp X2l0LT5ieXRlcG9zICs9IGJpZGlfaXQtPmNoX2xlbjsKICAgICB9CiAKQEAgLTE1ODEsNyAr MTU4MSw3IEBACiAJfQogCiAgICAgICBpZiAoYmlkaV9pdC0+bmNoYXJzIDw9IDApCi0JYWJv cnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBpZiAobGV2ZWwgPT0gcHJldl9sZXZl bCkJLyogZW1wdHkgZW1iZWRkaW5nICovCiAJc2F2ZWRfaXQuaWdub3JlX2JuX2xpbWl0ID0g YmlkaV9pdC0+Y2hhcnBvcyArIGJpZGlfaXQtPm5jaGFyczsKICAgICAgIGVsc2UJCQkvKiB0 aGlzIGVtYmVkZGluZyBpcyBub24tZW1wdHkgKi8KQEAgLTE2NDQsNyArMTY0NCw3IEBACiAg ICAgICB8fCB0eXBlID09IFJMRQogICAgICAgfHwgdHlwZSA9PSBSTE8KICAgICAgIHx8IHR5 cGUgPT0gUERGKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIGlm IChuZXdfbGV2ZWwgIT0gcHJldl9sZXZlbAogICAgICAgfHwgYmlkaV9pdC0+dHlwZSA9PSBO RVVUUkFMX0IpCkBAIC0xNjg1LDcgKzE2ODUsNyBAQAogCSAgZWxzZSBpZiAoYmlkaV9pdC0+ c29yID09IEwyUikKIAkgICAgdHlwZSA9IFNUUk9OR19MOwogCSAgZWxzZSAvKiBzaG91bGRu J3QgaGFwcGVuISAqLwotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAJ fQogICAgICAgaWYgKHR5cGUgPT0gV0VBS19FTgkvKiBXMiAqLwogCSAgJiYgYmlkaV9pdC0+ bGFzdF9zdHJvbmcudHlwZV9hZnRlcl93MSA9PSBTVFJPTkdfQUwpCkBAIC0xNzY3LDcgKzE3 NjcsNyBAQAogCQkJCQk6IGJpZGlfaXQtPnN0cmluZy5zKTsKIAogCSAgICAgIGlmIChiaWRp X2l0LT5uY2hhcnMgPD0gMCkKLQkJYWJvcnQgKCk7CisJCWVtYWNzX2Fib3J0ICgpOwogCSAg ICAgIG5leHRfY2hhcgogCQk9IChiaWRpX2l0LT5jaGFycG9zICsgYmlkaV9pdC0+bmNoYXJz ID49IGVvYgogCQkgICA/IEJJRElfRU9CCkBAIC0xODc1LDcgKzE4NzUsNyBAQAogCXx8IHR5 cGUgPT0gTkVVVFJBTF9TCiAJfHwgdHlwZSA9PSBORVVUUkFMX1dTCiAJfHwgdHlwZSA9PSBO RVVUUkFMX09OKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBp ZiAoKHR5cGUgIT0gTkVVVFJBTF9CIC8qIERvbid0IHJpc2sgZW50ZXJpbmcgdGhlIGxvbmcg bG9vcCBiZWxvdyBpZgogCQkJICAgIHdlIGFyZSBhbHJlYWR5IGF0IHBhcmFncmFwaCBlbmQu ICAqLwpAQCAtMTkzMCw3ICsxOTMwLDcgQEAKIAkgIGJpZGlfdHlwZV90IG5leHRfdHlwZTsK IAogCSAgaWYgKGJpZGlfaXQtPnNjYW5fZGlyID09IC0xKQotCSAgICBhYm9ydCAoKTsKKwkg ICAgZW1hY3NfYWJvcnQgKCk7CiAKIAkgIGJpZGlfY29weV9pdCAoJnNhdmVkX2l0LCBiaWRp X2l0KTsKIAkgIC8qIFNjYW4gdGhlIHRleHQgZm9yd2FyZCB1bnRpbCB3ZSBmaW5kIHRoZSBm aXJzdCBub24tbmV1dHJhbApAQCAtMTk3OSw3ICsxOTc5LDcgQEAKIAkJYnJlYWs7CiAJICAg ICAgY2FzZSBXRUFLX0JOOgogCQlpZiAoIWJpZGlfZXhwbGljaXRfZGlyX2NoYXIgKGJpZGlf aXQtPmNoKSkKLQkJICBhYm9ydCAoKTsJCS8qIGNhbid0IGhhcHBlbjogQk5zIGFyZSBza2lw cGVkICovCisJCSAgZW1hY3NfYWJvcnQgKCk7IC8qIGNhbid0IGhhcHBlbjogQk5zIGFyZSBz a2lwcGVkICovCiAJCS8qIEZBTExUSFJPVUdIICovCiAJICAgICAgY2FzZSBORVVUUkFMX0I6 CiAJCS8qIE1hcmNoZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZCBvZiB0aGlzIGxldmVsIHJ1 bi4KQEAgLTE5OTgsNyArMTk5OCw3IEBACiAJCSAgfQogCQlicmVhazsKIAkgICAgICBkZWZh dWx0OgotCQlhYm9ydCAoKTsKKwkJZW1hY3NfYWJvcnQgKCk7CiAJICAgIH0KIAkgIHR5cGUg PSBiaWRpX3Jlc29sdmVfbmV1dHJhbF8xIChzYXZlZF9pdC5wcmV2X2Zvcl9uZXV0cmFsLnR5 cGUsCiAJCQkJCSBuZXh0X3R5cGUsIGN1cnJlbnRfbGV2ZWwpOwpAQCAtMjAyMyw3ICsyMDIz LDcgQEAKIAogICAvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGR1cmluZyBhIGZv cndhcmQgc2Nhbi4gICovCiAgIGlmIChiaWRpX2l0LT5zY2FuX2RpciAhPSAxKQotICAgIGFi b3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIC8qIFJlc2V0IHRoZSBsaW1pdCB1 bnRpbCB3aGljaCB0byBpZ25vcmUgQk5zIGlmIHdlIHN0ZXAgb3V0IG9mIHRoZQogICAgICBh cmVhIHdoZXJlIHdlIGZvdW5kIG9ubHkgZW1wdHkgbGV2ZWxzLiAgKi8KQEAgLTIxMDcsNyAr MjEwNyw3IEBACiAgICAgICBpZiAoYmlkaV9pdC0+c2Nhbl9kaXIgPiAwKQogCXsKIAkgIGlm IChiaWRpX2l0LT5uY2hhcnMgPD0gMCkKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fi b3J0ICgpOwogCSAgbmV4dF9jaGFyX3BvcyA9IGJpZGlfaXQtPmNoYXJwb3MgKyBiaWRpX2l0 LT5uY2hhcnM7CiAJfQogICAgICAgZWxzZSBpZiAoYmlkaV9pdC0+Y2hhcnBvcyA+PSBib2Ip CkBAIC0yMTQzLDcgKzIxNDMsNyBAQAogICBpZiAoYmlkaV9pdC0+c2Nhbl9kaXIgPT0gLTEp CiAgICAgLyogSWYgd2UgYXJlIGdvaW5nIGJhY2t3YXJkcywgdGhlIGl0ZXJhdG9yIHN0YXRl IGlzIGFscmVhZHkgY2FjaGVkCiAgICAgICAgZnJvbSBwcmV2aW91cyBzY2FucywgYW5kIHNo b3VsZCBiZSBmdWxseSByZXNvbHZlZC4gICovCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3Nf YWJvcnQgKCk7CiAKICAgaWYgKHR5cGUgPT0gVU5LTk9XTl9CVCkKICAgICB0eXBlID0gYmlk aV90eXBlX29mX25leHRfY2hhciAoYmlkaV9pdCk7CkBAIC0yMTU2LDcgKzIxNTYsNyBAQAog ICAgICAgfHwgKHR5cGUgPT0gV0VBS19CTiAmJiBwcmV2X2xldmVsID09IGxldmVsKSkKICAg ICB7CiAgICAgICBpZiAoYmlkaV9pdC0+bmV4dF9mb3JfbmV1dHJhbC50eXBlID09IFVOS05P V05fQlQpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAKICAgICAgIC8qIElmIHRo ZSBjYWNoZWQgc3RhdGUgc2hvd3MgYSBuZXV0cmFsIGNoYXJhY3RlciwgaXQgd2FzIG5vdAog CSByZXNvbHZlZCBieSBiaWRpX3Jlc29sdmVfbmV1dHJhbCwgc28gZG8gaXQgbm93LiAgKi8K QEAgLTIxNzAsNyArMjE3MCw3IEBACiAJfHwgdHlwZSA9PSBXRUFLX0JOCiAJfHwgdHlwZSA9 PSBXRUFLX0VOCiAJfHwgdHlwZSA9PSBXRUFLX0FOKSkKLSAgICBhYm9ydCAoKTsKKyAgICBl bWFjc19hYm9ydCAoKTsKICAgYmlkaV9pdC0+dHlwZSA9IHR5cGU7CiAgIGJpZGlfY2hlY2tf dHlwZSAoYmlkaV9pdC0+dHlwZSk7CiAKQEAgLTIxOTIsNyArMjE5Miw3IEBACiAgICAgICBp bnQgZHBwID0gYmlkaV9pdC0+ZGlzcF9wcm9wOwogCiAgICAgICBpZiAoYmlkaV9pdC0+bmNo YXJzIDw9IDApCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBkbyB7CiAJ Y2ggPSBiaWRpX2ZldGNoX2NoYXIgKGJwb3MgKz0gY2xlbiwgY3BvcyArPSBuYywgJmRpc3Bf cG9zLCAmZHBwLCAmYnMsCiAJCQkgICAgICBmd3AsICZjbGVuLCAmbmMpOwpAQCAtMjMwMSw4 ICsyMzAxLDkgQEAKICAgICB7CiAgICAgICBpbnQgbmV3X2xldmVsOwogCisgICAgICAvKiBJ ZiB3ZSBhcmUgYXQgZW5kIG9mIGxldmVsLCBpdHMgZWRnZXMgbXVzdCBiZSBjYWNoZWQuICAq LwogICAgICAgaWYgKGVuZF9mbGFnKQotCWFib3J0ICgpOyAvKiBpZiB3ZSBhcmUgYXQgZW5k IG9mIGxldmVsLCBpdHMgZWRnZXMgbXVzdCBiZSBjYWNoZWQgKi8KKwllbWFjc19hYm9ydCAo KTsKIAogICAgICAgYmlkaV9jYWNoZV9pdGVyYXRvcl9zdGF0ZSAoYmlkaV9pdCwgMSk7CiAg ICAgICBkbyB7CkBAIC0yMzIwLDcgKzIzMjEsNyBAQAogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8x OwogCiAgIGlmIChiaWRpX2l0LT5jaGFycG9zIDwgMCB8fCBiaWRpX2l0LT5ieXRlcG9zIDwg MCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBpZiAoYmlkaV9p dC0+c2Nhbl9kaXIgPT0gMCkKICAgICB7CkBAIC0yNDMxLDcgKzI0MzIsNyBAQAogCSAgICA9 IGJpZGlfYXRfcGFyYWdyYXBoX2VuZCAoYmlkaV9pdC0+Y2hhcnBvcyArIGJpZGlfaXQtPm5j aGFycywKIAkJCQkgICAgIGJpZGlfaXQtPmJ5dGVwb3MgKyBiaWRpX2l0LT5jaF9sZW4pOwog CSAgaWYgKGJpZGlfaXQtPm5jaGFycyA8PSAwKQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1h Y3NfYWJvcnQgKCk7CiAJICBpZiAoc2VwX2xlbiA+PSAwKQogCSAgICB7CiAJICAgICAgYmlk aV9pdC0+bmV3X3BhcmFncmFwaCA9IDE7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Jsb2Nr aW5wdXQuaCcKLS0tIHNyYy9ibG9ja2lucHV0LmgJMjAxMi0wMS0xOSAwNzoyMToyNSArMDAw MAorKysgc3JjL2Jsb2NraW5wdXQuaAkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC04 OSw3ICs4OSw3IEBACiAJICAgIGRvX3BlbmRpbmdfYXRpbWVycyAoKTsJCVwKIAl9CQkJCQlc CiAgICAgICBlbHNlIGlmIChpbnRlcnJ1cHRfaW5wdXRfYmxvY2tlZCA8IDApCVwKLQlhYm9y dCAoKTsJCQkJXAorCWVtYWNzX2Fib3J0ICgpOwkJCQlcCiAgICAgfQkJCQkJCVwKICAgd2hp bGUgKDApCiAKQEAgLTEyNCw0ICsxMjQsMyBAQAogZXh0ZXJuIHZvaWQgcmVpbnZva2VfaW5w dXRfc2lnbmFsICh2b2lkKTsKIAogI2VuZGlmIC8qIEVNQUNTX0JMT0NLSU5QVVRfSCAqLwot Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2J1ZmZlci5jJwotLS0gc3JjL2J1ZmZlci5jCTIw MTItMDgtMjggMTA6NTk6MTcgKzAwMDAKKysrIHNyYy9idWZmZXIuYwkyMDEyLTA4LTMxIDE2 OjIwOjMwICswMDAwCkBAIC0xMjQyLDcgKzEyNDIsNyBAQAogCSAgcmVzdWx0ID0gRmRlZmF1 bHRfdmFsdWUgKHZhcmlhYmxlKTsKIAlicmVhazsKICAgICAgIH0KLSAgICBkZWZhdWx0OiBh Ym9ydCAoKTsKKyAgICBkZWZhdWx0OiBlbWFjc19hYm9ydCAoKTsKICAgICB9CiAKICAgcmV0 dXJuIHJlc3VsdDsKQEAgLTI2NzEsNyArMjY3MSw3IEBACiAgICAgICAvKiBNYWtlIHN1cmUg bm8gbWFya2VycyB3ZXJlIHB1dCBvbiB0aGUgY2hhaW4KIAkgd2hpbGUgdGhlIGNoYWluIHZh bHVlIHdhcyBpbmNvcnJlY3QuICAqLwogICAgICAgaWYgKEJVRl9NQVJLRVJTIChjdXJyZW50 X2J1ZmZlcikpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAKICAgICAgIEJVRl9N QVJLRVJTIChjdXJyZW50X2J1ZmZlcikgPSBtYXJrZXJzOwogCkBAIC0zNDEzLDcgKzM0MTMs NyBAQAogCSAgICB9CiAJfQogICAgICAgaWYgKHAgIT0gb3ZlcmxheV9zdHJfYnVmICsgdG90 YWwpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBpZiAocHN0cikKIAkq cHN0ciA9IG92ZXJsYXlfc3RyX2J1ZjsKICAgICAgIHJldHVybiB0b3RhbDsKQEAgLTQ1NzYs NyArNDU3Niw3IEBACiAgICAgY2FzZV9MaXNwX0ludDogICAgcHJlZGljYXRlID0gUWludGVn ZXJwOyBicmVhazsKICAgICBjYXNlIExpc3BfU3RyaW5nOiBwcmVkaWNhdGUgPSBRc3RyaW5n cDsgIGJyZWFrOwogICAgIGNhc2UgTGlzcF9TeW1ib2w6IHByZWRpY2F0ZSA9IFFzeW1ib2xw OyAgYnJlYWs7Ci0gICAgZGVmYXVsdDogYWJvcnQgKCk7CisgICAgZGVmYXVsdDogZW1hY3Nf YWJvcnQgKCk7CiAgICAgfQogCiAgIHdyb25nX3R5cGVfYXJndW1lbnQgKHByZWRpY2F0ZSwg bmV3dmFsKTsKQEAgLTUyNTcsNyArNTI1Nyw3IEBACiAKICAgLyogTmVlZCBtb3JlIHJvb20/ ICovCiAgIGlmIChpZHggPj0gTUFYX1BFUl9CVUZGRVJfVkFSUykKLSAgICBhYm9ydCAoKTsK KyAgICBlbWFjc19hYm9ydCAoKTsKICAgbGFzdF9wZXJfYnVmZmVyX2lkeCA9IGlkeDsKIAog ICBWYnVmZmVyX2FsaXN0ID0gUW5pbDsKQEAgLTUzOTgsNyArNTM5OCw3IEBACiAgIGlmIChQ RVJfQlVGRkVSX0lEWCAob2Zmc2V0KSA9PSAwKQogICAgIC8qIERpZCBhIERFRlZBUl9QRVJf QlVGRkVSIHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAg c2xvdCBvZiBidWZmZXJfbG9jYWxfZmxhZ3MgKi8KLSAgICBhYm9ydCAoKTsKKyAgICBlbWFj c19hYm9ydCAoKTsKIH0KIAogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2J1ZmZlci5oJwot LS0gc3JjL2J1ZmZlci5oCTIwMTItMDgtMjggMDY6MjA6MDggKzAwMDAKKysrIHNyYy9idWZm ZXIuaAkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xMTQ5LDcgKzExNDksNyBAQAog ICAgV2UgYXNzdW1lIHlvdSBrbm93IHdoaWNoIGJ1ZmZlciBpdCdzIHBvaW50aW5nIGludG8u ICAqLwogCiAjZGVmaW5lIE9WRVJMQVlfUE9TSVRJT04oUCkgXAotIChNQVJLRVJQIChQKSA/ IG1hcmtlcl9wb3NpdGlvbiAoUCkgOiAoYWJvcnQgKCksIDApKQorIChNQVJLRVJQIChQKSA/ IG1hcmtlcl9wb3NpdGlvbiAoUCkgOiAoZW1hY3NfYWJvcnQgKCksIDApKQogCiAMCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKQEAgLTExODksNyArMTE4OSw3IEBACiAKICNkZWZpbmUgUEVSX0JV RkZFUl9WQUxVRV9QKEIsIElEWCkJCVwKICAgICAoKChJRFgpIDwgMCB8fCBJRFggPj0gbGFz dF9wZXJfYnVmZmVyX2lkeCkJXAotICAgICA/IChhYm9ydCAoKSwgMCkJCQkJXAorICAgICA/ IChlbWFjc19hYm9ydCAoKSwgMCkJCQlcCiAgICAgIDogKChCKS0+bG9jYWxfZmxhZ3NbSURY XSAhPSAwKSkKIAogLyogU2V0IHdoZXRoZXIgcGVyLWJ1ZmZlciB2YXJpYWJsZSB3aXRoIGlu ZGV4IElEWCBoYXMgYSBidWZmZXItbG9jYWwKQEAgLTExOTgsNyArMTE5OCw3IEBACiAjZGVm aW5lIFNFVF9QRVJfQlVGRkVSX1ZBTFVFX1AoQiwgSURYLCBWQUwpCVwKICAgICAgZG8gewkJ CQkJCVwKICAgICAgICBpZiAoKElEWCkgPCAwIHx8IChJRFgpID49IGxhc3RfcGVyX2J1ZmZl cl9pZHgpCVwKLQkgYWJvcnQgKCk7CQkJCQlcCisJIGVtYWNzX2Fib3J0ICgpOwkJCQlcCiAg ICAgICAgKEIpLT5sb2NhbF9mbGFnc1tJRFhdID0gKFZBTCk7CQkJXAogICAgICB9IHdoaWxl ICgwKQogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2J5dGVjb2RlLmMnCi0tLSBzcmMvYnl0 ZWNvZGUuYwkyMDEyLTA4LTI4IDA2OjIwOjA4ICswMDAwCisrKyBzcmMvYnl0ZWNvZGUuYwky MDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC00MzUsNyArNDM1LDcgQEAKICNpZmRlZiBC WVRFX0NPREVfU0FGRQogCiAjZGVmaW5lIENIRUNLX1JBTkdFKEFSRykgXAotICBpZiAoQVJH ID49IGJ5dGVzdHJfbGVuZ3RoKSBhYm9ydCAoKQorICBpZiAoQVJHID49IGJ5dGVzdHJfbGVu Z3RoKSBlbWFjc19hYm9ydCAoKQogCiAjZWxzZSAvKiBub3QgQllURV9DT0RFX1NBRkUgKi8K IApAQCAtNTA4LDcgKzUwOCw3IEBACiAgICBpZiAoRlJBTUVfWF9QIChmKQogICAgICAgICYm IEZSQU1FX0ZPTlQgKGYpLT5kaXJlY3Rpb24gIT0gMAogICAgICAgICYmIEZSQU1FX0ZPTlQg KGYpLT5kaXJlY3Rpb24gIT0gMSkKLSAgICAgYWJvcnQgKCk7CisgICAgIGVtYWNzX2Fib3J0 ICgpOwogIH0KICNlbmRpZgogCkBAIC02MDAsOSArNjAwLDkgQEAKICAgICB7CiAjaWZkZWYg QllURV9DT0RFX1NBRkUKICAgICAgIGlmICh0b3AgPiBzdGFja2UpCi0JYWJvcnQgKCk7CisJ ZW1hY3NfYWJvcnQgKCk7CiAgICAgICBlbHNlIGlmICh0b3AgPCBzdGFjay5ib3R0b20gLSAx KQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogI2VuZGlmCiAKICNpZmRlZiBCWVRF X0NPREVfTUVURVIKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJICAvKiBBY3R1YWxseSB0aGlz IGlzIEJzdGFja19yZWYgd2l0aCBvZmZzZXQgMCwgYnV0IHdlIHVzZSBCZHVwCiAJICAgICBm b3IgdGhhdCBpbnN0ZWFkLiAgKi8KIAkgIC8qIENBU0UgKEJzdGFja19yZWYpOiAqLwotCSAg YWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKIAogCSAgLyogSGFuZHkgYnl0ZS1jb2Rl cyBmb3IgbGV4aWNhbCBiaW5kaW5nLiAgKi8KIAlDQVNFIChCc3RhY2tfcmVmMSk6CkBAIC0x OTI4LDExICsxOTI4LDExIEBACiAjaWZkZWYgQllURV9DT0RFX1NBRkUKIAkgIGlmIChvcCA8 IEJjb25zdGFudCkKIAkgICAgewotCSAgICAgIGFib3J0ICgpOworCSAgICAgIGVtYWNzX2Fi b3J0ICgpOwogCSAgICB9CiAJICBpZiAoKG9wIC09IEJjb25zdGFudCkgPj0gY29uc3RfbGVu Z3RoKQogCSAgICB7Ci0JICAgICAgYWJvcnQgKCk7CisJICAgICAgZW1hY3NfYWJvcnQgKCk7 CiAJICAgIH0KIAkgIFBVU0ggKHZlY3RvcnBbb3BdKTsKICNlbHNlCkBAIC0xOTUxLDcgKzE5 NTEsNyBAQAogI2lmZGVmIEJZVEVfQ09ERV9TQUZFCiAgICAgZXJyb3IgKCJiaW5kaW5nIHN0 YWNrIG5vdCBiYWxhbmNlZCAoc2VyaW91cyBieXRlIGNvbXBpbGVyIGJ1ZykiKTsKICNlbHNl Ci0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAjZW5kaWYKIAogICByZXR1 cm4gcmVzdWx0OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jaGFyYWN0ZXIuYycKLS0tIHNy Yy9jaGFyYWN0ZXIuYwkyMDEyLTA4LTI2IDA4OjQxOjM2ICswMDAwCisrKyBzcmMvY2hhcmFj dGVyLmMJMjAxMi0wOC0zMSAxNjoyMDozMCArMDAwMApAQCAtNTQxLDcgKzU0MSw3IEBACiAg ICAgICBpbnQgbGVuID0gTVVMVElCWVRFX0xFTkdUSCAocHRyLCBlbmRwKTsKIAogICAgICAg aWYgKGxlbiA9PSAwKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgICAgcHRy ICs9IGxlbjsKICAgICAgIGNoYXJzKys7CiAgICAgfQoKPT09IG1vZGlmaWVkIGZpbGUgJ3Ny Yy9jaGFyc2V0LmMnCi0tLSBzcmMvY2hhcnNldC5jCTIwMTItMDgtMjYgMDg6NDE6MzYgKzAw MDAKKysrIHNyYy9jaGFyc2V0LmMJMjAxMi0wOC0zMSAxNjoyMDozMCArMDAwMApAQCAtNjM2 LDcgKzYzNiw3IEBACiAgIGVsc2UKICAgICB7CiAgICAgICBpZiAoISBDSEFSU0VUX1VOSUZJ RURfUCAoY2hhcnNldCkpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBt YXAgPSBDSEFSU0VUX1VOSUZZX01BUCAoY2hhcnNldCk7CiAgICAgfQogICBpZiAoU1RSSU5H UCAobWFwKSkKQEAgLTIwMjUsMTAgKzIwMjUsMTAgQEAKICAgYyA9IFhGQVNUSU5UIChjaCk7 CiAgIGNoYXJzZXQgPSBDSEFSX0NIQVJTRVQgKGMpOwogICBpZiAoISBjaGFyc2V0KQotICAg IGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogICBjb2RlID0gRU5DT0RFX0NIQVIg KGNoYXJzZXQsIGMpOwogICBpZiAoY29kZSA9PSBDSEFSU0VUX0lOVkFMSURfQ09ERSAoY2hh cnNldCkpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAgIGRpbWVuc2lv biA9IENIQVJTRVRfRElNRU5TSU9OIChjaGFyc2V0KTsKICAgZm9yICh2YWwgPSBRbmlsOyBk aW1lbnNpb24gPiAwOyBkaW1lbnNpb24tLSkKICAgICB7Cgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL2NtLmMnCi0tLSBzcmMvY20uYwkyMDEyLTAxLTE5IDA3OjIxOjI1ICswMDAwCisrKyBz cmMvY20uYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xMTksNyArMTE5LDcgQEAK ICAgaWYgKGN1clggKHR0eSkgPT0gRnJhbWVDb2xzICh0dHkpKQogICAgIHsKICAgICAgIGlm ICghTWFnaWNXcmFwICh0dHkpIHx8IGN1clkgKHR0eSkgPj0gRnJhbWVSb3dzICh0dHkpIC0g MSkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICAgIGlmICh0dHktPnRlcm1z Y3JpcHQpCiAJcHV0YyAoJ1xyJywgdHR5LT50ZXJtc2NyaXB0KTsKICAgICAgIHB1dGMgKCdc cicsIHR0eS0+b3V0cHV0KTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvY29kaW5nLmMnCi0t LSBzcmMvY29kaW5nLmMJMjAxMi0wOC0yOCAwNTo0OTowMiArMDAwMAorKysgc3JjL2NvZGlu Zy5jCTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTIwNTEsNyArMjA1MSw3IEBACiAJ ICBicmVhazsKIAogCWRlZmF1bHQ6Ci0JICBhYm9ydCAoKTsKKwkgIGVtYWNzX2Fib3J0ICgp OwogCX0KICAgICAgIENPRElOR19ERUNPREVfQ0hBUiAoY29kaW5nLCBzcmMsIHNyY19iYXNl LCBzcmNfZW5kLAogCQkJICBDSEFSU0VUX0ZST01fSUQgKGNoYXJzZXRfSUQpLCBjb2RlLCBj KTsKQEAgLTIzNDUsNyArMjM0NSw3IEBACiAgICAgICBpbnQgaTsKIAogICAgICAgaWYgKGNo YXJidWZfZW5kIC0gY2hhcmJ1ZiA8IGNtcF9zdGF0dXMtPmxlbmd0aCkKLQlhYm9ydCAoKTsK KwllbWFjc19hYm9ydCAoKTsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBjbXBfc3RhdHVzLT5s ZW5ndGg7IGkrKykKIAkqY2hhcmJ1ZisrID0gY21wX3N0YXR1cy0+Y2FycnlvdmVyW2ldOwog ICAgICAgY29kaW5nLT5hbm5vdGF0ZWQgPSAxOwpAQCAtMjYxOSw3ICsyNjE5LDcgQEAKIAkJ cHJlZmVycmVkX2NoYXJzZXRfaWQgPSAtMTsKIAkgICAgICBicmVhazsKIAkgICAgZGVmYXVs dDoKLQkgICAgICBhYm9ydCAoKTsKKwkgICAgICBlbWFjc19hYm9ydCAoKTsKIAkgICAgfQog CSAgY2hhcmJ1ZiArPSAtYyAtIDE7CiAJICBjb250aW51ZTsKQEAgLTM0ODIsNyArMzQ4Miw3 IEBACiAgIGlmIChjbXBfc3RhdHVzLT5zdGF0ZSAhPSBDT01QT1NJTkdfTk8pCiAgICAgewog ICAgICAgaWYgKGNoYXJidWZfZW5kIC0gY2hhcmJ1ZiA8IGNtcF9zdGF0dXMtPmxlbmd0aCkK LQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBj bXBfc3RhdHVzLT5sZW5ndGg7IGkrKykKIAkqY2hhcmJ1ZisrID0gY21wX3N0YXR1cy0+Y2Fy cnlvdmVyW2ldOwogICAgICAgY29kaW5nLT5hbm5vdGF0ZWQgPSAxOwpAQCAtMzg2NCw3ICsz ODY0LDcgQEAKIAkgIGJyZWFrOwogCiAJZGVmYXVsdDoKLQkgIGFib3J0ICgpOworCSAgZW1h Y3NfYWJvcnQgKCk7CiAJfQogCiAgICAgICBpZiAoY21wX3N0YXR1cy0+c3RhdGUgPT0gQ09N UE9TSU5HX05PCkBAIC00NDE5LDcgKzQ0MTksNyBAQAogCQlwcmVmZXJyZWRfY2hhcnNldF9p ZCA9IC0xOwogCSAgICAgIGJyZWFrOwogCSAgICBkZWZhdWx0OgotCSAgICAgIGFib3J0ICgp OworCSAgICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgICB9CiAJICBjaGFyYnVmICs9IC1jIC0g MTsKIAkgIGNvbnRpbnVlOwpAQCAtNDkzMyw3ICs0OTMzLDcgQEAKIAkJfQogCSAgICB9CiAJ ICBpZiAoY29kZSA9PSBDSEFSU0VUX0lOVkFMSURfQ09ERSAoY2hhcnNldCkpCi0JICAgIGFi b3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAoKTsKIAkgIGlmIChjaGFyc2V0ID09IGNoYXJz ZXRfa2FuamkpCiAJICAgIHsKIAkgICAgICBpbnQgYzEsIGMyOwpAQCAtNTAyMyw3ICs1MDIz LDcgQEAKIAkJfQogCSAgICB9CiAJICBpZiAoY29kZSA9PSBDSEFSU0VUX0lOVkFMSURfQ09E RSAoY2hhcnNldCkpCi0JICAgIGFib3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAoKTsKIAkg IGlmIChjaGFyc2V0ID09IGNoYXJzZXRfYmlnNSkKIAkgICAgewogCSAgICAgIGludCBjMSwg YzI7CkBAIC03MTkwLDcgKzcxOTAsNyBAQAogCQkgICAgKmJ1ZisrID0gWElOVCAoWENBUiAo Y29tcG9uZW50cykpOwogCQl9CiAJICAgICAgZWxzZQotCQlhYm9ydCAoKTsKKwkJZW1hY3Nf YWJvcnQgKCk7CiAJICAgICAgKmhlYWQgLT0gbGVuOwogCSAgICB9CiAJfQpAQCAtOTQyOCw3 ICs5NDI4LDcgQEAKIAkgICAgICYmIGNoYW5nZWRbY29kaW5nX3ByaW9yaXRpZXNbal1dKQog CWorKzsKICAgICAgIGlmIChqID09IGNvZGluZ19jYXRlZ29yeV9tYXgpCi0JYWJvcnQgKCk7 CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBwcmlvcml0aWVzW2ldID0gY29kaW5nX3ByaW9y aXRpZXNbal07CiAgICAgfQogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2NvbmZfcG9zdC5o JwotLS0gc3JjL2NvbmZfcG9zdC5oCTIwMTItMDgtMjAgMTY6NDg6MTAgKzAwMDAKKysrIHNy Yy9jb25mX3Bvc3QuaAkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xNzgsOSArMTc4 LDYgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0vKiBJZiB5b3UgdGhpbmsg YWJvdXQgcmVtb3ZpbmcgdGhlIGxpbmUgYmVsb3csIG5vdGUgdGhhdCB0aGUKLSAgIE1TLVdp bmRvd3MgYnVpbGQgcmVsaWVzIG9uIGl0IGZvciBkZWNsYXJhdGlvbiBvZiAnZW52aXJvbicg bmVlZGVkCi0gICBieSBhIGZldyBzb3VyY2UgZmlsZXMuICAqLwogI2luY2x1ZGUgPHN0ZGxp Yi5oPgogCiAjaWYgX19HTlVDX18gPj0gMyAgLyogT24gR0NDIDMuMCB3ZSBtaWdodCBnZXQg YSB3YXJuaW5nLiAgKi8KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZGF0YS5jJwotLS0gc3Jj L2RhdGEuYwkyMDEyLTA4LTI3IDE3OjIzOjQ4ICswMDAwCisrKyBzcmMvZGF0YS5jCTIwMTIt MDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICB0byB0cnkg YW5kIGRvIHRoYXQgYnkgY2hlY2tpbmcgdGhlIHRhZ2JpdHMsIGJ1dCBub3dhZGF5cyBhbGwK ICAgICAgdGFnYml0cyBhcmUgcG90ZW50aWFsbHkgdmFsaWQuICAqLwogICAvKiBpZiAoKHVu c2lnbmVkIGludCkgWFRZUEUgKHZhbHVlKSA+PSBMaXNwX1R5cGVfTGltaXQpCi0gICAqICAg YWJvcnQgKCk7ICovCisgICAqICAgZW1hY3NfYWJvcnQgKCk7ICovCiAKICAgeHNpZ25hbDIg KFF3cm9uZ190eXBlX2FyZ3VtZW50LCBwcmVkaWNhdGUsIHZhbHVlKTsKIH0KQEAgLTE4Miw3 ICsxODIsNyBAQAogCWNhc2UgTGlzcF9NaXNjX0Zsb2F0OgogCSAgcmV0dXJuIFFmbG9hdDsK IAl9Ci0gICAgICBhYm9ydCAoKTsKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgICAgY2Fz ZSBMaXNwX1ZlY3Rvcmxpa2U6CiAgICAgICBpZiAoV0lORE9XX0NPTkZJR1VSQVRJT05QIChv YmplY3QpKQpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgICByZXR1cm4gUWZsb2F0OwogCiAg ICAgZGVmYXVsdDoKLSAgICAgIGFib3J0ICgpOworICAgICAgZW1hY3NfYWJvcnQgKCk7CiAg ICAgfQogfQogCkBAIC01NTEsNyArNTUxLDcgQEAKICAgICAgIC8qIEluIHNldF9pbnRlcm5h bCwgd2UgdW4tZm9yd2FyZCB2YXJzIHdoZW4gdGhlaXIgdmFsdWUgaXMKIAkgc2V0IHRvIFF1 bmJvdW5kLiAqLwogICAgICAgcmV0dXJuIFF0OwotICAgIGRlZmF1bHQ6IGFib3J0ICgpOwor ICAgIGRlZmF1bHQ6IGVtYWNzX2Fib3J0ICgpOwogICAgIH0KIAogICByZXR1cm4gKEVRICh2 YWxjb250ZW50cywgUXVuYm91bmQpID8gUW5pbCA6IFF0KTsKQEAgLTg2NCw3ICs4NjQsNyBA QAogCSBkb24ndCB0aGluayBhbnl0aGluZyB3aWxsIGJyZWFrLiAgLS1sb3JlbnRleSAgKi8K ICAgICAgIHJldHVybiAqKExpc3BfT2JqZWN0ICopKFhLQk9BUkRfT0JKRldEICh2YWxjb250 ZW50cyktPm9mZnNldAogCQkJICAgICAgKyAoY2hhciAqKUZSQU1FX0tCT0FSRCAoU0VMRUNU RURfRlJBTUUgKCkpKTsKLSAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKyAgICBkZWZhdWx0OiBl bWFjc19hYm9ydCAoKTsKICAgICB9CiB9CiAKQEAgLTk1MCw3ICs5NTAsNyBAQAogICAgICAg YnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgYWJvcnQgKCk7IC8qIGdvdG8gZGVmOyAq LworICAgICAgZW1hY3NfYWJvcnQgKCk7IC8qIGdvdG8gZGVmOyAqLwogICAgIH0KIH0KIApA QCAtMTA1NSw3ICsxMDU1LDcgQEAKICAgICAgIC8qIEZBTExUSFJPVUdIICovCiAgICAgY2Fz ZSBTWU1CT0xfRk9SV0FSREVEOgogICAgICAgcmV0dXJuIGRvX3N5bXZhbF9mb3J3YXJkaW5n IChTWU1CT0xfRldEIChzeW0pKTsKLSAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKyAgICBkZWZh dWx0OiBlbWFjc19hYm9ydCAoKTsKICAgICB9CiB9CiAKQEAgLTEyNjUsNyArMTI2NSw3IEBA CiAJICBzdG9yZV9zeW12YWxfZm9yd2FyZGluZyAoLyogc3ltLCAqLyBpbm5lcmNvbnRlbnRz LCBuZXd2YWwsIGJ1Zik7CiAJYnJlYWs7CiAgICAgICB9Ci0gICAgZGVmYXVsdDogYWJvcnQg KCk7CisgICAgZGVmYXVsdDogZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogICByZXR1cm47CiB9 CkBAIC0xMzE2LDcgKzEzMTYsNyBAQAogCS8qIEZvciBvdGhlciB2YXJpYWJsZXMsIGdldCB0 aGUgY3VycmVudCB2YWx1ZS4gICovCiAJcmV0dXJuIGRvX3N5bXZhbF9mb3J3YXJkaW5nICh2 YWxjb250ZW50cyk7CiAgICAgICB9Ci0gICAgZGVmYXVsdDogYWJvcnQgKCk7CisgICAgZGVm YXVsdDogZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogfQogCkBAIC0xNDE0LDcgKzE0MTQsNyBA QAogCWVsc2UKIAkgIHJldHVybiBGc2V0IChzeW1ib2wsIHZhbHVlKTsKICAgICAgIH0KLSAg ICBkZWZhdWx0OiBhYm9ydCAoKTsKKyAgICBkZWZhdWx0OiBlbWFjc19hYm9ydCAoKTsKICAg ICB9CiB9CiAKQEAgLTE1MzgsNyArMTUzOCw3IEBACiAgICAgICBlbHNlIGlmIChCVUZGRVJf T0JKRldEUCAodmFsY29udGVudHMuZndkKSkKIAlyZXR1cm4gdmFyaWFibGU7CiAgICAgICBi cmVhazsKLSAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKyAgICBkZWZhdWx0OiBlbWFjc19hYm9y dCAoKTsKICAgICB9CiAKICAgaWYgKHN5bS0+Y29uc3RhbnQpCkBAIC0xNjExLDcgKzE2MTEs NyBAQAogCWVycm9yICgiU3ltYm9sICVzIG1heSBub3QgYmUgYnVmZmVyLWxvY2FsIiwKIAkg ICAgICAgU0RBVEEgKFNZTUJPTF9OQU1FICh2YXJpYWJsZSkpKTsKICAgICAgIGJyZWFrOwot ICAgIGRlZmF1bHQ6IGFib3J0ICgpOworICAgIGRlZmF1bHQ6IGVtYWNzX2Fib3J0ICgpOwog ICAgIH0KIAogICBpZiAoc3ltLT5jb25zdGFudCkKQEAgLTE3MTgsNyArMTcxOCw3IEBACiAg ICAgICBpZiAoYmx2LT5mcmFtZV9sb2NhbCkKIAlyZXR1cm4gdmFyaWFibGU7CiAgICAgICBi cmVhazsKLSAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKyAgICBkZWZhdWx0OiBlbWFjc19hYm9y dCAoKTsKICAgICB9CiAKICAgLyogR2V0IHJpZCBvZiB0aGlzIGJ1ZmZlcidzIGFsaXN0IGVs ZW1lbnQsIGlmIGFueS4gICovCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogCWVycm9yICgiU3lt Ym9sICVzIG1heSBub3QgYmUgZnJhbWUtbG9jYWwiLAogCSAgICAgICBTREFUQSAoU1lNQk9M X05BTUUgKHZhcmlhYmxlKSkpOwogICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogYWJvcnQg KCk7CisgICAgZGVmYXVsdDogZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogCiAgIGlmIChzeW0t PmNvbnN0YW50KQpAQCAtMTg3Nyw3ICsxODc3LDcgQEAKIAkgIH0KIAlyZXR1cm4gUW5pbDsK ICAgICAgIH0KLSAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKyAgICBkZWZhdWx0OiBlbWFjc19h Ym9ydCAoKTsKICAgICB9CiB9CiAKQEAgLTE5MTIsNyArMTkxMiw3IEBACiAgICAgY2FzZSBT WU1CT0xfRk9SV0FSREVEOgogICAgICAgLyogQWxsIEJVRkZFUl9PQkpGV0Qgc2xvdHMgYmVj b21lIGxvY2FsIGlmIHRoZXkgYXJlIHNldC4gICovCiAgICAgICByZXR1cm4gKEJVRkZFUl9P QkpGV0RQIChTWU1CT0xfRldEIChzeW0pKSA/IFF0IDogUW5pbCk7Ci0gICAgZGVmYXVsdDog YWJvcnQgKCk7CisgICAgZGVmYXVsdDogZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogfQogCkBA IC0xOTU2LDcgKzE5NTYsNyBAQAogCXJldHVybiBTWU1CT0xfQkxWIChzeW0pLT53aGVyZTsK ICAgICAgIGVsc2UKIAlyZXR1cm4gUW5pbDsKLSAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKyAg ICBkZWZhdWx0OiBlbWFjc19hYm9ydCAoKTsKICAgICB9CiB9CiAKQEAgLTIyNzIsNyArMjI3 Miw3IEBACiAgICAgICByZXR1cm4gUW5pbDsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICBhYm9y dCAoKTsKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwogICAgIH0KIH0KIAoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy9kaXJlZC5jJwotLS0gc3JjL2RpcmVkLmMJMjAxMi0wOC0yOCAwMDozMzo1 NiArMDAwMAorKysgc3JjL2RpcmVkLmMJMjAxMi0wOC0zMSAxNjoyMDozMCArMDAwMApAQCAt Mjc1LDcgKzI3NSw3IEBACiAKIAkJICAvKiBTb21lIGJ1ZyBzb21ld2hlcmUuICAqLwogCQkg IGlmIChuY2hhcnMgPiBuYnl0ZXMpCi0JCSAgICBhYm9ydCAoKTsKKwkJICAgIGVtYWNzX2Fi b3J0ICgpOwogCiAJCSAgU1RSSU5HX1NFVF9DSEFSUyAoZnVsbG5hbWUsIG5jaGFycyk7CiAJ CSAgaWYgKG5jaGFycyA9PSBuYnl0ZXMpCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Rpc3Bu ZXcuYycKLS0tIHNyYy9kaXNwbmV3LmMJMjAxMi0wOC0zMCAxNTowNzowMCArMDAwMAorKysg c3JjL2Rpc3BuZXcuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0zMDUsNyArMzA1 LDcgQEAKIHZvaWQKIF9fZXhlY3V0YWJsZV9zdGFydCAodm9pZCkKIHsKLSAgYWJvcnQgKCk7 CisgIGVtYWNzX2Fib3J0ICgpOwogfQogI2VuZGlmCiAMCkBAIC0zNTUsNyArMzU1LDcgQEAK ICAgICAgIC8qIERldGVjdCB0aGUgY2FzZSB0aGF0IG1vcmUgbWF0cmljZXMgYXJlIGZyZWVk IHRoYW4gd2VyZQogCSBhbGxvY2F0ZWQuICAqLwogICAgICAgaWYgKC0tZ2x5cGhfbWF0cml4 X2NvdW50IDwgMCkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKIAogICAgICAgLyog RnJlZSBnbHlwaCBtZW1vcnkgaWYgTUFUUklYIG93bnMgaXQuICAqLwogICAgICAgaWYgKG1h dHJpeC0+cG9vbCA9PSBOVUxMKQpAQCAtMjM0Nyw5ICsyMzQ3LDkgQEAKIAogICAvKiBDaGVj ayB0aGF0IG5vdGhpbmcgaXMgbGVmdCBhbGxvY2F0ZWQuICAqLwogICBpZiAoZ2x5cGhfbWF0 cml4X2NvdW50KQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogICBpZiAo Z2x5cGhfcG9vbF9jb3VudCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsK IH0KIAogCkBAIC0zMDMyLDcgKzMwMzIsNyBAQAogICAgIHsKICAgICAgIGlmICghZ2x5cGhf cm93X3NsaWNlX3AgKHdpbmRvd19tYXRyaXgtPnJvd3MgKyBpLAogCQkJICAgICAgZnJhbWVf bWF0cml4LT5yb3dzICsgaikpCi0gICAgICAgIGFib3J0ICgpOworICAgICAgICBlbWFjc19h Ym9ydCAoKTsKICAgICAgICsraSwgKytqOwogICAgIH0KIH0KQEAgLTM0NjEsNyArMzQ2MSw3 IEBACiAgICAgICBpZiAoIWxhc3Rfc2Vlbl9wICYmIE1BVFJJWF9ST1dfQk9UVE9NX1kgKHJv dykgPj0geWIpCiAJbGFzdF9zZWVuX3AgPSAxOwogICAgICAgZWxzZSBpZiAobGFzdF9zZWVu X3AgJiYgcm93LT5lbmFibGVkX3ApCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAg ICAgfQogfQogCkBAIC00ODE3LDcgKzQ4MTcsNyBAQAogICBzdHJ1Y3QgZ2x5cGhfbWF0cml4 ICpkZXNpcmVkX21hdHJpeCA9IGZyYW1lLT5kZXNpcmVkX21hdHJpeDsKIAogICBpZiAoIWN1 cnJlbnRfbWF0cml4KQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAg IC8qIENvbXB1dGUgaGFzaCBjb2RlcyBvZiBhbGwgdGhlIGxpbmVzLiAgQWxzbyBjYWxjdWxh dGUgbnVtYmVyIG9mCiAgICAgIGNoYW5nZWQgbGluZXMsIG51bWJlciBvZiB1bmNoYW5nZWQg bGluZXMgYXQgdGhlIGJlZ2lubmluZywgYW5kCkBAIC01NDg1LDcgKzU0ODUsNyBAQAogICBl bHNlIGlmIChwYXJ0ID09IE9OX1JJR0hUX01BUkdJTikKICAgICBhcmVhID0gUklHSFRfTUFS R0lOX0FSRUE7CiAgIGVsc2UKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsK IAogICBmb3IgKGkgPSAwOyByb3ctPmVuYWJsZWRfcCAmJiBpIDwgdy0+Y3VycmVudF9tYXRy aXgtPm5yb3dzOyArK2ksICsrcm93KQogICAgIGlmICh3eSA+PSByb3ctPnkgJiYgd3kgPCBN QVRSSVhfUk9XX0JPVFRPTV9ZIChyb3cpKQpAQCAtNjI4NSw3ICs2Mjg1LDcgQEAKIAogICAg IC8qIENvbnZlcnQgdGhlIGluaXRpYWwgZnJhbWUgdG8gdXNlIHRoZSBuZXcgZGlzcGxheS4g Ki8KICAgICBpZiAoZi0+b3V0cHV0X21ldGhvZCAhPSBvdXRwdXRfaW5pdGlhbCkKLSAgICAg IGFib3J0ICgpOworICAgICAgZW1hY3NfYWJvcnQgKCk7CiAgICAgZi0+b3V0cHV0X21ldGhv ZCA9IHQtPnR5cGU7CiAgICAgZi0+dGVybWluYWwgPSB0OwogCgo9PT0gbW9kaWZpZWQgZmls ZSAnc3JjL2VkaXRmbnMuYycKLS0tIHNyYy9lZGl0Zm5zLmMJMjAxMi0wOC0yOCAwNjoyMDow OCArMDAwMAorKysgc3JjL2VkaXRmbnMuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBA IC00MjYyLDcgKzQyNjIsNyBAQAogICAgIH0KIAogICBpZiAoYnVmc2l6ZSA8IHAgLSBidWYp Ci0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgaWYgKG1heWJlX2Nv bWJpbmVfYnl0ZSkKICAgICBuY2hhcnMgPSBtdWx0aWJ5dGVfY2hhcnNfaW5fdGV4dCAoKHVu c2lnbmVkIGNoYXIgKikgYnVmLCBwIC0gYnVmKTsKQEAgLTQ2MDIsNyArNDYwMiw3IEBACiAJ CQkJICAgICBsZW4xX2J5dGUsIGVuZDIsIHN0YXJ0Ml9ieXRlICsgbGVuMl9ieXRlKQogCSAg fHwgY291bnRfY29tYmluaW5nX2FmdGVyIChCWVRFX1BPU19BRERSIChzdGFydDFfYnl0ZSks CiAJCQkJICAgIGxlbjFfYnl0ZSwgZW5kMiwgc3RhcnQyX2J5dGUgKyBsZW4yX2J5dGUpKQot CWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAg LTQ2MTQsNyArNDYxNCw3IEBACiAJCQkJICAgIGxlbjJfYnl0ZSwgZW5kMSwgc3RhcnQxX2J5 dGUgKyBsZW4xX2J5dGUpCiAJICB8fCBjb3VudF9jb21iaW5pbmdfYWZ0ZXIgKEJZVEVfUE9T X0FERFIgKHN0YXJ0MV9ieXRlKSwKIAkJCQkgICAgbGVuMV9ieXRlLCBlbmQyLCBzdGFydDJf Ynl0ZSArIGxlbjJfYnl0ZSkpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAg fQogI2VuZGlmCiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZW1hY3MuYycKLS0tIHNyYy9l bWFjcy5jCTIwMTItMDgtMjUgMDY6Mzg6NDMgKzAwMDAKKysrIHNyYy9lbWFjcy5jCTIwMTIt MDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTM0NCwyMiArMzQ0LDYgQEAKICAgZm9yY2VfYXV0 b19zYXZlX3Nvb24gKCk7CiB9CiAjZW5kaWYKLQotLyogV2UgZGVmaW5lIGFib3J0LCByYXRo ZXIgdGhhbiB1c2luZyBpdCBmcm9tIHRoZSBsaWJyYXJ5LAotICAgc28gdGhhdCBHREIgY2Fu IHJldHVybiBmcm9tIGEgYnJlYWtwb2ludCBoZXJlLgotICAgTVNET1MgaGFzIGl0cyBvd24g ZGVmaW5pdGlvbiBpbiBtc2Rvcy5jLiAgKi8KLQotI2lmICEgZGVmaW5lZCAoRE9TX05UKSAm JiAhIGRlZmluZWQgKE5PX0FCT1JUKQotCi12b2lkCi1hYm9ydCAodm9pZCkKLXsKLSAga2ls bCAoZ2V0cGlkICgpLCBTSUdBQlJUKTsKLSAgLyogVGhpcyBzaG91bGRuJ3QgYmUgZXhlY3V0 ZWQsIGJ1dCBpdCBwcmV2ZW50cyBhIHdhcm5pbmcuICAqLwotICBleGl0ICgxKTsKLX0KLSNl bmRpZgotCiAMCiAvKiBDb2RlIGZvciBkZWFsaW5nIHdpdGggTGlzcCBhY2Nlc3MgdG8gdGhl IFVuaXggY29tbWFuZCBsaW5lLiAgKi8KIApAQCAtMTg5NSw3ICsxODc5LDcgQEAKIAl9CiAK ICAgICAgIGlmIChiZXN0IDwgMCkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKIAog ICAgICAgLyogQ29weSB0aGUgaGlnaGVzdCBwcmlvcml0eSByZW1haW5pbmcgb3B0aW9uLCB3 aXRoIGl0cyBhcmdzLCB0byBORVcuCiAgICAgICAgICBVbmxlc3MgaXQgaXMgYSBkdXBsaWNh dGUgb2YgdGhlIHByZXZpb3VzIG9uZS4gICovCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2V2 YWwuYycKLS0tIHNyYy9ldmFsLmMJMjAxMi0wOC0yOCAxNjowMTo1OSArMDAwMAorKysgc3Jj L2V2YWwuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xNDk1LDcgKzE0OTUsNyBA QAogICBpbW1lZGlhdGVfcXVpdCA9IGhhbmRsaW5nX3NpZ25hbCA9IDA7CiAgIGFib3J0X29u X2djID0gMDsKICAgaWYgKGdjX2luX3Byb2dyZXNzIHx8IHdhaXRpbmdfZm9yX2lucHV0KQot ICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAjaWYgMCAvKiBybXM6IEkg ZG9uJ3Qga25vdyB3aHkgdGhpcyB3YXMgaGVyZSwKIAkgYnV0IGl0IGlzIHN1cmVseSB3cm9u ZyBmb3IgYW4gZXJyb3IgdGhhdCBpcyBoYW5kbGVkLiAgKi8KQEAgLTE1OTIsNyArMTU5Miw3 IEBACiB4c2lnbmFsIChMaXNwX09iamVjdCBlcnJvcl9zeW1ib2wsIExpc3BfT2JqZWN0IGRh dGEpCiB7CiAgIEZzaWduYWwgKGVycm9yX3N5bWJvbCwgZGF0YSk7Ci0gIGFib3J0ICgpOwor ICBlbWFjc19hYm9ydCAoKTsKIH0KIAogLyogTGlrZSB4c2lnbmFsLCBidXQgdGFrZXMgMCwg MSwgMiwgb3IgMyBhcmdzIGluc3RlYWQgb2YgYSBsaXN0LiAgKi8KQEAgLTIwNDUsNyArMjA0 NSw3IEBACiAgIHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zOwogCiAgIGlm IChoYW5kbGluZ19zaWduYWwpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7 CiAKICAgaWYgKFNZTUJPTFAgKGZvcm0pKQogICAgIHsKQEAgLTIyMDksNyArMjIwOSw3IEBA CiAJCSBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBjb2RlLiAgV2UgbmVlZCB0byBlaXRoZXIgcmV3 cml0ZSB0aGUKIAkJIHN1YnIgdG8gdXNlIGEgZGlmZmVyZW50IGFyZ3VtZW50IHByb3RvY29s LCBvciBhZGQgbW9yZQogCQkgY2FzZXMgdG8gdGhpcyBzd2l0Y2guICAqLwotCSAgICAgIGFi b3J0ICgpOworCSAgICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgICB9CiAJfQogICAgIH0KQEAg LTI4NTMsNyArMjg1Myw3IEBACiAJICAgICAgLyogSWYgYSBzdWJyIHRha2VzIG1vcmUgdGhh biA4IGFyZ3VtZW50cyB3aXRob3V0IHVzaW5nIE1BTlkKIAkJIG9yIFVORVZBTExFRCwgd2Ug bmVlZCB0byBleHRlbmQgdGhpcyBmdW5jdGlvbiB0byBzdXBwb3J0IGl0LgogCQkgVW50aWwg dGhpcyBpcyBkb25lLCB0aGVyZSBpcyBubyB3YXkgdG8gY2FsbCB0aGUgZnVuY3Rpb24uICAq LwotCSAgICAgIGFib3J0ICgpOworCSAgICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgICB9CiAJ fQogICAgIH0KQEAgLTI5ODQsNyArMjk4NCw3IEBACiAgICAgICBsZXhlbnYgPSBRbmlsOwog ICAgIH0KICAgZWxzZQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAg IGkgPSBvcHRpb25hbCA9IHJlc3QgPSAwOwogICBmb3IgKDsgQ09OU1AgKHN5bXNfbGVmdCk7 IHN5bXNfbGVmdCA9IFhDRFIgKHN5bXNfbGVmdCkpCkBAIC0zMTk4LDcgKzMxOTgsNyBAQAog CXNldF9pbnRlcm5hbCAoc3ltYm9sLCB2YWx1ZSwgUW5pbCwgMSk7CiAJYnJlYWs7CiAgICAg ICB9Ci0gICAgZGVmYXVsdDogYWJvcnQgKCk7CisgICAgZGVmYXVsdDogZW1hY3NfYWJvcnQg KCk7CiAgICAgfQogfQogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZpbGVpby5jJwotLS0g c3JjL2ZpbGVpby5jCTIwMTItMDgtMjggMDY6MjA6MDggKzAwMDAKKysrIHNyYy9maWxlaW8u YwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogICAg IGlmICghKElTX0RJUkVDVE9SWV9TRVAgKHRhcmdldFswXSkgJiYgSVNfRElSRUNUT1JZX1NF UCAodGFyZ2V0WzFdKSkpCiAjZW5kaWYgLyogV0lORE9XU05UICovCiAgICAgICB7Ci0JaWYg KCFkcml2ZSkgYWJvcnQgKCk7CisJaWYgKCFkcml2ZSkgZW1hY3NfYWJvcnQgKCk7CiAJdGFy Z2V0IC09IDI7CiAJdGFyZ2V0WzBdID0gRFJJVkVfTEVUVEVSIChkcml2ZSk7CiAJdGFyZ2V0 WzFdID0gJzonOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9mbnMuYycKLS0tIHNyYy9mbnMu YwkyMDEyLTA4LTI4IDA2OjIwOjA4ICswMDAwCisrKyBzcmMvZm5zLmMJMjAxMi0wOC0zMSAx NjoyMDozMCArMDAwMApAQCAtMjk3Myw3ICsyOTczLDcgQEAKIAkJCQkgICAgZW5jb2RlZCwg bGVuZ3RoLCBOSUxQIChub19saW5lX2JyZWFrKSwKIAkJCQkgICAgIU5JTFAgKEJWQVIgKGN1 cnJlbnRfYnVmZmVyLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSk7CiAgIGlmIChl bmNvZGVkX2xlbmd0aCA+IGFsbGVuZ3RoKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fi b3J0ICgpOwogCiAgIGlmIChlbmNvZGVkX2xlbmd0aCA8IDApCiAgICAgewpAQCAtMzAyOSw3 ICszMDI5LDcgQEAKIAkJCQkgICAgZW5jb2RlZCwgbGVuZ3RoLCBOSUxQIChub19saW5lX2Jy ZWFrKSwKIAkJCQkgICAgU1RSSU5HX01VTFRJQllURSAoc3RyaW5nKSk7CiAgIGlmIChlbmNv ZGVkX2xlbmd0aCA+IGFsbGVuZ3RoKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0 ICgpOwogCiAgIGlmIChlbmNvZGVkX2xlbmd0aCA8IDApCiAgICAgewpAQCAtMzE3NCw3ICsz MTc0LDcgQEAKIAkJCQkgICAgZGVjb2RlZCwgbGVuZ3RoLAogCQkJCSAgICBtdWx0aWJ5dGUs ICZpbnNlcnRlZF9jaGFycyk7CiAgIGlmIChkZWNvZGVkX2xlbmd0aCA+IGFsbGVuZ3RoKQot ICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIGlmIChkZWNvZGVkX2xl bmd0aCA8IDApCiAgICAgewpAQCAtMzIyNCw3ICszMjI0LDcgQEAKICAgZGVjb2RlZF9sZW5n dGggPSBiYXNlNjRfZGVjb2RlXzEgKFNTREFUQSAoc3RyaW5nKSwgZGVjb2RlZCwgbGVuZ3Ro LAogCQkJCSAgICAwLCBOVUxMKTsKICAgaWYgKGRlY29kZWRfbGVuZ3RoID4gbGVuZ3RoKQot ICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogICBlbHNlIGlmIChkZWNvZGVk X2xlbmd0aCA+PSAwKQogICAgIGRlY29kZWRfc3RyaW5nID0gbWFrZV91bmlieXRlX3N0cmlu ZyAoZGVjb2RlZCwgZGVjb2RlZF9sZW5ndGgpOwogICBlbHNlCkBAIC0zOTgwLDcgKzM5ODAs NyBAQAogCSAgZWxzZSBpZiAoRVEgKGgtPndlYWssIFFrZXlfYW5kX3ZhbHVlKSkKIAkgICAg cmVtb3ZlX3AgPSAhKGtleV9rbm93bl90b19zdXJ2aXZlX3AgJiYgdmFsdWVfa25vd25fdG9f c3Vydml2ZV9wKTsKIAkgIGVsc2UKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0 ICgpOwogCiAJICBuZXh0ID0gSEFTSF9ORVhUIChoLCBpKTsKIApAQCAtNDI3Niw3ICs0Mjc2 LDcgQEAKICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgIGFib3J0ICgpOwor ICAgICAgZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogCiAgIHJldHVybiBoYXNoOwoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9mcmFtZS5jJwotLS0gc3JjL2ZyYW1lLmMJMjAxMi0wOC0yMiAx NjowNTowNCArMDAwMAorKysgc3JjL2ZyYW1lLmMJMjAxMi0wOC0zMSAxNjoyMDozMCArMDAw MApAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgY2FzZSBvdXRwdXRfbnM6CiAgICAgICByZXR1 cm4gUW5zOwogICAgIGRlZmF1bHQ6Ci0gICAgICBhYm9ydCAoKTsKKyAgICAgIGVtYWNzX2Fi b3J0ICgpOwogICAgIH0KIH0KIApAQCAtNjI5LDcgKzYyOSw3IEBACiAjaWZkZWYgTVNET1MK ICAgaWYgKHNmLT5vdXRwdXRfbWV0aG9kICE9IG91dHB1dF9tc2Rvc19yYXcKICAgICAgICYm IHNmLT5vdXRwdXRfbWV0aG9kICE9IG91dHB1dF90ZXJtY2FwKQotICAgIGFib3J0ICgpOwor ICAgIGVtYWNzX2Fib3J0ICgpOwogI2Vsc2UgLyogbm90IE1TRE9TICovCiAKICNpZmRlZiBX SU5ET1dTTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHNob3VsZCB3b3Jr IG5vdyEgKi8KQEAgLTc3Niw3ICs3NzYsNyBAQAogCSAgTGlzcF9PYmplY3QgZm9jdXM7CiAK IAkgIGlmICghRlJBTUVQIChYQ0FSICh0YWlsKSkpCi0JICAgIGFib3J0ICgpOworCSAgICBl bWFjc19hYm9ydCAoKTsKIAogCSAgZm9jdXMgPSBGUkFNRV9GT0NVU19GUkFNRSAoWEZSQU1F IChYQ0FSICh0YWlsKSkpOwogCkBAIC05MDYsNyArOTA2LDcgQEAKIAogICAvKiBUaGVyZSBt dXN0IGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZnJhbWUgaW4gVmZyYW1lX2xpc3QuICAqLwog ICBpZiAoISBDT05TUCAoVmZyYW1lX2xpc3QpKQotICAgIGFib3J0ICgpOworICAgIGVtYWNz X2Fib3J0ICgpOwogCiAgIC8qIElmIHRoaXMgZnJhbWUgaXMgZGVhZCwgaXQgd29uJ3QgYmUg aW4gVmZyYW1lX2xpc3QsIGFuZCB3ZSdsbCBsb29wCiAgICAgIGZvcmV2ZXIuICBGb3Jlc3Rh bGwgdGhhdC4gICovCkBAIC05ODQsNyArOTg0LDcgQEAKIAogICAvKiBUaGVyZSBtdXN0IGFs d2F5cyBiZSBhdCBsZWFzdCBvbmUgZnJhbWUgaW4gVmZyYW1lX2xpc3QuICAqLwogICBpZiAo ISBDT05TUCAoVmZyYW1lX2xpc3QpKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0 ICgpOwogCiAgIHByZXYgPSBRbmlsOwogICBmb3IgKHRhaWwgPSBWZnJhbWVfbGlzdDsgQ09O U1AgKHRhaWwpOyB0YWlsID0gWENEUiAodGFpbCkpCkBAIC05OTMsNyArOTkzLDcgQEAKIAog ICAgICAgZiA9IFhDQVIgKHRhaWwpOwogICAgICAgaWYgKCFGUkFNRVAgKGYpKQotCWFib3J0 ICgpOworCWVtYWNzX2Fib3J0ICgpOwogCiAgICAgICBpZiAoRVEgKGZyYW1lLCBmKSAmJiAh TklMUCAocHJldikpCiAJcmV0dXJuIHByZXY7CkBAIC0xMzk0LDcgKzEzOTQsNyBAQAogCiAJ ICB0aGlzID0gWENBUiAoZnJhbWVzKTsKIAkgIGlmICghRlJBTUVQICh0aGlzKSkKLQkgICAg YWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgZjEgPSBYRlJBTUUgKHRoaXMp OwogCiAJICBpZiAoa2IgPT0gRlJBTUVfS0JPQVJEIChmMSkpCkBAIC0xNDMwLDcgKzE0MzAs NyBAQAogCiAJICB0aGlzID0gWENBUiAoZnJhbWVzKTsKIAkgIGlmICghRlJBTUVQICh0aGlz KSkKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgZjEgPSBYRlJB TUUgKHRoaXMpOwogCiAJICAvKiBDb25zaWRlciBvbmx5IGZyYW1lcyBvbiB0aGUgc2FtZSBr Ym9hcmQKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAJICAgICB0aGF0IGlzIHByb2hpYml0ZWQg YXQgdGhlIHRvcDsgeW91IGNhbid0IGRlbGV0ZSBzdXJyb2dhdGUKIAkgICAgIG1pbmlidWZm ZXIgZnJhbWVzLiAgKi8KIAkgIGlmIChOSUxQIChmcmFtZV93aXRoX21pbmlidWYpKQotCSAg ICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAKIAkgIGtzZXRfZGVmYXVsdF9t aW5pYnVmZmVyX2ZyYW1lIChrYiwgZnJhbWVfd2l0aF9taW5pYnVmKTsKIAl9CkBAIC0yMTE3 LDcgKzIxMTcsNyBAQAogCSAgICAgIHN3YXBfaW5fZ2xvYmFsX2JpbmRpbmcgKHN5bSk7CiAJ ICAgIGJyZWFrOwogCSAgfQotCWRlZmF1bHQ6IGFib3J0ICgpOworCWRlZmF1bHQ6IGVtYWNz X2Fib3J0ICgpOwogCX0KICAgICB9CiAKQEAgLTM4NDQsNyArMzg0NCw3IEBACiAJICAgICAg fQogCiAJICAgIGRlZmF1bHQ6Ci0JICAgICAgYWJvcnQgKCk7CisJICAgICAgZW1hY3NfYWJv cnQgKCk7CiAJICAgIH0KIAl9CiAgICAgICBlbHNlCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Jj L2ZyYW1lLmgnCi0tLSBzcmMvZnJhbWUuaAkyMDEyLTA4LTMxIDA0OjQwOjUyICswMDAwCisr KyBzcmMvZnJhbWUuaAkyMDEyLTA4LTMxIDE2OjIxOjU2ICswMDAwCkBAIC05ODEsNyArOTgx LDcgQEAKICAgICAgKChGUkFNRVAgKHNlbGVjdGVkX2ZyYW1lKQkJCQlcCiAgICAgICAgJiYg RlJBTUVfTElWRV9QIChYRlJBTUUgKHNlbGVjdGVkX2ZyYW1lKSkpCVwKICAgICAgID8gWEZS QU1FIChzZWxlY3RlZF9mcmFtZSkJCQkJXAotICAgICAgOiAoYWJvcnQgKCksIChzdHJ1Y3Qg ZnJhbWUgKikgMCkpCisgICAgICA6IChlbWFjc19hYm9ydCAoKSwgKHN0cnVjdCBmcmFtZSAq KSAwKSkKIAogDAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Jj L2Z0Zm9udC5jJwotLS0gc3JjL2Z0Zm9udC5jCTIwMTItMDctMjAgMDc6Mjk6MDQgKzAwMDAK KysrIHNyYy9mdGZvbnQuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xNjMwLDcg KzE2MzAsNyBAQAogCSAgICBGVF9HbHlwaF9NZXRyaWNzICptOwogCiAJICAgIGlmIChGVF9M b2FkX0dseXBoIChmdF9mYWNlLCBnLT5jb2RlLCBGVF9MT0FEX0RFRkFVTFQpICE9IDApCi0J ICAgICAgYWJvcnQgKCk7CisJICAgICAgZW1hY3NfYWJvcnQgKCk7CiAJICAgIG0gPSAmZnRf ZmFjZS0+Z2x5cGgtPm1ldHJpY3M7CiAJICAgIGlmIChmbHRfZm9udF9mdC0+bWF0cml4KQog CSAgICAgIHsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZ3RrdXRpbC5jJwotLS0gc3JjL2d0 a3V0aWwuYwkyMDEyLTA4LTMwIDE2OjA3OjQ0ICswMDAwCisrKyBzcmMvZ3RrdXRpbC5jCTIw MTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTI1NCw3ICsyNTQsNyBAQAogZnJlZV93aWRn ZXRfdmFsdWUgKHdpZGdldF92YWx1ZSAqd3YpCiB7CiAgIGlmICh3di0+ZnJlZV9saXN0KQot ICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIGlmIChtYWxsb2NfY3B0 ID4gMjUpCiAgICAgewpAQCAtMzUyMyw3ICszNTIzLDcgQEAKICAgICB9CiAKICAgLyogU2hv dWxkIG5ldmVyIGVuZCB1cCBoZXJlICAqLwotICBhYm9ydCAoKTsKKyAgZW1hY3NfYWJvcnQg KCk7CiB9CiAKIC8qIFJlbW92ZSBwb2ludGVyIGF0IElEWCBmcm9tIGlkX3RvX3dpZGdldC4K QEAgLTQwOTEsNyArNDA5MSw3IEBACiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewog ICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJpbnRlcm5hbCBlcnJvcjogR1RLX0lN QUdFX1BJWEJVRiBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAg ICAgICAgICAgZW1hY3NfYWJvcnQgKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg ICAgIGVsc2UgaWYgKHN0b3JlX3R5cGUgPT0gR1RLX0lNQUdFX0lDT05fTkFNRSkKQEAgLTQx MDYsNyArNDEwNiw3IEBACiAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBmcHJp bnRmIChzdGRlcnIsICJpbnRlcm5hbCBlcnJvcjogc3RvcmVfdHlwZSBpcyAlZFxuIiwgc3Rv cmVfdHlwZSk7Ci0gICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgZW1hY3NfYWJvcnQg KCk7CiAgICAgICAgIH0KICAgICB9CiAgIGlmICh3bWVudWltYWdlKQoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy9pbWFnZS5jJwotLS0gc3JjL2ltYWdlLmMJMjAxMi0wOC0xNiAyMTo1ODo0 NCArMDAwMAorKysgc3JjL2ltYWdlLmMJMjAxMi0wOC0zMSAxNjoyMDozMCArMDAwMApAQCAt ODQ4LDcgKzg0OCw3IEBACiAJICBicmVhazsKIAogCWRlZmF1bHQ6Ci0JICBhYm9ydCAoKTsK KwkgIGVtYWNzX2Fib3J0ICgpOwogCSAgYnJlYWs7CiAJfQogCgo9PT0gbW9kaWZpZWQgZmls ZSAnc3JjL2luZGVudC5jJwotLS0gc3JjL2luZGVudC5jCTIwMTItMDgtMTggMDY6MDY6Mzkg KzAwMDAKKysrIHNyYy9pbmRlbnQuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0x MjIsNyArMTIyLDcgQEAKICAgaW50IGk7CiAKICAgaWYgKHdpZHRodGFiLT5oZWFkZXIuc2l6 ZSAhPSAyNTYpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgZm9y IChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgIGlmIChjaGFyYWN0ZXJfd2lkdGggKGksIGRp c3B0YWIpCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICBic2V0X3dpZHRoX3RhYmxlIChidWYs IEZtYWtlX3ZlY3RvciAobWFrZV9udW1iZXIgKDI1NiksIG1ha2VfbnVtYmVyICgwKSkpOwog ICB3aWR0aHRhYiA9IFhWRUNUT1IgKEJWQVIgKGJ1Ziwgd2lkdGhfdGFibGUpKTsKICAgaWYg KHdpZHRodGFiLT5oZWFkZXIuc2l6ZSAhPSAyNTYpCi0gICAgYWJvcnQgKCk7CisgICAgZW1h Y3NfYWJvcnQgKCk7CiAKICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgIFhTRVRG QVNUSU5UICh3aWR0aHRhYi0+Y29udGVudHNbaV0sIGNoYXJhY3Rlcl93aWR0aCAoaSwgZGlz cHRhYikpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9pbnNkZWwuYycKLS0tIHNyYy9pbnNk ZWwuYwkyMDEyLTA4LTI4IDA2OjIwOjA4ICswMDAwCisrKyBzcmMvaW5zZGVsLmMJMjAxMi0w OC0zMSAxNjoyMDozMCArMDAwMApAQCAtNzMsMTMgKzczLDEzIEBACiAgIGZvciAodGFpbCA9 IEJVRl9NQVJLRVJTIChjdXJyZW50X2J1ZmZlcik7IHRhaWw7IHRhaWwgPSB0YWlsLT5uZXh0 KQogICAgIHsKICAgICAgIGlmICh0YWlsLT5idWZmZXItPnRleHQgIT0gY3VycmVudF9idWZm ZXItPnRleHQpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBpZiAodGFp bC0+Y2hhcnBvcyA+IFopCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgICBp ZiAodGFpbC0+Ynl0ZXBvcyA+IFpfQllURSkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAo KTsKICAgICAgIGlmIChtdWx0aWJ5dGUgJiYgISBDSEFSX0hFQURfUCAoRkVUQ0hfQllURSAo dGFpbC0+Ynl0ZXBvcykpKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgIH0K IH0KIApAQCAtODEyLDcgKzgxMiw3IEBACiAjaWZkZWYgQllURV9DT01CSU5JTkdfREVCVUcK ICAgaWYgKGNvdW50X2NvbWJpbmluZ19iZWZvcmUgKHN0cmluZywgbmJ5dGVzLCBQVCwgUFRf QllURSkKICAgICAgIHx8IGNvdW50X2NvbWJpbmluZ19hZnRlciAoc3RyaW5nLCBuYnl0ZXMs IFBULCBQVF9CWVRFKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKICNl bmRpZgogCiAgIC8qIFJlY29yZCBkZWxldGlvbiBvZiB0aGUgc3Vycm91bmRpbmcgdGV4dCB0 aGF0IGNvbWJpbmVzIHdpdGgKQEAgLTk0Nyw3ICs5NDcsNyBAQAogICAgICB0aGUgdGV4dCB0 aGF0IGhhcyBiZWVuIHN0b3JlZCBieSBjb3B5X3RleHQuICAqLwogICBpZiAoY291bnRfY29t YmluaW5nX2JlZm9yZSAoR1BUX0FERFIsIG91dGdvaW5nX25ieXRlcywgUFQsIFBUX0JZVEUp CiAgICAgICB8fCBjb3VudF9jb21iaW5pbmdfYWZ0ZXIgKEdQVF9BRERSLCBvdXRnb2luZ19u Ynl0ZXMsIFBULCBQVF9CWVRFKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAo KTsKICNlbmRpZgogCiAgIHJlY29yZF9pbnNlcnQgKFBULCBuY2hhcnMpOwpAQCAtMTEzMCw3 ICsxMTMwLDcgQEAKICAgICAgdGhlIHRleHQgdGhhdCBoYXMgYmVlbiBzdG9yZWQgYnkgY29w eV90ZXh0LiAgKi8KICAgaWYgKGNvdW50X2NvbWJpbmluZ19iZWZvcmUgKEdQVF9BRERSLCBv dXRnb2luZ19uYnl0ZXMsIFBULCBQVF9CWVRFKQogICAgICAgfHwgY291bnRfY29tYmluaW5n X2FmdGVyIChHUFRfQUREUiwgb3V0Z29pbmdfbmJ5dGVzLCBQVCwgUFRfQllURSkpCi0gICAg YWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAjZW5kaWYKIAogICByZWNvcmRfaW5z ZXJ0IChQVCwgbmNoYXJzKTsKQEAgLTExOTEsNyArMTE5MSw3IEBACiAjaWZkZWYgQllURV9D T01CSU5JTkdfREVCVUcKICAgaWYgKGNvdW50X2NvbWJpbmluZ19iZWZvcmUgKEdQVF9BRERS LCBsZW5fYnl0ZSwgZnJvbSwgZnJvbV9ieXRlKQogICAgICAgfHwgY291bnRfY29tYmluaW5n X2FmdGVyIChHUFRfQUREUiwgbGVuX2J5dGUsIGZyb20sIGZyb21fYnl0ZSkpCi0gICAgYWJv cnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAjZW5kaWYKIAogICBpZiAoU1RSSU5HUCAo cHJldl90ZXh0KSkKQEAgLTEzNzQsNyArMTM3NCw3IEBACiAgICAgIHRoZSB0ZXh0IHRoYXQg aGFzIGJlZW4gc3RvcmVkIGJ5IGNvcHlfdGV4dC4gICovCiAgIGlmIChjb3VudF9jb21iaW5p bmdfYmVmb3JlIChHUFRfQUREUiwgb3V0Z29pbmdfaW5zYnl0ZXMsIGZyb20sIGZyb21fYnl0 ZSkKICAgICAgIHx8IGNvdW50X2NvbWJpbmluZ19hZnRlciAoR1BUX0FERFIsIG91dGdvaW5n X2luc2J5dGVzLCBmcm9tLCBmcm9tX2J5dGUpKQotICAgIGFib3J0ICgpOworICAgIGVtYWNz X2Fib3J0ICgpOwogI2VuZGlmCiAKICAgaWYgKCEgRVEgKEJWQVIgKGN1cnJlbnRfYnVmZmVy LCB1bmRvX2xpc3QpLCBRdCkpCkBAIC0xNTAwLDcgKzE1MDAsNyBAQAogICAgICB0aGUgdGV4 dCB0aGF0IGhhcyBiZWVuIHN0b3JlZCBieSBjb3B5X3RleHQuICAqLwogICBpZiAoY291bnRf Y29tYmluaW5nX2JlZm9yZSAoR1BUX0FERFIsIGluc2J5dGVzLCBmcm9tLCBmcm9tX2J5dGUp CiAgICAgICB8fCBjb3VudF9jb21iaW5pbmdfYWZ0ZXIgKEdQVF9BRERSLCBpbnNieXRlcywg ZnJvbSwgZnJvbV9ieXRlKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsK ICNlbmRpZgogCiAgIEdBUF9TSVpFIC09IGluc2J5dGVzOwpAQCAtMTcwOCw3ICsxNzA4LDcg QEAKICNpZmRlZiBCWVRFX0NPTUJJTklOR19ERUJVRwogICBpZiAoY291bnRfY29tYmluaW5n X2JlZm9yZSAoQlVGX0JZVEVfQUREUkVTUyAoY3VycmVudF9idWZmZXIsIHRvX2J5dGUpLAog CQkJICAgICAgWl9CWVRFIC0gdG9fYnl0ZSwgZnJvbSwgZnJvbV9ieXRlKSkKLSAgICBhYm9y dCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKICNlbmRpZgogCiAgIGlmIChyZXRfc3RyaW5n IHx8ICEgRVEgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCB1bmRvX2xpc3QpLCBRdCkpCgo9PT0g bW9kaWZpZWQgZmlsZSAnc3JjL2ludGVydmFscy5jJwotLS0gc3JjL2ludGVydmFscy5jCTIw MTItMDgtMTggMDY6MDY6MzkgKzAwMDAKKysrIHNyYy9pbnRlcnZhbHMuYwkyMDEyLTA4LTMx IDE2OjIwOjMwICswMDAwCkBAIC0yMDAsMTMgKzIwMCwxMyBAQAogICAgICAgaTBfc3ltID0g WENBUiAoaTBfY2RyKTsKICAgICAgIGkwX2NkciA9IFhDRFIgKGkwX2Nkcik7CiAgICAgICBp ZiAoIUNPTlNQIChpMF9jZHIpKQotCXJldHVybiAwOwkJLyogYWJvcnQgKCk7ICovCisJcmV0 dXJuIDA7CiAgICAgICBpMV92YWwgPSBpMS0+cGxpc3Q7CiAgICAgICB3aGlsZSAoQ09OU1Ag KGkxX3ZhbCkgJiYgIUVRIChYQ0FSIChpMV92YWwpLCBpMF9zeW0pKQogCXsKIAkgIGkxX3Zh bCA9IFhDRFIgKGkxX3ZhbCk7CiAJICBpZiAoIUNPTlNQIChpMV92YWwpKQotCSAgICByZXR1 cm4gMDsJCS8qIGFib3J0ICgpOyAqLworCSAgICByZXR1cm4gMDsKIAkgIGkxX3ZhbCA9IFhD RFIgKGkxX3ZhbCk7CiAJfQogCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogICAgICAgaTFfY2Ry ID0gWENEUiAoaTFfY2RyKTsKICAgICAgIGlmICghQ09OU1AgKGkxX2NkcikpCi0JcmV0dXJu IDA7CQkvKiBhYm9ydCAoKTsgKi8KKwlyZXR1cm4gMDsKICAgICAgIGkxX2NkciA9IFhDRFIg KGkxX2Nkcik7CiAgICAgfQogCkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogICAgICAgZWxzZSBp ZiAoU1RSSU5HUCAob3duZXIpKQogCXNldF9zdHJpbmdfaW50ZXJ2YWxzIChvd25lciwgcGFy ZW50KTsKICAgICAgIGVsc2UKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKIAogICAg ICAgcmV0dXJuOwogICAgIH0KQEAgLTE0MTAsNyArMTQxMCw3IEBACiAJCQkJICAgIHN0YXJ0 LCBsZW5ndGgpOwogICBlbHNlCiAgICAgewotICAgICAgSUZfTElOVCAoaWYgKGxlbmd0aCA8 IC0gVFlQRV9NQVhJTVVNIChwdHJkaWZmX3QpKSBhYm9ydCAoKTspCisgICAgICBsaW50X2Fz c3VtZSAoLSBUWVBFX01BWElNVU0gKHB0cmRpZmZfdCkgPD0gbGVuZ3RoKTsKICAgICAgIGFk anVzdF9pbnRlcnZhbHNfZm9yX2RlbGV0aW9uIChidWZmZXIsIHN0YXJ0LCAtbGVuZ3RoKTsK ICAgICB9CiB9CkBAIC0xNDcwLDcgKzE0NzAsNyBAQAogCiAgIC8qIFRoaXMgbXVzdCBiZSB0 aGUgcmlnaHRtb3N0IG9yIGxhc3QgaW50ZXJ2YWwgYW5kIGNhbm5vdAogICAgICBiZSBtZXJn ZWQgcmlnaHQuICBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGtub3duLiAgKi8KLSAgYWJvcnQg KCk7CisgIGVtYWNzX2Fib3J0ICgpOwogfQogDAogLyogTWVyZ2UgaW50ZXJ2YWwgSSB3aXRo IGl0cyBsZXhpY29ncmFwaGljIHByZWRlY2Vzc29yLiBUaGUgcmVzdWx0aW5nCkBAIC0xNTI2 LDcgKzE1MjYsNyBAQAogCiAgIC8qIFRoaXMgbXVzdCBiZSB0aGUgbGVmdG1vc3Qgb3IgZmly c3QgaW50ZXJ2YWwgYW5kIGNhbm5vdAogICAgICBiZSBtZXJnZWQgbGVmdC4gIFRoZSBjYWxs ZXIgc2hvdWxkIGhhdmUga25vd24uICAqLwotICBhYm9ydCAoKTsKKyAgZW1hY3NfYWJvcnQg KCk7CiB9CiAMCiAvKiBDcmVhdGUgYSBjb3B5IG9mIFNPVVJDRSBidXQgd2l0aCB0aGUgZGVm YXVsdCB2YWx1ZSBvZiBVUC4gICovCkBAIC0yMTcyLDcgKzIxNzIsNyBAQAogICBlbHNlIGlm IChTVFJJTkdQIChvYmplY3QpKQogICAgIGkgPSBmaW5kX2ludGVydmFsIChzdHJpbmdfaW50 ZXJ2YWxzIChvYmplY3QpLCBwb3MpOwogICBlbHNlCi0gICAgYWJvcnQgKCk7CisgICAgZW1h Y3NfYWJvcnQgKCk7CiAKICAgaWYgKCFpIHx8IChpLT5wb3NpdGlvbiArIExFTkdUSCAoaSkg PD0gcG9zKSkKICAgICByZXR1cm4gMDsKQEAgLTIyMTEsNyArMjIxMSw3IEBACiAKICAgLyog UGVyaGFwcyB3ZSBzaG91bGQganVzdCBjaGFuZ2UgYHBvc2l0aW9uJyB0byB0aGUgbGltaXQu ICAqLwogICBpZiAocG9zaXRpb24gPiBCVUZfWlYgKGJ1ZmZlcikgfHwgcG9zaXRpb24gPCBC VUZfQkVHViAoYnVmZmVyKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsK IAogICAvKiBJZ25vcmUgbmFycm93aW5nLCBzbyB0aGF0IGEgbG9jYWwgbWFwIGNvbnRpbnVl cyB0byBiZSB2YWxpZCBldmVuIGlmCiAgICAgIHRoZSB2aXNpYmxlIHJlZ2lvbiBjb250YWlu cyBubyBjaGFyYWN0ZXJzIGFuZCBoZW5jZSBubyBwcm9wZXJ0aWVzLiAgKi8KCj09PSBtb2Rp ZmllZCBmaWxlICdzcmMva2V5Ym9hcmQuYycKLS0tIHNyYy9rZXlib2FyZC5jCTIwMTItMDgt MjggMDY6MjA6MDggKzAwMDAKKysrIHNyYy9rZXlib2FyZC5jCTIwMTItMDgtMzEgMTY6MjA6 MzAgKzAwMDAKQEAgLTEwMzIsNyArMTAzMiw3IEBACiAgICAgICBwb3Bfa2JvYXJkICgpOwog ICAgICAgLyogVGhlIHBvcCBzaG91bGQgbm90IGNoYW5nZSB0aGUga2JvYXJkLiAgKi8KICAg ICAgIGlmIChzaW5nbGVfa2JvYXJkICYmIGN1cnJlbnRfa2JvYXJkICE9IHByZXYpCi0gICAg ICAgIGFib3J0ICgpOworICAgICAgICBlbWFjc19hYm9ydCAoKTsKICAgICB9CiAgIHJldHVy biBRbmlsOwogfQpAQCAtMjYxNCwxMyArMjYxNCwxMyBAQAogCSAgICBMaXNwX09iamVjdCBs YXN0ID0gS1ZBUiAoa2IsIGtiZF9xdWV1ZSk7CiAJICAgIC8qIFdlIHNob3VsZG4ndCBnZXQg aGVyZSBpZiB3ZSB3ZXJlIGluIHNpbmdsZS1rYm9hcmQgbW9kZSEgICovCiAJICAgIGlmIChz aW5nbGVfa2JvYXJkKQotCSAgICAgIGFib3J0ICgpOworCSAgICAgIGVtYWNzX2Fib3J0ICgp OwogCSAgICBpZiAoQ09OU1AgKGxhc3QpKQogCSAgICAgIHsKIAkJd2hpbGUgKENPTlNQIChY Q0RSIChsYXN0KSkpCiAJCSAgbGFzdCA9IFhDRFIgKGxhc3QpOwogCQlpZiAoIU5JTFAgKFhD RFIgKGxhc3QpKSkKLQkJICBhYm9ydCAoKTsKKwkJICBlbWFjc19hYm9ydCAoKTsKIAkgICAg ICB9CiAJICAgIGlmICghQ09OU1AgKGxhc3QpKQogCSAgICAgIGtzZXRfa2JkX3F1ZXVlIChr YiwgRmNvbnMgKGMsIFFuaWwpKTsKQEAgLTI3OTMsNyArMjc5Myw3IEBACiAgICAgICBpZiAo Y3VycmVudF9rYm9hcmQtPmtiZF9xdWV1ZV9oYXNfZGF0YSkKIAl7CiAJICBpZiAoIUNPTlNQ IChLVkFSIChjdXJyZW50X2tib2FyZCwga2JkX3F1ZXVlKSkpCi0JICAgIGFib3J0ICgpOwor CSAgICBlbWFjc19hYm9ydCAoKTsKIAkgIGMgPSBYQ0FSIChLVkFSIChjdXJyZW50X2tib2Fy ZCwga2JkX3F1ZXVlKSk7CiAJICBrc2V0X2tiZF9xdWV1ZSAoY3VycmVudF9rYm9hcmQsCiAJ CQkgIFhDRFIgKEtWQVIgKGN1cnJlbnRfa2JvYXJkLCBrYmRfcXVldWUpKSk7CkBAIC0yODYw LDcgKzI4NjAsNyBAQAogCSAgICAgIHdoaWxlIChDT05TUCAoWENEUiAobGFzdCkpKQogCQls YXN0ID0gWENEUiAobGFzdCk7CiAJICAgICAgaWYgKCFOSUxQIChYQ0RSIChsYXN0KSkpCi0J CWFib3J0ICgpOworCQllbWFjc19hYm9ydCAoKTsKIAkgICAgfQogCSAgaWYgKCFDT05TUCAo bGFzdCkpCiAJICAgIGtzZXRfa2JkX3F1ZXVlIChrYiwgRmNvbnMgKGMsIFFuaWwpKTsKQEAg LTM1NjksNyArMzU2OSw3IEBACiAJCQkgICAgIHN0cnVjdCBpbnB1dF9ldmVudCAqaG9sZF9x dWl0KQogewogICBpZiAoZXZlbnQtPmtpbmQgPT0gTk9fRVZFTlQpCi0gICAgYWJvcnQgKCk7 CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgaWYgKGhvbGRfcXVpdCAmJiBob2xkX3F1aXQt PmtpbmQgIT0gTk9fRVZFTlQpCiAgICAgcmV0dXJuOwpAQCAtMzk2NCw3ICszOTY0LDcgQEAK ICNlbHNlCiAJICAvKiBXZSdyZSBnZXR0aW5nIHNlbGVjdGlvbiByZXF1ZXN0IGV2ZW50cywg YnV0IHdlIGRvbid0IGhhdmUKICAgICAgICAgICAgICBhIHdpbmRvdyBzeXN0ZW0uICAqLwot CSAgYWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKICNlbmRpZgogCX0KIApAQCAtNDIw MSw3ICs0MjAxLDcgQEAKICAgZWxzZQogICAgIC8qIFdlIHdlcmUgcHJvbWlzZWQgYnkgdGhl IGFib3ZlIHdoaWxlIGxvb3AgdGhhdCB0aGVyZSB3YXMKICAgICAgICBzb21ldGhpbmcgZm9y IHVzIHRvIHJlYWQhICAqLwotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwog CiAgIGlucHV0X3BlbmRpbmcgPSByZWFkYWJsZV9ldmVudHMgKDApOwogCkBAIC00MjcwLDcg KzQyNzAsNyBAQAogI2Vsc2UKIAkgIC8qIFdlJ3JlIGdldHRpbmcgc2VsZWN0aW9uIHJlcXVl c3QgZXZlbnRzLCBidXQgd2UgZG9uJ3QgaGF2ZQogICAgICAgICAgICAgIGEgd2luZG93IHN5 c3RlbS4gICovCi0JICBhYm9ydCAoKTsKKwkgIGVtYWNzX2Fib3J0ICgpOwogI2VuZGlmCiAJ fQogICAgIH0KQEAgLTU2MjQsNyArNTYyNCw3IEBACiAJICBlbHNlIGlmIChGUkFNRVAgKGV2 ZW50LT5mcmFtZV9vcl93aW5kb3cpKQogCSAgICBmID0gWEZSQU1FIChldmVudC0+ZnJhbWVf b3Jfd2luZG93KTsKIAkgIGVsc2UKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0 ICgpOwogCiAJICBpZiAoRlJBTUVfV0lORE9XX1AgKGYpKQogCSAgICBmdXp6ID0gZG91Ymxl X2NsaWNrX2Z1eno7CkBAIC01NzMxLDcgKzU3MzEsNyBAQAogCWVsc2UKIAkgIC8qIEV2ZXJ5 IG1vdXNlIGV2ZW50IHNob3VsZCBlaXRoZXIgaGF2ZSB0aGUgZG93bl9tb2RpZmllciBvcgog ICAgICAgICAgICAgIHRoZSB1cF9tb2RpZmllciBzZXQuICAqLwotCSAgYWJvcnQgKCk7CisJ ICBlbWFjc19hYm9ydCAoKTsKIAogCXsKIAkgIC8qIEdldCB0aGUgc3ltYm9sIHdlIHNob3Vs ZCB1c2UgZm9yIHRoZSBtb3VzZSBjbGljay4gICovCkBAIC01NzkyLDcgKzU3OTIsNyBAQAog CSAgZWxzZSBpZiAoRlJBTUVQIChldmVudC0+ZnJhbWVfb3Jfd2luZG93KSkKIAkgICAgZnIg PSBYRlJBTUUgKGV2ZW50LT5mcmFtZV9vcl93aW5kb3cpOwogCSAgZWxzZQotCSAgICBhYm9y dCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAKIAkgIGZ1enogPSBGUkFNRV9XSU5ET1df UCAoZnIpCiAJICAgID8gZG91YmxlX2NsaWNrX2Z1enogOiBkb3VibGVfY2xpY2tfZnV6eiAv IDg7CkBAIC01ODEyLDcgKzU4MTIsNyBAQAogCSAgZWxzZQogCSAgICAvKiBFdmVyeSB3aGVl bCBldmVudCBzaG91bGQgZWl0aGVyIGhhdmUgdGhlIGRvd25fbW9kaWZpZXIgb3IKIAkgICAg ICAgdGhlIHVwX21vZGlmaWVyIHNldC4gICovCi0JICAgIGFib3J0ICgpOworCSAgICBlbWFj c19hYm9ydCAoKTsKIAogICAgICAgICAgIGlmIChldmVudC0+a2luZCA9PSBIT1JJWl9XSEVF TF9FVkVOVCkKICAgICAgICAgICAgIHN5bWJvbF9udW0gKz0gMjsKQEAgLTU5ODEsNyArNTk4 MSw3IEBACiAgICAgICB7CiAJY2hhciAqbmFtZSA9IGZpbmRfdXNlcl9zaWduYWxfbmFtZSAo ZXZlbnQtPmNvZGUpOwogCWlmICghbmFtZSkKLQkgIGFib3J0ICgpOworCSAgZW1hY3NfYWJv cnQgKCk7CiAJcmV0dXJuIGludGVybiAobmFtZSk7CiAgICAgICB9CiAKQEAgLTYwNjIsNyAr NjA2Miw3IEBACiAKICAgICAgIC8qIFRoZSAna2luZCcgZmllbGQgb2YgdGhlIGV2ZW50IGlz IHNvbWV0aGluZyB3ZSBkb24ndCByZWNvZ25pemUuICAqLwogICAgIGRlZmF1bHQ6Ci0gICAg ICBhYm9ydCAoKTsKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwogICAgIH0KIH0KIApAQCAtNjIz OSw3ICs2MjM5LDcgQEAKICAgICAvKiBPbmx5IHRoZSBldmVudCBxdWV1ZSBtYXkgdXNlIHRo ZSBgdXAnIG1vZGlmaWVyOyBpdCBzaG91bGQgYWx3YXlzCiAgICAgICAgYmUgdHVybmVkIGlu dG8gYSBjbGljayBvciBkcmFnIGV2ZW50IGJlZm9yZSBwcmVzZW50ZWQgdG8gbGlzcCBjb2Rl LiAgKi8KICAgICBpZiAobW9kaWZpZXJzICYgdXBfbW9kaWZpZXIpCi0gICAgICBhYm9ydCAo KTsKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgICAgaWYgKG1vZGlmaWVycyAmIGFsdF9t b2RpZmllcikgICB7ICpwKysgPSAnQSc7ICpwKysgPSAnLSc7IH0KICAgICBpZiAobW9kaWZp ZXJzICYgY3RybF9tb2RpZmllcikgIHsgKnArKyA9ICdDJzsgKnArKyA9ICctJzsgfQpAQCAt NjMzNCw3ICs2MzM0LDcgQEAKIAkJCSAgICBRbmlsKTsKIAogICAgICAgaWYgKG1vZGlmaWVy cyAmIH5JTlRNQVNLKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgICAgWFNF VEZBU1RJTlQgKG1hc2ssIG1vZGlmaWVycyk7CiAgICAgICBlbGVtZW50cyA9IEZjb25zICh1 bm1vZGlmaWVkLCBGY29ucyAobWFzaywgUW5pbCkpOwogCkBAIC03MDExLDcgKzcwMTEsNyBA QAogCiAgIGlmICh0ZXJtaW5hbC0+dHlwZSAhPSBvdXRwdXRfdGVybWNhcAogICAgICAgJiYg dGVybWluYWwtPnR5cGUgIT0gb3V0cHV0X21zZG9zX3JhdykKLSAgICBhYm9ydCAoKTsKKyAg ICBlbWFjc19hYm9ydCAoKTsKIAogICAvKiBYWFggSSB0aGluayB0aGUgZm9sbG93aW5nIGNv ZGUgc2hvdWxkIGJlIG1vdmVkIHRvIHNlcGFyYXRlIGhvb2sKICAgICAgZnVuY3Rpb25zIGlu IHN5c3RlbS1kZXBlbmRlbnQgZmlsZXMuICAqLwpAQCAtODQ1NCw3ICs4NDU0LDcgQEAKIAog ICAvKiBBcHBlbmQgZW50cmllcyBmcm9tIHRvb2xfYmFyX2l0ZW1fcHJvcGVydGllcyB0byB0 aGUgZW5kIG9mCiAgICAgIHRvb2xfYmFyX2l0ZW1zX3ZlY3Rvci4gICovCi0gIHZjb3B5ICh0 b29sX2Jhcl9pdGVtc192ZWN0b3IsIG50b29sX2Jhcl9pdGVtcywgCisgIHZjb3B5ICh0b29s X2Jhcl9pdGVtc192ZWN0b3IsIG50b29sX2Jhcl9pdGVtcywKIAkgWFZFQ1RPUiAodG9vbF9i YXJfaXRlbV9wcm9wZXJ0aWVzKS0+Y29udGVudHMsIFRPT0xfQkFSX0lURU1fTlNMT1RTKTsK ICAgbnRvb2xfYmFyX2l0ZW1zICs9IFRPT0xfQkFSX0lURU1fTlNMT1RTOwogfQpAQCAtMTA5 MTIsNyArMTA5MTIsNyBAQAogI2VuZGlmIC8qIG5vdCBNU0RPUyAqLwogICAgICAgZmZsdXNo IChzdGRvdXQpOwogICAgICAgaWYgKCgoYyA9IGdldGNoYXIgKCkpICYgfjA0MCkgPT0gJ1kn KQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgICAgd2hpbGUgKGMgIT0gJ1xu JykgYyA9IGdldGNoYXIgKCk7CiAjaWZkZWYgTVNET1MKICAgICAgIHByaW50ZiAoIlxyXG5D b250aW51aW5nLi4uXHJcbiIpOwpAQCAtMTA5OTMsNyArMTA5OTMsNyBAQAogI2lmZGVmIFBP TExfRk9SX0lOUFVUCiAgIC8qIE1heSBiZSA+IDEgaWYgaW4gcmVjdXJzaXZlIG1pbmlidWZm ZXIuICAqLwogICBpZiAocG9sbF9zdXBwcmVzc19jb3VudCA9PSAwKQotICAgIGFib3J0ICgp OworICAgIGVtYWNzX2Fib3J0ICgpOwogI2VuZGlmCiAjZW5kaWYKICAgaWYgKEZSQU1FUCAo aW50ZXJuYWxfbGFzdF9ldmVudF9mcmFtZSkKQEAgLTExMzUxLDcgKzExMzUxLDcgQEAKIAog ICBmb3IgKGticCA9ICZhbGxfa2JvYXJkczsgKmticCAhPSBrYjsga2JwID0gJigqa2JwKS0+ bmV4dF9rYm9hcmQpCiAgICAgaWYgKCprYnAgPT0gTlVMTCkKLSAgICAgIGFib3J0ICgpOwor ICAgICAgZW1hY3NfYWJvcnQgKCk7CiAgICprYnAgPSBrYi0+bmV4dF9rYm9hcmQ7CiAKICAg LyogUHJldmVudCBhIGRhbmdsaW5nIHJlZmVyZW5jZSB0byBLQi4gICovCkBAIC0xMTM2Miw3 ICsxMTM2Miw3IEBACiAgICAgICBjdXJyZW50X2tib2FyZCA9IEZSQU1FX0tCT0FSRCAoWEZS QU1FIChzZWxlY3RlZF9mcmFtZSkpOwogICAgICAgc2luZ2xlX2tib2FyZCA9IDA7CiAgICAg ICBpZiAoY3VycmVudF9rYm9hcmQgPT0ga2IpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQg KCk7CiAgICAgfQogCiAgIHdpcGVfa2JvYXJkIChrYik7Cgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL2tleW1hcC5jJwotLS0gc3JjL2tleW1hcC5jCTIwMTItMDgtMjggMDY6MjA6MDggKzAw MDAKKysrIHNyYy9rZXltYXAuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0yOTE2 LDcgKzI5MTYsNyBAQAogCSAgY2hhciAqdGl0bGUsICpwOwogCiAJICBpZiAoIVNZTUJPTFAg KG1vZGVzW2ldKSkKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCiAJ ICBwID0gdGl0bGUgPSBhbGxvY2EgKDQyICsgU0NIQVJTIChTWU1CT0xfTkFNRSAobW9kZXNb aV0pKSk7CiAJICAqcCsrID0gJ1xmJzsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlzcC5o JwotLS0gc3JjL2xpc3AuaAkyMDEyLTA4LTMxIDEwOjUzOjE5ICswMDAwCisrKyBzcmMvbGlz cC5oCTIwMTItMDgtMzEgMTY6MjE6NTYgKzAwMDAKQEAgLTIyODgsNyArMjI4OCw3IEBACiAK ICNkZWZpbmUgVU5HQ1BSTwkJCQkJXAogICgoLS1nY3Byb19sZXZlbCAhPSBnY3BybzEubGV2 ZWwpCQlcCi0gID8gKGFib3J0ICgpLCAwKQkJCQlcCisgID8gKGVtYWNzX2Fib3J0ICgpLCAw KQkJCQlcCiAgIDogKChnY3Byb2xpc3QgPSBnY3BybzEubmV4dCksIDApKQogCiAjZW5kaWYg LyogREVCVUdfR0NQUk8gKi8KQEAgLTM0MDYsNiArMzQwNiw3IEBACiBleHRlcm4gaW50IHNl dF93aW5kb3dfc2l6ZSAoaW50LCBpbnQsIGludCk7CiBleHRlcm4gRU1BQ1NfSU5UIGdldF9y YW5kb20gKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2VlZF9yYW5kb20gKGxvbmcpOworZXh0ZXJu IF9Ob3JldHVybiB2b2lkIGVtYWNzX2Fib3J0ICh2b2lkKSBOT19JTkxJTkU7CiBleHRlcm4g aW50IGVtYWNzX29wZW4gKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCBl bWFjc19jbG9zZSAoaW50KTsKIGV4dGVybiBwdHJkaWZmX3QgZW1hY3NfcmVhZCAoaW50LCBj aGFyICosIHB0cmRpZmZfdCk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2xyZWFkLmMnCi0t LSBzcmMvbHJlYWQuYwkyMDEyLTA4LTMwIDAwOjQ3OjMzICswMDAwCisrKyBzcmMvbHJlYWQu YwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xNjk2LDcgKzE2OTYsNyBAQAogCiAg IC8qIFdlIGFzc3VtZSBTVEFSVCBpcyBuaWwgd2hlbiBpbnB1dCBpcyBub3QgZnJvbSBhIGJ1 ZmZlci4gICovCiAgIGlmICghIE5JTFAgKHN0YXJ0KSAmJiAhYikKLSAgICBhYm9ydCAoKTsK KyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBzcGVjYmluZCAoUXN0YW5kYXJkX2lucHV0LCBy ZWFkY2hhcmZ1bik7IC8qIEdDUFJPcyByZWFkY2hhcmZ1bi4gICovCiAgIHNwZWNiaW5kIChR Y3VycmVudF9sb2FkX2xpc3QsIFFuaWwpOwpAQCAtMzY3Myw3ICszNjczLDcgQEAKICAgICAv KiBDcmVhdGluZyBhIG5vbi1wdXJlIHN0cmluZyBmcm9tIGEgc3RyaW5nIGxpdGVyYWwgbm90 CiAgICAgICAgaW1wbGVtZW50ZWQgeWV0LiAgV2UgY291bGQganVzdCB1c2UgbWFrZV9zdHJp bmcgaGVyZSBhbmQgbGl2ZQogICAgICAgIHdpdGggdGhlIGV4dHJhIGNvcHkuICAqLwotICAg IGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIHJldHVybiBGaW50ZXJuICht YWtlX3B1cmVfY19zdHJpbmcgKHN0ciwgbGVuKSwgb2JhcnJheSk7CiB9Cgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL21hcmtlci5jJwotLS0gc3JjL21hcmtlci5jCTIwMTItMDctMjkgMTE6 MjA6NDMgKzAwMDAKKysrIHNyYy9tYXJrZXIuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAw CkBAIC01OSw3ICs1OSw3IEBACiAJCQkJICAgICAgYnl0ZXBvcyAtIEJVRl9CRUdfQllURSAo YikpOwogCiAgIGlmIChjaGFycG9zIC0gMSAhPSBuY2hhcnMpCi0gICAgYWJvcnQgKCk7Cisg ICAgZW1hY3NfYWJvcnQgKCk7CiB9CiAKICNlbHNlIC8qIG5vdCBNQVJLRVJfREVCVUcgKi8K QEAgLTY3LDcgKzY3LDcgQEAKICNkZWZpbmUgYnl0ZV9jaGFyX2RlYnVnX2NoZWNrKGIsIGNo YXJwb3MsIGJ5dGVwb3MpIGRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIE1BUktFUl9E RUJVRyAqLwotIAorCiB2b2lkCiBjbGVhcl9jaGFycG9zX2NhY2hlIChzdHJ1Y3QgYnVmZmVy ICpiKQogewpAQCAtMTQyLDcgKzE0Miw3IEBACiAgIHB0cmRpZmZfdCBiZXN0X2JlbG93LCBi ZXN0X2JlbG93X2J5dGU7CiAKICAgaWYgKGNoYXJwb3MgPCBCVUZfQkVHIChiKSB8fCBjaGFy cG9zID4gQlVGX1ogKGIpKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwog CiAgIGJlc3RfYWJvdmUgPSBCVUZfWiAoYik7CiAgIGJlc3RfYWJvdmVfYnl0ZSA9IEJVRl9a X0JZVEUgKGIpOwpAQCAtMjk2LDcgKzI5Niw3IEBACiAgIHB0cmRpZmZfdCBiZXN0X2JlbG93 LCBiZXN0X2JlbG93X2J5dGU7CiAKICAgaWYgKGJ5dGVwb3MgPCBCVUZfQkVHX0JZVEUgKGIp IHx8IGJ5dGVwb3MgPiBCVUZfWl9CWVRFIChiKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFj c19hYm9ydCAoKTsKIAogICBiZXN0X2Fib3ZlID0gQlVGX1ogKGIpOwogICBiZXN0X2Fib3Zl X2J5dGUgPSBCVUZfWl9CWVRFIChiKTsKQEAgLTUwNiw3ICs1MDYsNyBAQAogICBlbHNlCiAg ICAgewogICAgICAgcmVnaXN0ZXIgcHRyZGlmZl90IGNoYXJwb3MsIGJ5dGVwb3M7Ci0gICAg CisKICAgICAgIENIRUNLX05VTUJFUl9DT0VSQ0VfTUFSS0VSIChwb3NpdGlvbik7CiAgICAg ICBjaGFycG9zID0gY2xpcF90b19ib3VuZHMgKHJlc3RyaWN0ZWQgPyBCVUZfQkVHViAoYikg OiBCVUZfQkVHIChiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYSU5UIChw b3NpdGlvbiksCkBAIC01NzAsOCArNTcwLDggQEAKIAogICBpZiAoYikKICAgICB7Ci0gICAg ICBhdHRhY2hfbWFya2VyIAotCShtLCBiLCAKKyAgICAgIGF0dGFjaF9tYXJrZXIKKwkobSwg YiwKIAkgY2xpcF90b19ib3VuZHMgKEJVRl9CRUdWIChiKSwgY2hhcnBvcywgQlVGX1pWIChi KSksCiAJIGNsaXBfdG9fYm91bmRzIChCVUZfQkVHVl9CWVRFIChiKSwgYnl0ZXBvcywgQlVG X1pWX0JZVEUgKGIpKSk7CiAgICAgfQpAQCAtNjA1LDEyICs2MDUsMTIgQEAKIAkgIHsKIAkg ICAgaWYgKCpwcmV2ID09IEJVRl9NQVJLRVJTIChiKSkKIAkgICAgICB7Ci0JCS8qIERlbGV0 aW5nIGZpcnN0IG1hcmtlciBmcm9tIHRoZSBidWZmZXIncyBjaGFpbi4gIENyYXNoIAorCQkv KiBEZWxldGluZyBmaXJzdCBtYXJrZXIgZnJvbSB0aGUgYnVmZmVyJ3MgY2hhaW4uICBDcmFz aAogCQkgICBpZiBuZXcgZmlyc3QgbWFya2VyIGluIGNoYWluIGRvZXMgbm90IHNheSBpdCBi ZWxvbmdzCiAJCSAgIHRvIHRoZSBzYW1lIGJ1ZmZlciwgb3IgYXQgbGVhc3QgdGhhdCB0aGV5 IGhhdmUgdGhlIHNhbWUKIAkJICAgYmFzZSBidWZmZXIuICAqLwogCQlpZiAodGFpbC0+bmV4 dCAmJiBiLT50ZXh0ICE9IHRhaWwtPm5leHQtPmJ1ZmZlci0+dGV4dCkKLQkJICBhYm9ydCAo KTsKKwkJICBlbWFjc19hYm9ydCAoKTsKIAkgICAgICB9CiAJICAgICpwcmV2ID0gdGFpbC0+ bmV4dDsKIAkgICAgLyogV2UgaGF2ZSByZW1vdmVkIHRoZSBtYXJrZXIgZnJvbSB0aGUgY2hh aW47Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL21lbnUuYycKLS0tIHNyYy9tZW51LmMJMjAx Mi0wOC0wNSAxNTo0NzoyOCArMDAwMAorKysgc3JjL21lbnUuYwkyMDEyLTA4LTMxIDE2OjIw OjMwICswMDAwCkBAIC03NDQsNyArNzQ0LDcgQEAKIAogCSAgLyogQWxsIGl0ZW1zIHNob3Vs ZCBiZSBjb250YWluZWQgaW4gcGFuZXMuICAqLwogCSAgaWYgKHBhbmVzX3NlZW4gPT0gMCkK LQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCiAJICBpdGVtX25hbWUg PSBBUkVGIChtZW51X2l0ZW1zLCBpICsgTUVOVV9JVEVNU19JVEVNX05BTUUpOwogCSAgZW5h YmxlID0gQVJFRiAobWVudV9pdGVtcywgaSArIE1FTlVfSVRFTVNfSVRFTV9FTkFCTEUpOwpA QCAtODE4LDcgKzgxOCw3IEBACiAJICBlbHNlIGlmIChFUSAodHlwZSwgUUN0b2dnbGUpKQog CSAgICB3di0+YnV0dG9uX3R5cGUgPSBCVVRUT05fVFlQRV9UT0dHTEU7CiAJICBlbHNlCi0J ICAgIGFib3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAoKTsKIAogCSAgd3YtPnNlbGVjdGVk ID0gIU5JTFAgKHNlbGVjdGVkKTsKIAkgIGlmICghIFNUUklOR1AgKGhlbHApKQoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9taW5pYnVmLmMnCi0tLSBzcmMvbWluaWJ1Zi5jCTIwMTItMDgt MjggMDY6MjA6MDggKzAwMDAKKysrIHNyYy9taW5pYnVmLmMJMjAxMi0wOC0zMSAxNjoyMDoz MCArMDAwMApAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAvKiBJIGRvbid0IHRoaW5rIHRo YXQgYW55IGZyYW1lcyBtYXkgdmFsaWRseSBoYXZlIGEgbnVsbCBtaW5pYnVmZmVyCiAJIHdp bmRvdyBhbnltb3JlLiAgKi8KICAgICAgIGlmIChOSUxQIChzZi0+bWluaWJ1ZmZlcl93aW5k b3cpKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogCiAgICAgICAvKiBVbmRlciBY LCB3ZSBjb21lIGhlcmUgd2l0aCBtaW5pYnVmX3dpbmRvdyBiZWluZyB0aGUKIAkgbWluaWJ1 ZmZlciB3aW5kb3cgb2YgdGhlIHVudXNlZCB0ZXJtY2FwIHdpbmRvdyBjcmVhdGVkIGluCgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL21zZG9zLmMnCi0tLSBzcmMvbXNkb3MuYwkyMDEyLTA4 LTIxIDEwOjIxOjA0ICswMDAwCisrKyBzcmMvbXNkb3MuYwkyMDEyLTA4LTMxIDE2OjIwOjMw ICswMDAwCkBAIC03OTYsNyArNzk2LDcgQEAKICAgICAgIC8qIFRoZSBkZWZhdWx0IGZhY2Ug Zm9yIHRoZSBmcmFtZSBzaG91bGQgYWx3YXlzIGJlIHJlYWxpemVkIGFuZAogCSBjYWNoZWQu ICAqLwogICAgICAgaWYgKCFmcCkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAg ICB9CiAgIHNjcmVlbl9mYWNlID0gZmFjZTsKICAgZmcgPSBmcC0+Zm9yZWdyb3VuZDsKQEAg LTEzOTQsNyArMTM5NCw3IEBACiBzdGF0aWMgdm9pZAogSVRfZGVsZXRlX2dseXBocyAoc3Ry dWN0IGZyYW1lICpmLCBpbnQgbikKIHsKLSAgYWJvcnQgKCk7CisgIGVtYWNzX2Fib3J0ICgp OwogfQogCiAvKiBzZXQtd2luZG93LWNvbmZpZ3VyYXRpb24gb24gd2luZG93LmMgbmVlZHMg dGhpcy4gICovCkBAIC0zMDE0LDcgKzMwMTQsNyBAQAogICBjb25zdCBjaGFyICpwOwogCiAg IGlmICghZW5hYmxlKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAg IElUX21lbnVfbWFrZV9yb29tIChtZW51KTsKICAgbWVudS0+c3VibWVudVttZW51LT5jb3Vu dF0gPSBJVF9tZW51X2NyZWF0ZSAoKTsKQEAgLTQxMjAsNyArNDEyMCw3IEBACiAgICAgRkRf WkVSTyAoZWZkcyk7CiAKICAgaWYgKG5mZHMgIT0gMSkKLSAgICBhYm9ydCAoKTsKKyAgICBl bWFjc19hYm9ydCAoKTsKIAogICAvKiBJZiB3ZSBhcmUgbG9va2luZyBvbmx5IGZvciB0aGUg dGVybWluYWwsIHdpdGggbm8gdGltZW91dCwKICAgICAganVzdCByZWFkIGl0IGFuZCB3YWl0 IC0tIHRoYXQncyBtb3JlIGVmZmljaWVudC4gICovCkBAIC00MjE1LDI2ICs0MjE1LDggQEAK IH0KICNlbmRpZgogCi0jaWZkZWYgYWJvcnQKLSN1bmRlZiBhYm9ydAotdm9pZAotZG9zX2Fi b3J0IChjaGFyICpmaWxlLCBpbnQgbGluZSkKLXsKLSAgY2hhciBidWZmZXIxWzIwMF0sIGJ1 ZmZlcjJbNDAwXTsKLSAgaW50IGksIGo7Ci0KLSAgc3ByaW50ZiAoYnVmZmVyMSwgIjxFTUFD UyBGQVRBTCBFUlJPUiBJTiAlcyBMSU5FICVkPiIsIGZpbGUsIGxpbmUpOwotICBmb3IgKGkg PSBqID0gMDsgYnVmZmVyMVtpXTsgaSsrKSB7Ci0gICAgYnVmZmVyMltqKytdID0gYnVmZmVy MVtpXTsKLSAgICBidWZmZXIyW2orK10gPSAweDcwOwotICB9Ci0gIGRvc21lbXB1dCAoYnVm ZmVyMiwgaiwgKGludClTY3JlZW5QcmltYXJ5KTsKLSAgU2NyZWVuU2V0Q3Vyc29yICgyLCAw KTsKLSAgYWJvcnQgKCk7Ci19Ci0jZWxzZQotdm9pZAotYWJvcnQgKHZvaWQpCit2b2lkCitl bWFjc19hYm9ydCAodm9pZCkKIHsKICAgZG9zX3R0Y29va2VkICgpOwogICBTY3JlZW5TZXRD dXJzb3IgKDEwLCAwKTsKQEAgLTQyNTAsNyArNDIzMiw2IEBACiAjZW5kaWYgLyogX19ESkdQ UF9NSU5PUl9fID49IDIgKi8KICAgZXhpdCAoMik7CiB9Ci0jZW5kaWYKIAogdm9pZAogc3lt c19vZl9tc2RvcyAodm9pZCkKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbnNmb250Lm0nCi0t LSBzcmMvbnNmb250Lm0JMjAxMi0wOC0xOSAwMDo1MzoyOSArMDAwMAorKysgc3JjL25zZm9u dC5tCTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTEzMzAsNyArMTMzMCw3IEBACiAK ICAgZm9udF9pbmZvLT5nbHlwaHNbYmxvY2tdID0geG1hbGxvYyAoMHgxMDAgKiBzaXplb2Yg KHVuc2lnbmVkIHNob3J0KSk7CiAgIGlmICghdW5pY2hhcnMgfHwgIShmb250X2luZm8tPmds eXBoc1tibG9ja10pKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAg IC8qIGNyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMg aW4gdGhpcyBibG9jayAqLwogICBmb3IgKGlkeCA9IGJsb2NrPDw4LCBpID0gMDsgaSA8IDB4 MTAwOyBpZHgrKywgaSsrKQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAKIAogICBmb250X2luZm8t Pm1ldHJpY3NbYmxvY2tdID0geHphbGxvYyAoMHgxMDAgKiBzaXplb2YgKHN0cnVjdCBmb250 X21ldHJpY3MpKTsKICAgaWYgKCEoZm9udF9pbmZvLT5tZXRyaWNzW2Jsb2NrXSkpCi0gICAg YWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgbWV0cmljcyA9IGZvbnRfaW5m by0+bWV0cmljc1tibG9ja107CiAgIGZvciAoZyA9IGJsb2NrPDw4LCBpID0wOyBpPDB4MTAw ICYmIGcgPCBudW1HbHlwaHM7IGcrKywgaSsrLCBtZXRyaWNzKyspCgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL25zbWVudS5tJwotLS0gc3JjL25zbWVudS5tCTIwMTItMDgtMjggMTY6MDU6 MTcgKzAwMDAKKysrIHNyYy9uc21lbnUubQkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBA IC05NDgsNyArOTQ4LDcgQEAKIAkgIGVsc2UgaWYgKEVRICh0eXBlLCBRQ3JhZGlvKSkKIAkg ICAgd3YtPmJ1dHRvbl90eXBlID0gQlVUVE9OX1RZUEVfUkFESU87CiAJICBlbHNlCi0JICAg IGFib3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAoKTsKIAogCSAgd3YtPnNlbGVjdGVkID0g IU5JTFAgKHNlbGVjdGVkKTsKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9uc3Rlcm0ubScK LS0tIHNyYy9uc3Rlcm0ubQkyMDEyLTA4LTI4IDE2OjAxOjU5ICswMDAwCisrKyBzcmMvbnN0 ZXJtLm0JMjAxMi0wOC0zMSAxNjoyMDozMCArMDAwMApAQCAtMzM0MCw3ICszMzQwLDcgQEAK ICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgIGFib3J0ICgpOworICAgICAg ZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogCiAgIC8qIERyYXcgYm94IGlmIG5vdCBkb25lIGFs cmVhZHkuICovCkBAIC0zNDc1LDcgKzM0NzUsNyBAQAogCiAgICAgICBpZiAoKythcHBsb29w bnIgIT0gMSkKICAgICAgICAgewotICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgIGVt YWNzX2Fib3J0ICgpOwogICAgICAgICB9CiAgICAgICBbTlNBcHAgcnVuXTsKICAgICAgIC0t YXBwbG9vcG5yOwpAQCAtMzUxNSw3ICszNTE1LDcgQEAKICAgW291dGVycG9vbCByZWxlYXNl XTsKICAgb3V0ZXJwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CiAK LSAgCisKICAgc2VuZF9hcHBkZWZpbmVkID0gWUVTOwogICBpZiAobnIgPiAwKQogICAgIHsK QEAgLTM1NjgsNyArMzU2OCw3IEBACiAgIGVtYWNzX2V2ZW50ID0gJmV2ZW50OwogICBpZiAo KythcHBsb29wbnIgIT0gMSkKICAgICB7Ci0gICAgICBhYm9ydCgpOworICAgICAgZW1hY3Nf YWJvcnQgKCk7CiAgICAgfQogICBbTlNBcHAgcnVuXTsKICAgLS1hcHBsb29wbnI7CkBAIC0z NTg2LDcgKzM1ODYsNyBAQAogICAgIHsKICAgICAgIGludCB0OwogICAgICAgaWYgKFtldiB0 eXBlXSAhPSBOU0FwcGxpY2F0aW9uRGVmaW5lZCkKLSAgICAgICAgYWJvcnQgKCk7CisgICAg ICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgICAgICB0ID0gW2V2IGRhdGExXTsKICAgICAgIGxh c3RfYXBwZGVmaW5lZF9ldmVudCA9IDA7CkBAIC00MDUzLDcgKzQwNTMsNyBAQAogICAgICAg ICAgICAgewogICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gY3Jl YXRlIHBpcGU6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBlbWFjc19zdHJlcnJv ciAoZXJybm8pKTsKLSAgICAgICAgICAgICAgYWJvcnQgKCk7CisgICAgICAgICAgICAgIGVt YWNzX2Fib3J0ICgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgZmNudGwgKHNlbGZk c1swXSwgRl9TRVRGTCwgT19OT05CTE9DS3xmY250bCAoc2VsZmRzWzBdLCBGX0dFVEZMKSk7 CkBAIC00MjczLDcgKzQyNzMsNyBAQAogICAgIH0KICAgZWxzZSAvLyBmb3JjZSBhIHN0YWNr IHRyYWNlIHRvIGhhcHBlbgogICAgIHsKLSAgICAgIGFib3J0KCk7CisgICAgICBlbWFjc19h Ym9ydCAoKTsKICAgICB9CiB9CiAKQEAgLTQ1MzQsMTAgKzQ1MzQsMTAgQEAKICAgLyogRG9u J3Qgb3BlbiBmaWxlcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdW5jb25kaXRpb25hbGx5LAog ICAgICBDb2NvYSBwYXJzZXMgdGhlIGNvbW1hbmQgbGluZSB3cm9uZywgLS1vcHRpb24gdmFs dWUgdHJpZXMgdG8gb3BlbiB2YWx1ZQogICAgICBpZiAtLW9wdGlvbiBpcyB0aGUgbGFzdCBv cHRpb24uICAqLwotICB3aGlsZSAoKGZpbGUgPSBbZmlsZXMgbmV4dE9iamVjdF0pICE9IG5p bCkgCisgIHdoaWxlICgoZmlsZSA9IFtmaWxlcyBuZXh0T2JqZWN0XSkgIT0gbmlsKQogICAg IGlmIChuc19kb19vcGVuX2ZpbGUgfHwgbm90X2luX2FyZ3YgKGZpbGUpKQogICAgICAgW25z X3BlbmRpbmdfZmlsZXMgYWRkT2JqZWN0OiBmaWxlXTsKLSAgCisKICAgW3NlbGYgcmVwbHlU b09wZW5PclByaW50OiBOU0FwcGxpY2F0aW9uRGVsZWdhdGVSZXBseVN1Y2Nlc3NdOwogCiB9 CkBAIC00NjA0LDcgKzQ2MDQsNyBAQAogCiAgIC8qIE5TVFJBQ0UgKGZkX2hhbmRsZXIpOyAq LwogCi0gIGZvciAoOzspIAorICBmb3IgKDs7KQogICAgIHsKICAgICAgIFtwb29sIHJlbGVh c2VdOwogICAgICAgcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwpA QCAtNDg4OSw3ICs0ODg5LDcgQEAKICAgICAgIGlzX3JpZ2h0X2tleSA9IChmbGFncyAmIE5T UmlnaHRDb21tYW5kS2V5TWFzaykgPT0gTlNSaWdodENvbW1hbmRLZXlNYXNrOwogICAgICAg aXNfbGVmdF9rZXkgPSAoZmxhZ3MgJiBOU0xlZnRDb21tYW5kS2V5TWFzaykgPT0gTlNMZWZ0 Q29tbWFuZEtleU1hc2sKICAgICAgICAgfHwgKCEgaXNfcmlnaHRfa2V5ICYmIChmbGFncyAm IE5TQ29tbWFuZEtleU1hc2spID09IE5TQ29tbWFuZEtleU1hc2spOwotICAgICAgCisKICAg ICAgIGlmIChpc19yaWdodF9rZXkpCiAgICAgICAgIGVtYWNzX2V2ZW50LT5tb2RpZmllcnMg fD0gcGFyc2Vfc29saXRhcnlfbW9kaWZpZXIKICAgICAgICAgICAoRVEgKG5zX3JpZ2h0X2Nv bW1hbmRfbW9kaWZpZXIsIFFsZWZ0KQpAQCAtNTg1Myw3ICs1ODUzLDcgQEAKICAgTlNUUkFD RSAobWVudURvd24pOwogICBpZiAoY29udGV4dF9tZW51X3ZhbHVlID09IC0xKQogICAgIGNv bnRleHRfbWVudV92YWx1ZSA9IFtzZW5kZXIgdGFnXTsKLSAgZWxzZSAKKyAgZWxzZQogICAg IHsKICAgICAgIE5TSW50ZWdlciB0YWcgPSBbc2VuZGVyIHRhZ107CiAgICAgICBmaW5kX2Fu ZF9jYWxsX21lbnVfc2VsZWN0aW9uIChlbWFjc2ZyYW1lLCBlbWFjc2ZyYW1lLT5tZW51X2Jh cl9pdGVtc191c2VkLApAQCAtNjE4MCw3ICs2MTgwLDcgQEAKICAgTGlzcF9PYmplY3Qgc3Ry ID0gUW5pbDsKICAgc3RydWN0IGZyYW1lICpmID0gU0VMRUNURURfRlJBTUUgKCk7CiAgIHN0 cnVjdCBidWZmZXIgKmN1cmJ1ZiA9IFhCVUZGRVIgKFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dp bmRvdyktPmJ1ZmZlcik7Ci0gCisKICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n Ok5TQWNjZXNzaWJpbGl0eVJvbGVBdHRyaWJ1dGVdKQogICAgIHJldHVybiBOU0FjY2Vzc2li aWxpdHlUZXh0RmllbGRSb2xlOwogCkBAIC02MTkzLDEzICs2MTkzLDEzIEBACiAgICAgewog ICAgICAgaWYgKCEgTklMUCAoQlZBUiAoY3VyYnVmLCBtYXJrX2FjdGl2ZSkpKQogICAgICAg ICAgIHN0ciA9IG5zX2dldF9sb2NhbF9zZWxlY3Rpb24gKFFQUklNQVJZLCBRVVRGOF9TVFJJ TkcpOwotICAgICAgCisKICAgICAgIGlmIChOSUxQIChzdHIpKQogICAgICAgICB7CiAgICAg ICAgICAgcHRyZGlmZl90IHN0YXJ0X2J5dGUgPSBCVUZfQkVHVl9CWVRFIChjdXJidWYpOwog ICAgICAgICAgIHB0cmRpZmZfdCBieXRlX3JhbmdlID0gQlVGX1pWX0JZVEUgKGN1cmJ1Zikg LSBzdGFydF9ieXRlOwogICAgICAgICAgIHB0cmRpZmZfdCByYW5nZSA9IEJVRl9aViAoY3Vy YnVmKSAtIEJVRl9CRUdWIChjdXJidWYpOwotICAgICAgICAgIAorCiAgICAgICAgICAgaWYg KCEgTklMUCAoQlZBUiAoY3VyYnVmLCBlbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKSkK ICAgICAgICAgICAgIHN0ciA9IG1ha2VfdW5pbml0X211bHRpYnl0ZV9zdHJpbmcgKHJhbmdl LCBieXRlX3JhbmdlKTsKICAgICAgICAgICBlbHNlCkBAIC02MjA5LDkgKzYyMDksOSBAQAog ICAgICAgICAgIG1lbWNweSAoU0RBVEEgKHN0ciksIEJZVEVfUE9TX0FERFIgKHN0YXJ0X2J5 dGUpLCBieXRlX3JhbmdlKTsKICAgICAgICAgfQogICAgIH0KLSAgCi0gIAotICBpZiAoISBO SUxQIChzdHIpKSAKKworCisgIGlmICghIE5JTFAgKHN0cikpCiAgICAgewogICAgICAgaWYg KENPTlNQIChzdHIpICYmIFNZTUJPTFAgKFhDQVIgKHN0cikpKQogICAgICAgICB7CkBAIC02 MjI2LDcgKzYyMjYsNyBAQAogICAgICAgICAgIHJldHVybiBuc1N0cjsKICAgICAgICAgfQog ICAgIH0KLSAgCisKICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs dWU6YXR0cmlidXRlXTsKIH0KICNlbmRpZiAvKiBOU19JTVBMX0NPQ09BICovCgo9PT0gbW9k aWZpZWQgZmlsZSAnc3JjL3ByaW50LmMnCi0tLSBzcmMvcHJpbnQuYwkyMDEyLTA4LTI4IDA2 OjIwOjA4ICswMDAwCisrKyBzcmMvcHJpbnQuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAw CkBAIC0yMDYwLDcgKzIwNjAsNyBAQAogICAgICAgewogCWludCBsZW47CiAJLyogV2UncmUg aW4gdHJvdWJsZSBpZiB0aGlzIGhhcHBlbnMhCi0JICAgUHJvYmFibHkgc2hvdWxkIGp1c3Qg YWJvcnQgKCkgKi8KKwkgICBQcm9iYWJseSBzaG91bGQganVzdCBlbWFjc19hYm9ydCAoKS4g ICovCiAJc3Ryb3V0ICgiIzxFTUFDUyBCVUc6IElOVkFMSUQgREFUQVRZUEUgIiwgLTEsIC0x LCBwcmludGNoYXJmdW4pOwogCWlmIChNSVNDUCAob2JqKSkKIAkgIGxlbiA9IHNwcmludGYg KGJ1ZiwgIihNSVNDIDB4JTA0eCkiLCAoaW50KSBYTUlTQ1RZUEUgKG9iaikpOwoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9wcm9jZXNzLmMnCi0tLSBzcmMvcHJvY2Vzcy5jCTIwMTItMDgt MjggMDY6MjA6MDggKzAwMDAKKysrIHNyYy9wcm9jZXNzLmMJMjAxMi0wOC0zMSAxNjoyMDoz MCArMDAwMApAQCAtMTU4Niw3ICsxNTg2LDcgQEAKIHN0YXJ0X3Byb2Nlc3NfdW53aW5kIChM aXNwX09iamVjdCBwcm9jKQogewogICBpZiAoIVBST0NFU1NQIChwcm9jKSkKLSAgICBhYm9y dCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICAvKiBXYXMgUFJPQyBzdGFydGVkIHN1 Y2Nlc3NmdWxseT8KICAgICAgLTIgaXMgdXNlZCBmb3IgYSBwdHkgd2l0aCBubyBwcm9jZXNz LCBlZyBmb3IgZ2RiLiAgKi8KQEAgLTI1NTksNyArMjU1OSw3IEBACiBtYWtlX3NlcmlhbF9w cm9jZXNzX3Vud2luZCAoTGlzcF9PYmplY3QgcHJvYykKIHsKICAgaWYgKCFQUk9DRVNTUCAo cHJvYykpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAgIHJlbW92ZV9w cm9jZXNzIChwcm9jKTsKICAgcmV0dXJuIFFuaWw7CiB9CkBAIC0zMzk2LDcgKzMzOTYsNyBA QAogICAgICAgaWYgKHNvY2t0eXBlID09IFNPQ0tfREdSQU0pCiAJewogCSAgaWYgKGRhdGFn cmFtX2FkZHJlc3Nbc10uc2EpCi0JICAgIGFib3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAo KTsKIAkgIGRhdGFncmFtX2FkZHJlc3Nbc10uc2EgPSB4bWFsbG9jIChscmVzLT5haV9hZGRy bGVuKTsKIAkgIGRhdGFncmFtX2FkZHJlc3Nbc10ubGVuID0gbHJlcy0+YWlfYWRkcmxlbjsK IAkgIGlmIChpc19zZXJ2ZXIpCkBAIC0zOTgyLDcgKzM5ODIsNyBAQAogCSAgRkRfQ0xSIChp bmNoYW5uZWwsICZjb25uZWN0X3dhaXRfbWFzayk7CiAJICBGRF9DTFIgKGluY2hhbm5lbCwg JndyaXRlX21hc2spOwogCSAgaWYgKC0tbnVtX3BlbmRpbmdfY29ubmVjdHMgPCAwKQotCSAg ICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAJfQogI2VuZGlmCiAgICAgICBp ZiAoaW5jaGFubmVsID09IG1heF9wcm9jZXNzX2Rlc2MpCkBAIC00NzYxLDcgKzQ3NjEsNyBA QAogCQkgQ2xlYW51cCBvY2N1cnMgYy9vIHN0YXR1c19ub3RpZnkgYWZ0ZXIgU0lHQ0xELiAq LwogCSAgICAgIG5vX2F2YWlsID0gMTsgLyogQ2Fubm90IGRlcGVuZCBvbiB2YWx1ZXMgcmV0 dXJuZWQgKi8KICNlbHNlCi0JICAgICAgYWJvcnQgKCk7CisJICAgICAgZW1hY3NfYWJvcnQg KCk7CiAjZW5kaWYKIAkgICAgfQogCSAgZWxzZQpAQCAtNTAwMiw3ICs1MDAyLDcgQEAKIAkg ICAgICBGRF9DTFIgKGNoYW5uZWwsICZjb25uZWN0X3dhaXRfbWFzayk7CiAgICAgICAgICAg ICAgIEZEX0NMUiAoY2hhbm5lbCwgJndyaXRlX21hc2spOwogCSAgICAgIGlmICgtLW51bV9w ZW5kaW5nX2Nvbm5lY3RzIDwgMCkKLQkJYWJvcnQgKCk7CisJCWVtYWNzX2Fib3J0ICgpOwog CiAJICAgICAgcHJvYyA9IGNoYW5fcHJvY2Vzc1tjaGFubmVsXTsKIAkgICAgICBpZiAoTklM UCAocHJvYykpCkBAIC02MzYzLDcgKzYzNjMsNyBAQAogI2VuZGlmIC8qIG5vdCBIQVZFX1NI VVRET1dOICovCiAgICAgICBuZXdfb3V0ZmQgPSBlbWFjc19vcGVuIChOVUxMX0RFVklDRSwg T19XUk9OTFksIDApOwogICAgICAgaWYgKG5ld19vdXRmZCA8IDApCi0JYWJvcnQgKCk7CisJ ZW1hY3NfYWJvcnQgKCk7CiAgICAgICBvbGRfb3V0ZmQgPSBYUFJPQ0VTUyAocHJvYyktPm91 dGZkOwogCiAgICAgICBpZiAoIXByb2NfZW5jb2RlX2NvZGluZ19zeXN0ZW1bbmV3X291dGZk XSkKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvcmFsbG9jLmMnCi0tLSBzcmMvcmFsbG9jLmMJ MjAxMi0wOC0yOCAxNjowMTo1OSArMDAwMAorKysgc3JjL3JhbGxvYy5jCTIwMTItMDgtMzEg MTY6MjA6MzAgKzAwMDAKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgIH0KIAogICBpZiAoISBo ZWFwKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIC8qIElmIHdl IGNhbid0IGZpdCBTSVpFIGJ5dGVzIGluIHRoYXQgaGVhcCwKICAgICAgdHJ5IHN1Y2Nlc3Np dmUgbGF0ZXIgaGVhcHMuICAqLwpAQCAtMzMwLDcgKzMzMCw3IEBACiAJICAvKiBUaGlzIGhl YXAgc2hvdWxkIGhhdmUgbm8gYmxvY3MgaW4gaXQuICAqLwogCSAgaWYgKGxhc3RfaGVhcC0+ Zmlyc3RfYmxvYyAhPSBOSUxfQkxPQwogCSAgICAgIHx8IGxhc3RfaGVhcC0+bGFzdF9ibG9j ICE9IE5JTF9CTE9DKQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAK IAkgIC8qIFJldHVybiB0aGUgbGFzdCBoZWFwLCB3aXRoIGl0cyBoZWFkZXIsIHRvIHRoZSBz eXN0ZW0uICAqLwogCSAgZXhjZXNzID0gKGNoYXIgKilsYXN0X2hlYXAtPmVuZCAtIChjaGFy ICopbGFzdF9oZWFwLT5zdGFydDsKQEAgLTM1NSw3ICszNTUsNyBAQAogICAgICAgICAgICAg IHdoaWNoIHJldHVybnMgdGhlIGVudGlyZSBsYXN0IGhlYXAgdG8gdGhlIHN5c3RlbSwgc2Vl bXMKICAgICAgICAgICAgICB1bmxpa2VseSB0byB0cmlnZ2VyIHRoaXMgbW9kZSBvZiBmYWls dXJlLiAgKi8KIAkgIGlmIChsYXN0X2hlYXAtPmVuZCAhPSAoKnJlYWxfbW9yZWNvcmUpICgw KSkKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCX0KICAgICB9CiB9 CkBAIC00NTIsNyArNDUyLDcgQEAKIAogICAvKiBObyBuZWVkIHRvIGV2ZXIgY2FsbCB0aGlz IGlmIGFyZW5hIGlzIGZyb3plbiwgYnVnIHNvbWV3aGVyZSEgICovCiAgIGlmIChyX2FsbG9j X2ZyZWV6ZV9sZXZlbCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAog ICB3aGlsZSAoYikKICAgICB7CkBAIC01NzYsNyArNTc2LDcgQEAKIAogICAvKiBObyBuZWVk IHRvIGV2ZXIgY2FsbCB0aGlzIGlmIGFyZW5hIGlzIGZyb3plbiwgYnVnIHNvbWV3aGVyZSEg ICovCiAgIGlmIChyX2FsbG9jX2ZyZWV6ZV9sZXZlbCkKLSAgICBhYm9ydCAoKTsKKyAgICBl bWFjc19hYm9ydCAoKTsKIAogICBpZiAoYmxvYyA9PSBOSUxfQkxPQyB8fCBzaXplID09IGJs b2MtPnNpemUpCiAgICAgcmV0dXJuIDE7CkBAIC01ODgsNyArNTg4LDcgQEAKICAgICB9CiAK ICAgaWYgKGhlYXAgPT0gTklMX0hFQVApCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJv cnQgKCk7CiAKICAgb2xkX3NpemUgPSBibG9jLT5zaXplOwogICBibG9jLT5zaXplID0gc2l6 ZTsKQEAgLTkzNyw3ICs5MzcsNyBAQAogCiAgIGRlYWRfYmxvYyA9IGZpbmRfYmxvYyAocHRy KTsKICAgaWYgKGRlYWRfYmxvYyA9PSBOSUxfQkxPQykKLSAgICBhYm9ydCAoKTsgLyogRG91 YmxlIGZyZWU/IFBUUiBub3Qgb3JpZ2luYWxseSB1c2VkIHRvIGFsbG9jYXRlPyAgKi8KKyAg ICBlbWFjc19hYm9ydCAoKTsgLyogRG91YmxlIGZyZWU/IFBUUiBub3Qgb3JpZ2luYWxseSB1 c2VkIHRvIGFsbG9jYXRlPyAgKi8KIAogICBmcmVlX2Jsb2MgKGRlYWRfYmxvYyk7CiAgICpw dHIgPSAwOwpAQCAtOTc5LDcgKzk3OSw3IEBACiAKICAgYmxvYyA9IGZpbmRfYmxvYyAocHRy KTsKICAgaWYgKGJsb2MgPT0gTklMX0JMT0MpCi0gICAgYWJvcnQgKCk7IC8qIEFscmVhZHkg ZnJlZWQ/IFBUUiBub3Qgb3JpZ2luYWxseSB1c2VkIHRvIGFsbG9jYXRlPyAgKi8KKyAgICBl bWFjc19hYm9ydCAoKTsgLyogQWxyZWFkeSBmcmVlZD8gUFRSIG5vdCBvcmlnaW5hbGx5IHVz ZWQgdG8gYWxsb2NhdGU/ICAqLwogCiAgIGlmIChzaXplIDwgYmxvYy0+c2l6ZSkKICAgICB7 CkBAIC0xMTUyLDcgKzExNTIsNyBAQAogICAgIH0KIAogICBpZiAoYmxvYyA9PSBOSUxfQkxP QyB8fCBibG9jLT52YXJpYWJsZSAhPSBvbGQpCi0gICAgYWJvcnQgKCk7IC8qIEFscmVhZHkg ZnJlZWQ/IE9MRCBub3Qgb3JpZ2luYWxseSB1c2VkIHRvIGFsbG9jYXRlPyAgKi8KKyAgICBl bWFjc19hYm9ydCAoKTsgLyogQWxyZWFkeSBmcmVlZD8gT0xEIG5vdCBvcmlnaW5hbGx5IHVz ZWQgdG8gYWxsb2NhdGU/ICAqLwogCiAgIC8qIFVwZGF0ZSB2YXJpYWJsZSB0byBwb2ludCB0 byB0aGUgbmV3IGxvY2F0aW9uLiAgKi8KICAgYmxvYy0+dmFyaWFibGUgPSBuZXc7CkBAIC0x MTkzLDcgKzExOTMsNyBAQAogICBmaXJzdF9oZWFwLT5zdGFydCA9IGZpcnN0X2hlYXAtPmJs b2Nfc3RhcnQKICAgICA9IHZpcnR1YWxfYnJlYWtfdmFsdWUgPSBicmVha192YWx1ZSA9ICgq cmVhbF9tb3JlY29yZSkgKDApOwogICBpZiAoYnJlYWtfdmFsdWUgPT0gTklMKQotICAgIGFi b3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIGV4dHJhX2J5dGVzID0gUk9VTkRV UCAoNTAwMDApOwogI2VuZGlmCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3JlZ2lvbi1jYWNo ZS5jJwotLS0gc3JjL3JlZ2lvbi1jYWNoZS5jCTIwMTItMDgtMTUgMTY6MjE6NDEgKzAwMDAK KysrIHNyYy9yZWdpb24tY2FjaGUuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0x OTQsNyArMTk0LDcgQEAKICAgaWYgKEJPVU5EQVJZX1BPUyAoYywgbG93KSA+IHBvcwogICAg ICAgfHwgKGxvdyArIDEgPCBjLT5jYWNoZV9sZW4KICAgICAgICAgICAmJiBCT1VOREFSWV9Q T1MgKGMsIGxvdyArIDEpIDw9IHBvcykpCi0gICAgICBhYm9ydCAoKTsKKyAgICAgIGVtYWNz X2Fib3J0ICgpOwogCiAgIHJldHVybiBsb3c7CiB9CkBAIC0yMTcsMTIgKzIxNywxMiBAQAog CiAgIGlmIChwb3MgPCAwCiAgICAgICB8fCBwb3MgPiBjLT5jYWNoZV9sZW4pCi0gICAgYWJv cnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgLyogV2UgbXVzdG4ndCBldmVyIHRy eSB0byBwdXQgdGhlIGdhcCBiZWZvcmUgdGhlIGR1bW15IHN0YXJ0CiAgICAgIGJvdW5kYXJ5 LiAgVGhhdCBtdXN0IGFsd2F5cyBiZSBzdGFydC1yZWxhdGl2ZS4gICovCiAgIGlmIChwb3Mg PT0gMCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICAvKiBOZWVk IHdlIG1vdmUgdGhlIGdhcCByaWdodD8gICovCiAgIHdoaWxlIChnYXBfc3RhcnQgPCBwb3Mp CkBAIC0yOTEsMjQgKzI5MSwyNCBAQAogewogICAvKiBpIG11c3QgYmUgYSB2YWxpZCBjYWNo ZSBpbmRleC4gICovCiAgIGlmIChpIDwgMCB8fCBpID4gYy0+Y2FjaGVfbGVuKQotICAgIGFi b3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIC8qIFdlIG11c3QgbmV2ZXIgd2Fu dCB0byBpbnNlcnQgc29tZXRoaW5nIGJlZm9yZSB0aGUgZHVtbXkgZmlyc3QKICAgICAgYm91 bmRhcnkuICAqLwogICBpZiAoaSA9PSAwKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fi b3J0ICgpOwogCiAgIC8qIFdlIG11c3Qgb25seSBiZSBpbnNlcnRpbmcgdGhpbmdzIGluIG9y ZGVyLiAgKi8KICAgaWYgKCEgKEJPVU5EQVJZX1BPUyAoYywgaSAtIDEpIDwgcG9zCiAgICAg ICAgICAmJiAoaSA9PSBjLT5jYWNoZV9sZW4KICAgICAgICAgICAgICB8fCBwb3MgPCBCT1VO REFSWV9QT1MgKGMsIGkpKSkpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7 CiAKICAgLyogVGhlIHZhbHVlIG11c3QgYmUgZGlmZmVyZW50IGZyb20gdGhlIG9uZXMgYXJv dW5kIGl0LiAgSG93ZXZlciwgd2UKICAgICAgdGVtcG9yYXJpbHkgY3JlYXRlIGJvdW5kYXJp ZXMgdGhhdCBlc3RhYmxpc2ggdGhlIHNhbWUgdmFsdWUgYXMKICAgICAgdGhlIHN1YnNlcXVl bnQgYm91bmRhcnksIHNvIHdlJ3JlIG5vdCBnb2luZyB0byBmbGFnIHRoYXQgY2FzZS4gICov CiAgIGlmIChCT1VOREFSWV9WQUxVRSAoYywgaSAtIDEpID09IHZhbHVlKQotICAgIGFib3J0 ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIG1vdmVfY2FjaGVfZ2FwIChjLCBpLCAx KTsKIApAQCAtMzMxLDE2ICszMzEsMTYgQEAKICAgLyogR290dGEgYmUgaW4gcmFuZ2UuICAq LwogICBpZiAoc3RhcnQgPCAwCiAgICAgICB8fCBlbmQgPiBjLT5jYWNoZV9sZW4pCi0gICAg YWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgLyogR290dGEgYmUgaW4gb3Jk ZXIuICAqLwogICBpZiAoc3RhcnQgPiBlbmQpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3Nf YWJvcnQgKCk7CiAKICAgLyogQ2FuJ3QgZGVsZXRlIHRoZSBkdW1teSBlbnRyeS4gICovCiAg IGlmIChzdGFydCA9PSAwCiAgICAgICAmJiBlbmQgPj0gMSkKLSAgICBhYm9ydCAoKTsKKyAg ICBlbWFjc19hYm9ydCAoKTsKIAogICAvKiBNaW5pbWl6ZSBnYXAgbW90aW9uLiAgSWYgd2Un cmUgZGVsZXRpbmcgbm90aGluZywgZG8gbm90aGluZy4gICovCiAgIGlmIChsZW4gPT0gMCkK QEAgLTM4MCwxMCArMzgwLDEwIEBACiAJCSAgcHRyZGlmZl90IHN0YXJ0LCBwdHJkaWZmX3Qg ZW5kLCBpbnQgdmFsdWUpCiB7CiAgIGlmIChzdGFydCA+IGVuZCkKLSAgICBhYm9ydCAoKTsK KyAgICBlbWFjc19hYm9ydCAoKTsKICAgaWYgKHN0YXJ0IDwgYy0+YnVmZmVyX2JlZwogICAg ICAgfHwgZW5kICAgPiBjLT5idWZmZXJfZW5kKQotICAgIGFib3J0ICgpOworICAgIGVtYWNz X2Fib3J0ICgpOwogCiAgIC8qIEVsaW1pbmF0ZSB0aGlzIGNhc2U7IHRoZW4gd2UgY2FuIGFz c3VtZSB0aGF0IHN0YXJ0IGFuZCBlbmQtMSBhcmUKICAgICAgYm90aCB0aGUgbG9jYXRpb25z IG9mIHJlYWwgY2hhcmFjdGVycyBpbiB0aGUgYnVmZmVyLiAgKi8KCj09PSBtb2RpZmllZCBm aWxlICdzcmMvc2Nyb2xsLmMnCi0tLSBzcmMvc2Nyb2xsLmMJMjAxMi0wNy0wNSAxODozNTo0 OCArMDAwMAorKysgc3JjL3Njcm9sbC5jCTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAg LTE5NSwxMyArMTk1LDEzIEBACiAJICB7CiAJICAgIGNvc3QgPSBwMS0+d3JpdGVjb3N0ICsg Zmlyc3RfaW5zZXJ0X2Nvc3RbaV07CiAJICAgIGlmICgoaW50KSBwMS0+aW5zZXJ0Y291bnQg PiBpKQotCSAgICAgIGFib3J0ICgpOworCSAgICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgICBj b3N0MSA9IHAxLT5pbnNlcnRjb3N0ICsgbmV4dF9pbnNlcnRfY29zdFtpIC0gcDEtPmluc2Vy dGNvdW50XTsKIAkgIH0KIAlwLT5pbnNlcnRjb3N0ID0gbWluIChjb3N0LCBjb3N0MSkgKyBk cmF3X2Nvc3RbaV0gKyBleHRyYV9jb3N0OwogCXAtPmluc2VydGNvdW50ID0gKGNvc3QgPCBj b3N0MSkgPyAxIDogcDEtPmluc2VydGNvdW50ICsgMTsKIAlpZiAoKGludCkgcC0+aW5zZXJ0 Y291bnQgPiBpKQotCSAgYWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKIAogCS8qIENh bGN1bGF0ZSB0aGUgY29zdCBpZiB3ZSBkbyBhIGRlbGV0ZSBsaW5lIGFmdGVyCiAJICAgb3V0 cHV0dGluZyB0aGlzIGxpbmUuCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3NlYXJjaC5jJwot LS0gc3JjL3NlYXJjaC5jCTIwMTItMDgtMTcgMTc6MDg6MzAgKzAwMDAKKysrIHNyYy9zZWFy Y2guYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xMDA5LDcgKzEwMDksNyBAQAog ICAgICAgaWYgKCFFUSAobm9lcnJvciwgUXQpKQogCXsKIAkgIGlmIChsaW0gPCBCRUdWIHx8 IGxpbSA+IFpWKQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAJICBT RVRfUFRfQk9USCAobGltLCBsaW1fYnl0ZSk7CiAJICByZXR1cm4gUW5pbDsKICNpZiAwIC8q IFRoaXMgd291bGQgYmUgY2xlYW4sIGJ1dCBtYXliZSBwcm9ncmFtcyBkZXBlbmQgb24KQEAg LTEwMjIsNyArMTAyMiw3IEBACiAgICAgfQogCiAgIGlmIChucCA8IEJFR1YgfHwgbnAgPiBa VikKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBTRVRfUFQgKG5w KTsKIApAQCAtMjc3MCw3ICsyNzcwLDcgQEAKIAkgICAgfQogCSAgZWxzZQogCSAgICAvKiBs YXN0X3RoaW5nX3NlYXJjaGVkIG11c3QgYWx3YXlzIGJlIFF0LCBhIGJ1ZmZlciwgb3IgUW5p bC4gICovCi0JICAgIGFib3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAoKTsKIAogCSAgbGVu ID0gMiAqIGkgKyAyOwogCX0KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvc291bmQuYycKLS0t IHNyYy9zb3VuZC5jCTIwMTItMDctMjkgMDg6MTg6MjkgKzAwMDAKKysrIHNyYy9zb3VuZC5j CTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTg0Myw3ICs4NDMsNyBAQAogCX0KICAg ICB9CiAgIGVsc2UKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIH0KIAog CkBAIC0xMTM4LDcgKzExMzgsNyBAQAogCX0KICAgICB9CiAgIGVsc2UKLSAgICBhYm9ydCAo KTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIH0KIAogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Jj L3N5c2RlcC5jJwotLS0gc3JjL3N5c2RlcC5jCTIwMTItMDgtMTggMDI6NDk6MjQgKzAwMDAK KysrIHNyYy9zeXNkZXAuYwkyMDEyLTA4LTMxIDAzOjA2OjEzICswMDAwCkBAIC0xODM4LDYg KzE4MzgsMTUgQEAKIH0KICNlbmRpZgogDAorI2lmbmRlZiBIQVZFX05UR1VJCisvKiBVc2lu ZyBlbWFjc19hYm9ydCBsZXRzIEdEQiByZXR1cm4gZnJvbSBhIGJyZWFrcG9pbnQgaGVyZS4g ICovCit2b2lkCitlbWFjc19hYm9ydCAodm9pZCkKK3sKKyAgKGFib3J0KSAoKTsKK30KKyNl bmRpZgorCiBpbnQKIGVtYWNzX29wZW4gKGNvbnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZywg aW50IG1vZGUpCiB7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3Rlcm0uYycKLS0tIHNyYy90 ZXJtLmMJMjAxMi0wOC0zMSAxMDo1MzoxOSArMDAwMAorKysgc3JjL3Rlcm0uYwkyMDEyLTA4 LTMxIDE2OjIxOjU2ICswMDAwCkBAIC0xNDk4LDcgKzE0OTgsNyBAQAogCXsKIAkgIGdseXBo LT5yZXNvbHZlZF9sZXZlbCA9IGl0LT5iaWRpX2l0LnJlc29sdmVkX2xldmVsOwogCSAgaWYg KChpdC0+YmlkaV9pdC50eXBlICYgNykgIT0gaXQtPmJpZGlfaXQudHlwZSkKLQkgICAgYWJv cnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgZ2x5cGgtPmJpZGlfdHlwZSA9IGl0 LT5iaWRpX2l0LnR5cGU7CiAJfQogICAgICAgZWxzZQpAQCAtMTY5NSw3ICsxNjk1LDcgQEAK IAl7CiAJICBnbHlwaC0+cmVzb2x2ZWRfbGV2ZWwgPSBpdC0+YmlkaV9pdC5yZXNvbHZlZF9s ZXZlbDsKIAkgIGlmICgoaXQtPmJpZGlfaXQudHlwZSAmIDcpICE9IGl0LT5iaWRpX2l0LnR5 cGUpCi0JICAgIGFib3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAoKTsKIAkgIGdseXBoLT5i aWRpX3R5cGUgPSBpdC0+YmlkaV9pdC50eXBlOwogCX0KICAgICAgIGVsc2UKQEAgLTE3ODAs NyArMTc4MCw3IEBACiAgICAgewogICAgICAgZ2x5cGgtPnJlc29sdmVkX2xldmVsID0gaXQt PmJpZGlfaXQucmVzb2x2ZWRfbGV2ZWw7CiAgICAgICBpZiAoKGl0LT5iaWRpX2l0LnR5cGUg JiA3KSAhPSBpdC0+YmlkaV9pdC50eXBlKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgp OwogICAgICAgZ2x5cGgtPmJpZGlfdHlwZSA9IGl0LT5iaWRpX2l0LnR5cGU7CiAgICAgfQog ICBlbHNlCkBAIC0yMjUwLDcgKzIyNTAsNyBAQAogICBzdHJ1Y3QgdGVybWluYWwgKnQ7CiAK ICAgaWYgKCFuYW1lKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAg IGZvciAodCA9IHRlcm1pbmFsX2xpc3Q7IHQ7IHQgPSB0LT5uZXh0X3Rlcm1pbmFsKQogICAg IHsKQEAgLTI3OTgsNyArMjc5OCw3IEBACiAgIHN0cnVjdCB0dHlfb3V0cHV0ICp0ID0geHph bGxvYyAoc2l6ZW9mICp0KTsKIAogICBpZiAoISBGUkFNRV9URVJNQ0FQX1AgKGYpKQotICAg IGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIHQtPmRpc3BsYXlfaW5mbyA9 IEZSQU1FX1RFUk1JTkFMIChmKS0+ZGlzcGxheV9pbmZvLnR0eTsKIApAQCAtMjgxMSw3ICsy ODExLDcgQEAKIHR0eV9mcmVlX2ZyYW1lX3Jlc291cmNlcyAoc3RydWN0IGZyYW1lICpmKQog ewogICBpZiAoISBGUkFNRV9URVJNQ0FQX1AgKGYpKQotICAgIGFib3J0ICgpOworICAgIGVt YWNzX2Fib3J0ICgpOwogCiAgIGlmIChGUkFNRV9GQUNFX0NBQ0hFIChmKSkKICAgICBmcmVl X2ZyYW1lX2ZhY2VzIChmKTsKQEAgLTI4MjcsNyArMjgyNyw3IEBACiB0dHlfZnJlZV9mcmFt ZV9yZXNvdXJjZXMgKHN0cnVjdCBmcmFtZSAqZikKIHsKICAgaWYgKCEgRlJBTUVfVEVSTUNB UF9QIChmKSAmJiAhIEZSQU1FX01TRE9TX1AgKGYpKQotICAgIGFib3J0ICgpOworICAgIGVt YWNzX2Fib3J0ICgpOwogCiAgIGlmIChGUkFNRV9GQUNFX0NBQ0hFIChmKSkKICAgICBmcmVl X2ZyYW1lX2ZhY2VzIChmKTsKQEAgLTMxMDgsNyArMzEwOCw3IEBACiAKICNpZm5kZWYgVEVS TUlORk8KICAgaWYgKHN0cmxlbiAodHR5LT50ZXJtY2FwX3Rlcm1fYnVmZmVyKSA+PSBidWZm ZXJfc2l6ZSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKICAgYnVmZmVy X3NpemUgPSBzdHJsZW4gKHR0eS0+dGVybWNhcF90ZXJtX2J1ZmZlcik7CiAjZW5kaWYKICAg dHR5LT50ZXJtY2FwX3N0cmluZ3NfYnVmZmVyID0gYXJlYSA9IHhtYWxsb2MgKGJ1ZmZlcl9z aXplKTsKQEAgLTM0NjcsNyArMzQ2Nyw3IEBACiAgICAgdmVycm9yIChzdHIxLCBhcCk7CiAK ICAgdmFfZW5kIChhcCk7Ci0gIGFib3J0ICgpOworICBlbWFjc19hYm9ydCAoKTsKIH0KIAog dm9pZApAQCAtMzQ5NCw3ICszNDk0LDcgQEAKICAgICByZXR1cm47CiAKICAgaWYgKHRlcm1p bmFsLT50eXBlICE9IG91dHB1dF90ZXJtY2FwKQotICAgIGFib3J0ICgpOworICAgIGVtYWNz X2Fib3J0ICgpOwogCiAgIHR0eSA9IHRlcm1pbmFsLT5kaXNwbGF5X2luZm8udHR5OwogCkBA IC0zNTA4LDcgKzM1MDgsNyBAQAogCiAgICAgICBpZiAoISBwKQogICAgICAgICAvKiBUaGlz IHNob3VsZCBub3QgaGFwcGVuLiAqLwotICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgZW1h Y3NfYWJvcnQgKCk7CiAKICAgICAgIHAtPm5leHQgPSB0dHktPm5leHQ7CiAgICAgICB0dHkt Pm5leHQgPSAwOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy90ZXJtY2hhci5oJwotLS0gc3Jj L3Rlcm1jaGFyLmgJMjAxMi0wNi0wOSAxNjo0NDo0NCArMDAwMAorKysgc3JjL3Rlcm1jaGFy LmgJMjAxMi0wOC0zMSAxNjoyMDozMCArMDAwMApAQCAtMjA3LDYgKzIwNyw2IEBACiAgICgo KGYpLT5vdXRwdXRfbWV0aG9kID09IG91dHB1dF90ZXJtY2FwCVwKICAgICB8fCAoZiktPm91 dHB1dF9tZXRob2QgPT0gb3V0cHV0X21zZG9zX3JhdykJXAogICAgPyAoZiktPnRlcm1pbmFs LT5kaXNwbGF5X2luZm8udHR5ICAgICAgICAgICAgXAotICAgOiAoYWJvcnQgKCksIChzdHJ1 Y3QgdHR5X2Rpc3BsYXlfaW5mbyAqKSAwKSkKKyAgIDogKGVtYWNzX2Fib3J0ICgpLCAoc3Ry dWN0IHR0eV9kaXNwbGF5X2luZm8gKikgMCkpCiAKICNkZWZpbmUgQ1VSVFRZKCkgRlJBTUVf VFRZIChTRUxFQ1RFRF9GUkFNRSgpKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy90ZXJtaW5h bC5jJwotLS0gc3JjL3Rlcm1pbmFsLmMJMjAxMi0wOC0xOCAwMDowNzo1MiArMDAwMAorKysg c3JjL3Rlcm1pbmFsLmMJMjAxMi0wOC0zMSAxNjoyMDozMCArMDAwMApAQCAtMjk0LDcgKzI5 NCw3IEBACiAKICAgZm9yICh0cCA9ICZ0ZXJtaW5hbF9saXN0OyAqdHAgIT0gdGVybWluYWw7 IHRwID0gJigqdHApLT5uZXh0X3Rlcm1pbmFsKQogICAgIGlmICghICp0cCkKLSAgICAgIGFi b3J0ICgpOworICAgICAgZW1hY3NfYWJvcnQgKCk7CiAgICp0cCA9IHRlcm1pbmFsLT5uZXh0 X3Rlcm1pbmFsOwogCiAgIHhmcmVlICh0ZXJtaW5hbC0+a2V5Ym9hcmRfY29kaW5nKTsKQEAg LTQxMSw3ICs0MTEsNyBAQAogICAgIGNhc2Ugb3V0cHV0X25zOgogICAgICAgcmV0dXJuIFFu czsKICAgICBkZWZhdWx0OgotICAgICAgYWJvcnQgKCk7CisgICAgICBlbWFjc19hYm9ydCAo KTsKICAgICB9CiB9CiAKQEAgLTUxOSw3ICs1MTksNyBAQAogaW5pdF9pbml0aWFsX3Rlcm1p bmFsICh2b2lkKQogewogICBpZiAoaW5pdGlhbGl6ZWQgfHwgdGVybWluYWxfbGlzdCB8fCB0 dHlfbGlzdCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBpbml0 aWFsX3Rlcm1pbmFsID0gY3JlYXRlX3Rlcm1pbmFsICgpOwogICBpbml0aWFsX3Rlcm1pbmFs LT50eXBlID0gb3V0cHV0X2luaXRpYWw7CkBAIC01MzgsNyArNTM4LDcgQEAKIGRlbGV0ZV9p bml0aWFsX3Rlcm1pbmFsIChzdHJ1Y3QgdGVybWluYWwgKnRlcm1pbmFsKQogewogICBpZiAo dGVybWluYWwgIT0gaW5pdGlhbF90ZXJtaW5hbCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFj c19hYm9ydCAoKTsKIAogICBkZWxldGVfdGVybWluYWwgKHRlcm1pbmFsKTsKICAgaW5pdGlh bF90ZXJtaW5hbCA9IE5VTEw7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3Rlcm1pbmZvLmMn Ci0tLSBzcmMvdGVybWluZm8uYwkyMDEyLTAxLTE5IDA3OjIxOjI1ICswMDAwCisrKyBzcmMv dGVybWluZm8uYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC00Niw3ICs0Niw3IEBA CiAKICAgLyogRW1hY3MgYWx3YXlzIHNob3VsZCBwYXNzIGEgbnVsbCBPVVRTVFJJTkcgYW5k IHplcm8gTEVOLiAgKi8KICAgaWYgKG91dHN0cmluZyB8fCBsZW4pCi0gICAgYWJvcnQgKCk7 CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgdGVtcCA9IHRwYXJtIChzdHJpbmcsIGFyZzEs IGFyZzIsIGFyZzMsIGFyZzQpOwogICByZXR1cm4geHN0cmR1cCAodGVtcCk7Cgo9PT0gbW9k aWZpZWQgZmlsZSAnc3JjL3RwYXJhbS5jJwotLS0gc3JjL3RwYXJhbS5jCTIwMTItMDctMDUg MDY6MzI6NDEgKzAwMDAKKysrIHNyYy90cGFyYW0uYwkyMDEyLTA4LTMxIDE2OjIwOjMwICsw MDAwCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkgICAgICBicmVhazsKIAogCSAgICBkZWZhdWx0 OgotCSAgICAgIGFib3J0ICgpOworCSAgICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgICB9CiAJ fQogICAgICAgZWxzZQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzIuYycKLS0tIHNyYy93 MzIuYwkyMDEyLTA4LTI2IDEwOjI5OjM3ICswMDAwCisrKyBzcmMvdzMyLmMJMjAxMi0wOC0z MSAxNjoyMDozMCArMDAwMApAQCAtMTI3Myw5ICsxMjczLDkgQEAKIAogICAvKiBFbnN1cmUg SE9NRSBhbmQgU0hFTEwgYXJlIGRlZmluZWQuICovCiAgIGlmIChnZXRlbnYgKCJIT01FIikg PT0gTlVMTCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKICAgaWYgKGdl dGVudiAoIlNIRUxMIikgPT0gTlVMTCkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9y dCAoKTsKIAogICAvKiBTZXQgZGlyIGFuZCBzaGVsbCBmcm9tIGVudmlyb25tZW50IHZhcmlh Ymxlcy4gKi8KICAgc3RyY3B5IChkZmx0X3Bhc3N3ZC5wd19kaXIsIGdldGVudiAoIkhPTUUi KSk7CkBAIC0xNzg4LDkgKzE3ODgsOSBAQAogICAgICAgY2hhciBtb2RuYW1lW01BWF9QQVRI XTsKIAogICAgICAgaWYgKCFHZXRNb2R1bGVGaWxlTmFtZSAoTlVMTCwgbW9kbmFtZSwgTUFY X1BBVEgpKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgICAgaWYgKChwID0g c3RycmNociAobW9kbmFtZSwgJ1xcJykpID09IE5VTEwpCi0JYWJvcnQgKCk7CisJZW1hY3Nf YWJvcnQgKCk7CiAgICAgICAqcCA9IDA7CiAKICAgICAgIGlmICgocCA9IHN0cnJjaHIgKG1v ZG5hbWUsICdcXCcpKSAmJiB4c3RyY2FzZWNtcCAocCwgIlxcYmluIikgPT0gMCkKQEAgLTE5 MDIsMTMgKzE5MDIsMTMgQEAKICAgLyogRklYTUU6IERvIHdlIG5lZWQgdG8gcmVzb2x2ZSBw b3NzaWJsZSBzeW1saW5rcyBpbiBzdGFydHVwX2Rpcj8KICAgICAgRG9lcyBpdCBtYXR0ZXIg YW55d2hlcmUgaW4gRW1hY3M/ICAqLwogICBpZiAoIUdldEN1cnJlbnREaXJlY3RvcnkgKE1B WFBBVEhMRU4sIHN0YXJ0dXBfZGlyKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9y dCAoKTsKIAogICB7CiAgICAgc3RhdGljIGNoYXIgbW9kbmFtZVtNQVhfUEFUSF07CiAKICAg ICBpZiAoIUdldE1vZHVsZUZpbGVOYW1lIChOVUxMLCBtb2RuYW1lLCBNQVhfUEFUSCkpCi0g ICAgICBhYm9ydCAoKTsKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwogICAgIGFyZ3ZbMF0gPSBt b2RuYW1lOwogICB9CiAKQEAgLTE5MzAsNyArMTkzMCw3IEBACiAKICAgcCA9IGdldGVudiAo ImVtYWNzX2RpciIpOwogICBpZiAocCA9PSBOVUxMKQotICAgIGFib3J0ICgpOworICAgIGVt YWNzX2Fib3J0ICgpOwogICBzdHJjcHkgKHJvb3RfZGlyLCBwKTsKICAgcm9vdF9kaXJbcGFy c2Vfcm9vdCAocm9vdF9kaXIsIE5VTEwpXSA9ICdcMCc7CiAgIGRvc3RvdW5peF9maWxlbmFt ZSAocm9vdF9kaXIpOwpAQCAtMzI4Nyw3ICszMjg3LDcgQEAKICAgICAgZG9lc24ndCByZXNv bHZlIGFsaWFzaW5nIGR1ZSB0byBzdWJzdCBjb21tYW5kcywgb3IgcmVjb2duaXplIGhhcmQK ICAgICAgbGlua3MuICAqLwogICBpZiAoIXczMl9nZXRfbG9uZ19maWxlbmFtZSAoKGNoYXIg KiluYW1lLCBmdWxsbmFtZSwgTUFYX1BBVEgpKQotICAgIGFib3J0ICgpOworICAgIGVtYWNz X2Fib3J0ICgpOwogCiAgIHBhcnNlX3Jvb3QgKGZ1bGxuYW1lLCAmcCk7CiAgIC8qIE5vcm1h bCBXMzIgZmlsZXN5c3RlbXMgYXJlIHN0aWxsIGNhc2UgaW5zZW5zaXRpdmUuICovCkBAIC01 NTg3LDcgKzU1ODcsNyBAQAogCSAgaWYgKGZkX2luZm9bIGZkIF0uY3AgIT0gTlVMTCkKIAkg ICAgewogCSAgICAgIERlYlByaW50ICgoInN5c19zb2NrZXQ6IGZkX2luZm9bJWRdIGFwcGFy ZW50bHkgaW4gdXNlIVxuIiwgZmQpKTsKLQkgICAgICBhYm9ydCAoKTsKKwkgICAgICBlbWFj c19hYm9ydCAoKTsKIAkgICAgfQogCiAJICBmZF9pbmZvWyBmZCBdLmNwID0gY3A7CkBAIC01 OTY2LDcgKzU5NjYsNyBAQAogCSAgICB7CiAJICAgICAgaWYgKGZkX2luZm9bZmRdLmZsYWdz ICYgRklMRV9TT0NLRVQpCiAJCXsKLQkJICBpZiAod2luc29ja19saWIgPT0gTlVMTCkgYWJv cnQgKCk7CisJCSAgaWYgKHdpbnNvY2tfbGliID09IE5VTEwpIGVtYWNzX2Fib3J0ICgpOwog CiAJCSAgcGZuX3NodXRkb3duIChTT0NLX0hBTkRMRSAoZmQpLCAyKTsKIAkJICByYyA9IHBm bl9jbG9zZXNvY2tldCAoU09DS19IQU5ETEUgKGZkKSk7CkBAIC02MDg0LDcgKzYwODQsNyBA QAogICAgICAgfHwgKGZkX2luZm9bZmRdLmZsYWdzICYgRklMRV9SRUFEKSA9PSAwKQogICAg IHsKICAgICAgIERlYlByaW50ICgoIl9zeXNfcmVhZF9haGVhZDogaW50ZXJuYWwgZXJyb3I6 IGZkICVkIGlzIG5vdCBhIHBpcGUsIHNlcmlhbCBwb3J0LCBvciBzb2NrZXQhXG4iLCBmZCkp OwotICAgICAgYWJvcnQgKCk7CisgICAgICBlbWFjc19hYm9ydCAoKTsKICAgICB9CiAKICAg Y3AtPnN0YXR1cyA9IFNUQVRVU19SRUFEX0lOX1BST0dSRVNTOwpAQCAtNjIyMCw3ICs2MjIw LDcgQEAKICAgICAgIC8qIHJlLXJlYWQgQ1IgY2FycmllZCBvdmVyIGZyb20gbGFzdCByZWFk ICovCiAgICAgICBpZiAoZmRfaW5mb1tmZF0uZmxhZ3MgJiBGSUxFX0xBU1RfQ1IpCiAJewot CSAgaWYgKGZkX2luZm9bZmRdLmZsYWdzICYgRklMRV9CSU5BUlkpIGFib3J0ICgpOworCSAg aWYgKGZkX2luZm9bZmRdLmZsYWdzICYgRklMRV9CSU5BUlkpIGVtYWNzX2Fib3J0ICgpOwog CSAgKmJ1ZmZlcisrID0gMHgwZDsKIAkgIGNvdW50LS07CiAJICBuY2hhcnMrKzsKQEAgLTYz MjMsNyArNjMyMyw3IEBACiAJICAgIH0KIAkgIGVsc2UgLyogRklMRV9TT0NLRVQgKi8KIAkg ICAgewotCSAgICAgIGlmICh3aW5zb2NrX2xpYiA9PSBOVUxMKSBhYm9ydCAoKTsKKwkgICAg ICBpZiAod2luc29ja19saWIgPT0gTlVMTCkgZW1hY3NfYWJvcnQgKCk7CiAKIAkgICAgICAv KiBkbyB0aGUgZXF1aXZhbGVudCBvZiBhIG5vbi1ibG9ja2luZyByZWFkICovCiAJICAgICAg cGZuX2lvY3Rsc29ja2V0IChTT0NLX0hBTkRMRSAoZmQpLCBGSU9OUkVBRCwgJndhaXRpbmcp OwpAQCAtNjQ3NCw3ICs2NDc0LDcgQEAKICAgZWxzZSBpZiAoZmQgPCBNQVhERVNDICYmIGZk X2luZm9bZmRdLmZsYWdzICYgRklMRV9TT0NLRVQpCiAgICAgewogICAgICAgdW5zaWduZWQg bG9uZyBuYmxvY2sgPSAwOwotICAgICAgaWYgKHdpbnNvY2tfbGliID09IE5VTEwpIGFib3J0 ICgpOworICAgICAgaWYgKHdpbnNvY2tfbGliID09IE5VTEwpIGVtYWNzX2Fib3J0ICgpOwog CiAgICAgICAvKiBUT0RPOiBpbXBsZW1lbnQgc2VsZWN0KCkgcHJvcGVybHkgc28gbm9uLWJs b2NraW5nIEkvTyB3b3Jrcy4gKi8KICAgICAgIC8qIEZvciBub3csIG1ha2Ugc3VyZSB0aGUg d3JpdGUgYmxvY2tzLiAgKi8KQEAgLTY2NDAsOCArNjY0MCw3IEBACiAJCSAgICAgIGJ1ZmZl ciwKIAkJICAgICAgIkVtYWNzIEFib3J0IERpYWxvZyIsCiAJCSAgICAgIE1CX09LIHwgTUJf SUNPTkVYQ0xBTUFUSU9OIHwgTUJfVEFTS01PREFMKTsKLSAgICAgIC8qIFVzZSB0aGUgbG93 LWxldmVsIEVtYWNzIGFib3J0LiAqLwotI3VuZGVmIGFib3J0CisJICAvKiBVc2UgdGhlIGxv dy1sZXZlbCBzeXN0ZW0gYWJvcnQuICovCiAJICBhYm9ydCAoKTsKIAl9CiAgICAgICBlbHNl Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3czMmZucy5jJwotLS0gc3JjL3czMmZucy5jCTIw MTItMDgtMTggMDY6MDY6MzkgKzAwMDAKKysrIHNyYy93MzJmbnMuYwkyMDEyLTA4LTMxIDE2 OjIwOjMwICswMDAwCkBAIC0yMjgwLDcgKzIyODAsNyBAQAogICAgICAgICAgICAgICBDb0lu aXRpYWxpemUgKE5VTEwpOwogCSAgICAgIHczMl9jcmVhdGV3aW5kb3cgKChzdHJ1Y3QgZnJh bWUgKikgbXNnLndQYXJhbSk7CiAJICAgICAgaWYgKCFQb3N0VGhyZWFkTWVzc2FnZSAoZHdN YWluVGhyZWFkSWQsIFdNX0VNQUNTX0RPTkUsIDAsIDApKQotCQlhYm9ydCAoKTsKKwkJZW1h Y3NfYWJvcnQgKCk7CiAJICAgICAgYnJlYWs7CiAJICAgIGNhc2UgV01fRU1BQ1NfU0VUTE9D QUxFOgogCSAgICAgIFNldFRocmVhZExvY2FsZSAobXNnLndQYXJhbSk7CkBAIC0yMjkwLDcg KzIyOTAsNyBAQAogCSAgICAgIHJlc3VsdCA9IChpbnQpIEFjdGl2YXRlS2V5Ym9hcmRMYXlv dXQgKChIS0wpIG1zZy53UGFyYW0sIDApOwogCSAgICAgIGlmICghUG9zdFRocmVhZE1lc3Nh Z2UgKGR3TWFpblRocmVhZElkLCBXTV9FTUFDU19ET05FLAogCQkJCSAgICAgIHJlc3VsdCwg MCkpCi0JCWFib3J0ICgpOworCQllbWFjc19hYm9ydCAoKTsKIAkgICAgICBicmVhazsKIAkg ICAgY2FzZSBXTV9FTUFDU19SRUdJU1RFUl9IT1RfS0VZOgogCSAgICAgIGZvY3VzX3dpbmRv dyA9IEdldEZvY3VzICgpOwpAQCAtMjMxMSw3ICsyMzExLDcgQEAKICAgICAgICAgICAgICAg ICAgR0MuICAqLwogCSAgICAgIFhTRVRDQVIgKChMaXNwX09iamVjdCkgKChFTUFDU19JTlQp IG1zZy5sUGFyYW0pLCBRbmlsKTsKIAkgICAgICBpZiAoIVBvc3RUaHJlYWRNZXNzYWdlIChk d01haW5UaHJlYWRJZCwgV01fRU1BQ1NfRE9ORSwgMCwgMCkpCi0JCWFib3J0ICgpOworCQll bWFjc19hYm9ydCAoKTsKIAkgICAgICBicmVhazsKIAkgICAgY2FzZSBXTV9FTUFDU19UT0dH TEVfTE9DS19LRVk6CiAJICAgICAgewpAQCAtMjM0Myw3ICsyMzQzLDcgQEAKIAkJICB9CiAJ CWlmICghUG9zdFRocmVhZE1lc3NhZ2UgKGR3TWFpblRocmVhZElkLCBXTV9FTUFDU19ET05F LAogCQkJCQljdXJfc3RhdGUsIDApKQotCQkgIGFib3J0ICgpOworCQkgIGVtYWNzX2Fib3J0 ICgpOwogCSAgICAgIH0KIAkgICAgICBicmVhazsKICNpZmRlZiBNU0dfREVCVUcKQEAgLTIz OTgsMTEgKzIzOTgsMTEgQEAKIHsKICAgLyogT25seSBpbnB1dCB0aHJlYWQgY2FuIHNlbmQg ZGVmZXJyZWQgbWVzc2FnZXMuICAqLwogICBpZiAoR2V0Q3VycmVudFRocmVhZElkICgpICE9 IGR3V2luZG93c1RocmVhZElkKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgp OwogCiAgIC8qIEl0IGlzIGFuIGVycm9yIHRvIHNlbmQgYSBtZXNzYWdlIHRoYXQgaXMgYWxy ZWFkeSBkZWZlcnJlZC4gICovCiAgIGlmIChmaW5kX2RlZmVycmVkX21zZyAoaHduZCwgbXNn KSAhPSBOVUxMKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIC8q IEVuZm9yY2VkIHN5bmNocm9uaXphdGlvbiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdGhpcyBp cyB0aGUgb25seQogICAgICBmdW5jdGlvbiB0aGF0IGFsdGVycyBkZWZlcnJlZF9tc2dfaGVh ZCwgYW5kIHRoZSBmb2xsb3dpbmcgY3JpdGljYWwKQEAgLTI0NzUsNyArMjQ3NSw3IEBACiAg IFBlZWtNZXNzYWdlICgmbXNnLCBOVUxMLCAwLCAwLCBQTV9OT1JFTU9WRSk7CiAKICAgaWYg KCFQb3N0VGhyZWFkTWVzc2FnZSAoZHdNYWluVGhyZWFkSWQsIFdNX0VNQUNTX0RPTkUsIDAs IDApKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIG1lbXNldCAo JmR1bW15X2J1ZiwgMCwgc2l6ZW9mIChkdW1teV9idWYpKTsKICAgZHVtbXlfYnVmLnczMm1z Zy5tc2cuaHduZCA9IE5VTEw7CkBAIC0zMTM2LDcgKzMxMzYsNyBAQAogCQltc2cgPSBXTV9N QlVUVE9OVVA7CiAJCWJ1dHRvbl9zdGF0ZSAmPSB+TU1PVVNFOwogCi0JCWlmIChidXR0b25f c3RhdGUpIGFib3J0ICgpOworCQlpZiAoYnV0dG9uX3N0YXRlKSBlbWFjc19hYm9ydCAoKTsK IAkgICAgICB9CiAJICAgIGVsc2UKIAkgICAgICByZXR1cm4gMDsKQEAgLTMzNjcsNyArMzM2 Nyw3IEBACiAJLyogRGV0ZWN0IGlmIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiBkZWZlcnJl ZDsgaW4gdGhpcyBjYXNlCiAJICAgd2UgY2Fubm90IHJldHVybiBhbnkgc2Vuc2libGUgdmFs dWUgdG8gaWdub3JlIHRoaXMuICAqLwogCWlmIChmaW5kX2RlZmVycmVkX21zZyAoaHduZCwg bXNnKSAhPSBOVUxMKQotCSAgYWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKIAogICAg ICAgICBtZW51YmFyX2luX3VzZSA9IDE7CiAKQEAgLTM4NDIsNyArMzg0Miw3IEBACiAgIE1T RyBtc2c7CiAKICAgaWYgKCFQb3N0VGhyZWFkTWVzc2FnZSAoZHdXaW5kb3dzVGhyZWFkSWQs IFdNX0VNQUNTX0NSRUFURVdJTkRPVywgKFdQQVJBTSlmLCAwKSkKLSAgICBhYm9ydCAoKTsK KyAgICBlbWFjc19hYm9ydCAoKTsKICAgR2V0TWVzc2FnZSAoJm1zZywgTlVMTCwgV01fRU1B Q1NfRE9ORSwgV01fRU1BQ1NfRE9ORSk7CiB9CiAKQEAgLTYyODcsNyArNjI4Nyw3IEBACiAg ICAgICBsaXNwX21vZGlmaWVycyA9IFhJTlQgKEZjYXIgKEZjZHIgKGMpKSk7CiAgICAgICBj ID0gRmNhciAoYyk7CiAgICAgICBpZiAoIVNZTUJPTFAgKGMpKQotCWFib3J0ICgpOworCWVt YWNzX2Fib3J0ICgpOwogICAgICAgdmtfY29kZSA9IGxvb2t1cF92a19jb2RlIChTREFUQSAo U1lNQk9MX05BTUUgKGMpKSk7CiAgICAgfQogICBlbHNlIGlmIChJTlRFR0VSUCAoYykpCkBA IC03MTk0LDEwICs3MTk0LDggQEAKICAgc3ltc19vZl93MzJ1bmlzY3JpYmUgKCk7CiB9CiAK LSN1bmRlZiBhYm9ydAotCiB2b2lkCi13MzJfYWJvcnQgKHZvaWQpCitlbWFjc19hYm9ydCAo dm9pZCkKIHsKICAgaW50IGJ1dHRvbjsKICAgYnV0dG9uID0gTWVzc2FnZUJveCAoTlVMTCwK Cj09PSBtb2RpZmllZCBmaWxlICdzcmMvdzMybWVudS5jJwotLS0gc3JjL3czMm1lbnUuYwky MDEyLTA4LTI4IDE2OjAxOjU5ICswMDAwCisrKyBzcmMvdzMybWVudS5jCTIwMTItMDgtMzEg MTY6MjA6MzAgKzAwMDAKQEAgLTgyMCw3ICs4MjAsNyBAQAogCSAgZWxzZSBpZiAoRVEgKHR5 cGUsIFFDcmFkaW8pKQogCSAgICB3di0+YnV0dG9uX3R5cGUgPSBCVVRUT05fVFlQRV9SQURJ TzsKIAkgIGVsc2UKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCiAJ ICB3di0+c2VsZWN0ZWQgPSAhTklMUCAoc2VsZWN0ZWQpOwogCgo9PT0gbW9kaWZpZWQgZmls ZSAnc3JjL3czMnByb2MuYycKLS0tIHNyYy93MzJwcm9jLmMJMjAxMi0wOC0wMiAwNDoxNDo0 OCArMDAwMAorKysgc3JjL3czMnByb2MuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBA IC0xNzYsNyArMTc2LDcgQEAKICAgLyogU2hvdWxkIG5vdCBiZSBkZWxldGluZyBhIGNoaWxk IHRoYXQgaXMgc3RpbGwgbmVlZGVkLiAqLwogICBmb3IgKGkgPSAwOyBpIDwgTUFYREVTQzsg aSsrKQogICAgIGlmIChmZF9pbmZvW2ldLmNwID09IGNwKQotICAgICAgYWJvcnQgKCk7Cisg ICAgICBlbWFjc19hYm9ydCAoKTsKIAogICBpZiAoIUNISUxEX0FDVElWRSAoY3ApKQogICAg IHJldHVybjsKQEAgLTMxNiw3ICszMTYsNyBAQAogICBEV09SRCBmbGFnczsKICAgY2hhciBk aXJbIE1BWFBBVEhMRU4gXTsKIAotICBpZiAoY3AgPT0gTlVMTCkgYWJvcnQgKCk7CisgIGlm IChjcCA9PSBOVUxMKSBlbWFjc19hYm9ydCAoKTsKIAogICBtZW1zZXQgKCZzdGFydCwgMCwg c2l6ZW9mIChzdGFydCkpOwogICBzdGFydC5jYiA9IHNpemVvZiAoc3RhcnQpOwpAQCAtNDA1 LDcgKzQwNSw3IEBACiAgIGlmIChmZF9pbmZvW2ZkXS5jcCAhPSBOVUxMKQogICAgIHsKICAg ICAgIERlYlByaW50ICgoInJlZ2lzdGVyX2NoaWxkOiBmZF9pbmZvWyVkXSBhcHBhcmVudGx5 IGluIHVzZSFcbiIsIGZkKSk7Ci0gICAgICBhYm9ydCAoKTsKKyAgICAgIGVtYWNzX2Fib3J0 ICgpOwogICAgIH0KIAogICBmZF9pbmZvW2ZkXS5jcCA9IGNwOwpAQCAtNDU5LDcgKzQ1OSw3 IEBACiAgICAgICAvKiBXZSB3YW50IHRvIHdhaXQgZm9yIGEgc3BlY2lmaWMgY2hpbGQgKi8K ICAgICAgIHdhaXRfaG5kW25oXSA9IGRlYWRfY2hpbGQtPnByb2NpbmZvLmhQcm9jZXNzOwog ICAgICAgY3BzW25oXSA9IGRlYWRfY2hpbGQ7Ci0gICAgICBpZiAoIXdhaXRfaG5kW25oXSkg YWJvcnQgKCk7CisgICAgICBpZiAoIXdhaXRfaG5kW25oXSkgZW1hY3NfYWJvcnQgKCk7CiAg ICAgICBuaCsrOwogICAgICAgYWN0aXZlID0gMDsKICAgICAgIGdvdG8gZ2V0X3Jlc3VsdDsK QEAgLTUwNyw3ICs1MDcsNyBAQAogICAgICAgYWN0aXZlIC09IFdBSVRfQUJBTkRPTkVEXzA7 CiAgICAgfQogICBlbHNlCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAK IGdldF9yZXN1bHQ6CiAgIGlmICghR2V0RXhpdENvZGVQcm9jZXNzICh3YWl0X2huZFthY3Rp dmVdLCAmcmV0dmFsKSkKQEAgLTExODksNyArMTE4OSw3IEBACiAjZW5kaWYKIAkJd2FpdF9o bmRbbmhdID0gY3AtPmNoYXJfYXZhaWw7CiAJCWZkaW5kZXhbbmhdID0gaTsKLQkJaWYgKCF3 YWl0X2huZFtuaF0pIGFib3J0ICgpOworCQlpZiAoIXdhaXRfaG5kW25oXSkgZW1hY3NfYWJv cnQgKCk7CiAJCW5oKys7CiAjaWZkZWYgRlVMTF9ERUJVRwogCQlEZWJQcmludCAoKCJzZWxl Y3Qgd2FpdGluZyBvbiBjaGlsZCAlZCBmZCAlZFxuIiwKQEAgLTEyNzYsNyArMTI3Niw3IEBA CiAgICAgICBhY3RpdmUgLT0gV0FJVF9BQkFORE9ORURfMDsKICAgICB9CiAgIGVsc2UKLSAg ICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICAvKiBMb29wIG92ZXIgYWxs IGhhbmRsZXMgYWZ0ZXIgYWN0aXZlIChub3cgb2ZmaWNpYWxseSBkb2N1bWVudGVkIGFzCiAg ICAgIGJlaW5nIHRoZSBmaXJzdCBzaWduYWxlZCBoYW5kbGUgaW4gdGhlIGFycmF5KS4gIFdl IGRvIHRoaXMgdG8KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvdzMyc2VsZWN0LmMnCi0tLSBz cmMvdzMyc2VsZWN0LmMJMjAxMi0wNy0yOSAwODoxODoyOSArMDAwMAorKysgc3JjL3czMnNl bGVjdC5jCTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTM5NCw3ICszOTQsNyBAQAog CiAgIEJMT0NLX0lOUFVUOwogCi0gIC8qIEZzaWduYWwgY2FsbHMgYWJvcnQoKSBpZiBpdCBz ZWVzIHRoYXQgd2FpdGluZ19mb3JfaW5wdXQgaXMKKyAgLyogRnNpZ25hbCBjYWxscyBlbWFj c19hYm9ydCAoKSBpZiBpdCBzZWVzIHRoYXQgd2FpdGluZ19mb3JfaW5wdXQgaXMKICAgICAg c2V0LiAgKi8KICAgb3dmaSA9IHdhaXRpbmdfZm9yX2lucHV0OwogICB3YWl0aW5nX2Zvcl9p bnB1dCA9IDA7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3czMnRlcm0uYycKLS0tIHNyYy93 MzJ0ZXJtLmMJMjAxMi0wOC0xOCAwMTo0Mjo1MiArMDAwMAorKysgc3JjL3czMnRlcm0uYwky MDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogICAgICAg YnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgYWJvcnQgKCk7CisgICAgICBlbWFjc19h Ym9ydCAoKTsKICAgICB9CiAKICAgaWYgKCFzLT5mb3Jfb3ZlcmxhcHMpCkBAIC0yNjI2LDcg KzI2MjYsNyBAQAogICBpZiAoISBGUkFNRV9XMzJfUCAoZikpCiAgICAgcmV0dXJuOwogCi0g IGFib3J0ICgpOworICBlbWFjc19hYm9ydCAoKTsKIH0KIAogCkBAIC0yNzA5LDcgKzI3MDks NyBAQAogICBpZiAoISBGUkFNRV9XMzJfUCAoZikpCiAgICAgcmV0dXJuOwogCi0gIGFib3J0 ICgpOworICBlbWFjc19hYm9ydCAoKTsKIH0KIAogCkBAIC0zNDMxLDcgKzM0MzEsNyBAQAog ICAgICAgZnJhbWUgPSBYQ0FSICh0YWlsKTsKICAgICAgIC8qIEFsbCBlbGVtZW50cyBvZiBW ZnJhbWVfbGlzdCBzaG91bGQgYmUgZnJhbWVzLiAgKi8KICAgICAgIGlmICghIEZSQU1FUCAo ZnJhbWUpKQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogCiAgICAgICAvKiBTY2Fu IHRoaXMgZnJhbWUncyBzY3JvbGwgYmFyIGxpc3QgZm9yIGEgc2Nyb2xsIGJhciB3aXRoIHRo ZQogCSByaWdodCB3aW5kb3cgSUQuICAqLwpAQCAtMzg1NCw3ICszODU0LDcgQEAKIAogICAv KiBXZSBjYW4ndCByZWRlZW0gdGhpcyB3aW5kb3cncyBzY3JvbGwgYmFyIGlmIGl0IGRvZXNu J3QgaGF2ZSBvbmUuICAqLwogICBpZiAoTklMUCAod2luZG93LT52ZXJ0aWNhbF9zY3JvbGxf YmFyKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICBiYXIgPSBY U0NST0xMX0JBUiAod2luZG93LT52ZXJ0aWNhbF9zY3JvbGxfYmFyKTsKIApAQCAtMzg3Myw3 ICszODczLDcgQEAKICAgICAgIGVsc2UKICAgICAgICAgLyogSWYgaXRzIHByZXYgcG9pbnRl ciBpcyBuaWwsIGl0IG11c3QgYmUgYXQgdGhlIGZyb250IG9mCiAgICAgICAgICAgIG9uZSBv ciB0aGUgb3RoZXIhICAqLwotICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgZW1hY3NfYWJv cnQgKCk7CiAgICAgfQogICBlbHNlCiAgICAgWFNDUk9MTF9CQVIgKGJhci0+cHJldiktPm5l eHQgPSBiYXItPm5leHQ7CkBAIC0zOTI4LDcgKzM5MjgsNyBAQAogCQkJICAgICBzdHJ1Y3Qg aW5wdXRfZXZlbnQgKmVtYWNzX2V2ZW50KQogewogICBpZiAoISBXSU5ET1dQIChiYXItPndp bmRvdykpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgZW1hY3Nf ZXZlbnQtPmtpbmQgPSBTQ1JPTExfQkFSX0NMSUNLX0VWRU5UOwogICBlbWFjc19ldmVudC0+ Y29kZSA9IDA7CkBAIC01MjMzLDcgKzUyMzMsNyBAQAogCSAgYnJlYWs7CiAKIAlkZWZhdWx0 OgotCSAgYWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKIAl9CiAgICAgfQogfQoKPT09 IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzJ4Zm5zLmMnCi0tLSBzcmMvdzMyeGZucy5jCTIwMTIt MDctMjkgMDg6MTg6MjkgKzAwMDAKKysrIHNyYy93MzJ4Zm5zLmMJMjAxMi0wOC0zMSAxNjoy MDozMCArMDAwMApAQCAtMTIyLDcgKzEyMiw3IEBACiAgIEhEQyBoZGM7CiAKICAgaWYgKGYt Pm91dHB1dF9tZXRob2QgIT0gb3V0cHV0X3czMikKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFj c19hYm9ydCAoKTsKIAogICBlbnRlcl9jcml0ICgpOwogCgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL3dpZGdldC5jJwotLS0gc3JjL3dpZGdldC5jCTIwMTItMDctMTAgMjE6NDg6MzQgKzAw MDAKKysrIHNyYy93aWRnZXQuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0yMjYs NyArMjI2LDcgQEAKIHN0YXRpYyB2b2lkCiBtYXJrX3NoZWxsX3NpemVfdXNlcl9zcGVjaWZp ZWQgKFdpZGdldCB3bXNoZWxsKQogewotICBpZiAoISBYdElzV01TaGVsbCAod21zaGVsbCkp IGFib3J0ICgpOworICBpZiAoISBYdElzV01TaGVsbCAod21zaGVsbCkpIGVtYWNzX2Fib3J0 ICgpOwogICAvKiBUaGlzIGlzIGtpbmQgb2Ygc2xlYXp5LCBidXQgSSBjYW4ndCBzZWUgaG93 IGVsc2UgdG8gdGVsbCBpdCB0byBtYWtlIGl0CiAgICAgIG1hcmsgdGhlIFdNX1NJWkVfSElO VFMgc2l6ZSBhcyB1c2VyIHNwZWNpZmllZCB3aGVuIGFwcHJvcHJpYXRlLiAqLwogICAoKFdN U2hlbGxXaWRnZXQpIHdtc2hlbGwpLT53bS5zaXplX2hpbnRzLmZsYWdzIHw9IFVTU2l6ZTsK QEAgLTI5MCw3ICsyOTAsNyBAQAogICBXaWRnZXQgd21zaGVsbCA9IGdldF93bV9zaGVsbCAo KFdpZGdldCkgZXcpOwogICAvKiBFYWNoIEVtYWNzIHNoZWxsIGlzIG5vdyBpbmRlcGVuZGVu dCBhbmQgdG9wLWxldmVsLiAgKi8KIAotICBpZiAoISBYdElzU3ViY2xhc3MgKHdtc2hlbGws IHNoZWxsV2lkZ2V0Q2xhc3MpKSBhYm9ydCAoKTsKKyAgaWYgKCEgWHRJc1N1YmNsYXNzICh3 bXNoZWxsLCBzaGVsbFdpZGdldENsYXNzKSkgZW1hY3NfYWJvcnQgKCk7CiAKICAgLyogV2Ug ZG9uJ3QgbmVlZCB0aGlzIGZvciB0aGUgbW9tZW50LiBUaGUgZ2VvbWV0cnkgaXMgY29tcHV0 ZWQgaW4KICAgICAgeGZucy5jLiAgKi8KQEAgLTY3OSw4ICs2NzksOCBAQAogICBFbWFjc0Zy YW1lIGV3ID0gKEVtYWNzRnJhbWUpIHdpZGdldDsKICAgc3RydWN0IGZyYW1lKiBzID0gZXct PmVtYWNzX2ZyYW1lLmZyYW1lOwogCi0gIGlmICghIHMpIGFib3J0ICgpOwotICBpZiAoISBz LT5vdXRwdXRfZGF0YS54KSBhYm9ydCAoKTsKKyAgaWYgKCEgcykgZW1hY3NfYWJvcnQgKCk7 CisgIGlmICghIHMtPm91dHB1dF9kYXRhLngpIGVtYWNzX2Fib3J0ICgpOwogCiAgIEJMT0NL X0lOUFVUOwogICB4X2ZyZWVfZ2NzIChzKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvd2lu ZG93LmMnCi0tLSBzcmMvd2luZG93LmMJMjAxMi0wOC0yOCAxNjowMTo1OSArMDAwMAorKysg c3JjL3dpbmRvdy5jCTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTM4Niw3ICszODYs NyBAQAogICAgICAgZWxzZSBpZiAoISBOSUxQIChYV0lORE9XICh3aW5kb3cpLT52Y2hpbGQp KQogCXdpbmRvdyA9IFhXSU5ET1cgKHdpbmRvdyktPnZjaGlsZDsKICAgICAgIGVsc2UKLQlh Ym9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICB9CiAKICAgcmV0dXJuIHdpbmRvdzsK QEAgLTEyODksNyArMTI4OSw3IEBACiAgICAgICByZXR1cm4gUW5pbDsKIAogICAgIGRlZmF1 bHQ6Ci0gICAgICBhYm9ydCAoKTsKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwogICAgIH0KIH0K IApAQCAtMTk0OCw3ICsxOTQ4LDcgQEAKICAgYnVmID0gdy0+YnVmZmVyOwogICBiID0gWEJV RkZFUiAoYnVmKTsKICAgaWYgKGIgIT0gWE1BUktFUiAody0+cG9pbnRtKS0+YnVmZmVyKQot ICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAjaWYgMAogICBpZiAodyA9 PSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpCkBAIC0yNjY5LDcgKzI2NjksNyBAQAogCSAg Y2FzZSBDSEVDS19BTExfV0lORE9XUzoKIAkgICAgaWYgKCEgTklMUCAody0+YnVmZmVyKQog CQkmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5idWZmZXIpLCBuYW1lKSkpCi0JICAgICAg YWJvcnQgKCk7CisJICAgICAgZW1hY3NfYWJvcnQgKCk7CiAJICAgIGJyZWFrOwogCiAJICBj YXNlIFdJTkRPV19MT09QX1VOVVNFRDoKCj09PSBtb2RpZmllZCBmaWxlICdzcmMveGRpc3Au YycKLS0tIHNyYy94ZGlzcC5jCTIwMTItMDgtMjggMDU6NDk6MDIgKzAwMDAKKysrIHNyYy94 ZGlzcC5jCTIwMTItMDgtMzEgMTY6MjA6MzAgKzAwMDAKQEAgLTczMDYsNyArNzMwNiw3IEBA CiAKICAgICBkZWZhdWx0OgogICAgICAgLyogVGhlcmUgYXJlIG5vIG90aGVyIG1ldGhvZHMg ZGVmaW5lZCwgc28gdGhpcyBzaG91bGQgYmUgYSBidWcuICAqLwotICAgICAgYWJvcnQgKCk7 CisgICAgICBlbWFjc19hYm9ydCAoKTsKICAgICB9CiAKICAgZWFzc2VydCAoaXQtPm1ldGhv ZCAhPSBHRVRfRlJPTV9TVFJJTkcKQEAgLTc3NjEsNyArNzc2MSw3IEBACiAgICAgICBjb21w dXRlX3N0b3BfcG9zIChpdCk7CiAgICAgICAvKiBXZSBtdXN0IGFkdmFuY2UgZm9yd2FyZCwg cmlnaHQ/ICAqLwogICAgICAgaWYgKGl0LT5zdG9wX2NoYXJwb3MgPD0gY2hhcnBvcykKLQlh Ym9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKICAgICB9CiAgIHdoaWxlIChjaGFycG9zID4g QkVHViAmJiBpdC0+c3RvcF9jaGFycG9zID49IGl0LT5lbmRfY2hhcnBvcyk7CiAKQEAgLTc4 MTAsNyArNzgxMCw3IEBACiAgICAgICBjb21wdXRlX3N0b3BfcG9zIChpdCk7CiAgICAgICAv KiBXZSBtdXN0IGFkdmFuY2UgZm9yd2FyZCwgcmlnaHQ/ICAqLwogICAgICAgaWYgKGl0LT5z dG9wX2NoYXJwb3MgPD0gaXQtPnByZXZfc3RvcCkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9y dCAoKTsKICAgICAgIGNoYXJwb3MgPSBpdC0+c3RvcF9jaGFycG9zOwogICAgIH0KICAgd2hp bGUgKGNoYXJwb3MgPD0gd2hlcmVfd2VfYXJlKTsKQEAgLTg4OTgsNyArODg5OCw3IEBACiAJ ICBicmVhazsKIAogCWRlZmF1bHQ6Ci0JICBhYm9ydCAoKTsKKwkgIGVtYWNzX2Fib3J0ICgp OwogCX0KIAogICAgICAgLyogUmVzZXQvaW5jcmVtZW50IGZvciB0aGUgbmV4dCBydW4uICAq LwpAQCAtMTA1MzIsNyArMTA1MzIsNyBAQAogY2hlY2tfbWVzc2FnZV9zdGFjayAodm9pZCkK IHsKICAgaWYgKCFOSUxQIChWbWVzc2FnZV9zdGFjaykpCi0gICAgYWJvcnQgKCk7CisgICAg ZW1hY3NfYWJvcnQgKCk7CiB9CiAKIApAQCAtMTQ0MjIsNyArMTQ0MjIsNyBAQAogICAgICAg Zm9yIChnID0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwgeCA9IHJvdy0+eDsgZyA8IGdseXBo OyBnKyspCiAJewogCSAgaWYgKGcgPj0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIHJvdy0+ dXNlZFtURVhUX0FSRUFdKQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7 CiAJICB4ICs9IGctPnBpeGVsX3dpZHRoOwogCX0KICAgICB9CkBAIC0xNDU0Myw3ICsxNDU0 Myw3IEBACiAgIFNFVF9NQVJLRVJfRlJPTV9URVhUX1BPUyAody0+c3RhcnQsIHN0YXJ0cCk7 CiAKICAgaWYgKGN1cnJlbnRfYnVmZmVyICE9IFhCVUZGRVIgKHctPmJ1ZmZlcikpCi0gICAg YWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgaWYgKCFOSUxQIChWd2luZG93 X3Njcm9sbF9mdW5jdGlvbnMpKQogICAgIHsKQEAgLTE1NTEyLDkgKzE1NTEyLDkgQEAKICAg LyogU29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KICAgQ0hFQ0tfV0lORE9XX0VORCAodyk7CiAg IGlmIChaID09IFpfQllURSAmJiBDSEFSUE9TIChvcG9pbnQpICE9IEJZVEVQT1MgKG9wb2lu dCkpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAgIGlmIChCWVRFUE9T IChvcG9pbnQpIDwgQ0hBUlBPUyAob3BvaW50KSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFj c19hYm9ydCAoKTsKIAogICAvKiBJZiAlYyBpcyBpbiBtb2RlIGxpbmUsIHVwZGF0ZSBpdCBp ZiBuZWVkZWQuICAqLwogICBpZiAoIU5JTFAgKHctPmNvbHVtbl9udW1iZXJfZGlzcGxheWVk KQpAQCAtMTU3MjYsNyArMTU3MjYsNyBAQAogCSAgZ290byB0cnlfdG9fc2Nyb2xsOwogCiAJ ZGVmYXVsdDoKLQkgIGFib3J0ICgpOworCSAgZW1hY3NfYWJvcnQgKCk7CiAJfQogICAgIH0K ICAgLyogSWYgY3VycmVudCBzdGFydGluZyBwb2ludCB3YXMgb3JpZ2luYWxseSB0aGUgYmVn aW5uaW5nIG9mIGEgbGluZQpAQCAtMTU4ODksNyArMTU4ODksNyBAQAogCSAgYnJlYWs7CiAK IAlkZWZhdWx0OgotCSAgYWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKIAl9CiAgICAg fQogCkBAIC0xNzMzNyw3ICsxNzMzNyw3IEBACiAJICBpZiAocm93KQogCSAgICBzZXRfY3Vy c29yX2Zyb21fcm93ICh3LCByb3csIGN1cnJlbnRfbWF0cml4LCAwLCAwLCAwLCAwKTsKIAkg IGVsc2UKLQkgICAgYWJvcnQgKCk7CisJICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgcmV0dXJu IDE7CiAJfQogICAgIH0KQEAgLTE3MzgxLDcgKzE3MzgxLDcgQEAKIAkgIGlmIChyb3cpCiAJ ICAgIHNldF9jdXJzb3JfZnJvbV9yb3cgKHcsIHJvdywgY3VycmVudF9tYXRyaXgsIDAsIDAs IDAsIDApOwogCSAgZWxzZQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7 CiAJICByZXR1cm4gMjsKIAl9CiAgICAgfQpAQCAtMTc4NzAsNyArMTc4NzAsNyBAQAogICAg ICAgSUZfREVCVUcgKGRlYnVnX21ldGhvZF9hZGQgKHcsICJDIikpOwogICAgIH0KICAgZWxz ZQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIElGX0RFQlVHIChk ZWJ1Z19lbmRfcG9zID0gWEZBU1RJTlQgKHctPndpbmRvd19lbmRfcG9zKTsKIAkgICAgZGVi dWdfZW5kX3Zwb3MgPSBYRkFTVElOVCAody0+d2luZG93X2VuZF92cG9zKSk7CkBAIC0xOTI0 Nyw3ICsxOTI0Nyw3IEBACiAJLyogQSBsaW5lIHRoYXQgaXMgZW50aXJlbHkgZnJvbSBhIHN0 cmluZy9pbWFnZS9zdHJldGNoLi4uICAqLwogCXJvdy0+bWF4cG9zID0gcm93LT5taW5wb3M7 CiAgICAgICBlbHNlCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQgKCk7CiAgICAgfQogICBl bHNlCiAgICAgcm93LT5tYXhwb3MgPSBpdC0+Y3VycmVudC5wb3M7CkBAIC0yMDA4OCw3ICsy MDA4OCw3IEBACiAJICByZXR1cm4gUXJpZ2h0X3RvX2xlZnQ7CiAJICBicmVhazsKIAlkZWZh dWx0OgotCSAgYWJvcnQgKCk7CisJICBlbWFjc19hYm9ydCAoKTsKIAl9CiAgICAgfQogfQpA QCAtMjIwMDEsNyArMjIwMDEsNyBAQAogCSAgICB7CiAJICAgICAgLyogR2x5cGggaXMgb2Zm IHRoZSBsZWZ0IG1hcmdpbiBvZiB0aGUgZGlzcGxheSBhcmVhLgogCQkgU2hvdWxkIG5vdCBo YXBwZW4uICAqLwotCSAgICAgIGFib3J0ICgpOworCSAgICAgIGVtYWNzX2Fib3J0ICgpOwog CSAgICB9CiAKIAkgIHJvdy0+YXNjZW50ID0gbWF4IChyb3ctPmFzY2VudCwgaXQtPm1heF9h c2NlbnQpOwpAQCAtMjMzNjYsNyArMjMzNjYsNyBAQAogCSAgICAgIGJyZWFrOwkJCQkJCQlc CiAJCQkJCQkJCQlcCiAJICAgIGRlZmF1bHQ6CQkJCQkJCVwKLQkgICAgICBhYm9ydCAoKTsJ CQkJCQkJXAorCSAgICAgIGVtYWNzX2Fib3J0ICgpOwkJCQkJCQlcCiAJICAgIH0JCQkJCQkJ CVwKIAkJCQkJCQkJCVwKIAkgIGlmIChzKQkJCQkJCQlcCkBAIC0yMzcwNyw3ICsyMzcwNyw3 IEBACiAJewogCSAgZ2x5cGgtPnJlc29sdmVkX2xldmVsID0gaXQtPmJpZGlfaXQucmVzb2x2 ZWRfbGV2ZWw7CiAJICBpZiAoKGl0LT5iaWRpX2l0LnR5cGUgJiA3KSAhPSBpdC0+YmlkaV9p dC50eXBlKQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJvcnQgKCk7CiAJICBnbHlw aC0+YmlkaV90eXBlID0gaXQtPmJpZGlfaXQudHlwZTsKIAl9CiAgICAgICBlbHNlCkBAIC0y Mzc4MSw3ICsyMzc4MSw3IEBACiAJewogCSAgZ2x5cGgtPnJlc29sdmVkX2xldmVsID0gaXQt PmJpZGlfaXQucmVzb2x2ZWRfbGV2ZWw7CiAJICBpZiAoKGl0LT5iaWRpX2l0LnR5cGUgJiA3 KSAhPSBpdC0+YmlkaV9pdC50eXBlKQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJv cnQgKCk7CiAJICBnbHlwaC0+YmlkaV90eXBlID0gaXQtPmJpZGlfaXQudHlwZTsKIAl9CiAg ICAgICArK2l0LT5nbHlwaF9yb3ctPnVzZWRbYXJlYV07CkBAIC0yMzk2MCw3ICsyMzk2MCw3 IEBACiAJICAgIHsKIAkgICAgICBnbHlwaC0+cmVzb2x2ZWRfbGV2ZWwgPSBpdC0+YmlkaV9p dC5yZXNvbHZlZF9sZXZlbDsKIAkgICAgICBpZiAoKGl0LT5iaWRpX2l0LnR5cGUgJiA3KSAh PSBpdC0+YmlkaV9pdC50eXBlKQotCQlhYm9ydCAoKTsKKwkJZW1hY3NfYWJvcnQgKCk7CiAJ ICAgICAgZ2x5cGgtPmJpZGlfdHlwZSA9IGl0LT5iaWRpX2l0LnR5cGU7CiAJICAgIH0KIAkg ICsraXQtPmdseXBoX3Jvdy0+dXNlZFthcmVhXTsKQEAgLTI0MDIxLDcgKzI0MDIxLDcgQEAK IAl7CiAJICBnbHlwaC0+cmVzb2x2ZWRfbGV2ZWwgPSBpdC0+YmlkaV9pdC5yZXNvbHZlZF9s ZXZlbDsKIAkgIGlmICgoaXQtPmJpZGlfaXQudHlwZSAmIDcpICE9IGl0LT5iaWRpX2l0LnR5 cGUpCi0JICAgIGFib3J0ICgpOworCSAgICBlbWFjc19hYm9ydCAoKTsKIAkgIGdseXBoLT5i aWRpX3R5cGUgPSBpdC0+YmlkaV9pdC50eXBlOwogCX0KICAgICAgIGVsc2UKQEAgLTI0Mjc2 LDcgKzI0Mjc2LDcgQEAKIAl9CiAgICAgfQogICBlbHNlCi0gICAgYWJvcnQgKCk7CisgICAg ZW1hY3NfYWJvcnQgKCk7CiAKICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KICAgLyogT24g YSBHVUkgZnJhbWUsIHdoZW4gdGhlIHJpZ2h0IGZyaW5nZSAobGVmdCBmcmluZ2UgZm9yIFIy TCByb3dzKQpAQCAtMjQ0NzMsNyArMjQ0NzMsNyBAQAogCXsKIAkgIGdseXBoLT5yZXNvbHZl ZF9sZXZlbCA9IGl0LT5iaWRpX2l0LnJlc29sdmVkX2xldmVsOwogCSAgaWYgKChpdC0+Ymlk aV9pdC50eXBlICYgNykgIT0gaXQtPmJpZGlfaXQudHlwZSkKLQkgICAgYWJvcnQgKCk7CisJ ICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgZ2x5cGgtPmJpZGlfdHlwZSA9IGl0LT5iaWRpX2l0 LnR5cGU7CiAJfQogICAgICAgKytpdC0+Z2x5cGhfcm93LT51c2VkW2FyZWFdOwoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy94ZmFjZXMuYycKLS0tIHNyYy94ZmFjZXMuYwkyMDEyLTA4LTIx IDEwOjIxOjA0ICswMDAwCisrKyBzcmMveGZhY2VzLmMJMjAxMi0wOC0zMSAxNjoyMDozMCAr MDAwMApAQCAtNTUxLDcgKzU1MSw3IEBACiAgIGlmIChjb2xvcl9jb3VudFtwaXhlbF0gPiAw KQogICAgIC0tY29sb3JfY291bnRbcGl4ZWxdOwogICBlbHNlCi0gICAgYWJvcnQgKCk7Cisg ICAgZW1hY3NfYWJvcnQgKCk7CiB9CiAKIApAQCAtNzY4LDcgKzc2OCw3IEBACiAgIGlmICgh RlJBTUVfTlNfUCAoZikgfHwgRlJBTUVfTlNfV0lORE9XIChmKSkKICNlbmRpZgogICAgIGlm ICghcmVhbGl6ZV9iYXNpY19mYWNlcyAoZikpCi0JYWJvcnQgKCk7CisJZW1hY3NfYWJvcnQg KCk7CiB9CiAKIApAQCAtODEyLDcgKzgxMiw3IEBACiAgICAgewogICAgICAgY2xlYXJfZmFj ZV9jYWNoZSAoMCk7CiAgICAgICBpZiAoIXJlYWxpemVfYmFzaWNfZmFjZXMgKGYpKQotCWFi b3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAgIH0KIH0KIApAQCAtMTE0OSw3ICsxMTQ5 LDcgQEAKICAgICByZXR1cm4gbnNfZGVmaW5lZF9jb2xvciAoZiwgY29sb3JfbmFtZSwgY29s b3JfZGVmLCBhbGxvYywgMSk7CiAjZW5kaWYKICAgZWxzZQotICAgIGFib3J0ICgpOworICAg IGVtYWNzX2Fib3J0ICgpOwogfQogCiAKQEAgLTEzNDUsNyArMTM0NSw3IEBACiAJICBicmVh azsKIAogCWRlZmF1bHQ6Ci0JICBhYm9ydCAoKTsKKwkgIGVtYWNzX2Fib3J0ICgpOwogCX0K ICAgICB9CiAjaWZkZWYgR0xZUEhfREVCVUcKQEAgLTQ1ODksNyArNDU4OSw3IEBACiAJcmV0 dXJuIC0xOwogICAgICAgZGVmYXVsdF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBERUZBVUxU X0ZBQ0VfSUQpOwogICAgICAgaWYgKGRlZmF1bHRfZmFjZSA9PSBOVUxMKQotCWFib3J0ICgp OyAgLyogcmVhbGl6ZV9iYXNpY19mYWNlcyBtdXN0IGhhdmUgc2V0IGl0IHVwICAqLworCWVt YWNzX2Fib3J0ICgpOyAvKiByZWFsaXplX2Jhc2ljX2ZhY2VzIG11c3QgaGF2ZSBzZXQgaXQg dXAgICovCiAgICAgfQogCiAgIGlmICghIGdldF9sZmFjZV9hdHRyaWJ1dGVzIChmLCBzeW1i b2wsIHN5bWJvbF9hdHRycywgc2lnbmFsX3AsIDApKQpAQCAtNDYzMiw3ICs0NjMyLDcgQEAK ICAgICBjYXNlIE1FTlVfRkFDRV9JRDoJCQluYW1lID0gUW1lbnU7CQkJYnJlYWs7CiAKICAg ICBkZWZhdWx0OgotICAgICAgYWJvcnQgKCk7CSAgICAvKiB0aGUgY2FsbGVyIGlzIHN1cHBv c2VkIHRvIHBhc3MgdXMgYSBiYXNpYyBmYWNlIGlkICovCisgICAgICBlbWFjc19hYm9ydCAo KTsgLyogdGhlIGNhbGxlciBpcyBzdXBwb3NlZCB0byBwYXNzIHVzIGEgYmFzaWMgZmFjZSBp ZCAqLwogICAgIH0KIAogICAvKiBEbyBhIHF1aWNrIHNjYW4gdGhyb3VnaCBWZmFjZV9yZW1h cHBpbmdfYWxpc3QsIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkKQEAgLTQ3NTMsNyArNDc1Myw3 IEBACiAgIHN0cnVjdCBmYWNlICpkZWZhdWx0X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZh Y2VfaWQpOwogCiAgIGlmICghZGVmYXVsdF9mYWNlKQotICAgIGFib3J0ICgpOworICAgIGVt YWNzX2Fib3J0ICgpOwogCiAgIGlmICghZ2V0X2xmYWNlX2F0dHJpYnV0ZXMgKGYsIHN5bWJv bCwgc3ltYm9sX2F0dHJzLCBzaWduYWxfcCwgMCkpCiAgICAgcmV0dXJuIC0xOwpAQCAtNTE0 Myw3ICs1MTQzLDcgQEAKIAllcnJvciAoIkNhbm5vdCByZWFsaXplIGRlZmF1bHQgZmFjZSIp OwogICAgICAgZGVmX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIERFRkFVTFRfRkFDRV9JRCk7 CiAgICAgICBpZiAoZGVmX2ZhY2UgPT0gTlVMTCkKLQlhYm9ydCAoKTsgIC8qIHJlYWxpemVf YmFzaWNfZmFjZXMgbXVzdCBoYXZlIHNldCBpdCB1cCAgKi8KKwllbWFjc19hYm9ydCAoKTsg IC8qIHJlYWxpemVfYmFzaWNfZmFjZXMgbXVzdCBoYXZlIHNldCBpdCB1cCAgKi8KICAgICB9 CiAKICAgLyogRGlzcGF0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIuICAqLwpAQCAt NTQyOCw3ICs1NDI4LDcgQEAKICAgICAgIGVsc2UgaWYgKEZSQU1FX0lOSVRJQUxfUCAoZikg fHwgRlJBTUVfVEVSTUNBUF9QIChmKSB8fCBGUkFNRV9NU0RPU19QIChmKSkKIAlBU0VUIChs ZmFjZSwgTEZBQ0VfRk9SRUdST1VORF9JTkRFWCwgYnVpbGRfc3RyaW5nICh1bnNwZWNpZmll ZF9mZykpOwogICAgICAgZWxzZQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwogICAg IH0KIAogICBpZiAoVU5TUEVDSUZJRURQIChMRkFDRV9CQUNLR1JPVU5EIChsZmFjZSkpKQpA QCAtNTQ0Myw3ICs1NDQzLDcgQEAKICAgICAgIGVsc2UgaWYgKEZSQU1FX0lOSVRJQUxfUCAo ZikgfHwgRlJBTUVfVEVSTUNBUF9QIChmKSB8fCBGUkFNRV9NU0RPU19QIChmKSkKIAlBU0VU IChsZmFjZSwgTEZBQ0VfQkFDS0dST1VORF9JTkRFWCwgYnVpbGRfc3RyaW5nICh1bnNwZWNp ZmllZF9iZykpOwogICAgICAgZWxzZQotCWFib3J0ICgpOworCWVtYWNzX2Fib3J0ICgpOwog ICAgIH0KIAogICBpZiAoVU5TUEVDSUZJRURQIChMRkFDRV9TVElQUExFIChsZmFjZSkpKQpA QCAtNTU0Myw3ICs1NTQzLDcgQEAKICAgICAgIGZhY2UgPSBtYWtlX3JlYWxpemVkX2ZhY2Ug KGF0dHJzKTsKICAgICB9CiAgIGVsc2UKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9y dCAoKTsKIAogICAvKiBJbnNlcnQgdGhlIG5ldyBmYWNlLiAgKi8KICAgY2FjaGVfZmFjZSAo Y2FjaGUsIGZhY2UsIGxmYWNlX2hhc2ggKGF0dHJzKSk7CkBAIC01NjM4LDcgKzU2MzgsNyBA QAogCSAgaWYgKGRlZmF1bHRfZmFjZSkKIAkgICAgZm9udHNldCA9IGRlZmF1bHRfZmFjZS0+ Zm9udHNldDsKIAkgIGlmIChmb250c2V0ID09IC0xKQotCSAgICBhYm9ydCAoKTsKKwkgICAg ZW1hY3NfYWJvcnQgKCk7CiAJfQogICAgICAgaWYgKCEgRk9OVF9PQkpFQ1RfUCAoYXR0cnNb TEZBQ0VfRk9OVF9JTkRFWF0pKQogCWF0dHJzW0xGQUNFX0ZPTlRfSU5ERVhdCgo9PT0gbW9k aWZpZWQgZmlsZSAnc3JjL3htZW51LmMnCi0tLSBzcmMveG1lbnUuYwkyMDEyLTA4LTE3IDIx OjUyOjE1ICswMDAwCisrKyBzcmMveG1lbnUuYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAw CkBAIC0xNjksNyArMTY5LDcgQEAKICAgaW50IGR1bW15OwogCiAgIGlmICghIEZSQU1FX1hf UCAoZikpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgQkxPQ0tf SU5QVVQ7CiAKQEAgLTYzNiw3ICs2MzYsNyBAQAogeF9hY3RpdmF0ZV9tZW51YmFyIChGUkFN RV9QVFIgZikKIHsKICAgaWYgKCEgRlJBTUVfWF9QIChmKSkKLSAgICBhYm9ydCAoKTsKKyAg ICBlbWFjc19hYm9ydCAoKTsKIAogICBpZiAoIWYtPm91dHB1dF9kYXRhLngtPnNhdmVkX21l bnVfZXZlbnQtPnR5cGUpCiAgICAgcmV0dXJuOwpAQCAtODUyLDcgKzg1Miw3IEBACiAgIGlu dCBjb2x1bW5zLCByb3dzOwogCiAgIGlmICghIEZSQU1FX1hfUCAoZikpCi0gICAgYWJvcnQg KCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgeCA9IGYtPm91dHB1dF9kYXRhLng7CiAK QEAgLTk0MCw3ICs5NDAsNyBAQAogICBpbnQgKnN1Ym1lbnVfdG9wX2xldmVsX2l0ZW1zLCAq c3VibWVudV9uX3BhbmVzOwogCiAgIGlmICghIEZSQU1FX1hfUCAoZikpCi0gICAgYWJvcnQg KCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgbWVudWJhcl93aWRnZXQgPSBmLT5vdXRw dXRfZGF0YS54LT5tZW51YmFyX3dpZGdldDsKIApAQCAtMTI5OSw3ICsxMjk5LDcgQEAKICAg V2lkZ2V0IG1lbnViYXJfd2lkZ2V0OwogCiAgIGlmICghIEZSQU1FX1hfUCAoZikpCi0gICAg YWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgbWVudWJhcl93aWRnZXQgPSBm LT5vdXRwdXRfZGF0YS54LT5tZW51YmFyX3dpZGdldDsKIApAQCAtMTQ1MCw3ICsxNDUwLDcg QEAKICNlbmRpZgogCiAgIGlmICghIEZSQU1FX1hfUCAoZikpCi0gICAgYWJvcnQgKCk7Cisg ICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgeGdfY3JhenlfY2FsbGJhY2tfYWJvcnQgPSAxOwog ICBtZW51ID0geGdfY3JlYXRlX3dpZGdldCAoInBvcHVwIiwgZmlyc3Rfd3YtPm5hbWUsIGYs IGZpcnN0X3d2LApAQCAtMTU1Nyw3ICsxNTU3LDcgQEAKICAgV2lkZ2V0IG1lbnU7CiAKICAg aWYgKCEgRlJBTUVfWF9QIChmKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAo KTsKIAogI2lmZGVmIFVTRV9MVUNJRAogICBhcHBseV9zeXN0ZW1mb250X3RvX21lbnUgKGYs IGYtPm91dHB1dF9kYXRhLngtPndpZGdldCk7CkBAIC0xNjQ2LDcgKzE2NDYsNyBAQAogICBw dHJkaWZmX3Qgc3BlY3BkbF9jb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAKICAgaWYgKCEg RlJBTUVfWF9QIChmKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAog ICAqZXJyb3JfbmFtZSA9IE5VTEw7CiAKQEAgLTE3OTIsNyArMTc5Miw3IEBACiAJICBlbHNl IGlmIChFUSAodHlwZSwgUUNyYWRpbykpCiAJICAgIHd2LT5idXR0b25fdHlwZSA9IEJVVFRP Tl9UWVBFX1JBRElPOwogCSAgZWxzZQotCSAgICBhYm9ydCAoKTsKKwkgICAgZW1hY3NfYWJv cnQgKCk7CiAKIAkgIHd2LT5zZWxlY3RlZCA9ICFOSUxQIChzZWxlY3RlZCk7CiAKQEAgLTE5 MzAsNyArMTkzMCw3IEBACiAgIEd0a1dpZGdldCAqbWVudTsKIAogICBpZiAoISBGUkFNRV9Y X1AgKGYpKQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgIG1lbnUg PSB4Z19jcmVhdGVfd2lkZ2V0ICgiZGlhbG9nIiwgZmlyc3Rfd3YtPm5hbWUsIGYsIGZpcnN0 X3d2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyAoZGlhbG9nX3Nl bGVjdGlvbl9jYWxsYmFjayksCkBAIC0xOTc3LDcgKzE5NzcsNyBAQAogICBMV0xJQl9JRCBk aWFsb2dfaWQ7CiAKICAgaWYgKCFGUkFNRV9YX1AgKGYpKQotICAgIGFib3J0ICgpOworICAg IGVtYWNzX2Fib3J0ICgpOwogCiAgIGRpYWxvZ19pZCA9IHdpZGdldF9pZF90aWNrKys7CiAj aWZkZWYgVVNFX0xVQ0lECkBAIC0yMDM2LDcgKzIwMzYsNyBAQAogICBwdHJkaWZmX3Qgc3Bl Y3BkbF9jb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAKICAgaWYgKCEgRlJBTUVfWF9QIChm KSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICAqZXJyb3JfbmFt ZSA9IE5VTEw7CiAKQEAgLTIzMDEsNyArMjMwMSw3IEBACiAgIHB0cmRpZmZfdCBzcGVjcGRs X2NvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKIAogICBpZiAoISBGUkFNRV9YX1AgKGYpICYm ICEgRlJBTUVfTVNET1NfUCAoZikpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQg KCk7CiAKICAgKmVycm9yX25hbWUgPSAwOwogICBpZiAobWVudV9pdGVtc19uX3BhbmVzID09 IDApCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3hzZWxlY3QuYycKLS0tIHNyYy94c2VsZWN0 LmMJMjAxMi0wOC0xOCAwMDowNzo1MiArMDAwMAorKysgc3JjL3hzZWxlY3QuYwkyMDEyLTA4 LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xOTMsNyArMTkzLDcgQEAKIHhfc3RhcnRfcXVldWlu Z19zZWxlY3Rpb25fcmVxdWVzdHMgKHZvaWQpCiB7CiAgIGlmICh4X3F1ZXVlX3NlbGVjdGlv bl9yZXF1ZXN0cykKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFjc19hYm9ydCAoKTsKIAogICB4 X3F1ZXVlX3NlbGVjdGlvbl9yZXF1ZXN0cysrOwogICBUUkFDRTEgKCJ4X3N0YXJ0X3F1ZXVp bmdfc2VsZWN0aW9uX3JlcXVlc3RzICVkIiwgeF9xdWV1ZV9zZWxlY3Rpb25fcmVxdWVzdHMp OwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgIGlmIChFUSAoc3ltLCBRRU1BQ1NfVE1QKSkgcmV0 dXJuIGRweWluZm8tPlhhdG9tX0VNQUNTX1RNUDsKICAgaWYgKEVRIChzeW0sIFFUQVJHRVRT KSkgICByZXR1cm4gZHB5aW5mby0+WGF0b21fVEFSR0VUUzsKICAgaWYgKEVRIChzeW0sIFFO VUxMKSkJICAgIHJldHVybiBkcHlpbmZvLT5YYXRvbV9OVUxMOwotICBpZiAoIVNZTUJPTFAg KHN5bSkpIGFib3J0ICgpOworICBpZiAoIVNZTUJPTFAgKHN5bSkpIGVtYWNzX2Fib3J0ICgp OwogCiAgIFRSQUNFMSAoIiBYSW50ZXJuQXRvbSAlcyIsIFNTREFUQSAoU1lNQk9MX05BTUUg KHN5bSkpKTsKICAgQkxPQ0tfSU5QVVQ7CkBAIC0xMTM4LDcgKzExMzgsNyBAQAogICBwdHJk aWZmX3QgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwogCiAgIGlmIChwcm9wZXJ0eV9jaGFu Z2VfcmVwbHlfb2JqZWN0KQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwog CiAgIC8qIE1ha2Ugc3VyZSB0byBkbyB1bmV4cGVjdF9wcm9wZXJ0eV9jaGFuZ2UgaWYgd2Ug cXVpdCBvciBlcnIuICAqLwogICByZWNvcmRfdW53aW5kX3Byb3RlY3QgKHdhaXRfZm9yX3By b3BlcnR5X2NoYW5nZV91bndpbmQsCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3h0ZXJtLmMn Ci0tLSBzcmMveHRlcm0uYwkyMDEyLTA4LTI1IDIwOjMxOjA0ICswMDAwCisrKyBzcmMveHRl cm0uYwkyMDEyLTA4LTMxIDE2OjIwOjMwICswMDAwCkBAIC0xNDc0LDcgKzE0NzQsNyBAQAog CSYmIGYtPm91dHB1dF9kYXRhLngtPndpZGdldCA9PSB3aWRnZXQpCiAgICAgICByZXR1cm4g ZjsKIAotICBhYm9ydCAoKTsKKyAgZW1hY3NfYWJvcnQgKCk7CiB9CiAKIC8qIEFsbG9jYXRl IGEgY29sb3Igd2hpY2ggaXMgbGlnaHRlciBvciBkYXJrZXIgdGhhbiAqUElYRUwgYnkgRkFD VE9SCkBAIC0yNzAzLDcgKzI3MDMsNyBAQAogICAgIHkyICs9IGR5OwogCiAgIGlmIChJTlRf TUFYIC0gZHggPCB4bWF4KQotICAgIGFib3J0ICgpOworICAgIGVtYWNzX2Fib3J0ICgpOwog CiAgIHdoaWxlICh4MSA8PSB4bWF4KQogICAgIHsKQEAgLTI4MTIsNyArMjgxMiw3IEBACiAg ICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICBhYm9ydCAoKTsKKyAgICAgIGVt YWNzX2Fib3J0ICgpOwogICAgIH0KIAogICBpZiAoIXMtPmZvcl9vdmVybGFwcykKQEAgLTMw MTIsNyArMzAxMiw3IEBACiBzdGF0aWMgdm9pZAogeF9kZWxldGVfZ2x5cGhzIChzdHJ1Y3Qg ZnJhbWUgKmYsIHJlZ2lzdGVyIGludCBuKQogewotICBhYm9ydCAoKTsKKyAgZW1hY3NfYWJv cnQgKCk7CiB9CiAKIApAQCAtMzI4NSw3ICszMjg1LDcgQEAKIHN0YXRpYyB2b2lkCiB4X2lu c19kZWxfbGluZXMgKHN0cnVjdCBmcmFtZSAqZiwgaW50IHZwb3MsIGludCBuKQogewotICBh Ym9ydCAoKTsKKyAgZW1hY3NfYWJvcnQgKCk7CiB9CiAKIApAQCAtNDEyMiw3ICs0MTIyLDcg QEAKICAgICAgIGZyYW1lID0gWENBUiAodGFpbCk7CiAgICAgICAvKiBBbGwgZWxlbWVudHMg b2YgVmZyYW1lX2xpc3Qgc2hvdWxkIGJlIGZyYW1lcy4gICovCiAgICAgICBpZiAoISBGUkFN RVAgKGZyYW1lKSkKLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAoKTsKIAogICAgICAgaWYg KCEgRlJBTUVfWF9QIChYRlJBTUUgKGZyYW1lKSkpCiAgICAgICAgIGNvbnRpbnVlOwpAQCAt NTQ0MSw3ICs1NDQxLDcgQEAKIAogICAvKiBXZSBjYW4ndCByZWRlZW0gdGhpcyB3aW5kb3cn cyBzY3JvbGwgYmFyIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUuICAqLwogICBpZiAoTklMUCAo d2luZG93LT52ZXJ0aWNhbF9zY3JvbGxfYmFyKSkKLSAgICBhYm9ydCAoKTsKKyAgICBlbWFj c19hYm9ydCAoKTsKIAogICBiYXIgPSBYU0NST0xMX0JBUiAod2luZG93LT52ZXJ0aWNhbF9z Y3JvbGxfYmFyKTsKIApAQCAtNTQ2MCw3ICs1NDYwLDcgQEAKICAgICAgIGVsc2UKIAkvKiBJ ZiBpdHMgcHJldiBwb2ludGVyIGlzIG5pbCwgaXQgbXVzdCBiZSBhdCB0aGUgZnJvbnQgb2YK IAkgICBvbmUgb3IgdGhlIG90aGVyISAgKi8KLQlhYm9ydCAoKTsKKwllbWFjc19hYm9ydCAo KTsKICAgICB9CiAgIGVsc2UKICAgICBYU0NST0xMX0JBUiAoYmFyLT5wcmV2KS0+bmV4dCA9 IGJhci0+bmV4dDsKQEAgLTU1NTgsNyArNTU1OCw3IEBACiB4X3Njcm9sbF9iYXJfaGFuZGxl X2NsaWNrIChzdHJ1Y3Qgc2Nyb2xsX2JhciAqYmFyLCBYRXZlbnQgKmV2ZW50LCBzdHJ1Y3Qg aW5wdXRfZXZlbnQgKmVtYWNzX2V2ZW50KQogewogICBpZiAoISBXSU5ET1dQIChiYXItPndp bmRvdykpCi0gICAgYWJvcnQgKCk7CisgICAgZW1hY3NfYWJvcnQgKCk7CiAKICAgZW1hY3Nf ZXZlbnQtPmtpbmQgPSBTQ1JPTExfQkFSX0NMSUNLX0VWRU5UOwogICBlbWFjc19ldmVudC0+ Y29kZSA9IGV2ZW50LT54YnV0dG9uLmJ1dHRvbiAtIEJ1dHRvbjE7CkBAIC02NDY0LDcgKzY0 NjQsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSBpZiAoc3Rh dHVzX3JldHVybiAhPSBYTG9va3VwS2V5U3ltCiAgICAgICAgICAgICAgICAgICAgICAgICYm IHN0YXR1c19yZXR1cm4gIT0gWExvb2t1cEJvdGgpCi0gICAgICAgICAgICAgICAgYWJvcnQg KCk7CisgICAgICAgICAgICAgICAgZW1hY3NfYWJvcnQgKCk7CiAgICAgICAgICAgICB9CiAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbmJ5dGVzID0gWExvb2t1cFN0cmluZyAoJmV2 ZW50LnhrZXksIChjaGFyICopIGNvcHlfYnVmcHRyLApAQCAtNzUwMyw3ICs3NTAzLDcgQEAK IAkgICAgICBicmVhazsKIAogCSAgICBkZWZhdWx0OgotCSAgICAgIGFib3J0ICgpOworCSAg ICAgIGVtYWNzX2Fib3J0ICgpOwogCSAgICB9CiAJfQogCkBAIC03ODU2LDcgKzc4NTYsNyBA QAogVGhpcyBpcyBhIEdUSyBidWc6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3df YnVnLmNnaT9pZD04NTcxNVxuXAogRm9yIGRldGFpbHMsIHNlZSBldGMvUFJPQkxFTVMuXG4i LAogCSAgICAgICBlcnJvcl9tc2cpOwotICAgICAgYWJvcnQgKCk7CisgICAgICBlbWFjc19h Ym9ydCAoKTsKICNlbmRpZiAvKiBVU0VfR1RLICovCiAKICAgICAgIC8qIEluZGljYXRlIHRo YXQgdGhpcyBkaXNwbGF5IGlzIGRlYWQuICAqLwpAQCAtNzg2Niw3ICs3ODY2LDcgQEAKICAg ICAgIGRweWluZm8tPnRlcm1pbmFsLT5yZWZlcmVuY2VfY291bnQtLTsKICAgICAgIGlmIChk cHlpbmZvLT5yZWZlcmVuY2VfY291bnQgIT0gMCkKICAgICAgICAgLyogV2UgaGF2ZSBqdXN0 IGNsb3NlZCBhbGwgZnJhbWVzIG9uIHRoaXMgZGlzcGxheS4gKi8KLSAgICAgICAgYWJvcnQg KCk7CisgICAgICAgIGVtYWNzX2Fib3J0ICgpOwogCiAgICAgICB7CiAJTGlzcF9PYmplY3Qg dG1wOwpAQCAtMTA0NDMsNyArMTA0NDMsNyBAQAogICAgIHRvLmFkZHIgPSAoWFBvaW50ZXIp JmZvbnQ7CiAgICAgeF9jYXRjaF9lcnJvcnMgKGRweSk7CiAgICAgaWYgKCFYdENhbGxDb252 ZXJ0ZXIgKGRweSwgWHRDdnRTdHJpbmdUb0ZvbnQsICZkLCAxLCAmZnIsICZ0bywgTlVMTCkp Ci0gICAgICBhYm9ydCAoKTsKKyAgICAgIGVtYWNzX2Fib3J0ICgpOwogICAgIGlmICh4X2hh ZF9lcnJvcnNfcCAoZHB5KSB8fCAhWFF1ZXJ5Rm9udCAoZHB5LCBmb250KSkKICAgICAgIFhy bVB1dExpbmVSZXNvdXJjZSAoJnhyZGIsICJFbWFjcy5kaWFsb2cuKi5mb250OiA5eDE1Iik7 CiAgICAgeF91bmNhdGNoX2Vycm9ycyAoKTsKCiMgQmVnaW4gYnVuZGxlCkl5QkNZWHBoWVhJ Z2NtVjJhWE5wYjI0Z1luVnVaR3hsSUhZMENpTUtRbHBvT1RGQldTWlRXYkFLTFNjQVZiZGZn SDAwZWZmLy8vLy8KMys2Ly8vLzZZRXkrODNNRWJlZXg3Z0N3ZDZ3SFBBS0N0QUFIaGtlbkhI bnRLU041OHZVK1FQZVVDRjlLUHVQcHVyNmJsOTd0MmU5YQpkWHNidmk5OTkzMjZPRlZXN2oz dmkrOHI3cmQyQUFPOTB1b2tLRG9XNVBlQnFrZ2U4TzRQZXl1ZzNqdVVkQUJiaTdwb0MyTGNu S0tBCmMrSHdFc0RFNEhkM1lFQnFaWUZPNDFCMG1WNjNSTDBEdHRoOUdIZUFHQWFBU3BRS0JR cEVDMk9uWm1nRnJVQ1NRRUFBUUJEUk5Kc2sKOUJvVW5xR2FqYWpiU242VFVEUTlRYjFJSlRR SUlJaE1vRU5ScDZtZzlJQUFBQWFBQUFBTlUvQ0JTcVVNSWVwb2FhTUV5YUEwTkFhRwpDWUFq RUFaQWswa2hCQ0RUU2VVbm9wdHBURWVVOUI2aHBOTkdSbW9BRFFmcUFtQ0tRZ0UwQUV5Q2Vn Qk1pYlJORFJwVEEwajFNbmltCmdhQjZCVlRRQ0FFSkVKbE1ucWJVeWFLWVJrYURRQUFBQUdo dk9ISWVvdlRFVkI0TUlMS0FJRU9uYkFSbVFuQUVXQXBBaUlDcUNxQkgKTElWaWtGa1dJcW9z Z3NJc0FSaHRJUW42VDZ3Vi85VU9ZNm1URGR6d2tENVBRZ09iZm45Z1l5QjM1a1Yyc0s2cVdm NUhkdDhpZUtuNwpQd1crRTQ2ZS93VytNWmk1RVl1RkdYZTVkWnphbHpHR3ZHSHhDeFY0d1Bn SXdmTmpXWm5nUEROMHdkcG0rSGMrcGkrOWdUMEliN1dFCktNbU1EaGdzbEVBMHlDOE1rT0hF S216Q1EyQkEzaXhpUlNDckNMQlZJS0xCUlZCVkVtSVE5NlE0UVZ5bkRqS2hpYmxvcGpKRHda L3YKektUU0gvREp1THl0UURUS21KSjBFbWNySnh2UVYzczhQSDM4K2pyMXI0YjRYdWVoNzV5 czJyVlZwNGkzMDYxVmZDTWFxNUx6SCtKTwp5NXVYMllJMWRQZFhPLzdUTUxIRVBXMnc5UHNn MHBxdG1NMDkxRlJaRTRqV1h6cnhRekF4cE1NeDBqNWo4Vy85Zi9hUHBTUzNNVTZ1CkpzSEYv OUxZN3RlSlREV3hDemo5K2hySzlTa25DR1lYTmJTVzIyaGF0a3JVTGFXMkZ0aGFxMnBEd2Uv Q1AyQTdBV3JGekNsZnBWZVkKR2JpdDYyTnFGdXZUSjNVdXdVT0RDT1RxSU16Rkszc3JvM3ZQ bFJvbVZaYjlQSE55ekVWdmdRU3FCVUxJVUhHQ2VFaEV5UkpEdVlURQpEdUVEdFlhWUV2Rmh5 WkNITmdBYk1rRklISmhxcnR4b2hDZGZsUCs5TDhQU3pzYVh0N014aGpxeXkyZ3Rwckt4VWNz dmE1ZzdZRlhLClZNSngyaGhCeFBwTjBkWGNWanVOT3FkTFZKeWNablQxcElpN25GM2d6Uzlj b1ZkUzJKcVdjc081MW5CMUVkMEhUbE8wamRkMWN5dHMKZ1ZkdHMwdys1c1llZk1UTllWYWpo aWU0VkFoak5hWlZBMmVHd2lYMVhUeFU5bGtWejI4MDVCQ1FhdGlWRkFSdVZYTEJZd1hlWThX RQpWRTJ3V0tvNDdKZWxPY2MwTjRiMG5NZXM5bWJQQ2p1VkhoMjVZTlpiT3VaUm5pWWU2bDFj dTZMakhWRGRobGRUWFhlbXFyYXRDQjBFCnNuYmRYWmRuYzBON2VVTm03VVdWSlJXbUxSMVkz VjNzdnhybE5GNUR1TUpwOTBhQldJVVJERjBBa3lPWDJNYVYrcDU1ZXJwMVdzYTEKTDVHd3NM VzYzY2FLYWRZdmJXclpzNHRwWDErZnYrSHI4UEgxU1FrQ2RrQS9sU1FWR0tMSWpFVmdwQkdD SkVSUkdER0xDS0xGQVJrUgpoRVVSUUZGUmdvTElzV0lxakVGWW9NWkZCWUF2dVppL1Q0bnhq Uk5iOGIvRURyYUhtRE1kNnhCRkl3VVFpbGFRUzB2OUNaWncvRThQCkFPd1BVU0QvcUlLMmxW c0U1MUlSYXFnTjdJSFJoOFFzK2gvSXIrbGp3bW1PODFHY2VUUTAvS2pxRyt1S0tGTmZycng0 NjlYTFNlNlQKRUhMRklhelM4NVJvUjY0SlI4bEZOZ29uWklBc0FFWXBKNjJ5S0tDeFZJc2dx c1NLQ2tXU0Nxc0JTS0NpcVJSR1JRRkNMRlVFbHBVQgpWVWdMQkVXU0xJcEZVZ3BCWXFnb0xC U1NDeUNnTENSUllFVUZDTEZCVmtpd1FTQXNGRmhCUUVZUVVBVlZrRldSVkZGSW9MQkdIaFBZ CmVRZThBa2srYjUvdGcxK1orR2Z6ZVlqN1l6cjhPWDFpcmlNcTlablI5N3dhWnRPa0prSTUx cml4YWZTMmgzaU9GS3VzWHlxSXZFWTMKWkZROVJqT2FlTVNZRW1TVFpiRElnUG5BdkZ1Rkk2 UllPbXVOMTJabkF3MmJKNFUvQVVnZ2VCUE4wV2VOSkV3aTNYbG9xYWJVZFVzTgpFYlpwMXM0 MnEyUTFCb04yRXlJRkF4aEZxbmhuY3hubEtjbmFGbVZIaFJSdG9iV2FNYm9jY0I3dWRORFNJ YWk0aDhoSzVnMnN5bnZJClRVcVZ0SzN0MVpCTXMxY0FPY3lXUU80SUlpZ1NSaEVwUXMzTGx6 YncyVFM4RjZnTzhJR3lneGhaNEZIeE5lRU5VUkRwdG0yTkk2TGkKTk96cTZIMER3WE9IQ2N6 c3hHLzFNN3pkWXFNMnQ3dE5rUmhHZDRndTJkTGcrMHZFMVJKS2pSRnFlNWxpeVNBZFdBeDR4 bXFOWjVxQQp3amlzUW1vWVVkMUNXdktQSEN5R1VkTmxSUW82Y0lIY2hoR2thT01maktNNUFr TnJxem9TU1RwR0NrT045dDVrbDJjdENnV2NGMldKCjNNYnFkaEE4b2VCdzRSZkZCNmhtS1Vt MHJYa1NvZysrRG1yZFp1OGhUQ3ZVVXRvaEpHTnA5TENiVDZnVXV5YVhkVS9NQjVLUlppV2cK THdFNFFLMVEzWE9pejV4c2pPdXpPWmJneDRLYlVzM2VlMXhyTWVIcTdJOFhiaW5SWlo0Z3pT L1RoQ1VkbXpwOEdZdk14QTZyUHBzcQpzY2xzV2NwTXNZdk1ORVEzeUI1QzhSQjhVWEVaUzNs cEFwbzJsYUc4cklKc2FobUFvRmkyaU5CRUtLTWpkOXQ5S2ZJVlM0ZzBoM3dECmF5dVZ5TnMr K1FTa1NMOUM3RlJtZXVIU3VwK1lkTEk2YXh6MXNnZGl1WDA3a0hFSGF5NmRsbEVWRXJvcUtX ZU5wTWdGSyszSjJJajAKU3V5cDZObWdNK2ZyZXlXYXdocGVaVnlQeUtHSHphVmZBNkRuZ0tT SUpFQkROQTRSY2pxL1VINVJoRUtMTUJ3OGVOTlJoQzJ0YTAyYQpKUG0vQlkzMmgxa2xRNlNh UEdpUFNnUXo2UklzT21FcFFpak9XbnlDQkRDTkNRbzBDTDQ1c3JVU2pOV3ptTU15ZHVXc1ds N3htVU5PCkEwUmROUEQyUmpqV3AwYlpQbkZVM3hvalRoa1hIQ0dEVVJhSGRhRkNETVFkblJR ZzNGRDVwa1hMQS9OTUtPRWJZalp6RmVGUDNyN0YKaHdrS2lxTXFqSUdhUGdLUzNSVnFzeTFj OGg5UHJVRFVOcGlNR0NYQlo4Qnh5WUl3ZDQrOWJQbktwdUp5cmM5bm43WGRFai92bjY1KwpV c2YxOUkrc0pERkgzNWhlZmdFVXZLaWJpaEVFTDk4VlNVSktpZzlSYmhqdnZ2RElqb0tOdEs3 MU0rVFY4UjNFYWdmc1R0WE5ERnFtCmlzQzBlV2xjajFxQStaYkQ2elBnTWZWVTR0ZHFjbmtL eXlXem1jajhuaWI4ZlQ3Tkp6dHNXTEdMR05xeFJMWkZyVXFWbGl0YW5lYmUKbmdzN3o2L3Vz aEliUGI1SFBtZHZFVk0zRlYzS0FjTlRjVzQxQjlDRHAzSkdWNzRsQ2xzWXNaWEdyaDJURlBH QkdpcFhtRWVOQTdzbQpWS2E5eVFrVWwzbW8ycys0YjZmN2psOFMwc0pia0Y5Z1Nrak81SVNL WWxoSFpxckNSdlFXa3o2VkNBMDdTL0FzcEsrQ2NYVkYxNWliCmRoYVc1QlJUTTI2TUdVRVZB WTc2OGg4amVUaEJNcjZCenhzQnVoVVlydFpWMVdsQ2dhMVFMaUJTWVBmZXhWUTZ2NW9mK29N T2NNdlAKNCsvMis3NWZBZjhpVG9TWjR2QkRiK3BMZTBTeDlTTjVkREszbG1iVjFCSzhyWHVz M3BrM1R2Y2JlMmVkTktwMkJpdkY0R01GMXd2RgpRMGphWGtxaHc2S3JYbERmTHREZWNCNi9L WGhvWUZ0eVYzTkhsdDlIMFQ4aitPTTlPak1vMzRNaWtrV29pR1dnTElqVjRPWDNsWjVzCktO dUpJQlhPc25WWjhJay9GYnE3T25RR01LaGpXYVpYQkFNWmhxbFRFSFI2ZXZHZk9QVnpHUG4z ejlmNTJzNm1EclhON3JIUGVkZS8KUGF4dXVwSjUxeXNYUE5PdXAxblhUYmpqT28xUEdxclBk OFZFMWZpTHpycS90QmhneDlNTWI5RnRnS2c4UG1Sc1NRa3ZySWQ0ZE1QYgpCS0U0K2tvWXhY YUg0RWtVaHY0bmJ0TkJOMENFSnYwV2tsbEVSS0lPTVNoUXpGNXJxOHZPbEkzVmM5UDdaTzQr Y29vU1Y2N0s5RjdICjlaeC9hRDVickRRYm8wOTlWU2RJUmxUdkNHU281b0FVVGI4SGovYVZB cVdxdExDeWx0c3lRUFY4dlcrRUxQcmQzM0RQbE5OcE9sWnoKNXU0T2NTeUlpRC81VlRzSUZP eUE1QlVDMUVUckJJRjNFQ1lNd21FeEdBZ1FnZ013a0tKRFJTaDZCSnFNUFFSSWFCTjRjZ01C TlpRbApwUWtRUGpTMHMrMU1BSVpHU0VKK2FTQVRyRFFZekJJZ1dSb2tLL3RnWHdmTURQMnVz VDNyYTFNOWNaSUxmUHJFSjdzMUxGM0xZQlVvCmxqZGJaZDhZcWRHNWJyUUVBb1NnS1NicXo0 TFdFbEtyOWhNMGhkVzJvRjYrbjd2N2ZQNlBQNjNxdmhRMHVmZWdkbFI5OEhqVzF2YzEKaGJR UXM1ZjlscWR1VEZOWUhlakhQZm53MGpDeFZXS3dYM201em1PL3VtK1EzS0d4MFlhWjc1OUk5 ZzBlTFRmUllkVnN1NlQyZlJXegpuVTA0ZDJFS1owNGwxVmJ5cVJZMGNyc3FOUzdWczFiSGk2 aXlYanBkMDNNTHJNdFhEZFZvM2Jxc3UwTW9hc0psSGJkcTJWZEpERGlZCjh4R0tVVkwxckFR UlpJUUJmWjhQMk4wOTMzZFpyb3RWOVBxWHcyeTNDaFFwaHNiQlE4cFNuei9DSmxMV0ZCdWp1 Y01PSElScUlUbFgKdUVrZ05GcjVvREE4bVB5OXc1Y1FBbm84M3lrK1J2dDlKcGJib0tvaHQ1 WkNXcmJhRnRnQVcyRnREMjZKdzRub0VtSWZGSFFrRXNnTApvR1BQTEh6ZnBmQjgrR25UZU4v dHI1QVRxcitrcWpEbUdpYXZRckxSdXBibE9tNXp0MVpxQzFTM0dUS1h4ZkFCSVpmbndod2tx UUZJClEzWUVXUTVDRVhoMHdtNll5Y0lHTWtyd2toelRqTEcyQWlRT2JBM1pwaHd3bUpKdXdX U1loTVpwa0RFVW5DRzZBY0lRNUlwRFNURWcKYmlSU2JNQXpWbTZTWmFiTUt3TjBNZEpKV0hO TnNhUU9HVGhnY0lTWXdtbmgzWnNuUk0ycHBGQllUaGdhUUdrYVJhU0NVRFJjWWRZdwo1T2pM cVpadVBqeHZxdkdLNDRrdWxLUXZITkoxb3JydHZ6Wm96eXMzVmZ6bXNXbDJ1MlNiSWxwczF1 NTBadWlVbjZJSlNEK2JLamx1CjA4SXd6Y0haQlU4YXRjSGMyOWlWdkU5TjIxekx0QWdZWVpD c2Jlczd4anB5MTNWbHFLcVVSdE9TcWMzSk5kbHdxdS80T0pzTk5IODUKU3AxR3RaeEJOdzMz WFhNc1VSSWNjS1haWm92MmpUdDZwTHcxWWxkZDZjdFhqNzMxNTA3OVIxcDVmRmMzclhGOFVP bzBoS1VoaVlTeQpvVFNSV0xxcXlGSXRLTUpwbFVWVzBVVVpaZFBPVjJrUnJqTTZFMUkxc3Nr dnJUYXE5SEtjNEVnaHNvc3RMVnFucXk3Y21CdVRad2FGCjNORzM0bFNvbUptYW5qWjVOVE9E T3puUWNJY3lPY2xtU0c1RWQwKzZzc2M1SUkwcmFyVlpUTFc0NC9FMHR0czNkd3dNVVVtWVE3 TmcKNlplQnllTDQxRURua3BxRGpCY0NsWUhSdEZFUzZ2Y2xiSEtWTHBuZGc2WmRxTXJORTNi T0VPV2lodzFiVHk0akNhTHpuRVNuVlYrNApNaW1MbUxxcG81R0xZU2hBRnBDalZDb0ExYXJz SVRZeTBjM2MzdzdaMFJMditsdDVjd3ZPaSt5TmxMN2twQk50Sy9NNHBvaWNzeTVXCi90Kys3 bGxvb3kyVFRUVUJ3VkFnWWFsZDdpV21veWxoY1hsNVdYRXRKZ1pYS3BydFh4R1hVdG8vTFpx dTBYd3MrK21JMVRldUgwd3kKNFZlL2VybmwvZXgrNnJWL0tqNCtuYnA3ZUxPMzBoeTlJY1dl dlgzYnlsem1VdVU4VmhGVld5anQrdnAzZFo0N2FNdHp3V2Y4NW5ZbAoyTzZoRzJJYkJFMDF6 cDQycm1BQW12dU4ycG1lNzBlOGVZaVlxYmVGNU03QUdZTlMrRm5TcW5VK0VTek5Kd2tweWly bUloNnFXS1VyCmlvcVl6T05OTkRTbUcxZ0VEczc2aG1mRjA1N3RKYWxSS1c3emFkNzFqUnJj WE5wWUM0UFdnVFZGR2pLdkFvQ0s5bCtQSSs2ajZ4ZTMKUFhoc3hCQ2ZPc1Fsb3pUNmxucXNi dXJtUytjSXJWdGNadlRNekJ5Mk1WRnRFTXlGdGx4VFR4ek9oMldaSDBpRWNPbEV0TjI1Sjhm Swp0Q3lLbHY1VGZZT2F0NWhFY1VKQ0N0MHFuRDJ2ZnZUaGpLS09XbDRLTld1VkZvSndRcDRV a3NoaGlpd2dxMk14TGZFa1ZZWG1aNUpZCmxwTmFSeHRnekdjU3dkT0RaU2xLUmVXTHhDR2NW cVI4WmxNcExRU0NaTzlPY2VteHVNNEFnQlFQRXdsa04yY240aDBBRUVTRUwvVGMKbmVWVENG MTAzdVV2a3BVWldpcUtiWDQxN296Rm92Rm15ZWVZaWViV0tMSVRsU0xJSlFnQ1R4VjlqWTRv WldsUTRySTJua0VKakREQwppdzFxd2VxeGhLWmVPM2hOSjNIcDdjUDU4OWUzQ3Q5ZXV0NThY V09jdjZ6cnh6MTBaNzdpcHh5K3ZqblVadCtURDEzelNuZmpsUlBPCm9uZGNKNDV6dm5QaU84 NDMxellxNkI4MzJwVnhNZHNTWldXc1l0amtMTEV5b0hNeVp6RHhoQ0tMcExEV3JpVVpCYUFn RzB2b3pJU1UKRnBFektzamNUQjRldzFPd2M1YlhjVHZOckR1S0FTazJzSVh2RU5vd2RIZytR aXhjNGFPNHhQWFdMeEtVUGJJdzVOMWpoRnlDTnM3QQpsWVZKZVd5Y3dsaklTL0lTV29nMWtX bG81V2pHUXloQXBjOHVHVng0SmJVclEwTEM4d2hRcW51c2hoWkNkVDVkS3BkSXhSMm1MOVBY CjVjWnVnak9wRWFmMjEwRGxrKzZGSTJlODdMRHlid2FHQ1RkekNwelJ3OW93bUVkaWJ2ZHk5 dmhsaHJweHJIcWNweFdrYTNtVzFIMHoKT3RuUG00ZHpYUTBlaWw2cEpBT3FRT2s1N1lkS1Nr R2RSODYxZzJocWlYQzZja0x2RlUwUEgyWDFoRVJHbXVxbk5WbWszTzU1cHVUeAo1MmtlVU1p M2pnV0dnTllmMUt2Z1NIemFpRjRTdWlTWGJ0dXFuNloyMTg4MzJ0RWs0NFZRaDNPTC94NjhN RVNwcXBMMHI3d1RsN0tzCjZlbVc2S3hKN2ZXeWhWTWgyQTNGeFJtU09vUlpsZGhXNStieXBo bk16TnBPTllDQXFkNDJxbTFsV2NsWnlVSndvbmxOSlJSQ25wVmIKSTRVUitid2xCeldPYURv c1lHTGliTXlSMjdpMHdMcnk2NUxBUmhlUlJUUkloMUV5OG1RYVRhWkRBcUpFSEphV0ZwT3J0 Yjd2MG5kRwpYV1BueWoxZDIzZFBIcEJzaENHNTNUVHBkRDBvb3paRHE3Q2Jod3E5UFVNNWJQ MzNhdW45M2Y5SWhveTViTkQxNmJQNGJ5b3RqT0lyCmhzb3dtcTBkTXRETXNLeUNYMi96MVYv WjN1c2p0Mll4WGIxaVNBczdPdFlWM096eXRNbmF4WHc2aTlEQnJHTlp4aXJiR2dwakUxY3oK V2E0MlkweE5PNU5OMUVPN1ZKZTlvaUVXUWQ3bEZjS1dVRDU1NWtpbGowTHBjNW9vTG9hT0hF N2I5bHpWMHQ4NWtvMGFVWlhRUkNkbQpqdHZzam10NVZkeWhvM3NVZm1VaFFZdWJDaUJOcG1N bTIzRmtDMHFaMGJFWFE0KzJZZzVFUUM1YmJpSncrc0pBQ0pjYlMwMFhNakF1ClFKcHdqa3Vp U0FJZE52ajdqVTdodmJzQkFEQ1laUTVWTnpORVJFakVKQkpTVHI5RkVhTVM1NlNmaGxpR3NI VDlGT3R2NG9oK2pzN3AKakJJM2Y0L1pSdHQzSDFldXZYSWhVVnpkZFVwSkE5U3hIWkRBOWhu WVBaaUZQWGtWSDJKMGkxaWw4WjdVbktsTlZpczAzU2N1TVVWTApabXVZOW9paXFhZTg4NURP NDBZeUxUb2VScmQyUFBUc0hUeVoxSHF0TG9ZV21xbTlPWHhxdWppTVRuT2M2VDVUcHZJVnBx OUlrM3F0Ck85MWtFUmlhRTJpanJkM1FwdnNwTGhDYUoyalRhMVoyVnJPU2NOMzZPV3psVytt MXM4b2FzNVl4amJDNUU0U3lPTkNvVW1CTlBncW8KVW5RK0pIbHV4U2ViSVlOWTROblI4akE1 QjZsR2QrSTJvWk84S0UvY2FsdkdCYmIzODVGMTJPRzB6WFRsRXVjQ05kNXlUSzNCeFp4WQpZ dzRrcUU3WjlEYmNIenRzMXZCdmoxcmdWQ255UUJIbDRkNGh4NUNLbzQzV2xTTDJjb08wS0tU Nm4zTnFvOVdPVStIcHBWeFZ6NkhRCmVBNXllelJ6SzJ0WVRKVjVrNUhjUlByaWR1ay9raFdo Tlc2YWFpaWRxdEUzcEZZaUNGNUp2VFp5cWJHdHdKSitpQjdOdWNjdHdKaHMKdVlOblpGYWNI R0ZiUTJoNXVwc3BEZFp5N3FvbzVwRWN3N1pxMWM3YnNhNno1Nk8rc0xpeUMxRk9KcGRFRDhD d0NKSDAyak1pSW9SMgpldnFjOVRrOWJlUjMxNkYwMjJhRThERHJ0cU1IMUhlWWNFekVjWjRI cWIwVFNzRUlUSllCTXBNQmlMSEhFc01QSmF6Y2JQdXh1eXJ3CiszMjFYNk5YN3RINHJMeTBl T1dpVzY3N0x2dENyU3lQUzdaTnEvUm93MWJHMzNlbVVNTkhMQ2lPZnVVY04vR3E2enBsODVh TU5GMUUKMUZaSm41L3RMOXBCSlNVN1JVRGwvV3gyVmRaTjUwRTdoSkRjS2dRK0tQeHV0SnZu OS9qMVR6OUFyTUFwYjR4bjdsYnVkNDArdnBlNQpKalV0dFp3TjRUWGE2NEVXVERyVVBwM1Rv blo2UXN2ZDZqNm9zZnR6ZmJ2cnZmY0YrWmVTamRMQk94VE0zVDA3YjFVQnVqTE83N3VJCkxs cnk1bFVzemZkeDNkd1ozVTh2Smt5MFkxTTZpSDArS3pqQmd6R0tFbHdGL0dJK2hXdWM4RERD T2tBNGRnNkYyMjR4ek9vNFNRQ3IKMnpPcHNjOE5HMFNKYXFySU9ObjY3U3lYbXhFVFRvMC9K K1ZlK1FsZmVORVozUlZWQ2l2YTY2MnlHVyt1VmtwUkg2bTJtMDlVNk1KNgpITlRRK2lUejVv aFNTQXZQZ1lXUjNTRklRaFpXbjZQTWV1dHV1NzF5cTBhb1QzcTYyaWJ1N0JDOVpTc2cwdzZk SlpsUjQxbEFaeXR0CmUwM014d1NMVTlBUW1BZ0RJaytYcU93MDdhMCsraWFEaW5ieDhDTzQx YVdDRzJJNlJzWXFUQllNbFFzWEE0WkJjYzBzRXN6QTBMaXgKeEVFVXRJNmNUK3RhemxTa1RW bjcrekJOU3NSb25WTDQ3dFNSd3NuaUtkR1E1ZW15SGNKTEdHNEpPRDFkeGtPMFR6aWRYTUVN M0tNbwo2NEhPaE4wVUk3TkU2WGpEOEx3OEdySGJTZnUwZFpzMlRLTlp0Vk01b3FLU2dVVFRF TEp5bFpKV2VzSW1UUkwybXkxeVVsYTZJMmExCmRNcG9WY3N0R1pmSGl6bDIvbGFYSExWM2pt c1c2dE96ZWRZcnpWNHN3b2h3aldrUnNvN2I4ck1QZFY5WG5GZG5NNzRuV1hEWmFVcVIKRVN5 aGhkbHl3cGlHR0tiem1uQ0k2bkd0emRaTjdZdjN6YTdUaWlKZTE3TXQxMUhhejIrOWx0ZXFh S1RlVmhTZHBkenBwMVk5UXFyYgpDcnFGcTRUOXFxNjdQSm9uZDJ5NGNQSHRvMmxOMXUwZUo5 eEJ4a2xKcjNTaFBVNGk5S1R3aVQzeXpqS0pWblBMeEU3UkU4cllpTFZzClk5ZXFNcnBrUWhH WWlMM25WRGVicDVlK1czanhkN2YvMi9Fa204L2tLVDc2aWxLVG8waVh0N2VyTWJ0RlVTNVJM MjdWVXVoZ2g2MVQKT1cxSHliaEVocmozMnA3YVBGTUxPSHhEdGJLT2pTcU9EaDQxVGJLTlVN c0d0dFZHeWpDNmJORTNxazMxS0dyNk1wc1hXY3R5NmluSApYOWlrZnJwT1ZJaU5uTHh1OFFp aUUxVlRoanV5ZkhXWlhteTBmRTN6NXV3L3QxWkZ4bDJ6RHRTOVNiclhiY2dSdGtVN09vUVdt UnJmCnR3ZWJ0azRET2tQa2o1SndJczVtUHIzVXVLblZlUzJ2MmQ0ZTlWeVZYdDUwYUZ1Tmo0 VlJNdVZXTnFVYnFyUTk3cXNPVXR3bjFlSE0KQ0JhSVVseGU1N2Q2VWljcnJNOTJYTjcydmFB cFRBb0tucUJ2Qkt1MVkyZ01GYkZhTllqV0tocFl2S1VSc3k5c0FIbldON3JZTmhJVgphY2xn QWtpVnc4dmpXbFlzWnBZb3BpZUpwcXJQdW96UmVpODJYUzJVR2hCa2l6WlJFR2ltQmhwUHFl anAvdTIzZGRhaGVNSFNwTzZLClRUcGZFdlVVdjlKNWRYbWxuTy9PK1hhTU81WVRndHVzclUw Zm4wSkJvdTFiS3ZDMUhFS045SGM5dDlKb3JwR3VKMlhla0UyRTlZbDQKN2FyM1J0enArZXJX VHpwTndoVFVnekw3TUVRZG5nMzl6WlRlZ3ZBc2IwbGNQS0lsdEp4NXEvS3dSWXV1SWd5cVR3 VFhaMlg1TTg4cAp0a2tPVEo1TU1VUkoyMnUvU1ErTlplT0hhRTAxMjNEcmVlWjA2bk9zM1BV MUt6blNkbFk3MXppYzMxOGFQY0pRSkIwMnB1bW85T003CmNPS2FKSTFWZlRYRGRPSHg4TU9G bDIrbnFGTjdjZVZVVGVYTVpTVlg4bkpIbjE0MVhhM2xLakV2YWpwYXk5MUtPamZqQko4amdn a2oKcmV2S3ZKVCtWUzVmcFZMdlUwNUM3OWxwWkt2cGFqVkQ0eE5IRGxsVnZJcWhxbzhiSjFi b1VlMjdVOGYxaWxiK1pycHhFcTdReGlYawpWcFd1SlU5OHVHcXFPOG9pOFgwZjVsMjhyY0pw clBiQzc1MGpXakYzaktpYWtQdnQzdkxiRWJvM2hGcnRxbUo1bTIyVW9vNjIzZTJGCjVxNk5I MDlLMGJZNVVXZTFYM2FHWEhXbDJPcFRScmE5YkVDVDFhWFhEUVVLd3JtTVJHS2lncUxhaUtV UVpLYTJDRW9UYUdXSGFIaTYKYlpxUXg2bWpsbXNKck9HVjJacnczYVBmMzFYYk9PWENxdVc4 cW8zY3NKdlRSWlpOaFo2Y2NaYk5WYTBaVXAwN2h1OFlkc3FxcHlocQpjVWptSnZHRlVQSFNh MDRhTjJ6UkM2NnJaMnc2dmtZbFpnVEt5MFJhb2JsMTVsRkpSSEljc2tCMXk5RUxxNURuQ2c5 ajJha0txK0M0CnArdmlZaFhkcVBpTHJONWpVWjFjTFZUV2xYWVBoUnFwcTNyeXdLb2l4d2J1 dmN6RnpGOTYrbnR3K211cU92ZXEwdHVIMDU3YVYyZmIKOGJncmR1ZEhTNmwzUGplc3hXdFZ1 ZHVaZDZ0UGk4NG1kWWJScWFwU3Q1WlVtdWs4YlI1K1hGREgxSE8yNStnVzhKM29RdTV0MHo4 Mgo5V2ZBNDRub1BQeEhsZGRoZHkrUUVQTXhRV0NnS0NNOHh3eTBjSnVheHhQdlhiaTFzb24w aDRwTXF1M2ZqK09WWlJqdGxpTk42dzJmCmkwN2ZjbXl5ODZaVVVvajl6M0pKNmt3cTJhdW1Y VFZSdHUxaTlKUktJK1hqekNiYTlKR0U4SnN2RTJYRDZiWVdhVWNwbXVVSytPV3oKZHd3MmFY WGFPbXZMTDhUN0x4bzEyNnRwUFRoaE8wMUo5SjVUekozOW4ybzFjc3hDUHRMRFZMeE5zVGMx ZWw2djVTdjQxODAzaUlwUAp5SmJZWDNoSjBUV0VKQTZFYk5kaDgxTHMwUWM2NWdiYlNtbmhF OUZwWFVvbzVpczVVVWZibFZpVEs3Uk5xbzdjYjhzSFhQVHF1SUhmClJ2R0xteHBqc2ljK0V3 ZXg1SE96M050dVMzQ3JaaGhsNTlKUDR0czE1anVpdldZZHppZU1JU0xTODlVUlZIdEVOV3JW NmVRcFg3cWIKdkdOckk4L0NKYk5rM1NqSjJiMFVlTjk3ZWJpUjMwb3FSVUNPZzBWMGVVVGxK SFIwZEh5UGtRYk1FbTg4MDdwYms1aUhjSGpwdElxRQo2aXl2YUtweWtEV2M1RlZkMEp0RnVF VFJSRFdiUGk3alI5SzN6aWs0OHB5M3hjV2VkdEZ1UEdxZFdZaU9YcXZTc3BZOUtLdncvRFN6 CmhodzdlMTFXclZoaE53cTc3UmxaTnFnL2h6empSdTVlTm54OGVQalN5N2xodnZ1N1E2TXJ2 VDlJczlxc0xvYnVIbHBhcVM2ZExxOXkKczJic0llMUdQdFYvRzZicDg3Yk8xUHpFZ203WWZQ bkwwMFI5UDBsOEVlamtrZloyS0JaM0FJQW1aNzlKU2ZhOWlJejNRZzluTkJ0YgpuKzRzRC9h MXFXVkdJS0NvUTFzbzhycXErTEpudmp1OFBNTWNtMFY3NUNxb0dyM25vTFZ1aDI3V2Uzb1BQ aUhSNHJQVHUwTnZEZDE0CkpyZkM1dGFyV2cwdGNVMmpzT1NQTUtabEpHaG1iTnIxWG8ycjcy UHpJdTd6ZEZ2M1NLcVY0K21LNG9NREJMSnRtV0orOU02ZmZJcGYKQ1VwVXBpa3A0SHRWOW1I NHFUV29qTE5ZaWphVTNTcXN0Q3l6S0cxSnFXNXc2NlUzYjNaNVVheFhYS2I5N0w5R2pkYlRl S2FiNjFteAphSWhTUkp2dTBWVW1oc291N2F6UlF1aDA3WGFOV1pabm5lTkw3WVVVcml1SlNR c3FsS1FoQkpWTW1tNzdWWnROcG95eW0vSnBkNHNtCjZxL0w4dS9iaWVFenptZDNUdXpNemJ1 MVBVY1NhNUJVc1I3eGtMd1h2RXc3VlFDVGdaZENaSXp5cEt5STR6STNWSjFEeXQrck9jckgK d3ZHZzk5Yk5WSTBsUlRXdXFFM2liaFNFSnVYeGxvNXZHbkhFVG5UbS91K0lwVHFYTU9YanY2 TUt1bkR6UDE3YU1ObjFMbnowMXh1SApTaVJ5YWNUS3U3UWxFNDBrSDJEOUNzM3dNNjRTdndk VTVuc1ZLTWRRaFZXYjBoVjlXdGxPa1dvNGF2czdzK3ltNXMzZEdUSllaT3p2Cnh0eVIwc1F6 YU1GbnhveTFHZG92dHZFdkZhMTQzclpYNDNoT2J0bDltVmo3VDg5T0dKWlF5enEzVlQwNmor cVVxVGxDUWwwc3k1WWEKdG5qTGhWNU9paXlINFd3cDB6dzlPRlUyM2l5NjdkU1VWZnBUcGQw dzJkN09YS0dqS2psNnBDcTdSQzZrbDNFM0xMeitNUDMrdTRsKwo3NzBkZHZEWFpaNDl2TjZ6 YVBhSHRHR3IwNlZhdDJxVXBBVUZkVmFndTFjZlFCTUR0RUUrdjdPT0lqeDQ4WDVjQ3VEWlB4 bEg5ZTZsCmpaaUpmdzNkV09penNoL2R2bEd3cGxtZTN2dlpvdTg1WDZ2UXNFTUdRbkpPUlhx UWV0QnR2MmV5aGw1c3hkd3Vzdk9ydTFPOUhZM2MKRDlnb1AzTk9kbnAweTI4cTduZUNNek9z dTRvMHN6cWxueGVjNStmVWU5OENoazJPaFJ4WEUxbTc5M0w4VTZVWGZrbnE1VndvbzJhUQoz cFdjblRodis3Vk9mSzh1V3FkOE9ORktvYkxzdTkvTmFZMHhtUFA3L3pZUTRZT3MrY2NlaEti d2NTVDRNdlpFUERQdDY4a1RNMGVNClpJc3FwVG00OXFPMGUzRm5ETW1IN3R2RFRPN21KUjdw RlhDdGF6clJ6R0d4bktHTUw2VnBTejFOZHdzMmRyTjd0VjNObmpYNThUbm8KeHd2eXp0U09V N1dScGluWGIybTY4VGNabGgwcXRUQWNvRHlCdG1laEFkQ0VhRERTY0hzT1pPaTU5Y2hoOG9q NGRla0xQVGg1NlAxUQo0VDVvNTIwcHB6dmJSaWs4WXI1VzA3WHZLMjM5MC9iTG93OGJhYk5u NEtRKy8yVlVmeVNldE9XM0c2RlBJaWRxYjF2RVdiSnZTMTZvCmN1bFUzMUxENmRzcVdRd3Er TXVFUFNqWnc1NzdyV2RkWTJ0YmNpY0ltblNuZkc5K0xzV1ByUkd6WmFhN2h6T1ZHRHBOMjVk N3U4UkcKWnppMGIwbE9WSjd6VXJGTHUyY0tOWEg0S3RIS2JabzJjem1jZkg1VGxSUlZvN2Er bWpWVnlxM2Z4bEtzaVNWdW9qN3RtNnliZDlMdApueGxWQ3JLejMxR1RWUGx1NlRidDBNTk4y V0dpR2pjNGJuVDdmTjFtWFRSUnc3YnUzVGRvaDJtNlZhc0p1ZWRaWVdhbkxWeTZVYnEzCmN5 bTZUY09WSFdYcFZxd3UyY3RtamROdzhiTms4ZE10RldqVnVyTGlBNjA5UkFCQUVZS25xVmFB OFBVV1k1R1diWFZQeHpnSjlsWDYKdlQvTlVBekZYRnBLYkx4ZzFndk84WXpnbFJoM3htL2I0 Z3IybHRxOWRlczN3SGRUUGNsMWRrZnQ0YWZHdkRLejFMSXhieEpGZDc3Nwp1WVpVSVdqdVZC VlJJaVczMWhYVDMxcllYTmNvUUpDSDMxK21qN0dCTjg4ZGozMXQ3ZXI2OUt0QmhoTXdwanJh bGRkVzZlSHNUUUlyCm1iTXZhSGFHejB0b3BXVlZDWExINWI2ejBoc3cyUWZTRm5heXM0WHMr eStoMkQ3TG9PRlhBblNveG8zYnNiYnFxODZORVltYnhzQzYKaXFjNFp5ckluTkNVdU5VOHJX ZTVidTAyeUo5NzQwang2NThheFdjS0taMFpmc2tzbXZPY29Sc3BkL0xoMnY3UjJ1ME1nOHQ4 SklabQprbHZib2NQQnJ4YTFYbW85S0hGRlZVeTVxTklBTWRyMXpWRTJpNmFpR3U3ait2YjNM U2JIMzJ0SE1SeE9LUXZPVWdZM09ITXFRc3d5CjlNcjFiS0NoUnExNVVZWCt5YlhqRjljTmIy UkZXcmJ2N1lpRm1NL0UwME9sekt6dHl3MmF1OTlsa1M1ZHQ1ZW56bFpSaFJyNDB2RVMKK01l bnBQSE9HOHRIajAzM1pVWFhzaDI0ZXJwcHVYdkU5bXNlMFFxYjRicFRiT0hMVnpLVm5iUm9o MjJZdjV6U2s0NzNxaUk0blNsTgoyaWM0WlRiTTllYXQyN0ZGaThIc2JJSkxPRGZ5MzFsOHd1 bmQwa3V0MGJrZEhSZ2VqVEloQXVJdWdVbUVpT0JoY1hXUFNiMEpYODB1ClNpU0xDZ3BUenA3 V1hhT1h4T3J4b3F0ZlZOclp5NmZXNzMrVVJmRGhMcGg4YUxMck5OeXRrb1JoaVJKczZmRlRE ampsUnowMWFlT24KaUcrYkx0Mm5jM0hGVm1pN2x1N09VS3RqdkVzeDIrazZjaHN1Tm9pLzFk bVpzMm1tNmlFR2c4NTE1NlRKd2NTaWhGeVJqUXZXOFp4RQptM3plSXpsNmpXZHdWcXRSdlVH Yk53YXYydHE3MFljRVh2WlJJeFN0UXZuZElPMmdYUXpQRThuVjVZU3dVK05yZUptQ2VxVVFo cFBDCmVoWjdsUkl1OFVibmI0RTRzdnJSV2pHUjg1Vmowd1VFZ3pBR0dSTU5JaFc5RWxRWktm UnV5ejNLMlZKalo5SkpMYjl6TXNOMTMzZU0KN1dzNS9xSzZXbjJvNXJQaWtVempSZ1NERTVz czM2Y3FyWFIrN1ZFN1B5YWQvcnZOczBwRWR2T0xNcjhRVEhmbHpUa1VQRWt4RUpiVAo3TW16 SHRaNVdqSnllcnVLWWw0bkNaelJGSnBablJuODlicnVzemNzdWt6MDl0OVY0enp0YUowVWpX elFuSzZKVUp2YjQ5dnV3anBICnBpYWJ0NzBXY2R6Y3d4cENjMDRhY1NoVk5QRXRWdFV6aGVX SFI1T09lalZHTUdEN095RGdubU5xUFIyNTA3ekViVkxUeENUUk9mTDYKbGZEbHRxbzNVZEx5 c29qMjN5aWJoU2pPK2JSbmZTMFMybE5OTkVZclpvNFZyem8wOU5kYVNtMlpOMm4xOWFQaDhh S2ZURDV3NjIzNAo3bjBSU2lpajQ2MDhzZzFSNUh0SENyNDhWY3B2V3J4UjJ3MGVuODlQUmpy ZXMzcFVjOHpUblpzdWN2cHcxZTBOTlc2eTdHZTNtSGY4CkVwVTVVVDFkc1BUWHhSaVc2YWtQ ZnltRlUyenBvNldhSnZiQ3JpOG96MjFUcThhdGxXRU90Rm16MnR2dy9MbDZaVGFJVVEydzg4 NGMKSWJwcHB1R3owL280aVJaaFplV21tK3Uxa09samFTSU90T2FlV2tETWk4dUlHWm9XdUhN WkRpUllabkxndGNIQU40QmlrVExmZWU3aQpPODI4WEhZSE1nUFlHVE1tR0dKQ0ZOUVpJTkt3 SU9yWHExbGE3OTlpRmNBeldBTEYwU1FxaG9Jd2doY0VEV3RGaWF6WjJyTm9pRE5hCkxSQkdG cVdzQWxXSURhSWpYYXNMaUFBVlFrUW9SQUtINFFJQ1JEdmhkUjlNSHordllEN2lBUmtuNVFm eC9wL1J5NzU0eVVLd1dDeUMKSUxBWWtHS0t3VUVpa1pGVVJFWkJpQ0RFV01KN1paR05LVUph cXF0QVFsVlZVUlNoYlphdHQ4b1JGUVdBQXNGall4Y0phcW9paXFDcQpxcWlLcXF4aXFvS3Fx cXFBUVZFVlZWRVZWVlZWVlZWVmVRZlhEMmZZay9ySVFLd2dSU0JJb3ZWWXorVnM0bmdpb0Zm dzlyNStqWkprCkpOelZOVDlnaitvRzc4Zi9QN0xMM1puOFRRUE1vUXdRUVJBZ0NDd2lSVWhJ cEJTVG5yZjNnZTNPb1BqNVFucno2djRuQmN5QmgrR0QKMW1HUDVyTmYrd1ZuNC9WTE5VZ0RL eDFMSDVKTWZ4THh2cWYvV2Y4ZnZ1Q0M1Qi9wTkZTVzRZdG1IMS9sWUV3Yy9ZQ2Z6ci8xL3BQ UQpzY0F6QXhJekdIQk5BeVF4aTVya3d0dTh1VjRMR2M4U29vVjhmcW1GZWsyMUhRdlcrNHdZ WmlFNW9PZk53VFVzMk8yUUUvVm9aa2t3Ck9TeE8xVndLTE8xS1lWeVZ5VmZ6M3ZnVmM5SHBM OUc5UmQvbWYrTXVmdkkwRmhjTU1ORU5RTnpBMW95VmhEV0FDUDNrQVJBd1FFRmUKZzZ5WDZm elB6bUJSVjlGaEdUQ0JEQ3dxaENwVm05R1lpTWZvNlpmNEFZenRGRkxxVS9QT1B5L0EvaCtF OURlNlVWQWlSL29ma1pDdwptVVA0Rkova1JISDZhbEJiYkZuU3BNa0NFNGtVakhxOFlwQ1I5 Q3M0bjBCeGlWOERJK2lzSTNJa1FJaXFnNUVoNzZDa2dVRjVRMmVQCkhqaG9vbzNjSmIrMTAz M2F1WFRoTmJoMTc5K0tQOUtUaGw2bDJzOUtQYUZIdDdkTU8yS1ZZVWVMUExOM0tyWlZSdTRi dFZ6MmNOMmkKMml6TDB3OWVzUEdqN1NGMnJTcjArODJHMHF1VTIrOTlHajJteTRmbjBvdXM5 cXNNTjNEeFZoeTlydmowL09RaDI5ZXZPOVVOSExucAp5YW9QK083dDI3YzgwVmJOWGpaNmJr UEhLRWNIZys3Mk0velFuMmtKQUppakRKQmlSUy9UTUVZd1JCQ3lnZ2VaWVB6Y2wrQklsQnNO CjVxTkJyTjhqV2JabTBxTmVSeFptY2piWUhadVBSL2lrSUVxRnJSRzVISytvdUpTNnRUbTlT OVZmVDd1THN2NE5tM011c1B3VTdwaDkKMW5pRUtLUEdqVmdkVFlhV3VzMG1vcGhVV21nMTRQ V3NoRWQrdEE3S2pOK2ozQ0U5Y0hSQnpoTXZXMzhJZ2dtMXNIZnRLK0JCL0VrYwp6UlA1WFBQ ZzFXaFJZUWhSVEl1ZHRIOUdwYXpOQjZmWkxTSTIxd3FHZzZyVVdaNnQ4bW9UY1NleG04aDhI aGlWS0lNdkhBYVd1cVJsCndjQzI2UEc2eHVTQ0dTNWd2MXRoZzFMK2YycWFSQzR5MmZQZWRE Q1U3Ky9ycG9yUWtsUWVPQVFHbHVMVHZLenlSL0o4Zm0vby9vN2EKNG5yTnUvdC9iUk9lelRW dXd5amxxM1U2S3FNUXFjS3NMWFRVYVAwVTJSS0hISCtFdEdubVZHY3RrUDcwU3VtMTFvNlhl T1VNdXM1NgpXUXN3MWQrTFBUaXlFT21WNk1wMmN1V0ZuSEdIS3JQUzkrVklidThzTzNpclZa bGxQRGlYSG1TTU5WRTBPYmJyTHE3cHNKYk5XRm5UCmp4c240cTg4eXk1Wmg0aDI0VmR5WFRo d3k4VU8zTFJuS0ZrMU1yOU10R3JaQ3JubkRKaWROaGVYSHRRSFlRWWRLQTJSY1VtRlpjUUcK TWlCSWdhSHVxKzFQYjdOMVdGMUhDN1ZQN01wdjZmdytaVzdYY05sbTdZM0VYbXJ6aG9HRG80 TzM3NlRNWVlwSVFvTmxoZWJNekt6dwphTVJwekt4NHhtUUhFQ01TZ3dMeTY2b3p2SWV0b0k2 MUZmRGZWS2JaejErTElGRmZVNHJ5OEh1TWVsbmhrZ2lQRGdBZ0YvNkJTcUs4Cmg3VVBNRUFU M1lVb2lzSFR3eTYrSExZdmtxaEFDTDJwa2w2Z1RPUlNUSmREb1dGZ2NUc0M0ejR6SURIYVJL anZXZDFlSzdXbjV6by8KWmR5aGRaenpSeityWittVTJqYy9zYmN1bmJWK3pSN2VMdlNxcmRO UnRaWXoyMlRZMGI2TEx1R3VqRGsyY0tOVmxISDlycCsrVm5LRgowNnNxdUhmcFZkUmh3Mlhi cUhEcDJVWXZoZHN3cW9uRU0vUG12cmx5dGE3ZCtOYStPM0RacHpOdzJOWkVuamQ0NVVkSnRF TmRsbXFHCldwNG9tMmZoTERjMWx1cDZiTzJwc09LeGwxN3puRW9LQWVoY1ZXVW1CczJZQTUy aGNWbDlneWVUVWRyZVBwTlp1MlZRcTBieldmaSsKNmJiTFhQVERNcFFuNmJOelYvWlppVDFM UnYrQ2JoNzk3Tm1GM2FIRGRyTDZrOWs3dklQZ0QrU0htZ2lNWWllMk5SZGc3M2VUdkpUYwow UlVDRGZjVXdVdHVpZzFzcHh5bERZc3loQk1ZbEhOMVRuc3p0V0NlNXorRXhDWC82S2diT21n SW82eldhVm02a2xMdFpQVnI4OGg0CmxVclRubWttWkpwTjBrVEhxdzZvejlkL1pndEYyNXJL a1Uyb29vby9aSmhSbEQrQzdhcit0dS9WL0YrWmNkL011UTdqWGhQWGhhWXoKTHdvZHhjVkVu TVVTMHg3WXFKVEpNdGN0SGF5Rk1JWFQ0THQzeHF1MGVPbkNIOWY0MWR5Sk82UnlxdFhpN1Zs cXljT21yeERsMncveQpKL2pLVms5MnpneHA5bnAzTlJSODBvN2R4T05IYTJ6TERqNUtRbDQ5 T0VWWlJMZE5EWjA3Ykh2ejdTSkpmSGJsZDJvbSttYysxVFZaCjI1VmFVY08zU3E3WDFLWHBz dDZYVVh5YUZWVXFTZ202SllpUnFoSkltZUgySzQwSUZJdzRuU094eGVuTDBoRDQ3K2Z0SCtF VTB5Mk8KV3I0MmYzY01zMWRxc3VYVCtrbEdyYXp6WlZSby8zTlB6ZEo1VWFORTJYNHNMUHll L2VSSXJKbm9RZDZONllOQzBySldQTVM0ZU1jaAppUmlldEcwNDNzekcweE5OSi9FRjhHVG14 SExBK1ovY2ZJZWc3MWFtUzhYY3VKNXpFWjhocUpNaVJpeklQVVUza2lodzVUY1NKNVNvCjNF dTFjaDQ2UkFlaDhmZnpkOGYxZkNVNHdmWGhhaHhFYzRWSFE4d0h2SnJ0TTlUdzQ5bWUxTHE2 K3E4U1NBM2NPOTRDQU16am5TU3kKUEloSHQ4ejMrdENkQ290a1dXbk5iS25uRkNBdFVVMnhC Z2VVNlRJSUVHVFBKeEhCT2ptOUNONVliNlBzZk8vcjAyV2s2cGJjU2VJZwpsU2lZNUowWUpF eVkwTGx5S0tRT252QzhsY2R4c0dPb2NNYUVvSFZxZ3Y5SnJyemxUZkNWOHl3cG9HT0pBcE1D Z280ZHFPWWZrL1d6ClhSbzBjMTlkUzZiUDRLS01zVmJvZTF5SjZRMExDbk1pVEdLOGlKcHlq dzIxM2IvWStXelZ0N2F3WW9vZHhmdTRUODdYUTFOMXM2cTkKYUgwT2hmbGJDcnBoc2FxM0Nz ZmxWSEt1MmlFNU5Ed3d1c3dod25LTTc3SzVSZTFNN3MyNHluSTRuaVNMekFpWUZ4YndWdzRn WE5rTAp1VUt2MGN0VU9HVTEwRXlIRFIrYWJsaENxN1pXNmpzdWhWczVVbS9SdHU1ZE9GV1c3 TGh3Rko3N1FnVWhlWUY1TXdLVmNaekxpMlJTCk9vS1R1Nnc0YjBpUVNFaDhzN2V5UWJaUmdC WXhSVmhBb0lEV2dvbldrSkRoQ0ZjYWxlMDhPM1pFeEdLelVManVYV3c1Z0xqMGlPOWUKQk0y bS9pZFJ4TFJqTVpRT05BNFllWkhMYVVEenFOMXFNMWtMcDFYQjZBaFVZYUp6Y21OMjVRTjVv WDlSU1AxSW1ob2JpRkpRYUhFMgpFaTFJbWNPZmkwRDJpU1FGWUNBT1FyakFPUjNCQmdyY1lF U20ycGU5bGtXR3B3V1JRVkFJQXpOVHJNTGtzbTZvemprK0tYV2x4M2l3CktCeEVyTGpBWTF0 U3BZVkY1UW9Ya0FtZkowb3U4M2l3aklHQ1VncFJzRXNFS1JLUUFZQUZnSlNNTEJod01uZm9r UldxWFdxVzZIRlYKcS9YUERiaGpKSnVVdDd1R3lRRGJycTQzZmt0WXZBZjVjZ2RMNVIxZ1BW MmNKZmJCeGVMREk5NFFIcEJQNmo4Sy9oUDNaZE9sY3RoaQpXMHRMTXRGeG8yV2l5SXhHTnRt V1NwZzVTNDVobU51Wmx5S1kwY3l3VlJhaVpVWUpjY1J0b0xER1kxRW81bUlWeGJjY1FxYWFp b3JNCnFFSkMvT25VcHd3Z01pT0Joa2Z3MGJkUkNsNGt5VGN5eFQvcE5KakVVU3BwS2dyTXJo aGlXMnpNTXBWUC84eEhIVmJSRkx5cGlNMHQKYVZGU3JZNng1VENkb2RDRlBxQ2ZNZWMrTVBT YURhZTgrWTU3VjhHRkZQaDVJa2tFWkE0cDhhbHJJOTNuS0x1ZCtCNmFZcVlKRVBqWgo5TkZx cllzSCtSM1ZDUFdBaUcxWk9xL1ZGd1YvRXplRmg4RDdhbk1zTzRYSVc1VytDQzEyU29aUjd1 K0ptcWdBdWovRmJoa0l4Z2lxCmNUN3RZNWwwR2xDRURXRU9YOFBqeFBsOHJxRDlxM2p6NUh4 S2FUYjV4L1lUTENSWVFIUWFGRWFsOXh5LzBZNFdjY2YxTnY0dzZVWGMKdW4raHM5TjNhNVQv QkVJVmF1ZVo4TXNady9mcW05MlRkTHNzck9GWG5IRVJWbzkzUm9qbmJWL1AvZXE4UzZYY2Nl bmo0bTJUY3RaYwp0bnA0dWh1cXV1c3Bkd3U3eXVtKzFHV3RFcFNIdVdXaHBEbWoyMWNxclBw MDdYYUNRVTdSWncyUW9vMVQ3bFpUakpaUlJkd3c3V2NLCnBzcHVXN1pEdDNkT243eGZweWVM dFhUZFZ3MlhlZE5HenAvaC92dnRMbHZ5Zmo2U0tPbTZiNDllajZZZWsxWGhDaWhvN2NIajFx MlkKNlFxc25SV3JkUGxsdzRVZTMrMS9rbkx0MHcvcWJ1bFZuN2JjSWJzVjBzaGgyYUpDVUhU MkpCaXkwcGQ4NWUwNmMzbUpXVG1ZR2JNYQppQ1pNUUhlc2oyS2JIZ3V6N2xGT1h0VVVoUlRv OFk1YndTbkVRNUhuSUQ1K0FhTlJLTCtPU1ZDaFF6ak44bkl2VmxrQjFyVWZlenZ3CmhnZzVa aWQ4NlJZdEV5b2R3cUJpTmdQQklBZXRFbXZSbDIrRFlaNTliTnN1dTI1ODhqR3VvZzcwTm0r SU44NkF3SWpDRE1CRU9LYXYKdTdqdWY0cWJVVkFxWVppY01VZjNKVkNKN2p3NXVQTTZOQnQz UmV0cHMzQUhNUUE5d2tQUDhOeVpFRHlxVU1Td3VCQVlDNXp5UHhCaApCa1FoTUNSdDdRbUNV Yjd1NS80MUtTcEdZYlR1OWdrZ00rbWZ6TjZjMFQxRmJ1Z2xrSGlrQ0FkSzlicHpnVytxVDhU NGdTOEFNM0d2Ck9kbGdQUTN5eklKSXB1YWwrcnR5SENGM3J1UlZNei9UemFMOEJNVEIxTHRN QitaODVFb1pFZmNVVUJqV2hwMU4vTXYwYWhEaThCRE4KbWUwcnNWRURaNWVjVm5zQ0JlNURV R2Q4akQ3Smg3bTVyTDRqWWtpc1JHbEl5T0tuZDBYc1dPWFpISTdnbFc4NlhJVzJ1R1NNanlY dQorVktvK043OFY4MTBMeFhSNHVsSGJyV1JDQ01qdjBOQkhUOWZRcGNIYTJKdTNucUltQUxV N2xnTFcwU3BDRTVqZ1ZNczFFT0xXOHk4CjN4MUNmbGZQNmNvWUtLUS9iN1BGOHBWYzF5OS9z NVlGbDNSUVpxNUpHd1FVb0VkOVYzRmJOb2c1Q0NDaE9pQTN0ZHdPdFZpT3I1SjEKUHdpSUtC R25sVVVXZWV3dUdTRkVnR0RjazRnUEgxd1JIZjJDSTBLc1hwd2ZrSVdURFZBRXp0dVcxNlZK bnpVcTlQdVNHbXhad2M1cQpXWWNENFFaaDQ0ZVFrSHVXemhVQzh1L0J6Z0M5QXFCWmd0Z0xH a3hSVUNuWUcrYjljM08xbWpRaXAxUkVLS2VvaFJTMHlDOUwxNk9YCmJoQjBtd2IwZ1NWQ0R1 d1FlY3VoMmpGUVpyaHRlLzhiM3JhKzFaVkNHNVlDM3Y4RlVEWUR2YkFIa3oyOG9kWm5pOWRH bU5Ka1Mxd2oKZm5FS0wwdVZTdlJucWlHUnFLUW52ZVBwSVpuZ1kzeUFna1NUdllQSkhjbC95 SWlFQUZ3NVdvMjFoN2VJalc5Tk9UZkVzaXU3ZEowegowT1VnWGJMd2htb3BsdjZPZURHY3p2 ZTFiUmZZK3RxbzVkWVp4dXZqSXRTSGZiNW9KYzZYZUxyTkswRUJ6b1ZYOUxabE1ybGt6Mmt5 CmhCNkVwZXdLTUlodTkzTlY1R0Mwd3VUZk43eUJBYzhROGNPUTRiRmlDR0FpQ0pzU1hWMGNY WHV6Q29FWnl4UlRzZ0R5MFlEVUdzVlMKUUZSaXNuNWtFRUdaSnJYRUVueEtDSSswOHFNMzhy Qkd3aVlHdmZJTWprV1JsWnNNVFZtQ1ZnSllmZVRkUzZHejcxTVJLaFlLWkw5bQpESnU5TCtL d0xlR1lCQU11N1NMUjlYR0NJNkVFbThoT2tUaHNYR2NtQ1NYa3BxS1JFT1VSbk5FbzBraUx2 Uk9VU1lETk5Ua3NnTzd1CjF3WnpuamhoSGZQOFVQVkVCT2dsTW5GTU9EdXE5dG9pZVhBQkFP Z3RxYlRrUWdoaHNaT2c5Z05NK3NHdjhnYkFIcjFnZWFFQ0dKRlkKbmo2OTVlWkJNVEw4Wkli YW9FcVRmSkVYZkI0TFdybzR1MFlheTJHRnF5Z1ZKZVFWUkFpTWZ0UFJFbzlkRURlSWl1eXhF M2dkMER6cQpBdGNCMWd0bXgrdmp2WDVmYkVRcmpZQVZHMjVZREhMbmZrYjVIVTV1eVJCSWtR dCtSZWZYb1FUeHdiVDdMUXB5NkgxckpSU0VFWTJHClFRSHB2NGN6VjZRYWx5Tnc2YjBOMnBt NWpwS1R6UWFTRUxhTnRNVHduV2ZoNi90YnpUT2JjbFFrWi9MeUtvZEE1YkxaYnNuQnllQlMK VUFJQTI2YWxDY2thQnVWUGFxK083YWdSdzYvaWdHa3ZmVjNlenhWOHA2b1poaXhrNFkxYmM5 eUNESmowdXl2Skkzd3ZidjRleTRTbwpMNUdFN0VDUk40VkNJOUM4ZW1LbnRFNWw3dmwzdktx aFN0MHNKamJMTVFZeTZ5Q0V5cGEyTjV2WVJ1Yk11YUtHQUtEK3orTVR4TzlmCnRXWWdQazBS TEx5dEdQS2psRG9lYnBMUnFzVjRrbFpJUVhPeG1RL1I3ZVpOci9QRWN0SGN0U1o2bHB4emVK RFhtTW9RaW9NTEFBRkoKSXFCSlNGajBFYlZNRFpCVTluZ3lzV2hDM3dsWjJsa21mdTYxRG8x T3p6OTFFSnZHa1dNSjhDcFNncVpQdmYzSjhTRkNkSHgxS2FKMwpoWGFkb1FsQ3FpcXhVdElK SEFrK2Z6RXA3S205K29vQ2lOaEFHYW1SZXp0akZjWDZsckF6Wkg3T1Z0dWlqakJwMGN6QjFU T0RsZkEzClZMMlFNUW94Q2hFSU1RUkVRcHhVVTBGcHlWcDkrbmxBRnoycUtXZllEQVBJQTlq Q0FwQllvTElzV0JQTlBnM244M2hLaUNWdzJlOFQKazN4aWdmQ1NxR2g1eEk1UTN3WEFVWFRh SmoreERFNklhNk84Ukg0enJDUnhwVjBuT0hPZnNZQ3lKa3hvNTNobUxKa0pJRm95Qnhiawpu akRzSXE3dklHVU5XRGMyNWMrS0ZuemROR0hSd1RsQ204Q2V0Z1NuVWhZZEtjTFpRcFNsT1hW UkprMUU5MzN2ZFBYSWJmUkowejdQCnlkcEFobVdwRlFMUHpQSFBRTXVlNGtvcFVLS1doMklF NDNCcFdjZlVlTWdTc0xGa2RuVTVGMW5sVmlabkt0M1A1UjZoaDQ4bW53WVoKaG1nWUxHMWhJ U05Vc2dzWE5aR1hzSmduajR5V1VxbVpDOGZlOC9JdkJrZDR1em56S2IwMWlQcmM3UnlpWXdQ Q3Z1dmJvRVJtaVZHLwpoR2FvNlR1c1poRUZnWnNYVFVnanFRTmRGdnM5ZUdYN2NCNW5WcXA5 YUN1YmxJaGlJZ0dDRmlBZ1dBVUlTQkVTU3FCblFEdkU0Nno2ClZMRkxyVklQMzRUN0JWQXFN VkxiUEIzZG9xQjNUWCtpU05id1V4N1ZrSVg4MlY2YzFhV1BLZnc5UnhJSVBjV0gzVm5POTJK NzFKZHkKOGcxK3BHQVBTMkQ5VFduWTZlR0p5Tm5QOWpiWW85cnFjZ2hVQWdIYTVlbXc1eVBD RjdZRDM0R3RFL2ZBck1hNVNRd0FsN21zOWhFOAprZDkzVWJRdEtSREF6REhVZjJjSFAydnR2 eUJ6TkhaRU5iSW9vb292aVFQd1QyZkVIVVJCTzM4by9vVlloN2k5NjBFVlJmN2FnZzk3CnJy Mmd6bXdXS1l2OHVvQkFMUHBlQUNBWm5aQ0JuODduZUkrNE11YU13ZGVTY0c5cW84RnhjV1kw Q1NBOWxGTFJ2K0o0UWkyQWtraG4KTTRma2J3d0NuWjZtdUFOcDlDSEVtUXdzRUFkcTNVRlFO ZUViZmVJZldJNHZoN0srcmtwYzgyKzE2NWdiQWpZdUd2UjJQTDdKU0RWTgpBMjUrTFVLcG16 OCtJSEh3cHFYSEs1RHMrZ3dxUEkvdUx1U0tjS0VoWUJSYVRnPT0K --------------080101000404000603030903--