From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 59094 invoked by alias); 28 Mar 2015 01:10:39 -0000 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 Received: (qmail 59057 invoked by uid 89); 28 Mar 2015 01:10:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ie0-f170.google.com Received: from mail-ie0-f170.google.com (HELO mail-ie0-f170.google.com) (209.85.223.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sat, 28 Mar 2015 01:10:27 +0000 Received: by ierf6 with SMTP id f6so16045020ier.2 for ; Fri, 27 Mar 2015 18:10:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=6BTt/xjZEUkaBSnix9SfM3Vrn7qs9Q5kRORS9rmxTbc=; b=OiO6V1fkTVraPzjnW3t6K/JoYQ6PC/7UikDIdX0s/hhHScLtDAivQWm7OdcyzdLuyf OphKs8TCqAXUhmLTWCqUZ9y6Qm574e0u9hyOchGvyrNinyIYk1vuBtTzfLqZx2F1O4zr iL0D4YAk8sMYsD1fGw0/dnr1ZV4J/RlzVWhSkRZTNM03qs24rheV3kIUil7Bi/tLRh5f 4Qf3uwk2rVDlmUOdVa3jWbBeSIoP736sWDCAykzc9oGz/WaLkL4lUWJHsu+Be2yLKR7q EDJk6K6NZrcLy1X0XgqoMimeRcqDJyZxHvo+37+Gs3INnMpp0oCCA78+Qgmp7gdJ4F6U u+bQ== X-Gm-Message-State: ALoCoQnoFgtRlzTGlry8OfxgQzxmMlOSu2HZIYsmfSadcXyWo414JNhXRYW8/y1D7Pn+95PHdGxo MIME-Version: 1.0 X-Received: by 10.42.84.14 with SMTP id j14mr4023643icl.66.1427505024988; Fri, 27 Mar 2015 18:10:24 -0700 (PDT) Received: by 10.64.98.103 with HTTP; Fri, 27 Mar 2015 18:10:24 -0700 (PDT) In-Reply-To: <21781.55769.949230.79805@ruffy2.mtv.corp.google.com> References: <21714.40641.510825.30998@ruffy2.mtv.corp.google.com> <54E71694.1080304@redhat.com> <87ioei31uj.fsf@igalia.com> <87d24p19tt.fsf@igalia.com> <54FD7DAA.7010603@redhat.com> <87twxrncld.fsf@igalia.com> <87ioe1dvu2.fsf@igalia.com> <87sid4atms.fsf@igalia.com> <87r3smado6.fsf@igalia.com> <21776.28787.615626.171251@ruffy2.mtv.corp.google.com> <21781.55769.949230.79805@ruffy2.mtv.corp.google.com> Date: Sat, 28 Mar 2015 01:10:00 -0000 Message-ID: Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python From: Alexander Smundak To: Doug Evans Cc: Andy Wingo , gdb-patches Content-Type: multipart/mixed; boundary=90e6ba5bbb05ee88bf05124ee9e9 X-SW-Source: 2015-03/txt/msg00929.txt.bz2 --90e6ba5bbb05ee88bf05124ee9e9 Content-Type: text/plain; charset=UTF-8 Content-length: 1979 Addressed eliz@ and dje@ comments. gdb/ChangeLog 2015-03-28 Sasha Smundak * Makefile.in (SUBDIR_PYTHON_OBJS): Add py-unwind.o. (SUBDIR_PYTHON_SRCS): Add py-unwind.c. (py-unwind.o): New recipe. * NEWS: mention Python frame unwinding. * data-directory/Makefile.in (PYTHON_FILE_LIST): Add gdb/unwinder.py and gdb/command/unwinder.py * doc/python.texi (Writing a Frame Unwinder in Python): Add section. * python/lib/gdb/__init__.py (packages): Add frame_unwinders list. (execute_unwinders): New function. * python/lib/gdb/command/unwinders.py: New file. * python/lib/gdb/unwinder.py: New file. * python/py-objfile.c (objfile_object): Add frame_unwinders field. (objfpy_dealloc): Decrement frame_unwinders reference count. (objfpy_initialize): Create frame_unwinders list. (objfpy_get_frame_unwinders): New function. (objfpy_set_frame_unwinders): Ditto. (objfile_getset): Add frame_unwinders attribute to Objfile. * python/py-progspace.c (pspace_object): Add frame_unwinders field. (pspy_dealloc): Decrement frame_unwinders reference count. (pspy_initialize): Create frame_unwinders list. (pspy_get_frame_unwinders): New function. (pspy_set_frame_unwinders): Ditto. (pspy_getset): Add frame_unwinders attribute to gdb.Progspace. * python/py-unwind.c: New file. * python/python-internal.h (pspy_get_name_unwinders): New prototype. (objpy_get_frame_unwinders): New prototype. (gdbpy_initialize_unwind): New prototype. * python/python.c (gdbpy_apply_type_printers): Call gdbpy_initialize_unwind. gdb/testsuite/ChangeLog 2015-03-28 Sasha Smundak * gdb.python/py-unwind-maint.c: New file. * gdb.python/py-unwind-maint.exp: New test. * gdb.python/py-unwind-maint.py: New file. * gdb.python/py-unwind.c: New file. * gdb.python/py-unwind.exp: New test. * gdb.python/py-unwind.py: New test. --90e6ba5bbb05ee88bf05124ee9e9 Content-Type: text/plain; charset=US-ASCII; name="patch10.diff" Content-Disposition: attachment; filename="patch10.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i7sbmfxr0 Content-length: 91460 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCBkYmFjZTJkLi4wYmQzNzM4IDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zOTgsNiArMzk4 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktc3ltdGFiLm8gXAog CXB5LXRocmVhZGV2ZW50Lm8gXAogCXB5LXR5cGUubyBcCisJcHktdW53aW5k Lm8gXAogCXB5LXV0aWxzLm8gXAogCXB5LXZhbHVlLm8gXAogCXB5LXZhcm9i ai5vCkBAIC00MzcsNiArNDM4LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0g XAogCXB5dGhvbi9weS1zeW10YWIuYyBcCiAJcHl0aG9uL3B5LXRocmVhZGV2 ZW50LmMgXAogCXB5dGhvbi9weS10eXBlLmMgXAorCXB5dGhvbi9weS11bndp bmQuYyBcCiAJcHl0aG9uL3B5LXV0aWxzLmMgXAogCXB5dGhvbi9weS12YWx1 ZS5jIFwKIAlweXRob24vcHktdmFyb2JqLmMKQEAgLTI2MjIsNiArMjYyNCwx MCBAQCBweS10eXBlLm86ICQoc3JjZGlyKS9weXRob24vcHktdHlwZS5jCiAJ JChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24v cHktdHlwZS5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktdW53aW5kLm86ICQo c3JjZGlyKS9weXRob24vcHktdW53aW5kLmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS11bndpbmQuYworCSQo UE9TVENPTVBJTEUpCisKIHB5LXV0aWxzLm86ICQoc3JjZGlyKS9weXRob24v cHktdXRpbHMuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LXV0aWxzLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZm IC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCBiZGE0YTM1Li5h Yzk5NGQ5IDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpA QCAtMTIsNiArMTIsNyBAQAogICAqKiBnZGIuT2JqZmlsZSBvYmplY3RzIGhh dmUgYSBuZXcgYXR0cmlidXRlICJ1c2VybmFtZSIsCiAgICAgIHdoaWNoIGlz IHRoZSBuYW1lIG9mIHRoZSBvYmpmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUg dXNlciwKICAgICAgd2l0aG91dCwgZm9yIGV4YW1wbGUsIHJlc29sdmluZyBz eW1saW5rcy4KKyAgKiogWW91IGNhbiBub3cgd3JpdGUgZnJhbWUgdW53aW5k ZXJzIGluIFB5dGhvbi4KIAogKiBOZXcgY29tbWFuZHMKIApkaWZmIC0tZ2l0 IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIGIvZ2RiL2RhdGEt ZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IGMwMWI4NmQuLjMwY2ZkMTcg MTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor KysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAgLTYyLDEx ICs2MiwxMyBAQCBQWVRIT05fRklMRV9MSVNUID0gXAogCWdkYi9GcmFtZURl Y29yYXRvci5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAlnZGIvcHJpbnRpbmcu cHkgXAorCWdkYi91bndpbmRlci5weSBcCiAJZ2RiL3Byb21wdC5weSBcCiAJ Z2RiL3htZXRob2QucHkgXAogCWdkYi9jb21tYW5kL19faW5pdF9fLnB5IFwK IAlnZGIvY29tbWFuZC94bWV0aG9kcy5weSBcCiAJZ2RiL2NvbW1hbmQvZnJh bWVfZmlsdGVycy5weSBcCisJZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5IFwK IAlnZGIvY29tbWFuZC90eXBlX3ByaW50ZXJzLnB5IFwKIAlnZGIvY29tbWFu ZC9wcmV0dHlfcHJpbnRlcnMucHkgXAogCWdkYi9jb21tYW5kL3Byb21wdC5w eSBcCmRpZmYgLS1naXQgYS9nZGIvZG9jL3B5dGhvbi50ZXhpIGIvZ2RiL2Rv Yy9weXRob24udGV4aQppbmRleCBkNzI1ZWIwLi42YjE4NzhlIDEwMDY0NAot LS0gYS9nZGIvZG9jL3B5dGhvbi50ZXhpCisrKyBiL2dkYi9kb2MvcHl0aG9u LnRleGkKQEAgLTE0NCw2ICsxNDQsNyBAQCBvcHRpb25hbCBhcmd1bWVudHMg d2hpbGUgc2tpcHBpbmcgb3RoZXJzLiAgRXhhbXBsZToKICogRnJhbWUgRmls dGVyIEFQSTo6ICAgICAgICAgICAgRmlsdGVyaW5nIEZyYW1lcy4KICogRnJh bWUgRGVjb3JhdG9yIEFQSTo6ICAgICAgICAgRGVjb3JhdGluZyBGcmFtZXMu CiAqIFdyaXRpbmcgYSBGcmFtZSBGaWx0ZXI6OiAgICAgIFdyaXRpbmcgYSBG cmFtZSBGaWx0ZXIuCisqIFVud2luZGluZyBGcmFtZXMgaW4gUHl0aG9uOjog IFdyaXRpbmcgZnJhbWUgdW53aW5kZXIuCiAqIFhtZXRob2RzIEluIFB5dGhv bjo6ICAgICAgICAgIEFkZGluZyBhbmQgcmVwbGFjaW5nIG1ldGhvZHMgb2Yg QysrIGNsYXNzZXMuCiAqIFhtZXRob2QgQVBJOjogICAgICAgICAgICAgICAg IFhtZXRob2QgdHlwZXMuCiAqIFdyaXRpbmcgYW4gWG1ldGhvZDo6ICAgICAg ICAgIFdyaXRpbmcgYW4geG1ldGhvZC4KQEAgLTIxNzgsNiArMjE3OSwxNDgg QEAgcHJpbnRlZCBoaWVyYXJjaGljYWxseS4gIEFub3RoZXIgYXBwcm9hY2gg d291bGQgYmUgdG8gY29tYmluZSB0aGUKIG1hcmtlciBpbiB0aGUgaW5saW5l ZCBmcmFtZSwgYW5kIGFsc28gc2hvdyB0aGUgaGllcmFyY2hpY2FsCiByZWxh dGlvbnNoaXAuCiAKK0Bub2RlIFVud2luZGluZyBGcmFtZXMgaW4gUHl0aG9u CitAc3Vic3Vic2VjdGlvbiBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbgor QGNpbmRleCB1bndpbmRpbmcgZnJhbWVzIGluIFB5dGhvbgorCitJbiBAdmFs dWV7R0RCTn0gdGVybWlub2xvZ3kgYGB1bndpbmRpbmcnJyBpcyB0aGUgcHJv Y2VzcyBvZiBmaW5kaW5nCit0aGUgcHJldmlvdXMgZnJhbWUgKHRoYXQgaXMs IGNhbGxlcidzKSBmcm9tIHRoZSBjdXJyZW50IG9uZS4gIEFuCit1bndpbmRl ciBoYXMgdGhyZWUgbWV0aG9kcy4gIFRoZSBmaXJzdCBvbmUgY2hlY2tzIGlm IGl0IGNhbiBoYW5kbGUKK2dpdmVuIGZyYW1lIChgYHNuaWZmJycgaXQpLiAg Rm9yIHRoZSBmcmFtZXMgaXQgY2FuIHNuaWZmIGFuIHVud2luZGVyCitwcm92 aWRlcyB0d28gYWRkaXRpb25hbCBtZXRob2RzOiBpdCBjYW4gcmV0dXJuIGZy YW1lJ3MgSUQsIGFuZCBpdCBjYW4KK2ZldGNoIHJlZ2lzdGVycyBmcm9tIHRo ZSBwcmV2aW91cyBmcmFtZS4gIEEgcnVubmluZyBAdmFsdWV7R0RCTn0KK21h bnRhaW5zIGEgbGlzdCBvZiB0aGUgdW53aW5kZXJzIGFuZCBjYWxscyBlYWNo IHVud2luZGVyJ3Mgc25pZmZlciBpbgordHVybiB1bnRpbCBpdCBmaW5kcyB0 aGUgb25lIHRoYXQgcmVjb2duaXplcyB0aGUgY3VycmVudCBmcmFtZS4gIFRo ZXJlCitpcyBhbiBBUEkgdG8gcmVnaXN0ZXIgYW4gdW53aW5kZXIuCisKK1Ro ZSB1bndpbmRlcnMgdGhhdCBjb21lIHdpdGggQHZhbHVle0dEQk59IGhhbmRs ZSBzdGFuZGFyZCBmcmFtZXMuCitIb3dldmVyLCBtaXhlZCBsYW5ndWFnZSBh cHBsaWNhdGlvbnMgKGZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbgorcnVu bmluZyBKYXZhIFZpcnR1YWwgTWFjaGluZSkgc29tZXRpbWVzIHVzZSBmcmFt ZSBsYXlvdXRzIHRoYXQgY2Fubm90CitiZSBoYW5kbGVkIGJ5IHRoZSBAdmFs dWV7R0RCTn0gdW53aW5kZXJzLiAgWW91IGNhbiB3cml0ZSBQeXRob24gY29k ZQordGhhdCBjYW4gaGFuZGxlIHN1Y2ggY3VzdG9tIGZyYW1lcy4KKworWW91 IGltcGxlbWVudCBhIGZyYW1lIHVud2luZGVyIGluIFB5dGhvbiBhcyBhIGNs YXNzIHdpdGggd2hpY2ggaGFzIHR3bworYXR0cmlidXRlcywgQGNvZGV7bmFt ZX0gYW5kIEBjb2Rle2VuYWJsZWR9LCB3aXRoIG9idmlvdXMgbWVhbmluZ3Ms IGFuZAorYSBzaW5nbGUgbWV0aG9kIEBjb2Rle19fY2FsbF9ffSwgd2hpY2gg ZXhhbWluZXMgYSBnaXZlbiBmcmFtZSBhbmQKK3JldHVybnMgYW4gb2JqZWN0 IChhbiBpbnN0YW5jZSBvZiBAY29kZXtnZGIuVW53aW5kSW5mbyBjbGFzcyl9 CitkZXNjcmliaW5nIGl0LiAgSWYgYW4gdW53aW5kZXIgZG9lcyBub3QgcmVj b2duaXplIGEgZnJhbWUsIGl0IHNob3VsZAorcmV0dXJuIEBjb2Rle05vbmV9 LiAgVGhlIGNvZGUgaW4gQHZhbHVle0dEQk59IHRoYXQgZW5hYmxlcyB3cml0 aW5nCit1bndpbmRlcnMgaW4gUHl0aG9uIHVzZXMgdGhpcyBvYmplY3QgdG8g cmV0dXJuIGZyYW1lJ3MgSUQgYW5kIHByZXZpb3VzCitmcmFtZSByZWdpc3Rl cnMgd2hlbiBAdmFsdWV7R0RCTn0gY29yZSBhc2tzIGZvciB0aGVtLgorCitA c3ViaGVhZGluZyBVbndpbmRlciBJbnB1dAorCitBbiBvYmplY3QgcGFzc2Vk IHRvIGFuIHVud2luZGVyIChhIEBjb2Rle2dkYi5QZW5kaW5nRnJhbWV9IGlu c3RhbmNlKQorcHJvdmlkZXMgYSBtZXRob2QgdG8gcmVhZCBmcmFtZSdzIHJl Z2lzdGVyczoKKworQGRlZnVuIFBlbmRpbmdGcmFtZS5yZWFkX3JlZ2lzdGVy IChyZWcpCitUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0 aGUgcmVnaXN0ZXIgQHZhcntyZWdufSBpbiB0aGUKK2ZyYW1lIGFzIGEgQGNv ZGV7Z2RiLlZhbHVlfSBvYmplY3QuICBAdmFye3JlZ30gY2FuIGJlIGVpdGhl ciBhCityZWdpc3RlciBudW1iZXIgb3IgYSByZWdpc3RlciBuYW1lOyB0aGUg dmFsdWVzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4KK1RoZXkgYXJlIHVzdWFs bHkgZm91bmQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKK0BmaWxle0B2YXJ7cGxh dGZvcm19LXRkZXAuaH0gZmlsZSBpbiB0aGUgQHZhbHVle0dEQk59IHNvdXJj ZSB0cmVlLgorQGVuZCBkZWZ1bgorCitJdCBhbHNvIHByb3ZpZGVzIGEgZmFj dG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgQGNvZGV7Z2RiLlVud2luZEluZm99 CitpbnN0YW5jZSB0byBiZSByZXR1cm5lZCB0byBAdmFsdWV7R0RCTn06CisK K0BkZWZ1biBQZW5kaW5nRnJhbWUuY3JlYXRlX3Vud2luZF9pbmZvIChmcmFt ZV9pZCkKK1JldHVybnMgYSBuZXcgQGNvZGV7Z2RiLlVud2luZEluZm99IGlu c3RhbmNlIGlkZW50aWZpZWQgYnkgZ2l2ZW4KK0B2YXJ7ZnJhbWVfaWR9LiAg VGhlIGFyZ3VtZW50IGlzIHVzZWQgdG8gYnVpbGQgQHZhbHVle0dEQk59J3Mg ZnJhbWUgSUQKK3VzaW5nIG9uZSBvZiBmdW5jdGlvbnMgcHJvdmlkZWQgYnkg QHZhbHVle0dEQk59LiAgQHZhcntmcmFtZV9pZH0ncyBhdHRyaWJ1dGVzCitk ZXRlcm1pbmUgd2hpY2ggZnVuY3Rpb24gd2lsbCBiZSB1c2VkLCBhcyBmb2xs b3dzOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIHNwLCBwYywgc3BlY2lhbAor QGNvZGV7ZnJhbWVfaWRfYnVpbGRfc3BlY2lhbCAoQHZhcntmcmFtZV9pZH0u c3AsIEB2YXJ7ZnJhbWVfaWR9LnBjLCBAdmFye2ZyYW1lX2lkfS5zcGVjaWFs KX0KKworQGl0ZW0gc3AsIHBjCitAY29kZXtmcmFtZV9pZF9idWlsZCAoQHZh cntmcmFtZV9pZH0uc3AsIEB2YXJ7ZnJhbWVfaWR9LnBjKX0KKworVGhpcyBp cyB0aGUgbW9zdCBjb21tb24gY2FzZS4KKworQGl0ZW0gc3AKK0Bjb2Rle2Zy YW1lX2lkX2J1aWxkX3dpbGQgKEB2YXJ7ZnJhbWVfaWR9LnNwKX0KK0BlbmQg dGFibGUKK1RoZSBhdHRyaWJ1dGUgdmFsdWVzIHNob3VsZCBiZSBAY29kZXtn ZGIuVmFsdWV9CisKK0BlbmQgZGVmdW4KKworQHN1YmhlYWRpbmcgVW53aW5k ZXIgT3V0cHV0OiBVbndpbmRJbmZvCisKK0EgQGNvZGV7Z2RiLlVud2luZElu Zm99IG9iamVjdCBjYW4gYmUgY29uc3RydWN0ZWQgYnkgb25lIG9mIHRoZQor bWV0aG9kcyBkZXNjcmliZWQgYWJvdmUuICBVc2UgdGhlIGZvbGxvd2luZyBt ZXRob2QgdG8gc2V0IHRoZSBjYWxsZXIKK2ZyYW1lJ3MgcmVnaXN0ZXJzOgor CitAZGVmdW4gZ2RiLlVud2luZEluZm8uYWRkX3NhdmVkX3JlZ2lzdGVyIChy ZWcsIHZhbHVlKQorQHZhcntyZWd9IGlkZW50aWZpZXMgdGhlIHJlZ2lzdGVy LiAgSXQgY2FuIGJlIGEgbnVtYmVyIG9yIGEgbmFtZSwganVzdAorYXMgZm9y IHRoZSBAY29kZXtQZW5kaW5nRnJhbWUucmVhZF9yZWdpc3Rlcn0gbWV0aG9k IGFib3ZlLgorQHZhcnt2YWx1ZX0gaXMgYSByZWdpc3RlciB2YWx1ZSAoYSBA Y29kZXtnZGIuVmFsdWV9IG9iamVjdCkuCitAZW5kIGRlZnVuCisKK0BzdWJo ZWFkaW5nIFVud2luZGVyIFNrZWxldG9uIENvZGUKKworQHZhbHVle0dEQk59 IGNvbWVzIHdpdGggdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBiYXNlIEBj b2Rle1Vud2luZGVyfQorY2xhc3MuICBEZXJpdmUgeW91ciB1bndpbmRlciBj bGFzcyBmcm9tIGl0IGFuZCBzdHJ1Y3R1cmUgdGhlIGNvZGUgYXMKK2ZvbGxv d3M6CisKK0BzbWFsbGV4YW1wbGUKK2Zyb20gZ2RiLnVud2luZGVycyBpbXBv cnQgVW53aW5kZXIKKworY2xhc3MgRnJhbWVJZChvYmplY3QpOgorICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBzcCwgcGMpOgorICAgICAgICBzZWxmLnNwID0g c3AKKyAgICAgICAgc2VsZi5wYyA9IHBjCisKKworY2xhc3MgTXlVbndpbmRl cihVbndpbmRlcik6CisgICAgZGVmIF9faW5pdF9fKC4uLi4pOgorICAgICAg ICBzdXBlKE15VW53aW5kZXIsIHNlbGYpLl9faW5pdF9fXyg8ZXhwZWN0cyB1 bndpbmRlciBuYW1lIGFyZ3VtZW50PikKKworICAgIGRlZiBfX2NhbGxfXyhw ZW5kaW5nX2ZyYW1lKToKKyAgICAgICAgaWYgbm90IDx3ZSByZWNvZ25pemUg ZnJhbWU+OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBD cmVhdGUgVW53aW5kSW5mby4gIFVzdWFsbHkgdGhlIGZyYW1lIGlzIGlkZW50 aWZpZWQgYnkgdGhlIHN0YWNrIAorICAgICAgICAjIHBvaW50ZXIgYW5kIHRo ZSBwcm9ncmFtIGNvdW50ZXIuCisgICAgICAgIHNwID0gcGVuZGluZ19mcmFt ZS5yZWFkX3JlZ2lzdGVyKDxTUCBudW1iZXI+KQorICAgICAgICBwYyA9IHBl bmRpbmdfZnJhbWUucmVhZF9yZWdpc3Rlcig8UEMgbnVtYmVyPikKKyAgICAg ICAgdW53aW5kX2luZm8gPSBwZW5kaW5nX2ZyYW1lLmNyZWF0ZV91bndpbmRf aW5mbyhGcmFtZUlkKHNwLCBwYykpCisKKyAgICAgICAgIyBGaW5kIHRoZSB2 YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBpbiB0aGUgY2FsbGVyJ3MgZnJhbWUg YW5kIAorICAgICAgICAjIHNhdmUgdGhlbSBpbiB0aGUgcmVzdWx0OgorICAg ICAgICB1bndpbmRfaW5mby5hZGRfc2F2ZWRfcmVnaXN0ZXIoPHJlZ2lzdGVy PiwgPHZhbHVlPikKKyAgICAgICAgLi4uLgorCisgICAgICAgICMgUmV0dXJu IHRoZSByZXN1bHQ6CisgICAgICAgIHJldHVybiB1bndpbmRfaW5zdGFuY2UK KworQGVuZCBzbWFsbGV4YW1wbGUKKworQHN1YmhlYWRpbmcgUmVnaXN0ZXJp bmcgYSBVbndpbmRlcgorCitBbiBvYmplY3QgZmlsZSwgYSBwcm9ncmFtIHNw YWNlLCBhbmQgdGhlIEB2YWx1ZXtHREJOfSBwcm9wZXIgY2FuIGhhdmUKK3Vu d2luZGVycyByZWdpc3RlcmVkIHdpdGggaXQuCisKK1RoZSBAY29kZXtnZGIu dW53aW5kZXJzfSBtb2R1bGUgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uIHRvIHJl Z2lzdGVyIGEKK3Vud2luZGVyOgorCitAZGVmdW4gZ2RiLnVud2luZGVyLnJl Z2lzdGVyX3Vud2luZGVyIChsb2N1cywgdW53aW5kZXIsIHJlcGxhY2U9RmFs c2UpCitAdmFye2xvY3VzfSBpcyBzcGVjaWZpZXMgYW4gb2JqZWN0IGZpbGUg b3IgYSBwcm9ncmFtIHNwYWNlIHRvIHdoaWNoCitAdmFye3Vud2luZGVyfSBp cyBhZGRlZC4gIFBhc3NpbmcgQGNvZGV7Tm9uZX0gb3IgQGNvZGV7Z2RifSBh ZGRzCitAdmFye3Vud2luZGVyfSB0byB0aGUgQHZhbHVle0dEQk59J3MgZ2xv YmFsIHVud2luZGVyIGxpc3QuICBUaGUgbmV3bHkKK2FkZGVkIEB2YXJ7dW53 aW5kZXJ9IHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdW53aW5k ZXIgZnJvbSB0aGUKK3NhbWUgbG9jdXMuICBUd28gdW53aW5kZXJzIGluIHRo ZSBzYW1lIGxvY3VzIGNhbm5vdCBoYXZlIHRoZSBzYW1lCituYW1lLiAgQW4g YXR0ZW1wdCB0byBhZGQgYSB1bndpbmRlciB3aXRoIGFscmVhZHkgZXhpc3Rp bmcgbmFtZSByYWlzZXMKK2FuIGV4Y2VwdGlvbiB1bmxlc3MgQHZhcntyZXBs YWNlfSBpcyBAY29kZXtUcnVlfSwgaW4gd2hpY2ggY2FzZSB0aGUKK29sZCB1 bndpbmRlciBpcyBkZWxldGVkLgorQGVuZCBkZWZ1bgorCitAc3ViaGVhZGlu ZyBVbndpbmRlciBQcmVjZWRlbmNlCisKK0B2YWx1ZXtHREJOfSBmaXJzdCBj YWxscyB0aGUgdW53aW5kZXJzIGZyb20gYWxsIHRoZSBvYmplY3QgZmlsZXMg aW4gbm8KK3BhcnRpY3VsYXIgb3JkZXIsIHRoZW4gdGhlIHVud2luZGVycyBm cm9tIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UsCithbmQgZmluYWxseSB0 aGUgdW53aW5kZXJzIGZyb20gQHZhbHVle0dEQk59LgorCiBAbm9kZSBYbWV0 aG9kcyBJbiBQeXRob24KIEBzdWJzdWJzZWN0aW9uIFhtZXRob2RzIEluIFB5 dGhvbgogQGNpbmRleCB4bWV0aG9kcyBpbiBQeXRob24KZGlmZiAtLWdpdCBh L2dkYi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weSBiL2dkYi9weXRob24v bGliL2dkYi9fX2luaXRfXy5weQppbmRleCA5MmIwNmYyLi4wNDk0OTU5IDEw MDY0NAotLS0gYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKysr IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CkBAIC03MSw2ICs3 MSw0MiBAQCB0eXBlX3ByaW50ZXJzID0gW10KIHhtZXRob2RzID0gW10KICMg SW5pdGlhbCBmcmFtZSBmaWx0ZXJzLgogZnJhbWVfZmlsdGVycyA9IHt9Cisj IEluaXRpYWwgZnJhbWUgdW53aW5kZXJzLgorZnJhbWVfdW53aW5kZXJzID0g W10KKworZGVmIGV4ZWN1dGVfdW53aW5kZXJzKHBlbmRpbmdfZnJhbWUpOgor ICAgICIiIkludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQiB0byBl eGVjdXRlIGFsbCB1bndpbmRlcnMuCisKKyAgICBSdW5zIGVhY2ggY3VycmVu dGx5IGVuYWJsZWQgdW53aW5kZXIgdW50aWwgaXQgZmluZHMgdGhlIG9uZSB0 aGF0CisgICAgY2FuIHVud2luZCBnaXZlbiBmcmFtZS4KKworICAgIEFyZ3Vt ZW50czoKKyAgICAgICAgcGVuZGluZ19mcmFtZTogZ2RiLlBlbmRpbmdGcmFt ZSBpbnN0YW5jZS4KKyAgICBSZXR1cm5zOgorICAgICAgICBnZGIuVW53aW5k SW5mbyBpbnN0YW5jZSBvciBOb25lLgorICAgICIiIgorICAgIGZvciBvYmpm aWxlIGluIG9iamZpbGVzKCk6CisgICAgICAgIGZvciB1bndpbmRlciBpbiBv YmpmaWxlLmZyYW1lX3Vud2luZGVyczoKKyAgICAgICAgICAgIGlmIHVud2lu ZGVyLmVuYWJsZWQ6CisgICAgICAgICAgICAgICAgdW53aW5kX2luZm8gPSB1 bndpbmRlcihwZW5kaW5nX2ZyYW1lKQorICAgICAgICAgICAgICAgIGlmIHVu d2luZF9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gdW53aW5kX2luZm8KKworICAgIGN1cnJlbnRfcHJvZ3NwYWNlID0g X2dkYi5jdXJyZW50X3Byb2dzcGFjZSgpCisgICAgZm9yIHVud2luZGVyIGlu IGN1cnJlbnRfcHJvZ3NwYWNlLmZyYW1lX3Vud2luZGVyczoKKyAgICAgICAg aWYgdW53aW5kZXIuZW5hYmxlZDoKKyAgICAgICAgICAgIHVud2luZF9pbmZv ID0gdW53aW5kZXIocGVuZGluZ19mcmFtZSkKKyAgICAgICAgICAgIGlmIHVu d2luZF9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVy biB1bndpbmRfaW5mbworCisgICAgZm9yIHVud2luZGVyIGluIGZyYW1lX3Vu d2luZGVyczoKKyAgICAgICAgaWYgdW53aW5kZXIuZW5hYmxlZDoKKyAgICAg ICAgICAgIHVud2luZF9pbmZvID0gdW53aW5kZXIocGVuZGluZ19mcmFtZSkK KyAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5vdCBOb25lOgorICAg ICAgICAgICAgICAgIHJldHVybiB1bndpbmRfaW5mbworCisgICAgcmV0dXJu IE5vbmUKKwogCiAjIENvbnZlbmllbmNlIHZhcmlhYmxlIHRvIEdEQidzIHB5 dGhvbiBkaXJlY3RvcnkKIFBZVEhPTkRJUiA9IG9zLnBhdGguZGlybmFtZShv cy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQpkaWZmIC0tZ2l0IGEvZ2RiL3B5 dGhvbi9saWIvZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5IGIvZ2RiL3B5dGhv bi9saWIvZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MzBiMzUKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC91bndpbmRlcnMucHkK QEAgLTAsMCArMSwxOTggQEAKKyMgVW53aW5kZXIgY29tbWFuZHMuCisjIENv cHlyaWdodCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitpbXBvcnQgcmUKKwor CitkZWYgdmFsaWRhdGVfcmVnZXhwKGV4cCwgaWRzdHJpbmcpOgorICAgIHRy eToKKyAgICAgICAgcmV0dXJuIHJlLmNvbXBpbGUoZXhwKQorICAgIGV4Y2Vw dCBTeW50YXhFcnJvcjoKKyAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIklu dmFsaWQgJXMgcmVnZXhwOiAlcy4iICUgKGlkc3RyaW5nLCBleHApKQorCisK K2RlZiBwYXJzZV91bndpbmRlcl9jb21tYW5kX2FyZ3MoYXJnKToKKyAgICAi IiJJbnRlcm5hbCB1dGlsaXR5IHRvIHBhcnNlIHVud2luZGVyIGNvbW1hbmQg YXJndi4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgYXJnOiBUaGUgYXJn dW1lbnRzIHRvIHRoZSBjb21tYW5kLiBUaGUgZm9ybWF0IGlzOgorICAgICAg ICAgICAgIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIFJl dHVybnM6CisgICAgICAgIEEgMi10dXBsZSBvZiBjb21waWxlZCByZWd1bGFy IGV4cHJlc3Npb25zLgorCisgICAgUmFpc2VzOgorICAgICAgICBTeW50YXhF cnJvcjogYW4gZXJyb3IgcHJvY2Vzc2luZyBBUkcKKyAgICAiIiIKKworICAg IGFyZ3YgPSBnZGIuc3RyaW5nX3RvX2FyZ3YoYXJnKQorICAgIGFyZ2MgPSBs ZW4oYXJndikKKyAgICBpZiBhcmdjID4gMjoKKyAgICAgICAgcmFpc2UgU3lu dGF4RXJyb3IoIlRvbyBtYW55IGFyZ3VtZW50cy4iKQorICAgIGxvY3VzX3Jl Z2V4cCA9ICIiCisgICAgbmFtZV9yZWdleHAgPSAiIgorICAgIGlmIGFyZ2Mg Pj0gMToKKyAgICAgICAgbG9jdXNfcmVnZXhwID0gYXJndlswXQorICAgICAg ICBpZiBhcmdjID49IDI6CisgICAgICAgICAgICBuYW1lX3JlZ2V4cCA9IGFy Z3ZbMV0KKyAgICByZXR1cm4gKHZhbGlkYXRlX3JlZ2V4cChsb2N1c19yZWdl eHAsICJsb2N1cyIpLAorICAgICAgICAgICAgdmFsaWRhdGVfcmVnZXhwKG5h bWVfcmVnZXhwLCAidW53aW5kZXIiKSkKKworCitjbGFzcyBJbmZvVW53aW5k ZXIoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGxpc3Qg dW53aW5kZXJzLgorCisgICAgVXNhZ2U6IGluZm8gdW53aW5kZXIgW2xvY3Vz LXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisgICAgTE9DVVMtUkVHRVhQIGlz IGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBsb2NhdGlvbiBv ZiB0aGUKKyAgICB1bndpbmRlci4gIElmIGl0IGlzIG9taXR0ZWQsIGFsbCBy ZWdpc3RlcmVkIHVud2luZGVycyBmcm9tIGFsbAorICAgIGxvY2kgYXJlIGxp c3RlZC4gIEEgbG9jdXMgY2FuIGJlICdnbG9iYWwnLCAncHJvZ3NwYWNlJyB0 byBsaXN0CisgICAgdGhlIHVud2luZGVycyBmcm9tIHRoZSBjdXJyZW50IHBy b2dzcGFjZSwgb3IgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICBtYXRjaGlu ZyBmaWxlbmFtZXMgb2Ygb2JqZmlsZXMuCisKKyAgICBOQU1FLVJFR0VYUCBp cyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgdW53aW5kZXIgbmFt ZXMuICBJZgorICAgIHRoaXMgb21pdHRlZCBmb3IgYSBzcGVjaWZpZWQgbG9j dXMsIHRoZW4gYWxsIHJlZ2lzdGVyZWQgdW53aW5kZXJzCisgICAgaW4gdGhl IGxvY3VzIGFyZSBsaXN0ZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0 X18oc2VsZik6CisgICAgICAgIHN1cGVyKEluZm9VbndpbmRlciwgc2VsZiku X19pbml0X18oImluZm8gdW53aW5kZXIiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9TVEFDSykK KworICAgIGRlZiBsaXN0X3Vud2luZGVycyhzZWxmLCB0aXRsZSwgdW53aW5k ZXJzLCBuYW1lX3JlKToKKyAgICAgICAgIiIiTGlzdHMgdGhlIHVud2luZGVy cyB3aG9zZSBuYW1lIG1hdGNoZXMgcmVnZXhwLgorCisgICAgICAgIEFyZ3Vt ZW50czoKKyAgICAgICAgICAgIHRpdGxlOiBUaGUgbGluZSB0byBwcmludCBi ZWZvcmUgdGhlIGxpc3QuCisgICAgICAgICAgICB1bndpbmRlcnM6IFRoZSBs aXN0IG9mIHRoZSB1bndpbmRlcnMuCisgICAgICAgICAgICBuYW1lX3JlOiB1 bndpbmRlciBuYW1lIGZpbHRlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlm IG5vdCB1bndpbmRlcnM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg cHJpbnQgdGl0bGUKKyAgICAgICAgZm9yIHVud2luZGVyIGluIHVud2luZGVy czoKKyAgICAgICAgICAgIGlmIG5hbWVfcmUubWF0Y2godW53aW5kZXIubmFt ZSk6CisgICAgICAgICAgICAgICAgcHJpbnQoIiAgJXMlcyIgJSAodW53aW5k ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi IiBpZiB1bndpbmRlci5lbmFibGVkIGVsc2UgIiBbZGlzYWJsZWRdIikpCisK KyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorICAgICAg ICBsb2N1c19yZSwgbmFtZV9yZSA9IHBhcnNlX3Vud2luZGVyX2NvbW1hbmRf YXJncyhhcmcpCisgICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKCJnbG9iYWwi KToKKyAgICAgICAgICAgIHNlbGYubGlzdF91bndpbmRlcnMoIkdsb2JhbDoi LCBnZGIuZnJhbWVfdW53aW5kZXJzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuYW1lX3JlKQorICAgICAgICBpZiBsb2N1c19yZS5tYXRj aCgicHJvZ3NwYWNlIik6CisgICAgICAgICAgICBjcCA9IGdkYi5jdXJyZW50 X3Byb2dzcGFjZSgpCisgICAgICAgICAgICBzZWxmLmxpc3RfdW53aW5kZXJz KCJQcm9nc3BhY2UgJXM6IiAlIGNwLmZpbGVuYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjcC5mcmFtZV91bndpbmRlcnMsIG5hbWVf cmUpCisgICAgICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgor ICAgICAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2gob2JqZmlsZS5maWxlbmFt ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5saXN0X3Vud2luZGVycygiT2Jq ZmlsZSAlczoiICUgb2JqZmlsZS5maWxlbmFtZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9iamZpbGUuZnJhbWVfdW53aW5kZXJz LCBuYW1lX3JlKQorCisKK2RlZiBkb19lbmFibGVfdW53aW5kZXIxKHVud2lu ZGVycywgbmFtZV9yZSwgZmxhZyk6CisgICAgIiIiRW5hYmxlL2Rpc2FibGUg dW53aW5kZXJzIHdob3NlIG5hbWVzIG1hdGNoIGdpdmVuIHJlZ2V4LgorCisg ICAgQXJndW1lbnRzOgorICAgICAgICB1bndpbmRlcnM6IFRoZSBsaXN0IG9m IHVud2luZGVycy4KKyAgICAgICAgbmFtZV9yZTogVW53aW5kZXIgbmFtZSBm aWx0ZXIuCisgICAgICAgIGZsYWc6IEVuYWJsZS9kaXNhYmxlLgorCisgICAg UmV0dXJuczoKKyAgICAgICAgVGhlIG51bWJlciBvZiB1bndpbmRlcnMgYWZm ZWN0ZWQuCisgICAgIiIiCisgICAgdG90YWwgPSAwCisgICAgZm9yIHVud2lu ZGVyIGluIHVud2luZGVyczoKKyAgICAgICAgaWYgbmFtZV9yZS5tYXRjaCh1 bndpbmRlci5uYW1lKToKKyAgICAgICAgICAgIHVud2luZGVyLmVuYWJsZWQg PSBmbGFnCisgICAgICAgICAgICB0b3RhbCArPSAxCisgICAgcmV0dXJuIHRv dGFsCisKKworZGVmIGRvX2VuYWJsZV91bndpbmRlcihhcmcsIGZsYWcpOgor ICAgICIiIkVuYWJsZS9kaXNhYmxlIHVud2luZGVyKHMpLiIiIgorICAgIChs b2N1c19yZSwgbmFtZV9yZSkgPSBwYXJzZV91bndpbmRlcl9jb21tYW5kX2Fy Z3MoYXJnKQorICAgIHRvdGFsID0gMAorICAgIGlmIGxvY3VzX3JlLm1hdGNo KCJnbG9iYWwiKToKKyAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX3Vud2lu ZGVyMShnZGIuZnJhbWVfdW53aW5kZXJzLCBuYW1lX3JlLCBmbGFnKQorICAg IGlmIGxvY3VzX3JlLm1hdGNoKCJwcm9nc3BhY2UiKToKKyAgICAgICAgdG90 YWwgKz0gZG9fZW5hYmxlX3Vud2luZGVyMShnZGIuY3VycmVudF9wcm9nc3Bh Y2UoKS5mcmFtZV91bndpbmRlcnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmFtZV9yZSwgZmxhZykKKyAgICBmb3Igb2JqZmls ZSBpbiBnZGIub2JqZmlsZXMoKToKKyAgICAgICAgaWYgbG9jdXNfcmUubWF0 Y2gob2JqZmlsZS5maWxlbmFtZSk6CisgICAgICAgICAgICB0b3RhbCArPSBk b19lbmFibGVfdW53aW5kZXIxKG9iamZpbGUuZnJhbWVfdW53aW5kZXJzLCBu YW1lX3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmbGFnKQorICAgIHByaW50KCIlZCB1bndpbmRlciVzICVzIiAlICh0 b3RhbCwgIiIgaWYgdG90YWwgPT0gMSBlbHNlICJzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImVuYWJsZWQiIGlmIGZsYWcgZWxzZSAi ZGlzYWJsZWQiKSkKKworCitjbGFzcyBFbmFibGVVbndpbmRlcihnZGIuQ29t bWFuZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8gZW5hYmxlIHVud2luZGVy cy4KKworICAgIFVzYWdlOiBlbmFibGUgdW53aW5kZXIgW2xvY3VzLXJlZ2V4 cCBbbmFtZS1yZWdleHBdXQorCisgICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVn dWxhciBleHByZXNzaW9uIHNwZWNpZnlpbmcgdGhlIHVud2luZGVycyB0bwor ICAgIGVuYWJsZS4gIEl0IGNhbiAnZ2xvYmFsJywgJ3Byb2dzcGFjZScsIG9y IHRoZSBuYW1lIG9mIGFuIG9iamZpbGUKKyAgICB3aXRoaW4gdGhhdCBwcm9n c3BhY2UuCisKKyAgICBOQU1FX1JFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVz c2lvbiB0byBmaWx0ZXIgdW53aW5kZXIgbmFtZXMuICBJZgorICAgIHRoaXMg b21pdHRlZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4gYWxsIHJlZ2lz dGVyZWQgdW53aW5kZXJzCisgICAgaW4gdGhlIGxvY3VzIGFyZSBhZmZlY3Rl ZC4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg ICAgICBzdXBlcihFbmFibGVVbndpbmRlciwgc2VsZikuX19pbml0X18oImVu YWJsZSB1bndpbmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9TVEFDSykKKworICAgIGRl ZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgICIiIkdE QiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCisgICAg ICAgIGRvX2VuYWJsZV91bndpbmRlcihhcmcsIFRydWUpCisKKworY2xhc3Mg RGlzYWJsZVVud2luZGVyKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIgY29t bWFuZCB0byBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgdW53aW5kZXIuCisKKyAg ICBVc2FnZTogZGlzYWJsZSB1bndpbmRlciBbbG9jdXMtcmVnZXhwIFtuYW1l LXJlZ2V4cF1dCisKKyAgICBMT0NVUy1SRUdFWFAgaXMgYSByZWd1bGFyIGV4 cHJlc3Npb24gc3BlY2lmeWluZyB0aGUgdW53aW5kZXJzIHRvCisgICAgZGlz YWJsZS4gIEl0IGNhbiAnZ2xvYmFsJywgJ3Byb2dzcGFjZScsIG9yIHRoZSBu YW1lIG9mIGFuIG9iamZpbGUKKyAgICB3aXRoaW4gdGhhdCBwcm9nc3BhY2Uu CisKKyAgICBOQU1FX1JFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0 byBmaWx0ZXIgdW53aW5kZXIgbmFtZXMuICBJZgorICAgIHRoaXMgb21pdHRl ZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4gYWxsIHJlZ2lzdGVyZWQg dW53aW5kZXJzCisgICAgaW4gdGhlIGxvY3VzIGFyZSBhZmZlY3RlZC4KKwor ICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz dXBlcihEaXNhYmxlVW53aW5kZXIsIHNlbGYpLl9faW5pdF9fKCJkaXNhYmxl IHVud2luZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnZGIuQ09NTUFORF9TVEFDSykKKworICAgIGRlZiBp bnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgICIiIkdEQiBj YWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCisgICAgICAg IGRvX2VuYWJsZV91bndpbmRlcihhcmcsIEZhbHNlKQorCisKK2RlZiByZWdp c3Rlcl91bndpbmRlcl9jb21tYW5kcygpOgorICAgICIiIkluc3RhbGxzIHRo ZSB1bndpbmRlciBjb21tYW5kcy4iIiIKKyAgICBJbmZvVW53aW5kZXIoKQor ICAgIEVuYWJsZVVud2luZGVyKCkKKyAgICBEaXNhYmxlVW53aW5kZXIoKQor CisKK3JlZ2lzdGVyX3Vud2luZGVyX2NvbW1hbmRzKCkKZGlmZiAtLWdpdCBh L2dkYi9weXRob24vbGliL2dkYi91bndpbmRlci5weSBiL2dkYi9weXRob24v bGliL2dkYi91bndpbmRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4zNTU0ZTljCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5 dGhvbi9saWIvZ2RiL3Vud2luZGVyLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMg Q29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisiIiJVbndpbmRlciBjbGFzcyBh bmQgcmVnaXN0ZXJfdW53aW5kZXIgZnVuY3Rpb24uIiIiCisKK2ltcG9ydCBn ZGIKKworCitjbGFzcyBVbndpbmRlcihvYmplY3QpOgorICAgICIiIkJhc2Ug Y2xhc3MgKG9yIGEgdGVtcGxhdGUpIGZvciBmcmFtZSB1bndpbmRlcnMgd3Jp dHRlbiBpbiBQeXRob24uCisKKyAgICBBbiB1bndpbmRlciBoYXMgYSBzaW5n bGUgbWV0aG9kIF9fY2FsbF9fIGFuZCB0aGUgYXR0cmlidXRlcworICAgIGRl c2NyaWJlZCBiZWxvdy4KKworICAgIEF0dHJpYnV0ZXM6CisgICAgICAgIG5h bWU6IFRoZSBuYW1lIG9mIHRoZSB1bndpbmRlci4KKyAgICAgICAgZW5hYmxl ZDogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdW53aW5kZXIg aXMgZW5hYmxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm LCBuYW1lKToKKyAgICAgICAgIiIiQ29uc3RydWN0b3IuCisKKyAgICAgICAg QXJnczoKKyAgICAgICAgICAgIG5hbWU6IEFuIGlkZW50aWZ5aW5nIG5hbWUg Zm9yIHRoZSB1bndpbmRlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYu bmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1ZQorCisg ICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBlbmRpbmdfZnJhbWUpOgorICAgICAg ICAiIiJHREIgY2FsbHMgdGhpcyBtZXRob2QgdG8gdW53aW5kIGEgZnJhbWUu CisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgcGVuZGluZ19m cmFtZTogZ2RiLlBlbmRpbmdGcmFtZSBpbnN0YW5jZS4KKworICAgICAgICBS ZXR1cm5zOgorICAgICAgICAgICAgZ2RiLlVud2luZEluZm8gaW5zdGFuY2Uu CisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy cm9yKCJVbndpbmRlciBfX2NhbGxfXy4iKQorCisKK2RlZiByZWdpc3Rlcl91 bndpbmRlcihsb2N1cywgdW53aW5kZXIsIHJlcGxhY2U9RmFsc2UpOgorICAg ICIiIlJlZ2lzdGVyIHVud2luZGVyIGluIGdpdmVuIGxvY3VzLgorCisgICAg VGhlIHVud2luZGVyIGlzIHByZXBlbmRlZCB0byB0aGUgbG9jdXMncyB1bndp bmRlcnMgbGlzdC4gVW53aW5kZXIKKyAgICBuYW1lIHNob3VsZCBiZSB1bmlx dWUuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIGxvY3VzOiBFaXRoZXIg YW4gb2JqZmlsZSwgcHJvZ3NwYWNlLCBvciBOb25lIChpbiB3aGljaCBjYXNl CisgICAgICAgICAgICAgICB0aGUgdW53aW5kZXIgaXMgcmVnaXN0ZXJlZCBn bG9iYWxseSkuCisgICAgICAgIHVud2luZGVyOiBBbiBvYmplY3Qgb2YgYSBn ZGIuVW53aW5kZXIgc3ViY2xhc3MKKyAgICAgICAgcmVwbGFjZTogSWYgVHJ1 ZSwgcmVwbGFjZXMgZXhpc3RpbmcgdW53aW5kZXIgd2l0aCB0aGUgc2FtZSBu YW1lLgorICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIHJhaXNlcyBleGNl cHRpb24gaWYgdW53aW5kZXIgd2l0aCB0aGUgc2FtZQorICAgICAgICAgICAg ICAgICBuYW1lIGFscmVhZHkgZXhpc3RzLgorCisgICAgUmV0dXJuczoKKyAg ICAgICAgTm90aGluZy4KKworICAgIFJhaXNlczoKKyAgICAgICAgUnVudGlt ZUVycm9yOiBVbndpbmRlciBuYW1lIGlzIG5vdCB1bmlxdWUKKyAgICAgICAg VHlwZUVycm9yOiBCYWQgbG9jdXMgdHlwZQorICAgICIiIgorICAgIGlmIGxv Y3VzIGlzIE5vbmU6CisgICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJv c2UiKToKKyAgICAgICAgICAgIGdkYi53cml0ZSgiUmVnaXN0ZXJpbmcgZ2xv YmFsICVzIHVud2luZGVyIC4uLlxuIiAlIHVud2luZGVyLm5hbWUpCisgICAg ICAgIGxvY3VzID0gZ2RiCisgICAgZWxpZiBpc2luc3RhbmNlKGxvY3VzLCBn ZGIuT2JqZmlsZSkgb3IgaXNpbnN0YW5jZShsb2N1cywgZ2RiLlByb2dzcGFj ZSk6CisgICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJvc2UiKToKKyAg ICAgICAgICAgIGdkYi53cml0ZSgiUmVnaXN0ZXJpbmcgJXMgdW53aW5kZXIg Zm9yICVzIC4uLlxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgKHVud2lu ZGVyLm5hbWUsIGxvY3VzLmZpbGVuYW1lKSkKKyAgICBlbHNlOgorICAgICAg ICByYWlzZSBUeXBlRXJyb3IoImxvY3VzIHNob3VsZCBiZSBnZGIuT2JqZmls ZSBvciBnZGIuUHJvZ3NwYWNlIG9yIE5vbmUiKQorCisgICAgaSA9IDAKKyAg ICBmb3IgbmVlZGxlIGluIGxvY3VzLmZyYW1lX3Vud2luZGVyczoKKyAgICAg ICAgaWYgbmVlZGxlLm5hbWUgPT0gdW53aW5kZXIubmFtZToKKyAgICAgICAg ICAgIGlmIHJlcGxhY2U6CisgICAgICAgICAgICAgICAgZGVsIGxvY3VzLmZy YW1lX3Vud2luZGVyc1tpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlVud2luZGVyICVzIGFscmVh ZHkgZXhpc3RzLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bndpbmRlci5uYW1lKQorICAgICAgICBpICs9IDEKKyAgICBsb2N1 cy5mcmFtZV91bndpbmRlcnMuaW5zZXJ0KDAsIHVud2luZGVyKQpkaWZmIC0t Z2l0IGEvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMgYi9nZGIvcHl0aG9uL3B5 LW9iamZpbGUuYwppbmRleCAxNTdkMjAwLi5jOTUyOGMzIDEwMDY0NAotLS0g YS9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYworKysgYi9nZGIvcHl0aG9uL3B5 LW9iamZpbGUuYwpAQCAtNDIsNiArNDIsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QK IAogICAvKiBUaGUgZnJhbWUgZmlsdGVyIGxpc3Qgb2YgZnVuY3Rpb25zLiAg Ki8KICAgUHlPYmplY3QgKmZyYW1lX2ZpbHRlcnM7CisKKyAgLyogVGhlIGxp c3Qgb2YgZnJhbWUgdW53aW5kZXJzLiAgKi8KKyAgUHlPYmplY3QgKmZyYW1l X3Vud2luZGVyczsKKwogICAvKiBUaGUgdHlwZS1wcmludGVyIGxpc3QuICAq LwogICBQeU9iamVjdCAqdHlwZV9wcmludGVyczsKIApAQCAtMTg0LDYgKzE4 OCw3IEBAIG9iamZweV9kZWFsbG9jIChQeU9iamVjdCAqbykKICAgUHlfWERF Q1JFRiAoc2VsZi0+ZGljdCk7CiAgIFB5X1hERUNSRUYgKHNlbGYtPnByaW50 ZXJzKTsKICAgUHlfWERFQ1JFRiAoc2VsZi0+ZnJhbWVfZmlsdGVycyk7Cisg IFB5X1hERUNSRUYgKHNlbGYtPmZyYW1lX3Vud2luZGVycyk7CiAgIFB5X1hE RUNSRUYgKHNlbGYtPnR5cGVfcHJpbnRlcnMpOwogICBQeV9YREVDUkVGIChz ZWxmLT54bWV0aG9kcyk7CiAgIFB5X1RZUEUgKHNlbGYpLT50cF9mcmVlIChz ZWxmKTsKQEAgLTIwNiw2ICsyMTEsMTAgQEAgb2JqZnB5X2luaXRpYWxpemUg KG9iamZpbGVfb2JqZWN0ICpzZWxmKQogICBpZiAoc2VsZi0+ZnJhbWVfZmls dGVycyA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCisgIHNlbGYtPmZyYW1l X3Vud2luZGVycyA9IFB5TGlzdF9OZXcgKDApOworICBpZiAoc2VsZi0+ZnJh bWVfdW53aW5kZXJzID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKICAgc2Vs Zi0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOwogICBpZiAoc2Vs Zi0+dHlwZV9wcmludGVycyA9PSBOVUxMKQogICAgIHJldHVybiAwOwpAQCAt MzEzLDYgKzMyMiw0OCBAQCBvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMgKFB5 T2JqZWN0ICpvLCBQeU9iamVjdCAqZmlsdGVycywgdm9pZCAqaWdub3JlKQog ICByZXR1cm4gMDsKIH0KIAorLyogUmV0dXJuIHRoZSBmcmFtZSB1bndpbmRl cnMgYXR0cmlidXRlIGZvciB0aGlzIG9iamVjdCBmaWxlLiAgKi8KKworUHlP YmplY3QgKgorb2JqZnB5X2dldF9mcmFtZV91bndpbmRlcnMgKFB5T2JqZWN0 ICpvLCB2b2lkICppZ25vcmUpCit7CisgIG9iamZpbGVfb2JqZWN0ICpzZWxm ID0gKG9iamZpbGVfb2JqZWN0ICopIG87CisKKyAgUHlfSU5DUkVGIChzZWxm LT5mcmFtZV91bndpbmRlcnMpOworICByZXR1cm4gc2VsZi0+ZnJhbWVfdW53 aW5kZXJzOworfQorCisvKiBTZXQgdGhpcyBvYmplY3QgZmlsZSdzIGZyYW1l IHVud2luZGVycyBsaXN0IHRvIFVOV0lOREVSUy4gICovCisKK3N0YXRpYyBp bnQKK29iamZweV9zZXRfZnJhbWVfdW53aW5kZXJzIChQeU9iamVjdCAqbywg UHlPYmplY3QgKnVud2luZGVycywgdm9pZCAqaWdub3JlKQoreworICBQeU9i amVjdCAqdG1wOworICBvYmpmaWxlX29iamVjdCAqc2VsZiA9IChvYmpmaWxl X29iamVjdCAqKSBvOworCisgIGlmICghdW53aW5kZXJzKQorICAgIHsKKyAg ICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkgICAg ICAgXygiQ2Fubm90IGRlbGV0ZSB0aGUgZnJhbWUgdW53aW5kZXJzIGF0dHJp YnV0ZS4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmICgh UHlMaXN0X0NoZWNrICh1bndpbmRlcnMpKQorICAgIHsKKyAgICAgIFB5RXJy X1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkgICAgICAgXygiVGhl IGZyYW1lX3Vud2luZGVycyBhdHRyaWJ1dGUgbXVzdCBiZSBhIGxpc3QuIikp OworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBUYWtlIGNhcmUg aW4gY2FzZSB0aGUgTEhTIGFuZCBSSFMgYXJlIHJlbGF0ZWQgc29tZWhvdy4g ICovCisgIHRtcCA9IHNlbGYtPmZyYW1lX3Vud2luZGVyczsKKyAgUHlfSU5D UkVGICh1bndpbmRlcnMpOworICBzZWxmLT5mcmFtZV91bndpbmRlcnMgPSB1 bndpbmRlcnM7CisgIFB5X1hERUNSRUYgKHRtcCk7CisKKyAgcmV0dXJuIDA7 Cit9CisKIC8qIEdldCB0aGUgJ3R5cGVfcHJpbnRlcnMnIGF0dHJpYnV0ZS4g ICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC02NTEsNiArNzAyLDggQEAg c3RhdGljIFB5R2V0U2V0RGVmIG9iamZpbGVfZ2V0c2V0W10gPQogICAgICJQ cmV0dHkgcHJpbnRlcnMuIiwgTlVMTCB9LAogICB7ICJmcmFtZV9maWx0ZXJz Iiwgb2JqZnB5X2dldF9mcmFtZV9maWx0ZXJzLAogICAgIG9iamZweV9zZXRf ZnJhbWVfZmlsdGVycywgIkZyYW1lIEZpbHRlcnMuIiwgTlVMTCB9LAorICB7 ICJmcmFtZV91bndpbmRlcnMiLCBvYmpmcHlfZ2V0X2ZyYW1lX3Vud2luZGVy cywKKyAgICBvYmpmcHlfc2V0X2ZyYW1lX3Vud2luZGVycywgIkZyYW1lIFVu d2luZGVycyIsIE5VTEwgfSwKICAgeyAidHlwZV9wcmludGVycyIsIG9iamZw eV9nZXRfdHlwZV9wcmludGVycywgb2JqZnB5X3NldF90eXBlX3ByaW50ZXJz LAogICAgICJUeXBlIHByaW50ZXJzLiIsIE5VTEwgfSwKICAgeyAieG1ldGhv ZHMiLCBvYmpmcHlfZ2V0X3htZXRob2RzLCBOVUxMLApkaWZmIC0tZ2l0IGEv Z2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYyBiL2dkYi9weXRob24vcHktcHJv Z3NwYWNlLmMKaW5kZXggOTNmYmMxNC4uMTdkYTNkMSAxMDA2NDQKLS0tIGEv Z2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYworKysgYi9nZGIvcHl0aG9uL3B5 LXByb2dzcGFjZS5jCkBAIC00MSw2ICs0MSwxMCBAQCB0eXBlZGVmIHN0cnVj dAogCiAgIC8qIFRoZSBmcmFtZSBmaWx0ZXIgbGlzdCBvZiBmdW5jdGlvbnMu ICAqLwogICBQeU9iamVjdCAqZnJhbWVfZmlsdGVyczsKKworICAvKiBUaGUg ZnJhbWUgdW53aW5kZXIgbGlzdC4gICovCisgIFB5T2JqZWN0ICpmcmFtZV91 bndpbmRlcnM7CisKICAgLyogVGhlIHR5cGUtcHJpbnRlciBsaXN0LiAgKi8K ICAgUHlPYmplY3QgKnR5cGVfcHJpbnRlcnM7CiAKQEAgLTgyLDYgKzg2LDcg QEAgcHNweV9kZWFsbG9jIChQeU9iamVjdCAqc2VsZikKICAgUHlfWERFQ1JF RiAocHNfc2VsZi0+ZGljdCk7CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnBy aW50ZXJzKTsKICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ZnJhbWVfZmlsdGVy cyk7CisgIFB5X1hERUNSRUYgKHBzX3NlbGYtPmZyYW1lX3Vud2luZGVycyk7 CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnR5cGVfcHJpbnRlcnMpOwogICBQ eV9YREVDUkVGIChwc19zZWxmLT54bWV0aG9kcyk7CiAgIFB5X1RZUEUgKHNl bGYpLT50cF9mcmVlIChzZWxmKTsKQEAgLTEwNCw2ICsxMDksMTAgQEAgcHNw eV9pbml0aWFsaXplIChwc3BhY2Vfb2JqZWN0ICpzZWxmKQogICBpZiAoc2Vs Zi0+ZnJhbWVfZmlsdGVycyA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCisg IHNlbGYtPmZyYW1lX3Vud2luZGVycyA9IFB5TGlzdF9OZXcgKDApOworICBp ZiAoc2VsZi0+ZnJhbWVfdW53aW5kZXJzID09IE5VTEwpCisgICAgcmV0dXJu IDA7CisKICAgc2VsZi0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDAp OwogICBpZiAoc2VsZi0+dHlwZV9wcmludGVycyA9PSBOVUxMKQogICAgIHJl dHVybiAwOwpAQCAtMjExLDYgKzIyMCw0OCBAQCBwc3B5X3NldF9mcmFtZV9m aWx0ZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3QgKmZyYW1lLCB2b2lkICpp Z25vcmUpCiAgIHJldHVybiAwOwogfQogCisvKiBSZXR1cm4gdGhlIGxpc3Qg b2YgdGhlIGZyYW1lIHVud2luZGVycyBmb3IgdGhpcyBwcm9ncmFtIHNwYWNl LiAgKi8KKworUHlPYmplY3QgKgorcHNweV9nZXRfZnJhbWVfdW53aW5kZXJz IChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQoreworICBwc3BhY2Vfb2Jq ZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3QgKikgbzsKKworICBQeV9JTkNS RUYgKHNlbGYtPmZyYW1lX3Vud2luZGVycyk7CisgIHJldHVybiBzZWxmLT5m cmFtZV91bndpbmRlcnM7Cit9CisKKy8qIFNldCB0aGlzIHByb2dyYW0gc3Bh Y2UncyBsaXN0IG9mIHRoZSB1bndpbmRlcnMgdG8gVU5XSU5ERVJTLiAgKi8K Kworc3RhdGljIGludAorcHNweV9zZXRfZnJhbWVfdW53aW5kZXJzIChQeU9i amVjdCAqbywgUHlPYmplY3QgKnVud2luZGVycywgdm9pZCAqaWdub3JlKQor eworICBQeU9iamVjdCAqdG1wOworICBwc3BhY2Vfb2JqZWN0ICpzZWxmID0g KHBzcGFjZV9vYmplY3QgKikgbzsKKworICBpZiAoIXVud2luZGVycykKKyAg ICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1R5cGVFcnJvciwK KwkJICAgICAgICJjYW5ub3QgZGVsZXRlIHRoZSBmcmFtZSB1bndpbmRlcnMg bGlzdCIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoIVB5 TGlzdF9DaGVjayAodW53aW5kZXJzKSkKKyAgICB7CisgICAgICBQeUVycl9T ZXRTdHJpbmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJICAgICAgICJ0aGUgZnJh bWUgdW53aW5kZXJzIGF0dHJpYnV0ZSBtdXN0IGJlIGEgbGlzdCIpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBUYWtlIGNhcmUgaW4gY2Fz ZSB0aGUgTEhTIGFuZCBSSFMgYXJlIHJlbGF0ZWQgc29tZWhvdy4gICovCisg IHRtcCA9IHNlbGYtPmZyYW1lX3Vud2luZGVyczsKKyAgUHlfSU5DUkVGICh1 bndpbmRlcnMpOworICBzZWxmLT5mcmFtZV91bndpbmRlcnMgPSB1bndpbmRl cnM7CisgIFB5X1hERUNSRUYgKHRtcCk7CisKKyAgcmV0dXJuIDA7Cit9CisK IC8qIEdldCB0aGUgJ3R5cGVfcHJpbnRlcnMnIGF0dHJpYnV0ZS4gICovCiAK IHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNDUsNiArMzk2LDggQEAgc3RhdGlj IFB5R2V0U2V0RGVmIHBzcGFjZV9nZXRzZXRbXSA9CiAgICAgIlByZXR0eSBw cmludGVycy4iLCBOVUxMIH0sCiAgIHsgImZyYW1lX2ZpbHRlcnMiLCBwc3B5 X2dldF9mcmFtZV9maWx0ZXJzLCBwc3B5X3NldF9mcmFtZV9maWx0ZXJzLAog ICAgICJGcmFtZSBmaWx0ZXJzLiIsIE5VTEwgfSwKKyAgeyAiZnJhbWVfdW53 aW5kZXJzIiwgcHNweV9nZXRfZnJhbWVfdW53aW5kZXJzLCBwc3B5X3NldF9m cmFtZV91bndpbmRlcnMsCisgICAgIkZyYW1lIHVud2luZGVycy4iLCBOVUxM IH0sCiAgIHsgInR5cGVfcHJpbnRlcnMiLCBwc3B5X2dldF90eXBlX3ByaW50 ZXJzLCBwc3B5X3NldF90eXBlX3ByaW50ZXJzLAogICAgICJUeXBlIHByaW50 ZXJzLiIsIE5VTEwgfSwKICAgeyAieG1ldGhvZHMiLCBwc3B5X2dldF94bWV0 aG9kcywgTlVMTCwKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktdW53aW5k LmMgYi9nZGIvcHl0aG9uL3B5LXVud2luZC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmJjZmVhNGIKLS0tIC9kZXYvbnVsbAorKysg Yi9nZGIvcHl0aG9uL3B5LXVud2luZC5jCkBAIC0wLDAgKzEsNzg4IEBACisv KiBQeXRob24gZnJhbWUgdW53aW5kZXIgaW50ZXJmYWNlLgorCisgICBDb3B5 cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNs dWRlICJhcmNoLXV0aWxzLmgiCisjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgi CisjaW5jbHVkZSAiZ2RiX29ic3RhY2suaCIKKyNpbmNsdWRlICJnZGJjbWQu aCIKKyNpbmNsdWRlICJsYW5ndWFnZS5oIgorI2luY2x1ZGUgIm9ic2VydmVy LmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiCisjaW5jbHVkZSAi cmVnY2FjaGUuaCIKKyNpbmNsdWRlICJ2YWxwcmludC5oIgorI2luY2x1ZGUg InVzZXItcmVncy5oIgorCisjZGVmaW5lIFRSQUNFX1BZX1VOV0lORChsZXZl bCwgYXJncy4uLikgaWYgKHB5dXdfZGVidWcgPj0gbGV2ZWwpICBcCisgIHsg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCBhcmdzKTsgfQorCit0 eXBlZGVmIHN0cnVjdAoreworICBQeU9iamVjdF9IRUFECisKKyAgLyogRnJh bWUgd2UgYXJlIHVud2luZGluZy4gICovCisgIHN0cnVjdCBmcmFtZV9pbmZv ICpmcmFtZV9pbmZvOworCisgIC8qIEl0cyBhcmNoaXRlY3R1cmUsIHBhc3Nl ZCBieSB0aGUgc25pZmZlciBjYWxsZXIuICAqLworICBzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaDsKK30gcGVuZGluZ19mcmFtZV9vYmplY3Q7CisKKy8qIFNh dmVkIHJlZ2lzdGVycyBhcnJheSBpdGVtLiAgKi8KKwordHlwZWRlZiBzdHJ1 Y3QKK3sKKyAgaW50IG51bWJlcjsKKyAgUHlPYmplY3QgKnZhbHVlOworfSBz YXZlZF9yZWc7CitERUZfVkVDX08gKHNhdmVkX3JlZyk7CisKKy8qIFRoZSBk YXRhIHdlIGtlZXAgZm9yIHRoZSBQeVVud2luZEluZm86IHBlbmRpbmdfZnJh bWUsIHNhdmVkIHJlZ2lzdGVycworICAgYW5kIGZyYW1lIElELiAgKi8KKwor dHlwZWRlZiBzdHJ1Y3QKK3sKKyAgUHlPYmplY3RfSEVBRAorCisgIC8qIGdk Yi5QZW5kaW5nRnJhbWUgZm9yIHRoZSBmcmFtZSB3ZSBhcmUgdW53aW5kaW5n LiAgKi8KKyAgUHlPYmplY3QgKnBlbmRpbmdfZnJhbWU7CisKKyAgLyogSXRz IElELiAgKi8KKyAgc3RydWN0IGZyYW1lX2lkIGZyYW1lX2lkOworCisgIC8q IFNhdmVkIHJlZ2lzdGVycyBhcnJheS4gICovCisgIFZFQyAoc2F2ZWRfcmVn KSAqc2F2ZWRfcmVnczsKK30gdW53aW5kX2luZm9fb2JqZWN0OworCisvKiBU aGUgZGF0YSB3ZSBrZWVwIGZvciBhIGZyYW1lIHdlIGNhbiB1bndpbmQ6IGZy YW1lIElEIGFuZCBhbiBhcnJheSBvZgorICAgKHJlZ2lzdGVyX251bWJlciwg cmVnaXN0ZXJfdmFsdWUpIHBhaXJzLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QK K3sKKyAgLyogRnJhbWUgSUQuICAqLworICBzdHJ1Y3QgZnJhbWVfaWQgZnJh bWVfaWQ7CisKKyAgLyogR0RCIEFyY2hpdGVjdHVyZS4gICovCisgIHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoOworCisgIC8qIExlbmd0aCBvZiB0aGUgYHJl ZycgYXJyYXkgYmVsb3cuICAqLworICBpbnQgcmVnX2NvdW50OworCisgIHN0 cnVjdCByZWdfaW5mbworICB7CisgICAgLyogUmVnaXN0ZXIgbnVtYmVyLiAg Ki8KKyAgICBpbnQgbnVtYmVyOworCisgICAgLyogUmVnaXN0ZXIgZGF0YSBi eXRlcyBwb2ludGVyLiAgKi8KKyAgICBnZGJfYnl0ZSBkYXRhW01BWF9SRUdJ U1RFUl9TSVpFXTsKKyAgfSByZWdbXTsKK30gY2FjaGVkX2ZyYW1lX2luZm87 CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgcGVuZGluZ19mcmFtZV9vYmplY3Rf dHlwZQorICAgIENQWUNIRUNLRVJfVFlQRV9PQkpFQ1RfRk9SX1RZUEVERUYg KCJwZW5kaW5nX2ZyYW1lX29iamVjdCIpOworCitzdGF0aWMgUHlUeXBlT2Jq ZWN0IHVud2luZF9pbmZvX29iamVjdF90eXBlCisgICAgQ1BZQ0hFQ0tFUl9U WVBFX09CSkVDVF9GT1JfVFlQRURFRiAoInVud2luZF9pbmZvX29iamVjdCIp OworCitzdGF0aWMgdW5zaWduZWQgaW50IHB5dXdfZGVidWcgPSAwOworCitz dGF0aWMgc3RydWN0IGdkYmFyY2hfZGF0YSAqcHl1d19nZGJhcmNoX2RhdGE7 CisKKy8qIFBhcnNlcyByZWdpc3RlciBpZCwgd2hpY2ggY2FuIGJlIGVpdGhl ciBhIG51bWJlciBvciBhIG5hbWUuCisgICBSZXR1cm5zIDEgb24gc3VjY2Vz cywgMCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitweXV3X3BhcnNl X3JlZ2lzdGVyX2lkIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgUHlPYmpl Y3QgKnB5b19yZWdfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KnJlZ19udW0pCit7CisgIGlmIChweW9fcmVnX2lkID09IE5VTEwpCisgICAg cmV0dXJuIDA7CisgIGlmIChnZGJweV9pc19zdHJpbmcgKHB5b19yZWdfaWQp KQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnJlZ19uYW1lID0gZ2RicHlf b2JqX3RvX3N0cmluZyAocHlvX3JlZ19pZCk7CisKKyAgICAgIGlmIChyZWdf bmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICpyZWdf bnVtID0gdXNlcl9yZWdfbWFwX25hbWVfdG9fcmVnbnVtIChnZGJhcmNoLCBy ZWdfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJsZW4gKHJlZ19uYW1lKSk7CisgICAgICByZXR1cm4g KnJlZ19udW0gPj0gMDsKKyAgICB9CisgIGVsc2UgaWYgKFB5SW50X0NoZWNr IChweW9fcmVnX2lkKSkKKyAgICB7CisgICAgICBsb25nIHZhbHVlOworICAg ICAgaWYgKGdkYl9weV9pbnRfYXNfbG9uZyAocHlvX3JlZ19pZCwgJnZhbHVl KSAmJiAoaW50KSB2YWx1ZSA9PSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg ICAgICpyZWdfbnVtID0gKGludCkgdmFsdWU7CisgICAgICAgICAgcmV0dXJu IHVzZXJfcmVnX21hcF9yZWdudW1fdG9fbmFtZSAoZ2RiYXJjaCwgKnJlZ19u dW0pICE9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiAwOwor fQorCisvKiBDb252ZXJ0IGdkYi5WYWx1ZSBpbnN0YW5jZSB0byBpbmZlcmlv cidzIHBvaW50ZXIuICBSZXR1cm4gMSBvbiBzdWNjZXNzLAorICAgMCBvbiBm YWlsdXJlLiAgKi8KKworc3RhdGljIGludAorcHl1d192YWx1ZV9vYmpfdG9f cG9pbnRlciAoUHlPYmplY3QgKnB5b192YWx1ZSwgQ09SRV9BRERSICphZGRy KQoreworICBpbnQgcmMgPSAwOworICBzdHJ1Y3QgdmFsdWUgKnZhbHVlOwor CisgIFRSWQorICAgIHsKKyAgICAgIGlmICgodmFsdWUgPSB2YWx1ZV9vYmpl Y3RfdG9fdmFsdWUgKHB5b192YWx1ZSkpICE9IE5VTEwpCisgICAgICAgIHsK KyAgICAgICAgICAqYWRkciA9IHVucGFja19wb2ludGVyICh2YWx1ZV90eXBl ICh2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsdWVfY29udGVudHMgKHZhbHVlKSk7CisgICAgICAgICAgcmMgPSAxOwor ICAgICAgICB9CisgICAgfQorICBDQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFT S19BTEwpCisgICAgeworICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24g KGV4Y2VwdCk7CisgICAgfQorICBFTkRfQ0FUQ0gKKyAgcmV0dXJuIHJjOwor fQorCisvKiBHZXQgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0IGFuZCBjb252 ZXJ0IGl0IHRvIHRoZSBpbmZlcmlvcidzCisgICBwb2ludGVyIHZhbHVlLiAg UmV0dXJuIDEgaWYgYXR0cmlidXRlIGV4aXN0cyBhbmQgaXRzIHZhbHVlIGNh biBiZQorICAgY29udmVydGVkLiAgT3RoZXJ3aXNlLCBpZiBhdHRyaWJ1dGUg ZG9lcyBub3QgZXhpc3Qgb3IgaXRzIHZhbHVlIGlzCisgICBOb25lLCByZXR1 cm4gMC4gIEluIGFsbCBvdGhlciBjYXNlcyBzZXQgUHl0aG9uIGVycm9yIGFu ZCByZXR1cm4KKyAgIDAuICAqLworCitzdGF0aWMgaW50CitweXV3X29iamVj dF9hdHRyaWJ1dGVfdG9fcG9pbnRlciAoUHlPYmplY3QgKnB5bywgY29uc3Qg Y2hhciAqYXR0cl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENPUkVfQUREUiAqYWRkcikKK3sKKyAgaW50IHJjID0gMDsKKwor ICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAocHlvLCBhdHRyX25hbWUp KQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICpweW9fdmFsdWUgPSBQeU9iamVj dF9HZXRBdHRyU3RyaW5nIChweW8sIGF0dHJfbmFtZSk7CisgICAgICBzdHJ1 Y3QgdmFsdWUgKnZhbHVlOworCisgICAgICBpZiAocHlvX3ZhbHVlICE9IE5V TEwgJiYgcHlvX3ZhbHVlICE9IFB5X05vbmUpCisgICAgICAgIHsKKyAgICAg ICAgICByYyA9IHB5dXdfdmFsdWVfb2JqX3RvX3BvaW50ZXIgKHB5b192YWx1 ZSwgYWRkcik7CisgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgIFB5 RXJyX0Zvcm1hdCAoCisgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJv ciwKKyAgICAgICAgICAgICAgICBfKCJUaGUgdmFsdWUgb2YgdGhlICclcycg YXR0cmlidXRlIGlzIG5vdCBhIHBvaW50ZXIuIiksCisgICAgICAgICAgICAg ICAgYXR0cl9uYW1lKTsKKyAgICAgICAgfQorICAgICAgUHlfWERFQ1JFRiAo cHlvX3ZhbHVlKTsKKyAgICB9CisgIHJldHVybiByYzsKK30KKworLyogQ2Fs bGVkIGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gb2J0YWluIHN0cmlu ZyByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIFVud2luZEluZm8gb2JqZWN0 LiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3Vud2luZF9pbmZvcHlfc3Ry IChQeU9iamVjdCAqc2VsZikKK3sKKyAgc3RydWN0IHVpX2ZpbGUgKnN0cmZp bGUgPSBtZW1fZmlsZW9wZW4gKCk7CisgIHVud2luZF9pbmZvX29iamVjdCAq dW53aW5kX2luZm8gPSAodW53aW5kX2luZm9fb2JqZWN0ICopIHNlbGY7Cisg IHBlbmRpbmdfZnJhbWVfb2JqZWN0ICpwZW5kaW5nX2ZyYW1lCisgICAgICA9 IChwZW5kaW5nX2ZyYW1lX29iamVjdCAqKSAodW53aW5kX2luZm8tPnBlbmRp bmdfZnJhbWUpOworICBQeU9iamVjdCAqcmVzdWx0OworCisgIGZwcmludGZf dW5maWx0ZXJlZCAoc3RyZmlsZSwgIkZyYW1lIElEOiAiKTsKKyAgZnByaW50 X2ZyYW1lX2lkIChzdHJmaWxlLCB1bndpbmRfaW5mby0+ZnJhbWVfaWQpOwor ICB7CisgICAgY2hhciAqc2VwID0gIiI7CisgICAgaW50IGk7CisgICAgc3Ry dWN0IHZhbHVlX3ByaW50X29wdGlvbnMgb3B0czsKKyAgICBzYXZlZF9yZWcg KnJlZzsKKworICAgIGdldF91c2VyX3ByaW50X29wdGlvbnMgKCZvcHRzKTsK KyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICJcblNhdmVkIHJl Z2lzdGVyczogKCIpOworICAgIGZvciAoaSA9IDA7CisgICAgICAgICBpIDwg VkVDX2l0ZXJhdGUgKHNhdmVkX3JlZywgdW53aW5kX2luZm8tPnNhdmVkX3Jl Z3MsIGksIHJlZyk7CisgICAgICAgICBpKyspCisgICAgICB7CisgICAgICAg IHN0cnVjdCB2YWx1ZSAqdmFsdWUgPSB2YWx1ZV9vYmplY3RfdG9fdmFsdWUg KHJlZy0+dmFsdWUpOworCisgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAo c3RyZmlsZSwgIiVzKCVkLCAiLCBzZXAsIHJlZy0+bnVtYmVyKTsKKyAgICAg ICAgaWYgKHZhbHVlICE9IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAg ICAgVFJZCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWx1 ZV9wcmludCAodmFsdWUsIHN0cmZpbGUsICZvcHRzKTsKKyAgICAgICAgICAg ICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICIpIik7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIENBVENIIChleGNlcHQsIFJFVFVS Tl9NQVNLX0FMTCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICBFTkRfQ0FUQ0gKKyAgICAgICAgICB9Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0 cmZpbGUsICI8QkFEPikiKTsKKyAgICAgICAgc2VwID0gIiwgIjsKKyAgICAg IH0KKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICIpIik7Cisg IH0KKyAgeworICAgIGNoYXIgKnMgPSB1aV9maWxlX3hzdHJkdXAgKHN0cmZp bGUsIE5VTEwpOworCisgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmlu ZyAocyk7CisgICAgeGZyZWUgKHMpOworICB9CisgIHVpX2ZpbGVfZGVsZXRl IChzdHJmaWxlKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ3JlYXRl IFVud2luZEluZm8gaW5zdGFuY2UgZm9yIGdpdmVuIFBlbmRpbmdGcmFtZSBh bmQgZnJhbWUgSUQuCisgICBTZXRzIFB5dGhvbiBlcnJvciBhbmQgcmV0dXJu cyBOVUxMIG9uIGVycm9yLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3B5 dXdfY3JlYXRlX3Vud2luZF9pbmZvIChQeU9iamVjdCAqcHlvX3BlbmRpbmdf ZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZyYW1l X2lkIGZyYW1lX2lkKQoreworICB1bndpbmRfaW5mb19vYmplY3QgKnVud2lu ZF9pbmZvCisgICAgICA9IFB5T2JqZWN0X05ldyAodW53aW5kX2luZm9fb2Jq ZWN0LCAmdW53aW5kX2luZm9fb2JqZWN0X3R5cGUpOworCisgIGlmICgoKHBl bmRpbmdfZnJhbWVfb2JqZWN0ICopIHB5b19wZW5kaW5nX2ZyYW1lKS0+ZnJh bWVfaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmlu ZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAg IkF0dGVtcHRpbmcgdG8gdXNlIHN0YWxlIFBlbmRpbmdGcmFtZSIpOworICAg ICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB1bndpbmRfaW5mby0+ZnJhbWVf aWQgPSBmcmFtZV9pZDsKKyAgUHlfSU5DUkVGIChweW9fcGVuZGluZ19mcmFt ZSk7CisgIHVud2luZF9pbmZvLT5wZW5kaW5nX2ZyYW1lID0gcHlvX3BlbmRp bmdfZnJhbWU7CisgIHVud2luZF9pbmZvLT5zYXZlZF9yZWdzID0gVkVDX2Fs bG9jIChzYXZlZF9yZWcsIDQpOworICByZXR1cm4gKFB5T2JqZWN0ICopIHVu d2luZF9pbmZvOworfQorCisvKiBUaGUgaW1wbGVtZW50YXRpb24gb2YKKyAg IGdkYi5VbndpbmRJbmZvLmFkZF9zYXZlZF9yZWdpc3RlciAoUkVHLCBWQUxV RSkgLT4gTm9uZS4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bndpbmRf aW5mb3B5X2FkZF9zYXZlZF9yZWdpc3RlciAoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphcmdzKQoreworICB1bndpbmRfaW5mb19vYmplY3QgKnVud2lu ZF9pbmZvID0gKHVud2luZF9pbmZvX29iamVjdCAqKSBzZWxmOworICBwZW5k aW5nX2ZyYW1lX29iamVjdCAqcGVuZGluZ19mcmFtZQorICAgICAgPSAocGVu ZGluZ19mcmFtZV9vYmplY3QgKikgKHVud2luZF9pbmZvLT5wZW5kaW5nX2Zy YW1lKTsKKyAgUHlPYmplY3QgKnB5b19yZWdfaWQ7CisgIFB5T2JqZWN0ICpw eW9fcmVnX3ZhbHVlOworICBpbnQgcmVnbnVtOworCisgIGlmIChwZW5kaW5n X2ZyYW1lLT5mcmFtZV9pbmZvID09IE5VTEwpCisgICAgeworICAgICAgUHlF cnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAg ICAgICAgICAgICAiVW53aW5kSW5mbyBpbnN0YW5jZSByZWZlcnMgdG8gYSBz dGFsZSBQZW5kaW5nRnJhbWUiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAg IH0KKyAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZSAoYXJncywgInByZXZpb3Vz X2ZyYW1lX3JlZ2lzdGVyIiwgMiwgMiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgJnB5b19yZWdfaWQsICZweW9fcmVnX3ZhbHVlKSkKKyAgICByZXR1 cm4gTlVMTDsKKyAgaWYgKCFweXV3X3BhcnNlX3JlZ2lzdGVyX2lkIChwZW5k aW5nX2ZyYW1lLT5nZGJhcmNoLCBweW9fcmVnX2lkLCAmcmVnbnVtKSkKKyAg ICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3Is ICJCYWQgcmVnaXN0ZXIiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0K KyAgeworICAgIHN0cnVjdCB2YWx1ZSAqdmFsdWU7CisgICAgc2l6ZV90IGRh dGFfc2l6ZTsKKworICAgIGlmIChweW9fcmVnX3ZhbHVlID09IE5VTEwKKyAg ICAgIHx8ICh2YWx1ZSA9IHZhbHVlX29iamVjdF90b192YWx1ZSAocHlvX3Jl Z192YWx1ZSkpID09IE5VTEwpCisgICAgICB7CisgICAgICAgIFB5RXJyX1Nl dFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwgIkJhZCByZWdpc3RlciB2YWx1 ZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICBkYXRh X3NpemUgPSByZWdpc3Rlcl9zaXplIChwZW5kaW5nX2ZyYW1lLT5nZGJhcmNo LCByZWdudW0pOworICAgIGlmIChkYXRhX3NpemUgIT0gVFlQRV9MRU5HVEgg KHZhbHVlX3R5cGUgKHZhbHVlKSkpCisgICAgICB7CisgICAgICAgIFB5RXJy X0Zvcm1hdCAoCisgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAg ICAgICAgICAgIlRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgcmV0dXJuZWQg YnkgdGhlIFB5dGhvbiAiCisgICAgICAgICAgICAic25pZmZlciBoYXMgdW5l eHBlY3RlZCBzaXplOiAldSBpbnN0ZWFkIG9mICV1LiIsCisgICAgICAgICAg ICAodW5zaWduZWQpIFRZUEVfTEVOR1RIICh2YWx1ZV90eXBlICh2YWx1ZSkp LAorICAgICAgICAgICAgKHVuc2lnbmVkKSBkYXRhX3NpemUpOworICAgICAg ICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgfQorICB7CisgICAgaW50IGk7 CisgICAgc2F2ZWRfcmVnICpyZWc7CisKKyAgICBmb3IgKGkgPSAwOyBWRUNf aXRlcmF0ZSAoc2F2ZWRfcmVnLCB1bndpbmRfaW5mby0+c2F2ZWRfcmVncywg aSwgcmVnKTsgaSsrKQorICAgICAgeworICAgICAgICBpZiAocmVnbnVtID09 IHJlZy0+bnVtYmVyKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0RF Q1JFRiAocmVnLT52YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICB9CisgICAgICB9CisgICAgaWYgKHJlZyA9PSBOVUxMKQorICAgICAg eworICAgICAgICByZWcgPSBWRUNfc2FmZV9wdXNoIChzYXZlZF9yZWcsIHVu d2luZF9pbmZvLT5zYXZlZF9yZWdzLCBOVUxMKTsKKyAgICAgICAgcmVnLT5u dW1iZXIgPSByZWdudW07CisgICAgICB9CisgICAgUHlfSU5DUkVGIChweW9f cmVnX3ZhbHVlKTsKKyAgICByZWctPnZhbHVlID0gcHlvX3JlZ192YWx1ZTsK KyAgfQorICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyogVW53aW5kSW5mbyBj bGVhbnVwLiAgKi8KKworc3RhdGljIHZvaWQKK3Vud2luZF9pbmZvcHlfZGVh bGxvYyAoUHlPYmplY3QgKnNlbGYpCit7CisgIHVud2luZF9pbmZvX29iamVj dCAqdW53aW5kX2luZm8gPSAodW53aW5kX2luZm9fb2JqZWN0ICopIHNlbGY7 CisgIGludCBpOworICBzYXZlZF9yZWcgKnJlZzsKKworICBQeV9YREVDUkVG ICh1bndpbmRfaW5mby0+cGVuZGluZ19mcmFtZSk7CisgIGZvciAoaSA9IDA7 IFZFQ19pdGVyYXRlIChzYXZlZF9yZWcsIHVud2luZF9pbmZvLT5zYXZlZF9y ZWdzLCBpLCByZWcpOyBpKyspCisgICAgICBQeV9ERUNSRUYgKHJlZy0+dmFs dWUpOworICBWRUNfZnJlZSAoc2F2ZWRfcmVnLCB1bndpbmRfaW5mby0+c2F2 ZWRfcmVncyk7CisgIFB5X1RZUEUgKHNlbGYpLT50cF9mcmVlIChzZWxmKTsK K30KKworLyogQ2FsbGVkIGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8g b2J0YWluIHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIFBlbmRp bmdGcmFtZSBvYmplY3QuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorcGVu ZGluZ19mcmFtZXB5X3N0ciAoUHlPYmplY3QgKnNlbGYpCit7CisgIHN0cnVj dCBmcmFtZV9pbmZvICpmcmFtZSA9ICgocGVuZGluZ19mcmFtZV9vYmplY3Qg Kikgc2VsZiktPmZyYW1lX2luZm87CisgIGNvbnN0IGNoYXIgKnNwX3N0ciA9 IE5VTEw7CisgIGNvbnN0IGNoYXIgKnBjX3N0ciA9IE5VTEw7CisKKyAgaWYg KGZyYW1lID09IE5VTEwpCisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJp bmcgKCJTdGFsZSBQZW5kaW5nRnJhbWUgaW5zdGFuY2UiKTsKKyAgVFJZCisg ICAgeworICAgICAgc3Bfc3RyID0gY29yZV9hZGRyX3RvX3N0cmluZ19ueiAo Z2V0X2ZyYW1lX3NwIChmcmFtZSkpOworICAgICAgcGNfc3RyID0gY29yZV9h ZGRyX3RvX3N0cmluZ19ueiAoZ2V0X2ZyYW1lX3BjIChmcmFtZSkpOworICAg IH0KKyAgQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsK KyAgICAgIEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworICAg IH0KKyAgRU5EX0NBVENICisKKyAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3Jt YXQgKCJTUD0lcyxQQz0lcyIsIHNwX3N0ciwgcGNfc3RyKTsKK30KKworLyog SW1wbGVtZW50YXRpb24gb2YgZ2RiLlBlbmRpbmdGcmFtZS5yZWFkX3JlZ2lz dGVyIChzZWxmLCByZWcpIC0+IGdkYi5WYWx1ZS4KKyAgIFJldHVybnMgdGhl IHZhbHVlIG9mIHJlZ2lzdGVyIFJFRyBhcyBnZGIuVmFsdWUgaW5zdGFuY2Uu ICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorcGVuZGluZ19mcmFtZXB5X3Jl YWRfcmVnaXN0ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykK K3sKKyAgcGVuZGluZ19mcmFtZV9vYmplY3QgKnBlbmRpbmdfZnJhbWUgPSAo cGVuZGluZ19mcmFtZV9vYmplY3QgKikgc2VsZjsKKyAgc3RydWN0IHZhbHVl ICp2YWwgPSBOVUxMOworICBpbnQgcmVnbnVtOworICBQeU9iamVjdCAqcHlv X3JlZ19pZDsKKworICBpZiAocGVuZGluZ19mcmFtZS0+ZnJhbWVfaW5mbyA9 PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNf VmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHRp bmcgdG8gcmVhZCByZWdpc3RlciBmcm9tIHN0YWxlIFBlbmRpbmdGcmFtZSIp OworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBpZiAoIVB5QXJnX1Vu cGFja1R1cGxlIChhcmdzLCAicmVhZF9yZWdpc3RlciIsIDEsIDEsICZweW9f cmVnX2lkKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCFweXV3X3BhcnNl X3JlZ2lzdGVyX2lkIChwZW5kaW5nX2ZyYW1lLT5nZGJhcmNoLCBweW9fcmVn X2lkLCAmcmVnbnVtKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcg KFB5RXhjX1ZhbHVlRXJyb3IsICJCYWQgcmVnaXN0ZXIiKTsKKyAgICAgIHJl dHVybiBOVUxMOworICAgIH0KKworICBUUlkKKyAgICB7CisgICAgICB2YWwg PSBnZXRfZnJhbWVfcmVnaXN0ZXJfdmFsdWUgKHBlbmRpbmdfZnJhbWUtPmZy YW1lX2luZm8sIHJlZ251bSk7CisgICAgICBpZiAodmFsID09IE5VTEwpCisg ICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAg ICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgcmVnaXN0ZXIgJWQgZnJv bSBmcmFtZS4iLAorICAgICAgICAgICAgICAgICAgICAgIHJlZ251bSk7Cisg ICAgfQorICBDQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAg eworICAgICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7Cisg ICAgfQorICBFTkRfQ0FUQ0gKKworICByZXR1cm4gdmFsID09IE5VTEwgPyBO VUxMIDogdmFsdWVfdG9fdmFsdWVfb2JqZWN0ICh2YWwpOworfQorCisvKiBJ bXBsZW1lbnRhdGlvbiBvZgorICAgUGVuZGluZ0ZyYW1lLmNyZWF0ZV91bndp bmRfaW5mbyAoc2VsZiwgZnJhbWVJZCkgLT4gVW53aW5kSW5mby4gICovCisK K3N0YXRpYyBQeU9iamVjdCAqCitwZW5kaW5nX2ZyYW1lcHlfY3JlYXRlX3Vu d2luZF9pbmZvIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7 CisgIFB5T2JqZWN0ICpweW9fZnJhbWVfaWQ7CisgIENPUkVfQUREUiBzcDsK KyAgQ09SRV9BRERSIHBjOworICBDT1JFX0FERFIgc3BlY2lhbDsKKworICBp ZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJPOmNyZWF0ZV91bndpbmRf aW5mbyIsICZweW9fZnJhbWVfaWQpKQorICAgICAgcmV0dXJuIE5VTEw7Cisg IGlmICghcHl1d19vYmplY3RfYXR0cmlidXRlX3RvX3BvaW50ZXIgKHB5b19m cmFtZV9pZCwgInNwIiwgJnNwKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRT dHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAg ICAgIF8oImZyYW1lX2lkIHNob3VsZCBoYXZlICdzcCcgYXR0cmlidXRlLiIp KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAvKiBUaGUgbG9n aWMgb2YgYnVpbGRpbmcgZnJhbWVfaWQgZGVwZW5kaW5nIG9uIHRoZSBhdHRy aWJ1dGVzIG9mCisgICAgIHRoZSBmcmFtZV9pZCBvYmplY3Q6CisgICAgIEhh cyAgICAgSGFzICAgIEhhcyAgICAgICAgICAgRnVuY3Rpb24gdG8gY2FsbAor ICAgICAnc3AnPyAgICdwYyc/ICAnc3BlY2lhbCc/CisgICAgIC0tLS0tLXwt LS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICAgICBZICAgICAgIE4gICAgICAqICAgICAgICAgICAgIGZyYW1lX2lk X2J1aWxkX3dpbGQgKHNwKQorICAgICBZICAgICAgIFkgICAgICBOICAgICAg ICAgICAgIGZyYW1lX2lkX2J1aWxkIChzcCwgcGMpCisgICAgIFkgICAgICAg WSAgICAgIFkgICAgICAgICAgICAgZnJhbWVfaWRfYnVpbGRfc3BlY2lhbCAo c3AsIHBjLCBzcGVjaWFsKQorICAqLworICBpZiAoIXB5dXdfb2JqZWN0X2F0 dHJpYnV0ZV90b19wb2ludGVyIChweW9fZnJhbWVfaWQsICJwYyIsICZwYykp CisgICAgcmV0dXJuIHB5dXdfY3JlYXRlX3Vud2luZF9pbmZvIChzZWxmLCBm cmFtZV9pZF9idWlsZF93aWxkIChzcCkpOworICBpZiAoIXB5dXdfb2JqZWN0 X2F0dHJpYnV0ZV90b19wb2ludGVyIChweW9fZnJhbWVfaWQsICJzcGVjaWFs IiwgJnNwZWNpYWwpKQorICAgIHJldHVybiBweXV3X2NyZWF0ZV91bndpbmRf aW5mbyAoc2VsZiwgZnJhbWVfaWRfYnVpbGQgKHNwLCBwYykpOworICBlbHNl CisgICAgcmV0dXJuIHB5dXdfY3JlYXRlX3Vud2luZF9pbmZvIChzZWxmLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfaWRf YnVpbGRfc3BlY2lhbCAoc3AsIHBjLCBzcGVjaWFsKSk7Cit9CisKKy8qIElu dmFsaWRhdGUgUGVuZGluZ0ZyYW1lIGluc3RhbmNlLiAgKi8KKworc3RhdGlj IHZvaWQKK3BlbmRpbmdfZnJhbWVfaW52YWxpZGF0ZSAodm9pZCAqcHlvX3Bl bmRpbmdfZnJhbWUpCit7CisgIGlmIChweW9fcGVuZGluZ19mcmFtZSAhPSBO VUxMKQorICAgICgocGVuZGluZ19mcmFtZV9vYmplY3QgKikgcHlvX3BlbmRp bmdfZnJhbWUpLT5mcmFtZV9pbmZvID0gTlVMTDsKK30KKworLyogZnJhbWVf dW53aW5kLnRoaXNfaWQgbWV0aG9kLiAgKi8KKworc3RhdGljIHZvaWQKK3B5 dXdfdGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZv aWQgKipjYWNoZV9wdHIsCisgICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9p ZCAqdGhpc19pZCkKK3sKKyAgKnRoaXNfaWQgPSAoKGNhY2hlZF9mcmFtZV9p bmZvICopICpjYWNoZV9wdHIpLT5mcmFtZV9pZDsKKyAgaWYgKHB5dXdfZGVi dWcgPj0gMSkKKyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csICIlczogZnJhbWVfaWQ6ICIsIF9fRlVOQ1RJT05fXyk7Cisg ICAgICBmcHJpbnRfZnJhbWVfaWQgKGdkYl9zdGRsb2csICp0aGlzX2lkKTsK KyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlxuIik7 CisgICAgfQorfQorCisvKiBmcmFtZV91bndpbmQucHJldl9yZWdpc3Rlci4g ICovCisKK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorcHl1d19wcmV2X3JlZ2lz dGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKmNh Y2hlX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZ251bSkKK3sK KyAgY2FjaGVkX2ZyYW1lX2luZm8gKmNhY2hlZF9mcmFtZSA9ICpjYWNoZV9w dHI7CisgIHN0cnVjdCByZWdfaW5mbyAqcmVnX2luZm8gPSBjYWNoZWRfZnJh bWUtPnJlZzsKKyAgc3RydWN0IHJlZ19pbmZvICpyZWdfaW5mb19lbmQgPSBy ZWdfaW5mbyArIGNhY2hlZF9mcmFtZS0+cmVnX2NvdW50OworCisgIFRSQUNF X1BZX1VOV0lORCAoMSwgIiVzIChmcmFtZT0lcCwuLi4scmVnPSVkKVxuIiwg X19GVU5DVElPTl9fLCB0aGlzX2ZyYW1lLAorICAgICAgICAgICAgICAgICAg IHJlZ251bSk7CisgIGZvciAoOyByZWdfaW5mbyA8IHJlZ19pbmZvX2VuZDsg KytyZWdfaW5mbykKKyAgICB7CisgICAgICBpZiAocmVnbnVtID09IHJlZ19p bmZvLT5udW1iZXIpCisgICAgICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290 X2J5dGVzICh0aGlzX2ZyYW1lLCByZWdudW0sIHJlZ19pbmZvLT5kYXRhKTsK KyAgICB9CisKKyAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3Rfb3B0aW1pemVk ICh0aGlzX2ZyYW1lLCByZWdudW0pOworfQorCisvKiBGcmFtZSBzbmlmZmVy IGRpc3BhdGNoLiAgKi8KKworc3RhdGljIGludAorcHl1d19zbmlmZmVyIChj b25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICpzZWxmLCBzdHJ1Y3QgZnJhbWVf aW5mbyAqdGhpc19mcmFtZSwKKyAgICAgICAgICAgICAgdm9pZCAqKmNhY2hl X3B0cikKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSAoc3RydWN0 IGdkYmFyY2ggKikgKHNlbGYtPnVud2luZF9kYXRhKTsKKyAgc3RydWN0IGNs ZWFudXAgKmNsZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdkYmFyY2gs IGN1cnJlbnRfbGFuZ3VhZ2UpOworICBQeU9iamVjdCAqcHlvX2V4ZWN1dGU7 CisgIFB5T2JqZWN0ICpweW9fcGVuZGluZ19mcmFtZTsKKyAgUHlPYmplY3Qg KnB5b191bndpbmRfaW5mbzsKKyAgY2FjaGVkX2ZyYW1lX2luZm8gKmNhY2hl ZF9mcmFtZTsKKworICBUUkFDRV9QWV9VTldJTkQgKDMsICIlcyAoU1A9JXMs IFBDPSVzKVxuIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAg IHBhZGRyZXNzIChnZGJhcmNoLCBnZXRfZnJhbWVfc3AgKHRoaXNfZnJhbWUp KSwKKyAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgZ2V0 X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKSkpOworCisgIC8qIENyZWF0ZSBQZW5k aW5nRnJhbWUgaW5zdGFuY2UgdG8gcGFzcyB0byBzbmlmZmVycy4gICovCisg IHB5b19wZW5kaW5nX2ZyYW1lICA9IChQeU9iamVjdCAqKSBQeU9iamVjdF9O ZXcgKHBlbmRpbmdfZnJhbWVfb2JqZWN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGVuZGluZ19mcmFt ZV9vYmplY3RfdHlwZSk7CisgIGlmIChweW9fcGVuZGluZ19mcmFtZSA9PSBO VUxMKQorICAgIGdvdG8gZXJyb3I7CisgICgocGVuZGluZ19mcmFtZV9vYmpl Y3QgKikgcHlvX3BlbmRpbmdfZnJhbWUpLT5nZGJhcmNoID0gZ2RiYXJjaDsK KyAgKChwZW5kaW5nX2ZyYW1lX29iamVjdCAqKSBweW9fcGVuZGluZ19mcmFt ZSktPmZyYW1lX2luZm8gPSB0aGlzX2ZyYW1lOworICBtYWtlX2NsZWFudXAg KHBlbmRpbmdfZnJhbWVfaW52YWxpZGF0ZSwgKHZvaWQgKikgcHlvX3BlbmRp bmdfZnJhbWUpOworICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9fcGVu ZGluZ19mcmFtZSk7CisKKyAgLyogUnVuIHVud2luZGVycy4gICovCisgIGlm IChnZGJfcHl0aG9uX21vZHVsZSA9PSBOVUxMCisgICAgICB8fCAhIFB5T2Jq ZWN0X0hhc0F0dHJTdHJpbmcgKGdkYl9weXRob25fbW9kdWxlLCAiZXhlY3V0 ZV91bndpbmRlcnMiKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcg KFB5RXhjX05hbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIklu c3RhbGxhdGlvbiBlcnJvcjogZ2RiLmV4ZWN1dGVfdW53aW5kZXJzIGZ1bmN0 aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgImlzIG1pc3NpbmciKTsK KyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICBweW9fZXhlY3V0ZSA9IFB5 T2JqZWN0X0dldEF0dHJTdHJpbmcgKGdkYl9weXRob25fbW9kdWxlLCAiZXhl Y3V0ZV91bndpbmRlcnMiKTsKKyAgaWYgKHB5b19leGVjdXRlID09IE5VTEwp CisgICAgZ290byBlcnJvcjsKKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAo cHlvX2V4ZWN1dGUpOworICBweW9fdW53aW5kX2luZm8KKyAgICAgID0gUHlP YmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyAocHlvX2V4ZWN1dGUsIHB5b19w ZW5kaW5nX2ZyYW1lLCBOVUxMKTsKKyAgaWYgKHB5b191bndpbmRfaW5mbyA9 PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7CisgIG1ha2VfY2xlYW51cF9weV9k ZWNyZWYgKHB5b191bndpbmRfaW5mbyk7CisgIGlmIChweW9fdW53aW5kX2lu Zm8gPT0gUHlfTm9uZSkKKyAgICBnb3RvIGNhbm5vdF91bndpbmQ7CisKKyAg LyogUmVjZWl2ZWQgVW53aW5kSW5mbywgY2FjaGUgZGF0YS4gICovCisgIGlm IChQeU9iamVjdF9Jc0luc3RhbmNlIChweW9fdW53aW5kX2luZm8sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikgJnVud2luZF9p bmZvX29iamVjdF90eXBlKSA8PSAwKQorICAgIGVycm9yIChfKCJBIFVud2lu ZGVyIHNob3VsZCByZXR1cm4gZ2RiLlVud2luZEluZm8gaW5zdGFuY2UuIikp OworCisgIHsKKyAgICB1bndpbmRfaW5mb19vYmplY3QgKnVud2luZF9pbmZv ID0gKHVud2luZF9pbmZvX29iamVjdCAqKSBweW9fdW53aW5kX2luZm87Cisg ICAgaW50IHJlZ19jb3VudCA9IFZFQ19sZW5ndGggKHNhdmVkX3JlZywgdW53 aW5kX2luZm8tPnNhdmVkX3JlZ3MpOworICAgIHNhdmVkX3JlZyAqcmVnOwor ICAgIGludCBpOworCisgICAgY2FjaGVkX2ZyYW1lID0geG1hbGxvYyAoc2l6 ZW9mICgqY2FjaGVkX2ZyYW1lKSArCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVnX2NvdW50ICogc2l6ZW9mIChjYWNoZWRfZnJhbWUtPnJlZ1sw XSkpOworICAgIGNhY2hlZF9mcmFtZS0+Z2RiYXJjaCA9IGdkYmFyY2g7Cisg ICAgY2FjaGVkX2ZyYW1lLT5mcmFtZV9pZCA9IHVud2luZF9pbmZvLT5mcmFt ZV9pZDsKKyAgICBjYWNoZWRfZnJhbWUtPnJlZ19jb3VudCA9IHJlZ19jb3Vu dDsKKworICAgIC8qIFBvcHVsYXRlIHJlZ2lzdGVycyBhcnJheS4gICovCisg ICAgZm9yIChpID0gMDsgVkVDX2l0ZXJhdGUgKHNhdmVkX3JlZywgdW53aW5k X2luZm8tPnNhdmVkX3JlZ3MsIGksIHJlZyk7IGkrKykKKyAgICAgIHsKKyAg ICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZSA9IHZhbHVlX29iamVjdF90b192 YWx1ZSAocmVnLT52YWx1ZSk7CisgICAgICAgIHNpemVfdCBkYXRhX3NpemUg PSByZWdpc3Rlcl9zaXplIChnZGJhcmNoLCByZWctPm51bWJlcik7CisKKyAg ICAgICAgY2FjaGVkX2ZyYW1lLT5yZWdbaV0ubnVtYmVyID0gcmVnLT5udW1i ZXI7CisKKyAgICAgICAgLyogYHZhbHVlJyB2YWxpZGF0aW9uIHdhcyBkb25l IGJlZm9yZSwganVzdCBhc3NlcnQuICAqLworICAgICAgICBnZGJfYXNzZXJ0 ICh2YWx1ZSAhPSBOVUxMKTsKKyAgICAgICAgZ2RiX2Fzc2VydCAoZGF0YV9z aXplID09IFRZUEVfTEVOR1RIICh2YWx1ZV90eXBlICh2YWx1ZSkpKTsKKyAg ICAgICAgZ2RiX2Fzc2VydCAoZGF0YV9zaXplIDw9IE1BWF9SRUdJU1RFUl9T SVpFKTsKKworICAgICAgICBtZW1jcHkgKGNhY2hlZF9mcmFtZS0+cmVnW2ld LmRhdGEsIHZhbHVlX2NvbnRlbnRzICh2YWx1ZSksIGRhdGFfc2l6ZSk7Cisg ICAgICB9CisgIH0KKworICAqY2FjaGVfcHRyID0gY2FjaGVkX2ZyYW1lOwor ICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICByZXR1cm4gMTsKKworIGVy cm9yOgorICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgLyogRmFsbHRocm91 Z2guICAqLworIGNhbm5vdF91bndpbmQ6CisgIGRvX2NsZWFudXBzIChjbGVh bnVwcyk7CisgIHJldHVybiAwOworfQorCisvKiBGcmFtZSBjYWNoZSByZWxl YXNlIHNoaW0uICAqLworCitzdGF0aWMgdm9pZAorcHl1d19kZWFsbG9jX2Nh Y2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqY2Fj aGUpCit7CisgIFRSQUNFX1BZX1VOV0lORCAoMywgIiVzOiBlbnRlciIsIF9f RlVOQ1RJT05fXyk7CisgIHhmcmVlIChjYWNoZSk7Cit9CisKK3N0cnVjdCBw eXV3X2dkYmFyY2hfZGF0YV90eXBlCit7CisgIC8qIEhhcyB0aGUgdW53aW5k ZXIgc2hpbSBiZWVuIHByZXBlbmRlZD8gKi8KKyAgaW50IHVud2luZGVyX3Jl Z2lzdGVyZWQ7Cit9OworCitzdGF0aWMgdm9pZCAqCitweXV3X2dkYmFyY2hf ZGF0YV9pbml0IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sKKyAgcmV0 dXJuIEdEQkFSQ0hfT0JTVEFDS19aQUxMT0MgKGdkYmFyY2gsIHN0cnVjdCBw eXV3X2dkYmFyY2hfZGF0YV90eXBlKTsKK30KKworLyogTmV3IGluZmVyaW9y IGFyY2hpdGVjdHVyZSBjYWxsYmFjazogcmVnaXN0ZXIgdGhlIFB5dGhvbiB1 bndpbmRlcnMKKyAgIGludGVybWVkaWFyeS4gICovCisKK3N0YXRpYyB2b2lk CitweXV3X29uX25ld19nZGJhcmNoIChzdHJ1Y3QgZ2RiYXJjaCAqbmV3YXJj aCkKK3sKKyAgc3RydWN0IHB5dXdfZ2RiYXJjaF9kYXRhX3R5cGUgKmRhdGEg PQorICAgICAgZ2RiYXJjaF9kYXRhIChuZXdhcmNoLCBweXV3X2dkYmFyY2hf ZGF0YSk7CisKKyAgaWYgKCFkYXRhLT51bndpbmRlcl9yZWdpc3RlcmVkKQor ICAgIHsKKyAgICAgIHN0cnVjdCBmcmFtZV91bndpbmQgKnVud2luZGVyCisg ICAgICAgICAgPSBHREJBUkNIX09CU1RBQ0tfWkFMTE9DIChuZXdhcmNoLCBz dHJ1Y3QgZnJhbWVfdW53aW5kKTsKKworICAgICAgdW53aW5kZXItPnR5cGUg PSBOT1JNQUxfRlJBTUU7CisgICAgICB1bndpbmRlci0+c3RvcF9yZWFzb24g PSBkZWZhdWx0X2ZyYW1lX3Vud2luZF9zdG9wX3JlYXNvbjsKKyAgICAgIHVu d2luZGVyLT50aGlzX2lkID0gcHl1d190aGlzX2lkOworICAgICAgdW53aW5k ZXItPnByZXZfcmVnaXN0ZXIgPSBweXV3X3ByZXZfcmVnaXN0ZXI7CisgICAg ICB1bndpbmRlci0+dW53aW5kX2RhdGEgPSAodm9pZCAqKSBuZXdhcmNoOwor ICAgICAgdW53aW5kZXItPnNuaWZmZXIgPSBweXV3X3NuaWZmZXI7CisgICAg ICB1bndpbmRlci0+ZGVhbGxvY19jYWNoZSA9IHB5dXdfZGVhbGxvY19jYWNo ZTsKKyAgICAgIGZyYW1lX3Vud2luZF9wcmVwZW5kX3Vud2luZGVyIChuZXdh cmNoLCB1bndpbmRlcik7CisgICAgICBkYXRhLT51bndpbmRlcl9yZWdpc3Rl cmVkID0gMTsKKyAgICB9Cit9CisKKy8qIEluaXRpYWxpemUgdW53aW5kIG1h Y2hpbmVyeS4gICovCisKK2ludAorZ2RicHlfaW5pdGlhbGl6ZV91bndpbmQg KHZvaWQpCit7CisgIGludCByYzsKKyAgYWRkX3NldHNob3dfenVpbnRlZ2Vy X2NtZAorICAgICAgKCJweS11bndpbmQiLCBjbGFzc19tYWludGVuYW5jZSwg JnB5dXdfZGVidWcsCisgICAgICAgIF8oIlNldCBQeXRob24gdW53aW5kZXIg ZGVidWdnaW5nLiIpLAorICAgICAgICBfKCJTaG93IFB5dGhvbiB1bndpbmRl ciBkZWJ1Z2dpbmcuIiksCisgICAgICAgIF8oIldoZW4gbm9uLXplcm8sIFB5 dGhvbiB1bndpbmRlciBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4iKSwKKyAgICAg ICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgJnNldGRlYnVnbGlz dCwgJnNob3dkZWJ1Z2xpc3QpOworICBweXV3X2dkYmFyY2hfZGF0YQorICAg ICAgPSBnZGJhcmNoX2RhdGFfcmVnaXN0ZXJfcG9zdF9pbml0IChweXV3X2dk YmFyY2hfZGF0YV9pbml0KTsKKyAgb2JzZXJ2ZXJfYXR0YWNoX2FyY2hpdGVj dHVyZV9jaGFuZ2VkIChweXV3X29uX25ld19nZGJhcmNoKTsKKworICBpZiAo UHlUeXBlX1JlYWR5ICgmcGVuZGluZ19mcmFtZV9vYmplY3RfdHlwZSkgPCAw KQorICAgIHJldHVybiAtMTsKKyAgcmMgPSBnZGJfcHltb2R1bGVfYWRkb2Jq ZWN0IChnZGJfbW9kdWxlLCAiUGVuZGluZ0ZyYW1lIiwKKyAgICAgIChQeU9i amVjdCAqKSAmcGVuZGluZ19mcmFtZV9vYmplY3RfdHlwZSk7CisgIGlmIChy YykKKyAgICByZXR1cm4gcmM7CisKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJnVu d2luZF9pbmZvX29iamVjdF90eXBlKSA8IDApCisgICAgcmV0dXJuIC0xOwor ICByZXR1cm4gZ2RiX3B5bW9kdWxlX2FkZG9iamVjdCAoZ2RiX21vZHVsZSwg IlVud2luZEluZm8iLAorICAgICAgKFB5T2JqZWN0ICopICZ1bndpbmRfaW5m b19vYmplY3RfdHlwZSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBwZW5k aW5nX2ZyYW1lX29iamVjdF9tZXRob2RzW10gPQoreworICB7ICJyZWFkX3Jl Z2lzdGVyIiwgcGVuZGluZ19mcmFtZXB5X3JlYWRfcmVnaXN0ZXIsIE1FVEhf VkFSQVJHUywKKyAgICAicmVhZF9yZWdpc3RlciAoUkVHKSAtPiBnZGIuVmFs dWVcbiIKKyAgICAiUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgUkVHIGluIHRo ZSBmcmFtZS4iIH0sCisgIHsgImNyZWF0ZV91bndpbmRfaW5mbyIsCisgICAg cGVuZGluZ19mcmFtZXB5X2NyZWF0ZV91bndpbmRfaW5mbywgTUVUSF9WQVJB UkdTLAorICAgICJjcmVhdGVfdW53aW5kX2luZm8gKEZSQU1FX0lEKSAtPiBn ZGIuVW53aW5kSW5mb1xuIgorICAgICJDb25zdHJ1Y3QgVW53aW5kSW5mbyBm b3IgdGhpcyBQZW5kaW5nRnJhbWUsIHVzaW5nIEZSQU1FX0lEXG4iCisgICAg InRvIGlkZW50aWZ5IGl0LiIgfSwKKyAge05VTEx9ICAvKiBTZW50aW5lbCAq LworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBwZW5kaW5nX2ZyYW1lX29i amVjdF90eXBlID0KK3sKKyAgUHlWYXJPYmplY3RfSEVBRF9JTklUIChOVUxM LCAwKQorICAiZ2RiLlBlbmRpbmdGcmFtZSIsICAgICAgICAgICAgIC8qIHRw X25hbWUgKi8KKyAgc2l6ZW9mIChwZW5kaW5nX2ZyYW1lX29iamVjdCksICAv KiB0cF9iYXNpY3NpemUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRh dHRyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfY29tcGFyZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX3JlcHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9o YXNoICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2NhbGwgKi8KKyAgcGVuZGluZ19mcmFtZXB5X3N0ciwgICAgICAgICAg ICAvKiB0cF9zdHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9nZXRhdHRybyAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgIFB5 X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8K KyAgIkdEQiBQZW5kaW5nRnJhbWUgb2JqZWN0IiwgICAgICAvKiB0cF9kb2Mg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90 cmF2ZXJzZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2NsZWFyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVy bmV4dCAqLworICBwZW5kaW5nX2ZyYW1lX29iamVjdF9tZXRob2RzLCAgIC8q IHRwX21ldGhvZHMgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9tZW1iZXJzICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNj cl9zZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9kaWN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfaW5pdCAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCit9OworCitzdGF0aWMgUHlN ZXRob2REZWYgdW53aW5kX2luZm9fb2JqZWN0X21ldGhvZHNbXSA9Cit7Cisg IHsgImFkZF9zYXZlZF9yZWdpc3RlciIsCisgICAgdW53aW5kX2luZm9weV9h ZGRfc2F2ZWRfcmVnaXN0ZXIsIE1FVEhfVkFSQVJHUywKKyAgICAiYWRkX3Nh dmVkX3JlZ2lzdGVyIChSRUcsIFZBTFVFKSAtPiBOb25lXG4iCisgICAgIlNl dCB0aGUgdmFsdWUgb2YgdGhlIFJFRyBpbiB0aGUgcHJldmlvdXMgZnJhbWUg dG8gVkFMVUUuIiB9LAorICB7IE5VTEwgfSAgLyogU2VudGluZWwgKi8KK307 CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgdW53aW5kX2luZm9fb2JqZWN0X3R5 cGUgPQoreworICBQeVZhck9iamVjdF9IRUFEX0lOSVQgKE5VTEwsIDApCisg ICJnZGIuVW53aW5kSW5mbyIsICAgICAgICAgICAgICAgLyogdHBfbmFtZSAq LworICBzaXplb2YgKHVud2luZF9pbmZvX29iamVjdCksICAgIC8qIHRwX2Jh c2ljc2l6ZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2l0ZW1zaXplICovCisgIHVud2luZF9pbmZvcHlfZGVhbGxvYywg ICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jb21w YXJlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfcmVwciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2FzX251bWJlciAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2Fs bCAqLworICB1bndpbmRfaW5mb3B5X3N0ciwgICAgICAgICAgICAgIC8qIHRw X3N0ciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2dldGF0dHJvICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgUHlfVFBGTEFH U19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qIHRwX2ZsYWdz ICovCisgICJHREIgVW53aW5kSW5mbyBvYmplY3QiLCAgICAgICAgLyogdHBf ZG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9jbGVhciAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVy ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf aXRlcm5leHQgKi8KKyAgdW53aW5kX2luZm9fb2JqZWN0X21ldGhvZHMsICAg ICAvKiB0cF9tZXRob2RzICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0 ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf ZGVzY3Jfc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfZGljdG9mZnNldCAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworfTsKZGlmZiAtLWdp dCBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmggYi9nZGIvcHl0aG9u L3B5dGhvbi1pbnRlcm5hbC5oCmluZGV4IDRjNGQzMmEuLjA1ODFiMzMgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKKysrIGIv Z2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaApAQCAtMzkxLDEyICszOTEs MTQgQEAgUHlPYmplY3QgKnBzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChzdHJ1 Y3QgcHJvZ3JhbV9zcGFjZSAqKQogICAgIENQWUNIRUNLRVJfUkVUVVJOU19C T1JST1dFRF9SRUY7CiBQeU9iamVjdCAqcHNweV9nZXRfcHJpbnRlcnMgKFB5 T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVjdCAqcHNweV9nZXRfZnJhbWVf ZmlsdGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKK1B5T2JqZWN0ICpwc3B5 X2dldF9mcmFtZV91bndpbmRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQ eU9iamVjdCAqcHNweV9nZXRfeG1ldGhvZHMgKFB5T2JqZWN0ICosIHZvaWQg Kik7CiAKIFB5T2JqZWN0ICpvYmpmaWxlX3RvX29iamZpbGVfb2JqZWN0IChz dHJ1Y3Qgb2JqZmlsZSAqKQogICAgIENQWUNIRUNLRVJfUkVUVVJOU19CT1JS T1dFRF9SRUY7CiBQeU9iamVjdCAqb2JqZnB5X2dldF9wcmludGVycyAoUHlP YmplY3QgKiwgdm9pZCAqKTsKIFB5T2JqZWN0ICpvYmpmcHlfZ2V0X2ZyYW1l X2ZpbHRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CitQeU9iamVjdCAqb2Jq ZnB5X2dldF9mcmFtZV91bndpbmRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7 CiBQeU9iamVjdCAqb2JqZnB5X2dldF94bWV0aG9kcyAoUHlPYmplY3QgKiwg dm9pZCAqKTsKIFB5T2JqZWN0ICpnZGJweV9sb29rdXBfb2JqZmlsZSAoUHlP YmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpOwog CkBAIC00OTEsNiArNDkzLDggQEAgaW50IGdkYnB5X2luaXRpYWxpemVfYXJj aCAodm9pZCkKICAgQ1BZQ0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRfU0VUU19F WENFUFRJT047CiBpbnQgZ2RicHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAodm9p ZCkKICAgQ1BZQ0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRfU0VUU19FWENFUFRJ T047CitpbnQgZ2RicHlfaW5pdGlhbGl6ZV91bndpbmQgKHZvaWQpCisgIENQ WUNIRUNLRVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogCiBz dHJ1Y3QgY2xlYW51cCAqbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoUHlPYmpl Y3QgKnB5KTsKIHN0cnVjdCBjbGVhbnVwICptYWtlX2NsZWFudXBfcHlfeGRl Y3JlZiAoUHlPYmplY3QgKnB5KTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24v cHl0aG9uLmMgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IDU4YzdjOTIu LjFkYTYzZmQgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysr IGIvZ2RiL3B5dGhvbi9weXRob24uYwpAQCAtMTgyMSw3ICsxODIxLDggQEAg bWVzc2FnZSA9PSBhbiBlcnJvciBtZXNzYWdlIHdpdGhvdXQgYSBzdGFjayB3 aWxsIGJlIHByaW50ZWQuIiksCiAgICAgICB8fCBnZGJweV9pbml0aWFsaXpl X25ld19vYmpmaWxlX2V2ZW50ICgpICA8IDAKICAgICAgIHx8IGdkYnB5X2lu aXRpYWxpemVfY2xlYXJfb2JqZmlsZXNfZXZlbnQgKCkgIDwgMAogICAgICAg fHwgZ2RicHlfaW5pdGlhbGl6ZV9hcmNoICgpIDwgMAotICAgICAgfHwgZ2Ri cHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAoKSA8IDApCisgICAgICB8fCBnZGJw eV9pbml0aWFsaXplX3htZXRob2RzICgpIDwgMAorICAgICAgfHwgZ2RicHlf aW5pdGlhbGl6ZV91bndpbmQgKCkgPCAwKQogICAgIGdvdG8gZmFpbDsKIAog ICBnZGJweV90b19zdHJpbmdfY3N0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyAo InRvX3N0cmluZyIpOwpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LXVud2luZC1tYWludC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LXVud2luZC1tYWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjhjMWQ5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmMKQEAg LTAsMCArMSwyNCBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdE QiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgaW50IGkg PSAwOworCisgIHJldHVybiBpOyAvKiBuZXh0LWxpbmUgKi8KK30KZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFp bnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC1t YWludC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u M2IwZTAyMQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS11bndpbmQtbWFpbnQuZXhwCkBAIC0wLDAgKzEsNjQgQEAK KyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgUHl0aG9uLWJh c2VkCisjIHVud2luZGluZyBDTEkuCisKK2xvYWRfbGliIGdkYi1weXRob24u ZXhwCisKK3N0YW5kYXJkX3Rlc3RmaWxlCisKK2lmIHtbcHJlcGFyZV9mb3Jf dGVzdGluZyAke3Rlc3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxl fV0gfSB7CisgICAgcmV0dXJuIC0xCit9CisKKyMgU2tpcCBhbGwgdGVzdHMg aWYgUHl0aG9uIHNjcmlwdGluZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsgW3Nr aXBfcHl0aG9uX3Rlc3RzXSB9IHsgY29udGludWUgfQorCitzZXQgcHlmaWxl IFtnZGJfcmVtb3RlX2Rvd25sb2FkIGhvc3QgJHtzcmNkaXJ9LyR7c3ViZGly fS8ke3Rlc3RmaWxlfS5weV0KKworaWYgIVtydW50b19tYWluIF0gdGhlbiB7 CisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4iCisgICAgcmV0dXJuIC0x Cit9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHtweWZpbGV9IiAiUHl0aG9uIHNj cmlwdCBpbXBvcnRlZCIgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworZ2Ri X3Rlc3Rfc2VxdWVuY2UgImluZm8gdW53aW5kZXIiICJTaG93IGFsbCB1bndp bmRlcnMiIHsKKyAgICAiR2xvYmFsOiIKKyAgICAiICBnbG9iYWxfdW53aW5k ZXIiCisgICAgIlByb2dzcGFjZSAuKnB5LXVud2luZC1tYWludDoiCisgICAg InB5X3Vud2luZF9tYWludF9wc191bndpbmRlciIKK30KKworZ2RiX2JyZWFr cG9pbnQgJHtzcmNmaWxlfTpbZ2RiX2dldF9saW5lX251bWJlciAibmV4dC1s aW5lIl0KKworZ2RiX3Rlc3Rfc2VxdWVuY2UgImNvbnRpbnVlIiAiVW53aW5k ZXJzIGNhbGxlZCIgeworICAgICJweV91bndpbmRfbWFpbnRfcHNfdW53aW5k ZXIgY2FsbGVkIgorICAgICJnbG9iYWxfdW53aW5kZXIgY2FsbGVkIgorfQor CitnZGJfdGVzdCAiZGlzYWJsZSB1bndpbmRlciBnbG9iYWwgLioiICIxIHVu d2luZGVyIGRpc2FibGVkIiAiVW53aW5kZXIgZGlzYWJsZWQiCisKK2dkYl90 ZXN0X3NlcXVlbmNlICJpbmZvIHVud2luZGVyIiAiU2hvdyB3aXRoIGdsb2Jh bCB1bndpbmRlciBkaXNhYmxlZCIgeworICAgICJHbG9iYWw6IgorICAgICIg IGdsb2JhbF91bndpbmRlciBcXFtkaXNhYmxlZFxcXSIKKyAgICAiUHJvZ3Nw YWNlIC4qcHktdW53aW5kLW1haW50OiIKKyAgICAiICBweV91bndpbmRfbWFp bnRfcHNfdW53aW5kZXIiCit9CisKK2dkYl90ZXN0X3NlcXVlbmNlICJ3aGVy ZSIgIkdsb2JhbCB1bndpbmRlciBkaXNhYmxlZCIgeworICAgICJweV91bndp bmRfbWFpbnRfcHNfdW53aW5kZXIgY2FsbGVkXHJcbiMwICBtYWluIgorfQpk aWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2lu ZC1tYWludC5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndp bmQtbWFpbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZjhjNjI3NwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQucHkKQEAgLTAsMCArMSw1OSBA QAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlz IHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBweXRob24g dW53aW5kZXJzLgorCitpbXBvcnQgcmUKK2ltcG9ydCBnZGIudHlwZXMKK2Zy b20gZ2RiLnVud2luZGVyIGltcG9ydCBVbndpbmRlciwgcmVnaXN0ZXJfdW53 aW5kZXIKKworY2xhc3MgVGVzdEdsb2JhbFVud2luZGVyKFVud2luZGVyKToK KyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RH bG9iYWxVbndpbmRlciwgc2VsZikuX19pbml0X18oImdsb2JhbF91bndpbmRl ciIpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgdW53aW5kZXJfaW5mbyk6 CisgICAgICAgIHByaW50ICIlcyBjYWxsZWQiICUgc2VsZi5uYW1lCisgICAg ICAgIHJldHVybiBOb25lCisKK2NsYXNzIFRlc3RQcm9nc3BhY2VVbndpbmRl cihVbndpbmRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgor ICAgICAgICBzdXBlcihUZXN0UHJvZ3NwYWNlVW53aW5kZXIsIHNlbGYpLl9f aW5pdF9fKCIlc19wc191bndpbmRlciIgJSBuYW1lKQorCisgICAgZGVmIF9f Y2FsbF9fKHNlbGYsIHVud2luZGVyX2luZm8pOgorICAgICAgICBwcmludCAi JXMgY2FsbGVkIiAlIHNlbGYubmFtZQorICAgICAgICByZXR1cm4gTm9uZQor CitjbGFzcyBUZXN0T2JqZmlsZVVud2luZGVyKFVud2luZGVyKToKKyAgICBk ZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHN1cGVyKFRlc3RP YmpmaWxlVW53aW5kZXIsIHNlbGYpLl9faW5pdF9fKCIlc19vYmpfdW53aW5k ZXIiICUgbmFtZSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB1bndpbmRl cl9pbmZvKToKKyAgICAgICAgcHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxmLm5h bWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCisKK2dkYi51bndpbmRlci5y ZWdpc3Rlcl91bndpbmRlcihOb25lLCBUZXN0R2xvYmFsVW53aW5kZXIoKSkK K3Nhd19ydW50aW1lX2Vycm9yID0gRmFsc2UKK3RyeToKKyAgICBnZGIudW53 aW5kZXIucmVnaXN0ZXJfdW53aW5kZXIoTm9uZSwgVGVzdEdsb2JhbFVud2lu ZGVyKCksIHJlcGxhY2U9RmFsc2UpCitleGNlcHQgUnVudGltZUVycm9yOgor ICAgIHNhd19ydW50aW1lX2Vycm9yID0gVHJ1ZQoraWYgbm90IHNhd19ydW50 aW1lX2Vycm9yOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTWlzc2luZyBy dW50aW1lIGVycm9yIGZyb20gcmVnaXN0ZXJfdW53aW5kZXIuIikKK2dkYi51 bndpbmRlci5yZWdpc3Rlcl91bndpbmRlcihOb25lLCBUZXN0R2xvYmFsVW53 aW5kZXIoKSwgcmVwbGFjZT1UcnVlKQorZ2RiLnVud2luZGVyLnJlZ2lzdGVy X3Vud2luZGVyKGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRlc3RQcm9nc3BhY2VVbndpbmRlcigi cHlfdW53aW5kX21haW50IikpCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBv cnRlZCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS11bndpbmQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndp bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQx ZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LXVud2luZC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIFRoaXMgdGVz dCBwcm9ncmFtIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgor CisgICBDb3B5cmlnaHQgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhp cyBpcyB0aGUgdGVzdCBwcm9ncmFtIGxvYWRlZCBpbnRvIEdEQiBieSB0aGUg cHktdW53aW5kIHRlc3QuICAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworc3Rh dGljIHZvaWQgKgorc3dhcF92YWx1ZSAodm9pZCAqKmxvY2F0aW9uLCB2b2lk ICpuZXdfdmFsdWUpCit7CisgIHZvaWQgKm9sZF92YWx1ZSA9ICpsb2NhdGlv bjsKKyAgKmxvY2F0aW9uID0gbmV3X3ZhbHVlOworICByZXR1cm4gb2xkX3Zh bHVlOworfQorCitzdGF0aWMgdm9pZAorYmFkX2xheW91dCh2b2lkICoqdmFy aWFibGVfcHRyLCB2b2lkICpmcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAi Rmlyc3QgdmFyaWFibGUgc2hvdWxkIGJlIGFsbG9jYXRlZCBvbmUgd29yZCBi ZWxvdyAiCisgICAgICAgICAgICJ0aGUgZnJhbWUuICBHb3QgdmFyaWFibGUn cyBhZGRyZXNzICVwLCBmcmFtZSBhdCAlcCBpbnN0ZWFkLlxuIiwKKyAgICAg ICAgICAgdmFyaWFibGVfcHRyLCBmcCk7CisgIGFib3J0KCk7Cit9CisKKyNk ZWZpbmUgTVlfRlJBTUUgKF9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzICgwKSkK Kworc3RhdGljIHZvaWQKK2NvcnJ1cHRfZnJhbWVfaW5uZXIgKHZvaWQpCit7 CisgIC8qIFNhdmUgb3V0ZXIgZnJhbWUgYWRkcmVzcywgdGhlbiBjb3JydXB0 IHRoZSB1bndpbmQgY2hhaW4gYnkKKyAgICAgc2V0dGluZyB0aGUgb3V0ZXIg ZnJhbWUgYWRkcmVzcyBpbiBpdCB0byBzZWxmLiAgVGhpcyBpcworICAgICBB Qkktc3BlY2lmaWM6IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBmcmFtZSBjb250 YWlucyBwcmV2aW91cyBmcmFtZQorICAgICBhZGRyZXNzIGluIGFtZDY0LiAg Ki8KKyAgdm9pZCAqcHJldmlvdXNfZnAgPSBzd2FwX3ZhbHVlICgodm9pZCAq KikgTVlfRlJBTUUsIE1ZX0ZSQU1FKTsKKworICAvKiBWZXJpZnkgdGhlIGNv bXBpbGVyIGFsbG9jYXRlcyB0aGUgZmlyc3QgbG9jYWwgdmFyaWFibGUgb25l IHdvcmQKKyAgICAgYmVsb3cgZnJhbWUuICBUaGlzIGlzIHdoZXJlIHRoZSB0 ZXN0IHVud2luZGVyIGV4cGVjdHMgdG8gZmluZCB0aGUKKyAgICAgY29ycmVj dCBvdXRlciBmcmFtZSBhZGRyZXNzLiAgKi8KKyAgaWYgKCZwcmV2aW91c19m cCArIDEgIT0gKHZvaWQgKiopIE1ZX0ZSQU1FKQorICAgIGJhZF9sYXlvdXQg KCZwcmV2aW91c19mcCArIDEsIE1ZX0ZSQU1FKTsKKworICAvKiBOb3cgcmVz dG9yZSBpdCBzbyB0aGF0IHdlIGNhbiByZXR1cm4uICBUaGUgdGVzdCBzZXRz IHRoZQorICAgICBicmVha3BvaW50IGp1c3QgYmVmb3JlIHRoaXMgaGFwcGVu cywgYW5kIEdEQiB3aWxsIG5vdCBiZSBhYmxlIHRvCisgICAgIHNob3cgdGhl IGJhY2t0cmFjZSB3aXRob3V0IEpJVCByZWFkZXIuICAqLworICBzd2FwX3Zh bHVlICgodm9pZCAqKikgTVlfRlJBTUUsIHByZXZpb3VzX2ZwKTsgLyogYnJl YWsgYmFja3RyYWNlLWJyb2tlbiAqLworfQorCitzdGF0aWMgdm9pZAorY29y cnVwdF9mcmFtZV9vdXRlciAodm9pZCkKK3sKKyAgLyogU2VlIGFib3ZlIGZv ciB0aGUgZXhwbGFuYXRpb24gb2YgdGhlIGNvZGUgaGVyZS4gIFRoaXMgZnVu Y3Rpb24KKyAgICAgY29ycnVwdHMgaXRzIGZyYW1lLCB0b28sIGFuZCB0aGVu IGNhbGxzIHRoZSBpbm5lciBvbmUuICAqLworICB2b2lkICpwcmV2aW91c19m cCA9IHN3YXBfdmFsdWUgKCh2b2lkICoqKSBNWV9GUkFNRSwgTVlfRlJBTUUp OworICBpZiAoJnByZXZpb3VzX2ZwICsgMSAhPSAodm9pZCAqKikgTVlfRlJB TUUpCisgICAgYmFkX2xheW91dCAoJnByZXZpb3VzX2ZwLCBNWV9GUkFNRSk7 CisgIGNvcnJ1cHRfZnJhbWVfaW5uZXIgKCk7CisgIHN3YXBfdmFsdWUgKCh2 b2lkICoqKSBNWV9GUkFNRSwgcHJldmlvdXNfZnApOworfQorCitpbnQKK21h aW4gKCkKK3sKKyAgY29ycnVwdF9mcmFtZV9vdXRlciAoKTsKKyAgcmV0dXJu IDA7Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktdW53aW5kLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11 bndpbmQuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjUzZDY3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktdW53aW5kLmV4cApAQCAtMCwwICsxLDU0IEBACisjIENv cHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHZlcmlmaWVzIHRoYXQgZnJhbWUK KyMgdW53aW5kZXJzIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBQeXRob24uCisK K2xvYWRfbGliIGdkYi1weXRob24uZXhwCisKK3N0YW5kYXJkX3Rlc3RmaWxl CisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0uZXhw ICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAgIHJldHVybiAtMQor fQorCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMg bm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNv bnRpbnVlIH0KKworIyBUaGlzIHRlc3QgcnVucyBvbiBhIHNwZWNpZmljIHBs YXRmb3JtLgoraWYgeyAhIFtpc3RhcmdldCB4ODZfNjQtKl19IHsgY29udGlu dWUgfQorCisjIFRoZSBmb2xsb3dpbmcgdGVzdHMgcmVxdWlyZSBleGVjdXRp b24uCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fu J3QgcnVuIHRvIG1haW4iCisgICAgcmV0dXJuIDAKK30KKworc2V0IHB5Zmls ZSBbZ2RiX3JlbW90ZV9kb3dubG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRp cn0vJHt0ZXN0ZmlsZX0ucHldCisKK2dkYl9icmVha3BvaW50IFtnZGJfZ2V0 X2xpbmVfbnVtYmVyICJicmVhayBiYWNrdHJhY2UtYnJva2VuIl0KKworZ2Ri X3Rlc3QgInNvdXJjZSAke3B5ZmlsZX0iICJQeXRob24gc2NyaXB0IGltcG9y dGVkIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitn ZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiYnJlYWsgYmFja3RyYWNlLWJy b2tlbiIKK2dkYl90ZXN0X3NlcXVlbmNlICJ3aGVyZSIgICJCYWNrdHJhY2Ug cmVzdG9yZWQgYnkgdW53aW5kZXIiIHsKKyAgICAiXFxyXFxuIzAgLiogY29y cnVwdF9mcmFtZV9pbm5lciBcXChcXCkgYXQgIgorICAgICJcXHJcXG4jMSAu KiBjb3JydXB0X2ZyYW1lX291dGVyIFxcKFxcKSBhdCAiCisgICAgIlxcclxc biMyIC4qIG1haW4gXFwoLipcXCkgYXQiCit9CisKKwpkaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5weSBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQucHkKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1N2ZkNwotLS0gL2Rldi9udWxs CisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQucHkK QEAgLTAsMCArMSw5OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK K2ltcG9ydCBnZGIKK2Zyb20gZ2RiLnVud2luZGVyIGltcG9ydCBVbndpbmRl cgorCitjbGFzcyBGcmFtZUlkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0 X18oc2VsZiwgc3AsIHBjKToKKyAgICAgICAgc2VsZi5fc3AgPSBzcAorICAg ICAgICBzZWxmLl9wYyA9IHBjCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYg c3Aoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zcAorCisgICAgQHBy b3BlcnR5CisgICAgZGVmIHBjKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs Zi5fcGMKKworCitjbGFzcyBUZXN0VW53aW5kZXIoVW53aW5kZXIpOgorICAg IEFNRDY0X1JCUCA9IDYKKyAgICBBTUQ2NF9SU1AgPSA3CisgICAgQU1ENjRf UklQID0gMTYKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAg VW53aW5kZXIuX19pbml0X18oc2VsZiwgInRlc3QgdW53aW5kZXIiKQorICAg ICAgICBzZWxmLmNoYXJfcHRyX3QgPSBnZGIubG9va3VwX3R5cGUoInVuc2ln bmVkIGNoYXIiKS5wb2ludGVyKCkKKyAgICAgICAgc2VsZi5jaGFyX3B0cl9w dHJfdCA9IHNlbGYuY2hhcl9wdHJfdC5wb2ludGVyKCkKKworICAgIGRlZiBf cmVhZF93b3JkKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICByZXR1cm4gYWRk cmVzcy5jYXN0KHNlbGYuY2hhcl9wdHJfcHRyX3QpLmRlcmVmZXJlbmNlKCkK KworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwZW5kaW5nX2ZyYW1lKToKKyAg ICAgICAgIiIiVGVzdCB1bndpbmRlciB3cml0dGVuIGluIFB5dGhvbi4KKwor ICAgICAgICBUaGlzIHVud2luZGVyIGNhbiB1bndpbmQgdGhlIGZyYW1lcyB0 aGF0IGhhdmUgYmVlbiBkZWxpYmVyYXRlbHkKKyAgICAgICAgY29ycnVwdGVk IGluIGEgc3BlY2lmaWMgd2F5IChmdW5jdGlvbnMgaW4gdGhlIGFjY29tcGFu eWluZworICAgICAgICBweS11bndpbmQuYyBmaWxlIGRvIHRoYXQuKQorICAg ICAgICBUaGlzIGNvZGUgaXMgb25seSBvbiBBTUQ2NC4KKyAgICAgICAgT24g QU1ENjQgJFJCUCBwb2ludHMgdG8gdGhlIGlubmVybW9zdCBmcmFtZSAodW5s ZXNzIHRoZSBjb2RlCisgICAgICAgIHdhcyBjb21waWxlZCB3aXRoIC1mb21p dC1mcmFtZS1wb2ludGVyKSwgd2hpY2ggY29udGFpbnMgdGhlCisgICAgICAg IGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGZyYW1lIGF0IG9mZnNldCAwLiBU aGUgZnVuY3Rpb25zCisgICAgICAgIGRlbGliZXJhdGVseSBjb3JydXB0IHRo ZWlyIGZyYW1lcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAg QmVmb3JlICAgICAgICAgICAgICAgICBBZnRlcgorICAgICAgICAgICAgICAg ICAgIENvcnJ1cHRpb246ICAgICAgICAgICBDb3JydXB0aW9uOgorICAgICAg ICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgKy0tLS0tLS0tLS0t LS0tKworICAgICAgICBSQlAtOCAgIHwgICAgICAgICAgICAgIHwgICAgICAg fCBQcmV2aW91cyBSQlAgfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tLSsgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAgICBSQlAgICAg ICsgUHJldmlvdXMgUkJQIHwgICAgICAgfCAgICBSQlAgICAgICAgfAorICAg ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgKy0tLS0tLS0t LS0tLS0tKworICAgICAgICBSQlArOCAgIHwgUmV0dXJuIFJJUCAgIHwgICAg ICAgfCBSZXR1cm4gIFJJUCAgfAorICAgICAgICAgICAgICAgICstLS0tLS0t LS0tLS0tLSsgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICAgICAgICBPbGQg U1AgIHwgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgfAor CisgICAgICAgIFRoaXMgdW53aW5kZXIgcmVjb2duaXplcyB0aGUgY29ycnVw dCBmcmFtZXMgYnkgY2hlY2tpbmcgdGhhdAorICAgICAgICAqUkJQID09IFJC UCwgYW5kIHJlc3RvcmVzIHByZXZpb3VzIFJCUCBmcm9tIHRoZSB3b3JkIGFi b3ZlIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg ICAgIyBOT1RFOiB0aGUgcmVnaXN0ZXJzIGluIFVud2luZGVyIEFQSSBjYW4g YmUgcmVmZXJlbmNlZAorICAgICAgICAgICAgIyBlaXRoZXIgYnkgbmFtZSBv ciBieSBudW1iZXIuIFRoZSBjb2RlIGJlbG93IHVzZXMgYm90aAorICAgICAg ICAgICAgIyB0byBhY2hpZXZlIG1vcmUgY292ZXJhZ2UuCisgICAgICAgICAg ICBicCA9IHBlbmRpbmdfZnJhbWUucmVhZF9yZWdpc3RlcigicmJwIikuY2Fz dChzZWxmLmNoYXJfcHRyX3QpCisgICAgICAgICAgICBpZiBzZWxmLl9yZWFk X3dvcmQoYnApICE9IGJwOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25l CisgICAgICAgICAgICAjIEZvdW5kIHRoZSBmcmFtZSB0aGF0IHRoZSB0ZXN0 IHByb2dyYW0gaGFzIGNvcnJ1cHRlZCBmb3IgdXMuCisgICAgICAgICAgICAj IFRoZSBjb3JyZWN0IEJQIGZvciB0aGUgb3V0ZXIgZnJhbWUgaGFzIGJlZW4g c2F2ZWQgb25lIHdvcmQKKyAgICAgICAgICAgICMgYWJvdmUsIHByZXZpb3Vz IElQIGFuZCBTUCBhcmUgYXQgdGhlIGV4cGVjdGVkIHBsYWNlcy4KKyAgICAg ICAgICAgIHByZXZpb3VzX2JwID0gc2VsZi5fcmVhZF93b3JkKGJwIC0gOCkK KyAgICAgICAgICAgIHByZXZpb3VzX2lwID0gc2VsZi5fcmVhZF93b3JkKGJw ICsgOCkKKyAgICAgICAgICAgIHByZXZpb3VzX3NwID0gYnAgKyAxNgorCisg ICAgICAgICAgICBmcmFtZV9pZCA9IEZyYW1lSWQoCisgICAgICAgICAgICAg ICAgcGVuZGluZ19mcmFtZS5yZWFkX3JlZ2lzdGVyKFRlc3RVbndpbmRlci5B TUQ2NF9SU1ApLAorICAgICAgICAgICAgICAgIHBlbmRpbmdfZnJhbWUucmVh ZF9yZWdpc3RlcihUZXN0VW53aW5kZXIuQU1ENjRfUklQKSkKKyAgICAgICAg ICAgIHVud2luZF9pbmZvID0gcGVuZGluZ19mcmFtZS5jcmVhdGVfdW53aW5k X2luZm8oZnJhbWVfaWQpCisgICAgICAgICAgICB1bndpbmRfaW5mby5hZGRf c2F2ZWRfcmVnaXN0ZXIoVGVzdFVud2luZGVyLkFNRDY0X1JCUCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91 c19icCkKKyAgICAgICAgICAgIHVud2luZF9pbmZvLmFkZF9zYXZlZF9yZWdp c3RlcigicmlwIiwgcHJldmlvdXNfaXApCisgICAgICAgICAgICB1bndpbmRf aW5mby5hZGRfc2F2ZWRfcmVnaXN0ZXIoInJzcCIsIHByZXZpb3VzX3NwKQor ICAgICAgICAgICAgcmV0dXJuIHVud2luZF9pbmZvCisgICAgICAgIGV4Y2Vw dCAoZ2RiLmVycm9yLCBSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcmV0 dXJuIE5vbmUKKworZ2RiLnVud2luZGVyLnJlZ2lzdGVyX3Vud2luZGVyKE5v bmUsIFRlc3RVbndpbmRlcigpLCBUcnVlKQorcHJpbnQoIlB5dGhvbiBzY3Jp cHQgaW1wb3J0ZWQiKQo= --90e6ba5bbb05ee88bf05124ee9e9--