From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6527 invoked by alias); 10 Jan 2012 14:51:13 -0000 Received: (qmail 6508 invoked by uid 22791); 10 Jan 2012 14:51:09 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_BJ X-Spam-Check-By: sourceware.org Received: from mail-vw0-f41.google.com (HELO mail-vw0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 10 Jan 2012 14:50:52 +0000 Received: by vbbfn1 with SMTP id fn1so4080285vbb.0 for ; Tue, 10 Jan 2012 06:50:51 -0800 (PST) Received: by 10.52.22.193 with SMTP id g1mr9492675vdf.77.1326207051445; Tue, 10 Jan 2012 06:50:51 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.3.130 with HTTP; Tue, 10 Jan 2012 06:50:30 -0800 (PST) In-Reply-To: <83r4z8eqoa.fsf@gnu.org> References: <83r4z8eqoa.fsf@gnu.org> From: Kevin Pouget Date: Tue, 10 Jan 2012 15:09:00 -0000 Message-ID: Subject: Re: [PATCH] Add bp_location to Python interface To: Eli Zaretskii Cc: gdb-patches@sourceware.org, pmuldoon@redhat.com Content-Type: multipart/mixed; boundary=20cf307ac3fd33371004b62da447 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: 2012-01/txt/msg00292.txt.bz2 --20cf307ac3fd33371004b62da447 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 5445 On Mon, Jan 9, 2012 at 6:23 PM, Eli Zaretskii wrote: >> From: Kevin Pouget >> Date: Mon, 9 Jan 2012 12:46:30 +0100 >> Cc: pmuldoon@redhat.com >> >> ping > > Sorry for missing it the first time. no problem, thanks for your feedbacks, I replied inline >> --- a/gdb/NEWS >> +++ b/gdb/NEWS >> @@ -9,6 +9,12 @@ >> =A0* The binary "gdbtui" can no longer be built or installed. >> =A0 =A0Use "gdb -tui" instead. >> >> +* Python scripting >> + >> + =A0** A new method "gdb.Breakpoint.locations" has been added, as well = as >> + =A0 =A0 the class gdb.BpLocation to provide further details about brea= kpoint >> + =A0 =A0 locations. >> + > > This is OK. > >> +@defun gdb.locations () >> +Return a tuple containing a sequence of @code{gdb.BpLocation} objects >> +(see below) associated with this breakpoint. =A0A breakpoint with no lo= cation >> +is a pending breakpoint (@xref{Set Breaks, , pending breakpoints}). > > @pxref, not @xref, as this cross-reference is inside parentheses. > >> +A breakpoint location is represented with a @code{gdb.BpLocation} objec= t, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0^^^^ > "by" fixed >> +which offers the following attributes (all read only) and methods. >> +Please note that breakpoint locations are very transient entities in >> +@value{GDBN}, so one should avoid keeping references to them. > > I'd use "volatile" instead of "transient". fixed > Also, perhaps a sentence > or two about _why_ the locations are volatile would help. =A0E.g., if I > knew what actions invalidate locations, I could avoid them and leave > the locations valid for longer. That's a point Phil also noted so I've try to explain it a bit further, although my knowledge about the internal mechanisms involved is quite limited. A maintainer will have to confirm these words. I also mentioned explicitly that it's the *objects* related to the locations which are volatile, because the location (ie, address) itself actually doesn't change: > Please note that breakpoint location objects are very volatile entities in > @value{GDBN}, so one should avoid keeping references to them. They can be > destructed and recreated on any breakpoint creation and deletion, shared- > library event, inferior function call, @dots{} >> +owns this location. =A0This attribute is not writable. =A0From an imple= mentation >> +point of view, there is a @code{1 ... n} relation between a breakpoint = and > > "1 ... n" here means one to many? =A0If so, I suggest to say that > literally. > > In any case, "@code{1 ... n}" is not a good idea, because of the > whitespace and because we use @dots{} instead of literal periods. =A0If > "one to many" is not what you meant, I can suggest how to mark up > whatever needs to be written here. No, "one-to-many" is what I meant, I've changed it (spelled with the dashes, right?) >> +This attribute holds a reference to the @code{gdb.Inferior} inferior ob= ject > > I'd drop the second instance of "inferior", it looks redundant. dropped >> +@defun BpLocation.is_valid () >> +Returns @code{True} if the @code{gdb.BpLocation} object is valid, >> +@code{False} if not. =A0A @code{gdb.BpLocation} object may be invalidat= ed by >> +GDB at any moment for internal reasons. =A0All other @code{gdb.BpLocati= on} >> +methods and attributes will throw an exception if the object is invalid. > > @value{GDBN} instead of "GDB". > > In any case, the last 2 sentences sound scary: I could interpret them > as meaning I cannot trust the locations at all. =A0If that is indeed so, > what use are they? that's already discussed above, but I don't want you to be scared, so let me explain what I meant: it's not "at any moment", but rather "after any call to GDB's Python interface". We may want to say that it's only breakpoint or execution-related calls, but _I_ can't ensure that this is true, and it 'might' change in the future: > A @code{gdb.BpLocation} object may be invalidated during > any call to @{GDB}'s API for internal reasons (for instance, but not limi= ted to, > breakpoint or execution-related mechanisms). (I'm not sure what's the right Python term here for 'mechanisms', reading/writing an attribute may trigger internal functions, so 'call' or 'function' seem not to suit very well) Cordially, Kevin -- 2012-01-10 Kevin Pouget Add bp_location to Python interface * Makefile.in (SUBDIR_PYTHON_OBS): Add py-bploc.o (SUBDIR_PYTHON_SRCS): Add python/py-bploc.c Add build rule for this file. * breakpoint.h (struct bploc_object): Forward declaration. (struct bp_location): Add py_bploc_obj. * breakpoint.c (free_bp_location): Call gdbpy_bplocation_free. * python/py-bploc.c: New file. * python/py-breakpoint.c (bppy_locations): New function. (breakpoint_object_methods): New method binding: locations(). * python/python-internal.h (bploc_object): New typedef. (bplocation_to_bplocation_object): New prototype. (gdbpy_initialize_bplocation): Likewise. * python/python.c (gdbpy_bplocation_free): New empty stub. (_initialize_python): Call gdbpy_initialize_bplocation. * python/python.h (gdbpy_bplocation_free): New prototype. =09 doc/ Add bp_location to Python interface * gdb.texinfo (Breakpoints In Python): Document gdb.Breakpoint.locations and gdb.BpLocation. testsuite/ Add bp_location to Python interface * gdb.python/py-breakpoint.exp: Test gdb.BpLocation. --20cf307ac3fd33371004b62da447 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Add-gdb.BpLocation-to-Python-interface.patch" Content-Disposition: attachment; filename="0001-Add-gdb.BpLocation-to-Python-interface.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gx91eq570 Content-length: 30801 RnJvbSAxYjA5N2M3Nzk4NDI5OTYyMzY2MzZjM2NjMjI4YjE4OTVjOGQ1OTY4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFdlZCwgMTggTWF5IDIwMTEg MTA6MDI6MjMgLTA0MDAKU3ViamVjdDogW1BBVENIXSBBZGQgZ2RiLkJwTG9j YXRpb24gdG8gUHl0aG9uIGludGVyZmFjZQoKLS0tCiBnZGIvTWFrZWZpbGUu aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIGdkYi9O RVdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYg KwogZ2RiL2JyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMyArCiBnZGIvYnJlYWtwb2ludC5oICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICA2ICsKIGdkYi9kb2MvZ2RiLnRleGluZm8gICAgICAg ICAgICAgICAgICAgICAgICB8ICAgNDcgKysrKysKIGdkYi9weXRob24vcHkt YnBsb2MuYyAgICAgICAgICAgICAgICAgICAgICB8ICAzMDIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZ2RiL3B5dGhvbi9weS1icmVha3BvaW50 LmMgICAgICAgICAgICAgICAgIHwgICAzOSArKysrCiBnZGIvcHl0aG9uL3B5 dGhvbi1pbnRlcm5hbC5oICAgICAgICAgICAgICAgfCAgICA2ICsKIGdkYi9w eXRob24vcHl0aG9uLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcg KwogZ2RiL3B5dGhvbi9weXRob24uaCAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMiArCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktYnJlYWtw b2ludC5leHAgfCAgIDUyICsrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCA0NzYg aW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnZGIvcHl0aG9uL3B5LWJwbG9jLmMKCmRpZmYgLS1naXQgYS9nZGIv TWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KaW5kZXggYTUxOTZhNy4u MTkyOGM3ZSAxMDA2NDQKLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKyBiL2dk Yi9NYWtlZmlsZS5pbgpAQCAtMjczLDYgKzI3Myw3IEBAIFNVQkRJUl9QWVRI T05fT0JTID0gXAogCXB5LWF1dG8tbG9hZC5vIFwKIAlweS1ibG9jay5vIFwK IAlweS1icGV2ZW50Lm8gXAorCXB5LWJwbG9jLm8gXAogCXB5LWJyZWFrcG9p bnQubyBcCiAJcHktY21kLm8gXAogCXB5LWNvbnRpbnVlZXZlbnQubyBcCkBA IC0zMDUsNiArMzA2LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0gXAogCXB5 dGhvbi9weS1hdXRvLWxvYWQuYyBcCiAJcHl0aG9uL3B5LWJsb2NrLmMgXAog CXB5dGhvbi9weS1icGV2ZW50LmMgXAorCXB5dGhvbi9weS1icGxvYy5jIFwK IAlweXRob24vcHktYnJlYWtwb2ludC5jIFwKIAlweXRob24vcHktY21kLmMg XAogCXB5dGhvbi9weS1jb250aW51ZWV2ZW50LmMgXApAQCAtMjAzMiw2ICsy MDM0LDEwIEBAIHB5LWJwZXZlbnQubzogJChzcmNkaXIpL3B5dGhvbi9weS1i cGV2ZW50LmMKIAkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNk aXIpL3B5dGhvbi9weS1icGV2ZW50LmMKIAkkKFBPU1RDT01QSUxFKQogCitw eS1icGxvYy5vOiAkKHNyY2RpcikvcHl0aG9uL3B5LWJwbG9jLmMKKwkkKENP TVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1i cGxvYy5jCisJJChQT1NUQ09NUElMRSkKKwogcHktYnJlYWtwb2ludC5vOiAk KHNyY2RpcikvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYwogCSQoQ09NUElMRSkg JChQWVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWJyZWFrcG9p bnQuYwogCSQoUE9TVENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvTkVXUyBi L2dkYi9ORVdTCmluZGV4IGE5YTc4NTkuLmM1MjlmOTYgMTAwNjQ0Ci0tLSBh L2dkYi9ORVdTCisrKyBiL2dkYi9ORVdTCkBAIC05LDYgKzksMTIgQEAKICog VGhlIGJpbmFyeSAiZ2RidHVpIiBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0IG9y IGluc3RhbGxlZC4KICAgVXNlICJnZGIgLXR1aSIgaW5zdGVhZC4KIAorKiBQ eXRob24gc2NyaXB0aW5nCisKKyAgKiogQSBuZXcgbWV0aG9kICJnZGIuQnJl YWtwb2ludC5sb2NhdGlvbnMiIGhhcyBiZWVuIGFkZGVkLCBhcyB3ZWxsIGFz CisgICAgIHRoZSBjbGFzcyBnZGIuQnBMb2NhdGlvbiB0byBwcm92aWRlIGZ1 cnRoZXIgZGV0YWlscyBhYm91dCBicmVha3BvaW50CisgICAgIGxvY2F0aW9u cy4KKwogKioqIENoYW5nZXMgaW4gR0RCIDcuNAogCiAqIEdEQiBub3cgaGFu ZGxlcyBhbWJpZ3VvdXMgbGluZXNwZWNzIG1vcmUgY29uc2lzdGVudGx5OyB0 aGUgZXhpc3RpbmcKZGlmZiAtLWdpdCBhL2dkYi9icmVha3BvaW50LmMgYi9n ZGIvYnJlYWtwb2ludC5jCmluZGV4IDdiOGQxMGYuLjI4Yjc1NzkgMTAwNjQ0 Ci0tLSBhL2dkYi9icmVha3BvaW50LmMKKysrIGIvZ2RiL2JyZWFrcG9pbnQu YwpAQCAtNTY3OCw2ICs1Njc4LDkgQEAgc3RhdGljIHZvaWQKIGZyZWVfYnBf bG9jYXRpb24gKHN0cnVjdCBicF9sb2NhdGlvbiAqbG9jKQogewogICBsb2Mt Pm9wcy0+ZHRvciAobG9jKTsKKworICBnZGJweV9icGxvY2F0aW9uX2ZyZWUg KGxvYyk7CisKICAgeGZyZWUgKGxvYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2dk Yi9icmVha3BvaW50LmggYi9nZGIvYnJlYWtwb2ludC5oCmluZGV4IGMxZDNi ZTkuLjhkNmZhMTkgMTAwNjQ0Ci0tLSBhL2dkYi9icmVha3BvaW50LmgKKysr IGIvZ2RiL2JyZWFrcG9pbnQuaApAQCAtMjYsNiArMjYsNyBAQAogc3RydWN0 IHZhbHVlOwogc3RydWN0IGJsb2NrOwogc3RydWN0IGJyZWFrcG9pbnRfb2Jq ZWN0Oworc3RydWN0IGJwbG9jX29iamVjdDsKIHN0cnVjdCBnZXRfbnVtYmVy X29yX3JhbmdlX3N0YXRlOwogc3RydWN0IHRocmVhZF9pbmZvOwogc3RydWN0 IGJwc3RhdHM7CkBAIC00MDMsNiArNDA0LDExIEBAIHN0cnVjdCBicF9sb2Nh dGlvbgogICAvKiBTb3VyY2UgZmlsZSBuYW1lIG9mIHRoaXMgYWRkcmVzcy4g ICovCiAKICAgY2hhciAqc291cmNlX2ZpbGU7CisKKyAgLyogUHl0aG9uIG9i amVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsb2NhdGlvbi4gIE1heSBiZSBO VUxMIGlmIHRoZSBsb2NhdGlvbgorICAgICBpcyBub3QgeWV0IGV4cG9ydGVk IHRvIFB5dGhvbi4gICovCisKKyAgc3RydWN0IGJwbG9jX29iamVjdCAqcHlf YnBsb2Nfb2JqOwogfTsKIAogLyogVGhpcyBzdHJ1Y3R1cmUgaXMgYSBjb2xs ZWN0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQsIGlmIGF2YWlsYWJs ZSwKZGlmZiAtLWdpdCBhL2dkYi9kb2MvZ2RiLnRleGluZm8gYi9nZGIvZG9j L2dkYi50ZXhpbmZvCmluZGV4IDJmNGFhNGYuLjRkZjdkYmUgMTAwNjQ0Ci0t LSBhL2dkYi9kb2MvZ2RiLnRleGluZm8KKysrIGIvZ2RiL2RvYy9nZGIudGV4 aW5mbwpAQCAtMjQzNTgsNiArMjQzNTgsNTMgQEAgY29tbWFuZHMsIHNlcGFy YXRlZCBieSBuZXdsaW5lcy4gIElmIHRoZXJlIGFyZSBubyBjb21tYW5kcywg dGhpcwogYXR0cmlidXRlIGlzIEBjb2Rle05vbmV9LiAgVGhpcyBhdHRyaWJ1 dGUgaXMgbm90IHdyaXRhYmxlLgogQGVuZCBkZWZ2YXIKIAorQGZpbmRleCBn ZGIubG9jYXRpb25zCitAZGVmdW4gZ2RiLmxvY2F0aW9ucyAoKQorUmV0dXJu IGEgdHVwbGUgY29udGFpbmluZyBhIHNlcXVlbmNlIG9mIEBjb2Rle2dkYi5C cExvY2F0aW9ufSBvYmplY3RzIAorKHNlZSBiZWxvdykgYXNzb2NpYXRlZCB3 aXRoIHRoaXMgYnJlYWtwb2ludC4gIEEgYnJlYWtwb2ludCB3aXRoIG5vIGxv Y2F0aW9uCitpcyBhIHBlbmRpbmcgYnJlYWtwb2ludCAoQHhyZWZ7U2V0IEJy ZWFrcywgLCBwZW5kaW5nIGJyZWFrcG9pbnRzfSkuCitAZW5kIGRlZnVuCisK K0EgYnJlYWtwb2ludCBsb2NhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIEBj b2Rle2dkYi5CcExvY2F0aW9ufSBvYmplY3QsCit3aGljaCBvZmZlcnMgdGhl IGZvbGxvd2luZyBhdHRyaWJ1dGVzIChhbGwgcmVhZCBvbmx5KSBhbmQgbWV0 aG9kcy4KK1BsZWFzZSBub3RlIHRoYXQgYnJlYWtwb2ludCBsb2NhdGlvbiBv YmplY3RzIGFyZSB2ZXJ5IHZvbGF0aWxlIGVudGl0aWVzIGluCitAdmFsdWV7 R0RCTn0sIHNvIG9uZSBzaG91bGQgYXZvaWQga2VlcGluZyByZWZlcmVuY2Vz IHRvIHRoZW0uICBUaGV5IGNhbiBiZSAKK2Rlc3RydWN0ZWQgYW5kIHJlY3Jl YXRlZCBvbiBhbnkgYnJlYWtwb2ludCBjcmVhdGlvbiBhbmQgZGVsZXRpb24s IHNoYXJlZC0KK2xpYnJhcnkgZXZlbnQsIGluZmVyaW9yIGZ1bmN0aW9uIGNh bGwsIEBkb3Rze30gCisKK0BkZWZ2YXIgQnBMb2NhdGlvbi5vd25lcgorVGhp cyBhdHRyaWJ1dGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIEBjb2Rle2dk Yi5CcmVha3BvaW50fSBvYmplY3Qgd2hpY2gKK293bnMgdGhpcyBsb2NhdGlv bi4gIFRoaXMgYXR0cmlidXRlIGlzIG5vdCB3cml0YWJsZS4gIEZyb20gYW4g aW1wbGVtZW50YXRpb24gCitwb2ludCBvZiB2aWV3LCB0aGVyZSBpcyBhIG9u ZS10by1tYW55IHJlbGF0aW9uIGJldHdlZW4gYSBicmVha3BvaW50IGFuZAor aXRzIGxvY2F0aW9ucywgZXZlbiBpZiB0d28gYnJlYWtwb2ludHMgYXJlIHNl dCBvbiBhdCBzYW1lIGFkZHJlc3MuCisgCitAZW5kIGRlZnZhcgorCitAZGVm dmFyIEJwTG9jYXRpb24uZW5hYmxlZAorVGhpcyBhdHRyaWJ1dGUgaW5kaWNh dGVzIHdoZXRoZXIgdGhpcyBsb2NhdGlvbiBpcyBjdXJyZW50bHkgZW5hYmxl ZCBvciBub3QuCitUaGlzIGF0dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCitA ZW5kIGRlZnZhcgorCitAZGVmdmFyIEJwTG9jYXRpb24uaW5mZXJpb3IKK1Ro aXMgYXR0cmlidXRlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBAY29kZXtn ZGIuSW5mZXJpb3J9IG9iamVjdAoraW4gd2hpY2ggdGhpcyBicmVha3BvaW50 IGxvY2F0aW9uIGhhcyBiZWVuIGluc2VydGVkLiAgVGhlIHZhbHVlIHdpbGwg YmUgCitAY29kZXtOb25lfSBpZiB0aGVyZSBpcyBubyBpbmZlcmlvciBhc3Nv Y2lhdGVkIHdpdGggdGhpcyBsb2NhdGlvbi4gICBUaGlzIAorYXR0cmlidXRl IGlzIG5vdCB3cml0YWJsZS4KK0BlbmQgZGVmdmFyCisKK0BkZWZ2YXIgQnBM b2NhdGlvbi5hZGRyZXNzCitUaGlzIGF0dHJpYnV0ZSBob2xkcyBhIEBjb2Rl e2dkYi5WYWx1ZX0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFkZHJl c3MgCithdCB3aGljaCB0aGUgYnJlYWtwb2ludCBoYXMgYmVlbiBpbnNlcnRl ZC4gICBUaGlzIGF0dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCitAZW5kIGRl ZnZhcgorCitAZGVmdW4gQnBMb2NhdGlvbi5pc192YWxpZCAoKQorUmV0dXJu cyBAY29kZXtUcnVlfSBpZiB0aGUgQGNvZGV7Z2RiLkJwTG9jYXRpb259IG9i amVjdCBpcyB2YWxpZCwKK0Bjb2Rle0ZhbHNlfSBpZiBub3QuICBBIEBjb2Rl e2dkYi5CcExvY2F0aW9ufSBvYmplY3QgbWF5IGJlIGludmFsaWRhdGVkIGR1 cmluZworYW55IGNhbGwgdG8gQHtHREJ9J3MgQVBJIGZvciBpbnRlcm5hbCBy ZWFzb25zIChmb3IgaW5zdGFuY2UsIGJ1dCBub3QgbGltaXRlZCB0bywKK2Jy ZWFrcG9pbnQgb3IgZXhlY3V0aW9uIHJlbGF0ZWQgbWVjaGFuaXNtcykuICBB bGwgb3RoZXIgQGNvZGV7Z2RiLkJwTG9jYXRpb259CittZXRob2RzIGFuZCBh dHRyaWJ1dGVzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBvYmpl Y3QgaXMgaW52YWxpZC4KK0BlbmQgZGVmdW4KKwogQG5vZGUgRmluaXNoIEJy ZWFrcG9pbnRzIGluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gRmluaXNoIEJy ZWFrcG9pbnRzCiAKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktYnBsb2Mu YyBiL2dkYi9weXRob24vcHktYnBsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi41YmEzOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIv Z2RiL3B5dGhvbi9weS1icGxvYy5jCkBAIC0wLDAgKzEsMzAyIEBACisvKiBQ eXRob24gaW50ZXJmYWNlIHRvIGJyZWFrcG9pbnQgbG9jYXRpb25zLgorCisg ICBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaW5jbHVkZSAiZGVmcy5o IgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisjaW5jbHVkZSAicHl0aG9uLWlu dGVybmFsLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJn ZGJhcmNoLmgiCisKK3N0cnVjdCBicGxvY19vYmplY3QKK3sKKyAgUHlPYmpl Y3RfSEVBRAorCisgIC8qIFRoZSBsb2NhdGlvbiBjb3JyZXNwb25kaW5nIHRv IHRoaXMgZ2RiLkJwTG9jYXRpb24gb2JqZWN0LiAgSXQncyB0aGUgc2FtZQor ICAgICBpZGVhIGFzIGdkYi5CcmVha3BvaW50LCBpZiB0aGUgJ2JhY2tlbmQn IGxvY2F0aW9uIGlzIGRlbGV0ZWQsIExPQyBpcworICAgICBzZXQgdG8gTlVM TC4gIE5vIHJlZmVyZW5jZSB0byB0aGUgbG9jYXRpb24gaXMgb3duZWQgaGVy ZSAoaW4gdGVybXMgb2YKKyAgICAgcmVmLiBjb3VudGluZykgaW4gb3JkZXIg bm90IHRvIGNoYW5nZSB0aGUgaW50ZXJuYWwgYmVoYXZpb3IuICAqLworICBz dHJ1Y3QgYnBfbG9jYXRpb24gKmxvYzsKKworICAvKiAxIGlmIHRoZSBvd25l ciBCUCBoYXMgYmVlbiBkZWxldGVkLCAwIG90aGVyd2lzZS4gICovCisgIGlu dCBpbnZhbGlkX293bmVyOworfTsKKworLyogUmVxdWlyZSB0aGF0IExPQ0FU SU9OIGJlIGEgdmFsaWQgYnBfbG9jYXRpb247IHRocm93IGEgUHl0aG9uCisg ICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4gICovCisjZGVmaW5lIEJQ TE9DUFlfUkVRVUlSRV9WQUxJRChMb2NhdGlvbikgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICBpZiAoKExvY2F0aW9uKS0+bG9jID09IE5VTEwpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJl dHVybiBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF8oIkJwTG9jYXRpb24gaW52YWxpZC4iKSk7ICAgICAgICAgICAgICAg ICBcCisgICAgfSB3aGlsZSAoMCkKKworc3RhdGljIFB5VHlwZU9iamVjdCBi cGxvY19vYmplY3RfdHlwZTsKKworLyogQ2FsbCBieSBmcmVlX2JwX2xvY2F0 aW9uIHdoZW4gbG9jIGlzIGFib3V0IHRvIGJlIGZyZWVkLiAgKi8KKwordm9p ZAorZ2RicHlfYnBsb2NhdGlvbl9mcmVlIChzdHJ1Y3QgYnBfbG9jYXRpb24g KmxvYykKK3sKKyAgaWYgKGxvYy0+cHlfYnBsb2Nfb2JqKQorICAgIHsKKyAg ICAgIGxvYy0+cHlfYnBsb2Nfb2JqLT5sb2MgPSBOVUxMOworICAgICAgUHlf REVDUkVGIChsb2MtPnB5X2JwbG9jX29iaik7CisgICAgfQorfQorCisvKiBE aXNzb2NpYXRlIHRoZSBicF9sb2NhdGlvbiBmcm9tIHRoZSBQeXRob24gb2Jq ZWN0LiAgKi8KKworc3RhdGljIHZvaWQKK2JwbG9jcHlfZGVhbGxvYyAoUHlP YmplY3QgKnNlbGYpCit7CisgIGJwbG9jX29iamVjdCAqc2VsZl9icGxvYyA9 IChicGxvY19vYmplY3QgKikgc2VsZjsKKworICBpZiAoc2VsZl9icGxvYy0+ bG9jICE9IE5VTEwpCisgICAgc2VsZl9icGxvYy0+bG9jLT5weV9icGxvY19v YmogPSBOVUxMOworCisgIHNlbGYtPm9iX3R5cGUtPnRwX2ZyZWUgKHNlbGYp OworfQorCisvKiBDcmVhdGUgb3IgYWNxdWlyZSBhIHJlZiB0byB0aGUgYnBf bG9jYXRpb24gb2JqZWN0IChnZGIuQnBMb2NhdGlvbikKKyAgIHRoYXQgZW5j YXBzdWxhdGVzIHRoZSBzdHJ1Y3QgYnBfbG9jYXRpb24gZnJvbSBHREIuICAq LworCitQeU9iamVjdCAqCiticGxvY2F0aW9uX3RvX2JwbG9jYXRpb25fb2Jq ZWN0IChzdHJ1Y3QgYnBfbG9jYXRpb24gKmxvYykKK3sKKyAgYnBsb2Nfb2Jq ZWN0ICpicGxvY19vYmo7CisKKyAgZ2RiX2Fzc2VydCAobG9jICE9IE5VTEwp OworICBpZiAobG9jLT5weV9icGxvY19vYmopCisgICAgeworICAgICAgUHlf SU5DUkVGIChsb2MtPnB5X2JwbG9jX29iaik7CisgICAgICByZXR1cm4gKFB5 T2JqZWN0ICopIGxvYy0+cHlfYnBsb2Nfb2JqOworICAgIH0KKworICBicGxv Y19vYmogPSBQeU9iamVjdF9OZXcgKGJwbG9jX29iamVjdCwgJmJwbG9jX29i amVjdF90eXBlKTsKKyAgaWYgKCFicGxvY19vYmopCisgICAgcmV0dXJuIE5V TEw7CisKKyAgYnBsb2Nfb2JqLT5sb2MgPSBsb2M7CisgIGJwbG9jX29iai0+ aW52YWxpZF9vd25lciA9IDA7CisgIFB5X0lOQ1JFRiAoYnBsb2Nfb2JqKTsK KyAgbG9jLT5weV9icGxvY19vYmogPSBicGxvY19vYmo7CisKKyAgcmV0dXJu IChQeU9iamVjdCAqKSBicGxvY19vYmo7Cit9CisKKy8qIFB5dGhvbiBmdW5j dGlvbiB0byBnZXQgdGhlIEJQIG93bmluZyB0aGlzIGxvY2F0aW9uLCBpZiBh bnkuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnBsb2NweV9nZXRfb3du ZXIgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICBicGxv Y19vYmplY3QgKnNlbGZfYnBsb2MgPSAoYnBsb2Nfb2JqZWN0ICopIHNlbGY7 CisKKyAgQlBMT0NQWV9SRVFVSVJFX1ZBTElEIChzZWxmX2JwbG9jKTsKKwor ICBpZiAoc2VsZl9icGxvYy0+aW52YWxpZF9vd25lcikKKyAgICBQeV9SRVRV Uk5fTk9ORTsKKworICBpZiAoc2VsZl9icGxvYy0+bG9jLT5vd25lcgorICAg ICAgJiYgc2VsZl9icGxvYy0+bG9jLT5vd25lci0+cHlfYnBfb2JqZWN0KQor ICAgIHsKKyAgICAgIFB5X0lOQ1JFRiAoc2VsZl9icGxvYy0+bG9jLT5vd25l ci0+cHlfYnBfb2JqZWN0KTsKKyAgICAgIHJldHVybiAoUHlPYmplY3QgKikg c2VsZl9icGxvYy0+bG9jLT5vd25lci0+cHlfYnBfb2JqZWN0OworICAgIH0K KworICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyogUHl0aG9uIGZ1bmN0aW9u IHRvIHRlc3Qgd2hldGhlciBvciBub3QgdGhpcyBicmVha3BvaW50IGxvY2F0 aW9uIGlzCisgICBlbmFibGVkLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoK K2JwbG9jcHlfZ2V0X2VuYWJsZWQgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpj bG9zdXJlKQoreworICBicGxvY19vYmplY3QgKnNlbGZfYnBsb2MgPSAoYnBs b2Nfb2JqZWN0ICopIHNlbGY7CisKKyAgQlBMT0NQWV9SRVFVSVJFX1ZBTElE IChzZWxmX2JwbG9jKTsKKworICBpZiAoc2VsZl9icGxvYy0+bG9jLT5lbmFi bGVkKQorICAgIFB5X1JFVFVSTl9UUlVFOworCisgIFB5X1JFVFVSTl9GQUxT RTsKK30KKworLyogUHl0aG9uIGZ1bmN0aW9uIHRvIGdldCB0aGUgYWRkcmVz cyBvZiB0aGlzIGJyZWFrcG9pbnQgbG9jYXRpb24uICBUaGUKKyAgIGdkYi5W YWx1ZSBvYmplY3Qgd2lsbCBiZSBjYWNoZWQgaWYgdGhpcyBpcyB0aGUgZmly c3QgYWNjZXNzLiAgUmV0dXJucworICAgTlVMTCBpbiBjYXNlIG9mIGZhaWx1 cmUsIHdpdGggYSBQeXRob24gZXhjZXB0aW9uIHNldC4gICovCisKK3N0YXRp YyBQeU9iamVjdCAqCiticGxvY3B5X2dldF9hZGRyZXNzIChQeU9iamVjdCAq c2VsZiwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgYnBsb2Nfb2JqZWN0ICpzZWxm X2JwbG9jID0gKGJwbG9jX29iamVjdCAqKSBzZWxmOworICB2b2xhdGlsZSBz dHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisgIHN0cnVjdCB0eXBlICp2 b2lkX3B0cl90eXBlOworICBzdHJ1Y3QgdmFsdWUgKnZhbCA9IE5VTEw7IC8q IEluaXRpYWxpemUgdG8gYXBwZWFzZSBnY2Mgd2FybmluZy4gICovCisgIFB5 T2JqZWN0ICpweV9hZGRyZXNzOworCisgIEJQTE9DUFlfUkVRVUlSRV9WQUxJ RCAoc2VsZl9icGxvYyk7CisKKyAgLyogR2V0IHRoZSBhZGRyZXNzIFZhbHVl IG9iamVjdCBhcyBhIHZvaWQgKiB2YWx1ZS4gICovCisgIFRSWV9DQVRDSCAo ZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgdm9pZF9w dHJfdHlwZSA9IGxvb2t1cF9wb2ludGVyX3R5cGUgKAorICAgICAgICAgIGJ1 aWx0aW5fdHlwZSAocHl0aG9uX2dkYmFyY2gpLT5idWlsdGluX3ZvaWQpOwor ICAgICAgdmFsID0gdmFsdWVfZnJvbV9wb2ludGVyICh2b2lkX3B0cl90eXBl LCBzZWxmX2JwbG9jLT5sb2MtPmFkZHJlc3MpOworICAgIH0KKyAgR0RCX1BZ X0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CisKKyAgcHlfYWRkcmVzcyA9 IHZhbHVlX3RvX3ZhbHVlX29iamVjdCAodmFsKTsKKyAgaWYgKCFweV9hZGRy ZXNzKQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiBweV9hZGRyZXNz OworfQorCisvKiBQeXRob24gZnVuY3Rpb24gdG8gZ2V0IHRoZSBpbmZlcmlv ciBob3N0aW5nIHRoaXMgYnJlYWtwb2ludCBsb2NhdGlvbi4KKyAgIFJldHVy biBQeV9Ob25lIGlmIHRoZXJlIGlzIG5vIGluZmVyaW9yIGFzc29jaWF0ZWQg d2l0aCB0aGUgcHJvZ3JhbSBzcGFjZSBvZgorICAgdGhpcyBsb2NhdGlvbiwg b3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUsIHdpdGggYSBweXRob24gZXhj ZXB0aW9uIHNldC4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCiticGxvY3B5 X2dldF9pbmZlcmlvciAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUp Cit7CisgIGJwbG9jX29iamVjdCAqc2VsZl9icGxvYyA9IChicGxvY19vYmpl Y3QgKikgc2VsZjsKKyAgc3RydWN0IGluZmVyaW9yICppbmY7CisgIFB5T2Jq ZWN0ICppbmZvYmo7CisKKyAgQlBMT0NQWV9SRVFVSVJFX1ZBTElEIChzZWxm X2JwbG9jKTsKKworICBpbmYgPSBmaW5kX2luZmVyaW9yX2Zvcl9wcm9ncmFt X3NwYWNlIChzZWxmX2JwbG9jLT5sb2MtPnBzcGFjZSk7CisgIGlmICghaW5m KQorICAgIFB5X1JFVFVSTl9OT05FOworCisgIGluZm9iaiA9IGluZmVyaW9y X3RvX2luZmVyaW9yX29iamVjdCAoaW5mKTsKKyAgUHlfWElOQ1JFRiAoaW5m b2JqKTsKKworICByZXR1cm4gaW5mb2JqOworfQorCisvKiBQeXRob24gZnVu Y3Rpb24gd2hpY2ggY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiBhIGJwIGxvY2F0 aW9uIG9iamVjdC4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCiticGxvY3B5 X2lzX3ZhbGlkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7 CisgIGJwbG9jX29iamVjdCAqc2VsZl9icGxvYyA9IChicGxvY19vYmplY3Qg Kikgc2VsZjsKKworICBpZiAoc2VsZl9icGxvYy0+bG9jKQorICAgIFB5X1JF VFVSTl9UUlVFOworICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKKy8qIENhbGxi YWNrIHRyaWdnZXJlZCB3aGVuIGEgYnJlYWtwb2ludCBpcyBkZWxldGVkLiAg VGhpcyB3aWxsIGludmFsaWRhdGUKKyAgIHRoZSBjb3JyZXNwb25kaW5nIGJw X2xvY2F0aW9uIFB5dGhvbiBvYmplY3Qgb3duZXJzLiAgKi8KKworc3RhdGlj IHZvaWQKK2JwbG9jcHlfYnJlYWtwb2ludF9kZWxldGVkIChzdHJ1Y3QgYnJl YWtwb2ludCAqYikgeworICBzdHJ1Y3QgYnBfbG9jYXRpb24gKmxvYzsKKwor ICBmb3IgKGxvYyA9IGItPmxvYzsgbG9jOyBsb2MgPSBsb2MtPm5leHQpCisg ICAgeworICAgICAgaWYgKGxvYy0+cHlfYnBsb2Nfb2JqKQorICAgICAgICBs b2MtPnB5X2JwbG9jX29iai0+aW52YWxpZF9vd25lciA9IDE7CisgICAgfQor fQorCisvKiBJbml0aWFsaXplIHRoZSBQeXRob24gYnBfbG9jYXRpb24gY29k ZS4gICovCisKK3ZvaWQKK2dkYnB5X2luaXRpYWxpemVfYnBsb2NhdGlvbiAo dm9pZCkKK3sKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJmJwbG9jX29iamVjdF90 eXBlKSA8IDApCisgICAgcmV0dXJuOworCisgIFB5X0lOQ1JFRiAoJmJwbG9j X29iamVjdF90eXBlKTsKKyAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdCAoZ2Ri X21vZHVsZSwgIkJwTG9jYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAoUHlPYmplY3QgKikgJmJwbG9jX29iamVjdF90eXBlKSA8IDApCisg ICAgcmV0dXJuOworCisgIG9ic2VydmVyX2F0dGFjaF9icmVha3BvaW50X2Rl bGV0ZWQgKGJwbG9jcHlfYnJlYWtwb2ludF9kZWxldGVkKTsKK30KKworc3Rh dGljIFB5R2V0U2V0RGVmIGJwbG9jX29iamVjdF9nZXRzZXRbXSA9Cit7Cisg IHsgIm93bmVyIiwgYnBsb2NweV9nZXRfb3duZXIsIE5VTEwsCisgICAgIkVh Y2ggYnJlYWtwb2ludCBsb2NhdGlvbiBtdXN0IGJlbG9uZyB0byBleGFjdGx5 IG9uZSBoaWdoZXItbGV2ZWwgXAorYnJlYWtwb2ludC4gIFRoaXMgcG9pbnRl ciBpcyBOVUxMIGlmZiB0aGlzIGJwX2xvY2F0aW9uIGlzIG5vIFwKK2xvbmdl ciBhdHRhY2hlZCB0byBhIGJyZWFrcG9pbnQgKHJlYWQtb25seSkuIiwKKyAg ICBOVUxMIH0sCisgIHsgImVuYWJsZWQiLCBicGxvY3B5X2dldF9lbmFibGVk LCBOVUxMLAorICAgICJJcyB0aGlzIHBhcnRpY3VsYXIgbG9jYXRpb24gZW5h YmxlZC4iLCBOVUxMIH0sCisgIHsgImFkZHJlc3MiLCBicGxvY3B5X2dldF9h ZGRyZXNzLCBOVUxMLAorICAgICJUaGUgYWRkcmVzcyBhdCB3aGljaCB0aGUg YnJlYWtwb2ludCBoYXMgYmVlbiBzZXQuIiwgTlVMTCB9LAorICB7ICJpbmZl cmlvciIsIGJwbG9jcHlfZ2V0X2luZmVyaW9yLCBOVUxMLAorICAgICJUaGUg aW5mZXJpb3IgaW4gd2hpY2ggdGhpcyBicmVha3BvaW50IGxvY2F0aW9uIGhh cyBiZWVuIHNldC4iLCBOVUxMIH0sCisgIHsgTlVMTCB9ICAvKiBTZW50aW5l bC4gICovCit9OworCisKK3N0YXRpYyBQeU1ldGhvZERlZiBicGxvY19vYmpl Y3RfbWV0aG9kc1tdID0KK3sKKyAgeyAiaXNfdmFsaWQiLCBicGxvY3B5X2lz X3ZhbGlkLCBNRVRIX05PQVJHUywKKyAgICAiUmV0dXJuIHRydWUgaWYgdGhp cyBicmVha3BvaW50IGxvY2F0aW9uIGlzIHZhbGlkLCBmYWxzZSBpZiBub3Qu IiB9LAorICB7IE5VTEwgfSAvKiBTZW50aW5lbC4gICovCit9OworCitzdGF0 aWMgUHlUeXBlT2JqZWN0IGJwbG9jX29iamVjdF90eXBlID0KK3sKKyAgUHlP YmplY3RfSEVBRF9JTklUIChOVUxMKQorICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9iX3NpemUgKi8KKyAgImdk Yi5CcExvY2F0aW9uIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9uYW1lICovCisgIHNpemVvZiAoYnBsb2Nfb2JqZWN0KSwgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNp emUgKi8KKyAgYnBsb2NweV9kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9nZXRhdHRyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Nv bXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9yZXByICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfaGFzaCAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3Ry ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2FzX2J1ZmZlciAqLworICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQ eV9UUEZMQUdTX0JBU0VUWVBFLCAgIC8qIHRwX2ZsYWdzICovCisgICJHREIg YnJlYWtwb2ludCBsb2NhdGlvbiBvYmplY3QiLCAgICAgICAgICAgLyogdHBf ZG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX3JpY2hjb21wYXJlICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgYnBs b2Nfb2JqZWN0X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9tZXRob2RzICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICBicGxvY19vYmpl Y3RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNl dCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf ZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGlj dG9mZnNldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgMCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwor fTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jIGIv Z2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKaW5kZXggMTk1ZWQyYi4uMjVl ZjYyZiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMK KysrIGIvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKQEAgLTU4NCw2ICs1 ODQsNDMgQEAgYnBweV9nZXRfaWdub3JlX2NvdW50IChQeU9iamVjdCAqc2Vs Ziwgdm9pZCAqY2xvc3VyZSkKICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nIChz ZWxmX2JwLT5icC0+aWdub3JlX2NvdW50KTsKIH0KIAorCisvKiBQeXRob24g ZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgQnBMb2NhdGlvbiBvYmplY3Rz IGFzc29jaWF0ZWQKKyAgIHdpdGggdGhpcyBicmVha3BvaW50LiAgKi8KKwor c3RhdGljIFB5T2JqZWN0ICoKK2JwcHlfbG9jYXRpb25zIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIGJyZWFrcG9pbnRfb2JqZWN0 ICpzZWxmX2JwID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisgIFB5 T2JqZWN0ICpsaXN0LCAqdHVwbGU7CisgIHN0cnVjdCBicF9sb2NhdGlvbiAq bG9jOworICBpbnQgZXJyOworCisgIEJQUFlfUkVRVUlSRV9WQUxJRCAoc2Vs Zl9icCk7CisKKyAgbGlzdCA9IFB5TGlzdF9OZXcgKDApOworICBpZiAoIWxp c3QpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZXJyID0gMDsKKyAgZm9yIChs b2MgPSBzZWxmX2JwLT5icC0+bG9jOyBsb2M7IGxvYyA9IGxvYy0+bmV4dCkK KyAgICB7CisgICAgICBQeU9iamVjdCAqbG9jX29iaiA9ICBicGxvY2F0aW9u X3RvX2JwbG9jYXRpb25fb2JqZWN0IChsb2MpOworICAgICAgZXJyID0gUHlM aXN0X0FwcGVuZCAobGlzdCwgbG9jX29iaik7CisgICAgICBpZiAoZXJyID09 IC0xKQorICAgICAgICB7CisgICAgICAgICAgUHlfREVDUkVGIChsaXN0KTsK KyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgUHlf REVDUkVGIChsb2Nfb2JqKTsKKyAgICB9CisKKyAgdHVwbGUgPSBQeUxpc3Rf QXNUdXBsZSAobGlzdCk7CisgIFB5X0RFQ1JFRiAobGlzdCk7CisKKyAgcmV0 dXJuIHR1cGxlOworfQorCiAvKiBQeXRob24gZnVuY3Rpb24gdG8gY3JlYXRl IGEgbmV3IGJyZWFrcG9pbnQuICAqLwogc3RhdGljIGludAogYnBweV9pbml0 IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICpr d2FyZ3MpCkBAIC05NzUsNiArMTAxMiw4IEBAIHN0YXRpYyBQeU1ldGhvZERl ZiBicmVha3BvaW50X29iamVjdF9tZXRob2RzW10gPQogICAgICJSZXR1cm4g dHJ1ZSBpZiB0aGlzIGJyZWFrcG9pbnQgaXMgdmFsaWQsIGZhbHNlIGlmIG5v dC4iIH0sCiAgIHsgImRlbGV0ZSIsIGJwcHlfZGVsZXRlX2JyZWFrcG9pbnQs IE1FVEhfTk9BUkdTLAogICAgICJEZWxldGUgdGhlIHVuZGVybHlpbmcgR0RC IGJyZWFrcG9pbnQuIiB9LAorICB7ICJsb2NhdGlvbnMiLCBicHB5X2xvY2F0 aW9ucywgTUVUSF9OT0FSR1MsCisgICAgIkdldCBhIGxpc3Qgb2YgZ2RiLkJw TG9jYXRpb24gb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBicmVha3Bv aW50LiIgfSwKICAgeyBOVUxMIH0gLyogU2VudGluZWwuICAqLwogfTsKIApk aWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaCBiL2dk Yi9weXRob24vcHl0aG9uLWludGVybmFsLmgKaW5kZXggMzI4ZTVkOC4uMTQ2 MDhjMiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwu aAorKysgYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCkBAIC0xNjUs NiArMTY1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QK IGV4dGVybiBicmVha3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5nX29iamVj dDsKIAogCisvKiBEZWZpbmVkIGluIHB5LWJwbG9jLmMgKi8KK3R5cGVkZWYg c3RydWN0IGJwbG9jX29iamVjdCBicGxvY19vYmplY3Q7CisKIHR5cGVkZWYg c3RydWN0CiB7CiAgIFB5T2JqZWN0X0hFQUQKQEAgLTIxNyw2ICsyMjAsOCBA QCBQeU9iamVjdCAqcHNweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICosIHZv aWQgKik7CiBQeU9iamVjdCAqb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAo c3RydWN0IG9iamZpbGUgKik7CiBQeU9iamVjdCAqb2JqZnB5X2dldF9wcmlu dGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKIAorUHlPYmplY3QgKmJwbG9j YXRpb25fdG9fYnBsb2NhdGlvbl9vYmplY3QgKHN0cnVjdCBicF9sb2NhdGlv biAqbG9jKTsKKwogdGhyZWFkX29iamVjdCAqY3JlYXRlX3RocmVhZF9vYmpl Y3QgKHN0cnVjdCB0aHJlYWRfaW5mbyAqdHApOwogdGhyZWFkX29iamVjdCAq ZmluZF90aHJlYWRfb2JqZWN0IChwdGlkX3QgcHRpZCk7CiBQeU9iamVjdCAq ZmluZF9pbmZlcmlvcl9vYmplY3QgKGludCBwaWQpOwpAQCAtMjQ1LDYgKzI1 MCw3IEBAIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9wc3BhY2UgKHZvaWQpOwog dm9pZCBnZGJweV9pbml0aWFsaXplX29iamZpbGUgKHZvaWQpOwogdm9pZCBn ZGJweV9pbml0aWFsaXplX2JyZWFrcG9pbnRzICh2b2lkKTsKIHZvaWQgZ2Ri cHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAodm9pZCk7Cit2b2lk IGdkYnB5X2luaXRpYWxpemVfYnBsb2NhdGlvbiAodm9pZCk7CiB2b2lkIGdk YnB5X2luaXRpYWxpemVfbGF6eV9zdHJpbmcgKHZvaWQpOwogdm9pZCBnZGJw eV9pbml0aWFsaXplX3BhcmFtZXRlcnMgKHZvaWQpOwogdm9pZCBnZGJweV9p bml0aWFsaXplX3RocmVhZCAodm9pZCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5dGhvbi5jIGIvZ2RiL3B5dGhvbi9weXRob24uYwppbmRleCA1MjEy ZDRlLi5mYjg4YjVlIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5j CisrKyBiL2dkYi9weXRob24vcHl0aG9uLmMKQEAgLTExMDEsNiArMTEwMSwx MiBAQCBnZGJweV9icmVha3BvaW50X2hhc19weV9jb25kIChzdHJ1Y3QgYnJl YWtwb2ludF9vYmplY3QgKmJwX29iaikKIAkJICAgICJzY3JpcHRpbmcgaXMg bm90IHN1cHBvcnRlZC4iKSk7CiB9CiAKK3ZvaWQKK2dkYnB5X2JwbG9jYXRp b25fZnJlZSAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCit7 CisgIHJldHVybjsKK30KKwogI2VuZGlmIC8qIEhBVkVfUFlUSE9OICovCiAK IAwKQEAgLTEyNDQsNiArMTI1MCw3IEBAIG1lc3NhZ2UgPT0gYW4gZXJyb3Ig bWVzc2FnZSB3aXRob3V0IGEgc3RhY2sgd2lsbCBiZSBwcmludGVkLiIpLAog ICBnZGJweV9pbml0aWFsaXplX29iamZpbGUgKCk7CiAgIGdkYnB5X2luaXRp YWxpemVfYnJlYWtwb2ludHMgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfZmlu aXNoYnJlYWtwb2ludHMgKCk7CisgIGdkYnB5X2luaXRpYWxpemVfYnBsb2Nh dGlvbiAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9sYXp5X3N0cmluZyAoKTsK ICAgZ2RicHlfaW5pdGlhbGl6ZV90aHJlYWQgKCk7CiAgIGdkYnB5X2luaXRp YWxpemVfaW5mZXJpb3IgKCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5 dGhvbi5oIGIvZ2RiL3B5dGhvbi9weXRob24uaAppbmRleCA5ZTQ2MWY3Li41 MTZhOTRjIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5oCisrKyBi L2dkYi9weXRob24vcHl0aG9uLmgKQEAgLTQ3LDQgKzQ3LDYgQEAgaW50IGdk YnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJw X29iaik7CiAKIGludCBnZGJweV9icmVha3BvaW50X2hhc19weV9jb25kIChz dHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaik7CiAKK3ZvaWQgZ2Ri cHlfYnBsb2NhdGlvbl9mcmVlIChzdHJ1Y3QgYnBfbG9jYXRpb24gKmxvYyk7 CisKICNlbmRpZiAvKiBHREJfUFlUSE9OX0ggKi8KZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cCBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cAppbmRl eCA4ZWQzNzQyLi42YTFhNDNiIDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAKKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwCkBAIC0zMDQsMyAr MzA0LDU1IEBAIGdkYl9weV90ZXN0X3NpbGVudF9jbWQgICJweXRob24gd3Ax ID0gd3BfZXZhbCAoXCJyZXN1bHRcIiwgdHlwZT1nZGIuQlBfV0FUQ0hQT0lO CiBnZGJfdGVzdCAiY29udGludWUiICIuKlxbV3dcXWF0Y2hwb2ludC4qcmVz dWx0LipPbGQgdmFsdWUgPS4qTmV3IHZhbHVlID0gNzg4LioiICJUZXN0IHdh dGNocG9pbnQgd3JpdGUiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IG5ldmVy X2V2YWxfYnAxLmNvdW50IiAiMCIgXAogICAgICJDaGVjayB0aGF0IHRoaXMg dW5yZWxhdGVkIGJyZWFrcG9pbnRzIGV2YWwgZnVuY3Rpb24gd2FzIG5ldmVy IGNhbGxlZC4iCisKKyMgZ2RiLkJwTG9jYXRpb24KKworIyBTdGFydCB3aXRo IGEgZnJlc2ggZ2RiLgorY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitp ZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4g dG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KK2RlbGV0ZV9icmVha3BvaW50 cworZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGV0YWNoLW9uLWZvcmsgb2Zm IiAiZG9uJ3QgZGV0YWNoIG9uIGZvcmsiCitnZGJfdGVzdCAiY2FsbCBmb3Jr KCkiICJOZXcgcHJvY2VzcyAuKiIgImNyZWF0ZSBhIHNlY29uZCBpbmZlcmlv ciIKKworZ2RiX2JyZWFrcG9pbnQgIm1haW4iCitnZGJfdGVzdCAicHkgcHJp bnQgbGVuKGdkYi5icmVha3BvaW50cygpKSIgIjEiICJlbnN1cmUgdGhhdCB0 aHJlcmUgaXMgb25seSBvbmUgQlAiCitnZGJfdGVzdF9ub19vdXRwdXQge3B5 IGJwMCA9IGdkYi5icmVha3BvaW50cygpWzBdfSAic2F2ZSBicmVha3BvaW50 IDAiCitnZGJfdGVzdCAicHkgcHJpbnQgbGVuKGJwMC5sb2NhdGlvbnMoKSki ICIyIiAiZW5zdXJlIHRoYXQgdGhyZXJlIGFyZSAyIGxvY2F0aW9ucyIKKwor Z2RiX3Rlc3Rfbm9fb3V0cHV0IHtweSBsb2MwID0gYnAwLmxvY2F0aW9ucygp WzBdfSAic2F2ZSBsb2NhdGlvbiAwIgorZ2RiX3Rlc3Rfbm9fb3V0cHV0IHtw eSBsb2MxID0gYnAwLmxvY2F0aW9ucygpWzFdfSAic2F2ZSBsb2NhdGlvbiAx IgorCitnZGJfdGVzdCAicHkgcHJpbnQgbG9jMC5vd25lciA9PSBsb2MxLm93 bmVyID09IGJwMCIgIlRydWUiICJ2ZXJpZnkgb3duZXJzaGlwIgorZ2RiX3Rl c3QgInB5IHByaW50IGxvYzAuYWRkcmVzcyA9PSBsb2MxLmFkZHJlc3MgIiAi VHJ1ZSIgInZlcmlmeSBhZGRyZXNzZXMgYXJlIGlkZW50aWNhbCIKKyMgaG93 IHRvIGNoZWNrIGFkZHJlc3MgbG9jYXRpb24gPyAhPSBhZGRyZXNzKG1haW4p CisKK2dkYl90ZXN0IHtweSBwcmludCBsb2MwLmluZmVyaW9yID09IGdkYi5p bmZlcmlvcnMoKVswXX0gIlRydWUiICJ2ZXJpZnkgaW5mZXJpb3IgZm9yIGxv YyAwIiAjaW5mIDIKK2dkYl90ZXN0IHtweSBwcmludCBsb2MxLmluZmVyaW9y ID09IGdkYi5pbmZlcmlvcnMoKVsxXX0gIlRydWUiICJ2ZXJpZnkgaW5mZXJp b3IgZm9yIGxvYyAxIiAjaW5mIDEKKworZ2RiX3Rlc3QgInB5IHByaW50IGxv YzAuZW5hYmxlZCA9PSBsb2MxLmVuYWJsZWQgPT0gVHJ1ZSIgIlRydWUiICJ2 ZXJpZnkgdGhhdCBsb2NhdGlvbnMgYXJlIGVuYWJsZWQiCisKK2dkYl90ZXN0 ICJweSBwcmludCBsb2MwLmluZmVyaW9yLm51bSIgIjIiICJlbnN1cmUgdGhh dCBsb2MwIGlzIG9uIGluZmVyaW9yIDIiCisKK2dkYl90ZXN0ICJkZXRhY2gg aW5mZXJpb3IgMiIgIkRldGFjaGluZyBmcm9tIHByb2dyYW06LioiICJkZXRh Y2ggaW5mZXJpb3IgMiIKK2dkYl90ZXN0ICJpbmZlcmlvciAxIiAiU3dpdGNo aW5nIHRvIGluZmVyaW9yIC4qIiAic3dpdGNoIHRvIGluZmVyaW9yIDEiCitn ZGJfdGVzdF9ub19vdXRwdXQgInJlbW92ZS1pbmZlcmlvcnMgMiIgInJlbW92 ZSBpbmZlcmlvciAyIgorZ2RiX3Rlc3QgInB5IHByaW50IGxvYzAuaW5mZXJp b3IiICJOb25lIiAicmVtb3ZlZCBpbmZlcmlvciBzZXQgdG8gTm9uZSIKKwor ZGVsZXRlX2JyZWFrcG9pbnRzCitnZGJfdGVzdCAicHkgcHJpbnQgYnAwLmlz X3ZhbGlkKCkiICJGYWxzZSIgInZlcmlmeSB0aGF0IEJQIGhhcyBiZWVuIGlu dmFsaWRhdGVkIgorZ2RiX3Rlc3QgInB5IGJwMC5sb2NhdGlvbnMoKSIgIi4q UnVudGltZUVycm9yOiBCcmVha3BvaW50IC4qIGlzIGludmFsaWQuKiJcCisg ICAgICAgICAidmVyaWZ5IHRoYXQgbG9jYXRpb25zIGNhbid0IGFjY2Vzc2Vk IG9uIGFuIGludmFsaWQgYnJlYWtwb2ludCIKKyAgICAgICAgIAorZ2RiX3Rl c3QgInB5IHByaW50IGxvYzAuaXNfdmFsaWQoKSIgIkZhbHNlIiAidmVyaWZ5 IHRoYXQgbG9jYXRpb24gaXMgaW52YWxpZCIKK2dkYl90ZXN0ICJweSBwcmlu dCBsb2MwLm93bmVyIiAiLipSdW50aW1lRXJyb3I6IEJwTG9jYXRpb24gaW52 YWxpZC4qIlwKKyAgICAgICAgICJ2ZXJpZnkgdGhhdCBvd25lciBjYW4ndCBi ZSBhY2Nlc3NlZCIKK2dkYl90ZXN0ICJweSBwcmludCBsb2MwLmVuYWJsZWQi ICIuKlJ1bnRpbWVFcnJvcjogQnBMb2NhdGlvbiBpbnZhbGlkLioiXAorICAg ICAgICAgInZlcmlmeSB0aGF0IGxvY2F0aW9uIGNhbid0IGJlIGFjY2Vzc2Vk IgorZ2RiX3Rlc3QgInB5IHByaW50IGxvYzAuYWRkcmVzcyIgIi4qUnVudGlt ZUVycm9yOiBCcExvY2F0aW9uIGludmFsaWQuKiJcCisgICAgICAgICAidmVy aWZ5IHRoYXQgbG9jYXRpb24gY2FuJ3QgYmUgYWNjZXNzZWQiCitnZGJfdGVz dCAicHkgcHJpbnQgbG9jMC5pbmZlcmlvciIgIi4qUnVudGltZUVycm9yOiBC cExvY2F0aW9uIGludmFsaWQuKiJcCisgICAgICAgICAidmVyaWZ5IHRoYXQg aW5mZXJpb3IgY2FuJ3QgYmUgYWNjZXNzZWQiCi0tIAoxLjcuNi41Cgo= --20cf307ac3fd33371004b62da447--