Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752169Ab2E1LNL (ORCPT ); Mon, 28 May 2012 07:13:11 -0400 Received: from mail-ob0-f174.google.com ([209.85.214.174]:61347 "EHLO mail-ob0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751176Ab2E1LNJ (ORCPT ); Mon, 28 May 2012 07:13:09 -0400 MIME-Version: 1.0 In-Reply-To: References: Date: Mon, 28 May 2012 19:13:07 +0800 Message-ID: Subject: Re: [ANNOUNCE][PATCH 5/26]Rotary Interactivity Favor Scheduler Version 3(Brain-Eating) Update. From: Chen To: Hillf Danton Cc: mou Chen , linux-kernel@vger.kernel.org Content-Type: multipart/mixed; boundary=bcaec55245ec7b0c0704c116cd8c Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 196564 Lines: 2567 --bcaec55245ec7b0c0704c116cd8c Content-Type: text/plain; charset=ISO-8859-1 On Sun, May 27, 2012 at 6:49 PM, Hillf Danton wrote: > On Sun, May 27, 2012 at 10:41 AM, Chen wrote: >> >> Now there is a new patch.It is a new V3 diff >> Also for the newest version of RIFS please visit >> http://code.google.com/p/rifs-scheduler/downloads/list to download. >> > Again you misread. > Please post, on LKML if you like, the diff between bfs-420 and rifs-3, clear? > -hd This is the patch --bcaec55245ec7b0c0704c116cd8c Content-Type: application/octet-stream; name=bfs-rifs Content-Disposition: attachment; filename=bfs-rifs Content-Transfer-Encoding: base64 X-Attachment-Id: f_h2rfuol00 LS0tIDMuMy1zY2hlZC1iZnMtNDIwLnBhdGNoCisrKyByaWZzLXYzLWtlcm5lbDMuMy54CkBAIC0x LDYxICsxLDcgQEAKLVRoZSBCcmFpbiBGdWNrIFNjaGVkdWxlciB2MC40MjAgQUtBIHNtb2tpbmcg YnkgQ29uIEtvbGl2YXMuCi0KLUEgc2luZ2xlIHNoYXJlZCBydW5xdWV1ZSBPKG4pIHN0cmljdCBm YWlybmVzcyBlYXJsaWVzdCBkZWFkbGluZSBmaXJzdCBkZXNpZ24uCi0KLUV4Y2VsbGVudCB0aHJv dWdocHV0IGFuZCBsYXRlbmN5IGZvciAxIHRvIG1hbnkgQ1BVcyBvbiBkZXNrdG9wIGFuZCBzZXJ2 ZXIKLWNvbW1vZGl0eSBoYXJkd2FyZS4KLU5vdCByZWNvbW1lbmRlZCBmb3IgNDA5NiBjcHVzLgot Ci1TY2FsYWJpbGl0eSBpcyBvcHRpbWFsIHdoZW4geW91ciB3b3JrbG9hZCBpcyBlcXVhbCB0byB0 aGUgbnVtYmVyIG9mIENQVXMgb24KLWJmcy4gaWUgeW91IHNob3VsZCBPTkxZIGRvIG1ha2UgLWo0 IG9uIHF1YWQgY29yZSwgLWoyIG9uIGR1YWwgY29yZSBhbmQgc28gb24uCi0KLUZlYXR1cmVzIFND SEVEX0lETEVQUklPIGFuZCBTQ0hFRF9JU08gc2NoZWR1bGluZyBwb2xpY2llcyBhcyB3ZWxsLgot WW91IGRvIE5PVCBuZWVkIHRvIHVzZSB0aGVzZSBwb2xpY2llcyBmb3IgZ29vZCBwZXJmb3JtYW5j ZSwgdGhleSBhcmUgcHVyZWx5Ci1vcHRpb25hbCBmb3IgZXZlbiBiZXR0ZXIgcGVyZm9ybWFuY2Ug aW4gZXh0cmVtZSBjb25kaXRpb25zLgotCi1UbyBydW4gc29tZXRoaW5nIGlkbGVwcmlvLCB1c2Ug c2NoZWR0b29sIGxpa2Ugc286Ci0KLXNjaGVkdG9vbCAtRCAtZSBtYWtlIC1qNAotCi1UbyBydW4g c29tZXRoaW5nIGlzb3ByaW8sIHVzZSBzY2hlZHRvb2wgbGlrZSBzbzoKLQotc2NoZWR0b29sIC1J IC1lIGFtYXJvawotCi1JbmNsdWRlcyBhY2N1cmF0ZSBzdWItdGljayBhY2NvdW50aW5nIG9mIHRh c2tzIHNvIHVzZXJzcGFjZSByZXBvcnRlZAotY3B1IHVzYWdlIG1heSBiZSB2ZXJ5IGRpZmZlcmVu dCBpZiB5b3UgaGF2ZSB2ZXJ5IHNob3J0IGxpdmVkIHRhc2tzLgotCi0tY2sKLQotCi0tLS0KLSBE b2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1CRlMudHh0ICAgICB8ICAzNDcgKwotIERvY3Vt ZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgICAgICAgICAgIHwgICAyNiAKLSBhcmNoL3Bvd2Vy cGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYyB8ICAgIDUgCi0gYXJjaC94ODYvS2NvbmZp ZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwIAotIGRyaXZlcnMvY3B1ZnJlcS9jcHVm cmVxLmMgICAgICAgICAgICAgICAgIHwgICAgNyAKLSBkcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9j b25zZXJ2YXRpdmUuYyAgICB8ICAgIDQgCi0gZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1h bmQuYyAgICAgICAgfCAgICA4IAotIGZzL3Byb2MvYmFzZS5jICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgMiAKLSBpbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oICAgICAgICAgICAgICAg ICB8ICAgNjQgCi0gaW5jbHVkZS9saW51eC9pb3ByaW8uaCAgICAgICAgICAgICAgICAgICAgfCAg ICAyIAotIGluY2x1ZGUvbGludXgvamlmZmllcy5oICAgICAgICAgICAgICAgICAgIHwgICAgMiAK LSBpbmNsdWRlL2xpbnV4L3NjaGVkLmggICAgICAgICAgICAgICAgICAgICB8ICAxMTAgCi0gaW5p dC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE2IAotIGluaXQvbWFp bi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKLSBrZXJuZWwvZGVsYXlh Y2N0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgCi0ga2VybmVsL2V4aXQuYyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAotIGtlcm5lbC9wb3NpeC1jcHUtdGltZXJz LmMgICAgICAgICAgICAgICAgIHwgICAxMiAKLSBrZXJuZWwvc2NoZWQvTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICB8ICAgIDggCi0ga2VybmVsL3NjaGVkL2Jmcy5jICAgICAgICAgICAgICAg ICAgICAgICAgfCA3MjUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIGtlcm5lbC9z eXNjdGwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSAKLSBsaWIvS2NvbmZpZy5k ZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgCi0gMjEgZmlsZXMgY2hhbmdlZCwg Nzg2NSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGxpbnV4LTMuMy1j azEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKLT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tLSBsaW51eC0zLjMtY2sxLm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZz L3NjaGVkLmMJMjAxMi0wMy0yNCAxOTozMDowMC4wMTM0MjAzODEgKzExMDAKLSsrKyBsaW51eC0z LjMtY2sxL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCTIwMTItMDMt MjQgMTk6MzA6MjkuMDM4OTI1NzQwICsxMTAwCi1AQCAtNjMsMTEgKzYzLDYgQEAgc3RhdGljIHN0 cnVjdCB0aW1lcl9saXN0IHNwdXNjaGVkX3RpbWVyOworZGlmZiAtcnVOIGxpbnV4LTMuMy41L2Fy Y2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jIGxpbnV4LTMuMy41LVJJRlMt UkMzLUJSQUlOLUVBVElORy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQu YworLS0tIGxpbnV4LTMuMy41L2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hl ZC5jCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICswODAwCisrKysgbGludXgtMy4zLjUt UklGUy1SQzMtQlJBSU4tRUFUSU5HL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9z Y2hlZC5jCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtNjMsMTEgKzYz LDYgQEAKICBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qgc3B1bG9hZGF2Z190aW1lcjsKICAKICAv KgpAQCAtNjcsMzYzICsxMyw5MCBAQAogICAqIEZyZXF1ZW5jeSBvZiB0aGUgc3B1IHNjaGVkdWxl ciB0aWNrLiAgQnkgZGVmYXVsdCB3ZSBkbyBvbmUgU1BVIHNjaGVkdWxlcgogICAqIHRpY2sgZm9y IGV2ZXJ5IDEwIENQVSBzY2hlZHVsZXIgdGlja3MuCiAgICovCi1JbmRleDogbGludXgtMy4zLWNr MS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1CRlMudHh0Ci09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0g L2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCi0rKysgbGludXgt My4zLWNrMS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1CRlMudHh0CTIwMTItMDMtMjQg MTk6MzA6MjkuMDM4OTI1NzQwICsxMTAwCi1AQCAtMCwwICsxLDM0NyBAQAotK0JGUyAtIFRoZSBC cmFpbiBGdWNrIFNjaGVkdWxlciBieSBDb24gS29saXZhcy4KLSsKLStHb2Fscy4KLSsKLStUaGUg Z29hbCBvZiB0aGUgQnJhaW4gRnVjayBTY2hlZHVsZXIsIHJlZmVycmVkIHRvIGFzIEJGUyBmcm9t IGhlcmUgb24sIGlzIHRvCi0rY29tcGxldGVseSBkbyBhd2F5IHdpdGggdGhlIGNvbXBsZXggZGVz aWducyBvZiB0aGUgcGFzdCBmb3IgdGhlIGNwdSBwcm9jZXNzCi0rc2NoZWR1bGVyIGFuZCBpbnN0 ZWFkIGltcGxlbWVudCBvbmUgdGhhdCBpcyB2ZXJ5IHNpbXBsZSBpbiBiYXNpYyBkZXNpZ24uCi0r VGhlIG1haW4gZm9jdXMgb2YgQkZTIGlzIHRvIGFjaGlldmUgZXhjZWxsZW50IGRlc2t0b3AgaW50 ZXJhY3Rpdml0eSBhbmQKLStyZXNwb25zaXZlbmVzcyB3aXRob3V0IGhldXJpc3RpY3MgYW5kIHR1 bmluZyBrbm9icyB0aGF0IGFyZSBkaWZmaWN1bHQgdG8KLSt1bmRlcnN0YW5kLCBpbXBvc3NpYmxl IHRvIG1vZGVsIGFuZCBwcmVkaWN0IHRoZSBlZmZlY3Qgb2YsIGFuZCB3aGVuIHR1bmVkIHRvCi0r b25lIHdvcmtsb2FkIGNhdXNlIG1hc3NpdmUgZGV0cmltZW50IHRvIGFub3RoZXIuCi0rCi0rCi0r RGVzaWduIHN1bW1hcnkuCi0rCi0rQkZTIGlzIGJlc3QgZGVzY3JpYmVkIGFzIGEgc2luZ2xlIHJ1 bnF1ZXVlLCBPKG4pIGxvb2t1cCwgZWFybGllc3QgZWZmZWN0aXZlCi0rdmlydHVhbCBkZWFkbGlu ZSBmaXJzdCBkZXNpZ24sIGxvb3NlbHkgYmFzZWQgb24gRUVWREYgKGVhcmxpZXN0IGVsaWdpYmxl IHZpcnR1YWwKLStkZWFkbGluZSBmaXJzdCkgYW5kIG15IHByZXZpb3VzIFN0YWlyY2FzZSBEZWFk bGluZSBzY2hlZHVsZXIuIEVhY2ggY29tcG9uZW50Ci0rc2hhbGwgYmUgZGVzY3JpYmVkIGluIG9y ZGVyIHRvIHVuZGVyc3RhbmQgdGhlIHNpZ25pZmljYW5jZSBvZiwgYW5kIHJlYXNvbmluZyBmb3IK LStpdC4gVGhlIGNvZGViYXNlIHdoZW4gdGhlIGZpcnN0IHN0YWJsZSB2ZXJzaW9uIHdhcyByZWxl YXNlZCB3YXMgYXBwcm94aW1hdGVseQotKzkwMDAgbGluZXMgbGVzcyBjb2RlIHRoYW4gdGhlIGV4 aXN0aW5nIG1haW5saW5lIGxpbnV4IGtlcm5lbCBzY2hlZHVsZXIgKGluCi0rMi42LjMxKS4gVGhp cyBkb2VzIG5vdCBldmVuIHRha2UgaW50byBhY2NvdW50IHRoZSByZW1vdmFsIG9mIGRvY3VtZW50 YXRpb24gYW5kCi0rdGhlIGNncm91cHMgY29kZSB0aGF0IGlzIG5vdCB1c2VkLgotKwotK0Rlc2ln biByZWFzb25pbmcuCi0rCi0rVGhlIHNpbmdsZSBydW5xdWV1ZSByZWZlcnMgdG8gdGhlIHF1ZXVl ZCBidXQgbm90IHJ1bm5pbmcgcHJvY2Vzc2VzIGZvciB0aGUKLStlbnRpcmUgc3lzdGVtLCByZWdh cmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgQ1BVcy4gVGhlIHJlYXNvbiBmb3IgZ29pbmcgYmFjayB0 bwotK2Egc2luZ2xlIHJ1bnF1ZXVlIGRlc2lnbiBpcyB0aGF0IG9uY2UgbXVsdGlwbGUgcnVucXVl dWVzIGFyZSBpbnRyb2R1Y2VkLAotK3Blci1DUFUgb3Igb3RoZXJ3aXNlLCB0aGVyZSB3aWxsIGJl IGNvbXBsZXggaW50ZXJhY3Rpb25zIGFzIGVhY2ggcnVucXVldWUgd2lsbAotK2JlIHJlc3BvbnNp YmxlIGZvciB0aGUgc2NoZWR1bGluZyBsYXRlbmN5IGFuZCBmYWlybmVzcyBvZiB0aGUgdGFza3Mg b25seSBvbiBpdHMKLStvd24gcnVucXVldWUsIGFuZCB0byBhY2hpZXZlIGZhaXJuZXNzIGFuZCBs b3cgbGF0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgQ1BVcywgYW55Ci0rYWR2YW50YWdlIGluIHRocm91 Z2hwdXQgb2YgaGF2aW5nIENQVSBsb2NhbCB0YXNrcyBjYXVzZXMgb3RoZXIgZGlzYWR2YW50YWdl cy4KLStUaGlzIGlzIGR1ZSB0byByZXF1aXJpbmcgYSB2ZXJ5IGNvbXBsZXggYmFsYW5jaW5nIHN5 c3RlbSB0byBhdCBiZXN0IGFjaGlldmUgc29tZQotK3NlbWJsYW5jZSBvZiBmYWlybmVzcyBhY3Jv c3MgQ1BVcyBhbmQgY2FuIG9ubHkgbWFpbnRhaW4gcmVsYXRpdmVseSBsb3cgbGF0ZW5jeQotK2Zv ciB0YXNrcyBib3VuZCB0byB0aGUgc2FtZSBDUFVzLCBub3QgYWNyb3NzIHRoZW0uIFRvIGluY3Jl YXNlIHNhaWQgZmFpcm5lc3MKLSthbmQgbGF0ZW5jeSBhY3Jvc3MgQ1BVcywgdGhlIGFkdmFudGFn ZSBvZiBsb2NhbCBydW5xdWV1ZSBsb2NraW5nLCB3aGljaCBtYWtlcwotK2ZvciBiZXR0ZXIgc2Nh bGFiaWxpdHksIGlzIGxvc3QgZHVlIHRvIGhhdmluZyB0byBncmFiIG11bHRpcGxlIGxvY2tzLgot KwotK0Egc2lnbmlmaWNhbnQgZmVhdHVyZSBvZiBCRlMgaXMgdGhhdCBhbGwgYWNjb3VudGluZyBp cyBkb25lIHB1cmVseSBiYXNlZCBvbiBDUFUKLSt1c2VkIGFuZCBub3doZXJlIGlzIHNsZWVwIHRp bWUgdXNlZCBpbiBhbnkgd2F5IHRvIGRldGVybWluZSBlbnRpdGxlbWVudCBvcgotK2ludGVyYWN0 aXZpdHkuIEludGVyYWN0aXZpdHkgImVzdGltYXRvcnMiIHRoYXQgdXNlIHNvbWUga2luZCBvZiBz bGVlcC9ydW4KLSthbGdvcml0aG0gYXJlIGRvb21lZCB0byBmYWlsIHRvIGRldGVjdCBhbGwgaW50 ZXJhY3RpdmUgdGFza3MsIGFuZCB0byBmYWxzZWx5IHRhZwotK3Rhc2tzIHRoYXQgYXJlbid0IGlu dGVyYWN0aXZlIGFzIGJlaW5nIHNvLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaXQgaXMK LStjbG9zZSB0byBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGF0IHdoZW4gYSB0YXNrIGlzIHNs ZWVwaW5nLCB3aGV0aGVyIGl0IGlzCi0rZG9pbmcgaXQgdm9sdW50YXJpbHksIGFzIGluIGEgdXNl cnNwYWNlIGFwcGxpY2F0aW9uIHdhaXRpbmcgZm9yIGlucHV0IGluIHRoZQotK2Zvcm0gb2YgYSBt b3VzZSBjbGljayBvciBvdGhlcndpc2UsIG9yIGludm9sdW50YXJpbHksIGJlY2F1c2UgaXQgaXMg d2FpdGluZyBmb3IKLSthbm90aGVyIHRocmVhZCwgcHJvY2VzcywgSS9PLCBrZXJuZWwgYWN0aXZp dHkgb3Igd2hhdGV2ZXIuIFRodXMsIHN1Y2ggYW4KLStlc3RpbWF0b3Igd2lsbCBpbnRyb2R1Y2Ug Y29ybmVyIGNhc2VzLCBhbmQgbW9yZSBoZXVyaXN0aWNzIHdpbGwgYmUgcmVxdWlyZWQgdG8KLStj b3BlIHdpdGggdGhvc2UgY29ybmVyIGNhc2VzLCBpbnRyb2R1Y2luZyBtb3JlIGNvcm5lciBjYXNl cyBhbmQgZmFpbGVkCi0raW50ZXJhY3Rpdml0eSBkZXRlY3Rpb24gYW5kIHNvIG9uLiBJbnRlcmFj dGl2aXR5IGluIEJGUyBpcyBidWlsdCBpbnRvIHRoZSBkZXNpZ24KLStieSB2aXJ0dWUgb2YgdGhl IGZhY3QgdGhhdCB0YXNrcyB0aGF0IGFyZSB3YWtpbmcgdXAgaGF2ZSBub3QgdXNlZCB1cCB0aGVp ciBxdW90YQotK29mIENQVSB0aW1lLCBhbmQgaGF2ZSBlYXJsaWVyIGVmZmVjdGl2ZSBkZWFkbGlu ZXMsIHRoZXJlYnkgbWFraW5nIGl0IHZlcnkgbGlrZWx5Ci0rdGhleSB3aWxsIHByZWVtcHQgYW55 IENQVSBib3VuZCB0YXNrIG9mIGVxdWl2YWxlbnQgbmljZSBsZXZlbC4gU2VlIGJlbG93IGZvcgot K21vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZpcnR1YWwgZGVhZGxpbmUgbWVjaGFuaXNtLiBFdmVu IGlmIHRoZXkgZG8gbm90IHByZWVtcHQKLSthIHJ1bm5pbmcgdGFzaywgYmVjYXVzZSB0aGUgcnIg aW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgYm91bmQgdXBwZXIKLStsaW1pdCBvbiBo b3cgbG9uZyBhIHRhc2sgd2lsbCB3YWl0IGZvciwgaXQgd2lsbCBiZSBzY2hlZHVsZWQgd2l0aGlu IGEgdGltZWZyYW1lCi0rdGhhdCB3aWxsIG5vdCBjYXVzZSB2aXNpYmxlIGludGVyZmFjZSBqaXR0 ZXIuCi0rCi0rCi0rRGVzaWduIGRldGFpbHMuCi0rCi0rVGFzayBpbnNlcnRpb24uCi0rCi0rQkZT IGluc2VydHMgdGFza3MgaW50byBlYWNoIHJlbGV2YW50IHF1ZXVlIGFzIGFuIE8oMSkgaW5zZXJ0 aW9uIGludG8gYSBkb3VibGUKLStsaW5rZWQgbGlzdC4gT24gaW5zZXJ0aW9uLCAqZXZlcnkqIHJ1 bm5pbmcgcXVldWUgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlIG5ld2x5Ci0rcXVldWVkIHRhc2sg Y2FuIHJ1biBvbiBhbnkgaWRsZSBxdWV1ZSwgb3IgcHJlZW1wdCB0aGUgbG93ZXN0IHJ1bm5pbmcg dGFzayBvbiB0aGUKLStzeXN0ZW0uIFRoaXMgaXMgaG93IHRoZSBjcm9zcy1DUFUgc2NoZWR1bGlu ZyBvZiBCRlMgYWNoaWV2ZXMgc2lnbmlmaWNhbnRseSBsb3dlcgotK2xhdGVuY3kgcGVyIGV4dHJh IENQVSB0aGUgc3lzdGVtIGhhcy4gSW4gdGhpcyBjYXNlIHRoZSBsb29rdXAgaXMsIGluIHRoZSB3 b3JzdAotK2Nhc2Ugc2NlbmFyaW8sIE8obikgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIENQVXMg b24gdGhlIHN5c3RlbS4KLSsKLStEYXRhIHByb3RlY3Rpb24uCi0rCi0rQkZTIGhhcyBvbmUgc2lu Z2xlIGxvY2sgcHJvdGVjdGluZyB0aGUgcHJvY2VzcyBsb2NhbCBkYXRhIG9mIGV2ZXJ5IHRhc2sg aW4gdGhlCi0rZ2xvYmFsIHF1ZXVlLiBUaHVzIGV2ZXJ5IGluc2VydGlvbiwgcmVtb3ZhbCBhbmQg bW9kaWZpY2F0aW9uIG9mIHRhc2sgZGF0YSBpbiB0aGUKLStnbG9iYWwgcnVucXVldWUgbmVlZHMg dG8gZ3JhYiB0aGUgZ2xvYmFsIGxvY2suIEhvd2V2ZXIsIG9uY2UgYSB0YXNrIGlzIHRha2VuIGJ5 Ci0rYSBDUFUsIHRoZSBDUFUgaGFzIGl0cyBvd24gbG9jYWwgZGF0YSBjb3B5IG9mIHRoZSBydW5u aW5nIHByb2Nlc3MnIGFjY291bnRpbmcKLStpbmZvcm1hdGlvbiB3aGljaCBvbmx5IHRoYXQgQ1BV IGFjY2Vzc2VzIGFuZCBtb2RpZmllcyAoc3VjaCBhcyBkdXJpbmcgYQotK3RpbWVyIHRpY2spIHRo dXMgYWxsb3dpbmcgdGhlIGFjY291bnRpbmcgZGF0YSB0byBiZSB1cGRhdGVkIGxvY2tsZXNzLiBP bmNlIGEKLStDUFUgaGFzIHRha2VuIGEgdGFzayB0byBydW4sIGl0IHJlbW92ZXMgaXQgZnJvbSB0 aGUgZ2xvYmFsIHF1ZXVlLiBUaHVzIHRoZQotK2dsb2JhbCBxdWV1ZSBvbmx5IGV2ZXIgaGFzLCBh dCBtb3N0LAotKwotKwkobnVtYmVyIG9mIHRhc2tzIHJlcXVlc3RpbmcgY3B1IHRpbWUpIC0gKG51 bWJlciBvZiBsb2dpY2FsIENQVXMpICsgMQotKwotK3Rhc2tzIGluIHRoZSBnbG9iYWwgcXVldWUu IFRoaXMgdmFsdWUgaXMgcmVsZXZhbnQgZm9yIHRoZSB0aW1lIHRha2VuIHRvIGxvb2sgdXAKLSt0 YXNrcyBkdXJpbmcgc2NoZWR1bGluZy4gVGhpcyB3aWxsIGluY3JlYXNlIGlmIG1hbnkgdGFza3Mg d2l0aCBDUFUgYWZmaW5pdHkgc2V0Ci0raW4gdGhlaXIgcG9saWN5IHRvIGxpbWl0IHdoaWNoIENQ VXMgdGhleSdyZSBhbGxvd2VkIHRvIHJ1biBvbiBpZiB0aGV5IG91dG51bWJlcgotK3RoZSBudW1i ZXIgb2YgQ1BVcy4gVGhlICsxIGlzIGJlY2F1c2Ugd2hlbiByZXNjaGVkdWxpbmcgYSB0YXNrLCB0 aGUgQ1BVJ3MKLStjdXJyZW50bHkgcnVubmluZyB0YXNrIGlzIHB1dCBiYWNrIG9uIHRoZSBxdWV1 ZS4gTG9va3VwIHdpbGwgYmUgZGVzY3JpYmVkIGFmdGVyCi0rdGhlIHZpcnR1YWwgZGVhZGxpbmUg bWVjaGFuaXNtIGlzIGV4cGxhaW5lZC4KLSsKLStWaXJ0dWFsIGRlYWRsaW5lLgotKwotK1RoZSBr ZXkgdG8gYWNoaWV2aW5nIGxvdyBsYXRlbmN5LCBzY2hlZHVsaW5nIGZhaXJuZXNzLCBhbmQgIm5p Y2UgbGV2ZWwiCi0rZGlzdHJpYnV0aW9uIGluIEJGUyBpcyBlbnRpcmVseSBpbiB0aGUgdmlydHVh bCBkZWFkbGluZSBtZWNoYW5pc20uIFRoZSBvbmUKLSt0dW5hYmxlIGluIEJGUyBpcyB0aGUgcnJf aW50ZXJ2YWwsIG9yICJyb3VuZCByb2JpbiBpbnRlcnZhbCIuIFRoaXMgaXMgdGhlCi0rbWF4aW11 bSB0aW1lIHR3byBTQ0hFRF9PVEhFUiAob3IgU0NIRURfTk9STUFMLCB0aGUgY29tbW9uIHNjaGVk dWxpbmcgcG9saWN5KQotK3Rhc2tzIG9mIHRoZSBzYW1lIG5pY2UgbGV2ZWwgd2lsbCBiZSBydW5u aW5nIGZvciwgb3IgbG9va2luZyBhdCBpdCB0aGUgb3RoZXIKLSt3YXkgYXJvdW5kLCB0aGUgbG9u Z2VzdCBkdXJhdGlvbiB0d28gdGFza3Mgb2YgdGhlIHNhbWUgbmljZSBsZXZlbCB3aWxsIGJlCi0r ZGVsYXllZCBmb3IuIFdoZW4gYSB0YXNrIHJlcXVlc3RzIGNwdSB0aW1lLCBpdCBpcyBnaXZlbiBh IHF1b3RhICh0aW1lX3NsaWNlKQotK2VxdWFsIHRvIHRoZSBycl9pbnRlcnZhbCBhbmQgYSB2aXJ0 dWFsIGRlYWRsaW5lLiBUaGUgdmlydHVhbCBkZWFkbGluZSBpcwotK29mZnNldCBmcm9tIHRoZSBj dXJyZW50IHRpbWUgaW4gamlmZmllcyBieSB0aGlzIGVxdWF0aW9uOgotKwotKwlqaWZmaWVzICsg KHByaW9fcmF0aW8gKiBycl9pbnRlcnZhbCkKLSsKLStUaGUgcHJpb19yYXRpbyBpcyBkZXRlcm1p bmVkIGFzIGEgcmF0aW8gY29tcGFyZWQgdG8gdGhlIGJhc2VsaW5lIG9mIG5pY2UgLTIwCi0rYW5k IGluY3JlYXNlcyBieSAxMCUgcGVyIG5pY2UgbGV2ZWwuIFRoZSBkZWFkbGluZSBpcyBhIHZpcnR1 YWwgb25lIG9ubHkgaW4gdGhhdAotK25vIGd1YXJhbnRlZSBpcyBwbGFjZWQgdGhhdCBhIHRhc2sg d2lsbCBhY3R1YWxseSBiZSBzY2hlZHVsZWQgYnkgdGhpcyB0aW1lLCBidXQKLStpdCBpcyB1c2Vk IHRvIGNvbXBhcmUgd2hpY2ggdGFzayBzaG91bGQgZ28gbmV4dC4gVGhlcmUgYXJlIHRocmVlIGNv bXBvbmVudHMgdG8KLStob3cgYSB0YXNrIGlzIG5leHQgY2hvc2VuLiBGaXJzdCBpcyB0aW1lX3Ns aWNlIGV4cGlyYXRpb24uIElmIGEgdGFzayBydW5zIG91dAotK29mIGl0cyB0aW1lX3NsaWNlLCBp dCBpcyBkZXNjaGVkdWxlZCwgdGhlIHRpbWVfc2xpY2UgaXMgcmVmaWxsZWQsIGFuZCB0aGUKLStk ZWFkbGluZSByZXNldCB0byB0aGF0IGZvcm11bGEgYWJvdmUuIFNlY29uZCBpcyBzbGVlcCwgd2hl cmUgYSB0YXNrIG5vIGxvbmdlcgotK2lzIHJlcXVlc3RpbmcgQ1BVIGZvciB3aGF0ZXZlciByZWFz b24uIFRoZSB0aW1lX3NsaWNlIGFuZCBkZWFkbGluZSBhcmUgX25vdF8KLSthZGp1c3RlZCBpbiB0 aGlzIGNhc2UgYW5kIGFyZSBqdXN0IGNhcnJpZWQgb3ZlciBmb3Igd2hlbiB0aGUgdGFzayBpcyBu ZXh0Ci0rc2NoZWR1bGVkLiBUaGlyZCBpcyBwcmVlbXB0aW9uLCBhbmQgdGhhdCBpcyB3aGVuIGEg bmV3bHkgd2FraW5nIHRhc2sgaXMgZGVlbWVkCi0raGlnaGVyIHByaW9yaXR5IHRoYW4gYSBjdXJy ZW50bHkgcnVubmluZyB0YXNrIG9uIGFueSBjcHUgYnkgdmlydHVlIG9mIHRoZSBmYWN0Ci0rdGhh dCBpdCBoYXMgYW4gZWFybGllciB2aXJ0dWFsIGRlYWRsaW5lIHRoYW4gdGhlIGN1cnJlbnRseSBy dW5uaW5nIHRhc2suIFRoZQotK2VhcmxpZXIgZGVhZGxpbmUgaXMgdGhlIGtleSB0byB3aGljaCB0 YXNrIGlzIG5leHQgY2hvc2VuIGZvciB0aGUgZmlyc3QgYW5kCi0rc2Vjb25kIGNhc2VzLiBPbmNl IGEgdGFzayBpcyBkZXNjaGVkdWxlZCwgaXQgaXMgcHV0IGJhY2sgb24gdGhlIHF1ZXVlLCBhbmQg YW4KLStPKG4pIGxvb2t1cCBvZiBhbGwgcXVldWVkLWJ1dC1ub3QtcnVubmluZyB0YXNrcyBpcyBk b25lIHRvIGRldGVybWluZSB3aGljaCBoYXMKLSt0aGUgZWFybGllc3QgZGVhZGxpbmUgYW5kIHRo YXQgdGFzayBpcyBjaG9zZW4gdG8gcmVjZWl2ZSBDUFUgbmV4dC4KLSsKLStUaGUgQ1BVIHByb3Bv cnRpb24gb2YgZGlmZmVyZW50IG5pY2UgdGFza3Mgd29ya3Mgb3V0IHRvIGJlIGFwcHJveGltYXRl bHkgdGhlCi0rCi0rCShwcmlvX3JhdGlvIGRpZmZlcmVuY2UpXjIKLSsKLStUaGUgcmVhc29uIGl0 IGlzIHNxdWFyZWQgaXMgdGhhdCBhIHRhc2sncyBkZWFkbGluZSBkb2VzIG5vdCBjaGFuZ2Ugd2hp bGUgaXQgaXMKLStydW5uaW5nIHVubGVzcyBpdCBydW5zIG91dCBvZiB0aW1lX3NsaWNlLiBUaHVz LCBldmVuIGlmIHRoZSB0aW1lIGFjdHVhbGx5Ci0rcGFzc2VzIHRoZSBkZWFkbGluZSBvZiBhbm90 aGVyIHRhc2sgdGhhdCBpcyBxdWV1ZWQsIGl0IHdpbGwgbm90IGdldCBDUFUgdGltZQotK3VubGVz cyB0aGUgY3VycmVudCBydW5uaW5nIHRhc2sgZGVzY2hlZHVsZXMsIGFuZCB0aGUgdGltZSAiYmFz ZSIgKGppZmZpZXMpIGlzCi0rY29uc3RhbnRseSBtb3ZpbmcuCi0rCi0rVGFzayBsb29rdXAuCi0r Ci0rQkZTIGhhcyAxMDMgcHJpb3JpdHkgcXVldWVzLiAxMDAgb2YgdGhlc2UgYXJlIGRlZGljYXRl ZCB0byB0aGUgc3RhdGljIHByaW9yaXR5Ci0rb2YgcmVhbHRpbWUgdGFza3MsIGFuZCB0aGUgcmVt YWluaW5nIDMgYXJlLCBpbiBvcmRlciBvZiBiZXN0IHRvIHdvcnN0IHByaW9yaXR5LAotK1NDSEVE X0lTTyAoaXNvY2hyb25vdXMpLCBTQ0hFRF9OT1JNQUwsIGFuZCBTQ0hFRF9JRExFUFJJTyAoaWRs ZSBwcmlvcml0eQotK3NjaGVkdWxpbmcpLiBXaGVuIGEgdGFzayBvZiB0aGVzZSBwcmlvcml0aWVz IGlzIHF1ZXVlZCwgYSBiaXRtYXAgb2YgcnVubmluZwotK3ByaW9yaXRpZXMgaXMgc2V0IHNob3dp bmcgd2hpY2ggb2YgdGhlc2UgcHJpb3JpdGllcyBoYXMgdGFza3Mgd2FpdGluZyBmb3IgQ1BVCi0r dGltZS4gV2hlbiBhIENQVSBpcyBtYWRlIHRvIHJlc2NoZWR1bGUsIHRoZSBsb29rdXAgZm9yIHRo ZSBuZXh0IHRhc2sgdG8gZ2V0Ci0rQ1BVIHRpbWUgaXMgcGVyZm9ybWVkIGluIHRoZSBmb2xsb3dp bmcgd2F5OgotKwotK0ZpcnN0IHRoZSBiaXRtYXAgaXMgY2hlY2tlZCB0byBzZWUgd2hhdCBzdGF0 aWMgcHJpb3JpdHkgdGFza3MgYXJlIHF1ZXVlZC4gSWYKLSthbnkgcmVhbHRpbWUgcHJpb3JpdGll cyBhcmUgZm91bmQsIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlIGlzIGNoZWNrZWQgYW5kIHRoZQot K2ZpcnN0IHRhc2sgbGlzdGVkIHRoZXJlIGlzIHRha2VuIChwcm92aWRlZCBDUFUgYWZmaW5pdHkg aXMgc3VpdGFibGUpIGFuZCBsb29rdXAKLStpcyBjb21wbGV0ZS4gSWYgdGhlIHByaW9yaXR5IGNv cnJlc3BvbmRzIHRvIGEgU0NIRURfSVNPIHRhc2ssIHRoZXkgYXJlIGFsc28KLSt0YWtlbiBpbiBG SUZPIG9yZGVyIChhcyB0aGV5IGJlaGF2ZSBsaWtlIFNDSEVEX1JSKS4gSWYgdGhlIHByaW9yaXR5 IGNvcnJlc3BvbmRzCi0rdG8gZWl0aGVyIFNDSEVEX05PUk1BTCBvciBTQ0hFRF9JRExFUFJJTywg dGhlbiB0aGUgbG9va3VwIGJlY29tZXMgTyhuKS4gQXQgdGhpcwotK3N0YWdlLCBldmVyeSB0YXNr IGluIHRoZSBydW5saXN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhhdCBwcmlvcml0eSBpcyBjaGVj a2VkCi0rdG8gc2VlIHdoaWNoIGhhcyB0aGUgZWFybGllc3Qgc2V0IGRlYWRsaW5lLCBhbmQgKHBy b3ZpZGVkIGl0IGhhcyBzdWl0YWJsZSBDUFUKLSthZmZpbml0eSkgaXQgaXMgdGFrZW4gb2ZmIHRo ZSBydW5xdWV1ZSBhbmQgZ2l2ZW4gdGhlIENQVS4gSWYgYSB0YXNrIGhhcyBhbgotK2V4cGlyZWQg ZGVhZGxpbmUsIGl0IGlzIHRha2VuIGFuZCB0aGUgcmVzdCBvZiB0aGUgbG9va3VwIGFib3J0ZWQg KGFzIHRoZXkgYXJlCi0rY2hvc2VuIGluIEZJRk8gb3JkZXIpLgotKwotK1RodXMsIHRoZSBsb29r dXAgaXMgTyhuKSBpbiB0aGUgd29yc3QgY2FzZSBvbmx5LCB3aGVyZSBuIGlzIGFzIGRlc2NyaWJl ZAotK2VhcmxpZXIsIGFzIHRhc2tzIG1heSBiZSBjaG9zZW4gYmVmb3JlIHRoZSB3aG9sZSB0YXNr IGxpc3QgaXMgbG9va2VkIG92ZXIuCi0rCi0rCi0rU2NhbGFiaWxpdHkuCi0rCi0rVGhlIG1ham9y IGxpbWl0YXRpb25zIG9mIEJGUyB3aWxsIGJlIHRoYXQgb2Ygc2NhbGFiaWxpdHksIGFzIHRoZSBz ZXBhcmF0ZQotK3J1bnF1ZXVlIGRlc2lnbnMgd2lsbCBoYXZlIGxlc3MgbG9jayBjb250ZW50aW9u IGFzIHRoZSBudW1iZXIgb2YgQ1BVcyByaXNlcy4KLStIb3dldmVyIHRoZXkgZG8gbm90IHNjYWxl IGxpbmVhcmx5IGV2ZW4gd2l0aCBzZXBhcmF0ZSBydW5xdWV1ZXMgYXMgbXVsdGlwbGUKLStydW5x dWV1ZXMgd2lsbCBuZWVkIHRvIGJlIGxvY2tlZCBjb25jdXJyZW50bHkgb24gc3VjaCBkZXNpZ25z IHRvIGJlIGFibGUgdG8KLSthY2hpZXZlIGZhaXIgQ1BVIGJhbGFuY2luZywgdG8gdHJ5IGFuZCBh Y2hpZXZlIHNvbWUgc29ydCBvZiBuaWNlLWxldmVsIGZhaXJuZXNzCi0rYWNyb3NzIENQVXMsIGFu ZCB0byBhY2hpZXZlIGxvdyBlbm91Z2ggbGF0ZW5jeSBmb3IgdGFza3Mgb24gYSBidXN5IENQVSB3 aGVuCi0rb3RoZXIgQ1BVcyB3b3VsZCBiZSBtb3JlIHN1aXRlZC4gQkZTIGhhcyB0aGUgYWR2YW50 YWdlIHRoYXQgaXQgcmVxdWlyZXMgbm8KLStiYWxhbmNpbmcgYWxnb3JpdGhtIHdoYXRzb2V2ZXIs IGFzIGJhbGFuY2luZyBvY2N1cnMgYnkgcHJveHkgc2ltcGx5IGJlY2F1c2UKLSthbGwgQ1BVcyBk cmF3IG9mZiB0aGUgZ2xvYmFsIHJ1bnF1ZXVlLCBpbiBwcmlvcml0eSBhbmQgZGVhZGxpbmUgb3Jk ZXIuIERlc3BpdGUKLSt0aGUgZmFjdCB0aGF0IHNjYWxhYmlsaXR5IGlzIF9ub3RfIHRoZSBwcmlt ZSBjb25jZXJuIG9mIEJGUywgaXQgYm90aCBzaG93cyB2ZXJ5Ci0rZ29vZCBzY2FsYWJpbGl0eSB0 byBzbWFsbGVyIG51bWJlcnMgb2YgQ1BVcyBhbmQgaXMgbGlrZWx5IGEgbW9yZSBzY2FsYWJsZSBk ZXNpZ24KLSthdCB0aGVzZSBudW1iZXJzIG9mIENQVXMuCi0rCi0rSXQgYWxzbyBoYXMgc29tZSB2 ZXJ5IGxvdyBvdmVyaGVhZCBzY2FsYWJpbGl0eSBmZWF0dXJlcyBidWlsdCBpbnRvIHRoZSBkZXNp Z24KLSt3aGVuIGl0IGhhcyBiZWVuIGRlZW1lZCB0aGVpciBvdmVyaGVhZCBpcyBzbyBtYXJnaW5h bCB0aGF0IHRoZXkncmUgd29ydGggYWRkaW5nLgotK1RoZSBmaXJzdCBpcyB0aGUgbG9jYWwgY29w eSBvZiB0aGUgcnVubmluZyBwcm9jZXNzJyBkYXRhIHRvIHRoZSBDUFUgaXQncyBydW5uaW5nCi0r b24gdG8gYWxsb3cgdGhhdCBkYXRhIHRvIGJlIHVwZGF0ZWQgbG9ja2xlc3Mgd2hlcmUgcG9zc2li bGUuIFRoZW4gdGhlcmUgaXMKLStkZWZlcmVuY2UgcGFpZCB0byB0aGUgbGFzdCBDUFUgYSB0YXNr IHdhcyBydW5uaW5nIG9uLCBieSB0cnlpbmcgdGhhdCBDUFUgZmlyc3QKLSt3aGVuIGxvb2tpbmcg Zm9yIGFuIGlkbGUgQ1BVIHRvIHVzZSB0aGUgbmV4dCB0aW1lIGl0J3Mgc2NoZWR1bGVkLiBGaW5h bGx5IHRoZXJlCi0raXMgdGhlIG5vdGlvbiBvZiAic3RpY2t5IiB0YXNrcyB0aGF0IGFyZSBmbGFn Z2VkIHdoZW4gdGhleSBhcmUgaW52b2x1bnRhcmlseQotK2Rlc2NoZWR1bGVkLCBtZWFuaW5nIHRo ZXkgc3RpbGwgd2FudCBmdXJ0aGVyIENQVSB0aW1lLiBUaGlzIHN0aWNreSBmbGFnIGlzCi0rdXNl ZCB0byBiaWFzIGhlYXZpbHkgYWdhaW5zdCB0aG9zZSB0YXNrcyBiZWluZyBzY2hlZHVsZWQgb24g YSBkaWZmZXJlbnQgQ1BVCi0rdW5sZXNzIHRoYXQgQ1BVIHdvdWxkIGJlIG90aGVyd2lzZSBpZGxl LiBXaGVuIGEgY3B1IGZyZXF1ZW5jeSBnb3Zlcm5vciBpcyB1c2VkCi0rdGhhdCBzY2FsZXMgd2l0 aCBDUFUgbG9hZCwgc3VjaCBhcyBvbmRlbWFuZCwgc3RpY2t5IHRhc2tzIGFyZSBub3Qgc2NoZWR1 bGVkCi0rb24gYSBkaWZmZXJlbnQgQ1BVIGF0IGFsbCwgcHJlZmVycmluZyBpbnN0ZWFkIHRvIGdv IGlkbGUuIFRoaXMgbWVhbnMgdGhlIENQVQotK3RoZXkgd2VyZSBib3VuZCB0byBpcyBtb3JlIGxp a2VseSB0byBpbmNyZWFzZSBpdHMgc3BlZWQgd2hpbGUgdGhlIG90aGVyIENQVQotK3dpbGwgZ28g aWRsZSwgdGh1cyBzcGVlZGluZyB1cCB0b3RhbCB0YXNrIGV4ZWN1dGlvbiB0aW1lIGFuZCBsaWtl bHkgZGVjcmVhc2luZwotK3Bvd2VyIHVzYWdlLiBUaGlzIGlzIHRoZSBvbmx5IHNjZW5hcmlvIHdo ZXJlIEJGUyB3aWxsIGFsbG93IGEgQ1BVIHRvIGdvIGlkbGUKLStpbiBwcmVmZXJlbmNlIHRvIHNj aGVkdWxpbmcgYSB0YXNrIG9uIHRoZSBlYXJsaWVzdCBhdmFpbGFibGUgc3BhcmUgQ1BVLgotKwot K1RoZSByZWFsIGNvc3Qgb2YgbWlncmF0aW5nIGEgdGFzayBmcm9tIG9uZSBDUFUgdG8gYW5vdGhl ciBpcyBlbnRpcmVseSBkZXBlbmRhbnQKLStvbiB0aGUgY2FjaGUgZm9vdHByaW50IG9mIHRoZSB0 YXNrLCBob3cgY2FjaGUgaW50ZW5zaXZlIHRoZSB0YXNrIGlzLCBob3cgbG9uZwotK2l0J3MgYmVl biBydW5uaW5nIG9uIHRoYXQgQ1BVIHRvIHRha2UgdXAgdGhlIGJ1bGsgb2YgaXRzIGNhY2hlLCBo b3cgYmlnIHRoZSBDUFUKLStjYWNoZSBpcywgaG93IGZhc3QgYW5kIGhvdyBsYXllcmVkIHRoZSBD UFUgY2FjaGUgaXMsIGhvdyBmYXN0IGEgY29udGV4dCBzd2l0Y2gKLStpcy4uLiBhbmQgc28gb24u IEluIG90aGVyIHdvcmRzLCBpdCdzIGNsb3NlIHRvIHJhbmRvbSBpbiB0aGUgcmVhbCB3b3JsZCB3 aGVyZSB3ZQotK2RvIG1vcmUgdGhhbiBqdXN0IG9uZSBzb2xlIHdvcmtsb2FkLiBUaGUgb25seSB0 aGluZyB3ZSBjYW4gYmUgc3VyZSBvZiBpcyB0aGF0Ci0raXQncyBub3QgZnJlZS4gU28gQkZTIHVz ZXMgdGhlIHByaW5jaXBsZSB0aGF0IGFuIGlkbGUgQ1BVIGlzIGEgd2FzdGVkIENQVSBhbmQKLSt1 dGlsaXNpbmcgaWRsZSBDUFVzIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gY2FjaGUgbG9jYWxpdHks IGFuZCBjYWNoZSBsb2NhbGl0eQotK29ubHkgcGxheXMgYSBwYXJ0IGFmdGVyIHRoYXQuCi0rCi0r V2hlbiBjaG9vc2luZyBhbiBpZGxlIENQVSBmb3IgYSB3YWtpbmcgdGFzaywgdGhlIGNhY2hlIGxv Y2FsaXR5IGlzIGRldGVybWluZWQKLSthY2NvcmRpbmcgdG8gd2hlcmUgdGhlIHRhc2sgbGFzdCBy YW4gYW5kIHRoZW4gaWRsZSBDUFVzIGFyZSByYW5rZWQgZnJvbSBiZXN0Ci0rdG8gd29yc3QgdG8g Y2hvb3NlIHRoZSBtb3N0IHN1aXRhYmxlIGlkbGUgQ1BVIGJhc2VkIG9uIGNhY2hlIGxvY2FsaXR5 LCBOVU1BCi0rbm9kZSBsb2NhbGl0eSBhbmQgaHlwZXJ0aHJlYWQgc2libGluZyBidXNpbmVzcy4g VGhleSBhcmUgY2hvc2VuIGluIHRoZQotK2ZvbGxvd2luZyBwcmVmZXJlbmNlIChpZiBpZGxlKToK LSsKLSsqIFNhbWUgY29yZSwgaWRsZSBvciBidXN5IGNhY2hlLCBpZGxlIHRocmVhZHMKLSsqIE90 aGVyIGNvcmUsIHNhbWUgY2FjaGUsIGlkbGUgb3IgYnVzeSBjYWNoZSwgaWRsZSB0aHJlYWRzLgot KyogU2FtZSBub2RlLCBvdGhlciBDUFUsIGlkbGUgY2FjaGUsIGlkbGUgdGhyZWFkcy4KLSsqIFNh bWUgbm9kZSwgb3RoZXIgQ1BVLCBidXN5IGNhY2hlLCBpZGxlIHRocmVhZHMuCi0rKiBTYW1lIGNv cmUsIGJ1c3kgdGhyZWFkcy4KLSsqIE90aGVyIGNvcmUsIHNhbWUgY2FjaGUsIGJ1c3kgdGhyZWFk cy4KLSsqIFNhbWUgbm9kZSwgb3RoZXIgQ1BVLCBidXN5IHRocmVhZHMuCi0rKiBPdGhlciBub2Rl LCBvdGhlciBDUFUsIGlkbGUgY2FjaGUsIGlkbGUgdGhyZWFkcy4KLSsqIE90aGVyIG5vZGUsIG90 aGVyIENQVSwgYnVzeSBjYWNoZSwgaWRsZSB0aHJlYWRzLgotKyogT3RoZXIgbm9kZSwgb3RoZXIg Q1BVLCBidXN5IHRocmVhZHMuCi0rCi0rVGhpcyBzaG93cyB0aGUgU01UIG9yICJoeXBlcnRocmVh ZCIgYXdhcmVuZXNzIGluIHRoZSBkZXNpZ24gYXMgd2VsbCB3aGljaCB3aWxsCi0rY2hvb3NlIGEg cmVhbCBpZGxlIGNvcmUgZmlyc3QgYmVmb3JlIGEgbG9naWNhbCBTTVQgc2libGluZyB3aGljaCBh bHJlYWR5IGhhcwotK3Rhc2tzIG9uIHRoZSBwaHlzaWNhbCBDUFUuCi0rCi0rRWFybHkgYmVuY2ht YXJraW5nIG9mIEJGUyBzdWdnZXN0ZWQgc2NhbGFiaWxpdHkgZHJvcHBlZCBvZmYgYXQgdGhlIDE2 IENQVSBtYXJrLgotK0hvd2V2ZXIgdGhpcyBiZW5jaG1hcmtpbmcgd2FzIHBlcmZvcm1lZCBvbiBh biBlYXJsaWVyIGRlc2lnbiB0aGF0IHdhcyBmYXIgbGVzcwotK3NjYWxhYmxlIHRoYW4gdGhlIGN1 cnJlbnQgb25lIHNvIGl0J3MgaGFyZCB0byBrbm93IGhvdyBzY2FsYWJsZSBpdCBpcyBpbiB0ZXJt cwotK29mIGJvdGggQ1BVcyAoZHVlIHRvIHRoZSBnbG9iYWwgcnVucXVldWUpIGFuZCBoZWF2aWx5 IGxvYWRlZCBtYWNoaW5lcyAoZHVlIHRvCi0rTyhuKSBsb29rdXApIGF0IHRoaXMgc3RhZ2UuIE5v dGUgdGhhdCBpbiB0ZXJtcyBvZiBzY2FsYWJpbGl0eSwgdGhlIG51bWJlciBvZgotK19sb2dpY2Fs XyBDUFVzIG1hdHRlcnMsIG5vdCB0aGUgbnVtYmVyIG9mIF9waHlzaWNhbF8gQ1BVcy4gVGh1cywg YSBkdWFsICgyeCkKLStxdWFkIGNvcmUgKDRYKSBoeXBlcnRocmVhZGVkICgyWCkgbWFjaGluZSBp cyBlZmZlY3RpdmVseSBhIDE2WC4gTmV3ZXIgYmVuY2htYXJrCi0rcmVzdWx0cyBhcmUgdmVyeSBw cm9taXNpbmcgaW5kZWVkLCB3aXRob3V0IG5lZWRpbmcgdG8gdHdlYWsgYW55IGtub2JzLCBmZWF0 dXJlcwotK29yIG9wdGlvbnMuIEJlbmNobWFyayBjb250cmlidXRpb25zIGFyZSBtb3N0IHdlbGNv bWUuCi0rCi0rCi0rRmVhdHVyZXMKLSsKLStBcyB0aGUgaW5pdGlhbCBwcmltZSB0YXJnZXQgYXVk aWVuY2UgZm9yIEJGUyB3YXMgdGhlIGF2ZXJhZ2UgZGVza3RvcCB1c2VyLCBpdAotK3dhcyBkZXNp Z25lZCB0byBub3QgbmVlZCB0d2Vha2luZywgdHVuaW5nIG9yIGhhdmUgZmVhdHVyZXMgc2V0IHRv IG9idGFpbiBiZW5lZml0Ci0rZnJvbSBpdC4gVGh1cyB0aGUgbnVtYmVyIG9mIGtub2JzIGFuZCBm ZWF0dXJlcyBoYXMgYmVlbiBrZXB0IHRvIGFuIGFic29sdXRlCi0rbWluaW11bSBhbmQgc2hvdWxk IG5vdCByZXF1aXJlIGV4dHJhIHVzZXIgaW5wdXQgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNh c2VzLgotK1RoZXJlIGFyZSBwcmVjaXNlbHkgMiB0dW5hYmxlcywgYW5kIDIgZXh0cmEgc2NoZWR1 bGluZyBwb2xpY2llcy4gVGhlIHJyX2ludGVydmFsCi0rYW5kIGlzb19jcHUgdHVuYWJsZXMsIGFu ZCB0aGUgU0NIRURfSVNPIGFuZCBTQ0hFRF9JRExFUFJJTyBwb2xpY2llcy4gSW4gYWRkaXRpb24K LSt0byB0aGlzLCBCRlMgYWxzbyB1c2VzIHN1Yi10aWNrIGFjY291bnRpbmcuIFdoYXQgQkZTIGRv ZXMgX25vdF8gbm93IGZlYXR1cmUgaXMKLStzdXBwb3J0IGZvciBDR1JPVVBTLiBUaGUgYXZlcmFn ZSB1c2VyIHNob3VsZCBuZWl0aGVyIG5lZWQgdG8ga25vdyB3aGF0IHRoZXNlCi0rYXJlLCBub3Ig c2hvdWxkIHRoZXkgbmVlZCB0byBiZSB1c2luZyB0aGVtIHRvIGhhdmUgZ29vZCBkZXNrdG9wIGJl aGF2aW91ci4KLSsKLStycl9pbnRlcnZhbAotKwotK1RoZXJlIGlzIG9ubHkgb25lICJzY2hlZHVs ZXIiIHR1bmFibGUsIHRoZSByb3VuZCByb2JpbiBpbnRlcnZhbC4gVGhpcyBjYW4gYmUKLSthY2Nl c3NlZCBpbgotKwotKwkvcHJvYy9zeXMva2VybmVsL3JyX2ludGVydmFsCi0rCi0rVGhlIHZhbHVl IGlzIGluIG1pbGxpc2Vjb25kcywgYW5kIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCB0byA2bXMu IFZhbGlkIHZhbHVlcwotK2FyZSBmcm9tIDEgdG8gMTAwMC4gRGVjcmVhc2luZyB0aGUgdmFsdWUg d2lsbCBkZWNyZWFzZSBsYXRlbmNpZXMgYXQgdGhlIGNvc3Qgb2YKLStkZWNyZWFzaW5nIHRocm91 Z2hwdXQsIHdoaWxlIGluY3JlYXNpbmcgaXQgd2lsbCBpbXByb3ZlIHRocm91Z2hwdXQsIGJ1dCBh dCB0aGUKLStjb3N0IG9mIHdvcnNlbmluZyBsYXRlbmNpZXMuIFRoZSBhY2N1cmFjeSBvZiB0aGUg cnIgaW50ZXJ2YWwgaXMgbGltaXRlZCBieSBIWgotK3Jlc29sdXRpb24gb2YgdGhlIGtlcm5lbCBj b25maWd1cmF0aW9uLiBUaHVzLCB0aGUgd29yc3QgY2FzZSBsYXRlbmNpZXMgYXJlCi0rdXN1YWxs eSBzbGlnaHRseSBoaWdoZXIgdGhhbiB0aGlzIGFjdHVhbCB2YWx1ZS4gQkZTIHVzZXMgImRpdGhl cmluZyIgdG8gdHJ5IGFuZAotK21pbmltaXNlIHRoZSBlZmZlY3QgdGhlIEh6IGxpbWl0YXRpb24g aGFzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA2IGlzIG5vdCBhbgotK2FyYml0cmFyeSBvbmUuIEl0 IGlzIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgaHVtYW5zIGNhbiBkZXRlY3Qgaml0dGVyIGF0Ci0r YXBwcm94aW1hdGVseSA3bXMsIHNvIGFpbWluZyBmb3IgbXVjaCBsb3dlciBsYXRlbmNpZXMgaXMg cG9pbnRsZXNzIHVuZGVyIG1vc3QKLStjaXJjdW1zdGFuY2VzLiBJdCBpcyB3b3J0aCBub3Rpbmcg dGhpcyBmYWN0IHdoZW4gY29tcGFyaW5nIHRoZSBsYXRlbmN5Ci0rcGVyZm9ybWFuY2Ugb2YgQkZT IHRvIG90aGVyIHNjaGVkdWxlcnMuIFdvcnN0IGNhc2UgbGF0ZW5jaWVzIGJlaW5nIGhpZ2hlciB0 aGFuCi0rN21zIGFyZSBmYXIgd29yc2UgdGhhbiBhdmVyYWdlIGxhdGVuY2llcyBub3QgYmVpbmcg aW4gdGhlIG1pY3Jvc2Vjb25kIHJhbmdlLgotK0V4cGVyaW1lbnRhdGlvbiBoYXMgc2hvd24gdGhh dCByciBpbnRlcnZhbHMgYmVpbmcgaW5jcmVhc2VkIHVwIHRvIDMwMCBjYW4KLStpbXByb3ZlIHRo cm91Z2hwdXQgYnV0IGJleW9uZCB0aGF0LCBzY2hlZHVsaW5nIG5vaXNlIGZyb20gZWxzZXdoZXJl IHByZXZlbnRzCi0rZnVydGhlciBkZW1vbnN0cmFibGUgdGhyb3VnaHB1dC4KLSsKLStJc29jaHJv bm91cyBzY2hlZHVsaW5nLgotKwotK0lzb2Nocm9ub3VzIHNjaGVkdWxpbmcgaXMgYSB1bmlxdWUg c2NoZWR1bGluZyBwb2xpY3kgZGVzaWduZWQgdG8gcHJvdmlkZQotK25lYXItcmVhbC10aW1lIHBl cmZvcm1hbmNlIHRvIHVucHJpdmlsZWdlZCAoaWUgbm9uLXJvb3QpIHVzZXJzIHdpdGhvdXQgdGhl Ci0rYWJpbGl0eSB0byBzdGFydmUgdGhlIG1hY2hpbmUgaW5kZWZpbml0ZWx5LiBJc29jaHJvbm91 cyB0YXNrcyAod2hpY2ggbWVhbnMKLSsic2FtZSB0aW1lIikgYXJlIHNldCB1c2luZywgZm9yIGV4 YW1wbGUsIHRoZSBzY2hlZHRvb2wgYXBwbGljYXRpb24gbGlrZSBzbzoKLSsKLSsJc2NoZWR0b29s IC1JIC1lIGFtYXJvawotKwotK1RoaXMgd2lsbCBzdGFydCB0aGUgYXVkaW8gYXBwbGljYXRpb24g ImFtYXJvayIgYXMgU0NIRURfSVNPLiBIb3cgU0NIRURfSVNPIHdvcmtzCi0raXMgdGhhdCBpdCBo YXMgYSBwcmlvcml0eSBsZXZlbCBiZXR3ZWVuIHRydWUgcmVhbHRpbWUgdGFza3MgYW5kIFNDSEVE X05PUk1BTAotK3doaWNoIHdvdWxkIGFsbG93IHRoZW0gdG8gcHJlZW1wdCBhbGwgbm9ybWFsIHRh c2tzLCBpbiBhIFNDSEVEX1JSIGZhc2hpb24gKGllLAotK2lmIG11bHRpcGxlIFNDSEVEX0lTTyB0 YXNrcyBhcmUgcnVubmluZywgdGhleSBwdXJlbHkgcm91bmQgcm9iaW4gYXQgcnJfaW50ZXJ2YWwK LStyYXRlKS4gSG93ZXZlciBpZiBJU08gdGFza3MgcnVuIGZvciBtb3JlIHRoYW4gYSB0dW5hYmxl IGZpbml0ZSBhbW91bnQgb2YgdGltZSwKLSt0aGV5IGFyZSB0aGVuIGRlbW90ZWQgYmFjayB0byBT Q0hFRF9OT1JNQUwgc2NoZWR1bGluZy4gVGhpcyBmaW5pdGUgYW1vdW50IG9mCi0rdGltZSBpcyB0 aGUgcGVyY2VudGFnZSBvZiBfdG90YWwgQ1BVXyBhdmFpbGFibGUgYWNyb3NzIHRoZSBtYWNoaW5l LCBjb25maWd1cmFibGUKLSthcyBhIHBlcmNlbnRhZ2UgaW4gdGhlIGZvbGxvd2luZyAicmVzb3Vy Y2UgaGFuZGxpbmciIHR1bmFibGUgKGFzIG9wcG9zZWQgdG8gYQotK3NjaGVkdWxlciB0dW5hYmxl KToKLSsKLSsJL3Byb2Mvc3lzL2tlcm5lbC9pc29fY3B1Ci0rCi0rYW5kIGlzIHNldCB0byA3MCUg YnkgZGVmYXVsdC4gSXQgaXMgY2FsY3VsYXRlZCBvdmVyIGEgcm9sbGluZyA1IHNlY29uZCBhdmVy YWdlCi0rQmVjYXVzZSBpdCBpcyB0aGUgdG90YWwgQ1BVIGF2YWlsYWJsZSwgaXQgbWVhbnMgdGhh dCBvbiBhIG11bHRpIENQVSBtYWNoaW5lLCBpdAotK2lzIHBvc3NpYmxlIHRvIGhhdmUgYW4gSVNP IHRhc2sgcnVubmluZyBhcyByZWFsdGltZSBzY2hlZHVsaW5nIGluZGVmaW5pdGVseSBvbgotK2p1 c3Qgb25lIENQVSwgYXMgdGhlIG90aGVyIENQVXMgd2lsbCBiZSBhdmFpbGFibGUuIFNldHRpbmcg dGhpcyB0byAxMDAgaXMgdGhlCi0rZXF1aXZhbGVudCBvZiBnaXZpbmcgYWxsIHVzZXJzIFNDSEVE X1JSIGFjY2VzcyBhbmQgc2V0dGluZyBpdCB0byAwIHJlbW92ZXMgdGhlCi0rYWJpbGl0eSB0byBy dW4gYW55IHBzZXVkby1yZWFsdGltZSB0YXNrcy4KLSsKLStBIGZlYXR1cmUgb2YgQkZTIGlzIHRo YXQgaXQgZGV0ZWN0cyB3aGVuIGFuIGFwcGxpY2F0aW9uIHRyaWVzIHRvIG9idGFpbiBhCi0rcmVh bHRpbWUgcG9saWN5IChTQ0hFRF9SUiBvciBTQ0hFRF9GSUZPKSBhbmQgdGhlIGNhbGxlciBkb2Vz IG5vdCBoYXZlIHRoZQotK2FwcHJvcHJpYXRlIHByaXZpbGVnZXMgdG8gdXNlIHRob3NlIHBvbGlj aWVzLiBXaGVuIGl0IGRldGVjdHMgdGhpcywgaXQgd2lsbAotK2dpdmUgdGhlIHRhc2sgU0NIRURf SVNPIHBvbGljeSBpbnN0ZWFkLiBUaHVzIGl0IGlzIHRyYW5zcGFyZW50IHRvIHRoZSB1c2VyLgot K0JlY2F1c2Ugc29tZSBhcHBsaWNhdGlvbnMgY29uc3RhbnRseSBzZXQgdGhlaXIgcG9saWN5IGFz IHdlbGwgYXMgdGhlaXIgbmljZQotK2xldmVsLCB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHRoZW0g dG8gdW5kbyB0aGUgb3ZlcnJpZGUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyCi0rb24gdGhlIGNvbW1h bmQgbGluZSBvZiBzZXR0aW5nIHRoZSBwb2xpY3kgdG8gU0NIRURfSVNPLiBUbyBjb3VudGVyIHRo aXMsIG9uY2UKLSthIHRhc2sgaGFzIGJlZW4gc2V0IHRvIFNDSEVEX0lTTyBwb2xpY3ksIGl0IG5l ZWRzIHN1cGVydXNlciBwcml2aWxlZ2VzIHRvIHNldAotK2l0IGJhY2sgdG8gU0NIRURfTk9STUFM LiBUaGlzIHdpbGwgZW5zdXJlIHRoZSB0YXNrIHJlbWFpbnMgSVNPIGFuZCBhbGwgY2hpbGQKLStw cm9jZXNzZXMgYW5kIHRocmVhZHMgd2lsbCBhbHNvIGluaGVyaXQgdGhlIElTTyBwb2xpY3kuCi0r Ci0rSWRsZXByaW8gc2NoZWR1bGluZy4KLSsKLStJZGxlcHJpbyBzY2hlZHVsaW5nIGlzIGEgc2No ZWR1bGluZyBwb2xpY3kgZGVzaWduZWQgdG8gZ2l2ZSBvdXQgQ1BVIHRvIGEgdGFzawotK19vbmx5 XyB3aGVuIHRoZSBDUFUgd291bGQgYmUgb3RoZXJ3aXNlIGlkbGUuIFRoZSBpZGVhIGJlaGluZCB0 aGlzIGlzIHRvIGFsbG93Ci0rdWx0cmEgbG93IHByaW9yaXR5IHRhc2tzIHRvIGJlIHJ1biBpbiB0 aGUgYmFja2dyb3VuZCB0aGF0IGhhdmUgdmlydHVhbGx5IG5vCi0rZWZmZWN0IG9uIHRoZSBmb3Jl Z3JvdW5kIHRhc2tzLiBUaGlzIGlzIGlkZWFsbHkgc3VpdGVkIHRvIGRpc3RyaWJ1dGVkIGNvbXB1 dGluZwotK2NsaWVudHMgKGxpa2Ugc2V0aWF0aG9tZSwgZm9sZGluZywgbXByaW1lIGV0YykgYnV0 IGNhbiBhbHNvIGJlIHVzZWQgdG8gc3RhcnQKLSthIHZpZGVvIGVuY29kZSBvciBzbyBvbiB3aXRo b3V0IGFueSBzbG93ZG93biBvZiBvdGhlciB0YXNrcy4gVG8gYXZvaWQgdGhpcwotK3BvbGljeSBm cm9tIGdyYWJiaW5nIHNoYXJlZCByZXNvdXJjZXMgYW5kIGhvbGRpbmcgdGhlbSBpbmRlZmluaXRl bHksIGlmIGl0Ci0rZGV0ZWN0cyBhIHN0YXRlIHdoZXJlIHRoZSB0YXNrIGlzIHdhaXRpbmcgb24g SS9PLCB0aGUgbWFjaGluZSBpcyBhYm91dCB0bwotK3N1c3BlbmQgdG8gcmFtIGFuZCBzbyBvbiwg aXQgd2lsbCB0cmFuc2llbnRseSBzY2hlZHVsZSB0aGVtIGFzIFNDSEVEX05PUk1BTC4gQXMKLStw ZXIgdGhlIElzb2Nocm9ub3VzIHRhc2sgbWFuYWdlbWVudCwgb25jZSBhIHRhc2sgaGFzIGJlZW4g c2NoZWR1bGVkIGFzIElETEVQUklPLAotK2l0IGNhbm5vdCBiZSBwdXQgYmFjayB0byBTQ0hFRF9O T1JNQUwgd2l0aG91dCBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gVGFza3MgY2FuCi0rYmUgc2V0IHRv IHN0YXJ0IGFzIFNDSEVEX0lETEVQUklPIHdpdGggdGhlIHNjaGVkdG9vbCBjb21tYW5kIGxpa2Ug c286Ci0rCi0rCXNjaGVkdG9vbCAtRCAtZSAuL21wcmltZQotKwotK1N1YnRpY2sgYWNjb3VudGlu Zy4KLSsKLStJdCBpcyBzdXJwcmlzaW5nbHkgZGlmZmljdWx0IHRvIGdldCBhY2N1cmF0ZSBDUFUg YWNjb3VudGluZywgYW5kIGluIG1hbnkgY2FzZXMsCi0rdGhlIGFjY291bnRpbmcgaXMgZG9uZSBi eSBzaW1wbHkgZGV0ZXJtaW5pbmcgd2hhdCBpcyBoYXBwZW5pbmcgYXQgdGhlIHByZWNpc2UKLStt b21lbnQgYSB0aW1lciB0aWNrIGZpcmVzIG9mZi4gVGhpcyBiZWNvbWVzIGluY3JlYXNpbmdseSBp bmFjY3VyYXRlIGFzIHRoZQotK3RpbWVyIHRpY2sgZnJlcXVlbmN5IChIWikgaXMgbG93ZXJlZC4g SXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGFuIGFwcGxpY2F0aW9uCi0rd2hpY2ggdXNlcyBhbG1v c3QgMTAwJSBDUFUsIHlldCBieSBiZWluZyBkZXNjaGVkdWxlZCBhdCB0aGUgcmlnaHQgdGltZSwg cmVjb3JkcwotK3plcm8gQ1BVIHVzYWdlLiBXaGlsZSB0aGUgbWFpbiBwcm9ibGVtIHdpdGggdGhp cyBpcyB0aGF0IHRoZXJlIGFyZSBwb3NzaWJsZQotK3NlY3VyaXR5IGltcGxpY2F0aW9ucywgaXQg aXMgYWxzbyBkaWZmaWN1bHQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIENQVSBhIHRhc2sKLStyZWFs bHkgZG9lcyB1c2UuIEJGUyB0cmllcyB0byB1c2UgdGhlIHN1Yi10aWNrIGFjY291bnRpbmcgZnJv bSB0aGUgVFNDIGNsb2NrLAotK3doZXJlIHBvc3NpYmxlLCB0byBkZXRlcm1pbmUgcmVhbCBDUFUg dXNhZ2UuIFRoaXMgaXMgbm90IGVudGlyZWx5IHJlbGlhYmxlLCBidXQKLStpcyBmYXIgbW9yZSBs aWtlbHkgdG8gcHJvZHVjZSBhY2N1cmF0ZSBDUFUgdXNhZ2UgZGF0YSB0aGFuIHRoZSBleGlzdGlu ZyBkZXNpZ25zCi0rYW5kIHdpbGwgbm90IHNob3cgdGFza3MgYXMgY29uc3VtaW5nIG5vIENQVSB1 c2FnZSB3aGVuIHRoZXkgYWN0dWFsbHkgYXJlLiBUaHVzLAotK3RoZSBhbW91bnQgb2YgQ1BVIHJl cG9ydGVkIGFzIGJlaW5nIHVzZWQgYnkgQkZTIHdpbGwgbW9yZSBhY2N1cmF0ZWx5IHJlcHJlc2Vu dAotK2hvdyBtdWNoIENQVSB0aGUgdGFzayBpdHNlbGYgaXMgdXNpbmcgKGFzIGlzIHNob3duIGZv ciBleGFtcGxlIGJ5IHRoZSAndGltZScKLSthcHBsaWNhdGlvbiksIHNvIHRoZSByZXBvcnRlZCB2 YWx1ZXMgbWF5IGJlIHF1aXRlIGRpZmZlcmVudCB0byBvdGhlciBzY2hlZHVsZXJzLgotK1ZhbHVl cyByZXBvcnRlZCBhcyB0aGUgJ2xvYWQnIGFyZSBtb3JlIHByb25lIHRvIHByb2JsZW1zIHdpdGgg dGhpcyBkZXNpZ24sIGJ1dAotK3BlciBwcm9jZXNzIHZhbHVlcyBhcmUgY2xvc2VyIHRvIHJlYWwg dXNhZ2UuIFdoZW4gY29tcGFyaW5nIHRocm91Z2hwdXQgb2YgQkZTCi0rdG8gb3RoZXIgZGVzaWdu cywgaXQgaXMgaW1wb3J0YW50IHRvIGNvbXBhcmUgdGhlIGFjdHVhbCBjb21wbGV0ZWQgd29yayBp biB0ZXJtcwotK29mIHRvdGFsIHdhbGwgY2xvY2sgdGltZSB0YWtlbiBhbmQgdG90YWwgd29yayBk b25lLCByYXRoZXIgdGhhbiB0aGUgcmVwb3J0ZWQKLSsiY3B1IHVzYWdlIi4KLSsKLSsKLStDb24g S29saXZhcyA8a2VybmVsQGtvbGl2YXMub3JnPiBUdWUsIDUgQXByIDIwMTEKLUluZGV4OiBsaW51 eC0zLjMtY2sxL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKLT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t LSBsaW51eC0zLjMtY2sxLm9yaWcvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAkyMDEy LTAzLTI0IDE5OjMwOjAwLjAxMjQyMDM2MiArMTEwMAotKysrIGxpbnV4LTMuMy1jazEvRG9jdW1l bnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAkyMDEyLTAzLTI0IDE5OjMwOjI5LjAzOTkyNTc1OCAr MTEwMAotQEAgLTMzLDYgKzMzLDcgQEAgc2hvdyB1cCBpbiAvcHJvYy9zeXMva2VybmVsOgorZGlm ZiAtcnVOIGxpbnV4LTMuMy41L2FyY2gveDg2L0tjb25maWcgbGludXgtMy4zLjUtUklGUy1SQzMt QlJBSU4tRUFUSU5HL2FyY2gveDg2L0tjb25maWcKKy0tLSBsaW51eC0zLjMuNS9hcmNoL3g4Ni9L Y29uZmlnCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICswODAwCisrKysgbGludXgtMy4z LjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2FyY2gveDg2L0tjb25maWcJMjAxMi0wNS0xOSAyMjow NDozNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC04MDYsMTUgKzgwNiw3IEBACisgCSAgaW5jcmVhc2Vk IG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KKyAKKyBjb25m aWcgSVJRX1RJTUVfQUNDT1VOVElORworLQlib29sICJGaW5lIGdyYW51bGFyaXR5IHRhc2sgbGV2 ZWwgSVJRIHRpbWUgYWNjb3VudGluZyIKKy0JZGVmYXVsdCBuCistCS0tLWhlbHAtLS0KKy0JICBT ZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGZpbmUgZ3JhbnVsYXJpdHkgdGFzayBpcnEgdGlt ZQorLQkgIGFjY291bnRpbmcuIFRoaXMgaXMgZG9uZSBieSByZWFkaW5nIGEgdGltZXN0YW1wIG9u IGVhY2gKKy0JICB0cmFuc2l0aW9ucyBiZXR3ZWVuIHNvZnRpcnEgYW5kIGhhcmRpcnEgc3RhdGUs IHNvIHRoZXJlIGNhbiBiZSBhCistCSAgc21hbGwgcGVyZm9ybWFuY2UgaW1wYWN0LgorLQorLQkg IElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgorKwlkZWZfYm9vbCB5CisgCisgc291cmNlICJrZXJu ZWwvS2NvbmZpZy5wcmVlbXB0IgorIAorQEAgLTExMTIsNyArMTEwNCw3IEBACisgCisgY2hvaWNl CisgCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCistCXByb21wdCAiTWVtb3J5IHNwbGl0IiBpZiBF WFBFUlQKKysJcHJvbXB0ICJNZW1vcnkgc3BsaXQiCisgCWRlZmF1bHQgVk1TUExJVF8zRworIAlk ZXBlbmRzIG9uIFg4Nl8zMgorIAktLS1oZWxwLS0tCitAQCAtMTEzMiwxNyArMTEyNCwxNyBAQAor IAkgIG9wdGlvbiBhbG9uZSEKKyAKKyAJY29uZmlnIFZNU1BMSVRfM0cKKy0JCWJvb2wgIjNHLzFH IHVzZXIva2VybmVsIHNwbGl0IgorKwkJYm9vbCAiRGVmYXVsdCA4OTZNQiBsb3dtZW0gKDNHLzFH IHVzZXIva2VybmVsIHNwbGl0KSIKKyAJY29uZmlnIFZNU1BMSVRfM0dfT1BUCisgCQlkZXBlbmRz IG9uICFYODZfUEFFCistCQlib29sICIzRy8xRyB1c2VyL2tlcm5lbCBzcGxpdCAoZm9yIGZ1bGwg MUcgbG93IG1lbW9yeSkiCisrCQlib29sICIxR0IgbG93bWVtICgzRy8xRyB1c2VyL2tlcm5lbCBz cGxpdCkiCisgCWNvbmZpZyBWTVNQTElUXzJHCistCQlib29sICIyRy8yRyB1c2VyL2tlcm5lbCBz cGxpdCIKKysJCWJvb2wgIjJHQiBsb3dtZW0gKDJHLzJHIHVzZXIva2VybmVsIHNwbGl0KSIKKyAJ Y29uZmlnIFZNU1BMSVRfMkdfT1BUCisgCQlkZXBlbmRzIG9uICFYODZfUEFFCistCQlib29sICIy Ry8yRyB1c2VyL2tlcm5lbCBzcGxpdCAoZm9yIGZ1bGwgMkcgbG93IG1lbW9yeSkiCisrCQlib29s ICIyR0IgbG93bWVtICgyRy8yRyB1c2VyL2tlcm5lbCBzcGxpdCkiCisgCWNvbmZpZyBWTVNQTElU XzFHCistCQlib29sICIxRy8zRyB1c2VyL2tlcm5lbCBzcGxpdCIKKysJCWJvb2wgIjNHQiBsb3dt ZW0gKDFHLzNHIHVzZXIva2VybmVsIHNwbGl0KSIKKyBlbmRjaG9pY2UKKyAKKyBjb25maWcgUEFH RV9PRkZTRVQKK0JpbmFyeSBmaWxlcyBsaW51eC0zLjMuNS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9y ZWFsbW9kZS92aWRlby1tb2RlLm8ubG9jYWxob3N0LmxvY2FsZG9tYWluLjgwNDUuZ1VOYWI5IGFu ZCBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJTkcvYXJjaC94ODYva2VybmVsL2FjcGkv cmVhbG1vZGUvdmlkZW8tbW9kZS5vLmxvY2FsaG9zdC5sb2NhbGRvbWFpbi44MDQ1LmdVTmFiOSBk aWZmZXIKK0JpbmFyeSBmaWxlcyBsaW51eC0zLjMuNS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFs bW9kZS92aWRlby12Z2Euby5sb2NhbGhvc3QubG9jYWxkb21haW4uODA0Ny5xQklDTmUgYW5kIGxp bnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFs bW9kZS92aWRlby12Z2Euby5sb2NhbGhvc3QubG9jYWxkb21haW4uODA0Ny5xQklDTmUgZGlmZmVy CitkaWZmIC1ydU4gbGludXgtMy4zLjUvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMgbGludXgt My4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jCist LS0gbGludXgtMy4zLjUvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMJMjAxMi0wNS0wNyAyMzo1 NTozMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJ TkcvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMJMjAxMi0wNS0xOSAyMjowNDozNy4wMDAwMDAw MDAgKzA4MDAKK0BAIC0xMDksNyArMTA5LDcgQEAKKyAKKyAJc2VxX3ByaW50ZihtLCAiXG5ib2dv bWlwc1x0OiAlbHUuJTAybHVcbiIsCisgCQkgICBjLT5sb29wc19wZXJfamlmZnkvKDUwMDAwMC9I WiksCistCQkgICAoYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOworKwkJICAg KGMtPmxvb3BzX3Blcl9qaWZmeSAqIDEwIC8oNTAwMDAvSFopKSAlIDEwMCk7CisgCisgI2lmZGVm IENPTkZJR19YODZfNjQKKyAJaWYgKGMtPng4Nl90bGJzaXplID4gMCkKK2RpZmYgLXJ1TiBsaW51 eC0zLjMuNS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJS QUlOLUVBVElORy9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCistLS0gbGludXgtMy4zLjUvYXJj aC94ODYva2VybmVsL3NtcGJvb3QuYwkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgw MAorKysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9hcmNoL3g4Ni9rZXJuZWwv c21wYm9vdC5jCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtNDM2LDcg KzQzNiw3IEBACisgCQkiVG90YWwgb2YgJWQgcHJvY2Vzc29ycyBhY3RpdmF0ZWQgKCVsdS4lMDJs dSBCb2dvTUlQUykuXG4iLAorIAkJbnVtX29ubGluZV9jcHVzKCksCisgCQlib2dvc3VtLyg1MDAw MDAvSFopLAorLQkJKGJvZ29zdW0vKDUwMDAvSFopKSUxMDApOworKwkJKGJvZ29zdW0gKiAxMC8o NTAwMDAvSFopKSUxMDApOworIAorIAlwcl9kZWJ1ZygiQmVmb3JlIGJvZ29jb3VudCAtIHNldHRp bmcgYWN0aXZhdGVkPTEuXG4iKTsKKyB9CitCaW5hcnkgZmlsZXMgbGludXgtMy4zLjUvYXJjaC94 ODYvdG9vbHMvaW5zbl9zYW5pdHkgYW5kIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElO Ry9hcmNoL3g4Ni90b29scy9pbnNuX3Nhbml0eSBkaWZmZXIKK0JpbmFyeSBmaWxlcyBsaW51eC0z LjMuNS9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4gYW5kIGxpbnV4LTMuMy41LVJJRlMtUkMz LUJSQUlOLUVBVElORy9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4gZGlmZmVyCitkaWZmIC1y dU4gbGludXgtMy4zLjUvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dCBsaW51eC0zLjMu NS1SSUZTLVJDMy1CUkFJTi1FQVRJTkcvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAor LS0tIGxpbnV4LTMuMy41L0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQJMjAxMi0wNS0w NyAyMzo1NTozMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJ Ti1FQVRJTkcvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAkyMDEyLTA1LTE5IDIyOjA0 OjM3LjAwMDAwMDAwMCArMDgwMAorQEAgLTMzLDYgKzMzLDcgQEAKICAtIGRvbWFpbm5hbWUKICAt IGhvc3RuYW1lCiAgLSBob3RwbHVnCkBAIC00MzEsNyArMTA0LDcgQEAKICAtIGtwdHJfcmVzdHJp Y3QKICAtIGtzdGFja19kZXB0aF90b19wcmludCAgICAgICBbIFg4NiBvbmx5IF0KICAtIGwyY3Ig ICAgICAgICAgICAgICAgICAgICAgICBbIFBQQyBvbmx5IF0KLUBAIC01OSw2ICs2MCw3IEBAIHNo b3cgdXAgaW4gL3Byb2Mvc3lzL2tlcm5lbDoKK0BAIC01OSw2ICs2MCw3IEBACiAgLSByYW5kb21p emVfdmFfc3BhY2UKICAtIHJlYWwtcm9vdC1kZXYgICAgICAgICAgICAgICA9PT4gRG9jdW1lbnRh dGlvbi9pbml0cmQudHh0CiAgLSByZWJvb3QtY21kICAgICAgICAgICAgICAgICAgWyBTUEFSQyBv bmx5IF0KQEAgLTQzOSw3ICsxMTIsNyBAQAogIC0gcnRzaWctbWF4CiAgLSBydHNpZy1ucgogIC0g c2VtCi1AQCAtMzAxLDYgKzMwMywxNiBAQCBrZXJuZWwgc3RhY2suCitAQCAtMzAxLDYgKzMwMywx NiBAQAogIAogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CiAgCkBAIC00NTYsNyArMTI5LDcgQEAKICBsMmNyOiAoUFBDIG9ubHkp CiAgCiAgVGhpcyBmbGFnIGNvbnRyb2xzIHRoZSBMMiBjYWNoZSBvZiBHMyBwcm9jZXNzb3IgYm9h cmRzLiBJZgotQEAgLTUxNyw2ICs1MjksMjAgQEAgcmVib290aW5nLiA/Pz8KK0BAIC01MTcsNiAr NTI5LDIwIEBACiAgCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KICAKQEAgLTQ3NywxMSArMTUwLDc1IEBACiAgcnRzaWctbWF4 ICYgcnRzaWctbnI6CiAgCiAgVGhlIGZpbGUgcnRzaWctbWF4IGNhbiBiZSB1c2VkIHRvIHR1bmUg dGhlIG1heGltdW0gbnVtYmVyCi1JbmRleDogbGludXgtMy4zLWNrMS9mcy9wcm9jL2Jhc2UuYwot PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0tIGxpbnV4LTMuMy1jazEub3JpZy9mcy9wcm9jL2Jhc2UuYwkyMDEyLTAz LTI0IDE5OjMwOjAwLjAxMzQyMDM4MSArMTEwMAotKysrIGxpbnV4LTMuMy1jazEvZnMvcHJvYy9i YXNlLmMJMjAxMi0wMy0yNCAxOTozMDoyOS4wMzk5MjU3NTggKzExMDAKLUBAIC0zNDIsNyArMzQy LDcgQEAgc3RhdGljIGludCBwcm9jX3BpZF9zdGFjayhzdHJ1Y3Qgc2VxX2ZpbAorZGlmZiAtcnVO IGxpbnV4LTMuMy41L2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgbGludXgtMy4zLjUtUklGUy1S QzMtQlJBSU4tRUFUSU5HL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKy0tLSBsaW51eC0zLjMu NS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAw ICswODAwCisrKysgbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2RyaXZlcnMvY3B1 ZnJlcS9jcHVmcmVxLmMJMjAxMi0wNS0xOSAyMjowNDozNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0y OCw2ICsyOCw3IEBACisgI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorICNpbmNsdWRlIDxsaW51eC9j b21wbGV0aW9uLmg+CisgI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisrI2luY2x1ZGUgPGxpbnV4 L3NjaGVkLmg+CisgI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CisgCisgI2luY2x1ZGUg PHRyYWNlL2V2ZW50cy9wb3dlci5oPgorQEAgLTE0NDUsNiArMTQ0NiwxMiBAQAorIAkJdGFyZ2V0 X2ZyZXEsIHJlbGF0aW9uKTsKKyAJaWYgKGNwdV9vbmxpbmUocG9saWN5LT5jcHUpICYmIGNwdWZy ZXFfZHJpdmVyLT50YXJnZXQpCisgCQlyZXR2YWwgPSBjcHVmcmVxX2RyaXZlci0+dGFyZ2V0KHBv bGljeSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uKTsKKysJaWYgKGxpa2VseShyZXR2YWwgIT0gLUVJ TlZBTCkpIHsKKysJCWlmICh0YXJnZXRfZnJlcSA9PSBwb2xpY3ktPm1heCkKKysJCQljcHVfbm9u c2NhbGluZyhwb2xpY3ktPmNwdSk7CisrCQllbHNlCisrCQkJY3B1X3NjYWxpbmcocG9saWN5LT5j cHUpOworKwl9CisgCisgCXJldHVybiByZXR2YWw7CisgfQorZGlmZiAtcnVOIGxpbnV4LTMuMy41 L2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGxpbnV4LTMuMy41LVJJRlMt UkMzLUJSQUlOLUVBVElORy9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwor LS0tIGxpbnV4LTMuMy41L2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCTIw MTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICswODAwCisrKysgbGludXgtMy4zLjUtUklGUy1S QzMtQlJBSU4tRUFUSU5HL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jCTIw MTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtMjksOCArMjksOCBAQAorICAq IEl0IGhlbHBzIHRvIGtlZXAgdmFyaWFibGUgbmFtZXMgc21hbGxlciwgc2ltcGxlcgorICAqLwor IAorLSNkZWZpbmUgREVGX0ZSRVFVRU5DWV9VUF9USFJFU0hPTEQJCSg4MCkKKy0jZGVmaW5lIERF Rl9GUkVRVUVOQ1lfRE9XTl9USFJFU0hPTEQJCSgyMCkKKysjZGVmaW5lIERFRl9GUkVRVUVOQ1lf VVBfVEhSRVNIT0xECQkoNjMpCisrI2RlZmluZSBERUZfRlJFUVVFTkNZX0RPV05fVEhSRVNIT0xE CQkoMjYpCisgCisgLyoKKyAgKiBUaGUgcG9sbGluZyBmcmVxdWVuY3kgb2YgdGhpcyBnb3Zlcm5v ciBkZXBlbmRzIG9uIHRoZSBjYXBhYmlsaXR5IG9mCitkaWZmIC1ydU4gbGludXgtMy4zLjUvZHJp dmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJ Ti1FQVRJTkcvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYworLS0tIGxpbnV4LTMu My41L2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMJMjAxMi0wNS0wNyAyMzo1NToz MC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJTkcv ZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwkyMDEyLTA1LTE5IDIyOjA0OjM3LjAw MDAwMDAwMCArMDgwMAorQEAgLTI4LDggKzI4LDggQEAKKyAgKiBJdCBoZWxwcyB0byBrZWVwIHZh cmlhYmxlIG5hbWVzIHNtYWxsZXIsIHNpbXBsZXIKKyAgKi8KKyAKKy0jZGVmaW5lIERFRl9GUkVR VUVOQ1lfRE9XTl9ESUZGRVJFTlRJQUwJCSgxMCkKKy0jZGVmaW5lIERFRl9GUkVRVUVOQ1lfVVBf VEhSRVNIT0xECQkoODApCisrI2RlZmluZSBERUZfRlJFUVVFTkNZX0RPV05fRElGRkVSRU5USUFM CQkoMjYpCisrI2RlZmluZSBERUZfRlJFUVVFTkNZX1VQX1RIUkVTSE9MRAkJKDYzKQorICNkZWZp bmUgREVGX1NBTVBMSU5HX0RPV05fRkFDVE9SCQkoMSkKKyAjZGVmaW5lIE1BWF9TQU1QTElOR19E T1dOX0ZBQ1RPUgkJKDEwMDAwMCkKKyAjZGVmaW5lIE1JQ1JPX0ZSRVFVRU5DWV9ET1dOX0RJRkZF UkVOVElBTAkoMykKK0BAIC00MTYsMTAgKzQxNiwxMCBAQAorIAorIAkvKgorIAkgKiBFdmVyeSBz YW1wbGluZ19yYXRlLCB3ZSBjaGVjaywgaWYgY3VycmVudCBpZGxlIHRpbWUgaXMgbGVzcworLQkg KiB0aGFuIDIwJSAoZGVmYXVsdCksIHRoZW4gd2UgdHJ5IHRvIGluY3JlYXNlIGZyZXF1ZW5jeQor KwkgKiB0aGFuIDM3JSAoZGVmYXVsdCksIHRoZW4gd2UgdHJ5IHRvIGluY3JlYXNlIGZyZXF1ZW5j eQorIAkgKiBFdmVyeSBzYW1wbGluZ19yYXRlLCB3ZSBsb29rIGZvciBhIHRoZSBsb3dlc3QKKyAJ ICogZnJlcXVlbmN5IHdoaWNoIGNhbiBzdXN0YWluIHRoZSBsb2FkIHdoaWxlIGtlZXBpbmcgaWRs ZSB0aW1lIG92ZXIKKy0JICogMzAlLiBJZiBzdWNoIGEgZnJlcXVlbmN5IGV4aXN0LCB3ZSB0cnkg dG8gZGVjcmVhc2UgdG8gdGhpcyBmcmVxdWVuY3kuCisrCSAqIDYzJS4gSWYgc3VjaCBhIGZyZXF1 ZW5jeSBleGlzdCwgd2UgdHJ5IHRvIGRlY3JlYXNlIHRvIHRoaXMgZnJlcXVlbmN5LgorIAkgKgor IAkgKiBBbnkgZnJlcXVlbmN5IGluY3JlYXNlIHRha2VzIGl0IHRvIHRoZSBtYXhpbXVtIGZyZXF1 ZW5jeS4KKyAJICogRnJlcXVlbmN5IHJlZHVjdGlvbiBoYXBwZW5zIGF0IG1pbmltdW0gc3RlcHMg b2YKK2RpZmYgLXJ1TiBsaW51eC0zLjMuNS9mcy9wcm9jL2Jhc2UuYyBsaW51eC0zLjMuNS1SSUZT LVJDMy1CUkFJTi1FQVRJTkcvZnMvcHJvYy9iYXNlLmMKKy0tLSBsaW51eC0zLjMuNS9mcy9wcm9j L2Jhc2UuYwkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpbnV4LTMu My41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9mcy9wcm9jL2Jhc2UuYwkyMDEyLTA1LTE5IDIyOjA0 OjM3LjAwMDAwMDAwMCArMDgwMAorQEAgLTM0Miw3ICszNDIsNyBAQAogIHN0YXRpYyBpbnQgcHJv Y19waWRfc2NoZWRzdGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyKQog IHsKICAJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWxsdSAlbGx1ICVsdVxuIiwKQEAgLTQ5MCwx MSArMjI3LDEwIEBACiAgCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0YXNrLT5zY2hlZF9pbmZvLnJ1 bl9kZWxheSwKICAJCQl0YXNrLT5zY2hlZF9pbmZvLnBjb3VudCk7CiAgfQotSW5kZXg6IGxpbnV4 LTMuMy1jazEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAotPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpbnV4 LTMuMy1jazEub3JpZy9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCTIwMTItMDMtMjQgMTk6MzA6 MDAuMDEzNDIwMzgxICsxMTAwCi0rKysgbGludXgtMy4zLWNrMS9pbmNsdWRlL2xpbnV4L2luaXRf dGFzay5oCTIwMTItMDMtMjQgMTk6MzA6MjkuMDM5OTI1NzU4ICsxMTAwCi1AQCAtMTI1LDEyICsx MjUsNzAgQEAgZXh0ZXJuIHN0cnVjdCBjcmVkIGluaXRfY3JlZDsKK2RpZmYgLXJ1TiBsaW51eC0z LjMuNS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlO LUVBVElORy9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCistLS0gbGludXgtMy4zLjUvaW5jbHVk ZS9saW51eC9pbml0X3Rhc2suaAkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgwMAor KysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9pbmNsdWRlL2xpbnV4L2luaXRf dGFzay5oCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtMTI1LDEyICsx MjUsNjkgQEAKICAjIGRlZmluZSBJTklUX1BFUkZfRVZFTlRTKHRzaykKICAjZW5kaWYKICAKQEAg LTUwNCw4ICsyNDAsOCBAQAogICAqICBJTklUX1RBU0sgaXMgdXNlZCB0byBzZXQgdXAgdGhlIGZp cnN0IHRhc2sgdGFibGUsIHRvdWNoIGF0CiAgICogeW91ciBvd24gcmlzayEuIEJhc2U9MCwgbGlt aXQ9MHgxZmZmZmYgKD0yTUIpCiAgICovCi0rI2lmZGVmIENPTkZJR19TQ0hFRF9CRlMKLSsjZGVm aW5lIElOSVRfVEFTS19DT01NICJCRlMiCisrI2lmZGVmIENPTkZJR19TQ0hFRF9SSUZTCisrI2Rl ZmluZSBJTklUX1RBU0tfQ09NTSAiUklGUyIKICsjZGVmaW5lIElOSVRfVEFTSyh0c2spCVwKICt7 CQkJCQkJCQkJXAogKwkuc3RhdGUJCT0gMCwJCQkJCQlcCkBAIC01MTUsNyArMjUxLDYgQEAKICsJ LnByaW8JCT0gTk9STUFMX1BSSU8sCQkJCQlcCiArCS5zdGF0aWNfcHJpbwk9IE1BWF9QUklPLTIw LAkJCQkJXAogKwkubm9ybWFsX3ByaW8JPSBOT1JNQUxfUFJJTywJCQkJCVwKLSsJLmRlYWRsaW5l CT0gMCwJCQkJCQlcCiArCS5wb2xpY3kJCT0gU0NIRURfTk9STUFMLAkJCQkJXAogKwkuY3B1c19h bGxvd2VkCT0gQ1BVX01BU0tfQUxMLAkJCQkJXAogKwkubW0JCT0gTlVMTCwJCQkJCQlcCkBAIC01 NjIsNDcgKzI5Nyw1NyBAQAogKwlJTklUX1RSQUNFX1JFQ1VSU0lPTgkJCQkJCVwKICsJSU5JVF9U QVNLX1JDVV9QUkVFTVBUKHRzaykJCQkJCVwKICt9Ci0rI2Vsc2UgLyogQ09ORklHX1NDSEVEX0JG UyAqLworKyNlbHNlIC8qIENPTkZJR19TQ0hFRF9SSUZTICovCiArI2RlZmluZSBJTklUX1RBU0tf Q09NTSAic3dhcHBlciIKICAjZGVmaW5lIElOSVRfVEFTSyh0c2spCVwKICB7CQkJCQkJCQkJXAog IAkuc3RhdGUJCT0gMCwJCQkJCQlcCi1AQCAtMTkzLDcgKzI1MSw3IEBAIGV4dGVybiBzdHJ1Y3Qg Y3JlZCBpbml0X2NyZWQ7CitAQCAtMTkzLDcgKzI1MCw3IEBACiAgCUlOSVRfVFJBQ0VfUkVDVVJT SU9OCQkJCQkJXAogIAlJTklUX1RBU0tfUkNVX1BSRUVNUFQodHNrKQkJCQkJXAogIH0KIC0KLSsj ZW5kaWYgLyogQ09ORklHX1NDSEVEX0JGUyAqLworKyNlbmRpZiAvKiBDT05GSUdfU0NIRURfUklG UyAqLwogIAogICNkZWZpbmUgSU5JVF9DUFVfVElNRVJTKGNwdV90aW1lcnMpCQkJCQlcCiAgewkJ CQkJCQkJCVwKLUluZGV4OiBsaW51eC0zLjMtY2sxL2luY2x1ZGUvbGludXgvaW9wcmlvLmgKLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tLSBsaW51eC0zLjMtY2sxLm9yaWcvaW5jbHVkZS9saW51eC9pb3ByaW8uaAky MDEyLTAzLTI0IDE5OjMwOjAwLjAxMzQyMDM4MSArMTEwMAotKysrIGxpbnV4LTMuMy1jazEvaW5j bHVkZS9saW51eC9pb3ByaW8uaAkyMDEyLTAzLTI0IDE5OjMwOjI5LjAzOTkyNTc1OCArMTEwMAot QEAgLTY0LDYgKzY0LDggQEAgc3RhdGljIGlubGluZSBpbnQgdGFza19pb3ByaW9fY2xhc3Moc3Ry dQorZGlmZiAtcnVOIGxpbnV4LTMuMy41L2luY2x1ZGUvbGludXgvamlmZmllcy5oIGxpbnV4LTMu My41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaAorLS0tIGxp bnV4LTMuMy41L2luY2x1ZGUvbGludXgvamlmZmllcy5oCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAw MDAwMDAwICswODAwCisrKysgbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2luY2x1 ZGUvbGludXgvamlmZmllcy5oCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitA QCAtMTY0LDcgKzE2NCw3IEBACisgICogSGF2ZSB0aGUgMzIgYml0IGppZmZpZXMgdmFsdWUgd3Jh cCA1IG1pbnV0ZXMgYWZ0ZXIgYm9vdAorICAqIHNvIGppZmZpZXMgd3JhcCBidWdzIHNob3cgdXAg ZWFybGllci4KKyAgKi8KKy0jZGVmaW5lIElOSVRJQUxfSklGRklFUyAoKHVuc2lnbmVkIGxvbmcp KHVuc2lnbmVkIGludCkgKC0zMDAqSFopKQorKyNkZWZpbmUgSU5JVElBTF9KSUZGSUVTICgodW5z aWduZWQgbG9uZykodW5zaWduZWQgaW50KSAoLTEwKkhaKSkKICAKLSBzdGF0aWMgaW5saW5lIGlu dCB0YXNrX25pY2VfaW9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLSB7Ci0rCWlmIChp c29fdGFzayh0YXNrKSkKLSsJCXJldHVybiAwOwotIAlyZXR1cm4gKHRhc2tfbmljZSh0YXNrKSAr IDIwKSAvIDU7Ci0gfQorIC8qCisgICogQ2hhbmdlIHRpbWV2YWwgdG8gamlmZmllcywgdHJ5aW5n IHRvIGF2b2lkIHRoZQorZGlmZiAtcnVOIGxpbnV4LTMuMy41L2luY2x1ZGUvbGludXgvbmZzZC9z dGF0cy5oIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9pbmNsdWRlL2xpbnV4L25m c2Qvc3RhdHMuaAorLS0tIGxpbnV4LTMuMy41L2luY2x1ZGUvbGludXgvbmZzZC9zdGF0cy5oCTIw MTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICswODAwCisrKysgbGludXgtMy4zLjUtUklGUy1S QzMtQlJBSU4tRUFUSU5HL2luY2x1ZGUvbGludXgvbmZzZC9zdGF0cy5oCTIwMTItMDUtMTkgMjI6 MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtMTEsOCArMTEsOCBAQAogIAotSW5kZXg6IGxpbnV4 LTMuMy1jazEvaW5jbHVkZS9saW51eC9zY2hlZC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGludXgtMy4z LWNrMS5vcmlnL2luY2x1ZGUvbGludXgvc2NoZWQuaAkyMDEyLTAzLTI0IDE5OjMwOjAwLjAxMzQy MDM4MSArMTEwMAotKysrIGxpbnV4LTMuMy1jazEvaW5jbHVkZS9saW51eC9zY2hlZC5oCTIwMTIt MDMtMjQgMTk6MzA6MjkuMDQwOTI1Nzc1ICsxMTAwCi1AQCAtMzcsOCArMzcsMTUgQEAKKyAjaW5j bHVkZSA8bGludXgvbmZzNC5oPgorIAorLS8qIHRocmVhZCB1c2FnZSB3cmFwcyB2ZXJ5IG1pbGxp b24gc2Vjb25kcyAoYXBwcm94IG9uZSBmb3J0bmlnaHQpICovCistI2RlZmluZQlORlNEX1VTQUdF X1dSQVAJKEhaKjEwMDAwMDApCisrLyogdGhyZWFkIHVzYWdlIHdyYXBzIGV2ZXJ5IG9uZSBodW5k cmVkIHRob3VzYW5kIHNlY29uZHMgKGFwcHJveCBvbmUgZGF5KSAqLworKyNkZWZpbmUJTkZTRF9V U0FHRV9XUkFQCShIWioxMDAwMDApCisgCisgI2lmZGVmIF9fS0VSTkVMX18KKyAKK2RpZmYgLXJ1 TiBsaW51eC0zLjMuNS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggbGludXgtMy4zLjUtUklGUy1SQzMt QlJBSU4tRUFUSU5HL2luY2x1ZGUvbGludXgvc2NoZWQuaAorLS0tIGxpbnV4LTMuMy41L2luY2x1 ZGUvbGludXgvc2NoZWQuaAkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgwMAorKysr IGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJ MjAxMi0wNS0yNSAyMjo0Mzo1My4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zNyw4ICszNywxMyBAQAog ICNkZWZpbmUgU0NIRURfRklGTwkJMQogICNkZWZpbmUgU0NIRURfUlIJCTIKICAjZGVmaW5lIFND SEVEX0JBVENICQkzCiAtLyogU0NIRURfSVNPOiByZXNlcnZlZCBidXQgbm90IGltcGxlbWVudGVk IHlldCAqLwotKy8qIFNDSEVEX0lTTzogSW1wbGVtZW50ZWQgb24gQkZTIG9ubHkgKi8KICAjZGVm aW5lIFNDSEVEX0lETEUJCTUKLSsjaWZkZWYgQ09ORklHX1NDSEVEX0JGUwotKyNkZWZpbmUgU0NI RURfSVNPCQk0CiArI2RlZmluZSBTQ0hFRF9JRExFUFJJTwkJU0NIRURfSURMRQorKyNpZmRlZiBD T05GSUdfU0NIRURfUklGUwogKyNkZWZpbmUgU0NIRURfTUFYCQkoU0NIRURfSURMRVBSSU8pCiAr I2RlZmluZSBTQ0hFRF9SQU5HRShwb2xpY3kpCSgocG9saWN5KSA8PSBTQ0hFRF9NQVgpCiArI2Vu ZGlmCkBAIC02MTAsNyArMzU1LDcgQEAKICAvKiBDYW4gYmUgT1JlZCBpbiB0byBtYWtlIHN1cmUg dGhlIHByb2Nlc3MgaXMgcmV2ZXJ0ZWQgYmFjayB0byBTQ0hFRF9OT1JNQUwgb24gZm9yayAqLwog ICNkZWZpbmUgU0NIRURfUkVTRVRfT05fRk9SSyAgICAgMHg0MDAwMDAwMAogIAotQEAgLTI2OSw4 ICsyNzYsNiBAQCBleHRlcm4gYXNtbGlua2FnZSB2b2lkIHNjaGVkdWxlX3RhaWwoc3RyCitAQCAt MjY5LDggKzI3NCw2IEBACiAgZXh0ZXJuIHZvaWQgaW5pdF9pZGxlKHN0cnVjdCB0YXNrX3N0cnVj dCAqaWRsZSwgaW50IGNwdSk7CiAgZXh0ZXJuIHZvaWQgaW5pdF9pZGxlX2Jvb3R1cF90YXNrKHN0 cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSk7CiAgCkBAIC02MTksMjUgKzM2NCwyNyBAQAogICNpZiBk ZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX05PX0haKQogIGV4dGVybiB2b2lk IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljayk7CiAgZXh0ZXJuIHZvaWQg c2V0X2NwdV9zZF9zdGF0ZV9pZGxlKHZvaWQpOwotQEAgLTEyNDMsMTUgKzEyNDgsMzEgQEAgc3Ry dWN0IHRhc2tfc3RydWN0IHsKK0BAIC0xMjQzLDE1ICsxMjQ2LDMzIEBACiAgCiAgI2lmZGVmIENP TkZJR19TTVAKICAJc3RydWN0IGxsaXN0X25vZGUgd2FrZV9lbnRyeTsKIC0JaW50IG9uX2NwdTsK ICAjZW5kaWYKIC0JaW50IG9uX3JxOwotKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmlu ZWQoQ09ORklHX1NDSEVEX0JGUykKKysjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVk KENPTkZJR19TQ0hFRF9SSUZTKQogKwlib29sIG9uX2NwdTsKICsjZW5kaWYKLSsjaWZuZGVmIENP TkZJR19TQ0hFRF9CRlMKKysjaWZuZGVmIENPTkZJR19TQ0hFRF9SSUZTCiArCWJvb2wgb25fcnE7 CiArI2VuZGlmCiAgCiAgCWludCBwcmlvLCBzdGF0aWNfcHJpbywgbm9ybWFsX3ByaW87CiAgCXVu c2lnbmVkIGludCBydF9wcmlvcml0eTsKLSsjaWZkZWYgQ09ORklHX1NDSEVEX0JGUworKyNpZmRl ZiBDT05GSUdfU0NIRURfUklGUwogKwlpbnQgdGltZV9zbGljZTsKLSsJdTY0IGRlYWRsaW5lOwor Kwl1NjQgY3J0X3RpbWU7CisrCXU2NCBydW5fdGltZTsKKysJdTY0IHJ1bl9zY2FsZTsKICsJc3Ry dWN0IGxpc3RfaGVhZCBydW5fbGlzdDsKICsJdTY0IGxhc3RfcmFuOwogKwl1NjQgc2NoZWRfdGlt ZTsgLyogc2NoZWRfY2xvY2sgdGltZSBzcGVudCBydW5uaW5nICovCkBAIC02NDUsNyArMzkyLDcg QEAKICsJYm9vbCBzdGlja3k7IC8qIFNvZnQgYWZmaW5lZCBmbGFnICovCiArI2VuZGlmCiArCXVu c2lnbmVkIGxvbmcgcnRfdGltZW91dDsKLSsjZWxzZSAvKiBDT05GSUdfU0NIRURfQkZTICovCisr I2Vsc2UgLyogQ09ORklHX1NDSEVEX1JJRlMgKi8KICAJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNz ICpzY2hlZF9jbGFzczsKICAJc3RydWN0IHNjaGVkX2VudGl0eSBzZTsKICAJc3RydWN0IHNjaGVk X3J0X2VudGl0eSBydDsKQEAgLTY1MywyMSArNDAwLDIxIEBACiAgCiAgI2lmZGVmIENPTkZJR19Q UkVFTVBUX05PVElGSUVSUwogIAkvKiBsaXN0IG9mIHN0cnVjdCBwcmVlbXB0X25vdGlmaWVyOiAq LwotQEAgLTEzNTgsNiArMTM3OSw5IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7CitAQCAtMTM1OCw2 ICsxMzc5LDkgQEAKICAJaW50IF9fdXNlciAqY2xlYXJfY2hpbGRfdGlkOwkJLyogQ0xPTkVfQ0hJ TERfQ0xFQVJUSUQgKi8KICAKICAJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgdXRpbWVzY2FsZWQs IHN0aW1lc2NhbGVkOwotKyNpZmRlZiBDT05GSUdfU0NIRURfQkZTCisrI2lmZGVmIENPTkZJR19T Q0hFRF9SSUZTCiArCXVuc2lnbmVkIGxvbmcgdXRpbWVfcGMsIHN0aW1lX3BjOwogKyNlbmRpZgog IAljcHV0aW1lX3QgZ3RpbWU7CiAgI2lmbmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwog IAljcHV0aW1lX3QgcHJldl91dGltZSwgcHJldl9zdGltZTsKLUBAIC0xNTkyLDYgKzE2MTYsNjQg QEAgc3RydWN0IHRhc2tfc3RydWN0IHsKK0BAIC0xNTkyLDYgKzE2MTYsNTUgQEAKICAjZW5kaWYK ICB9OwogIAotKyNpZmRlZiBDT05GSUdfU0NIRURfQkZTCisrI2lmZGVmIENPTkZJR19TQ0hFRF9S SUZTCiArYm9vbCBncnVucXVldWVfaXNfbG9ja2VkKHZvaWQpOwogK3ZvaWQgZ3JxX3VubG9ja193 YWl0KHZvaWQpOwogK3ZvaWQgY3B1X3NjYWxpbmcoaW50IGNwdSk7CkBAIC02ODcsMTAgKzQzNCw2 IEBACiArCiArdm9pZCBwcmludF9zY2hlZHVsZXJfdmVyc2lvbih2b2lkKTsKICsKLStzdGF0aWMg aW5saW5lIGJvb2wgaXNvX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQotK3sKLSsJcmV0dXJu IChwLT5wb2xpY3kgPT0gU0NIRURfSVNPKTsKLSt9CiArI2Vsc2UgLyogQ0ZTICovCiArZXh0ZXJu IGludCBydW5xdWV1ZV9pc19sb2NrZWQoaW50IGNwdSk7CiArc3RhdGljIGlubGluZSB2b2lkIGNw dV9zY2FsaW5nKGludCBjcHUpCkBAIC03MTMsNTQgKzQ1Niw0OSBAQAogKwlwcmludGsoS0VSTl9J TkZPIkNGUyBDUFUgc2NoZWR1bGVyLlxuIik7CiArfQogKwotK3N0YXRpYyBpbmxpbmUgYm9vbCBp c29fdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi0rewotKwlyZXR1cm4gZmFsc2U7Ci0rfQot KwogKy8qIEFueW9uZSBmZWVsIGxpa2UgaW1wbGVtZW50aW5nIHRoaXM/ICovCiArc3RhdGljIGlu bGluZSBib29sIGFib3ZlX2JhY2tncm91bmRfbG9hZCh2b2lkKQogK3sKICsJcmV0dXJuIGZhbHNl OwogK30KLSsjZW5kaWYgLyogQ09ORklHX1NDSEVEX0JGUyAqLworKyNlbmRpZiAvKiBDT05GSUdf U0NIRURfUklGUyAqLwogKwogIC8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgdGFz a19zdHJ1Y3QncyBjcHVzX2FsbG93ZWQuICovCiAgI2RlZmluZSB0c2tfY3B1c19hbGxvd2VkKHRz aykgKCYodHNrKS0+Y3B1c19hbGxvd2VkKQogIAotQEAgLTE2MDksMTAgKzE2OTEsMjAgQEAgc3Ry dWN0IHRhc2tfc3RydWN0IHsKK0BAIC0xNjA5LDEwICsxNjgyLDIwIEBACiAgICovCiAgCiAgI2Rl ZmluZSBNQVhfVVNFUl9SVF9QUklPCTEwMAogLSNkZWZpbmUgTUFYX1JUX1BSSU8JCU1BWF9VU0VS X1JUX1BSSU8KLSsjZGVmaW5lIE1BWF9SVF9QUklPCQkoTUFYX1VTRVJfUlRfUFJJTyArIDEpCisr I2RlZmluZSBNQVhfUlRfUFJJTwkJKE1BWF9VU0VSX1JUX1BSSU8pCiArI2RlZmluZSBERUZBVUxU X1BSSU8JCShNQVhfUlRfUFJJTyArIDIwKQogIAotKyNpZmRlZiBDT05GSUdfU0NIRURfQkZTCisr I2lmZGVmIENPTkZJR19TQ0hFRF9SSUZTCiArI2RlZmluZSBQUklPX1JBTkdFCQkoNDApCiArI2Rl ZmluZSBNQVhfUFJJTwkJKE1BWF9SVF9QUklPICsgUFJJT19SQU5HRSkKLSsjZGVmaW5lIElTT19Q UklPCQkoTUFYX1JUX1BSSU8pCisrLy8jZGVmaW5lIElTT19QUklPCQkoTUFYX1JUX1BSSU8pIOW3 sue7j+iiq+aIkeW5suaOie+8jOWTiOWTiAogKyNkZWZpbmUgTk9STUFMX1BSSU8JCShNQVhfUlRf UFJJTyArIDEpCi0rI2RlZmluZSBJRExFX1BSSU8JCShNQVhfUlRfUFJJTyArIDIpCisrI2RlZmlu ZSBJRExFX1BSSU8JCShNQVhfUFJJTyArIDEpCiArI2RlZmluZSBQUklPX0xJTUlUCQkoKElETEVf UFJJTykgKyAxKQotKyNlbHNlIC8qIENPTkZJR19TQ0hFRF9CRlMgKi8KKysjZWxzZSAvKiBDT05G SUdfU0NIRURfUklGUyAqLwogICNkZWZpbmUgTUFYX1BSSU8JCShNQVhfUlRfUFJJTyArIDQwKQog LSNkZWZpbmUgREVGQVVMVF9QUklPCQkoTUFYX1JUX1BSSU8gKyAyMCkKICsjZGVmaW5lIE5PUk1B TF9QUklPCQlERUZBVUxUX1BSSU8KLSsjZW5kaWYgLyogQ09ORklHX1NDSEVEX0JGUyAqLworKyNl bmRpZiAvKiBDT05GSUdfU0NIRURfUklGUyAqLwogIAogIHN0YXRpYyBpbmxpbmUgaW50IHJ0X3By aW8oaW50IHByaW8pCiAgewotQEAgLTE5NzYsNyArMjA2OCw3IEBAIGV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcKK0BAIC0xOTc2LDcgKzIwNTksNyBAQAogIHRhc2tfc2NoZWRfcnVudGltZShzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogIAogIC8qIHNjaGVkX2V4ZWMgaXMgY2FsbGVkIGJ5IHBy b2Nlc3NlcyBwZXJmb3JtaW5nIGFuIGV4ZWMgKi8KIC0jaWZkZWYgQ09ORklHX1NNUAotKyNpZiBk ZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19TQ0hFRF9CRlMpCisrI2lmIGRl ZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1NDSEVEX1JJRlMpCiAgZXh0ZXJu IHZvaWQgc2NoZWRfZXhlYyh2b2lkKTsKICAjZWxzZQogICNkZWZpbmUgc2NoZWRfZXhlYygpICAg e30KLUBAIC0yNjY4LDcgKzI3NjAsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0YXNr X2NwdShjb25zCitAQCAtMjY2OCw3ICsyNzUxLDcgQEAKICAJcmV0dXJuIDA7CiAgfQogIApAQCAt NzY5LDIwICs1MDcsODIgQEAKICB7CiAgfQogIAotSW5kZXg6IGxpbnV4LTMuMy1jazEvaW5pdC9L Y29uZmlnCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLS0gbGludXgtMy4zLWNrMS5vcmlnL2luaXQvS2NvbmZpZwky MDEyLTAzLTI0IDE5OjMwOjAwLjAxMzQyMDM4MSArMTEwMAotKysrIGxpbnV4LTMuMy1jazEvaW5p dC9LY29uZmlnCTIwMTItMDMtMjQgMTk6MzA6MjkuMDQwOTI1Nzc1ICsxMTAwCi1AQCAtMjksNiAr MjksMTkgQEAgY29uZmlnIElSUV9XT1JLCitkaWZmIC1ydU4gbGludXgtMy4zLjUvaW5jbHVkZS9s aW51eC9zd2FwLmggbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2luY2x1ZGUvbGlu dXgvc3dhcC5oCistLS0gbGludXgtMy4zLjUvaW5jbHVkZS9saW51eC9zd2FwLmgJMjAxMi0wNS0w NyAyMzo1NTozMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJ Ti1FQVRJTkcvaW5jbHVkZS9saW51eC9zd2FwLmgJMjAxMi0wNS0xOSAyMjowNDozNy4wMDAwMDAw MDAgKzA4MDAKK0BAIC0yMDEsNyArMjAxLDcgQEAKKyAJaW50IG5leHQ7CS8qIHN3YXBmaWxlIHRv IGJlIHVzZWQgbmV4dCAqLworIH07CiAgCistLyogU3dhcCA1MCUgZnVsbD8gUmVsZWFzZSBzd2Fw Y2FjaGUgbW9yZSBhZ2dyZXNzaXZlbHkuLiAqLworKy8qIFN3YXAgNTAlIGZ1bGw/ICovCisgI2Rl ZmluZSB2bV9zd2FwX2Z1bGwoKSAobnJfc3dhcF9wYWdlcyoyIDwgdG90YWxfc3dhcF9wYWdlcykK KyAKKyAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi8KK0BAIC0zNTEsOSArMzUxLDEwIEBACisg ZXh0ZXJuIHZvaWQgX19wdXRfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICopOworIGV4dGVy biB2b2lkIGRpc2FibGVfc3dhcF90b2tlbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOworIAor Ky8qIE9ubHkgYWxsb3cgc3dhcCB0b2tlbiB0byBoYXZlIGVmZmVjdCBpZiBzd2FwIGlzIGZ1bGwg Ki8KKyBzdGF0aWMgaW5saW5lIGludCBoYXNfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICpt bSkKKyB7CistCXJldHVybiAobW0gPT0gc3dhcF90b2tlbl9tbSk7CisrCXJldHVybiAobW0gPT0g c3dhcF90b2tlbl9tbSAmJiB2bV9zd2FwX2Z1bGwoKSk7CisgfQorIAorIHN0YXRpYyBpbmxpbmUg dm9pZCBwdXRfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK2RpZmYgLXJ1TiBsaW51 eC0zLjMuNS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaCBsaW51eC0zLjMuNS1SSUZT LVJDMy1CUkFJTi1FQVRJTkcvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKKy0tLSBs aW51eC0zLjMuNS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAkyMDEyLTA1LTA3IDIz OjU1OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVB VElORy9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAkyMDEyLTA1LTE5IDIyOjA0OjM3 LjAwMDAwMDAwMCArMDgwMAorQEAgLTM4LDggKzM4LDggQEAKKyAgKiBJZiB0aW1lID4gNHNlYywg aXQgaXMgInNsb3ciIHBhdGgsIG5vIHJlY3ljbGluZyBpcyByZXF1aXJlZCwKKyAgKiBzbyB0aGF0 IHdlIHNlbGVjdCB0aWNrIHRvIGdldCByYW5nZSBhYm91dCA0IHNlY29uZHMuCisgICovCistI2lm IEhaIDw9IDE2IHx8IEhaID4gNDA5NgorLSMgZXJyb3IgVW5zdXBwb3J0ZWQ6IEhaIDw9IDE2IG9y IEhaID4gNDA5NgorKyNpZiBIWiA8PSAxNiB8fCBIWiA+IDE2Mzg0CisrIyBlcnJvciBVbnN1cHBv cnRlZDogSFogPD0gMTYgb3IgSFogPiAxNjM4NAorICNlbGlmIEhaIDw9IDMyCisgIyBkZWZpbmUg SU5FVF9UV0RSX1JFQ1lDTEVfVElDSyAoNSArIDIgLSBJTkVUX1RXRFJfUkVDWUNMRV9TTE9UU19M T0cpCisgI2VsaWYgSFogPD0gNjQKK0BAIC01NCw4ICs1NCwxMiBAQAorICMgZGVmaW5lIElORVRf VFdEUl9SRUNZQ0xFX1RJQ0sgKDEwICsgMiAtIElORVRfVFdEUl9SRUNZQ0xFX1NMT1RTX0xPRykK KyAjZWxpZiBIWiA8PSAyMDQ4CisgIyBkZWZpbmUgSU5FVF9UV0RSX1JFQ1lDTEVfVElDSyAoMTEg KyAyIC0gSU5FVF9UV0RSX1JFQ1lDTEVfU0xPVFNfTE9HKQorLSNlbHNlCisrI2VsaWYgSFogPD0g NDA5NgorICMgZGVmaW5lIElORVRfVFdEUl9SRUNZQ0xFX1RJQ0sgKDEyICsgMiAtIElORVRfVFdE Ul9SRUNZQ0xFX1NMT1RTX0xPRykKKysjZWxpZiBIWiA8PSA4MTkyCisrIyBkZWZpbmUgSU5FVF9U V0RSX1JFQ1lDTEVfVElDSyAoMTMgKyAyIC0gSU5FVF9UV0RSX1JFQ1lDTEVfU0xPVFNfTE9HKQor KyNlbHNlCisrIyBkZWZpbmUgSU5FVF9UV0RSX1JFQ1lDTEVfVElDSyAoMTQgKyAyIC0gSU5FVF9U V0RSX1JFQ1lDTEVfU0xPVFNfTE9HKQorICNlbmRpZgorIAorIC8qIFRJTUVfV0FJVCByZWFwaW5n IG1lY2hhbmlzbS4gKi8KK2RpZmYgLXJ1TiBsaW51eC0zLjMuNS9pbml0L2NhbGlicmF0ZS5jIGxp bnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9pbml0L2NhbGlicmF0ZS5jCistLS0gbGlu dXgtMy4zLjUvaW5pdC9jYWxpYnJhdGUuYwkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAwMCAr MDgwMAorKysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9pbml0L2NhbGlicmF0 ZS5jCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtMjkzLDcgKzI5Myw3 IEBACisgCWlmICghcHJpbnRlZCkKKyAJCXByX2NvbnQoIiVsdS4lMDJsdSBCb2dvTUlQUyAobHBq PSVsdSlcbiIsCisgCQkJbHBqLyg1MDAwMDAvSFopLAorLQkJCShscGovKDUwMDAvSFopKSAlIDEw MCwgbHBqKTsKKysJCQkobHBqICogMTAgLyg1MDAwMCAvIEhaKSkgJSAxMDAsIGxwaik7CisgCisg CWxvb3BzX3Blcl9qaWZmeSA9IGxwajsKKyAJcHJpbnRlZCA9IHRydWU7CitkaWZmIC1ydU4gbGlu dXgtMy4zLjUvaW5pdC9LY29uZmlnIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9p bml0L0tjb25maWcKKy0tLSBsaW51eC0zLjMuNS9pbml0L0tjb25maWcJMjAxMi0wNS0wNyAyMzo1 NTozMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJ TkcvaW5pdC9LY29uZmlnCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAt MjksNiArMjksMTggQEAKKyAKICBtZW51ICJHZW5lcmFsIHNldHVwIgogIAotK2NvbmZpZyBTQ0hF RF9CRlMKLSsJYm9vbCAiQkZTIGNwdSBzY2hlZHVsZXIiCisrY29uZmlnIFNDSEVEX1JJRlMKKysJ Ym9vbCAiUklGUyBjcHUgc2NoZWR1bGVyIgogKwktLS1oZWxwLS0tCi0rCSAgVGhlIEJyYWluIEZ1 Y2sgQ1BVIFNjaGVkdWxlciBmb3IgZXhjZWxsZW50IGludGVyYWN0aXZpdHkgYW5kCi0rCSAgcmVz cG9uc2l2ZW5lc3Mgb24gdGhlIGRlc2t0b3AgYW5kIHNvbGlkIHNjYWxhYmlsaXR5IG9uIG5vcm1h bAotKyAgICAgICAgICBoYXJkd2FyZS4gTm90IHJlY29tbWVuZGVkIGZvciA0MDk2IENQVXMuCisr CSAgVGhlIFJJRlMgY3B1IHNjaGVkdWxlciBpcyBkZXNpZ25lZCBmb3IgZXhjZWxsZW50IGludGVy YWN0aXZpdHkgYW5kCisrCSAgcmVzcG9uc2l2ZW5lc3MuCiArCiArCSAgQ3VycmVudGx5IGluY29t cGF0aWJsZSB3aXRoIHRoZSBHcm91cCBDUFUgc2NoZWR1bGVyLCBhbmQgUkNVIFRPUlRVUkUKICsg ICAgICAgICAgVEVTVCBzbyB0aGVzZSBvcHRpb25zIGFyZSBkaXNhYmxlZC4KQEAgLTc5MywzNSAr NTkzLDM0IEBACiAgY29uZmlnIEVYUEVSSU1FTlRBTAogIAlib29sICJQcm9tcHQgZm9yIGRldmVs b3BtZW50IGFuZC9vciBpbmNvbXBsZXRlIGNvZGUvZHJpdmVycyIKICAJLS0taGVscC0tLQotQEAg LTY0MCw2ICs2NTMsNyBAQCBjb25maWcgUFJPQ19QSURfQ1BVU0VUCitAQCAtNjQwLDYgKzY1Miw3 IEBACiAgCiAgY29uZmlnIENHUk9VUF9DUFVBQ0NUCiAgCWJvb2wgIlNpbXBsZSBDUFUgYWNjb3Vu dGluZyBjZ3JvdXAgc3Vic3lzdGVtIgotKwlkZXBlbmRzIG9uICFTQ0hFRF9CRlMKKysJZGVwZW5k cyBvbiAhU0NIRURfUklGUwogIAloZWxwCiAgCSAgUHJvdmlkZXMgYSBzaW1wbGUgUmVzb3VyY2Ug Q29udHJvbGxlciBmb3IgbW9uaXRvcmluZyB0aGUKICAJICB0b3RhbCBDUFUgY29uc3VtZWQgYnkg dGhlIHRhc2tzIGluIGEgY2dyb3VwLgotQEAgLTcyNyw2ICs3NDEsNyBAQCBjb25maWcgQ0dST1VQ X1BFUkYKK0BAIC03MjcsNiArNzQwLDcgQEAKICAKICBtZW51Y29uZmlnIENHUk9VUF9TQ0hFRAog IAlib29sICJHcm91cCBDUFUgc2NoZWR1bGVyIgotKwlkZXBlbmRzIG9uICFTQ0hFRF9CRlMKKysJ ZGVwZW5kcyBvbiAhU0NIRURfUklGUwogIAlkZWZhdWx0IG4KICAJaGVscAogIAkgIFRoaXMgZmVh dHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9s IENQVQotQEAgLTg2Myw2ICs4NzgsNyBAQCBlbmRpZiAjIE5BTUVTUEFDRVMKK0BAIC04NjMsNiAr ODc3LDcgQEAKICAKICBjb25maWcgU0NIRURfQVVUT0dST1VQCiAgCWJvb2wgIkF1dG9tYXRpYyBw cm9jZXNzIGdyb3VwIHNjaGVkdWxpbmciCi0rCWRlcGVuZHMgb24gIVNDSEVEX0JGUworKwlkZXBl bmRzIG9uICFTQ0hFRF9SSUZTCiAgCXNlbGVjdCBFVkVOVEZECiAgCXNlbGVjdCBDR1JPVVBTCiAg CXNlbGVjdCBDR1JPVVBfU0NIRUQKLUluZGV4OiBsaW51eC0zLjMtY2sxL2luaXQvbWFpbi5jCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLS0gbGludXgtMy4zLWNrMS5vcmlnL2luaXQvbWFpbi5jCTIwMTItMDMtMjQg MTk6MzA6MDAuMDEzNDIwMzgxICsxMTAwCi0rKysgbGludXgtMy4zLWNrMS9pbml0L21haW4uYwky MDEyLTAzLTI0IDE5OjMwOjI5LjA0MTkyNTc5MiArMTEwMAotQEAgLTc1Nyw2ICs3NTcsNyBAQCBz dGF0aWMgbm9pbmxpbmUgaW50IGluaXRfcG9zdCh2b2lkKQorZGlmZiAtcnVOIGxpbnV4LTMuMy41 L2luaXQvbWFpbi5jIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9pbml0L21haW4u YworLS0tIGxpbnV4LTMuMy41L2luaXQvbWFpbi5jCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAw MDAwICswODAwCisrKysgbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2luaXQvbWFp bi5jCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtNzU3LDYgKzc1Nyw3 IEBACiAgCXN5c3RlbV9zdGF0ZSA9IFNZU1RFTV9SVU5OSU5HOwogIAludW1hX2RlZmF1bHRfcG9s aWN5KCk7CiAgCkBAIC04MjksMTEgKzYyOCwxMCBAQAogIAogIAljdXJyZW50LT5zaWduYWwtPmZs YWdzIHw9IFNJR05BTF9VTktJTExBQkxFOwogIAotSW5kZXg6IGxpbnV4LTMuMy1jazEva2VybmVs L2RlbGF5YWNjdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGludXgtMy4zLWNrMS5vcmlnL2tlcm5lbC9k ZWxheWFjY3QuYwkyMDEyLTAzLTI0IDE5OjMwOjAwLjAxNDQyMDM5OSArMTEwMAotKysrIGxpbnV4 LTMuMy1jazEva2VybmVsL2RlbGF5YWNjdC5jCTIwMTItMDMtMjQgMTk6MzA6MjkuMDQxOTI1Nzky ICsxMTAwCi1AQCAtMTMwLDcgKzEzMCw3IEBAIGludCBfX2RlbGF5YWNjdF9hZGRfdHNrKHN0cnVj dCB0YXNrc3RhdHMKK2RpZmYgLXJ1TiBsaW51eC0zLjMuNS9rZXJuZWwvZGVsYXlhY2N0LmMgbGlu dXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2tlcm5lbC9kZWxheWFjY3QuYworLS0tIGxp bnV4LTMuMy41L2tlcm5lbC9kZWxheWFjY3QuYwkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAw MCArMDgwMAorKysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9rZXJuZWwvZGVs YXlhY2N0LmMJMjAxMi0wNS0xOSAyMjowNDozNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xMzAsNyAr MTMwLDcgQEAKICAJICovCiAgCXQxID0gdHNrLT5zY2hlZF9pbmZvLnBjb3VudDsKICAJdDIgPSB0 c2stPnNjaGVkX2luZm8ucnVuX2RlbGF5OwpAQCAtODQyLDExICs2NDAsMTAgQEAKICAKICAJZC0+ Y3B1X2NvdW50ICs9IHQxOwogIAotSW5kZXg6IGxpbnV4LTMuMy1jazEva2VybmVsL2V4aXQuYwot PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0tIGxpbnV4LTMuMy1jazEub3JpZy9rZXJuZWwvZXhpdC5jCTIwMTItMDMt MjQgMTk6MzA6MDAuMDE0NDIwMzk5ICsxMTAwCi0rKysgbGludXgtMy4zLWNrMS9rZXJuZWwvZXhp dC5jCTIwMTItMDMtMjQgMTk6MzA6MjkuMDQxOTI1NzkyICsxMTAwCi1AQCAtMTMyLDcgKzEzMiw3 IEBAIHN0YXRpYyB2b2lkIF9fZXhpdF9zaWduYWwoc3RydWN0IHRhc2tfc3QKK2RpZmYgLXJ1TiBs aW51eC0zLjMuNS9rZXJuZWwvZXhpdC5jIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElO Ry9rZXJuZWwvZXhpdC5jCistLS0gbGludXgtMy4zLjUva2VybmVsL2V4aXQuYwkyMDEyLTA1LTA3 IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlO LUVBVElORy9rZXJuZWwvZXhpdC5jCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAw CitAQCAtMTMyLDcgKzEzMiw3IEBACiAgCQlzaWctPmluYmxvY2sgKz0gdGFza19pb19nZXRfaW5i bG9jayh0c2spOwogIAkJc2lnLT5vdWJsb2NrICs9IHRhc2tfaW9fZ2V0X291YmxvY2sodHNrKTsK ICAJCXRhc2tfaW9fYWNjb3VudGluZ19hZGQoJnNpZy0+aW9hYywgJnRzay0+aW9hYyk7CkBAIC04 NTUsMTEgKzY1MiwxNTggQEAKICAJfQogIAogIAlzaWctPm5yX3RocmVhZHMtLTsKLUluZGV4OiBs aW51eC0zLjMtY2sxL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKLT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBs aW51eC0zLjMtY2sxLm9yaWcva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwkyMDEyLTAzLTI0IDE5 OjMwOjAwLjAxNDQyMDM5OSArMTEwMAotKysrIGxpbnV4LTMuMy1jazEva2VybmVsL3Bvc2l4LWNw dS10aW1lcnMuYwkyMDEyLTAzLTI0IDE5OjMwOjI5LjA0MjkyNTgwOSArMTEwMAotQEAgLTQ5NSw3 ICs0OTUsNyBAQCBzdGF0aWMgdm9pZCBjbGVhbnVwX3RpbWVycyhzdHJ1Y3QgbGlzdF9oCitkaWZm IC1ydU4gbGludXgtMy4zLjUva2VybmVsL0tjb25maWcuaHogbGludXgtMy4zLjUtUklGUy1SQzMt QlJBSU4tRUFUSU5HL2tlcm5lbC9LY29uZmlnLmh6CistLS0gbGludXgtMy4zLjUva2VybmVsL0tj b25maWcuaHoJMjAxMi0wNS0wNyAyMzo1NTozMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaW51eC0z LjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJTkcva2VybmVsL0tjb25maWcuaHoJMjAxMi0wNS0xOSAy MjowNDozNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC00LDcgKzQsNyBAQAorIAorIGNob2ljZQorIAlw cm9tcHQgIlRpbWVyIGZyZXF1ZW5jeSIKKy0JZGVmYXVsdCBIWl8yNTAKKysJZGVmYXVsdCBIWl8x MDAwCisgCWhlbHAKKyAJIEFsbG93cyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdGltZXIgZnJl cXVlbmN5LiBJdCBpcyBjdXN0b21hcnkKKyAJIHRvIGhhdmUgdGhlIHRpbWVyIGludGVycnVwdCBy dW4gYXQgMTAwMCBIeiBidXQgMTAwIEh6IG1heSBiZSBtb3JlCitAQCAtMjMsMTMgKzIzLDE0IEBA CisgCSAgd2l0aCBsb3RzIG9mIHByb2Nlc3NvcnMgdGhhdCBtYXkgc2hvdyByZWR1Y2VkIHBlcmZv cm1hbmNlIGlmCisgCSAgdG9vIG1hbnkgdGltZXIgaW50ZXJydXB0cyBhcmUgb2NjdXJyaW5nLgor IAorLQljb25maWcgSFpfMjUwCisrCWNvbmZpZyBIWl8yNTBfTk9ERUZBVUxUCisgCQlib29sICIy NTAgSFoiCisgCWhlbHAKKy0JIDI1MCBIeiBpcyBhIGdvb2QgY29tcHJvbWlzZSBjaG9pY2UgYWxs b3dpbmcgc2VydmVyIHBlcmZvcm1hbmNlCistCSB3aGlsZSBhbHNvIHNob3dpbmcgZ29vZCBpbnRl cmFjdGl2ZSByZXNwb25zaXZlbmVzcyBldmVuCistCSBvbiBTTVAgYW5kIE5VTUEgc3lzdGVtcy4g SWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyBOVFNDIHZpZGVvCistCSBvciBtdWx0aW1lZGlh LCBzZWxlY3RlZCAzMDBIeiBpbnN0ZWFkLgorKwkgMjUwIEhaIGlzIGEgbG91c3kgY29tcHJvbWlz ZSBjaG9pY2UgYWxsb3dpbmcgc2VydmVyIGludGVyYWN0aXZpdHkKKysJIHdoaWxlIGFsc28gc2hv d2luZyBkZXNrdG9wIHRocm91Z2hwdXQgYW5kIG5vIGV4dHJhIHBvd2VyIHNhdmluZyBvbgorKwkg bGFwdG9wcy4gTm8gZ29vZCBmb3IgYW55dGhpbmcuCisrCisrCSBSZWNvbW1lbmQgMTAwIG9yIDEw MDAgaW5zdGVhZC4KKyAKKyAJY29uZmlnIEhaXzMwMAorIAkJYm9vbCAiMzAwIEhaIgorQEAgLTQz LDE2ICs0NCw4MiBAQAorIAkJYm9vbCAiMTAwMCBIWiIKKyAJaGVscAorIAkgMTAwMCBIeiBpcyB0 aGUgcHJlZmVycmVkIGNob2ljZSBmb3IgZGVza3RvcCBzeXN0ZW1zIGFuZCBvdGhlcgorLQkgc3lz dGVtcyByZXF1aXJpbmcgZmFzdCBpbnRlcmFjdGl2ZSByZXNwb25zZXMgdG8gZXZlbnRzLgorKwkg c3lzdGVtcyByZXF1aXJpbmcgZmFzdCBpbnRlcmFjdGl2ZSByZXNwb25zZXMgdG8gZXZlbnRzLiBM YXB0b3BzCisrCSBjYW4gYWxzbyBiZW5lZml0IGZyb20gdGhpcyBjaG9pY2Ugd2l0aG91dCBzYWNy aWZpY2luZyBiYXR0ZXJ5IGxpZmUKKysJIGlmIGR5bnRpY2tzIGlzIGFsc28gZW5hYmxlZC4KKysK KysJY29uZmlnIEhaXzE1MDAKKysJCWJvb2wgIjE1MDAgSFoiCisrCWhlbHAKKysJIDE1MDAgSHog aXMgYW4gaW5zYW5lIHZhbHVlIHRvIHVzZSB0byBydW4gYnJva2VuIHNvZnR3YXJlIHRoYXQgaXMg SHoKKysJIGxpbWl0ZWQuCisrCisrCSBCZWluZyBvdmVyIDEwMDAsIGRyaXZlciBicmVha2FnZSBp cyBsaWtlbHkuCisrCisrCWNvbmZpZyBIWl8yMDAwCisrCQlib29sICIyMDAwIEhaIgorKwloZWxw CisrCSAyMDAwIEh6IGlzIGFuIGluc2FuZSB2YWx1ZSB0byB1c2UgdG8gcnVuIGJyb2tlbiBzb2Z0 d2FyZSB0aGF0IGlzIEh6CisrCSBsaW1pdGVkLgorKworKwkgQmVpbmcgb3ZlciAxMDAwLCBkcml2 ZXIgYnJlYWthZ2UgaXMgbGlrZWx5LgorKworKwljb25maWcgSFpfMzAwMAorKwkJYm9vbCAiMzAw MCBIWiIKKysJaGVscAorKwkgMzAwMCBIeiBpcyBhbiBpbnNhbmUgdmFsdWUgdG8gdXNlIHRvIHJ1 biBicm9rZW4gc29mdHdhcmUgdGhhdCBpcyBIegorKwkgbGltaXRlZC4KKysKKysJIEJlaW5nIG92 ZXIgMTAwMCwgZHJpdmVyIGJyZWFrYWdlIGlzIGxpa2VseS4KKysKKysJY29uZmlnIEhaXzQwMDAK KysJCWJvb2wgIjQwMDAgSFoiCisrCWhlbHAKKysJIDQwMDAgSHogaXMgYW4gaW5zYW5lIHZhbHVl IHRvIHVzZSB0byBydW4gYnJva2VuIHNvZnR3YXJlIHRoYXQgaXMgSHoKKysJIGxpbWl0ZWQuCisr CisrCSBCZWluZyBvdmVyIDEwMDAsIGRyaXZlciBicmVha2FnZSBpcyBsaWtlbHkuCisrCisrCWNv bmZpZyBIWl81MDAwCisrCQlib29sICI1MDAwIEhaIgorKwloZWxwCisrCSA1MDAwIEh6IGlzIGFu IG9ic2NlbmUgdmFsdWUgdG8gdXNlIHRvIHJ1biBicm9rZW4gc29mdHdhcmUgdGhhdCBpcyBIegor KwkgbGltaXRlZC4KKysKKysJIEJlaW5nIG92ZXIgMTAwMCwgZHJpdmVyIGJyZWFrYWdlIGlzIGxp a2VseS4KKysKKysJY29uZmlnIEhaXzc1MDAKKysJCWJvb2wgIjc1MDAgSFoiCisrCWhlbHAKKysJ IDc1MDAgSHogaXMgYW4gb2JzY2VuZSB2YWx1ZSB0byB1c2UgdG8gcnVuIGJyb2tlbiBzb2Z0d2Fy ZSB0aGF0IGlzIEh6CisrCSBsaW1pdGVkLgorKworKwkgQmVpbmcgb3ZlciAxMDAwLCBkcml2ZXIg YnJlYWthZ2UgaXMgbGlrZWx5LgorKworKwljb25maWcgSFpfMTAwMDAKKysJCWJvb2wgIjEwMDAw IEhaIgorKwloZWxwCisrCSAxMDAwMCBIeiBpcyBhbiBvYnNjZW5lIHZhbHVlIHRvIHVzZSB0byBy dW4gYnJva2VuIHNvZnR3YXJlIHRoYXQgaXMgSHoKKysJIGxpbWl0ZWQuCisrCisrCSBCZWluZyBv dmVyIDEwMDAsIGRyaXZlciBicmVha2FnZSBpcyBsaWtlbHkuCisrCisgCisgZW5kY2hvaWNlCisg CisgY29uZmlnIEhaCisgCWludAorIAlkZWZhdWx0IDEwMCBpZiBIWl8xMDAKKy0JZGVmYXVsdCAy NTAgaWYgSFpfMjUwCisrCWRlZmF1bHQgMjUwIGlmIEhaXzI1MF9OT0RFRkFVTFQKKyAJZGVmYXVs dCAzMDAgaWYgSFpfMzAwCisgCWRlZmF1bHQgMTAwMCBpZiBIWl8xMDAwCisrCWRlZmF1bHQgMTUw MCBpZiBIWl8xNTAwCisrCWRlZmF1bHQgMjAwMCBpZiBIWl8yMDAwCisrCWRlZmF1bHQgMzAwMCBp ZiBIWl8zMDAwCisrCWRlZmF1bHQgNDAwMCBpZiBIWl80MDAwCisrCWRlZmF1bHQgNTAwMCBpZiBI Wl81MDAwCisrCWRlZmF1bHQgNzUwMCBpZiBIWl83NTAwCisrCWRlZmF1bHQgMTAwMDAgaWYgSFpf MTAwMDAKKyAKKyBjb25maWcgU0NIRURfSFJUSUNLCisgCWRlZl9ib29sIEhJR0hfUkVTX1RJTUVS UyAmJiAoIVNNUCB8fCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUykKK2RpZmYgLXJ1TiBsaW51eC0z LjMuNS9rZXJuZWwvS2NvbmZpZy5wcmVlbXB0IGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVB VElORy9rZXJuZWwvS2NvbmZpZy5wcmVlbXB0CistLS0gbGludXgtMy4zLjUva2VybmVsL0tjb25m aWcucHJlZW1wdAkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpbnV4 LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9rZXJuZWwvS2NvbmZpZy5wcmVlbXB0CTIwMTIt MDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtMSw3ICsxLDcgQEAKKyAKKyBjaG9p Y2UKKyAJcHJvbXB0ICJQcmVlbXB0aW9uIE1vZGVsIgorLQlkZWZhdWx0IFBSRUVNUFRfTk9ORQor KwlkZWZhdWx0IFBSRUVNUFQKKyAKKyBjb25maWcgUFJFRU1QVF9OT05FCisgCWJvb2wgIk5vIEZv cmNlZCBQcmVlbXB0aW9uIChTZXJ2ZXIpIgorQEAgLTE3LDcgKzE3LDcgQEAKKyAJICBsYXRlbmNp ZXMuCisgCisgY29uZmlnIFBSRUVNUFRfVk9MVU5UQVJZCistCWJvb2wgIlZvbHVudGFyeSBLZXJu ZWwgUHJlZW1wdGlvbiAoRGVza3RvcCkiCisrCWJvb2wgIlZvbHVudGFyeSBLZXJuZWwgUHJlZW1w dGlvbiAoTm90aGluZykiCisgCWhlbHAKKyAJICBUaGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBsYXRl bmN5IG9mIHRoZSBrZXJuZWwgYnkgYWRkaW5nIG1vcmUKKyAJICAiZXhwbGljaXQgcHJlZW1wdGlv biBwb2ludHMiIHRvIHRoZSBrZXJuZWwgY29kZS4gVGhlc2UgbmV3CitAQCAtMzEsNyArMzEsOCBA QAorIAkgIGFwcGxpY2F0aW9ucyB0byBydW4gbW9yZSAnc21vb3RobHknIGV2ZW4gd2hlbiB0aGUg c3lzdGVtIGlzCisgCSAgdW5kZXIgbG9hZC4KKyAKKy0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJl IGJ1aWxkaW5nIGEga2VybmVsIGZvciBhIGRlc2t0b3Agc3lzdGVtLgorKwkgIFNlbGVjdCB0aGlz IGZvciBubyBzeXN0ZW0gaW4gcGFydGljdWxhciAoY2hvb3NlIFByZWVtcHRpYmxlCisrCSAgaW5z dGVhZCBvbiBhIGRlc2t0b3AgaWYgeW91IGtub3cgd2hhdCdzIGdvb2QgZm9yIHlvdSkuCisgCisg Y29uZmlnIFBSRUVNUFQKKyAJYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIChMb3ctTGF0ZW5jeSBE ZXNrdG9wKSIKK2RpZmYgLXJ1TiBsaW51eC0zLjMuNS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5j IGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9rZXJuZWwvcG9zaXgtY3B1LXRpbWVy cy5jCistLS0gbGludXgtMy4zLjUva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwkyMDEyLTA1LTA3 IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlO LUVBVElORy9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAw MDAwMDAwICswODAwCitAQCAtNDk1LDcgKzQ5NSw3IEBACiAgdm9pZCBwb3NpeF9jcHVfdGltZXJz X2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiAgewogIAljbGVhbnVwX3RpbWVycyh0c2st PmNwdV90aW1lcnMsCkBAIC04NjgsNyArODEyLDcgQEAKICAKICB9CiAgdm9pZCBwb3NpeF9jcHVf dGltZXJzX2V4aXRfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi1AQCAtNTA0LDcgKzUw NCw3IEBAIHZvaWQgcG9zaXhfY3B1X3RpbWVyc19leGl0X2dyb3VwKHN0cnVjdAorQEAgLTUwNCw3 ICs1MDQsNyBAQAogIAogIAljbGVhbnVwX3RpbWVycyh0c2stPnNpZ25hbC0+Y3B1X3RpbWVycywK ICAJCSAgICAgICB0c2stPnV0aW1lICsgc2lnLT51dGltZSwgdHNrLT5zdGltZSArIHNpZy0+c3Rp bWUsCkBAIC04NzcsNyArODIxLDcgQEAKICB9CiAgCiAgc3RhdGljIHZvaWQgY2xlYXJfZGVhZF90 YXNrKHN0cnVjdCBrX2l0aW1lciAqdGltZXIsIHVuaW9uIGNwdV90aW1lX2NvdW50IG5vdykKLUBA IC05MzQsNyArOTM0LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfdGhyZWFkX3RpbWVycyhzdHJ1Y3Qg dAorQEAgLTkzNCw3ICs5MzQsNyBAQAogIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlz dF9maXJzdF9lbnRyeSh0aW1lcnMsCiAgCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0 LAogIAkJCQkJCSAgICAgIGVudHJ5KTsKQEAgLTg4Niw3ICs4MzAsNyBAQAogIAkJCXRzay0+Y3B1 dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IHQtPmV4cGlyZXMuc2NoZWQ7CiAgCQkJYnJlYWs7CiAg CQl9Ci1AQCAtOTUxLDcgKzk1MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3RocmVhZF90aW1lcnMo c3RydWN0IHQKK0BAIC05NTEsNyArOTUxLDcgQEAKICAJCQlBQ0NFU1NfT05DRShzaWctPnJsaW1b UkxJTUlUX1JUVElNRV0ucmxpbV9tYXgpOwogIAogIAkJaWYgKGhhcmQgIT0gUkxJTV9JTkZJTklU WSAmJgpAQCAtODk1LDcgKzgzOSw3IEBACiAgCQkJLyoKICAJCQkgKiBBdCB0aGUgaGFyZCBsaW1p dCwgd2UganVzdCBkaWUuCiAgCQkJICogTm8gbmVlZCB0byBjYWxjdWxhdGUgYW55dGhpbmcgZWxz ZSBub3cuCi1AQCAtOTU5LDcgKzk1OSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3RocmVhZF90aW1l cnMoc3RydWN0IHQKK0BAIC05NTksNyArOTU5LDcgQEAKICAJCQlfX2dyb3VwX3NlbmRfc2lnX2lu Zm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgdHNrKTsKICAJCQlyZXR1cm47CiAgCQl9CkBAIC05 MDQsNyArODQ4LDcgQEAKICAJCQkvKgogIAkJCSAqIEF0IHRoZSBzb2Z0IGxpbWl0LCBzZW5kIGEg U0lHWENQVSBldmVyeSBzZWNvbmQuCiAgCQkJICovCi1AQCAtMTI1Miw3ICsxMjUyLDcgQEAgc3Rh dGljIGlubGluZSBpbnQgZmFzdHBhdGhfdGltZXJfY2hlY2socworQEAgLTEyNTIsNyArMTI1Miw3 IEBACiAgCQlzdHJ1Y3QgdGFza19jcHV0aW1lIHRhc2tfc2FtcGxlID0gewogIAkJCS51dGltZSA9 IHRzay0+dXRpbWUsCiAgCQkJLnN0aW1lID0gdHNrLT5zdGltZSwKQEAgLTkxMywxOTggKzg1Nywz MSBAQAogIAkJfTsKICAKICAJCWlmICh0YXNrX2NwdXRpbWVfZXhwaXJlZCgmdGFza19zYW1wbGUs ICZ0c2stPmNwdXRpbWVfZXhwaXJlcykpCi1JbmRleDogbGludXgtMy4zLWNrMS9rZXJuZWwvc3lz Y3RsLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tLSBsaW51eC0zLjMtY2sxLm9yaWcva2VybmVsL3N5c2N0bC5j CTIwMTItMDMtMjQgMTk6MzA6MDAuMDEzNDIwMzgxICsxMTAwCi0rKysgbGludXgtMy4zLWNrMS9r ZXJuZWwvc3lzY3RsLmMJMjAxMi0wMy0yNCAxOTozMDoyOS4wNDI5MjU4MDkgKzExMDAKLUBAIC0x MjEsNyArMTIxLDEyIEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgb25lID0gMTsKLSBzdGF0 aWMgaW50IF9fbWF5YmVfdW51c2VkIHR3byA9IDI7Ci0gc3RhdGljIGludCBfX21heWJlX3VudXNl ZCB0aHJlZSA9IDM7Ci0gc3RhdGljIHVuc2lnbmVkIGxvbmcgb25lX3VsID0gMTsKLS1zdGF0aWMg aW50IG9uZV9odW5kcmVkID0gMTAwOwotK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgb25lX2h1 bmRyZWQgPSAxMDA7Ci0rI2lmZGVmIENPTkZJR19TQ0hFRF9CRlMKLStleHRlcm4gaW50IHJyX2lu dGVydmFsOwotK2V4dGVybiBpbnQgc2NoZWRfaXNvX2NwdTsKLStzdGF0aWMgaW50IF9fcmVhZF9t b3N0bHkgb25lX3Rob3VzYW5kID0gMTAwMDsKLSsjZW5kaWYKLSAjaWZkZWYgQ09ORklHX1BSSU5U SwotIHN0YXRpYyBpbnQgdGVuX3Rob3VzYW5kID0gMTAwMDA7Ci0gI2VuZGlmCi1AQCAtMjUxLDcg KzI1Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJvb3RfdGFibGVbXSA9IHsKLSAJeyB9 Ci0gfTsKK2RpZmYgLXJ1TiBsaW51eC0zLjMuNS9rZXJuZWwvc2NoZWQvTWFrZWZpbGUgbGludXgt My4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2tlcm5lbC9zY2hlZC9NYWtlZmlsZQorLS0tIGxp bnV4LTMuMy41L2tlcm5lbC9zY2hlZC9NYWtlZmlsZQkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAw MDAwMCArMDgwMAorKysrIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9rZXJuZWwv c2NoZWQvTWFrZWZpbGUJMjAxMi0wNS0xOSAyMjowNTozNS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0x MSwxMCArMTEsMTMgQEAKKyBDRkxBR1NfY29yZS5vIDo9ICQoUFJPRklMSU5HKSAtZm5vLW9taXQt ZnJhbWUtcG9pbnRlcgorIGVuZGlmCiAgCi0tI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwotKyNp ZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9ERUJVRykgJiYgIWRlZmluZWQoQ09ORklHX1NDSEVEX0JG UykKLSBzdGF0aWMgaW50IG1pbl9zY2hlZF9ncmFudWxhcml0eV9ucyA9IDEwMDAwMDsJCS8qIDEw MCB1c2VjcyAqLwotIHN0YXRpYyBpbnQgbWF4X3NjaGVkX2dyYW51bGFyaXR5X25zID0gTlNFQ19Q RVJfU0VDOwkvKiAxIHNlY29uZCAqLwotIHN0YXRpYyBpbnQgbWluX3dha2V1cF9ncmFudWxhcml0 eV9uczsJCQkvKiAwIHVzZWNzICovCi1AQCAtMjY2LDYgKzI3MSw3IEBAIHN0YXRpYyBpbnQgbWF4 X2V4dGZyYWdfdGhyZXNob2xkID0gMTAwMDsKLSAjZW5kaWYKKytpZmRlZiBDT05GSUdfU0NIRURf UklGUworK29iai15ICs9IHJpZnMubyBjbG9jay5vCisrZWxzZQorIG9iai15ICs9IGNvcmUubyBj bG9jay5vIGlkbGVfdGFzay5vIGZhaXIubyBydC5vIHN0b3BfdGFzay5vCistb2JqLSQoQ09ORklH X1NNUCkgKz0gY3B1cHJpLm8KKyBvYmotJChDT05GSUdfU0NIRURfQVVUT0dST1VQKSArPSBhdXRv X2dyb3VwLm8KKy1vYmotJChDT05GSUdfU0NIRURTVEFUUykgKz0gc3RhdHMubworIG9iai0kKENP TkZJR19TQ0hFRF9ERUJVRykgKz0gZGVidWcubworK2VuZGlmCisrb2JqLSQoQ09ORklHX1NNUCkg Kz0gY3B1cHJpLm8KICAKLSBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBrZXJuX3RhYmxlW10gPSB7 Ci0rI2lmbmRlZiBDT05GSUdfU0NIRURfQkZTCi0gCXsKLSAJCS5wcm9jbmFtZQk9ICJzY2hlZF9j aGlsZF9ydW5zX2ZpcnN0IiwKLSAJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfY2hpbGRfcnVuc19m aXJzdCwKLUBAIC0zODMsNiArMzg5LDcgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUga2Vybl90 YWJsZVtdID0gewotIAkJLmV4dHJhMQkJPSAmb25lLAotIAl9LAotICNlbmRpZgotKyNlbmRpZiAv KiAhQ09ORklHX1NDSEVEX0JGUyAqLwotICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotIAl7 Ci0gCQkucHJvY25hbWUJPSAicHJvdmVfbG9ja2luZyIsCi1AQCAtODUwLDYgKzg1NywyNiBAQCBz dGF0aWMgc3RydWN0IGN0bF90YWJsZSBrZXJuX3RhYmxlW10gPSB7Ci0gCQkucHJvY19oYW5kbGVy CT0gcHJvY19kb2ludHZlYywKLSAJfSwKLSAjZW5kaWYKLSsjaWZkZWYgQ09ORklHX1NDSEVEX0JG UwotKwl7Ci0rCQkucHJvY25hbWUJPSAicnJfaW50ZXJ2YWwiLAotKwkJLmRhdGEJCT0gJnJyX2lu dGVydmFsLAotKwkJLm1heGxlbgkJPSBzaXplb2YgKGludCksCi0rCQkubW9kZQkJPSAwNjQ0LAot KwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKLSsJCS5leHRyYTEJCT0g Jm9uZSwKLSsJCS5leHRyYTIJCT0gJm9uZV90aG91c2FuZCwKLSsJfSwKLSsJewotKwkJLnByb2Nu YW1lCT0gImlzb19jcHUiLAotKwkJLmRhdGEJCT0gJnNjaGVkX2lzb19jcHUsCi0rCQkubWF4bGVu CQk9IHNpemVvZiAoaW50KSwKLSsJCS5tb2RlCQk9IDA2NDQsCi0rCQkucHJvY19oYW5kbGVyCT0g JnByb2NfZG9pbnR2ZWNfbWlubWF4LAotKwkJLmV4dHJhMQkJPSAmemVybywKLSsJCS5leHRyYTIJ CT0gJm9uZV9odW5kcmVkLAotKwl9LAotKyNlbmRpZgotICNpZiBkZWZpbmVkKENPTkZJR19TMzkw KSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0gCXsKLSAJCS5wcm9jbmFtZQk9ICJzcGluX3JldHJ5 IiwKLUluZGV4OiBsaW51eC0zLjMtY2sxL2xpYi9LY29uZmlnLmRlYnVnCi09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LS0gbGludXgtMy4zLWNrMS5vcmlnL2xpYi9LY29uZmlnLmRlYnVnCTIwMTItMDMtMjQgMTk6MzA6 MDAuMDEyNDIwMzYyICsxMTAwCi0rKysgbGludXgtMy4zLWNrMS9saWIvS2NvbmZpZy5kZWJ1Zwky MDEyLTAzLTI0IDE5OjMwOjI5LjA0MjkyNTgwOSArMTEwMAotQEAgLTg3NSw3ICs4NzUsNyBAQCBj b25maWcgQk9PVF9QUklOVEtfREVMQVkKICAKLSBjb25maWcgUkNVX1RPUlRVUkVfVEVTVAotIAl0 cmlzdGF0ZSAidG9ydHVyZSB0ZXN0cyBmb3IgUkNVIgotLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5F TAotKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAhU0NIRURfQkZTCi0gCWRlZmF1bHQgbgot IAloZWxwCi0gCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBrZXJuZWwgbW9kdWxlIHRoYXQgcnVu cyB0b3J0dXJlIHRlc3RzCi1JbmRleDogbGludXgtMy4zLWNrMS9pbmNsdWRlL2xpbnV4L2ppZmZp ZXMuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0tIGxpbnV4LTMuMy1jazEub3JpZy9pbmNsdWRlL2xpbnV4L2pp ZmZpZXMuaAkyMDEyLTAzLTI0IDE5OjMwOjAwLjAxMjQyMDM2MiArMTEwMAotKysrIGxpbnV4LTMu My1jazEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgJMjAxMi0wMy0yNCAxOTozMDoyOS4wNDM5MjU4 MjcgKzExMDAKLUBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIGlubGluZSB1NjQgZ2V0X2ppZmZp ZXNfNjQodm9pZCkKLSAgKiBIYXZlIHRoZSAzMiBiaXQgamlmZmllcyB2YWx1ZSB3cmFwIDUgbWlu dXRlcyBhZnRlciBib290Ci0gICogc28gamlmZmllcyB3cmFwIGJ1Z3Mgc2hvdyB1cCBlYXJsaWVy LgotICAqLwotLSNkZWZpbmUgSU5JVElBTF9KSUZGSUVTICgodW5zaWduZWQgbG9uZykodW5zaWdu ZWQgaW50KSAoLTMwMCpIWikpCi0rI2RlZmluZSBJTklUSUFMX0pJRkZJRVMgKCh1bnNpZ25lZCBs b25nKSh1bnNpZ25lZCBpbnQpICgtMTAqSFopKQotIAotIC8qCi0gICogQ2hhbmdlIHRpbWV2YWwg dG8gamlmZmllcywgdHJ5aW5nIHRvIGF2b2lkIHRoZQotSW5kZXg6IGxpbnV4LTMuMy1jazEvZHJp dmVycy9jcHVmcmVxL2NwdWZyZXEuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpbnV4LTMuMy1jazEub3Jp Zy9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCTIwMTItMDMtMjQgMTk6MzA6MDAuMDEyNDIwMzYy ICsxMTAwCi0rKysgbGludXgtMy4zLWNrMS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCTIwMTIt MDMtMjQgMTk6MzA6MjkuMDQzOTI1ODI3ICsxMTAwCi1AQCAtMjgsNiArMjgsNyBAQAotICNpbmNs dWRlIDxsaW51eC9jcHUuaD4KLSAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotICNpbmNs dWRlIDxsaW51eC9tdXRleC5oPgotKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotICNpbmNsdWRl IDxsaW51eC9zeXNjb3JlX29wcy5oPgotIAotICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIu aD4KLUBAIC0xNDQ1LDYgKzE0NDYsMTIgQEAgaW50IF9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHN0 cnVjdCBjcHVmcgotIAkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uKTsKLSAJaWYgKGNwdV9vbmxpbmUo cG9saWN5LT5jcHUpICYmIGNwdWZyZXFfZHJpdmVyLT50YXJnZXQpCi0gCQlyZXR2YWwgPSBjcHVm cmVxX2RyaXZlci0+dGFyZ2V0KHBvbGljeSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uKTsKLSsJaWYg KGxpa2VseShyZXR2YWwgIT0gLUVJTlZBTCkpIHsKLSsJCWlmICh0YXJnZXRfZnJlcSA9PSBwb2xp Y3ktPm1heCkKLSsJCQljcHVfbm9uc2NhbGluZyhwb2xpY3ktPmNwdSk7Ci0rCQllbHNlCi0rCQkJ Y3B1X3NjYWxpbmcocG9saWN5LT5jcHUpOwotKwl9Ci0gCi0gCXJldHVybiByZXR2YWw7Ci0gfQot SW5kZXg6IGxpbnV4LTMuMy1jazEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwot PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0tIGxpbnV4LTMuMy1jazEub3JpZy9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJl cV9vbmRlbWFuZC5jCTIwMTItMDMtMjQgMTk6MzA6MDAuMDEyNDIwMzYyICsxMTAwCi0rKysgbGlu dXgtMy4zLWNrMS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCTIwMTItMDMtMjQg MTk6MzA6MjkuMDQzOTI1ODI3ICsxMTAwCi1AQCAtMjgsOCArMjgsOCBAQAotICAqIEl0IGhlbHBz IHRvIGtlZXAgdmFyaWFibGUgbmFtZXMgc21hbGxlciwgc2ltcGxlcgotICAqLwotIAotLSNkZWZp bmUgREVGX0ZSRVFVRU5DWV9ET1dOX0RJRkZFUkVOVElBTAkJKDEwKQotLSNkZWZpbmUgREVGX0ZS RVFVRU5DWV9VUF9USFJFU0hPTEQJCSg4MCkKLSsjZGVmaW5lIERFRl9GUkVRVUVOQ1lfRE9XTl9E SUZGRVJFTlRJQUwJCSgyNikKLSsjZGVmaW5lIERFRl9GUkVRVUVOQ1lfVVBfVEhSRVNIT0xECQko NjMpCi0gI2RlZmluZSBERUZfU0FNUExJTkdfRE9XTl9GQUNUT1IJCSgxKQotICNkZWZpbmUgTUFY X1NBTVBMSU5HX0RPV05fRkFDVE9SCQkoMTAwMDAwKQotICNkZWZpbmUgTUlDUk9fRlJFUVVFTkNZ X0RPV05fRElGRkVSRU5USUFMCSgzKQotQEAgLTQxNiwxMCArNDE2LDEwIEBAIHN0YXRpYyB2b2lk IGRic19jaGVja19jcHUoc3RydWN0IGNwdV9kYnMKLSAKLSAJLyoKLSAJICogRXZlcnkgc2FtcGxp bmdfcmF0ZSwgd2UgY2hlY2ssIGlmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIGxlc3MKLS0JICogdGhh biAyMCUgKGRlZmF1bHQpLCB0aGVuIHdlIHRyeSB0byBpbmNyZWFzZSBmcmVxdWVuY3kKLSsJICog dGhhbiAzNyUgKGRlZmF1bHQpLCB0aGVuIHdlIHRyeSB0byBpbmNyZWFzZSBmcmVxdWVuY3kKLSAJ ICogRXZlcnkgc2FtcGxpbmdfcmF0ZSwgd2UgbG9vayBmb3IgYSB0aGUgbG93ZXN0Ci0gCSAqIGZy ZXF1ZW5jeSB3aGljaCBjYW4gc3VzdGFpbiB0aGUgbG9hZCB3aGlsZSBrZWVwaW5nIGlkbGUgdGlt ZSBvdmVyCi0tCSAqIDMwJS4gSWYgc3VjaCBhIGZyZXF1ZW5jeSBleGlzdCwgd2UgdHJ5IHRvIGRl Y3JlYXNlIHRvIHRoaXMgZnJlcXVlbmN5LgotKwkgKiA2MyUuIElmIHN1Y2ggYSBmcmVxdWVuY3kg ZXhpc3QsIHdlIHRyeSB0byBkZWNyZWFzZSB0byB0aGlzIGZyZXF1ZW5jeS4KLSAJICoKLSAJICog QW55IGZyZXF1ZW5jeSBpbmNyZWFzZSB0YWtlcyBpdCB0byB0aGUgbWF4aW11bSBmcmVxdWVuY3ku Ci0gCSAqIEZyZXF1ZW5jeSByZWR1Y3Rpb24gaGFwcGVucyBhdCBtaW5pbXVtIHN0ZXBzIG9mCi1J bmRleDogbGludXgtMy4zLWNrMS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUu YwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0tIGxpbnV4LTMuMy1jazEub3JpZy9kcml2ZXJzL2NwdWZyZXEvY3B1 ZnJlcV9jb25zZXJ2YXRpdmUuYwkyMDEyLTAzLTI0IDE5OjMwOjAwLjAxMjQyMDM2MiArMTEwMAot KysrIGxpbnV4LTMuMy1jazEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMJ MjAxMi0wMy0yNCAxOTozMDoyOS4wNDM5MjU4MjcgKzExMDAKLUBAIC0yOSw4ICsyOSw4IEBACi0g ICogSXQgaGVscHMgdG8ga2VlcCB2YXJpYWJsZSBuYW1lcyBzbWFsbGVyLCBzaW1wbGVyCi0gICov Ci0gCi0tI2RlZmluZSBERUZfRlJFUVVFTkNZX1VQX1RIUkVTSE9MRAkJKDgwKQotLSNkZWZpbmUg REVGX0ZSRVFVRU5DWV9ET1dOX1RIUkVTSE9MRAkJKDIwKQotKyNkZWZpbmUgREVGX0ZSRVFVRU5D WV9VUF9USFJFU0hPTEQJCSg2MykKLSsjZGVmaW5lIERFRl9GUkVRVUVOQ1lfRE9XTl9USFJFU0hP TEQJCSgyNikKLSAKLSAvKgotICAqIFRoZSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiB0aGlzIGdvdmVy bm9yIGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdHkgb2YKLUluZGV4OiBsaW51eC0zLjMtY2sxL2Fy Y2gveDg2L0tjb25maWcKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaW51eC0zLjMtY2sxLm9yaWcvYXJjaC94 ODYvS2NvbmZpZwkyMDEyLTAzLTI0IDE5OjMwOjAwLjAxMzQyMDM4MSArMTEwMAotKysrIGxpbnV4 LTMuMy1jazEvYXJjaC94ODYvS2NvbmZpZwkyMDEyLTAzLTI0IDE5OjMwOjI5LjA0NDkyNTg0NSAr MTEwMAotQEAgLTgwNiwxNSArODA2LDcgQEAgY29uZmlnIFNDSEVEX01DCi0gCSAgaW5jcmVhc2Vk IG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KLSAKLSBjb25m aWcgSVJRX1RJTUVfQUNDT1VOVElORwotLQlib29sICJGaW5lIGdyYW51bGFyaXR5IHRhc2sgbGV2 ZWwgSVJRIHRpbWUgYWNjb3VudGluZyIKLS0JZGVmYXVsdCBuCi0tCS0tLWhlbHAtLS0KLS0JICBT ZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGZpbmUgZ3JhbnVsYXJpdHkgdGFzayBpcnEgdGlt ZQotLQkgIGFjY291bnRpbmcuIFRoaXMgaXMgZG9uZSBieSByZWFkaW5nIGEgdGltZXN0YW1wIG9u IGVhY2gKLS0JICB0cmFuc2l0aW9ucyBiZXR3ZWVuIHNvZnRpcnEgYW5kIGhhcmRpcnEgc3RhdGUs IHNvIHRoZXJlIGNhbiBiZSBhCi0tCSAgc21hbGwgcGVyZm9ybWFuY2UgaW1wYWN0LgotLQotLQkg IElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgotKwlkZWZfYm9vbCB5Ci0gCi0gc291cmNlICJrZXJu ZWwvS2NvbmZpZy5wcmVlbXB0IgotIAotSW5kZXg6IGxpbnV4LTMuMy1jazEva2VybmVsL3NjaGVk L2Jmcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAw MDAwMDAwICswMDAwCi0rKysgbGludXgtMy4zLWNrMS9rZXJuZWwvc2NoZWQvYmZzLmMJMjAxMi0w My0yNCAxOTozMDoyOS4wNDc5MjU4OTcgKzExMDAKLUBAIC0wLDAgKzEsNzI1MSBAQAorZGlmZiAt cnVOIGxpbnV4LTMuMy41L2tlcm5lbC9zY2hlZC9yaWZzLmMgbGludXgtMy4zLjUtUklGUy1SQzMt QlJBSU4tRUFUSU5HL2tlcm5lbC9zY2hlZC9yaWZzLmMKKy0tLSBsaW51eC0zLjMuNS9rZXJuZWwv c2NoZWQvcmlmcy5jCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGlu dXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2tlcm5lbC9zY2hlZC9yaWZzLmMJMjAxMi0w NS0yNCAxNDozMToyNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0wLDAgKzEsNjY3NSBAQAogKy8qCi0r ICogIGtlcm5lbC9zY2hlZC9iZnMuYywgd2FzIGtlcm5lbC9zY2hlZC5jCisrICogIGtlcm5lbC9z Y2hlZC9yaWZzLmMKICsgKgogKyAqICBLZXJuZWwgc2NoZWR1bGVyIGFuZCByZWxhdGVkIHN5c2Nh bGxzCiArICoKQEAgLTExMjIsMTUgKzg5OSwxMyBAQAogKyAqICAyMDAzLTA5LTAzCUludGVyYWN0 aXZpdHkgdHVuaW5nIGJ5IENvbiBLb2xpdmFzLgogKyAqICAyMDA0LTA0LTAyCVNjaGVkdWxlciBk b21haW5zIGNvZGUgYnkgTmljayBQaWdnaW4KICsgKiAgMjAwNy0wNC0xNSAgV29yayBiZWd1biBv biByZXBsYWNpbmcgYWxsIGludGVyYWN0aXZpdHkgdHVuaW5nIHdpdGggYQotKyAqICAgICAgICAg ICAgICBmYWlyIHNjaGVkdWxpbmcgZGVzaWduIGJ5IENvbiBLb2xpdmFzLgorKyAqCQkJICBmYWly IHNjaGVkdWxpbmcgZGVzaWduIGJ5IENvbiBLb2xpdmFzLgogKyAqICAyMDA3LTA1LTA1ICBMb2Fk IGJhbGFuY2luZyAoc21wLW5pY2UpIGFuZCBvdGhlciBpbXByb3ZlbWVudHMKLSsgKiAgICAgICAg ICAgICAgYnkgUGV0ZXIgV2lsbGlhbXMKKysgKgkJCSAgYnkgUGV0ZXIgV2lsbGlhbXMKICsgKiAg MjAwNy0wNS0wNiAgSW50ZXJhY3Rpdml0eSBpbXByb3ZlbWVudHMgdG8gQ0ZTIGJ5IE1pa2UgR2Fs YnJhaXRoCiArICogIDIwMDctMDctMDEgIEdyb3VwIHNjaGVkdWxpbmcgZW5oYW5jZW1lbnRzIGJ5 IFNyaXZhdHNhIFZhZGRhZ2lyaQogKyAqICAyMDA3LTExLTI5ICBSVCBiYWxhbmNpbmcgaW1wcm92 ZW1lbnRzIGJ5IFN0ZXZlbiBSb3N0ZWR0LCBHcmVnb3J5IEhhc2tpbnMsCi0rICogICAgICAgICAg ICAgIFRob21hcyBHbGVpeG5lciwgTWlrZSBLcmF2ZXR6Ci0rICogIG5vdwkJQnJhaW5mdWNrIGRl YWRsaW5lIHNjaGVkdWxpbmcgcG9saWN5IGJ5IENvbiBLb2xpdmFzIGRlbGV0ZXMKLSsgKiAgICAg ICAgICAgICAgYSB3aG9sZSBsb3Qgb2YgdGhvc2UgcHJldmlvdXMgdGhpbmdzLgorKyAqCQkJICBU aG9tYXMgR2xlaXhuZXIsIE1pa2UgS3JhdmV0egogKyAqLwogKwogKyNpbmNsdWRlIDxsaW51eC9t bS5oPgpAQCAtMTE3Nyw5ICs5NTIsNiBAQAogKyNpbmNsdWRlIDxhc20vdGxiLmg+CiArI2luY2x1 ZGUgPGFzbS91bmlzdGQuaD4KICsjaW5jbHVkZSA8YXNtL211dGV4Lmg+Ci0rI2lmZGVmIENPTkZJ R19QQVJBVklSVAotKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSsjZW5kaWYKICsKICsjaW5j bHVkZSAiY3B1cHJpLmgiCiArI2luY2x1ZGUgIi4uL3dvcmtxdWV1ZV9zY2hlZC5oIgpAQCAtMTE5 NSwxMiArOTY3LDcgQEAKICsJCQkJCShwb2xpY3kpID09IFNDSEVEX1JSKQogKyNkZWZpbmUgaGFz X3J0X3BvbGljeShwKQl1bmxpa2VseShpc19ydF9wb2xpY3koKHApLT5wb2xpY3kpKQogKyNkZWZp bmUgaWRsZXByaW9fdGFzayhwKQl1bmxpa2VseSgocCktPnBvbGljeSA9PSBTQ0hFRF9JRExFUFJJ TykKLSsjZGVmaW5lIGlzb190YXNrKHApCQl1bmxpa2VseSgocCktPnBvbGljeSA9PSBTQ0hFRF9J U08pCi0rI2RlZmluZSBpc29fcXVldWUocnEpCQl1bmxpa2VseSgocnEpLT5ycV9wb2xpY3kgPT0g U0NIRURfSVNPKQotKyNkZWZpbmUgcnFfcnVubmluZ19pc28ocnEpCSgocnEpLT5ycV9wcmlvID09 IElTT19QUklPKQogKwotKyNkZWZpbmUgSVNPX1BFUklPRAkJKCg1ICogSFogKiBncnEubm9jKSAr IDEpCi0rCiArLyoKICsgKiBDb252ZXJ0IHVzZXItbmljZSB2YWx1ZXMgWyAtMjAgLi4uIDAgLi4u IDE5IF0KICsgKiB0byBzdGF0aWMgcHJpb3JpdHkgWyBNQVhfUlRfUFJJTy4uTUFYX1BSSU8tMSBd LApAQCAtMTIzOCw3ICsxMDA1LDcgQEAKICsKICt2b2lkIHByaW50X3NjaGVkdWxlcl92ZXJzaW9u KHZvaWQpCiArewotKwlwcmludGsoS0VSTl9JTkZPICJCRlMgQ1BVIHNjaGVkdWxlciB2MC40MjAg YnkgQ29uIEtvbGl2YXMuXG4iKTsKKysJcHJpbnRrKEtFUk5fSU5GTyAiUm90YXJ5IEludGVyYWN0 aXZpdHkgRmF2b3IgU2NoZWR1bGVyIC0gUklGUyBCeSBRUTozNzY2NjkxLlxuIik7CiArfQogKwog Ky8qCkBAIC0xMjQ5LDI0ICsxMDE2LDE3IEBACiAraW50IHJyX2ludGVydmFsIF9fcmVhZF9tb3N0 bHkgPSA2OwogKwogKy8qCi0rICogc2NoZWRfaXNvX2NwdSAtIHN5c2N0bCB3aGljaCBkZXRlcm1p bmVzIHRoZSBjcHUgcGVyY2VudGFnZSBTQ0hFRF9JU08gdGFza3MKLSsgKiBhcmUgYWxsb3dlZCB0 byBydW4gZml2ZSBzZWNvbmRzIGFzIHJlYWwgdGltZSB0YXNrcy4gVGhpcyBpcyB0aGUgdG90YWwg b3ZlcgotKyAqIGFsbCBvbmxpbmUgY3B1cy4KKysgKiDlhbzlrrnnlKjorr7nva7jgIIKICsgKi8K LStpbnQgc2NoZWRfaXNvX2NwdSBfX3JlYWRfbW9zdGx5ID0gNzA7CisraW50IHNjaGVkX2lzb19j cHUgX19yZWFkX21vc3RseSA9IDA7CiArCiArLyoKLSsgKiBUaGUgcmVsYXRpdmUgbGVuZ3RoIG9m IGRlYWRsaW5lIGZvciBlYWNoIHByaW9yaXR5KG5pY2UpIGxldmVsLgorKyAqIHRpbWVfc2xpY2Ug Zm9yIGVhY2ggcHJvY2VzcwogKyAqLwotK3N0YXRpYyBpbnQgcHJpb19yYXRpb3NbUFJJT19SQU5H RV0gX19yZWFkX21vc3RseTsKKysjZGVmaW5lIHRpbWVzbGljZSgpIE1TX1RPX1VTKHJyX2ludGVy dmFsKQogKwotKy8qCi0rICogVGhlIHF1b3RhIGhhbmRlZCBvdXQgdG8gdGFza3Mgb2YgYWxsIHBy aW9yaXR5IGxldmVscyB3aGVuIHJlZmlsbGluZyB0aGVpcgotKyAqIHRpbWVfc2xpY2UuCi0rICov Ci0rc3RhdGljIGlubGluZSBpbnQgdGltZXNsaWNlKHZvaWQpCi0rewotKwlyZXR1cm4gTVNfVE9f VVMocnJfaW50ZXJ2YWwpOworKyNkZWZpbmUgZ2V0X3RpbWVfc2xpY2UocCkgeyBcCisrCXAtPnRp bWVfc2xpY2UgPSB0aW1lc2xpY2UoKTsJXAogK30KICsKICsvKgpAQCAtMTI4NywxMiArMTA0Nyw2 IEBACiArCWJvb2wgaWRsZV9jcHVzOwogKyNlbmRpZgogKwlpbnQgbm9jOyAvKiBudW1fb25saW5l X2NwdXMgc3RvcmVkIGFuZCB1cGRhdGVkIHdoZW4gaXQgY2hhbmdlcyAqLwotKwl1NjQgbmlmZmll czsgLyogTmFub3NlY29uZCBqaWZmaWVzICovCi0rCXVuc2lnbmVkIGxvbmcgbGFzdF9qaWZmeTsg LyogTGFzdCBqaWZmeSB3ZSB1cGRhdGVkIG5pZmZpZXMgKi8KLSsKLSsJcmF3X3NwaW5sb2NrX3Qg aXNvX2xvY2s7Ci0rCWludCBpc29fdGlja3M7Ci0rCWJvb2wgaXNvX3JlZnJhY3Rvcnk7CiArfTsK ICsKICsjaWZkZWYgQ09ORklHX1NNUApAQCAtMTMzNiwyMCArMTA5MCwxMCBAQAogKyAqIFRoaXMg ZGF0YSBzaG91bGQgb25seSBiZSBtb2RpZmllZCBieSB0aGUgbG9jYWwgY3B1LgogKyAqLwogK3N0 cnVjdCBycSB7Ci0rI2lmZGVmIENPTkZJR19TTVAKLSsjaWZkZWYgQ09ORklHX05PX0haCi0rCXU2 NCBub2h6X3N0YW1wOwotKwl1bnNpZ25lZCBjaGFyIGluX25vaHpfcmVjZW50bHk7Ci0rI2VuZGlm Ci0rI2VuZGlmCi0rCiArCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgKmlkbGUsICpzdG9wOwog KwlzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tOwogKwotKwkvKiBTdG9yZWQgZGF0YSBhYm91dCBy cS0+Y3VyciB0byB3b3JrIG91dHNpZGUgZ3JxIGxvY2sgKi8KLSsJdTY0IHJxX2RlYWRsaW5lOwog Kwl1bnNpZ25lZCBpbnQgcnFfcG9saWN5OwotKwlpbnQgcnFfdGltZV9zbGljZTsKICsJdTY0IHJx X2xhc3RfcmFuOwogKwlpbnQgcnFfcHJpbzsKICsJYm9vbCBycV9ydW5uaW5nOyAvKiBUaGVyZSBp cyBhIHRhc2sgcnVubmluZyAqLwpAQCAtMTM4MCw0MSArMTEyNCwxMyBAQAogKwkvKiBTZWUgaWYg YWxsIGNhY2hlIHNpYmxpbmdzIGFyZSBpZGxlICovCiArCWNwdW1hc2tfdCBjYWNoZV9zaWJsaW5n czsKICsjZW5kaWYKLSsJdTY0IGxhc3RfbmlmZnk7IC8qIExhc3QgdGltZSB0aGlzIFJRIHVwZGF0 ZWQgZ3JxLm5pZmZpZXMgKi8KICsjZW5kaWYKICsjaWZkZWYgQ09ORklHX0lSUV9USU1FX0FDQ09V TlRJTkcKICsJdTY0IHByZXZfaXJxX3RpbWU7CiArI2VuZGlmCi0rI2lmZGVmIENPTkZJR19QQVJB VklSVAotKwl1NjQgcHJldl9zdGVhbF90aW1lOwotKyNlbmRpZgotKyNpZmRlZiBDT05GSUdfUEFS QVZJUlRfVElNRV9BQ0NPVU5USU5HCi0rCXU2NCBwcmV2X3N0ZWFsX3RpbWVfcnE7Ci0rI2VuZGlm CiArCi0rCXU2NCBjbG9jaywgb2xkX2Nsb2NrLCBsYXN0X3RpY2s7CisrCXU2NCBjbG9jazsKICsJ dTY0IGNsb2NrX3Rhc2s7Ci0rCWJvb2wgZGl0aGVyOwotKwotKyNpZmRlZiBDT05GSUdfU0NIRURT VEFUUwotKwotKwkvKiBsYXRlbmN5IHN0YXRzICovCi0rCXN0cnVjdCBzY2hlZF9pbmZvIHJxX3Nj aGVkX2luZm87Ci0rCXVuc2lnbmVkIGxvbmcgbG9uZyBycV9jcHVfdGltZTsKLSsJLyogY291bGQg YWJvdmUgYmUgcnEtPmNmc19ycS5leGVjX2Nsb2NrICsgcnEtPnJ0X3JxLnJ0X3J1bnRpbWUgPyAq LwotKwotKwkvKiBzeXNfc2NoZWRfeWllbGQoKSBzdGF0cyAqLwotKwl1bnNpZ25lZCBpbnQgeWxk X2NvdW50OwotKwotKwkvKiBzY2hlZHVsZSgpIHN0YXRzICovCi0rCXVuc2lnbmVkIGludCBzY2hl ZF9zd2l0Y2g7Ci0rCXVuc2lnbmVkIGludCBzY2hlZF9jb3VudDsKLSsJdW5zaWduZWQgaW50IHNj aGVkX2dvaWRsZTsKLSsKLSsJLyogdHJ5X3RvX3dha2VfdXAoKSBzdGF0cyAqLwotKwl1bnNpZ25l ZCBpbnQgdHR3dV9jb3VudDsKLSsJdW5zaWduZWQgaW50IHR0d3VfbG9jYWw7Ci0rI2VuZGlmCiAr fTsKICsKICtERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcnEsIHJ1bnF1ZXVl cyk7CkBAIC0xNDM1LDEzICsxMTUxLDEzIEBACiArCiAraW50IF9fd2VhayBhcmNoX3NkX3NpYmxp bmdfYXN5bV9wYWNraW5nKHZvaWQpCiArewotKyAgICAgICByZXR1cm4gMCpTRF9BU1lNX1BBQ0tJ Tkc7CisrCSAgIHJldHVybiAwKlNEX0FTWU1fUEFDS0lORzsKICt9CiArI2VuZGlmCiArCiArI2Rl ZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfc2NoZWRfZG9tYWluKHApIFwKICsJcmN1X2RlcmVm ZXJlbmNlX2NoZWNrKChwKSwgXAotKwkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmc2NoZWRfZG9t YWluc19tdXRleCkpCisrCQkJCSAgbG9ja2RlcF9pc19oZWxkKCZzY2hlZF9kb21haW5zX211dGV4 KSkKICsKICsvKgogKyAqIFRoZSBkb21haW4gdHJlZSAocnEtPnNkKSBpcyBwcm90ZWN0ZWQgYnkg UkNVJ3MgcXVpZXNjZW50IHN0YXRlIHRyYW5zaXRpb24uCkBAIC0xNDg2LDI5ICsxMjAyLDYgQEAK ICsJcmV0dXJuIHJxLT5jcHU7CiArfQogKwotKy8qCi0rICogTmlmZmllcyBhcmUgYSBnbG9iYWxs eSBpbmNyZWFzaW5nIG5hbm9zZWNvbmQgY291bnRlci4gV2hlbmV2ZXIgYSBydW5xdWV1ZQotKyAq IGNsb2NrIGlzIHVwZGF0ZWQgd2l0aCB0aGUgZ3JxLmxvY2sgaGVsZCwgaXQgaXMgYW4gb3Bwb3J0 dW5pdHkgdG8gdXBkYXRlIHRoZQotKyAqIG5pZmZpZXMgdmFsdWUuIEFueSBDUFUgY2FuIHVwZGF0 ZSBpdCBieSBhZGRpbmcgaG93IG11Y2ggaXRzIGNsb2NrIGhhcwotKyAqIGluY3JlYXNlZCBzaW5j ZSBpdCBsYXN0IHVwZGF0ZWQgbmlmZmllcywgbWludXMgYW55IGFkZGVkIG5pZmZpZXMgYnkgb3Ro ZXIKLSsgKiBDUFVzLgotKyAqLwotK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY2xvY2tzKHN0 cnVjdCBycSAqcnEpCi0rewotKwlzNjQgbmRpZmY7Ci0rCWxvbmcgamRpZmY7Ci0rCi0rCXVwZGF0 ZV9ycV9jbG9jayhycSk7Ci0rCW5kaWZmID0gcnEtPmNsb2NrIC0gcnEtPm9sZF9jbG9jazsKLSsJ Lyogb2xkX2Nsb2NrIGlzIG9ubHkgdXBkYXRlZCB3aGVuIHdlIGFyZSB1cGRhdGluZyBuaWZmaWVz ICovCi0rCXJxLT5vbGRfY2xvY2sgPSBycS0+Y2xvY2s7Ci0rCW5kaWZmIC09IGdycS5uaWZmaWVz IC0gcnEtPmxhc3RfbmlmZnk7Ci0rCWpkaWZmID0gamlmZmllcyAtIGdycS5sYXN0X2ppZmZ5Owot KwluaWZmeV9kaWZmKCZuZGlmZiwgamRpZmYpOwotKwlncnEubGFzdF9qaWZmeSArPSBqZGlmZjsK LSsJZ3JxLm5pZmZpZXMgKz0gbmRpZmY7Ci0rCXJxLT5sYXN0X25pZmZ5ID0gZ3JxLm5pZmZpZXM7 Ci0rfQogKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KICtzdGF0aWMgc3RydWN0IHJxICp1cHJxOwog KyNkZWZpbmUgY3B1X3JxKGNwdSkJKHVwcnEpCkBAIC0xNTIwLDE5ICsxMjEzLDYgQEAKICsJcmV0 dXJuIDA7CiArfQogKwotK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY2xvY2tzKHN0cnVjdCBy cSAqcnEpCi0rewotKwlzNjQgbmRpZmY7Ci0rCWxvbmcgamRpZmY7Ci0rCi0rCXVwZGF0ZV9ycV9j bG9jayhycSk7Ci0rCW5kaWZmID0gcnEtPmNsb2NrIC0gcnEtPm9sZF9jbG9jazsKLSsJcnEtPm9s ZF9jbG9jayA9IHJxLT5jbG9jazsKLSsJamRpZmYgPSBqaWZmaWVzIC0gZ3JxLmxhc3RfamlmZnk7 Ci0rCW5pZmZ5X2RpZmYoJm5kaWZmLCBqZGlmZik7Ci0rCWdycS5sYXN0X2ppZmZ5ICs9IGpkaWZm OwotKwlncnEubmlmZmllcyArPSBuZGlmZjsKLSt9CiArI2VuZGlmCiArI2RlZmluZSByYXdfcnEo KQkoJl9fcmF3X2dldF9jcHVfdmFyKHJ1bnF1ZXVlcykpCiArCkBAIC0xNTQ4LDcgKzEyMjgsNyBA QAogKy8qCiArICogQWxsIGNvbW1vbiBsb2NraW5nIGZ1bmN0aW9ucyBwZXJmb3JtZWQgb24gZ3Jx LmxvY2suIHJxLT5jbG9jayBpcyBsb2NhbCB0bwogKyAqIHRoZSBDUFUgYWNjZXNzaW5nIGl0IHNv IGl0IGNhbiBiZSBtb2RpZmllZCBqdXN0IHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAotKyAqIHdo ZW4gd2UncmUgbm90IHVwZGF0aW5nIG5pZmZpZXMuCisrICogd2hlbiB3ZSdyZSBub3QgdXBkYXRp bmcgdGhlIHRpbWUuCiArICogTG9va2luZyB1cCB0YXNrX3JxIG11c3QgYmUgZG9uZSB1bmRlciBn cnEubG9jayB0byBiZSBzYWZlLgogKyAqLwogK3N0YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190 YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSk7CkBAIC0xNTg4LDcgKzEyNjgsNiBAQAogKwlf X2FjcXVpcmVzKGdycS5sb2NrKQogK3sKICsJZ3JxX2xvY2soKTsKLSsJdXBkYXRlX2Nsb2Nrcyhy cSk7CiArfQogKwogK3N0YXRpYyBpbmxpbmUgdm9pZCBncnFfdW5sb2NrX2lycSh2b2lkKQpAQCAt MTYyMiw3ICsxMzAxLDYgQEAKICsJX19hY3F1aXJlcyhncnEubG9jaykKICt7CiArCXN0cnVjdCBy cSAqcnEgPSB0YXNrX2dycV9sb2NrKHAsIGZsYWdzKTsKLSsJdXBkYXRlX2Nsb2NrcyhycSk7CiAr CXJldHVybiBycTsKICt9CiArCkBAIC0xNjMzLDEzICsxMzExLDYgQEAKICsJcmV0dXJuIHRhc2tf cnEocCk7CiArfQogKwotK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lX3Rhc2tfZ3JxX2xvY2tfaXJx KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLSsJX19hY3F1aXJlcyhncnEubG9jaykKLSt7Ci0rCXN0 cnVjdCBycSAqcnEgPSB0YXNrX2dycV9sb2NrX2lycShwKTsKLSsJdXBkYXRlX2Nsb2NrcyhycSk7 Ci0rfQotKwogK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2dycV91bmxvY2tfaXJxKHZvaWQpCiAr CV9fcmVsZWFzZXMoZ3JxLmxvY2spCiArewpAQCAtMTc1MywxNiArMTQyNCw2IEBACiArfQogKyNl bmRpZiAvKiBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVyAqLwogKwotK3N0YXRpYyBpbmxpbmUg Ym9vbCBkZWFkbGluZV9iZWZvcmUodTY0IGRlYWRsaW5lLCB1NjQgdGltZSkKLSt7Ci0rCXJldHVy biAoZGVhZGxpbmUgPCB0aW1lKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBib29sIGRlYWRsaW5l X2FmdGVyKHU2NCBkZWFkbGluZSwgdTY0IHRpbWUpCi0rewotKwlyZXR1cm4gKGRlYWRsaW5lID4g dGltZSk7Ci0rfQotKwogKy8qCiArICogQSB0YXNrIHRoYXQgaXMgcXVldWVkIGJ1dCBub3QgcnVu bmluZyB3aWxsIGJlIG9uIHRoZSBncnEgcnVuIGxpc3QuCiArICogQSB0YXNrIHRoYXQgaXMgbm90 IHJ1bm5pbmcgb3IgcXVldWVkIHdpbGwgbm90IGJlIG9uIHRoZSBncnEgcnVuIGxpc3QuCkBAIC0x Nzg1LDQwICsxNDQ2LDEyIEBACiArfQogKwogKy8qCi0rICogVG8gZGV0ZXJtaW5lIGlmIGl0J3Mg c2FmZSBmb3IgYSB0YXNrIG9mIFNDSEVEX0lETEVQUklPIHRvIGFjdHVhbGx5IHJ1biBhcwotKyAq IGFuIGlkbGUgdGFzaywgd2UgZW5zdXJlIG5vbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z IGFyZSBtZXQuCi0rICovCi0rc3RhdGljIGJvb2wgaWRsZXByaW9fc3VpdGFibGUoc3RydWN0IHRh c2tfc3RydWN0ICpwKQotK3sKLSsJcmV0dXJuICghZnJlZXppbmcocCkgJiYgIXNpZ25hbF9wZW5k aW5nKHApICYmCi0rCQkhKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkgJiYgIShwLT5mbGFn cyAmIChQRl9FWElUSU5HKSkpOwotK30KLSsKLSsvKgotKyAqIFRvIGRldGVybWluZSBpZiBhIHRh c2sgb2YgU0NIRURfSVNPIGNhbiBydW4gaW4gcHNldWRvLXJlYWx0aW1lLCB3ZSBjaGVjawotKyAq IHRoYXQgdGhlIGlzb19yZWZyYWN0b3J5IGZsYWcgaXMgbm90IHNldC4KLSsgKi8KLStzdGF0aWMg Ym9vbCBpc29wcmlvX3N1aXRhYmxlKHZvaWQpCi0rewotKwlyZXR1cm4gIWdycS5pc29fcmVmcmFj dG9yeTsKLSt9Ci0rCi0rLyoKICsgKiBBZGRpbmcgdG8gdGhlIGdsb2JhbCBydW5xdWV1ZS4gRW50 ZXIgd2l0aCBncnEgbG9ja2VkLgogKyAqLwogK3N0YXRpYyB2b2lkIGVucXVldWVfdGFzayhzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnApCiArewotKwlpZiAoIXJ0X3Rhc2socCkpIHsKLSsJCS8qIENoZWNr IGl0IGhhc24ndCBnb3R0ZW4gcnQgZnJvbSBQSSAqLwotKwkJaWYgKChpZGxlcHJpb190YXNrKHAp ICYmIGlkbGVwcmlvX3N1aXRhYmxlKHApKSB8fAotKwkJICAgKGlzb190YXNrKHApICYmIGlzb3By aW9fc3VpdGFibGUoKSkpCi0rCQkJcC0+cHJpbyA9IHAtPm5vcm1hbF9wcmlvOwotKwkJZWxzZQot KwkJCXAtPnByaW8gPSBOT1JNQUxfUFJJTzsKLSsJfQogKwlfX3NldF9iaXQocC0+cHJpbywgZ3Jx LnByaW9fYml0bWFwKTsKICsJbGlzdF9hZGRfdGFpbCgmcC0+cnVuX2xpc3QsIGdycS5xdWV1ZSAr IHAtPnByaW8pOwotKwlzY2hlZF9pbmZvX3F1ZXVlZChwKTsKICt9CiArCiArLyogT25seSBpZGxl IHRhc2sgZG9lcyB0aGlzIGFzIGEgcmVhbCB0aW1lIHRhc2sqLwpAQCAtMTgyNiwzMyArMTQ1OSwx MiBAQAogK3sKICsJX19zZXRfYml0KHAtPnByaW8sIGdycS5wcmlvX2JpdG1hcCk7CiArCWxpc3Rf YWRkKCZwLT5ydW5fbGlzdCwgZ3JxLnF1ZXVlICsgcC0+cHJpbyk7Ci0rCXNjaGVkX2luZm9fcXVl dWVkKHApOwogK30KICsKICtzdGF0aWMgaW5saW5lIHZvaWQgcmVxdWV1ZV90YXNrKHN0cnVjdCB0 YXNrX3N0cnVjdCAqcCkKICt7Ci0rCXNjaGVkX2luZm9fcXVldWVkKHApOwogK30KICsKLSsvKgot KyAqIFJldHVybnMgdGhlIHJlbGF0aXZlIGxlbmd0aCBvZiBkZWFkbGluZSBhbGwgY29tcGFyZWQg dG8gdGhlIHNob3J0ZXN0Ci0rICogZGVhZGxpbmUgd2hpY2ggaXMgdGhhdCBvZiBuaWNlIC0yMC4K LSsgKi8KLStzdGF0aWMgaW5saW5lIGludCB0YXNrX3ByaW9fcmF0aW8oc3RydWN0IHRhc2tfc3Ry dWN0ICpwKQotK3sKLSsJcmV0dXJuIHByaW9fcmF0aW9zW1RBU0tfVVNFUl9QUklPKHApXTsKLSt9 Ci0rCi0rLyoKLSsgKiB0YXNrX3RpbWVzbGljZSAtIGFsbCB0YXNrcyBvZiBhbGwgcHJpb3JpdGll cyBnZXQgdGhlIGV4YWN0IHNhbWUgdGltZXNsaWNlCi0rICogbGVuZ3RoLiBDUFUgZGlzdHJpYnV0 aW9uIGlzIGhhbmRsZWQgYnkgZ2l2aW5nIGRpZmZlcmVudCBkZWFkbGluZXMgdG8KLSsgKiB0YXNr cyBvZiBkaWZmZXJlbnQgcHJpb3JpdGllcy4gVXNlIDEyOCBhcyB0aGUgYmFzZSB2YWx1ZSBmb3Ig ZmFzdCBzaGlmdHMuCi0rICovCi0rc3RhdGljIGlubGluZSBpbnQgdGFza190aW1lc2xpY2Uoc3Ry dWN0IHRhc2tfc3RydWN0ICpwKQotK3sKLSsJcmV0dXJuIChycl9pbnRlcnZhbCAqIHRhc2tfcHJp b19yYXRpbyhwKSAvIDEyOCk7Ci0rfQotKwogKyNpZmRlZiBDT05GSUdfU01QCiArLyoKICsgKiBx bnIgaXMgdGhlICJxdWV1ZWQgYnV0IG5vdCBydW5uaW5nIiBjb3VudCB3aGljaCBpcyB0aGUgdG90 YWwgbnVtYmVyIG9mCkBAIC0yMDMzLDcgKzE2NDUsNyBAQAogKwogK3N0YXRpYyBpbmxpbmUgYm9v bCBzdWl0YWJsZV9pZGxlX2NwdXMoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogK3sKLSsJcmV0dXJu IHVwcnEtPmN1cnIgPT0gdXBycS0+aWRsZTsKKysJcmV0dXJuIGN1cnJlbnQgPT0gdXBycS0+aWRs ZTsKICt9CiArCiArc3RhdGljIGlubGluZSB2b2lkIHJlc2NoZWRfc3VpdGFibGVfaWRsZShzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnApCkBAIC0yMDc1LDQzICsxNjg3LDExIEBACiArCWluY19xbnIoKTsK ICt9CiArCi0rc3RhdGljIGlubGluZSBpbnQgbm9ybWFsX3ByaW8oc3RydWN0IHRhc2tfc3RydWN0 ICpwKQotK3sKLSsJaWYgKGhhc19ydF9wb2xpY3kocCkpCi0rCQlyZXR1cm4gTUFYX1JUX1BSSU8g LSAxIC0gcC0+cnRfcHJpb3JpdHk7Ci0rCWlmIChpZGxlcHJpb190YXNrKHApKQotKwkJcmV0dXJu IElETEVfUFJJTzsKLSsJaWYgKGlzb190YXNrKHApKQotKwkJcmV0dXJuIElTT19QUklPOwotKwly ZXR1cm4gTk9STUFMX1BSSU87Ci0rfQotKwogKy8qCi0rICogQ2FsY3VsYXRlIHRoZSBjdXJyZW50 IHByaW9yaXR5LCBpLmUuIHRoZSBwcmlvcml0eQotKyAqIHRha2VuIGludG8gYWNjb3VudCBieSB0 aGUgc2NoZWR1bGVyLiBUaGlzIHZhbHVlIG1pZ2h0Ci0rICogYmUgYm9vc3RlZCBieSBSVCB0YXNr cyBhcyBpdCB3aWxsIGJlIFJUIGlmIHRoZSB0YXNrIGdvdAotKyAqIFJULWJvb3N0ZWQuIElmIG5v dCB0aGVuIGl0IHJldHVybnMgcC0+bm9ybWFsX3ByaW8uCi0rICovCi0rc3RhdGljIGludCBlZmZl Y3RpdmVfcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi0rewotKwlwLT5ub3JtYWxfcHJpbyA9 IG5vcm1hbF9wcmlvKHApOwotKwkvKgotKwkgKiBJZiB3ZSBhcmUgUlQgdGFza3Mgb3Igd2Ugd2Vy ZSBib29zdGVkIHRvIFJUIHByaW9yaXR5LAotKwkgKiBrZWVwIHRoZSBwcmlvcml0eSB1bmNoYW5n ZWQuIE90aGVyd2lzZSwgdXBkYXRlIHByaW9yaXR5Ci0rCSAqIHRvIHRoZSBub3JtYWwgcHJpb3Jp dHk6Ci0rCSAqLwotKwlpZiAoIXJ0X3ByaW8ocC0+cHJpbykpCi0rCQlyZXR1cm4gcC0+bm9ybWFs X3ByaW87Ci0rCXJldHVybiBwLT5wcmlvOwotK30KLSsKLSsvKgogKyAqIGFjdGl2YXRlX3Rhc2sg LSBtb3ZlIGEgdGFzayB0byB0aGUgcnVucXVldWUuIEVudGVyIHdpdGggZ3JxIGxvY2tlZC4KICsg Ki8KICtzdGF0aWMgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3Ry dWN0IHJxICpycSkKICt7Ci0rCXVwZGF0ZV9jbG9ja3MocnEpOwotKwogKwkvKgogKwkgKiBTbGVl cCB0aW1lIGlzIGluIHVuaXRzIG9mIG5hbm9zZWNzLCBzbyBzaGlmdCBieSAyMCB0byBnZXQgYQog KwkgKiBtaWxsaXNlY29uZHMtcmFuZ2UgZXN0aW1hdGlvbiBvZiB0aGUgYW1vdW50IG9mIHRpbWUg dGhhdCB0aGUgdGFzawpAQCAtMjEyMCwxMCArMTcwMCw5IEBACiArCWlmICh1bmxpa2VseShwcm9m X29uID09IFNMRUVQX1BST0ZJTElORykpIHsKICsJCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1VOSU5U RVJSVVBUSUJMRSkKICsJCQlwcm9maWxlX2hpdHMoU0xFRVBfUFJPRklMSU5HLCAodm9pZCAqKWdl dF93Y2hhbihwKSwKLSsJCQkJICAgICAocnEtPmNsb2NrIC0gcC0+bGFzdF9yYW4pID4+IDIwKTsK KysJCQkJCSAocnEtPmNsb2NrIC0gcC0+bGFzdF9yYW4pID4+IDIwKTsKICsJfQogKwotKwlwLT5w cmlvID0gZWZmZWN0aXZlX3ByaW8ocCk7CiArCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQo cCkpCiArCQlncnEubnJfdW5pbnRlcnJ1cHRpYmxlLS07CiArCWVucXVldWVfdGFzayhwKTsKQEAg LTIyNDQsMzMgKzE4MjMsOCBAQAogK30KICsjZW5kaWYKICsKLSsvKgotKyAqIE1vdmUgYSB0YXNr IG9mZiB0aGUgZ2xvYmFsIHF1ZXVlIGFuZCB0YWtlIGl0IHRvIGEgY3B1IGZvciBpdCB3aWxsCi0r ICogYmVjb21lIHRoZSBydW5uaW5nIHRhc2suCi0rICovCi0rc3RhdGljIGlubGluZSB2b2lkIHRh a2VfdGFzayhpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi0rewotKwlzZXRfdGFza19j cHUocCwgY3B1KTsKLSsJZGVxdWV1ZV90YXNrKHApOwotKwljbGVhcl9zdGlja3kocCk7Ci0rCWRl Y19xbnIoKTsKLSt9CiArCiArLyoKLSsgKiBSZXR1cm5zIGEgZGVzY2hlZHVsaW5nIHRhc2sgdG8g dGhlIGdycSBydW5xdWV1ZSB1bmxlc3MgaXQgaXMgYmVpbmcKLSsgKiBkZWFjdGl2YXRlZC4KLSsg Ki8KLStzdGF0aWMgaW5saW5lIHZvaWQgcmV0dXJuX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpw LCBib29sIGRlYWN0aXZhdGUpCi0rewotKwlpZiAoZGVhY3RpdmF0ZSkKLSsJCWRlYWN0aXZhdGVf dGFzayhwKTsKLSsJZWxzZSB7Ci0rCQlpbmNfcW5yKCk7Ci0rCQllbnF1ZXVlX3Rhc2socCk7Ci0r CX0KLSt9Ci0rCi0rLyoKICsgKiByZXNjaGVkX3Rhc2sgLSBtYXJrIGEgdGFzayAndG8gYmUgcmVz Y2hlZHVsZWQgbm93Jy4KICsgKgogKyAqIE9uIFVQIHRoaXMgbWVhbnMgdGhlIHNldHRpbmcgb2Yg dGhlIG5lZWRfcmVzY2hlZCBmbGFnLCBvbiBTTVAgaXQKQEAgLTI0NzEsMjUgKzIwMjUsMzIgQEAK ICsjZGVmaW5lIHJxX2lkbGUocnEpCSgocnEpLT5ycV9wcmlvID09IFBSSU9fTElNSVQpCiArCiAr LyoKLSsgKiBSVCB0YXNrcyBwcmVlbXB0IHB1cmVseSBvbiBwcmlvcml0eS4gU0NIRURfTk9STUFM IHRhc2tzIHByZWVtcHQgb24gdGhlCi0rICogYmFzaXMgb2YgZWFybGllciBkZWFkbGluZXMuIFND SEVEX0lETEVQUklPIGRvbid0IHByZWVtcHQgYW55dGhpbmcgZWxzZSBvcgorKyAqIFJUIHRhc2tz IGFuZCBOT1JNQUwgdGFza3MgcHJlZW1wdCBwdXJlbHkgb24gcHJpb3JpdHkuCisrICogU0NIRURf SURMRVBSSU8gZG9uJ3QgcHJlZW1wdCBhbnl0aGluZyBlbHNlIG9yCiArICogYmV0d2VlbiB0aGVt c2VsdmVzLCB0aGV5IGNvb3BlcmF0aXZlbHkgbXVsdGl0YXNrLiBBbiBpZGxlIHJxIHNjb3JlcyBh cwogKyAqIHByaW8gUFJJT19MSU1JVCBzbyBpdCBpcyBhbHdheXMgcHJlZW1wdGVkLgogKyAqLwog K3N0YXRpYyBpbmxpbmUgYm9vbAotK2Nhbl9wcmVlbXB0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwg aW50IHByaW8sIHU2NCBkZWFkbGluZSkKKytjYW5fcHJlZW1wdChzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnAsIGludCBwcmlvKQogK3sKICsJLyogQmV0dGVyIHN0YXRpYyBwcmlvcml0eSBSVCB0YXNrIG9y IGJldHRlciBwb2xpY3kgcHJlZW1wdGlvbiAqLwotKwlpZiAocC0+cHJpbyA8IHByaW8pCisrCWlm IChwLT5wcmlvIDw9IHByaW8pCiArCQlyZXR1cm4gdHJ1ZTsKICsJaWYgKHAtPnByaW8gPiBwcmlv KQogKwkJcmV0dXJuIGZhbHNlOwotKwkvKiBTQ0hFRF9OT1JNQUwsIEJBVENIIGFuZCBJU08gd2ls bCBwcmVlbXB0IGJhc2VkIG9uIGRlYWRsaW5lICovCi0rCWlmICghZGVhZGxpbmVfYmVmb3JlKHAt PmRlYWRsaW5lLCBkZWFkbGluZSkpCi0rCQlyZXR1cm4gZmFsc2U7CiArCXJldHVybiB0cnVlOwog K30KICsKKytzdGF0aWMgaW5saW5lIHZvaWQgcmVxdWV1ZV90YXNrX2hlYWQoc3RydWN0IHRhc2tf c3RydWN0ICpwKQorK3sKKysJaWYodGFza19xdWV1ZWQocCkpIHsKKysJCWRlcXVldWVfdGFzayhw KTsKKysJCWVucXVldWVfdGFza19oZWFkKHApOworKwl9ZWxzZSB7CisrCQllbnF1ZXVlX3Rhc2tf aGVhZChwKTsKKysJfQorK30KKysKICsjaWZkZWYgQ09ORklHX1NNUAogKyNpZmRlZiBDT05GSUdf SE9UUExVR19DUFUKICsvKgpAQCAtMjUyNiw4ICsyMDg3LDcgQEAKICtzdGF0aWMgdm9pZCB0cnlf cHJlZW1wdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqdGhpc19ycSkKICt7CiAr CXN0cnVjdCBycSAqaGlnaGVzdF9wcmlvX3JxID0gTlVMTDsKLSsJaW50IGNwdSwgaGlnaGVzdF9w cmlvOwotKwl1NjQgbGF0ZXN0X2RlYWRsaW5lOworKwlpbnQgY3B1LCBoaWdoZXN0X3ByaW8gPSAw OwogKwljcHVtYXNrX3QgdG1wOwogKwogKwkvKgpAQCAtMjU1MSw3ICsyMTExLDcgQEAKICsJZWxz ZQogKwkJcmV0dXJuOwogKwotKwloaWdoZXN0X3ByaW8gPSBsYXRlc3RfZGVhZGxpbmUgPSAwOwor KwlyZXF1ZXVlX3Rhc2tfaGVhZChwKTsKICsKICsJZm9yX2VhY2hfY3B1X21hc2soY3B1LCB0bXAp IHsKICsJCXN0cnVjdCBycSAqcnE7CkBAIC0yNTYyLDE3ICsyMTIyLDE2IEBACiArCQlpZiAocnFf cHJpbyA8IGhpZ2hlc3RfcHJpbykKICsJCQljb250aW51ZTsKICsKLSsJCWlmIChycV9wcmlvID4g aGlnaGVzdF9wcmlvIHx8Ci0rCQkgICAgZGVhZGxpbmVfYWZ0ZXIocnEtPnJxX2RlYWRsaW5lLCBs YXRlc3RfZGVhZGxpbmUpKSB7Ci0rCQkJbGF0ZXN0X2RlYWRsaW5lID0gcnEtPnJxX2RlYWRsaW5l OworKwkJaWYgKHJxX3ByaW8gPiBoaWdoZXN0X3ByaW8pIHsKICsJCQloaWdoZXN0X3ByaW8gPSBy cV9wcmlvOwogKwkJCWhpZ2hlc3RfcHJpb19ycSA9IHJxOwogKwkJfQogKwl9CiArCiArCWlmIChs aWtlbHkoaGlnaGVzdF9wcmlvX3JxKSkgewotKwkJaWYgKGNhbl9wcmVlbXB0KHAsIGhpZ2hlc3Rf cHJpbywgaGlnaGVzdF9wcmlvX3JxLT5ycV9kZWFkbGluZSkpCisrCQlpZiAoY2FuX3ByZWVtcHQo cCwgaGlnaGVzdF9wcmlvKSkgewogKwkJCXJlc2NoZWRfdGFzayhoaWdoZXN0X3ByaW9fcnEtPmN1 cnIpOworKwkJfQogKwl9CiArfQogKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KQEAgLTI1ODUsMzkg KzIxNDQsMTYgQEAKICt7CiArCWlmIChwLT5wb2xpY3kgPT0gU0NIRURfSURMRVBSSU8pCiArCQly ZXR1cm47Ci0rCWlmIChjYW5fcHJlZW1wdChwLCB1cHJxLT5ycV9wcmlvLCB1cHJxLT5ycV9kZWFk bGluZSkpCi0rCQlyZXNjaGVkX3Rhc2sodXBycS0+Y3Vycik7CisrCXJlcXVldWVfdGFza19oZWFk KHApOworKwlpZiAoY2FuX3ByZWVtcHQocCwgdXBycS0+cnFfcHJpbykpIHsKKysJCXJlc2NoZWRf dGFzayhjdXJyZW50KTsKKysJfQogK30KICsjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogKwogK3N0 YXRpYyB2b2lkCiArdHR3dV9zdGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSwgaW50 IHdha2VfZmxhZ3MpCiArewotKyNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotKwlzdHJ1Y3QgcnEg KnJxID0gdGhpc19ycSgpOwotKwotKyNpZmRlZiBDT05GSUdfU01QCi0rCWludCB0aGlzX2NwdSA9 IHNtcF9wcm9jZXNzb3JfaWQoKTsKLSsKLSsJaWYgKGNwdSA9PSB0aGlzX2NwdSkKLSsJCXNjaGVk c3RhdF9pbmMocnEsIHR0d3VfbG9jYWwpOwotKwllbHNlIHsKLSsJCXN0cnVjdCBzY2hlZF9kb21h aW4gKnNkOwotKwotKwkJcmN1X3JlYWRfbG9jaygpOwotKwkJZm9yX2VhY2hfZG9tYWluKHRoaXNf Y3B1LCBzZCkgewotKwkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgc2NoZWRfZG9tYWluX3Nw YW4oc2QpKSkgewotKwkJCQlzY2hlZHN0YXRfaW5jKHNkLCB0dHd1X3dha2VfcmVtb3RlKTsKLSsJ CQkJYnJlYWs7Ci0rCQkJfQotKwkJfQotKwkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0rCX0KLSsKLSsj ZW5kaWYgLyogQ09ORklHX1NNUCAqLwotKwotKwlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50 KTsKLSsjZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgKi8KICt9CiArCiArc3RhdGljIGlubGlu ZSB2b2lkIHR0d3VfYWN0aXZhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJx LApAQCAtMjYzMSw4ICsyMTY3LDkgQEAKICsJICogZG9uJ3QgdHJpZ2dlciBhIHByZWVtcHRpb24g aWYgdGhlcmUgYXJlIG5vIGlkbGUgY3B1cywKICsJICogaW5zdGVhZCB3YWl0aW5nIGZvciBjdXJy ZW50IHRvIGRlc2NoZWR1bGUuCiArCSAqLwotKwlpZiAoIWlzX3N5bmMgfHwgc3VpdGFibGVfaWRs ZV9jcHVzKHApKQorKwlpZiAoIWlzX3N5bmMgfHwgc3VpdGFibGVfaWRsZV9jcHVzKHApKSB7CiAr CQl0cnlfcHJlZW1wdChwLCBycSk7CisrCX0KICt9CiArCiArc3RhdGljIGlubGluZSB2b2lkIHR0 d3VfcG9zdF9hY3RpdmF0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwK QEAgLTI3MzIsMTAgKzIyNjksNiBAQAogKwkJcmV0dXJuOwogKwogKwlpZiAoIXRhc2tfcXVldWVk KHApKSB7Ci0rCQlpZiAobGlrZWx5KCF0YXNrX3J1bm5pbmcocCkpKSB7Ci0rCQkJc2NoZWRzdGF0 X2luYyhycSwgdHR3dV9jb3VudCk7Ci0rCQkJc2NoZWRzdGF0X2luYyhycSwgdHR3dV9sb2NhbCk7 Ci0rCQl9CiArCQl0dHd1X2FjdGl2YXRlKHAsIHJxLCBmYWxzZSk7CiArCQl0dHd1X3N0YXQocCwg c21wX3Byb2Nlc3Nvcl9pZCgpLCAwKTsKICsJCXN1Y2Nlc3MgPSB0cnVlOwpAQCAtMjc2NSw4ICsy Mjk4LDYgQEAKICsJcmV0dXJuIHRyeV90b193YWtlX3VwKHAsIHN0YXRlLCAwKTsKICt9CiArCi0r c3RhdGljIHZvaWQgdGltZV9zbGljZV9leHBpcmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Ci0r CiArLyoKICsgKiBQZXJmb3JtIHNjaGVkdWxlciByZWxhdGVkIHNldHVwIGZvciBhIG5ld2x5IGZv cmtlZCBwcm9jZXNzIHAuCiArICogcCBpcyBmb3JrZWQgYnkgY3VycmVudC4KQEAgLTI3ODgsNyAr MjMxOSw2IEBACiArCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogKwlzZXRfdGFza19jcHUocCwg Y3B1KTsKICsKLSsJLyogU2hvdWxkIGJlIHJlc2V0IGluIGZvcmsuYyBidXQgZG9uZSBoZXJlIGZv ciBlYXNlIG9mIGJmcyBwYXRjaGluZyAqLwogKwlwLT5zY2hlZF90aW1lID0gcC0+c3RpbWVfcGMg PSBwLT51dGltZV9wYyA9IDA7CiArCiArCS8qCkBAIC0yNzk3LDEyICsyMzI3LDEwIEBACiArCWlm ICh1bmxpa2VseShwLT5zY2hlZF9yZXNldF9vbl9mb3JrKSkgewogKwkJaWYgKHAtPnBvbGljeSA9 PSBTQ0hFRF9GSUZPIHx8IHAtPnBvbGljeSA9PSBTQ0hFRF9SUikgewogKwkJCXAtPnBvbGljeSA9 IFNDSEVEX05PUk1BTDsKLSsJCQlwLT5ub3JtYWxfcHJpbyA9IG5vcm1hbF9wcmlvKHApOwogKwkJ fQogKwogKwkJaWYgKFBSSU9fVE9fTklDRShwLT5zdGF0aWNfcHJpbykgPCAwKSB7CiArCQkJcC0+ c3RhdGljX3ByaW8gPSBOSUNFX1RPX1BSSU8oMCk7Ci0rCQkJcC0+bm9ybWFsX3ByaW8gPSBwLT5z dGF0aWNfcHJpbzsKICsJCX0KICsKICsJCS8qCkBAIC0yODE2LDcgKzIzNDQsNyBAQAogKwkvKgog KwkgKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYWsgUEkgYm9vc3RpbmcgcHJpb3JpdHkgdG8gdGhl IGNoaWxkLgogKwkgKi8KLSsJcC0+cHJpbyA9IGN1cnItPm5vcm1hbF9wcmlvOworKwlwLT5wcmlv ID0gY3Vyci0+c3RhdGljX3ByaW87CiArCiArCUlOSVRfTElTVF9IRUFEKCZwLT5ydW5fbGlzdCk7 CiArI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEU1RBVFMpIHx8IGRlZmluZWQoQ09ORklHX1RBU0tf REVMQVlfQUNDVCkKQEAgLTI4MzgsMjQgKzIzNjYsMjAgQEAKICsJICogdG90YWwgYW1vdW50IG9m IHBlbmRpbmcgdGltZXNsaWNlcyBpbiB0aGUgc3lzdGVtIGRvZXNuJ3QgY2hhbmdlLAogKwkgKiBy ZXN1bHRpbmcgaW4gbW9yZSBzY2hlZHVsaW5nIGZhaXJuZXNzLiBJZiBpdCdzIG5lZ2F0aXZlLCBp dCB3b24ndAogKwkgKiBtYXR0ZXIgc2luY2UgdGhhdCdzIHRoZSBzYW1lIGFzIGJlaW5nIDAuIGN1 cnJlbnQncyB0aW1lX3NsaWNlIGlzCi0rCSAqIGFjdHVhbGx5IGluIHJxX3RpbWVfc2xpY2Ugd2hl biBpdCdzIHJ1bm5pbmcsIGFzIGlzIGl0cyBsYXN0X3JhbgotKwkgKiB2YWx1ZS4gcnEtPnJxX2Rl YWRsaW5lIGlzIG9ubHkgbW9kaWZpZWQgd2l0aGluIHNjaGVkdWxlKCkgc28gaXQKLSsJICogaXMg YWx3YXlzIGVxdWFsIHRvIGN1cnJlbnQtPmRlYWRsaW5lLgorKwkgKiBhY3R1YWxseSBpbiB0aW1l c2xpY2Ugd2hlbiBpdCdzIHJ1bm5pbmcsIGFzIGlzIGl0cyBsYXN0X3JhbgorKwkgKiB2YWx1ZS4g CiArCSAqLwogKwlycSA9IHRhc2tfZ3JxX2xvY2tfaXJxKGN1cnIpOwotKwlpZiAobGlrZWx5KHJx LT5ycV90aW1lX3NsaWNlID49IFJFU0NIRURfVVMgKiAyKSkgewotKwkJcnEtPnJxX3RpbWVfc2xp Y2UgLz0gMjsKLSsJCXAtPnRpbWVfc2xpY2UgPSBycS0+cnFfdGltZV9zbGljZTsKKysJaWYgKGxp a2VseShjdXJyLT50aW1lX3NsaWNlID49IFJFU0NIRURfVVMgKiAyKSkgeworKwkJY3Vyci0+dGlt ZV9zbGljZSAvPSAyOworKwkJcC0+dGltZV9zbGljZSA9IGN1cnItPnRpbWVfc2xpY2U7CiArCX0g ZWxzZSB7CiArCQkvKgotKwkJICogRm9ya2luZyB0YXNrIGhhcyBydW4gb3V0IG9mIHRpbWVzbGlj ZS4gUmVzY2hlZHVsZSBpdCBhbmQKLSsJCSAqIHN0YXJ0IGl0cyBjaGlsZCB3aXRoIGEgbmV3IHRp bWUgc2xpY2UgYW5kIGRlYWRsaW5lLiBUaGUKLSsJCSAqIGNoaWxkIHdpbGwgZW5kIHVwIHJ1bm5p bmcgZmlyc3QgYmVjYXVzZSBpdHMgZGVhZGxpbmUgd2lsbAotKwkJICogYmUgc2xpZ2h0bHkgZWFy bGllci4KKysJCSAqIEZvcmtpbmcgdGFzayBoYXMgcnVuIG91dCBvZiB0aW1lc2xpY2UuIFJlc2No ZWR1bGUgaXQuCiArCQkgKi8KLSsJCXJxLT5ycV90aW1lX3NsaWNlID0gMDsKKysJCWN1cnItPnRp bWVfc2xpY2UgPSAwOwogKwkJc2V0X3Rza19uZWVkX3Jlc2NoZWQoY3Vycik7Ci0rCQl0aW1lX3Ns aWNlX2V4cGlyZWQocCk7CisrCQlnZXRfdGltZV9zbGljZShwKTsKICsJfQogKwlwLT5sYXN0X3Jh biA9IHJxLT5ycV9sYXN0X3JhbjsKICsJdGFza19ncnFfdW5sb2NrX2lycSgpOwpAQCAtMjk2Nyw5 ICsyNDkxLDggQEAKICsgKi8KICtzdGF0aWMgaW5saW5lIHZvaWQKICtwcmVwYXJlX3Rhc2tfc3dp dGNoKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKLSsJCSAgICBzdHJ1 Y3QgdGFza19zdHJ1Y3QgKm5leHQpCisrCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogK3sK LSsJc2NoZWRfaW5mb19zd2l0Y2gocHJldiwgbmV4dCk7CiArCXBlcmZfZXZlbnRfdGFza19zY2hl ZF9vdXQocHJldiwgbmV4dCk7CiArCWZpcmVfc2NoZWRfb3V0X3ByZWVtcHRfbm90aWZpZXJzKHBy ZXYsIG5leHQpOwogKwlwcmVwYXJlX2xvY2tfc3dpdGNoKHJxLCBuZXh0KTsKQEAgLTMwNTksMTAg KzI1ODIsMTAgQEAKICsgKi8KICtzdGF0aWMgaW5saW5lIHZvaWQKICtjb250ZXh0X3N3aXRjaChz dHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCi0rCSAgICAgICBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKm5leHQpCisrCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiArewog KwlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKm9sZG1tOwotKworKwkKICsJcHJlcGFyZV90YXNrX3N3 aXRjaChycSwgcHJldiwgbmV4dCk7CiArCiArCW1tID0gbmV4dC0+bW07CkBAIC0zMzM0LDE2ICsy ODU3LDYgQEAKICsKICsjZW5kaWYgLyogQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkcgKi8KICsK LSsjaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0rc3RhdGljIGlubGluZSB1NjQgc3RlYWxfdGlja3Mo dTY0IHN0ZWFsKQotK3sKLSsJaWYgKHVubGlrZWx5KHN0ZWFsID4gTlNFQ19QRVJfU0VDKSkKLSsJ CXJldHVybiBkaXZfdTY0KHN0ZWFsLCBUSUNLX05TRUMpOwotKwotKwlyZXR1cm4gX19pdGVyX2Rp dl91NjRfcmVtKHN0ZWFsLCBUSUNLX05TRUMsICZzdGVhbCk7Ci0rfQotKyNlbmRpZgotKwogK3N0 YXRpYyB2b2lkIHVwZGF0ZV9ycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEsIHM2NCBkZWx0YSkK ICt7CiArI2lmZGVmIENPTkZJR19JUlFfVElNRV9BQ0NPVU5USU5HCkBAIC0zMzcwLDI0ICsyODgz LDYgQEAKICsJcnEtPnByZXZfaXJxX3RpbWUgKz0gaXJxX2RlbHRhOwogKwlkZWx0YSAtPSBpcnFf ZGVsdGE7CiArI2VuZGlmCi0rI2lmZGVmIENPTkZJR19QQVJBVklSVF9USU1FX0FDQ09VTlRJTkcK LSsJaWYgKHN0YXRpY19icmFuY2goKCZwYXJhdmlydF9zdGVhbF9ycV9lbmFibGVkKSkpIHsKLSsJ CXU2NCBzdCwgc3RlYWwgPSBwYXJhdmlydF9zdGVhbF9jbG9jayhjcHVfb2YocnEpKTsKLSsKLSsJ CXN0ZWFsIC09IHJxLT5wcmV2X3N0ZWFsX3RpbWVfcnE7Ci0rCi0rCQlpZiAodW5saWtlbHkoc3Rl YWwgPiBkZWx0YSkpCi0rCQkJc3RlYWwgPSBkZWx0YTsKLSsKLSsJCXN0ID0gc3RlYWxfdGlja3Mo c3RlYWwpOwotKwkJc3RlYWwgPSBzdCAqIFRJQ0tfTlNFQzsKLSsKLSsJCXJxLT5wcmV2X3N0ZWFs X3RpbWVfcnEgKz0gc3RlYWw7Ci0rCi0rCQlkZWx0YSAtPSBzdGVhbDsKLSsJfQotKyNlbmRpZgot KwogKwlycS0+Y2xvY2tfdGFzayArPSBkZWx0YTsKICt9CiArCkBAIC0zNDE4LDI1ICsyOTEzLDYg QEAKICt9CiArI2VuZGlmIC8qIENPTkZJR19JUlFfVElNRV9BQ0NPVU5USU5HICovCiArCi0rc3Rh dGljIF9fYWx3YXlzX2lubGluZSBib29sIHN0ZWFsX2FjY291bnRfcHJvY2Vzc190aWNrKHZvaWQp Ci0rewotKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLSsJaWYgKHN0YXRpY19icmFuY2goJnBhcmF2 aXJ0X3N0ZWFsX2VuYWJsZWQpKSB7Ci0rCQl1NjQgc3RlYWwsIHN0ID0gMDsKLSsKLSsJCXN0ZWFs ID0gcGFyYXZpcnRfc3RlYWxfY2xvY2soc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLSsJCXN0ZWFsIC09 IHRoaXNfcnEoKS0+cHJldl9zdGVhbF90aW1lOwotKwotKwkJc3QgPSBzdGVhbF90aWNrcyhzdGVh bCk7Ci0rCQl0aGlzX3JxKCktPnByZXZfc3RlYWxfdGltZSArPSBzdCAqIFRJQ0tfTlNFQzsKLSsK LSsJCWFjY291bnRfc3RlYWxfdGltZShzdCk7Ci0rCQlyZXR1cm4gc3Q7Ci0rCX0KLSsjZW5kaWYK LSsJcmV0dXJuIGZhbHNlOwotK30KLSsKICsvKgogKyAqIE9uIGVhY2ggdGljaywgc2VlIHdoYXQg cGVyY2VudGFnZSBvZiB0aGF0IHRpY2sgd2FzIGF0dHJpYnV0ZWQgdG8gZWFjaAogKyAqIGNvbXBv bmVudCBhbmQgYWRkIHRoZSBwZXJjZW50YWdlIHRvIHRoZSBfcGMgdmFsdWVzLiBPbmNlIGEgX3Bj IHZhbHVlIGhhcwpAQCAtMzQ2NCw3ICsyOTQwLDcgQEAKICsKICtzdGF0aWMgdm9pZAogK3BjX3N5 c3RlbV90aW1lKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGhhcmRp cnFfb2Zmc2V0LAotKwkgICAgICAgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBucykK KysJCSAgIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgbnMpCiArewogKwl1NjQgKmNw dXN0YXQgPSBrY3B1c3RhdF90aGlzX2NwdS0+Y3B1c3RhdDsKICsJY3B1dGltZV90IG9uZV9qaWZm eV9zY2FsZWQgPSBjcHV0aW1lX3RvX3NjYWxlZChjcHV0aW1lX29uZV9qaWZmeSk7CkBAIC0zNDc0 LDcgKzI5NTAsNiBAQAogKwkJcC0+c3RpbWVfcGMgJT0gMTI4OwogKwkJcC0+c3RpbWUgKz0gKF9f Zm9yY2UgdTY0KWNwdXRpbWVfb25lX2ppZmZ5OwogKwkJcC0+c3RpbWVzY2FsZWQgKz0gb25lX2pp ZmZ5X3NjYWxlZDsKLSsJCWFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUocCwgY3B1dGltZV9vbmVf amlmZnkpOwogKwkJYWNjdF91cGRhdGVfaW50ZWdyYWxzKHApOwogKwl9CiArCXAtPnNjaGVkX3Rp bWUgKz0gbnM7CkBAIC0zNTExLDcgKzI5ODYsNiBAQAogKwkJcC0+dXRpbWVfcGMgJT0gMTI4Owog KwkJcC0+dXRpbWUgKz0gKF9fZm9yY2UgdTY0KWNwdXRpbWVfb25lX2ppZmZ5OwogKwkJcC0+dXRp bWVzY2FsZWQgKz0gb25lX2ppZmZ5X3NjYWxlZDsKLSsJCWFjY291bnRfZ3JvdXBfdXNlcl90aW1l KHAsIGNwdXRpbWVfb25lX2ppZmZ5KTsKICsJCWFjY3RfdXBkYXRlX2ludGVncmFscyhwKTsKICsJ fQogKwlwLT5zY2hlZF90aW1lICs9IG5zOwpAQCAtMzU1NSw2MiArMzAyOSw1MSBAQAogKyAqIENQ VSBzY2hlZHVsZXIgcXVvdGEgYWNjb3VudGluZyBpcyBhbHNvIHBlcmZvcm1lZCBoZXJlIGluIG1p Y3Jvc2Vjb25kcy4KICsgKi8KICtzdGF0aWMgdm9pZAotK3VwZGF0ZV9jcHVfY2xvY2soc3RydWN0 IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIHRpY2spCisrdXBkYXRlX2NwdV9j bG9jayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiArewogKwlsb25nIGFj Y291bnRfbnMgPSBycS0+Y2xvY2sgLSBycS0+dGltZWtlZXBfY2xvY2s7CiArCXN0cnVjdCB0YXNr X3N0cnVjdCAqaWRsZSA9IHJxLT5pZGxlOwogKwl1bnNpZ25lZCBsb25nIGFjY291bnRfcGM7Cisr CWludCB1c2VyX3RpY2s7CiArCisrCXAtPmxhc3RfcmFuID0gcnEtPmNsb2NrOworKwogKwlpZiAo dW5saWtlbHkoYWNjb3VudF9ucyA8IDApKQogKwkJYWNjb3VudF9ucyA9IDA7CiArCiArCWFjY291 bnRfcGMgPSBOU19UT19QQyhhY2NvdW50X25zKTsKICsKLSsJaWYgKHRpY2spIHsKLSsJCWludCB1 c2VyX3RpY2s7CisrCS8qIEFjY3VyYXRlIHRpY2sgdGltZWtlZXBpbmcgKi8KKysJcnEtPmFjY291 bnRfcGMgKz0gYWNjb3VudF9wYyAtIDEyODsKKysJaWYgKHJxLT5hY2NvdW50X3BjIDwgMCkgewor KwkJLyoKKysJCSAqIFNtYWxsIGVycm9ycyBpbiBtaWNybyBhY2NvdW50aW5nIG1heSBub3QgbWFr ZSB0aGUKKysJCSAqIGFjY291bnRpbmcgYWRkIHVwIHRvIDEyOCBlYWNoIHRpY2sgc28gd2Uga2Vl cCB0cmFjaworKwkJICogb2YgdGhlIHBlcmNlbnRhZ2UgYW5kIHJvdW5kIGl0IHVwIHdoZW4gbGVz cyB0aGFuIDEyOAorKwkJICovCisrCQlhY2NvdW50X3BjICs9IC1ycS0+YWNjb3VudF9wYzsKKysJ CXJxLT5hY2NvdW50X3BjID0gMDsKKysJfQogKwotKwkJLyogQWNjdXJhdGUgdGljayB0aW1la2Vl cGluZyAqLwotKwkJcnEtPmFjY291bnRfcGMgKz0gYWNjb3VudF9wYyAtIDEyODsKLSsJCWlmIChy cS0+YWNjb3VudF9wYyA8IDApIHsKLSsJCQkvKgotKwkJCSAqIFNtYWxsIGVycm9ycyBpbiBtaWNy byBhY2NvdW50aW5nIG1heSBub3QgbWFrZSB0aGUKLSsJCQkgKiBhY2NvdW50aW5nIGFkZCB1cCB0 byAxMjggZWFjaCB0aWNrIHNvIHdlIGtlZXAgdHJhY2sKLSsJCQkgKiBvZiB0aGUgcGVyY2VudGFn ZSBhbmQgcm91bmQgaXQgdXAgd2hlbiBsZXNzIHRoYW4gMTI4Ci0rCQkJICovCi0rCQkJYWNjb3Vu dF9wYyArPSAtcnEtPmFjY291bnRfcGM7Ci0rCQkJcnEtPmFjY291bnRfcGMgPSAwOwotKwkJfQot KwkJaWYgKHN0ZWFsX2FjY291bnRfcHJvY2Vzc190aWNrKCkpCi0rCQkJZ290byB0c19hY2NvdW50 OworKwl1c2VyX3RpY2sgPSB1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpOwogKwotKwkJdXNlcl90 aWNrID0gdXNlcl9tb2RlKGdldF9pcnFfcmVncygpKTsKKysJaWYgKHVzZXJfdGljaykKKysJCXBj X3VzZXJfdGltZShycSwgcCwgYWNjb3VudF9wYywgYWNjb3VudF9ucyk7CisrCWVsc2UgaWYgKHAg IT0gaWRsZSB8fCAoaXJxX2NvdW50KCkgIT0gSEFSRElSUV9PRkZTRVQpKQorKwkJcGNfc3lzdGVt X3RpbWUocnEsIHAsIEhBUkRJUlFfT0ZGU0VULAorKwkJCQkgICBhY2NvdW50X3BjLCBhY2NvdW50 X25zKTsKKysJZWxzZQorKwkJcGNfaWRsZV90aW1lKHJxLCBhY2NvdW50X3BjKTsKICsKLSsJCWlm ICh1c2VyX3RpY2spCi0rCQkJcGNfdXNlcl90aW1lKHJxLCBwLCBhY2NvdW50X3BjLCBhY2NvdW50 X25zKTsKLSsJCWVsc2UgaWYgKHAgIT0gaWRsZSB8fCAoaXJxX2NvdW50KCkgIT0gSEFSRElSUV9P RkZTRVQpKQotKwkJCXBjX3N5c3RlbV90aW1lKHJxLCBwLCBIQVJESVJRX09GRlNFVCwKLSsJCQkJ ICAgICAgIGFjY291bnRfcGMsIGFjY291bnRfbnMpOwotKwkJZWxzZQotKwkJCXBjX2lkbGVfdGlt ZShycSwgYWNjb3VudF9wYyk7CisrCWlmIChzY2hlZF9jbG9ja19pcnF0aW1lKQorKwkJaXJxdGlt ZV9hY2NvdW50X2hpX3NpKCk7CiArCi0rCQlpZiAoc2NoZWRfY2xvY2tfaXJxdGltZSkKLSsJCQlp cnF0aW1lX2FjY291bnRfaGlfc2koKTsKLSsJfSBlbHNlIHsKLSsJCS8qIEFjY3VyYXRlIHN1YnRp Y2sgdGltZWtlZXBpbmcgKi8KLSsJCXJxLT5hY2NvdW50X3BjICs9IGFjY291bnRfcGM7Ci0rCQlp ZiAocCA9PSBpZGxlKQotKwkJCXBjX2lkbGVfdGltZShycSwgYWNjb3VudF9wYyk7Ci0rCQllbHNl Ci0rCQkJcGNfdXNlcl90aW1lKHJxLCBwLCBhY2NvdW50X3BjLCBhY2NvdW50X25zKTsKLSsJfQot KwotK3RzX2FjY291bnQ6CiArCS8qIHRpbWVfc2xpY2UgYWNjb3VudGluZyBpcyBkb25lIGluIHVz ZWNzIHRvIGF2b2lkIG92ZXJmbG93IG9uIDMyYml0ICovCiArCWlmIChycS0+cnFfcG9saWN5ICE9 IFNDSEVEX0ZJRk8gJiYgcCAhPSBpZGxlKSB7CiArCQlzNjQgdGltZV9kaWZmID0gcnEtPmNsb2Nr IC0gcnEtPnJxX2xhc3RfcmFuOwogKwogKwkJbmlmZnlfZGlmZigmdGltZV9kaWZmLCAxKTsKLSsJ CXJxLT5ycV90aW1lX3NsaWNlIC09IE5TX1RPX1VTKHRpbWVfZGlmZik7CisrCQlwLT50aW1lX3Ns aWNlIC09IE5TX1RPX1VTKHRpbWVfZGlmZik7CiArCX0KICsJcnEtPnJxX2xhc3RfcmFuID0gcnEt PnRpbWVrZWVwX2Nsb2NrID0gcnEtPmNsb2NrOwogK30KQEAgLTM2MjYsNyArMzA4OSw2IEBACiAr CXU2NCBucyA9IDA7CiArCiArCWlmIChwID09IHJxLT5jdXJyKSB7Ci0rCQl1cGRhdGVfY2xvY2tz KHJxKTsKICsJCW5zID0gcnEtPmNsb2NrX3Rhc2sgLSBycS0+cnFfbGFzdF9yYW47CiArCQlpZiAo dW5saWtlbHkoKHM2NClucyA8IDApKQogKwkJCW5zID0gMDsKQEAgLTM2NjgsNyArMzEzMCw3IEBA CiArCiArLyogQ29tcGF0aWJpbGl0eSBjcmFwIGZvciByZW1vdmFsICovCiArdm9pZCBhY2NvdW50 X3VzZXJfdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdXRpbWVfdCBjcHV0aW1lLAotKwkJ ICAgICAgIGNwdXRpbWVfdCBjcHV0aW1lX3NjYWxlZCkKKysJCQkgICBjcHV0aW1lX3QgY3B1dGlt ZV9zY2FsZWQpCiArewogK30KICsKQEAgLTM2ODMsMTQgKzMxNDUsMTMgQEAKICsgKiBAY3B1dGlt ZV9zY2FsZWQ6IGNwdXRpbWUgc2NhbGVkIGJ5IGNwdSBmcmVxdWVuY3kKICsgKi8KICtzdGF0aWMg dm9pZCBhY2NvdW50X2d1ZXN0X3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjcHV0aW1lX3Qg Y3B1dGltZSwKLSsJCQkgICAgICAgY3B1dGltZV90IGNwdXRpbWVfc2NhbGVkKQorKwkJCQkgICBj cHV0aW1lX3QgY3B1dGltZV9zY2FsZWQpCiArewogKwl1NjQgKmNwdXN0YXQgPSBrY3B1c3RhdF90 aGlzX2NwdS0+Y3B1c3RhdDsKICsKICsJLyogQWRkIGd1ZXN0IHRpbWUgdG8gcHJvY2Vzcy4gKi8K ICsJcC0+dXRpbWUgKz0gKF9fZm9yY2UgdTY0KWNwdXRpbWU7CiArCXAtPnV0aW1lc2NhbGVkICs9 IChfX2ZvcmNlIHU2NCljcHV0aW1lX3NjYWxlZDsKLSsJYWNjb3VudF9ncm91cF91c2VyX3RpbWUo cCwgY3B1dGltZSk7CiArCXAtPmd0aW1lICs9IChfX2ZvcmNlIHU2NCljcHV0aW1lOwogKwogKwkv KiBBZGQgZ3Vlc3QgdGltZSB0byBjcHVzdGF0LiAqLwpAQCAtMzcxNyw3ICszMTc4LDYgQEAKICsJ LyogQWRkIHN5c3RlbSB0aW1lIHRvIHByb2Nlc3MuICovCiArCXAtPnN0aW1lICs9IChfX2ZvcmNl IHU2NCljcHV0aW1lOwogKwlwLT5zdGltZXNjYWxlZCArPSAoX19mb3JjZSB1NjQpY3B1dGltZV9z Y2FsZWQ7Ci0rCWFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUocCwgY3B1dGltZSk7CiArCiArCS8q IEFkZCBzeXN0ZW0gdGltZSB0byBjcHVzdGF0LiAqLwogKwkqdGFyZ2V0X2NwdXRpbWU2NCArPSAo X19mb3JjZSB1NjQpY3B1dGltZTsKQEAgLTM3OTQsMTI0ICszMjU0LDIxIEBACiArfQogKyNlbmRp ZgogKwotK3N0YXRpYyBpbmxpbmUgdm9pZCBncnFfaXNvX2xvY2sodm9pZCkKLSsJX19hY3F1aXJl cyhncnEuaXNvX2xvY2spCi0rewotKwlyYXdfc3Bpbl9sb2NrKCZncnEuaXNvX2xvY2spOwotK30K LSsKLStzdGF0aWMgaW5saW5lIHZvaWQgZ3JxX2lzb191bmxvY2sodm9pZCkKLSsJX19yZWxlYXNl cyhncnEuaXNvX2xvY2spCi0rewotKwlyYXdfc3Bpbl91bmxvY2soJmdycS5pc29fbG9jayk7Ci0r fQotKwotKy8qCi0rICogRnVuY3Rpb25zIHRvIHRlc3QgZm9yIHdoZW4gU0NIRURfSVNPIHRhc2tz IGhhdmUgdXNlZCB0aGVpciBhbGxvY2F0ZWQKLSsgKiBxdW90YSBhcyByZWFsIHRpbWUgc2NoZWR1 bGluZyBhbmQgY29udmVydCB0aGVtIGJhY2sgdG8gU0NIRURfTk9STUFMLgotKyAqIFdoZXJlIHBv c3NpYmxlLCB0aGUgZGF0YSBpcyB0ZXN0ZWQgbG9ja2xlc3MsIHRvIGF2b2lkIGdyYWJiaW5nIGlz b19sb2NrCi0rICogYmVjYXVzZSB0aGUgb2NjYXNpb25hbCBpbmFjY3VyYXRlIHJlc3VsdCB3b24n dCBtYXR0ZXIuIEhvd2V2ZXIgdGhlCi0rICogdGljayBkYXRhIGlzIG9ubHkgZXZlciBtb2RpZmll ZCB1bmRlciBsb2NrLiBpc29fcmVmcmFjdG9yeSBpcyBvbmx5IHNpbXBseQotKyAqIHNldCB0byAw IG9yIDEgc28gaXQncyBub3Qgd29ydGggZ3JhYmJpbmcgdGhlIGxvY2sgeWV0IGFnYWluIGZvciB0 aGF0LgotKyAqLwotK3N0YXRpYyBib29sIHNldF9pc29fcmVmcmFjdG9yeSh2b2lkKQotK3sKLSsJ Z3JxLmlzb19yZWZyYWN0b3J5ID0gdHJ1ZTsKLSsJcmV0dXJuIGdycS5pc29fcmVmcmFjdG9yeTsK LSt9Ci0rCi0rc3RhdGljIGJvb2wgY2xlYXJfaXNvX3JlZnJhY3Rvcnkodm9pZCkKLSt7Ci0rCWdy cS5pc29fcmVmcmFjdG9yeSA9IGZhbHNlOwotKwlyZXR1cm4gZ3JxLmlzb19yZWZyYWN0b3J5Owot K30KLSsKLSsvKgotKyAqIFRlc3QgaWYgU0NIRURfSVNPIHRhc2tzIGhhdmUgcnVuIGxvbmdlciB0 aGFuIHRoZWlyIGFsbG90ZWQgcGVyaW9kIGFzIFJUCi0rICogdGFza3MgYW5kIHNldCB0aGUgcmVm cmFjdG9yeSBmbGFnIGlmIG5lY2Vzc2FyeS4gVGhlcmUgaXMgMTAlIGh5c3RlcmVzaXMKLSsgKiBm b3IgdW5zZXR0aW5nIHRoZSBmbGFnLiAxMTUvMTI4IGlzIH45MC8xMDAgYXMgYSBmYXN0IHNoaWZ0 IGluc3RlYWQgb2YgYQotKyAqIHNsb3cgZGl2aXNpb24uCi0rICovCi0rc3RhdGljIGJvb2wgdGVz dF9yZXRfaXNvcmVmcmFjdG9yeShzdHJ1Y3QgcnEgKnJxKQotK3sKLSsJaWYgKGxpa2VseSghZ3Jx Lmlzb19yZWZyYWN0b3J5KSkgewotKwkJaWYgKGdycS5pc29fdGlja3MgPiBJU09fUEVSSU9EICog c2NoZWRfaXNvX2NwdSkKLSsJCQlyZXR1cm4gc2V0X2lzb19yZWZyYWN0b3J5KCk7Ci0rCX0gZWxz ZSB7Ci0rCQlpZiAoZ3JxLmlzb190aWNrcyA8IElTT19QRVJJT0QgKiAoc2NoZWRfaXNvX2NwdSAq IDExNSAvIDEyOCkpCi0rCQkJcmV0dXJuIGNsZWFyX2lzb19yZWZyYWN0b3J5KCk7Ci0rCX0KLSsJ cmV0dXJuIGdycS5pc29fcmVmcmFjdG9yeTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgaXNvX3RpY2so dm9pZCkKLSt7Ci0rCWdycV9pc29fbG9jaygpOwotKwlncnEuaXNvX3RpY2tzICs9IDEwMDsKLSsJ Z3JxX2lzb191bmxvY2soKTsKLSt9Ci0rCi0rLyogTm8gU0NIRURfSVNPIHRhc2sgd2FzIHJ1bm5p bmcgc28gZGVjcmVhc2UgcnEtPmlzb190aWNrcyAqLwotK3N0YXRpYyBpbmxpbmUgdm9pZCBub19p c29fdGljayh2b2lkKQotK3sKLSsJaWYgKGdycS5pc29fdGlja3MpIHsKLSsJCWdycV9pc29fbG9j aygpOwotKwkJZ3JxLmlzb190aWNrcyAtPSBncnEuaXNvX3RpY2tzIC8gSVNPX1BFUklPRCArIDE7 Ci0rCQlpZiAodW5saWtlbHkoZ3JxLmlzb19yZWZyYWN0b3J5ICYmIGdycS5pc29fdGlja3MgPAot KwkJICAgIElTT19QRVJJT0QgKiAoc2NoZWRfaXNvX2NwdSAqIDExNSAvIDEyOCkpKQotKwkJCWNs ZWFyX2lzb19yZWZyYWN0b3J5KCk7Ci0rCQlncnFfaXNvX3VubG9jaygpOwotKwl9Ci0rfQotKwog Ky8qIFRoaXMgbWFuYWdlcyB0YXNrcyB0aGF0IGhhdmUgcnVuIG91dCBvZiB0aW1lc2xpY2UgZHVy aW5nIGEgc2NoZWR1bGVyX3RpY2sgKi8KKysvKiDlvZPliY3pmJ/liJfml7bpkp/nmoTmjqfliLYg Ki8KICtzdGF0aWMgdm9pZCB0YXNrX3J1bm5pbmdfdGljayhzdHJ1Y3QgcnEgKnJxKQogK3sKICsJ c3RydWN0IHRhc2tfc3RydWN0ICpwOworKwlwID0gcnEtPmN1cnI7CiArCi0rCS8qCi0rCSAqIElm IGEgU0NIRURfSVNPIHRhc2sgaXMgcnVubmluZyB3ZSBpbmNyZW1lbnQgdGhlIGlzb190aWNrcy4g SW4KLSsJICogb3JkZXIgdG8gcHJldmVudCBTQ0hFRF9JU08gdGFza3MgZnJvbSBjYXVzaW5nIHN0 YXJ2YXRpb24gaW4gdGhlCi0rCSAqIHByZXNlbmNlIG9mIHRydWUgUlQgdGFza3Mgd2UgYWNjb3Vu dCB0aG9zZSBhcyBpc29fdGlja3MgYXMgd2VsbC4KLSsJICovCi0rCWlmICgocnRfcXVldWUocnEp IHx8IChpc29fcXVldWUocnEpICYmICFncnEuaXNvX3JlZnJhY3RvcnkpKSkgewotKwkJaWYgKGdy cS5pc29fdGlja3MgPD0gKElTT19QRVJJT0QgKiAxMjgpIC0gMTI4KQotKwkJCWlzb190aWNrKCk7 Ci0rCX0gZWxzZQotKwkJbm9faXNvX3RpY2soKTsKLSsKLSsJaWYgKGlzb19xdWV1ZShycSkpIHsK LSsJCWlmICh1bmxpa2VseSh0ZXN0X3JldF9pc29yZWZyYWN0b3J5KHJxKSkpIHsKLSsJCQlpZiAo cnFfcnVubmluZ19pc28ocnEpKSB7Ci0rCQkJCS8qCi0rCQkJCSAqIFNDSEVEX0lTTyB0YXNrIGlz IHJ1bm5pbmcgYXMgUlQgYW5kIGxpbWl0Ci0rCQkJCSAqIGhhcyBiZWVuIGhpdC4gRm9yY2UgaXQg dG8gcmVzY2hlZHVsZSBhcwotKwkJCQkgKiBTQ0hFRF9OT1JNQUwgYnkgemVyb2luZyBpdHMgdGlt ZV9zbGljZQotKwkJCQkgKi8KLSsJCQkJcnEtPnJxX3RpbWVfc2xpY2UgPSAwOwotKwkJCX0KLSsJ CX0KLSsJfQotKwogKwkvKiBTQ0hFRF9GSUZPIHRhc2tzIG5ldmVyIHJ1biBvdXQgb2YgdGltZXNs aWNlLiAqLwogKwlpZiAocnEtPnJxX3BvbGljeSA9PSBTQ0hFRF9GSUZPKQogKwkJcmV0dXJuOwot KwkvKgotKwkgKiBUYXNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGluIHRoZSBmaXJzdCBoYWxmIG9m IGEgdGljayBhcmUgbm90Ci0rCSAqIGFsbG93ZWQgdG8gcnVuIGludG8gdGhlIDJuZCBoYWxmIG9m IHRoZSBuZXh0IHRpY2sgaWYgdGhleSB3aWxsCi0rCSAqIHJ1biBvdXQgb2YgdGltZSBzbGljZSBp biB0aGUgaW50ZXJpbS4gT3RoZXJ3aXNlLCBpZiB0aGV5IGhhdmUKLSsJICogbGVzcyB0aGFuIFJF U0NIRURfVVMgzrxzIG9mIHRpbWUgc2xpY2UgbGVmdCB0aGV5IHdpbGwgYmUgcmVzY2hlZHVsZWQu Ci0rCSAqLwotKwlpZiAocnEtPmRpdGhlcikgewotKwkJaWYgKHJxLT5ycV90aW1lX3NsaWNlID4g SEFMRl9KSUZGWV9VUykKLSsJCQlyZXR1cm47Ci0rCQllbHNlCi0rCQkJcnEtPnJxX3RpbWVfc2xp Y2UgPSAwOwotKwl9IGVsc2UgaWYgKHJxLT5ycV90aW1lX3NsaWNlID49IFJFU0NIRURfVVMpCi0r CQkJcmV0dXJuOwogKwotKwkvKiBwLT50aW1lX3NsaWNlIDwgUkVTQ0hFRF9VUy4gV2Ugb25seSBt b2RpZnkgdGFza19zdHJ1Y3QgdW5kZXIgZ3JxIGxvY2sgKi8KLSsJcCA9IHJxLT5jdXJyOworKwlp ZiAocC0+dGltZV9zbGljZSA+IFJFU0NIRURfVVMpCisrCQlyZXR1cm47CisrCisrCS8qIHRpbWVf c2xpY2UgZXhwaXJlZC4gR3JxIGxvY2tlZCAqLwogKwlncnFfbG9jaygpOwogKwlyZXF1ZXVlX3Rh c2socCk7CiArCXNldF90c2tfbmVlZF9yZXNjaGVkKHApOwpAQCAtMzkzMywxMiArMzI5MCw5IEBA CiArCXNjaGVkX2Nsb2NrX3RpY2soKTsKICsJLyogZ3JxIGxvY2sgbm90IGdyYWJiZWQsIHNvIG9u bHkgdXBkYXRlIHJxIGNsb2NrICovCiArCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0rCXVwZGF0ZV9j cHVfY2xvY2socnEsIHJxLT5jdXJyLCB0cnVlKTsKKysJdXBkYXRlX2NwdV9jbG9jayhycSwgcnEt PmN1cnIpOwogKwlpZiAoIXJxX2lkbGUocnEpKQogKwkJdGFza19ydW5uaW5nX3RpY2socnEpOwot KwllbHNlCi0rCQlub19pc29fdGljaygpOwotKwlycS0+bGFzdF90aWNrID0gcnEtPmNsb2NrOwog KwlwZXJmX2V2ZW50X3Rhc2tfdGljaygpOwogK30KICsKQEAgLTM5OTksMTM0ICszMzUzLDE3NyBA QAogK0VYUE9SVF9TWU1CT0woc3ViX3ByZWVtcHRfY291bnQpOwogKyNlbmRpZgogKworK3N0YXRp YyBpbmxpbmUgaW50IHByaW9yaXR5X2RlY3JlbWVudChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnApCisreworKwlpZihwLT5wcmlvIDwgTk9STUFMX1BSSU8pCisrCQlyZXR1cm4g MTsKKysJcC0+cHJpbyArKzsKKysJaWYocC0+cHJpbyA8IHAtPnN0YXRpY19wcmlvKSAKKysJCXAt PnByaW8gPSBwLT5zdGF0aWNfcHJpbzsKKysJaWYocC0+cHJpbyA+PSBJRExFX1BSSU8pIHsgCisr CQlwLT5wcmlvID0gcC0+c3RhdGljX3ByaW8gKyAxOworKwkJaWYocC0+cHJpbyA+PSBJRExFX1BS SU8pCisrCQkJcC0+cHJpbyA9IHAtPnN0YXRpY19wcmlvOworKwl9CisrCXJldHVybiAxOworK30K KysKICsvKgotKyAqIERlYWRsaW5lIGlzICJub3ciIGluIG5pZmZpZXMgKyAob2Zmc2V0IGJ5IHBy aW9yaXR5KS4gU2V0dGluZyB0aGUgZGVhZGxpbmUKLSsgKiBpcyB0aGUga2V5IHRvIGV2ZXJ5dGhp bmcuIEl0IGRpc3RyaWJ1dGVzIGNwdSBmYWlybHkgYW1vbmdzdCB0YXNrcyBvZiB0aGUKLSsgKiBz YW1lIG5pY2UgdmFsdWUsIGl0IHByb3BvcnRpb25zIGNwdSBhY2NvcmRpbmcgdG8gbmljZSBsZXZl bCwgaXQgbWVhbnMgdGhlCi0rICogdGFzayB0aGF0IGxhc3Qgd29rZSB1cCB0aGUgbG9uZ2VzdCBh Z28gaGFzIHRoZSBlYXJsaWVzdCBkZWFkbGluZSwgdGh1cwotKyAqIGVuc3VyaW5nIHRoYXQgaW50 ZXJhY3RpdmUgdGFza3MgZ2V0IGxvdyBsYXRlbmN5IG9uIHdha2UgdXAuIFRoZSBDUFUKLSsgKiBw cm9wb3J0aW9uIHdvcmtzIG91dCB0byB0aGUgc3F1YXJlIG9mIHRoZSB2aXJ0dWFsIGRlYWRsaW5l IGRpZmZlcmVuY2UsIHNvCi0rICogdGhpcyBlcXVhdGlvbiB3aWxsIGdpdmUgbmljZSAxOSAzJSBD UFUgY29tcGFyZWQgdG8gbmljZSAwLgorKyAqIFRpbWVzbGljZXMgYmVsb3cgUkVTQ0hFRF9VUyBh cmUgY29uc2lkZXJlZCBhcyBnb29kIGFzIGV4cGlyZWQgYXMgdGhlcmUncyBubworKyAqIHBvaW50 IHJlc2NoZWR1bGluZyB3aGVuIHRoZXJlJ3Mgc28gbGl0dGxlIHRpbWUgbGVmdC4gU0NIRURfQkFU Q0ggdGFza3MKKysgKiBoYXZlIGJlZW4gZmxhZ2dlZCBiZSBub3QgbGF0ZW5jeSBzZW5zaXRpdmUg YW5kIGxpa2VseSB0byBiZSBmdWxseSBDUFUKKysgKiBib3VuZCBzbyBldmVyeSB0aW1lIHRoZXkn cmUgcmVzY2hlZHVsZWQgdGhleSBoYXZlIHRoZWlyIHRpbWVfc2xpY2UKKysgKiByZWZpbGxlZC4K ICsgKi8KLStzdGF0aWMgaW5saW5lIHU2NCBwcmlvX2RlYWRsaW5lX2RpZmYoaW50IHVzZXJfcHJp bykKKytzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfdGltZXNsaWNlX2VuZChzdHJ1Y3QgcnEgKnJx LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiArewotKwlyZXR1cm4gKHByaW9fcmF0aW9zW3VzZXJf cHJpb10gKiBycl9pbnRlcnZhbCAqIChNU19UT19OUygxKSAvIDEyOCkpOworKwlpZihwLT5wb2xp Y3kgPT0gU0NIRURfRklGTykKKysJCWdvdG8gb3V0OworKwlpZihwLT50aW1lX3NsaWNlIDwgUkVT Q0hFRF9VUyB8fCBiYXRjaF90YXNrKHApKSB7CisrCQlpZihwLT5wcmlvID49IE5PUk1BTF9QUklP KSB7CisrCQkJcC0+cHJpbyArKzsKKysJCQlpZihwLT5wcmlvIDwgcC0+c3RhdGljX3ByaW8pIAor KwkJCQlwLT5wcmlvID0gcC0+c3RhdGljX3ByaW87CisrCQkJaWYocC0+cHJpbyA+PSBJRExFX1BS SU8pIHsgCisrCQkJCXAtPnByaW8gPSBwLT5zdGF0aWNfcHJpbyArIDE7CisrCQkJCWlmKHAtPnBy aW8gPj0gSURMRV9QUklPKQorKwkJCQkJcC0+cHJpbyA9IHAtPnN0YXRpY19wcmlvOworKwkJCX0K KysJCX0KKysJfWVsc2UgeworKwkJaWYocC0+dGltZV9zbGljZSA+PSBNU19UT19VUyhycl9pbnRl cnZhbCAvIDIpKSB7CisrCQkJaWYocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKSAKKysJCQkJcC0+ cHJpbyAtLTsKKysJCQllbHNlIAorKwkJCQlwLT5wcmVlbXB0ID0gMDsKKysJCQlpZihwLT5wcmlv IDwgTk9STUFMX1BSSU8pCisrCQkJCXAtPnByaW8gPSBOT1JNQUxfUFJJTzsKKysJCQlpZihwLT5w cmlvIDw9IDApIAorKwkJCQlwLT5wcmlvID0gMDsKKysJCX0KKysJCWdvdG8gb3V0OworKwl9Cisr CWdldF90aW1lX3NsaWNlKHApOworK291dDoKKysJcmV0dXJuOwogK30KICsKLStzdGF0aWMgaW5s aW5lIHU2NCB0YXNrX2RlYWRsaW5lX2RpZmYoc3RydWN0IHRhc2tfc3RydWN0ICpwKQorKyNkZWZp bmUgQklUT1BfV09SRChucikJCSgobnIpIC8gQklUU19QRVJfTE9ORykKKysKKysKKysvKgorKyAq IOacgOS9juS9jeafpeaJvu+8jOafpeaJvuacgOmrmOS8mOWFiOe6p+W8gOWni+OAggorKyAqIEZp bmQgdGhlIGxvd2VzdCBiaXQgc2V0IGluIHRoZSBiaXRtYXAuV2Ugd291bGQgZmluZCB0aGUgaGln aGVzdCBwcmlvcml0eSBmaXJzdC8KKysgKi8KKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcK KytnZXRfcHJpb19iaXQodW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBvZmZzZXQp CiArewotKwlyZXR1cm4gcHJpb19kZWFkbGluZV9kaWZmKFRBU0tfVVNFUl9QUklPKHApKTsKKysJ dW5zaWduZWQgbG9uZyAqZnJvbSA9IGFkZHIgKyAob2Zmc2V0IC8gQklUU19QRVJfTE9ORyk7Cisr CXVuc2lnbmVkIGxvbmcgKmxpbWl0ID0gYWRkciArIFBSSU9fTElNSVQgLyBCSVRTX1BFUl9MT05H OworKwlpbnQgaSA9IG9mZnNldCAlIEJJVFNfUEVSX0xPTkc7CisrCQorKwlpZiAob2Zmc2V0ID49 ICBQUklPX0xJTUlUKQorKwkJcmV0dXJuIFBSSU9fTElNSVQ7CisrCisrCWZvcig7ZnJvbSAhPSAo bGltaXQpO2Zyb20rKykgeworKwkJZm9yKDtpIDwgQklUU19QRVJfTE9ORztpKyssIG9mZnNldCsr KSB7CisrCQkJaWYoKCgqZnJvbSA+PiBpKSAmIDB4MSkpIHsKKysJCQkJZ290byBvdXQ7CisrCQkJ fQorKwkJfQorKwkJCisrCQkvKgorKwkJICogIFRoaXMgY2FuIG1ha2Ugc3VyZSB0byBnZW5lcmF0 ZSB0aGUgYmVzdCBtYWNoaW5lIGNvZGUuCisrCQkgKi8KKysJCWkgPSAwOworKwl9Cisrb3V0Ogor KwlyZXR1cm4gb2Zmc2V0OwogK30KICsKLStzdGF0aWMgaW5saW5lIHU2NCBzdGF0aWNfZGVhZGxp bmVfZGlmZihpbnQgc3RhdGljX3ByaW8pCisrLyoKKysgKiBUaGUgY3VycmVudGx5IHJ1bm5pbmcg dGFzaydzIGluZm9ybWF0aW9uIGlzIGFsbCBzdG9yZWQgaW4gcnEgbG9jYWwgZGF0YQorKyAqIHdo aWNoIGlzIG9ubHkgbW9kaWZpZWQgYnkgdGhlIGxvY2FsIENQVSwgdGhlcmVieSBhbGxvd2luZyB0 aGUgZGF0YSB0byBiZQorKyAqIGNoYW5nZWQgd2l0aG91dCBncmFiYmluZyB0aGUgZ3JxIGxvY2su CisrICovCisrc3RhdGljIGlubGluZSB2b2lkIHNldF9ycV90YXNrKHN0cnVjdCBycSAqcnEsIHN0 cnVjdCB0YXNrX3N0cnVjdCAqcCkKICt7Ci0rCXJldHVybiBwcmlvX2RlYWRsaW5lX2RpZmYoVVNF Ul9QUklPKHN0YXRpY19wcmlvKSk7CisrCXJxLT5ycV9sYXN0X3JhbiA9IHAtPmxhc3RfcmFuID0g cnEtPmNsb2NrOworKwlycS0+cnFfcG9saWN5ID0gcC0+cG9saWN5OworKwlycS0+cnFfcHJpbyA9 IHAtPnByaW87CisrCWlmIChwICE9IHJxLT5pZGxlKQorKwkJcnEtPnJxX3J1bm5pbmcgPSB0cnVl OworKwllbHNlCisrCQlycS0+cnFfcnVubmluZyA9IGZhbHNlOwogK30KICsKLStzdGF0aWMgaW5s aW5lIGludCBsb25nZXN0X2RlYWRsaW5lX2RpZmYodm9pZCkKKytzdGF0aWMgdm9pZCByZXNldF9y cV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKICt7Ci0rCXJldHVy biBwcmlvX2RlYWRsaW5lX2RpZmYoMzkpOworKwlycS0+cnFfcG9saWN5ID0gcC0+cG9saWN5Owor KwlycS0+cnFfcHJpbyA9IHAtPnByaW87CiArfQogKwotK3N0YXRpYyBpbmxpbmUgaW50IG1zX2xv bmdlc3RfZGVhZGxpbmVfZGlmZih2b2lkKQorK3N0YXRpYyBpbmxpbmUgdm9pZCBvcGVyYXRlX2Js a19uZWVkc19mbHVzaF9wbHVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKICt7Ci0rCXJldHVybiBO U19UT19NUyhsb25nZXN0X2RlYWRsaW5lX2RpZmYoKSk7CisrCWdycV91bmxvY2tfaXJxKCk7Cisr CXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKysJYmxrX3NjaGVkdWxlX2ZsdXNoX3BsdWco cCk7CiArfQogKwotKy8qCi0rICogVGhlIHRpbWVfc2xpY2UgaXMgb25seSByZWZpbGxlZCB3aGVu IGl0IGlzIGVtcHR5IGFuZCB0aGF0IGlzIHdoZW4gd2Ugc2V0IGEKLSsgKiBuZXcgZGVhZGxpbmUu Ci0rICovCi0rc3RhdGljIHZvaWQgdGltZV9zbGljZV9leHBpcmVkKHN0cnVjdCB0YXNrX3N0cnVj dCAqcCkKKytzdGF0aWMgaW5saW5lIHZvaWQgdGFza19zd2l0Y2goc3RydWN0IHJxICpycSwgc3Ry dWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiArewotKwlw LT50aW1lX3NsaWNlID0gdGltZXNsaWNlKCk7Ci0rCXAtPmRlYWRsaW5lID0gZ3JxLm5pZmZpZXMg KyB0YXNrX2RlYWRsaW5lX2RpZmYocCk7CisrCS8qCisrCSAqIERvbid0IHN0aWNrIHRhc2tzIHdo ZW4gYSByZWFsIHRpbWUgdGFzayBpcyBnb2luZyB0byBydW4gYXMKKysJICogdGhleSBtYXkgbGl0 ZXJhbGx5IGdldCBzdHVjay4KKysJICovCisrCWlmIChydF90YXNrKG5leHQpKQorKwkJdW5zdGlj a190YXNrKHJxLCBwcmV2KTsKKysJc2V0X3JxX3Rhc2socnEsIG5leHQpOworKwlncnEubnJfc3dp dGNoZXMrKzsKKysJcHJldi0+b25fY3B1ID0gZmFsc2U7CisrCW5leHQtPm9uX2NwdSA9IHRydWU7 CisrCXJxLT5jdXJyID0gbmV4dDsKKysKKysJLyoKKysJICogVGhlIGNvbnRleHQgc3dpdGNoIGhh dmUgZmxpcHBlZCB0aGUgc3RhY2sgZnJvbSB1bmRlciB1cworKwkgKiBhbmQgcmVzdG9yZWQgdGhl IGxvY2FsIHZhcmlhYmxlcyB3aGljaCB3ZXJlIHNhdmVkIHdoZW4KKysJICogdGhpcyB0YXNrIGNh bGxlZCBzY2hlZHVsZSgpIGluIHRoZSBwYXN0LiBwcmV2ID09IGN1cnJlbnQKKysJICogaXMgc3Rp bGwgY29ycmVjdCwgYnV0IGl0IGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIGNwdS9ycS4KKysJICov CisrCWNvbnRleHRfc3dpdGNoKHJxLCBwcmV2LCBuZXh0KTsgLyogdW5sb2NrcyB0aGUgZ3JxICov CiArfQogKwotKy8qCi0rICogVGltZXNsaWNlcyBiZWxvdyBSRVNDSEVEX1VTIGFyZSBjb25zaWRl cmVkIGFzIGdvb2QgYXMgZXhwaXJlZCBhcyB0aGVyZSdzIG5vCi0rICogcG9pbnQgcmVzY2hlZHVs aW5nIHdoZW4gdGhlcmUncyBzbyBsaXR0bGUgdGltZSBsZWZ0LiBTQ0hFRF9CQVRDSCB0YXNrcwot KyAqIGhhdmUgYmVlbiBmbGFnZ2VkIGJlIG5vdCBsYXRlbmN5IHNlbnNpdGl2ZSBhbmQgbGlrZWx5 IHRvIGJlIGZ1bGx5IENQVQotKyAqIGJvdW5kIHNvIGV2ZXJ5IHRpbWUgdGhleSdyZSByZXNjaGVk dWxlZCB0aGV5IGhhdmUgdGhlaXIgdGltZV9zbGljZQotKyAqIHJlZmlsbGVkLCBidXQgZ2V0IGEg bmV3IGxhdGVyIGRlYWRsaW5lIHRvIGhhdmUgbGl0dGxlIGVmZmVjdCBvbgotKyAqIFNDSEVEX05P Uk1BTCB0YXNrcy4KICsKKysvKgorKyAqIE1vdmUgYSB0YXNrIG9mZiB0aGUgZ2xvYmFsIHF1ZXVl IGFuZCB0YWtlIGl0IHRvIGEgY3B1IGZvciBpdCB3aWxsCisrICogYmVjb21lIHRoZSBydW5uaW5n IHRhc2suCiArICovCi0rc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2RlYWRsaW5lKHN0cnVjdCB0 YXNrX3N0cnVjdCAqcCkKKytzdGF0aWMgaW5saW5lIHZvaWQgdGFrZV90YXNrKGludCBjcHUsIHN0 cnVjdCB0YXNrX3N0cnVjdCAqcCkKICt7Ci0rCWlmIChwLT50aW1lX3NsaWNlIDwgUkVTQ0hFRF9V UyB8fCBiYXRjaF90YXNrKHApKQotKwkJdGltZV9zbGljZV9leHBpcmVkKHApOworKwlzZXRfdGFz a19jcHUocCwgY3B1KTsKKysJZGVxdWV1ZV90YXNrKHApOworKwljbGVhcl9zdGlja3kocCk7Cisr CWRlY19xbnIoKTsKICt9CiArCi0rI2RlZmluZSBCSVRPUF9XT1JEKG5yKQkJKChucikgLyBCSVRT X1BFUl9MT05HKQotKwogKy8qCi0rICogU2NoZWR1bGVyIHF1ZXVlIGJpdG1hcCBzcGVjaWZpYyBm aW5kIG5leHQgYml0LgorKyAqIFB1dCB0aGUgZGVzY2hlZHVsaW5nIHRhc2sgYmFjayB0byBncnEu CiArICovCi0rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi0rbmV4dF9zY2hlZF9iaXQoY29u c3QgdW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCisrc3RhdGljIGlu bGluZSB2b2lkIHB1dF9wcmV2X3Rhc2soc3RydWN0IHJxICpycSwgaW50IGNwdSwgc3RydWN0IHRh c2tfc3RydWN0ICpwLCBib29sIGRlYWN0aXZhdGUpCiArewotKwljb25zdCB1bnNpZ25lZCBsb25n ICpwOwotKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKLSsJdW5zaWduZWQgbG9uZyBzaXplOwotKwl1 bnNpZ25lZCBsb25nIHRtcDsKLSsKLSsJc2l6ZSA9IFBSSU9fTElNSVQ7Ci0rCWlmIChvZmZzZXQg Pj0gc2l6ZSkKLSsJCXJldHVybiBzaXplOwotKwotKwlwID0gYWRkciArIEJJVE9QX1dPUkQob2Zm c2V0KTsKLSsJcmVzdWx0ID0gb2Zmc2V0ICYgfihCSVRTX1BFUl9MT05HLTEpOwotKwlzaXplIC09 IHJlc3VsdDsKLSsJb2Zmc2V0ICU9IEJJVFNfUEVSX0xPTkc7Ci0rCWlmIChvZmZzZXQpIHsKLSsJ CXRtcCA9ICoocCsrKTsKLSsJCXRtcCAmPSAofjBVTCA8PCBvZmZzZXQpOwotKwkJaWYgKHNpemUg PCBCSVRTX1BFUl9MT05HKQotKwkJCWdvdG8gZm91bmRfZmlyc3Q7Ci0rCQlpZiAodG1wKQotKwkJ CWdvdG8gZm91bmRfbWlkZGxlOwotKwkJc2l6ZSAtPSBCSVRTX1BFUl9MT05HOwotKwkJcmVzdWx0 ICs9IEJJVFNfUEVSX0xPTkc7CisrCWlmKGRlYWN0aXZhdGUpCisrCQlkZWFjdGl2YXRlX3Rhc2so cCk7CisrCWVsc2UgeworKwkJaW5jX3FucigpOworKwkJZW5xdWV1ZV90YXNrKHApOwogKwl9Ci0r CXdoaWxlIChzaXplICYgfihCSVRTX1BFUl9MT05HLTEpKSB7Ci0rCQlpZiAoKHRtcCA9ICoocCsr KSkpCi0rCQkJZ290byBmb3VuZF9taWRkbGU7Ci0rCQlyZXN1bHQgKz0gQklUU19QRVJfTE9ORzsK LSsJCXNpemUgLT0gQklUU19QRVJfTE9ORzsKLSsJfQotKwlpZiAoIXNpemUpCi0rCQlyZXR1cm4g cmVzdWx0OwotKwl0bXAgPSAqcDsKLSsKLStmb3VuZF9maXJzdDoKLSsJdG1wICY9ICh+MFVMID4+ IChCSVRTX1BFUl9MT05HIC0gc2l6ZSkpOwotKwlpZiAodG1wID09IDBVTCkJCS8qIEFyZSBhbnkg Yml0cyBzZXQ/ICovCi0rCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsJLyogTm9wZS4gKi8KLStmb3Vu ZF9taWRkbGU6Ci0rCXJldHVybiByZXN1bHQgKyBfX2Zmcyh0bXApOwogK30KICsKICsvKgotKyAq IE8obikgbG9va3VwIG9mIGFsbCB0YXNrcyBpbiB0aGUgZ2xvYmFsIHJ1bnF1ZXVlLiBUaGUgcmVh bCBicmFpbmZ1Y2sKLSsgKiBvZiBsb2NrIGNvbnRlbnRpb24gYW5kIE8obikuIEl0J3Mgbm90IHJl YWxseSBPKG4pIGFzIG9ubHkgdGhlIHF1ZXVlZCwKLSsgKiBidXQgbm90IHJ1bm5pbmcgdGFza3Mg YXJlIHNjYW5uZWQsIGFuZCBpcyBPKG4pIHF1ZXVlZCBpbiB0aGUgd29yc3QgY2FzZQotKyAqIHNj ZW5hcmlvIG9ubHkgYmVjYXVzZSB0aGUgcmlnaHQgdGFzayBjYW4gYmUgZm91bmQgYmVmb3JlIHNj YW5uaW5nIGFsbCBvZgotKyAqIHRoZW0uCi0rICogVGFza3MgYXJlIHNlbGVjdGVkIGluIHRoaXMg b3JkZXI6Ci0rICogUmVhbCB0aW1lIHRhc2tzIGFyZSBzZWxlY3RlZCBwdXJlbHkgYnkgdGhlaXIg c3RhdGljIHByaW9yaXR5IGFuZCBpbiB0aGUKLSsgKiBvcmRlciB0aGV5IHdlcmUgcXVldWVkLCBz byB0aGUgbG93ZXN0IHZhbHVlIGlkeCwgYW5kIHRoZSBmaXJzdCBxdWV1ZWQgdGFzawotKyAqIG9m IHRoYXQgcHJpb3JpdHkgdmFsdWUgaXMgY2hvc2VuLgotKyAqIElmIG5vIHJlYWwgdGltZSB0YXNr cyBhcmUgZm91bmQsIHRoZSBTQ0hFRF9JU08gcHJpb3JpdHkgaXMgY2hlY2tlZCwgYW5kCi0rICog YWxsIFNDSEVEX0lTTyB0YXNrcyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IHZhbHVlLCBzbyB0aGV5 J3JlIHNlbGVjdGVkIGJ5Ci0rICogdGhlIGVhcmxpZXN0IGRlYWRsaW5lIHZhbHVlLgotKyAqIElm IG5vIFNDSEVEX0lTTyB0YXNrcyBhcmUgZm91bmQsIFNDSEVEX05PUk1BTCB0YXNrcyBhcmUgc2Vs ZWN0ZWQgYnkgdGhlCi0rICogZWFybGllc3QgZGVhZGxpbmUuCi0rICogRmluYWxseSBpZiBubyBT Q0hFRF9OT1JNQUwgdGFza3MgYXJlIGZvdW5kLCBTQ0hFRF9JRExFUFJJTyB0YXNrcyBhcmUKLSsg KiBzZWxlY3RlZCBieSB0aGUgZWFybGllc3QgZGVhZGxpbmUuCisrICogVGFzayBwaWNraW5nIGZv ciBuZXh0IHRpbWUgdG8gcnVuLgogKyAqLwogK3N0YXRpYyBpbmxpbmUgc3RydWN0Ci0rdGFza19z dHJ1Y3QgKmVhcmxpZXN0X2RlYWRsaW5lX3Rhc2soc3RydWN0IHJxICpycSwgaW50IGNwdSwgc3Ry dWN0IHRhc2tfc3RydWN0ICppZGxlKQorK3Rhc2tfc3RydWN0ICpnZXRfcnVubmFibGVfdGFzayhz dHJ1Y3QgcnEgKnJxLCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCiArewogKwlz dHJ1Y3QgdGFza19zdHJ1Y3QgKmVkdCA9IE5VTEw7CiArCXVuc2lnbmVkIGxvbmcgaWR4ID0gLTE7 CkBAIC00MTM0LDU5ICszNTMxLDE4IEBACiArCWRvIHsKICsJCXN0cnVjdCBsaXN0X2hlYWQgKnF1 ZXVlOwogKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwotKwkJdTY0IGVhcmxpZXN0X2RlYWRsaW5l OwogKwotKwkJaWR4ID0gbmV4dF9zY2hlZF9iaXQoZ3JxLnByaW9fYml0bWFwLCArK2lkeCk7Cisr CQlpZHggPSBnZXRfcHJpb19iaXQoZ3JxLnByaW9fYml0bWFwLCArK2lkeCk7CiArCQlpZiAoaWR4 ID49IFBSSU9fTElNSVQpCiArCQkJcmV0dXJuIGlkbGU7CiArCQlxdWV1ZSA9IGdycS5xdWV1ZSAr IGlkeDsKICsKLSsJCWlmIChpZHggPCBNQVhfUlRfUFJJTykgewotKwkJCS8qIFdlIGZvdW5kIGFu IHJ0IHRhc2sgKi8KLSsJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHF1ZXVlLCBydW5fbGlzdCkg ewotKwkJCQkvKiBNYWtlIHN1cmUgY3B1IGFmZmluaXR5IGlzIG9rICovCi0rCQkJCWlmIChuZWVk c19vdGhlcl9jcHUocCwgY3B1KSkKLSsJCQkJCWNvbnRpbnVlOwotKwkJCQllZHQgPSBwOwotKwkJ CQlnb3RvIG91dF90YWtlOwotKwkJCX0KLSsJCQkvKgotKwkJCSAqIE5vbmUgb2YgdGhlIFJUIHRh c2tzIGF0IHRoaXMgcHJpb3JpdHkgY2FuIHJ1biBvbgotKwkJCSAqIHRoaXMgY3B1Ci0rCQkJICov Ci0rCQkJY29udGludWU7Ci0rCQl9Ci0rCi0rCQkvKgotKwkJICogTm8gcnQgdGFza3MuIEZpbmQg dGhlIGVhcmxpZXN0IGRlYWRsaW5lIHRhc2suIE5vdyB3ZSdyZSBpbgotKwkJICogTyhuKSB0ZXJy aXRvcnkuCi0rCQkgKi8KLSsJCWVhcmxpZXN0X2RlYWRsaW5lID0gfjBVTEw7CiArCQlsaXN0X2Zv cl9lYWNoX2VudHJ5KHAsIHF1ZXVlLCBydW5fbGlzdCkgewotKwkJCXU2NCBkbDsKLSsKICsJCQkv KiBNYWtlIHN1cmUgY3B1IGFmZmluaXR5IGlzIG9rICovCiArCQkJaWYgKG5lZWRzX290aGVyX2Nw dShwLCBjcHUpKQogKwkJCQljb250aW51ZTsKLSsKLSsJCQkvKgotKwkJCSAqIFNvZnQgYWZmaW5p dHkgaGFwcGVucyBoZXJlIGJ5IG5vdCBzY2hlZHVsaW5nIGEgdGFzawotKwkJCSAqIHdpdGggaXRz IHN0aWNreSBmbGFnIHNldCB0aGF0IHJhbiBvbiBhIGRpZmZlcmVudCBDUFUKLSsJCQkgKiBsYXN0 IHdoZW4gdGhlIENQVSBpcyBzY2FsaW5nLCBvciBieSBncmVhdGx5IGJpYXNpbmcKLSsJCQkgKiBh Z2FpbnN0IGl0cyBkZWFkbGluZSB3aGVuIG5vdCwgYmFzZWQgb24gY3B1IGNhY2hlCi0rCQkJICog bG9jYWxpdHkuCi0rCQkJICovCi0rCQkJaWYgKHRhc2tfc3RpY2t5KHApICYmIHRhc2tfcnEocCkg IT0gcnEpIHsKLSsJCQkJaWYgKHNjYWxpbmdfcnEocnEpKQotKwkJCQkJY29udGludWU7Ci0rCQkJ CWRsID0gcC0+ZGVhZGxpbmUgPDwgbG9jYWxpdHlfZGlmZihwLCBycSk7Ci0rCQkJfSBlbHNlCi0r CQkJCWRsID0gcC0+ZGVhZGxpbmU7Ci0rCi0rCQkJaWYgKGRlYWRsaW5lX2JlZm9yZShkbCwgZWFy bGllc3RfZGVhZGxpbmUpKSB7Ci0rCQkJCWVhcmxpZXN0X2RlYWRsaW5lID0gZGw7Ci0rCQkJCWVk dCA9IHA7Ci0rCQkJfQorKwkJCWVkdCA9IHA7CisrCQkJZ290byBvdXRfdGFrZTsKICsJCX0KICsJ fSB3aGlsZSAoIWVkdCk7CiArCkBAIC00MTk1LDE1MCArMzU1MSw3NyBAQAogKwlyZXR1cm4gZWR0 OwogK30KICsKKysjZGVmaW5lIFNDSEVEX1JFU0NIRUQgLTEKICsKICsvKgotKyAqIFByaW50IHNj aGVkdWxpbmcgd2hpbGUgYXRvbWljIGJ1ZzoKLSsgKi8KLStzdGF0aWMgbm9pbmxpbmUgdm9pZCBf X3NjaGVkdWxlX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCi0rewotKwlzdHJ1Y3QgcHRf cmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwotKwotKwlwcmludGsoS0VSTl9FUlIgIkJVRzog c2NoZWR1bGluZyB3aGlsZSBhdG9taWM6ICVzLyVkLzB4JTA4eFxuIiwKLSsJCXByZXYtPmNvbW0s IHByZXYtPnBpZCwgcHJlZW1wdF9jb3VudCgpKTsKLSsKLSsJZGVidWdfc2hvd19oZWxkX2xvY2tz KHByZXYpOwotKwlwcmludF9tb2R1bGVzKCk7Ci0rCWlmIChpcnFzX2Rpc2FibGVkKCkpCi0rCQlw cmludF9pcnF0cmFjZV9ldmVudHMocHJldik7Ci0rCi0rCWlmIChyZWdzKQotKwkJc2hvd19yZWdz KHJlZ3MpOwotKwllbHNlCi0rCQlkdW1wX3N0YWNrKCk7Ci0rfQotKwotKy8qCi0rICogVmFyaW91 cyBzY2hlZHVsZSgpLXRpbWUgZGVidWdnaW5nIGNoZWNrcyBhbmQgc3RhdGlzdGljczoKLSsgKi8K LStzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWR1bGVfZGVidWcoc3RydWN0IHRhc2tfc3RydWN0ICpw cmV2KQotK3sKLSsJLyoKLSsJICogVGVzdCBpZiB3ZSBhcmUgYXRvbWljLiBTaW5jZSBkb19leGl0 KCkgbmVlZHMgdG8gY2FsbCBpbnRvCi0rCSAqIHNjaGVkdWxlKCkgYXRvbWljYWxseSwgd2UgaWdu b3JlIHRoYXQgcGF0aCBmb3Igbm93LgotKwkgKiBPdGhlcndpc2UsIHdoaW5lIGlmIHdlIGFyZSBz Y2hlZHVsaW5nIHdoZW4gd2Ugc2hvdWxkIG5vdCBiZS4KLSsJICovCi0rCWlmICh1bmxpa2VseShp bl9hdG9taWNfcHJlZW1wdF9vZmYoKSAmJiAhcHJldi0+ZXhpdF9zdGF0ZSkpCi0rCQlfX3NjaGVk dWxlX2J1ZyhwcmV2KTsKLSsJcmN1X3NsZWVwX2NoZWNrKCk7Ci0rCi0rCXByb2ZpbGVfaGl0KFND SEVEX1BST0ZJTElORywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLSsKLSsJc2NoZWRz dGF0X2luYyh0aGlzX3JxKCksIHNjaGVkX2NvdW50KTsKLSt9Ci0rCi0rLyoKLSsgKiBUaGUgY3Vy cmVudGx5IHJ1bm5pbmcgdGFzaydzIGluZm9ybWF0aW9uIGlzIGFsbCBzdG9yZWQgaW4gcnEgbG9j YWwgZGF0YQotKyAqIHdoaWNoIGlzIG9ubHkgbW9kaWZpZWQgYnkgdGhlIGxvY2FsIENQVSwgdGhl cmVieSBhbGxvd2luZyB0aGUgZGF0YSB0byBiZQotKyAqIGNoYW5nZWQgd2l0aG91dCBncmFiYmlu ZyB0aGUgZ3JxIGxvY2suCi0rICovCi0rc3RhdGljIGlubGluZSB2b2lkIHNldF9ycV90YXNrKHN0 cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLSt7Ci0rCXJxLT5ycV90aW1lX3Ns aWNlID0gcC0+dGltZV9zbGljZTsKLSsJcnEtPnJxX2RlYWRsaW5lID0gcC0+ZGVhZGxpbmU7Ci0r CXJxLT5ycV9sYXN0X3JhbiA9IHAtPmxhc3RfcmFuID0gcnEtPmNsb2NrOwotKwlycS0+cnFfcG9s aWN5ID0gcC0+cG9saWN5OwotKwlycS0+cnFfcHJpbyA9IHAtPnByaW87Ci0rCWlmIChwICE9IHJx LT5pZGxlKQotKwkJcnEtPnJxX3J1bm5pbmcgPSB0cnVlOwotKwllbHNlCi0rCQlycS0+cnFfcnVu bmluZyA9IGZhbHNlOwotK30KLSsKLStzdGF0aWMgdm9pZCByZXNldF9ycV90YXNrKHN0cnVjdCBy cSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLSt7Ci0rCXJxLT5ycV9wb2xpY3kgPSBwLT5w b2xpY3k7Ci0rCXJxLT5ycV9wcmlvID0gcC0+cHJpbzsKLSt9Ci0rCi0rLyoKICsgKiBzY2hlZHVs ZSgpIGlzIHRoZSBtYWluIHNjaGVkdWxlciBmdW5jdGlvbi4KICsgKi8KLSthc21saW5rYWdlIHZv aWQgX19zY2hlZCBzY2hlZHVsZSh2b2lkKQorK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NsZWVw X29uX3dxKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKICt7Ci0rCXN0cnVjdCB0YXNr X3N0cnVjdCAqcHJldiwgKm5leHQsICppZGxlOwotKwl1bnNpZ25lZCBsb25nICpzd2l0Y2hfY291 bnQ7Ci0rCWJvb2wgZGVhY3RpdmF0ZTsKLSsJc3RydWN0IHJxICpycTsKLSsJaW50IGNwdTsKLSsK LStuZWVkX3Jlc2NoZWQ6Ci0rCXByZWVtcHRfZGlzYWJsZSgpOwotKwotKwljcHUgPSBzbXBfcHJv Y2Vzc29yX2lkKCk7Ci0rCXJxID0gY3B1X3JxKGNwdSk7Ci0rCXJjdV9ub3RlX2NvbnRleHRfc3dp dGNoKGNwdSk7Ci0rCXByZXYgPSBycS0+Y3VycjsKLSsKLSsJZGVhY3RpdmF0ZSA9IGZhbHNlOwot KwlzY2hlZHVsZV9kZWJ1ZyhwcmV2KTsKLSsKLSsJZ3JxX2xvY2tfaXJxKCk7Ci0rCi0rCXN3aXRj aF9jb3VudCA9ICZwcmV2LT5uaXZjc3c7Ci0rCWlmIChwcmV2LT5zdGF0ZSAmJiAhKHByZWVtcHRf Y291bnQoKSAmIFBSRUVNUFRfQUNUSVZFKSkgewotKwkJaWYgKHVubGlrZWx5KHNpZ25hbF9wZW5k aW5nX3N0YXRlKHByZXYtPnN0YXRlLCBwcmV2KSkpIHsKLSsJCQlwcmV2LT5zdGF0ZSA9IFRBU0tf UlVOTklORzsKKysJaW50IGRlYWN0aXZhdGU7CisrCWRlYWN0aXZhdGUgPSAwOworKwlpZiAocC0+ c3RhdGUgJiYgIShwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX0FDVElWRSkpIHsKKysJCWlmICh1 bmxpa2VseShzaWduYWxfcGVuZGluZ19zdGF0ZShwLT5zdGF0ZSwgcCkpKSB7CisrCQkJcC0+c3Rh dGUgPSBUQVNLX1JVTk5JTkc7CiArCQl9IGVsc2UgewotKwkJCWRlYWN0aXZhdGUgPSB0cnVlOwor KwkJCWRlYWN0aXZhdGUgPSAxOwogKwkJCS8qCiArCQkJICogSWYgYSB3b3JrZXIgaXMgZ29pbmcg dG8gc2xlZXAsIG5vdGlmeSBhbmQKICsJCQkgKiBhc2sgd29ya3F1ZXVlIHdoZXRoZXIgaXQgd2Fu dHMgdG8gd2FrZSB1cCBhCiArCQkJICogdGFzayB0byBtYWludGFpbiBjb25jdXJyZW5jeS4gIElm IHNvLCB3YWtlCiArCQkJICogdXAgdGhlIHRhc2suCiArCQkJICovCi0rCQkJaWYgKHByZXYtPmZs YWdzICYgUEZfV1FfV09SS0VSKSB7CisrCQkJaWYgKHAtPmZsYWdzICYgUEZfV1FfV09SS0VSKSB7 CiArCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdG9fd2FrZXVwOwogKwotKwkJCQl0b193YWtldXAg PSB3cV93b3JrZXJfc2xlZXBpbmcocHJldiwgY3B1KTsKKysJCQkJdG9fd2FrZXVwID0gd3Ffd29y a2VyX3NsZWVwaW5nKHAsIGNwdSk7CiArCQkJCWlmICh0b193YWtldXApIHsKICsJCQkJCS8qIFRo aXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGRvZXMgKi8KLSsJCQkJCWlmICh1bmxpa2VseSh0b193 YWtldXAgPT0gcHJldikpCi0rCQkJCQkJZGVhY3RpdmF0ZSA9IGZhbHNlOworKwkJCQkJaWYgKHVu bGlrZWx5KHRvX3dha2V1cCA9PSBwKSkKKysJCQkJCQlkZWFjdGl2YXRlID0gMDsKICsJCQkJCWVs c2UKICsJCQkJCQl0cnlfdG9fd2FrZV91cF9sb2NhbCh0b193YWtldXApOwogKwkJCQl9CiArCQkJ fQorKworKwkJCS8qCisrCQkJICogSWYgd2UgYXJlIGdvaW5nIHRvIHNsZWVwIGFuZCB3ZSBoYXZl IHBsdWdnZWQgSU8gcXVldWVkLCBtYWtlCisrCQkJICogc3VyZSB0byBzdWJtaXQgaXQgdG8gYXZv aWQgZGVhZGxvY2tzLgorKwkJCSAqLworKwkJCWlmICh1bmxpa2VseShkZWFjdGl2YXRlICYmIGJs a19uZWVkc19mbHVzaF9wbHVnKHApKSkgeworKwkJCQlvcGVyYXRlX2Jsa19uZWVkc19mbHVzaF9w bHVnKHApOworKwkJCQlkZWFjdGl2YXRlID0gU0NIRURfUkVTQ0hFRDsKKysJCQkJZ290byBvdXQ7 CisrCQkJfQogKwkJfQotKwkJc3dpdGNoX2NvdW50ID0gJnByZXYtPm52Y3N3OwogKwl9Cisrb3V0 OgorKwlyZXR1cm4gZGVhY3RpdmF0ZTsKKyt9CiArCi0rCS8qCi0rCSAqIElmIHdlIGFyZSBnb2lu ZyB0byBzbGVlcCBhbmQgd2UgaGF2ZSBwbHVnZ2VkIElPIHF1ZXVlZCwgbWFrZQotKwkgKiBzdXJl IHRvIHN1Ym1pdCBpdCB0byBhdm9pZCBkZWFkbG9ja3MuCi0rCSAqLwotKwlpZiAodW5saWtlbHko ZGVhY3RpdmF0ZSAmJiBibGtfbmVlZHNfZmx1c2hfcGx1ZyhwcmV2KSkpIHsKLSsJCWdycV91bmxv Y2tfaXJxKCk7Ci0rCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0rCQlibGtfc2NoZWR1 bGVfZmx1c2hfcGx1ZyhwcmV2KTsKLSsJCWdvdG8gbmVlZF9yZXNjaGVkOwotKwl9Cisrc3RhdGlj IGlubGluZSBpbnQgZG9fc2NoZWR1bGUodm9pZCkKKyt7CisrCXN0cnVjdCB0YXNrX3N0cnVjdCAq cHJldiwgKm5leHQsICppZGxlOworKwlzdHJ1Y3QgcnEgKnJxOworKwlpbnQgY3B1OworKwlpbnQg ZGVhY3RpdmF0ZTsKICsKLSsJdXBkYXRlX2Nsb2NrcyhycSk7Ci0rCXVwZGF0ZV9jcHVfY2xvY2so cnEsIHByZXYsIGZhbHNlKTsKLSsJaWYgKHJxLT5jbG9jayAtIHJxLT5sYXN0X3RpY2sgPiBIQUxG X0pJRkZZX05TKQotKwkJcnEtPmRpdGhlciA9IGZhbHNlOwotKwllbHNlCi0rCQlycS0+ZGl0aGVy ID0gdHJ1ZTsKKysJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworKwlycSA9IGNwdV9ycShjcHUp OworKwlyY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChjcHUpOworKwlwcmV2ID0gcnEtPmN1cnI7CiAr CisrCWdycV9sb2NrX2lycSgpOworKworKwlpZigoZGVhY3RpdmF0ZSA9IGNoZWNrX3NsZWVwX29u X3dxKGNwdSwgcHJldikpID09IFNDSEVEX1JFU0NIRUQpIHsKKysJCWdvdG8gb3V0OworKwl9Cisr CiArCWNsZWFyX3Rza19uZWVkX3Jlc2NoZWQocHJldik7CiArCiArCWlkbGUgPSBycS0+aWRsZTsK ICsJaWYgKGlkbGUgIT0gcHJldikgewotKwkJLyogVXBkYXRlIGFsbCB0aGUgaW5mb3JtYXRpb24g c3RvcmVkIG9uIHN0cnVjdCBycSAqLwotKwkJcHJldi0+dGltZV9zbGljZSA9IHJxLT5ycV90aW1l X3NsaWNlOwotKwkJcHJldi0+ZGVhZGxpbmUgPSBycS0+cnFfZGVhZGxpbmU7Ci0rCQljaGVja19k ZWFkbGluZShwcmV2KTsKLSsJCXByZXYtPmxhc3RfcmFuID0gcnEtPmNsb2NrOworKwkJY2hlY2tf dGltZXNsaWNlX2VuZChycSwgcHJldik7CiArCiArCQkvKiBUYXNrIGNoYW5nZWQgYWZmaW5pdHkg b2ZmIHRoaXMgQ1BVICovCiArCQlpZiAobmVlZHNfb3RoZXJfY3B1KHByZXYsIGNwdSkpCkBAIC00 MzQ2LDE4ICszNjI5LDE2IEBACiArCQllbHNlIGlmICghZGVhY3RpdmF0ZSkgewogKwkJCWlmICgh cXVldWVkX25vdHJ1bm5pbmcoKSkgewogKwkJCQkvKgotKwkJCQkqIFdlIG5vdyBrbm93IHByZXYg aXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBpcwotKwkJCQkqIGF3YWl0aW5nIENQVSBzbyB3ZSBjYW4g YnlwYXNzIHJlY2hlY2tpbmcgZm9yCi0rCQkJCSogdGhlIGVhcmxpZXN0IGRlYWRsaW5lIHRhc2sg YW5kIGp1c3QgcnVuIGl0Ci0rCQkJCSogYWdhaW4uCisrCQkJCSogUmVydW4gdGhlIHByZXYgdGFz ayBhZ2Fpbi4KICsJCQkJKi8KICsJCQkJc2V0X3JxX3Rhc2socnEsIHByZXYpOwogKwkJCQlncnFf dW5sb2NrX2lycSgpOwotKwkJCQlnb3RvIHJlcnVuX3ByZXZfdW5sb2NrZWQ7CisrCQkJCWdvdG8g b3V0OwogKwkJCX0gZWxzZQogKwkJCQlzd2FwX3N0aWNreShycSwgY3B1LCBwcmV2KTsKICsJCX0K LSsJCXJldHVybl90YXNrKHByZXYsIGRlYWN0aXZhdGUpOworKworKwkJcHV0X3ByZXZfdGFzayhy cSwgY3B1LCBwcmV2LCBkZWFjdGl2YXRlKTsKICsJfQogKwogKwlpZiAodW5saWtlbHkoIXF1ZXVl ZF9ub3RydW5uaW5nKCkpKSB7CkBAIC00MzY2LDQ4ICszNjQ3LDM2IEBACiArCQkgKiBzY2hlZHVs ZWQgYXMgYSBoaWdoIHByaW9yaXR5IHRhc2sgaW4gaXRzIG93biByaWdodC4KICsJCSAqLwogKwkJ bmV4dCA9IGlkbGU7Ci0rCQlzY2hlZHN0YXRfaW5jKHJxLCBzY2hlZF9nb2lkbGUpOwogKwkJc2V0 X2NwdWlkbGVfbWFwKGNwdSk7CiArCX0gZWxzZSB7Ci0rCQluZXh0ID0gZWFybGllc3RfZGVhZGxp bmVfdGFzayhycSwgY3B1LCBpZGxlKTsKLSsJCWlmIChsaWtlbHkobmV4dC0+cHJpbyAhPSBQUklP X0xJTUlUKSkKLSsJCQljbGVhcl9jcHVpZGxlX21hcChjcHUpOwotKwkJZWxzZQotKwkJCXNldF9j cHVpZGxlX21hcChjcHUpOworKwkJbmV4dCA9IGdldF9ydW5uYWJsZV90YXNrKHJxLCBjcHUsIGlk bGUpOwogKwl9CiArCiArCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewotKwkJLyoKLSsJCSAq IERvbid0IHN0aWNrIHRhc2tzIHdoZW4gYSByZWFsIHRpbWUgdGFzayBpcyBnb2luZyB0byBydW4g YXMKLSsJCSAqIHRoZXkgbWF5IGxpdGVyYWxseSBnZXQgc3R1Y2suCi0rCQkgKi8KLSsJCWlmIChy dF90YXNrKG5leHQpKQotKwkJCXVuc3RpY2tfdGFzayhycSwgcHJldik7Ci0rCQlzZXRfcnFfdGFz ayhycSwgbmV4dCk7CisrCQlwcmV2LT5udmNzdysrOwogKwkJZ3JxLm5yX3N3aXRjaGVzKys7Ci0r CQlwcmV2LT5vbl9jcHUgPSBmYWxzZTsKLSsJCW5leHQtPm9uX2NwdSA9IHRydWU7Ci0rCQlycS0+ Y3VyciA9IG5leHQ7Ci0rCQkrKypzd2l0Y2hfY291bnQ7CiArCi0rCQljb250ZXh0X3N3aXRjaChy cSwgcHJldiwgbmV4dCk7IC8qIHVubG9ja3MgdGhlIGdycSAqLwotKwkJLyoKLSsJCSAqIFRoZSBj b250ZXh0IHN3aXRjaCBoYXZlIGZsaXBwZWQgdGhlIHN0YWNrIGZyb20gdW5kZXIgdXMKLSsJCSAq IGFuZCByZXN0b3JlZCB0aGUgbG9jYWwgdmFyaWFibGVzIHdoaWNoIHdlcmUgc2F2ZWQgd2hlbgot KwkJICogdGhpcyB0YXNrIGNhbGxlZCBzY2hlZHVsZSgpIGluIHRoZSBwYXN0LiBwcmV2ID09IGN1 cnJlbnQKLSsJCSAqIGlzIHN0aWxsIGNvcnJlY3QsIGJ1dCBpdCBjYW4gYmUgbW92ZWQgdG8gYW5v dGhlciBjcHUvcnEuCi0rCQkgKi8KLSsJCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLSsJCXJx ID0gY3B1X3JxKGNwdSk7CisrCQl0YXNrX3N3aXRjaChycSwgcHJldiwgbmV4dCk7CiArCQlpZGxl ID0gcnEtPmlkbGU7CiArCX0gZWxzZQogKwkJZ3JxX3VubG9ja19pcnEoKTsKICsKLStyZXJ1bl9w cmV2X3VubG9ja2VkOgotKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0rCWlmICh1bmxp a2VseShuZWVkX3Jlc2NoZWQoKSkpCi0rCQlnb3RvIG5lZWRfcmVzY2hlZDsKKytvdXQ6CisrCXJl dHVybiBkZWFjdGl2YXRlOwogK30KKysKKythc21saW5rYWdlIHZvaWQgX19zY2hlZCBzY2hlZHVs ZSh2b2lkKQorK3sKKytyZXNjaGVkdWxlOgorKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisrCQkKKysJ CWlmKGRvX3NjaGVkdWxlKCkgPT0gU0NIRURfUkVTQ0hFRCkKKysJCQlnb3RvIHJlc2NoZWR1bGU7 CisrCQkKKysJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKysJCWlmKHVubGlrZWx5KG5l ZWRfcmVzY2hlZCgpKSkKKysJCQlnb3RvIHJlc2NoZWR1bGU7CisrfQogK0VYUE9SVF9TWU1CT0wo c2NoZWR1bGUpOwogKwogKyNpZmRlZiBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUgpAQCAtNDgy Niw3ICs0MDk1LDcgQEAKICsgKi8KICtsb25nIF9fc2NoZWQKICt3YWl0X2Zvcl9jb21wbGV0aW9u X2tpbGxhYmxlX3RpbWVvdXQoc3RydWN0IGNvbXBsZXRpb24gKngsCi0rCQkJCSAgICAgdW5zaWdu ZWQgbG9uZyB0aW1lb3V0KQorKwkJCQkJIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKICt7CiArCXJl dHVybiB3YWl0X2Zvcl9jb21tb24oeCwgdGltZW91dCwgVEFTS19LSUxMQUJMRSk7CiArfQpAQCAt NDkzNCw3ICs0MjAzLDcgQEAKICsgKiBAcHJpbzogcHJpbyB2YWx1ZSAoa2VybmVsLWludGVybmFs IGZvcm0pCiArICoKICsgKiBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlICdlZmZlY3RpdmUnIHBy aW9yaXR5IG9mIGEgdGFzay4gSXQgZG9lcwotKyAqIG5vdCB0b3VjaCAtPm5vcm1hbF9wcmlvIGxp a2UgX19zZXRzY2hlZHVsZXIoKS4KKysgKiBub3QgdG91Y2ggLT5wcmlvIGxpa2UgX19zZXRzY2hl ZHVsZXIoKS4KICsgKgogKyAqIFVzZWQgYnkgdGhlIHJ0X211dGV4IGNvZGUgdG8gaW1wbGVtZW50 IHByaW9yaXR5IGluaGVyaXRhbmNlIGxvZ2ljLgogKyAqLwpAQCAtNDk1MSwxMyArNDIyMCwxMCBA QAogKwl0cmFjZV9zY2hlZF9waV9zZXRwcmlvKHAsIHByaW8pOwogKwlvbGRwcmlvID0gcC0+cHJp bzsKICsJcXVldWVkID0gdGFza19xdWV1ZWQocCk7Ci0rCWlmIChxdWV1ZWQpCi0rCQlkZXF1ZXVl X3Rhc2socCk7CiArCXAtPnByaW8gPSBwcmlvOwogKwlpZiAodGFza19ydW5uaW5nKHApICYmIHBy aW8gPiBvbGRwcmlvKQogKwkJcmVzY2hlZF90YXNrKHApOwogKwlpZiAocXVldWVkKSB7Ci0rCQll bnF1ZXVlX3Rhc2socCk7CiArCQl0cnlfcHJlZW1wdChwLCBycSk7CiArCX0KICsKQEAgLTQ5NjYs MTUgKzQyMzIsNiBAQAogKwogKyNlbmRpZgogKwotKy8qCi0rICogQWRqdXN0IHRoZSBkZWFkbGlu ZSBmb3Igd2hlbiB0aGUgcHJpb3JpdHkgaXMgdG8gY2hhbmdlLCBiZWZvcmUgaXQncwotKyAqIGNo YW5nZWQuCi0rICovCi0rc3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9kZWFkbGluZShzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnAsIGludCBuZXdfcHJpbykKLSt7Ci0rCXAtPmRlYWRsaW5lICs9IHN0YXRp Y19kZWFkbGluZV9kaWZmKG5ld19wcmlvKSAtIHRhc2tfZGVhZGxpbmVfZGlmZihwKTsKLSt9Ci0r CiArdm9pZCBzZXRfdXNlcl9uaWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgbG9uZyBuaWNlKQog K3sKICsJaW50IHF1ZXVlZCwgbmV3X3N0YXRpYywgb2xkX3N0YXRpYzsKQEAgLTUwMDAsMTYgKzQy NTcsMTIgQEAKICsJCWdvdG8gb3V0X3VubG9jazsKICsJfQogKwlxdWV1ZWQgPSB0YXNrX3F1ZXVl ZChwKTsKLSsJaWYgKHF1ZXVlZCkKLSsJCWRlcXVldWVfdGFzayhwKTsKICsKLSsJYWRqdXN0X2Rl YWRsaW5lKHAsIG5ld19zdGF0aWMpOwogKwlvbGRfc3RhdGljID0gcC0+c3RhdGljX3ByaW87CiAr CXAtPnN0YXRpY19wcmlvID0gbmV3X3N0YXRpYzsKLSsJcC0+cHJpbyA9IGVmZmVjdGl2ZV9wcmlv KHApOworKwlwLT5wcmlvID0gcC0+c3RhdGljX3ByaW87CiArCiArCWlmIChxdWV1ZWQpIHsKLSsJ CWVucXVldWVfdGFzayhwKTsKICsJCWlmIChuZXdfc3RhdGljIDwgb2xkX3N0YXRpYykKICsJCQl0 cnlfcHJlZW1wdChwLCBycSk7CiArCX0gZWxzZSBpZiAodGFza19ydW5uaW5nKHApKSB7CkBAIC01 MDgzLDI2ICs0MzM2LDExIEBACiArICogQHA6IHRoZSB0YXNrIGluIHF1ZXN0aW9uLgogKyAqCiAr ICogVGhpcyBpcyB0aGUgcHJpb3JpdHkgdmFsdWUgYXMgc2VlbiBieSB1c2VycyBpbiAvcHJvYy4K LSsgKiBSVCB0YXNrcyBhcmUgb2Zmc2V0IGJ5IC0xMDAuIE5vcm1hbCB0YXNrcyBhcmUgY2VudGVy ZWQgYXJvdW5kIDEsIHZhbHVlIGdvZXMKLSsgKiBmcm9tIDAgKFNDSEVEX0lTTykgdXAgdG8gODIg KG5pY2UgKzE5IFNDSEVEX0lETEVQUklPKS4KKysgKiBSVCB0YXNrcyBhcmUgb2Zmc2V0IGJ5IC0x MDAuIE5vcm1hbCB0YXNrcyBhcmUgY2VudGVyZWQgYXJvdW5kIDEuCiArICovCiAraW50IHRhc2tf cHJpbyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiArewotKwlpbnQgZGVsdGEsIHByaW8g PSBwLT5wcmlvIC0gTUFYX1JUX1BSSU87Ci0rCi0rCS8qIHJ0IHRhc2tzIGFuZCBpc28gdGFza3Mg Ki8KLSsJaWYgKHByaW8gPD0gMCkKLSsJCWdvdG8gb3V0OwotKwotKwkvKiBDb252ZXJ0IHRvIG1z IHRvIGF2b2lkIG92ZXJmbG93cyAqLwotKwlkZWx0YSA9IE5TX1RPX01TKHAtPmRlYWRsaW5lIC0g Z3JxLm5pZmZpZXMpOwotKwlkZWx0YSA9IGRlbHRhICogNDAgLyBtc19sb25nZXN0X2RlYWRsaW5l X2RpZmYoKTsKLSsJaWYgKGRlbHRhID4gMCAmJiBkZWx0YSA8PSA4MCkKLSsJCXByaW8gKz0gZGVs dGE7Ci0rCWlmIChpZGxlcHJpb190YXNrKHApKQotKwkJcHJpbyArPSA0MDsKLStvdXQ6Ci0rCXJl dHVybiBwcmlvOworKwlyZXR1cm4gcC0+cHJpbzsKICt9CiArCiArLyoqCkBAIC01MTUxLDcgKzQz ODksNiBAQAogKwlwLT5wb2xpY3kgPSBwb2xpY3k7CiArCW9sZHJ0cHJpbyA9IHAtPnJ0X3ByaW9y aXR5OwogKwlwLT5ydF9wcmlvcml0eSA9IHByaW87Ci0rCXAtPm5vcm1hbF9wcmlvID0gbm9ybWFs X3ByaW8ocCk7CiArCW9sZHByaW8gPSBwLT5wcmlvOwogKwkvKiB3ZSBhcmUgaG9sZGluZyBwLT5w aV9sb2NrIGFscmVhZHkgKi8KICsJcC0+cHJpbyA9IHJ0X211dGV4X2dldHByaW8ocCk7CkBAIC01 MjAzLDEyICs0NDQwLDYgQEAKICsJCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmxmbGFncyk7CiAr CQlpZiAocmxpbV9ydHByaW8pCiArCQkJZ290byByZWNoZWNrOwotKwkJLyoKLSsJCSAqIElmIHRo ZSBjYWxsZXIgcmVxdWVzdGVkIGFuIFJUIHBvbGljeSB3aXRob3V0IGhhdmluZyB0aGUKLSsJCSAq IG5lY2Vzc2FyeSByaWdodHMsIHdlIGRvd25ncmFkZSB0aGUgcG9saWN5IHRvIFNDSEVEX0lTTy4K LSsJCSAqIFdlIGFsc28gc2V0IHRoZSBwYXJhbWV0ZXIgdG8gemVybyB0byBwYXNzIHRoZSBjaGVj a3MuCi0rCQkgKi8KLSsJCXBvbGljeSA9IFNDSEVEX0lTTzsKICsJCXBhcmFtID0gJnplcm9fcGFy YW07CiArCX0KICtyZWNoZWNrOgpAQCAtNTIzMCw4ICs0NDYxLDggQEAKICsJICogU0NIRURfQkFU Q0ggaXMgMC4KICsJICovCiArCWlmIChwYXJhbS0+c2NoZWRfcHJpb3JpdHkgPCAwIHx8Ci0rCSAg ICAocC0+bW0gJiYgcGFyYW0tPnNjaGVkX3ByaW9yaXR5ID4gTUFYX1VTRVJfUlRfUFJJTyAtIDEp IHx8Ci0rCSAgICAoIXAtPm1tICYmIHBhcmFtLT5zY2hlZF9wcmlvcml0eSA+IE1BWF9SVF9QUklP IC0gMSkpCisrCQkocC0+bW0gJiYgcGFyYW0tPnNjaGVkX3ByaW9yaXR5ID4gTUFYX1VTRVJfUlRf UFJJTyAtIDEpIHx8CisrCQkoIXAtPm1tICYmIHBhcmFtLT5zY2hlZF9wcmlvcml0eSA+IE1BWF9S VF9QUklPIC0gMSkpCiArCQlyZXR1cm4gLUVJTlZBTDsKICsJaWYgKGlzX3J0X3BvbGljeShwb2xp Y3kpICE9IChwYXJhbS0+c2NoZWRfcHJpb3JpdHkgIT0gMCkpCiArCQlyZXR1cm4gLUVJTlZBTDsK QEAgLTUyNTAsMjAgKzQ0ODEsMTAgQEAKICsKICsJCQkvKiBjYW4ndCBpbmNyZWFzZSBwcmlvcml0 eSAqLwogKwkJCWlmIChwYXJhbS0+c2NoZWRfcHJpb3JpdHkgPiBwLT5ydF9wcmlvcml0eSAmJgot KwkJCSAgICBwYXJhbS0+c2NoZWRfcHJpb3JpdHkgPiBybGltX3J0cHJpbykKKysJCQkJcGFyYW0t PnNjaGVkX3ByaW9yaXR5ID4gcmxpbV9ydHByaW8pCiArCQkJCXJldHVybiAtRVBFUk07CiArCQl9 IGVsc2UgewogKwkJCXN3aXRjaCAocC0+cG9saWN5KSB7Ci0rCQkJCS8qCi0rCQkJCSAqIENhbiBv bmx5IGRvd25ncmFkZSBwb2xpY2llcyBidXQgbm90IGJhY2sgdG8KLSsJCQkJICogU0NIRURfTk9S TUFMCi0rCQkJCSAqLwotKwkJCQljYXNlIFNDSEVEX0lTTzoKLSsJCQkJCWlmIChwb2xpY3kgPT0g U0NIRURfSVNPKQotKwkJCQkJCWdvdG8gb3V0OwotKwkJCQkJaWYgKHBvbGljeSA9PSBTQ0hFRF9O T1JNQUwpCi0rCQkJCQkJcmV0dXJuIC1FUEVSTTsKLSsJCQkJCWJyZWFrOwogKwkJCQljYXNlIFND SEVEX0JBVENIOgogKwkJCQkJaWYgKHBvbGljeSA9PSBTQ0hFRF9CQVRDSCkKICsJCQkJCQlnb3Rv IG91dDsKQEAgLTUzMzIsMTUgKzQ1NTMsMTEgQEAKICsJCXJhd19zcGluX3VubG9ja19pcnFyZXN0 b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CiArCQlnb3RvIHJlY2hlY2s7CiArCX0KLSsJdXBkYXRl X2Nsb2NrcyhycSk7CiArCXAtPnNjaGVkX3Jlc2V0X29uX2ZvcmsgPSByZXNldF9vbl9mb3JrOwog KwogKwlxdWV1ZWQgPSB0YXNrX3F1ZXVlZChwKTsKLSsJaWYgKHF1ZXVlZCkKLSsJCWRlcXVldWVf dGFzayhwKTsKICsJX19zZXRzY2hlZHVsZXIocCwgcnEsIHBvbGljeSwgcGFyYW0tPnNjaGVkX3By aW9yaXR5KTsKICsJaWYgKHF1ZXVlZCkgewotKwkJZW5xdWV1ZV90YXNrKHApOwogKwkJdHJ5X3By ZWVtcHQocCwgcnEpOwogKwl9CiArCV9fdGFza19ncnFfdW5sb2NrKCk7CkBAIC01MzYwLDcgKzQ1 NzcsNyBAQAogKyAqIE5PVEUgdGhhdCB0aGUgdGFzayBtYXkgYmUgYWxyZWFkeSBkZWFkLgogKyAq LwogK2ludCBzY2hlZF9zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcG9s aWN5LAotKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCisrCQkJICAg Y29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKICt7CiArCXJldHVybiBfX3NjaGVkX3Nl dHNjaGVkdWxlcihwLCBwb2xpY3ksIHBhcmFtLCB0cnVlKTsKICt9CkBAIC01Mzc5LDcgKzQ1OTYs NyBAQAogKyAqIGJ1dCBvdXIgY2FsbGVyIG1pZ2h0IG5vdCBoYXZlIHRoYXQgY2FwYWJpbGl0eS4K ICsgKi8KICtpbnQgc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soc3RydWN0IHRhc2tfc3RydWN0 ICpwLCBpbnQgcG9saWN5LAotKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBh cmFtKQorKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKQogK3sKICsJcmV0 dXJuIF9fc2NoZWRfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgcGFyYW0sIGZhbHNlKTsKICt9CkBA IC01NDEzLDcgKzQ2MzAsNyBAQAogKyAqIEBwYXJhbTogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhl IG5ldyBSVCBwcmlvcml0eS4KICsgKi8KICthc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX3NldHNj aGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksCi0rCQkJCSAgICAgICBzdHJ1Y3Qgc2NoZWRf cGFyYW0gX191c2VyICpwYXJhbSkKKysJCQkJCSAgIHN0cnVjdCBzY2hlZF9wYXJhbSBfX3VzZXIg KnBhcmFtKQogK3sKICsJLyogbmVnYXRpdmUgdmFsdWVzIGZvciBwb2xpY3kgYXJlIG5vdCB2YWxp ZCAqLwogKwlpZiAocG9saWN5IDwgMCkKQEAgLTU1NjIsNyArNDc3OSw3IEBACiArfQogKwogK3N0 YXRpYyBpbnQgZ2V0X3VzZXJfY3B1X21hc2sodW5zaWduZWQgbG9uZyBfX3VzZXIgKnVzZXJfbWFz a19wdHIsIHVuc2lnbmVkIGxlbiwKLSsJCQkgICAgIGNwdW1hc2tfdCAqbmV3X21hc2spCisrCQkJ CSBjcHVtYXNrX3QgKm5ld19tYXNrKQogK3sKICsJaWYgKGxlbiA8IHNpemVvZihjcHVtYXNrX3Qp KSB7CiArCQltZW1zZXQobmV3X21hc2ssIDAsIHNpemVvZihjcHVtYXNrX3QpKTsKQEAgLTU2NjIs OCArNDg3OSw3IEBACiArICogc3lzX3NjaGVkX3lpZWxkIC0geWllbGQgdGhlIGN1cnJlbnQgcHJv Y2Vzc29yIHRvIG90aGVyIHRocmVhZHMuCiArICoKICsgKiBUaGlzIGZ1bmN0aW9uIHlpZWxkcyB0 aGUgY3VycmVudCBDUFUgdG8gb3RoZXIgdGFza3MuIEl0IGRvZXMgdGhpcyBieQotKyAqIHNjaGVk dWxpbmcgYXdheSB0aGUgY3VycmVudCB0YXNrLiBJZiBpdCBzdGlsbCBoYXMgdGhlIGVhcmxpZXN0 IGRlYWRsaW5lCi0rICogaXQgd2lsbCBiZSBzY2hlZHVsZWQgYWdhaW4gYXMgdGhlIG5leHQgdGFz ay4KKysgKiBzY2hlZHVsaW5nIGF3YXkgdGhlIGN1cnJlbnQgdGFzay4gCiArICovCiArU1lTQ0FM TF9ERUZJTkUwKHNjaGVkX3lpZWxkKQogK3sKQEAgLTU2NzEsNyArNDg4Nyw2IEBACiArCiArCXAg PSBjdXJyZW50OwogKwlncnFfbG9ja19pcnEoKTsKLSsJc2NoZWRzdGF0X2luYyh0YXNrX3JxKHAp LCB5bGRfY291bnQpOwogKwlyZXF1ZXVlX3Rhc2socCk7CiArCiArCS8qCkBAIC01Nzg2LDE5ICs1 MDAxLDE5IEBACiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiArCWJvb2wgeWllbGRlZCA9IDA7CiAr CXN0cnVjdCBycSAqcnE7CisrCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycjsKICsKICsJcnEgPSB0 aGlzX3JxKCk7CiArCWdycV9sb2NrX2lycXNhdmUoJmZsYWdzKTsKICsJaWYgKHRhc2tfcnVubmlu ZyhwKSB8fCBwLT5zdGF0ZSkKICsJCWdvdG8gb3V0X3VubG9jazsKICsJeWllbGRlZCA9IDE7Ci0r CWlmIChwLT5kZWFkbGluZSA+IHJxLT5ycV9kZWFkbGluZSkKLSsJCXAtPmRlYWRsaW5lID0gcnEt PnJxX2RlYWRsaW5lOwotKwlwLT50aW1lX3NsaWNlICs9IHJxLT5ycV90aW1lX3NsaWNlOwotKwly cS0+cnFfdGltZV9zbGljZSA9IDA7CisrCWN1cnIgPSBycS0+Y3VycjsKKysJcC0+dGltZV9zbGlj ZSArPSBjdXJyLT50aW1lX3NsaWNlOworKwljdXJyLT50aW1lX3NsaWNlID0gMDsKICsJaWYgKHAt PnRpbWVfc2xpY2UgPiB0aW1lc2xpY2UoKSkKICsJCXAtPnRpbWVfc2xpY2UgPSB0aW1lc2xpY2Uo KTsKLSsJc2V0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpOworKwlzZXRfdHNrX25lZWRfcmVz Y2hlZChjdXJyKTsKICtvdXRfdW5sb2NrOgogKwlncnFfdW5sb2NrX2lycXJlc3RvcmUoJmZsYWdz KTsKICsKQEAgLTU4NjQsNyArNTA3OSw2IEBACiArCQlicmVhazsKICsJY2FzZSBTQ0hFRF9OT1JN QUw6CiArCWNhc2UgU0NIRURfQkFUQ0g6Ci0rCWNhc2UgU0NIRURfSVNPOgogKwljYXNlIFNDSEVE X0lETEVQUklPOgogKwkJcmV0ID0gMDsKICsJCWJyZWFrOwpAQCAtNTg5MCw3ICs1MTA0LDYgQEAK ICsJCWJyZWFrOwogKwljYXNlIFNDSEVEX05PUk1BTDoKICsJY2FzZSBTQ0hFRF9CQVRDSDoKLSsJ Y2FzZSBTQ0hFRF9JU086CiArCWNhc2UgU0NIRURfSURMRVBSSU86CiArCQlyZXQgPSAwOwogKwkJ YnJlYWs7CkBAIC01OTI5LDcgKzUxNDIsNyBAQAogKwkJZ290byBvdXRfdW5sb2NrOwogKwogKwln cnFfbG9ja19pcnFzYXZlKCZmbGFncyk7Ci0rCXRpbWVfc2xpY2UgPSBwLT5wb2xpY3kgPT0gU0NI RURfRklGTyA/IDAgOiBNU19UT19OUyh0YXNrX3RpbWVzbGljZShwKSk7CisrCXRpbWVfc2xpY2Ug PSBwLT5wb2xpY3kgPT0gU0NIRURfRklGTyA/IDAgOiBNU19UT19OUyhycl9pbnRlcnZhbCk7CiAr CWdycV91bmxvY2tfaXJxcmVzdG9yZSgmZmxhZ3MpOwogKwogKwlyY3VfcmVhZF91bmxvY2soKTsK QEAgLTU5NTksNyArNTE3Miw3IEBACiArCQlwcmludGsoS0VSTl9DT05UICIgJTA4bHggIiwgdGhy ZWFkX3NhdmVkX3BjKHApKTsKICsjZWxzZQogKwlpZiAoc3RhdGUgPT0gVEFTS19SVU5OSU5HKQot KwkJcHJpbnRrKEtFUk5fQ09OVCAiICBydW5uaW5nIHRhc2sgICAgIik7CisrCQlwcmludGsoS0VS Tl9DT05UICIgIHJ1bm5pbmcgdGFzawkiKTsKICsJZWxzZQogKwkJcHJpbnRrKEtFUk5fQ09OVCAi ICUwMTZseCAiLCB0aHJlYWRfc2F2ZWRfcGMocCkpOwogKyNlbmRpZgpAQCAtNTk3OSwxMCArNTE5 MiwxMCBAQAogKwogKyNpZiBCSVRTX1BFUl9MT05HID09IDMyCiArCXByaW50ayhLRVJOX0lORk8K LSsJCSIgIHRhc2sgICAgICAgICAgICAgICAgUEMgc3RhY2sgICBwaWQgZmF0aGVyXG4iKTsKKysJ CSIgIHRhc2sJCQkJUEMgc3RhY2sgICBwaWQgZmF0aGVyXG4iKTsKICsjZWxzZQogKwlwcmludGso S0VSTl9JTkZPCi0rCQkiICB0YXNrICAgICAgICAgICAgICAgICAgICAgICAgUEMgc3RhY2sgICBw aWQgZmF0aGVyXG4iKTsKKysJCSIgIHRhc2sJCQkJCQlQQyBzdGFjayAgIHBpZCBmYXRoZXJcbiIp OwogKyNlbmRpZgogKwlyY3VfcmVhZF9sb2NrKCk7CiArCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsK QEAgLTYwMzAsNiArNTI0Myw3IEBACiArCWlkbGUtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogKwkv KiBTZXR0aW5nIHByaW8gdG8gaWxsZWdhbCB2YWx1ZSBzaG91bGRuJ3QgbWF0dGVyIHdoZW4gbmV2 ZXIgcXVldWVkICovCiArCWlkbGUtPnByaW8gPSBQUklPX0xJTUlUOworKwlpZGxlLT5wb2xpY3kg PSBTQ0hFRF9JRExFOwogKwlzZXRfcnFfdGFzayhycSwgaWRsZSk7CiArCWRvX3NldF9jcHVzX2Fs bG93ZWQoaWRsZSwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwogKwkvKiBTaWxlbmNlIFBST1ZFX1JD VSAqLwpAQCAtNjI1NCw4ICs1NDY4LDggQEAKICsJCQkgKi8KICsJCQlpZiAocC0+bW0gJiYgcHJp bnRrX3JhdGVsaW1pdCgpKSB7CiArCQkJCXByaW50ayhLRVJOX0lORk8gInByb2Nlc3MgJWQgKCVz KSBubyAiCi0rCQkJCSAgICAgICAibG9uZ2VyIGFmZmluZSB0byBjcHUgJWRcbiIsCi0rCQkJCSAg ICAgICB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgc3JjX2NwdSk7CisrCQkJCQkgICAibG9uZ2Vy IGFmZmluZSB0byBjcHUgJWRcbiIsCisrCQkJCQkgICB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwg c3JjX2NwdSk7CiArCQkJfQogKwkJfQogKwkJY2xlYXJfc3RpY2t5KHApOwpAQCAtNjUzOSwxMiAr NTc1MywxMSBAQAogKwljYXNlIENQVV9ERUFEOgogKwkJLyogSWRsZSB0YXNrIGJhY2sgdG8gbm9y bWFsIChvZmYgcnVucXVldWUsIGxvdyBwcmlvKSAqLwogKwkJZ3JxX2xvY2tfaXJxKCk7Ci0rCQly ZXR1cm5fdGFzayhpZGxlLCB0cnVlKTsKKysJCXB1dF9wcmV2X3Rhc2socnEsIGNwdSwgaWRsZSwg dHJ1ZSk7CiArCQlpZGxlLT5zdGF0aWNfcHJpbyA9IE1BWF9QUklPOwogKwkJX19zZXRzY2hlZHVs ZXIoaWRsZSwgcnEsIFNDSEVEX05PUk1BTCwgMCk7CiArCQlpZGxlLT5wcmlvID0gUFJJT19MSU1J VDsKICsJCXNldF9ycV90YXNrKHJxLCBpZGxlKTsKLSsJCXVwZGF0ZV9jbG9ja3MocnEpOwogKwkJ Z3JxX3VubG9ja19pcnEoKTsKICsJCWJyZWFrOwogKwpAQCAtNjU3Niw3ICs1Nzg5LDcgQEAKICt9 OwogKwogK3N0YXRpYyBpbnQgX19jcHVpbml0IHNjaGVkX2NwdV9hY3RpdmUoc3RydWN0IG5vdGlm aWVyX2Jsb2NrICpuZmIsCi0rCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpo Y3B1KQorKwkJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKICt7CiArCXN3 aXRjaCAoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pIHsKICsJY2FzZSBDUFVfT05MSU5FOgpA QCAtNjcxMSw3ICs1OTI0LDcgQEAKICsJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGdyb3VwcyBk b24ndCBzcGFuIGRvbWFpbi0+c3BhblxuIik7CiArCiArCWlmIChzZC0+cGFyZW50ICYmCi0rCSAg ICAhY3B1bWFza19zdWJzZXQoZ3JvdXBtYXNrLCBzY2hlZF9kb21haW5fc3BhbihzZC0+cGFyZW50 KSkpCisrCQkhY3B1bWFza19zdWJzZXQoZ3JvdXBtYXNrLCBzY2hlZF9kb21haW5fc3BhbihzZC0+ cGFyZW50KSkpCiArCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBwYXJlbnQgc3BhbiBpcyBub3Qg YSBzdXBlcnNldCAiCiArCQkJIm9mIGRvbWFpbi0+c3BhblxuIik7CiArCXJldHVybiAwOwpAQCAt NzExNSw4ICs2MzI4LDggQEAKICtzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsIHsK ICsJc2NoZWRfZG9tYWluX2luaXRfZiBpbml0OwogKwlzY2hlZF9kb21haW5fbWFza19mIG1hc2s7 Ci0rCWludAkJICAgIGZsYWdzOwotKwlzdHJ1Y3Qgc2RfZGF0YSAgICAgIGRhdGE7CisrCWludAkJ CWZsYWdzOworKwlzdHJ1Y3Qgc2RfZGF0YQkgIGRhdGE7CiArfTsKICsKICtzdGF0aWMgaW50CkBA IC03NDMzLDcgKzY2NDYsNyBAQAogKwkJCXN0cnVjdCBzY2hlZF9ncm91cCAqc2c7CiArCQkJc3Ry dWN0IHNjaGVkX2dyb3VwX3Bvd2VyICpzZ3A7CiArCi0rCQkgICAgICAgCXNkID0ga3phbGxvY19u b2RlKHNpemVvZihzdHJ1Y3Qgc2NoZWRfZG9tYWluKSArIGNwdW1hc2tfc2l6ZSgpLAorKwkJCSAg IAlzZCA9IGt6YWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHNjaGVkX2RvbWFpbikgKyBjcHVtYXNr X3NpemUoKSwKICsJCQkJCUdGUF9LRVJORUwsIGNwdV90b19ub2RlKGopKTsKICsJCQlpZiAoIXNk KQogKwkJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc1MDcsNyArNjcyMCw3IEBACiArICogdG8gdGhl IGluZGl2aWR1YWwgY3B1cwogKyAqLwogK3N0YXRpYyBpbnQgYnVpbGRfc2NoZWRfZG9tYWlucyhj b25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLSsJCQkgICAgICAgc3RydWN0IHNjaGVkX2Rv bWFpbl9hdHRyICphdHRyKQorKwkJCQkgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIp CiArewogKwllbnVtIHNfYWxsb2MgYWxsb2Nfc3RhdGUgPSBzYV9ub25lOwogKwlzdHJ1Y3Qgc2No ZWRfZG9tYWluICpzZDsKQEAgLTc3MDEsNyArNjkxNCw3IEBACiArICogQ2FsbCB3aXRoIGhvdHBs dWcgbG9jayBoZWxkCiArICovCiArdm9pZCBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucyhpbnQgbmRv bXNfbmV3LCBjcHVtYXNrX3Zhcl90IGRvbXNfbmV3W10sCi0rCQkJICAgICBzdHJ1Y3Qgc2NoZWRf ZG9tYWluX2F0dHIgKmRhdHRyX25ldykKKysJCQkJIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAq ZGF0dHJfbmV3KQogK3sKICsJaW50IGksIGosIG47CiArCWludCBuZXdfdG9wb2xvZ3k7CkBAIC03 NzIwLDcgKzY5MzMsNyBAQAogKwlmb3IgKGkgPSAwOyBpIDwgbmRvbXNfY3VyOyBpKyspIHsKICsJ CWZvciAoaiA9IDA7IGogPCBuICYmICFuZXdfdG9wb2xvZ3k7IGorKykgewogKwkJCWlmIChjcHVt YXNrX2VxdWFsKGRvbXNfY3VyW2ldLCBkb21zX25ld1tqXSkKLSsJCQkgICAgJiYgZGF0dHJzX2Vx dWFsKGRhdHRyX2N1ciwgaSwgZGF0dHJfbmV3LCBqKSkKKysJCQkJJiYgZGF0dHJzX2VxdWFsKGRh dHRyX2N1ciwgaSwgZGF0dHJfbmV3LCBqKSkKICsJCQkJZ290byBtYXRjaDE7CiArCQl9CiArCQkv KiBubyBtYXRjaCAtIGEgY3VycmVudCBzY2hlZCBkb21haW4gbm90IGluIG5ldyBkb21zX25ld1td ICovCkBAIC03NzQwLDcgKzY5NTMsNyBAQAogKwlmb3IgKGkgPSAwOyBpIDwgbmRvbXNfbmV3OyBp KyspIHsKICsJCWZvciAoaiA9IDA7IGogPCBuZG9tc19jdXIgJiYgIW5ld190b3BvbG9neTsgaisr KSB7CiArCQkJaWYgKGNwdW1hc2tfZXF1YWwoZG9tc19uZXdbaV0sIGRvbXNfY3VyW2pdKQotKwkJ CSAgICAmJiBkYXR0cnNfZXF1YWwoZGF0dHJfbmV3LCBpLCBkYXR0cl9jdXIsIGopKQorKwkJCQkm JiBkYXR0cnNfZXF1YWwoZGF0dHJfbmV3LCBpLCBkYXR0cl9jdXIsIGopKQogKwkJCQlnb3RvIG1h dGNoMjsKICsJCX0KICsJCS8qIG5vIG1hdGNoIC0gYWRkIGEgbmV3IGRvbXNfbmV3ICovCkBAIC03 ODA5LDggKzcwMjIsOCBAQAogKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgc2NoZWRfbWNf cG93ZXJfc2F2aW5ncyk7CiArfQogK3N0YXRpYyBzc2l6ZV90IHNjaGVkX21jX3Bvd2VyX3Nhdmlu Z3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAotKwkJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQor KwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorKwkJCQkJCWNvbnN0IGNoYXIg KmJ1Ziwgc2l6ZV90IGNvdW50KQogK3sKICsJcmV0dXJuIHNjaGVkX3Bvd2VyX3NhdmluZ3Nfc3Rv cmUoYnVmLCBjb3VudCwgMCk7CiArfQpAQCAtNzgyMSwxNCArNzAzNCwxNCBAQAogKwogKyNpZmRl ZiBDT05GSUdfU0NIRURfU01UCiArc3RhdGljIHNzaXplX3Qgc2NoZWRfc210X3Bvd2VyX3Nhdmlu Z3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0rCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsCi0rCQkJCQkgICAgY2hhciAqYnVmKQorKwkJCQkJCXN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLAorKwkJCQkJCWNoYXIgKmJ1ZikKICt7CiArCXJldHVybiBzcHJpbnRm KGJ1ZiwgIiV1XG4iLCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyk7CiArfQogK3N0YXRpYyBzc2l6 ZV90IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLSsJ CQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLSsJCQkJCSAgICAgY29uc3Qg Y2hhciAqYnVmLCBzaXplX3QgY291bnQpCisrCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsCisrCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogK3sKICsJcmV0 dXJuIHNjaGVkX3Bvd2VyX3NhdmluZ3Nfc3RvcmUoYnVmLCBjb3VudCwgMSk7CiArfQpAQCAtNzg1 OSw3ICs3MDcyLDcgQEAKICsgKiBhcm91bmQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoKS4KICsg Ki8KICtzdGF0aWMgaW50IGNwdXNldF9jcHVfYWN0aXZlKHN0cnVjdCBub3RpZmllcl9ibG9jayAq bmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKLSsJCQkgICAgIHZvaWQgKmhjcHUpCisrCQkJCSB2 b2lkICpoY3B1KQogK3sKICsJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgewog KwljYXNlIENQVV9PTkxJTkU6CkBAIC03ODcyLDcgKzcwODUsNyBAQAogK30KICsKICtzdGF0aWMg aW50IGNwdXNldF9jcHVfaW5hY3RpdmUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2ln bmVkIGxvbmcgYWN0aW9uLAotKwkJCSAgICAgICB2b2lkICpoY3B1KQorKwkJCQkgICB2b2lkICpo Y3B1KQogK3sKICsJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgewogKwljYXNl IENQVV9ET1dOX1BSRVBBUkU6CkBAIC03ODk4LDcgKzcxMTEsNyBAQAogK3N0YXRpYyBib29sIHNp YmxpbmdzX2NwdV9pZGxlKGludCBjcHUpCiArewogKwlyZXR1cm4gY3B1bWFza19zdWJzZXQoJihj cHVfcnEoY3B1KS0+c210X3NpYmxpbmdzKSwKLSsJCQkgICAgICAmZ3JxLmNwdV9pZGxlX21hcCk7 CisrCQkJCSAgJmdycS5jcHVfaWRsZV9tYXApOwogK30KICsjZW5kaWYKICsjaWZkZWYgQ09ORklH X1NDSEVEX01DCkBAIC03OTA2LDcgKzcxMTksNyBAQAogK3N0YXRpYyBib29sIGNhY2hlX2NwdV9p ZGxlKGludCBjcHUpCiArewogKwlyZXR1cm4gY3B1bWFza19zdWJzZXQoJihjcHVfcnEoY3B1KS0+ Y2FjaGVfc2libGluZ3MpLAotKwkJCSAgICAgICZncnEuY3B1X2lkbGVfbWFwKTsKKysJCQkJICAm Z3JxLmNwdV9pZGxlX21hcCk7CiArfQogKyNlbmRpZgogKwpAQCAtODAyNSwxNyArNzIzOCwxMCBA QAogKwlpbnQgaTsKICsJc3RydWN0IHJxICpycTsKICsKLSsJcHJpb19yYXRpb3NbMF0gPSAxMjg7 Ci0rCWZvciAoaSA9IDEgOyBpIDwgUFJJT19SQU5HRSA7IGkrKykKLSsJCXByaW9fcmF0aW9zW2ld ID0gcHJpb19yYXRpb3NbaSAtIDFdICogMTEgLyAxMDsKKysJcHJpbnRfc2NoZWR1bGVyX3ZlcnNp b24oKTsKICsKICsJcmF3X3NwaW5fbG9ja19pbml0KCZncnEubG9jayk7CiArCWdycS5ucl9ydW5u aW5nID0gZ3JxLm5yX3VuaW50ZXJydXB0aWJsZSA9IGdycS5ucl9zd2l0Y2hlcyA9IDA7Ci0rCWdy cS5uaWZmaWVzID0gMDsKLSsJZ3JxLmxhc3RfamlmZnkgPSBqaWZmaWVzOwotKwlyYXdfc3Bpbl9s b2NrX2luaXQoJmdycS5pc29fbG9jayk7Ci0rCWdycS5pc29fdGlja3MgPSAwOwotKwlncnEuaXNv X3JlZnJhY3RvcnkgPSBmYWxzZTsKICsJZ3JxLm5vYyA9IDE7CiArI2lmZGVmIENPTkZJR19TTVAK ICsJaW5pdF9kZWZyb290ZG9tYWluKCk7CkBAIC04MDQ3LDExICs3MjUzLDkgQEAKICsJZm9yX2Vh Y2hfcG9zc2libGVfY3B1KGkpIHsKICsJCXJxID0gY3B1X3JxKGkpOwogKwkJcnEtPnVzZXJfcGMg PSBycS0+bmljZV9wYyA9IHJxLT5zb2Z0aXJxX3BjID0gcnEtPnN5c3RlbV9wYyA9Ci0rCQkJICAg ICAgcnEtPmlvd2FpdF9wYyA9IHJxLT5pZGxlX3BjID0gMDsKLSsJCXJxLT5kaXRoZXIgPSBmYWxz ZTsKKysJCQkJICBycS0+aW93YWl0X3BjID0gcnEtPmlkbGVfcGMgPSAwOwogKyNpZmRlZiBDT05G SUdfU01QCiArCQlycS0+c3RpY2t5X3Rhc2sgPSBOVUxMOwotKwkJcnEtPmxhc3RfbmlmZnkgPSAw OwogKwkJcnEtPnNkID0gTlVMTDsKICsJCXJxLT5yZCA9IE5VTEw7CiArCQlycS0+b25saW5lID0g ZmFsc2U7CkBAIC04MTQyLDcgKzczNDYsNyBAQAogKwogKwlyY3Vfc2xlZXBfY2hlY2soKTsgLyog V0FSTl9PTl9PTkNFKCkgYnkgZGVmYXVsdCwgbm8gcmF0ZSBsaW1pdCByZXFkLiAqLwogKwlpZiAo KHByZWVtcHRfY291bnRfZXF1YWxzKHByZWVtcHRfb2Zmc2V0KSAmJiAhaXJxc19kaXNhYmxlZCgp KSB8fAotKwkgICAgc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9SVU5OSU5HIHx8IG9vcHNfaW5fcHJv Z3Jlc3MpCisrCQlzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcgfHwgb29wc19pbl9wcm9n cmVzcykKICsJCXJldHVybjsKICsJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHByZXZfamlmZnkg KyBIWikgJiYgcHJldl9qaWZmeSkKICsJCXJldHVybjsKQEAgLTgxNzUsMTggKzczNzksMTUgQEAK ICsJcmVhZF9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiArCiArCWRvX2VhY2hfdGhyZWFkKGcs IHApIHsKLSsJCWlmICghcnRfdGFzayhwKSAmJiAhaXNvX3Rhc2socCkpCisrCQlpZiAoIXJ0X3Rh c2socCkpCiArCQkJY29udGludWU7CiArCiArCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnBp X2xvY2ssIGZsYWdzKTsKICsJCXJxID0gX190YXNrX2dycV9sb2NrKHApOwogKwogKwkJcXVldWVk ID0gdGFza19xdWV1ZWQocCk7Ci0rCQlpZiAocXVldWVkKQotKwkJCWRlcXVldWVfdGFzayhwKTsK ICsJCV9fc2V0c2NoZWR1bGVyKHAsIHJxLCBTQ0hFRF9OT1JNQUwsIDApOwogKwkJaWYgKHF1ZXVl ZCkgewotKwkJCWVucXVldWVfdGFzayhwKTsKICsJCQl0cnlfcHJlZW1wdChwLCBycSk7CiArCQl9 CiArCkBAIC04MzU0LDI0ICs3NTU1LDU5NSBAQAogKwlyZXR1cm4gc210X2dhaW47CiArfQogKyNl bmRpZgotSW5kZXg6IGxpbnV4LTMuMy1jazEva2VybmVsL3NjaGVkL01ha2VmaWxlCi09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLS0gbGludXgtMy4zLWNrMS5vcmlnL2tlcm5lbC9zY2hlZC9NYWtlZmlsZQkyMDEyLTAz LTI0IDE5OjMwOjAwLjAxNDQyMDM5OSArMTEwMAotKysrIGxpbnV4LTMuMy1jazEva2VybmVsL3Nj aGVkL01ha2VmaWxlCTIwMTItMDMtMjQgMTk6MzA6MjkuMDQ3OTI1ODk3ICsxMTAwCi1AQCAtMTEs MTAgKzExLDE0IEBAIGlmbmVxICgkKENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIKLSBD RkxBR1NfY29yZS5vIDo9ICQoUFJPRklMSU5HKSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgotIGVu ZGlmCitkaWZmIC1ydU4gbGludXgtMy4zLjUva2VybmVsL3NjaGVkL3N0YXRzLmMgbGludXgtMy4z LjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2tlcm5lbC9zY2hlZC9zdGF0cy5jCistLS0gbGludXgt My4zLjUva2VybmVsL3NjaGVkL3N0YXRzLmMJMjAxMi0wNS0wNyAyMzo1NTozMC4wMDAwMDAwMDAg KzA4MDAKKysrKyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJTkcva2VybmVsL3NjaGVk L3N0YXRzLmMJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDExMSAr MCwwIEBACistCistI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKy0jaW5jbHVkZSA8bGludXgvZnMu aD4KKy0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKy0jaW5jbHVkZSA8bGludXgvcHJvY19m cy5oPgorLQorLSNpbmNsdWRlICJzY2hlZC5oIgorLQorLS8qCistICogYnVtcCB0aGlzIHVwIHdo ZW4gY2hhbmdpbmcgdGhlIG91dHB1dCBmb3JtYXQgb3IgdGhlIG1lYW5pbmcgb2YgYW4gZXhpc3Rp bmcKKy0gKiBmb3JtYXQsIHNvIHRoYXQgdG9vbHMgY2FuIGFkYXB0IChvciBhYm9ydCkKKy0gKi8K Ky0jZGVmaW5lIFNDSEVEU1RBVF9WRVJTSU9OIDE1CistCistc3RhdGljIGludCBzaG93X3NjaGVk c3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKy17CistCWludCBjcHU7CistCWlu dCBtYXNrX2xlbiA9IERJVl9ST1VORF9VUChOUl9DUFVTLCAzMikgKiA5OworLQljaGFyICptYXNr X3N0ciA9IGttYWxsb2MobWFza19sZW4sIEdGUF9LRVJORUwpOworLQorLQlpZiAobWFza19zdHIg PT0gTlVMTCkKKy0JCXJldHVybiAtRU5PTUVNOworLQorLQlzZXFfcHJpbnRmKHNlcSwgInZlcnNp b24gJWRcbiIsIFNDSEVEU1RBVF9WRVJTSU9OKTsKKy0Jc2VxX3ByaW50ZihzZXEsICJ0aW1lc3Rh bXAgJWx1XG4iLCBqaWZmaWVzKTsKKy0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKy0JCXN0 cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKy0jaWZkZWYgQ09ORklHX1NNUAorLQkJc3RydWN0 IHNjaGVkX2RvbWFpbiAqc2Q7CistCQlpbnQgZGNvdW50ID0gMDsKKy0jZW5kaWYKKy0KKy0JCS8q IHJ1bnF1ZXVlLXNwZWNpZmljIHN0YXRzICovCistCQlzZXFfcHJpbnRmKHNlcSwKKy0JCSAgICAi Y3B1JWQgJXUgJXUgJXUgJXUgJXUgJXUgJWxsdSAlbGx1ICVsdSIsCistCQkgICAgY3B1LCBycS0+ eWxkX2NvdW50LAorLQkJICAgIHJxLT5zY2hlZF9zd2l0Y2gsIHJxLT5zY2hlZF9jb3VudCwgcnEt PnNjaGVkX2dvaWRsZSwKKy0JCSAgICBycS0+dHR3dV9jb3VudCwgcnEtPnR0d3VfbG9jYWwsCist CQkgICAgcnEtPnJxX2NwdV90aW1lLAorLQkJICAgIHJxLT5ycV9zY2hlZF9pbmZvLnJ1bl9kZWxh eSwgcnEtPnJxX3NjaGVkX2luZm8ucGNvdW50KTsKKy0KKy0JCXNlcV9wcmludGYoc2VxLCAiXG4i KTsKKy0KKy0jaWZkZWYgQ09ORklHX1NNUAorLQkJLyogZG9tYWluLXNwZWNpZmljIHN0YXRzICov CistCQlyY3VfcmVhZF9sb2NrKCk7CistCQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgeworLQkJ CWVudW0gY3B1X2lkbGVfdHlwZSBpdHlwZTsKKy0KKy0JCQljcHVtYXNrX3NjbnByaW50ZihtYXNr X3N0ciwgbWFza19sZW4sCistCQkJCQkgIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CistCQkJc2Vx X3ByaW50ZihzZXEsICJkb21haW4lZCAlcyIsIGRjb3VudCsrLCBtYXNrX3N0cik7CistCQkJZm9y IChpdHlwZSA9IENQVV9JRExFOyBpdHlwZSA8IENQVV9NQVhfSURMRV9UWVBFUzsKKy0JCQkJCWl0 eXBlKyspIHsKKy0JCQkJc2VxX3ByaW50ZihzZXEsICIgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUi LAorLQkJCQkgICAgc2QtPmxiX2NvdW50W2l0eXBlXSwKKy0JCQkJICAgIHNkLT5sYl9iYWxhbmNl ZFtpdHlwZV0sCistCQkJCSAgICBzZC0+bGJfZmFpbGVkW2l0eXBlXSwKKy0JCQkJICAgIHNkLT5s Yl9pbWJhbGFuY2VbaXR5cGVdLAorLQkJCQkgICAgc2QtPmxiX2dhaW5lZFtpdHlwZV0sCistCQkJ CSAgICBzZC0+bGJfaG90X2dhaW5lZFtpdHlwZV0sCistCQkJCSAgICBzZC0+bGJfbm9idXN5cVtp dHlwZV0sCistCQkJCSAgICBzZC0+bGJfbm9idXN5Z1tpdHlwZV0pOworLQkJCX0KKy0JCQlzZXFf cHJpbnRmKHNlcSwKKy0JCQkJICAgIiAldSAldSAldSAldSAldSAldSAldSAldSAldSAldSAldSAl dVxuIiwKKy0JCQkgICAgc2QtPmFsYl9jb3VudCwgc2QtPmFsYl9mYWlsZWQsIHNkLT5hbGJfcHVz aGVkLAorLQkJCSAgICBzZC0+c2JlX2NvdW50LCBzZC0+c2JlX2JhbGFuY2VkLCBzZC0+c2JlX3B1 c2hlZCwKKy0JCQkgICAgc2QtPnNiZl9jb3VudCwgc2QtPnNiZl9iYWxhbmNlZCwgc2QtPnNiZl9w dXNoZWQsCistCQkJICAgIHNkLT50dHd1X3dha2VfcmVtb3RlLCBzZC0+dHR3dV9tb3ZlX2FmZmlu ZSwKKy0JCQkgICAgc2QtPnR0d3VfbW92ZV9iYWxhbmNlKTsKKy0JCX0KKy0JCXJjdV9yZWFkX3Vu bG9jaygpOworLSNlbmRpZgorLQl9CistCWtmcmVlKG1hc2tfc3RyKTsKKy0JcmV0dXJuIDA7Cist fQorLQorLXN0YXRpYyBpbnQgc2NoZWRzdGF0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbGUpCisteworLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IFBBR0VfU0laRSAqICgx ICsgbnVtX29ubGluZV9jcHVzKCkgLyAzMik7CistCWNoYXIgKmJ1ZiA9IGttYWxsb2Moc2l6ZSwg R0ZQX0tFUk5FTCk7CistCXN0cnVjdCBzZXFfZmlsZSAqbTsKKy0JaW50IHJlczsKKy0KKy0JaWYg KCFidWYpCistCQlyZXR1cm4gLUVOT01FTTsKKy0JcmVzID0gc2luZ2xlX29wZW4oZmlsZSwgc2hv d19zY2hlZHN0YXQsIE5VTEwpOworLQlpZiAoIXJlcykgeworLQkJbSA9IGZpbGUtPnByaXZhdGVf ZGF0YTsKKy0JCW0tPmJ1ZiA9IGJ1ZjsKKy0JCW0tPnNpemUgPSBzaXplOworLQl9IGVsc2UKKy0J CWtmcmVlKGJ1Zik7CistCXJldHVybiByZXM7CistfQorLQorLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIHByb2Nfc2NoZWRzdGF0X29wZXJhdGlvbnMgPSB7CistCS5vcGVuICAg ID0gc2NoZWRzdGF0X29wZW4sCistCS5yZWFkICAgID0gc2VxX3JlYWQsCistCS5sbHNlZWsgID0g c2VxX2xzZWVrLAorLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorLX07CistCistc3RhdGlj IGludCBfX2luaXQgcHJvY19zY2hlZHN0YXRfaW5pdCh2b2lkKQorLXsKKy0JcHJvY19jcmVhdGUo InNjaGVkc3RhdCIsIDAsIE5VTEwsICZwcm9jX3NjaGVkc3RhdF9vcGVyYXRpb25zKTsKKy0JcmV0 dXJuIDA7CistfQorLW1vZHVsZV9pbml0KHByb2Nfc2NoZWRzdGF0X2luaXQpOworZGlmZiAtcnVO IGxpbnV4LTMuMy41L2tlcm5lbC9zY2hlZC9zdGF0cy5oIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJS QUlOLUVBVElORy9rZXJuZWwvc2NoZWQvc3RhdHMuaAorLS0tIGxpbnV4LTMuMy41L2tlcm5lbC9z Y2hlZC9zdGF0cy5oCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICswODAwCisrKysgbGlu dXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2tlcm5lbC9zY2hlZC9zdGF0cy5oCTIwMTIt MDUtMTkgMjI6MDU6MjIuMDAwMDAwMDAwICswODAwCitAQCAtMSwyMzEgKzAsMCBAQAorLQorLSNp ZmRlZiBDT05GSUdfU0NIRURTVEFUUworLQorLS8qCistICogRXhwZWN0cyBydW5xdWV1ZSBsb2Nr IHRvIGJlIGhlbGQgZm9yIGF0b21pY2l0eSBvZiB1cGRhdGUKKy0gKi8KKy1zdGF0aWMgaW5saW5l IHZvaWQKKy1ycV9zY2hlZF9pbmZvX2Fycml2ZShzdHJ1Y3QgcnEgKnJxLCB1bnNpZ25lZCBsb25n IGxvbmcgZGVsdGEpCisteworLQlpZiAocnEpIHsKKy0JCXJxLT5ycV9zY2hlZF9pbmZvLnJ1bl9k ZWxheSArPSBkZWx0YTsKKy0JCXJxLT5ycV9zY2hlZF9pbmZvLnBjb3VudCsrOworLQl9CistfQor LQorLS8qCistICogRXhwZWN0cyBydW5xdWV1ZSBsb2NrIHRvIGJlIGhlbGQgZm9yIGF0b21pY2l0 eSBvZiB1cGRhdGUKKy0gKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKy1ycV9zY2hlZF9pbmZvX2Rl cGFydChzdHJ1Y3QgcnEgKnJxLCB1bnNpZ25lZCBsb25nIGxvbmcgZGVsdGEpCisteworLQlpZiAo cnEpCistCQlycS0+cnFfY3B1X3RpbWUgKz0gZGVsdGE7CistfQorLQorLXN0YXRpYyBpbmxpbmUg dm9pZAorLXJxX3NjaGVkX2luZm9fZGVxdWV1ZWQoc3RydWN0IHJxICpycSwgdW5zaWduZWQgbG9u ZyBsb25nIGRlbHRhKQorLXsKKy0JaWYgKHJxKQorLQkJcnEtPnJxX3NjaGVkX2luZm8ucnVuX2Rl bGF5ICs9IGRlbHRhOworLX0KKy0jIGRlZmluZSBzY2hlZHN0YXRfaW5jKHJxLCBmaWVsZCkJZG8g eyAocnEpLT5maWVsZCsrOyB9IHdoaWxlICgwKQorLSMgZGVmaW5lIHNjaGVkc3RhdF9hZGQocnEs IGZpZWxkLCBhbXQpCWRvIHsgKHJxKS0+ZmllbGQgKz0gKGFtdCk7IH0gd2hpbGUgKDApCistIyBk ZWZpbmUgc2NoZWRzdGF0X3NldCh2YXIsIHZhbCkJZG8geyB2YXIgPSAodmFsKTsgfSB3aGlsZSAo MCkKKy0jZWxzZSAvKiAhQ09ORklHX1NDSEVEU1RBVFMgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQK Ky1ycV9zY2hlZF9pbmZvX2Fycml2ZShzdHJ1Y3QgcnEgKnJxLCB1bnNpZ25lZCBsb25nIGxvbmcg ZGVsdGEpCiste30KKy1zdGF0aWMgaW5saW5lIHZvaWQKKy1ycV9zY2hlZF9pbmZvX2RlcXVldWVk KHN0cnVjdCBycSAqcnEsIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWx0YSkKKy17fQorLXN0YXRpYyBp bmxpbmUgdm9pZAorLXJxX3NjaGVkX2luZm9fZGVwYXJ0KHN0cnVjdCBycSAqcnEsIHVuc2lnbmVk IGxvbmcgbG9uZyBkZWx0YSkKKy17fQorLSMgZGVmaW5lIHNjaGVkc3RhdF9pbmMocnEsIGZpZWxk KQlkbyB7IH0gd2hpbGUgKDApCistIyBkZWZpbmUgc2NoZWRzdGF0X2FkZChycSwgZmllbGQsIGFt dCkJZG8geyB9IHdoaWxlICgwKQorLSMgZGVmaW5lIHNjaGVkc3RhdF9zZXQodmFyLCB2YWwpCWRv IHsgfSB3aGlsZSAoMCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURTVEFU UykgfHwgZGVmaW5lZChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKQorLXN0YXRpYyBpbmxpbmUgdm9p ZCBzY2hlZF9pbmZvX3Jlc2V0X2RlcXVldWVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKKy17Cist CXQtPnNjaGVkX2luZm8ubGFzdF9xdWV1ZWQgPSAwOworLX0KKy0KKy0vKgorLSAqIFdlIGFyZSBp bnRlcmVzdGVkIGluIGtub3dpbmcgaG93IGxvbmcgaXQgd2FzIGZyb20gdGhlICpmaXJzdCogdGlt ZSBhCistICogdGFzayB3YXMgcXVldWVkIHRvIHRoZSB0aW1lIHRoYXQgaXQgZmluYWxseSBoaXQg YSBjcHUsIHdlIGNhbGwgdGhpcyByb3V0aW5lCistICogZnJvbSBkZXF1ZXVlX3Rhc2soKSB0byBh Y2NvdW50IGZvciBwb3NzaWJsZSBycS0+Y2xvY2sgc2tldyBhY3Jvc3MgY3B1cy4gVGhlCistICog ZGVsdGEgdGFrZW4gb24gZWFjaCBjcHUgd291bGQgYW5udWwgdGhlIHNrZXcuCistICovCistc3Rh dGljIGlubGluZSB2b2lkIHNjaGVkX2luZm9fZGVxdWV1ZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0 KQorLXsKKy0JdW5zaWduZWQgbG9uZyBsb25nIG5vdyA9IHRhc2tfcnEodCktPmNsb2NrLCBkZWx0 YSA9IDA7CistCistCWlmICh1bmxpa2VseShzY2hlZF9pbmZvX29uKCkpKQorLQkJaWYgKHQtPnNj aGVkX2luZm8ubGFzdF9xdWV1ZWQpCistCQkJZGVsdGEgPSBub3cgLSB0LT5zY2hlZF9pbmZvLmxh c3RfcXVldWVkOworLQlzY2hlZF9pbmZvX3Jlc2V0X2RlcXVldWVkKHQpOworLQl0LT5zY2hlZF9p bmZvLnJ1bl9kZWxheSArPSBkZWx0YTsKKy0KKy0JcnFfc2NoZWRfaW5mb19kZXF1ZXVlZCh0YXNr X3JxKHQpLCBkZWx0YSk7CistfQorLQorLS8qCistICogQ2FsbGVkIHdoZW4gYSB0YXNrIGZpbmFs bHkgaGl0cyB0aGUgY3B1LiAgV2UgY2FuIG5vdyBjYWxjdWxhdGUgaG93CistICogbG9uZyBpdCB3 YXMgd2FpdGluZyB0byBydW4uICBXZSBhbHNvIG5vdGUgd2hlbiBpdCBiZWdhbiBzbyB0aGF0IHdl CistICogY2FuIGtlZXAgc3RhdHMgb24gaG93IGxvbmcgaXRzIHRpbWVzbGljZSBpcy4KKy0gKi8K Ky1zdGF0aWMgdm9pZCBzY2hlZF9pbmZvX2Fycml2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCist eworLQl1bnNpZ25lZCBsb25nIGxvbmcgbm93ID0gdGFza19ycSh0KS0+Y2xvY2ssIGRlbHRhID0g MDsKKy0KKy0JaWYgKHQtPnNjaGVkX2luZm8ubGFzdF9xdWV1ZWQpCistCQlkZWx0YSA9IG5vdyAt IHQtPnNjaGVkX2luZm8ubGFzdF9xdWV1ZWQ7CistCXNjaGVkX2luZm9fcmVzZXRfZGVxdWV1ZWQo dCk7CistCXQtPnNjaGVkX2luZm8ucnVuX2RlbGF5ICs9IGRlbHRhOworLQl0LT5zY2hlZF9pbmZv Lmxhc3RfYXJyaXZhbCA9IG5vdzsKKy0JdC0+c2NoZWRfaW5mby5wY291bnQrKzsKKy0KKy0JcnFf c2NoZWRfaW5mb19hcnJpdmUodGFza19ycSh0KSwgZGVsdGEpOworLX0KKy0KKy0vKgorLSAqIFRo aXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSBlbnF1ZXVlX3Rhc2soKSwgYnV0IGFsc28g b25seSB1cGRhdGVzCistICogdGhlIHRpbWVzdGFtcCBpZiBpdCBpcyBhbHJlYWR5IG5vdCBzZXQu ICBJdCdzIGFzc3VtZWQgdGhhdAorLSAqIHNjaGVkX2luZm9fZGVxdWV1ZWQoKSB3aWxsIGNsZWFy IHRoYXQgc3RhbXAgd2hlbiBhcHByb3ByaWF0ZS4KKy0gKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQg c2NoZWRfaW5mb19xdWV1ZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0KQorLXsKKy0JaWYgKHVubGlr ZWx5KHNjaGVkX2luZm9fb24oKSkpCistCQlpZiAoIXQtPnNjaGVkX2luZm8ubGFzdF9xdWV1ZWQp CistCQkJdC0+c2NoZWRfaW5mby5sYXN0X3F1ZXVlZCA9IHRhc2tfcnEodCktPmNsb2NrOworLX0K Ky0KKy0vKgorLSAqIENhbGxlZCB3aGVuIGEgcHJvY2VzcyBjZWFzZXMgYmVpbmcgdGhlIGFjdGl2 ZS1ydW5uaW5nIHByb2Nlc3MsIGVpdGhlcgorLSAqIHZvbHVudGFyaWx5IG9yIGludm9sdW50YXJp bHkuICBOb3cgd2UgY2FuIGNhbGN1bGF0ZSBob3cgbG9uZyB3ZSByYW4uCistICogQWxzbywgaWYg dGhlIHByb2Nlc3MgaXMgc3RpbGwgaW4gdGhlIFRBU0tfUlVOTklORyBzdGF0ZSwgY2FsbAorLSAq IHNjaGVkX2luZm9fcXVldWVkKCkgdG8gbWFyayB0aGF0IGl0IGhhcyBub3cgYWdhaW4gc3RhcnRl ZCB3YWl0aW5nIG9uCistICogdGhlIHJ1bnF1ZXVlLgorLSAqLworLXN0YXRpYyBpbmxpbmUgdm9p ZCBzY2hlZF9pbmZvX2RlcGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCisteworLQl1bnNpZ25l ZCBsb25nIGxvbmcgZGVsdGEgPSB0YXNrX3JxKHQpLT5jbG9jayAtCistCQkJCQl0LT5zY2hlZF9p bmZvLmxhc3RfYXJyaXZhbDsKKy0KKy0JcnFfc2NoZWRfaW5mb19kZXBhcnQodGFza19ycSh0KSwg ZGVsdGEpOworLQorLQlpZiAodC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQorLQkJc2NoZWRfaW5m b19xdWV1ZWQodCk7CistfQorLQorLS8qCistICogQ2FsbGVkIHdoZW4gdGFza3MgYXJlIHN3aXRj aGVkIGludm9sdW50YXJpbHkgZHVlLCB0eXBpY2FsbHksIHRvIGV4cGlyaW5nCistICogdGhlaXIg dGltZSBzbGljZS4gIChUaGlzIG1heSBhbHNvIGJlIGNhbGxlZCB3aGVuIHN3aXRjaGluZyB0byBv ciBmcm9tCistICogdGhlIGlkbGUgdGFzay4pICBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiBwcmV2 ICE9IG5leHQuCistICovCistc3RhdGljIGlubGluZSB2b2lkCistX19zY2hlZF9pbmZvX3N3aXRj aChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKKy17 CistCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHByZXYpOworLQorLQkvKgorLQkgKiBwcmV2IG5v dyBkZXBhcnRzIHRoZSBjcHUuICBJdCdzIG5vdCBpbnRlcmVzdGluZyB0byByZWNvcmQKKy0JICog c3RhdHMgYWJvdXQgaG93IGVmZmljaWVudCB3ZSB3ZXJlIGF0IHNjaGVkdWxpbmcgdGhlIGlkbGUK Ky0JICogcHJvY2VzcywgaG93ZXZlci4KKy0JICovCistCWlmIChwcmV2ICE9IHJxLT5pZGxlKQor LQkJc2NoZWRfaW5mb19kZXBhcnQocHJldik7CistCistCWlmIChuZXh0ICE9IHJxLT5pZGxlKQor LQkJc2NoZWRfaW5mb19hcnJpdmUobmV4dCk7CistfQorLXN0YXRpYyBpbmxpbmUgdm9pZAorLXNj aGVkX2luZm9fc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3Ry dWN0ICpuZXh0KQorLXsKKy0JaWYgKHVubGlrZWx5KHNjaGVkX2luZm9fb24oKSkpCistCQlfX3Nj aGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOworLX0KKy0jZWxzZQorLSNkZWZpbmUgc2NoZWRf aW5mb19xdWV1ZWQodCkJCQlkbyB7IH0gd2hpbGUgKDApCistI2RlZmluZSBzY2hlZF9pbmZvX3Jl c2V0X2RlcXVldWVkKHQpCWRvIHsgfSB3aGlsZSAoMCkKKy0jZGVmaW5lIHNjaGVkX2luZm9fZGVx dWV1ZWQodCkJCQlkbyB7IH0gd2hpbGUgKDApCistI2RlZmluZSBzY2hlZF9pbmZvX3N3aXRjaCh0 LCBuZXh0KQkJZG8geyB9IHdoaWxlICgwKQorLSNlbmRpZiAvKiBDT05GSUdfU0NIRURTVEFUUyB8 fCBDT05GSUdfVEFTS19ERUxBWV9BQ0NUICovCistCistLyoKKy0gKiBUaGUgZm9sbG93aW5nIGFy ZSBmdW5jdGlvbnMgdGhhdCBzdXBwb3J0IHNjaGVkdWxlci1pbnRlcm5hbCB0aW1lIGFjY291bnRp bmcuCistICogVGhlc2UgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkgY2FsbGVkIGF0IHRoZSB0aW1l ciB0aWNrLiAgTm9uZSBvZiB0aGlzIGRlcGVuZHMKKy0gKiBvbiBDT05GSUdfU0NIRURTVEFUUy4K Ky0gKi8KKy0KKy0vKioKKy0gKiBhY2NvdW50X2dyb3VwX3VzZXJfdGltZSAtIE1haW50YWluIHV0 aW1lIGZvciBhIHRocmVhZCBncm91cC4KKy0gKgorLSAqIEB0c2s6CVBvaW50ZXIgdG8gdGFzayBz dHJ1Y3R1cmUuCistICogQGNwdXRpbWU6CVRpbWUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50 IHRoZSB1dGltZSBmaWVsZCBvZiB0aGUKKy0gKgkJdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0 dXJlLgorLSAqCistICogSWYgdGhyZWFkIGdyb3VwIHRpbWUgaXMgYmVpbmcgbWFpbnRhaW5lZCwg Z2V0IHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZQorLSAqIHJ1bm5pbmcgQ1BVIGFuZCB1cGRhdGUgdGhl IHV0aW1lIGZpZWxkIHRoZXJlLgorLSAqLworLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dy b3VwX3VzZXJfdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKy0JCQkJCSAgIGNwdXRpbWVf dCBjcHV0aW1lKQorLXsKKy0Jc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lciAqY3B1dGltZXIg PSAmdHNrLT5zaWduYWwtPmNwdXRpbWVyOworLQorLQlpZiAoIWNwdXRpbWVyLT5ydW5uaW5nKQor LQkJcmV0dXJuOworLQorLQlyYXdfc3Bpbl9sb2NrKCZjcHV0aW1lci0+bG9jayk7CistCWNwdXRp bWVyLT5jcHV0aW1lLnV0aW1lICs9IGNwdXRpbWU7CistCXJhd19zcGluX3VubG9jaygmY3B1dGlt ZXItPmxvY2spOworLX0KKy0KKy0vKioKKy0gKiBhY2NvdW50X2dyb3VwX3N5c3RlbV90aW1lIC0g TWFpbnRhaW4gc3RpbWUgZm9yIGEgdGhyZWFkIGdyb3VwLgorLSAqCistICogQHRzazoJUG9pbnRl ciB0byB0YXNrIHN0cnVjdHVyZS4KKy0gKiBAY3B1dGltZToJVGltZSB2YWx1ZSBieSB3aGljaCB0 byBpbmNyZW1lbnQgdGhlIHN0aW1lIGZpZWxkIG9mIHRoZQorLSAqCQl0aHJlYWRfZ3JvdXBfY3B1 dGltZSBzdHJ1Y3R1cmUuCistICoKKy0gKiBJZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBt YWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVyZSBmb3IgdGhlCistICogcnVubmluZyBDUFUgYW5k IHVwZGF0ZSB0aGUgc3RpbWUgZmllbGQgdGhlcmUuCistICovCistc3RhdGljIGlubGluZSB2b2lk IGFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCistCQkJ CQkgICAgIGNwdXRpbWVfdCBjcHV0aW1lKQorLXsKKy0Jc3RydWN0IHRocmVhZF9ncm91cF9jcHV0 aW1lciAqY3B1dGltZXIgPSAmdHNrLT5zaWduYWwtPmNwdXRpbWVyOworLQorLQlpZiAoIWNwdXRp bWVyLT5ydW5uaW5nKQorLQkJcmV0dXJuOworLQorLQlyYXdfc3Bpbl9sb2NrKCZjcHV0aW1lci0+ bG9jayk7CistCWNwdXRpbWVyLT5jcHV0aW1lLnN0aW1lICs9IGNwdXRpbWU7CistCXJhd19zcGlu X3VubG9jaygmY3B1dGltZXItPmxvY2spOworLX0KKy0KKy0vKioKKy0gKiBhY2NvdW50X2dyb3Vw X2V4ZWNfcnVudGltZSAtIE1haW50YWluIGV4ZWMgcnVudGltZSBmb3IgYSB0aHJlYWQgZ3JvdXAu CistICoKKy0gKiBAdHNrOglQb2ludGVyIHRvIHRhc2sgc3RydWN0dXJlLgorLSAqIEBuczoJCVRp bWUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50IHRoZSBzdW1fZXhlY19ydW50aW1lIGZpZWxk CistICoJCW9mIHRoZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSBzdHJ1Y3R1cmUuCistICoKKy0gKiBJ ZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBtYWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVy ZSBmb3IgdGhlCistICogcnVubmluZyBDUFUgYW5kIHVwZGF0ZSB0aGUgc3VtX2V4ZWNfcnVudGlt ZSBmaWVsZCB0aGVyZS4KKy0gKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9ncm91cF9l eGVjX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCistCQkJCQkgICAgICB1bnNpZ25l ZCBsb25nIGxvbmcgbnMpCisteworLQlzdHJ1Y3QgdGhyZWFkX2dyb3VwX2NwdXRpbWVyICpjcHV0 aW1lciA9ICZ0c2stPnNpZ25hbC0+Y3B1dGltZXI7CistCistCWlmICghY3B1dGltZXItPnJ1bm5p bmcpCistCQlyZXR1cm47CistCistCXJhd19zcGluX2xvY2soJmNwdXRpbWVyLT5sb2NrKTsKKy0J Y3B1dGltZXItPmNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZSArPSBuczsKKy0JcmF3X3NwaW5fdW5s b2NrKCZjcHV0aW1lci0+bG9jayk7CistfQorZGlmZiAtcnVOIGxpbnV4LTMuMy41L2tlcm5lbC9z eXNjdGwuYyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJTkcva2VybmVsL3N5c2N0bC5j CistLS0gbGludXgtMy4zLjUva2VybmVsL3N5c2N0bC5jCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAw MDAwMDAwICswODAwCisrKysgbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2tlcm5l bC9zeXNjdGwuYwkyMDEyLTA1LTE5IDIyOjA0OjM3LjAwMDAwMDAwMCArMDgwMAorQEAgLTEyMSw3 ICsxMjEsMTIgQEAKKyBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHR3byA9IDI7Cisgc3RhdGlj IGludCBfX21heWJlX3VudXNlZCB0aHJlZSA9IDM7Cisgc3RhdGljIHVuc2lnbmVkIGxvbmcgb25l X3VsID0gMTsKKy1zdGF0aWMgaW50IG9uZV9odW5kcmVkID0gMTAwOworK3N0YXRpYyBpbnQgX19t YXliZV91bnVzZWQgb25lX2h1bmRyZWQgPSAxMDA7CisrI2lmZGVmIENPTkZJR19TQ0hFRF9SSUZT CisrZXh0ZXJuIGludCBycl9pbnRlcnZhbDsKKytleHRlcm4gaW50IHNjaGVkX2lzb19jcHU7Cisr c3RhdGljIGludCBfX3JlYWRfbW9zdGx5IG9uZV90aG91c2FuZCA9IDEwMDA7CisrI2VuZGlmCisg I2lmZGVmIENPTkZJR19QUklOVEsKKyBzdGF0aWMgaW50IHRlbl90aG91c2FuZCA9IDEwMDAwOwor ICNlbmRpZgorQEAgLTI1MSw3ICsyNTYsNyBAQAorIAl7IH0KKyB9OwogIAotK2lmZGVmIENPTkZJ R19TQ0hFRF9CRlMKLStvYmoteSArPSBiZnMubyBjbG9jay5vCi0rZWxzZQotIG9iai15ICs9IGNv cmUubyBjbG9jay5vIGlkbGVfdGFzay5vIGZhaXIubyBydC5vIHN0b3BfdGFzay5vCi0tb2JqLSQo Q09ORklHX1NNUCkgKz0gY3B1cHJpLm8KLSBvYmotJChDT05GSUdfU0NIRURfQVVUT0dST1VQKSAr PSBhdXRvX2dyb3VwLm8KLS1vYmotJChDT05GSUdfU0NIRURTVEFUUykgKz0gc3RhdHMubwotIG9i ai0kKENPTkZJR19TQ0hFRF9ERUJVRykgKz0gZGVidWcubwotK2VuZGlmCi0rb2JqLSQoQ09ORklH X1NNUCkgKz0gY3B1cHJpLm8KLStvYmotJChDT05GSUdfU0NIRURTVEFUUykgKz0gc3RhdHMubwor LSNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKKysjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfREVC VUcpICYmICFkZWZpbmVkKENPTkZJR19TQ0hFRF9SSUZTKQorIHN0YXRpYyBpbnQgbWluX3NjaGVk X2dyYW51bGFyaXR5X25zID0gMTAwMDAwOwkJLyogMTAwIHVzZWNzICovCisgc3RhdGljIGludCBt YXhfc2NoZWRfZ3JhbnVsYXJpdHlfbnMgPSBOU0VDX1BFUl9TRUM7CS8qIDEgc2Vjb25kICovCisg c3RhdGljIGludCBtaW5fd2FrZXVwX2dyYW51bGFyaXR5X25zOwkJCS8qIDAgdXNlY3MgKi8KK0BA IC0yNjYsNiArMjcxLDcgQEAKKyAjZW5kaWYKICAKKyBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBr ZXJuX3RhYmxlW10gPSB7CisrI2lmbmRlZiBDT05GSUdfU0NIRURfUklGUworIAl7CisgCQkucHJv Y25hbWUJPSAic2NoZWRfY2hpbGRfcnVuc19maXJzdCIsCisgCQkuZGF0YQkJPSAmc3lzY3RsX3Nj aGVkX2NoaWxkX3J1bnNfZmlyc3QsCitAQCAtMzgzLDYgKzM4OSw3IEBACisgCQkuZXh0cmExCQk9 ICZvbmUsCisgCX0sCisgI2VuZGlmCisrI2VuZGlmIC8qICFDT05GSUdfU0NIRURfUklGUyAqLwor ICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORworIAl7CisgCQkucHJvY25hbWUJPSAicHJvdmVf bG9ja2luZyIsCitAQCAtODUwLDYgKzg1NywyNiBAQAorIAkJLnByb2NfaGFuZGxlcgk9IHByb2Nf ZG9pbnR2ZWMsCisgCX0sCisgI2VuZGlmCisrI2lmZGVmIENPTkZJR19TQ0hFRF9SSUZTCisrCXsK KysJCS5wcm9jbmFtZQk9ICJycl9pbnRlcnZhbCIsCisrCQkuZGF0YQkJPSAmcnJfaW50ZXJ2YWws CisrCQkubWF4bGVuCQk9IHNpemVvZiAoaW50KSwKKysJCS5tb2RlCQk9IDA2NDQsCisrCQkucHJv Y19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorKwkJLmV4dHJhMQkJPSAmb25lLAor KwkJLmV4dHJhMgkJPSAmb25lX3Rob3VzYW5kLAorKwl9LAorKwl7CisrCQkucHJvY25hbWUJPSAi aXNvX2NwdSIsCisrCQkuZGF0YQkJPSAmc2NoZWRfaXNvX2NwdSwKKysJCS5tYXhsZW4JCT0gc2l6 ZW9mIChpbnQpLAorKwkJLm1vZGUJCT0gMDY0NCwKKysJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19k b2ludHZlY19taW5tYXgsCisrCQkuZXh0cmExCQk9ICZ6ZXJvLAorKwkJLmV4dHJhMgkJPSAmb25l X2h1bmRyZWQsCisrCX0sCisrI2VuZGlmCisgI2lmIGRlZmluZWQoQ09ORklHX1MzOTApICYmIGRl ZmluZWQoQ09ORklHX1NNUCkKKyAJeworIAkJLnByb2NuYW1lCT0gInNwaW5fcmV0cnkiLAorZGlm ZiAtcnVOIGxpbnV4LTMuMy41L2xpYi9LY29uZmlnLmRlYnVnIGxpbnV4LTMuMy41LVJJRlMtUkMz LUJSQUlOLUVBVElORy9saWIvS2NvbmZpZy5kZWJ1ZworLS0tIGxpbnV4LTMuMy41L2xpYi9LY29u ZmlnLmRlYnVnCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICswODAwCisrKysgbGludXgt My4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL2xpYi9LY29uZmlnLmRlYnVnCTIwMTItMDUtMTkg MjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtODc1LDcgKzg3NSw3IEBACiAgCisgY29uZmln IFJDVV9UT1JUVVJFX1RFU1QKKyAJdHJpc3RhdGUgInRvcnR1cmUgdGVzdHMgZm9yIFJDVSIKKy0J ZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKysJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIVND SEVEX0JGUworIAlkZWZhdWx0IG4KKyAJaGVscAorIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEg a2VybmVsIG1vZHVsZSB0aGF0IHJ1bnMgdG9ydHVyZSB0ZXN0cworZGlmZiAtcnVOIGxpbnV4LTMu My41L01ha2VmaWxlIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9NYWtlZmlsZQor LS0tIGxpbnV4LTMuMy41L01ha2VmaWxlCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICsw ODAwCisrKysgbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL01ha2VmaWxlCTIwMTIt MDUtMjYgMTc6MTE6MDkuMjI2NjM5ODQ0ICswODAwCitAQCAtMSw3ICsxLDcgQEAKKyBWRVJTSU9O ID0gMworIFBBVENITEVWRUwgPSAzCisgU1VCTEVWRUwgPSA1CistRVhUUkFWRVJTSU9OID0KKytF WFRSQVZFUlNJT04gPS1SSUZTLVYzLVJDMy1CUkFJTi1FQVRJTkcKKyBOQU1FID0gU2FiZXItdG9v dGhlZCBTcXVpcnJlbAorIAorICMgKkRPQ1VNRU5UQVRJT04qCitkaWZmIC1ydU4gbGludXgtMy4z LjUvbW0vbWVtb3J5LmMgbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL21tL21lbW9y eS5jCistLS0gbGludXgtMy4zLjUvbW0vbWVtb3J5LmMJMjAxMi0wNS0wNyAyMzo1NTozMC4wMDAw MDAwMDAgKzA4MDAKKysrKyBsaW51eC0zLjMuNS1SSUZTLVJDMy1CUkFJTi1FQVRJTkcvbW0vbWVt b3J5LmMJMjAxMi0wNS0xOSAyMjowNDozNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zMDExLDcgKzMw MTEsNyBAQAorIAltZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHBhZ2UsIHB0cik7Cisg CisgCXN3YXBfZnJlZShlbnRyeSk7CistCWlmICh2bV9zd2FwX2Z1bGwoKSB8fCAodm1hLT52bV9m bGFncyAmIFZNX0xPQ0tFRCkgfHwgUGFnZU1sb2NrZWQocGFnZSkpCisrCWlmICgodm1hLT52bV9m bGFncyAmIFZNX0xPQ0tFRCkgfHwgUGFnZU1sb2NrZWQocGFnZSkpCisgCQl0cnlfdG9fZnJlZV9z d2FwKHBhZ2UpOworIAl1bmxvY2tfcGFnZShwYWdlKTsKKyAJaWYgKHN3YXBjYWNoZSkgeworZGlm ZiAtcnVOIGxpbnV4LTMuMy41L21tL3BhZ2Utd3JpdGViYWNrLmMgbGludXgtMy4zLjUtUklGUy1S QzMtQlJBSU4tRUFUSU5HL21tL3BhZ2Utd3JpdGViYWNrLmMKKy0tLSBsaW51eC0zLjMuNS9tbS9w YWdlLXdyaXRlYmFjay5jCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAwMDAwICswODAwCisrKysg bGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL21tL3BhZ2Utd3JpdGViYWNrLmMJMjAx Mi0wNS0xOSAyMjowNDozNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC02NSw3ICs2NSw3IEBACisgLyoK KyAgKiBTdGFydCBiYWNrZ3JvdW5kIHdyaXRlYmFjayAodmlhIHdyaXRlYmFjayB0aHJlYWRzKSBh dCB0aGlzIHBlcmNlbnRhZ2UKKyAgKi8KKy1pbnQgZGlydHlfYmFja2dyb3VuZF9yYXRpbyA9IDEw OworK2ludCBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvID0gMTsKKyAKKyAvKgorICAqIGRpcnR5X2Jh Y2tncm91bmRfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEgZnVu Y3Rpb24gb2YKK0BAIC04Miw3ICs4Miw3IEBACisgLyoKKyAgKiBUaGUgZ2VuZXJhdG9yIG9mIGRp cnR5IGRhdGEgc3RhcnRzIHdyaXRlYmFjayBhdCB0aGlzIHBlcmNlbnRhZ2UKKyAgKi8KKy1pbnQg dm1fZGlydHlfcmF0aW8gPSAyMDsKKytpbnQgdm1fZGlydHlfcmF0aW8gPSAxOworIAorIC8qCisg ICogdm1fZGlydHlfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEg ZnVuY3Rpb24gb2YKK2RpZmYgLXJ1TiBsaW51eC0zLjMuNS9tbS9zd2FwZmlsZS5jIGxpbnV4LTMu My41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9tbS9zd2FwZmlsZS5jCistLS0gbGludXgtMy4zLjUv bW0vc3dhcGZpbGUuYwkyMDEyLTA1LTA3IDIzOjU1OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIGxp bnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9tbS9zd2FwZmlsZS5jCTIwMTItMDUtMTkg MjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtMjg4LDcgKzI4OCw3IEBACisgCQlzY2FuX2Jh c2UgPSBvZmZzZXQgPSBzaS0+bG93ZXN0X2JpdDsKKyAKKyAJLyogcmV1c2Ugc3dhcCBlbnRyeSBv ZiBjYWNoZS1vbmx5IHN3YXAgaWYgbm90IGJ1c3kuICovCistCWlmICh2bV9zd2FwX2Z1bGwoKSAm JiBzaS0+c3dhcF9tYXBbb2Zmc2V0XSA9PSBTV0FQX0hBU19DQUNIRSkgeworKwlpZiAoc2ktPnN3 YXBfbWFwW29mZnNldF0gPT0gU1dBUF9IQVNfQ0FDSEUpIHsKKyAJCWludCBzd2FwX3dhc19mcmVl ZDsKKyAJCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworIAkJc3dhcF93YXNfZnJlZWQgPSBfX3Ry eV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCk7CitAQCAtMzc3LDcgKzM3Nyw3IEBACisgCQkJ c3Bpbl9sb2NrKCZzd2FwX2xvY2spOworIAkJCWdvdG8gY2hlY2tzOworIAkJfQorLQkJaWYgKHZt X3N3YXBfZnVsbCgpICYmIHNpLT5zd2FwX21hcFtvZmZzZXRdID09IFNXQVBfSEFTX0NBQ0hFKSB7 CisrCQlpZiAoc2ktPnN3YXBfbWFwW29mZnNldF0gPT0gU1dBUF9IQVNfQ0FDSEUpIHsKKyAJCQlz cGluX2xvY2soJnN3YXBfbG9jayk7CisgCQkJZ290byBjaGVja3M7CisgCQl9CitAQCAtMzkyLDcg KzM5Miw3IEBACisgCQkJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOworIAkJCWdvdG8gY2hlY2tzOwor IAkJfQorLQkJaWYgKHZtX3N3YXBfZnVsbCgpICYmIHNpLT5zd2FwX21hcFtvZmZzZXRdID09IFNX QVBfSEFTX0NBQ0hFKSB7CisrCQlpZiAoc2ktPnN3YXBfbWFwW29mZnNldF0gPT0gU1dBUF9IQVNf Q0FDSEUpIHsKKyAJCQlzcGluX2xvY2soJnN3YXBfbG9jayk7CisgCQkJZ290byBjaGVja3M7Cisg CQl9CitAQCAtNzA2LDggKzcwNiw3IEBACisgCQkgKiBOb3QgbWFwcGVkIGVsc2V3aGVyZSwgb3Ig c3dhcCBzcGFjZSBmdWxsPyBGcmVlIGl0IQorIAkJICogQWxzbyByZWNoZWNrIFBhZ2VTd2FwQ2Fj aGUgbm93IHBhZ2UgaXMgbG9ja2VkIChhYm92ZSkuCisgCQkgKi8KKy0JCWlmIChQYWdlU3dhcENh Y2hlKHBhZ2UpICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpICYmCistCQkJCSghcGFnZV9tYXBwZWQo cGFnZSkgfHwgdm1fc3dhcF9mdWxsKCkpKSB7CisrCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSAm JiAhUGFnZVdyaXRlYmFjayhwYWdlKSkgeworIAkJCWRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFn ZSk7CisgCQkJU2V0UGFnZURpcnR5KHBhZ2UpOworIAkJfQorZGlmZiAtcnVOIGxpbnV4LTMuMy41 L21tL3Ztc2Nhbi5jIGxpbnV4LTMuMy41LVJJRlMtUkMzLUJSQUlOLUVBVElORy9tbS92bXNjYW4u YworLS0tIGxpbnV4LTMuMy41L21tL3Ztc2Nhbi5jCTIwMTItMDUtMDcgMjM6NTU6MzAuMDAwMDAw MDAwICswODAwCisrKysgbGludXgtMy4zLjUtUklGUy1SQzMtQlJBSU4tRUFUSU5HL21tL3Ztc2Nh bi5jCTIwMTItMDUtMTkgMjI6MDQ6MzcuMDAwMDAwMDAwICswODAwCitAQCAtMTUzLDcgKzE1Myw3 IEBACisgLyoKKyAgKiBGcm9tIDAgLi4gMTAwLiAgSGlnaGVyIG1lYW5zIG1vcmUgc3dhcHB5Lgor ICAqLworLWludCB2bV9zd2FwcGluZXNzID0gNjA7CisraW50IHZtX3N3YXBwaW5lc3MgPSAxMDsK KyBsb25nIHZtX3RvdGFsX3BhZ2VzOwkvKiBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIHdoaWNo IHRoZSBWTSBjb250cm9scyAqLworIAorIHN0YXRpYyBMSVNUX0hFQUQoc2hyaW5rZXJfbGlzdCk7 CitAQCAtOTk5LDcgKzk5OSw3IEBACisgCisgYWN0aXZhdGVfbG9ja2VkOgorIAkJLyogTm90IGEg Y2FuZGlkYXRlIGZvciBzd2FwcGluZywgc28gcmVjbGFpbSBzd2FwIHNwYWNlLiAqLworLQkJaWYg KFBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYgdm1fc3dhcF9mdWxsKCkpCisrCQlpZiAoUGFnZVN3YXBD YWNoZShwYWdlKSkKKyAJCQl0cnlfdG9fZnJlZV9zd2FwKHBhZ2UpOworIAkJVk1fQlVHX09OKFBh Z2VBY3RpdmUocGFnZSkpOworIAkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKK0BAIC0yMjAyLDYgKzIy MDIsMzUgQEAKKyB9CisgCisgLyoKKysgKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGFkanVzdCBuaWNl IGxldmVsIG9mIGtzd2FwZCwgYmFzZWQgb24gdGhlIHByaW9yaXR5IG9mCisrICogdGhlIHRhc2sg KHApIHRoYXQgY2FsbGVkIGl0LiBJZiBpdCBpcyBhbHJlYWR5IGhpZ2hlciBwcmlvcml0eSB3ZSBk byBub3QKKysgKiBkZW1vdGUgaXRzIG5pY2UgbGV2ZWwgc2luY2UgaXQgaXMgc3RpbGwgd29ya2lu ZyBvbiBiZWhhbGYgb2YgYSBoaWdoZXIKKysgKiBwcmlvcml0eSB0YXNrLiBXaXRoIGtlcm5lbCB0 aHJlYWRzIHdlIGxlYXZlIGl0IGF0IG5pY2UgMC4KKysgKgorKyAqIFdlIGRvbid0IGV2ZXIgcnVu IGtzd2FwZCByZWFsIHRpbWUsIHNvIGlmIGEgcmVhbCB0aW1lIHRhc2sgY2FsbHMga3N3YXBkIHdl CisrICogc2V0IGl0IHRvIGhpZ2hlc3QgU0NIRURfTk9STUFMIHByaW9yaXR5LgorKyAqLworK3N0 YXRpYyBpbmxpbmUgaW50IGVmZmVjdGl2ZV9zY19wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkK Kyt7CisrCWlmIChsaWtlbHkocC0+bW0pKSB7CisrCQlpZiAocnRfdGFzayhwKSkKKysJCQlyZXR1 cm4gLTIwOworKwkJaWYgKHAtPnBvbGljeSA9PSBTQ0hFRF9JRExFUFJJTykKKysJCQlyZXR1cm4g MTk7CisrCQlyZXR1cm4gdGFza19uaWNlKHApOworKwl9CisrCXJldHVybiAwOworK30KKysKKytz dGF0aWMgdm9pZCBzZXRfa3N3YXBkX25pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICprc3dhcGQsIGlu dCBhY3RpdmUpCisreworKwlsb25nIG5pY2UgPSBlZmZlY3RpdmVfc2NfcHJpbyhjdXJyZW50KTsK KysKKysJaWYgKHRhc2tfbmljZShrc3dhcGQpID4gbmljZSB8fCAhYWN0aXZlKQorKwkJc2V0X3Vz ZXJfbmljZShrc3dhcGQsIG5pY2UpOworK30KKysKKysvKgorICAqIFRoaXMgaXMgdGhlIGRpcmVj dCByZWNsYWltIHBhdGgsIGZvciBwYWdlLWFsbG9jYXRpbmcgcHJvY2Vzc2VzLiAgV2Ugb25seQor ICAqIHRyeSB0byByZWNsYWltIHBhZ2VzIGZyb20gem9uZXMgd2hpY2ggd2lsbCBzYXRpc2Z5IHRo ZSBjYWxsZXIncyBhbGxvY2F0aW9uCisgICogcmVxdWVzdC4KK0BAIC0zMTA2LDYgKzMxMzUsNyBA QAorIHZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCBlbnVt IHpvbmVfdHlwZSBjbGFzc3pvbmVfaWR4KQorIHsKKyAJcGdfZGF0YV90ICpwZ2RhdDsKKysJaW50 IGFjdGl2ZTsKKyAKKyAJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKKyAJCXJldHVybjsKK0BA IC0zMTE3LDcgKzMxNDcsOSBAQAorIAkJcGdkYXQtPmtzd2FwZF9tYXhfb3JkZXIgPSBvcmRlcjsK KyAJCXBnZGF0LT5jbGFzc3pvbmVfaWR4ID0gbWluKHBnZGF0LT5jbGFzc3pvbmVfaWR4LCBjbGFz c3pvbmVfaWR4KTsKKyAJfQorLQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnBnZGF0LT5rc3dhcGRf d2FpdCkpCisrCWFjdGl2ZSA9IHdhaXRxdWV1ZV9hY3RpdmUoJnBnZGF0LT5rc3dhcGRfd2FpdCk7 CisrCXNldF9rc3dhcGRfbmljZShwZ2RhdC0+a3N3YXBkLCBhY3RpdmUpOworKwlpZiAoIWFjdGl2 ZSkKKyAJCXJldHVybjsKKyAJaWYgKHpvbmVfd2F0ZXJtYXJrX29rX3NhZmUoem9uZSwgb3JkZXIs IGxvd193bWFya19wYWdlcyh6b25lKSwgMCwgMCkpCisgCQlyZXR1cm47Cg== --bcaec55245ec7b0c0704c116cd8c-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/