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 1smgr4-007c5P-46 for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Sep 2024 21:50:59 +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 1smgq3-004c42-9v for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Sep 2024 21:49:55 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1smgq1-004c3u-TO for pgsql-hackers@lists.postgresql.org; Fri, 06 Sep 2024 21:49:55 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1smgpv-000Vlc-Vg for pgsql-hackers@lists.postgresql.org; Fri, 06 Sep 2024 21:49:53 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 663CAE0003; Fri, 6 Sep 2024 21:49:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1725659386; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=TS2BFN68kKbGZErxI+UssO98pNOiauQ2XGiJ+VDPrq0=; b=eW+TIFMYDMJRdwvjFVq/9TUrwF7LGZbZQ/za5Xa6XFsoJu9OHGt00IAak8ehii+8mHsMr3 Ix+CxgkT6niCi7/53aeuqf5VTwFvRDCp+B7hgOE8JDlSzfit2MHuxgKFyvvBsxvRyYyTqU xIELpKSaitLLDZGttNRIg+q+Afg+u7BdBCVgkqW/y92eTB+bM7t0eVPgrVK4G3znTcxWLa lazaAfeeJhEEmWD7Xl2BlFusBHti6ZtThNPieAGbMOTxap/fmyByrRtUY4E2yFwxIPknKv wN7RCXaQL4oK1FppGwah+f+q4ZixB2XrdVrgStjqRF9HvhZd1itDuZN/plIFqw== Content-Type: multipart/mixed; boundary="------------EBXrCFUmK4n1JFXBvAqx7NDI" Message-ID: Date: Fri, 6 Sep 2024 23:49:43 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: index prefetching From: Tomas Vondra To: Peter Geoghegan Cc: Andres Freund , Melanie Plageman , Robert Haas , PostgreSQL Hackers , Georgios , Thomas Munro , Konstantin Knizhnik , Dilip Kumar References: <4f5f16ef-df1e-4e09-9b3f-2e0961ab5117@enterprisedb.com> <4736207c-8ea6-40cb-ac52-41af00b58bbc@enterprisedb.com> <20240215201337.7amzw3hpvng7wphb@awork3.anarazel.de> <48d3ff87-a435-488f-b803-258dab6485d6@enterprisedb.com> <6761860c-c66e-400a-b45f-aa741f548771@vondra.me> Content-Language: en-US In-Reply-To: <6761860c-c66e-400a-b45f-aa741f548771@vondra.me> X-GND-Sasl: tomas@vondra.me List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------EBXrCFUmK4n1JFXBvAqx7NDI Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, here's an updated version of this patch series, with a couple major improvements: 1) adding batching/prefetching to relevant built-in index AMs This means btree, hash, gist and sp-gist, i.e. index types that can return tuples. For gin/brin it's irrelevant (it'd be more correct to explicitly set amgetbatch to null, I guess). Anyway, those patches are fairly small, maybe 10kB each, with 150-300 new lines. And the patches are pretty similar, thanks to the fact that all the index AMs mirror btree (especially hash). The main differences are in ordered scans in gist/spgist, where the approach is quite different, but not that much. There's also the business of returning orderbyvals/orderbynulls, and index-only scans, but that should work too, now. 2) simplify / cleanup of the btree batching There was a lot of duplication and copy-pasted code in the functions that load the first/next batch, this version gets rid of that and replaces this "common" code with _bt_copy_batch() utility function. The other index AMs have pretty much the same thing, but adjusted for the scan opaque struct specific for that index type. I'm not saying it's perfect as it is, but it's way better, IMHO. 3) making mark/restore work for btree This was one of the main limitations - the patch simply disabled batching for plans requiring EXEC_FLAG_MARK, because of issues with determining the correct position on the page in markpos(). I suggested it should be possible to make this work by considering the batch index in those calls, and restoring the proper batch in restrpos(), and this updated patch does exactly that. I haven't done any performance evaluation if batching helps in these plans - if we restore to a position we already visited, we may not need to prefetch those pages, it might even make things slow. Need some more thinking, I guess. Also, I'm not quite happy with how the two layers interact. The index AM should not know this much the implementation details of batching, so I plan to maybe replace those accesses with a function in indexam.c, or something like that. It's still a bit rough, so I kept it in a separate patch. This now passes "make check-world" with asserts, valgrind and all that. I still need to put it through some stress testing and benchmarking to see how it performs. The layering still needs some more work. I've been quite unhappy with how how much the index AM needs to know about the "implementation details" of the batching, and how unclear it was which layer manages which fields. I think it's much better now - the goal is that: * indexam.c updates the scandesc->xs_batch fields, and knows nothing about the internal state of the index AM * the AM can read scandesc->xs_batch data (perhaps by a function in indexam.c), but never updates it There are still a couple places where this is violated (e.g. in the btrestrpos which manipulates the batch index directly), but I believe that's fairly easy to solve. Finally, I wrote that the basic contract that makes this possible is "batch should never span multiple leaf pages". I realized that's actually not quite correct - it's perfectly fine for the AM to return batches spanning multiple leaf pages, as long as the AM knows to also keep all the resources (pins, ...) until the next batch is requested. It would also need to know how to handle kill_prior_tuples (which we now accumulate per batch, and process before returning the next one), and stuff like that. It's just that with the restriction that a batch must not span multiple leaf pages, it's fairly trivial to make this work. The changes required by the current AM code are very limited, as demonstrated by the patches adding this to gist/spgist/hash. I can imagine the AMs being improved in this direction in the future. We already have a place to keep track of this extra info - the scan opaque struct. The AM could keep information about all the resources needed by the last batch - in a way, we already do that, except that we need only exactly the same resources as for regular non-batched scans. Thinking about this a bit more, we'd probably want to allow multiple in-flight batches. One of the shortcomings of the current approach with a single batch is that as we're getting close to the end of the batch, we can't issue prefetches. Only after we're done with that batch, we can prefetch more pages. Essentially, there are "pipeline stall". I imagine we could allow reading "future" batches so that we can issue prefetches, and then eventually we'd process those. But that would also require some ability to inform the index AM which batches are no longer needed, and can be de-allocated. Hmmm, perhaps it would be possible to make this work with just two batches, as long as they are sized for the proper prefetch distance. In any case, that would be a future patch. I'm only mentioning this to clarify that I believe the proposed approach does not really have the "single leaf page" restriction (the AM can do whatever it wants). And that it could even be extended to handle multiple batches. regards -- Tomas Vondra --------------EBXrCFUmK4n1JFXBvAqx7NDI Content-Type: text/x-patch; charset=UTF-8; name="v20240906-0001-WIP-index-batching-prefetching.patch" Content-Disposition: attachment; filename="v20240906-0001-WIP-index-batching-prefetching.patch" Content-Transfer-Encoding: base64 RnJvbSAxZWFkZjE1M2Y2YjYwYzQwNGU2MGIyMWJjNmUzZGI2OTFhNWU2NGVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAyOCBBdWcgMjAyNCAxODoyMToyNyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQwOTA2IDEvNV0gV0lQOiBpbmRleCBiYXRjaGluZyAvIHByZWZldGNoaW5nCgotLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgIDIz ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCA4 MjkgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl ZS5jICAgICAgICAgICAgfCAgNjUgKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c2VhcmNoLmMgICAgICAgICB8IDI4MCArKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jICAgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1JlcGxpY2F0aW9uLmMgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAgICAgfCA1MDMgKysrKysrKystLS0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICAgICB8IDExNyArKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICAgICB8ICAgNyArLQogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEwICsKIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBz cmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwog c3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgIDI5ICst CiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCAgMTUg Kwogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgIDUx ICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAg IDcgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwg ICAzICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAg fCAgIDMgKwogMTkgZmlsZXMgY2hhbmdlZCwgMTgzMCBpbnNlcnRpb25zKCspLCAxNDEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK aW5kZXggMWM2ZGEyODZkNDMuLjg2ZGEyM2U0MWY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTc1MCw3ICs3NTAsMTIgQEAgaGVhcGFtX3Jl bGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3 SGVhcCwKIAogCQl0YWJsZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWlu ZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RB bnksIDAsIDApOworCisJCS8qCisJCSAqIFhYWCBNYXliZSBlbmFibGUgYmF0Y2hpbmcvcHJl ZmV0Y2ggZm9yIGNsdXN0ZXJpbmcuIFNlZW1zIGxpa2UgaXQKKwkJICogbWlnaHQgYmUgYSBw cmV0dHkgc3Vic3RhbnRpYWwgd2luLgorCQkgKi8KKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVn aW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgMCwgMCwgZmFsc2UpOwog CQlpbmRleF9yZXNjYW4oaW5kZXhTY2FuLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJZWxz ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA0M2M5NWQ2MTA5Yi4uNjhmYzQ5 MGM5OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC00MzgsOCArNDM4LDE4 IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJZWxv ZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAkJfQogCisJCS8qCisJCSAq IE5vIGJhdGNoaW5nL3ByZWZldGNoIGZvciBjYXRhbG9ncy4gV2UgZG9uJ3QgZXhwZWN0IHRo YXQgdG8gaGVscAorCQkgKiB2ZXJ5IG11Y2gsIGJlY2F1c2Ugd2UgdXN1YWxseSBuZWVkIGp1 c3Qgb25lIHJvdywgYW5kIGV2ZW4gaWYgd2UKKwkJICogbmVlZCBtdWx0aXBsZSByb3dzLCB0 aGV5IHRlbmQgdG8gYmUgY29sb2NhdGVkIGluIGhlYXAuCisJCSAqCisJCSAqIFhYWCBNYXli ZSB3ZSBjb3VsZCBkbyB0aGF0LCB0aGUgcHJlZmV0Y2hpbmcgb25seSByYW1wcyB1cCBvdmVy CisJCSAqIHRpbWUuIEJ1dCB0aGVuIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmZp bml0ZSByZWN1cnNpb24gd2hlbgorCQkgKiBsb29raW5nIHVwIGVmZmVjdGl2ZV9pb19jb25j dXJyZW5jeSBmb3IgYSB0YWJsZXNwYWNlIGluIHRoZQorCQkgKiBjYXRhbG9nLgorCQkgKi8K IAkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVs LAotCQkJCQkJCQkJCSBzbmFwc2hvdCwgbmtleXMsIDApOworCQkJCQkJCQkJCSBzbmFwc2hv dCwgbmtleXMsIDAsIGZhbHNlKTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBr ZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CiAJfQpAQCAt Njk2LDggKzcwNiwxNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiAJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIp OwogCX0KIAorCS8qCisJICogTm8gYmF0Y2hpbmcvcHJlZmV0Y2ggZm9yIGNhdGFsb2dzLiBX ZSBkb24ndCBleHBlY3QgdGhhdCB0byBoZWxwIHZlcnkKKwkgKiBtdWNoLCBiZWNhdXNlIHdl IHVzdWFsbHkgbmVlZCBqdXN0IG9uZSByb3csIGFuZCBldmVuIGlmIHdlIG5lZWQKKwkgKiBt dWx0aXBsZSByb3dzLCB0aGV5IHRlbmQgdG8gYmUgY29sb2NhdGVkIGluIGhlYXAuCisJICoK KwkgKiBYWFggTWF5YmUgd2UgY291bGQgZG8gdGhhdCwgdGhlIHByZWZldGNoaW5nIG9ubHkg cmFtcHMgdXAgb3ZlciB0aW1lLgorCSAqIEJ1dCB0aGVuIHdlIG5lZWQgdG8gYmUgY2FyZWZ1 bCBhYm91dCBpbmZpbml0ZSByZWN1cnNpb24gd2hlbiBsb29raW5nIHVwCisJICogZWZmZWN0 aXZlX2lvX2NvbmN1cnJlbmN5IGZvciBhIHRhYmxlc3BhY2UgaW4gdGhlIGNhdGFsb2cuCisJ ICovCiAJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBp bmRleFJlbGF0aW9uLAotCQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCk7CisJCQkJCQkJ CQkgc25hcHNob3QsIG5rZXlzLCAwLCBmYWxzZSk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4t PmlzY2FuLCBrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggZGNkMDRiODEzZDguLmQx NzBjMWQ0MzlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTMzLDYg KzMzLDEyIEBACiAgKgkJaW5kZXhfY2FuX3JldHVybgktIGRvZXMgaW5kZXggc3VwcG9ydCBp bmRleC1vbmx5IHNjYW5zPwogICoJCWluZGV4X2dldHByb2NpZCAtIGdldCBhIHN1cHBvcnQg cHJvY2VkdXJlIE9JRAogICoJCWluZGV4X2dldHByb2NpbmZvIC0gZ2V0IGEgc3VwcG9ydCBw cm9jZWR1cmUncyBsb29rdXAgaW5mbworICoJCWluZGV4X2JhdGNoX2dldG5leHQJLSBnZXQg dGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEgc2NhbgorICoJCWluZGV4X2JhdGNoX2dl dG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRHMgZnJvbSBhIGJhdGNoCisgKgkJaW5kZXhf YmF0Y2hfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBiYXRjaAor ICoJCWluZGV4X2JhdGNoX3ByZWZldGNoCS0gcHJlZmV0Y2ggaGVhcCBwYWdlcyBmb3IgYSBi YXRjaAorICoJCWluZGV4X2JhdGNoX3N1cHBvcnRlZAktIGRvZXMgdGhlIEFNIHN1cHBvcnQv YWxsb3cgYmF0Y2hpbmc/CisgKgkJaW5kZXhfYmF0Y2hfYWRkCQktIGFkZCBhbiBpdGVtIChU SUQsIGl0dXApIHRvIHRoZSBiYXRjaAogICoKICAqIE5PVEVTCiAgKgkJVGhpcyBmaWxlIGNv bnRhaW5zIHRoZSBpbmRleF8gcm91dGluZXMgd2hpY2ggdXNlZApAQCAtNTQsMTAgKzYwLDE0 IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Nu YXBtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCiAKKy8qIGVuYWJsZSByZWFkaW5nIGJhdGNoZXMgLyBwcmVmZXRjaGlu ZyBvZiBUSURzIGZyb20gdGhlIGluZGV4ICovCitib29sCQllbmFibGVfaW5kZXhzY2FuX2Jh dGNoaW5nID0gZmFsc2U7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCQltYWNyb3MgdXNlZCBp biBpbmRleF8gcm91dGluZXMKQEAgLTEwOSw2ICsxMTksMTAgQEAgc3RhdGljIEluZGV4U2Nh bkRlc2MgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24s CiAJCQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBf c25hcCk7CiBzdGF0aWMgaW5saW5lIHZvaWQgdmFsaWRhdGVfcmVsYXRpb25fa2luZChSZWxh dGlvbiByKTsKIAorLyogaW5kZXggYmF0Y2hpbmcgKi8KK3N0YXRpYyB2b2lkIGluZGV4X2Jh dGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK3N0YXRpYyB2b2lkIGluZGV4X2JhdGNo X3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCQkJ ICAgaW5kZXhfIGludGVyZmFjZSBmdW5jdGlvbnMKQEAgLTI1Niw3ICsyNzAsOCBAQCBJbmRl eFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJ CVJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJU25hcHNob3Qgc25hcHNob3QsCi0JCQkJ aW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQorCQkJCWludCBua2V5cywgaW50IG5vcmRlcmJ5 cywKKwkJCQlib29sIGVuYWJsZV9iYXRjaGluZykKIHsKIAlJbmRleFNjYW5EZXNjIHNjYW47 CiAKQEAgLTI3NCw2ICsyODksMjQgQEAgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJs ZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhl YXBSZWxhdGlvbik7CiAKKwkvKgorCSAqIElmIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGFuZCBz dXBwb3J0ZWQgYnkgYm90aCB0aGUgaW5kZXggQU0gYW5kIHRoZQorCSAqIHBsYW4sIGluaXRp YWxpemUgYmF0Y2hpbmcgaW5mby4KKwkgKgorCSAqIFhYWCBXZSBkbyB0aGlzIGFmdGVyIGFt YmVnaW5zY2FuKCksIHdoaWNoIG1lYW5zIHRoZSBBTSBjYW4ndCBpbml0IHRoZQorCSAqIHBy aXZhdGUgZGF0YSBpbiB0aGVyZSAoaXQgZG9lc24ndCBldmVuIGtub3cgaWYgYmF0Y2hpbmcg d2lsbCBiZSB1c2VkIGF0CisJICogdGhhdCBwb2ludCkuCisJICoKKwkgKiBYWFggTWF5YmUg d2Ugc2hvdWxkIGhhdmUgYSBzZXBhcmF0ZSAiYW1jYW5iYXRjaCIgY2FsbCwgdG8gbGV0IHRo ZSBBTQorCSAqIGRlY2lkZSBpZiBiYXRjaGluZyBpcyBzdXBwb3J0ZWQgZGVwZW5kaW5nIG9u IHRoZSBzY2FuIGRldGFpbHMuCisJICovCisJaWYgKChpbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1nZXRiYXRjaCAhPSBOVUxMKSAmJgorCQllbmFibGVfYmF0Y2hpbmcgJiYKKwkJZW5h YmxlX2luZGV4c2Nhbl9iYXRjaGluZykKKwl7CisJCWluZGV4X2JhdGNoX2luaXQoc2Nhbik7 CisJfQorCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTMzMyw2ICszNjYsMTIgQEAgaW5kZXhf YmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJc2Nhbi0+cGFy YWxsZWxfc2NhbiA9IHBzY2FuOwogCXNjYW4tPnhzX3RlbXBfc25hcCA9IHRlbXBfc25hcDsK IAorCS8qCisJICogTm8gYmF0Y2hpbmcgYnkgZGVmYXVsdCwgc28gc2V0IGl0IHRvIE5VTEwu IFdpbGwgYmUgaW5pdGlhbGl6ZWQgbGF0ZXIgaWYKKwkgKiBiYXRjaGluZyBpcyByZXF1ZXN0 ZWQgYW5kIEFNIHN1cHBvcnRzIGl0LgorCSAqLworCXNjYW4tPnhzX2JhdGNoID0gTlVMTDsK KwogCXJldHVybiBzY2FuOwogfQogCkBAIC0zNjgsNiArNDA3LDE4IEBAIGluZGV4X3Jlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4sCiAKIAlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1yZXNjYW4oc2Nhbiwga2V5cywgbmtleXMsCiAJCQkJCQkJCQkJCW9yZGVyYnlzLCBu b3JkZXJieXMpOworCisJLyoKKwkgKiBSZXNldCB0aGUgYmF0Y2gsIHRvIG1ha2UgaXQgbG9v ayBlbXB0eS4KKwkgKgorCSAqIERvbmUgYWZ0ZXIgdGhlIGFtcmVzY2FuKCkgY2FsbCwgaW4g Y2FzZSB0aGUgQU0gbmVlZHMgc29tZSBvZiB0aGUgYmF0Y2gKKwkgKiBpbmZvIChlLmcuIHRv IHByb3Blcmx5IHRyYW5zZmVyIHRoZSBraWxsZWQgdHVwbGVzKS4KKwkgKgorCSAqIFhYWCBU aGlzIGlzIGEgYml0IG1pc2xlYWRpbmcsIGJlY2F1c2UgaW5kZXhfYmF0Y2hfcmVzZXQgZG9l cyBub3QgcmVzZXQKKwkgKiB0aGUga2lsbGVkIHR1cGxlcy4gU28gaWYgdGhhdCdzIHRoZSBv bmx5IGp1c3RpZmljYXRpb24sIHdlIGNvdWxkIGhhdmUKKwkgKiBkb25lIGl0IGJlZm9yZSB0 aGUgY2FsbC4KKwkgKi8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuKTsKIH0KIAogLyogLS0t LS0tLS0tLS0tLS0tLQpAQCAtNDQ0LDYgKzQ5NSwxOCBAQCBpbmRleF9yZXN0cnBvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCiAJ c2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJwb3Moc2Nhbik7CisKKwkv KgorCSAqIFJlc2V0IHRoZSBiYXRjaCwgdG8gbWFrZSBpdCBsb29rIGVtcHR5LgorCSAqCisJ ICogRG9uZSBhZnRlciB0aGUgYW1yZXNjYW4oKSBjYWxsLCBpbiBjYXNlIHRoZSBBTSBuZWVk cyBzb21lIG9mIHRoZSBiYXRjaAorCSAqIGluZm8gKGUuZy4gdG8gcHJvcGVybHkgdHJhbnNm ZXIgdGhlIGtpbGxlZCB0dXBsZXMpLgorCSAqCisJICogWFhYIFRoaXMgaXMgYSBiaXQgbWlz bGVhZGluZywgYmVjYXVzZSBpbmRleF9iYXRjaF9yZXNldCBkb2VzIG5vdCByZXNldAorCSAq IHRoZSBraWxsZWQgdHVwbGVzLiBTbyBpZiB0aGF0J3MgdGhlIG9ubHkganVzdGlmaWNhdGlv biwgd2UgY291bGQgaGF2ZQorCSAqIGRvbmUgaXQgYmVmb3JlIHRoZSBjYWxsLgorCSAqLwor CWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4pOwogfQogCiAvKgpAQCAtNTM5LDcgKzYwMiw4IEBA IGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqLwogSW5kZXhT Y2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJl bGF0aW9uIGluZGV4cmVsLCBpbnQgbmtleXMsCi0JCQkJCQkgaW50IG5vcmRlcmJ5cywgUGFy YWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKQorCQkJCQkJIGludCBub3JkZXJieXMsIFBhcmFs bGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCSBib29sIGVuYWJsZV9iYXRjaGluZykK IHsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKIAlJbmRleFNjYW5EZXNjIHNjYW47CkBAIC01NjAs NiArNjI0LDI0IEBAIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVs LCBSZWxhdGlvbiBpbmRleHJlbCwgaW50IG5rZXlzLAogCS8qIHByZXBhcmUgdG8gZmV0Y2gg aW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFi bGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCk7CiAKKwkvKgorCSAqIElmIGV4cGxpY2l0 bHkgcmVxdWVzdGVkIGFuZCBzdXBwb3J0ZWQgYnkgYm90aCB0aGUgaW5kZXggQU0gYW5kIHRo ZQorCSAqIHBsYW4sIGluaXRpYWxpemUgYmF0Y2hpbmcgaW5mby4KKwkgKgorCSAqIFhYWCBX ZSBkbyB0aGlzIGFmdGVyIGFtYmVnaW5zY2FuKCksIHdoaWNoIG1lYW5zIHRoZSBBTSBjYW4n dCBpbml0IHRoZQorCSAqIHByaXZhdGUgZGF0YSBpbiB0aGVyZSAoaXQgZG9lc24ndCBldmVu IGtub3cgaWYgYmF0Y2hpbmcgd2lsbCBiZSB1c2VkIGF0CisJICogdGhhdCBwb2ludCkuCisJ ICoKKwkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIGhhdmUgYSBzZXBhcmF0ZSAiYW1jYW5iYXRj aCIgY2FsbCwgdG8gbGV0IHRoZSBBTQorCSAqIGRlY2lkZSBpZiBiYXRjaGluZyBpcyBzdXBw b3J0ZWQgZGVwZW5kaW5nIG9uIHRoZSBzY2FuIGRldGFpbHMuCisJICovCisJaWYgKChpbmRl eHJlbC0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkgJiYKKwkJZW5hYmxlX2JhdGNo aW5nICYmCisJCWVuYWJsZV9pbmRleHNjYW5fYmF0Y2hpbmcpCisJeworCQlpbmRleF9iYXRj aF9pbml0KHNjYW4pOworCX0KKwogCXJldHVybiBzY2FuOwogfQogCkBAIC0xMDM3LDMgKzEx MTksNzQ2IEBAIGluZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxhdGlvbiBpbmRyZWwsIEF0dHJO dW1iZXIgYXR0bnVtLCBEYXR1bSBhdHRvcHRpb25zLAogCiAJcmV0dXJuIGJ1aWxkX2xvY2Fs X3JlbG9wdGlvbnMoJnJlbG9wdHMsIGF0dG9wdGlvbnMsIHZhbGlkYXRlKTsKIH0KKworLyoK KyAqIElOREVYIEJBVENISU5HIEFORCBQUkVGRVRDSElORworICoKKyAqIEFsbG93cyByZWFk aW5nIGNodW5rcyBvZiBpdGVtcyBmcm9tIGFuIGluZGV4LCBpbnN0ZWFkIG9mIHJlYWRpbmcg dGhlbQorICogb25lIGJ5IG9uZS4gVGhpcyByZWR1Y2VzIHRoZSBvdmVyaGVhZCBvZiBhY2Nl c3NpbmcgaW5kZXggcGFnZXMsIGFuZAorICogYWxzbyBhbGxvd3MgYWN0aW5nIG9uICJmdXR1 cmUiIFRJRHMgLSBlLmcuIHdlIGNhbiBwcmVmZXRjaCBoZWFwIHBhZ2VzCisgKiB0aGF0IHdp bGwgYmUgbmVlZGVkLCBldGMuCisgKgorICoKKyAqIGluZGV4IEFNIGNvbnRyYWN0CisgKiAt LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRvIHN1cHBvcnQgYmF0Y2hpbmcsIHRoZSBpbmRl eCBBTSBuZWVkcyB0byBpbXBsZW1lbnQgYW4gb3B0aW9uYWwgY2FsbGJhY2sKKyAqIGFtZ2V0 YmF0Y2goKSB3aGljaCBsb2FkcyBkYXRhIGludG8gdGhlIGJhdGNoIChpbiB0aGUgc2NhbiBk ZXNjcmlwdG9yKS4KKyAqCisgKiBUaGUgaW5kZXggQU0gYWxzbyBuZWVkcyB0byBlbnN1cmUg aXQgY2FuIHBlcmZvcm0gYWxsIG9wdGltaXphdGlvbnMgZm9yCisgKiBhbGwgVElEcyBpbiB0 aGUgY3VycmVudCBiYXRjaC4gQSBnb29kIGV4YW1wbGUgb2YgaXMgdGhlIGtpbGxfcHJpb3Jf dHVwbGUKKyAqIG9wdGltaXphdGlvbiAtIHdpdGggYmF0Y2hpbmcsIHRoZSBpbmRleCBBTSBt YXkgcmVjZWl2ZSB0aGUgaW5mb3JtYXRpb24KKyAqIHdoaWNoIHR1cGxlcyBhcmUgdG8gYmUg a2lsbGVkIHdpdGggYSBkZWxheSAtIHdoZW4gbG9hZGluZyB0aGUgbmV4dAorICogYmF0Y2gs IHdoZW4gZW5kaW5nL3Jlc3RhcnRpbmcgdGhlIHNjYW4sIGV0Yy4gVGhlIEFNIG5lZWRzIHRv IGVuc3VyZSBpdAorICogY2FuIHN0aWxsIHByb2Nlc3Mgc3VjaCBpbmZvcm1hdGlvbiwgdG8g a2VlcCB0aGUgb3B0aW1pemF0aW9uIGVmZmVjdGl2ZS4KKyAqCisgKiBUaGUgQU0gbWF5IGFs c28gbmVlZCB0byBrZWVwIHBpbnMgcmVxdWlyZWQgYnkgdGhlIHdob2xlIGJhdGNoIChub3Qg anVzdAorICogdGhlIGxhc3QgdHVwbGUpLCBldGMuCisgKgorICogV2hhdCB0aGlzIG1lYW5z L3JlcXVpcmVzIGlzIHZlcnkgZGVwZW5kZW50IG9uIHRoZSBpbmRleCBBTSwgb2YgY291cnNl LgorICogRm9yIEItVHJlZSAoYW5kIG1vc3Qgb3RoZXIgaW5kZXggQU1zKSwgYmF0Y2hlcyBz cGFubmluZyBtdWx0aXBsZSBsZWFmCisgKiBwYWdlcyB3b3VsZCBiZSBwcm9ibGVtYXRpYy4g U3VjaCBiYXRjaGVzIHdvdWxkIHdvcmsgZm9yIGJhc2ljIGluZGV4CisgKiBzY2FucywgYnV0 IHRoZSBraWxsX3ByaW9yX3R1cGxlIHdvdWxkIGJlIGFuIGlzc3VlIC0gdGhlIEFNcyBrZWVw IG9ubHkKKyAqIGEgc2luZ2xlIGxlYWYgcGlubmVkLiBXZSdkIGVpdGhlciBuZWVkIHRvIGtl ZXAgbXVsdGlwbGUgcGlucywgb3IgYWxsb3cKKyAqIHJlYWRpbmcgb2xkZXIgbGVhZiBwYWdl cyBwYWdlcyAod2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkKS4gSW5kZXgKKyAqIG9u bHktc2NhbnMgaXMgY2hhbGxlbmdpbmcgdG9vIC0gd2Uga2VlcCBJbmRleFR1cGxlIHBvaW50 ZXJzIGludG8gdGhlCisgKiBsZWFmIHBhZ2VzLCB3aGljaCByZXF1aXJlcyBrZWVwaW5nIHRo b3NlIHBpbnMgdG9vLgorICoKKyAqIFRvIHNvbHZlIHRoaXMsIHdlIGdpdmUgdGhlIEFNIHNv bWUgY29udHJvbCBvdmVyIGJhdGNoIGJvdW5kYXJpZXMuIEl0IGlzCisgKiB1cCB0byB0aGUg aW5kZXggQU0gdG8gcGljayB3aGljaCByYW5nZSBvZiBpbmRleCBpdGVtcyB0byBsb2FkIGlu dG8gdGhlCisgKiBiYXRjaCwgYW5kIGhvdyB0byBlbnN1cmUgYWxsIHRoZSBvcHRpbWl6YXRp b25zIGFyZSBwb3NzaWJsZSwga2VlcCBwaW5zLAorICogYW5kIHNvIG9uLiBUaGUgaW5kZXgg QU0gbWF5IHVzZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmF0Y2ggKGluIHRoZQorICogc2Nh biBkZXNjcmlwdG9yLCBtYWludGFpbmVkIGJ5IGluZGV4YW0uYyBjb2RlKSwgYW5kIG1heSBh bHNvIGtlZXAgc29tZQorICogcHJpdmF0ZSBpbmZvcm1hdGlvbiAoaW4gdGhlIGV4aXN0aW5n ICJvcGFxdWUiIHNjYW4gZmllbGQpLgorICoKKyAqIEZvciBtb3N0IGluZGV4IEFNcyB0aGUg ZWFzaWVzdCB3YXkgaXMgdG8gbm90IGxvYWQgYmF0Y2hlcyBzcGFubmluZworICogbXVsdGlw bGUgbGVhZiBwYWdlcy4gVGhpcyBtYXkgaW1wYWN0IHRoZSBlZmZpY2llbmN5LCBlc3BlY2lh bGx5IGZvcgorICogaW5kZXhlcyB3aXRoIHdpZGUgaW5kZXggdHVwbGVzLCBhcyBpdCBtZWFu cyBiYXRjaGVzIGNsb3NlIHRvIHRoZSBlbmQKKyAqIG9mIHRoZSBsZWFmIHBhZ2UgbWF5IGJl IHNtYWxsZXIuCisgKgorICogTm90ZTogVGhlcmUgYWxyZWFkeSBpcyBhIHBpcGVsaW5lIGJy ZWFrIGZvciBwcmVmZXRjaGluZyAtIGFzIHdlIGFyZQorICogZ2V0dGluZyBjbG9zZXIgdG8g dGhlIGVuZCBvZiBhIGJhdGNoLCB3ZSBjYW4ndCBwcmVmZXRjaCBmdXJ0aGVyIHRoYW4KKyAq IHRoYXQsIGFuZCB0aGUgZWZmZWN0aXZlIHByZWZldGNoIGRpc3RhbmNlIGRyb3BzIHRvIDAu CisgKgorICogVGhlIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIG1ha2UgdGhlIGluZGV4IEFN cyBtb3JlIGNvbXBsZXgsIHRvIGtlZXAKKyAqIG1vcmUgbGVhZiBwYWdlcyBwaW5uZWQsIGV0 Yy4gVGhlIGN1cnJlbnQgbW9kZWwgZG9lcyBub3QgcHJvaGliaXQgdGhlCisgKiBpbmRleCBB TXMgZnJvbSBpbXBsZW1lbnRpbmcgdGhhdCAtIGl0J3MgZW50aXJlbHkgcG9zc2libGUgdG8g a2VlcCB0aGUKKyAqIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlICJvcGFxdWUiIHN0 cnVjdHVyZSAoc2F5LCBsaXN0IG9mIHBpbm5lZAorICogcGFnZXMsIGFuZCBvdGhlciBuZWNl c3NhcnkgZGV0YWlscykuCisgKgorICogQnV0IHRoYXQgZG9lcyBub3Qgc2VlbSBsaWtlIGEg Z29vZCB0cmFkZSBvZmYsIGFzIGl0J3Mgc3ViamVjdCB0bworICogImRpbWluaXNoaW5nIHJl dHVybnMiIC0gd2Ugc2VlIHNpZ25pZmljYW50IGdhaW5zIGluaXRpYWxseSAod2l0aCBldmVu CisgKiBzbWFsbCBiYXRjaGVzIC8gcHJlZmV0Y2ggZGlzdGFuY2UpLCBhbmQgYXMgdGhlIGJh dGNoIGdyb3dzIHRoZSBnYWlucworICogZ2V0IHNtYWxsZXIgYW5kIHNtYWxsZXIuIEl0IGRv ZXMgbm90IHNlZW0gd29ydGggdGhlIGNvbXBsZXhpdHkgb2YKKyAqIHBpbm5pbmcgbW9yZSBw YWdlcyBldGMuIGF0IGxlYXN0IGZvciB0aGUgZmlyc3QgdmVyc2lvbi4KKyAqCisgKiBUbyBk ZWFsIHdpdGggdGhlICJwcmVmZXRjaCBwaXBlbGluZSBicmVhayIsIHRoYXQgY291bGQgYmUg YWRkcmVzc2VkIGJ5CisgKiBhbGxvd2luZyBtdWx0aXBsZSBpbi1mbGlndCBiYXRjaGVzIC0g ZS5nLiB3aXRoIHByZWZldGNoIGRpc3RhbmNlIDY0CisgKiB3ZSBtaWdodCBoYXZlIHRocmVl IGJhdGNoZXMgb2YgMzIgaXRlbXMgZWFjaCwgdG8gcHJlZmV0Y2ggZmFyIGFoZWFkLgorICog QnV0IHRoYXQncyBub3Qgd2hhdCB0aGlzIHBhdGNoIGRvZXMgeWV0LgorICoKKyAqCisgKiBi YXRjaCA9IHNsaWRpbmcgd2luZG93CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogQSBnb29kIHdheSB0byB2aXN1YWxpemUgYSBiYXRjaCBpcyBhIHNsaWRpbmcgd2luZG93 IG92ZXIgdGhlIGFycmF5CisgKiBvZiBpdGVtcyBvbiBhIGxlYWYgcGFnZS4gSW4gdGhlIHNp bXBsZXN0IGV4YW1wbGUgKGZvcndhcmQgc2NhbiB3aXRoIG5vCisgKiBjaGFuZ2VzIG9mIGRp cmVjdGlvbiksIHdlIHNsaWNlIHRoZSBhcnJheSBpbnRvIHNtYWxsZXIgY2h1bmtzLCBhbmQK KyAqIHRoZW4gcHJvY2VzcyBlYWNoIG9mIHRob3NlIGNodW5rcy4KKyAqCisgKiBUaGUgYmF0 Y2ggc2l6ZSBpcyBhZGFwdGl2ZSAtIGl0IHN0YXJ0cyBzbWFsbCAob25seSA4IGVsZW1lbnRz KSBhbmQKKyAqIGluY3JlYXNlcyBhcyB3ZSByZWFkIG1vcmUgYmF0Y2hlcyAodXAgdG8gNjQg ZWxlbWVudHMpLiBXZSBkb24ndCB3YW50CisgKiB0byByZWdyZXNzIGNhc2VzIHRoYXQgb25s eSBuZWVkIGEgc2luZ2xlIGl0ZW0gKGUuZy4gTElNSVQgMSBxdWVyaWVzKSwKKyAqIGFuZCBs b2FkaW5nL2NvcHlpbmcgYSBsb3Qgb2YgZGF0YSBtaWdodCBjYXVzZSB0aGF0LiBTbyB3ZSBz dGFydCBzbWFsbAorICogYW5kIGluY3JlYXNlIHRoZSBzaXplIC0gdGhhdCBzdGlsbCBpbXBy b3ZlcyBjYXNlcyByZWFkaW5nIGEgbG90IG9mCisgKiBkYXRhIGZyb20gdGhlIGluZGV4LCB3 aXRob3V0IGh1cnRpbmcgc21hbGwgcXVlcmllcy4KKyAqCisgKiBOb3RlOiBUaGlzIGdyYWR1 YWwgcmFtcCB1cCBpcyBmb3IgYmF0Y2ggc2l6ZSwgaW5kZXBlbmRlbnQgb2Ygd2hhdCB3ZQor ICogZG8gZm9yIHByZWZldGNoLiBUaGUgcHJlZmV0Y2ggZGlzdGFuY2UgaXMgZ3JhZHVhbGx5 IGluY3JlYXNlZCB0b28sIGJ1dAorICogaXQncyBpbmRlcGVuZGVudCAvIG9ydGhvZ29uYWwg dG8gdGhlIGJhdGNoIHNpemUuIFRoZSBiYXRjaCBzaXplIGxpbWl0cworICogaG93IGZhciBh aGVhZCB3ZSBjYW4gcHJlZmV0Y2gsIG9mIGNvdXJzZS4KKyAqCisgKiBOb3RlOiBUaGUgY3Vy cmVudCBsaW1pdHMgb24gYmF0Y2ggc2l6ZSAoaW5pdGlhbCA4LCBtYXhpbXVtIDY0KSBhcmUK KyAqIHF1aXRlIGFyYml0cmFyeSwgaXQganVzdCBzZWVtZWQgdGhvc2UgdmFsdWVzIGFyZSBz YW5lLiBXZSBjb3VsZCBhZGp1c3QKKyAqIHRoZSBpbml0aWFsIHNpemUsIGJ1dCBJIGRvbid0 IHRoaW5rIGl0J2QgbWFrZSBhIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UuCisgKiBHcm93aW5n IHRoZSBiYXRjaGVzIGZhc3Rlci9zbG93ZXIgaGFzIGJpZ2dlciBpbXBhY3QuCisgKgorICog VGhlIG1heGltdW0gYmF0Y2ggc2l6ZSBkb2VzIG5vdCBtYXR0ZXIgbXVjaCAtIGl0J3MgdHJ1 ZSBhIGJ0cmVlIGluZGV4IGNhbgorICogaGF2ZSB1cCB0byB+MTMwMCBpdGVtcyBwZXIgOEsg bGVhZiBwYWdlLCBidXQgaW4gbW9zdCBjYXNlcyB0aGUgYWN0dWFsCisgKiBudW1iZXIgaXMg bG93ZXIsIHBlcmhhcHMgfjMwMC4gVGhhdCdzIG5vdCB0aGF0IGZhciBmcm9tIDY0LgorICoK KyAqIEVhY2ggYmF0Y2ggaGFzIGEgZmlyc3RJbmRleC9sYXN0SW5kZXggdG8gdHJhY2sgd2hp Y2ggcGFydCBvZiB0aGUgbGVhZgorICogcGFnZSBpdCBjdXJyZW50bHkgcmVwcmVzZW50cy4K KyAqCisgKgorICoga2lsbF9wcmlvcl90dXBsZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogSWYgd2UgZGVjaWRlIGEgdHVwbGUgY2FuIGJlIGtpbGxlZCwgdGhlIGJhdGNoIGl0 ZW0gaXMgbWFya2VkIGFjY29yZGluZ2x5LAorICogYW5kIHRoZSBmbGFnIGlzIHJlc2V0IHRv IGZhbHNlIChzbyB0aGF0IHRoZSBpbmRleCBBTSBkb2VzIG5vdCBkbyBzb21ldGhpbmcKKyAq IHNpbGx5IHRvIGEgcmFuZG9tIHR1cGxlIGl0IHRoaW5rcyBpcyAiY3VycmVudCIpLgorICoK KyAqIFRoZW4gdGhlIG5leHQgdGltZSB0aGUgQU0gZGVjaWRlcyBpdCdzIHRpbWUgdG8ga2ls bCB0dXBsZXMsIHRoZSBBTSBuZWVkcworICogdG8gbG9vayBhdCB0aGUgYmF0Y2ggYW5kIGNv bnNpZGVyIHRoZSB0dXBsZXMgbWFya2VkIHRvIGJlIGtpbGxlZC4gQi1UcmVlCisgKiBzaW1w bHkgYWRkcyB0aG9zZSBUSURzIHRvIHRoZSByZWd1bGFyICJraWxsSXRlbXMiIGFycmF5Lgor ICoKKyAqCisgKiBtYXJrL3Jlc3RvcmUKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIFdpdGgg YmF0Y2hpbmcsIHRoZSBpbmRleCBBTSBkb2VzIG5vdCBrbm93IHRoZSB0aGUgImN1cnJlbnQi IHBvc2l0aW9uIG9uCisgKiB0aGUgbGVhZiBwYWdlIC0gd2UgZG9uJ3QgcHJvcGFnYXRlIHRo aXMgdG8gdGhlIGluZGV4IEFNIHdoaWxlIHdhbGtpbmcKKyAqIGl0ZW1zIGluIHRoZSBiYXRj aC4gVG8gbWFrZSBhbW1hcmtwb3MoKSB3b3JrLCB0aGUgaW5kZXggQU0gaGFzIHRvIGNoZWNr CisgKiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYmF0Y2gsIGFuZCB0cmFuc2xhdGUg aXQgdG8gdGhlIHByb3BlciBwYWdlCisgKiBwb3NpdGlvbiwgdXNpbmcgdGhlIHByaXZhdGUg aW5mb3JtYXRpb24gKGFib3V0IGl0ZW1zIGluIHRoZSBiYXRjaCkuCisgKgorICogWFhYIFRo aXMgbmVlZHMgbW9yZSB3b3JrLCBJIGRvbid0IHF1aXRlIGxpa2UgaG93IHRoZSB0d28gbGF5 ZXJzIGludGVyYWN0LAorICogaXQgc2VlbXMgcXVpdGUgd3JvbmcgdG8gbG9vayBhdCB0aGUg YmF0Y2ggaW5mbyBkaXJlY3RseS4KKyAqLworCisvKgorICogQ29tcHJlaGVuc2l2ZSBjaGVj ayBvZiB2YXJpb3VzIGludmFyaWFudHMgb24gdGhlIGluZGV4IGJhdGNoLiBNYWtlcyBzdXJl CisgKiB0aGUgaW5kZXhlcyBhcmUgc2V0IGFzIGV4cGVjdGVkLCB0aGUgYnVmZmVyIHNpemUg aXMgd2l0aGluIGxpbWl0cywgYW5kCisgKiBzbyBvbi4KKyAqLworc3RhdGljIHZvaWQKK0Fz c2VydENoZWNrQmF0Y2hJbmZvKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCisJLyogYWxsIHRoZSBhcnJheXMgbmVlZCB0byBiZSBhbGxvY2F0 ZWQgKi8KKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5oZWFwdGlkcyAhPSBOVUxMKSAmJgor CQkgICAoc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zICE9IE5VTEwpICYmCisJCSAgIChz Y2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGEgIT0gTlVMTCkpOworCisJLyogaWYgSW5kZXhU dXBsZXMgZXhwZWN0ZWQsIHNob3VsZCBiZSBhbGxvY2F0ZWQgdG9vICovCisJQXNzZXJ0KCEo c2Nhbi0+eHNfd2FudF9pdHVwICYmIChzY2FuLT54c19iYXRjaC0+aXR1cHMgPT0gTlVMTCkp KTsKKworCS8qIFZhcmlvdXMgY2hlY2sgb24gYmF0Y2ggc2l6ZXMgKi8KKwlBc3NlcnQoKHNj YW4tPnhzX2JhdGNoLT5pbml0U2l6ZSA+PSAwKSAmJgorCQkgICAoc2Nhbi0+eHNfYmF0Y2gt PmluaXRTaXplIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSkgJiYKKwkJICAgKHNjYW4t PnhzX2JhdGNoLT5jdXJyU2l6ZSA8PSBzY2FuLT54c19iYXRjaC0+bWF4U2l6ZSkgJiYKKwkJ ICAgKHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplIDw9IDEwMjQpKTsJLyogYXJiaXRyYXJ5IGxp bWl0ICovCisKKwkvKiBJcyB0aGUgbnVtYmVyIG9mIGluIHRoZSBiYXRjaCBUSURzIGluIGEg dmFsaWQgcmFuZ2U/ICovCisJQXNzZXJ0KChzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID49 IDApICYmCisJCSAgIChzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzIDw9IHNjYW4tPnhzX2Jh dGNoLT5tYXhTaXplKSk7CisKKwkvKgorCSAqIFRoZSBjdXJyZW50IGl0ZW0gbXVzdCBiZSBi ZXR3ZWVuIC0xIGFuZCBuaGVhcHRpZHMuIFRob3NlIHR3byBleHRyZW1lCisJICogdmFsdWVz IGFyZSBzdGFydGluZyBwb2ludHMgZm9yIGZvcndhcmQvYmFja3dhcmQgc2NhbnMuCisJICov CisJQXNzZXJ0KChzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID49IC0xKSAmJgorCQkgICAo c2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA8PSBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRz KSk7CisKKwkvKiBjaGVjayBwcmVmZXRjaCBkYXRhICovCisJQXNzZXJ0KChzY2FuLT54c19i YXRjaC0+cHJlZmV0Y2hUYXJnZXQgPj0gMCkgJiYKKwkJICAgKHNjYW4tPnhzX2JhdGNoLT5w cmVmZXRjaFRhcmdldCA8PSBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hNYXhpbXVtKSk7CisK KwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4ID49IC0xKSAmJgorCQkg ICAoc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPD0gc2Nhbi0+eHNfYmF0Y2gtPm5o ZWFwdGlkcykpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FuLT54c19iYXRjaC0+bmhl YXB0aWRzOyBpKyspCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2Jh dGNoLT5oZWFwdGlkc1tpXSkpOworI2VuZGlmCit9CisKKy8qIElzIHRoZSBiYXRjaCBmdWxs IChUSURzIHVwIHRvIGNhcGFjaXR5KT8gKi8KKyNkZWZpbmUJSU5ERVhfQkFUQ0hfSVNfRlVM TChzY2FuKQlcCisJKChzY2FuKS0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9PSAoc2NhbiktPnhz X2JhdGNoLT5jdXJyU2l6ZSkKKworLyogSXMgdGhlIGJhdGNoIGVtcHR5IChubyBUSURzKT8g Ki8KKyNkZWZpbmUJSU5ERVhfQkFUQ0hfSVNfRU1QVFkoc2NhbikJXAorCSgoc2NhbiktPnhz X2JhdGNoLT5uaGVhcHRpZHMgPT0gMCkKKworLyoKKyAqIERpZCB3ZSBwcm9jZXNzIGFsbCBp dGVtcz8gRm9yIGZvcndhcmQgc2NhbiBpdCBtZWFucyB0aGUgaW5kZXggcG9pbnRzIHRvIHRo ZQorICogbGFzdCBpdGVtLCBmb3IgYmFja3dhcmQgc2NhbnMgaXQgaGFzIHRvIHBvaW50IHRv IHRoZSBmaXJzdCBvbmUuCisgKgorICogVGhpcyBkb2VzIG5vdCBjb3ZlciBlbXB0eSBiYXRj aGVzIHByb3Blcmx5LCBiZWNhdXNlIG9mIGJhY2t3YXJkIHNjYW5zLgorICovCisjZGVmaW5l CUlOREVYX0JBVENIX0lTX1BST0NFU1NFRChzY2FuLCBkaXJlY3Rpb24pCVwKKwkoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pID8gXAorCQkoKHNjYW4pLT54c19iYXRjaC0+ bmhlYXB0aWRzID09ICgoc2NhbiktPnhzX2JhdGNoLT5jdXJySW5kZXggKyAxKSkgOiBcCisJ CSgoc2NhbiktPnhzX2JhdGNoLT5jdXJySW5kZXggPT0gMCkpCisKKy8qIERvZXMgdGhlIGJh dGNoIGl0ZW1zIGluIHRoZSByZXF1ZXN0ZWQgZGlyZWN0aW9uPyAqLworI2RlZmluZSBJTkRF WF9CQVRDSF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSBcCisJKCFJTkRFWF9CQVRDSF9J U19FTVBUWShzY2FuKSAmJiAhSU5ERVhfQkFUQ0hfSVNfUFJPQ0VTU0VEKHNjYW4sIGRpcmVj dGlvbikpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNoX2dldG5l eHQgLSBnZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEgc2NhbgorICoKKyAqIFJl dHVybnMgdHJ1ZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlYWQgYXQgbGVhc3Qgc29tZSBUSURzIGlu dG8gdGhlIGJhdGNoLAorICogb3IgZmFsc2UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgVElEcyBp biB0aGUgc2Nhbi4gVGhlIHhzX2hlYXB0aWRzIGFuZAorICogeHNfbmhlYXB0aWRzIGZpZWxk cyBjb250YWluIHRoZSBUSURTIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICoKKyAq IFhYWCBUaGlzIG9ubHkgbG9hZHMgdGhlIFRJRHMgYW5kIHJlc2V0cyB0aGUgdmFyaW91cyBi YXRjaCBmaWVsZHMgdG8KKyAqIGZyZXNoIHN0YXRlLiBJdCBkb2VzIG5vdCBzZXQgeHNfaGVh cHRpZC94c19pdHVwL3hzX2hpdHVwLCB0aGF0J3MgdGhlCisgKiByZXNwb25zaWJpbGl0eSBv ZiB0aGUgZm9sbG93aW5nIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKCkgY2FsbHMuCisgKiAt LS0tLS0tLS0tLS0tLS0tCisgKi8KK2Jvb2wKK2luZGV4X2JhdGNoX2dldG5leHQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlib29sCQlmb3Vu ZDsKKworCVNDQU5fQ0hFQ0tTOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gp OworCisJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNo ZWQgb3IgcmVnaXN0ZXJlZCAqLworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNl bnRYbWluKSk7CisKKwkvKiBjb21wcmVoZW5zaXZlIGNoZWNrcyBvZiBiYXRjaGluZyBpbmZv ICovCisJQXNzZXJ0Q2hlY2tCYXRjaEluZm8oc2Nhbik7CisKKwkvKgorCSAqIFdlIG5ldmVy IHJlYWQgYSBuZXcgYmF0Y2ggYmVmb3JlIHdlIHJ1biBvdXQgb2YgaXRlbXMgaW4gdGhlIGN1 cnJlbnQKKwkgKiBvbmUuIFRoZSBjdXJyZW50IGJhdGNoIGhhcyB0byBiZSBlaXRoZXIgZW1w dHkgb3Igd2UgcmFuIG91dCBvZiBpdGVtcworCSAqIChpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9u KS4KKwkgKi8KKwlBc3NlcnQoIUlOREVYX0JBVENIX0hBU19JVEVNUyhzY2FuLCBkaXJlY3Rp b24pKTsKKworCS8qCisJICogUmVzZXQgdGhlIGN1cnJlbnQvcHJlZmV0Y2ggcG9zaXRpb25z IGluIHRoZSBiYXRjaC4KKwkgKgorCSAqIFhYWCBEb25lIGJlZm9yZSBjYWxsaW5nIGFtZ2V0 YmF0Y2goKSwgc28gdGhhdCBpdCBzZWVzIHRoZSBpbmRleCBhcworCSAqIGludmFsaWQsIGJh dGNoIGFzIGVtcHR5LCBhbmQgY2FuIGFkZCBpdGVtcy4KKwkgKgorCSAqIFhYWCBJbnRlbnRp b25hbGx5IGRvZXMgbm90IHJlc2V0IHRoZSBuaGVhcHRpZHMsIGJlY2F1c2UgdGhlIEFNIGRv ZXMKKwkgKiByZWx5IG9uIHRoYXQgd2hlbiBwcm9jZXNzaW5nIGtpbGxlZCB0dXBsZXMuIE1h eWJlIHN0b3JlIHRoZSBraWxsZWQKKwkgKiB0dXBsZXMgZGlmZmVyZW50bHk/CisJICovCisJ c2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA9IC0xOworCXNjYW4tPnhzX2JhdGNoLT5wcmVm ZXRjaEluZGV4ID0gMDsKKwlzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID0gMDsKKworCS8q CisJICogUmVzZXQgdGhlIG1lbW9yeSBjb250ZXh0IHdpdGggYWxsIHBlci1iYXRjaCBkYXRh LCBhbGxvY2F0ZWQgYnkgdGhlIEFNLgorCSAqIFRoaXMgbWlnaHQgYmUgdHVwbGVzLCBvciBh bnl0aGluZyBlbHNlIHRoZSBBTSBuZWVkcy4KKwkgKgorCSAqIFhYWCBNYWtlIHN1cmUgdG8g cmVzZXQgdGhlIHR1cGxlcywgYmVjYXVzZSB0aGUgQU0gbWF5IGRvIHNvbWV0aGluZyB3aXRo CisJICogdGhlbSBsYXRlciAoZS5nLiByZWxlYXNlIHRoZW0sIGFzIGdldE5leHROZWFyZXN0 IGluIGdpc3QpLCBidXQgd2UgbWF5CisJICogcmVsZWFzZSB0aGVtIGJ5IHRoZSBNZW1vcnlD b250ZXh0UmVzZXQoKSBjYWxsLgorCSAqCisJICogVGhpcyBtaWdodCBicmVhayB0aGUgQU0g aWYgaXQgcmVsaWVzIG9uIHRoZW0gcG9pbnRpbmcgdG8gdGhlIGxhc3QKKwkgKiB0dXBsZSwg YnV0IGF0IGxlYXN0IGl0IGhhcyB0aGUgY2hhbmNlIHRvIGRvIHRoZSByaWdodCB0aGluZyBi eSBjaGVja2luZworCSAqIGlmIHRoZSBwb2ludGVyIGlzIE5VTEwuCisJICovCisJc2Nhbi0+ eHNfaXR1cCA9IE5VTEw7CisJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOworCisJTWVtb3J5Q29u dGV4dFJlc2V0KHNjYW4tPnhzX2JhdGNoLT5jdHgpOworCisJLyoKKwkgKiBUaGUgQU0ncyBh bWdldGJhdGNoIHByb2MgbG9hZHMgYSBjaHVuayBvZiBUSURzIG1hdGNoaW5nIHRoZSBzY2Fu IGtleXMsCisJICogYW5kIHB1dHMgdGhlIFRJRHMgaW50byBzY2FuLT54c19iYXRjaC0+aGVh cHRpZHMuICBJdCBzaG91bGQgYWxzbyBzZXQKKwkgKiBzY2FuLT54c19yZWNoZWNrIGFuZCBw b3NzaWJseQorCSAqIHNjYW4tPnhzX2JhdGNoLT5pdHVwcy9zY2FuLT54c19iYXRjaC0+aGl0 dXBzLCB0aG91Z2ggd2UgcGF5IG5vCisJICogYXR0ZW50aW9uIHRvIHRob3NlIGZpZWxkcyBo ZXJlLgorCSAqCisJICogRklYTUUgQXQgdGhlIG1vbWVudCB0aGlzIGRvZXMgbm90aGluZyB3 aXRoIGhpdHVwLiBOZWVkcyB0byBiZSBmaXhlZD8KKwkgKi8KKwlmb3VuZCA9IHNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoKHNjYW4sIGRpcmVjdGlvbik7CisK KwkvKiBSZXNldCBraWxsIGZsYWcgaW1tZWRpYXRlbHkgZm9yIHNhZmV0eSAqLworCXNjYW4t PmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKKwlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0g ZmFsc2U7CisKKwkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9u ZSAqLworCWlmICghZm91bmQpCisJeworCQkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBi dWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCQlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoKQorCQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNo KTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogV2Ugc2hvdWxkIGhhdmUgYSBub24t ZW1wdHkgYmF0Y2ggd2l0aCBpdGVtcy4gKi8KKwlBc3NlcnQoSU5ERVhfQkFUQ0hfSEFTX0lU RU1TKHNjYW4sIGRpcmVjdGlvbikpOworCisJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhz Y2FuLT5pbmRleFJlbGF0aW9uLCBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzKTsKKworCS8q CisJICogU2V0IHRoZSBwcmVmZXRjaCBpbmRleCB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUg bG9hZGVkIGJhdGNoICh3ZSBleHBlY3QKKwkgKiB0aGUgaW5kZXggQU0gdG8gc2V0IHRoYXQp LgorCSAqCisJICogRklYTUUgTWF5YmUgc2V0IHRoZSBjdXJySW5kZXggaGVyZSwgbm90IGlu IHRoZSBpbmRleCBBTS4gSXQgc2VlbXMgbXVjaAorCSAqIG1vcmUgbGlrZSBpbmRleGFtLmMg cmVzcG9uc2liaWxpdHkgcmF0aGVyIHRoYW4gc29tZXRoaW5nIGV2ZXJ5IGluZGV4IEFNCisJ ICogc2hvdWxkIGJlIGRvaW5nIChpbiBfYnRfZmlyc3RfYmF0Y2ggZXRjLikuCisJICoKKwkg KiBGSVhNRSBJdCdzIGEgYml0IHVuY2xlYXIgd2hvIChpbmRleGFtLmMgb3IgdGhlIGluZGV4 IEFNKSBpcyByZXNwb25zaWJsZQorCSAqIGZvciBzZXR0aW5nIHdoaWNoIGZpZWxkcy4gVGhp cyBuZWVkcyBjbGFyaWZpY2F0aW9uLgorCSAqLworCXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRj aEluZGV4ID0gc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleDsKKworCS8qCisJICogVHJ5IHRv IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBiYXRjaC4gSW50ZW50aW9uYWxseSBkb25lIGFm dGVyIHRoZSBBTQorCSAqIGNhbGwsIHNvIHRoYXQgdGhlIG5ldyB2YWx1ZSBhcHBsaWVzIHRv IHRoZSBuZXh0IGJhdGNoLiBPdGhlcndpc2Ugd2UKKwkgKiB3b3VsZCBhbHdheXMgc2tpcCB0 aGUgaW5pdGlhbCBiYXRjaCBzaXplLgorCSAqLworCXNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6 ZSA9IE1pbihzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgKyAxLAorCQkJCQkJCQkgICBzY2Fu LT54c19iYXRjaC0+bWF4U2l6ZSk7CisKKwkvKiBjb21wcmVoZW5zaXZlIGNoZWNrcyBvZiBi YXRjaGluZyBpbmZvICovCisJQXNzZXJ0Q2hlY2tCYXRjaEluZm8oc2Nhbik7CisKKwkvKiBS ZXR1cm4gdGhlIGJhdGNoIG9mIFRJRHMgd2UgZm91bmQuICovCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9nZXRuZXh0X2JhdGNoX3RpZCAt IGdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgY3VycmVudCBiYXRjaAorICoKKyAqIFNhbWUg Y2FsbGluZyBjb252ZW50aW9uIGFzIGluZGV4X2dldG5leHRfdGlkKCksIGV4Y2VwdCB0aGF0 IE5VTEwgbWVhbnMKKyAqIG5vIG1vcmUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgYmF0Y2gsIHRo ZXJlIG1heSBiZSBtb3JlIGJhdGNoZXMuCisgKgorICogWFhYIFRoaXMgb25seSBzZXRzIHhz X2hlYXB0aWQgYW5kIHhzX2l0dXAgKGlmIHJlcXVlc3RlZCkuIE5vdCBzdXJlIGlmCisgKiB3 ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyB3aXRoIHhzX2hpdHVwLgorICoKKyAqIEZJWE1FIFNo b3VsZCB0aGlzIHNldCB4c19oaXR1cD8KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworSXRl bVBvaW50ZXIKK2luZGV4X2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJLyogY29tcHJlaGVuc2l2ZSBjaGVja3Mg b2YgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJbmZvKHNjYW4pOworCisJ LyoKKwkgKiBCYWlsIG91dCBpZiBoZSBiYXRjaCBkb2VzIG5vdCBoYXZlIG1vcmUgaXRlbXMg aW4gdGhlIHJlcXVlc3RlZCBkaXJlY3RpbworCSAqIChlaXRoZXIgZW1wdHkgb3IgZXZlcnRo aW5nIHByb2Nlc3NlZCkuCisJICovCisJaWYgKCFJTkRFWF9CQVRDSF9IQVNfSVRFTVMoc2Nh biwgZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIEFkdmFuY2UgdG8g dGhlIG5leHQgYmF0Y2ggaXRlbSAtIHdlIGtub3cgaXQncyBub3QgZW1wdHkgYW5kIHRoZXJl IGFyZQorCSAqIGl0ZW1zIHRvIHByb2Nlc3MsIHNvIHRoaXMgaXMgdmFsaWQuCisJICovCisJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJc2Nhbi0+eHNfYmF0 Y2gtPmN1cnJJbmRleCsrOworCWVsc2UKKwkJc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleC0t OworCisJLyoKKwkgKiBOZXh0IFRJRCBmcm9tIHRoZSBiYXRjaCwgb3B0aW9uYWxseSBhbHNv IHRoZSBJbmRleFR1cGxlL0hlYXBUdXBsZS4KKwkgKgorCSAqIFhYWCBOb3Qgc3VyZSBob3cg dG8gZGVjaWRlIHdoaWNoIG9mIHRoZSB0dXBsZXMgdG8gc2V0LCBzZWVtcyBlYXNpZXIgdG8K KwkgKiBqdXN0IHNldCBib3RoLCBvbmUgb2YgdGhlbSB3aWxsIGJlIE5VTEwuCisJICoKKwkg KiBYWFggRG8gd2UgbmVlZCB0byByZXNldCB0aGUgaXR1cHMvaHR1cHMgYXJyYXkgYmV0d2Vl biBiYXRjaGVzPyBEb2Vzbid0CisJICogc2VlbSBuZWNlc3NhcnksIGJ1dCBtYXliZSB3ZSBj b3VsZCBnZXQgYm9ndXMgZGF0YT8KKwkgKi8KKwlzY2FuLT54c19oZWFwdGlkID0gc2Nhbi0+ eHNfYmF0Y2gtPmhlYXB0aWRzW3NjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXhdOworCWlmIChz Y2FuLT54c193YW50X2l0dXApCisJeworCQlzY2FuLT54c19pdHVwID0gc2Nhbi0+eHNfYmF0 Y2gtPml0dXBzW3NjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXhdOworCQlzY2FuLT54c19oaXR1 cCA9IHNjYW4tPnhzX2JhdGNoLT5odHVwc1tzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4XTsK Kwl9CisKKwlzY2FuLT54c19yZWNoZWNrID0gc2Nhbi0+eHNfYmF0Y2gtPnJlY2hlY2tbc2Nh bi0+eHNfYmF0Y2gtPmN1cnJJbmRleF07CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBvcmRl ci1ieSBjbGF1c2VzLCBwb2ludCB0byB0aGUgYXBwcm9wcmlhdGUgY2h1bmsgaW4gdGhlCisJ ICogYXJyYXlzLgorCSAqLworCWlmIChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID4gMCkKKwl7 CisJCWludAkJCWlkeCA9IHNjYW4tPm51bWJlck9mT3JkZXJCeXMgKiBzY2FuLT54c19iYXRj aC0+Y3VyckluZGV4OworCisJCXNjYW4tPnhzX29yZGVyYnl2YWxzID0gJnNjYW4tPnhzX2Jh dGNoLT5vcmRlcmJ5dmFsc1tpZHhdOworCQlzY2FuLT54c19vcmRlcmJ5bnVsbHMgPSAmc2Nh bi0+eHNfYmF0Y2gtPm9yZGVyYnludWxsc1tpZHhdOworCX0KKworCS8qIGNvbXByZWhlbnNp dmUgY2hlY2tzIG9mIGJhdGNoaW5nIGluZm8gKi8KKwlBc3NlcnRDaGVja0JhdGNoSW5mbyhz Y2FuKTsKKworCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLQorICogaW5kZXhfZ2V0bmV4dF9iYXRjaF9zbG90IC0gZ2V0IHRoZSBuZXh0IHR1 cGxlIGZyb20gYSBzY2FuIGJhdGNoCisgKgorICogU2FtZSBjYWxsaW5nIGNvbnZlbnRpb24g YXMgaW5kZXhfZ2V0bmV4dF9zbG90KCksIGV4Y2VwdCB0aGF0IE5VTEwgbWVhbnMKKyAqIG5v IG1vcmUgaXRlbXMgb25seSBpbiB0aGUgY3VycmVudCBiYXRjaCwgdGhlcmUgbWF5IGJlIG1v cmUgYmF0Y2hlcy4KKyAqCisgKiBYWFggU2VlIGluZGV4X2dldG5leHRfc2xvdCBjb21tZW50 cy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAoraW5kZXhfYmF0Y2hfZ2V0bmV4 dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJ CQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJLyogY29tcHJlaGVuc2l2ZSBjaGVj a3Mgb2YgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJbmZvKHNjYW4pOwor CisJZm9yICg7OykKKwl7CisJCWlmICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKKwkJewor CQkJSXRlbVBvaW50ZXIgdGlkOworCisJCQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJ RCBmcm9tIHRoZSBpbmRleCAqLworCQkJdGlkID0gaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQo c2NhbiwgZGlyZWN0aW9uKTsKKworCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJp ZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKwor CQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhzX2hlYXB0aWQpKTsK KwkJfQorCisJCS8qCisJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhl YXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCisJCSAqIElmIHdlIGRvbid0IGZpbmQg YW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCisJCSAq IHRoZSBpbmRleC4KKwkJICovCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4t PnhzX2hlYXB0aWQpKTsKKwkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJ CXsKKwkJCS8qIElmIHdlIGZvdW5kIGEgdmlzaWJsZSB0dXBsZSwgd2Ugc2hvdWxkbid0IGtp bGwgaXQuICovCisJCQlBc3NlcnQoIXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpOworCisJCQkv KiBjb21wcmVoZW5zaXZlIGNoZWNrcyBvZiBiYXRjaGluZyBpbmZvICovCisJCQlBc3NlcnRD aGVja0JhdGNoSW5mbyhzY2FuKTsKKworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQkvKgor CQkgKiBJZiB3ZSBoYXZlbid0IGZvdW5kIGFueSB2aXNpYmxlIHR1cGxlIGZvciB0aGUgVElE LCBjaGFuY2VzIGFyZSBhbGwKKwkJICogdmVyc2lvbnMgYXJlIGRlYWQgYW5kIG1heSBraWxs IGl0IGZyb20gdGhlIGluZGV4LiBJZiBzbywgZmxhZyBpdCBpbgorCQkgKiB0aGUga2lsbCBi aXRtYXAgLSB3ZSdsbCB0cmFuc2xhdGUgaXQgdG8gaW5kZXhlcyBsYXRlci4KKwkJICoKKwkJ ICogWFhYIFdpdGggdGhlIGZpcnN0SW5kZXgvbGFzdEluZGV4IGl0IHdvdWxkIG5vdCBiZSB0 b28gaGFyZCB0byBkbworCQkgKiB0aGUgdHJhbnNsYXRpb24gaGVyZS4gQnV0IGRvIHdlIHdh bnQgdG8/IEhvdyBtdWNoIGlzIHRoYXQKKwkJICogY29uc2lkZXJlZCBhbiBpbnRlcm5hbCBk ZXRhaWwgb2YgdGhlIEFNPworCQkgKgorCQkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIGludGVn cmF0ZSB0aGlzIGludG8gaW5kZXhfZmV0Y2hfaGVhcCgpLCBzbyB0aGF0CisJCSAqIHdlIGRv bid0IG5lZWQgdG8gZG8gaXQgYWZ0ZXIgZWFjaCBjYWxsPyBTZWVtcyBlYXN5IHRvIGZlcmdl dC9taXNzLgorCQkgKi8KKwkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCisJCXsKKwkJ CXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKKworCQkJLyoKKwkJCSAqIEZJWE1F IFRoaXMgaXMgbm90IGdyZWF0LCBiZWNhdXNlIHdlJ2xsIGhhdmUgdG8gd2FsayB0aHJvdWdo IHRoZQorCQkJICogd2hvbGUgYml0bWFwIGxhdGVyLCB0byBtYXliZSBhZGQga2lsbGVkIHR1 cGxlcyB0byB0aGUgcmVndWxhcgorCQkJICogYXJyYXkuIE1pZ2h0IGJlIGNvc3RseSBmb3Ig bGFyZ2UgYmF0Y2hlcy4gTWF5YmUgaXQnZCBiZSBiZXR0ZXIKKwkJCSAqIHRvIGRvIHdoYXQg YnRyZWUgZG9lcyBhbmQgc3Rhc2ggdGhlIGluZGV4ZXMgKGp1c3Qgc29tZSBsaW1pdGVkCisJ CQkgKiBudW1iZXIpLgorCQkJICovCisJCQlpZiAoc2Nhbi0+eHNfYmF0Y2gtPm5LaWxsZWRJ dGVtcyA8IHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplKQorCQkJCXNjYW4tPnhzX2JhdGNoLT5r aWxsZWRJdGVtc1tzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zKytdCisJCQkJCT0gc2Nh bi0+eHNfYmF0Y2gtPmN1cnJJbmRleDsKKwkJfQorCX0KKworCS8qIGNvbXByZWhlbnNpdmUg Y2hlY2tzIG9mIGJhdGNoaW5nIGluZm8gKi8KKwlBc3NlcnRDaGVja0JhdGNoSW5mbyhzY2Fu KTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWlu ZGV4X2JhdGNoX3ByZWZldGNoIC0gcHJlZmV0Y2ggcGFnZXMgZm9yIFRJRHMgaW4gY3VycmVu dCBiYXRjaAorICoKKyAqIFRoZSBwcmVmZXRjaCBkaXN0YW5jZSBpcyBpbmNyZWFzZWQgZ3Jh ZHVhbGx5LCBzaW1pbGFyIHRvIHdoYXQgd2UgZG8gZm9yCisgKiBiaXRtYXAgaGVhcCBzY2Fu cy4gV2Ugc3RhcnQgZnJvbSBkaXN0YW5jZSAwIChubyBwcmVmZXRjaCksIGFuZCB0aGVuIGlu IGVhY2gKKyAqIGl0ZXJhdGlvbiBpbmNyZW1lbnQgdGhlIGRpc3RhbmNlIHVwIHRvIHByZWZl dGNoTWF4aW11bS4KKyAqCisgKiBUaGUgcHJlZmV0Y2ggZGlzdGFuY2UgaXMgcmVzZXQgKHRv IDApIG9ubHkgb24gcmVzY2Fucywgbm90IGJldHdlZW4gYmF0Y2hlcy4KKyAqCisgKiBJdCdz IHBvc3NpYmxlIHRvIHByb3ZpZGUgYW4gaW5kZXhfcHJlZmV0Y2hfY2FsbGJhY2sgY2FsbGJh Y2ssIHRvIGFmZmVjdAorICogd2hpY2ggaXRlbXMgbmVlZCB0byBiZSBwcmVmZXRjaGVkLiBX aXRoIHByZWZldGNoX2NhbGxiYWNrPU5VTEwsIGFsbAorICogaXRlbXMgYXJlIHByZWZldGNo ZWQuIFdpdGggdGhlIGNhbGxiYWNrIHByb3ZpZGVkLCB0aGUgaXRlbSBpcyBwcmVmZXRjaGVk CisgKiBpZmYgdGhlIGNhbGxiYWNrIGFuZCByZXR1cm5zIHRydWUuCisgKgorICogVGhlICJh cmciIGFyZ3VtZW50IGlzIHVzZWQgdG8gcGFzcyBhIHN0YXRlIGZvciB0aGUgcGxhbiBub2Rl IGludm9raW5nIHRoZQorICogZnVuY3Rpb24sIGFuZCBpcyB0aGVuIHBhc3NlZCB0byB0aGUg Y2FsbGJhY2suIFRoaXMgbWVhbnMgdGhlIGNhbGxiYWNrIGlzCisgKiBzcGVjaWZpYyB0byB0 aGUgcGxhbiBzdGF0ZS4KKyAqCisgKiBYWFggdGhlIHByZWZldGNoTWF4aW11bSBkZXBlbmRz IG9uIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSwgYW5kIGFsc28gb24KKyAqIHRhYmxlc3Bh Y2Ugb3B0aW9ucy4KKyAqCisgKiBYWFggRm9yIGFjY2Vzc2VzIHRoYXQgY2hhbmdlIHNjYW4g ZGlyZWN0aW9uLCB3ZSBtYXkgZG8gYSBsb3Qgb2YgdW5uZWNlc3NhcnkKKyAqIHByZWZldGNo aW5nIChiZWNhdXNlIHdlIHdpbGwgcmUtaXNzdWUgcHJlZmV0Y2hlcyBmb3Igd2hhdCB3ZSBy ZWNlbnRseSByZWFkKS4KKyAqIEknbSBub3Qgc3VyZSBpZiB0aGVyZSdzIGEgc2ltcGxlIHdh eSB0byB0cmFjayB3aGF0IHdhcyBhbHJlYWR5IHByZWZldGNoZWQuCisgKiBNYXliZSB3ZSBj b3VsZCBjb3VudCBob3cgZmFyIHdlIGdvdCAoaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uKSwg a2VlcCB0aGF0CisgKiBhcyBhIHdhdGVybWFyaywgYW5kIG5ldmVyIHByZWZldGNoIGFnYWlu IGJlbG93IGl0LgorICoKKyAqIFhYWCBNYXliZSB3cmFwIHRoaXMgaW4gaWZkZWYgVVNFX1BS RUZFVENIPworICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9w cmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkgaW5kZXhfcHJlZmV0Y2hfY2FsbGJhY2sgcHJlZmV0Y2hfY2FsbGJhY2ssIHZvaWQg KmFyZykKK3sKKwlpbnQJCQlwcmVmZXRjaFN0YXJ0LAorCQkJCXByZWZldGNoRW5kOworCisJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCS8qIFdoZXJl IHNob3VsZCB3ZSBzdGFydCB0byBwcmVmZXRjaD8gKi8KKwkJcHJlZmV0Y2hTdGFydCA9IE1h eChzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4LAorCQkJCQkJCXNjYW4tPnhzX2JhdGNoLT5w cmVmZXRjaEluZGV4KTsKKworCQkvKgorCQkgKiBXaGVyZSBzaG91bGQgd2Ugc3RvcCBwcmVm ZXRjaGluZz8gdGhpcyBpcyB0aGUgZmlyc3QgaXRlbSB0aGF0IHdlIGRvCisJCSAqIE5PVCBw cmVmZXRjaCwgaS5lLiBpdCBjYW4gYmUgdGhlIGZpcnN0IGl0ZW0gYWZ0ZXIgdGhlIGJhdGNo LgorCQkgKi8KKwkJcHJlZmV0Y2hFbmQgPSBNaW4oKHNjYW4tPnhzX2JhdGNoLT5jdXJySW5k ZXggKyAxKSArIHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaFRhcmdldCwKKwkJCQkJCSAgc2Nh bi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyk7CisKKwkJLyogRklYTUUgc2hvdWxkIGNhbGN1bGF0 ZSBpbiBhIHdheSB0byBtYWtlIHRoaXMgdW5uZWNlc3NhcnkgKi8KKwkJcHJlZmV0Y2hTdGFy dCA9IE1heChNaW4ocHJlZmV0Y2hTdGFydCwgc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyAt IDEpLCAwKTsKKwkJcHJlZmV0Y2hFbmQgPSBNYXgoTWluKHByZWZldGNoRW5kLCBzY2FuLT54 c19iYXRjaC0+bmhlYXB0aWRzIC0gMSksIDApOworCisJCS8qIHJlbWVtYmVyIGhvdyBmYXIg d2UgcHJlZmV0Y2hlZCAvIHdoZXJlIHRvIHN0YXJ0IHRoZSBuZXh0IHByZWZldGNoICovCisJ CXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4ID0gcHJlZmV0Y2hFbmQ7CisJfQorCWVs c2UKKwl7CisJCS8qIFdoZXJlIHNob3VsZCB3ZSBzdGFydCB0byBwcmVmZXRjaD8gKi8KKwkJ cHJlZmV0Y2hFbmQgPSBNaW4oc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCwKKwkJCQkJCSAg c2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXgpOworCisJCS8qCisJCSAqIFdoZXJlIHNo b3VsZCB3ZSBzdG9wIHByZWZldGNoaW5nPyB0aGlzIGlzIHRoZSBmaXJzdCBpdGVtIHRoYXQg d2UgZG8KKwkJICogTk9UIHByZWZldGNoLCBpLmUuIGl0IGNhbiBiZSB0aGUgZmlyc3QgaXRl bSBhZnRlciB0aGUgYmF0Y2guCisJCSAqLworCQlwcmVmZXRjaFN0YXJ0ID0gTWF4KChzY2Fu LT54c19iYXRjaC0+Y3VyckluZGV4IC0gMSkgLSBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hU YXJnZXQsCisJCQkJCQkJLTEpOworCisJCS8qIEZJWE1FIHNob3VsZCBjYWxjdWxhdGUgaW4g YSB3YXkgdG8gbWFrZSB0aGlzIHVubmVjZXNzYXJ5ICovCisJCXByZWZldGNoU3RhcnQgPSBN YXgoTWluKHByZWZldGNoU3RhcnQsIHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgLSAxKSwg MCk7CisJCXByZWZldGNoRW5kID0gTWF4KE1pbihwcmVmZXRjaEVuZCwgc2Nhbi0+eHNfYmF0 Y2gtPm5oZWFwdGlkcyAtIDEpLCAwKTsKKworCQkvKiByZW1lbWJlciBob3cgZmFyIHdlIHBy ZWZldGNoZWQgLyB3aGVyZSB0byBzdGFydCB0aGUgbmV4dCBwcmVmZXRjaCAqLworCQlzY2Fu LT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IHByZWZldGNoU3RhcnQ7CisJfQorCisJLyoK KwkgKiBJdCdzIHBvc3NpYmxlIHdlIGdldCBpbnZlcnRlZCBwcmVmZXRjaCByYW5nZSBhZnRl ciBhIHJlc3RycG9zKCkgY2FsbCwKKwkgKiBiZWNhdXNlIHdlIGludGVudGlvbmFsbHkgZG9u J3QgcmVzZXQgdGhlIHByZWZldGNoSW5kZXggLSB3ZSBkb24ndCB3YW50CisJICogdG8gcHJl ZmV0Y2ggcGFnZXMgb3ZlciBhbmQgb3ZlciBpbiB0aGlzIGNhc2UuIFdlJ2xsIGRvIG5vdGhp bmcgaW4gdGhhdAorCSAqIGNhc2UsIGV4Y2VwdCBmb3IgdGhlIEFzc2VydENoZWNrQmF0Y2hJ bmZvKCkuCisJICoKKwkgKiBGSVhNRSBJIHN1c3BlY3QgdGhpcyBhY3R1YWxseSBkb2VzIG5v dCB3b3JrIGNvcnJlY3RseSBpZiB3ZSBjaGFuZ2UgdGhlCisJICogZGlyZWN0aW9uLCBiZWNh dXNlIHRoZSBwcmVmZXRjaEluZGV4IHdpbGwgZmxpcCBiZXR3ZWVuIHR3byBleHRyZW1lcwor CSAqIHRoYW5rcyB0byB0aGUgTWluL01heC4KKwkgKi8KKworCS8qCisJICogSW5jcmVhc2Ug dGhlIHByZWZldGNoIGRpc3RhbmNlLCBidXQgbm90IGJleW9uZCBwcmVmZXRjaE1heGltdW0u IFdlCisJICogaW50ZW50aW9uYWxseSBkbyB0aGlzIGFmdGVyIGNhbGN1bGF0aW5nIHN0YXJ0 L2VuZCwgc28gdGhhdCB3ZSBzdGFydAorCSAqIGFjdHVhbGx5IHByZWZldGNoaW5nIG9ubHkg YWZ0ZXIgdGhlIGZpcnN0IGl0ZW0uCisJICovCisJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNo VGFyZ2V0ID0gTWluKHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaFRhcmdldCArIDEsCisJCQkJ CQkJCQkJIHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaE1heGltdW0pOworCisJLyogY29tcHJl aGVuc2l2ZSBjaGVja3Mgb2YgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJ bmZvKHNjYW4pOworCisJLyogZmluYWxseSwgZG8gdGhlIGFjdHVhbCBwcmVmZXRjaGluZyAq LworCWZvciAoaW50IGkgPSBwcmVmZXRjaFN0YXJ0OyBpIDwgcHJlZmV0Y2hFbmQ7IGkrKykK Kwl7CisJCS8qIHNraXAgYmxvY2sgaWYgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIHNheXMgc28g Ki8KKwkJaWYgKHByZWZldGNoX2NhbGxiYWNrICYmICFwcmVmZXRjaF9jYWxsYmFjayhzY2Fu LCBkaXJlY3Rpb24sIGFyZywgaSkpCisJCQljb250aW51ZTsKKworCQlQcmVmZXRjaEJ1ZmZl cihzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwKKwkJCQkJICAgSXRlbVBvaW50 ZXJHZXRCbG9ja051bWJlcigmc2Nhbi0+eHNfYmF0Y2gtPmhlYXB0aWRzW2ldKSk7CisJfQor fQorCisvKgorICogaW5kZXhfYmF0Y2hfaW5pdAorICoJCUluaXRpYWxpemUgdmFyaW91cyBm aWVsZHMgLyBhcnJheXMgbmVlZGVkIGJ5IGJhdGNoaW5nLgorICoKKyAqIEZJWE1FIFRoaXMg aXMgYSBiaXQgYWQtaG9jIGhvZGdlIHBvZGdlLCBkdWUgdG8gaG93IEkgd2FzIGFkZGluZyBt b3JlIGFuZAorICogbW9yZSBwaWVjZXMuIFNvbWUgb2YgdGhlIGZpZWxkcyBtYXkgYmUgbm90 IHF1aXRlIG5lY2Vzc2FyeSwgbmVlZHMgY2xlYW51cC4KKyAqLworc3RhdGljIHZvaWQKK2lu ZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIGluaXQgYmF0Y2hp bmcgaW5mbywgYnV0IG9ubHkgaWYgYmF0Y2ggc3VwcG9ydGVkICovCisJQXNzZXJ0KHNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJc2Nh bi0+eHNfYmF0Y2ggPSBwYWxsb2MwKHNpemVvZihJbmRleFNjYW5CYXRjaERhdGEpKTsKKwor CS8qCisJICogU2V0IHNvbWUgcmVhc29uYWJsZSBiYXRjaCBzaXplIGRlZmF1bHRzLgorCSAq CisJICogWFhYIE1heWJlIHNob3VsZCBkZXBlbmQgb24gcHJlZmV0Y2ggZGlzdGFuY2UsIG9y IHNvbWV0aGluZyBsaWtlIHRoYXQ/CisJICogVGhlIGluaXRTaXplIHdpbGwgYWZmZWN0IGhv dyBmYXIgYWhlYWQgd2UgY2FuIHByZWZldGNoLgorCSAqLworCXNjYW4tPnhzX2JhdGNoLT5t YXhTaXplID0gNjQ7CisJc2Nhbi0+eHNfYmF0Y2gtPmluaXRTaXplID0gODsKKwlzY2FuLT54 c19iYXRjaC0+Y3VyclNpemUgPSBzY2FuLT54c19iYXRjaC0+aW5pdFNpemU7CisKKwkvKiBp bml0aWFsaXplIHByZWZldGNoaW5nIGluZm8gKi8KKwlzY2FuLT54c19iYXRjaC0+cHJlZmV0 Y2hNYXhpbXVtID0KKwkJZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koc2Nhbi0+aGVh cFJlbGF0aW9uLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpOworCXNjYW4tPnhzX2JhdGNoLT5w cmVmZXRjaFRhcmdldCA9IDA7CisJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPSAw OworCisJLyogKi8KKwlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gLTE7CisKKwkvKiBQ cmVhbGxvY2F0ZSB0aGUgbGFyZ2VzdCBhbGxvd2VkIGFycmF5IG9mIFRJRHMuICovCisJc2Nh bi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9IDA7CisJc2Nhbi0+eHNfYmF0Y2gtPmhlYXB0aWRz ID0gcGFsbG9jMChzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIHNjYW4tPnhzX2JhdGNoLT5t YXhTaXplKTsKKworCS8qCisJICogWFhYIFdlIGNhbid0IGNoZWNrIHNjYW4tPnhzX3dhbnRf aXR1cCwgYmVjYXVzZSB0aGF0J3Mgc2V0IG9ubHkgYWZ0ZXIKKwkgKiB0aGUgc2NhbiBpcyBp bml0aWFsaXplZCAoYW5kIHdlIGluaXRpYWxpemUgaW4gYmVnaW5zY2FuKS4gTWF5YmUgd2UK KwkgKiBjb3VsZCAob3Igc2hvdWxkKSBhbGxvY2F0ZSBsYXppbHkuCisJICovCisJc2Nhbi0+ eHNfYmF0Y2gtPml0dXBzID0gcGFsbG9jKHNpemVvZihJbmRleFR1cGxlKSAqIHNjYW4tPnhz X2JhdGNoLT5tYXhTaXplKTsKKwlzY2FuLT54c19iYXRjaC0+aHR1cHMgPSBwYWxsb2Moc2l6 ZW9mKEhlYXBUdXBsZSkgKiBzY2FuLT54c19iYXRjaC0+bWF4U2l6ZSk7CisKKwlzY2FuLT54 c19iYXRjaC0+cmVjaGVjayA9IHBhbGxvYyhzaXplb2YoYm9vbCkgKiBzY2FuLT54c19iYXRj aC0+bWF4U2l6ZSk7CisKKwkvKgorCSAqIFhYWCBNYXliZSB1c2UgYSBtb3JlIGNvbXBhY3Qg Yml0bWFwPyBXZSBuZWVkIGp1c3Qgb25lIGJpdCBwZXIgZWxlbWVudCwKKwkgKiBub3QgYSBi b29sLiBUaGlzIGlzIGVhc2llciAvIG1vcmUgY29udmVuaWVudCB0byBtYW5pcHVsYXRlLCB0 aG91Z2guCisJICoKKwkgKiBYWFggTWF5YmUgc2hvdWxkIGFsbG93IG1vcmUgaXRlbXMgdGhh bnQgdGhlIG1heCBiYXRjaCBzaXplPworCSAqLworCXNjYW4tPnhzX2JhdGNoLT5uS2lsbGVk SXRlbXMgPSAwOworCXNjYW4tPnhzX2JhdGNoLT5raWxsZWRJdGVtcyA9IChpbnQgKikgcGFs bG9jMChzaXplb2YoaW50KSAqIHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplKTsKKworCS8qCisJ ICogWFhYIE1heWJlIGFsbG9jYXRlIG9ubHkgd2hlbiBhY3R1YWxseSBuZWVkZWQ/IEFsc28s IHNob3VsZG4ndCB3ZSBoYXZlIGEKKwkgKiBtZW1vcnkgY29udGV4dCBmb3IgdGhlIHByaXZh dGUgZGF0YT8KKwkgKi8KKwlzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGEgPSAoRGF0dW0g KikgcGFsbG9jMChzaXplb2YoRGF0dW0pICogc2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUpOwor CisJaWYgKHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQorCXsKKwkJaW50CQkJY250ID0g KHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplICogc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CisK KwkJc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnl2YWxzID0gKERhdHVtICopIHBhbGxvYzAoc2l6 ZW9mKERhdHVtKSAqIGNudCk7CisJCXNjYW4tPnhzX2JhdGNoLT5vcmRlcmJ5bnVsbHMgPSAo Ym9vbCAqKSBwYWxsb2MwKHNpemVvZihEYXR1bSkgKiBjbnQpOworCX0KKwllbHNlCisJewor CQlzY2FuLT54c19iYXRjaC0+b3JkZXJieXZhbHMgPSBOVUxMOworCQlzY2FuLT54c19iYXRj aC0+b3JkZXJieW51bGxzID0gTlVMTDsKKwl9CisKKwlzY2FuLT54c19iYXRjaC0+Y3R4ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJ CQkJImluZGV4c2NhbiBiYXRjaCBjb250ZXh0IiwKKwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJLyogY29tcHJlaGVuc2l2ZSBjaGVja3MgKi8KKwlBc3NlcnRD aGVja0JhdGNoSW5mbyhzY2FuKTsKK30KKworLyoKKyAqIGluZGV4X2JhdGNoX3Jlc2V0Cisg KgkJUmVzZXQgdGhlIGJhdGNoIGJlZm9yZSByZWFkaW5nIHRoZSBuZXh0IGNodW5rIG9mIGRh dGEuCisgKgorICogRklYTUUgQW5vdGhlciBiaXQgaW4gbmVlZCBvZiBjbGVhbnVwLiBUaGUg Y3VyckluZGV4IGRlZmF1bHQgKC0xKSBpcyBub3QgcXVpdGUKKyAqIGNvcnJlY3QsIGJlY2F1 c2UgZm9yIGJhY2t3YXJkcyBzY2FucyBpcyB3cm9uZy4KKyAqLworc3RhdGljIHZvaWQKK2lu ZGV4X2JhdGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBiYWlsIG91dCBp ZiBiYXRjaGluZyBub3QgZW5hYmxlZCAqLworCWlmICghc2Nhbi0+eHNfYmF0Y2gpCisJCXJl dHVybjsKKworCXNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPSAwOworCXNjYW4tPnhzX2Jh dGNoLT5wcmVmZXRjaEluZGV4ID0gMDsKKwlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0g LTE7Cit9CisKKy8qCisgKiBpbmRleF9iYXRjaF9hZGQKKyAqCQlBZGQgYW4gaXRlbSB0byB0 aGUgYmF0Y2guCisgKgorICogVGhlIGl0ZW0gaXMgYWx3YXlzIGEgVElELCBhbmQgdGhlbiBh bHNvIEluZGV4VHVwbGUgaWYgcmVxdWVzdGVkIChmb3IgSU9TKS4KKyAqIEl0ZW1zIGFyZSBh bHdheXMgYWRkZWQgZnJvbSB0aGUgYmVnaW5uaW5nIChpbmRleCAwKS4KKyAqCisgKiBSZXR1 cm5zIHRydWUgd2hlbiBhZGRpbmcgdGhlIGl0ZW0gd2FzIHN1Y2Nlc3NmdWwsIG9yIGZhbHNl IHdoZW4gdGhlIGJhdGNoCisgKiBpcyBmdWxsIChhbmQgdGhlIGl0ZW0gc2hvdWxkIGJlIGFk ZGVkIHRvIHRoZSBuZXh0IGJhdGNoKS4KKyAqLworYm9vbAoraW5kZXhfYmF0Y2hfYWRkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSXRlbVBvaW50ZXJEYXRhIHRpZCwgYm9vbCByZWNoZWNrLAor CQkJCUluZGV4VHVwbGUgaXR1cCwgSGVhcFR1cGxlIGh0dXApCit7CisJLyogY29tcHJlaGVu c2l2ZSBjaGVja3Mgb24gdGhlIGJhdGNoIGluZm8gKi8KKwlBc3NlcnRDaGVja0JhdGNoSW5m byhzY2FuKTsKKworCS8qIGRvbid0IGFkZCBUSURzIGJleW9uZCB0aGUgY3VycmVudCBiYXRj aCBzaXplICovCisJaWYgKElOREVYX0JBVENIX0lTX0ZVTEwoc2NhbikpCisJCXJldHVybiBm YWxzZTsKKworCS8qCisJICogVGhlcmUgbXVzdCBiZSBzcGFjZSBmb3IgYXQgbGVhc3Qgb25l IGVudHJ5LgorCSAqCisJICogWFhYIFNlZW1zIHJlZHVuZGFudCB3aXRoIHRoZSBlYXJsaWVy IElOREVYX0JBVENIX0lTX0ZVTEwgY2hlY2suCisJICovCisJQXNzZXJ0KHNjYW4tPnhzX2Jh dGNoLT5uaGVhcHRpZHMgPCBzY2FuLT54c19iYXRjaC0+Y3VyclNpemUpOworCUFzc2VydChz Y2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID49IDApOworCisJc2Nhbi0+eHNfYmF0Y2gtPmhl YXB0aWRzW3NjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHNdID0gdGlkOworCXNjYW4tPnhzX2Jh dGNoLT5wcml2YXRlRGF0YVtzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzXSA9IChEYXR1bSkg MDsKKworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJeworCQlzY2FuLT54c19iYXRjaC0+ aXR1cHNbc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkc10gPSBpdHVwOworCQlzY2FuLT54c19i YXRjaC0+aHR1cHNbc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkc10gPSBodHVwOworCX0KKwor CXNjYW4tPnhzX2JhdGNoLT5yZWNoZWNrW3NjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHNdID0g cmVjaGVjazsKKworCWlmIChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID4gMCkKKwl7CisJCWlu dAkJCWlkeCA9IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgKiBzY2FuLT5udW1iZXJPZk9y ZGVyQnlzOworCisJCW1lbWNweSgmc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnl2YWxzW2lkeF0s IHNjYW4tPnhzX29yZGVyYnl2YWxzLCBzaXplb2YoRGF0dW0pICogc2Nhbi0+bnVtYmVyT2ZP cmRlckJ5cyk7CisJCW1lbWNweSgmc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnludWxsc1tpZHhd LCBzY2FuLT54c19vcmRlcmJ5bnVsbHMsIHNpemVvZihib29sKSAqIHNjYW4tPm51bWJlck9m T3JkZXJCeXMpOworCX0KKworCXNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMrKzsKKworCS8q IGNvbXByZWhlbnNpdmUgY2hlY2tzIG9uIHRoZSBiYXRjaCBpbmZvICovCisJQXNzZXJ0Q2hl Y2tCYXRjaEluZm8oc2Nhbik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCmluZGV4IDY4NmEzMjA2ZjcyLi5hMzJjYzZlN2EzYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNDEsNiArMTQxLDcgQEAgYnRoYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGJ0YmVn aW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBidHJlc2NhbjsKIAlhbXJvdXRpbmUt PmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IGJ0 Z2V0YmF0Y2g7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGJ0Z2V0Yml0bWFwOwogCWFt cm91dGluZS0+YW1lbmRzY2FuID0gYnRlbmRzY2FuOwogCWFtcm91dGluZS0+YW1tYXJrcG9z ID0gYnRtYXJrcG9zOwpAQCAtMjU5LDYgKzI2MCw1MyBAQCBidGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcmV0dXJuIHJlczsKIH0KIAorLyoK KyAqCWJ0Z2V0YmF0Y2goKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRo ZSBzY2FuLgorICoKKyAqIFhYWCBQcmV0dHkgbXVjaCBsaWtlIGJ0Z2V0dHVwbGUoKSwgYnV0 IGZvciBiYXRjaGVzIG9mIHR1cGxlcy4KKyAqLworYm9vbAorYnRnZXRiYXRjaChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlib29sCQlyZXM7CisKKwkvKiBidHJl ZSBpbmRleGVzIGFyZSBuZXZlciBsb3NzeSAqLworCXNjYW4tPnhzX3JlY2hlY2sgPSBmYWxz ZTsKKworCS8qIEVhY2ggbG9vcCBpdGVyYXRpb24gcGVyZm9ybXMgYW5vdGhlciBwcmltaXRp dmUgaW5kZXggc2NhbiAqLworCWRvCisJeworCQkvKgorCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5 IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwgd2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbgorCQkg KiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHll dCwgd2UgY2FsbAorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4g dGhlIHNjYW4uCisJCSAqLworCQlpZiAoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3Mp KQorCQkJcmVzID0gX2J0X2ZpcnN0X2JhdGNoKHNjYW4sIGRpcik7CisJCWVsc2UKKwkJewor CQkJLyoKKwkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0dXBsZXMgZnJv bSB0aGUgcHJldmlvdXMgYmF0Y2guCisJCQkgKi8KKwkJCV9idF9raWxsX2JhdGNoKHNjYW4p OworCisJCQkvKgorCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgorCQkJICovCisJCQly ZXMgPSBfYnRfbmV4dF9iYXRjaChzY2FuLCBkaXIpOworCQl9CisKKwkJLyogSWYgd2UgaGF2 ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCisJCWlmIChyZXMpCisJCQlicmVhazsKKwor CQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBuZWVkIGFub3RoZXIgcHJpbWl0aXZlIGlu ZGV4IHNjYW4gKi8KKwl9IHdoaWxlIChzby0+bnVtQXJyYXlLZXlzICYmIF9idF9zdGFydF9w cmltX3NjYW4oc2NhbiwgZGlyKSk7CisKKwlyZXR1cm4gcmVzOworfQorCiAvKgogICogYnRn ZXRiaXRtYXAoKSAtLSBnZXRzIGFsbCBtYXRjaGluZyB0dXBsZXMsIGFuZCBhZGRzIHRoZW0g dG8gYSBiaXRtYXAKICAqLwpAQCAtMzM4LDYgKzM4NiwxMCBAQCBidGJlZ2luc2NhbihSZWxh dGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+a2lsbGVkSXRlbXMg PSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICovCiAJc28tPm51bUtpbGxlZCA9IDA7CiAKKwkv KiBiYXRjaCByYW5nZSwgaW5pdGlhbGx5IGVtcHR5ICovCisJc28tPmJhdGNoLmZpcnN0SW5k ZXggPSAtMTsKKwlzby0+YmF0Y2gubGFzdEluZGV4ID0gLTE7CisKIAkvKgogCSAqIFdlIGRv bid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3 ZSBkbyBub3QKIAkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRp bCBidHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cApAQCAtMzY0LDYgKzQxNiw5IEBAIGJ0 cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5r ZXlzLAogCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEg ZHJvcCB0aGUgcGlucyAqLwogCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkK IAl7CisJCS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0byB0aGUg cmVndWxhciBhcnJheS4gKi8KKwkJX2J0X2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJLyogQmVm b3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAq LwogCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCiAJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwpA QCAtNDA4LDYgKzQ2MywxMCBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQlzY2FuLT5udW1iZXJPZktleXMgKiBz aXplb2YoU2NhbktleURhdGEpKTsKIAlzby0+bnVtYmVyT2ZLZXlzID0gMDsJCS8qIHVudGls IF9idF9wcmVwcm9jZXNzX2tleXMgc2V0cyBpdCAqLwogCXNvLT5udW1BcnJheUtleXMgPSAw OwkJLyogZGl0dG8gKi8KKworCS8qIFJlc2V0IHRoZSBiYXRjaCAoZXZlbiBpZiBub3QgYmF0 Y2hlZCBzY2FuKSAqLworCXNvLT5iYXRjaC5maXJzdEluZGV4ID0gLTE7CisJc28tPmJhdGNo Lmxhc3RJbmRleCA9IC0xOwogfQogCiAvKgpAQCAtNDIxLDYgKzQ4MCw5IEBAIGJ0ZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pCiAJLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQg bG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCiAJaWYgKEJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKQogCXsKKwkJLyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZyb20g dGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5LiAqLworCQlfYnRfa2lsbF9iYXRjaChz Y2FuKTsKKwogCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBh bnkga2lsbGVkIGl0ZW1zICovCiAJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKIAkJCV9idF9r aWxsaXRlbXMoc2Nhbik7CkBAIC01MDEsNiArNTYzLDkgQEAgYnRyZXN0cnBvcyhJbmRleFNj YW5EZXNjIHNjYW4pCiAJCSAqLwogCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpCiAJCXsKKwkJCS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0 byB0aGUgcmVndWxhciBhcnJheS4gKi8KKwkJCV9idF9raWxsX2JhdGNoKHNjYW4pOworCiAJ CQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCiAJCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCiAJCQkJX2J0X2tpbGxpdGVt cyhzY2FuKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IDI1 NTFkZjhhNjcxLi4zMTk2YmE2NDBkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNlYXJjaC5jCkBAIC0xNTI3LDYgKzE1MjcsMjgzIEBAIF9idF9uZXh0KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcmV0dXJuIHRydWU7CiB9CiAKKworc3Rh dGljIHZvaWQKK0Fzc2VydENoZWNrQlRCYXRjaEluZm8oQlRTY2FuT3BhcXVlIHNvKQorewor I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkvKiBzaG91bGQgYmUgdmFsaWQgaXRlbXMg KHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCBsZWFmIHBhZ2UpICovCisJQXNzZXJ0KHNv LT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+YmF0Y2guZmlyc3RJbmRleCk7CisJQXNzZXJ0 KHNvLT5iYXRjaC5maXJzdEluZGV4IDw9IHNvLT5iYXRjaC5sYXN0SW5kZXgpOworCUFzc2Vy dChzby0+YmF0Y2gubGFzdEluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKyNlbmRp ZgorfQorCisvKgorICogX2J0X2NvcHlfYmF0Y2gKKyAqCQlDb3B5IGEgc2VjdGlvbiBvZiB0 aGUgbGVhZiBwYWdlIGludG8gdGhlIGJhdGNoLgorICovCitzdGF0aWMgdm9pZAorX2J0X2Nv cHlfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQlRTY2Fu T3BhcXVlIHNvLAorCQkJICAgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworCS8qCisJICogV2Un cmUgcmVhZGluZyB0aGUgZmlyc3QgYmF0Y2gsIGFuZCB0aGVyZSBzaG91bGQgYWx3YXlzIGJl IGF0IGxlYXN0IG9uZQorCSAqIGl0ZW0gKG90aGVyd2lzZSBfYnRfZmlyc3Qgd291bGQgcmV0 dXJuIGZhbHNlKS4gU28gd2Ugc2hvdWxkIG5ldmVyIGdldAorCSAqIGludG8gc2l0dWF0aW9u IHdpdGggZW1wdHkgc3RhcnQvZW5kIHJhbmdlLiBJbiB0aGUgd29yc3QgY2FzZSwgdGhlcmUg aXMKKwkgKiBqdXN0IGEgc2luZ2xlIGl0ZW0sIGluIHdoaWNoIGNhc2UgKHN0YXJ0ID09IGVu ZCkuCisJICovCisJQXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CisKKwkvKiBUaGUgcmFuZ2Ugb2Yg aXRlbXMgc2hvdWxkIGZpdCBpbnRvIHRoZSBjdXJyZW50IGJhdGNoIHNpemUuICovCisJQXNz ZXJ0KChlbmQgLSBzdGFydCArIDEpIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSk7CisK Kwlzby0+YmF0Y2guZmlyc3RJbmRleCA9IHN0YXJ0OworCXNvLT5iYXRjaC5sYXN0SW5kZXgg PSBlbmQ7CisKKwlBc3NlcnRDaGVja0JUQmF0Y2hJbmZvKHNvKTsKKworCS8qCisJICogV2Fs ayB0aHJvdWdoIHRoZSByYW5nZSBvZiBpbmRleCB0dXBsZXMsIGNvcHkgdGhlbSBpbnRvIHRo ZSBiYXRjaC4gSWYKKwkgKiByZXF1ZXN0ZWQsIHNldCB0aGUgaW5kZXggdHVwbGUgdG9vLgor CSAqCisJICogV2UgZG9uJ3Qga25vdyBpZiB0aGUgYmF0Y2ggaXMgZnVsbCBhbHJlYWR5IC0g d2UganVzdCB0cnkgdG8gYWRkIGl0LCBhbmQKKwkgKiBiYWlsIG91dCBpZiBpdCBmYWlscy4K KwkgKgorCSAqIEZJWE1FIFRoaXMgc2VlbXMgd3JvbmcsIGFjdHVhbGx5LiBXZSB1c2UgY3Vy clNpemUgd2hlbiBjYWxjdWxhdGluZyB0aGUKKwkgKiBzdGFydC9lbmQgcmFuZ2UsIHNvIHRo ZSBhZGQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgorCSAqLworCXdoaWxlIChzdGFydCA8PSBl bmQpCisJeworCQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVt c1tzdGFydF07CisJCUluZGV4VHVwbGUJaXR1cCA9IE5VTEw7CisKKwkJaWYgKHNjYW4tPnhz X3dhbnRfaXR1cCkKKwkJCWl0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsg Y3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKKworCQkvKiB0cnkgdG8gYWRkIGl0IHRvIGJhdGNo LCBpZiB0aGVyZSdzIHNwYWNlICovCisJCWlmICghaW5kZXhfYmF0Y2hfYWRkKHNjYW4sIGN1 cnJJdGVtLT5oZWFwVGlkLCBzY2FuLT54c19yZWNoZWNrLCBpdHVwLCBOVUxMKSkKKwkJCWJy ZWFrOworCisJCXN0YXJ0Kys7CisJfQorCisJLyoKKwkgKiBzZXQgdGhlIHN0YXJ0aW5nIHBv aW50CisJICoKKwkgKiBYWFggbWlnaHQgYmUgYmV0dGVyIGRvbmUgaW4gaW5kZXhhbS5jCisJ ICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJc2Nhbi0+eHNfYmF0 Y2gtPmN1cnJJbmRleCA9IC0xOworCWVsc2UKKwkJc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRl eCA9IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHM7CisKKwkvKiBzaG91bGRuJ3QgYmUgcG9z c2libGUgdG8gZW5kIGhlcmUgd2l0aCBhbiBlbXB0eSBiYXRjaCAqLworCUFzc2VydChzY2Fu LT54c19iYXRjaC0+bmhlYXB0aWRzID4gMCk7Cit9CisKKy8qCisgKglfYnRfZmlyc3RfYmF0 Y2goKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBpbiBhIHNjYW4uCisgKgorICogQSBiYXRj aCB2YXJpYW50IG9mIF9idF9maXJzdCgpLiBNb3N0IG9mIHRoZSBjb21tZW50cyBmb3IgdGhh dCBmdW5jdGlvbgorICogYXBwbHkgaGVyZSB0b28uCisgKgorICogWFhYIFRoaXMgb25seSBw b3B1bGF0ZXMgdGhlIGJhdGNoLCBpdCBkb2VzIG5vdCBzZXQgYW55IG90aGVyIGZpZWxkcyBs aWtlCisgKiBzY2FuLT54c19oZWFwdGlkIG9yIHNjYW4tPnhzX2l0dXAuIFRoYXQgaGFwcGVu cyBpbiBnZXRuZXh0X3RpZCgpIGNhbGxzLgorICoKKyAqIFhYWCBJJ20gbm90IHN1cmUgaXQg d29ya3MgdG8gbWl4IGJhdGNoZWQgYW5kIG5vbi1iYXRjaGVzIGNhbGxzLCBlLmcuIGdldAor ICogYSBUSUQgYW5kIHRoZW4gYSBiYXRjaCBvZiBUSURzLiBJdCBwcm9iYWJseSBzaG91bGQg d29yayBhcyBsb25nIGFzIHdlCisgKiB1cGRhdGUgaXRlbUluZGV4IGNvcnJlY3RseSwgYnV0 IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBraWxsZWQgaXRlbXMKKyAqIChyaWdodCBu b3cgdGhlIHR3byBwbGFjZXMgdXNlIGRpZmZlcmVudCB3YXlzIHRvIGNvbW11bmljYXRlIHdo aWNoIGl0ZW1zCisgKiBzaG91bGQgYmUga2lsbGVkKS4KKyAqLworYm9vbAorX2J0X2ZpcnN0 X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCisJQXNzZXJ0 KHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPT0gMCk7CisKKwkvKgorCSAqIE1hcmsgdGhl IGJhdGNoIGFzIGVtcHR5LgorCSAqCisJICogVGhpcyBtaWdodCBzZWVtcyBhIGJpdCBzdHJh bmdlLCBiZWNhdXNlIHN1cmVseSB0aGUgYmF0Y2ggc2hvdWxkIGJlCisJICogZW1wdHkgYmVm b3JlIHJlYWRpbmcgdGhlIGZpcnN0IGJhdGNoICh3ZSByZXNldCB0aG9zZSBpbmRleGVzIGJv dGggaW4KKwkgKiBidGJlZ2luc2NhbiBhbmQgYnRyZXNjYW4pLiBTbyB3aHkgbm90IGFuIGFz c2VydD8gV2UgY2FuIGdldCBoZXJlIGluCisJICogZGlmZmVyZW50IHdheXMgdG9vIC0gbm90 IGp1c3QgYWZ0ZXIgYmVnaW5zY2FuL3Jlc2NhbiwgYnV0IGFsc28gd2hlbgorCSAqIGl0ZXJh dGluZyBvdmVyIFNjYWxhckFycmF5T3BzIC0gaW4gd2hpY2ggY2FzZSB3ZSdsbCBzZWUgdGhl IGxhc3QgYmF0Y2gKKwkgKiBvZiB0aGUgcHJlY2VkaW5nIHNjYW4uCisJICovCisJc28tPmJh dGNoLmZpcnN0SW5kZXggPSAtMTsKKwlzby0+YmF0Y2gubGFzdEluZGV4ID0gLTE7CisKKwkv KiB3ZSBoYXZlbid0IHZpc2l0ZWQgYW55IGxlYWYgcGFnZXMgeWV0LCBzbyBwcm9jZWVkIHRv IHJlYWRpbmcgb25lICovCisJaWYgKF9idF9maXJzdChzY2FuLCBkaXIpKQorCXsKKwkJLyog cmFuZ2Ugb2YgdGhlIGxlYWYgdG8gY29weSBpbnRvIHRoZSBiYXRjaCAqLworCQlpbnQJCQlz dGFydCwKKwkJCQkJZW5kOworCisJCS8qIGRldGVybWluZSB3aGljaCBwYXJ0IG9mIHRoZSBs ZWFmIHBhZ2UgdG8gZXh0cmFjdCAqLworCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXIpKQorCQl7CisJCQlzdGFydCA9IHNvLT5jdXJyUG9zLmZpcnN0SXRlbTsKKwkJCWVuZCA9 IE1pbihzdGFydCArIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwgc28tPmN1cnJQ b3MubGFzdEl0ZW0pOworCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKGVuZCArIDEpOwor CQl9CisJCWVsc2UKKwkJeworCQkJZW5kID0gc28tPmN1cnJQb3MubGFzdEl0ZW07CisJCQlz dGFydCA9IE1heChlbmQgLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksCisJCQkJ CQlzby0+Y3VyclBvcy5maXJzdEl0ZW0pOworCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0g KHN0YXJ0IC0gMSk7CisJCX0KKworCQkvKgorCQkgKiBDb3B5IHRoZSBzZWxlY3RlZCByYW5n ZSBvZiBpdGVtcyBpbnRvIHRoZSBiYXRjaCwgc2V0IHRoZSBiYXRjaAorCQkgKiBjdXJyZW50 IGluZGV4IHByb3Blcmx5IChiZWZvcmUgZmlyc3QgLyBhZnRlciBsYXN0IGl0ZW0sIGRlcGVu ZGluZworCQkgKiBvbiBzY2FuIGRpcmVjdGlvbi4KKwkJICovCisJCV9idF9jb3B5X2JhdGNo KHNjYW4sIGRpciwgc28sIHN0YXJ0LCBlbmQpOworCisJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqCV9idF9uZXh0X2JhdGNoKCkgLS0gR2V0IHRo ZSBuZXh0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KKyAqCisgKiBBIGJhdGNoIHZhcmlh bnQgb2YgX2J0X25leHQoKS4gTW9zdCBvZiB0aGUgY29tbWVudHMgZm9yIHRoYXQgZnVuY3Rp b24KKyAqIGFwcGx5IGhlcmUgdG9vLgorICoKKyAqIFdlIHNob3VsZCBvbmx5IGdldCBoZXJl IG9ubHkgd2hlbiB0aGUgY3VycmVudCBiYXRjaCBoYXMgbm8gbW9yZSBpdGVtcworICogaW4g dGhlIGdpdmVuIGRpcmVjdGlvbi4gV2UgZG9uJ3QgZ2V0IGhlcmUgd2l0aCBlbXB0eSBiYXRj aGVzLCB0aGF0J3MKKyAqIGhhbmRsZWQgYnkgX2J0X2Zpc3RfYmF0Y2goKS4KKyAqCisgKiBY WFggU2VlIGFsc28gdGhlIGNvbW1lbnRzIGF0IF9idF9maXJzdF9iYXRjaCgpIGFib3V0IHJl dHVybmluZyBhIHNpbmdsZQorICogYmF0Y2ggZm9yIHRoZSBwYWdlLCBldGMuCisgKi8KK2Jv b2wKK19idF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCit7CisJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OworCisJaW50CQkJc3RhcnQsCisJCQkJZW5kOworCisJQXNzZXJ0KHNjYW4tPnhzX2JhdGNo LT5uaGVhcHRpZHMgPT0gMCk7CisKKwlBc3NlcnRDaGVja0JUQmF0Y2hJbmZvKHNvKTsKKwor CS8qCisJICogQ2hlY2sgaWYgd2Ugc3RpbGwgaGF2ZSBzb21lIGl0ZW1zIG9uIHRoZSBjdXJy ZW50IGxlYWYgcGFnZS4gSWYgeWVzLAorCSAqIGxvYWQgdGhlbSBpbnRvIGEgYmF0Y2ggYW5k IHJldHVybi4KKwkgKgorCSAqIFhYWCB0cnkgY29tYmluaW5nIHRoYXQgd2l0aCB0aGUgbmV4 dCBibG9jaywgdGhlIGlubmVyIHdoaWxlIGxvb3AgaXMKKwkgKiBleGFjdGx5IHRoZSBzYW1l LgorCSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJeworCQlzdGFy dCA9IHNvLT5iYXRjaC5sYXN0SW5kZXggKyAxOworCQllbmQgPSBNaW4oc3RhcnQgKyAoc2Nh bi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksIHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkJ c28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKGVuZCArIDEpOworCX0KKwllbHNlCisJeworCQll bmQgPSBzby0+YmF0Y2guZmlyc3RJbmRleCAtIDE7CisJCXN0YXJ0ID0gTWF4KGVuZCAtIChz Y2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJc28tPmN1cnJQb3MuZmlyc3RJ dGVtKTsKKwkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKHN0YXJ0IC0gMSk7CisJfQorCisJ LyoKKwkgKiBXZSBoYXZlIG1vcmUgaXRlbXMgb24gdGhlIGN1cnJlbnQgbGVhZiBwYWdlLgor CSAqLworCWlmIChzdGFydCA8PSBlbmQpCisJeworCQlfYnRfY29weV9iYXRjaChzY2FuLCBk aXIsIHNvLCBzdGFydCwgZW5kKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBX ZSd2ZSBjb25zdW1lZCBhbGwgaXRlbXMgZnJvbSB0aGUgY3VycmVudCBsZWFmIHBhZ2UsIHNv IHRyeSByZWFkaW5nIHRoZQorCSAqIG5leHQgb25lLCBhbmQgcHJvY2VzcyBpdC4KKwkgKi8K KwlpZiAoX2J0X25leHQoc2NhbiwgZGlyKSkKKwl7CisJCS8qCisJCSAqIENoZWNrIGlmIHdl IHN0aWxsIGhhdmUgc29tZSBpdGVtcyBvbiB0aGUgY3VycmVudCBsZWFmIHBhZ2UuIElmIHll cywKKwkJICogbG9hZCB0aGVtIGludG8gYSBiYXRjaCBhbmQgcmV0dXJuLgorCQkgKgorCQkg KiBYWFggdHJ5IGNvbWJpbmluZyB0aGF0IHdpdGggdGhlIG5leHQgYmxvY2ssIHRoZSBpbm5l ciB3aGlsZSBsb29wIGlzCisJCSAqIGV4YWN0bHkgdGhlIHNhbWUuCisJCSAqLworCQlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQl7CisJCQlzdGFydCA9IHNvLT5jdXJy UG9zLmZpcnN0SXRlbTsKKwkJCWVuZCA9IE1pbihzdGFydCArIChzY2FuLT54c19iYXRjaC0+ Y3VyclNpemUgLSAxKSwgc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQkJc28tPmN1cnJQb3Mu aXRlbUluZGV4ID0gKGVuZCArIDEpOworCQl9CisJCWVsc2UKKwkJeworCQkJZW5kID0gc28t PmN1cnJQb3MubGFzdEl0ZW07CisJCQlzdGFydCA9IE1heChlbmQgLSAoc2Nhbi0+eHNfYmF0 Y2gtPmN1cnJTaXplIC0gMSksCisJCQkJCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0pOworCQkJ c28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKHN0YXJ0IC0gMSk7CisJCX0KKworCQlfYnRfY29w eV9iYXRjaChzY2FuLCBkaXIsIHNvLCBzdGFydCwgZW5kKTsKKworCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKglfYnRfa2lsbF9iYXRjaCgpIC0t IHJlbWVtYmVyIHRoZSBpdGVtcy10by1iZS1raWxsZWQgZnJvbSB0aGUgY3VycmVudCBiYXRj aAorICoKKyAqIFdlIHNpbXBseSB0cmFuc2xhdGUgdGhlIGJpdG1hcCBpbnRvIHRoZSAicmVn dWxhciIga2lsbGVkSXRlbXMgYXJyYXksIGFuZCBsZXQKKyAqIHRoYXQgdG8gZHJpdmUgd2hp Y2ggaXRlbXMgYXJlIGtpbGxlZC4KKyAqLwordm9pZAorX2J0X2tpbGxfYmF0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKKworCS8qIGJhaWwgb3V0IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVkICov CisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJcmV0dXJuOworCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zOyBpKyspCisJeworCQlpbnQJCQlp bmRleCA9IChzby0+YmF0Y2guZmlyc3RJbmRleCArIHNjYW4tPnhzX2JhdGNoLT5raWxsZWRJ dGVtc1tpXSk7CisKKwkJLyogbWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBpbmRleCAoaW4g dGhlIGN1cnJlbnQgbGVhZiBwYWdlKSAqLworCQlBc3NlcnQoKHNvLT5iYXRjaC5maXJzdElu ZGV4IDw9IGluZGV4KSAmJgorCQkJICAgKGluZGV4IDw9IHNvLT5iYXRjaC5sYXN0SW5kZXgp KTsKKworCQkvKgorCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRl YWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMgYXQKKwkJICogb25jZSByaWdodCBiZWZvcmUgbGVh dmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUgdGVzdCBmb3IgbnVtS2lsbGVkCisJCSAqIG92 ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZSBjYWxsZXIgcmV2ZXJzZXMgZGly ZWN0aW9uIGluCisJCSAqIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZSBpdGVtIG1pZ2h0 IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgorCQkgKiBJdCdzIG5vdCB3b3J0aCB0cnlp bmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQKKwkJICog aW5zdGVhZCBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCisJCSAqLworCQlpZiAo c28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJCQlzby0+a2lsbGVkSXRlbXMgPSAoaW50ICop CisJCQkJcGFsbG9jKE1heFRJRHNQZXJCVHJlZVBhZ2UgKiBzaXplb2YoaW50KSk7CisJCWlm IChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKKwkJCXNvLT5raWxsZWRJ dGVtc1tzby0+bnVtS2lsbGVkKytdID0gaW5kZXg7CisJfQorCisJLyogbm93IHJlc2V0IHRo ZSBudW1iZXIgb2Yga2lsbGVkIGl0ZW1zICovCisJc2Nhbi0+eHNfYmF0Y2gtPm5LaWxsZWRJ dGVtcyA9IDA7Cit9CisKIC8qCiAgKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJv bSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcwogICoKQEAgLTIwNDgsNiAr MjMyNSw5IEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCiAJQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKIAor CS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0byB0aGUgcmVndWxh ciBhcnJheS4gKi8KKwlfYnRfa2lsbF9iYXRjaChzY2FuKTsKKwogCS8qIEJlZm9yZSBsZWF2 aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KIAlpZiAo c28tPm51bUtpbGxlZCA+IDApCiAJCV9idF9raWxsaXRlbXMoc2Nhbik7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDQwM2EzZjQwNTUxLi5lYjBlNDU3OGQzNiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTc3OSw3ICs3NzksMTIg QEAgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAs IFJlbGF0aW9uIGluZGV4LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3VuZF9z ZWxmID0gZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRl eCwgJkRpcnR5U25hcHNob3QsIGluZG5rZXlhdHRzLCAwKTsKKworCS8qCisJICogWFhYIERv ZXMgbm90IHNlZW0gdXNlZnVsIHRvIGRvIHByZWZldGNoaW5nIGZvciBjaGVja3Mgb2YgY29u c3RyYWludHMuCisJICogV2Ugd291bGQgcHJvYmFibHkgbmVlZCBqdXN0IHRoZSBmaXJzdCBp dGVtIGFueXdheS4KKwkgKi8KKwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAs IGluZGV4LCAmRGlydHlTbmFwc2hvdCwgaW5kbmtleWF0dHMsIDAsIGZhbHNlKTsKIAlpbmRl eF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsK IAogCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIGV4aXN0aW5nX3Nsb3QpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYwppbmRleCAxMDg2Y2JjOTYyNC4uZGY2OTMyN2VhNzkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yNDQsOCArMjQ0LDEzIEBAIFJl bGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAog CS8qIEJ1aWxkIHNjYW4ga2V5LiAqLwogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4 X3NjYW5fa2V5KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAotCS8qIFN0YXJ0 IGFuIGluZGV4IHNjYW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJl bCwgJnNuYXAsIHNrZXlfYXR0b2ZmLCAwKTsKKwkvKgorCSAqIFN0YXJ0IGFuIGluZGV4IHNj YW4uCisJICoKKwkgKiBYWFggTm8gcHJlZmV0Y2hpbmcgZm9yIHJlcGxpY2F0aW9uIGlkZW50 aXR5LiBXZSBleHBlY3QgdG8gZmluZCBqdXN0IG9uZQorCSAqIHJvdywgc28gcHJlZmV0Y2hp bmcgaXMgcG9pbnRsZXNzLgorCSAqLworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBp ZHhyZWwsICZzbmFwLCBza2V5X2F0dG9mZiwgMCwgZmFsc2UpOwogCiByZXRyeToKIAlmb3Vu ZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMK aW5kZXggNjEyYzY3Mzg5NTAuLmRjZjVmYzVmZmZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTQ5LDcgKzQ5LDEzIEBACiBzdGF0aWMgVHVw bGVUYWJsZVNsb3QgKkluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKTsK IHN0YXRpYyB2b2lkIFN0b3JlSW5kZXhUdXBsZShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUs IFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCUluZGV4VHVwbGUgaXR1cCwgVHVwbGVE ZXNjIGl0dXBkZXNjKTsKK3N0YXRpYyBib29sIGlvc19wcmVmZXRjaF9ibG9jayhJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSAgIHZvaWQg KmRhdGEsIGludCBpbmRleCk7CiAKKy8qIHZhbHVlcyBzdG9yZWQgaW4gaW9zX3ByZWZldGNo X2Jsb2NrIGluIHRoZSBiYXRjaCBjYWNoZSAqLworI2RlZmluZQkJSU9TX1VOS05PV05fVklT SUJJTElUWQkJMAkvKiBYWFggZGVmYXVsdCB2YWx1ZSAqLworI2RlZmluZQkJSU9TX0FMTF9W SVNJQkxFCQkJCTEKKyNkZWZpbmUJCUlPU19OT1RfQUxMX1ZJU0lCTEUJCQkyCiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqCQlJbmRleE9ubHlOZXh0CkBAIC05MywxMSArOTksMTEgQEAgSW5kZXhP bmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkJCQkJCSAgIG5vZGUtPmlv c3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJ CQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLAotCQkJCQkJCQkgICBub2RlLT5pb3Nz X051bU9yZGVyQnlLZXlzKTsKKwkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5 cywKKwkJCQkJCQkJICAgbm9kZS0+aW9zc19DYW5CYXRjaCk7CiAKIAkJbm9kZS0+aW9zc19T Y2FuRGVzYyA9IHNjYW5kZXNjOwogCi0KIAkJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5 IHNjYW4gKi8KIAkJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsK IAkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CkBAIC0xMTUsMTM5ICsx MjEsMzU5IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCX0K IAogCS8qCi0JICogT0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0 aGUgbmV4dCB0dXBsZS4KKwkgKiBJZiB0aGUgYmF0Y2hpbmcgaXMgZGlzYWJsZWQgYnkgYSBH VUMsIG9yIGlmIGl0J3Mgbm90IHN1cHBvcnRlZCBieSB0aGUKKwkgKiBpbmRleCBBTSwgZG8g dGhlIG9yaWdpbmFsIGFwcHJvYWNoLgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBl bmFibGUgYmF0Y2hpbmcgYmFzZWQgb24gdGhlIHBsYW4gdG9vLCBzbyB0aGF0IHdlCisJICog ZG9uJ3QgZG8gYmF0Y2hpbmcgd2hlbiBpdCdzIHByb2JhYmx5IHVzZWxlc3MgKGUuZy4gc2Vt aWpvaW5zIG9yIHF1ZXJpZXMKKwkgKiB3aXRoIExJTUlUIDEgZXRjLikuIEJ1dCBtYXliZSB0 aGUgYXBwcm9hY2ggd2l0aCBzbG93IHJhbXAtdXAgKHN0YXJ0aW5nCisJICogd2l0aCBzbWFs bCBiYXRjaGVzKSB3aWxsIGhhbmRsZSB0aGF0IHdlbGwgZW5vdWdoLgorCSAqCisJICogWFhY IFBlcmhhcHMgaXQnZCBiZSBwb3NzaWJsZSB0byBkbyBib3RoIGluIGluZGV4X2dldG5leHRf c2xvdCgpLCBpLmUuCisJICogY2FsbCBlaXRoZXIgdGhlIG9yaWdpbmFsIGNvZGUgd2l0aG91 dCBiYXRjaGluZywgb3IgdGhlIG5ldyBiYXRjaGluZworCSAqIGNvZGUgaWYgc3VwcG9ydGVk L2VuYWJsZWQuIEl0J3Mgbm90IGdyZWF0IHRvIGhhdmUgZHVwbGljYXRlZCBjb2RlLgogCSAq LwotCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlv bikpICE9IE5VTEwpCisJaWYgKHNjYW5kZXNjLT54c19iYXRjaCA9PSBOVUxMKQogCXsKLQkJ Ym9vbAkJdHVwbGVfZnJvbV9oZWFwID0gZmFsc2U7Ci0KLQkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKLQogCQkvKgotCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUg VElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KLQkJICogd2hpY2ggYWxsIHR1cGxlcyBh cmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKLQkJICogd2Un bGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEg c291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzOiB2 aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKLQkJICogbG9jayB0aGUgdmlzaWJp bGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1bHQgd2UgcmVhZAotCQkg KiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwgaXQgY2FuJ3QgYmUg c3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJICogV2UgbmVlZCB0byBk ZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodCBhd2F5LAot CQkgKiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1 dCBub3QgdmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNj YW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikgaXMg c2VyaWFsaXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAot CQkgKiAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJl Y2F1c2UgdGhlIFZNIGJpdAotCQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUg aW5kZXgsIGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBh Y3RzIGFzIGEgZnVsbCBtZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQot CQkgKiBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0J CSAqCi0JCSAqIERlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBW QUNVVU0gd2lsbCBjbGVhciBvdXQKLQkJICogdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBv ZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIG5vdAotCQkgKiBzZXJpYWxpemVkIHdpdGgg dGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNlZSBhIHZhbHVlIHRoYXQgaXMKLQkJICog c2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUg ZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZp c2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIGNvbW1pdHMgb3Ig dGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkgKiB0cmFuc2FjdGlvbikuIElu IGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2ZQotCQkg KiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVh cmluZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0aGF0 IGluY2x1ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0 dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0FycmF5 TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoK LQkJICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9p ZCBuZWVkaW5nIHRvIGxvY2sKLQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1 c2Ugc2lnbmlmaWNhbnQgY29udGVudGlvbi4KKwkJICogT0ssIG5vdyB0aGF0IHdlIGhhdmUg d2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkJICovCi0JCWlmICghVk1f QUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQor CQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24p KSAhPSBOVUxMKQogCQl7CisJCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKKwor CQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwogCQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhh dmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCSAqIFdlIGNh biBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFn ZSBvbgorCQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVy eWJvZHkuICBJbiBhbnkgY2FzZSwKKwkJCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUg bm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhCisJCQkgKiBzb3VyY2UuCisJCQkgKgor CQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1hcF9n ZXRfc3RhdHVzIGRvZXMKKwkJCSAqIG5vdCBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZm ZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZQorCQkJICogcmVhZCBoZXJlIGNvdWxk IGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwgaXQgY2FuJ3QgYmUgc3RhbGUKKwkJCSAq IGVub3VnaCB0byBtYXR0ZXIuCisJCQkgKgorCQkJICogV2UgbmVlZCB0byBkZXRlY3QgY2xl YXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodAorCQkJICogYXdheSwgYmVj YXVzZSB0aGUgdHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90CisJ CQkgKiB2aXNpYmxlLiBUaGUgcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2NhbiAodXNp bmcgYSBzaGFyZWQKKwkJCSAqIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikgaXMgc2VyaWFs aXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlCisJCQkgKiBUSUQgaW50byB0aGUgaW5kZXgg KHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBpbmRleAorCQkJICogYnVmZmVyKS4g QmVjYXVzZSB0aGUgVk0gYml0IGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZQorCQkJ ICogaW5kZXgsIGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUgaW5kZXggcGFnZSBhY3Rz IGFzIGEgZnVsbAorCQkJICogbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNlZSB0 aGUgY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEKKwkJCSAqIHJlY2VudGx5LWluc2VydGVkIFRJ RC4KKwkJCSAqCisJCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2Ug KG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIKKwkJCSAqIG91dCB0aGUgVElEKSwgc28gdGhlIGNs ZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90CisJCQkgKiBzZXJpYWxp emVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNlZSBhIHZhbHVlIHRoYXQg aXMKKwkJCSAqIHNpZ25pZmljYW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUg YWJvdXQgdGhlIGRlbGV0ZQorCQkJICogcmlnaHQgYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUg aXMgc3RpbGwgdmlzaWJsZSB1bnRpbCB0aGUKKwkJCSAqIGRlbGV0aW5nIHRyYW5zYWN0aW9u IGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgorCQkJICogdHJh bnNhY3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZlciB3 aWxsCisJCQkgKiBoYXZlIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJp ZXIpIGFmdGVyIGNsZWFyaW5nCisJCQkgKiB0aGUgYml0LiBBbmQgZm9yIHVzIHRvIGhhdmUg YSBzbmFwc2hvdCB0aGF0IGluY2x1ZGVzIHRoZQorCQkJICogZGVsZXRpbmcgdHJhbnNhY3Rp b24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlCisJCQkgKiBh Y3F1aXJlZCBQcm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVh ZAorCQkJICogYmFycmllci4KKwkJCSAqCisJCQkgKiBJdCdzIHdvcnRoIGdvaW5nIHRocm91 Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8KKwkJCSAqIGxvY2sgdGhl IFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgY29udGVudGlvbi4K IAkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAoIWluZGV4 X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQljb250 aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCisJ CQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJ CUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJJm5vZGUtPmlvc3Nf Vk1CdWZmZXIpKQorCQkJeworCQkJCS8qCisJCQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNp dCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgorCQkJCSAqLworCQkJCUluc3RyQ291 bnRUdXBsZXMyKG5vZGUsIDEpOworCQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVz Yywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQorCQkJCQljb250aW51ZTsJLyogbm8gdmlzaWJs ZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KKworCQkJCUV4ZWNDbGVhclR1cGxl KG5vZGUtPmlvc3NfVGFibGVTbG90KTsKKworCQkJCS8qCisJCQkJICogT25seSBNVkNDIHNu YXBzaG90cyBhcmUgc3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZQorCQkJCSAq IG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJs ZQorCQkJCSAqIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxs b3cgdGhhdCwgd2UnZAorCQkJCSAqIG5lZWQgdG8ga2VlcCBtb3JlIHN0YXRlIHRvIHJlbWVt YmVyIG5vdCB0byBjYWxsCisJCQkJICogaW5kZXhfZ2V0bmV4dF90aWQgbmV4dCB0aW1lLgor CQkJCSAqLworCQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKKwkJCQkJZWxv ZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRl eC1vbmx5IHNjYW5zIik7CisKKwkJCQkvKgorCQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQg d2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwKKwkJCQkgKiBhcyByZWNv cmRlZCBpbiBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdAorCQkJ CSAqIHBpbiBub3csIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8g ZG8gc28uCisJCQkJICogVGhlIG5leHQgaW5kZXggZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZp c2l0IHRvIHRoZSBzYW1lIGhlYXAKKwkJCQkgKiBwYWdlLgorCQkJCSAqLworCisJCQkJdHVw bGVfZnJvbV9oZWFwID0gdHJ1ZTsKKwkJCX0KIAotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+ aW9zc19UYWJsZVNsb3QpOworCQkJLyoKKwkJCSAqIEZpbGwgdGhlIHNjYW4gdHVwbGUgc2xv dCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0CisJCQkgKiBiZSBwcm92 aWRlZCBpbiBlaXRoZXIgSGVhcFR1cGxlIG9yIEluZGV4VHVwbGUgZm9ybWF0LgorCQkJICog Q29uY2VpdmFibHkgYW4gaW5kZXggQU0gbWlnaHQgZmlsbCBib3RoIGZpZWxkcywgaW4gd2hp Y2ggY2FzZQorCQkJICogd2UgcHJlZmVyIHRoZSBoZWFwIGZvcm1hdCwgc2luY2UgaXQncyBw cm9iYWJseSBhIGJpdCBjaGVhcGVyIHRvCisJCQkgKiBmaWxsIGEgc2xvdCBmcm9tLgorCQkJ ICovCisJCQlpZiAoc2NhbmRlc2MtPnhzX2hpdHVwKQorCQkJeworCQkJCS8qCisJCQkJICog V2UgZG9uJ3QgdGFrZSB0aGUgdHJvdWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdmlkZWQg dHVwbGUKKwkJCQkgKiBoYXMgZXhhY3RseSB0aGUgc2xvdCdzIGZvcm1hdCwgYnV0IGl0IHNl ZW1zIHdvcnRoIGRvaW5nIGEKKwkJCQkgKiBxdWljayBjaGVjayBvbiB0aGUgbnVtYmVyIG9m IGZpZWxkcy4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRv ci0+bmF0dHMgPT0KKwkJCQkJICAgc2NhbmRlc2MtPnhzX2hpdHVwZGVzYy0+bmF0dHMpOwor CQkJCUV4ZWNGb3JjZVN0b3JlSGVhcFR1cGxlKHNjYW5kZXNjLT54c19oaXR1cCwgc2xvdCwg ZmFsc2UpOworCQkJfQorCQkJZWxzZSBpZiAoc2NhbmRlc2MtPnhzX2l0dXApCisJCQkJU3Rv cmVJbmRleFR1cGxlKG5vZGUsIHNsb3QsIHNjYW5kZXNjLT54c19pdHVwLCBzY2FuZGVzYy0+ eHNfaXR1cGRlc2MpOworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJubyBkYXRhIHJldHVy bmVkIGZvciBpbmRleC1vbmx5IHNjYW4iKTsKIAogCQkJLyoKLQkJCSAqIE9ubHkgTVZDQyBz bmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8KLQkJ CSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJs ZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxv dyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJl ciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCisJCQkgKiBJZiB0 aGUgaW5kZXggd2FzIGxvc3N5LCB3ZSBoYXZlIHRvIHJlY2hlY2sgdGhlIGluZGV4IHF1YWxz LgogCQkJICovCi0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBfY29udGludWUpCi0JCQkJZWxv ZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRl eC1vbmx5IHNjYW5zIik7CisJCQlpZiAoc2NhbmRlc2MtPnhzX3JlY2hlY2spCisJCQl7CisJ CQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKKwkJCQlpZiAoIUV4ZWNRdWFs QW5kUmVzZXQobm9kZS0+cmVjaGVja3F1YWwsIGVjb250ZXh0KSkKKwkJCQl7CisJCQkJCS8q IEZhaWxzIHJlY2hlY2ssIHNvIGRyb3AgaXQgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciAq LworCQkJCQlJbnN0ckNvdW50RmlsdGVyZWQyKG5vZGUsIDEpOworCQkJCQljb250aW51ZTsK KwkJCQl9CisJCQl9CiAKIAkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFy ZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkgKiByZWNvcmRlZCBp biBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBwaW4gbm93LAot CQkJICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4g IFRoZSBuZXh0IGluZGV4Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8g dGhlIHNhbWUgaGVhcCBwYWdlLgorCQkJICogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQg cmVjaGVja2luZyBPUkRFUiBCWSBkaXN0YW5jZXMuICAoSW4KKwkJCSAqIHByaW5jaXBsZSwg aWYgdGhlIGluZGV4IGNhbiBzdXBwb3J0IHJldHJpZXZhbCBvZiB0aGUgb3JpZ2luYWxseQor CQkJICogaW5kZXhlZCB2YWx1ZSwgaXQgc2hvdWxkIGJlIGFibGUgdG8gcHJvZHVjZSBhbiBl eGFjdCBkaXN0YW5jZQorCQkJICogY2FsY3VsYXRpb24gdG9vLiAgU28gaXQncyBub3QgY2xl YXIgdGhhdCBhZGRpbmcgY29kZSBoZXJlIGZvcgorCQkJICogcmVjaGVjay9yZS1zb3J0IHdv dWxkIGJlIHdvcnRoIHRoZSB0cm91YmxlLiAgQnV0IHdlIHNob3VsZCBhdAorCQkJICogbGVh c3QgdGhyb3cgYW4gZXJyb3IgaWYgc29tZW9uZSB0cmllcyBpdC4pCiAJCQkgKi8KKwkJCWlm IChzY2FuZGVzYy0+bnVtYmVyT2ZPcmRlckJ5cyA+IDAgJiYgc2NhbmRlc2MtPnhzX3JlY2hl Y2tvcmRlcmJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5j ZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpKSk7 CiAKLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRydWU7Ci0JCX0KKwkJCS8qCisJCQkgKiBJZiB3 ZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCB0aGVuIHdlJ2xsIG5lZWQgdG8gdGFrZSBhCisJ CQkgKiBwcmVkaWNhdGUgbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93 IHdlIGRvIHRoYXQgYXQKKwkJCSAqIHBhZ2UgbGV2ZWwuCisJCQkgKi8KKwkJCWlmICghdHVw bGVfZnJvbV9oZWFwKQorCQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVs YXRpb24sCisJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJ CQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwogCi0JCS8qCi0JCSAqIEZpbGwgdGhlIHNj YW4gdHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJl Ci0JCSAqIHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3Jt YXQuICBDb25jZWl2YWJseSBhbgotCQkgKiBpbmRleCBBTSBtaWdodCBmaWxsIGJvdGggZmll bGRzLCBpbiB3aGljaCBjYXNlIHdlIHByZWZlciB0aGUgaGVhcAotCQkgKiBmb3JtYXQsIHNp bmNlIGl0J3MgcHJvYmFibHkgYSBiaXQgY2hlYXBlciB0byBmaWxsIGEgc2xvdCBmcm9tLgot CQkgKi8KLQkJaWYgKHNjYW5kZXNjLT54c19oaXR1cCkKKwkJCXJldHVybiBzbG90OworCQl9 CisJfQorCWVsc2UKKwl7CituZXdfYmF0Y2g6CisJCS8qIGRvIHdlIGhhdmUgVElEcyBpbiB0 aGUgY3VycmVudCBiYXRjaCAqLworCQl3aGlsZSAoKHRpZCA9IGluZGV4X2JhdGNoX2dldG5l eHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQogCQl7CisJCQlib29sCQlh bGxfdmlzaWJsZTsKKwkJCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOworCisJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCQkvKiBJcyB0aGUgaW5kZXggb2YgdGhlIGN1 cnJlbnQgaXRlbSB2YWxpZCBmb3IgdGhlIGJhdGNoPyAqLworCQkJQXNzZXJ0KChzY2FuZGVz Yy0+eHNfYmF0Y2gtPmN1cnJJbmRleCA+PSAwKSAmJgorCQkJCSAgIChzY2FuZGVzYy0+eHNf YmF0Y2gtPmN1cnJJbmRleCA8IHNjYW5kZXNjLT54c19iYXRjaC0+bmhlYXB0aWRzKSk7CisK KwkJCS8qIFByZWZldGNoIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBpdGVtcyBpbiB0aGUgYmF0 Y2guICovCisJCQlpbmRleF9iYXRjaF9wcmVmZXRjaChzY2FuZGVzYywgZGlyZWN0aW9uLCBp b3NfcHJlZmV0Y2hfYmxvY2ssIG5vZGUpOworCiAJCQkvKgotCQkJICogV2UgZG9uJ3QgdGFr ZSB0aGUgdHJvdWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdmlkZWQgdHVwbGUgaGFzCi0J CQkgKiBleGFjdGx5IHRoZSBzbG90J3MgZm9ybWF0LCBidXQgaXQgc2VlbXMgd29ydGggZG9p bmcgYSBxdWljawotCQkJICogY2hlY2sgb24gdGhlIG51bWJlciBvZiBmaWVsZHMuCisJCQkg KiBSZXVzZSB0aGUgcHJldmlvdXNseSBkZXRlcm1pbmVkIHBhZ2UgdmlzaWJpbGl0eSBpbmZv LCBvcgorCQkJICogY2FsY3VsYXRlIGl0IG5vdy4gSWYgd2UgZGVjaWRlZCBub3QgdG8gcHJl ZmV0Y2ggdGhlIGJsb2NrLCB0aGUKKwkJCSAqIHBhZ2UgaGFzIHRvIGJlIGFsbC12aXNpYmxl LgorCQkJICoKKwkJCSAqIFhYWCBJdCdzIGEgYmlyIHdlaXJkIHdlIHVzZSB0aGUgdmlzaWJp bGl0eSB0byBkZWNpZGUgaWYgd2UKKwkJCSAqIHNob3VsZCBza2lwIHByZWZldGNoaW5nIHRo ZSBibG9jaywgYW5kIHRoZW4gZGVkdWNlIHRoZQorCQkJICogdmlzaWJpbGl0eSBmcm9tIHRo YXQuIE1heWJlIHdlIGNvdWxkL3Nob3VsZCBoYXZlIGEgbW9yZSBkaXJlY3QKKwkJCSAqIHdh eT8KIAkJCSAqLwotCQkJQXNzZXJ0KHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRz ID09Ci0JCQkJICAgc2NhbmRlc2MtPnhzX2hpdHVwZGVzYy0+bmF0dHMpOwotCQkJRXhlY0Zv cmNlU3RvcmVIZWFwVHVwbGUoc2NhbmRlc2MtPnhzX2hpdHVwLCBzbG90LCBmYWxzZSk7Ci0J CX0KLQkJZWxzZSBpZiAoc2NhbmRlc2MtPnhzX2l0dXApCi0JCQlTdG9yZUluZGV4VHVwbGUo bm9kZSwgc2xvdCwgc2NhbmRlc2MtPnhzX2l0dXAsIHNjYW5kZXNjLT54c19pdHVwZGVzYyk7 Ci0JCWVsc2UKLQkJCWVsb2coRVJST1IsICJubyBkYXRhIHJldHVybmVkIGZvciBpbmRleC1v bmx5IHNjYW4iKTsKKwkJCWFsbF92aXNpYmxlID0gIWlvc19wcmVmZXRjaF9ibG9jayhzY2Fu ZGVzYywgZGlyZWN0aW9uLCBub2RlLAorCQkJCQkJCQkJCQkgIHNjYW5kZXNjLT54c19iYXRj aC0+Y3VyckluZGV4KTsKIAotCQkvKgotCQkgKiBJZiB0aGUgaW5kZXggd2FzIGxvc3N5LCB3 ZSBoYXZlIHRvIHJlY2hlY2sgdGhlIGluZGV4IHF1YWxzLgotCQkgKi8KLQkJaWYgKHNjYW5k ZXNjLT54c19yZWNoZWNrKQotCQl7Ci0JCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBz bG90OwotCQkJaWYgKCFFeGVjUXVhbEFuZFJlc2V0KG5vZGUtPnJlY2hlY2txdWFsLCBlY29u dGV4dCkpCisJCQkvKgorCQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhl IFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwgdHVwbGVz IGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJICog d2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRh dGEKKwkJCSAqIHNvdXJjZS4KKwkJCSAqCisJCQkgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmlu ZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcworCQkJICogbm90IGxv Y2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0 IHdlCisJCQkgKiByZWFkIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVy LCBpdCBjYW4ndCBiZSBzdGFsZQorCQkJICogZW5vdWdoIHRvIG1hdHRlci4KKwkJCSAqCisJ CQkgKiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5z ZXJ0IHJpZ2h0CisJCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGlu IHRoZSBpbmRleCBwYWdlIGJ1dCBub3QKKwkJCSAqIHZpc2libGUuIFRoZSByZWFkaW5nIG9m IHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZAorCQkJICogbG9jayBvbiB0 aGUgaW5kZXggYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUK KwkJCSAqIFRJRCBpbnRvIHRoZSBpbmRleCAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24g dGhlIGluZGV4CisJCQkgKiBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJl ZCBiZWZvcmUgdXBkYXRpbmcgdGhlCisJCQkgKiBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2Nr aW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsCisJCQkgKiBtZW1vcnkgYmFy cmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYQor CQkJICogcmVjZW50bHktaW5zZXJ0ZWQgVElELgorCQkJICoKKwkJCSAqIERlbGV0ZXMgZG8g bm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhcgorCQkJ ICogb3V0IHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRl bGV0ZSBpcyBub3QKKwkJCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFu ZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBpcworCQkJICogc2lnbmlmaWNhbnRseSBzdGFs ZS4gSG93ZXZlciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlCisJCQkgKiByaWdo dCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZQor CQkJICogZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVu ZHMgKGlmIGl0J3Mgb3VyCisJCQkgKiB0cmFuc2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0 aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwKKwkJCSAqIGhhdmUgYmVlbiByZWxlYXNl ZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcKKwkJCSAqIHRo ZSBiaXQuIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhl CisJCQkgKiBkZWxldGluZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZpc2li bGUpLCB3ZSBtdXN0IGhhdmUKKwkJCSAqIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIg dGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkCisJCQkgKiBiYXJyaWVyLgorCQkJICoKKwkJ CSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQg bmVlZGluZyB0bworCQkJICogbG9jayB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVz ZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgorCQkJICovCisJCQlpZiAoIWFsbF92aXNpYmxl KQogCQkJewotCQkJCS8qIEZhaWxzIHJlY2hlY2ssIHNvIGRyb3AgaXQgYW5kIGxvb3AgYmFj ayBmb3IgYW5vdGhlciAqLwotCQkJCUluc3RyQ291bnRGaWx0ZXJlZDIobm9kZSwgMSk7Ci0J CQkJY29udGludWU7CisJCQkJLyoKKwkJCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRo ZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCisJCQkJICovCisJCQkJSW5zdHJDb3VudFR1 cGxlczIobm9kZSwgMSk7CisJCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNjLCBu b2RlLT5pb3NzX1RhYmxlU2xvdCkpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBJZiB3ZSBo YXZlbid0IGZvdW5kIGFueSB2aXNpYmxlIHR1cGxlIGZvciB0aGUgVElELAorCQkJCQkgKiBj aGFuY2VzIGFyZSBhbGwgdmVyc2lvbnMgYXJlIGRlYWQgYW5kIG1heSBraWxsIGl0IGZyb20K KwkJCQkJICogdGhlIGluZGV4LiBJZiBzbywgZmxhZyBpdCBpbiB0aGUga2lsbCBiaXRtYXAg LSB3ZSdsbAorCQkJCQkgKiB0cmFuc2xhdGUgaXQgdG8gaW5kZXhlcyBsYXRlci4KKwkJCQkJ ICoKKwkJCQkJICogWFhYIFdpdGggdGhlIGZpcnN0SW5kZXgvbGFzdEluZGV4IGl0IHdvdWxk IG5vdCBiZSB0b28KKwkJCQkJICogaGFyZCB0byBkbyB0aGUgdHJhbnNsYXRpb24gaGVyZS4g QnV0IGRvIHdlIHdhbnQgdG8/IEhvdworCQkJCQkgKiBtdWNoIGlzIHRoYXQgY29uc2lkZXJl ZCBhbiBpbnRlcm5hbCBkZXRhaWwgb2YgdGhlIEFNPworCQkJCQkgKgorCQkJCQkgKiBGSVhN RSBNYXliZSB3ZSBjb3VsZC9zaG91bGQgbWFrZSB0aGlzIHBhcnQgb2YKKwkJCQkJICogaW5k ZXhfZmV0Y2hfaGVhcCwgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMKKwkJCQkJ ICogYWZ0ZXIgZWFjaCBjYWxsPworCQkJCQkgKi8KKwkJCQkJaWYgKHNjYW5kZXNjLT5raWxs X3ByaW9yX3R1cGxlKQorCQkJCQl7CisJCQkJCQlzY2FuZGVzYy0+a2lsbF9wcmlvcl90dXBs ZSA9IGZhbHNlOworCisJCQkJCQlpZiAoc2NhbmRlc2MtPnhzX2JhdGNoLT5uS2lsbGVkSXRl bXMgPCBzY2FuZGVzYy0+eHNfYmF0Y2gtPm1heFNpemUpCisJCQkJCQkJc2NhbmRlc2MtPnhz X2JhdGNoLT5raWxsZWRJdGVtc1tzY2FuZGVzYy0+eHNfYmF0Y2gtPm5LaWxsZWRJdGVtcysr XQorCQkJCQkJCQk9IHNjYW5kZXNjLT54c19iYXRjaC0+Y3VyckluZGV4OworCQkJCQl9CisK KwkJCQkJY29udGludWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVu dHJ5ICovCisJCQkJfQorCisJCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+aW9zc19UYWJsZVNs b3QpOworCisJCQkJLyoKKwkJCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0 ZWQgaGVyZSwgc28gdGhlcmUgc2hvdWxkIGJlCisJCQkJICogbm8gbmVlZCB0byBrZWVwIGZv bGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlCisJCQkJICogZW50cnkgaGFz IGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkCisJCQkJ ICogbmVlZCB0byBrZWVwIG1vcmUgc3RhdGUgdG8gcmVtZW1iZXIgbm90IHRvIGNhbGwKKwkJ CQkgKiBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCisJCQkJICovCisJCQkJaWYgKHNj YW5kZXNjLT54c19oZWFwX2NvbnRpbnVlKQorCQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mg c25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKKwor CQkJCS8qCisJCQkJICogTm90ZTogYXQgdGhpcyBwb2ludCB3ZSBhcmUgaG9sZGluZyBhIHBp biBvbiB0aGUgaGVhcCBwYWdlLAorCQkJCSAqIGFzIHJlY29yZGVkIGluIHNjYW5kZXNjLT54 c19jYnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0CisJCQkJICogcGluIG5vdywgYnV0IGl0 J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4KKwkJCQkgKiBUaGUg bmV4dCBpbmRleCBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8gdGhlIHNhbWUgaGVh cAorCQkJCSAqIHBhZ2UuCisJCQkJICovCisKKwkJCQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVl OwogCQkJfQotCQl9CiAKLQkJLyoKLQkJICogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQg cmVjaGVja2luZyBPUkRFUiBCWSBkaXN0YW5jZXMuICAoSW4KLQkJICogcHJpbmNpcGxlLCBp ZiB0aGUgaW5kZXggY2FuIHN1cHBvcnQgcmV0cmlldmFsIG9mIHRoZSBvcmlnaW5hbGx5Ci0J CSAqIGluZGV4ZWQgdmFsdWUsIGl0IHNob3VsZCBiZSBhYmxlIHRvIHByb2R1Y2UgYW4gZXhh Y3QgZGlzdGFuY2UKLQkJICogY2FsY3VsYXRpb24gdG9vLiAgU28gaXQncyBub3QgY2xlYXIg dGhhdCBhZGRpbmcgY29kZSBoZXJlIGZvcgotCQkgKiByZWNoZWNrL3JlLXNvcnQgd291bGQg YmUgd29ydGggdGhlIHRyb3VibGUuICBCdXQgd2Ugc2hvdWxkIGF0IGxlYXN0Ci0JCSAqIHRo cm93IGFuIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgaXQuKQotCQkgKi8KLQkJaWYgKHNjYW5k ZXNjLT5udW1iZXJPZk9yZGVyQnlzID4gMCAmJiBzY2FuZGVzYy0+eHNfcmVjaGVja29yZGVy YnkpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJtc2coImxvc3N5IGRpc3RhbmNlIGZ1bmN0aW9u cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIikpKTsKKwkJCS8qCisJ CQkgKiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNsb3Qgd2l0aCBkYXRhIGZyb20gdGhlIGluZGV4 LiAgVGhpcyBtaWdodAorCQkJICogYmUgcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBUdXBsZSBv ciBJbmRleFR1cGxlIGZvcm1hdC4KKwkJCSAqIENvbmNlaXZhYmx5IGFuIGluZGV4IEFNIG1p Z2h0IGZpbGwgYm90aCBmaWVsZHMsIGluIHdoaWNoIGNhc2UKKwkJCSAqIHdlIHByZWZlciB0 aGUgaGVhcCBmb3JtYXQsIHNpbmNlIGl0J3MgcHJvYmFibHkgYSBiaXQgY2hlYXBlciB0bwor CQkJICogZmlsbCBhIHNsb3QgZnJvbS4KKwkJCSAqLworCQkJaWYgKHNjYW5kZXNjLT54c19o aXR1cCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IHRha2UgdGhlIHRyb3VibGUg dG8gdmVyaWZ5IHRoYXQgdGhlIHByb3ZpZGVkIHR1cGxlCisJCQkJICogaGFzIGV4YWN0bHkg dGhlIHNsb3QncyBmb3JtYXQsIGJ1dCBpdCBzZWVtcyB3b3J0aCBkb2luZyBhCisJCQkJICog cXVpY2sgY2hlY2sgb24gdGhlIG51bWJlciBvZiBmaWVsZHMuCisJCQkJICovCisJCQkJQXNz ZXJ0KHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3ItPm5hdHRzID09CisJCQkJCSAgIHNjYW5k ZXNjLT54c19oaXR1cGRlc2MtPm5hdHRzKTsKKwkJCQlFeGVjRm9yY2VTdG9yZUhlYXBUdXBs ZShzY2FuZGVzYy0+eHNfaGl0dXAsIHNsb3QsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgaWYg KHNjYW5kZXNjLT54c19pdHVwKQorCQkJCVN0b3JlSW5kZXhUdXBsZShub2RlLCBzbG90LCBz Y2FuZGVzYy0+eHNfaXR1cCwgc2NhbmRlc2MtPnhzX2l0dXBkZXNjKTsKKwkJCWVsc2UKKwkJ CQllbG9nKEVSUk9SLCAibm8gZGF0YSByZXR1cm5lZCBmb3IgaW5kZXgtb25seSBzY2FuIik7 CiAKLQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgdGhlbiB3ZSds bCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9jayBleHBsaWNpdGx5LCBhcyBp ZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBsZXZlbC4KLQkJICovCi0J CWlmICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2NhbmRlc2Mt PmhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KSwKLQkJCQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOworCQkJLyoKKwkJCSAqIElmIHRo ZSBpbmRleCB3YXMgbG9zc3ksIHdlIGhhdmUgdG8gcmVjaGVjayB0aGUgaW5kZXggcXVhbHMu CisJCQkgKi8KKwkJCWlmIChzY2FuZGVzYy0+eHNfcmVjaGVjaykKKwkJCXsKKwkJCQllY29u dGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90OworCQkJCWlmICghRXhlY1F1YWxBbmRSZXNl dChub2RlLT5yZWNoZWNrcXVhbCwgZWNvbnRleHQpKQorCQkJCXsKKwkJCQkJLyogRmFpbHMg cmVjaGVjaywgc28gZHJvcCBpdCBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyICovCisJCQkJ CUluc3RyQ291bnRGaWx0ZXJlZDIobm9kZSwgMSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0K KwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlY2hl Y2tpbmcgT1JERVIgQlkgZGlzdGFuY2VzLiAgKEluCisJCQkgKiBwcmluY2lwbGUsIGlmIHRo ZSBpbmRleCBjYW4gc3VwcG9ydCByZXRyaWV2YWwgb2YgdGhlIG9yaWdpbmFsbHkKKwkJCSAq IGluZGV4ZWQgdmFsdWUsIGl0IHNob3VsZCBiZSBhYmxlIHRvIHByb2R1Y2UgYW4gZXhhY3Qg ZGlzdGFuY2UKKwkJCSAqIGNhbGN1bGF0aW9uIHRvby4gIFNvIGl0J3Mgbm90IGNsZWFyIHRo YXQgYWRkaW5nIGNvZGUgaGVyZSBmb3IKKwkJCSAqIHJlY2hlY2svcmUtc29ydCB3b3VsZCBi ZSB3b3J0aCB0aGUgdHJvdWJsZS4gIEJ1dCB3ZSBzaG91bGQgYXQKKwkJCSAqIGxlYXN0IHRo cm93IGFuIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgaXQuKQorCQkJICovCisJCQlpZiAoc2Nh bmRlc2MtPm51bWJlck9mT3JkZXJCeXMgPiAwICYmIHNjYW5kZXNjLT54c19yZWNoZWNrb3Jk ZXJieSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVu Y3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOworCisJ CQkvKgorCQkJICogSWYgd2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgdGhlbiB3ZSdsbCBu ZWVkIHRvIHRha2UgYQorCQkJICogcHJlZGljYXRlIGxvY2sgZXhwbGljaXRseSwgYXMgaWYg d2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0CisJCQkgKiBwYWdlIGxldmVsLgorCQkJ ICovCisJCQlpZiAoIXR1cGxlX2Zyb21faGVhcCkKKwkJCQlQcmVkaWNhdGVMb2NrUGFnZShz Y2FuZGVzYy0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSwKKwkJCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90KTsKKworCQkJcmV0 dXJuIHNsb3Q7CisJCX0KIAotCQlyZXR1cm4gc2xvdDsKKwkJLyogYmF0Y2ggaXMgZW1wdHks IHRyeSByZWFkaW5nIHRoZSBuZXh0IGJhdGNoIG9mIHR1cGxlcyAqLworCQlpZiAoaW5kZXhf YmF0Y2hfZ2V0bmV4dChzY2FuZGVzYywgZGlyZWN0aW9uKSkKKwkJeworCQkJaW5kZXhfYmF0 Y2hfcHJlZmV0Y2goc2NhbmRlc2MsIGRpcmVjdGlvbiwgaW9zX3ByZWZldGNoX2Jsb2NrLCBu b2RlKTsKKwkJCWdvdG8gbmV3X2JhdGNoOworCQl9CisKKwkJcmV0dXJuIE5VTEw7CiAJfQog CiAJLyoKQEAgLTU3NCw2ICs4MDAsMTYgQEAgRXhlY0luaXRJbmRleE9ubHlTY2FuKEluZGV4 T25seVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3Rh dGUtPnJlY2hlY2txdWFsID0KIAkJRXhlY0luaXRRdWFsKG5vZGUtPnJlY2hlY2txdWFsLCAo UGxhblN0YXRlICopIGluZGV4c3RhdGUpOwogCisJLyoKKwkgKiBDYW4ndCBkbyBiYXRjaGlu ZyAoYW5kIHRodXMgcHJlZmV0Y2hpbmcpIHdoZW4gdGhlIHBsYW4gcmVxdWlyZXMgbWFyawor CSAqIGFuZCByZXN0b3JlLiBUaGVyZSdzIGFuIGlzc3VlIHdpdGggdHJhbnNsYXRpbmcgdGhl IG1hcmsvcmVzdG9yZQorCSAqIHBvc2l0aW9ucyBiZXR3ZWVuIHRoZSBiYXRjaCBpbiBzY2Fu IGRlc2NyaXB0b3IgYW5kIHRoZSBvcmlnaW5hbAorCSAqIHBvc2l0aW9uIHJlY29nbml6ZWQg aW4gdGhlIGluZGV4IEFNLgorCSAqCisJICogWFhYIEhvcGVmdWxseSBqdXN0IGEgdGVtcG9y YXJ5IGxpbWl0YXRpb24/CisJICovCisJaW5kZXhzdGF0ZS0+aW9zc19DYW5CYXRjaCA9ICEo ZWZsYWdzICYgRVhFQ19GTEFHX01BUkspOworCiAJLyoKIAkgKiBJZiB3ZSBhcmUganVzdCBk b2luZyBFWFBMQUlOIChpZSwgYXJlbid0IGdvaW5nIHRvIHJ1biB0aGUgcGxhbiksIHN0b3AK IAkgKiBoZXJlLiAgVGhpcyBhbGxvd3MgYW4gaW5kZXgtYWR2aXNvciBwbHVnaW4gdG8gRVhQ TEFJTiBhIHBsYW4gY29udGFpbmluZwpAQCAtNzM1LDEyICs5NzEsMjAgQEAgRXhlY0luZGV4 T25seVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJ CQkJICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgIHBpc2Nhbik7CiAJc2htX3Rv Y19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIHBp c2Nhbik7CisKKwkvKgorCSAqIFhYWCBkbyB3ZSBhY3R1YWxseSB3YW50IHByZWZldGNoaW5n IGZvciBwYXJhbGxlbCBpbmRleCBzY2Fucz8gTWF5YmUKKwkgKiBub3QsIGJ1dCB0aGVuIHdl IG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gY2FsbCBpbmRleF9iYXRjaF9nZXRuZXh0X3Rp ZAorCSAqICh3aGljaCBub3cgY2FuIGhhcHBlbiwgYmVjYXVzZSB3ZSdsbCBjYWxsIEluZGV4 T25seU5leHQgZXZlbiBmb3IKKwkgKiBwYXJhbGxlbCBwbGFucykuCisJICovCiAJbm9kZS0+ aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywK IAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3Nz X051bU9yZGVyQnlLZXlzLAotCQkJCQkJCQkgcGlzY2FuKTsKKwkJCQkJCQkJIHBpc2NhbiwK KwkJCQkJCQkJIG5vZGUtPmlvc3NfQ2FuQmF0Y2gpOwogCW5vZGUtPmlvc3NfU2NhbkRlc2Mt PnhzX3dhbnRfaXR1cCA9IHRydWU7CiAJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRC dWZmZXI7CiAKQEAgLTc4MCwxMiArMTAyNCwxNSBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRp YWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCVBhcmFsbGVsSW5kZXhT Y2FuRGVzYyBwaXNjYW47CiAKIAlwaXNjYW4gPSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9j LCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIGZhbHNlKTsKKworCS8qIFhYWCBk byB3ZSBhY3R1YWxseSB3YW50IHByZWZldGNoaW5nIGZvciBwYXJhbGxlbCBpbmRleCBzY2Fu cz8gKi8KIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFs bGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3Nf UmVsYXRpb25EZXNjLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJ CQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCi0JCQkJCQkJCSBwaXNjYW4pOworCQkJ CQkJCQkgcGlzY2FuLAorCQkJCQkJCQkgbm9kZS0+aW9zc19DYW5CYXRjaCk7CiAJbm9kZS0+ aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKIAogCS8qCkBAIC03OTcsMyAr MTA0NCwzNSBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlLAogCQkJCQkgbm9kZS0+aW9zc19TY2FuS2V5cywgbm9kZS0+aW9z c19OdW1TY2FuS2V5cywKIAkJCQkJIG5vZGUtPmlvc3NfT3JkZXJCeUtleXMsIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMpOwogfQorCisvKgorICogaW9zX3ByZWZldGNoX2Jsb2NrCisg KgkJQ2FsbGJhY2sgdG8gb25seSBwcmVmZXRjaCBibG9ja3MgdGhhdCBhcmUgbm90IGFsbC12 aXNpYmxlLgorICoKKyAqIFdlIGRvbid0IHdhbnQgdG8gaW5zcGVjdCB0aGUgdmlzaWJpbGl0 eSBtYXAgcmVwZWF0ZWRseSwgc28gdGhlIHJlc3VsdCBvZgorICogVk1fQUxMX1ZJU0lCTEUg aXMgc3RvcmVkIGluIHRoZSBiYXRjaCBwcml2YXRlIGRhdGEuIFRoZSB2YWx1ZXMgYXJlIHNl dAorICogdG8gMCBieSBkZWZhdWx0LCBzbyB3ZSB1c2UgdHdvIGNvbnN0YW50cyB0byByZW1l bWJlciBpZiBhbGwtdmlzaWJsZSBvcgorICogbm90IGFsbC12aXNpYmxlLgorICovCitzdGF0 aWMgYm9vbAoraW9zX3ByZWZldGNoX2Jsb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICAgdm9pZCAqYXJnLCBpbnQgaW5kZXgpCit7CisJ SW5kZXhPbmx5U2NhblN0YXRlICpub2RlID0gKEluZGV4T25seVNjYW5TdGF0ZSAqKSBhcmc7 CisKKwlpZiAoc2Nhbi0+eHNfYmF0Y2gtPnByaXZhdGVEYXRhW2luZGV4XSA9PSBJT1NfVU5L Tk9XTl9WSVNJQklMSVRZKQorCXsKKwkJYm9vbAkJYWxsX3Zpc2libGU7CisJCUl0ZW1Qb2lu dGVyIHRpZCA9ICZzY2FuLT54c19iYXRjaC0+aGVhcHRpZHNbaW5kZXhdOworCisJCWFsbF92 aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJ IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCSAmbm9kZS0+aW9z c19WTUJ1ZmZlcik7CisKKwkJc2Nhbi0+eHNfYmF0Y2gtPnByaXZhdGVEYXRhW2luZGV4XQor CQkJPSBhbGxfdmlzaWJsZSA/IElPU19BTExfVklTSUJMRSA6IElPU19OT1RfQUxMX1ZJU0lC TEU7CisJfQorCisJLyogcHJlZmV0Y2ggb25seSBibG9ja3MgdGhhdCBhcmUgbm90IGFsbC12 aXNpYmxlICovCisJcmV0dXJuIChzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGFbaW5kZXhd ID09IElPU19OT1RfQUxMX1ZJU0lCTEUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4c2Nhbi5jCmluZGV4IDgwMDBmZWZmNGM5Li42ZDVkZTZlMmNlOCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg ImxpYi9wYWlyaW5naGVhcC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5j bHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1 ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpAQCAtMTEwLDcgKzExMSw4IEBAIEluZGV4TmV4dChJ bmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVz YywKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+ aXNzX051bVNjYW5LZXlzLAotCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMp OworCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCSAgIG5v ZGUtPmlzc19DYW5CYXRjaCk7CiAKIAkJbm9kZS0+aXNzX1NjYW5EZXNjID0gc2NhbmRlc2M7 CiAKQEAgLTEyNSwyOCArMTI3LDgyIEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAl9CiAKIAkvKgotCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwg ZmV0Y2ggdGhlIG5leHQgdHVwbGUuCisJICogSWYgdGhlIGJhdGNoaW5nIGlzIGRpc2FibGVk IGJ5IGEgR1VDLCBvciBpZiBpdCdzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCisJICogaW5kZXgg QU0sIGRvIHRoZSBvcmlnaW5hbCBhcHByb2FjaC4KKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBz aG91bGQgZW5hYmxlIGJhdGNoaW5nIGJhc2VkIG9uIHRoZSBwbGFuIHRvbywgc28gdGhhdCB3 ZQorCSAqIGRvbid0IGRvIGJhdGNoaW5nIHdoZW4gaXQncyBwcm9iYWJseSB1c2VsZXNzIChl LmcuIHNlbWlqb2lucyBvciBxdWVyaWVzCisJICogd2l0aCBMSU1JVCAxIGV0Yy4pLiBCdXQg bWF5YmUgdGhlIGFwcHJvYWNoIHdpdGggc2xvdyByYW1wLXVwIChzdGFydGluZworCSAqIHdp dGggc21hbGwgYmF0Y2hlcykgd2lsbCBoYW5kbGUgdGhhdCB3ZWxsIGVub3VnaC4KKwkgKgor CSAqIFhYWCBQZXJoYXBzIGl0J2QgYmUgcG9zc2libGUgdG8gZG8gYm90aCBpbiBpbmRleF9n ZXRuZXh0X3Nsb3QoKSwgaS5lLgorCSAqIGNhbGwgZWl0aGVyIHRoZSBvcmlnaW5hbCBjb2Rl IHdpdGhvdXQgYmF0Y2hpbmcsIG9yIHRoZSBuZXcgYmF0Y2hpbmcKKwkgKiBjb2RlIGlmIHN1 cHBvcnRlZC9lbmFibGVkLiBJdCdzIG5vdCBncmVhdCB0byBoYXZlIGR1cGxpY2F0ZWQgY29k ZS4KIAkgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rp b24sIHNsb3QpKQorCWlmIChzY2FuZGVzYy0+eHNfYmF0Y2ggPT0gTlVMTCkKIAl7Ci0JCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0KIAkJLyoKLQkJICogSWYgdGhlIGluZGV4IHdhcyBs b3NzeSwgd2UgaGF2ZSB0byByZWNoZWNrIHRoZSBpbmRleCBxdWFscyB1c2luZwotCQkgKiB0 aGUgZmV0Y2hlZCB0dXBsZS4KKwkJICogb2ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBu ZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkJICovCi0JCWlmIChzY2FuZGVzYy0+eHNf cmVjaGVjaykKKwkJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0 aW9uLCBzbG90KSkKIAkJewotCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsK LQkJCWlmICghRXhlY1F1YWxBbmRSZXNldChub2RlLT5pbmRleHF1YWxvcmlnLCBlY29udGV4 dCkpCisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCQkvKgorCQkJICogSWYgdGhl IGluZGV4IHdhcyBsb3NzeSwgd2UgaGF2ZSB0byByZWNoZWNrIHRoZSBpbmRleCBxdWFscwor CQkJICogdXNpbmcgdGhlIGZldGNoZWQgdHVwbGUuCisJCQkgKi8KKwkJCWlmIChzY2FuZGVz Yy0+eHNfcmVjaGVjaykKIAkJCXsKLQkJCQkvKiBGYWlscyByZWNoZWNrLCBzbyBkcm9wIGl0 IGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgKi8KLQkJCQlJbnN0ckNvdW50RmlsdGVyZWQy KG5vZGUsIDEpOwotCQkJCWNvbnRpbnVlOworCQkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBs ZSA9IHNsb3Q7CisJCQkJaWYgKCFFeGVjUXVhbEFuZFJlc2V0KG5vZGUtPmluZGV4cXVhbG9y aWcsIGVjb250ZXh0KSkKKwkJCQl7CisJCQkJCS8qIEZhaWxzIHJlY2hlY2ssIHNvIGRyb3Ag aXQgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciAqLworCQkJCQlJbnN0ckNvdW50RmlsdGVy ZWQyKG5vZGUsIDEpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCXJldHVy biBzbG90OworCQl9CisJfQorCWVsc2UKKwl7CituZXdfYmF0Y2g6CisJCS8qIGRvIHdlIGhh dmUgVElEcyBpbiB0aGUgY3VycmVudCBiYXRjaCAqLworCQl3aGlsZSAoaW5kZXhfYmF0Y2hf Z2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQorCQl7CisJCQlDSEVD S19GT1JfSU5URVJSVVBUUygpOworCisJCQkvKiBmaXJzdCwgdGFrZSBjYXJlIG9mIHByZWZl dGNoaW5nIGZ1cnRoZXIgaXRlbXMgKi8KKwkJCWluZGV4X2JhdGNoX3ByZWZldGNoKHNjYW5k ZXNjLCBkaXJlY3Rpb24sIE5VTEwsIE5VTEwpOworCisJCQkvKgorCQkJICogSWYgdGhlIGlu ZGV4IHdhcyBsb3NzeSwgd2UgaGF2ZSB0byByZWNoZWNrIHRoZSBpbmRleCBxdWFscworCQkJ ICogdXNpbmcgdGhlIGZldGNoZWQgdHVwbGUuCisJCQkgKi8KKwkJCWlmIChzY2FuZGVzYy0+ eHNfcmVjaGVjaykKKwkJCXsKKwkJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBzbG90 OworCQkJCWlmICghRXhlY1F1YWxBbmRSZXNldChub2RlLT5pbmRleHF1YWxvcmlnLCBlY29u dGV4dCkpCisJCQkJeworCQkJCQkvKiBGYWlscyByZWNoZWNrLCBzbyBkcm9wIGl0IGFuZCBs b29wIGJhY2sgZm9yIGFub3RoZXIgKi8KKwkJCQkJSW5zdHJDb3VudEZpbHRlcmVkMihub2Rl LCAxKTsKKwkJCQkJY29udGludWU7CisJCQkJfQogCQkJfQorCisJCQlyZXR1cm4gc2xvdDsK KwkJfQorCisJCS8qIGJhdGNoIGlzIGVtcHR5LCB0cnkgcmVhZGluZyB0aGUgbmV4dCBiYXRj aCBvZiB0dXBsZXMgKi8KKwkJaWYgKGluZGV4X2JhdGNoX2dldG5leHQoc2NhbmRlc2MsIGRp cmVjdGlvbikpCisJCXsKKwkJCWluZGV4X2JhdGNoX3ByZWZldGNoKHNjYW5kZXNjLCBkaXJl Y3Rpb24sIE5VTEwsIE5VTEwpOworCQkJZ290byBuZXdfYmF0Y2g7CiAJCX0KIAotCQlyZXR1 cm4gc2xvdDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyoKQEAgLTIwNSw3ICsyNjEsOCBA QCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJCQkJCQkJ ICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFw c2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLAotCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtT3JkZXJCeUtleXMpOworCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3Jk ZXJCeUtleXMsCisJCQkJCQkJCSAgIGZhbHNlKTsJLyogWFhYIHNob3VsZCB1c2UgYmF0Y2hp bmc/ICovCiAKIAkJbm9kZS0+aXNzX1NjYW5EZXNjID0gc2NhbmRlc2M7CiAKQEAgLTk0Miw2 ICs5OTksMTYgQEAgRXhlY0luaXRJbmRleFNjYW4oSW5kZXhTY2FuICpub2RlLCBFU3RhdGUg KmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbmRleHN0YXRlLT5pbmRleG9yZGVyYnlvcmlnID0K IAkJRXhlY0luaXRFeHByTGlzdChub2RlLT5pbmRleG9yZGVyYnlvcmlnLCAoUGxhblN0YXRl ICopIGluZGV4c3RhdGUpOwogCisJLyoKKwkgKiBDYW4ndCBkbyBiYXRjaGluZyAoYW5kIHRo dXMgcHJlZmV0Y2hpbmcpIHdoZW4gdGhlIHBsYW4gcmVxdWlyZXMgbWFyaworCSAqIGFuZCBy ZXN0b3JlLiBUaGVyZSdzIGFuIGlzc3VlIHdpdGggdHJhbnNsYXRpbmcgdGhlIG1hcmsvcmVz dG9yZQorCSAqIHBvc2l0aW9ucyBiZXR3ZWVuIHRoZSBiYXRjaCBpbiBzY2FuIGRlc2NyaXB0 b3IgYW5kIHRoZSBvcmlnaW5hbAorCSAqIHBvc2l0aW9uIHJlY29nbml6ZWQgaW4gdGhlIGlu ZGV4IEFNLgorCSAqCisJICogWFhYIEhvcGVmdWxseSBqdXN0IGEgdGVtcG9yYXJ5IGxpbWl0 YXRpb24/CisJICovCisJaW5kZXhzdGF0ZS0+aXNzX0NhbkJhdGNoID0gIShlZmxhZ3MgJiBF WEVDX0ZMQUdfTUFSSyk7CisKIAkvKgogCSAqIElmIHdlIGFyZSBqdXN0IGRvaW5nIEVYUExB SU4gKGllLCBhcmVuJ3QgZ29pbmcgdG8gcnVuIHRoZSBwbGFuKSwgc3RvcAogCSAqIGhlcmUu ICBUaGlzIGFsbG93cyBhbiBpbmRleC1hZHZpc29yIHBsdWdpbiB0byBFWFBMQUlOIGEgcGxh biBjb250YWluaW5nCkBAIC0xNjcwLDEyICsxNzM3LDIwIEBAIEV4ZWNJbmRleFNjYW5Jbml0 aWFsaXplRFNNKEluZGV4U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkgIGVzdGF0ZS0+ZXNf c25hcHNob3QsCiAJCQkJCQkJCSAgcGlzY2FuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgcGlzY2FuKTsKKworCS8qCisJ ICogWFhYIGRvIHdlIGFjdHVhbGx5IHdhbnQgcHJlZmV0Y2hpbmcgZm9yIHBhcmFsbGVsIGlu ZGV4IHNjYW5zPyBNYXliZQorCSAqIG5vdCwgYnV0IHRoZW4gd2UgbmVlZCB0byBiZSBjYXJl ZnVsIG5vdCB0byBjYWxsIGluZGV4X2JhdGNoX2dldG5leHRfdGlkCisJICogKHdoaWNoIG5v dyBjYW4gaGFwcGVuLCBiZWNhdXNlIHdlJ2xsIGNhbGwgSW5kZXhPbmx5TmV4dCBldmVuIGZv cgorCSAqIHBhcmFsbGVsIHBsYW5zKS4KKwkgKi8KIAlub2RlLT5pc3NfU2NhbkRlc2MgPQog CQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u LAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJIG5vZGUtPmlz c19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKLQkJ CQkJCQkJIHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJCQkJCQkJCSBub2RlLT5pc3Nf Q2FuQmF0Y2gpOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0 ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKQEAgLTE3MTMsMTIgKzE3 ODgsMjAgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUg Km5vZGUsCiAJUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBpc2NhbjsKIAogCXBpc2NhbiA9IHNo bV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fbm9kZV9p ZCwgZmFsc2UpOworCisJLyoKKwkgKiBYWFggZG8gd2UgYWN0dWFsbHkgd2FudCBwcmVmZXRj aGluZyBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnM/IE1heWJlCisJICogbm90LCBidXQgdGhl biB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGNhbGwgaW5kZXhfYmF0Y2hfZ2V0bmV4 dF90aWQKKwkgKiAod2hpY2ggbm93IGNhbiBoYXBwZW4sIGJlY2F1c2Ugd2UnbGwgY2FsbCBJ bmRleE9ubHlOZXh0IGV2ZW4gZm9yCisJICogcGFyYWxsZWwgcGxhbnMpLgorCSAqLwogCW5v ZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5z cy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNj LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNz X051bU9yZGVyQnlLZXlzLAotCQkJCQkJCQkgcGlzY2FuKTsKKwkJCQkJCQkJIHBpc2NhbiwK KwkJCQkJCQkJIG5vZGUtPmlzc19DYW5CYXRjaCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10 aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQg cGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCAwM2Q3ZmI1ZjQ4Mi4uMmM5 YzgyOWMyODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC02MzQwLDkgKzYz NDAsMTQgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVs LAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAog CQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKKwkvKgorCSAqIFhYWCBJ J20gbm90IHN1cmUgYWJvdXQgYmF0Y2hpbmcvcHJlZmV0Y2hpbmcgaGVyZS4gSW4gbW9zdCBj YXNlcyB3ZQorCSAqIGV4cGVjdCB0byBmaW5kIHRoZSBlbmRwb2ludHMgaW1tZWRpYXRlbHks IGJ1dCBzb21ldGltZXMgd2UgaGF2ZSBhIGxvdAorCSAqIG9mIGRlYWQgdHVwbGVzIC0gYW5k IHRoZW4gcHJlZmV0Y2hpbmcgbWlnaHQgaGVscC4KKwkgKi8KIAlpbmRleF9zY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAogCQkJCQkJCQkgJlNuYXBzaG90Tm9u VmFjdXVtYWJsZSwKLQkJCQkJCQkJIDEsIDApOworCQkJCQkJCQkgMSwgMCwgZmFsc2UpOwog CS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCiAJaW5kZXhfc2Nhbi0+eHNf d2FudF9pdHVwID0gdHJ1ZTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMs IDEsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf dGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA2 ODYzMDlkYjU4Yi4uNjJhN2Y2M2E2MTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jCkBAIC03ODksNiArNzg5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1 cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsK KwkJeyJlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RV TklOR19NRVRIT0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1 c2Ugb2YgaW5kZXgtc2NhbiBiYXRjaGluZy4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJ TgorCQl9LAorCQkmZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZywKKwkJdHJ1ZSwKKwkJTlVM TCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQl7ImVuYWJsZV9pbmRleG9ubHlzY2FuIiwgUEdD X1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJs ZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgaW5kZXgtb25seS1zY2FuIHBsYW5zLiIpLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4 IDY2N2UwZGM0MGEyLi5iMjUwOTMzNzc1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzk4LDYgKzM5OCw3IEBACiAjZW5h YmxlX2hhc2hqb2luID0gb24KICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5h YmxlX2luZGV4c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZyA9IG9uCiAj ZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5h YmxlX21lbW9pemUgPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBp LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCBmMjVjOWQ1OGE3ZC4uZDkx MDY1MDFiNjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xNzcsNiArMTc3LDEwIEBAIHR5cGVk ZWYgdm9pZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlw ZWRlZiBib29sICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwK IAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2gg b2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVmIGJvb2wgKCphbWdldGJhdGNoX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAo KmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJ ICAgVElEQml0bWFwICp0Ym0pOwpAQCAtMjgwLDYgKzI4NCw3IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4QW1Sb3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJ YW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdl dHR1cGxlOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRi YXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJp dG1hcDsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2Fu OwogCWFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9nZW5hbS5oCmluZGV4IGZkY2ZiZThkYjc0Li41YTkxOWY3ZDM3YSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpZm5kZWYgR0VOQU1fSAogI2RlZmluZSBH RU5BTV9ICiAKKyNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2luY2x1ZGUgImFjY2Vzcy9z ZGlyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NrZXkuaCIKICNpbmNsdWRlICJub2Rlcy90aWRi aXRtYXAuaCIKQEAgLTg4LDYgKzg5LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVs ZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8q IHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0 cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0 IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBT eXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxl bEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBAIC0xMzIsNiAr MTM0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcmRlckJ5RGlzdGFuY2UKICAqIGdlbmVy YWxpemVkIGluZGV4XyBpbnRlcmZhY2Ugcm91dGluZXMgKGluIGluZGV4YW0uYykKICAqLwog CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nOwor CiAvKgogICogSW5kZXhTY2FuSXNWYWxpZAogICoJCVRydWUgaWZmIHRoZSBpbmRleCBzY2Fu IGlzIHZhbGlkLgpAQCAtMTU1LDcgKzE1OSw4IEBAIGV4dGVybiB2b2lkIGluZGV4X2luc2Vy dF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiBleHRlcm4gSW5kZXhTY2FuRGVz YyBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCi0J CQkJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKKwkJCQkJCQkJCSBpbnQgbmtl eXMsIGludCBub3JkZXJieXMsCisJCQkJCQkJCQkgYm9vbCBlbmFibGVfYmF0Y2hpbmcpOwog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAogCQkJCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJ CQkJaW50IG5rZXlzKTsKQEAgLTE3Myw3ICsxNzgsOCBAQCBleHRlcm4gdm9pZCBpbmRleF9w YXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4g dm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJu IEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsIGludCBua2V5cywgaW50IG5v cmRlcmJ5cywKLQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwor CQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCQkJCQkJ ICBib29sIGVuYWJsZV9iYXRjaGluZyk7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKTsKIHN0cnVjdCBUdXBsZVRhYmxlU2xvdDsKQEAgLTE4Miw2ICsxODgsMjUg QEAgZXh0ZXJuIGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJICAgc3RydWN0IFR1cGxlVGFibGVT bG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKK2V4dGVybiBib29sIGluZGV4X2JhdGNo X2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbik7CitleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKK2V4dGVybiBib29sIGluZGV4X2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJ CQkgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiBib29sIGluZGV4X2Jh dGNoX2FkZChJbmRleFNjYW5EZXNjIHNjYW4sIEl0ZW1Qb2ludGVyRGF0YSB0aWQsIGJvb2wg cmVjaGVjaywKKwkJCQkJCQlJbmRleFR1cGxlIGl0dXAsIEhlYXBUdXBsZSBodHVwKTsKKwor LyoKKyAqIFR5cGVkZWYgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBh biBpdGVtIGluIGluZGV4IHNjYW4gc2hvdWxkCisgKiBiZSBwcmVmZXRjaGVkLgorICovCit0 eXBlZGVmIGJvb2wgKCppbmRleF9wcmVmZXRjaF9jYWxsYmFjaykgKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJIHZvaWQgKmFyZywg aW50IGluZGV4KTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoX3ByZWZldGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCSBpbmRleF9w cmVmZXRjaF9jYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqYXJnKTsKKwogZXh0ZXJuIEluZGV4 QnVsa0RlbGV0ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZvICpp bmZvLAogCQkJCQkJCQkJCQkJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppc3RhdCwKIAkJCQkJ CQkJCQkJCUluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJl ZS5oCmluZGV4IDlhZjliM2VjZGNjLi4zMzI2ZDJkODk1OCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUu aApAQCAtMTAzNyw2ICsxMDM3LDE0IEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZv CiAJRGF0dW0JICAgKmVsZW1fdmFsdWVzOwkvKiBhcnJheSBvZiBudW1fZWxlbXMgRGF0dW1z ICovCiB9IEJUQXJyYXlLZXlJbmZvOwogCisvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3Vy cmVudCBiYXRjaCAoaW4gYmF0Y2hlZCBpbmRleCBzY2FucykgKi8KK3R5cGVkZWYgc3RydWN0 IEJUQmF0Y2hJbmZvCit7CisJLyogQ3VycmVudCByYW5nZSBvZiBpdGVtcyBpbiBhIGJhdGNo IChpZiB1c2VkKS4gKi8KKwlpbnQJCQlmaXJzdEluZGV4OworCWludAkJCWxhc3RJbmRleDsK K30gQlRCYXRjaEluZm87CisKIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsK IAkvKiB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vzc19rZXlzKCk6ICov CkBAIC0xMDU2LDYgKzEwNjQsOSBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRh CiAJaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBr aWxsZWQgaXRlbXMgKi8KIAlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVu dGx5IHN0b3JlZCBpdGVtcyAqLwogCisJLyogaW5mbyBhYm91dCBjdXJyZW50IGJhdGNoICov CisJQlRCYXRjaEluZm8gYmF0Y2g7CisKIAkvKgogCSAqIElmIHdlIGFyZSBkb2luZyBhbiBp bmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQogCSAqIHdvcmtz cGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3BlY3RpdmVseS4gIEVhY2gg aXMgb2Ygc2l6ZQpAQCAtMTE3Miw2ICsxMTgzLDcgQEAgZXh0ZXJuIEluZGV4U2NhbkRlc2Mg YnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwog ZXh0ZXJuIFNpemUgYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbihpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7 CiBleHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOworZXh0ZXJuIGJvb2wgYnRnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJ CQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CkBAIC0xMjc2LDYgKzEyODgs OSBAQCBleHRlcm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiBy ZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21w YXJlKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXRO dW1iZXIgb2ZmbnVtKTsKIGV4dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0 X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJu IGJvb2wgX2J0X25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CitleHRlcm4gdm9pZCBfYnRfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4p OwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMy IGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRl eCA1MjEwNDMzMDRhYi4uOWRmZDkzM2UyMmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAt MTA2LDYgKzEwNiw1NCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiAJ UmVsYXRpb24JcmVsOwogfSBJbmRleEZldGNoVGFibGVEYXRhOwogCisvKgorICogRGF0YSBh Ym91dCB0aGUgY3VycmVudCBUSUQgYmF0Y2ggcmV0dXJuZWQgYnkgdGhlIGluZGV4IEFNLgor ICoKKyAqIFhYWCBNYXliZSB0aGlzIHNob3VsZCBiZSBhIHNlcGFyYXRlIHN0cnVjdCBpbnN0 ZWFkLCBhbmQgdGhlIHNjYW4KKyAqIGRlc2NyaXB0b3Igd291bGQgaGF2ZSBvbmx5IGEgcG9p bnRlciwgaW5pdGlhbGl6ZWQgb25seSB3aGVuIHRoZQorICogYmF0Y2hpbmcgaXMgYWN0dWFs bHkgdXNlZD8KKyAqCisgKiBYWFggSXQncyBub3QgcXVpdGUgY2xlYXIgd2hpY2ggcGFydCBv ZiB0aGlzIGlzIG1hbmFnZWQgYnkgaW5kZXhhbSBhbmQKKyAqIHdoYXQncyB1cCB0byB0aGUg YWN0dWFsIGluZGV4IEFNIGltcGxlbWVudGF0aW9uLiBOZWVkcyBzb21lIGNsZWFyZXIKKyAq IGJvdW5kYXJpZXMuCisgKgorICogWFhYIFNob3VsZCB3ZSBoYXZlIGEgcG9pbnRlciBmb3Ig b3B0aW9uYWwgc3RhdGUgbWFuYWdlZCBieSB0aGUgQU0/IFNvbWUKKyAqIGN1c3RvbSBBTXMg bWF5IG5lZWQgbW9yZSBwZXItYmF0Y2ggaW5mb3JtYXRpb24sIG5vdCBqdXN0IHRoZSBmaWVs ZHMgd2UKKyAqIGhhdmUgaGVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0 Y2hEYXRhCit7CisJLyogYmF0Y2ggc2l6ZSAtIG1heGltdW0sIGluaXRpYWwsIGN1cnJlbnQg KHdpdGggcmFtcCB1cCkgKi8KKwlpbnQJCQltYXhTaXplOworCWludAkJCWluaXRTaXplOwor CWludAkJCWN1cnJTaXplOworCisJLyogbWVtb3J5IGNvbnRleHQgZm9yIHBlci1iYXRjaCBk YXRhICovCisJTWVtb3J5Q29udGV4dCBjdHg7CisKKwkvKiBiYXRjaCBwcmVmZXRjaGluZyAq LworCWludAkJCXByZWZldGNoVGFyZ2V0OyAvKiBjdXJyZW50IHByZWZldGNoIGRpc3RhbmNl ICovCisJaW50CQkJcHJlZmV0Y2hNYXhpbXVtOwkvKiBtYXhpbXVtIHByZWZldGNoIGRpc3Rh bmNlICovCisJaW50CQkJcHJlZmV0Y2hJbmRleDsJLyogbmV4dCBpdGVtIHRvIHByZWZldGNo ICovCisKKwkvKiBiYXRjaCBjb250ZW50cyAoVElEcywgaW5kZXggdHVwbGVzLCBraWxsIGJp dG1hcCwgLi4uKSAqLworCWludAkJCWN1cnJJbmRleDsJCS8qIGluZGV4IG9mIHRoZSBjdXJy ZW50IGl0ZW0gKi8KKwlpbnQJCQluaGVhcHRpZHM7CQkvKiBudW1iZXIgb2YgVElEcyBpbiB0 aGUgYmF0Y2ggKi8KKwlJdGVtUG9pbnRlckRhdGEgKmhlYXB0aWRzOwkvKiBUSURzIGluIHRo ZSBiYXRjaCAqLworCUluZGV4VHVwbGUgKml0dXBzOwkJCS8qIEluZGV4VHVwbGVzLCBpZiBy ZXF1ZXN0ZWQgKi8KKwlIZWFwVHVwbGUgICpodHVwczsJCQkvKiBIZWFwVHVwbGVzLCBpZiBy ZXF1ZXN0ZWQgKi8KKwlib29sCSAgICpyZWNoZWNrOwkJLyogcmVjaGVjayBmbGFncyAqLwor CURhdHVtCSAgICpwcml2YXRlRGF0YTsJLyogcHJpdmF0ZSBkYXRhIGZvciBiYXRjaCAqLwor CisJLyogeHNfb3JkZXJieXZhbHMgLyB4c19vcmRlcmJ5bnVsbHMgKi8KKwlEYXR1bQkgICAq b3JkZXJieXZhbHM7CisJYm9vbAkgICAqb3JkZXJieW51bGxzOworCisJLyogbGlzdCBvZiBr aWxsZWQgaXRlbXMgKi8KKwlpbnQJCQluS2lsbGVkSXRlbXM7CS8qIG51bWJlciBvZiBraWxs ZWRJdGVtcyBlbGVtZW50cyAqLworCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBsaXN0IG9m IGluZGV4ZXMgdG8ga2lsbCAqLworfSBJbmRleFNjYW5CYXRjaERhdGE7CisKIC8qCiAgKiBX ZSB1c2UgdGhlIHNhbWUgSW5kZXhTY2FuRGVzY0RhdGEgc3RydWN0dXJlIGZvciBib3RoIGFt Z2V0dHVwbGUtYmFzZWQKICAqIGFuZCBhbWdldGJpdG1hcC1iYXNlZCBpbmRleCBzY2Fucy4g IFNvbWUgZmllbGRzIGFyZSBvbmx5IHJlbGV2YW50IGluCkBAIC0xNTEsNiArMTk5LDkgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAogCWJvb2wJCXhzX3JlY2hlY2s7 CQkvKiBUIG1lYW5zIHNjYW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tlZCAqLwogCisJLyogSW5m b3JtYXRpb24gdXNlZCBieSBiYXRjaGVkIGluZGV4IHNjYW5zLiAqLworCUluZGV4U2NhbkJh dGNoRGF0YSAqeHNfYmF0Y2g7CisKIAkvKgogCSAqIFdoZW4gZmV0Y2hpbmcgd2l0aCBhbiBv cmRlcmluZyBvcGVyYXRvciwgdGhlIHZhbHVlcyBvZiB0aGUgT1JERVIgQlkKIAkgKiBleHBy ZXNzaW9ucyBvZiB0aGUgbGFzdCByZXR1cm5lZCB0dXBsZSwgYWNjb3JkaW5nIHRvIHRoZSBp bmRleC4gIElmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDUxNmI5NDg3NDM1Li40NTg5 YWQ1ZWQ3OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE2NDYsNiArMTY0Niw3IEBA IHR5cGVkZWYgc3RydWN0CiAgKgkJT3JkZXJCeVR5cEJ5VmFscyAgIGlzIHRoZSBkYXRhdHlw ZSBvZiBvcmRlciBieSBleHByZXNzaW9uIHBhc3MtYnktdmFsdWU/CiAgKgkJT3JkZXJCeVR5 cExlbnMJICAgdHlwbGVucyBvZiB0aGUgZGF0YXR5cGVzIG9mIG9yZGVyIGJ5IGV4cHJlc3Np b25zCiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXggc2NhbiBkZXNj cmlwdG9yCisgKgkJQ2FuQmF0Y2gJCSAgIGJhdGNoaW5nIChhbmQgcHJlZmV0Y2hpbmcpIGVu YWJsZWQKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuU3RhdGUKQEAgLTE2NzMsNiArMTY3NCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNj YW5TdGF0ZQogCWJvb2wJICAgKmlzc19PcmRlckJ5VHlwQnlWYWxzOwogCWludDE2CSAgICpp c3NfT3JkZXJCeVR5cExlbnM7CiAJU2l6ZQkJaXNzX1BzY2FuTGVuOworCisJLyogYmF0Y2hp bmcvcHJlZmV0Y2hpbmcgZW5hYmxlZD8gKi8KKwlib29sCQlpc3NfQ2FuQmF0Y2g7CisKIH0g SW5kZXhTY2FuU3RhdGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2OTQsNiArMTY5 OSw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJUHNjYW5MZW4JCSAg IHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1l Q1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRv IE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3VudCAgIG51bWJlciBvZiBlbGVtZW50 cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CisgKgkJQ2FuQmF0Y2gJCSAgIGJh dGNoaW5nIChhbmQgcHJlZmV0Y2hpbmcpIGVuYWJsZWQKICAqIC0tLS0tLS0tLS0tLS0tLS0K ICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCkBAIC0xNzE1LDYgKzE3 MjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlTaXplCQlpb3Nz X1BzY2FuTGVuOwogCUF0dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWlu dAkJCWlvc3NfTmFtZUNTdHJpbmdDb3VudDsKKwlib29sCQlpb3NzX0NhbkJhdGNoOwogfSBJ bmRleE9ubHlTY2FuU3RhdGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggZmFkN2ZjM2E3ZTAuLjE0YjM4ZWQ0 ZDQ2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTU3 LDYgKzE1Nyw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hl cmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfaW5jcmVtZW50YWxfc29ydCAgICAg ICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAgICAgICAgICB8IG9uCiAgZW5hYmxl X2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfaW5kZXhzY2FuX2JhdGNo aW5nICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2lu ICAgICAgICAgICAgICAgfCBvbgpAQCAtMTcwLDcgKzE3MSw3IEBAIHNlbGVjdCBuYW1lLCBz ZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBl bmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAg ICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwg b24KLSgyMiByb3dzKQorKDIzIHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBl dmVudCBkZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAog LS0gbWF5IGJlIHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5j ZSBsYXN0IHBvc3RtYXN0ZXIgc3RhcnQuCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IGRmM2YzMzZiZWMwLi45Y2I2NmQ2ZTI1YyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTE4OCw2ICsxODgsNyBAQCBCT09MCiBCT09MRUFOCiBCT1gKIEJUQXJyYXlL ZXlJbmZvCitCVEJhdGNoSW5mbwogQlRCdWlsZFN0YXRlCiBCVEN5Y2xlSWQKIEJURGVkdXBJ bnRlcnZhbApAQCAtMTIxOSw2ICsxMjIwLDcgQEAgSW5kZXhPcmRlckJ5RGlzdGFuY2UKIElu ZGV4UGF0aAogSW5kZXhSdW50aW1lS2V5SW5mbwogSW5kZXhTY2FuCitJbmRleFNjYW5CYXRj aERhdGEKIEluZGV4U2NhbkRlc2MKIEluZGV4U2NhblN0YXRlCiBJbmRleFN0YXRlRmxhZ3NB Y3Rpb24KQEAgLTMyNzgsNiArMzI4MCw3IEBAIGFtZW5kc2Nhbl9mdW5jdGlvbgogYW1lc3Rp bWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0 dHVwbGVfZnVuY3Rpb24KK2FtZ2V0YmF0Y2hfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nh bl9mdW5jdGlvbgogYW1pbnNlcnRfZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlv bgotLSAKMi40Ni4wCgo= --------------EBXrCFUmK4n1JFXBvAqx7NDI Content-Type: text/x-patch; charset=UTF-8; name="v20240906-0002-PoC-support-for-mark-restore.patch" Content-Disposition: attachment; filename="v20240906-0002-PoC-support-for-mark-restore.patch" Content-Transfer-Encoding: base64 RnJvbSAxNDBiMWM2NzJmMzNjZjEzOTE3NDVkODZlMDZkODQxODEyNGQ5MTI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogRnJpLCA2IFNlcCAyMDI0IDE5OjM3OjE1ICswMjAwClN1YmplY3Q6IFtQ QVRDSCB2MjAyNDA5MDYgMi81XSBQb0M6IHN1cHBvcnQgZm9yIG1hcmsvcmVzdG9yZQoKLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgIHwgIDM1ICsrKyst LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgfCAxMTEgKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmMgfCAgMTEgKy0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMg ICAgIHwgIDExICstLQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oICAgICAgICAgICAg ICB8ICAgMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgIHwg ICA2ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDE1MyBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCBkMTcwYzFkNDM5 ZC4uMjZmZmRjOWEzODMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAt NDk3LDE2ICs0OTcsOSBAQCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJ c2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJwb3Moc2Nhbik7CiAKIAkv KgotCSAqIFJlc2V0IHRoZSBiYXRjaCwgdG8gbWFrZSBpdCBsb29rIGVtcHR5LgotCSAqCi0J ICogRG9uZSBhZnRlciB0aGUgYW1yZXNjYW4oKSBjYWxsLCBpbiBjYXNlIHRoZSBBTSBuZWVk cyBzb21lIG9mIHRoZSBiYXRjaAotCSAqIGluZm8gKGUuZy4gdG8gcHJvcGVybHkgdHJhbnNm ZXIgdGhlIGtpbGxlZCB0dXBsZXMpLgotCSAqCi0JICogWFhYIFRoaXMgaXMgYSBiaXQgbWlz bGVhZGluZywgYmVjYXVzZSBpbmRleF9iYXRjaF9yZXNldCBkb2VzIG5vdCByZXNldAotCSAq IHRoZSBraWxsZWQgdHVwbGVzLiBTbyBpZiB0aGF0J3MgdGhlIG9ubHkganVzdGlmaWNhdGlv biwgd2UgY291bGQgaGF2ZQotCSAqIGRvbmUgaXQgYmVmb3JlIHRoZSBjYWxsLgorCSAqIERv bid0IHJlc2V0IHRoZSBiYXRjaCBoZXJlIC0gYW1yZXN0cnBvcyBzaG91bGQgaGF2ZSBoYXMg YWxyZWFkeSBsb2FkZWQKKwkgKiB0aGUgbmV3IGJhdGNoLCBzbyBkb24ndCB0aHJvdyB0aGF0 IGF3YXkuCiAJICovCi0JaW5kZXhfYmF0Y2hfcmVzZXQoc2Nhbik7CiB9CiAKIC8qCkBAIC0x MzExLDkgKzEzMDQsMTcgQEAgQXNzZXJ0Q2hlY2tCYXRjaEluZm8oSW5kZXhTY2FuRGVzYyBz Y2FuKQogCQkoKHNjYW4pLT54c19iYXRjaC0+bmhlYXB0aWRzID09ICgoc2NhbiktPnhzX2Jh dGNoLT5jdXJySW5kZXggKyAxKSkgOiBcCiAJCSgoc2NhbiktPnhzX2JhdGNoLT5jdXJySW5k ZXggPT0gMCkpCiAKLS8qIERvZXMgdGhlIGJhdGNoIGl0ZW1zIGluIHRoZSByZXF1ZXN0ZWQg ZGlyZWN0aW9uPyAqLworLyoKKyAqIERvZXMgdGhlIGJhdGNoIGl0ZW1zIGluIHRoZSByZXF1 ZXN0ZWQgZGlyZWN0aW9uPyBUaGUgYmF0Y2ggbXVzdCBiZSBub24tZW1wdHkKKyAqIGFuZCB3 ZSBzaG91bGQgbm90IGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBiYXRjaCAoaW4gdGhl IGRpcmVjdGlvbikuCisgKiBBbHNvLCBpZiB3ZSBqdXN0IHJlc3RvcmVkIHRoZSBwb3NpdGlv biBhZnRlciBtYXJrL3Jlc3RvcmUsIHRoZXJlIHNob3VsZCBiZQorICogYXQgbGVhc3Qgb25l IGl0ZW0gdG8gcHJvY2VzcyAod2Ugd29uJ3QgYWR2YW5jZSAgb24gdGhlIG5leHQgY2FsbCku CisgKgorICogWFhYIFRoaXMgaXMgYSBiaXQgY29uZnVzaW5nIC8gdWdseSwgcHJvYmFibHkg c2hvdWxkIHJldGhpbmsgaG93IHdlIHRyYWNrCisgKiBlbXB0eSBiYXRjaGVzLCBhbmQgaG93 IHdlIGhhbmRsZSBub3QgYWR2YW5jaW5nIGFmdGVyIGEgcmVzdG9yZS4KKyAqLwogI2RlZmlu ZSBJTkRFWF9CQVRDSF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSBcCi0JKCFJTkRFWF9C QVRDSF9JU19FTVBUWShzY2FuKSAmJiAhSU5ERVhfQkFUQ0hfSVNfUFJPQ0VTU0VEKHNjYW4s IGRpcmVjdGlvbikpCisJKCFJTkRFWF9CQVRDSF9JU19FTVBUWShzY2FuKSAmJiAoIUlOREVY X0JBVENIX0lTX1BST0NFU1NFRChzY2FuLCBkaXJlY3Rpb24pIHx8IHNjYW4tPnhzX2JhdGNo LT5yZXN0b3JlZCkpCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ2Niw4ICsxNDY3 LDE3IEBAIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJLyoKIAkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGJh dGNoIGl0ZW0gLSB3ZSBrbm93IGl0J3Mgbm90IGVtcHR5IGFuZCB0aGVyZSBhcmUKIAkgKiBp dGVtcyB0byBwcm9jZXNzLCBzbyB0aGlzIGlzIHZhbGlkLgorCSAqCisJICogSG93ZXZlciwg ZG9uJ3QgYWR2YW5jZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBnZXRuZXh0X3RpZCgpIGNhbGwg YWZ0ZXIKKwkgKiBhbXJlc3RycG9zKCkuIFRoYXQgc2V0cyB0aGUgcG9zaXRpb24gb24gdGhl IGNvcnJlY3QgaXRlbSwgYW5kIGFkdmFuY2luZworCSAqIGhlcmUgd291bGQgc2tpcCBpdC4K KwkgKgorCSAqIFhYWCBUaGUgInJlc3RvcmVkIiBmbGFnIGlzIGEgYml0IHdlaXJkLiBDYW4g d2UgZG8gdGhpcyB3aXRob3V0IGl0PyBNYXkKKwkgKiBuZWVkIHRvIHJldGhpbmsgd2hlbi9o b3cgd2UgYWR2YW5jZSB0aGUgYmF0Y2ggaW5kZXguIE5vdCBzdXJlLgogCSAqLwotCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJaWYgKHNjYW4tPnhzX2JhdGNo LT5yZXN0b3JlZCkKKwkJc2Nhbi0+eHNfYmF0Y2gtPnJlc3RvcmVkID0gZmFsc2U7CisJZWxz ZSBpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQogCQlzY2FuLT54c19i YXRjaC0+Y3VyckluZGV4Kys7CiAJZWxzZQogCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 LS07CkBAIC0xODA1LDYgKzE4MTUsNyBAQCBpbmRleF9iYXRjaF9yZXNldChJbmRleFNjYW5E ZXNjIHNjYW4pCiAJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9IDA7CiAJc2Nhbi0+eHNf YmF0Y2gtPnByZWZldGNoSW5kZXggPSAwOwogCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXgg PSAtMTsKKwlzY2FuLT54c19iYXRjaC0+cmVzdG9yZWQgPSBmYWxzZTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGEzMmNjNmU3YTNhLi5jM2EyNWNi NTM3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC01MTksNiArNTE5 LDI1IEBAIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJLyogVGhlcmUgbWF5IGJl IGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KIAlCVFNjYW5Qb3NV bnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKIAorCS8qCisJICogV2l0aCBiYXRjaGVkIHNj YW5zLCB3ZSBkb24ndCBtYWludGFpbiB0aGUgaXRlbUluZGV4IHdoZW4gcHJvY2Vzc2luZyB0 aGUKKwkgKiBiYXRjaCwgc28gd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgdmFs dWUuCisJICoKKwkgKiBGSVhNRSBJIGRvbid0IGxpa2UgdGhhdCB0aGlzIHJlcXVpcmVzIGtu b3dsZWRnZSBvZiBiYXRjaGluZyBkZXRhaWxzLAorCSAqIEknZCB2ZXJ5IG11Y2ggcHJlZmVy IHRob3NlIHRvIHJlbWFpbiBpc29sYXRlZCBpbiBpbmRleGFtLmMuIFRoZSBiZXN0CisJICog aWRlYSBJIGhhdmUgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGJhdGNoIGluZGV4 LCBzb21ldGhpbmcgbGlrZQorCSAqIGluZGV4X2JhdGNoX2dldF9pbmRleCgpLiBUaGF0J3Mg Y2xvc2UgdG8gaG93IG90aGVyIHBsYWNlcyBpbiBBTXMgdGFsaworCSAqIHRvIGluZGV4YW0u YyAoZS5nLiB3aGVuIHNldHRpbmcgZGlzdGFuY2VzIC8gb3JkZXJieSBpbiBzcGdpc3QpLgor CSAqLworCWlmIChzY2FuLT54c19iYXRjaCkKKwl7CisJCS8qIHRoZSBpbmRleCBzaG91bGQg YmUgdmFsaWQgaW4gdGhlIGJhdGNoICovCisJCUFzc2VydChzY2FuLT54c19iYXRjaC0+Y3Vy ckluZGV4ID49IDApOworCQlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA8IHNj YW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMpOworCisJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9 IHNvLT5iYXRjaC5maXJzdEluZGV4ICsgc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleDsKKwl9 CisKIAkvKgogCSAqIEp1c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4gIElmIHdl IGxhdGVyIHN0ZXAgdG8gbmV4dCBwYWdlCiAJICogYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFy a2VkIHBvc2l0aW9uLCBfYnRfc3RlcHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKQEAgLTU1 Miw2ICs1NzEsNTkgQEAgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCSAqIGFj Y3VyYXRlLgogCQkgKi8KIAkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVt SW5kZXg7CisKKwkJLyoKKwkJICogV2UncmUgcmVzdG9yaW5nIHRvIGEgZGlmZmVyZW50IHBv c2l0aW9uIG9uIHRoZSBzYW1lIHBhZ2UsIGJ1dCB0aGUKKwkJICogd3JvbmcgYmF0Y2ggbWF5 IGJlIGxvYWRlZC4gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgYmF0Y2ggaW5jbHVkZXMKKwkJICog aXRlbUluZGV4LCBhbmQgbG9hZCB0aGUgY29ycmVjdCBiYXRjaCBpZiBub3QuIFdlIGRvbid0 IGtub3cgaW4KKwkJICogd2hpY2ggZGlyZWN0aW9uIHRoZSBzY2FuIHdpbGwgbW92ZSwgc28g d2UgdHJ5IHRvIHB1dCB0aGUgY3VycmVudAorCQkgKiBpbmRleCBpbiB0aGUgbWlkZGxlIG9m IGEgYmF0Y2guIEZvciBpbmRleGVzIGNsb3NlIHRvIHRoZSBlbmQgb2YgdGhlCisJCSAqIHBh Z2Ugd2UgbWF5IGxvYWQgZmV3ZXIgaXRlbXMsIGJ1dCB0aGF0IHNlZW1zIGFjY2VwdGFibGUu CisJCSAqCisJCSAqIFRoZW4gdXBkYXRlIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBpdGVt LCBldmVuIGlmIHdlIGFscmVhZHkgaGF2ZQorCQkgKiB0aGUgY29ycmVjdCBiYXRjaCBsb2Fk ZWQuCisJCSAqCisJCSAqIEZJWE1FIFNpbWlsYXIgdG8gYnRtYXJrcG9zKCkgLSBJIGRvbid0 IGxpa2UgaG93IHRoaXMgbGVha3MgZGV0YWlscworCQkgKiB0aGF0IHNob3VsZCBiZSBzcGVj aWZpYyB0byBpbmRleGFtLmMuIFRoZSAicmVzdG9yZWQiIGZsYWcgaXMgd2VpcmQKKwkJICog dG9vIC0gYnV0IGV2ZW4gaWYgd2UgbmVlZCBpdCwgd2UgY291bGQgc2V0IGl0IGluIGluZGV4 YW0uYywgcmlnaHQ/CisJCSAqLworCQlpZiAoc2Nhbi0+eHNfYmF0Y2ggIT0gTlVMTCkKKwkJ eworCQkJaWYgKChzby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+YmF0Y2guZmlyc3RJbmRl eCkgfHwKKwkJCQkoc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmJhdGNoLmxhc3RJbmRl eCkpCisJCQl7CisJCQkJaW50CQkJc3RhcnQgPSBNYXgoc28tPmN1cnJQb3MuZmlyc3RJdGVt LAorCQkJCQkJCQkJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCAtIChzY2FuLT54c19iYXRjaC0+ Y3VyclNpemUgLyAyKSk7CisJCQkJaW50CQkJZW5kID0gTWluKHNvLT5jdXJyUG9zLmxhc3RJ dGVtLAorCQkJCQkJCQkJICBzdGFydCArIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAx KSk7CisKKwkJCQlBc3NlcnQoc3RhcnQgPD0gZW5kKTsKKwkJCQlBc3NlcnQoKGVuZCAtIHN0 YXJ0ICsgMSkgPD0gc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplKTsKKworCQkJCS8qIG1ha2Ug aXQgbG9vayBlbXB0eSAqLworCQkJCXNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPSAwOwor CQkJCXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4ID0gLTE7CisKKwkJCQkvKgorCQkJ CSAqIFhYWCB0aGUgc2NhbiBkaXJlY3Rpb24gaXMgYm9ndXMgLyBub3QgaW1wb3J0YW50LiBJ dCBhZmZlY3RzCisJCQkJICogb25seSBob3cgd2UgYWR2YW5jZSB0aGUgY3VyckluZGV4LCBi dXQgd2UnbGwgb3ZlcnJpZGUgdGhhdAorCQkJCSAqIGFueXdheSB0byBwb2ludCBhdCB0aGUg ImNvcnJlY3QiIGVudHJ5LgorCQkJCSAqLworCQkJCV9idF9jb3B5X2JhdGNoKHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBzbywgc3RhcnQsIGVuZCk7CisJCQl9CisKKwkJCS8qCisJ CQkgKiBTZXQgdGhlIGJhdGNoIGluZGV4IHRvIHRoZSAiY29ycmVjdCIgcG9zaXRpb24gaW4g dGhlIGJhdGNoLAorCQkJICogZXZlbiBpZiB3ZSBoYXZlbid0IHJlLWxvYWRlZCBpdCBmcm9t IHRoZSBwYWdlLiBBbHNvIHJlbWVtYmVyIHdlCisJCQkgKiBqdXN0IGRpZCB0aGlzLCBzbyB0 aGF0IHRoZSBuZXh0IGNhbGwgdG8KKwkJCSAqIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKCkg ZG9lcyBub3QgYWR2YW5jZSBpdCBhZ2Fpbi4KKwkJCSAqCisJCQkgKiBYWFggVGhpcyBpcyBh IGJpdCB3ZWlyZC4gVGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIG5vdCBuZWVkIHRoZQorCQkJ ICogInJlc3RvcmVkIiBmbGFnIEkgdGhpbmsuCisJCQkgKi8KKwkJCXNjYW4tPnhzX2JhdGNo LT5jdXJySW5kZXggPSAoc28tPmN1cnJQb3MuaXRlbUluZGV4IC0gc28tPmJhdGNoLmZpcnN0 SW5kZXgpOworCQkJc2Nhbi0+eHNfYmF0Y2gtPnJlc3RvcmVkID0gdHJ1ZTsKKwkJfQogCX0K IAllbHNlCiAJewpAQCAtNTg5LDYgKzY2MSw0NSBAQCBidHJlc3RycG9zKEluZGV4U2NhbkRl c2Mgc2NhbikKIAkJCQlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBzby0+Y3VyclBvcy5k aXIpOwogCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAkJCX0KKworCQkJLyoKKwkJ CSAqIFdpdGggYmF0Y2hlZCBzY2Fucywgd2Uga25vdyB0aGUgY3VycmVudCBiYXRjaCBpcyBk ZWZpbml0ZWx5CisJCQkgKiB3cm9uZyAod2UndmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbGVh ZiBwYWdlKS4gU28gZW1wdHkgdGhlCisJCQkgKiBiYXRjaCwgYW5kIGxvYWQgdGhlIHJpZ2h0 IHBhcnQgb2YgdGhlIHBhZ2UuCisJCQkgKgorCQkJICogU2ltaWxhcmx5IHRvIHRoZSBibG9j ayBhYm92ZSwgd2UgcGxhY2UgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlCisJCQkgKiBtaWRk bGUgb2YgdGhlIGJhdGNoIChpZiBwb3NzaWJsZSkuIEFuZCB0aGVuIHdlIHVwZGF0ZSB0aGUg aW5kZXgKKwkJCSAqIHRvIHBvaW50IGF0IHRoZSBjb3JyZWN0IGJhdGNoIGl0ZW0uCisJCQkg Ki8KKwkJCWlmIChzY2FuLT54c19iYXRjaCAhPSBOVUxMKQorCQkJeworCQkJCWludAkJCXN0 YXJ0ID0gTWF4KHNvLT5jdXJyUG9zLmZpcnN0SXRlbSwKKwkJCQkJCQkJCQlzby0+Y3VyclBv cy5pdGVtSW5kZXggLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC8gMikpOworCQkJCWlu dAkJCWVuZCA9IE1pbihzby0+Y3VyclBvcy5sYXN0SXRlbSwKKwkJCQkJCQkJCSAgc3RhcnQg KyAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSkpOworCisJCQkJQXNzZXJ0KHN0YXJ0 IDw9IGVuZCk7CisJCQkJQXNzZXJ0KChlbmQgLSBzdGFydCArIDEpIDw9IHNjYW4tPnhzX2Jh dGNoLT5jdXJyU2l6ZSk7CisKKwkJCQkvKiBtYWtlIGl0IGxvb2sgZW1wdHkgKi8KKwkJCQlz Y2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID0gMDsKKwkJCQlzY2FuLT54c19iYXRjaC0+cHJl ZmV0Y2hJbmRleCA9IC0xOworCisJCQkJLyogWFhYIHRoZSBzY2FuIGRpcmVjdGlvbiBpcyBi b2d1cyAqLworCQkJCV9idF9jb3B5X2JhdGNoKHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzbywgc3RhcnQsIGVuZCk7CisKKwkJCQkvKgorCQkJCSAqIFNldCB0aGUgYmF0Y2ggaW5k ZXggdG8gdGhlICJjb3JyZWN0IiBwb3NpdGlvbiBpbiB0aGUgYmF0Y2gsCisJCQkJICogZXZl biBpZiB3ZSBoYXZlbid0IHJlLWxvYWRlZCBpdCBmcm9tIHRoZSBwYWdlLiBBbHNvCisJCQkJ ICogcmVtZW1iZXIgd2UganVzdCBkaWQgdGhpcywgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRv CisJCQkJICogaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQoKSBkb2VzIG5vdCBhZHZhbmNlIGl0 IGFnYWluLgorCQkJCSAqCisJCQkJICogWFhYIFRoaXMgaXMgYSBiaXQgd2VpcmQuIFRoZXJl IHNob3VsZCBiZSBhIHdheSB0byBub3QgbmVlZAorCQkJCSAqIHRoZSAicmVzdG9yZWQiIGZs YWcgSSB0aGluay4KKwkJCQkgKi8KKwkJCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0g KHNvLT5jdXJyUG9zLml0ZW1JbmRleCAtIHNvLT5iYXRjaC5maXJzdEluZGV4KTsKKwkJCQlz Y2FuLT54c19iYXRjaC0+cmVzdG9yZWQgPSB0cnVlOworCQkJfQogCQl9CiAJCWVsc2UKIAkJ CUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggMzE5NmJhNjQwZDUuLjE0NmM1MjdjYWIyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTE1NDMsNyArMTU0Myw3 IEBAIEFzc2VydENoZWNrQlRCYXRjaEluZm8oQlRTY2FuT3BhcXVlIHNvKQogICogX2J0X2Nv cHlfYmF0Y2gKICAqCQlDb3B5IGEgc2VjdGlvbiBvZiB0aGUgbGVhZiBwYWdlIGludG8gdGhl IGJhdGNoLgogICovCi1zdGF0aWMgdm9pZAordm9pZAogX2J0X2NvcHlfYmF0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQlRTY2FuT3BhcXVlIHNvLAogCQkJ ICAgaW50IHN0YXJ0LCBpbnQgZW5kKQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMKaW5kZXggZGNmNWZjNWZmZmMuLmE5M2RhOWQxZDI0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTgwMSwxNCArODAx LDEzIEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJRXhlY0luaXRRdWFsKG5vZGUtPnJlY2hlY2tx dWFsLCAoUGxhblN0YXRlICopIGluZGV4c3RhdGUpOwogCiAJLyoKLQkgKiBDYW4ndCBkbyBi YXRjaGluZyAoYW5kIHRodXMgcHJlZmV0Y2hpbmcpIHdoZW4gdGhlIHBsYW4gcmVxdWlyZXMg bWFyawotCSAqIGFuZCByZXN0b3JlLiBUaGVyZSdzIGFuIGlzc3VlIHdpdGggdHJhbnNsYXRp bmcgdGhlIG1hcmsvcmVzdG9yZQotCSAqIHBvc2l0aW9ucyBiZXR3ZWVuIHRoZSBiYXRjaCBp biBzY2FuIGRlc2NyaXB0b3IgYW5kIHRoZSBvcmlnaW5hbAotCSAqIHBvc2l0aW9uIHJlY29n bml6ZWQgaW4gdGhlIGluZGV4IEFNLgorCSAqIEFsbCBpbmRleCBzY2FucyBjYW4gZG8gYmF0 Y2hpbmcuCiAJICoKLQkgKiBYWFggSG9wZWZ1bGx5IGp1c3QgYSB0ZW1wb3JhcnkgbGltaXRh dGlvbj8KKwkgKiBYWFggTWF5YmUgdGhpcyBzaG91bGQgY2hlY2sgaWYgdGhlIGluZGV4IEFN IHN1cHBvcnRzIGJhdGNoaW5nLCBvciBldmVuCisJICogY2FsbCBzb21ldGhpbmcgbGlrZSAi YW1jYW5iYXRjaCIgKGRvZXMgbm90IGV4aXN0IHlldCkuIE9yIGNoZWNrIHRoZQorCSAqIGVu YWJsZV9pbmRleHNjYW5fYmF0Y2hpbmcgR1VDPwogCSAqLwotCWluZGV4c3RhdGUtPmlvc3Nf Q2FuQmF0Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsKKwlpbmRleHN0YXRlLT5p b3NzX0NhbkJhdGNoID0gdHJ1ZTsKIAogCS8qCiAJICogSWYgd2UgYXJlIGp1c3QgZG9pbmcg RVhQTEFJTiAoaWUsIGFyZW4ndCBnb2luZyB0byBydW4gdGhlIHBsYW4pLCBzdG9wCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggNmQ1ZGU2ZTJjZTguLjlkYWVj NzZkZGMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMDAw LDE0ICsxMDAwLDEzIEBAIEV4ZWNJbml0SW5kZXhTY2FuKEluZGV4U2NhbiAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCUV4ZWNJbml0RXhwckxpc3Qobm9kZS0+aW5k ZXhvcmRlcmJ5b3JpZywgKFBsYW5TdGF0ZSAqKSBpbmRleHN0YXRlKTsKIAogCS8qCi0JICog Q2FuJ3QgZG8gYmF0Y2hpbmcgKGFuZCB0aHVzIHByZWZldGNoaW5nKSB3aGVuIHRoZSBwbGFu IHJlcXVpcmVzIG1hcmsKLQkgKiBhbmQgcmVzdG9yZS4gVGhlcmUncyBhbiBpc3N1ZSB3aXRo IHRyYW5zbGF0aW5nIHRoZSBtYXJrL3Jlc3RvcmUKLQkgKiBwb3NpdGlvbnMgYmV0d2VlbiB0 aGUgYmF0Y2ggaW4gc2NhbiBkZXNjcmlwdG9yIGFuZCB0aGUgb3JpZ2luYWwKLQkgKiBwb3Np dGlvbiByZWNvZ25pemVkIGluIHRoZSBpbmRleCBBTS4KKwkgKiBBbGwgaW5kZXggc2NhbnMg Y2FuIGRvIGJhdGNoaW5nLgogCSAqCi0JICogWFhYIEhvcGVmdWxseSBqdXN0IGEgdGVtcG9y YXJ5IGxpbWl0YXRpb24/CisJICogWFhYIE1heWJlIHRoaXMgc2hvdWxkIGNoZWNrIGlmIHRo ZSBpbmRleCBBTSBzdXBwb3J0cyBiYXRjaGluZywgb3IgZXZlbgorCSAqIGNhbGwgc29tZXRo aW5nIGxpa2UgImFtY2FuYmF0Y2giIChkb2VzIG5vdCBleGlzdCB5ZXQpLiBPciBjaGVjayB0 aGUKKwkgKiBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nIEdVQz8KIAkgKi8KLQlpbmRleHN0 YXRlLT5pc3NfQ2FuQmF0Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsKKwlpbmRl eHN0YXRlLT5pc3NfQ2FuQmF0Y2ggPSB0cnVlOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUganVz dCBkb2luZyBFWFBMQUlOIChpZSwgYXJlbid0IGdvaW5nIHRvIHJ1biB0aGUgcGxhbiksIHN0 b3AKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCAzMzI2ZDJkODk1OC4uNzdjZmYxMDMwYjggMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTEyOTIsNiArMTI5Miw4IEBAIGV4dGVybiBib29sIF9i dF9maXJzdF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK IGV4dGVybiBib29sIF9idF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOwogZXh0ZXJuIHZvaWQgX2J0X2tpbGxfYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuKTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWws IHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOworZXh0ZXJuIHZvaWQgX2J0X2NvcHlf YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQlRTY2FuT3Bh cXVlIHNvLAorCQkJCQkJICAgaW50IHN0YXJ0LCBpbnQgZW5kKTsKIAogLyoKICAqIHByb3Rv dHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApp bmRleCA5ZGZkOTMzZTIyZS4uNDE3Y2EwM2I4OTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApA QCAtMTMxLDYgKzEzMSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEK IAkvKiBtZW1vcnkgY29udGV4dCBmb3IgcGVyLWJhdGNoIGRhdGEgKi8KIAlNZW1vcnlDb250 ZXh0IGN0eDsKIAorCS8qCisJICogV2FzIHRoaXMgYmF0Y2gganVzdCByZXN0b3JlZCBieSBy ZXN0cnBvcz8gaWYgeWVzLCB3ZSBkb24ndCBhZHZhbmNlIG9uCisJICogdGhlIGZpcnN0IGl0 ZXJhdGlvbi4KKwkgKi8KKwlib29sCQlyZXN0b3JlZDsKKwogCS8qIGJhdGNoIHByZWZldGNo aW5nICovCiAJaW50CQkJcHJlZmV0Y2hUYXJnZXQ7IC8qIGN1cnJlbnQgcHJlZmV0Y2ggZGlz dGFuY2UgKi8KIAlpbnQJCQlwcmVmZXRjaE1heGltdW07CS8qIG1heGltdW0gcHJlZmV0Y2gg ZGlzdGFuY2UgKi8KLS0gCjIuNDYuMAoK --------------EBXrCFUmK4n1JFXBvAqx7NDI Content-Type: text/x-patch; charset=UTF-8; name="v20240906-0003-WIP-batching-for-hash-indexes.patch" Content-Disposition: attachment; filename="v20240906-0003-WIP-batching-for-hash-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSAzMDkwZWYyNDhkNTFkZjFkODQ5NGM5YjcxNWJhYjlkNThlMjYwOGE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogRnJpLCA2IFNlcCAyMDI0IDIwOjQ2OjQ5ICswMjAwClN1YmplY3Q6IFtQ QVRDSCB2MjAyNDA5MDYgMy81XSBXSVA6IGJhdGNoaW5nIGZvciBoYXNoIGluZGV4ZXMKCi0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgIHwgIDQzICsrKysKIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyB8IDI4MyArKysrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmggICAgICAgICAgICB8 ICAxNyArKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAxICsK IDQgZmlsZXMgY2hhbmdlZCwgMzQ0IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKaW5kZXggMDFkMDZiN2MzMjguLjRlNGZkYThiMTcyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaC5jCkBAIC05Nyw2ICs5Nyw3IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FS R1MpCiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW47CiAJYW1yb3V0 aW5lLT5hbXJlc2NhbiA9IGhhc2hyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0g aGFzaGdldHR1cGxlOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IGhhc2hnZXRiYXRjaDsK IAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcDsKIAlhbXJvdXRpbmUt PmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwogCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVM TDsKQEAgLTMyOCw2ICszMjksNDIgQEAgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiB9CiAKIAorLyoKKyAqCWhhc2hnZXRiYXRjaCgpIC0t IEdldCB0aGUgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4uCisgKi8KK2Jvb2wK K2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQor eworCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CisJYm9vbAkJcmVzOworCisJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2lu Y2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBjb2RlICovCisJc2Nhbi0+eHNfcmVjaGVjayA9 IHRydWU7CisKKwkvKgorCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBz Y2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluIHRoZQorCSAqIGFwcHJvcHJpYXRlIGRp cmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5l IHRvCisJICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCSAqLworCWlmICgh SGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKKwkJcmVzID0gX2hhc2hfZmlyc3Rf YmF0Y2goc2NhbiwgZGlyKTsKKwllbHNlCisJeworCQkvKgorCQkgKiBDaGVjayB0byBzZWUg aWYgd2Ugc2hvdWxkIGtpbGwgdHVwbGVzIGZyb20gdGhlIHByZXZpb3VzIGJhdGNoLgorCQkg Ki8KKwkJX2hhc2hfa2lsbF9iYXRjaChzY2FuKTsKKworCQkvKgorCQkgKiBOb3cgY29udGlu dWUgdGhlIHNjYW4uCisJCSAqLworCQlyZXMgPSBfaGFzaF9uZXh0X2JhdGNoKHNjYW4sIGRp cik7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworCiAvKgogICoJaGFzaGdldGJpdG1hcCgp IC0tIGdldCBhbGwgdHVwbGVzIGF0IG9uY2UKICAqLwpAQCAtNDAyLDYgKzQzOSw5IEBAIGhh c2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCiAKIAlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKIAl7CisJ CS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0byB0aGUgcmVndWxh ciBhcnJheS4gKi8KKwkJX2hhc2hfa2lsbF9iYXRjaChzY2FuKTsKKwogCQkvKiBCZWZvcmUg bGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCiAJ CWlmIChzby0+bnVtS2lsbGVkID4gMCkKIAkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CkBA IC00MzUsNiArNDc1LDkgQEAgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJ aWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCiAJeworCQkvKiBUcmFuc2Zl ciBraWxsZWQgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggdG8gdGhlIHJlZ3VsYXIgYXJyYXkuICov CisJCV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJLyogQmVmb3JlIGxlYXZpbmcgY3Vy cmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwogCQlpZiAoc28tPm51 bUtpbGxlZCA+IDApCiAJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jCmluZGV4IDBkOTlkNmFiYzg2Li5jMTFhZTg0N2EzYiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtNjQsNiArNjQsOSBA QCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ ewogCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRl bSkKIAkJeworCQkJLyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRv IHRoZSByZWd1bGFyIGFycmF5LiAqLworCQkJX2hhc2hfa2lsbF9iYXRjaChzY2FuKTsKKwog CQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQogCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7 CiAKQEAgLTgyLDYgKzg1LDkgQEAgX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJaWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwg c28tPmN1cnJQb3MuZmlyc3RJdGVtKQogCQl7CisJCQkvKiBUcmFuc2ZlciBraWxsZWQgaXRl bXMgZnJvbSB0aGUgYmF0Y2ggdG8gdGhlIHJlZ3VsYXIgYXJyYXkuICovCisJCQlfaGFzaF9r aWxsX2JhdGNoKHNjYW4pOworCiAJCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCiAJCQkJX2hh c2hfa2lsbF9pdGVtcyhzY2FuKTsKIApAQCAtNDc2LDYgKzQ4Miw5IEBAIF9oYXNoX3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRp cikKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAorCQkJLyogVHJhbnNm ZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5LiAq LworCQkJX2hhc2hfa2lsbF9iYXRjaChzY2FuKTsKKwogCQkJLyoKIAkJCSAqIENvdWxkIG5v dCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0 bwogCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueQpAQCAtNTM1LDYgKzU0NCw5IEBAIF9oYXNoX3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJ CWlmIChpdGVtSW5kZXggIT0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQogCQkJCWJyZWFrOwog CisJCQkvKiBUcmFuc2ZlciBraWxsZWQgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggdG8gdGhlIHJl Z3VsYXIgYXJyYXkuICovCisJCQlfaGFzaF9raWxsX2JhdGNoKHNjYW4pOworCiAJCQkvKgog CQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVu dCBwYWdlLCBtb3ZlIHRvCiAJCQkgKiB0aGUgcHJldmlvdXMgcGFnZS4gQmVmb3JlIGxlYXZp bmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoCkBAIC03MTMsMyArNzI1LDI3NCBAQCBf aGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKIAljdXJy SXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwogCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9 IG9mZm51bTsKIH0KKworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNrSGFzaEJhdGNoSW5mbyhI YXNoU2Nhbk9wYXF1ZSBzbykKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJLyog c2hvdWxkIGJlIHZhbGlkIGl0ZW1zICh3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgbGVh ZiBwYWdlKSAqLworCUFzc2VydChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmJhdGNo LmZpcnN0SW5kZXgpOworCUFzc2VydChzby0+YmF0Y2guZmlyc3RJbmRleCA8PSBzby0+YmF0 Y2gubGFzdEluZGV4KTsKKwlBc3NlcnQoc28tPmJhdGNoLmxhc3RJbmRleCA8PSBzby0+Y3Vy clBvcy5sYXN0SXRlbSk7CisjZW5kaWYKK30KKworLyoKKyAqCV9oYXNoX2ZpcnN0X2JhdGNo KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggaW4gYSBzY2FuLgorICoKKyAqIEEgYmF0Y2gg dmFyaWFudCBvZiBfaGFzaF9maXJzdCgpLiBNb3N0IG9mIHRoZSBjb21tZW50cyBmb3IgdGhh dCBmdW5jdGlvbgorICogYXBwbHkgaGVyZSB0b28uCisgKgorICogWFhYIFRoaXMgb25seSBw b3B1bGF0ZXMgdGhlIGJhdGNoLCBpdCBkb2VzIG5vdCBzZXQgYW55IG90aGVyIGZpZWxkcyBs aWtlCisgKiBzY2FuLT54c19oZWFwdGlkIG9yIHNjYW4tPnhzX2l0dXAuIFRoYXQgaGFwcGVu cyBpbiBnZXRuZXh0X3RpZCgpIGNhbGxzLgorICoKKyAqIFhYWCBJJ20gbm90IHN1cmUgaXQg d29ya3MgdG8gbWl4IGJhdGNoZWQgYW5kIG5vbi1iYXRjaGVzIGNhbGxzLCBlLmcuIGdldAor ICogYSBUSUQgYW5kIHRoZW4gYSBiYXRjaCBvZiBUSURzLiBJdCBwcm9iYWJseSBzaG91bGQg d29yayBhcyBsb25nIGFzIHdlCisgKiB1cGRhdGUgaXRlbUluZGV4IGNvcnJlY3RseSwgYnV0 IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBraWxsZWQgaXRlbXMKKyAqIChyaWdodCBu b3cgdGhlIHR3byBwbGFjZXMgdXNlIGRpZmZlcmVudCB3YXlzIHRvIGNvbW11bmljYXRlIHdo aWNoIGl0ZW1zCisgKiBzaG91bGQgYmUga2lsbGVkKS4KKyAqLworYm9vbAorX2hhc2hfZmly c3RfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCisJ QXNzZXJ0KHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPT0gMCk7CisKKwkvKgorCSAqIE1h cmsgdGhlIGJhdGNoIGFzIGVtcHR5LgorCSAqCisJICogVGhpcyBtaWdodCBzZWVtcyBhIGJp dCBzdHJhbmdlLCBiZWNhdXNlIHN1cmVseSB0aGUgYmF0Y2ggc2hvdWxkIGJlCisJICogZW1w dHkgYmVmb3JlIHJlYWRpbmcgdGhlIGZpcnN0IGJhdGNoLiBTbyB3aHkgbm90IGFuIGFzc2Vy dD8gQnV0IHdlIGNhbgorCSAqIGdldCBoZXJlIGluIGRpZmZlcmVudCB3YXlzIC0gbm90IGp1 c3QgYWZ0ZXIgYmVnaW5zY2FuL3Jlc2NhbiwgYnV0IGFsc28KKwkgKiB3aGVuIGl0ZXJhdGlu ZyBvdmVyIFNjYWxhckFycmF5T3BzIC0gaW4gd2hpY2ggY2FzZSB3ZSdsbCBzZWUgdGhlIGxh c3QKKwkgKiBiYXRjaCBvZiB0aGUgcHJlY2VkaW5nIHNjYW4uCisJICovCisJc28tPmJhdGNo LmZpcnN0SW5kZXggPSAtMTsKKwlzby0+YmF0Y2gubGFzdEluZGV4ID0gLTE7CisKKwkvKiB3 ZSBoYXZlbid0IHZpc2l0ZWQgYW55IGxlYWYgcGFnZXMgeWV0LCBzbyBwcm9jZWVkIHRvIHJl YWRpbmcgb25lICovCisJaWYgKF9oYXNoX2ZpcnN0KHNjYW4sIGRpcikpCisJeworCQkvKiBy YW5nZSBvZiB0aGUgbGVhZiB0byBjb3B5IGludG8gdGhlIGJhdGNoICovCisJCWludAkJCXN0 YXJ0LAorCQkJCQllbmQ7CisKKwkJLyogZGV0ZXJtaW5lIHdoaWNoIHBhcnQgb2YgdGhlIGxl YWYgcGFnZSB0byBleHRyYWN0ICovCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikpCisJCXsKKwkJCXN0YXJ0ID0gc28tPmN1cnJQb3MuZmlyc3RJdGVtOworCQkJZW5kID0g TWluKHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLCBzby0+Y3VyclBv cy5sYXN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoZW5kICsgMSk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQllbmQgPSBzby0+Y3VyclBvcy5sYXN0SXRlbTsKKwkJCXN0 YXJ0ID0gTWF4KGVuZCAtIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJ CXNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAo c3RhcnQgLSAxKTsKKwkJfQorCisJCS8qCisJCSAqIENvcHkgdGhlIHNlbGVjdGVkIHJhbmdl IG9mIGl0ZW1zIGludG8gdGhlIGJhdGNoLCBzZXQgdGhlIGJhdGNoCisJCSAqIGN1cnJlbnQg aW5kZXggcHJvcGVybHkgKGJlZm9yZSBmaXJzdCAvIGFmdGVyIGxhc3QgaXRlbSwgZGVwZW5k aW5nCisJCSAqIG9uIHNjYW4gZGlyZWN0aW9uLgorCQkgKi8KKwkJX2hhc2hfY29weV9iYXRj aChzY2FuLCBkaXIsIHNvLCBzdGFydCwgZW5kKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisK KwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKglfaGFzaF9uZXh0X2JhdGNoKCkgLS0gR2V0 IHRoZSBuZXh0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KKyAqCisgKiBBIGJhdGNoIHZh cmlhbnQgb2YgX2hhc2hfbmV4dCgpLiBNb3N0IG9mIHRoZSBjb21tZW50cyBmb3IgdGhhdCBm dW5jdGlvbgorICogYXBwbHkgaGVyZSB0b28uCisgKgorICogV2Ugc2hvdWxkIG9ubHkgZ2V0 IGhlcmUgb25seSB3aGVuIHRoZSBjdXJyZW50IGJhdGNoIGhhcyBubyBtb3JlIGl0ZW1zCisg KiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLiBXZSBkb24ndCBnZXQgaGVyZSB3aXRoIGVtcHR5 IGJhdGNoZXMsIHRoYXQncworICogaGFuZGxlZCBieSBfaGFzaF9maXN0X2JhdGNoKCkuCisg KgorICogWFhYIFNlZSBhbHNvIHRoZSBjb21tZW50cyBhdCBfaGFzaF9maXJzdF9iYXRjaCgp IGFib3V0IHJldHVybmluZyBhIHNpbmdsZQorICogYmF0Y2ggZm9yIHRoZSBwYWdlLCBldGMu CisgKgorICogRklYTUUgVGhlcmUncyBhIGxvdCBvZiByZWR1bmRhbnQgKGFsbW9zdCB0aGUg c2FtZSkgY29kZSBoZXJlIC0gaGFuZGxpbmcKKyAqIHRoZSBjdXJyZW50IGFuZCBuZXcgbGVh ZiBwYWdlIGlzIHZlcnkgc2ltaWxhciwgYW5kIGl0J3MgYWxzbyBzaW1pbGFyIHRvCisgKiBf aGFzaF9maXJzdF9iYXRjaCgpLiBXZSBzaG91bGQgdHJ5IHRvIHJlZHVjZSB0aGlzIGEgYml0 LgorICovCitib29sCitfaGFzaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCit7CisJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKKworCWludAkJCXN0YXJ0LAorCQkJCWVuZDsKKworCUFzc2Vy dChzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID09IDApOworCisJQXNzZXJ0Q2hlY2tIYXNo QmF0Y2hJbmZvKHNvKTsKKworCS8qCisJICogQ2hlY2sgaWYgd2Ugc3RpbGwgaGF2ZSBzb21l IGl0ZW1zIG9uIHRoZSBjdXJyZW50IGxlYWYgcGFnZS4gSWYgeWVzLAorCSAqIGxvYWQgdGhl bSBpbnRvIGEgYmF0Y2ggYW5kIHJldHVybi4KKwkgKgorCSAqIFhYWCB0cnkgY29tYmluaW5n IHRoYXQgd2l0aCB0aGUgbmV4dCBibG9jaywgdGhlIGlubmVyIHdoaWxlIGxvb3AgaXMKKwkg KiBleGFjdGx5IHRoZSBzYW1lLgorCSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCisJeworCQlzdGFydCA9IHNvLT5iYXRjaC5sYXN0SW5kZXggKyAxOworCQllbmQg PSBNaW4oc3RhcnQgKyAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksIHNvLT5jdXJy UG9zLmxhc3RJdGVtKTsKKwkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKGVuZCArIDEpOwor CX0KKwllbHNlCisJeworCQllbmQgPSBzby0+YmF0Y2guZmlyc3RJbmRleCAtIDE7CisJCXN0 YXJ0ID0gTWF4KGVuZCAtIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJ c28tPmN1cnJQb3MuZmlyc3RJdGVtKTsKKwkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKHN0 YXJ0IC0gMSk7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIG1vcmUgaXRlbXMgb24gdGhlIGN1 cnJlbnQgbGVhZiBwYWdlLgorCSAqLworCWlmIChzdGFydCA8PSBlbmQpCisJeworCQlfaGFz aF9jb3B5X2JhdGNoKHNjYW4sIGRpciwgc28sIHN0YXJ0LCBlbmQpOworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwkvKgorCSAqIFdlJ3ZlIGNvbnN1bWVkIGFsbCBpdGVtcyBmcm9tIHRoZSBj dXJyZW50IGxlYWYgcGFnZSwgc28gdHJ5IHJlYWRpbmcgdGhlCisJICogbmV4dCBvbmUsIGFu ZCBwcm9jZXNzIGl0LgorCSAqLworCWlmIChfaGFzaF9uZXh0KHNjYW4sIGRpcikpCisJewor CQkvKgorCQkgKiBDaGVjayBpZiB3ZSBzdGlsbCBoYXZlIHNvbWUgaXRlbXMgb24gdGhlIGN1 cnJlbnQgbGVhZiBwYWdlLiBJZiB5ZXMsCisJCSAqIGxvYWQgdGhlbSBpbnRvIGEgYmF0Y2gg YW5kIHJldHVybi4KKwkJICoKKwkJICogWFhYIHRyeSBjb21iaW5pbmcgdGhhdCB3aXRoIHRo ZSBuZXh0IGJsb2NrLCB0aGUgaW5uZXIgd2hpbGUgbG9vcCBpcworCQkgKiBleGFjdGx5IHRo ZSBzYW1lLgorCQkgKi8KKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJ eworCQkJc3RhcnQgPSBzby0+Y3VyclBvcy5maXJzdEl0ZW07CisJCQllbmQgPSBNaW4oc3Rh cnQgKyAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksIHNvLT5jdXJyUG9zLmxhc3RJ dGVtKTsKKwkJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IChlbmQgKyAxKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCWVuZCA9IHNvLT5jdXJyUG9zLmxhc3RJdGVtOworCQkJc3RhcnQgPSBN YXgoZW5kIC0gKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLAorCQkJCQkJc28tPmN1 cnJQb3MuZmlyc3RJdGVtKTsKKwkJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IChzdGFydCAt IDEpOworCQl9CisKKwkJX2hhc2hfY29weV9iYXRjaChzY2FuLCBkaXIsIHNvLCBzdGFydCwg ZW5kKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8q CisgKglfaGFzaF9raWxsX2JhdGNoKCkgLS0gcmVtZW1iZXIgdGhlIGl0ZW1zLXRvLWJlLWtp bGxlZCBmcm9tIHRoZSBjdXJyZW50IGJhdGNoCisgKgorICogV2Ugc2ltcGx5IHRyYW5zbGF0 ZSB0aGUgYml0bWFwIGludG8gdGhlICJyZWd1bGFyIiBraWxsZWRJdGVtcyBhcnJheSwgYW5k IGxldAorICogdGhhdCB0byBkcml2ZSB3aGljaCBpdGVtcyBhcmUga2lsbGVkLgorICovCit2 b2lkCitfaGFzaF9raWxsX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlIYXNoU2Nh bk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCisJLyogYmFp bCBvdXQgaWYgYmF0Y2hpbmcgbm90IGVuYWJsZWQgKi8KKwlpZiAoIXNjYW4tPnhzX2JhdGNo KQorCQlyZXR1cm47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHNjYW4tPnhzX2JhdGNoLT5u S2lsbGVkSXRlbXM7IGkrKykKKwl7CisJCWludAkJCWluZGV4ID0gKHNvLT5iYXRjaC5maXJz dEluZGV4ICsgc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zW2ldKTsKKworCQkvKiBtYWtl IHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGluZGV4IChpbiB0aGUgY3VycmVudCBsZWFmIHBhZ2Up ICovCisJCUFzc2VydCgoc28tPmJhdGNoLmZpcnN0SW5kZXggPD0gaW5kZXgpICYmCisJCQkg ICAoaW5kZXggPD0gc28tPmJhdGNoLmxhc3RJbmRleCkpOworCisJCS8qCisJCSAqIFllcywg cmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxl cyBhdAorCQkgKiBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikg IFRoZSB0ZXN0IGZvciBudW1LaWxsZWQKKwkJICogb3ZlcnJ1biBpcyBub3QganVzdCBwYXJh bm9pYTogaWYgdGhlIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4KKwkJICogdGhlIGlu ZGV4c2NhbiB0aGVuIHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUg dGltZXMuCisJCSAqIEl0J3Mgbm90IHdvcnRoIHRyeWluZyB0byBvcHRpbWl6ZSB0aGF0LCBz byB3ZSBkb24ndCBkZXRlY3QgaXQsIGJ1dAorCQkgKiBpbnN0ZWFkIGp1c3QgZm9yZ2V0IGFu eSBleGNlc3MgZW50cmllcy4KKwkJICovCisJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVM TCkKKwkJCXNvLT5raWxsZWRJdGVtcyA9IChpbnQgKikKKwkJCQlwYWxsb2MoTWF4SW5kZXhU dXBsZXNQZXJQYWdlICogc2l6ZW9mKGludCkpOworCQlpZiAoc28tPm51bUtpbGxlZCA8IE1h eEluZGV4VHVwbGVzUGVyUGFnZSkKKwkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVk KytdID0gaW5kZXg7CisJfQorCisJLyogbm93IHJlc2V0IHRoZSBudW1iZXIgb2Yga2lsbGVk IGl0ZW1zICovCisJc2Nhbi0+eHNfYmF0Y2gtPm5LaWxsZWRJdGVtcyA9IDA7Cit9CisKK3Zv aWQKK19oYXNoX2NvcHlfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgSGFzaFNjYW5PcGFxdWUgc28sCisJCQkJIGludCBzdGFydCwgaW50IGVuZCkKK3sK KwkvKgorCSAqIFdlJ3JlIHJlYWRpbmcgdGhlIGZpcnN0IGJhdGNoLCBhbmQgdGhlcmUgc2hv dWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUKKwkgKiBpdGVtIChvdGhlcndpc2UgX2J0X2Zp cnN0IHdvdWxkIHJldHVybiBmYWxzZSkuIFNvIHdlIHNob3VsZCBuZXZlciBnZXQKKwkgKiBp bnRvIHNpdHVhdGlvbiB3aXRoIGVtcHR5IHN0YXJ0L2VuZCByYW5nZS4gSW4gdGhlIHdvcnN0 IGNhc2UsIHRoZXJlIGlzCisJICoganVzdCBhIHNpbmdsZSBpdGVtLCBpbiB3aGljaCBjYXNl IChzdGFydCA9PSBlbmQpLgorCSAqLworCUFzc2VydChzdGFydCA8PSBlbmQpOworCisJLyog VGhlIHJhbmdlIG9mIGl0ZW1zIHNob3VsZCBmaXQgaW50byB0aGUgY3VycmVudCBiYXRjaCBz aXplLiAqLworCUFzc2VydCgoZW5kIC0gc3RhcnQgKyAxKSA8PSBzY2FuLT54c19iYXRjaC0+ Y3VyclNpemUpOworCisJc28tPmJhdGNoLmZpcnN0SW5kZXggPSBzdGFydDsKKwlzby0+YmF0 Y2gubGFzdEluZGV4ID0gZW5kOworCisJQXNzZXJ0Q2hlY2tIYXNoQmF0Y2hJbmZvKHNvKTsK KworCS8qCisJICogV2FsayB0aHJvdWdoIHRoZSByYW5nZSBvZiBpbmRleCB0dXBsZXMsIGNv cHkgdGhlbSBpbnRvIHRoZSBiYXRjaC4gSWYKKwkgKiByZXF1ZXN0ZWQsIHNldCB0aGUgaW5k ZXggdHVwbGUgdG9vLgorCSAqCisJICogV2UgZG9uJ3Qga25vdyBpZiB0aGUgYmF0Y2ggaXMg ZnVsbCBhbHJlYWR5IC0gd2UganVzdCB0cnkgdG8gYWRkIGl0LCBhbmQKKwkgKiBiYWlsIG91 dCBpZiBpdCBmYWlscy4KKwkgKgorCSAqIEZJWE1FIFRoaXMgc2VlbXMgd3JvbmcsIGFjdHVh bGx5LiBXZSB1c2UgY3VyclNpemUgd2hlbiBjYWxjdWxhdGluZyB0aGUKKwkgKiBzdGFydC9l bmQgcmFuZ2UsIHNvIHRoZSBhZGQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgorCSAqLworCXdo aWxlIChzdGFydCA8PSBlbmQpCisJeworCQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0g JnNvLT5jdXJyUG9zLml0ZW1zW3N0YXJ0XTsKKworCQkvKiB0cnkgdG8gYWRkIGl0IHRvIGJh dGNoLCBpZiB0aGVyZSdzIHNwYWNlICovCisJCWlmICghaW5kZXhfYmF0Y2hfYWRkKHNjYW4s IGN1cnJJdGVtLT5oZWFwVGlkLCBmYWxzZSwgTlVMTCwgTlVMTCkpCisJCQlicmVhazsKKwor CQlzdGFydCsrOworCX0KKworCS8qCisJICogc2V0IHRoZSBzdGFydGluZyBwb2ludAorCSAq CisJICogWFhYIG1pZ2h0IGJlIGJldHRlciBkb25lIGluIGluZGV4YW0uYworCSAqLworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCXNjYW4tPnhzX2JhdGNoLT5jdXJy SW5kZXggPSAtMTsKKwllbHNlCisJCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSBzY2Fu LT54c19iYXRjaC0+bmhlYXB0aWRzOworCisJLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRv IGVuZCBoZXJlIHdpdGggYW4gZW1wdHkgYmF0Y2ggKi8KKwlBc3NlcnQoc2Nhbi0+eHNfYmF0 Y2gtPm5oZWFwdGlkcyA+IDApOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggOWM3ZDgxNTI1YjQu LmI3MTAxMjFmMGVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKQEAgLTE1Miw2ICsxNTIsMTQgQEAgdHlw ZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCiAJCShzY2FucG9zKS5pdGVtSW5kZXggPSAw OyBcCiAJfSB3aGlsZSAoMCkKIAorLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQg YmF0Y2ggKGluIGJhdGNoZWQgaW5kZXggc2NhbnMpICovCit0eXBlZGVmIHN0cnVjdCBIYXNo QmF0Y2hJbmZvCit7CisJLyogQ3VycmVudCByYW5nZSBvZiBpdGVtcyBpbiBhIGJhdGNoIChp ZiB1c2VkKS4gKi8KKwlpbnQJCQlmaXJzdEluZGV4OworCWludAkJCWxhc3RJbmRleDsKK30g SGFzaEJhdGNoSW5mbzsKKwogLyoKICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRl IHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KICAqLwpAQCAtMTgyLDYgKzE5MCw5IEBA IHR5cGVkZWYgc3RydWN0IEhhc2hTY2FuT3BhcXVlRGF0YQogCWludAkJICAgKmtpbGxlZEl0 ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCiAJaW50 CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8K IAorCS8qIGluZm8gYWJvdXQgY3VycmVudCBiYXRjaCAqLworCUhhc2hCYXRjaEluZm8gYmF0 Y2g7CisKIAkvKgogCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBw YWdlIGFuZCBzYXZlIHRoZW0gaW4KIAkgKiBIYXNoU2NhblBvc0RhdGEKQEAgLTM2OSw2ICsz ODAsNyBAQCBleHRlcm4gYm9vbCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZh bHVlcywgYm9vbCAqaXNudWxsLAogCQkJCQkgICBib29sIGluZGV4VW5jaGFuZ2VkLAogCQkJ CQkgICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwogZXh0ZXJuIGJvb2wgaGFzaGdl dHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJu IGJvb2wgaGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpOwogZXh0ZXJuIGludDY0IGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU SURCaXRtYXAgKnRibSk7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBoYXNoYmVnaW5zY2FuKFJl bGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGhh c2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nh bmtleXMsCkBAIC00NDQsNiArNDU2LDExIEBAIGV4dGVybiB2b2lkIF9oYXNoX2ZpbmlzaF9z cGxpdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgb2J1ZiwKIC8qIGhh c2hzZWFyY2guYyAqLwogZXh0ZXJuIGJvb2wgX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBib29sIF9oYXNoX2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIGJvb2wgX2hhc2hf bmV4dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4 dGVybiBib29sIF9oYXNoX2ZpcnN0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOworZXh0ZXJuIHZvaWQgX2hhc2hfY29weV9iYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSBIYXNoU2Nhbk9wYXF1ZSBz bywgaW50IHN0YXJ0LCBpbnQgZW5kKTsKK2V4dGVybiB2b2lkIF9oYXNoX2tpbGxfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuKTsKIAogLyogaGFzaHNvcnQuYyAqLwogdHlwZWRlZiBzdHJ1 Y3QgSFNwb29sIEhTcG9vbDsJLyogb3BhcXVlIHN0cnVjdCBpbiBoYXNoc29ydC5jICovCmRp ZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDljYjY2ZDZlMjVjLi5jZjczY2VmNjVm ZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTExMTcsNiArMTExNyw3IEBA IEhhc2gKIEhhc2hBZ2dCYXRjaAogSGFzaEFnZ1NwaWxsCiBIYXNoQWxsb2NGdW5jCitIYXNo QmF0Y2hJbmZvCiBIYXNoQnVpbGRTdGF0ZQogSGFzaENvbXBhcmVGdW5jCiBIYXNoQ29weUZ1 bmMKLS0gCjIuNDYuMAoK --------------EBXrCFUmK4n1JFXBvAqx7NDI Content-Type: text/x-patch; charset=UTF-8; name="v20240906-0004-WIP-batching-for-gist-indexes.patch" Content-Disposition: attachment; filename="v20240906-0004-WIP-batching-for-gist-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSBiNWNmYzdiYzg3ZmIzMzNlYWY2MjNhMWY1ZWQxNzNhMDI0NjM4NTNjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogVGh1LCA1IFNlcCAyMDI0IDIxOjQ5OjI3ICswMjAwClN1YmplY3Q6IFtQ QVRDSCB2MjAyNDA5MDYgNC81XSBXSVA6IGJhdGNoaW5nIGZvciBnaXN0IGluZGV4ZXMKCi0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyB8IDI5NSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaCB8ICAxNiArKwog c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgIHwgICAxICsKIDQgZmlsZXMgY2hh bmdlZCwgMzEzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXgg ZWQ0ZmZhNjNhNzcuLjQyY2ZmZDJiZmIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBA IC05OSw2ICs5OSw3IEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0 aW5lLT5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2Nh biA9IGdpc3RyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxl OworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IGdpc3RnZXRiYXRjaDsKIAlhbXJvdXRpbmUt PmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9 IGdpc3RlbmRzY2FuOwogCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naXN0L2dpc3RnZXQuYwppbmRleCBiMzViOGE5NzU3Ny4uNzBlMzJmMTkzNjYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAorc3Rh dGljIHZvaWQgX2dpc3Rfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4pOworc3RhdGlj IHZvaWQgX2dpc3RfY29weV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEdJU1RTY2FuT3Bh cXVlIHNvLAorCQkJCQkJCSBpbnQgc3RhcnQsIGludCBlbmQpOworCiAvKgogICogZ2lzdGtp bGxpdGVtcygpIC0tIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4g Y2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KQEAgLTcwOSw2ICs3MTMsMTQg QEAgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJCQl7CiAJCQkJR0lTVFNlYXJjaEl0ZW0gKml0ZW07CiAKKwkJCQkvKgorCQkJCSAqIFhY WCBQcm9iYWJseSBub3QgbmVlZGVkLCB3ZSBjYW4ndCBtaXggZ2V0dHVwbGUgYW5kCisJCQkJ ICogZ2V0YmF0Y2gsIHNvIHdlIHNob3VsZCBub3QgZ2V0IGFueSBraWxsZWQgdHVwbGVzIGZv ciBhCisJCQkJICogYmF0Y2guIE1heWJlIHJlcGxhY2UgdGhpcyB3aXRoIGFuIGFzc2VydCB0 aGF0IGJhdGNoIGhhcyBubworCQkJCSAqIGtpbGxlZCBpdGVtcz8gT3Igc2ltcGx5IHRoYXQg KHhzX2JhdGNoID09IE5VTEwpPworCQkJCSAqLworCQkJCV9naXN0X2tpbGxfYmF0Y2goc2Nh bik7CisKIAkJCQlpZiAoKHNvLT5jdXJCbGtubyAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpICYm IChzby0+bnVtS2lsbGVkID4gMCkpCiAJCQkJCWdpc3RraWxsaXRlbXMoc2Nhbik7CiAKQEAg LTczNiw2ICs3NDgsMTY0IEBAIGdpc3RnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogCX0KIH0KIAorLyoKKyAqIGdpc3RnZXRiYXRjaCgpIC0tIEdl dCB0aGUgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KKyAqLworYm9vbAorZ2lz dGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJ R0lTVFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwor CWlmIChkaXIgIT0gRm9yd2FyZFNjYW5EaXJlY3Rpb24pCisJCWVsb2coRVJST1IsICJHaVNU IG9ubHkgc3VwcG9ydHMgZm9yd2FyZCBzY2FuIGRpcmVjdGlvbiIpOworCisJaWYgKCFzby0+ cXVhbF9vaykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNvLT5maXJzdENhbGwpCisJewor CQkvKiBCZWdpbiB0aGUgc2NhbiBieSBwcm9jZXNzaW5nIHRoZSByb290IHBhZ2UgKi8KKwkJ R0lTVFNlYXJjaEl0ZW0gZmFrZUl0ZW07CisKKwkJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4o c2Nhbi0+aW5kZXhSZWxhdGlvbik7CisKKwkJc28tPmZpcnN0Q2FsbCA9IGZhbHNlOworCQlz by0+Y3VyUGFnZURhdGEgPSBzby0+blBhZ2VEYXRhID0gMDsKKwkJc2Nhbi0+eHNfaGl0dXAg PSBOVUxMOworCQlpZiAoc28tPnBhZ2VEYXRhQ3h0KQorCQkJTWVtb3J5Q29udGV4dFJlc2V0 KHNvLT5wYWdlRGF0YUN4dCk7CisKKwkJZmFrZUl0ZW0uYmxrbm8gPSBHSVNUX1JPT1RfQkxL Tk87CisJCW1lbXNldCgmZmFrZUl0ZW0uZGF0YS5wYXJlbnRsc24sIDAsIHNpemVvZihHaXN0 TlNOKSk7CisJCWdpc3RTY2FuUGFnZShzY2FuLCAmZmFrZUl0ZW0sIE5VTEwsIE5VTEwsIE5V TEwpOworCisJCS8qCisJCSAqIE1hcmsgdGhlIGJhdGNoIGFzIGVtcHR5LgorCQkgKgorCQkg KiBYWFggSXMgdGhpcyBuZWNlc3NhcnkgLyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpcz8g TWF5YmUgaXQgc2hvdWxkCisJCSAqIGJlIGRvbmUgaW4gYmVnaW5zY2FuL3Jlc2Nhbj8gVGhl IG9uZSBwcm9ibGVtIHdpdGggdGhhdCBpcyB3ZSBvbmx5CisJCSAqIGluaXRpYWxpemUgdGhl IGJhdGNoIGFmdGVyLCBzbyB0aG9zZSBwbGFjZXMgZG9uJ3Qga25vdyBpZiBiYXRjaGluZwor CQkgKiBpcyB0byBiZSB1c2VkLgorCQkgKi8KKwkJc28tPmJhdGNoLmZpcnN0SW5kZXggPSAt MTsKKwkJc28tPmJhdGNoLmxhc3RJbmRleCA9IC0xOworCX0KKworCS8qCisJICogV2l0aCBv cmRlci1ieSBjbGF1c2VzLCB3ZSBzaW1wbHkgZ2V0IGVub3VnaCBuZWFyZXN0IGl0ZW1zIHRv IGZpbGwgdGhlCisJICogYmF0Y2guIEdJU1QgZG9lcyBub3QgaGFuZGxlIGtpbGxlZCBpdGVt cyBpbiB0aGlzIGNhc2UgZm9yIG5vbi1iYXRjaGVkCisJICogc2NhbnMsIHNvIHdlIGRvbid0 IGRvIHRoYXQgaGVyZSBlaXRoZXIuIFRoZSBvbmx5IGlzc3VlIGlzIHRoYXQgdGhlIGhlYXAK KwkgKiB0dXBsZSByZXR1cm5lZCBpbiB4c19oaXR1cCBpcyBmcmVlZCBvbiB0aGUgbmV4dCBn ZXROZXh0TmVhcmVzdCgpIGNhbGwsCisJICogc28gd2UgbWFrZSBhIGNvcHkgaW4gdGhlIGJh dGNoIG1lbW9yeSBjb250ZXh0LgorCSAqCisJICogRm9yIHNjYW5zIHdpdGhvdXQgb3JkZXIt YnkgY2xhdXNlcywgd2Ugc2ltcGx5IGNvcHkgYSBiYXRjaCBvZiBpdGVtcworCSAqIGZyb20g dGhlIG5leHQgbGVhZiBwYWdlLCBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYWdlIHdoZW4g bmVlZGVkLgorCSAqLworCWlmIChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID4gMCkKKwl7CisJ CWludAkJCW5pdGVtcyA9IDA7CisKKwkJLyogTXVzdCBmZXRjaCB0dXBsZXMgaW4gc3RyaWN0 IGRpc3RhbmNlIG9yZGVyICovCisJCXdoaWxlIChuaXRlbXMgPCBzY2FuLT54c19iYXRjaC0+ Y3VyclNpemUpCisJCXsKKwkJCUhlYXBUdXBsZQlodHVwOworCQkJTWVtb3J5Q29udGV4dCBv bGRjdHg7CisKKwkJCWlmICghZ2V0TmV4dE5lYXJlc3Qoc2NhbikpCisJCQkJYnJlYWs7CisK KwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIGNvcHkgdGhlIHR1cGxlIGludG8gdGhlIGJhdGNo IGNvbnRleHQsIGFzIGl0IG1heSBnbworCQkJICogYXdheSBvbiB0aGUgbmV4dCBnZXROZXh0 TmVhcmVzdCBjYWxsLiBGcmVlIHRoZSBvcmlnaW5hbCB0dXBsZSwKKwkJCSAqIG90aGVyd2lz ZSB3ZSdkIGxlYWsgdGhlIGxhc3QgdHVwbGUgaW4gYSBiYXRjaC4KKwkJCSAqLworCQkJb2xk Y3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPnhzX2JhdGNoLT5jdHgpOworCQkJ aHR1cCA9IGhlYXBfY29weXR1cGxlKHNjYW4tPnhzX2hpdHVwKTsKKworCQkJcGZyZWUoc2Nh bi0+eHNfaGl0dXApOworCQkJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOworCisJCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworCQkJaW5kZXhfYmF0Y2hfYWRkKHNjYW4sIHNj YW4tPnhzX2hlYXB0aWQsIHNjYW4tPnhzX3JlY2hlY2ssIE5VTEwsIGh0dXApOworCisJCQlu aXRlbXMrKzsKKwkJfQorCisJCS8qIGRpZCB3ZSBmaW5kIG1vcmUgdHVwbGVzPyAqLworCQly ZXR1cm4gKHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPiAwKTsKKwl9CisJZWxzZQorCXsK KwkJLyogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzICovCisJCWZvciAoOzspCisJ CXsKKwkJCWludAkJCXN0YXJ0LAorCQkJCQkJZW5kOworCisJCQkvKiBmb3J3YXJkIGRpcmVj dGlvbnMgb25seSwgZWFzeSB0byBjYWxjdWxhdGUgbmV4dCBiYXRjaCAqLworCQkJc3RhcnQg PSBzby0+YmF0Y2gubGFzdEluZGV4ICsgMTsKKwkJCWVuZCA9IE1pbihzdGFydCArIChzY2Fu LT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJICBzby0+blBhZ2VEYXRhIC0gMSk7 CS8qIGluZGV4IG9mIGxhc3QgaXRlbSAqLworCQkJc28tPmN1clBhZ2VEYXRhID0gKGVuZCAr IDEpOworCisJCQkvKiBpZiB3ZSBmb3VuZCBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IHBh Z2UsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmIChzdGFydCA8PSBlbmQpCisJCQl7CisJCQkJX2dp c3RfY29weV9iYXRjaChzY2FuLCBzbywgc3RhcnQsIGVuZCk7CisJCQkJcmV0dXJuIHRydWU7 CisJCQl9CisKKwkJCS8qIGZpbmQgYW5kIHByb2Nlc3MgdGhlIG5leHQgaW5kZXggcGFnZSAq LworCQkJZG8KKwkJCXsKKwkJCQlHSVNUU2VhcmNoSXRlbSAqaXRlbTsKKworCQkJCV9naXN0 X2tpbGxfYmF0Y2goc2Nhbik7CisKKwkJCQlpZiAoKHNvLT5jdXJCbGtubyAhPSBJbnZhbGlk QmxvY2tOdW1iZXIpICYmIChzby0+bnVtS2lsbGVkID4gMCkpCisJCQkJCWdpc3RraWxsaXRl bXMoc2Nhbik7CisKKwkJCQlpdGVtID0gZ2V0TmV4dEdJU1RTZWFyY2hJdGVtKHNvKTsKKwor CQkJCWlmICghaXRlbSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKKworCQkJCS8qIHNhdmUgY3VycmVudCBpdGVtIEJsb2NrTnVtYmVyIGZv ciBuZXh0IGdpc3RraWxsaXRlbXMoKSBjYWxsICovCisJCQkJc28tPmN1ckJsa25vID0gaXRl bS0+Ymxrbm87CisKKwkJCQkvKgorCQkJCSAqIFdoaWxlIHNjYW5uaW5nIGEgbGVhZiBwYWdl LCBJdGVtUG9pbnRlcnMgb2YgbWF0Y2hpbmcgaGVhcAorCQkJCSAqIHR1cGxlcyBhcmUgc3Rv cmVkIGluIHNvLT5wYWdlRGF0YS4gIElmIHRoZXJlIGFyZSBhbnkgb24KKwkJCQkgKiB0aGlz IHBhZ2UsIHdlIGZhbGwgb3V0IG9mIHRoZSBpbm5lciAiZG8iIGFuZCBsb29wIGFyb3VuZCB0 bworCQkJCSAqIHJldHVybiB0aGVtLgorCQkJCSAqLworCQkJCWdpc3RTY2FuUGFnZShzY2Fu LCBpdGVtLCBpdGVtLT5kaXN0YW5jZXMsIE5VTEwsIE5VTEwpOworCisJCQkJLyoKKwkJCQkg KiBJZiB3ZSBmb3VuZCBhbnkgaXRlbXMgb24gdGhlIHBhZ2UsIGNvcHkgdGhlbSBpbnRvIGEg YmF0Y2gKKwkJCQkgKiBhbmQgd2UncmUgZG9uZS4KKwkJCQkgKi8KKworCQkJCS8qIGZvcndh cmQgZGlyZWN0aW9uIG9ubHksIHNvIGdldCB0aGUgZmlyc3QgY2h1bmsgb2YgaXRlbXMgKi8K KwkJCQlzdGFydCA9IDA7CisJCQkJZW5kID0gTWluKHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNo LT5jdXJyU2l6ZSAtIDEpLAorCQkJCQkJICBzby0+blBhZ2VEYXRhIC0gMSk7CS8qIGluZGV4 IG9mIGxhc3QgaXRlbSAqLworCisJCQkJaWYgKHN0YXJ0IDw9IGVuZCkKKwkJCQl7CisJCQkJ CV9naXN0X2NvcHlfYmF0Y2goc2Nhbiwgc28sIHN0YXJ0LCBlbmQpOworCQkJCQlyZXR1cm4g dHJ1ZTsKKwkJCQl9CisKKwkJCQlwZnJlZShpdGVtKTsKKwkJCX0gd2hpbGUgKHNvLT5uUGFn ZURhdGEgPT0gMCk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBnaXN0Z2V0Yml0bWFwKCkgLS0g R2V0IGEgYml0bWFwIG9mIGFsbCBoZWFwIHR1cGxlIGxvY2F0aW9ucwogICovCkBAIC03OTks MyArOTY5LDEyOCBAQCBnaXN0Y2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8p CiAJZWxzZQogCQlyZXR1cm4gZmFsc2U7CiB9CisKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVj a0dJU1RCYXRjaEluZm8oR0lTVFNjYW5PcGFxdWUgc28pCit7CisjaWZkZWYgVVNFX0FTU0VS VF9DSEVDS0lORworCS8qIHNob3VsZCBiZSB2YWxpZCBpdGVtcyAod2l0aCByZXNwZWN0IHRv IHRoZSBjdXJyZW50IGxlYWYgcGFnZSkgKi8KKwlBc3NlcnQoMCA8PSBzby0+YmF0Y2guZmly c3RJbmRleCk7CisJQXNzZXJ0KHNvLT5iYXRjaC5maXJzdEluZGV4IDw9IHNvLT5iYXRjaC5s YXN0SW5kZXgpOworCUFzc2VydChzby0+YmF0Y2gubGFzdEluZGV4IDw9IHNvLT5uUGFnZURh dGEpOworI2VuZGlmCit9CisKKy8qCisgKglfZ2lzdF9raWxsX2JhdGNoKCkgLS0gcmVtZW1i ZXIgdGhlIGl0ZW1zLXRvLWJlLWtpbGxlZCBmcm9tIHRoZSBjdXJyZW50IGJhdGNoCisgKgor ICogV2Ugc2ltcGx5IHRyYW5zbGF0ZSB0aGUgYml0bWFwIGludG8gdGhlICJyZWd1bGFyIiBr aWxsZWRJdGVtcyBhcnJheSwgYW5kIGxldAorICogdGhhdCB0byBkcml2ZSB3aGljaCBpdGVt cyBhcmUga2lsbGVkLgorICovCitzdGF0aWMgdm9pZAorX2dpc3Rfa2lsbF9iYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJR0lTVFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKKworCS8qIGJhaWwgb3V0IGlmIGJhdGNoaW5nIG5vdCBlbmFi bGVkICovCisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJcmV0dXJuOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCBzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zOyBpKyspCisJeworCQlp bnQJCQlpbmRleCA9IChzby0+YmF0Y2guZmlyc3RJbmRleCArIHNjYW4tPnhzX2JhdGNoLT5r aWxsZWRJdGVtc1tpXSk7CisKKwkJLyogbWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBpbmRl eCAoaW4gdGhlIGN1cnJlbnQgbGVhZiBwYWdlKSAqLworCQlBc3NlcnQoKHNvLT5iYXRjaC5m aXJzdEluZGV4IDw9IGluZGV4KSAmJgorCQkJICAgKGluZGV4IDw9IHNvLT5iYXRjaC5sYXN0 SW5kZXgpKTsKKworCQkvKgorCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdl J2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMgYXQKKwkJICogb25jZSByaWdodCBiZWZv cmUgbGVhdmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUgdGVzdCBmb3IgbnVtS2lsbGVkCisJ CSAqIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZSBjYWxsZXIgcmV2ZXJz ZXMgZGlyZWN0aW9uIGluCisJCSAqIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZSBpdGVt IG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgorCQkgKiBJdCdzIG5vdCB3b3J0 aCB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQK KwkJICogaW5zdGVhZCBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCisJCSAqLwor CQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJCXsKKwkJCU1lbW9yeUNvbnRleHQg b2xkQ3h0ID0KKwkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc28tPmdpc3RzdGF0ZS0+c2Nh bkN4dCk7CisKKwkJCXNvLT5raWxsZWRJdGVtcyA9CisJCQkJKE9mZnNldE51bWJlciAqKSBw YWxsb2MoTWF4SW5kZXhUdXBsZXNQZXJQYWdlCisJCQkJCQkJCQkJKiBzaXplb2YoT2Zmc2V0 TnVtYmVyKSk7CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDeHQpOworCQl9CisJ CWlmIChzby0+bnVtS2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQorCQkJc28tPmtp bGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBpbmRleDsKKwl9CisKKwkvKiBub3cgcmVz ZXQgdGhlIG51bWJlciBvZiBraWxsZWQgaXRlbXMgKi8KKwlzY2FuLT54c19iYXRjaC0+bktp bGxlZEl0ZW1zID0gMDsKK30KKworLyoKKyAqIEZJWE1FIERvZXMgdGhpcyBuZWVkIHRvIHdv cnJ5IGFib3V0IHJlY2hlY2svcmVjaGVja0Rpc3RhbmNlcyBmbGFncyBpbgorICogR0lTVFNj YW5PcGFxdWU/IFByb2JhYmx5IHllcy4KKyAqCisgKiBGSVhNRSBEZWZpbml0ZWx5IHNob3Vs ZCByZXR1cm4gcmVjb250dXAgZm9yIElPUywgYnV0IHRoYXQgbmVlZHMgY2hhbmdlcworICog dG8gaW5kZXhfYmF0Y2hfYWRkLgorICovCitzdGF0aWMgdm9pZAorX2dpc3RfY29weV9iYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIEdJU1RTY2FuT3BhcXVlIHNvLAorCQkJCSBpbnQgc3Rh cnQsIGludCBlbmQpCit7CisJLyoKKwkgKiBXZSdyZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRj aCwgYW5kIHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lCisJICogaXRlbSAo b3RoZXJ3aXNlIF9idF9maXJzdCB3b3VsZCByZXR1cm4gZmFsc2UpLiBTbyB3ZSBzaG91bGQg bmV2ZXIgZ2V0CisJICogaW50byBzaXR1YXRpb24gd2l0aCBlbXB0eSBzdGFydC9lbmQgcmFu Z2UuIEluIHRoZSB3b3JzdCBjYXNlLCB0aGVyZSBpcworCSAqIGp1c3QgYSBzaW5nbGUgaXRl bSwgaW4gd2hpY2ggY2FzZSAoc3RhcnQgPT0gZW5kKS4KKwkgKi8KKwlBc3NlcnQoc3RhcnQg PD0gZW5kKTsKKworCS8qIFRoZSByYW5nZSBvZiBpdGVtcyBzaG91bGQgZml0IGludG8gdGhl IGN1cnJlbnQgYmF0Y2ggc2l6ZS4gKi8KKwlBc3NlcnQoKGVuZCAtIHN0YXJ0ICsgMSkgPD0g c2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplKTsKKworCXNvLT5iYXRjaC5maXJzdEluZGV4ID0g c3RhcnQ7CisJc28tPmJhdGNoLmxhc3RJbmRleCA9IGVuZDsKKworCUFzc2VydENoZWNrR0lT VEJhdGNoSW5mbyhzbyk7CisKKwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgcmFuZ2Ugb2Yg aW5kZXggdHVwbGVzLCBjb3B5IHRoZW0gaW50byB0aGUgYmF0Y2guIElmCisJICogcmVxdWVz dGVkLCBzZXQgdGhlIGluZGV4IHR1cGxlIHRvby4KKwkgKgorCSAqIFdlIGRvbid0IGtub3cg aWYgdGhlIGJhdGNoIGlzIGZ1bGwgYWxyZWFkeSAtIHdlIGp1c3QgdHJ5IHRvIGFkZCBpdCwg YW5kCisJICogYmFpbCBvdXQgaWYgaXQgZmFpbHMuCisJICoKKwkgKiBGSVhNRSBUaGlzIHNl ZW1zIHdyb25nLCBhY3R1YWxseS4gV2UgdXNlIGN1cnJTaXplIHdoZW4gY2FsY3VsYXRpbmcg dGhlCisJICogc3RhcnQvZW5kIHJhbmdlLCBzbyB0aGUgYWRkIHNob3VsZCBhbHdheXMgc3Vj Y2VlZC4KKwkgKi8KKwl3aGlsZSAoc3RhcnQgPD0gZW5kKQorCXsKKwkJR0lTVFNlYXJjaEhl YXBJdGVtICppdGVtID0gJnNvLT5wYWdlRGF0YVtzdGFydF07CisKKwkJSGVhcFR1cGxlCWh0 dXAgPSBOVUxMOworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQlodHVwID0gaXRl bS0+cmVjb250dXA7CisKKwkJLyogdHJ5IHRvIGFkZCBpdCB0byBiYXRjaCwgaWYgdGhlcmUn cyBzcGFjZSAqLworCQlpZiAoIWluZGV4X2JhdGNoX2FkZChzY2FuLCBpdGVtLT5oZWFwUHRy LCBpdGVtLT5yZWNoZWNrLCBOVUxMLCBodHVwKSkKKwkJCWJyZWFrOworCisJCXN0YXJ0Kys7 CisJfQorCisJLyoKKwkgKiBzZXQgdGhlIHN0YXJ0aW5nIHBvaW50CisJICoKKwkgKiBYWFgg bWlnaHQgYmUgYmV0dGVyIGRvbmUgaW4gaW5kZXhhbS5jCisJICovCisJc2Nhbi0+eHNfYmF0 Y2gtPmN1cnJJbmRleCA9IC0xOworCisJLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRvIGVu ZCBoZXJlIHdpdGggYW4gZW1wdHkgYmF0Y2ggKi8KKwlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gt Pm5oZWFwdGlkcyA+IDApOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dp c3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCmluZGV4 IDdiODc0OWM4ZGIwLi4yZjY1MzM1NGRhMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2dpc3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZh dGUuaApAQCAtMTQ4LDYgKzE0OCwxOSBAQCB0eXBlZGVmIHN0cnVjdCBHSVNUU2VhcmNoSXRl bQogCShvZmZzZXRvZihHSVNUU2VhcmNoSXRlbSwgZGlzdGFuY2VzKSArIFwKIAkgc2l6ZW9m KEluZGV4T3JkZXJCeURpc3RhbmNlKSAqIChuX2Rpc3RhbmNlcykpCiAKKy8qCisgKiBJbmZv cm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBiYXRjaCAoaW4gYmF0Y2hlZCBpbmRleCBzY2Fu cykKKyAqCisgKiBYWFggUHJvYmFibHkgbm90IG5lZWRlZCwgYXMgc3BnaXN0IHN1cHBvcnRz IGp1c3QgZm9yd2FyZCBzY2Fucywgc28gd2UKKyAqIGNvdWxkIHNpbXBseSB0aGUgaVB0ciAo bm8gcHJvYmxlbSBhZnRlciBjaGFuZ2Ugb2Ygc2NhbiBkaXJlY3Rpb24pLgorICovCit0eXBl ZGVmIHN0cnVjdCBHSVNUQmF0Y2hJbmZvCit7CisJLyogQ3VycmVudCByYW5nZSBvZiBpdGVt cyBpbiBhIGJhdGNoIChpZiB1c2VkKS4gKi8KKwlpbnQJCQlmaXJzdEluZGV4OworCWludAkJ CWxhc3RJbmRleDsKK30gR0lTVEJhdGNoSW5mbzsKKwogLyoKICAqIEdJU1RTY2FuT3BhcXVl RGF0YTogcHJpdmF0ZSBzdGF0ZSBmb3IgYSBzY2FuIG9mIGEgR2lTVCBpbmRleAogICovCkBA IC0xNzYsNiArMTg5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgR0lTVFNjYW5PcGFxdWVEYXRhCiAJ T2Zmc2V0TnVtYmVyIGN1clBhZ2VEYXRhOwkvKiBuZXh0IGl0ZW0gdG8gcmV0dXJuICovCiAJ TWVtb3J5Q29udGV4dCBwYWdlRGF0YUN4dDsJLyogY29udGV4dCBob2xkaW5nIHRoZSBmZXRj aGVkIHR1cGxlcywgZm9yCiAJCQkJCQkJCSAqIGluZGV4LW9ubHkgc2NhbnMgKi8KKworCUdJ U1RCYXRjaEluZm8gYmF0Y2g7CQkvKiBiYXRjaCBsb2FkZWQgZnJvbSB0aGUgaW5kZXggKi8K IH0gR0lTVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEdJU1RTY2FuT3BhcXVlRGF0YSAq R0lTVFNjYW5PcGFxdWU7CkBAIC00NjEsNiArNDc2LDcgQEAgZXh0ZXJuIFhMb2dSZWNQdHIg Z2lzdFhMb2dBc3NpZ25MU04odm9pZCk7CiAKIC8qIGdpc3RnZXQuYyAqLwogZXh0ZXJuIGJv b2wgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIGJvb2wgZ2lzdGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gYm9vbCBnaXN0Y2FucmV0dXJuKFJl bGF0aW9uIGluZGV4LCBpbnQgYXR0bm8pOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IGNmNzNjZWY2NWZkLi5hYzc4ZDE1M2Q0ZiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTk2OCw2ICs5NjgsNyBAQCBHQlRfTlVNS0VZX1IKIEdCVF9WQVJLRVkK IEdCVF9WQVJLRVlfUgogR0VORVJBTF9OQU1FCitHSVNUQmF0Y2hJbmZvCiBHSVNUQnVpbGRC dWZmZXJzCiBHSVNUQnVpbGRTdGF0ZQogR0lTVERlbGV0ZWRQYWdlQ29udGVudHMKLS0gCjIu NDYuMAoK --------------EBXrCFUmK4n1JFXBvAqx7NDI Content-Type: text/x-patch; charset=UTF-8; name="v20240906-0005-WIP-batching-for-sp-gist-indexes.patch" Content-Disposition: attachment; filename="v20240906-0005-WIP-batching-for-sp-gist-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSBhMzIxZWYyNmQ1M2I0N2I5MmVmNzlhMDg4NTYwMzdjM2Q2MWNhNTMyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogVGh1LCA1IFNlcCAyMDI0IDIyOjM3OjE3ICswMjAwClN1YmplY3Q6IFtQ QVRDSCB2MjAyNDA5MDYgNS81XSBXSVA6IGJhdGNoaW5nIGZvciBzcC1naXN0IGluZGV4ZXMK Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMgIHwgMTQyICsrKysr KysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1 dGlscy5jIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3QuaCAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaCAgfCAgMTUgKysr CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDEgKwogNSBmaWxl cyBjaGFuZ2VkLCAxNjAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGdzY2FuLmMKaW5kZXggMDMyOTNhNzgxNmUuLjhhNmE2MDU5YWY1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYwpAQCAtMTA3OSw2ICsxMDc5LDE0OCBAQCBzcGdnZXR0 dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXJldHVybiBm YWxzZTsKIH0KIAorc3RhdGljIHZvaWQKK0Fzc2VydENoZWNrU3BHaXN0QmF0Y2hJbmZvKFNw R2lzdFNjYW5PcGFxdWUgc28pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCS8q IHNob3VsZCBiZSB2YWxpZCBpdGVtcyAod2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGxl YWYgcGFnZSkgKi8KKwlBc3NlcnQoMCA8PSBzby0+YmF0Y2guZmlyc3RJbmRleCk7CisJQXNz ZXJ0KHNvLT5iYXRjaC5maXJzdEluZGV4IDw9IHNvLT5iYXRjaC5sYXN0SW5kZXgpOworCUFz c2VydChzby0+YmF0Y2gubGFzdEluZGV4IDw9IHNvLT5uUHRycyk7CisjZW5kaWYKK30KKwor LyoKKyAqIEZJWE1FIERvZXMgdGhpcyBuZWVkIHRvIHdvcnJ5IGFib3V0IHJlY2hlY2svcmVj aGVja0Rpc3RhbmNlcyBmbGFncyBpbgorICogR0lTVFNjYW5PcGFxdWU/IFByb2JhYmx5IHll cy4KKyAqCisgKiBGSVhNRSBEZWZpbml0ZWx5IHNob3VsZCByZXR1cm4gcmVjb250dXAgZm9y IElPUywgYnV0IHRoYXQgbmVlZHMgY2hhbmdlcworICogdG8gaW5kZXhfYmF0Y2hfYWRkLgor ICovCitzdGF0aWMgdm9pZAorX3NwZ2lzdF9jb3B5X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgU3BHaXN0U2Nhbk9wYXF1ZSBzbywKKwkJCQkgICBpbnQgc3RhcnQsIGludCBlbmQpCit7 CisJLyoKKwkgKiBXZSdyZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRjaCwgYW5kIHRoZXJlIHNo b3VsZCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lCisJICogaXRlbSAob3RoZXJ3aXNlIF9idF9m aXJzdCB3b3VsZCByZXR1cm4gZmFsc2UpLiBTbyB3ZSBzaG91bGQgbmV2ZXIgZ2V0CisJICog aW50byBzaXR1YXRpb24gd2l0aCBlbXB0eSBzdGFydC9lbmQgcmFuZ2UuIEluIHRoZSB3b3Jz dCBjYXNlLCB0aGVyZSBpcworCSAqIGp1c3QgYSBzaW5nbGUgaXRlbSwgaW4gd2hpY2ggY2Fz ZSAoc3RhcnQgPT0gZW5kKS4KKwkgKi8KKwlBc3NlcnQoc3RhcnQgPD0gZW5kKTsKKworCS8q IFRoZSByYW5nZSBvZiBpdGVtcyBzaG91bGQgZml0IGludG8gdGhlIGN1cnJlbnQgYmF0Y2gg c2l6ZS4gKi8KKwlBc3NlcnQoKGVuZCAtIHN0YXJ0ICsgMSkgPD0gc2Nhbi0+eHNfYmF0Y2gt PmN1cnJTaXplKTsKKworCXNvLT5iYXRjaC5maXJzdEluZGV4ID0gc3RhcnQ7CisJc28tPmJh dGNoLmxhc3RJbmRleCA9IGVuZDsKKworCUFzc2VydENoZWNrU3BHaXN0QmF0Y2hJbmZvKHNv KTsKKworCS8qCisJICogV2FsayB0aHJvdWdoIHRoZSByYW5nZSBvZiBpbmRleCB0dXBsZXMs IGNvcHkgdGhlbSBpbnRvIHRoZSBiYXRjaC4gSWYKKwkgKiByZXF1ZXN0ZWQsIHNldCB0aGUg aW5kZXggdHVwbGUgdG9vLgorCSAqCisJICogV2UgZG9uJ3Qga25vdyBpZiB0aGUgYmF0Y2gg aXMgZnVsbCBhbHJlYWR5IC0gd2UganVzdCB0cnkgdG8gYWRkIGl0LCBhbmQKKwkgKiBiYWls IG91dCBpZiBpdCBmYWlscy4KKwkgKgorCSAqIEZJWE1FIFRoaXMgc2VlbXMgd3JvbmcsIGFj dHVhbGx5LiBXZSB1c2UgY3VyclNpemUgd2hlbiBjYWxjdWxhdGluZyB0aGUKKwkgKiBzdGFy dC9lbmQgcmFuZ2UsIHNvIHRoZSBhZGQgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgorCSAqLwor CXdoaWxlIChzdGFydCA8PSBlbmQpCisJeworCQlib29sCQlyZWNoZWNrID0gc28tPnJlY2hl Y2tbc3RhcnRdOworCQlIZWFwVHVwbGUJaHR1cCA9IE5VTEw7CisKKwkJaWYgKHNvLT53YW50 X2l0dXApCisJCQlodHVwID0gc28tPnJlY29uVHVwc1tzdGFydF07CisKKwkJaWYgKHNvLT5u dW1iZXJPZk9yZGVyQnlzID4gMCkKKwkJCWluZGV4X3N0b3JlX2Zsb2F0OF9vcmRlcmJ5X2Rp c3RhbmNlcyhzY2FuLCBzby0+b3JkZXJCeVR5cGVzLAorCQkJCQkJCQkJCQkJIHNvLT5kaXN0 YW5jZXNbc28tPmlQdHJdLAorCQkJCQkJCQkJCQkJIHNvLT5yZWNoZWNrRGlzdGFuY2VzW3Nv LT5pUHRyXSk7CisKKwkJLyogdHJ5IHRvIGFkZCBpdCB0byBiYXRjaCwgaWYgdGhlcmUncyBz cGFjZSAqLworCQlpZiAoIWluZGV4X2JhdGNoX2FkZChzY2FuLCBzby0+aGVhcFB0cnNbc3Rh cnRdLCByZWNoZWNrLCBOVUxMLCBodHVwKSkKKwkJCWJyZWFrOworCisJCXN0YXJ0Kys7CisJ fQorCisJLyoKKwkgKiBzZXQgdGhlIHN0YXJ0aW5nIHBvaW50CisJICoKKwkgKiBYWFggbWln aHQgYmUgYmV0dGVyIGRvbmUgaW4gaW5kZXhhbS5jCisJICovCisJc2Nhbi0+eHNfYmF0Y2gt PmN1cnJJbmRleCA9IC0xOworCisJLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRvIGVuZCBo ZXJlIHdpdGggYW4gZW1wdHkgYmF0Y2ggKi8KKwlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gtPm5o ZWFwdGlkcyA+IDApOworfQorCisKK2Jvb2wKK3NwZ2dldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJU3BHaXN0U2Nhbk9wYXF1ZSBzbyA9IChT cEdpc3RTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisKKwlpZiAoZGlyICE9IEZvcndhcmRT Y2FuRGlyZWN0aW9uKQorCQllbG9nKEVSUk9SLCAiU1AtR2lTVCBvbmx5IHN1cHBvcnRzIGZv cndhcmQgc2NhbiBkaXJlY3Rpb24iKTsKKworCS8qIENvcHkgd2FudF9pdHVwIHRvICpzbyBz byB3ZSBkb24ndCBuZWVkIHRvIHBhc3MgaXQgYXJvdW5kIHNlcGFyYXRlbHkgKi8KKwlzby0+ d2FudF9pdHVwID0gc2Nhbi0+eHNfd2FudF9pdHVwOworCisJZm9yICg7OykKKwl7CisJCWlu dAkJCXN0YXJ0LAorCQkJCQllbmQ7CisKKwkJLyogZm9yd2FyZCBkaXJlY3Rpb25zIG9ubHks IGVhc3kgdG8gY2FsY3VsYXRlIG5leHQgYmF0Y2ggKi8KKwkJc3RhcnQgPSBzby0+YmF0Y2gu bGFzdEluZGV4ICsgMTsKKwkJZW5kID0gTWluKHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5j dXJyU2l6ZSAtIDEpLAorCQkJCSAgc28tPm5QdHJzIC0gMSk7CS8qIGluZGV4IG9mIGxhc3Qg aXRlbSAqLworCQlzby0+aVB0ciA9IChlbmQgKyAxKTsKKworCQkvKiBpZiB3ZSBmb3VuZCBt b3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IHBhZ2UsIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKHN0 YXJ0IDw9IGVuZCkKKwkJeworCQkJX3NwZ2lzdF9jb3B5X2JhdGNoKHNjYW4sIHNvLCBzdGFy dCwgZW5kKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJaWYgKHNvLT5udW1iZXJPZk9y ZGVyQnlzID4gMCkKKwkJeworCQkJLyogTXVzdCBwZnJlZSBkaXN0YW5jZXMgdG8gYXZvaWQg bWVtb3J5IGxlYWsgKi8KKwkJCWludAkJCWk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBzby0+ blB0cnM7IGkrKykKKwkJCQlpZiAoc28tPmRpc3RhbmNlc1tpXSkKKwkJCQkJcGZyZWUoc28t PmRpc3RhbmNlc1tpXSk7CisJCX0KKworCQlpZiAoc28tPndhbnRfaXR1cCkKKwkJeworCQkJ LyogTXVzdCBwZnJlZSByZWNvbnN0cnVjdGVkIHR1cGxlcyB0byBhdm9pZCBtZW1vcnkgbGVh ayAqLworCQkJaW50CQkJaTsKKworCQkJZm9yIChpID0gMDsgaSA8IHNvLT5uUHRyczsgaSsr KQorCQkJCXBmcmVlKHNvLT5yZWNvblR1cHNbaV0pOworCQl9CisJCXNvLT5pUHRyID0gc28t Pm5QdHJzID0gMDsKKworCQlzcGdXYWxrKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLCBmYWxz ZSwgc3RvcmVHZXR0dXBsZSk7CisKKwkJaWYgKHNvLT5uUHRycyA9PSAwKQorCQkJYnJlYWs7 CQkJCS8qIG11c3QgaGF2ZSBjb21wbGV0ZWQgc2NhbiAqLworCisJCS8qIHJlc2V0IGJlZm9y ZSBsb2FkaW5nIGRhdGEgZnJvbSBiYXRjaCAqLworCQlzby0+YmF0Y2guZmlyc3RJbmRleCA9 IC0xOworCQlzby0+YmF0Y2gubGFzdEluZGV4ID0gLTE7CisJfQorCisJcmV0dXJuIGZhbHNl OworfQorCiBib29sCiBzcGdjYW5yZXR1cm4oUmVsYXRpb24gaW5kZXgsIGludCBhdHRubykK IHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCA3NmI4MDE0NmZm MC4uZmM2ODVmZmEyYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMK QEAgLTg0LDYgKzg0LDcgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91 dGluZS0+YW1iZWdpbnNjYW4gPSBzcGdiZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2Nh biA9IHNwZ3Jlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBzcGdnZXR0dXBsZTsK KwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBzcGdnZXRiYXRjaDsKIAlhbXJvdXRpbmUtPmFt Z2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gc3Bn ZW5kc2NhbjsKIAlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0 LmgKaW5kZXggZDZhNDk1MzEyMDAuLmY4Nzk4NDNiM2JiIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3Mvc3BnaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5o CkBAIC0yMDksNiArMjA5LDcgQEAgZXh0ZXJuIHZvaWQgc3BncmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgIFNjYW5L ZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIGludDY0IHNwZ2dldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBib29sIHNw Z2dldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0 ZXJuIGJvb2wgc3BnZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CiBleHRlcm4gYm9vbCBzcGdjYW5yZXR1cm4oUmVsYXRpb24gaW5kZXgsIGludCBh dHRubyk7CiAKIC8qIHNwZ3ZhY3V1bS5jICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJp dmF0ZS5oCmluZGV4IGU3Y2JlMTBhODliLi4xNWE1ZTc3YzVkMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3NwZ2lzdF9wcml2YXRlLmgKQEAgLTE4Myw2ICsxODMsMTkgQEAgdHlwZWRlZiBzdHJ1 Y3QgU3BHaXN0U2VhcmNoSXRlbQogI2RlZmluZSBTaXplT2ZTcEdpc3RTZWFyY2hJdGVtKG5f ZGlzdGFuY2VzKSBcCiAJKG9mZnNldG9mKFNwR2lzdFNlYXJjaEl0ZW0sIGRpc3RhbmNlcykg KyBzaXplb2YoZG91YmxlKSAqIChuX2Rpc3RhbmNlcykpCiAKKy8qCisgKiBJbmZvcm1hdGlv biBhYm91dCB0aGUgY3VycmVudCBiYXRjaCAoaW4gYmF0Y2hlZCBpbmRleCBzY2FucykKKyAq CisgKiBYWFggUHJvYmFibHkgbm90IG5lZWRlZCwgYXMgc3BnaXN0IHN1cHBvcnRzIGp1c3Qg Zm9yd2FyZCBzY2Fucywgc28gd2UKKyAqIGNvdWxkIHNpbXBseSB0aGUgaVB0ciAobm8gcHJv YmxlbSBhZnRlciBjaGFuZ2Ugb2Ygc2NhbiBkaXJlY3Rpb24pLgorICovCit0eXBlZGVmIHN0 cnVjdCBTcEdpc3RCYXRjaEluZm8KK3sKKwkvKiBDdXJyZW50IHJhbmdlIG9mIGl0ZW1zIGlu IGEgYmF0Y2ggKGlmIHVzZWQpLiAqLworCWludAkJCWZpcnN0SW5kZXg7CisJaW50CQkJbGFz dEluZGV4OworfSBTcEdpc3RCYXRjaEluZm87CisKIC8qCiAgKiBQcml2YXRlIHN0YXRlIG9m IGFuIGluZGV4IHNjYW4KICAqLwpAQCAtMjM1LDYgKzI0OCw4IEBAIHR5cGVkZWYgc3RydWN0 IFNwR2lzdFNjYW5PcGFxdWVEYXRhCiAJLyogZGlzdGFuY2VzIChmb3IgcmVjaGVjaykgKi8K IAlJbmRleE9yZGVyQnlEaXN0YW5jZSAqZGlzdGFuY2VzW01heEluZGV4VHVwbGVzUGVyUGFn ZV07CiAKKwlTcEdpc3RCYXRjaEluZm8gYmF0Y2g7CQkvKiBiYXRjaCBsb2FkZWQgZnJvbSB0 aGUgaW5kZXggKi8KKwogCS8qCiAJICogTm90ZTogdXNpbmcgTWF4SW5kZXhUdXBsZXNQZXJQ YWdlIGFib3ZlIGlzIGEgYml0IGhva2V5IHNpbmNlCiAJICogU3BHaXN0TGVhZlR1cGxlcyBh cmVuJ3QgZXhhY3RseSBJbmRleFR1cGxlczsgaG93ZXZlciwgdGhleSBhcmUgbGFyZ2VyLApk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBhYzc4ZDE1M2Q0Zi4uZmJiZGIzMzBm YzUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNzAyLDYgKzI3MDIsNyBA QCBTb3J0U3VwcG9ydERhdGEKIFNvcnRUdXBsZQogU29ydFR1cGxlQ29tcGFyYXRvcgogU29y dGVkUG9pbnQKK1NwR2lzdEJhdGNoSW5mbwogU3BHaXN0QnVpbGRTdGF0ZQogU3BHaXN0Q2Fj aGUKIFNwR2lzdERlYWRUdXBsZQotLSAKMi40Ni4wCgo= --------------EBXrCFUmK4n1JFXBvAqx7NDI--