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 1svNl7-00EcnW-HB for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Sep 2024 21:16:46 +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 1svNl5-005puB-3x for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Sep 2024 21:16:43 +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 1svNl3-005psx-QN for pgsql-hackers@lists.postgresql.org; Mon, 30 Sep 2024 21:16:42 +0000 Received: from relay2-d.mail.gandi.net ([2001:4b98:dc4:8::222]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1svNks-001uEh-C5 for pgsql-hackers@lists.postgresql.org; Mon, 30 Sep 2024 21:16:41 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 45D5340002; Mon, 30 Sep 2024 21:16:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1727730989; 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=7YGoVBk/BeRXp1PVQzja8LmG++vLzLd9oWwl976QVEU=; b=eCu8LcNlbyFbhmrwPZr1ScP/U7Hx7+r0518cHj3p/vzMZIT7xl9EfbiMXuC3ptG43e87b4 ttyo9pEacttSfV6GXg56cXDqaGWtjt/hCZROpr50J/7BgpYLaWt2rFiHj9qmSXhViFccGB lkpwxrCaTUcHXhcUnFxVZUz5dDM6Ayg7RFCe2N5mEBMG9WN17cDbG+YcC7PrUGMH1c1hVV ZtaAJxEdXMeRJGqnT5IzhVqema5FR3DmcXhgJcLzjtC6xUOw/euBz2O1sypk1iyNH8MYZ0 fBLutOZjozzqR9lG1IgwqjWLwR9jqqVii7EbUh+ZzpmP1N58bvY2jmgiZZmObg== Content-Type: multipart/mixed; boundary="------------AwhMDARAWMF3JACXnrsprk8G" Message-ID: Date: Mon, 30 Sep 2024 23:16:25 +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: 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. --------------AwhMDARAWMF3JACXnrsprk8G Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's another version of this patch series, with a couple significant improvements, mostly in the indexam.c and executor layers. The AM code remains almost untouched. I have focused on the simplification / cleanup of the executor code (nodeIndexscan and nodeIndexonlyscan). In the previous version there was quite a bit of duplicated code - both for the "regular" index scans and index-only scans, the "while getnext" block was copied, calling either the non-batched or batched functions. That is now mostly gone. I managed to move 99% of the differences to the indexam.c layer, so that the executor simply calls index_getnext_tid() or index_getnext_slot(), and that decides *internally* whether to use the batched version, or not. This means the only new function added to the indexam API is index_batch_add(), which the index AMs use to add items into the batch. For the executor the code remains the same. The only exception is that index-only scans need a way to guide the prefetching based on the visibility map (we don't want to prefetch all-visible pages, because skipping those is the whole point of IOS). And we also want a way to share the VM check, so that it doesn't need to happen twice. Because for fully-cached workloads this is too expensive. Doing the first part is trivial - we simply define a callback for the batching, responsible for inspecting the VM and making a decision. That's easy, and fairly clean. Passing the VM check result back is a bit awkward, though. The current patch deals with it by just executing the callback again (which just returns the cached result), or doing the VM check locally (for non-batched version). It's not pretty, because it leaks knowledge of the batching into the executor. I'd appreciate ideas how to solve this in a nicer way. I've also split the nbtree changes into a separate patch. It used to be included in the first patch, but I've decided to keep it separate, just like for the other AMs. I'm now fairly happy with both the executor layer and the (much smaller) indexam.c code, and I think it's in a good enough shape for a review. The next item on my TODO is cleanup of the nbtree code, particularly the mark/restore part in patch 0003. So I'll work on that next. I also plan to get back to the index_batch_prefetch() code, which is not wrong but would benefit from a bit of cleanup / clarification etc. regards -- Tomas Vondra --------------AwhMDARAWMF3JACXnrsprk8G Content-Type: text/x-patch; charset=UTF-8; name="v20240930-0001-WIP-index-batching-prefetching.patch" Content-Disposition: attachment; filename="v20240930-0001-WIP-index-batching-prefetching.patch" Content-Transfer-Encoding: base64 RnJvbSA4ODA0NmFlOWFmZDYzN2NhZDIyYzU3MjhmMzM3Nzk0YTIxMGNmYmMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODoxMiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQwOTMwIDEvNl0gV0lQOiBpbmRleCBiYXRjaGluZyAvIHByZWZldGNoaW5nCgpBbGxv d3MgdGhlIGluZGV4IEFNIHRvIHByb3ZpZGUgaXRlbXMgKFRJRHMgYW5kIHR1cGxlcykgaW4g YmF0Y2hlcywgd2hpY2gKaXMgdGhlbiB1c2VkIHRvIGltcGxlbWVudCBwcmVmZXRjaGluZyBv ZiBoZWFwIHR1cGxlcyBpbiBpbmRleCBzY2FucwooaW5jbHVkaW5nIGluZGV4LW9ubHkgc2Nh bnMpLiBUaGlzIGlzIHNpbWlsYXIgdG8gcHJlZmV0Y2hpbmcgYWxyZWFkeQpkb25lIGluIGJp dG1hcCBzY2FucywgYW5kIGNhbiByZXN1bHQgaW4gc2lnbmlmaWNhbnQgc3BlZWR1cHMuCgpU aGUgaW5kZXggQU0gbWF5IGltcGxlbWVudCBhbiBvcHRpb25hbCAiYW1nZXRiYXRjaCIgY2Fs bGJhY2ssIHJldHVybmluZwphIGJhdGNoIG9mIGl0ZW1zLiBUaGUgaW5kZXhhbS5jIGNvZGUg dGhlbiBoYW5kbGVzIHRoaXMgdHJhbnNwYXJlbnRseQp0aHJvdWdoIHRoZSBleGlzdGluZyAi Z2V0bmV4dCIgaW50ZXJmYWNlLgoKSXQgaXMgdXAgdG8gdGhlIGluZGV4IEFNIHRvIHJldHVy biBvbmx5IGJhdGNoZXMgdGhhdCBpdCBjYW4gaGFuZGxlCmludGVybmFsbHkuIEZvciBleGFt cGxlLCBtb3N0IG9mIHRoZSBsYXRlciBwYXRjaGVzIGFkZGluZyBzdXBwb3J0IGZvcgpiYXRj aGluZyB0byByZWxldmFudCBpbmRleCBBTXMgKGJ0cmVlLCBoYXNoLCBnaXN0LCBzcC1naXN0 KSByZXN0cmljdCB0aGUKYmF0Y2hlcyB0byBhIHNpbmdsZSBsZWFmIHBhZ2UuIFRoaXMgbWFr ZXMgaW1wbGVtZW50YXRpb24gb2YgYmF0Y2hpbmcKbXVjaCBzaW1wbGVyLCB3aXRoIG9ubHkg bWluaW1hbCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBBTXMsIGJ1dCBpdCdzIG5vdCBhCmhhcmQg cmVxdWlyZW1lbnQuIFRoZSBpbmRleCBBTSBjYW4gcHJvZHVjZSBiYXRjaGVzIHNwYW5uaW5n IGFyYml0cmFyeQpudW1iZXIgb2YgbGVhZiBwYWdlcy4gVGhpcyBpcyBsZWZ0IGFzIGEgcG9z c2libGUgZnV0dXJlIGltcHJvdmVtZW50LgoKTW9zdCBvZiB0aGUgYmF0Y2hpbmcvcHJlZmV0 Y2hpbmcgbG9naWMgaGFwcGVucyBpbiBpbmRleGFtLmMuIFRoaXMgbWVhbnMKdGhlIGV4ZWN1 dG9yIGNvZGUgY2FuIGNvbnRpbnVlIHRvIGNhbGwgdGhlIGludGVyZmFjZSBqdXN0IGxpa2Ug YmVmb3JlLgoKVGhlIG9ubHkgInZpb2xhdGlvbiIgaGFwcGVucyBpbiBpbmRleC1vbmx5IHNj YW5zLCB3aGljaCBuZWVkIHRvIGNoZWNrCnRoZSB2aXNpYmlsaXR5IG1hcCBib3RoIHdoZW4g dGhlIHByZWZldGNoaW5nIHBhZ2VzICh3ZSBkb24ndCB3YW50IHRvCnByZWZldGNoIHBhZ2Vz IHRoYXQgYXJlIHVubmVjZXNzYXJ5KSBhbmQgbGF0ZXIgd2hlbiByZWFkaW5nIHRoZSBkYXRh LgpGb3IgY2FjaGVkIGRhdGEgdGhlIHZpc2liaWxpdHkgbWFwIGNoZWNrcyBjYW4gYmUgZmFp cmx5IGV4cGVuc2l2ZSwgc28KaXQncyBkZXNpcmFibGUgdG8ga2VlcCBhbmQgcmV1c2UgdGhl IHJlc3VsdCBvZiB0aGUgZmlyc3QgY2hlY2suCgpBdCB0aGUgbW9tZW50LCB0aGUgcHJlZmV0 Y2hpbmcgZG9lcyBub3QgaGFuZGxlIG1hcmsvcmVzdG9yZSBwbGFucy4gVGhpcwppcyBkb2Fi bGUsIGJ1dCByZXF1aXJlcyBhZGRpdGlvbmFsIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRo ZSBiYXRjaGluZwphbmQgaW5kZXggQU0gY29kZSBpbiB0aGUgIm9wcG9zaXRlIGRpcmVjdGlv biIuCgpUaGlzIHBhdGNoIGRvZXMgbm90IGFjdHVhbGx5IGFkZCBiYXRjaGluZyB0byBhbnkg b2YgdGhlIGluZGV4IEFNcywgaXQncwpqdXN0IHRoZSBjb21tb24gaW5mcmFzdHJ1Y3R1cmUu CgpUT0RPIEFkZCB0aGUgbmV3IGluZGV4IEFNIGNhbGxiYWNrIHRvIHNnbWwgZG9jcy4KLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgIDcg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAy MyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwg ODA4ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYyAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgICAgICB8IDEwNiArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYyAgICAgICAgICB8ICAzNiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oICAgICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9hY2Nl c3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgMTQgKy0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICA2NCArKwogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICA3ICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsKIDE2IGZpbGVz IGNoYW5nZWQsIDEwODQgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMWM2ZGEyODZkNDMu Ljg2ZGEyM2U0MWY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMKQEAgLTc1MCw3ICs3NTAsMTIgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2Ns dXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQl0YWJsZVNj YW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2NhbiA9IGluZGV4X2Jl Z2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIDAsIDApOworCisJCS8q CisJCSAqIFhYWCBNYXliZSBlbmFibGUgYmF0Y2hpbmcvcHJlZmV0Y2ggZm9yIGNsdXN0ZXJp bmcuIFNlZW1zIGxpa2UgaXQKKwkJICogbWlnaHQgYmUgYSBwcmV0dHkgc3Vic3RhbnRpYWwg d2luLgorCQkgKi8KKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9s ZEluZGV4LCBTbmFwc2hvdEFueSwgMCwgMCwgZmFsc2UpOwogCQlpbmRleF9yZXNjYW4oaW5k ZXhTY2FuLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwppbmRleCA1MmZkZTVjYzRkNC4uMDE4NmMyNTFlZjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCkBAIC00NDUsOCArNDQ1LDE4IEBAIHN5c3RhYmxlX2JlZ2lu c2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBp cyBub3QgaW4gaW5kZXgiKTsKIAkJfQogCisJCS8qCisJCSAqIE5vIGJhdGNoaW5nL3ByZWZl dGNoIGZvciBjYXRhbG9ncy4gV2UgZG9uJ3QgZXhwZWN0IHRoYXQgdG8gaGVscAorCQkgKiB2 ZXJ5IG11Y2gsIGJlY2F1c2Ugd2UgdXN1YWxseSBuZWVkIGp1c3Qgb25lIHJvdywgYW5kIGV2 ZW4gaWYgd2UKKwkJICogbmVlZCBtdWx0aXBsZSByb3dzLCB0aGV5IHRlbmQgdG8gYmUgY29s b2NhdGVkIGluIGhlYXAuCisJCSAqCisJCSAqIFhYWCBNYXliZSB3ZSBjb3VsZCBkbyB0aGF0 LCB0aGUgcHJlZmV0Y2hpbmcgb25seSByYW1wcyB1cCBvdmVyCisJCSAqIHRpbWUuIEJ1dCB0 aGVuIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmZpbml0ZSByZWN1cnNpb24gd2hl bgorCQkgKiBsb29raW5nIHVwIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgYSB0YWJs ZXNwYWNlIGluIHRoZQorCQkgKiBjYXRhbG9nLgorCQkgKi8KIAkJc3lzc2Nhbi0+aXNjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLAotCQkJCQkJCQkJCSBzbmFw c2hvdCwgbmtleXMsIDApOworCQkJCQkJCQkJCSBzbmFwc2hvdCwgbmtleXMsIDAsIGZhbHNl KTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxM LCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CiAJfQpAQCAtNzA4LDggKzcxOCwxNyBA QCBzeXN0YWJsZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJ CQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCX0KIAorCS8qCisJ ICogTm8gYmF0Y2hpbmcvcHJlZmV0Y2ggZm9yIGNhdGFsb2dzLiBXZSBkb24ndCBleHBlY3Qg dGhhdCB0byBoZWxwIHZlcnkKKwkgKiBtdWNoLCBiZWNhdXNlIHdlIHVzdWFsbHkgbmVlZCBq dXN0IG9uZSByb3csIGFuZCBldmVuIGlmIHdlIG5lZWQKKwkgKiBtdWx0aXBsZSByb3dzLCB0 aGV5IHRlbmQgdG8gYmUgY29sb2NhdGVkIGluIGhlYXAuCisJICoKKwkgKiBYWFggTWF5YmUg d2UgY291bGQgZG8gdGhhdCwgdGhlIHByZWZldGNoaW5nIG9ubHkgcmFtcHMgdXAgb3ZlciB0 aW1lLgorCSAqIEJ1dCB0aGVuIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmZpbml0 ZSByZWN1cnNpb24gd2hlbiBsb29raW5nIHVwCisJICogZWZmZWN0aXZlX2lvX2NvbmN1cnJl bmN5IGZvciBhIHRhYmxlc3BhY2UgaW4gdGhlIGNhdGFsb2cuCisJICovCiAJc3lzc2Nhbi0+ aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAot CQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCk7CisJCQkJCQkJCQkgc25hcHNob3QsIG5r ZXlzLCAwLCBmYWxzZSk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXks IG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggMTg1OWJlNjE0YzAuLjI4NDlhYjk3Y2RmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTMzLDYgKzMzLDcgQEAKICAq CQlpbmRleF9jYW5fcmV0dXJuCS0gZG9lcyBpbmRleCBzdXBwb3J0IGluZGV4LW9ubHkgc2Nh bnM/CiAgKgkJaW5kZXhfZ2V0cHJvY2lkIC0gZ2V0IGEgc3VwcG9ydCBwcm9jZWR1cmUgT0lE CiAgKgkJaW5kZXhfZ2V0cHJvY2luZm8gLSBnZXQgYSBzdXBwb3J0IHByb2NlZHVyZSdzIGxv b2t1cCBpbmZvCisgKgkJaW5kZXhfYmF0Y2hfYWRkCQktIGFkZCBhbiBpdGVtIChUSUQsIGl0 dXApIHRvIHRoZSBiYXRjaAogICoKICAqIE5PVEVTCiAgKgkJVGhpcyBmaWxlIGNvbnRhaW5z IHRoZSBpbmRleF8gcm91dGluZXMgd2hpY2ggdXNlZApAQCAtNTQsMTAgKzU1LDE0IEBACiAj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgog I2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2Nh Y2hlLmgiCiAKKy8qIGVuYWJsZSByZWFkaW5nIGJhdGNoZXMgLyBwcmVmZXRjaGluZyBvZiBU SURzIGZyb20gdGhlIGluZGV4ICovCitib29sCQllbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5n ID0gZmFsc2U7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCQltYWNyb3MgdXNlZCBpbiBpbmRl eF8gcm91dGluZXMKQEAgLTEwOSw2ICsxMTQsMTUgQEAgc3RhdGljIEluZGV4U2NhbkRlc2Mg aW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJ CQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCk7 CiBzdGF0aWMgaW5saW5lIHZvaWQgdmFsaWRhdGVfcmVsYXRpb25fa2luZChSZWxhdGlvbiBy KTsKIAorLyogaW5kZXggYmF0Y2hpbmcgKi8KK3N0YXRpYyB2b2lkIGluZGV4X2JhdGNoX2lu aXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK3N0YXRpYyB2b2lkIGluZGV4X2JhdGNoX3Jlc2V0 KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitzdGF0aWMgYm9vbCBpbmRleF9iYXRjaF9nZXRuZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p Oworc3RhdGljIEl0ZW1Qb2ludGVyIGluZGV4X2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Citz dGF0aWMgdm9pZCBpbmRleF9iYXRjaF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq CQkJCSAgIGluZGV4XyBpbnRlcmZhY2UgZnVuY3Rpb25zCkBAIC0yNTYsNyArMjcwLDggQEAg SW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwK IAkJCQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAot CQkJCWludCBua2V5cywgaW50IG5vcmRlcmJ5cykKKwkJCQlpbnQgbmtleXMsIGludCBub3Jk ZXJieXMsCisJCQkJYm9vbCBlbmFibGVfYmF0Y2hpbmcpCiB7CiAJSW5kZXhTY2FuRGVzYyBz Y2FuOwogCkBAIC0yNzQsNiArMjg5LDI0IEBAIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20g dGFibGUgKi8KIAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdp bihoZWFwUmVsYXRpb24pOwogCisJLyoKKwkgKiBJZiBleHBsaWNpdGx5IHJlcXVlc3RlZCBh bmQgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGluZGV4IEFNIGFuZCB0aGUKKwkgKiBwbGFuLCBp bml0aWFsaXplIGJhdGNoaW5nIGluZm8uCisJICoKKwkgKiBYWFggV2UgZG8gdGhpcyBhZnRl ciBhbWJlZ2luc2NhbigpLCB3aGljaCBtZWFucyB0aGUgQU0gY2FuJ3QgaW5pdCB0aGUKKwkg KiBwcml2YXRlIGRhdGEgaW4gdGhlcmUgKGl0IGRvZXNuJ3QgZXZlbiBrbm93IGlmIGJhdGNo aW5nIHdpbGwgYmUgdXNlZCBhdAorCSAqIHRoYXQgcG9pbnQpLgorCSAqCisJICogWFhYIE1h eWJlIHdlIHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgImFtY2FuYmF0Y2giIGNhbGwsIHRvIGxl dCB0aGUgQU0KKwkgKiBkZWNpZGUgaWYgYmF0Y2hpbmcgaXMgc3VwcG9ydGVkIGRlcGVuZGlu ZyBvbiB0aGUgc2NhbiBkZXRhaWxzLgorCSAqLworCWlmICgoaW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkgJiYKKwkJZW5hYmxlX2JhdGNoaW5nICYmCisJ CWVuYWJsZV9pbmRleHNjYW5fYmF0Y2hpbmcpCisJeworCQlpbmRleF9iYXRjaF9pbml0KHNj YW4pOworCX0KKwogCXJldHVybiBzY2FuOwogfQogCkBAIC0zMzMsNiArMzY2LDEyIEBAIGlu ZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXNjYW4t PnBhcmFsbGVsX3NjYW4gPSBwc2NhbjsKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3Nu YXA7CiAKKwkvKgorCSAqIE5vIGJhdGNoaW5nIGJ5IGRlZmF1bHQsIHNvIHNldCBpdCB0byBO VUxMLiBXaWxsIGJlIGluaXRpYWxpemVkIGxhdGVyIGlmCisJICogYmF0Y2hpbmcgaXMgcmVx dWVzdGVkIGFuZCBBTSBzdXBwb3J0cyBpdC4KKwkgKi8KKwlzY2FuLT54c19iYXRjaCA9IE5V TEw7CisKIAlyZXR1cm4gc2NhbjsKIH0KIApAQCAtMzY4LDYgKzQwNywxOCBAQCBpbmRleF9y ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtcmVzY2FuKHNjYW4sIGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5 cywgbm9yZGVyYnlzKTsKKworCS8qCisJICogUmVzZXQgdGhlIGJhdGNoLCB0byBtYWtlIGl0 IGxvb2sgZW1wdHkuCisJICoKKwkgKiBEb25lIGFmdGVyIHRoZSBhbXJlc2NhbigpIGNhbGws IGluIGNhc2UgdGhlIEFNIG5lZWRzIHNvbWUgb2YgdGhlIGJhdGNoCisJICogaW5mbyAoZS5n LiB0byBwcm9wZXJseSB0cmFuc2ZlciB0aGUga2lsbGVkIHR1cGxlcykuCisJICoKKwkgKiBY WFggVGhpcyBpcyBhIGJpdCBtaXNsZWFkaW5nLCBiZWNhdXNlIGluZGV4X2JhdGNoX3Jlc2V0 IGRvZXMgbm90IHJlc2V0CisJICogdGhlIGtpbGxlZCB0dXBsZXMuIFNvIGlmIHRoYXQncyB0 aGUgb25seSBqdXN0aWZpY2F0aW9uLCB3ZSBjb3VsZCBoYXZlCisJICogZG9uZSBpdCBiZWZv cmUgdGhlIGNhbGwuCisJICovCisJaW5kZXhfYmF0Y2hfcmVzZXQoc2Nhbik7CiB9CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0NCw2ICs0OTUsMTggQEAgaW5kZXhfcmVzdHJwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsK IAogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOwor CisJLyoKKwkgKiBSZXNldCB0aGUgYmF0Y2gsIHRvIG1ha2UgaXQgbG9vayBlbXB0eS4KKwkg KgorCSAqIERvbmUgYWZ0ZXIgdGhlIGFtcmVzY2FuKCkgY2FsbCwgaW4gY2FzZSB0aGUgQU0g bmVlZHMgc29tZSBvZiB0aGUgYmF0Y2gKKwkgKiBpbmZvIChlLmcuIHRvIHByb3Blcmx5IHRy YW5zZmVyIHRoZSBraWxsZWQgdHVwbGVzKS4KKwkgKgorCSAqIFhYWCBUaGlzIGlzIGEgYml0 IG1pc2xlYWRpbmcsIGJlY2F1c2UgaW5kZXhfYmF0Y2hfcmVzZXQgZG9lcyBub3QgcmVzZXQK KwkgKiB0aGUga2lsbGVkIHR1cGxlcy4gU28gaWYgdGhhdCdzIHRoZSBvbmx5IGp1c3RpZmlj YXRpb24sIHdlIGNvdWxkIGhhdmUKKwkgKiBkb25lIGl0IGJlZm9yZSB0aGUgY2FsbC4KKwkg Ki8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuKTsKIH0KIAogLyoKQEAgLTUzOSw3ICs2MDIs OCBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAgKi8KIElu ZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVs LCBSZWxhdGlvbiBpbmRleHJlbCwgaW50IG5rZXlzLAotCQkJCQkJIGludCBub3JkZXJieXMs IFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbikKKwkJCQkJCSBpbnQgbm9yZGVyYnlzLCBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCisJCQkJCQkgYm9vbCBlbmFibGVfYmF0Y2hp bmcpCiB7CiAJU25hcHNob3QJc25hcHNob3Q7CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwpAQCAt NTYyLDYgKzYyNiwyNCBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVh cHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsIGludCBua2V5cywKIAkvKiBwcmVwYXJlIHRvIGZl dGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9 IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwogCisJLyoKKwkgKiBJZiBleHBs aWNpdGx5IHJlcXVlc3RlZCBhbmQgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGluZGV4IEFNIGFu ZCB0aGUKKwkgKiBwbGFuLCBpbml0aWFsaXplIGJhdGNoaW5nIGluZm8uCisJICoKKwkgKiBY WFggV2UgZG8gdGhpcyBhZnRlciBhbWJlZ2luc2NhbigpLCB3aGljaCBtZWFucyB0aGUgQU0g Y2FuJ3QgaW5pdCB0aGUKKwkgKiBwcml2YXRlIGRhdGEgaW4gdGhlcmUgKGl0IGRvZXNuJ3Qg ZXZlbiBrbm93IGlmIGJhdGNoaW5nIHdpbGwgYmUgdXNlZCBhdAorCSAqIHRoYXQgcG9pbnQp LgorCSAqCisJICogWFhYIE1heWJlIHdlIHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgImFtY2Fu YmF0Y2giIGNhbGwsIHRvIGxldCB0aGUgQU0KKwkgKiBkZWNpZGUgaWYgYmF0Y2hpbmcgaXMg c3VwcG9ydGVkIGRlcGVuZGluZyBvbiB0aGUgc2NhbiBkZXRhaWxzLgorCSAqLworCWlmICgo aW5kZXhyZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpICYmCisJCWVuYWJsZV9i YXRjaGluZyAmJgorCQllbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nKQorCXsKKwkJaW5kZXhf YmF0Y2hfaW5pdChzY2FuKTsKKwl9CisKIAlyZXR1cm4gc2NhbjsKIH0KIApAQCAtNTgzLDYg KzY2NSw1MyBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEg c25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoUmVjZW50WG1pbikpOwogCisJLyoKKwkgKiBXaGVuIHVzaW5nIGJhdGNo aW5nICh3aGljaCBtYXkgYmUgZGlzYWJsZWQgZm9yIHZhcmlvdXMgcmVhc29ucyAoZS5nLgor CSAqIHRocm91Z2ggYSBHVUMsIHRoZSBpbmRleCBBTSBub3Qgc3VwcG9ydGluZyBpdCkgZG8g dGhlIG9sZCBhcHByb2FjaC4KKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBzaG91bGQgZW5hYmxl IGJhdGNoaW5nIGJhc2VkIG9uIHRoZSBwbGFuIHRvbywgc28gdGhhdCB3ZQorCSAqIGRvbid0 IGRvIGJhdGNoaW5nIHdoZW4gaXQncyBwcm9iYWJseSB1c2VsZXNzIChlLmcuIHNlbWlqb2lu cyBvciBxdWVyaWVzCisJICogd2l0aCBMSU1JVCAxIGV0Yy4pLiBCdXQgbWF5YmUgdGhlIGFw cHJvYWNoIHdpdGggc2xvdyByYW1wLXVwIChzdGFydGluZworCSAqIHdpdGggc21hbGwgYmF0 Y2hlcykgd2lsbCBoYW5kbGUgdGhhdCB3ZWxsIGVub3VnaC4KKwkgKgorCSAqIFhYWCBQZXJo YXBzIGl0J2QgYmUgcG9zc2libGUgdG8gZG8gYm90aCBpbiBpbmRleF9nZXRuZXh0X3Nsb3Qo KSwgaS5lLgorCSAqIGNhbGwgZWl0aGVyIHRoZSBvcmlnaW5hbCBjb2RlIHdpdGhvdXQgYmF0 Y2hpbmcsIG9yIHRoZSBuZXcgYmF0Y2hpbmcKKwkgKiBjb2RlIGlmIHN1cHBvcnRlZC9lbmFi bGVkLiBJdCdzIG5vdCBncmVhdCB0byBoYXZlIGR1cGxpY2F0ZWQgY29kZS4KKwkgKi8KKwlp ZiAoc2Nhbi0+eHNfYmF0Y2ggIT0gTlVMTCkKKwl7CitiYXRjaF9sb2FkZWQ6CisJCS8qIFRy eSBnZXR0aW5nIGEgVElEIGZyb20gdGhlIGN1cnJlbnQgYmF0Y2ggKGlmIHdlIGhhdmUgb25l KS4gKi8KKwkJd2hpbGUgKGluZGV4X2JhdGNoX2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlv bikgIT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIFdlJ3ZlIHN1Y2Nlc3NmdWxseSBsb2Fk ZWQgYSBUSUQgZnJvbSB0aGUgYmF0Y2gsIHNvIGlzc3VlCisJCQkgKiBwcmVmZXRjaGVzIGZv ciBmdXR1cmUgVElEcyBpZiBuZWVkZWQuCisJCQkgKi8KKwkJCWluZGV4X2JhdGNoX3ByZWZl dGNoKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsK KwkJfQorCisJCS8qCisJCSAqIFdlIGVpdGhlciBkb24ndCBoYXZlIGFueSBiYXRjaCB5ZXQs IG9yIHdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkCisJCSAqIGFsbCBpdGVtcyBmcm9tIHRoZSBj dXJyZW50IGJhdGNoLiBUcnkgbG9hZGluZyB0aGUgbmV4dCBvbmUuCisJCSAqCisJCSAqIElm IHdlIHN1Y2NlZWQsIGlzc3VlIHByZWZldGNoZXMgKHVzaW5nIHRoZSBjdXJyZW50IHByZWZl dGNoCisJCSAqIGRpc3RhbmNlIHdpdGhvdXQgcmFtcCB1cCksIGFuZCB0aGVuIGdvIGJhY2sg dG8gcmV0dXJuaW5nIHRoZQorCQkgKiBUSURzIGZyb20gdGhlIGJhdGNoLgorCQkgKgorCQkg KiBYWFggTWF5YmUgZG8gdGhpcyBhcyBhIHNpbXBsZSB3aGlsZS9mb3IgbG9vcCB3aXRob3V0 IHRoZSBnb3RvLgorCQkgKi8KKwkJaWYgKGluZGV4X2JhdGNoX2dldG5leHQoc2NhbiwgZGly ZWN0aW9uKSkKKwkJeworCQkJaW5kZXhfYmF0Y2hfcHJlZmV0Y2goc2NhbiwgZGlyZWN0aW9u KTsKKwkJCWdvdG8gYmF0Y2hfbG9hZGVkOworCQl9CisKKwkJcmV0dXJuIE5VTEw7CisJfQor CiAJLyoKIAkgKiBUaGUgQU0ncyBhbWdldHR1cGxlIHByb2MgZmluZHMgdGhlIG5leHQgaW5k ZXggZW50cnkgbWF0Y2hpbmcgdGhlIHNjYW4KIAkgKiBrZXlzLCBhbmQgcHV0cyB0aGUgVElE IGludG8gc2Nhbi0+eHNfaGVhcHRpZC4gIEl0IHNob3VsZCBhbHNvIHNldApAQCAtNjUxLDcg Kzc4MCwxOSBAQCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVU YWJsZVNsb3QgKnNsb3QpCiAJICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KIAkgKi8KIAlp ZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGFsbF9kZWFkOworCXsKKwkJaWYgKHNjYW4tPnhzX2JhdGNoID09IE5VTEwpCisJ CXsKKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCQllbHNl IGlmIChhbGxfZGVhZCkKKwkJeworCQkJLyogYmF0Y2ggY2FzZSAtIHJlY29yZCB0aGUga2ls bGVkIHR1cGxlIGluIHRoZSBiYXRjaCAqLworCQkJaWYgKHNjYW4tPnhzX2JhdGNoLT5uS2ls bGVkSXRlbXMgPCBzY2FuLT54c19iYXRjaC0+bWF4U2l6ZSkKKwkJCQlzY2FuLT54c19iYXRj aC0+a2lsbGVkSXRlbXNbc2Nhbi0+eHNfYmF0Y2gtPm5LaWxsZWRJdGVtcysrXQorCQkJCQk9 IHNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXg7CisJCX0KKwl9CiAKIAlyZXR1cm4gZm91bmQ7 CiB9CkBAIC0xMDM5LDMgKzExODAsNjY0IEBAIGluZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxh dGlvbiBpbmRyZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBEYXR1bSBhdHRvcHRpb25zLAogCiAJ cmV0dXJuIGJ1aWxkX2xvY2FsX3JlbG9wdGlvbnMoJnJlbG9wdHMsIGF0dG9wdGlvbnMsIHZh bGlkYXRlKTsKIH0KKworLyoKKyAqIElOREVYIEJBVENISU5HIEFORCBQUkVGRVRDSElORwor ICoKKyAqIEFsbG93cyByZWFkaW5nIGNodW5rcyBvZiBpdGVtcyBmcm9tIGFuIGluZGV4LCBp bnN0ZWFkIG9mIHJlYWRpbmcgdGhlbQorICogb25lIGJ5IG9uZS4gVGhpcyByZWR1Y2VzIHRo ZSBvdmVyaGVhZCBvZiBhY2Nlc3NpbmcgaW5kZXggcGFnZXMsIGFuZAorICogYWxzbyBhbGxv d3MgYWN0aW5nIG9uICJmdXR1cmUiIFRJRHMgLSBlLmcuIHdlIGNhbiBwcmVmZXRjaCBoZWFw IHBhZ2VzCisgKiB0aGF0IHdpbGwgYmUgbmVlZGVkLCBldGMuCisgKgorICoKKyAqIGluZGV4 IEFNIGNvbnRyYWN0CisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRvIHN1cHBvcnQg YmF0Y2hpbmcsIHRoZSBpbmRleCBBTSBuZWVkcyB0byBpbXBsZW1lbnQgYW4gb3B0aW9uYWwg Y2FsbGJhY2sKKyAqIGFtZ2V0YmF0Y2goKSB3aGljaCBsb2FkcyBkYXRhIGludG8gdGhlIGJh dGNoIChpbiB0aGUgc2NhbiBkZXNjcmlwdG9yKS4KKyAqCisgKiBUaGUgaW5kZXggQU0gYWxz byBuZWVkcyB0byBlbnN1cmUgaXQgY2FuIHBlcmZvcm0gYWxsIG9wdGltaXphdGlvbnMgZm9y CisgKiBhbGwgVElEcyBpbiB0aGUgY3VycmVudCBiYXRjaC4gQSBnb29kIGV4YW1wbGUgb2Yg aXMgdGhlIGtpbGxfcHJpb3JfdHVwbGUKKyAqIG9wdGltaXphdGlvbiAtIHdpdGggYmF0Y2hp bmcsIHRoZSBpbmRleCBBTSBtYXkgcmVjZWl2ZSB0aGUgaW5mb3JtYXRpb24KKyAqIHdoaWNo IHR1cGxlcyBhcmUgdG8gYmUga2lsbGVkIHdpdGggYSBkZWxheSAtIHdoZW4gbG9hZGluZyB0 aGUgbmV4dAorICogYmF0Y2gsIHdoZW4gZW5kaW5nL3Jlc3RhcnRpbmcgdGhlIHNjYW4sIGV0 Yy4gVGhlIEFNIG5lZWRzIHRvIGVuc3VyZSBpdAorICogY2FuIHN0aWxsIHByb2Nlc3Mgc3Vj aCBpbmZvcm1hdGlvbiwgdG8ga2VlcCB0aGUgb3B0aW1pemF0aW9uIGVmZmVjdGl2ZS4KKyAq CisgKiBUaGUgQU0gbWF5IGFsc28gbmVlZCB0byBrZWVwIHBpbnMgcmVxdWlyZWQgYnkgdGhl IHdob2xlIGJhdGNoIChub3QganVzdAorICogdGhlIGxhc3QgdHVwbGUpLCBldGMuCisgKgor ICogV2hhdCB0aGlzIG1lYW5zL3JlcXVpcmVzIGlzIHZlcnkgZGVwZW5kZW50IG9uIHRoZSBp bmRleCBBTSwgb2YgY291cnNlLgorICogRm9yIEItVHJlZSAoYW5kIG1vc3Qgb3RoZXIgaW5k ZXggQU1zKSwgYmF0Y2hlcyBzcGFubmluZyBtdWx0aXBsZSBsZWFmCisgKiBwYWdlcyB3b3Vs ZCBiZSBwcm9ibGVtYXRpYy4gU3VjaCBiYXRjaGVzIHdvdWxkIHdvcmsgZm9yIGJhc2ljIGlu ZGV4CisgKiBzY2FucywgYnV0IHRoZSBraWxsX3ByaW9yX3R1cGxlIHdvdWxkIGJlIGFuIGlz c3VlIC0gdGhlIEFNcyBrZWVwIG9ubHkKKyAqIGEgc2luZ2xlIGxlYWYgcGlubmVkLiBXZSdk IGVpdGhlciBuZWVkIHRvIGtlZXAgbXVsdGlwbGUgcGlucywgb3IgYWxsb3cKKyAqIHJlYWRp bmcgb2xkZXIgbGVhZiBwYWdlcyBwYWdlcyAod2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlm aWVkKS4gSW5kZXgKKyAqIG9ubHktc2NhbnMgaXMgY2hhbGxlbmdpbmcgdG9vIC0gd2Uga2Vl cCBJbmRleFR1cGxlIHBvaW50ZXJzIGludG8gdGhlCisgKiBsZWFmIHBhZ2VzLCB3aGljaCBy ZXF1aXJlcyBrZWVwaW5nIHRob3NlIHBpbnMgdG9vLgorICoKKyAqIFRvIHNvbHZlIHRoaXMs IHdlIGdpdmUgdGhlIEFNIHNvbWUgY29udHJvbCBvdmVyIGJhdGNoIGJvdW5kYXJpZXMuIEl0 IGlzCisgKiB1cCB0byB0aGUgaW5kZXggQU0gdG8gcGljayB3aGljaCByYW5nZSBvZiBpbmRl eCBpdGVtcyB0byBsb2FkIGludG8gdGhlCisgKiBiYXRjaCwgYW5kIGhvdyB0byBlbnN1cmUg YWxsIHRoZSBvcHRpbWl6YXRpb25zIGFyZSBwb3NzaWJsZSwga2VlcCBwaW5zLAorICogYW5k IHNvIG9uLiBUaGUgaW5kZXggQU0gbWF5IHVzZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmF0 Y2ggKGluIHRoZQorICogc2NhbiBkZXNjcmlwdG9yLCBtYWludGFpbmVkIGJ5IGluZGV4YW0u YyBjb2RlKSwgYW5kIG1heSBhbHNvIGtlZXAgc29tZQorICogcHJpdmF0ZSBpbmZvcm1hdGlv biAoaW4gdGhlIGV4aXN0aW5nICJvcGFxdWUiIHNjYW4gZmllbGQpLgorICoKKyAqIEZvciBt b3N0IGluZGV4IEFNcyB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gbm90IGxvYWQgYmF0Y2hlcyBz cGFubmluZworICogbXVsdGlwbGUgbGVhZiBwYWdlcy4gVGhpcyBtYXkgaW1wYWN0IHRoZSBl ZmZpY2llbmN5LCBlc3BlY2lhbGx5IGZvcgorICogaW5kZXhlcyB3aXRoIHdpZGUgaW5kZXgg dHVwbGVzLCBhcyBpdCBtZWFucyBiYXRjaGVzIGNsb3NlIHRvIHRoZSBlbmQKKyAqIG9mIHRo ZSBsZWFmIHBhZ2UgbWF5IGJlIHNtYWxsZXIuCisgKgorICogTm90ZTogVGhlcmUgYWxyZWFk eSBpcyBhIHBpcGVsaW5lIGJyZWFrIGZvciBwcmVmZXRjaGluZyAtIGFzIHdlIGFyZQorICog Z2V0dGluZyBjbG9zZXIgdG8gdGhlIGVuZCBvZiBhIGJhdGNoLCB3ZSBjYW4ndCBwcmVmZXRj aCBmdXJ0aGVyIHRoYW4KKyAqIHRoYXQsIGFuZCB0aGUgZWZmZWN0aXZlIHByZWZldGNoIGRp c3RhbmNlIGRyb3BzIHRvIDAuCisgKgorICogVGhlIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRv IG1ha2UgdGhlIGluZGV4IEFNcyBtb3JlIGNvbXBsZXgsIHRvIGtlZXAKKyAqIG1vcmUgbGVh ZiBwYWdlcyBwaW5uZWQsIGV0Yy4gVGhlIGN1cnJlbnQgbW9kZWwgZG9lcyBub3QgcHJvaGli aXQgdGhlCisgKiBpbmRleCBBTXMgZnJvbSBpbXBsZW1lbnRpbmcgdGhhdCAtIGl0J3MgZW50 aXJlbHkgcG9zc2libGUgdG8ga2VlcCB0aGUKKyAqIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24g aW4gdGhlICJvcGFxdWUiIHN0cnVjdHVyZSAoc2F5LCBsaXN0IG9mIHBpbm5lZAorICogcGFn ZXMsIGFuZCBvdGhlciBuZWNlc3NhcnkgZGV0YWlscykuCisgKgorICogQnV0IHRoYXQgZG9l cyBub3Qgc2VlbSBsaWtlIGEgZ29vZCB0cmFkZSBvZmYsIGFzIGl0J3Mgc3ViamVjdCB0bwor ICogImRpbWluaXNoaW5nIHJldHVybnMiIC0gd2Ugc2VlIHNpZ25pZmljYW50IGdhaW5zIGlu aXRpYWxseSAod2l0aCBldmVuCisgKiBzbWFsbCBiYXRjaGVzIC8gcHJlZmV0Y2ggZGlzdGFu Y2UpLCBhbmQgYXMgdGhlIGJhdGNoIGdyb3dzIHRoZSBnYWlucworICogZ2V0IHNtYWxsZXIg YW5kIHNtYWxsZXIuIEl0IGRvZXMgbm90IHNlZW0gd29ydGggdGhlIGNvbXBsZXhpdHkgb2YK KyAqIHBpbm5pbmcgbW9yZSBwYWdlcyBldGMuIGF0IGxlYXN0IGZvciB0aGUgZmlyc3QgdmVy c2lvbi4KKyAqCisgKiBUbyBkZWFsIHdpdGggdGhlICJwcmVmZXRjaCBwaXBlbGluZSBicmVh ayIsIHRoYXQgY291bGQgYmUgYWRkcmVzc2VkIGJ5CisgKiBhbGxvd2luZyBtdWx0aXBsZSBp bi1mbGlndCBiYXRjaGVzIC0gZS5nLiB3aXRoIHByZWZldGNoIGRpc3RhbmNlIDY0CisgKiB3 ZSBtaWdodCBoYXZlIHRocmVlIGJhdGNoZXMgb2YgMzIgaXRlbXMgZWFjaCwgdG8gcHJlZmV0 Y2ggZmFyIGFoZWFkLgorICogQnV0IHRoYXQncyBub3Qgd2hhdCB0aGlzIHBhdGNoIGRvZXMg eWV0LgorICoKKyAqCisgKiBiYXRjaCA9IHNsaWRpbmcgd2luZG93CisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgorICogQSBnb29kIHdheSB0byB2aXN1YWxpemUgYSBiYXRjaCBp cyBhIHNsaWRpbmcgd2luZG93IG92ZXIgdGhlIGFycmF5CisgKiBvZiBpdGVtcyBvbiBhIGxl YWYgcGFnZS4gSW4gdGhlIHNpbXBsZXN0IGV4YW1wbGUgKGZvcndhcmQgc2NhbiB3aXRoIG5v CisgKiBjaGFuZ2VzIG9mIGRpcmVjdGlvbiksIHdlIHNsaWNlIHRoZSBhcnJheSBpbnRvIHNt YWxsZXIgY2h1bmtzLCBhbmQKKyAqIHRoZW4gcHJvY2VzcyBlYWNoIG9mIHRob3NlIGNodW5r cy4KKyAqCisgKiBUaGUgYmF0Y2ggc2l6ZSBpcyBhZGFwdGl2ZSAtIGl0IHN0YXJ0cyBzbWFs bCAob25seSA4IGVsZW1lbnRzKSBhbmQKKyAqIGluY3JlYXNlcyBhcyB3ZSByZWFkIG1vcmUg YmF0Y2hlcyAodXAgdG8gNjQgZWxlbWVudHMpLiBXZSBkb24ndCB3YW50CisgKiB0byByZWdy ZXNzIGNhc2VzIHRoYXQgb25seSBuZWVkIGEgc2luZ2xlIGl0ZW0gKGUuZy4gTElNSVQgMSBx dWVyaWVzKSwKKyAqIGFuZCBsb2FkaW5nL2NvcHlpbmcgYSBsb3Qgb2YgZGF0YSBtaWdodCBj YXVzZSB0aGF0LiBTbyB3ZSBzdGFydCBzbWFsbAorICogYW5kIGluY3JlYXNlIHRoZSBzaXpl IC0gdGhhdCBzdGlsbCBpbXByb3ZlcyBjYXNlcyByZWFkaW5nIGEgbG90IG9mCisgKiBkYXRh IGZyb20gdGhlIGluZGV4LCB3aXRob3V0IGh1cnRpbmcgc21hbGwgcXVlcmllcy4KKyAqCisg KiBOb3RlOiBUaGlzIGdyYWR1YWwgcmFtcCB1cCBpcyBmb3IgYmF0Y2ggc2l6ZSwgaW5kZXBl bmRlbnQgb2Ygd2hhdCB3ZQorICogZG8gZm9yIHByZWZldGNoLiBUaGUgcHJlZmV0Y2ggZGlz dGFuY2UgaXMgZ3JhZHVhbGx5IGluY3JlYXNlZCB0b28sIGJ1dAorICogaXQncyBpbmRlcGVu ZGVudCAvIG9ydGhvZ29uYWwgdG8gdGhlIGJhdGNoIHNpemUuIFRoZSBiYXRjaCBzaXplIGxp bWl0cworICogaG93IGZhciBhaGVhZCB3ZSBjYW4gcHJlZmV0Y2gsIG9mIGNvdXJzZS4KKyAq CisgKiBOb3RlOiBUaGUgY3VycmVudCBsaW1pdHMgb24gYmF0Y2ggc2l6ZSAoaW5pdGlhbCA4 LCBtYXhpbXVtIDY0KSBhcmUKKyAqIHF1aXRlIGFyYml0cmFyeSwgaXQganVzdCBzZWVtZWQg dGhvc2UgdmFsdWVzIGFyZSBzYW5lLiBXZSBjb3VsZCBhZGp1c3QKKyAqIHRoZSBpbml0aWFs IHNpemUsIGJ1dCBJIGRvbid0IHRoaW5rIGl0J2QgbWFrZSBhIGZ1bmRhbWVudGFsIGRpZmZl cmVuY2UuCisgKiBHcm93aW5nIHRoZSBiYXRjaGVzIGZhc3Rlci9zbG93ZXIgaGFzIGJpZ2dl ciBpbXBhY3QuCisgKgorICogVGhlIG1heGltdW0gYmF0Y2ggc2l6ZSBkb2VzIG5vdCBtYXR0 ZXIgbXVjaCAtIGl0J3MgdHJ1ZSBhIGJ0cmVlIGluZGV4IGNhbgorICogaGF2ZSB1cCB0byB+ MTMwMCBpdGVtcyBwZXIgOEsgbGVhZiBwYWdlLCBidXQgaW4gbW9zdCBjYXNlcyB0aGUgYWN0 dWFsCisgKiBudW1iZXIgaXMgbG93ZXIsIHBlcmhhcHMgfjMwMC4gVGhhdCdzIG5vdCB0aGF0 IGZhciBmcm9tIDY0LgorICoKKyAqIEVhY2ggYmF0Y2ggaGFzIGEgZmlyc3RJbmRleC9sYXN0 SW5kZXggdG8gdHJhY2sgd2hpY2ggcGFydCBvZiB0aGUgbGVhZgorICogcGFnZSBpdCBjdXJy ZW50bHkgcmVwcmVzZW50cy4KKyAqCisgKgorICoga2lsbF9wcmlvcl90dXBsZXMKKyAqIC0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogSWYgd2UgZGVjaWRlIGEgdHVwbGUgY2FuIGJlIGtp bGxlZCwgdGhlIGJhdGNoIGl0ZW0gaXMgbWFya2VkIGFjY29yZGluZ2x5LAorICogYW5kIHRo ZSBmbGFnIGlzIHJlc2V0IHRvIGZhbHNlIChzbyB0aGF0IHRoZSBpbmRleCBBTSBkb2VzIG5v dCBkbyBzb21ldGhpbmcKKyAqIHNpbGx5IHRvIGEgcmFuZG9tIHR1cGxlIGl0IHRoaW5rcyBp cyAiY3VycmVudCIpLgorICoKKyAqIFRoZW4gdGhlIG5leHQgdGltZSB0aGUgQU0gZGVjaWRl cyBpdCdzIHRpbWUgdG8ga2lsbCB0dXBsZXMsIHRoZSBBTSBuZWVkcworICogdG8gbG9vayBh dCB0aGUgYmF0Y2ggYW5kIGNvbnNpZGVyIHRoZSB0dXBsZXMgbWFya2VkIHRvIGJlIGtpbGxl ZC4gQi1UcmVlCisgKiBzaW1wbHkgYWRkcyB0aG9zZSBUSURzIHRvIHRoZSByZWd1bGFyICJr aWxsSXRlbXMiIGFycmF5LgorICoKKyAqCisgKiBtYXJrL3Jlc3RvcmUKKyAqIC0tLS0tLS0t LS0tLQorICoKKyAqIFdpdGggYmF0Y2hpbmcsIHRoZSBpbmRleCBBTSBkb2VzIG5vdCBrbm93 IHRoZSB0aGUgImN1cnJlbnQiIHBvc2l0aW9uIG9uCisgKiB0aGUgbGVhZiBwYWdlIC0gd2Ug ZG9uJ3QgcHJvcGFnYXRlIHRoaXMgdG8gdGhlIGluZGV4IEFNIHdoaWxlIHdhbGtpbmcKKyAq IGl0ZW1zIGluIHRoZSBiYXRjaC4gVG8gbWFrZSBhbW1hcmtwb3MoKSB3b3JrLCB0aGUgaW5k ZXggQU0gaGFzIHRvIGNoZWNrCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYmF0 Y2gsIGFuZCB0cmFuc2xhdGUgaXQgdG8gdGhlIHByb3BlciBwYWdlCisgKiBwb3NpdGlvbiwg dXNpbmcgdGhlIHByaXZhdGUgaW5mb3JtYXRpb24gKGFib3V0IGl0ZW1zIGluIHRoZSBiYXRj aCkuCisgKgorICogWFhYIFRoaXMgbmVlZHMgbW9yZSB3b3JrLCBJIGRvbid0IHF1aXRlIGxp a2UgaG93IHRoZSB0d28gbGF5ZXJzIGludGVyYWN0LAorICogaXQgc2VlbXMgcXVpdGUgd3Jv bmcgdG8gbG9vayBhdCB0aGUgYmF0Y2ggaW5mbyBkaXJlY3RseS4KKyAqLworCisvKgorICog Q29tcHJlaGVuc2l2ZSBjaGVjayBvZiB2YXJpb3VzIGludmFyaWFudHMgb24gdGhlIGluZGV4 IGJhdGNoLiBNYWtlcyBzdXJlCisgKiB0aGUgaW5kZXhlcyBhcmUgc2V0IGFzIGV4cGVjdGVk LCB0aGUgYnVmZmVyIHNpemUgaXMgd2l0aGluIGxpbWl0cywgYW5kCisgKiBzbyBvbi4KKyAq Lworc3RhdGljIHZvaWQKK0Fzc2VydENoZWNrQmF0Y2hJbmZvKEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJLyogYWxsIHRoZSBhcnJheXMg bmVlZCB0byBiZSBhbGxvY2F0ZWQgKi8KKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5oZWFw dGlkcyAhPSBOVUxMKSAmJgorCQkgICAoc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zICE9 IE5VTEwpICYmCisJCSAgIChzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGEgIT0gTlVMTCkp OworCisJLyogaWYgSW5kZXhUdXBsZXMgZXhwZWN0ZWQsIHNob3VsZCBiZSBhbGxvY2F0ZWQg dG9vICovCisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVwICYmIChzY2FuLT54c19iYXRj aC0+aXR1cHMgPT0gTlVMTCkpKTsKKworCS8qIFZhcmlvdXMgY2hlY2sgb24gYmF0Y2ggc2l6 ZXMgKi8KKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5pbml0U2l6ZSA+PSAwKSAmJgorCQkg ICAoc2Nhbi0+eHNfYmF0Y2gtPmluaXRTaXplIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6 ZSkgJiYKKwkJICAgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSA8PSBzY2FuLT54c19iYXRj aC0+bWF4U2l6ZSkgJiYKKwkJICAgKHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplIDw9IDEwMjQp KTsJLyogYXJiaXRyYXJ5IGxpbWl0ICovCisKKwkvKiBJcyB0aGUgbnVtYmVyIG9mIGluIHRo ZSBiYXRjaCBUSURzIGluIGEgdmFsaWQgcmFuZ2U/ICovCisJQXNzZXJ0KChzY2FuLT54c19i YXRjaC0+bmhlYXB0aWRzID49IDApICYmCisJCSAgIChzY2FuLT54c19iYXRjaC0+bmhlYXB0 aWRzIDw9IHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplKSk7CisKKwkvKgorCSAqIFRoZSBjdXJy ZW50IGl0ZW0gbXVzdCBiZSBiZXR3ZWVuIC0xIGFuZCBuaGVhcHRpZHMuIFRob3NlIHR3byBl eHRyZW1lCisJICogdmFsdWVzIGFyZSBzdGFydGluZyBwb2ludHMgZm9yIGZvcndhcmQvYmFj a3dhcmQgc2NhbnMuCisJICovCisJQXNzZXJ0KChzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 ID49IC0xKSAmJgorCQkgICAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA8PSBzY2FuLT54 c19iYXRjaC0+bmhlYXB0aWRzKSk7CisKKwkvKiBjaGVjayBwcmVmZXRjaCBkYXRhICovCisJ QXNzZXJ0KChzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hUYXJnZXQgPj0gMCkgJiYKKwkJICAg KHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaFRhcmdldCA8PSBzY2FuLT54c19iYXRjaC0+cHJl ZmV0Y2hNYXhpbXVtKSk7CisKKwlBc3NlcnQoKHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaElu ZGV4ID49IC0xKSAmJgorCQkgICAoc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPD0g c2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcykpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBz Y2FuLT54c19iYXRjaC0+bmhlYXB0aWRzOyBpKyspCisJCUFzc2VydChJdGVtUG9pbnRlcklz VmFsaWQoJnNjYW4tPnhzX2JhdGNoLT5oZWFwdGlkc1tpXSkpOworI2VuZGlmCit9CisKKy8q IElzIHRoZSBiYXRjaCBmdWxsIChUSURzIHVwIHRvIGNhcGFjaXR5KT8gKi8KKyNkZWZpbmUJ SU5ERVhfQkFUQ0hfSVNfRlVMTChzY2FuKQlcCisJKChzY2FuKS0+eHNfYmF0Y2gtPm5oZWFw dGlkcyA9PSAoc2NhbiktPnhzX2JhdGNoLT5jdXJyU2l6ZSkKKworLyogSXMgdGhlIGJhdGNo IGVtcHR5IChubyBUSURzKT8gKi8KKyNkZWZpbmUJSU5ERVhfQkFUQ0hfSVNfRU1QVFkoc2Nh bikJXAorCSgoc2NhbiktPnhzX2JhdGNoLT5uaGVhcHRpZHMgPT0gMCkKKworLyoKKyAqIERp ZCB3ZSBwcm9jZXNzIGFsbCBpdGVtcz8gRm9yIGZvcndhcmQgc2NhbiBpdCBtZWFucyB0aGUg aW5kZXggcG9pbnRzIHRvIHRoZQorICogbGFzdCBpdGVtLCBmb3IgYmFja3dhcmQgc2NhbnMg aXQgaGFzIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBvbmUuCisgKgorICogVGhpcyBkb2VzIG5v dCBjb3ZlciBlbXB0eSBiYXRjaGVzIHByb3Blcmx5LCBiZWNhdXNlIG9mIGJhY2t3YXJkIHNj YW5zLgorICovCisjZGVmaW5lCUlOREVYX0JBVENIX0lTX1BST0NFU1NFRChzY2FuLCBkaXJl Y3Rpb24pCVwKKwkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pID8gXAorCQko KHNjYW4pLT54c19iYXRjaC0+bmhlYXB0aWRzID09ICgoc2NhbiktPnhzX2JhdGNoLT5jdXJy SW5kZXggKyAxKSkgOiBcCisJCSgoc2NhbiktPnhzX2JhdGNoLT5jdXJySW5kZXggPT0gMCkp CisKKy8qIERvZXMgdGhlIGJhdGNoIGl0ZW1zIGluIHRoZSByZXF1ZXN0ZWQgZGlyZWN0aW9u PyAqLworI2RlZmluZSBJTkRFWF9CQVRDSF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSBc CisJKCFJTkRFWF9CQVRDSF9JU19FTVBUWShzY2FuKSAmJiAhSU5ERVhfQkFUQ0hfSVNfUFJP Q0VTU0VEKHNjYW4sIGRpcmVjdGlvbikpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJ CWluZGV4X2JhdGNoX2dldG5leHQgLSBnZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9t IGEgc2NhbgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlYWQgYXQg bGVhc3Qgc29tZSBUSURzIGludG8gdGhlIGJhdGNoLAorICogb3IgZmFsc2UgaWYgdGhlcmUg YXJlIG5vIG1vcmUgVElEcyBpbiB0aGUgc2Nhbi4gVGhlIHhzX2hlYXB0aWRzIGFuZAorICog eHNfbmhlYXB0aWRzIGZpZWxkcyBjb250YWluIHRoZSBUSURTIGFuZCB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzLgorICoKKyAqIFhYWCBUaGlzIG9ubHkgbG9hZHMgdGhlIFRJRHMgYW5kIHJl c2V0cyB0aGUgdmFyaW91cyBiYXRjaCBmaWVsZHMgdG8KKyAqIGZyZXNoIHN0YXRlLiBJdCBk b2VzIG5vdCBzZXQgeHNfaGVhcHRpZC94c19pdHVwL3hzX2hpdHVwLCB0aGF0J3MgdGhlCisg KiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZm9sbG93aW5nIGluZGV4X2JhdGNoX2dldG5leHRf dGlkKCkgY2FsbHMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitp bmRleF9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCit7CisJYm9vbAkJZm91bmQ7CisKKwlTQ0FOX0NIRUNLUzsKKwlDSEVDS19T Q0FOX1BST0NFRFVSRShhbWdldGJhdGNoKTsKKworCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2Vy dCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KKwlBc3NlcnQo VHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCisJLyogY29tcHJlaGVuc2l2 ZSBjaGVja3Mgb2YgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJbmZvKHNj YW4pOworCisJLyoKKwkgKiBXZSBuZXZlciByZWFkIGEgbmV3IGJhdGNoIGJlZm9yZSB3ZSBy dW4gb3V0IG9mIGl0ZW1zIGluIHRoZSBjdXJyZW50CisJICogb25lLiBUaGUgY3VycmVudCBi YXRjaCBoYXMgdG8gYmUgZWl0aGVyIGVtcHR5IG9yIHdlIHJhbiBvdXQgb2YgaXRlbXMKKwkg KiAoaW4gdGhlIGdpdmVuIGRpcmVjdGlvbikuCisJICovCisJQXNzZXJ0KCFJTkRFWF9CQVRD SF9IQVNfSVRFTVMoc2NhbiwgZGlyZWN0aW9uKSk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBj dXJyZW50L3ByZWZldGNoIHBvc2l0aW9ucyBpbiB0aGUgYmF0Y2guCisJICoKKwkgKiBYWFgg RG9uZSBiZWZvcmUgY2FsbGluZyBhbWdldGJhdGNoKCksIHNvIHRoYXQgaXQgc2VlcyB0aGUg aW5kZXggYXMKKwkgKiBpbnZhbGlkLCBiYXRjaCBhcyBlbXB0eSwgYW5kIGNhbiBhZGQgaXRl bXMuCisJICoKKwkgKiBYWFggSW50ZW50aW9uYWxseSBkb2VzIG5vdCByZXNldCB0aGUgbmhl YXB0aWRzLCBiZWNhdXNlIHRoZSBBTSBkb2VzCisJICogcmVseSBvbiB0aGF0IHdoZW4gcHJv Y2Vzc2luZyBraWxsZWQgdHVwbGVzLiBNYXliZSBzdG9yZSB0aGUga2lsbGVkCisJICogdHVw bGVzIGRpZmZlcmVudGx5PworCSAqLworCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSAt MTsKKwlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IDA7CisJc2Nhbi0+eHNfYmF0 Y2gtPm5oZWFwdGlkcyA9IDA7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBtZW1vcnkgY29udGV4 dCB3aXRoIGFsbCBwZXItYmF0Y2ggZGF0YSwgYWxsb2NhdGVkIGJ5IHRoZSBBTS4KKwkgKiBU aGlzIG1pZ2h0IGJlIHR1cGxlcywgb3IgYW55dGhpbmcgZWxzZSB0aGUgQU0gbmVlZHMuCisJ ICoKKwkgKiBYWFggTWFrZSBzdXJlIHRvIHJlc2V0IHRoZSB0dXBsZXMsIGJlY2F1c2UgdGhl IEFNIG1heSBkbyBzb21ldGhpbmcgd2l0aAorCSAqIHRoZW0gbGF0ZXIgKGUuZy4gcmVsZWFz ZSB0aGVtLCBhcyBnZXROZXh0TmVhcmVzdCBpbiBnaXN0KSwgYnV0IHdlIG1heQorCSAqIHJl bGVhc2UgdGhlbSBieSB0aGUgTWVtb3J5Q29udGV4dFJlc2V0KCkgY2FsbC4KKwkgKgorCSAq IFRoaXMgbWlnaHQgYnJlYWsgdGhlIEFNIGlmIGl0IHJlbGllcyBvbiB0aGVtIHBvaW50aW5n IHRvIHRoZSBsYXN0CisJICogdHVwbGUsIGJ1dCBhdCBsZWFzdCBpdCBoYXMgdGhlIGNoYW5j ZSB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYnkgY2hlY2tpbmcKKwkgKiBpZiB0aGUgcG9pbnRl ciBpcyBOVUxMLgorCSAqLworCXNjYW4tPnhzX2l0dXAgPSBOVUxMOworCXNjYW4tPnhzX2hp dHVwID0gTlVMTDsKKworCU1lbW9yeUNvbnRleHRSZXNldChzY2FuLT54c19iYXRjaC0+Y3R4 KTsKKworCS8qCisJICogVGhlIEFNJ3MgYW1nZXRiYXRjaCBwcm9jIGxvYWRzIGEgY2h1bmsg b2YgVElEcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzLAorCSAqIGFuZCBwdXRzIHRoZSBUSURz IGludG8gc2Nhbi0+eHNfYmF0Y2gtPmhlYXB0aWRzLiAgSXQgc2hvdWxkIGFsc28gc2V0CisJ ICogc2Nhbi0+eHNfcmVjaGVjayBhbmQgcG9zc2libHkKKwkgKiBzY2FuLT54c19iYXRjaC0+ aXR1cHMvc2Nhbi0+eHNfYmF0Y2gtPmhpdHVwcywgdGhvdWdoIHdlIHBheSBubworCSAqIGF0 dGVudGlvbiB0byB0aG9zZSBmaWVsZHMgaGVyZS4KKwkgKgorCSAqIEZJWE1FIEF0IHRoZSBt b21lbnQgdGhpcyBkb2VzIG5vdGhpbmcgd2l0aCBoaXR1cC4gTmVlZHMgdG8gYmUgZml4ZWQ/ CisJICovCisJZm91bmQgPSBzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRi YXRjaChzY2FuLCBkaXJlY3Rpb24pOworCisJLyogUmVzZXQga2lsbCBmbGFnIGltbWVkaWF0 ZWx5IGZvciBzYWZldHkgKi8KKwlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7CisJ c2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCisJLyogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoIWZvdW5kKQorCXsKKwkJLyog cmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNz ZXMgKi8KKwkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwkJCXRhYmxlX2luZGV4X2ZldGNo X3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CS8qIFdlIHNob3VsZCBoYXZlIGEgbm9uLWVtcHR5IGJhdGNoIHdpdGggaXRlbXMuICovCisJ QXNzZXJ0KElOREVYX0JBVENIX0hBU19JVEVNUyhzY2FuLCBkaXJlY3Rpb24pKTsKKworCXBn c3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkcyk7CisKKwkvKgorCSAqIFNldCB0aGUgcHJlZmV0Y2ggaW5kZXgg dG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxvYWRlZCBiYXRjaCAod2UgZXhwZWN0CisJICog dGhlIGluZGV4IEFNIHRvIHNldCB0aGF0KS4KKwkgKgorCSAqIEZJWE1FIE1heWJlIHNldCB0 aGUgY3VyckluZGV4IGhlcmUsIG5vdCBpbiB0aGUgaW5kZXggQU0uIEl0IHNlZW1zIG11Y2gK KwkgKiBtb3JlIGxpa2UgaW5kZXhhbS5jIHJlc3BvbnNpYmlsaXR5IHJhdGhlciB0aGFuIHNv bWV0aGluZyBldmVyeSBpbmRleCBBTQorCSAqIHNob3VsZCBiZSBkb2luZyAoaW4gX2J0X2Zp cnN0X2JhdGNoIGV0Yy4pLgorCSAqCisJICogRklYTUUgSXQncyBhIGJpdCB1bmNsZWFyIHdo byAoaW5kZXhhbS5jIG9yIHRoZSBpbmRleCBBTSkgaXMgcmVzcG9uc2libGUKKwkgKiBmb3Ig c2V0dGluZyB3aGljaCBmaWVsZHMuIFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbi4KKwkgKi8K KwlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IHNjYW4tPnhzX2JhdGNoLT5jdXJy SW5kZXg7CisKKwkvKgorCSAqIFRyeSB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYmF0 Y2guIEludGVudGlvbmFsbHkgZG9uZSBhZnRlciB0aGUgQU0KKwkgKiBjYWxsLCBzbyB0aGF0 IHRoZSBuZXcgdmFsdWUgYXBwbGllcyB0byB0aGUgbmV4dCBiYXRjaC4gT3RoZXJ3aXNlIHdl CisJICogd291bGQgYWx3YXlzIHNraXAgdGhlIGluaXRpYWwgYmF0Y2ggc2l6ZS4KKwkgKi8K KwlzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgPSBNaW4oc2Nhbi0+eHNfYmF0Y2gtPmN1cnJT aXplICsgMSwKKwkJCQkJCQkJICAgc2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUpOworCisJLyog Y29tcHJlaGVuc2l2ZSBjaGVja3Mgb2YgYmF0Y2hpbmcgaW5mbyAqLworCUFzc2VydENoZWNr QmF0Y2hJbmZvKHNjYW4pOworCisJLyogUmV0dXJuIHRoZSBiYXRjaCBvZiBUSURzIHdlIGZv dW5kLiAqLworCXJldHVybiB0cnVlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aW5kZXhfZ2V0bmV4dF9iYXRjaF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGN1 cnJlbnQgYmF0Y2gKKyAqCisgKiBTYW1lIGNhbGxpbmcgY29udmVudGlvbiBhcyBpbmRleF9n ZXRuZXh0X3RpZCgpLCBleGNlcHQgdGhhdCBOVUxMIG1lYW5zCisgKiBubyBtb3JlIGl0ZW1z IGluIHRoZSBjdXJyZW50IGJhdGNoLCB0aGVyZSBtYXkgYmUgbW9yZSBiYXRjaGVzLgorICoK KyAqIFhYWCBUaGlzIG9ubHkgc2V0cyB4c19oZWFwdGlkIGFuZCB4c19pdHVwIChpZiByZXF1 ZXN0ZWQpLiBOb3Qgc3VyZSBpZgorICogd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgd2l0aCB4 c19oaXR1cC4KKyAqCisgKiBGSVhNRSBTaG91bGQgdGhpcyBzZXQgeHNfaGl0dXA/CisgKiAt LS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBJdGVtUG9pbnRlcgoraW5kZXhfYmF0Y2hf Z2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bikKK3sKKwkvKiBjb21wcmVoZW5zaXZlIGNoZWNrcyBvZiBiYXRjaGluZyBpbmZvICovCisJ QXNzZXJ0Q2hlY2tCYXRjaEluZm8oc2Nhbik7CisKKwkvKgorCSAqIEJhaWwgb3V0IGlmIGhl IGJhdGNoIGRvZXMgbm90IGhhdmUgbW9yZSBpdGVtcyBpbiB0aGUgcmVxdWVzdGVkIGRpcmVj dGlvCisJICogKGVpdGhlciBlbXB0eSBvciBldmVydGhpbmcgcHJvY2Vzc2VkKS4KKwkgKi8K KwlpZiAoIUlOREVYX0JBVENIX0hBU19JVEVNUyhzY2FuLCBkaXJlY3Rpb24pKQorCQlyZXR1 cm4gTlVMTDsKKworCS8qCisJICogQWR2YW5jZSB0byB0aGUgbmV4dCBiYXRjaCBpdGVtIC0g d2Uga25vdyBpdCdzIG5vdCBlbXB0eSBhbmQgdGhlcmUgYXJlCisJICogaXRlbXMgdG8gcHJv Y2Vzcywgc28gdGhpcyBpcyB2YWxpZC4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXJlY3Rpb24pKQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4Kys7CisJZWxz ZQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4LS07CisKKwkvKgorCSAqIE5leHQgVElE IGZyb20gdGhlIGJhdGNoLCBvcHRpb25hbGx5IGFsc28gdGhlIEluZGV4VHVwbGUvSGVhcFR1 cGxlLgorCSAqCisJICogWFhYIE5vdCBzdXJlIGhvdyB0byBkZWNpZGUgd2hpY2ggb2YgdGhl IHR1cGxlcyB0byBzZXQsIHNlZW1zIGVhc2llciB0bworCSAqIGp1c3Qgc2V0IGJvdGgsIG9u ZSBvZiB0aGVtIHdpbGwgYmUgTlVMTC4KKwkgKgorCSAqIFhYWCBEbyB3ZSBuZWVkIHRvIHJl c2V0IHRoZSBpdHVwcy9odHVwcyBhcnJheSBiZXR3ZWVuIGJhdGNoZXM/IERvZXNuJ3QKKwkg KiBzZWVtIG5lY2Vzc2FyeSwgYnV0IG1heWJlIHdlIGNvdWxkIGdldCBib2d1cyBkYXRhPwor CSAqLworCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuLT54c19iYXRjaC0+aGVhcHRpZHNbc2Nh bi0+eHNfYmF0Y2gtPmN1cnJJbmRleF07CisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7 CisJCXNjYW4tPnhzX2l0dXAgPSBzY2FuLT54c19iYXRjaC0+aXR1cHNbc2Nhbi0+eHNfYmF0 Y2gtPmN1cnJJbmRleF07CisJCXNjYW4tPnhzX2hpdHVwID0gc2Nhbi0+eHNfYmF0Y2gtPmh0 dXBzW3NjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXhdOworCX0KKworCXNjYW4tPnhzX3JlY2hl Y2sgPSBzY2FuLT54c19iYXRjaC0+cmVjaGVja1tzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 XTsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG9yZGVyLWJ5IGNsYXVzZXMsIHBvaW50IHRv IHRoZSBhcHByb3ByaWF0ZSBjaHVuayBpbiB0aGUKKwkgKiBhcnJheXMuCisJICovCisJaWYg KHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQorCXsKKwkJaW50CQkJaWR4ID0gc2Nhbi0+ bnVtYmVyT2ZPcmRlckJ5cyAqIHNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXg7CisKKwkJc2Nh bi0+eHNfb3JkZXJieXZhbHMgPSAmc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnl2YWxzW2lkeF07 CisJCXNjYW4tPnhzX29yZGVyYnludWxscyA9ICZzY2FuLT54c19iYXRjaC0+b3JkZXJieW51 bGxzW2lkeF07CisJfQorCisJLyogY29tcHJlaGVuc2l2ZSBjaGVja3Mgb2YgYmF0Y2hpbmcg aW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJbmZvKHNjYW4pOworCisJcmV0dXJuICZzY2Fu LT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0 Y2hfcHJlZmV0Y2ggLSBwcmVmZXRjaCBwYWdlcyBmb3IgVElEcyBpbiBjdXJyZW50IGJhdGNo CisgKgorICogVGhlIHByZWZldGNoIGRpc3RhbmNlIGlzIGluY3JlYXNlZCBncmFkdWFsbHks IHNpbWlsYXIgdG8gd2hhdCB3ZSBkbyBmb3IKKyAqIGJpdG1hcCBoZWFwIHNjYW5zLiBXZSBz dGFydCBmcm9tIGRpc3RhbmNlIDAgKG5vIHByZWZldGNoKSwgYW5kIHRoZW4gaW4gZWFjaAor ICogaXRlcmF0aW9uIGluY3JlbWVudCB0aGUgZGlzdGFuY2UgdXAgdG8gcHJlZmV0Y2hNYXhp bXVtLgorICoKKyAqIFRoZSBwcmVmZXRjaCBkaXN0YW5jZSBpcyByZXNldCAodG8gMCkgb25s eSBvbiByZXNjYW5zLCBub3QgYmV0d2VlbiBiYXRjaGVzLgorICoKKyAqIEl0J3MgcG9zc2li bGUgdG8gcHJvdmlkZSBhbiBpbmRleF9wcmVmZXRjaF9jYWxsYmFjayBjYWxsYmFjaywgdG8g YWZmZWN0CisgKiB3aGljaCBpdGVtcyBuZWVkIHRvIGJlIHByZWZldGNoZWQuIFdpdGggcHJl ZmV0Y2hfY2FsbGJhY2s9TlVMTCwgYWxsCisgKiBpdGVtcyBhcmUgcHJlZmV0Y2hlZC4gV2l0 aCB0aGUgY2FsbGJhY2sgcHJvdmlkZWQsIHRoZSBpdGVtIGlzIHByZWZldGNoZWQKKyAqIGlm ZiB0aGUgY2FsbGJhY2sgYW5kIHJldHVybnMgdHJ1ZS4KKyAqCisgKiBUaGUgImFyZyIgYXJn dW1lbnQgaXMgdXNlZCB0byBwYXNzIGEgc3RhdGUgZm9yIHRoZSBwbGFuIG5vZGUgaW52b2tp bmcgdGhlCisgKiBmdW5jdGlvbiwgYW5kIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjYWxsYmFj ay4gVGhpcyBtZWFucyB0aGUgY2FsbGJhY2sgaXMKKyAqIHNwZWNpZmljIHRvIHRoZSBwbGFu IHN0YXRlLgorICoKKyAqIFhYWCB0aGUgcHJlZmV0Y2hNYXhpbXVtIGRlcGVuZHMgb24gZWZm ZWN0aXZlX2lvX2NvbmN1cnJlbmN5LCBhbmQgYWxzbyBvbgorICogdGFibGVzcGFjZSBvcHRp b25zLgorICoKKyAqIFhYWCBGb3IgYWNjZXNzZXMgdGhhdCBjaGFuZ2Ugc2NhbiBkaXJlY3Rp b24sIHdlIG1heSBkbyBhIGxvdCBvZiB1bm5lY2Vzc2FyeQorICogcHJlZmV0Y2hpbmcgKGJl Y2F1c2Ugd2Ugd2lsbCByZS1pc3N1ZSBwcmVmZXRjaGVzIGZvciB3aGF0IHdlIHJlY2VudGx5 IHJlYWQpLgorICogSSdtIG5vdCBzdXJlIGlmIHRoZXJlJ3MgYSBzaW1wbGUgd2F5IHRvIHRy YWNrIHdoYXQgd2FzIGFscmVhZHkgcHJlZmV0Y2hlZC4KKyAqIE1heWJlIHdlIGNvdWxkIGNv dW50IGhvdyBmYXIgd2UgZ290IChpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24pLCBrZWVwIHRo YXQKKyAqIGFzIGEgd2F0ZXJtYXJrLCBhbmQgbmV2ZXIgcHJlZmV0Y2ggYWdhaW4gYmVsb3cg aXQuCisgKgorICogWFhYIE1heWJlIHdyYXAgdGhpcyBpbiBpZmRlZiBVU0VfUFJFRkVUQ0g/ CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9iYXRjaF9w cmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQor eworCWludAkJCXByZWZldGNoU3RhcnQsCisJCQkJcHJlZmV0Y2hFbmQ7CisKKwlJbmRleFBy ZWZldGNoQ2FsbGJhY2sJcHJlZmV0Y2hfY2FsbGJhY2sgPSBzY2FuLT54c19iYXRjaC0+cHJl ZmV0Y2hDYWxsYmFjazsKKwl2b2lkICphcmcgPSBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hB cmd1bWVudDsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJ eworCQkvKiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQgdG8gcHJlZmV0Y2g/ICovCisJCXByZWZl dGNoU3RhcnQgPSBNYXgoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCwKKwkJCQkJCQlzY2Fu LT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCk7CisKKwkJLyoKKwkJICogV2hlcmUgc2hvdWxk IHdlIHN0b3AgcHJlZmV0Y2hpbmc/IHRoaXMgaXMgdGhlIGZpcnN0IGl0ZW0gdGhhdCB3ZSBk bworCQkgKiBOT1QgcHJlZmV0Y2gsIGkuZS4gaXQgY2FuIGJlIHRoZSBmaXJzdCBpdGVtIGFm dGVyIHRoZSBiYXRjaC4KKwkJICovCisJCXByZWZldGNoRW5kID0gTWluKChzY2FuLT54c19i YXRjaC0+Y3VyckluZGV4ICsgMSkgKyBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hUYXJnZXQs CisJCQkJCQkgIHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMpOworCisJCS8qIEZJWE1FIHNo b3VsZCBjYWxjdWxhdGUgaW4gYSB3YXkgdG8gbWFrZSB0aGlzIHVubmVjZXNzYXJ5ICovCisJ CXByZWZldGNoU3RhcnQgPSBNYXgoTWluKHByZWZldGNoU3RhcnQsIHNjYW4tPnhzX2JhdGNo LT5uaGVhcHRpZHMgLSAxKSwgMCk7CisJCXByZWZldGNoRW5kID0gTWF4KE1pbihwcmVmZXRj aEVuZCwgc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyAtIDEpLCAwKTsKKworCQkvKiByZW1l bWJlciBob3cgZmFyIHdlIHByZWZldGNoZWQgLyB3aGVyZSB0byBzdGFydCB0aGUgbmV4dCBw cmVmZXRjaCAqLworCQlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9IHByZWZldGNo RW5kOworCX0KKwllbHNlCisJeworCQkvKiBXaGVyZSBzaG91bGQgd2Ugc3RhcnQgdG8gcHJl ZmV0Y2g/ICovCisJCXByZWZldGNoRW5kID0gTWluKHNjYW4tPnhzX2JhdGNoLT5jdXJySW5k ZXgsCisJCQkJCQkgIHNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4KTsKKworCQkvKgor CQkgKiBXaGVyZSBzaG91bGQgd2Ugc3RvcCBwcmVmZXRjaGluZz8gdGhpcyBpcyB0aGUgZmly c3QgaXRlbSB0aGF0IHdlIGRvCisJCSAqIE5PVCBwcmVmZXRjaCwgaS5lLiBpdCBjYW4gYmUg dGhlIGZpcnN0IGl0ZW0gYWZ0ZXIgdGhlIGJhdGNoLgorCQkgKi8KKwkJcHJlZmV0Y2hTdGFy dCA9IE1heCgoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCAtIDEpIC0gc2Nhbi0+eHNfYmF0 Y2gtPnByZWZldGNoVGFyZ2V0LAorCQkJCQkJCS0xKTsKKworCQkvKiBGSVhNRSBzaG91bGQg Y2FsY3VsYXRlIGluIGEgd2F5IHRvIG1ha2UgdGhpcyB1bm5lY2Vzc2FyeSAqLworCQlwcmVm ZXRjaFN0YXJ0ID0gTWF4KE1pbihwcmVmZXRjaFN0YXJ0LCBzY2FuLT54c19iYXRjaC0+bmhl YXB0aWRzIC0gMSksIDApOworCQlwcmVmZXRjaEVuZCA9IE1heChNaW4ocHJlZmV0Y2hFbmQs IHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgLSAxKSwgMCk7CisKKwkJLyogcmVtZW1iZXIg aG93IGZhciB3ZSBwcmVmZXRjaGVkIC8gd2hlcmUgdG8gc3RhcnQgdGhlIG5leHQgcHJlZmV0 Y2ggKi8KKwkJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPSBwcmVmZXRjaFN0YXJ0 OworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJsZSB3ZSBnZXQgaW52ZXJ0ZWQgcHJlZmV0 Y2ggcmFuZ2UgYWZ0ZXIgYSByZXN0cnBvcygpIGNhbGwsCisJICogYmVjYXVzZSB3ZSBpbnRl bnRpb25hbGx5IGRvbid0IHJlc2V0IHRoZSBwcmVmZXRjaEluZGV4IC0gd2UgZG9uJ3Qgd2Fu dAorCSAqIHRvIHByZWZldGNoIHBhZ2VzIG92ZXIgYW5kIG92ZXIgaW4gdGhpcyBjYXNlLiBX ZSdsbCBkbyBub3RoaW5nIGluIHRoYXQKKwkgKiBjYXNlLCBleGNlcHQgZm9yIHRoZSBBc3Nl cnRDaGVja0JhdGNoSW5mbygpLgorCSAqCisJICogRklYTUUgSSBzdXNwZWN0IHRoaXMgYWN0 dWFsbHkgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaWYgd2UgY2hhbmdlIHRoZQorCSAqIGRp cmVjdGlvbiwgYmVjYXVzZSB0aGUgcHJlZmV0Y2hJbmRleCB3aWxsIGZsaXAgYmV0d2VlbiB0 d28gZXh0cmVtZXMKKwkgKiB0aGFua3MgdG8gdGhlIE1pbi9NYXguCisJICovCisKKwkvKgor CSAqIEluY3JlYXNlIHRoZSBwcmVmZXRjaCBkaXN0YW5jZSwgYnV0IG5vdCBiZXlvbmQgcHJl ZmV0Y2hNYXhpbXVtLiBXZQorCSAqIGludGVudGlvbmFsbHkgZG8gdGhpcyBhZnRlciBjYWxj dWxhdGluZyBzdGFydC9lbmQsIHNvIHRoYXQgd2Ugc3RhcnQKKwkgKiBhY3R1YWxseSBwcmVm ZXRjaGluZyBvbmx5IGFmdGVyIHRoZSBmaXJzdCBpdGVtLgorCSAqLworCXNjYW4tPnhzX2Jh dGNoLT5wcmVmZXRjaFRhcmdldCA9IE1pbihzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hUYXJn ZXQgKyAxLAorCQkJCQkJCQkJCSBzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hNYXhpbXVtKTsK KworCS8qIGNvbXByZWhlbnNpdmUgY2hlY2tzIG9mIGJhdGNoaW5nIGluZm8gKi8KKwlBc3Nl cnRDaGVja0JhdGNoSW5mbyhzY2FuKTsKKworCS8qIGZpbmFsbHksIGRvIHRoZSBhY3R1YWwg cHJlZmV0Y2hpbmcgKi8KKwlmb3IgKGludCBpID0gcHJlZmV0Y2hTdGFydDsgaSA8IHByZWZl dGNoRW5kOyBpKyspCisJeworCQkvKiBza2lwIGJsb2NrIGlmIHRoZSBwcm92aWRlZCBjYWxs YmFjayBzYXlzIHNvICovCisJCWlmIChwcmVmZXRjaF9jYWxsYmFjayAmJiAhcHJlZmV0Y2hf Y2FsbGJhY2soc2NhbiwgYXJnLCBpKSkKKwkJCWNvbnRpbnVlOworCisJCVByZWZldGNoQnVm ZmVyKHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJCQkgICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKCZzY2FuLT54c19iYXRjaC0+aGVhcHRpZHNbaV0pKTsKKwl9 Cit9CisKKy8qCisgKiBpbmRleF9iYXRjaF9pbml0CisgKgkJSW5pdGlhbGl6ZSB2YXJpb3Vz IGZpZWxkcyAvIGFycmF5cyBuZWVkZWQgYnkgYmF0Y2hpbmcuCisgKgorICogRklYTUUgVGhp cyBpcyBhIGJpdCBhZC1ob2MgaG9kZ2UgcG9kZ2UsIGR1ZSB0byBob3cgSSB3YXMgYWRkaW5n IG1vcmUgYW5kCisgKiBtb3JlIHBpZWNlcy4gU29tZSBvZiB0aGUgZmllbGRzIG1heSBiZSBu b3QgcXVpdGUgbmVjZXNzYXJ5LCBuZWVkcyBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAor aW5kZXhfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyogaW5pdCBiYXRj aGluZyBpbmZvLCBidXQgb25seSBpZiBiYXRjaCBzdXBwb3J0ZWQgKi8KKwlBc3NlcnQoc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlz Y2FuLT54c19iYXRjaCA9IHBhbGxvYzAoc2l6ZW9mKEluZGV4U2NhbkJhdGNoRGF0YSkpOwor CisJLyoKKwkgKiBTZXQgc29tZSByZWFzb25hYmxlIGJhdGNoIHNpemUgZGVmYXVsdHMuCisJ ICoKKwkgKiBYWFggTWF5YmUgc2hvdWxkIGRlcGVuZCBvbiBwcmVmZXRjaCBkaXN0YW5jZSwg b3Igc29tZXRoaW5nIGxpa2UgdGhhdD8KKwkgKiBUaGUgaW5pdFNpemUgd2lsbCBhZmZlY3Qg aG93IGZhciBhaGVhZCB3ZSBjYW4gcHJlZmV0Y2guCisJICovCisJc2Nhbi0+eHNfYmF0Y2gt Pm1heFNpemUgPSA2NDsKKwlzY2FuLT54c19iYXRjaC0+aW5pdFNpemUgPSA4OworCXNjYW4t PnhzX2JhdGNoLT5jdXJyU2l6ZSA9IHNjYW4tPnhzX2JhdGNoLT5pbml0U2l6ZTsKKworCS8q IGluaXRpYWxpemUgcHJlZmV0Y2hpbmcgaW5mbyAqLworCXNjYW4tPnhzX2JhdGNoLT5wcmVm ZXRjaE1heGltdW0gPQorCQlnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShzY2FuLT5o ZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVsdGFibGVzcGFjZSk7CisJc2Nhbi0+eHNfYmF0Y2gt PnByZWZldGNoVGFyZ2V0ID0gMDsKKwlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRleCA9 IDA7CisKKwkvKiAqLworCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXggPSAtMTsKKworCS8q IFByZWFsbG9jYXRlIHRoZSBsYXJnZXN0IGFsbG93ZWQgYXJyYXkgb2YgVElEcy4gKi8KKwlz Y2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID0gMDsKKwlzY2FuLT54c19iYXRjaC0+aGVhcHRp ZHMgPSBwYWxsb2MwKHNpemVvZihJdGVtUG9pbnRlckRhdGEpICogc2Nhbi0+eHNfYmF0Y2gt Pm1heFNpemUpOworCisJLyoKKwkgKiBYWFggV2UgY2FuJ3QgY2hlY2sgc2Nhbi0+eHNfd2Fu dF9pdHVwLCBiZWNhdXNlIHRoYXQncyBzZXQgb25seSBhZnRlcgorCSAqIHRoZSBzY2FuIGlz IGluaXRpYWxpemVkIChhbmQgd2UgaW5pdGlhbGl6ZSBpbiBiZWdpbnNjYW4pLiBNYXliZSB3 ZQorCSAqIGNvdWxkIChvciBzaG91bGQpIGFsbG9jYXRlIGxhemlseS4KKwkgKi8KKwlzY2Fu LT54c19iYXRjaC0+aXR1cHMgPSBwYWxsb2Moc2l6ZW9mKEluZGV4VHVwbGUpICogc2Nhbi0+ eHNfYmF0Y2gtPm1heFNpemUpOworCXNjYW4tPnhzX2JhdGNoLT5odHVwcyA9IHBhbGxvYyhz aXplb2YoSGVhcFR1cGxlKSAqIHNjYW4tPnhzX2JhdGNoLT5tYXhTaXplKTsKKworCXNjYW4t PnhzX2JhdGNoLT5yZWNoZWNrID0gcGFsbG9jKHNpemVvZihib29sKSAqIHNjYW4tPnhzX2Jh dGNoLT5tYXhTaXplKTsKKworCS8qCisJICogWFhYIE1heWJlIHVzZSBhIG1vcmUgY29tcGFj dCBiaXRtYXA/IFdlIG5lZWQganVzdCBvbmUgYml0IHBlciBlbGVtZW50LAorCSAqIG5vdCBh IGJvb2wuIFRoaXMgaXMgZWFzaWVyIC8gbW9yZSBjb252ZW5pZW50IHRvIG1hbmlwdWxhdGUs IHRob3VnaC4KKwkgKgorCSAqIFhYWCBNYXliZSBzaG91bGQgYWxsb3cgbW9yZSBpdGVtcyB0 aGFudCB0aGUgbWF4IGJhdGNoIHNpemU/CisJICovCisJc2Nhbi0+eHNfYmF0Y2gtPm5LaWxs ZWRJdGVtcyA9IDA7CisJc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zID0gKGludCAqKSBw YWxsb2MwKHNpemVvZihpbnQpICogc2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUpOworCisJLyoK KwkgKiBYWFggTWF5YmUgYWxsb2NhdGUgb25seSB3aGVuIGFjdHVhbGx5IG5lZWRlZD8gQWxz bywgc2hvdWxkbid0IHdlIGhhdmUgYQorCSAqIG1lbW9yeSBjb250ZXh0IGZvciB0aGUgcHJp dmF0ZSBkYXRhPworCSAqLworCXNjYW4tPnhzX2JhdGNoLT5wcml2YXRlRGF0YSA9IChEYXR1 bSAqKSBwYWxsb2MwKHNpemVvZihEYXR1bSkgKiBzY2FuLT54c19iYXRjaC0+bWF4U2l6ZSk7 CisKKwlpZiAoc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA+IDApCisJeworCQlpbnQJCQljbnQg PSAoc2Nhbi0+eHNfYmF0Y2gtPm1heFNpemUgKiBzY2FuLT5udW1iZXJPZk9yZGVyQnlzKTsK KworCQlzY2FuLT54c19iYXRjaC0+b3JkZXJieXZhbHMgPSAoRGF0dW0gKikgcGFsbG9jMChz aXplb2YoRGF0dW0pICogY250KTsKKwkJc2Nhbi0+eHNfYmF0Y2gtPm9yZGVyYnludWxscyA9 IChib29sICopIHBhbGxvYzAoc2l6ZW9mKERhdHVtKSAqIGNudCk7CisJfQorCWVsc2UKKwl7 CisJCXNjYW4tPnhzX2JhdGNoLT5vcmRlcmJ5dmFscyA9IE5VTEw7CisJCXNjYW4tPnhzX2Jh dGNoLT5vcmRlcmJ5bnVsbHMgPSBOVUxMOworCX0KKworCXNjYW4tPnhzX2JhdGNoLT5jdHgg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJ CQkJCQkiaW5kZXhzY2FuIGJhdGNoIGNvbnRleHQiLAorCQkJCQkJCQkJCQkJQUxMT0NTRVRf REVGQVVMVF9TSVpFUyk7CisKKwkvKiBjb21wcmVoZW5zaXZlIGNoZWNrcyAqLworCUFzc2Vy dENoZWNrQmF0Y2hJbmZvKHNjYW4pOworfQorCisvKgorICogaW5kZXhfYmF0Y2hfcmVzZXQK KyAqCQlSZXNldCB0aGUgYmF0Y2ggYmVmb3JlIHJlYWRpbmcgdGhlIG5leHQgY2h1bmsgb2Yg ZGF0YS4KKyAqCisgKiBGSVhNRSBBbm90aGVyIGJpdCBpbiBuZWVkIG9mIGNsZWFudXAuIFRo ZSBjdXJySW5kZXggZGVmYXVsdCAoLTEpIGlzIG5vdCBxdWl0ZQorICogY29ycmVjdCwgYmVj YXVzZSBmb3IgYmFja3dhcmRzIHNjYW5zIGlzIHdyb25nLgorICovCitzdGF0aWMgdm9pZAor aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIGJhaWwgb3V0 IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVkICovCisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJ cmV0dXJuOworCisJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9IDA7CisJc2Nhbi0+eHNf YmF0Y2gtPnByZWZldGNoSW5kZXggPSAwOworCXNjYW4tPnhzX2JhdGNoLT5jdXJySW5kZXgg PSAtMTsKK30KKworLyoKKyAqIGluZGV4X2JhdGNoX2FkZAorICoJCUFkZCBhbiBpdGVtIHRv IHRoZSBiYXRjaC4KKyAqCisgKiBUaGUgaXRlbSBpcyBhbHdheXMgYSBUSUQsIGFuZCB0aGVu IGFsc28gSW5kZXhUdXBsZSBpZiByZXF1ZXN0ZWQgKGZvciBJT1MpLgorICogSXRlbXMgYXJl IGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBiZWdpbm5pbmcgKGluZGV4IDApLgorICoKKyAqIFJl dHVybnMgdHJ1ZSB3aGVuIGFkZGluZyB0aGUgaXRlbSB3YXMgc3VjY2Vzc2Z1bCwgb3IgZmFs c2Ugd2hlbiB0aGUgYmF0Y2gKKyAqIGlzIGZ1bGwgKGFuZCB0aGUgaXRlbSBzaG91bGQgYmUg YWRkZWQgdG8gdGhlIG5leHQgYmF0Y2gpLgorICovCitib29sCitpbmRleF9iYXRjaF9hZGQo SW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVtUG9pbnRlckRhdGEgdGlkLCBib29sIHJlY2hlY2ss CisJCQkJSW5kZXhUdXBsZSBpdHVwLCBIZWFwVHVwbGUgaHR1cCkKK3sKKwkvKiBjb21wcmVo ZW5zaXZlIGNoZWNrcyBvbiB0aGUgYmF0Y2ggaW5mbyAqLworCUFzc2VydENoZWNrQmF0Y2hJ bmZvKHNjYW4pOworCisJLyogZG9uJ3QgYWRkIFRJRHMgYmV5b25kIHRoZSBjdXJyZW50IGJh dGNoIHNpemUgKi8KKwlpZiAoSU5ERVhfQkFUQ0hfSVNfRlVMTChzY2FuKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBUaGVyZSBtdXN0IGJlIHNwYWNlIGZvciBhdCBsZWFzdCBv bmUgZW50cnkuCisJICoKKwkgKiBYWFggU2VlbXMgcmVkdW5kYW50IHdpdGggdGhlIGVhcmxp ZXIgSU5ERVhfQkFUQ0hfSVNfRlVMTCBjaGVjay4KKwkgKi8KKwlBc3NlcnQoc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkcyA8IHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSk7CisJQXNzZXJ0 KHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPj0gMCk7CisKKwlzY2FuLT54c19iYXRjaC0+ aGVhcHRpZHNbc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkc10gPSB0aWQ7CisJc2Nhbi0+eHNf YmF0Y2gtPnByaXZhdGVEYXRhW3NjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHNdID0gKERhdHVt KSAwOworCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7CisJCXNjYW4tPnhzX2JhdGNo LT5pdHVwc1tzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzXSA9IGl0dXA7CisJCXNjYW4tPnhz X2JhdGNoLT5odHVwc1tzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzXSA9IGh0dXA7CisJfQor CisJc2Nhbi0+eHNfYmF0Y2gtPnJlY2hlY2tbc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkc10g PSByZWNoZWNrOworCisJaWYgKHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQorCXsKKwkJ aW50CQkJaWR4ID0gc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyAqIHNjYW4tPm51bWJlck9m T3JkZXJCeXM7CisKKwkJbWVtY3B5KCZzY2FuLT54c19iYXRjaC0+b3JkZXJieXZhbHNbaWR4 XSwgc2Nhbi0+eHNfb3JkZXJieXZhbHMsIHNpemVvZihEYXR1bSkgKiBzY2FuLT5udW1iZXJP Zk9yZGVyQnlzKTsKKwkJbWVtY3B5KCZzY2FuLT54c19iYXRjaC0+b3JkZXJieW51bGxzW2lk eF0sIHNjYW4tPnhzX29yZGVyYnludWxscywgc2l6ZW9mKGJvb2wpICogc2Nhbi0+bnVtYmVy T2ZPcmRlckJ5cyk7CisJfQorCisJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcysrOworCisJ LyogY29tcHJlaGVuc2l2ZSBjaGVja3Mgb24gdGhlIGJhdGNoIGluZm8gKi8KKwlBc3NlcnRD aGVja0JhdGNoSW5mbyhzY2FuKTsKKworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBmOWEyZmFjNzllNC4uNzQyYTk2M2JjMjkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MDksNyArODA5LDEyIEBA IGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBS ZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91bmRfc2Vs ZiA9IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgs ICZEaXJ0eVNuYXBzaG90LCBpbmRua2V5YXR0cywgMCk7CisKKwkvKgorCSAqIFhYWCBEb2Vz IG5vdCBzZWVtIHVzZWZ1bCB0byBkbyBwcmVmZXRjaGluZyBmb3IgY2hlY2tzIG9mIGNvbnN0 cmFpbnRzLgorCSAqIFdlIHdvdWxkIHByb2JhYmx5IG5lZWQganVzdCB0aGUgZmlyc3QgaXRl bSBhbnl3YXkuCisJICovCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBp bmRleCwgJkRpcnR5U25hcHNob3QsIGluZG5rZXlhdHRzLCAwLCBmYWxzZSk7CiAJaW5kZXhf cmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CiAK IAl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGly ZWN0aW9uLCBleGlzdGluZ19zbG90KSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKaW5kZXggNTQwMjVjOWYxNTAuLjZiZTM3NDQzNjFkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtMjQ0LDggKzI0NCwxMyBAQCBSZWxh dGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkv KiBCdWlsZCBzY2FuIGtleS4gKi8KIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9z Y2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKLQkvKiBTdGFydCBh biBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWws ICZzbmFwLCBza2V5X2F0dG9mZiwgMCk7CisJLyoKKwkgKiBTdGFydCBhbiBpbmRleCBzY2Fu LgorCSAqCisJICogWFhYIE5vIHByZWZldGNoaW5nIGZvciByZXBsaWNhdGlvbiBpZGVudGl0 eS4gV2UgZXhwZWN0IHRvIGZpbmQganVzdCBvbmUKKwkgKiByb3csIHNvIHByZWZldGNoaW5n IGlzIHBvaW50bGVzcy4KKwkgKi8KKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4 cmVsLCAmc25hcCwgc2tleV9hdHRvZmYsIDAsIGZhbHNlKTsKIAogcmV0cnk6CiAJZm91bmQg PSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmlu ZGV4IDYxMmM2NzM4OTUwLi5jMDMwYzBkZjZmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC00OSw3ICs0OSwxMiBAQAogc3RhdGljIFR1cGxl VGFibGVTbG90ICpJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSk7CiBz dGF0aWMgdm9pZCBTdG9yZUluZGV4VHVwbGUoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQlJbmRleFR1cGxlIGl0dXAsIFR1cGxlRGVz YyBpdHVwZGVzYyk7CitzdGF0aWMgYm9vbCBpb3NfcHJlZmV0Y2hfYmxvY2soSW5kZXhTY2Fu RGVzYyBzY2FuLCB2b2lkICpkYXRhLCBpbnQgaW5kZXgpOwogCisvKiB2YWx1ZXMgc3RvcmVk IGluIGlvc19wcmVmZXRjaF9ibG9jayBpbiB0aGUgYmF0Y2ggY2FjaGUgKi8KKyNkZWZpbmUJ CUlPU19VTktOT1dOX1ZJU0lCSUxJVFkJCTAJLyogWFhYIGRlZmF1bHQgdmFsdWUgKi8KKyNk ZWZpbmUJCUlPU19BTExfVklTSUJMRQkJCQkxCisjZGVmaW5lCQlJT1NfTk9UX0FMTF9WSVNJ QkxFCQkJMgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJSW5kZXhPbmx5TmV4dApAQCAtOTMsMTUg Kzk4LDIyIEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJ CQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5l c19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKLQkJCQkJ CQkJICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CisJCQkJCQkJCSAgIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCSAgIG5vZGUtPmlvc3NfQ2FuQmF0Y2gpOwog CiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAotCiAJCS8qIFNldCBpdCB1 cCBmb3IgaW5kZXgtb25seSBzY2FuICovCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dh bnRfaXR1cCA9IHRydWU7CiAJCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVy OwogCisJCS8qIEFsc28gc2V0IHRoZSBwcmVmZXRjaCBjYWxsYmFjayBpbmZvLCBpZiBiYWNo aW5nIGVuYWJsZWQuICovCisJCWlmIChzY2FuZGVzYy0+eHNfYmF0Y2ggIT0gTlVMTCkKKwkJ eworCQkJc2NhbmRlc2MtPnhzX2JhdGNoLT5wcmVmZXRjaENhbGxiYWNrID0gaW9zX3ByZWZl dGNoX2Jsb2NrOworCQkJc2NhbmRlc2MtPnhzX2JhdGNoLT5wcmVmZXRjaEFyZ3VtZW50ID0g KHZvaWQgKikgbm9kZTsKKwkJfQorCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMg dG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKIAkJICogcGFz cyB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtMTE5LDEwICsxMzEsMzggQEAg SW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJICovCiAJd2hpbGUg KCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVM TCkKIAl7CisJCWJvb2wJCWFsbF92aXNpYmxlOwogCQlib29sCQl0dXBsZV9mcm9tX2hlYXAg PSBmYWxzZTsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCisJCS8qICovCisJCWlm IChzY2FuZGVzYy0+eHNfYmF0Y2ggPT0gTlVMTCkKKwkJeworCQkJYWxsX3Zpc2libGUgPSBW TV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAorCQkJCQkJICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkgICZub2RlLT5pb3NzX1ZNQnVmZmVy KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIElzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVu dCBpdGVtIHZhbGlkIGZvciB0aGUgYmF0Y2g/ICovCisJCQlBc3NlcnQoKHNjYW5kZXNjLT54 c19iYXRjaC0+Y3VyckluZGV4ID49IDApICYmCisJCQkJICAgKHNjYW5kZXNjLT54c19iYXRj aC0+Y3VyckluZGV4IDwgc2NhbmRlc2MtPnhzX2JhdGNoLT5uaGVhcHRpZHMpKTsKKworCQkJ LyoKKwkJCSAqIFJldXNlIHRoZSBwcmV2aW91c2x5IGRldGVybWluZWQgcGFnZSB2aXNpYmls aXR5IGluZm8sIG9yCisJCQkgKiBjYWxjdWxhdGUgaXQgbm93LiBJZiB3ZSBkZWNpZGVkIG5v dCB0byBwcmVmZXRjaCB0aGUgYmxvY2ssIHRoZQorCQkJICogcGFnZSBoYXMgdG8gYmUgYWxs LXZpc2libGUuCisJCQkgKgorCQkJICogWFhYIEl0J3MgYSBiaXIgd2VpcmQgd2UgdXNlIHRo ZSB2aXNpYmlsaXR5IHRvIGRlY2lkZSBpZiB3ZQorCQkJICogc2hvdWxkIHNraXAgcHJlZmV0 Y2hpbmcgdGhlIGJsb2NrLCBhbmQgdGhlbiBkZWR1Y2UgdGhlCisJCQkgKiB2aXNpYmlsaXR5 IGZyb20gdGhhdC4gTWF5YmUgd2UgY291bGQvc2hvdWxkIGhhdmUgYSBtb3JlIGRpcmVjdAor CQkJICogd2F5PworCQkJICovCisJCQlhbGxfdmlzaWJsZSA9ICFpb3NfcHJlZmV0Y2hfYmxv Y2soc2NhbmRlc2MsIG5vZGUsCisJCQkJCQkJCQkJCSAgc2NhbmRlc2MtPnhzX2JhdGNoLT5j dXJySW5kZXgpOworCQl9CisKIAkJLyoKIAkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0 Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCiAJCSAqIHdoaWNoIGFs bCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2Us CkBAIC0xNTcsMTYgKzE5NywxNCBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSkKIAkJICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0 eSB0byBhdm9pZCBuZWVkaW5nIHRvIGxvY2sKIAkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2gg Y291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgY29udGVudGlvbi4KIAkJICovCi0JCWlmICghVk1f QUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQor CQlpZiAoIWFsbF92aXNpYmxlKQogCQl7CiAJCQkvKgogCQkJICogUmF0cywgd2UgaGF2ZSB0 byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgogCQkJICovCiAJCQlJbnN0 ckNvdW50VHVwbGVzMihub2RlLCAxKTsKIAkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2Fu ZGVzYywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlz aWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KKwkJCQljb250aW51ZTsJLyog bm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KIAogCQkJRXhlY0Ns ZWFyVHVwbGUobm9kZS0+aW9zc19UYWJsZVNsb3QpOwogCkBAIC01NzQsNiArNjEyLDE2IEBA IEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAlpbmRleHN0YXRlLT5yZWNoZWNrcXVhbCA9CiAJCUV4ZWNJ bml0UXVhbChub2RlLT5yZWNoZWNrcXVhbCwgKFBsYW5TdGF0ZSAqKSBpbmRleHN0YXRlKTsK IAorCS8qCisJICogQ2FuJ3QgZG8gYmF0Y2hpbmcgKGFuZCB0aHVzIHByZWZldGNoaW5nKSB3 aGVuIHRoZSBwbGFuIHJlcXVpcmVzIG1hcmsKKwkgKiBhbmQgcmVzdG9yZS4gVGhlcmUncyBh biBpc3N1ZSB3aXRoIHRyYW5zbGF0aW5nIHRoZSBtYXJrL3Jlc3RvcmUKKwkgKiBwb3NpdGlv bnMgYmV0d2VlbiB0aGUgYmF0Y2ggaW4gc2NhbiBkZXNjcmlwdG9yIGFuZCB0aGUgb3JpZ2lu YWwKKwkgKiBwb3NpdGlvbiByZWNvZ25pemVkIGluIHRoZSBpbmRleCBBTS4KKwkgKgorCSAq IFhYWCBIb3BlZnVsbHkganVzdCBhIHRlbXBvcmFyeSBsaW1pdGF0aW9uPworCSAqLworCWlu ZGV4c3RhdGUtPmlvc3NfQ2FuQmF0Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsK KwogCS8qCiAJICogSWYgd2UgYXJlIGp1c3QgZG9pbmcgRVhQTEFJTiAoaWUsIGFyZW4ndCBn b2luZyB0byBydW4gdGhlIHBsYW4pLCBzdG9wCiAJICogaGVyZS4gIFRoaXMgYWxsb3dzIGFu IGluZGV4LWFkdmlzb3IgcGx1Z2luIHRvIEVYUExBSU4gYSBwbGFuIGNvbnRhaW5pbmcKQEAg LTczNSwxMiArNzgzLDIwIEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRl eE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCwK IAkJCQkJCQkJICBwaXNjYW4pOwogCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+ c3MucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBwaXNjYW4pOworCisJLyoKKwkgKiBYWFggZG8g d2UgYWN0dWFsbHkgd2FudCBwcmVmZXRjaGluZyBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnM/ IE1heWJlCisJICogbm90LCBidXQgdGhlbiB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRv IGNhbGwgaW5kZXhfYmF0Y2hfZ2V0bmV4dF90aWQKKwkgKiAod2hpY2ggbm93IGNhbiBoYXBw ZW4sIGJlY2F1c2Ugd2UnbGwgY2FsbCBJbmRleE9ubHlOZXh0IGV2ZW4gZm9yCisJICogcGFy YWxsZWwgcGxhbnMpLgorCSAqLwogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9i ZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJ CQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNj YW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJ IHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJCQkJCQkJCSBub2RlLT5pb3NzX0NhbkJh dGNoKTsKIAlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwogCW5v ZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCkBAIC03ODAsMTIgKzgzNiwx NSBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0 YXRlICpub2RlLAogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwaXNjYW47CiAKIAlwaXNjYW4g PSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25v ZGVfaWQsIGZhbHNlKTsKKworCS8qIFhYWCBkbyB3ZSBhY3R1YWxseSB3YW50IHByZWZldGNo aW5nIGZvciBwYXJhbGxlbCBpbmRleCBzY2Fucz8gKi8KIAlub2RlLT5pb3NzX1NjYW5EZXNj ID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgbm9k ZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtl eXMsCi0JCQkJCQkJCSBwaXNjYW4pOworCQkJCQkJCQkgcGlzY2FuLAorCQkJCQkJCQkgbm9k ZS0+aW9zc19DYW5CYXRjaCk7CiAJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVw ID0gdHJ1ZTsKIAogCS8qCkBAIC03OTcsMyArODU2LDM0IEBAIEV4ZWNJbmRleE9ubHlTY2Fu SW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCSBub2Rl LT5pb3NzX1NjYW5LZXlzLCBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkgbm9kZS0+ aW9zc19PcmRlckJ5S2V5cywgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CiB9CisKKy8q CisgKiBpb3NfcHJlZmV0Y2hfYmxvY2sKKyAqCQlDYWxsYmFjayB0byBvbmx5IHByZWZldGNo IGJsb2NrcyB0aGF0IGFyZSBub3QgYWxsLXZpc2libGUuCisgKgorICogV2UgZG9uJ3Qgd2Fu dCB0byBpbnNwZWN0IHRoZSB2aXNpYmlsaXR5IG1hcCByZXBlYXRlZGx5LCBzbyB0aGUgcmVz dWx0IG9mCisgKiBWTV9BTExfVklTSUJMRSBpcyBzdG9yZWQgaW4gdGhlIGJhdGNoIHByaXZh dGUgZGF0YS4gVGhlIHZhbHVlcyBhcmUgc2V0CisgKiB0byAwIGJ5IGRlZmF1bHQsIHNvIHdl IHVzZSB0d28gY29uc3RhbnRzIHRvIHJlbWVtYmVyIGlmIGFsbC12aXNpYmxlIG9yCisgKiBu b3QgYWxsLXZpc2libGUuCisgKi8KK3N0YXRpYyBib29sCitpb3NfcHJlZmV0Y2hfYmxvY2so SW5kZXhTY2FuRGVzYyBzY2FuLCB2b2lkICphcmcsIGludCBpbmRleCkKK3sKKwlJbmRleE9u bHlTY2FuU3RhdGUgKm5vZGUgPSAoSW5kZXhPbmx5U2NhblN0YXRlICopIGFyZzsKKworCWlm IChzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGFbaW5kZXhdID09IElPU19VTktOT1dOX1ZJ U0lCSUxJVFkpCisJeworCQlib29sCQlhbGxfdmlzaWJsZTsKKwkJSXRlbVBvaW50ZXIgdGlk ID0gJnNjYW4tPnhzX2JhdGNoLT5oZWFwdGlkc1tpbmRleF07CisKKwkJYWxsX3Zpc2libGUg PSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkgSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkJICZub2RlLT5pb3NzX1ZNQnVm ZmVyKTsKKworCQlzY2FuLT54c19iYXRjaC0+cHJpdmF0ZURhdGFbaW5kZXhdCisJCQk9IGFs bF92aXNpYmxlID8gSU9TX0FMTF9WSVNJQkxFIDogSU9TX05PVF9BTExfVklTSUJMRTsKKwl9 CisKKwkvKiBwcmVmZXRjaCBvbmx5IGJsb2NrcyB0aGF0IGFyZSBub3QgYWxsLXZpc2libGUg Ki8KKwlyZXR1cm4gKHNjYW4tPnhzX2JhdGNoLT5wcml2YXRlRGF0YVtpbmRleF0gPT0gSU9T X05PVF9BTExfVklTSUJMRSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2Fu LmMKaW5kZXggODAwMGZlZmY0YzkuLjhiYmQzNjA2NTY2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMTAsNyArMTEwLDggQEAgSW5kZXhOZXh0KEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pc3Nf TnVtU2NhbktleXMsCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7CisJ CQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKKwkJCQkJCQkJICAgbm9kZS0+ aXNzX0NhbkJhdGNoKTsKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApA QCAtMjAwLDEyICsyMDEsMTUgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3Rh dGUgKm5vZGUpCiAJCS8qCiAJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIGluZGV4IHNjYW4g aXMgbm90IHBhcmFsbGVsLCBvciBpZiB3ZSdyZQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcg YW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgorCQkgKgor CQkgKiBYWFggU2hvdWxkIHdlIHVzZSBiYXRjaGluZyBoZXJlPyBBbmQgY2FuIHdlIHdpdGgg cmVvcmRlcmluZz8KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9k ZS0+aXNzX051bVNjYW5LZXlzLAotCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtl eXMpOworCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCisJCQkJCQkJCSAg IGZhbHNlKTsKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApAQCAtOTQy LDYgKzk0NiwyMCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPmluZGV4b3JkZXJieW9yaWcg PQogCQlFeGVjSW5pdEV4cHJMaXN0KG5vZGUtPmluZGV4b3JkZXJieW9yaWcsIChQbGFuU3Rh dGUgKikgaW5kZXhzdGF0ZSk7CiAKKwkvKgorCSAqIENhbid0IGRvIGJhdGNoaW5nIChhbmQg dGh1cyBwcmVmZXRjaGluZykgd2hlbiB0aGUgcGxhbiByZXF1aXJlcyBtYXJrCisJICogYW5k IHJlc3RvcmUuIFRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB0cmFuc2xhdGluZyB0aGUgbWFyay9y ZXN0b3JlCisJICogcG9zaXRpb25zIGJldHdlZW4gdGhlIGJhdGNoIGluIHNjYW4gZGVzY3Jp cHRvciBhbmQgdGhlIG9yaWdpbmFsCisJICogcG9zaXRpb24gcmVjb2duaXplZCBpbiB0aGUg aW5kZXggQU0uCisJICoKKwkgKiBYWFggSG9wZWZ1bGx5IGp1c3QgYSB0ZW1wb3JhcnkgbGlt aXRhdGlvbj8KKwkgKgorCSAqIFhYWCBNYXliZSB0aGlzIHNob3VsZCBjaGVjayBpZiB0aGUg aW5kZXggQU0gc3VwcG9ydHMgYmF0Y2hpbmcsIG9yIGV2ZW4KKwkgKiBjYWxsIHNvbWV0aGlu ZyBsaWtlICJhbWNhbmJhdGNoIiAoZG9lcyBub3QgZXhpc3QgeWV0KS4gT3IgY2hlY2sgdGhl CisJICogZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZyBHVUM/IE5vdyB3ZSBjaGVjayB0aGUg R1VDIGluIGluZGV4X2JlZ2luc2Nhbi4KKwkgKi8KKwlpbmRleHN0YXRlLT5pc3NfQ2FuQmF0 Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsKKwogCS8qCiAJICogSWYgd2UgYXJl IGp1c3QgZG9pbmcgRVhQTEFJTiAoaWUsIGFyZW4ndCBnb2luZyB0byBydW4gdGhlIHBsYW4p LCBzdG9wCiAJICogaGVyZS4gIFRoaXMgYWxsb3dzIGFuIGluZGV4LWFkdmlzb3IgcGx1Z2lu IHRvIEVYUExBSU4gYSBwbGFuIGNvbnRhaW5pbmcKQEAgLTE2NzAsMTIgKzE2ODgsMTcgQEAg RXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAJCQkJ CQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICBwaXNjYW4pOwogCXNobV90 b2NfaW5zZXJ0KHBjeHQtPnRvYywgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9ub2RlX2lkLCBw aXNjYW4pOworCisJLyoKKwkgKiBYWFggZG8gd2UgYWN0dWFsbHkgd2FudCBwcmVmZXRjaGlu ZyBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnM/CisJICovCiAJbm9kZS0+aXNzX1NjYW5EZXNj ID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSBub2Rl LT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMs Ci0JCQkJCQkJCSBwaXNjYW4pOworCQkJCQkJCQkgcGlzY2FuLAorCQkJCQkJCQkgbm9kZS0+ aXNzX0NhbkJhdGNoKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxj dWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCkBAIC0xNzEzLDEy ICsxNzM2LDE3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0 YXRlICpub2RlLAogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwaXNjYW47CiAKIAlwaXNjYW4g PSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25v ZGVfaWQsIGZhbHNlKTsKKworCS8qCisJICogWFhYIGRvIHdlIGFjdHVhbGx5IHdhbnQgcHJl ZmV0Y2hpbmcgZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zPworCSAqLwogCW5vZGUtPmlzc19T Y2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVy QnlLZXlzLAotCQkJCQkJCQkgcGlzY2FuKTsKKwkJCQkJCQkJIHBpc2NhbiwKKwkJCQkJCQkJ IG5vZGUtPmlzc19DYW5CYXRjaCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMg dG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCAwM2Q3ZmI1ZjQ4Mi4uMmM5YzgyOWMyODgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC02MzQwLDkgKzYzNDAsMTQgQEAg Z2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCUluaXRO b25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAg R2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKKwkvKgorCSAqIFhYWCBJJ20gbm90IHN1 cmUgYWJvdXQgYmF0Y2hpbmcvcHJlZmV0Y2hpbmcgaGVyZS4gSW4gbW9zdCBjYXNlcyB3ZQor CSAqIGV4cGVjdCB0byBmaW5kIHRoZSBlbmRwb2ludHMgaW1tZWRpYXRlbHksIGJ1dCBzb21l dGltZXMgd2UgaGF2ZSBhIGxvdAorCSAqIG9mIGRlYWQgdHVwbGVzIC0gYW5kIHRoZW4gcHJl ZmV0Y2hpbmcgbWlnaHQgaGVscC4KKwkgKi8KIAlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5z Y2FuKGhlYXBSZWwsIGluZGV4UmVsLAogCQkJCQkJCQkgJlNuYXBzaG90Tm9uVmFjdXVtYWJs ZSwKLQkJCQkJCQkJIDEsIDApOworCQkJCQkJCQkgMSwgMCwgZmFsc2UpOwogCS8qIFNldCBp dCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCiAJaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVw ID0gdHJ1ZTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEws IDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA2ODYzMDlkYjU4 Yi4uNjJhN2Y2M2E2MTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC03ODksNiArNzg5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jv b2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJlbmFi bGVfaW5kZXhzY2FuX2JhdGNoaW5nIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRI T0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgaW5k ZXgtc2NhbiBiYXRjaGluZy4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAor CQkmZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZywKKwkJdHJ1ZSwKKwkJTlVMTCwgTlVMTCwg TlVMTAorCX0sCiAJewogCQl7ImVuYWJsZV9pbmRleG9ubHlzY2FuIiwgUEdDX1VTRVJTRVQs IFFVRVJZX1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBs YW5uZXIncyB1c2Ugb2YgaW5kZXgtb25seS1zY2FuIHBsYW5zLiIpLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDY2N2UwZGM0 MGEyLi5iMjUwOTMzNzc1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMzk4LDYgKzM5OCw3IEBACiAjZW5hYmxlX2hhc2hq b2luID0gb24KICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2luZGV4 c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9iYXRjaGluZyA9IG9uCiAjZW5hYmxlX2lu ZGV4b25seXNjYW4gPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9p emUgPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCBjNTFkZTc0MmVhMC4uOTY2YTI1ZDliYTMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xODQsNiArMTg0LDEwIEBAIHR5cGVkZWYgdm9pZCAo KmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29s ICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQg dHVwbGVzICovCit0eXBlZGVmIGJvb2wgKCphbWdldGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwog LyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0 bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0 bWFwICp0Ym0pOwpAQCAtMjg4LDYgKzI5Miw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1S b3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1yZXNjYW5f ZnVuY3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAv KiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyog Y2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyog Y2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwogCWFtbWFy a3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5h bS5oCmluZGV4IGMyNWY1ZDExYjUzLi4xZDlhMDg2OGE5YiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgK QEAgLTE0LDYgKzE0LDcgQEAKICNpZm5kZWYgR0VOQU1fSAogI2RlZmluZSBHRU5BTV9ICiAK KyNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3NrZXkuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRtYXAuaCIK QEAgLTg4LDYgKzg5LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJh Y2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBk ZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVz Y0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2Nh bkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBAIC0xMzIsNiArMTM0LDggQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcmRlckJ5RGlzdGFuY2UKICAqIGdlbmVyYWxpemVkIGlu ZGV4XyBpbnRlcmZhY2Ugcm91dGluZXMgKGluIGluZGV4YW0uYykKICAqLwogCitleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nOworCiAvKgogICog SW5kZXhTY2FuSXNWYWxpZAogICoJCVRydWUgaWZmIHRoZSBpbmRleCBzY2FuIGlzIHZhbGlk LgpAQCAtMTU1LDcgKzE1OSw4IEBAIGV4dGVybiB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVw KFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9i ZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkg aW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKKwkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBu b3JkZXJieXMsCisJCQkJCQkJCQkgYm9vbCBlbmFibGVfYmF0Y2hpbmcpOwogZXh0ZXJuIElu ZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLAogCQkJCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCQkJaW50IG5r ZXlzKTsKQEAgLTE3Myw3ICsxNzgsOCBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNj YW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRl eF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2Nh bkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJ CQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywK LQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOworCQkJCQkJCQkJ CQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCQkJCQkJICBib29sIGVu YWJsZV9iYXRjaGluZyk7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQo SW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u KTsKIHN0cnVjdCBUdXBsZVRhYmxlU2xvdDsKQEAgLTE4Miw2ICsxODgsMTAgQEAgZXh0ZXJu IGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJICAgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90 KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU SURCaXRtYXAgKmJpdG1hcCk7CiAKKy8qIGluZGV4IGJhdGNoaW5nL3ByZWZldGNoaW5nICov CitleHRlcm4gYm9vbCBpbmRleF9iYXRjaF9hZGQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVt UG9pbnRlckRhdGEgdGlkLCBib29sIHJlY2hlY2ssCisJCQkJCQkJSW5kZXhUdXBsZSBpdHVw LCBIZWFwVHVwbGUgaHR1cCk7CisKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmlu ZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJCUlu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaXN0YXQsCiAJCQkJCQkJCQkJCQlJbmRleEJ1bGtEZWxl dGVDYWxsYmFjayBjYWxsYmFjaywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDExNGE4NWRj NDdjLi4zZDc2N2UxNDM1NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xMDcsNiArMTA3 LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogCVJlbGF0aW9uCXJl bDsKIH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbiwg dGhlIHByZWZldGNoIGNhbGxiYWNrIG5lZWRzIEluZGV4U2NhbkRlc2NEYXRhLiAqLwordHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhIEluZGV4U2NhbkJhdGNoRGF0YTsKKwog LyoKICAqIFdlIHVzZSB0aGUgc2FtZSBJbmRleFNjYW5EZXNjRGF0YSBzdHJ1Y3R1cmUgZm9y IGJvdGggYW1nZXR0dXBsZS1iYXNlZAogICogYW5kIGFtZ2V0Yml0bWFwLWJhc2VkIGluZGV4 IHNjYW5zLiAgU29tZSBmaWVsZHMgYXJlIG9ubHkgcmVsZXZhbnQgaW4KQEAgLTE1Miw2ICsx NTUsOSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCiAJYm9vbAkJeHNf cmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkICovCiAK KwkvKiBJbmZvcm1hdGlvbiB1c2VkIGJ5IGJhdGNoZWQgaW5kZXggc2NhbnMuICovCisJSW5k ZXhTY2FuQmF0Y2hEYXRhICp4c19iYXRjaDsKKwogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3 aXRoIGFuIG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQog CSAqIGV4cHJlc3Npb25zIG9mIHRoZSBsYXN0IHJldHVybmVkIHR1cGxlLCBhY2NvcmRpbmcg dG8gdGhlIGluZGV4LiAgSWYKQEAgLTE2Nyw2ICsxNzMsNjQgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAq cGFyYWxsZWxfc2NhbjsKIH0JCQlJbmRleFNjYW5EZXNjRGF0YTsKIAorLyoKKyAqIFR5cGVk ZWYgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhbiBpdGVtIGluIGlu ZGV4IHNjYW4gc2hvdWxkCisgKiBiZSBwcmVmZXRjaGVkLgorICovCit0eXBlZGVmIGJvb2wg KCpJbmRleFByZWZldGNoQ2FsbGJhY2spIChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwKKwkJ CQkJCQkJCSAgIHZvaWQgKmFyZywgaW50IGluZGV4KTsKKworLyoKKyAqIERhdGEgYWJvdXQg dGhlIGN1cnJlbnQgVElEIGJhdGNoIHJldHVybmVkIGJ5IHRoZSBpbmRleCBBTS4KKyAqCisg KiBYWFggTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBzZXBhcmF0ZSBzdHJ1Y3QgaW5zdGVhZCwg YW5kIHRoZSBzY2FuCisgKiBkZXNjcmlwdG9yIHdvdWxkIGhhdmUgb25seSBhIHBvaW50ZXIs IGluaXRpYWxpemVkIG9ubHkgd2hlbiB0aGUKKyAqIGJhdGNoaW5nIGlzIGFjdHVhbGx5IHVz ZWQ/CisgKgorICogWFhYIEl0J3Mgbm90IHF1aXRlIGNsZWFyIHdoaWNoIHBhcnQgb2YgdGhp cyBpcyBtYW5hZ2VkIGJ5IGluZGV4YW0gYW5kCisgKiB3aGF0J3MgdXAgdG8gdGhlIGFjdHVh bCBpbmRleCBBTSBpbXBsZW1lbnRhdGlvbi4gTmVlZHMgc29tZSBjbGVhcmVyCisgKiBib3Vu ZGFyaWVzLgorICoKKyAqIFhYWCBTaG91bGQgd2UgaGF2ZSBhIHBvaW50ZXIgZm9yIG9wdGlv bmFsIHN0YXRlIG1hbmFnZWQgYnkgdGhlIEFNPyBTb21lCisgKiBjdXN0b20gQU1zIG1heSBu ZWVkIG1vcmUgcGVyLWJhdGNoIGluZm9ybWF0aW9uLCBub3QganVzdCB0aGUgZmllbGRzIHdl CisgKiBoYXZlIGhlcmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0 YQoreworCS8qIGJhdGNoIHNpemUgLSBtYXhpbXVtLCBpbml0aWFsLCBjdXJyZW50ICh3aXRo IHJhbXAgdXApICovCisJaW50CQkJbWF4U2l6ZTsKKwlpbnQJCQlpbml0U2l6ZTsKKwlpbnQJ CQljdXJyU2l6ZTsKKworCS8qIG1lbW9yeSBjb250ZXh0IGZvciBwZXItYmF0Y2ggZGF0YSAq LworCU1lbW9yeUNvbnRleHQgY3R4OworCisJLyogYmF0Y2ggcHJlZmV0Y2hpbmcgKi8KKwlp bnQJCQlwcmVmZXRjaFRhcmdldDsgLyogY3VycmVudCBwcmVmZXRjaCBkaXN0YW5jZSAqLwor CWludAkJCXByZWZldGNoTWF4aW11bTsJLyogbWF4aW11bSBwcmVmZXRjaCBkaXN0YW5jZSAq LworCWludAkJCXByZWZldGNoSW5kZXg7CS8qIG5leHQgaXRlbSB0byBwcmVmZXRjaCAqLwor CisJSW5kZXhQcmVmZXRjaENhbGxiYWNrCXByZWZldGNoQ2FsbGJhY2s7CisJdm9pZAkJCQkg ICAqcHJlZmV0Y2hBcmd1bWVudDsKKworCS8qIGJhdGNoIGNvbnRlbnRzIChUSURzLCBpbmRl eCB0dXBsZXMsIGtpbGwgYml0bWFwLCAuLi4pICovCisJaW50CQkJY3VyckluZGV4OwkJLyog aW5kZXggb2YgdGhlIGN1cnJlbnQgaXRlbSAqLworCWludAkJCW5oZWFwdGlkczsJCS8qIG51 bWJlciBvZiBUSURzIGluIHRoZSBiYXRjaCAqLworCUl0ZW1Qb2ludGVyRGF0YSAqaGVhcHRp ZHM7CS8qIFRJRHMgaW4gdGhlIGJhdGNoICovCisJSW5kZXhUdXBsZSAqaXR1cHM7CQkJLyog SW5kZXhUdXBsZXMsIGlmIHJlcXVlc3RlZCAqLworCUhlYXBUdXBsZSAgKmh0dXBzOwkJCS8q IEhlYXBUdXBsZXMsIGlmIHJlcXVlc3RlZCAqLworCWJvb2wJICAgKnJlY2hlY2s7CQkvKiBy ZWNoZWNrIGZsYWdzICovCisJRGF0dW0JICAgKnByaXZhdGVEYXRhOwkvKiBwcml2YXRlIGRh dGEgZm9yIGJhdGNoICovCisKKwkvKiB4c19vcmRlcmJ5dmFscyAvIHhzX29yZGVyYnludWxs cyAqLworCURhdHVtCSAgICpvcmRlcmJ5dmFsczsKKwlib29sCSAgICpvcmRlcmJ5bnVsbHM7 CisKKwkvKiBsaXN0IG9mIGtpbGxlZCBpdGVtcyAqLworCWludAkJCW5LaWxsZWRJdGVtczsJ LyogbnVtYmVyIG9mIGtpbGxlZEl0ZW1zIGVsZW1lbnRzICovCisJaW50CQkgICAqa2lsbGVk SXRlbXM7CS8qIGxpc3Qgb2YgaW5kZXhlcyB0byBraWxsICovCit9IEluZGV4U2NhbkJhdGNo RGF0YTsKKwogLyogR2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCiB0 eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhCiB7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCmluZGV4IGFhYjU5ZDY4MWNmLi5hYThiYzk2Y2QzNyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKQEAgLTE2NTAsNiArMTY1MCw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKgkJ T3JkZXJCeVR5cEJ5VmFscyAgIGlzIHRoZSBkYXRhdHlwZSBvZiBvcmRlciBieSBleHByZXNz aW9uIHBhc3MtYnktdmFsdWU/CiAgKgkJT3JkZXJCeVR5cExlbnMJICAgdHlwbGVucyBvZiB0 aGUgZGF0YXR5cGVzIG9mIG9yZGVyIGJ5IGV4cHJlc3Npb25zCiAgKgkJUHNjYW5MZW4JCSAg IHNpemUgb2YgcGFyYWxsZWwgaW5kZXggc2NhbiBkZXNjcmlwdG9yCisgKgkJQ2FuQmF0Y2gJ CSAgIGJhdGNoaW5nIChhbmQgcHJlZmV0Y2hpbmcpIGVuYWJsZWQKICAqIC0tLS0tLS0tLS0t LS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKQEAgLTE2NzcsNiAr MTY3OCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogCWJvb2wJICAgKmlz c19PcmRlckJ5VHlwQnlWYWxzOwogCWludDE2CSAgICppc3NfT3JkZXJCeVR5cExlbnM7CiAJ U2l6ZQkJaXNzX1BzY2FuTGVuOworCisJLyogYmF0Y2hpbmcvcHJlZmV0Y2hpbmcgZW5hYmxl ZD8gKi8KKwlib29sCQlpc3NfQ2FuQmF0Y2g7CisKIH0gSW5kZXhTY2FuU3RhdGU7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2OTgsNiArMTcwMyw3IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4U2NhblN0YXRlCiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5k ZXgtb25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVt cyBvZiBuYW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFt ZUNTdHJpbmdDb3VudCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdB dHROdW1zIGFycmF5CisgKgkJQ2FuQmF0Y2gJCSAgIGJhdGNoaW5nIChhbmQgcHJlZmV0Y2hp bmcpIGVuYWJsZWQKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPbmx5U2NhblN0YXRlCkBAIC0xNzE5LDYgKzE3MjUsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwogCUF0dHJOdW1i ZXIgKmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWludAkJCWlvc3NfTmFtZUNTdHJpbmdD b3VudDsKKwlib29sCQlpb3NzX0NhbkJhdGNoOwogfSBJbmRleE9ubHlTY2FuU3RhdGU7CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKaW5kZXggZmFkN2ZjM2E3ZTAuLjE0YjM4ZWQ0ZDQ2IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTU3LDYgKzE1Nyw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUl JzsKICBlbmFibGVfaW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRl eG9ubHlzY2FuICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAg ICAgIHwgb24KKyBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nICAgICAgfCBvbgogIGVuYWJs ZV9tYXRlcmlhbCAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAg ICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBvbgpA QCAtMTcwLDcgKzE3MSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGlu Z3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMiByb3dzKQorKDIzIHJv d3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9y IHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3Ig YWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3Rh cnQuCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDVmYWJiMTI3ZDdlLi4zNTY3 YTFjMzE1ZiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMTksNiArMTIx OSw3IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtl eUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2hEYXRhCiBJbmRleFNjYW5EZXNjCiBJ bmRleFNjYW5TdGF0ZQogSW5kZXhTdGF0ZUZsYWdzQWN0aW9uCkBAIC0zMjg0LDYgKzMyODUs NyBAQCBhbWVuZHNjYW5fZnVuY3Rpb24KIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rp b24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHR1cGxlX2Z1bmN0aW9uCithbWdldGJh dGNoX2Z1bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5fZnVuY3Rpb24KIGFtaW5zZXJ0X2Z1 bmN0aW9uCiBhbWluc2VydGNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNDYuMQoK --------------AwhMDARAWMF3JACXnrsprk8G Content-Type: text/x-patch; charset=UTF-8; name="v20240930-0002-WIP-batching-for-nbtree-indexes.patch" Content-Disposition: attachment; filename="v20240930-0002-WIP-batching-for-nbtree-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSBiNjdhMGVjNzViNjY3ODBlMGFiYjZlZjc4ZmYxY2M2M2NmNzU1ZjE2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODozOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQwOTMwIDIvNl0gV0lQOiBiYXRjaGluZyBmb3IgbmJ0cmVlIGluZGV4ZXMKCkFkZHMg YmF0Y2hpbmcvcHJlZmV0Y2hpbmcgZm9yIGJ0cmVlIGluZGV4ZXMuIFJldHVybnMgb25seSBi YXRjaGVzIGZyb20gYQpzaW5nbGUgbGVhZiBwYWdlLiBEb2VzIG5vdCBzdXBwb3J0IG1hcmsv cmVzdG9yZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAg ICB8ICA2NSArKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMg fCAyODAgKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9u YnRyZWUuaCAgICAgICAgICAgfCAgMTUgKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICAgfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAzNjEgaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IDU2ZTUwMmM0ZmM5Li5l NjdiMzkzODEyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNDIs NiArMTQyLDcgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5h bWJlZ2luc2NhbiA9IGJ0YmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBidHJl c2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBidGdldHR1cGxlOworCWFtcm91dGlu ZS0+YW1nZXRiYXRjaCA9IGJ0Z2V0YmF0Y2g7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9 IGJ0Z2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYnRlbmRzY2FuOwogCWFt cm91dGluZS0+YW1tYXJrcG9zID0gYnRtYXJrcG9zOwpAQCAtMjYwLDYgKzI2MSw1MyBAQCBi dGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcmV0 dXJuIHJlczsKIH0KIAorLyoKKyAqCWJ0Z2V0YmF0Y2goKSAtLSBHZXQgdGhlIG5leHQgYmF0 Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuLgorICoKKyAqIFhYWCBQcmV0dHkgbXVjaCBsaWtl IGJ0Z2V0dHVwbGUoKSwgYnV0IGZvciBiYXRjaGVzIG9mIHR1cGxlcy4KKyAqLworYm9vbAor YnRnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorewor CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlib29s CQlyZXM7CisKKwkvKiBidHJlZSBpbmRleGVzIGFyZSBuZXZlciBsb3NzeSAqLworCXNjYW4t PnhzX3JlY2hlY2sgPSBmYWxzZTsKKworCS8qIEVhY2ggbG9vcCBpdGVyYXRpb24gcGVyZm9y bXMgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLworCWRvCisJeworCQkvKgorCQkg KiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwgd2UgY2FuIGp1c3Qg YWR2YW5jZSBpdCBpbgorCQkgKiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2Ug aGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbAorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQg dGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCisJCSAqLworCQlpZiAoIUJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKQorCQkJcmVzID0gX2J0X2ZpcnN0X2JhdGNoKHNjYW4sIGRp cik7CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91 bGQga2lsbCB0dXBsZXMgZnJvbSB0aGUgcHJldmlvdXMgYmF0Y2guCisJCQkgKi8KKwkJCV9i dF9raWxsX2JhdGNoKHNjYW4pOworCisJCQkvKgorCQkJICogTm93IGNvbnRpbnVlIHRoZSBz Y2FuLgorCQkJICovCisJCQlyZXMgPSBfYnRfbmV4dF9iYXRjaChzY2FuLCBkaXIpOworCQl9 CisKKwkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCisJCWlmIChy ZXMpCisJCQlicmVhazsKKworCQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBuZWVkIGFu b3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KKwl9IHdoaWxlIChzby0+bnVtQXJyYXlL ZXlzICYmIF9idF9zdGFydF9wcmltX3NjYW4oc2NhbiwgZGlyKSk7CisKKwlyZXR1cm4gcmVz OworfQorCiAvKgogICogYnRnZXRiaXRtYXAoKSAtLSBnZXRzIGFsbCBtYXRjaGluZyB0dXBs ZXMsIGFuZCBhZGRzIHRoZW0gdG8gYSBiaXRtYXAKICAqLwpAQCAtMzM5LDYgKzM4NywxMCBA QCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykK IAlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICovCiAJc28tPm51 bUtpbGxlZCA9IDA7CiAKKwkvKiBiYXRjaCByYW5nZSwgaW5pdGlhbGx5IGVtcHR5ICovCisJ c28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsKKwlzby0+YmF0Y2gubGFzdEluZGV4ID0gLTE7 CisKIAkvKgogCSAqIFdlIGRvbid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBi ZSBpbmRleC1vbmx5LCBzbyB3ZSBkbyBub3QKIAkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29y a3NwYWNlIGFycmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cApAQCAt MzY1LDYgKzQxNyw5IEBAIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBz Y2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFk IGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwogCWlmIChCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSkKIAl7CisJCS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9t IHRoZSBiYXRjaCB0byB0aGUgcmVndWxhciBhcnJheS4gKi8KKwkJX2J0X2tpbGxfYmF0Y2go c2Nhbik7CisKIAkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwogCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCiAJCQlfYnRf a2lsbGl0ZW1zKHNjYW4pOwpAQCAtNDA3LDYgKzQ2MiwxMCBAQCBidHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJbWVtY3B5 KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihT Y2FuS2V5RGF0YSkpOwogCXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0X3By ZXByb2Nlc3Nfa2V5cyBzZXRzIGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBk aXR0byAqLworCisJLyogUmVzZXQgdGhlIGJhdGNoIChldmVuIGlmIG5vdCBiYXRjaGVkIHNj YW4pICovCisJc28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsKKwlzby0+YmF0Y2gubGFzdElu ZGV4ID0gLTE7CiB9CiAKIC8qCkBAIC00MjAsNiArNDc5LDkgQEAgYnRlbmRzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbikKIAkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2Nrcywg YnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KIAlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpCiAJeworCQkvKiBUcmFuc2ZlciBraWxsZWQgaXRlbXMgZnJvbSB0aGUgYmF0 Y2ggdG8gdGhlIHJlZ3VsYXIgYXJyYXkuICovCisJCV9idF9raWxsX2JhdGNoKHNjYW4pOwor CiAJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxs ZWQgaXRlbXMgKi8KIAkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQogCQkJX2J0X2tpbGxpdGVt cyhzY2FuKTsKQEAgLTUwMCw2ICs1NjIsOSBAQCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKIAkJICovCiAJCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKIAkJ eworCQkJLyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSBy ZWd1bGFyIGFycmF5LiAqLworCQkJX2J0X2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJCS8qIEJl Zm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMg Ki8KIAkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKIAkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4p OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggZmZmN2M4OWVh ZGIuLjY2Y2EwNjRiN2U4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNo LmMKQEAgLTE1MzEsNiArMTUzMSwyODMgQEAgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorCitzdGF0aWMgdm9p ZAorQXNzZXJ0Q2hlY2tCVEJhdGNoSW5mbyhCVFNjYW5PcGFxdWUgc28pCit7CisjaWZkZWYg VVNFX0FTU0VSVF9DSEVDS0lORworCS8qIHNob3VsZCBiZSB2YWxpZCBpdGVtcyAod2l0aCBy ZXNwZWN0IHRvIHRoZSBjdXJyZW50IGxlYWYgcGFnZSkgKi8KKwlBc3NlcnQoc28tPmN1cnJQ b3MuZmlyc3RJdGVtIDw9IHNvLT5iYXRjaC5maXJzdEluZGV4KTsKKwlBc3NlcnQoc28tPmJh dGNoLmZpcnN0SW5kZXggPD0gc28tPmJhdGNoLmxhc3RJbmRleCk7CisJQXNzZXJ0KHNvLT5i YXRjaC5sYXN0SW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworI2VuZGlmCit9CisK Ky8qCisgKiBfYnRfY29weV9iYXRjaAorICoJCUNvcHkgYSBzZWN0aW9uIG9mIHRoZSBsZWFm IHBhZ2UgaW50byB0aGUgYmF0Y2guCisgKi8KK3N0YXRpYyB2b2lkCitfYnRfY29weV9iYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBCVFNjYW5PcGFxdWUg c28sCisJCQkgICBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJLyoKKwkgKiBXZSdyZSByZWFk aW5nIHRoZSBmaXJzdCBiYXRjaCwgYW5kIHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVh c3Qgb25lCisJICogaXRlbSAob3RoZXJ3aXNlIF9idF9maXJzdCB3b3VsZCByZXR1cm4gZmFs c2UpLiBTbyB3ZSBzaG91bGQgbmV2ZXIgZ2V0CisJICogaW50byBzaXR1YXRpb24gd2l0aCBl bXB0eSBzdGFydC9lbmQgcmFuZ2UuIEluIHRoZSB3b3JzdCBjYXNlLCB0aGVyZSBpcworCSAq IGp1c3QgYSBzaW5nbGUgaXRlbSwgaW4gd2hpY2ggY2FzZSAoc3RhcnQgPT0gZW5kKS4KKwkg Ki8KKwlBc3NlcnQoc3RhcnQgPD0gZW5kKTsKKworCS8qIFRoZSByYW5nZSBvZiBpdGVtcyBz aG91bGQgZml0IGludG8gdGhlIGN1cnJlbnQgYmF0Y2ggc2l6ZS4gKi8KKwlBc3NlcnQoKGVu ZCAtIHN0YXJ0ICsgMSkgPD0gc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplKTsKKworCXNvLT5i YXRjaC5maXJzdEluZGV4ID0gc3RhcnQ7CisJc28tPmJhdGNoLmxhc3RJbmRleCA9IGVuZDsK KworCUFzc2VydENoZWNrQlRCYXRjaEluZm8oc28pOworCisJLyoKKwkgKiBXYWxrIHRocm91 Z2ggdGhlIHJhbmdlIG9mIGluZGV4IHR1cGxlcywgY29weSB0aGVtIGludG8gdGhlIGJhdGNo LiBJZgorCSAqIHJlcXVlc3RlZCwgc2V0IHRoZSBpbmRleCB0dXBsZSB0b28uCisJICoKKwkg KiBXZSBkb24ndCBrbm93IGlmIHRoZSBiYXRjaCBpcyBmdWxsIGFscmVhZHkgLSB3ZSBqdXN0 IHRyeSB0byBhZGQgaXQsIGFuZAorCSAqIGJhaWwgb3V0IGlmIGl0IGZhaWxzLgorCSAqCisJ ICogRklYTUUgVGhpcyBzZWVtcyB3cm9uZywgYWN0dWFsbHkuIFdlIHVzZSBjdXJyU2l6ZSB3 aGVuIGNhbGN1bGF0aW5nIHRoZQorCSAqIHN0YXJ0L2VuZCByYW5nZSwgc28gdGhlIGFkZCBz aG91bGQgYWx3YXlzIHN1Y2NlZWQuCisJICovCisJd2hpbGUgKHN0YXJ0IDw9IGVuZCkKKwl7 CisJCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3N0YXJ0 XTsKKwkJSW5kZXhUdXBsZQlpdHVwID0gTlVMTDsKKworCQlpZiAoc2Nhbi0+eHNfd2FudF9p dHVwKQorCQkJaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRl bS0+dHVwbGVPZmZzZXQpOworCisJCS8qIHRyeSB0byBhZGQgaXQgdG8gYmF0Y2gsIGlmIHRo ZXJlJ3Mgc3BhY2UgKi8KKwkJaWYgKCFpbmRleF9iYXRjaF9hZGQoc2NhbiwgY3Vyckl0ZW0t PmhlYXBUaWQsIHNjYW4tPnhzX3JlY2hlY2ssIGl0dXAsIE5VTEwpKQorCQkJYnJlYWs7CisK KwkJc3RhcnQrKzsKKwl9CisKKwkvKgorCSAqIHNldCB0aGUgc3RhcnRpbmcgcG9pbnQKKwkg KgorCSAqIFhYWCBtaWdodCBiZSBiZXR0ZXIgZG9uZSBpbiBpbmRleGFtLmMKKwkgKi8KKwlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlzY2FuLT54c19iYXRjaC0+Y3Vy ckluZGV4ID0gLTE7CisJZWxzZQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gc2Nh bi0+eHNfYmF0Y2gtPm5oZWFwdGlkczsKKworCS8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0 byBlbmQgaGVyZSB3aXRoIGFuIGVtcHR5IGJhdGNoICovCisJQXNzZXJ0KHNjYW4tPnhzX2Jh dGNoLT5uaGVhcHRpZHMgPiAwKTsKK30KKworLyoKKyAqCV9idF9maXJzdF9iYXRjaCgpIC0t IEZpbmQgdGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KKyAqCisgKiBBIGJhdGNoIHZhcmlh bnQgb2YgX2J0X2ZpcnN0KCkuIE1vc3Qgb2YgdGhlIGNvbW1lbnRzIGZvciB0aGF0IGZ1bmN0 aW9uCisgKiBhcHBseSBoZXJlIHRvby4KKyAqCisgKiBYWFggVGhpcyBvbmx5IHBvcHVsYXRl cyB0aGUgYmF0Y2gsIGl0IGRvZXMgbm90IHNldCBhbnkgb3RoZXIgZmllbGRzIGxpa2UKKyAq IHNjYW4tPnhzX2hlYXB0aWQgb3Igc2Nhbi0+eHNfaXR1cC4gVGhhdCBoYXBwZW5zIGluIGdl dG5leHRfdGlkKCkgY2FsbHMuCisgKgorICogWFhYIEknbSBub3Qgc3VyZSBpdCB3b3JrcyB0 byBtaXggYmF0Y2hlZCBhbmQgbm9uLWJhdGNoZXMgY2FsbHMsIGUuZy4gZ2V0CisgKiBhIFRJ RCBhbmQgdGhlbiBhIGJhdGNoIG9mIFRJRHMuIEl0IHByb2JhYmx5IHNob3VsZCB3b3JrIGFz IGxvbmcgYXMgd2UKKyAqIHVwZGF0ZSBpdGVtSW5kZXggY29ycmVjdGx5LCBidXQgd2UgbmVl ZCB0byBiZSBjYXJlZnVsIGFib3V0IGtpbGxlZCBpdGVtcworICogKHJpZ2h0IG5vdyB0aGUg dHdvIHBsYWNlcyB1c2UgZGlmZmVyZW50IHdheXMgdG8gY29tbXVuaWNhdGUgd2hpY2ggaXRl bXMKKyAqIHNob3VsZCBiZSBraWxsZWQpLgorICovCitib29sCitfYnRfZmlyc3RfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwlCVFNjYW5PcGFx dWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisKKwlBc3NlcnQoc2Nhbi0+ eHNfYmF0Y2gtPm5oZWFwdGlkcyA9PSAwKTsKKworCS8qCisJICogTWFyayB0aGUgYmF0Y2gg YXMgZW1wdHkuCisJICoKKwkgKiBUaGlzIG1pZ2h0IHNlZW1zIGEgYml0IHN0cmFuZ2UsIGJl Y2F1c2Ugc3VyZWx5IHRoZSBiYXRjaCBzaG91bGQgYmUKKwkgKiBlbXB0eSBiZWZvcmUgcmVh ZGluZyB0aGUgZmlyc3QgYmF0Y2ggKHdlIHJlc2V0IHRob3NlIGluZGV4ZXMgYm90aCBpbgor CSAqIGJ0YmVnaW5zY2FuIGFuZCBidHJlc2NhbikuIFNvIHdoeSBub3QgYW4gYXNzZXJ0PyBX ZSBjYW4gZ2V0IGhlcmUgaW4KKwkgKiBkaWZmZXJlbnQgd2F5cyB0b28gLSBub3QganVzdCBh ZnRlciBiZWdpbnNjYW4vcmVzY2FuLCBidXQgYWxzbyB3aGVuCisJICogaXRlcmF0aW5nIG92 ZXIgU2NhbGFyQXJyYXlPcHMgLSBpbiB3aGljaCBjYXNlIHdlJ2xsIHNlZSB0aGUgbGFzdCBi YXRjaAorCSAqIG9mIHRoZSBwcmVjZWRpbmcgc2Nhbi4KKwkgKi8KKwlzby0+YmF0Y2guZmly c3RJbmRleCA9IC0xOworCXNvLT5iYXRjaC5sYXN0SW5kZXggPSAtMTsKKworCS8qIHdlIGhh dmVuJ3QgdmlzaXRlZCBhbnkgbGVhZiBwYWdlcyB5ZXQsIHNvIHByb2NlZWQgdG8gcmVhZGlu ZyBvbmUgKi8KKwlpZiAoX2J0X2ZpcnN0KHNjYW4sIGRpcikpCisJeworCQkvKiByYW5nZSBv ZiB0aGUgbGVhZiB0byBjb3B5IGludG8gdGhlIGJhdGNoICovCisJCWludAkJCXN0YXJ0LAor CQkJCQllbmQ7CisKKwkJLyogZGV0ZXJtaW5lIHdoaWNoIHBhcnQgb2YgdGhlIGxlYWYgcGFn ZSB0byBleHRyYWN0ICovCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJ CXsKKwkJCXN0YXJ0ID0gc28tPmN1cnJQb3MuZmlyc3RJdGVtOworCQkJZW5kID0gTWluKHN0 YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLCBzby0+Y3VyclBvcy5sYXN0 SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoZW5kICsgMSk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQllbmQgPSBzby0+Y3VyclBvcy5sYXN0SXRlbTsKKwkJCXN0YXJ0ID0g TWF4KGVuZCAtIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoc3RhcnQg LSAxKTsKKwkJfQorCisJCS8qCisJCSAqIENvcHkgdGhlIHNlbGVjdGVkIHJhbmdlIG9mIGl0 ZW1zIGludG8gdGhlIGJhdGNoLCBzZXQgdGhlIGJhdGNoCisJCSAqIGN1cnJlbnQgaW5kZXgg cHJvcGVybHkgKGJlZm9yZSBmaXJzdCAvIGFmdGVyIGxhc3QgaXRlbSwgZGVwZW5kaW5nCisJ CSAqIG9uIHNjYW4gZGlyZWN0aW9uLgorCQkgKi8KKwkJX2J0X2NvcHlfYmF0Y2goc2Nhbiwg ZGlyLCBzbywgc3RhcnQsIGVuZCk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICoJX2J0X25leHRfYmF0Y2goKSAtLSBHZXQgdGhlIG5leHQg YmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgorICoKKyAqIEEgYmF0Y2ggdmFyaWFudCBvZiBf YnRfbmV4dCgpLiBNb3N0IG9mIHRoZSBjb21tZW50cyBmb3IgdGhhdCBmdW5jdGlvbgorICog YXBwbHkgaGVyZSB0b28uCisgKgorICogV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgb25seSB3 aGVuIHRoZSBjdXJyZW50IGJhdGNoIGhhcyBubyBtb3JlIGl0ZW1zCisgKiBpbiB0aGUgZ2l2 ZW4gZGlyZWN0aW9uLiBXZSBkb24ndCBnZXQgaGVyZSB3aXRoIGVtcHR5IGJhdGNoZXMsIHRo YXQncworICogaGFuZGxlZCBieSBfYnRfZmlzdF9iYXRjaCgpLgorICoKKyAqIFhYWCBTZWUg YWxzbyB0aGUgY29tbWVudHMgYXQgX2J0X2ZpcnN0X2JhdGNoKCkgYWJvdXQgcmV0dXJuaW5n IGEgc2luZ2xlCisgKiBiYXRjaCBmb3IgdGhlIHBhZ2UsIGV0Yy4KKyAqLworYm9vbAorX2J0 X25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sK KwlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisKKwlp bnQJCQlzdGFydCwKKwkJCQllbmQ7CisKKwlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gtPm5oZWFw dGlkcyA9PSAwKTsKKworCUFzc2VydENoZWNrQlRCYXRjaEluZm8oc28pOworCisJLyoKKwkg KiBDaGVjayBpZiB3ZSBzdGlsbCBoYXZlIHNvbWUgaXRlbXMgb24gdGhlIGN1cnJlbnQgbGVh ZiBwYWdlLiBJZiB5ZXMsCisJICogbG9hZCB0aGVtIGludG8gYSBiYXRjaCBhbmQgcmV0dXJu LgorCSAqCisJICogWFhYIHRyeSBjb21iaW5pbmcgdGhhdCB3aXRoIHRoZSBuZXh0IGJsb2Nr LCB0aGUgaW5uZXIgd2hpbGUgbG9vcCBpcworCSAqIGV4YWN0bHkgdGhlIHNhbWUuCisJICov CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwl7CisJCXN0YXJ0ID0gc28t PmJhdGNoLmxhc3RJbmRleCArIDE7CisJCWVuZCA9IE1pbihzdGFydCArIChzY2FuLT54c19i YXRjaC0+Y3VyclNpemUgLSAxKSwgc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlzby0+Y3Vy clBvcy5pdGVtSW5kZXggPSAoZW5kICsgMSk7CisJfQorCWVsc2UKKwl7CisJCWVuZCA9IHNv LT5iYXRjaC5maXJzdEluZGV4IC0gMTsKKwkJc3RhcnQgPSBNYXgoZW5kIC0gKHNjYW4tPnhz X2JhdGNoLT5jdXJyU2l6ZSAtIDEpLAorCQkJCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwor CQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoc3RhcnQgLSAxKTsKKwl9CisKKwkvKgorCSAq IFdlIGhhdmUgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVudCBsZWFmIHBhZ2UuCisJICovCisJ aWYgKHN0YXJ0IDw9IGVuZCkKKwl7CisJCV9idF9jb3B5X2JhdGNoKHNjYW4sIGRpciwgc28s IHN0YXJ0LCBlbmQpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIFdlJ3ZlIGNv bnN1bWVkIGFsbCBpdGVtcyBmcm9tIHRoZSBjdXJyZW50IGxlYWYgcGFnZSwgc28gdHJ5IHJl YWRpbmcgdGhlCisJICogbmV4dCBvbmUsIGFuZCBwcm9jZXNzIGl0LgorCSAqLworCWlmIChf YnRfbmV4dChzY2FuLCBkaXIpKQorCXsKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2Ugc3RpbGwg aGF2ZSBzb21lIGl0ZW1zIG9uIHRoZSBjdXJyZW50IGxlYWYgcGFnZS4gSWYgeWVzLAorCQkg KiBsb2FkIHRoZW0gaW50byBhIGJhdGNoIGFuZCByZXR1cm4uCisJCSAqCisJCSAqIFhYWCB0 cnkgY29tYmluaW5nIHRoYXQgd2l0aCB0aGUgbmV4dCBibG9jaywgdGhlIGlubmVyIHdoaWxl IGxvb3AgaXMKKwkJICogZXhhY3RseSB0aGUgc2FtZS4KKwkJICovCisJCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCXsKKwkJCXN0YXJ0ID0gc28tPmN1cnJQb3MuZmly c3RJdGVtOworCQkJZW5kID0gTWluKHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6 ZSAtIDEpLCBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5k ZXggPSAoZW5kICsgMSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQllbmQgPSBzby0+Y3VyclBv cy5sYXN0SXRlbTsKKwkJCXN0YXJ0ID0gTWF4KGVuZCAtIChzY2FuLT54c19iYXRjaC0+Y3Vy clNpemUgLSAxKSwKKwkJCQkJCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7CisJCQlzby0+Y3Vy clBvcy5pdGVtSW5kZXggPSAoc3RhcnQgLSAxKTsKKwkJfQorCisJCV9idF9jb3B5X2JhdGNo KHNjYW4sIGRpciwgc28sIHN0YXJ0LCBlbmQpOworCisJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqCV9idF9raWxsX2JhdGNoKCkgLS0gcmVtZW1i ZXIgdGhlIGl0ZW1zLXRvLWJlLWtpbGxlZCBmcm9tIHRoZSBjdXJyZW50IGJhdGNoCisgKgor ICogV2Ugc2ltcGx5IHRyYW5zbGF0ZSB0aGUgYml0bWFwIGludG8gdGhlICJyZWd1bGFyIiBr aWxsZWRJdGVtcyBhcnJheSwgYW5kIGxldAorICogdGhhdCB0byBkcml2ZSB3aGljaCBpdGVt cyBhcmUga2lsbGVkLgorICovCit2b2lkCitfYnRfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNj IHNjYW4pCit7CisJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOworCisJLyogYmFpbCBvdXQgaWYgYmF0Y2hpbmcgbm90IGVuYWJsZWQgKi8KKwlpZiAo IXNjYW4tPnhzX2JhdGNoKQorCQlyZXR1cm47CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHNj YW4tPnhzX2JhdGNoLT5uS2lsbGVkSXRlbXM7IGkrKykKKwl7CisJCWludAkJCWluZGV4ID0g KHNvLT5iYXRjaC5maXJzdEluZGV4ICsgc2Nhbi0+eHNfYmF0Y2gtPmtpbGxlZEl0ZW1zW2ld KTsKKworCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGluZGV4IChpbiB0aGUgY3Vy cmVudCBsZWFmIHBhZ2UpICovCisJCUFzc2VydCgoc28tPmJhdGNoLmZpcnN0SW5kZXggPD0g aW5kZXgpICYmCisJCQkgICAoaW5kZXggPD0gc28tPmJhdGNoLmxhc3RJbmRleCkpOworCisJ CS8qCisJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRo IGFsbCBzdWNoIHR1cGxlcyBhdAorCQkgKiBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRo ZSBpbmRleCBwYWdlLikgIFRoZSB0ZXN0IGZvciBudW1LaWxsZWQKKwkJICogb3ZlcnJ1biBp cyBub3QganVzdCBwYXJhbm9pYTogaWYgdGhlIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24g aW4KKwkJICogdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVu dGVyZWQgbXVsdGlwbGUgdGltZXMuCisJCSAqIEl0J3Mgbm90IHdvcnRoIHRyeWluZyB0byBv cHRpbWl6ZSB0aGF0LCBzbyB3ZSBkb24ndCBkZXRlY3QgaXQsIGJ1dAorCQkgKiBpbnN0ZWFk IGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KKwkJICovCisJCWlmIChzby0+a2ls bGVkSXRlbXMgPT0gTlVMTCkKKwkJCXNvLT5raWxsZWRJdGVtcyA9IChpbnQgKikKKwkJCQlw YWxsb2MoTWF4VElEc1BlckJUcmVlUGFnZSAqIHNpemVvZihpbnQpKTsKKwkJaWYgKHNvLT5u dW1LaWxsZWQgPCBNYXhUSURzUGVyQlRyZWVQYWdlKQorCQkJc28tPmtpbGxlZEl0ZW1zW3Nv LT5udW1LaWxsZWQrK10gPSBpbmRleDsKKwl9CisKKwkvKiBub3cgcmVzZXQgdGhlIG51bWJl ciBvZiBraWxsZWQgaXRlbXMgKi8KKwlzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zID0g MDsKK30KKwogLyoKICAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJl bnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCiAgKgpAQCAtMjA1Miw2ICsyMzI5LDkg QEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAKIAlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwogCisJLyogVHJh bnNmZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5 LiAqLworCV9idF9raWxsX2JhdGNoKHNjYW4pOworCiAJLyogQmVmb3JlIGxlYXZpbmcgY3Vy cmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwogCWlmIChzby0+bnVt S2lsbGVkID4gMCkKIAkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApp bmRleCBkNjQzMDBmYjk3My4uZGYzMjM4MmIzMTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAg LTEwMzcsNiArMTAzNywxNCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCURh dHVtCSAgICplbGVtX3ZhbHVlczsJLyogYXJyYXkgb2YgbnVtX2VsZW1zIERhdHVtcyAqLwog fSBCVEFycmF5S2V5SW5mbzsKIAorLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQg YmF0Y2ggKGluIGJhdGNoZWQgaW5kZXggc2NhbnMpICovCit0eXBlZGVmIHN0cnVjdCBCVEJh dGNoSW5mbworeworCS8qIEN1cnJlbnQgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBiYXRjaCAoaWYg dXNlZCkuICovCisJaW50CQkJZmlyc3RJbmRleDsKKwlpbnQJCQlsYXN0SW5kZXg7Cit9IEJU QmF0Y2hJbmZvOworCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJLyog dGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAt MTA1Niw2ICsxMDY0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCWlu dAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVk IGl0ZW1zICovCiAJaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBz dG9yZWQgaXRlbXMgKi8KIAorCS8qIGluZm8gYWJvdXQgY3VycmVudCBiYXRjaCAqLworCUJU QmF0Y2hJbmZvIGJhdGNoOworCiAJLyoKIAkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgt b25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKIAkgKiB3b3Jrc3BhY2Vz IGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9m IHNpemUKQEAgLTExNzIsNiArMTE4Myw3IEBAIGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVn aW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVy biBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz KTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQpOwogZXh0 ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKK2V4dGVybiBib29sIGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNj YW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOwpAQCAtMTI3Nyw2ICsxMjg5LDkgQEAg ZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBC VEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFyZShS ZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVy IG9mZm51bSk7CiBleHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIF9idF9maXJzdF9iYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29s IF9idF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIHZvaWQgX2J0X2tpbGxfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4 dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZl bCwgYm9vbCByaWdodG1vc3QpOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCAzNTY3YTFjMzE1Zi4uYmU4OWJlOTg3YTIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0xODgsNiArMTg4LDcgQEAgQk9PTAogQk9PTEVBTgogQk9YCiBCVEFycmF5 S2V5SW5mbworQlRCYXRjaEluZm8KIEJUQnVpbGRTdGF0ZQogQlRDeWNsZUlkCiBCVERlZHVw SW50ZXJ2YWwKLS0gCjIuNDYuMQoK --------------AwhMDARAWMF3JACXnrsprk8G Content-Type: text/x-patch; charset=UTF-8; name="v20240930-0003-PoC-support-for-mark-restore-for-nbtree.patch" Content-Disposition: attachment; filename*0="v20240930-0003-PoC-support-for-mark-restore-for-nbtree.patch" Content-Transfer-Encoding: base64 RnJvbSAwM2Y2NGIwYTEyMmRhOTc1NTk4MDQ5NzE1YjA5NzFmMGY1NGE0MzY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQwOTMwIDMvNl0gUG9DOiBzdXBwb3J0IGZvciBtYXJrL3Jlc3RvcmUgZm9yIG5idHJl ZQoKQWRkcyBzdXBwb3J0IGZvciBiYXRjaGluZyBmb3IgbWFyay9yZXN0b3JlIHdpdGggYnRy ZWUgaW5kZXhlcywgd2hpY2gKbWFrZXMgcHJlZmV0Y2hpbmcgd29yayB3aXRoIG1lcmdlam9p bnMsIGZvciBleGFtcGxlLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFt LmMgICAgICAgfCAgNDAgKysrKy0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMgICAgICAgfCAxMTEgKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgfCAgMTEgKy0tCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhzY2FuLmMgICAgIHwgIDExICstLQogc3JjL2luY2x1ZGUvYWNjZXNz L25idHJlZS5oICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oICAgICAgICAgICAgIHwgICA2ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDE1MiBpbnNl cnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YW0uYwppbmRleCAyODQ5YWI5N2NkZi4uYjExNzg1M2Y4ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YW0uYwpAQCAtNDk3LDE2ICs0OTcsOSBAQCBpbmRleF9yZXN0cnBvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt cmVzdHJwb3Moc2Nhbik7CiAKIAkvKgotCSAqIFJlc2V0IHRoZSBiYXRjaCwgdG8gbWFrZSBp dCBsb29rIGVtcHR5LgotCSAqCi0JICogRG9uZSBhZnRlciB0aGUgYW1yZXNjYW4oKSBjYWxs LCBpbiBjYXNlIHRoZSBBTSBuZWVkcyBzb21lIG9mIHRoZSBiYXRjaAotCSAqIGluZm8gKGUu Zy4gdG8gcHJvcGVybHkgdHJhbnNmZXIgdGhlIGtpbGxlZCB0dXBsZXMpLgotCSAqCi0JICog WFhYIFRoaXMgaXMgYSBiaXQgbWlzbGVhZGluZywgYmVjYXVzZSBpbmRleF9iYXRjaF9yZXNl dCBkb2VzIG5vdCByZXNldAotCSAqIHRoZSBraWxsZWQgdHVwbGVzLiBTbyBpZiB0aGF0J3Mg dGhlIG9ubHkganVzdGlmaWNhdGlvbiwgd2UgY291bGQgaGF2ZQotCSAqIGRvbmUgaXQgYmVm b3JlIHRoZSBjYWxsLgorCSAqIERvbid0IHJlc2V0IHRoZSBiYXRjaCBoZXJlIC0gYW1yZXN0 cnBvcyBzaG91bGQgaGF2ZSBoYXMgYWxyZWFkeSBsb2FkZWQKKwkgKiB0aGUgbmV3IGJhdGNo LCBzbyBkb24ndCB0aHJvdyB0aGF0IGF3YXkuCiAJICovCi0JaW5kZXhfYmF0Y2hfcmVzZXQo c2Nhbik7CiB9CiAKIC8qCkBAIC0xMjk5LDEyICsxMjkyLDkgQEAgaW5kZXhfb3BjbGFzc19v cHRpb25zKFJlbGF0aW9uIGluZHJlbCwgQXR0ck51bWJlciBhdHRudW0sIERhdHVtIGF0dG9w dGlvbnMsCiAgKgogICogV2l0aCBiYXRjaGluZywgdGhlIGluZGV4IEFNIGRvZXMgbm90IGtu b3cgdGhlIHRoZSAiY3VycmVudCIgcG9zaXRpb24gb24KICAqIHRoZSBsZWFmIHBhZ2UgLSB3 ZSBkb24ndCBwcm9wYWdhdGUgdGhpcyB0byB0aGUgaW5kZXggQU0gd2hpbGUgd2Fsa2luZwot ICogaXRlbXMgaW4gdGhlIGJhdGNoLiBUbyBtYWtlIGFtbWFya3BvcygpIHdvcmssIHRoZSBp bmRleCBBTSBoYXMgdG8gY2hlY2sKKyAqIGl0ZW1zIGluIHRoZSBiYXRjaC4gVG8gbWFrZSBh bW1hcmtwb3MoKSB3b3JrLCB0aGUgaW5kZXggQU0gY2FuIGNoZWNrCiAgKiB0aGUgY3VycmVu dCBwb3NpdGlvbiBpbiB0aGUgYmF0Y2gsIGFuZCB0cmFuc2xhdGUgaXQgdG8gdGhlIHByb3Bl ciBwYWdlCiAgKiBwb3NpdGlvbiwgdXNpbmcgdGhlIHByaXZhdGUgaW5mb3JtYXRpb24gKGFi b3V0IGl0ZW1zIGluIHRoZSBiYXRjaCkuCi0gKgotICogWFhYIFRoaXMgbmVlZHMgbW9yZSB3 b3JrLCBJIGRvbid0IHF1aXRlIGxpa2UgaG93IHRoZSB0d28gbGF5ZXJzIGludGVyYWN0LAot ICogaXQgc2VlbXMgcXVpdGUgd3JvbmcgdG8gbG9vayBhdCB0aGUgYmF0Y2ggaW5mbyBkaXJl Y3RseS4KICAqLwogCiAvKgpAQCAtMTM3Miw5ICsxMzYyLDE3IEBAIEFzc2VydENoZWNrQmF0 Y2hJbmZvKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJKChzY2FuKS0+eHNfYmF0Y2gtPm5oZWFw dGlkcyA9PSAoKHNjYW4pLT54c19iYXRjaC0+Y3VyckluZGV4ICsgMSkpIDogXAogCQkoKHNj YW4pLT54c19iYXRjaC0+Y3VyckluZGV4ID09IDApKQogCi0vKiBEb2VzIHRoZSBiYXRjaCBp dGVtcyBpbiB0aGUgcmVxdWVzdGVkIGRpcmVjdGlvbj8gKi8KKy8qCisgKiBEb2VzIHRoZSBi YXRjaCBpdGVtcyBpbiB0aGUgcmVxdWVzdGVkIGRpcmVjdGlvbj8gVGhlIGJhdGNoIG11c3Qg YmUgbm9uLWVtcHR5CisgKiBhbmQgd2Ugc2hvdWxkIG5vdCBoYXZlIHJlYWNoZWQgdGhlIGVu ZCBvZiB0aGUgYmF0Y2ggKGluIHRoZSBkaXJlY3Rpb24pLgorICogQWxzbywgaWYgd2UganVz dCByZXN0b3JlZCB0aGUgcG9zaXRpb24gYWZ0ZXIgbWFyay9yZXN0b3JlLCB0aGVyZSBzaG91 bGQgYmUKKyAqIGF0IGxlYXN0IG9uZSBpdGVtIHRvIHByb2Nlc3MgKHdlIHdvbid0IGFkdmFu Y2UgIG9uIHRoZSBuZXh0IGNhbGwpLgorICoKKyAqIFhYWCBUaGlzIGlzIGEgYml0IGNvbmZ1 c2luZyAvIHVnbHksIHByb2JhYmx5IHNob3VsZCByZXRoaW5rIGhvdyB3ZSB0cmFjaworICog ZW1wdHkgYmF0Y2hlcywgYW5kIGhvdyB3ZSBoYW5kbGUgbm90IGFkdmFuY2luZyBhZnRlciBh IHJlc3RvcmUuCisgKi8KICNkZWZpbmUgSU5ERVhfQkFUQ0hfSEFTX0lURU1TKHNjYW4sIGRp cmVjdGlvbikgXAotCSghSU5ERVhfQkFUQ0hfSVNfRU1QVFkoc2NhbikgJiYgIUlOREVYX0JB VENIX0lTX1BST0NFU1NFRChzY2FuLCBkaXJlY3Rpb24pKQorCSghSU5ERVhfQkFUQ0hfSVNf RU1QVFkoc2NhbikgJiYgKCFJTkRFWF9CQVRDSF9JU19QUk9DRVNTRUQoc2NhbiwgZGlyZWN0 aW9uKSB8fCBzY2FuLT54c19iYXRjaC0+cmVzdG9yZWQpKQogCiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0KQEAgLTE1MjcsOCArMTUyNSwxNyBAQCBpbmRleF9iYXRjaF9nZXRuZXh0X3RpZChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qCiAJICog QWR2YW5jZSB0byB0aGUgbmV4dCBiYXRjaCBpdGVtIC0gd2Uga25vdyBpdCdzIG5vdCBlbXB0 eSBhbmQgdGhlcmUgYXJlCiAJICogaXRlbXMgdG8gcHJvY2Vzcywgc28gdGhpcyBpcyB2YWxp ZC4KKwkgKgorCSAqIEhvd2V2ZXIsIGRvbid0IGFkdmFuY2UgaWYgdGhpcyBpcyB0aGUgZmly c3QgZ2V0bmV4dF90aWQoKSBjYWxsIGFmdGVyCisJICogYW1yZXN0cnBvcygpLiBUaGF0IHNl dHMgdGhlIHBvc2l0aW9uIG9uIHRoZSBjb3JyZWN0IGl0ZW0sIGFuZCBhZHZhbmNpbmcKKwkg KiBoZXJlIHdvdWxkIHNraXAgaXQuCisJICoKKwkgKiBYWFggVGhlICJyZXN0b3JlZCIgZmxh ZyBpcyBhIGJpdCB3ZWlyZC4gQ2FuIHdlIGRvIHRoaXMgd2l0aG91dCBpdD8gTWF5CisJICog bmVlZCB0byByZXRoaW5rIHdoZW4vaG93IHdlIGFkdmFuY2UgdGhlIGJhdGNoIGluZGV4LiBO b3Qgc3VyZS4KIAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24p KQorCWlmIChzY2FuLT54c19iYXRjaC0+cmVzdG9yZWQpCisJCXNjYW4tPnhzX2JhdGNoLT5y ZXN0b3JlZCA9IGZhbHNlOworCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly ZWN0aW9uKSkKIAkJc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCsrOwogCWVsc2UKIAkJc2Nh bi0+eHNfYmF0Y2gtPmN1cnJJbmRleC0tOwpAQCAtMTc4NCw2ICsxNzkxLDcgQEAgaW5kZXhf YmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPnhzX2JhdGNoLT5uaGVh cHRpZHMgPSAwOwogCXNjYW4tPnhzX2JhdGNoLT5wcmVmZXRjaEluZGV4ID0gMDsKIAlzY2Fu LT54c19iYXRjaC0+Y3VyckluZGV4ID0gLTE7CisJc2Nhbi0+eHNfYmF0Y2gtPnJlc3RvcmVk ID0gZmFsc2U7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRl eCBlNjdiMzkzODEyMi4uYTMyOGIyYTdmZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWUuYwpAQCAtNTE4LDYgKzUxOCwyNSBAQCBidG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQgbWFyayB3aXRoIGEgcGluIChidXQgbm8g bG9jaykuICovCiAJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7CiAKKwkv KgorCSAqIFdpdGggYmF0Y2hlZCBzY2Fucywgd2UgZG9uJ3QgbWFpbnRhaW4gdGhlIGl0ZW1J bmRleCB3aGVuIHByb2Nlc3NpbmcgdGhlCisJICogYmF0Y2gsIHNvIHdlIG5lZWQgdG8gY2Fs Y3VsYXRlIHRoZSBjdXJyZW50IHZhbHVlLgorCSAqCisJICogRklYTUUgSSBkb24ndCBsaWtl IHRoYXQgdGhpcyByZXF1aXJlcyBrbm93bGVkZ2Ugb2YgYmF0Y2hpbmcgZGV0YWlscywKKwkg KiBJJ2QgdmVyeSBtdWNoIHByZWZlciB0aG9zZSB0byByZW1haW4gaXNvbGF0ZWQgaW4gaW5k ZXhhbS5jLiBUaGUgYmVzdAorCSAqIGlkZWEgSSBoYXZlIGlzIGEgZnVuY3Rpb24gdGhhdCBy ZXR1cm5zIHRoZSBiYXRjaCBpbmRleCwgc29tZXRoaW5nIGxpa2UKKwkgKiBpbmRleF9iYXRj aF9nZXRfaW5kZXgoKS4gVGhhdCdzIGNsb3NlIHRvIGhvdyBvdGhlciBwbGFjZXMgaW4gQU1z IHRhbGsKKwkgKiB0byBpbmRleGFtLmMgKGUuZy4gd2hlbiBzZXR0aW5nIGRpc3RhbmNlcyAv IG9yZGVyYnkgaW4gc3BnaXN0KS4KKwkgKi8KKwlpZiAoc2Nhbi0+eHNfYmF0Y2gpCisJewor CQkvKiB0aGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkIGluIHRoZSBiYXRjaCAqLworCQlBc3Nl cnQoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJJbmRleCA+PSAwKTsKKwkJQXNzZXJ0KHNjYW4tPnhz X2JhdGNoLT5jdXJySW5kZXggPCBzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzKTsKKworCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+YmF0Y2guZmlyc3RJbmRleCArIHNjYW4tPnhz X2JhdGNoLT5jdXJySW5kZXg7CisJfQorCiAJLyoKIAkgKiBKdXN0IHJlY29yZCB0aGUgY3Vy cmVudCBpdGVtSW5kZXguICBJZiB3ZSBsYXRlciBzdGVwIHRvIG5leHQgcGFnZQogCSAqIGJl Zm9yZSByZWxlYXNpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiwgX2J0X3N0ZXBwYWdlIG1ha2Vz IGEgZnVsbCBjb3B5IG9mCkBAIC01NTEsNiArNTcwLDU5IEBAIGJ0cmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogCQkgKiBhY2N1cmF0ZS4KIAkJICovCiAJCXNvLT5jdXJyUG9zLml0 ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OworCisJCS8qCisJCSAqIFdlJ3JlIHJlc3Rv cmluZyB0byBhIGRpZmZlcmVudCBwb3NpdGlvbiBvbiB0aGUgc2FtZSBwYWdlLCBidXQgdGhl CisJCSAqIHdyb25nIGJhdGNoIG1heSBiZSBsb2FkZWQuIENoZWNrIGlmIHRoZSBjdXJyZW50 IGJhdGNoIGluY2x1ZGVzCisJCSAqIGl0ZW1JbmRleCwgYW5kIGxvYWQgdGhlIGNvcnJlY3Qg YmF0Y2ggaWYgbm90LiBXZSBkb24ndCBrbm93IGluCisJCSAqIHdoaWNoIGRpcmVjdGlvbiB0 aGUgc2NhbiB3aWxsIG1vdmUsIHNvIHdlIHRyeSB0byBwdXQgdGhlIGN1cnJlbnQKKwkJICog aW5kZXggaW4gdGhlIG1pZGRsZSBvZiBhIGJhdGNoLiBGb3IgaW5kZXhlcyBjbG9zZSB0byB0 aGUgZW5kIG9mIHRoZQorCQkgKiBwYWdlIHdlIG1heSBsb2FkIGZld2VyIGl0ZW1zLCBidXQg dGhhdCBzZWVtcyBhY2NlcHRhYmxlLgorCQkgKgorCQkgKiBUaGVuIHVwZGF0ZSB0aGUgaW5k ZXggb2YgdGhlIGN1cnJlbnQgaXRlbSwgZXZlbiBpZiB3ZSBhbHJlYWR5IGhhdmUKKwkJICog dGhlIGNvcnJlY3QgYmF0Y2ggbG9hZGVkLgorCQkgKgorCQkgKiBGSVhNRSBTaW1pbGFyIHRv IGJ0bWFya3BvcygpIC0gSSBkb24ndCBsaWtlIGhvdyB0aGlzIGxlYWtzIGRldGFpbHMKKwkJ ICogdGhhdCBzaG91bGQgYmUgc3BlY2lmaWMgdG8gaW5kZXhhbS5jLiBUaGUgInJlc3RvcmVk IiBmbGFnIGlzIHdlaXJkCisJCSAqIHRvbyAtIGJ1dCBldmVuIGlmIHdlIG5lZWQgaXQsIHdl IGNvdWxkIHNldCBpdCBpbiBpbmRleGFtLmMsIHJpZ2h0PworCQkgKi8KKwkJaWYgKHNjYW4t PnhzX2JhdGNoICE9IE5VTEwpCisJCXsKKwkJCWlmICgoc28tPmN1cnJQb3MuaXRlbUluZGV4 IDwgc28tPmJhdGNoLmZpcnN0SW5kZXgpIHx8CisJCQkJKHNvLT5jdXJyUG9zLml0ZW1JbmRl eCA+IHNvLT5iYXRjaC5sYXN0SW5kZXgpKQorCQkJeworCQkJCWludAkJCXN0YXJ0ID0gTWF4 KHNvLT5jdXJyUG9zLmZpcnN0SXRlbSwKKwkJCQkJCQkJCQlzby0+Y3VyclBvcy5pdGVtSW5k ZXggLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC8gMikpOworCQkJCWludAkJCWVuZCA9 IE1pbihzby0+Y3VyclBvcy5sYXN0SXRlbSwKKwkJCQkJCQkJCSAgc3RhcnQgKyAoc2Nhbi0+ eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSkpOworCisJCQkJQXNzZXJ0KHN0YXJ0IDw9IGVuZCk7 CisJCQkJQXNzZXJ0KChlbmQgLSBzdGFydCArIDEpIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJy U2l6ZSk7CisKKwkJCQkvKiBtYWtlIGl0IGxvb2sgZW1wdHkgKi8KKwkJCQlzY2FuLT54c19i YXRjaC0+bmhlYXB0aWRzID0gMDsKKwkJCQlzY2FuLT54c19iYXRjaC0+cHJlZmV0Y2hJbmRl eCA9IC0xOworCisJCQkJLyoKKwkJCQkgKiBYWFggdGhlIHNjYW4gZGlyZWN0aW9uIGlzIGJv Z3VzIC8gbm90IGltcG9ydGFudC4gSXQgYWZmZWN0cworCQkJCSAqIG9ubHkgaG93IHdlIGFk dmFuY2UgdGhlIGN1cnJJbmRleCwgYnV0IHdlJ2xsIG92ZXJyaWRlIHRoYXQKKwkJCQkgKiBh bnl3YXkgdG8gcG9pbnQgYXQgdGhlICJjb3JyZWN0IiBlbnRyeS4KKwkJCQkgKi8KKwkJCQlf YnRfY29weV9iYXRjaChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc28sIHN0YXJ0LCBl bmQpOworCQkJfQorCisJCQkvKgorCQkJICogU2V0IHRoZSBiYXRjaCBpbmRleCB0byB0aGUg ImNvcnJlY3QiIHBvc2l0aW9uIGluIHRoZSBiYXRjaCwKKwkJCSAqIGV2ZW4gaWYgd2UgaGF2 ZW4ndCByZS1sb2FkZWQgaXQgZnJvbSB0aGUgcGFnZS4gQWxzbyByZW1lbWJlciB3ZQorCQkJ ICoganVzdCBkaWQgdGhpcywgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvCisJCQkgKiBpbmRl eF9iYXRjaF9nZXRuZXh0X3RpZCgpIGRvZXMgbm90IGFkdmFuY2UgaXQgYWdhaW4uCisJCQkg KgorCQkJICogWFhYIFRoaXMgaXMgYSBiaXQgd2VpcmQuIFRoZXJlIHNob3VsZCBiZSBhIHdh eSB0byBub3QgbmVlZCB0aGUKKwkJCSAqICJyZXN0b3JlZCIgZmxhZyBJIHRoaW5rLgorCQkJ ICovCisJCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gKHNvLT5jdXJyUG9zLml0ZW1J bmRleCAtIHNvLT5iYXRjaC5maXJzdEluZGV4KTsKKwkJCXNjYW4tPnhzX2JhdGNoLT5yZXN0 b3JlZCA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTU4OCw2ICs2NjAsNDUgQEAg YnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJX2J0X3N0YXJ0X2FycmF5X2tl eXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKIAkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFs c2U7CiAJCQl9CisKKwkJCS8qCisJCQkgKiBXaXRoIGJhdGNoZWQgc2NhbnMsIHdlIGtub3cg dGhlIGN1cnJlbnQgYmF0Y2ggaXMgZGVmaW5pdGVseQorCQkJICogd3JvbmcgKHdlJ3ZlIG1v dmVkIHRvIGEgZGlmZmVyZW50IGxlYWYgcGFnZSkuIFNvIGVtcHR5IHRoZQorCQkJICogYmF0 Y2gsIGFuZCBsb2FkIHRoZSByaWdodCBwYXJ0IG9mIHRoZSBwYWdlLgorCQkJICoKKwkJCSAq IFNpbWlsYXJseSB0byB0aGUgYmxvY2sgYWJvdmUsIHdlIHBsYWNlIHRoZSBjdXJyZW50IGlu ZGV4IGluIHRoZQorCQkJICogbWlkZGxlIG9mIHRoZSBiYXRjaCAoaWYgcG9zc2libGUpLiBB bmQgdGhlbiB3ZSB1cGRhdGUgdGhlIGluZGV4CisJCQkgKiB0byBwb2ludCBhdCB0aGUgY29y cmVjdCBiYXRjaCBpdGVtLgorCQkJICovCisJCQlpZiAoc2Nhbi0+eHNfYmF0Y2ggIT0gTlVM TCkKKwkJCXsKKwkJCQlpbnQJCQlzdGFydCA9IE1heChzby0+Y3VyclBvcy5maXJzdEl0ZW0s CisJCQkJCQkJCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4IC0gKHNjYW4tPnhzX2JhdGNoLT5j dXJyU2l6ZSAvIDIpKTsKKwkJCQlpbnQJCQllbmQgPSBNaW4oc28tPmN1cnJQb3MubGFzdEl0 ZW0sCisJCQkJCQkJCQkgIHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEp KTsKKworCQkJCUFzc2VydChzdGFydCA8PSBlbmQpOworCQkJCUFzc2VydCgoZW5kIC0gc3Rh cnQgKyAxKSA8PSBzY2FuLT54c19iYXRjaC0+Y3VyclNpemUpOworCisJCQkJLyogbWFrZSBp dCBsb29rIGVtcHR5ICovCisJCQkJc2Nhbi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9IDA7CisJ CQkJc2Nhbi0+eHNfYmF0Y2gtPnByZWZldGNoSW5kZXggPSAtMTsKKworCQkJCS8qIFhYWCB0 aGUgc2NhbiBkaXJlY3Rpb24gaXMgYm9ndXMgKi8KKwkJCQlfYnRfY29weV9iYXRjaChzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc28sIHN0YXJ0LCBlbmQpOworCisJCQkJLyoKKwkJ CQkgKiBTZXQgdGhlIGJhdGNoIGluZGV4IHRvIHRoZSAiY29ycmVjdCIgcG9zaXRpb24gaW4g dGhlIGJhdGNoLAorCQkJCSAqIGV2ZW4gaWYgd2UgaGF2ZW4ndCByZS1sb2FkZWQgaXQgZnJv bSB0aGUgcGFnZS4gQWxzbworCQkJCSAqIHJlbWVtYmVyIHdlIGp1c3QgZGlkIHRoaXMsIHNv IHRoYXQgdGhlIG5leHQgY2FsbCB0bworCQkJCSAqIGluZGV4X2JhdGNoX2dldG5leHRfdGlk KCkgZG9lcyBub3QgYWR2YW5jZSBpdCBhZ2Fpbi4KKwkJCQkgKgorCQkJCSAqIFhYWCBUaGlz IGlzIGEgYml0IHdlaXJkLiBUaGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gbm90IG5lZWQKKwkJ CQkgKiB0aGUgInJlc3RvcmVkIiBmbGFnIEkgdGhpbmsuCisJCQkJICovCisJCQkJc2Nhbi0+ eHNfYmF0Y2gtPmN1cnJJbmRleCA9IChzby0+Y3VyclBvcy5pdGVtSW5kZXggLSBzby0+YmF0 Y2guZmlyc3RJbmRleCk7CisJCQkJc2Nhbi0+eHNfYmF0Y2gtPnJlc3RvcmVkID0gdHJ1ZTsK KwkJCX0KIAkJfQogCQllbHNlCiAJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9z KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IDY2Y2EwNjRi N2U4Li41ZWJhNzk4MmY2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jCkBAIC0xNTQ3LDcgKzE1NDcsNyBAQCBBc3NlcnRDaGVja0JUQmF0Y2hJbmZvKEJUU2Nh bk9wYXF1ZSBzbykKICAqIF9idF9jb3B5X2JhdGNoCiAgKgkJQ29weSBhIHNlY3Rpb24gb2Yg dGhlIGxlYWYgcGFnZSBpbnRvIHRoZSBiYXRjaC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQK IF9idF9jb3B5X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IEJUU2Nhbk9wYXF1ZSBzbywKIAkJCSAgIGludCBzdGFydCwgaW50IGVuZCkKIHsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IGMwMzBjMGRmNmZl Li44ZTU1ZmZjYTE5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5 c2Nhbi5jCkBAIC02MTMsMTQgKzYxMywxMyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5k ZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCUV4ZWNJ bml0UXVhbChub2RlLT5yZWNoZWNrcXVhbCwgKFBsYW5TdGF0ZSAqKSBpbmRleHN0YXRlKTsK IAogCS8qCi0JICogQ2FuJ3QgZG8gYmF0Y2hpbmcgKGFuZCB0aHVzIHByZWZldGNoaW5nKSB3 aGVuIHRoZSBwbGFuIHJlcXVpcmVzIG1hcmsKLQkgKiBhbmQgcmVzdG9yZS4gVGhlcmUncyBh biBpc3N1ZSB3aXRoIHRyYW5zbGF0aW5nIHRoZSBtYXJrL3Jlc3RvcmUKLQkgKiBwb3NpdGlv bnMgYmV0d2VlbiB0aGUgYmF0Y2ggaW4gc2NhbiBkZXNjcmlwdG9yIGFuZCB0aGUgb3JpZ2lu YWwKLQkgKiBwb3NpdGlvbiByZWNvZ25pemVkIGluIHRoZSBpbmRleCBBTS4KKwkgKiBBbGwg aW5kZXggc2NhbnMgY2FuIGRvIGJhdGNoaW5nLgogCSAqCi0JICogWFhYIEhvcGVmdWxseSBq dXN0IGEgdGVtcG9yYXJ5IGxpbWl0YXRpb24/CisJICogWFhYIE1heWJlIHRoaXMgc2hvdWxk IGNoZWNrIGlmIHRoZSBpbmRleCBBTSBzdXBwb3J0cyBiYXRjaGluZywgb3IgZXZlbgorCSAq IGNhbGwgc29tZXRoaW5nIGxpa2UgImFtY2FuYmF0Y2giIChkb2VzIG5vdCBleGlzdCB5ZXQp LiBPciBjaGVjayB0aGUKKwkgKiBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nIEdVQz8KIAkg Ki8KLQlpbmRleHN0YXRlLT5pb3NzX0NhbkJhdGNoID0gIShlZmxhZ3MgJiBFWEVDX0ZMQUdf TUFSSyk7CisJaW5kZXhzdGF0ZS0+aW9zc19DYW5CYXRjaCA9IHRydWU7CiAKIAkvKgogCSAq IElmIHdlIGFyZSBqdXN0IGRvaW5nIEVYUExBSU4gKGllLCBhcmVuJ3QgZ29pbmcgdG8gcnVu IHRoZSBwbGFuKSwgc3RvcApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmlu ZGV4IDhiYmQzNjA2NTY2Li4wYTZkZDg0MDAxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYwpAQCAtOTQ3LDE4ICs5NDcsMTMgQEAgRXhlY0luaXRJbmRleFNjYW4o SW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJRXhlY0lu aXRFeHByTGlzdChub2RlLT5pbmRleG9yZGVyYnlvcmlnLCAoUGxhblN0YXRlICopIGluZGV4 c3RhdGUpOwogCiAJLyoKLQkgKiBDYW4ndCBkbyBiYXRjaGluZyAoYW5kIHRodXMgcHJlZmV0 Y2hpbmcpIHdoZW4gdGhlIHBsYW4gcmVxdWlyZXMgbWFyawotCSAqIGFuZCByZXN0b3JlLiBU aGVyZSdzIGFuIGlzc3VlIHdpdGggdHJhbnNsYXRpbmcgdGhlIG1hcmsvcmVzdG9yZQotCSAq IHBvc2l0aW9ucyBiZXR3ZWVuIHRoZSBiYXRjaCBpbiBzY2FuIGRlc2NyaXB0b3IgYW5kIHRo ZSBvcmlnaW5hbAotCSAqIHBvc2l0aW9uIHJlY29nbml6ZWQgaW4gdGhlIGluZGV4IEFNLgot CSAqCi0JICogWFhYIEhvcGVmdWxseSBqdXN0IGEgdGVtcG9yYXJ5IGxpbWl0YXRpb24/CisJ ICogQWxsIGluZGV4IHNjYW5zIGNhbiBkbyBiYXRjaGluZy4KIAkgKgogCSAqIFhYWCBNYXli ZSB0aGlzIHNob3VsZCBjaGVjayBpZiB0aGUgaW5kZXggQU0gc3VwcG9ydHMgYmF0Y2hpbmcs IG9yIGV2ZW4KIAkgKiBjYWxsIHNvbWV0aGluZyBsaWtlICJhbWNhbmJhdGNoIiAoZG9lcyBu b3QgZXhpc3QgeWV0KS4gT3IgY2hlY2sgdGhlCi0JICogZW5hYmxlX2luZGV4c2Nhbl9iYXRj aGluZyBHVUM/IE5vdyB3ZSBjaGVjayB0aGUgR1VDIGluIGluZGV4X2JlZ2luc2Nhbi4KKwkg KiBlbmFibGVfaW5kZXhzY2FuX2JhdGNoaW5nIEdVQz8KIAkgKi8KLQlpbmRleHN0YXRlLT5p c3NfQ2FuQmF0Y2ggPSAhKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKTsKKwlpbmRleHN0YXRl LT5pc3NfQ2FuQmF0Y2ggPSB0cnVlOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUganVzdCBkb2lu ZyBFWFBMQUlOIChpZSwgYXJlbid0IGdvaW5nIHRvIHJ1biB0aGUgcGxhbiksIHN0b3AKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9uYnRyZWUuaAppbmRleCBkZjMyMzgyYjMxMS4uM2Y1MDBlMjU0ZGUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvbmJ0cmVlLmgKQEAgLTEyOTMsNiArMTI5Myw4IEBAIGV4dGVybiBib29sIF9idF9maXJz dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVy biBib29sIF9idF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOwogZXh0ZXJuIHZvaWQgX2J0X2tpbGxfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQz MiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOworZXh0ZXJuIHZvaWQgX2J0X2NvcHlfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQlRTY2FuT3BhcXVlIHNv LAorCQkJCQkJICAgaW50IHN0YXJ0LCBpbnQgZW5kKTsKIAogLyoKICAqIHByb3RvdHlwZXMg Zm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCAz ZDc2N2UxNDM1Ni4uNmM4ODdjMDRmNjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMjA1 LDYgKzIwNSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEKIAkvKiBt ZW1vcnkgY29udGV4dCBmb3IgcGVyLWJhdGNoIGRhdGEgKi8KIAlNZW1vcnlDb250ZXh0IGN0 eDsKIAorCS8qCisJICogV2FzIHRoaXMgYmF0Y2gganVzdCByZXN0b3JlZCBieSByZXN0cnBv cz8gaWYgeWVzLCB3ZSBkb24ndCBhZHZhbmNlIG9uCisJICogdGhlIGZpcnN0IGl0ZXJhdGlv bi4KKwkgKi8KKwlib29sCQlyZXN0b3JlZDsKKwogCS8qIGJhdGNoIHByZWZldGNoaW5nICov CiAJaW50CQkJcHJlZmV0Y2hUYXJnZXQ7IC8qIGN1cnJlbnQgcHJlZmV0Y2ggZGlzdGFuY2Ug Ki8KIAlpbnQJCQlwcmVmZXRjaE1heGltdW07CS8qIG1heGltdW0gcHJlZmV0Y2ggZGlzdGFu Y2UgKi8KLS0gCjIuNDYuMQoK --------------AwhMDARAWMF3JACXnrsprk8G Content-Type: text/x-patch; charset=UTF-8; name="v20240930-0004-WIP-batching-for-hash-indexes.patch" Content-Disposition: attachment; filename="v20240930-0004-WIP-batching-for-hash-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSA4MjA3MWQ3ZjcyZmZmMDNlYTJlNDFkMmYxMjllMzQ4NzUxZDM5YTBiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODo1MiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQwOTMwIDQvNl0gV0lQOiBiYXRjaGluZyBmb3IgaGFzaCBpbmRleGVzCgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICB8ICA0MyArKysrCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgfCAyODMgKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgMTcg KysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICB8ICAgMSArCiA0IGZp bGVzIGNoYW5nZWQsIDM0NCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CmluZGV4IDVjZTM2MDkzOTQzLi5kOTA0NTQ4MTQ4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYwpAQCAtOTgsNiArOTgsNyBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog CWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuOwogCWFtcm91dGluZS0+ YW1yZXNjYW4gPSBoYXNocmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IGhhc2hn ZXR0dXBsZTsKKwlhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPSBoYXNoZ2V0YmF0Y2g7CiAJYW1y b3V0aW5lLT5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVu ZHNjYW4gPSBoYXNoZW5kc2NhbjsKIAlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7CkBA IC0zMjksNiArMzMwLDQyIEBAIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQogfQogCiAKKy8qCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBHZXQg dGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuLgorICovCitib29sCitoYXNo Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3sKKwlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCWJv b2wJCXJlczsKKworCS8qIEhhc2ggaW5kZXhlcyBhcmUgYWx3YXlzIGxvc3N5IHNpbmNlIHdl IHN0b3JlIG9ubHkgdGhlIGhhc2ggY29kZSAqLworCXNjYW4tPnhzX3JlY2hlY2sgPSB0cnVl OworCisJLyoKKwkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwg d2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbiB0aGUKKwkgKiBhcHByb3ByaWF0ZSBkaXJlY3Rp b24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsIGEgcm91dGluZSB0bwor CSAqIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkgKi8KKwlpZiAoIUhhc2hT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCisJCXJlcyA9IF9oYXNoX2ZpcnN0X2JhdGNo KHNjYW4sIGRpcik7CisJZWxzZQorCXsKKwkJLyoKKwkJICogQ2hlY2sgdG8gc2VlIGlmIHdl IHNob3VsZCBraWxsIHR1cGxlcyBmcm9tIHRoZSBwcmV2aW91cyBiYXRjaC4KKwkJICovCisJ CV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKKwkJLyoKKwkJICogTm93IGNvbnRpbnVlIHRo ZSBzY2FuLgorCQkgKi8KKwkJcmVzID0gX2hhc2hfbmV4dF9iYXRjaChzY2FuLCBkaXIpOwor CX0KKworCXJldHVybiByZXM7Cit9CisKKwogLyoKICAqCWhhc2hnZXRiaXRtYXAoKSAtLSBn ZXQgYWxsIHR1cGxlcyBhdCBvbmNlCiAgKi8KQEAgLTQwMyw2ICs0NDAsOSBAQCBoYXNocmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LAogCiAJaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCiAJeworCQkvKiBU cmFuc2ZlciBraWxsZWQgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggdG8gdGhlIHJlZ3VsYXIgYXJy YXkuICovCisJCV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJLyogQmVmb3JlIGxlYXZp bmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwogCQlpZiAo c28tPm51bUtpbGxlZCA+IDApCiAJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwpAQCAtNDMy LDYgKzQ3Miw5IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWlmIChI YXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQogCXsKKwkJLyogVHJhbnNmZXIga2ls bGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5LiAqLworCQlf aGFzaF9raWxsX2JhdGNoKHNjYW4pOworCiAJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQg cGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KIAkJaWYgKHNvLT5udW1LaWxs ZWQgPiAwKQogCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hzZWFyY2guYwppbmRleCAwZDk5ZDZhYmM4Ni4uYzExYWU4NDdhM2IgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKQEAgLTY0LDYgKzY0LDkgQEAgX2hh c2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJ aWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCiAJ CXsKKwkJCS8qIFRyYW5zZmVyIGtpbGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0byB0aGUg cmVndWxhciBhcnJheS4gKi8KKwkJCV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJCWlm IChzby0+bnVtS2lsbGVkID4gMCkKIAkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwogCkBA IC04Miw2ICs4NSw5IEBAIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAl7CiAJCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5j dXJyUG9zLmZpcnN0SXRlbSkKIAkJeworCQkJLyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZy b20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFyIGFycmF5LiAqLworCQkJX2hhc2hfa2lsbF9i YXRjaChzY2FuKTsKKwogCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQogCQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7CiAKQEAgLTQ3Niw2ICs0ODIsOSBAQCBfaGFzaF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CQlpZiAoaXRlbUluZGV4ICE9IDApCiAJCQkJYnJlYWs7CiAKKwkJCS8qIFRyYW5zZmVyIGtp bGxlZCBpdGVtcyBmcm9tIHRoZSBiYXRjaCB0byB0aGUgcmVndWxhciBhcnJheS4gKi8KKwkJ CV9oYXNoX2tpbGxfYmF0Y2goc2Nhbik7CisKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZmlu ZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KIAkJ CSAqIHRoZSBuZXh0IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRl YWwgd2l0aCBhbnkKQEAgLTUzNSw2ICs1NDQsOSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlpZiAo aXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAorCQkJ LyogVHJhbnNmZXIga2lsbGVkIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHRvIHRoZSByZWd1bGFy IGFycmF5LiAqLworCQkJX2hhc2hfa2lsbF9iYXRjaChzY2FuKTsKKwogCQkJLyoKIAkJCSAq IENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFn ZSwgbW92ZSB0bwogCQkJICogdGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRo ZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aApAQCAtNzEzLDMgKzcyNSwyNzQgQEAgX2hhc2hf c2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCiAJY3Vyckl0ZW0t PmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZu dW07CiB9CisKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0hhc2hCYXRjaEluZm8oSGFzaFNj YW5PcGFxdWUgc28pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCS8qIHNob3Vs ZCBiZSB2YWxpZCBpdGVtcyAod2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IGxlYWYgcGFn ZSkgKi8KKwlBc3NlcnQoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5iYXRjaC5maXJz dEluZGV4KTsKKwlBc3NlcnQoc28tPmJhdGNoLmZpcnN0SW5kZXggPD0gc28tPmJhdGNoLmxh c3RJbmRleCk7CisJQXNzZXJ0KHNvLT5iYXRjaC5sYXN0SW5kZXggPD0gc28tPmN1cnJQb3Mu bGFzdEl0ZW0pOworI2VuZGlmCit9CisKKy8qCisgKglfaGFzaF9maXJzdF9iYXRjaCgpIC0t IEZpbmQgdGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KKyAqCisgKiBBIGJhdGNoIHZhcmlh bnQgb2YgX2hhc2hfZmlyc3QoKS4gTW9zdCBvZiB0aGUgY29tbWVudHMgZm9yIHRoYXQgZnVu Y3Rpb24KKyAqIGFwcGx5IGhlcmUgdG9vLgorICoKKyAqIFhYWCBUaGlzIG9ubHkgcG9wdWxh dGVzIHRoZSBiYXRjaCwgaXQgZG9lcyBub3Qgc2V0IGFueSBvdGhlciBmaWVsZHMgbGlrZQor ICogc2Nhbi0+eHNfaGVhcHRpZCBvciBzY2FuLT54c19pdHVwLiBUaGF0IGhhcHBlbnMgaW4g Z2V0bmV4dF90aWQoKSBjYWxscy4KKyAqCisgKiBYWFggSSdtIG5vdCBzdXJlIGl0IHdvcmtz IHRvIG1peCBiYXRjaGVkIGFuZCBub24tYmF0Y2hlcyBjYWxscywgZS5nLiBnZXQKKyAqIGEg VElEIGFuZCB0aGVuIGEgYmF0Y2ggb2YgVElEcy4gSXQgcHJvYmFibHkgc2hvdWxkIHdvcmsg YXMgbG9uZyBhcyB3ZQorICogdXBkYXRlIGl0ZW1JbmRleCBjb3JyZWN0bHksIGJ1dCB3ZSBu ZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQga2lsbGVkIGl0ZW1zCisgKiAocmlnaHQgbm93IHRo ZSB0d28gcGxhY2VzIHVzZSBkaWZmZXJlbnQgd2F5cyB0byBjb21tdW5pY2F0ZSB3aGljaCBp dGVtcworICogc2hvdWxkIGJlIGtpbGxlZCkuCisgKi8KK2Jvb2wKK19oYXNoX2ZpcnN0X2Jh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJSGFzaFNj YW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCUFzc2Vy dChzY2FuLT54c19iYXRjaC0+bmhlYXB0aWRzID09IDApOworCisJLyoKKwkgKiBNYXJrIHRo ZSBiYXRjaCBhcyBlbXB0eS4KKwkgKgorCSAqIFRoaXMgbWlnaHQgc2VlbXMgYSBiaXQgc3Ry YW5nZSwgYmVjYXVzZSBzdXJlbHkgdGhlIGJhdGNoIHNob3VsZCBiZQorCSAqIGVtcHR5IGJl Zm9yZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRjaC4gU28gd2h5IG5vdCBhbiBhc3NlcnQ/IEJ1 dCB3ZSBjYW4KKwkgKiBnZXQgaGVyZSBpbiBkaWZmZXJlbnQgd2F5cyAtIG5vdCBqdXN0IGFm dGVyIGJlZ2luc2Nhbi9yZXNjYW4sIGJ1dCBhbHNvCisJICogd2hlbiBpdGVyYXRpbmcgb3Zl ciBTY2FsYXJBcnJheU9wcyAtIGluIHdoaWNoIGNhc2Ugd2UnbGwgc2VlIHRoZSBsYXN0CisJ ICogYmF0Y2ggb2YgdGhlIHByZWNlZGluZyBzY2FuLgorCSAqLworCXNvLT5iYXRjaC5maXJz dEluZGV4ID0gLTE7CisJc28tPmJhdGNoLmxhc3RJbmRleCA9IC0xOworCisJLyogd2UgaGF2 ZW4ndCB2aXNpdGVkIGFueSBsZWFmIHBhZ2VzIHlldCwgc28gcHJvY2VlZCB0byByZWFkaW5n IG9uZSAqLworCWlmIChfaGFzaF9maXJzdChzY2FuLCBkaXIpKQorCXsKKwkJLyogcmFuZ2Ug b2YgdGhlIGxlYWYgdG8gY29weSBpbnRvIHRoZSBiYXRjaCAqLworCQlpbnQJCQlzdGFydCwK KwkJCQkJZW5kOworCisJCS8qIGRldGVybWluZSB3aGljaCBwYXJ0IG9mIHRoZSBsZWFmIHBh Z2UgdG8gZXh0cmFjdCAqLworCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQor CQl7CisJCQlzdGFydCA9IHNvLT5jdXJyUG9zLmZpcnN0SXRlbTsKKwkJCWVuZCA9IE1pbihz dGFydCArIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwgc28tPmN1cnJQb3MubGFz dEl0ZW0pOworCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKGVuZCArIDEpOworCQl9CisJ CWVsc2UKKwkJeworCQkJZW5kID0gc28tPmN1cnJQb3MubGFzdEl0ZW07CisJCQlzdGFydCA9 IE1heChlbmQgLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksCisJCQkJCQlzby0+ Y3VyclBvcy5maXJzdEl0ZW0pOworCQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gKHN0YXJ0 IC0gMSk7CisJCX0KKworCQkvKgorCQkgKiBDb3B5IHRoZSBzZWxlY3RlZCByYW5nZSBvZiBp dGVtcyBpbnRvIHRoZSBiYXRjaCwgc2V0IHRoZSBiYXRjaAorCQkgKiBjdXJyZW50IGluZGV4 IHByb3Blcmx5IChiZWZvcmUgZmlyc3QgLyBhZnRlciBsYXN0IGl0ZW0sIGRlcGVuZGluZwor CQkgKiBvbiBzY2FuIGRpcmVjdGlvbi4KKwkJICovCisJCV9oYXNoX2NvcHlfYmF0Y2goc2Nh biwgZGlyLCBzbywgc3RhcnQsIGVuZCk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCisvKgorICoJX2hhc2hfbmV4dF9iYXRjaCgpIC0tIEdldCB0aGUg bmV4dCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCisgKgorICogQSBiYXRjaCB2YXJpYW50 IG9mIF9oYXNoX25leHQoKS4gTW9zdCBvZiB0aGUgY29tbWVudHMgZm9yIHRoYXQgZnVuY3Rp b24KKyAqIGFwcGx5IGhlcmUgdG9vLgorICoKKyAqIFdlIHNob3VsZCBvbmx5IGdldCBoZXJl IG9ubHkgd2hlbiB0aGUgY3VycmVudCBiYXRjaCBoYXMgbm8gbW9yZSBpdGVtcworICogaW4g dGhlIGdpdmVuIGRpcmVjdGlvbi4gV2UgZG9uJ3QgZ2V0IGhlcmUgd2l0aCBlbXB0eSBiYXRj aGVzLCB0aGF0J3MKKyAqIGhhbmRsZWQgYnkgX2hhc2hfZmlzdF9iYXRjaCgpLgorICoKKyAq IFhYWCBTZWUgYWxzbyB0aGUgY29tbWVudHMgYXQgX2hhc2hfZmlyc3RfYmF0Y2goKSBhYm91 dCByZXR1cm5pbmcgYSBzaW5nbGUKKyAqIGJhdGNoIGZvciB0aGUgcGFnZSwgZXRjLgorICoK KyAqIEZJWE1FIFRoZXJlJ3MgYSBsb3Qgb2YgcmVkdW5kYW50IChhbG1vc3QgdGhlIHNhbWUp IGNvZGUgaGVyZSAtIGhhbmRsaW5nCisgKiB0aGUgY3VycmVudCBhbmQgbmV3IGxlYWYgcGFn ZSBpcyB2ZXJ5IHNpbWlsYXIsIGFuZCBpdCdzIGFsc28gc2ltaWxhciB0bworICogX2hhc2hf Zmlyc3RfYmF0Y2goKS4gV2Ugc2hvdWxkIHRyeSB0byByZWR1Y2UgdGhpcyBhIGJpdC4KKyAq LworYm9vbAorX2hhc2hfbmV4dF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQoreworCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CisKKwlpbnQJCQlzdGFydCwKKwkJCQllbmQ7CisKKwlBc3NlcnQoc2Nh bi0+eHNfYmF0Y2gtPm5oZWFwdGlkcyA9PSAwKTsKKworCUFzc2VydENoZWNrSGFzaEJhdGNo SW5mbyhzbyk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIHN0aWxsIGhhdmUgc29tZSBpdGVt cyBvbiB0aGUgY3VycmVudCBsZWFmIHBhZ2UuIElmIHllcywKKwkgKiBsb2FkIHRoZW0gaW50 byBhIGJhdGNoIGFuZCByZXR1cm4uCisJICoKKwkgKiBYWFggdHJ5IGNvbWJpbmluZyB0aGF0 IHdpdGggdGhlIG5leHQgYmxvY2ssIHRoZSBpbm5lciB3aGlsZSBsb29wIGlzCisJICogZXhh Y3RseSB0aGUgc2FtZS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KQorCXsKKwkJc3RhcnQgPSBzby0+YmF0Y2gubGFzdEluZGV4ICsgMTsKKwkJZW5kID0gTWlu KHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLCBzby0+Y3VyclBvcy5s YXN0SXRlbSk7CisJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IChlbmQgKyAxKTsKKwl9CisJ ZWxzZQorCXsKKwkJZW5kID0gc28tPmJhdGNoLmZpcnN0SW5kZXggLSAxOworCQlzdGFydCA9 IE1heChlbmQgLSAoc2Nhbi0+eHNfYmF0Y2gtPmN1cnJTaXplIC0gMSksCisJCQkJCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSk7CisJCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IChzdGFydCAt IDEpOworCX0KKworCS8qCisJICogV2UgaGF2ZSBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50 IGxlYWYgcGFnZS4KKwkgKi8KKwlpZiAoc3RhcnQgPD0gZW5kKQorCXsKKwkJX2hhc2hfY29w eV9iYXRjaChzY2FuLCBkaXIsIHNvLCBzdGFydCwgZW5kKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyoKKwkgKiBXZSd2ZSBjb25zdW1lZCBhbGwgaXRlbXMgZnJvbSB0aGUgY3VycmVu dCBsZWFmIHBhZ2UsIHNvIHRyeSByZWFkaW5nIHRoZQorCSAqIG5leHQgb25lLCBhbmQgcHJv Y2VzcyBpdC4KKwkgKi8KKwlpZiAoX2hhc2hfbmV4dChzY2FuLCBkaXIpKQorCXsKKwkJLyoK KwkJICogQ2hlY2sgaWYgd2Ugc3RpbGwgaGF2ZSBzb21lIGl0ZW1zIG9uIHRoZSBjdXJyZW50 IGxlYWYgcGFnZS4gSWYgeWVzLAorCQkgKiBsb2FkIHRoZW0gaW50byBhIGJhdGNoIGFuZCBy ZXR1cm4uCisJCSAqCisJCSAqIFhYWCB0cnkgY29tYmluaW5nIHRoYXQgd2l0aCB0aGUgbmV4 dCBibG9jaywgdGhlIGlubmVyIHdoaWxlIGxvb3AgaXMKKwkJICogZXhhY3RseSB0aGUgc2Ft ZS4KKwkJICovCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCXsKKwkJ CXN0YXJ0ID0gc28tPmN1cnJQb3MuZmlyc3RJdGVtOworCQkJZW5kID0gTWluKHN0YXJ0ICsg KHNjYW4tPnhzX2JhdGNoLT5jdXJyU2l6ZSAtIDEpLCBzby0+Y3VyclBvcy5sYXN0SXRlbSk7 CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoZW5kICsgMSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQllbmQgPSBzby0+Y3VyclBvcy5sYXN0SXRlbTsKKwkJCXN0YXJ0ID0gTWF4KGVu ZCAtIChzY2FuLT54c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJCXNvLT5jdXJyUG9z LmZpcnN0SXRlbSk7CisJCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAoc3RhcnQgLSAxKTsK KwkJfQorCisJCV9oYXNoX2NvcHlfYmF0Y2goc2NhbiwgZGlyLCBzbywgc3RhcnQsIGVuZCk7 CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICoJ X2hhc2hfa2lsbF9iYXRjaCgpIC0tIHJlbWVtYmVyIHRoZSBpdGVtcy10by1iZS1raWxsZWQg ZnJvbSB0aGUgY3VycmVudCBiYXRjaAorICoKKyAqIFdlIHNpbXBseSB0cmFuc2xhdGUgdGhl IGJpdG1hcCBpbnRvIHRoZSAicmVndWxhciIga2lsbGVkSXRlbXMgYXJyYXksIGFuZCBsZXQK KyAqIHRoYXQgdG8gZHJpdmUgd2hpY2ggaXRlbXMgYXJlIGtpbGxlZC4KKyAqLwordm9pZAor X2hhc2hfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCS8qIGJhaWwgb3V0 IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVkICovCisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJ cmV0dXJuOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FuLT54c19iYXRjaC0+bktpbGxl ZEl0ZW1zOyBpKyspCisJeworCQlpbnQJCQlpbmRleCA9IChzby0+YmF0Y2guZmlyc3RJbmRl eCArIHNjYW4tPnhzX2JhdGNoLT5raWxsZWRJdGVtc1tpXSk7CisKKwkJLyogbWFrZSBzdXJl IHdlIGhhdmUgYSB2YWxpZCBpbmRleCAoaW4gdGhlIGN1cnJlbnQgbGVhZiBwYWdlKSAqLwor CQlBc3NlcnQoKHNvLT5iYXRjaC5maXJzdEluZGV4IDw9IGluZGV4KSAmJgorCQkJICAgKGlu ZGV4IDw9IHNvLT5iYXRjaC5sYXN0SW5kZXgpKTsKKworCQkvKgorCQkgKiBZZXMsIHJlbWVt YmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMgYXQK KwkJICogb25jZSByaWdodCBiZWZvcmUgbGVhdmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUg dGVzdCBmb3IgbnVtS2lsbGVkCisJCSAqIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6 IGlmIHRoZSBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluCisJCSAqIHRoZSBpbmRleHNj YW4gdGhlbiB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVz LgorCQkgKiBJdCdzIG5vdCB3b3J0aCB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2Ug ZG9uJ3QgZGV0ZWN0IGl0LCBidXQKKwkJICogaW5zdGVhZCBqdXN0IGZvcmdldCBhbnkgZXhj ZXNzIGVudHJpZXMuCisJCSAqLworCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJ CQlzby0+a2lsbGVkSXRlbXMgPSAoaW50ICopCisJCQkJcGFsbG9jKE1heEluZGV4VHVwbGVz UGVyUGFnZSAqIHNpemVvZihpbnQpKTsKKwkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhJbmRl eFR1cGxlc1BlclBhZ2UpCisJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9 IGluZGV4OworCX0KKworCS8qIG5vdyByZXNldCB0aGUgbnVtYmVyIG9mIGtpbGxlZCBpdGVt cyAqLworCXNjYW4tPnhzX2JhdGNoLT5uS2lsbGVkSXRlbXMgPSAwOworfQorCit2b2lkCitf aGFzaF9jb3B5X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IEhhc2hTY2FuT3BhcXVlIHNvLAorCQkJCSBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJLyoK KwkgKiBXZSdyZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRjaCwgYW5kIHRoZXJlIHNob3VsZCBh bHdheXMgYmUgYXQgbGVhc3Qgb25lCisJICogaXRlbSAob3RoZXJ3aXNlIF9idF9maXJzdCB3 b3VsZCByZXR1cm4gZmFsc2UpLiBTbyB3ZSBzaG91bGQgbmV2ZXIgZ2V0CisJICogaW50byBz aXR1YXRpb24gd2l0aCBlbXB0eSBzdGFydC9lbmQgcmFuZ2UuIEluIHRoZSB3b3JzdCBjYXNl LCB0aGVyZSBpcworCSAqIGp1c3QgYSBzaW5nbGUgaXRlbSwgaW4gd2hpY2ggY2FzZSAoc3Rh cnQgPT0gZW5kKS4KKwkgKi8KKwlBc3NlcnQoc3RhcnQgPD0gZW5kKTsKKworCS8qIFRoZSBy YW5nZSBvZiBpdGVtcyBzaG91bGQgZml0IGludG8gdGhlIGN1cnJlbnQgYmF0Y2ggc2l6ZS4g Ki8KKwlBc3NlcnQoKGVuZCAtIHN0YXJ0ICsgMSkgPD0gc2Nhbi0+eHNfYmF0Y2gtPmN1cnJT aXplKTsKKworCXNvLT5iYXRjaC5maXJzdEluZGV4ID0gc3RhcnQ7CisJc28tPmJhdGNoLmxh c3RJbmRleCA9IGVuZDsKKworCUFzc2VydENoZWNrSGFzaEJhdGNoSW5mbyhzbyk7CisKKwkv KgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgcmFuZ2Ugb2YgaW5kZXggdHVwbGVzLCBjb3B5IHRo ZW0gaW50byB0aGUgYmF0Y2guIElmCisJICogcmVxdWVzdGVkLCBzZXQgdGhlIGluZGV4IHR1 cGxlIHRvby4KKwkgKgorCSAqIFdlIGRvbid0IGtub3cgaWYgdGhlIGJhdGNoIGlzIGZ1bGwg YWxyZWFkeSAtIHdlIGp1c3QgdHJ5IHRvIGFkZCBpdCwgYW5kCisJICogYmFpbCBvdXQgaWYg aXQgZmFpbHMuCisJICoKKwkgKiBGSVhNRSBUaGlzIHNlZW1zIHdyb25nLCBhY3R1YWxseS4g V2UgdXNlIGN1cnJTaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJICogc3RhcnQvZW5kIHJh bmdlLCBzbyB0aGUgYWRkIHNob3VsZCBhbHdheXMgc3VjY2VlZC4KKwkgKi8KKwl3aGlsZSAo c3RhcnQgPD0gZW5kKQorCXsKKwkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tzdGFydF07CisKKwkJLyogdHJ5IHRvIGFkZCBpdCB0byBiYXRjaCwg aWYgdGhlcmUncyBzcGFjZSAqLworCQlpZiAoIWluZGV4X2JhdGNoX2FkZChzY2FuLCBjdXJy SXRlbS0+aGVhcFRpZCwgZmFsc2UsIE5VTEwsIE5VTEwpKQorCQkJYnJlYWs7CisKKwkJc3Rh cnQrKzsKKwl9CisKKwkvKgorCSAqIHNldCB0aGUgc3RhcnRpbmcgcG9pbnQKKwkgKgorCSAq IFhYWCBtaWdodCBiZSBiZXR0ZXIgZG9uZSBpbiBpbmRleGFtLmMKKwkgKi8KKwlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4 ID0gLTE7CisJZWxzZQorCQlzY2FuLT54c19iYXRjaC0+Y3VyckluZGV4ID0gc2Nhbi0+eHNf YmF0Y2gtPm5oZWFwdGlkczsKKworCS8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0byBlbmQg aGVyZSB3aXRoIGFuIGVtcHR5IGJhdGNoICovCisJQXNzZXJ0KHNjYW4tPnhzX2JhdGNoLT5u aGVhcHRpZHMgPiAwKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCmluZGV4IDljN2Q4MTUyNWI0Li5iNzEw MTIxZjBlZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCkBAIC0xNTIsNiArMTUyLDE0IEBAIHR5cGVkZWYg c3RydWN0IEhhc2hTY2FuUG9zRGF0YQogCQkoc2NhbnBvcykuaXRlbUluZGV4ID0gMDsgXAog CX0gd2hpbGUgKDApCiAKKy8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGJhdGNo IChpbiBiYXRjaGVkIGluZGV4IHNjYW5zKSAqLwordHlwZWRlZiBzdHJ1Y3QgSGFzaEJhdGNo SW5mbworeworCS8qIEN1cnJlbnQgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBiYXRjaCAoaWYgdXNl ZCkuICovCisJaW50CQkJZmlyc3RJbmRleDsKKwlpbnQJCQlsYXN0SW5kZXg7Cit9IEhhc2hC YXRjaEluZm87CisKIC8qCiAgKglIYXNoU2Nhbk9wYXF1ZURhdGEgaXMgcHJpdmF0ZSBzdGF0 ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAgKi8KQEAgLTE4Miw2ICsxOTAsOSBAQCB0eXBl ZGVmIHN0cnVjdCBIYXNoU2Nhbk9wYXF1ZURhdGEKIAlpbnQJCSAgICpraWxsZWRJdGVtczsJ LyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwogCWludAkJCW51 bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCiAKKwkv KiBpbmZvIGFib3V0IGN1cnJlbnQgYmF0Y2ggKi8KKwlIYXNoQmF0Y2hJbmZvIGJhdGNoOwor CiAJLyoKIAkgKiBJZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEgcGFnZSBh bmQgc2F2ZSB0aGVtIGluCiAJICogSGFzaFNjYW5Qb3NEYXRhCkBAIC0zNjksNiArMzgwLDcg QEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMs IGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAg c3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKIGV4dGVybiBib29sIGhhc2hnZXR0dXBs ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29s IGhhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK IGV4dGVybiBpbnQ2NCBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0 bWFwICp0Ym0pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaGFzaGJlZ2luc2NhbihSZWxhdGlv biByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBoYXNocmVz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LApAQCAtNDQ0LDYgKzQ1NiwxMSBAQCBleHRlcm4gdm9pZCBfaGFzaF9maW5pc2hfc3BsaXQo UmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIG9idWYsCiAvKiBoYXNoc2Vh cmNoLmMgKi8KIGV4dGVybiBib29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBib29sIF9oYXNoX25leHRf YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4g Ym9vbCBfaGFzaF9maXJzdF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiB2b2lkIF9oYXNoX2NvcHlfYmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkgSGFzaFNjYW5PcGFxdWUgc28sIGlu dCBzdGFydCwgaW50IGVuZCk7CitleHRlcm4gdm9pZCBfaGFzaF9raWxsX2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhT cG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBiZTg5YmU5ODdhMi4uYjY0MmFhM2NiMjUgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTE3LDYgKzExMTcsNyBAQCBIYXNo CiBIYXNoQWdnQmF0Y2gKIEhhc2hBZ2dTcGlsbAogSGFzaEFsbG9jRnVuYworSGFzaEJhdGNo SW5mbwogSGFzaEJ1aWxkU3RhdGUKIEhhc2hDb21wYXJlRnVuYwogSGFzaENvcHlGdW5jCi0t IAoyLjQ2LjEKCg== --------------AwhMDARAWMF3JACXnrsprk8G Content-Type: text/x-patch; charset=UTF-8; name="v20240930-0005-WIP-batching-for-gist-indexes.patch" Content-Disposition: attachment; filename="v20240930-0005-WIP-batching-for-gist-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSA5MTY3ZDFlN2JjYzA0OTE0OTcwY2Q2YjdlNmM0N2M2YThlM2MzZTJmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0ODo1NyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQwOTMwIDUvNl0gV0lQOiBiYXRjaGluZyBmb3IgZ2lzdCBpbmRleGVzCgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0Z2V0LmMgfCAyOTUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggfCAgMTYgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQs IDMxMyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IDJkN2Ew Njg3ZDRhLi41MDAwYWY5OGExMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAw LDYgKzEwMCw3IEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5l LT5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2NhbiA9 IGdpc3RyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxlOwor CWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IGdpc3RnZXRiYXRjaDsKIAlhbXJvdXRpbmUtPmFt Z2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGdp c3RlbmRzY2FuOwogCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RnZXQuYwppbmRleCBiMzViOGE5NzU3Ny4uNzBlMzJmMTkzNjYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAorc3RhdGlj IHZvaWQgX2dpc3Rfa2lsbF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4pOworc3RhdGljIHZv aWQgX2dpc3RfY29weV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEdJU1RTY2FuT3BhcXVl IHNvLAorCQkJCQkJCSBpbnQgc3RhcnQsIGludCBlbmQpOworCiAvKgogICogZ2lzdGtpbGxp dGVtcygpIC0tIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2Fs bGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KQEAgLTcwOSw2ICs3MTMsMTQgQEAg Z2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJ CQl7CiAJCQkJR0lTVFNlYXJjaEl0ZW0gKml0ZW07CiAKKwkJCQkvKgorCQkJCSAqIFhYWCBQ cm9iYWJseSBub3QgbmVlZGVkLCB3ZSBjYW4ndCBtaXggZ2V0dHVwbGUgYW5kCisJCQkJICog Z2V0YmF0Y2gsIHNvIHdlIHNob3VsZCBub3QgZ2V0IGFueSBraWxsZWQgdHVwbGVzIGZvciBh CisJCQkJICogYmF0Y2guIE1heWJlIHJlcGxhY2UgdGhpcyB3aXRoIGFuIGFzc2VydCB0aGF0 IGJhdGNoIGhhcyBubworCQkJCSAqIGtpbGxlZCBpdGVtcz8gT3Igc2ltcGx5IHRoYXQgKHhz X2JhdGNoID09IE5VTEwpPworCQkJCSAqLworCQkJCV9naXN0X2tpbGxfYmF0Y2goc2Nhbik7 CisKIAkJCQlpZiAoKHNvLT5jdXJCbGtubyAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpICYmIChz by0+bnVtS2lsbGVkID4gMCkpCiAJCQkJCWdpc3RraWxsaXRlbXMoc2Nhbik7CiAKQEAgLTcz Niw2ICs3NDgsMTY0IEBAIGdpc3RnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCX0KIH0KIAorLyoKKyAqIGdpc3RnZXRiYXRjaCgpIC0tIEdldCB0 aGUgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KKyAqLworYm9vbAorZ2lzdGdl dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJR0lT VFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCWlm IChkaXIgIT0gRm9yd2FyZFNjYW5EaXJlY3Rpb24pCisJCWVsb2coRVJST1IsICJHaVNUIG9u bHkgc3VwcG9ydHMgZm9yd2FyZCBzY2FuIGRpcmVjdGlvbiIpOworCisJaWYgKCFzby0+cXVh bF9vaykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNvLT5maXJzdENhbGwpCisJeworCQkv KiBCZWdpbiB0aGUgc2NhbiBieSBwcm9jZXNzaW5nIHRoZSByb290IHBhZ2UgKi8KKwkJR0lT VFNlYXJjaEl0ZW0gZmFrZUl0ZW07CisKKwkJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4oc2Nh bi0+aW5kZXhSZWxhdGlvbik7CisKKwkJc28tPmZpcnN0Q2FsbCA9IGZhbHNlOworCQlzby0+ Y3VyUGFnZURhdGEgPSBzby0+blBhZ2VEYXRhID0gMDsKKwkJc2Nhbi0+eHNfaGl0dXAgPSBO VUxMOworCQlpZiAoc28tPnBhZ2VEYXRhQ3h0KQorCQkJTWVtb3J5Q29udGV4dFJlc2V0KHNv LT5wYWdlRGF0YUN4dCk7CisKKwkJZmFrZUl0ZW0uYmxrbm8gPSBHSVNUX1JPT1RfQkxLTk87 CisJCW1lbXNldCgmZmFrZUl0ZW0uZGF0YS5wYXJlbnRsc24sIDAsIHNpemVvZihHaXN0TlNO KSk7CisJCWdpc3RTY2FuUGFnZShzY2FuLCAmZmFrZUl0ZW0sIE5VTEwsIE5VTEwsIE5VTEwp OworCisJCS8qCisJCSAqIE1hcmsgdGhlIGJhdGNoIGFzIGVtcHR5LgorCQkgKgorCQkgKiBY WFggSXMgdGhpcyBuZWNlc3NhcnkgLyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpcz8gTWF5 YmUgaXQgc2hvdWxkCisJCSAqIGJlIGRvbmUgaW4gYmVnaW5zY2FuL3Jlc2Nhbj8gVGhlIG9u ZSBwcm9ibGVtIHdpdGggdGhhdCBpcyB3ZSBvbmx5CisJCSAqIGluaXRpYWxpemUgdGhlIGJh dGNoIGFmdGVyLCBzbyB0aG9zZSBwbGFjZXMgZG9uJ3Qga25vdyBpZiBiYXRjaGluZworCQkg KiBpcyB0byBiZSB1c2VkLgorCQkgKi8KKwkJc28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsK KwkJc28tPmJhdGNoLmxhc3RJbmRleCA9IC0xOworCX0KKworCS8qCisJICogV2l0aCBvcmRl ci1ieSBjbGF1c2VzLCB3ZSBzaW1wbHkgZ2V0IGVub3VnaCBuZWFyZXN0IGl0ZW1zIHRvIGZp bGwgdGhlCisJICogYmF0Y2guIEdJU1QgZG9lcyBub3QgaGFuZGxlIGtpbGxlZCBpdGVtcyBp biB0aGlzIGNhc2UgZm9yIG5vbi1iYXRjaGVkCisJICogc2NhbnMsIHNvIHdlIGRvbid0IGRv IHRoYXQgaGVyZSBlaXRoZXIuIFRoZSBvbmx5IGlzc3VlIGlzIHRoYXQgdGhlIGhlYXAKKwkg KiB0dXBsZSByZXR1cm5lZCBpbiB4c19oaXR1cCBpcyBmcmVlZCBvbiB0aGUgbmV4dCBnZXRO ZXh0TmVhcmVzdCgpIGNhbGwsCisJICogc28gd2UgbWFrZSBhIGNvcHkgaW4gdGhlIGJhdGNo IG1lbW9yeSBjb250ZXh0LgorCSAqCisJICogRm9yIHNjYW5zIHdpdGhvdXQgb3JkZXItYnkg Y2xhdXNlcywgd2Ugc2ltcGx5IGNvcHkgYSBiYXRjaCBvZiBpdGVtcworCSAqIGZyb20gdGhl IG5leHQgbGVhZiBwYWdlLCBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYWdlIHdoZW4gbmVl ZGVkLgorCSAqLworCWlmIChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID4gMCkKKwl7CisJCWlu dAkJCW5pdGVtcyA9IDA7CisKKwkJLyogTXVzdCBmZXRjaCB0dXBsZXMgaW4gc3RyaWN0IGRp c3RhbmNlIG9yZGVyICovCisJCXdoaWxlIChuaXRlbXMgPCBzY2FuLT54c19iYXRjaC0+Y3Vy clNpemUpCisJCXsKKwkJCUhlYXBUdXBsZQlodHVwOworCQkJTWVtb3J5Q29udGV4dCBvbGRj dHg7CisKKwkJCWlmICghZ2V0TmV4dE5lYXJlc3Qoc2NhbikpCisJCQkJYnJlYWs7CisKKwkJ CS8qCisJCQkgKiBXZSBuZWVkIHRvIGNvcHkgdGhlIHR1cGxlIGludG8gdGhlIGJhdGNoIGNv bnRleHQsIGFzIGl0IG1heSBnbworCQkJICogYXdheSBvbiB0aGUgbmV4dCBnZXROZXh0TmVh cmVzdCBjYWxsLiBGcmVlIHRoZSBvcmlnaW5hbCB0dXBsZSwKKwkJCSAqIG90aGVyd2lzZSB3 ZSdkIGxlYWsgdGhlIGxhc3QgdHVwbGUgaW4gYSBiYXRjaC4KKwkJCSAqLworCQkJb2xkY3R4 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPnhzX2JhdGNoLT5jdHgpOworCQkJaHR1 cCA9IGhlYXBfY29weXR1cGxlKHNjYW4tPnhzX2hpdHVwKTsKKworCQkJcGZyZWUoc2Nhbi0+ eHNfaGl0dXApOworCQkJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOworCisJCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworCQkJaW5kZXhfYmF0Y2hfYWRkKHNjYW4sIHNjYW4t PnhzX2hlYXB0aWQsIHNjYW4tPnhzX3JlY2hlY2ssIE5VTEwsIGh0dXApOworCisJCQluaXRl bXMrKzsKKwkJfQorCisJCS8qIGRpZCB3ZSBmaW5kIG1vcmUgdHVwbGVzPyAqLworCQlyZXR1 cm4gKHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRpZHMgPiAwKTsKKwl9CisJZWxzZQorCXsKKwkJ LyogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzICovCisJCWZvciAoOzspCisJCXsK KwkJCWludAkJCXN0YXJ0LAorCQkJCQkJZW5kOworCisJCQkvKiBmb3J3YXJkIGRpcmVjdGlv bnMgb25seSwgZWFzeSB0byBjYWxjdWxhdGUgbmV4dCBiYXRjaCAqLworCQkJc3RhcnQgPSBz by0+YmF0Y2gubGFzdEluZGV4ICsgMTsKKwkJCWVuZCA9IE1pbihzdGFydCArIChzY2FuLT54 c19iYXRjaC0+Y3VyclNpemUgLSAxKSwKKwkJCQkJICBzby0+blBhZ2VEYXRhIC0gMSk7CS8q IGluZGV4IG9mIGxhc3QgaXRlbSAqLworCQkJc28tPmN1clBhZ2VEYXRhID0gKGVuZCArIDEp OworCisJCQkvKiBpZiB3ZSBmb3VuZCBtb3JlIGl0ZW1zIG9uIHRoZSBjdXJyZW50IHBhZ2Us IHdlJ3JlIGRvbmUgKi8KKwkJCWlmIChzdGFydCA8PSBlbmQpCisJCQl7CisJCQkJX2dpc3Rf Y29weV9iYXRjaChzY2FuLCBzbywgc3RhcnQsIGVuZCk7CisJCQkJcmV0dXJuIHRydWU7CisJ CQl9CisKKwkJCS8qIGZpbmQgYW5kIHByb2Nlc3MgdGhlIG5leHQgaW5kZXggcGFnZSAqLwor CQkJZG8KKwkJCXsKKwkJCQlHSVNUU2VhcmNoSXRlbSAqaXRlbTsKKworCQkJCV9naXN0X2tp bGxfYmF0Y2goc2Nhbik7CisKKwkJCQlpZiAoKHNvLT5jdXJCbGtubyAhPSBJbnZhbGlkQmxv Y2tOdW1iZXIpICYmIChzby0+bnVtS2lsbGVkID4gMCkpCisJCQkJCWdpc3RraWxsaXRlbXMo c2Nhbik7CisKKwkJCQlpdGVtID0gZ2V0TmV4dEdJU1RTZWFyY2hJdGVtKHNvKTsKKworCQkJ CWlmICghaXRlbSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKworCQkJCS8qIHNhdmUgY3VycmVudCBpdGVtIEJsb2NrTnVtYmVyIGZvciBu ZXh0IGdpc3RraWxsaXRlbXMoKSBjYWxsICovCisJCQkJc28tPmN1ckJsa25vID0gaXRlbS0+ Ymxrbm87CisKKwkJCQkvKgorCQkJCSAqIFdoaWxlIHNjYW5uaW5nIGEgbGVhZiBwYWdlLCBJ dGVtUG9pbnRlcnMgb2YgbWF0Y2hpbmcgaGVhcAorCQkJCSAqIHR1cGxlcyBhcmUgc3RvcmVk IGluIHNvLT5wYWdlRGF0YS4gIElmIHRoZXJlIGFyZSBhbnkgb24KKwkJCQkgKiB0aGlzIHBh Z2UsIHdlIGZhbGwgb3V0IG9mIHRoZSBpbm5lciAiZG8iIGFuZCBsb29wIGFyb3VuZCB0bwor CQkJCSAqIHJldHVybiB0aGVtLgorCQkJCSAqLworCQkJCWdpc3RTY2FuUGFnZShzY2FuLCBp dGVtLCBpdGVtLT5kaXN0YW5jZXMsIE5VTEwsIE5VTEwpOworCisJCQkJLyoKKwkJCQkgKiBJ ZiB3ZSBmb3VuZCBhbnkgaXRlbXMgb24gdGhlIHBhZ2UsIGNvcHkgdGhlbSBpbnRvIGEgYmF0 Y2gKKwkJCQkgKiBhbmQgd2UncmUgZG9uZS4KKwkJCQkgKi8KKworCQkJCS8qIGZvcndhcmQg ZGlyZWN0aW9uIG9ubHksIHNvIGdldCB0aGUgZmlyc3QgY2h1bmsgb2YgaXRlbXMgKi8KKwkJ CQlzdGFydCA9IDA7CisJCQkJZW5kID0gTWluKHN0YXJ0ICsgKHNjYW4tPnhzX2JhdGNoLT5j dXJyU2l6ZSAtIDEpLAorCQkJCQkJICBzby0+blBhZ2VEYXRhIC0gMSk7CS8qIGluZGV4IG9m IGxhc3QgaXRlbSAqLworCisJCQkJaWYgKHN0YXJ0IDw9IGVuZCkKKwkJCQl7CisJCQkJCV9n aXN0X2NvcHlfYmF0Y2goc2Nhbiwgc28sIHN0YXJ0LCBlbmQpOworCQkJCQlyZXR1cm4gdHJ1 ZTsKKwkJCQl9CisKKwkJCQlwZnJlZShpdGVtKTsKKwkJCX0gd2hpbGUgKHNvLT5uUGFnZURh dGEgPT0gMCk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBnaXN0Z2V0Yml0bWFwKCkgLS0gR2V0 IGEgYml0bWFwIG9mIGFsbCBoZWFwIHR1cGxlIGxvY2F0aW9ucwogICovCkBAIC03OTksMyAr OTY5LDEyOCBAQCBnaXN0Y2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8pCiAJ ZWxzZQogCQlyZXR1cm4gZmFsc2U7CiB9CisKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja0dJ U1RCYXRjaEluZm8oR0lTVFNjYW5PcGFxdWUgc28pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9D SEVDS0lORworCS8qIHNob3VsZCBiZSB2YWxpZCBpdGVtcyAod2l0aCByZXNwZWN0IHRvIHRo ZSBjdXJyZW50IGxlYWYgcGFnZSkgKi8KKwlBc3NlcnQoMCA8PSBzby0+YmF0Y2guZmlyc3RJ bmRleCk7CisJQXNzZXJ0KHNvLT5iYXRjaC5maXJzdEluZGV4IDw9IHNvLT5iYXRjaC5sYXN0 SW5kZXgpOworCUFzc2VydChzby0+YmF0Y2gubGFzdEluZGV4IDw9IHNvLT5uUGFnZURhdGEp OworI2VuZGlmCit9CisKKy8qCisgKglfZ2lzdF9raWxsX2JhdGNoKCkgLS0gcmVtZW1iZXIg dGhlIGl0ZW1zLXRvLWJlLWtpbGxlZCBmcm9tIHRoZSBjdXJyZW50IGJhdGNoCisgKgorICog V2Ugc2ltcGx5IHRyYW5zbGF0ZSB0aGUgYml0bWFwIGludG8gdGhlICJyZWd1bGFyIiBraWxs ZWRJdGVtcyBhcnJheSwgYW5kIGxldAorICogdGhhdCB0byBkcml2ZSB3aGljaCBpdGVtcyBh cmUga2lsbGVkLgorICovCitzdGF0aWMgdm9pZAorX2dpc3Rfa2lsbF9iYXRjaChJbmRleFNj YW5EZXNjIHNjYW4pCit7CisJR0lTVFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKworCS8qIGJhaWwgb3V0IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVk ICovCisJaWYgKCFzY2FuLT54c19iYXRjaCkKKwkJcmV0dXJuOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBzY2FuLT54c19iYXRjaC0+bktpbGxlZEl0ZW1zOyBpKyspCisJeworCQlpbnQJ CQlpbmRleCA9IChzby0+YmF0Y2guZmlyc3RJbmRleCArIHNjYW4tPnhzX2JhdGNoLT5raWxs ZWRJdGVtc1tpXSk7CisKKwkJLyogbWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBpbmRleCAo aW4gdGhlIGN1cnJlbnQgbGVhZiBwYWdlKSAqLworCQlBc3NlcnQoKHNvLT5iYXRjaC5maXJz dEluZGV4IDw9IGluZGV4KSAmJgorCQkJICAgKGluZGV4IDw9IHNvLT5iYXRjaC5sYXN0SW5k ZXgpKTsKKworCQkvKgorCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xs IGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMgYXQKKwkJICogb25jZSByaWdodCBiZWZvcmUg bGVhdmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUgdGVzdCBmb3IgbnVtS2lsbGVkCisJCSAq IG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZSBjYWxsZXIgcmV2ZXJzZXMg ZGlyZWN0aW9uIGluCisJCSAqIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZSBpdGVtIG1p Z2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgorCQkgKiBJdCdzIG5vdCB3b3J0aCB0 cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQKKwkJ ICogaW5zdGVhZCBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCisJCSAqLworCQlp ZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJCXsKKwkJCU1lbW9yeUNvbnRleHQgb2xk Q3h0ID0KKwkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc28tPmdpc3RzdGF0ZS0+c2NhbkN4 dCk7CisKKwkJCXNvLT5raWxsZWRJdGVtcyA9CisJCQkJKE9mZnNldE51bWJlciAqKSBwYWxs b2MoTWF4SW5kZXhUdXBsZXNQZXJQYWdlCisJCQkJCQkJCQkJKiBzaXplb2YoT2Zmc2V0TnVt YmVyKSk7CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDeHQpOworCQl9CisJCWlm IChzby0+bnVtS2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQorCQkJc28tPmtpbGxl ZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBpbmRleDsKKwl9CisKKwkvKiBub3cgcmVzZXQg dGhlIG51bWJlciBvZiBraWxsZWQgaXRlbXMgKi8KKwlzY2FuLT54c19iYXRjaC0+bktpbGxl ZEl0ZW1zID0gMDsKK30KKworLyoKKyAqIEZJWE1FIERvZXMgdGhpcyBuZWVkIHRvIHdvcnJ5 IGFib3V0IHJlY2hlY2svcmVjaGVja0Rpc3RhbmNlcyBmbGFncyBpbgorICogR0lTVFNjYW5P cGFxdWU/IFByb2JhYmx5IHllcy4KKyAqCisgKiBGSVhNRSBEZWZpbml0ZWx5IHNob3VsZCBy ZXR1cm4gcmVjb250dXAgZm9yIElPUywgYnV0IHRoYXQgbmVlZHMgY2hhbmdlcworICogdG8g aW5kZXhfYmF0Y2hfYWRkLgorICovCitzdGF0aWMgdm9pZAorX2dpc3RfY29weV9iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEdJU1RTY2FuT3BhcXVlIHNvLAorCQkJCSBpbnQgc3RhcnQs IGludCBlbmQpCit7CisJLyoKKwkgKiBXZSdyZSByZWFkaW5nIHRoZSBmaXJzdCBiYXRjaCwg YW5kIHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lCisJICogaXRlbSAob3Ro ZXJ3aXNlIF9idF9maXJzdCB3b3VsZCByZXR1cm4gZmFsc2UpLiBTbyB3ZSBzaG91bGQgbmV2 ZXIgZ2V0CisJICogaW50byBzaXR1YXRpb24gd2l0aCBlbXB0eSBzdGFydC9lbmQgcmFuZ2Uu IEluIHRoZSB3b3JzdCBjYXNlLCB0aGVyZSBpcworCSAqIGp1c3QgYSBzaW5nbGUgaXRlbSwg aW4gd2hpY2ggY2FzZSAoc3RhcnQgPT0gZW5kKS4KKwkgKi8KKwlBc3NlcnQoc3RhcnQgPD0g ZW5kKTsKKworCS8qIFRoZSByYW5nZSBvZiBpdGVtcyBzaG91bGQgZml0IGludG8gdGhlIGN1 cnJlbnQgYmF0Y2ggc2l6ZS4gKi8KKwlBc3NlcnQoKGVuZCAtIHN0YXJ0ICsgMSkgPD0gc2Nh bi0+eHNfYmF0Y2gtPmN1cnJTaXplKTsKKworCXNvLT5iYXRjaC5maXJzdEluZGV4ID0gc3Rh cnQ7CisJc28tPmJhdGNoLmxhc3RJbmRleCA9IGVuZDsKKworCUFzc2VydENoZWNrR0lTVEJh dGNoSW5mbyhzbyk7CisKKwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgcmFuZ2Ugb2YgaW5k ZXggdHVwbGVzLCBjb3B5IHRoZW0gaW50byB0aGUgYmF0Y2guIElmCisJICogcmVxdWVzdGVk LCBzZXQgdGhlIGluZGV4IHR1cGxlIHRvby4KKwkgKgorCSAqIFdlIGRvbid0IGtub3cgaWYg dGhlIGJhdGNoIGlzIGZ1bGwgYWxyZWFkeSAtIHdlIGp1c3QgdHJ5IHRvIGFkZCBpdCwgYW5k CisJICogYmFpbCBvdXQgaWYgaXQgZmFpbHMuCisJICoKKwkgKiBGSVhNRSBUaGlzIHNlZW1z IHdyb25nLCBhY3R1YWxseS4gV2UgdXNlIGN1cnJTaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhl CisJICogc3RhcnQvZW5kIHJhbmdlLCBzbyB0aGUgYWRkIHNob3VsZCBhbHdheXMgc3VjY2Vl ZC4KKwkgKi8KKwl3aGlsZSAoc3RhcnQgPD0gZW5kKQorCXsKKwkJR0lTVFNlYXJjaEhlYXBJ dGVtICppdGVtID0gJnNvLT5wYWdlRGF0YVtzdGFydF07CisKKwkJSGVhcFR1cGxlCWh0dXAg PSBOVUxMOworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQlodHVwID0gaXRlbS0+ cmVjb250dXA7CisKKwkJLyogdHJ5IHRvIGFkZCBpdCB0byBiYXRjaCwgaWYgdGhlcmUncyBz cGFjZSAqLworCQlpZiAoIWluZGV4X2JhdGNoX2FkZChzY2FuLCBpdGVtLT5oZWFwUHRyLCBp dGVtLT5yZWNoZWNrLCBOVUxMLCBodHVwKSkKKwkJCWJyZWFrOworCisJCXN0YXJ0Kys7CisJ fQorCisJLyoKKwkgKiBzZXQgdGhlIHN0YXJ0aW5nIHBvaW50CisJICoKKwkgKiBYWFggbWln aHQgYmUgYmV0dGVyIGRvbmUgaW4gaW5kZXhhbS5jCisJICovCisJc2Nhbi0+eHNfYmF0Y2gt PmN1cnJJbmRleCA9IC0xOworCisJLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlIHRvIGVuZCBo ZXJlIHdpdGggYW4gZW1wdHkgYmF0Y2ggKi8KKwlBc3NlcnQoc2Nhbi0+eHNfYmF0Y2gtPm5o ZWFwdGlkcyA+IDApOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3Rf cHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oCmluZGV4IDdi ODc0OWM4ZGIwLi4yZjY1MzM1NGRhMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2dpc3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUu aApAQCAtMTQ4LDYgKzE0OCwxOSBAQCB0eXBlZGVmIHN0cnVjdCBHSVNUU2VhcmNoSXRlbQog CShvZmZzZXRvZihHSVNUU2VhcmNoSXRlbSwgZGlzdGFuY2VzKSArIFwKIAkgc2l6ZW9mKElu ZGV4T3JkZXJCeURpc3RhbmNlKSAqIChuX2Rpc3RhbmNlcykpCiAKKy8qCisgKiBJbmZvcm1h dGlvbiBhYm91dCB0aGUgY3VycmVudCBiYXRjaCAoaW4gYmF0Y2hlZCBpbmRleCBzY2FucykK KyAqCisgKiBYWFggUHJvYmFibHkgbm90IG5lZWRlZCwgYXMgc3BnaXN0IHN1cHBvcnRzIGp1 c3QgZm9yd2FyZCBzY2Fucywgc28gd2UKKyAqIGNvdWxkIHNpbXBseSB0aGUgaVB0ciAobm8g cHJvYmxlbSBhZnRlciBjaGFuZ2Ugb2Ygc2NhbiBkaXJlY3Rpb24pLgorICovCit0eXBlZGVm IHN0cnVjdCBHSVNUQmF0Y2hJbmZvCit7CisJLyogQ3VycmVudCByYW5nZSBvZiBpdGVtcyBp biBhIGJhdGNoIChpZiB1c2VkKS4gKi8KKwlpbnQJCQlmaXJzdEluZGV4OworCWludAkJCWxh c3RJbmRleDsKK30gR0lTVEJhdGNoSW5mbzsKKwogLyoKICAqIEdJU1RTY2FuT3BhcXVlRGF0 YTogcHJpdmF0ZSBzdGF0ZSBmb3IgYSBzY2FuIG9mIGEgR2lTVCBpbmRleAogICovCkBAIC0x NzYsNiArMTg5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgR0lTVFNjYW5PcGFxdWVEYXRhCiAJT2Zm c2V0TnVtYmVyIGN1clBhZ2VEYXRhOwkvKiBuZXh0IGl0ZW0gdG8gcmV0dXJuICovCiAJTWVt b3J5Q29udGV4dCBwYWdlRGF0YUN4dDsJLyogY29udGV4dCBob2xkaW5nIHRoZSBmZXRjaGVk IHR1cGxlcywgZm9yCiAJCQkJCQkJCSAqIGluZGV4LW9ubHkgc2NhbnMgKi8KKworCUdJU1RC YXRjaEluZm8gYmF0Y2g7CQkvKiBiYXRjaCBsb2FkZWQgZnJvbSB0aGUgaW5kZXggKi8KIH0g R0lTVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEdJU1RTY2FuT3BhcXVlRGF0YSAqR0lT VFNjYW5PcGFxdWU7CkBAIC00NjEsNiArNDc2LDcgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgZ2lz dFhMb2dBc3NpZ25MU04odm9pZCk7CiAKIC8qIGdpc3RnZXQuYyAqLwogZXh0ZXJuIGJvb2wg Z2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwor ZXh0ZXJuIGJvb2wgZ2lzdGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gYm9vbCBnaXN0Y2FucmV0dXJuKFJlbGF0 aW9uIGluZGV4LCBpbnQgYXR0bm8pOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IGI2NDJhYTNjYjI1Li43MzEzNTMwYzI5MSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTk2OCw2ICs5NjgsNyBAQCBHQlRfTlVNS0VZX1IKIEdCVF9WQVJLRVkKIEdC VF9WQVJLRVlfUgogR0VORVJBTF9OQU1FCitHSVNUQmF0Y2hJbmZvCiBHSVNUQnVpbGRCdWZm ZXJzCiBHSVNUQnVpbGRTdGF0ZQogR0lTVERlbGV0ZWRQYWdlQ29udGVudHMKLS0gCjIuNDYu MQoK --------------AwhMDARAWMF3JACXnrsprk8G Content-Type: text/x-patch; charset=UTF-8; name="v20240930-0006-WIP-batching-for-sp-gist-indexes.patch" Content-Disposition: attachment; filename="v20240930-0006-WIP-batching-for-sp-gist-indexes.patch" Content-Transfer-Encoding: base64 RnJvbSBmMGUwNTQ3ZDQ1ZjBhMTE1ODQ0YTE5ZGE5ZmUxMjRjMjBlNmExNjgyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAzMCBTZXAgMjAyNCAyMjo0OTowNCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIwMjQwOTMwIDYvNl0gV0lQOiBiYXRjaGluZyBmb3Igc3AtZ2lzdCBpbmRleGVzCgotLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jICB8IDE0MiArKysrKysrKysr KysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMu YyB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0LmggICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmggIHwgIDE1ICsrKwogc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAxICsKIDUgZmlsZXMgY2hh bmdlZCwgMTYwIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3NjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bnc2Nh bi5jCmluZGV4IDMwMTc4NjE4NTlmLi40Yjk2ODUyYzI4YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGdzY2FuLmMKQEAgLTEwNzcsNiArMTA3NywxNDggQEAgc3BnZ2V0dHVwbGUo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlyZXR1cm4gZmFsc2U7 CiB9CiAKK3N0YXRpYyB2b2lkCitBc3NlcnRDaGVja1NwR2lzdEJhdGNoSW5mbyhTcEdpc3RT Y2FuT3BhcXVlIHNvKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwkvKiBzaG91 bGQgYmUgdmFsaWQgaXRlbXMgKHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCBsZWFmIHBh Z2UpICovCisJQXNzZXJ0KDAgPD0gc28tPmJhdGNoLmZpcnN0SW5kZXgpOworCUFzc2VydChz by0+YmF0Y2guZmlyc3RJbmRleCA8PSBzby0+YmF0Y2gubGFzdEluZGV4KTsKKwlBc3NlcnQo c28tPmJhdGNoLmxhc3RJbmRleCA8PSBzby0+blB0cnMpOworI2VuZGlmCit9CisKKy8qCisg KiBGSVhNRSBEb2VzIHRoaXMgbmVlZCB0byB3b3JyeSBhYm91dCByZWNoZWNrL3JlY2hlY2tE aXN0YW5jZXMgZmxhZ3MgaW4KKyAqIEdJU1RTY2FuT3BhcXVlPyBQcm9iYWJseSB5ZXMuCisg KgorICogRklYTUUgRGVmaW5pdGVseSBzaG91bGQgcmV0dXJuIHJlY29udHVwIGZvciBJT1Ms IGJ1dCB0aGF0IG5lZWRzIGNoYW5nZXMKKyAqIHRvIGluZGV4X2JhdGNoX2FkZC4KKyAqLwor c3RhdGljIHZvaWQKK19zcGdpc3RfY29weV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNw R2lzdFNjYW5PcGFxdWUgc28sCisJCQkJICAgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworCS8q CisJICogV2UncmUgcmVhZGluZyB0aGUgZmlyc3QgYmF0Y2gsIGFuZCB0aGVyZSBzaG91bGQg YWx3YXlzIGJlIGF0IGxlYXN0IG9uZQorCSAqIGl0ZW0gKG90aGVyd2lzZSBfYnRfZmlyc3Qg d291bGQgcmV0dXJuIGZhbHNlKS4gU28gd2Ugc2hvdWxkIG5ldmVyIGdldAorCSAqIGludG8g c2l0dWF0aW9uIHdpdGggZW1wdHkgc3RhcnQvZW5kIHJhbmdlLiBJbiB0aGUgd29yc3QgY2Fz ZSwgdGhlcmUgaXMKKwkgKiBqdXN0IGEgc2luZ2xlIGl0ZW0sIGluIHdoaWNoIGNhc2UgKHN0 YXJ0ID09IGVuZCkuCisJICovCisJQXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CisKKwkvKiBUaGUg cmFuZ2Ugb2YgaXRlbXMgc2hvdWxkIGZpdCBpbnRvIHRoZSBjdXJyZW50IGJhdGNoIHNpemUu ICovCisJQXNzZXJ0KChlbmQgLSBzdGFydCArIDEpIDw9IHNjYW4tPnhzX2JhdGNoLT5jdXJy U2l6ZSk7CisKKwlzby0+YmF0Y2guZmlyc3RJbmRleCA9IHN0YXJ0OworCXNvLT5iYXRjaC5s YXN0SW5kZXggPSBlbmQ7CisKKwlBc3NlcnRDaGVja1NwR2lzdEJhdGNoSW5mbyhzbyk7CisK KwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgcmFuZ2Ugb2YgaW5kZXggdHVwbGVzLCBjb3B5 IHRoZW0gaW50byB0aGUgYmF0Y2guIElmCisJICogcmVxdWVzdGVkLCBzZXQgdGhlIGluZGV4 IHR1cGxlIHRvby4KKwkgKgorCSAqIFdlIGRvbid0IGtub3cgaWYgdGhlIGJhdGNoIGlzIGZ1 bGwgYWxyZWFkeSAtIHdlIGp1c3QgdHJ5IHRvIGFkZCBpdCwgYW5kCisJICogYmFpbCBvdXQg aWYgaXQgZmFpbHMuCisJICoKKwkgKiBGSVhNRSBUaGlzIHNlZW1zIHdyb25nLCBhY3R1YWxs eS4gV2UgdXNlIGN1cnJTaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJICogc3RhcnQvZW5k IHJhbmdlLCBzbyB0aGUgYWRkIHNob3VsZCBhbHdheXMgc3VjY2VlZC4KKwkgKi8KKwl3aGls ZSAoc3RhcnQgPD0gZW5kKQorCXsKKwkJYm9vbAkJcmVjaGVjayA9IHNvLT5yZWNoZWNrW3N0 YXJ0XTsKKwkJSGVhcFR1cGxlCWh0dXAgPSBOVUxMOworCisJCWlmIChzby0+d2FudF9pdHVw KQorCQkJaHR1cCA9IHNvLT5yZWNvblR1cHNbc3RhcnRdOworCisJCWlmIChzby0+bnVtYmVy T2ZPcmRlckJ5cyA+IDApCisJCQlpbmRleF9zdG9yZV9mbG9hdDhfb3JkZXJieV9kaXN0YW5j ZXMoc2Nhbiwgc28tPm9yZGVyQnlUeXBlcywKKwkJCQkJCQkJCQkJCSBzby0+ZGlzdGFuY2Vz W3NvLT5pUHRyXSwKKwkJCQkJCQkJCQkJCSBzby0+cmVjaGVja0Rpc3RhbmNlc1tzby0+aVB0 cl0pOworCisJCS8qIHRyeSB0byBhZGQgaXQgdG8gYmF0Y2gsIGlmIHRoZXJlJ3Mgc3BhY2Ug Ki8KKwkJaWYgKCFpbmRleF9iYXRjaF9hZGQoc2Nhbiwgc28tPmhlYXBQdHJzW3N0YXJ0XSwg cmVjaGVjaywgTlVMTCwgaHR1cCkpCisJCQlicmVhazsKKworCQlzdGFydCsrOworCX0KKwor CS8qCisJICogc2V0IHRoZSBzdGFydGluZyBwb2ludAorCSAqCisJICogWFhYIG1pZ2h0IGJl IGJldHRlciBkb25lIGluIGluZGV4YW0uYworCSAqLworCXNjYW4tPnhzX2JhdGNoLT5jdXJy SW5kZXggPSAtMTsKKworCS8qIHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0byBlbmQgaGVyZSB3 aXRoIGFuIGVtcHR5IGJhdGNoICovCisJQXNzZXJ0KHNjYW4tPnhzX2JhdGNoLT5uaGVhcHRp ZHMgPiAwKTsKK30KKworCitib29sCitzcGdnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQoreworCVNwR2lzdFNjYW5PcGFxdWUgc28gPSAoU3BHaXN0 U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCisJaWYgKGRpciAhPSBGb3J3YXJkU2NhbkRp cmVjdGlvbikKKwkJZWxvZyhFUlJPUiwgIlNQLUdpU1Qgb25seSBzdXBwb3J0cyBmb3J3YXJk IHNjYW4gZGlyZWN0aW9uIik7CisKKwkvKiBDb3B5IHdhbnRfaXR1cCB0byAqc28gc28gd2Ug ZG9uJ3QgbmVlZCB0byBwYXNzIGl0IGFyb3VuZCBzZXBhcmF0ZWx5ICovCisJc28tPndhbnRf aXR1cCA9IHNjYW4tPnhzX3dhbnRfaXR1cDsKKworCWZvciAoOzspCisJeworCQlpbnQJCQlz dGFydCwKKwkJCQkJZW5kOworCisJCS8qIGZvcndhcmQgZGlyZWN0aW9ucyBvbmx5LCBlYXN5 IHRvIGNhbGN1bGF0ZSBuZXh0IGJhdGNoICovCisJCXN0YXJ0ID0gc28tPmJhdGNoLmxhc3RJ bmRleCArIDE7CisJCWVuZCA9IE1pbihzdGFydCArIChzY2FuLT54c19iYXRjaC0+Y3VyclNp emUgLSAxKSwKKwkJCQkgIHNvLT5uUHRycyAtIDEpOwkvKiBpbmRleCBvZiBsYXN0IGl0ZW0g Ki8KKwkJc28tPmlQdHIgPSAoZW5kICsgMSk7CisKKwkJLyogaWYgd2UgZm91bmQgbW9yZSBp dGVtcyBvbiB0aGUgY3VycmVudCBwYWdlLCB3ZSdyZSBkb25lICovCisJCWlmIChzdGFydCA8 PSBlbmQpCisJCXsKKwkJCV9zcGdpc3RfY29weV9iYXRjaChzY2FuLCBzbywgc3RhcnQsIGVu ZCk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmIChzby0+bnVtYmVyT2ZPcmRlckJ5 cyA+IDApCisJCXsKKwkJCS8qIE11c3QgcGZyZWUgZGlzdGFuY2VzIHRvIGF2b2lkIG1lbW9y eSBsZWFrICovCisJCQlpbnQJCQlpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgc28tPm5QdHJz OyBpKyspCisJCQkJaWYgKHNvLT5kaXN0YW5jZXNbaV0pCisJCQkJCXBmcmVlKHNvLT5kaXN0 YW5jZXNbaV0pOworCQl9CisKKwkJaWYgKHNvLT53YW50X2l0dXApCisJCXsKKwkJCS8qIE11 c3QgcGZyZWUgcmVjb25zdHJ1Y3RlZCB0dXBsZXMgdG8gYXZvaWQgbWVtb3J5IGxlYWsgKi8K KwkJCWludAkJCWk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBzby0+blB0cnM7IGkrKykKKwkJ CQlwZnJlZShzby0+cmVjb25UdXBzW2ldKTsKKwkJfQorCQlzby0+aVB0ciA9IHNvLT5uUHRy cyA9IDA7CisKKwkJc3BnV2FsayhzY2FuLT5pbmRleFJlbGF0aW9uLCBzbywgZmFsc2UsIHN0 b3JlR2V0dHVwbGUpOworCisJCWlmIChzby0+blB0cnMgPT0gMCkKKwkJCWJyZWFrOwkJCQkv KiBtdXN0IGhhdmUgY29tcGxldGVkIHNjYW4gKi8KKworCQkvKiByZXNldCBiZWZvcmUgbG9h ZGluZyBkYXRhIGZyb20gYmF0Y2ggKi8KKwkJc28tPmJhdGNoLmZpcnN0SW5kZXggPSAtMTsK KwkJc28tPmJhdGNoLmxhc3RJbmRleCA9IC0xOworCX0KKworCXJldHVybiBmYWxzZTsKK30K KwogYm9vbAogc3BnY2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8pCiB7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggNzJiNzY2MTk3MWYuLjI1 YjM2M2QzODBkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC04 NSw2ICs4NSw3IEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUt PmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBz cGdyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGU7CisJYW1y b3V0aW5lLT5hbWdldGJhdGNoID0gc3BnZ2V0YmF0Y2g7CiAJYW1yb3V0aW5lLT5hbWdldGJp dG1hcCA9IHNwZ2dldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IHNwZ2VuZHNj YW47CiAJYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NwZ2lzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdC5oCmlu ZGV4IGQ2YTQ5NTMxMjAwLi5mODc5ODQzYjNiYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL3NwZ2lzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3QuaApAQCAt MjA5LDYgKzIwOSw3IEBAIGV4dGVybiB2b2lkIHNwZ3Jlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICBTY2FuS2V5IG9y ZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBpbnQ2NCBzcGdnZXRiaXRtYXAoSW5k ZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gYm9vbCBzcGdnZXR0 dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBi b29sIHNwZ2dldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwogZXh0ZXJuIGJvb2wgc3BnY2FucmV0dXJuKFJlbGF0aW9uIGluZGV4LCBpbnQgYXR0bm8p OwogCiAvKiBzcGd2YWN1dW0uYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3NwZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUu aAppbmRleCBlN2NiZTEwYTg5Yi4uMTVhNWU3N2M1ZDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9z cGdpc3RfcHJpdmF0ZS5oCkBAIC0xODMsNiArMTgzLDE5IEBAIHR5cGVkZWYgc3RydWN0IFNw R2lzdFNlYXJjaEl0ZW0KICNkZWZpbmUgU2l6ZU9mU3BHaXN0U2VhcmNoSXRlbShuX2Rpc3Rh bmNlcykgXAogCShvZmZzZXRvZihTcEdpc3RTZWFyY2hJdGVtLCBkaXN0YW5jZXMpICsgc2l6 ZW9mKGRvdWJsZSkgKiAobl9kaXN0YW5jZXMpKQogCisvKgorICogSW5mb3JtYXRpb24gYWJv dXQgdGhlIGN1cnJlbnQgYmF0Y2ggKGluIGJhdGNoZWQgaW5kZXggc2NhbnMpCisgKgorICog WFhYIFByb2JhYmx5IG5vdCBuZWVkZWQsIGFzIHNwZ2lzdCBzdXBwb3J0cyBqdXN0IGZvcndh cmQgc2NhbnMsIHNvIHdlCisgKiBjb3VsZCBzaW1wbHkgdGhlIGlQdHIgKG5vIHByb2JsZW0g YWZ0ZXIgY2hhbmdlIG9mIHNjYW4gZGlyZWN0aW9uKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg U3BHaXN0QmF0Y2hJbmZvCit7CisJLyogQ3VycmVudCByYW5nZSBvZiBpdGVtcyBpbiBhIGJh dGNoIChpZiB1c2VkKS4gKi8KKwlpbnQJCQlmaXJzdEluZGV4OworCWludAkJCWxhc3RJbmRl eDsKK30gU3BHaXN0QmF0Y2hJbmZvOworCiAvKgogICogUHJpdmF0ZSBzdGF0ZSBvZiBhbiBp bmRleCBzY2FuCiAgKi8KQEAgLTIzNSw2ICsyNDgsOCBAQCB0eXBlZGVmIHN0cnVjdCBTcEdp c3RTY2FuT3BhcXVlRGF0YQogCS8qIGRpc3RhbmNlcyAoZm9yIHJlY2hlY2spICovCiAJSW5k ZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3RhbmNlc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwog CisJU3BHaXN0QmF0Y2hJbmZvIGJhdGNoOwkJLyogYmF0Y2ggbG9hZGVkIGZyb20gdGhlIGlu ZGV4ICovCisKIAkvKgogCSAqIE5vdGU6IHVzaW5nIE1heEluZGV4VHVwbGVzUGVyUGFnZSBh Ym92ZSBpcyBhIGJpdCBob2tleSBzaW5jZQogCSAqIFNwR2lzdExlYWZUdXBsZXMgYXJlbid0 IGV4YWN0bHkgSW5kZXhUdXBsZXM7IGhvd2V2ZXIsIHRoZXkgYXJlIGxhcmdlciwKZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNzMxMzUzMGMyOTEuLjg4YmU3NDVkOWVhIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjcwMiw2ICsyNzAyLDcgQEAgU29y dFN1cHBvcnREYXRhCiBTb3J0VHVwbGUKIFNvcnRUdXBsZUNvbXBhcmF0b3IKIFNvcnRlZFBv aW50CitTcEdpc3RCYXRjaEluZm8KIFNwR2lzdEJ1aWxkU3RhdGUKIFNwR2lzdENhY2hlCiBT cEdpc3REZWFkVHVwbGUKLS0gCjIuNDYuMQoK --------------AwhMDARAWMF3JACXnrsprk8G--