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 1rC1kf-00DUCF-Rj for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Dec 2023 18:08:34 +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 1rC1ke-002N98-Ej for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Dec 2023 18:08:32 +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 1rC1kd-002N8x-SS for pgsql-hackers@lists.postgresql.org; Sat, 09 Dec 2023 18:08:32 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rC1kW-00B3Pt-RJ for pgsql-hackers@lists.postgresql.org; Sat, 09 Dec 2023 18:08:30 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-a1db99cd1b2so399616166b.2 for ; Sat, 09 Dec 2023 10:08:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1702145302; x=1702750102; darn=lists.postgresql.org; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=6TCyktUG+PR4UrWIE4HfDPPcgqznP8ucJD3g3tIkqkk=; b=fGiYRN0Qk+0K6Op5I4JDTPIakcggI8bguaOjs9lmgBxzykUTTPnmrpJelShgNDLH/8 oTbKJ+EQgd0rXQwe03EYRf+Ax8cCU1v0Z3DNmYzvvkdvGTwnZRlDe2iGjIlmBc0grtEC n2avPDlgK7TtC5UD+45k0BK49BuzaXQX48rRpCBJT5qylF23M9VLVu7K2UcIj6T7XYz+ NpXRAGhvC4xYYhoiWx6E9LojS0VyxLgOh+sn76UvmkxtFoj1xrZjWE1KRgL8b6Kn9Wai YYBVeIS0mRtlZxcFP2dm3oYkaCiAilhJeMIRYgB+G469uiQy4zOZkQLeommqi65Tx41Q k5Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702145302; x=1702750102; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=6TCyktUG+PR4UrWIE4HfDPPcgqznP8ucJD3g3tIkqkk=; b=Y3Fu/7qomGL4TkFUi8L0clXZwm1IFy8jGwKqejtGGk6L3TRGiDBl8Jscvc1DWr8bxU WkYRORNQCvzhd9R8IsVEkyRI+OqOpzAYKPJmoMcv8guhIc17XijsvhKMY4zWr7PJ7kDw m0knQ0X1ZBuHSefMe9kATkULnbizpDVzdqUD49rIbFJPnR8XMnF7FscJ9VFoocFAnUnb Njv3GjJ3kN7ZJaqASzpV5K8Kjl3Mkg34qzCc4trquosW7MFgJhq3rSxBvt8b1aw/Wo2b Mg0+CA0Art7LcFzu1PhviU8pt4fvQiBN/d2PO0VvMvYd5RFfLlaxxVlNknYjlK+WdpxJ xnhg== X-Gm-Message-State: AOJu0Ywdpf9rGHKsSVJgNbwLFtHJxcP2JlcIhPK9hjKeZPM96XEZnj/e ejc7fqyVI3OvFj5+4gxvprcQng== X-Google-Smtp-Source: AGHT+IF3M9deiQTt1W11gunGnAxxeh8OFVSNHat0T20oX1OJnBMEtVFHwkjHn1u5b3RnZVlCtTWf9A== X-Received: by 2002:a17:907:3c0a:b0:a18:58f3:357 with SMTP id gh10-20020a1709073c0a00b00a1858f30357mr501909ejc.68.1702145302398; Sat, 09 Dec 2023 10:08:22 -0800 (PST) Received: from [10.137.0.17] (ip-86-49-229-30.bb.vodafone.cz. [86.49.229.30]) by smtp.gmail.com with ESMTPSA id tf13-20020a1709078d8d00b00a1b8829597fsm2441571ejc.114.2023.12.09.10.08.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 09 Dec 2023 10:08:21 -0800 (PST) Content-Type: multipart/mixed; boundary="------------4B9o2eeZz326afukkg4ZXfmy" Message-ID: Date: Sat, 9 Dec 2023 19:08:20 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: index prefetching Content-Language: en-US From: Tomas Vondra To: Andres Freund Cc: PostgreSQL Hackers , Georgios References: <20230609000600.syqy447e6metnvyj@awork3.anarazel.de> <20230610203456.5gancfekm4pj4pbs@awork3.anarazel.de> <6030d836-e8b7-e7b9-2cbb-144309679d03@enterprisedb.com> <8c86c3a6-074e-6c88-3e7e-9452b6a37b9b@enterprisedb.com> <3cd40425-965a-5ce1-1af3-d51971c44b93@enterprisedb.com> <8ec36f51-b863-60e3-20e2-b9c981c5ce5e@enterprisedb.com> <06bb7d02-2c44-3062-731e-a735ba13da7e@enterprisedb.com> <367160ea-b1ed-4481-e804-bca509128878@enterprisedb.com> In-Reply-To: <367160ea-b1ed-4481-e804-bca509128878@enterprisedb.com> 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. --------------4B9o2eeZz326afukkg4ZXfmy Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's a simplified version of the patch series, with two important changes from the last version shared on 2023/11/24. Firstly, it abandons the idea to use preadv2() to check page cache. This initially seemed like a great way to check if prefetching is needed, but in practice it seems so expensive it's not really beneficial (especially in the "cached" case, which is where it matters most). Note: There's one more reason to not want rely on preadv2() that I forgot to mention - it's a Linux-specific thing. I wouldn't mind using it to improve already acceptable behavior, but it doesn't seem like a great idea if performance without would be poor. Secondly, this reworks multiple aspects of the "layering". Until now, the prefetching info was stored in IndexScanDesc and initialized in indexam.c in the various "beginscan" functions. That was obviously wrong - IndexScanDesc is just a description of what the scan should do, not a place where execution state (which the prefetch queue is) should be stored. IndexScanState (and IndexOnlyScanState) is a more appropriate place, so I moved it there. This also means the various "beginscan" functions don't need any changes (i.e. not even get prefetch_max), which is nice. Because the prefetch state is created/initialized elsewhere. But there's a layering problem that I don't know how to solve - I don't see how we could make indexam.c entirely oblivious to the prefetching, and move it entirely to the executor. Because how else would you know what to prefetch? With index_getnext_tid() I can imagine fetching XIDs ahead, stashing them into a queue, and prefetching based on that. That's kinda what the patch does, except that it does it from inside index_getnext_tid(). But that does not work for index_getnext_slot(), because that already reads the heap tuples. We could say prefetching only works for index_getnext_tid(), but that seems a bit weird because that's what regular index scans do. (There's a patch to evaluate filters on index, which switches index scans to index_getnext_tid(), so that'd make prefetching work too, but I'd ignore that here. There are other index_getnext_slot() callers, and I don't think we should accept does not work for those places seems wrong (e.g. execIndexing/execReplication would benefit from prefetching, I think). The patch just adds a "prefetcher" argument to index_getnext_*(), and the prefetching still happens there. I guess we could move most of the prefether typedefs/code somewhere, but I don't quite see how it could be done in executor entirely. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------4B9o2eeZz326afukkg4ZXfmy Content-Type: text/x-patch; charset=UTF-8; name="v20231209-0001-prefetch-2023-11-24.patch" Content-Disposition: attachment; filename="v20231209-0001-prefetch-2023-11-24.patch" Content-Transfer-Encoding: base64 RnJvbSBhMzMzNWRhMmE3YTI4ZGJiMjU4MzgwZmEyM2Q5ZGRkN2M4ODdmMWQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogRnJpLCAxNyBOb3YgMjAyMyAyMzo1NDoxOSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjIwMjMxMjA5IDEvMl0gcHJlZmV0Y2ggMjAyMy0xMS0yNAoKUGF0Y2ggdmVyc2lv biBzaGFyZWQgb24gMjAyMy8xMS8yNC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jIHwgIDEyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYyAgICAgICAgIHwgIDMxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jICAgICAgIHwgNjQ1ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMgICAgICAgICAgIHwgIDE4ICsKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNJbmRleGluZy5jICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNSZXBsaWNhdGlvbi5jICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2lu c3RydW1lbnQuYyAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYyB8ICA5NyArKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMgICAgIHwgIDgwICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAg ICAgICAgICB8IDExMCArKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAg ICAgICAgIHwgIDEwICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCAgICAg ICAgfCAgIDIgKwogMTMgZmlsZXMgY2hhbmdlZCwgOTk3IGluc2VydGlvbnMoKyksIDMwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CmluZGV4IDdjMjhkYWZiNzI4Li44OTQ3NDA3ODk1MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgogCiBzdGF0aWMg dm9pZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJ CQkJIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCkBAIC03NDcsNiArNzQ4 LDE0IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhl YXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAJCQlQUk9HUkVTU19DTFVTVEVSX0lOREVYX1JFTElE CiAJCX07CiAJCWludDY0CQljaV92YWxbMl07CisJCWludAkJCXByZWZldGNoX21heDsKKwor CQkvKgorCQkgKiBHZXQgdGhlIHByZWZldGNoIHRhcmdldCBmb3IgdGhlIG9sZCB0YWJsZXNw YWNlICh3aGljaCBpcyB3aGF0IHdlJ2xsCisJCSAqIHJlYWQgdXNpbmcgdGhlIGluZGV4KS4g V2UnbGwgdXNlIGl0IGFzIGEgcmVzZXQgdmFsdWUgdG9vLCBhbHRob3VnaAorCQkgKiB0aGVy ZSBzaG91bGQgYmUgbm8gcmVzY2FucyBmb3IgQ0xVU1RFUiBldGMuCisJCSAqLworCQlwcmVm ZXRjaF9tYXggPSBnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShPbGRIZWFwLT5yZF9y ZWwtPnJlbHRhYmxlc3BhY2UpOwogCiAJCS8qIFNldCBwaGFzZSBhbmQgT0lET2xkSW5kZXgg dG8gY29sdW1ucyAqLwogCQljaV92YWxbMF0gPSBQUk9HUkVTU19DTFVTVEVSX1BIQVNFX0lO REVYX1NDQU5fSEVBUDsKQEAgLTc1NSw3ICs3NjQsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29w eV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJ CXRhYmxlU2NhbiA9IE5VTEw7CiAJCWhlYXBTY2FuID0gTlVMTDsKLQkJaW5kZXhTY2FuID0g aW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgMCwgMCk7 CisJCWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25h cHNob3RBbnksIDAsIDAsCisJCQkJCQkJCQlwcmVmZXRjaF9tYXgpOwogCQlpbmRleF9yZXNj YW4oaW5kZXhTY2FuLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYwppbmRleCA0Y2ExMjAwNjg0My4uZDQ1YTIwOWVlM2EgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC0xMjYsNiArMTI2LDkgQEAgUmVsYXRpb25H ZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKQogCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2Mg PSBOVUxMOwogCisJLyogSW5mb3JtYXRpb24gdXNlZCBmb3IgYXN5bmNocm9ub3VzIHByZWZl dGNoaW5nIGR1cmluZyBpbmRleCBzY2Fucy4gKi8KKwlzY2FuLT54c19wcmVmZXRjaCA9IE5V TEw7CisKIAlyZXR1cm4gc2NhbjsKIH0KIApAQCAtNDQwLDggKzQ0MywyMCBAQCBzeXN0YWJs ZV9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJST1IsICJj b2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJCX0KIAorCQkvKgorCQkgKiBXZSBkb24ndCBk byBhbnkgcHJlZmV0Y2hpbmcgb24gc3lzdGVtIGNhdGFsb2dzLCBmb3IgdHdvIG1haW4gcmVh c29ucy4KKwkJICoKKwkJICogRmlyc3RseSwgd2UgdXN1YWxseSBkbyBQSyBsb29rdXBzLCB3 aGljaCBtYWtlcyBwcmVmZXRjaGluZyBwb2ludGxlcywKKwkJICogb3Igd2Ugb2Z0ZW4gZG9u J3Qga25vdyBob3cgbWFueSByb3dzIHRvIGV4cGVjdCAoYW5kIHRoZSBudW1iZXJzIHRlbmQK KwkJICogdG8gYmUgZmFpcmx5IGxvdykuIFNvIGl0J3Mgbm90IGNsZWFyIGl0J2QgaGVscC4g RnVydGhlcm1vcmUsIHBsYWNlcworCQkgKiB0aGF0IGFyZSBzZW5zaXRpdmUgdGVuZCB0byB1 c2Ugc3lzY2FjaGUgYW55d2F5LgorCQkgKgorCQkgKiBTZWNvbmRseSwgd2UgY2FuJ3QgY2Fs bCBnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeSgpIGJlY2F1c2UgdGhhdAorCQkgKiBk b2VzIGEgc3lzc2NhbiBpbnRlcm5hbGx5LCBzbyBpdCBtaWdodCBsZWFkIHRvIGEgY3ljbGUu IFdlIGNvdWxkIHVzZQorCQkgKiB1c2UgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5LCBidXQg aXQgZG9lc24ndCBzZWVtIHdvcnRoIGl0LgorCQkgKi8KIAkJc3lzc2Nhbi0+aXNjYW4gPSBp bmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLAotCQkJCQkJCQkJCSBzbmFwc2hv dCwgbmtleXMsIDApOworCQkJCQkJCQkJCSBzbmFwc2hvdCwgbmtleXMsIDAsIDApOwogCQlp bmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGtleSwgbmtleXMsIE5VTEwsIDApOwogCQlz eXNzY2FuLT5zY2FuID0gTlVMTDsKIAl9CkBAIC02OTYsOCArNzExLDIwIEBAIHN5c3RhYmxl X2JlZ2luc2Nhbl9vcmRlcmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCWVsb2coRVJS T1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJfQogCisJLyoKKwkgKiBXZSBkb24n dCBkbyBhbnkgcHJlZmV0Y2hpbmcgb24gc3lzdGVtIGNhdGFsb2dzLCBmb3IgdHdvIG1haW4g cmVhc29ucy4KKwkgKgorCSAqIEZpcnN0bHksIHdlIHVzdWFsbHkgZG8gUEsgbG9va3Vwcywg d2hpY2ggbWFrZXMgcHJlZmV0Y2hpbmcgcG9pbnRsZXMsCisJICogb3Igd2Ugb2Z0ZW4gZG9u J3Qga25vdyBob3cgbWFueSByb3dzIHRvIGV4cGVjdCAoYW5kIHRoZSBudW1iZXJzIHRlbmQK KwkgKiB0byBiZSBmYWlybHkgbG93KS4gU28gaXQncyBub3QgY2xlYXIgaXQnZCBoZWxwLiBG dXJ0aGVybW9yZSwgcGxhY2VzCisJICogdGhhdCBhcmUgc2Vuc2l0aXZlIHRlbmQgdG8gdXNl IHN5c2NhY2hlIGFueXdheS4KKwkgKgorCSAqIFNlY29uZGx5LCB3ZSBjYW4ndCBjYWxsIGdl dF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KCkgYmVjYXVzZSB0aGF0CisJICogZG9lcyBh IHN5c3NjYW4gaW50ZXJuYWxseSwgc28gaXQgbWlnaHQgbGVhZCB0byBhIGN5Y2xlLiBXZSBj b3VsZCB1c2UKKwkgKiB1c2UgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5LCBidXQgaXQgZG9l c24ndCBzZWVtIHdvcnRoIGl0LgorCSAqLwogCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVn aW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKLQkJCQkJCQkJCSBzbmFwc2hv dCwgbmtleXMsIDApOworCQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCwgMCk7CiAJaW5k ZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNz Y2FuLT5zY2FuID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5k ZXggZjIzZTAxOTlmMDguLmU0OTM1NDhiNjhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMKQEAgLTQ5LDE2ICs0OSwxOSBAQAogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2Fu LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHJh bnNhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19hbXByb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNp bmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgi CiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAj aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgogI2luY2x1ZGUgInV0aWxz L3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgpAQCAtMTA2LDcgKzEw OSwxMiBAQCBkbyB7IFwKIAogc3RhdGljIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2Fu X2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkJCSAgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKKwkJCQkJCQkJ CQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwLAorCQkJ CQkJCQkJCQkgIGludCBwcmVmZXRjaF9tYXgpOworCitzdGF0aWMgdm9pZCBpbmRleF9wcmVm ZXRjaF90aWRzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p Oworc3RhdGljIEl0ZW1Qb2ludGVyIGluZGV4X3ByZWZldGNoX2dldF90aWQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCAqYWxsX3Zpc2libGUp Oworc3RhdGljIHZvaWQgaW5kZXhfcHJlZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVt UG9pbnRlciB0aWQsIGJvb2wgc2tpcF9hbGxfdmlzaWJsZSwgYm9vbCAqYWxsX3Zpc2libGUp OwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxNSwxOCArMjIzLDQyIEBAIGluZGV4X2luc2Vy dF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgKiBpbmRleF9iZWdpbnNjYW4g LSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdldHR1cGxlCiAgKgogICogQ2Fs bGVyIG11c3QgYmUgaG9sZGluZyBzdWl0YWJsZSBsb2NrcyBvbiB0aGUgaGVhcCBhbmQgdGhl IGluZGV4LgorICoKKyAqIHByZWZldGNoX21heCBkZXRlcm1pbmVzIGlmIHByZWZldGNoaW5n IGlzIHJlcXVlc3RlZCBmb3IgdGhpcyBpbmRleCBzY2FuLAorICogYW5kIGhvdyBmYXIgYWhl YWQgd2Ugd2FudCB0byBwcmVmZXRjaAorICoKKyAqIFNldHRpbmcgcHJlZmV0Y2hfbWF4IHRv IDAgZGlzYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIHRoZSBpbmRleCBzY2FuLiBXZSBkbworICog dGhpcyBmb3IgdHdvIHJlYXNvbnMgLSBmb3Igc2NhbnMgb24gc3lzdGVtIGNhdGFsb2dzLCBh bmQvb3IgZm9yIGNhc2VzIHdoZXJlCisgKiBwcmVmZXRjaGluZyBpcyBleHBlY3RlZCB0byBi ZSBwb2ludGxlc3MgKGxpa2UgSU9TKS4KKyAqCisgKiBGb3Igc3lzdGVtIGNhdGFsb2dzLCB3 ZSB1c3VhbGx5IGVpdGhlciBzY2FuIGJ5IGEgUEsgdmFsdWUsIG9yIHdlIHdlIGV4cGVjdAor ICogb25seSBmZXcgcm93cyAob3IgcmF0aGVyIHdlIGRvbid0IGtub3cgaG93IG1hbnkgcm93 cyB0byBleHBlY3QpLiBBbHNvLCB3ZQorICogbmVlZCB0byBwcmV2ZW50IGluZmluaXRlIGlu IHRoZSBnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeSgpIGNhbGwgLSBpdAorICogZG9l cyBhbiBpbmRleCBzY2FuIGludGVybmFsbHkuIFNvIHdlIHNpbXBseSBkaXNhYmxlIHByZWZl dGNoaW5nIGZvciBzeXN0ZW0KKyAqIGNhdGFsb2dzLiBXZSBjb3VsZCBkZWFsIHdpdGggdGhp cyBieSBwaWNraW5nIGEgY29uc2VydmF0aXZlIHN0YXRpYyB0YXJnZXQKKyAqIChlLmcuIGVm ZmVjdGl2ZV9pb19jb25jdXJyZW5jeSwgY2FwcGVkIHRvIHNvbWV0aGluZyksIGJ1dCBwbGFj ZXMgdGhhdCBhcmUKKyAqIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBsaWtlbHkgdXNlIHN5c2Nh Y2hlIGFueXdheSwgYW5kIGNhdGFsb2dzIHRlbmQgdG8gYmUKKyAqIHZlcnkgc21hbGwgYW5k IGhvdC4gU28gd2UgZG9uJ3QgYm90aGVyLgorICoKKyAqIEZvciBJT1MsIHdlIGV4cGVjdCB0 byBub3QgbmVlZCBtb3N0IGhlYXAgcGFnZXMgKHRoYXQncyB0aGUgd2hvbGUgcG9pbnQgb2YK KyAqIElPUywgYWN0dWFsbHkpLCBhbmQgcHJlZmV0Y2hpbmcgdGhlbSBtaWdodCBsZWFkIHRv IGEgbG90IG9mIHdhc3RlZCBJL08uCisgKgorICogWFhYIE5vdCBzdXJlIHRoZSBpbmZpbml0 ZSBsb29wIGNhbiBzdGlsbCBoYXBwZW4sIG5vdyB0aGF0IHRoZSB0YXJnZXQgbG9va3VwCisg KiBtb3ZlZCB0byBjYWxsZXJzIG9mIGluZGV4X2JlZ2luc2Nhbi4KICAqLwogSW5kZXhTY2Fu RGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQlSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCWludCBu a2V5cywgaW50IG5vcmRlcmJ5cykKKwkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMsCisJ CQkJaW50IHByZWZldGNoX21heCkKIHsKIAlJbmRleFNjYW5EZXNjIHNjYW47CiAKIAlBc3Nl cnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKIAotCXNjYW4gPSBpbmRleF9iZWdp bnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNo b3QsIE5VTEwsIGZhbHNlKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGlu ZGV4UmVsYXRpb24sIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAorCQkJCQkJCQkJTlVM TCwgZmFsc2UsIHByZWZldGNoX21heCk7CiAKIAkvKgogCSAqIFNhdmUgYWRkaXRpb25hbCBw YXJhbWV0ZXJzIGludG8gdGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQK QEAgLTI1Niw3ICsyODgsOCBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCiAKIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsK IAotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtl eXMsIDAsIHNuYXBzaG90LCBOVUxMLCBmYWxzZSk7CisJLyogTm8gcHJlZmV0Y2ggaW4gYml0 bWFwIHNjYW5zLCBwcmVmZXRjaCBpcyBkb25lIGJ5IHRoZSBoZWFwIHNjYW4uICovCisJc2Nh biA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJlbGF0aW9uLCBua2V5cywgMCwg c25hcHNob3QsIE5VTEwsIGZhbHNlLCAwKTsKIAogCS8qCiAJICogU2F2ZSBhZGRpdGlvbmFs IHBhcmFtZXRlcnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNl dApAQCAtMjczLDcgKzMwNiw4IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKIHN0YXRpYyBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5f aW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCSBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMsIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJIFBhcmFsbGVsSW5kZXhT Y2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXApCisJCQkJCQkgUGFyYWxsZWxJbmRleFNj YW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCwKKwkJCQkJCSBpbnQgcHJlZmV0Y2hfbWF4 KQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIApAQCAtMjk2LDYgKzMzMCwzMSBAQCBpbmRl eF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkvKiBJbml0 aWFsaXplIGluZm9ybWF0aW9uIGZvciBwYXJhbGxlbCBzY2FuLiAqLwogCXNjYW4tPnBhcmFs bGVsX3NjYW4gPSBwc2NhbjsKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3NuYXA7CisJ c2Nhbi0+aW5kZXhvbmx5ID0gZmFsc2U7CisKKwkvKgorCSAqIFdpdGggcHJlZmV0Y2hpbmcg cmVxdWVzdGVkLCBpbml0aWFsaXplIHRoZSBwcmVmZXRjaGVyIHN0YXRlLgorCSAqCisJICog RklYTUUgVGhpcyBzaG91bGQgcmVhbGx5IGJlIGluIHRoZSBJbmRleFNjYW5TdGF0ZSwgbm90 IEluZGV4U2NhbkRlc2MKKwkgKiAoY2VydGFpbmx5IHRoZSBxdWV1ZXMgZXRjKS4gQnV0IGlu ZGV4X2dldG5leHRfdGlkIG9ubHkgZ2V0cyB0aGUgc2NhbgorCSAqIGRlc2NyaXB0b3IsIHNv IGhvdyBlbHNlIHdvdWxkIHdlIHBhc3MgaXQ/IFNlZW1zIGxpa2UgYSBzaWduIG9mIHdyb25n CisJICogbGF5ZXIgZG9pbmcgdGhlIHByZWZldGNoaW5nLgorCSAqLworCWlmICgocHJlZmV0 Y2hfbWF4ID4gMCkgJiYKKwkJKGlvX2RpcmVjdF9mbGFncyAmIElPX0RJUkVDVF9EQVRBKSA9 PSAwKQkvKiBubyBwcmVmZXRjaGluZyBmb3IgZGlyZWN0IEkvTyAqLworCXsKKwkJSW5kZXhQ cmVmZXRjaCBwcmVmZXRjaGVyID0gcGFsbG9jMChzaXplb2YoSW5kZXhQcmVmZXRjaERhdGEp KTsKKworCQlwcmVmZXRjaGVyLT5xdWV1ZUluZGV4ID0gMDsKKwkJcHJlZmV0Y2hlci0+cXVl dWVTdGFydCA9IDA7CisJCXByZWZldGNoZXItPnF1ZXVlRW5kID0gMDsKKworCQlwcmVmZXRj aGVyLT5wcmVmZXRjaFRhcmdldCA9IDA7CisJCXByZWZldGNoZXItPnByZWZldGNoTWF4VGFy Z2V0ID0gcHJlZmV0Y2hfbWF4OworCQlwcmVmZXRjaGVyLT52bUJ1ZmZlciA9IEludmFsaWRC dWZmZXI7CisKKwkJc2Nhbi0+eHNfcHJlZmV0Y2ggPSBwcmVmZXRjaGVyOworCX0KIAogCXJl dHVybiBzY2FuOwogfQpAQCAtMzMyLDYgKzM5MSwyMCBAQCBpbmRleF9yZXNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuLAogCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVz Y2FuKHNjYW4sIGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5cywgbm9yZGVyYnlz KTsKKworCS8qIElmIHdlJ3JlIHByZWZldGNoaW5nIGZvciB0aGlzIGluZGV4LCBtYXliZSBy ZXNldCBzb21lIG9mIHRoZSBzdGF0ZS4gKi8KKwlpZiAoc2Nhbi0+eHNfcHJlZmV0Y2ggIT0g TlVMTCkKKwl7CisJCUluZGV4UHJlZmV0Y2ggcHJlZmV0Y2hlciA9IHNjYW4tPnhzX3ByZWZl dGNoOworCisJCXByZWZldGNoZXItPnF1ZXVlU3RhcnQgPSAwOworCQlwcmVmZXRjaGVyLT5x dWV1ZUVuZCA9IDA7CisJCXByZWZldGNoZXItPnF1ZXVlSW5kZXggPSAwOworCQlwcmVmZXRj aGVyLT5wcmVmZXRjaERvbmUgPSBmYWxzZTsKKworCQkvKiByZXN0YXJ0IHRoZSBpbmNyZW1l bnRhbCByYW1wLXVwICovCisJCXByZWZldGNoZXItPnByZWZldGNoVGFyZ2V0ID0gMDsKKwl9 CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTM2MCw2ICs0MzMsMjMgQEAgaW5kZXhf ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKHNjYW4tPnhzX3RlbXBfc25hcCkK IAkJVW5yZWdpc3RlclNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KTsKIAorCS8qCisJICog SWYgcHJlZmV0Y2hpbmcgd2FzIGVuYWJsZWQgZm9yIHRoaXMgc2NhbiwgbG9nIHByZWZldGNo IHN0YXRzLgorCSAqCisJICogRklYTUUgVGhpcyBzaG91bGQgcmVhbGx5IGdvIHRvIEVYUExB SU4gQU5BTFlaRSBpbnN0ZWFkLgorCSAqLworCWlmIChzY2FuLT54c19wcmVmZXRjaCkKKwl7 CisJCUluZGV4UHJlZmV0Y2ggcHJlZmV0Y2ggPSBzY2FuLT54c19wcmVmZXRjaDsKKworCQll bG9nKExPRywgImluZGV4IHByZWZldGNoIHN0YXRzOiByZXF1ZXN0cyAiIFVJTlQ2NF9GT1JN QVQgIiBwcmVmZXRjaGVzICIgVUlOVDY0X0ZPUk1BVCAiICglZikgc2tpcCBjYWNoZWQgIiBV SU5UNjRfRk9STUFUICIgc2VxdWVudGlhbCAiIFVJTlQ2NF9GT1JNQVQsCisJCQkgcHJlZmV0 Y2gtPmNvdW50QWxsLAorCQkJIHByZWZldGNoLT5jb3VudFByZWZldGNoLAorCQkJIHByZWZl dGNoLT5jb3VudFByZWZldGNoICogMTAwLjAgLyBwcmVmZXRjaC0+Y291bnRBbGwsCisJCQkg cHJlZmV0Y2gtPmNvdW50U2tpcENhY2hlZCwKKwkJCSBwcmVmZXRjaC0+Y291bnRTa2lwU2Vx dWVudGlhbCk7CisJfQorCiAJLyogUmVsZWFzZSB0aGUgc2NhbiBkYXRhIHN0cnVjdHVyZSBp dHNlbGYgKi8KIAlJbmRleFNjYW5FbmQoc2Nhbik7CiB9CkBAIC01MDUsNyArNTk1LDggQEAg aW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNj YW5EZXNjCiBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVs YXRpb24gaW5kZXhyZWwsIGludCBua2V5cywKLQkJCQkJCSBpbnQgbm9yZGVyYnlzLCBQYXJh bGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pCisJCQkJCQkgaW50IG5vcmRlcmJ5cywgUGFyYWxs ZWxJbmRleFNjYW5EZXNjIHBzY2FuLAorCQkJCQkJIGludCBwcmVmZXRjaF9tYXgpCiB7CiAJ U25hcHNob3QJc25hcHNob3Q7CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwpAQCAtNTE0LDcgKzYw NSw3IEBAIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxh dGlvbiBpbmRleHJlbCwgaW50IG5rZXlzLAogCXNuYXBzaG90ID0gUmVzdG9yZVNuYXBzaG90 KHBzY2FuLT5wc19zbmFwc2hvdF9kYXRhKTsKIAlSZWdpc3RlclNuYXBzaG90KHNuYXBzaG90 KTsKIAlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4cmVsLCBua2V5cywg bm9yZGVyYnlzLCBzbmFwc2hvdCwKLQkJCQkJCQkJCXBzY2FuLCB0cnVlKTsKKwkJCQkJCQkJ CXBzY2FuLCB0cnVlLCBwcmVmZXRjaF9tYXgpOwogCiAJLyoKIAkgKiBTYXZlIGFkZGl0aW9u YWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMg c2V0CkBAIC01MzYsOCArNjI3LDggQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0 aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLCBpbnQgbmtleXMsCiAgKiBvciBOVUxM IGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgogICogLS0tLS0tLS0tLS0tLS0t LQogICovCi1JdGVtUG9pbnRlcgotaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3N0YXRpYyBJdGVtUG9pbnRlcgoraW5k ZXhfZ2V0bmV4dF90aWRfaW50ZXJuYWwoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbikKIHsKIAlib29sCQlmb3VuZDsKIApAQCAtNjQwLDEyICs3MzEsMTYg QEAgaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICoKIHsKIAlmb3IgKDs7KQogCXsKKwkJLyog RG8gcHJlZmV0Y2hpbmcgKGlmIHJlcXVlc3RlZC9lbmFibGVkKS4gKi8KKwkJaW5kZXhfcHJl ZmV0Y2hfdGlkcyhzY2FuLCBkaXJlY3Rpb24pOworCiAJCWlmICghc2Nhbi0+eHNfaGVhcF9j b250aW51ZSkKIAkJewotCQkJSXRlbVBvaW50ZXIgdGlkOworCQkJSXRlbVBvaW50ZXIJdGlk OworCQkJYm9vbAkJYWxsX3Zpc2libGU7CiAKIAkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5l eHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChz Y2FuLCBkaXJlY3Rpb24pOworCQkJdGlkID0gaW5kZXhfcHJlZmV0Y2hfZ2V0X3RpZChzY2Fu LCBkaXJlY3Rpb24sICZhbGxfdmlzaWJsZSk7CiAKIAkJCS8qIElmIHdlJ3JlIG91dCBvZiBp bmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCiAJCQlpZiAodGlkID09IE5VTEwpCkBAIC0x MDAzLDMgKzEwOTgsNTMxIEBAIGluZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxhdGlvbiBpbmRy ZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBEYXR1bSBhdHRvcHRpb25zLAogCiAJcmV0dXJuIGJ1 aWxkX2xvY2FsX3JlbG9wdGlvbnMoJnJlbG9wdHMsIGF0dG9wdGlvbnMsIHZhbGlkYXRlKTsK IH0KKworLyoKKyAqIGluZGV4X3ByZWZldGNoX2lzX3NlcXVlbnRpYWwKKyAqCQlUcmFjayB0 aGUgYmxvY2sgbnVtYmVyIGFuZCBjaGVjayBpZiB0aGUgSS9PIHBhdHRlcm4gaXMgc2VxdWVu dGlhbCwKKyAqCQlvciBpZiB0aGUgc2FtZSBibG9jayB3YXMganVzdCBwcmVmZXRjaGVkLgor ICoKKyAqIFByZWZldGNoaW5nIGlzIGNoZWFwLCBidXQgZm9yIHNvbWUgYWNjZXNzIHBhdHRl cm5zIHRoZSBiZW5lZml0cyBhcmUgc21hbGwKKyAqIGNvbXBhcmVkIHRvIHRoZSBleHRyYSBv dmVyaGVhZC4gSW4gcGFydGljdWxhciwgZm9yIHNlcXVlbnRpYWwgYWNjZXNzIHRoZQorICog cmVhZC1haGVhZCBwZXJmb3JtZWQgYnkgdGhlIE9TIGlzIHZlcnkgZWZmZWN0aXZlL2VmZmlj aWVudC4gRG9pbmcgbW9yZQorICogcHJlZmV0Y2hpbmcgaXMganVzdCBpbmNyZWFzaW5nIHRo ZSBjb3N0cy4KKyAqCisgKiBUaGlzIHRyaWVzIHRvIGlkZW50aWZ5IHNpbXBsZSBzZXF1ZW50 aWFsIHBhdHRlcm5zLCBzbyB0aGF0IHdlIGNhbiBza2lwCisgKiB0aGUgcHJlZmV0Y2hpbmcg cmVxdWVzdC4gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcgYSBzbWFsbCBxdWV1ZQor ICogb2YgYmxvY2sgbnVtYmVycywgYW5kIGNoZWNraW5nIGl0IGJlZm9yZSBwcmVmZXRjaGlu ZyBhbm90aGVyIGJsb2NrLgorICoKKyAqIFdlIGxvb2sgYXQgdGhlIHByZWNlZGluZyBQUkVG RVRDSF9TRVFfUEFUVEVSTl9CTE9DS1MgYmxvY2tzLCBhbmQgc2VlIGlmCisgKiB0aGV5IGFy ZSBzZXF1ZW50aWFsLiBXZSBhbHNvIGNoZWNrIGlmIHRoZSBibG9jayBpcyB0aGUgc2FtZSBh cyB0aGUgbGFzdAorICogcmVxdWVzdCAod2hpY2ggaXMgbm90IHNlcXVlbnRpYWwpLgorICoK KyAqIE5vdGUgdGhhdCB0aGUgbWFpbiBwcmVmZXRjaCBxdWV1ZSBpcyBub3QgcmVhbGx5IHVz ZWZ1bCBmb3IgdGhpcywgYXMgaXQKKyAqIHN0b3JlcyBUSURzIHdoaWxlIHdlIGNhcmUgYWJv dXQgYmxvY2sgbnVtYmVycy4gQ29uc2lkZXIgYSBzb3J0ZWQgdGFibGUsCisgKiB3aXRoIGEg cGVyZmVjdGx5IHNlcXVlbnRpYWwgcGF0dGVybiB3aGVuIGFjY2Vzc2VkIHRocm91Z2ggYW4g aW5kZXguIEVhY2gKKyAqIGhlYXAgcGFnZSBtYXkgaGF2ZSBkb3plbnMgb2YgVElEcywgYnV0 IHdlIG5lZWQgdG8gY2hlY2sgYmxvY2sgbnVtYmVycy4KKyAqIFdlIGNvdWxkIGtlZXAgZW5v dWdoIFRJRHMgdG8gY292ZXIgZW5vdWdoIGJsb2NrcywgYnV0IHRoZW4gd2UgYWxzbyBuZWVk CisgKiB0byB3YWxrIHRob3NlIHdoZW4gY2hlY2tpbmcgdGhlIHBhdHRlcm4gKGluIGhvdCBw YXRoKS4KKyAqCisgKiBTbyBpbnN0ZWFkLCB3ZSBtYWludGFpbiBhIHNtYWxsIHNlcGFyYXRl IHF1ZXVlIG9mIGJsb2NrIG51bWJlcnMsIGFuZCB3ZSB1c2UKKyAqIHRoaXMgaW5zdGVhZC4K KyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJsb2NrIGlzIGluIGEgc2VxdWVudGlhbCBw YXR0ZXJuIChhbmQgc28gc2hvdWxkIG5vdCBiZQorICogcHJlZmV0Y2hlZCksIG9yIGZhbHNl IChub3Qgc2VxdWVudGlhbCwgc2hvdWxkIGJlIHByZWZldGNoZWQpLgorICoKKyAqIFhYWCBU aGUgbmFtZSBpcyBhIGJpdCBtaXNsZWFkaW5nLCBhcyBpdCBhbHNvIGFkZHMgdGhlIGJsb2Nr IG51bWJlciB0byB0aGUKKyAqIGJsb2NrIHF1ZXVlIGFuZCBjaGVja3MgaWYgdGhlIGJsb2Nr IGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IG9uZSAod2hpY2gKKyAqIGRvZXMgbm90IHJlcXVp cmUgYSBzZXF1ZW50aWFsIHBhdHRlcm4pLgorICovCitzdGF0aWMgYm9vbAoraW5kZXhfcHJl ZmV0Y2hfaXNfc2VxdWVudGlhbChJbmRleFByZWZldGNoIHByZWZldGNoLCBCbG9ja051bWJl ciBibG9jaykKK3sKKwlpbnQJCQlpZHg7CisKKwkvKgorCSAqIElmIHRoZSBibG9jayBxdWV1 ZSBpcyBlbXB0eSwganVzdCBzdG9yZSB0aGUgYmxvY2sgYW5kIHdlJ3JlIGRvbmUgKGl0J3MK KwkgKiBuZWl0aGVyIGEgc2VxdWVudGlhbCBwYXR0ZXJuLCBuZWl0aGVyIHJlY2VudGx5IHBy ZWZldGNoZWQgYmxvY2spLgorCSAqLworCWlmIChwcmVmZXRjaC0+YmxvY2tJbmRleCA9PSAw KQorCXsKKwkJcHJlZmV0Y2gtPmJsb2NrSXRlbXNbUFJFRkVUQ0hfQkxPQ0tfSU5ERVgocHJl ZmV0Y2gtPmJsb2NrSW5kZXgpXSA9IGJsb2NrOworCQlwcmVmZXRjaC0+YmxvY2tJbmRleCsr OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIHRoZSBz YW1lIGFzIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYmxvY2suIFdlIGRvbid0CisJICog d2FudCB0byBwcmVmZXRjaCB0aGUgc2FtZSBibG9jayBvdmVyIGFuZCBvdmVyICh3aGljaCB3 b3VsZCBoYXBwZW4gZm9yCisJICogd2VsbCBjb3JyZWxhdGVkIGluZGV4ZXMpLgorCSAqCisJ ICogSW4gcHJpbmNpcGxlIHdlIGNvdWxkIHJlbHkgb24gaW5kZXhfcHJlZmV0Y2hfYWRkX2Nh Y2hlIGRvaW5nIHRoaXMgdXNpbmcKKwkgKiB0aGUgZnVsbCBjYWNoZSwgYnV0IHRoaXMgY2hl Y2sgaXMgbXVjaCBjaGVhcGVyIGFuZCB3ZSBuZWVkIHRvIGxvb2sgYXQKKwkgKiB0aGUgcHJl Y2VkaW5nIGJsb2NrIGFueXdheSwgc28gd2UganVzdCBkbyBpdC4KKwkgKgorCSAqIFhYWCBO b3RpY2Ugd2UgaGF2ZW4ndCBhZGRlZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrIHF1ZXVlIHll dCwgYW5kIHRoZXJlCisJICogaXMgYSBwcmVjZWRpbmcgYmxvY2sgKGkuZS4gYmxvY2tJbmRl eC0xIGlzIHZhbGlkKS4KKwkgKi8KKwlpZiAocHJlZmV0Y2gtPmJsb2NrSXRlbXNbUFJFRkVU Q0hfQkxPQ0tfSU5ERVgocHJlZmV0Y2gtPmJsb2NrSW5kZXggLSAxKV0gPT0gYmxvY2spCisJ CXJldHVybiB0cnVlOworCisJLyoKKwkgKiBBZGQgdGhlIGJsb2NrIG51bWJlciB0byB0aGUg cXVldWUuCisJICoKKwkgKiBXZSBkbyB0aGlzIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgcGF0 dGVybiwgYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cKKwkgKiBhYm91dCB0aGUgYmxvY2sgZXZl biBpZiB3ZSBlbmQgdXAgc2tpcHBpbmcgdGhlIHByZWZldGNoLiBPdGhlcndpc2Ugd2UnZAor CSAqIG5vdCBiZSBhYmxlIHRvIGRldGVjdCBsb25nZXIgc2VxdWVudGlhbCBwYXR0ZW5zIC0g d2UnZCBza2lwIG9uZSBibG9jaworCSAqIGJ1dCB0aGVuIGZhaWwgdG8gc2tpcCB0aGUgbmV4 dCBjb3VwbGUgYmxvY2tzIGV2ZW4gaW4gYSBwZXJmZWN0CisJICogc2VxdWVudGlhbCBwYXR0 ZXJuLiBUaGlzIG9jaWxsYXRpb24gbWlnaHQgZXZlbiBwcmV2ZW50IHRoZSBPUworCSAqIHJl YWQtYWhlYWQgZnJvbSBraWNraW5nIGluLgorCSAqLworCXByZWZldGNoLT5ibG9ja0l0ZW1z W1BSRUZFVENIX0JMT0NLX0lOREVYKHByZWZldGNoLT5ibG9ja0luZGV4KV0gPSBibG9jazsK KwlwcmVmZXRjaC0+YmxvY2tJbmRleCsrOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgbGFz dCBjb3VwbGUgYmxvY2tzIGFyZSBpbiBhIHNlcXVlbnRpYWwgcGF0dGVybi4gV2UgbG9vawor CSAqIGZvciBhIHNlcXVlbnRpYWwgcGF0dGVybiBvZiBQUkVGRVRDSF9TRVFfUEFUVEVSTl9C TE9DS1MgKDQgYnkgZGVmYXVsdCksCisJICogc28gd2UgbG9vayBmb3IgcGF0dGVybnMgb2Yg NSBwYWdlcyAoNDBrQikgaW5jbHVkaW5nIHRoZSBuZXcgYmxvY2suCisJICoKKwkgKiBYWFgg UGVyaGFwcyB0aGlzIHNob3VsZCBiZSB0aWVkIHRvIGVmZmVjdGl2ZV9pb19jb25jdXJyZW5j eSBzb21laG93PworCSAqCisJICogWFhYIENvdWxkIGl0IGJlIGhhcm1mdWwgdGhhdCB3ZSBy ZWFkIHRoZSBxdWV1ZSBiYWNrd2FyZHM/IE1heWJlIG1lbW9yeQorCSAqIHByZWZldGNoaW5n IHdvcmtzIGJldHRlciBmb3IgdGhlIGZvcndhcmQgZGlyZWN0aW9uPworCSAqLworCWZvciAo aW50IGkgPSAxOyBpIDwgUFJFRkVUQ0hfU0VRX1BBVFRFUk5fQkxPQ0tTOyBpKyspCisJewor CQkvKgorCQkgKiBBcmUgdGhlcmUgZW5vdWdoIHJlcXVlc3RzIHRvIGNvbmZpcm0gYSBzZXF1 ZW50aWFsIHBhdHRlcm4/IFdlIG9ubHkKKwkJICogY29uc2lkZXIgc29tZXRoaW5nIHRvIGJl IHNlcXVlbnRpYWwgYWZ0ZXIgZmluZGluZyBhIHNlcXVlbmNlIG9mCisJCSAqIFBSRUZFVENI X1NFUV9QQVRURVJOX0JMT0NLUyBibG9ja3MuCisJCSAqCisJCSAqIEZJWE1FIEJldHRlciB0 byBtb3ZlIHRoaXMgb3V0c2lkZSB0aGUgbG9vcC4KKwkJICovCisJCWlmIChwcmVmZXRjaC0+ YmxvY2tJbmRleCA8IGkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogQ2FsY3Vs YXRlIGluZGV4IG9mIHRoZSBlYXJsaWVyIGJsb2NrICh3ZSBuZWVkIHRvIGRvIC0xIGFzIHdl CisJCSAqIGFscmVhZHkgaW5jcmVtZW50ZWQgdGhlIGluZGV4IHdoZW4gYWRkaW5nIHRoZSBu ZXcgYmxvY2sgdG8gdGhlCisJCSAqIHF1ZXVlKS4KKwkJICovCisJCWlkeCA9IFBSRUZFVENI X0JMT0NLX0lOREVYKHByZWZldGNoLT5ibG9ja0luZGV4IC0gaSAtIDEpOworCisJCS8qCisJ CSAqIEZvciBhIHNlcXVlbnRpYWwgcGF0dGVybiwgYmxvY2tzICJrIiBzdGVwIGFnbyBuZWVk cyB0byBoYXZlIGJsb2NrCisJCSAqIG51bWJlciBieSAiayIgc21hbGxlciBjb21wYXJlZCB0 byB0aGUgY3VycmVudCBibG9jay4KKwkJICovCisJCWlmIChwcmVmZXRjaC0+YmxvY2tJdGVt c1tpZHhdICE9IChibG9jayAtIGkpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVy biB0cnVlOworfQorCisvKgorICogaW5kZXhfcHJlZmV0Y2hfYWRkX2NhY2hlCisgKgkJQWRk IGEgYmxvY2sgdG8gdGhlIGNhY2hlLCBjaGVjayBpZiBpdCB3YXMgcmVjZW50bHkgcHJlZmV0 Y2hlZC4KKyAqCisgKiBXZSBkb24ndCB3YW50IHRvIHByZWZldGNoIGJsb2NrcyB0aGF0IHdl IGFscmVhZHkgcHJlZmV0Y2hlZCByZWNlbnRseS4gSXQncworICogY2hlYXAgYnV0IG5vdCBm cmVlLCBhbmQgdGhlIG92ZXJoZWFkIG1heSBoYXZlIG1lYXN1cmFibGUgaW1wYWN0LgorICoK KyAqIFRoaXMgY2hlY2sgbmVlZHMgdG8gYmUgdmVyeSBjaGVhcCwgZXZlbiB3aXRoIGZhaXJs eSBsYXJnZSBjYWNoZXMgKGh1bmRyZWRzCisgKiBvZiBlbnRyaWVzLCBzZWUgUFJFRkVUQ0hf Q0FDSEVfU0laRSkuCisgKgorICogQSBzaW1wbGUgcXVldWUgd291bGQgYWxsb3cgZXhwaXJp bmcgdGhlIHJlcXVlc3RzLCBidXQgY2hlY2tpbmcgaWYgaXQKKyAqIGNvbnRhaW5zIGEgcGFy dGljdWxhciBibG9jayBwcmVmZXRjaGVkIHdvdWxkIGJlIGV4cGVuc2l2ZSAobGluZWFyIHNl YXJjaCkuCisgKiBBbm90aGVyIG9wdGlvbiB3b3VsZCBiZSBhIHNpbXBsZSBoYXNoIHRhYmxl LCB3aGljaCBoYXMgZmFzdCBsb29rdXAgYnV0CisgKiBkb2VzIG5vdCBhbGxvdyBleHBpcmlu ZyBlbnRyaWVzIGNoZWFwbHkuCisgKgorICogVGhlIGNhY2hlIGRvZXMgbm90IG5lZWQgdG8g YmUgcGVyZmVjdCwgd2UgY2FuIGFjY2VwdCBmYWxzZQorICogcG9zaXRpdmVzL25lZ2F0aXZl cywgYXMgbG9uZyBhcyB0aGUgcmF0ZSBpcyByZWFzb25hYmx5IGxvdy4gV2UgYWxzbyBuZWVk CisgKiB0byBleHBpcmUgZW50cmllcywgc28gdGhhdCBvbmx5ICJyZWNlbnQiIHJlcXVlc3Rz IGFyZSByZW1lbWJlcmVkLgorICoKKyAqIFdlIHVzZSBhIGh5YnJpZCBjYWNoZSB0aGF0IGlz IG9yZ2FuaXplZCBhcyBtYW55IHNtYWxsIExSVSBjYWNoZXMuIEVhY2gKKyAqIGJsb2NrIGlz IG1hcHBlZCB0byBhIHBhcnRpY3VsYXIgTFJVIGJ5IGhhc2hpbmcgKHNvIGl0J3MgYSBiaXQg bGlrZSBhCisgKiBoYXNoIHRhYmxlKS4gVGhlIExSVSBjYWNoZXMgYXJlIHRpbnkgKGUuZy4g OCBlbnRyaWVzKSwgYW5kIHRoZSBleHBpcmF0aW9uCisgKiBoYXBwZW5zIGF0IHRoZSBsZXZl bCBvZiBhIHNpbmdsZSBMUlUgKGJ5IHRyYWNraW5nIG9ubHkgdGhlIDggbW9zdCByZWNlbnQg cmVxdWVzdHMpLgorICoKKyAqIFRoaXMgYWxsb3dzIHF1aWNrIHNlYXJjaGVzIGFuZCBleHBp cmF0aW9uLCBidXQgd2l0aCBmYWxzZSBuZWdhdGl2ZXMgKHdoZW4gYQorICogcGFydGljdWxh ciBMUlUgaGFzIHRvbyBtYW55IGNvbGxpc2lvbnMsIHdlIG1heSBldmljdCBlbnRyaWVzIHRo YXQgYXJlIG1vcmUKKyAqIHJlY2VudCB0aGFuIHNvbWUgb3RoZXIgTFJVKS4KKyAqCisgKiBG b3IgZXhhbXBsZSwgaW1hZ2luZSAxMjggTFJVIGNhY2hlcywgZWFjaCB3aXRoIDggZW50cmll cyAtIHRoYXQncyAxMDI0CisgKiBwcmVmZXRjaCByZXF1ZXN0IGluIHRvdGFsICh0aGVzZSBh cmUgdGhlIGRlZmF1bHQgcGFyYW1ldGVycy4pCisgKgorICogVGhlIHJlY2VuY3kgaXMgZGV0 ZXJtaW5lZCB1c2luZyBhIHByZWZldGNoIGNvdW50ZXIsIGluY3JlbWVudGVkIGV2ZXJ5Cisg KiB0aW1lIHdlIGVuZCB1cCBwcmVmZXRjaGluZyBhIGJsb2NrLiBUaGUgY291bnRlciBpcyB1 aW50NjQsIHNvIGl0IHNob3VsZAorICogbm90IHdyYXAgKDEyNSB6ZWJpYnl0ZXMsIHdvdWxk IHRha2UgfjQgbWlsbGlvbiB5ZWFycyBhdCAxR0IvcykuCisgKgorICogVG8gY2hlY2sgaWYg YSBibG9jayB3YXMgcHJlZmV0Y2hlZCByZWNlbnRseSwgd2UgY2FsY3VsYXRlIGhhc2goYmxv Y2spLAorICogYW5kIHRoZW4gbGluZWFybHkgc2VhcmNoIGlmIHRoZSB0aW55IExSVSBoYXMg ZW50cnkgZm9yIHRoZSBzYW1lIGJsb2NrCisgKiBhbmQgcmVxdWVzdCBsZXNzIHRoYW4gUFJF RkVUQ0hfQ0FDSEVfU0laRSBhZ28uCisgKgorICogQXQgdGhlIHNhbWUgdGltZSwgd2UgZWl0 aGVyIHVwZGF0ZSB0aGUgZW50cnkgKGZvciB0aGUgcXVlcmllZCBibG9jaykgaWYKKyAqIGZv dW5kLCBvciByZXBsYWNlIHRoZSBvbGRlc3QvZW1wdHkgZW50cnkuCisgKgorICogSWYgdGhl IGJsb2NrIHdhcyBub3QgcmVjZW50bHkgcHJlZmV0Y2hlZCAoaS5lLiB3ZSB3YW50IHRvIHBy ZWZldGNoIGl0KSwKKyAqIHdlIGluY3JlbWVudCB0aGUgY291bnRlci4KKyAqCisgKiBSZXR1 cm5zIHRydWUgaWYgdGhlIGJsb2NrIHdhcyByZWNlbnRseSBwcmVmZXRjaGVkIChhbmQgdGh1 cyB3ZSBkb24ndAorICogbmVlZCB0byBwcmVmZXRjaCBpdCBhZ2FpbiksIG9yIGZhbHNlIChz aG91bGQgZG8gYSBwcmVmZXRjaCkuCisgKgorICogWFhYIEl0J3MgYSBiaXQgY29uZnVzaW5n IHRoZXNlIHJldHVybiB2YWx1ZXMgYXJlIGludmVyc2UgY29tcGFyZWQgdG8KKyAqIHdoYXQg aW5kZXhfcHJlZmV0Y2hfaXNfc2VxdWVudGlhbCBkb2VzLgorICovCitzdGF0aWMgYm9vbAor aW5kZXhfcHJlZmV0Y2hfYWRkX2NhY2hlKEluZGV4UHJlZmV0Y2ggcHJlZmV0Y2gsIEJsb2Nr TnVtYmVyIGJsb2NrKQoreworCVByZWZldGNoQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkvKiBt YXAgdGhlIGJsb2NrIG51bWJlciB0aGUgdGhlIExSVSAqLworCWludAkJCWxydSA9IGhhc2hf dWludDMyKGJsb2NrKSAlIFBSRUZFVENIX0xSVV9DT1VOVDsKKworCS8qIGFnZS9pbmRleCBv ZiB0aGUgb2xkZXN0IGVudHJ5IGluIHRoZSBMUlUsIHRvIG1heWJlIHVzZSAqLworCXVpbnQ2 NAkJb2xkZXN0UmVxdWVzdCA9IFBHX1VJTlQ2NF9NQVg7CisJaW50CQkJb2xkZXN0SW5kZXgg PSAtMTsKKworCS8qCisJICogRmlyc3QgYWRkIHRoZSBibG9jayB0byB0aGUgKHRpbnkpIHRv cC1sZXZlbCBMUlUgY2FjaGUgYW5kIHNlZSBpZiBpdCdzCisJICogcGFydCBvZiBhIHNlcXVl bnRpYWwgcGF0dGVybi4gSW4gdGhpcyBjYXNlIHdlIGp1c3QgaWdub3JlIHRoZSBibG9jayBh bmQKKwkgKiBkb24ndCBwcmVmZXRjaCBpdCAtIHdlIGV4cGVjdCByZWFkLWFoZWFkIHRvIGRv IGEgYmV0dGVyIGpvYi4KKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBzaG91bGQgc3RpbGwgYWRk IHRoZSBibG9jayB0byB0aGUgaHlicmlkIGNhY2hlLCBpbiBjYXNlIHdlCisJICogaGFwcGVu IHRvIGFjY2VzcyBpdCBsYXRlcj8gVGhhdCBtaWdodCBoZWxwIGlmIHdlIGZpcnN0IHNjYW4g YSBsb3Qgb2YKKwkgKiB0aGUgdGFibGUgc2VxdWVudGlhbGx5LCBhbmQgdGhlbiByYW5kb21s eS4gTm90IHN1cmUgdGhhdCdzIHZlcnkgbGlrZWx5CisJICogd2l0aCBpbmRleCBhY2Nlc3Ms IHRob3VnaC4KKwkgKi8KKwlpZiAoaW5kZXhfcHJlZmV0Y2hfaXNfc2VxdWVudGlhbChwcmVm ZXRjaCwgYmxvY2spKQorCXsKKwkJcHJlZmV0Y2gtPmNvdW50U2tpcFNlcXVlbnRpYWwrKzsK KwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBTZWUgaWYgd2UgcmVjZW50bHkgcHJl ZmV0Y2hlZCB0aGlzIGJsb2NrIC0gd2Ugc2ltcGx5IHNjYW4gdGhlIExSVQorCSAqIGxpbmVh cmx5LiBXaGlsZSBkb2luZyB0aGF0LCB3ZSBhbHNvIHRyYWNrIHRoZSBvbGRlc3QgZW50cnks IHNvIHRoYXQgd2UKKwkgKiBrbm93IHdoZXJlIHRvIHB1dCB0aGUgYmxvY2sgaWYgd2UgZG9u J3QgZmluZCBhIG1hdGNoaW5nIGVudHJ5LgorCSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwg UFJFRkVUQ0hfTFJVX1NJWkU7IGkrKykKKwl7CisJCWVudHJ5ID0gJnByZWZldGNoLT5wcmVm ZXRjaENhY2hlW2xydSAqIFBSRUZFVENIX0xSVV9TSVpFICsgaV07CisKKwkJLyogSXMgdGhp cyB0aGUgb2xkZXN0IHByZWZldGNoIHJlcXVlc3QgaW4gdGhpcyBMUlU/ICovCisJCWlmIChl bnRyeS0+cmVxdWVzdCA8IG9sZGVzdFJlcXVlc3QpCisJCXsKKwkJCW9sZGVzdFJlcXVlc3Qg PSBlbnRyeS0+cmVxdWVzdDsKKwkJCW9sZGVzdEluZGV4ID0gaTsKKwkJfQorCisJCS8qCisJ CSAqIElmIHRoZSBlbnRyeSBpcyB1bnVzZWQgKGlkZW50aWZpZWQgYnkgcmVxdWVzdCBiZWlu ZyBzZXQgdG8gMCksCisJCSAqIHdlJ3JlIGRvbmUuIE5vdGljZSB0aGUgZmllbGQgaXMgdWlu dDY0LCBzbyBlbXB0eSBlbnRyeSBpcworCQkgKiBndWFyYW50ZWVkIHRvIGJlIHRoZSBvbGRl c3Qgb25lLgorCQkgKi8KKwkJaWYgKGVudHJ5LT5yZXF1ZXN0ID09IDApCisJCQljb250aW51 ZTsKKworCQkvKiBJcyB0aGlzIGVudHJ5IGZvciB0aGUgc2FtZSBibG9jayBhcyB0aGUgY3Vy cmVudCByZXF1ZXN0PyAqLworCQlpZiAoZW50cnktPmJsb2NrID09IGJsb2NrKQorCQl7CisJ CQlib29sCQlwcmVmZXRjaGVkOworCisJCQkvKgorCQkJICogSXMgdGhlIG9sZCByZXF1ZXN0 IHN1ZmZpY2llbnRseSByZWNlbnQ/IElmIHllcywgd2UgdHJlYXQgdGhlCisJCQkgKiBibG9j ayBhcyBhbHJlYWR5IHByZWZldGNoZWQuCisJCQkgKgorCQkJICogWFhYIFdlIGRvIGFkZCB0 aGUgY2FjaGUgc2l6ZSB0byB0aGUgcmVxdWVzdCBpbiBvcmRlciBub3QgdG8KKwkJCSAqIGhh dmUgaXNzdWVzIHdpdGggdWludDY0IHVuZGVyZmxvd3MuCisJCQkgKi8KKwkJCXByZWZldGNo ZWQgPSAoKGVudHJ5LT5yZXF1ZXN0ICsgUFJFRkVUQ0hfQ0FDSEVfU0laRSkgPj0gcHJlZmV0 Y2gtPnByZWZldGNoUmVxTnVtYmVyKTsKKworCQkJLyogVXBkYXRlIHRoZSByZXF1ZXN0IG51 bWJlci4gKi8KKwkJCWVudHJ5LT5yZXF1ZXN0ID0gKytwcmVmZXRjaC0+cHJlZmV0Y2hSZXFO dW1iZXI7CisKKwkJCXByZWZldGNoLT5jb3VudFNraXBDYWNoZWQgKz0gKHByZWZldGNoZWQp ID8gMSA6IDA7CisKKwkJCXJldHVybiBwcmVmZXRjaGVkOworCQl9CisJfQorCisJLyoKKwkg KiBXZSBkaWRuJ3QgZmluZCB0aGUgYmxvY2sgaW4gdGhlIExSVSwgc28gc3RvcmUgaXQgZWl0 aGVyIGluIGFuIGVtcHR5CisJICogZW50cnksIG9yIGluIHRoZSAib2xkZXN0IiBwcmVmZXRj aCByZXF1ZXN0IGluIHRoaXMgTFJVLgorCSAqLworCUFzc2VydCgob2xkZXN0SW5kZXggPj0g MCkgJiYgKG9sZGVzdEluZGV4IDwgUFJFRkVUQ0hfTFJVX1NJWkUpKTsKKworCS8qIEZJWE1F IGRvIGEgbmljZSBtYWNybyAqLworCWVudHJ5ID0gJnByZWZldGNoLT5wcmVmZXRjaENhY2hl W2xydSAqIFBSRUZFVENIX0xSVV9TSVpFICsgb2xkZXN0SW5kZXhdOworCisJZW50cnktPmJs b2NrID0gYmxvY2s7CisJZW50cnktPnJlcXVlc3QgPSArK3ByZWZldGNoLT5wcmVmZXRjaFJl cU51bWJlcjsKKworCS8qIG5vdCBpbiB0aGUgcHJlZmV0Y2ggY2FjaGUgKi8KKwlyZXR1cm4g ZmFsc2U7Cit9CisKKy8qCisgKiBpbmRleF9wcmVmZXRjaAorICoJCVByZWZldGNoIHRoZSBU SUQsIHVubGVzcyBpdCdzIHNlcXVlbnRpYWwgb3IgcmVjZW50bHkgcHJlZmV0Y2hlZC4KKyAq CisgKiBYWFggU29tZSBpZGVhcyBob3cgdG8gYXV0by10dW5lIHRoZSBwcmVmZXRjaGluZywg c28gdGhhdCB1bm5lY2Vzc2FyeQorICogcHJlZmV0Y2hpbmcgZG9lcyBub3QgY2F1c2Ugc2ln bmlmaWNhbnQgcmVncmVzc2lvbnMgKGUuZy4gZm9yIG5lc3Rsb29wCisgKiB3aXRoIGlubmVy IGluZGV4IHNjYW4pLiBXZSBjb3VsZCB0cmFjayBudW1iZXIgb2YgcmVzY2FucyBhbmQgbnVt YmVyIG9mCisgKiBpdGVtcyAoVElEcykgYWN0dWFsbHkgcmV0dXJuZWQgZnJvbSB0aGUgc2Nh bi4gVGhlbiB3ZSBjb3VsZCBjYWxjdWxhdGUKKyAqIHJvd3MgLyByZXNjYW4gYW5kIHVzZSB0 aGF0IHRvIGNsYW1wIHByZWZldGNoIHRhcmdldC4KKyAqCisgKiBUaGF0J2QgaGVscCB3aXRo IGNhc2VzIHdoZW4gYSBzY2FuIG1hdGNoZXMgb25seSB2ZXJ5IGZldyByb3dzLCBmYXIgbGVz cworICogdGhhbiB0aGUgcHJlZmV0Y2hUYXJnZXQsIGJlY2F1c2UgdGhlIHVubmVjZXNzYXJ5 IHByZWZldGNoZXMgYXJlIHdhc3RlZAorICogSS9PLiBJbWFnaW5lIGEgTElNSVQgb24gdG9w IG9mIGluZGV4IHNjYW4sIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCisgKgorICogQW5vdGhl ciBvcHRpb24gaXMgdG8gdXNlIHRoZSBwbGFubmVyIGVzdGltYXRlcyAtIHdlIGtub3cgaG93 IG1hbnkgcm93cyB3ZSdyZQorICogZXhwZWN0aW5nIHRvIGZldGNoIChvbiBhdmVyYWdlLCBh c3N1bWluZyB0aGUgZXN0aW1hdGVzIGFyZSByZWFzb25hYmx5CisgKiBhY2N1cmF0ZSksIHNv IHdoeSBub3QgdG8gdXNlIHRoYXQ/CisgKgorICogT2YgY291cnNlLCB3ZSBjb3VsZC9zaG91 bGQgY29tYmluZSB0aGVzZSB0d28gYXBwcm9hY2hlcy4KKyAqCisgKiBYWFggVGhlIHByZWZl dGNoaW5nIG1heSBpbnRlcmZlcmUgd2l0aCB0aGUgcGF0Y2ggYWxsb3dpbmcgdXMgdG8gZXZh bHVhdGUKKyAqIGNvbmRpdGlvbnMgb24gdGhlIGluZGV4IHR1cGxlLCBpbiB3aGljaCBjYXNl IHdlIG1heSBub3QgbmVlZCB0aGUgaGVhcAorICogdHVwbGUuIE1heWJlIGlmIHRoZXJlJ3Mg c3VjaCBmaWx0ZXIsIHdlIHNob3VsZCBwcmVmZXRjaCBvbmx5IHBhZ2VzIHRoYXQKKyAqIGFy ZSBub3QgYWxsLXZpc2libGUgKGFuZCB0aGUgc2FtZSBpZGVhIHdvdWxkIGFsc28gd29yayBm b3IgSU9TKSwgYnV0CisgKiBpdCBhbHNvIG1ha2VzIHRoZSBpbmRleGluZyBhIGJpdCAiYXdh cmUiIG9mIHRoZSB2aXNpYmlsaXR5IHN0dWZmICh3aGljaAorICogc2VlbXMgYSBzb21ld2hh dCB3cm9uZykuIEFsc28sIG1heWJlIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZmlsdGVyIHNl bGVjdGl2aXR5CisgKiAoaWYgdGhlIGluZGV4LW9ubHkgZmlsdGVyIGlzIGV4cGVjdGVkIHRv IGVsaW1pbmF0ZSBvbmx5IGZldyByb3dzLCB0aGVuCisgKiB0aGUgdm0gY2hlY2sgaXMgcG9p bnRsZXNzKS4gTWF5YmUgdGhpcyBjb3VsZC9zaG91bGQgYmUgYXV0by10dW5pbmcgdG9vLAor ICogaS5lLiB3ZSBjb3VsZCB0cmFjayBob3cgbWFueSBoZWFwIHR1cGxlcyB3ZXJlIG5lZWRl ZCBhZnRlciBhbGwsIGFuZCB0aGVuCisgKiB3ZSB3b3VsZCBjb25zaWRlciB0aGlzIHdoZW4g ZGVjaWRpbmcgd2hldGhlciB0byBwcmVmZXRjaCBhbGwtdmlzaWJsZQorICogcGFnZXMgb3Ig bm90IChtYXR0ZXJzIG9ubHkgZm9yIHJlZ3VsYXIgaW5kZXggc2NhbnMsIG5vdCBJT1MpLgor ICoKKyAqIFhYWCBNYXliZSB3ZSBjb3VsZC9zaG91bGQgYWxzbyBwcmVmZXRjaCB0aGUgbmV4 dCBpbmRleCBibG9jaywgZS5nLiBzdG9yZWQKKyAqIGluIEJUU2NhblBvc0RhdGEubmV4dFBh Z2UuCisgKgorICogWFhYIENvdWxkIHdlIHR1bmUgdGhlIGNhY2hlIHNpemUgYmFzZWQgb24g ZXhlY3V0aW9uIHN0YXRpc3RpY3M/IFdlIGhhdmUKKyAqIGEgY2FjaGUgb2YgbGltaXRlZCBz aXplIChQUkVGRVRDSF9DQUNIRV9TSVpFID0gMTAyNCBieSBkZWZhdWx0KSwgYnV0CisgKiBo b3cgZG8gd2Uga25vdyBpdCdzIHRoZSByaWdodCBzaXplPyBJZGVhbGx5LCB3ZSdkIGhhdmUg YSBjYWNoZSBsYXJnZQorICogZW5vdWdoIHRvIHRyYWNrIGFjdHVhbGx5IGNhY2hlZCBibG9j a3MuIElmIHRoZSBPUyBjYWNoZXMgMTAyNDAgcGFnZXMsCisgKiB0aGVuIHdlIG1heSBkbyA5 MCUgb2YgcHJlZmV0Y2ggcmVxdWVzdHMgdW5uZWNlc3NhcmlseS4gT3IgbWF5YmUgdGhlcmUn cworICogYSBsb3Qgb2YgY29udGVudGlvbiwgYmxvY2tzIGFyZSBldmljdGVkIHF1aWNrbHks IGFuZCA5MCUgb2YgdGhlIGJsb2NrcworICogaW4gdGhlIGNhY2hlIGFyZSBub3QgYWN0dWFs bHkgY2FjaGVkIGFueW1vcmU/IEJ1dCB3ZSBkbyBoYXZlIGEgY29uY2VwdAorICogb2Ygc2Vx dWVudGlhbCByZXF1ZXN0IElEIChQcmVmZXRjaENhY2hlRW50cnktPnJlcXVlc3QpLCB3aGlj aCBnaXZlcyB1cworICogaW5mb3JtYXRpb24gYWJvdXQgImFnZSIgb2YgdGhlIGxhc3QgcHJl ZmV0Y2guIE5vdyBpdCdzIHVzZWQgb25seSB3aGVuCisgKiBldmljdGluZyBlbnRyaWVzICh0 byBrZWVwIHRoZSBtb3JlIHJlY2VudCBvbmUpLCBidXQgbWF5YmUgd2UgY291bGQgYWxzbwor ICogdXNlIGl0IHdoZW4gZGVjaWRpbmcgaWYgdGhlIHBhZ2UgaXMgY2FjaGVkLiBSaWdodCBu b3cgYW55IGJsb2NrIHRoYXQncworICogaW4gdGhlIGNhY2hlIGlzIGNvbnNpZGVyZWQgY2Fj aGVkIGFuZCBub3QgcHJlZmV0Y2hlZCwgYnV0IG1heWJlIHdlIGNvdWxkCisgKiBoYXZlICJt YXggYWdlIiwgYW5kIHR1bmUgaXQgYmFzZWQgb24gZmVlZGJhY2sgZnJvbSByZWFkaW5nIHRo ZSBibG9ja3MKKyAqIGxhdGVyLiBGb3IgZXhhbXBsZSwgaWYgd2UgZmluZCB0aGUgYmxvY2sg aW4gY2FjaGUgYW5kIGRlY2lkZSBub3QgdG8KKyAqIHByZWZldGNoIGl0LCBidXQgdGhlbiBs YXRlciBmaW5kIHdlIGhhdmUgdG8gZG8gSS9PLCBpdCBtZWFucyBvdXIgY2FjaGUKKyAqIGlz IHRvbyBsYXJnZS4gQW5kIHdlIGNvdWxkICJyZWR1Y2UiIHRoZSBtYXhpbXVtIGFnZSAobWVh c3VyZWQgZnJvbSB0aGUKKyAqIGN1cnJlbnQgcHJlZmV0Y2hSZXFOdW1iZXIgdmFsdWUpLCBz byB0aGF0IG9ubHkgbW9yZSByZWNlbnQgYmxvY2tzIHdvdWxkCisgKiBiZSBjb25zaWRlcmVk IGNhY2hlZC4gTm90IHN1cmUgYWJvdXQgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiwgd2hlcmUg d2UKKyAqIGRlY2lkZSB0byBwcmVmZXRjaCBhIGJsb2NrIC0gQUZBSUsgd2UgZG9uJ3QgaGF2 ZSBhIHdheSB0byBkZXRlcm1pbmUgaWYKKyAqIEkvTyB3YXMgbmVlZGVkIG9yIG5vdCBpbiB0 aGlzIGNhc2UgKHNvIHdlIGNhbid0IGluY3JlYXNlIHRoZSBtYXggYWdlKS4KKyAqIEJ1dCBt YXliZSB3ZSBjb3VsZCBkaSB0aGF0IHNvbWVob3cgc3BlY3VsYXRpdmVseSwgaS5lLiBpbmNy ZWFzZSB0aGUKKyAqIHZhbHVlIG9uY2UgaW4gYSB3aGlsZSwgYW5kIHNlZSB3aGF0IGhhcHBl bnMuCisgKi8KK3N0YXRpYyB2b2lkCitpbmRleF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEl0ZW1Qb2ludGVyIHRpZCwgYm9vbCBza2lwX2FsbF92aXNpYmxlLCBib29sICphbGxf dmlzaWJsZSkKK3sKKwlJbmRleFByZWZldGNoIHByZWZldGNoID0gc2Nhbi0+eHNfcHJlZmV0 Y2g7CisJQmxvY2tOdW1iZXIgYmxvY2s7CisKKwkvKiBieSBkZWZhdWx0IG5vdCBhbGwgdmlz aWJsZSAob3Igd2UgZGlkbid0IGNoZWNrKSAqLworCSphbGxfdmlzaWJsZSA9IGZhbHNlOwor CisJLyoKKwkgKiBObyBoZWFwIHJlbGF0aW9uIG1lYW5zIGJpdG1hcCBpbmRleCBzY2FuLCB3 aGljaCBkb2VzIHByZWZldGNoaW5nIGF0IHRoZQorCSAqIGJpdG1hcCBoZWFwIHNjYW4sIHNv IG5vIHByZWZldGNoIGhlcmUgKHdlIGNhbid0IGRvIGl0IGFueXdheSwgd2l0aG91dAorCSAq IHRoZSBoZWFwKQorCSAqCisJICogWFhYIEJ1dCBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGhh dmUgcHJlZmV0Y2hNYXhUYXJnZXQ9MCwgYmVjYXVzZSBpbgorCSAqIGluZGV4X2JlYmluc2Nh bl9iaXRtYXAoKSB3ZSBkaXNhYmxlIHByZWZldGNoaW5nLiBTbyBtYXliZSB3ZSBzaG91bGQK KwkgKiBqdXN0IGNoZWNrIHRoYXQuCisJICovCisJaWYgKCFwcmVmZXRjaCkKKwkJcmV0dXJu OworCisJLyoKKwkgKiBJZiB3ZSBnb3QgaGVyZSwgcHJlZmV0Y2hpbmcgaXMgZW5hYmxlZCBh bmQgaXQncyBhIG5vZGUgdGhhdCBzdXBwb3J0cworCSAqIHByZWZldGNoaW5nIChpLmUuIGl0 IGNhbid0IGJlIGEgYml0bWFwIGluZGV4IHNjYW4pLgorCSAqLworCUFzc2VydChzY2FuLT5o ZWFwUmVsYXRpb24pOworCisJYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCk7CisKKwkvKgorCSAqIFdoZW4gcHJlZmV0Y2hpbmcgZm9yIElPUywgd2Ugd2FudCB0byBv bmx5IHByZWZldGNoIHBhZ2VzIHRoYXQgYXJlIG5vdAorCSAqIG1hcmtlZCBhcyBhbGwtdmlz aWJsZSAoYmVjYXVzZSBub3QgZmV0Y2hpbmcgYWxsLXZpc2libGUgcGFnZXMgaXMgdGhlCisJ ICogcG9pbnQgb2YgSU9TKS4KKwkgKgorCSAqIFhYWCBUaGlzIGlzIG5vdCBncmVhdCwgYmVj YXVzZSBpdCByZWxlYXNlcyB0aGUgVk0gYnVmZmVyIGZvciBlYWNoIFRJRAorCSAqIHdlIGNv bnNpZGVyIHRvIHByZWZldGNoLiBXZSBzaG91bGQgcmV1c2UgdGhhdCBzb21laG93LCBzaW1p bGFyIHRvIHRoZQorCSAqIGFjdHVhbCBJT1MgY29kZS4gSWRlYWxseSwgd2Ugc2hvdWxkIHVz ZSB0aGUgc2FtZSBpb3NzX1ZNQnVmZmVyIChpZgorCSAqIHdlIGNhbiBwcm9wYWdhdGUgaXQg aGVyZSkuIE9yIGF0IGxlYXN0IGRvIGl0IGZvciBhIGJ1bGsgb2YgcHJlZmV0Y2hlcywKKwkg KiBhbHRob3VnaCB0aGF0J3Mgbm90IHZlcnkgdXNlZnVsIC0gYWZ0ZXIgdGhlIHJhbXAtdXAg d2Ugd2lsbCBwcmVmZXRjaAorCSAqIHRoZSBwYWdlcyBvbmUgYnkgb25lIGFueXdheS4KKwkg KgorCSAqIFhYWCBJZGVhbGx5IHdlJ2QgYWxzbyBwcm9wYWdhdGUgdGhpcyB0byB0aGUgZXhl Y3V0b3IsIHNvIHRoYXQgdGhlCisJICogbm9kZUluZGV4b25seXNjYW4uYyBkb2Vzbid0IG5l ZWQgdG8gcmVwZWF0IHRoZSBzYW1lIFZNIGNoZWNrICh3aGljaAorCSAqIGlzIG1lYXN1cmFi bGUpLiBCdXQgdGhlIGluZGV4X2dldG5leHRfdGlkKCkgaXMgbm90IHJlYWxseSB3ZWxsCisJ ICogc3VpdGVkIGZvciB0aGF0LCBzbyB0aGUgQVBJIG5lZWRzIGEgY2hhbmdlLnMKKwkgKi8K KwlpZiAoc2tpcF9hbGxfdmlzaWJsZSkKKwl7CisJCSphbGxfdmlzaWJsZSA9IFZNX0FMTF9W SVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCSAgYmxvY2ssCisJCQkJCQkJ CQkgICZwcmVmZXRjaC0+dm1CdWZmZXIpOworCisJCWlmICgqYWxsX3Zpc2libGUpCisJCQly ZXR1cm47CisJfQorCisJLyoKKwkgKiBEbyBub3QgcHJlZmV0Y2ggdGhlIHNhbWUgYmxvY2sg b3ZlciBhbmQgb3ZlciBhZ2FpbiwKKwkgKgorCSAqIFRoaXMgaGFwcGVucyBlLmcuIGZvciBj bHVzdGVyZWQgb3IgbmF0dXJhbGx5IGNvcnJlbGF0ZWQgaW5kZXhlcyAoZmtleQorCSAqIHRv IGEgc2VxdWVuY2UgSUQpLiBJdCdzIG5vdCBleHBlbnNpdmUgKHRoZSBibG9jayBpcyBpbiBw YWdlIGNhY2hlCisJICogYWxyZWFkeSwgc28gbm8gSS9PKSwgYnV0IGl0J3Mgbm90IGZyZWUg ZWl0aGVyLgorCSAqLworCWlmICghaW5kZXhfcHJlZmV0Y2hfYWRkX2NhY2hlKHByZWZldGNo LCBibG9jaykpCisJeworCQlwcmVmZXRjaC0+Y291bnRQcmVmZXRjaCsrOworCisJCVByZWZl dGNoQnVmZmVyKHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLCBibG9jayk7CisJ CXBnQnVmZmVyVXNhZ2UuYmxrc19wcmVmZXRjaGVzKys7CisJfQorCisJcHJlZmV0Y2gtPmNv dW50QWxsKys7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIGluZGV4X2dldG5leHRf dGlkIC0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICoKKyAqIFRoZSByZXN1bHQg aXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cywKKyAqIG9yIE5VTEwg aWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgorICogRklYTUUgbm90IHN1 cmUgdGhpcyBoYW5kbGVzIHhzX2hlYXBmZXRjaCBjb3JyZWN0bHkuCisgKiAtLS0tLS0tLS0t LS0tLS0tCisgKi8KK0l0ZW1Qb2ludGVyCitpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWJvb2wJCWFsbF92aXNp YmxlOwkvKiBpZ25vcmVkICovCisKKwkvKiBEbyBwcmVmZXRjaGluZyAoaWYgcmVxdWVzdGVk L2VuYWJsZWQpLiAqLworCWluZGV4X3ByZWZldGNoX3RpZHMoc2NhbiwgZGlyZWN0aW9uKTsK KworCS8qIFJlYWQgdGhlIFRJRCBmcm9tIHRoZSBxdWV1ZSAob3IgZGlyZWN0bHkgZnJvbSB0 aGUgaW5kZXgpLiAqLworCXJldHVybiBpbmRleF9wcmVmZXRjaF9nZXRfdGlkKHNjYW4sIGRp cmVjdGlvbiwgJmFsbF92aXNpYmxlKTsKK30KKworSXRlbVBvaW50ZXIKK2luZGV4X2dldG5l eHRfdGlkX3ZtKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s IGJvb2wgKmFsbF92aXNpYmxlKQoreworCS8qIERvIHByZWZldGNoaW5nIChpZiByZXF1ZXN0 ZWQvZW5hYmxlZCkuICovCisJaW5kZXhfcHJlZmV0Y2hfdGlkcyhzY2FuLCBkaXJlY3Rpb24p OworCisJLyogUmVhZCB0aGUgVElEIGZyb20gdGhlIHF1ZXVlIChvciBkaXJlY3RseSBmcm9t IHRoZSBpbmRleCkuICovCisJcmV0dXJuIGluZGV4X3ByZWZldGNoX2dldF90aWQoc2Nhbiwg ZGlyZWN0aW9uLCBhbGxfdmlzaWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitpbmRleF9wcmVm ZXRjaF90aWRzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p Cit7CisJLyogZm9yIGNvbnZlbmllbmNlICovCisJSW5kZXhQcmVmZXRjaCBwcmVmZXRjaCA9 IHNjYW4tPnhzX3ByZWZldGNoOworCisJLyoKKwkgKiBJZiB0aGUgcHJlZmV0Y2hpbmcgaXMg c3RpbGwgYWN0aXZlIChpLmUuIGVuYWJsZWQgYW5kIHdlIHN0aWxsCisJICogaGF2ZW4ndCBm aW5pc2hlZCByZWFkaW5nIFRJRHMgZnJvbSB0aGUgc2NhbiksIHJlYWQgZW5vdWdoIFRJRHMg aW50bworCSAqIHRoZSBxdWV1ZSB1bnRpbCB3ZSBoaXQgdGhlIGN1cnJlbnQgdGFyZ2V0Lgor CSAqLworCWlmIChQUkVGRVRDSF9BQ1RJVkUocHJlZmV0Y2gpKQorCXsKKwkJLyoKKwkJICog UmFtcCB1cCB0aGUgcHJlZmV0Y2ggZGlzdGFuY2UgaW5jcmVtZW50YWxseS4KKwkJICoKKwkJ ICogSW50ZW50aW9uYWxseSBkb25lIGFzIGZpcnN0LCBiZWZvcmUgcmVhZGluZyB0aGUgVElE cyBpbnRvIHRoZQorCQkgKiBxdWV1ZSwgc28gdGhhdCB0aGVyZSdzIGFsd2F5cyBhdCBsZWFz dCBvbmUgaXRlbS4gT3RoZXJ3aXNlIHdlCisJCSAqIG1pZ2h0IGdldCBpbnRvIGEgc2l0dWF0 aW9uIHdoZXJlIHdlIHN0YXJ0IHdpdGggdGFyZ2V0PTAgYW5kIG5vCisJCSAqIFRJRHMgbG9h ZGVkLgorCQkgKi8KKwkJcHJlZmV0Y2gtPnByZWZldGNoVGFyZ2V0ID0gTWluKHByZWZldGNo LT5wcmVmZXRjaFRhcmdldCArIDEsCisJCQkJCQkJCQkgICBwcmVmZXRjaC0+cHJlZmV0Y2hN YXhUYXJnZXQpOworCisJCS8qCisJCSAqIE5vdyByZWFkIFRJRHMgZnJvbSB0aGUgaW5kZXgg dW50aWwgdGhlIHF1ZXVlIGlzIGZ1bGwgKHdpdGgKKwkJICogcmVzcGVjdCB0byB0aGUgY3Vy cmVudCBwcmVmZXRjaCB0YXJnZXQpLgorCQkgKi8KKwkJd2hpbGUgKCFQUkVGRVRDSF9GVUxM KHByZWZldGNoKSkKKwkJeworCQkJSXRlbVBvaW50ZXIgdGlkOworCQkJYm9vbAkJYWxsX3Zp c2libGU7CisKKwkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGlu ZGV4ICovCisJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZF9pbnRlcm5hbChzY2FuLCBkaXJl Y3Rpb24pOworCisJCQkvKgorCQkJICogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMs IHdlJ3JlIGRvbmUgKGFuZCB3ZSBtYXJrIHRoZQorCQkJICogdGhlIHByZWZldGNoZXIgYXMg aW5hY3RpdmUpLgorCQkJICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQl7CisJCQkJcHJl ZmV0Y2gtPnByZWZldGNoRG9uZSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCUFz c2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7CisKKwkJ CS8qCisJCQkgKiBJc3N1ZSB0aGUgYWN0dWFsbCBwcmVmZXRjaCByZXF1ZXN0cyBmb3IgdGhl IG5ldyBUSUQuCisJCQkgKgorCQkJICogWFhYIGluZGV4X2dldG5leHRfdGlkX3ByZWZldGNo IGlzIG9ubHkgY2FsbGVkIGZvciBJT1MgKGZvciBub3cpLAorCQkJICogc28gc2tpcCBwcmVm ZXRjaGluZyBvZiBhbGwtdmlzaWJsZSBwYWdlcy4KKwkJCSAqLworCQkJaW5kZXhfcHJlZmV0 Y2goc2NhbiwgdGlkLCBzY2FuLT5pbmRleG9ubHksICZhbGxfdmlzaWJsZSk7CisKKwkJCXBy ZWZldGNoLT5xdWV1ZUl0ZW1zW1BSRUZFVENIX1FVRVVFX0lOREVYKHByZWZldGNoLT5xdWV1 ZUVuZCldLnRpZCA9ICp0aWQ7CisJCQlwcmVmZXRjaC0+cXVldWVJdGVtc1tQUkVGRVRDSF9R VUVVRV9JTkRFWChwcmVmZXRjaC0+cXVldWVFbmQpXS5hbGxfdmlzaWJsZSA9IGFsbF92aXNp YmxlOworCQkJcHJlZmV0Y2gtPnF1ZXVlRW5kKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBJ dGVtUG9pbnRlcgoraW5kZXhfcHJlZmV0Y2hfZ2V0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sICphbGxfdmlzaWJsZSkKK3sKKwkvKiBm b3IgY29udmVuaWVuY2UgKi8KKwlJbmRleFByZWZldGNoIHByZWZldGNoID0gc2Nhbi0+eHNf cHJlZmV0Y2g7CisKKwkvKgorCSAqIFdpdGggcHJlZmV0Y2hpbmcgZW5hYmxlZCAoZXZlbiBp ZiB3ZSBhbHJlYWR5IGZpbmlzaGVkIHJlYWRpbmcKKwkgKiBhbGwgVElEcyBmcm9tIHRoZSBp bmRleCBzY2FuKSwgd2UgbmVlZCB0byByZXR1cm4gYSBUSUQgZnJvbSB0aGUKKwkgKiBxdWV1 ZS4gT3RoZXJ3aXNlLCB3ZSBqdXN0IGdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgc2Nhbgor CSAqIGRpcmVjdGx5LgorCSAqLworCWlmIChQUkVGRVRDSF9FTkFCTEVEKHByZWZldGNoKSkK Kwl7CisJCS8qIERpZCB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBzY2FuIGFuZCB0aGUgcXVl dWUgaXMgZW1wdHk/ICovCisJCWlmIChQUkVGRVRDSF9ET05FKHByZWZldGNoKSkKKwkJCXJl dHVybiBOVUxMOworCisJCXNjYW4tPnhzX2hlYXB0aWQgPSBwcmVmZXRjaC0+cXVldWVJdGVt c1tQUkVGRVRDSF9RVUVVRV9JTkRFWChwcmVmZXRjaC0+cXVldWVJbmRleCldLnRpZDsKKwkJ KmFsbF92aXNpYmxlID0gcHJlZmV0Y2gtPnF1ZXVlSXRlbXNbUFJFRkVUQ0hfUVVFVUVfSU5E RVgocHJlZmV0Y2gtPnF1ZXVlSW5kZXgpXS5hbGxfdmlzaWJsZTsKKwkJcHJlZmV0Y2gtPnF1 ZXVlSW5kZXgrKzsKKwl9CisJZWxzZQkJCQkvKiBub3QgcHJlZmV0Y2hpbmcsIGp1c3QgZG8g dGhlIHJlZ3VsYXIgd29yayAgKi8KKwl7CisJCUl0ZW1Qb2ludGVyIHRpZDsKKworCQkvKiBU aW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLworCQl0aWQgPSBp bmRleF9nZXRuZXh0X3RpZF9pbnRlcm5hbChzY2FuLCBkaXJlY3Rpb24pOworCQkqYWxsX3Zp c2libGUgPSBmYWxzZTsKKworCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywg d2UncmUgZG9uZSAqLworCQlpZiAodGlkID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwor CQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwor CX0KKworCS8qIFJldHVybiB0aGUgVElEIG9mIHRoZSB0dXBsZSB3ZSBmb3VuZC4gKi8KKwly ZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5k ZXggZjFkNzFiYzU0ZTguLjY4MTA5OTZlZGZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CkBAIC0zNTY4LDYgKzM1NjgsNyBAQCBzaG93X2J1ZmZlcl91c2FnZShFeHBsYWluU3RhdGUg KmVzLCBjb25zdCBCdWZmZXJVc2FnZSAqdXNhZ2UsIGJvb2wgcGxhbm5pbmcpCiAJCQkJCQkJ CQkJIUlOU1RSX1RJTUVfSVNfWkVSTyh1c2FnZS0+bG9jYWxfYmxrX3dyaXRlX3RpbWUpKTsK IAkJYm9vbAkJaGFzX3RlbXBfdGltaW5nID0gKCFJTlNUUl9USU1FX0lTX1pFUk8odXNhZ2Ut PnRlbXBfYmxrX3JlYWRfdGltZSkgfHwKIAkJCQkJCQkJCSAgICFJTlNUUl9USU1FX0lTX1pF Uk8odXNhZ2UtPnRlbXBfYmxrX3dyaXRlX3RpbWUpKTsKKwkJYm9vbAkJaGFzX3ByZWZldGNo ZXMgPSAodXNhZ2UtPmJsa3NfcHJlZmV0Y2hlcyA+IDApOwogCQlib29sCQlzaG93X3BsYW5u aW5nID0gKHBsYW5uaW5nICYmIChoYXNfc2hhcmVkIHx8CiAJCQkJCQkJCQkJCQkgIGhhc19s b2NhbCB8fCBoYXNfdGVtcCB8fAogCQkJCQkJCQkJCQkJICBoYXNfc2hhcmVkX3RpbWluZyB8 fApAQCAtMzY3OSw2ICszNjgwLDIzIEBAIHNob3dfYnVmZmVyX3VzYWdlKEV4cGxhaW5TdGF0 ZSAqZXMsIGNvbnN0IEJ1ZmZlclVzYWdlICp1c2FnZSwgYm9vbCBwbGFubmluZykKIAkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGVzLT5zdHIsICdcbicpOwogCQl9CiAKKwkJLyogQXMgYWJv dmUsIHNob3cgb25seSBwb3NpdGl2ZSBjb3VudGVyIHZhbHVlcy4gKi8KKwkJaWYgKGhhc19w cmVmZXRjaGVzKQorCQl7CisJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGVzLT5zdHIsICJQcmVmZXRjaGVzOiIpOworCisJCQlpZiAodXNh Z2UtPmJsa3NfcHJlZmV0Y2hlcyA+IDApCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3Ry LCAiIGJsb2Nrcz0lbGxkIiwKKwkJCQkJCQkJIChsb25nIGxvbmcpIHVzYWdlLT5ibGtzX3By ZWZldGNoZXMpOworCisJCQlpZiAodXNhZ2UtPmJsa3NfcHJlZmV0Y2hfcm91bmRzID4gMCkK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIgcm91bmRzPSVsbGQiLAorCQkJCQkJ CQkgKGxvbmcgbG9uZykgdXNhZ2UtPmJsa3NfcHJlZmV0Y2hfcm91bmRzKTsKKworCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoZXMtPnN0ciwgJ1xuJyk7CisJCX0KKwogCQlpZiAoc2hvd19w bGFubmluZykKIAkJCWVzLT5pbmRlbnQtLTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJ bmRleGluZy5jCmluZGV4IDJmYTIxMThmM2MyLi4xNWZhMzIxMTY2NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTc3MCwxMSArNzcwLDE1IEBAIGNoZWNrX2V4 Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBp bmRleCwKIAkvKgogCSAqIE1heSBoYXZlIHRvIHJlc3RhcnQgc2NhbiBmcm9tIHRoaXMgcG9p bnQgaWYgYSBwb3RlbnRpYWwgY29uZmxpY3QgaXMKIAkgKiBmb3VuZC4KKwkgKgorCSAqIFhY WCBTaG91bGQgdGhpcyBkbyBpbmRleCBwcmVmZXRjaD8gUHJvYmFibHkgbm90IHdvcnRoIGl0 IGZvciB1bmlxdWUKKwkgKiBjb25zdHJhaW50cywgSSBndWVzcz8gT3RoZXJ3aXNlIHdlIHNo b3VsZCBjYWxjdWxhdGUgcHJlZmV0Y2hfdGFyZ2V0CisJICoganVzdCBsaWtlIGluIG5vZGVJ bmRleHNjYW4gZXRjLgogCSAqLwogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3Vu ZF9zZWxmID0gZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBp bmRleCwgJkRpcnR5U25hcHNob3QsIGluZG5rZXlhdHRzLCAwKTsKKwlpbmRleF9zY2FuID0g aW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgaW5kbmtleWF0 dHMsIDAsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtl eWF0dHMsIE5VTEwsIDApOwogCiAJd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9z Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDgxZjI3MDQyYmM0Li45MTY3NmNj ZmY5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTIw NCw4ICsyMDQsMTMgQEAgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiBy ZWwsIE9pZCBpZHhvaWQsCiAJLyogQnVpbGQgc2NhbiBrZXkuICovCiAJc2tleV9hdHRvZmYg PSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNs b3QpOwogCi0JLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVn aW5zY2FuKHJlbCwgaWR4cmVsLCAmc25hcCwgc2tleV9hdHRvZmYsIDApOworCS8qIFN0YXJ0 IGFuIGluZGV4IHNjYW4uCisJICoKKwkgKiBYWFggU2hvdWxkIHRoaXMgZG8gaW5kZXggcHJl ZmV0Y2hpbmc/IFdlJ3JlIGxvb2tpbmcgZm9yIGEgc2luZ2xlIHR1cGxlLAorCSAqIHByb2Jh Ymx5IHVzaW5nIGEgUEsgLyBVTklRVUUgaW5kZXgsIHNvIGRvZXMgbm90IHNlZW0gd29ydGgg aXQuIElmIHdlCisJICogcmVjb25zaWRlciB0aGlzLCBjYWxjbGF0ZSBwcmVmZXRjaF90YXJn ZXQgbGlrZSBpbiBub2RlSW5kZXhzY2FuLgorCSAqLworCXNjYW4gPSBpbmRleF9iZWdpbnNj YW4ocmVsLCBpZHhyZWwsICZzbmFwLCBza2V5X2F0dG9mZiwgMCwgMCk7CiAKIHJldHJ5Ogog CWZvdW5kID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0 cnVtZW50LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMKaW5kZXggYzM4 M2YzNGMwNjYuLjAwMTFkOWY2NzljIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9pbnN0cnVtZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvaW5zdHJ1bWVudC5j CkBAIC0yMzUsNiArMjM1LDggQEAgQnVmZmVyVXNhZ2VBZGQoQnVmZmVyVXNhZ2UgKmRzdCwg Y29uc3QgQnVmZmVyVXNhZ2UgKmFkZCkKIAlkc3QtPmxvY2FsX2Jsa3Nfd3JpdHRlbiArPSBh ZGQtPmxvY2FsX2Jsa3Nfd3JpdHRlbjsKIAlkc3QtPnRlbXBfYmxrc19yZWFkICs9IGFkZC0+ dGVtcF9ibGtzX3JlYWQ7CiAJZHN0LT50ZW1wX2Jsa3Nfd3JpdHRlbiArPSBhZGQtPnRlbXBf Ymxrc193cml0dGVuOworCWRzdC0+Ymxrc19wcmVmZXRjaF9yb3VuZHMgKz0gYWRkLT5ibGtz X3ByZWZldGNoX3JvdW5kczsKKwlkc3QtPmJsa3NfcHJlZmV0Y2hlcyArPSBhZGQtPmJsa3Nf cHJlZmV0Y2hlczsKIAlJTlNUUl9USU1FX0FERChkc3QtPnNoYXJlZF9ibGtfcmVhZF90aW1l LCBhZGQtPnNoYXJlZF9ibGtfcmVhZF90aW1lKTsKIAlJTlNUUl9USU1FX0FERChkc3QtPnNo YXJlZF9ibGtfd3JpdGVfdGltZSwgYWRkLT5zaGFyZWRfYmxrX3dyaXRlX3RpbWUpOwogCUlO U1RSX1RJTUVfQUREKGRzdC0+bG9jYWxfYmxrX3JlYWRfdGltZSwgYWRkLT5sb2NhbF9ibGtf cmVhZF90aW1lKTsKQEAgLTI1OSw2ICsyNjEsOCBAQCBCdWZmZXJVc2FnZUFjY3VtRGlmZihC dWZmZXJVc2FnZSAqZHN0LAogCWRzdC0+bG9jYWxfYmxrc193cml0dGVuICs9IGFkZC0+bG9j YWxfYmxrc193cml0dGVuIC0gc3ViLT5sb2NhbF9ibGtzX3dyaXR0ZW47CiAJZHN0LT50ZW1w X2Jsa3NfcmVhZCArPSBhZGQtPnRlbXBfYmxrc19yZWFkIC0gc3ViLT50ZW1wX2Jsa3NfcmVh ZDsKIAlkc3QtPnRlbXBfYmxrc193cml0dGVuICs9IGFkZC0+dGVtcF9ibGtzX3dyaXR0ZW4g LSBzdWItPnRlbXBfYmxrc193cml0dGVuOworCWRzdC0+Ymxrc19wcmVmZXRjaGVzICs9IGFk ZC0+Ymxrc19wcmVmZXRjaGVzIC0gc3ViLT5ibGtzX3ByZWZldGNoZXM7CisJZHN0LT5ibGtz X3ByZWZldGNoX3JvdW5kcyArPSBhZGQtPmJsa3NfcHJlZmV0Y2hfcm91bmRzIC0gc3ViLT5i bGtzX3ByZWZldGNoX3JvdW5kczsKIAlJTlNUUl9USU1FX0FDQ1VNX0RJRkYoZHN0LT5zaGFy ZWRfYmxrX3JlYWRfdGltZSwKIAkJCQkJCSAgYWRkLT5zaGFyZWRfYmxrX3JlYWRfdGltZSwg c3ViLT5zaGFyZWRfYmxrX3JlYWRfdGltZSk7CiAJSU5TVFJfVElNRV9BQ0NVTV9ESUZGKGRz dC0+c2hhcmVkX2Jsa193cml0ZV90aW1lLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMKaW5kZXggZjFkYjM1NjY1YzguLmI2NjYwYzEwYTYzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTQzLDcgKzQzLDcg QEAKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCi0KKyNpbmNsdWRlICJ1dGlscy9z cGNjYWNoZS5oIgogCiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkluZGV4T25seU5leHQoSW5k ZXhPbmx5U2NhblN0YXRlICpub2RlKTsKIHN0YXRpYyB2b2lkIFN0b3JlSW5kZXhUdXBsZShU dXBsZVRhYmxlU2xvdCAqc2xvdCwgSW5kZXhUdXBsZSBpdHVwLApAQCAtNjUsNiArNjUsOCBA QCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlJbmRleFNjYW5E ZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpzbG90OwogCUl0ZW1Qb2ludGVyIHRp ZDsKKwlSZWxhdGlvbgloZWFwUmVsID0gbm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uOwor CWJvb2wJCWFsbF92aXNpYmxlOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZv cm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtODMsMTYgKzg1LDQ3IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCiAJaWYgKHNjYW5kZXNjID09 IE5VTEwpCiAJeworCQlpbnQJCQlwcmVmZXRjaF9tYXg7CisKKwkJLyoKKwkJICogRGV0ZXJt aW5lIG51bWJlciBvZiBoZWFwIHBhZ2VzIHRvIHByZWZldGNoIGZvciB0aGlzIGluZGV4LiBU aGlzIGlzCisJCSAqIGVzc2VudGlhbGx5IGp1c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5 IGZvciB0aGUgdGFibGUgKG9yIHRoZQorCQkgKiB0YWJsZXNwYWNlIGl0J3MgaW4pLgorCQkg KgorCQkgKiBYWFggU2hvdWxkIHRoaXMgYWxzbyBsb29rIGF0IHBsYW4ucGxhbl9yb3dzIGFu ZCBtYXliZSBjYXAgdGhlIHRhcmdldAorCQkgKiB0byB0aGF0PyBQb2ludGxlc3MgdG8gcHJl ZmV0Y2ggbW9yZSB0aGFuIHdlIGV4cGVjdCB0byB1c2UuIE9yIG1heWJlCisJCSAqIGp1c3Qg cmVzZXQgdG8gdGhhdCB2YWx1ZSBkdXJpbmcgcHJlZmV0Y2hpbmcsIGFmdGVyIHJlYWRpbmcg dGhlIG5leHQKKwkJICogaW5kZXggcGFnZSAob3IgcmF0aGVyIGFmdGVyIHJlc2Nhbik/CisJ CSAqCisJCSAqIFhYWCBNYXliZSByZWR1Y2UgdGhlIHZhbHVlIHdpdGggcGFyYWxsZWwgd29y a2Vycz8KKwkJICovCisJCXByZWZldGNoX21heCA9IE1pbihnZXRfdGFibGVzcGFjZV9pb19j b25jdXJyZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpLAorCQkJCQkJICAg bm9kZS0+c3MucHMucGxhbi0+cGxhbl9yb3dzKTsKKwogCQkvKgogCQkgKiBXZSByZWFjaCBo ZXJlIGlmIHRoZSBpbmRleCBvbmx5IHNjYW4gaXMgbm90IHBhcmFsbGVsLCBvciBpZiB3ZSdy ZQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggb25seSBzY2FuIHRoYXQgd2Fz IHBsYW5uZWQgdG8gYmUKIAkJICogcGFyYWxsZWwuCisJCSAqCisJCSAqIFhYWCBNYXliZSB3 ZSBzaG91bGQgZW5hYmxlIHByZWZldGNoaW5nLCBidXQgcHJlZmV0Y2ggb25seSBwYWdlcyB0 aGF0CisJCSAqIGFyZSBub3QgYWxsLXZpc2libGUgKGJ1dCBjaGVja2luZyB0aGF0IGZyb20g dGhlIGluZGV4IGNvZGUgc2VlbXMgbGlrZQorCQkgKiBhIHZpb2xhdGlvbiBvZiBsYXllcmlu ZyBldGMpLgorCQkgKgorCQkgKiBYWFggVGhpcyBtaWdodCBsZWFkIHRvIElPUyBiZWluZyBz bG93ZXIgdGhhbiBwbGFpbiBpbmRleCBzY2FuLCBpZiB0aGUKKwkJICogdGFibGUgaGFzIGEg bG90IG9mIHBhZ2VzIHRoYXQgbmVlZCByZWNoZWNrLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBp bmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkg ICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFw c2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKLQkJCQkJCQkJICAg bm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CisJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVt T3JkZXJCeUtleXMsCisJCQkJCQkJCSAgIHByZWZldGNoX21heCk7CisKKwkJLyoKKwkJICog UmVtZW1iZXIgdGhpcyBpcyBpbmRleC1vbmx5IHNjYW4sIGJlY2F1c2Ugb2YgcHJlZmV0Y2hp bmcuIE5vdCB0aGUgbW9zdAorCQkgKiBlbGVnYW50IHdheSB0byBwYXNzIHRoaXMgaW5mby4K KwkJICovCisJCXNjYW5kZXNjLT5pbmRleG9ubHkgPSB0cnVlOwogCiAJCW5vZGUtPmlvc3Nf U2NhbkRlc2MgPSBzY2FuZGVzYzsKIApAQCAtMTE2LDcgKzE0OSw3IEBAIEluZGV4T25seU5l eHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogT0ssIG5vdyB0aGF0IHdl IGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGls ZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBO VUxMKQorCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWRfdm0oc2NhbmRlc2MsIGRp cmVjdGlvbiwgJmFsbF92aXNpYmxlKSkgIT0gTlVMTCkKIAl7CiAJCWJvb2wJCXR1cGxlX2Zy b21faGVhcCA9IGZhbHNlOwogCkBAIC0xNTUsOCArMTg4LDExIEBAIEluZGV4T25seU5leHQo SW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKgogCQkgKiBJdCdzIHdvcnRoIGdvaW5n IHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9jawogCQkg KiB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50 aW9uLgorCQkgKgorCQkgKiBYWFggU2tpcCBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIHBhZ2Ug aXMgYWxsIHZpc2libGUgZnJvbSBwcmVmZXRjaGVyLgogCQkgKi8KLQkJaWYgKCFWTV9BTExf VklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAorCQlpZiAoIWFsbF92aXNpYmxlICYm CisJCQkhVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKIAkJCQkJCQlJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCiAJCQkJCQkJJm5vZGUtPmlvc3NfVk1C dWZmZXIpKQogCQl7CkBAIC0zODAsNiArNDE2LDE4IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2Fu KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IElu dmFsaWRCdWZmZXI7CiAJfQogCisJLyogUmVsZWFzZSBWTSBidWZmZXIgcGluIGZyb20gcHJl ZmV0Y2hlciwgaWYgYW55LiAqLworCWlmIChpbmRleFNjYW5EZXNjICYmIGluZGV4U2NhbkRl c2MtPnhzX3ByZWZldGNoKQorCXsKKwkJSW5kZXhQcmVmZXRjaCBpbmRleFByZWZldGNoID0g aW5kZXhTY2FuRGVzYy0+eHNfcHJlZmV0Y2g7CisKKwkJaWYgKGluZGV4UHJlZmV0Y2gtPnZt QnVmZmVyICE9IEludmFsaWRCdWZmZXIpCisJCXsKKwkJCVJlbGVhc2VCdWZmZXIoaW5kZXhQ cmVmZXRjaC0+dm1CdWZmZXIpOworCQkJaW5kZXhQcmVmZXRjaC0+dm1CdWZmZXIgPSBJbnZh bGlkQnVmZmVyOworCQl9CisJfQorCiAJLyoKIAkgKiBjbG9zZSB0aGUgaW5kZXggcmVsYXRp b24gKG5vLW9wIGlmIHdlIGRpZG4ndCBvcGVuIGl0KQogCSAqLwpAQCAtNjQ2LDYgKzY5NCwy NCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlLAogewogCUVTdGF0ZQkgICAqZXN0YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CiAJ UGFyYWxsZWxJbmRleFNjYW5EZXNjIHBpc2NhbjsKKwlSZWxhdGlvbgloZWFwUmVsID0gbm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uOworCWludAkJCXByZWZldGNoX21heDsKKworCS8q CisJICogRGV0ZXJtaW5lIG51bWJlciBvZiBoZWFwIHBhZ2VzIHRvIHByZWZldGNoIGZvciB0 aGlzIGluZGV4LiBUaGlzIGlzCisJICogZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVfaW9f Y29uY3VycmVuY3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCisJICogdGFibGVzcGFjZSBpdCdz IGluKS4KKwkgKgorCSAqIFhYWCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxhbi5wbGFu X3Jvd3MgYW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0CisJICogdG8gdGhhdD8gUG9pbnRsZXNz IHRvIHByZWZldGNoIG1vcmUgdGhhbiB3ZSBleHBlY3QgdG8gdXNlLiBPciBtYXliZQorCSAq IGp1c3QgcmVzZXQgdG8gdGhhdCB2YWx1ZSBkdXJpbmcgcHJlZmV0Y2hpbmcsIGFmdGVyIHJl YWRpbmcgdGhlIG5leHQKKwkgKiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0ZXIgcmVzY2Fu KT8KKwkgKgorCSAqIFhYWCBNYXliZSByZWR1Y2UgdGhlIHZhbHVlIHdpdGggcGFyYWxsZWwg d29ya2Vycz8KKwkgKi8KKworCXByZWZldGNoX21heCA9IE1pbihnZXRfdGFibGVzcGFjZV9p b19jb25jdXJyZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpLAorCQkJCQkg ICBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX3Jvd3MpOwogCiAJcGlzY2FuID0gc2htX3RvY19h bGxvY2F0ZShwY3h0LT50b2MsIG5vZGUtPmlvc3NfUHNjYW5MZW4pOwogCWluZGV4X3BhcmFs bGVsc2Nhbl9pbml0aWFsaXplKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKQEAgLTY1 OCw3ICs3MjQsOCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVEU00oSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19O dW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJIHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJ CQkJCQkJCSBwcmVmZXRjaF9tYXgpOwogCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCA9IHRydWU7CiAJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAK QEAgLTY5Niw2ICs3NjMsMjMgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2Vy KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJICBQYXJhbGxlbFdvcmtlckNv bnRleHQgKnB3Y3h0KQogewogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwaXNjYW47CisJUmVs YXRpb24JaGVhcFJlbCA9IG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbjsKKwlpbnQJCQlw cmVmZXRjaF9tYXg7CisKKwkvKgorCSAqIERldGVybWluZSBudW1iZXIgb2YgaGVhcCBwYWdl cyB0byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleC4gVGhpcyBpcworCSAqIGVzc2VudGlhbGx5 IGp1c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IGZvciB0aGUgdGFibGUgKG9yIHRoZQor CSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCisJICoKKwkgKiBYWFggU2hvdWxkIHRoaXMgYWxz byBsb29rIGF0IHBsYW4ucGxhbl9yb3dzIGFuZCBtYXliZSBjYXAgdGhlIHRhcmdldAorCSAq IHRvIHRoYXQ/IFBvaW50bGVzcyB0byBwcmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0IHRv IHVzZS4gT3IgbWF5YmUKKwkgKiBqdXN0IHJlc2V0IHRvIHRoYXQgdmFsdWUgZHVyaW5nIHBy ZWZldGNoaW5nLCBhZnRlciByZWFkaW5nIHRoZSBuZXh0CisJICogaW5kZXggcGFnZSAob3Ig cmF0aGVyIGFmdGVyIHJlc2Nhbik/CisJICoKKwkgKiBYWFggTWF5YmUgcmVkdWNlIHRoZSB2 YWx1ZSB3aXRoIHBhcmFsbGVsIHdvcmtlcnM/CisJICovCisJcHJlZmV0Y2hfbWF4ID0gTWlu KGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBSZWwtPnJkX3JlbC0+cmVsdGFi bGVzcGFjZSksCisJCQkJCSAgIG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fcm93cyk7CiAKIAlw aXNjYW4gPSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5w bGFuX25vZGVfaWQsIGZhbHNlKTsKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KQEAgLTcwMyw3 ICs3ODcsOCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19O dW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJIHBpc2Nhbik7CisJCQkJCQkJCSBwaXNjYW4sCisJ CQkJCQkJCSBwcmVmZXRjaF9tYXgpOwogCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCA9IHRydWU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j CmluZGV4IDE0YjljMDAyMTdhLi5hNWY1Mzk0ZWY0OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvc3BjY2FjaGUuaCIKIAogLyoKICAqIFdoZW4g YW4gb3JkZXJpbmcgb3BlcmF0b3IgaXMgdXNlZCwgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUg aW5kZXggdGhhdApAQCAtODUsNiArODYsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUg Km5vZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2Fu ZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlSZWxhdGlvbiBoZWFwUmVsID0gbm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2Fy eSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtMTAzLDYgKzEwNSwyMSBA QCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAKIAlpZiAoc2NhbmRlc2MgPT0g TlVMTCkKIAl7CisJCWludAlwcmVmZXRjaF9tYXg7CisKKwkJLyoKKwkJICogRGV0ZXJtaW5l IG51bWJlciBvZiBoZWFwIHBhZ2VzIHRvIHByZWZldGNoIGZvciB0aGlzIGluZGV4IHNjYW4u IFRoaXMKKwkJICogaXMgZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVfaW9fY29uY3VycmVu Y3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCisJCSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCisJ CSAqCisJCSAqIFhYWCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxhbi5wbGFuX3Jvd3Mg YW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0CisJCSAqIHRvIHRoYXQ/IFBvaW50bGVzcyB0byBw cmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0IHRvIHVzZS4gT3IgbWF5YmUKKwkJICoganVz dCByZXNldCB0byB0aGF0IHZhbHVlIGR1cmluZyBwcmVmZXRjaGluZywgYWZ0ZXIgcmVhZGlu ZyB0aGUgbmV4dAorCQkgKiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0ZXIgcmVzY2FuKT8K KwkJICovCisJCXByZWZldGNoX21heCA9IE1pbihnZXRfdGFibGVzcGFjZV9pb19jb25jdXJy ZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpLAorCQkJCQkJICAgbm9kZS0+ c3MucHMucGxhbi0+cGxhbl9yb3dzKTsKKwogCQkvKgogCQkgKiBXZSByZWFjaCBoZXJlIGlm IHRoZSBpbmRleCBzY2FuIGlzIG5vdCBwYXJhbGxlbCwgb3IgaWYgd2UncmUKIAkJICogc2Vy aWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBw YXJhbGxlbC4KQEAgLTExMSw3ICsxMjgsOCBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUg Km5vZGUpCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSAg IGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5 cywKLQkJCQkJCQkJICAgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzKTsKKwkJCQkJCQkJICAg bm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLAorCQkJCQkJCQkgICBwcmVmZXRjaF9tYXgpOwog CiAJCW5vZGUtPmlzc19TY2FuRGVzYyA9IHNjYW5kZXNjOwogCkBAIC0xNzcsNiArMTk1LDcg QEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJRGF0dW0J ICAgKmxhc3RmZXRjaGVkX3ZhbHM7CiAJYm9vbAkgICAqbGFzdGZldGNoZWRfbnVsbHM7CiAJ aW50CQkJY21wOworCVJlbGF0aW9uCWhlYXBSZWwgPSBub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb247CiAKIAllc3RhdGUgPSBub2RlLT5zcy5wcy5zdGF0ZTsKIApAQCAtMTk4LDYgKzIx NywyMSBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAog CWlmIChzY2FuZGVzYyA9PSBOVUxMKQogCXsKKwkJaW50CXByZWZldGNoX21heDsKKworCQkv KgorCQkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhlYXAgcGFnZXMgdG8gcHJlZmV0Y2ggZm9y IHRoaXMgaW5kZXguIFRoaXMgaXMKKwkJICogZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVf aW9fY29uY3VycmVuY3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCisJCSAqIHRhYmxlc3BhY2Ug aXQncyBpbikuCisJCSAqCisJCSAqIFhYWCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxh bi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0CisJCSAqIHRvIHRoYXQ/IFBv aW50bGVzcyB0byBwcmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0IHRvIHVzZS4gT3IgbWF5 YmUKKwkJICoganVzdCByZXNldCB0byB0aGF0IHZhbHVlIGR1cmluZyBwcmVmZXRjaGluZywg YWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAorCQkgKiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0 ZXIgcmVzY2FuKT8KKwkJICovCisJCXByZWZldGNoX21heCA9IE1pbihnZXRfdGFibGVzcGFj ZV9pb19jb25jdXJyZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpLAorCQkJ CQkJICAgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9yb3dzKTsKKwogCQkvKgogCQkgKiBXZSBy ZWFjaCBoZXJlIGlmIHRoZSBpbmRleCBzY2FuIGlzIG5vdCBwYXJhbGxlbCwgb3IgaWYgd2Un cmUKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxh bm5lZCB0byBiZSBwYXJhbGxlbC4KQEAgLTIwNiw3ICsyNDAsOCBAQCBJbmRleE5leHRXaXRo UmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJCQkJCQkJICAgbm9kZS0+aXNzX1Jl bGF0aW9uRGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJ ICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLAotCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3Jk ZXJCeUtleXMpOworCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCisJCQkJ CQkJCSAgIHByZWZldGNoX21heCk7CiAKIAkJbm9kZS0+aXNzX1NjYW5EZXNjID0gc2NhbmRl c2M7CiAKQEAgLTE2NjIsNiArMTY5NywyNCBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURT TShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIHsKIAlFU3RhdGUJICAgKmVzdGF0ZSA9IG5vZGUt PnNzLnBzLnN0YXRlOwogCVBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwaXNjYW47CisJUmVsYXRp b24JaGVhcFJlbCA9IG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbjsKKwlpbnQJCQlwcmVm ZXRjaF9tYXg7CisKKwkvKgorCSAqIERldGVybWluZSBudW1iZXIgb2YgaGVhcCBwYWdlcyB0 byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleC4gVGhpcyBpcworCSAqIGVzc2VudGlhbGx5IGp1 c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IGZvciB0aGUgdGFibGUgKG9yIHRoZQorCSAq IHRhYmxlc3BhY2UgaXQncyBpbikuCisJICoKKwkgKiBYWFggU2hvdWxkIHRoaXMgYWxzbyBs b29rIGF0IHBsYW4ucGxhbl9yb3dzIGFuZCBtYXliZSBjYXAgdGhlIHRhcmdldAorCSAqIHRv IHRoYXQ/IFBvaW50bGVzcyB0byBwcmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0IHRvIHVz ZS4gT3IgbWF5YmUKKwkgKiBqdXN0IHJlc2V0IHRvIHRoYXQgdmFsdWUgZHVyaW5nIHByZWZl dGNoaW5nLCBhZnRlciByZWFkaW5nIHRoZSBuZXh0CisJICogaW5kZXggcGFnZSAob3IgcmF0 aGVyIGFmdGVyIHJlc2Nhbik/CisJICoKKwkgKiBYWFggTWF5YmUgcmVkdWNlIHRoZSB2YWx1 ZSB3aXRoIHBhcmFsbGVsIHdvcmtlcnM/CisJICovCisKKwlwcmVmZXRjaF9tYXggPSBNaW4o Z2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVhcFJlbC0+cmRfcmVsLT5yZWx0YWJs ZXNwYWNlKSwKKwkJCQkJICAgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9yb3dzKTsKIAogCXBp c2NhbiA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBub2RlLT5pc3NfUHNjYW5MZW4p OwogCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKG5vZGUtPnNzLnNzX2N1cnJlbnRS ZWxhdGlvbiwKQEAgLTE2NzQsNyArMTcyNyw4IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXpl RFNNKEluZGV4U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUt Pmlzc19OdW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJIHBpc2Nhbik7CisJCQkJCQkJCSBwaXNj YW4sCisJCQkJCQkJCSBwcmVmZXRjaF9tYXgpOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGlt ZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBh c3MKQEAgLTE3MTAsNiArMTc2NCwyMyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdvcmtl cihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkgIFBhcmFsbGVsV29ya2VyQ29udGV4 dCAqcHdjeHQpCiB7CiAJUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBpc2NhbjsKKwlSZWxhdGlv bgloZWFwUmVsID0gbm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uOworCWludAkJCXByZWZl dGNoX21heDsKKworCS8qCisJICogRGV0ZXJtaW5lIG51bWJlciBvZiBoZWFwIHBhZ2VzIHRv IHByZWZldGNoIGZvciB0aGlzIGluZGV4LiBUaGlzIGlzCisJICogZXNzZW50aWFsbHkganVz dCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCisJICog dGFibGVzcGFjZSBpdCdzIGluKS4KKwkgKgorCSAqIFhYWCBTaG91bGQgdGhpcyBhbHNvIGxv b2sgYXQgcGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0CisJICogdG8g dGhhdD8gUG9pbnRsZXNzIHRvIHByZWZldGNoIG1vcmUgdGhhbiB3ZSBleHBlY3QgdG8gdXNl LiBPciBtYXliZQorCSAqIGp1c3QgcmVzZXQgdG8gdGhhdCB2YWx1ZSBkdXJpbmcgcHJlZmV0 Y2hpbmcsIGFmdGVyIHJlYWRpbmcgdGhlIG5leHQKKwkgKiBpbmRleCBwYWdlIChvciByYXRo ZXIgYWZ0ZXIgcmVzY2FuKT8KKwkgKgorCSAqIFhYWCBNYXliZSByZWR1Y2UgdGhlIHZhbHVl IHdpdGggcGFyYWxsZWwgd29ya2Vycz8KKwkgKi8KKwlwcmVmZXRjaF9tYXggPSBNaW4oZ2V0 X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVhcFJlbC0+cmRfcmVsLT5yZWx0YWJsZXNw YWNlKSwKKwkJCQkJICAgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9yb3dzKTsKIAogCXBpc2Nh biA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5f bm9kZV9pZCwgZmFsc2UpOwogCW5vZGUtPmlzc19TY2FuRGVzYyA9CkBAIC0xNzE3LDcgKzE3 ODgsOCBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAq bm9kZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSBub2Rl LT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMs Ci0JCQkJCQkJCSBwaXNjYW4pOworCQkJCQkJCQkgcGlzY2FuLAorCQkJCQkJCQkgcHJlZmV0 Y2hfbWF4KTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUg b3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9z ZWxmdW5jcy5jCmluZGV4IGUxMWQwMjI4MjdhLi44YjY2MmQzNzFkZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTYyODksOSArNjI4OSwxMCBAQCBnZXRfYWN0dWFsX3Zh cmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJSW5pdE5vblZhY3V1bWFibGVT bmFwc2hvdChTbmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0 Rm9yKGhlYXBSZWwpKTsKIAorCS8qIFhYWCBNYXliZSBzaG91bGQgZG8gcHJlZmV0Y2hpbmcg dXNpbmcgdGhlIGRlZmF1bHQgcHJlZmV0Y2ggcGFyYW1ldGVycz8gKi8KIAlpbmRleF9zY2Fu ID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAogCQkJCQkJCQkgJlNuYXBz aG90Tm9uVmFjdXVtYWJsZSwKLQkJCQkJCQkJIDEsIDApOworCQkJCQkJCQkgMSwgMCwgMCk7 CiAJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KIAlpbmRleF9zY2FuLT54 c193YW50X2l0dXAgPSB0cnVlOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5 cywgMSwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0u aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDgwZGM4ZDU0MDY2Li5mNjg4 MmY2NDRkMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRl ICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImFjY2Vzcy9za2V5LmgiCiAjaW5jbHVkZSAi bm9kZXMvdGlkYml0bWFwLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNs dWRlICJzdG9yYWdlL2xvY2tkZWZzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIK ICNpbmNsdWRlICJ1dGlscy9zbmFwc2hvdC5oIgpAQCAtMTU0LDcgKzE1NSw4IEBAIGV4dGVy biB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiBl eHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkgU25h cHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsK KwkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCisJCQkJCQkJCQkgaW50IHBy ZWZldGNoX21heCk7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fYml0 bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkJCQkJCVNuYXBzaG90IHNuYXBz aG90LAogCQkJCQkJCQkJCQlpbnQgbmtleXMpOwpAQCAtMTcxLDkgKzE3MywxMyBAQCBleHRl cm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVs YXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVs KFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cywKLQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2Nh bkRlc2MgcHNjYW4pOworCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2Nh biwKKwkJCQkJCQkJCQkJICBpbnQgcHJlZmV0Y2hfbWF4KTsKIGV4dGVybiBJdGVtUG9pbnRl ciBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5l eHRfdGlkX3ZtKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQlTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJCQlib29sICphbGxfdmlzaWJsZSk7CiBzdHJ1Y3QgVHVw bGVUYWJsZVNsb3Q7CiBleHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRl c2Mgc2Nhbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBib29sIGlu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLApAQCAtMjMyLDQgKzIzOCwxMDQgQEAgZXh0ZXJuIEhlYXBUdXBsZSBzeXN0YWJs ZV9nZXRuZXh0X29yZGVyZWQoU3lzU2NhbkRlc2Mgc3lzc2NhbiwKIAkJCQkJCQkJCQkgIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2VuZHNjYW5f b3JkZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuKTsKIAorLyoKKyAqIENhY2hlIG9mIHJlY2Vu dGx5IHByZWZldGNoZWQgYmxvY2tzLCBvcmdhbml6ZWQgYXMgYSBoYXNoIHRhYmxlIG9mCisg KiBzbWFsbCBMUlUgY2FjaGVzLiBEb2Vzbid0IG5lZWQgdG8gYmUgcGVyZmVjdGx5IGFjY3Vy YXRlLCBidXQgd2UKKyAqIGFpbSB0byBtYWtlIGZhbHNlIHBvc2l0aXZlcy9uZWdhdGl2ZXMg cmVhc29uYWJseSBsb3cuCisgKi8KK3R5cGVkZWYgc3RydWN0IFByZWZldGNoQ2FjaGVFbnRy eSB7CisJQmxvY2tOdW1iZXIJCWJsb2NrOworCXVpbnQ2NAkJCXJlcXVlc3Q7Cit9IFByZWZl dGNoQ2FjaGVFbnRyeTsKKworLyoKKyAqIFNpemUgb2YgdGhlIGNhY2hlIG9mIHJlY2VudGx5 IHByZWZldGNoZWQgYmxvY2tzIC0gc2hvdWxkbid0IGJlIHRvbworICogc21hbGwgb3IgdG9v IGxhcmdlLiAxMDI0IHNlZW1zIGFib3V0IHJpZ2h0LCBpdCBjb3ZlcnMgfjhNQiBvZiBkYXRh LgorICogSXQncyBzb21ld2hhdCBhcmJpdHJhcnksIHRoZXJlJ3Mgbm8gcGFydGljdWxhciBm b3JtdWxhIHNheWluZyBpdAorICogc2hvdWxkIG5vdCBiZSBoaWdoZXIvbG93ZXIuCisgKgor ICogVGhlIGNhY2hlIGlzIHN0cnVjdHVyZWQgYXMgYW4gYXJyYXkgb2Ygc21hbGwgTFJVIGNh Y2hlcywgc28gdGhlIHRvdGFsCisgKiBzaXplIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg TFJVIHNpemUuIFRoZSBMUlUgc2hvdWxkIGJlIHRpbnkgdG8KKyAqIGtlZXAgbGluZWFyIHNl YXJjaCBjaGVhcCBlbm91Z2guCisgKgorICogWFhYIE1heWJlIHdlIGNvdWxkIGNvbnNpZGVy IGVmZmVjdGl2ZV9jYWNoZV9zaXplIG9yIHNvbWV0aGluZz8KKyAqLworI2RlZmluZQkJUFJF RkVUQ0hfTFJVX1NJWkUJCTgKKyNkZWZpbmUJCVBSRUZFVENIX0xSVV9DT1VOVAkJMTI4Cisj ZGVmaW5lCQlQUkVGRVRDSF9DQUNIRV9TSVpFCQkoUFJFRkVUQ0hfTFJVX1NJWkUgKiBQUkVG RVRDSF9MUlVfQ09VTlQpCisKKy8qCisgKiBVc2VkIHRvIGRldGVjdCBzZXF1ZW50aWFsIHBh dHRlcm5zIChhbmQgZGlzYWJsZSBwcmVmZXRjaGluZykuCisgKi8KKyNkZWZpbmUJCVBSRUZF VENIX1FVRVVFX0hJU1RPUlkJCQk4CisjZGVmaW5lCQlQUkVGRVRDSF9TRVFfUEFUVEVSTl9C TE9DS1MJCTQKKwordHlwZWRlZiBzdHJ1Y3QgUHJlZmV0Y2hFbnRyeQoreworCUl0ZW1Qb2lu dGVyRGF0YQkJdGlkOworCWJvb2wJCQkJYWxsX3Zpc2libGU7Cit9IFByZWZldGNoRW50cnk7 CisKK3R5cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0Y2hEYXRhCit7CisJLyoKKwkgKiBYWFgg V2UgbmVlZCB0byBkaXNhYmxlIHRoaXMgaW4gc29tZSBjYXNlcyAoZS5nLiB3aGVuIHVzaW5n IGluZGV4LW9ubHkKKwkgKiBzY2Fucywgd2UgZG9uJ3Qgd2FudCB0byBwcmVmZXRjaCBwYWdl cykuIE9yIG1heWJlIHdlIHNob3VsZCBwcmVmZXRjaAorCSAqIG9ubHkgcGFnZXMgdGhhdCBh cmUgbm90IGFsbC12aXNpYmxlLCB0aGF0J2QgYmUgZXZlbiBiZXR0ZXIuCisJICovCisJaW50 CQkJcHJlZmV0Y2hUYXJnZXQ7CS8qIGhvdyBmYXIgd2Ugc2hvdWxkIGJlIHByZWZldGNoaW5n ICovCisJaW50CQkJcHJlZmV0Y2hNYXhUYXJnZXQ7CS8qIG1heGltdW0gcHJlZmV0Y2hpbmcg ZGlzdGFuY2UgKi8KKwlpbnQJCQlwcmVmZXRjaFJlc2V0OwkvKiByZXNldCB0byB0aGlzIGRp c3RhbmNlIG9uIHJlc2NhbiAqLworCWJvb2wJCXByZWZldGNoRG9uZTsJLyogZGlkIHdlIGdl dCBhbGwgVElEcyBmcm9tIHRoZSBpbmRleD8gKi8KKworCS8qIHJ1bnRpbWUgc3RhdGlzdGlj cyAqLworCXVpbnQ2NAkJY291bnRBbGw7CQkvKiBhbGwgcHJlZmV0Y2ggcmVxdWVzdHMgKi8K Kwl1aW50NjQJCWNvdW50UHJlZmV0Y2g7CS8qIGFjdHVhbCBwcmVmZXRjaGVzICovCisJdWlu dDY0CQljb3VudFNraXBTZXF1ZW50aWFsOworCXVpbnQ2NAkJY291bnRTa2lwQ2FjaGVkOwor CisJLyogdXNlZCB3aGVuIHByZWZldGNoaW5nIGluZGV4LW9ubHkgc2NhbnMgKi8KKwlCdWZm ZXIJCXZtQnVmZmVyOworCisJLyoKKwkgKiBRdWV1ZSBvZiBUSURzIHRvIHByZWZldGNoLgor CSAqCisJICogWFhYIFNpemluZyBmb3IgTUFYX0lPX0NPTkNVUlJFTkNZIG1heSBiZSBvdmVy a2lsbCwgYnV0IGl0IHNlZW1zIHNpbXBsZXIKKwkgKiB0aGFuIGR5bmFtaWNhbGx5IGFkanVz dGluZyBmb3IgY3VzdG9tIHZhbHVlcy4KKwkgKi8KKwlQcmVmZXRjaEVudHJ5CXF1ZXVlSXRl bXNbTUFYX0lPX0NPTkNVUlJFTkNZXTsKKwl1aW50NjQJCQlxdWV1ZUluZGV4OwkvKiBuZXh0 IFRJRCB0byBwcmVmZXRjaCAqLworCXVpbnQ2NAkJCXF1ZXVlU3RhcnQ7CS8qIGZpcnN0IHZh bGlkIFRJRCBpbiBxdWV1ZSAqLworCXVpbnQ2NAkJCXF1ZXVlRW5kOwkvKiBmaXJzdCBpbnZh bGlkIChlbXB0eSkgVElEIGluIHF1ZXVlICovCisKKwkvKgorCSAqIEEgY291cGxlIG9mIGxh c3QgcHJlZmV0Y2hlZCBibG9ja3MsIHVzZWQgdG8gY2hlY2sgZm9yIGNlcnRhaW4gYWNjZXNz CisJICogcGF0dGVybiBhbmQgc2tpcCBwcmVmZXRjaGluZyAtIGUuZy4gZm9yIHNlcXVlbnRp YWwgYWNjZXNzKS4KKwkgKgorCSAqIFhYWCBTZXBhcmF0ZSBmcm9tIHRoZSBtYWluIHF1ZXVl LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21wYXJlIHRoZQorCSAqIGJsb2NrIG51bWJl cnMsIG5vdCB0aGUgd2hvbGUgVElELiBJbiBzZXF1ZW50aWFsIGFjY2VzcyBpdCdzIGxpa2Vs eSB3ZQorCSAqIHJlYWQgbWFueSBpdGVtcyBmcm9tIGVhY2ggcGFnZSwgYW5kIHdlIGRvbid0 IHdhbnQgdG8gY2hlY2sgbWFueSBpdGVtcworCSAqIChhcyB0aGF0IGlzIG11Y2ggbW9yZSBl eHBlbnNpdmUpLgorCSAqLworCUJsb2NrTnVtYmVyCQlibG9ja0l0ZW1zW1BSRUZFVENIX1FV RVVFX0hJU1RPUlldOworCXVpbnQ2NAkJCWJsb2NrSW5kZXg7CS8qIGluZGV4IGluIHRoZSBi bG9jayAocG9pbnRzIHRvIHRoZSBmaXJzdAorCQkJCQkJCQkgKiBlbXB0eSBlbnRyeSkqLwor CisJLyoKKwkgKiBDYWNoZSBvZiByZWNlbnRseSBwcmVmZXRjaGVkIGJsb2Nrcywgb3JnYW5p emVkIGFzIGEgaGFzaCB0YWJsZSBvZgorCSAqIHNtYWxsIExSVSBjYWNoZXMuCisJICovCisJ dWludDY0CQkJCXByZWZldGNoUmVxTnVtYmVyOworCVByZWZldGNoQ2FjaGVFbnRyeQlwcmVm ZXRjaENhY2hlW1BSRUZFVENIX0NBQ0hFX1NJWkVdOworCit9IEluZGV4UHJlZmV0Y2hEYXRh OworCisjZGVmaW5lIFBSRUZFVENIX1FVRVVFX0lOREVYKGEpCSgoYSkgJSAoTUFYX0lPX0NP TkNVUlJFTkNZKSkKKyNkZWZpbmUgUFJFRkVUQ0hfUVVFVUVfRU1QVFkocCkJKChwKS0+cXVl dWVFbmQgPT0gKHApLT5xdWV1ZUluZGV4KQorI2RlZmluZSBQUkVGRVRDSF9FTkFCTEVEKHAp CQkoKHApICYmICgocCktPnByZWZldGNoTWF4VGFyZ2V0ID4gMCkpCisjZGVmaW5lIFBSRUZF VENIX0ZVTEwocCkJCSgocCktPnF1ZXVlRW5kIC0gKHApLT5xdWV1ZUluZGV4ID09IChwKS0+ cHJlZmV0Y2hUYXJnZXQpCisjZGVmaW5lIFBSRUZFVENIX0RPTkUocCkJCSgocCkgJiYgKChw KS0+cHJlZmV0Y2hEb25lICYmIFBSRUZFVENIX1FVRVVFX0VNUFRZKHApKSkKKyNkZWZpbmUg UFJFRkVUQ0hfQUNUSVZFKHApCQkoUFJFRkVUQ0hfRU5BQkxFRChwKSAmJiAhKHApLT5wcmVm ZXRjaERvbmUpCisjZGVmaW5lIFBSRUZFVENIX0JMT0NLX0lOREVYKHYpCSgodikgJSBQUkVG RVRDSF9RVUVVRV9ISVNUT1JZKQorCiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKaW5kZXggZDAzMzYwZWFjMDQuLmQ1OTAzNDkyYzZlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKQEAgLTEwNiw2ICsxMDYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhGZXRjaFRhYmxlRGF0YQogCVJlbGF0aW9uCXJlbDsKIH0gSW5kZXhGZXRjaFRhYmxlRGF0 YTsKIAorLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zLCBkZWZpbmVkIGluIGdlbmFtLmgu CisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0Y2hEYXRhIEluZGV4UHJlZmV0Y2hE YXRhOwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhQcmVmZXRjaERhdGEgKkluZGV4UHJlZmV0Y2g7 CisKIC8qCiAgKiBXZSB1c2UgdGhlIHNhbWUgSW5kZXhTY2FuRGVzY0RhdGEgc3RydWN0dXJl IGZvciBib3RoIGFtZ2V0dHVwbGUtYmFzZWQKICAqIGFuZCBhbWdldGJpdG1hcC1iYXNlZCBp bmRleCBzY2Fucy4gIFNvbWUgZmllbGRzIGFyZSBvbmx5IHJlbGV2YW50IGluCkBAIC0xMjks NiArMTM1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCQlp Z25vcmVfa2lsbGVkX3R1cGxlczsJLyogZG8gbm90IHJldHVybiBraWxsZWQgZW50cmllcyAq LwogCWJvb2wJCXhhY3RTdGFydGVkSW5SZWNvdmVyeTsJLyogcHJldmVudHMga2lsbGluZy9z ZWVpbmcga2lsbGVkCiAJCQkJCQkJCQkJICogdHVwbGVzICovCisJYm9vbAkJaW5kZXhvbmx5 OwkJCS8qIGlzIHRoaXMgaW5kZXgtb25seSBzY2FuPyAqLwogCiAJLyogaW5kZXggYWNjZXNz IG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KIAl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNj ZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCkBAIC0xNjIsNiArMTY5LDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCSAgICp4c19vcmRlcmJ5bnVsbHM7 CiAJYm9vbAkJeHNfcmVjaGVja29yZGVyYnk7CiAKKwkvKiBwcmVmZXRjaGluZyBzdGF0ZSAo b3IgTlVMTCBpZiBkaXNhYmxlZCBmb3IgdGhpcyBzY2FuKSAqLworCUluZGV4UHJlZmV0Y2hE YXRhICp4c19wcmVmZXRjaDsKKwogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRp b24sIGluIHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNj RGF0YSAqcGFyYWxsZWxfc2NhbjsKIH0JCQlJbmRleFNjYW5EZXNjRGF0YTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2luc3RydW1lbnQuaAppbmRleCBkNWQ2OTk0MWM1Mi4uZjUzZmI0YTFlNTEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaAorKysgYi9zcmMv aW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmgKQEAgLTMzLDYgKzMzLDggQEAgdHlwZWRl ZiBzdHJ1Y3QgQnVmZmVyVXNhZ2UKIAlpbnQ2NAkJbG9jYWxfYmxrc193cml0dGVuOyAvKiAj IG9mIGxvY2FsIGRpc2sgYmxvY2tzIHdyaXR0ZW4gKi8KIAlpbnQ2NAkJdGVtcF9ibGtzX3Jl YWQ7IC8qICMgb2YgdGVtcCBibG9ja3MgcmVhZCAqLwogCWludDY0CQl0ZW1wX2Jsa3Nfd3Jp dHRlbjsJLyogIyBvZiB0ZW1wIGJsb2NrcyB3cml0dGVuICovCisJaW50NjQJCWJsa3NfcHJl ZmV0Y2hfcm91bmRzOwkvKiAjIG9mIHByZWZldGNoIHJvdW5kcyAqLworCWludDY0CQlibGtz X3ByZWZldGNoZXM7CS8qICMgb2YgYnVmZmVycyBwcmVmZXRjaGVkICovCiAJaW5zdHJfdGlt ZQlzaGFyZWRfYmxrX3JlYWRfdGltZTsJLyogdGltZSBzcGVudCByZWFkaW5nIHNoYXJlZCBi bG9ja3MgKi8KIAlpbnN0cl90aW1lCXNoYXJlZF9ibGtfd3JpdGVfdGltZTsJLyogdGltZSBz cGVudCB3cml0aW5nIHNoYXJlZCBibG9ja3MgKi8KIAlpbnN0cl90aW1lCWxvY2FsX2Jsa19y ZWFkX3RpbWU7CS8qIHRpbWUgc3BlbnQgcmVhZGluZyBsb2NhbCBibG9ja3MgKi8KLS0gCjIu NDEuMAoK --------------4B9o2eeZz326afukkg4ZXfmy Content-Type: text/x-patch; charset=UTF-8; name="v20231209-0002-reworks.patch" Content-Disposition: attachment; filename="v20231209-0002-reworks.patch" Content-Transfer-Encoding: base64 RnJvbSBiMGMzZTM0NmJmNDFjNmM3ZDE0NTAyODE0YmIwZWUzMjdhZTY4MTY5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogU2F0LCA5IERlYyAyMDIzIDAwOjIxOjMwICswMTAwClN1YmplY3Q6IFtQ QVRDSCB2MjAyMzEyMDkgMi8yXSByZXdvcmtzCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgMTQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9nZW5hbS5jICAgICAgICAgfCAgMzUgKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YW0uYyAgICAgICB8IDE1MiArKysrLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9leGVj dXRvci9leGVjUmVwbGljYXRpb24uYyAgIHwgIDE4ICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhvbmx5c2Nhbi5jIHwgMTY2ICsrKysrKysrLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgIHwgMTQ5ICsrKysrKysrLS0tLS0t LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgfCAgIDUgKy0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgfCAyMTcgKysrKysr KysrKysrLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAg ICAgICAgfCAgMTAgLS0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAg ICAgfCAgIDQgKwogMTEgZmlsZXMgY2hhbmdlZCwgMzMyIGluc2VydGlvbnMoKyksIDQ1MCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YwppbmRleCA4OTQ3NDA3ODk1MS4uMjZkM2VjMjBiNjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUg InN0b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvcmVsLmgiCi0jaW5jbHVkZSAidXRpbHMvc3BjY2FjaGUuaCIKIAogc3RhdGlj IHZvaWQgcmVmb3JtX2FuZF9yZXdyaXRlX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJ CQkJCSBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLApAQCAtNzQ4LDE0ICs3 NDcsNiBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRI ZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCQkJUFJPR1JFU1NfQ0xVU1RFUl9JTkRFWF9SRUxJ RAogCQl9OwogCQlpbnQ2NAkJY2lfdmFsWzJdOwotCQlpbnQJCQlwcmVmZXRjaF9tYXg7Ci0K LQkJLyoKLQkJICogR2V0IHRoZSBwcmVmZXRjaCB0YXJnZXQgZm9yIHRoZSBvbGQgdGFibGVz cGFjZSAod2hpY2ggaXMgd2hhdCB3ZSdsbAotCQkgKiByZWFkIHVzaW5nIHRoZSBpbmRleCku IFdlJ2xsIHVzZSBpdCBhcyBhIHJlc2V0IHZhbHVlIHRvbywgYWx0aG91Z2gKLQkJICogdGhl cmUgc2hvdWxkIGJlIG5vIHJlc2NhbnMgZm9yIENMVVNURVIgZXRjLgotCQkgKi8KLQkJcHJl ZmV0Y2hfbWF4ID0gZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koT2xkSGVhcC0+cmRf cmVsLT5yZWx0YWJsZXNwYWNlKTsKIAogCQkvKiBTZXQgcGhhc2UgYW5kIE9JRE9sZEluZGV4 IHRvIGNvbHVtbnMgKi8KIAkJY2lfdmFsWzBdID0gUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9J TkRFWF9TQ0FOX0hFQVA7CkBAIC03NjQsOCArNzU1LDcgQEAgaGVhcGFtX3JlbGF0aW9uX2Nv cHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAog CQl0YWJsZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2NhbiA9 IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIDAsIDAs Ci0JCQkJCQkJCQlwcmVmZXRjaF9tYXgpOworCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNj YW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCAwLCAwKTsKIAkJaW5kZXhfcmVz Y2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVsc2UKQEAgLTgwMiw3 ICs3OTIsNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBP bGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCWlmIChpbmRleFNjYW4gIT0gTlVMTCkK IAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChpbmRleFNj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90LCBOVUxMKSkKIAkJCQlicmVhazsKIAog CQkJLyogU2luY2Ugd2UgdXNlZCBubyBzY2FuIGtleXMsIHNob3VsZCBuZXZlciBuZWVkIHRv IHJlY2hlY2sgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5h bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggZDQ1YTIwOWVl M2EuLjcyZTdjOWYyMDZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtMTI2 LDkgKzEyNiw2IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7 CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAotCS8qIEluZm9ybWF0aW9uIHVzZWQg Zm9yIGFzeW5jaHJvbm91cyBwcmVmZXRjaGluZyBkdXJpbmcgaW5kZXggc2NhbnMuICovCi0J c2Nhbi0+eHNfcHJlZmV0Y2ggPSBOVUxMOwotCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ0 MywyMCArNDQwLDggQEAgc3lzdGFibGVfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCQl9CiAK LQkJLyoKLQkJICogV2UgZG9uJ3QgZG8gYW55IHByZWZldGNoaW5nIG9uIHN5c3RlbSBjYXRh bG9ncywgZm9yIHR3byBtYWluIHJlYXNvbnMuCi0JCSAqCi0JCSAqIEZpcnN0bHksIHdlIHVz dWFsbHkgZG8gUEsgbG9va3Vwcywgd2hpY2ggbWFrZXMgcHJlZmV0Y2hpbmcgcG9pbnRsZXMs Ci0JCSAqIG9yIHdlIG9mdGVuIGRvbid0IGtub3cgaG93IG1hbnkgcm93cyB0byBleHBlY3Qg KGFuZCB0aGUgbnVtYmVycyB0ZW5kCi0JCSAqIHRvIGJlIGZhaXJseSBsb3cpLiBTbyBpdCdz IG5vdCBjbGVhciBpdCdkIGhlbHAuIEZ1cnRoZXJtb3JlLCBwbGFjZXMKLQkJICogdGhhdCBh cmUgc2Vuc2l0aXZlIHRlbmQgdG8gdXNlIHN5c2NhY2hlIGFueXdheS4KLQkJICoKLQkJICog U2Vjb25kbHksIHdlIGNhbid0IGNhbGwgZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3ko KSBiZWNhdXNlIHRoYXQKLQkJICogZG9lcyBhIHN5c3NjYW4gaW50ZXJuYWxseSwgc28gaXQg bWlnaHQgbGVhZCB0byBhIGN5Y2xlLiBXZSBjb3VsZCB1c2UKLQkJICogdXNlIGVmZmVjdGl2 ZV9pb19jb25jdXJyZW5jeSwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBpdC4KLQkJICov CiAJCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJl bCwKLQkJCQkJCQkJCQkgc25hcHNob3QsIG5rZXlzLCAwLCAwKTsKKwkJCQkJCQkJCQkgc25h cHNob3QsIG5rZXlzLCAwKTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBrZXks IG5rZXlzLCBOVUxMLCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CiAJfQpAQCAtNTI0 LDcgKzUwOSw3IEBAIHN5c3RhYmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2NhbikKIAog CWlmIChzeXNzY2FuLT5pcmVsKQogCXsKLQkJaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNz Y2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCQlp ZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwgc3lzc2Nhbi0+c2xvdCwgTlVMTCkpCiAJCXsKIAkJCWJvb2wJCXNob3VsZEZyZWU7 CiAKQEAgLTcxMSwyMCArNjk2LDggQEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4g aW5kZXgiKTsKIAl9CiAKLQkvKgotCSAqIFdlIGRvbid0IGRvIGFueSBwcmVmZXRjaGluZyBv biBzeXN0ZW0gY2F0YWxvZ3MsIGZvciB0d28gbWFpbiByZWFzb25zLgotCSAqCi0JICogRmly c3RseSwgd2UgdXN1YWxseSBkbyBQSyBsb29rdXBzLCB3aGljaCBtYWtlcyBwcmVmZXRjaGlu ZyBwb2ludGxlcywKLQkgKiBvciB3ZSBvZnRlbiBkb24ndCBrbm93IGhvdyBtYW55IHJvd3Mg dG8gZXhwZWN0IChhbmQgdGhlIG51bWJlcnMgdGVuZAotCSAqIHRvIGJlIGZhaXJseSBsb3cp LiBTbyBpdCdzIG5vdCBjbGVhciBpdCdkIGhlbHAuIEZ1cnRoZXJtb3JlLCBwbGFjZXMKLQkg KiB0aGF0IGFyZSBzZW5zaXRpdmUgdGVuZCB0byB1c2Ugc3lzY2FjaGUgYW55d2F5LgotCSAq Ci0JICogU2Vjb25kbHksIHdlIGNhbid0IGNhbGwgZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3Vy cmVuY3koKSBiZWNhdXNlIHRoYXQKLQkgKiBkb2VzIGEgc3lzc2NhbiBpbnRlcm5hbGx5LCBz byBpdCBtaWdodCBsZWFkIHRvIGEgY3ljbGUuIFdlIGNvdWxkIHVzZQotCSAqIHVzZSBlZmZl Y3RpdmVfaW9fY29uY3VycmVuY3ksIGJ1dCBpdCBkb2Vzbid0IHNlZW0gd29ydGggaXQuCi0J ICovCiAJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBp bmRleFJlbGF0aW9uLAotCQkJCQkJCQkJIHNuYXBzaG90LCBua2V5cywgMCwgMCk7CisJCQkJ CQkJCQkgc25hcHNob3QsIG5rZXlzLCAwKTsKIAlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNj YW4sIGtleSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3NjYW4tPnNjYW4gPSBOVUxMOwogCkBA IC03NDAsNyArNzEzLDcgQEAgc3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNj IHN5c3NjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCUhlYXBUdXBsZQlodHVwID0g TlVMTDsKIAogCUFzc2VydChzeXNzY2FuLT5pcmVsKTsKLQlpZiAoaW5kZXhfZ2V0bmV4dF9z bG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCWlmIChp bmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+ c2xvdCwgTlVMTCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHN5c3NjYW4t PnNsb3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRu ZXh0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCBlNDkzNTQ4YjY4 YS4uZjk2YWViYTFiMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAt MTA5LDEyICsxMDksMTQgQEAgZG8geyBcCiAKIHN0YXRpYyBJbmRleFNjYW5EZXNjIGluZGV4 X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJCQkJ CQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJ CQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCwK LQkJCQkJCQkJCQkJICBpbnQgcHJlZmV0Y2hfbWF4KTsKKwkJCQkJCQkJCQkJICBQYXJhbGxl bEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKIAotc3RhdGljIHZvaWQg aW5kZXhfcHJlZmV0Y2hfdGlkcyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKTsKLXN0YXRpYyBJdGVtUG9pbnRlciBpbmRleF9wcmVmZXRjaF9nZXRfdGlk KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgKmFs bF92aXNpYmxlKTsKLXN0YXRpYyB2b2lkIGluZGV4X3ByZWZldGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSXRlbVBvaW50ZXIgdGlkLCBib29sIHNraXBfYWxsX3Zpc2libGUsIGJvb2wgKmFs bF92aXNpYmxlKTsKK3N0YXRpYyB2b2lkIGluZGV4X3ByZWZldGNoX3RpZHMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJSW5kZXhQcmVm ZXRjaCAqcHJlZmV0Y2gpOworc3RhdGljIEl0ZW1Qb2ludGVyIGluZGV4X3ByZWZldGNoX2dl dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkgIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBib29sICphbGxfdmlzaWJsZSk7 CitzdGF0aWMgdm9pZCBpbmRleF9wcmVmZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 UHJlZmV0Y2ggKnByZWZldGNoLAorCQkJCQkJICAgSXRlbVBvaW50ZXIgdGlkLCBib29sIHNr aXBfYWxsX3Zpc2libGUsIGJvb2wgKmFsbF92aXNpYmxlKTsKIAogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkBAIC0yMjMsNDIgKzIyNSwxOCBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAogICogaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFu IGluZGV4IHdpdGggYW1nZXR0dXBsZQogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcg c3VpdGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KLSAqCi0gKiBwcmVm ZXRjaF9tYXggZGV0ZXJtaW5lcyBpZiBwcmVmZXRjaGluZyBpcyByZXF1ZXN0ZWQgZm9yIHRo aXMgaW5kZXggc2NhbiwKLSAqIGFuZCBob3cgZmFyIGFoZWFkIHdlIHdhbnQgdG8gcHJlZmV0 Y2gKLSAqCi0gKiBTZXR0aW5nIHByZWZldGNoX21heCB0byAwIGRpc2FibGVzIHByZWZldGNo aW5nIGZvciB0aGUgaW5kZXggc2Nhbi4gV2UgZG8KLSAqIHRoaXMgZm9yIHR3byByZWFzb25z IC0gZm9yIHNjYW5zIG9uIHN5c3RlbSBjYXRhbG9ncywgYW5kL29yIGZvciBjYXNlcyB3aGVy ZQotICogcHJlZmV0Y2hpbmcgaXMgZXhwZWN0ZWQgdG8gYmUgcG9pbnRsZXNzIChsaWtlIElP UykuCi0gKgotICogRm9yIHN5c3RlbSBjYXRhbG9ncywgd2UgdXN1YWxseSBlaXRoZXIgc2Nh biBieSBhIFBLIHZhbHVlLCBvciB3ZSB3ZSBleHBlY3QKLSAqIG9ubHkgZmV3IHJvd3MgKG9y IHJhdGhlciB3ZSBkb24ndCBrbm93IGhvdyBtYW55IHJvd3MgdG8gZXhwZWN0KS4gQWxzbywg d2UKLSAqIG5lZWQgdG8gcHJldmVudCBpbmZpbml0ZSBpbiB0aGUgZ2V0X3RhYmxlc3BhY2Vf aW9fY29uY3VycmVuY3koKSBjYWxsIC0gaXQKLSAqIGRvZXMgYW4gaW5kZXggc2NhbiBpbnRl cm5hbGx5LiBTbyB3ZSBzaW1wbHkgZGlzYWJsZSBwcmVmZXRjaGluZyBmb3Igc3lzdGVtCi0g KiBjYXRhbG9ncy4gV2UgY291bGQgZGVhbCB3aXRoIHRoaXMgYnkgcGlja2luZyBhIGNvbnNl cnZhdGl2ZSBzdGF0aWMgdGFyZ2V0Ci0gKiAoZS5nLiBlZmZlY3RpdmVfaW9fY29uY3VycmVu Y3ksIGNhcHBlZCB0byBzb21ldGhpbmcpLCBidXQgcGxhY2VzIHRoYXQgYXJlCi0gKiBwZXJm b3JtYW5jZSBzZW5zaXRpdmUgbGlrZWx5IHVzZSBzeXNjYWNoZSBhbnl3YXksIGFuZCBjYXRh bG9ncyB0ZW5kIHRvIGJlCi0gKiB2ZXJ5IHNtYWxsIGFuZCBob3QuIFNvIHdlIGRvbid0IGJv dGhlci4KLSAqCi0gKiBGb3IgSU9TLCB3ZSBleHBlY3QgdG8gbm90IG5lZWQgbW9zdCBoZWFw IHBhZ2VzICh0aGF0J3MgdGhlIHdob2xlIHBvaW50IG9mCi0gKiBJT1MsIGFjdHVhbGx5KSwg YW5kIHByZWZldGNoaW5nIHRoZW0gbWlnaHQgbGVhZCB0byBhIGxvdCBvZiB3YXN0ZWQgSS9P LgotICoKLSAqIFhYWCBOb3Qgc3VyZSB0aGUgaW5maW5pdGUgbG9vcCBjYW4gc3RpbGwgaGFw cGVuLCBub3cgdGhhdCB0aGUgdGFyZ2V0IGxvb2t1cAotICogbW92ZWQgdG8gY2FsbGVycyBv ZiBpbmRleF9iZWdpbnNjYW4uCiAgKi8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nh bihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK IAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMs Ci0JCQkJaW50IHByZWZldGNoX21heCkKKwkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiB7CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwogCiAJQXNzZXJ0KHNuYXBzaG90ICE9IEludmFs aWRTbmFwc2hvdCk7CiAKLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4 UmVsYXRpb24sIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAotCQkJCQkJCQkJTlVMTCwg ZmFsc2UsIHByZWZldGNoX21heCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bChpbmRleFJlbGF0aW9uLCBua2V5cywgbm9yZGVyYnlzLCBzbmFwc2hvdCwgTlVMTCwgZmFs c2UpOwogCiAJLyoKIAkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBz Y2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0CkBAIC0yODgsOCArMjY2LDcgQEAg aW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiAJQXNz ZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7CiAKLQkvKiBObyBwcmVmZXRjaCBp biBiaXRtYXAgc2NhbnMsIHByZWZldGNoIGlzIGRvbmUgYnkgdGhlIGhlYXAgc2Nhbi4gKi8K LQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlz LCAwLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UsIDApOworCXNjYW4gPSBpbmRleF9iZWdpbnNj YW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIDAsIHNuYXBzaG90LCBOVUxMLCBm YWxzZSk7CiAKIAkvKgogCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8gdGhl IHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKQEAgLTMwNiw4ICsyODMsNyBA QCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiBzdGF0 aWMgSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hv dCBzbmFwc2hvdCwKLQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wg dGVtcF9zbmFwLAotCQkJCQkJIGludCBwcmVmZXRjaF9tYXgpCisJCQkJCQkgUGFyYWxsZWxJ bmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCkKIHsKIAlJbmRleFNjYW5EZXNj IHNjYW47CiAKQEAgLTMzMCwzMSArMzA2LDYgQEAgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFs KFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJLyogSW5pdGlhbGl6ZSBpbmZvcm1hdGlvbiBm b3IgcGFyYWxsZWwgc2Nhbi4gKi8KIAlzY2FuLT5wYXJhbGxlbF9zY2FuID0gcHNjYW47CiAJ c2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwotCXNjYW4tPmluZGV4b25seSA9IGZh bHNlOwotCi0JLyoKLQkgKiBXaXRoIHByZWZldGNoaW5nIHJlcXVlc3RlZCwgaW5pdGlhbGl6 ZSB0aGUgcHJlZmV0Y2hlciBzdGF0ZS4KLQkgKgotCSAqIEZJWE1FIFRoaXMgc2hvdWxkIHJl YWxseSBiZSBpbiB0aGUgSW5kZXhTY2FuU3RhdGUsIG5vdCBJbmRleFNjYW5EZXNjCi0JICog KGNlcnRhaW5seSB0aGUgcXVldWVzIGV0YykuIEJ1dCBpbmRleF9nZXRuZXh0X3RpZCBvbmx5 IGdldHMgdGhlIHNjYW4KLQkgKiBkZXNjcmlwdG9yLCBzbyBob3cgZWxzZSB3b3VsZCB3ZSBw YXNzIGl0PyBTZWVtcyBsaWtlIGEgc2lnbiBvZiB3cm9uZwotCSAqIGxheWVyIGRvaW5nIHRo ZSBwcmVmZXRjaGluZy4KLQkgKi8KLQlpZiAoKHByZWZldGNoX21heCA+IDApICYmCi0JCShp b19kaXJlY3RfZmxhZ3MgJiBJT19ESVJFQ1RfREFUQSkgPT0gMCkJLyogbm8gcHJlZmV0Y2hp bmcgZm9yIGRpcmVjdCBJL08gKi8KLQl7Ci0JCUluZGV4UHJlZmV0Y2ggcHJlZmV0Y2hlciA9 IHBhbGxvYzAoc2l6ZW9mKEluZGV4UHJlZmV0Y2hEYXRhKSk7Ci0KLQkJcHJlZmV0Y2hlci0+ cXVldWVJbmRleCA9IDA7Ci0JCXByZWZldGNoZXItPnF1ZXVlU3RhcnQgPSAwOwotCQlwcmVm ZXRjaGVyLT5xdWV1ZUVuZCA9IDA7Ci0KLQkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hUYXJnZXQg PSAwOwotCQlwcmVmZXRjaGVyLT5wcmVmZXRjaE1heFRhcmdldCA9IHByZWZldGNoX21heDsK LQkJcHJlZmV0Y2hlci0+dm1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCi0JCXNjYW4tPnhz X3ByZWZldGNoID0gcHJlZmV0Y2hlcjsKLQl9CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTM5 MSwyMCArMzQyLDYgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAogCXNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBua2V5 cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7Ci0KLQkvKiBJZiB3ZSdyZSBw cmVmZXRjaGluZyBmb3IgdGhpcyBpbmRleCwgbWF5YmUgcmVzZXQgc29tZSBvZiB0aGUgc3Rh dGUuICovCi0JaWYgKHNjYW4tPnhzX3ByZWZldGNoICE9IE5VTEwpCi0JewotCQlJbmRleFBy ZWZldGNoIHByZWZldGNoZXIgPSBzY2FuLT54c19wcmVmZXRjaDsKLQotCQlwcmVmZXRjaGVy LT5xdWV1ZVN0YXJ0ID0gMDsKLQkJcHJlZmV0Y2hlci0+cXVldWVFbmQgPSAwOwotCQlwcmVm ZXRjaGVyLT5xdWV1ZUluZGV4ID0gMDsKLQkJcHJlZmV0Y2hlci0+cHJlZmV0Y2hEb25lID0g ZmFsc2U7Ci0KLQkJLyogcmVzdGFydCB0aGUgaW5jcmVtZW50YWwgcmFtcC11cCAqLwotCQlw cmVmZXRjaGVyLT5wcmVmZXRjaFRhcmdldCA9IDA7Ci0JfQogfQogCiAvKiAtLS0tLS0tLS0t LS0tLS0tCkBAIC00MzMsMjMgKzM3MCw2IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKQogCWlmIChzY2FuLT54c190ZW1wX3NuYXApCiAJCVVucmVnaXN0ZXJTbmFwc2hv dChzY2FuLT54c19zbmFwc2hvdCk7CiAKLQkvKgotCSAqIElmIHByZWZldGNoaW5nIHdhcyBl bmFibGVkIGZvciB0aGlzIHNjYW4sIGxvZyBwcmVmZXRjaCBzdGF0cy4KLQkgKgotCSAqIEZJ WE1FIFRoaXMgc2hvdWxkIHJlYWxseSBnbyB0byBFWFBMQUlOIEFOQUxZWkUgaW5zdGVhZC4K LQkgKi8KLQlpZiAoc2Nhbi0+eHNfcHJlZmV0Y2gpCi0JewotCQlJbmRleFByZWZldGNoIHBy ZWZldGNoID0gc2Nhbi0+eHNfcHJlZmV0Y2g7Ci0KLQkJZWxvZyhMT0csICJpbmRleCBwcmVm ZXRjaCBzdGF0czogcmVxdWVzdHMgIiBVSU5UNjRfRk9STUFUICIgcHJlZmV0Y2hlcyAiIFVJ TlQ2NF9GT1JNQVQgIiAoJWYpIHNraXAgY2FjaGVkICIgVUlOVDY0X0ZPUk1BVCAiIHNlcXVl bnRpYWwgIiBVSU5UNjRfRk9STUFULAotCQkJIHByZWZldGNoLT5jb3VudEFsbCwKLQkJCSBw cmVmZXRjaC0+Y291bnRQcmVmZXRjaCwKLQkJCSBwcmVmZXRjaC0+Y291bnRQcmVmZXRjaCAq IDEwMC4wIC8gcHJlZmV0Y2gtPmNvdW50QWxsLAotCQkJIHByZWZldGNoLT5jb3VudFNraXBD YWNoZWQsCi0JCQkgcHJlZmV0Y2gtPmNvdW50U2tpcFNlcXVlbnRpYWwpOwotCX0KLQogCS8q IFJlbGVhc2UgdGhlIHNjYW4gZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmICovCiAJSW5kZXhTY2Fu RW5kKHNjYW4pOwogfQpAQCAtNTk1LDggKzUxNSw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2Fu KEluZGV4U2NhbkRlc2Mgc2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5z Y2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLCBpbnQg bmtleXMsCi0JCQkJCQkgaW50IG5vcmRlcmJ5cywgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBz Y2FuLAotCQkJCQkJIGludCBwcmVmZXRjaF9tYXgpCisJCQkJCQkgaW50IG5vcmRlcmJ5cywg UGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKQogewogCVNuYXBzaG90CXNuYXBzaG90Owog CUluZGV4U2NhbkRlc2Mgc2NhbjsKQEAgLTYwNSw3ICs1MjQsNyBAQCBpbmRleF9iZWdpbnNj YW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsIGludCBu a2V5cywKIAlzbmFwc2hvdCA9IFJlc3RvcmVTbmFwc2hvdChwc2Nhbi0+cHNfc25hcHNob3Rf ZGF0YSk7CiAJUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2NhbiA9IGluZGV4X2Jl Z2luc2Nhbl9pbnRlcm5hbChpbmRleHJlbCwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3Qs Ci0JCQkJCQkJCQlwc2NhbiwgdHJ1ZSwgcHJlZmV0Y2hfbWF4KTsKKwkJCQkJCQkJCXBzY2Fu LCB0cnVlKTsKIAogCS8qCiAJICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0 aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldApAQCAtNzI3LDEyICs2NDYs MTMgQEAgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVT bG90ICpzbG90KQogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBib29sCi1pbmRleF9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCitpbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CisJCQkJICAgSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2gpCiB7CiAJZm9yICg7OykKIAl7CiAJ CS8qIERvIHByZWZldGNoaW5nIChpZiByZXF1ZXN0ZWQvZW5hYmxlZCkuICovCi0JCWluZGV4 X3ByZWZldGNoX3RpZHMoc2NhbiwgZGlyZWN0aW9uKTsKKwkJaW5kZXhfcHJlZmV0Y2hfdGlk cyhzY2FuLCBkaXJlY3Rpb24sIHByZWZldGNoKTsKIAogCQlpZiAoIXNjYW4tPnhzX2hlYXBf Y29udGludWUpCiAJCXsKQEAgLTc0MCw3ICs2NjAsNyBAQCBpbmRleF9nZXRuZXh0X3Nsb3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJs ZVNsb3QgKgogCQkJYm9vbAkJYWxsX3Zpc2libGU7CiAKIAkJCS8qIFRpbWUgdG8gZmV0Y2gg dGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9wcmVmZXRj aF9nZXRfdGlkKHNjYW4sIGRpcmVjdGlvbiwgJmFsbF92aXNpYmxlKTsKKwkJCXRpZCA9IGlu ZGV4X3ByZWZldGNoX2dldF90aWQoc2NhbiwgZGlyZWN0aW9uLCBwcmVmZXRjaCwgJmFsbF92 aXNpYmxlKTsKIAogCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3Jl IGRvbmUgKi8KIAkJCWlmICh0aWQgPT0gTlVMTCkKQEAgLTExMzUsNyArMTA1NSw3IEBAIGlu ZGV4X29wY2xhc3Nfb3B0aW9ucyhSZWxhdGlvbiBpbmRyZWwsIEF0dHJOdW1iZXIgYXR0bnVt LCBEYXR1bSBhdHRvcHRpb25zLAogICogZG9lcyBub3QgcmVxdWlyZSBhIHNlcXVlbnRpYWwg cGF0dGVybikuCiAgKi8KIHN0YXRpYyBib29sCi1pbmRleF9wcmVmZXRjaF9pc19zZXF1ZW50 aWFsKEluZGV4UHJlZmV0Y2ggcHJlZmV0Y2gsIEJsb2NrTnVtYmVyIGJsb2NrKQoraW5kZXhf cHJlZmV0Y2hfaXNfc2VxdWVudGlhbChJbmRleFByZWZldGNoICpwcmVmZXRjaCwgQmxvY2tO dW1iZXIgYmxvY2spCiB7CiAJaW50CQkJaWR4OwogCkBAIC0xMjcwLDkgKzExOTAsOSBAQCBp bmRleF9wcmVmZXRjaF9pc19zZXF1ZW50aWFsKEluZGV4UHJlZmV0Y2ggcHJlZmV0Y2gsIEJs b2NrTnVtYmVyIGJsb2NrKQogICogd2hhdCBpbmRleF9wcmVmZXRjaF9pc19zZXF1ZW50aWFs IGRvZXMuCiAgKi8KIHN0YXRpYyBib29sCi1pbmRleF9wcmVmZXRjaF9hZGRfY2FjaGUoSW5k ZXhQcmVmZXRjaCBwcmVmZXRjaCwgQmxvY2tOdW1iZXIgYmxvY2spCitpbmRleF9wcmVmZXRj aF9hZGRfY2FjaGUoSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2gsIEJsb2NrTnVtYmVyIGJsb2Nr KQogewotCVByZWZldGNoQ2FjaGVFbnRyeSAqZW50cnk7CisJSW5kZXhQcmVmZXRjaENhY2hl RW50cnkgKmVudHJ5OwogCiAJLyogbWFwIHRoZSBibG9jayBudW1iZXIgdGhlIHRoZSBMUlUg Ki8KIAlpbnQJCQlscnUgPSBoYXNoX3VpbnQzMihibG9jaykgJSBQUkVGRVRDSF9MUlVfQ09V TlQ7CkBAIC0xNDE5LDkgKzEzMzksOSBAQCBpbmRleF9wcmVmZXRjaF9hZGRfY2FjaGUoSW5k ZXhQcmVmZXRjaCBwcmVmZXRjaCwgQmxvY2tOdW1iZXIgYmxvY2spCiAgKiB2YWx1ZSBvbmNl IGluIGEgd2hpbGUsIGFuZCBzZWUgd2hhdCBoYXBwZW5zLgogICovCiBzdGF0aWMgdm9pZAot aW5kZXhfcHJlZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVtUG9pbnRlciB0aWQsIGJv b2wgc2tpcF9hbGxfdmlzaWJsZSwgYm9vbCAqYWxsX3Zpc2libGUpCitpbmRleF9wcmVmZXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLAorCQkJICAg SXRlbVBvaW50ZXIgdGlkLCBib29sIHNraXBfYWxsX3Zpc2libGUsIGJvb2wgKmFsbF92aXNp YmxlKQogewotCUluZGV4UHJlZmV0Y2ggcHJlZmV0Y2ggPSBzY2FuLT54c19wcmVmZXRjaDsK IAlCbG9ja051bWJlciBibG9jazsKIAogCS8qIGJ5IGRlZmF1bHQgbm90IGFsbCB2aXNpYmxl IChvciB3ZSBkaWRuJ3QgY2hlY2spICovCkBAIC0xNTAyLDMzICsxNDIyLDMzIEBAIGluZGV4 X3ByZWZldGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSXRlbVBvaW50ZXIgdGlkLCBib29sIHNr aXBfYWxsX3Zpc2libGUsIGJvb2wKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogSXRlbVBv aW50ZXIKLWluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24pCitpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCSAgSW5kZXhQcmVmZXRjaCAqcHJlZmV0 Y2gpCiB7CiAJYm9vbAkJYWxsX3Zpc2libGU7CS8qIGlnbm9yZWQgKi8KIAogCS8qIERvIHBy ZWZldGNoaW5nIChpZiByZXF1ZXN0ZWQvZW5hYmxlZCkuICovCi0JaW5kZXhfcHJlZmV0Y2hf dGlkcyhzY2FuLCBkaXJlY3Rpb24pOworCWluZGV4X3ByZWZldGNoX3RpZHMoc2NhbiwgZGly ZWN0aW9uLCBwcmVmZXRjaCk7CiAKIAkvKiBSZWFkIHRoZSBUSUQgZnJvbSB0aGUgcXVldWUg KG9yIGRpcmVjdGx5IGZyb20gdGhlIGluZGV4KS4gKi8KLQlyZXR1cm4gaW5kZXhfcHJlZmV0 Y2hfZ2V0X3RpZChzY2FuLCBkaXJlY3Rpb24sICZhbGxfdmlzaWJsZSk7CisJcmV0dXJuIGlu ZGV4X3ByZWZldGNoX2dldF90aWQoc2NhbiwgZGlyZWN0aW9uLCBwcmVmZXRjaCwgJmFsbF92 aXNpYmxlKTsKIH0KIAogSXRlbVBvaW50ZXIKLWluZGV4X2dldG5leHRfdGlkX3ZtKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgKmFsbF92aXNp YmxlKQoraW5kZXhfZ2V0bmV4dF90aWRfdm0oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJIEluZGV4UHJlZmV0Y2ggKnByZWZldGNoLCBib29s ICphbGxfdmlzaWJsZSkKIHsKIAkvKiBEbyBwcmVmZXRjaGluZyAoaWYgcmVxdWVzdGVkL2Vu YWJsZWQpLiAqLwotCWluZGV4X3ByZWZldGNoX3RpZHMoc2NhbiwgZGlyZWN0aW9uKTsKKwlp bmRleF9wcmVmZXRjaF90aWRzKHNjYW4sIGRpcmVjdGlvbiwgcHJlZmV0Y2gpOwogCiAJLyog UmVhZCB0aGUgVElEIGZyb20gdGhlIHF1ZXVlIChvciBkaXJlY3RseSBmcm9tIHRoZSBpbmRl eCkuICovCi0JcmV0dXJuIGluZGV4X3ByZWZldGNoX2dldF90aWQoc2NhbiwgZGlyZWN0aW9u LCBhbGxfdmlzaWJsZSk7CisJcmV0dXJuIGluZGV4X3ByZWZldGNoX2dldF90aWQoc2Nhbiwg ZGlyZWN0aW9uLCBwcmVmZXRjaCwgYWxsX3Zpc2libGUpOwogfQogCiBzdGF0aWMgdm9pZAot aW5kZXhfcHJlZmV0Y2hfdGlkcyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKQoraW5kZXhfcHJlZmV0Y2hfdGlkcyhJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQlJbmRleFByZWZldGNoICpwcmVmZXRjaCkK IHsKLQkvKiBmb3IgY29udmVuaWVuY2UgKi8KLQlJbmRleFByZWZldGNoIHByZWZldGNoID0g c2Nhbi0+eHNfcHJlZmV0Y2g7Ci0KIAkvKgogCSAqIElmIHRoZSBwcmVmZXRjaGluZyBpcyBz dGlsbCBhY3RpdmUgKGkuZS4gZW5hYmxlZCBhbmQgd2Ugc3RpbGwKIAkgKiBoYXZlbid0IGZp bmlzaGVkIHJlYWRpbmcgVElEcyBmcm9tIHRoZSBzY2FuKSwgcmVhZCBlbm91Z2ggVElEcyBp bnRvCkBAIC0xNTc3LDcgKzE0OTcsNyBAQCBpbmRleF9wcmVmZXRjaF90aWRzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJCQkgKiBYWFggaW5kZXhf Z2V0bmV4dF90aWRfcHJlZmV0Y2ggaXMgb25seSBjYWxsZWQgZm9yIElPUyAoZm9yIG5vdyks CiAJCQkgKiBzbyBza2lwIHByZWZldGNoaW5nIG9mIGFsbC12aXNpYmxlIHBhZ2VzLgogCQkJ ICovCi0JCQlpbmRleF9wcmVmZXRjaChzY2FuLCB0aWQsIHNjYW4tPmluZGV4b25seSwgJmFs bF92aXNpYmxlKTsKKwkJCWluZGV4X3ByZWZldGNoKHNjYW4sIHByZWZldGNoLCB0aWQsIHBy ZWZldGNoLT5pbmRleG9ubHksICZhbGxfdmlzaWJsZSk7CiAKIAkJCXByZWZldGNoLT5xdWV1 ZUl0ZW1zW1BSRUZFVENIX1FVRVVFX0lOREVYKHByZWZldGNoLT5xdWV1ZUVuZCldLnRpZCA9 ICp0aWQ7CiAJCQlwcmVmZXRjaC0+cXVldWVJdGVtc1tQUkVGRVRDSF9RVUVVRV9JTkRFWChw cmVmZXRjaC0+cXVldWVFbmQpXS5hbGxfdmlzaWJsZSA9IGFsbF92aXNpYmxlOwpAQCAtMTU4 NywxMSArMTUwNyw5IEBAIGluZGV4X3ByZWZldGNoX3RpZHMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIH0KIAogc3RhdGljIEl0ZW1Qb2ludGVyCi1p bmRleF9wcmVmZXRjaF9nZXRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sIGJvb2wgKmFsbF92aXNpYmxlKQoraW5kZXhfcHJlZmV0Y2hfZ2V0X3Rp ZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkg ICBJbmRleFByZWZldGNoICpwcmVmZXRjaCwgYm9vbCAqYWxsX3Zpc2libGUpCiB7Ci0JLyog Zm9yIGNvbnZlbmllbmNlICovCi0JSW5kZXhQcmVmZXRjaCBwcmVmZXRjaCA9IHNjYW4tPnhz X3ByZWZldGNoOwotCiAJLyoKIAkgKiBXaXRoIHByZWZldGNoaW5nIGVuYWJsZWQgKGV2ZW4g aWYgd2UgYWxyZWFkeSBmaW5pc2hlZCByZWFkaW5nCiAJICogYWxsIFRJRHMgZnJvbSB0aGUg aW5kZXggc2NhbiksIHdlIG5lZWQgdG8gcmV0dXJuIGEgVElEIGZyb20gdGhlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDE1ZmEzMjExNjY3Li4wYTEzNmRiNjcx MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTc3MCwxOCArNzcw LDE4IEBAIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBo ZWFwLCBSZWxhdGlvbiBpbmRleCwKIAkvKgogCSAqIE1heSBoYXZlIHRvIHJlc3RhcnQgc2Nh biBmcm9tIHRoaXMgcG9pbnQgaWYgYSBwb3RlbnRpYWwgY29uZmxpY3QgaXMKIAkgKiBmb3Vu ZC4KLQkgKgotCSAqIFhYWCBTaG91bGQgdGhpcyBkbyBpbmRleCBwcmVmZXRjaD8gUHJvYmFi bHkgbm90IHdvcnRoIGl0IGZvciB1bmlxdWUKLQkgKiBjb25zdHJhaW50cywgSSBndWVzcz8g T3RoZXJ3aXNlIHdlIHNob3VsZCBjYWxjdWxhdGUgcHJlZmV0Y2hfdGFyZ2V0Ci0JICoganVz dCBsaWtlIGluIG5vZGVJbmRleHNjYW4gZXRjLgogCSAqLwogcmV0cnk6CiAJY29uZmxpY3Qg PSBmYWxzZTsKIAlmb3VuZF9zZWxmID0gZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihoZWFwLCBpbmRleCwgJkRpcnR5U25hcHNob3QsIGluZG5rZXlhdHRzLCAwLCAw KTsKKwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCAmRGlydHlT bmFwc2hvdCwgaW5kbmtleWF0dHMsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBz Y2Fua2V5cywgaW5kbmtleWF0dHMsIE5VTEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dldG5l eHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xv dCkpCisJLyoKKwkgKiBYWFggV291bGQgYmUgbmljZSB0byBhbHNvIGJlbmVmaXQgZnJvbSBw cmVmZXRjaGluZyBoZXJlLiBBbGwgd2UgbmVlZCB0bworCSAqIGRvIGlzIGluc3RhbnRpYXRl IHRoZSBwcmVmZXRjaGVyLCBJIGd1ZXNzLgorCSAqLworCXdoaWxlIChpbmRleF9nZXRuZXh0 X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Nsb3Qs IE5VTEwpKQogCXsKIAkJVHJhbnNhY3Rpb25JZCB4d2FpdDsKIAkJWExUV19PcGVyCXJlYXNv bl93YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0 aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRleCA5 MTY3NmNjZmY5NS4uOTQ5OGIwMGZhNjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jCkBAIC0yMDQsMjEgKzIwNCwyMSBAQCBSZWxhdGlvbkZpbmRSZXBsVHVw bGVCeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkvKiBCdWlsZCBzY2FuIGtl eS4gKi8KIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShza2V5LCBy ZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKLQkvKiBTdGFydCBhbiBpbmRleCBzY2FuLgot CSAqCi0JICogWFhYIFNob3VsZCB0aGlzIGRvIGluZGV4IHByZWZldGNoaW5nPyBXZSdyZSBs b29raW5nIGZvciBhIHNpbmdsZSB0dXBsZSwKLQkgKiBwcm9iYWJseSB1c2luZyBhIFBLIC8g VU5JUVVFIGluZGV4LCBzbyBkb2VzIG5vdCBzZWVtIHdvcnRoIGl0LiBJZiB3ZQotCSAqIHJl Y29uc2lkZXIgdGhpcywgY2FsY2xhdGUgcHJlZmV0Y2hfdGFyZ2V0IGxpa2UgaW4gbm9kZUlu ZGV4c2Nhbi4KLQkgKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCAm c25hcCwgc2tleV9hdHRvZmYsIDAsIDApOworCS8qIFN0YXJ0IGFuIGluZGV4IHNjYW4uICov CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgJnNuYXAsIHNrZXlfYXR0 b2ZmLCAwKTsKIAogcmV0cnk6CiAJZm91bmQgPSBmYWxzZTsKIAogCWluZGV4X3Jlc2Nhbihz Y2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKLQkvKiBUcnkgdG8gZmluZCB0 aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwkvKgorCSAqIFRyeSB0byBmaW5kIHRoZSB0dXBs ZQorCSAqCisJICogWFhYIFdvdWxkIGJlIG5pY2UgdG8gYWxzbyBiZW5lZml0IGZyb20gcHJl ZmV0Y2hpbmcgaGVyZS4gQWxsIHdlIG5lZWQgdG8KKwkgKiBkbyBpcyBpbnN0YW50aWF0ZSB0 aGUgcHJlZmV0Y2hlciwgSSBndWVzcy4KKwkgKi8KKwl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9z bG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90LCBOVUxMKSkKIAl7CiAJ CS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXgg aXMgcHJpbWFyeSBrZXkgb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5 c2Nhbi5jCmluZGV4IGI2NjYwYzEwYTYzLi5hN2VhZGFmM2RiMiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC02NSw4ICs2NSw4IEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCUluZGV4U2NhbkRlc2Mgc2Nh bmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiAJSXRlbVBvaW50ZXIgdGlkOwotCVJl bGF0aW9uCWhlYXBSZWwgPSBub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb247Ci0JYm9vbAkJ YWxsX3Zpc2libGU7CisJSW5kZXhQcmVmZXRjaCAgKnByZWZldGNoOworCWJvb2wJCQlhbGxf dmlzaWJsZTsKIAogCS8qCiAJICogZXh0cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJv bSBpbmRleCBzY2FuIG5vZGUKQEAgLTgwLDUyICs4MCwyMiBAQCBJbmRleE9ubHlOZXh0KElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlkaXJlY3Rpb24gPSBTY2FuRGlyZWN0aW9uQ29t YmluZShlc3RhdGUtPmVzX2RpcmVjdGlvbiwKIAkJCQkJCQkJCSAoKEluZGV4T25seVNjYW4g Kikgbm9kZS0+c3MucHMucGxhbiktPmluZGV4b3JkZXJkaXIpOwogCXNjYW5kZXNjID0gbm9k ZS0+aW9zc19TY2FuRGVzYzsKKwlwcmVmZXRjaCA9IG5vZGUtPmlvc3NfcHJlZmV0Y2g7CiAJ ZWNvbnRleHQgPSBub2RlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKIAlzbG90ID0gbm9kZS0+ c3Muc3NfU2NhblR1cGxlU2xvdDsKIAogCWlmIChzY2FuZGVzYyA9PSBOVUxMKQogCXsKLQkJ aW50CQkJcHJlZmV0Y2hfbWF4OwotCi0JCS8qCi0JCSAqIERldGVybWluZSBudW1iZXIgb2Yg aGVhcCBwYWdlcyB0byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleC4gVGhpcyBpcwotCQkgKiBl c3NlbnRpYWxseSBqdXN0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgdGhlIHRhYmxl IChvciB0aGUKLQkJICogdGFibGVzcGFjZSBpdCdzIGluKS4KLQkJICoKLQkJICogWFhYIFNo b3VsZCB0aGlzIGFsc28gbG9vayBhdCBwbGFuLnBsYW5fcm93cyBhbmQgbWF5YmUgY2FwIHRo ZSB0YXJnZXQKLQkJICogdG8gdGhhdD8gUG9pbnRsZXNzIHRvIHByZWZldGNoIG1vcmUgdGhh biB3ZSBleHBlY3QgdG8gdXNlLiBPciBtYXliZQotCQkgKiBqdXN0IHJlc2V0IHRvIHRoYXQg dmFsdWUgZHVyaW5nIHByZWZldGNoaW5nLCBhZnRlciByZWFkaW5nIHRoZSBuZXh0Ci0JCSAq IGluZGV4IHBhZ2UgKG9yIHJhdGhlciBhZnRlciByZXNjYW4pPwotCQkgKgotCQkgKiBYWFgg TWF5YmUgcmVkdWNlIHRoZSB2YWx1ZSB3aXRoIHBhcmFsbGVsIHdvcmtlcnM/Ci0JCSAqLwot CQlwcmVmZXRjaF9tYXggPSBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVh cFJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKSwKLQkJCQkJCSAgIG5vZGUtPnNzLnBzLnBs YW4tPnBsYW5fcm93cyk7Ci0KIAkJLyoKIAkJICogV2UgcmVhY2ggaGVyZSBpZiB0aGUgaW5k ZXggb25seSBzY2FuIGlzIG5vdCBwYXJhbGxlbCwgb3IgaWYgd2UncmUKIAkJICogc2VyaWFs bHkgZXhlY3V0aW5nIGFuIGluZGV4IG9ubHkgc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJl CiAJCSAqIHBhcmFsbGVsLgotCQkgKgotCQkgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIGVuYWJs ZSBwcmVmZXRjaGluZywgYnV0IHByZWZldGNoIG9ubHkgcGFnZXMgdGhhdAotCQkgKiBhcmUg bm90IGFsbC12aXNpYmxlIChidXQgY2hlY2tpbmcgdGhhdCBmcm9tIHRoZSBpbmRleCBjb2Rl IHNlZW1zIGxpa2UKLQkJICogYSB2aW9sYXRpb24gb2YgbGF5ZXJpbmcgZXRjKS4KLQkJICoK LQkJICogWFhYIFRoaXMgbWlnaHQgbGVhZCB0byBJT1MgYmVpbmcgc2xvd2VyIHRoYW4gcGxh aW4gaW5kZXggc2NhbiwgaWYgdGhlCi0JCSAqIHRhYmxlIGhhcyBhIGxvdCBvZiBwYWdlcyB0 aGF0IG5lZWQgcmVjaGVjay4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2Fu KG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19S ZWxhdGlvbkRlc2MsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJ CSAgIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCi0JCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVt T3JkZXJCeUtleXMsCi0JCQkJCQkJCSAgIHByZWZldGNoX21heCk7Ci0KLQkJLyoKLQkJICog UmVtZW1iZXIgdGhpcyBpcyBpbmRleC1vbmx5IHNjYW4sIGJlY2F1c2Ugb2YgcHJlZmV0Y2hp bmcuIE5vdCB0aGUgbW9zdAotCQkgKiBlbGVnYW50IHdheSB0byBwYXNzIHRoaXMgaW5mby4K LQkJICovCi0JCXNjYW5kZXNjLT5pbmRleG9ubHkgPSB0cnVlOworCQkJCQkJCQkgICBub2Rl LT5pb3NzX051bU9yZGVyQnlLZXlzKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2Nh bmRlc2M7CiAKQEAgLTE0OSw3ICsxMTksNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2Ug bmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRl eF9nZXRuZXh0X3RpZF92bShzY2FuZGVzYywgZGlyZWN0aW9uLCAmYWxsX3Zpc2libGUpKSAh PSBOVUxMKQorCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWRfdm0oc2NhbmRlc2Ms IGRpcmVjdGlvbiwgcHJlZmV0Y2gsICZhbGxfdmlzaWJsZSkpICE9IE5VTEwpCiAJewogCQli b29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKIApAQCAtMzg5LDYgKzM1OSwxNiBAQCBF eGVjUmVTY2FuSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQkJ CSBub2RlLT5pb3NzX1NjYW5LZXlzLCBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkg bm9kZS0+aW9zc19PcmRlckJ5S2V5cywgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CiAK KwkvKiBhbHNvIHJlc2V0IHRoZSBwcmVmZXRjaGVyLCBzbyB0aGF0IHdlIHN0YXJ0IGZyb20g c2NyYXRjaCAqLworCWlmIChub2RlLT5pb3NzX3ByZWZldGNoKQorCXsKKwkJSW5kZXhQcmVm ZXRjaCAqcHJlZmV0Y2ggPSBub2RlLT5pb3NzX3ByZWZldGNoOworCisJCXByZWZldGNoLT5x dWV1ZUluZGV4ID0gMDsKKwkJcHJlZmV0Y2gtPnF1ZXVlU3RhcnQgPSAwOworCQlwcmVmZXRj aC0+cXVldWVFbmQgPSAwOworCX0KKwogCUV4ZWNTY2FuUmVTY2FuKCZub2RlLT5zcyk7CiB9 CiAKQEAgLTQxNywxNCArMzk3LDIyIEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25s eVNjYW5TdGF0ZSAqbm9kZSkKIAl9CiAKIAkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4gZnJv bSBwcmVmZXRjaGVyLCBpZiBhbnkuICovCi0JaWYgKGluZGV4U2NhbkRlc2MgJiYgaW5kZXhT Y2FuRGVzYy0+eHNfcHJlZmV0Y2gpCisJaWYgKG5vZGUtPmlvc3NfcHJlZmV0Y2gpCiAJewot CQlJbmRleFByZWZldGNoIGluZGV4UHJlZmV0Y2ggPSBpbmRleFNjYW5EZXNjLT54c19wcmVm ZXRjaDsKKwkJSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2ggPSBub2RlLT5pb3NzX3ByZWZldGNo OworCisJCS8qIFhYWCBzb21lIGRlYnVnIGluZm8gKi8KKwkJZWxvZyhMT0csICJpbmRleCBw cmVmZXRjaCBzdGF0czogcmVxdWVzdHMgIiBVSU5UNjRfRk9STUFUICIgcHJlZmV0Y2hlcyAi IFVJTlQ2NF9GT1JNQVQgIiAoJWYpIHNraXAgY2FjaGVkICIgVUlOVDY0X0ZPUk1BVCAiIHNl cXVlbnRpYWwgIiBVSU5UNjRfRk9STUFULAorCQkJIHByZWZldGNoLT5jb3VudEFsbCwKKwkJ CSBwcmVmZXRjaC0+Y291bnRQcmVmZXRjaCwKKwkJCSBwcmVmZXRjaC0+Y291bnRQcmVmZXRj aCAqIDEwMC4wIC8gcHJlZmV0Y2gtPmNvdW50QWxsLAorCQkJIHByZWZldGNoLT5jb3VudFNr aXBDYWNoZWQsCisJCQkgcHJlZmV0Y2gtPmNvdW50U2tpcFNlcXVlbnRpYWwpOwogCi0JCWlm IChpbmRleFByZWZldGNoLT52bUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQorCQlpZiAocHJl ZmV0Y2gtPnZtQnVmZmVyICE9IEludmFsaWRCdWZmZXIpCiAJCXsKLQkJCVJlbGVhc2VCdWZm ZXIoaW5kZXhQcmVmZXRjaC0+dm1CdWZmZXIpOwotCQkJaW5kZXhQcmVmZXRjaC0+dm1CdWZm ZXIgPSBJbnZhbGlkQnVmZmVyOworCQkJUmVsZWFzZUJ1ZmZlcihwcmVmZXRjaC0+dm1CdWZm ZXIpOworCQkJcHJlZmV0Y2gtPnZtQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAkJfQogCX0K IApAQCAtNjUyLDYgKzY0MCw2MyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5 U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCWluZGV4c3RhdGUt Pmlvc3NfUnVudGltZUNvbnRleHQgPSBOVUxMOwogCX0KIAorCS8qCisJICogQWxzbyBpbml0 aWFsaXplIGluZGV4IHByZWZldGNoZXIuCisJICoKKwkgKiBYWFggTm8gcHJlZmV0Y2hpbmcg Zm9yIGRpcmVjdCBJL08uCisJICovCisJaWYgKChpb19kaXJlY3RfZmxhZ3MgJiBJT19ESVJF Q1RfREFUQSkgPT0gMCkKKwl7CisJCWludAkJCXByZWZldGNoX21heDsKKwkJUmVsYXRpb24g ICAgaGVhcFJlbCA9IGluZGV4c3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbjsKKworCQkv KgorCQkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhlYXAgcGFnZXMgdG8gcHJlZmV0Y2ggZm9y IHRoaXMgaW5kZXguIFRoaXMgaXMKKwkJICogZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVf aW9fY29uY3VycmVuY3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCisJCSAqIHRhYmxlc3BhY2Ug aXQncyBpbikuCisJCSAqCisJCSAqIFhYWCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxh bi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0CisJCSAqIHRvIHRoYXQ/IFBv aW50bGVzcyB0byBwcmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0IHRvIHVzZS4gT3IgbWF5 YmUKKwkJICoganVzdCByZXNldCB0byB0aGF0IHZhbHVlIGR1cmluZyBwcmVmZXRjaGluZywg YWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAorCQkgKiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0 ZXIgcmVzY2FuKT8KKwkJICoKKwkJICogWFhYIE1heWJlIHJlZHVjZSB0aGUgdmFsdWUgd2l0 aCBwYXJhbGxlbCB3b3JrZXJzPworCQkgKi8KKwkJcHJlZmV0Y2hfbWF4ID0gTWluKGdldF90 YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBSZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFj ZSksCisJCQkJCQkgICBpbmRleHN0YXRlLT5zcy5wcy5wbGFuLT5wbGFuX3Jvd3MpOworCisJ CS8qCisJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIGluZGV4IG9ubHkgc2NhbiBpcyBub3Qg cGFyYWxsZWwsIG9yIGlmIHdlJ3JlCisJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRl eCBvbmx5IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZQorCQkgKiBwYXJhbGxlbC4KKwkJ ICoKKwkJICogWFhYIE1heWJlIHdlIHNob3VsZCBlbmFibGUgcHJlZmV0Y2hpbmcsIGJ1dCBw cmVmZXRjaCBvbmx5IHBhZ2VzIHRoYXQKKwkJICogYXJlIG5vdCBhbGwtdmlzaWJsZSAoYnV0 IGNoZWNraW5nIHRoYXQgZnJvbSB0aGUgaW5kZXggY29kZSBzZWVtcyBsaWtlCisJCSAqIGEg dmlvbGF0aW9uIG9mIGxheWVyaW5nIGV0YykuCisJCSAqCisJCSAqIFhYWCBUaGlzIG1pZ2h0 IGxlYWQgdG8gSU9TIGJlaW5nIHNsb3dlciB0aGFuIHBsYWluIGluZGV4IHNjYW4sIGlmIHRo ZQorCQkgKiB0YWJsZSBoYXMgYSBsb3Qgb2YgcGFnZXMgdGhhdCBuZWVkIHJlY2hlY2suCisJ CSAqCisJCSAqIFJlbWVtYmVyIHRoaXMgaXMgaW5kZXgtb25seSBzY2FuLCBiZWNhdXNlIG9m IHByZWZldGNoaW5nLiBOb3QgdGhlIG1vc3QKKwkJICogZWxlZ2FudCB3YXkgdG8gcGFzcyB0 aGlzIGluZm8uCisJCSAqLworCQlpZiAocHJlZmV0Y2hfbWF4ID4gMCkKKwkJeworCQkJSW5k ZXhQcmVmZXRjaCAqcHJlZmV0Y2ggPSBwYWxsb2MwKHNpemVvZihJbmRleFByZWZldGNoKSk7 CisKKwkJCXByZWZldGNoLT5xdWV1ZUluZGV4ID0gMDsKKwkJCXByZWZldGNoLT5xdWV1ZVN0 YXJ0ID0gMDsKKwkJCXByZWZldGNoLT5xdWV1ZUVuZCA9IDA7CisKKwkJCXByZWZldGNoLT5w cmVmZXRjaFRhcmdldCA9IDA7CisJCQlwcmVmZXRjaC0+cHJlZmV0Y2hNYXhUYXJnZXQgPSBw cmVmZXRjaF9tYXg7CisJCQlwcmVmZXRjaC0+dm1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwor CQkJcHJlZmV0Y2gtPmluZGV4b25seSA9IHRydWU7CisKKwkJCWluZGV4c3RhdGUtPmlvc3Nf cHJlZmV0Y2ggPSBwcmVmZXRjaDsKKwkJfQorCX0KKwogCS8qCiAJICogYWxsIGRvbmUuCiAJ ICovCkBAIC02OTQsMjQgKzczOSw2IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURT TShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiB7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBu b2RlLT5zcy5wcy5zdGF0ZTsKIAlQYXJhbGxlbEluZGV4U2NhbkRlc2MgcGlzY2FuOwotCVJl bGF0aW9uCWhlYXBSZWwgPSBub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb247Ci0JaW50CQkJ cHJlZmV0Y2hfbWF4OwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhlYXAgcGFn ZXMgdG8gcHJlZmV0Y2ggZm9yIHRoaXMgaW5kZXguIFRoaXMgaXMKLQkgKiBlc3NlbnRpYWxs eSBqdXN0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgdGhlIHRhYmxlIChvciB0aGUK LQkgKiB0YWJsZXNwYWNlIGl0J3MgaW4pLgotCSAqCi0JICogWFhYIFNob3VsZCB0aGlzIGFs c28gbG9vayBhdCBwbGFuLnBsYW5fcm93cyBhbmQgbWF5YmUgY2FwIHRoZSB0YXJnZXQKLQkg KiB0byB0aGF0PyBQb2ludGxlc3MgdG8gcHJlZmV0Y2ggbW9yZSB0aGFuIHdlIGV4cGVjdCB0 byB1c2UuIE9yIG1heWJlCi0JICoganVzdCByZXNldCB0byB0aGF0IHZhbHVlIGR1cmluZyBw cmVmZXRjaGluZywgYWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAotCSAqIGluZGV4IHBhZ2UgKG9y IHJhdGhlciBhZnRlciByZXNjYW4pPwotCSAqCi0JICogWFhYIE1heWJlIHJlZHVjZSB0aGUg dmFsdWUgd2l0aCBwYXJhbGxlbCB3b3JrZXJzPwotCSAqLwotCi0JcHJlZmV0Y2hfbWF4ID0g TWluKGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBSZWwtPnJkX3JlbC0+cmVs dGFibGVzcGFjZSksCi0JCQkJCSAgIG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fcm93cyk7CiAK IAlwaXNjYW4gPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgbm9kZS0+aW9zc19Qc2Nh bkxlbik7CiAJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUobm9kZS0+c3Muc3NfY3Vy cmVudFJlbGF0aW9uLApAQCAtNzI0LDggKzc1MSw3IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5p dGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBub2RlLT5p b3NzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAotCQkJCQkJCQkgcGlzY2FuLAot CQkJCQkJCQkgcHJlZmV0Y2hfbWF4KTsKKwkJCQkJCQkJIHBpc2Nhbik7CiAJbm9kZS0+aW9z c19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKIAlub2RlLT5pb3NzX1ZNQnVmZmVy ID0gSW52YWxpZEJ1ZmZlcjsKIApAQCAtNzYzLDIzICs3ODksNiBAQCBFeGVjSW5kZXhPbmx5 U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCQkJCQkJ CQkgIFBhcmFsbGVsV29ya2VyQ29udGV4dCAqcHdjeHQpCiB7CiAJUGFyYWxsZWxJbmRleFNj YW5EZXNjIHBpc2NhbjsKLQlSZWxhdGlvbgloZWFwUmVsID0gbm9kZS0+c3Muc3NfY3VycmVu dFJlbGF0aW9uOwotCWludAkJCXByZWZldGNoX21heDsKLQotCS8qCi0JICogRGV0ZXJtaW5l IG51bWJlciBvZiBoZWFwIHBhZ2VzIHRvIHByZWZldGNoIGZvciB0aGlzIGluZGV4LiBUaGlz IGlzCi0JICogZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgZm9y IHRoZSB0YWJsZSAob3IgdGhlCi0JICogdGFibGVzcGFjZSBpdCdzIGluKS4KLQkgKgotCSAq IFhYWCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJl IGNhcCB0aGUgdGFyZ2V0Ci0JICogdG8gdGhhdD8gUG9pbnRsZXNzIHRvIHByZWZldGNoIG1v cmUgdGhhbiB3ZSBleHBlY3QgdG8gdXNlLiBPciBtYXliZQotCSAqIGp1c3QgcmVzZXQgdG8g dGhhdCB2YWx1ZSBkdXJpbmcgcHJlZmV0Y2hpbmcsIGFmdGVyIHJlYWRpbmcgdGhlIG5leHQK LQkgKiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0ZXIgcmVzY2FuKT8KLQkgKgotCSAqIFhY WCBNYXliZSByZWR1Y2UgdGhlIHZhbHVlIHdpdGggcGFyYWxsZWwgd29ya2Vycz8KLQkgKi8K LQlwcmVmZXRjaF9tYXggPSBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVh cFJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKSwKLQkJCQkJICAgbm9kZS0+c3MucHMucGxh bi0+cGxhbl9yb3dzKTsKIAogCXBpc2NhbiA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2Ms IG5vZGUtPnNzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOwogCW5vZGUtPmlvc3Nf U2NhbkRlc2MgPQpAQCAtNzg3LDggKzc5Niw3IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlh bGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBub2RlLT5p b3NzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAotCQkJCQkJCQkgcGlzY2FuLAot CQkJCQkJCQkgcHJlZmV0Y2hfbWF4KTsKKwkJCQkJCQkJIHBpc2Nhbik7CiAJbm9kZS0+aW9z c19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKIAogCS8qCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggYTVmNTM5NGVmNDkuLmIzMjgyZWM1YTc1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC04Niw3ICs4Niw3IEBA IEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVTbG90ICpzbG90 OwotCVJlbGF0aW9uIGhlYXBSZWwgPSBub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb247CisJ SW5kZXhQcmVmZXRjaCAgKnByZWZldGNoOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2Fy eSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtMTAwLDI2ICsxMDAsMTIg QEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCWRpcmVjdGlvbiA9IFNjYW5E aXJlY3Rpb25Db21iaW5lKGVzdGF0ZS0+ZXNfZGlyZWN0aW9uLAogCQkJCQkJCQkJICgoSW5k ZXhTY2FuICopIG5vZGUtPnNzLnBzLnBsYW4pLT5pbmRleG9yZGVyZGlyKTsKIAlzY2FuZGVz YyA9IG5vZGUtPmlzc19TY2FuRGVzYzsKKwlwcmVmZXRjaCA9IG5vZGUtPmlzc19wcmVmZXRj aDsKIAllY29udGV4dCA9IG5vZGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OwogCXNsb3QgPSBu b2RlLT5zcy5zc19TY2FuVHVwbGVTbG90OwogCiAJaWYgKHNjYW5kZXNjID09IE5VTEwpCiAJ ewotCQlpbnQJcHJlZmV0Y2hfbWF4OwotCi0JCS8qCi0JCSAqIERldGVybWluZSBudW1iZXIg b2YgaGVhcCBwYWdlcyB0byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleCBzY2FuLiBUaGlzCi0J CSAqIGlzIGVzc2VudGlhbGx5IGp1c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IGZvciB0 aGUgdGFibGUgKG9yIHRoZQotCQkgKiB0YWJsZXNwYWNlIGl0J3MgaW4pLgotCQkgKgotCQkg KiBYWFggU2hvdWxkIHRoaXMgYWxzbyBsb29rIGF0IHBsYW4ucGxhbl9yb3dzIGFuZCBtYXli ZSBjYXAgdGhlIHRhcmdldAotCQkgKiB0byB0aGF0PyBQb2ludGxlc3MgdG8gcHJlZmV0Y2gg bW9yZSB0aGFuIHdlIGV4cGVjdCB0byB1c2UuIE9yIG1heWJlCi0JCSAqIGp1c3QgcmVzZXQg dG8gdGhhdCB2YWx1ZSBkdXJpbmcgcHJlZmV0Y2hpbmcsIGFmdGVyIHJlYWRpbmcgdGhlIG5l eHQKLQkJICogaW5kZXggcGFnZSAob3IgcmF0aGVyIGFmdGVyIHJlc2Nhbik/Ci0JCSAqLwot CQlwcmVmZXRjaF9tYXggPSBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVh cFJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKSwKLQkJCQkJCSAgIG5vZGUtPnNzLnBzLnBs YW4tPnBsYW5fcm93cyk7Ci0KIAkJLyoKIAkJICogV2UgcmVhY2ggaGVyZSBpZiB0aGUgaW5k ZXggc2NhbiBpcyBub3QgcGFyYWxsZWwsIG9yIGlmIHdlJ3JlCiAJCSAqIHNlcmlhbGx5IGV4 ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwu CkBAIC0xMjgsOCArMTE0LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQog CQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgICBlc3RhdGUt PmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCi0JCQkJ CQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJICAgcHJlZmV0Y2hf bWF4KTsKKwkJCQkJCQkJICAgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzKTsKIAogCQlub2Rl LT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIApAQCAtMTQ2LDcgKzEzMSw3IEBAIEluZGV4 TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBo YXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUg KGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKKwl3aGls ZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QsIHByZWZl dGNoKSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTE5NSw3ICsxODAs NyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlEYXR1 bQkgICAqbGFzdGZldGNoZWRfdmFsczsKIAlib29sCSAgICpsYXN0ZmV0Y2hlZF9udWxsczsK IAlpbnQJCQljbXA7Ci0JUmVsYXRpb24JaGVhcFJlbCA9IG5vZGUtPnNzLnNzX2N1cnJlbnRS ZWxhdGlvbjsKKwlJbmRleFByZWZldGNoICpwcmVmZXRjaDsKIAogCWVzdGF0ZSA9IG5vZGUt PnNzLnBzLnN0YXRlOwogCkBAIC0yMTIsMjYgKzE5NywxMiBAQCBJbmRleE5leHRXaXRoUmVv cmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChlc3RhdGUtPmVzX2RpcmVjdGlvbikpOwogCiAJc2NhbmRlc2MgPSBub2RlLT5pc3Nf U2NhbkRlc2M7CisJcHJlZmV0Y2ggPSBub2RlLT5pc3NfcHJlZmV0Y2g7CiAJZWNvbnRleHQg PSBub2RlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKIAlzbG90ID0gbm9kZS0+c3Muc3NfU2Nh blR1cGxlU2xvdDsKIAogCWlmIChzY2FuZGVzYyA9PSBOVUxMKQogCXsKLQkJaW50CXByZWZl dGNoX21heDsKLQotCQkvKgotCQkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhlYXAgcGFnZXMg dG8gcHJlZmV0Y2ggZm9yIHRoaXMgaW5kZXguIFRoaXMgaXMKLQkJICogZXNzZW50aWFsbHkg anVzdCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgZm9yIHRoZSB0YWJsZSAob3IgdGhlCi0J CSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCi0JCSAqCi0JCSAqIFhYWCBTaG91bGQgdGhpcyBh bHNvIGxvb2sgYXQgcGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNhcCB0aGUgdGFyZ2V0Ci0J CSAqIHRvIHRoYXQ/IFBvaW50bGVzcyB0byBwcmVmZXRjaCBtb3JlIHRoYW4gd2UgZXhwZWN0 IHRvIHVzZS4gT3IgbWF5YmUKLQkJICoganVzdCByZXNldCB0byB0aGF0IHZhbHVlIGR1cmlu ZyBwcmVmZXRjaGluZywgYWZ0ZXIgcmVhZGluZyB0aGUgbmV4dAotCQkgKiBpbmRleCBwYWdl IChvciByYXRoZXIgYWZ0ZXIgcmVzY2FuKT8KLQkJICovCi0JCXByZWZldGNoX21heCA9IE1p bihnZXRfdGFibGVzcGFjZV9pb19jb25jdXJyZW5jeShoZWFwUmVsLT5yZF9yZWwtPnJlbHRh Ymxlc3BhY2UpLAotCQkJCQkJICAgbm9kZS0+c3MucHMucGxhbi0+cGxhbl9yb3dzKTsKLQog CQkvKgogCQkgKiBXZSByZWFjaCBoZXJlIGlmIHRoZSBpbmRleCBzY2FuIGlzIG5vdCBwYXJh bGxlbCwgb3IgaWYgd2UncmUKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNj YW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KQEAgLTI0MCw4ICsyMTEsNyBA QCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJCQkJCQkJ ICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFw c2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLAotCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCi0JCQkJCQkJCSAgIHByZWZldGNoX21heCk7CisJ CQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cyk7CiAKIAkJbm9kZS0+aXNzX1Nj YW5EZXNjID0gc2NhbmRlc2M7CiAKQEAgLTI5NCw3ICsyNjQsNyBAQCBJbmRleE5leHRXaXRo UmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogRmV0Y2ggbmV4dCB0dXBsZSBm cm9tIHRoZSBpbmRleC4KIAkJICovCiBuZXh0X2luZGV4dHVwbGU6Ci0JCWlmICghaW5kZXhf Z2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJ CWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwgc2xvdCwgcHJlZmV0Y2gpKQogCQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMg ZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAgLTYy Myw2ICs1OTMsMTYgQEAgRXhlY1JlU2NhbkluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAkJCQkJIG5vZGUtPmlzc19PcmRlckJ5S2V5cywgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzKTsKIAlub2RlLT5pc3NfUmVhY2hlZEVuZCA9IGZhbHNlOwogCisJLyogYWxzbyByZXNl dCB0aGUgcHJlZmV0Y2hlciwgc28gdGhhdCB3ZSBzdGFydCBmcm9tIHNjcmF0Y2ggKi8KKwlp ZiAobm9kZS0+aXNzX3ByZWZldGNoKQorCXsKKwkJSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2gg PSBub2RlLT5pc3NfcHJlZmV0Y2g7CisKKwkJcHJlZmV0Y2gtPnF1ZXVlSW5kZXggPSAwOwor CQlwcmVmZXRjaC0+cXVldWVTdGFydCA9IDA7CisJCXByZWZldGNoLT5xdWV1ZUVuZCA9IDA7 CisJfQorCiAJRXhlY1NjYW5SZVNjYW4oJm5vZGUtPnNzKTsKIH0KIApAQCAtODI5LDYgKzgw OSwxOSBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRlICpub2RlKQogCWluZGV4 UmVsYXRpb25EZXNjID0gbm9kZS0+aXNzX1JlbGF0aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNj ID0gbm9kZS0+aXNzX1NjYW5EZXNjOwogCisJLyogWFhYIG5vdGhpbmcgdG8gZnJlZSwgYnV0 IHByaW50IHNvbWUgZGVidWcgaW5mbyAqLworCWlmIChub2RlLT5pc3NfcHJlZmV0Y2gpCisJ eworCQlJbmRleFByZWZldGNoICpwcmVmZXRjaCA9IG5vZGUtPmlzc19wcmVmZXRjaDsKKwor CQllbG9nKExPRywgImluZGV4IHByZWZldGNoIHN0YXRzOiByZXF1ZXN0cyAiIFVJTlQ2NF9G T1JNQVQgIiBwcmVmZXRjaGVzICIgVUlOVDY0X0ZPUk1BVCAiICglZikgc2tpcCBjYWNoZWQg IiBVSU5UNjRfRk9STUFUICIgc2VxdWVudGlhbCAiIFVJTlQ2NF9GT1JNQVQsCisJCQkgcHJl ZmV0Y2gtPmNvdW50QWxsLAorCQkJIHByZWZldGNoLT5jb3VudFByZWZldGNoLAorCQkJIHBy ZWZldGNoLT5jb3VudFByZWZldGNoICogMTAwLjAgLyBwcmVmZXRjaC0+Y291bnRBbGwsCisJ CQkgcHJlZmV0Y2gtPmNvdW50U2tpcENhY2hlZCwKKwkJCSBwcmVmZXRjaC0+Y291bnRTa2lw U2VxdWVudGlhbCk7CisJfQorCiAJLyoKIAkgKiBjbG9zZSB0aGUgaW5kZXggcmVsYXRpb24g KG5vLW9wIGlmIHdlIGRpZG4ndCBvcGVuIGl0KQogCSAqLwpAQCAtMTEwMSw2ICsxMDk0LDQ1 IEBAIEV4ZWNJbml0SW5kZXhTY2FuKEluZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJCWluZGV4c3RhdGUtPmlzc19SdW50aW1lQ29udGV4dCA9IE5VTEw7 CiAJfQogCisJLyoKKwkgKiBBbHNvIGluaXRpYWxpemUgaW5kZXggcHJlZmV0Y2hlci4KKwkg KgorCSAqIFhYWCBObyBwcmVmZXRjaGluZyBmb3IgZGlyZWN0IEkvTy4KKwkgKi8KKwlpZiAo KGlvX2RpcmVjdF9mbGFncyAmIElPX0RJUkVDVF9EQVRBKSA9PSAwKQorCXsKKwkJaW50CXBy ZWZldGNoX21heDsKKwkJUmVsYXRpb24gICAgaGVhcFJlbCA9IGluZGV4c3RhdGUtPnNzLnNz X2N1cnJlbnRSZWxhdGlvbjsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGhl YXAgcGFnZXMgdG8gcHJlZmV0Y2ggZm9yIHRoaXMgaW5kZXggc2Nhbi4gVGhpcworCQkgKiBp cyBlc3NlbnRpYWxseSBqdXN0IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeSBmb3IgdGhlIHRh YmxlIChvciB0aGUKKwkJICogdGFibGVzcGFjZSBpdCdzIGluKS4KKwkJICoKKwkJICogWFhY IFNob3VsZCB0aGlzIGFsc28gbG9vayBhdCBwbGFuLnBsYW5fcm93cyBhbmQgbWF5YmUgY2Fw IHRoZSB0YXJnZXQKKwkJICogdG8gdGhhdD8gUG9pbnRsZXNzIHRvIHByZWZldGNoIG1vcmUg dGhhbiB3ZSBleHBlY3QgdG8gdXNlLiBPciBtYXliZQorCQkgKiBqdXN0IHJlc2V0IHRvIHRo YXQgdmFsdWUgZHVyaW5nIHByZWZldGNoaW5nLCBhZnRlciByZWFkaW5nIHRoZSBuZXh0CisJ CSAqIGluZGV4IHBhZ2UgKG9yIHJhdGhlciBhZnRlciByZXNjYW4pPworCQkgKi8KKwkJcHJl ZmV0Y2hfbWF4ID0gTWluKGdldF90YWJsZXNwYWNlX2lvX2NvbmN1cnJlbmN5KGhlYXBSZWwt PnJkX3JlbC0+cmVsdGFibGVzcGFjZSksCisJCQkJCQkgICBpbmRleHN0YXRlLT5zcy5wcy5w bGFuLT5wbGFuX3Jvd3MpOworCisJCWlmIChwcmVmZXRjaF9tYXggPiAwKQorCQl7CisJCQlJ bmRleFByZWZldGNoICpwcmVmZXRjaCA9IHBhbGxvYzAoc2l6ZW9mKEluZGV4UHJlZmV0Y2gp KTsKKworCQkJcHJlZmV0Y2gtPnF1ZXVlSW5kZXggPSAwOworCQkJcHJlZmV0Y2gtPnF1ZXVl U3RhcnQgPSAwOworCQkJcHJlZmV0Y2gtPnF1ZXVlRW5kID0gMDsKKworCQkJcHJlZmV0Y2gt PnByZWZldGNoVGFyZ2V0ID0gMDsKKwkJCXByZWZldGNoLT5wcmVmZXRjaE1heFRhcmdldCA9 IHByZWZldGNoX21heDsKKwkJCXByZWZldGNoLT52bUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7 CisKKwkJCWluZGV4c3RhdGUtPmlzc19wcmVmZXRjaCA9IHByZWZldGNoOworCQl9CisJfQor CiAJLyoKIAkgKiBhbGwgZG9uZS4KIAkgKi8KQEAgLTE2OTcsMjQgKzE3MjksNiBAQCBFeGVj SW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIHsKIAlFU3Rh dGUJICAgKmVzdGF0ZSA9IG5vZGUtPnNzLnBzLnN0YXRlOwogCVBhcmFsbGVsSW5kZXhTY2Fu RGVzYyBwaXNjYW47Ci0JUmVsYXRpb24JaGVhcFJlbCA9IG5vZGUtPnNzLnNzX2N1cnJlbnRS ZWxhdGlvbjsKLQlpbnQJCQlwcmVmZXRjaF9tYXg7Ci0KLQkvKgotCSAqIERldGVybWluZSBu dW1iZXIgb2YgaGVhcCBwYWdlcyB0byBwcmVmZXRjaCBmb3IgdGhpcyBpbmRleC4gVGhpcyBp cwotCSAqIGVzc2VudGlhbGx5IGp1c3QgZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5IGZvciB0 aGUgdGFibGUgKG9yIHRoZQotCSAqIHRhYmxlc3BhY2UgaXQncyBpbikuCi0JICoKLQkgKiBY WFggU2hvdWxkIHRoaXMgYWxzbyBsb29rIGF0IHBsYW4ucGxhbl9yb3dzIGFuZCBtYXliZSBj YXAgdGhlIHRhcmdldAotCSAqIHRvIHRoYXQ/IFBvaW50bGVzcyB0byBwcmVmZXRjaCBtb3Jl IHRoYW4gd2UgZXhwZWN0IHRvIHVzZS4gT3IgbWF5YmUKLQkgKiBqdXN0IHJlc2V0IHRvIHRo YXQgdmFsdWUgZHVyaW5nIHByZWZldGNoaW5nLCBhZnRlciByZWFkaW5nIHRoZSBuZXh0Ci0J ICogaW5kZXggcGFnZSAob3IgcmF0aGVyIGFmdGVyIHJlc2Nhbik/Ci0JICoKLQkgKiBYWFgg TWF5YmUgcmVkdWNlIHRoZSB2YWx1ZSB3aXRoIHBhcmFsbGVsIHdvcmtlcnM/Ci0JICovCi0K LQlwcmVmZXRjaF9tYXggPSBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVh cFJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKSwKLQkJCQkJICAgbm9kZS0+c3MucHMucGxh bi0+cGxhbl9yb3dzKTsKIAogCXBpc2NhbiA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9j LCBub2RlLT5pc3NfUHNjYW5MZW4pOwogCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXpl KG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKQEAgLTE3MjcsOCArMTc0MSw3IEBAIEV4 ZWNJbmRleFNjYW5Jbml0aWFsaXplRFNNKEluZGV4U2NhblN0YXRlICpub2RlLAogCQkJCQkJ CQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2Fu S2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKLQkJCQkJCQkJIHBp c2NhbiwKLQkJCQkJCQkJIHByZWZldGNoX21heCk7CisJCQkJCQkJCSBwaXNjYW4pOwogCiAJ LyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSBy ZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKQEAgLTE3NjQsMjMgKzE3NzcsNiBAQCBFeGVjSW5k ZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkg IFBhcmFsbGVsV29ya2VyQ29udGV4dCAqcHdjeHQpCiB7CiAJUGFyYWxsZWxJbmRleFNjYW5E ZXNjIHBpc2NhbjsKLQlSZWxhdGlvbgloZWFwUmVsID0gbm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uOwotCWludAkJCXByZWZldGNoX21heDsKLQotCS8qCi0JICogRGV0ZXJtaW5lIG51 bWJlciBvZiBoZWFwIHBhZ2VzIHRvIHByZWZldGNoIGZvciB0aGlzIGluZGV4LiBUaGlzIGlz Ci0JICogZXNzZW50aWFsbHkganVzdCBlZmZlY3RpdmVfaW9fY29uY3VycmVuY3kgZm9yIHRo ZSB0YWJsZSAob3IgdGhlCi0JICogdGFibGVzcGFjZSBpdCdzIGluKS4KLQkgKgotCSAqIFhY WCBTaG91bGQgdGhpcyBhbHNvIGxvb2sgYXQgcGxhbi5wbGFuX3Jvd3MgYW5kIG1heWJlIGNh cCB0aGUgdGFyZ2V0Ci0JICogdG8gdGhhdD8gUG9pbnRsZXNzIHRvIHByZWZldGNoIG1vcmUg dGhhbiB3ZSBleHBlY3QgdG8gdXNlLiBPciBtYXliZQotCSAqIGp1c3QgcmVzZXQgdG8gdGhh dCB2YWx1ZSBkdXJpbmcgcHJlZmV0Y2hpbmcsIGFmdGVyIHJlYWRpbmcgdGhlIG5leHQKLQkg KiBpbmRleCBwYWdlIChvciByYXRoZXIgYWZ0ZXIgcmVzY2FuKT8KLQkgKgotCSAqIFhYWCBN YXliZSByZWR1Y2UgdGhlIHZhbHVlIHdpdGggcGFyYWxsZWwgd29ya2Vycz8KLQkgKi8KLQlw cmVmZXRjaF9tYXggPSBNaW4oZ2V0X3RhYmxlc3BhY2VfaW9fY29uY3VycmVuY3koaGVhcFJl bC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlKSwKLQkJCQkJICAgbm9kZS0+c3MucHMucGxhbi0+ cGxhbl9yb3dzKTsKIAogCXBpc2NhbiA9IHNobV90b2NfbG9va3VwKHB3Y3h0LT50b2MsIG5v ZGUtPnNzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgZmFsc2UpOwogCW5vZGUtPmlzc19TY2Fu RGVzYyA9CkBAIC0xNzg4LDggKzE3ODQsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdv cmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlv bkRlc2MsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2Rl LT5pc3NfTnVtT3JkZXJCeUtleXMsCi0JCQkJCQkJCSBwaXNjYW4sCi0JCQkJCQkJCSBwcmVm ZXRjaF9tYXgpOworCQkJCQkJCQkgcGlzY2FuKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRp bWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBw YXNzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IDhiNjYyZDM3MWRkLi5iNWM3 OTM1OTQyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTYyODksMTYgKzYy ODksMTUgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVs LAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAog CQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKLQkvKiBYWFggTWF5YmUg c2hvdWxkIGRvIHByZWZldGNoaW5nIHVzaW5nIHRoZSBkZWZhdWx0IHByZWZldGNoIHBhcmFt ZXRlcnM/ICovCiAJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRl eFJlbCwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1bWFibGUsCi0JCQkJCQkJCSAxLCAw LCAwKTsKKwkJCQkJCQkJIDEsIDApOwogCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBz Y2FuICovCiAJaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKIAlpbmRleF9yZXNj YW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmly c3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQg PSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAhPSBOVUxM KQorCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoaW5kZXhfc2NhbiwgaW5kZXhz Y2FuZGlyLCBOVUxMKSkgIT0gTlVMTCkKIAl7CiAJCUJsb2NrTnVtYmVyIGJsb2NrID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IGY2 ODgyZjY0NGQyLi5jMGM0NmQ3YTA1ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTEyOSw2ICsx MjksMTEwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T3JkZXJCeURpc3RhbmNlCiAJYm9vbAkJ aXNudWxsOwogfSBJbmRleE9yZGVyQnlEaXN0YW5jZTsKIAorCisKKy8qCisgKiBDYWNoZSBv ZiByZWNlbnRseSBwcmVmZXRjaGVkIGJsb2Nrcywgb3JnYW5pemVkIGFzIGEgaGFzaCB0YWJs ZSBvZgorICogc21hbGwgTFJVIGNhY2hlcy4gRG9lc24ndCBuZWVkIHRvIGJlIHBlcmZlY3Rs eSBhY2N1cmF0ZSwgYnV0IHdlCisgKiBhaW0gdG8gbWFrZSBmYWxzZSBwb3NpdGl2ZXMvbmVn YXRpdmVzIHJlYXNvbmFibHkgbG93LgorICovCit0eXBlZGVmIHN0cnVjdCBJbmRleFByZWZl dGNoQ2FjaGVFbnRyeSB7CisJQmxvY2tOdW1iZXIJCWJsb2NrOworCXVpbnQ2NAkJCXJlcXVl c3Q7Cit9IEluZGV4UHJlZmV0Y2hDYWNoZUVudHJ5OworCisvKgorICogU2l6ZSBvZiB0aGUg Y2FjaGUgb2YgcmVjZW50bHkgcHJlZmV0Y2hlZCBibG9ja3MgLSBzaG91bGRuJ3QgYmUgdG9v CisgKiBzbWFsbCBvciB0b28gbGFyZ2UuIDEwMjQgc2VlbXMgYWJvdXQgcmlnaHQsIGl0IGNv dmVycyB+OE1CIG9mIGRhdGEuCisgKiBJdCdzIHNvbWV3aGF0IGFyYml0cmFyeSwgdGhlcmUn cyBubyBwYXJ0aWN1bGFyIGZvcm11bGEgc2F5aW5nIGl0CisgKiBzaG91bGQgbm90IGJlIGhp Z2hlci9sb3dlci4KKyAqCisgKiBUaGUgY2FjaGUgaXMgc3RydWN0dXJlZCBhcyBhbiBhcnJh eSBvZiBzbWFsbCBMUlUgY2FjaGVzLCBzbyB0aGUgdG90YWwKKyAqIHNpemUgbmVlZHMgdG8g YmUgYSBtdWx0aXBsZSBvZiBMUlUgc2l6ZS4gVGhlIExSVSBzaG91bGQgYmUgdGlueSB0bwor ICoga2VlcCBsaW5lYXIgc2VhcmNoIGNoZWFwIGVub3VnaC4KKyAqCisgKiBYWFggTWF5YmUg d2UgY291bGQgY29uc2lkZXIgZWZmZWN0aXZlX2NhY2hlX3NpemUgb3Igc29tZXRoaW5nPwor ICovCisjZGVmaW5lCQlQUkVGRVRDSF9MUlVfU0laRQkJOAorI2RlZmluZQkJUFJFRkVUQ0hf TFJVX0NPVU5UCQkxMjgKKyNkZWZpbmUJCVBSRUZFVENIX0NBQ0hFX1NJWkUJCShQUkVGRVRD SF9MUlVfU0laRSAqIFBSRUZFVENIX0xSVV9DT1VOVCkKKworLyoKKyAqIFVzZWQgdG8gZGV0 ZWN0IHNlcXVlbnRpYWwgcGF0dGVybnMgKGFuZCBkaXNhYmxlIHByZWZldGNoaW5nKS4KKyAq LworI2RlZmluZQkJUFJFRkVUQ0hfUVVFVUVfSElTVE9SWQkJCTgKKyNkZWZpbmUJCVBSRUZF VENIX1NFUV9QQVRURVJOX0JMT0NLUwkJNAorCit0eXBlZGVmIHN0cnVjdCBJbmRleFByZWZl dGNoRW50cnkKK3sKKwlJdGVtUG9pbnRlckRhdGEJCXRpZDsKKwlib29sCQkJCWFsbF92aXNp YmxlOworfSBJbmRleFByZWZldGNoRW50cnk7CisKK3R5cGVkZWYgc3RydWN0IEluZGV4UHJl ZmV0Y2gKK3sKKwkvKgorCSAqIFhYWCBXZSBuZWVkIHRvIGRpc2FibGUgdGhpcyBpbiBzb21l IGNhc2VzIChlLmcuIHdoZW4gdXNpbmcgaW5kZXgtb25seQorCSAqIHNjYW5zLCB3ZSBkb24n dCB3YW50IHRvIHByZWZldGNoIHBhZ2VzKS4gT3IgbWF5YmUgd2Ugc2hvdWxkIHByZWZldGNo CisJICogb25seSBwYWdlcyB0aGF0IGFyZSBub3QgYWxsLXZpc2libGUsIHRoYXQnZCBiZSBl dmVuIGJldHRlci4KKwkgKi8KKwlpbnQJCQlwcmVmZXRjaFRhcmdldDsJLyogaG93IGZhciB3 ZSBzaG91bGQgYmUgcHJlZmV0Y2hpbmcgKi8KKwlpbnQJCQlwcmVmZXRjaE1heFRhcmdldDsJ LyogbWF4aW11bSBwcmVmZXRjaGluZyBkaXN0YW5jZSAqLworCWludAkJCXByZWZldGNoUmVz ZXQ7CS8qIHJlc2V0IHRvIHRoaXMgZGlzdGFuY2Ugb24gcmVzY2FuICovCisJYm9vbAkJcHJl ZmV0Y2hEb25lOwkvKiBkaWQgd2UgZ2V0IGFsbCBUSURzIGZyb20gdGhlIGluZGV4PyAqLwor CisJLyogcnVudGltZSBzdGF0aXN0aWNzICovCisJdWludDY0CQljb3VudEFsbDsJCS8qIGFs bCBwcmVmZXRjaCByZXF1ZXN0cyAqLworCXVpbnQ2NAkJY291bnRQcmVmZXRjaDsJLyogYWN0 dWFsIHByZWZldGNoZXMgKi8KKwl1aW50NjQJCWNvdW50U2tpcFNlcXVlbnRpYWw7CisJdWlu dDY0CQljb3VudFNraXBDYWNoZWQ7CisKKwkvKiB1c2VkIHdoZW4gcHJlZmV0Y2hpbmcgaW5k ZXgtb25seSBzY2FucyAqLworCWJvb2wJCWluZGV4b25seTsKKwlCdWZmZXIJCXZtQnVmZmVy OworCisJLyoKKwkgKiBRdWV1ZSBvZiBUSURzIHRvIHByZWZldGNoLgorCSAqCisJICogWFhY IFNpemluZyBmb3IgTUFYX0lPX0NPTkNVUlJFTkNZIG1heSBiZSBvdmVya2lsbCwgYnV0IGl0 IHNlZW1zIHNpbXBsZXIKKwkgKiB0aGFuIGR5bmFtaWNhbGx5IGFkanVzdGluZyBmb3IgY3Vz dG9tIHZhbHVlcy4KKwkgKi8KKwlJbmRleFByZWZldGNoRW50cnkJcXVldWVJdGVtc1tNQVhf SU9fQ09OQ1VSUkVOQ1ldOworCXVpbnQ2NAkJCXF1ZXVlSW5kZXg7CS8qIG5leHQgVElEIHRv IHByZWZldGNoICovCisJdWludDY0CQkJcXVldWVTdGFydDsJLyogZmlyc3QgdmFsaWQgVElE IGluIHF1ZXVlICovCisJdWludDY0CQkJcXVldWVFbmQ7CS8qIGZpcnN0IGludmFsaWQgKGVt cHR5KSBUSUQgaW4gcXVldWUgKi8KKworCS8qCisJICogQSBjb3VwbGUgb2YgbGFzdCBwcmVm ZXRjaGVkIGJsb2NrcywgdXNlZCB0byBjaGVjayBmb3IgY2VydGFpbiBhY2Nlc3MKKwkgKiBw YXR0ZXJuIGFuZCBza2lwIHByZWZldGNoaW5nIC0gZS5nLiBmb3Igc2VxdWVudGlhbCBhY2Nl c3MpLgorCSAqCisJICogWFhYIFNlcGFyYXRlIGZyb20gdGhlIG1haW4gcXVldWUsIGJlY2F1 c2Ugd2Ugb25seSB3YW50IHRvIGNvbXBhcmUgdGhlCisJICogYmxvY2sgbnVtYmVycywgbm90 IHRoZSB3aG9sZSBUSUQuIEluIHNlcXVlbnRpYWwgYWNjZXNzIGl0J3MgbGlrZWx5IHdlCisJ ICogcmVhZCBtYW55IGl0ZW1zIGZyb20gZWFjaCBwYWdlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0 byBjaGVjayBtYW55IGl0ZW1zCisJICogKGFzIHRoYXQgaXMgbXVjaCBtb3JlIGV4cGVuc2l2 ZSkuCisJICovCisJQmxvY2tOdW1iZXIJCWJsb2NrSXRlbXNbUFJFRkVUQ0hfUVVFVUVfSElT VE9SWV07CisJdWludDY0CQkJYmxvY2tJbmRleDsJLyogaW5kZXggaW4gdGhlIGJsb2NrIChw b2ludHMgdG8gdGhlIGZpcnN0CisJCQkJCQkJCSAqIGVtcHR5IGVudHJ5KSovCisKKwkvKgor CSAqIENhY2hlIG9mIHJlY2VudGx5IHByZWZldGNoZWQgYmxvY2tzLCBvcmdhbml6ZWQgYXMg YSBoYXNoIHRhYmxlIG9mCisJICogc21hbGwgTFJVIGNhY2hlcy4KKwkgKi8KKwl1aW50NjQJ CQkJcHJlZmV0Y2hSZXFOdW1iZXI7CisJSW5kZXhQcmVmZXRjaENhY2hlRW50cnkJcHJlZmV0 Y2hDYWNoZVtQUkVGRVRDSF9DQUNIRV9TSVpFXTsKKworfSBJbmRleFByZWZldGNoOworCisj ZGVmaW5lIFBSRUZFVENIX1FVRVVFX0lOREVYKGEpCSgoYSkgJSAoTUFYX0lPX0NPTkNVUlJF TkNZKSkKKyNkZWZpbmUgUFJFRkVUQ0hfUVVFVUVfRU1QVFkocCkJKChwKS0+cXVldWVFbmQg PT0gKHApLT5xdWV1ZUluZGV4KQorI2RlZmluZSBQUkVGRVRDSF9FTkFCTEVEKHApCQkoKHAp ICYmICgocCktPnByZWZldGNoTWF4VGFyZ2V0ID4gMCkpCisjZGVmaW5lIFBSRUZFVENIX0ZV TEwocCkJCSgocCktPnF1ZXVlRW5kIC0gKHApLT5xdWV1ZUluZGV4ID09IChwKS0+cHJlZmV0 Y2hUYXJnZXQpCisjZGVmaW5lIFBSRUZFVENIX0RPTkUocCkJCSgocCkgJiYgKChwKS0+cHJl ZmV0Y2hEb25lICYmIFBSRUZFVENIX1FVRVVFX0VNUFRZKHApKSkKKyNkZWZpbmUgUFJFRkVU Q0hfQUNUSVZFKHApCQkoUFJFRkVUQ0hfRU5BQkxFRChwKSAmJiAhKHApLT5wcmVmZXRjaERv bmUpCisjZGVmaW5lIFBSRUZFVENIX0JMT0NLX0lOREVYKHYpCSgodikgJSBQUkVGRVRDSF9R VUVVRV9ISVNUT1JZKQorCisKIC8qCiAgKiBnZW5lcmFsaXplZCBpbmRleF8gaW50ZXJmYWNl IHJvdXRpbmVzIChpbiBpbmRleGFtLmMpCiAgKi8KQEAgLTE1NSw4ICsyNTksNyBAQCBleHRl cm4gdm9pZCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJCQkJIFNu YXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywK LQkJCQkJCQkJCSBpbnQgcHJlZmV0Y2hfbWF4KTsKKwkJCQkJCQkJCSBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2Jp dG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJCQkJCQlTbmFwc2hvdCBzbmFw c2hvdCwKIAkJCQkJCQkJCQkJaW50IG5rZXlzKTsKQEAgLTE3MywxNyArMjc2LDE5IEBAIGV4 dGVybiB2b2lkIGluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIGV4dGVybiB2b2lkIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxs ZWwoUmVsYXRpb24gaGVhcHJlbCwKIAkJCQkJCQkJCQkJICBSZWxhdGlvbiBpbmRleHJlbCwg aW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAotCQkJCQkJCQkJCQkgIFBhcmFsbGVsSW5kZXhT Y2FuRGVzYyBwc2NhbiwKLQkJCQkJCQkJCQkJICBpbnQgcHJlZmV0Y2hfbWF4KTsKKwkJCQkJ CQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2lu dGVyIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKLQkJCQkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCisJCQkJCQkJCQkgSW5kZXhQcmVmZXRjaCAqcHJlZmV0Y2gpOwogZXh0ZXJuIEl0 ZW1Qb2ludGVyIGluZGV4X2dldG5leHRfdGlkX3ZtKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJ CQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQlJbmRleFByZWZl dGNoICpwcmVmZXRjaCwKIAkJCQkJCQkJCQlib29sICphbGxfdmlzaWJsZSk7CiBzdHJ1Y3Qg VHVwbGVUYWJsZVNsb3Q7CiBleHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2Nh bkRlc2Mgc2Nhbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBib29s IGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAotCQkJCQkJCSAgIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisJ CQkJCQkJICAgc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCSAgIEluZGV4 UHJlZmV0Y2ggKnByZWZldGNoKTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5k ZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5m bywKQEAgLTIzOCwxMDQgKzM0Myw0IEBAIGV4dGVybiBIZWFwVHVwbGUgc3lzdGFibGVfZ2V0 bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sCiAJCQkJCQkJCQkJICBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7CiBleHRlcm4gdm9pZCBzeXN0YWJsZV9lbmRzY2FuX29yZGVy ZWQoU3lzU2NhbkRlc2Mgc3lzc2Nhbik7CiAKLS8qCi0gKiBDYWNoZSBvZiByZWNlbnRseSBw cmVmZXRjaGVkIGJsb2Nrcywgb3JnYW5pemVkIGFzIGEgaGFzaCB0YWJsZSBvZgotICogc21h bGwgTFJVIGNhY2hlcy4gRG9lc24ndCBuZWVkIHRvIGJlIHBlcmZlY3RseSBhY2N1cmF0ZSwg YnV0IHdlCi0gKiBhaW0gdG8gbWFrZSBmYWxzZSBwb3NpdGl2ZXMvbmVnYXRpdmVzIHJlYXNv bmFibHkgbG93LgotICovCi10eXBlZGVmIHN0cnVjdCBQcmVmZXRjaENhY2hlRW50cnkgewot CUJsb2NrTnVtYmVyCQlibG9jazsKLQl1aW50NjQJCQlyZXF1ZXN0OwotfSBQcmVmZXRjaENh Y2hlRW50cnk7Ci0KLS8qCi0gKiBTaXplIG9mIHRoZSBjYWNoZSBvZiByZWNlbnRseSBwcmVm ZXRjaGVkIGJsb2NrcyAtIHNob3VsZG4ndCBiZSB0b28KLSAqIHNtYWxsIG9yIHRvbyBsYXJn ZS4gMTAyNCBzZWVtcyBhYm91dCByaWdodCwgaXQgY292ZXJzIH44TUIgb2YgZGF0YS4KLSAq IEl0J3Mgc29tZXdoYXQgYXJiaXRyYXJ5LCB0aGVyZSdzIG5vIHBhcnRpY3VsYXIgZm9ybXVs YSBzYXlpbmcgaXQKLSAqIHNob3VsZCBub3QgYmUgaGlnaGVyL2xvd2VyLgotICoKLSAqIFRo ZSBjYWNoZSBpcyBzdHJ1Y3R1cmVkIGFzIGFuIGFycmF5IG9mIHNtYWxsIExSVSBjYWNoZXMs IHNvIHRoZSB0b3RhbAotICogc2l6ZSBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIExSVSBz aXplLiBUaGUgTFJVIHNob3VsZCBiZSB0aW55IHRvCi0gKiBrZWVwIGxpbmVhciBzZWFyY2gg Y2hlYXAgZW5vdWdoLgotICoKLSAqIFhYWCBNYXliZSB3ZSBjb3VsZCBjb25zaWRlciBlZmZl Y3RpdmVfY2FjaGVfc2l6ZSBvciBzb21ldGhpbmc/Ci0gKi8KLSNkZWZpbmUJCVBSRUZFVENI X0xSVV9TSVpFCQk4Ci0jZGVmaW5lCQlQUkVGRVRDSF9MUlVfQ09VTlQJCTEyOAotI2RlZmlu ZQkJUFJFRkVUQ0hfQ0FDSEVfU0laRQkJKFBSRUZFVENIX0xSVV9TSVpFICogUFJFRkVUQ0hf TFJVX0NPVU5UKQotCi0vKgotICogVXNlZCB0byBkZXRlY3Qgc2VxdWVudGlhbCBwYXR0ZXJu cyAoYW5kIGRpc2FibGUgcHJlZmV0Y2hpbmcpLgotICovCi0jZGVmaW5lCQlQUkVGRVRDSF9R VUVVRV9ISVNUT1JZCQkJOAotI2RlZmluZQkJUFJFRkVUQ0hfU0VRX1BBVFRFUk5fQkxPQ0tT CQk0Ci0KLXR5cGVkZWYgc3RydWN0IFByZWZldGNoRW50cnkKLXsKLQlJdGVtUG9pbnRlckRh dGEJCXRpZDsKLQlib29sCQkJCWFsbF92aXNpYmxlOwotfSBQcmVmZXRjaEVudHJ5OwotCi10 eXBlZGVmIHN0cnVjdCBJbmRleFByZWZldGNoRGF0YQotewotCS8qCi0JICogWFhYIFdlIG5l ZWQgdG8gZGlzYWJsZSB0aGlzIGluIHNvbWUgY2FzZXMgKGUuZy4gd2hlbiB1c2luZyBpbmRl eC1vbmx5Ci0JICogc2NhbnMsIHdlIGRvbid0IHdhbnQgdG8gcHJlZmV0Y2ggcGFnZXMpLiBP ciBtYXliZSB3ZSBzaG91bGQgcHJlZmV0Y2gKLQkgKiBvbmx5IHBhZ2VzIHRoYXQgYXJlIG5v dCBhbGwtdmlzaWJsZSwgdGhhdCdkIGJlIGV2ZW4gYmV0dGVyLgotCSAqLwotCWludAkJCXBy ZWZldGNoVGFyZ2V0OwkvKiBob3cgZmFyIHdlIHNob3VsZCBiZSBwcmVmZXRjaGluZyAqLwot CWludAkJCXByZWZldGNoTWF4VGFyZ2V0OwkvKiBtYXhpbXVtIHByZWZldGNoaW5nIGRpc3Rh bmNlICovCi0JaW50CQkJcHJlZmV0Y2hSZXNldDsJLyogcmVzZXQgdG8gdGhpcyBkaXN0YW5j ZSBvbiByZXNjYW4gKi8KLQlib29sCQlwcmVmZXRjaERvbmU7CS8qIGRpZCB3ZSBnZXQgYWxs IFRJRHMgZnJvbSB0aGUgaW5kZXg/ICovCi0KLQkvKiBydW50aW1lIHN0YXRpc3RpY3MgKi8K LQl1aW50NjQJCWNvdW50QWxsOwkJLyogYWxsIHByZWZldGNoIHJlcXVlc3RzICovCi0JdWlu dDY0CQljb3VudFByZWZldGNoOwkvKiBhY3R1YWwgcHJlZmV0Y2hlcyAqLwotCXVpbnQ2NAkJ Y291bnRTa2lwU2VxdWVudGlhbDsKLQl1aW50NjQJCWNvdW50U2tpcENhY2hlZDsKLQotCS8q IHVzZWQgd2hlbiBwcmVmZXRjaGluZyBpbmRleC1vbmx5IHNjYW5zICovCi0JQnVmZmVyCQl2 bUJ1ZmZlcjsKLQotCS8qCi0JICogUXVldWUgb2YgVElEcyB0byBwcmVmZXRjaC4KLQkgKgot CSAqIFhYWCBTaXppbmcgZm9yIE1BWF9JT19DT05DVVJSRU5DWSBtYXkgYmUgb3ZlcmtpbGws IGJ1dCBpdCBzZWVtcyBzaW1wbGVyCi0JICogdGhhbiBkeW5hbWljYWxseSBhZGp1c3Rpbmcg Zm9yIGN1c3RvbSB2YWx1ZXMuCi0JICovCi0JUHJlZmV0Y2hFbnRyeQlxdWV1ZUl0ZW1zW01B WF9JT19DT05DVVJSRU5DWV07Ci0JdWludDY0CQkJcXVldWVJbmRleDsJLyogbmV4dCBUSUQg dG8gcHJlZmV0Y2ggKi8KLQl1aW50NjQJCQlxdWV1ZVN0YXJ0OwkvKiBmaXJzdCB2YWxpZCBU SUQgaW4gcXVldWUgKi8KLQl1aW50NjQJCQlxdWV1ZUVuZDsJLyogZmlyc3QgaW52YWxpZCAo ZW1wdHkpIFRJRCBpbiBxdWV1ZSAqLwotCi0JLyoKLQkgKiBBIGNvdXBsZSBvZiBsYXN0IHBy ZWZldGNoZWQgYmxvY2tzLCB1c2VkIHRvIGNoZWNrIGZvciBjZXJ0YWluIGFjY2VzcwotCSAq IHBhdHRlcm4gYW5kIHNraXAgcHJlZmV0Y2hpbmcgLSBlLmcuIGZvciBzZXF1ZW50aWFsIGFj Y2VzcykuCi0JICoKLQkgKiBYWFggU2VwYXJhdGUgZnJvbSB0aGUgbWFpbiBxdWV1ZSwgYmVj YXVzZSB3ZSBvbmx5IHdhbnQgdG8gY29tcGFyZSB0aGUKLQkgKiBibG9jayBudW1iZXJzLCBu b3QgdGhlIHdob2xlIFRJRC4gSW4gc2VxdWVudGlhbCBhY2Nlc3MgaXQncyBsaWtlbHkgd2UK LQkgKiByZWFkIG1hbnkgaXRlbXMgZnJvbSBlYWNoIHBhZ2UsIGFuZCB3ZSBkb24ndCB3YW50 IHRvIGNoZWNrIG1hbnkgaXRlbXMKLQkgKiAoYXMgdGhhdCBpcyBtdWNoIG1vcmUgZXhwZW5z aXZlKS4KLQkgKi8KLQlCbG9ja051bWJlcgkJYmxvY2tJdGVtc1tQUkVGRVRDSF9RVUVVRV9I SVNUT1JZXTsKLQl1aW50NjQJCQlibG9ja0luZGV4OwkvKiBpbmRleCBpbiB0aGUgYmxvY2sg KHBvaW50cyB0byB0aGUgZmlyc3QKLQkJCQkJCQkJICogZW1wdHkgZW50cnkpKi8KLQotCS8q Ci0JICogQ2FjaGUgb2YgcmVjZW50bHkgcHJlZmV0Y2hlZCBibG9ja3MsIG9yZ2FuaXplZCBh cyBhIGhhc2ggdGFibGUgb2YKLQkgKiBzbWFsbCBMUlUgY2FjaGVzLgotCSAqLwotCXVpbnQ2 NAkJCQlwcmVmZXRjaFJlcU51bWJlcjsKLQlQcmVmZXRjaENhY2hlRW50cnkJcHJlZmV0Y2hD YWNoZVtQUkVGRVRDSF9DQUNIRV9TSVpFXTsKLQotfSBJbmRleFByZWZldGNoRGF0YTsKLQot I2RlZmluZSBQUkVGRVRDSF9RVUVVRV9JTkRFWChhKQkoKGEpICUgKE1BWF9JT19DT05DVVJS RU5DWSkpCi0jZGVmaW5lIFBSRUZFVENIX1FVRVVFX0VNUFRZKHApCSgocCktPnF1ZXVlRW5k ID09IChwKS0+cXVldWVJbmRleCkKLSNkZWZpbmUgUFJFRkVUQ0hfRU5BQkxFRChwKQkJKChw KSAmJiAoKHApLT5wcmVmZXRjaE1heFRhcmdldCA+IDApKQotI2RlZmluZSBQUkVGRVRDSF9G VUxMKHApCQkoKHApLT5xdWV1ZUVuZCAtIChwKS0+cXVldWVJbmRleCA9PSAocCktPnByZWZl dGNoVGFyZ2V0KQotI2RlZmluZSBQUkVGRVRDSF9ET05FKHApCQkoKHApICYmICgocCktPnBy ZWZldGNoRG9uZSAmJiBQUkVGRVRDSF9RVUVVRV9FTVBUWShwKSkpCi0jZGVmaW5lIFBSRUZF VENIX0FDVElWRShwKQkJKFBSRUZFVENIX0VOQUJMRUQocCkgJiYgIShwKS0+cHJlZmV0Y2hE b25lKQotI2RlZmluZSBQUkVGRVRDSF9CTE9DS19JTkRFWCh2KQkoKHYpICUgUFJFRkVUQ0hf UVVFVUVfSElTVE9SWSkKLQogI2VuZGlmCQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oCmluZGV4IGQ1OTAzNDkyYzZlLi5kMDMzNjBlYWMwNCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oCkBAIC0xMDYsMTIgKzEwNiw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEKIAlSZWxhdGlvbglyZWw7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAK LS8qCi0gKiBGb3J3YXJkIGRlY2xhcmF0aW9ucywgZGVmaW5lZCBpbiBnZW5hbS5oLgotICov Ci10eXBlZGVmIHN0cnVjdCBJbmRleFByZWZldGNoRGF0YSBJbmRleFByZWZldGNoRGF0YTsK LXR5cGVkZWYgc3RydWN0IEluZGV4UHJlZmV0Y2hEYXRhICpJbmRleFByZWZldGNoOwotCiAv KgogICogV2UgdXNlIHRoZSBzYW1lIEluZGV4U2NhbkRlc2NEYXRhIHN0cnVjdHVyZSBmb3Ig Ym90aCBhbWdldHR1cGxlLWJhc2VkCiAgKiBhbmQgYW1nZXRiaXRtYXAtYmFzZWQgaW5kZXgg c2NhbnMuICBTb21lIGZpZWxkcyBhcmUgb25seSByZWxldmFudCBpbgpAQCAtMTM1LDcgKzEy OSw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJaWdub3Jl X2tpbGxlZF90dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8KIAli b29sCQl4YWN0U3RhcnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5n IGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxlcyAqLwotCWJvb2wJCWluZGV4b25seTsJCQkv KiBpcyB0aGlzIGluZGV4LW9ubHkgc2Nhbj8gKi8KIAogCS8qIGluZGV4IGFjY2VzcyBtZXRo b2QncyBwcml2YXRlIHN0YXRlICovCiAJdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1t ZXRob2Qtc3BlY2lmaWMgaW5mbyAqLwpAQCAtMTY5LDkgKzE2Miw2IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkgICAqeHNfb3JkZXJieW51bGxzOwogCWJv b2wJCXhzX3JlY2hlY2tvcmRlcmJ5OwogCi0JLyogcHJlZmV0Y2hpbmcgc3RhdGUgKG9yIE5V TEwgaWYgZGlzYWJsZWQgZm9yIHRoaXMgc2NhbikgKi8KLQlJbmRleFByZWZldGNoRGF0YSAq eHNfcHJlZmV0Y2g7Ci0KIAkvKiBwYXJhbGxlbCBpbmRleCBzY2FuIGluZm9ybWF0aW9uLCBp biBzaGFyZWQgbWVtb3J5ICovCiAJc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEg KnBhcmFsbGVsX3NjYW47CiB9CQkJSW5kZXhTY2FuRGVzY0RhdGE7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oCmluZGV4IDVkN2YxN2RlZTA3Li44NzQ1NDUzYTViNCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKQEAgLTE1MjksNiArMTUyOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJYm9vbAkg ICAqZWxlbV9udWxsczsJCS8qIGFycmF5IG9mIG51bV9lbGVtcyBpcy1udWxsIGZsYWdzICov CiB9IEluZGV4QXJyYXlLZXlJbmZvOwogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBJ bmRleFNjYW5TdGF0ZSBpbmZvcm1hdGlvbgogICoKQEAgLTE1ODAsNiArMTU4MSw4IEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJYm9vbAkgICAqaXNzX09yZGVyQnlUeXBC eVZhbHM7CiAJaW50MTYJICAgKmlzc19PcmRlckJ5VHlwTGVuczsKIAlTaXplCQlpc3NfUHNj YW5MZW47CisKKwlJbmRleFByZWZldGNoICppc3NfcHJlZmV0Y2g7CiB9IEluZGV4U2NhblN0 YXRlOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjE4LDYgKzE2MjEsNyBAQCB0eXBl ZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19U YWJsZVNsb3Q7CiAJQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNjYW5M ZW47CisJSW5kZXhQcmVmZXRjaCAqaW9zc19wcmVmZXRjaDsKIH0gSW5kZXhPbmx5U2NhblN0 YXRlOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0tIAoyLjQxLjAKCg== --------------4B9o2eeZz326afukkg4ZXfmy--