From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17249 invoked by alias); 24 Aug 2012 22:02:22 -0000 Received: (qmail 17237 invoked by uid 22791); 24 Aug 2012 22:02:19 -0000 X-SWARE-Spam-Status: No, hits=-5.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-iy0-f169.google.com (HELO mail-iy0-f169.google.com) (209.85.210.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 24 Aug 2012 22:02:05 +0000 Received: by iahk25 with SMTP id k25so4916049iah.0 for ; Fri, 24 Aug 2012 15:02:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=r3fSWrO+OJGvI1MBFDDQpBonKI9OguclG+5TIzkS970=; b=JLepqjeW5WHGynmbvqBYMQ//IvYIPny0tGlb02TKkQNE6C0NlZ32AbvVHYzv7p6YsC IEaRgoLxvy5ln1zN3eWsilSMQBugEq7kiric9RAkUoW472QCcW7MpmTr0dBiaiySjEal Dcip6lSlWKXHeQt358Hg4eQ0j7YIcSlqmMtEXjgvsdDuL+TACZzbyq/lYf9cl5FRTI0L 4rLiy/XWhEZLD+CpJVlGPRR27zY5Y6ARvLXxW1SQVJqgXiC3vBtUrOTmT0TfK1y9tO/O bvnilhchCh2ff7yxQMmE+HXv/ySVM05x1X+jXYv6Bv1Rjm1HNZuypK0DDmQRBxuRx4/f 4IcA== Received: by 10.50.213.106 with SMTP id nr10mr3596195igc.58.1345845724405; Fri, 24 Aug 2012 15:02:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.50.213.106 with SMTP id nr10mr3596185igc.58.1345845724227; Fri, 24 Aug 2012 15:02:04 -0700 (PDT) Received: by 10.50.104.233 with HTTP; Fri, 24 Aug 2012 15:02:04 -0700 (PDT) In-Reply-To: References: <87ipcasomu.fsf@fleche.redhat.com> <87lih5popk.fsf@fleche.redhat.com> Date: Fri, 24 Aug 2012 22:02:00 -0000 Message-ID: Subject: Re: [RFC] Thread Name Printers From: Aaron Gamble To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=14dae934053950a6ea04c80a2039 X-System-Of-Record: true X-Gm-Message-State: ALoCoQn99cqweTMkXGVjk45785WvdDe5xWlgQFUr8jRawguoxJTyVjhUE/iS/+5yZJn1xnHbxvcfZYrmCCOto9JJ0xDdAfKqGTXIjJmQjspr8j+rkxbjb7cTMeTIYEGdBQ2Vz6lzvasgQgzk/k43mxpM+HtMi8r+he2gxtqcLqpRF0sNaE6k1SXbxNkV3r8fzugK5HtPxjoMWijZjjXHp5dTCx8oPc/WXw== 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-08/txt/msg00773.txt.bz2 --14dae934053950a6ea04c80a2039 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 8289 Oops. Forgot to actually attach patch. On Fri, Aug 24, 2012 at 3:00 PM, Aaron Gamble wrote: > New patch. See inline comments. > > (FYI today is the last day of my internship, so this e-mail address > will be dead very soon. I can be reached at invalidfunction or > jaarongamble both at gmail.com) > > gdb/ChangeLog: > * data-directory/Makefile.in: Add gdb/thread_printing.py. > * doc/gdb.texinfo: Add section about thread name printers in Python section. > Add reference to thread name printers in 'info threads' section. > * python/lib/gdb/__init__.py: Import ThreadNamePrinter. > * python/lib/gdb/thread_printing.py: new file. > (class ThreadNamePrinter): base class, contains helper functions > and list of registered printers. > (class ExamplePrinter): example printer class for reference. > (class EnableThreadNamePrinter, DisableThreadNamePrinter, > InfoThreadNamePrinter): > gdb.commands for managing and getting information about thread > name printers. > (register_thread_name_printer_commands): Registers thread name > printer commands. > * python/py-inferior.c (add_thread_object): Save pointer to > thread_object in thread_info. > * python/py-infthread.c (prepare_thread_name_printers): Prepares > all the registered thread name printers > and returns a list of the printers. Called once by > thread.c:print_thread_info. > (thread_printer_enabled): Returns TRUE if printer enabled. > (apply_thread_name_pretty_printers): Iterates through the list of > printers calling print_thread until one returns a string. > Called for each thread by thread.c:print_thread_info > * python/python-internal.h: Extern gdbpy_print_thread_cst PyObject > string object. > * pyhon/python.c: Declare and assign gdbpy_print_thread_cst. > * testsuite/gdb.python/Makefile.in: add py-threadprettyprint. > * testsuite/gdb.python/py-threadprettyprint.c: Basic threaded > program for testing thread name printing. > * testsuite/gdb.python/py-threadprettyprint.exp: Tests for thread > name printers. > * thread.c (print_thread_info): Calls prepare_thread_name_printers > to initialize printers and get list of printers. > Calls apply_thread_name_pretty_printers for each thread if no > name for thread is already stored. > (_initialize_thread): Add aliases for 'info threads' to > disambiguate between 'info thread-name-printer' > > > On Thu, Aug 23, 2012 at 9:17 AM, Tom Tromey wrote: >> >>>>>>> "Aaron" == Aaron Gamble writes: >> >> Tom> How about just 'gdb.threads.add_printer'? >> Tom> Or just have the base class constructor do it, and make it private? >> >> Aaron> How about gdb.thread_printing.add_printer? It also seems fine to me to >> Aaron> have a method in the base class. >> Aaron> e.g. >> Aaron> myclass().add_printer("my printer") >> Aaron> # instantiates class and adds it to list of printers with alias "my printer" >> >> It's sort of a norm in gdb to have the instantiation of the class >> install the CLI bits as a side effect. E.g., Command and Parameter do >> this. I don't insist on it, though. > I just stuck with myclass().add_printer("my alias") for now. >> >> I like the name gdb.threads over gdb.thread_printing, just because I >> assume we'll want to have more thread utility code, and this would >> provide a spot to put it. > Done. changed to gdb.threads. > > >> Tom> However, if you do this, then you probably ought to change how thread >> Tom> object lifetimes are handled more generally, getting rid of >> Tom> threadlist_entry, etc. >> >> Aaron> Not entirely sure what you mean here, but I will look into it. My >> Aaron> unfamiliarity with the codebase is to blame. >> >> No worries. >> >> The current code is written in a way to let us associate a gdb.Thread >> object with a thread_info in an indirect way. However, this probably >> doesn't perform extremely well if there are many threads. >> >> So, your approach is superior. However, I think it is best to do the >> conversion completely. This could be a separate refactoring patch -- >> just rip out the old threadlist_entry stuff and replace it with your >> approach. You can see how we handled this in breakpoint.h (search for >> struct breakpoint_object) to make it work without including python.h >> everywhere. > I will leave this for dje@ to do. > > >> Tom> What is the rationale for the 'prepare' step, anyway? >> >> Aaron> This is for the printers to do any one time setup before printing a >> Aaron> list of threads. A common case I can see is if the printer needs to >> Aaron> examine memory and traverse something like a linked list. Without a >> Aaron> call like this, or an indicator in print_thread, there is no way for a >> Aaron> printer to know the different between multiple calls to info threads. >> >> Ok, I see. >> Should there also be an "unprepare" step so that these objects can >> release resources after "info threads" exits? > That's a good point. I've added a cleanup step. > >> Aaron> Ah, sorry, I'm unfamiliar with the Python C api. I will add a call to >> Aaron> gdbpy_print_stack when printers == NULL. Are you also worried about >> Aaron> the potential exceptions raised in PyList_Check and PyList_Size? I >> Aaron> suppose in that case just having a call to gdbpy_print_stack at the >> Aaron> end of this function or in each case of printers == NULL would be >> Aaron> sufficient. >> >> Nearly all Python functions have to have their result checked for error. >> This often leads to spaghetti code, unfortunately, but that's how it is. >> >> Exactly how to handle the error depends on the situation. >> >> In "Python-facing" code, the typical thing to do is propagate the error >> -- release locally-acquired resources and return NULL (or -1 or whatever >> it is for the current context). >> >> In "gdb-facing" code, usually we call gdbpy_print_stack. This isn't >> ideal, since in many situations I think it would be preferable to >> convert the Python exception to a gdb exception. >> >> In your particular case I think it is friendliest to the user to call >> gdbpy_print_stack, even assuming we implement real exception handling, >> just because this approach means that some bad Python code won't make >> "info threads" fail. > Added stack trace printing to "handle" exceptions. > >> Tom> If you're making a list of printers in the .py code, you might as well >> Tom> filter there instead of having this. It's a lot easier to do it there. >> >> Aaron> The thing is that we do not create a new list. The same list is >> Aaron> returned instead. I suppose if we add the check to >> Aaron> prepare_thread_name_printers and just return a new list, that would be >> Aaron> fine as well. >> >> I got a little lost here. >> >> If there is a single list, where disabled items are filtered when >> iterating over it, then don't bother returning a list at all, just use >> the global one from the .py code. >> >> Aaron> The problem with only setting names on thread-creation events is that >> Aaron> a library managing threads and assigning internal thread names we may >> Aaron> wish to print will potentially not have set the name at the time the >> Aaron> thread is created. >> >> Ok, makes sense. >> >> Aaron> e.g. >> Aaron> 1. thread created. >> Aaron> 2. thread-created event in gdb. (no name available yet) >> Aaron> 3. library sets internal name for thread. >> >> In this scenario I was picturing that the python code would set a >> breakpoint to capture the interesting event. But I can accept that this >> may not always be desirable. >> >> Aaron> The thread name is assigned here because I think it is safe to assume >> Aaron> that once a thread has a name, that name will not change. Also, if a >> Aaron> user assigns a name via 'thread name foo', they would want that name >> Aaron> to override any thread name printer. >> >> Ok, thanks. >> >> Aaron> Ok. I'll use a global static variable for the list of printers in >> Aaron> python/py-infthread.c and use dummy functions for the #ifdef stuff. >> >> IIUC it could all just be in the python code. > You are entirely right. I changed this to just keep the printer in the > Python world, along with some other changes that cleans things up. --14dae934053950a6ea04c80a2039 Content-Type: application/octet-stream; name="thread_name_printers_2.patch" Content-Disposition: attachment; filename="thread_name_printers_2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h69ts96k0 Content-length: 40553 RnJvbSAzZWJkZjNlMDVkMDFmMWM0OGVjOWRlZTU3ZjQxMmNjYjI1YTkwYTgx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBYXJvbiBHYW1ibGUg PGFnYW1ibGVAZ29vZ2xlLmNvbT4KRGF0ZTogRnJpLCAyNCBBdWcgMjAxMiAx NDo0ODowNyAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIHRocmVhZCBuYW1lIHBy aW50ZXJzCgotLS0KIGdkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbiAg ICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGdkYi9kb2MvZ2RiLnRleGlu Zm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDg5ICsrKysr KysrKysrKysrLQogZ2RiL2dkYnRocmVhZC5oICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDUgKwogZ2RiL3B5dGhvbi9saWIvZ2Ri L19faW5pdF9fLnB5ICAgICAgICAgICAgICAgICAgICB8ICAgIDggKysKIGdk Yi9weXRob24vbGliL2dkYi9jb21tYW5kL3RocmVhZF9wcmludGVycy5weSAg ICAgfCAgIDcyICsrKysrKysrKysrKwogZ2RiL3B5dGhvbi9saWIvZ2RiL3Ro cmVhZHMucHkgICAgICAgICAgICAgICAgICAgICB8ICAxMjcgKysrKysrKysr KysrKysrKysrKysrCiBnZGIvcHl0aG9uL3B5LWluZmVyaW9yLmMgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBnZGIvcHl0aG9uL3B5LWlu ZnRocmVhZC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5NiArKysr KysrKysrKysrKysrCiBnZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAg ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBnZGIvcHl0aG9uL3B5dGhv bi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBn ZGIvcHl0aG9uL3B5dGhvbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgNyArCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vTWFrZWZp bGUuaW4gICAgICAgICAgICAgIHwgICAgMiArLQogZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LXRocmVhZHByZXR0eXByaW50LmMgICB8ICAxMjIgKysr KysrKysrKysrKysrKysrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS10aHJlYWRwcmV0dHlwcmludC5leHAgfCAgIDg2ICsrKysrKysrKysrKysr CiBnZGIvdGhyZWFkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAyMyArKysrLQogMTUgZmlsZXMgY2hhbmdlZCwgNjQ1IGlu c2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvdGhyZWFkX3ByaW50ZXJz LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3B5dGhvbi9saWIvZ2RiL3Ro cmVhZHMucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktdGhyZWFkcHJldHR5cHJpbnQuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS10aHJlYWRwcmV0 dHlwcmludC5leHAKCmRpZmYgLS1naXQgYS9nZGIvZGF0YS1kaXJlY3Rvcnkv TWFrZWZpbGUuaW4gYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4K aW5kZXggNDE5NDdjNi4uM2E1YmIwNSAxMDA2NDQKLS0tIGEvZ2RiL2RhdGEt ZGlyZWN0b3J5L01ha2VmaWxlLmluCisrKyBiL2dkYi9kYXRhLWRpcmVjdG9y eS9NYWtlZmlsZS5pbgpAQCAtNTUsOSArNTUsMTEgQEAgUFlUSE9OX0ZJTEVT ID0gXAogCWdkYi9fX2luaXRfXy5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAln ZGIvcHJpbnRpbmcucHkgXAorCWdkYi90aHJlYWRzLnB5IFwKIAlnZGIvcHJv bXB0LnB5IFwKIAlnZGIvY29tbWFuZC9fX2luaXRfXy5weSBcCiAJZ2RiL2Nv bW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5IFwKKwlnZGIvY29tbWFuZC90aHJl YWRfcHJpbnRlcnMucHkgXAogCWdkYi9jb21tYW5kL3Byb21wdC5weSBcCiAJ Z2RiL2NvbW1hbmQvZXhwbG9yZS5weSBcCiAJZ2RiL2Z1bmN0aW9uL19faW5p dF9fLnB5IFwKZGlmZiAtLWdpdCBhL2dkYi9kb2MvZ2RiLnRleGluZm8gYi9n ZGIvZG9jL2dkYi50ZXhpbmZvCmluZGV4IDA4YmE5MmQuLjUxZDkwNzIgMTAw NjQ0Ci0tLSBhL2dkYi9kb2MvZ2RiLnRleGluZm8KKysrIGIvZ2RiL2RvYy9n ZGIudGV4aW5mbwpAQCAtMjc2Niw4ICsyNzY2LDggQEAgdGhlIHRhcmdldCBz eXN0ZW0ncyB0aHJlYWQgaWRlbnRpZmllciAoQHZhcntzeXN0YWd9KQogCiBA aXRlbQogdGhlIHRocmVhZCdzIG5hbWUsIGlmIG9uZSBpcyBrbm93bi4gIEEg dGhyZWFkIGNhbiBlaXRoZXIgYmUgbmFtZWQgYnkKLXRoZSB1c2VyIChzZWUg QGNvZGV7dGhyZWFkIG5hbWV9LCBiZWxvdyksIG9yLCBpbiBzb21lIGNhc2Vz LCBieSB0aGUKLXByb2dyYW0gaXRzZWxmLgordGhlIHVzZXIgKHNlZSBAY29k ZXt0aHJlYWQgbmFtZX0sIGJlbG93KSwgYnkgVGhyZWFkIE5hbWUgUHJpbnRl cnMKKyhAcHhyZWZ7VGhyZWFkIE5hbWUgUHJpbnRlcnN9KSwgb3IsIGluIHNv bWUgY2FzZXMsIGJ5IHRoZSBwcm9ncmFtIGl0c2VsZi4KIAogQGl0ZW0KIHRo ZSBjdXJyZW50IHN0YWNrIGZyYW1lIHN1bW1hcnkgZm9yIHRoYXQgdGhyZWFk CkBAIC0yMjU4NSw2ICsyMjU4NSw3IEBAIHNpdHVhdGlvbiwgYSBQeXRob24g QGNvZGV7S2V5Ym9hcmRJbnRlcnJ1cHR9IGV4Y2VwdGlvbiBpcyB0aHJvd24u CiAqIEluZmVyaW9ycyBJbiBQeXRob246OiAgICAgICAgIFB5dGhvbiByZXBy ZXNlbnRhdGlvbiBvZiBpbmZlcmlvcnMgKHByb2Nlc3NlcykKICogRXZlbnRz IEluIFB5dGhvbjo6ICAgICAgICAgICAgTGlzdGVuaW5nIGZvciBldmVudHMg ZnJvbSBAdmFsdWV7R0RCTn0uCiAqIFRocmVhZHMgSW4gUHl0aG9uOjogICAg ICAgICAgIEFjY2Vzc2luZyBpbmZlcmlvciB0aHJlYWRzIGZyb20gUHl0aG9u LgorKiBUaHJlYWQgTmFtZSBQcmludGVyczo6ICAgICAgICBDdXN0b20gdGhy ZWFkIG5hbWUgcHJpbnRpbmcgZnJvbSBQeXRob24uCiAqIENvbW1hbmRzIElu IFB5dGhvbjo6ICAgICAgICAgIEltcGxlbWVudGluZyBuZXcgY29tbWFuZHMg aW4gUHl0aG9uLgogKiBQYXJhbWV0ZXJzIEluIFB5dGhvbjo6ICAgICAgICBB ZGRpbmcgbmV3IEB2YWx1ZXtHREJOfSBwYXJhbWV0ZXJzLgogKiBGdW5jdGlv bnMgSW4gUHl0aG9uOjogICAgICAgICBXcml0aW5nIG5ldyBjb252ZW5pZW5j ZSBmdW5jdGlvbnMuCkBAIC0yNDE3NSw2ICsyNDE3Niw5MCBAQCBSZXR1cm4g YSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGhyZWFkIGlzIGV4 aXRlZC4KIEBlbmQgZGVmdW4KIEBlbmQgdGFibGUKIAorQG5vZGUgVGhyZWFk IE5hbWUgUHJpbnRlcnMKK0BzdWJzdWJzZWN0aW9uIFRocmVhZCBOYW1lIFBy aW50ZXJzCitAY2luZGV4IHRocmVhZCBuYW1lIHByaW50ZXJzCisKK1RocmVh ZCBuYW1lIHByaW50ZXJzIGFyZSB1c2VkIHRvIHByaW50IGN1c3RvbSB0aHJl YWQgbmFtZXMuIFRoZXkgYXJlCitpbXBsZW1lbnRlZCBhcyBQeXRob24gY2xh c3NlcyB0aGF0IGluaGVyaXQgZnJvbQorZ2RiLnRocmVhZF9wcmludGluZy5U aHJlYWROYW1lUHJpbnRlciBpbiB0aHJlYWRfcHJpbnRpbmcucHkgYW5kIGRl ZmluZQordGhlIGZvbGxvd2luZyB0d28gbWV0aG9kczogQGNvZGV7cHJlcGFy ZX0gYW5kIEBjb2Rle3ByaW50X3RocmVhZH0uCisKK1RocmVhZCBuYW1lIHBy aW50ZXJzIGFyZSByZWdpc3RlcmVkIGFuZCBtYXkgYmUgZGlzYWJsZWQgYW5k IGVuYWJsZWQgYnkgdGhlCitwcm92aWRlZCBhbGlhcyB3aGVuIHRoZSBwcmlu dGVyIHdhcyByZWdpc3RlcmVkLgorCitPbmNlIGEgcHJpbnRlciBoYXMgYmVl biBkZWZpbmVkLCBpdCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBhZGRlZCB0 byB0aGUgZ2xvYmFsCitsaXN0IG9mIHByaW50ZXJzIGFzIGZvbGxvd3M6CitA Y29kZXtteV9wcmludGVyX2NsYXNzKCkuYWRkX3ByaW50ZXIoIm15IHByaW50 ZXIgYWxpYXMiKX0KKworQGRlZnVuIHRocmVhZF9uYW1lX3ByaW50ZXIucHJl cGFyZSAoQHZhcntzZWxmfSkKK0B2YWx1ZXtHREJOfSB3aWxsIGNhbGwgdGhp cyBtZXRob2QgZm9yIGVhY2ggcHJpbnRlciBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZQorJ2luZm8gdGhyZWFkcycgY29tbWFuZC4KKworSW4gdGhpcyBtZXRo b2QgdGhlIHByaW50ZXIgbWF5IGdhdGhlciBhbnkgaW5mb3JtYXRpb24gYW5k IHN0b3JlIGl0IGludGVybmFsbHkKK2ZvciB1c2Ugd2hlbiBwcmludGluZyB0 aHJlYWQgbmFtZXMuCitAZW5kIGRlZnVuCisKK0BkZWZ1biB0aHJlYWRfbmFt ZV9wcmludGVyLnByaW50X3RocmVhZCAoQHZhcntzZWxmfSwgQHZhcntuYW1l fSwgQHZhcnt0aHJlYWRfaW5mb30pCitGb3IgZWFjaCB0aHJlYWQsIEB2YWx1 ZXtHREJOfSB3aWxsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBw cmludGVycyBhbmQgY2FsbCB0aGlzCittZXRob2QgaW4gZWFjaCBlbmFibGVk IHByaW50ZXIgdW50aWwgYSBzdHJpbmcgaXMgcmV0dXJuZWQuIEl0IGlzIHVw IHRvIGVhY2ggdGhyZWFkIHByaW50ZXIKK3RvIGRldGVybWluZSB3aGV0aGVy IGl0IGNhbiBvciBzaG91bGQgcHJvdmlkZSBhIHRocmVhZCBuYW1lLgorQHZh cntuYW1lfSBpcyB0aGUgZGVmYXVsdCBuYW1lIGZvciB0aGUgdGhyZWFkLgor CitAdmFye3RocmVhZF9pbmZvfSBpcyB0aGUgSW5mZXJpb3JUaHJlYWQgYXMg ZGVmaW5lZCBpbiBAcHhyZWZ7VGhyZWFkcyBJbiBQeXRob259LgorQGVuZCBk ZWZ1bgorCitAc21hbGxleGFtcGxlCitjbGFzcyBFeGFtcGxlUHJpbnRlcihU aHJlYWROYW1lUHJpbnRlcik6CisgICAgIiIiUmVmZXJlbmNlIGNsYXNzIGZv ciB0aHJlYWQgbmFtZSBwcmludGVycy4KKworICAgIFRocmVhZCBuYW1lIHBy aW50ZXJzIG11c3QgaW1wbGVtZW50IHRoZSB0d28gbWV0aG9kcyBiZWxvdy4K KyAgICBJbiBvcmRlciBmb3IgYSBwcmludGVyIHRvIGJlIHVzZWQgaXQgbmVl ZHMgdG8gYmUgaW5zdGFudGlhdGVkIGFuZAorICAgIGFkZGVkIHRvIHRoZSBn ZGIudGhyZWFkX3ByaW50ZXJzIGxpc3QuCisgICAgVXNlIHRoZSBhZGRfcHJp bnRlcihhbGlhcywgcHJpbnRlcikgZnVuY3Rpb24gZm9yIHRoaXMgdGFzay4K KyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zdGFudGlhdGUgdGhlIHByaW50 ZXIsIHNldCB0aGUgYWxpYXMgb2YgdGhlIGluc3RhbmNlCisgICAgYW5kIGFk ZCB0aGUgaW5zdGFuY2UgdG8gdGhlIHByaW50ZXIgbGlzdC4KKyAgICAiIiIK KworICAgIGRlZiBwcmVwYXJlKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQg b25jZSBmb3IgZWFjaCAnaW5mbyB0aHJlYWRzJyBjb21tYW5kIGJlZm9yZSB0 aGUgdGhyZWFkcworICAgICAgICAgICBhcmUgcHJpbnRlZC4gUHJpbnRlcnMg bWF5IHJlLWRlZmluZSB0aGlzIG1ldGhvZCB0byBpbml0aWFsaXplCisgICAg ICAgICAgIHRoZWlyIGludGVybmFsIGRhdGEuCisgICAgICAgICIiIgorICAg ICAgICAjIFVzdWFsbHkgd2Ugd2lsbCBoYXZlIHNvbWUgbWFwIG9mIHRocmVh ZHMgd2Ugb3duLgorICAgICAgICAjIElmIG5lY2Vzc2FyeSwgV2Ugc2hvdWxk IGRpc2NvdmVyIHRoZW0gaGVyZS4KKyAgICAgICAgIyBGb3IgdGhpcyBkdW1t eSBleGFtcGxlLCBpdCB3aWxsIGJlIGVtcHR5LgorICAgICAgICBzZWxmLm15 X3RocmVhZHMgPSB7fQorCisgICAgZGVmIHByaW50X3RocmVhZChzZWxmLCB0 aHJlYWRfaW5mbyk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyB0aHJlYWQg bmFtZSBvciBOb25lLgorCisgICAgICAgIFByaW50ZXJzIG11c3QgZGVmaW5l IHRoaXMgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgSW52ZXJpb3JUaHJlYWQg b2JqZWN0LAorICAgICAgICBhbmQsIGlmIHRoZSB0aHJlYWQgbWF0Y2hlcyB0 aGUgcHJpbnRlciAodXN1YWxseSBhIHB0aWQgY2hlY2spIHJldHVybnMKKyAg ICAgICAgYSBuZXcgc3RyaW5nIGZvciB0aGUgdGhyZWFkcyBuYW1lLgorCisg ICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgICAgICB0aHJlYWRfaW5mbzog QSBnZGIuaW5mZXJpb3JfdGhyZWFkIG9iamVjdCBmb3IgdGhlIHRocmVhZC4K KworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgLUEgc3RyaW5nLCBp ZiB0aGUgdGhyZWFkIG1hdGNoZXMgdGhlIHByaW50ZXIuCisgICAgICAgICAg ICAtTm9uZSwgaWYgdGhlIHRocmVhZCBkb2VzIG5vdCBtYXRjaC4KKyAgICAg ICAgIiIiCisgICAgICAgICMgV2Ugb25seSByZXR1cm4gYSBzdHJpbmcgbmFt ZSBpZiB3ZSBvd24gdGhlIHRocmVhZC4KKyAgICAgICAgaWYgdGhyZWFkX2lu Zm8ucHRpZFswXSBpbiBzZWxmLm15X3RocmVhZDoKKyAgICAgICAgICByZXR1 cm4gInNvbWUgaW50ZXJlc3RpbmcgbmFtZSIKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6 CisgICAgICAgICIiIlByaW50ZXJzIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8g ZG8gYW55IGNsZWFudXAgdGhleSBtYXkgd2lzaCB0byBkbworICAgICAgICAg ICBhZnRlciBhbGwgdGhyZWFkcyBoYXZlIGJlZW4gcHJpbnRlZC4KKyAgICAg ICAgIiIiCisgICAgICAgIHBhc3MKKworRXhhbXBsZVByaW50ZXIoKS5hZGRf cHJpbnRlcigiRXhhbXBsZSBQcmludGVyIikKK0BlbmQgc21hbGxleGFtcGxl CisKIEBub2RlIENvbW1hbmRzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24g Q29tbWFuZHMgSW4gUHl0aG9uCiAKZGlmZiAtLWdpdCBhL2dkYi9nZGJ0aHJl YWQuaCBiL2dkYi9nZGJ0aHJlYWQuaAppbmRleCAwMjUwNTU1Li41OGZhYzYw IDEwMDY0NAotLS0gYS9nZGIvZ2RidGhyZWFkLmgKKysrIGIvZ2RiL2dkYnRo cmVhZC5oCkBAIC0yOCw2ICsyOCw3IEBAIHN0cnVjdCBzeW10YWI7CiAjaW5j bHVkZSAiZnJhbWUuaCIKICNpbmNsdWRlICJ1aS1vdXQuaCIKICNpbmNsdWRl ICJpbmZlcmlvci5oIgorI2luY2x1ZGUgInB5dGhvbi9weXRob24taW50ZXJu YWwuaCIKIAogLyogRnJvbnRlbmQgdmlldyBvZiB0aGUgdGhyZWFkIHN0YXRl LiAgUG9zc2libGUgZXh0ZW5zaW9uczogc3RlcHBpbmcsCiAgICBmaW5pc2hp bmcsIHVudGlsKGxpbmcpLC4uLiAgKi8KQEAgLTIyNyw2ICsyMjgsMTAgQEAg c3RydWN0IHRocmVhZF9pbmZvCiAgIC8qIEZ1bmN0aW9uIHRoYXQgaXMgY2Fs bGVkIHRvIGZyZWUgUFJJVkFURS4gIElmIHRoaXMgaXMgTlVMTCwgdGhlbgog ICAgICB4ZnJlZSB3aWxsIGJlIGNhbGxlZCBvbiBQUklWQVRFLiAgKi8KICAg dm9pZCAoKnByaXZhdGVfZHRvcikgKHN0cnVjdCBwcml2YXRlX3RocmVhZF9p bmZvICopOworCisgIC8qIFBvaW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcg UHl0aG9uIFB5T2JqZWN0IGZvciB0aGlzIHRocmVhZC4KKyAgICAgVGhpcyBp cyBzZXQgaW4gcHl0aG9uL3B5LWluZmVyaW9yLmM6YWRkX3RocmVhZF9vYmpl Y3QuICAqLworICB0aHJlYWRfb2JqZWN0ICp0aHJlYWRfb2JqZWN0OwogfTsK IAogLyogQ3JlYXRlIGFuIGVtcHR5IHRocmVhZCBsaXN0LCBvciBlbXB0eSB0 aGUgZXhpc3Rpbmcgb25lLiAgKi8KZGlmZiAtLWdpdCBhL2dkYi9weXRob24v bGliL2dkYi9fX2luaXRfXy5weSBiL2dkYi9weXRob24vbGliL2dkYi9fX2lu aXRfXy5weQppbmRleCBhODJlNDk1Li42ZjMzYmNlIDEwMDY0NAotLS0gYS9n ZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKysrIGIvZ2RiL3B5dGhv bi9saWIvZ2RiL19faW5pdF9fLnB5CkBAIC0zOSwzICszOSwxMSBAQCBmb3Ig bW9kdWxlLCBsb2NhdGlvbiBpbiBtb2R1bGVfZGljdC5pdGVyaXRlbXMoKToK ICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgcHlfZmlsZSkKICAgICAgICBl eGNlcHQ6CiAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCB0cmFjZWJh Y2suZm9ybWF0X2V4YygpCisKK3RyeToKKyAgICBmcm9tIGdkYi50aHJlYWRz IGltcG9ydCBUaHJlYWROYW1lUHJpbnRlcgorICAgIGdkYi5wcmVwYXJlX3Ro cmVhZF9uYW1lX3ByaW50ZXJzID0gVGhyZWFkTmFtZVByaW50ZXIucHJlcGFy ZV90aHJlYWRfbmFtZV9wcmludGVycworICAgIGdkYi5hcHBseV90aHJlYWRf bmFtZV9wcmludGVycyA9IFRocmVhZE5hbWVQcmludGVyLmFwcGx5X3RocmVh ZF9uYW1lX3ByaW50ZXJzCisgICAgZ2RiLmNsZWFudXBfdGhyZWFkX25hbWVf cHJpbnRlcnMgPSBUaHJlYWROYW1lUHJpbnRlci5jbGVhbnVwX3RocmVhZF9u YW1lX3ByaW50ZXJzCitleGNlcHQ6CisgICAgcHJpbnQgPj4gc3lzLnN0ZGVy ciwgIlVuYWJsZSB0byBzZXR1cCB0aHJlYWQgbmFtZSBwcmV0dHkgcHJpbnRp bmciCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC90 aHJlYWRfcHJpbnRlcnMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFu ZC90aHJlYWRfcHJpbnRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNDBmNDcyZgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9w eXRob24vbGliL2dkYi9jb21tYW5kL3RocmVhZF9wcmludGVycy5weQpAQCAt MCwwICsxLDcyIEBACisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisiIiJHREIgY29tbWFuZHMgZm9yIHdvcmtpbmcgd2l0aCB0aHJlYWQtbmFt ZS1wcmludGVycy4iIiIKKworaW1wb3J0IGdkYgorZnJvbSBnZGIudGhyZWFk cyBpbXBvcnQgVGhyZWFkTmFtZVByaW50ZXIKKworY2xhc3MgRW5hYmxlVGhy ZWFkTmFtZVByaW50ZXIgKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIgY29t bWFuZCB0byBlbmFibGUgdGhlIHNwZWNpZmllZCB0aHJlYWQgcHJpbnRlci4K KworICAgIFVzYWdlOiBlbmFibGUgdGhyZWFkLW5hbWUtcHJpbnRlciBbYWxp YXNdCisKKyAgICBBTElBUyBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgcHJp bnRlciB3aGVuIGl0IHdhcyByZWdpc3RlcmVkLgorICAgICIiIgorCisgICAg ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihFbmFibGVUaHJl YWROYW1lUHJpbnRlciwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICAg ICAgImVuYWJsZSB0aHJlYWQtbmFtZS1wcmludGVyIiwKKyAgICAgICAgICAg ICAgICBnZGIuQ09NTUFORF9EQVRBKQorCisgICAgZGVmIGludm9rZShzZWxm LCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgVGhyZWFkTmFtZVByaW50ZXIu ZW5hYmxlX3ByaW50ZXIoYXJnKQorCitjbGFzcyBEaXNhYmxlVGhyZWFkTmFt ZVByaW50ZXIgKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIgY29tbWFuZCB0 byBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgdGhyZWFkIHByaW50ZXIuCisKKyAg ICBVc2FnZTogZGlzYWJsZSB0aHJlYWQtbmFtZS1wcmludGVyIFthbGlhc10K KworICAgIEFMSUFTIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSBwcmludGVy IHdoZW4gaXQgd2FzIHJlZ2lzdGVyZWQuCisgICAgIiIiCisKKyAgICBkZWYg X19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKERpc2FibGVUaHJlYWRO YW1lUHJpbnRlciwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICAgICAg ImRpc2FibGUgdGhyZWFkLW5hbWUtcHJpbnRlciIsCisgICAgICAgICAgICAg ICAgZ2RiLkNPTU1BTkRfREFUQSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwg YXJnLCBmcm9tX3R0eSk6CisgICAgICAgIFRocmVhZE5hbWVQcmludGVyLmRp c2FibGVfcHJpbnRlcihhcmcpCisKK2NsYXNzIEluZm9UaHJlYWROYW1lUHJp bnRlciAoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGxp c3QgYWxsIHRoZSByZWdpc3RlcmVkIHRocmVhZCBwcmludGVycy4KKworICAg IFVzYWdlOiBpbmZvIHRocmVhZC1uYW1lLXByaW50ZXIKKyAgICAiIiIKKwor ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoSW5mb1Ro cmVhZE5hbWVQcmludGVyLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAg ICAgICAiaW5mbyB0aHJlYWQtbmFtZS1wcmludGVyIiwKKyAgICAgICAgICAg ICAgICBnZGIuQ09NTUFORF9EQVRBKQorCisgICAgZGVmIGludm9rZShzZWxm LCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgcHJpbnQgIlRocmVhZCBuYW1l IHByZXR0eS1wcmludGVyczoiCisgICAgICAgIGZvciBwIGluIFRocmVhZE5h bWVQcmludGVyLnByaW50ZXJzOgorICAgICAgICAgICAgcHJpbnQgIlslc10g JXMiICUgKCJ4IiBpZiBwLmVuYWJsZWQgZWxzZSAiICIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcC5hbGlhcykKKworRW5hYmxlVGhyZWFk TmFtZVByaW50ZXIoKQorRGlzYWJsZVRocmVhZE5hbWVQcmludGVyKCkKK0lu Zm9UaHJlYWROYW1lUHJpbnRlcigpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9u L2xpYi9nZGIvdGhyZWFkcy5weSBiL2dkYi9weXRob24vbGliL2dkYi90aHJl YWRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJh N2VlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIv dGhyZWFkcy5weQpAQCAtMCwwICsxLDEyNyBAQAorIyBQcmV0dHktcHJpbnRl ciB1dGlsaXRpZXMuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisiIiJVdGlsaXRpZXMgYW5kIGNsYXNzIGRlZmluaXRpb25zIGZvciB0aHJl YWQgbmFtZSBwcmludGVycy4iIiIKKworaW1wb3J0IGdkYgorCitjbGFzcyBU aHJlYWROYW1lUHJpbnRlcihvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3Mg Zm9yIHRocmVhZCBuYW1lIHByaW50ZXJzLgorCisgICAgVGhyZWFkIG5hbWUg cHJpbnRlcnMgbXVzdCBpbmhlcml0IGZyb20gdGhpcyBiYXNlIGNsYXNzCisg ICAgYW5kIGltcGxlbWVudCB0aGUgbWV0aG9kcworICAgICAgICAtcHJlcGFy ZSgpCisgICAgICAgICAgICBDYWxsZWQgb25jZSBwZXIgaW5mbyB0aHJlYWRz IGNvbW1hbmQgcHJpb3IgdG8gcHJpbnRpbmcKKyAgICAgICAgICAgIGFueSB0 aHJlYWRzLgorCisgICAgICAgIC1wcmludF90aHJlYWQodGhyZWFkX2luZm8p CisgICAgICAgICAgICBDYWxsZWQgcGVyIHRocmVhZC4gUmV0dXJuIGEgbmV3 IHN0cmluZyBuYW1lIGZvciBhbnkKKyAgICAgICAgICAgIHRocmVhZCB0aGF0 IGFwcGxpZXMuCisKKyAgICAgICAgLWNsZWFudXAoKSAoT1BUSU9OQUwpCisg ICAgICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHRocmVhZHMgaGF2ZSBiZWVu IHByaW50ZWQuIEFsbG93cyBmb3IKKyAgICAgICAgICAgIHRocmVhZCBwcmlu dHMgdG8gZG8gYW55IGNsZWFudXAgdGhleSBtYXkgbmVlZC4KKyAgICAiIiIK KworICAgICMgVGhpcyBpcyB0aGUgZ2xvYmFsIGxpc3Qgb2YgdGhyZWFkIHBy aW50ZXJzCisgICAgcHJpbnRlcnMgPSBbXQorCisgICAgZGVmIGFkZF9wcmlu dGVyKHNlbGYsIGFsaWFzLCByZXBsYWNlID0gRmFsc2UpOgorICAgICAgICBp ZiBub3QgaGFzYXR0cihzZWxmLCAicHJlcGFyZSIpOgorICAgICAgICAgICAg cmFpc2UgVHlwZUVycm9yKCJwcmludGVyIG1pc3NpbmcgYXR0cmlidXRlOiBw cmVwYXJlIikKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgInByaW50 X3RocmVhZCIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJwcmlu dGVyIG1pc3NpbmcgYXR0cmlidXRlOiBwcmludF90aHJlYWQiKQorCisgICAg ICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJlbmFibGVkIik6CisgICAgICAg ICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hbGlh cyA9IGFsaWFzCisKKyAgICAgICAgZm9yIGksIHAgaW4gZW51bWVyYXRlKFRo cmVhZE5hbWVQcmludGVyLnByaW50ZXJzKToKKyAgICAgICAgICAgIGlmIGhh c2F0dHIocCwgImFsaWFzIikgYW5kIHAuYWxpYXMgPT0gYWxpYXM6CisgICAg ICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAgICAgICAg ZGVsIGNscy5wcmludGVyc1tpXQorICAgICAgICAgICAgICAgICAgICBicmVh ayAjIGFzc3VtcHRpb246IHRoZXJlIHdpbGwgb25seSBvbmUgaW4gdGhlIGxp c3QuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAg ICAgIlRocmVhZCBwcmludGVyIHdpdGggYWxpYXMgJXMgYWxyZWFkeSByZWdp c3RlcmVkIiAlIGFsaWFzKQorICAgICAgICBUaHJlYWROYW1lUHJpbnRlci5w cmludGVycy5hcHBlbmQoc2VsZikKKworICAgIEBjbGFzc21ldGhvZAorICAg IGRlZiBwcmVwYXJlX3RocmVhZF9uYW1lX3ByaW50ZXJzKGNscyk6CisgICAg ICAgICIiIlJ1biBmb3IgZXZlcnkgJ2luZm8gdGhyZWFkcycgY29tbWFuZC4K KyAgICAgICAgSW5pdGlhbGl6ZSBhbGwgdGhlIHByaW50ZXJzIGFuZCByZXR1 cm4gdGhlIGxpc3QuCisKKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgYnkgR0RC IGluIHRoZSAnaW5mbyB0aHJlYWRzJyBjb2RlLgorICAgICAgICAiIiIKKyAg ICAgICAgZm9yIHAgaW4gY2xzLnByaW50ZXJzOgorICAgICAgICAgICAgcC5w cmVwYXJlKCkKKyAgICAgICAgcmV0dXJuIGNscy5wcmludGVycworCisgICAg QGNsYXNzbWV0aG9kCisgICAgZGVmIGFwcGx5X3RocmVhZF9uYW1lX3ByaW50 ZXJzKGNscywgdGhyZWFkX2luZm8pOgorICAgICAgICAiIiJBcHBseSB0aHJl YWQgbmFtZSBwcmludGVycyB0byBhIHBhcnRpY3VsYXIgdGhyZWFkLgorCisg ICAgICAgIElmIGEgbmV3IG5hbWUgaXMgcmV0dXJuZWQgYnkgYW55IHByaW50 ZXIsIHVwZGF0ZSB0aGUgbmFtZSBvZiB0aGUgdGhyZWFkCisgICAgICAgIGFu ZCByZXR1cm4uCisKKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgYnkgR0RCIGlu IHRoZSAnaW5mbyB0aHJlYWRzJyBjb2RlLgorICAgICAgICAiIiIKKyAgICAg ICAgZm9yIHAgaW4gWyBwIGZvciBwIGluIGNscy5wcmludGVycyBpZiBwLmVu YWJsZWQgPT0gVHJ1ZSBdOgorICAgICAgICAgICAgbmV3X25hbWUgPSBwLnBy aW50X3RocmVhZCh0aHJlYWRfaW5mbykKKyAgICAgICAgICAgIGlmIG5ld19u YW1lOgorICAgICAgICAgICAgICAgIHRocmVhZF9pbmZvLm5hbWUgPSBuZXdf bmFtZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybgor CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNsZWFudXBfdGhyZWFkX25h bWVfcHJpbnRlcnMoY2xzKToKKyAgICAgICAgIiIiQ2FsbCB0aGUgY2xlYW51 cCBtZXRob2QgZm9yIGVhY2ggcHJpbnRlci4iIiIKKyAgICAgICAgZm9yIHAg aW4gWyBwIGZvciBwIGluIGNscy5wcmludGVycyBpZiBwLmVuYWJsZWQgPT0g VHJ1ZSBdOgorICAgICAgICAgICAgaWYgaGFzYXR0cihwLmNsZWFudXApOgor ICAgICAgICAgICAgICAgIHAuY2xlYW51cCgpCisKKyAgICBAY2xhc3NtZXRo b2QKKyAgICBkZWYgcmVtb3ZlX3ByaW50ZXIoY2xzLCBhbGlhcyk6CisgICAg ICAgIGZvciBpLCBwIGluIGVudW1lcmF0ZShjbHMucHJpbnRlcnMpOgorICAg ICAgICAgICAgaWYgcC5hbGlhcyA9PSBhbGlhczoKKyAgICAgICAgICAgICAg ICBkZWwgY2xzLnByaW50ZXJzW2ldCisgICAgICAgICAgICAgICAgcmV0dXJu CisgICAgICAgIHByaW50ICJQcmludGVyICclcycgbm90IGZvdW5kIiAlIGFs aWFzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGlzYWJsZV9wcmlu dGVyKGNscywgYWxpYXMpOgorICAgICAgICBmb3IgcCBpbiBjbHMucHJpbnRl cnM6CisgICAgICAgICAgICBpZiBwLmFsaWFzID09IGFsaWFzOgorICAgICAg ICAgICAgICBjbHMuZGlzYWJsZV9wcmludGVyX2luc3RhbmNlKHApCisgICAg ICAgICAgICAgIHJldHVybgorICAgICAgICBwcmludCAiUHJpbnRlciAnJXMn IG5vdCBmb3VuZCIgJSBhbGlhcworCisgICAgQGNsYXNzbWV0aG9kCisgICAg ZGVmIGVuYWJsZV9wcmludGVyKGNscywgYWxpYXMpOgorICAgICAgICBmb3Ig cCBpbiBjbHMucHJpbnRlcnM6CisgICAgICAgICAgICBpZiBwLmFsaWFzID09 IGFsaWFzOgorICAgICAgICAgICAgICAgIGNscy5lbmFibGVfcHJpbnRlcl9p bnN0YW5jZShwKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBw cmludCAiUHJpbnRlciAnJXMnIG5vdCBmb3VuZCIgJSBhbGlhcworCisgICAg QHN0YXRpY21ldGhvZAorICAgIGRlZiBkaXNhYmxlX3ByaW50ZXJfaW5zdGFu Y2UocCk6CisgICAgICAgIHAuZW5hYmxlZCA9IEZhbHNlCisKKyAgICBAc3Rh dGljbWV0aG9kCisgICAgZGVmIGVuYWJsZV9wcmludGVyX2luc3RhbmNlKHAp OgorICAgICAgICBwLmVuYWJsZWQgPSBUcnVlCmRpZmYgLS1naXQgYS9nZGIv cHl0aG9uL3B5LWluZmVyaW9yLmMgYi9nZGIvcHl0aG9uL3B5LWluZmVyaW9y LmMKaW5kZXggOTA3YjczZS4uZjA4N2QzYyAxMDA2NDQKLS0tIGEvZ2RiL3B5 dGhvbi9weS1pbmZlcmlvci5jCisrKyBiL2dkYi9weXRob24vcHktaW5mZXJp b3IuYwpAQCAtMjM5LDYgKzIzOSw4IEBAIGFkZF90aHJlYWRfb2JqZWN0IChz dHJ1Y3QgdGhyZWFkX2luZm8gKnRwKQogICAgICAgcmV0dXJuOwogICAgIH0K IAorICB0cC0+dGhyZWFkX29iamVjdCA9IHRocmVhZF9vYmo7CisKICAgaW5m X29iaiA9IChpbmZlcmlvcl9vYmplY3QgKikgdGhyZWFkX29iai0+aW5mX29i ajsKIAogICBlbnRyeSA9IHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IHRocmVh ZGxpc3RfZW50cnkpKTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktaW5m dGhyZWFkLmMgYi9nZGIvcHl0aG9uL3B5LWluZnRocmVhZC5jCmluZGV4IDg4 MjFmMjAuLjc0N2MxMzggMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHktaW5m dGhyZWFkLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1pbmZ0aHJlYWQuYwpAQCAt MjEsNyArMjEsMTAgQEAKICNpbmNsdWRlICJleGNlcHRpb25zLmgiCiAjaW5j bHVkZSAiZ2RidGhyZWFkLmgiCiAjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNp bmNsdWRlICJweXRob24vcHl0aG9uLmgiCiAjaW5jbHVkZSAicHl0aG9uLWlu dGVybmFsLmgiCisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1ZGUg Imxhbmd1YWdlLmgiCiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgdGhyZWFkX29i amVjdF90eXBlOwogCkBAIC0zNDAsMyArMzQzLDk2IEBAIHN0YXRpYyBQeVR5 cGVPYmplY3QgdGhyZWFkX29iamVjdF90eXBlID0KICAgMCwJCQkJICAvKiB0 cF9pbml0ICovCiAgIDAJCQkJICAvKiB0cF9hbGxvYyAqLwogfTsKKworI2lm ZGVmIEhBVkVfUFlUSE9OCisKKy8qIENhbGxzIHByZXBhcmUgZm9yIGVhY2gg cHJpbnRlciBpbiB0aGUgdGhlIGxpc3Qgb2YgdGhyZWFkIG5hbWUgcHJpbnRl cnMuICAqLworCit2b2lkCitwcmVwYXJlX3RocmVhZF9uYW1lX3ByaW50ZXJz ICh2b2lkKQoreworICBQeU9iamVjdCAqcmV0OworICBzdHJ1Y3QgY2xlYW51 cCAqY2xlYW51cHM7CisKKyAgY2xlYW51cHMgPSBlbnN1cmVfcHl0aG9uX2Vu diAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwgY3VycmVudF9sYW5ndWFnZSk7CisK KyAgLyogUHJlcGFyZSBlYWNoIHRocmVhZCBwcmludGVyLiAgKi8KKyAgaWYg KFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcgKGdkYl9tb2R1bGUsICJwcmVwYXJl X3RocmVhZF9uYW1lX3ByaW50ZXJzIikpCisgICAgeworICAgICAgcmV0ID0g UHlPYmplY3RfQ2FsbE1ldGhvZCAoZ2RiX21vZHVsZSwgInByZXBhcmVfdGhy ZWFkX25hbWVfcHJpbnRlcnMiLAorCQkJCSBOVUxMKTsKKyAgICAgIGlmIChy ZXQgPT0gTlVMTCkKKyAgICAgICAgZ2RicHlfcHJpbnRfc3RhY2soKTsKKyAg ICAgIGVsc2UKKwlQeV9ERUNSRUYgKHJldCk7CisgICAgfQorICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOworfQorCisvKiBDYWxsZWQgcGVyIHRocmVhZCBi eSBwcmludF90aHJlYWRfaW5mbyB0byBjaGVjayBpZiBhIHRocmVhZCBuYW1l IHByaW50ZXIKKyAgIGFwcGxpZXMgdG8gYSB0aHJlYWQgdG8gZ2l2ZSBpdCBh IG5ldyBuYW1lLiBJZiBhIG5ldyBuYW1lIGlzIHJldHVybmVkIGZvcgorICAg YSB0aHJlYWQsIHRoZSBuYW1lIGlzIHVwZGF0ZWQgYW5kIHRoZSBsb29wIHRl cm1pbmF0ZXMuICAqLworCit2b2lkCithcHBseV90aHJlYWRfbmFtZV9wcmV0 dHlfcHJpbnRlcnMgKHN0cnVjdCB0aHJlYWRfaW5mbyAqaW5mbykKK3sKKyAg c3RydWN0IGNsZWFudXAgKmNsZWFudXBzOworICBQeU9iamVjdCAqcmV0Owor CisgIGNsZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdldF9jdXJyZW50 X2FyY2ggKCksIGN1cnJlbnRfbGFuZ3VhZ2UpOworCisgIGlmIChQeU9iamVj dF9IYXNBdHRyIChnZGJfbW9kdWxlLCBnZGJweV9hcHBseV90aHJlYWRfcHJp bnRlcnNfY3N0KSkKKyAgICB7CisgICAgICByZXQgPSBQeU9iamVjdF9DYWxs TWV0aG9kT2JqQXJncyAoZ2RiX21vZHVsZSwKKwkJCQkJZ2RicHlfYXBwbHlf dGhyZWFkX3ByaW50ZXJzX2NzdCwKKwkJCQkJKFB5T2JqZWN0ICopIGluZm8t PnRocmVhZF9vYmplY3QsIE5VTEwpOworICAgICAgaWYgKHJldCA9PSBOVUxM KQorCSAgZ2RicHlfcHJpbnRfc3RhY2soKTsKKyAgICAgIGVsc2UKKwlQeV9E RUNSRUYgKHJldCk7CisgICAgfQorCisgIGRvX2NsZWFudXBzIChjbGVhbnVw cyk7Cit9CisKKy8qIENhbGxlZCBhZnRlciBhbGwgdGhyZWFkcyBoYXZlIGJl ZW4gcHJpbnRlZC4gQWxsb3dzIGZvciB0aHJlYWQgbmFtZSBwcmludGVycwor ICAgdG8gcmVsZWFzZSBhbnkgb2JqZWN0cyBvciBkbyBhbnkgY2xlYW51cHMu ICAqLworCit2b2lkCitjbGVhbnVwX3RocmVhZF9uYW1lX3ByZXR0eV9wcmlu dGVycyAodm9pZCAqdW51c2VkKQoreworICBzdHJ1Y3QgY2xlYW51cCAqY2xl YW51cHM7CisgIFB5T2JqZWN0ICpyZXQ7CisKKyAgY2xlYW51cHMgPSBlbnN1 cmVfcHl0aG9uX2VudiAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwgY3VycmVudF9s YW5ndWFnZSk7CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHIgKGdkYl9tb2R1 bGUsIGdkYnB5X2NsZWFudXBfdGhyZWFkX3ByaW50ZXJzX2NzdCkpCisgICAg eworICAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MgKGdk Yl9tb2R1bGUsCisJCQkJCWdkYnB5X2NsZWFudXBfdGhyZWFkX3ByaW50ZXJz X2NzdCwKKwkJCQkJTlVMTCk7CisgICAgICBpZiAocmV0ID09IE5VTEwpCisJ ICBnZGJweV9wcmludF9zdGFjaygpOworICAgICAgZWxzZQorCVB5X0RFQ1JF RiAocmV0KTsKKyAgICB9CisKKyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsK K30KKworI2Vsc2UgLy8gSEFWRV9QWVRIT04KK3ZvaWQKK3ByZXBhcmVfdGhy ZWFkX25hbWVfcHJpbnRlcnMgKHZvaWQpCit7Cit9CisKK3ZvaWQKK2FwcGx5 X3RocmVhZF9uYW1lX3ByZXR0eV9wcmludGVycyAoc3RydWN0IHRocmVhZF9p bmZvICppbmZvKQoreworfQorCit2b2lkCitjbGVhbnVwX3RocmVhZF9uYW1l X3ByZXR0eV9wcmludGVycyAodm9pZCAqdW51c2VkKQoreworfQorI2VuZGlm CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oIGIv Z2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAppbmRleCBiYWU2MWMyLi5j NWU0MTJlIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5h bC5oCisrKyBiL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKQEAgLTMy OCw2ICszMjgsOCBAQCBleHRlcm4gUHlPYmplY3QgKmdkYnB5X3RvX3N0cmlu Z19jc3Q7CiBleHRlcm4gUHlPYmplY3QgKmdkYnB5X2Rpc3BsYXlfaGludF9j c3Q7CiBleHRlcm4gUHlPYmplY3QgKmdkYnB5X2VuYWJsZWRfY3N0OwogZXh0 ZXJuIFB5T2JqZWN0ICpnZGJweV92YWx1ZV9jc3Q7CitleHRlcm4gUHlPYmpl Y3QgKmdkYnB5X2FwcGx5X3RocmVhZF9wcmludGVyc19jc3Q7CitleHRlcm4g UHlPYmplY3QgKmdkYnB5X2NsZWFudXBfdGhyZWFkX3ByaW50ZXJzX2NzdDsK IAogLyogRXhjZXB0aW9uIHR5cGVzLiAgKi8KIGV4dGVybiBQeU9iamVjdCAq Z2RicHlfZ2RiX2Vycm9yOwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRo b24uYyBiL2dkYi9weXRob24vcHl0aG9uLmMKaW5kZXggYzY2ZWZlNC4uZjI1 ZGFiNiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24uYworKysgYi9n ZGIvcHl0aG9uL3B5dGhvbi5jCkBAIC04Miw2ICs4Miw4IEBAIFB5T2JqZWN0 ICpnZGJweV9kaXNwbGF5X2hpbnRfY3N0OwogUHlPYmplY3QgKmdkYnB5X2Rv Y19jc3Q7CiBQeU9iamVjdCAqZ2RicHlfZW5hYmxlZF9jc3Q7CiBQeU9iamVj dCAqZ2RicHlfdmFsdWVfY3N0OworUHlPYmplY3QgKmdkYnB5X2FwcGx5X3Ro cmVhZF9wcmludGVyc19jc3Q7CitQeU9iamVjdCAqZ2RicHlfY2xlYW51cF90 aHJlYWRfcHJpbnRlcnNfY3N0OwogCiAvKiBUaGUgR2RiRXJyb3IgZXhjZXB0 aW9uLiAgKi8KIFB5T2JqZWN0ICpnZGJweV9nZGJlcnJvcl9leGM7CkBAIC0x MzA1LDYgKzEzMDcsMTAgQEAgbWVzc2FnZSA9PSBhbiBlcnJvciBtZXNzYWdl IHdpdGhvdXQgYSBzdGFjayB3aWxsIGJlIHByaW50ZWQuIiksCiAgIGdkYnB5 X2RvY19jc3QgPSBQeVN0cmluZ19Gcm9tU3RyaW5nICgiX19kb2NfXyIpOwog ICBnZGJweV9lbmFibGVkX2NzdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKCJl bmFibGVkIik7CiAgIGdkYnB5X3ZhbHVlX2NzdCA9IFB5U3RyaW5nX0Zyb21T dHJpbmcgKCJ2YWx1ZSIpOworICBnZGJweV9hcHBseV90aHJlYWRfcHJpbnRl cnNfY3N0CisgICAgPSBQeVN0cmluZ19Gcm9tU3RyaW5nICgiYXBwbHlfdGhy ZWFkX25hbWVfcHJpbnRlcnMiKTsKKyAgZ2RicHlfY2xlYW51cF90aHJlYWRf cHJpbnRlcnNfY3N0CisgICAgPSBQeVN0cmluZ19Gcm9tU3RyaW5nICgiY2xl YW51cF90aHJlYWRfbmFtZV9wcmludGVycyIpOwogCiAgIC8qIFJlbGVhc2Ug dGhlIEdJTCB3aGlsZSBnZGIgcnVucy4gICovCiAgIFB5VGhyZWFkU3RhdGVf U3dhcCAoTlVMTCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5o IGIvZ2RiL3B5dGhvbi9weXRob24uaAppbmRleCBkZDcwNjZmLi45ZjZiZWVk IDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5oCisrKyBiL2dkYi9w eXRob24vcHl0aG9uLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgR0RC X1BZVEhPTl9ICiAKICNpbmNsdWRlICJ2YWx1ZS5oIgorI2luY2x1ZGUgImdk YnRocmVhZC5oIgogCiBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3Q7CiAKQEAg LTM3LDYgKzM4LDEyIEBAIGludCBhcHBseV92YWxfcHJldHR5X3ByaW50ZXIg KHN0cnVjdCB0eXBlICp0eXBlLCBjb25zdCBnZGJfYnl0ZSAqdmFsYWRkciwK IAkJCSAgICAgIGNvbnN0IHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zICpv cHRpb25zLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGxhbmd1YWdlX2RlZm4g Kmxhbmd1YWdlKTsKIAordm9pZCBwcmVwYXJlX3RocmVhZF9uYW1lX3ByaW50 ZXJzICh2b2lkKTsKKwordm9pZCBhcHBseV90aHJlYWRfbmFtZV9wcmV0dHlf cHJpbnRlcnMgKHN0cnVjdCB0aHJlYWRfaW5mbyAqaW5mbyk7CisKK3ZvaWQg Y2xlYW51cF90aHJlYWRfbmFtZV9wcmV0dHlfcHJpbnRlcnMgKHZvaWQgKnVu dXNlZCk7CisKIHZvaWQgcHJlc2VydmVfcHl0aG9uX3ZhbHVlcyAoc3RydWN0 IG9iamZpbGUgKm9iamZpbGUsIGh0YWJfdCBjb3BpZWRfdHlwZXMpOwogCiB2 b2lkIGdkYnB5X2xvYWRfYXV0b19zY3JpcHRzX2Zvcl9vYmpmaWxlIChzdHJ1 Y3Qgb2JqZmlsZSAqb2JqZmlsZSk7CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vTWFrZWZpbGUuaW4gYi9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vTWFrZWZpbGUuaW4KaW5kZXggNGUyODZiNS4uOTE1NWVhYyAx MDA2NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL01ha2VmaWxl LmluCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9NYWtlZmlsZS5p bgpAQCAtNiw3ICs2LDcgQEAgRVhFQ1VUQUJMRVMgPSBweS10eXBlIHB5LXZh bHVlIHB5LXByZXR0eXByaW50IHB5LXRlbXBsYXRlIHB5LWJsb2NrIFwKIAlw eS1zaGFyZWQgcHl0aG9uIGxpYi10eXBlcyBweS1ldmVudHMgcHktZXZ0aHJl YWRzIHB5LWZyYW1lIFwKIAlweS1taSBweS1wcC1tYWludCBweS1wcm9nc3Bh Y2UgcHktc2VjdGlvbi1zY3JpcHQgcHktb2JqZmlsZSBcCiAJcHktZmluaXNo LWJyZWFrcG9pbnQgcHktZmluaXNoLWJyZWFrcG9pbnQyIHB5LXZhbHVlLWNj IHB5LWV4cGxvcmUgXAotCXB5LWV4cGxvcmUtY2MKKwlweS1leHBsb3JlLWNj IHB5LXRocmVhZHByZXR0eXByaW50CiAKIE1JU0NFTExBTkVPVVMgPSBweS1z aGFyZWQtc2wuc2wgcHktZXZlbnRzLXNobGliLnNvIHB5LWV2ZW50cy1zaGxp Yi1ub2RlYnVnLnNvIAogCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktdGhyZWFkcHJldHR5cHJpbnQuYyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS10aHJlYWRwcmV0dHlwcmludC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYmEyZDYKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdGhyZWFk cHJldHR5cHJpbnQuYwpAQCAtMCwwICsxLDEyMiBAQAorLyogVGVzdCBjYXNl cyBmb3IgdGhyZWFkIG5hbWUgcHJpbnRlcnMuCisKKyAgIENvcHlyaWdodCAy MDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNp bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmbmRlZiBO Ul9USFJFQURTCisjZGVmaW5lIE5SX1RIUkVBRFMgNAorI2VuZGlmCisKK2lu dCB0aHJlYWRfY291bnQ7CisKK3B0aHJlYWRfbXV0ZXhfdCB0aHJlYWRfY291 bnRfbXV0ZXg7CisKK3B0aHJlYWRfY29uZF90IHRocmVhZF9jb3VudF9jb25k dmFyOworCit2b2lkCitpbmNyX3RocmVhZF9jb3VudCAodm9pZCkKK3sKKyAg cHRocmVhZF9tdXRleF9sb2NrICgmdGhyZWFkX2NvdW50X211dGV4KTsKKyAg Kyt0aHJlYWRfY291bnQ7CisgIGlmICh0aHJlYWRfY291bnQgPT0gTlJfVEhS RUFEUykKKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsICgmdGhyZWFkX2NvdW50 X2NvbmR2YXIpOworICBwdGhyZWFkX211dGV4X3VubG9jayAoJnRocmVhZF9j b3VudF9tdXRleCk7Cit9CisKK3ZvaWQKK2NvbmRfd2FpdCAocHRocmVhZF9j b25kX3QgKmNvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqbXV0KQoreworICBwdGhy ZWFkX211dGV4X2xvY2sgKG11dCk7CisgIHB0aHJlYWRfY29uZF93YWl0IChj b25kLCBtdXQpOworICBwdGhyZWFkX211dGV4X3VubG9jayAobXV0KTsKK30K Kwordm9pZAorbm9yZXR1cm4gKHZvaWQpCit7CisgIHB0aHJlYWRfbXV0ZXhf dCBtdXQ7CisgIHB0aHJlYWRfY29uZF90IGNvbmQ7CisKKyAgcHRocmVhZF9t dXRleF9pbml0ICgmbXV0LCBOVUxMKTsKKyAgcHRocmVhZF9jb25kX2luaXQg KCZjb25kLCBOVUxMKTsKKworICAvKiBXYWl0IGZvciBhIGNvbmRpdGlvbiB0 aGF0IHdpbGwgbmV2ZXIgYmUgc2lnbmFsZWQsIHNvIHdlIGVmZmVjdGl2ZWx5 CisgICAgIGJsb2NrIHRoZSB0aHJlYWQgaGVyZS4gICovCisgIGNvbmRfd2Fp dCAoJmNvbmQsICZtdXQpOworfQorCit2b2lkICoKK2ZvcmV2ZXJfcHRocmVh ZCAodm9pZCAqdW51c2VkKQoreworICBpbmNyX3RocmVhZF9jb3VudCAoKTsK KyAgbm9yZXR1cm4gKCk7Cit9CisKKy8qIFdhaXQgdW50aWwgYWxsIHRocmVh ZHMgYXJlIHJ1bm5pbmcuICAqLworCit2b2lkCit3YWl0X2FsbF90aHJlYWRz X3J1bm5pbmcgKHZvaWQpCit7CisgIHB0aHJlYWRfbXV0ZXhfbG9jayAoJnRo cmVhZF9jb3VudF9tdXRleCk7CisgIGlmICh0aHJlYWRfY291bnQgPT0gTlJf VEhSRUFEUykKKyAgICB7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAo JnRocmVhZF9jb3VudF9tdXRleCk7CisgICAgICByZXR1cm47CisgICAgfQor ICBwdGhyZWFkX2NvbmRfd2FpdCAoJnRocmVhZF9jb3VudF9jb25kdmFyLCAm dGhyZWFkX2NvdW50X211dGV4KTsKKyAgaWYgKHRocmVhZF9jb3VudCA9PSBO Ul9USFJFQURTKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr ICgmdGhyZWFkX2NvdW50X211dGV4KTsKKyAgICAgIHJldHVybjsKKyAgICB9 CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmdGhyZWFkX2NvdW50X211dGV4 KTsKKyAgcHJpbnRmICgiZmFpbGVkIHdhaXRpbmcgZm9yIGFsbCB0aHJlYWRz IHRvIHN0YXJ0XG4iKTsKKyAgYWJvcnQgKCk7Cit9CisKKy8qIENhbGxlZCB3 aGVuIGFsbCB0aHJlYWRzIGFyZSBydW5uaW5nLgorICAgRWFzeSBwbGFjZSBm b3IgYSBicmVha3BvaW50LiAgKi8KKwordm9pZAorYWxsX3RocmVhZHNfcnVu bmluZyAodm9pZCkKK3sKK30KKworaW50CittYWluICh2b2lkKQoreworICBw dGhyZWFkX3QgZm9yZXZlcltOUl9USFJFQURTXTsKKyAgaW50IGk7CisKKyAg cHRocmVhZF9tdXRleF9pbml0ICgmdGhyZWFkX2NvdW50X211dGV4LCBOVUxM KTsKKyAgcHRocmVhZF9jb25kX2luaXQgKCZ0aHJlYWRfY291bnRfY29uZHZh ciwgTlVMTCk7CisKKyAgZm9yIChpID0gMDsgaSA8IE5SX1RIUkVBRFM7ICsr aSkKKyAgICBwdGhyZWFkX2NyZWF0ZSAoJmZvcmV2ZXJbaV0sIE5VTEwsIGZv cmV2ZXJfcHRocmVhZCwgTlVMTCk7CisKKyAgd2FpdF9hbGxfdGhyZWFkc19y dW5uaW5nICgpOworICBhbGxfdGhyZWFkc19ydW5uaW5nICgpOworCisgIHJl dHVybiAwOworfQorCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktdGhyZWFkcHJldHR5cHJpbnQuZXhwIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LXRocmVhZHByZXR0eXByaW50LmV4cApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWUyNzU2Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXRocmVh ZHByZXR0eXByaW50LmV4cApAQCAtMCwwICsxLDg2IEBACisjIENvcHlyaWdo dCAoQykgMjAwNCwgMjAwNy0yMDA4LCAyMDEwLTIwMTIgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLAorIyBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMg VGVzdCB0aHJlYWQgbmFtZSBwcmV0dHkgcHJpbnRlciBmdW5jdGlvbmFsaXR5 LgorCitzZXQgTlJfVEhSRUFEUyA0CisKK2xvYWRfbGliIGdkYi1weXRob24u ZXhwCisKK3N0YW5kYXJkX3Rlc3RmaWxlCisKKyMgU3RhcnQgd2l0aCBhIGZy ZXNoIGdkYi4KK2NsZWFuX3Jlc3RhcnQgJHtiaW5maWxlfQorCitpZiB7IFtz a2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworaWYge1tnZGJf Y29tcGlsZV9wdGhyZWFkcyAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3NyY2Zp bGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSBbbGlzdCBkZWJ1ZyAiYWRk aXRpb25hbF9mbGFncz0tRE5SX1RIUkVBRFM9JE5SX1RIUkVBRFMiXV0gIT0g IiIgfSB7CisgICAgcmV0dXJuIC0xCit9CisKK2lmIHsgIVtydW50b19tYWlu XSB9IHsKKyAgICBmYWlsICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgICByZXR1 cm4gMAorfQorCitnZGJfdGVzdCAiYnJlYWsgYWxsX3RocmVhZHNfcnVubmlu ZyIgXAorICAgICAgICAgIkJyZWFrcG9pbnQgMiBhdCAuKjogZmlsZSAuKiR7 c3JjZmlsZX0sIGxpbmUgLioiIFwKKyAgICAgICAgICJicmVha3BvaW50IG9u IGFsbF90aHJlYWRzX3J1bm5pbmciCisKKyMgUnVuIHRoZSBwcm9ncmFtIGFu ZCBtYWtlIHN1cmUgR0RCIHJlcG9ydHMgdGhhdCB3ZSBzdG9wcGVkIGFmdGVy CisjIGhpdHRpbmcgYnJlYWtwb2ludCAyIGluIGFsbF90aHJlYWRzX3J1bm5p bmcoKS4KKworZ2RiX3Rlc3QgImNvbnRpbnVlIiBcCisgICAgICAgICAiLipC cmVha3BvaW50IDIsIGFsbF90aHJlYWRzX3J1bm5pbmcgKCkuKiIgXAorICAg ICAgICAgInJ1biB0byBhbGxfdGhyZWFkc19ydW5uaW5nIgorCitnZGJfcHlf dGVzdF9tdWx0aXBsZSAiZGVmaW5lIHNvbWUgdGhyZWFkIHByaW50ZXJzIiBc CisgICJweXRob24iICIiIFwKKyAgImZyb20gZ2RiLnRocmVhZHMgaW1wb3J0 IFRocmVhZE5hbWVQcmludGVyIiAiIiBcCisgICJjbGFzcyB0ZXN0X3RocmVh ZF9wcmludGVyIChUaHJlYWROYW1lUHJpbnRlcik6IiAiIiBcCisgICIgIGRl ZiBwcmVwYXJlKHNlbGYpOiIgIiIgXAorICAiICAgIHBhc3MiICIiIFwKKyAg IiAgZGVmIHByaW50X3RocmVhZChzZWxmLCB0aHJlYWQpOiIgIiIgXAorICAi ICAgIHJldHVybiBcInRlc3RfbmFtZVwiICsgc3RyKHRocmVhZC5wdGlkXFsx XF0pIiAiIiBcCisgICJ0ZXN0X3RocmVhZF9wcmludGVyKCkuYWRkX3ByaW50 ZXIoJ3Rlc3RfcHJpbnRlcicpIiAiIiBcCisgICJjbGFzcyBiYWRfbm9fbWV0 aG9kcyhUaHJlYWROYW1lUHJpbnRlcik6IiAiIiBcCisgICIgIHBhc3MiICIi IFwKKyAgImNsYXNzIGJhZF9ub19wcmludF90aHJlYWQoVGhyZWFkTmFtZVBy aW50ZXIpOiIgIiIgXAorICAiICBkZWYgcHJlcGFyZShzZWxmKTogIiAiIiBc CisgICIgICAgcGFzcyIgIiIgXAorICAiZW5kIiAiIgorCitnZGJfdGVzdCAi aW5mbyB0aHJlYWQtbmFtZS1wcmludGVyIiBcCisgICAgICAgICAiVGhyZWFk IG5hbWUgcHJldHR5LXByaW50ZXJzOlxyXG5cXFxbeFxcXF0gdGVzdF9wcmlu dGVyIiBcCisgICAgICAgICAicHJpbnQgcmVnaXN0ZXJlZCB0aHJlYWQgbmFt ZSBwcmludGVycyIKKworIyBDaGVjayB3ZSBhcmUgY29ycmVjdGx5IHJlamVj dGluZyBiYWQgcHJpbnRlcnMuCisjIFRoZXNlICJwcmludGVycyIgd2VyZSBk ZWZpbmllZCBpbiB0aGUgImRlZmluZSBzb21lIHRocmVhZCBwcmludGVycyIg dGVzdCBhYm92ZS4KK2dkYl90ZXN0ICJweXRob24gYmFkX25vX21ldGhvZHMo KS5hZGRfcHJpbnRlcignYmFkIHByaW50ZXInKSIgXAorICAgICAgICAgIi4q VHlwZUVycm9yOiBwcmludGVyIG1pc3NpbmcgYXR0cmlidXRlOiBwcmVwYXJl LioiIFwKKyAgICAgICAgICJDYXRjaCBiYWQgcHJpbnRlcnMgLSBtaXNzaW5n IGF0dHJpYnV0ZSBwcmVwYXJlIgorCitnZGJfdGVzdCAicHl0aG9uIGJhZF9u b19wcmludF90aHJlYWQoKS5hZGRfcHJpbnRlcignYmFkIHByaW50ZXInKSIg XAorICAgICAgICAgIi4qVHlwZUVycm9yOiBwcmludGVyIG1pc3NpbmcgYXR0 cmlidXRlOiBwcmludF90aHJlYWQuKiIgXAorICAgICAgICAgIkNhdGNoIGJh ZCBwcmludGVycyAtIG1pc3NpbmcgYXR0cmlidXRlIHByaW50X3RocmVhZCIK KworCisjIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSB0aHJlYWQgbGlzdCBo YXMgcHJpbnRlZCBhbGwgdGhlIHRocmVhZCBuYW1lcyB0byBpbmNsdWRlIHRo ZSBwdGlkIGFzIG91cgorIyB0ZXN0IHByaW50ZXIgd2FzIGRlZmluZWQuCisj IE5vdGU6IHRoZSBcXDIgYmFja3JlZmVyZW5jZSBpcyAyIGJlY2F1c2UgZ2Ri X3Rlc3QgY29udGFpbnMgdGhlIGZpcnN0IG1hdGNoaW5nIGdyb3VwCitnZGJf dGVzdCAiaW5mbyB0aHJlYWRzIiBcCisgICAgICAgICAiICtJZCArVGFyZ2V0 ICtJZCArRnJhbWUoPzouKlRocmVhZCAweFxbQS1GYS1mMC05XF0rIFxcXChM V1AgKFxcXGQrKVxcXCkgXCJ0ZXN0X25hbWVcXDIuKikrIiBcCisgICAgICAg ICAidGhyZWFkIG5hbWUgcHJpbnRlciB0ZXN0IgpkaWZmIC0tZ2l0IGEvZ2Ri L3RocmVhZC5jIGIvZ2RiL3RocmVhZC5jCmluZGV4IDdlOGVlYzUuLmZhZTkw MWEgMTAwNjQ0Ci0tLSBhL2dkYi90aHJlYWQuYworKysgYi9nZGIvdGhyZWFk LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJyZWdjYWNoZS5oIgog I2luY2x1ZGUgImdkYi5oIgogI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIKKyNp bmNsdWRlICJweXRob24vcHl0aG9uLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5o PgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtNzc0LDYgKzc3NSwxMCBA QCBwcmludF90aHJlYWRfaW5mbyAoc3RydWN0IHVpX291dCAqdWlvdXQsIGNo YXIgKnJlcXVlc3RlZF90aHJlYWRzLCBpbnQgcGlkKQogICAvKiBXZSdsbCBi ZSBzd2l0Y2hpbmcgdGhyZWFkcyB0ZW1wb3JhcmlseS4gICovCiAgIG9sZF9j aGFpbiA9IG1ha2VfY2xlYW51cF9yZXN0b3JlX2N1cnJlbnRfdGhyZWFkICgp OwogCisgIC8qIFByZXBhcmUgdGhlIGxpc3Qgb2YgdGhyZWFkIHByaW50ZXJz LiAgKi8KKyAgcHJlcGFyZV90aHJlYWRfbmFtZV9wcmludGVycyAoKTsKKyAg bWFrZV9jbGVhbnVwIChjbGVhbnVwX3RocmVhZF9uYW1lX3ByZXR0eV9wcmlu dGVycywgTlVMTCk7CisKICAgLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxp dHksIHdlIG1ha2UgYSBsaXN0IGZvciBNSS4gIEEgdGFibGUgaXMKICAgICAg cHJlZmVyYWJsZSBmb3IgdGhlIENMSSwgdGhvdWdoLCBiZWNhdXNlIGl0IHNo b3dzIHRhYmxlCiAgICAgIGhlYWRlcnMuICAqLwpAQCAtODY3LDcgKzg3Miwx NiBAQCBwcmludF90aHJlYWRfaW5mbyAoc3RydWN0IHVpX291dCAqdWlvdXQs IGNoYXIgKnJlcXVlc3RlZF90aHJlYWRzLCBpbnQgcGlkKQogCiAgICAgICB0 YXJnZXRfaWQgPSB0YXJnZXRfcGlkX3RvX3N0ciAodHAtPnB0aWQpOwogICAg ICAgZXh0cmFfaW5mbyA9IHRhcmdldF9leHRyYV90aHJlYWRfaW5mbyAodHAp OwotICAgICAgbmFtZSA9IHRwLT5uYW1lID8gdHAtPm5hbWUgOiB0YXJnZXRf dGhyZWFkX25hbWUgKHRwKTsKKworICAgICAgaWYgKHRwLT5uYW1lICE9IE5V TEwpCisJbmFtZSA9IHRwLT5uYW1lOworICAgICAgZWxzZQorCXsKKwkgIC8q IFBvdGVudGlhbGx5IHVwZGF0ZSB0cC0+bmFtZSB3aXRoIGEgcHJldHR5IHBy aW50ZXIuICAqLworCSAgYXBwbHlfdGhyZWFkX25hbWVfcHJldHR5X3ByaW50 ZXJzICh0cCk7CisJICBpZiAodHAtPm5hbWUgIT0gTlVMTCkKKwkgICAgbmFt ZSA9IHRwLT5uYW1lOworCX0KIAogICAgICAgaWYgKHVpX291dF9pc19taV9s aWtlX3AgKHVpb3V0KSkKIAl7CkBAIC0xNDY5LDYgKzE0ODMsMTMgQEAgX2lu aXRpYWxpemVfdGhyZWFkICh2b2lkKQogVXNhZ2U6IGluZm8gdGhyZWFkcyBb SURdLi4uXG5cCiBPcHRpb25hbCBhcmd1bWVudHMgYXJlIHRocmVhZCBJRHMg d2l0aCBzcGFjZXMgYmV0d2Vlbi5cblwKIElmIG5vIGFyZ3VtZW50cywgYWxs IHRocmVhZHMgYXJlIGRpc3BsYXllZC4iKSk7CisgIC8qIEtlZXAgdGhlc2Ug YWJicmV2aWF0aW9ucyBvZiAiaW5mbyB0aHJlYWRzIiwgImluZm8gdGhyZWFk LW5hbWUtcHJpbnRlciIKKyAgICAgbWFrZXMgdGhlbSBhbWJpZ291cyBvdGhl cndpc2UuICAqLworICBhZGRfaW5mb19hbGlhcyAoInRoIiwgInRocmVhZHMi ICwgMSk7CisgIGFkZF9pbmZvX2FsaWFzICgidGhyIiwgInRocmVhZHMiICwg MSk7CisgIGFkZF9pbmZvX2FsaWFzICgidGhyZSIsICJ0aHJlYWRzIiAsIDEp OworICBhZGRfaW5mb19hbGlhcyAoInRocmVhIiwgInRocmVhZHMiICwgMSk7 CisgIGFkZF9pbmZvX2FsaWFzICgidGhyZWFkIiwgInRocmVhZHMiICwgMSk7 CiAKICAgYWRkX3ByZWZpeF9jbWQgKCJ0aHJlYWQiLCBjbGFzc19ydW4sIHRo cmVhZF9jb21tYW5kLCBfKCJcCiBVc2UgdGhpcyBjb21tYW5kIHRvIHN3aXRj aCBiZXR3ZWVuIHRocmVhZHMuXG5cCi0tIAoxLjcuNy4zCgo= --14dae934053950a6ea04c80a2039--