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 1uZOmz-002tCB-3h for pgpool-hackers@arkaria.postgresql.org; Wed, 09 Jul 2025 07:00:21 +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 1uZOmx-00Dxq4-7b for pgpool-hackers@arkaria.postgresql.org; Wed, 09 Jul 2025 07:00:19 +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 1uZOmw-00Dxps-OH for pgpool-hackers@lists.postgresql.org; Wed, 09 Jul 2025 07:00:19 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uZOmu-006bCt-2d for pgpool-hackers@lists.postgresql.org; Wed, 09 Jul 2025 07:00:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:To:Message-Id:Date:Sender: Reply-To:Cc:Content-ID:Content-Description; bh=xcyxGlZrkCLbTrOrrhy92zUjMIfCJZRIbUiEebcs3f4=; b=nVIPEEJNXZgNQ7ZzpVDyV1c1c0 ZUWcz8pJbmahYvXifM6mgqq1YYrzFRSEbR2su8OwK0NkrXvZs3uc19tl4v6VvQk5ru0kNPVHxHl/h xdoQMHIzvWllgXABkq7YI7PtMCTSrxyorB/d19xc5ijDQhGE7Vt/pd7B3Ixj/8ALqbFmOMIsg+/F9 97CdEiJQeGSzSnnU9owcHoY7sazdY3vgZgj6bEkuu+nn4JUrDBeBNwS5Atc+r5896sLBwAi+Yjr8N K9j2WOqAkrwLN1BMUSadpGhcFg4R35qPsQ5z4L8mtMc64UUWr2wbckj54cJk0NqhIbDj7ShNNrx8N vHfizENw==; Received: from [2409:11:4120:300:2681:13c0:19a8:df58] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (Exim 4.96) (envelope-from ) id 1uZOmr-007EOl-13 for pgpool-hackers@lists.postgresql.org; Wed, 09 Jul 2025 07:00:16 +0000 Date: Wed, 09 Jul 2025 16:00:04 +0900 (JST) Message-Id: <20250709.160004.803224268243106375.ishii@postgresql.org> To: pgpool-hackers@lists.postgresql.org Subject: Re: Feature: implement NegotiateProtocolVersion message From: Tatsuo Ishii In-Reply-To: <20250708.112133.1324153277751075866.ishii@postgresql.org> References: <20250708.112133.1324153277751075866.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 26.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Wed_Jul__9_16_00_04_2025_520)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:2681:13c0:19a8:df58 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Wed_Jul__9_16_00_04_2025_520)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit > NegotiateProtocolVersion message is a message sent from backend to > frontend. After a startup message is sent from frontend to backend, > and the minor protocol version in the startup message is not supported > by the backend, the backend sends back a NegotiateProtocolVersion > message along with the latest minor protocol version it supports. > > For example, PostgreSQL 18 client could request a protocol version 3.2 > against PostgreSQL 17 server, then the PG17 server sends back the > NegotiateProtocolVersion message with protocol version 3.0 since it > does not support 3.2. If the PG18 client accepts it, then from now on > the protocol version 3.0 is used for the communication. > > At this point, as PG18's psql (or libpq) uses protocol version 3.0 by > default, PG18 (or before) server will not send back the > NegotiateProtocolVersion message because the versions support 3.0. > > The only case when 3.2 is used, is PG18's psql (or libpq) uses a > connection option max_protocol_version (or environment variable > PGMAXPROTOCOLVERSION) being set to "3.2". I don't know if the case > happen in the wild after PG18 is released, but I would like to prepare > for the situation by implementing NegotiateProtocolVersion message in > Pgpool-II 4.7. Attached patch does followings for the purpose. > > - Add ProcessNegotiateProtocol() to pool_do_auth() to process the > message while handling a startup message. It reads the message from > all backend, then forward it to frontend. The message is saved in > ConnectionInfo for the case below. It also save the major and minor > protocol version after negotiation to POOL_CONNECTION_POOL_SLOT for > later use. The version numbers are also saved to ConnectionInfo so > that pcp_proc_info shows them. > > - When a client connects to pgpool, it looks for cached connections in > the connection: pgpool tries to match the startup message with the > one in the connection pool. Since the startup message in the > connection pool is saved at the time when the client connects to > pgpool, it is possible that two connection cache are created with > same user and database. Suppose there's a connection cache with a > startup message having protocol version 3.0, and a new client tries > to connect to pgpool using protocol version 3.2. Pgpool looks for a > connection cache with the startup message having protocol version > 3.2, not 3.0. As a result a new connection cache entry is created > with protocol version 3.2. > > - When a client uses the connection pool, the saved > NegotiateProtocolVersion message is sent to frontend to emulate the > protocol negotiation. > > - The frontend/backend protocol 3.2 changes the BackendKeyData message > format but it's not implemented in this patch yet. I will work on it > later on. Attached is the v2 patch fixing bug in v1. Also some protocol related macros are imported from PostgreSQL. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Wed_Jul__9_16_00_04_2025_520)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v2-0001-Feature-implement-NegotiateProtocolVersion-messag.patch" RnJvbSA3NjZlNzM4MTE4ZTE1YTU2NGUyMDU0Mjk1NjRjYmZlMTkxNWQ2ODRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDkgSnVsIDIwMjUgMTU6NTg6MTYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYyXSBG ZWF0dXJlOiBpbXBsZW1lbnQgTmVnb3RpYXRlUHJvdG9jb2xWZXJzaW9uIG1lc3NhZ2UuCgpJbXBs ZW1lbnRpbmcgdGhlIG1lc3NhZ2UgaXMgbmVjZXNzYXJ5IHdoZW4gZnJvbnRlbmQgcmVxdWVzdHMg dGhlCnByb3RvY29sIHZlcnNpb24gMy4yIChpLmUuIFBvc3RncmVTUUwgMTgrIG9yIGNvbXBhdGli bGUgY2xpZW50cyksCndoaWxlIGJhY2tlbmQgc3RpbGwgb25seSBzdXBwb3J0cyAzLjAgKGkuZS4g YmFja2VuZCBpcyBQb3N0Z3JlU1FMIDE3Cm9yIGJlZm9yZSkuCgpUaGlzIGNvbW1pdCBoYW5kbGVz IHRoZSBtZXNzYWdlIHNvIHRoYXQgdGhlIG1lc3NhZ2UgaXMgZm9yd2FyZGVkIGZyb20KYmFja2Vu ZCB0byBmcm9udGVuZCB3aGVuIHRoZXJlJ3Mgbm8gY29ubmVjdGlvbiBjYWNoZSBleGlzdHMuCgpJ ZiBjb25uZWN0aW9uIGNhY2hlIGV4aXN0cywgcGdwb29sIHNlbmRzIHRoZSBtZXNzYWdlLCB3aGlj aCBoYXMgYmVlbgpzYXZlZCBhdCB0aGUgdGltZSB3aGVuIHRoZSBjb25uZWN0aW9uIGNhY2hlIHdh cyBjcmVhdGVkLCB0byBmcm9udGVuZC4KCk5vdGUgdGhhdCB0aGUgZnJvbnRlbmQvYmFja2VuZCBw cm90b2NvbCAzLjIgY2hhbmdlcyB0aGUgQmFja2VuZEtleURhdGEKbWVzc2FnZSBmb3JtYXQsIGJ1 dCBpdCdzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbW1pdCB5ZXQuIFRoaXMKbWVhbnMgdGhh dCBzdGlsbCBwZ3Bvb2wgY2Fubm90IGhhbmRsZSAzLjIgcHJvdG9jb2wuCgpEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzIwMjUwNzA4LjExMjEzMy4xMzI0 MTUzMjc3NzUxMDc1ODY2LmlzaGlpJTQwcG9zdGdyZXNxbC5vcmcKLS0tCiBzcmMvYXV0aC9wb29s X2F1dGguYyAgICAgICAgICAgICAgICB8IDExNiArKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvaW5jbHVkZS9wb29sLmggICAgICAgICAgICAgICAgICB8ICA0OCArKysrKysrKysrKy0K IHNyYy9wcm90b2NvbC9jaGlsZC5jICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvcHJvdG9j b2wvcG9vbF9jb25uZWN0aW9uX3Bvb2wuYyB8ICAgNCArLQogNCBmaWxlcyBjaGFuZ2VkLCAxNjQg aW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYXV0aC9wb29s X2F1dGguYyBiL3NyYy9hdXRoL3Bvb2xfYXV0aC5jCmluZGV4IGJlOWYzMzQzNC4uNTRkNjQ2YmMz IDEwMDY0NAotLS0gYS9zcmMvYXV0aC9wb29sX2F1dGguYworKysgYi9zcmMvYXV0aC9wb29sX2F1 dGguYwpAQCAtNzksNiArNzksNyBAQCBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGVfZnJvbnRlbmRf U0NSQU0oUE9PTF9DT05ORUNUSU9OICogYmFja2VuZCwgUE9PTF9DT05ORUNUSQogc3RhdGljIHZv aWQgYXV0aGVudGljYXRlX2Zyb250ZW5kX2NsZWFyX3RleHQoUE9PTF9DT05ORUNUSU9OICogZnJv bnRlbmQpOwogc3RhdGljIGJvb2wgZ2V0X2F1dGhfcGFzc3dvcmQoUE9PTF9DT05ORUNUSU9OICog YmFja2VuZCwgUE9PTF9DT05ORUNUSU9OICogZnJvbnRlbmQsIGludCByZWF1dGgsCiAJCQkJICBj aGFyICoqcGFzc3dvcmQsIFBhc3N3b3JkVHlwZSAqcGFzc3dvcmRUeXBlKTsKK3N0YXRpYyB2b2lk IFByb2Nlc3NOZWdvdGlhdGVQcm90b2NvbChQT09MX0NPTk5FQ1RJT04gKiBmcm9udGVuZCwgUE9P TF9DT05ORUNUSU9OX1BPT0wgKiBjcCk7CiAKIC8qCiAgKiBEbyBhdXRoZW50aWNhdGlvbi4gQXNz dW1pbmcgdGhlIG9ubHkgY2FsbGVyIGlzCkBAIC0zNDIsNiArMzQzLDcgQEAgcG9vbF9kb19hdXRo KFBPT0xfQ09OTkVDVElPTiAqIGZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqIGNwKQog CiAJcHJvdG9NYWpvciA9IE1BSU5fQ09OTkVDVElPTihjcCktPnNwLT5tYWpvcjsKIAorcmVhZF9r aW5kOgogCWtpbmQgPSBwb29sX3JlYWRfa2luZChjcCk7CiAJaWYgKGtpbmQgPCAwKQogCQllcmVw b3J0KEVSUk9SLApAQCAtMzY1LDYgKzM2NywxMiBAQCBwb29sX2RvX2F1dGgoUE9PTF9DT05ORUNU SU9OICogZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICogY3ApCiAJCQkJIGVycmRldGFp bCgiYmFja2VuZCByZXNwb25zZSB3aXRoIGtpbmQgXCdFXCcgd2hlbiBleHBlY3RpbmcgXCdSXCci KSwKIAkJCQkgZXJyaGludCgiVGhpcyBpc3N1ZSBjYW4gYmUgY2F1c2VkIGJ5IHZlcnNpb24gbWlz bWF0Y2ggKGN1cnJlbnQgdmVyc2lvbiAlZCkiLCBwcm90b01ham9yKSkpOwogCX0KKwllbHNlIGlm IChraW5kID09ICd2JykKKwl7CisJCS8qIE5lZ290aWF0ZVByb3RvY29sVmVyc2lvbiByZWNlaXZl ZCAqLworCQlQcm9jZXNzTmVnb3RpYXRlUHJvdG9jb2woZnJvbnRlbmQsIGNwKTsKKwkJZ290byBy ZWFkX2tpbmQ7CisJfQogCWVsc2UgaWYgKGtpbmQgIT0gJ1InKQogCQllcmVwb3J0KEVSUk9SLAog CQkJCShlcnJtc2coImJhY2tlbmQgYXV0aGVudGljYXRpb24gZmFpbGVkIiksCkBAIC01OTcsOCAr NjA1LDExIEBAIHBvb2xfZG9fYXV0aChQT09MX0NPTk5FQ1RJT04gKiBmcm9udGVuZCwgUE9PTF9D T05ORUNUSU9OX1BPT0wgKiBjcCkKIAogCQl9CiAKLQkJc2VuZF9hdXRoX29rKGZyb250ZW5kLCBw cm90b01ham9yKTsKLQkJYXV0aGtpbmQgPSAwOworCQlpZiAoa2luZCA9PSAnUicpCisJCXsKKwkJ CXNlbmRfYXV0aF9vayhmcm9udGVuZCwgcHJvdG9NYWpvcik7CisJCQlhdXRoa2luZCA9IDA7CisJ CX0KIAl9CiAKIAllbHNlCkBAIC03NTYsNyArNzY3LDE2IEBAIHBvb2xfZG9fYXV0aChQT09MX0NP Tk5FQ1RJT04gKiBmcm9udGVuZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKiBjcCkKIAkJCUNPTk5F Q1RJT05fU0xPVChjcCwgaSktPmtleSA9IGNwLT5pbmZvW2ldLmtleSA9IGtleTsKIAogCQkJY3At PmluZm9baV0ubWFqb3IgPSBzcC0+bWFqb3I7Ci0JCQljcC0+aW5mb1tpXS5taW5vciA9IHNwLT5t aW5vcjsKKworCQkJLyoKKwkJCSAqIElmIE5lZ290aWF0ZVByb3RvY29sIG1lc3NhZ2UgaGFzIGJl ZW4gcmVjZWl2ZWQsIHNldCB0aGUgbWlub3IKKwkJCSAqIHZlcnNpb24uIE90aGV3aXNlIHVzZSB0 aGUgdmVyc2lvbiBpbiB0aGUgU3RhcnR1cE1lc3NhZ2UuCisJCQkgKi8KKwkJCWlmIChDT05ORUNU SU9OX1NMT1QoY3AsIGkpLT5ucGxlbiA+IDApCisJCQkJY3AtPmluZm9baV0ubWlub3IgPSBDT05O RUNUSU9OX1NMT1QoY3AsIGkpLT5uZWdvdGlhdGVkX21pbm9yOworCQkJZWxzZQorCQkJCWNwLT5p bmZvW2ldLm1pbm9yID0gc3AtPm1pbm9yOworCiAJCQlzdHJsY3B5KGNwLT5pbmZvW2ldLmRhdGFi YXNlLCBzcC0+ZGF0YWJhc2UsIHNpemVvZihjcC0+aW5mb1tpXS5kYXRhYmFzZSkpOwogCQkJc3Ry bGNweShjcC0+aW5mb1tpXS51c2VyLCBzcC0+dXNlciwgc2l6ZW9mKGNwLT5pbmZvW2ldLnVzZXIp KTsKIAkJCWNwLT5pbmZvW2ldLmNvdW50ZXIgPSAxOwpAQCAtNzc5LDE2ICs3OTksMzEgQEAgcG9v bF9kb19hdXRoKFBPT0xfQ09OTkVDVElPTiAqIGZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9P TCAqIGNwKQogfQogCiAvKgotKiBkbyByZS1hdXRoZW50aWNhdGlvbiBmb3IgcmV1c2VkIGNvbm5l Y3Rpb24uIGlmIHN1Y2Nlc3MgcmV0dXJuIDAgb3RoZXJ3aXNlIHRocm93cyBlcmVwb3J0LgorKiBk byByZS1hdXRoZW50aWNhdGlvbiBmb3IgcmV1c2VkIGNvbm5lY3Rpb24uIGlmIHN1Y2Nlc3MgcmV0 dXJuIDAgb3RoZXJ3aXNlCisqIHRocm93cyBlcmVwb3J0LgogKi8KIGludAogcG9vbF9kb19yZWF1 dGgoUE9PTF9DT05ORUNUSU9OICogZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICogY3Ap CiB7CiAJaW50CQkJcHJvdG9NYWpvcjsKIAlpbnQJCQltc2dsZW47CisJUE9PTF9DT05ORUNUSU9O X1BPT0xfU0xPVAkqc3A7CiAKIAlwcm90b01ham9yID0gTUFKT1IoY3ApOwogCisJLyoKKwkgKiBJ ZiBOZWdvdGlhdGVQcm90b2NvbE1zZyBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIGJhY2tlbmQsIGZv cndhcmQgaXQgdG8KKwkgKiBmcm9udGVuZC4gSWYgdGhlIGZyb250ZW5kIGRpc2xpa2UgaXQsIGl0 IHdpbGwgZGlzY29ubmVjdCB0aGUKKwkgKiBjb25uZWN0aW9uLiBPdGhlcndpc2UgaXQgd2lsbCBz aWxlbnRseSBjb250aW51ZS4KKwkgKi8KKwlzcCA9IENPTk5FQ1RJT05fU0xPVChjcCwgTUFJTl9O T0RFX0lEKTsKKwlpZiAocHJvdG9NYWpvciA9PSBQUk9UT19NQUpPUl9WMyAmJiBzcC0+bnBsZW4g PiAwKQorCXsKKwkJZWxvZyhERUJVRzEsICJuZWdvdGlhdGVQcm90b2NvbCBtZXNzYWdlIGlzIGZv cndhcmRlZCB0byBmcm9udGVuZCBhdCByZWF1dGgiKTsKKwkJcG9vbF93cml0ZV9hbmRfZmx1c2go ZnJvbnRlbmQsIHNwLT5uZWdvdGlhdGVQcm90b2NvbE1zZywKKwkJCQkJCQkgc3AtPm5wbGVuKTsK Kwl9CisKIAkvKgogCSAqIGlmIGhiYSBpcyBlbmFibGVkIHdlIHdvdWxkIGFscmVhZHkgaGF2ZSBw YXNzZWQgYXV0aGVudGljYXRpb24KIAkgKi8KQEAgLTgyMiw2ICs4NTcsOSBAQCBwb29sX2RvX3Jl YXV0aChQT09MX0NPTk5FQ1RJT04gKiBmcm9udGVuZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKiBj cCkKIAkJfQogCX0KIAorCS8qCisJICogU2VuZCBhdXRoIG9rCisJICovCiAJcG9vbF93cml0ZShm cm9udGVuZCwgIlIiLCAxKTsKIAogCWlmIChwcm90b01ham9yID09IFBST1RPX01BSk9SX1YzKQpA QCAtODMyLDcgKzg3MCwxMCBAQCBwb29sX2RvX3JlYXV0aChQT09MX0NPTk5FQ1RJT04gKiBmcm9u dGVuZCwgUE9PTF9DT05ORUNUSU9OX1BPT0wgKiBjcCkKIAogCW1zZ2xlbiA9IGh0b25sKDApOwog CXBvb2xfd3JpdGVfYW5kX2ZsdXNoKGZyb250ZW5kLCAmbXNnbGVuLCBzaXplb2YobXNnbGVuKSk7 CisKKwkvKiBzZW5kIEJhY2tlbmRLZXlEYXRhICovCiAJcG9vbF9zZW5kX2JhY2tlbmRfa2V5X2Rh dGEoZnJvbnRlbmQsIE1BSU5fQ09OTkVDVElPTihjcCktPnBpZCwgTUFJTl9DT05ORUNUSU9OKGNw KS0+a2V5LCBwcm90b01ham9yKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMDc0LDMgKzIxMTUs NzAgQEAgcGdfU0FTTF9jb250aW51ZShQT09MX0NPTk5FQ1RJT04gKiBiYWNrZW5kLCBjaGFyICpw YXlsb2FkLCBpbnQgcGF5bG9hZGxlbiwgdm9pZAogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBG b3J3YXJkIE5lZ290aWF0ZVByb3RvY29sIG1lc3NhZ2UgdG8gZnJvbnRlbmQuCisgKgorICogV2hl biB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgbWVzc2FnZSBraW5kIGhhcyBiZWVuIGFscmVhZHkg cmVhZC4KKyAqLworc3RhdGljIHZvaWQKK1Byb2Nlc3NOZWdvdGlhdGVQcm90b2NvbChQT09MX0NP Tk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqY3ApCit7CisJaW50MzIJ bGVuOworCWludDMyCXNhdmVsZW47CisJaW50MzIJcHJvdG9NYWpvcjsKKwlpbnQzMglwcm90b01p bm9yOworCWludDMyCXByb3RvdjsKKwlib29sCWZvcndhcmRNc2cgPSBmYWxzZTsKKwlpbnQJCWk7 CisKKwllbG9nKERFQlVHMSwgIkZvcndhcmRpbmcgTmVnb3RpYXRlUHJvdG9jb2wgbWVzc2FnZSB0 byBmcm9udGVuZCIpOworCXBvb2xfd3JpdGUoZnJvbnRlbmQsICJ2IiwgMSk7CS8qIGZvcndhcmQg bWVzc2FnZSBraW5kICovCisJc2F2ZWxlbiA9IGxlbiA9IHBvb2xfcmVhZF9pbnQoY3ApOwkJLyog bWVzc2FnZSBsZW5ndGggaW5jbHVkaW5nIHNlbGYgKi8KKwlwb29sX3dyaXRlKGZyb250ZW5kLCAm bGVuLCA0KTsJLyogZm9yd2FyZCBtZXNzYWdlIGxlbmd0aCAqLworCWxlbiA9IG50b2hsKGxlbikg LSA0OwkJCS8qIGxlbmd0aCBvZiByZXN0IG9mIHRoZSBtZXNzYWdlICovCisJcHJvdG92ID0gcG9v bF9yZWFkX2ludChjcCk7CS8qIHJlYWQgcHJvdG9jb2wgdmVyc2lvbiAqLworCXByb3RvTWFqb3Ig PSBQR19QUk9UT0NPTF9NQUpPUihudG9obChwcm90b3YpKTsJCS8qIHByb3RvY29sIG1ham9yIHZl cnNpb24gKi8KKwlwcm90b01pbm9yID0gUEdfUFJPVE9DT0xfTUlOT1IobnRvaGwocHJvdG92KSk7 CS8qIHByb3RvY29sIG1pbm9yIHZlcnNpb24gKi8KKwlwb29sX3dyaXRlKGZyb250ZW5kLCAmcHJv dG92LCA0KTsJLyogZm9yd2FyZCBwcm90b2NvbCB2ZXJzaW9uICovCisJZWxvZyhERUJVRzEsICJw cm90b2NvbCB2ZXJpb24gb2ZmZXJlZDogbWFqb3I6ICVkIG1pbm9yOiAlZCIsIHByb3RvTWFqb3Is IHByb3RvTWlub3IpOworCWxlbiAtPSA0OworCWZvciAoaSA9IDA7IGkgPCBOVU1fQkFDS0VORFM7 IGkrKykKKwl7CisJCWlmIChWQUxJRF9CQUNLRU5EKGkpKQorCQl7CisJCQlQT09MX0NPTk5FQ1RJ T05fUE9PTF9TTE9UCSpzcDsKKwkJCWNoYXIJKnA7CisJCQljaGFyCSpucDsKKwkJCVNpemUJbnBs ZW47CisKKwkJCXAgPSBwb29sX3JlYWQyKENPTk5FQ1RJT04oY3AsIGkpLCBsZW4pOworCQkJaWYg KCFmb3J3YXJkTXNnKQorCQkJeworCQkJCXBvb2xfd3JpdGVfYW5kX2ZsdXNoKGZyb250ZW5kLCBw LCBsZW4pOwkvKiBmb3J3YXJkIHJlc3Qgb2YgbWVzc2FnZSAqLworCQkJCWZvcndhcmRNc2cgPSB0 cnVlOworCQkJfQorCQkJLyogc2F2ZSBuZWdhdGlhdGUgcHJvdG9jb2wgdmVyc2lvbiAqLworCQkJ c3AgPSBDT05ORUNUSU9OX1NMT1QoY3AsIGkpOworCQkJc3AtPm5lZ290aWF0ZWRfbWFqb3IgPSBw cm90b01ham9yOworCQkJc3AtPm5lZ290aWF0ZWRfbWlub3IgPSBwcm90b01pbm9yOworCisJCQkv KiBzYXZlIG5lZ2F0aWF0ZSBwcm90b2NvbCBtZXNzYWdlICovCisJCQlucGxlbiA9IDEgKwkvKiBt ZXNzYWdlIGtpbmQgKi8KKwkJCQlzaXplb2Yoc2F2ZWxlbikgKwkvKiBtZXNzYWdlIGxlbmd0aCAq LworCQkJCXNpemVvZihwcm90b3YpICsJLyogcHJvdG9jb2wgdmVyc2lvbiAqLworCQkJCWxlbjsJ CQkJLyogcmVzdCBvZiBtZXNzYWdlICovCisJCQkvKiBhbGxvY2F0ZSBtZXNzYWdlIGFyZWEgKi8K KwkJCXNwLT5uZWdvdGlhdGVQcm90b2NvbE1zZyA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1v cnlDb250ZXh0LCBucGxlbik7CisJCQlucCA9IHNwLT5uZWdvdGlhdGVQcm90b2NvbE1zZzsKKwkJ CXNwLT5ucGxlbiA9IG5wbGVuOwkvKiBzZXQgbWVzc2FnZSBsZW5ndGggKi8KKworCQkJKm5wKysg PSAndic7CisJCQltZW1jcHkobnAsICZzYXZlbGVuLCBzaXplb2Yoc2F2ZWxlbikpOworCQkJbnAg Kz0gc2l6ZW9mKHNhdmVsZW4pOworCQkJbWVtY3B5KG5wLCAmcHJvdG92LCBzaXplb2YocHJvdG92 KSk7CisJCQlucCArPSBzaXplb2YocHJvdG92KTsKKwkJCW1lbWNweShucCwgcCwgbGVuKTsKKwkJ fQorCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2wuaCBiL3NyYy9pbmNsdWRlL3Bv b2wuaAppbmRleCBjOWI0ZGMyN2UuLjI4Y2YxNzU3YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApAQCAtNCw3ICs0LDkgQEAKICAqIHBncG9v bDogYSBsYW5ndWFnZSBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0 Z3JlU1FMCiAgKiB3cml0dGVuIGJ5IFRhdHN1byBJc2hpaQogICoKLSAqIENvcHlyaWdodCAoYykg MjAwMy0yMDI0CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMjAwMy0yMDI1CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAogICogaXRzIGRv Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKQEAg LTEwMyw2ICsxMDUsNDEgQEAgdHlwZWRlZiBlbnVtCiAJUE9PTF9TT0NLRVRfRU9GCiB9CQkJUE9P TF9TT0NLRVRfU1RBVEU7CiAKKy8qCisgKiBJbXBvcnRlZCBmcm9tIHNyYy9pbmNsdWRlL2xpYnBx L3BxY29tbS5oIGFzIG9mIFBvc3RncmVTUUwgMTguCisgKgorICogVGhlc2UgbWFuaXB1bGF0ZSB0 aGUgZnJvbnRlbmQvYmFja2VuZCBwcm90b2NvbCB2ZXJzaW9uIG51bWJlci4KKyAqCisgKiBUaGUg bWFqb3IgbnVtYmVyIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBmb3IgaW5jb21wYXRpYmxlIGNoYW5n ZXMuICBUaGUgbWlub3IKKyAqIG51bWJlciBzaG91bGQgYmUgaW5jcmVtZW50ZWQgZm9yIGNvbXBh dGlibGUgY2hhbmdlcyAoZWcuIGFkZGl0aW9uYWwKKyAqIGZ1bmN0aW9uYWxpdHkpLgorICoKKyAq IElmIGEgYmFja2VuZCBzdXBwb3J0cyB2ZXJzaW9uIG0ubiBvZiB0aGUgcHJvdG9jb2wgaXQgbXVz dCBhY3R1YWxseSBzdXBwb3J0CisgKiB2ZXJzaW9ucyBtLlswLi5uXS4gIEJhY2tlbmQgc3VwcG9y dCBmb3IgdmVyc2lvbiBtLTEgY2FuIGJlIGRyb3BwZWQgYWZ0ZXIgYQorICogYHJlYXNvbmFibGUn IGxlbmd0aCBvZiB0aW1lLgorICoKKyAqIEEgZnJvbnRlbmQgaXNuJ3QgcmVxdWlyZWQgdG8gc3Vw cG9ydCBhbnl0aGluZyBvdGhlciB0aGFuIHRoZSBjdXJyZW50CisgKiB2ZXJzaW9uLgorICovCisK KyNkZWZpbmUgUEdfUFJPVE9DT0xfTUFKT1IodikJKCh2KSA+PiAxNikKKyNkZWZpbmUgUEdfUFJP VE9DT0xfTUlOT1IodikJKCh2KSAmIDB4MDAwMGZmZmYpCisjZGVmaW5lIFBHX1BST1RPQ09MX0ZV TEwodikJKFBHX1BST1RPQ09MX01BSk9SKHYpICogMTAwMDAgKyBQR19QUk9UT0NPTF9NSU5PUih2 KSkKKyNkZWZpbmUgUEdfUFJPVE9DT0wobSxuKQkoKChtKSA8PCAxNikgfCAobikpCisKKy8qCisg KiBUaGUgZWFybGllc3QgYW5kIGxhdGVzdCBmcm9udGVuZC9iYWNrZW5kIHByb3RvY29sIHZlcnNp b24gc3VwcG9ydGVkLgorICovCisKKyNkZWZpbmUgUEdfUFJPVE9DT0xfRUFSTElFU1QJUEdfUFJP VE9DT0woMywwKQorI2RlZmluZSBQR19QUk9UT0NPTF9MQVRFU1QJCVBHX1BST1RPQ09MKDMsMikK KwordHlwZWRlZiB1aW50MzIgUHJvdG9jb2xWZXJzaW9uOyAvKiBGRS9CRSBwcm90b2NvbCB2ZXJz aW9uIG51bWJlciAqLworCit0eXBlZGVmIFByb3RvY29sVmVyc2lvbiBNc2dUeXBlOworCisvKiBl bmQgb2YgaW1wb3J0aW5nICovCisKIC8qIHByb3RvY29sIG1ham9yIHZlcnNpb24gbnVtYmVycyAq LwogI2RlZmluZSBQUk9UT19NQUpPUl9WMgkyCiAjZGVmaW5lIFBST1RPX01BSk9SX1YzCTMKQEAg LTI2Miw2ICsyOTksMTUgQEAgdHlwZWRlZiBzdHJ1Y3QKIAl0aW1lX3QJCWNsb3NldGltZTsJCS8q IGFic29sdXRlIHRpbWUgaW4gc2Vjb25kIHdoZW4gdGhlIGNvbm5lY3Rpb24KIAkJCQkJCQkJICog Y2xvc2VkIGlmIDAsIHRoYXQgbWVhbnMgdGhlIGNvbm5lY3Rpb24gaXMKIAkJCQkJCQkJICogdW5k ZXIgdXNlLiAqLworCS8qCisJICogUHJvdG9jb2wgdmVyc2lvbiBhZnRlciBuZWdvdGlhdGlvbi4g SWYgbnBsZW4gPT0gMCwgbm8gbmVnb3RpYXRpb24gaGFzCisJICogYmVlbiBkb25lLgorCSAqLwor CWludAkJCW5lZ290aWF0ZWRfbWFqb3I7CisJaW50CQkJbmVnb3RpYXRlZF9taW5vcjsKKwljaGFy CQkqbmVnb3RpYXRlUHJvdG9jb2xNc2c7CS8qIFJhdyBOZWdvdGlhdGVQcm90b2NvbCBtZXNzYWcg Ki8KKwlpbnQzMgkJbnBsZW47CQkJLyogbWVzc2FnZSBsZW5ndGggb2YgTmVnb3RpYXRlUHJvdG9j b2wgbWVzc2FnICovCisKIH0JCQlQT09MX0NPTk5FQ1RJT05fUE9PTF9TTE9UOwogCiB0eXBlZGVm IHN0cnVjdApkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL2NoaWxkLmMgYi9zcmMvcHJvdG9jb2wv Y2hpbGQuYwppbmRleCBmNDE0MmY5MGQuLjdhZWEzMzU0MCAxMDA2NDQKLS0tIGEvc3JjL3Byb3Rv Y29sL2NoaWxkLmMKKysrIGIvc3JjL3Byb3RvY29sL2NoaWxkLmMKQEAgLTYzNyw4ICs2MzcsOCBA QCByZWFkX3N0YXJ0dXBfcGFja2V0KFBPT0xfQ09OTkVDVElPTiAqIGNwKQogCiAJc3AtPmxlbiA9 IGxlbjsKIAltZW1jcHkoJnByb3Rvdiwgc3AtPnN0YXJ0dXBfcGFja2V0LCBzaXplb2YocHJvdG92 KSk7Ci0Jc3AtPm1ham9yID0gbnRvaGwocHJvdG92KSA+PiAxNjsKLQlzcC0+bWlub3IgPSBudG9o bChwcm90b3YpICYgMHgwMDAwZmZmZjsKKwlzcC0+bWFqb3IgPSBQR19QUk9UT0NPTF9NQUpPUihu dG9obChwcm90b3YpKTsKKwlzcC0+bWlub3IgPSBQR19QUk9UT0NPTF9NSU5PUihudG9obChwcm90 b3YpKTsKIAljcC0+cHJvdG9WZXJzaW9uID0gc3AtPm1ham9yOwogCiAJc3dpdGNoIChzcC0+bWFq b3IpCmRpZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvcG9vbF9jb25uZWN0aW9uX3Bvb2wuYyBiL3Ny Yy9wcm90b2NvbC9wb29sX2Nvbm5lY3Rpb25fcG9vbC5jCmluZGV4IDIyNTI5NGExYi4uNjY2MTg3 MjE2IDEwMDY0NAotLS0gYS9zcmMvcHJvdG9jb2wvcG9vbF9jb25uZWN0aW9uX3Bvb2wuYworKysg Yi9zcmMvcHJvdG9jb2wvcG9vbF9jb25uZWN0aW9uX3Bvb2wuYwpAQCAtMjM1LDYgKzIzNSw4IEBA IHBvb2xfZGlzY2FyZF9jcChjaGFyICp1c2VyLCBjaGFyICpkYXRhYmFzZSwgaW50IHByb3RvTWFq b3IpCiAJCX0KIAkJQ09OTkVDVElPTl9TTE9UKHAsIGkpLT5zcCA9IE5VTEw7CiAJCXBvb2xfY2xv c2UoQ09OTkVDVElPTihwLCBpKSk7CisJCWlmIChDT05ORUNUSU9OX1NMT1QocCwgaSktPm5lZ290 aWF0ZVByb3RvY29sTXNnKQorCQkJcGZyZWUoQ09OTkVDVElPTl9TTE9UKHAsIGkpLT5uZWdvdGlh dGVQcm90b2NvbE1zZyk7CiAJCXBmcmVlKENPTk5FQ1RJT05fU0xPVChwLCBpKSk7CiAJfQogCkBA IC05NDUsNyArOTQ3LDcgQEAgc3RhdGljIFBPT0xfQ09OTkVDVElPTl9QT09MICogbmV3X2Nvbm5l Y3Rpb24oUE9PTF9DT05ORUNUSU9OX1BPT0wgKiBwKQogCQkJY29udGludWU7CiAJCX0KIAotCQlz ID0gcGFsbG9jKHNpemVvZihQT09MX0NPTk5FQ1RJT05fUE9PTF9TTE9UKSk7CisJCXMgPSBwYWxs b2MwKHNpemVvZihQT09MX0NPTk5FQ1RJT05fUE9PTF9TTE9UKSk7CiAKIAkJaWYgKGNyZWF0ZV9j cChzLCBpKSA9PSBOVUxMKQogCQl7Ci0tIAoyLjI1LjEKCg== ----Next_Part(Wed_Jul__9_16_00_04_2025_520)----