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 1wBNb3-0010Ds-2j for pgsql-bugs@arkaria.postgresql.org; Sat, 11 Apr 2026 01:57:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBNa1-00F9qj-2j for pgsql-bugs@arkaria.postgresql.org; Sat, 11 Apr 2026 01:56:14 +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.96) (envelope-from ) id 1wBNa1-00F9qb-1Q for pgsql-bugs@lists.postgresql.org; Sat, 11 Apr 2026 01:56:14 +0000 Received: from mail-dl1-x122b.google.com ([2607:f8b0:4864:20::122b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBNZz-00000000RwU-2yIm for pgsql-bugs@lists.postgresql.org; Sat, 11 Apr 2026 01:56:13 +0000 Received: by mail-dl1-x122b.google.com with SMTP id a92af1059eb24-12c1161232dso140820c88.1 for ; Fri, 10 Apr 2026 18:56:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775872569; cv=none; d=google.com; s=arc-20240605; b=fqNweCwg6Xb7QD7hXVl6fF7XmOW6fzJyREW9MeoXnbLGBto70J1J5ObmxlsYSpHoG1 IdkVGbMxKZLVF+8ORksiryUkaHb41G7Z+8vQDuxaXtD5z69S61hNHtQt04z07rwT5c+s 0LM85zXQ41BHZT+pTlylGBofHiW8ShyngO/6C+ME/+MjjFZROXdaIEfBVkS0CWjGxV0e /ZONywuSYQHfemcrf6Oaod/rMXlgJa5Nqg7BUxh2DgRTOZkDvMSwhWDP/LJ3Cbue0WCx t9kdYNFfueqYyMTicnsV/gJz0rm3CNFPvTr20oLGp7dTJX8+ckgtLUVh585SGWgN7WBL gOLQ== 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=0+SsfChe2yLCXDpPjZ6BtiKT/h4BSG2EMIo/JSFTtwA=; fh=7YnhAKwlv9Qvqka38T4EXdW7dGY9Tj5W3wJHcyRTuo8=; b=HpqXwBcgAbF2o18soja0hDVFOsc5fUnniqC223xQ7XvB4i29QxxiYdH0P1UVnt8i98 VgOmQtedcVmOB0l4RLdrbaHbChWlcosUS80d+uc00/F8T/mrsuOZCzHbXiL5jpZLF+G/ LUkh8yfLMrRJradL+In5ps48XSTXinLD7uB2CDe3VDz8jEGKIj+oJ//RBeYu5QItVyoW 9HJRjiQZxW93hviPTRnIXsqKr7C+tOK2BzQpL4Qst9jaAJBq3AUp3gE74WLA2l5+Aeqv hci1e2RDSNeVJTBM2nLP7JOP4vyvx0O/yIuko+roj//iDqmkbDrp11qVF/2etBR7rlBe 5YTw==; 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=1775872569; x=1776477369; 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=0+SsfChe2yLCXDpPjZ6BtiKT/h4BSG2EMIo/JSFTtwA=; b=H3WYEXr9AuB/94xMNelEXfc3DwzFW/+bwglz6MpVSW1jd0F7lE6h16YCACEh/VbcwH /Ee1wpMX5vsrGrGYhRqUQYzK5wUERTL92wHnE4Ro9UP1pIiEDYNn0W+UcTSk89Thufso 79wodWXN0dDB1si6AAcp1AjabuFc6I3NHpDN+FuaQdIWjof3FePWEr2WwEF8Wqgh/OuK 4n9vQEWnBGmfMz3ygb6mjj2uZuoSW6yFuSSxG6eViONB6IPlcWwUa/UeIOJp/1CYDbSm kj9Yz/5RUIHotl9GLwQA0yE6IKN37E2oi+D4kqLPsltHPoMm/FjmgppHzXD9a4t9qIm8 HsQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775872569; x=1776477369; 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=0+SsfChe2yLCXDpPjZ6BtiKT/h4BSG2EMIo/JSFTtwA=; b=eozbc5rVqAJn21fHkRb+lDszdAYUD76Eb7xhsdoj8XMnuD0M0wsyqP66jLT630KslT 3jdHAgvWjDTUtTNG6ehdu2IsvwnIfoJd5oKPuN1nzK3h4qSoYVnlaAWonE2TytTIHyCS AyBLVOiPMO92WICuOJOrurp6kJ9JNqiK7Yj3DPobYJugrRqbbjFesre7udWk2eKb+Z1r 9fePwnNPWAiELR3d5Z4Xlpr7h4M+XyYvng7pXFmP4PKqtjYANLiw2qc7GkM3vrqH5edA GcXkGP5AnH+PnmefLDcZ/0gBbvmjdSeh47tQtcrcHzNlDfYgXAGBuBWoBM9502QggyaX o8jQ== X-Forwarded-Encrypted: i=1; AJvYcCX0JcIN38ERFOS9cIGvEvFp1q003hobbupz7nREC9ZjrWx1KMbEEvE5iZfP5Zv+5tUd9eKx4EuzPRw2@lists.postgresql.org X-Gm-Message-State: AOJu0YyUGPGQUos1cHiVGGmRDDSc1HES+0X3MxprlgU+B6M+Xy7uRrwm AjK8zXcXdAXOCzUOuFwxM3kIkIZe3fPY+v8vr91f2iRpZ9Uqv1qUTFsgV2DZFjrNE4VMyLiPEoD 26qc8VH9ALe27//OKM5xpdwm/I2Z3DVA= X-Gm-Gg: AeBDieuqYd7UK+N9TT52xr5MX3VVRYp6TqgiD/6dcp8Lz/XjlhrgoI2uSz/NWkKZjDb 6bEjnAX356idVvEhfM+0WsNhsnSfz85X3ZQgEM/C7cnUwpQ2pe6fmGyQWWcQ4onSQriMNg9/iMk +M4y2TzRcKVnIPAxx5zNInuAjrGBw4NC4VpY+F4cBLm4RIXoMMgH7nh7Sbr7zpKSNOjLyuQklZR hVWsHGZKHlClWxd+/qlqb9iz39jU/w0GiplEn0RLd+kM53o0pJ0c54ZjsZ0eT7Sk/58eG37K5jO xLhWS4gDtufv+/Gp4A3At86Blx3WVMeCyjqnp1mi5oOKxyFxuSqjTIdZSUdTiZAJ X-Received: by 2002:a05:7022:6ba8:b0:119:e56b:c3f3 with SMTP id a92af1059eb24-12c34eeb72bmr1331216c88.3.1775872568830; Fri, 10 Apr 2026 18:56:08 -0700 (PDT) MIME-Version: 1.0 References: <19006-80fcaaf69000377e@postgresql.org> In-Reply-To: From: Thomas Munro Date: Sat, 11 Apr 2026 13:55:30 +1200 X-Gm-Features: AQROBzB-X532G9bB__R1OCaZwA0FQnCVWaY5BzxrXZCxn873MWvj5Scykv25cMY Message-ID: Subject: Re: BUG #19006: Assert(BufferIsPinned) in BufferGetBlockNumber() is triggered for forwarded buffer To: Xuneng Zhou Cc: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org, Michael Paquier , Tom Lane , nathandbossart@gmail.com, Melanie Plageman , Heikki Linnakangas Content-Type: multipart/mixed; boundary="000000000000a22826064f258dfe" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a22826064f258dfe Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 11, 2025 at 5:16=E2=80=AFPM Xuneng Zhou = wrote: > I've reviewed patch v2 carefully and found no correctness problems. > Although the performance benefit it brings might be intangible, the > new interface is more robust and simpler than the current one. It does > save a lot of bookkeeping: Thanks Xuneng for all your work reviewing and testing this back in December= . Unfortunately this fell through the cracks (sorry) and I didn't push it before the freeze. Any objections to pushing it now? I can live with deferring it until master reopens if that's the call (CC RMT), but it would be nice to tidy up this design wart if we can. A short restatement of the situation (but see earlier if you want a ... really long one): * it's already the case that the StartReadBuffers() sometimes stores and "forwards" already-pinned buffers in its in/out buffers[] argument * that currently means the caller has to fill it with InvalidBuffer so they can be distinguished * it forwards buffers when it decides to boot them out of the current IO operation and into the next one (that it assumes the caller will usually make) * an example reason to split is when an overlapping already in-progress IO is encountered after it has the pins * in the current coding, read_stream.c has to initialise its internal queue with InvalidBuffer and clear them after use, and count them after each calls * in the 18 beta phase a bug in an edge case of that accounting was fixed by b4212231 This patch shifts some of that responsibility to a more natural place: * it now seems obvious that StartReadBuffers() should just allow an in/out npinned counter to travel along with the in/out buffers array * read_stream.c still needs to know how many there are for pin limit purpos= es * it also needs to know in the unusual case that the stream ends earlier and it has to unpin them * other than that, it's StartReadBuffers()'s private business to manage the= m * StartReadBuffers() can do that with trivial arithmetic, no need to distinguish and count the buffers * the end result is much simpler and more robust (Heikki may recall that we wrestled with versions of this how-to-avoid-unpinning-across-split-IOs question back in the v17 cycle when he was reviewing the first vectored I/O + read_stream.c patches, and there were "two phase" and the "three phase" API ideas, which eventually came back as "forwarded buffers" in v18, and this would be a simplification for v19, "forwarded buffers + a counter".) --000000000000a22826064f258dfe Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Give-StartReadBuffers-a-more-robust-interface.patch" Content-Disposition: attachment; filename="v3-0001-Give-StartReadBuffers-a-more-robust-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnto4hcp0 RnJvbSBmZDE4YWE2NTMwMjc3NDg3ZmNmMmM2MDJjNTcwZjM2YzI3NGJiYzgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgNSBBdWcgMjAyNSAxNDozNTowOSArMTIwMApTdWJqZWN0OiBbUEFUQ0ggdjNd IEdpdmUgU3RhcnRSZWFkQnVmZmVycygpIGEgbW9yZSByb2J1c3QgaW50ZXJmYWNlLgoKUmVtb3Zl IHRoZSBuZWVkIGZvciByZWFkX3N0cmVhbS5jIHRvIGluaXRpYWxpemUgYW5kIGNsZWFyCnN0cmVh bS0+YnVmZmVyc1tdIGVsZW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gU3RhcnRSZWFkQnVm ZmVycygpLAphbmQgdG8gY291bnQgdGhlbSBvbiByZXR1cm4uICBJbnN0ZWFkLCBhZGQgYW4gZXhw bGljaXQgbnBpbm5lZCBhcmd1bWVudAp0byB0ZWxsIFN0YXJ0UmVhZEJ1ZmZlcnMoKSBob3cgbWFu eSBidWZmZXJzIHdlcmUgYWxyZWFkeSBwaW5uZWQgYnkgdGhlCnByZXZpb3VzIGNhbGwgKGlmIGl0 IHdhcyBhIHNob3J0IHJlYWQpLCBhbmQgdG8gbGVhcm4gaG93IG1hbnkgYXJlIHBpbm5lZApiZXlv bmQgKm5ibG9ja3MgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMgKGlmIGl0IGlzIGEgc2hvcnQgcmVh ZCkuICBJdCBpcwphbiBpbi9vdXQgYXJndW1lbnQuICBUaGUgb3V0cHV0IG9mIG9uZSBjYWxsIGNh biBiZSBwYXNzZWQgZGlyZWN0bHkgYXMKaW5wdXQgdG8gdGhlIG5leHQgY2FsbCwganVzdCBsaWtl IHRoZSBidWZmZXJzIHRoZW1zZWx2ZXMuCgpUaGUgbmV3IGZ1bmN0aW9uIGFyZ3VtZW50IGNvdW50 IHN0aWxsIGZpdHMgaW4gcmVnaXN0ZXJzIGluIFVuaXhvaWQKY2FsbGluZyBjb252ZW50aW9ucy4g IEl0IGRvZXNuJ3Qgb24gV2luZG93cy94ODYsIGJ1dCBpdCBkaWRuJ3QgYmVmb3JlCmVpdGhlci4g IFRoZSBzaW5nbGUtYnVmZmVyIFN0YXJ0UmVhZEJ1ZmZlcigpIHNwZWNpYWxpemF0aW9uIGlzIG5v dAphZmZlY3RlZC4KCnJlYWRfc3RyZWFtLmMgbm93IHVzZXMgc3RyZWFtLT5wZW5kaW5nX3JlYWRf bnBpbm5lZCB0byBjYXJyeSB0aGF0IG51bWJlcgpmcm9tIGNhbGwgdG8gY2FsbCwgcmVwbGFjaW5n IHN0cmVhbS0+Zm9yd2FyZGVkX2J1ZmZlcnMuICBJdCBubyBsb25nZXIKbWFpbnRhaW5zIGl0IGl0 c2VsZiwgd2hpY2ggbm93IHNlZW1zIGEgbGl0dGxlIGZyYWdpbGUsIGxheWVyLXZpb2xhdGluZwph bmQgZXhwZW5zaXZlLiAgSXQgc3RpbGwgbmVlZHMgdG8gY29uc3VsdCB0aGUgdmFsdWUgd2hlbiBy ZXNwZWN0aW5nIHBpbgpsaW1pdHMsIGJ1dCBvdGhlciB0aGFuIHRoYXQgaXQncyBlbnRpcmVseSBT dGFydFJlYWRCdWZmZXJzKCknIGpvYiB0bwp3b3JyeSBhYm91dCBpdC4gIFRoZSBuZXcgbWVtYmVy IHZhcmlhYmxlIG5hbWUgYmV0dGVyIHJlZmxlY3RzIGl0cwpyZWxhdGlvbnNoaXAgd2l0aCBwZW5k aW5nX3JlYWRfe2Jsb2NrbnVtLG5ibG9ja3N9LiAgSXQgaXMgdGhlIG51bWJlciBvZgpidWZmZXJz IGluIHRoYXQgcmFuZ2UgdGhhdCB3ZXJlIGFscmVhZHkgcGlubmVkIGJ5IGFuIGVhcmxpZXIgc2hv cnQgcmVhZC4KQWZ0ZXIgYSBzaG9ydCByZWFkLCBfYmxvY2tudW0gYWR2YW5jZXMsIF9uYmxvY2tz IHNocmlua3MsIGFuZCBfbnBpbm5lZApoYXMgYWxyZWFkeSBiZWVuIGZpbGxlZCBpbiBieSBTdGFy dFJlYWRCdWZmZXJzKCksIHNvIHdlJ3JlIHJlYWR5IGZvciB0aGUKbmV4dCBjYWxsIGF0IG5leHRf YnVmZmVyX2luZGV4LCB3aGVyZSAqbnBpbm5lZCBidWZmZXJzIGhhdmUgYmVlbiBwbGFjZWQKYnkg U3RhcnRSZWFkQnVmZmVycygpLgoKQXNzZXJ0aW9ucyBhYm91dCB0aGUgaWRlbnRpdHkgb2YgZm9y d2FyZGVkIGJ1ZmZlcnMgYXJlIHJlbW92ZWQsIGJlY2F1c2UKU3RhcnRSZWFkQnVmZmVycygpIGFs cmVhZHkgaGFzIHN1Y2ggYXNzZXJ0aW9ucywgYW5kIGFzc2VydGlvbnMgYWJvdXQKcXVldWUgZW50 cmllcyBhZnRlciB0aGF0IGFyZSBubyBsb25nZXIgcmVsZXZhbnQuCgpSZXZpZXdlZC1ieTogWHVu ZW5nIFpob3UgPHh1bmVuZ3pob3VAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLzE5MDA2LTgwZmNhYWY2OTAwMDM3N2UlNDBwb3N0Z3Jlc3FsLm9yZwotLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgfCAxMDcgKysrKystLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgfCAgNDQgKysr KysrKy0tLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggICAgICAgICAgfCAgIDEgKwog c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jICB8ICAxMSArKysKIDQgZmlsZXMg Y2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMTAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IDIzNzRiNGNkNTA3Li5hNjE2OTE4OGE1MyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05OSw3ICs5OSw2IEBAIHN0cnVj dCBSZWFkU3RyZWFtCiAJaW50MTYJCWlvc19pbl9wcm9ncmVzczsKIAlpbnQxNgkJcXVldWVfc2l6 ZTsKIAlpbnQxNgkJbWF4X3Bpbm5lZF9idWZmZXJzOwotCWludDE2CQlmb3J3YXJkZWRfYnVmZmVy czsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAKIAkvKgpAQCAtMTE1LDcgKzExNCw2IEBAIHN0 cnVjdCBSZWFkU3RyZWFtCiAJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CiAJaW50MTYJCXJlYWRh aGVhZF9kaXN0YW5jZTsKIAl1aW50MTYJCWRpc3RhbmNlX2RlY2F5X2hvbGRvZmY7Ci0JaW50MTYJ CWluaXRpYWxpemVkX2J1ZmZlcnM7CiAJaW50MTYJCXJlc3VtZV9yZWFkYWhlYWRfZGlzdGFuY2U7 CiAJaW50MTYJCXJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogCWludAkJCXJlYWRfYnVmZmVyc19m bGFnczsKQEAgLTE0Nyw2ICsxNDUsNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCS8qIFRoZSByZWFk IG9wZXJhdGlvbiB3ZSBhcmUgY3VycmVudGx5IHByZXBhcmluZy4gKi8KIAlCbG9ja051bWJlciBw ZW5kaW5nX3JlYWRfYmxvY2tudW07CiAJaW50MTYJCXBlbmRpbmdfcmVhZF9uYmxvY2tzOworCWlu dAkJCXBlbmRpbmdfcmVhZF9ucGlubmVkOwogCiAJLyogU3BhY2UgZm9yIGJ1ZmZlcnMgYW5kIG9w dGlvbmFsIHBlci1idWZmZXIgcHJpdmF0ZSBkYXRhLiAqLwogCXNpemVfdAkJcGVyX2J1ZmZlcl9k YXRhX3NpemU7CkBAIC0zMTgsMTAgKzMxNyw4IEBAIHN0YXRpYyBib29sCiByZWFkX3N0cmVhbV9z dGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogewogCWJvb2wJCW5lZWRfd2Fp dDsKLQlpbnQJCQlyZXF1ZXN0ZWRfbmJsb2NrczsKIAlpbnQJCQluYmxvY2tzOwogCWludAkJCWZs YWdzOwotCWludAkJCWZvcndhcmRlZDsKIAlpbnQxNgkJaW9faW5kZXg7CiAJaW50MTYJCW92ZXJm bG93OwogCWludDE2CQlidWZmZXJfaW5kZXg7CkBAIC0zMzUsMzMgKzMzMiwxMiBAQCByZWFkX3N0 cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCUFzc2VydChzdHJl YW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8PQogCQkg ICBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CiAKLSNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCiAJLyogV2UgaGFkIGJldHRlciBub3QgYmUgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgcGlu bmVkIGJ1ZmZlci4gKi8KIAlpZiAoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA+IDApCiAJCUFzc2Vy dChzdHJlYW0tPm5leHRfYnVmZmVyX2luZGV4ICE9IHN0cmVhbS0+b2xkZXN0X2J1ZmZlcl9pbmRl eCk7CiAJZWxzZQogCQlBc3NlcnQoc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCA9PSBzdHJlYW0t Pm9sZGVzdF9idWZmZXJfaW5kZXgpOwogCi0JLyoKLQkgKiBQaW5uZWQgYnVmZmVycyBmb3J3YXJk ZWQgYnkgYSBwcmVjZWRpbmcgU3RhcnRSZWFkQnVmZmVycygpIGNhbGwgdGhhdAotCSAqIGhhZCB0 byBzcGxpdCB0aGUgb3BlcmF0aW9uIHNob3VsZCBtYXRjaCB0aGUgbGVhZGluZyBibG9ja3Mgb2Yg dGhpcwotCSAqIGZvbGxvd2luZyBTdGFydFJlYWRCdWZmZXJzKCkgY2FsbC4KLQkgKi8KLQlBc3Nl cnQoc3RyZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA8PSBzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxv Y2tzKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IHN0cmVhbS0+Zm9yd2FyZGVkX2J1ZmZlcnM7ICsr aSkKLQkJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKHN0cmVhbS0+YnVmZmVyc1tzdHJlYW0t Pm5leHRfYnVmZmVyX2luZGV4ICsgaV0pID09Ci0JCQkgICBzdHJlYW0tPnBlbmRpbmdfcmVhZF9i bG9ja251bSArIGkpOwotCi0JLyoKLQkgKiBDaGVjayB0aGF0IHdlJ3ZlIGNsZWFyZWQgdGhlIHF1 ZXVlL292ZXJmbG93IGVudHJpZXMgY29ycmVzcG9uZGluZyB0bwotCSAqIHRoZSByZXN0IG9mIHRo ZSBibG9ja3MgY292ZXJlZCBieSB0aGlzIHJlYWQsIHVubGVzcyBpdCdzIHRoZSBmaXJzdCBnbwot CSAqIGFyb3VuZCBhbmQgd2UgaGF2ZW4ndCBldmVuIGluaXRpYWxpemVkIHRoZW0geWV0LgotCSAq LwotCWZvciAoaW50IGkgPSBzdHJlYW0tPmZvcndhcmRlZF9idWZmZXJzOyBpIDwgc3RyZWFtLT5w ZW5kaW5nX3JlYWRfbmJsb2NrczsgKytpKQotCQlBc3NlcnQoc3RyZWFtLT5uZXh0X2J1ZmZlcl9p bmRleCArIGkgPj0gc3RyZWFtLT5pbml0aWFsaXplZF9idWZmZXJzIHx8Ci0JCQkgICBzdHJlYW0t PmJ1ZmZlcnNbc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCArIGldID09IEludmFsaWRCdWZmZXIp OwotI2VuZGlmCi0KIAkvKiBEbyB3ZSBuZWVkIHRvIGlzc3VlIHJlYWQtYWhlYWQgYWR2aWNlPyAq LwogCWZsYWdzID0gc3RyZWFtLT5yZWFkX2J1ZmZlcnNfZmxhZ3M7CiAJaWYgKHN0cmVhbS0+YWR2 aWNlX2VuYWJsZWQpCkBAIC00MDIsOSArMzc4LDkgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVuZGlu Z19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJYnVmZmVyX2xpbWl0ID0gTWluKEdldEFkZGl0 aW9uYWxMb2NhbFBpbkxpbWl0KCksIFBHX0lOVDE2X01BWCk7CiAJZWxzZQogCQlidWZmZXJfbGlt aXQgPSBNaW4oR2V0QWRkaXRpb25hbFBpbkxpbWl0KCksIFBHX0lOVDE2X01BWCk7Ci0JQXNzZXJ0 KHN0cmVhbS0+Zm9yd2FyZGVkX2J1ZmZlcnMgPD0gc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2Nr cyk7CisJQXNzZXJ0KHN0cmVhbS0+cGVuZGluZ19yZWFkX25waW5uZWQgPD0gc3RyZWFtLT5wZW5k aW5nX3JlYWRfbmJsb2Nrcyk7CiAKLQlidWZmZXJfbGltaXQgKz0gc3RyZWFtLT5mb3J3YXJkZWRf YnVmZmVyczsKKwlidWZmZXJfbGltaXQgKz0gc3RyZWFtLT5wZW5kaW5nX3JlYWRfbnBpbm5lZDsK IAlidWZmZXJfbGltaXQgPSBNaW4oYnVmZmVyX2xpbWl0LCBQR19JTlQxNl9NQVgpOwogCiAJaWYg KGJ1ZmZlcl9saW1pdCA9PSAwICYmIHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPT0gMCkKQEAgLTQz MSwyMCArNDA3LDE1IEBAIHJlYWRfc3RyZWFtX3N0YXJ0X3BlbmRpbmdfcmVhZChSZWFkU3RyZWFt ICpzdHJlYW0pCiAKIAkvKgogCSAqIFdlIHNheSBob3cgbWFueSBibG9ja3Mgd2Ugd2FudCB0byBy ZWFkLCBidXQgaXQgbWF5IGJlIHNtYWxsZXIgb24gcmV0dXJuCi0JICogaWYgdGhlIGJ1ZmZlciBt YW5hZ2VyIGRlY2lkZXMgdG8gc2hvcnRlbiB0aGUgcmVhZC4gIEluaXRpYWxpemUgYnVmZmVycwot CSAqIHRvIEludmFsaWRCdWZmZXIgKD0gbm90IGEgZm9yd2FyZGVkIGJ1ZmZlcikgYXMgaW5wdXQg b24gZmlyc3QgdXNlIG9ubHksCi0JICogYW5kIGtlZXAgdGhlIG9yaWdpbmFsIG5ibG9ja3MgbnVt YmVyIHNvIHdlIGNhbiBjaGVjayBmb3IgZm9yd2FyZGVkCi0JICogYnVmZmVycyBhcyBvdXRwdXQs IGJlbG93LgorCSAqIGlmIHRoZSBidWZmZXIgbWFuYWdlciBkZWNpZGVzIHRvIHNob3J0ZW4gdGhl IHJlYWQuCiAJICovCiAJYnVmZmVyX2luZGV4ID0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleDsK IAlpb19pbmRleCA9IHN0cmVhbS0+bmV4dF9pb19pbmRleDsKLQl3aGlsZSAoc3RyZWFtLT5pbml0 aWFsaXplZF9idWZmZXJzIDwgYnVmZmVyX2luZGV4ICsgbmJsb2NrcykKLQkJc3RyZWFtLT5idWZm ZXJzW3N0cmVhbS0+aW5pdGlhbGl6ZWRfYnVmZmVycysrXSA9IEludmFsaWRCdWZmZXI7Ci0JcmVx dWVzdGVkX25ibG9ja3MgPSBuYmxvY2tzOwogCW5lZWRfd2FpdCA9IFN0YXJ0UmVhZEJ1ZmZlcnMo JnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCwKIAkJCQkJCQkJICZzdHJlYW0tPmJ1ZmZlcnNbYnVm ZmVyX2luZGV4XSwKIAkJCQkJCQkJIHN0cmVhbS0+cGVuZGluZ19yZWFkX2Jsb2NrbnVtLAogCQkJ CQkJCQkgJm5ibG9ja3MsCisJCQkJCQkJCSAmc3RyZWFtLT5wZW5kaW5nX3JlYWRfbnBpbm5lZCwK IAkJCQkJCQkJIGZsYWdzKTsKIAlzdHJlYW0tPnBpbm5lZF9idWZmZXJzICs9IG5ibG9ja3M7CiAK QEAgLTUwMiwyOCArNDczLDE1IEBAIHJlYWRfc3RyZWFtX3N0YXJ0X3BlbmRpbmdfcmVhZChSZWFk U3RyZWFtICpzdHJlYW0pCiAJCXJlYWRfc3RyZWFtX2NvdW50X2lvKHN0cmVhbSwgbmJsb2Nrcywg c3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MpOwogCX0KIAotCS8qCi0JICogSG93IG1hbnkgcGlucyB3 ZXJlIGFjcXVpcmVkIGJ1dCBmb3J3YXJkZWQgdG8gdGhlIG5leHQgY2FsbD8gIFRoZXNlIG5lZWQK LQkgKiB0byBiZSBwYXNzZWQgdG8gdGhlIG5leHQgU3RhcnRSZWFkQnVmZmVycygpIGNhbGwgYnkg bGVhdmluZyB0aGVtCi0JICogZXhhY3RseSB3aGVyZSB0aGV5IGFyZSBpbiB0aGUgcXVldWUsIG9y IHJlbGVhc2VkIGlmIHRoZSBzdHJlYW0gZW5kcwotCSAqIGVhcmx5LiAgV2UgbmVlZCB0aGUgbnVt YmVyIGZvciBhY2NvdW50aW5nIHB1cnBvc2VzLCBzaW5jZSB0aGV5IGFyZSBub3QKLQkgKiBjb3Vu dGVkIGluIHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgYnV0IHdlIGFscmVhZHkgaG9sZCB0aGVtLgot CSAqLwotCWZvcndhcmRlZCA9IDA7Ci0Jd2hpbGUgKG5ibG9ja3MgKyBmb3J3YXJkZWQgPCByZXF1 ZXN0ZWRfbmJsb2NrcyAmJgotCQkgICBzdHJlYW0tPmJ1ZmZlcnNbYnVmZmVyX2luZGV4ICsgbmJs b2NrcyArIGZvcndhcmRlZF0gIT0gSW52YWxpZEJ1ZmZlcikKLQkJZm9yd2FyZGVkKys7Ci0Jc3Ry ZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA9IGZvcndhcmRlZDsKLQogCS8qCiAJICogV2UgZ2F2ZSBh IGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgYnVmZmVyIHNwYWNlIHRvIFN0YXJ0UmVhZEJ1ZmZlcnMoKSwg YnV0CiAJICogd2Ugd2FudCBpdCB0byB3cmFwIGFyb3VuZCBhdCBxdWV1ZV9zaXplLiAgQ29weSBv dmVyZmxvd2luZyBidWZmZXJzIHRvCiAJICogdGhlIGZyb250IG9mIHRoZSBhcnJheSB3aGVyZSB0 aGV5J2xsIGJlIGNvbnN1bWVkLCBidXQgYWxzbyBsZWF2ZSBhIGNvcHkKIAkgKiBpbiB0aGUgb3Zl cmZsb3cgem9uZSB3aGljaCB0aGUgSS9PIG9wZXJhdGlvbiBoYXMgYSBwb2ludGVyIHRvIChpdCBu ZWVkcwotCSAqIGEgY29udGlndW91cyBhcnJheSkuICBCb3RoIGNvcGllcyB3aWxsIGJlIGNsZWFy ZWQgd2hlbiB0aGUgYnVmZmVycyBhcmUKLQkgKiBoYW5kZWQgdG8gdGhlIGNvbnN1bWVyLgorCSAq IGEgY29udGlndW91cyBhcnJheSkuCiAJICovCi0Jb3ZlcmZsb3cgPSAoYnVmZmVyX2luZGV4ICsg bmJsb2NrcyArIGZvcndhcmRlZCkgLSBzdHJlYW0tPnF1ZXVlX3NpemU7CisJb3ZlcmZsb3cgPSAo YnVmZmVyX2luZGV4ICsgbmJsb2NrcyArIHN0cmVhbS0+cGVuZGluZ19yZWFkX25waW5uZWQpIC0K KwkJc3RyZWFtLT5xdWV1ZV9zaXplOwogCWlmIChvdmVyZmxvdyA+IDApCiAJewogCQlBc3NlcnQo b3ZlcmZsb3cgPCBzdHJlYW0tPnF1ZXVlX3NpemUpOwkvKiBjYW4ndCBvdmVybGFwICovCkBAIC01 NDIsNiArNTAwLDcgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVuZGluZ19yZWFkKFJlYWRTdHJlYW0g KnN0cmVhbSkKIAkvKiBBZGp1c3QgdGhlIHBlbmRpbmcgcmVhZCB0byBjb3ZlciB0aGUgcmVtYWlu aW5nIHBvcnRpb24sIGlmIGFueS4gKi8KIAlzdHJlYW0tPnBlbmRpbmdfcmVhZF9ibG9ja251bSAr PSBuYmxvY2tzOwogCXN0cmVhbS0+cGVuZGluZ19yZWFkX25ibG9ja3MgLT0gbmJsb2NrczsKKwlB c3NlcnQoc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA+PSBzdHJlYW0tPnBlbmRpbmdfcmVh ZF9ucGlubmVkKTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMTAzNiwxMyArOTk1LDEyIEBAIHJl YWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZm ZXJfZGF0YSkKIAogCQkvKiBGYXN0IHBhdGggYXNzdW1wdGlvbnMuICovCiAJCUFzc2VydChzdHJl YW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKTsKLQkJQXNzZXJ0KHN0cmVhbS0+Zm9yd2FyZGVkX2J1 ZmZlcnMgPT0gMCk7CiAJCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDEpOwogCQlB c3NlcnQoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPT0gMSk7CiAJCUFzc2VydChzdHJlYW0t PmNvbWJpbmVfZGlzdGFuY2UgPT0gMSk7CiAJCUFzc2VydChzdHJlYW0tPnBlbmRpbmdfcmVhZF9u YmxvY2tzID09IDApOworCQlBc3NlcnQoc3RyZWFtLT5wZW5kaW5nX3JlYWRfbnBpbm5lZCA9PSAw KTsKIAkJQXNzZXJ0KHN0cmVhbS0+cGVyX2J1ZmZlcl9kYXRhX3NpemUgPT0gMCk7Ci0JCUFzc2Vy dChzdHJlYW0tPmluaXRpYWxpemVkX2J1ZmZlcnMgPiBzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5k ZXgpOwogCiAJCS8qIFdlJ3JlIGdvaW5nIHRvIHJldHVybiB0aGUgYnVmZmVyIHdlIHBpbm5lZCBs YXN0IHRpbWUuICovCiAJCW9sZGVzdF9idWZmZXJfaW5kZXggPSBzdHJlYW0tPm9sZGVzdF9idWZm ZXJfaW5kZXg7CkBAIC0xMTI0LDcgKzEwODIsNiBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihS ZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCQlzdHJlYW0tPmNv bWJpbmVfZGlzdGFuY2UgPSAwOwogCQkJc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4ID0gc3Ry ZWFtLT5uZXh0X2J1ZmZlcl9pbmRleDsKIAkJCXN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPSAwOwot CQkJc3RyZWFtLT5idWZmZXJzW29sZGVzdF9idWZmZXJfaW5kZXhdID0gSW52YWxpZEJ1ZmZlcjsK IAkJfQogCiAJCXN0cmVhbS0+ZmFzdF9wYXRoID0gZmFsc2U7CkBAIC0xMjc0LDE2ICsxMjMxLDYg QEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVy X2J1ZmZlcl9kYXRhKQogCQkJc3RyZWFtLT5zZXFfdW50aWxfcHJvY2Vzc2VkID0gSW52YWxpZEJs b2NrTnVtYmVyOwogCX0KIAotCS8qCi0JICogV2UgbXVzdCB6YXAgdGhpcyBxdWV1ZSBlbnRyeSwg b3IgZWxzZSBpdCB3b3VsZCBhcHBlYXIgYXMgYSBmb3J3YXJkZWQKLQkgKiBidWZmZXIuICBJZiBp dCdzIHBvdGVudGlhbGx5IGluIHRoZSBvdmVyZmxvdyB6b25lIChpZSBmcm9tIGEKLQkgKiBtdWx0 aS1ibG9jayBJL08gdGhhdCB3cmFwcGVkIGFyb3VuZCB0aGUgcXVldWUpLCBhbHNvIHphcCB0aGUg Y29weS4KLQkgKi8KLQlzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0gPSBJbnZh bGlkQnVmZmVyOwotCWlmIChvbGRlc3RfYnVmZmVyX2luZGV4IDwgc3RyZWFtLT5pb19jb21iaW5l X2xpbWl0IC0gMSkKLQkJc3RyZWFtLT5idWZmZXJzW3N0cmVhbS0+cXVldWVfc2l6ZSArIG9sZGVz dF9idWZmZXJfaW5kZXhdID0KLQkJCUludmFsaWRCdWZmZXI7Ci0KICNpZiBkZWZpbmVkKENMT0JC RVJfRlJFRURfTUVNT1JZKSB8fCBkZWZpbmVkKFVTRV9WQUxHUklORCkKIAogCS8qCkBAIC0xMzI5 LDI2ICsxMjc2LDEzIEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKICNpZm5kZWYgUkVBRF9TVFJFQU1fRElTQUJMRV9G QVNUX1BBVEgKIAkvKiBTZWUgaWYgd2UgY2FuIHRha2UgdGhlIGZhc3QgcGF0aCBmb3IgYWxsLWNh Y2hlZCBzY2FucyBuZXh0IHRpbWUuICovCiAJaWYgKHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09 IDAgJiYKLQkJc3RyZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA9PSAwICYmCiAJCXN0cmVhbS0+cGlu bmVkX2J1ZmZlcnMgPT0gMSAmJgogCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9PSAxICYm CiAJCXN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA9PSAxICYmCiAJCXN0cmVhbS0+cGVuZGluZ19y ZWFkX25ibG9ja3MgPT0gMCAmJgorCQlzdHJlYW0tPnBlbmRpbmdfcmVhZF9ucGlubmVkID09IDAg JiYKIAkJc3RyZWFtLT5wZXJfYnVmZmVyX2RhdGFfc2l6ZSA9PSAwKQogCXsKLQkJLyoKLQkJICog VGhlIGZhc3QgcGF0aCBzcGlucyBvbiBvbmUgYnVmZmVyIGVudHJ5IHJlcGVhdGVkbHkgaW5zdGVh ZCBvZgotCQkgKiByb3RhdGluZyB0aHJvdWdoIHRoZSB3aG9sZSBxdWV1ZSBhbmQgY2xlYXJpbmcg dGhlIGVudHJpZXMgYmVoaW5kCi0JCSAqIGl0LiAgSWYgdGhlIGJ1ZmZlciBpdCBzdGFydHMgd2l0 aCBoYXBwZW5lZCB0byBiZSBmb3J3YXJkZWQgYmV0d2VlbgotCQkgKiBTdGFydFJlYWRCdWZmZXJz KCkgY2FsbHMgYW5kIGFsc28gd3JhcHBlZCBhcm91bmQgdGhlIGNpcmN1bGFyIHF1ZXVlCi0JCSAq IHBhcnR3YXkgdGhyb3VnaCwgdGhlbiBhIGNvcHkgYWxzbyBleGlzdHMgaW4gdGhlIG92ZXJmbG93 IHpvbmUsIGFuZAotCQkgKiBpdCB3b24ndCBjbGVhciBpdCBvdXQgYXMgdGhlIHJlZ3VsYXIgcGF0 aCB3b3VsZC4gIERvIHRoYXQgbm93LCBzbwotCQkgKiBpdCBkb2Vzbid0IG5lZWQgY29kZSBmb3Ig dGhhdC4KLQkJICovCi0JCWlmIChzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPCBzdHJlYW0t PmlvX2NvbWJpbmVfbGltaXQgLSAxKQotCQkJc3RyZWFtLT5idWZmZXJzW3N0cmVhbS0+cXVldWVf c2l6ZSArIHN0cmVhbS0+b2xkZXN0X2J1ZmZlcl9pbmRleF0gPQotCQkJCUludmFsaWRCdWZmZXI7 Ci0KIAkJc3RyZWFtLT5mYXN0X3BhdGggPSB0cnVlOwogCX0KICNlbmRpZgpAQCAtMTQyMSwyNCAr MTM1NSwxOSBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJd2hpbGUg KChidWZmZXIgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpKSAhPSBJbnZh bGlkQnVmZmVyKQogCQlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKLQkvKiBVbnBpbiBhbnkgdW51 c2VkIGZvcndhcmRlZCBidWZmZXJzLiAqLworCS8qCisJICogVW5waW4gYW55IHVudXNlZCBmb3J3 YXJkZWQgYnVmZmVycy4gIFNlZSBjb21tZW50cyBhYm92ZQorCSAqIFN0YXJ0UmVhZEJ1ZmZlcnMo KSBmb3Igd2h5IHdlIGRvIHRoaXMuCisJICovCiAJaW5kZXggPSBzdHJlYW0tPm5leHRfYnVmZmVy X2luZGV4OwotCXdoaWxlIChpbmRleCA8IHN0cmVhbS0+aW5pdGlhbGl6ZWRfYnVmZmVycyAmJgot CQkgICAoYnVmZmVyID0gc3RyZWFtLT5idWZmZXJzW2luZGV4XSkgIT0gSW52YWxpZEJ1ZmZlcikK Kwl3aGlsZSAoc3RyZWFtLT5wZW5kaW5nX3JlYWRfbnBpbm5lZCA+IDApCiAJewotCQlBc3NlcnQo c3RyZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA+IDApOwotCQlzdHJlYW0tPmZvcndhcmRlZF9idWZm ZXJzLS07Ci0JCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKLQotCQlzdHJlYW0tPmJ1ZmZlcnNbaW5k ZXhdID0gSW52YWxpZEJ1ZmZlcjsKLQkJaWYgKGluZGV4IDwgc3RyZWFtLT5pb19jb21iaW5lX2xp bWl0IC0gMSkKLQkJCXN0cmVhbS0+YnVmZmVyc1tzdHJlYW0tPnF1ZXVlX3NpemUgKyBpbmRleF0g PSBJbnZhbGlkQnVmZmVyOwotCisJCVJlbGVhc2VCdWZmZXIoc3RyZWFtLT5idWZmZXJzW2luZGV4 XSk7CisJCXN0cmVhbS0+cGVuZGluZ19yZWFkX25waW5uZWQtLTsKIAkJaWYgKCsraW5kZXggPT0g c3RyZWFtLT5xdWV1ZV9zaXplKQogCQkJaW5kZXggPSAwOwogCX0KIAotCUFzc2VydChzdHJlYW0t PmZvcndhcmRlZF9idWZmZXJzID09IDApOwogCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJz ID09IDApOwogCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAzY2MwYjBiZGQ5Mi4uYjk2NmExMDdiOWEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0xMzY5LDE2ICsxMzY5LDIwIEBAIFN0 YXJ0UmVhZEJ1ZmZlcnNJbXBsKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCiAJCQkJ CSBCdWZmZXIgKmJ1ZmZlcnMsCiAJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJIGlu dCAqbmJsb2NrcywKKwkJCQkJIGludCAqbnBpbm5lZCwKIAkJCQkJIGludCBmbGFncywKIAkJCQkJ IGJvb2wgYWxsb3dfZm9yd2FyZGluZykKIHsKIAlpbnQJCQlhY3R1YWxfbmJsb2NrcyA9ICpuYmxv Y2tzOworCWludAkJCWFjdHVhbF9ucGlubmVkID0gKm5waW5uZWQ7CiAJaW50CQkJbWF4Y29tYmlu ZSA9IDA7CiAJYm9vbAkJZGlkX3N0YXJ0X2lvOwogCUlPQ29udGV4dAlpb19jb250ZXh0OwogCUlP T2JqZWN0CWlvX29iamVjdDsKIAorCUFzc2VydCgqbnBpbm5lZCA9PSAwIHx8IGFsbG93X2Zvcndh cmRpbmcpOwogCUFzc2VydCgqbmJsb2NrcyA9PSAxIHx8IGFsbG93X2ZvcndhcmRpbmcpOworCUFz c2VydCgqbnBpbm5lZCA8PSAqbmJsb2Nrcyk7CiAJQXNzZXJ0KCpuYmxvY2tzID4gMCk7CiAJQXNz ZXJ0KCpuYmxvY2tzIDw9IE1BWF9JT19DT01CSU5FX0xJTUlUKTsKIApAQCAtMTM5Nyw3ICsxNDAx LDcgQEAgU3RhcnRSZWFkQnVmZmVyc0ltcGwoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlv biwKIAl7CiAJCWJvb2wJCWZvdW5kOwogCi0JCWlmIChhbGxvd19mb3J3YXJkaW5nICYmIGJ1ZmZl cnNbaV0gIT0gSW52YWxpZEJ1ZmZlcikKKwkJaWYgKGFsbG93X2ZvcndhcmRpbmcgJiYgaSA8IGFj dHVhbF9ucGlubmVkKQogCQl7CiAJCQlCdWZmZXJEZXNjICpidWZIZHI7CiAKQEAgLTE0NDMsNiAr MTQ0Nyw3IEBAIFN0YXJ0UmVhZEJ1ZmZlcnNJbXBsKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24sCiAJCQkJCQkJCQkJICAgb3BlcmF0aW9uLT5zdHJhdGVneSwKIAkJCQkJCQkJCQkgICBp b19vYmplY3QsIGlvX2NvbnRleHQsCiAJCQkJCQkJCQkJICAgJmZvdW5kKTsKKwkJCWFjdHVhbF9u cGlubmVkKys7CiAJCX0KIAogCQlpZiAoZm91bmQpCkBAIC0xNDU2LDYgKzE0NjEsNyBAQCBTdGFy dFJlYWRCdWZmZXJzSW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAogCQkJaWYg KGkgPT0gMCkKIAkJCXsKIAkJCQkqbmJsb2NrcyA9IDE7CisJCQkJKm5waW5uZWQgPSBhY3R1YWxf bnBpbm5lZCAtIDE7CiAKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiAKQEAgLTE1NzksMjIg KzE1ODUsMzAgQEAgU3RhcnRSZWFkQnVmZmVyc0ltcGwoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9w ZXJhdGlvbiwKIAogCUNoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24ob3BlcmF0aW9uLCAhZGlkX3N0 YXJ0X2lvKTsKIAorCS8qIFBpbm5lZCBidWZmZXJzIG5vdCBpbmNsdWRlZCBpbiBmaW5hbCBuYmxv Y2tzLCBmb3J3YXJkZWQgdG8gbmV4dCBjYWxsLiAqLworCSpucGlubmVkID0gYWN0dWFsX25waW5u ZWQgLSAqbmJsb2NrczsKKwogCXJldHVybiBkaWRfc3RhcnRfaW87CiB9CiAKIC8qCiAgKiBCZWdp biByZWFkaW5nIGEgcmFuZ2Ugb2YgYmxvY2tzIGJlZ2lubmluZyBhdCBibG9ja051bSBhbmQgZXh0 ZW5kaW5nIGZvcgotICogKm5ibG9ja3MuICAqbmJsb2NrcyBhbmQgdGhlIGJ1ZmZlcnMgYXJyYXkg YXJlIGluL291dCBwYXJhbWV0ZXJzLiAgT24gZW50cnksCi0gKiB0aGUgYnVmZmVycyBlbGVtZW50 cyBjb3ZlcmVkIGJ5ICpuYmxvY2tzIG11c3QgaG9sZCBlaXRoZXIgSW52YWxpZEJ1ZmZlciBvcgot ICogYnVmZmVycyBmb3J3YXJkZWQgYnkgYW4gZWFybGllciBjYWxsIHRvIFN0YXJ0UmVhZEJ1ZmZl cnMoKSB0aGF0IHdhcyBzcGxpdAotICogYW5kIGlzIG5vdyBiZWluZyBjb250aW51ZWQuICBPbiBy ZXR1cm4sICpuYmxvY2tzIGhvbGRzIHRoZSBudW1iZXIgb2YgYmxvY2tzCi0gKiBhY2NlcHRlZCBi eSB0aGlzIG9wZXJhdGlvbi4gIElmIGl0IGlzIGxlc3MgdGhhbiB0aGUgb3JpZ2luYWwgbnVtYmVy IHRoZW4KLSAqIHRoaXMgb3BlcmF0aW9uIGhhcyBiZWVuIHNwbGl0LCBidXQgYnVmZmVyIGVsZW1l bnRzIHVwIHRvIHRoZSBvcmlnaW5hbAotICogcmVxdWVzdGVkIHNpemUgbWF5IGhvbGQgZm9yd2Fy ZGVkIGJ1ZmZlcnMgdG8gYmUgdXNlZCBmb3IgYSBjb250aW51aW5nCi0gKiBvcGVyYXRpb24uICBU aGUgY2FsbGVyIG11c3QgZWl0aGVyIHN0YXJ0IGEgbmV3IEkvTyBiZWdpbm5pbmcgYXQgdGhlIGJs b2NrCi0gKiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGJsb2NrcyBhY2NlcHRlZCBieSB0aGlz IGNhbGwgYW5kIHBhc3MgdGhvc2UKLSAqIGJ1ZmZlcnMgYmFjayBpbiwgb3IgcmVsZWFzZSB0aGVt IGlmIGl0IGNob29zZXMgbm90IHRvLiAgSXQgc2hvdWxkbid0IG1ha2UKLSAqIGFueSBvdGhlciB1 c2Ugb2Ygb3IgYXNzdW1wdGlvbnMgYWJvdXQgZm9yd2FyZGVkIGJ1ZmZlcnMuCisgKiAqbmJsb2Nr cy4gICpuYmxvY2tzLCAqbnBpbm5lZCBhbmQgdGhlIGJ1ZmZlcnMgYXJyYXkgYXJlIGluL291dCBw YXJhbWV0ZXJzLgorICoKKyAqIE9uIGVudHJ5LCAqbmJsb2NrcyBpcyB0aGUgZGVzaXJlIG51bWJl ciBvZiBibG9jayB0byByZWFkLiAgT24gZXhpdCwgaXQgbWF5CisgKiBiZSBhIHNtYWxsZXIgbnVt YmVyIGlmIHRoZSBvcGVyYXRpb24gd2FzIHNwbGl0LgorICoKKyAqIE9uIGVudHJ5LCAqbnBpbm5l ZCBpcyB0aGUgbnVtYmVyIG9mIHBpbm5lZCBidWZmZXJzIGZvcndhcmRlZCBieSBhbiBlYXJsaWVy CisgKiBvcGVyYXRpb24gdGhhdCB3YXMgc3BsaXQuICBPbiBleGl0LCBpdCBpcyB0aGUgbnVtYmVy IGZvcndhcmRlZCBieSB0aGlzIGNhbGwsCisgKiB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvIHRo ZSBmb2xsb3dpbmcgY2FsbCB3aGVuIGNvbnRpbnVpbmcgdG8gcmVhZCB0aGUKKyAqIHNhbWUgc2Vx dWVuY2Ugb2YgYmxvY2tzLCBhbG9uZyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGJ1ZmZlcnMuCisg KgorICogV2hlbiBidWZmZXJzIGFyZSBmb3J3YXJkZWQsIGFzIHJlcG9ydGVkIGJ5ICpucGlubmVk LCB0aGUgY2FsbGVyIG11c3QgZWl0aGVyCisgKiBzdGFydCBhIG5ldyBJL08gYmVnaW5uaW5nIGF0 IHRoZSBibG9jayBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGJsb2NrcworICogYWNjZXB0ZWQg YnkgdGhpcyBjYWxsICgqbmJsb2NrcyBvbiBleGl0KSBhbmQgcGFzcyB0aG9zZSBidWZmZXJzIGJh Y2sgaW4gaGVhZAorICogcG9zaXRpb24sIG9yIHJlbGVhc2UgdGhlbSBpZiBpdCBjaG9vc2VzIG5v dCB0by4gIFRoZXkgYXJlIGxvY2F0ZWQgaW4gdGhlCisgKiBidWZmZXJzIGFycmF5IGJlZ2lubmlu ZyBhdCBpbmRleCAqbmJsb2NrcyAob24gZXhpdCkuICBJdCBzaG91bGRuJ3QgbWFrZSBhbnkKKyAq IG90aGVyIHVzZSBvZiBvciBhc3N1bXB0aW9ucyBhYm91dCBmb3J3YXJkZWQgYnVmZmVycy4KICAq CiAgKiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgbm8gSS9PIGlzIG5lY2Vzc2FyeSBhbmQgdGhlIGJ1 ZmZlcnMgY292ZXJlZCBieQogICogKm5ibG9ja3Mgb24gZXhpdCBhcmUgdmFsaWQgYW5kIHJlYWR5 IHRvIGJlIGFjY2Vzc2VkLiAgSWYgdHJ1ZSBpcyByZXR1cm5lZCwKQEAgLTE2MTAsOSArMTYyNCwx MCBAQCBTdGFydFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCiAJ CQkJIEJ1ZmZlciAqYnVmZmVycywKIAkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQkJIGlu dCAqbmJsb2NrcywKKwkJCQkgaW50ICpucGlubmVkLAogCQkJCSBpbnQgZmxhZ3MpCiB7Ci0JcmV0 dXJuIFN0YXJ0UmVhZEJ1ZmZlcnNJbXBsKG9wZXJhdGlvbiwgYnVmZmVycywgYmxvY2tOdW0sIG5i bG9ja3MsIGZsYWdzLAorCXJldHVybiBTdGFydFJlYWRCdWZmZXJzSW1wbChvcGVyYXRpb24sIGJ1 ZmZlcnMsIGJsb2NrTnVtLCBuYmxvY2tzLCBucGlubmVkLCBmbGFncywKIAkJCQkJCQkJdHJ1ZSAv KiBleHBlY3QgZm9yd2FyZGVkIGJ1ZmZlcnMgKi8gKTsKIH0KIApAQCAtMTYzMSw5ICsxNjQ2LDEw IEBAIFN0YXJ0UmVhZEJ1ZmZlcihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAogCQkJ CWludCBmbGFncykKIHsKIAlpbnQJCQluYmxvY2tzID0gMTsKKwlpbnQJCQlucGlubmVkID0gMDsK IAlib29sCQlyZXN1bHQ7CiAKLQlyZXN1bHQgPSBTdGFydFJlYWRCdWZmZXJzSW1wbChvcGVyYXRp b24sIGJ1ZmZlciwgYmxvY2tudW0sICZuYmxvY2tzLCBmbGFncywKKwlyZXN1bHQgPSBTdGFydFJl YWRCdWZmZXJzSW1wbChvcGVyYXRpb24sIGJ1ZmZlciwgYmxvY2tudW0sICZuYmxvY2tzLCAmbnBp bm5lZCwgZmxhZ3MsCiAJCQkJCQkJCSAgZmFsc2UgLyogc2luZ2xlIGJsb2NrLCBubyBmb3J3YXJk aW5nICovICk7CiAJQXNzZXJ0KG5ibG9ja3MgPT0gMSk7CQkvKiBzaW5nbGUgYmxvY2sgY2FuJ3Qg YmUgc2hvcnQgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNjgzN2IzNWZjNmQuLjI2MmRjNDI2 MmQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTI1MCw2ICsyNTAsNyBAQCBleHRlcm4gYm9vbCBT dGFydFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCiAJCQkJCQkJ IEJ1ZmZlciAqYnVmZmVycywKIAkJCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQkJCQkJ IGludCAqbmJsb2NrcywKKwkJCQkJCQkgaW50ICpucGlubmVkLAogCQkJCQkJCSBpbnQgZmxhZ3Mp OwogZXh0ZXJuIGJvb2wgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlv LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKaW5kZXggMzVlZmJhMWE1 ZTMuLmU3YzQ4NjQxMzZjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfYWlvLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC03 MDksNiArNzA5LDcgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJRGF0dW0JICAg KmJ1ZmZlcnNfZGF0dW07CiAJYm9vbAkgICAqaW9fcmVxZHM7CiAJaW50CQkgICAqbmJsb2Nrc19w ZXJfaW87CisJaW50CQkJbnBpbm5lZDsKIAogCUFzc2VydChuYmxvY2tzID4gMCk7CiAKQEAgLTcy NCw2ICs3MjUsMTUgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmVsID0gcmVs YXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAlzbWdyID0gUmVsYXRpb25HZXRT bWdyKHJlbCk7CiAKKwkvKgorCSAqIFBpbnMgbWlnaHQgYmUgZm9yd2FyZGVkIGJldHdlZW4gY2Fs bHMsIGlmIElPcyBhcmUgc3BsaXQgYWZ0ZXIgcGlucyBhcmUKKwkgKiBvYnRhaW5lZC4gIFN1Y2gg YnVmZmVycyB3aWxsIGJlIHByb3ZpZGVkIHRvIHRoZSBuZXh0IGNhbGwgaW4gdGhlCisJICogYnVm ZmVycyBhcnJheSwgYW5kIHRoZWlyIGNvdW50IHdpbGwgYmUgY2FycmllciBiZXR3ZWVuIGNhbGxz IGluIHRoaXMKKwkgKiB2YXJpYWJsZS4gKE9ubHkgaWYgd2UgZGVjaWRlZCB0byBnaXZlIHVwIHRo ZSBsb29wIGJlbG93IHdvdWxkIHdlIG5lZWQKKwkgKiB0byBjb25zdWx0IHRoaXMsIHRvIHVucGlu IHRoZW0uKQorCSAqLworCW5waW5uZWQgPSAwOworCiAJLyoKIAkgKiBEbyBTdGFydFJlYWRCdWZm ZXJzKCkgdW50aWwgSU8gZm9yIGFsbCB0aGUgcmVxdWlyZWQgYmxvY2tzIGhhcyBiZWVuCiAJICog c3RhcnRlZCAoaWYgcmVxdWlyZWQpLgpAQCAtNzQ0LDYgKzc1NCw3IEBAIHJlYWRfYnVmZmVycyhQ R19GVU5DVElPTl9BUkdTKQogCQkJCQkJCQkJCSAgJmJ1ZmZlcnNbbmJsb2Nrc19kb25lXSwKIAkJ CQkJCQkJCQkgIHN0YXJ0YmxvY2sgKyBuYmxvY2tzX2RvbmUsCiAJCQkJCQkJCQkJICAmbmJsb2Nr c190aGlzX2lvLAorCQkJCQkJCQkJCSAgJm5waW5uZWQsCiAJCQkJCQkJCQkJICAwKTsKIAkJbmJs b2Nrc19wZXJfaW9bbmlvc10gPSBuYmxvY2tzX3RoaXNfaW87CiAJCW5pb3MrKzsKLS0gCjIuNTMu MAoK --000000000000a22826064f258dfe--