From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20935 invoked by alias); 14 Apr 2010 22:47:47 -0000 Received: (qmail 20923 invoked by uid 22791); 14 Apr 2010 22:47:44 -0000 X-SWARE-Spam-Status: No, hits=0.9 required=5.0 tests=BAYES_40,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SARE_MSGID_LONG45,SPF_HELO_PASS,TW_BJ,TW_DB,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 14 Apr 2010 22:47:37 +0000 Received: from hpaq6.eem.corp.google.com (hpaq6.eem.corp.google.com [10.3.21.6]) by smtp-out.google.com with ESMTP id o3EMlWp9005296 for ; Thu, 15 Apr 2010 00:47:33 +0200 Received: from pvb32 (pvb32.prod.google.com [10.241.209.96]) by hpaq6.eem.corp.google.com with ESMTP id o3EMlUVp022222 for ; Thu, 15 Apr 2010 00:47:31 +0200 Received: by pvb32 with SMTP id 32so445836pvb.6 for ; Wed, 14 Apr 2010 15:47:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.140.247.17 with HTTP; Wed, 14 Apr 2010 15:47:30 -0700 (PDT) In-Reply-To: <201004091642.16651.pedro@codesourcery.com> References: <20100407173222.A21C584397@ruffy.mtv.corp.google.com> <83634113i1.fsf@gnu.org> <201004091642.16651.pedro@codesourcery.com> Date: Wed, 14 Apr 2010 22:47:00 -0000 Received: by 10.141.125.5 with SMTP id c5mr1404487rvn.254.1271285250184; Wed, 14 Apr 2010 15:47:30 -0700 (PDT) Message-ID: Subject: Re: [RFA][python] Add program space support From: Doug Evans To: Eli Zaretskii , Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0003255646d2bed78b04843a2945 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-04/txt/msg00461.txt.bz2 --0003255646d2bed78b04843a2945 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 5743 On Fri, Apr 9, 2010 at 12:36 AM, Eli Zaretskii wrote: > I didn't ask for you to explain again what program spaces are. I > asked for a cross-reference to the place where they are already > explained. Like this: > > @xref{Inferiors and Programs, program spaces}, for more details > about program spaces. On Fri, Apr 9, 2010 at 8:42 AM, Pedro Alves wrote: > On Friday 09 April 2010 16:34:11, Doug Evans wrote: >> I guess I misunderstood. =A0I grepped all of gdb.texinfo, including that >> particular xref, and saw nothing that would satisfy "where program >> spaces are described" (or explained). > > Because they're not visible to the user in any way. =A0It's all exposed > through inferiors. I'm not sure where this leaves us. I've included the requested xref, and will check in the attached patch tomorrow if there are no objections. For reference sake, here's the doc patch. Index: doc/gdb.texinfo =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.704 diff -u -p -r1.704 gdb.texinfo --- doc/gdb.texinfo 14 Apr 2010 12:02:44 -0000 1.704 +++ doc/gdb.texinfo 14 Apr 2010 22:34:36 -0000 @@ -19708,6 +19708,7 @@ situation, a Python @code{KeyboardInterr * Selecting Pretty-Printers:: How GDB chooses a pretty-printer. * Commands In Python:: Implementing new commands in Python. * Functions In Python:: Writing new convenience functions. +* Progspaces In Python:: Program spaces. * Objfiles In Python:: Object files. * Frames In Python:: Accessing inferior stack frames from Pytho= n. * Blocks In Python:: Accessing frame blocks from Python. @@ -20446,6 +20447,7 @@ If the result is not one of these types, The Python list @code{gdb.pretty_printers} contains an array of functions that have been registered via addition as a pretty-printer. +Each @code{gdb.Progspace} contains a @code{pretty_printers} attribute. Each @code{gdb.Objfile} also contains a @code{pretty_printers} attribute. @@ -20456,8 +20458,12 @@ cannot create a pretty-printer for the v @code{None}. @value{GDBN} first checks the @code{pretty_printers} attribute of each -@code{gdb.Objfile} and iteratively calls each function in the list for -that @code{gdb.Objfile} until it receives a pretty-printer object. +@code{gdb.Objfile} in the current program space and iteratively calls +each function in the list for that @code{gdb.Objfile} until it receives +a pretty-printer object. +If no pretty-printer is found in the objfile lists, @value{GDBN} then +searches the pretty-printer list of the current program space, +calling each function until an object is returned. After these lists have been exhausted, it tries the global @code{gdb.pretty-printers} list, again calling each function until an object is returned. @@ -20855,6 +20861,49 @@ registration of the function with @value Python code is read into @value{GDBN}, you may need to import the @code{gdb} module explicitly. +@node Progspaces In Python +@subsubsection Program Spaces In Python + +@cindex progspaces in python +@tindex gdb.Progspace +@tindex Progspace +A program space, or @dfn{progspace}, represents a symbolic view +of an address space. +It consists of all of the objfiles of the program. +@xref{Objfiles In Python}. +@xref{Inferiors and Programs, program spaces}, for more details +about program spaces. + +The following progspace-related functions are available in the +@code{gdb} module: + +@findex gdb.current_progspace +@defun current_progspace +This function returns the program space of the currently selected inferior. +@xref{Inferiors and Programs}. +@end defun + +@findex gdb.progspaces +@defun progspaces +Return a sequence of all the progspaces currently known to @value{GDBN}. +@end defun + +Each progspace is represented by an instance of the @code{gdb.Progspace} +class. + +@defivar Progspace filename +The file name of the progspace as a string. +@end defivar + +@defivar Progspace pretty_printers +The @code{pretty_printers} attribute is a list of functions. It is +used to look up pretty-printers. A @code{Value} is passed to each +function in order; if the function returns @code{None}, then the +search continues. Otherwise, the return value should be an object +which is used to format the value. @xref{Pretty Printing}, for more +information. +@end defivar + @node Objfiles In Python @subsubsection Objfiles In Python --- 2010-04-14 Doug Evans * NEWS: Add entry for python program space support. * Makefile.in (SUBDIR_PYTHON_OBS): Add py-progspace.o. (SUBDIR_PYTHON_SRCS): Add py-progspace.c. (py-progspace.o): New rule. * python/py-prettyprint.c (find_pretty_printer_from_objfiles): New function. (find_pretty_printer_from_progspace): New function. (find_pretty_printer_from_gdb): New function. (find_pretty_printer): Rewrite. * python/py-progspace.c: New file. * python/python-internal.h (program_space): Add forward decl. (pspace_to_pspace_object, pspy_get_printers): Declare. (gdbpy_initialize_pspace): Declare. * python/python.c: #include "progspace.h". (gdbpy_get_current_progspace, gdbpy_progspaces): New functions. (_initialize_python): Call gdbpy_initialize_pspace. (GdbMethods): Add current_progspace, progspaces. doc/ * gdb.texinfo (Python API): Add progspaces section. (Selecting Pretty-Printers): Progspace pretty-printers are searched too. (Progspaces In Python): New section. testsuite/ * gdb.python/py-progspace.c: New file. * gdb.python/py-progspace.exp: New file. --0003255646d2bed78b04843a2945 Content-Type: text/plain; charset=US-ASCII; name="gdb-100414-python-progspace-3.patch.txt" Content-Disposition: attachment; filename="gdb-100414-python-progspace-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g80qcfnz0 Content-length: 34539 MjAxMC0wNC0xNCAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog TkVXUzogQWRkIGVudHJ5IGZvciBweXRob24gcHJvZ3JhbSBzcGFjZSBzdXBw b3J0LgoJKiBNYWtlZmlsZS5pbiAoU1VCRElSX1BZVEhPTl9PQlMpOiBBZGQg cHktcHJvZ3NwYWNlLm8uCgkoU1VCRElSX1BZVEhPTl9TUkNTKTogQWRkIHB5 LXByb2dzcGFjZS5jLgoJKHB5LXByb2dzcGFjZS5vKTogTmV3IHJ1bGUuCgkq IHB5dGhvbi9weS1wcmV0dHlwcmludC5jIChmaW5kX3ByZXR0eV9wcmludGVy X2Zyb21fb2JqZmlsZXMpOiBOZXcKCWZ1bmN0aW9uLgoJKGZpbmRfcHJldHR5 X3ByaW50ZXJfZnJvbV9wcm9nc3BhY2UpOiBOZXcgZnVuY3Rpb24uCgkoZmlu ZF9wcmV0dHlfcHJpbnRlcl9mcm9tX2dkYik6IE5ldyBmdW5jdGlvbi4KCShm aW5kX3ByZXR0eV9wcmludGVyKTogUmV3cml0ZS4KCSogcHl0aG9uL3B5LXBy b2dzcGFjZS5jOiBOZXcgZmlsZS4KCSogcHl0aG9uL3B5dGhvbi1pbnRlcm5h bC5oIChwcm9ncmFtX3NwYWNlKTogQWRkIGZvcndhcmQgZGVjbC4KCShwc3Bh Y2VfdG9fcHNwYWNlX29iamVjdCwgcHNweV9nZXRfcHJpbnRlcnMpOiBEZWNs YXJlLgoJKGdkYnB5X2luaXRpYWxpemVfcHNwYWNlKTogRGVjbGFyZS4KCSog cHl0aG9uL3B5dGhvbi5jOiAjaW5jbHVkZSAicHJvZ3NwYWNlLmgiLgoJKGdk YnB5X2dldF9jdXJyZW50X3Byb2dzcGFjZSwgZ2RicHlfcHJvZ3NwYWNlcyk6 IE5ldyBmdW5jdGlvbnMuCgkoX2luaXRpYWxpemVfcHl0aG9uKTogQ2FsbCBn ZGJweV9pbml0aWFsaXplX3BzcGFjZS4KCShHZGJNZXRob2RzKTogQWRkIGN1 cnJlbnRfcHJvZ3NwYWNlLCBwcm9nc3BhY2VzLgoKCWRvYy8KCSogZ2RiLnRl eGluZm8gKFB5dGhvbiBBUEkpOiBBZGQgcHJvZ3NwYWNlcyBzZWN0aW9uLgoJ KFNlbGVjdGluZyBQcmV0dHktUHJpbnRlcnMpOiBQcm9nc3BhY2UgcHJldHR5 LXByaW50ZXJzIGFyZQoJc2VhcmNoZWQgdG9vLgoJKFByb2dzcGFjZXMgSW4g UHl0aG9uKTogTmV3IHNlY3Rpb24uCgoJdGVzdHN1aXRlLwoJKiBnZGIucHl0 aG9uL3B5LXByb2dzcGFjZS5jOiBOZXcgZmlsZS4KCSogZ2RiLnB5dGhvbi9w eS1wcm9nc3BhY2UuZXhwOiBOZXcgZmlsZS4KCkluZGV4OiBNYWtlZmlsZS5p bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL01ha2VmaWxlLmluLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEx MTcKZGlmZiAtdSAtcCAtcjEuMTExNyBNYWtlZmlsZS5pbgotLS0gTWFrZWZp bGUuaW4JOSBBcHIgMjAxMCAwOTo0MTo0MiAtMDAwMAkxLjExMTcKKysrIE1h a2VmaWxlLmluCTE0IEFwciAyMDEwIDIyOjM0OjM2IC0wMDAwCkBAIC0yNzUs NiArMjc1LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktbGF6eS1z dHJpbmcubyBcCiAJcHktb2JqZmlsZS5vIFwKIAlweS1wcmV0dHlwcmludC5v IFwKKwlweS1wcm9nc3BhY2UubyBcCiAJcHktc3ltYm9sLm8gXAogCXB5LXN5 bXRhYi5vIFwKIAlweS10eXBlLm8gXApAQCAtMjkwLDYgKzI5MSw3IEBAIFNV QkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktbGF6eS1zdHJpbmcu YyBcCiAJcHl0aG9uL3B5LW9iamZpbGUuYyBcCiAJcHl0aG9uL3B5LXByZXR0 eXByaW50LmMgXAorCXB5dGhvbi9weS1wcm9nc3BhY2UuYyBcCiAJcHl0aG9u L3B5LXN5bWJvbC5jIFwKIAlweXRob24vcHktc3ltdGFiLmMgXAogCXB5dGhv bi9weS10eXBlLmMgXApAQCAtMjAxNiw2ICsyMDE4LDEwIEBAIHB5LXByZXR0 eXByaW50Lm86ICQoc3JjZGlyKS9weXRob24vcHktcHIKIAkkKENPTVBJTEUp ICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1wcmV0dHlw cmludC5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktcHJvZ3NwYWNlLm86ICQo c3JjZGlyKS9weXRob24vcHktcHJvZ3NwYWNlLmMKKwkkKENPTVBJTEUpICQo UFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1wcm9nc3BhY2Uu YworCSQoUE9TVENPTVBJTEUpCisKIHB5LXN5bWJvbC5vOiAkKHNyY2Rpcikv cHl0aG9uL3B5LXN5bWJvbC5jCiAJJChDT01QSUxFKSAkKFBZVEhPTl9DRkxB R1MpICQoc3JjZGlyKS9weXRob24vcHktc3ltYm9sLmMKIAkkKFBPU1RDT01Q SUxFKQpJbmRleDogTkVXUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL05FV1MsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMzY5CmRpZmYgLXUgLXAgLXIxLjM2OSBORVdTCi0tLSBORVdTCTkg QXByIDIwMTAgMTU6MjY6NTQgLTAwMDAJMS4zNjkKKysrIE5FV1MJMTQgQXBy IDIwMTAgMjI6MzQ6MzYgLTAwMDAKQEAgLTMxLDkgKzMxLDEyIEBACiAqIFB5 dGhvbiBzY3JpcHRpbmcKIAogKiogVGhlIEdEQiBQeXRob24gQVBJIG5vdyBo YXMgYWNjZXNzIHRvIGJyZWFrcG9pbnRzLCBzeW1ib2xzLCBzeW1ib2wKLSAg IHRhYmxlcywgYW5kIGZyYW1lJ3MgY29kZSBibG9ja3MuCisgICB0YWJsZXMs IHByb2dyYW0gc3BhY2VzLCBhbmQgZnJhbWUncyBjb2RlIGJsb2Nrcy4KIAot KiogTmV3IG1ldGhvZHMgZ2RiLnRhcmdldF9jaGFyc2V0IGFuZCBnZGIudGFy Z2V0X3dpZGVfY2hhcnNldC4KKyoqIE5ldyBmdW5jdGlvbnMgZ2RiLnRhcmdl dF9jaGFyc2V0LCBnZGIudGFyZ2V0X3dpZGVfY2hhcnNldCwKKyAgIGdkYi5w cm9nc3BhY2VzLCBhbmQgZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlLgorCisqKiBQ cmV0dHktcHJpbnRlcnMgYXJlIG5vdyBhbHNvIGxvb2tlZCB1cCBpbiB0aGUg Y3VycmVudCBwcm9ncmFtIHNwYWNlLgogCiAqIFRyYWNlcG9pbnQgYWN0aW9u cyB3ZXJlIHVuaWZpZWQgd2l0aCBicmVha3BvaW50IGNvbW1hbmRzLiBJbiBw YXJ0aWN1bGFyLAogdGhlcmUgYXJlIG5vIGxvbmdlciBkaWZmZXJlbmNlcyBp biAiaW5mbyBicmVhayIgb3V0cHV0IGZvciBicmVha3BvaW50cyBhbmQKSW5k ZXg6IGRvYy9nZGIudGV4aW5mbwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2RvYy9nZGIudGV4aW5mbyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS43MDQKZGlmZiAtdSAtcCAtcjEuNzA0IGdk Yi50ZXhpbmZvCi0tLSBkb2MvZ2RiLnRleGluZm8JMTQgQXByIDIwMTAgMTI6 MDI6NDQgLTAwMDAJMS43MDQKKysrIGRvYy9nZGIudGV4aW5mbwkxNCBBcHIg MjAxMCAyMjozNDozNiAtMDAwMApAQCAtMTk3MDgsNiArMTk3MDgsNyBAQCBz aXR1YXRpb24sIGEgUHl0aG9uIEBjb2Rle0tleWJvYXJkSW50ZXJyCiAqIFNl bGVjdGluZyBQcmV0dHktUHJpbnRlcnM6OiAgIEhvdyBHREIgY2hvb3NlcyBh IHByZXR0eS1wcmludGVyLgogKiBDb21tYW5kcyBJbiBQeXRob246OiAgICAg ICAgICBJbXBsZW1lbnRpbmcgbmV3IGNvbW1hbmRzIGluIFB5dGhvbi4KICog RnVuY3Rpb25zIEluIFB5dGhvbjo6ICAgICAgICAgV3JpdGluZyBuZXcgY29u dmVuaWVuY2UgZnVuY3Rpb25zLgorKiBQcm9nc3BhY2VzIEluIFB5dGhvbjo6 ICAgICAgICBQcm9ncmFtIHNwYWNlcy4KICogT2JqZmlsZXMgSW4gUHl0aG9u OjogICAgICAgICAgT2JqZWN0IGZpbGVzLgogKiBGcmFtZXMgSW4gUHl0aG9u OjogICAgICAgICAgICBBY2Nlc3NpbmcgaW5mZXJpb3Igc3RhY2sgZnJhbWVz IGZyb20gUHl0aG9uLgogKiBCbG9ja3MgSW4gUHl0aG9uOjogICAgICAgICAg ICBBY2Nlc3NpbmcgZnJhbWUgYmxvY2tzIGZyb20gUHl0aG9uLgpAQCAtMjA0 NDYsNiArMjA0NDcsNyBAQCBJZiB0aGUgcmVzdWx0IGlzIG5vdCBvbmUgb2Yg dGhlc2UgdHlwZXMsCiAKIFRoZSBQeXRob24gbGlzdCBAY29kZXtnZGIucHJl dHR5X3ByaW50ZXJzfSBjb250YWlucyBhbiBhcnJheSBvZgogZnVuY3Rpb25z IHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgdmlhIGFkZGl0aW9uIGFzIGEg cHJldHR5LXByaW50ZXIuCitFYWNoIEBjb2Rle2dkYi5Qcm9nc3BhY2V9IGNv bnRhaW5zIGEgQGNvZGV7cHJldHR5X3ByaW50ZXJzfSBhdHRyaWJ1dGUuCiBF YWNoIEBjb2Rle2dkYi5PYmpmaWxlfSBhbHNvIGNvbnRhaW5zIGEgQGNvZGV7 cHJldHR5X3ByaW50ZXJzfQogYXR0cmlidXRlLgogCkBAIC0yMDQ1Niw4ICsy MDQ1OCwxMiBAQCBjYW5ub3QgY3JlYXRlIGEgcHJldHR5LXByaW50ZXIgZm9y IHRoZSB2CiBAY29kZXtOb25lfS4KIAogQHZhbHVle0dEQk59IGZpcnN0IGNo ZWNrcyB0aGUgQGNvZGV7cHJldHR5X3ByaW50ZXJzfSBhdHRyaWJ1dGUgb2Yg ZWFjaAotQGNvZGV7Z2RiLk9iamZpbGV9IGFuZCBpdGVyYXRpdmVseSBjYWxs cyBlYWNoIGZ1bmN0aW9uIGluIHRoZSBsaXN0IGZvcgotdGhhdCBAY29kZXtn ZGIuT2JqZmlsZX0gdW50aWwgaXQgcmVjZWl2ZXMgYSBwcmV0dHktcHJpbnRl ciBvYmplY3QuCitAY29kZXtnZGIuT2JqZmlsZX0gaW4gdGhlIGN1cnJlbnQg cHJvZ3JhbSBzcGFjZSBhbmQgaXRlcmF0aXZlbHkgY2FsbHMKK2VhY2ggZnVu Y3Rpb24gaW4gdGhlIGxpc3QgZm9yIHRoYXQgQGNvZGV7Z2RiLk9iamZpbGV9 IHVudGlsIGl0IHJlY2VpdmVzCithIHByZXR0eS1wcmludGVyIG9iamVjdC4K K0lmIG5vIHByZXR0eS1wcmludGVyIGlzIGZvdW5kIGluIHRoZSBvYmpmaWxl IGxpc3RzLCBAdmFsdWV7R0RCTn0gdGhlbgorc2VhcmNoZXMgdGhlIHByZXR0 eS1wcmludGVyIGxpc3Qgb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSwK K2NhbGxpbmcgZWFjaCBmdW5jdGlvbiB1bnRpbCBhbiBvYmplY3QgaXMgcmV0 dXJuZWQuCiBBZnRlciB0aGVzZSBsaXN0cyBoYXZlIGJlZW4gZXhoYXVzdGVk LCBpdCB0cmllcyB0aGUgZ2xvYmFsCiBAY29kZXtnZGIucHJldHR5LXByaW50 ZXJzfSBsaXN0LCBhZ2FpbiBjYWxsaW5nIGVhY2ggZnVuY3Rpb24gdW50aWwg YW4KIG9iamVjdCBpcyByZXR1cm5lZC4KQEAgLTIwODU1LDYgKzIwODYxLDQ5 IEBAIHJlZ2lzdHJhdGlvbiBvZiB0aGUgZnVuY3Rpb24gd2l0aCBAdmFsdWUK IFB5dGhvbiBjb2RlIGlzIHJlYWQgaW50byBAdmFsdWV7R0RCTn0sIHlvdSBt YXkgbmVlZCB0byBpbXBvcnQgdGhlCiBAY29kZXtnZGJ9IG1vZHVsZSBleHBs aWNpdGx5LgogCitAbm9kZSBQcm9nc3BhY2VzIEluIFB5dGhvbgorQHN1YnN1 YnNlY3Rpb24gUHJvZ3JhbSBTcGFjZXMgSW4gUHl0aG9uCisKK0BjaW5kZXgg cHJvZ3NwYWNlcyBpbiBweXRob24KK0B0aW5kZXggZ2RiLlByb2dzcGFjZQor QHRpbmRleCBQcm9nc3BhY2UKK0EgcHJvZ3JhbSBzcGFjZSwgb3IgQGRmbntw cm9nc3BhY2V9LCByZXByZXNlbnRzIGEgc3ltYm9saWMgdmlldworb2YgYW4g YWRkcmVzcyBzcGFjZS4KK0l0IGNvbnNpc3RzIG9mIGFsbCBvZiB0aGUgb2Jq ZmlsZXMgb2YgdGhlIHByb2dyYW0uCitAeHJlZntPYmpmaWxlcyBJbiBQeXRo b259LgorQHhyZWZ7SW5mZXJpb3JzIGFuZCBQcm9ncmFtcywgcHJvZ3JhbSBz cGFjZXN9LCBmb3IgbW9yZSBkZXRhaWxzCithYm91dCBwcm9ncmFtIHNwYWNl cy4KKworVGhlIGZvbGxvd2luZyBwcm9nc3BhY2UtcmVsYXRlZCBmdW5jdGlv bnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUKK0Bjb2Rle2dkYn0gbW9kdWxlOgor CitAZmluZGV4IGdkYi5jdXJyZW50X3Byb2dzcGFjZQorQGRlZnVuIGN1cnJl bnRfcHJvZ3NwYWNlCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2dy YW0gc3BhY2Ugb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpbmZlcmlvci4K K0B4cmVme0luZmVyaW9ycyBhbmQgUHJvZ3JhbXN9LgorQGVuZCBkZWZ1bgor CitAZmluZGV4IGdkYi5wcm9nc3BhY2VzCitAZGVmdW4gcHJvZ3NwYWNlcwor UmV0dXJuIGEgc2VxdWVuY2Ugb2YgYWxsIHRoZSBwcm9nc3BhY2VzIGN1cnJl bnRseSBrbm93biB0byBAdmFsdWV7R0RCTn0uCitAZW5kIGRlZnVuCisKK0Vh Y2ggcHJvZ3NwYWNlIGlzIHJlcHJlc2VudGVkIGJ5IGFuIGluc3RhbmNlIG9m IHRoZSBAY29kZXtnZGIuUHJvZ3NwYWNlfQorY2xhc3MuCisKK0BkZWZpdmFy IFByb2dzcGFjZSBmaWxlbmFtZQorVGhlIGZpbGUgbmFtZSBvZiB0aGUgcHJv Z3NwYWNlIGFzIGEgc3RyaW5nLgorQGVuZCBkZWZpdmFyCisKK0BkZWZpdmFy IFByb2dzcGFjZSBwcmV0dHlfcHJpbnRlcnMKK1RoZSBAY29kZXtwcmV0dHlf cHJpbnRlcnN9IGF0dHJpYnV0ZSBpcyBhIGxpc3Qgb2YgZnVuY3Rpb25zLiAg SXQgaXMKK3VzZWQgdG8gbG9vayB1cCBwcmV0dHktcHJpbnRlcnMuICBBIEBj b2Rle1ZhbHVlfSBpcyBwYXNzZWQgdG8gZWFjaAorZnVuY3Rpb24gaW4gb3Jk ZXI7IGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIEBjb2Rle05vbmV9LCB0aGVu IHRoZQorc2VhcmNoIGNvbnRpbnVlcy4gIE90aGVyd2lzZSwgdGhlIHJldHVy biB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0Cit3aGljaCBpcyB1c2VkIHRv IGZvcm1hdCB0aGUgdmFsdWUuICBAeHJlZntQcmV0dHkgUHJpbnRpbmd9LCBm b3IgbW9yZQoraW5mb3JtYXRpb24uCitAZW5kIGRlZml2YXIKKwogQG5vZGUg T2JqZmlsZXMgSW4gUHl0aG9uCiBAc3Vic3Vic2VjdGlvbiBPYmpmaWxlcyBJ biBQeXRob24KIApJbmRleDogcHl0aG9uL3B5LXByZXR0eXByaW50LmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi9weXRob24vcHktcHJldHR5cHJpbnQuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS43CmRpZmYgLXUgLXAgLXIxLjcgcHktcHJldHR5cHJpbnQuYwotLS0g cHl0aG9uL3B5LXByZXR0eXByaW50LmMJMTQgQXByIDIwMTAgMTM6MTg6NTQg LTAwMDAJMS43CisrKyBweXRob24vcHktcHJldHR5cHJpbnQuYwkxNCBBcHIg MjAxMCAyMjozNDozNiAtMDAwMApAQCAtMjksMTIgKzI5LDEyIEBACiAjaWZk ZWYgSEFWRV9QWVRIT04KICNpbmNsdWRlICJweXRob24taW50ZXJuYWwuaCIK IAotCiAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGZpbmRfcHJldHR5X3ByaW50 ZXIgd2hpY2ggaXRlcmF0ZXMgb3ZlciBhIGxpc3QsCiAgICBjYWxscyBlYWNo IGZ1bmN0aW9uIGFuZCBpbnNwZWN0cyBvdXRwdXQuICBUaGlzIHdpbGwgcmV0 dXJuIGEKICAgIHByaW50ZXIgb2JqZWN0IGlmIG9uZSByZWNvZ25pemVzIFZB TFVFLiAgSWYgbm8gcHJpbnRlciBpcyBmb3VuZCwgaXQKICAgIHdpbGwgcmV0 dXJuIE5vbmUuICBPbiBlcnJvciwgaXQgd2lsbCBzZXQgdGhlIFB5dGhvbiBl cnJvciBhbmQKICAgIHJldHVybiBOVUxMLiAgKi8KKwogc3RhdGljIFB5T2Jq ZWN0ICoKIHNlYXJjaF9wcF9saXN0IChQeU9iamVjdCAqbGlzdCwgUHlPYmpl Y3QgKnZhbHVlKQogewpAQCAtNjAsMTggKzYwLDE5IEBAIHNlYXJjaF9wcF9s aXN0IChQeU9iamVjdCAqbGlzdCwgUHlPYmplY3QKICAgUHlfUkVUVVJOX05P TkU7CiB9CiAKLS8qIEZpbmQgdGhlIHByZXR0eS1wcmludGluZyBjb25zdHJ1 Y3RvciBmdW5jdGlvbiBmb3IgVkFMVUUuICBJZiBubwotICAgcHJldHR5LXBy aW50ZXIgZXhpc3RzLCByZXR1cm4gTm9uZS4gIElmIG9uZSBleGlzdHMsIHJl dHVybiBhIG5ldwotICAgcmVmZXJlbmNlLiAgT24gZXJyb3IsIHNldCB0aGUg UHl0aG9uIGVycm9yIGFuZCByZXR1cm4gTlVMTC4gICovCisvKiBTdWJyb3V0 aW5lIG9mIGZpbmRfcHJldHR5X3ByaW50ZXIgdG8gc2ltcGxpZnkgaXQuCisg ICBMb29rIGZvciBhIHByZXR0eS1wcmludGVyIHRvIHByaW50IFZBTFVFIGlu IGFsbCBvYmpmaWxlcy4KKyAgIFRoZSByZXN1bHQgaXMgTlVMTCBpZiB0aGVy ZSdzIGFuIGVycm9yIGFuZCB0aGUgc2VhcmNoIHNob3VsZCBiZSB0ZXJtaW5h dGVkLgorICAgVGhlIHJlc3VsdCBpcyBQeV9Ob25lLCBzdWl0YWJseSBpbmMt cmVmJ2QsIGlmIG5vIHByZXR0eS1wcmludGVyIHdhcyBmb3VuZC4KKyAgIE90 aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHRoZSBwcmV0dHktcHJpbnRlciBmdW5j dGlvbiwgc3VpdGFibHkgaW5jLXJlZidkLiAgKi8KKwogc3RhdGljIFB5T2Jq ZWN0ICoKLWZpbmRfcHJldHR5X3ByaW50ZXIgKFB5T2JqZWN0ICp2YWx1ZSkK K2ZpbmRfcHJldHR5X3ByaW50ZXJfZnJvbV9vYmpmaWxlcyAoUHlPYmplY3Qg KnZhbHVlKQogewotICBQeU9iamVjdCAqcHBfbGlzdCA9IE5VTEw7Ci0gIFB5 T2JqZWN0ICpmdW5jdGlvbiA9IE5VTEw7CisgIFB5T2JqZWN0ICpwcF9saXN0 OworICBQeU9iamVjdCAqZnVuY3Rpb247CiAgIHN0cnVjdCBvYmpmaWxlICpv Ymo7Ci0gIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsK IAotICAvKiBMb29rIGF0IHRoZSBwcmV0dHktcHJpbnRlciBkaWN0aW9uYXJ5 IGZvciBlYWNoIG9iamZpbGUuICAqLwogICBBTExfT0JKRklMRVMgKG9iaikK ICAgewogICAgIFB5T2JqZWN0ICpvYmpmID0gb2JqZmlsZV90b19vYmpmaWxl X29iamVjdCAob2JqKTsKQEAgLTg0LDQ0ICs4NSw5NSBAQCBmaW5kX3ByZXR0 eV9wcmludGVyIChQeU9iamVjdCAqdmFsdWUpCiAKICAgICBwcF9saXN0ID0g b2JqZnB5X2dldF9wcmludGVycyAob2JqZiwgTlVMTCk7CiAgICAgZnVuY3Rp b24gPSBzZWFyY2hfcHBfbGlzdCAocHBfbGlzdCwgdmFsdWUpOworICAgIFB5 X1hERUNSRUYgKHBwX2xpc3QpOwogCi0gICAgLyogSWYgdGhlcmUgaXMgYW4g ZXJyb3IgaW4gYW55IG9iamZpbGUgbGlzdCwgYWJvcnQgdGhlIHNlYXJjaCBh bmQKLSAgICAgICBleGl0LiAgKi8KKyAgICAvKiBJZiB0aGVyZSBpcyBhbiBl cnJvciBpbiBhbnkgb2JqZmlsZSBsaXN0LCBhYm9ydCB0aGUgc2VhcmNoIGFu ZCBleGl0LiAgKi8KICAgICBpZiAoISBmdW5jdGlvbikKLSAgICAgIHsKLQlQ eV9YREVDUkVGIChwcF9saXN0KTsKLQlyZXR1cm4gTlVMTDsKLSAgICAgIH0K KyAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKGZ1bmN0aW9uICE9IFB5 X05vbmUpCi0gICAgICBnb3RvIGRvbmU7CisgICAgICByZXR1cm4gZnVuY3Rp b247CiAgICAgCiAgICAgUHlfREVDUkVGIChmdW5jdGlvbik7Ci0gICAgUHlf WERFQ1JFRiAocHBfbGlzdCk7CiAgIH0KIAotICBwcF9saXN0ID0gTlVMTDsK KyAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qIFN1YnJvdXRpbmUgb2YgZmlu ZF9wcmV0dHlfcHJpbnRlciB0byBzaW1wbGlmeSBpdC4KKyAgIExvb2sgZm9y IGEgcHJldHR5LXByaW50ZXIgdG8gcHJpbnQgVkFMVUUgaW4gdGhlIGN1cnJl bnQgcHJvZ3JhbSBzcGFjZS4KKyAgIFRoZSByZXN1bHQgaXMgTlVMTCBpZiB0 aGVyZSdzIGFuIGVycm9yIGFuZCB0aGUgc2VhcmNoIHNob3VsZCBiZSB0ZXJt aW5hdGVkLgorICAgVGhlIHJlc3VsdCBpcyBQeV9Ob25lLCBzdWl0YWJseSBp bmMtcmVmJ2QsIGlmIG5vIHByZXR0eS1wcmludGVyIHdhcyBmb3VuZC4KKyAg IE90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHRoZSBwcmV0dHktcHJpbnRlciBm dW5jdGlvbiwgc3VpdGFibHkgaW5jLXJlZidkLiAgKi8KKworc3RhdGljIFB5 T2JqZWN0ICoKK2ZpbmRfcHJldHR5X3ByaW50ZXJfZnJvbV9wcm9nc3BhY2Ug KFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgUHlPYmplY3QgKnBwX2xpc3Q7Cisg IFB5T2JqZWN0ICpmdW5jdGlvbjsKKyAgUHlPYmplY3QgKm9iaiA9IHBzcGFj ZV90b19wc3BhY2Vfb2JqZWN0IChjdXJyZW50X3Byb2dyYW1fc3BhY2UpOwor CisgIGlmICghb2JqKQorICAgIHJldHVybiBOVUxMOworICBwcF9saXN0ID0g cHNweV9nZXRfcHJpbnRlcnMgKG9iaiwgTlVMTCk7CisgIGZ1bmN0aW9uID0g c2VhcmNoX3BwX2xpc3QgKHBwX2xpc3QsIHZhbHVlKTsKKyAgUHlfWERFQ1JF RiAocHBfbGlzdCk7CisgIHJldHVybiBmdW5jdGlvbjsKK30KKworLyogU3Vi cm91dGluZSBvZiBmaW5kX3ByZXR0eV9wcmludGVyIHRvIHNpbXBsaWZ5IGl0 LgorICAgTG9vayBmb3IgYSBwcmV0dHktcHJpbnRlciB0byBwcmludCBWQUxV RSBpbiB0aGUgZ2RiIG1vZHVsZS4KKyAgIFRoZSByZXN1bHQgaXMgTlVMTCBp ZiB0aGVyZSdzIGFuIGVycm9yIGFuZCB0aGUgc2VhcmNoIHNob3VsZCBiZSB0 ZXJtaW5hdGVkLgorICAgVGhlIHJlc3VsdCBpcyBQeV9Ob25lLCBzdWl0YWJs eSBpbmMtcmVmJ2QsIGlmIG5vIHByZXR0eS1wcmludGVyIHdhcyBmb3VuZC4K KyAgIE90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHRoZSBwcmV0dHktcHJpbnRl ciBmdW5jdGlvbiwgc3VpdGFibHkgaW5jLXJlZidkLiAgKi8KKworc3RhdGlj IFB5T2JqZWN0ICoKK2ZpbmRfcHJldHR5X3ByaW50ZXJfZnJvbV9nZGIgKFB5 T2JqZWN0ICp2YWx1ZSkKK3sKKyAgUHlPYmplY3QgKnBwX2xpc3Q7CisgIFB5 T2JqZWN0ICpmdW5jdGlvbjsKKwogICAvKiBGZXRjaCB0aGUgZ2xvYmFsIHBy ZXR0eSBwcmludGVyIGRpY3Rpb25hcnkuICAqLwogICBpZiAoISBQeU9iamVj dF9IYXNBdHRyU3RyaW5nIChnZGJfbW9kdWxlLCAicHJldHR5X3ByaW50ZXJz IikpCisgICAgUHlfUkVUVVJOX05PTkU7CisgIHBwX2xpc3QgPSBQeU9iamVj dF9HZXRBdHRyU3RyaW5nIChnZGJfbW9kdWxlLCAicHJldHR5X3ByaW50ZXJz Iik7CisgIGlmIChwcF9saXN0ID09IE5VTEwgfHwgISBQeUxpc3RfQ2hlY2sg KHBwX2xpc3QpKQogICAgIHsKLSAgICAgIGZ1bmN0aW9uID0gUHlfTm9uZTsK LSAgICAgIFB5X0lOQ1JFRiAoZnVuY3Rpb24pOwotICAgICAgZ290byBkb25l OworICAgICAgUHlfWERFQ1JFRiAocHBfbGlzdCk7CisgICAgICBQeV9SRVRV Uk5fTk9ORTsKICAgICB9Ci0gIHBwX2xpc3QgPSBQeU9iamVjdF9HZXRBdHRy U3RyaW5nIChnZGJfbW9kdWxlLCAicHJldHR5X3ByaW50ZXJzIik7Ci0gIGlm ICghIHBwX2xpc3QpCi0gICAgZ290byBkb25lOwotICBpZiAoISBQeUxpc3Rf Q2hlY2sgKHBwX2xpc3QpKQotICAgIGdvdG8gZG9uZTsKIAogICBmdW5jdGlv biA9IHNlYXJjaF9wcF9saXN0IChwcF9saXN0LCB2YWx1ZSk7Ci0KLSBkb25l OgogICBQeV9YREVDUkVGIChwcF9saXN0KTsKLSAgCiAgIHJldHVybiBmdW5j dGlvbjsKIH0KIAorLyogRmluZCB0aGUgcHJldHR5LXByaW50aW5nIGNvbnN0 cnVjdG9yIGZ1bmN0aW9uIGZvciBWQUxVRS4gIElmIG5vCisgICBwcmV0dHkt cHJpbnRlciBleGlzdHMsIHJldHVybiBOb25lLiAgSWYgb25lIGV4aXN0cywg cmV0dXJuIGEgbmV3CisgICByZWZlcmVuY2UuICBPbiBlcnJvciwgc2V0IHRo ZSBQeXRob24gZXJyb3IgYW5kIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGlj IFB5T2JqZWN0ICoKK2ZpbmRfcHJldHR5X3ByaW50ZXIgKFB5T2JqZWN0ICp2 YWx1ZSkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uOworCisgIC8qIExvb2sg YXQgdGhlIHByZXR0eS1wcmludGVyIGRpY3Rpb25hcnkgZm9yIGVhY2ggb2Jq ZmlsZQorICAgICBpbiB0aGUgY3VycmVudCBwcm9ncmFtLXNwYWNlLiAgKi8K KyAgZnVuY3Rpb24gPSBmaW5kX3ByZXR0eV9wcmludGVyX2Zyb21fb2JqZmls ZXMgKHZhbHVlKTsKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rp b24gIT0gUHlfTm9uZSkKKyAgICByZXR1cm4gZnVuY3Rpb247CisgIFB5X0RF Q1JFRiAoZnVuY3Rpb24pOworCisgIC8qIExvb2sgYXQgdGhlIHByZXR0eS1w cmludGVyIGRpY3Rpb25hcnkgZm9yIHRoZSBjdXJyZW50IHByb2dyYW0tc3Bh Y2UuICAqLworICBmdW5jdGlvbiA9IGZpbmRfcHJldHR5X3ByaW50ZXJfZnJv bV9wcm9nc3BhY2UgKHZhbHVlKTsKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwg fHwgZnVuY3Rpb24gIT0gUHlfTm9uZSkKKyAgICByZXR1cm4gZnVuY3Rpb247 CisgIFB5X0RFQ1JFRiAoZnVuY3Rpb24pOworCisgIC8qIExvb2sgYXQgdGhl IHByZXR0eS1wcmludGVyIGRpY3Rpb25hcnkgaW4gdGhlIGdkYiBtb2R1bGUu ICAqLworICBmdW5jdGlvbiA9IGZpbmRfcHJldHR5X3ByaW50ZXJfZnJvbV9n ZGIgKHZhbHVlKTsKKyAgcmV0dXJuIGZ1bmN0aW9uOworfQogCiAvKiBQcmV0 dHktcHJpbnQgYSBzaW5nbGUgdmFsdWUsIHZpYSB0aGUgcHJpbnRlciBvYmpl Y3QgUFJJTlRFUi4KICAgIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3Ry aW5nLCBhIFB5T2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0cmluZwpJbmRleDog cHl0aG9uL3B5LXByb2dzcGFjZS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IHB5dGhvbi9weS1wcm9nc3BhY2UuYwpkaWZmIC1OIHB5dGhv bi9weS1wcm9nc3BhY2UuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6 MDA6MDAgLTAwMDAKKysrIHB5dGhvbi9weS1wcm9nc3BhY2UuYwkxNCBBcHIg MjAxMCAyMjozNDozNiAtMDAwMApAQCAtMCwwICsxLDI0MCBAQAorLyogUHl0 aG9uIGludGVyZmFjZSB0byBwcm9ncmFtIHNwYWNlcy4KKworICAgQ29weXJp Z2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVk ZSAicHl0aG9uLWludGVybmFsLmgiCisjaW5jbHVkZSAiY2hhcnNldC5oIgor I2luY2x1ZGUgInByb2dzcGFjZS5oIgorI2luY2x1ZGUgIm9iamZpbGVzLmgi CisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sK KyAgUHlPYmplY3RfSEVBRAorCisgIC8qIFRoZSBjb3JyZXNwb25kaW5nIHBz cGFjZS4gICovCisgIHN0cnVjdCBwcm9ncmFtX3NwYWNlICpwc3BhY2U7CisK KyAgLyogVGhlIHByZXR0eS1wcmludGVyIGxpc3Qgb2YgZnVuY3Rpb25zLiAg Ki8KKyAgUHlPYmplY3QgKnByaW50ZXJzOworfSBwc3BhY2Vfb2JqZWN0Owor CitzdGF0aWMgUHlUeXBlT2JqZWN0IHBzcGFjZV9vYmplY3RfdHlwZTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9ncmFtX3NwYWNlX2RhdGEgKnBzcHlf cHNwYWNlX2RhdGFfa2V5OworCisMCisKKy8qIEFuIE9iamZpbGUgbWV0aG9k IHdoaWNoIHJldHVybnMgdGhlIG9iamZpbGUncyBmaWxlIG5hbWUsIG9yIE5v bmUuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorcHNweV9nZXRfZmlsZW5h bWUgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICBwc3Bh Y2Vfb2JqZWN0ICpvYmogPSAocHNwYWNlX29iamVjdCAqKSBzZWxmOworICBp ZiAob2JqLT5wc3BhY2UpCisgICAgeworICAgICAgc3RydWN0IG9iamZpbGUg Km9iamZpbGUgPSBvYmotPnBzcGFjZS0+c3ltZmlsZV9vYmplY3RfZmlsZTsK KyAgICAgIGlmIChvYmpmaWxlICYmIG9iamZpbGUtPm5hbWUpCisJcmV0dXJu IFB5U3RyaW5nX0RlY29kZSAob2JqZmlsZS0+bmFtZSwgc3RybGVuIChvYmpm aWxlLT5uYW1lKSwKKwkJCQlob3N0X2NoYXJzZXQgKCksIE5VTEwpOworICAg IH0KKyAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkCitwc3B5 X2RlYWxsb2MgKFB5T2JqZWN0ICpzZWxmKQoreworICBwc3BhY2Vfb2JqZWN0 ICpwc19zZWxmID0gKHBzcGFjZV9vYmplY3QgKikgc2VsZjsKKyAgUHlfWERF Q1JFRiAocHNfc2VsZi0+cHJpbnRlcnMpOworICBzZWxmLT5vYl90eXBlLT50 cF9mcmVlIChzZWxmKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3BzcHlf bmV3IChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9i amVjdCAqa2V5d29yZHMpCit7CisgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAo cHNwYWNlX29iamVjdCAqKSB0eXBlLT50cF9hbGxvYyAodHlwZSwgMCk7Cisg IGlmIChzZWxmKQorICAgIHsKKyAgICAgIHNlbGYtPnBzcGFjZSA9IE5VTEw7 CisKKyAgICAgIHNlbGYtPnByaW50ZXJzID0gUHlMaXN0X05ldyAoMCk7Cisg ICAgICBpZiAoIXNlbGYtPnByaW50ZXJzKQorCXsKKwkgIFB5X0RFQ1JFRiAo c2VsZik7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICByZXR1cm4g KFB5T2JqZWN0ICopIHNlbGY7Cit9CisKK1B5T2JqZWN0ICoKK3BzcHlfZ2V0 X3ByaW50ZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQoreworICBw c3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3QgKikgbzsKKyAg UHlfSU5DUkVGIChzZWxmLT5wcmludGVycyk7CisgIHJldHVybiBzZWxmLT5w cmludGVyczsKK30KKworc3RhdGljIGludAorcHNweV9zZXRfcHJpbnRlcnMg KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdmFsdWUsIHZvaWQgKmlnbm9yZSkK K3sKKyAgUHlPYmplY3QgKnRtcDsKKyAgcHNwYWNlX29iamVjdCAqc2VsZiA9 IChwc3BhY2Vfb2JqZWN0ICopIG87CisgIGlmICghIHZhbHVlKQorICAgIHsK KyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkg ICAgICAgImNhbm5vdCBkZWxldGUgdGhlIHByZXR0eV9wcmludGVycyBhdHRy aWJ1dGUiKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKCEg UHlMaXN0X0NoZWNrICh2YWx1ZSkpCisgICAgeworICAgICAgUHlFcnJfU2V0 U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICAidGhlIHByZXR0 eV9wcmludGVycyBhdHRyaWJ1dGUgbXVzdCBiZSBhIGxpc3QiKTsKKyAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogVGFrZSBjYXJlIGluIGNhc2Ug dGhlIExIUyBhbmQgUkhTIGFyZSByZWxhdGVkIHNvbWVob3cuICAqLworICB0 bXAgPSBzZWxmLT5wcmludGVyczsKKyAgUHlfSU5DUkVGICh2YWx1ZSk7Cisg IHNlbGYtPnByaW50ZXJzID0gdmFsdWU7CisgIFB5X1hERUNSRUYgKHRtcCk7 CisKKyAgcmV0dXJuIDA7Cit9CisKKwwKKworLyogQ2xlYXIgdGhlIFBTUEFD RSBwb2ludGVyIGluIGEgUHNwYWNlIG9iamVjdCBhbmQgcmVtb3ZlIHRoZSBy ZWZlcmVuY2UuICAqLworCitzdGF0aWMgdm9pZAorcHlfZnJlZV9wc3BhY2Ug KHN0cnVjdCBwcm9ncmFtX3NwYWNlICpwc3BhY2UsIHZvaWQgKmRhdHVtKQor eworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKKyAgcHNwYWNlX29iamVj dCAqb2JqZWN0ID0gZGF0dW07CisgIC8qIEZJWE1FOiBXaGF0J3MgdGhlIHJp Z2h0IHdheSB0byBnZXQgYSBwcm9ncmFtIHNwYWNlJ3MgYXJjaD8KKyAgICAg VGhlcmUgbWF5IGJlIG11bHRpcGxlLiAgKi8KKyAgc3RydWN0IGdkYmFyY2gg KmFyY2ggPSBnZXRfb2JqZmlsZV9hcmNoIChwc3BhY2UtPnN5bWZpbGVfb2Jq ZWN0X2ZpbGUpOworCisgIGNsZWFudXAgPSBlbnN1cmVfcHl0aG9uX2VudiAo YXJjaCwgY3VycmVudF9sYW5ndWFnZSk7CisgIG9iamVjdC0+cHNwYWNlID0g TlVMTDsKKyAgUHlfREVDUkVGICgoUHlPYmplY3QgKikgb2JqZWN0KTsKKyAg ZG9fY2xlYW51cHMgKGNsZWFudXApOworfQorCisvKiBSZXR1cm4gYSBib3Jy b3dlZCByZWZlcmVuY2UgdG8gdGhlIFB5dGhvbiBvYmplY3Qgb2YgdHlwZSBQ c3BhY2UKKyAgIHJlcHJlc2VudGluZyBQU1BBQ0UuICBJZiB0aGUgb2JqZWN0 IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCwKKyAgIHJldHVybiBpdC4gIE90 aGVyd2lzZSwgY3JlYXRlIGl0LiAgUmV0dXJuIE5VTEwgYW5kIHNldCB0aGUg UHl0aG9uCisgICBlcnJvciBvbiBmYWlsdXJlLiAgKi8KKworUHlPYmplY3Qg KgorcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKHN0cnVjdCBwcm9ncmFtX3Nw YWNlICpwc3BhY2UpCit7CisgIHBzcGFjZV9vYmplY3QgKm9iamVjdDsKKwor ICBvYmplY3QgPSBwcm9ncmFtX3NwYWNlX2RhdGEgKHBzcGFjZSwgcHNweV9w c3BhY2VfZGF0YV9rZXkpOworICBpZiAoIW9iamVjdCkKKyAgICB7CisgICAg ICBvYmplY3QgPSBQeU9iamVjdF9OZXcgKHBzcGFjZV9vYmplY3QsICZwc3Bh Y2Vfb2JqZWN0X3R5cGUpOworICAgICAgaWYgKG9iamVjdCkKKwl7CisJICBQ eU9iamVjdCAqZGljdDsKKworCSAgb2JqZWN0LT5wc3BhY2UgPSBwc3BhY2U7 CisKKwkgIG9iamVjdC0+cHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKKwkg IGlmICghb2JqZWN0LT5wcmludGVycykKKwkgICAgeworCSAgICAgIFB5X0RF Q1JFRiAob2JqZWN0KTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQor CisJICBzZXRfcHJvZ3JhbV9zcGFjZV9kYXRhIChwc3BhY2UsIHBzcHlfcHNw YWNlX2RhdGFfa2V5LCBvYmplY3QpOworCX0KKyAgICB9CisKKyAgcmV0dXJu IChQeU9iamVjdCAqKSBvYmplY3Q7Cit9CisKK3ZvaWQKK2dkYnB5X2luaXRp YWxpemVfcHNwYWNlICh2b2lkKQoreworICBwc3B5X3BzcGFjZV9kYXRhX2tl eQorICAgID0gcmVnaXN0ZXJfcHJvZ3JhbV9zcGFjZV9kYXRhX3dpdGhfY2xl YW51cCAocHlfZnJlZV9wc3BhY2UpOworCisgIGlmIChQeVR5cGVfUmVhZHkg KCZwc3BhY2Vfb2JqZWN0X3R5cGUpIDwgMCkKKyAgICByZXR1cm47CisKKyAg UHlfSU5DUkVGICgmcHNwYWNlX29iamVjdF90eXBlKTsKKyAgUHlNb2R1bGVf QWRkT2JqZWN0IChnZGJfbW9kdWxlLCAiUHJvZ3NwYWNlIiwgKFB5T2JqZWN0 ICopICZwc3BhY2Vfb2JqZWN0X3R5cGUpOworfQorCisMCisKK3N0YXRpYyBQ eUdldFNldERlZiBwc3BhY2VfZ2V0c2V0W10gPQoreworICB7ICJmaWxlbmFt ZSIsIHBzcHlfZ2V0X2ZpbGVuYW1lLCBOVUxMLAorICAgICJUaGUgcHJvZ3Nw YWNlJ3MgbWFpbiBmaWxlbmFtZSwgb3IgTm9uZS4iLCBOVUxMIH0sCisgIHsg InByZXR0eV9wcmludGVycyIsIHBzcHlfZ2V0X3ByaW50ZXJzLCBwc3B5X3Nl dF9wcmludGVycywKKyAgICAiUHJldHR5IHByaW50ZXJzLiIsIE5VTEwgfSwK KyAgeyBOVUxMIH0KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgcHNwYWNl X29iamVjdF90eXBlID0KK3sKKyAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxM KQorICAwLAkJCQkgIC8qb2Jfc2l6ZSovCisgICJnZGIuUHJvZ3NwYWNlIiwJ CSAgLyp0cF9uYW1lKi8KKyAgc2l6ZW9mIChwc3BhY2Vfb2JqZWN0KSwJICAv KnRwX2Jhc2ljc2l6ZSovCisgIDAsCQkJCSAgLyp0cF9pdGVtc2l6ZSovCisg IHBzcHlfZGVhbGxvYywJCQkgIC8qdHBfZGVhbGxvYyovCisgIDAsCQkJCSAg Lyp0cF9wcmludCovCisgIDAsCQkJCSAgLyp0cF9nZXRhdHRyKi8KKyAgMCwJ CQkJICAvKnRwX3NldGF0dHIqLworICAwLAkJCQkgIC8qdHBfY29tcGFyZSov CisgIDAsCQkJCSAgLyp0cF9yZXByKi8KKyAgMCwJCQkJICAvKnRwX2FzX251 bWJlciovCisgIDAsCQkJCSAgLyp0cF9hc19zZXF1ZW5jZSovCisgIDAsCQkJ CSAgLyp0cF9hc19tYXBwaW5nKi8KKyAgMCwJCQkJICAvKnRwX2hhc2ggKi8K KyAgMCwJCQkJICAvKnRwX2NhbGwqLworICAwLAkJCQkgIC8qdHBfc3RyKi8K KyAgMCwJCQkJICAvKnRwX2dldGF0dHJvKi8KKyAgMCwJCQkJICAvKnRwX3Nl dGF0dHJvKi8KKyAgMCwJCQkJICAvKnRwX2FzX2J1ZmZlciovCisgIFB5X1RQ RkxBR1NfREVGQVVMVCwJCSAgLyp0cF9mbGFncyovCisgICJHREIgcHJvZ3Nw YWNlIG9iamVjdCIsCSAgLyogdHBfZG9jICovCisgIDAsCQkJCSAgLyogdHBf dHJhdmVyc2UgKi8KKyAgMCwJCQkJICAvKiB0cF9jbGVhciAqLworICAwLAkJ CQkgIC8qIHRwX3JpY2hjb21wYXJlICovCisgIDAsCQkJCSAgLyogdHBfd2Vh a2xpc3RvZmZzZXQgKi8KKyAgMCwJCQkJICAvKiB0cF9pdGVyICovCisgIDAs CQkJCSAgLyogdHBfaXRlcm5leHQgKi8KKyAgMCwJCQkJICAvKiB0cF9tZXRo b2RzICovCisgIDAsCQkJCSAgLyogdHBfbWVtYmVycyAqLworICBwc3BhY2Vf Z2V0c2V0LAkJICAvKiB0cF9nZXRzZXQgKi8KKyAgMCwJCQkJICAvKiB0cF9i YXNlICovCisgIDAsCQkJCSAgLyogdHBfZGljdCAqLworICAwLAkJCQkgIC8q IHRwX2Rlc2NyX2dldCAqLworICAwLAkJCQkgIC8qIHRwX2Rlc2NyX3NldCAq LworICAwLAkJCQkgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgMCwJCQkJICAv KiB0cF9pbml0ICovCisgIDAsCQkJCSAgLyogdHBfYWxsb2MgKi8KKyAgcHNw eV9uZXcsCQkJICAvKiB0cF9uZXcgKi8KK307CkluZGV4OiBweXRob24vcHl0 aG9uLWludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgs dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcCAtcjEuMjMg cHl0aG9uLWludGVybmFsLmgKLS0tIHB5dGhvbi9weXRob24taW50ZXJuYWwu aAk5IEFwciAyMDEwIDA5OjQxOjQzIC0wMDAwCTEuMjMKKysrIHB5dGhvbi9w eXRob24taW50ZXJuYWwuaAkxNCBBcHIgMjAxMCAyMjozNDozNiAtMDAwMApA QCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIGludCBQeV9zc2l6ZV90Owogc3Ry dWN0IGJsb2NrOwogc3RydWN0IHZhbHVlOwogc3RydWN0IGxhbmd1YWdlX2Rl Zm47CitzdHJ1Y3QgcHJvZ3JhbV9zcGFjZTsKIAogZXh0ZXJuIFB5T2JqZWN0 ICpnZGJfbW9kdWxlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCB2YWx1ZV9vYmpl Y3RfdHlwZTsKQEAgLTkxLDggKzkyLDExIEBAIFB5T2JqZWN0ICpzeW1ib2xf dG9fc3ltYm9sX29iamVjdCAoc3RydWMKIFB5T2JqZWN0ICpibG9ja190b19i bG9ja19vYmplY3QgKHN0cnVjdCBibG9jayAqYmxvY2ssIHN0cnVjdCBvYmpm aWxlICpvYmpmaWxlKTsKIFB5T2JqZWN0ICp2YWx1ZV90b192YWx1ZV9vYmpl Y3QgKHN0cnVjdCB2YWx1ZSAqdik7CiBQeU9iamVjdCAqdHlwZV90b190eXBl X29iamVjdCAoc3RydWN0IHR5cGUgKik7Ci1QeU9iamVjdCAqb2JqZmlsZV90 b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbGUgKik7CiAKK1B5T2Jq ZWN0ICpwc3BhY2VfdG9fcHNwYWNlX29iamVjdCAoc3RydWN0IHByb2dyYW1f c3BhY2UgKik7CitQeU9iamVjdCAqcHNweV9nZXRfcHJpbnRlcnMgKFB5T2Jq ZWN0ICosIHZvaWQgKik7CisKK1B5T2JqZWN0ICpvYmpmaWxlX3RvX29iamZp bGVfb2JqZWN0IChzdHJ1Y3Qgb2JqZmlsZSAqKTsKIFB5T2JqZWN0ICpvYmpm cHlfZ2V0X3ByaW50ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogCiBzdHJ1 Y3QgYmxvY2sgKmJsb2NrX29iamVjdF90b19ibG9jayAoUHlPYmplY3QgKm9i aik7CkBAIC0xMTIsNiArMTE2LDcgQEAgdm9pZCBnZGJweV9pbml0aWFsaXpl X3N5bXRhYnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX2Jsb2Nr cyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfdHlwZXMgKHZvaWQp Owogdm9pZCBnZGJweV9pbml0aWFsaXplX2Z1bmN0aW9ucyAodm9pZCk7Cit2 b2lkIGdkYnB5X2luaXRpYWxpemVfcHNwYWNlICh2b2lkKTsKIHZvaWQgZ2Ri cHlfaW5pdGlhbGl6ZV9vYmpmaWxlICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5p dGlhbGl6ZV9icmVha3BvaW50cyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRp YWxpemVfbGF6eV9zdHJpbmcgKHZvaWQpOwpJbmRleDogcHl0aG9uL3B5dGhv bi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvcHl0aG9uL3B5dGhvbi5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjMwCmRpZmYgLXUgLXAgLXIxLjMwIHB5dGhvbi5jCi0tLSBweXRob24v cHl0aG9uLmMJMTQgQXByIDIwMTAgMTM6MTg6NTUgLTAwMDAJMS4zMAorKysg cHl0aG9uL3B5dGhvbi5jCTE0IEFwciAyMDEwIDIyOjM0OjM2IC0wMDAwCkBA IC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAidWktb3V0LmgiCiAjaW5jbHVk ZSAiY2xpL2NsaS1zY3JpcHQuaCIKICNpbmNsdWRlICJnZGJjbWQuaCIKKyNp bmNsdWRlICJwcm9nc3BhY2UuaCIKICNpbmNsdWRlICJvYmpmaWxlcy5oIgog I2luY2x1ZGUgIm9ic2VydmVyLmgiCiAjaW5jbHVkZSAidmFsdWUuaCIKQEAg LTQxNyw2ICs0MTgsNDcgQEAgZ2RicHlfcHJpbnRfc3RhY2sgKHZvaWQpCiAK IAwKIAorLyogUmV0dXJuIHRoZSBjdXJyZW50IFByb2dzcGFjZS4KKyAgIFRo ZXJlIGFsd2F5cyBpcyBvbmUuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgor Z2RicHlfZ2V0X2N1cnJlbnRfcHJvZ3NwYWNlIChQeU9iamVjdCAqdW51c2Vk MSwgUHlPYmplY3QgKnVudXNlZDIpCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7 CisKKyAgcmVzdWx0ID0gcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKGN1cnJl bnRfcHJvZ3JhbV9zcGFjZSk7CisgIGlmIChyZXN1bHQpCisgICAgUHlfSU5D UkVGIChyZXN1bHQpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBSZXR1 cm4gYSBzZXF1ZW5jZSBob2xkaW5nIGFsbCB0aGUgUHJvZ3NwYWNlcy4gICov CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZGJweV9wcm9nc3BhY2VzIChQeU9i amVjdCAqdW51c2VkMSwgUHlPYmplY3QgKnVudXNlZDIpCit7CisgIHN0cnVj dCBwcm9ncmFtX3NwYWNlICpwczsKKyAgUHlPYmplY3QgKmxpc3Q7CisKKyAg bGlzdCA9IFB5TGlzdF9OZXcgKDApOworICBpZiAoIWxpc3QpCisgICAgcmV0 dXJuIE5VTEw7CisKKyAgQUxMX1BTUEFDRVMgKHBzKQorICB7CisgICAgUHlP YmplY3QgKml0ZW0gPSBwc3BhY2VfdG9fcHNwYWNlX29iamVjdCAocHMpOwor ICAgIGlmICghaXRlbSB8fCBQeUxpc3RfQXBwZW5kIChsaXN0LCBpdGVtKSA9 PSAtMSkKKyAgICAgIHsKKwlQeV9ERUNSRUYgKGxpc3QpOworCXJldHVybiBO VUxMOworICAgICAgfQorICB9CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKKwwK KwogLyogVGhlICJjdXJyZW50IiBvYmpmaWxlLiAgVGhpcyBpcyBzZXQgd2hl biBnZGIgZGV0ZWN0cyB0aGF0IGEgbmV3CiAgICBvYmpmaWxlIGhhcyBiZWVu IGxvYWRlZC4gIEl0IGlzIG9ubHkgc2V0IGZvciB0aGUgZHVyYXRpb24gb2Yg YSBjYWxsCiAgICB0byBnZGJweV9uZXdfb2JqZmlsZTsgaXQgaXMgTlVMTCBh dCBvdGhlciB0aW1lcy4gICovCkBAIC01MTIsNiArNTU0LDcgQEAgZ2RicHlf Z2V0X2N1cnJlbnRfb2JqZmlsZSAoUHlPYmplY3QgKnVudQogfQogCiAvKiBS ZXR1cm4gYSBzZXF1ZW5jZSBob2xkaW5nIGFsbCB0aGUgT2JqZmlsZXMuICAq LworCiBzdGF0aWMgUHlPYmplY3QgKgogZ2RicHlfb2JqZmlsZXMgKFB5T2Jq ZWN0ICp1bnVzZWQxLCBQeU9iamVjdCAqdW51c2VkMikKIHsKQEAgLTY2OSw2 ICs3MTgsNyBAQCBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8tbG9hZGluZyBv ZiBQeXRoCiAgIGdkYnB5X2luaXRpYWxpemVfYmxvY2tzICgpOwogICBnZGJw eV9pbml0aWFsaXplX2Z1bmN0aW9ucyAoKTsKICAgZ2RicHlfaW5pdGlhbGl6 ZV90eXBlcyAoKTsKKyAgZ2RicHlfaW5pdGlhbGl6ZV9wc3BhY2UgKCk7CiAg IGdkYnB5X2luaXRpYWxpemVfb2JqZmlsZSAoKTsKICAgZ2RicHlfaW5pdGlh bGl6ZV9icmVha3BvaW50cyAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9sYXp5 X3N0cmluZyAoKTsKQEAgLTczNSw2ICs3ODUsMTEgQEAgc3RhdGljIFB5TWV0 aG9kRGVmIEdkYk1ldGhvZHNbXSA9CiAgIHsgImRlZmF1bHRfdmlzdWFsaXpl ciIsIGdkYnB5X2RlZmF1bHRfdmlzdWFsaXplciwgTUVUSF9WQVJBUkdTLAog ICAgICJGaW5kIHRoZSBkZWZhdWx0IHZpc3VhbGl6ZXIgZm9yIGEgVmFsdWUu IiB9LAogCisgIHsgImN1cnJlbnRfcHJvZ3NwYWNlIiwgZ2RicHlfZ2V0X2N1 cnJlbnRfcHJvZ3NwYWNlLCBNRVRIX05PQVJHUywKKyAgICAiUmV0dXJuIHRo ZSBjdXJyZW50IFByb2dzcGFjZS4iIH0sCisgIHsgInByb2dzcGFjZXMiLCBn ZGJweV9wcm9nc3BhY2VzLCBNRVRIX05PQVJHUywKKyAgICAiUmV0dXJuIGEg c2VxdWVuY2Ugb2YgYWxsIHByb2dzcGFjZXMuIiB9LAorCiAgIHsgImN1cnJl bnRfb2JqZmlsZSIsIGdkYnB5X2dldF9jdXJyZW50X29iamZpbGUsIE1FVEhf Tk9BUkdTLAogICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgT2JqZmlsZSBiZWlu ZyBsb2FkZWQsIG9yIE5vbmUuIiB9LAogICB7ICJvYmpmaWxlcyIsIGdkYnB5 X29iamZpbGVzLCBNRVRIX05PQVJHUywKSW5kZXg6IHRlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LXByb2dzcGFjZS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXByb2dzcGFjZS5j CmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRob24vcHktcHJvZ3NwYWNlLmMK LS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1wcm9nc3BhY2UuYwkxNCBBcHIgMjAx MCAyMjozNDozNiAtMDAwMApAQCAtMCwwICsxLDIyIEBACisvKiBUaGlzIHRl c3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisg ICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworaW50CittYWlu ICgpCit7CisgIHJldHVybiAwOworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5w eXRob24vcHktcHJvZ3NwYWNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1wcm9nc3BhY2Uu ZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRob24vcHktcHJvZ3NwYWNl LmV4cAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK KysrIHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXByb2dzcGFjZS5leHAJMTQg QXByIDIwMTAgMjI6MzQ6MzYgLTAwMDAKQEAgLTAsMCArMSw0NyBAQAorIyBD b3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgcHJvZ3JhbSBz cGFjZQorIyBzdXBwb3J0IGluIFB5dGhvbi4KKworaWYgJHRyYWNlbGV2ZWwg dGhlbiB7CisgICAgc3RyYWNlICR0cmFjZWxldmVsCit9CisKK3NldCB0ZXN0 ZmlsZSAicHktcHJvZ3NwYWNlIgorc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0u Yworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxl fQoraWYgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtz cmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUge2RlYnVnfV0gIT0g IiIgfSB7CisgICAgdW50ZXN0ZWQgIkNvdWxkbid0IGNvbXBpbGUgJHtzcmNm aWxlfSIKKyAgICByZXR1cm4gLTEKK30KKworIyBTdGFydCB3aXRoIGEgZnJl c2ggZ2RiLgorCitnZGJfZXhpdAorZ2RiX3N0YXJ0CitnZGJfcmVpbml0aWFs aXplX2RpciAkc3JjZGlyLyRzdWJkaXIKKworIyBTa2lwIGFsbCB0ZXN0cyBp ZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tp cF9weXRob25fdGVzdHNdIH0geyBjb250aW51ZSB9CisKK2dkYl90ZXN0ICJw eXRob24gcHJpbnQgZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkuZmlsZW5hbWUi ICJOb25lIiBcCisgICJjdXJyZW50IHByb2dzcGFjZSBmaWxlbmFtZSAoTm9u ZSkiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGdkYi5wcm9nc3BhY2VzKCki ICJcXFxbPGdkYi5Qcm9nc3BhY2Ugb2JqZWN0IGF0ICRoZXg+XFxcXSIKKwor Z2RiX2xvYWQgJHtiaW5maWxlfQorCitnZGJfdGVzdCAicHl0aG9uIHByaW50 IGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLmZpbGVuYW1lIiAicHktcHJvZ3Nw YWNlIiBcCisgICJjdXJyZW50IHByb2dzcGFjZSBmaWxlbmFtZSAocHktcHJv Z3NwYWNlKSIK --0003255646d2bed78b04843a2945--