Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1reZgE-00C76T-UV for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Feb 2024 12:01:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1reZgC-00D2iZ-QQ for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Feb 2024 12:01:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1reZgC-00D2iQ-Cv for pgsql-hackers@lists.postgresql.org; Mon, 26 Feb 2024 12:01:57 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1reZg7-001941-Ca for pgsql-hackers@lists.postgresql.org; Mon, 26 Feb 2024 12:01:55 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 116BE6098F; Mon, 26 Feb 2024 21:01:45 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_673ae07e8590221f415eaaf53b6bea87" Content-Transfer-Encoding: 8bit Date: Mon, 26 Feb 2024 21:01:45 +0900 From: torikoshia To: Robert Haas Cc: Julien Rouhaud , James Coleman , Andres Freund , pgsql-hackers@lists.postgresql.org, =?UTF-8?Q?=C3=89tienne_BERSAC?= , ashutosh.bapat.oss@gmail.com, rafaelthca@gmail.com, jian.universality@gmail.com Subject: Re: RFC: Logging plan of the running query In-Reply-To: References: <61b4add9a01f21011789b6ee04085751@oss.nttdata.com> <3d5fd6d955944b5e8e4b8d1917f14885@oss.nttdata.com> <67fac921c935d7b9db51609a7599520f@oss.nttdata.com> <20240215185911.v4o6fo444md6a3w7@awork3.anarazel.de> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <2c9a3fd390d653f1829b795d0bad4653@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_673ae07e8590221f415eaaf53b6bea87 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2024-02-24 00:23, Robert Haas wrote: > On Fri, Feb 23, 2024 at 7:50 PM Julien Rouhaud > wrote: >> On Fri, Feb 23, 2024 at 10:22:32AM +0530, Robert Haas wrote: >> > On Thu, Feb 22, 2024 at 6:25 AM James Coleman wrote: >> > > This is potentially a bit of a wild idea, but I wonder if having some >> > > kind of argument to CHECK_FOR_INTERRUPTS() signifying we're in >> > > "normal" as opposed to "critical" (using that word differently than >> > > the existing critical sections) would be worth it. >> > >> > It's worth considering, but the definition of "normal" vs. "critical" >> > might be hard to pin down. Or, we might end up with a definition that >> > is specific to this particular case and not generalizable to others. >> >> But it doesn't have to be all or nothing right? I mean each call >> could say >> what the situation is like in their context, like >> CHECK_FOR_INTERRUPTS(GUARANTEE_NO_HEAVYWEIGHT_LOCK | >> GUARANTEE_WHATEVER), and >> slowly tag calls as needed, similarly to how we add already CFI based >> on users >> report. > > Absolutely. My gut feeling is that it's going to be simpler to pick a > small number of places that are safe and sufficient for this > particular feature and add an extra call there Hmm, whether extending CHECK_FOR_INTERRUPTS() or adding extras call directly, currently I'm not sure where are the good 'places', which don't give performance impact. As attached PoC patch, I experimentally added extra calls on ExecScanFetch() which would be less called than ExecProcNode()[1]. When running sequential scan on pgbench_accounts which is on the memory, there seems a performance degradation. - Executed "select * from pgbench_accounts" for 20 times - Compared the elapsed time between the patch applied and not applied on 874d817baa160ca7e68 - there were no heap_blks_read during the query - pgbench_accounts has 3000000 rows patch NOT applied: - average: 335.88 ms - max: 367.313 ms - min: 309.609 ms patch applied: - average: 342.57 ms - max: 380.099 ms - min: 324.270 ms It would be nice if there was a place accessed once every few seconds or so.. [1] https://www.postgresql.org/message-id/20240215185911.v4o6fo444md6a3w7%40awork3.anarazel.de -- Regards, -- Atsushi Torikoshi NTT DATA Group Corporation --=_673ae07e8590221f415eaaf53b6bea87 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v37-0001-Add-function-to-log-the-plan-of-the-query.patch Content-Disposition: attachment; filename=v37-0001-Add-function-to-log-the-plan-of-the-query.patch; size=33207 RnJvbSBkZWUxY2U4NTdjODliZjY0NmZmOThmOTRjODQ2NzQ2Yjk2ODY5ZWJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMjYgRmViIDIwMjQgMTk6MTk6MzUgKzA5MDAKU3ViamVjdDog W1BBVENIIHYzN10gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgcXVlcnkKCkN1 cnJlbnRseSwgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgcXVlcnkgZXhlY3V0aW9uIHRvIGZpbmlz aAp0byBjaGVjayBpdHMgcGxhbi4gVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCB3aGVuCmludmVz dGlnYXRpbmcgbG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMK d2hlcmUgd2UgY2Fubm90IHVzZSBkZWJ1Z2dlcnMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24s IHRoaXMgcGF0Y2ggYWRkcwpwZ19sb2dfcXVlcnlfcGxhbigpIGZ1bmN0aW9uIHRoYXQgcmVxdWVz dHMgdG8gbG9nIHRoZQpwbGFuIG9mIHRoZSBzcGVjaWZpZWQgYmFja2VuZCBwcm9jZXNzLgoKQnkg ZGVmYXVsdCwgb25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHJlcXVlc3QgdG8gbG9nIHRo ZQpwbGFucyBiZWNhdXNlIGFsbG93aW5nIGFueSB1c2VycyB0byBpc3N1ZSB0aGlzIHJlcXVlc3Qg YXQgYW4KdW5ib3VuZGVkIHJhdGUgd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVzc2FnZXMgYW5k IHdoaWNoIGNhbgpsZWFkIHRvIGRlbmlhbCBvZiBzZXJ2aWNlLgoKT24gcmVjZWlwdCBvZiB0aGUg cmVxdWVzdCwgYXQgdGhlIG5leHQKQ0hFQ0tfTE9HX1FVRVJZX1BMQU5fUEVORElORygpIHRoZSB0 YXJnZXQgYmFja2VuZCBsb2dzIGl0cwpwbGFuIGF0IExPR19TRVJWRVJfT05MWSBsZXZlbCwgc28g dGhhdCB0aGVzZSBwbGFucyB3aWxsIGFwcGVhcgppbiB0aGUgc2VydmVyIGxvZyBidXQgbm90IGJl IHNlbnQgdG8gdGhlIGNsaWVudC4KCkNIRUNLX0xPR19RVUVSWV9QTEFOX1BFTkRJTkcoKSBpcyBj YWxsZWQgZnJvbSBFeGVjU2NhbkZldGNoKCkKYW5kIFByb2Nlc3NDbGllbnRSZWFkSW50ZXJydXB0 KCkuIFRoZSBmb3JtZXIgaXMgaW50ZW5kZWQgdG8KbG9nIHBsYW5zIGR1cmluZyBhbnkga2luZCBv ZiBzY2FucyBhbmQgdGhlIGxhdHRlciBpcyBpbnRlbmRlZAp0byBsb2cgdGhhdCB0aGUgbm8gcXVl cnkgaXMgZXhlY3V0aW5nIGR1cmluZyBjbGllbnQgcmVhZC4KCi0tLQogY29udHJpYi9hdXRvX2V4 cGxhaW4vTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICsKIGNvbnRyaWIvYXV0b19leHBs YWluL2F1dG9fZXhwbGFpbi5jICAgICAgICAgICB8ICAyMyArLS0KIGNvbnRyaWIvYXV0b19leHBs YWluL3QvMDAxX2F1dG9fZXhwbGFpbi5wbCAgICB8ICAzNSArKysrCiBkb2Mvc3JjL3NnbWwvZnVu Yy5zZ21sICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTAgKysrKysKIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAgICAgICB8ICAxOSArKwogc3JjL2JhY2tlbmQvY2F0 YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8IDE3NiArKysrKysrKysrKysrKysrKy0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAgICAgICAgICAgICB8ICAxOSArKwogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NjYW4uYyAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgICB8ICAgNCArCiBzcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tl bmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9j b21tYW5kcy9leHBsYWluLmggICAgICAgICAgICAgICAgfCAgMTYgKysKIHNyYy9pbmNsdWRlL21p c2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9w cXVlcnkuaCAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9l bG9nLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL2luamVjdGlvbl9wb2ludHMv aW5qZWN0aW9uX3BvaW50cy5jICAgICAgIHwgIDExICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL21pc2NfZnVuY3Rpb25zLm91dCAgfCAgNTQgKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9taXNjX2Z1bmN0aW9ucy5zcWwgICAgICAgfCAgNDEgKysrLQogMjEgZmlsZXMgY2hhbmdlZCwg NDMwIGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv YXV0b19leHBsYWluL01ha2VmaWxlIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vTWFrZWZpbGUKaW5k ZXggZWZkMTI3ZDNjYS4uNjRmZTBlMDU3MyAxMDA2NDQKLS0tIGEvY29udHJpYi9hdXRvX2V4cGxh aW4vTWFrZWZpbGUKKysrIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vTWFrZWZpbGUKQEAgLTgsNiAr OCw4IEBAIFBHRklMRURFU0MgPSAiYXV0b19leHBsYWluIC0gbG9nZ2luZyBmYWNpbGl0eSBmb3Ig ZXhlY3V0aW9uIHBsYW5zIgogCiBUQVBfVEVTVFMgPSAxCiAKK0VYVFJBX0lOU1RBTEwgPSBzcmMv dGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMKKwogaWZkZWYgVVNFX1BHWFMKIFBHX0NPTkZJ RyA9IHBnX2NvbmZpZwogUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCmRpZmYg LS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYyBiL2NvbnRyaWIvYXV0 b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCmluZGV4IDY3N2MxMzVmNTkuLmUwNDFiMTBiMGUgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCisrKyBiL2NvbnRy aWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCkBAIC00MDEsMjYgKzQwMSw5IEBAIGV4cGxh aW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCQllcy0+Zm9ybWF0ID0gYXV0 b19leHBsYWluX2xvZ19mb3JtYXQ7CiAJCQllcy0+c2V0dGluZ3MgPSBhdXRvX2V4cGxhaW5fbG9n X3NldHRpbmdzOwogCi0JCQlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOwotCQkJRXhwbGFpblF1ZXJ5 VGV4dChlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoZXMsIHF1ZXJ5 RGVzYy0+cGFyYW1zLCBhdXRvX2V4cGxhaW5fbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoKTsKLQkJ CUV4cGxhaW5QcmludFBsYW4oZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlpZiAoZXMtPmFuYWx5emUgJiYg YXV0b19leHBsYWluX2xvZ190cmlnZ2VycykKLQkJCQlFeHBsYWluUHJpbnRUcmlnZ2Vycyhlcywg cXVlcnlEZXNjKTsKLQkJCWlmIChlcy0+Y29zdHMpCi0JCQkJRXhwbGFpblByaW50SklUU3VtbWFy eShlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5FbmRPdXRwdXQoZXMpOwotCi0JCQkvKiBSZW1v dmUgbGFzdCBsaW5lIGJyZWFrICovCi0JCQlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+c3Ry LT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID09ICdcbicpCi0JCQkJZXMtPnN0ci0+ZGF0YVstLWVz LT5zdHItPmxlbl0gPSAnXDAnOwotCi0JCQkvKiBGaXggSlNPTiB0byBvdXRwdXQgYW4gb2JqZWN0 ICovCi0JCQlpZiAoYXV0b19leHBsYWluX2xvZ19mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfSlNP TikKLQkJCXsKLQkJCQllcy0+c3RyLT5kYXRhWzBdID0gJ3snOwotCQkJCWVzLT5zdHItPmRhdGFb ZXMtPnN0ci0+bGVuIC0gMV0gPSAnfSc7Ci0JCQl9CisJCQlFeHBsYWluQXNzZW1ibGVMb2dPdXRw dXQoZXMsIHF1ZXJ5RGVzYywgYXV0b19leHBsYWluX2xvZ19mb3JtYXQsCisJCQkJCQkJCQkgYXV0 b19leHBsYWluX2xvZ190cmlnZ2VycywKKwkJCQkJCQkJCSBhdXRvX2V4cGxhaW5fbG9nX3BhcmFt ZXRlcl9tYXhfbGVuZ3RoKTsKIAogCQkJLyoKIAkJCSAqIE5vdGU6IHdlIHJlbHkgb24gdGhlIGV4 aXN0aW5nIGxvZ2dpbmcgb2YgY29udGV4dCBvcgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4 cGxhaW4vdC8wMDFfYXV0b19leHBsYWluLnBsIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vdC8wMDFf YXV0b19leHBsYWluLnBsCmluZGV4IDBlNWIzNGFmYTkuLjM2YTc4NzE3NGUgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvYXV0b19leHBsYWluL3QvMDAxX2F1dG9fZXhwbGFpbi5wbAorKysgYi9jb250cmli L2F1dG9fZXhwbGFpbi90LzAwMV9hdXRvX2V4cGxhaW4ucGwKQEAgLTM1LDYgKzM1LDggQEAgJG5v ZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAiYXV0b19leHBsYWluLmxvZ19taW5f ZHVyYXRpb24gPSAwIik7CiAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJh dXRvX2V4cGxhaW4ubG9nX2FuYWx5emUgPSBvbiIpOwogJG5vZGUtPnN0YXJ0OwogCiskbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHMn KTsKKwogIyBTaW1wbGUgcXVlcnkuCiBteSAkbG9nX2NvbnRlbnRzID0gcXVlcnlfbG9nKCRub2Rl LCAiU0VMRUNUICogRlJPTSBwZ19jbGFzczsiKTsKIApAQCAtMjEyLDQgKzIxNCwzNyBAQCBSRVZP S0UgU0VUIE9OIFBBUkFNRVRFUiBhdXRvX2V4cGxhaW4ubG9nX2Zvcm1hdCBGUk9NIHJlZ3Jlc3Nf dXNlcjE7CiBEUk9QIFVTRVIgcmVncmVzc191c2VyMTsKIH0pOwogCisjIENoZWNrIHRoYXQgdXNp bmcgYm90aCBhdXRvX2V4cGxhaW4gYW5kIHBnX2xvZ19xdWVyeV9wbGFuKCkgd29ya3MgZmluZQor Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7U0VMRUNUIGluamVjdGlvbl9wb2ludHNf YXR0YWNoKCdleGVjdXRvci1ydW4nLCAnbG9ncXVlcnlwbGFuJyl9KTsKKworJGxvZ19jb250ZW50 cyA9IHF1ZXJ5X2xvZygKKwkkbm9kZSwKKwkiU0VMRUNUICogRlJPTSBwZ19jbGFzczsiLAorCXsK KwkJImF1dG9fZXhwbGFpbi5sb2dfdmVyYm9zZSIgPT4gIm9uIiwKKwkJImF1dG9fZXhwbGFpbi5s b2dfc2V0dGluZ3MiID0+ICJvbiIsCisJCSJhdXRvX2V4cGxhaW4ubG9nX2FuYWx5emUiID0+ICJv ZmYiLAorCQkiY29tcHV0ZV9xdWVyeV9pZCIgPT4gIm9uIgorCX0pOworCitsaWtlKAorCSRsb2df Y29udGVudHMsCisJcXIvcXVlcnkgcGxhbiBydW5uaW5nIG9uIGJhY2tlbmQgd2l0aCBQSUQvLAor CSJ3aXRoIHBnX2xvZ19xdWVyeV9wbGFuKCksIHBnX2xvZ19xdWVyeV9wbGFuKCkgbG9nZ2VkIik7 CisKK2xpa2UoCisJJGxvZ19jb250ZW50cywKKwlxci9kdXJhdGlvbjogLittcyAgcGxhbjovLAor CSJ3aXRoIHBnX2xvZ19xdWVyeV9wbGFuKCksIGF1dG9fZXhwbGFpbiBsb2dnZWQiKTsKKworJGxv Z19jb250ZW50cyA9fiAvKFF1ZXJ5IFRleHQ6LipRdWVyeSBJZGVudGlmaWVyOiBcZCspLiooUXVl cnkgVGV4dDouKlF1ZXJ5IElkZW50aWZpZXI6IFxkKykvczsKK215ICRwZ19sb2dfcGxhbl9xdWVy eV9vdXRwdXQgPSAkMTsKK215ICRhdXRvX2V4cGxhaW5fb3V0cHV0ID0gJDI7CisKK2NtcF9vaygK KwkkcGdfbG9nX3BsYW5fcXVlcnlfb3V0cHV0LCAiZXEiLAorCSRhdXRvX2V4cGxhaW5fb3V0cHV0 LAorCSJ3aXRoIHBnX2xvZ19wbGFuX3F1ZXJ5X2xvZygpLCBsb2dnZWQgcGxhbnMgYXJlIHRoZSBz YW1lIik7CisKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMu c2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggZTVmYTgyYzE2MS4uOWE2Y2Q1NjZl ZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sCkBAIC0yNzE5NSw2ICsyNzE5NSwyNSBAQCBTRUxFQ1QgY29sbGF0aW9uIGZvciAo J2ZvbycgQ09MTEFURSAiZGVfREUiKTsKICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwv cm93PgogCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5 Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgICA8cHJpbWFyeT5wZ19sb2dfcXVlcnlfcGxhbjwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRl eHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19sb2dfcXVlcnlfcGxhbjwvZnVuY3Rpb24+ICgg PHBhcmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4gKQorICAgICAg ICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAg ICAgIDxwYXJhPgorICAgICAgICBSZXF1ZXN0cyB0byBsb2cgdGhlIHBsYW4gb2YgdGhlIHF1ZXJ5 IGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZQorICAgICAgICBiYWNrZW5kIHdpdGggc3BlY2lmaWVk IHByb2Nlc3MgSUQuCisgICAgICAgIEl0IHdpbGwgYmUgbG9nZ2VkIGF0IDxsaXRlcmFsPkxPRzwv bGl0ZXJhbD4gbWVzc2FnZSBsZXZlbCBhbmQKKyAgICAgICAgd2lsbCBhcHBlYXIgaW4gdGhlIHNl cnZlciBsb2cgYmFzZWQgb24gdGhlIGxvZworICAgICAgICBjb25maWd1cmF0aW9uIHNldCAoU2Vl IDx4cmVmIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dpbmciLz4KKyAgICAgICAgZm9yIG1v cmUgaW5mb3JtYXRpb24pLCBidXQgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgY2xpZW50CisgICAg ICAgIHJlZ2FyZGxlc3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3VjLWNsaWVudC1taW4tbWVzc2FnZXMi Lz4uCisgICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAgIDxyb3c+ CiAgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNf c2lnbmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KQEAgLTI3MzA5LDYgKzI3MzI4LDM3IEBA IExPRzogIEdyYW5kIHRvdGFsOiAxNjUxOTIwIGJ5dGVzIGluIDIwMSBibG9ja3M7IDYyMjM2MCBm cmVlICg4OCBjaHVua3MpOyAxMDI5NTYwCiAgICAgYmVjYXVzZSBpdCBtYXkgZ2VuZXJhdGUgYSBs YXJnZSBudW1iZXIgb2YgbG9nIG1lc3NhZ2VzLgogICAgPC9wYXJhPgogCisgICA8cGFyYT4KKyAg ICA8ZnVuY3Rpb24+cGdfbG9nX3F1ZXJ5X3BsYW48L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZAorICAg IHRvIGxvZyB0aGUgcGxhbiBvZiBhIGJhY2tlbmQgcHJvY2Vzcy4gRm9yIGV4YW1wbGU6Cis8cHJv Z3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0jIFNFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbigyMDExMTYp OworIHBnX2xvZ19xdWVyeV9wbGFuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0Ciso MSByb3cpCis8L3Byb2dyYW1saXN0aW5nPgorVGhlIGZvcm1hdCBvZiB0aGUgcXVlcnkgcGxhbiBp cyB0aGUgc2FtZSBhcyB3aGVuIDxsaXRlcmFsPlZFUkJPU0U8L2xpdGVyYWw+LAorPGxpdGVyYWw+ Q09TVFM8L2xpdGVyYWw+LCA8bGl0ZXJhbD5TRVRUSU5HUzwvbGl0ZXJhbD4gYW5kCis8bGl0ZXJh bD5GT1JNQVQgVEVYVDwvbGl0ZXJhbD4gYXJlIHVzZWQgaW4gdGhlIDxjb21tYW5kPkVYUExBSU48 L2NvbW1hbmQ+Citjb21tYW5kLiBGb3IgZXhhbXBsZToKKzxzY3JlZW4+CitMT0c6ICBxdWVyeSBw bGFuIHJ1bm5pbmcgb24gYmFja2VuZCB3aXRoIFBJRCAyMDExMTYgaXM6CisgICAgICAgIFF1ZXJ5 IFRleHQ6IFNFTEVDVCAqIEZST00gcGdiZW5jaF9hY2NvdW50czsKKyAgICAgICAgU2VxIFNjYW4g b24gcHVibGljLnBnYmVuY2hfYWNjb3VudHMgIChjb3N0PTAuMDAuLjUyNzg3LjAwIHJvd3M9MjAw MDAwMCB3aWR0aD05NykKKyAgICAgICAgICBPdXRwdXQ6IGFpZCwgYmlkLCBhYmFsYW5jZSwgZmls bGVyCisgICAgICAgIFNldHRpbmdzOiB3b3JrX21lbSA9ICcxTUInCisgICAgICAgIFF1ZXJ5IElk ZW50aWZpZXI6IDg2MjEyNTU1NDY1NjA3Mzk2ODAKKzwvc2NyZWVuPgorICAgIE5vdGUgdGhhdCB3 aGVuIHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uLCBvbmx5IHRoZQor ICAgIHBsYW4gb2YgdGhlIG1vc3QgZGVlcGx5IG5lc3RlZCBxdWVyeSBpcyBsb2dnZWQuCisgICA8 L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gYSBzdWJ0cmFuc2FjdGlvbiBpcyBhYm9ydGVk LCA8ZnVuY3Rpb24+cGdfbG9nX3F1ZXJ5X3BsYW48L2Z1bmN0aW9uPgorICAgIGNhbm5vdCBsb2cg dGhlIHF1ZXJ5IHBsYW4gYWZ0ZXIgdGhlIGFib3J0LgorICAgPC9wYXJhPgorCiAgIDwvc2VjdDI+ CiAKICAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtYWRtaW4tYmFja3VwIj4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hhY3QuYwppbmRleCA3MGFiNmUyN2ExLi45ZjY2MWJhZjY5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGFjdC5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJy YXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c21nci5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL2NvbWJv Y2lkLmgiCkBAIC0yNzY2LDYgKzI3NjcsMTUgQEAgQWJvcnRUcmFuc2FjdGlvbih2b2lkKQogCSAq LwogCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmVW5CbG9ja1NpZywgTlVMTCk7CiAKKwkvKgor CSAqIFJlc2V0IHBnX2xvZ19xdWVyeV9wbGFuKCkgcmVsYXRlZCBnbG9iYWwgdmFyaWFibGVzLgor CSAqIFdoZW4gQWN0aXZlUXVlcnlEZXNjIGlzIHJlZmVyZW5jZWQgYWZ0ZXIgYWJvcnQsIHNvbWUg b2YgaXRzIGVsZW1lbnRzCisJICogYXJlIGZyZWVkLiBUbyBhdm9pZCBhY2Nlc3NpbmcgdGhlbSwg cmVzZXQgQWN0aXZlUXVlcnlEZXNjIGhlcmUuCisJICovCisJQWN0aXZlUXVlcnlEZXNjID0gTlVM TDsKKwlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlID0gZmFsc2U7CisJTG9nUXVl cnlQbGFuUGVuZGluZyA9IGZhbHNlOworCiAJLyoKIAkgKiBjaGVjayB0aGUgY3VycmVudCB0cmFu c2FjdGlvbiBzdGF0ZQogCSAqLwpAQCAtNTEyNSw2ICs1MTM1LDE1IEBAIEFib3J0U3ViVHJhbnNh Y3Rpb24odm9pZCkKIAkgKi8KIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcs IE5VTEwpOwogCisJLyoKKwkgKiBSZXNldCBwZ19sb2dfcXVlcnlfcGxhbigpIHJlbGF0ZWQgZ2xv YmFsIHZhcmlhYmxlcy4KKwkgKiBXaGVuIEFjdGl2ZVF1ZXJ5RGVzYyBpcyByZWZlcmVuY2VkIGFm dGVyIGFib3J0LCBzb21lIG9mIGl0cyBlbGVtZW50cworCSAqIGFyZSBmcmVlZC4gVG8gYXZvaWQg YWNjZXNzaW5nIHRoZW0sIHJlc2V0IEFjdGl2ZVF1ZXJ5RGVzYyBoZXJlLgorCSAqLworCUFjdGl2 ZVF1ZXJ5RGVzYyA9IE5VTEw7CisJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2ZSA9 IGZhbHNlOworCUxvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsKKwogCS8qCiAJICogY2hlY2sg dGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc3RhdGUKIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4IGZlMmJiNTBmNDYuLjJlNTBiNTk2Y2QgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbApAQCAtNzU3LDYgKzc1Nyw4IEBAIFJF Vk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xzX2xvZ2ljYWxtYXBkaXIoKSBGUk9NIFBVQkxJ QzsKIAogUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbHNfcmVwbHNsb3RkaXIodGV4dCkg RlJPTSBQVUJMSUM7CiAKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9w bGFuKGludGVnZXIpIEZST00gUFVCTElDOworCiAtLQogLS0gV2UgYWxzbyBzZXQgdXAgc29tZSB0 aGluZ3MgYXMgYWNjZXNzaWJsZSB0byBzdGFuZGFyZCByb2xlcy4KIC0tCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMKaW5kZXggODNkMDBhNDY2My4uZGEyZWU0ODY2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4u YwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVIYXNoLmgiCiAjaW5j bHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCisjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5oIgogI2luY2x1ZGUgIm5v ZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgpAQCAtMjgsNyAr MjksMTAgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicmV3cml0 ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1 ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGlscy9iYWNrZW5kX3N0YXR1cy5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX3RhYmxlcy5o IgogI2luY2x1ZGUgInV0aWxzL2pzb24uaCIKQEAgLTQwLDYgKzQ0LDcgQEAKICNpbmNsdWRlICJ1 dGlscy90eXBjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgogCitib29sIFByb2Nlc3NM b2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmUgPSBmYWxzZTsKIAogLyogSG9vayBmb3IgcGx1Z2lu cyB0byBnZXQgY29udHJvbCBpbiBFeHBsYWluT25lUXVlcnkoKSAqLwogRXhwbGFpbk9uZVF1ZXJ5 X2hvb2tfdHlwZSBFeHBsYWluT25lUXVlcnlfaG9vayA9IE5VTEw7CkBAIC03ODQsNiArNzg5LDM3 IEBAIEV4cGxhaW5QcmludFNldHRpbmdzKEV4cGxhaW5TdGF0ZSAqZXMpCiAJfQogfQogCisvKgor ICogRXhwbGFpbkFzc2VtYmxlTG9nT3V0cHV0IC0KKyAqICAgQXNzZW1ibGUgZXMtPnN0ciBmb3Ig bG9nZ2luZyBhY2NvcmRpbmcgdG8gc3BlY2lmaWVkIGNvbnRlbnRzIGFuZCBmb3JtYXQKKyAqLwor Cit2b2lkCitFeHBsYWluQXNzZW1ibGVMb2dPdXRwdXQoRXhwbGFpblN0YXRlICplcywgUXVlcnlE ZXNjICpxdWVyeURlc2MsIGludCBsb2dGb3JtYXQsCisJCQkJCQkgYm9vbCBsb2dUcmlnZ2Vycywg aW50IGxvZ1BhcmFtZXRlck1heExlbmd0aCkKK3sKKwlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOwor CUV4cGxhaW5RdWVyeVRleHQoZXMsIHF1ZXJ5RGVzYyk7CisJRXhwbGFpblF1ZXJ5UGFyYW1ldGVy cyhlcywgcXVlcnlEZXNjLT5wYXJhbXMsIGxvZ1BhcmFtZXRlck1heExlbmd0aCk7CisJRXhwbGFp blByaW50UGxhbihlcywgcXVlcnlEZXNjKTsKKwlpZiAoZXMtPmFuYWx5emUgJiYgbG9nVHJpZ2dl cnMpCisJCUV4cGxhaW5QcmludFRyaWdnZXJzKGVzLCBxdWVyeURlc2MpOworCWlmIChlcy0+Y29z dHMpCisJCUV4cGxhaW5QcmludEpJVFN1bW1hcnkoZXMsIHF1ZXJ5RGVzYyk7CisJRXhwbGFpbkVu ZE91dHB1dChlcyk7CisKKwkvKiBSZW1vdmUgbGFzdCBsaW5lIGJyZWFrICovCisJaWYgKGVzLT5z dHItPmxlbiA+IDAgJiYgZXMtPnN0ci0+ZGF0YVtlcy0+c3RyLT5sZW4gLSAxXSA9PSAnXG4nKQor CQllcy0+c3RyLT5kYXRhWy0tZXMtPnN0ci0+bGVuXSA9ICdcMCc7CisKKwkvKiBGaXggSlNPTiB0 byBvdXRwdXQgYW4gb2JqZWN0ICovCisJaWYgKGxvZ0Zvcm1hdCA9PSBFWFBMQUlOX0ZPUk1BVF9K U09OKQorCXsKKwkJZXMtPnN0ci0+ZGF0YVswXSA9ICd7JzsKKwkJZXMtPnN0ci0+ZGF0YVtlcy0+ c3RyLT5sZW4gLSAxXSA9ICd9JzsKKwl9Cit9CisKIC8qCiAgKiBFeHBsYWluUHJpbnRQbGFuIC0K ICAqCSAgY29udmVydCBhIFF1ZXJ5RGVzYydzIHBsYW4gdHJlZSB0byB0ZXh0IGFuZCBhcHBlbmQg aXQgdG8gZXMtPnN0cgpAQCAtMTY5NCw2ICsxNzMwLDkgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRl ICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkvKgogCSAqIFdlIGhhdmUgdG8gZm9yY2li bHkgY2xlYW4gdXAgdGhlIGluc3RydW1lbnRhdGlvbiBzdGF0ZSBiZWNhdXNlIHdlCiAJICogaGF2 ZW4ndCBkb25lIEV4ZWN1dG9yRW5kIHlldC4gIFRoaXMgaXMgcHJldHR5IGdyb3R0eSAuLi4KKwkg KiBUaGlzIGNsZWFudXAgc2hvdWxkIG5vdCBiZSBkb25lIHdoZW4gdGhlIHF1ZXJ5IGhhcyBhbHJl YWR5IGJlZW4KKwkgKiBleGVjdXRlZCBhbmQgZXhwbGFpbiBoYXMgYmVlbiBjYWxsZWQgYnkgc2ln bmFsLCBhcyB0aGUgdGFyZ2V0IHF1ZXJ5CisJICogbWF5IHVzZSBpbnN0cnVtZW50YXRpb24gYW5k IGNsZWFuIGl0c2VsZiB1cC4KIAkgKgogCSAqIE5vdGU6IGNvbnRyaWIvYXV0b19leHBsYWluIGNv dWxkIGNhdXNlIGluc3RydW1lbnRhdGlvbiB0byBiZSBzZXQgdXAKIAkgKiBldmVuIHRob3VnaCB3 ZSBkaWRuJ3QgYXNrIGZvciBpdCBoZXJlLiAgQmUgY2FyZWZ1bCBub3QgdG8gcHJpbnQgYW55CkBA IC0xNzAxLDcgKzE3NDAsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlz dCAqYW5jZXN0b3JzLAogCSAqIEluc3RyRW5kTG9vcCBjYWxsIGFueXdheSwgaWYgcG9zc2libGUs IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhc2VzCiAJICogYXV0b19leHBsYWluIGhhcyB0byBj b250ZW5kIHdpdGguCiAJICovCi0JaWYgKHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCkKKwlpZiAocGxh bnN0YXRlLT5pbnN0cnVtZW50ICYmICFlcy0+c2lnbmFsZWQpCiAJCUluc3RyRW5kTG9vcChwbGFu c3RhdGUtPmluc3RydW1lbnQpOwogCiAJaWYgKGVzLT5hbmFseXplICYmCkBAIC01MTgyLDMgKzUy MjEsMTM4IEBAIGVzY2FwZV95YW1sKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpzdHIpCiB7 CiAJZXNjYXBlX2pzb24oYnVmLCBzdHIpOwogfQorCisvKgorICogSGFuZGxlTG9nUXVlcnlQbGFu SW50ZXJydXB0CisgKgkJSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJydXB0IGluZGljYXRpbmcg bG9nZ2luZyB0aGUgcGxhbiBvZgorICoJCXRoZSBjdXJyZW50bHkgcnVubmluZyBxdWVyeS4KKyAq CisgKiBBbGwgdGhlIGFjdHVhbCB3b3JrIGlzIGRlZmVycmVkIHRvIFByb2Nlc3NMb2dRdWVyeVBs YW5JbnRlcnJ1cHQoKSwKKyAqIGJlY2F1c2Ugd2UgY2Fubm90IHNhZmVseSBlbWl0IGEgbG9nIG1l c3NhZ2UgaW5zaWRlIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLwordm9pZAorSGFuZGxlTG9nUXVl cnlQbGFuSW50ZXJydXB0KHZvaWQpCit7CisJLyoKKwkgKiBEbyBub3Qgc2V0IEludGVycnVwdFBl bmRpbmcgc2luY2UgUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdCgpIGlzIG5vdAorCSAqIGNh bGxlZCBmcm9tIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCisJICovCisJTG9nUXVlcnlQbGFuUGVu ZGluZyA9IHRydWU7CisJLyogbGF0Y2ggd2lsbCBiZSBzZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3Ix X2hhbmRsZXIgKi8KK30KKworLyoKKyAqIFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQKKyAq IAkJUGVyZm9ybSBsb2dnaW5nIHRoZSBwbGFuIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBxdWVy eSBvbiB0aGlzCisgKiAJCWJhY2tlbmQgcHJvY2Vzcy4KKyAqCisgKiBBbnkgYmFja2VuZCB0aGF0 IHBhcnRpY2lwYXRlcyBpbiBQcm9jU2lnbmFsIHNpZ25hbGluZyBtdXN0IGFycmFuZ2UgdG8gY2Fs bAorICogdGhpcyBmdW5jdGlvbiBpZiB3ZSBzZWUgTG9nUXVlcnlQbGFuUGVuZGluZyBzZXQuCisg KiBJdCBpcyBjYWxsZWQgZnJvbSBDSEVDS19GT1JfSU5URVJSVVBUUygpLCB3aGljaCBpcyBlbm91 Z2ggYmVjYXVzZSB0aGUgdGFyZ2V0CisgKiBwcm9jZXNzIGZvciBsb2dnaW5nIHBsYW4gaXMgYSBi YWNrZW5kLgorICovCit2b2lkCitQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZvaWQpCit7 CisJRXhwbGFpblN0YXRlICplczsKKwlNZW1vcnlDb250ZXh0IGN4dDsKKwlNZW1vcnlDb250ZXh0 IG9sZF9jeHQ7CisJTG9nUXVlcnlQbGFuUGVuZGluZyA9IGZhbHNlOworCisJZXJlcG9ydChMT0df U0VSVkVSX09OTFksCisJCQllcnJtc2coIlByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQiKSwK KwkJCSBlcnJoaWRlc3RtdCh0cnVlKSwKKwkJCSBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisKKwkv KiBDYW5ub3QgcmUtZW50ZXIuICovCisJaWYgKFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRB Y3RpdmUpCisJCXJldHVybjsKKworCVByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmUg PSB0cnVlOworCisJaWYgKEFjdGl2ZVF1ZXJ5RGVzYyA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChM T0dfU0VSVkVSX09OTFksCisJCQkJZXJybXNnKCJiYWNrZW5kIHdpdGggUElEICVkIGlzIG5vdCBy dW5uaW5nIGEgcXVlcnkgb3IgYSBzdWJ0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIiwKKwkJCQkJTXlQ cm9jUGlkKSwKKwkJCQllcnJoaWRlc3RtdCh0cnVlKSwKKwkJCQllcnJoaWRlY29udGV4dCh0cnVl KSk7CisKKwkJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2ZSA9IGZhbHNlOworCQly ZXR1cm47CisJfQorCisJY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlD b250ZXh0LAorCQkJCQkJCQkibG9nX3F1ZXJ5X3BsYW4gdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJ CQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCW9sZF9jeHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oY3h0KTsKKworCWVzID0gTmV3RXhwbGFpblN0YXRlKCk7CisKKwllcy0+Zm9ybWF0 ID0gRVhQTEFJTl9GT1JNQVRfVEVYVDsKKwllcy0+c2V0dGluZ3MgPSB0cnVlOworCWVzLT52ZXJi b3NlID0gdHJ1ZTsKKwllcy0+c2lnbmFsZWQgPSB0cnVlOworCisJRXhwbGFpbkFzc2VtYmxlTG9n T3V0cHV0KGVzLCBBY3RpdmVRdWVyeURlc2MsIEVYUExBSU5fRk9STUFUX1RFWFQsIDAsIC0xKTsK KworCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJZXJybXNnKCJxdWVyeSBwbGFuIHJ1bm5p bmcgb24gYmFja2VuZCB3aXRoIFBJRCAlZCBpczpcbiVzIiwKKwkJCQkJTXlQcm9jUGlkLCBlcy0+ c3RyLT5kYXRhKSwKKwkJCSBlcnJoaWRlc3RtdCh0cnVlKSwKKwkJCSBlcnJoaWRlY29udGV4dCh0 cnVlKSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2N4dCk7CisJTWVtb3J5Q29udGV4 dERlbGV0ZShjeHQpOworCisJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2ZSA9IGZh bHNlOworfQorCisvKgorICogcGdfbG9nX3F1ZXJ5X3BsYW4KKyAqCQlTaWduYWwgYSBiYWNrZW5k IHByb2Nlc3MgdG8gbG9nIHRoZSBxdWVyeSBwbGFuIG9mIHRoZSBydW5uaW5nIHF1ZXJ5LgorICoK KyAqIEJ5IGRlZmF1bHQsIG9ubHkgc3VwZXJ1c2VycyBhcmUgYWxsb3dlZCB0byBzaWduYWwgdG8g bG9nIHRoZSBwbGFuIGJlY2F1c2UKKyAqIGFsbG93aW5nIGFueSB1c2VycyB0byBpc3N1ZSB0aGlz IHJlcXVlc3QgYXQgYW4gdW5ib3VuZGVkIHJhdGUgd291bGQKKyAqIGNhdXNlIGxvdHMgb2YgbG9n IG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4gbGVhZCB0byBkZW5pYWwgb2Ygc2VydmljZS4KKyAqIEFk ZGl0aW9uYWwgcm9sZXMgY2FuIGJlIHBlcm1pdHRlZCB3aXRoIEdSQU5ULgorICovCitEYXR1bQor cGdfbG9nX3F1ZXJ5X3BsYW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQJCQlwaWQgPSBQR19H RVRBUkdfSU5UMzIoMCk7CisJUEdQUk9DCSAgICpwcm9jOworCVBnQmFja2VuZFN0YXR1cwkqYmVf c3RhdHVzOworCisJcHJvYyA9IEJhY2tlbmRQaWRHZXRQcm9jKHBpZCk7CisKKwlpZiAocHJvYyA9 PSBOVUxMKQorCXsKKwkJLyoKKwkJICogVGhpcyBpcyBqdXN0IGEgd2FybmluZyBzbyBhIGxvb3At dGhyb3VnaC1yZXN1bHRzZXQgd2lsbCBub3QgYWJvcnQKKwkJICogaWYgb25lIGJhY2tlbmQgdGVy bWluYXRlZCBvbiBpdHMgb3duIGR1cmluZyB0aGUgcnVuLgorCQkgKi8KKwkJZXJlcG9ydChXQVJO SU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIGJhY2tlbmQgcHJv Y2VzcyIsIHBpZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCWJlX3N0YXR1 cyA9IHBnc3RhdF9nZXRfYmVlbnRyeV9ieV9iYWNrZW5kX2lkKHByb2MtPmJhY2tlbmRJZCk7CisJ aWYgKGJlX3N0YXR1cy0+c3RfYmFja2VuZFR5cGUgIT0gQl9CQUNLRU5EKQorCXsKKwkJZXJlcG9y dChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIGNsaWVu dCBiYWNrZW5kIHByb2Nlc3MiLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9 CisKKwlpZiAoU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0xPR19RVUVSWV9QTEFOLCBwcm9j LT5iYWNrZW5kSWQpIDwgMCkKKwl7CisJCS8qIEFnYWluLCBqdXN0IGEgd2FybmluZyB0byBhbGxv dyBsb29wcyAqLworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygiY291bGQgbm90IHNl bmQgc2lnbmFsIHRvIHByb2Nlc3MgJWQ6ICVtIiwgcGlkKSkpOworCQlQR19SRVRVUk5fQk9PTChm YWxzZSk7CisJfQorCisJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYwppbmRleCAxM2E5YjdkYTgzLi40ZWVlOTk4MTYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWlu LmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRl ICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9iYWNrZW5kX3N0YXR1cy5oIgorI2luY2x1 ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcGFydGNhY2hl LmgiCkBAIC03OCw2ICs3OSw5IEBAIEV4ZWN1dG9yRW5kX2hvb2tfdHlwZSBFeGVjdXRvckVuZF9o b29rID0gTlVMTDsKIC8qIEhvb2sgZm9yIHBsdWdpbiB0byBnZXQgY29udHJvbCBpbiBFeGVjQ2hl Y2tQZXJtaXNzaW9ucygpICovCiBFeGVjdXRvckNoZWNrUGVybXNfaG9va190eXBlIEV4ZWN1dG9y Q2hlY2tQZXJtc19ob29rID0gTlVMTDsKIAorLyogQ3VycmVudGx5IGV4ZWN1dGluZyBxdWVyeSdz IFF1ZXJ5RGVzYyAqLworUXVlcnlEZXNjICpBY3RpdmVRdWVyeURlc2MgPSBOVUxMOworCiAvKiBk ZWNscyBmb3IgbG9jYWwgcm91dGluZXMgb25seSB1c2VkIHdpdGhpbiB0aGlzIG1vZHVsZSAqLwog c3RhdGljIHZvaWQgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwog c3RhdGljIHZvaWQgQ2hlY2tWYWxpZFJvd01hcmtSZWwoUmVsYXRpb24gcmVsLCBSb3dNYXJrVHlw ZSBtYXJrVHlwZSk7CkBAIC0zMDMsMTAgKzMwNywyNSBAQCBFeGVjdXRvclJ1bihRdWVyeURlc2Mg KnF1ZXJ5RGVzYywKIAkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291bnQsCiAJ CQlib29sIGV4ZWN1dGVfb25jZSkKIHsKKwkvKgorCSAqIFVwZGF0ZSBBY3RpdmVRdWVyeURlc2Mg aGVyZSB0byBlbmFibGUgcmV0cmlldmFsIG9mIHRoZSBjdXJyZW50bHkKKwkgKiBydW5uaW5nIHF1 ZXJ5RGVzYyBmb3IgbmVzdGVkIHF1ZXJpZXMuCisJICovCisJUXVlcnlEZXNjICpzYXZlX0FjdGl2 ZVF1ZXJ5RGVzYzsKKworCXNhdmVfQWN0aXZlUXVlcnlEZXNjID0gQWN0aXZlUXVlcnlEZXNjOwor CUFjdGl2ZVF1ZXJ5RGVzYyA9IHF1ZXJ5RGVzYzsKKworI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9J TlRTCisJSU5KRUNUSU9OX1BPSU5UKCJleGVjdXRvci1ydW4iKTsKKyNlbmRpZgorCiAJaWYgKEV4 ZWN1dG9yUnVuX2hvb2spCiAJCSgqRXhlY3V0b3JSdW5faG9vaykgKHF1ZXJ5RGVzYywgZGlyZWN0 aW9uLCBjb3VudCwgZXhlY3V0ZV9vbmNlKTsKIAllbHNlCiAJCXN0YW5kYXJkX0V4ZWN1dG9yUnVu KHF1ZXJ5RGVzYywgZGlyZWN0aW9uLCBjb3VudCwgZXhlY3V0ZV9vbmNlKTsKKworCUFjdGl2ZVF1 ZXJ5RGVzYyA9IHNhdmVfQWN0aXZlUXVlcnlEZXNjOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1NjYW4uYwppbmRleCBiZjRkNDEzM2M1Li42M2JkMTk5ZTRkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjU2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNT Y2FuLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNp bmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3Iu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgpA QCAtMzksNiArNDAsNyBAQCBFeGVjU2NhbkZldGNoKFNjYW5TdGF0ZSAqbm9kZSwKIAlFU3RhdGUJ ICAgKmVzdGF0ZSA9IG5vZGUtPnBzLnN0YXRlOwogCiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KwlDSEVDS19MT0dfUVVFUllfUExBTl9QRU5ESU5HKCk7CiAKIAlpZiAoZXN0YXRlLT5lc19lcHFf YWN0aXZlICE9IE5VTEwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4 IDBmOWY5MGQyYzcuLjNjNTM1ZmJlY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFs LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNs dWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgpA QCAtNjU2LDYgKzY1Nyw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdT KQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlI YW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFs KFBST0NTSUdfTE9HX1FVRVJZX1BMQU4pKQorCQlIYW5kbGVMb2dRdWVyeVBsYW5JbnRlcnJ1cHQo KTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdF KSkKIAkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQoKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jl cy5jCmluZGV4IDU5YWI4MTJkMmUuLjVlZDU5YzZlODUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTM3 LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21t YW5kcy9hc3luYy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNs dWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgog I2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgpAQCAtNTEz LDYgKzUxNCw3IEBAIFByb2Nlc3NDbGllbnRSZWFkSW50ZXJydXB0KGJvb2wgYmxvY2tlZCkKIAl7 CiAJCS8qIENoZWNrIGZvciBnZW5lcmFsIGludGVycnVwdHMgdGhhdCBhcnJpdmVkIGJlZm9yZS93 aGlsZSByZWFkaW5nICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCUNIRUNLX0xPR19R VUVSWV9QTEFOX1BFTkRJTkcoKTsKIAogCQkvKiBQcm9jZXNzIHNpbnZhbCBjYXRjaHVwIGludGVy cnVwdHMsIGlmIGFueSAqLwogCQlpZiAoY2F0Y2h1cEludGVycnVwdFBlbmRpbmcpCkBAIC0zNDYw LDYgKzM0NjIsOSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQogCWlmIChMb2dNZW1vcnlDb250 ZXh0UGVuZGluZykKIAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAorCWlm IChMb2dRdWVyeVBsYW5QZW5kaW5nKQorCQlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0KCk7 CisKIAlpZiAoUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nKQogCQlIYW5kbGVQYXJhbGxlbEFw cGx5TWVzc2FnZXMoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggZjAyNGIxYTg0 OS4uOGY0OWE2NzZjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTM4LDYgKzM4LDgg QEAgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxz ZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxz ZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNl Owogdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nID0g ZmFsc2U7Cit2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nUXVlcnlQbGFuUGVuZGluZyA9IGZhbHNl OworCiB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxl IHVpbnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgQ3Jp dFNlY3Rpb25Db3VudCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA5YzEyMGZjMmI3 Li5hNTRiZjk3YzYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTgyNzQsNiArODI3NCwx MiBAQAogICBwcm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ2ludDQnLAogICBw cm9zcmMgPT4gJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cycgfSwKIAorIyBsb2dnaW5n IHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5kCit7IG9p ZCA9PiAnODAwMCcsIGRlc2NyID0+ICdsb2cgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeSBvbiB0 aGUgc3BlY2lmaWVkIGJhY2tlbmQnLAorICBwcm9uYW1lID0+ICdwZ19sb2dfcXVlcnlfcGxhbics CisgIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5 cGVzID0+ICdpbnQ0JywgcHJvc3JjID0+ICdwZ19sb2dfcXVlcnlfcGxhbicgfSwKKwogIyBub24t cGVyc2lzdGVudCBzZXJpZXMgZ2VuZXJhdG9yCiB7IG9pZCA9PiAnMTA2NicsIGRlc2NyID0+ICdu b24tcGVyc2lzdGVudCBzZXJpZXMgZ2VuZXJhdG9yJywKICAgcHJvbmFtZSA9PiAnZ2VuZXJhdGVf c2VyaWVzJywgcHJvcm93cyA9PiAnMTAwMCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9leHBsYWluLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKaW5kZXggN2Mw ZjBiNTYzNi4uZjFkZWI3ZDdlMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhw bGFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaApAQCAtMTcsNiArMTcs OCBAQAogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNl X25vZGUuaCIKIAorZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgUHJvY2Vzc0xvZ1F1ZXJ5UGxhbklu dGVycnVwdEFjdGl2ZTsKKwogdHlwZWRlZiBlbnVtIEV4cGxhaW5Gb3JtYXQKIHsKIAlFWFBMQUlO X0ZPUk1BVF9URVhULApAQCAtNjEsNiArNjMsNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHBsYWluU3Rh dGUKIAlib29sCQloaWRlX3dvcmtlcnM7CS8qIHNldCBpZiB3ZSBmaW5kIGFuIGludmlzaWJsZSBH YXRoZXIgKi8KIAkvKiBzdGF0ZSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHBsYW4gbm9kZSAqLwog CUV4cGxhaW5Xb3JrZXJzU3RhdGUgKndvcmtlcnNfc3RhdGU7IC8qIG5lZWRlZCBpZiBwYXJhbGxl bCBwbGFuICovCisJYm9vbAkJc2lnbmFsZWQ7CQkvKiB3aGV0aGVyIGV4cGxhaW4gaXMgY2FsbGVk IGJ5IHNpZ25hbCAqLwogfSBFeHBsYWluU3RhdGU7CiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMgdG8g Z2V0IGNvbnRyb2wgaW4gRXhwbGFpbk9uZVF1ZXJ5KCkgKi8KQEAgLTk2LDYgKzk5LDEwIEBAIGV4 dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0Ns YXVzZSAqaW50bywKIAkJCQkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKIAkJCQkJ CSAgIGNvbnN0IE1lbW9yeUNvbnRleHRDb3VudGVycyAqbWVtX2NvdW50ZXJzKTsKIAorZXh0ZXJu IHZvaWQgRXhwbGFpbkFzc2VtYmxlTG9nT3V0cHV0KEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVz YyAqcXVlcnlEZXNjLAorCQkJCQkJCQkJIGludCBsb2dGb3JtYXQsIGJvb2wgbG9nVHJpZ2dlcnMs CisJCQkJCQkJCQkgaW50IGxvZ1BhcmFtZXRlck1heExlbmd0aCk7CisKIGV4dGVybiB2b2lkIEV4 cGxhaW5QcmludFBsYW4oRXhwbGFpblN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MpOwog ZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50VHJpZ2dlcnMoRXhwbGFpblN0YXRlICplcywgUXVlcnlE ZXNjICpxdWVyeURlc2MpOwogCkBAIC0xMjgsNCArMTM1LDEzIEBAIGV4dGVybiB2b2lkIEV4cGxh aW5PcGVuR3JvdXAoY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqbGFiZWxuYW1lLAog ZXh0ZXJuIHZvaWQgRXhwbGFpbkNsb3NlR3JvdXAoY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3Qg Y2hhciAqbGFiZWxuYW1lLAogCQkJCQkJCSAgYm9vbCBsYWJlbGVkLCBFeHBsYWluU3RhdGUgKmVz KTsKIAorZXh0ZXJuIHZvaWQgSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZvaWQpOworZXh0 ZXJuIHZvaWQgUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdCh2b2lkKTsKKworI2RlZmluZSBD SEVDS19MT0dfUVVFUllfUExBTl9QRU5ESU5HKCkgXAorZG8geyBcCisJaWYgKHVubGlrZWx5KExv Z1F1ZXJ5UGxhblBlbmRpbmcpKSBcCisJCVByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQoKTsg XAorfSB3aGlsZSgwKQorCiAjZW5kaWYJCQkJCQkJLyogRVhQTEFJTl9IICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4 IDYxMmZiNWY0MmUuLjRiYTFlMThkMWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC05Niw2ICs5Niw3IEBAIGV4dGVy biBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25UaW1lb3V0UGVu ZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY1NpZ25h bEJhcnJpZXJQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNf dCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBz aWdfYXRvbWljX3QgSWRsZVN0YXRzVXBkYXRlVGltZW91dFBlbmRpbmc7CitleHRlcm4gUEdETExJ TVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ1F1ZXJ5UGxhblBlbmRpbmc7CiAKIGV4dGVy biBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2hlY2tDbGllbnRDb25uZWN0aW9u UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2xpZW50 Q29ubmVjdGlvbkxvc3Q7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWdu YWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDUyZGNiNGMyYWQu LjQwMGM1MjcyOTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw3IEBA IHR5cGVkZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxz ZW5kZXJzIHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkv KiBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRF WFQsIC8qIGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJ R19MT0dfUVVFUllfUExBTiwgLyogYXNrIGJhY2tlbmQgdG8gbG9nIHBsYW4gb2YgdGhlIGN1cnJl bnQgcXVlcnkgKi8KIAlQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsIC8qIE1lc3NhZ2Ug ZnJvbSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzICovCiAKIAkvKiBSZWNvdmVyeSBjb25mbGljdCBy ZWFzb25zICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oIGIvc3JjL2lu Y2x1ZGUvdGNvcC9wcXVlcnkuaAppbmRleCAwNzNmYjMyM2JjLi4zZGQ3ZWRmOTNjIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvcHF1 ZXJ5LmgKQEAgLTIxLDcgKzIxLDcgQEAgc3RydWN0IFBsYW5uZWRTdG10OwkJCQkvKiBhdm9pZCBp bmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogCiAKIGV4dGVybiBQR0RMTElNUE9SVCBQb3J0 YWwgQWN0aXZlUG9ydGFsOwotCitleHRlcm4gUEdETExJTVBPUlQgUXVlcnlEZXNjICpBY3RpdmVR dWVyeURlc2M7CiAKIGV4dGVybiBQb3J0YWxTdHJhdGVneSBDaG9vc2VQb3J0YWxTdHJhdGVneShM aXN0ICpzdG10cyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2Vsb2cuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2Vsb2cuaAppbmRleCAwNTRkZDJiZjYyLi4zYzZiZDFlYTdjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9lbG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv ZWxvZy5oCkBAIC0xNjcsNiArMTY3LDcgQEAgc3RydWN0IE5vZGU7CiAKIGV4dGVybiBib29sIG1l c3NhZ2VfbGV2ZWxfaXNfaW50ZXJlc3RpbmcoaW50IGVsZXZlbCk7CiAKK2V4dGVybiBQR0RMTElN UE9SVCBib29sIFByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmU7CiBleHRlcm4gYm9v bCBlcnJzdGFydChpbnQgZWxldmVsLCBjb25zdCBjaGFyICpkb21haW4pOwogZXh0ZXJuIHBnX2F0 dHJpYnV0ZV9jb2xkIGJvb2wgZXJyc3RhcnRfY29sZChpbnQgZWxldmVsLCBjb25zdCBjaGFyICpk b21haW4pOwogZXh0ZXJuIHZvaWQgZXJyZmluaXNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQg bGluZW5vLCBjb25zdCBjaGFyICpmdW5jbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL2luamVjdGlvbl9wb2ludHMvaW5qZWN0aW9uX3BvaW50cy5jIGIvc3JjL3Rlc3QvbW9kdWxl cy9pbmplY3Rpb25fcG9pbnRzL2luamVjdGlvbl9wb2ludHMuYwppbmRleCBlODQzZTY1OTRmLi5k YjA0NDBkZDkxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMv aW5qZWN0aW9uX3BvaW50cy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50 cy9pbmplY3Rpb25fcG9pbnRzLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAiZm1nci5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5o IgpAQCAtMjgsNiArMjksNyBAQCBQR19NT0RVTEVfTUFHSUM7CiAKIGV4dGVybiBQR0RMTEVYUE9S VCB2b2lkIGluamVjdGlvbl9lcnJvcihjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiBQR0RMTEVY UE9SVCB2b2lkIGluamVjdGlvbl9ub3RpY2UoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gUEdE TExFWFBPUlQgdm9pZCBpbmplY3Rpb25fSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KGNvbnN0 IGNoYXIgKm5hbWUpOwogCiAKIC8qIFNldCBvZiBjYWxsYmFja3MgYXZhaWxhYmxlIHRvIGJlIGF0 dGFjaGVkIHRvIGFuIGluamVjdGlvbiBwb2ludC4gKi8KQEAgLTQzLDYgKzQ1LDEzIEBAIGluamVj dGlvbl9ub3RpY2UoY29uc3QgY2hhciAqbmFtZSkKIAllbG9nKE5PVElDRSwgIm5vdGljZSB0cmln Z2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCAlcyIsIG5hbWUpOwogfQogCit2b2lkCitpbmplY3Rp b25fSGFuZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJSGFu ZGxlTG9nUXVlcnlQbGFuSW50ZXJydXB0KCk7CisJZWxvZyhMT0csICJ0cmlnZ2VyZWQgaW5qZWN0 aW9uX0hhbmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCBmb3IgaW5qZWN0aW9uIHBvaW50ICVzIiwg bmFtZSk7Cit9CisKIC8qCiAgKiBTUUwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFuIGluamVjdGlv biBwb2ludC4KICAqLwpAQCAtNTgsNiArNjcsOCBAQCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaChQ R19GVU5DVElPTl9BUkdTKQogCQlmdW5jdGlvbiA9ICJpbmplY3Rpb25fZXJyb3IiOwogCWVsc2Ug aWYgKHN0cmNtcChhY3Rpb24sICJub3RpY2UiKSA9PSAwKQogCQlmdW5jdGlvbiA9ICJpbmplY3Rp b25fbm90aWNlIjsKKwllbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAibG9ncXVlcnlwbGFuIikgPT0g MCkKKwkJZnVuY3Rpb24gPSAiaW5qZWN0aW9uX0hhbmRsZUxvZ1F1ZXJ5UGxhbkludGVycnVwdCI7 CiAJZWxzZQogCQllbG9nKEVSUk9SLCAiaW5jb3JyZWN0IGFjdGlvbiBcIiVzXCIgZm9yIGluamVj dGlvbiBwb2ludCBjcmVhdGlvbiIsIGFjdGlvbik7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKaW5kZXggZDVmNjFkZmFkOS4uYzUxZjM3OWI4NCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKQEAgLTI3Niwx NCArMjc2LDE1IEBAIFNFTEVDVCB0ZXN0X2Nhbm9uaWNhbGl6ZV9wYXRoKCcuL2FiYy8uL2RlZi8u Li8uL2doaS8uLi8uLi8uLi9qa2wvbW5vJyk7CiAgLi4vamtsL21ubwogKDEgcm93KQogCistLSBU ZXN0IGxvZ2dpbmcgZnVuY3Rpb25zCiAtLQotLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzKCkKLS0tCi0tLSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90 IHJldHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KKy0tIFRoZSBvdXRwdXRzIG9mIHRoZXNlIGZ1bmN0 aW9ucyBhcmUgbG9nZ2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8KKy0tIHRoZSBmdW5j dGlvbi4KIC0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcg b24gdGhlIHRpbWluZy4gSG93ZXZlciwKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0 aGUgY29kZSBkb2Vzbid0IGZhaWwsIGFuZCB0aGF0IHRoZQogLS0gcGVybWlzc2lvbnMgYXJlIHNl dCBwcm9wZXJseS4KIC0tCistLSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQogU0VM RUNUIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKICBw Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtMjk3LDggKzI5OCw4IEBAIFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMocGlkKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkKICB0CiAoMSByb3cpCiAKLUNSRUFU RSBST0xFIHJlZ3Jlc3NfbG9nX21lbW9yeTsKLVNFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdl KCdyZWdyZXNzX2xvZ19tZW1vcnknLAorQ1JFQVRFIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247 CitTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfZnVuY3Rpb24nLAog ICAncGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpJywgJ0VYRUNVVEUnKTsg LS0gbm8KICBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkBAIC0zMDYsMTUgKzMwNywxNSBAQCBTRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVn cmVzc19sb2dfbWVtb3J5JywKICgxIHJvdykKIAogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBw Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlcikKLSAgVE8gcmVncmVzc19sb2df bWVtb3J5OwotU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX21lbW9y eScsCisgIFRPIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2 aWxlZ2UoJ3JlZ3Jlc3NfbG9nX2Z1bmN0aW9uJywKICAgJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9j b250ZXh0cyhpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIHllcwogIGhhc19mdW5jdGlvbl9wcml2 aWxlZ2UgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICB0CiAoMSByb3cpCiAKLVNFVCBST0xF IHJlZ3Jlc3NfbG9nX21lbW9yeTsKK1NFVCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwogU0VM RUNUIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKICBw Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtMzIzLDggKzMyNCw0MSBAQCBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOwogCiBSRVNFVCBST0xFOwogUkVWT0tFIEVYRUNV VEUgT04gRlVOQ1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCi0g IEZST00gcmVncmVzc19sb2dfbWVtb3J5OwotRFJPUCBST0xFIHJlZ3Jlc3NfbG9nX21lbW9yeTsK KyAgRlJPTSByZWdyZXNzX2xvZ19mdW5jdGlvbjsKKy0tIHBnX2xvZ19xdWVyeV9wbGFuKCkKK1NF TEVDVCBwZ19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKKyBwZ19sb2dfcXVlcnlf cGxhbiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBoYXNfZnVu Y3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlf cGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIG5vCisgaGFzX2Z1bmN0aW9uX3ByaXZpbGVn ZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworR1JBTlQgRVhFQ1VU RSBPTiBGVU5DVElPTiBwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKQorICBUTyByZWdyZXNzX2xv Z19mdW5jdGlvbjsKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19m dW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0t IHllcworIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyB0CisoMSByb3cpCisKK1NFVCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworU0VMRUNUIHBn X2xvZ19xdWVyeV9wbGFuKHBnX2JhY2tlbmRfcGlkKCkpOworIHBnX2xvZ19xdWVyeV9wbGFuIAor LS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworUkVTRVQgUk9MRTsKK1JFVk9LRSBF WEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpCisgIEZST00gcmVn cmVzc19sb2dfZnVuY3Rpb247CitEUk9QIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiAtLQog LS0gVGVzdCBzb21lIGJ1aWx0LWluIFNSRnMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1 bmN0aW9ucy5zcWwKaW5kZXggOTI4YjA0ZGI3Zi4uOGU2MDNiNzI1NSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbApAQCAtNjgsMzkgKzY4LDYwIEBAIFNFTEVDVCB0ZXN0 X2Nhbm9uaWNhbGl6ZV9wYXRoKCcuL2FiYy8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9jYW5vbmlj YWxpemVfcGF0aCgnLi9hYmMvLi8uL2RlZi8uJyk7CiBTRUxFQ1QgdGVzdF9jYW5vbmljYWxpemVf cGF0aCgnLi9hYmMvLi9kZWYvLi4vLi9naGkvLi4vLi4vLi4vamtsL21ubycpOwogCistLSBUZXN0 IGxvZ2dpbmcgZnVuY3Rpb25zCiAtLQotLS0gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KCkKLS0tCi0tLSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJl dHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KKy0tIFRoZSBvdXRwdXRzIG9mIHRoZXNlIGZ1bmN0aW9u cyBhcmUgbG9nZ2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8KKy0tIHRoZSBmdW5jdGlv bi4KIC0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24g dGhlIHRpbWluZy4gSG93ZXZlciwKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0aGUg Y29kZSBkb2Vzbid0IGZhaWwsIGFuZCB0aGF0IHRoZQogLS0gcGVybWlzc2lvbnMgYXJlIHNldCBw cm9wZXJseS4KIC0tCiAKKy0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpCisKIFNF TEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CiAK IFNFTEVDVCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGlkKSBGUk9NIHBnX3N0YXRf YWN0aXZpdHkKICAgV0hFUkUgYmFja2VuZF90eXBlID0gJ2NoZWNrcG9pbnRlcic7CiAKLUNSRUFU RSBST0xFIHJlZ3Jlc3NfbG9nX21lbW9yeTsKK0NSRUFURSBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0 aW9uOwogCi1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfbWVtb3J5 JywKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbics CiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlciknLCAnRVhFQ1VURScp OyAtLSBubwogCiBHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21lbW9y eV9jb250ZXh0cyhpbnRlZ2VyKQotICBUTyByZWdyZXNzX2xvZ19tZW1vcnk7CisgIFRPIHJlZ3Jl c3NfbG9nX2Z1bmN0aW9uOwogCi1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVz c19sb2dfbWVtb3J5JywKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xv Z19mdW5jdGlvbicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoaW50ZWdlcikn LCAnRVhFQ1VURScpOyAtLSB5ZXMKIAotU0VUIFJPTEUgcmVncmVzc19sb2dfbWVtb3J5OworU0VU IFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOwogUkVTRVQgUk9MRTsKIAogUkVWT0tFIEVYRUNV VEUgT04gRlVOQ1RJT04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCi0g IEZST00gcmVncmVzc19sb2dfbWVtb3J5OworICBGUk9NIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOwor CistLSBwZ19sb2dfcXVlcnlfcGxhbigpCitTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFj a2VuZF9waWQoKSk7CisKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xv Z19mdW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKScsICdFWEVDVVRFJyk7 IC0tIG5vCisKK0dSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50 ZWdlcikKKyAgVE8gcmVncmVzc19sb2dfZnVuY3Rpb247CisKK1NFTEVDVCBoYXNfZnVuY3Rpb25f cHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19mdW5jdGlvbicsCisgICdwZ19sb2dfcXVlcnlfcGxhbihp bnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIHllcworCitTRVQgUk9MRSByZWdyZXNzX2xvZ19mdW5j dGlvbjsKK1NFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKK1JFU0VU IFJPTEU7CisKK1JFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGlu dGVnZXIpCisgIEZST00gcmVncmVzc19sb2dfZnVuY3Rpb247CiAKLURST1AgUk9MRSByZWdyZXNz X2xvZ19tZW1vcnk7CitEUk9QIFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiAKIC0tCiAtLSBU ZXN0IHNvbWUgYnVpbHQtaW4gU1JGcwoKYmFzZS1jb21taXQ6IDZlOTUxYmY5OGUyZTAyMzBlZDk1 ZGIyZmFmYzI0NDUzNmJkNzUwMmYKLS0gCjIuMzkuMgoK --=_673ae07e8590221f415eaaf53b6bea87--