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 1w8CZl-000Ire-1i for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 07:34:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8CZk-004OFS-0N for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Apr 2026 07:34:48 +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 1w8CZj-004OFK-1s for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 07:34:48 +0000 Received: from mail-oo1-xc32.google.com ([2607:f8b0:4864:20::c32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8CZh-0000000098l-3on2 for pgsql-hackers@lists.postgresql.org; Thu, 02 Apr 2026 07:34:46 +0000 Received: by mail-oo1-xc32.google.com with SMTP id 006d021491bc7-679f6ee3fb0so204124eaf.2 for ; Thu, 02 Apr 2026 00:34:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775115285; cv=none; d=google.com; s=arc-20240605; b=ENSk8En1tAwNT06AlPCs775zcABxquEEQs7Kqjt/rM+yZkvLL4w3Ccv2X+PIBXok+t Q764kC+GXMa06AQKKHvENV2l88Cux2/qWFXC4pvEEw/bMxDkcWVwRXPGSABrrsZLs7Fc runFioEyS8ybqq7RkZo2Hw84CHy57f9eSq1+hbE3lQN4Kvr0+6TdQZ5xjR8I9tk+cQTw m+Aff28RNLh02bJH2J+1IwwVqg1KRbXsjgAsfYCACFP+93EsQZBFlYR235mwvMw6s2Vi 6ZOhLrYlLQ+H14WilYObJ2kYhX2bYrhXp5lxAlAz7dwf5cKBzDhoYG5iv2Hbrh+ChXoc Ik5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=D9K+QxSaWl1Rj6jvV88TU/BjlhiJLoMZ9tqpTojzCWU=; fh=ZwMjqCpd7yGV0A30n9CNxdAItVzhbypyd6xgIGYb/YA=; b=NQgkiUDpqT8mkyl/ysg2ElUaSXOgE4PNxn+W2d6lP5r5vizJeoFJvSv/DAoPRbtseC gpXg3tNma9AIk9M2GMqVuHGZN29xCphltO2T6D0cBxSSmFVcS22+a7NKBOJM/GB/DGJ+ gMzByhIQuoH1BpQEUXHKmmQWBrx2z/OVY7ONxNr3EEvaCv1FPxUMFlttRBpIMZXKYzSm jtU6cO2iTL2FSIk3rzuWSbvUK3t1y6Y3l0sXHalWGypK94+Lm1S44bNY2qMLOZsExuMJ RuUZvFgyaeBmFZQiT2uYRitisQQ4lN7xjcM2mskN6+bE3jonlS8XUSN/a3tybzH37ir1 Jmvg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775115285; x=1775720085; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=D9K+QxSaWl1Rj6jvV88TU/BjlhiJLoMZ9tqpTojzCWU=; b=Zm/6Wfx25wWY/S23BPeFgt7nBQpXhgWl8xAczWuV8/F5C/Qd9Yi7IpKEV0JNLAfYX6 JNLRTDkYsVN++aNYuV+UZ+MrxFm58O8M4S7efQZfUi35+kbh8nUAs57CuStExJ8fI7zH kqVCjTPdBs/IqdedFUN90CizPS0+ldTn7HJgQInMUfB4J3CjQlCmVWU8BP8UbBqqzrDj Gv8bXORfquadqvfaiuaxW++8hLcYcIsnJHASkIlrKGr7ReEnJ7Nnul9aOhxtgBCCZ6nu qhxCQrkuvH4Rn6JgWKmnf4muClNJP1Yu4K7G2rlkwOKXmFtwyHkhnVWNl/02BoJjh5Js o7SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775115285; x=1775720085; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=D9K+QxSaWl1Rj6jvV88TU/BjlhiJLoMZ9tqpTojzCWU=; b=c3vfpq5frnT1IWPL0PvjZgkNmBooeLxTU2FJSdFpRGzVL1vxDmfOmeCATXFs86UPd1 yvNuFAhZZ/4/iek2jEQ1qXSVwauoKmH2LNSrr3UskAhG6SnBZ4Jzx8DdjDjvMPRKL3L7 OdIjfDgvvzBaenuDVpr/Sb2nkZmXyysY23flrDE7whhVDbJAp73yr0a1xY9lR6C7tqUG LsNc1Tp1NVNFECge7vPwsKNJN2k8zayBOZ/qeg1w/8j4Rb3fXx/xKCTi9R2xtKJ95LKu cox1ugDB/rByg29LoqIyJsfXM86Omsm9Y5sk/rVw3EebEM3j974G3kEiuCsqDyi9dBew hVmA== X-Forwarded-Encrypted: i=1; AJvYcCXiDBvNzIhVv9gGq9HfeforC3+l3KgDlwYldbqZsV5KVFeBrN1sMt3595bdb3WMqTjo8+4/Dx1vIH+Te6xY@lists.postgresql.org X-Gm-Message-State: AOJu0YzzzRqtIcHXEdvZdOqqqUvz7zN36Ia2qQjfAaIjsDQ6x4P7qno4 Labfwp6D15UqCoaCYTKIV2Ptfs7QqYRwzGBZyNR1gQHhWbYbwsREdASvw792o3BSobRsh2qK33q TllIRsYkDgq5t9Se+cmgES5efF/rQ1A0= X-Gm-Gg: ATEYQzwjT753xipPAP9OVrw2lFY/B3eX6pGM1d5Ey7ZUS4E4XQvRm5K0H7++ItBOAOX qNQQIJ4F4KBlvjSzx2pRDivxNixIqc7kv8OUg4CjKbE21kV6gsF73TjNUr31Zu1l2cRFREmQxOR dGvVc/w2r34fFTosFPD2HViaGa+HofcUNg+yQ7Bls2jY+ArNZS9xyD+8tM5YYGqApGODv00gZxd ZCy3IjQlWKHcslvdpCJbU4Rg13HsOT3Jwp0Z2tlMm/+EBa/AbkQHPzmvC1eknTjNoDECQCVVD56 OsVobTUs X-Received: by 2002:a05:6820:1f03:b0:67c:27a7:8c4d with SMTP id 006d021491bc7-67fabd025b4mr3356343eaf.48.1775115285267; Thu, 02 Apr 2026 00:34:45 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Thu, 2 Apr 2026 16:34:33 +0900 X-Gm-Features: AQROBzCSL2Vpq1-99vy9EgDD5g4A60PjStdLS6hgH4u2plJmzyTz3Ewtkn9tOyY Message-ID: Subject: Re: Potential partition pruning regression on PostgreSQL 18 To: David Rowley Cc: =?UTF-8?Q?C=C3=A1ndido_Antonio_Mart=C3=ADnez_Descalzo?= , Pg Hackers Content-Type: multipart/mixed; boundary="00000000000003a455064e753cc6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000003a455064e753cc6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 2, 2026 at 8:01=E2=80=AFAM David Rowley = wrote: > The question is, can we do the same thing in > match_clause_to_partition_key() as we did for index clauses in > ad66f705f. The PlaceHolderVar's phnullingrels are empty for this > query, so I expect we just need to give the same treatment to > partition key columns as was done for indexes columns in > fix_indexqual_operand(). Agreed. The clauses in match_clause_to_partition_key() are always relation-scan-level expressions, where a PHV with an empty phnullingrels is effectively a no-op. Therefore, we can safely strip such PHVs. Attached is a draft patch for the fix. Regarding backpatching, I'm inclined to only back-patch this down to v18. This issue actually predates v18, for example, when the partition key is a non-Var expression. A non-Var target item will be wrapped in a PHV, causing us to fail the partition key match. However, the changes in v18 seem to have made the issue common enough to notice. This is very similar to the index matching case. - Richard --00000000000003a455064e753cc6 Content-Type: application/octet-stream; name="v1-0001-Strip-PlaceHolderVars-from-partition-pruning-oper.patch" Content-Disposition: attachment; filename="v1-0001-Strip-PlaceHolderVars-from-partition-pruning-oper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnh5sos30 RnJvbSBiZDQ4M2I3NDMxMWFkNzk5MjE0MTEwM2JlYjk1ODVjMGY3MGQ0ZGJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVGh1LCAyIEFwciAyMDI2IDE0OjU0OjQ0ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0g U3RyaXAgUGxhY2VIb2xkZXJWYXJzIGZyb20gcGFydGl0aW9uIHBydW5pbmcgb3BlcmFuZHMKCldo ZW4gcHVsbGluZyB1cCBhIHN1YnF1ZXJ5LCBpdHMgdGFyZ2V0bGlzdCBpdGVtcyBtYXkgYmUgd3Jh cHBlZCBpbgpQbGFjZUhvbGRlclZhcnMgdG8gZW5mb3JjZSBzZXBhcmF0ZSBpZGVudGl0eSBvciBh cyBhIHJlc3VsdCBvZiBvdXRlcgpqb2lucy4gIFRoaXMgY2F1c2VzIGFueSB1cHBlci1sZXZlbCBX SEVSRSBjbGF1c2VzIHJlZmVyZW5jaW5nIHRoZXNlCm91dHB1dHMgdG8gY29udGFpbiBQbGFjZUhv bGRlclZhcnMsIHdoaWNoIHByZXZlbnRzIHBhcnRwcnVuZS5jIGZyb20KcmVjb2duaXppbmcgdGhh dCB0aGV5IG1hdGNoIHBhcnRpdGlvbiBrZXkgY29sdW1ucywgZGVmZWF0aW5nIHBhcnRpdGlvbgpw cnVuaW5nLgoKVG8gZml4LCBzdHJpcCBQbGFjZUhvbGRlclZhcnMgZnJvbSBvcGVyYW5kcyBiZWZv cmUgY29tcGFyaW5nIHRoZW0gdG8KcGFydGl0aW9uIGtleXMuICBBIFBsYWNlSG9sZGVyVmFyIHdp dGggZW1wdHkgcGhudWxsaW5ncmVscyBhcHBlYXJpbmcKaW4gYSByZWxhdGlvbi1zY2FuLWxldmVs IGV4cHJlc3Npb24gaXMgZWZmZWN0aXZlbHkgYSBuby1vcCwgc28Kc3RyaXBwaW5nIGl0IGlzIHNh ZmUuICBUaGlzIHBhcmFsbGVscyB0aGUgZXhpc3RpbmcgdHJlYXRtZW50IGluCmluZHhwYXRoLmMg Zm9yIGluZGV4IG1hdGNoaW5nLgoKSW4gcGFzc2luZywgcmVuYW1lIHN0cmlwX3BodnNfaW5faW5k ZXhfb3BlcmFuZCgpIHRvIHN0cmlwX25vb3BfcGh2cygpCmFuZCBtb3ZlIGl0IGZyb20gaW5keHBh dGguYyB0byBwbGFjZWhvbGRlci5jLCBzaW5jZSBpdCBpcyBub3cgYQpnZW5lcmFsLXB1cnBvc2Ug dXRpbGl0eSB1c2VkIGJ5IGJvdGggaW5kZXggbWF0Y2hpbmcgYW5kIHBhcnRpdGlvbgpwcnVuaW5n IGNvZGUuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyAgICAgICAg IHwgIDkxICstLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFjZWhvbGRl ci5jICAgICAgfCAgOTEgKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFy dHBydW5lLmMgICAgICAgICAgfCAgMjggKysrLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhz LmggICAgICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFjZWhv bGRlci5oICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRp dGlvbl9wcnVuZS5vdXQgfCAxMzIgKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsICAgICAgfCAgNzEgKysrKysrKysrKwogOCBmaWxlcyBj aGFuZ2VkLCAzMjAgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggNjdkOWRjMzVmNDQuLjQzMGUwNmRjYWFhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2Rl LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3Bs YWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3ByZXAuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvcmVzdHJpY3RpbmZvLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCkBAIC0x OTUsOCArMTk2LDYgQEAgc3RhdGljIEV4cHIgKm1hdGNoX2NsYXVzZV90b19vcmRlcmluZ19vcChJ bmRleE9wdEluZm8gKmluZGV4LAogc3RhdGljIGJvb2wgZWNfbWVtYmVyX21hdGNoZXNfaW5kZXhj b2woUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCSAgIEVxdWl2 YWxlbmNlQ2xhc3MgKmVjLCBFcXVpdmFsZW5jZU1lbWJlciAqZW0sCiAJCQkJCQkJCQkgICB2b2lk ICphcmcpOwotc3RhdGljIGJvb2wgY29udGFpbl9zdHJpcHBhYmxlX3Bodl93YWxrZXIoTm9kZSAq bm9kZSwgdm9pZCAqY29udGV4dCk7Ci1zdGF0aWMgTm9kZSAqc3RyaXBfcGh2c19pbl9pbmRleF9v cGVyYW5kX211dGF0b3IoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCk7CiAKIAogLyoKQEAgLTQz NjMsNyArNDM2Miw3IEBAIG1hdGNoX2luZGV4X3RvX29wZXJhbmQoTm9kZSAqb3BlcmFuZCwKIAkg KiBhIHN1YnRyZWUpIGhhcyBiZWVuIHdyYXBwZWQgaW4gUGxhY2VIb2xkZXJWYXJzIHRvIGVuZm9y Y2Ugc2VwYXJhdGUKIAkgKiBpZGVudGl0eSBvciBhcyBhIHJlc3VsdCBvZiBvdXRlciBqb2lucy4K IAkgKi8KLQlvcGVyYW5kID0gc3RyaXBfcGh2c19pbl9pbmRleF9vcGVyYW5kKG9wZXJhbmQpOwor CW9wZXJhbmQgPSBzdHJpcF9ub29wX3BodnMob3BlcmFuZCk7CiAKIAkvKgogCSAqIElnbm9yZSBh bnkgUmVsYWJlbFR5cGUgbm9kZSBhYm92ZSB0aGUgb3BlcmFuZC4gIFRoaXMgaXMgbmVlZGVkIHRv IGJlCkBAIC00NDI3LDkyICs0NDI2LDYgQEAgbWF0Y2hfaW5kZXhfdG9fb3BlcmFuZChOb2RlICpv cGVyYW5kLAogCXJldHVybiBmYWxzZTsKIH0KIAotLyoKLSAqIHN0cmlwX3BodnNfaW5faW5kZXhf b3BlcmFuZAotICoJICBTdHJpcCBQbGFjZUhvbGRlclZhciBub2RlcyBmcm9tIHRoZSBnaXZlbiBv cGVyYW5kIGV4cHJlc3Npb24gdG8KLSAqCSAgZmFjaWxpdGF0ZSBtYXRjaGluZyBhZ2FpbnN0IGFu IGluZGV4J3Mga2V5LgotICoKLSAqIEEgUGxhY2VIb2xkZXJWYXIgYXBwZWFyaW5nIGluIGEgcmVs YXRpb24tc2Nhbi1sZXZlbCBleHByZXNzaW9uIGlzCi0gKiBlZmZlY3RpdmVseSBhIG5vLW9wLiAg TmV2ZXJ0aGVsZXNzLCB0byBwbGF5IGl0IHNhZmUsIHdlIHN0cmlwIG9ubHkKLSAqIFBsYWNlSG9s ZGVyVmFycyB0aGF0IGFyZSBub3QgbWFya2VkIG51bGxhYmxlLgotICoKLSAqIFRoZSByZW1vdmFs IGlzIHBlcmZvcm1lZCByZWN1cnNpdmVseSBiZWNhdXNlIFBsYWNlSG9sZGVyVmFycyBjYW4gYmUg bmVzdGVkCi0gKiBvciBpbnRlcmxlYXZlZCB3aXRoIG90aGVyIG5vZGUgdHlwZXMuICBXZSBtdXN0 IHBlZWwgYmFjayBhbGwgbGF5ZXJzIHRvCi0gKiBleHBvc2UgdGhlIGJhc2Ugb3BlcmFuZC4KLSAq Ci0gKiBBcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgd2UgZmlyc3QgdXNlIGEgbGlnaHR3 ZWlnaHQgd2Fsa2VyIHRvIGNoZWNrCi0gKiBmb3IgdGhlIHByZXNlbmNlIG9mIHN0cmlwcGFibGUg UGxhY2VIb2xkZXJWYXJzLiAgVGhlIGV4cGVuc2l2ZSBtdXRhdG9yIGlzCi0gKiBpbnZva2VkIG9u bHkgaWYgYSBjYW5kaWRhdGUgaXMgZm91bmQsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IG1lbW9yeSBh bGxvY2F0aW9uCi0gKiBhbmQgdHJlZSBjb3B5aW5nIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBu byBQbGFjZUhvbGRlclZhcnMgYXJlIHByZXNlbnQuCi0gKi8KLU5vZGUgKgotc3RyaXBfcGh2c19p bl9pbmRleF9vcGVyYW5kKE5vZGUgKm9wZXJhbmQpCi17Ci0JLyogRG9uJ3QgbXV0YXRlL2NvcHkg aWYgbm8gdGFyZ2V0IFBIVnMgZXhpc3QgKi8KLQlpZiAoIWNvbnRhaW5fc3RyaXBwYWJsZV9waHZf d2Fsa2VyKG9wZXJhbmQsIE5VTEwpKQotCQlyZXR1cm4gb3BlcmFuZDsKLQotCXJldHVybiBzdHJp cF9waHZzX2luX2luZGV4X29wZXJhbmRfbXV0YXRvcihvcGVyYW5kLCBOVUxMKTsKLX0KLQotLyoK LSAqIGNvbnRhaW5fc3RyaXBwYWJsZV9waHZfd2Fsa2VyCi0gKgkgIERldGVjdCBpZiB0aGVyZSBh cmUgYW55IFBsYWNlSG9sZGVyVmFycyBpbiB0aGUgdHJlZSB0aGF0IGFyZSBjYW5kaWRhdGVzCi0g KgkgIGZvciBzdHJpcHBpbmcuCi0gKgotICogV2UgaWRlbnRpZnkgYSBQbGFjZUhvbGRlclZhciBh cyBzdHJpcHBhYmxlIG9ubHkgaWYgaXRzIHBobnVsbGluZ3JlbHMgaXMKLSAqIGVtcHR5LgotICov Ci1zdGF0aWMgYm9vbAotY29udGFpbl9zdHJpcHBhYmxlX3Bodl93YWxrZXIoTm9kZSAqbm9kZSwg dm9pZCAqY29udGV4dCkKLXsKLQlpZiAobm9kZSA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0K LQlpZiAoSXNBKG5vZGUsIFBsYWNlSG9sZGVyVmFyKSkKLQl7Ci0JCVBsYWNlSG9sZGVyVmFyICpw aHYgPSAoUGxhY2VIb2xkZXJWYXIgKikgbm9kZTsKLQotCQlpZiAoYm1zX2lzX2VtcHR5KHBodi0+ cGhudWxsaW5ncmVscykpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZXhwcmVzc2lv bl90cmVlX3dhbGtlcihub2RlLCBjb250YWluX3N0cmlwcGFibGVfcGh2X3dhbGtlciwKLQkJCQkJ CQkJICBjb250ZXh0KTsKLX0KLQotLyoKLSAqIHN0cmlwX3BodnNfaW5faW5kZXhfb3BlcmFuZF9t dXRhdG9yCi0gKgkgIFJlY3Vyc2l2ZWx5IHJlbW92ZSBQbGFjZUhvbGRlclZhcnMgaW4gdGhlIHRy ZWUgdGhhdCBtYXRjaCB0aGUgY3JpdGVyaWEuCi0gKgotICogV2Ugc3RyaXAgYSBQbGFjZUhvbGRl clZhciBvbmx5IGlmIGl0cyBwaG51bGxpbmdyZWxzIGlzIGVtcHR5LCByZXBsYWNpbmcgaXQKLSAq IHdpdGggaXRzIGNvbnRhaW5lZCBleHByZXNzaW9uLgotICovCi1zdGF0aWMgTm9kZSAqCi1zdHJp cF9waHZzX2luX2luZGV4X29wZXJhbmRfbXV0YXRvcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0 KQotewotCWlmIChub2RlID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKElzQShub2Rl LCBQbGFjZUhvbGRlclZhcikpCi0JewotCQlQbGFjZUhvbGRlclZhciAqcGh2ID0gKFBsYWNlSG9s ZGVyVmFyICopIG5vZGU7Ci0KLQkJLyogSWYgbWF0Y2hlcyB0aGUgY3JpdGVyaWEsIHN0cmlwIGl0 ICovCi0JCWlmIChibXNfaXNfZW1wdHkocGh2LT5waG51bGxpbmdyZWxzKSkKLQkJewotCQkJLyog UmVjdXJzZSBvbiBpdHMgY29udGFpbmVkIGV4cHJlc3Npb24gKi8KLQkJCXJldHVybiBzdHJpcF9w aHZzX2luX2luZGV4X29wZXJhbmRfbXV0YXRvcigoTm9kZSAqKSBwaHYtPnBoZXhwciwKLQkJCQkJ CQkJCQkJCQkgICBjb250ZXh0KTsKLQkJfQotCi0JCS8qIE90aGVyd2lzZSwga2VlcCB0aGlzIFBI ViBidXQgY2hlY2sgaXRzIGNvbnRhaW5lZCBleHByZXNzaW9uICovCi0JfQotCi0JcmV0dXJuIGV4 cHJlc3Npb25fdHJlZV9tdXRhdG9yKG5vZGUsIHN0cmlwX3BodnNfaW5faW5kZXhfb3BlcmFuZF9t dXRhdG9yLAotCQkJCQkJCQkgICBjb250ZXh0KTsKLX0KLQogLyoKICAqIGlzX3BzZXVkb19jb25z dGFudF9mb3JfaW5kZXgoKQogICoJICBUZXN0IHdoZXRoZXIgdGhlIGdpdmVuIGV4cHJlc3Npb24g Y2FuIGJlIHVzZWQgYXMgYW4gaW5kZXhzY2FuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVh dGVwbGFuLmMKaW5kZXggYzdiYzQxYzMwZDcuLmRlNmExODNkYTc5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC01MTE3LDcgKzUxMTcsNyBAQCBmaXhfaW5kZXhx dWFsX29wZXJhbmQoTm9kZSAqbm9kZSwgSW5kZXhPcHRJbmZvICppbmRleCwgaW50IGluZGV4Y29s KQogCS8qCiAJICogUmVtb3ZlIGFueSBQbGFjZUhvbGRlclZhciB3cmFwcGluZyBvZiB0aGUgaW5k ZXhrZXkKIAkgKi8KLQlub2RlID0gc3RyaXBfcGh2c19pbl9pbmRleF9vcGVyYW5kKG5vZGUpOwor CW5vZGUgPSBzdHJpcF9ub29wX3BodnMobm9kZSk7CiAKIAkvKgogCSAqIFJlbW92ZSBhbnkgYmlu YXJ5LWNvbXBhdGlibGUgcmVsYWJlbGluZyBvZiB0aGUgaW5kZXhrZXkKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYWNlaG9sZGVyLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFjZWhvbGRlci5jCmluZGV4IGUxNzA2MzYzYzg4Li5mMDVhYzdlMDVjMiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhY2Vob2xkZXIuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFjZWhvbGRlci5jCkBAIC0zNSw2ICszNSw4 IEBAIHN0YXRpYyB2b2lkIGZpbmRfcGxhY2Vob2xkZXJzX3JlY3Vyc2UoUGxhbm5lckluZm8gKnJv b3QsIE5vZGUgKmp0bm9kZSk7CiBzdGF0aWMgdm9pZCBmaW5kX3BsYWNlaG9sZGVyc19pbl9leHBy KFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpleHByKTsKIHN0YXRpYyBib29sIGNvbnRhaW5fcGxh Y2Vob2xkZXJfcmVmZXJlbmNlc193YWxrZXIoTm9kZSAqbm9kZSwKIAkJCQkJCQkJCQkJCSAgY29u dGFpbl9wbGFjZWhvbGRlcl9yZWZlcmVuY2VzX2NvbnRleHQgKmNvbnRleHQpOworc3RhdGljIGJv b2wgY29udGFpbl9ub29wX3Bodl93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCk7Citz dGF0aWMgTm9kZSAqc3RyaXBfbm9vcF9waHZzX211dGF0b3IoTm9kZSAqbm9kZSwgdm9pZCAqY29u dGV4dCk7CiAKIAogLyoKQEAgLTU4NSwzICs1ODcsOTIgQEAgZ2V0X3BsYWNlaG9sZGVyX251bGxp bmdfcmVsaWRzKFBsYW5uZXJJbmZvICpyb290LCBQbGFjZUhvbGRlckluZm8gKnBoaW5mbykKIAly ZXN1bHQgPSBibXNfZGVsX21lbWJlcnMocmVzdWx0LCBwaGluZm8tPnBoX2V2YWxfYXQpOwogCXJl dHVybiByZXN1bHQ7CiB9CisKKy8qCisgKiBzdHJpcF9ub29wX3BodnMKKyAqCSAgU3RyaXAgUGxh Y2VIb2xkZXJWYXIgbm9kZXMgZnJvbSB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiB0cmVlLgorICoKKyAq IEEgUGxhY2VIb2xkZXJWYXIgdGhhdCBpcyBub3QgbWFya2VkIGFzIG51bGxhYmxlIChpLmUuLCBp dHMgcGhudWxsaW5ncmVscworICogaXMgZW1wdHkpIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3Agd2hl biBpdCBhcHBlYXJzIGluIGEgcmVsYXRpb24tc2Nhbi1sZXZlbAorICogZXhwcmVzc2lvbi4gIFRo aXMgZnVuY3Rpb24gc3RyaXBzIHN1Y2ggUGxhY2VIb2xkZXJWYXJzLCB3aGljaCBpcyB1c2VmdWwK KyAqIGZvciBtYXRjaGluZyBleHByZXNzaW9ucyB0byBpbmRleCBrZXlzIG9yIHBhcnRpdGlvbiBr ZXlzIGluIGNhc2VzIHdoZXJlCisgKiB0aGUgZXhwcmVzc2lvbiBoYXMgYmVlbiB3cmFwcGVkIGlu IFBsYWNlSG9sZGVyVmFycyBkdXJpbmcgc3VicXVlcnkgcHVsbHVwLgorICoKKyAqIElNUE9SVEFO VDogdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGEgc2Nhbi1s ZXZlbAorICogZXhwcmVzc2lvbiwgc28gdGhhdCBub24tbnVsbGFibGUgUGxhY2VIb2xkZXJWYXJz IGluIGl0IGFyZSBpbmRlZWQgbm8tb3BzLgorICoKKyAqIFRoZSByZW1vdmFsIGlzIHBlcmZvcm1l ZCByZWN1cnNpdmVseSBiZWNhdXNlIFBsYWNlSG9sZGVyVmFycyBjYW4gYmUgbmVzdGVkCisgKiBv ciBpbnRlcmxlYXZlZCB3aXRoIG90aGVyIG5vZGUgdHlwZXMuICBXZSBtdXN0IHBlZWwgYmFjayBh bGwgbGF5ZXJzIHRvCisgKiBleHBvc2UgdGhlIGJhc2UgZXhwcmVzc2lvbi4KKyAqCisgKiBBcyBh IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgd2UgZmlyc3QgdXNlIGEgbGlnaHR3ZWlnaHQgd2Fs a2VyIHRvIGNoZWNrCisgKiBmb3IgdGhlIHByZXNlbmNlIG9mIHN0cmlwcGFibGUgUGxhY2VIb2xk ZXJWYXJzLiAgVGhlIGV4cGVuc2l2ZSBtdXRhdG9yIGlzCisgKiBpbnZva2VkIG9ubHkgaWYgYSBj YW5kaWRhdGUgaXMgZm91bmQsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IG1lbW9yeSBhbGxvY2F0aW9u CisgKiBhbmQgdHJlZSBjb3B5aW5nIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBubyBQbGFjZUhv bGRlclZhcnMgYXJlIHByZXNlbnQuCisgKi8KK05vZGUgKgorc3RyaXBfbm9vcF9waHZzKE5vZGUg Km5vZGUpCit7CisJLyogRG9uJ3QgbXV0YXRlL2NvcHkgaWYgbm8gdGFyZ2V0IFBIVnMgZXhpc3Qg Ki8KKwlpZiAoIWNvbnRhaW5fbm9vcF9waHZfd2Fsa2VyKG5vZGUsIE5VTEwpKQorCQlyZXR1cm4g bm9kZTsKKworCXJldHVybiBzdHJpcF9ub29wX3BodnNfbXV0YXRvcihub2RlLCBOVUxMKTsKK30K KworLyoKKyAqIGNvbnRhaW5fbm9vcF9waHZfd2Fsa2VyCisgKgkgIERldGVjdCBpZiB0aGVyZSBh cmUgYW55IFBsYWNlSG9sZGVyVmFycyBpbiB0aGUgdHJlZSB0aGF0IGFyZSBjYW5kaWRhdGVzCisg KgkgIGZvciBzdHJpcHBpbmcuCisgKgorICogV2UgaWRlbnRpZnkgYSBQbGFjZUhvbGRlclZhciBh cyBzdHJpcHBhYmxlIG9ubHkgaWYgaXRzIHBobnVsbGluZ3JlbHMgaXMKKyAqIGVtcHR5LgorICov CitzdGF0aWMgYm9vbAorY29udGFpbl9ub29wX3Bodl93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAq Y29udGV4dCkKK3sKKwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAo SXNBKG5vZGUsIFBsYWNlSG9sZGVyVmFyKSkKKwl7CisJCVBsYWNlSG9sZGVyVmFyICpwaHYgPSAo UGxhY2VIb2xkZXJWYXIgKikgbm9kZTsKKworCQlpZiAoYm1zX2lzX2VtcHR5KHBodi0+cGhudWxs aW5ncmVscykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZXhwcmVzc2lvbl90cmVl X3dhbGtlcihub2RlLCBjb250YWluX25vb3BfcGh2X3dhbGtlciwKKwkJCQkJCQkJICBjb250ZXh0 KTsKK30KKworLyoKKyAqIHN0cmlwX25vb3BfcGh2c19tdXRhdG9yCisgKgkgIFJlY3Vyc2l2ZWx5 IHJlbW92ZSBQbGFjZUhvbGRlclZhcnMgdGhhdCBhcmUgbm90IG1hcmtlZCBudWxsYWJsZS4KKyAq CisgKiBXZSBzdHJpcCBhIFBsYWNlSG9sZGVyVmFyIG9ubHkgaWYgaXRzIHBobnVsbGluZ3JlbHMg aXMgZW1wdHksIHJlcGxhY2luZyBpdAorICogd2l0aCBpdHMgY29udGFpbmVkIGV4cHJlc3Npb24u CisgKi8KK3N0YXRpYyBOb2RlICoKK3N0cmlwX25vb3BfcGh2c19tdXRhdG9yKE5vZGUgKm5vZGUs IHZvaWQgKmNvbnRleHQpCit7CisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisK KwlpZiAoSXNBKG5vZGUsIFBsYWNlSG9sZGVyVmFyKSkKKwl7CisJCVBsYWNlSG9sZGVyVmFyICpw aHYgPSAoUGxhY2VIb2xkZXJWYXIgKikgbm9kZTsKKworCQlpZiAoYm1zX2lzX2VtcHR5KHBodi0+ cGhudWxsaW5ncmVscykpCisJCXsKKwkJCS8qIFJlY3Vyc2Ugb24gaXRzIGNvbnRhaW5lZCBleHBy ZXNzaW9uICovCisJCQlyZXR1cm4gc3RyaXBfbm9vcF9waHZzX211dGF0b3IoKE5vZGUgKikgcGh2 LT5waGV4cHIsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisJCX0KKworCQkvKiBPdGhlcndpc2Us IGtlZXAgdGhpcyBQSFYgYnV0IGNoZWNrIGl0cyBjb250YWluZWQgZXhwcmVzc2lvbiAqLworCX0K KworCXJldHVybiBleHByZXNzaW9uX3RyZWVfbXV0YXRvcihub2RlLCBzdHJpcF9ub29wX3BodnNf bXV0YXRvciwKKwkJCQkJCQkJICAgY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFy dHBydW5lLmMKaW5kZXggMjkwMWNkMzQ4YTkuLmU3YzMxOGJiY2FjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFydGl0 aW9uaW5nL3BhcnRwcnVuZS5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAib3B0aW1pemVy L2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYWNlaG9sZGVyLmgiCiAj aW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0 Ym91bmRzLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oIgpAQCAtMTgxMyw2 ICsxODE0LDE1IEBAIGdlbl9wcnVuZV9zdGVwc19mcm9tX29wZXhwcyhHZW5lcmF0ZVBydW5pbmdT dGVwc0NvbnRleHQgKmNvbnRleHQsCiAgKiAgIGFuZCBjb3VsZG4ndCBwb3NzaWJseSBtYXRjaCBh bnkgb3RoZXIgb25lIGVpdGhlciwgZHVlIHRvIGl0cyBmb3JtIG9yCiAgKiAgIHByb3BlcnRpZXMg KHN1Y2ggYXMgY29udGFpbmluZyBhIHZvbGF0aWxlIGZ1bmN0aW9uKS4KICAqICAgT3V0cHV0IGFy Z3VtZW50czogbm9uZSBzZXQuCisgKgorICogTm90ZSB0aGF0IHdoZW4gcHVsbGluZyB1cCBhIHN1 YnF1ZXJ5LCB0aGUgY2xhdXNlIG9wZXJhbmRzIG1heSBnZXQgd3JhcHBlZAorICogaW4gUGxhY2VI b2xkZXJWYXJzIHRvIGVuZm9yY2Ugc2VwYXJhdGUgaWRlbnRpdHkgb3IgYXMgYSByZXN1bHQgb2Yg b3V0ZXIKKyAqIGpvaW5zLiAgV2UgbXVzdCBzdHJpcCBzdWNoIG5vLW9wIFBsYWNlSG9sZGVyVmFy cyBiZWZvcmUgY29tcGFyaW5nIG9wZXJhbmRzCisgKiB0byB0aGUgcGFydGl0aW9uIGtleSwgb3Ro ZXJ3aXNlIHRoZSBlcXVhbCgpIGNoZWNrcyB3aWxsIGZhaWwgdG8gcmVjb2duaXplCisgKiB2YWxp ZCBtYXRjaGVzLiAgVGhpcyBpcyBzYWZlIGJlY2F1c2UgdGhlIGNsYXVzZXMgaGVyZSBhcmUgYWx3 YXlzCisgKiByZWxhdGlvbi1zY2FuLWxldmVsIGV4cHJlc3Npb25zLCB3aGVyZSBhIFBsYWNlSG9s ZGVyVmFyIHdpdGggZW1wdHkKKyAqIHBobnVsbGluZ3JlbHMgaXMgZWZmZWN0aXZlbHkgYSBuby1v cC4gIFN0cmlwcGluZyBtYXkgYWxzbyBicmluZyBzZXBhcmF0ZQorICogUmVsYWJlbFR5cGUgbm9k ZXMgaW50byBhZGphY2VuY3ksIHNvIHdlIG11c3QgbG9vcCB3aGVuIHBlZWxpbmcgdGhvc2UuCiAg Ki8KIHN0YXRpYyBQYXJ0Q2xhdXNlTWF0Y2hTdGF0dXMKIG1hdGNoX2NsYXVzZV90b19wYXJ0aXRp b25fa2V5KEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4dCwKQEAgLTE5MjgsMTAg KzE5MzgsMTIgQEAgbWF0Y2hfY2xhdXNlX3RvX3BhcnRpdGlvbl9rZXkoR2VuZXJhdGVQcnVuaW5n U3RlcHNDb250ZXh0ICpjb250ZXh0LAogCQlQYXJ0Q2xhdXNlSW5mbyAqcGFydGNsYXVzZTsKIAog CQlsZWZ0b3AgPSAoRXhwciAqKSBnZXRfbGVmdG9wKGNsYXVzZSk7Ci0JCWlmIChJc0EobGVmdG9w LCBSZWxhYmVsVHlwZSkpCisJCWxlZnRvcCA9IChFeHByICopIHN0cmlwX25vb3BfcGh2cygoTm9k ZSAqKSBsZWZ0b3ApOworCQl3aGlsZSAoSXNBKGxlZnRvcCwgUmVsYWJlbFR5cGUpKQogCQkJbGVm dG9wID0gKChSZWxhYmVsVHlwZSAqKSBsZWZ0b3ApLT5hcmc7CiAJCXJpZ2h0b3AgPSAoRXhwciAq KSBnZXRfcmlnaHRvcChjbGF1c2UpOwotCQlpZiAoSXNBKHJpZ2h0b3AsIFJlbGFiZWxUeXBlKSkK KwkJcmlnaHRvcCA9IChFeHByICopIHN0cmlwX25vb3BfcGh2cygoTm9kZSAqKSByaWdodG9wKTsK KwkJd2hpbGUgKElzQShyaWdodG9wLCBSZWxhYmVsVHlwZSkpCiAJCQlyaWdodG9wID0gKChSZWxh YmVsVHlwZSAqKSByaWdodG9wKS0+YXJnOwogCQlvcG5vID0gb3BjbGF1c2UtPm9wbm87CiAKQEAg LTIxNzksNyArMjE5MSw4IEBAIG1hdGNoX2NsYXVzZV90b19wYXJ0aXRpb25fa2V5KEdlbmVyYXRl UHJ1bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4dCwKIAkJCQkgICAqZWxlbV9jbGF1c2VzOwogCQlM aXN0Q2VsbCAgICpsYzE7CiAKLQkJaWYgKElzQShsZWZ0b3AsIFJlbGFiZWxUeXBlKSkKKwkJbGVm dG9wID0gKEV4cHIgKikgc3RyaXBfbm9vcF9waHZzKChOb2RlICopIGxlZnRvcCk7CisJCXdoaWxl IChJc0EobGVmdG9wLCBSZWxhYmVsVHlwZSkpCiAJCQlsZWZ0b3AgPSAoKFJlbGFiZWxUeXBlICop IGxlZnRvcCktPmFyZzsKIAogCQkvKiBjaGVjayBpZiB0aGUgTEhTIG1hdGNoZXMgdGhpcyBwYXJ0 aXRpb24ga2V5ICovCkBAIC0yNDA1LDcgKzI0MTgsOCBAQCBtYXRjaF9jbGF1c2VfdG9fcGFydGl0 aW9uX2tleShHZW5lcmF0ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNvbnRleHQsCiAJCU51bGxUZXN0 ICAgKm51bGx0ZXN0ID0gKE51bGxUZXN0ICopIGNsYXVzZTsKIAkJRXhwcgkgICAqYXJnID0gbnVs bHRlc3QtPmFyZzsKIAotCQlpZiAoSXNBKGFyZywgUmVsYWJlbFR5cGUpKQorCQlhcmcgPSAoRXhw ciAqKSBzdHJpcF9ub29wX3BodnMoKE5vZGUgKikgYXJnKTsKKwkJd2hpbGUgKElzQShhcmcsIFJl bGFiZWxUeXBlKSkKIAkJCWFyZyA9ICgoUmVsYWJlbFR5cGUgKikgYXJnKS0+YXJnOwogCiAJCS8q IERvZXMgYXJnIG1hdGNoIHdpdGggdGhpcyBwYXJ0aXRpb24ga2V5IGNvbHVtbj8gKi8KQEAgLTM3 MTcsNyArMzczMSw4IEBAIG1hdGNoX2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShPaWQgcGFydG9w ZmFtaWx5LCBFeHByICpjbGF1c2UsIGNvbnN0IEV4cHIgKnBhcnRrCiAJCUJvb2xlYW5UZXN0ICpi dGVzdCA9IChCb29sZWFuVGVzdCAqKSBjbGF1c2U7CiAKIAkJbGVmdG9wID0gYnRlc3QtPmFyZzsK LQkJaWYgKElzQShsZWZ0b3AsIFJlbGFiZWxUeXBlKSkKKwkJbGVmdG9wID0gKEV4cHIgKikgc3Ry aXBfbm9vcF9waHZzKChOb2RlICopIGxlZnRvcCk7CisJCXdoaWxlIChJc0EobGVmdG9wLCBSZWxh YmVsVHlwZSkpCiAJCQlsZWZ0b3AgPSAoKFJlbGFiZWxUeXBlICopIGxlZnRvcCktPmFyZzsKIAog CQlpZiAoZXF1YWwobGVmdG9wLCBwYXJ0a2V5KSkKQEAgLTM3NTQsNyArMzc2OSw4IEBAIG1hdGNo X2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShPaWQgcGFydG9wZmFtaWx5LCBFeHByICpjbGF1c2Us IGNvbnN0IEV4cHIgKnBhcnRrCiAKIAkJbGVmdG9wID0gaXNfbm90X2NsYXVzZSA/IGdldF9ub3Rj bGF1c2VhcmcoY2xhdXNlKSA6IGNsYXVzZTsKIAotCQlpZiAoSXNBKGxlZnRvcCwgUmVsYWJlbFR5 cGUpKQorCQlsZWZ0b3AgPSAoRXhwciAqKSBzdHJpcF9ub29wX3BodnMoKE5vZGUgKikgbGVmdG9w KTsKKwkJd2hpbGUgKElzQShsZWZ0b3AsIFJlbGFiZWxUeXBlKSkKIAkJCWxlZnRvcCA9ICgoUmVs YWJlbFR5cGUgKikgbGVmdG9wKS0+YXJnOwogCiAJCS8qIENvbXBhcmUgdG8gdGhlIHBhcnRpdGlv biBrZXksIGFuZCBtYWtlIHVwIGEgY2xhdXNlIC4uLiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRl eCA4NzUxYWQ3MzgxYy4uMTdmMjA5OWVjM2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC04OCw3 ICs4OCw2IEBAIGV4dGVybiBib29sIGluZGV4Y29sX2lzX2Jvb2xfY29uc3RhbnRfZm9yX3F1ZXJ5 KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJaW50IGluZGV4Y29sKTsKIGV4dGVybiBi b29sIG1hdGNoX2luZGV4X3RvX29wZXJhbmQoTm9kZSAqb3BlcmFuZCwgaW50IGluZGV4Y29sLAog CQkJCQkJCQkgICBJbmRleE9wdEluZm8gKmluZGV4KTsKLWV4dGVybiBOb2RlICpzdHJpcF9waHZz X2luX2luZGV4X29wZXJhbmQoTm9kZSAqb3BlcmFuZCk7CiBleHRlcm4gdm9pZCBjaGVja19pbmRl eF9wcmVkaWNhdGVzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOwogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYWNlaG9sZGVyLmggYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGxhY2Vob2xkZXIuaAppbmRleCAyOGU0ZGE2NDVmYi4uNjA3OTgyODEw OTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFjZWhvbGRlci5oCisrKyBi L3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFjZWhvbGRlci5oCkBAIC0zMiw1ICszMiw2IEBAIGV4 dGVybiBib29sIGNvbnRhaW5fcGxhY2Vob2xkZXJfcmVmZXJlbmNlc190byhQbGFubmVySW5mbyAq cm9vdCwgTm9kZSAqY2xhdXNlLAogCQkJCQkJCQkJCQkgIGludCByZWxpZCk7CiBleHRlcm4gUmVs aWRzIGdldF9wbGFjZWhvbGRlcl9udWxsaW5nX3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCQkJCQkJIFBsYWNlSG9sZGVySW5mbyAqcGhpbmZvKTsKK2V4dGVybiBOb2RlICpzdHJpcF9u b29wX3BodnMoTm9kZSAqbm9kZSk7CiAKICNlbmRpZgkJCQkJCQkvKiBQTEFDRUhPTERFUl9IICov CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKaW5kZXgg ZGVhY2RkNzU4MDcuLjg0OTA0OWY5YzUxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wYXJ0aXRpb25fcHJ1bmUub3V0CkBAIC00ODI0LDMgKzQ4MjQsMTM1IEBAIHNlbGVjdCBtaW4o YSkgb3ZlciAocGFydGl0aW9uIGJ5IGEgb3JkZXIgYnkgYSkgZnJvbSBwYXJ0X2FiYyB3aGVyZSBh ID49IHN0YWJsZV9vCiAKIGRyb3AgdmlldyBwYXJ0X2FiY192aWV3OwogZHJvcCB0YWJsZSBwYXJ0 X2FiYzsKKy0tCistLSBDaGVjayB0aGF0IG9wZXJhbmRzIHdyYXBwZWQgaW4gUGxhY2VIb2xkZXJW YXJzIGFyZSBtYXRjaGVkIHRvIHBhcnRpdGlvbgorLS0ga2V5cywgYWxsb3dpbmcgcGFydGl0aW9u IHBydW5pbmcgdG8gb2NjdXIuICBQbGFjZUhvbGRlclZhcnMgY2FuIGJlCistLSBpbnRyb2R1Y2Vk IHdoZW4gYSBzdWJxdWVyeSdzIG91dHB1dCBpcyB1c2VkIHdpdGggZ3JvdXBpbmcgc2V0cy4KKy0t CitjcmVhdGUgdGFibGUgcGh2X3BhcnQgKGEgaW50LCBiIHRleHQpIHBhcnRpdGlvbiBieSBsaXN0 IChhKTsKK2NyZWF0ZSB0YWJsZSBwaHZfcGFydF8xIHBhcnRpdGlvbiBvZiBwaHZfcGFydCBmb3Ig dmFsdWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBwaHZfcGFydF8yIHBhcnRpdGlvbiBvZiBwaHZf cGFydCBmb3IgdmFsdWVzIGluICgyKTsKK2NyZWF0ZSB0YWJsZSBwaHZfcGFydF9udWxsIHBhcnRp dGlvbiBvZiBwaHZfcGFydCBmb3IgdmFsdWVzIGluIChudWxsKTsKK2luc2VydCBpbnRvIHBodl9w YXJ0IHZhbHVlcyAoMSwgJ29uZScpLCAoMiwgJ3R3bycpLCAobnVsbCwgJ251bGwnKTsKKy0tIE9w RXhwcjogUEhWLXdyYXBwZWQgb3BlcmFuZCBtYXRjaGVkIHZpYSBlcXVhbCgpCitleHBsYWluIChj b3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBodl9wYXJ0KSB0Cisg IHdoZXJlIGEgPSAxCisgIGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIpOworICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBNaXhlZEFnZ3JlZ2F0ZQorICAgSGFzaCBLZXk6IHBodl9wYXJ0LmIK KyAgIEdyb3VwIEtleTogcGh2X3BhcnQuYQorICAgLT4gIFNlcSBTY2FuIG9uIHBodl9wYXJ0XzEg cGh2X3BhcnQKKyAgICAgICAgIEZpbHRlcjogKGEgPSAxKQorKDUgcm93cykKKworc2VsZWN0ICog ZnJvbSAoc2VsZWN0IGEsIGIgZnJvbSBwaHZfcGFydCkgdAorICB3aGVyZSBhID0gMQorICBncm91 cCBieSBncm91cGluZyBzZXRzIChhLCBiKTsKKyBhIHwgIGIgIAorLS0tKy0tLS0tCisgMSB8IAor ICAgfCBvbmUKKygyIHJvd3MpCisKKy0tIE9wRXhwciB3aXRoIFJlbGFiZWxUeXBlOiBQSFYgd3Jh cHBlZCBhcm91bmQgYSBjYXN0ZWQgY29sdW1uCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIChzZWxlY3QgYTo6b2lkIGFzIHgsIGIgZnJvbSBwaHZfcGFydCkgdAorICB3aGVyZSB4 OjppbnQgPSAxCisgIGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKHgsIGIpOworICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIEhhc2ggS2V5OiAocGh2X3Bh cnQuYSk6Om9pZAorICAgSGFzaCBLZXk6IHBodl9wYXJ0LmIKKyAgIC0+ICBTZXEgU2NhbiBvbiBw aHZfcGFydF8xIHBodl9wYXJ0CisgICAgICAgICBGaWx0ZXI6ICgoKGEpOjpvaWQpOjppbnRlZ2Vy ID0gMSkKKyg1IHJvd3MpCisKK3NlbGVjdCAqIGZyb20gKHNlbGVjdCBhOjpvaWQgYXMgeCwgYiBm cm9tIHBodl9wYXJ0KSB0CisgIHdoZXJlIHg6OmludCA9IDEKKyAgZ3JvdXAgYnkgZ3JvdXBpbmcg c2V0cyAoeCwgYik7CisgeCB8ICBiICAKKy0tLSstLS0tLQorIDEgfCAKKyAgIHwgb25lCisoMiBy b3dzKQorCistLSBTY2FsYXJBcnJheU9wRXhwcjogSU4gY2xhdXNlIHdpdGggUEhWLXdyYXBwZWQg b3BlcmFuZAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSAoc2VsZWN0IGEsIGIg ZnJvbSBwaHZfcGFydCkgdAorICB3aGVyZSBhIGluICgxLCBudWxsKQorICBncm91cCBieSBncm91 cGluZyBzZXRzIChhLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgSGFzaCBLZXk6IHBodl9wYXJ0LmEKKyAgIEhh c2ggS2V5OiBwaHZfcGFydC5iCisgICAtPiAgU2VxIFNjYW4gb24gcGh2X3BhcnRfMSBwaHZfcGFy dAorICAgICAgICAgRmlsdGVyOiAoYSA9IEFOWSAoJ3sxLE5VTEx9Jzo6aW50ZWdlcltdKSkKKyg1 IHJvd3MpCisKK3NlbGVjdCAqIGZyb20gKHNlbGVjdCBhLCBiIGZyb20gcGh2X3BhcnQpIHQKKyAg d2hlcmUgYSBpbiAoMSwgbnVsbCkKKyAgZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoYSwgYik7Cisg YSB8ICBiICAKKy0tLSstLS0tLQorIDEgfCAKKyAgIHwgb25lCisoMiByb3dzKQorCistLSBOdWxs VGVzdDogSVMgTlVMTCB3aXRoIFBIVi13cmFwcGVkIG9wZXJhbmQKK2V4cGxhaW4gKGNvc3RzIG9m ZikKK3NlbGVjdCAqIGZyb20gKHNlbGVjdCBhLCBiIGZyb20gcGh2X3BhcnQpIHQKKyAgd2hlcmUg YSBpcyBudWxsCisgIGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIpOworICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBIYXNoIEtleTogcGh2X3BhcnQu YQorICAgSGFzaCBLZXk6IHBodl9wYXJ0LmIKKyAgIC0+ICBTZXEgU2NhbiBvbiBwaHZfcGFydF9u dWxsIHBodl9wYXJ0CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5VTEwpCisoNSByb3dzKQorCitz ZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBodl9wYXJ0KSB0CisgIHdoZXJlIGEgaXMg bnVsbAorICBncm91cCBieSBncm91cGluZyBzZXRzIChhLCBiKTsKKyBhIHwgIGIgICAKKy0tLSst LS0tLS0KKyAgIHwgCisgICB8IG51bGwKKygyIHJvd3MpCisKK2Ryb3AgdGFibGUgcGh2X3BhcnQ7 CistLSBCb29sZWFuVGVzdDogSVMgVFJVRSB3aXRoIFBIVi13cmFwcGVkIGJvb2xlYW4gcGFydGl0 aW9uIGtleQorY3JlYXRlIHRhYmxlIHBodl9ib29scGFydCAoYSBib29sLCBiIHRleHQpIHBhcnRp dGlvbiBieSBsaXN0IChhKTsKK2NyZWF0ZSB0YWJsZSBwaHZfYm9vbHBhcnRfdCBwYXJ0aXRpb24g b2YgcGh2X2Jvb2xwYXJ0IGZvciB2YWx1ZXMgaW4gKHRydWUpOworY3JlYXRlIHRhYmxlIHBodl9i b29scGFydF9mIHBhcnRpdGlvbiBvZiBwaHZfYm9vbHBhcnQgZm9yIHZhbHVlcyBpbiAoZmFsc2Up OworY3JlYXRlIHRhYmxlIHBodl9ib29scGFydF9udWxsIHBhcnRpdGlvbiBvZiBwaHZfYm9vbHBh cnQgZGVmYXVsdDsKK2luc2VydCBpbnRvIHBodl9ib29scGFydCB2YWx1ZXMgKHRydWUsICd5ZXMn KSwgKGZhbHNlLCAnbm8nKSwgKG51bGwsICd1bmtub3duJyk7CitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBodl9ib29scGFydCkgdAorICB3aGVy ZSBhIGlzIHRydWUKKyAgZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoYSwgYik7CisgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBIYXNoIEtl eTogcGh2X2Jvb2xwYXJ0LmEKKyAgIEhhc2ggS2V5OiBwaHZfYm9vbHBhcnQuYgorICAgLT4gIFNl cSBTY2FuIG9uIHBodl9ib29scGFydF90IHBodl9ib29scGFydAorICAgICAgICAgRmlsdGVyOiAo YSBJUyBUUlVFKQorKDUgcm93cykKKworc2VsZWN0ICogZnJvbSAoc2VsZWN0IGEsIGIgZnJvbSBw aHZfYm9vbHBhcnQpIHQKKyAgd2hlcmUgYSBpcyB0cnVlCisgIGdyb3VwIGJ5IGdyb3VwaW5nIHNl dHMgKGEsIGIpOworIGEgfCAgYiAgCistLS0rLS0tLS0KKyB0IHwgCisgICB8IHllcworKDIgcm93 cykKKworZHJvcCB0YWJsZSBwaHZfYm9vbHBhcnQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0 aW9uX3BydW5lLnNxbAppbmRleCBkOTNjMGMwM2JhYi4uMzU5YTkyMDgwNTYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbApAQCAtMTQ0NywzICsxNDQ3LDc0IEBAIHNl bGVjdCBtaW4oYSkgb3ZlciAocGFydGl0aW9uIGJ5IGEgb3JkZXIgYnkgYSkgZnJvbSBwYXJ0X2Fi YyB3aGVyZSBhID49IHN0YWJsZV9vCiAKIGRyb3AgdmlldyBwYXJ0X2FiY192aWV3OwogZHJvcCB0 YWJsZSBwYXJ0X2FiYzsKKworLS0KKy0tIENoZWNrIHRoYXQgb3BlcmFuZHMgd3JhcHBlZCBpbiBQ bGFjZUhvbGRlclZhcnMgYXJlIG1hdGNoZWQgdG8gcGFydGl0aW9uCistLSBrZXlzLCBhbGxvd2lu ZyBwYXJ0aXRpb24gcHJ1bmluZyB0byBvY2N1ci4gIFBsYWNlSG9sZGVyVmFycyBjYW4gYmUKKy0t IGludHJvZHVjZWQgd2hlbiBhIHN1YnF1ZXJ5J3Mgb3V0cHV0IGlzIHVzZWQgd2l0aCBncm91cGlu ZyBzZXRzLgorLS0KK2NyZWF0ZSB0YWJsZSBwaHZfcGFydCAoYSBpbnQsIGIgdGV4dCkgcGFydGl0 aW9uIGJ5IGxpc3QgKGEpOworY3JlYXRlIHRhYmxlIHBodl9wYXJ0XzEgcGFydGl0aW9uIG9mIHBo dl9wYXJ0IGZvciB2YWx1ZXMgaW4gKDEpOworY3JlYXRlIHRhYmxlIHBodl9wYXJ0XzIgcGFydGl0 aW9uIG9mIHBodl9wYXJ0IGZvciB2YWx1ZXMgaW4gKDIpOworY3JlYXRlIHRhYmxlIHBodl9wYXJ0 X251bGwgcGFydGl0aW9uIG9mIHBodl9wYXJ0IGZvciB2YWx1ZXMgaW4gKG51bGwpOworaW5zZXJ0 IGludG8gcGh2X3BhcnQgdmFsdWVzICgxLCAnb25lJyksICgyLCAndHdvJyksIChudWxsLCAnbnVs bCcpOworCistLSBPcEV4cHI6IFBIVi13cmFwcGVkIG9wZXJhbmQgbWF0Y2hlZCB2aWEgZXF1YWwo KQorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSAoc2VsZWN0IGEsIGIgZnJvbSBw aHZfcGFydCkgdAorICB3aGVyZSBhID0gMQorICBncm91cCBieSBncm91cGluZyBzZXRzIChhLCBi KTsKKworc2VsZWN0ICogZnJvbSAoc2VsZWN0IGEsIGIgZnJvbSBwaHZfcGFydCkgdAorICB3aGVy ZSBhID0gMQorICBncm91cCBieSBncm91cGluZyBzZXRzIChhLCBiKTsKKworLS0gT3BFeHByIHdp dGggUmVsYWJlbFR5cGU6IFBIViB3cmFwcGVkIGFyb3VuZCBhIGNhc3RlZCBjb2x1bW4KK2V4cGxh aW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gKHNlbGVjdCBhOjpvaWQgYXMgeCwgYiBmcm9t IHBodl9wYXJ0KSB0CisgIHdoZXJlIHg6OmludCA9IDEKKyAgZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0 cyAoeCwgYik7CisKK3NlbGVjdCAqIGZyb20gKHNlbGVjdCBhOjpvaWQgYXMgeCwgYiBmcm9tIHBo dl9wYXJ0KSB0CisgIHdoZXJlIHg6OmludCA9IDEKKyAgZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAo eCwgYik7CisKKy0tIFNjYWxhckFycmF5T3BFeHByOiBJTiBjbGF1c2Ugd2l0aCBQSFYtd3JhcHBl ZCBvcGVyYW5kCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwg YiBmcm9tIHBodl9wYXJ0KSB0CisgIHdoZXJlIGEgaW4gKDEsIG51bGwpCisgIGdyb3VwIGJ5IGdy b3VwaW5nIHNldHMgKGEsIGIpOworCitzZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBo dl9wYXJ0KSB0CisgIHdoZXJlIGEgaW4gKDEsIG51bGwpCisgIGdyb3VwIGJ5IGdyb3VwaW5nIHNl dHMgKGEsIGIpOworCistLSBOdWxsVGVzdDogSVMgTlVMTCB3aXRoIFBIVi13cmFwcGVkIG9wZXJh bmQKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gKHNlbGVjdCBhLCBiIGZyb20g cGh2X3BhcnQpIHQKKyAgd2hlcmUgYSBpcyBudWxsCisgIGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMg KGEsIGIpOworCitzZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBodl9wYXJ0KSB0Cisg IHdoZXJlIGEgaXMgbnVsbAorICBncm91cCBieSBncm91cGluZyBzZXRzIChhLCBiKTsKKworZHJv cCB0YWJsZSBwaHZfcGFydDsKKworLS0gQm9vbGVhblRlc3Q6IElTIFRSVUUgd2l0aCBQSFYtd3Jh cHBlZCBib29sZWFuIHBhcnRpdGlvbiBrZXkKK2NyZWF0ZSB0YWJsZSBwaHZfYm9vbHBhcnQgKGEg Ym9vbCwgYiB0ZXh0KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVhdGUgdGFibGUgcGh2X2Jv b2xwYXJ0X3QgcGFydGl0aW9uIG9mIHBodl9ib29scGFydCBmb3IgdmFsdWVzIGluICh0cnVlKTsK K2NyZWF0ZSB0YWJsZSBwaHZfYm9vbHBhcnRfZiBwYXJ0aXRpb24gb2YgcGh2X2Jvb2xwYXJ0IGZv ciB2YWx1ZXMgaW4gKGZhbHNlKTsKK2NyZWF0ZSB0YWJsZSBwaHZfYm9vbHBhcnRfbnVsbCBwYXJ0 aXRpb24gb2YgcGh2X2Jvb2xwYXJ0IGRlZmF1bHQ7CitpbnNlcnQgaW50byBwaHZfYm9vbHBhcnQg dmFsdWVzICh0cnVlLCAneWVzJyksIChmYWxzZSwgJ25vJyksIChudWxsLCAndW5rbm93bicpOwor CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIChzZWxlY3QgYSwgYiBmcm9tIHBo dl9ib29scGFydCkgdAorICB3aGVyZSBhIGlzIHRydWUKKyAgZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0 cyAoYSwgYik7CisKK3NlbGVjdCAqIGZyb20gKHNlbGVjdCBhLCBiIGZyb20gcGh2X2Jvb2xwYXJ0 KSB0CisgIHdoZXJlIGEgaXMgdHJ1ZQorICBncm91cCBieSBncm91cGluZyBzZXRzIChhLCBiKTsK KworZHJvcCB0YWJsZSBwaHZfYm9vbHBhcnQ7Ci0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --00000000000003a455064e753cc6--