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.96) (envelope-from ) id 1vYfjr-00Ap6w-0a for pgpool-hackers@arkaria.postgresql.org; Thu, 25 Dec 2025 07:26:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vYfjp-0072Ug-1j for pgpool-hackers@arkaria.postgresql.org; Thu, 25 Dec 2025 07:26:22 +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.96) (envelope-from ) id 1vYfjo-0072UY-32 for pgpool-hackers@lists.postgresql.org; Thu, 25 Dec 2025 07:26:22 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vYfjm-002WNo-3C for pgpool-hackers@lists.postgresql.org; Thu, 25 Dec 2025 07:26:20 +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:From:Subject:To:Message-Id:Date:Sender:Reply-To:Cc:Content-ID: Content-Description:In-Reply-To:References; bh=F/ePCN6tIroyt4ILzMRN0nMBm9hlyPGh+Hcj3G6rQcs=; b=y+E8iCY4qlb5QCUXtoUA/LW9gz FTaKmNZ3K+CGs8eUp/RbXJtgDVODzSibZ7odbNeBNBNuOzyLNR4vbu7a+6Bun28ehIYnL/UNAxg+Q zRzfIoBSYFQ+WtKD490hXaWa80ZsDcm6H+dO3IXGXeRv1+LScTVDQHGAnPOBShsL+uUk0xp45vnHy NLXn0W3PwNHg4dxykCTDGZFjZHLpbAP4igisEy4bsig4+nrJfNwRtk4TSNO1ANxYb7SaoWt2FxiWz h2mYVqKtytY3ZC2taOTHUtXRD2t/iMOJSm3qNpDbYIZVOYYxk61vFjf5cCvvmXIu6BpodfrgACJ9M qU9/qvVQ==; Received: from [2409:11:4120:300:dcda:bb5e:9d13:6f36] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vYfji-005caY-2Z for pgpool-hackers@lists.postgresql.org; Thu, 25 Dec 2025 07:26:17 +0000 Date: Thu, 25 Dec 2025 16:26:00 +0900 (JST) Message-Id: <20251225.162600.1040566325464308671.ishii@postgresql.org> To: pgpool-hackers@lists.postgresql.org Subject: Feature: reduce sync messages From: Tatsuo Ishii X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Thu_Dec_25_16_26_00_2025_597)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:dcda:bb5e:9d13:6f36 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Thu_Dec_25_16_26_00_2025_597)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Currently pgpool forwards sync messages to all configure backend nodes regardless the backend_weight or load_balance_mode. This is not only a waste of CPU cycle, but degrades performance since it takes more message round trip time as the number of backend nodes increases. This is conspicuous if backend nodes are in a distant location. We should send sync messages only to necessary backend nodes. I have created a patch to enhance this. Send sync message only to necessary backends. Suppose there is a pgpool cluster with 3 backend nodes. Before patch: test=# select 1 \bind \g NOTICE: DB node id: 0 statement: Parse: select 1 NOTICE: DB node id: 0 statement: Bind: select 1 NOTICE: DB node id: 0 statement: D message NOTICE: DB node id: 0 statement: Execute: select 1 NOTICE: DB node id: 0 statement: Sync NOTICE: DB node id: 1 statement: Sync NOTICE: DB node id: 2 statement: Sync ?column? ---------- 1 (1 row) As you can see, the sync messages are sent to backend node 0, 1 and 2, although only node 0 is involved in the query "select 1". So sending sync messages to node 1 and 2 are just waste of time. After patch: test=# select 1 \bind \g NOTICE: DB node id: 2 statement: Parse: select 1 NOTICE: DB node id: 2 statement: Bind: select 1 NOTICE: DB node id: 2 statement: D message NOTICE: DB node id: 2 statement: Execute: select 1 NOTICE: DB node id: 2 statement: Sync ?column? ---------- 1 (1 row) The sync message is only sent to node 2. Now the implementation details. The idea is, if pgpool does not send any query message to a backend until now (more precisely since the last ReadyForQuery message), we don't need to send a sync message to the backend node. To decide which node we need to send the sync message, add a new struct member "sync_map" to the session context. A sync_map is an array of bool. Each array member corresponds to each backend node. When pgpool forwards a message to backend, corresponding sync_map member is set to true. When a sync message is received from frontend, a sync pending message is added as we already do. The difference is, previously no query context is added to the sync pending message. Now we add a query context with the sync map translated into where_to_send map in the query context. Then we send a sync message to backend, consulting the where_to_send map. This way, we don't need to send a sync message to backend node which pgpool has never sent a query since the last ReadyForQuery message. When a Ready for query message arrives, we decide which backend to read according to the where_to_send map, which is different from what we do today: read from all available backend nodes. After receiving the ReadyForQuery message, sync_map members are all set to false. Also the sync message query context is destroyed at this timing. There are a few other edge cases: (1) When an ErrorResponse is received, pool_discard_except_sync_and_ready_for_query() is called to remove any pending messages (and backend buffer data) except sync pending message and ReadyForQuery message. If the sync message is not found in the queue and receives a sync message from frontend, add a new sync pending message, consulting the sync_map as described above and forward the sync message to backends. (2) If no query is sent and a sync message is received, the sync_map is all false. This doesn't make sense since there's no point to send a sync message, but the protocol does not prohibit this. In this case we set sync_map all true, which means we send sync messages to all backend. This may not be the best way in terms of performance, but this makes things simpler (and compatible what we are doing today). Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Thu_Dec_25_16_26_00_2025_597)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0001-Send-sync-message-only-to-necessary-backends.patch" RnJvbSA0YTI4ZTdjOTNmNWZlMDM3YTk5NTQ3OTk4Y2QzNmZjN2NmNzAyMTlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBUaHUsIDI1IERlYyAyMDI1IDE1OjU3OjI1ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0g U2VuZCBzeW5jIG1lc3NhZ2Ugb25seSB0byBuZWNlc3NhcnkgYmFja2VuZHMuCgpDdXJyZW50bHkg cGdwb29sIGZvcndhcmRzIHN5bmMgbWVzc2FnZXMgdG8gYWxsIGNvbmZpZ3VyZSBiYWNrZW5kCm5v ZGVzLiAgVGhpcyBpcyBub3Qgb25seSBhIHdhc3RlIG9mIENQVSBjeWNsZSwgYnV0IGRlZ3JhZGVz CnBlcmZvcm1hbmNlIHNpbmNlIGl0IHRha2VzIG1vcmUgbWVzc2FnZSByb3VuZCB0cmlwIHRpbWUg YXMgdGhlIG51bWJlcgpvZiBiYWNrZW5kIG5vZGVzIGluY3JlYXNlcy4gVGhpcyBpcyBjb25zcGlj dW91cyBpZiBiYWNrZW5kIG5vZGVzIGFyZQppbiBhIGRpc3RhbnQgbG9jYXRpb24uIFdlIHNob3Vs ZCBzZW5kIHN5bmMgbWVzc2FnZXMgb25seSB0byBuZWNlc3NhcnkKYmFja2VuZCBub2Rlcy4KClRo ZSBpZGVhIGlzLCBpZiBwZ3Bvb2wgZG9lcyBub3Qgc2VuZCBhbnkgcXVlcnkgbWVzc2FnZSB0byBh IGJhY2tlbmQKdW50aWwgbm93IChtb3JlIHByZWNpc2VseSBzaW5jZSB0aGUgbGFzdCBSZWFkeUZv clF1ZXJ5IG1lc3NhZ2UpLCB3ZQpkb24ndCBuZWVkIHRvIHNlbmQgYSBzeW5jIG1lc3NhZ2UgdG8g dGhlIGJhY2tlbmQgbm9kZS4KClRvIGRlY2lkZSB3aGljaCBub2RlIHdlIG5lZWQgdG8gc2VuZCB0 aGUgc3luYyBtZXNzYWdlLCBhZGQgYSBuZXcKc3RydWN0IG1lbWJlciAic3luY19tYXAiIHRvIHRo ZSBzZXNzaW9uIGNvbnRleHQuIEEgc3luY19tYXAgaXMgYW4KYXJyYXkgb2YgYm9vbC4gRWFjaCBh cnJheSBtZW1iZXIgY29ycmVzcG9uZHMgdG8gZWFjaCBiYWNrZW5kCm5vZGUuIFdoZW4gcGdwb29s IGZvcndhcmRzIGEgbWVzc2FnZSB0byBiYWNrZW5kLCBjb3JyZXNwb25kaW5nCnN5bmNfbWFwIG1l bWJlciBpcyBzZXQgdG8gdHJ1ZS4KCldoZW4gYSBzeW5jIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZnJv bSBmcm9udGVuZCwgYSBzeW5jIHBlbmRpbmcgbWVzc2FnZQppcyBhZGRlZCBhcyB3ZSBhbHJlYWR5 IGRvLiBUaGUgZGlmZmVyZW5jZSBpcywgcHJldmlvdXNseSBubyBxdWVyeQpjb250ZXh0IGlzIGFk ZGVkIHRvIHRoZSBzeW5jIHBlbmRpbmcgbWVzc2FnZS4gTm93IHdlIGFkZCBhIHF1ZXJ5CmNvbnRl eHQgd2l0aCB0aGUgc3luYyBtYXAgdHJhbnNsYXRlZCBpbnRvIHdoZXJlX3RvX3NlbmQgbWFwIGlu IHRoZQpxdWVyeSBjb250ZXh0LiBUaGVuIHdlIHNlbmQgYSBzeW5jIG1lc3NhZ2UgdG8gYmFja2Vu ZCwgY29uc3VsdGluZyB0aGUKd2hlcmVfdG9fc2VuZCBtYXAuIFRoaXMgd2F5LCB3ZSBkb24ndCBu ZWVkIHRvIHNlbmQgYSBzeW5jIG1lc3NhZ2UgdG8KYmFja2VuZCBub2RlIHdoaWNoIHBncG9vbCBo YXMgbmV2ZXIgc2VudCBhIHF1ZXJ5IHNpbmNlIHRoZSBsYXN0ClJlYWR5Rm9yUXVlcnkgbWVzc2Fn ZS4KCldoZW4gYSBSZWFkeSBmb3IgcXVlcnkgbWVzc2FnZSBhcnJpdmVzLCB3ZSBkZWNpZGUgd2hp Y2ggYmFja2VuZCB0bwpyZWFkIGFjY29yZGluZyB0byB0aGUgd2hlcmVfdG9fc2VuZCBtYXAsIHdo aWNoIGlzIGRpZmZlcmVudCBmcm9tIHdoYXQKd2UgZG8gdG9kYXk6IHJlYWQgZnJvbSBhbGwgYXZh aWxhYmxlIGJhY2tlbmQgbm9kZXMuIEFmdGVyIHJlY2VpdmluZwp0aGUgUmVhZHlGb3JRdWVyeSBt ZXNzYWdlLCBzeW5jX21hcCBtZW1iZXJzIGFyZSBhbGwgc2V0IHRvIGZhbHNlLiBBbHNvCnRoZSBz eW5jIG1lc3NhZ2UgcXVlcnkgY29udGV4dCBpcyBkZXN0cm95ZWQgYXQgdGhpcyB0aW1pbmcuCgpU aGVyZSBhcmUgYSBmZXcgb3RoZXIgZWRnZSBjYXNlczoKCigxKSBXaGVuIGFuIEVycm9yUmVzcG9u c2UgaXMgcmVjZWl2ZWQsCnBvb2xfZGlzY2FyZF9leGNlcHRfc3luY19hbmRfcmVhZHlfZm9yX3F1 ZXJ5KCkgaXMgY2FsbGVkIHRvIHJlbW92ZSBhbnkKcGVuZGluZyBtZXNzYWdlcyAoYW5kIGJhY2tl bmQgYnVmZmVyIGRhdGEpIGV4Y2VwdCBzeW5jIHBlbmRpbmcgbWVzc2FnZQphbmQgUmVhZHlGb3JR dWVyeSBtZXNzYWdlLiBJZiB0aGUgc3luYyBtZXNzYWdlIGlzIG5vdCBmb3VuZCBpbiB0aGUKcXVl dWUgYW5kIHJlY2VpdmVzIGEgc3luYyBtZXNzYWdlIGZyb20gZnJvbnRlbmQsIGFkZCBhIG5ldyBz eW5jCnBlbmRpbmcgbWVzc2FnZSwgY29uc3VsdGluZyB0aGUgc3luY19tYXAgYXMgZGVzY3JpYmVk IGFib3ZlIGFuZApmb3J3YXJkIHRoZSBzeW5jIG1lc3NhZ2UgdG8gYmFja2VuZHMuCgooMikgSWYg bm8gcXVlcnkgaXMgc2VudCBhbmQgYSBzeW5jIG1lc3NhZ2UgaXMgcmVjZWl2ZWQsIHRoZSBzeW5j X21hcAppcyBhbGwgZmFsc2UuIFRoaXMgZG9lc24ndCBtYWtlIHNlbnNlIHNpbmNlIHRoZXJlJ3Mg bm8gcG9pbnQgdG8gc2VuZCBhCnN5bmMgbWVzc2FnZSwgYnV0IHRoZSBwcm90b2NvbCBkb2VzIG5v dCBwcm9oaWJpdCB0aGlzLiBJbiB0aGlzIGNhc2Ugd2UKc2V0IHN5bmNfbWFwIGFsbCB0cnVlLCB3 aGljaCBtZWFucyB3ZSBzZW5kIHN5bmMgbWVzc2FnZXMgdG8gYWxsCmJhY2tlbmQuIFRoaXMgbWF5 IG5vdCBiZSB0aGUgYmVzdCB3YXkgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIGJ1dAp0aGlzIG1h a2VzIHRoaW5ncyBzaW1wbGVyIChhbmQgY29tcGF0aWJsZSB3aGF0IHdlIGFyZSBkb2luZyB0b2Rh eSkuCgpBdXRob3I6IFRhdHN1byBJc2hpaSA8aXNoaWlAcG9zdGdyZXNxbC5vcmc+Ci0tLQogc3Jj L2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMgICAgICAgICAgICAgIHwgIDIwICsrLS0KIHNy Yy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMgICAgICAgICAgICB8ICA0MCArKysrKyst CiBzcmMvaW5jbHVkZS9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5oICAgICAgfCAgIDMgKwog c3JjL2luY2x1ZGUvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oICAgIHwgIDExICstCiBz cmMvcHJvdG9jb2wvcG9vbF9wcm9jZXNzX3F1ZXJ5LmMgICAgICAgICAgICAgfCAgMTYgKystCiBz cmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVzLmMgICAgICAgICAgICAgfCAxMTAgKysrKysr KysrKysrKysrKy0tCiAuLi4vcmVncmVzc2lvbi90ZXN0cy8wMDYubWVtcWNhY2hlL3Rlc3Quc2gg ICAgfCAgIDYgKwogLi4uL3Rlc3RzLzAzOS5sb2dfYmFja2VuZF9tZXNzYWdlcy9leHBlY3RlZC5z IHwgICAxIC0KIHNyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMTMwLmRlY2xhcmUvdGVzdC5zaCB8 ICAgMSArCiA5IGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYyBiL3NyYy9j b250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jCmluZGV4IDFhMTMxNjhjNi4uOTQ0NWE3YzAxIDEw MDY0NAotLS0gYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYworKysgYi9zcmMvY29u dGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYwpAQCAtNjMsNyArNjMsNiBAQCBzdGF0aWMgdm9pZCB3 aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRl eHQsIGNoYXIgKgogc3RhdGljIHZvaWQgd2hlcmVfdG9fc2VuZF9uYXRpdmVfcmVwbGljYXRpb24o UE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpxdWVyeSwgTm9kZSAqbm9k ZSk7CiAKIHN0YXRpYyBjaGFyICpyZW1vdmVfcmVhZF93cml0ZShpbnQgbGVuLCBjb25zdCBjaGFy ICpjb250ZW50cywgaW50ICpyZXdyaXR0ZW5fbGVuKTsKLXN0YXRpYyB2b2lkIHNldF92aXJ0dWFs X21haW5fbm9kZShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQpOwogc3RhdGljIHZv aWQgc2V0X2xvYWRfYmFsYW5jZV9pbmZvKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4 dCk7CiAKIHN0YXRpYyBib29sIGlzX2luX2xpc3QoY2hhciAqbmFtZSwgTGlzdCAqbGlzdCk7CkBA IC00MDQsMjIgKzQwMywyNiBAQCBwb29sX3ZpcnR1YWxfbWFpbl9kYl9ub2RlX2lkKHZvaWQpCiAJ CQkgKiBNYWtlIHN1cmUgdGhhdCB2aXJ0dWFsX21haW5fbm9kZV9pZCBpcyBlaXRoZXIgcHJpbWFy eSBub2RlIGlkCiAJCQkgKiBvciBsb2FkIGJhbGFuY2Ugbm9kZSBpZC4gIElmIG5vdCwgaXQgaXMg bGlrZWx5IHRoYXQKIAkJCSAqIHZpcnR1YWxfbWFpbl9ub2RlX2lkIGlzIG5vdCBzZXQgdXAgeWV0 LiBMZXQncyB1c2UgdGhlIHByaW1hcnkKLQkJCSAqIG5vZGUgaWQuIGV4Y2VwdCBmb3IgdGhlIHNw ZWNpYWwgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIHNlbmQgdGhlCisJCQkgKiBub2RlIGlkIGV4Y2Vw dCBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIHNlbmQgdGhlCiAJCQkgKiBx dWVyeSB0byB0aGUgbm9kZSB3aGljaCBpcyBub3QgcHJpbWFyeSBub3IgdGhlIGxvYWQgYmFsYW5j ZQogCQkJICogbm9kZS4gQ3VycmVudGx5IHRoZXJlIGlzIG9ubHkgb25lIHNwZWNpYWwgc3VjaCBj YXNlIHRoYXQgaXMKIAkJCSAqIGhhbmRsaW5nIG9mIHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKCkgZnVu Y3Rpb24sIHdoaWNoIG1heSByZWZlciB0bwogCQkJICogdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB0 aGF0IGlzIG5laXRoZXIgaG9zdGVkIGJ5IHRoZSBwcmltYXJ5IG9yCiAJCQkgKiBsb2FkIGJhbGFu Y2Ugbm9kZSBmb3IgY3VycmVudCBjaGlsZCBwcm9jZXNzLCBidXQgdGhlIHF1ZXJ5IG11c3QKIAkJ CSAqIGJlIGZvcndhcmRlZCB0byB0aGF0IG5vZGUuIFNpbmNlIG9ubHkgdGhhdCBiYWNrZW5kIG5v ZGUgY2FuCi0JCQkgKiBoYW5kbGUgdGhhdCBwZ190ZXJtaW5hdGVfYmFja2VuZCBxdWVyeQotCQkJ ICoKKwkJCSAqIGhhbmRsZSB0aGF0IHBnX3Rlcm1pbmF0ZV9iYWNrZW5kIHF1ZXJ5LiBBbm90aGVy IGV4Y2VwdGlvbiBpcywKKwkJCSAqIHByb2Nlc3NpbmcgIlN5bmMiIG1lc3NhZ2UuIFdlIGNyZWF0 ZSBhIHNwZWNpYWwgcXVlcnkgY29udGV4dAorCQkJICogbWFya2VkICJzeW5jX21zZyA9PSB0cnVl Ii4gSWYgc28sIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG1haW4KKwkJCSAqIG5vZGUgaWQgY291 bGQgbm90IGJlIGVpdGhlciBvcmRpbmFyaWx5IG1haW4gbm9kZSAodGhlIGZpcnN0CisJCQkgKiBh bGl2ZSBub2RlKSBub3IgdGhlIGxvYWQgYmFsYW5jZSBub2RlLiBTbyB3ZSBjaGVjayB0aGUgZmxh Zy4KIAkJCSAqLwogCiAJCQllcmVwb3J0KERFQlVHNSwKLQkJCQkJKGVycm1zZygicG9vbF92aXJ0 dWFsX21haW5fZGJfbm9kZV9pZDogdmlydHVhbF9tYWluX25vZGVfaWQ6JWQgbG9hZF9iYWxhbmNl X25vZGVfaWQ6JWQgUFJJTUFSWV9OT0RFX0lEOiVkIiwKLQkJCQkJCQlub2RlX2lkLCBzYy0+bG9h ZF9iYWxhbmNlX25vZGVfaWQsIFBSSU1BUllfTk9ERV9JRCkpKTsKKwkJCQkJKGVycm1zZygicG9v bF92aXJ0dWFsX21haW5fZGJfbm9kZV9pZDogdmlydHVhbF9tYWluX25vZGVfaWQ6JWQgbG9hZF9i YWxhbmNlX25vZGVfaWQ6JWQgUFJJTUFSWV9OT0RFX0lEOiVkIHN5bmNfbXNnOiVkIiwKKwkJCQkJ CQlub2RlX2lkLCBzYy0+bG9hZF9iYWxhbmNlX25vZGVfaWQsIFBSSU1BUllfTk9ERV9JRCwgc2Mt PnF1ZXJ5X2NvbnRleHQtPnN5bmNfbXNnKSkpOwogCi0JCQlpZiAobm9kZV9pZCAhPSBzYy0+cXVl cnlfY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgJiYgbm9kZV9pZCAhPSBQUklNQVJZX05P REVfSUQpCisJCQlpZiAoIXNjLT5xdWVyeV9jb250ZXh0LT5zeW5jX21zZyAmJiBub2RlX2lkICE9 IHNjLT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCAmJgorCQkJCW5vZGVfaWQg IT0gUFJJTUFSWV9OT0RFX0lEKQogCQkJewogCQkJCS8qCiAJCQkJICogT25seSByZXR1cm4gdGhl IHByaW1hcnkgbm9kZSBpZCBpZiB3ZSBhcmUgbm90IHByb2Nlc3NpbmcKQEAgLTgyNSw2ICs4Mjgs NyBAQCBwb29sX2V4dGVuZGVkX3NlbmRfYW5kX3dhaXQoUE9PTF9RVUVSWV9DT05URVhUICpxdWVy eV9jb250ZXh0LAogCQkJc3RhdF9jb3VudF91cChpLCBxdWVyeV9jb250ZXh0LT5wYXJzZV90cmVl KTsKIAkJfQogCisJCXNldF9zeW5jX21hcChzZXNzaW9uX2NvbnRleHQsIGkpOwogCQlzZW5kX2V4 dGVuZGVkX3Byb3RvY29sX21lc3NhZ2UoYmFja2VuZCwgaSwga2luZCwgc3RyX2xlbiwgc3RyKTsK IAogCQlpZiAoKCpraW5kID09ICdQJyB8fCAqa2luZCA9PSAnRScgfHwgKmtpbmQgPT0gJ0MnKSAm JiBTVFJFQU0pCkBAIC0xNzU4LDcgKzE3NjIsNyBAQCBwb29sX2lzX3RyYW5zYWN0aW9uX3JlYWRf b25seShOb2RlICpub2RlKQogICogbXVsdGlwbGUgc2VuZGluZyByZXF1ZXN0cyBhcmUgaW4gdGhl IG1hcCwgdGhlIGZpcnN0IG5vZGUgaWQgaXMgc2V0IHRvIHRoZQogICogdmlydHVhbF9tYWluX25v ZGVfaWQuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzZXRfdmlydHVhbF9tYWluX25vZGUoUE9P TF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0KQogewogCWludAkJCWk7CmRpZmYgLS1naXQg YS9zcmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jIGIvc3JjL2NvbnRleHQvcG9vbF9z ZXNzaW9uX2NvbnRleHQuYwppbmRleCA2ZWQ2NGIyZGUuLjQxNjMzNmZiMCAxMDA2NDQKLS0tIGEv c3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYworKysgYi9zcmMvY29udGV4dC9wb29s X3Nlc3Npb25fY29udGV4dC5jCkBAIC00LDcgKzQsNyBAQAogICogcGdwb29sOiBhIGxhbmd1YWdl IGluZGVwZW5kZW50IGNvbm5lY3Rpb24gcG9vbCBzZXJ2ZXIgZm9yIFBvc3RncmVTUUwKICAqIHdy aXR0ZW4gYnkgVGF0c3VvIElzaGlpCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMjQJUGdQ b29sIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMjUJ UGdQb29sIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICoKICAqIFBlcm1pc3Npb24gdG8gdXNl LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCiAgKiBpdHMg ZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQpA QCAtMjExOCwzICsyMTE4LDQxIEBAIHF1ZXJ5X2NhY2hlX2Rpc2FibGVkX3R4KHZvaWQpCiAKIAly ZXR1cm4gc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jYWNoZV9kaXNhYmxlZF90eDsKIH0KKworLyoK KyAqIGNsZWFyIHN5bmMgbWFwCisgKi8KK3ZvaWQKK2NsZWFyX3N5bmNfbWFwKFBPT0xfU0VTU0lP Tl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQpCit7CisJbWVtc2V0KHNlc3Npb25fY29udGV4dC0+ c3luY19tYXAsIDAsIHNpemVvZihzZXNzaW9uX2NvbnRleHQtPnN5bmNfbWFwKSk7Cit9CisKKy8q CisgKiBnZXQgc3luYyBtYXAKKyAqLworYm9vbAorZ2V0X3N5bmNfbWFwKFBPT0xfU0VTU0lPTl9D T05URVhUICpzZXNzaW9uX2NvbnRleHQsIGludCBub2RlX2lkKQoreworCXJldHVybiBzZXNzaW9u X2NvbnRleHQtPnN5bmNfbWFwW25vZGVfaWRdOworfQorCisvKgorICogc2V0IHN5bmMgbWFwCisg Ki8KK3ZvaWQKK3NldF9zeW5jX21hcChQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250 ZXh0LCBpbnQgbm9kZV9pZCkKK3sKKwllbG9nKERFQlVHNSwgInNldCBzeW5jIG1hcCAlZCIsIG5v ZGVfaWQpOworCXNlc3Npb25fY29udGV4dC0+c3luY19tYXBbbm9kZV9pZF0gPSB0cnVlOworfQor CisvKgorICogdW5zZXQgc3luYyBtYXAKKyAqLwordm9pZAordW5zZXRfc3luY19tYXAoUE9PTF9T RVNTSU9OX0NPTlRFWFQgKnNlc3Npb25fY29udGV4dCwgaW50IG5vZGVfaWQpCit7CisJZWxvZyhE RUJVRzUsICJ1bnNldCBzeW5jIG1hcCAlZCIsIG5vZGVfaWQpOworCXNlc3Npb25fY29udGV4dC0+ c3luY19tYXBbbm9kZV9pZF0gPSBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmggYi9zcmMvaW5jbHVkZS9jb250ZXh0L3Bvb2xfcXVl cnlfY29udGV4dC5oCmluZGV4IDFkMWVmMTNlYi4uYzlmYTJmNDM5IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5oCisrKyBiL3NyYy9pbmNsdWRlL2Nv bnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmgKQEAgLTk2LDYgKzk2LDggQEAgdHlwZWRlZiBzdHJ1 Y3QKIAlib29sCQlwYXJ0aWFsX2ZldGNoOwkvKiBpZiB0cnVlIHNvbWUgcm93cyBoYXZlIGJlZW4g ZmV0Y2hlZCBieSBhbgogCQkJCQkJCQkgKiBleGVjdXRlIHdpdGggbm9uIDAgcm93IG9wdGlvbiAq LwogCisJYm9vbAkJc3luY19tc2c7CQkvKiB0cnVlIGlmIHRoaXMgaXMgYSBzcGVjaWFsIHF1ZXJ5 IGNvbnRleHQgZm9yCisJCQkJCQkJCSAqIHN5bmMgbWVzc2FnZSAqLwogCU1lbW9yeUNvbnRleHQg bWVtb3J5X2NvbnRleHQ7CS8qIG1lbW9yeSBjb250ZXh0IGZvciBxdWVyeSBjb250ZXh0ICovCiB9 IFBPT0xfUVVFUllfQ09OVEVYVDsKIApAQCAtMTM0LDUgKzEzNiw2IEBAIGV4dGVybiBib29sIHBv b2xfaXNfdHJhbnNhY3Rpb25fcmVhZF9vbmx5KE5vZGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgcG9v bF9mb3JjZV9xdWVyeV9ub2RlX3RvX2JhY2tlbmQoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9j b250ZXh0LCBpbnQgYmFja2VuZF9pZCk7CiBleHRlcm4gdm9pZCBjaGVja19vYmplY3RfcmVsYXRp b25zaGlwX2xpc3QoY2hhciAqbmFtZSwgYm9vbCBpc19mdW5jX25hbWUpOwogZXh0ZXJuIGludAl3 YWl0X2Zvcl9mYWlsb3Zlcl90b19maW5pc2godm9pZCk7CitleHRlcm4gdm9pZCBzZXRfdmlydHVh bF9tYWluX25vZGUoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0KTsKIAogI2VuZGlm CQkJCQkJCS8qIFBPT0xfUVVFUllfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmggYi9zcmMvaW5jbHVkZS9jb250ZXh0L3Bv b2xfc2Vzc2lvbl9jb250ZXh0LmgKaW5kZXggZTg2OTY2ZTJlLi4zNzdiZDk3Y2EgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuaAorKysgYi9zcmMv aW5jbHVkZS9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgKQEAgLTYsNyArNiw3IEBACiAg KiBwZ3Bvb2w6IGEgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiBwb29sIHNlcnZlciBm b3IgUG9zdGdyZVNRTAogICogd3JpdHRlbiBieSBUYXRzdW8gSXNoaWkKICAqCi0gKiBDb3B5cmln aHQgKGMpIDIwMDMtMjAyNAlQZ1Bvb2wgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBDb3B5 cmlnaHQgKGMpIDIwMDMtMjAyNQlQZ1Bvb2wgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKgog ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBz b2Z0d2FyZSBhbmQKICAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0 aG91dCBmZWUgaXMgaGVyZWJ5CkBAIC0zNDMsNiArMzQzLDEwIEBAIHR5cGVkZWYgc3RydWN0CiAJ ICovCiAJYm9vbAkJcXVlcnlfY2FjaGVfZGlzYWJsZWRfdHg7CiAKKwkvKgorCSAqIEEgbWFwIHRv IHNlbmQgc3luYyBtZXNzYWdlLiBFYWNoIGVudHJ5IHJlcHJlc2VudHMgYmFja2VuZCBub2RlLgor CSAqLworCWJvb2wJCXN5bmNfbWFwW01BWF9OVU1fQkFDS0VORFNdOwogfSBQT09MX1NFU1NJT05f Q09OVEVYVDsKIAogZXh0ZXJuIHZvaWQgcG9vbF9pbml0X3Nlc3Npb25fY29udGV4dChQT09MX0NP Tk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCk7CkBAIC00 MzgsNCArNDQyLDkgQEAgZXh0ZXJuIHZvaWQgc2V0X3F1ZXJ5X2NhY2hlX2Rpc2FibGVkX3R4KHZv aWQpOwogZXh0ZXJuIHZvaWQgdW5zZXRfcXVlcnlfY2FjaGVfZGlzYWJsZWRfdHgodm9pZCk7CiBl eHRlcm4gYm9vbCBxdWVyeV9jYWNoZV9kaXNhYmxlZF90eCh2b2lkKTsKIAorZXh0ZXJuIHZvaWQg Y2xlYXJfc3luY19tYXAoUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Npb25fY29udGV4dCk7Citl eHRlcm4gYm9vbCBnZXRfc3luY19tYXAoUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Npb25fY29u dGV4dCwgaW50IG5vZGVfaWQpOworZXh0ZXJuIHZvaWQgc2V0X3N5bmNfbWFwKFBPT0xfU0VTU0lP Tl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQsIGludCBub2RlX2lkKTsKK2V4dGVybiB2b2lkIHVu c2V0X3N5bmNfbWFwKFBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQsIGludCBu b2RlX2lkKTsKKwogI2VuZGlmCQkJCQkJCS8qIFBPT0xfU0VTU0lPTl9DT05URVhUX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9wcm90b2NvbC9wb29sX3Byb2Nlc3NfcXVlcnkuYyBiL3NyYy9wcm90b2Nv bC9wb29sX3Byb2Nlc3NfcXVlcnkuYwppbmRleCAwZGFjYmNiYzQuLjc2YmQzYzg1NiAxMDA2NDQK LS0tIGEvc3JjL3Byb3RvY29sL3Bvb2xfcHJvY2Vzc19xdWVyeS5jCisrKyBiL3NyYy9wcm90b2Nv bC9wb29sX3Byb2Nlc3NfcXVlcnkuYwpAQCAtMzM1NSwxMSArMzM1NSwyMyBAQCByZWFkX2tpbmRf ZnJvbV9iYWNrZW5kKFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9Q T09MICpiYWNrZW5kLAogCQl7CiAJCQlpZiAobXNnLT50eXBlID09IFBPT0xfU1lOQykKIAkJCXsK KwkJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKIAkJCQllcmVwb3J0KERFQlVHNSwKIAkJCQkJCShl cnJtc2coInJlYWRfa2luZF9mcm9tX2JhY2tlbmQ6IHN5bmMgcGVuZGluZyBtZXNzYWdlIGV4aXN0 cyIpKSk7Ci0JCQkJc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0ID0gTlVMTDsKIAkJCQlw b29sX3Vuc2V0X2lnbm9yZV90aWxsX3N5bmMoKTsKLQkJCQlwb29sX3Vuc2V0X3F1ZXJ5X2luX3By b2dyZXNzKCk7CisJCQkJcG9vbF9wZW5kaW5nX21lc3NhZ2VfcXVlcnlfY29udGV4dF9kZXN0X3Nl dChtc2csIG1zZy0+cXVlcnlfY29udGV4dCk7CisJCQkJc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9j b250ZXh0ID0gbXNnLT5xdWVyeV9jb250ZXh0OworCQkJCXNlc3Npb25fY29udGV4dC0+Zmx1c2hf cGVuZGluZyA9IG1zZy0+Zmx1c2hfcGVuZGluZzsKKwkJCQlwb29sX3NldF9xdWVyeV9pbl9wcm9n cmVzcygpOworCisJCQkJLyogZW1pdCBkZWJ1ZyBsb2cgKi8KKwkJCQlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJyZWFkX2tpbmRfZnJvbV9iYWNrZW5k IHN5bmNfbWFwOiAiKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JBQ0tFTkRTOyBpKyspCisJ CQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVkICIsIHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4 dChmYWxzZSktPnN5bmNfbWFwW2ldKTsKKwkJCQllbG9nKERFQlVHNSwgIiVzIiwgYnVmLmRhdGEp OworCQkJCXBmcmVlKGJ1Zi5kYXRhKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKZGlmZiAtLWdpdCBh L3NyYy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYyBiL3NyYy9wcm90b2NvbC9wb29sX3By b3RvX21vZHVsZXMuYwppbmRleCA5ZjMxNDQyYjcuLjJiNTczZWMxOCAxMDA2NDQKLS0tIGEvc3Jj L3Byb3RvY29sL3Bvb2xfcHJvdG9fbW9kdWxlcy5jCisrKyBiL3NyYy9wcm90b2NvbC9wb29sX3By b3RvX21vZHVsZXMuYwpAQCAtMTE0LDYgKzExNCw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3ByZXBh cmUoTGlzdCAqcGFyc2VfdHJlZV9saXN0LCBpbnQgbGVuLCBjaGFyICpjb250ZW50cyk7CiAKIHN0 YXRpYyBQT09MX1FVRVJZX0NPTlRFWFQgKmNyZWF0ZV9kdW1teV9xdWVyeV9jb250ZXh0KHZvaWQp OwogCitzdGF0aWMgdm9pZCBhZGRfc3luY19wZW5kaW5nX21lc3NhZ2Uodm9pZCk7CisKIC8qCiAg KiBUaGlzIGlzIHRoZSB3b3JraG9yc2Ugb2YgcHJvY2Vzc2luZyB0aGUgcGdfdGVybWluYXRlX2Jh Y2tlbmQgZnVuY3Rpb24gdG8KICAqIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2Ugb2YgZnVuY3Rpb24g c2hvdWxkIG5vdCB0cmlnZ2VyIHRoZSBiYWNrZW5kIG5vZGUgZmFpbG92ZXIuCkBAIC0yNDg5LDYg KzI0OTEsMTkgQEAgUmVhZHlGb3JRdWVyeShQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLAogCSAq LwogCXBvb2xfcHNfaWRsZV9kaXNwbGF5KGJhY2tlbmQpOwogCisJY2xlYXJfc3luY19tYXAoc2Vz c2lvbl9jb250ZXh0KTsJLyogcmVzZXQgc3luYyBtYXAgKi8KKworCS8qIGRlc3Ryb3kgcXVlcnkg Y29udGV4dCBmb3Igc3luYyBtZXNzYWdlICovCisJaWYgKHNlc3Npb25fY29udGV4dC0+cXVlcnlf Y29udGV4dCAmJiBzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQtPnN5bmNfbXNnKQorCXsK KwkJTWVtb3J5Q29udGV4dCBtZW1vcnlfY29udGV4dCA9IHNlc3Npb25fY29udGV4dC0+cXVlcnlf Y29udGV4dC0+bWVtb3J5X2NvbnRleHQ7CisKKwkJZWxvZyhERUJVRzUsICJkZXN0cm95IHF1ZXJ5 IGNvbnRleHQgZm9yIHN5bmMgbWVzc2FnZSIpOworCQlwZnJlZShzZXNzaW9uX2NvbnRleHQtPnF1 ZXJ5X2NvbnRleHQpOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKG1lbW9yeV9jb250ZXh0KTsKKwkJ c2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0ID0gTlVMTDsKKwl9CisKIAlyZXR1cm4gUE9P TF9DT05USU5VRTsKIH0KIApAQCAtMjk5MSwxMSArMzAwNiwxNCBAQCBQcm9jZXNzRnJvbnRlbmRS ZXNwb25zZShQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLAogCiAJCQlpZiAoU0xfTU9ERSkKIAkJ CXsKLQkJCQlQT09MX1BFTkRJTkdfTUVTU0FHRSAqbXNnOwotCi0JCQkJcG9vbF91bnNldF9xdWVy eV9pbl9wcm9ncmVzcygpOwotCQkJCW1zZyA9IHBvb2xfcGVuZGluZ19tZXNzYWdlX2NyZWF0ZSgn UycsIDAsIE5VTEwpOwotCQkJCXBvb2xfcGVuZGluZ19tZXNzYWdlX2FkZChtc2cpOworCQkJCS8q CisJCQkJICogSWYgd2UgYXJlIGRvaW5nIGV4dGVuZGVkIHF1ZXJ5IGluIHN0cmVhbWluZyByZXBs aWNhdGlvbiBvcgorCQkJCSAqIGxvZ2ljYWwgcmVwbGljYXRpb24gbW9kZSwgYWRkIGEgc3luYyBw ZW5kaW5nIG1lc3NhZ2UKKwkJCQkgKiByZWZsZWN0aW5nIHN5bmNfbWFwIHNvIHRoYXQgd2Ugc2Vu ZCB0aGUgc3luYyBtZXNzYWdlIHRvCisJCQkJICogb25seSBuZWNlc3NhcnkgYmFja2VuZC4gIFBy ZXZpb3VzbHkgd2Ugc2VudCB0byBhbGwgYmFja2VuZHMKKwkJCQkgKiBhbmQgaXQgZGVncmFkZXMg dGhlIHBlcmZvcm1hbmNlLgorCQkJCSAqLworCQkJCWFkZF9zeW5jX3BlbmRpbmdfbWVzc2FnZSgp OwogCQkJfQogCQkJZWxzZSBpZiAoIXBvb2xfaXNfcXVlcnlfaW5fcHJvZ3Jlc3MoKSkKIAkJCQlw b29sX3NldF9xdWVyeV9pbl9wcm9ncmVzcygpOwpAQCAtNDU4MCw3ICs0NTk4LDYgQEAgcG9vbF9k aXNjYXJkX2V4Y2VwdF9zeW5jX2FuZF9yZWFkeV9mb3JfcXVlcnkoUE9PTF9DT05ORUNUSU9OICpm cm9udGVuZCwKIAl7CiAJCWNoYXIJCWtpbmQ7CiAJCWludAkJCWxlbjsKLQkJUE9PTF9QRU5ESU5H X01FU1NBR0UgKm1zZzsKIAkJY2hhcgkgICAqY29udGVudHMgPSBOVUxMOwogCiAJCWZvciAoOzsp CkBAIC00NTkyLDggKzQ2MDksMTEgQEAgcG9vbF9kaXNjYXJkX2V4Y2VwdF9zeW5jX2FuZF9yZWFk eV9mb3JfcXVlcnkoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwKIAkJCQljb250ZW50cyA9IHBv b2xfcmVhZDIoZnJvbnRlbmQsIGxlbik7CiAJCQlpZiAoa2luZCA9PSAnUycpCiAJCQl7Ci0JCQkJ bXNnID0gcG9vbF9wZW5kaW5nX21lc3NhZ2VfY3JlYXRlKCdTJywgMCwgTlVMTCk7Ci0JCQkJcG9v bF9wZW5kaW5nX21lc3NhZ2VfYWRkKG1zZyk7CisJCQkJLyoKKwkJCQkgKiBTeW5jIG1lc3NhZ2Ug ZnJvbSBmcm9udGVuZCBhcnJpdmVzLiBBZGQgYSBzeW5jIHBlbmRpbmcKKwkJCQkgKiBtZXNzYWdl IGFuZCBmb3J3YXJkIHRvIGJhY2tlbmQuCisJCQkJICovCisJCQkJYWRkX3N5bmNfcGVuZGluZ19t ZXNzYWdlKCk7CiAJCQkJU2ltcGxlRm9yd2FyZFRvQmFja2VuZChraW5kLCBmcm9udGVuZCwgYmFj a2VuZCwgbGVuLCBjb250ZW50cyk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC01Mjg2LDMgKzUzMDYs NzcgQEAgY3JlYXRlX2R1bW15X3F1ZXJ5X2NvbnRleHQodm9pZCkKIAogCXJldHVybiBxdWVyeV9j b250ZXh0OwogfQorCisvKgorICogUHJldmlvdXNseSB3ZSBmb3J3YXJkZWQgc3luYyBtZXNzYWdl cyB0byBhbGwgYmFja2VuZHMuICBUaGlzIGlzIG5vdCBvbmx5IGEKKyAqIHdhc3RlIG9mIENQVSBj eWNsZSwgYnV0IGRlZ3JhZGF0aW9uIG9mIHBlcmZvcm1hbmNlIGJlY2F1c2UgaXQgYWRkcyByb3Vu ZAorICogdHJpcCBtZXNzYWdlcyBiZXR3ZWVuIHBncG9vbCBhbmQgYmFja2VuZCwgd2hpY2ggaXMg bm90IG5lY2Vzc2FyeSB0byBiZSBzZW50CisgKiBhIHN5bmMgbWVzc2FnZSBhdCBhbGwgaWYgdGhl IGJhY2tlbmQgcmVjZWl2ZWQgbm8gcXVlcnkgc2luY2UgdGhlIGxhc3QKKyAqIFJlYWR5Rm9yUXVl cnkuIFRvIGZpeCB0aGlzLCB3ZSBjcmVhdGUgYSBkdW1teSBxdWVyeSBjb250ZXh0IHdoaWNoIGhv bGRzCisgKiBuZWNlc3NhcnkgZGVzdGluYXRpb24gYmFja2VuZHMgdXNpbmcgc2Vzc2lvbl9jb250 ZXh0LT5zeW5jX21hcC4gVGhlCisgKiBkZXN0aW5hdGlvbnMgYXJlIGFjY3VtbGF0aW9uIG9mIGJh Y2tlbmQgbm9kZSBpZHMgc2luY2UgdGhlIGxhc3QKKyAqIFJlYWR5Rm9yUXVlcnkuICh1cG9uIHJl Y2VpdmluZyBSZWFkeUZvclF5ZXJ5LCBzeW5jX21hcCBpcyB6ZXJvIGNsZWFyZWQuKQorICovCitz dGF0aWMgdm9pZAorYWRkX3N5bmNfcGVuZGluZ19tZXNzYWdlKHZvaWQpCit7CisJUE9PTF9QRU5E SU5HX01FU1NBR0UgKm1zZzsKKwlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0 OworCVBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dDsKKwlTdHJpbmdJbmZvRGF0YSBi dWY7CisJaW50CQkJaTsKKworCS8qCisJICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVk IG9ubHkgd2hlbiBkb2luZyBleHRlbmRlZCBxdWVyeSBpbgorCSAqIHN0cmVhbWluZyByZXBsaWNh dGlvbiBvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG1vZGUuICBJZiBub3QsIGRvIG5vdGhpbmcuCisJ ICovCisJaWYgKCFwb29sX2lzX2RvaW5nX2V4dGVuZGVkX3F1ZXJ5X21lc3NhZ2UoKSB8fCAhU0xf TU9ERSkKKwkJcmV0dXJuOworCisJbXNnID0gcG9vbF9wZW5kaW5nX21lc3NhZ2VfY3JlYXRlKCdT JywgMCwgTlVMTCk7CisJc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0 KGZhbHNlKTsKKwlxdWVyeV9jb250ZXh0ID0gcG9vbF9pbml0X3F1ZXJ5X2NvbnRleHQoKTsKKwor CS8qIG1hcmsgdGhpcyBxdWVyeSBjb250ZXh0IGZvciBzeW5jIG1lc3NhZ2VzICovCisJcXVlcnlf Y29udGV4dC0+c3luY19tc2cgPSB0cnVlOworCisJLyoKKwkgKiBDaGVjayBpZiBzeW5jIG1hcCBp cyBhbGwgZmFsc2UuICh0aGlzIGNvdWxkIGhhcHBlbiBpZiBzeW5jIG1lc3NhZ2UKKwkgKiBhcnJp dmVzIHdpdGhvdXQgYW55IHF1ZXJ5IGJlaW5nIHNlbnQgc2luY2UgbGFzdCBSZWFkeUZvclF1ZXJ5 KS4gSWYgc28sCisJICogd2Ugc2V0IGFsbCBtYXAgbWVtYmVycyB0byB0cnVlIHRvIGF2b2lkIHN1 YnNlcXVlbnQgZXJyb3IgaW4KKwkgKiBWQUxJRF9CQUNLRU5ELgorCSAqLworCWZvciAoaSA9IDA7 IGkgPCBOVU1fQkFDS0VORFM7IGkrKykKKwl7CisJCWlmIChzZXNzaW9uX2NvbnRleHQtPnN5bmNf bWFwW2ldID09IHRydWUpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gTlVNX0JBQ0tFTkRTKQor CQltZW1zZXQoc2Vzc2lvbl9jb250ZXh0LT5zeW5jX21hcCwgdHJ1ZSwgTlVNX0JBQ0tFTkRTKTsK KworCS8qIGNvcHkgc3luYyBtYXAgdG8gcXVlcnkgY29udGV4dCdzIHdoZXJlX3RvX3NlbmQgbWFw ICovCisJbWVtY3B5KHF1ZXJ5X2NvbnRleHQtPndoZXJlX3RvX3NlbmQsIHNlc3Npb25fY29udGV4 dC0+c3luY19tYXAsCisJCSAgIHNpemVvZihxdWVyeV9jb250ZXh0LT53aGVyZV90b19zZW5kKSk7 CisJLyogc2V0IHZpcnR1YWwgbWFpbiBub2RlIGlkIGluIHRoZSBxdWVyeSBjb250ZXh0ICovCisJ c2V0X3ZpcnR1YWxfbWFpbl9ub2RlKHF1ZXJ5X2NvbnRleHQpOworCS8qIGNvcHkgcXVlcnlfY29u dGV4dCdzIHdoZXJlX3RvX3NlbmQgbWFwIHRvIG1zZy0+bm9kZV9pZHMgKi8KKwlwb29sX3BlbmRp bmdfbWVzc2FnZV9kZXN0X3NldChtc2csIHF1ZXJ5X2NvbnRleHQpOworCS8qIGFkZCB0byB0aGUg cGVuZGluZyBtZXNzYWdlIHF1ZXVlICovCisJcG9vbF9wZW5kaW5nX21lc3NhZ2VfYWRkKG1zZyk7 CisKKwkvKgorCSAqIFNldCBxdWVyeSBpbiBwcm9ncmVzcyBhbmQgc2V0IHRoZSBxdWVyeSBjb250 ZXh0IHRvIHNlc3Npb24gY29udGV4dC4KKwkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3Igc3Vic2Vx dWVudCBTaW1wbGVGb3J3YXJkVG9CYWNrZW5kKCkgdG8gc2VuZCB0aGUKKwkgKiBzeW5jIG1lc3Nh Z2UgdG8gcHJvcGVyIGJhY2tlbmQgLgorCSAqLworCXBvb2xfc2V0X3F1ZXJ5X2luX3Byb2dyZXNz KCk7CisJc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0ID0gcXVlcnlfY29udGV4dDsKKwor CS8qIGVtaXQgZGVidWcgbG9nICovCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiUHJvY2Vzc0JhY2tlbmRSZXNwb25zZSBzeW5jX21hcDogIik7CisJZm9y IChpID0gMDsgaSA8IE5VTV9CQUNLRU5EUzsgaSsrKQorCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYs ICIlZCAiLCBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpLT5zeW5jX21hcFtpXSk7CisJ ZWxvZyhERUJVRzUsICIlcyIsIGJ1Zi5kYXRhKTsKKwlwZnJlZShidWYuZGF0YSk7Cit9CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzAwNi5tZW1xY2FjaGUvdGVzdC5zaCBi L3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDA2Lm1lbXFjYWNoZS90ZXN0LnNoCmluZGV4IGQw MGJkZDA4NC4uZjIzNzE3NDRkIDEwMDc1NQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3Rz LzAwNi5tZW1xY2FjaGUvdGVzdC5zaAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzAw Ni5tZW1xY2FjaGUvdGVzdC5zaApAQCAtMzQsNiArMzQsOSBAQCBkbwogCWVjaG8gIm1lbW9yeV9j YWNoZV9lbmFibGVkID0gb24iID4+IGV0Yy9wZ3Bvb2wuY29uZgogCWVjaG8gImNhY2hlX3NhZmVf bWVtcWNhY2hlX3RhYmxlX2xpc3QgPSAnY2FjaGVfc2FmZV92JyIgPj4gZXRjL3BncG9vbC5jb25m CiAJZWNobyAiY2FjaGVfdW5zYWZlX21lbXFjYWNoZV90YWJsZV9saXN0ID0gJ2NhY2hlX3Vuc2Fm ZV90JyIgPj4gZXRjL3BncG9vbC5jb25mCisJZWNobyAibG9nX3Blcl9ub2RlX3N0YXRlbWVudCA9 IG9uIiA+PiBldGMvcGdwb29sLmNvbmYKKwllY2hvICJsb2dfY2xpZW50X21lc3NhZ2VzID0gb24i ID4+IGV0Yy9wZ3Bvb2wuY29uZgorCWVjaG8gImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzUiID4+ IGV0Yy9wZ3Bvb2wuY29uZgogCiAJc291cmNlIC4vYmFzaHJjLnBvcnRzCiAKQEAgLTUzOCw2ICs1 NDEsOSBAQCAkUEdQT09MX1NFVFVQIC1tIHMgLW4gMiB8fCBleGl0IDEKIGVjaG8gImRvbmUuIgog CiBlY2hvICJtZW1vcnlfY2FjaGVfZW5hYmxlZCA9IG9uIiA+PiBldGMvcGdwb29sLmNvbmYKK2Vj aG8gImxvZ19wZXJfbm9kZV9zdGF0ZW1lbnQgPSBvbiIgPj4gZXRjL3BncG9vbC5jb25mCitlY2hv ICJsb2dfY2xpZW50X21lc3NhZ2VzID0gb24iID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAibG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnNSIgPj4gZXRjL3BncG9vbC5jb25mCiBjZCAuLgogCiBmb3Ig aSBpbiAxIDIgMyA0IDQgNSA2IDcKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVz dHMvMDM5LmxvZ19iYWNrZW5kX21lc3NhZ2VzL2V4cGVjdGVkLnMgYi9zcmMvdGVzdC9yZWdyZXNz aW9uL3Rlc3RzLzAzOS5sb2dfYmFja2VuZF9tZXNzYWdlcy9leHBlY3RlZC5zCmluZGV4IDU4Nzdm ZTM2MS4uYTVmZmVlYmVjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzAz OS5sb2dfYmFja2VuZF9tZXNzYWdlcy9leHBlY3RlZC5zCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Np b24vdGVzdHMvMDM5LmxvZ19iYWNrZW5kX21lc3NhZ2VzL2V4cGVjdGVkLnMKQEAgLTg4LDcgKzg4 LDYgQEAgRkU9PiBTeW5jCiA8PSBCRSBEYXRhUm93CiA8PSBCRSBOb3RpY2VSZXNwb25zZShTIExP RyBDIFhYMDAwIE0gQ29tbWFuZENvbXBsZXRlIG1lc3NhZ2UgZnJvbSBiYWNrZW5kIDEgCiA8PSBC RSBDb21tYW5kQ29tcGxldGUoU0VMRUNUIDMpCi08PSBCRSBOb3RpY2VSZXNwb25zZShTIExPRyBD IFhYMDAwIE0gUmVhZHlGb3JRdWVyeSBtZXNzYWdlIGZyb20gYmFja2VuZCAwIAogPD0gQkUgTm90 aWNlUmVzcG9uc2UoUyBMT0cgQyBYWDAwMCBNIFJlYWR5Rm9yUXVlcnkgbWVzc2FnZSBmcm9tIGJh Y2tlbmQgMSAKIDw9IEJFIFJlYWR5Rm9yUXVlcnkoSSkKIEZFPT4gVGVybWluYXRlCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzEzMC5kZWNsYXJlL3Rlc3Quc2ggYi9zcmMv dGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzEzMC5kZWNsYXJlL3Rlc3Quc2gKaW5kZXggNjVlMDBkNTcx Li44YmNiYjNlMTYgMTAwNzU1Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMTMwLmRl Y2xhcmUvdGVzdC5zaAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzEzMC5kZWNsYXJl L3Rlc3Quc2gKQEAgLTIwLDYgKzIwLDcgQEAgZG8KICAgICBlY2hvIC1uICJjcmVhdGluZyB0ZXN0 IGVudmlyb25tZW50Li4uIgogICAgICRQR1BPT0xfU0VUVVAgLW0gJG1vZGUgfHwgZXhpdCAxCiAg ICAgZWNobyAiZG9uZS4iCisgICAgZWNobyAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnNSIgPj4g ZXRjL3BncG9vbC5jb25mCiAgICAgc291cmNlIC4vYmFzaHJjLnBvcnRzCiAgICAgLi9zdGFydGFs bAogICAgIHdhaXRfZm9yX3BncG9vbF9zdGFydHVwCi0tIAoyLjQzLjAKCg== ----Next_Part(Thu_Dec_25_16_26_00_2025_597)----