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 1tI29Q-00Bcsm-Bh for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Dec 2024 08:51:29 +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 1tI29N-00FKFe-HW for pgsql-hackers@arkaria.postgresql.org; Mon, 02 Dec 2024 08:51:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tI29L-00FKFV-U8 for pgsql-hackers@lists.postgresql.org; Mon, 02 Dec 2024 08:51:26 +0000 Received: from fout-b2-smtp.messagingengine.com ([202.12.124.145]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tI29J-000cYv-48 for pgsql-hackers@postgresql.org; Mon, 02 Dec 2024 08:51:23 +0000 Received: from phl-compute-06.internal (phl-compute-06.phl.internal [10.202.2.46]) by mailfout.stl.internal (Postfix) with ESMTP id 1F00211400CA for ; Mon, 2 Dec 2024 03:51:20 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Mon, 02 Dec 2024 03:51:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm3; t=1733129479; x=1733215879; bh=EfM0/5ki2z4TFMn7meATdiiyccMYX7mS 43S/eX4q0xs=; b=THI2ry12H2BikMww+3Nsa4Tv0nZKd1Lwo2XwJLAKh9o4/ERe oISfVWfxNREfni7hjPGCM5PNT8q+JqFVWd5D8Pumo1fUQ6rozpW9AHhu4+plUT1C HsrPGiUa3N3jcOl6QUWuj9Io5GH1S3JCATHvrwU8fVlBymkUFm2bnYRmTlXL+Y/a fEJwXwON+FfSN4HTNVa3LcBfS4Xk4iMXOBqUm70MrA4WiofChAMIEahbkZLstbF4 WwnBf16DW8TIbVc3vJF22tZmLf1rudnxQPRjOuEwpBkz5QG8WKHjHfFoLfgus0PI 700oakN5SeqpSdravsOB3KId+Kobg4ejCnUyoQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1733129479; x= 1733215879; bh=EfM0/5ki2z4TFMn7meATdiiyccMYX7mS43S/eX4q0xs=; b=T eMB8CXjdtRD1HhMxBHBCVvkh1C/XOWaKyqKJZ2cJ6Vv9SGJvIerPgJNiHUQbhoLG Dk4I5iYb05l+KxHPCCueuJwjiwz1I/mpLqIsPlKOyTYj2WZ2ZklG92l87zbjLzeW 92LC8tJnimHwf8tFCufHxICeWriRxCg5JsBskmCqOn3cltnn9JYA/l1PfBP1ZVpc 9WHuvO+2W0sbvfowHoFe4SXtNdbfVtbJMJS0w6AQPut6VtNuxXv3CIS3b8cHjG2W GRYhdrcniWBA+5YifF774Zgb7NcjBOELS2igobv3fR/k/B+j/6Vvm8l6/komsu+0 BSxtGINi/bFPrK4GP6KcQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrheekgdduvdefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgg gfhffuvfesmhdtreertddvjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhht uceophgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgqeenucggtffrrghtthgvrhhnpe efvedvteeukeeuuedvjedtfeetvdeggeefiedviefhuefgtddtfeefgfejlefhjeenucff ohhmrghinhepphihthhhohhnrdhorhhgpdhgihhthhhusgdrtghomhenucevlhhushhtvg hrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrsegvihhsvghn thhrrghuthdrohhrghdpnhgspghrtghpthhtohepuddpmhhouggvpehsmhhtphhouhhtpd hrtghpthhtohepphhgshhqlhdqhhgrtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhg X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 2 Dec 2024 03:51:18 -0500 (EST) Content-Type: multipart/mixed; boundary="------------yzsqP5g2NXAkPj3EuTO9Ecrp" Message-ID: Date: Mon, 2 Dec 2024 09:51:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Peter Eisentraut Subject: Use Python "Limited API" in PL/Python To: pgsql-hackers List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------yzsqP5g2NXAkPj3EuTO9Ecrp Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch changes PL/Python to use the Python "limited API". This API has stronger ABI stability guarantees.[0] This means, you can build PL/Python against any Python 3.x version and use any other Python 3.x version at run time. This is especially useful for binary packages where the operating system does not come with a fixed suitable version of Python. For example, Postgres.app (for macOS) would prefer to link against the Python version supplied by python.org (Python.app). But that has a 3.x version that changes over time. So instead they bundle a Python version inside Postgres.app. The Windows installer used to also bundle Python but as of PG17 you have to get it yourself, but you have to get a very specific version [1], which is unsatisfactory. This patch fixes that: You can use any Python version independent of what PL/Python was built against. (There is a mechanism to say "at least 3.N", but for this patch, we don't need that, we can stick with the current minimum of 3.2.) (I have only tested the macOS side of this, not the Windows side. In fact, the patch currently doesn't build on Windows on CI. I haven't figured out why.) For Linux-style packaging, I don't think this would have any benefit for users right now, since the OS comes with a Python installation and all the packages are built against that. But it could potentially be helpful for packagers. For example, on Debian, this could detach the postgresql packages from python version transitions. But AFAICT, the Python packaging layout is not prepared for that. (There are only libpython3.x.so libraries, no libpython3.so that one would have to link against.) Finally, I think this patch is part of a path toward making PL/Python thread-safe. I don't think the patch by itself changes anything, but if you read through [2], using heap types is part of the things mentioned there. [0]: https://docs.python.org/3/c-api/stable.html [1]: https://github.com/EnterpriseDB/edb-installers/blob/REL-17/server/resources/installation-notes.html#L34-L36 [2]: https://docs.python.org/3/howto/isolating-extensions.html --------------yzsqP5g2NXAkPj3EuTO9Ecrp Content-Type: text/plain; charset=UTF-8; name="0001-Remove-obsolete-Python-version-check.patch" Content-Disposition: attachment; filename="0001-Remove-obsolete-Python-version-check.patch" Content-Transfer-Encoding: base64 RnJvbSA3NmQ0ZTRiNjI4ZjllNzkxM2I1YzM2MWRiYmQ0YzBlYTlkNTcwMTQ2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyIERlYyAyMDI0IDA4OjUzOjQyICswMTAwClN1YmplY3Q6 IFtQQVRDSCAxLzJdIFJlbW92ZSBvYnNvbGV0ZSBQeXRob24gdmVyc2lvbiBjaGVjawoKVGhl IGNoZWNrZWQgdmVyc2lvbiBpcyBhbHJlYWR5IHRoZSBjdXJyZW50IG1pbmltdW0gc3VwcG9y dGVkIHZlcnNpb24KKDMuMikuCi0tLQogc3JjL3BsL3BscHl0aG9uL3BscHlfZXhlYy5jIHwg OCArLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuYyBiL3NyYy9w bC9wbHB5dGhvbi9wbHB5X2V4ZWMuYwppbmRleCAwZTg0YmI5MDgyOS4uMDA3NDdiYjgxMWIg MTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2V4ZWMuYworKysgYi9zcmMvcGwv cGxweXRob24vcGxweV9leGVjLmMKQEAgLTEwNjYsMTMgKzEwNjYsNyBAQCBQTHlfcHJvY2Vk dXJlX2NhbGwoUEx5UHJvY2VkdXJlICpwcm9jLCBjb25zdCBjaGFyICprYXJncywgUHlPYmpl Y3QgKnZhcmdzKQogCiAJUEdfVFJZKCk7CiAJewotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4 MDMwMjAwMDAKLQkJcnYgPSBQeUV2YWxfRXZhbENvZGUocHJvYy0+Y29kZSwKLQkJCQkJCQkg cHJvYy0+Z2xvYmFscywgcHJvYy0+Z2xvYmFscyk7Ci0jZWxzZQotCQlydiA9IFB5RXZhbF9F dmFsQ29kZSgoUHlDb2RlT2JqZWN0ICopIHByb2MtPmNvZGUsCi0JCQkJCQkJIHByb2MtPmds b2JhbHMsIHByb2MtPmdsb2JhbHMpOwotI2VuZGlmCisJCXJ2ID0gUHlFdmFsX0V2YWxDb2Rl KHByb2MtPmNvZGUsIHByb2MtPmdsb2JhbHMsIHByb2MtPmdsb2JhbHMpOwogCiAJCS8qCiAJ CSAqIFNpbmNlIHBscHkgd2lsbCBvbmx5IGxldCB5b3UgY2xvc2Ugc3VidHJhbnNhY3Rpb25z IHRoYXQgeW91CgpiYXNlLWNvbW1pdDogMmY2OTY0NTNkMmIzOWZlYTgwMGQ1ZjdkOGU1ZDNl MWEyMjY2ZGUyNAotLSAKMi40Ny4xCgo= --------------yzsqP5g2NXAkPj3EuTO9Ecrp Content-Type: text/plain; charset=UTF-8; name="0002-Use-Python-Limited-API-in-PL-Python.patch" Content-Disposition: attachment; filename="0002-Use-Python-Limited-API-in-PL-Python.patch" Content-Transfer-Encoding: base64 RnJvbSBhMDMxYTEyODE0MGYzZjRjNjFlNmE1NDY4YzFhNjAzZjU0N2E5ODZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyIERlYyAyMDI0IDA4OjUzOjQyICswMTAwClN1YmplY3Q6 IFtQQVRDSCAyLzJdIFVzZSBQeXRob24gIkxpbWl0ZWQgQVBJIiBpbiBQTC9QeXRob24KClRo aXMgYWxsb3dzIGJ1aWxkaW5nIFBML1B5dGhvbiBhZ2FpbnN0IGFueSBQeXRob24gMy54IHZl cnNpb24gYW5kCnVzaW5nIGFub3RoZXIgUHl0aG9uIDMueCB2ZXJzaW9uIGF0IHJ1biB0aW1l LgoKSW1wbGVtZW50YXRpb24gZGV0YWlsczoKCi0gQ29udmVydCBzdGF0aWMgdHlwZXMgdG8g aGVhcCB0eXBlcwogIChodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2lzb2xhdGlu Zy1leHRlbnNpb25zLmh0bWwjaGVhcC10eXBlcykuCgotIFJlcGxhY2UgUHlSdW5fU3RyaW5n KCkgd2l0aCBjb21wb25lbnQgZnVuY3Rpb25zLgoKLSBSZXBsYWNlIFB5TGlzdF9TRVRfSVRF TSgpIHdpdGggUHlMaXN0X1NldEl0ZW0oKS4KLS0tCiBzcmMvcGwvcGxweXRob24vcGxweV9j dXJzb3JvYmplY3QuYyAgfCA3MSArKysrKysrKysrKysrLS0tLS0tLQogc3JjL3BsL3BscHl0 aG9uL3BscHlfcGxhbm9iamVjdC5jICAgIHwgNjEgKysrKysrKysrKystLS0tLS0KIHNyYy9w bC9wbHB5dGhvbi9wbHB5X3Byb2NlZHVyZS5jICAgICB8ICA1ICstCiBzcmMvcGwvcGxweXRo b24vcGxweV9yZXN1bHRvYmplY3QuYyAgfCA5OCArKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tCiBzcmMvcGwvcGxweXRob24vcGxweV9zdWJ4YWN0b2JqZWN0LmMgfCA0MSArKysrKysr LS0tLS0KIHNyYy9wbC9wbHB5dGhvbi9wbHB5X3R5cGVpby5jICAgICAgICB8ICA2ICstCiBz cmMvcGwvcGxweXRob24vcGxweXRob24uaCAgICAgICAgICAgfCAgMiArCiA3IGZpbGVzIGNo YW5nZWQsIDE3OSBpbnNlcnRpb25zKCspLCAxMDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL3BsL3BscHl0aG9uL3BscHlfY3Vyc29yb2JqZWN0LmMgYi9zcmMvcGwvcGxweXRo b24vcGxweV9jdXJzb3JvYmplY3QuYwppbmRleCA2MTA4Mzg0YzlhNS4uMzliY2FlM2YxZDkg MTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X2N1cnNvcm9iamVjdC5jCisrKyBi L3NyYy9wbC9wbHB5dGhvbi9wbHB5X2N1cnNvcm9iamVjdC5jCkBAIC0yMCw3ICsyMCw3IEBA CiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAogc3RhdGljIFB5T2JqZWN0ICpQTHlf Y3Vyc29yX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KTsKLXN0YXRpYyB2b2lkIFBMeV9jdXJz b3JfZGVhbGxvYyhQeU9iamVjdCAqYXJnKTsKK3N0YXRpYyB2b2lkIFBMeV9jdXJzb3JfZGVh bGxvYyhQTHlDdXJzb3JPYmplY3QgKnNlbGYpOwogc3RhdGljIFB5T2JqZWN0ICpQTHlfY3Vy c29yX2l0ZXJuZXh0KFB5T2JqZWN0ICpzZWxmKTsKIHN0YXRpYyBQeU9iamVjdCAqUEx5X2N1 cnNvcl9mZXRjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwogc3RhdGljIFB5 T2JqZWN0ICpQTHlfY3Vyc29yX2Nsb3NlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51 c2VkKTsKQEAgLTMzLDIyICszMyw0MyBAQCBzdGF0aWMgUHlNZXRob2REZWYgUEx5X2N1cnNv cl9tZXRob2RzW10gPSB7CiAJe05VTEwsIE5VTEwsIDAsIE5VTEx9CiB9OwogCi1zdGF0aWMg UHlUeXBlT2JqZWN0IFBMeV9DdXJzb3JUeXBlID0gewotCVB5VmFyT2JqZWN0X0hFQURfSU5J VChOVUxMLCAwKQotCS50cF9uYW1lID0gIlBMeUN1cnNvciIsCi0JLnRwX2Jhc2ljc2l6ZSA9 IHNpemVvZihQTHlDdXJzb3JPYmplY3QpLAotCS50cF9kZWFsbG9jID0gUEx5X2N1cnNvcl9k ZWFsbG9jLAotCS50cF9mbGFncyA9IFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1Nf QkFTRVRZUEUsCi0JLnRwX2RvYyA9IFBMeV9jdXJzb3JfZG9jLAotCS50cF9pdGVyID0gUHlP YmplY3RfU2VsZkl0ZXIsCi0JLnRwX2l0ZXJuZXh0ID0gUEx5X2N1cnNvcl9pdGVybmV4dCwK LQkudHBfbWV0aG9kcyA9IFBMeV9jdXJzb3JfbWV0aG9kcywKK3N0YXRpYyBQeVR5cGVfU2xv dCBQTHlDdXJzb3Jfc2xvdHNbXSA9Cit7CisJeworCQlQeV90cF9kZWFsbG9jLCBQTHlfY3Vy c29yX2RlYWxsb2MKKwl9LAorCXsKKwkJUHlfdHBfZG9jLCAoY2hhciAqKSBQTHlfY3Vyc29y X2RvYworCX0sCisJeworCQlQeV90cF9pdGVyLCBQeU9iamVjdF9TZWxmSXRlcgorCX0sCisJ eworCQlQeV90cF9pdGVybmV4dCwgUEx5X2N1cnNvcl9pdGVybmV4dAorCX0sCisJeworCQlQ eV90cF9tZXRob2RzLCBQTHlfY3Vyc29yX21ldGhvZHMKKwl9LAorCXsKKwkJMCwgTlVMTAor CX0KIH07CiAKK3N0YXRpYyBQeVR5cGVfU3BlYyBQTHlDdXJzb3Jfc3BlYyA9Cit7CisJLm5h bWUgPSAiUEx5Q3Vyc29yIiwKKwkJLmJhc2ljc2l6ZSA9IHNpemVvZihQTHlDdXJzb3JPYmpl Y3QpLAorCQkuZmxhZ3MgPSBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VU WVBFLAorCQkuc2xvdHMgPSBQTHlDdXJzb3Jfc2xvdHMsCit9OworCitzdGF0aWMgUHlUeXBl T2JqZWN0ICpQTHlfQ3Vyc29yVHlwZTsKKwogdm9pZAogUEx5X2N1cnNvcl9pbml0X3R5cGUo dm9pZCkKIHsKLQlpZiAoUHlUeXBlX1JlYWR5KCZQTHlfQ3Vyc29yVHlwZSkgPCAwKQorCVBM eV9DdXJzb3JUeXBlID0gKFB5VHlwZU9iamVjdCAqKSBQeVR5cGVfRnJvbVNwZWMoJlBMeUN1 cnNvcl9zcGVjKTsKKwlpZiAoIVBMeV9DdXJzb3JUeXBlKQogCQllbG9nKEVSUk9SLCAiY291 bGQgbm90IGluaXRpYWxpemUgUEx5X0N1cnNvclR5cGUiKTsKIH0KIApAQCAtODAsNyArMTAx LDcgQEAgUEx5X2N1cnNvcl9xdWVyeShjb25zdCBjaGFyICpxdWVyeSkKIAl2b2xhdGlsZSBN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CiAJdm9sYXRpbGUgUmVzb3VyY2VPd25lciBvbGRv d25lcjsKIAotCWlmICgoY3Vyc29yID0gUHlPYmplY3RfTmV3KFBMeUN1cnNvck9iamVjdCwg JlBMeV9DdXJzb3JUeXBlKSkgPT0gTlVMTCkKKwlpZiAoKGN1cnNvciA9IFB5T2JqZWN0X05l dyhQTHlDdXJzb3JPYmplY3QsIFBMeV9DdXJzb3JUeXBlKSkgPT0gTlVMTCkKIAkJcmV0dXJu IE5VTEw7CiAJY3Vyc29yLT5wb3J0YWxuYW1lID0gTlVMTDsKIAljdXJzb3ItPmNsb3NlZCA9 IGZhbHNlOwpAQCAtMTc4LDcgKzE5OSw3IEBAIFBMeV9jdXJzb3JfcGxhbihQeU9iamVjdCAq b2IsIFB5T2JqZWN0ICphcmdzKQogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoKGN1cnNv ciA9IFB5T2JqZWN0X05ldyhQTHlDdXJzb3JPYmplY3QsICZQTHlfQ3Vyc29yVHlwZSkpID09 IE5VTEwpCisJaWYgKChjdXJzb3IgPSBQeU9iamVjdF9OZXcoUEx5Q3Vyc29yT2JqZWN0LCBQ THlfQ3Vyc29yVHlwZSkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCWN1cnNvci0+cG9y dGFsbmFtZSA9IE5VTEw7CiAJY3Vyc29yLT5jbG9zZWQgPSBmYWxzZTsKQEAgLTI3NiwzMCAr Mjk3LDMwIEBAIFBMeV9jdXJzb3JfcGxhbihQeU9iamVjdCAqb2IsIFB5T2JqZWN0ICphcmdz KQogfQogCiBzdGF0aWMgdm9pZAotUEx5X2N1cnNvcl9kZWFsbG9jKFB5T2JqZWN0ICphcmcp CitQTHlfY3Vyc29yX2RlYWxsb2MoUEx5Q3Vyc29yT2JqZWN0ICpzZWxmKQogewotCVBMeUN1 cnNvck9iamVjdCAqY3Vyc29yOworCVB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKHNlbGYp OwogCVBvcnRhbAkJcG9ydGFsOwogCi0JY3Vyc29yID0gKFBMeUN1cnNvck9iamVjdCAqKSBh cmc7Ci0KLQlpZiAoIWN1cnNvci0+Y2xvc2VkKQorCWlmICghc2VsZi0+Y2xvc2VkKQogCXsK LQkJcG9ydGFsID0gR2V0UG9ydGFsQnlOYW1lKGN1cnNvci0+cG9ydGFsbmFtZSk7CisJCXBv cnRhbCA9IEdldFBvcnRhbEJ5TmFtZShzZWxmLT5wb3J0YWxuYW1lKTsKIAogCQlpZiAoUG9y dGFsSXNWYWxpZChwb3J0YWwpKQogCQl7CiAJCQlVbnBpblBvcnRhbChwb3J0YWwpOwogCQkJ U1BJX2N1cnNvcl9jbG9zZShwb3J0YWwpOwogCQl9Ci0JCWN1cnNvci0+Y2xvc2VkID0gdHJ1 ZTsKKwkJc2VsZi0+Y2xvc2VkID0gdHJ1ZTsKIAl9Ci0JaWYgKGN1cnNvci0+bWN4dCkKKwlp ZiAoc2VsZi0+bWN4dCkKIAl7Ci0JCU1lbW9yeUNvbnRleHREZWxldGUoY3Vyc29yLT5tY3h0 KTsKLQkJY3Vyc29yLT5tY3h0ID0gTlVMTDsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShzZWxm LT5tY3h0KTsKKwkJc2VsZi0+bWN4dCA9IE5VTEw7CiAJfQotCWFyZy0+b2JfdHlwZS0+dHBf ZnJlZShhcmcpOworCisJUHlPYmplY3RfRnJlZShzZWxmKTsKKwlQeV9ERUNSRUYodHApOwog fQogCiBzdGF0aWMgUHlPYmplY3QgKgpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscHl0aG9uL3Bs cHlfcGxhbm9iamVjdC5jIGIvc3JjL3BsL3BscHl0aG9uL3BscHlfcGxhbm9iamVjdC5jCmlu ZGV4IGJiZWY4ODkzMjllLi45ODZiNzE3OWYxNCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscHl0 aG9uL3BscHlfcGxhbm9iamVjdC5jCisrKyBiL3NyYy9wbC9wbHB5dGhvbi9wbHB5X3BsYW5v YmplY3QuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgInBscHl0aG9uLmgiCiAjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAotc3RhdGljIHZvaWQgUEx5X3BsYW5fZGVhbGxv YyhQeU9iamVjdCAqYXJnKTsKK3N0YXRpYyB2b2lkIFBMeV9wbGFuX2RlYWxsb2MoUEx5UGxh bk9iamVjdCAqc2VsZik7CiBzdGF0aWMgUHlPYmplY3QgKlBMeV9wbGFuX2N1cnNvcihQeU9i amVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwogc3RhdGljIFB5T2JqZWN0ICpQTHlfcGxh bl9leGVjdXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CiBzdGF0aWMgUHlP YmplY3QgKlBMeV9wbGFuX3N0YXR1cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3Mp OwpAQCAtMjYsMjAgKzI2LDM3IEBAIHN0YXRpYyBQeU1ldGhvZERlZiBQTHlfcGxhbl9tZXRo b2RzW10gPSB7CiAJe05VTEwsIE5VTEwsIDAsIE5VTEx9CiB9OwogCi1zdGF0aWMgUHlUeXBl T2JqZWN0IFBMeV9QbGFuVHlwZSA9IHsKLQlQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwg MCkKLQkudHBfbmFtZSA9ICJQTHlQbGFuIiwKLQkudHBfYmFzaWNzaXplID0gc2l6ZW9mKFBM eVBsYW5PYmplY3QpLAotCS50cF9kZWFsbG9jID0gUEx5X3BsYW5fZGVhbGxvYywKLQkudHBf ZmxhZ3MgPSBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLAotCS50 cF9kb2MgPSBQTHlfcGxhbl9kb2MsCi0JLnRwX21ldGhvZHMgPSBQTHlfcGxhbl9tZXRob2Rz LAorc3RhdGljIFB5VHlwZV9TbG90IFBMeVBsYW5fc2xvdHNbXSA9Cit7CisJeworCQlQeV90 cF9kZWFsbG9jLCBQTHlfcGxhbl9kZWFsbG9jCisJfSwKKwl7CisJCVB5X3RwX2RvYywgKGNo YXIgKikgUEx5X3BsYW5fZG9jCisJfSwKKwl7CisJCVB5X3RwX21ldGhvZHMsIFBMeV9wbGFu X21ldGhvZHMKKwl9LAorCXsKKwkJMCwgTlVMTAorCX0KIH07CiAKK3N0YXRpYyBQeVR5cGVf U3BlYyBQTHlQbGFuX3NwZWMgPQoreworCS5uYW1lID0gIlBMeVBsYW4iLAorCQkuYmFzaWNz aXplID0gc2l6ZW9mKFBMeVBsYW5PYmplY3QpLAorCQkuZmxhZ3MgPSBQeV9UUEZMQUdTX0RF RkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLAorCQkuc2xvdHMgPSBQTHlQbGFuX3Nsb3Rz LAorfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCAqUEx5X1BsYW5UeXBlOworCiB2b2lkCiBQ THlfcGxhbl9pbml0X3R5cGUodm9pZCkKIHsKLQlpZiAoUHlUeXBlX1JlYWR5KCZQTHlfUGxh blR5cGUpIDwgMCkKKwlQTHlfUGxhblR5cGUgPSAoUHlUeXBlT2JqZWN0ICopIFB5VHlwZV9G cm9tU3BlYygmUEx5UGxhbl9zcGVjKTsKKwlpZiAoIVBMeV9QbGFuVHlwZSkKIAkJZWxvZyhF UlJPUiwgImNvdWxkIG5vdCBpbml0aWFsaXplIFBMeV9QbGFuVHlwZSIpOwogfQogCkBAIC00 OCw3ICs2NSw3IEBAIFBMeV9wbGFuX25ldyh2b2lkKQogewogCVBMeVBsYW5PYmplY3QgKm9i OwogCi0JaWYgKChvYiA9IFB5T2JqZWN0X05ldyhQTHlQbGFuT2JqZWN0LCAmUEx5X1BsYW5U eXBlKSkgPT0gTlVMTCkKKwlpZiAoKG9iID0gUHlPYmplY3RfTmV3KFBMeVBsYW5PYmplY3Qs IFBMeV9QbGFuVHlwZSkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCiAJb2ItPnBsYW4g PSBOVUxMOwpAQCAtNjQsMjUgKzgxLDI3IEBAIFBMeV9wbGFuX25ldyh2b2lkKQogYm9vbAog aXNfUEx5UGxhbk9iamVjdChQeU9iamVjdCAqb2IpCiB7Ci0JcmV0dXJuIG9iLT5vYl90eXBl ID09ICZQTHlfUGxhblR5cGU7CisJcmV0dXJuIG9iLT5vYl90eXBlID09IFBMeV9QbGFuVHlw ZTsKIH0KIAogc3RhdGljIHZvaWQKLVBMeV9wbGFuX2RlYWxsb2MoUHlPYmplY3QgKmFyZykK K1BMeV9wbGFuX2RlYWxsb2MoUEx5UGxhbk9iamVjdCAqc2VsZikKIHsKLQlQTHlQbGFuT2Jq ZWN0ICpvYiA9IChQTHlQbGFuT2JqZWN0ICopIGFyZzsKKwlQeVR5cGVPYmplY3QgKnRwID0g UHlfVFlQRShzZWxmKTsKIAotCWlmIChvYi0+cGxhbikKKwlpZiAoc2VsZi0+cGxhbikKIAl7 Ci0JCVNQSV9mcmVlcGxhbihvYi0+cGxhbik7Ci0JCW9iLT5wbGFuID0gTlVMTDsKKwkJU1BJ X2ZyZWVwbGFuKHNlbGYtPnBsYW4pOworCQlzZWxmLT5wbGFuID0gTlVMTDsKIAl9Ci0JaWYg KG9iLT5tY3h0KQorCWlmIChzZWxmLT5tY3h0KQogCXsKLQkJTWVtb3J5Q29udGV4dERlbGV0 ZShvYi0+bWN4dCk7Ci0JCW9iLT5tY3h0ID0gTlVMTDsKKwkJTWVtb3J5Q29udGV4dERlbGV0 ZShzZWxmLT5tY3h0KTsKKwkJc2VsZi0+bWN4dCA9IE5VTEw7CiAJfQotCWFyZy0+b2JfdHlw ZS0+dHBfZnJlZShhcmcpOworCisJUHlPYmplY3RfRnJlZShzZWxmKTsKKwlQeV9ERUNSRUYo dHApOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9wbHB5X3Byb2NlZHVy ZS5jIGIvc3JjL3BsL3BscHl0aG9uL3BscHlfcHJvY2VkdXJlLmMKaW5kZXggYzM1YTNiODAx YWIuLmI0OTRlZWI0NzRmIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxweXRob24vcGxweV9wcm9j ZWR1cmUuYworKysgYi9zcmMvcGwvcGxweXRob24vcGxweV9wcm9jZWR1cmUuYwpAQCAtMzUw LDYgKzM1MCw3IEBAIFBMeV9wcm9jZWR1cmVfY29tcGlsZShQTHlQcm9jZWR1cmUgKnByb2Ms IGNvbnN0IGNoYXIgKnNyYykKIHsKIAlQeU9iamVjdCAgICpjcnYgPSBOVUxMOwogCWNoYXIJ ICAgKm1zcmM7CisJUHlPYmplY3QgICAqY29kZTA7CiAKIAlwcm9jLT5nbG9iYWxzID0gUHlE aWN0X0NvcHkoUEx5X2ludGVycF9nbG9iYWxzKTsKIApAQCAtMzY4LDcgKzM2OSw5IEBAIFBM eV9wcm9jZWR1cmVfY29tcGlsZShQTHlQcm9jZWR1cmUgKnByb2MsIGNvbnN0IGNoYXIgKnNy YykKIAltc3JjID0gUEx5X3Byb2NlZHVyZV9tdW5nZV9zb3VyY2UocHJvYy0+cHluYW1lLCBz cmMpOwogCS8qIFNhdmUgdGhlIG1hbmdsZWQgc291cmNlIGZvciBsYXRlciBpbmNsdXNpb24g aW4gdHJhY2ViYWNrcyAqLwogCXByb2MtPnNyYyA9IE1lbW9yeUNvbnRleHRTdHJkdXAocHJv Yy0+bWN4dCwgbXNyYyk7Ci0JY3J2ID0gUHlSdW5fU3RyaW5nKG1zcmMsIFB5X2ZpbGVfaW5w dXQsIHByb2MtPmdsb2JhbHMsIE5VTEwpOworCWNvZGUwID0gUHlfQ29tcGlsZVN0cmluZyht c3JjLCAiPHN0cmluZz4iLCBQeV9maWxlX2lucHV0KTsKKwlpZiAoY29kZTApCisJCWNydiA9 IFB5RXZhbF9FdmFsQ29kZShjb2RlMCwgcHJvYy0+Z2xvYmFscywgTlVMTCk7CiAJcGZyZWUo bXNyYyk7CiAKIAlpZiAoY3J2ICE9IE5VTEwpCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxweXRo b24vcGxweV9yZXN1bHRvYmplY3QuYyBiL3NyYy9wbC9wbHB5dGhvbi9wbHB5X3Jlc3VsdG9i amVjdC5jCmluZGV4IDk1YWNjZTY1NDkzLi5mMjYyODIwNTY2OSAxMDA2NDQKLS0tIGEvc3Jj L3BsL3BscHl0aG9uL3BscHlfcmVzdWx0b2JqZWN0LmMKKysrIGIvc3JjL3BsL3BscHl0aG9u L3BscHlfcmVzdWx0b2JqZWN0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlICJwbHB5 X3Jlc3VsdG9iamVjdC5oIgogI2luY2x1ZGUgInBscHl0aG9uLmgiCiAKLXN0YXRpYyB2b2lk IFBMeV9yZXN1bHRfZGVhbGxvYyhQeU9iamVjdCAqYXJnKTsKK3N0YXRpYyB2b2lkIFBMeV9y ZXN1bHRfZGVhbGxvYyhQTHlSZXN1bHRPYmplY3QgKnNlbGYpOwogc3RhdGljIFB5T2JqZWN0 ICpQTHlfcmVzdWx0X2NvbG5hbWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2Vk KTsKIHN0YXRpYyBQeU9iamVjdCAqUEx5X3Jlc3VsdF9jb2x0eXBlcyhQeU9iamVjdCAqc2Vs ZiwgUHlPYmplY3QgKnVudXNlZCk7CiBzdGF0aWMgUHlPYmplY3QgKlBMeV9yZXN1bHRfY29s dHlwbW9kcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCk7CkBAIC0yNCwxNyAr MjQsNiBAQCBzdGF0aWMgaW50CVBMeV9yZXN1bHRfYXNzX3N1YnNjcmlwdChQeU9iamVjdCAq YXJnLCBQeU9iamVjdCAqaXRlbSwgUHlPYmplY3QgKnZhbAogCiBzdGF0aWMgY2hhciBQTHlf cmVzdWx0X2RvY1tdID0gIlJlc3VsdHMgb2YgYSBQb3N0Z3JlU1FMIHF1ZXJ5IjsKIAotc3Rh dGljIFB5U2VxdWVuY2VNZXRob2RzIFBMeV9yZXN1bHRfYXNfc2VxdWVuY2UgPSB7Ci0JLnNx X2xlbmd0aCA9IFBMeV9yZXN1bHRfbGVuZ3RoLAotCS5zcV9pdGVtID0gUEx5X3Jlc3VsdF9p dGVtLAotfTsKLQotc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgUEx5X3Jlc3VsdF9hc19tYXBw aW5nID0gewotCS5tcF9sZW5ndGggPSBQTHlfcmVzdWx0X2xlbmd0aCwKLQkubXBfc3Vic2Ny aXB0ID0gUEx5X3Jlc3VsdF9zdWJzY3JpcHQsCi0JLm1wX2Fzc19zdWJzY3JpcHQgPSBQTHlf cmVzdWx0X2Fzc19zdWJzY3JpcHQsCi19OwotCiBzdGF0aWMgUHlNZXRob2REZWYgUEx5X3Jl c3VsdF9tZXRob2RzW10gPSB7CiAJeyJjb2xuYW1lcyIsIFBMeV9yZXN1bHRfY29sbmFtZXMs IE1FVEhfTk9BUkdTLCBOVUxMfSwKIAl7ImNvbHR5cGVzIiwgUEx5X3Jlc3VsdF9jb2x0eXBl cywgTUVUSF9OT0FSR1MsIE5VTEx9LApAQCAtNDQsMjMgKzMzLDU1IEBAIHN0YXRpYyBQeU1l dGhvZERlZiBQTHlfcmVzdWx0X21ldGhvZHNbXSA9IHsKIAl7TlVMTCwgTlVMTCwgMCwgTlVM TH0KIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUEx5X1Jlc3VsdFR5cGUgPSB7Ci0JUHlW YXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0JLnRwX25hbWUgPSAiUEx5UmVzdWx0IiwK LQkudHBfYmFzaWNzaXplID0gc2l6ZW9mKFBMeVJlc3VsdE9iamVjdCksCi0JLnRwX2RlYWxs b2MgPSBQTHlfcmVzdWx0X2RlYWxsb2MsCi0JLnRwX2FzX3NlcXVlbmNlID0gJlBMeV9yZXN1 bHRfYXNfc2VxdWVuY2UsCi0JLnRwX2FzX21hcHBpbmcgPSAmUEx5X3Jlc3VsdF9hc19tYXBw aW5nLAotCS50cF9zdHIgPSAmUEx5X3Jlc3VsdF9zdHIsCi0JLnRwX2ZsYWdzID0gUHlfVFBG TEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwKLQkudHBfZG9jID0gUEx5X3Jl c3VsdF9kb2MsCi0JLnRwX21ldGhvZHMgPSBQTHlfcmVzdWx0X21ldGhvZHMsCitzdGF0aWMg UHlUeXBlX1Nsb3QgUEx5UmVzdWx0X3Nsb3RzW10gPQoreworCXsKKwkJUHlfdHBfZGVhbGxv YywgUEx5X3Jlc3VsdF9kZWFsbG9jCisJfSwKKwl7CisJCVB5X3NxX2xlbmd0aCwgUEx5X3Jl c3VsdF9sZW5ndGgKKwl9LAorCXsKKwkJUHlfc3FfaXRlbSwgUEx5X3Jlc3VsdF9pdGVtCisJ fSwKKwl7CisJCVB5X21wX2xlbmd0aCwgUEx5X3Jlc3VsdF9sZW5ndGgKKwl9LAorCXsKKwkJ UHlfbXBfc3Vic2NyaXB0LCBQTHlfcmVzdWx0X3N1YnNjcmlwdAorCX0sCisJeworCQlQeV9t cF9hc3Nfc3Vic2NyaXB0LCBQTHlfcmVzdWx0X2Fzc19zdWJzY3JpcHQKKwl9LAorCXsKKwkJ UHlfdHBfc3RyLCBQTHlfcmVzdWx0X3N0cgorCX0sCisJeworCQlQeV90cF9kb2MsIChjaGFy ICopIFBMeV9yZXN1bHRfZG9jCisJfSwKKwl7CisJCVB5X3RwX21ldGhvZHMsIFBMeV9yZXN1 bHRfbWV0aG9kcworCX0sCisJeworCQkwLCBOVUxMCisJfQogfTsKIAorc3RhdGljIFB5VHlw ZV9TcGVjIFBMeVJlc3VsdF9zcGVjID0KK3sKKwkubmFtZSA9ICJQTHlSZXN1bHQiLAorCQku YmFzaWNzaXplID0gc2l6ZW9mKFBMeVJlc3VsdE9iamVjdCksCisJCS5mbGFncyA9IFB5X1RQ RkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsCisJCS5zbG90cyA9IFBMeVJl c3VsdF9zbG90cywKK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgKlBMeV9SZXN1bHRUeXBl OworCiB2b2lkCiBQTHlfcmVzdWx0X2luaXRfdHlwZSh2b2lkKQogewotCWlmIChQeVR5cGVf UmVhZHkoJlBMeV9SZXN1bHRUeXBlKSA8IDApCisJUEx5X1Jlc3VsdFR5cGUgPSAoUHlUeXBl T2JqZWN0ICopIFB5VHlwZV9Gcm9tU3BlYygmUEx5UmVzdWx0X3NwZWMpOworCWlmICghUEx5 X1Jlc3VsdFR5cGUpCiAJCWVsb2coRVJST1IsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSBQTHlf UmVzdWx0VHlwZSIpOwogfQogCkBAIC02OSw3ICs5MCw3IEBAIFBMeV9yZXN1bHRfbmV3KHZv aWQpCiB7CiAJUEx5UmVzdWx0T2JqZWN0ICpvYjsKIAotCWlmICgob2IgPSBQeU9iamVjdF9O ZXcoUEx5UmVzdWx0T2JqZWN0LCAmUEx5X1Jlc3VsdFR5cGUpKSA9PSBOVUxMKQorCWlmICgo b2IgPSBQeU9iamVjdF9OZXcoUEx5UmVzdWx0T2JqZWN0LCBQTHlfUmVzdWx0VHlwZSkpID09 IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCiAJLyogb2ItPnR1cGxlcyA9IE5VTEw7ICovCkBA IC04OSwyMCArMTEwLDIxIEBAIFBMeV9yZXN1bHRfbmV3KHZvaWQpCiB9CiAKIHN0YXRpYyB2 b2lkCi1QTHlfcmVzdWx0X2RlYWxsb2MoUHlPYmplY3QgKmFyZykKK1BMeV9yZXN1bHRfZGVh bGxvYyhQTHlSZXN1bHRPYmplY3QgKnNlbGYpCiB7Ci0JUEx5UmVzdWx0T2JqZWN0ICpvYiA9 IChQTHlSZXN1bHRPYmplY3QgKikgYXJnOworCVB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBF KHNlbGYpOwogCi0JUHlfWERFQ1JFRihvYi0+bnJvd3MpOwotCVB5X1hERUNSRUYob2ItPnJv d3MpOwotCVB5X1hERUNSRUYob2ItPnN0YXR1cyk7Ci0JaWYgKG9iLT50dXBkZXNjKQorCVB5 X1hERUNSRUYoc2VsZi0+bnJvd3MpOworCVB5X1hERUNSRUYoc2VsZi0+cm93cyk7CisJUHlf WERFQ1JFRihzZWxmLT5zdGF0dXMpOworCWlmIChzZWxmLT50dXBkZXNjKQogCXsKLQkJRnJl ZVR1cGxlRGVzYyhvYi0+dHVwZGVzYyk7Ci0JCW9iLT50dXBkZXNjID0gTlVMTDsKKwkJRnJl ZVR1cGxlRGVzYyhzZWxmLT50dXBkZXNjKTsKKwkJc2VsZi0+dHVwZGVzYyA9IE5VTEw7CiAJ fQogCi0JYXJnLT5vYl90eXBlLT50cF9mcmVlKGFyZyk7CisJUHlPYmplY3RfRnJlZShzZWxm KTsKKwlQeV9ERUNSRUYodHApOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTI1LDcg KzE0Nyw3IEBAIFBMeV9yZXN1bHRfY29sbmFtZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0 ICp1bnVzZWQpCiAJewogCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0 cihvYi0+dHVwZGVzYywgaSk7CiAKLQkJUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIFBMeVVu aWNvZGVfRnJvbVN0cmluZyhOYW1lU3RyKGF0dHItPmF0dG5hbWUpKSk7CisJCVB5TGlzdF9T ZXRJdGVtKGxpc3QsIGksIFBMeVVuaWNvZGVfRnJvbVN0cmluZyhOYW1lU3RyKGF0dHItPmF0 dG5hbWUpKSk7CiAJfQogCiAJcmV0dXJuIGxpc3Q7CkBAIC0xNTEsNyArMTczLDcgQEAgUEx5 X3Jlc3VsdF9jb2x0eXBlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIAl7 CiAJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKG9iLT50dXBkZXNj LCBpKTsKIAotCQlQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgUHlMb25nX0Zyb21Mb25nKGF0 dHItPmF0dHR5cGlkKSk7CisJCVB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIFB5TG9uZ19Gcm9t TG9uZyhhdHRyLT5hdHR0eXBpZCkpOwogCX0KIAogCXJldHVybiBsaXN0OwpAQCAtMTc3LDcg KzE5OSw3IEBAIFBMeV9yZXN1bHRfY29sdHlwbW9kcyhQeU9iamVjdCAqc2VsZiwgUHlPYmpl Y3QgKnVudXNlZCkKIAl7CiAJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NB dHRyKG9iLT50dXBkZXNjLCBpKTsKIAotCQlQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgUHlM b25nX0Zyb21Mb25nKGF0dHItPmF0dHR5cG1vZCkpOworCQlQeUxpc3RfU2V0SXRlbShsaXN0 LCBpLCBQeUxvbmdfRnJvbUxvbmcoYXR0ci0+YXR0dHlwbW9kKSk7CiAJfQogCiAJcmV0dXJu IGxpc3Q7CkBAIC0yMjcsNyArMjQ5LDcgQEAgUEx5X3Jlc3VsdF9zdHIoUHlPYmplY3QgKmFy ZykKIAlQTHlSZXN1bHRPYmplY3QgKm9iID0gKFBMeVJlc3VsdE9iamVjdCAqKSBhcmc7CiAK IAlyZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBzdGF0dXM9JVMgbnJvd3M9JVMg cm93cz0lUz4iLAotCQkJCQkJCQlQeV9UWVBFKG9iKS0+dHBfbmFtZSwKKwkJCQkJCQkJIlBM eVJlc3VsdCIsCiAJCQkJCQkJCW9iLT5zdGF0dXMsCiAJCQkJCQkJCW9iLT5ucm93cywKIAkJ CQkJCQkJb2ItPnJvd3MpOwpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscHl0aG9uL3BscHlfc3Vi eGFjdG9iamVjdC5jIGIvc3JjL3BsL3BscHl0aG9uL3BscHlfc3VieGFjdG9iamVjdC5jCmlu ZGV4IDVjOTJhMGUwODlhLi5jYzdmZjNmOWRmNyAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscHl0 aG9uL3BscHlfc3VieGFjdG9iamVjdC5jCisrKyBiL3NyYy9wbC9wbHB5dGhvbi9wbHB5X3N1 YnhhY3RvYmplY3QuYwpAQCAtMTUsNyArMTUsNiBAQAogTGlzdAkgICAqZXhwbGljaXRfc3Vi dHJhbnNhY3Rpb25zID0gTklMOwogCiAKLXN0YXRpYyB2b2lkIFBMeV9zdWJ0cmFuc2FjdGlv bl9kZWFsbG9jKFB5T2JqZWN0ICpzdWJ4YWN0KTsKIHN0YXRpYyBQeU9iamVjdCAqUEx5X3N1 YnRyYW5zYWN0aW9uX2VudGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKTsK IHN0YXRpYyBQeU9iamVjdCAqUEx5X3N1YnRyYW5zYWN0aW9uX2V4aXQoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKTsKIApAQCAtMzEsMjEgKzMwLDM1IEBAIHN0YXRpYyBQeU1l dGhvZERlZiBQTHlfc3VidHJhbnNhY3Rpb25fbWV0aG9kc1tdID0gewogCXtOVUxMLCBOVUxM LCAwLCBOVUxMfQogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBQTHlfU3VidHJhbnNhY3Rp b25UeXBlID0gewotCVB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotCS50cF9uYW1l ID0gIlBMeVN1YnRyYW5zYWN0aW9uIiwKLQkudHBfYmFzaWNzaXplID0gc2l6ZW9mKFBMeVN1 YnRyYW5zYWN0aW9uT2JqZWN0KSwKLQkudHBfZGVhbGxvYyA9IFBMeV9zdWJ0cmFuc2FjdGlv bl9kZWFsbG9jLAotCS50cF9mbGFncyA9IFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxB R1NfQkFTRVRZUEUsCi0JLnRwX2RvYyA9IFBMeV9zdWJ0cmFuc2FjdGlvbl9kb2MsCi0JLnRw X21ldGhvZHMgPSBQTHlfc3VidHJhbnNhY3Rpb25fbWV0aG9kcywKK3N0YXRpYyBQeVR5cGVf U2xvdCBQTHlTdWJ0cmFuc2FjdGlvbl9zbG90c1tdID0KK3sKKwl7CisJCVB5X3RwX2RvYywg KGNoYXIgKikgUEx5X3N1YnRyYW5zYWN0aW9uX2RvYworCX0sCisJeworCQlQeV90cF9tZXRo b2RzLCBQTHlfc3VidHJhbnNhY3Rpb25fbWV0aG9kcworCX0sCisJeworCQkwLCBOVUxMCisJ fQorfTsKKworc3RhdGljIFB5VHlwZV9TcGVjIFBMeVN1YnRyYW5zYWN0aW9uX3NwZWMgPQor eworCS5uYW1lID0gIlBMeVN1YnRyYW5zYWN0aW9uIiwKKwkJLmJhc2ljc2l6ZSA9IHNpemVv ZihQTHlTdWJ0cmFuc2FjdGlvbk9iamVjdCksCisJCS5mbGFncyA9IFB5X1RQRkxBR1NfREVG QVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsCisJCS5zbG90cyA9IFBMeVN1YnRyYW5zYWN0 aW9uX3Nsb3RzLAogfTsKIAorc3RhdGljIFB5VHlwZU9iamVjdCAqUEx5X1N1YnRyYW5zYWN0 aW9uVHlwZTsKKwogCiB2b2lkCiBQTHlfc3VidHJhbnNhY3Rpb25faW5pdF90eXBlKHZvaWQp CiB7Ci0JaWYgKFB5VHlwZV9SZWFkeSgmUEx5X1N1YnRyYW5zYWN0aW9uVHlwZSkgPCAwKQor CVBMeV9TdWJ0cmFuc2FjdGlvblR5cGUgPSAoUHlUeXBlT2JqZWN0ICopIFB5VHlwZV9Gcm9t U3BlYygmUEx5U3VidHJhbnNhY3Rpb25fc3BlYyk7CisJaWYgKCFQTHlfU3VidHJhbnNhY3Rp b25UeXBlKQogCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGluaXRpYWxpemUgUEx5X1N1YnRy YW5zYWN0aW9uVHlwZSIpOwogfQogCkBAIC01NSw3ICs2OCw3IEBAIFBMeV9zdWJ0cmFuc2Fj dGlvbl9uZXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAJUEx5U3Vi dHJhbnNhY3Rpb25PYmplY3QgKm9iOwogCi0Jb2IgPSBQeU9iamVjdF9OZXcoUEx5U3VidHJh bnNhY3Rpb25PYmplY3QsICZQTHlfU3VidHJhbnNhY3Rpb25UeXBlKTsKKwlvYiA9IFB5T2Jq ZWN0X05ldyhQTHlTdWJ0cmFuc2FjdGlvbk9iamVjdCwgUEx5X1N1YnRyYW5zYWN0aW9uVHlw ZSk7CiAKIAlpZiAob2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC02NiwxMiArNzks NiBAQCBQTHlfc3VidHJhbnNhY3Rpb25fbmV3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq dW51c2VkKQogCXJldHVybiAoUHlPYmplY3QgKikgb2I7CiB9CiAKLS8qIFB5dGhvbiByZXF1 aXJlcyBhIGRlYWxsb2MgZnVuY3Rpb24gdG8gYmUgZGVmaW5lZCAqLwotc3RhdGljIHZvaWQK LVBMeV9zdWJ0cmFuc2FjdGlvbl9kZWFsbG9jKFB5T2JqZWN0ICpzdWJ4YWN0KQotewotfQot CiAvKgogICogc3VieGFjdC5fX2VudGVyX18oKSBvciBzdWJ4YWN0LmVudGVyKCkKICAqCmRp ZmYgLS1naXQgYS9zcmMvcGwvcGxweXRob24vcGxweV90eXBlaW8uYyBiL3NyYy9wbC9wbHB5 dGhvbi9wbHB5X3R5cGVpby5jCmluZGV4IGRiMTRjNWY4ZGFlLi4yN2Q5YjJmMWFmNiAxMDA2 NDQKLS0tIGEvc3JjL3BsL3BscHl0aG9uL3BscHlfdHlwZWlvLmMKKysrIGIvc3JjL3BsL3Bs cHl0aG9uL3BscHlfdHlwZWlvLmMKQEAgLTcyMyw3ICs3MjMsNyBAQCBQTHlMaXN0X0Zyb21B cnJheV9yZWN1cnNlKFBMeURhdHVtVG9PYiAqZWxtLCBpbnQgKmRpbXMsIGludCBuZGltLCBp bnQgZGltLAogCiAJCQlzdWJsaXN0ID0gUEx5TGlzdF9Gcm9tQXJyYXlfcmVjdXJzZShlbG0s IGRpbXMsIG5kaW0sIGRpbSArIDEsCiAJCQkJCQkJCQkJCQlkYXRhcHRyX3AsIGJpdG1hcF9w LCBiaXRtYXNrX3ApOwotCQkJUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIHN1Ymxpc3QpOwor CQkJUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgc3VibGlzdCk7CiAJCX0KIAl9CiAJZWxzZQpA QCAtNzQyLDE0ICs3NDIsMTQgQEAgUEx5TGlzdF9Gcm9tQXJyYXlfcmVjdXJzZShQTHlEYXR1 bVRvT2IgKmVsbSwgaW50ICpkaW1zLCBpbnQgbmRpbSwgaW50IGRpbSwKIAkJCWlmIChiaXRt YXAgJiYgKCpiaXRtYXAgJiBiaXRtYXNrKSA9PSAwKQogCQkJewogCQkJCVB5X0lOQ1JFRihQ eV9Ob25lKTsKLQkJCQlQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgUHlfTm9uZSk7CisJCQkJ UHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgUHlfTm9uZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7 CiAJCQkJRGF0dW0JCWl0ZW12YWx1ZTsKIAogCQkJCWl0ZW12YWx1ZSA9IGZldGNoX2F0dChk YXRhcHRyLCBlbG0tPnR5cGJ5dmFsLCBlbG0tPnR5cGxlbik7Ci0JCQkJUHlMaXN0X1NFVF9J VEVNKGxpc3QsIGksIGVsbS0+ZnVuYyhlbG0sIGl0ZW12YWx1ZSkpOworCQkJCVB5TGlzdF9T ZXRJdGVtKGxpc3QsIGksIGVsbS0+ZnVuYyhlbG0sIGl0ZW12YWx1ZSkpOwogCQkJCWRhdGFw dHIgPSBhdHRfYWRkbGVuZ3RoX3BvaW50ZXIoZGF0YXB0ciwgZWxtLT50eXBsZW4sIGRhdGFw dHIpOwogCQkJCWRhdGFwdHIgPSAoY2hhciAqKSBhdHRfYWxpZ25fbm9taW5hbChkYXRhcHRy LCBlbG0tPnR5cGFsaWduKTsKIAkJCX0KZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHB5dGhvbi9w bHB5dGhvbi5oIGIvc3JjL3BsL3BscHl0aG9uL3BscHl0aG9uLmgKaW5kZXggZDkyOWFmZWZj MzMuLmZiOTViMjM3MzBmIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxweXRob24vcGxweXRob24u aAorKysgYi9zcmMvcGwvcGxweXRob24vcGxweXRob24uaApAQCAtMTksNiArMTksOCBAQAog I2Vycm9yIFB5dGhvbi5oIG11c3QgYmUgaW5jbHVkZWQgdmlhIHBscHl0aG9uLmgKICNlbmRp ZgogCisjZGVmaW5lIFB5X0xJTUlURURfQVBJIDB4MDMwMjAwMDAKKwogLyoKICAqIFB1bGwg aW4gUHl0aG9uIGhlYWRlcnMgdmlhIGEgd3JhcHBlciBoZWFkZXIsIHRvIGNvbnRyb2wgdGhl IHNjb3BlIG9mCiAgKiB0aGUgc3lzdGVtX2hlYWRlciBwcmFnbWEgdGhlcmVpbi4KLS0gCjIu NDcuMQoK --------------yzsqP5g2NXAkPj3EuTO9Ecrp--