Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sQfHe-00B3CF-C6 for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Jul 2024 03:43:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sQfHb-000pOf-F5 for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Jul 2024 03:43:19 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sQfHa-000pMe-Rc for pgsql-hackers@lists.postgresql.org; Mon, 08 Jul 2024 03:43:19 +0000 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sQfHX-000wvT-Ue for pgsql-hackers@lists.postgresql.org; Mon, 08 Jul 2024 03:43:17 +0000 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2ee92f7137bso27324271fa.1 for ; Sun, 07 Jul 2024 20:43:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720410194; x=1721014994; 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=86qLoJvHD6Eb+MYBxnhyObbrHDLNBi7HzhvhEQSRBAg=; b=BOP0q1hxE6JFiVquiVX9to8F30Ly0fxlCjaHjYssWady98ni5gIxe/iYwQfTQMF8yD IOtHIUYZOE2sWHm2X/NTKeXU0rzi3eaLDxcEVdkwx8uyywxONTuCqN6t1pdCJWjj0Y0U qgLXYOgtBiZdjHQEbDt4bXrzhOgZFkmWgP456xnuZwe9SZBjO43AewAyz3s/ZBK9Iv7m jlZgLrlsAIJhAP32bg33wyhvVQ6kVOR/R9flWMZ0PBrD5aSukQeinifSqNN5DuYaiMqz ZVDCOT1hpI++oFq2zm9xA5JZ0UrahFvDzs715VOxwtHeuggV2XdaYL4BAGWdFGecCdG5 bD7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720410194; x=1721014994; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=86qLoJvHD6Eb+MYBxnhyObbrHDLNBi7HzhvhEQSRBAg=; b=NPp9ULG+IjkrrKxHWMHXdEmEPsYydlN3olxoMUgcPr4V2UGC1NCaEXYBxysZ7DP5B9 BFQWzkD4ycaZXhZ1uyRrSK05AlbMk9ejgosL2ugvzTZ/FL2Q5KKNejA4/PrACeULa0Vd pJNnOBOWhAJ1UdhVYhSRwI4tyvQMWxbP0yZulObrMv5/IJcmKJUrFW2jmcMwHaWQ41qQ vYT3zQX7ZvJc9YgU52uUY4SxgeKhHWuUZOuBwf5PIFH60C7GAojgcbC30nngvygIT33S 2uFniYqqdhB57ZmldvgN9cay5oqP8KLsFierHgsrsvDhiUFMQIsJUUZg55LtUPKp/7AC 4MKw== X-Forwarded-Encrypted: i=1; AJvYcCXOhMdAgazJmJD0To2zBNhdRPFacoBgBLpmZsa5Z+BfydnaA9YgwVBapT+qwGFkNTWPXAvc6XsyBP0j9CgGxabSSOoxIHfdqiBL1jyGs1ByEhz8 X-Gm-Message-State: AOJu0YxaE7kOlKVMC5vw5paT4kGzHefBJ1j82Ct+COFxTTOur4xDfZqv N2Vcbmc8MBft8VFdnPTf8/Wen16m45cFMknKfqZHd2VZJb7ohgT+0RKkpVQgEMlvoT8MROD+gbh 7eAorZFUlIN2NNO1bhDGjKtEOMaw= X-Google-Smtp-Source: AGHT+IGjDyi2OxbzuccxtUlIVSLdNZdSsq/WGeBv5BSG3Xi5ugwZvQAPOrQsp61IpDrPCfK1WWSkDrogZWGzlQs2XNE= X-Received: by 2002:a2e:a58a:0:b0:2ec:5a13:e19c with SMTP id 38308e7fff4ca-2ee8ed933e0mr107793811fa.17.1720410193923; Sun, 07 Jul 2024 20:43:13 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: David Rowley Date: Mon, 8 Jul 2024 15:43:01 +1200 Message-ID: Subject: Re: Parallel Bitmap Heap Scan reports per-worker stats in EXPLAIN ANALYZE To: Tomas Vondra Cc: Dilip Kumar , David Geier , PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000007a2bda061cb436a3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007a2bda061cb436a3 Content-Type: text/plain; charset="UTF-8" On Sun, 18 Feb 2024 at 11:31, Tomas Vondra wrote: > 2) Leader vs. worker counters > > It seems to me this does nothing to add the per-worker values from "Heap > Blocks" into the leader, which means we get stuff like this: > > Heap Blocks: exact=102 lossy=10995 > Worker 0: actual time=50.559..209.773 rows=215253 loops=1 > Heap Blocks: exact=207 lossy=19354 > Worker 1: actual time=50.543..211.387 rows=162934 loops=1 > Heap Blocks: exact=161 lossy=14636 > > I think this is wrong / confusing, and inconsistent with what we do for > other nodes. Are you able to share which other nodes that you mean here? I used the following to compare to Sort and Memoize, and as far as I see, the behaviour matches with the attached v8 patch. Is there some inconsistency here that I'm not seeing? create table mill (a int); create index on mill(a); insert into mill select x%1000 from generate_Series(1,10000000)x; vacuum analyze mill; create table big (a int primary key); insert into big select x from generate_series(1,10000000)x; create table probe (a int); insert into probe select 1 from generate_Series(1,1000000); analyze big analyze probe; set parallel_tuple_cost=0; set parallel_setup_cost=0; set enable_indexscan=0; -- compare Parallel Bitmap Heap Scan with Memoize and Sort. -- each includes "Worker N:" with stats for the operation. explain (analyze) select * from mill where a < 100; explain (analyze) select * from big b inner join probe p on b.a=p.a; explain (analyze) select * from probe order by a; -- each includes "Worker N:" with stats for the operation -- also includes actual time and rows for each worker. explain (analyze, verbose) select * from mill where a < 100; explain (analyze, verbose) select * from big b inner join probe p on b.a=p.a; explain (analyze, verbose) select * from probe order by a; -- each includes "Worker N:" with stats for the operation -- shows a single total buffers which includes leader and worker buffers. explain (analyze, buffers) select * from mill where a < 100; explain (analyze, buffers) select * from big b inner join probe p on b.a=p.a; explain (analyze, buffers) select * from probe order by a; -- each includes "Worker N:" with stats for the operation -- also includes actual time and rows for each worker. -- shows a single total buffers which includes leader and worker buffers. -- shows buffer counts for each worker process explain (analyze, buffers, verbose) select * from mill where a < 100; explain (analyze, buffers, verbose) select * from big b inner join probe p on b.a=p.a; explain (analyze, buffers, verbose) select * from probe order by a; If we did want to adjust things to show the totals for each worker rather than the stats for the leader, what would Sort Method show if one worker spilled to disk and another did not? David --0000000000007a2bda061cb436a3 Content-Type: application/octet-stream; name="v8-0001-Show-Parallel-Bitmap-Heap-Scan-worker-stats-in-EX.patch" Content-Disposition: attachment; filename="v8-0001-Show-Parallel-Bitmap-Heap-Scan-worker-stats-in-EX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lycflxdp0 RnJvbSA1Y2QwZjhiY2IwNTE4ZGRjOTk5YTljZmM5YWE0ODhiMDgxNzIyOGRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCA4IE5vdiAyMDIyIDE5OjQwOjMxICswMTAwClN1YmplY3Q6IFtQQVRDSCB2OF0gU2hv dyBQYXJhbGxlbCBCaXRtYXAgSGVhcCBTY2FuIHdvcmtlciBzdGF0cyBpbiBFWFBMQUlOCiBBTkFM WVpFCgpOb2RlcyBsaWtlIE1lbW9pemUgcmVwb3J0IHRoZSBjYWNoZSBzdGF0cyBmb3IgZWFjaCBw YXJhbGxlbCB3b3JrZXIsIHNvIGl0Cm1ha2VzIHNlbnNlIHRvIHNob3cgdGhlIGV4YWN0IGFuZCBs b3NzeSBwYWdlcyBpbiBQYXJhbGxlbCBCaXRtYXAgSGVhcCBTY2FuCmluIGEgc2ltaWxhciB3YXku ICBMaWtld2lzZSwgU29ydCBzaG93cyB0aGUgbWV0aG9kIGFuZCBtZW1vcnkgdXNlZCBmb3IKZWFj aCB3b3JrZXIuCgpBdXRob3I6IERhdmlkIEdlaWVyIDxnZWlkYXYucGdAZ21haWwuY29tPgpBdXRo b3I6IEhlaWtraSBMaW5uYWthbmdhcyA8aGxpbm5ha2FAaWtpLmZpPgpBdXRob3I6IERvbmdoYW5n IExpbiA8ZG9uZ2hhbmdsaW5AZ21haWwuY29tPgpBdXRob3I6IEFsZW5hIFJ5YmFraW5hIDxsZW5h LnJpYmFja2luYUB5YW5kZXgucnU+CkF1dGhvcjogRGF2aWQgUm93bGV5IDxkZ3Jvd2xleW1sQGdt YWlsLmNvbT4KUmV2aWV3ZWQtYnk6IERtaXRyeSBEb2xnb3YgPDllcnRoYWxpb242QGdtYWlsLmNv bT4KUmV2aWV3ZWQtYnk6IE1pY2hhZWwgQ2hyaXN0b2ZpZGVzIDxtaWNoYWVsQHBnbXVzdGFyZC5j b20+ClJldmlld2VkLWJ5OiBSb2JlcnQgSGFhcyA8cm9iZXJ0bWhhYXNAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogRGlsaXAgS3VtYXIgPGRpbGlwYmFsYXV0QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6 IFRvbWFzIFZvbmRyYSA8dG9tYXMudm9uZHJhQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5 OiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21haWwuY29tPgpSZXZpZXdlZC1i eTogRG9uZ2hhbmcgTGluIDxkb25naGFuZ2xpbkBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBNYXNh aGlybyBJa2VkYSA8TWFzYWhpcm8uSWtlZGFAbnR0ZGF0YS5jb20+CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vYjNkODA5NjEtYzJlNS0zOGNjLTZhMzItNjE4ODZjZGY3NjZkJTQwZ21h aWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgfCAg NTggKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgICAg ICB8ICAgMyArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSGVhcHNjYW4uYyB8IDEw NSArKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlQml0bWFw SGVhcHNjYW4uaCB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAg ICAgICB8ICAzNSArKysrKysrLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICAgfCAgIDIgKwogNiBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKSwgMjMgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDZkZWZkMjZkZjUuLjExOGRiMTI5 MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTIwMTAsOCArMjAxMCw3IEBAIEV4cGxhaW5O b2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+ cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZp bHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAoZXMtPmFuYWx5 emUpCi0JCQkJc2hvd190aWRiaXRtYXBfaW5mbygoQml0bWFwSGVhcFNjYW5TdGF0ZSAqKSBwbGFu c3RhdGUsIGVzKTsKKwkJCXNob3dfdGlkYml0bWFwX2luZm8oKEJpdG1hcEhlYXBTY2FuU3RhdGUg KikgcGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX1NhbXBsZVNjYW46CiAJCQlz aG93X3RhYmxlc2FtcGxlKCgoU2FtcGxlU2NhbiAqKSBwbGFuKS0+dGFibGVzYW1wbGUsCkBAIC0z NjI4LDMxICszNjI3LDcwIEBAIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwg RXhwbGFpblN0YXRlICplcykKIH0KIAogLyoKLSAqIElmIGl0J3MgRVhQTEFJTiBBTkFMWVpFLCBz aG93IGV4YWN0L2xvc3N5IHBhZ2VzIGZvciBhIEJpdG1hcEhlYXBTY2FuIG5vZGUKKyAqIFNob3cg ZXhhY3QvbG9zc3kgcGFnZXMgZm9yIGEgQml0bWFwSGVhcFNjYW4gbm9kZQogICovCiBzdGF0aWMg dm9pZAogc2hvd190aWRiaXRtYXBfaW5mbyhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiB7CisJaWYgKCFlcy0+YW5hbHl6ZSkKKwkJcmV0dXJuOworCiAJ aWYgKGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKIAl7CiAJCUV4cGxhaW5Qcm9w ZXJ0eVVJbnRlZ2VyKCJFeGFjdCBIZWFwIEJsb2NrcyIsIE5VTEwsCi0JCQkJCQkJCXBsYW5zdGF0 ZS0+ZXhhY3RfcGFnZXMsIGVzKTsKKwkJCQkJCQkJcGxhbnN0YXRlLT5zdGF0cy5leGFjdF9wYWdl cywgZXMpOwogCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiTG9zc3kgSGVhcCBCbG9ja3MiLCBO VUxMLAotCQkJCQkJCQlwbGFuc3RhdGUtPmxvc3N5X3BhZ2VzLCBlcyk7CisJCQkJCQkJCXBsYW5z dGF0ZS0+c3RhdHMubG9zc3lfcGFnZXMsIGVzKTsKIAl9CiAJZWxzZQogCXsKLQkJaWYgKHBsYW5z dGF0ZS0+ZXhhY3RfcGFnZXMgPiAwIHx8IHBsYW5zdGF0ZS0+bG9zc3lfcGFnZXMgPiAwKQorCQlp ZiAocGxhbnN0YXRlLT5zdGF0cy5leGFjdF9wYWdlcyA+IDAgfHwgcGxhbnN0YXRlLT5zdGF0cy5s b3NzeV9wYWdlcyA+IDApCiAJCXsKIAkJCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKIAkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoZXMtPnN0ciwgIkhlYXAgQmxvY2tzOiIpOwotCQkJaWYgKHBsYW5z dGF0ZS0+ZXhhY3RfcGFnZXMgPiAwKQotCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiBl eGFjdD0iIFVJTlQ2NF9GT1JNQVQsIHBsYW5zdGF0ZS0+ZXhhY3RfcGFnZXMpOwotCQkJaWYgKHBs YW5zdGF0ZS0+bG9zc3lfcGFnZXMgPiAwKQotCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwg IiBsb3NzeT0iIFVJTlQ2NF9GT1JNQVQsIHBsYW5zdGF0ZS0+bG9zc3lfcGFnZXMpOworCQkJaWYg KHBsYW5zdGF0ZS0+c3RhdHMuZXhhY3RfcGFnZXMgPiAwKQorCQkJCWFwcGVuZFN0cmluZ0luZm8o ZXMtPnN0ciwgIiBleGFjdD0iIFVJTlQ2NF9GT1JNQVQsIHBsYW5zdGF0ZS0+c3RhdHMuZXhhY3Rf cGFnZXMpOworCQkJaWYgKHBsYW5zdGF0ZS0+c3RhdHMubG9zc3lfcGFnZXMgPiAwKQorCQkJCWFw cGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiBsb3NzeT0iIFVJTlQ2NF9GT1JNQVQsIHBsYW5zdGF0 ZS0+c3RhdHMubG9zc3lfcGFnZXMpOwogCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoZXMtPnN0ciwg J1xuJyk7CiAJCX0KIAl9CisKKwkvKiBEaXNwbGF5IHN0YXRzIGZvciBlYWNoIHBhcmFsbGVsIHdv cmtlciAqLworCWlmIChwbGFuc3RhdGUtPnBzdGF0ZSAhPSBOVUxMKQorCXsKKwkJZm9yIChpbnQg biA9IDA7IG4gPCBwbGFuc3RhdGUtPnNpbnN0cnVtZW50LT5udW1fd29ya2VyczsgbisrKQorCQl7 CisJCQlCaXRtYXBIZWFwU2Nhbkluc3RydW1lbnRhdGlvbiAqc2kgPSAmcGxhbnN0YXRlLT5zaW5z dHJ1bWVudC0+c2luc3RydW1lbnRbbl07CisKKwkJCWlmIChzaS0+ZXhhY3RfcGFnZXMgPT0gMCAm JiBzaS0+bG9zc3lfcGFnZXMgPT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGVzLT53b3Jr ZXJzX3N0YXRlKQorCQkJCUV4cGxhaW5PcGVuV29ya2VyKG4sIGVzKTsKKworCQkJaWYgKGVzLT5m b3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwkJCXsKKwkJCQlFeHBsYWluSW5kZW50VGV4 dChlcyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcy0+c3RyLCAiSGVhcCBCbG9ja3M6 Iik7CisJCQkJaWYgKHNpLT5leGFjdF9wYWdlcyA+IDApCisJCQkJCWFwcGVuZFN0cmluZ0luZm8o ZXMtPnN0ciwgIiBleGFjdD0iIFVJTlQ2NF9GT1JNQVQsIHNpLT5leGFjdF9wYWdlcyk7CisJCQkJ aWYgKHNpLT5sb3NzeV9wYWdlcyA+IDApCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwg IiBsb3NzeT0iIFVJTlQ2NF9GT1JNQVQsIHNpLT5sb3NzeV9wYWdlcyk7CisJCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoZXMtPnN0ciwgJ1xuJyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhw bGFpblByb3BlcnR5VUludGVnZXIoIkV4YWN0IEhlYXAgQmxvY2tzIiwgTlVMTCwKKwkJCQkJCQkJ CQlzaS0+ZXhhY3RfcGFnZXMsIGVzKTsKKwkJCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiTG9z c3kgSGVhcCBCbG9ja3MiLCBOVUxMLAorCQkJCQkJCQkJCXNpLT5sb3NzeV9wYWdlcywgZXMpOwor CQkJfQorCisJCQlpZiAoZXMtPndvcmtlcnNfc3RhdGUpCisJCQkJRXhwbGFpbkNsb3NlV29ya2Vy KG4sIGVzKTsKKwkJfQorCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMK aW5kZXggOGM1M2QxODM0ZS4uYmZiMzQxOWVmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFs bGVsLmMKQEAgLTEwNzYsNiArMTA3Niw5IEBAIEV4ZWNQYXJhbGxlbFJldHJpZXZlSW5zdHJ1bWVu dGF0aW9uKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQljYXNlIFRfTWVtb2l6ZVN0YXRlOgogCQkJ RXhlY01lbW9pemVSZXRyaWV2ZUluc3RydW1lbnRhdGlvbigoTWVtb2l6ZVN0YXRlICopIHBsYW5z dGF0ZSk7CiAJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuU3RhdGU6CisJCQlFeGVj Qml0bWFwSGVhcFJldHJpZXZlSW5zdHJ1bWVudGF0aW9uKChCaXRtYXBIZWFwU2NhblN0YXRlICop IHBsYW5zdGF0ZSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKaW5kZXggNmI0OGE2ZDgzNS4uM2M2 M2JkZDkzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBz Y2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmMKQEAg LTIzNiw5ICsyMzYsOSBAQCBCaXRtYXBIZWFwTmV4dChCaXRtYXBIZWFwU2NhblN0YXRlICpub2Rl KQogCQkJdmFsaWRfYmxvY2sgPSB0YWJsZV9zY2FuX2JpdG1hcF9uZXh0X2Jsb2NrKHNjYW4sIHRi bXJlcyk7CiAKIAkJCWlmICh0Ym1yZXMtPm50dXBsZXMgPj0gMCkKLQkJCQlub2RlLT5leGFjdF9w YWdlcysrOworCQkJCW5vZGUtPnN0YXRzLmV4YWN0X3BhZ2VzKys7CiAJCQllbHNlCi0JCQkJbm9k ZS0+bG9zc3lfcGFnZXMrKzsKKwkJCQlub2RlLT5zdGF0cy5sb3NzeV9wYWdlcysrOwogCiAJCQlp ZiAoIXZhbGlkX2Jsb2NrKQogCQkJewpAQCAtNjI3LDYgKzYyNywyOSBAQCBFeGVjRW5kQml0bWFw SGVhcFNjYW4oQml0bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSkKIHsKIAlUYWJsZVNjYW5EZXNjIHNj YW5EZXNjOwogCisJLyoKKwkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdvcmtlciwgY29weSB0 aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKKwkgKiB3b3JrZXIgYmFjayBpbnRvIHNoYXJl ZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBtYWluCisJICogcHJv Y2VzcyB0byByZXBvcnQgaW4gRVhQTEFJTiBBTkFMWVpFLgorCSAqLworCWlmIChub2RlLT5zaW5z dHJ1bWVudCAhPSBOVUxMICYmIElzUGFyYWxsZWxXb3JrZXIoKSkKKwl7CisJCUJpdG1hcEhlYXBT Y2FuSW5zdHJ1bWVudGF0aW9uICpzaTsKKworCQlBc3NlcnQoUGFyYWxsZWxXb3JrZXJOdW1iZXIg PD0gbm9kZS0+c2luc3RydW1lbnQtPm51bV93b3JrZXJzKTsKKwkJc2kgPSAmbm9kZS0+c2luc3Ry dW1lbnQtPnNpbnN0cnVtZW50W1BhcmFsbGVsV29ya2VyTnVtYmVyXTsKKworCQkvKgorCQkgKiBI ZXJlIHdlIGFjY3VtdWxhdGUgdGhlIHN0YXRzIHJhdGhlciB0aGFuIHBlcmZvcm1pbmcgbWVtY3B5 IG9uCisJCSAqIG5vZGUtPnN0YXRzIGludG8gc2kuICBXaGVuIGEgR2F0aGVyL0dhdGhlck1lcmdl IG5vZGUgZmluaXNoZXMgaXQKKwkJICogd2lsbCBwZXJmb3JtIHBsYW5uZXIgc2h1dGRvd24gb24g dGhlIHdvcmtlcnMuICBPbiByZXNjYW4gaXQgd2lsbAorCQkgKiBzcGluIHVwIG5ldyB3b3JrZXJz IHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBCaXRtYXBIZWFwU2NhblN0YXRlIGFuZAorCQkgKiB6ZXJv ZWQgc3RhdHMuCisJCSAqLworCQlzaS0+ZXhhY3RfcGFnZXMgKz0gbm9kZS0+c3RhdHMuZXhhY3Rf cGFnZXM7CisJCXNpLT5sb3NzeV9wYWdlcyArPSBub2RlLT5zdGF0cy5sb3NzeV9wYWdlczsKKwl9 CisKIAkvKgogCSAqIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQogCSAqLwpAQCAt Njk0LDggKzcxNywxMCBAQCBFeGVjSW5pdEJpdG1hcEhlYXBTY2FuKEJpdG1hcEhlYXBTY2FuICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlzY2Fuc3RhdGUtPnRibWl0ZXJhdG9y ID0gTlVMTDsKIAlzY2Fuc3RhdGUtPnRibXJlcyA9IE5VTEw7CiAJc2NhbnN0YXRlLT5wdm1idWZm ZXIgPSBJbnZhbGlkQnVmZmVyOwotCXNjYW5zdGF0ZS0+ZXhhY3RfcGFnZXMgPSAwOwotCXNjYW5z dGF0ZS0+bG9zc3lfcGFnZXMgPSAwOworCisJLyogWmVybyB0aGUgc3RhdGlzdGljcyBjb3VudGVy cyAqLworCW1lbXNldCgmc2NhbnN0YXRlLT5zdGF0cywgMCwgc2l6ZW9mKEJpdG1hcEhlYXBTY2Fu SW5zdHJ1bWVudGF0aW9uKSk7CisKIAlzY2Fuc3RhdGUtPnByZWZldGNoX2l0ZXJhdG9yID0gTlVM TDsKIAlzY2Fuc3RhdGUtPnByZWZldGNoX3BhZ2VzID0gMDsKIAlzY2Fuc3RhdGUtPnByZWZldGNo X3RhcmdldCA9IDA7CkBAIC04MDMsNyArODI4LDE4IEBAIHZvaWQKIEV4ZWNCaXRtYXBIZWFwRXN0 aW1hdGUoQml0bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJICAgUGFyYWxsZWxDb250ZXh0 ICpwY3h0KQogewotCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgc2l6 ZW9mKFBhcmFsbGVsQml0bWFwSGVhcFN0YXRlKSk7CisJU2l6ZQkJc2l6ZTsKKworCXNpemUgPSBN QVhBTElHTihzaXplb2YoUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUpKTsKKworCS8qIGFjY291bnQg Zm9yIGluc3RydW1lbnRhdGlvbiwgaWYgcmVxdWlyZWQgKi8KKwlpZiAobm9kZS0+c3MucHMuaW5z dHJ1bWVudCAmJiBwY3h0LT5ud29ya2VycyA+IDApCisJeworCQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgb2Zmc2V0b2YoU2hhcmVkQml0bWFwSGVhcEluc3RydW1lbnRhdGlvbiwgc2luc3RydW1lbnQp KTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHBjeHQtPm53b3JrZXJzLCBzaXpl b2YoQml0bWFwSGVhcFNjYW5JbnN0cnVtZW50YXRpb24pKSk7CisJfQorCisJc2htX3RvY19lc3Rp bWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBzaXplKTsKIAlzaG1fdG9jX2VzdGltYXRlX2tl eXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CiB9CiAKQEAgLTgxOCwxMyArODU0LDI3IEBAIEV4ZWNC aXRtYXBIZWFwSW5pdGlhbGl6ZURTTShCaXRtYXBIZWFwU2NhblN0YXRlICpub2RlLAogCQkJCQkJ CVBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIHsKIAlQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZSAqcHN0 YXRlOworCVNoYXJlZEJpdG1hcEhlYXBJbnN0cnVtZW50YXRpb24gKnNpbnN0cnVtZW50ID0gTlVM TDsKIAlkc2FfYXJlYSAgICpkc2EgPSBub2RlLT5zcy5wcy5zdGF0ZS0+ZXNfcXVlcnlfZHNhOwor CWNoYXIJICAgKnB0cjsKKwlTaXplCQlzaXplOwogCiAJLyogSWYgdGhlcmUncyBubyBEU0EsIHRo ZXJlIGFyZSBubyB3b3JrZXJzOyBpbml0aWFsaXplIG5vdGhpbmcuICovCiAJaWYgKGRzYSA9PSBO VUxMKQogCQlyZXR1cm47CiAKLQlwc3RhdGUgPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywg c2l6ZW9mKFBhcmFsbGVsQml0bWFwSGVhcFN0YXRlKSk7CisJc2l6ZSA9IE1BWEFMSUdOKHNpemVv ZihQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZSkpOworCWlmIChub2RlLT5zcy5wcy5pbnN0cnVtZW50 ICYmIHBjeHQtPm53b3JrZXJzID4gMCkKKwl7CisJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBvZmZz ZXRvZihTaGFyZWRCaXRtYXBIZWFwSW5zdHJ1bWVudGF0aW9uLCBzaW5zdHJ1bWVudCkpOworCQlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUocGN4dC0+bndvcmtlcnMsIHNpemVvZihCaXRt YXBIZWFwU2Nhbkluc3RydW1lbnRhdGlvbikpKTsKKwl9CisKKwlwdHIgPSBzaG1fdG9jX2FsbG9j YXRlKHBjeHQtPnRvYywgc2l6ZSk7CisJcHN0YXRlID0gKFBhcmFsbGVsQml0bWFwSGVhcFN0YXRl ICopIHB0cjsKKwlwdHIgKz0gTUFYQUxJR04oc2l6ZW9mKFBhcmFsbGVsQml0bWFwSGVhcFN0YXRl KSk7CisJaWYgKG5vZGUtPnNzLnBzLmluc3RydW1lbnQgJiYgcGN4dC0+bndvcmtlcnMgPiAwKQor CQlzaW5zdHJ1bWVudCA9IChTaGFyZWRCaXRtYXBIZWFwSW5zdHJ1bWVudGF0aW9uICopIHB0cjsK IAogCXBzdGF0ZS0+dGJtaXRlcmF0b3IgPSAwOwogCXBzdGF0ZS0+cHJlZmV0Y2hfaXRlcmF0b3Ig PSAwOwpAQCAtODM3LDggKzg4NywxOCBAQCBFeGVjQml0bWFwSGVhcEluaXRpYWxpemVEU00oQml0 bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSwKIAogCUNvbmRpdGlvblZhcmlhYmxlSW5pdCgmcHN0YXRl LT5jdik7CiAKKwlpZiAoc2luc3RydW1lbnQpCisJeworCQlzaW5zdHJ1bWVudC0+bnVtX3dvcmtl cnMgPSBwY3h0LT5ud29ya2VyczsKKworCQkvKiBlbnN1cmUgYW55IHVuZmlsbGVkIHNsb3RzIHdp bGwgY29udGFpbiB6ZXJvZXMgKi8KKwkJbWVtc2V0KHNpbnN0cnVtZW50LT5zaW5zdHJ1bWVudCwg MCwKKwkJCSAgIHBjeHQtPm53b3JrZXJzICogc2l6ZW9mKEJpdG1hcEhlYXBTY2FuSW5zdHJ1bWVu dGF0aW9uKSk7CisJfQorCiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5zcy5wcy5w bGFuLT5wbGFuX25vZGVfaWQsIHBzdGF0ZSk7CiAJbm9kZS0+cHN0YXRlID0gcHN0YXRlOworCW5v ZGUtPnNpbnN0cnVtZW50ID0gc2luc3RydW1lbnQ7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg4MCwx MCArOTQwLDM3IEBAIHZvaWQKIEV4ZWNCaXRtYXBIZWFwSW5pdGlhbGl6ZVdvcmtlcihCaXRtYXBI ZWFwU2NhblN0YXRlICpub2RlLAogCQkJCQkJCSAgIFBhcmFsbGVsV29ya2VyQ29udGV4dCAqcHdj eHQpCiB7Ci0JUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUgKnBzdGF0ZTsKKwljaGFyCSAgICpwdHI7 CiAKIAlBc3NlcnQobm9kZS0+c3MucHMuc3RhdGUtPmVzX3F1ZXJ5X2RzYSAhPSBOVUxMKTsKIAot CXBzdGF0ZSA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPnNzLnBzLnBsYW4tPnBs YW5fbm9kZV9pZCwgZmFsc2UpOwotCW5vZGUtPnBzdGF0ZSA9IHBzdGF0ZTsKKwlwdHIgPSBzaG1f dG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIGZh bHNlKTsKKworCW5vZGUtPnBzdGF0ZSA9IChQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZSAqKSBwdHI7 CisJcHRyICs9IE1BWEFMSUdOKHNpemVvZihQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZSkpOworCisJ aWYgKG5vZGUtPnNzLnBzLmluc3RydW1lbnQpCisJCW5vZGUtPnNpbnN0cnVtZW50ID0gKFNoYXJl ZEJpdG1hcEhlYXBJbnN0cnVtZW50YXRpb24gKikgcHRyOworfQorCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJ RXhlY0JpdG1hcEhlYXBSZXRyaWV2ZUluc3RydW1lbnRhdGlvbgorICoKKyAqCQlUcmFuc2ZlciBi aXRtYXAgaGVhcCBzY2FuIHN0YXRpc3RpY3MgZnJvbSBEU00gdG8gcHJpdmF0ZSBtZW1vcnkuCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KK3ZvaWQKK0V4ZWNCaXRtYXBIZWFwUmV0cmlldmVJbnN0cnVtZW50YXRp b24oQml0bWFwSGVhcFNjYW5TdGF0ZSAqbm9kZSkKK3sKKwlTaGFyZWRCaXRtYXBIZWFwSW5zdHJ1 bWVudGF0aW9uICpzaW5zdHJ1bWVudCA9IG5vZGUtPnNpbnN0cnVtZW50OworCVNpemUJCXNpemU7 CisKKwlpZiAoc2luc3RydW1lbnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2l6ZSA9IG9mZnNl dG9mKFNoYXJlZEJpdG1hcEhlYXBJbnN0cnVtZW50YXRpb24sIHNpbnN0cnVtZW50KQorCQkrIHNp bnN0cnVtZW50LT5udW1fd29ya2VycyAqIHNpemVvZihCaXRtYXBIZWFwU2Nhbkluc3RydW1lbnRh dGlvbik7CisKKwlub2RlLT5zaW5zdHJ1bWVudCA9IHBhbGxvYyhzaXplKTsKKwltZW1jcHkobm9k ZS0+c2luc3RydW1lbnQsIHNpbnN0cnVtZW50LCBzaXplKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL25vZGVCaXRtYXBIZWFwc2Nhbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmgKaW5kZXggZWEwMDNhOWNhYS4uNDQ2YTY2NDU5MCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUJpdG1hcEhlYXBzY2FuLmgKQEAgLTI4LDUgKzI4LDYg QEAgZXh0ZXJuIHZvaWQgRXhlY0JpdG1hcEhlYXBSZUluaXRpYWxpemVEU00oQml0bWFwSGVhcFNj YW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJCQkgIFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7CiBleHRl cm4gdm9pZCBFeGVjQml0bWFwSGVhcEluaXRpYWxpemVXb3JrZXIoQml0bWFwSGVhcFNjYW5TdGF0 ZSAqbm9kZSwKIAkJCQkJCQkJCQkgICBQYXJhbGxlbFdvcmtlckNvbnRleHQgKnB3Y3h0KTsKK2V4 dGVybiB2b2lkIEV4ZWNCaXRtYXBIZWFwUmV0cmlldmVJbnN0cnVtZW50YXRpb24oQml0bWFwSGVh cFNjYW5TdGF0ZSAqbm9kZSk7CiAKICNlbmRpZgkJCQkJCQkvKiBOT0RFQklUTUFQSEVBUFNDQU5f SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBhYmZjZDVmNTkwLi5jYWM2ODRkOWIzIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMTc0Niw2ICsxNzQ2LDE5IEBAIHR5cGVkZWYgc3RydWN0IEJp dG1hcEluZGV4U2NhblN0YXRlCiAJc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpiaXNzX1NjYW5E ZXNjOwogfSBCaXRtYXBJbmRleFNjYW5TdGF0ZTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLQorICoJ IEJpdG1hcEhlYXBTY2FuSW5zdHJ1bWVudGF0aW9uIGluZm9ybWF0aW9uCisgKgorICoJCWV4YWN0 X3BhZ2VzCQkgICB0b3RhbCBudW1iZXIgb2YgZXhhY3QgcGFnZXMgcmV0cmlldmVkCisgKgkJbG9z c3lfcGFnZXMJCSAgIHRvdGFsIG51bWJlciBvZiBsb3NzeSBwYWdlcyByZXRyaWV2ZWQKKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQml0bWFwSGVhcFNjYW5JbnN0cnVt ZW50YXRpb24KK3sKKwl1aW50NjQJCWV4YWN0X3BhZ2VzOworCXVpbnQ2NAkJbG9zc3lfcGFnZXM7 Cit9IEJpdG1hcEhlYXBTY2FuSW5zdHJ1bWVudGF0aW9uOworCiAvKiAtLS0tLS0tLS0tLS0tLS0t CiAgKgkgU2hhcmVkQml0bWFwU3RhdGUgaW5mb3JtYXRpb24KICAqCkBAIC0xNzg5LDYgKzE4MDIs MjAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUKIAlDb25kaXRpb25W YXJpYWJsZSBjdjsKIH0gUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGU7CiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqCSBJbnN0cnVtZW50YXRpb24gZGF0YSBmb3IgYSBwYXJhbGxlbCBiaXRtYXAgaGVh cCBzY2FuLgorICoKKyAqIEEgc2hhcmVkIG1lbW9yeSBzdHJ1Y3QgdGhhdCBlYWNoIHBhcmFsbGVs IHdvcmtlciBjb3BpZXMgaXRzCisgKiBCaXRtYXBIZWFwU2Nhbkluc3RydW1lbnRhdGlvbiBpbmZv cm1hdGlvbiBpbnRvIGF0IGV4ZWN1dG9yIHNodXRkb3duIHRvCisgKiBhbGxvdyB0aGUgbGVhZGVy IHRvIGRpc3BsYXkgdGhlIGluZm9ybWF0aW9uIGluIEVYUExBSU4gQU5BTFlaRS4KKyAqIC0tLS0t LS0tLS0tLS0tLS0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2hhcmVkQml0bWFwSGVhcEluc3RydW1l bnRhdGlvbgoreworCWludAkJCW51bV93b3JrZXJzOworCUJpdG1hcEhlYXBTY2FuSW5zdHJ1bWVu dGF0aW9uIHNpbnN0cnVtZW50W0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IFNoYXJlZEJpdG1h cEhlYXBJbnN0cnVtZW50YXRpb247CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBCaXRtYXBI ZWFwU2NhblN0YXRlIGluZm9ybWF0aW9uCiAgKgpAQCAtMTc5Nyw4ICsxODI0LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUKICAqCQl0Ym1pdGVyYXRvcgkJICAgaXRl cmF0b3IgZm9yIHNjYW5uaW5nIGN1cnJlbnQgcGFnZXMKICAqCQl0Ym1yZXMJCQkgICBjdXJyZW50 LXBhZ2UgZGF0YQogICoJCXB2bWJ1ZmZlcgkJICAgYnVmZmVyIGZvciB2aXNpYmlsaXR5LW1hcCBs b29rdXBzIG9mIHByZWZldGNoZWQgcGFnZXMKLSAqCQlleGFjdF9wYWdlcwkJICAgdG90YWwgbnVt YmVyIG9mIGV4YWN0IHBhZ2VzIHJldHJpZXZlZAotICoJCWxvc3N5X3BhZ2VzCQkgICB0b3RhbCBu dW1iZXIgb2YgbG9zc3kgcGFnZXMgcmV0cmlldmVkCisgKgkJc3RhdHMJCQkgICBleGVjdXRpb24g c3RhdGlzdGljcwogICoJCXByZWZldGNoX2l0ZXJhdG9yICBpdGVyYXRvciBmb3IgcHJlZmV0Y2hp bmcgYWhlYWQgb2YgY3VycmVudCBwYWdlCiAgKgkJcHJlZmV0Y2hfcGFnZXMJICAgIyBwYWdlcyBw cmVmZXRjaCBpdGVyYXRvciBpcyBhaGVhZCBvZiBjdXJyZW50CiAgKgkJcHJlZmV0Y2hfdGFyZ2V0 ICAgIGN1cnJlbnQgdGFyZ2V0IHByZWZldGNoIGRpc3RhbmNlCkBAIC0xODA3LDYgKzE4MzMsNyBA QCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZQogICoJCXNoYXJlZF90Ym1p dGVyYXRvcgkgICBzaGFyZWQgaXRlcmF0b3IKICAqCQlzaGFyZWRfcHJlZmV0Y2hfaXRlcmF0b3Ig c2hhcmVkIGl0ZXJhdG9yIGZvciBwcmVmZXRjaGluZwogICoJCXBzdGF0ZQkJCSAgIHNoYXJlZCBz dGF0ZSBmb3IgcGFyYWxsZWwgYml0bWFwIHNjYW4KKyAqCQlzaW5zdHJ1bWVudAkJICAgc3RhdGlz dGljcyBmb3IgcGFyYWxsZWwgd29ya2VycwogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiB0eXBl ZGVmIHN0cnVjdCBCaXRtYXBIZWFwU2NhblN0YXRlCkBAIC0xODE3LDggKzE4NDQsNyBAQCB0eXBl ZGVmIHN0cnVjdCBCaXRtYXBIZWFwU2NhblN0YXRlCiAJVEJNSXRlcmF0b3IgKnRibWl0ZXJhdG9y OwogCVRCTUl0ZXJhdGVSZXN1bHQgKnRibXJlczsKIAlCdWZmZXIJCXB2bWJ1ZmZlcjsKLQl1aW50 NjQJCWV4YWN0X3BhZ2VzOwotCXVpbnQ2NAkJbG9zc3lfcGFnZXM7CisJQml0bWFwSGVhcFNjYW5J bnN0cnVtZW50YXRpb24gc3RhdHM7CiAJVEJNSXRlcmF0b3IgKnByZWZldGNoX2l0ZXJhdG9yOwog CWludAkJCXByZWZldGNoX3BhZ2VzOwogCWludAkJCXByZWZldGNoX3RhcmdldDsKQEAgLTE4Mjcs NiArMTg1Myw3IEBAIHR5cGVkZWYgc3RydWN0IEJpdG1hcEhlYXBTY2FuU3RhdGUKIAlUQk1TaGFy ZWRJdGVyYXRvciAqc2hhcmVkX3RibWl0ZXJhdG9yOwogCVRCTVNoYXJlZEl0ZXJhdG9yICpzaGFy ZWRfcHJlZmV0Y2hfaXRlcmF0b3I7CiAJUGFyYWxsZWxCaXRtYXBIZWFwU3RhdGUgKnBzdGF0ZTsK KwlTaGFyZWRCaXRtYXBIZWFwSW5zdHJ1bWVudGF0aW9uICpzaW5zdHJ1bWVudDsKIH0gQml0bWFw SGVhcFNjYW5TdGF0ZTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA5MzIwZTRkODA4Li42MzVlNmQ2ZTIxIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMjYyLDYgKzI2Miw3IEBAIEJpdG1hcEFuZFBhdGgKIEJpdG1hcEFuZFN0YXRlCiBC aXRtYXBIZWFwUGF0aAogQml0bWFwSGVhcFNjYW4KK0JpdG1hcEhlYXBTY2FuSW5zdHJ1bWVudGF0 aW9uCiBCaXRtYXBIZWFwU2NhblN0YXRlCiBCaXRtYXBJbmRleFNjYW4KIEJpdG1hcEluZGV4U2Nh blN0YXRlCkBAIC0yNjAzLDYgKzI2MDQsNyBAQCBTZXRUb0RlZmF1bHQKIFNldHVwV29ya2VyUHRy VHlwZQogU2hEZXBlbmRPYmplY3RJbmZvCiBTaGFyZWRBZ2dJbmZvCitTaGFyZWRCaXRtYXBIZWFw SW5zdHJ1bWVudGF0aW9uCiBTaGFyZWRCaXRtYXBTdGF0ZQogU2hhcmVkRGVwZW5kZW5jeU9iamVj dFR5cGUKIFNoYXJlZERlcGVuZGVuY3lUeXBlCi0tIAoyLjM0LjEKCg== --0000000000007a2bda061cb436a3--